NEWS
Gleitender Durchschnitt mit Blockly
-
Falls das noch interessiert - ich habe einen gleitenden Durchschnitt für meine Solaranlage umgesetzt. Siehe Printscreen.
In diesem Script wird eine Liste mit 12 Elementen erzeugt. Eine Schleife liest nun alle 5 Sekunden die aktuelle Leistung von der PV-Anlage (pv-power) ein. (5s * 12 = 1 Min.)
Der aktuelle gleitende Durchschnitt steht hier in der lokalen Variablen 1-min-avg.
Das Script kann für jede andere Zeit angepasst werden. Z.B. einen 5-Min Schnitt mit einer Liste mit 60 Elementen entsprechend.
-
Ich finde die Idee des gleitenden Mittelwerts toll.
Leider funktioniert die Variante unten nicht. Habe dabei von euch abgekupfert.
Möchte den gleitenden Mittelwert aus 24h also 24 Werten.
Aber irgendwie kommt dabei eher der letzte Wert raus.
Kann den Fehler nicht erkennen. Help please. -
@chemieka sagte: Kann den Fehler nicht erkennen.
Damit die Liste einen Skriptstart übersteht, muss die Liste in einem Datenpunkt (Typ "array") gespeichert werden, der bei Skriptstart eingelesen wird.
-
@paul53
Ich habe das jetzt 1 zu 1 nachgebaut wobei MittelTempMonat mal die Variable zu der Liste sein soll. Es spielt keine Rolle ob ich Zeichenkette oder Liste nehme. Wenn ich nur eine leere Liste erzeuge gehts.Leider Fehler 21:11:00.013 error javascript.0 (30115) script.js.javascript.MittelTemp: TypeError: Liste.push is not a function
21:11:00.014 error javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:19:9)
21:12:00.033 error javascript.0 (30115) script.js.javascript.MittelTemp: TypeError: Liste.push is not a function
21:12:00.034 error javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:19:9) -
Wenn ich es so mache klappt das mit der Liste aber bei der Mittelwertsberechnung kommt dann kein wert:
-
@chemieka sagte in Gleitender Durchschnitt mit Blockly:
kommt dann kein wert:
doch, der ist aber keine Zahl!
sind alle Werte der Liste Zahlen?
wo kommen diese her?
liefert der Sensor die Werte als Zahl? -
@homoran
Die werte komme auf dem Blockyscript selber und kommen von einem Sensor.
Ja das Problem ist genau das, dass es das falsche Format.
Wenn ich mit einer leeren Liste anfange dann gehts. Jetzt will ich mir aber die Werte zur Sicherheit zwischenspeichern in einer externen Variable (MittelTempMonat). Das gelingt mir nicht so, dass ich die Daten wieder nehmen könnte und dann weiterschreiben. -
@chemieka sagte: bei der Mittelwertsberechnung kommt dann kein wert:
Lass die Konvertierung "nach String" weg.
@homoran sagte in Gleitender Durchschnitt mit Blockly:
liefert der Sensor die Werte als Zahl?
"ACTUAL_TEMPERATURE" liefert Zahlen.
@chemieka sagte in Gleitender Durchschnitt mit Blockly:
TypeError: Liste.push is not a function
Dann steht im Listen-Datenpunkt etwas, was dort nicht rein gehört (keine Liste ist). Lösche den Wert komplett oder trage
[]
ein. "MittelTempMonat" ist vom Typ "array"? -
@paul53
leider keine Änderung
Bei mir ist es in Deutsch und Array ist Zeichenkette? Das habe ich so.
-
@chemieka sagte: Bei mir ist es in Deutsch und Array ist Zeichenkette?
Nein, "array" ist eine Liste. Nach Typ-Änderung den Wert löschen oder []!
-
@chemieka
Nehme ich aber nicht Zeichenkette sondern Liste geht schon mal die Variable MittelTempMonat
Aber er spuckt mir keinen Mittelwert aus.22:24:40.009 warn javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:21:3)
22:24:50.004 warn javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:21:3)
22:24:50.014 error javascript.0 (30115) script.js.javascript.MittelTemp: TypeError: Liste.push is not a function
22:24:50.015 error javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:17:9)
22:25:00.005 error javascript.0 (30115) script.js.javascript.MittelTemp: TypeError: Liste.push is not a function
22:25:00.006 error javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:17:9)
22:25:00.019 warn javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:21:3) -
@chemieka sagte: keinen Mittelwert
Der Datenpunkt ist vom Typ Zahl ("number")?
-
Ich glaube so stimmen die Ergebnisse:
Kommen aber dennoch Alarme auch wenn die Werte wohl jetzt stimmen. Ohne String kommen noch mehr Alarme.
-
@paul53
ja ist es -
@chemieka da ust ja immer noch nach String beim Mittelwert
-
@chemieka sagte: Ohne String kommen noch mehr Alarme.
Lass unbedingt "nach String" weg!
Die Liste scheint nicht in Ordnung zu sein. Bau einen Debug-output der Variablen
Liste
ein. -
@paul53
String ist raus:
Debug22:37:50.002 info javascript.0 (30115) script.js.javascript.MittelTemp: [7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9] 22:37:50.005 warn javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:21:3) 22:37:50.017 error javascript.0 (30115) script.js.javascript.MittelTemp: TypeError: Liste.push is not a function 22:37:50.017 error javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:17:9) 22:38:00.003 error javascript.0 (30115) script.js.javascript.MittelTemp: TypeError: Liste.push is not a function 22:38:00.003 error javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:17:9) 22:38:00.006 info javascript.0 (30115) script.js.javascript.MittelTemp: [7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,7.1,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9,6.9] 22:38:00.008 warn javascript.0 (30115) at Object.<anonymous> (script.js.javascript.MittelTemp:21:3)
MOD-EDIT: Code in code-tags gesetzt!
-
@chemieka Da sind doch jetzt wahrscheinlich auch Strings drin.
Mach die Liste mal leer.und was steht in den Zeilen, die als Fehler angegeben werden?
-
@chemieka sagte: TypeError: Liste.push is not a function
Das kann ich nicht nachvollziehen, denn Liste.push() wird ausgeführt, wie man im Log von Liste sehen kann.
Zur Warnung schau im Tab "Protokolle", wo weitere Informationen zu finden sind.
-
@paul53
Als Code:var Anzahl, Liste; function mathMean(myList) { return myList.reduce(function(x, y) {return x + y;}) / myList.length; } if (getState("admin.0.MittelTempMonat").val) { Liste = getState("admin.0.MittelTempMonat").val; } else { Liste = []; setState("admin.0.MittelTempMonat"/*MittelTempMonat*/, Liste, true); } schedule("*/10 * * * * *", async function () { console.log(Liste); if (Liste.length >= Anzahl) { Liste.shift(); } Liste.push(getState("hm-rpc.1.001818A992BC16.1.ACTUAL_TEMPERATURE").val); setState("admin.0.MittelTempMonat"/*MittelTempMonat*/, Liste, true); setState("admin.0.MittelTemp"/*MittelTemp*/, Math.round((mathMean(Liste))*10)/10, true); }); Anzahl = 96; //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyVWslN0NJSUFIQlZQJTI1RTJEQjJiTXlUJTIyJTNFQW56YWhsJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIyQ3YlNDBVSnUqM05ocHE3TU5jKGNabSUyMiUzRUxpc3RlJTNDJTJGdmFyaWFibGUlM0UlM0MlMkZ2YXJpYWJsZXMlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIycnVBcklra1R1Y2VDTTMlMjRrJTJDZVh4JTIyJTIweCUzRCUyMi04NyUyMiUyMHklM0QlMjIxODglMjIlM0UlM0NtdXRhdGlvbiUyMGVsc2UlM0QlMjIxJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJnZXRfdmFsdWUlMjIlMjBpZCUzRCUyMnAlMjMlNUVUJTVEcVVKJTNGX2s3JTdESiE4cTN0JTNBJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQVRUUiUyMiUzRXZhbCUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWRtaW4uMC5NaXR0ZWxUZW1wTW9uYXQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX3NldCUyMiUyMGlkJTNEJTIyKSUyRmd3ZjYhVkpQJTdCWjIoU2pLQ34lNDAlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMkN2JTQwVUp1KjNOaHBxN01OYyhjWm0lMjIlM0VMaXN0ZSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJnZXRfdmFsdWUlMjIlMjBpZCUzRCUyMkoybkYyUik5LSpvSXphT1NGTSU2MFUlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VhZG1pbi4wLk1pdHRlbFRlbXBNb25hdCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkVMU0UlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjJ2SXgqJTdEMGxPVDZOaSU2MEFmLkslMkZLciUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyQ3YlNDBVSnUqM05ocHE3TU5jKGNabSUyMiUzRUxpc3RlJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxpc3RzX2NyZWF0ZV93aXRoJTIyJTIwaWQlM0QlMjJHNS5WJTVETCU3RGZibGNHX25kKClOSkYlMjIlM0UlM0NtdXRhdGlvbiUyMGl0ZW1zJTNEJTIyMCUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ1cGRhdGUlMjIlMjBpZCUzRCUyMmFScCU0MCklNjBKKjNkTSUyRmxnTk1VS21DJTIyJTNFJTNDbXV0YXRpb24lMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhodG1sJTIyJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWRtaW4uMC5NaXR0ZWxUZW1wTW9uYXQlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjJUUGVBaEhNJTdEdlFndUolMkJPNjZQOHMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMkN2JTQwVUp1KjNOaHBxN01OYyhjWm0lMjIlM0VMaXN0ZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnNjaGVkdWxlJTIyJTIwaWQlM0QlMjI1NkFjaiU0MCUyRmFmJTI1JTdCfnNGaSU3RGNwV18lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ0hFRFVMRSUyMiUzRSolMkYxMCUyMColMjAqJTIwKiUyMColMjAqJTNDJTJGZmllbGQlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyU1RBVEVNRU5UJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZGVidWclMjIlMjBpZCUzRCUyMiU3Q0FYdkdlfiU2MEFTUyFzbHElNUVWJTYwOF8lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTZXZlcml0eSUyMiUzRWxvZyUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRSUzQ3NoYWRvdyUyMHR5cGUlM0QlMjJ0ZXh0JTIyJTIwaWQlM0QlMjJ6MlNyeS1GRlklM0IlMjQlM0ZTU19VdkVoJTJGJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRXRlc3QlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMkZxTiUyNXo4b2ltQzJGJTNEaGlqTGJLTCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyQ3YlNDBVSnUqM05ocHE3TU5jKGNabSUyMiUzRUxpc3RlJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX2lmJTIyJTIwaWQlM0QlMjJacDIlM0QlM0JVfkd3TF9lMEclN0NOTSgpbiUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMkclMjUlMjVHM1olNURKMXglN0MxZkJQJTJCYUNnUSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFR1RFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybGlzdHNfbGVuZ3RoJTIyJTIwaWQlM0QlMjJTVFdMalRRZGElM0ZRJTdEUW9JYyU3Q0NjMiUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyOWtfJTdCKiUyQiUzRiUzRG9YJTVEWDN3enB6Y1guJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJDdiU0MFVKdSozTmhwcTdNTmMoY1ptJTIyJTNFTGlzdGUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQiUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMkFuKWI1RkJHN1oqY0wlNDAtZUcwcTYlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMlVrJTdDSUlBSEJWUCUyNUUyREIyYk15VCUyMiUzRUFuemFobCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybGlzdHNfZ2V0SW5kZXglMjIlMjBpZCUzRCUyMmRrNVBrQk5OR2NLSGFaOE9ZZ1MlNDAlMjIlM0UlM0NtdXRhdGlvbiUyMHN0YXRlbWVudCUzRCUyMnRydWUlMjIlMjBhdCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJNT0RFJTIyJTNFUkVNT1ZFJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSEVSRSUyMiUzRUZJUlNUJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMjFwckYlMkJFZiUzQU5JJTJDMCUyQiU0MHh5b0VVRyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIyQ3YlNDBVSnUqM05ocHE3TU5jKGNabSUyMiUzRUxpc3RlJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybGlzdHNfc2V0SW5kZXglMjIlMjBpZCUzRCUyMk4hJTNBJTNESXglM0E3ZDBqSCpZeDguJTNEdmUlMjIlM0UlM0NtdXRhdGlvbiUyMGF0JTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk1PREUlMjIlM0VJTlNFUlQlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldIRVJFJTIyJTNFTEFTVCUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyTElTVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19nZXQlMjIlMjBpZCUzRCUyMnRKSXoyUGF0QU1uJTVEJTI1TjBSNyUyNGQlMjMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMkN2JTQwVUp1KjNOaHBxN01OYyhjWm0lMjIlM0VMaXN0ZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlRPJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjI0bSU1QjVLQUtkJTI0dWptUClCRzZRLmQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VobS1ycGMuMS4wMDE4MThBOTkyQkMxNi4xLkFDVFVBTF9URU1QRVJBVFVSRSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ1cGRhdGUlMjIlMjBpZCUzRCUyMnElM0ZjalczZyUzRDdrJTQwJTdEaiUyNXElNUVTUWE2JTIyJTNFJTNDbXV0YXRpb24lMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhodG1sJTIyJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWRtaW4uMC5NaXR0ZWxUZW1wTW9uYXQlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjIlNDAlMkZ3bU9CJTIzbClWNSU1RWhGZTIlNjB1WTglMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMkN2JTQwVUp1KjNOaHBxN01OYyhjWm0lMjIlM0VMaXN0ZSUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ1cGRhdGUlMjIlMjBpZCUzRCUyMm5NJTI1a2RJNDkoc29SVTdOeTAlNUUlNUQ4JTIyJTNFJTNDbXV0YXRpb24lMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhodG1sJTIyJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFYWRtaW4uMC5NaXR0ZWxUZW1wJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9ybmRmaXhlZCUyMiUyMGlkJTNEJTIyJTIzLTEwSGYlNUIzJTI0JTdDJTI0JTdEai1qdVQlMkZpJTVFJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIybiUyMiUzRTElM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMnglMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMil1MlMlN0QlN0RsJTJCQVFlOCU1RCU3RE0hIVRqZSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTMuMTIzNCUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9vbl9saXN0JTIyJTIwaWQlM0QlMjIlMjRTJTdDdSUzRHdvYn5wKTFPJTdDcGF4YmIlM0IlMjIlM0UlM0NtdXRhdGlvbiUyMG9wJTNEJTIyQVZFUkFHRSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT1AlMjIlM0VBVkVSQUdFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJMSVNUJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydmFyaWFibGVzX2dldCUyMiUyMGlkJTNEJTIyNyU1RHRoVENoQTJxT3clNUVfV1pSbigpJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJDdiU0MFVKdSozTmhwcTdNTmMoY1ptJTIyJTNFTGlzdGUlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZuZXh0JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfc2V0JTIyJTIwaWQlM0QlMjIlM0JFcTUlMkMlMkNzSVdDJTNBLUclNUVEWWYoJTdDTSUyMiUyMHglM0QlMjItODglMjIlMjB5JTNEJTIyMjEyJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJVayU3Q0lJQUhCVlAlMjVFMkRCMmJNeVQlMjIlM0VBbnphaGwlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMmJnLSUzQSktKENhU34pQzMlM0E2MkFFJTVFJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFOTYlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRnhtbCUzRQ==