From 7813c0b37d3d31bfb98077d4b5d8ffef41ed5060 Mon Sep 17 00:00:00 2001 From: Ewoud Date: Sun, 13 Aug 2023 12:46:12 +0200 Subject: [PATCH] Refactor Instances module, DDP/Artnet uses instance ip index.js - processUpdate, check if not model.json Module - connectedChanged and enabledChanged call onOffChanged SysModUI - remove okay check before UserModArtNet, DDP - add UI to select ip UserModE131 - use onOffChanged trigger UserModInstances - rename from UserModWLEDDIscovery - nodes vector of NodeInfo instead of dictionary - add UI to display nodes - use onOffChanged trigger - check once per second - read node name from packet contents - use timestamp to remove node if no update in 32 seconds (WLED sends each 30 seconds) --- data/index.js | 11 +- platformio.ini | 1 - src/App/AppModLeds.h | 7 +- src/Module.h | 5 +- src/Sys/SysModFiles.cpp | 2 +- src/Sys/SysModUI.cpp | 14 +- src/Sys/SysModWeb.cpp | 43 +- src/Sys/SysModWeb.h | 4 +- src/User/UserModArtNet.h | 39 +- src/User/UserModDDP.h | 41 +- src/User/UserModE131.h | 70 ++-- src/User/UserModInstances.h | 166 ++++++++ src/User/UserModWLEDDiscovery.h | 61 --- src/html_ui.h | 692 ++++++++++++++++---------------- src/main.cpp | 6 +- 15 files changed, 638 insertions(+), 524 deletions(-) create mode 100644 src/User/UserModInstances.h delete mode 100644 src/User/UserModWLEDDiscovery.h diff --git a/data/index.js b/data/index.js index d9ecf87f..5850ef1b 100644 --- a/data/index.js +++ b/data/index.js @@ -71,8 +71,9 @@ function makeWS() { console.log("Error: no valid model", json); } else { //update - // console.log("WS receive update", json); - processUpdate(json); + if (!Array.isArray(json)) //only the model is an array + // console.log("WS receive update", json); + processUpdate(json); } } } @@ -345,7 +346,7 @@ function flushUIFunCommands() { if (uiFunCommands.length > 0) { //if something to flush var command = {}; command["uiFun"] = uiFunCommands; //ask to run uiFun for vars (to add the options) - console.log("uiFunCommands", command); + // console.log("flushUIFunCommands", command); requestJson(command); uiFunCommands = []; } @@ -451,14 +452,12 @@ function processVarNode(node, key, json) { } } if (json.hasOwnProperty("table")) { - console.log("processUpdate table", key, json.table); //remove table rows let tbodyNode = cE('tbody'); - //find model info let variable = findVar(key); - console.log("processUpdate table model", variable); + console.log("processUpdate table", key, variable, json.table); //add each row let rowNr = 0; diff --git a/platformio.ini b/platformio.ini index 3704a8ff..82ef6d65 100644 --- a/platformio.ini +++ b/platformio.ini @@ -11,7 +11,6 @@ lib_deps = https://github.com/me-no-dev/ESPAsyncWebServer.git ; https://github.com/lost-hope/ESPAsyncWebServer.git#master https://github.com/bblanchon/ArduinoJson.git - https://github.com/netmindz/Dictionary.git#first [appmod_leds] build_flags = diff --git a/src/App/AppModLeds.h b/src/App/AppModLeds.h index 6a289014..dcaef293 100644 --- a/src/App/AppModLeds.h +++ b/src/App/AppModLeds.h @@ -50,7 +50,7 @@ class AppModLeds:public Module { print->print("Set Brightness to %d -> %d\n", var["value"].as(), bri); }); - ui->initSelect(parentVar, "fx", 6, false, [](JsonObject var) { //uiFun. 6: Juggles is default + ui->initSelect(parentVar, "fx", 0, false, [](JsonObject var) { //uiFun web->addResponse(var["id"], "label", "Effect"); web->addResponse(var["id"], "comment", "Effect to show"); JsonArray select = web->addResponseA(var["id"], "select"); @@ -95,7 +95,7 @@ class AppModLeds:public Module { } // fx < size }); - ui->initSelect(parentVar, "projection", -1, false, [](JsonObject var) { //uiFun. 1: is default + ui->initSelect(parentVar, "projection", 0, false, [](JsonObject var) { //uiFun. // web->addResponse(var["id"], "label", "Effect"); web->addResponse(var["id"], "comment", "How to project fx to fixture"); JsonArray select = web->addResponseA(var["id"], "select"); @@ -128,7 +128,7 @@ class AppModLeds:public Module { buffer[3] = max(LedsV::nrOfLedsP * SysModWeb::ws->count()/200, 16U); //interval in ms * 10, not too fast }); - ui->initSelect(parentVar, "ledFix", -1, false, [](JsonObject var) { //uiFun + ui->initSelect(parentVar, "ledFix", 0, false, [](JsonObject var) { //uiFun web->addResponse(var["id"], "label", "LedFix"); web->addResponse(var["id"], "comment", "Fixture to display effect on"); JsonArray select = web->addResponseA(var["id"], "select"); @@ -162,7 +162,6 @@ class AppModLeds:public Module { char details[32] = ""; print->fFormat(details, sizeof(details), "P:%dx%dx%d V:%dx%dx%d", LedsV::widthP, LedsV::heightP, LedsV::depthP, LedsV::widthV, LedsV::heightV, LedsV::depthV); web->addResponse(var["id"], "value", details); - }, [](JsonObject var) { //chFun }); ui->initText(parentVar, "nrOfLeds", nullptr, true, [](JsonObject var) { //uiFun diff --git a/src/Module.h b/src/Module.h index 409d5d44..bd1d9362 100644 --- a/src/Module.h +++ b/src/Module.h @@ -34,8 +34,9 @@ class Module { virtual void loop() {} - virtual void connectedChanged() {} - virtual void enabledChanged() {} + virtual void connectedChanged() {onOffChanged();} + virtual void enabledChanged() {onOffChanged();} + virtual void onOffChanged() {} virtual void testManager() {} virtual void performanceManager() {} diff --git a/src/Sys/SysModFiles.cpp b/src/Sys/SysModFiles.cpp index 472ee5aa..bee48e62 100644 --- a/src/Sys/SysModFiles.cpp +++ b/src/Sys/SysModFiles.cpp @@ -79,7 +79,7 @@ void SysModFiles::loop(){ mdl->setValueV("drsize", "%d / %d B", usedBytes(), totalBytes()); - // if something changed in clist + // if something changed in fileTbl if (filesChanged) { filesChanged = false; diff --git a/src/Sys/SysModUI.cpp b/src/Sys/SysModUI.cpp index 51d0066b..aa8e058d 100644 --- a/src/Sys/SysModUI.cpp +++ b/src/Sys/SysModUI.cpp @@ -74,15 +74,6 @@ void SysModUI::loop() { SysModWeb::ws->cleanupClients(); if (SysModWeb::ws->count()) { - //check if there are valid clients before!!! - bool okay = false; - for (auto client:SysModWeb::ws->getClients()) { - if (client->status() == WS_CONNECTED && !client->queueIsFull()) - okay = true; - } - - if (okay) { - SysModWeb::wsSendBytesCounter++; //send var to notify client data coming is for var (client then knows it is canvas and expects data for it) @@ -124,7 +115,6 @@ void SysModUI::loop() { SysModWeb::ws->cleanupClients(0); //disconnect all clients to release memory SysModWeb::ws->_cleanBuffers(); } - } // if okay } varLoop->counter++; @@ -270,10 +260,12 @@ const char * SysModUI::processJson(JsonVariant &json) { //call ui function... if (!var["uiFun"].isNull()) {//isnull needed here! size_t funNr = var["uiFun"]; - if (funNr < ucFunctions.size()) + if (funNr < ucFunctions.size()) ucFunctions[funNr](var); else print->print("processJson function nr %s outside bounds %d >= %d\n", var["id"].as(), funNr, ucFunctions.size()); + + //if select var, send value back if (var["type"] == "select") web->addResponseI(var["id"], "value", var["value"]); //temp assume int only diff --git a/src/Sys/SysModWeb.cpp b/src/Sys/SysModWeb.cpp index 85890f56..9c1b799d 100644 --- a/src/Sys/SysModWeb.cpp +++ b/src/Sys/SysModWeb.cpp @@ -28,8 +28,8 @@ AsyncWebSocket * SysModWeb::ws = nullptr; const char * (*SysModWeb::processWSFunc)(JsonVariant &) = nullptr; -DynamicJsonDocument * SysModWeb::responseDoc0 = nullptr; -DynamicJsonDocument * SysModWeb::responseDoc1 = nullptr; +DynamicJsonDocument * SysModWeb::responseDocLoopTask = nullptr; +DynamicJsonDocument * SysModWeb::responseDocAsyncTCP = nullptr; bool SysModWeb::clientsChanged = false; unsigned long SysModWeb::wsSendBytesCounter = 0; @@ -38,8 +38,8 @@ unsigned long SysModWeb::wsSendJsonCounter = 0; SysModWeb::SysModWeb() :Module("Web") { ws = new AsyncWebSocket("/ws"); server = new AsyncWebServer(80); - responseDoc0 = new DynamicJsonDocument(2048); - responseDoc1 = new DynamicJsonDocument(2048); + responseDocLoopTask = new DynamicJsonDocument(2048); + responseDocAsyncTCP = new DynamicJsonDocument(3072); }; void SysModWeb::setup() { @@ -48,13 +48,13 @@ void SysModWeb::setup() { parentVar = ui->initModule(parentVar, name); - JsonObject tableVar = ui->initTable(parentVar, "clist", nullptr, false, [](JsonObject var) { //uiFun + JsonObject tableVar = ui->initTable(parentVar, "clTbl", nullptr, false, [](JsonObject var) { //uiFun web->addResponse(var["id"], "label", "Clients"); web->addResponse(var["id"], "comment", "List of clients"); JsonArray rows = web->addResponseA(var["id"], "table"); web->clientsToJson(rows); }); - ui->initText(tableVar, "clNr", nullptr, true, [](JsonObject var) { //uiFun + ui->initNumber(tableVar, "clNr", -1, true, [](JsonObject var) { //uiFun web->addResponse(var["id"], "label", "Nr"); }); ui->initText(tableVar, "clIp", nullptr, true, [](JsonObject var) { //uiFun @@ -76,6 +76,9 @@ void SysModWeb::setup() { ui->initText(parentVar, "wsSendBytes"); ui->initText(parentVar, "wsSendJson"); + ui->initNumber(parentVar, "queueLength", WS_MAX_QUEUED_MESSAGES, true, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "comment", "32 not enough, investigate..."); + }); print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); } @@ -92,11 +95,11 @@ void SysModWeb::loop() { if (millis() - secondMillis >= 1000) { secondMillis = millis(); - // if something changed in clist + // if something changed in clTbl if (clientsChanged) { clientsChanged = false; - ui->processUiFun("clist"); + ui->processUiFun("clTbl"); } uint8_t rowNr = 0; @@ -344,7 +347,8 @@ void SysModWeb::wsEvent2(AsyncWebSocket * server, AsyncWebSocketClient * client, void SysModWeb::printClient(const char * text, AsyncWebSocketClient * client) { - print->print("%s client: %d %s q:%d s:%d (w:%d)\n", text, client?client->id():-1, client?client->remoteIP().toString().c_str():"No", client->queueIsFull(), client->status(), ws->count()); + print->print("%s client: %d %s q:%d s:%d (#:%d)\n", text, client?client->id():-1, client?client->remoteIP().toString().c_str():"No", client->queueIsFull(), client->status(), ws->count()); + //status: { WS_DISCONNECTED, WS_CONNECTED, WS_DISCONNECTING } } void SysModWeb::sendDataWs(AsyncWebSocketClient * client, JsonVariant json) { @@ -354,17 +358,9 @@ void SysModWeb::sendDataWs(AsyncWebSocketClient * client, JsonVariant json) { } // return; wsSendJsonCounter++; - // ws->cleanupClients(); + ws->cleanupClients(); if (ws->count()) { - bool okay = false; - for (auto client:SysModWeb::ws->getClients()) { - if (client->status() == WS_CONNECTED && !client->queueIsFull()) - okay = true; - } - - if (okay) { - size_t len = measureJson(json); AsyncWebSocketMessageBuffer *wsBuf = ws->makeBuffer(len); @@ -372,7 +368,7 @@ void SysModWeb::sendDataWs(AsyncWebSocketClient * client, JsonVariant json) { wsBuf->lock(); serializeJson(json, (char *)wsBuf->get(), len); if (client) { - if (client->status() == WS_CONNECTED && !client->queueIsFull()) + if (client->status() == WS_CONNECTED && !client->queueIsFull()) client->text(wsBuf); else printClient("sendDataWs client full or not connected", client); @@ -380,11 +376,11 @@ void SysModWeb::sendDataWs(AsyncWebSocketClient * client, JsonVariant json) { // DEBUG_PRINTLN(F("to a single client.")); } else { for (auto client:ws->getClients()) { - if (client->status() == WS_CONNECTED && !client->queueIsFull()) + if (client->status() == WS_CONNECTED && !client->queueIsFull()) client->text(wsBuf); else - // printClient("sendDataWs client full or not connected", client); //crash?? - print->print("sendDataWs client full or not connected\n"); + printClient("sendDataWs client(s) full or not connected", client); //crash?? + // print->print("sendDataWs client full or not connected\n"); } // DEBUG_PRINTLN(F("to multiple clients.")); } @@ -397,7 +393,6 @@ void SysModWeb::sendDataWs(AsyncWebSocketClient * client, JsonVariant json) { ws->cleanupClients(); //disconnect all clients to release memory ws->_cleanBuffers(); } - } //if okay } } @@ -595,5 +590,5 @@ void SysModWeb::clientsToJson(JsonArray array, bool nameOnly, const char * filte JsonDocument * SysModWeb::getResponseDoc() { // print->print("response wsevent core %d %s\n", xPortGetCoreID(), pcTaskGetTaskName(NULL)); - return strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1; + return strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) == 0?web->responseDocLoopTask:web->responseDocAsyncTCP; } diff --git a/src/Sys/SysModWeb.h b/src/Sys/SysModWeb.h index 51bb1e55..7b69eb33 100644 --- a/src/Sys/SysModWeb.h +++ b/src/Sys/SysModWeb.h @@ -83,8 +83,8 @@ class SysModWeb:public Module { static AsyncWebServer *server; static const char * (*processWSFunc)(JsonVariant &); - static DynamicJsonDocument *responseDoc0; - static DynamicJsonDocument *responseDoc1; + static DynamicJsonDocument *responseDocLoopTask; + static DynamicJsonDocument *responseDocAsyncTCP; }; diff --git a/src/User/UserModArtNet.h b/src/User/UserModArtNet.h index e987d2e6..2a14fd29 100644 --- a/src/User/UserModArtNet.h +++ b/src/User/UserModArtNet.h @@ -17,12 +17,33 @@ class UserModArtNet:public Module { public: - IPAddress targetIp; + static IPAddress targetIp; //tbd: targetip also configurable from fixtures and artnet instead of pin output UserModArtNet() :Module("ArtNet") { print->print("%s %s\n", __PRETTY_FUNCTION__, name); - isEnabled = false; + isEnabled = false; //default off + + parentVar = ui->initModule(parentVar, name); + + ui->initSelect(parentVar, "artInst", -1, false, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "Instance"); + web->addResponse(var["id"], "comment", "Instance to send data"); + JsonArray select = web->addResponseA(var["id"], "select"); + for (NodeInfo node: UserModInstances::nodes) { + char option[32] = { 0 }; + strcpy(option, node.ip.toString().c_str()); + strcat(option, " "); + strcat(option, node.details); + select.add(option); + } + }, [](JsonObject var) { //chFun + size_t ddpInst = var["value"]; + if (ddpInst >=0 && ddpInst < UserModInstances::nodes.size()) { + targetIp = UserModInstances::nodes[ddpInst].ip; + print->print("Start ArtNet to %s\n", targetIp.toString().c_str()); + } + }); //ddpInst print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); }; @@ -31,21 +52,17 @@ class UserModArtNet:public Module { void setup() { Module::setup(); print->print("%s %s\n", __PRETTY_FUNCTION__, name); - targetIp = IPAddress(0,0,0,0); // TODO allow setting at runtime + print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); } - // void connectedChanged() { - // if (SysModModules::isConnected) { - // print->print("%s %s - Connected\n", __PRETTY_FUNCTION__, name); - // } - // } - void loop(){ // Module::loop(); if(!SysModModules::isConnected) return; + if(!targetIp) return; + if(!lds->newFrame) return; // calculate the number of UDP packets we need to send @@ -114,4 +131,6 @@ class UserModArtNet:public Module { }; -static UserModArtNet *artnetmod; \ No newline at end of file +static UserModArtNet *artnetmod; + +IPAddress UserModArtNet::targetIp; diff --git a/src/User/UserModDDP.h b/src/User/UserModDDP.h index bd1010c8..e9540c3d 100644 --- a/src/User/UserModDDP.h +++ b/src/User/UserModDDP.h @@ -33,12 +33,33 @@ class UserModDDP:public Module { public: - IPAddress targetIp; + static IPAddress targetIp; //tbd: targetip also configurable from fixtures, and ddp instead of pin output UserModDDP() :Module("DDP") { print->print("%s %s\n", __PRETTY_FUNCTION__, name); - isEnabled = false; + isEnabled = false; //default off + + parentVar = ui->initModule(parentVar, name); + + ui->initSelect(parentVar, "ddpInst", -1, false, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "Instance"); + web->addResponse(var["id"], "comment", "Instance to send data"); + JsonArray select = web->addResponseA(var["id"], "select"); + for (NodeInfo node: UserModInstances::nodes) { + char option[32] = { 0 }; + strcpy(option, node.ip.toString().c_str()); + strcat(option, " "); + strcat(option, node.details); + select.add(option); + } + }, [](JsonObject var) { //chFun + size_t ddpInst = var["value"]; + if (ddpInst >=0 && ddpInst < UserModInstances::nodes.size()) { + targetIp = UserModInstances::nodes[ddpInst].ip; + print->print("Start DDP to %s\n", targetIp.toString().c_str()); + } + }); //ddpInst print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); }; @@ -50,27 +71,15 @@ class UserModDDP:public Module { print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); } - void connectedChanged() { - if (SysModModules::isConnected) - print->print("%s %s - Connected\n", __PRETTY_FUNCTION__, name); - } - void loop(){ // Module::loop(); if(!SysModModules::isConnected) return; - - if((!targetIp) && (wledDiscoveryMod->nodes.length() >= 1)) { - targetIp = wledDiscoveryMod->nodes.firstKey(); // TODO: replace with WebUI setting - print->print("Start DDP to %s\n", targetIp.toString().c_str()); - } - if(!targetIp) return; if(!lds->newFrame) return; - // calculate the number of UDP packets we need to send bool isRGBW = false; @@ -143,4 +152,6 @@ class UserModDDP:public Module { }; -static UserModDDP *ddpmod; \ No newline at end of file +static UserModDDP *ddpmod; + +IPAddress UserModDDP::targetIp; diff --git a/src/User/UserModE131.h b/src/User/UserModE131.h index ca2acd17..bef6a96e 100644 --- a/src/User/UserModE131.h +++ b/src/User/UserModE131.h @@ -30,7 +30,7 @@ class UserModE131:public Module { UserModE131() :Module("e131-sACN support") { print->print("%s %s\n", __PRETTY_FUNCTION__, name); - isEnabled = false; + isEnabled = false; //defailt off print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); }; @@ -41,19 +41,38 @@ class UserModE131:public Module { print->print("%s %s\n", __PRETTY_FUNCTION__, name); } - void connectedChanged() { - if (SysModModules::isConnected) { - print->print("UserModE131::connected\n"); - setOn(); - print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); - } - } + // void connectedChanged() { + // setOnOff(); + // } + + // void enabledChanged() { + // setOnOff(); + // } + + void onOffChanged() { + + if (SysModModules::isConnected && isEnabled) { + print->print("UserModE131::connected && enabled\n"); + + if (e131Created) { // TODO: crashes here - no idea why! + print->print("UserModE131 - ESPAsyncE131 created already\n"); + return; + } + print->print("UserModE131 - Create ESPAsyncE131\n"); - void enabledChanged() { - if (isEnabled) - setOn(); - else - setOff(); + e131 = ESPAsyncE131(universeCount); + if (this->e131.begin(E131_MULTICAST, universe, universeCount)) { // TODO: multicast igmp failing, so only works with unicast currently + print->print("Network exists, begin e131.begin ok\n"); + success = true; + } + else { + print->print("Network exists, begin e131.begin FAILED\n"); + } + e131Created = true; + } + else { + e131Created = false; + } } void loop(){ @@ -90,31 +109,6 @@ class UserModE131:public Module { } } - void setOn() { - if (SysModModules::isConnected && isEnabled) { - - if (e131Created) { // TODO: crashes here - no idea why! - print->print("UserModE131 - ESPAsyncE131 created already\n"); - return; - } - print->print("UserModE131 - Create ESPAsyncE131\n"); - - e131 = ESPAsyncE131(universeCount); - if (this->e131.begin(E131_MULTICAST, universe, universeCount)) { // TODO: multicast igmp failing, so only works with unicast currently - print->print("Network exists, begin e131.begin ok\n"); - success = true; - } - else { - print->print("Network exists, begin e131.begin FAILED\n"); - } - e131Created = true; - } - } - - void setOff() { - e131Created = false; - } - void addWatch(uint8_t channel, const char * id, uint16_t max) { varsToWatch[channel].id = id; varsToWatch[channel].max = max; diff --git a/src/User/UserModInstances.h b/src/User/UserModInstances.h new file mode 100644 index 00000000..740bea5c --- /dev/null +++ b/src/User/UserModInstances.h @@ -0,0 +1,166 @@ +/* + @title StarMod + @file UserModInstances.h + @date 20230730 + @repo https://github.com/ewoudwijma/StarMod + @Authors https://github.com/ewoudwijma/StarMod/commits/main + @Copyright (c) 2023 Github StarMod Commit Authors + @license GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 +*/ + +#include +#include "ArduinoJson.h" + +struct NodeInfo { + IPAddress ip; + char type[8]; + unsigned long timeStamp; + char details[64]; + JsonVariant json; //tbd +}; + +class UserModInstances:public Module { + +public: + + static std::vector nodes; + + UserModInstances() :Module("Instances") { + print->print("%s %s\n", __PRETTY_FUNCTION__, name); + + print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); + }; + + //setup filesystem + void setup() { + Module::setup(); + print->print("%s %s\n", __PRETTY_FUNCTION__, name); + + parentVar = ui->initModule(parentVar, name); + + JsonObject tableVar = ui->initTable(parentVar, "insTbl", nullptr, false, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "Instances"); + web->addResponse(var["id"], "comment", "List of instances"); + JsonArray rows = web->addResponseA(var["id"], "table"); + for (NodeInfo node: nodes) { + JsonArray row = rows.createNestedArray(); + row.add((char *)node.ip.toString().c_str()); + row.add((char *)node.type); + row.add(node.timeStamp / 1000); + row.add(node.details); + char urlString[32] = "http://"; + strcat(urlString, node.ip.toString().c_str()); + row.add((char *)urlString); //create a copy! + } + }); + ui->initText(tableVar, "insIp", nullptr, true, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "IP"); + }); + ui->initText(tableVar, "insType", nullptr, true, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "Type"); + }); + ui->initText(tableVar, "insTime", nullptr, true, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "Timestamp"); + }); + ui->initText(tableVar, "insDetail", nullptr, true, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "Detail"); + }); + ui->initURL(tableVar, "insLink", nullptr, true, [](JsonObject var) { //uiFun + web->addResponse(var["id"], "label", "Show"); + }); + + print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); + } + + void onOffChanged() { + if (SysModModules::isConnected && isEnabled) { + udp.begin(65506); + } else { + nodes.clear(); + ui->processUiFun("insTbl"); + //udp off ?? + } + } + + void loop(){ + // Module::loop(); + + //everysecond better to save on cpu? + if (millis() - secondMillis >= 1000) { + secondMillis = millis(); + if(!SysModModules::isConnected) return; + + int packetSize = udp.parsePacket(); + + if (packetSize) { + IPAddress remoteIp = udp.remoteIP(); + // TODO: actually look at the contents of the packet to fetch version, name etc + uint8_t udpIn[1472+1]; + udp.read(udpIn, packetSize); + //for WLED see handleNotifications and sendSysInfoUDP + // 0: 1 byte 'binary token 255' + // 1: 1 byte id '1' + // 2: 4 byte ip + // 6: 32 char name + // 38: 1 byte node type id + // 39: 1 byte node id + // 40: 4 byte version ID + // 44 bytes total + char nodeName[33] = { 0 }; + memcpy(&nodeName[0], reinterpret_cast(&udpIn[6]), 32); + nodeName[32] = 0; + + udp.read(packetBuffer, packetSize); + + print->print("Instance: %s (%u) %s\n", remoteIp.toString().c_str(), packetSize, nodeName); + + bool found = false; + //iterate vector pointers so we can update the nodes + for (std::vector::iterator node=nodes.begin(); node!=nodes.end(); ++node) { + if (node->ip == remoteIp) { + found = true; + node->timeStamp = millis(); //update timestamp + // strcpy(node->details, nodeName); //update name (in case changed) + } + } + + if (!found) { + // print->print("new node: %s (%u) %s\n", remoteIp.toString().c_str(), packetSize, nodeName); + NodeInfo newNode; + newNode.ip = remoteIp; + if (packetSize == 44) + strcpy(newNode.type, "WLED"); + else + strcpy(newNode.type, "Unknown"); + newNode.timeStamp = millis(); + strcpy(newNode.details, nodeName); + nodes.push_back(newNode); + ui->processUiFun("ddpInst"); //show the new instance in the dropdown + ui->processUiFun("artInst"); //show the new instance in the dropdown + } + ui->processUiFun("insTbl"); + } //packetSize + + //remove inactive nodes + size_t index = 0; + for (std::vector::iterator node=nodes.begin(); node!=nodes.end(); ++node) { + if (millis() - node->timeStamp > 32000) { //assuming a ping each 30 seconds + nodes.erase(nodes.begin() + index); + ui->processUiFun("insTbl"); + ui->processUiFun("ddpInst"); + ui->processUiFun("artInst"); + } + index++; + } + } + } + + private: + char packetBuffer[255]; + WiFiUDP udp; + +}; + +static UserModInstances *instances; + +std::vector UserModInstances::nodes; diff --git a/src/User/UserModWLEDDiscovery.h b/src/User/UserModWLEDDiscovery.h deleted file mode 100644 index d0b850b1..00000000 --- a/src/User/UserModWLEDDiscovery.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - @title StarMod - @file UserModWLEDDiscovery.h - @date 20230730 - @repo https://github.com/ewoudwijma/StarMod - @Authors https://github.com/ewoudwijma/StarMod/commits/main - @Copyright (c) 2023 Github StarMod Commit Authors - @license GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 -*/ - -#include - - -class UserModWLEDDiscovery:public Module { - -public: - - Dictionary nodes; - - UserModWLEDDiscovery() :Module("WLED Discovery") { - print->print("%s %s\n", __PRETTY_FUNCTION__, name); - - print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); - }; - - //setup filesystem - void setup() { - Module::setup(); - print->print("%s %s\n", __PRETTY_FUNCTION__, name); - - print->print("%s %s %s\n", __PRETTY_FUNCTION__, name, success?"success":"failed"); - } - - void connected() { - isConnected = true; - udp.begin(65506); - } - - void loop(){ - // Module::loop(); - if(!isConnected) return; - - int packetSize = udp.parsePacket(); - - if (packetSize) { - IPAddress remoteIp = udp.remoteIP(); - // TODO: actually look at the contents of the packet to fetch version, name etc - print->print("WLED: %s (%u)\n", remoteIp.toString().c_str(), packetSize); - udp.read(packetBuffer, packetSize); - nodes.set(remoteIp, remoteIp.toString().c_str()); - } - } - - private: - bool isConnected = false; - char packetBuffer[255]; - WiFiUDP udp; - -}; - -static UserModWLEDDiscovery *wledDiscoveryMod; \ No newline at end of file diff --git a/src/html_ui.h b/src/html_ui.h index 4d857f3f..4a838f4c 100644 --- a/src/html_ui.h +++ b/src/html_ui.h @@ -7,352 +7,352 @@ */ // Autogenerated from data/index.htm, do not edit!! -const uint16_t PAGE_index_L = 5532; +const uint16_t PAGE_index_L = 5527; const uint8_t PAGE_index[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd5, 0x3c, 0xed, 0x72, 0xdb, 0x38, - 0x92, 0xff, 0xf3, 0x14, 0x34, 0x3d, 0xeb, 0x25, 0x2d, 0x9a, 0xa2, 0x24, 0xdb, 0x71, 0xa8, 0xd0, - 0xbe, 0xc4, 0xf1, 0xce, 0x64, 0x2a, 0x5f, 0x35, 0x4e, 0x32, 0xb5, 0x95, 0xf1, 0x4d, 0x20, 0x12, - 0x92, 0x38, 0xa1, 0x00, 0x2d, 0x09, 0xd9, 0xd6, 0x2a, 0x7a, 0x84, 0xfb, 0x77, 0xff, 0xef, 0x15, - 0xef, 0x11, 0xae, 0x1b, 0x00, 0x29, 0x7e, 0xc9, 0xf6, 0x64, 0x66, 0xaf, 0xee, 0x2a, 0x15, 0x09, - 0x04, 0x81, 0x46, 0x77, 0xa3, 0xbf, 0x01, 0xd9, 0x78, 0xba, 0xf3, 0xe2, 0xed, 0xf9, 0xfb, 0xbf, - 0xbf, 0xbb, 0x30, 0xa6, 0x62, 0x96, 0x9c, 0x1a, 0x4f, 0xf3, 0x2f, 0x4a, 0x22, 0xf8, 0x12, 0xb1, - 0x48, 0xe8, 0xe9, 0xa5, 0x20, 0xe9, 0x6b, 0x1e, 0x19, 0xa3, 0xa5, 0xf1, 0x9a, 0x73, 0x06, 0xcd, - 0x45, 0x42, 0xb3, 0xa7, 0x5d, 0xf5, 0xd6, 0x78, 0x3a, 0xa3, 0x82, 0x18, 0x8f, 0xc2, 0x29, 0x49, - 0x33, 0x2a, 0x02, 0x73, 0x21, 0xc6, 0x07, 0x27, 0x26, 0xf4, 0x67, 0x62, 0x09, 0xef, 0x1f, 0x25, - 0x64, 0x44, 0x93, 0xd5, 0x8c, 0xa4, 0x93, 0x98, 0x1d, 0xa4, 0xf1, 0x64, 0x2a, 0xfc, 0xe3, 0xf9, - 0xed, 0x3a, 0xe4, 0xb3, 0x19, 0x65, 0x62, 0x35, 0xe6, 0x4c, 0x1c, 0x64, 0xf1, 0x3f, 0xa9, 0xdf, - 0xf3, 0xe6, 0xb7, 0x43, 0xf5, 0x88, 0x33, 0xfd, 0x58, 0x90, 0x24, 0x0e, 0x87, 0x7a, 0x66, 0x42, - 0xc7, 0x6a, 0xa2, 0xa0, 0xb7, 0xf5, 0x59, 0xb2, 0x8f, 0xa4, 0x94, 0xac, 0x6e, 0xe2, 0x48, 0x4c, - 0xa1, 0xcf, 0xfb, 0xcb, 0x70, 0x4a, 0xe5, 0x5a, 0xb2, 0x3d, 0xe2, 0x69, 0x44, 0xd3, 0x83, 0x94, - 0x44, 0xf1, 0x22, 0xf3, 0x7b, 0x7d, 0x58, 0x68, 0x44, 0xc2, 0x2f, 0x93, 0x94, 0x2f, 0x58, 0xe4, - 0x7b, 0x86, 0xb7, 0x0e, 0x09, 0xbb, 0x26, 0xd9, 0xb7, 0xcf, 0x1f, 0xf1, 0x68, 0xa9, 0xb0, 0x1a, - 0x93, 0x59, 0x9c, 0x2c, 0xfd, 0x67, 0x69, 0x4c, 0x12, 0xe7, 0x07, 0x9a, 0x5c, 0x53, 0x11, 0x87, - 0xc4, 0xc9, 0x08, 0xcb, 0x0e, 0x32, 0x9a, 0xc6, 0xe3, 0xf2, 0xd4, 0x5d, 0xcf, 0xf3, 0xd6, 0x31, - 0x9b, 0x2f, 0xc4, 0xaa, 0x06, 0x30, 0xa3, 0x09, 0x0d, 0x1b, 0xbd, 0xd3, 0x9e, 0x33, 0xed, 0xaf, - 0x42, 0x9e, 0xf0, 0xd4, 0xdf, 0x1d, 0x1d, 0x7b, 0xe3, 0xe3, 0xfe, 0xda, 0x9d, 0xf1, 0x88, 0x24, - 0xab, 0x39, 0xcf, 0x62, 0x11, 0x73, 0xe6, 0x8f, 0xe3, 0x5b, 0x1a, 0x0d, 0x25, 0xbf, 0x3c, 0xc0, - 0x5c, 0x08, 0x3e, 0x83, 0x86, 0xe2, 0xbc, 0x37, 0x14, 0x7c, 0x8e, 0xdd, 0x1b, 0xb0, 0x49, 0xcc, - 0x28, 0x49, 0x0f, 0x26, 0x48, 0x1c, 0x6c, 0x88, 0x25, 0xb8, 0xa1, 0x26, 0x39, 0xbb, 0xe3, 0xf1, - 0x88, 0x0e, 0x06, 0x4f, 0x60, 0x61, 0x47, 0x2f, 0x06, 0x6d, 0x64, 0x88, 0x3d, 0x14, 0x29, 0xd0, - 0x33, 0xe6, 0xe9, 0xcc, 0x97, 0xad, 0x84, 0x08, 0xfa, 0x77, 0xab, 0xf4, 0x4a, 0xa1, 0x52, 0x8c, - 0x32, 0xdc, 0xc3, 0x6c, 0x38, 0x27, 0x51, 0x14, 0xb3, 0x89, 0x7f, 0x52, 0xec, 0xb3, 0xdc, 0x40, - 0x7c, 0xe4, 0xd7, 0x34, 0x1d, 0x27, 0xfc, 0xc6, 0x27, 0x0b, 0xc1, 0x6b, 0xec, 0x3e, 0x04, 0x76, - 0xaf, 0x5d, 0x16, 0xc5, 0xd7, 0xab, 0xb2, 0x2c, 0x1c, 0xa1, 0xb8, 0x34, 0x37, 0x66, 0xed, 0x0a, - 0x32, 0x4a, 0xa8, 0x92, 0xa1, 0x07, 0xef, 0x88, 0x02, 0x03, 0x7c, 0x4d, 0xc8, 0x3c, 0xa3, 0x7e, - 0xde, 0x18, 0x96, 0xe4, 0xa1, 0xba, 0x94, 0x7b, 0x44, 0x67, 0x95, 0xa5, 0x0c, 0x11, 0x39, 0xd5, - 0xe7, 0xe9, 0x4a, 0x4d, 0xf1, 0x7b, 0xf3, 0x5b, 0x23, 0xe3, 0x49, 0x1c, 0x19, 0xb8, 0xdd, 0x05, - 0x1b, 0x8e, 0x6b, 0xc8, 0xe2, 0x0c, 0x14, 0xe4, 0x03, 0x10, 0xfb, 0x09, 0xf3, 0x91, 0xc8, 0xd2, - 0x3e, 0x1d, 0xe8, 0x4d, 0x3f, 0x7e, 0x8c, 0xff, 0x86, 0xfa, 0x69, 0x3c, 0x1e, 0xaf, 0xdd, 0x10, - 0x88, 0x24, 0xb0, 0x8b, 0xe9, 0x2a, 0x8a, 0xb3, 0x79, 0x42, 0x96, 0xfe, 0x24, 0x8d, 0xa3, 0x21, - 0x7e, 0x1c, 0x08, 0x3a, 0x9b, 0xe3, 0xe6, 0xe0, 0xf4, 0xc5, 0x8c, 0x65, 0x7e, 0x4a, 0xe7, 0x94, - 0x08, 0xeb, 0xd0, 0xe9, 0x8d, 0x53, 0x7b, 0xed, 0x8e, 0xf8, 0x6d, 0x8e, 0xe6, 0x60, 0x83, 0xe6, - 0xf1, 0xf1, 0xf1, 0xef, 0x12, 0x91, 0x8d, 0x80, 0x68, 0xf1, 0xa8, 0x32, 0xab, 0x0f, 0x1c, 0x28, - 0xc8, 0x96, 0x6a, 0xae, 0x36, 0x52, 0xb5, 0xc3, 0x45, 0x9a, 0x01, 0x2d, 0x33, 0x90, 0x01, 0x89, - 0x8f, 0x3f, 0x45, 0x69, 0x58, 0x35, 0x49, 0xf7, 0xbc, 0x91, 0xa6, 0x17, 0x49, 0xd9, 0x86, 0xf6, - 0x3d, 0x2b, 0xd7, 0x57, 0x73, 0x71, 0x31, 0x47, 0xc3, 0x74, 0xd5, 0xca, 0x1b, 0xc0, 0x11, 0x90, - 0x49, 0x15, 0xe4, 0xb5, 0x9f, 0x72, 0x2e, 0x56, 0x07, 0x07, 0xe1, 0x41, 0xcf, 0xdf, 0xed, 0xf5, - 0x7a, 0x43, 0x6c, 0x8e, 0xe5, 0x1e, 0xc8, 0x66, 0xdf, 0xdf, 0xed, 0xf7, 0xfb, 0xb2, 0x39, 0xf0, - 0x77, 0x07, 0x83, 0x81, 0x6c, 0x1e, 0xfa, 0xbb, 0x87, 0x87, 0x87, 0xb2, 0x79, 0xe4, 0xef, 0x1e, - 0x1d, 0x1d, 0xc9, 0xe6, 0xb1, 0x2f, 0x91, 0xc5, 0xe6, 0x89, 0xbf, 0x7b, 0x72, 0x72, 0x22, 0x9b, - 0x23, 0xd0, 0xe9, 0xd1, 0x48, 0x36, 0x43, 0x7f, 0x37, 0x0c, 0x43, 0xd9, 0xa4, 0xfe, 0x2e, 0xa5, - 0x54, 0x36, 0xc1, 0x60, 0x44, 0x51, 0x24, 0x9b, 0xc0, 0x8f, 0x70, 0xa0, 0x56, 0x9b, 0xc0, 0xc2, - 0xa1, 0x42, 0x27, 0x81, 0xd5, 0x4e, 0x88, 0x6c, 0x2e, 0xfd, 0x5d, 0xf2, 0xc4, 0x83, 0xa6, 0x00, - 0xb8, 0x9e, 0xab, 0xd6, 0xe5, 0x7e, 0x3a, 0x19, 0x11, 0xab, 0xf7, 0xe4, 0xc8, 0x31, 0x7a, 0x87, - 0xf9, 0x87, 0xe7, 0x3e, 0xb1, 0xe5, 0x6b, 0x31, 0x52, 0xef, 0x07, 0x87, 0x8e, 0x91, 0xff, 0xbf, - 0x26, 0xa9, 0x25, 0x81, 0xd8, 0xf9, 0x18, 0xa2, 0x81, 0x78, 0x7d, 0x98, 0x5f, 0x7c, 0x34, 0xc7, - 0x4d, 0xd5, 0xb8, 0xa3, 0x9e, 0x63, 0xe4, 0xff, 0xab, 0x83, 0x40, 0xb5, 0x1e, 0xe3, 0x9e, 0x40, - 0x6b, 0x9e, 0xb7, 0x60, 0xd6, 0xf1, 0x40, 0xf5, 0x8d, 0xe6, 0x7e, 0xef, 0x10, 0x36, 0x41, 0x7d, - 0x78, 0xba, 0x85, 0x63, 0xe0, 0xcd, 0x13, 0x78, 0xf4, 0x8c, 0xc7, 0xf8, 0x29, 0x67, 0x45, 0x3e, - 0xe3, 0x0c, 0xb9, 0x94, 0x4d, 0xe6, 0xbe, 0x39, 0x4a, 0x78, 0xf8, 0xc5, 0xc4, 0x17, 0x33, 0x30, - 0x7a, 0xa0, 0x68, 0xbb, 0xa0, 0x24, 0x2c, 0x66, 0x51, 0xdd, 0x4c, 0x6a, 0xfb, 0x18, 0x92, 0x24, - 0xb4, 0x14, 0x72, 0xa3, 0xa9, 0x6d, 0x74, 0x8c, 0xa3, 0xf9, 0xad, 0xad, 0x6c, 0xe8, 0x61, 0x49, - 0x82, 0x8e, 0x1a, 0x26, 0xe7, 0xa8, 0xe2, 0x0a, 0x72, 0x49, 0x45, 0xc6, 0xff, 0xf3, 0x00, 0x96, - 0xa3, 0xb7, 0xfe, 0x41, 0x7f, 0xfd, 0xe8, 0x69, 0x57, 0x39, 0x43, 0x70, 0x8a, 0x61, 0x1a, 0xcf, - 0xc5, 0xe9, 0xa3, 0x6e, 0xd7, 0xf8, 0x37, 0xf0, 0x6e, 0x94, 0x65, 0xd4, 0x30, 0x8c, 0xef, 0xdf, - 0x7c, 0x30, 0xbe, 0xbf, 0x78, 0x73, 0xf1, 0xd3, 0xb3, 0x57, 0xc6, 0xbb, 0x0f, 0xcf, 0x5f, 0xbd, - 0x3c, 0x37, 0xe0, 0xff, 0xc5, 0x9b, 0xcb, 0x0b, 0xe3, 0x23, 0x4d, 0x33, 0x40, 0xd7, 0x18, 0x38, - 0x46, 0xff, 0x89, 0xf1, 0xe3, 0x82, 0x51, 0xa3, 0xef, 0x79, 0x8f, 0x1f, 0x01, 0xb2, 0xc6, 0x3c, - 0xa5, 0xd7, 0x31, 0x5f, 0x64, 0x7f, 0x5b, 0xb0, 0x10, 0x69, 0x72, 0x52, 0x0a, 0x4b, 0xa6, 0x34, - 0x0d, 0xd8, 0x22, 0x49, 0x9c, 0x0c, 0xc0, 0x53, 0xd5, 0x0c, 0xc9, 0x8c, 0xa6, 0x44, 0xb6, 0x87, - 0x63, 0x3d, 0xda, 0x58, 0x80, 0xf1, 0x83, 0xa9, 0x16, 0x75, 0x32, 0x7b, 0x15, 0x8f, 0x2d, 0x73, - 0x7e, 0x1d, 0xd3, 0x1b, 0x33, 0x08, 0xe8, 0xde, 0xde, 0x6f, 0x19, 0x67, 0x1f, 0x49, 0xb2, 0xa0, - 0x99, 0x2b, 0x7b, 0xed, 0x55, 0x42, 0x85, 0x01, 0xd0, 0xe8, 0x8d, 0xf1, 0x21, 0x66, 0xe2, 0xe4, - 0x59, 0x9a, 0x92, 0xa5, 0x95, 0xd9, 0x0e, 0x0b, 0x26, 0x2f, 0xa3, 0x7c, 0xae, 0x3d, 0x04, 0x38, - 0xf5, 0xb9, 0x2e, 0xc3, 0xf9, 0xb0, 0x01, 0xa0, 0xa6, 0xd4, 0x4d, 0xf8, 0xc4, 0x32, 0xc1, 0x0a, - 0x25, 0x24, 0x44, 0x93, 0x47, 0x0d, 0xe5, 0x7a, 0x77, 0x4c, 0xe4, 0x37, 0x2e, 0x11, 0x5e, 0x58, - 0xa6, 0xea, 0x83, 0x2e, 0xea, 0x4a, 0x13, 0x1c, 0x30, 0xf5, 0xed, 0x50, 0x57, 0xf9, 0x65, 0xe8, - 0x50, 0x0d, 0x87, 0xb9, 0x73, 0x70, 0xfd, 0x4c, 0xbc, 0xe1, 0x11, 0x75, 0x35, 0xdc, 0xf3, 0x69, - 0x9c, 0x44, 0x40, 0x17, 0x43, 0xf4, 0xe0, 0xcb, 0x8d, 0xa3, 0x40, 0x63, 0x08, 0x0f, 0xb0, 0x99, - 0x17, 0xd7, 0x30, 0xe3, 0x55, 0x9c, 0x09, 0xe0, 0x50, 0x0a, 0xcb, 0xc1, 0x56, 0x7c, 0x31, 0x1d, - 0x1a, 0x9c, 0xae, 0x04, 0x9f, 0x4c, 0x12, 0xfa, 0x1a, 0x5d, 0xaa, 0x45, 0xc1, 0x3c, 0xa7, 0x13, - 0x2a, 0xec, 0xb5, 0xbd, 0x4e, 0xa9, 0x58, 0xa4, 0xcc, 0xe8, 0x05, 0x41, 0x83, 0xbc, 0x88, 0xce, - 0xc5, 0xf4, 0x4c, 0x6e, 0x06, 0xbd, 0xe9, 0xbf, 0xb0, 0x98, 0x43, 0x6d, 0x5f, 0x3f, 0x0e, 0xd4, - 0xa3, 0xb3, 0x03, 0x6e, 0x1e, 0x38, 0x3c, 0xe2, 0x24, 0x8d, 0x90, 0xc3, 0x5b, 0xf9, 0x39, 0xd4, - 0x13, 0x9f, 0xe3, 0x48, 0x4b, 0xb2, 0x56, 0x4d, 0xb2, 0x01, 0x8c, 0xc6, 0x62, 0xa7, 0xb7, 0x2e, - 0x36, 0x71, 0xb3, 0xac, 0xdc, 0x46, 0x84, 0x0a, 0x24, 0xbb, 0x80, 0xf5, 0x39, 0xb8, 0x05, 0x70, - 0x27, 0x96, 0xd9, 0xc7, 0xc9, 0x3c, 0x38, 0x74, 0x92, 0x26, 0xee, 0x63, 0x12, 0x0a, 0x9e, 0xe2, - 0xae, 0x31, 0x37, 0x4c, 0xc0, 0xca, 0xff, 0x04, 0x51, 0x87, 0xe5, 0x39, 0x9e, 0x43, 0x6b, 0x1c, - 0xb7, 0x9d, 0x76, 0x99, 0x10, 0xc1, 0x6b, 0x22, 0xa6, 0xee, 0x2c, 0x06, 0x41, 0x52, 0x53, 0xba, - 0x8d, 0x55, 0xaa, 0x90, 0x9a, 0xef, 0xf3, 0x15, 0x52, 0x05, 0x0b, 0x22, 0x01, 0x9e, 0x5a, 0x39, - 0xb8, 0x03, 0xb1, 0xdf, 0x0e, 0xd0, 0xee, 0xf6, 0xdb, 0xe5, 0x8d, 0x2f, 0x04, 0x44, 0x54, 0x99, - 0x0d, 0x91, 0x07, 0x2a, 0xb5, 0x11, 0x1b, 0x7c, 0x6c, 0x6c, 0x1d, 0x05, 0x10, 0x62, 0x37, 0xa1, - 0xd1, 0x66, 0x3c, 0xc1, 0xf1, 0xba, 0x2f, 0xfb, 0xc4, 0xaf, 0x3a, 0xf0, 0xd1, 0xe9, 0xa9, 0xaf, - 0xfe, 0xd5, 0x69, 0xdf, 0xdb, 0xdb, 0x03, 0x76, 0x8d, 0xe3, 0x24, 0xb9, 0x44, 0xb5, 0x0e, 0x3e, - 0x83, 0x9d, 0xb3, 0xbe, 0x5b, 0xe1, 0xd0, 0xb5, 0x23, 0xbf, 0x61, 0x74, 0xde, 0xea, 0x5f, 0xad, - 0xed, 0xcf, 0x20, 0x75, 0x23, 0x0a, 0x1e, 0xef, 0x1d, 0x90, 0x67, 0xd9, 0x28, 0x83, 0x69, 0x68, - 0x91, 0x4f, 0xde, 0xd5, 0xbe, 0xe8, 0x26, 0x9d, 0xd4, 0x21, 0x9f, 0x7a, 0xb2, 0xe9, 0xb8, 0x87, - 0xfb, 0x02, 0x98, 0xdf, 0xdf, 0x97, 0x8c, 0x78, 0xf7, 0x12, 0xc7, 0xe2, 0x42, 0x96, 0x0d, 0x5b, - 0xd8, 0x09, 0x06, 0x43, 0x9a, 0x80, 0xc5, 0xa8, 0xe8, 0x52, 0x21, 0x01, 0x25, 0x12, 0x0d, 0xc6, - 0x0d, 0x44, 0xdf, 0x6c, 0x6e, 0x5a, 0xa3, 0x47, 0x59, 0x85, 0x87, 0xc3, 0xd5, 0x7c, 0x7b, 0x38, - 0xe8, 0x36, 0x7b, 0x10, 0x80, 0x0c, 0x37, 0x84, 0x78, 0x50, 0x11, 0xe2, 0x2d, 0xb2, 0x0a, 0x92, - 0x7c, 0xd4, 0x65, 0xb8, 0xef, 0xd6, 0x4e, 0x6e, 0xef, 0xbe, 0x7e, 0xad, 0x0f, 0x6e, 0x5a, 0x30, - 0x69, 0x85, 0x60, 0xe3, 0xda, 0x68, 0x1c, 0xbc, 0x30, 0x42, 0x48, 0x1f, 0x04, 0x35, 0x50, 0x1f, - 0x73, 0xa8, 0xa0, 0x35, 0x95, 0xc1, 0x23, 0x0a, 0x02, 0x42, 0x4d, 0x54, 0xe7, 0x8d, 0xa1, 0x85, - 0xf1, 0xef, 0x7f, 0xf8, 0xe9, 0xe2, 0xc2, 0xfd, 0x99, 0x8e, 0xbe, 0x7f, 0xf5, 0x93, 0xee, 0xb7, - 0x56, 0xca, 0x82, 0xf9, 0xd4, 0x21, 0x4c, 0x40, 0xdc, 0x19, 0x43, 0x7b, 0xc7, 0x73, 0x48, 0x32, - 0x9f, 0x12, 0x68, 0xac, 0x6b, 0xa0, 0xc9, 0x58, 0xc0, 0x7a, 0x65, 0xc8, 0x2e, 0x24, 0x53, 0xe7, - 0xa8, 0x90, 0xcf, 0x70, 0x8a, 0xe5, 0xb5, 0xbc, 0x39, 0x47, 0x67, 0x83, 0xba, 0x6a, 0x3b, 0x56, - 0x6e, 0xe0, 0x0b, 0x74, 0xde, 0x81, 0xdf, 0x98, 0x83, 0x2e, 0xc7, 0xd7, 0xf4, 0x5c, 0xbe, 0xb3, - 0xc0, 0xd3, 0xe7, 0x0a, 0x9a, 0x6b, 0xa2, 0xd3, 0x73, 0x8e, 0x3c, 0xcf, 0xb6, 0xdd, 0xdc, 0x2b, - 0x22, 0x6c, 0xa9, 0xfd, 0x5c, 0x09, 0x60, 0xf6, 0x8f, 0x54, 0x58, 0xed, 0xda, 0xb7, 0x45, 0x29, - 0x3b, 0x5b, 0x94, 0x7b, 0x7f, 0x4b, 0x7f, 0xa7, 0xdd, 0x9c, 0xee, 0xb7, 0x77, 0x83, 0x16, 0x28, - 0x4a, 0x81, 0x6d, 0xfc, 0xcb, 0x33, 0x85, 0x2b, 0xd2, 0xaf, 0x7d, 0x5d, 0x41, 0xfe, 0x25, 0x3e, - 0xdb, 0xee, 0xc6, 0x35, 0x4b, 0x51, 0x6c, 0x4a, 0xe8, 0x16, 0x39, 0x59, 0xa1, 0x19, 0x48, 0x82, - 0x03, 0xbe, 0xbf, 0x85, 0xfa, 0x83, 0x1e, 0x58, 0x1f, 0x27, 0x6e, 0x1f, 0xa1, 0x28, 0x53, 0x43, - 0x48, 0xfb, 0x10, 0x49, 0x8d, 0x1c, 0x81, 0x92, 0xbc, 0x45, 0x26, 0x91, 0x9c, 0xcd, 0xcc, 0x87, - 0x28, 0x5c, 0xc3, 0xf4, 0x89, 0xfb, 0x4c, 0x9f, 0xa8, 0x9a, 0xbe, 0x14, 0xc7, 0xeb, 0x3e, 0xe9, - 0xb2, 0x73, 0x27, 0xa5, 0xd9, 0x3a, 0x9f, 0x82, 0x08, 0x7e, 0x4f, 0x39, 0x24, 0xfd, 0xe9, 0xd2, - 0xea, 0x75, 0xc1, 0xc3, 0x66, 0xa5, 0xf7, 0xaf, 0x69, 0x36, 0x7d, 0x4e, 0xb2, 0x38, 0x04, 0xe9, - 0xa1, 0x98, 0x6f, 0x59, 0x2b, 0x99, 0x03, 0x2a, 0x17, 0x8d, 0x1a, 0xc0, 0xe7, 0x24, 0x8c, 0xc5, - 0x12, 0x12, 0x28, 0xd0, 0x01, 0x51, 0x9b, 0x2a, 0xd5, 0x7f, 0x28, 0xaa, 0xe2, 0x98, 0x74, 0xf8, - 0x7e, 0x0a, 0xa6, 0xb2, 0xcb, 0x9c, 0x58, 0x36, 0x7b, 0xd8, 0x24, 0xb2, 0xd9, 0xbf, 0x92, 0x18, - 0xe0, 0x66, 0xa3, 0x5b, 0xb7, 0xc0, 0x55, 0x6f, 0x35, 0x64, 0x83, 0x7f, 0x91, 0x81, 0x1c, 0xfc, - 0xcb, 0x0c, 0x64, 0x8b, 0x6f, 0xb3, 0x57, 0x85, 0x19, 0x50, 0x81, 0x51, 0x25, 0xfa, 0x52, 0x7d, - 0x7b, 0x7b, 0xc5, 0x18, 0x1d, 0x2c, 0x55, 0x07, 0xa9, 0xce, 0xaf, 0x5f, 0xcb, 0x06, 0xe5, 0x12, - 0x52, 0x71, 0xab, 0x09, 0xca, 0x69, 0x99, 0x98, 0xc7, 0x69, 0x87, 0x43, 0x14, 0x98, 0x9b, 0xa0, - 0xf7, 0x20, 0x1f, 0xfc, 0x47, 0x04, 0xf1, 0xe6, 0xa9, 0xda, 0xe1, 0x10, 0xc3, 0x3a, 0xc0, 0x1a, - 0x7a, 0xd9, 0x04, 0xe9, 0xb4, 0xaa, 0xfd, 0x9f, 0x6e, 0xae, 0xdc, 0xeb, 0x38, 0x8b, 0x21, 0xa5, - 0x0e, 0xb2, 0x4f, 0x83, 0xfd, 0x9b, 0x0e, 0x45, 0xa7, 0x2d, 0x1b, 0xca, 0x7f, 0xab, 0x26, 0xf8, - 0xf0, 0x9e, 0xe7, 0x6c, 0x9d, 0xdb, 0x0a, 0x77, 0xa6, 0x05, 0xda, 0x95, 0x21, 0x7e, 0x49, 0x6e, - 0x95, 0x15, 0x36, 0xcd, 0x1c, 0xfa, 0x55, 0xb7, 0x7f, 0x74, 0xe4, 0x6c, 0x9e, 0x61, 0xe1, 0x7a, - 0x4f, 0x5f, 0xf6, 0xd8, 0x60, 0xcc, 0x6e, 0x3a, 0x9d, 0xe1, 0xff, 0x3f, 0x81, 0x5d, 0x2b, 0xf6, - 0xa4, 0x5c, 0x10, 0xa9, 0xa5, 0xb7, 0x9d, 0xc0, 0xf5, 0x7a, 0x4e, 0xad, 0x77, 0xa9, 0x7a, 0x0b, - 0x29, 0x53, 0x0d, 0xc5, 0x5a, 0x6d, 0xc5, 0xed, 0x46, 0x08, 0xa0, 0xc2, 0xde, 0xfb, 0x42, 0xd9, - 0x46, 0xc4, 0xd9, 0xdf, 0x04, 0x97, 0x3d, 0x70, 0x07, 0x49, 0x6b, 0x1c, 0xd9, 0xdf, 0xe7, 0x18, - 0x32, 0x82, 0xd5, 0x3e, 0x1c, 0xa2, 0x98, 0xdd, 0x1f, 0xf1, 0x2e, 0x03, 0xc8, 0x9b, 0x97, 0x4f, - 0x7b, 0xde, 0x70, 0xd9, 0xe9, 0x48, 0xd1, 0xbc, 0xc5, 0x9e, 0xdb, 0xa7, 0xfd, 0xe1, 0x2d, 0x74, - 0x64, 0x9f, 0x62, 0x14, 0xaa, 0x58, 0xc9, 0x56, 0x7c, 0x77, 0x6c, 0x18, 0xeb, 0x88, 0x30, 0x2e, - 0x62, 0xc3, 0xf8, 0x8e, 0xd8, 0xf0, 0x76, 0x9f, 0x77, 0x12, 0x67, 0xb9, 0xcf, 0x31, 0x22, 0xe4, - 0xdb, 0x22, 0xc2, 0x18, 0x22, 0x42, 0x99, 0x5d, 0xaa, 0xac, 0xf2, 0x4f, 0x4c, 0x2f, 0x91, 0xf9, - 0x51, 0x10, 0xf1, 0x70, 0x81, 0x55, 0x5a, 0xe7, 0x26, 0xcb, 0x53, 0xca, 0x94, 0x52, 0x76, 0x2e, - 0x8b, 0x25, 0x6f, 0xd2, 0xc0, 0x73, 0x58, 0xfa, 0x76, 0x7c, 0x59, 0xea, 0xcc, 0x20, 0xcd, 0xd0, - 0x79, 0xe5, 0x4b, 0xc8, 0xb9, 0x4c, 0x07, 0x2b, 0xca, 0xdf, 0x63, 0x96, 0x05, 0xfa, 0x13, 0x81, - 0x51, 0x2b, 0x49, 0x54, 0xb0, 0x5a, 0x3b, 0x8b, 0x18, 0x46, 0x9e, 0xf3, 0xd9, 0x8c, 0xb0, 0x28, - 0x0b, 0x3e, 0x5d, 0x39, 0x33, 0x48, 0xe3, 0x92, 0x5a, 0xa2, 0x8a, 0x46, 0x88, 0xa2, 0xe5, 0x93, - 0x29, 0x58, 0x84, 0x12, 0x71, 0x91, 0x50, 0x44, 0xec, 0xf9, 0x52, 0xbe, 0xda, 0x88, 0x11, 0x24, - 0x8f, 0xe5, 0x91, 0x2a, 0xaa, 0xd3, 0x83, 0x2b, 0x03, 0xa7, 0xb0, 0x60, 0x42, 0x3f, 0xa2, 0xc6, - 0xc7, 0x09, 0x38, 0xa4, 0x73, 0xe8, 0x98, 0x50, 0xab, 0x96, 0xa7, 0xb6, 0x8f, 0x32, 0x4b, 0x70, - 0x38, 0x7b, 0xc5, 0x49, 0x04, 0xf3, 0x66, 0xe4, 0x0b, 0xfd, 0xf9, 0x12, 0x36, 0x30, 0x66, 0xb1, - 0xd0, 0xcc, 0x80, 0xa7, 0xa8, 0x25, 0xdd, 0xbc, 0x2e, 0xe0, 0x85, 0x0a, 0x9e, 0xd3, 0xbe, 0x8e, - 0xb3, 0xd3, 0x2b, 0xad, 0x94, 0x2f, 0x80, 0xa9, 0xfa, 0x4d, 0x66, 0x2b, 0x1a, 0xb5, 0x2d, 0x06, - 0x4c, 0x85, 0x98, 0x67, 0x3e, 0xa4, 0x96, 0x37, 0x31, 0x8b, 0xf8, 0x0d, 0xa0, 0x1f, 0x2a, 0x35, - 0x9c, 0x83, 0x42, 0x72, 0x30, 0x5a, 0x67, 0xe6, 0x4d, 0x96, 0x99, 0x3e, 0x7c, 0x9a, 0x76, 0xc7, - 0xf4, 0xbb, 0x5d, 0xb3, 0x53, 0x1f, 0x3a, 0xe5, 0x99, 0x60, 0xa0, 0x98, 0x1d, 0xb3, 0x0b, 0xa3, - 0x86, 0x15, 0x4e, 0xa8, 0xd5, 0x8d, 0x45, 0x9a, 0xc8, 0x30, 0xf5, 0x46, 0x79, 0x7d, 0x08, 0x7a, - 0x2f, 0x79, 0xf8, 0x85, 0x22, 0x6f, 0xa1, 0xcf, 0x1d, 0xc5, 0x8c, 0xa4, 0xcb, 0xf7, 0xcb, 0x39, - 0x0d, 0x4c, 0x82, 0x19, 0xed, 0x68, 0x31, 0x1e, 0x63, 0x64, 0x0b, 0xef, 0x38, 0x9b, 0xd1, 0x2c, - 0x23, 0x13, 0x1a, 0x60, 0x9e, 0x0d, 0x44, 0x50, 0x37, 0x22, 0x82, 0x18, 0x31, 0x04, 0x19, 0x84, - 0x85, 0x14, 0xec, 0xbd, 0x4c, 0x82, 0x9f, 0xcb, 0x29, 0x76, 0x5e, 0x9d, 0x28, 0xa4, 0xc9, 0x51, - 0xe3, 0x31, 0x86, 0x2f, 0x4b, 0x98, 0x2d, 0x0d, 0xdd, 0x4a, 0xaa, 0xf2, 0xfb, 0x78, 0x46, 0xc1, - 0x98, 0x49, 0x6f, 0xa4, 0xdb, 0xca, 0x84, 0xe9, 0x07, 0x25, 0xc4, 0xd2, 0xa7, 0xe9, 0x7a, 0x10, - 0x78, 0x35, 0x59, 0x9a, 0x29, 0x45, 0x8a, 0xd2, 0xa0, 0x07, 0xa6, 0xaa, 0x06, 0x85, 0x07, 0x89, - 0x6d, 0x0e, 0x95, 0x29, 0x92, 0x42, 0x09, 0x61, 0xcf, 0x8a, 0x05, 0x3f, 0x5e, 0xbe, 0x7d, 0x83, - 0x75, 0x87, 0x8c, 0x6a, 0x2a, 0xec, 0x35, 0xf0, 0x30, 0x9c, 0x42, 0x00, 0xb2, 0x62, 0xba, 0xe4, - 0xa2, 0xb9, 0x47, 0xd3, 0x14, 0xfd, 0x83, 0xe6, 0x1f, 0x22, 0x63, 0xc8, 0x2e, 0xd3, 0x11, 0x39, - 0x45, 0x6b, 0x06, 0x34, 0x55, 0x14, 0xe5, 0x0c, 0x76, 0x2d, 0x04, 0x6e, 0x7d, 0x98, 0xc3, 0x00, - 0x6a, 0x31, 0xdb, 0x97, 0xac, 0x71, 0xe3, 0x4c, 0xd5, 0x09, 0x98, 0x7d, 0x66, 0x69, 0x4d, 0xa9, - 0x26, 0x12, 0xb0, 0x44, 0x4a, 0x43, 0x0a, 0x51, 0xbf, 0x31, 0xd1, 0xc0, 0x7e, 0x78, 0xff, 0xfa, - 0x95, 0xa9, 0xf4, 0xca, 0x76, 0xca, 0x9d, 0x96, 0xc4, 0x53, 0xbf, 0xa8, 0xe9, 0xa9, 0x57, 0xd5, - 0xcc, 0xc2, 0xe3, 0x8e, 0x93, 0x45, 0x36, 0xfd, 0xf0, 0xb2, 0xf4, 0x0a, 0xec, 0x90, 0x5f, 0x41, - 0xe1, 0x02, 0xa9, 0xf3, 0xd1, 0xaf, 0x5c, 0x13, 0x2c, 0xcb, 0xca, 0x05, 0x4c, 0x87, 0xd9, 0xf6, - 0x7a, 0xad, 0xe4, 0x20, 0x4c, 0x78, 0xa6, 0xa4, 0xa0, 0x8e, 0xbb, 0x7c, 0x63, 0x00, 0x58, 0xa0, - 0x02, 0x38, 0x2d, 0x45, 0xed, 0xf7, 0x6d, 0x57, 0x6a, 0x9b, 0x0e, 0xc4, 0x33, 0xb9, 0x24, 0x28, - 0xb6, 0x3b, 0x3d, 0x4c, 0x73, 0x72, 0x2b, 0xa6, 0xb1, 0xe0, 0x73, 0xca, 0x5a, 0x91, 0xc0, 0x17, - 0x3a, 0x17, 0xfb, 0x47, 0xf6, 0x8a, 0x4e, 0x48, 0x02, 0xfc, 0x28, 0x65, 0xab, 0x15, 0x1e, 0x52, - 0x87, 0x41, 0x18, 0x0b, 0x91, 0x3c, 0x4a, 0xf4, 0x4e, 0x7d, 0x97, 0x40, 0x1a, 0x60, 0x41, 0x59, - 0x51, 0xb3, 0xa8, 0x8a, 0xc2, 0xca, 0x26, 0x14, 0x42, 0x82, 0x8a, 0x41, 0xb5, 0xeb, 0x06, 0xd6, - 0xaa, 0x3e, 0x77, 0x7a, 0xf6, 0x5f, 0x1a, 0x16, 0xd7, 0x96, 0x71, 0x18, 0x57, 0xe2, 0x89, 0x92, - 0x8a, 0xe8, 0x3a, 0x91, 0xac, 0xa3, 0xc9, 0xc3, 0x37, 0x55, 0x95, 0x8b, 0xdc, 0x98, 0x01, 0xde, - 0xef, 0xc1, 0x8f, 0x06, 0xd2, 0x44, 0x91, 0xb9, 0x85, 0x85, 0x31, 0xdb, 0x31, 0x67, 0xf2, 0x48, - 0x0f, 0x6c, 0x07, 0x73, 0x05, 0xa8, 0x2e, 0xb8, 0x5e, 0x34, 0xd4, 0x16, 0x97, 0x20, 0xa2, 0xf8, - 0xda, 0x84, 0x0c, 0x31, 0x86, 0x0c, 0x0a, 0x3e, 0x1c, 0xee, 0x46, 0x29, 0x99, 0x4c, 0xf0, 0xd8, - 0x02, 0x97, 0xe1, 0xe0, 0x43, 0x49, 0x96, 0xbd, 0x01, 0xab, 0x11, 0x98, 0x23, 0x7e, 0x6b, 0x96, - 0x8a, 0x78, 0xd3, 0xbe, 0x2c, 0xe0, 0x6d, 0x5b, 0x96, 0xbb, 0x64, 0x0e, 0x9c, 0x8e, 0x74, 0xb1, - 0xce, 0xc6, 0x6d, 0x5b, 0xcc, 0x9f, 0xf3, 0x5b, 0x8b, 0xeb, 0x28, 0x1e, 0x2b, 0x66, 0xf2, 0x80, - 0xa4, 0x86, 0xda, 0x50, 0xd5, 0x9d, 0x70, 0x8d, 0xb9, 0x89, 0xf9, 0x42, 0x19, 0x10, 0x40, 0xa6, - 0x95, 0x0e, 0x30, 0x01, 0x9a, 0x14, 0x05, 0xab, 0x42, 0x4c, 0x09, 0xfb, 0xd2, 0x51, 0x8c, 0xa2, - 0x82, 0xa8, 0x49, 0x78, 0x18, 0x6a, 0x62, 0x6d, 0x4a, 0x3e, 0xa5, 0xb0, 0x20, 0xa9, 0xc0, 0x4f, - 0xeb, 0xa4, 0x90, 0x7a, 0x87, 0x9c, 0x88, 0x27, 0x84, 0xb0, 0x76, 0x93, 0x32, 0xea, 0x32, 0xd0, - 0x10, 0xc4, 0xc1, 0x15, 0xfc, 0x15, 0xd8, 0xe2, 0x84, 0xbe, 0xe2, 0x37, 0x34, 0x3d, 0x27, 0x60, - 0x5d, 0xec, 0xbc, 0xc8, 0xa6, 0x50, 0x91, 0xd4, 0xe6, 0xd8, 0x8b, 0xad, 0xac, 0xa5, 0x10, 0x21, - 0xa4, 0x99, 0x90, 0xab, 0x97, 0x9b, 0x55, 0xb6, 0x6c, 0x50, 0x51, 0x87, 0x8d, 0x1b, 0x2e, 0xcb, - 0x72, 0x60, 0xca, 0xed, 0x95, 0x66, 0xdc, 0x1c, 0x99, 0x56, 0x65, 0x72, 0x69, 0x9f, 0x21, 0xbb, - 0x63, 0x6a, 0xa7, 0x35, 0x62, 0xcc, 0xbd, 0x46, 0x07, 0x8f, 0x32, 0x5f, 0x42, 0x51, 0xf7, 0x36, - 0x37, 0x5e, 0xe2, 0xf1, 0xc0, 0xa5, 0x14, 0xa2, 0xe5, 0xc5, 0x68, 0x5b, 0x3d, 0x57, 0xbb, 0xd5, - 0x86, 0x76, 0xab, 0xf9, 0x46, 0xf1, 0x5e, 0x0a, 0xdd, 0xa5, 0xec, 0x2c, 0x57, 0x7b, 0xdb, 0x51, - 0x94, 0xac, 0xd2, 0x95, 0xe9, 0x8d, 0x40, 0xca, 0x82, 0x61, 0x21, 0x8b, 0xa4, 0x2e, 0x8b, 0xc8, - 0x1c, 0x2c, 0x4d, 0x97, 0x38, 0x55, 0xf4, 0x95, 0x98, 0x63, 0xfe, 0xf7, 0x7f, 0xfd, 0xe7, 0x7f, - 0x98, 0x4e, 0x75, 0x7a, 0x3e, 0xae, 0x2e, 0xd1, 0xa4, 0x90, 0xe8, 0xbc, 0x4e, 0x5e, 0x16, 0xe9, - 0x6f, 0x2a, 0x6f, 0x6f, 0xa4, 0x52, 0x1f, 0xa5, 0x6f, 0x28, 0xb4, 0xc8, 0xb6, 0x8d, 0xd9, 0x8a, - 0x56, 0x01, 0xa4, 0x82, 0x18, 0x74, 0x44, 0x6f, 0x59, 0xb2, 0x0c, 0x50, 0xb6, 0xbe, 0x11, 0xd1, - 0x92, 0x6c, 0xf1, 0x36, 0xd9, 0x22, 0x9b, 0xce, 0x8e, 0x66, 0xea, 0xb0, 0xa0, 0x0d, 0x83, 0x97, - 0xcd, 0xc6, 0x1d, 0xf4, 0x82, 0x40, 0x00, 0x9c, 0xed, 0x82, 0xe7, 0x98, 0xa3, 0x85, 0x10, 0x9c, - 0x99, 0x3b, 0x7a, 0xd2, 0xde, 0x1e, 0xaf, 0x0d, 0x29, 0x0b, 0x27, 0x91, 0x72, 0x09, 0x02, 0xf5, - 0x4c, 0x88, 0x34, 0x86, 0xa9, 0x14, 0x6c, 0x60, 0x4a, 0xc7, 0xa6, 0x53, 0xa0, 0x57, 0x7f, 0xad, - 0xe8, 0x32, 0x1d, 0xf3, 0xd7, 0x51, 0x42, 0xd8, 0x17, 0x2c, 0xf2, 0x37, 0xa9, 0x72, 0x24, 0xa6, - 0x67, 0x16, 0x2d, 0x6f, 0x72, 0x45, 0x3c, 0x6d, 0x7f, 0xf3, 0xb2, 0x63, 0xee, 0x9a, 0x1d, 0x01, - 0x49, 0x52, 0xae, 0x58, 0x7f, 0x26, 0x9d, 0x8e, 0x3a, 0x43, 0x72, 0x54, 0x84, 0xee, 0xa8, 0x83, - 0xa6, 0x21, 0xe8, 0x1b, 0x0d, 0xbf, 0xa0, 0xf5, 0xcf, 0xb9, 0x0b, 0xc8, 0xca, 0xc5, 0xe4, 0xd5, - 0x06, 0x49, 0x15, 0xf6, 0xea, 0x97, 0x18, 0xf6, 0xc4, 0x19, 0x5a, 0xbf, 0x48, 0x89, 0x42, 0xd9, - 0x5e, 0x48, 0x50, 0xf2, 0x45, 0xc1, 0xb2, 0x87, 0xeb, 0xb7, 0x82, 0xdf, 0x31, 0x6b, 0x0a, 0x7e, - 0xae, 0xd1, 0x2b, 0x0b, 0x92, 0xed, 0xe7, 0x44, 0x7f, 0x1b, 0xce, 0x54, 0xe1, 0xd7, 0x30, 0xbc, - 0x77, 0x0a, 0x75, 0x3b, 0xae, 0xfa, 0xbd, 0x44, 0xf5, 0xb9, 0xc4, 0xa9, 0x86, 0x68, 0x2a, 0x89, - 0x79, 0x28, 0x9e, 0x33, 0x72, 0x1b, 0x60, 0xc1, 0xa1, 0x89, 0xf1, 0x1f, 0x61, 0xa4, 0x46, 0xc8, - 0x51, 0x74, 0x62, 0x24, 0xa3, 0x84, 0xed, 0xd7, 0x14, 0xc2, 0x83, 0x92, 0xcc, 0xe6, 0x03, 0xb5, - 0xe8, 0x02, 0x49, 0x2f, 0x11, 0xcf, 0x8a, 0x0e, 0x93, 0xb2, 0x31, 0x24, 0x1b, 0xc1, 0x45, 0x58, - 0x25, 0x61, 0x20, 0x2d, 0x0a, 0x6e, 0xfb, 0x48, 0xcb, 0xde, 0x5e, 0x5d, 0x62, 0x73, 0xa6, 0x68, - 0xa0, 0x77, 0x7b, 0x20, 0x54, 0x97, 0x3b, 0x58, 0x58, 0x9e, 0xac, 0x36, 0xf9, 0xcf, 0x14, 0xc6, - 0x26, 0x3b, 0x4c, 0xb6, 0x98, 0x8d, 0x20, 0x49, 0x0a, 0x0a, 0xed, 0xb3, 0xea, 0x76, 0x02, 0x6f, - 0xca, 0x80, 0x95, 0x38, 0x94, 0xb8, 0xc2, 0x06, 0xab, 0x70, 0x3c, 0x38, 0xb4, 0xed, 0x6f, 0x36, - 0x0e, 0x0e, 0xa9, 0x6b, 0x39, 0xd8, 0xef, 0xa4, 0xde, 0x07, 0x99, 0x41, 0x5a, 0xef, 0x4b, 0x8b, - 0xd3, 0x50, 0xd8, 0x88, 0xaa, 0x0b, 0xe0, 0x1a, 0x1f, 0x59, 0x04, 0x91, 0x19, 0xc4, 0x69, 0x80, - 0x15, 0x91, 0x6a, 0x32, 0x31, 0x87, 0x1c, 0x42, 0x2b, 0x4c, 0x5b, 0x96, 0x71, 0x7a, 0xb2, 0x25, - 0xcf, 0x80, 0x9d, 0xc1, 0x4c, 0x29, 0x39, 0xb3, 0x20, 0x28, 0x2d, 0x9c, 0xaa, 0x0c, 0x50, 0x1d, - 0xdd, 0x53, 0x12, 0x26, 0x88, 0xe1, 0xf3, 0x4e, 0x19, 0xe5, 0xe1, 0x8e, 0xc9, 0x22, 0xb1, 0xc9, - 0xd4, 0x94, 0x9a, 0x8d, 0x53, 0x63, 0x6b, 0x29, 0x92, 0xee, 0xc5, 0x95, 0x1d, 0x01, 0xac, 0xac, - 0xbc, 0xe4, 0x79, 0x37, 0xc0, 0x5a, 0xe7, 0x85, 0xcb, 0xc4, 0xe0, 0x18, 0x3d, 0x65, 0x3c, 0x15, - 0x96, 0x95, 0xe7, 0x0c, 0xf2, 0x2c, 0x3a, 0x2f, 0x4b, 0x50, 0x97, 0x1f, 0x30, 0x97, 0xaf, 0x91, - 0x20, 0xdb, 0xae, 0x65, 0x13, 0x49, 0x29, 0xe3, 0x6f, 0x63, 0x02, 0xa6, 0x19, 0xad, 0x4c, 0xf3, - 0x54, 0x28, 0x42, 0x83, 0xd5, 0x1a, 0xbc, 0x90, 0x1c, 0x12, 0x54, 0x06, 0x56, 0x13, 0xc5, 0xca, - 0xab, 0x3c, 0xdb, 0x59, 0xd0, 0x4c, 0xfc, 0x98, 0x21, 0xba, 0x76, 0xa3, 0x32, 0x53, 0x39, 0xae, - 0x2b, 0x27, 0xa7, 0xd4, 0x56, 0xc9, 0x3c, 0x6c, 0x67, 0xad, 0xda, 0x58, 0x1a, 0x85, 0x37, 0x3f, - 0x62, 0x19, 0xf0, 0x4a, 0xdb, 0x41, 0xb5, 0xb5, 0x64, 0x76, 0xf1, 0x28, 0x77, 0x0c, 0x92, 0xfb, - 0xea, 0x33, 0x04, 0x0d, 0x78, 0x55, 0xc7, 0x92, 0x83, 0x61, 0xef, 0xef, 0xdc, 0x78, 0xfa, 0xc0, - 0x8d, 0x2f, 0x30, 0x28, 0x5f, 0x1d, 0x78, 0xb8, 0x2c, 0x20, 0xda, 0xb6, 0xd3, 0xb6, 0x39, 0x2a, - 0xd4, 0xc8, 0x25, 0x81, 0x61, 0x09, 0xfb, 0xed, 0xe8, 0x37, 0x08, 0x2e, 0xdd, 0x2f, 0x74, 0x99, - 0xa1, 0x2e, 0x2a, 0xbe, 0xa3, 0xd9, 0x02, 0x62, 0xa4, 0x15, 0xb5, 0xf3, 0x5c, 0xff, 0x23, 0x49, - 0x11, 0xbc, 0xee, 0x85, 0xb4, 0x92, 0x7e, 0x62, 0x57, 0xb5, 0xdc, 0xba, 0xca, 0x53, 0x48, 0xae, - 0x19, 0x17, 0xb0, 0x1e, 0xa4, 0xc1, 0x46, 0xcc, 0x8c, 0x88, 0xcf, 0xcc, 0x7c, 0x9e, 0xdd, 0xd8, - 0xae, 0x1c, 0xbe, 0xcc, 0x58, 0x55, 0x5a, 0xc1, 0x31, 0x99, 0x92, 0xb5, 0xf7, 0x29, 0xc9, 0xde, - 0xde, 0xb0, 0x77, 0x29, 0xe4, 0xbe, 0xa9, 0x58, 0x16, 0x89, 0xa3, 0xdd, 0x3c, 0x9c, 0x2a, 0x23, - 0xa0, 0x46, 0x21, 0x3c, 0x57, 0x36, 0xc1, 0x96, 0x29, 0x93, 0x7a, 0x5f, 0x56, 0xb3, 0x31, 0xe0, - 0x38, 0x52, 0xc6, 0x63, 0x75, 0x87, 0x9a, 0x83, 0x54, 0xe5, 0x1d, 0x59, 0x81, 0x19, 0xb2, 0x60, - 0x13, 0x7f, 0xdf, 0xbd, 0xc0, 0xd7, 0xaf, 0x0f, 0xcc, 0xaf, 0xce, 0xa8, 0x9b, 0x5f, 0xa3, 0xb9, - 0x8c, 0x47, 0x49, 0xcc, 0x26, 0xa5, 0x84, 0xc9, 0xc7, 0x94, 0xeb, 0x7e, 0x08, 0x3e, 0x2d, 0x0b, - 0xd2, 0x66, 0x3a, 0x3a, 0xcb, 0x46, 0x86, 0x96, 0xd3, 0xb5, 0x6e, 0xe5, 0xbb, 0xbe, 0x16, 0x6b, - 0xea, 0xbc, 0x8f, 0x0f, 0xef, 0xe0, 0x7e, 0x3e, 0x56, 0xf2, 0x5f, 0x3f, 0x60, 0x75, 0xfc, 0x7f, - 0x81, 0x47, 0x15, 0x8a, 0x75, 0xb2, 0xcc, 0x5d, 0xb0, 0x1f, 0xe9, 0x52, 0x65, 0x53, 0x58, 0xf2, - 0x2a, 0x68, 0x41, 0x11, 0xdb, 0x21, 0xf6, 0x4a, 0xf9, 0xfd, 0x4d, 0xb7, 0x0a, 0x9d, 0x1b, 0xf3, - 0xa4, 0x92, 0x0e, 0xe9, 0x19, 0x06, 0xf8, 0x19, 0xb0, 0xe5, 0xb9, 0x3c, 0x77, 0xb7, 0x08, 0x5e, - 0xab, 0xa9, 0x7b, 0xac, 0x75, 0x39, 0x48, 0x28, 0xb8, 0xd0, 0xce, 0xdb, 0x3c, 0x79, 0xbc, 0x47, - 0xa8, 0xf5, 0x30, 0xc9, 0x55, 0xd5, 0x06, 0xb1, 0x96, 0x71, 0xc5, 0xfd, 0xb9, 0xba, 0x4a, 0x06, - 0xbd, 0x61, 0xd9, 0x19, 0x18, 0x05, 0x18, 0x59, 0x30, 0x7c, 0xc9, 0xa4, 0xf7, 0x07, 0x7c, 0xe5, - 0xa9, 0x06, 0x6c, 0x59, 0x10, 0x10, 0xe9, 0xf2, 0x4b, 0x7d, 0x41, 0x02, 0xfb, 0xb8, 0xe3, 0x81, - 0x93, 0xee, 0x74, 0x54, 0x14, 0x8f, 0x10, 0x11, 0x32, 0x38, 0x8f, 0x39, 0x6a, 0x75, 0x86, 0xae, - 0x57, 0x37, 0x0b, 0x17, 0x30, 0xb4, 0x69, 0x6e, 0x30, 0x3d, 0x7b, 0x0b, 0x12, 0xfa, 0x5c, 0x05, - 0x77, 0x42, 0x4d, 0x07, 0x5e, 0xeb, 0xf8, 0x26, 0x20, 0x20, 0xb1, 0x88, 0x05, 0x2c, 0x5f, 0x35, - 0x88, 0x4c, 0x61, 0xd2, 0xce, 0xd7, 0xbc, 0xac, 0xb2, 0xba, 0x83, 0xa9, 0x6a, 0x8c, 0xe4, 0xa9, - 0x6c, 0xaa, 0xcd, 0xd7, 0xd9, 0xa2, 0x2a, 0x8d, 0x40, 0x58, 0x38, 0x8e, 0x59, 0x04, 0x66, 0x0a, - 0x96, 0x1b, 0xde, 0x07, 0x2b, 0x2f, 0x2b, 0x12, 0x5b, 0xd7, 0xbc, 0x36, 0x4c, 0x8f, 0x14, 0xbd, - 0x6a, 0x9d, 0xd5, 0x26, 0x3f, 0xc3, 0xda, 0x8d, 0xc3, 0x4a, 0x03, 0xe5, 0x19, 0x63, 0x54, 0xa9, - 0xb0, 0xa8, 0xf3, 0xa5, 0x8a, 0xd9, 0x17, 0x10, 0xa2, 0x32, 0x30, 0xa9, 0xe0, 0x9a, 0x51, 0x90, - 0xb9, 0x06, 0x39, 0xa4, 0x41, 0x39, 0xef, 0x51, 0x63, 0xa4, 0x29, 0x03, 0xbd, 0x2a, 0x22, 0xba, - 0x52, 0xf7, 0xd9, 0xe7, 0x95, 0x29, 0xd9, 0x6c, 0xfa, 0xdf, 0xad, 0xd2, 0xf5, 0xfa, 0xb3, 0xbf, - 0xe9, 0x30, 0xb1, 0xc7, 0x5c, 0x7f, 0x76, 0x6a, 0xb6, 0x1a, 0xd3, 0x64, 0x08, 0xe9, 0xca, 0xe5, - 0x66, 0x2c, 0x21, 0xd5, 0xeb, 0x5b, 0x0c, 0xf6, 0xa6, 0x51, 0x4e, 0x4b, 0x50, 0x74, 0xaa, 0x37, - 0xe2, 0x30, 0x09, 0x00, 0x8f, 0xa8, 0xac, 0xd3, 0x16, 0x0b, 0xa4, 0x30, 0x02, 0x0b, 0xbd, 0xc3, - 0x6d, 0x59, 0x1b, 0x7a, 0x90, 0xe4, 0x57, 0xa5, 0x57, 0x47, 0xff, 0x9b, 0xcc, 0x9b, 0x3c, 0x04, - 0x42, 0xa3, 0x1a, 0xd2, 0x9e, 0x4c, 0x6b, 0xe0, 0xf6, 0xb0, 0x59, 0x93, 0xb9, 0x67, 0x89, 0xcd, - 0xb1, 0x01, 0x2b, 0x4d, 0xde, 0xec, 0x61, 0xe1, 0x89, 0xf2, 0x24, 0xb4, 0x4e, 0x47, 0xb5, 0xbc, - 0x9b, 0x23, 0x92, 0xcb, 0x98, 0x12, 0x2c, 0x29, 0xd7, 0x4a, 0x02, 0xd5, 0x6b, 0xe9, 0xcf, 0x65, - 0xe0, 0x4d, 0xed, 0x02, 0x32, 0xec, 0x84, 0xd6, 0x6c, 0x23, 0x77, 0x7c, 0xf9, 0x62, 0xad, 0xbb, - 0x82, 0xe7, 0x06, 0x66, 0xcb, 0xf5, 0xa5, 0xb2, 0x5e, 0xc8, 0x31, 0x52, 0xc5, 0xb0, 0x85, 0x21, - 0xdd, 0xe6, 0xac, 0x0d, 0x84, 0x30, 0x50, 0xfd, 0xb6, 0xd3, 0x84, 0x3e, 0x8e, 0xef, 0x55, 0x60, - 0x39, 0x44, 0x02, 0xc7, 0x16, 0x02, 0x1f, 0x53, 0x11, 0x4e, 0x9f, 0xb1, 0xe8, 0xe2, 0x96, 0x86, - 0xb8, 0x3d, 0x9f, 0xf1, 0x08, 0xca, 0xef, 0x76, 0xbf, 0x5b, 0x6d, 0x3b, 0x57, 0x5a, 0x77, 0x71, - 0xee, 0xe7, 0x1c, 0x06, 0x73, 0x6a, 0xf1, 0xb1, 0xbc, 0x27, 0x50, 0x3e, 0x5b, 0x01, 0x3b, 0x50, - 0x22, 0x81, 0x02, 0x09, 0x4e, 0xe5, 0x59, 0x5d, 0x94, 0xf0, 0xaa, 0x91, 0x6d, 0x0d, 0xaf, 0xf2, - 0xa9, 0x36, 0xa6, 0xd3, 0xa5, 0x38, 0x36, 0x37, 0x37, 0xb0, 0xb8, 0xba, 0x1e, 0xb4, 0x62, 0x5f, - 0xbf, 0x5a, 0x2c, 0x50, 0x47, 0x22, 0xba, 0xca, 0xac, 0x8e, 0x22, 0xb5, 0xc5, 0x90, 0x1b, 0xcb, - 0x6c, 0x01, 0xc3, 0x50, 0x31, 0x41, 0x64, 0xce, 0x44, 0xc0, 0xc1, 0x2b, 0x61, 0x38, 0x27, 0x82, - 0x0d, 0x40, 0x8e, 0x31, 0xa2, 0x3d, 0xd4, 0x11, 0xbf, 0x58, 0xe3, 0xe4, 0xd2, 0x41, 0x54, 0xf9, - 0x68, 0xa1, 0xb7, 0x39, 0xe8, 0xac, 0x86, 0xe0, 0x18, 0x56, 0xff, 0xbe, 0xc3, 0x8f, 0xa5, 0x0d, - 0x4a, 0x03, 0x9a, 0x5b, 0x40, 0xcf, 0x4f, 0x09, 0x4b, 0x4b, 0x03, 0xea, 0xe5, 0x13, 0xb1, 0xd2, - 0x59, 0x89, 0x65, 0x43, 0x06, 0x7b, 0x03, 0x8e, 0xe5, 0x26, 0x73, 0xe5, 0x41, 0x8c, 0x55, 0x1c, - 0x99, 0x54, 0x39, 0x8c, 0xf8, 0x50, 0xcd, 0x42, 0x02, 0x3b, 0x09, 0x98, 0xad, 0x9d, 0x01, 0x1d, - 0xe8, 0x2a, 0x91, 0x3e, 0x1e, 0xcb, 0x40, 0x6f, 0xd9, 0x24, 0x1e, 0x2f, 0x81, 0x94, 0x61, 0xed, - 0xf6, 0x6f, 0x41, 0xa6, 0xcc, 0x3c, 0xf2, 0x0b, 0x1d, 0xa7, 0xbd, 0xc1, 0x21, 0x64, 0x8b, 0x95, - 0xb1, 0x82, 0x73, 0x63, 0x14, 0x4f, 0xce, 0xce, 0xce, 0x4c, 0x79, 0xc2, 0x98, 0x81, 0x89, 0xb3, - 0x60, 0x9b, 0xfe, 0x0a, 0xb6, 0xd3, 0xf4, 0x45, 0xba, 0xa0, 0xeb, 0xbf, 0x96, 0x62, 0xdd, 0x4d, - 0x82, 0xad, 0xc4, 0x89, 0x61, 0x3a, 0xc4, 0x3e, 0x61, 0xb4, 0x7f, 0x15, 0x68, 0x4d, 0xab, 0x64, - 0x3a, 0xac, 0x3a, 0x79, 0x53, 0x2a, 0x6a, 0x9d, 0xaf, 0xd5, 0xf7, 0x2e, 0x08, 0x79, 0x05, 0xe7, - 0xdb, 0xd6, 0xcf, 0x6b, 0xd1, 0x0f, 0x9f, 0x8d, 0x1c, 0x97, 0xbf, 0x00, 0x7a, 0x87, 0x76, 0xfe, - 0x07, 0x9e, 0x44, 0x34, 0x75, 0xe2, 0x4c, 0x56, 0x4e, 0x2b, 0xc2, 0x55, 0xa9, 0xa8, 0x82, 0x70, - 0xe5, 0x43, 0x74, 0x23, 0x9f, 0x23, 0x0f, 0x16, 0x2b, 0xd0, 0xd0, 0x33, 0xde, 0x63, 0x59, 0x9d, - 0xfa, 0x1c, 0x7d, 0x3b, 0x29, 0xbf, 0x52, 0xd1, 0x78, 0xad, 0x2f, 0x26, 0x15, 0x17, 0x11, 0xe9, - 0xd6, 0x5b, 0xdc, 0x0d, 0xda, 0xf2, 0x23, 0x41, 0xf9, 0xe2, 0xa3, 0xba, 0x99, 0x54, 0x73, 0x7d, - 0xf9, 0xad, 0x71, 0x6d, 0x88, 0xa4, 0x63, 0xf9, 0xb9, 0x7a, 0x7f, 0xbc, 0xfc, 0xea, 0x07, 0x75, - 0xdd, 0xc3, 0xcf, 0x6f, 0x8a, 0x04, 0x0d, 0x74, 0x27, 0xb0, 0xaf, 0xa8, 0x6f, 0x20, 0xd0, 0xe7, - 0x09, 0xfe, 0x06, 0x46, 0x5e, 0x1a, 0xb1, 0xeb, 0x97, 0xd2, 0x1f, 0x3c, 0x4f, 0x53, 0xdd, 0x18, - 0xbf, 0xfd, 0x2a, 0x7b, 0x7d, 0xa8, 0xdd, 0xc2, 0x05, 0x65, 0x1d, 0x8a, 0x1f, 0x5d, 0x05, 0xf9, - 0x8e, 0x9a, 0xa5, 0xdf, 0x68, 0x79, 0xf3, 0x5b, 0x1b, 0xe2, 0x8d, 0xfa, 0xaf, 0xb6, 0xcc, 0x8d, - 0x14, 0xe6, 0x89, 0x4a, 0x71, 0x8f, 0xc2, 0x54, 0x9a, 0x0c, 0x49, 0x2b, 0xba, 0x47, 0x30, 0x80, - 0xf4, 0xcc, 0x34, 0xfd, 0x02, 0x43, 0xab, 0xfb, 0xe9, 0x97, 0x9f, 0x7f, 0xbd, 0xea, 0x4e, 0x1c, - 0xd3, 0x90, 0x09, 0xbb, 0xee, 0xb5, 0xfe, 0xfd, 0x97, 0x9b, 0x55, 0x6f, 0x6d, 0x7f, 0xb5, 0x7e, - 0xc9, 0x3a, 0xaa, 0x09, 0x63, 0x68, 0x70, 0x8a, 0x22, 0xf4, 0x01, 0x36, 0x2c, 0x17, 0x1e, 0x69, - 0x1c, 0xf1, 0x54, 0xf1, 0x32, 0x0d, 0x2f, 0x4a, 0xd7, 0x3e, 0x2a, 0x17, 0x29, 0x56, 0xf9, 0x5d, - 0x94, 0x6a, 0xb6, 0xf0, 0x2c, 0x49, 0x2c, 0x73, 0xf3, 0x0b, 0x28, 0x43, 0xff, 0x90, 0x07, 0xf0, - 0x00, 0x0e, 0x5c, 0x90, 0x70, 0x5a, 0xae, 0xc1, 0xd8, 0xab, 0xb6, 0xfa, 0x1d, 0xae, 0x8c, 0xbf, - 0xfb, 0xc9, 0x6f, 0x61, 0xbc, 0x80, 0xe7, 0xb7, 0xf0, 0xdc, 0x5e, 0xed, 0xc3, 0xd1, 0xd0, 0x51, - 0x1d, 0x7e, 0x81, 0x1d, 0xdb, 0xc7, 0x27, 0x94, 0x5c, 0xd3, 0xf2, 0xf8, 0x57, 0xd8, 0xb1, 0x6d, - 0x3c, 0x9f, 0x6f, 0x86, 0xf2, 0x39, 0xba, 0xac, 0xe2, 0x64, 0x94, 0x02, 0x23, 0x2a, 0xe6, 0xa2, - 0xe8, 0x7d, 0x28, 0x7b, 0x30, 0xd0, 0xd9, 0xc2, 0x9b, 0xe2, 0xf8, 0x95, 0x4a, 0x37, 0xd9, 0x58, - 0xe6, 0x2e, 0xfe, 0x65, 0x82, 0xa4, 0xa2, 0x4c, 0x21, 0xfe, 0x68, 0x54, 0x6c, 0xe7, 0xc8, 0xff, - 0x25, 0x7e, 0x23, 0xfc, 0xa8, 0x0a, 0x3d, 0x7a, 0xe8, 0xde, 0xd4, 0xae, 0x13, 0x15, 0x94, 0x23, - 0xaf, 0xc4, 0x34, 0xce, 0xb4, 0x4a, 0xea, 0x4b, 0xaf, 0x81, 0xe9, 0xb9, 0x87, 0xa6, 0x53, 0x88, - 0x7a, 0x80, 0x43, 0xf4, 0x25, 0x90, 0xf7, 0x52, 0x6b, 0xc1, 0x04, 0xd0, 0xf1, 0x18, 0xb6, 0x0e, - 0x36, 0x0e, 0xcc, 0x6b, 0x14, 0x98, 0x98, 0xcc, 0x99, 0xf5, 0x31, 0xb0, 0x25, 0x2f, 0xe0, 0x59, - 0x1d, 0xb4, 0x75, 0xf1, 0xea, 0x06, 0x84, 0xc5, 0xb8, 0x5c, 0x11, 0x42, 0xd7, 0xee, 0x97, 0xd7, - 0xd0, 0x53, 0xa3, 0x1d, 0x5a, 0x83, 0x6b, 0xdf, 0xbd, 0x0e, 0xe8, 0x75, 0xcc, 0xf2, 0x85, 0xa2, - 0x12, 0xf1, 0x2a, 0xe5, 0x54, 0xd0, 0x81, 0x5c, 0x25, 0x28, 0x35, 0xca, 0x7b, 0x40, 0xf7, 0x1f, - 0x16, 0xd1, 0x72, 0x41, 0x4f, 0xe7, 0xb9, 0xa6, 0x14, 0x25, 0xa9, 0x25, 0x7f, 0x92, 0x85, 0xb8, - 0x63, 0x89, 0xb6, 0xfd, 0x06, 0x69, 0xc1, 0x79, 0x5b, 0xd8, 0x7d, 0x81, 0xa2, 0xa5, 0x98, 0x8d, - 0x15, 0xd6, 0x2a, 0x9f, 0xb0, 0xbf, 0x15, 0x26, 0xaa, 0x43, 0xe9, 0x1e, 0x9b, 0x2a, 0xbf, 0x00, - 0x65, 0x2f, 0xe8, 0x98, 0x2c, 0x12, 0x70, 0x20, 0x4e, 0xf9, 0x27, 0x40, 0x35, 0xbd, 0x28, 0x64, - 0xaf, 0x56, 0xfc, 0xd4, 0x54, 0xb4, 0x4c, 0x93, 0xea, 0xd1, 0x32, 0xad, 0x46, 0x7f, 0x63, 0x26, - 0x9f, 0x17, 0xc5, 0xdf, 0x4c, 0xf0, 0x39, 0xe6, 0x13, 0x64, 0x22, 0x43, 0x7e, 0xbc, 0xf8, 0x96, - 0x4b, 0xf9, 0x4e, 0x20, 0xe5, 0x7c, 0x0b, 0x8b, 0x50, 0xa3, 0x8a, 0xa1, 0x5b, 0xc4, 0x72, 0xa8, - 0x2e, 0xa2, 0xb3, 0xa0, 0x18, 0x88, 0xf1, 0x29, 0xa3, 0x32, 0x45, 0xde, 0xf1, 0xec, 0x61, 0x61, - 0xa2, 0x58, 0x93, 0xc9, 0x98, 0xf0, 0x28, 0x89, 0x05, 0xed, 0x08, 0x93, 0x45, 0x04, 0xe6, 0xb2, - 0x7a, 0x09, 0xc7, 0x3e, 0xb3, 0x6a, 0xe1, 0x6d, 0x02, 0x0c, 0x33, 0xf5, 0xbc, 0x6a, 0x19, 0xc4, - 0xf6, 0x65, 0x67, 0xc9, 0x4f, 0x57, 0x6a, 0x54, 0x4c, 0xcd, 0x61, 0xa0, 0x2e, 0xba, 0x52, 0x56, - 0x62, 0x44, 0x51, 0xcb, 0x6e, 0xf9, 0x19, 0x57, 0x3d, 0x99, 0x92, 0x45, 0x5a, 0x87, 0xeb, 0xf3, - 0x56, 0x7b, 0x25, 0xdf, 0x5b, 0xb4, 0xc3, 0x9c, 0xd5, 0x8c, 0x8a, 0x29, 0x8f, 0x7c, 0x13, 0x0f, - 0x8e, 0xd7, 0xb6, 0x2b, 0xa6, 0x14, 0x04, 0x17, 0xbd, 0x2a, 0xff, 0x72, 0xa6, 0xd2, 0x70, 0x0b, - 0x42, 0x19, 0x50, 0xda, 0xbf, 0x41, 0x68, 0x6e, 0x98, 0x1d, 0xc8, 0x3d, 0x37, 0x65, 0x62, 0xa0, - 0xca, 0xc4, 0x03, 0xe0, 0x7c, 0xd6, 0x8a, 0x5b, 0x02, 0x7f, 0x58, 0x06, 0x99, 0xa9, 0xbc, 0xbf, - 0x56, 0xd1, 0x05, 0xb2, 0xb7, 0x47, 0xe0, 0xb5, 0xba, 0xd1, 0x65, 0xc0, 0x7a, 0x02, 0x08, 0x42, - 0x88, 0x55, 0xeb, 0x22, 0xfd, 0x05, 0xa4, 0x74, 0x8c, 0x24, 0xc9, 0x52, 0x65, 0x11, 0x6b, 0xbb, - 0xe5, 0x5a, 0xaa, 0xf1, 0x28, 0x4b, 0xc3, 0x40, 0xdf, 0x54, 0xec, 0x76, 0xc3, 0x88, 0xfd, 0x26, - 0x13, 0x8d, 0x45, 0x34, 0x4e, 0x80, 0x9f, 0x58, 0xbc, 0xeb, 0x92, 0xdf, 0xc8, 0x6d, 0x37, 0x89, - 0x47, 0x59, 0x57, 0x40, 0xb6, 0x4f, 0x21, 0x63, 0xed, 0xa6, 0xbd, 0xfe, 0x89, 0x7e, 0x9a, 0xc5, - 0x0c, 0x7a, 0x4c, 0xe3, 0xd1, 0x8c, 0xdc, 0x1e, 0xe0, 0x4d, 0x42, 0xf3, 0xe4, 0xf8, 0xd0, 0xf3, - 0xcc, 0xd3, 0xd2, 0x5a, 0x5d, 0xfd, 0xc7, 0x0b, 0xb0, 0xa8, 0x64, 0x70, 0x96, 0x70, 0x02, 0x56, - 0x34, 0xbf, 0xa5, 0x89, 0x7f, 0x97, 0x60, 0xda, 0x3b, 0x7d, 0xb4, 0xed, 0x6f, 0x1a, 0xc0, 0x3b, - 0xe3, 0x69, 0x14, 0x5f, 0x1b, 0x52, 0x09, 0x02, 0xb3, 0x30, 0x1b, 0xa6, 0xee, 0xc7, 0x1f, 0x12, - 0x96, 0x85, 0xc7, 0x03, 0x64, 0xf4, 0xd8, 0x8a, 0x4c, 0x21, 0x22, 0x30, 0x7e, 0xcb, 0xac, 0x9e, - 0x69, 0xb4, 0x4f, 0x7a, 0x74, 0xd7, 0xac, 0xfe, 0xb6, 0x59, 0xe5, 0x49, 0x8f, 0xea, 0xb3, 0x06, - 0xf7, 0xcd, 0xaa, 0xad, 0x98, 0x27, 0x9b, 0xa7, 0x7b, 0xbb, 0x4f, 0x1e, 0x3f, 0xf1, 0x86, 0x0d, - 0x94, 0x36, 0x11, 0x67, 0x0e, 0x58, 0xf6, 0xe0, 0x26, 0x68, 0x80, 0xc8, 0x7a, 0xb9, 0x13, 0xf8, - 0xd7, 0x24, 0xfe, 0x07, 0xf5, 0x4c, 0x46, 0xfe, 0x65, 0x42, 0x00, 0x00 + 0x92, 0xff, 0xf3, 0x14, 0x34, 0x3d, 0xeb, 0x25, 0x2d, 0x9a, 0xa2, 0x24, 0xdb, 0xe3, 0x50, 0xa1, + 0x7d, 0x89, 0xe3, 0x9d, 0xc9, 0x54, 0xbe, 0x6a, 0x9c, 0xcc, 0xd4, 0x56, 0xc6, 0x37, 0x81, 0x48, + 0x48, 0xe2, 0x84, 0x02, 0xb4, 0x24, 0x64, 0x5b, 0x2b, 0xeb, 0x11, 0xee, 0xdf, 0xfd, 0xbf, 0x57, + 0xbc, 0x47, 0xb8, 0x6e, 0x00, 0xa4, 0xf8, 0x25, 0xdb, 0x93, 0x99, 0xbd, 0xba, 0xab, 0x54, 0x24, + 0x10, 0x04, 0x1a, 0xdd, 0x8d, 0xfe, 0x06, 0x64, 0xe3, 0xd9, 0xce, 0xcb, 0x77, 0xe7, 0x1f, 0xfe, + 0xfe, 0xfe, 0xc2, 0x98, 0x8a, 0x59, 0x72, 0x6a, 0x3c, 0xcb, 0xbf, 0x28, 0x89, 0xe0, 0x4b, 0xc4, + 0x22, 0xa1, 0xa7, 0x97, 0x82, 0xa4, 0x6f, 0x78, 0x64, 0x8c, 0x96, 0xc6, 0x1b, 0xce, 0x19, 0x34, + 0x17, 0x09, 0xcd, 0x9e, 0x75, 0xd5, 0x5b, 0xe3, 0xd9, 0x8c, 0x0a, 0x62, 0x3c, 0x09, 0xa7, 0x24, + 0xcd, 0xa8, 0x08, 0xcc, 0x85, 0x18, 0x1f, 0x9c, 0x98, 0xd0, 0x9f, 0x89, 0x25, 0xbc, 0x7f, 0x92, + 0x90, 0x11, 0x4d, 0x56, 0x33, 0x92, 0x4e, 0x62, 0x76, 0x90, 0xc6, 0x93, 0xa9, 0xf0, 0x8f, 0xe7, + 0xb7, 0xeb, 0x90, 0xcf, 0x66, 0x94, 0x89, 0xd5, 0x98, 0x33, 0x71, 0x90, 0xc5, 0xff, 0xa4, 0x7e, + 0xcf, 0x9b, 0xdf, 0x0e, 0xd5, 0x23, 0xce, 0xf4, 0x63, 0x41, 0x92, 0x38, 0x1c, 0xea, 0x99, 0x09, + 0x1d, 0xab, 0x89, 0x82, 0xde, 0xd6, 0x67, 0xc9, 0x3e, 0x92, 0x52, 0xb2, 0xba, 0x89, 0x23, 0x31, + 0x85, 0x3e, 0xef, 0x2f, 0xc3, 0x29, 0x95, 0x6b, 0xc9, 0xf6, 0x88, 0xa7, 0x11, 0x4d, 0x0f, 0x52, + 0x12, 0xc5, 0x8b, 0xcc, 0xef, 0xf5, 0x61, 0xa1, 0x11, 0x09, 0xbf, 0x4c, 0x52, 0xbe, 0x60, 0x91, + 0xef, 0x19, 0xde, 0x3a, 0x24, 0xec, 0x9a, 0x64, 0x5f, 0x3f, 0x7f, 0xc4, 0xa3, 0xa5, 0xc2, 0x6a, + 0x4c, 0x66, 0x71, 0xb2, 0xf4, 0x9f, 0xa7, 0x31, 0x49, 0x9c, 0xef, 0x69, 0x72, 0x4d, 0x45, 0x1c, + 0x12, 0x27, 0x23, 0x2c, 0x3b, 0xc8, 0x68, 0x1a, 0x8f, 0xcb, 0x53, 0x77, 0x3d, 0xcf, 0x5b, 0xc7, + 0x6c, 0xbe, 0x10, 0xab, 0x1a, 0xc0, 0x8c, 0x26, 0x34, 0x6c, 0xf4, 0x4e, 0x7b, 0xce, 0xb4, 0xbf, + 0x0a, 0x79, 0xc2, 0x53, 0x7f, 0x77, 0x74, 0xec, 0x8d, 0x8f, 0xfb, 0x6b, 0x77, 0xc6, 0x23, 0x92, + 0xac, 0xe6, 0x3c, 0x8b, 0x45, 0xcc, 0x99, 0x3f, 0x8e, 0x6f, 0x69, 0x34, 0x94, 0xfc, 0xf2, 0x00, + 0x73, 0x21, 0xf8, 0x0c, 0x1a, 0x8a, 0xf3, 0xde, 0x50, 0xf0, 0x39, 0x76, 0x6f, 0xc0, 0x26, 0x31, + 0xa3, 0x24, 0x3d, 0x98, 0x20, 0x71, 0xb0, 0x21, 0x96, 0xe0, 0x86, 0x9a, 0xe4, 0xec, 0x8e, 0xc7, + 0x23, 0x3a, 0x18, 0x3c, 0x85, 0x85, 0x1d, 0xbd, 0x18, 0xb4, 0x91, 0x21, 0xf6, 0x50, 0xa4, 0x40, + 0xcf, 0x98, 0xa7, 0x33, 0x5f, 0xb6, 0x12, 0x22, 0xe8, 0xdf, 0xad, 0xd2, 0x2b, 0x85, 0x4a, 0x31, + 0xca, 0x70, 0x0f, 0xb3, 0xe1, 0x9c, 0x44, 0x51, 0xcc, 0x26, 0xfe, 0x49, 0xb1, 0xcf, 0x72, 0x03, + 0xf1, 0x91, 0x5f, 0xd3, 0x74, 0x9c, 0xf0, 0x1b, 0x9f, 0x2c, 0x04, 0xaf, 0xb1, 0xfb, 0x10, 0xd8, + 0xbd, 0x76, 0x59, 0x14, 0x5f, 0xaf, 0xca, 0xb2, 0x70, 0x84, 0xe2, 0xd2, 0xdc, 0x98, 0xb5, 0x2b, + 0xc8, 0x28, 0xa1, 0x4a, 0x86, 0x1e, 0xbd, 0x23, 0x0a, 0x0c, 0xf0, 0x35, 0x21, 0xf3, 0x8c, 0xfa, + 0x79, 0x63, 0x58, 0x92, 0x87, 0xea, 0x52, 0xee, 0x11, 0x9d, 0x55, 0x96, 0x32, 0x44, 0xe4, 0x54, + 0x9f, 0xa7, 0x2b, 0x35, 0xc5, 0xef, 0xcd, 0x6f, 0x8d, 0x8c, 0x27, 0x71, 0x64, 0xe0, 0x76, 0x17, + 0x6c, 0x38, 0xae, 0x21, 0x8b, 0x33, 0x50, 0x90, 0x0f, 0x40, 0xec, 0x27, 0xcc, 0x47, 0x22, 0x4b, + 0xfb, 0x74, 0xa0, 0x37, 0xfd, 0xf8, 0x5b, 0xfc, 0x37, 0xd4, 0x4f, 0xe3, 0xf1, 0x78, 0xed, 0x86, + 0x40, 0x24, 0x81, 0x5d, 0x4c, 0x57, 0x51, 0x9c, 0xcd, 0x13, 0xb2, 0xf4, 0x27, 0x69, 0x1c, 0x0d, + 0xf1, 0xe3, 0x40, 0xd0, 0xd9, 0x1c, 0x37, 0x07, 0xa7, 0x2f, 0x66, 0x2c, 0xf3, 0x53, 0x3a, 0xa7, + 0x44, 0x58, 0x87, 0x4e, 0x6f, 0x9c, 0xda, 0x6b, 0x77, 0xc4, 0x6f, 0x73, 0x34, 0x07, 0x1b, 0x34, + 0x8f, 0x8f, 0x8f, 0x7f, 0x97, 0x88, 0x6c, 0x04, 0x44, 0x8b, 0x47, 0x95, 0x59, 0x7d, 0xe0, 0x40, + 0x41, 0xb6, 0x54, 0x73, 0xb5, 0x91, 0xaa, 0x1d, 0x2e, 0xd2, 0x0c, 0x68, 0x99, 0x81, 0x0c, 0x48, + 0x7c, 0xfc, 0x29, 0x4a, 0xc3, 0xaa, 0x49, 0xba, 0xe7, 0x8d, 0x34, 0xbd, 0x48, 0xca, 0x36, 0xb4, + 0x1f, 0x58, 0xb9, 0xbe, 0x9a, 0x8b, 0x8b, 0x39, 0x1a, 0xa6, 0xab, 0x56, 0xde, 0x00, 0x8e, 0x80, + 0x4c, 0xaa, 0x20, 0xaf, 0xfd, 0x94, 0x73, 0xb1, 0x3a, 0x38, 0x08, 0x0f, 0x7a, 0xfe, 0x6e, 0xaf, + 0xd7, 0x1b, 0x62, 0x73, 0x2c, 0xf7, 0x40, 0x36, 0xfb, 0xfe, 0x6e, 0xbf, 0xdf, 0x97, 0xcd, 0x81, + 0xbf, 0x3b, 0x18, 0x0c, 0x64, 0xf3, 0xd0, 0xdf, 0x3d, 0x3c, 0x3c, 0x94, 0xcd, 0x23, 0x7f, 0xf7, + 0xe8, 0xe8, 0x48, 0x36, 0x8f, 0x7d, 0x89, 0x2c, 0x36, 0x4f, 0xfc, 0xdd, 0x93, 0x93, 0x13, 0xd9, + 0x1c, 0x81, 0x4e, 0x8f, 0x46, 0xb2, 0x19, 0xfa, 0xbb, 0x61, 0x18, 0xca, 0x26, 0xf5, 0x77, 0x29, + 0xa5, 0xb2, 0x09, 0x06, 0x23, 0x8a, 0x22, 0xd9, 0x04, 0x7e, 0x84, 0x03, 0xb5, 0xda, 0x04, 0x16, + 0x0e, 0x15, 0x3a, 0x09, 0xac, 0x76, 0x42, 0x64, 0x73, 0xe9, 0xef, 0x92, 0xa7, 0x1e, 0x34, 0x05, + 0xc0, 0xf5, 0x5c, 0xb5, 0x2e, 0xf7, 0xd3, 0xc9, 0x88, 0x58, 0xbd, 0xa7, 0x47, 0x8e, 0xd1, 0x3b, + 0xcc, 0x3f, 0x3c, 0xf7, 0xa9, 0x2d, 0x5f, 0x8b, 0x91, 0x7a, 0x3f, 0x38, 0x74, 0x8c, 0xfc, 0xff, + 0x35, 0x49, 0x2d, 0x09, 0xc4, 0xce, 0xc7, 0x10, 0x0d, 0xc4, 0xeb, 0xc3, 0xfc, 0xe2, 0xa3, 0x39, + 0x6e, 0xaa, 0xc6, 0x1d, 0xf5, 0x1c, 0x23, 0xff, 0x5f, 0x1d, 0x04, 0xaa, 0xf5, 0x2d, 0xee, 0x09, + 0xb4, 0xe6, 0x79, 0x0b, 0x66, 0x1d, 0x0f, 0x54, 0xdf, 0x68, 0xee, 0xf7, 0x0e, 0x61, 0x13, 0xd4, + 0x87, 0xa7, 0x5b, 0x38, 0x06, 0xde, 0x3c, 0x85, 0x47, 0xcf, 0xf8, 0x16, 0x3f, 0xe5, 0xac, 0xc8, + 0x67, 0x9c, 0x21, 0x97, 0xb2, 0xc9, 0xdc, 0x37, 0x47, 0x09, 0x0f, 0xbf, 0x98, 0xf8, 0x62, 0x06, + 0x46, 0x0f, 0x14, 0x6d, 0x17, 0x94, 0x84, 0xc5, 0x2c, 0xaa, 0x9b, 0x49, 0x6d, 0x1f, 0x43, 0x92, + 0x84, 0x96, 0x42, 0x6e, 0x34, 0xb5, 0x8d, 0x8e, 0x71, 0x34, 0xbf, 0xb5, 0x95, 0x0d, 0x3d, 0x2c, + 0x49, 0xd0, 0x51, 0xc3, 0xe4, 0x1c, 0x55, 0x5c, 0x41, 0x2e, 0xa9, 0xc8, 0xf8, 0x7f, 0x1e, 0xc0, + 0x72, 0xf4, 0xd6, 0x3f, 0xe8, 0xaf, 0x9f, 0x3c, 0xeb, 0x2a, 0x67, 0x08, 0x4e, 0x31, 0x4c, 0xe3, + 0xb9, 0x38, 0x7d, 0xd2, 0xed, 0x1a, 0xff, 0x06, 0xde, 0x8d, 0xb2, 0x8c, 0x1a, 0x86, 0xf1, 0xdd, + 0xdb, 0x8f, 0xc6, 0x77, 0x17, 0x6f, 0x2f, 0x7e, 0x7c, 0xfe, 0xda, 0x78, 0xff, 0xf1, 0xc5, 0xeb, + 0x57, 0xe7, 0x06, 0xfc, 0xbf, 0x78, 0x7b, 0x79, 0x61, 0xfc, 0x44, 0xd3, 0x0c, 0xd0, 0x35, 0x06, + 0x8e, 0xd1, 0x7f, 0x6a, 0xfc, 0xb0, 0x60, 0xd4, 0xe8, 0x7b, 0xde, 0xb7, 0x4f, 0x00, 0x59, 0x63, + 0x9e, 0xd2, 0xeb, 0x98, 0x2f, 0xb2, 0xbf, 0x2d, 0x58, 0x88, 0x34, 0x39, 0x29, 0x85, 0x25, 0x53, + 0x9a, 0x06, 0x6c, 0x91, 0x24, 0x4e, 0x06, 0xe0, 0xa9, 0x6a, 0x86, 0x64, 0x46, 0x53, 0x22, 0xdb, + 0xc3, 0xb1, 0x1e, 0x6d, 0x2c, 0xc0, 0xf8, 0xc1, 0x54, 0x8b, 0x3a, 0x99, 0xbd, 0x8a, 0xc7, 0x96, + 0x39, 0xbf, 0x8e, 0xe9, 0x8d, 0x19, 0x04, 0x74, 0x6f, 0xef, 0xb7, 0x8c, 0xb3, 0x9f, 0x48, 0xb2, + 0xa0, 0x99, 0x2b, 0x7b, 0xed, 0x55, 0x42, 0x85, 0x01, 0xd0, 0xe8, 0x8d, 0xf1, 0x31, 0x66, 0xe2, + 0xe4, 0x79, 0x9a, 0x92, 0xa5, 0x95, 0xd9, 0x0e, 0x0b, 0x26, 0xaf, 0xa2, 0x7c, 0xae, 0x3d, 0x04, + 0x38, 0xf5, 0xb9, 0x2e, 0xc3, 0xf9, 0xb0, 0x01, 0xa0, 0xa6, 0xd4, 0x4d, 0xf8, 0xc4, 0x32, 0xc1, + 0x0a, 0x25, 0x24, 0x44, 0x93, 0x47, 0x0d, 0xe5, 0x7a, 0x77, 0x4c, 0xe4, 0x37, 0x2e, 0x11, 0x5e, + 0x58, 0xa6, 0xea, 0x83, 0x2e, 0xea, 0x4a, 0x13, 0x1c, 0x30, 0xf5, 0xed, 0x50, 0x57, 0xf9, 0x65, + 0xe8, 0x50, 0x0d, 0x87, 0xb9, 0x73, 0x70, 0xfd, 0x4c, 0xbc, 0xe5, 0x11, 0x75, 0x35, 0xdc, 0xf3, + 0x69, 0x9c, 0x44, 0x40, 0x17, 0x43, 0xf4, 0xe0, 0xcb, 0x8d, 0xa3, 0x40, 0x63, 0x08, 0x0f, 0xb0, + 0x99, 0x17, 0xd7, 0x30, 0xe3, 0x75, 0x9c, 0x09, 0xe0, 0x50, 0x0a, 0xcb, 0xc1, 0x56, 0x7c, 0x31, + 0x1d, 0x1a, 0x9c, 0xae, 0x04, 0x9f, 0x4c, 0x12, 0xfa, 0x06, 0x5d, 0xaa, 0x45, 0xc1, 0x3c, 0xa7, + 0x13, 0x2a, 0xec, 0xb5, 0xbd, 0x4e, 0xa9, 0x58, 0xa4, 0xcc, 0xe8, 0x05, 0x41, 0x83, 0xbc, 0x88, + 0xce, 0xc5, 0xf4, 0x4c, 0x6e, 0x06, 0xbd, 0xe9, 0xbf, 0xb4, 0x98, 0x43, 0x6d, 0x5f, 0x3f, 0x0e, + 0xd4, 0xa3, 0xb3, 0x03, 0x6e, 0x1e, 0x38, 0x3c, 0xe2, 0x24, 0x8d, 0x90, 0xc3, 0x5b, 0xf9, 0x39, + 0xd4, 0x13, 0x5f, 0xe0, 0x48, 0x4b, 0xb2, 0x56, 0x4d, 0xb2, 0x01, 0x8c, 0xc6, 0x62, 0xa7, 0xb7, + 0x2e, 0x36, 0x71, 0xb3, 0xac, 0xdc, 0x46, 0x84, 0x0a, 0x24, 0xbb, 0x80, 0xf5, 0x39, 0xb8, 0x05, + 0x70, 0x27, 0x96, 0xd9, 0xc7, 0xc9, 0x3c, 0x38, 0x74, 0x92, 0x26, 0xee, 0x63, 0x12, 0x0a, 0x9e, + 0xe2, 0xae, 0x31, 0x37, 0x4c, 0xc0, 0xca, 0xff, 0x08, 0x51, 0x87, 0xe5, 0x39, 0x9e, 0x43, 0x6b, + 0x1c, 0xb7, 0x9d, 0x76, 0x99, 0x10, 0xc1, 0x1b, 0x22, 0xa6, 0xee, 0x2c, 0x06, 0x41, 0x52, 0x53, + 0xba, 0x8d, 0x55, 0xaa, 0x90, 0x9a, 0xef, 0xf3, 0x15, 0x52, 0x05, 0x0b, 0x22, 0x01, 0x9e, 0x5a, + 0x39, 0xb8, 0x03, 0xb1, 0xdf, 0x0e, 0xd0, 0xee, 0xf6, 0xdb, 0xe5, 0x8d, 0x2f, 0x04, 0x44, 0x54, + 0x99, 0x0d, 0x91, 0x07, 0x2a, 0xb5, 0x11, 0x1b, 0x7c, 0x6c, 0x6c, 0x1d, 0x05, 0x10, 0x62, 0x37, + 0xa1, 0xd1, 0x66, 0x3c, 0xc1, 0xf1, 0xba, 0x2f, 0xfb, 0xc4, 0xaf, 0x3a, 0xf0, 0xd1, 0xe9, 0xa9, + 0xaf, 0xfe, 0xd5, 0x69, 0xdf, 0xdb, 0xdb, 0x03, 0x76, 0x8d, 0xe3, 0x24, 0xb9, 0x44, 0xb5, 0x0e, + 0x3e, 0x83, 0x9d, 0xb3, 0xbe, 0x59, 0xe1, 0xd0, 0xb5, 0x23, 0xbf, 0x61, 0x74, 0xde, 0xea, 0x5f, + 0xad, 0xed, 0xcf, 0x20, 0x75, 0x23, 0x0a, 0x1e, 0xef, 0x3d, 0x90, 0x67, 0xd9, 0x28, 0x83, 0x69, + 0x68, 0x91, 0x4f, 0xde, 0xd5, 0xbe, 0xe8, 0x26, 0x9d, 0xd4, 0x21, 0x9f, 0x7a, 0xb2, 0xe9, 0xb8, + 0x87, 0xfb, 0x02, 0x98, 0xdf, 0xdf, 0x97, 0x8c, 0x78, 0xff, 0x0a, 0xc7, 0xe2, 0x42, 0x96, 0x0d, + 0x5b, 0xd8, 0x09, 0x06, 0x43, 0x9a, 0x80, 0xc5, 0xa8, 0xe8, 0x52, 0x21, 0x01, 0x25, 0x12, 0x0d, + 0xc6, 0x0d, 0x44, 0xdf, 0x6c, 0x6e, 0x5a, 0xa3, 0x47, 0x59, 0x85, 0xc7, 0xc3, 0xd5, 0x7c, 0x7b, + 0x3c, 0xe8, 0x36, 0x7b, 0x10, 0x80, 0x0c, 0x37, 0x84, 0x78, 0x50, 0x11, 0xe2, 0x2d, 0xb2, 0x0a, + 0x92, 0x7c, 0xd4, 0x65, 0xb8, 0xef, 0xd6, 0x4e, 0x6e, 0xef, 0xee, 0xee, 0xea, 0x83, 0x9b, 0x16, + 0x4c, 0x5a, 0x21, 0xd8, 0xb8, 0x36, 0x1a, 0x07, 0x2f, 0x8d, 0x10, 0xd2, 0x07, 0x41, 0x0d, 0xd4, + 0xc7, 0x1c, 0x2a, 0x68, 0x4d, 0x65, 0xf0, 0x88, 0x82, 0x80, 0x50, 0x13, 0xd5, 0x79, 0x63, 0x68, + 0x61, 0xfc, 0x87, 0xef, 0x7f, 0xbc, 0xb8, 0x70, 0x7f, 0xa6, 0xa3, 0xef, 0x5e, 0xff, 0xa8, 0xfb, + 0xad, 0x95, 0xb2, 0x60, 0x3e, 0x75, 0x08, 0x13, 0x10, 0x77, 0xc6, 0xd0, 0xde, 0xf1, 0x1c, 0x92, + 0xcc, 0xa7, 0x04, 0x1a, 0xeb, 0x1a, 0x68, 0x32, 0x16, 0xb0, 0x5e, 0x19, 0xb2, 0x0b, 0xc9, 0xd4, + 0x39, 0x2a, 0xe4, 0x73, 0x9c, 0x62, 0x79, 0x2d, 0x6f, 0xce, 0xd1, 0xd9, 0xa0, 0xae, 0xda, 0x8e, + 0x95, 0x1b, 0xf8, 0x02, 0x9d, 0xf7, 0xe0, 0x37, 0xe6, 0xa0, 0xcb, 0xf1, 0x35, 0x3d, 0x97, 0xef, + 0x2c, 0xf0, 0xf4, 0xb9, 0x82, 0xe6, 0x9a, 0xe8, 0xf4, 0x9c, 0x23, 0xcf, 0xb3, 0x6d, 0x37, 0xf7, + 0x8a, 0x08, 0x5b, 0x6a, 0x3f, 0x57, 0x02, 0x98, 0xfd, 0x23, 0x15, 0x56, 0xbb, 0xf6, 0x6d, 0x51, + 0xca, 0xce, 0x16, 0xe5, 0xde, 0xdf, 0xd2, 0xdf, 0x69, 0x37, 0xa7, 0xfb, 0xed, 0xdd, 0xa0, 0x05, + 0x8a, 0x52, 0x60, 0x1b, 0xff, 0xf2, 0x5c, 0xe1, 0x8a, 0xf4, 0x6b, 0x5f, 0x57, 0x90, 0x7f, 0x89, + 0xcf, 0xb6, 0xbb, 0x71, 0xcd, 0x52, 0x14, 0x9b, 0x12, 0xba, 0x45, 0x4e, 0x56, 0x68, 0x06, 0x92, + 0xe0, 0x80, 0xef, 0x6f, 0xa1, 0xfe, 0xa0, 0x07, 0xd6, 0xc7, 0x89, 0xdb, 0x47, 0x28, 0xca, 0xd4, + 0x10, 0xd2, 0x3e, 0x44, 0x52, 0x23, 0x47, 0xa0, 0x24, 0x6f, 0x91, 0x49, 0x24, 0x67, 0x33, 0xf3, + 0x31, 0x0a, 0xd7, 0x30, 0x7d, 0xe2, 0x21, 0xd3, 0x27, 0xaa, 0xa6, 0x2f, 0xc5, 0xf1, 0xba, 0x4f, + 0xba, 0xec, 0xdc, 0x49, 0x69, 0xb6, 0xce, 0xa7, 0x20, 0x82, 0xdf, 0x51, 0x0e, 0x49, 0x7f, 0xba, + 0xb4, 0x7a, 0x5d, 0xf0, 0xb0, 0x59, 0xe9, 0xfd, 0x1b, 0x9a, 0x4d, 0x5f, 0x90, 0x2c, 0x0e, 0x41, + 0x7a, 0x28, 0xe6, 0x5b, 0xd6, 0x4a, 0xe6, 0x80, 0xca, 0x45, 0xa3, 0x06, 0xf0, 0x39, 0x09, 0x63, + 0xb1, 0x84, 0x04, 0x0a, 0x74, 0x40, 0xd4, 0xa6, 0x4a, 0xf5, 0x1f, 0x8a, 0xaa, 0x38, 0x26, 0x1d, + 0xbe, 0x9f, 0x82, 0xa9, 0xec, 0x32, 0x27, 0x96, 0xcd, 0x1e, 0x36, 0x89, 0x6c, 0xf6, 0xaf, 0x24, + 0x06, 0xb8, 0xd9, 0xe8, 0xd6, 0x2d, 0x70, 0xd5, 0x5b, 0x0d, 0xd9, 0xe0, 0x5f, 0x64, 0x20, 0x07, + 0xff, 0x32, 0x03, 0xd9, 0xe2, 0xdb, 0xec, 0x55, 0x61, 0x06, 0x54, 0x60, 0x54, 0x89, 0xbe, 0x54, + 0xdf, 0xde, 0x5e, 0x31, 0x46, 0x07, 0x4b, 0xd5, 0x41, 0xaa, 0xf3, 0xee, 0xae, 0x6c, 0x50, 0x2e, + 0x21, 0x15, 0xb7, 0x9a, 0xa0, 0x9c, 0x96, 0x89, 0x79, 0x9c, 0x76, 0x38, 0x44, 0x81, 0xb9, 0x09, + 0x7a, 0x8f, 0xf2, 0xc1, 0x7f, 0x44, 0x10, 0x6f, 0x9e, 0xa9, 0x1d, 0x0e, 0x31, 0xac, 0x03, 0xac, + 0xa1, 0x97, 0x4d, 0x90, 0x4e, 0xab, 0xda, 0xff, 0xe9, 0xe6, 0xca, 0xbd, 0x8e, 0xb3, 0x18, 0x52, + 0xea, 0x20, 0xfb, 0x34, 0xd8, 0xbf, 0xe9, 0x50, 0x74, 0xda, 0xb2, 0xa1, 0xfc, 0xb7, 0x6a, 0x82, + 0x0f, 0xef, 0x79, 0xce, 0xd6, 0xb9, 0xad, 0x70, 0x67, 0x5a, 0xa0, 0x5d, 0x19, 0xe2, 0x97, 0xe4, + 0x56, 0x59, 0x61, 0xd3, 0xcc, 0xa1, 0x5f, 0x75, 0xfb, 0x47, 0x47, 0xce, 0xe6, 0x19, 0x16, 0xae, + 0xf7, 0xf4, 0x65, 0x8f, 0x0d, 0xc6, 0xec, 0xa6, 0xd3, 0x19, 0xfe, 0xff, 0x13, 0xd8, 0xb5, 0x62, + 0x4f, 0xca, 0x05, 0x91, 0x5a, 0x7a, 0xdb, 0x09, 0x5c, 0xaf, 0xe7, 0xd4, 0x7a, 0x97, 0xaa, 0xb7, + 0x90, 0x32, 0xd5, 0x50, 0xac, 0xd5, 0x56, 0xdc, 0x6e, 0x84, 0x00, 0x2a, 0xec, 0x7d, 0x28, 0x94, + 0x6d, 0x44, 0x9c, 0xfd, 0x4d, 0x70, 0xd9, 0x03, 0x77, 0x90, 0xb4, 0xc6, 0x91, 0xfd, 0x7d, 0x8e, + 0x21, 0x23, 0x58, 0xed, 0xc3, 0x21, 0x8a, 0xd9, 0xc3, 0x11, 0xef, 0x32, 0x80, 0xbc, 0x79, 0xf9, + 0xac, 0xe7, 0x0d, 0x97, 0x9d, 0x8e, 0x14, 0xcd, 0x5b, 0xec, 0xb9, 0x7d, 0xd6, 0x1f, 0xde, 0x42, + 0x47, 0xf6, 0x29, 0x46, 0xa1, 0x8a, 0x95, 0x6c, 0xc5, 0xf7, 0xc7, 0x86, 0xb1, 0x8e, 0x08, 0xe3, + 0x22, 0x36, 0x8c, 0xef, 0x89, 0x0d, 0x6f, 0xf7, 0x79, 0x27, 0x71, 0x96, 0xfb, 0x1c, 0x23, 0x42, + 0xbe, 0x2d, 0x22, 0x8c, 0x21, 0x22, 0x94, 0xd9, 0xa5, 0xca, 0x2a, 0xff, 0xc4, 0xf4, 0x12, 0x99, + 0x1f, 0x05, 0x11, 0x0f, 0x17, 0x58, 0xa5, 0x75, 0x6e, 0xb2, 0x3c, 0xa5, 0x4c, 0x29, 0x65, 0xe7, + 0xb2, 0x58, 0xf2, 0x36, 0x0d, 0x3c, 0x87, 0xa5, 0xef, 0xc6, 0x97, 0xa5, 0xce, 0x0c, 0xd2, 0x0c, + 0x9d, 0x57, 0xbe, 0x82, 0x9c, 0xcb, 0x74, 0xb0, 0xa2, 0xfc, 0x1d, 0x66, 0x59, 0xa0, 0x3f, 0x11, + 0x18, 0xb5, 0x92, 0x44, 0x05, 0xab, 0xb5, 0xb3, 0x88, 0x61, 0xe4, 0x39, 0x9f, 0xcd, 0x08, 0x8b, + 0xb2, 0xe0, 0xd3, 0x95, 0x33, 0x83, 0x34, 0x2e, 0xa9, 0x25, 0xaa, 0x68, 0x84, 0x28, 0x5a, 0x3e, + 0x99, 0x82, 0x45, 0x28, 0x11, 0x17, 0x09, 0x45, 0xc4, 0x5e, 0x2c, 0xe5, 0xab, 0x8d, 0x18, 0x41, + 0xf2, 0x58, 0x1e, 0xa9, 0xa2, 0x3a, 0x3d, 0xb8, 0x32, 0x70, 0x0a, 0x0b, 0x26, 0xf4, 0x27, 0xd4, + 0xf8, 0x38, 0x01, 0x87, 0x74, 0x0e, 0x1d, 0x13, 0x6a, 0xd5, 0xf2, 0xd4, 0xf6, 0x51, 0x66, 0x09, + 0x0e, 0x67, 0xaf, 0x39, 0x89, 0x60, 0xde, 0x8c, 0x7c, 0xa1, 0x3f, 0x5f, 0xc2, 0x06, 0xc6, 0x2c, + 0x16, 0x9a, 0x19, 0xf0, 0x14, 0xb5, 0xa4, 0x9b, 0xd7, 0x05, 0xbc, 0x50, 0xc1, 0x73, 0xda, 0xd7, + 0x71, 0x76, 0x7a, 0xa5, 0x95, 0xf2, 0x05, 0x30, 0x55, 0xbf, 0xc9, 0x6c, 0x45, 0xa3, 0xb6, 0xc5, + 0x80, 0xa9, 0x10, 0xf3, 0xcc, 0x87, 0xd4, 0xf2, 0x26, 0x66, 0x11, 0xbf, 0x01, 0xf4, 0x43, 0xa5, + 0x86, 0x73, 0x50, 0x48, 0x0e, 0x46, 0xeb, 0xcc, 0xbc, 0xc9, 0x32, 0xd3, 0x87, 0x4f, 0xd3, 0xee, + 0x98, 0x7e, 0xb7, 0x6b, 0x76, 0xea, 0x43, 0xa7, 0x3c, 0x13, 0x0c, 0x14, 0xb3, 0x63, 0x76, 0x61, + 0xd4, 0xb0, 0xc2, 0x09, 0xb5, 0xba, 0xb1, 0x48, 0x13, 0x19, 0xa6, 0xde, 0x28, 0xaf, 0x0f, 0x41, + 0xef, 0x25, 0x0f, 0xbf, 0x50, 0xe4, 0x2d, 0xf4, 0xb9, 0xa3, 0x98, 0x91, 0x74, 0xf9, 0x61, 0x39, + 0xa7, 0x81, 0x49, 0x30, 0xa3, 0x1d, 0x2d, 0xc6, 0x63, 0x8c, 0x6c, 0xe1, 0x1d, 0x67, 0x33, 0x9a, + 0x65, 0x64, 0x42, 0x03, 0xcc, 0xb3, 0x81, 0x08, 0xea, 0x46, 0x44, 0x10, 0x23, 0x86, 0x20, 0x83, + 0xb0, 0x90, 0x82, 0xbd, 0x97, 0x49, 0xf0, 0x0b, 0x39, 0xc5, 0xce, 0xab, 0x13, 0x85, 0x34, 0x39, + 0x6a, 0x3c, 0xc6, 0xf0, 0x65, 0x09, 0xb3, 0xa5, 0xa1, 0x5b, 0x49, 0x55, 0xfe, 0x10, 0xcf, 0x28, + 0x18, 0x33, 0xe9, 0x8d, 0x74, 0x5b, 0x99, 0x30, 0xfd, 0xa0, 0x84, 0x58, 0xfa, 0x34, 0x5d, 0x0f, + 0x02, 0xaf, 0x26, 0x4b, 0x33, 0xa5, 0x48, 0x51, 0x1a, 0xf4, 0xc0, 0x54, 0xd5, 0xa0, 0xf0, 0x20, + 0xb1, 0xcd, 0xa1, 0x32, 0x45, 0x52, 0x28, 0x21, 0xec, 0x59, 0xb1, 0xe0, 0x87, 0xcb, 0x77, 0x6f, + 0xb1, 0xee, 0x90, 0x51, 0x4d, 0x85, 0xbd, 0x06, 0x1e, 0x86, 0x53, 0x08, 0x40, 0x56, 0x4c, 0x97, + 0x5c, 0x34, 0xf7, 0x68, 0x9a, 0xa2, 0x7f, 0xd0, 0xfc, 0x43, 0x64, 0x0c, 0xd9, 0x65, 0x3a, 0x22, + 0xa7, 0x68, 0xcd, 0x80, 0xa6, 0x8a, 0xa2, 0x9c, 0x49, 0x4e, 0xb8, 0x71, 0xa6, 0xca, 0x02, 0xcc, + 0xbe, 0xbb, 0x83, 0x7d, 0x0c, 0x81, 0x7f, 0x1f, 0xe7, 0x30, 0x85, 0x42, 0x8f, 0x5f, 0x1f, 0x72, + 0x66, 0x69, 0xdd, 0xa9, 0xa6, 0x16, 0xb0, 0x68, 0x4a, 0x43, 0x0a, 0x79, 0x80, 0x31, 0xd1, 0xe0, + 0xbf, 0xff, 0xf0, 0xe6, 0xb5, 0xa9, 0x34, 0xcd, 0x76, 0xca, 0x9d, 0x96, 0xc4, 0x5c, 0xbf, 0xa8, + 0x69, 0xae, 0x57, 0xd5, 0xd5, 0xc2, 0x07, 0x8f, 0x93, 0x45, 0x36, 0xfd, 0xf8, 0xaa, 0xf4, 0x0a, + 0x2c, 0x93, 0x5f, 0x41, 0xe1, 0x02, 0xe9, 0xf5, 0xd1, 0xd3, 0x5c, 0x13, 0x2c, 0xd4, 0xca, 0x05, + 0x4c, 0x87, 0xd9, 0xf6, 0x7a, 0xad, 0x24, 0x23, 0x4c, 0x78, 0xa6, 0xe4, 0xa2, 0x8e, 0xbb, 0x7c, + 0x63, 0x00, 0x58, 0xa0, 0x02, 0x78, 0x2f, 0x85, 0xef, 0xf7, 0x6d, 0x60, 0x6a, 0x9b, 0x0e, 0x44, + 0x38, 0xb9, 0x6c, 0xa8, 0x8d, 0x70, 0x7a, 0x98, 0xf8, 0xe4, 0x76, 0x4d, 0x63, 0xc1, 0xe7, 0x94, + 0xb5, 0x22, 0x81, 0x2f, 0x74, 0x76, 0xf6, 0x8f, 0xec, 0x35, 0x9d, 0x90, 0x04, 0xf8, 0x51, 0xca, + 0x5f, 0x2b, 0x3c, 0xa4, 0x0e, 0x83, 0xc0, 0x16, 0x62, 0x7b, 0x94, 0xf1, 0x9d, 0xfa, 0x2e, 0x81, + 0x7c, 0xc0, 0x82, 0xb2, 0xc6, 0x66, 0x51, 0x15, 0x97, 0x95, 0x8d, 0x2a, 0x04, 0x09, 0x15, 0x13, + 0x6b, 0xd7, 0x4d, 0xae, 0x55, 0x7d, 0xee, 0xf4, 0xec, 0xbf, 0x34, 0x6c, 0xb0, 0x2d, 0x23, 0x33, + 0xae, 0x04, 0x16, 0x65, 0x17, 0xd1, 0x75, 0x22, 0x59, 0x59, 0x93, 0xc7, 0x71, 0xaa, 0x4e, 0x17, + 0xb9, 0x31, 0x03, 0xbc, 0x3f, 0x80, 0x67, 0x0d, 0xa4, 0xd1, 0x22, 0x73, 0x0b, 0x4b, 0x65, 0xb6, + 0x63, 0xce, 0xe4, 0x21, 0x1f, 0x58, 0x13, 0xe6, 0x0a, 0x50, 0x66, 0x70, 0xc6, 0x68, 0xba, 0x2d, + 0x2e, 0x41, 0x44, 0xf1, 0xb5, 0x09, 0x39, 0x63, 0x0c, 0x39, 0x15, 0x7c, 0x38, 0xdc, 0x8d, 0x52, + 0x32, 0x99, 0xe0, 0x41, 0x06, 0x2e, 0xc3, 0xc1, 0xab, 0x92, 0x2c, 0x7b, 0x0b, 0x76, 0x24, 0x30, + 0x47, 0xfc, 0xd6, 0x2c, 0x95, 0xf5, 0xa6, 0x7d, 0x59, 0xd2, 0xdb, 0xb6, 0x2c, 0x77, 0xc9, 0x1c, + 0x38, 0x1d, 0xe9, 0xf2, 0x9d, 0x8d, 0xdb, 0xb6, 0x98, 0xbf, 0xe0, 0xb7, 0x16, 0xd7, 0x71, 0x3d, + 0xd6, 0xd0, 0xe4, 0x91, 0x49, 0x0d, 0xb5, 0xa1, 0xaa, 0x44, 0xe1, 0x1a, 0x73, 0x13, 0x33, 0x88, + 0x32, 0x20, 0x80, 0x4c, 0x2b, 0x1d, 0x60, 0x14, 0x34, 0x29, 0x0a, 0x56, 0x85, 0x98, 0x12, 0xf6, + 0xa5, 0xc3, 0x19, 0x45, 0x05, 0x51, 0x93, 0xf0, 0x78, 0xd4, 0xc4, 0x6a, 0x95, 0x7c, 0x4a, 0x61, + 0x41, 0x52, 0x81, 0x9f, 0xd6, 0x49, 0x21, 0xf5, 0x0e, 0x39, 0x11, 0xcf, 0x0c, 0x61, 0xed, 0x26, + 0x65, 0xd4, 0x65, 0xa0, 0x21, 0x88, 0x83, 0x2b, 0xf8, 0x6b, 0xb0, 0xce, 0x09, 0x7d, 0xcd, 0x6f, + 0x68, 0x7a, 0x4e, 0xc0, 0xde, 0xd8, 0x79, 0xd9, 0x4d, 0xa1, 0x22, 0xa9, 0xcd, 0xb1, 0x17, 0x5b, + 0x59, 0x4b, 0x21, 0x66, 0x48, 0x33, 0x21, 0x57, 0x2f, 0x37, 0xab, 0x6c, 0xd9, 0xa0, 0xa2, 0x8e, + 0x1f, 0x37, 0x5c, 0x96, 0x05, 0xc2, 0x94, 0xdb, 0x2b, 0xcd, 0xb8, 0x39, 0x32, 0xad, 0xca, 0xe4, + 0xd2, 0x3e, 0x43, 0xbe, 0xc7, 0xd4, 0x4e, 0x6b, 0xc4, 0x98, 0x7b, 0x8d, 0x2e, 0x1f, 0x65, 0xbe, + 0x84, 0xa2, 0xee, 0x6d, 0x6e, 0xbc, 0xc4, 0xe3, 0x91, 0x4b, 0x29, 0x44, 0xcb, 0x8b, 0xd1, 0xb6, + 0x0a, 0xaf, 0x76, 0xb4, 0x0d, 0xed, 0x56, 0xf3, 0x8d, 0xe2, 0xbd, 0x14, 0xba, 0x4b, 0xd9, 0x59, + 0xae, 0xff, 0xb6, 0xa3, 0x28, 0x59, 0xa5, 0x6b, 0xd5, 0x1b, 0x81, 0x94, 0x25, 0xc4, 0x42, 0x16, + 0x49, 0x5d, 0x16, 0x91, 0x39, 0x58, 0xac, 0x2e, 0x71, 0xaa, 0xe8, 0x2b, 0x31, 0xc7, 0xfc, 0xef, + 0xff, 0xfa, 0xcf, 0xff, 0x30, 0x9d, 0xea, 0xf4, 0x7c, 0x5c, 0x5d, 0xa2, 0x49, 0x21, 0xd1, 0x79, + 0xe5, 0xbc, 0x2c, 0xd2, 0x5f, 0x55, 0xf0, 0xde, 0x48, 0xa5, 0x3e, 0x5c, 0xdf, 0x50, 0x68, 0x91, + 0x6d, 0x1b, 0xb3, 0x15, 0xad, 0x02, 0x48, 0x05, 0x31, 0xe8, 0x88, 0xde, 0xb1, 0x64, 0x19, 0xa0, + 0x6c, 0x7d, 0x25, 0xa2, 0x25, 0xd9, 0xe2, 0x6d, 0xb2, 0x45, 0x36, 0x9d, 0x1d, 0xcd, 0xd4, 0x61, + 0x41, 0x1b, 0x86, 0x33, 0x9b, 0x8d, 0x3b, 0xe8, 0x05, 0x81, 0x00, 0x38, 0xdb, 0x05, 0xcf, 0x31, + 0x47, 0x0b, 0x21, 0x38, 0x33, 0x77, 0xf4, 0xa4, 0xbd, 0x3d, 0x5e, 0x1b, 0x52, 0x16, 0x4e, 0x22, + 0xe5, 0x12, 0x04, 0xea, 0xb9, 0x10, 0x69, 0x0c, 0x53, 0x29, 0xd8, 0xc0, 0x94, 0x8e, 0x4d, 0xa7, + 0x40, 0xaf, 0xfe, 0x5a, 0xd1, 0x65, 0x3a, 0xe6, 0xaf, 0xa3, 0x84, 0xb0, 0x2f, 0x58, 0xf6, 0x6f, + 0x52, 0xe5, 0x48, 0x4c, 0xcf, 0x2c, 0x5a, 0xde, 0xe4, 0x8a, 0x78, 0xda, 0xfe, 0xe6, 0x65, 0xc7, + 0xdc, 0x35, 0x3b, 0x02, 0xd2, 0xa6, 0x5c, 0xb1, 0xfe, 0x4c, 0x3a, 0x1d, 0x75, 0xaa, 0xe4, 0xa8, + 0x98, 0xdd, 0x51, 0x47, 0x4f, 0x43, 0xd0, 0x37, 0x1a, 0x7e, 0x41, 0xeb, 0x9f, 0x73, 0x17, 0x90, + 0x95, 0x8b, 0xc9, 0xcb, 0x0e, 0x92, 0x2a, 0xec, 0xd5, 0x2f, 0x31, 0x10, 0x8a, 0x33, 0xb4, 0x7e, + 0x91, 0x12, 0x85, 0xb2, 0xbd, 0x90, 0xa0, 0xe4, 0x8b, 0x82, 0x65, 0x8f, 0xd7, 0x6f, 0x05, 0xbf, + 0x63, 0xd6, 0x14, 0xfc, 0x5c, 0xa3, 0x57, 0x16, 0x24, 0xdb, 0xcf, 0x89, 0xfe, 0x3a, 0x9c, 0xa9, + 0xc2, 0xaf, 0x61, 0x78, 0xef, 0x15, 0xea, 0x76, 0x5c, 0xf5, 0x7b, 0x89, 0xea, 0x0b, 0x89, 0x53, + 0x0d, 0xd1, 0x54, 0x12, 0xf3, 0x58, 0x3c, 0x67, 0xe4, 0x36, 0xc0, 0x12, 0x44, 0x13, 0xe3, 0x3f, + 0xc2, 0x48, 0x8d, 0x90, 0xa3, 0xe8, 0xc4, 0x48, 0x46, 0x09, 0xdb, 0xaf, 0x29, 0x84, 0x07, 0x25, + 0x99, 0xcd, 0x07, 0x6a, 0xd1, 0x05, 0x92, 0x5e, 0x21, 0x9e, 0x15, 0x1d, 0x26, 0x65, 0x63, 0x48, + 0x36, 0x82, 0x8b, 0xb0, 0x4a, 0xc2, 0x40, 0x5a, 0x14, 0xdc, 0xf6, 0x91, 0x96, 0xbd, 0xbd, 0xba, + 0xc4, 0xe6, 0x4c, 0xd1, 0x40, 0xef, 0xf7, 0x40, 0xa8, 0x2e, 0xf7, 0xb0, 0xb0, 0x3c, 0x59, 0x6d, + 0xf2, 0x9f, 0x29, 0x8c, 0x4d, 0x76, 0x98, 0x6c, 0x31, 0x1b, 0x41, 0xda, 0x14, 0x14, 0xda, 0x67, + 0xd5, 0xed, 0x04, 0xde, 0x9d, 0x01, 0x2b, 0x71, 0x28, 0x71, 0x85, 0x0d, 0x56, 0xe1, 0x78, 0x70, + 0x68, 0xdb, 0x5f, 0x6d, 0x1c, 0x1c, 0x52, 0xd7, 0x72, 0xb0, 0xdf, 0x49, 0xbd, 0x0f, 0x32, 0x83, + 0xb4, 0xde, 0x97, 0x16, 0xe7, 0xa3, 0xb0, 0x11, 0x55, 0x17, 0xc0, 0x35, 0x3e, 0xb2, 0x2c, 0x22, + 0x33, 0x88, 0xd3, 0x00, 0x6b, 0x24, 0xd5, 0x64, 0x62, 0x0e, 0x39, 0x84, 0x56, 0x98, 0xb6, 0x2c, + 0xe3, 0xf4, 0x64, 0x4b, 0x9e, 0x01, 0x3b, 0x83, 0xb9, 0x53, 0x72, 0x66, 0x41, 0x50, 0x5a, 0x38, + 0x55, 0x19, 0xa0, 0x3a, 0xba, 0xa7, 0x24, 0x4c, 0x10, 0xc3, 0xe7, 0x9d, 0x32, 0xca, 0xc3, 0x1d, + 0x93, 0x65, 0x63, 0x93, 0xa9, 0x29, 0x35, 0x1b, 0xa7, 0xc6, 0xd6, 0x52, 0x24, 0xdd, 0x8b, 0x2b, + 0x3b, 0x02, 0x58, 0x59, 0x79, 0xc9, 0xf3, 0x6e, 0x80, 0xb5, 0xce, 0x4b, 0x99, 0x89, 0xc1, 0x31, + 0x7a, 0xca, 0x78, 0x2a, 0x2c, 0x2b, 0xcf, 0x19, 0xe4, 0xe9, 0x74, 0x5e, 0xa8, 0xa0, 0x2e, 0x3f, + 0x60, 0x2e, 0x5f, 0x23, 0x41, 0xb6, 0x5d, 0xcb, 0x26, 0x92, 0x52, 0x0d, 0xa0, 0x8d, 0x09, 0x98, + 0x66, 0xb4, 0x32, 0xcd, 0x53, 0xa1, 0x08, 0x0d, 0x56, 0x6b, 0xf0, 0x42, 0x72, 0x48, 0x50, 0x19, + 0x88, 0xe9, 0xcc, 0x82, 0x66, 0xe2, 0x87, 0x0c, 0xf1, 0xb1, 0x1b, 0xc5, 0x98, 0xca, 0x09, 0x5d, + 0x39, 0xfb, 0xa4, 0xb6, 0xca, 0xdf, 0x61, 0xbf, 0x6a, 0x05, 0xc6, 0xd2, 0x28, 0xbc, 0xec, 0x11, + 0xcb, 0x88, 0x56, 0x1a, 0x07, 0xaa, 0xcd, 0x21, 0xb3, 0x8b, 0x47, 0xb9, 0x25, 0x90, 0xcf, 0x57, + 0x9f, 0x21, 0x2a, 0xc0, 0xdb, 0x39, 0x96, 0x1c, 0x0c, 0x9b, 0x7b, 0xef, 0xce, 0xd2, 0x47, 0xee, + 0x6c, 0x81, 0x41, 0xf9, 0xb6, 0xc0, 0xe3, 0x37, 0x1b, 0xd1, 0xb6, 0x9d, 0x36, 0xee, 0xab, 0x58, + 0x22, 0xdf, 0x6a, 0x86, 0x55, 0xeb, 0x77, 0xa3, 0xdf, 0x20, 0x7a, 0x74, 0xbf, 0xd0, 0x65, 0x86, + 0xca, 0x66, 0x4a, 0xb6, 0xa2, 0x5d, 0x02, 0x62, 0xa4, 0x99, 0xb4, 0xcf, 0x34, 0xa3, 0x7e, 0x22, + 0x29, 0x82, 0xd7, 0xbd, 0x90, 0x37, 0xd2, 0x4f, 0xec, 0xaa, 0x96, 0x3c, 0x57, 0x79, 0x0a, 0xd9, + 0x33, 0xe3, 0x02, 0xd6, 0x83, 0x3c, 0xd7, 0x88, 0x99, 0x11, 0xf1, 0x99, 0x99, 0xcf, 0xb3, 0x1b, + 0xdb, 0x95, 0xc3, 0x97, 0x29, 0xa9, 0xca, 0x1b, 0x38, 0x66, 0x4b, 0xb2, 0xdc, 0x3e, 0x25, 0xd9, + 0xbb, 0x1b, 0xf6, 0x3e, 0x85, 0xe4, 0x36, 0x15, 0xcb, 0x22, 0x33, 0xb4, 0x9b, 0xe7, 0x51, 0x65, + 0x04, 0xd4, 0x28, 0x84, 0xe7, 0xca, 0x26, 0x18, 0x2b, 0x65, 0x33, 0x1f, 0x4a, 0x5b, 0x36, 0x16, + 0x1a, 0x47, 0xca, 0x80, 0xab, 0xee, 0x31, 0x73, 0x90, 0xaa, 0xa2, 0x23, 0x8b, 0x2e, 0x43, 0x16, + 0x6c, 0x02, 0xec, 0xfb, 0x17, 0xb8, 0xbb, 0x7b, 0x64, 0x02, 0x75, 0x46, 0xdd, 0xfc, 0xe6, 0xcc, + 0x65, 0x3c, 0x4a, 0x62, 0x36, 0x29, 0x65, 0x44, 0x3e, 0xe6, 0x54, 0x0f, 0x43, 0xf0, 0x69, 0x59, + 0x90, 0x36, 0xd3, 0xd1, 0x1b, 0x36, 0x52, 0xb0, 0x9c, 0xae, 0x75, 0x2b, 0xdf, 0xf5, 0x4d, 0x58, + 0x53, 0x27, 0x76, 0x7c, 0x78, 0x0f, 0xf7, 0xf3, 0xb1, 0x92, 0xff, 0xfa, 0x01, 0x0b, 0xe2, 0xff, + 0x0b, 0x3c, 0xaa, 0x50, 0xac, 0xb3, 0x61, 0xee, 0x82, 0xfd, 0x48, 0x97, 0x2a, 0x5d, 0xc2, 0x2a, + 0x57, 0x41, 0x0b, 0x8a, 0xd8, 0x0e, 0xb1, 0x57, 0xca, 0xb1, 0x6f, 0xba, 0x55, 0x6c, 0xdc, 0x98, + 0x27, 0x95, 0x74, 0x48, 0xcf, 0x30, 0x82, 0xcf, 0x80, 0x2d, 0x2f, 0xe4, 0x51, 0xbb, 0x45, 0xf0, + 0x26, 0x4d, 0xdd, 0x25, 0xad, 0xcb, 0x51, 0x40, 0xc1, 0x85, 0x76, 0xde, 0xe6, 0xd9, 0xe1, 0x03, + 0x42, 0xad, 0x87, 0x49, 0xae, 0xaa, 0x36, 0x88, 0xb5, 0x0c, 0x1c, 0x1e, 0x4e, 0xc6, 0x55, 0xb6, + 0xe7, 0x0d, 0xcb, 0xd6, 0xde, 0x28, 0xc0, 0xc8, 0x1a, 0xe1, 0x2b, 0x26, 0xdd, 0x3b, 0xe0, 0x2b, + 0x0f, 0x32, 0x60, 0xcb, 0x82, 0x80, 0x48, 0x9f, 0x5e, 0xea, 0x0b, 0x12, 0xd8, 0xc7, 0x1d, 0x0f, + 0xbc, 0x70, 0xa7, 0xa3, 0xc2, 0x74, 0x84, 0x88, 0x90, 0xc1, 0x3b, 0xcc, 0x51, 0xab, 0x33, 0xf4, + 0xad, 0xba, 0x59, 0xd8, 0xf8, 0xa1, 0x4d, 0x73, 0x83, 0xe9, 0xd9, 0x5b, 0x90, 0xd0, 0x47, 0x29, + 0xb8, 0x13, 0x6a, 0x3a, 0xf0, 0x5a, 0x07, 0x30, 0x01, 0x01, 0x89, 0x45, 0x2c, 0x60, 0xf9, 0xaa, + 0x41, 0x64, 0x0a, 0x93, 0x76, 0xbe, 0xe6, 0x75, 0x13, 0x6d, 0x52, 0x4a, 0xe5, 0x0c, 0x08, 0xe5, + 0xc6, 0x31, 0x8b, 0xc0, 0xf2, 0x00, 0x84, 0xfb, 0x44, 0x59, 0x81, 0x00, 0x96, 0x13, 0x60, 0xba, + 0x7c, 0xb0, 0x75, 0xad, 0x6a, 0xc3, 0xcb, 0x48, 0x91, 0xa1, 0xde, 0xae, 0x36, 0x79, 0x15, 0xd6, + 0x5c, 0x1c, 0x56, 0x1a, 0x28, 0x4f, 0x0b, 0xa3, 0x4a, 0x65, 0x44, 0x9d, 0x14, 0x55, 0xac, 0xb9, + 0x80, 0xd0, 0x92, 0x81, 0xa5, 0x04, 0x97, 0x8a, 0xf2, 0xc9, 0x35, 0xc8, 0x21, 0x0d, 0xca, 0xf9, + 0x8a, 0x1a, 0x23, 0x2d, 0x14, 0xa8, 0x4b, 0x11, 0x89, 0x95, 0xba, 0xcf, 0x3e, 0xaf, 0x4c, 0xc9, + 0x3d, 0xd3, 0xff, 0x66, 0x95, 0xae, 0xd7, 0x9f, 0xfd, 0x4d, 0x87, 0x89, 0x3d, 0xe6, 0xfa, 0xb3, + 0x53, 0x33, 0xc1, 0x98, 0xde, 0x42, 0x28, 0x56, 0x2e, 0x1c, 0x63, 0xe9, 0xa7, 0x5e, 0x97, 0x62, + 0xc0, 0xf2, 0x46, 0x19, 0x2c, 0x41, 0x89, 0xa8, 0xde, 0x6d, 0xc3, 0xe0, 0x1d, 0x1c, 0x9d, 0x32, + 0x3a, 0x5b, 0x0c, 0x8b, 0xc2, 0x08, 0x0c, 0xef, 0x0e, 0xb7, 0x65, 0x4d, 0xe7, 0x51, 0x02, 0x5d, + 0x15, 0x4a, 0x1d, 0xb5, 0x6f, 0x32, 0x66, 0xf2, 0x18, 0x08, 0x8d, 0x2a, 0x46, 0x7b, 0x12, 0xac, + 0x81, 0xdb, 0xc3, 0x66, 0x2d, 0xe5, 0x81, 0x25, 0x36, 0x07, 0x00, 0xac, 0x34, 0x79, 0xb3, 0x87, + 0x85, 0x83, 0xc9, 0x93, 0xc7, 0x3a, 0x1d, 0xd5, 0xb2, 0x6c, 0x8e, 0x48, 0x2e, 0x63, 0x4a, 0xb0, + 0xa4, 0x6c, 0x2b, 0x09, 0x54, 0xaf, 0xa5, 0x9b, 0x96, 0x01, 0x33, 0xb5, 0x0b, 0xc8, 0xb0, 0x13, + 0x5a, 0x61, 0x8d, 0xdc, 0x9f, 0xe5, 0x8b, 0xb5, 0xee, 0x0a, 0x9e, 0x00, 0x98, 0x2d, 0x17, 0x91, + 0xca, 0xba, 0x21, 0xc7, 0x48, 0x6b, 0x84, 0x2d, 0x4c, 0x13, 0x36, 0xa7, 0x66, 0x20, 0x84, 0x81, + 0xea, 0xb7, 0x9d, 0x26, 0xf4, 0x71, 0xac, 0xf4, 0xf2, 0x1e, 0xe0, 0x72, 0x88, 0x04, 0x8e, 0x2d, + 0x04, 0x3e, 0xa6, 0x22, 0x9c, 0x3e, 0x67, 0xd1, 0xc5, 0x2d, 0x0d, 0x71, 0x7b, 0x3e, 0xe3, 0x61, + 0x92, 0xdf, 0xed, 0x7e, 0xb3, 0xda, 0x76, 0x42, 0xb4, 0xee, 0xe2, 0xdc, 0xcf, 0x39, 0x0c, 0xe6, + 0xd4, 0xe2, 0x5a, 0x79, 0xe2, 0x5f, 0x3e, 0x25, 0x01, 0x5b, 0x50, 0x22, 0x81, 0x02, 0x09, 0x4e, + 0xe5, 0x59, 0x5d, 0x79, 0xf0, 0xaa, 0x47, 0x17, 0x35, 0xbc, 0xca, 0xe7, 0xd3, 0x98, 0x06, 0x97, + 0xc2, 0xd3, 0xdc, 0xe4, 0xc0, 0xe2, 0xea, 0xa2, 0xcf, 0x8a, 0xdd, 0xdd, 0x59, 0x2c, 0x50, 0x47, + 0x19, 0xba, 0x3a, 0xac, 0x0e, 0x15, 0xb5, 0xc5, 0x90, 0x1b, 0xcb, 0x6c, 0x01, 0xc3, 0x50, 0x31, + 0x41, 0x64, 0xce, 0x44, 0xc0, 0xc1, 0xd9, 0x60, 0x94, 0x26, 0x82, 0x0d, 0x40, 0x8e, 0xa1, 0x9f, + 0x3d, 0xd4, 0x91, 0xba, 0x58, 0xe3, 0xe4, 0xd2, 0x91, 0x52, 0xf9, 0x48, 0xa0, 0xb7, 0x39, 0xb2, + 0xac, 0x46, 0xd6, 0x18, 0x2d, 0xff, 0xbe, 0x43, 0x8b, 0xa5, 0x0d, 0x4a, 0x03, 0x9a, 0x5b, 0x40, + 0xcf, 0xcf, 0xfb, 0x4a, 0x4b, 0x03, 0xea, 0xe5, 0xb3, 0xad, 0xd2, 0x19, 0x87, 0x65, 0x43, 0xe6, + 0x79, 0x03, 0xfe, 0xe2, 0x26, 0x73, 0xe5, 0x01, 0x8a, 0x55, 0x1c, 0x75, 0x54, 0x39, 0x8c, 0xf8, + 0x50, 0xcd, 0x42, 0x02, 0x3b, 0x09, 0x98, 0xad, 0x9d, 0x01, 0x1d, 0xe8, 0xea, 0x8e, 0x3e, 0xe8, + 0xca, 0x40, 0x6f, 0xd9, 0x24, 0x1e, 0x2f, 0x81, 0x94, 0x61, 0xed, 0x1e, 0x6f, 0x41, 0xa6, 0xcc, + 0x66, 0xf3, 0xab, 0x19, 0xa7, 0xbd, 0xc1, 0x21, 0x64, 0x79, 0x95, 0xb1, 0x82, 0x73, 0x63, 0x14, + 0x4f, 0xce, 0xce, 0xce, 0x4c, 0x79, 0x56, 0x98, 0x81, 0x89, 0xb3, 0x60, 0x9b, 0xfe, 0x0a, 0xb6, + 0xd3, 0xf4, 0x45, 0xba, 0xa0, 0xeb, 0xbf, 0x96, 0x42, 0xd8, 0x4d, 0x62, 0xac, 0xc4, 0x89, 0x61, + 0x1a, 0xc3, 0x3e, 0x61, 0x10, 0x7f, 0x15, 0x68, 0x4d, 0xab, 0x24, 0x30, 0xac, 0x3a, 0x79, 0x53, + 0xe2, 0x69, 0x9d, 0xaf, 0xd5, 0xf7, 0x3e, 0x08, 0x79, 0xe5, 0xe5, 0xeb, 0xd6, 0xcf, 0x6b, 0xc8, + 0x8f, 0x9f, 0x8d, 0x1c, 0x97, 0xbf, 0xe5, 0x79, 0x8f, 0x76, 0xfe, 0x7b, 0x9e, 0x44, 0x34, 0x75, + 0xe2, 0x4c, 0x56, 0x3c, 0x2b, 0xc2, 0x55, 0xa9, 0x84, 0x82, 0x70, 0xe5, 0x43, 0x74, 0x23, 0x9f, + 0x23, 0x0f, 0x04, 0x2b, 0xd0, 0xd0, 0x33, 0x3e, 0x60, 0x59, 0x9d, 0xfa, 0x1c, 0x7d, 0xcf, 0x28, + 0xbf, 0x1c, 0xd1, 0x78, 0xad, 0xaf, 0x18, 0x15, 0x57, 0x0a, 0xe9, 0xd6, 0xfb, 0xd8, 0x0d, 0xda, + 0xf2, 0xa3, 0x3c, 0xf9, 0xe2, 0x27, 0x75, 0xc7, 0xa8, 0xe6, 0xfa, 0xf2, 0xfb, 0xdf, 0xda, 0x10, + 0x49, 0xc7, 0xf2, 0x73, 0xf5, 0x26, 0x78, 0xf9, 0xd5, 0xf7, 0xea, 0xe2, 0x86, 0x9f, 0xdf, 0xf9, + 0x08, 0x1a, 0xe8, 0x4e, 0x60, 0x5f, 0x51, 0xdf, 0x40, 0xa0, 0xcf, 0x13, 0xfc, 0x35, 0x8b, 0xbc, + 0xfe, 0x61, 0xd7, 0xaf, 0x97, 0x3f, 0x7a, 0x9e, 0xa6, 0xba, 0x31, 0x7e, 0xfb, 0xa5, 0xf4, 0xfa, + 0x50, 0xbb, 0x85, 0x0b, 0xca, 0x3a, 0x14, 0x3f, 0x9f, 0x0a, 0xf2, 0x1d, 0x35, 0x4b, 0xbf, 0xb6, + 0xf2, 0xe6, 0xb7, 0x36, 0xc4, 0x1b, 0xf5, 0xdf, 0x5f, 0x99, 0x1b, 0x29, 0xcc, 0xf3, 0x8f, 0xe2, + 0x46, 0x84, 0xa9, 0x34, 0x19, 0x72, 0x51, 0x74, 0x8f, 0x60, 0x00, 0xe9, 0x99, 0x69, 0xfa, 0x05, + 0x86, 0x56, 0xf7, 0xd3, 0x2f, 0x3f, 0xff, 0x7a, 0xd5, 0x9d, 0x38, 0xa6, 0x21, 0xf3, 0x70, 0xdd, + 0x6b, 0xfd, 0xfb, 0x2f, 0x37, 0xab, 0xde, 0xda, 0xbe, 0xb3, 0x7e, 0xc9, 0x3a, 0xaa, 0x09, 0x63, + 0x68, 0x70, 0x8a, 0x22, 0xf4, 0x11, 0x36, 0x2c, 0x17, 0x1e, 0x69, 0x1c, 0xf1, 0x34, 0xf0, 0x32, + 0x0d, 0x2f, 0x4a, 0x17, 0x38, 0x2a, 0x57, 0x22, 0x56, 0xf9, 0xad, 0x92, 0x6a, 0x12, 0xf0, 0x3c, + 0x49, 0x2c, 0x73, 0xf3, 0x5b, 0x26, 0x43, 0xff, 0x24, 0x07, 0xf0, 0x00, 0x0e, 0x5c, 0x90, 0x70, + 0x5a, 0xae, 0x9d, 0xd8, 0xab, 0xb6, 0xba, 0x1b, 0xae, 0x8c, 0xbf, 0xe0, 0xc9, 0xef, 0x53, 0xbc, + 0x84, 0xe7, 0x77, 0xf0, 0xdc, 0x5e, 0xa5, 0xc3, 0xd1, 0xd0, 0x51, 0x1d, 0x7e, 0x81, 0x1d, 0xdb, + 0xc7, 0x27, 0x94, 0x5c, 0xd3, 0xf2, 0xf8, 0xd7, 0xd8, 0xb1, 0x6d, 0x3c, 0x9f, 0x6f, 0x86, 0xf2, + 0x39, 0xba, 0xac, 0xe2, 0x44, 0x93, 0x02, 0x23, 0x2a, 0xe6, 0xa2, 0xe8, 0x7d, 0x2c, 0x7b, 0x30, + 0xd0, 0xd9, 0xc2, 0x9b, 0xe2, 0xd8, 0x94, 0x4a, 0x37, 0xd9, 0x58, 0xe6, 0x3e, 0xfe, 0x65, 0x82, + 0xa4, 0xa2, 0x4c, 0x21, 0xfe, 0xfc, 0x53, 0x6c, 0xe7, 0xc8, 0xff, 0x25, 0x7e, 0x23, 0xfc, 0xa8, + 0x0a, 0x3d, 0x7a, 0xec, 0xde, 0xd4, 0x2e, 0x06, 0x15, 0x94, 0x23, 0xaf, 0xc4, 0x34, 0xce, 0xb4, + 0x4a, 0xea, 0xeb, 0xab, 0x81, 0xe9, 0xb9, 0x87, 0xa6, 0x53, 0x88, 0x7a, 0x80, 0x43, 0xf4, 0x75, + 0x8e, 0x0f, 0x52, 0x6b, 0xc1, 0x04, 0xd0, 0xf1, 0x18, 0xb6, 0x0e, 0x36, 0x0e, 0xcc, 0x6b, 0x14, + 0x98, 0x98, 0xa3, 0x99, 0xf5, 0x31, 0xb0, 0x25, 0x2f, 0xe1, 0x59, 0x1d, 0x90, 0x75, 0xf1, 0xca, + 0x05, 0x84, 0xc5, 0xb8, 0x5c, 0x11, 0x42, 0xd7, 0x6e, 0x8a, 0xd7, 0xd0, 0x53, 0xa3, 0x1d, 0x5a, + 0x83, 0x6b, 0xdf, 0xbf, 0x0e, 0xe8, 0x75, 0xcc, 0xf2, 0x85, 0xa2, 0x12, 0xf1, 0x2a, 0x93, 0x54, + 0xd0, 0x81, 0x5c, 0x25, 0x28, 0x35, 0xca, 0x7b, 0x40, 0xf7, 0x1f, 0x16, 0xd1, 0x72, 0x9d, 0x4e, + 0xa7, 0xaf, 0xa6, 0x14, 0x25, 0xa9, 0x25, 0x7f, 0x92, 0x85, 0xb8, 0x67, 0x89, 0xb6, 0xfd, 0x06, + 0x69, 0xc1, 0x79, 0x5b, 0xd8, 0x7d, 0x81, 0xa2, 0xa5, 0x98, 0x8d, 0xf7, 0x40, 0xaa, 0x7c, 0xc2, + 0xfe, 0x56, 0x98, 0xa8, 0x0e, 0xa5, 0x1b, 0x69, 0xaa, 0xaa, 0x02, 0x94, 0xbd, 0xa4, 0x63, 0xb2, + 0x48, 0xc0, 0x81, 0x38, 0xe5, 0x1f, 0xf3, 0xd4, 0xf4, 0xa2, 0x90, 0xbd, 0x5a, 0x4d, 0x53, 0x53, + 0xd1, 0x32, 0x4d, 0xaa, 0x47, 0xcb, 0xb4, 0x1a, 0xfd, 0x8d, 0x99, 0x7c, 0x5e, 0xd4, 0x74, 0x33, + 0xc1, 0xe7, 0x98, 0x4f, 0x90, 0x89, 0x0c, 0xf9, 0xf1, 0x0a, 0x5b, 0x2e, 0xe5, 0x3b, 0x81, 0x94, + 0xf3, 0x2d, 0x2c, 0x42, 0x8d, 0x2a, 0x86, 0x6e, 0x11, 0xcb, 0xa1, 0xba, 0x52, 0xce, 0x82, 0x62, + 0x20, 0xc6, 0xa7, 0x8c, 0xca, 0x14, 0x79, 0xc7, 0xb3, 0x87, 0x85, 0x89, 0x62, 0x4d, 0x26, 0x63, + 0xc2, 0xa3, 0x24, 0x16, 0xb4, 0x23, 0x4c, 0x16, 0x11, 0x98, 0xcb, 0xea, 0xe5, 0x19, 0xfb, 0xcc, + 0xaa, 0x85, 0xb7, 0x09, 0x30, 0xcc, 0xd4, 0xf3, 0xaa, 0xd5, 0x0d, 0xdb, 0x97, 0x9d, 0x25, 0x3f, + 0x5d, 0x29, 0x3d, 0x31, 0x35, 0x87, 0x81, 0xba, 0xe8, 0x02, 0x58, 0x89, 0x11, 0x45, 0x89, 0xba, + 0xe5, 0x07, 0x59, 0xf5, 0x64, 0x4a, 0xd6, 0x5e, 0x1d, 0xae, 0xcf, 0x49, 0xed, 0x95, 0x7c, 0x6f, + 0xd1, 0x0e, 0x73, 0x56, 0x33, 0x2a, 0xa6, 0x3c, 0xf2, 0x4d, 0x3c, 0xf0, 0x5d, 0xdb, 0xae, 0x98, + 0x52, 0x10, 0x5c, 0xf4, 0xaa, 0xfc, 0xcb, 0x99, 0x4a, 0xc3, 0x2d, 0x08, 0x65, 0x40, 0x69, 0xff, + 0x06, 0xa1, 0xb9, 0x61, 0x76, 0x20, 0xf7, 0xdc, 0x54, 0x7f, 0x81, 0x2a, 0x13, 0x0f, 0x6e, 0xf3, + 0x59, 0x2b, 0x6e, 0x09, 0xfc, 0x89, 0x18, 0x64, 0xa6, 0xf2, 0x26, 0x5a, 0x45, 0x17, 0xc8, 0xde, + 0x1e, 0x81, 0xd7, 0xea, 0x26, 0x96, 0x01, 0xeb, 0x09, 0x20, 0x08, 0x21, 0x56, 0xad, 0x8b, 0xf4, + 0x17, 0x90, 0xd2, 0x31, 0x92, 0x24, 0x4b, 0x95, 0x45, 0xac, 0xed, 0x96, 0x0b, 0xa6, 0xc6, 0x93, + 0x2c, 0x0d, 0x03, 0x7d, 0xe7, 0xb0, 0xdb, 0x0d, 0x23, 0xf6, 0x9b, 0x4c, 0x34, 0x16, 0xd1, 0x38, + 0x01, 0x7e, 0x62, 0x4d, 0xae, 0x4b, 0x7e, 0x23, 0xb7, 0xdd, 0x24, 0x1e, 0x65, 0x5d, 0x01, 0xd9, + 0x3e, 0x85, 0x8c, 0xb5, 0x9b, 0xf6, 0xfa, 0x27, 0xfa, 0x69, 0x16, 0x33, 0xe8, 0x31, 0x8d, 0x27, + 0x33, 0x72, 0x7b, 0x80, 0x77, 0x02, 0xcd, 0x93, 0xe3, 0x43, 0xcf, 0x33, 0x4f, 0x4b, 0x6b, 0x75, + 0xf5, 0x9f, 0x21, 0xc0, 0xc2, 0x92, 0xc1, 0x59, 0xc2, 0x09, 0x58, 0xd1, 0xfc, 0xbe, 0x25, 0xfe, + 0x85, 0x81, 0x69, 0xef, 0xf4, 0xc9, 0xb6, 0xbf, 0x4e, 0x00, 0xef, 0x8c, 0x67, 0x51, 0x7c, 0x6d, + 0x48, 0x25, 0x08, 0xcc, 0xc2, 0x6c, 0x98, 0xba, 0x1f, 0x7f, 0x12, 0x58, 0x16, 0x1e, 0x0f, 0x90, + 0xd1, 0x63, 0x2b, 0x32, 0x85, 0x88, 0xc0, 0xf8, 0x2d, 0xb3, 0x7a, 0xa6, 0xd1, 0x3e, 0xe9, 0xc9, + 0x7d, 0xb3, 0xfa, 0xdb, 0x66, 0x95, 0x27, 0x3d, 0xa9, 0xcf, 0x1a, 0x3c, 0x34, 0xab, 0xb6, 0x62, + 0x9e, 0x6c, 0x9e, 0xee, 0xed, 0x3e, 0xfd, 0xf6, 0xa9, 0x37, 0x6c, 0xa0, 0xb4, 0x89, 0x38, 0x73, + 0xc0, 0xb2, 0x07, 0x37, 0x41, 0x03, 0x44, 0xd6, 0xcb, 0x9d, 0xc0, 0xbf, 0x0b, 0xf1, 0x3f, 0x32, + 0x73, 0x31, 0x22, 0x2f, 0x42, 0x00, 0x00 }; diff --git a/src/main.cpp b/src/main.cpp index a021a39c..d58d1967 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,7 +22,7 @@ #include "Sys/SysModModel.h" #include "Sys/SysModNetwork.h" #include "Sys/SysModPins.h" -#include "User/UserModWLEDDiscovery.h" +#include "User/UserModInstances.h" #ifdef APPMOD_LEDS #include "App/AppModLeds.h" #include "App/AppModLedFixGen.h" @@ -52,7 +52,7 @@ void setup() { ui = new SysModUI(); sys = new SysModSystem(); pins = new SysModPins(); - wledDiscoveryMod = new UserModWLEDDiscovery(); + instances = new UserModInstances(); #ifdef APPMOD_LEDS lds = new AppModLeds(); lfg = new AppModLedFixGen(); @@ -97,7 +97,7 @@ void setup() { #ifdef USERMOD_HA mdls->add(hamod); #endif - mdls->add(wledDiscoveryMod); + mdls->add(instances); //do not add mdls itself as it does setup and loop for itself!!! (it is the orchestrator) mdls->setup();