Hardcoded Neural Network does not work as expected
-
@Christoph-Hart
I've added this to the extra definitions, but it's still the same. -
@Christoph-Hart
I could not solve the problem yet, but I have more details.When I run the plugin in debug mode, I get this error message:
I tried the same with the example project (NeuralNetworkExample):
- add script to create neural network, load the model layout weights (in this case model_tf.json), and load Tensorflow model
- add the model into a ScriptNode FX in math.neural
- export file to DLL and load it as a Hardcoded Master FX
- export plugin
I got the same error message as above. The JSON files pass JSON Validation, and the models work properly inside HISE, they are sounding in the way as expected.
Do you have any ideas on which direction should I move forward?
Your help would be greatly appreciated. :folded_hands: -
@Christoph-Hart
Here's an update about the actual status.The JSON exception issue disappeared after I put all the file content into the script as an object. Now the plugin always opens, and the "plugin is not recognized" issue disappeared. Yay!
However, the neural stuff I am using still acts as bypassed in the exported plugin. In HISE it works properly, in the exported plugin it doesn't.
HISE_INCLUDE_RT_NEURAL=1 is used during the export as well.
Any tips for possible next steps?
Is there anyone who is facing the same issue, or who has a working setup with the same settings? -
@Gabor-K I haven't exported a plugin with it yet. I should be caught up this week.
-
@Dan-Korneff Thanks, Dan! Let me know if it will work on your end.
-
Ok. Finally getting around to exporting a node.... instant crash in my DAW.
I ran into the same issues as @Gabor-K with the exception when trying to parse auto shape = parent.at("in_shape");
My model has this parameter listed as NULL:"in_shape": [ null, null, 1 ],
I'm assuming this model is correct since it works in HISE and other models on the net have this value as NULL.
Here's the trace:> RTNeural Debug.vst3!nlohmann::json_v3_11_1::basic_json<std::map,std::vector,std::string,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::json_v3_11_1::adl_serializer,std::vector<unsigned char,std::allocator<unsigned char>>>::at<char const (&)[9],0>(const char[9] & key) Line 21109 C++ RTNeural Debug.vst3!RTNeural::json_parser::parseJson<float>(const nlohmann::json_v3_11_1::basic_json<std::map,std::vector,std::string,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::json_v3_11_1::adl_serializer,std::vector<unsigned char,std::allocator<unsigned char>>> & parent, const bool debug) Line 608 C++ RTNeural Debug.vst3!hise::TensorFlowModel::TensorFlowModel(const juce::var & obj) Line 326 C++ RTNeural Debug.vst3!hise::NeuralNetwork::loadTensorFlowModel(const juce::var & jsonData) Line 624 C++ RTNeural Debug.vst3!hise::ScriptingObjects::ScriptNeuralNetwork::loadTensorFlowModel(const juce::var & modelJSON) Line 5209 C++ RTNeural Debug.vst3!hise::ScriptingObjects::ScriptNeuralNetwork::Wrapper::loadTensorFlowModel(hise::ApiClass * m, juce::var value1) Line 4991 C++ RTNeural Debug.vst3!hise::ApiClass::callFunction(int index, juce::var * args, int numArgs) Line 331 C++ RTNeural Debug.vst3!hise::HiseJavascriptEngine::RootObject::FunctionCall::getResult(const hise::HiseJavascriptEngine::RootObject::Scope & s) Line 336 C++ RTNeural Debug.vst3!hise::HiseJavascriptEngine::RootObject::Expression::perform(const hise::HiseJavascriptEngine::RootObject::Scope & s, juce::var * __formal) Line 657 C++ RTNeural Debug.vst3!hise::HiseJavascriptEngine::RootObject::BlockStatement::performWithinScope(const hise::HiseJavascriptEngine::RootObject::Scope & s, juce::var * returnedValue) Line 537 C++ RTNeural Debug.vst3!hise::HiseJavascriptEngine::RootObject::BlockStatement::perform(const hise::HiseJavascriptEngine::RootObject::Scope & s, juce::var * returnedValue) Line 548 C++ RTNeural Debug.vst3!hise::HiseJavascriptEngine::RootObject::execute(const juce::String & code, bool allowConstDeclarations) Line 2745 C++ RTNeural Debug.vst3!hise::HiseJavascriptEngine::execute(const juce::String & javascriptCode, bool allowConstDeclarations, const juce::Identifier & callbackId) Line 815 C++ RTNeural Debug.vst3!hise::JavascriptProcessor::compileInternal() Line 1398 C++ RTNeural Debug.vst3!hise::JavascriptProcessor::compileScript::__l2::<lambda>(hise::Processor * p) Line 1489 C++ [External Code] RTNeural Debug.vst3!hise::MainController::KillStateHandler::killVoicesAndCall(hise::Processor * p, const std::function<enum hise::SafeFunctionCall::Status __cdecl(hise::Processor *)> & functionToExecuteWhenKilled, hise::MainController::KillStateHandler::TargetThread targetThread) Line 417 C++ RTNeural Debug.vst3!hise::JavascriptProcessor::compileScript(const std::function<void __cdecl(hise::JavascriptProcessor::SnippetResult const &)> & rf) Line 1511 C++ RTNeural Debug.vst3!hise::ModulatorSynthChain::compileAllScripts() Line 239 C++ RTNeural Debug.vst3!hise::FrontendProcessor::createPreset(const juce::ValueTree & synthData) Line 429 C++ RTNeural Debug.vst3!hise::FrontendProcessor::FrontendProcessor(juce::ValueTree & synthData, juce::AudioDeviceManager * manager, juce::AudioProcessorPlayer * callback_, juce::MemoryInputStream * imageData, juce::MemoryInputStream * impulseData, juce::MemoryInputStream * sampleMapData, juce::MemoryInputStream * midiFileData, juce::ValueTree * externalFiles, juce::ValueTree * __formal) Line 363 C++ RTNeural Debug.vst3!hise::FrontendFactory::createPluginWithAudioFiles(juce::AudioDeviceManager * deviceManager, juce::AudioProcessorPlayer * callback) Line 69 C++ RTNeural Debug.vst3!createPluginFilter() Line 23 C++ RTNeural Debug.vst3!juce::createPluginFilterOfType(juce::AudioProcessor::WrapperType type) Line 39 C++ RTNeural Debug.vst3!juce::JuceVST3Component::JuceVST3Component(Steinberg::Vst::IHostApplication * h) Line 2210 C++ RTNeural Debug.vst3!juce::createComponentInstance(Steinberg::Vst::IHostApplication * host) Line 3677 C++ RTNeural Debug.vst3!juce::JucePluginFactory::createInstance(const char * cid, const char * sourceIid, void * * obj) Line 3813 C++
I guess this happens cause HISE doesn't embed the external script? @Christoph-Hart can you confirm?
@Gabor-K Once I add the content of my model as a parameter like you did, everything appears to be working.
If you want to give it a try, here's the model that I'm testing:
-
If anyone wants to start learning about RTneural, here's a snip that contains a model of the ProCo Rat pedal:
HiseSnippet 20992.3oc6810imccdcmUKp1Rh1dlDj.ja4vqjAnXN6226XXXY8VFgQThPjQSBBLLJ0cQwBpYWDcWTxLF494qPta9ZL24OR4avLqeO+qlc2h7+dQqoRPvfoSfEqpN0oN+2m89400yZ89O6lGc0ye9MO6hG7c9vO+Su5hG7m8vO3ye5se7O7iu75mdwO8GcwCdyG9K+ve9Ue1yt7IW7C97O8xm+7qd7EO3Auw+V94O367MuH92+0+5evkO4xm9nqd425hK9U2b8it5mc8mb8su7699e++2t9IO4mb4iu5Cu9Sdkqt98+oO5lm9Cu4I27Y5Y4Md3wEe5kO52d4u4pe9kbYeiGdwC9S9wO95au4YevsWd6UO+hG7M+A273O+C93a98O8z0+qt94W+qexU7EoK9.ciN8s+I27jGySLe2K9ge70O4wu+K9L+7Kzc48e4JvabZE3e4Ceuqe70ew2+kqD+yheva8xeiWc83AeiW+w6MdsGuzq93c7JOdeEORO3Udj9lmdj9m+vO3QO65O81W9S344O8g+zmd6UO6itTK6u5ixoq8h23c9QO3g+vazk7zae2O4xe6U+jmou3K9U9t8ii24sz+m+h+x27M0Z+yu8sdue1mbyiu5Iu0e0a8O7luk92ae8S+6d9Ge4md0a+u4s9OFeG92S+rm7j24LeUJ9u9aO8Md6mb4me0yd9q8K+O7E+WwUb6mG2729IO+1O4semW+mc4it85e2k2d8MOkq3O7m9ket9peh1+cyGu125u8O3Oxu+pq+Me7sO+q7OyW96b9uK+66c7tGkUtTGqY8H0V0T+c1c04dt1x4Zczl8i1ZyUe7ty0QZpKO0GszwZs6ZSkYstJiiYOczzCztK9n2F0xnsxiZclGkcWbNmFqbpj58boOG6uy4wPOtY8aLJ4Qps8CXdpqMsFoiYV2451qM0Si9fG21n0mau3RtcTOJ0iZtz1eooZN0Z0kdB547QZ6qui7pNzMMUFrdm1sLykenGidq0FirdRzh81OgG5faunG67penm68uUpGsQOUmGkh9Lr+khVaSixPqccsuqs888QYrzF4wT+Os7rl19XzyiiUaNlo3SnY4nmV5QdoCASciyqsWdR6+mq0TapSCcVor8pG5Ey7PuQz6whd12u+uVV04ZNR4dQuiN+EmdWsWt06Is+b1zG08qzMssuLKozgd2zq411qNMz67RoUq5by7X+6kj1Tu5q0pdzmo5tsGrVOa8iZSux0C+w3nue8XoscsiVJqUOYFa+9CYynMJU8njvt29S37Zt0z0ps+ks2XttZIos+ZuzpX1bn2wZcanih85Z3Vm05VKw0ejMKyG5SmLMOl8o19mOLKyIcCWxhfVoWklrPt2ViNhmq8UsVko28Kyozb1X0qO65guaVmO57.26qCYo7XuWnCsk93HkKSYbrk1+JjMGU8pqvowg7Ds8VuzVzVQO0itN3l1usaVkIwp7VUzqHsBd9KN+tyRWaPJxH8bjkEuc2XsyWGsWyoV7ZGyoYmTopGDYXT2X8aV2e0st1fpKWqwEVr2ejUN1lM8bu5krwA2w.WlxBoBhPQTr+PXQVZjke4Ibsxa8vom4VtkOFUtT8Xu2Bl1ymlI8.mzle44e+MVGmj8bsQMszF5lwhTIul53hr9NKGi49McJPhCYBSFSGKsqd+sFK4Irun210xbqKq9Xpm2rLqO3HvduJE44NujIukdrMNNmyhNKUVxR97vsXnWeZy7XHic5xy62Yn6ltNEo4p14IZ+FZcPUduayTRwOdrx6eRvpqr6mzakjr6sOhTE0QgfZT3OGiQYsOvQEKSi.TNZxgQqXVQjcCYKPFSakb4HuOZ2YuWkwVs0P1kl6uyJl.EIn7Wn.i0YKS.rccma8ZUGTjivwdCoJ1NcxhfoUH54R1b.Pa90sOqjDj66TwDpYQqEXuSwtISz68rncQy4pMV3pifv2uCIqcdx2sdv0Yq59GjDGEU3IxlfL9m16fqKiRGGJIjgdxMAgUjo.cjUWormJqoFGsZ2TVVNVkDAyt2A.d.0Qrd3NrsO5XEKphCKIqB5s9XYhTRQ8HmEJ+iFI2nykekW7e6W56929N2KIaJaEJWL8mszORKWHREEbohKtqPHFaMdE1PaEk6He3jmyQs6dOqTZhbJTrOlnMzQUYVVwp0Tn70ism+zYzAwOSN0J3bW9XEseSIFlvekhMoXhQJcTwnn9m7rr8wfCRxMgxoubbrO7RkQuBjRtcx5wQ24lIaZ8zpHXjOYEcRs497oTtIYLY7Wa62Glq96qTeZXTTFy6ysWsN+qjYk8YxtWgqseqjhdnIm2Jz.E75gyfgBfI0zaQsZq8flMGJEBclV4XkWojoHGU9noWfJgod9nt2daRIeTvDvP6UU986C3HQTnJPhiAeDKi8gTor+6gsSYVpISi6OrjUzI5dqWl4CSHw5TxQVI5IicoxZ+yblzZ5IEEn100WtXjjaD4+VwyL6TAJi414XzKJ1jFgw2bWdQISqDjKDLwPaP1GEQknRT1RZW0vZESGCOV5TqVMpKyqbtw0tLbrj2yp4NKCiy7fsQTFLyYb4f+.yRxSgRFJMc9tWopN3JKoILBuOKnYUm.00qHR0B99BLn0V8zpz5U9aK8tbercGj.jrQO5ZIwX8fJbjx3SSFUMQarHyJ8JWVQIyPi8.Y4.W7knND6WLjUWEKfBNQqwXVZWgYTdwJ6CEFpBxsZLyHCRxrAqE5YHObamaxZgxDanDUZZO8buQIEnlLvz4bHQ5ZR4UgFoPNHEV8bu8NO5xPfhNQwjPov1ahVGN5J8iEATQob1uMR+kkGKk4aD1Zxj+gNrJO.0UTdHsdahjPIzqjjo3gqtLlse0S2yjBKVwuJaiqCSlr5dRIt0hcGCH6epKZmgbNqjlNvwgo1jYYetKKBUYPmJNt+XnLKlkmELSqHdM0LfJwoHz0t+j1qLcwznGkCYjQICwal8KeSk8u1mTZxQvZePwEkozwjG7l1R6JM4j24wqasDV2dnsp6pdZyr3sTJBlp.K2DZChhjXp0u0dKMxxemxQ2pzi.EhkYoSYHqUXEfU5zK+sqGZOsLipsQjae17fH6yT4B1gbLwT19c0KV0Hn2jNdkLmt3Ht7fJy4soRsX6ctwqQckUp7X1EJlNKp7BSxl2DOnlCLQo.z00p7bTMN4TFCjG9ZonB06njw0rdUKaXJX8V8Xs2JoRAnxGRLNPxd6MkM04uDkwTq0r8a+igdOt3PtL+REibdMnjfccDSOyq88I6PgSnzEzQQRwuadyjivITxbxed2UEpTjYwj5WWoHIku5jNem+omPo1DsTp8JCmbSd51aGKyCgBSWlQzaRSUnzAJYmgZnqOoJojsUNSgpOzAf0hpFzcUQgpfcPUtNZ819PuIPZkhwAkDojM9laDHs16ezHCijoTXxUThfCzehdsruNvZKDNvoCs3uauwTE6H9Wz0qT8Sl7PNzI7dUwaRFWlZyqqRKXZ0ntnTJFGhTiktVIh7szx3Xe8nUJYKNFRMdObYKvQPYuixynbXLowUUPdxHCa9qygqLQ57gx0ZrhTPUFZlfllc8BmLqa1Z1lj2Ppx1nePKqG6SymBYpDnTl6cWxVIRUoSqvIjkwXe4pj66nQ35UYQlab0Ydo7C408fCBl9BknBPKZipBSXauMhBGGOy4Zli3Glx4qzfV530rTUxElZ8I+Dc4jqF8sPQraJf8fd6slzpmw1acDa0jddoM02YIcysNwF0LVapGJn2owAGghQsD0ybZHiBllp0RMsnrHH7oyvK6kU5ExZpVFkCizdadYZxdOqDth9vY5yhhcSwHToYY48QtoSV.IkFqh5Lf4TKHXPVbnYVJgNiYL4yTu8T3aJJujocVTMbYZTAP1kOiZ20WAxNSuHGxxmRBNu2p9XQSbV3fKk22p.kXepq8PDPQqatuGTEwgNSoUttoPdYJ4QzhcE.oqCzsoxXmCVGipMHLEs6rSIlTFTJQfhs+k5QQoiH+97K12uUZLkwFEdfBQXPBAlxQ0oEX5AR1ZxtBYjT.0T6+N4pZaGXWlOzYqAsUPAfLLsYuRg+JzyNdR1uaRgMtFzYx5HRVb+mQ5VgrQlS.2jVeY5xWE7WP+pWGqrAgSfJkD8DQoAmxMiawDw3giiIKMi86nzknDbR5Mjx2JUSlh6Lq5nH.DSaDStdsqTEGxhdT29byzvrLUrmbn3nKfJaO.fzFZYnVldoEdlH6OTBnx1woZnsn78aiIiHazgfhLSpCYlvDTBc8njdqRQYxzbMXltbKOF5kY1rwNqblk+hlh1Rokj2+Pqc15n6nGkFXn.V150P1ZTTpYYEVYwX5XFH5QVH0x2jFtaBpfJwJ2gfKvkrEeX7wfkTZZGgIjLkgLpllV4T7aJ5y8EVTdKnojjM.Mqs41dDomEQmpzAL95XQtpiJMEXcu1sYQ0ItFRbP1Jc8tFKvSJ6KIaa5qKURSeD0Agi9Wi9zPoiJIveFs4pc+jTIcWNpbEwD1butUN3EhpgX12V9pDmqNHiqAU32UwMBfrh07FFUMQxp7aTHaKL.SraCa7GCpOHs+TmYml7nhmCf9BO3t3uU.JGjGmhnfnOL6M5zFXvclB1L6LyrJ4bQ9aI6gsdD0sRwLMoCWxMTdeMzTB1fZUY6Uqeq995YqMDJfIEiPZNTnxiU2jaaBO3.hE.WpYmTl5BHycf7EJ+895BT.3fkRsB1J7GAkEoC4bSmuR6KmsBFTOpS.VshYeeMBkc79Qk.NqSGDthZNpT3zZRgpLsOlFRSPeBa5QPwM02CGpNlP0qCBTwDXp9w.XCE7SbDee82oYRk.+h.mLCHrkmslh8Qoqj8c8WGMjmdsNC.OjMWSl3DVPKBRJf529npnRQZEICb9StG5wT65p.zk5p6NUoDw0IOclpRWoa6M0ovVIL8ohxzAAB7P0UHLoJ.hctG2FJsW.UDvrMYwsQI1DGKZyzvzw.EBZgVHloI9tF.qXuTXAJMtnWKEmc.siXFgUAfg12.wJf6n1K5tqmaClyxAxE0FZvnYeeoCHhDspoX9aJw819HSTJxJjj.OmYZFroawfejdoBTnnQQ6eLJMxApfKqzzTdvCYskMQzCelLDSUJO5TQIsGMqS.ltdNoX.x1I.ItVMcVPKWx7LuOFwdu8kRboczJ0I8Xqys6yBRgtzTNYM5ZbcKNLXiDERL.DeTug01Z+HahxyMspUI7s0F5IeDxaF.dDjn1G95nKerijbqQiDMk2hBhTAlGJ5jkaGcixF.fGU1oJ3ts1jZfLxL.zTaSJNjvB1Lo77M4Ij.e1WjxFnhD.zuXLi1tuqFEtSeHkisjqwqZKGkj.nkK+wi8mUNXbSHlwF1RMgDzwHPYIG7J5jwtTSSuqNlP80J5IG7et8imdOz.qPKp0lou7oIXJW4p2oB4lDdkwb42QAWpP8SDi49ifKhgADvImwKGNqvXQmYUHScQLglTxbBQl45ATHb8e6XLo7jo.CP66PafjTskVgyI6iFj6Jibr+LKC50gxQvLtP.jRkxc3s2hdjhreEy1VBj83K.fRqQ1Dz9+xXucTlXuor9qM9G66p7ozZj+OEy3g9EVyj4XkxjgqkCVSiciZfjYllqDPKZXlXtB0krCdWT5Gy6qDG0o0QA3.NlLsDl59efGM8RLCTTGJ108nMVwvbbvj.ModsIyMmy2UlQxCdsWMsQ5ftjon909jQLkVcSkYn6M3bgQFJs0lN8YQgXRyT4jvzLybU84rOiX1nnvtb25TCyTTxf49W5.3+9hjH0RxdCoLZjIldIhvLcXl9R.2mrLtNMslU25bEXxwrsIeg.i1817NXXOZfyUFgOWsIilXRJmZ0n6h8+fyW3CeICZtdP.BOxju2hdBtG5wT.tJNrnGvl1tpyeDRbixPPGtcvZaI2wqAQq.BZ2uIU9MYaJCrPIkZtHoST5+CJnE0ZvDSiV6XvgXTSWGMyPFUi4HIw3FpTA12B+HUVkkJ9tjEASixvzKotovzq19HwD.MIOOkZs1vlbFmRfC1FsObnjIc8zUly01iB.ly0lEFb0BnoWGCF6m0oLcWoEilaK0JlYWklfyXksZU4Kce3+D5i1gvXmDows+hKiwhvUTRmyUeeW0nTGEsmCr7NRNKBCZdNyIYSlQalouWWDivNn5T9QM4rHWs0zf5MhY8jYZrU3+xKqheSlyylCsKlryn94Z6+vflxkbornXi5YW+B6GdOkgmhPoRmFWMeu90GtJcjzEHMMDEPkNYVHvrt6jhhOHAZ.0yQd+P+ps6MFlKJ09X3Z.BMzf9U20xVFLHaFnxJkNjBH1sFG0xf9zAfJpLlVtQqQVzIOHJxdYu+vACENlAnoFUSc9ThE5EGENWgUqfNcwktX1PlTDEZ1jAeZMPJcIZHtbrzMmuo98EEVfbJa5VcO2.y1xIaK6liq5TQFPRY5AXteqQocB+53mntcGZjLTXyO0acRzwU4bYuWwXJGDLoSlw2PIvNntqxQKS1fqwh5eJB1Tfc7r4AoC170SPMSUAMYgnkYvllLSC9I2aI3f4seRaEi1O35+gb.obHi5aiEOS8TAvkx0irp6JcGnbQqxZwaE3evTfMR0KAcODyj218FAUOzjuXYs0fg3DY3QgZUvTZUouegSFhnOF8vV99xXRVxJ8.J3XotJlA+BxdfLTYzsKVnC.fohyILK688EPgt6JynLNdEfKa2hubvqRB13.H1tusof3BPBddF3AeqktFCiGvEQOMq8AeQ5Dz66DnzVuIuuxgLCFeJPPEAv9RNvAMFJEYkERoBNGMQO.CiHCiQIeFlXMhvaI.BPJ6QdXhoih2yctoGGSwFab56TG3gWTbM4sGsZSum0mxrqWWZmOlMj+dZhbY5nQBc4LWtx8c2fzrDNHVT0roLPOLnaQthitncp.5loSozYTZB.QtRNPQTTVMxkVT1+koCjLlnrH2F5guXVoasRLIYAafXPgNUhaxvO.jRYxNK1o0A3bnWkckmhYdlYxRSLAsin7+FXQLX.WWY4i63v0w4L4gANXxT.EGbAUbCMnoEZ0TpZ3nHhVToyWobDokgba.KlDWGwoQEg2e1Jc.MHP87oFM66daggjrAXH2GlKMSfVMKahc.2xzEwAU1lh8DDSxXt8Qlp82XNOz41Z0P7KYFIbYYhziqVXs.nFoG7GgW.SsjVv7QJrR.J6z31j5BoXuzaQvpWYOR6kQ5JnLiR4q216y8.xjgZEKiFohoEjJ7uXFLZLQ3CSPArIhtllGTuQCcBnjL6JCyocb.qLBu.lV.54bqGyXZFVAv4W4dv2OICFlzFtB9eNJlsmoblJW1BfjxfBa.oBSP.KGoSEKaerkLVX33l586ZlGUVTusiRxbTLr1fBAdvPJKyR4wxAtxFEfPtR3WvDOUh2IDvC8ez.giAtSxELKWMSiEAGQM4WyX90WlksfN+fVJVrE0E.3fSTxfAUnJaxpRgbob.ovaUNor2lObOBTjFCQSYenkGzaDYg6KFtOyjrAa5AzyqwzZrOdfC5vkLLulw7+ru.DSbPoqES3i8e9n4bv0ccY1nQgeMcemFjn.ifV0BdKzMr1JP.Jjp76XbmjWM53MrICC9ichvJrwWmpzuV2r8nvFHxPmdoIanlYWexz0dnbS6ksi0TBCRyUghUL.9GFbFovJUHALXZz6CC8VoXnRLqp.Y95djhAll6c.RXNXqCSb4GmJ1KXlyTVClNUJhbAJxvLYg5O+AdpBPzh698mtoEdfEZEThxk2P1DLuJz5fdLSQK2VTlC7N.OuPTtl4PDlTR14Z.bTlz2gicVht0zHiWEU79XKYbhBlN4X0N5lhZy.mxy7hsnirI545X.+VAVWqtRfqrGAs7cPg4w59J2Qf7qNTQh+YldL2fGQ5tJ5kDYRerbnfNSi8SfoDFpHSsHY5nGsX.C2lQSjOuNLUHePZLP2h4Ix4GXfNCxuX4HssnR+LywU1cah3moTB3DNXnYsT5DU7gptBH4SikCKSJGhUNZoMAPObSmLSt9QCXF.8gXXH0ghCTonrfWF1eu4Ve.Aop+uPnE.lBSCrljmP39xFo4AXHGnv.f1cPaLA0pAIslXbQllxZImVU5uITckqWWAcLNNf9KSmJhtgCGpm.3xRYhLbCyrNI.oHdvfZ1bkuPNwGiSkYS1dxFFBtfExQTLZGfZ6SL0.IEkgDSc8BRFFKzDMLRYLtqfzyT+W4Q.93zLBCGPIP7VuDC.mqaWLxaAyigoACkvA5YzBsrlcX1cHO9ZOwDxAhWglB4zo6l5bRgLec8BphILchpR2JMiTMwcOfEBHqnggIbl0iQ6.eWf8IGrivMaz0YJImClySJhItVjQohoSu4LznJ4LPFWFFaJvgr1fnyg0HaG2fNxPtynmV.3CFKdkfNWOHSmwb43rLlbbsCU1c0AVyr7ePsSzZgBlV+NCCodC7Xw3n9XhCOSkOKAikMho11fDffQWfAeYHFoLdtVwPB3ZKkxbQ1mZN1WUN7kSKlwbPZv9WiC.8FbuRUQ7MLLydp1NHNAfra0DNVhY97.N8dQuYWF3NbnnjILccXeZnTUJzdA+4G7733xBlflF37D5A1MI3LBaUlAJRYsalMG3vhgdajYHPlq8nvEjIoyq3CGNIu3KPeAKHEhGxgIYcBb.2xjoIR08jyKEfRAd.EfWA6oNmKL13v4ovLNNXb1xf5Nl53AXnzToFP2tVRnKKPXqFloJnLVnnHk1pAKv8f0UZMP.UZ4x3BPz0w7O8CzX8.Nm3DBJmTDlsl0UzozJT4RlheX5+8QLvHJUtAb3+d2xoXx0k8fYLjUK6fR2G3VFFmF1tL6RDV96YN.mkijglQhwpMSgfOBkGXeUlY6l7MulC9m408PIwQEt50bMa1abPzO.SD4OuZRaNGP9l4MCPPYF3FfW.6hHPBkUogygn4XvsM5t2gjpMgVoyoZKM8axHHFAW+VpPW3Pr168YoXHRASjyHjA5uu2HXGT8AFrhIHXqaPuILC..YUFTsvJOSt8nJGwrLL2Oa4sns1MDcgRtLc.qMJF.vXBU4vDqzhfGkKVnpdavfcpfMzQR3J2zifns1vE4ClrBSO.mXFRd4YxsX5hLHTMwLi.HoNFlzNgzIA5bkjN15D3BXxfEKFvNENtJi9oCjj0SA4MahaDNZpMQqCTNjcSDXJSc.nJoltboXkSwFiAL4nRgxQWq5SVE3pbP1PtLg.+p.ZyT.Kyoq6hInUAYN5fZ.sG6EvoTP2P5+Kj1TwzmEFeelOU.sUStCSF1pYAwXojQR3t2PfgvlAf4NslCtsbtuSjWeTgbmFdTBVbGdESVnU3ltgGdPJNDmNbthIbWF7MDxfXR2c8aUgvPlVsf890yuYCUARPCEaAuFCybofX5PJskI7QhKnM4IdQtYfai0vAnUHmZxFmAhpXncwbm4yDPERQhalTytqaK85QLXVlAXTuEA0tTogQ2L5MTg0dPjVLY21wmu.5wTNkn+Ti847w1hX8fLRlN1wk93TigCSgU2ptguFsLPohzBUaXY.zcANdUuqyxNh4nXFBPMPUKwIXYS5AM7QFpaQOOLrgCGRVcFsNXWroiCrWSlMF41BZP8nZbHAdW3jH0.BaqaixaAKALXN0HbOmutnp5A25wjPXxaQO1JVVV+PiS1e5RFFKT36AyEhLVt8pgo2BkIPN0gyZLyvBCIFPdYkc78VllJOhtbyrhYjxfYvhVSZQB3OyLtD.C2dPB7yb2Plz.LMbMuVv9tsjY+QNWBhgiQxHsubCmXsL3TLny7AosZr+x.X.MmAe+Xh0qH+bYF7EN8VZNhILiB.UomQsso8Ey3Az0GiSFPFxLEKifG.6HlSTMO2f8.kSvvUfGCljbWPYLtIL1zYp.Sw4gFrqCOcIydEqpioyfL9rLJz52XXvFbmp0jPzi56krmTHlGAW6ehbALmBpALjnfkEhC2X+MgZkzXFAVl1WHeJmpe1hA8qV6N.oivjAbZvWiYJBGETVvH.enfNCcWkhoiDpm.vS3XpwFsjl1nmQ8TbyjJTzBv0F5TrmbZ5z.gaT9kPJGRtAmPlGUbdyfd9cE6BJ2R6S0acHFDkEy8FNWwBCykEpPPos2aDBNSPMmXFyIjdMDPhBy0OvzbYkYN38H.0hRGXkcZTYCYcBZlBSqlPkQDKnnyybBAPp5X3rDLdBmdcBMWgDofvmUh9xb1vMIWLamJABF1alxh8oCiElCbAzspoDMGAw.EJCfIRxodhGSBgiNYbfao8JyHGsAsCLI2Td38nHjDmYCMvRPKNNLixgWD4CFEggijofXKpn9dJDt84KBqyAM+Q0tZoCW2.jwN8Tz6D0Bhmv90ZJJ0Au4g0CbjpHQIvjxC5cZEC9Sfxl5.mxBvxwza+Bi3bJjhMPEgAE40fB7T7oT2lV0QrDCZ.0nFDX7wduhxMDnNedPZiSWUHIZ1XbD.AHFTlBgBsv5Nrc49TzJPc7nFIDKoi3aWAUDGZ2Sd3XMiIjs.gvdRyZ2utEX9P2RTJIL0rOKJrIsBtRep+m8mqTjOX1sAMEYFdODSIHXInEAj4MiLBMAOkPsRvvYtPSAWHfoK8eLLEOJUiBfFDHmdo3RyAhqGw0.BdolmtFzncmAzBn8cllNRdYZurbY.hmLgKgrtQwrgJTIAImcW1d1fq9X1cL7BB5YQv74Jti1dKXP0sTqDtVkkcxzHcftceAhSHGQCs+i7NzCTPX.kJA8.8p1AH1JP1rYbaAGKAQomLbUAibIDdKCIBkSaZIWoNEvcFRMminCoAoDfxL3hOm29BCdYm20c1T6vOWEYnMna1iPALLDACZiUuEONKq9UAbu6f37YHUFtrUyP..vMnGIq3egHLw.2lNA2n8o80YoH5hNM+2DaEPVlgV9qQ+bhDaBcrNpZuYL.BdwMCmjoPNbi8THF5.SdFbf8ZPV5cQitwxDVz2y7C3ChhQo3i4.iB8XO9XgONQitkQuQ0oMPYHEDFiC4jStEsF7Tn+MfHHzmgiW7gwtwZJQtMllBElwqBHohcI48.VfgKEbGRwqzy8dKBvBSqPD4iAKt53DbpeKMh8zrqseqDC9gBPtyt08xf.Bd+DIaZAnVL8EDhPXTgrQnh1IaenH9HPWWfYXW7ZJfwLMfB1nr4TGRzh5vcKhEV1pUACxrlxo.Fzb5f.puph9OXklZ5di0cNhAA.DWWBRDwnQ8qPPCnJg0poPCXRhOgsriGGBtTg.GOIVHtyIAUYP42Y1MKldWGzPfhGFtqrX3PpVP7J7DP5aMC40rXeOLELCIQ03ERmWgfwnaN0pis0ZQ6BlcJb.rwggc8XrvYvCKnrAFvqRFjsJRSMfxvoA4mpSJBLHiU+xPuqLSGPnivcMFVC.M9kQCeDdhLMqRw0AWzRZY5HqSFdh.yancJNFhnGy9AOFS3MCCHIAQ6TGmFZeWwIDIxKUEHskzqbfAjozpnPAny5582b5t2H.HrEMPrVyMJ4LfAvmJztijQpIBoYov3NbXnU9P1smmDdiAbLoYtyIWH4SC3aP4NLHrC9SKJtTqD7.79I1phn3BJpzY2joHrAzbQz1Tj2to1j1ARMenrDjkpq23jrWYFDBkqKof9FHoK4weA52GFjuP4H.LYMhlNa.USsFJ58HTRTCGRQFKfrg.24rSc+5mrGn2hvWoPkOlys.nXTP8JfdxjgyjoQ.rEnbVLa7zSg1ssnQ9PsoUKKwizDA4aUbDNHwowX.HeVZky06oA0xADhkwVpSplXLGfnRQcMalJkhJWyvicRX5bcC4HpiChSZYTbCBID+yJj.jQ0zCGniR3cQ89V46YfFBE2cgPxnfdQ+s2WXjNwzkvv6XczVVH3Py7kOeXJTCTmPyJ.K6PMA08NvkArLHN+HGLrpwyYnPkjiPnM.FgPGRrlJnqn.gGObTxQLS3GHt2L4vNdrENcrPgRUT5zYg8Y2fnfBNVfq8bp4gNfPF3T.pR2vnIgjeQxP7V2VzXY5B8TfAJ+vPUiSTuKL2BFwNpN8CsCL1gj+ykkSDjoXzAuSCMz2cXwlZtvnHhNYiLSXFnbv3ZDK1dlMJJYbTnVFHLXs9ioC2FgpeMgNaMH0rGjzabiaN49hTZ5vCwLnJGlKtG4UEphALPjA.UPB+5Uhdz2OlfgEIHozLcPp.poMI8xgDvTQdzcrcfRdDsAoSvwSpfm64fgcC1+Idku+4nfZthnPxBhwXNjsXNxeDvwuxNSRg9Nm0d4kipOZPmVx1QKgfg6.+.++Pf5AMR5Y59CiqxarhI4ELciiEJo2N0.9w.RFSETlTg4Q.xOvkkYJ9TzIbiAaXzAZmHITPrfB010zlhRjLQ8DWN5zAzSBWCnFG4kn0cU9T26NVQiwJ7vvXQYkDKCV1D4OH6qpZ3HpfV5IaelNpUPBPIRsP4frv0D44So8hSK4.0MNlSzZ2F3Iah2q8mtPqcqH1EGfNECAJOYljOBlOe3hnWlBzdCZEOAnOM0mDNpqybRUgSoc5bDMLIxLrx7.3jVVTIsgdRXDHsLZPv9AT4ZZ7zzznyV4DIdPwQLCPJHPBDLh4lhIKAH0kkLfEzPmY5aavMyUDXYTQzpCpKfxpYve+UCGbw.9K6h.krZfGZya6JUHchS7Q3XzzDIvqGjZBP3d4HxPzmRHvyFM4vTxpNg4x.Zvc1wlGJblLlYNw6nFgEjdT2qnmeqokLvzFznBJP9u1g.NeBOf0.I4EmHmmCosEzy1C4Ry8JOQ005f7RTZQiNc2nonjaHogu2RcB4rBT2fBFUMpa3ASiIEVhp0Zh7ngtWNlQkCbrgL7Rdvi.LNNl4+pfbkTIuWPUee+bnwmeJHRkr6aFicP3FDwQzO249RggVHoSI5cWlbKJlI.FU+lAM5fgD2XhYA7W0qD5Aw9abCd8FxSBBvp5H.Hkk9fAnRKCybyoHXL9YP70GL7saKYVBZl8..1hdaLcrOh1+F5TBEpZeCPNwMtHPALH9xfpgiDOXp9QmBnI+tZj1.eMnuCcHNr1dbKpnzHbd4cSQHOMRm2fvuVmDQ0lo5qL4uCjdNciYXLMxH3hAyhZj1sDY3AgXRv4kkqo8Q+DnY1czggf6JLuTvrUlQlYBgot+fBJKMv84DpDLr3jbTxnk9E5YiI4sAC1o7fCS663KHkdiLGF4J.SKmrDSKb0MrIcCQ3bZ.jdmQmKliDsBtO5DZNF8tm1OyP2sOcuwLnyZTVpiTx0xDvD+pgoQlysrw8M58B4tQBCN4KBpKuFc5WgHObX.jXFolRwbEaPYdMHY4IYblnfUtASp.htCAXt3lyBbHSlMzu2ilC5hXgFPlQydBf2XV9.jACv0Zv29MiXqjg5hCIlCYt8dKYRpSKMZQVq47hAdxLYY813zv2tWQTOAS5fMcgtpsyTHz5FTeKiRRuYBYCdRIzF6AfM2P+g.PevdGMaU6vMMrHlzIlbektUo3T3pNQVUok0Mi1.bZROF.ubHuEyMtBm9N5wyx3qA77YNtOfrFPJq6VgbIlr.XQ.5OpatIGyN7L.PiukcZwCGWaXNiRisbjhAfhmIRCpQ1.0EnFcvfJp9UwUpgLyEBJJPA8N0AoHpQCvtohHblrrbAB3NPtjViZ9.hxofoClDWGPUKYFqLkdZBjTZNHJyy.5M4I.BxqaR6j5vByUrhQLyo3WHNF55JfOYGvvXpxh5RCsI1bzcLQLETwakQC0pABKX6.Neo2JFNepQSHfVVQiJ6F9JjRZBqbUxZmc027W5Xc.IKXsv8gxpLEvT8AYmYfEODDckQHMEpqPwUsCfh3hFOUbpNOvEDJzGEzZTMwLgnlC9zpLUskCGFSRDPOhfvxvqmvXFqVkNXdLYxBLBmB7+4XMF4fQybe.Q9HfWG34wT6ezwCD4AJC1dDJ78xuanA0vy70XZO1ycFT7N.H2QfHd2DySciQzboKsGYm.xufEcvWKx1tozALHszaOPeW2ILp0v.lr0L51tfq0AhKsQlKcSkR6Xs.t8B.XzM0fBpmHC7MWvBn6aDXeFTOHUtHaF7Fj9P3t6.6eYCJsWL5fJJSfpTu3nl7UL+aPuuSbXYPHD06OFyIFMQCcgFSWRvMaLs7FIjT1a0FSF2.F9Qiw49o19B00nsc6KitrrnK+HDM6wV1sSV4x4AxFZ8NzRYdLfcATtjYlNxlSn.CX4zY9pgT5MP.IGLzFcNcQONL8OEx9S16YBpnjel4hMT8CR+svKRi5kpsyjuNy.GvVr6xpf0sxfYDywKGJk1ZH01mPUmKO7YnTB4fp1x6G.BznVrYPShYWpQ23zBbJz6QXPCSgcg4GxPQyHDUYC+0vL2rB3REBn3V5xE79KOxw7rSygbjEcLvYMX7ugi4MIGxHMkixWC9biPs0VCzyrfMobZj7f1tRGg.a4lQbEYJjJufin8QPyv2M01zfqfV6GSAFm3BEFAd+.iG2a.ZE3lBihRGVRtlfSKQAFcnbhJdFS1G5zcGMPrnysfsi8A1QYqgG7PfcZFnHBObDScYi3dVNmazkQlbpf7LFFnnfF7Ps1XFYZNldhQHfPni1a3vshxNXvrlSU+Ln8OyNeXHzJhDdwjVCjpAD8WEV8zkAIgQsfRDfB+RFFMm5CQ89ALXIPpv9n9AfF74Dz8YK3B9dzJQhfSxNJ.f19FSN9jj6SF5rhmTzZHFQLpnoQ+TxP6+Po3b0tAMAkwfsed5cI3IkAD6L8qCI3zwYuLDrCjJCJdfgXc0QqRzqGYkt3HaX8R4T5RvsEJ9NimY4qJivIxPqlFl3kPtWBicLqUcaqEFAeGWOk.tgrDAE358dL7dU3OXGaMuz8GCBAFCMb7KkrkrNY96MmcoBrcDBw0jQ4xTQG3MrFsDIvcYwQkNDeEC+k93QPNlFqQqEv.R35na4AK5SUHuZIC506Hg6T0aPr5x0EZzucvxChipi5pYjekYZpsuh6crepWXFq.SqPaQf838PNHH+mLPnmpqVM5BDyVAN4TdNGaSaIQYokoQDxEZjoCz3KDcrNs.FNow.aPJY1fdNgT9tLUCKR6TajVLncH.E66svgbvP47Y3NSlrTkYIv7bMfvnhsv7RLwJbHI50XLG1WjlHfZnT1CHPImNXfBcyNCpOR1Y+.tBfRlx.WYZFG86eQiHfi0Mpn.8Ul1xr.UVGNwjjZRThB3Av+yUSvaA6qQvGxbvQw7LGdUnGl.iQmPbRMGw8BR43zpHzUFSsECZdjW9vnYSQMDC5BbOW2Q8OKrOMCvoVl2JxdKcU6PQRNYRnMaSglW0ZV8HJkgCnPof0iWA0X6TPmAXCFRAFrRXxcmt.xr1tf6LxkpooVoXxZ.zWGtwKEc2isQEfR+vf6xLL9JJxo7Asp1YjD79FzjUfh9CSetSQyIkSYferBsMYUIHlPlZGDuzbpXM3akFXy1ilQPUY33GYBauMJqtiRfqXqAhBTwbl2GPVjGhx3BRPeZxOCFGAyXAio2coFEsLtbhdz3bqovzJ4SfdyLXqsCyruW4sNrncFFV2H3gnulXQsTMCd0IgqkvpyHTOzcs6urJQ3ggFthQz0XDSuji3umHLZ8tKdof5RgiQg6qLAtUBxRjHTgfFLXjg51lH1mUn7a6yCXNH0cRGVI5jb8gSNgHVI8xFD6zrqG7+KXo0w9BNbTBEQPIBvr3H6MlkiBg9PkooMQFpXmn0ZyPauTh7lgWBtCgoNLTfamrc.c7jwpAYY2byuALKVPDR.8LyJGJ3vhI9.LEWcRULfiufZzFL6rgs+fxMgBF6.gcWt9MPJwQLr7Jph1zIn8ZuWFIYWuGMd.NxQVYArdXZPccOm.kV5kXO3x97drKE.C.NgrcTc9kOhlRBUttNZFRQXw4ouVJ+K0YnfFenUOsqauaV4QApPU2SGkudZN1ksQX5dnE08NfFTspB.t5vB1QF.Zc65z0hZ0.HJP9VDYBr5oUrhZAgpqTZmvVXFuDGHcsfEDp2wgY9ajEQZEubroGjoatu.aXvnWHZx6WLlAoeBf8PjTJVdGZgKdFS+kA45L6V5UBpJdlrKbCAmdNICqf5TyMig.HNgNC6pd8kWl9OSX4f0QHlJWmsIGYlEJzrbXmGCn8ffI6ckn.5Db01GBZ..C9KcKyQJlo.5+jdOCt5xM8YfyvBvtYTlFYngICV9cHwhx5vhKQZuG5iHnzwQHHUNtB8eQ+6Kld.P4jHvXFYFj0z8O1PGqJH2Rv9DUmSVvfG7Y6Dofce0DQFqWjujxTtc3HARFD0JJAFn01X6.RoWm+TT2TUroQNKj2JrFTONBkkyPRc.M.BOutbzkd3HjmAze9tYzFB09oP5rGwnU2brnbL78ZaJndzs6.oVqdD3FYJu.FLlTHJd8pQqFGGolknRqAuqPiIWVsgHiZvRAj0lI2TRRJm.upYjxrY4SVkV46FUee8iosBLpBTZPsCzQ8CA6.gDfwXOser2QKnVLKR.BupgVuP5dBIWGtlesmvQXLTaIPeWMTYu8lZXbTgY56ouFfLL52O5C+XYlmwP+DX5DQ3TA0pFpAOHi64H31qkcXtzVelicxBA4fz0UWhpih1B8KZl+9f0gPIvCVkX+5rdqg7XIa6zKLyTBGYRWo7c0ho8ngR0S2glL2n2aL1Jz59PInDLqwxhzWY3pSbUjEzvoLViX36kKH5l6V5P96cBA6v2x4X7nZlJFbPgHXPRzhWYMr.pKXjGsXCRhaVv6RtwM.SLcq0jAoRLrCy6xic2vz8LlXZwf2jEGBJkeM.UTFu9c27MPqUfmJNJg5EOM34eBQGBsVTLjkD0MgVxf56Ry72GNCiVTCVDZEx7poQOxgEEp5TOmLXRochzs5nMWPlaFjpRFMqPnjFkpqfAJHS3BMXbGLc3X2LHkj.R56EY7SjsihaT2cEnoRFxARTlEJkkNz.OsneueB43b1HBI5OpahqPdM4PKQJE30aukwE8ujonJl.TS+GFfsHFCAvQy9vplLaET3I3wvxvnSRzY.xSWuyg4+MM+k8aknWctNUzwCeBAbiQraeDGGg5tQAiw9uQxEUbLZqIHWoAcVYXXVDmHEaGFORltl2BQlSm.lfp0gorqAAKCkP64Pw9INT+.McmdgXjNBj7hIcSNse5mOITYyS18Yxg.ugF.TpjDP+35AaR6DLvv28.hXhXG2uYldMAecCAR6BQBxzFdQoFfBvji.mRYjCTzknd4lx1Qix6YFDnNfqyvIOGLL8uPSkLFcAW9TNBvQLwP6B3Po6B2xTf6gbtMWAy8nksXTr22imDR02AJzEzYjQp9fSTfX6olDfdcWKQKmjkNBlOcXLQqf5nZ6A0T0MTzUEZtB3PIadNa+502.g+Mnv1rYVBhwzQl4xsVrydeLw.vwVfhX.htSU.Jz8kJHCnZ55PBxum9KArkL3rGVWIDV46XA+pi7WRzaSxvJcXTQ8DECePLzHfJYmNVWH8eZ4KLgA7tkC35893jlQvvNY7TrB9BWIfS8ZKlJ9S0sUbDS5VQwX7Pg+Aor24z8xTAEbwBVbQJYT3GlZ5NgKg34Fz9t0HstonP2TlEFBIWGNQ2Olc8ZAP2avdDb2VLfIo.flltcc27hR.Dsdyk68A1PYJqBxHyPalTTjCxMENcwrxgx6DkErQ5o6SONgLGUCDfLKFF1rBe5CcUBaRTM.LDBZggCKTFwrASBHJXgFho..2GwQTRqCxRAkQTFy2u+DVoHdcnc+Lpv2aSF4AkXAHMA6VdjlV.TxXXSelPJOLSZauQtzJJIF4ktSsYBUK7.gJClG1xItn9TEXp90gi6bPvb04T4Oo.m33zGa5ZTvhDLBIUKe0bDvdNEr8ooyCc1tI2gxeXae0kOUCXlVATzOpjhSCEkMFD4SNIheHSrAsDz0WB090z24ShURCcYW9gHiRGzmaPA3QswoHQcSiHKvdOGrMYkbPG.kvhlJBkHC81sOxJ4kqtBEBtasOlyAgHjfxj0Boo.hJCxB1lVgybGGlvHrLYryF9AWRlj53Em3zCkIxD4ARB.SI4hW4FzV1fHsxUXmVzUUGs0njj60XxSV6Ilv6JdWdDiBjVH0yiChgMJnICCDsLyAelZzQ1.K3NiHmDaI.vKCH09JoT.Mec5FCBIWywX2vRPnyswrjXfbrhuLBjNDAMSigRA64bPtB5Ptczi6HDKH7FEnyDCfKQiJgHgdgAaiMUEY0jOekV10PFXMifpCBBdwnKnoTn2LfFW8JLuOd5D.+XVhYCYrryNQnDWj2IL7heNuqzA7NvQoLLHLrhhPOARvwD93lUepjYNpfGXTtapePvz94CuXVGRmBsnBUbdYfhBlMlHbh3WZKXsSAyZGkph.BMb1JvmD+DGnqf4halLZn71SFS.Rzww65Lo9HvlCf8oiM4fDCUTabd0OCZjI6LjdxSRvS01o3L.CdxzUa5SFR+Tuy3hw3Olb9xAe4CFPqrVYRlbnxAszxrJnfbVtAOTGUI72Uvv7cWQAH.DDV9I0eznOzYN.v7n1o3bt.kwYeYgsFGuldRAuf3honlkXrMcoxgZqimYJnc0pH3CjgAJimrpZJDD875fXxnzsSCHqBDG2GgzrPwRLleCwBlReSklpoCmxwRybRnYIKzVuriNLB++DYc0n6EGTbNH8MnCltgRO4rNZ7cMTJu8CPDjhVcw5L3fJYUxbNEnyVfQktiA+.hiQGqkgJGIGkkMZ5nDE+KiWcqnVqqEV6hdyXp0kRFtDo4y4QWbjIH6aksOpUYrMwQQyTYGZOJ4i5l7D37oTKbFrrMPuGMepEU4YOw6DXBYFEyXh8IBQ7dSQIGLcMy.xDy4zEiEzNEGYqLN0NZ1FknErIR2hbI0w7vQph.UgpUJDZvlZKRVrZXHpPvslQgdUH3oQ0pufDcpLqWkgxILWgIpBDVXc2Kv6lykqPqvM3c8+OA+RXXLBHC6CpEitsMSG7Pv.QndgRQ5MS8PoVFn6KYnj2toCkn1hA43DjZtyj.K1gzq.9TFla8AkalQeAwVqrLEpCsbGGtAWrm6l1ovAFn2cP1+gsuiJtZLTNNNw0bl7A.tNUHB2IvI1.2VEHDhvTvoYZyc1T9zAcoOQ8PlVq0LnrGLJt.RPCI.EwIyDlkPqj5l.qGLvc.mrScgYeWcZLhpY.0ucRwQ3NQYRYZbY4aXH48VDGIiwgrvu1qFHs.+AKXQ3tiXmQK5AoSCxAc+0J+DHFfv+IoU2IMPQW7KjsXFsHy33Rt7qD5ag2fI2xLPBjRe0fIapNPxPbaJrCk879XYYf8o8qZc.fLlMu+nV1KjUFlinkSYTzGwFMuNPSukP3CE2sCusLMgKAe9f3OBwcMxF89AZMjn0GJsR4HvA9LZyPv4Z8PuVqNkQg9rES03xkkM08qVXNvxfREKfqfksg0dowXohCvNqBvHoFLj+p3nhNHoPkqnR.b+vveBxsmFALPwZYO8xoOhnVlkYTUHCVtRITjbftsd1KtfOfA6U7+A.0WTIDCO.gVOPDHgXBk2knMyGKv7f8F4h6sRtCt2YV2PjMLsE.AmCYXVoxofDllQ4lj9PMUz9ZsX6J0ek5pyjKyHL6RuEbqBAqvvZsLM1gyfz2wIVTatQBBR0L5F6fnjaNkgFgLBU.fpJWbZsSJ3pbfTbPUSNfSSiawdmbrPkkMs5ZFgbTyySPzvz2nvyBMIzHtpQESv9zB15uB2FXT.o95HXSChnsYlo7B8bfQySK4FswUtsjII.2L6VsCX4.EnYDXgArt4nQLriQAd.e5FuhLxqCjgrAQ7suAjTHYnstlbd0W1abJmhzxXv+FNIRAMhDB4JEvzxzPkAt3VgxMoXO1ZySwPLw4LPCDz7s2yEYwAj3nZ0CCyTJGsIlVXFC8zdOygnmBN4oL7Fw+MloEJpMTnQ69iBdNNMamiDjelgiBY9NYX44fJjPU2rrAOuvb6CZmpUqp0fIN4IRuNlCCCaEvHtE67Uf8caANwADDdvcTxksRFK7zBg7hPV4TW.nscphAbdmShRymFS3X7Olly2MLiCkio8+8dwTwsDrLMnrfirVNEGAOr.Uni7IXZ7RvrCUj+zwI0p17QrS4kF.AKcN20+LZRzHnuTF8aSjrMHJjiXV..dbl1zrHA.k5IEjeXF5hFrNKZDWnkgFwH.zdj.uQz2aW+lKn05znnET4kQOqOIrpAidqsraeIB38nOuZQI21mZXCY5CVzlV0OVNt9JnFGXhzDs9duwNPPnNxlfU5L7dOj1tRJaEZhqb0ZFjIDmKFInPZk1emgvuGzz.YeTlmxlBovTcASZp68b+AknmKji.T71vUo4AEfsA4sx1YydHFNkVH2tTtHGBqoT8npqDm9dmULB4bttx+iq8BCZqLDh.D4TaOHBykP9MPmHYGhAvZPgS.yhSjJ8zndBGon1wsthH.BBaOMJb.ZCYQtPjUlBuSCZwNdFhxsazrl5oVPjZHPVkpSS8voBV4XjBMCY8BDAchMaASP6qZPLX3qCXeJjMCSwLo7ELv.inON6esP+GnJengIyrIsvN0OOsHANqVqSOb3D3DngObrn.5EkrFv4Pro6nM6AC00KEUdm0YFW+EZo3n3XYdLKWh5Rz5GNZFHvfwjRWPkDMAQv3VvQf4jpJ0LhYM0PTuIgQYqi99PWozHGoEB7g1iZnbD3jUsgiY3qlMz4LCwA0QQGzQQNrTNxXdZP.RJRoihi35HhG34CT5C24PnN3JIAoLgJgHluu9EmXRgIgaHu2qsz.ZGlirEgcWcvmivdPSAlfyslUojz6iCnoJDxAyD.CJwPXyP9UJFmrxjQCZqg4M0fByLxsdIHiWJLmoTsTswRvtRXq1D4JBFhdOCjPIdaCveI7AZy8ji4NVze.NwNn+MHdTGFOKkXnAfEVTTz5biICRszU6LnyPz7cmSKnw7HD5AEBcOkgNGnulTxrB3tcOpWPjryA7MlJvFSeWW0PjhGPccN.VDjNNR6cVg9rxGlLNkIWpaGSxsdpu25HIopbppOvvcF0egIZAMEqBOOs1mVOvdf9stTvqorozSUT1OlDydOFlOiQWTZWn4O.i2gov+AgpqadGIFzcXg15AKQmB3HmcZPF35L3TKZTvvgyZEGJElAzxOcRPYnMjElcmSLr698nT3DnxsD3Qx.1azfIPJLLahoN.T0DDh4Jpna0wekTqc.JGS0X1AQRXNMjrIsFuP7zLLtFCVlhPIwxxzPtiY5vtV0Bx+eezcrimn96.3k8TTBJXZGN3kqNahSJA3b..iInenxzUSDZQvjQTLynwYJpKSfYhA1GH.Uy1nY.fII5+WSuV12+sJ5EK57F5W9QZ5fsGzjRBQ8kVKaZEoxSYhVNFJW1dWrzzW3GAHuf79f4CAbIQ+ll.VXC+5cRtUjmP1MumQZjgwEcKryC89JRByQokKp5DL5uaLZmnQk5sRj3axv0fCxqAhCtB7YctiYuCU8sPK6KlNQBEoW95ftjSTJArW0ZAzDxlJolngrE3ksE7.libWlmTDW5X9.xi7cLLDWfpIjVfQduNOm.eAL4IDGZYO5fSPHfTMP.SIBx496L91.CC8RLUUFISF16HF1NH6CCOuxfL1Y1syfxDyLyD3bf2JHfgYmayhxCCIatJCXZSkCZ0DqAUslYynjcceVlixTbuCJrz9B4bDylJJrLjXukaNgJXoqam3icC850Km3MInwaWsnw8st3B8MGS0l4mf9TfvBfDpXl26LRtHhmaCVVxPpPMvMSLJ6XPvjXChrNSVbf1KGADgxpgGqBT82dUD86EJfb.tO8Nj4Ss5.eArVrxvoCI3YRXAQP.7+y+jkLyrVHyFcT5pIvN6vb0Ltxglj.oYe33FJziMRFBdcH7yYZwY7ZGbSKeRl9PF.TFqXjXQ1b5ZDuEgiYfedNL3CB7F2QAtAZ+6qGNx5mrHAWXvr.aVo6kXzgzoKxrvAPH1DACvw.jZFb4L3ASAORfDi5JatyrSslCTjYlT8BLti7dmCcXM4GCAnBuiPnLlkxxIjcoP4qUTr75wQ++xyUGjRAxbmlrHWGA+6JaXECEySV2nsS5bXKzH28CBI.j.p2cPgOMhNDL0xAzOZfJg6OPsxfBK2EwPebXxrAP6VYj5SYPfQ2z1HkVSJZ4qWO3P83pfxrxcI2ajVvjL5qMbPDL8gSfH6g7rbnnqVyokDVfyVUzXLn.IyfKWXljThEJ7CkcQ0b5dfFSAcKu.7JlhjNgKegoyX.eMrNRAdigCUPls5ffgaIzUefL1MQDjLppwogTQ4OsN.AMtravXGi5uNa2qty2nU3wvhUfalMdgNo1PHP6cXOOShx5uNCPBJoap6lbtRO536frk2+FjJrQIk5zLFmdLSPcPs1Pqo5U9gy4lrNB.k.Zlk8412vgbRaOKdVXYAYNPM9X5dSNgMirwNnZHGMCE92GknYofpvpcZWyn1EncCHE308c.gItoDZ0TTR7zdayXOT6LOPX.Nbj+.86d.ZU3Ovd30.m3h6AniL7JuuZY0.xxLar5yoY79IHdE0EipY1Pzfk9AwjS8hOb0NIfr.yD.3+BN.yIs3JZtEeJQ.qL5P9oAHP15j0fUxPOCzJzJzBMX6Z4nSqXvvSsvLdd+RGSMHHrjgTaXPaJTxI4nDEkYb3pa9.Fdd.4uerLjLHQdtZz4MXpaOCktBJVCwPu.UAYo.LDdOfn8fAZ2oWmDKvLHet1zgxgEX1Gdvi3bylJ9zYPugQbJzkXiWPDyIsapwDvuLUW63HjDaH9JEQU5vNlDAukWhCWIijCiadFt4.DyCGoin8oUpdwHT7JyPR.7u3rcHFtFDFSxqHQ8HtlbrwMXyo.pjKHjx19TlhonQuRTjqn+S58ui22XBWNNwUD5sigtr4vchYvGxY1HAC3FrDfhSl1qKWv4sI0xbR.PKmN0CuuAP3gQqgOmc7+.0wO5rM4.XJeALlmLmxfRffqXHeWXXbDS6nzAltmRg3.FSz8xikaJxm.qKn6iTALXs8pqfXkIBMMO9FNyag9sOn97KO2UBT7I9bEKsR8ranHzIiqGjURF0dy33pOQrXGAJZZNgFJzlTF1vE8YzonMfG.fjL.XASI64csLYtgTJ1vefQRCZM.qN.PBxA2TMyPLGOPKzgT0MFTUL+JSY7hqP21u1ovLkYrjL+NPn7btLhYBGqAAhV26TrDB9Kh3aGL6d+Q8NKFLGfhUHpMlDPH1iLnboS3al5qkinQA6e60OWpAVI3JxTBntb3BSQGPfJDRgnikrchIXSZXXF3Qp887pDDn4LXTWjyt8GXGxAqdCFVdMrnFU9ZBR5BtiwTRvCHUaf7WBtpxDKA0tDXjyhsREyN9.vocUh+f1q6ZaR4NRlLpmZcOzYZARUjAWHb48OzDIHnyfxPSJCNd9iw+Ke.lLqF91AAHDAFJit3ZRJDc7.9rV9AYWm63JbmlBPIAM8.D92mv4A5g6LqTafkUchqL0QZwneBleFlXMq.wLYDf9WVn7R62kp0iFxSOxnwxpDJEhhczBJKXr+VSJrxkUfob3A.yPOnL8HlzfKZNbwgEv2jJXzidfaTlBHcM3dQhFqYDvNV6H1jIDLSypL0vo7sPwp1C6zHvJPrKCCXGNowjR6JHh0FSuxQtsbBoGH4C.rALNmtDJkw4.Uzw06xJZBXNB97rNcJ2LSRDTWIcGczMOEZGGeznijGtRagVyLgMvALVtJtjfxS3..oJrbQRipFCYpLltfv3EdPrQZ4XwDPubhCoBwEFdri7Ys5tHGWHYn.qii.Zeto+jjrRHC8xSmiiO3YEl3kVQGtRMbyObSx7twOxTMEh73DymvXPa1TC8xPMiA9oECHNY.vgGAg7M0tEST5k.XB5PnLA2RslSg.PyDYL4FlY6NEiTp1fPsAJYGst.e1xfi.98aK2n8Ekabg.UzAqPFOLfGYJd1DtSn3v7I8heh5RovAU.9SGp2Rftcs+lLybXJBZ6ErBxHSWcCzCgwhPOqOscSSnKfPOPECDlkw.4ALWC1YfOeN12y0LhVd.WpQxM0rPkVU5zeGo+a3nGSF.azvNNFVbQzGTYnBdrMcDGBCaYEHrP3a6MOdJOKvvOhmhg07NgqIEyQHJzDc+9Pw.d6y.CFxrmolsJP2A5rEhpTfZbyXg0BWrv0HolQsSyf2.zQLDI9dwMIAMnxh9f4edsbytEQRirh.dFN5F34PSSFjJ9Wigwh7gFgHWo21YSLdj045fzYQEUaNKoYpLGGqA+7FjtP68oiuPy1vjDF5MfIOkTTCQT43LoR9leMRt7qNwR4ynB7sP66jWoyxEAeuz6RebAiggrSb15BiBuEi3HRW9LeVdSHB+mZ9f2Gpn94rNGaNCxKT13Hm814.7idFYh.RKFvczrs0YuiM3LqR+D19OqjG.hmTbsjQihpjzpN6MDDOpM3LlVHYEm+IbfZwhNDzCF4ndtUmBcopUhoIABQ5rqhkVzqmwKXOmyegIp6XiPUFsypEa2c7FHOzfEIFmsvfeuLbbRPRSC5K5YgMOsfeET93hIc9rVDCYqqRfC.YYF7myccTeyDj3HVXOKMMvryEzPzodIrNWaOhYkIPgZE9FqbV.TgqqPeaynseLocm40W9cYbIf41ox6mkaSSXjVICUOQpA0yc3K8tvFsPT0HyCswY+7Nwq.0rFPne1XRRuKUIlTzo0Cy95rWGRGhdkUN8mue1GO.QLdQoEums3J51AXlohJv1Gmkx0RHhCLXQbpaVJaLKzSznEbOOlmCh6gke3kPXztFExXd9kuI43gJfdzVm+sAjOLge1C0e9bmjzwiBzfDR0S5rU9JXi.DvvCc9HDCoyuom7IQhFAfa41F6kLziUvOEShync1yQPfP3AGDJP0UN61TbCgklZBilm89wHAD+KC8kbVr1DSiB58WiwoKyrqe1Ozxlu9yhTKAUpe1EG.qObSsBYHSxim2RchJTEg8k1QycALpfP4gYl1fxzu2oRSEFpavlZmK1onmlfm.XtZ33ty16XhCBnnyP8qC8Dhy4MXxbyJapob.Xzy5SlgqZA0XvnJrN+iHMWDbjlkG77liJIBEEVuAuimcdYi44aEXAkGyy2NineuPQI4f3qym8rLX5oDLJeP.E4ytuQgzLh.xJq5Y6DVTCgDn5g5khZSc16GLuKtsoK2iy4A6NdRGzSB6CTYRyO6J3DP1qrMKniRm89AmZhZlAcY1Wm6Cr7PzCAFF4SEJW+7VafrUA7prvbVRXIZILyykxGPwntFmUdnAsZ.wnZnlIkyJK555zlZfwBBOz3r34j8pDoPFNP.s.47u5BLjxjFBk7b1I++DySC7NxbYkylIjVq0YSvVEgdTNqrRECnPHgwToaHC4448Qw.p1NI0DnjFme+eElaRAfCPS6k5Fudv47X7nbZxIO6FLjzTH1wfYhOR4y+9KjZGc.f7Rxm+8B0yIPBQGiMm8HZgkvP383s2YykLBwsBKvC00hPH+l6yq4ke0+4WdG+GdsK4su8y+zqd6+Mu0a+3qd5yu5se8+vu8kO51q+cWd6027Ttj+ve5y+3Kie2ubdRO8ydxSdmule2zatIMr292e00+lO91m+U9W4+3eLJwAEMSYaTQxeXrhum5zXG+tibjpJyhZ6pu2Q6diTdzSsNNfUJpR+w8nxVBqPPdx5nNhvx8WeWyHpMCkeECPBCG68ysNgj0.xQjuLlWmw79i4ilAN9OP2.WxJ981hLIiCD6SLb0G2aHjN5dYTzclYtYZcuciY7cYpfy.9TBv3d6NOwTGqwAVdl2eRrSOKmtSEXRnUSiw8H.BXBqPLHzBACHy81ctx7jJG1cFrUE9+80hLzvaAcUKzgs6sC0Aj2PgCmvAlLHi2aqD.BkL8zSgHCXhx2a2YXqWEI3Dny2XKx82YDFv8fp5GK8ne+cDYLfMalHSSAt.tuqeYT8UXWGpY.AHqPm95GGwad5q+O+W9lu4+5+0+u7Ve3O9m+A+he4O4m8K9e+sduewO5G+ydq+p6q+8lu4it4oO+1252c4ydqa+n25u5s9wO82b8Su5cezyt5xau5me0m8rKexO+pa+827re628s+PE7xMO6m7ja9828sd6+h+R8Dd6G8tO4lKe7K+ou2MO9pm7ceue1mv+6egthO5yd5iH7l25lm9yu41q9EO869W7l+Cu424M0my+vezG8Qek+re3MO81mcySdxUO6q7G+gW+Im4mb2u328oe1m7qu5Yui9f9jO6pu3Bu3Aeye7iu91ad1Gbq9397KdvC+A273O+C93a98O8hG7FOLcwu55me8u9IWc5K9fadxM7ecbgVzt8pmd6qbg27ze5Su91ewmd0ce8E+vO95m732+Y27nqdtVVd9E56b5W5BcA28To+KBL7hG7+zC+fG8rq+za+fmb8iu5YWb8iu3AeqG9Se5m9Y2dQ7.ewC9NeyKdw+9Z7K+se3u3yt8+W7a+ie5k7o9O329+5e8E+69o+nKu8R8Q3A28oQeB+zqd1sWyh2C9QW86t9QW8gw8867vezUO+2d6MeZ7w8S9zadJe1evel8C7e+K+C9e36+4u7Kt96+IW+3G+jqd+ad907x8k+j7+3yu8pO8Ct9+zKdV++7+x+k+u9q+jqekK4+v+3mb4e+qtN77O6i9nq024gO7sd7O3B1od5Q9QW+qu5IW7ou381OUOX+Y28r9V+j+8oK9zKe1kexU2d0c+j3Q9mc0uS+NW705S4W7l4kOMe+O6+A+i4e9cOye4OmeK+dnW4w4ouxmy+wm88+C9zDav9Z9D8l2c2+ke3EW7Emwzg4Sa89m8PYA5ydxk5b8O7iuTqO+zeDey+s5+7te.qq+fO+Su74O+Jc2dva7SYurVu+7W8Y4AeiW21vabdaCGuhsguhS9eMeD+m+v2+5aezG+U+L9M9JdF04v+awy3ab5Y7O+g+3O5it5Q29xGvu4C+I+6es0s6s+7O3Ae40n27tW+5uI+wescCu5Cwou8EO3+iG9RC+e5ytRaXt5Cu48exke9284W9Iep1rnmw24s90O4lG8aYa2W1awca99AbEe2G8wW9zmd0Sd9eLNU9S9Zupj1+R4Wdymc60O827dWd6yhSw+7O6S9fa9rm8nq9g28zou2C9FXU+zWevWy9hO3pm933K9+V+6teXhu9A28CSu3G9R2RWbmW830wc+25H9o09ezy+zW7s9UW8rmGFl9VOTAR8tGW727D4zGqBWe21V8RI9du+MO4y+zO9lmd8i3ac5Jdwi9eymbymgIjSO++ud4y+vKu9IrO+C9rmKunO9W7zOPW7SezUw9rG7yCSWeqexkORKre96e4seLmWvOr1bd0yd2G8EaResm0WtOgU3etrf7GbA7Z48egokme5UB+s9g50xm8rWrbpG8OIL38MdntD94rH8Fmdn9S3u5exC+M7.7ZOe+o546YW8twO3q5A4teGyetuwq73oe6u3qzu+6c8S+UmbQ+se32Kcv6h26x+969VOj2NW7AegQ1+kO7DbX3egRGk5Z22u8pe+om4Kdv+hG1d2ZP2xn8yUPk+Em9ngkyK9a9rau4SzF5GeW.Ne0OHm9q9xmhu8C4u4+zdP3Bn6xEcAvVnqwQJdR9Se3G7I2byserNRbwc2++jGl4tew+8eY4O6g+xqd9U2d519Z27Kdkfht3hWYSxe9Ce9Mezs+c+5XuvquW4e0qrW9Uunup8Mu9swsa8UeXzloSekbh7M3I5+4WthRLzu3yw2TqpewGiWbsJZmm+q3N8nKexKtPc38EmFdvq7A8a+vmFoN75eF+yen1+7wu6c+nupOYewum8Lwq9g5A+AOneqGFYf7hmw+EO7Kk3xqreI788pewq7w3aEGPS+S6T8K9k9++X8+e5i0m+02cmUdYlA+29G7W6dE4l8zqhfUd9Eu1WpscrsjPnuy4y6+pgUe2VhK9C+z75I.7+P9w4Em5bed9l744URe37awe3CS5qu6KHTmUe907g40MP+9udlKegMiK1ZD6LVa+iIA7+6RXjexkO5Y2728nSQFyGnuc7czYimFlE+NO783qeqzWtlDJg2q+6dzid8a0W5WL+G6uX4O1ew5er+hs+X+E6+w9KN9i8Wb5+EeO8024kfs4Wbw689+3XS3CdvoiQQVXW7+CvggePC
I'm still working out the details of the training scripts for my own models. It's mostly working, but seems to stop training before my desired threshold of tolerance is reached.
I'll post more when the script is working. -
@Dan-Korneff I'm not sure if the tolerance refers to an absolute loss/ESR value, or whether it actually refers to a threshold of progress between Epochs.
Also, depending on the size of the model, there's basically a hard limit to how close the model can be to the original. The Rat is quite harmonically rich, so it will be on the harder end to model.
-
@Dan-Korneff Would it be CPU greedy to run several small models at the same time?
I'm thinking about modelling key component of a circuit. Not for reconstructing it though, just for having those models here and there in a DSP...In fact my question is, since a single component/sub-circuit has an easier behaviour than a full circuit, are the resultant models lighter to run, at least if you run only one of those?
-
@ustk I think it should be doable. My plan is to do a Grey Box approach. Use ML for some items, and then analog modeling for others.
Test out the snippet above and see how much CPU it uses.
I'm still in the "trying to make this work" phase so I haven't gotten into measuring or optimizing yet. -
@ustk so basically every NN model uses a number of weights. This results in a certain number of parameters being able to be tweaked by the AI essentially. The more parameters the more CPU is required for processing.
With simpler circuits, or even say individual components, you could probably use very small models. I am actually planning to use the same approach as you, using NNs just for the non linnear stuff. I'm hoping to get it all working at higher sample rates though to reduce aliasing which would stack up quickly if you are chaining NNs together.
-
@Dan-Korneff are there any flags I need to enable when compiling HISE to get the RT_Neural stuff compiling into a plugin properly?
-
@ccbl I didn't add any flags and it exported correctly.
-
@Dan-Korneff Thanks for sharing this.
What is the method to train your models?
-
-
@Dan-Korneff I followed all the steps in your Gitlab to get the Aida-X trainer up and running, but when I get to the actual training part, it reads all the configs and starts the training process but then fails with
"RuntimeError: cuDNN error: CUDNN_STATUS_NOT_SUPPORTED. This error may appear if you passed in a non-contiguous input.
I tried with both 24bit and 32bit float input files.
-
@ccbl I'm still working on the scripts, so they aren't 100% yet. Feel free to dig around and see if you can trace the issue.
-
This post is deleted! -
@Dan-Korneff I'm also getting the
CUDNN_STATUS_NOT_SUPPORTED
error when training with CUDA. With CUDA disabled, the traning goes as expected but is very slow (as expected ;-))
Are you using CUDA to train the model? If so, how are you setting the enviorment?
Like:
conda env config vars set CUBLAS_WORKSPACE_CONFIG=:16:8 conda activate base
...or some other way?
Thank you!
-
@tomekslesicki same is happening here. Looks like there's an incompatibility with the latest CUDA driver. I'll have to tweak that