Recording MIDI internal notes
-
Hi mates!
I cannot figure out how midi routing works. I want to record midi notes generated with a simple Synth.addNoteOn(random note) but Midi Player is does not see them. Instead it records the original played note. No mater were I place the Midi Player. And in some other chain, it will not get midi from root chain?? Any help?HiseSnippet 1439.3oc0X80aZbDD+NCWRMIwIQppOuJuTbK5BDSv1ppJ17OGpCNHe3zDopFs9tAXaN1kr2BIjp90pO2OB8w9wHeCZm8tCyc1TGDxIs4DBwN6N67am42L6bzQJbgf.gzvLW2oi.CyaZ4LkqFTa.kwMZU2vbCq1z.EHIQhpNcDMH.7LLMybfVf45YMBed+ipR8obWXtHCimIXtvSXCYp4R6r2gLe+lTOnKaXhUWduVtBdMguXLhmLVEMFQceEsObDUur0rLdLMXfg42XU7gU.X6s544Q2ZKuJUpr6N6Vd2RzdEKSOsTkcK+fxa+fc1tmg40Z3wTBoihpf.CyrUEdScFHdCOx.OiEvN0GzCJY3fVNRbSgum9HpkZTa.y2qyLGUfggoUm4tsLQtsuzpMyicl74tu6DNAYtFIcflqkFdYRAuR+avaAPZsDP55yhjgPxmNEjyhjsp2hDIoTJfTarTBbkC75wPpH36eT7TckXrHo7mHDiZvoH77RJVu6mhK0YDjdByLWQmUC8wpIyGzmayYCvUqOiHIoNUQMLcs1tnMuakC2o1fNAGXa+tC63zseyWXiOMs6XaWeRY96pexaCZpEcn5nZ+x96bRusredG65O+YC496WUY+C1Mqaau82dncW6pcdXsN0mXWcqSZbhWUCscOiaZZpYyNr9bpZrDkcsiFOrJEQ7YNg6r2QhgLbdcTZtv5.eQh0NXzYIUIymh75obrcggiDyE7y6YjfKjMhKbWKGWIajZ9LZm0MrZwwL6dTLhmjMDsVi09o0rpIvUvU1CouBZJwAmoQ9JEKVffes42kKWt6eexAfhPIRnGH0bHhRPTC.RHmaTHmyNGleGnHSnxPwwLQx2SBq4X2GTyor4uWR158zVAMRqdmeSIdBHf+0Jx.5DfP4SItQXl3KvRLdEHuAzZxQ9nFStR.IfHRQ2lZJIHlxS5wjApbrd4SfLaVPC8pxu4l490bD7A2nZQaffCjSwCxaXpAjx2uLQggeRvr3e3pStUQ1Me4BD8G737a4xkbdI3Jjd40tydi4tJlfi13HgBdJOu17q2FibX0PazDBIzXBdFyqjiATi0ibfTOuXEJUfzlhRjTtGFxxWdmBUJtYARIcPqXn0Im2L85EYmyMmlBHE99XHYQSqY8xKSw77wCOEjEvvtOB1YKD4loKHbskqfPbzMwBE7Vbl5oif3wWd0aiXJM9qSZEVq.o7wxv0MBjJlFNl0gI3cWQ4OqaUGBdkRLxXAIWXIdg2Xec9ax595aGim.8GoRvzIQ7.lZZpBjK+kAEu7BjKIDuqUGlxcvhw3ZK.i56Y9Hfw3qPukUid8.W0b.l0p4yW06KWdyuQj4ugkCiCg4QgF+qBGS9QcUkC.NH0NuRWR+O+4x1+ynkt+mm5pPyiW8xCFIBRcsrCLj0EqAEjzZmDfEogWerNZlTdMAdOzhl58OpIdHWnNN5xXgzh8GJFyScKz4uKO6xk5lNiHw5WPCMY+X0iU1kiy7AJh7IqJvUBbMMSf2aGg2qas+iq6bbbkfveSZvm.9XIvzz71BtXz.Am4ljCbLnjr98AYRzuviz9JE1PH1G4jToF0AW5zKHMZwWTxS.DZIE+X7Degs6LA+0uumy3.UpDzW7GGC9.MHUJWCWAFdfUrP7GnqbqkjlbKqnCIIrfv+MbjkkRuwLrFEQ9+MXuoUHs3yA+5sshIreV3X2vJNW5yAW6k1nSlkpQmqb7t5M8b0.kiEiULde7kDjr2hUpvWV0A66vEPjv4fOZHKy0z8NDMtndbXeA.2KbveiOwSVRO1LdxRyl7ShMFRckhW5F8pF5ZteQnD7byCey70sZqGSJYD95GIiwCwlFdoqa5s5BJ9fUUwsVUEKupJ9vUUwJqphaupJtyGVQcOc6OVIFFkxZXztSin+aGyy9emLyX7OrNzMZD
-
@hisefilo
So, I was expecting to fix the problem by putting the MIDI Player in a subsequent container, as from my experience that new container should "see" the generated MIDI notes as incoming MIDI,
but this isn't the case here.When moved, the MIDI Player simply ignores any MIDI, so it doesn't record anything. I wonder why that is because it would certainly be useful to be able to record MIDI that is generated through scripting.
-
But here's a secret doc that might help (the original link to this in the documentation is broken) - https://github.com/christophhart/hise_documentation/blob/298ec85a9a731fda2b2fe588a1a03c7e832a239b/tutorials/recipes/event-processing/create-midi-sequence.md
-
@d-healey Hi mate! MidiPlayer.record() is already working but only for incoming midi messages I guess. The snippet I posted uses that function. is already implemented...??
Content.makeFrontInterface(600, 600); // Get a reference to the MIDI player. const var MIDIPlayer1 = Synth.getMidiPlayer("MIDI Player1"); // If the MIDI player doesn't have any content loaded, we // need to create a empty sequence first if(MIDIPlayer1.isEmpty()) { // Create one bar with 4/4 time signature MIDIPlayer1.create(4, 4, 4); } MIDIPlayer1.record(0);
-
I also found this doc you sent here on the forum posted by @ustk some time ago. But cannot get timestamps to work. (My poor approach was with Engine.getUptime)
HiseSnippet 1832.3oc6XEtbaabDFPRnoDs0SRal19ya7jYJjCKnnDMk83oikDEkCarjkEocxjNsdNAbj7hAtC4vAoxoSeG6iPeD7aP6t.fDGjnTn0jzIosb3evt2t62t2d6t2cpRFvRSkJKa2QyRXV1+bmgyD5o8lR4BqAGZY+abBnI5LE6Dolk9lrT8aeyV96XcvrDZZJKzx1d8mgK1twFV4+d2SOfFQEArJRVVuVxCXOmGy0UTOcuOmGEcDMjMhGar5N6MHPJ5IijY.vV2YKqDZvaoSXmPwksli0mQSmZY+.msdXWFa2cFGFR2Ymvtc693G83NOtMc7Vcnm2t6i6rcmc29Q6N1x9mzOjqkpgZJ3EV1abfLb1voxKEEF307T94QL7i1VCAKWP9HYTH5hHUqdS4QgmNOhkZYY6bZU7a8h32G6bLOjufdUb7CyYPpjvL.ZuVc3sdM301DdaY.uk.o0LfzGLeKMGRQzYLUNTtmywCNb.ofR6Z.oWlRwD5gruIiUaG7cOsj0HErWXR+4RYReAEfWnIYT6mCKcXBqNC60WYes8s5qVnacDOhg9s87OfUi9HjjbHUSsr63ryC8Ei594Op2zidYOe+ieY+u5q2222+K8822+T+X9YCGMX6uBn3en+EeZluuEpnEIa11X54P9DAEOG.4RmjEe.EfvBu5C26DYLG3ig8JhGxDKiLFw.uWoMOfTDFqEoFwhSjUD9K6YYr4tQwl6G4LLPwSzUbPu+WURsJcq117ZEbsV6O553pXSHZzAQD8DWWWtHhKXjwYh.MWJHRwAYZsTrcOoPqjQdAR.WBHWnI4BZTFaS2+laiEpf7GH8ES.M3OgoeUBR2aym392AUiJ.DCYzatN7teo1u+l9oH8baziFEgYOdW03ahHj3t.bzvPrvzKDdQ7T.PASoBAKpIQ.TEYwmyT.JYQx.tdVSRhLkixgPl.+tfpHwUHNPwfjxigHFTs4yvC+JD63JiQzgwbuX+BKZx.obRt07pLr4BdcID7liESl8J.sWI3qYQH7kpowIdUA0gvmPV+QR0Kyf.NSc.f5TuE9Vo7KbP4J4fxENnrvAGO1jys4gxa1Ij2Qmf7ojHlXhdZMuA2i8SxRm5EWRtUqJZRLMy854FiG++SN9efjCyTg4oGWK4vsUKxno7TxkvnGjofSRfoLxSHHokc87cw.SDDX9S+YrbStPOioIThhMlov0PzRhdJij2IMIuSpuKL0RpNOphjK6uBpIejJzupZD6ceydv2GKqAFYv3qpTRnjkJ9cZxT5ELBULiDTTDkDIgAmBaRtjgRJftrHlJ1CAjB8NzyV3RjwbUp1kO1y.Y97z93p71bdFOnndEJ.pMSNGbjK45ojNs5j2hfjNuIX9pMUUgc85zjf+Kh0sZYtBEKPpB81Bc0apES6asECftSjWBNL4qgwPIX6r7vEtIuj8CHZEB4IZBWWFVxUAkjnjIrh8Hi.jRFCqz2sgInGGA4NkmHdNXFunUnUV6auUVayVYFgfx9X4tJfhBi5CQboh0+BT+ZEDIdhaCildMIyW3jpSYaBToPFmBh.C.45tUSR2c2r1ZWTyAHe890jee0LAMIsQi51.vcpLh4mn3fRutPEqpUqqV.98q5ay4msgTHxUCOPo773iYo8aLDTQ0n9DvX6cZR7tcedyENM3POvswpUorwxKS13VqQ13FJP136jpiMdPqqDGKy9hPHmmpUmMZvkyY9YyEacKNXhKDlHs9b8Nq1b8kkyLVnTLPv0uHgItoKdYUd5CuuSIpfkpyGH9dki9VbVyhiST6TdvyJGxliXa8dH91KQ7WMH+VFvL0kP5z7ZKZNFArOjcAbq2hA0a3bHK8sZYRNlKqX.AsU.0+0JSNZuYUe7I6Y8doosMzz+L4JZ55Ws.twpLLKBu8h40XwK6Wx.xKpc6wAXH.RBmU69deWc21UEhejyobcvzkiw0VBFwznuGvX4KB7Kb5OdLKPWAvMbN5K+945+ll+dEl+m4LDJajOARtw+04eS9BbbhmwDLEF7ZeKOmy+XUeNmjU94bdQfFL+Hn8TJTzplhGxh4ifL5TShuJkcjh8Mmg6llz6IgaguLVu6oGAN4RkYHN+RdZw9wxLQs6fe0mlXiUqD12xqDswO3dkneDbX211.iMliwgbryWeAN0.PAw3uDpqNllEomSsdt7wRgLYpTvCL2nOioU7ISXJSruTGZest16c8w6cFKhQMSZ+j8dNjrQUPbhcGiEsW8Xwsse8acJfKAO.R9waQ50+u6hzmIyzbwDXDcEG5H6.SENDpMFvJGBDGdxdMr9Vw2ageWTbTDl+w+B9UxrM9scIy1yY9eDaDSCTx2DTLAElm9Syo.9sH+sSa3bL9M4ZycYYECU4dSPPcUcMA29tJ3N2UA6bWE7g2UA6dWEb26pfO5aWPrIz9YZYbwQSKqiOsewyoau3o9sW25eC3+GRZH
-
@hisefilo said in Recording MIDI internal notes:
I also found this doc you sent here on the forum posted by @ustk
Did you see his piano roll? Perhaps that will help?
Piano Roll UI Component?
Alright so here's a prototype of a MIDI editor using child panels. The notes are created in an array of MessageHolders Updating the notes doesn't work yet b...
Forum (forum.hise.audio)
-
@hisefilo Try this snippet
HiseSnippet 2144.3oc4Y80baabDGPRvIjIQIYZm97E9DThJLo9upmNVh+QQxVRVQTR1JYZy.BdjDg.2Ac3fpY73m62f9QoO2oeB5i8ig+Fzt6c.jflzxbnSZimvwVRX2au629a2au8.OSv8nwwbggYwKFDQML+XqlCXxd0545yLNptg4uw5bpGWzlbheaexobIM1n5fH23XZaCSyE+ZbflEVxP84UOrpafKyiNRjgwUbeO5w9g9xQROauG6GDbfaa5E9g4F8F6cjGmUiGvS.PsnUYiHWu9tcom5hCaAKiCci6YX9kVq0ok2Zc1d8cprakc2dicqTYycZsQ407Zu4tqu9Vq2tyZ63t0NfQ2qQaeIWzT5hf2bop71CZ1i+WX5E3J+X+VAT7gJFMgUVK9.dPazEQoF054Gz9rL1J1vvz5rQb2hZt62ZgbzP4i3vOSofLxh7Dn4B2E7p71gW4oAuEyAuOHKzpfWf6.pPAqksN4n5GQzRpLFnpkHDTlrI8lD5XQyW8vTUWHf3Rd4Gy4QMXt.TamWLN6sfg1LhNtByEeG86oEVLPW7.+.JxAlYO.iF8WH4otqz0v7uZs61NrK15w6Tq2yZ7XGmdO6rFTmM22wo4Obcv023UkEKFHtrlysN+3Y85c4NWud0Ce1UNGlz5q7tsQusOn2fxW6bS+Jk2e8e7Qt2dyVWswSOp0wd0+19O5V9M6e0inaVs0i5W8T20dRTe55geSsAO24viBEOm9zaE0cbLPrMLu1zD2IzzuKyUlHvz1SSBq5BdUNR6TdnOnGipYBKsWcJaRwe1dX.AHWgL+dQcTZr.wEzvH9HA+48Lxk6rjN24ysZ5I7ijizfD5GYcDSREcbgLj7YO5wZX9OspwgAvjNgt8oGHfGFZf8VkKuJA9wJOnXwNILOoOmQ3LrBySX1qT7EEKT7kEIutpNclpNbgD7f.pXppQpUbWFZyRBaQEqRt0MHgNbf.ALdVp0rkk5o86bCjyNh4KeRDk8FycSIK3ut7HUhJvkoxfwEQEReDBl0o2BET0AlBV0ow8k7HiYNpULshNULsf1B2qfEf9XIIst+ejjEDca2tZhTxY1kz5JsJoRY7+XLzmE3yn4oV8fxHXONjlwf4IOGOTnSLUZWRRetrTpdxCIkZBNVJN7YcKQ9CjrUFVwBEK32gXmNYEfYq.VrAmoqPY1cbCho3.0x854x5RaaiRdYQsweQl0E.qFUdDGyKAeRuX3Ll5E0bCBvpY1ul2gDfl0vIX5bFpAYrMuCJCGy6JgonI0hgdZlJrTeZkdmH321kWAFWdowfs1Ht.xIiHmzsygPzEJJncIRrvEVoAb7xOPIRjEz.Qe2eBF38uO4qoRhKnoCUfGpPjbhrGUgARjBDNojXNXA1q5Hwo6XAnR4O5pjBIuNaBTOVwvNvOFnPL5ynAqRXfrga1oAbOe4fUIQ7XezJjjIvGPta.IDV8Frtvz53InPEfSfsQPyHGhGBoxRvwFhLEtiyNzQW9JuBTxop0ydzRme.WkBB6LzjWYMMrsSg+XqHv5wR2vH6THBLTS3Q3vuC3hSf1q7aBQAV6X6Lui7kPlGTxMcZx4o7YxS4C8TtSZ037ZtKWk+l8l6e+BXdP.k0U1iv6nxJvIfX6yHwZWZkUI8f7FE9CiIUHwJeaUHL+CIPJCjLM.5YjD32Gx5hy4Zoy6P+6MSSJtIumN+LL4qRW2wnZHSzIJItmcXp3QR35MdSjE+Z0kvZ.pBWC2f4jtNPMLAE5bfopLN1FapD6zvtDToPJRn5ehEGzDjLVuuELqCWProDf1GN+3DiqH0wOd3IvnvBJ6TjxHhRWWVOu2zBzehKr20i5GjiC+lDnVAUTExyPhLkRskwqrxDfWmMZeSqUIa.0Mmb.cB.5KMa8XfNsGg7Gj5P8mvgfJXw7.pSjvmIs66zNAwNZvHd0Kf5pOInn9yanKEU3HE..GsObLcGeOe2.EM8hT56KROKoa1oSJN7EJdLW4yQjzkQnbEgVnvnChzFmE.GpI+gavoaE.RpvPL0kwEzF2BmZLxPcHhwxBQBWVan4LnsLnqrsUCA9WVMzgrxpjrYs6nsyvdSFCOTCrcRGf76Gc.wJO.mXcA8z4FnwJ4rur934ek14m4BonBFpT0C2xo8vo6hvvG5U6CSafyPg37c2aLCVeOKbmyTrcdZ5DwaZCI.g81Q7yAdzrHrXCx9CiYZBRAsx7+1XlOYWuvss4sSBvqCk+J33KpHUAD+Gq0W7RILn98fwte5reu7xy98SmQ394Vm4K85Mc7tvTvKl57yLdSeKGehUiNcndxQfcIqCd179JMlOnrrFJejUSnVipZhBH+N0yjm5dKEZ1jQEHoV4NdcU+qY80UEMyutpm3Igk+BnbZLzSvXu4jlzP+KfT837q1kwvEio2bNFkyKuFGt5+zT8pGd.3jS0ll3aNPktreHOgM1E++Y40sXtz+GdKX+zua6cu3vhyFbmBCZlCiepFief09GVu44oEBT+MbrJd6fH53YymvY7ndbluW9P84TovuaWpHOhmparuTB2pqVh31w1ATm5AWx60kpG7jRNlBPKuX7NCSLcCE7u+660DZXer8gW+ONmBcaEO1NqFdbHjPmSZuxcS6VyXpwmXocRhZe+urOzX4LrpiH+xFrerkJs38Ad8SsRSXeufXW1Jcuz6CT6c1myh+5rOmy4IR3lVvsxD9XCumlD1DZuvildcK7tHlKfsHnetL9r53eJqs5g+C7IUYE7YyTkUxT9+j0Hz0Sv+dO8MRvZtenRB32L024QAqSvmIUl7tHgPiBeum23S0DFt17Z35yqgaLuFt47Z3VyqgaOuFtya2PrOt8Sj7P8VVCiSNqg9aVyb32.n4hF+WnTM9YA
I had to use message holders to be able to record the random notes, I couldn't get the MIDIPlayer to "only" see the randomized notes
-
@ulrik Yes!!!! it records the random notes! thanks mate. The only thing I cannot figure out of your snippet is why the track is about 100 bars long. when it's created with just one bar.
By the way, were you able to pass them to the MessageHolder? there's not setEventId method in the API
local m = Engine.createMessageHolder(); m.setType(m.NoteOn); m.setNoteNumber(notenumber); m.setVelocity(velocity); m.setChannel(channel); m.setTimestamp(Engine.getSamplesForMilliSeconds(position * 1000));
-
@hisefilo said in Recording MIDI internal notes:
@ulrik Yes!!!! it records the random notes! thanks mate. The only thing I cannot figure out of your snippet is why the track is about 100 bars long. when it's created with just one bar.
Have you looked in the script processor "Recorder"?
I've set it to record as soon as you press a key, but you have stop the recording your self -
@ulrik yes I did. I stoped it manually.
-
Engine.getUptime was the problem. This one below works.
HiseSnippet 2144.3oc4Y80baabDGPRHIjIQIYlL8k9xE8DTrJLokLkT8zwRhTJR0V+IBRJJSmVMPfG.QD3cvGNHaZO9qQ+nzm6zOA8w9wveCZ28N.R.QZYNJMcTa4XKIr+41c+s6s2dfGI39zzTtvvr9ICRnFlelk6.lrW6ddQLi85XX9qs78RjYB5AbIM8hrT4UWvnu7hFNMM1ZPhWZJsqgo4reGpfYs4LTed2S2xK1i4SGQxv3LdjO84Q8ijindzFOKJNdGutzSh5WR5U1XOeNqMOlmAN2rVMLR77uxKjdfGJ1LVF65k1yv7asZ73VT5pKGzsq2xK2sUqVqu15qrdSufFq3cYyVquxiVY0Gs1pAFlez1cijbgqzChDCy41h2cfaO9KYZCbVTZzkwT7glFtfk0j2gG2ECQjpQ6dQwcOp.0RMLLsNZDFNqFC+Zq8i5FMj9Hr7KULHiznL.ZNSU2a1JtWyxtWiRt2DboYK4RebQZU4RwdCnBkqLu0960YOhlR0LY6LgfxjtzWjQqjAe2SyYch.xEko+bNOYalG3dcKSFW8KAQcSnUYXN6TGqMu0X0.CqchhoXbaV7.HMFiPQRGOomg4arVaMG1Isd1Zs6c5Z643z6TQmKctLriSu0dvCV+jSZ8ia9SmGt+flO9zffC+8thceF0k17jCudyiW87v04u9kWsdnfdkeauf3ya88mEF+CsNL9X2K4qDJV4zlu90x1as9yNe2PmfyWc4WQOd2vsbbLP+YXMqoIVk6FEx7vsTPI4AY82xChjRfyA79Q.eL6UP7q2nCkMN4ubCD3APTHKuOSmMp.3mP6mvGQ3OsgQoZj4z0HekkquHJQNhCBhep0dLIUD3AUBkqRzxZX92rZyAAXRm9dWQ2Q.OLTA6VMZrDA9whOod8fLluLhyHbF1J4Pl8h0eS8Z0eacxMYEDLQdngD73XpXhrQnUbaJZyx5eIUrD4Zu3L5PAA.nZ0n0zUM5qi6RBxY6whjGlPYuu1EF4fE7Wmtmp3DvxbZfbITgLBcAyNzqglk5DSMqNzzqj7DioNqU25XpOWzkJlTRaFqZVf2mJIZoH+NRQRzqa2sxjRNydAMuEVhzrA9eLGFwhiXzxPqVnB.1mCkYLXcJiwCI5jRk1KHouRtPNexSIK3BAVteDwBWf7aIEVFrXMIteAKvAebaVHXcmPp7zDjtMJP8ZQAD6bqUCLWMrqCZpyPZ1AdwoTTPMc+ddrPZWkpustV4uoP6ZfVi5Shx7VHn0dCth4gYau3Xrsl8MBeDgzvJt.SFTQNHj93aASQY94hnJbTYLLRKXg87ya46j.+1twhfbkolB5Zi9E.NE.43gcIODCg5BZHoblpwSTjDEYUfze3OBB9vGR9Npj3AbBnB7zEhjSj8nJefjnbBmbPrjaA5qFKAy8kRPKT9LrETdxMQS.5wVJ1wQo.DhYeFMdIBCnMra.Ml6GIGrDIgmFgZgfLA9.z8hI8GU54KnPKh8g8YvjH6hCFnpRPY6iHEtkztuit+VYFHkCT1ydjoKKvY4Ngcg2TlYasaam69UrHf5oRu9I1i1c3BOBmHtCWrOLaUjKjEXcSsKhNx2BUdPO47koTjxmpHkOLR4N4sqKy41BU96OZd3Cqg0AwTVnrGgGnpJvEfXGwHo5PZwkH8f5Fk+2Okzjjphskfz7OASlhESCfAFIwQWAUcokBs70sbSj2CLovlxQ5cGgIOH2tUfZnRzIIKsmc+bxinv0a7FqJ9F8kvd.pFWC2f4jaGnGlfBiVvTcFqrwlJwQQrW.5THEYT8OwlCZ.Rlp22BpEvEDaJAf8gqOtvnEoNQoCOhFIVSomBTFAT59x508EWB722C165SihKggeeFzqfJ1BpyPfLGRskoKt3XNutZz9EWtDYEnu43BDDCvWd05yA3zdjm+j7.5pwBHnCVJOl5jHhXR6qb5lg9NpvHb0Ol5oOInt9y6YLFU5H2A.LZS3b7fH+HuXEL8lb36axOKIr3zIEF9l5HPN5XFMqhzyPNkO5BN6pF.A0FZwPFWP29Z3LgQJpS.LVQBP3w5BylASkACkspRD3eEcHGFyKQJV0vQaVgcdLFdjEn63mCS9MiZ+u3SvEV2tNesAPpYI8anO78+SG7yblbuBDUpFga97Q3zyHXDAip8I4yuYn73xC2aLEZ+QV39hBcsLU5cWl2D807QM.v5C6suBsVcvXCJ9CioZAxcXk5+4JpO9.uvkn4cyhwaBU9l036eHmAj6qL0KdeDFzYdPkqf9uqqaOst3WYcTjzu2j8wYlfOhkJ+B3i4ujhO2Z6f.pubjCNm0Nm+Kyajnr4mWa9O0xE5gn5RnL9uR8L4G7tlBiHxnBD7ts2vzeeZeCSIS8aX5PeIX9Sf1jovI4UdwGtz9Qm.kwoks1oov8cou3XLaVldaNbi9Iw5cOcGHHmnNt3KDPUVrYedFqx84u4aKYtoqM0G3EWM28tWb0+ErY2zrjO9EZe7is1b2NtGmuIW82vQj3b7IzpUv6yY7jdbVje4z6wToHJLjJJ6wSLL1TJg6e0NSbckp9NTe35X2jpV3wo7bJ3ZkIiS2O1xMjv+3urgKLZck8d+3e8XJLWTZkcSa6ygTB8NB629q4qxaY81JM9bKcPRT60u+cHv7E9mNKb+yA+LKU5+9J98EV4Ei2aAv4sx2abeEBu04Pl8+smC4XdlDtgCbaHQDNr4AY8cgi+8o4WyAuCf4L3Q35maTL8rKk0U8v+D9jyrI9rYNylEL+OhM564K3W3quI.1e7STTf3lo9pFpYsO9Lo432enObP9E99UWpwT7Q2UEW9tp3J2UEe7cUwV2UEW8tp3ZeXEw4r1LSx6q2ZZXr+Qaq+RrLG9ErYNqw+BzCBbcE