From 4afd430d491cdad668fc773d2dc21f9ea90f0654 Mon Sep 17 00:00:00 2001 From: Ewoud Date: Sat, 10 Feb 2024 12:51:28 +0100 Subject: [PATCH] VarFun refactor: only one functions per variable General - change from multiple var funs (uiFun, chFun, loopFun, valueFun) to one *with funType parameter - save 1% of flash code (now 68.5) SysModUI: - add FunIDs enum with function types - extend UFun with function parameter - remove CFun - remove cFunctions - initVarAndUpdate: run varFun for valueFun and changeFun - loopfun: call varFun with f_loopFun parameter - init functions: remove other functions parameters - processJson: call varFun with f_UIFun parameter (and dummy rowNr) --- data/index.js | 8 +- src/App/AppEffects.h | 64 +- src/App/AppFixture.cpp | 4 +- src/App/AppFixture.h | 2 +- src/App/AppLeds.cpp | 6 +- src/App/AppModFixture.h | 213 ++-- src/App/AppModFixtureGen.h | 115 +- src/App/AppModLeds.h | 277 ++--- src/Sys/SysModFiles.cpp | 109 +- src/Sys/SysModModel.cpp | 77 +- src/Sys/SysModNetwork.cpp | 49 +- src/Sys/SysModPins.cpp | 144 +-- src/Sys/SysModPins.h | 2 +- src/Sys/SysModPrint.cpp | 34 +- src/Sys/SysModSystem.cpp | 134 ++- src/Sys/SysModUI.cpp | 126 +-- src/Sys/SysModUI.h | 121 ++- src/Sys/SysModWeb.cpp | 166 +-- src/SysModules.cpp | 84 +- src/User/UserModArtNet.h | 51 +- src/User/UserModDDP.h | 51 +- src/User/UserModE131.h | 122 ++- src/User/UserModInstances.h | 201 ++-- src/html_ui.h | 1964 +++++++++++++++++------------------ src/testOutput.txt | 4 +- 25 files changed, 2255 insertions(+), 1873 deletions(-) diff --git a/data/index.js b/data/index.js index ca1af967..36fc9b10 100644 --- a/data/index.js +++ b/data/index.js @@ -424,7 +424,7 @@ function createHTML(json, parentNode = null, rowNr = UINT8_MAX) { } //don't call uiFun on table rows (the table header calls uiFun and propagate this to table row columns in changeHTML when needed - e.g. select) - if (variable.uiFun == null || variable.uiFun == -2) { //request processed + if (variable.fun == null || variable.fun == -2) { //request processed variable.chk = "gen2"; changeHTML(variable, variable, rowNr); // set the variable with its own changed values } @@ -433,12 +433,12 @@ function createHTML(json, parentNode = null, rowNr = UINT8_MAX) { changeHTML(variable, {"value":variable.value, "chk":"gen1"}, rowNr); //set only the value //call ui Functionality, if defined (to set label, comment, select etc) - if (variable.uiFun >= 0) { //>=0 as element in var + if (variable.fun >= 0) { //>=0 as element in var uiFunCommands.push(variable.id); if (uiFunCommands.length > 8) { //every 8 vars (to respect responseDoc size) check WS_EVT_DATA info flushUIFunCommands(); } - variable.uiFun = -1; //requested + variable.fun = -1; //requested } } @@ -576,7 +576,7 @@ function receiveData(json) { let variable = findVar(key); if (variable) { - variable.uiFun = -2; // request processed + variable.fun = -2; // request processed value.chk = "uiFun"; changeHTML(variable, value); //changeHTML will find the rownumbers if needed diff --git a/src/App/AppEffects.h b/src/App/AppEffects.h index 3b5164df..9ed42c0e 100644 --- a/src/App/AppEffects.h +++ b/src/App/AppEffects.h @@ -79,21 +79,27 @@ class Effect { virtual void controls(JsonObject parentVar, Leds &leds) {} void addPalette(JsonObject parentVar, uint8_t value, uint8_t rowNr) { - JsonObject currentVar = ui->initSelect(parentVar, "pal", value, rowNr, false, [](JsonObject var) { //uiFun. - web->addResponse(var["id"], "label", "Palette"); - web->addResponse(var["id"], "comment", "Colors"); - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("CloudColors"); - select.add("LavaColors"); - select.add("OceanColors"); - select.add("ForestColors"); - select.add("RainbowColors"); - select.add("RainbowStripeColors"); - select.add("PartyColors"); - select.add("HeatColors"); - }, nullptr, nullptr, 2, [this](JsonObject var, uint8_t rowNr) { //valueFun + JsonObject currentVar = ui->initSelect(parentVar, "pal", value, rowNr, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: mdl->setValue(var, 4, rowNr); //4 is default - }); + return true; + case f_UIFun: { + web->addResponse(var["id"], "label", "Palette"); + web->addResponse(var["id"], "comment", "Colors"); + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("CloudColors"); + select.add("LavaColors"); + select.add("OceanColors"); + select.add("ForestColors"); + select.add("RainbowColors"); + select.add("RainbowStripeColors"); + select.add("PartyColors"); + select.add("HeatColors"); + return true; + } + default: return false; + }}); + //tbd: check if memory is freed! currentVar["stage"] = true; } @@ -191,9 +197,13 @@ class RunningEffect: public Effect { // leds[leds.nrOfLeds -1 - pos2] = CHSV( gHue, 255, 192); //make sure the right physical leds get their value } void controls(JsonObject parentVar, Leds &leds) { - ui->initSlider(parentVar, "BPM", 60, leds.rowNr, 0, 255, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "in BPM!"); - }); + ui->initSlider(parentVar, "BPM", 60, leds.rowNr, 0, 255, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "in BPM!"); + return true; + default: return false; + }}); + //tbd: check if memory is freed! ui->initSlider(parentVar, "fade", 128, leds.rowNr); } }; @@ -696,14 +706,18 @@ class ScrollingText2D: public Effect { void controls(JsonObject parentVar, Leds &leds) { ui->initText(parentVar, "text", "StarMod", leds.rowNr); ui->initSlider(parentVar, "Speed", 128, leds.rowNr); - ui->initSelect(parentVar, "font", 0, leds.rowNr, false, [](JsonObject var) { //uiFun. - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("4x6"); - select.add("5x8"); - select.add("5x12"); - select.add("6x8"); - select.add("7x9"); - }); + ui->initSelect(parentVar, "font", 0, leds.rowNr, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: { + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("4x6"); + select.add("5x8"); + select.add("5x12"); + select.add("6x8"); + select.add("7x9"); + return true; + } + default: return false; + }}); } }; diff --git a/src/App/AppFixture.cpp b/src/App/AppFixture.cpp index 0b1e9806..65d0f74b 100644 --- a/src/App/AppFixture.cpp +++ b/src/App/AppFixture.cpp @@ -25,7 +25,7 @@ for (std::vector::iterator leds=ledsList.begin(); leds!=ledsList.end(); ++leds) { //vectors really gone now? - for (std::vector> ::iterator physMap=leds->mappingTable.begin(); physMap!=leds->mappingTable.end(); physMap++) + for (std::vector> ::iterator physMap=leds->mappingTable.begin(); physMap!=leds->mappingTable.end(); ++physMap) physMap->clear(); leds->mappingTable.clear(); } @@ -302,7 +302,7 @@ // uint16_t x=0; //indexV // uint16_t y=0; - // // for (std::vector> ::iterator physMap=leds->mappingTable.begin(); physMap!=leds->mappingTable.end(); physMap++) { + // // for (std::vector> ::iterator physMap=leds->mappingTable.begin(); physMap!=leds->mappingTable.end(); ++physMap) { // for (std::vectorphysMap:leds->mappingTable) { // if (physMap.size()) { // USER_PRINTF("ledV %d mapping: firstLedP: %d #ledsP: %d", x, physMap[0], physMap.size()); diff --git a/src/App/AppFixture.h b/src/App/AppFixture.h index eb80ab45..6eda9281 100644 --- a/src/App/AppFixture.h +++ b/src/App/AppFixture.h @@ -33,7 +33,7 @@ enum Projections p_Multiply, p_Kaleidoscope, p_Fun, - count + p_count }; diff --git a/src/App/AppLeds.cpp b/src/App/AppLeds.cpp index fa62c645..5042d700 100644 --- a/src/App/AppLeds.cpp +++ b/src/App/AppLeds.cpp @@ -55,7 +55,7 @@ CRGB Leds::getPixelColor(uint16_t indexV) { void Leds::fadeToBlackBy(uint8_t fadeBy) { //fade2black for old start to endpos - for (std::vector>::iterator physMap=mappingTable.begin(); physMap!=mappingTable.end(); physMap++) { + for (std::vector>::iterator physMap=mappingTable.begin(); physMap!=mappingTable.end(); ++physMap) { for (uint16_t indexP:*physMap) { CRGB oldValue = fixture->ledsP[indexP]; fixture->ledsP[indexP].nscale8(255-fadeBy); //this overrides the old value @@ -66,7 +66,7 @@ void Leds::fadeToBlackBy(uint8_t fadeBy) { void Leds::fill_solid(const struct CRGB& color) { //fade2black for old start to endpos - for (std::vector> ::iterator physMap=mappingTable.begin(); physMap!=mappingTable.end(); physMap++) { + for (std::vector> ::iterator physMap=mappingTable.begin(); physMap!=mappingTable.end(); ++physMap) { for (uint16_t indexP:*physMap) { fixture->ledsP[indexP] = blend(color, fixture->ledsP[indexP], 128); } @@ -79,7 +79,7 @@ void Leds::fill_rainbow(uint8_t initialhue, uint8_t deltahue) { hsv.val = 255; hsv.sat = 240; - for (std::vector> ::iterator physMap=mappingTable.begin(); physMap!=mappingTable.end(); physMap++) { + for (std::vector> ::iterator physMap=mappingTable.begin(); physMap!=mappingTable.end(); ++physMap) { for (uint16_t indexP:*physMap) { fixture->ledsP[indexP] = blend(hsv, fixture->ledsP[indexP], 128); } diff --git a/src/App/AppModFixture.h b/src/App/AppModFixture.h index ff181df2..22fdafef 100644 --- a/src/App/AppModFixture.h +++ b/src/App/AppModFixture.h @@ -21,106 +21,153 @@ class AppModFixture:public SysModule { parentVar = ui->initAppMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -1000; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - JsonObject currentVar = ui->initCheckBox(parentVar, "on", true, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "On/Off"); - }); + JsonObject currentVar = ui->initCheckBox(parentVar, "on", true, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "On/Off"); + return true; + default: return false; + }}); currentVar["stage"] = true; //logarithmic slider (10) - currentVar = ui->initSlider(parentVar, "bri", 10, UINT8_MAX, 0, 255, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Brightness"); - }, [](JsonObject var, uint8_t) { //chFun - uint8_t bri = var["value"]; + currentVar = ui->initSlider(parentVar, "bri", 10, UINT8_MAX, 0, 255, false , [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: + web->addResponse(var["id"], "label", "Brightness"); + return true; - uint8_t result = linearToLogarithm(var, bri); + case f_ChangeFun: { + uint8_t bri = var["value"]; - FastLED.setBrightness(result); + uint8_t result = linearToLogarithm(var, bri); - USER_PRINTF("Set Brightness to %d -> b:%d r:%d\n", var["value"].as(), bri, result); - }); + FastLED.setBrightness(result); + + USER_PRINTF("Set Brightness to %d -> b:%d r:%d\n", var["value"].as(), bri, result); + return true; + } + default: return false; + }}); currentVar["log"] = true; //logarithmic: not needed when using FastLED setCorrection currentVar["stage"] = true; //these values override model.json??? - ui->initCanvas(parentVar, "pview", UINT16_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Preview"); - web->addResponse(var["id"], "comment", "Shows the fixture"); - // web->addResponse(var["id"], "comment", "Click to enlarge"); - }, nullptr, [this](JsonObject var, uint8_t rowNr) { //loopFun - - var["interval"] = max(lds->fixture.nrOfLeds * web->ws->count()/200, 16U)*10; //interval in ms * 10, not too fast //from cs to ms - - web->sendDataWs([this](AsyncWebSocketMessageBuffer * wsBuf) { - uint8_t* buffer; - - buffer = wsBuf->get(); - - // send leds preview to clients - for (size_t i = 0; i < lds->fixture.nrOfLeds; i++) - { - buffer[i*3+5] = lds->fixture.ledsP[i].red; - buffer[i*3+5+1] = lds->fixture.ledsP[i].green; - buffer[i*3+5+2] = lds->fixture.ledsP[i].blue; + ui->initCanvas(parentVar, "pview", UINT16_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Preview"); + web->addResponse(var["id"], "comment", "Shows the fixture"); + // web->addResponse(var["id"], "comment", "Click to enlarge"); + return true; + case f_LoopFun: { + var["interval"] = max(lds->fixture.nrOfLeds * web->ws->count()/200, 16U)*10; //interval in ms * 10, not too fast //from cs to ms + + web->sendDataWs([this](AsyncWebSocketMessageBuffer * wsBuf) { + uint8_t* buffer; + + buffer = wsBuf->get(); + + // send leds preview to clients + for (size_t i = 0; i < lds->fixture.nrOfLeds; i++) + { + buffer[i*3+5] = lds->fixture.ledsP[i].red; + buffer[i*3+5+1] = lds->fixture.ledsP[i].green; + buffer[i*3+5+2] = lds->fixture.ledsP[i].blue; + } + //new values + buffer[0] = 1; //userFun id + buffer[1] = lds->fixture.head.x; + buffer[2] = lds->fixture.head.y; + buffer[3] = lds->fixture.head.y; + + }, lds->fixture.nrOfLeds * 3 + 5, true); + return true; + } + default: return false; + }}); + + ui->initSelect(parentVar, "fixture", lds->fixture.fixtureNr, UINT8_MAX, false ,[](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: + { + web->addResponse(var["id"], "comment", "Fixture to display effect on"); + JsonArray select = web->addResponseA(var["id"], "options"); + files->dirToJson(select, true, "D"); //only files containing D (1D,2D,3D), alphabetically, only looking for D not very destinctive though + + // ui needs to load the file also initially + char fileName[32] = ""; + if (files->seqNrToName(fileName, var["value"])) { + web->addResponse("pview", "file", JsonString(fileName, JsonString::Copied)); } - //new values - buffer[0] = 1; //userFun id - buffer[1] = lds->fixture.head.x; - buffer[2] = lds->fixture.head.y; - buffer[3] = lds->fixture.head.y; - - }, lds->fixture.nrOfLeds * 3 + 5, true); - }); - - ui->initSelect(parentVar, "fixture", lds->fixture.fixtureNr, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "Fixture to display effect on"); - JsonArray select = web->addResponseA(var["id"], "options"); - files->dirToJson(select, true, "D"); //only files containing D (1D,2D,3D), alphabetically, only looking for D not very destinctive though - - // ui needs to load the file also initially - char fileName[32] = ""; - if (files->seqNrToName(fileName, var["value"])) { - web->addResponse("pview", "file", JsonString(fileName, JsonString::Copied)); + return true; } - }, [this](JsonObject var, uint8_t) { //chFun - lds->fixture.fixtureNr = var["value"]; - lds->doMap = true; + case f_ChangeFun: + { + lds->fixture.fixtureNr = var["value"]; + lds->doMap = true; - char fileName[32] = ""; - if (files->seqNrToName(fileName, lds->fixture.fixtureNr)) { - //send to pview a message to get file filename - web->addResponse("pview", "file", JsonString(fileName, JsonString::Copied)); + char fileName[32] = ""; + if (files->seqNrToName(fileName, lds->fixture.fixtureNr)) { + //send to pview a message to get file filename + web->addResponse("pview", "file", JsonString(fileName, JsonString::Copied)); + } + return true; } - }); //fixture - - ui->initCoord3D(parentVar, "fixSize", lds->fixture.size, UINT8_MAX, 0, UINT16_MAX, true, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Size"); - // web->addResponse(var["id"], "value", fixture.size); - }); - - ui->initNumber(parentVar, "fixCount", lds->fixture.nrOfLeds, 0, UINT16_MAX, true, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Count"); - web->addResponseV(var["id"], "comment", "Max %d", NUM_LEDS_Max); - // web->addResponse(var["id"], "value", fixture.nrOfLeds); - }); - - ui->initNumber(parentVar, "fps", lds->fps, 1, 999, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "Frames per second"); - }, [this](JsonObject var, uint8_t) { //chFun - lds->fps = var["value"]; - }); - ui->initText(parentVar, "realFps", nullptr, UINT8_MAX, 10, true, [this](JsonObject var) { //uiFun - web->addResponseV(var["id"], "comment", "f(%d leds)", lds->fixture.nrOfLeds); - }); + default: return false; + }}); //fixture + + ui->initCoord3D(parentVar, "fixSize", lds->fixture.size, UINT8_MAX, 0, UINT16_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Size"); + // web->addResponse(var["id"], "value", fixture.size); + return true; + default: return false; + }}); + + ui->initNumber(parentVar, "fixCount", lds->fixture.nrOfLeds, 0, UINT16_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Count"); + web->addResponseV(var["id"], "comment", "Max %d", NUM_LEDS_Max); + // web->addResponse(var["id"], "value", fixture.nrOfLeds); + return true; + default: return false; + }}); + + ui->initNumber(parentVar, "fps", lds->fps, 1, 999, false , [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: + web->addResponse(var["id"], "comment", "Frames per second"); + return true; + + case f_ChangeFun: + lds->fps = var["value"]; + return true; + + default: return false; + }}); + + ui->initText(parentVar, "realFps", nullptr, UINT8_MAX, 10, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponseV(var["id"], "comment", "f(%d leds)", lds->fixture.nrOfLeds); + return true; + default: return false; + }}); #ifdef STARMOD_USERMOD_WLEDAUDIO - ui->initCheckBox(parentVar, "mHead", false, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Moving heads"); - web->addResponse(var["id"], "comment", "Move on GEQ"); - }, [this](JsonObject var, uint8_t) { //chFun - if (!var["value"]) - lds->fixture.head = {0,0,0}; - }); + ui->initCheckBox(parentVar, "mHead", false, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: + web->addResponse(var["id"], "label", "Moving heads"); + web->addResponse(var["id"], "comment", "Move on GEQ"); + return true; + + case f_ChangeFun: + if (!var["value"]) + lds->fixture.head = {0,0,0}; + return true; + + default: return false; + }}); #endif } diff --git a/src/App/AppModFixtureGen.h b/src/App/AppModFixtureGen.h index 8220694b..6c295ede 100644 --- a/src/App/AppModFixtureGen.h +++ b/src/App/AppModFixtureGen.h @@ -535,40 +535,52 @@ class AppModFixtureGen:public SysModule { parentVar = ui->initUserMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -1200; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - ui->initSelect(parentVar, "fixtureGen", 0, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Fixture"); - web->addResponse(var["id"], "comment", "Type of fixture"); - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("1DSpiral"); //0 - select.add("2DMatrix"); //1 - select.add("2DRing"); //2 - select.add("2DRings241"); //3 - select.add("2DCloud"); //4 - select.add("2DWall"); //5 - select.add("2DWheel"); //6 - select.add("2DHexagon"); //7 - select.add("3DCone"); //8 - select.add("3DSideCube"); //9 - select.add("3DCube"); //10 - select.add("3DGlobe WIP"); //11 - select.add("3DGeodesicDome WIP"); //12 - }, [this](JsonObject var, uint8_t) { //chFun - fixtureGenChFun(var); - - web->addResponse("details", "var", var); - }); //fixtureGen - - ui->initText(parentVar, "pinList", "16", UINT8_MAX, 32, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "One or more e.g. 12,13,14"); - }); - - ui->initButton(parentVar, "generate", false, nullptr - , [this](JsonObject var, uint8_t) { //chFun - generateChFun(var); - - //reload fixture select - ui->processUiFun("fixture"); //in AppModFixture sends data to ws... - }); + ui->initSelect(parentVar, "fixtureGen", 0, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: { + web->addResponse(var["id"], "label", "Fixture"); + web->addResponse(var["id"], "comment", "Type of fixture"); + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("1DSpiral"); //0 + select.add("2DMatrix"); //1 + select.add("2DRing"); //2 + select.add("2DRings241"); //3 + select.add("2DCloud"); //4 + select.add("2DWall"); //5 + select.add("2DWheel"); //6 + select.add("2DHexagon"); //7 + select.add("3DCone"); //8 + select.add("3DSideCube"); //9 + select.add("3DCube"); //10 + select.add("3DGlobe WIP"); //11 + select.add("3DGeodesicDome WIP"); //12 + return true; + } + case f_ChangeFun: + fixtureGenChFun(var); + + web->addResponse("details", "var", var); + return true; + + default: return false; + }}); //fixtureGen + + ui->initText(parentVar, "pinList", "16", UINT8_MAX, 32, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "One or more e.g. 12,13,14"); + return true; + default: return false; + }}); + + ui->initButton(parentVar, "generate", false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ChangeFun: + generateChFun(var); + + //reload fixture select + ui->processUiFun("fixture"); //in AppModFixture sends data to ws... + return true; + default: return false; + }}); } @@ -597,7 +609,7 @@ class AppModFixtureGen:public SysModule { //generate dynamic html for fixture controls void fixtureGenChFun(JsonObject var) { JsonObject parentVar = mdl->findVar(var["id"]); - parentVar.remove("n"); //tbd: we should also remove the uiFun and chFun !! + parentVar.remove("n"); //tbd: we should also remove the varFun !! uint8_t value = var["value"]; if (value == f_1DSpiral) { @@ -624,18 +636,27 @@ class AppModFixtureGen:public SysModule { ui->initNumber(parentVar, "height", 8, 1, 255); - ui->initSelect(parentVar, "firstLedX", 0, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "WIP"); - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("Left"); //0 - select.add("Right"); //1 - }); - ui->initSelect(parentVar, "firstLedY", 0, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "WIP"); - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("Top"); //0 - select.add("Bottom"); //1 - }); + ui->initSelect(parentVar, "firstLedX", 0, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: { + web->addResponse(var["id"], "comment", "WIP"); + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("Left"); //0 + select.add("Right"); //1 + return true; + } + default: return false; + }}); + + ui->initSelect(parentVar, "firstLedY", 0, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: { + web->addResponse(var["id"], "comment", "WIP"); + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("Top"); //0 + select.add("Bottom"); //1 + return true; + } + default: return false; + }}); ui->initCheckBox(parentVar, "serpentine"); } diff --git a/src/App/AppModLeds.h b/src/App/AppModLeds.h index cc24a47c..5c23bae1 100644 --- a/src/App/AppModLeds.h +++ b/src/App/AppModLeds.h @@ -75,143 +75,174 @@ class AppModLeds:public SysModule { JsonObject currentVar; - JsonObject tableVar = ui->initTable(parentVar, "fxTbl", nullptr, false, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Effects"); - web->addResponse(var["id"], "comment", "List of effects"); - }, [this](JsonObject var, uint8_t rowNr) { //chFun - JsonObject responseObject = web->getResponseObject(); - if (responseObject[var["id"].as()]["value"] == "addRow") { - rowNr = fixture.ledsList.size(); - USER_PRINTF("chFun addRow %s %d\n", var["id"].as(), rowNr); - - responseObject["addRow"]["id"] = var["id"]; - responseObject["addRow"]["rowNr"] = rowNr; - // responseObject["addRow"].createNestedArray("value"); - // JsonArray row = responseObject["updRow"]["insTbl"].createNestedArray(rowNrC); - // addTblRow(responseObject["updRow"]["value"], instance); - - Leds leds = Leds(); - leds.rowNr = rowNr; - leds.fixture = &fixture; - leds.projectionNr = 2; - leds.fx = 14; - fixture.ledsList.push_back(leds); - } - if (responseObject[var["id"].as()]["value"] == "delRow") { - USER_PRINTF("chFun delrow %s %d\n", var["id"].as(), rowNr); - //fade to black - if (rowNr ()) - // mdl->setValue(columnVar, fixture.ledsList[rowNr].fx, rowNr); - //remove from ui - responseObject["delRow"]["id"] = var["id"]; - responseObject["delRow"]["rowNr"] = rowNr; + JsonObject tableVar = ui->initTable(parentVar, "fxTbl", nullptr, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Effects"); + web->addResponse(var["id"], "comment", "List of effects"); + return true; + case f_ChangeFun: { + JsonObject responseObject = web->getResponseObject(); + if (responseObject[var["id"].as()]["value"] == "addRow") { + rowNr = fixture.ledsList.size(); + USER_PRINTF("chFun addRow %s[%d]\n", var["id"].as(), rowNr); + + responseObject["addRow"]["id"] = var["id"]; + responseObject["addRow"]["rowNr"] = rowNr; + // responseObject["addRow"].createNestedArray("value"); + // JsonArray row = responseObject["updRow"]["insTbl"].createNestedArray(rowNrC); + // addTblRow(responseObject["updRow"]["value"], instance); + + Leds leds = Leds(); + leds.rowNr = rowNr; + leds.fixture = &fixture; + leds.projectionNr = 2; + leds.fx = 14; + fixture.ledsList.push_back(leds); + } + if (responseObject[var["id"].as()]["value"] == "delRow") { + USER_PRINTF("chFun delrow %s[%d]\n", var["id"].as(), rowNr); + //fade to black + if (rowNr ()) + // mdl->setValue(columnVar, fixture.ledsList[rowNr].fx, rowNr); + //remove from ui + responseObject["delRow"]["id"] = var["id"]; + responseObject["delRow"]["rowNr"] = rowNr; + } } + return true; } - }); - - currentVar = ui->initSelect(tableVar, "fx", 0, UINT8_MAX, false, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Effect"); - web->addResponse(var["id"], "comment", "Effect to show"); - JsonArray select = web->addResponseA(var["id"], "options"); - for (Effect *effect:effects.effects) { - select.add(effect->name()); + default: return false; + }}); + + currentVar = ui->initSelect(tableVar, "fx", 0, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, fixture.ledsList[rowNr].fx, rowNr); + return true; + case f_UIFun: { + web->addResponse(var["id"], "label", "Effect"); + web->addResponse(var["id"], "comment", "Effect to show"); + JsonArray select = web->addResponseA(var["id"], "options"); + for (Effect *effect:effects.effects) { + select.add(effect->name()); + } + return true; } - }, [this](JsonObject var, uint8_t rowNr) { //chFun - if (rowNr < fixture.ledsList.size()) { - doMap = effects.setEffect(fixture.ledsList[rowNr], var, rowNr); + case f_ChangeFun: + if (rowNr < fixture.ledsList.size()) { + doMap = effects.setEffect(fixture.ledsList[rowNr], var, rowNr); - web->addResponse("details", "var", var); - web->addResponse("details", "rowNr", rowNr); + web->addResponse("details", "var", var); + web->addResponse("details", "rowNr", rowNr); - } - }, nullptr, fixture.ledsList.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, fixture.ledsList[rowNr].fx, rowNr); - }); + } + return true; + default: return false; + }}, fixture.ledsList.size()); currentVar["stage"] = true; - currentVar = ui->initSelect(tableVar, "pro", 2, UINT8_MAX, false, [](JsonObject var) { //uiFun. - web->addResponse(var["id"], "label", "Projection"); - web->addResponse(var["id"], "comment", "How to project fx"); - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("None"); // 0 - select.add("Random"); // 1 - select.add("Distance from point"); //2 - select.add("Distance from center"); //3 - select.add("Mirror"); //4 - select.add("Reverse"); //5 - select.add("Multiply"); //6 - select.add("Kaleidoscope"); //7 - select.add("Fun"); //8 - - }, [this](JsonObject var, uint8_t rowNr) { //chFun - if (rowNr < fixture.ledsList.size()) { - fixture.ledsList[rowNr].projectionNr = mdl->getValue(var, rowNr); - USER_PRINTF("pro chFun %d %d %d\n", fixture.ledsList[rowNr].projectionNr, rowNr, fixture.ledsList.size()); - - doMap = true; + currentVar = ui->initSelect(tableVar, "pro", 2, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, fixture.ledsList[rowNr].projectionNr, rowNr); + return true; + case f_UIFun: { + web->addResponse(var["id"], "label", "Projection"); + web->addResponse(var["id"], "comment", "How to project fx"); + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("None"); // 0 + select.add("Random"); // 1 + select.add("Distance from point"); //2 + select.add("Distance from center"); //3 + select.add("Mirror"); //4 + select.add("Reverse"); //5 + select.add("Multiply"); //6 + select.add("Kaleidoscope"); //7 + select.add("Fun"); //8 + return true; } + case f_ChangeFun: + if (rowNr < fixture.ledsList.size()) { + fixture.ledsList[rowNr].projectionNr = mdl->getValue(var, rowNr); + USER_PRINTF("chFun pro[%d] <- %d (%d)\n", rowNr, fixture.ledsList[rowNr].projectionNr, fixture.ledsList.size()); - }, nullptr, fixture.ledsList.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, fixture.ledsList[rowNr].projectionNr, rowNr); - }); + doMap = true; + } + return true; + default: return false; + }}, fixture.ledsList.size()); currentVar["stage"] = true; - ui->initCoord3D(tableVar, "fxStart", fixture.ledsList[0].startPos, UINT8_MAX, 0, NUM_LEDS_Max, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Start"); - }, [this](JsonObject var, uint8_t rowNr) { //chFun - if (rowNr < fixture.ledsList.size()) { - fixture.ledsList[rowNr].startPos = mdl->getValue(var, rowNr).as(); - - USER_PRINTF("fxStart[%d] chFun %d %d %d\n", rowNr, fixture.ledsList[rowNr].startPos.x, fixture.ledsList[rowNr].startPos.y, fixture.ledsList[rowNr].startPos.z); - - fixture.ledsList[rowNr].fadeToBlackBy(); - } - else { - USER_PRINTF("fxStart chfun rownr not in range %d > %d\n", rowNr, fixture.ledsList.size()); - } - - doMap = true; - }, nullptr, fixture.ledsList.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - USER_PRINTF("fxStart[%d] valueFun %d %d %d\n", rowNr, fixture.ledsList[rowNr].startPos.x, fixture.ledsList[rowNr].startPos.y, fixture.ledsList[rowNr].startPos.z); - mdl->setValue(var, fixture.ledsList[rowNr].startPos, rowNr); - }); - - ui->initCoord3D(tableVar, "fxEnd", fixture.ledsList[0].endPos, UINT8_MAX, 0, NUM_LEDS_Max, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "End"); - }, [this](JsonObject var, uint8_t rowNr) { //chFun - if (rowNr < fixture.ledsList.size()) { - fixture.ledsList[rowNr].endPos = mdl->getValue(var, rowNr).as(); + ui->initCoord3D(tableVar, "fxStart", fixture.ledsList[0].startPos, UINT8_MAX, 0, NUM_LEDS_Max, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + USER_PRINTF("fxStart[%d] valueFun %d,%d,%d\n", rowNr, fixture.ledsList[rowNr].startPos.x, fixture.ledsList[rowNr].startPos.y, fixture.ledsList[rowNr].startPos.z); + mdl->setValue(var, fixture.ledsList[rowNr].startPos, rowNr); + return true; + case f_UIFun: + web->addResponse(var["id"], "label", "Start"); + return true; + case f_ChangeFun: + if (rowNr < fixture.ledsList.size()) { + fixture.ledsList[rowNr].startPos = mdl->getValue(var, rowNr).as(); + + USER_PRINTF("fxStart[%d] chFun %d,%d,%d\n", rowNr, fixture.ledsList[rowNr].startPos.x, fixture.ledsList[rowNr].startPos.y, fixture.ledsList[rowNr].startPos.z); + + fixture.ledsList[rowNr].fadeToBlackBy(); + } + else { + USER_PRINTF("fxStart[%d] chfun rownr not in range > %d\n", rowNr, fixture.ledsList.size()); + } - USER_PRINTF("fxEnd[%d] chFun %d %d %d\n", rowNr, fixture.ledsList[rowNr].endPos.x, fixture.ledsList[rowNr].endPos.y, fixture.ledsList[rowNr].endPos.z); + doMap = true; + return true; + default: return false; + }}, fixture.ledsList.size()); + + ui->initCoord3D(tableVar, "fxEnd", fixture.ledsList[0].endPos, UINT8_MAX, 0, NUM_LEDS_Max, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, fixture.ledsList[rowNr].endPos, rowNr); + USER_PRINTF("fxEnd[%d] valueFun %d,%d,%d\n", rowNr, fixture.ledsList[rowNr].endPos.x, fixture.ledsList[rowNr].endPos.y, fixture.ledsList[rowNr].endPos.z); + return true; + case f_UIFun: + web->addResponse(var["id"], "label", "End"); + return true; + case f_ChangeFun: + if (rowNr < fixture.ledsList.size()) { + fixture.ledsList[rowNr].endPos = mdl->getValue(var, rowNr).as(); + + USER_PRINTF("fxEnd[%d] chFun %d,%d,%d\n", rowNr, fixture.ledsList[rowNr].endPos.x, fixture.ledsList[rowNr].endPos.y, fixture.ledsList[rowNr].endPos.z); + + fixture.ledsList[rowNr].fadeToBlackBy(); + } + else { + USER_PRINTF("fxEnd[%d] chfun rownr not in range > %d\n", rowNr, fixture.ledsList.size()); + } - fixture.ledsList[rowNr].fadeToBlackBy(); - } - else { - USER_PRINTF("fxEnd chfun rownr not in range %d > %d\n", rowNr, fixture.ledsList.size()); + doMap = true; + return true; + default: return false; + }}, fixture.ledsList.size()); + + ui->initText(tableVar, "fxSize", nullptr, 0, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Size"); + return true; + default: return false; + }}); + + ui->initSelect(parentVar, "fxLayout", 0, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: { + web->addResponse(var["id"], "label", "Layout"); + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("□"); //0 + select.add("="); //1 + select.add("||"); //2 + select.add("+"); //3 + return true; } - - doMap = true; - }, nullptr, fixture.ledsList.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, fixture.ledsList[rowNr].endPos, rowNr); - USER_PRINTF("fxEnd[%d] valueFun %d %d %d\n", rowNr, fixture.ledsList[rowNr].endPos.x, fixture.ledsList[rowNr].endPos.y, fixture.ledsList[rowNr].endPos.z); - }); - - ui->initText(tableVar, "fxSize", nullptr, 0, 32, true, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Size"); - }); - - ui->initSelect(parentVar, "fxLayout", 0, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Layout"); - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("□"); //0 - select.add("="); //1 - select.add("||"); //2 - select.add("+"); //3 - }, [this](JsonObject var, uint8_t) { //chFun - }); //fixtureGen + default: return false; + }}); //fixtureGen #ifdef STARMOD_USERMOD_E131 // if (e131mod->isEnabled) { diff --git a/src/Sys/SysModFiles.cpp b/src/Sys/SysModFiles.cpp index 722e2f06..1f32fd33 100644 --- a/src/Sys/SysModFiles.cpp +++ b/src/Sys/SysModFiles.cpp @@ -33,53 +33,76 @@ void SysModFiles::setup() { parentVar = ui->initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -2000; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - JsonObject tableVar = ui->initTable(parentVar, "fileTbl", nullptr, false, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Files"); - web->addResponse(var["id"], "comment", "List of files"); - JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value - dirToJson(rows); - }, [this](JsonObject var, uint8_t rowNr) { //chFun - JsonObject responseObject = web->getResponseObject(); - if (responseObject[var["id"].as()]["value"] == "delRow") { - // if (strcmp(var["value"], "delRow") == 0) { - USER_PRINTF("fileTbl chFun %s %d %s\n", var["id"].as(), rowNr, var["value"].as().c_str()); - if (rowNr != UINT8_MAX) { - // call uiFun of tbl to fill responseObject with files - ui->uFunctions[var["uiFun"]](var); - //trick to get the table values tbd: use column values - JsonObject responseObject = web->getResponseObject(); - JsonArray row = responseObject["fileTbl"]["value"][rowNr]; - if (!row.isNull()) { - const char * fileName = row[0]; //first column - print->printJson("delete file", row); - this->removeFiles(fileName, false); + JsonObject tableVar = ui->initTable(parentVar, "fileTbl", nullptr, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: + { + web->addResponse(var["id"], "label", "Files"); + web->addResponse(var["id"], "comment", "List of files"); + JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value + dirToJson(rows); + return true; + } + case f_ChangeFun: + { + JsonObject responseObject = web->getResponseObject(); + if (responseObject[var["id"].as()]["value"] == "delRow") { + // if (strcmp(var["value"], "delRow") == 0) { + USER_PRINTF("chFun delRow %s[%d] = %s\n", var["id"].as(), rowNr, var["value"].as().c_str()); + if (rowNr != UINT8_MAX) { + // call uiFun of tbl to fill responseObject with files + ui->varFunctions[var["fun"]](var, UINT8_MAX, f_UIFun); + //trick to get the table values tbd: use column values + JsonObject responseObject = web->getResponseObject(); + JsonArray row = responseObject["fileTbl"]["value"][rowNr]; + if (!row.isNull()) { + const char * fileName = row[0]; //first column + print->printJson("delete file", row); + this->removeFiles(fileName, false); + } } + else { + USER_PRINTF(" no rowNr!!\n"); + } + print->printJson(" ", var); } - else { - USER_PRINTF(" no rowNr!!\n"); + else if (responseObject[var["id"].as()]["value"] == "addRow") { + USER_PRINTF("chFun addRow %s[%d] = %s\n", var["id"].as(), rowNr, var["value"].as().c_str()); + //add a row with all defaults } - print->printJson(" ", var); - } - else if (responseObject[var["id"].as()]["value"] == "addRow") { - USER_PRINTF("fileTbl chFun %s %d %s\n", var["id"].as(), rowNr, var["value"].as().c_str()); - //add a row with all defaults + return true; } - }); - - ui->initText(tableVar, "flName", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Name"); - }); - ui->initNumber(tableVar, "flSize", UINT16_MAX, 0, UINT16_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Size (B)"); - }); - ui->initURL(tableVar, "flLink", nullptr, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Show"); - }); - - ui->initText(parentVar, "drsize", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponseV(var["id"], "value", "%d / %d B", files->usedBytes(), files->totalBytes()); - web->addResponse(var["id"], "label", "Total FS size"); - }); + default: return false; + }}); + + ui->initText(tableVar, "flName", nullptr, UINT8_MAX, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Name"); + return true; + default: return false; + }}); + + ui->initNumber(tableVar, "flSize", UINT16_MAX, 0, UINT16_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Size (B)"); + return true; + default: return false; + }}); + + ui->initURL(tableVar, "flLink", nullptr, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Show"); + return true; + default: return false; + }}); + + ui->initText(parentVar, "drsize", nullptr, UINT8_MAX, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponseV(var["id"], "value", "%d / %d B", files->usedBytes(), files->totalBytes()); + web->addResponse(var["id"], "label", "Total FS size"); + return true; + default: return false; + }}); } void SysModFiles::loop(){ diff --git a/src/Sys/SysModModel.cpp b/src/Sys/SysModModel.cpp index 99038dbd..8c0b3b0c 100644 --- a/src/Sys/SysModModel.cpp +++ b/src/Sys/SysModModel.cpp @@ -38,26 +38,41 @@ void SysModModel::setup() { parentVar = ui->initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -4000; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - ui->initText(parentVar, "mSize", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Size"); - }); - - ui->initButton(parentVar, "saveModel", false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "Write to model.json (manual save only currently)"); - }, [this](JsonObject var, uint8_t) { //chFun - doWriteModel = true; - }); - - ui->initCheckBox(parentVar, "showObsolete", doShowObsolete, UINT8_MAX, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "Show in UI (refresh)"); - }, [this](JsonObject var, uint8_t) { //chFun - doShowObsolete = var["value"]; - }); - - ui->initButton(parentVar, "deleteObsolete", false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Delete obsolete variables"); - web->addResponse(var["id"], "comment", "WIP"); - }); + ui->initText(parentVar, "mSize", nullptr, UINT8_MAX, 32, true + , [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Size"); + return true; + default: return false; + }}); + + ui->initButton(parentVar, "saveModel", false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "Write to model.json (manual save only currently)"); + return true; + case f_ChangeFun: + doWriteModel = true; + return true; + default: return false; + }}); + + ui->initCheckBox(parentVar, "showObsolete", doShowObsolete, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "Show in UI (refresh)"); + return true; + case f_ChangeFun: + doShowObsolete = var["value"]; + return true; + default: return false; + }}); + + ui->initButton(parentVar, "deleteObsolete", false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Delete obsolete variables"); + web->addResponse(var["id"], "comment", "WIP"); + return true; + default: return false; + }}); } void SysModModel::loop() { @@ -76,8 +91,7 @@ void SysModModel::setup() { cleanUpModel(model->as(), false, true);//remove if var["o"] is negative (not cleanedUp) and remove ro values JsonRDWS jrdws("/model.json", "w"); //open fileName for deserialize - jrdws.addExclusion("uiFun"); - jrdws.addExclusion("chFun"); + jrdws.addExclusion("fun"); jrdws.writeJsonDocToFile(model); // print->printJson("Write model", *model); //this shows the model before exclusion @@ -209,17 +223,18 @@ void SysModModel::callChFunAndWs(JsonObject var, uint8_t rowNr, const char * val if (var["stage"]) ui->stageVarChanged = true; - if (!var["chFun"].isNull()) {//isNull needed here! - size_t funNr = var["chFun"]; - if (funNr < ui->cFunctions.size()) { - USER_PRINTF("chFun %s", var["id"].as()); - if (rowNr!=UINT8_MAX) - USER_PRINTF("[%d]", rowNr); - USER_PRINTF(" <- %s\n", var["value"].as().c_str()); - ui->cFunctions[funNr](var, rowNr==UINT8_MAX?0:rowNr); //send rowNr = 0 if no rowNr + if (!var["fun"].isNull()) {//isNull needed here! + size_t funNr = var["fun"]; + if (funNr < ui->varFunctions.size()) { + if (ui->varFunctions[funNr](var, rowNr==UINT8_MAX?0:rowNr, f_ChangeFun)) { //send rowNr = 0 if no rowNr + USER_PRINTF("chFun v2 !!!! %s", var["id"].as()); + if (rowNr!=UINT8_MAX) + USER_PRINTF("[%d]", rowNr); + USER_PRINTF(" <- %s\n", var["value"].as().c_str()); + } } else - USER_PRINTF("dev callChFunAndWs function nr %s outside bounds %d >= %d\n", var["id"].as(), funNr, ui->cFunctions.size()); + USER_PRINTF("dev callChFunAndWs function nr %s outside bounds %d >= %d\n", var["id"].as(), funNr, ui->varFunctions.size()); } web->sendDataWs(responseObject); diff --git a/src/Sys/SysModNetwork.cpp b/src/Sys/SysModNetwork.cpp index 3358a7ac..01cb3ea8 100644 --- a/src/Sys/SysModNetwork.cpp +++ b/src/Sys/SysModNetwork.cpp @@ -25,7 +25,7 @@ void SysModNetwork::setup() { parentVar = ui->initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -2500; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - // JsonObject tableVar = ui->initTable(parentVar, "wfTbl", nullptr, false, [this](JsonObject var) { //uiFun ro false: create and delete row possible + // JsonObject tableVar = ui->initTable(parentVar, "wfTbl", nullptr, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { //varFun ro false: create and delete row possible // web->addResponse(var["id"], "label", "Wifi"); // web->addResponse(var["id"], "comment", "List of defined and available Wifi APs"); // }); @@ -36,22 +36,37 @@ void SysModNetwork::setup() { // var["value"][0] = ""; // }); - ui->initPassword(parentVar, "pw", "", 32, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Password"); - }); - - ui->initButton(parentVar, "connect", false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "Force reconnect (loose current connection)"); - }, [this](JsonObject var, uint8_t) { //chFun - // mdl->doWriteModel = true; //saves the model - forceReconnect = true; - }); - ui->initText(parentVar, "nwstatus", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Status"); - }); - ui->initText(parentVar, "rssi", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Wifi signal"); - }); + ui->initPassword(parentVar, "pw", "", 32, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Password"); + return true; + default: return false; + }}); + + ui->initButton(parentVar, "connect", false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "Force reconnect (loose current connection)"); + return true; + case f_ChangeFun: + // mdl->doWriteModel = true; //saves the model + forceReconnect = true; + return true; + default: return false; + }}); + + ui->initText(parentVar, "nwstatus", nullptr, UINT8_MAX, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Status"); + return true; + default: return false; + }}); + + ui->initText(parentVar, "rssi", nullptr, UINT8_MAX, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Wifi signal"); + return true; + default: return false; + }}); } void SysModNetwork::loop() { diff --git a/src/Sys/SysModPins.cpp b/src/Sys/SysModPins.cpp index 21223a6b..b3d1d557 100644 --- a/src/Sys/SysModPins.cpp +++ b/src/Sys/SysModPins.cpp @@ -35,59 +35,82 @@ void SysModPins::setup() { if (parentVar["o"] > -1000) parentVar["o"] = -2200; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) //show table of allocated pins - JsonObject tableVar = ui->initTable(parentVar, "pinTbl", nullptr, true, [](JsonObject var) { //uiFun ro true: no update and delete - web->addResponse(var["id"], "label", "Pins"); - web->addResponse(var["id"], "comment", "List of pins"); - JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value - uint8_t pinNr = 0; - for (PinObject pinObject:pinObjects) { - if (strcmp(pinObject.owner, "") != 0) { - JsonArray row = rows.createNestedArray(); - row.add(pinNr); - row.add(pinObject.owner); - row.add(pinObject.details); + JsonObject tableVar = ui->initTable(parentVar, "pinTbl", nullptr, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + { + web->addResponse(var["id"], "label", "Pins"); + web->addResponse(var["id"], "comment", "List of pins"); + JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value + uint8_t pinNr = 0; + for (PinObject pinObject:pinObjects) { + if (strcmp(pinObject.owner, "") != 0) { + JsonArray row = rows.createNestedArray(); + row.add(pinNr); + row.add(pinObject.owner); + row.add(pinObject.details); + } + pinNr++; } - pinNr++; + return true; } - }); - ui->initNumber(tableVar, "pinNr", UINT16_MAX, 0, NUM_PINS, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Pin"); - }); - ui->initText(tableVar, "pinOwner", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Owner"); - }); - ui->initText(tableVar, "pinDetails", nullptr, UINT8_MAX, 256, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Details"); - }); - - ui->initCanvas(parentVar, "board", UINT16_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Board layout"); - web->addResponse(var["id"], "comment", "WIP"); - }, nullptr, [](JsonObject var, uint8_t rowNr) { //loopFun - - var["interval"] = 10*10*10; //every 10 sec from cs to ms - - web->sendDataWs([](AsyncWebSocketMessageBuffer * wsBuf) { - uint8_t* buffer; - - buffer = wsBuf->get(); - - // send leds preview to clients - for (size_t i = 0; i < 20; i++) - { - buffer[i*3+5] = random(256);// (digitalRead(i)+1) * 50; - buffer[i*3+5+1] = random(256); - buffer[i*3+5+2] = random(256); - } - //new values - buffer[0] = 0; //userFun id - - }, 20 * 3 + 5, true); - }); + default: return false; + }}); + + ui->initNumber(tableVar, "pinNr", UINT16_MAX, 0, NUM_PINS, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Pin"); + return true; + default: return false; + }}); + + ui->initText(tableVar, "pinOwner", nullptr, UINT8_MAX, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Owner"); + return true; + default: return false; + }}); + + ui->initText(tableVar, "pinDetails", nullptr, UINT8_MAX, 256, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Details"); + return true; + default: return false; + }}); + + ui->initCanvas(parentVar, "board", UINT16_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: + web->addResponse(var["id"], "label", "Board layout"); + web->addResponse(var["id"], "comment", "WIP"); + return true; + + case f_LoopFun: + var["interval"] = 10*10*10; //every 10 sec from cs to ms + + web->sendDataWs([](AsyncWebSocketMessageBuffer * wsBuf) { + uint8_t* buffer; + + buffer = wsBuf->get(); + + // send leds preview to clients + for (size_t i = 0; i < 20; i++) + { + buffer[i*3+5] = random(256);// (digitalRead(i)+1) * 50; + buffer[i*3+5+1] = random(256); + buffer[i*3+5+2] = random(256); + } + //new values + buffer[0] = 0; //userFun id + + }, 20 * 3 + 5, true); + return true; + + default: return false; + }}); // ui->initCheckBox(parentVar, "pin2", true, UINT8_MAX, false, nullptr, updateGPIO); // ui->initCheckBox(parentVar, "pin4"); - ui->initCheckBox(parentVar, "pin19", true, UINT8_MAX, false, nullptr, updateGPIO); + ui->initCheckBox(parentVar, "pin19", true, UINT8_MAX, false, updateGPIO); // ui->initCheckBox(parentVar, "pin33", true, UINT8_MAX); } @@ -99,19 +122,22 @@ void SysModPins::loop1s() { } } -void SysModPins::updateGPIO(JsonObject var, size_t index) { - if (var["value"].is()) { - bool pinValue = var["value"]; - JsonString id = var["id"]; +bool SysModPins::updateGPIO(JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ChangeFun: + if (var["value"].is()) { + bool pinValue = var["value"]; + JsonString id = var["id"]; - USER_PRINTF("updateGPIO %s:=%d\n", id.c_str(), pinValue); + USER_PRINTF("updateGPIO %s:=%d\n", id.c_str(), pinValue); - if (id == "pin2") digitalWrite(2, pinValue?HIGH:LOW); - if (id == "pin4") digitalWrite(4, pinValue?HIGH:LOW); - if (id == "pin19") digitalWrite(19, pinValue?HIGH:LOW); - if (id == "pin33") digitalWrite(33, pinValue?HIGH:LOW); - } -} + if (id == "pin2") digitalWrite(2, pinValue?HIGH:LOW); + if (id == "pin4") digitalWrite(4, pinValue?HIGH:LOW); + if (id == "pin19") digitalWrite(19, pinValue?HIGH:LOW); + if (id == "pin33") digitalWrite(33, pinValue?HIGH:LOW); + } + return true; + default: return false; + }}; void SysModPins::allocatePin(uint8_t pinNr, const char * owner, const char * details) { USER_PRINTF("allocatePin %d %s %s\n", pinNr, owner, details); diff --git a/src/Sys/SysModPins.h b/src/Sys/SysModPins.h index 07158fab..75e42343 100644 --- a/src/Sys/SysModPins.h +++ b/src/Sys/SysModPins.h @@ -33,7 +33,7 @@ class SysModPins:public SysModule { void allocatePin(uint8_t pinNr, const char * owner, const char * details); void deallocatePin(uint8_t pinNr, const char * owner); - static void updateGPIO(JsonObject var, size_t index); + static bool updateGPIO(JsonObject var, uint8_t rowNr, uint8_t funType); private: static bool pinsChanged; //update pins table if pins changed diff --git a/src/Sys/SysModPrint.cpp b/src/Sys/SysModPrint.cpp index 5dbf82c7..45f1d61b 100644 --- a/src/Sys/SysModPrint.cpp +++ b/src/Sys/SysModPrint.cpp @@ -57,21 +57,29 @@ void SysModPrint::setup() { parentVar = ui->initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -2300; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - ui->initSelect(parentVar, "pOut", 1, UINT8_MAX, false, [](JsonObject var) { //uiFun default 1 (Serial) - web->addResponse(var["id"], "label", "Output"); - web->addResponse(var["id"], "comment", "System log to Serial or Net print (WIP)"); - - JsonArray rows = web->addResponseA(var["id"], "options"); - rows.add("No"); - rows.add("Serial"); - rows.add("UI"); + ui->initSelect(parentVar, "pOut", 1, UINT8_MAX, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + { + web->addResponse(var["id"], "label", "Output"); + web->addResponse(var["id"], "comment", "System log to Serial or Net print (WIP)"); - web->clientsToJson(rows, true); //ip only - }); + JsonArray rows = web->addResponseA(var["id"], "options"); + rows.add("No"); + rows.add("Serial"); + rows.add("UI"); - ui->initTextArea(parentVar, "log", "WIP", true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "Show the printed log"); - }); + web->clientsToJson(rows, true); //ip only + return true; + } + default: return false; + }}); + + ui->initTextArea(parentVar, "log", "WIP", true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "Show the printed log"); + return true; + default: return false; + }}); } void SysModPrint::loop() { diff --git a/src/Sys/SysModSystem.cpp b/src/Sys/SysModSystem.cpp index 4ecb7bfc..d0cdf125 100644 --- a/src/Sys/SysModSystem.cpp +++ b/src/Sys/SysModSystem.cpp @@ -26,67 +26,95 @@ void SysModSystem::setup() { parentVar = ui->initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -2100; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - ui->initText(parentVar, "serverName", "StarMod", UINT8_MAX, 32, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Name"); - web->addResponse(var["id"], "comment", "Instance name"); - }); - ui->initText(parentVar, "upTime", nullptr, UINT8_MAX, 16, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "Uptime of board"); - }); + ui->initText(parentVar, "serverName", "StarMod", UINT8_MAX, 32, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Name"); + web->addResponse(var["id"], "comment", "Instance name"); + return true; + default: return false; + }}); + + ui->initText(parentVar, "upTime", nullptr, UINT8_MAX, 16, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "Uptime of board"); + return true; + default: return false; + }}); + + ui->initButton(parentVar, "reboot", false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ChangeFun: + web->ws->closeAll(1012); + + // mdls->reboot(); //not working yet + // long dly = millis(); + // while (millis() - dly < 450) { + // yield(); // enough time to send response to client + // } + // FASTLED.clear(); + ESP.restart(); + return true; + default: return false; + }}); + ui->initText(parentVar, "loops", nullptr, UINT8_MAX, 16, true); ui->initText(parentVar, "chip", nullptr, UINT8_MAX, 16, true); - ui->initProgress(parentVar, "heap", 0, UINT8_MAX, 0, ESP.getHeapSize()/1000, true, nullptr - , [](JsonObject var, uint8_t) { //chFun - var["max"] = ESP.getHeapSize()/1000; //makes sense? - web->addResponse(var["id"], "value", (ESP.getHeapSize()-ESP.getFreeHeap()) / 1000); - web->addResponseV(var["id"], "comment", "f:%d / t:%d (l:%d) B", ESP.getFreeHeap(), ESP.getHeapSize(), ESP.getMaxAllocHeap()); - }); + ui->initProgress(parentVar, "heap", 0, UINT8_MAX, 0, ESP.getHeapSize()/1000, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ChangeFun: + var["max"] = ESP.getHeapSize()/1000; //makes sense? + web->addResponse(var["id"], "value", (ESP.getHeapSize()-ESP.getFreeHeap()) / 1000); + web->addResponseV(var["id"], "comment", "f:%d / t:%d (l:%d) B", ESP.getFreeHeap(), ESP.getHeapSize(), ESP.getMaxAllocHeap()); + return true; + default: return false; + }}); if (psramFound()) { - ui->initProgress(parentVar, "psram", 0, UINT8_MAX, 0, ESP.getPsramSize()/1000, true, nullptr - , [](JsonObject var, uint8_t) { //chFun - var["max"] = ESP.getPsramSize()/1000; //makes sense? - web->addResponse(var["id"], "value", (ESP.getPsramSize()-ESP.getFreePsram()) / 1000); - web->addResponseV(var["id"], "comment", "%d / %d (%d) B", ESP.getFreePsram(), ESP.getPsramSize(), ESP.getMinFreePsram()); - }); - } + ui->initProgress(parentVar, "psram", 0, UINT8_MAX, 0, ESP.getPsramSize()/1000, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ChangeFun: + var["max"] = ESP.getPsramSize()/1000; //makes sense? + web->addResponse(var["id"], "value", (ESP.getPsramSize()-ESP.getFreePsram()) / 1000); + web->addResponseV(var["id"], "comment", "%d / %d (%d) B", ESP.getFreePsram(), ESP.getPsramSize(), ESP.getMinFreePsram()); + return true; + default: return false; + }}); + } + + ui->initProgress(parentVar, "stack", 0, UINT8_MAX, 0, 4096, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ChangeFun: + web->addResponse(var["id"], "value", uxTaskGetStackHighWaterMark(NULL)); + web->addResponseV(var["id"], "comment", "%d B", uxTaskGetStackHighWaterMark(NULL)); + return true; + default: return false; + }}); + + ui->initSelect(parentVar, "reset0", (int)rtc_get_reset_reason(0), UINT8_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Reset 0"); + web->addResponse(var["id"], "comment", "Reason Core 0"); + sys->addResetReasonsSelect(web->addResponseA(var["id"], "options")); + return true; + default: return false; + }}); - ui->initProgress(parentVar, "stack", 0, UINT8_MAX, 0, 4096, true, nullptr - , [](JsonObject var, uint8_t) { //chFun - web->addResponse(var["id"], "value", uxTaskGetStackHighWaterMark(NULL)); - web->addResponseV(var["id"], "comment", "%d B", uxTaskGetStackHighWaterMark(NULL)); - }); - - ui->initButton(parentVar, "reboot", false, nullptr, [](JsonObject var, uint8_t) { //chFun - web->ws->closeAll(1012); - - // mdls->reboot(); //not working yet - // long dly = millis(); - // while (millis() - dly < 450) { - // yield(); // enough time to send response to client - // } - // FASTLED.clear(); - ESP.restart(); - }); - - ui->initSelect(parentVar, "reset0", (int)rtc_get_reset_reason(0), UINT8_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Reset 0"); - web->addResponse(var["id"], "comment", "Reason Core 0"); - sys->addResetReasonsSelect(web->addResponseA(var["id"], "options")); - }); if (ESP.getChipCores() > 1) - ui->initSelect(parentVar, "reset1", (int)rtc_get_reset_reason(1), UINT8_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Reset 1"); - web->addResponse(var["id"], "comment", "Reason Core 1"); - sys->addResetReasonsSelect(web->addResponseA(var["id"], "options")); - }); - ui->initSelect(parentVar, "restartReason", (int)esp_reset_reason(), UINT8_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Restart"); - web->addResponse(var["id"], "comment", "Reason restart"); - sys->addRestartReasonsSelect(web->addResponseA(var["id"], "options")); - }); + ui->initSelect(parentVar, "reset1", (int)rtc_get_reset_reason(1), UINT8_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Reset 1"); + web->addResponse(var["id"], "comment", "Reason Core 1"); + sys->addResetReasonsSelect(web->addResponseA(var["id"], "options")); + return true; + default: return false; + }}); + + ui->initSelect(parentVar, "restartReason", (int)esp_reset_reason(), UINT8_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Restart"); + web->addResponse(var["id"], "comment", "Reason restart"); + sys->addRestartReasonsSelect(web->addResponseA(var["id"], "options")); + return true; + default: return false; + }}); //calculate version in format YYMMDDHH //https://forum.arduino.cc/t/can-you-format-__date__/200818/10 diff --git a/src/Sys/SysModUI.cpp b/src/Sys/SysModUI.cpp index e5f68f95..9435b37d 100644 --- a/src/Sys/SysModUI.cpp +++ b/src/Sys/SysModUI.cpp @@ -14,8 +14,7 @@ #include "SysModModel.h" //init static variables (https://www.tutorialspoint.com/cplusplus/cpp_static_members.htm) -std::vector SysModUI::uFunctions; -std::vector SysModUI::cFunctions; +std::vector SysModUI::varFunctions; std::vector SysModUI::loopFunctions; int SysModUI::varCounter = 1; //start with 1 so it can be negative, see var["o"] bool SysModUI::stageVarChanged = false; @@ -30,23 +29,36 @@ void SysModUI::setup() { parentVar = initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -4100; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - JsonObject tableVar = initTable(parentVar, "vlTbl", nullptr, true, [](JsonObject var) { //uiFun ro true: no update and delete - web->addResponse(var["id"], "label", "Variable loops"); - web->addResponse(var["id"], "comment", "Loops initiated by a variable"); - JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value - - for (auto varLoop = begin (loopFunctions); varLoop != end (loopFunctions); ++varLoop) { - JsonArray row = rows.createNestedArray(); - row.add(varLoop->var["id"]); - row.add(varLoop->counter); + JsonObject tableVar = initTable(parentVar, "vlTbl", nullptr, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + { + web->addResponse(var["id"], "label", "Variable loops"); + web->addResponse(var["id"], "comment", "Loops initiated by a variable"); + JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value + + for (auto varLoop = begin (loopFunctions); varLoop != end (loopFunctions); ++varLoop) { + JsonArray row = rows.createNestedArray(); + row.add(varLoop->var["id"]); + row.add(varLoop->counter); + } + return true; } - }); - initText(tableVar, "vlVar", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Name"); - }); - initNumber(tableVar, "vlLoopps", UINT16_MAX, 0, 999, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Loops p s"); - }); + default: return false; + }}); + + initText(tableVar, "vlVar", nullptr, UINT8_MAX, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Name"); + return true; + default: return false; + }}); + + initNumber(tableVar, "vlLoopps", UINT16_MAX, 0, 999, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Loops p s"); + return true; + default: return false; + }}); } void SysModUI::loop() { @@ -56,7 +68,7 @@ void SysModUI::loop() { if (millis() - varLoop->lastMillis >= varLoop->var["interval"].as()) { varLoop->lastMillis = millis(); - varLoop->loopFun(varLoop->var, 1); //rowNr.. + varLoop->loopFun(varLoop->var, 1, f_LoopFun); //rowNr.. varLoop->counter++; // USER_PRINTF("%s %u %u %d %d\n", varLoop->var["id"].as(), varLoop->lastMillis, millis(), varLoop->interval, varLoop->counter); @@ -73,7 +85,7 @@ void SysModUI::loop1s() { } } -JsonObject SysModUI::initVar(JsonObject parent, const char * id, const char * type, bool readOnly, UFun uiFun, CFun chFun, CFun loopFun) { +JsonObject SysModUI::initVar(JsonObject parent, const char * id, const char * type, bool readOnly, VarFun varFun) { JsonObject var = mdl->findVar(id); //sets the existing modelParentVar const char * modelParentId = mdl->modelParentVar["id"]; const char * parentId = parent["id"]; @@ -120,43 +132,30 @@ JsonObject SysModUI::initVar(JsonObject parent, const char * id, const char * ty } - //if uiFun, add it to the list - if (uiFun) { + //if varFun, add it to the list + if (varFun) { //if fun already in ucFunctions then reuse, otherwise add new fun in ucFunctions //lambda update: when replacing typedef void(*UCFun)(JsonObject); with typedef std::function UCFun; this gives error: // mismatched types 'T*' and 'std::function' { return *__it == _M_value; } // it also looks like functions are not added more then once anyway - // std::vector::iterator itr = find(ucFunctions.begin(), ucFunctions.end(), uiFun); - // if (itr!=ucFunctions.end()) //found - // var["uiFun"] = distance(ucFunctions.begin(), itr); //assign found function - // else { //not found - uFunctions.push_back(uiFun); //add new function - var["uiFun"] = uFunctions.size()-1; - // } - } - - //if chFun, add it to the list - if (chFun) { - //if fun already in ucFunctions then reuse, otherwise add new fun in ucFunctions - // std::vector::iterator itr = find(ucFunctions.begin(), ucFunctions.end(), chFun); + // std::vector::iterator itr = find(ucFunctions.begin(), ucFunctions.end(), varFun); // if (itr!=ucFunctions.end()) //found - // var["chFun"] = distance(ucFunctions.begin(), itr); //assign found function + // var["varFun"] = distance(ucFunctions.begin(), itr); //assign found function // else { //not found - cFunctions.push_back(chFun); //add new function - var["chFun"] = cFunctions.size()-1; + varFunctions.push_back(varFun); //add new function + var["fun"] = varFunctions.size()-1; // } - } - - //if loopFun, add it to the list - if (loopFun) { - //no need to check if already in... - VarLoop loop; - loop.loopFun = loopFun; - loop.var = var; - - loopFunctions.push_back(loop); - var["loopFun"] = loopFunctions.size()-1; - // USER_PRINTF("iObject loopFun %s %u %u %d %d\n", var["id"].as()); + + if (varFun(var, UINT8_MAX, f_LoopFun)) { //test run if it supports loop + //no need to check if already in... + VarLoop loop; + loop.loopFun = varFun; + loop.var = var; + + loopFunctions.push_back(loop); + var["loopFun"] = loopFunctions.size()-1; + // USER_PRINTF("iObject loopFun %s %u %u %d %d\n", var["id"].as()); + } } } else @@ -168,7 +167,7 @@ JsonObject SysModUI::initVar(JsonObject parent, const char * id, const char * ty void SysModUI::processJson(JsonVariant json) { if (json.is()) //should be { - //uiFun adds object elements to json which would be processed in the for loop. So we freeze the original pairs in a vector and loop on this + //varFun adds object elements to json which would be processed in the for loop. So we freeze the original pairs in a vector and loop on this std::vector pairs; for (JsonPair pair : json.as()) { //iterate json elements pairs.push_back(pair); @@ -186,28 +185,29 @@ void SysModUI::processJson(JsonVariant json) { // json.remove(key); //key should stay as all clients use this to perform the changeHTML action } else if (pair.key() == "addRow" || pair.key() == "delRow") { - USER_PRINTF("processJson %s - %s\n", key, value.as().c_str()); if (value.is()) { - JsonObject command = value.as(); + JsonObject command = value; JsonObject var = mdl->findVar(command["id"]); + uint8_t rowNr = command["rowNr"]; + USER_PRINTF("processJson %s - %s\n", key, value.as().c_str()); // var["value"] = pair.key(); //store the action as variable workaround? - mdl->callChFunAndWs(var, command["rowNr"].as(), pair.key().c_str()); //let chFun deal with it + mdl->callChFunAndWs(var, rowNr, pair.key().c_str()); //let chFun deal with it } json.remove(key); //key processed we don't need the key in the response } else if (pair.key() == "uiFun") { //JsonString can do == //find the select var and collect it's options... if (value.is()) { //should be - for (JsonVariant value2: value.as()) { - JsonObject var = mdl->findVar(value2); //value is the id + for (JsonVariant varInArray: value.as()) { + JsonObject var = mdl->findVar(varInArray); //value is the id if (!var.isNull()) { //call ui function... - if (!var["uiFun"].isNull()) {//isnull needed here! - size_t funNr = var["uiFun"]; - if (funNr < uFunctions.size()) - uFunctions[funNr](var); + if (!var["fun"].isNull()) {//isnull needed here! + size_t funNr = var["fun"]; + if (funNr < varFunctions.size()) + varFunctions[funNr](var, UINT8_MAX, f_UIFun); // no rowNr for uiFun else - USER_PRINTF("processJson function nr %s outside bounds %d >= %d\n", var["id"].as(), funNr, uFunctions.size()); + USER_PRINTF("dev processJson function nr %s outside bounds %d >= %d\n", var["id"].as(), funNr, varFunctions.size()); //if select var, send value back // if (var["type"] == "select") { @@ -221,10 +221,10 @@ void SysModUI::processJson(JsonVariant json) { } } else - USER_PRINTF("processJson Command %s var %s not found\n", key, value2.as().c_str()); + USER_PRINTF("dev processJson Command %s var %s not found\n", key, varInArray.as().c_str()); } } else - USER_PRINTF("processJson value not array? %s %s\n", key, value.as().c_str()); + USER_PRINTF("dev processJson value not array? %s %s\n", key, value.as().c_str()); json.remove(key); //key processed we don't need the key in the response } else if (!value.isNull()) { // {"varid": {"value":value}} or {"varid": value} diff --git a/src/Sys/SysModUI.h b/src/Sys/SysModUI.h index 4ac8776b..f77ea7b9 100644 --- a/src/Sys/SysModUI.h +++ b/src/Sys/SysModUI.h @@ -14,15 +14,23 @@ #include "SysModPrint.h" #include "SysModModel.h" +enum FunIDs +{ + f_ValueFun, + f_UIFun, + f_ChangeFun, + f_LoopFun, + f_count +}; + // https://stackoverflow.com/questions/59111610/how-do-you-declare-a-lambda-function-using-typedef-and-then-use-it-by-passing-to -typedef std::function UFun; -typedef std::function CFun; +typedef std::function VarFun; // typedef void(*LoopFun)(JsonObject, uint8_t*); //std::function is crashing... // typedef std::function LoopFun; struct VarLoop { JsonObject var; - CFun loopFun; + VarFun loopFun; unsigned long lastMillis = 0; unsigned long counter = 0; }; @@ -47,8 +55,7 @@ class SysModUI:public SysModule { public: static bool stageVarChanged;// = false; //tbd: move mechanism to UserModInstances as there it will be used - static std::vector uFunctions; //static because of static functions callChFunAndWs, processJson... - static std::vector cFunctions; //static because of static functions callChFunAndWs, processJson... + static std::vector varFunctions; //static because of static functions callChFunAndWs, processJson... SysModUI(); @@ -58,74 +65,74 @@ class SysModUI:public SysModule { void loop(); void loop1s(); - JsonObject initAppMod(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "appmod", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initAppMod(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "appmod", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initSysMod(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "sysmod", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initSysMod(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "sysmod", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initUserMod(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "usermod", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initUserMod(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "usermod", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initTable(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "table", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initTable(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "table", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initText(JsonObject parent, const char * id, const char * value = nullptr, uint8_t rowNr = UINT8_MAX, uint16_t max = 32, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "text", value, rowNr, 0, max, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initText(JsonObject parent, const char * id, const char * value = nullptr, uint8_t rowNr = UINT8_MAX, uint16_t max = 32, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "text", value, rowNr, 0, max, readOnly, varFun, nrOfRows); } - JsonObject initPassword(JsonObject parent, const char * id, const char * value = nullptr, uint8_t max = 32, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "password", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initPassword(JsonObject parent, const char * id, const char * value = nullptr, uint8_t max = 32, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "password", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initNumber(JsonObject parent, const char * id, int value = UINT16_MAX, int min = 0, int max = UINT16_MAX, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "number", value, UINT8_MAX, min, max, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initNumber(JsonObject parent, const char * id, int value = UINT16_MAX, int min = 0, int max = UINT16_MAX, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "number", value, UINT8_MAX, min, max, readOnly, varFun, nrOfRows); } - JsonObject initProgress(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, int min = 0, int max = 255, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "progress", value, rowNr, min, max, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initProgress(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, int min = 0, int max = 255, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "progress", value, rowNr, min, max, readOnly, varFun, nrOfRows); } - JsonObject initCoord3D(JsonObject parent, const char * id, Coord3D value = {UINT16_MAX, UINT16_MAX, UINT16_MAX}, uint8_t rowNr = UINT8_MAX, int min = 0, int max = UINT16_MAX, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "coord3D", value, rowNr, min, max, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initCoord3D(JsonObject parent, const char * id, Coord3D value = {UINT16_MAX, UINT16_MAX, UINT16_MAX}, uint8_t rowNr = UINT8_MAX, int min = 0, int max = UINT16_MAX, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "coord3D", value, rowNr, min, max, readOnly, varFun, nrOfRows); } //init a range slider, range between 0 and 255! - JsonObject initSlider(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, int min = 0, int max = 255, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "range", value, rowNr, min, max, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initSlider(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, int min = 0, int max = 255, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "range", value, rowNr, min, max, readOnly, varFun, nrOfRows); } - JsonObject initCanvas(JsonObject parent, const char * id, int value = UINT16_MAX, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "canvas", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initCanvas(JsonObject parent, const char * id, int value = UINT16_MAX, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "canvas", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } //supports 3 state value: if UINT16_MAX it is indeterminated - JsonObject initCheckBox(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "checkbox", value, rowNr, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initCheckBox(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "checkbox", value, rowNr, 0, 0, readOnly, varFun, nrOfRows); } //a button never gets a value - JsonObject initButton(JsonObject parent, const char * id, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "button", false, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initButton(JsonObject parent, const char * id, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "button", false, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initSelect(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "select", value, rowNr, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initSelect(JsonObject parent, const char * id, int value = UINT16_MAX, uint8_t rowNr = UINT8_MAX, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "select", value, rowNr, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initTextArea(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "textarea", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initTextArea(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "textarea", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } - JsonObject initURL(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - return initVarAndUpdate(parent, id, "url", value, UINT8_MAX, 0, 0, readOnly, uiFun, chFun, loopFun, count, valueFun); + JsonObject initURL(JsonObject parent, const char * id, const char * value = nullptr, bool readOnly = false, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + return initVarAndUpdate(parent, id, "url", value, UINT8_MAX, 0, 0, readOnly, varFun, nrOfRows); } template - JsonObject initVarAndUpdate(JsonObject parent, const char * id, const char * type, Type value, uint8_t rowNr = UINT8_MAX, int min = 0, int max = 255, bool readOnly = true, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr, uint8_t count = 0, CFun valueFun = nullptr) { - JsonObject var = initVar(parent, id, type, readOnly, uiFun, chFun, loopFun); + JsonObject initVarAndUpdate(JsonObject parent, const char * id, const char * type, Type value, uint8_t rowNr = UINT8_MAX, int min = 0, int max = 255, bool readOnly = true, VarFun varFun = nullptr, uint8_t nrOfRows = 0) { + JsonObject var = initVar(parent, id, type, readOnly, varFun); if (min) var["min"] = min; if (max && max != UINT16_MAX) var["max"] = max; @@ -133,7 +140,7 @@ class SysModUI:public SysModule { if (strcmp(type, "button") != 0) { //button never gets a value if (var["value"].isNull()) { valueNeedsUpdate = true; - // print->printJson("initVarAndUpdate uiFun value is null", var); + // print->printJson("initVarAndUpdate varFun value is null", var); } else if (var["value"].is()) { JsonArray valueArray = var["value"].as(); if (rowNr != UINT8_MAX) { @@ -142,42 +149,48 @@ class SysModUI:public SysModule { else if (valueArray[rowNr].isNull()) valueNeedsUpdate = true; } - else if (count && valueArray.size() != count) { - print->printJson("initVarAndUpdate uiFun value array wrong size", var); + else if (nrOfRows && valueArray.size() != nrOfRows) { + print->printJson("initVarAndUpdate varFun value array wrong size", var); valueNeedsUpdate = true; } } } if (valueNeedsUpdate) { - if (!valueFun) { - mdl->setValue(var, value, rowNr); //does changefun if needed - } - else { - USER_PRINTF("initVarAndUpdate valueFun %s count:%d\n", id, count); - for (int rowNr=0;rowNrsetValue(var, value, rowNr); //does changefun if needed } else { //do changeFun on existing value //no call of chFun for buttons otherwise all buttons will be fired which is highly undesirable - if (strcmp(type,"button") != 0 && chFun ) { //!isPointer because 0 is also a value then && (!isPointer || value) - USER_PRINTF("initVarAndUpdate chFun init %s v:%s\n", var["id"].as(), var["value"].as().c_str()); + if (strcmp(type,"button") != 0 && varFun ) { //!isPointer because 0 is also a value then && (!isPointer || value) + bool changeFunExists = false; if (var["value"].is()) { int rowNr = 0; for (JsonVariant val:var["value"].as()) { - chFun(var, rowNr++); + changeFunExists |= varFun(var, rowNr++, f_ChangeFun); } } else - chFun(var, 0); //if no rowNr use rowNr 0 + changeFunExists = varFun(var, 0, f_ChangeFun); //if no rowNr use rowNr 0 + + if (changeFunExists) + USER_PRINTF("initVarAndUpdate chFun V2 !!! init %s v:%s\n", var["id"].as(), var["value"].as().c_str()); } } return var; } - JsonObject initVar(JsonObject parent, const char * id, const char * type, bool readOnly = true, UFun uiFun = nullptr, CFun chFun = nullptr, CFun loopFun = nullptr); + JsonObject initVar(JsonObject parent, const char * id, const char * type, bool readOnly = true, VarFun varFun = nullptr); //interpret json and run commands or set values like deserializeJson / deserializeState / deserializeConfig void processJson(JsonVariant json); //static for jsonHandler, must be Variant, not object for jsonhandler diff --git a/src/Sys/SysModWeb.cpp b/src/Sys/SysModWeb.cpp index b2ab1597..dd9e4d6f 100644 --- a/src/Sys/SysModWeb.cpp +++ b/src/Sys/SysModWeb.cpp @@ -61,64 +61,112 @@ void SysModWeb::setup() { parentVar = ui->initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -2400; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - JsonObject tableVar = ui->initTable(parentVar, "clTbl", nullptr, true, [](JsonObject var) { //uiFun ro true: no update and delete - web->addResponse(var["id"], "label", "Clients"); - web->addResponse(var["id"], "comment", "List of clients"); - // JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value - // web->clientsToJson(rows); - }); - - ui->initNumber(tableVar, "clNr", UINT16_MAX, 0, 999, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Nr"); - }, nullptr, nullptr, ws->count(), [this](JsonObject var, uint8_t rowNr) { //valueFun - //workaround as WebClient * client = ws->getClients().nth(rowNr); not working - uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->id(), rowNr); - - // AsyncWebSocket::AsyncWebSocketClientLinkedList::iterator client = ws->getClients().nth(rowNr); - // LinkedList::Iterator client; - // = ws->getClients().nth(rowNr); - // WebClient * const * client = ws->getClients().nth(rowNr); - // WebClient * c2 = ws->getClients().nth(rowNr); - // const auto& c = ws->getClients().nth(rowNr); - // mdl->setValue(var, client->id(), rowNr); - }); - - ui->initText(tableVar, "clIp", nullptr, UINT8_MAX, 16, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "IP"); - }, nullptr, nullptr, ws->count(), [this](JsonObject var, uint8_t rowNr) { //valueFun - //workaround as WebClient * client = ws->getClients().nth(rowNr); not working - uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, JsonString(client->remoteIP().toString().c_str(), JsonString::Copied), rowNr); - }); - - ui->initCheckBox(tableVar, "clIsFull", UINT16_MAX, UINT8_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Is full"); - }, nullptr, nullptr, ws->count(), [this](JsonObject var, uint8_t rowNr) { //valueFun - //workaround as WebClient * client = ws->getClients().nth(rowNr); not working - uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->queueIsFull(), rowNr); - }); - - ui->initSelect(tableVar, "clStatus", UINT16_MAX, UINT8_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Status"); - //tbd: not working yet in ui - JsonArray select = web->addResponseA(var["id"], "options"); - select.add("Disconnected"); //0 - select.add("Connected"); //1 - select.add("Disconnecting"); //2 - }, nullptr, nullptr, ws->count(), [this](JsonObject var, uint8_t rowNr) { //valueFun - //workaround as WebClient * client = ws->getClients().nth(rowNr); not working - uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->status(), rowNr); - }); - - ui->initNumber(tableVar, "clLength", UINT16_MAX, 0, WS_MAX_QUEUED_MESSAGES, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Length"); - }, nullptr, nullptr, ws->count(), [this](JsonObject var, uint8_t rowNr) { //valueFun - //workaround as WebClient * client = ws->getClients().nth(rowNr); not working - uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->queueLength(), rowNr); - }); - - ui->initText(parentVar, "wsCounter", nullptr, UINT8_MAX, 16, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "comment", "#web socket calls"); - }); + JsonObject tableVar = ui->initTable(parentVar, "clTbl", nullptr, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Clients"); + web->addResponse(var["id"], "comment", "List of clients"); + // JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value + // web->clientsToJson(rows); + return true; + default: return false; + }}); + + ui->initNumber(tableVar, "clNr", UINT16_MAX, 0, 999, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_ValueFun: + { + //workaround as WebClient * client = ws->getClients().nth(rowNr); not working + uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->id(), rowNr); + + // AsyncWebSocket::AsyncWebSocketClientLinkedList::iterator client = ws->getClients().nth(rowNr); + // LinkedList::Iterator client; + // = ws->getClients().nth(rowNr); + // WebClient * const * client = ws->getClients().nth(rowNr); + // WebClient * c2 = ws->getClients().nth(rowNr); + // const auto& c = ws->getClients().nth(rowNr); + // mdl->setValue(var, client->id(), rowNr); + return true; + } + case f_UIFun: + web->addResponse(var["id"], "label", "Nr"); + return true; + + default: return false; + }}, ws->count()); + + ui->initText(tableVar, "clIp", nullptr, UINT8_MAX, 16, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_ValueFun: + { + //workaround as WebClient * client = ws->getClients().nth(rowNr); not working + uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, JsonString(client->remoteIP().toString().c_str(), JsonString::Copied), rowNr); + return true; + } + case f_UIFun: + web->addResponse(var["id"], "label", "IP"); + return true; + + default: return false; + }}, ws->count()); + + ui->initCheckBox(tableVar, "clIsFull", UINT16_MAX, UINT8_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_ValueFun: + { + //workaround as WebClient * client = ws->getClients().nth(rowNr); not working + uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->queueIsFull(), rowNr); + return true; + } + case f_UIFun: + web->addResponse(var["id"], "label", "Is full"); + return true; + + default: return false; + }}, ws->count()); + + ui->initSelect(tableVar, "clStatus", UINT16_MAX, UINT8_MAX, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_ValueFun: + { + //workaround as WebClient * client = ws->getClients().nth(rowNr); not working + uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->status(), rowNr); + return true; + } + case f_UIFun: + { + web->addResponse(var["id"], "label", "Status"); + //tbd: not working yet in ui + JsonArray select = web->addResponseA(var["id"], "options"); + select.add("Disconnected"); //0 + select.add("Connected"); //1 + select.add("Disconnecting"); //2 + return true; + } + default: return false; + }}, ws->count()); + + ui->initNumber(tableVar, "clLength", UINT16_MAX, 0, WS_MAX_QUEUED_MESSAGES, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_ValueFun: + { + //workaround as WebClient * client = ws->getClients().nth(rowNr); not working + uint8_t iterator = 0; for (auto client:ws->getClients()) if (iterator++ == rowNr) mdl->setValue(var, client->queueLength(), rowNr); + return true; + } + case f_UIFun: + web->addResponse(var["id"], "label", "Length"); + return true; + + default: return false; + }}, ws->count()); + + ui->initText(parentVar, "wsCounter", nullptr, UINT8_MAX, 16, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "comment", "#web socket calls"); + return true; + default: return false; + }}); + ui->initNumber(parentVar, "queueLength", WS_MAX_QUEUED_MESSAGES, 0, WS_MAX_QUEUED_MESSAGES, true); } @@ -279,7 +327,7 @@ void SysModWeb::wsEvent(WebSocket * ws, WebClient * client, AwsEventType type, v print->printJson("WS_EVT_DATA json", responseVariant); print->printJDocInfo("WS_EVT_DATA info", *responseDoc); - //uiFun only send to requesting client + //varFun only send to requesting client if (isUiFun) sendDataWs(responseVariant, client); // else diff --git a/src/SysModules.cpp b/src/SysModules.cpp index 2d1ff3b7..b5ba2d7b 100644 --- a/src/SysModules.cpp +++ b/src/SysModules.cpp @@ -31,40 +31,58 @@ void SysModules::setup() { parentVar = ui->initSysMod(parentVar, "Modules"); if (parentVar["o"] > -1000) parentVar["o"] = -5000; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - JsonObject tableVar = ui->initTable(parentVar, "mdlTbl", nullptr, true, [this](JsonObject var) { //uiFun ro true: no update and delete - web->addResponse(var["id"], "label", "Modules"); - web->addResponse(var["id"], "comment", "List of modules"); - }); - - ui->initText(tableVar, "mdlName", nullptr, UINT8_MAX, 32, true, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Name"); - }, nullptr, nullptr, modules.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, modules[rowNr]->name, rowNr); - }); - - ui->initCheckBox(tableVar, "mdlSucces", UINT16_MAX, UINT8_MAX, true, [this](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Success"); - }, nullptr, nullptr, modules.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, modules[rowNr]->success, rowNr); - }); - - ui->initCheckBox(tableVar, "mdlEnabled", UINT16_MAX, UINT8_MAX, false, [this](JsonObject var) { //uiFun not readonly! (tbd) - //initially set to true, but as enabled are table cells, will be updated to an array - web->addResponse(var["id"], "label", "Enabled"); - }, [this](JsonObject var, uint8_t rowNr) { //chFun - - if (rowNr != UINT8_MAX && rowNr < modules.size()) { - modules[rowNr]->isEnabled = mdl->getValue(var, rowNr); - modules[rowNr]->enabledChanged(); - } - else { - USER_PRINTF(" no rowNr or > modules.size!!", rowNr); - } - // print->printJson(" ", var); + JsonObject tableVar = ui->initTable(parentVar, "mdlTbl", nullptr, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Modules"); + web->addResponse(var["id"], "comment", "List of modules"); + return true; + default: return false; + }}); + + ui->initText(tableVar, "mdlName", nullptr, UINT8_MAX, 32, true, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, modules[rowNr]->name, rowNr); + return true; + case f_UIFun: + web->addResponse(var["id"], "label", "Name"); + return true; + default: return false; + }}, modules.size()); + + ui->initCheckBox(tableVar, "mdlSucces", UINT16_MAX, UINT8_MAX, true, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, modules[rowNr]->success, rowNr); + return true; + case f_UIFun: + web->addResponse(var["id"], "label", "Success"); + return true; + default: return false; + }}, modules.size()); + + ui->initCheckBox(tableVar, "mdlEnabled", UINT16_MAX, UINT8_MAX, false + , [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun not readonly! (tbd) + + case f_ValueFun: + mdl->setValue(var, modules[rowNr]->isEnabled, rowNr); + return true; + case f_UIFun: + //initially set to true, but as enabled are table cells, will be updated to an array + web->addResponse(var["id"], "label", "Enabled"); + return true; + + case f_ChangeFun: + if (rowNr != UINT8_MAX && rowNr < modules.size()) { + modules[rowNr]->isEnabled = mdl->getValue(var, rowNr); + modules[rowNr]->enabledChanged(); + } + else { + USER_PRINTF(" no rowNr or > modules.size!!", rowNr); + } + // print->printJson(" ", var); + return true; - }, nullptr, modules.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, modules[rowNr]->isEnabled, rowNr); - }); + default: return false; + }}, modules.size()); } void SysModules::loop() { diff --git a/src/User/UserModArtNet.h b/src/User/UserModArtNet.h index 92e20690..1b2ff7c3 100644 --- a/src/User/UserModArtNet.h +++ b/src/User/UserModArtNet.h @@ -31,31 +31,38 @@ class UserModArtNet:public SysModule { parentVar = ui->initUserMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -3100; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - ui->initSelect(parentVar, "artInst", UINT16_MAX, UINT8_MAX, 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"], "options"); - JsonArray instanceObject = select.createNestedArray(); - instanceObject.add(0); - instanceObject.add("no sync"); - for (auto node=instances->instances.begin(); node!=instances->instances.end(); ++node) { - if (node->ip != WiFi.localIP()) { - char option[32] = { 0 }; - strncpy(option, node->ip.toString().c_str(), sizeof(option)-1); - strncat(option, " ", sizeof(option)-1); - strncat(option, node->name, sizeof(option)-1); - instanceObject = select.createNestedArray(); - instanceObject.add(node->ip[3]); - instanceObject.add(option); + ui->initSelect(parentVar, "artInst", UINT16_MAX, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: { + web->addResponse(var["id"], "label", "Instance"); + web->addResponse(var["id"], "comment", "Instance to send data"); + JsonArray select = web->addResponseA(var["id"], "options"); + JsonArray instanceObject = select.createNestedArray(); + instanceObject.add(0); + instanceObject.add("no sync"); + for (auto node=instances->instances.begin(); node!=instances->instances.end(); ++node) { + if (node->ip != WiFi.localIP()) { + char option[32] = { 0 }; + strncpy(option, node->ip.toString().c_str(), sizeof(option)-1); + strncat(option, " ", sizeof(option)-1); + strncat(option, node->name, sizeof(option)-1); + instanceObject = select.createNestedArray(); + instanceObject.add(node->ip[3]); + instanceObject.add(option); + } } + return true; } - }, [this](JsonObject var, uint8_t) { //chFun - size_t ddpInst = var["value"]; - if (ddpInst >=0 && ddpInst < instances->instances.size()) { - targetIp = instances->instances[ddpInst].ip; - USER_PRINTF("Start ArtNet to %s\n", targetIp.toString().c_str()); + case f_ChangeFun: { + size_t ddpInst = var["value"]; + if (ddpInst >=0 && ddpInst < instances->instances.size()) { + targetIp = instances->instances[ddpInst].ip; + USER_PRINTF("Start ArtNet to %s\n", targetIp.toString().c_str()); + } + return true; } - }); //ddpInst + default: return false; + }}); //ddpInst } void loop() { diff --git a/src/User/UserModDDP.h b/src/User/UserModDDP.h index 367517d8..d2c5409e 100644 --- a/src/User/UserModDDP.h +++ b/src/User/UserModDDP.h @@ -48,31 +48,38 @@ class UserModDDP:public SysModule { parentVar = ui->initUserMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -3000; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - ui->initSelect(parentVar, "ddpInst", UINT16_MAX, UINT8_MAX, 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"], "options"); - JsonArray instanceObject = select.createNestedArray(); - instanceObject.add(0); - instanceObject.add("no sync"); - for (auto node=instances->instances.begin(); node!=instances->instances.end(); ++node) { - if (node->ip != WiFi.localIP()) { - char option[32] = { 0 }; - strncpy(option, node->ip.toString().c_str(), sizeof(option)-1); - strncat(option, " ", sizeof(option)-1); - strncat(option, node->name, sizeof(option)-1); - instanceObject = select.createNestedArray(); - instanceObject.add(node->ip[3]); - instanceObject.add(option); + ui->initSelect(parentVar, "ddpInst", UINT16_MAX, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + + case f_UIFun: { + web->addResponse(var["id"], "label", "Instance"); + web->addResponse(var["id"], "comment", "Instance to send data"); + JsonArray select = web->addResponseA(var["id"], "options"); + JsonArray instanceObject = select.createNestedArray(); + instanceObject.add(0); + instanceObject.add("no sync"); + for (auto node=instances->instances.begin(); node!=instances->instances.end(); ++node) { + if (node->ip != WiFi.localIP()) { + char option[32] = { 0 }; + strncpy(option, node->ip.toString().c_str(), sizeof(option)-1); + strncat(option, " ", sizeof(option)-1); + strncat(option, node->name, sizeof(option)-1); + instanceObject = select.createNestedArray(); + instanceObject.add(node->ip[3]); + instanceObject.add(option); + } } + return true; } - }, [this](JsonObject var, uint8_t) { //chFun - size_t ddpInst = var["value"]; - if (ddpInst >=0 && ddpInst < instances->instances.size()) { - targetIp = instances->instances[ddpInst].ip; - USER_PRINTF("Start DDP to %s\n", targetIp.toString().c_str()); + case f_ChangeFun: { + size_t ddpInst = var["value"]; + if (ddpInst >=0 && ddpInst < instances->instances.size()) { + targetIp = instances->instances[ddpInst].ip; + USER_PRINTF("Start DDP to %s\n", targetIp.toString().c_str()); + } + return true; } - }); //ddpInst + default: return false; + }}); //ddpInst } void loop() { diff --git a/src/User/UserModE131.h b/src/User/UserModE131.h index 5150cbb1..aaaf3013 100644 --- a/src/User/UserModE131.h +++ b/src/User/UserModE131.h @@ -28,55 +28,83 @@ class UserModE131:public SysModule { parentVar = ui->initUserMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -3200; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - ui->initNumber(parentVar, "dun", universe, 0, 7, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "DMX Universe"); - }, [this](JsonObject var, uint8_t) { //chFun - universe = var["value"]; - }); - - JsonObject currentVar = ui->initNumber(parentVar, "dch", 1, 1, 512, false, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "DMX Channel"); - web->addResponse(var["id"], "comment", "First channel"); - }, [](JsonObject var, uint8_t) { //chFun - ui->processUiFun("e131Tbl"); //rebuild table - }); + ui->initNumber(parentVar, "dun", universe, 0, 7, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "DMX Universe"); + return true; + case f_ChangeFun: + universe = var["value"]; + return true; + default: return false; + }}); + + JsonObject currentVar = ui->initNumber(parentVar, "dch", 1, 1, 512, false, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "DMX Channel"); + web->addResponse(var["id"], "comment", "First channel"); + return true; + case f_ChangeFun: + ui->processUiFun("e131Tbl"); //rebuild table + return true; + default: return false; + }}); currentVar["stage"] = true; - JsonObject tableVar = ui->initTable(parentVar, "e131Tbl", nullptr, true, [this](JsonObject var) { //uiFun ro true: no update and delete - web->addResponse(var["id"], "label", "Vars to watch"); - web->addResponse(var["id"], "comment", "List of instances"); - // JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value - // for (auto varToWatch: varsToWatch) { - // JsonArray row = rows.createNestedArray(); - // row.add(varToWatch.channel + mdl->getValue("dch").as()); - // row.add(JsonString(varToWatch.id, JsonString::Copied)); - // row.add(varToWatch.max); - // row.add(varToWatch.savedValue); - // } - }); - ui->initNumber(tableVar, "e131Channel", UINT16_MAX, 1, 512, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Channel"); - }, nullptr, nullptr, varsToWatch.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, varsToWatch[rowNr].channel + mdl->getValue("dch").as(), rowNr); - }); - - ui->initText(tableVar, "e131Name", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Name"); - }, nullptr, nullptr, varsToWatch.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, JsonString(varsToWatch[rowNr].id, JsonString::Copied), rowNr); - }); - - ui->initNumber(tableVar, "e131Max", UINT16_MAX, 0, UINT16_MAX, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Max"); - }, nullptr, nullptr, varsToWatch.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, varsToWatch[rowNr].max, rowNr); - }); - - ui->initNumber(tableVar, "e131Value", UINT16_MAX, 0, 255, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Value"); - }, nullptr, nullptr, varsToWatch.size(), [this](JsonObject var, uint8_t rowNr) { //valueFun - mdl->setValue(var, varsToWatch[rowNr].savedValue, rowNr); - }); + JsonObject tableVar = ui->initTable(parentVar, "e131Tbl", nullptr, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + // JsonArray rows = web->addResponseA(var["id"], "value"); //overwrite the value + // for (auto varToWatch: varsToWatch) { + // JsonArray row = rows.createNestedArray(); + // row.add(varToWatch.channel + mdl->getValue("dch").as()); + // row.add(JsonString(varToWatch.id, JsonString::Copied)); + // row.add(varToWatch.max); + // row.add(varToWatch.savedValue); + // } + web->addResponse(var["id"], "label", "Vars to watch"); + web->addResponse(var["id"], "comment", "List of instances"); + return true; + default: return false; + }}); + + ui->initNumber(tableVar, "e131Channel", UINT16_MAX, 1, 512, true, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, varsToWatch[rowNr].channel + mdl->getValue("dch").as(), rowNr); + return true; + case f_UIFun: + web->addResponse(var["id"], "label", "Channel"); + return true; + default: return false; + }}, varsToWatch.size()); + + ui->initText(tableVar, "e131Name", nullptr, UINT8_MAX, 32, true, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, JsonString(varsToWatch[rowNr].id, JsonString::Copied), rowNr); + return true; + case f_UIFun: + web->addResponse(var["id"], "label", "Name"); + return true; + default: return false; + }}, varsToWatch.size()); + + ui->initNumber(tableVar, "e131Max", UINT16_MAX, 0, UINT16_MAX, true, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + web->addResponse(var["id"], "label", "Max"); + return true; + case f_UIFun: + mdl->setValue(var, varsToWatch[rowNr].max, rowNr); + return true; + default: return false; + }}, varsToWatch.size()); + + ui->initNumber(tableVar, "e131Value", UINT16_MAX, 0, 255, true, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ValueFun: + mdl->setValue(var, varsToWatch[rowNr].savedValue, rowNr); + return true; + case f_UIFun: + web->addResponse(var["id"], "label", "Value"); + return true; + default: return false; + }}, varsToWatch.size()); } diff --git a/src/User/UserModInstances.h b/src/User/UserModInstances.h index cdce8138..1282caa1 100644 --- a/src/User/UserModInstances.h +++ b/src/User/UserModInstances.h @@ -171,55 +171,86 @@ class UserModInstances:public SysModule { parentVar = ui->initSysMod(parentVar, name); if (parentVar["o"] > -1000) parentVar["o"] = -4200; //set default order. Don't use auto generated order as order can be changed in the ui (WIP) - JsonObject tableVar = ui->initTable(parentVar, "insTbl", nullptr, true, [this](JsonObject var) { //uiFun ro true: no update and delete - const char * varID = var["id"]; - web->addResponse(varID, "label", "Instances"); - web->addResponse(varID, "comment", "List of instances"); - JsonArray rows = web->addResponseA(varID, "value"); //overwrite the value - for (auto instance=this->instances.begin(); instance!=this->instances.end(); ++instance) { - JsonArray row = rows.createNestedArray(); - addTblRow(row, instance); + JsonObject tableVar = ui->initTable(parentVar, "insTbl", nullptr, true, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: { + const char * varID = var["id"]; + web->addResponse(varID, "label", "Instances"); + web->addResponse(varID, "comment", "List of instances"); + JsonArray rows = web->addResponseA(varID, "value"); //overwrite the value + for (auto instance=this->instances.begin(); instance!=this->instances.end(); ++instance) { + JsonArray row = rows.createNestedArray(); + addTblRow(row, instance); + } + return true; } - }); - ui->initText(tableVar, "insName", nullptr, UINT8_MAX, 32, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Name"); - }); - ui->initURL(tableVar, "insLink", nullptr, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Show"); - }); - - ui->initText(tableVar, "insIp", nullptr, UINT8_MAX, 16, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "IP"); - }); - ui->initText(tableVar, "insType", nullptr, UINT8_MAX, 16, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Type"); - }); - ui->initNumber(tableVar, "insVersion", UINT16_MAX, 0, (unsigned long)-1, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Version"); - }); - ui->initNumber(tableVar, "insUp", UINT16_MAX, 0, (unsigned long)-1, true, [](JsonObject var) { //uiFun - web->addResponse(var["id"], "label", "Uptime"); - }); + default: return false; + }}); + + ui->initText(tableVar, "insName", nullptr, UINT8_MAX, 32, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Name"); + return true; + default: return false; + }}); + + ui->initURL(tableVar, "insLink", nullptr, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Show"); + return true; + default: return false; + }}); + + ui->initText(tableVar, "insIp", nullptr, UINT8_MAX, 16, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "IP"); + return true; + default: return false; + }}); + + ui->initText(tableVar, "insType", nullptr, UINT8_MAX, 16, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Type"); + return true; + default: return false; + }}); + + ui->initNumber(tableVar, "insVersion", UINT16_MAX, 0, (unsigned long)-1, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Version"); + return true; + default: return false; + }}); + + ui->initNumber(tableVar, "insUp", UINT16_MAX, 0, (unsigned long)-1, true, [](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: + web->addResponse(var["id"], "label", "Uptime"); + return true; + default: return false; + }}); JsonObject currentVar; - currentVar = ui->initSelect(parentVar, "sma", 0, UINT8_MAX, false, [this](JsonObject var) { //uiFun tbd: make dropdown where value is ...ip number - web->addResponse(var["id"], "label", "Sync Master"); - web->addResponse(var["id"], "comment", "Instance to sync from"); - JsonArray select = web->addResponseA(var["id"], "options"); - JsonArray instanceObject = select.createNestedArray(); - instanceObject.add(0); - instanceObject.add("no sync"); - for (auto instance=instances.begin(); instance!=instances.end(); ++instance) { - char option[32] = { 0 }; - strncpy(option, instance->ip.toString().c_str(), sizeof(option)-1); - strncat(option, " ", sizeof(option)-1); - strncat(option, instance->name, sizeof(option)-1); - instanceObject = select.createNestedArray(); - instanceObject.add(instance->ip[3]); - instanceObject.add(option); + currentVar = ui->initSelect(parentVar, "sma", 0, UINT8_MAX, false, [this](JsonObject var, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_UIFun: { + web->addResponse(var["id"], "label", "Sync Master"); + web->addResponse(var["id"], "comment", "Instance to sync from"); + JsonArray select = web->addResponseA(var["id"], "options"); + JsonArray instanceObject = select.createNestedArray(); + instanceObject.add(0); + instanceObject.add("no sync"); + for (auto instance=instances.begin(); instance!=instances.end(); ++instance) { + char option[32] = { 0 }; + strncpy(option, instance->ip.toString().c_str(), sizeof(option)-1); + strncat(option, " ", sizeof(option)-1); + strncat(option, instance->name, sizeof(option)-1); + instanceObject = select.createNestedArray(); + instanceObject.add(instance->ip[3]); + instanceObject.add(option); + } + return true; } - }); //syncMaster + default: return false; + }}); //syncMaster currentVar["stage"] = true; //find stage variables and add them to the table @@ -232,52 +263,54 @@ class UserModInstances:public SysModule { JsonObject newVar; // = ui->cloneVar(var, columnVarID, [this, var](JsonObject newVar){}); //create a var of the same type. InitVar is not calling chFun which is good in this situation! - newVar = ui->initVar(tableVar, columnVarID, var["type"], false, nullptr - , [this, var](JsonObject newVar, uint8_t rowNr) { //chFun - if (rowNr != UINT8_MAX) { - //if this instance update directly, otherwise send over network - if (instances[rowNr].ip == WiFi.localIP()) { - mdl->setValue(var, mdl->getValue(newVar, rowNr).as()); //this will call sendDataWS (tbd...) - } else { - // https://randomnerdtutorials.com/esp32-http-get-post-arduino/ - HTTPClient http; - char serverPath[32]; - print->fFormat(serverPath, sizeof(serverPath)-1, "http://%s/json", instances[rowNr].ip.toString().c_str()); - http.begin(serverPath); - http.addHeader("Content-Type", "application/json"); - char postMessage[32]; - print->fFormat(postMessage, sizeof(postMessage)-1, "{\"%s\":%d}", var["id"].as(), mdl->getValue(newVar, rowNr).as()); - - USER_PRINTF("json post %s %s\n", serverPath, postMessage); - - int httpResponseCode = http.POST(postMessage); - - if (httpResponseCode>0) { - Serial.print("HTTP Response code: "); - Serial.println(httpResponseCode); - String payload = http.getString(); - Serial.println(payload); - } - else { - Serial.print("Error code: "); - Serial.println(httpResponseCode); + newVar = ui->initVar(tableVar, columnVarID, var["type"], false, [this, var](JsonObject newVar, uint8_t rowNr, uint8_t funType) { switch (funType) { //varFun + case f_ChangeFun: { + if (rowNr != UINT8_MAX) { + //if this instance update directly, otherwise send over network + if (instances[rowNr].ip == WiFi.localIP()) { + mdl->setValue(var, mdl->getValue(newVar, rowNr).as()); //this will call sendDataWS (tbd...) + } else { + // https://randomnerdtutorials.com/esp32-http-get-post-arduino/ + HTTPClient http; + char serverPath[32]; + print->fFormat(serverPath, sizeof(serverPath)-1, "http://%s/json", instances[rowNr].ip.toString().c_str()); + http.begin(serverPath); + http.addHeader("Content-Type", "application/json"); + char postMessage[32]; + print->fFormat(postMessage, sizeof(postMessage)-1, "{\"%s\":%d}", var["id"].as(), mdl->getValue(newVar, rowNr).as()); + + USER_PRINTF("json post %s %s\n", serverPath, postMessage); + + int httpResponseCode = http.POST(postMessage); + + if (httpResponseCode>0) { + Serial.print("HTTP Response code: "); + Serial.println(httpResponseCode); + String payload = http.getString(); + Serial.println(payload); + } + else { + Serial.print("Error code: "); + Serial.println(httpResponseCode); + } + // Free resources + http.end(); } - // Free resources - http.end(); } + else { + USER_PRINTF(" no rowNr!!"); + } + print->printJson(" ", var); + return true; } - else { - USER_PRINTF(" no rowNr!!"); - } - print->printJson(" ", var); - - }); + default: return false; + }}); if (newVar) { if (!var["min"].isNull()) newVar["min"] = var["min"]; if (!var["max"].isNull()) newVar["max"] = var["max"]; if (!var["log"].isNull()) newVar["log"] = var["log"]; - newVar["uiFun"] = var["uiFun"]; //copy the uiFun + newVar["fun"] = var["fun"]; //copy the uiFun } }); @@ -470,7 +503,7 @@ class UserModInstances:public SysModule { starModMessage.app.initVars(); //send stage values - mdl->findVars("stage", true, [&starModMessage](JsonObject var) { //uiFun + mdl->findVars("stage", true, [&starModMessage](JsonObject var) { //varFun starModMessage.app.setVar(var["id"], var["value"]); }); @@ -583,7 +616,7 @@ class UserModInstances:public SysModule { web->sendDataWs(responseObject); //send to all clients - print->printJson("updateNode updRow", responseObject); + // print->printJson("updateNode updRow", responseObject); } } //ip diff --git a/src/html_ui.h b/src/html_ui.h index d070f9c3..e8ec47f7 100644 --- a/src/html_ui.h +++ b/src/html_ui.h @@ -342,986 +342,986 @@ const uint8_t PAGE_index[] PROGMEM = { 0x95, 0x00, 0x9d, 0x11, 0x10, 0x88, 0x16, 0x28, 0x47, 0x1d, 0xaa, 0x1e, 0xb8, 0x31, 0xa6, 0xeb, 0x1f, 0x9c, 0x19, 0xb2, 0x6d, 0x76, 0x2c, 0xe9, 0xf3, 0x9a, 0x4c, 0xc6, 0x4f, 0x78, 0x6a, 0x14, 0x33, 0xcd, 0xc3, 0x00, 0x1d, 0x3a, 0xcc, 0x11, 0x4b, 0xc0, 0xa8, 0x64, 0x04, 0x90, 0x21, 0x9d, - 0x15, 0xd2, 0x4f, 0x40, 0x2e, 0xf4, 0xd5, 0xaa, 0xdd, 0x57, 0x2f, 0x13, 0x3c, 0x1b, 0x7c, 0xf1, - 0xd9, 0x33, 0xcf, 0x59, 0xdc, 0x37, 0x35, 0x1f, 0x17, 0x88, 0x98, 0x1c, 0x5a, 0x80, 0x49, 0x14, - 0x22, 0x45, 0x77, 0x8d, 0x41, 0xe6, 0x92, 0x12, 0x5d, 0x91, 0x09, 0x15, 0x3f, 0xbb, 0xd8, 0x46, - 0xcf, 0x5c, 0x43, 0x2d, 0x47, 0xb4, 0x7e, 0xe8, 0xe1, 0x4e, 0x49, 0xc9, 0x71, 0xcf, 0x5d, 0x7e, - 0x5c, 0xfc, 0x97, 0x33, 0xc4, 0xee, 0xdb, 0x5e, 0xb3, 0x59, 0xe7, 0x47, 0x93, 0x4d, 0x7a, 0x6d, - 0x3c, 0x23, 0x12, 0xac, 0x61, 0x0e, 0xf0, 0x8c, 0x5c, 0x71, 0x5c, 0x85, 0xfc, 0x42, 0xba, 0x73, - 0xc6, 0x9f, 0x66, 0xb0, 0x7a, 0x12, 0xbb, 0xad, 0xde, 0x22, 0x78, 0x43, 0xe5, 0x5e, 0x7a, 0x39, - 0x73, 0x74, 0x59, 0x32, 0x5b, 0x47, 0x9c, 0x13, 0x21, 0x3e, 0x8b, 0xdd, 0x02, 0x16, 0x93, 0xad, - 0x04, 0x66, 0x50, 0xad, 0x4f, 0x47, 0x78, 0x6f, 0x1c, 0xf4, 0x8b, 0x54, 0x17, 0x04, 0x37, 0xf0, - 0x9c, 0xc4, 0x93, 0xf6, 0xe0, 0x38, 0x2e, 0xcd, 0x65, 0xa2, 0x6d, 0x43, 0x21, 0x20, 0x30, 0x69, - 0xbc, 0x41, 0x61, 0x20, 0xa2, 0x61, 0x99, 0x54, 0x4d, 0xc3, 0xb2, 0x7f, 0xc9, 0xe1, 0xbe, 0xdf, - 0x0d, 0x7b, 0x11, 0xeb, 0x0a, 0x77, 0x82, 0x94, 0xb8, 0x91, 0x22, 0x3b, 0xa2, 0x39, 0xf4, 0x9b, - 0x80, 0x9e, 0xec, 0x44, 0x15, 0x8b, 0x32, 0x92, 0x16, 0x65, 0x7b, 0x8b, 0x18, 0xba, 0xd3, 0xa2, - 0x6c, 0xd7, 0x58, 0x94, 0xd0, 0x4d, 0x61, 0x51, 0xf2, 0x17, 0x65, 0x51, 0xaa, 0x84, 0x34, 0xb9, - 0x7e, 0x93, 0xa2, 0xd7, 0xa8, 0x6a, 0x62, 0x56, 0xfd, 0x1a, 0x4e, 0x52, 0xd5, 0xcf, 0x6b, 0x9d, - 0xae, 0x6a, 0x02, 0x75, 0xf7, 0x29, 0x37, 0x13, 0xf8, 0x0e, 0x70, 0xe7, 0x33, 0xbb, 0xcd, 0xd0, - 0x01, 0x27, 0xa7, 0x80, 0xdc, 0xd7, 0x95, 0xbc, 0xa5, 0x10, 0x82, 0xc7, 0xd1, 0x09, 0x71, 0x45, - 0x22, 0x40, 0x13, 0xfd, 0x8e, 0xa5, 0xb1, 0x6b, 0x7d, 0xe0, 0x06, 0xba, 0x3f, 0xe3, 0x07, 0xc5, - 0x70, 0x76, 0x0a, 0x35, 0x94, 0x4e, 0xfe, 0xdf, 0x55, 0x95, 0x57, 0xa8, 0x7a, 0x99, 0xf5, 0x26, - 0xc8, 0x11, 0xfd, 0x75, 0x6d, 0x70, 0x1f, 0xb6, 0xbf, 0x61, 0xcf, 0x52, 0xe1, 0x7f, 0x6e, 0x20, - 0x60, 0xdb, 0xf8, 0x61, 0x94, 0x51, 0x6d, 0x41, 0x72, 0x3e, 0x10, 0x4d, 0xea, 0xf0, 0xdd, 0x11, - 0x0f, 0xde, 0x68, 0x36, 0x27, 0xb0, 0x40, 0x5c, 0xf1, 0x0c, 0xeb, 0x83, 0x11, 0xc7, 0x23, 0xe7, - 0x60, 0x4e, 0x6c, 0x0f, 0xbf, 0x8f, 0xb1, 0x37, 0x4e, 0x56, 0xe9, 0x20, 0xc8, 0x9e, 0x00, 0x00, - 0x58, 0x61, 0x4e, 0xce, 0x1d, 0xd9, 0x31, 0xb1, 0x4a, 0xe0, 0xe5, 0xda, 0x0b, 0x98, 0xa0, 0x78, - 0x54, 0x90, 0x58, 0x73, 0x69, 0x11, 0x09, 0xfd, 0x13, 0x09, 0x8e, 0x17, 0x75, 0xa2, 0x4d, 0x16, - 0x4b, 0x0d, 0xd9, 0x9a, 0x9a, 0x71, 0xd7, 0xa2, 0x03, 0xce, 0x1a, 0x01, 0x28, 0xf5, 0x64, 0xa7, - 0x90, 0xc4, 0x3d, 0x27, 0x1c, 0x47, 0x77, 0x4f, 0xd6, 0x58, 0xa2, 0x10, 0x96, 0x43, 0xee, 0x9d, - 0x85, 0x28, 0xf7, 0x53, 0xe4, 0xf3, 0xb1, 0x44, 0xa4, 0xc3, 0x0f, 0x7a, 0xa3, 0x4d, 0xee, 0x25, - 0x5b, 0xb8, 0x4c, 0x79, 0x47, 0x8d, 0xf7, 0x0e, 0xc6, 0x6c, 0xee, 0x24, 0xf8, 0xad, 0x49, 0x95, - 0x8b, 0x61, 0x72, 0x5a, 0x6e, 0xe9, 0x49, 0x14, 0x09, 0x19, 0xce, 0xd9, 0xb0, 0x36, 0x16, 0xbe, - 0x44, 0xff, 0xcd, 0x63, 0x01, 0xce, 0x06, 0xed, 0x82, 0x99, 0x0c, 0x4d, 0xc3, 0x2c, 0xf6, 0x2a, - 0x5b, 0x40, 0xbc, 0x4f, 0x35, 0x02, 0xcd, 0x35, 0x30, 0x2f, 0x10, 0xcb, 0x7b, 0x93, 0xdd, 0xf8, - 0x24, 0x52, 0x22, 0xd5, 0x53, 0x4e, 0x64, 0x89, 0xb2, 0x49, 0x9e, 0x94, 0x53, 0x1b, 0x5b, 0x44, - 0x24, 0x9a, 0x34, 0xf3, 0x95, 0x34, 0x3b, 0x8e, 0x4f, 0xb8, 0x28, 0x13, 0xfd, 0xac, 0x41, 0xa8, - 0x38, 0xb1, 0x3c, 0x09, 0x56, 0xe9, 0x11, 0xb7, 0xb4, 0x26, 0x40, 0x11, 0x42, 0x2e, 0xf5, 0x41, - 0x1b, 0x26, 0x51, 0xca, 0xd9, 0x84, 0x2e, 0x4b, 0x19, 0x49, 0xd2, 0xad, 0x84, 0x0e, 0xfc, 0xc6, - 0x08, 0xe9, 0xf0, 0x0d, 0xac, 0xa3, 0x90, 0xf4, 0x07, 0xce, 0xdb, 0x6b, 0xce, 0x9f, 0x55, 0xd6, - 0x28, 0xe7, 0x58, 0xa6, 0xc3, 0x0f, 0x92, 0xe8, 0x1b, 0x11, 0x7a, 0xef, 0x15, 0x79, 0x45, 0x1b, - 0x91, 0x68, 0xba, 0xd1, 0x64, 0x70, 0x87, 0xfd, 0x84, 0x29, 0xd9, 0xe0, 0x32, 0x42, 0x65, 0x23, - 0x97, 0x0c, 0x50, 0xee, 0xdb, 0x6f, 0x92, 0xcc, 0xe9, 0x83, 0x25, 0x37, 0xe5, 0xd6, 0xc7, 0x61, - 0xf0, 0xc8, 0x33, 0xf1, 0x35, 0x0c, 0xd6, 0xdf, 0x9a, 0x27, 0xa7, 0x15, 0x31, 0xeb, 0x97, 0x30, - 0x8e, 0x20, 0xd1, 0xf6, 0xe7, 0x4b, 0x0c, 0x79, 0x02, 0x55, 0x3a, 0xd9, 0x62, 0x9a, 0x81, 0x56, - 0x1a, 0x9f, 0x5b, 0xd8, 0x82, 0xa0, 0x42, 0xa0, 0x0b, 0x5b, 0x7e, 0xfe, 0xb4, 0xe6, 0x9e, 0xe9, - 0xfc, 0xce, 0xfd, 0x87, 0x31, 0x6d, 0x82, 0x5e, 0xf8, 0xd9, 0xdb, 0xeb, 0x18, 0xf5, 0x33, 0x96, - 0xe6, 0xb7, 0xca, 0x27, 0x44, 0xec, 0x1f, 0x3d, 0x91, 0xe8, 0x96, 0xcc, 0x6b, 0xbc, 0x40, 0x51, - 0x87, 0x4a, 0x6a, 0xcc, 0x4e, 0x73, 0x79, 0x28, 0xb6, 0x61, 0xe7, 0x15, 0x5f, 0xc6, 0x66, 0xb5, - 0x92, 0x83, 0x4a, 0xaf, 0x58, 0x59, 0xbd, 0xdc, 0x94, 0xb8, 0x03, 0x12, 0x74, 0x49, 0xe9, 0xfb, - 0xa6, 0x38, 0x5f, 0xa4, 0x3b, 0xe9, 0xdc, 0xaa, 0xd2, 0xa8, 0xdc, 0x59, 0x61, 0x64, 0x00, 0x6f, - 0x6f, 0x1b, 0x56, 0x15, 0x7f, 0xf2, 0x44, 0xca, 0xba, 0x16, 0x79, 0x22, 0x5c, 0x82, 0x86, 0x3e, - 0x72, 0xab, 0xd1, 0x73, 0x40, 0xb6, 0x91, 0x06, 0x8a, 0xf6, 0x78, 0xd7, 0x34, 0x89, 0xb5, 0x3b, - 0x2e, 0x09, 0xdf, 0x52, 0x43, 0x74, 0x32, 0x0b, 0x9f, 0xe8, 0x28, 0xa0, 0x02, 0xc2, 0xbb, 0x67, - 0xff, 0xc9, 0x5e, 0xe2, 0xde, 0xf2, 0x14, 0xf8, 0xf5, 0xe7, 0x35, 0x5b, 0xad, 0x2c, 0xae, 0x0e, - 0xa9, 0x21, 0x38, 0xf9, 0x36, 0x2e, 0xcf, 0x68, 0x93, 0xa1, 0x40, 0x16, 0x1e, 0x89, 0xa2, 0x4a, - 0xa5, 0x95, 0x5f, 0xd2, 0xe2, 0x35, 0x27, 0x4d, 0x71, 0xf2, 0x59, 0x27, 0x2b, 0x53, 0x29, 0xf4, - 0xa8, 0x3f, 0xd1, 0x81, 0x55, 0x53, 0x7c, 0x71, 0x69, 0xea, 0x1b, 0x34, 0xc2, 0x6d, 0x22, 0xf6, - 0x68, 0x70, 0x7d, 0x14, 0xdd, 0x23, 0x4f, 0xa9, 0x6d, 0x01, 0x3d, 0xb0, 0x66, 0xcd, 0xc6, 0x48, - 0x5e, 0xd5, 0x8f, 0x98, 0x6c, 0x4a, 0x1b, 0x53, 0xed, 0x44, 0x27, 0x73, 0x64, 0x1c, 0x99, 0x29, - 0x66, 0x27, 0xf0, 0x8e, 0xb9, 0xd6, 0x23, 0x16, 0xcc, 0x32, 0xd8, 0x3a, 0xd5, 0xdb, 0x69, 0x51, - 0x88, 0xa7, 0x1a, 0xc6, 0xc1, 0x3d, 0xf1, 0x25, 0xae, 0x81, 0x4c, 0x83, 0x5b, 0xf3, 0x6a, 0x17, - 0x20, 0x46, 0x8b, 0x95, 0x5b, 0x0c, 0x15, 0x6d, 0x39, 0xb0, 0x97, 0xea, 0x13, 0x40, 0xe0, 0xef, - 0xa0, 0xe8, 0x73, 0xf0, 0x9b, 0x4d, 0xf5, 0xa8, 0xce, 0xf3, 0x8d, 0x6d, 0x26, 0x35, 0x84, 0xae, - 0xad, 0x0e, 0x4d, 0xa7, 0xd8, 0x4c, 0x24, 0x0b, 0xeb, 0x5a, 0x03, 0x4f, 0x82, 0x29, 0x29, 0xef, - 0xc8, 0xa6, 0xf6, 0xc4, 0x92, 0xfa, 0x71, 0x7a, 0xdc, 0x3d, 0x41, 0xe5, 0x19, 0xe7, 0x39, 0x3d, - 0xee, 0x9d, 0x80, 0x9d, 0x24, 0xb3, 0x12, 0x95, 0x5e, 0xa7, 0xbe, 0x92, 0x2c, 0x91, 0x9d, 0x7a, - 0xaa, 0x7b, 0x47, 0x6c, 0xd9, 0xd6, 0xd8, 0x5a, 0x4c, 0x4a, 0x27, 0xa6, 0xdb, 0x5a, 0x72, 0xb6, - 0xd6, 0xc2, 0x06, 0xd8, 0x9c, 0x4f, 0x2a, 0xac, 0x96, 0xad, 0xda, 0x8f, 0xd9, 0xd8, 0x68, 0x16, - 0x7d, 0x2a, 0x75, 0x57, 0xdf, 0x9d, 0x02, 0xc3, 0x82, 0x91, 0xcf, 0x47, 0xd0, 0x97, 0x93, 0x6f, - 0x99, 0x61, 0xb9, 0x3d, 0x5c, 0x9c, 0x49, 0x0f, 0x38, 0x7a, 0x79, 0xdb, 0xcb, 0x4d, 0x43, 0x2a, - 0x07, 0xb9, 0x2e, 0xfc, 0x61, 0x35, 0xe2, 0xb9, 0x4e, 0x3a, 0x07, 0xa0, 0x87, 0xf3, 0xc1, 0xf3, - 0xd1, 0xac, 0x51, 0xb7, 0x89, 0x5a, 0xad, 0x31, 0x0a, 0xe8, 0x5a, 0x9b, 0x11, 0xac, 0x9f, 0xec, - 0xc3, 0x34, 0x52, 0x27, 0x44, 0x32, 0x96, 0xbf, 0x14, 0x67, 0x82, 0x08, 0x1a, 0x75, 0x98, 0xaa, - 0x46, 0xd0, 0x16, 0x10, 0x18, 0xd4, 0xbd, 0xc1, 0xe3, 0x4b, 0xa0, 0x5e, 0x8c, 0x68, 0xc3, 0x0f, - 0xd4, 0xf2, 0x8a, 0x6a, 0x2c, 0x57, 0x0a, 0xc7, 0xe3, 0xfd, 0xab, 0x85, 0xf4, 0xa2, 0x2f, 0x5d, - 0x31, 0xa4, 0x9d, 0x81, 0xfe, 0x54, 0xd6, 0x77, 0x52, 0xaf, 0x7e, 0x32, 0x27, 0x51, 0xe9, 0xa8, - 0x80, 0x8b, 0x7b, 0x98, 0xfc, 0x64, 0xa5, 0x7f, 0x63, 0x81, 0x3e, 0x2e, 0xd5, 0xbc, 0x42, 0x48, - 0xc3, 0x2c, 0xe4, 0x07, 0xc1, 0x38, 0x6f, 0xb5, 0xc4, 0xfa, 0x1f, 0x07, 0xf7, 0xb4, 0x7d, 0x9c, - 0x9f, 0xb8, 0xe2, 0xd1, 0xc9, 0x0f, 0x65, 0x93, 0xed, 0xde, 0xa4, 0x3a, 0xd9, 0x89, 0x03, 0x84, - 0x03, 0xfa, 0x8f, 0x4e, 0xd3, 0xf9, 0x41, 0x3a, 0x91, 0xf3, 0xca, 0x27, 0x95, 0x07, 0xb4, 0x30, - 0xd7, 0xae, 0x48, 0xe6, 0xa7, 0xa0, 0xf4, 0x9c, 0xfb, 0xf5, 0xee, 0x9c, 0xef, 0x4b, 0x7f, 0xbd, - 0x44, 0x6a, 0x36, 0xb7, 0x2c, 0x0a, 0x68, 0x15, 0x14, 0x24, 0xb0, 0x6a, 0x2a, 0xca, 0xef, 0x06, - 0x79, 0xf0, 0xf3, 0x3b, 0xd9, 0x45, 0xb2, 0x88, 0x02, 0x3a, 0xc6, 0x73, 0x41, 0x4b, 0xdf, 0xb8, - 0xbe, 0x80, 0x1f, 0xa0, 0x1a, 0xd2, 0x4a, 0x35, 0xaa, 0xd1, 0xd7, 0x8b, 0x22, 0x7d, 0xd9, 0x6d, - 0xdd, 0xf2, 0xf7, 0x39, 0x32, 0x08, 0xbe, 0x1e, 0x27, 0x7e, 0x24, 0x7c, 0x4e, 0xb9, 0x35, 0xe5, - 0x23, 0x75, 0x2c, 0x44, 0xab, 0xd8, 0x27, 0x86, 0xa1, 0xed, 0xb7, 0xa2, 0xec, 0x11, 0x6c, 0x41, - 0xdf, 0x7c, 0x2d, 0x94, 0x96, 0x25, 0xb2, 0x57, 0x3a, 0x53, 0xa7, 0x38, 0x2c, 0xce, 0x4c, 0x43, - 0xf2, 0x2a, 0xbb, 0xc4, 0x4f, 0x55, 0x29, 0x5b, 0xa9, 0x77, 0xb2, 0x9c, 0xe7, 0x25, 0x74, 0x6c, - 0x16, 0x79, 0xe3, 0x33, 0x1e, 0x22, 0x01, 0x59, 0x64, 0x22, 0x4f, 0xbd, 0x97, 0x73, 0x44, 0xad, - 0xfa, 0xbd, 0x87, 0x02, 0x3a, 0xe2, 0x7c, 0x82, 0x67, 0xea, 0xd6, 0x7b, 0x99, 0xa9, 0x31, 0xfc, - 0x7c, 0xb3, 0xdc, 0x3e, 0x24, 0x94, 0x30, 0x5f, 0x5b, 0xb9, 0x54, 0xa5, 0xe5, 0xb1, 0x96, 0x86, - 0x53, 0x68, 0xd3, 0x31, 0x6b, 0xf8, 0x86, 0x61, 0x08, 0x82, 0x10, 0x00, 0x8b, 0x37, 0xa4, 0x08, - 0xae, 0xa4, 0x1f, 0xdf, 0x38, 0xb7, 0xce, 0x9f, 0x27, 0xca, 0xd7, 0x62, 0xdf, 0x31, 0xfc, 0xf1, - 0xc6, 0x9e, 0xa8, 0xae, 0x4d, 0x6e, 0xec, 0xe2, 0xe6, 0xb5, 0xe7, 0x2e, 0xca, 0xfd, 0x54, 0x36, - 0xb5, 0x8b, 0xf6, 0x4a, 0xa3, 0x40, 0x70, 0x61, 0x89, 0x44, 0x2c, 0x30, 0xfc, 0xf8, 0xf6, 0x32, - 0x49, 0x99, 0xf9, 0x4f, 0xe8, 0xb7, 0xc2, 0xf9, 0xd4, 0xa1, 0xf2, 0x2c, 0xf0, 0x14, 0xb7, 0xd8, - 0x56, 0xb0, 0xbc, 0x75, 0x5a, 0x92, 0x89, 0xf7, 0x28, 0xe5, 0x8a, 0x0a, 0xa4, 0xbf, 0xd2, 0xab, - 0x19, 0xf6, 0xbf, 0x44, 0x42, 0xdd, 0x2f, 0x20, 0x98, 0xa5, 0x34, 0x52, 0x0a, 0xfd, 0xf5, 0x98, - 0xb5, 0x5a, 0x27, 0xe3, 0xb8, 0x0c, 0x14, 0x12, 0x50, 0x4c, 0xdf, 0xbf, 0xe1, 0xa9, 0x4f, 0xf2, - 0xb1, 0x59, 0x78, 0xea, 0x95, 0x3f, 0x49, 0x74, 0xd4, 0x1a, 0x80, 0xff, 0x2c, 0x7d, 0xd5, 0xf3, - 0x37, 0x79, 0xba, 0x6c, 0x92, 0x6f, 0x00, 0xe8, 0x56, 0x92, 0x60, 0xd6, 0xee, 0x05, 0xd8, 0x01, - 0x1e, 0x92, 0x5e, 0xb1, 0x14, 0x11, 0x5b, 0x9c, 0xcb, 0xa4, 0x23, 0x68, 0xf2, 0x30, 0x2e, 0x65, - 0xd9, 0x25, 0x55, 0x9b, 0x37, 0xaf, 0xac, 0x4c, 0x0a, 0xac, 0x59, 0x4c, 0x1f, 0xe7, 0x36, 0x4c, - 0x4e, 0x51, 0xe5, 0x08, 0x9d, 0x28, 0xb5, 0x5a, 0xd5, 0x8f, 0x6f, 0xb5, 0x12, 0xe3, 0xb3, 0x38, - 0x31, 0x89, 0xf2, 0xd5, 0xe2, 0xb2, 0x99, 0xad, 0x72, 0x60, 0xe2, 0xc3, 0x38, 0x4a, 0x4d, 0x90, - 0x75, 0xc5, 0x11, 0x74, 0x7c, 0x62, 0xcb, 0xa3, 0x38, 0x80, 0xb7, 0x86, 0x86, 0xc3, 0x49, 0x91, - 0xac, 0x63, 0x56, 0xa4, 0x36, 0x0a, 0x7d, 0x4f, 0xb5, 0xa5, 0x48, 0xc9, 0xad, 0x8c, 0xbb, 0xf1, - 0x75, 0x03, 0x9f, 0xfc, 0x13, 0x78, 0x02, 0x29, 0x37, 0xa9, 0x08, 0x39, 0x4d, 0xc0, 0x2d, 0xe2, - 0xcf, 0x31, 0xff, 0x32, 0x9f, 0xfc, 0x3b, 0xf8, 0x23, 0x35, 0x52, 0x39, 0x85, 0xbe, 0x5d, 0x37, - 0xb4, 0xba, 0x26, 0xb9, 0x48, 0x37, 0xae, 0xc3, 0xfc, 0xc2, 0x48, 0x62, 0x26, 0xba, 0x80, 0x05, - 0x66, 0x00, 0xd3, 0x41, 0x59, 0x99, 0xdd, 0xdd, 0x8f, 0x53, 0xc5, 0x97, 0xfb, 0xb5, 0xb3, 0x53, - 0x94, 0xd0, 0x26, 0xc7, 0xb6, 0xbf, 0x64, 0x6e, 0xea, 0xf5, 0x6d, 0x3c, 0x9a, 0x6d, 0xda, 0x9b, - 0xe3, 0x55, 0x7a, 0x02, 0x15, 0x50, 0x0a, 0x80, 0xf6, 0x75, 0xc3, 0x31, 0x0e, 0x12, 0x61, 0xc0, - 0x24, 0xdc, 0x24, 0xab, 0x36, 0x7d, 0x16, 0x46, 0xa4, 0xc9, 0x6f, 0x6b, 0x19, 0xf3, 0x0d, 0xe1, - 0x3b, 0xc7, 0x73, 0xc3, 0x84, 0x39, 0x1f, 0x7d, 0x57, 0x67, 0x0c, 0x96, 0xeb, 0x93, 0x38, 0x78, - 0x71, 0xc3, 0x66, 0x28, 0x12, 0x4e, 0xf1, 0x0c, 0x9e, 0xbb, 0xb3, 0xf3, 0x60, 0xb9, 0xed, 0x88, - 0xfe, 0x7a, 0x07, 0x5b, 0x3b, 0x05, 0x28, 0xf0, 0x2f, 0xc7, 0x7f, 0x65, 0x97, 0x85, 0x1f, 0xb6, - 0xd5, 0xce, 0xb0, 0x47, 0xb6, 0xf6, 0x39, 0xe3, 0x31, 0x3b, 0xf1, 0x7c, 0xa7, 0xf4, 0x4e, 0xdf, - 0x36, 0xe2, 0xd1, 0xcf, 0xbb, 0xe0, 0x27, 0x50, 0x09, 0x7a, 0x34, 0x69, 0x6c, 0xfd, 0x14, 0x70, - 0x9d, 0xd2, 0x47, 0xdf, 0xc3, 0xd6, 0x6d, 0x20, 0x75, 0x4b, 0x1f, 0x2e, 0x73, 0xe7, 0x5c, 0xa9, - 0x60, 0xf5, 0xf3, 0xe4, 0xea, 0x87, 0x25, 0x7a, 0xc7, 0xd2, 0x87, 0xe9, 0x44, 0x1e, 0x3f, 0x0e, - 0x2f, 0x94, 0x7b, 0x1e, 0x6c, 0x44, 0x68, 0x3e, 0xe4, 0xe0, 0x8a, 0x6c, 0xe1, 0xfe, 0x26, 0x11, - 0x84, 0x67, 0xe6, 0xd9, 0x04, 0x8c, 0x00, 0x97, 0x76, 0x05, 0x2d, 0xbf, 0x70, 0x87, 0xe2, 0x3e, - 0xa1, 0x5d, 0x1c, 0x24, 0xf6, 0xd7, 0xd8, 0x84, 0xf6, 0x91, 0x81, 0x7e, 0x68, 0xba, 0x37, 0xd6, - 0x76, 0x32, 0x74, 0xa0, 0x71, 0xf4, 0x5f, 0x77, 0xac, 0xfb, 0xd6, 0x06, 0xcc, 0x02, 0x1b, 0x51, - 0xad, 0xcb, 0xc3, 0xc2, 0x5a, 0xd7, 0xab, 0x95, 0xfe, 0xe9, 0x83, 0xa7, 0x9d, 0x02, 0xb7, 0x6c, - 0xef, 0x70, 0x79, 0x0d, 0xba, 0xdf, 0x75, 0xd6, 0xa1, 0x23, 0xe6, 0x96, 0x3a, 0x0c, 0x5e, 0x99, - 0x55, 0x80, 0x87, 0x09, 0xe4, 0xf9, 0x30, 0xad, 0x00, 0xd9, 0xda, 0x19, 0xb0, 0x81, 0x2d, 0x8d, - 0x3d, 0x22, 0x1b, 0xee, 0xea, 0x0b, 0xcf, 0x28, 0x92, 0x52, 0xc5, 0xbf, 0xa9, 0x86, 0x49, 0x3b, - 0xe1, 0x91, 0x9c, 0xd6, 0xde, 0x60, 0xd8, 0x05, 0xbb, 0x58, 0x2f, 0x9b, 0x27, 0x89, 0x31, 0x0d, - 0xcf, 0x27, 0x93, 0x89, 0x49, 0xdf, 0x88, 0xe0, 0xae, 0xb9, 0x15, 0xad, 0x56, 0x0f, 0x97, 0xe6, - 0x95, 0xe9, 0xe6, 0x29, 0xa8, 0x8f, 0x0f, 0x35, 0x97, 0xa8, 0xb6, 0xa9, 0x2e, 0xac, 0xfd, 0xb1, - 0x89, 0xa7, 0xf8, 0x5f, 0xe3, 0xc4, 0x0a, 0x69, 0xb5, 0x5a, 0x99, 0xd3, 0x23, 0x48, 0x13, 0xaf, - 0x60, 0xf0, 0x7b, 0x5a, 0x19, 0x7e, 0x92, 0x9e, 0x17, 0xb0, 0xe5, 0x4e, 0x19, 0xbd, 0x95, 0x73, - 0xd4, 0xd9, 0xa0, 0x46, 0x17, 0x1d, 0x03, 0xd4, 0xd4, 0xd6, 0xba, 0x8f, 0xb6, 0x56, 0xee, 0xd9, - 0xe2, 0x5c, 0x3b, 0x50, 0x32, 0xcc, 0xb7, 0x0f, 0xf6, 0x2f, 0x7e, 0x08, 0xa5, 0xab, 0x5f, 0xda, - 0x8e, 0xb1, 0x8d, 0xf9, 0xa2, 0x61, 0x76, 0x8f, 0x26, 0xb6, 0x61, 0x00, 0xdc, 0xe3, 0xaf, 0x2b, - 0x35, 0xad, 0x44, 0x77, 0x8d, 0x4a, 0xb6, 0x05, 0x9e, 0x46, 0xb7, 0x4e, 0x0b, 0xd3, 0x0b, 0x0b, - 0xd7, 0x34, 0x8c, 0x34, 0xef, 0xdc, 0x78, 0xca, 0x78, 0xd0, 0x3d, 0x81, 0xf8, 0xc1, 0x24, 0x67, - 0xc0, 0xb0, 0x84, 0x6e, 0xb7, 0x94, 0xe9, 0x69, 0x65, 0xfe, 0xdc, 0x52, 0xa6, 0xaf, 0xca, 0x54, - 0x48, 0x17, 0x00, 0x33, 0x71, 0x9f, 0x49, 0x83, 0x3c, 0xe7, 0x2a, 0x98, 0x96, 0x12, 0x02, 0xc0, - 0x6f, 0x94, 0x40, 0x95, 0x12, 0xde, 0xa5, 0xae, 0xbe, 0xc3, 0xc3, 0xd4, 0x2a, 0x6f, 0x5c, 0x39, - 0x7b, 0x2a, 0xc8, 0xcf, 0x44, 0xee, 0xaf, 0x2f, 0x67, 0x9f, 0x9f, 0x32, 0xa4, 0x98, 0xa3, 0xef, - 0xd0, 0xdb, 0xf2, 0x03, 0x9d, 0xb0, 0x71, 0xc2, 0x8c, 0x0e, 0x49, 0x96, 0xd8, 0x40, 0xe9, 0xf0, - 0x24, 0xb0, 0x01, 0x59, 0x44, 0x3c, 0xc8, 0x3a, 0x13, 0xab, 0xda, 0x1a, 0xfa, 0x75, 0xee, 0x99, - 0x65, 0xa7, 0x5a, 0x87, 0x7f, 0x37, 0xe9, 0xc9, 0xef, 0x27, 0x37, 0xb2, 0xf9, 0xe7, 0x94, 0x9e, - 0xf6, 0x25, 0xb9, 0x66, 0x6e, 0x97, 0x3c, 0x47, 0x1b, 0x63, 0x93, 0x9f, 0xa5, 0x50, 0xc6, 0x4f, - 0x14, 0x16, 0xad, 0x7a, 0xd2, 0x41, 0x74, 0x2b, 0xbf, 0x3b, 0x23, 0xb2, 0x2b, 0x7f, 0xba, 0x5e, - 0xca, 0x12, 0x9f, 0xaf, 0xbb, 0xf2, 0x9b, 0x50, 0x6f, 0x03, 0xdc, 0x2d, 0xd1, 0x91, 0x2a, 0x5f, - 0x87, 0x7e, 0x79, 0x3d, 0x31, 0xea, 0x8d, 0xf2, 0xdb, 0x90, 0xc0, 0x36, 0x8a, 0xda, 0x35, 0x58, - 0x10, 0x21, 0x8a, 0x64, 0x2c, 0x58, 0x4f, 0xce, 0xa8, 0xa9, 0x85, 0x8e, 0xed, 0xce, 0x6f, 0x6c, - 0xd3, 0x35, 0xab, 0xc1, 0x64, 0xcd, 0x82, 0xd9, 0x49, 0x6f, 0xbf, 0xfa, 0x82, 0xd1, 0xe4, 0x3c, - 0x17, 0x3d, 0xf6, 0xb7, 0x73, 0xfc, 0x24, 0x8e, 0x4d, 0x4c, 0xd3, 0x55, 0x10, 0x5a, 0x3b, 0xc7, - 0x9f, 0x7e, 0xfe, 0xed, 0x64, 0xe7, 0xdc, 0x31, 0x0d, 0xda, 0x50, 0x15, 0xa9, 0xd6, 0x3f, 0x3e, - 0x5d, 0x2f, 0x7b, 0x6b, 0x7b, 0x65, 0x7d, 0xca, 0x5a, 0xfc, 0x11, 0xca, 0x30, 0xef, 0x10, 0x49, - 0xe8, 0x23, 0x4c, 0x98, 0x24, 0x1e, 0x12, 0x63, 0x78, 0x76, 0xe6, 0x28, 0x9d, 0xbd, 0xd0, 0x02, - 0x71, 0x55, 0xbf, 0x5b, 0x5c, 0x16, 0x1f, 0xa4, 0x88, 0x30, 0xa7, 0xc4, 0x96, 0xe4, 0xe2, 0xec, - 0xc0, 0x98, 0x5f, 0xf8, 0xb3, 0x0b, 0xfd, 0x64, 0x07, 0x46, 0x3f, 0xa8, 0x3f, 0xa7, 0x83, 0x61, - 0x0c, 0xe5, 0x37, 0x8e, 0xcf, 0xe1, 0xfd, 0x2d, 0xbc, 0xd7, 0x9f, 0xf4, 0xc3, 0xd2, 0x14, 0x4e, - 0x52, 0x2f, 0xfe, 0x82, 0x3e, 0x2e, 0xdf, 0x5a, 0x3e, 0x62, 0xc4, 0xda, 0x8b, 0xf2, 0xaf, 0x30, - 0x61, 0x5b, 0xf9, 0x64, 0x5e, 0x14, 0x4d, 0xe6, 0x74, 0x22, 0x48, 0xfb, 0xc8, 0xa0, 0x74, 0x2a, - 0xa1, 0x9c, 0xfe, 0x4f, 0x62, 0xe4, 0xbe, 0x12, 0xfa, 0x17, 0x0e, 0x8c, 0x14, 0x2a, 0xbb, 0x1e, - 0x84, 0xbb, 0x10, 0x2c, 0x0e, 0x42, 0x15, 0x28, 0xa0, 0x00, 0x3a, 0xdb, 0x51, 0xf6, 0x7f, 0xd3, - 0x84, 0x60, 0xfb, 0x41, 0xb9, 0xf5, 0xe0, 0x4b, 0x27, 0xaf, 0xf2, 0x6d, 0xaf, 0x1a, 0x39, 0xe2, - 0x2a, 0xbf, 0x08, 0x33, 0xb1, 0x4a, 0x45, 0xc8, 0x13, 0xcf, 0xec, 0x76, 0x86, 0xa6, 0xa3, 0xa8, - 0xdf, 0xc3, 0x22, 0xe2, 0xeb, 0xcc, 0x0f, 0xb4, 0x90, 0x81, 0x2b, 0xb0, 0xb3, 0x33, 0x60, 0x1b, - 0x4f, 0xa2, 0x08, 0x38, 0x6e, 0xe0, 0x99, 0x3c, 0xb6, 0x51, 0xa5, 0x0c, 0xcc, 0x0a, 0x1d, 0x55, - 0xa1, 0x03, 0xf6, 0x3b, 0xf8, 0x55, 0x25, 0xc8, 0x23, 0xec, 0x4e, 0xc9, 0xdc, 0x8a, 0xcc, 0xaa, - 0x80, 0xc7, 0x4b, 0x3b, 0xac, 0xd2, 0xae, 0x7d, 0x77, 0x3f, 0xb0, 0xd4, 0xc3, 0x58, 0x76, 0x14, - 0x94, 0x4e, 0xcf, 0x20, 0x94, 0xbc, 0xf5, 0x5b, 0x49, 0x28, 0x95, 0x91, 0xf7, 0x84, 0xfa, 0xf2, - 0x6f, 0xa7, 0x5f, 0x7d, 0xef, 0x4c, 0xec, 0xde, 0x98, 0x44, 0x5e, 0xb4, 0xb4, 0xee, 0xcc, 0xad, - 0x9b, 0x3e, 0x98, 0x7c, 0x6c, 0x75, 0x0b, 0xf6, 0x5e, 0x20, 0xa5, 0x70, 0xdc, 0xa1, 0x6c, 0x2e, - 0x0f, 0x1b, 0xd3, 0x6b, 0xdb, 0x44, 0xea, 0xd6, 0xbe, 0x11, 0xaf, 0x39, 0x2a, 0xa8, 0x07, 0xed, - 0xac, 0x90, 0xb9, 0x22, 0xa5, 0xca, 0x06, 0x9f, 0x18, 0x45, 0x4d, 0x35, 0xa2, 0xf6, 0x9a, 0x6a, - 0x95, 0xf1, 0x6f, 0xd4, 0x4c, 0xe6, 0x2a, 0x00, 0xdf, 0xc6, 0xc1, 0xc5, 0x82, 0x68, 0x1b, 0x1e, - 0x91, 0xed, 0x16, 0x14, 0xe1, 0x02, 0x51, 0x45, 0xb7, 0x50, 0x99, 0xf8, 0xf2, 0x3e, 0xf2, 0x54, - 0x41, 0xed, 0xf8, 0x30, 0x7e, 0x38, 0xac, 0x33, 0x9d, 0x68, 0x13, 0xcf, 0x90, 0x24, 0x68, 0xb0, - 0x38, 0xba, 0xa9, 0x7d, 0xba, 0x68, 0x4f, 0x2a, 0xa6, 0x75, 0x12, 0x01, 0xc2, 0x4c, 0x51, 0xa9, - 0xbc, 0xd1, 0x66, 0xbb, 0x94, 0xa8, 0x49, 0xe2, 0x30, 0xce, 0xc0, 0x98, 0x7e, 0xca, 0x80, 0xd6, - 0xa0, 0x27, 0x5e, 0x27, 0x06, 0xea, 0x3f, 0x0a, 0xa7, 0x11, 0xc8, 0x45, 0x0d, 0x11, 0xea, 0x34, - 0x51, 0x4d, 0xe0, 0xd5, 0xaa, 0x3d, 0x4d, 0x67, 0x2b, 0x70, 0x2f, 0x8b, 0x47, 0xc5, 0x58, 0x52, - 0xbe, 0xc5, 0x5a, 0x91, 0xb3, 0xbc, 0x64, 0xf9, 0x45, 0x12, 0xe0, 0xa9, 0xc8, 0xdc, 0x5c, 0x8b, - 0x18, 0x7d, 0x24, 0x37, 0x93, 0xcf, 0xa0, 0x34, 0x52, 0xcc, 0x0b, 0xf4, 0x5a, 0x58, 0xe6, 0x77, - 0x68, 0xfd, 0x9a, 0xad, 0xa8, 0x65, 0x92, 0x17, 0xef, 0x0c, 0x55, 0x0d, 0xfc, 0x82, 0xc5, 0xb4, - 0x8b, 0x5a, 0xcb, 0xdc, 0xf2, 0xf1, 0xcb, 0x58, 0x58, 0x58, 0xf4, 0x9d, 0x78, 0x69, 0xa5, 0x80, - 0x81, 0x09, 0x4a, 0xa4, 0x63, 0xbe, 0xc0, 0x0f, 0x68, 0x0d, 0xe8, 0x2f, 0x87, 0x01, 0x61, 0x8b, - 0x65, 0x66, 0x41, 0x42, 0x00, 0xac, 0xfa, 0xd8, 0x8f, 0xa2, 0x5b, 0x6e, 0xd1, 0xad, 0xcb, 0x12, - 0xa1, 0x7e, 0x73, 0x4c, 0x3b, 0x7b, 0x20, 0x37, 0xd4, 0xe8, 0xa0, 0x45, 0x83, 0xe9, 0xa1, 0x02, - 0xc4, 0x97, 0xa6, 0x57, 0xc0, 0x87, 0x30, 0xaa, 0x81, 0x46, 0x9e, 0x33, 0xce, 0x16, 0x32, 0xb9, - 0xc1, 0x80, 0x36, 0xa1, 0xe3, 0x6f, 0xda, 0x28, 0xe2, 0x64, 0x31, 0x7d, 0xb7, 0xbb, 0xe5, 0x98, - 0x93, 0x02, 0x56, 0x78, 0x22, 0xfc, 0xda, 0x63, 0xc8, 0xba, 0xf3, 0xf5, 0xa4, 0xc3, 0x83, 0x50, - 0x7b, 0x51, 0xd9, 0x7d, 0xab, 0xbb, 0x68, 0x6d, 0x76, 0xe0, 0xeb, 0xec, 0x48, 0x45, 0x13, 0xf2, - 0xb7, 0x34, 0x05, 0x58, 0x83, 0xb6, 0x66, 0xf2, 0xcb, 0xd9, 0xfe, 0x58, 0x3e, 0x1e, 0x8c, 0xd4, - 0x23, 0x86, 0x0e, 0x51, 0x45, 0xf0, 0xf3, 0x77, 0xac, 0x52, 0x14, 0xbc, 0x0f, 0x72, 0x01, 0xc4, - 0x96, 0xe6, 0x1a, 0x91, 0x08, 0x36, 0x99, 0x5d, 0x62, 0xe4, 0x35, 0x8d, 0xcc, 0x25, 0x88, 0x75, - 0x27, 0x81, 0xe8, 0x44, 0x21, 0x13, 0xfa, 0x06, 0xff, 0x66, 0xbd, 0x86, 0x8b, 0x68, 0x93, 0xb4, - 0x6d, 0x46, 0xb7, 0x16, 0xc5, 0x4f, 0x41, 0xbf, 0xb0, 0xd1, 0xdb, 0xec, 0xcb, 0x0a, 0x82, 0xc0, - 0xfc, 0x92, 0x82, 0xcc, 0xae, 0xf2, 0xd1, 0xa2, 0x80, 0x4e, 0x9f, 0x65, 0x31, 0x05, 0x64, 0xd8, - 0x2d, 0x9f, 0x53, 0x8a, 0x74, 0xba, 0x10, 0x67, 0x02, 0xaa, 0x81, 0x11, 0xf2, 0x8d, 0x32, 0x39, - 0x96, 0xa1, 0x63, 0x9e, 0x08, 0x2e, 0x58, 0xb6, 0x76, 0xae, 0x6c, 0xde, 0xd2, 0x21, 0x17, 0x9d, - 0xa2, 0x6c, 0xed, 0x2c, 0x22, 0x7e, 0xa6, 0x4c, 0x33, 0x02, 0x75, 0x9b, 0xcd, 0xe2, 0xf3, 0xdb, - 0x72, 0x11, 0x6c, 0x14, 0x18, 0x03, 0x21, 0x8f, 0x17, 0x14, 0x67, 0xdd, 0xb7, 0x15, 0xa4, 0xf9, - 0xe0, 0x25, 0x8b, 0xef, 0x76, 0xb7, 0xb4, 0x49, 0xb3, 0xcc, 0xcb, 0x4a, 0x3e, 0x40, 0xa7, 0x3c, - 0xb9, 0x0f, 0x9f, 0x8a, 0xe1, 0x21, 0x15, 0x41, 0x60, 0x8d, 0xdc, 0xc9, 0xe9, 0xfb, 0x72, 0x48, - 0x5e, 0xe7, 0x2a, 0x35, 0x72, 0xa2, 0x66, 0xd3, 0x6f, 0xb5, 0xd6, 0xa5, 0x73, 0x96, 0x72, 0x64, - 0x93, 0x12, 0xfa, 0xfb, 0x60, 0xc1, 0x94, 0xa6, 0xa3, 0xe5, 0x3b, 0xdb, 0x77, 0xe8, 0x6b, 0xe8, - 0x59, 0x44, 0x68, 0x80, 0x29, 0x40, 0x53, 0xf6, 0x08, 0x96, 0x11, 0x0c, 0x01, 0x75, 0x9b, 0x97, - 0x39, 0xbb, 0x94, 0xe7, 0x65, 0x51, 0xa0, 0xab, 0xad, 0x05, 0xf9, 0x20, 0xa2, 0xb8, 0x68, 0x30, - 0x32, 0x4e, 0x6e, 0x54, 0xa7, 0x2d, 0x3f, 0x2e, 0x95, 0xae, 0x60, 0x26, 0x37, 0x31, 0xea, 0xb2, - 0x3d, 0x3d, 0x14, 0x8c, 0xf2, 0x15, 0x6d, 0xe8, 0x1a, 0x9a, 0x17, 0xa9, 0xfc, 0x81, 0x47, 0x99, - 0x05, 0xcb, 0x35, 0x2a, 0x4e, 0x4f, 0xe3, 0xa1, 0xe9, 0x2b, 0x1e, 0xa8, 0x62, 0xf3, 0x0b, 0x5c, - 0xbd, 0x9e, 0xc2, 0x85, 0x56, 0x91, 0xa0, 0x95, 0x1e, 0xf1, 0xad, 0x95, 0x8b, 0x60, 0x33, 0x32, - 0x38, 0x87, 0x8e, 0xcd, 0xf3, 0x32, 0x36, 0xe9, 0x58, 0x99, 0x89, 0xb2, 0xce, 0x24, 0xb4, 0x6c, - 0x4e, 0x46, 0x4d, 0xa8, 0x22, 0xc3, 0xcf, 0x6e, 0xe3, 0xd9, 0xe1, 0x37, 0x0d, 0x2d, 0xb6, 0xa4, - 0x8c, 0xd1, 0x65, 0x82, 0xb0, 0x63, 0x20, 0x93, 0x58, 0x50, 0x58, 0xa6, 0xdc, 0xaa, 0x77, 0xf2, - 0xda, 0x4c, 0x15, 0x44, 0x28, 0xf5, 0xb8, 0x08, 0x03, 0xd9, 0x9b, 0x4f, 0xea, 0x8f, 0x28, 0x02, - 0xd6, 0x09, 0x80, 0x63, 0x3a, 0xe4, 0xce, 0xb2, 0xcb, 0xac, 0x2d, 0xb6, 0xa7, 0x4f, 0x4c, 0xdb, - 0xbd, 0x4a, 0xc2, 0xc0, 0xe8, 0x3a, 0x99, 0x17, 0x4f, 0x34, 0x5f, 0x76, 0x5c, 0x1c, 0xc3, 0xb2, - 0x5d, 0x40, 0xa3, 0xd8, 0xe7, 0x03, 0x3a, 0x09, 0xcf, 0x63, 0x2b, 0x83, 0x99, 0x8b, 0xce, 0x3a, - 0xd8, 0xd4, 0x4b, 0x30, 0x6c, 0xdf, 0xf2, 0xd6, 0x56, 0x2b, 0x90, 0xa4, 0x63, 0x1e, 0x3b, 0xaa, - 0x91, 0xaf, 0x56, 0x8d, 0x06, 0x18, 0x08, 0x17, 0xe1, 0x25, 0xce, 0xb7, 0x50, 0x8a, 0x7c, 0xef, - 0xb3, 0x15, 0x36, 0x9b, 0x18, 0x01, 0x83, 0x87, 0xf7, 0x05, 0xd9, 0x2c, 0x93, 0x52, 0x06, 0x64, - 0x72, 0x25, 0x3e, 0x0f, 0x4b, 0x3c, 0xd0, 0x87, 0x51, 0x8b, 0x98, 0x7c, 0xb6, 0xc4, 0x93, 0xed, - 0xd2, 0x1f, 0xa5, 0x5e, 0x65, 0x1d, 0xbc, 0x73, 0x6e, 0x22, 0x6a, 0xe3, 0xb3, 0xed, 0xa6, 0xce, - 0x19, 0xa6, 0xfb, 0x73, 0xd4, 0x49, 0xd3, 0x10, 0xd8, 0x0b, 0xb5, 0xb6, 0x80, 0xc4, 0x38, 0x81, - 0xd5, 0x44, 0x02, 0x7b, 0xd1, 0x6c, 0xe6, 0x05, 0xea, 0xef, 0xc1, 0x19, 0x55, 0x3b, 0x11, 0x07, - 0x09, 0x17, 0xe4, 0x21, 0x84, 0x84, 0xd5, 0x8a, 0x68, 0x42, 0xdb, 0x64, 0xa6, 0x64, 0xdc, 0xac, - 0xe4, 0xed, 0x06, 0x1e, 0xc2, 0x2d, 0xe2, 0x7c, 0xac, 0x56, 0x60, 0x7b, 0x4c, 0x3d, 0x7c, 0x9f, - 0x27, 0xd1, 0x2d, 0x86, 0xb4, 0x9a, 0xf0, 0x6c, 0xf9, 0x0a, 0x2a, 0x90, 0x5d, 0xfd, 0x98, 0xe0, - 0x2f, 0xb3, 0x7f, 0xfc, 0xc3, 0xe0, 0x6a, 0xa2, 0x81, 0x11, 0x7f, 0xb8, 0x5e, 0xe3, 0x4f, 0x81, - 0xef, 0xe3, 0x39, 0x59, 0x59, 0x95, 0xf6, 0xa6, 0x03, 0x63, 0xe6, 0xc7, 0x18, 0x8c, 0x0a, 0x66, - 0x07, 0x34, 0xbb, 0xc0, 0xf8, 0xc7, 0x3f, 0x4c, 0xc7, 0xa4, 0x2b, 0x21, 0xae, 0xf9, 0x6d, 0x3e, - 0xfb, 0xea, 0xae, 0xa2, 0x6f, 0x07, 0xfb, 0x3d, 0x74, 0x47, 0x83, 0xbe, 0x7e, 0x95, 0x7c, 0x66, - 0x4f, 0xa3, 0x64, 0xfa, 0xf1, 0xfd, 0xab, 0xcc, 0x9d, 0x3b, 0x71, 0x82, 0x91, 0x97, 0xc8, 0x2a, - 0x7c, 0xcf, 0x60, 0x64, 0xe7, 0xe7, 0x2c, 0xcd, 0xdc, 0x0b, 0x87, 0xc5, 0xc0, 0xbd, 0x67, 0xe8, - 0x41, 0x64, 0xe7, 0x29, 0xc6, 0xb6, 0xbc, 0x5c, 0x7b, 0x59, 0xa1, 0x85, 0x7c, 0xde, 0x74, 0xaf, - 0x78, 0x85, 0x7b, 0x05, 0x29, 0x05, 0xb4, 0x06, 0x97, 0x09, 0xcc, 0x5c, 0x57, 0xce, 0xd3, 0x80, - 0x7a, 0x2a, 0x46, 0xf2, 0x82, 0x62, 0xe5, 0xda, 0x93, 0x6a, 0x8a, 0x7b, 0x7c, 0xe2, 0xdc, 0x7a, - 0xd7, 0x9a, 0x36, 0x3c, 0xcb, 0xb2, 0xb6, 0x88, 0xaf, 0x85, 0x82, 0xaf, 0x94, 0x87, 0xae, 0x7b, - 0x2d, 0xf3, 0xca, 0x6b, 0xc4, 0xfe, 0x55, 0x08, 0x8a, 0x7e, 0x92, 0xd2, 0x45, 0x25, 0x4f, 0xd0, - 0xde, 0x46, 0xb3, 0xaf, 0xd9, 0x6c, 0xd4, 0x65, 0x61, 0x38, 0x38, 0x50, 0x2d, 0x77, 0x5e, 0x04, - 0xe7, 0xec, 0xd3, 0xce, 0xa7, 0xa0, 0xf5, 0xa9, 0x03, 0x3f, 0x3b, 0xb6, 0xf3, 0x40, 0x5f, 0x60, - 0x78, 0x79, 0xda, 0xc7, 0xf7, 0x2f, 0xdd, 0xd3, 0x07, 0xcb, 0x8d, 0x48, 0x50, 0x6b, 0xdc, 0x58, - 0x2a, 0xed, 0x28, 0xad, 0xf5, 0x52, 0x7e, 0x7e, 0x41, 0x31, 0xb3, 0x0b, 0x90, 0x77, 0x40, 0xa9, - 0xdf, 0xcc, 0xcf, 0x30, 0xd2, 0x98, 0xd5, 0x75, 0x36, 0x73, 0x80, 0x5d, 0x83, 0x7c, 0x08, 0xd8, - 0xcd, 0xdb, 0x33, 0xaa, 0xdc, 0xea, 0xd9, 0xee, 0x46, 0xa9, 0xf5, 0xa9, 0x73, 0xe3, 0xe1, 0x3e, - 0x8b, 0xc7, 0xcd, 0xdb, 0xdf, 0xfd, 0x2b, 0x9f, 0xd3, 0xb4, 0x09, 0xa4, 0x06, 0x33, 0x2e, 0x42, - 0x79, 0xf1, 0x95, 0x0d, 0xef, 0xb4, 0x93, 0x8d, 0xd4, 0x60, 0xc1, 0x74, 0x39, 0x4b, 0x9c, 0x40, - 0x37, 0x5f, 0xf3, 0x1d, 0x8b, 0x65, 0xf6, 0x39, 0x9c, 0xbb, 0x4f, 0x70, 0xda, 0x37, 0x4e, 0xce, - 0x3d, 0xb1, 0x8b, 0xc5, 0xf4, 0x04, 0xd7, 0x1e, 0x6a, 0xea, 0x74, 0x53, 0xc4, 0x7b, 0x3c, 0x87, - 0xf3, 0xc0, 0xee, 0xe0, 0x01, 0x0c, 0x7b, 0xfc, 0xc4, 0xcb, 0x51, 0xef, 0xcf, 0x12, 0x64, 0x90, - 0xde, 0x21, 0x00, 0xee, 0x81, 0x30, 0x3c, 0x66, 0xea, 0xc4, 0xd4, 0x09, 0xac, 0x4b, 0xba, 0x1c, - 0x32, 0xcf, 0x7e, 0x0e, 0x73, 0x8c, 0x88, 0xb4, 0x5a, 0xe5, 0x58, 0x46, 0x3b, 0xda, 0x54, 0xa5, - 0xaf, 0x27, 0x45, 0xdf, 0xd8, 0xe5, 0x7b, 0x76, 0xfe, 0xe2, 0x66, 0x0e, 0x20, 0xc9, 0xde, 0x72, - 0xe0, 0xf5, 0x56, 0x2e, 0x57, 0xe5, 0x0b, 0x8c, 0xb8, 0x53, 0xdd, 0xcf, 0xc9, 0x2f, 0xd2, 0xe4, - 0xda, 0x60, 0x6b, 0xdb, 0x39, 0xc2, 0x3a, 0x4b, 0x8b, 0x78, 0x5b, 0xca, 0x90, 0x3d, 0xbd, 0xe0, - 0xcb, 0x17, 0xd6, 0xbe, 0xf0, 0xb1, 0x66, 0xfe, 0x99, 0x9f, 0x86, 0xc5, 0x0e, 0x8c, 0x58, 0xdf, - 0x2f, 0x6c, 0xe8, 0xc4, 0x09, 0xb0, 0xa7, 0x62, 0x5d, 0xbc, 0xd5, 0x8d, 0xe2, 0x89, 0x69, 0x70, - 0x8e, 0x07, 0x8b, 0xf3, 0x2c, 0x4d, 0x2e, 0xc1, 0x30, 0x61, 0xae, 0x69, 0x92, 0xcb, 0xfb, 0x95, - 0xd0, 0x9b, 0x1a, 0x21, 0x1e, 0xc3, 0xd8, 0x7e, 0xce, 0xbc, 0xc4, 0xc7, 0x39, 0x89, 0xb7, 0x91, - 0xc1, 0x62, 0x38, 0xc9, 0x22, 0x83, 0x77, 0x03, 0xf3, 0x20, 0xf2, 0xc0, 0xae, 0xfb, 0x7c, 0x9c, - 0xb2, 0x48, 0xd4, 0x00, 0xe3, 0x3c, 0x82, 0x55, 0xce, 0x33, 0x8b, 0x2f, 0x1d, 0x42, 0xa9, 0xa9, - 0x95, 0xc3, 0x60, 0x71, 0xbc, 0x91, 0x4e, 0xf8, 0x55, 0x70, 0x6d, 0x01, 0x09, 0x3a, 0xb4, 0x29, - 0x6e, 0x16, 0x1d, 0xc7, 0x54, 0xc9, 0x48, 0x09, 0x32, 0x50, 0x0d, 0xe4, 0xbd, 0x42, 0x58, 0xf8, - 0xf1, 0x65, 0x7e, 0x12, 0x96, 0xb7, 0x69, 0x36, 0x8a, 0xd8, 0x35, 0x79, 0x87, 0xcd, 0xe9, 0x64, - 0x33, 0x2a, 0x5e, 0x1c, 0xc8, 0x67, 0xde, 0xce, 0xa7, 0x4f, 0x3b, 0xe7, 0x05, 0xfe, 0x7f, 0x17, - 0xfd, 0xb4, 0x7b, 0x1e, 0xed, 0x63, 0xc9, 0x15, 0xe3, 0x02, 0x10, 0xd2, 0xa6, 0xa5, 0x48, 0x64, - 0xf2, 0xfb, 0x40, 0x49, 0xb3, 0x74, 0x2f, 0x09, 0xb7, 0x30, 0xd5, 0x0c, 0x82, 0xf9, 0x5b, 0x28, - 0x0b, 0x1f, 0x71, 0x5d, 0x15, 0xdf, 0xd9, 0xd1, 0x1b, 0xee, 0x1a, 0x5a, 0xb8, 0x13, 0xe2, 0xbe, - 0xb6, 0xcc, 0xce, 0x0e, 0x4c, 0x2f, 0x24, 0x6a, 0x0a, 0x06, 0x2f, 0x25, 0xa8, 0x35, 0xa5, 0xe3, - 0xd2, 0x02, 0x9e, 0x6f, 0xf1, 0x7e, 0x13, 0x3d, 0x61, 0xc2, 0x2d, 0xcb, 0xb4, 0x15, 0x1f, 0xb6, - 0xfb, 0xa4, 0x75, 0xe6, 0x8a, 0x1b, 0xd0, 0x60, 0xd2, 0x49, 0xec, 0xd2, 0x43, 0xbc, 0x5a, 0xc5, - 0x87, 0xe9, 0x24, 0x75, 0x63, 0xdb, 0x86, 0xac, 0x46, 0x69, 0x9c, 0x9f, 0x3e, 0xd1, 0x46, 0x3c, - 0xea, 0x3e, 0xd2, 0x91, 0xfd, 0xcc, 0x41, 0x7e, 0x61, 0x3b, 0x72, 0xf1, 0xe1, 0xb5, 0x2d, 0xf2, - 0xb9, 0x27, 0x03, 0x27, 0x19, 0x45, 0x6f, 0x79, 0x09, 0x6b, 0xc0, 0x67, 0x5a, 0x24, 0x42, 0xcd, - 0x4e, 0x51, 0xdd, 0x2a, 0xea, 0xaf, 0x56, 0x32, 0xa3, 0xa7, 0x67, 0xf4, 0x21, 0xa3, 0x4f, 0x53, - 0xa0, 0x4c, 0x4a, 0xd6, 0xf2, 0x08, 0x90, 0xd5, 0xaa, 0xb7, 0x2d, 0xa3, 0x00, 0x51, 0x47, 0xda, - 0x56, 0xc0, 0xf8, 0x49, 0x42, 0x02, 0x8e, 0x2a, 0xe6, 0xc7, 0xa9, 0xfa, 0x7c, 0xe2, 0x64, 0x42, - 0x67, 0x07, 0x5c, 0x24, 0xa0, 0x74, 0x62, 0xc5, 0xaa, 0x1d, 0x55, 0xa4, 0x8f, 0x33, 0x10, 0x8b, - 0xd4, 0xb8, 0x68, 0x9b, 0x33, 0x57, 0xdb, 0x2d, 0xaa, 0xec, 0xe9, 0x2f, 0xaa, 0xfe, 0x46, 0xa7, - 0x27, 0x25, 0x24, 0xd7, 0x21, 0x56, 0x70, 0xbd, 0xe2, 0xc0, 0x28, 0xe2, 0x56, 0xc5, 0xa1, 0x56, - 0x05, 0xe3, 0x3a, 0x6e, 0x0f, 0xb4, 0x15, 0xe2, 0xc1, 0x74, 0xbe, 0x0b, 0xdf, 0xee, 0x69, 0x91, - 0x3c, 0x61, 0x11, 0x1f, 0x28, 0xb3, 0x19, 0xe3, 0x79, 0xca, 0x05, 0xe0, 0xf3, 0x35, 0x47, 0x13, - 0x84, 0x66, 0x7c, 0xf9, 0xb5, 0xa5, 0xcd, 0x18, 0xbe, 0xe2, 0x9c, 0xc1, 0x2f, 0xbe, 0x49, 0x0e, - 0x01, 0x15, 0x40, 0x30, 0xcf, 0xf1, 0xf3, 0xb2, 0x16, 0x19, 0xfb, 0x71, 0x1e, 0xc6, 0x0b, 0xb6, - 0x56, 0x28, 0xe7, 0xcd, 0x60, 0xbd, 0x9e, 0x5e, 0x6f, 0x09, 0xc5, 0x7b, 0x45, 0x71, 0x72, 0x1a, - 0x8c, 0x55, 0x8d, 0x93, 0xb1, 0x0d, 0x50, 0x8e, 0x7d, 0x11, 0x60, 0xa1, 0x48, 0xc7, 0x38, 0xb3, - 0xfc, 0xd0, 0x7b, 0x26, 0x90, 0xe1, 0x43, 0xc7, 0xf8, 0xd9, 0x2b, 0x8e, 0x58, 0x1e, 0x1c, 0x20, - 0x9a, 0x07, 0x51, 0x5e, 0x2d, 0x4a, 0x1f, 0x22, 0x6f, 0x45, 0xb6, 0xdd, 0x0a, 0x3b, 0xbf, 0x27, - 0x61, 0x6c, 0x99, 0xa6, 0x7e, 0xc0, 0xe2, 0x37, 0x3a, 0x90, 0x9d, 0x4a, 0x7a, 0x8b, 0x3d, 0x71, - 0x61, 0x4a, 0xe6, 0x96, 0xd5, 0x5f, 0xd0, 0xb6, 0xd3, 0x8e, 0xc8, 0xc2, 0x9b, 0x08, 0x92, 0x39, - 0xab, 0x2d, 0xc2, 0x73, 0xec, 0x35, 0x3f, 0x38, 0x2a, 0x2a, 0x34, 0x9b, 0x1f, 0x8a, 0x17, 0x98, - 0x5e, 0xf9, 0x84, 0x1d, 0xe3, 0x37, 0xd5, 0xbc, 0x8e, 0x9c, 0xd0, 0xcc, 0x08, 0xd1, 0xa3, 0x2a, - 0x52, 0x05, 0x60, 0xa1, 0xf7, 0x11, 0x54, 0xf0, 0xdc, 0x1e, 0x63, 0x4b, 0x3c, 0xeb, 0x38, 0xc3, - 0xa3, 0x74, 0xe2, 0x39, 0x84, 0x49, 0xb0, 0xb4, 0x37, 0xb0, 0x83, 0x6c, 0x6a, 0x7f, 0x2d, 0x39, - 0x5d, 0x31, 0xe6, 0x97, 0x9c, 0x2d, 0xe1, 0x77, 0x50, 0x48, 0x14, 0x52, 0x5c, 0x89, 0xd0, 0x6f, - 0x72, 0x65, 0x8e, 0x83, 0x44, 0x21, 0xa5, 0xd0, 0x4c, 0x30, 0x40, 0x1a, 0x8e, 0x0d, 0xb7, 0xb7, - 0x8c, 0xdc, 0x56, 0x8d, 0x5f, 0x83, 0x71, 0xcf, 0x2c, 0x9a, 0x1a, 0x8b, 0xda, 0x28, 0x53, 0xb0, - 0x93, 0xb6, 0xe9, 0x8b, 0x26, 0x05, 0xc3, 0xfb, 0x32, 0x6b, 0xe4, 0x20, 0x11, 0x07, 0x2c, 0xa6, - 0x02, 0x96, 0x16, 0x7d, 0x88, 0xc1, 0x8f, 0x97, 0x78, 0xb1, 0x74, 0xba, 0xc9, 0x4e, 0x5b, 0xac, - 0xb2, 0x26, 0xf5, 0x89, 0x7d, 0x27, 0x27, 0x96, 0x1f, 0x4c, 0x4c, 0x9b, 0xcd, 0x97, 0x56, 0x5a, - 0x20, 0x9b, 0x3b, 0xa5, 0xe2, 0x71, 0x01, 0xc2, 0x7b, 0x2b, 0x57, 0xd9, 0xc7, 0xf1, 0x89, 0x00, - 0x46, 0xf4, 0x95, 0x8e, 0x63, 0x80, 0xf1, 0xae, 0x25, 0xaa, 0x4d, 0xa4, 0x44, 0x39, 0x6f, 0x51, - 0x12, 0xcd, 0x6a, 0x45, 0xd8, 0x29, 0x73, 0x31, 0x50, 0x7f, 0x0a, 0x90, 0x3f, 0x70, 0x90, 0x31, - 0x4c, 0x70, 0x99, 0x16, 0x24, 0x90, 0xbe, 0xf7, 0x1a, 0x88, 0x20, 0x85, 0xa6, 0x32, 0x7e, 0xcf, - 0x49, 0x08, 0x16, 0xd7, 0x19, 0x36, 0x72, 0xec, 0x9f, 0xf0, 0x5f, 0x14, 0x07, 0x18, 0x0f, 0x8f, - 0x6b, 0x38, 0xa4, 0xcb, 0x58, 0xa7, 0xef, 0xd9, 0xef, 0xe4, 0x10, 0x32, 0x40, 0xee, 0x1a, 0x89, - 0x30, 0x93, 0x0c, 0xf3, 0xc1, 0xd2, 0x5f, 0x9b, 0x5c, 0x33, 0x79, 0xb0, 0xc4, 0xca, 0x6b, 0x23, - 0x4f, 0xe0, 0x11, 0x1b, 0x58, 0x77, 0x4e, 0x39, 0x7f, 0x9d, 0x41, 0x7b, 0x19, 0xff, 0x1e, 0xa6, - 0xba, 0x8f, 0x3a, 0xb3, 0xe5, 0x0a, 0x17, 0x4c, 0x2c, 0xf1, 0xde, 0x59, 0xb1, 0xf3, 0xda, 0x9a, - 0x11, 0x8c, 0xf8, 0x3b, 0x4e, 0x26, 0xd8, 0xb0, 0x97, 0xa8, 0x6f, 0x00, 0xaf, 0xfd, 0x34, 0xb6, - 0x4e, 0x5f, 0xfb, 0xf3, 0x39, 0xb9, 0x6a, 0x1f, 0x2c, 0x33, 0x80, 0xa1, 0x7d, 0x88, 0x4f, 0xd8, - 0x11, 0xbc, 0x04, 0x09, 0xc5, 0xe3, 0xc6, 0xdb, 0x93, 0xc8, 0x3a, 0x3c, 0xb5, 0xf9, 0x65, 0x4a, - 0x6f, 0x9c, 0x3f, 0xc0, 0xc6, 0x04, 0x1e, 0xd1, 0x75, 0x18, 0x18, 0xf6, 0xb6, 0x65, 0x2e, 0xbc, - 0x43, 0x71, 0x63, 0xcc, 0xc2, 0x36, 0xa5, 0x13, 0xfe, 0x07, 0x0f, 0xca, 0xa0, 0x5c, 0x7f, 0x07, - 0x03, 0x0b, 0x33, 0x52, 0x3c, 0x05, 0xfe, 0x72, 0xaf, 0xbc, 0x62, 0x95, 0x7a, 0x53, 0x8e, 0x70, - 0x6b, 0x4a, 0x9d, 0xd9, 0x59, 0x66, 0xe9, 0xcc, 0xbd, 0x21, 0x8f, 0xda, 0x59, 0xe7, 0xb7, 0xc0, - 0x2b, 0x77, 0xe8, 0xb0, 0x39, 0x5d, 0xe7, 0x32, 0xae, 0x9e, 0x3e, 0xe6, 0x86, 0xa1, 0xb3, 0xa0, - 0x8f, 0x92, 0x36, 0xf6, 0xdc, 0x50, 0x15, 0x33, 0x1d, 0xd2, 0x43, 0x51, 0x01, 0xb4, 0xde, 0x78, - 0x8d, 0x86, 0xf5, 0x87, 0x27, 0xfa, 0xb0, 0xd5, 0x37, 0x62, 0x42, 0xfd, 0xdc, 0x6c, 0x40, 0x84, - 0x8b, 0x44, 0x65, 0xd7, 0x03, 0x15, 0xf4, 0x0f, 0xcf, 0x42, 0x42, 0xe7, 0x0a, 0xb8, 0x1c, 0x34, - 0xcc, 0x43, 0x66, 0xab, 0x81, 0x87, 0x5f, 0x3d, 0x70, 0x32, 0x05, 0xa4, 0x12, 0xe6, 0x70, 0x34, - 0x9c, 0xf2, 0xb1, 0x3f, 0xf2, 0x33, 0xe3, 0x92, 0xc8, 0xe6, 0x21, 0x90, 0xcd, 0xfa, 0xe1, 0x98, - 0x43, 0x8e, 0x9e, 0x81, 0xd0, 0xbb, 0x3c, 0xc5, 0x18, 0x44, 0x8a, 0xa4, 0x7d, 0x8c, 0xeb, 0xaa, - 0x7a, 0x43, 0x37, 0xb7, 0x70, 0x63, 0xaa, 0x40, 0x16, 0x5a, 0x65, 0x10, 0xd3, 0x96, 0xf6, 0x0a, - 0x66, 0x84, 0x9e, 0xeb, 0x71, 0xaf, 0x05, 0x98, 0xcd, 0x19, 0x20, 0xad, 0x14, 0xe3, 0x96, 0xf0, - 0x03, 0xcb, 0xc0, 0x27, 0xb5, 0x5d, 0x69, 0xe8, 0x74, 0x4c, 0x97, 0xaf, 0x00, 0x6e, 0x48, 0x23, - 0xe6, 0x91, 0xea, 0x1e, 0x2c, 0x53, 0x0c, 0xa9, 0x01, 0xc5, 0x3e, 0xa6, 0x11, 0x28, 0x96, 0x6b, - 0xc3, 0x7a, 0x00, 0x92, 0x0e, 0x46, 0xb9, 0xb6, 0x81, 0xee, 0x61, 0x62, 0x65, 0x67, 0x6b, 0xf9, - 0xe4, 0x84, 0xa0, 0x7d, 0xe2, 0x49, 0xbe, 0x05, 0x0a, 0x9e, 0x6d, 0xd3, 0x1d, 0x6e, 0x9f, 0x2d, - 0xbf, 0x3e, 0x97, 0x13, 0x83, 0xaf, 0x79, 0xea, 0x08, 0x49, 0xe5, 0x68, 0x1f, 0x6b, 0x7b, 0xbd, - 0x1d, 0x87, 0x68, 0x84, 0xd0, 0x07, 0xc5, 0x86, 0xa0, 0x20, 0x07, 0x37, 0x70, 0xee, 0x6a, 0x90, - 0xc2, 0x44, 0x21, 0x8d, 0x3d, 0xc7, 0x10, 0x7f, 0x3f, 0xa2, 0xde, 0xcf, 0xc9, 0xe4, 0x67, 0x5c, - 0x3a, 0xe8, 0xff, 0x39, 0x22, 0x3a, 0x90, 0xbe, 0xc2, 0x6c, 0x31, 0x27, 0x16, 0x46, 0x75, 0x9e, - 0x7a, 0x3f, 0xa3, 0xf7, 0x55, 0x24, 0xa1, 0xe4, 0xfe, 0x99, 0x2e, 0xaa, 0x68, 0x36, 0x7f, 0xd6, - 0xb5, 0x7b, 0xdb, 0xf9, 0xce, 0x7b, 0x23, 0x9a, 0xfd, 0xab, 0xf7, 0x90, 0x67, 0x98, 0x37, 0x26, - 0x10, 0x20, 0x4b, 0x73, 0x41, 0x5e, 0x60, 0xd3, 0x9b, 0x40, 0x3f, 0xd8, 0xec, 0x9f, 0xce, 0xf7, - 0xce, 0xdf, 0x9c, 0x9f, 0x3c, 0x41, 0xbf, 0xd2, 0x33, 0x64, 0xfd, 0x20, 0x76, 0x82, 0xe4, 0x72, - 0x79, 0xa3, 0xf4, 0xaa, 0xc9, 0xb6, 0x35, 0xbe, 0x8d, 0xb8, 0xc3, 0xb3, 0x94, 0x4e, 0x60, 0xe3, - 0x72, 0xad, 0xb9, 0x85, 0xc5, 0xd9, 0xbe, 0x8a, 0xb7, 0xae, 0x44, 0x11, 0x7d, 0x59, 0xbb, 0x3c, - 0xc6, 0x48, 0xad, 0x25, 0xdd, 0xc1, 0x1e, 0xaf, 0xed, 0x65, 0xd9, 0x68, 0x8e, 0x81, 0x42, 0x4d, - 0x24, 0x65, 0x44, 0x1a, 0xbf, 0x3e, 0xd1, 0x7a, 0xca, 0x2f, 0x0c, 0xf8, 0x8e, 0xdf, 0x10, 0xf0, - 0x23, 0xbf, 0x12, 0xe0, 0x39, 0xfc, 0x19, 0x9e, 0xe0, 0x34, 0x3a, 0x77, 0x4e, 0xbb, 0x00, 0x8b, - 0xa7, 0x6e, 0x83, 0x2c, 0xa5, 0x8b, 0x2a, 0xf8, 0x15, 0x33, 0x63, 0x29, 0xeb, 0x4e, 0xa5, 0x7f, - 0x92, 0xc6, 0xe8, 0x3d, 0x58, 0x2e, 0x40, 0xf9, 0x36, 0xd7, 0x87, 0x53, 0x0f, 0x95, 0x0c, 0x34, - 0xdf, 0x1e, 0x56, 0x1c, 0x08, 0x0f, 0xef, 0x75, 0x20, 0x64, 0xc2, 0x81, 0x80, 0xee, 0x83, 0xed, - 0xb4, 0xf7, 0x45, 0x7c, 0xe8, 0xa1, 0xec, 0x53, 0xf0, 0xa1, 0x87, 0x8a, 0xae, 0x1e, 0x3a, 0x04, - 0xb1, 0x0b, 0xd2, 0x62, 0xb1, 0x36, 0x1d, 0x75, 0x38, 0xc0, 0xfd, 0x74, 0xba, 0x14, 0xd4, 0x97, - 0x99, 0xee, 0x12, 0x08, 0xcd, 0x35, 0x3f, 0x3d, 0x58, 0x4e, 0xad, 0x87, 0x0f, 0xed, 0xb5, 0xb9, - 0x5e, 0x7f, 0x3a, 0x45, 0xb0, 0x24, 0x71, 0xf9, 0x60, 0xc0, 0x1e, 0x3f, 0x58, 0x3e, 0xc5, 0x93, - 0x45, 0x78, 0xbc, 0x1f, 0x7e, 0xa0, 0xfc, 0xc3, 0x9b, 0x87, 0x0e, 0x54, 0xe0, 0xad, 0x90, 0x73, - 0xf1, 0xa1, 0x6d, 0xae, 0x1d, 0xe0, 0x16, 0xb7, 0x93, 0x53, 0xc8, 0x78, 0xb0, 0xfc, 0xeb, 0xfa, - 0xa1, 0x32, 0xab, 0x44, 0xe9, 0x87, 0x0e, 0xc7, 0x14, 0x90, 0xf2, 0x43, 0x60, 0xdd, 0xa7, 0xae, - 0x79, 0xe6, 0xa3, 0x4e, 0x4b, 0xf5, 0xce, 0x27, 0xa6, 0x6a, 0xf0, 0x93, 0x79, 0xf3, 0xa9, 0x44, - 0xfd, 0x9f, 0xc8, 0x6d, 0xf5, 0xc9, 0xdc, 0x6c, 0x73, 0xb9, 0x96, 0xad, 0x62, 0x09, 0x6c, 0xd6, - 0x54, 0xcd, 0x9e, 0x90, 0xb7, 0xe5, 0xc6, 0xf0, 0x0e, 0x85, 0x10, 0xbe, 0x01, 0x62, 0x7a, 0xc8, - 0x25, 0xf3, 0xc3, 0x89, 0x10, 0x4e, 0x37, 0x62, 0xd1, 0x60, 0xb1, 0x46, 0xe3, 0x86, 0x64, 0x0d, - 0xd5, 0xb7, 0xdd, 0x1b, 0xb9, 0xb5, 0xea, 0x7b, 0x87, 0x7c, 0xf3, 0x0c, 0x2f, 0xa7, 0xc9, 0x5f, - 0x73, 0x72, 0xb1, 0x8e, 0x1f, 0x22, 0x81, 0x3e, 0x3c, 0xc1, 0xad, 0x4b, 0xb0, 0x86, 0xf1, 0xbb, - 0xda, 0x87, 0x8f, 0x00, 0x82, 0x83, 0x4f, 0xd2, 0xb5, 0x7d, 0x2a, 0xbe, 0xdf, 0x02, 0xce, 0x91, - 0x95, 0xce, 0xe7, 0x85, 0xfc, 0x64, 0x72, 0x43, 0xaa, 0x69, 0x06, 0x32, 0x4e, 0x2b, 0xa3, 0xb8, - 0xd9, 0xd2, 0x5f, 0xc3, 0xb7, 0x44, 0xd1, 0x19, 0x27, 0x26, 0x9e, 0xd4, 0xe4, 0x66, 0xb3, 0x4b, - 0x16, 0x21, 0x11, 0xcb, 0xc6, 0x46, 0xa0, 0xad, 0x16, 0x36, 0xdb, 0x26, 0xae, 0xc6, 0x0b, 0x72, - 0x23, 0x6d, 0x95, 0xc1, 0xc5, 0xe7, 0xc5, 0xa9, 0xd0, 0xe0, 0x7a, 0xbb, 0x2d, 0x6b, 0x31, 0x59, - 0xc8, 0x8f, 0x04, 0xbb, 0x60, 0x49, 0xef, 0xdb, 0x0e, 0xab, 0xe5, 0x95, 0xeb, 0xbc, 0x93, 0xc4, - 0xc8, 0xa7, 0xbd, 0xf0, 0x4e, 0xa6, 0x0a, 0xe6, 0x24, 0xc8, 0x07, 0x13, 0xa4, 0x08, 0x94, 0x32, - 0x51, 0x3d, 0x9e, 0xe4, 0x1d, 0xfe, 0xe6, 0xa5, 0xee, 0xc6, 0xd0, 0x3b, 0xd7, 0x69, 0x08, 0x80, - 0x82, 0x05, 0x00, 0xf6, 0x41, 0x88, 0x2c, 0xdb, 0x2d, 0xd1, 0xe7, 0xd3, 0xd5, 0xea, 0x0f, 0xeb, - 0x46, 0xf2, 0x54, 0xa2, 0x47, 0xb5, 0x2f, 0x8e, 0x13, 0xfa, 0x1d, 0x5d, 0x2d, 0x66, 0x3b, 0xb7, - 0xcd, 0x26, 0x96, 0xfb, 0xab, 0xa2, 0x22, 0x8c, 0x0d, 0x07, 0xf5, 0x30, 0x38, 0xb0, 0xa0, 0x4c, - 0xa8, 0xa7, 0xd7, 0xfc, 0x51, 0xd4, 0x3c, 0xe7, 0x35, 0x91, 0xc8, 0xc4, 0x91, 0x2c, 0x3a, 0x24, - 0x5b, 0x6d, 0x68, 0xb9, 0x96, 0x4d, 0xf1, 0x83, 0xfe, 0xa5, 0xb6, 0x9e, 0xf3, 0xb6, 0x4e, 0x90, - 0xc3, 0xfc, 0xdd, 0xeb, 0x1f, 0x1c, 0xf4, 0xf6, 0xc5, 0x6c, 0xff, 0xe2, 0x91, 0xb7, 0xa2, 0x7c, - 0x7d, 0xac, 0x7c, 0xed, 0x8d, 0xf8, 0x3b, 0x7a, 0x20, 0xe4, 0x85, 0xa4, 0xc0, 0x11, 0x27, 0xda, - 0x71, 0x7b, 0xcd, 0x3a, 0x50, 0x26, 0x89, 0xfe, 0xe9, 0xe0, 0x38, 0x3e, 0x48, 0xc7, 0x36, 0x06, - 0xae, 0x40, 0xc2, 0xb8, 0xc0, 0x9b, 0xf2, 0x02, 0xf6, 0x24, 0xb7, 0x62, 0x30, 0x80, 0xd7, 0xee, - 0x57, 0x37, 0xa4, 0x95, 0xd1, 0x1b, 0x03, 0x69, 0x71, 0x0c, 0x2d, 0x9e, 0x78, 0xf8, 0x31, 0x64, - 0x33, 0xb5, 0x0f, 0x0e, 0xf6, 0x56, 0xe9, 0xe1, 0xe1, 0xe1, 0x1e, 0x46, 0xf5, 0x81, 0x46, 0x7e, - 0x75, 0x18, 0xf4, 0xc0, 0xf4, 0xd3, 0xea, 0xbc, 0xcb, 0x9c, 0x79, 0xd2, 0xa2, 0x82, 0xa9, 0x00, - 0x63, 0x86, 0x7f, 0xf4, 0x3f, 0x1e, 0x63, 0xd6, 0xa1, 0xf7, 0xab, 0xf2, 0x7f, 0xf8, 0x18, 0xbd, - 0x41, 0x2e, 0x90, 0x5f, 0xf5, 0xce, 0x73, 0x7e, 0xd9, 0x2e, 0x43, 0x2f, 0x83, 0x4d, 0xbe, 0xb1, - 0xf1, 0x3e, 0x39, 0x55, 0x26, 0x56, 0xda, 0x82, 0xa2, 0xc2, 0x75, 0x01, 0xdd, 0xdb, 0x60, 0x97, - 0x01, 0xaa, 0x2d, 0x72, 0x2a, 0xe1, 0x27, 0x21, 0x7b, 0xfd, 0x01, 0x95, 0x5c, 0xad, 0xe0, 0x69, - 0xc0, 0x9f, 0x42, 0x46, 0xb1, 0x16, 0xb1, 0x3f, 0xa7, 0xd5, 0x82, 0x62, 0xd2, 0x4e, 0xa9, 0x34, - 0x06, 0xf8, 0x73, 0xd2, 0xc2, 0x2a, 0x89, 0x8b, 0xfd, 0xb1, 0x12, 0x74, 0xd4, 0xc4, 0x38, 0xbb, - 0x0e, 0xd1, 0x67, 0x86, 0x2f, 0x0e, 0xda, 0x29, 0x7e, 0xc6, 0x8c, 0x5e, 0xaf, 0xeb, 0x8a, 0xbd, - 0x81, 0x4f, 0xb1, 0x39, 0x16, 0x69, 0x43, 0x95, 0x96, 0xca, 0xb4, 0xbe, 0x2c, 0x67, 0x1c, 0x11, - 0x03, 0xeb, 0xa0, 0x52, 0xf9, 0x4c, 0x74, 0x01, 0xaa, 0xa0, 0xd5, 0x07, 0xa6, 0x2d, 0xaa, 0x3f, - 0x96, 0x45, 0xb5, 0xad, 0x34, 0xae, 0x27, 0x8b, 0xf4, 0x5e, 0x1f, 0xc7, 0x59, 0x45, 0xe0, 0x44, - 0x80, 0x06, 0xea, 0xb5, 0xf5, 0x6b, 0x61, 0x7a, 0x01, 0x49, 0x43, 0x66, 0x1b, 0x31, 0xc7, 0xf3, - 0x0f, 0x7b, 0x00, 0x21, 0xfc, 0xe3, 0xf8, 0xb1, 0x5d, 0xaa, 0x30, 0x04, 0x96, 0x70, 0xe0, 0x8d, - 0x76, 0x77, 0x07, 0xbb, 0x93, 0x3a, 0x08, 0x11, 0xd3, 0xac, 0x4d, 0x05, 0x46, 0x4e, 0x5d, 0x81, - 0xdd, 0xdd, 0xfe, 0xfe, 0xa8, 0x65, 0xb1, 0xc3, 0x43, 0xbc, 0xd1, 0x6b, 0x77, 0x34, 0xe8, 0x77, - 0x5b, 0x56, 0xaf, 0xdb, 0x1f, 0x34, 0x19, 0x5a, 0xc3, 0x96, 0x1a, 0xdd, 0x48, 0x21, 0x27, 0x17, - 0xc8, 0xd9, 0xdf, 0x53, 0x49, 0x53, 0x85, 0xc3, 0x22, 0xed, 0x4a, 0xa6, 0x75, 0xfb, 0x2a, 0xed, - 0x4c, 0xa6, 0x0d, 0xdc, 0x5e, 0xb7, 0x06, 0x17, 0xcd, 0x26, 0x8e, 0x55, 0xd6, 0x93, 0xd5, 0x44, - 0xa5, 0xdd, 0x91, 0xcb, 0xff, 0x3e, 0x76, 0x89, 0x22, 0x03, 0x7e, 0x92, 0xcb, 0x45, 0x02, 0x3c, - 0xf4, 0x86, 0x7b, 0xa0, 0x57, 0x1f, 0x78, 0x45, 0x24, 0x95, 0x5f, 0x45, 0xdc, 0x12, 0x68, 0xb7, - 0xdd, 0x73, 0x06, 0xb6, 0xdc, 0x42, 0xf9, 0xc7, 0x71, 0xb7, 0xfd, 0xf8, 0xa4, 0xb5, 0x83, 0xab, - 0xd9, 0x49, 0x8b, 0x63, 0xe8, 0xb9, 0xb3, 0xa7, 0x3e, 0xfc, 0x48, 0x0f, 0x71, 0x2d, 0x55, 0x7d, - 0x9c, 0x76, 0xb5, 0xb8, 0x8d, 0xb4, 0xe8, 0x29, 0x47, 0x4e, 0xcf, 0xd9, 0x5c, 0x1e, 0x8e, 0xd9, - 0x25, 0x1f, 0x5c, 0xb3, 0xb9, 0x3b, 0x6a, 0xd0, 0x0e, 0xfe, 0xee, 0xe3, 0x06, 0x11, 0x3b, 0x51, - 0x79, 0xdd, 0x94, 0x14, 0x1e, 0x11, 0x5a, 0x0f, 0x78, 0x14, 0xb8, 0x7e, 0x6a, 0xd7, 0xfa, 0x2e, - 0xb3, 0xc5, 0x0a, 0x31, 0x94, 0xcb, 0x75, 0xdd, 0x2d, 0x05, 0xd8, 0xe1, 0xdf, 0x91, 0xb3, 0x31, - 0xe0, 0x98, 0x2f, 0x2f, 0x4e, 0x9e, 0x20, 0x25, 0xeb, 0x16, 0xf5, 0xfe, 0x2e, 0xc0, 0xc9, 0xef, - 0xb6, 0xcb, 0x0e, 0xbd, 0xfd, 0xc7, 0x36, 0x10, 0x5c, 0x7b, 0xff, 0x71, 0xab, 0x57, 0x7c, 0x2f, - 0x00, 0xe9, 0xa3, 0x5d, 0x4a, 0x1f, 0xed, 0xca, 0x74, 0x6e, 0x31, 0x66, 0x7c, 0x42, 0x32, 0x98, - 0x90, 0xc7, 0xb6, 0xe0, 0x0c, 0x58, 0x6e, 0xb8, 0xb7, 0xe6, 0xd3, 0xd5, 0x1b, 0x89, 0xd4, 0xd8, - 0xcb, 0x00, 0xad, 0xbd, 0xd1, 0xa3, 0xb4, 0x25, 0xbe, 0x28, 0xa6, 0x8e, 0x63, 0x10, 0xb9, 0xe8, - 0x8b, 0x10, 0x78, 0x82, 0x52, 0x12, 0x29, 0x32, 0x1b, 0xa6, 0x35, 0xf7, 0x0a, 0x4c, 0x6a, 0xfc, - 0x80, 0xd0, 0x26, 0xfd, 0xe0, 0x3d, 0xc1, 0x5b, 0x88, 0xde, 0x58, 0x51, 0x08, 0x2b, 0x89, 0x5d, - 0x96, 0xb2, 0xc6, 0x27, 0xec, 0xb1, 0x77, 0x38, 0xd1, 0xfc, 0xde, 0x03, 0x74, 0x38, 0xb0, 0xb5, - 0xfb, 0x60, 0xf9, 0x6b, 0xe1, 0xbc, 0x63, 0xb6, 0xbc, 0x5e, 0xf6, 0x53, 0xac, 0xf6, 0x2b, 0xb0, - 0x0c, 0x80, 0xf5, 0x6b, 0xd9, 0xf5, 0xf2, 0x09, 0xcf, 0x6f, 0x02, 0x0d, 0xda, 0xeb, 0x53, 0x50, - 0x17, 0xc3, 0xe0, 0xc6, 0xcd, 0x41, 0x05, 0x5d, 0xd3, 0xc6, 0xbb, 0x51, 0x1c, 0x9d, 0x60, 0x65, - 0x41, 0xc0, 0x3d, 0xf3, 0x82, 0x20, 0x97, 0xa9, 0xfb, 0xce, 0xba, 0x64, 0x0e, 0xee, 0xfa, 0x90, - 0x57, 0x7f, 0xc1, 0x4b, 0x3b, 0x53, 0xb7, 0x01, 0x86, 0x62, 0xe3, 0x77, 0xa2, 0x06, 0xe1, 0xe2, - 0x60, 0xde, 0x6c, 0x42, 0x8d, 0x53, 0x11, 0x71, 0xf3, 0x6c, 0xea, 0xd1, 0xab, 0x73, 0xc6, 0x0a, - 0x22, 0x47, 0x0b, 0x13, 0xc5, 0x24, 0x10, 0x7a, 0xea, 0xf9, 0xd7, 0x7e, 0x08, 0xc5, 0x00, 0x91, - 0x13, 0xe8, 0x2d, 0xc5, 0x96, 0x39, 0x08, 0xb2, 0x79, 0x57, 0x40, 0x88, 0x0f, 0xe3, 0x0a, 0xf0, - 0x78, 0xfe, 0xd4, 0xe9, 0x74, 0x3a, 0x85, 0x33, 0x4b, 0xf9, 0x9c, 0xdb, 0xbd, 0x93, 0xf1, 0x96, - 0x53, 0xee, 0xd8, 0x71, 0xec, 0x81, 0x0d, 0xcd, 0xfb, 0xfe, 0xcc, 0x1c, 0xbc, 0x49, 0x81, 0x9e, - 0x7d, 0x68, 0x6f, 0xa3, 0x3c, 0x06, 0xf3, 0x98, 0xe0, 0x8f, 0xbb, 0xa4, 0x4f, 0xec, 0xad, 0x2b, - 0x94, 0x19, 0xab, 0x55, 0xe3, 0x82, 0xe2, 0x47, 0xc2, 0x1a, 0x7b, 0x47, 0x67, 0x19, 0x1d, 0x48, - 0x83, 0x3c, 0x8f, 0xae, 0xac, 0xe4, 0xed, 0xdd, 0x32, 0xe7, 0x01, 0xb3, 0x2c, 0xfe, 0x92, 0x30, - 0xba, 0xe9, 0xca, 0xee, 0xa4, 0xce, 0x12, 0xf4, 0xb5, 0x80, 0xd1, 0x1d, 0xb8, 0x99, 0x6b, 0x66, - 0x60, 0x7d, 0xb5, 0x93, 0x34, 0x3c, 0x0f, 0x63, 0x53, 0x3f, 0x7e, 0x77, 0xc6, 0x4a, 0x5b, 0x2b, - 0x34, 0x15, 0x72, 0x7f, 0xa5, 0x34, 0x1f, 0x45, 0x95, 0x85, 0x14, 0xb2, 0xba, 0x97, 0xeb, 0x23, - 0xed, 0x1c, 0xa3, 0x0b, 0x4b, 0x18, 0x8f, 0x06, 0x5e, 0x90, 0x1b, 0x9e, 0x85, 0x2c, 0x35, 0x40, - 0x79, 0x67, 0x6b, 0xf8, 0x79, 0x8b, 0x0a, 0xdd, 0xa9, 0xbd, 0x26, 0x53, 0x99, 0x6b, 0x56, 0x47, - 0x17, 0xe1, 0xa5, 0x17, 0x49, 0x17, 0x56, 0xc0, 0xf8, 0x06, 0xea, 0x03, 0xda, 0x26, 0x04, 0xd1, - 0xdd, 0xca, 0x95, 0xd5, 0x34, 0x6b, 0x36, 0xeb, 0xa6, 0xb9, 0xc1, 0xe7, 0x79, 0x92, 0xba, 0x62, - 0x24, 0xda, 0x7e, 0xe0, 0x94, 0x52, 0xe8, 0x78, 0x69, 0x67, 0x91, 0x16, 0x71, 0x1a, 0x03, 0x51, - 0x32, 0x52, 0x96, 0xae, 0x17, 0x30, 0x27, 0xe2, 0xa7, 0x4e, 0x08, 0xac, 0xd7, 0xfe, 0x9c, 0x8e, - 0x79, 0x68, 0x07, 0x34, 0x2a, 0x1f, 0x90, 0xd1, 0xdd, 0x2c, 0x11, 0x9d, 0xea, 0x2e, 0xaa, 0x88, - 0x7b, 0x80, 0x1a, 0xa1, 0xf0, 0x00, 0x16, 0x3e, 0x10, 0xf3, 0x63, 0x2c, 0xac, 0x76, 0x16, 0xa0, - 0x57, 0x51, 0x6e, 0xb8, 0xd3, 0x6d, 0x37, 0x1d, 0x50, 0xa2, 0x2f, 0x99, 0x87, 0xde, 0xf0, 0x07, - 0x0e, 0x34, 0xbc, 0x16, 0x83, 0x06, 0x4b, 0x10, 0x7a, 0xf8, 0x2d, 0xa5, 0x63, 0x35, 0xf0, 0x70, - 0xcd, 0x1f, 0x72, 0xe3, 0x82, 0x41, 0xb1, 0xc2, 0x59, 0x0e, 0x24, 0x23, 0x7c, 0xe2, 0x18, 0xee, - 0x90, 0xd7, 0xfd, 0xcc, 0xbc, 0x9f, 0xca, 0xc6, 0xfb, 0x05, 0xee, 0xdd, 0x21, 0xdf, 0xab, 0xec, - 0xf6, 0x37, 0x9b, 0x6f, 0x9a, 0xcd, 0xef, 0x9a, 0xcd, 0xa7, 0x40, 0x67, 0x8d, 0xf3, 0xd5, 0xea, - 0x39, 0x12, 0x5c, 0xe3, 0x76, 0xb5, 0xfa, 0x11, 0xd7, 0xc7, 0x2b, 0xe1, 0xac, 0x6e, 0x3c, 0x2d, - 0x36, 0x7e, 0xb7, 0x3b, 0x29, 0x68, 0x87, 0xf0, 0xd0, 0xa4, 0xf3, 0x4d, 0xe1, 0xcc, 0xe4, 0xec, - 0x49, 0x3a, 0xb2, 0x68, 0x67, 0x79, 0xbc, 0xbd, 0x32, 0x6e, 0x06, 0x57, 0xb6, 0x28, 0x81, 0x06, - 0x91, 0x66, 0xa0, 0x7f, 0xb1, 0x16, 0xd0, 0x21, 0x0d, 0x48, 0x7d, 0xbd, 0xe0, 0xf7, 0xf8, 0xbd, - 0x9d, 0xf2, 0x0f, 0xbf, 0xc9, 0x05, 0x51, 0xd9, 0x3e, 0x65, 0x3c, 0x84, 0x13, 0xda, 0x07, 0x68, - 0x99, 0x17, 0x5b, 0x9e, 0x76, 0x51, 0x50, 0x44, 0xc0, 0x84, 0x49, 0x64, 0xe2, 0x70, 0x9c, 0x79, - 0xf4, 0xec, 0xfd, 0xcb, 0x77, 0x1f, 0x08, 0xd8, 0x4e, 0xee, 0x9f, 0xe3, 0x29, 0x2d, 0x8c, 0xb6, - 0x46, 0x76, 0xb9, 0xe7, 0x59, 0xe1, 0xc4, 0xd4, 0x36, 0x82, 0x4d, 0xe5, 0xa5, 0x03, 0x5c, 0xfd, - 0x15, 0xc9, 0x0a, 0xd7, 0x68, 0xa9, 0x74, 0x79, 0x77, 0x18, 0x2a, 0x68, 0x6e, 0x1a, 0xc0, 0xbb, - 0xa8, 0x63, 0xbb, 0xe6, 0xab, 0x97, 0x6f, 0xfe, 0x5a, 0xea, 0x16, 0x9d, 0x69, 0xb8, 0x8d, 0xac, - 0xf7, 0xaa, 0x6f, 0x26, 0xab, 0xce, 0x45, 0x22, 0xb6, 0xf7, 0x3d, 0xff, 0xe8, 0xa2, 0x93, 0x70, - 0xc4, 0x28, 0x1b, 0x1f, 0xb8, 0x81, 0x44, 0x04, 0xde, 0x99, 0x0a, 0xea, 0x43, 0x9e, 0x32, 0xc6, - 0xef, 0xc3, 0x7e, 0x87, 0x32, 0x06, 0xa3, 0x55, 0xcd, 0xd1, 0x91, 0x85, 0x20, 0x28, 0x43, 0x8b, - 0xee, 0x53, 0x3a, 0x02, 0x5c, 0x33, 0xfb, 0x47, 0xd4, 0x4b, 0x78, 0x8c, 0x6d, 0x99, 0xbb, 0xe9, - 0x92, 0xa1, 0xf2, 0x19, 0x96, 0x97, 0x51, 0x85, 0xad, 0x0a, 0x3b, 0x45, 0xd1, 0xa4, 0x78, 0xe2, - 0x17, 0xf5, 0x0c, 0xd4, 0xf8, 0x63, 0xc9, 0x1b, 0x53, 0xeb, 0x72, 0xd9, 0xec, 0x99, 0xf1, 0x4f, - 0x4f, 0xd6, 0xc2, 0xdd, 0x76, 0xcd, 0x9c, 0x5b, 0xe6, 0x41, 0xa7, 0xe7, 0x14, 0x82, 0xf7, 0x8a, - 0xbe, 0x0e, 0xac, 0x00, 0xf7, 0x80, 0xc9, 0x4d, 0x00, 0x87, 0x6b, 0x07, 0x05, 0xb7, 0xd5, 0x18, - 0xb9, 0xe4, 0xba, 0x77, 0x73, 0x74, 0xb0, 0x3f, 0x71, 0x61, 0x62, 0x54, 0xe1, 0x46, 0xd8, 0x6c, - 0x5e, 0x30, 0xb5, 0x5d, 0x33, 0xc1, 0x2d, 0x15, 0x57, 0x30, 0xec, 0xcc, 0xf9, 0xc3, 0x4a, 0x27, - 0x37, 0xa0, 0x19, 0xb9, 0xcc, 0x59, 0x72, 0xa7, 0xa8, 0x0b, 0x8b, 0x26, 0x45, 0x97, 0x09, 0x27, - 0xd2, 0x99, 0xa7, 0x61, 0x4f, 0x41, 0xc7, 0xb7, 0x22, 0xe7, 0x18, 0x0e, 0x87, 0xbe, 0xd2, 0x84, - 0xb5, 0x2a, 0xef, 0x50, 0x33, 0x7c, 0x4a, 0xf1, 0x96, 0x0b, 0x17, 0x8a, 0xbb, 0x19, 0x40, 0x22, - 0xfc, 0xa8, 0x67, 0xf2, 0xe1, 0x48, 0x3e, 0xbc, 0x92, 0x0f, 0xbe, 0x7c, 0x08, 0xe4, 0xc3, 0x54, - 0x1d, 0x55, 0x93, 0x0f, 0xb1, 0xdb, 0xe8, 0x39, 0x39, 0x0f, 0x91, 0x73, 0xe9, 0xf2, 0x2b, 0x99, - 0x08, 0x82, 0x72, 0xb0, 0x8a, 0x31, 0xa4, 0xf9, 0x9d, 0x45, 0xcb, 0x68, 0xb5, 0x70, 0xbb, 0x71, - 0x8c, 0xcf, 0xa0, 0x9f, 0x08, 0xe0, 0x78, 0x26, 0x7e, 0xac, 0xed, 0x77, 0xce, 0x3c, 0x4e, 0x1f, - 0xca, 0x1f, 0x2f, 0x23, 0x17, 0xd3, 0x0e, 0x0b, 0x08, 0x6b, 0x1f, 0x04, 0x59, 0xe6, 0x66, 0xd0, - 0x29, 0x5b, 0x73, 0x39, 0x6e, 0xfd, 0x89, 0x1d, 0xae, 0x56, 0xef, 0x05, 0x2e, 0xf0, 0x0a, 0x53, - 0xfc, 0xc0, 0x38, 0xe4, 0xfb, 0xab, 0x33, 0x0a, 0xc6, 0x8d, 0xca, 0x28, 0xb2, 0x30, 0xfe, 0x75, - 0xbc, 0x78, 0x3f, 0x2f, 0xef, 0xcb, 0xa0, 0x50, 0x92, 0xe7, 0x96, 0xe8, 0x33, 0xe7, 0x30, 0x65, - 0xea, 0xe8, 0x20, 0x0f, 0x4f, 0xab, 0x1f, 0xdd, 0x33, 0x0f, 0x97, 0x86, 0x59, 0xe6, 0x9c, 0xa6, - 0x6b, 0x1c, 0x9b, 0x7a, 0x33, 0xe6, 0x89, 0xb1, 0xd6, 0x9c, 0x35, 0xf6, 0xb8, 0x04, 0xcf, 0x8f, - 0x15, 0x78, 0x88, 0xd1, 0xfa, 0x9d, 0x98, 0x8e, 0x54, 0xac, 0xf1, 0x5c, 0x84, 0xdf, 0xf1, 0x3d, - 0xdd, 0x76, 0xf6, 0xcc, 0xff, 0x30, 0xed, 0xe5, 0xaf, 0x1e, 0x98, 0x48, 0xcc, 0x2b, 0x44, 0x61, - 0xff, 0xd1, 0xaf, 0x6a, 0x1f, 0x1c, 0x8d, 0xfe, 0x3d, 0xbe, 0x5d, 0x76, 0xf8, 0x77, 0xe0, 0x91, - 0x7f, 0xf2, 0xed, 0xab, 0x31, 0xbc, 0x8d, 0xed, 0xbf, 0x3f, 0xf2, 0xfa, 0xe3, 0xef, 0xc9, 0x0d, - 0xa0, 0xdd, 0x44, 0x67, 0xfd, 0xdd, 0x76, 0x7e, 0xb1, 0xcc, 0x1b, 0x62, 0x43, 0xf8, 0x83, 0xdc, - 0x9a, 0xe5, 0x3e, 0x68, 0xe0, 0x38, 0x17, 0xa2, 0x7f, 0x72, 0x96, 0x5d, 0x25, 0xb7, 0x21, 0x43, - 0x07, 0x37, 0xdf, 0x6b, 0xe2, 0x5e, 0xff, 0xfc, 0x16, 0xd5, 0x5b, 0x9a, 0xcd, 0x80, 0x4d, 0x17, - 0xe7, 0xe7, 0x8c, 0x26, 0xe6, 0x22, 0xa5, 0x6d, 0x48, 0xe8, 0x3d, 0x3c, 0xc3, 0xb3, 0x1c, 0xfc, - 0xc4, 0x3f, 0xc3, 0x48, 0xaa, 0x55, 0xc7, 0xc3, 0xf7, 0x4e, 0x6f, 0xe4, 0xf4, 0xba, 0xbb, 0x30, - 0x75, 0x7f, 0x96, 0x06, 0x8c, 0x5b, 0x86, 0x78, 0x64, 0xd8, 0xf0, 0xb3, 0x4b, 0x93, 0xbe, 0x42, - 0x8e, 0x09, 0x7a, 0xd6, 0x79, 0xa9, 0xbc, 0x18, 0xe8, 0xb3, 0x29, 0x12, 0x65, 0x93, 0x29, 0xde, - 0x21, 0xa0, 0x52, 0x07, 0x7d, 0x95, 0xea, 0x8b, 0x54, 0xcd, 0x0f, 0x92, 0xe2, 0x21, 0xc8, 0x22, - 0x55, 0x6b, 0x22, 0xf1, 0xc0, 0xa4, 0x1b, 0x16, 0x1a, 0x44, 0xa4, 0xae, 0x23, 0xc7, 0x7b, 0xbd, - 0xba, 0x0e, 0x9a, 0x1d, 0x3e, 0xfc, 0x8b, 0xe0, 0x5f, 0x00, 0xff, 0x2e, 0x80, 0xe2, 0x2f, 0xbc, - 0x64, 0x9c, 0x78, 0x49, 0x0b, 0x6b, 0x76, 0x57, 0xdd, 0x71, 0x7c, 0xfc, 0x78, 0x7f, 0xf7, 0xc4, - 0xeb, 0x8d, 0xb3, 0xe3, 0x01, 0x3e, 0x74, 0xe9, 0x61, 0x84, 0x0f, 0xe1, 0xf1, 0xe8, 0xf1, 0x89, - 0x17, 0x1e, 0xf7, 0x4f, 0xa8, 0x94, 0x4c, 0xa3, 0xbf, 0x98, 0x30, 0x14, 0x09, 0x7b, 0x27, 0xde, - 0x45, 0xab, 0xdf, 0x1d, 0xee, 0xe1, 0xcb, 0x3e, 0xbc, 0x50, 0xee, 0x63, 0xcc, 0x05, 0x0d, 0x29, - 0x3c, 0x1e, 0x9c, 0xac, 0xba, 0x76, 0xab, 0xdd, 0x5f, 0x61, 0xe9, 0xc7, 0xdd, 0x13, 0x8f, 0x8d, - 0x73, 0x8f, 0xb5, 0x20, 0x67, 0x34, 0x3c, 0x01, 0x82, 0xb0, 0x79, 0x46, 0xef, 0x04, 0x88, 0x86, - 0xb9, 0x7c, 0x77, 0xb8, 0x07, 0xea, 0x0f, 0x94, 0x29, 0xea, 0xa4, 0xe4, 0xde, 0x38, 0x3c, 0x3c, - 0xec, 0x1e, 0x7a, 0x39, 0xfe, 0xc1, 0x3b, 0x00, 0x7b, 0x7b, 0xe2, 0x1c, 0x50, 0xee, 0x06, 0xc9, - 0x52, 0xf8, 0x17, 0xb2, 0xe3, 0x14, 0x6c, 0x68, 0xec, 0x93, 0xbb, 0x18, 0xf6, 0x5d, 0x69, 0xc5, - 0x0a, 0xcb, 0x58, 0xfc, 0xed, 0xbb, 0xd2, 0x02, 0xa6, 0xbf, 0x83, 0xbe, 0xcb, 0xed, 0x20, 0x51, - 0xba, 0xe7, 0xe2, 0x0a, 0x85, 0xff, 0x71, 0x7c, 0x40, 0x73, 0x9e, 0xd7, 0x9d, 0x00, 0xfb, 0x03, - 0x70, 0xdd, 0xae, 0x3d, 0xb1, 0x6e, 0x2c, 0xd6, 0x1a, 0xae, 0xba, 0x9c, 0x38, 0x6c, 0x9e, 0x4f, - 0x19, 0x67, 0xc0, 0xfe, 0x2d, 0x8e, 0x57, 0x9e, 0x6a, 0xbb, 0x04, 0xed, 0x3e, 0x07, 0xd6, 0x10, - 0xd6, 0x15, 0x80, 0xff, 0x58, 0x80, 0x2f, 0xba, 0xdc, 0xa5, 0x2e, 0x79, 0x17, 0x45, 0xfb, 0xfd, - 0x72, 0xfb, 0xcb, 0x05, 0x5e, 0x87, 0x00, 0x75, 0xeb, 0x5b, 0xd9, 0xdd, 0x77, 0x97, 0xd5, 0xb4, - 0xe1, 0x63, 0x57, 0xe1, 0x06, 0xda, 0x2c, 0x61, 0x07, 0xf2, 0x96, 0xbf, 0x41, 0x8b, 0x1c, 0xb4, - 0x5c, 0x54, 0xe8, 0xbb, 0xcb, 0x07, 0x30, 0x07, 0x2a, 0x55, 0x5a, 0xf8, 0xd8, 0xf4, 0x48, 0x0d, - 0x63, 0x5b, 0xb2, 0xd8, 0xe1, 0xe7, 0x97, 0x20, 0x5a, 0x11, 0x81, 0xde, 0x7b, 0x8c, 0x28, 0x28, - 0x88, 0x0a, 0xe6, 0x74, 0xcd, 0xf8, 0x5f, 0x98, 0xe3, 0xdc, 0x23, 0x02, 0x58, 0x75, 0xd7, 0x45, - 0x8d, 0x7d, 0x8c, 0x53, 0x29, 0x0b, 0xf0, 0x6a, 0x0c, 0x07, 0xbe, 0xaf, 0x8e, 0xfb, 0xc9, 0xa6, - 0x47, 0xf6, 0x52, 0x90, 0x71, 0x41, 0x61, 0xb5, 0x05, 0xf7, 0x6c, 0xb2, 0x89, 0x39, 0xf1, 0x42, - 0x12, 0xf6, 0x90, 0x6a, 0x45, 0x51, 0x24, 0x00, 0x21, 0x69, 0x35, 0x10, 0x88, 0x82, 0x24, 0xf3, - 0x12, 0x49, 0xe6, 0x63, 0xdf, 0xcb, 0x35, 0xb2, 0xb4, 0xc4, 0x18, 0x6c, 0x49, 0x9e, 0x7b, 0xfd, - 0x5a, 0xf2, 0xcc, 0xff, 0x9d, 0xe4, 0x59, 0xa1, 0xce, 0xfc, 0x1e, 0xea, 0x5c, 0x9e, 0x11, 0xf5, - 0xec, 0xf5, 0x24, 0xf5, 0xec, 0xf5, 0xea, 0x69, 0x30, 0xff, 0x02, 0x1a, 0xdc, 0xd6, 0xca, 0xfe, - 0x3e, 0x07, 0xae, 0xda, 0xca, 0x60, 0xe4, 0xec, 0x69, 0x0b, 0xe5, 0x7b, 0x22, 0xc7, 0x5e, 0x5f, - 0xa0, 0x83, 0x00, 0x5f, 0x0a, 0xd6, 0xd1, 0xbb, 0xa3, 0xf9, 0x61, 0xd7, 0x5d, 0xfa, 0x1e, 0x31, - 0x1e, 0x22, 0x1d, 0x89, 0x02, 0xa8, 0x92, 0x37, 0xc9, 0x03, 0x07, 0x13, 0xe4, 0xb7, 0xac, 0xe8, - 0xe0, 0x60, 0x00, 0x73, 0xd1, 0xc7, 0xd6, 0x52, 0x8f, 0x28, 0x68, 0xa5, 0xd8, 0x5b, 0xde, 0xea, - 0x01, 0xeb, 0x19, 0x41, 0xdf, 0x23, 0xad, 0x34, 0x2e, 0x8e, 0xfe, 0x09, 0xd1, 0x44, 0xa5, 0x4f, - 0xc0, 0xb7, 0xd6, 0x13, 0x91, 0x51, 0x2e, 0x1b, 0xc0, 0x6d, 0x78, 0x6f, 0x50, 0x2c, 0x00, 0x30, - 0xe2, 0x5a, 0xed, 0xa2, 0x79, 0xd9, 0x23, 0x00, 0xc1, 0x99, 0x2c, 0x6f, 0x20, 0x95, 0x05, 0x1a, - 0x30, 0x73, 0x56, 0x00, 0x00, 0x5a, 0xc4, 0x3f, 0x91, 0x59, 0x5a, 0x56, 0xca, 0x47, 0x62, 0x53, - 0x43, 0x7d, 0x1a, 0x06, 0x60, 0x10, 0x4a, 0x04, 0xc0, 0x6a, 0xf9, 0x9b, 0x8d, 0xaa, 0x36, 0x55, - 0xda, 0x13, 0x95, 0xc4, 0xf0, 0xed, 0x62, 0x28, 0x48, 0xe4, 0x88, 0xd6, 0xdc, 0x0b, 0x70, 0x0a, - 0x38, 0xe0, 0x21, 0x92, 0x20, 0xcf, 0x13, 0x8f, 0x1e, 0xe8, 0x60, 0xd0, 0x32, 0xce, 0x05, 0xbc, - 0xc0, 0x6c, 0x49, 0x71, 0x90, 0xea, 0x03, 0xb9, 0x83, 0x6e, 0xfa, 0x03, 0x64, 0x02, 0x12, 0xc7, - 0x34, 0x3b, 0x38, 0xa9, 0x63, 0x8c, 0x34, 0x2b, 0x56, 0x54, 0x76, 0x1c, 0x89, 0x99, 0xf6, 0xbc, - 0x61, 0x0f, 0x74, 0x09, 0x78, 0xa2, 0xa1, 0x23, 0xfa, 0x87, 0xc5, 0x90, 0x70, 0xe5, 0x71, 0x90, - 0xa1, 0x91, 0xbe, 0x58, 0xfc, 0x24, 0x1c, 0x28, 0x8a, 0x3f, 0x28, 0x4e, 0xc7, 0xbb, 0x24, 0x5c, - 0x44, 0x04, 0x5b, 0x72, 0x75, 0x1d, 0xe7, 0xad, 0xfe, 0x1e, 0x01, 0xaf, 0x8e, 0x86, 0x16, 0x5c, - 0xa8, 0x20, 0x96, 0x54, 0x27, 0x96, 0xb4, 0x9e, 0x58, 0x2c, 0x4e, 0x82, 0x62, 0x49, 0xf5, 0x5d, - 0x35, 0x81, 0xe9, 0x5d, 0x24, 0xc3, 0x0a, 0xa1, 0xb7, 0x89, 0x1c, 0x58, 0x54, 0xac, 0x42, 0x3c, - 0xac, 0x44, 0x3c, 0xc3, 0x42, 0x36, 0x14, 0xc0, 0x46, 0x30, 0x11, 0x9b, 0x64, 0x44, 0x41, 0xa9, - 0x09, 0x67, 0xc0, 0xa4, 0xb4, 0xf9, 0x56, 0x08, 0x1c, 0xda, 0xcb, 0xf9, 0x9d, 0xcb, 0x73, 0x00, - 0xcb, 0xf3, 0xd2, 0x1a, 0xec, 0xdb, 0x1b, 0x90, 0x0e, 0x86, 0x94, 0x33, 0xdc, 0xcc, 0xf9, 0x37, - 0x8a, 0x10, 0xa6, 0x91, 0x09, 0x34, 0xc6, 0x9b, 0x1a, 0xa7, 0x2e, 0x27, 0x93, 0x86, 0xf5, 0xc2, - 0xf2, 0x6d, 0xe2, 0xcd, 0xa2, 0x43, 0x5f, 0x61, 0x6a, 0x29, 0x97, 0x22, 0x94, 0x7b, 0x57, 0x26, - 0xfd, 0x19, 0x21, 0xa7, 0x44, 0xf7, 0x2b, 0xe2, 0xc1, 0x23, 0x89, 0xd9, 0x54, 0xc4, 0x28, 0xf6, - 0x46, 0x23, 0x95, 0xa2, 0xa6, 0x87, 0xb3, 0x56, 0x4d, 0x9c, 0x69, 0x85, 0xd6, 0xb9, 0x46, 0x3e, - 0xb3, 0xd2, 0x24, 0x5e, 0xe1, 0x52, 0x6a, 0xe1, 0x4a, 0x2e, 0xf7, 0x3b, 0xd1, 0xd2, 0x45, 0x6a, - 0xc3, 0x1b, 0x01, 0x51, 0x53, 0xc3, 0x62, 0x52, 0x46, 0x42, 0xe8, 0x6c, 0x1b, 0xe6, 0xc8, 0x15, - 0x0c, 0x1e, 0xa8, 0x40, 0xf2, 0xc8, 0x56, 0x7b, 0xb8, 0x27, 0xe7, 0xbc, 0xc7, 0xc7, 0x37, 0xda, - 0x18, 0xdf, 0x7e, 0x79, 0x7c, 0xc3, 0x81, 0xcb, 0x97, 0x9f, 0xd6, 0x0e, 0x50, 0xc9, 0xe0, 0x0b, - 0x6b, 0xef, 0xd6, 0xd6, 0xde, 0xbd, 0xb7, 0xb6, 0x8e, 0xcc, 0x22, 0x55, 0x5b, 0x95, 0x72, 0xc6, - 0x85, 0xa8, 0x1d, 0x8d, 0x84, 0x82, 0x80, 0x88, 0x9d, 0xe2, 0xe9, 0xfe, 0x3b, 0x68, 0xa0, 0xeb, - 0xd6, 0x81, 0xfa, 0x98, 0xc4, 0x0e, 0xd7, 0x55, 0x37, 0x66, 0x9f, 0x13, 0xb3, 0x82, 0x6a, 0xbd, - 0x46, 0x91, 0x30, 0xe0, 0x12, 0xc4, 0x17, 0x3c, 0x8a, 0x04, 0xf9, 0x81, 0x97, 0x92, 0x00, 0x97, - 0xbe, 0x72, 0x26, 0x55, 0x57, 0xae, 0x81, 0xe4, 0x05, 0xd1, 0x8a, 0xb1, 0x34, 0xac, 0xd7, 0x24, - 0xe8, 0xf8, 0xb5, 0x40, 0x1f, 0xf8, 0xf3, 0xf2, 0x8b, 0x5b, 0x14, 0xad, 0x7c, 0xb0, 0x54, 0xbb, - 0x58, 0x1f, 0x9b, 0xfa, 0x9d, 0x63, 0x61, 0x79, 0x0e, 0x8b, 0x4b, 0x69, 0xe0, 0xc5, 0xca, 0x34, - 0x72, 0xa9, 0xb5, 0xf4, 0x2a, 0x0f, 0x44, 0x5c, 0x75, 0x5a, 0xd8, 0x68, 0x9f, 0xb7, 0x06, 0x8a, - 0xce, 0x5a, 0xb4, 0xc8, 0xca, 0x2d, 0x0a, 0x09, 0x3e, 0xd2, 0x45, 0xec, 0x3d, 0x5c, 0x53, 0x70, - 0x40, 0x1a, 0xce, 0xdd, 0xbc, 0x92, 0xca, 0x0d, 0xc6, 0x92, 0x3d, 0x8d, 0xcb, 0x73, 0x42, 0x1c, - 0xab, 0x0e, 0xea, 0xbd, 0xde, 0x1d, 0xba, 0xa3, 0xa6, 0x31, 0x0e, 0x80, 0x3c, 0xfe, 0xe4, 0xa3, - 0xd3, 0x84, 0x83, 0xa6, 0x00, 0x0e, 0xf7, 0xef, 0x29, 0xb0, 0xd7, 0x47, 0x95, 0xb0, 0x50, 0x10, - 0x51, 0x02, 0x58, 0x42, 0x68, 0xf3, 0x91, 0xd9, 0x72, 0x58, 0xa4, 0xc4, 0x6c, 0xca, 0x9a, 0x04, - 0xcc, 0x1f, 0x79, 0x4a, 0x16, 0x80, 0x2b, 0x3c, 0xd7, 0x5b, 0x6c, 0xb3, 0x99, 0x87, 0xf7, 0x2b, - 0x73, 0x1b, 0xed, 0x0c, 0xfe, 0x2d, 0xe0, 0xdf, 0x14, 0xfe, 0xcd, 0xe1, 0xdf, 0x35, 0xfc, 0xbb, - 0x85, 0x7f, 0xe7, 0xe8, 0xa9, 0x50, 0xaa, 0xf0, 0x02, 0x31, 0x4d, 0x84, 0x7b, 0xee, 0x9d, 0x81, - 0xc8, 0x56, 0xfa, 0xe8, 0x39, 0x4c, 0xd4, 0x85, 0x45, 0xe6, 0x94, 0xa6, 0x38, 0xe3, 0x72, 0xb2, - 0x18, 0x17, 0xad, 0xe7, 0xc8, 0x9b, 0x1a, 0xd6, 0x13, 0xb2, 0x30, 0x50, 0xc8, 0xda, 0xb7, 0x30, - 0x1d, 0x4c, 0x2e, 0xc4, 0x5b, 0x8e, 0x45, 0x10, 0xbd, 0x9a, 0xbe, 0x9a, 0x56, 0x96, 0x1e, 0x89, - 0x7a, 0xa1, 0x65, 0xb7, 0xfa, 0xd0, 0x93, 0xe8, 0x32, 0x55, 0x5d, 0x2a, 0x75, 0x19, 0xda, 0xfc, - 0x9b, 0x20, 0xe1, 0x4b, 0x8c, 0x61, 0x46, 0xd6, 0x20, 0x95, 0xb1, 0x35, 0x35, 0x9a, 0x9b, 0x43, - 0xcb, 0x97, 0x54, 0xb2, 0x80, 0x7c, 0xad, 0x86, 0xf2, 0x19, 0x0f, 0xe3, 0xda, 0x7c, 0x2c, 0xac, - 0x40, 0xff, 0x70, 0x68, 0x0b, 0x38, 0xb4, 0x56, 0x15, 0x3c, 0xc0, 0xb5, 0x53, 0x0d, 0xa6, 0x72, - 0x55, 0x60, 0xf9, 0xf6, 0xf2, 0xd6, 0xeb, 0xed, 0x8a, 0xf9, 0xc3, 0xc1, 0xa7, 0x1c, 0x45, 0x39, - 0xb1, 0x1d, 0xc8, 0xeb, 0x17, 0x79, 0xb4, 0x7a, 0x0f, 0x2b, 0xea, 0x3d, 0x14, 0x19, 0xca, 0xe9, - 0x2f, 0x90, 0xd7, 0xeb, 0x73, 0x0a, 0x2b, 0x59, 0x7a, 0x5a, 0xf6, 0xf0, 0xee, 0xec, 0x5d, 0x39, - 0xa4, 0xb4, 0xd5, 0x57, 0x4b, 0x52, 0x17, 0xc3, 0x7d, 0x1d, 0xf7, 0x02, 0x43, 0xe7, 0x6a, 0x94, - 0x9f, 0xad, 0x73, 0xe7, 0x1c, 0x93, 0x2a, 0xcc, 0x4e, 0x59, 0x47, 0xdb, 0xe6, 0xb4, 0x0b, 0x0c, - 0xf5, 0x0c, 0xda, 0xec, 0x0d, 0xd5, 0xb4, 0x9c, 0xc9, 0xc2, 0x16, 0xef, 0xc6, 0xae, 0xd4, 0xd9, - 0x7f, 0xec, 0x92, 0x8a, 0xa6, 0xf0, 0x0b, 0x6a, 0x7e, 0x8e, 0xd3, 0xea, 0xec, 0x16, 0x6a, 0xfe, - 0xc4, 0x9a, 0xa1, 0xa6, 0xdd, 0x85, 0x54, 0xe4, 0x6f, 0xb3, 0x82, 0xbf, 0xa1, 0x86, 0xc7, 0x3b, - 0x9a, 0xc1, 0x38, 0x30, 0x69, 0x7c, 0xeb, 0xf5, 0xfb, 0xeb, 0x92, 0x31, 0x02, 0xa3, 0xc5, 0xc4, - 0xaa, 0x6d, 0x51, 0xee, 0x56, 0xf5, 0x3b, 0xd0, 0xfb, 0xf5, 0x65, 0xbf, 0xe7, 0xc0, 0xbc, 0x7c, - 0xde, 0xaf, 0xf3, 0xbd, 0x85, 0xd8, 0x59, 0x9d, 0xeb, 0x94, 0x30, 0xb0, 0x5d, 0x2e, 0xb0, 0x11, - 0x16, 0x1f, 0xd6, 0x22, 0x1f, 0xae, 0x93, 0x14, 0xea, 0xb9, 0x28, 0xb4, 0xbc, 0xf6, 0x12, 0x00, - 0x72, 0xd0, 0xab, 0x91, 0x25, 0xe5, 0x25, 0xd4, 0xef, 0x63, 0x4c, 0x3c, 0x01, 0xa4, 0x03, 0x00, - 0x46, 0x04, 0xe0, 0x68, 0xe8, 0x00, 0x01, 0x68, 0x3e, 0x81, 0xd4, 0x8b, 0x5a, 0xbd, 0x91, 0x30, - 0x62, 0x84, 0xd7, 0x82, 0xaf, 0xd8, 0xef, 0x85, 0x44, 0x11, 0x73, 0x90, 0x57, 0x95, 0x03, 0x61, - 0x2d, 0x0e, 0xfb, 0x15, 0xd5, 0x45, 0x4a, 0x3b, 0xe9, 0x34, 0xc9, 0xe5, 0xf2, 0xc4, 0x13, 0xfc, - 0xda, 0xda, 0xe9, 0xd7, 0xad, 0x1d, 0x59, 0x78, 0xad, 0x17, 0x6e, 0x78, 0x43, 0x1a, 0x7a, 0xce, - 0x87, 0x5e, 0x61, 0xd0, 0x82, 0x65, 0xf4, 0x26, 0xd6, 0x54, 0x8d, 0xf7, 0xa5, 0x75, 0x8d, 0x08, - 0x9c, 0xab, 0x84, 0x39, 0xad, 0x9f, 0x29, 0xad, 0x1b, 0x1c, 0xf6, 0x33, 0x8b, 0x39, 0x67, 0xce, - 0xd4, 0x99, 0xdb, 0xe3, 0x2a, 0x10, 0xed, 0xbe, 0x5a, 0x1b, 0xbc, 0x54, 0xd7, 0xe9, 0xca, 0x52, - 0x68, 0x2b, 0xaa, 0x5c, 0x45, 0x83, 0x2a, 0xaf, 0x2b, 0xe9, 0xa8, 0x60, 0x7e, 0x00, 0xf1, 0xee, - 0x78, 0x93, 0xa2, 0xca, 0x89, 0xd2, 0x5a, 0x45, 0x2b, 0x75, 0x83, 0x8c, 0x72, 0x6a, 0x19, 0x52, - 0x5f, 0x6b, 0x86, 0x7b, 0x89, 0x7c, 0x73, 0x58, 0x7f, 0x02, 0xc7, 0xb7, 0xaa, 0xe3, 0x97, 0x44, - 0x68, 0xda, 0xca, 0x7c, 0x66, 0xdd, 0x3a, 0xe7, 0x0e, 0xfc, 0xbb, 0x73, 0xc8, 0xa8, 0x1a, 0x0c, - 0x35, 0x37, 0x59, 0x09, 0xf4, 0x3d, 0x57, 0x9d, 0xec, 0xa8, 0x9b, 0x73, 0xa6, 0x71, 0xa1, 0x81, - 0xe2, 0x23, 0x00, 0xfd, 0xa8, 0xe0, 0xd1, 0x15, 0x06, 0xda, 0xbf, 0x93, 0x81, 0xea, 0xa3, 0x61, - 0xff, 0x8e, 0xd1, 0x28, 0x2e, 0x94, 0x16, 0x1e, 0x95, 0x82, 0x99, 0x9d, 0x6f, 0xca, 0x2e, 0xc9, - 0x80, 0x38, 0x36, 0x37, 0x18, 0x90, 0xf2, 0x94, 0x0c, 0x24, 0xd9, 0x8f, 0xb5, 0x25, 0x59, 0x66, - 0x12, 0x39, 0xe7, 0xee, 0x28, 0x07, 0x6d, 0x01, 0xdf, 0xf8, 0x19, 0xf9, 0x70, 0xe5, 0xc7, 0x24, - 0x55, 0x36, 0xd7, 0x40, 0x01, 0x23, 0x35, 0x36, 0xa5, 0x6b, 0x6c, 0x1f, 0xad, 0xb6, 0x30, 0xce, - 0xbd, 0x6a, 0x63, 0x1e, 0x7a, 0x6a, 0xcb, 0x52, 0xf9, 0x7c, 0xa2, 0x28, 0x6e, 0x17, 0x58, 0x83, - 0xe6, 0x5c, 0x91, 0x38, 0xd9, 0x1b, 0x07, 0xd6, 0x99, 0x23, 0x5a, 0x42, 0xe1, 0xb9, 0x90, 0x36, - 0xe9, 0xa0, 0xef, 0x2e, 0x38, 0xe3, 0x50, 0x88, 0xc4, 0xb6, 0x19, 0xb7, 0x35, 0x44, 0xd8, 0x19, - 0x39, 0xcc, 0x50, 0x38, 0x59, 0xfa, 0xdc, 0x3d, 0x06, 0xed, 0x8a, 0x67, 0x46, 0xd4, 0x01, 0xa3, - 0x5a, 0xcb, 0x1e, 0xdb, 0x7d, 0x5d, 0x3f, 0xe7, 0x37, 0x0a, 0x15, 0x1b, 0xe9, 0x77, 0x6b, 0x30, - 0xe3, 0x99, 0x1a, 0x1d, 0xf3, 0x66, 0xba, 0x5e, 0xc2, 0xb8, 0x86, 0x71, 0xb7, 0x38, 0x41, 0xa7, - 0x4e, 0x61, 0x68, 0x25, 0x85, 0xc6, 0x99, 0x7a, 0x89, 0xd2, 0x38, 0x75, 0x9b, 0xca, 0xdb, 0xd5, - 0x29, 0x85, 0x6b, 0x9d, 0x49, 0x49, 0xeb, 0x2c, 0x5b, 0x66, 0x1e, 0xdf, 0xa5, 0xc9, 0x8e, 0x49, - 0x8b, 0x14, 0x2b, 0x19, 0x26, 0x79, 0xa4, 0x13, 0xa1, 0xe4, 0xfe, 0xe3, 0x6b, 0x6b, 0xe6, 0x48, - 0xf6, 0xd5, 0x05, 0xed, 0x83, 0x3c, 0x94, 0xdc, 0xa5, 0x41, 0xae, 0x24, 0x74, 0xd3, 0xc0, 0x88, - 0x95, 0x3f, 0x47, 0xb8, 0x4b, 0x66, 0x25, 0x00, 0x52, 0x30, 0xd1, 0x67, 0xca, 0x44, 0xe7, 0x4e, - 0x1c, 0xe0, 0x17, 0x02, 0x11, 0x49, 0x05, 0x03, 0x85, 0x59, 0x5e, 0x6b, 0x91, 0x57, 0x64, 0xce, - 0x5d, 0x94, 0xb8, 0x45, 0xcf, 0xba, 0x47, 0xa0, 0x0f, 0x87, 0x6e, 0x0d, 0x3b, 0x10, 0xf8, 0x98, - 0xa9, 0xe1, 0x87, 0xc7, 0x33, 0x85, 0xd0, 0x44, 0xf3, 0xcf, 0xc2, 0xd0, 0x47, 0x94, 0x9c, 0xc0, - 0x42, 0x9f, 0xb5, 0xfa, 0x50, 0xa6, 0x8b, 0x9e, 0x37, 0xde, 0x64, 0xa2, 0x03, 0xa8, 0x3c, 0x6a, - 0x62, 0xda, 0x0a, 0x27, 0xa6, 0xee, 0xef, 0x48, 0xb4, 0x2e, 0x93, 0x62, 0x0e, 0xe1, 0x59, 0x50, - 0xb3, 0x0e, 0x66, 0x0c, 0xc9, 0xaa, 0x4b, 0x31, 0x19, 0x52, 0x71, 0x2f, 0x37, 0x2b, 0x81, 0xf8, - 0x22, 0x4c, 0x96, 0x74, 0xaf, 0x51, 0x1d, 0x7e, 0x6a, 0x38, 0x07, 0x2e, 0xf6, 0x7d, 0x14, 0x1d, - 0x9a, 0x02, 0xc0, 0x35, 0x94, 0xe1, 0x50, 0x2d, 0x74, 0x92, 0x20, 0x85, 0x2b, 0x84, 0x7f, 0xdd, - 0xc3, 0x95, 0xe5, 0x89, 0x66, 0x09, 0x02, 0x97, 0x46, 0xbf, 0x81, 0x5c, 0xcb, 0x48, 0x96, 0x33, - 0x27, 0x6f, 0xed, 0xa1, 0x4f, 0xd6, 0xae, 0x68, 0x86, 0x92, 0x8a, 0x14, 0xe1, 0xf8, 0xc5, 0x06, - 0x49, 0xa1, 0xba, 0x97, 0x98, 0x90, 0x42, 0xfc, 0xb2, 0x60, 0x01, 0x6a, 0xf4, 0xba, 0x1e, 0x5f, - 0xeb, 0xe2, 0x96, 0xdc, 0xb1, 0x90, 0x2e, 0x0d, 0xa9, 0xf0, 0xf3, 0x4a, 0x15, 0x8d, 0xdb, 0xf7, - 0x06, 0x03, 0xfd, 0xc3, 0x6d, 0xe3, 0x4e, 0xab, 0x00, 0x31, 0xeb, 0x73, 0x71, 0x36, 0xb0, 0x37, - 0x11, 0x9f, 0x7c, 0x09, 0x93, 0x4d, 0x26, 0x15, 0x1e, 0x8b, 0x58, 0xd7, 0x15, 0xf0, 0x82, 0xd7, - 0xea, 0xc3, 0x90, 0x56, 0x4b, 0x00, 0xe8, 0x66, 0x65, 0x6d, 0xbd, 0x54, 0x7b, 0xad, 0x9d, 0x7c, - 0x54, 0xb0, 0x49, 0x31, 0x23, 0xb4, 0x5b, 0x75, 0x4c, 0x0f, 0x67, 0x43, 0x63, 0xaf, 0x42, 0x61, - 0xf4, 0xe5, 0xce, 0xc4, 0xb2, 0x66, 0x3a, 0x36, 0x89, 0x92, 0xdb, 0xbd, 0x3d, 0xb5, 0x67, 0xb2, - 0x61, 0x70, 0xe5, 0x7c, 0xa2, 0x18, 0x37, 0x52, 0xf0, 0x46, 0x3b, 0x51, 0x11, 0x8d, 0xf8, 0xbc, - 0x50, 0x31, 0xff, 0xc6, 0x6d, 0x40, 0x2c, 0x21, 0xe7, 0x24, 0xf1, 0x72, 0x6d, 0x02, 0x12, 0xe8, - 0x20, 0xd1, 0x26, 0x01, 0x74, 0x60, 0xc2, 0x47, 0x6a, 0x57, 0x4d, 0x67, 0x91, 0xbf, 0xab, 0x61, - 0x76, 0x7d, 0x87, 0x1c, 0x09, 0xf8, 0x79, 0x2c, 0x90, 0x3e, 0x34, 0x08, 0x90, 0xcc, 0xb4, 0x75, - 0x2a, 0xcf, 0x48, 0xa6, 0x15, 0x72, 0xd8, 0xa2, 0x01, 0x17, 0xdc, 0x32, 0xf6, 0x76, 0xeb, 0x39, - 0x66, 0x91, 0x21, 0xa7, 0x09, 0xe0, 0x5b, 0x0b, 0xbc, 0xc7, 0x04, 0x34, 0xc0, 0x7c, 0x0d, 0xe0, - 0xa4, 0x8a, 0xd7, 0xf7, 0x36, 0x35, 0x1a, 0xae, 0x17, 0x0b, 0xcd, 0x52, 0xd3, 0xa1, 0xf7, 0x1f, - 0x8f, 0x79, 0xac, 0x82, 0x92, 0x95, 0x79, 0x63, 0xa5, 0x44, 0x6f, 0x8f, 0xf7, 0xc4, 0x8e, 0x49, - 0xec, 0xf5, 0xb8, 0x57, 0xa6, 0x5c, 0x0e, 0x8c, 0x72, 0x5d, 0x21, 0xef, 0xf5, 0xf6, 0x71, 0xd9, - 0x43, 0x5d, 0xb5, 0xf0, 0x71, 0x2f, 0x86, 0x33, 0x83, 0x54, 0x39, 0x5c, 0xb1, 0xe0, 0x48, 0xa5, - 0x8e, 0xb4, 0xb2, 0x43, 0xb4, 0xe6, 0xa9, 0xaf, 0x62, 0x74, 0xbd, 0x5e, 0x61, 0x4e, 0x2a, 0x02, - 0x92, 0x09, 0x96, 0xc5, 0x26, 0x23, 0x77, 0x88, 0xab, 0x67, 0x8b, 0xfe, 0x83, 0x66, 0x8f, 0xac, - 0xaf, 0x53, 0x9f, 0xd8, 0xb1, 0x63, 0xfa, 0x66, 0xad, 0xd0, 0x85, 0x35, 0x23, 0xe2, 0xfe, 0x89, - 0xdb, 0x6e, 0x80, 0xd4, 0xcf, 0xe7, 0xbd, 0xe5, 0xe5, 0x34, 0xe7, 0xde, 0x4b, 0x32, 0x9f, 0x2a, - 0x76, 0xcc, 0x2e, 0x2c, 0xb2, 0xd8, 0xeb, 0x77, 0x4b, 0x88, 0xd0, 0x9b, 0xbb, 0x5b, 0x3e, 0x7e, - 0x9d, 0x7c, 0x86, 0x8e, 0x86, 0x05, 0x9f, 0xf8, 0xda, 0xbe, 0x68, 0xcb, 0x00, 0x9a, 0xd8, 0xaf, - 0xc8, 0xcc, 0x61, 0xd5, 0x53, 0x0d, 0x65, 0xf6, 0xee, 0xea, 0xa6, 0x5e, 0x3c, 0xe1, 0x5a, 0x2d, - 0x5a, 0x2f, 0x54, 0x65, 0x8d, 0x76, 0xfa, 0xdd, 0x8d, 0xb9, 0x97, 0xeb, 0x5d, 0x14, 0x18, 0xde, - 0x57, 0x60, 0xef, 0xbe, 0x02, 0xfb, 0x08, 0x45, 0x21, 0xe4, 0x63, 0xa9, 0x41, 0x30, 0xfe, 0xb2, - 0x29, 0xe5, 0xef, 0xe5, 0x2d, 0x53, 0x8a, 0x89, 0x4a, 0x9c, 0x85, 0x95, 0xf6, 0x5c, 0x59, 0x69, - 0xc7, 0x02, 0xfd, 0x1d, 0xda, 0x76, 0x86, 0x72, 0x6c, 0x2f, 0x8b, 0x4d, 0x50, 0xe6, 0xbd, 0x02, - 0xc9, 0xd1, 0xc6, 0x6d, 0xcb, 0xbd, 0x3d, 0x90, 0xb5, 0x92, 0xc8, 0xe4, 0x54, 0xa0, 0x3d, 0xa6, - 0x17, 0xda, 0xef, 0x3b, 0x03, 0xbd, 0x90, 0xb6, 0xdd, 0x51, 0x24, 0xae, 0xd5, 0xe6, 0xed, 0x1d, - 0xbd, 0xf7, 0x76, 0x4b, 0xb9, 0xc3, 0x0a, 0x6c, 0xd4, 0xed, 0x47, 0xec, 0x76, 0x84, 0xfc, 0xaa, - 0xdb, 0xdb, 0x00, 0x0d, 0xad, 0x62, 0xad, 0xc8, 0xfe, 0xfe, 0x97, 0xc2, 0x05, 0xac, 0xa5, 0x34, - 0xa4, 0x3d, 0x67, 0xb8, 0x39, 0xee, 0xde, 0xe3, 0x52, 0xa1, 0x5e, 0x77, 0x44, 0x82, 0xf5, 0xcb, - 0x06, 0xde, 0x77, 0x97, 0x35, 0xbb, 0x09, 0xbd, 0x5e, 0x6f, 0x52, 0x1e, 0x2c, 0x72, 0xb4, 0x1e, - 0x70, 0x34, 0x1d, 0x11, 0xa3, 0xf2, 0xb6, 0xf9, 0xbe, 0x02, 0x03, 0x95, 0x21, 0xb0, 0x8a, 0xcb, - 0x60, 0x08, 0x60, 0xfb, 0xe5, 0x52, 0x83, 0x6e, 0x79, 0x2a, 0xeb, 0x81, 0x55, 0x67, 0x01, 0x4a, - 0xf6, 0x77, 0x31, 0xee, 0x3e, 0x35, 0x35, 0xd4, 0xb0, 0xb3, 0x56, 0x1f, 0xb3, 0x2c, 0x0b, 0xf7, - 0xfe, 0x99, 0x85, 0x81, 0x60, 0xf0, 0xe0, 0x10, 0x40, 0xcd, 0x40, 0x2f, 0x15, 0xed, 0x62, 0xd8, - 0xa3, 0xde, 0xb0, 0xef, 0xec, 0x6e, 0x54, 0xef, 0xa9, 0x89, 0xa3, 0x2e, 0xba, 0xdd, 0x8d, 0x12, - 0xc3, 0x32, 0x10, 0xbb, 0x7d, 0xe7, 0xf1, 0x46, 0x99, 0x51, 0xb9, 0xcc, 0x68, 0x54, 0x03, 0xe8, - 0xfe, 0x9d, 0xf4, 0x5f, 0xc0, 0x41, 0x53, 0xdc, 0xeb, 0xd6, 0x60, 0xb6, 0x57, 0x26, 0x83, 0xc7, - 0xc3, 0x2f, 0xa1, 0x7f, 0x99, 0x8a, 0xfb, 0x0f, 0xd5, 0x55, 0x5c, 0xf6, 0x97, 0xcf, 0x6b, 0xac, - 0x4d, 0x54, 0x0f, 0xd4, 0x49, 0x11, 0xcd, 0xb9, 0xab, 0xc9, 0x21, 0xe6, 0xa5, 0x2d, 0x81, 0xfc, - 0xb4, 0x74, 0x58, 0x28, 0x07, 0x8a, 0x12, 0x28, 0xd8, 0xc2, 0x14, 0x70, 0xcf, 0x23, 0xf7, 0x1e, - 0x97, 0xc7, 0x39, 0x18, 0x49, 0x8a, 0x2d, 0x09, 0x61, 0x94, 0x8c, 0xb9, 0x57, 0x18, 0x13, 0xba, - 0x3b, 0x89, 0x48, 0x2e, 0x25, 0xcf, 0x47, 0xcd, 0x9e, 0x13, 0xd7, 0x6b, 0xb9, 0x3b, 0x62, 0x64, - 0xab, 0x92, 0xc5, 0xc1, 0x28, 0x69, 0x02, 0xc7, 0xba, 0x09, 0x1c, 0xd7, 0x9b, 0xc0, 0x43, 0x69, - 0xf8, 0xc6, 0x77, 0x1a, 0xbe, 0x05, 0xe3, 0xe5, 0xfd, 0x3e, 0x56, 0xea, 0x3e, 0x37, 0x66, 0x45, - 0x7f, 0xf5, 0x66, 0x98, 0xec, 0x41, 0x6c, 0x3b, 0xa3, 0xe2, 0x10, 0x6f, 0x6e, 0x3b, 0x37, 0xbc, - 0x81, 0xfd, 0xa7, 0x76, 0xc9, 0xa0, 0xe8, 0xa9, 0x57, 0x58, 0x16, 0xe3, 0x3f, 0x55, 0xac, 0x60, - 0x2d, 0xf8, 0x72, 0xc1, 0xaf, 0xe9, 0x8e, 0x18, 0x6d, 0xa2, 0xf5, 0xe9, 0x05, 0x4e, 0xae, 0x7b, - 0x48, 0x73, 0xe1, 0x6d, 0xd5, 0x7d, 0x94, 0x8f, 0x79, 0xe0, 0x28, 0xf8, 0x11, 0xae, 0x53, 0x61, - 0x9c, 0x20, 0x3c, 0xd2, 0x7a, 0x92, 0xc0, 0x7d, 0xb8, 0xbb, 0x44, 0x71, 0x8e, 0xac, 0xd5, 0xff, - 0xd2, 0x8d, 0x6e, 0x56, 0xb3, 0xd1, 0x9d, 0x03, 0x54, 0x75, 0xee, 0xa1, 0x58, 0x8d, 0x0c, 0x26, - 0x56, 0x3f, 0xe2, 0x26, 0x8a, 0xc4, 0xb4, 0x67, 0x58, 0x36, 0xb5, 0xe4, 0x1a, 0xc9, 0xf5, 0x35, - 0x72, 0xb9, 0x15, 0x7b, 0x14, 0xb2, 0xd5, 0xbf, 0xcb, 0x54, 0x88, 0xa5, 0xb2, 0xaf, 0x4c, 0x06, - 0x5f, 0x2e, 0x94, 0x7d, 0xcd, 0x62, 0x88, 0x0b, 0x8b, 0x21, 0x2d, 0x14, 0x88, 0xe2, 0xf0, 0x82, - 0xbe, 0xae, 0xca, 0x65, 0xf6, 0xfb, 0xa8, 0x19, 0xe7, 0xf2, 0xd4, 0x89, 0x76, 0x2c, 0x0f, 0xc8, - 0x82, 0x96, 0x4f, 0xde, 0xe2, 0xae, 0x6f, 0xcd, 0xb3, 0x8a, 0x14, 0x33, 0xc9, 0x5d, 0xbe, 0x9f, - 0x0c, 0x03, 0x4a, 0x15, 0x41, 0xfd, 0x22, 0xec, 0x95, 0x02, 0x3c, 0x51, 0x24, 0xd6, 0x16, 0xd4, - 0xbe, 0xa4, 0xb6, 0x78, 0x5c, 0x4f, 0x8c, 0x32, 0xb7, 0x4a, 0x87, 0x9f, 0xef, 0xb4, 0x49, 0xa4, - 0x9b, 0x4b, 0xa3, 0xc9, 0x58, 0x23, 0xc7, 0x99, 0x27, 0xf7, 0xd7, 0xb0, 0x1f, 0x40, 0xfb, 0x6c, - 0xd2, 0x75, 0x19, 0x24, 0xe3, 0x5f, 0x3a, 0xb5, 0x12, 0xeb, 0x56, 0x43, 0xa1, 0x93, 0x0f, 0xb7, - 0x6c, 0xd8, 0x49, 0xdb, 0xec, 0x12, 0xfe, 0x22, 0x7e, 0x6a, 0xcc, 0xe3, 0x5c, 0x6e, 0x9a, 0x61, - 0xc9, 0x62, 0x7e, 0xd7, 0xf1, 0xc6, 0x76, 0x9c, 0xda, 0xdc, 0x6a, 0x08, 0xbb, 0x94, 0xbb, 0x3d, - 0x7d, 0x67, 0xa6, 0x88, 0x2a, 0xd6, 0x89, 0xea, 0x5a, 0x1c, 0x2a, 0xcf, 0xca, 0xe8, 0x48, 0xbd, - 0x14, 0x75, 0x7a, 0x2f, 0x13, 0xa8, 0x91, 0x28, 0xa1, 0x5d, 0xe2, 0x5d, 0x71, 0x4a, 0x67, 0xf7, - 0xc4, 0xf3, 0x5b, 0x83, 0x7e, 0xc9, 0x5b, 0x64, 0x59, 0x33, 0xe9, 0xb6, 0xec, 0xef, 0xb9, 0xb3, - 0x56, 0x7f, 0x8f, 0x68, 0x5a, 0x9c, 0x39, 0x1a, 0xf5, 0x71, 0x03, 0x88, 0x1f, 0xf0, 0xf1, 0x69, - 0xa7, 0x78, 0xaf, 0x70, 0xd6, 0xf5, 0x01, 0xa5, 0x19, 0x82, 0x8c, 0xa7, 0xf4, 0xe4, 0x0e, 0xb7, - 0x48, 0x9b, 0x10, 0x9f, 0x77, 0xbb, 0x54, 0x47, 0x9e, 0x5b, 0xc2, 0x17, 0xe1, 0x64, 0x53, 0x87, - 0x8a, 0xf0, 0xe4, 0x28, 0x16, 0x19, 0x29, 0x0f, 0xa8, 0x2f, 0x4e, 0x50, 0x79, 0xd9, 0x38, 0xc6, - 0x17, 0xe1, 0x36, 0x12, 0x0d, 0x37, 0x7b, 0xbc, 0x88, 0xf4, 0x92, 0x56, 0x49, 0xe5, 0x76, 0x53, - 0x30, 0x71, 0x64, 0x57, 0x56, 0x5a, 0x49, 0x28, 0x55, 0xd7, 0x5a, 0x2a, 0xd7, 0xda, 0xe8, 0x6e, - 0x99, 0x24, 0x4f, 0xff, 0xf5, 0xc8, 0x3b, 0x3a, 0xaa, 0xe8, 0x79, 0x83, 0x1a, 0x81, 0xc5, 0xc5, - 0x4f, 0x5e, 0x2f, 0x7e, 0xf2, 0xaa, 0xf8, 0xd1, 0x78, 0x33, 0x9d, 0x09, 0xd8, 0x2e, 0x28, 0x98, - 0xb7, 0x3f, 0x58, 0xd7, 0x09, 0xea, 0xf3, 0x1a, 0x7c, 0x94, 0xc6, 0xae, 0x59, 0x8c, 0xa5, 0xc3, - 0x93, 0x5b, 0x0f, 0x4e, 0xa6, 0x72, 0x4c, 0xeb, 0x2d, 0x47, 0x26, 0x75, 0xac, 0xa4, 0x55, 0x04, - 0x00, 0x93, 0x96, 0xdc, 0x5c, 0x6e, 0x13, 0x2c, 0x61, 0xce, 0xca, 0x0a, 0xd0, 0xbe, 0xb6, 0x8f, - 0x3a, 0xdc, 0xc4, 0x93, 0xb6, 0x21, 0xfc, 0x18, 0xc5, 0xda, 0x06, 0x11, 0x5c, 0x15, 0x9c, 0x77, - 0xcb, 0xcc, 0x8d, 0x68, 0x1e, 0xaa, 0x9a, 0xee, 0xa8, 0x7a, 0xa8, 0x50, 0x9d, 0xd9, 0x45, 0xfd, - 0xb0, 0xa4, 0x6e, 0x96, 0x35, 0xbd, 0x7e, 0xb7, 0xbb, 0xa9, 0xc5, 0xf5, 0x7b, 0x95, 0x32, 0xba, - 0x0e, 0xbc, 0xd6, 0x75, 0xb9, 0xa2, 0x4c, 0xbf, 0xab, 0xe9, 0x69, 0x25, 0x7d, 0xac, 0x6e, 0x72, - 0x1f, 0xdc, 0x29, 0x61, 0x04, 0x03, 0xa8, 0xe3, 0x4f, 0xbe, 0xb6, 0x26, 0xb4, 0xe3, 0xb3, 0xbe, - 0x5c, 0x07, 0xbe, 0xbe, 0x0e, 0xd4, 0xf7, 0xa7, 0xba, 0x83, 0xaa, 0xc1, 0x26, 0xbf, 0x58, 0x31, - 0x77, 0xd9, 0xf1, 0x02, 0x65, 0x46, 0x3a, 0xec, 0xa3, 0xcd, 0xe0, 0x6b, 0x5a, 0x19, 0xcc, 0x3c, - 0x62, 0xdf, 0x93, 0x3e, 0x4f, 0xdf, 0xa3, 0x4b, 0xdc, 0x05, 0xff, 0xd9, 0x2b, 0x36, 0xec, 0x10, - 0x8e, 0xa1, 0xda, 0xcd, 0xc9, 0x37, 0x66, 0xf7, 0x46, 0x1e, 0xee, 0xdf, 0x64, 0x80, 0x88, 0x85, - 0x0c, 0x46, 0x1e, 0x7a, 0x5d, 0x75, 0x6e, 0xa2, 0x91, 0xda, 0x14, 0x58, 0x0f, 0x19, 0xb2, 0x1a, - 0x6b, 0xe6, 0xc5, 0x48, 0x11, 0x9c, 0xa5, 0xc3, 0x73, 0x2e, 0x9f, 0xcf, 0xac, 0xec, 0xe0, 0x00, - 0x79, 0x4e, 0x7f, 0xd8, 0xf0, 0x42, 0xf9, 0x28, 0x86, 0x98, 0xd2, 0x81, 0x4b, 0x81, 0x00, 0x02, - 0xa0, 0x5b, 0xf6, 0x3e, 0xd2, 0x9e, 0x0d, 0x87, 0x09, 0xff, 0x92, 0xaf, 0x3f, 0xc3, 0xeb, 0x49, - 0xed, 0xb6, 0x15, 0xd2, 0xdf, 0xd5, 0x7d, 0x9a, 0xf5, 0x93, 0x7a, 0x1b, 0x99, 0x55, 0xdd, 0x1d, - 0x62, 0xbf, 0x71, 0xf0, 0x58, 0xfc, 0x1d, 0xe8, 0x44, 0xaa, 0x3b, 0x3e, 0x59, 0xb3, 0xbd, 0xa7, - 0x79, 0x17, 0x86, 0xdd, 0x15, 0x52, 0xdb, 0xae, 0x3a, 0xa8, 0x36, 0x52, 0xc6, 0xcf, 0xb6, 0xbe, - 0xe4, 0x56, 0xde, 0xbe, 0x58, 0xd8, 0xfb, 0x43, 0xad, 0x2f, 0xdd, 0x98, 0xa0, 0xf1, 0xe2, 0xa9, - 0xc8, 0xfe, 0x40, 0xb6, 0x3e, 0x5c, 0xdf, 0x33, 0xde, 0x17, 0xff, 0xf4, 0x78, 0xcb, 0xbe, 0x16, - 0x71, 0x92, 0xa6, 0x34, 0x32, 0x1a, 0xe9, 0xb0, 0x2b, 0xdf, 0x1f, 0x37, 0x99, 0xa6, 0x92, 0xf6, - 0x8a, 0xf3, 0x6b, 0x5b, 0x07, 0x3c, 0x54, 0xcc, 0x4a, 0xb7, 0x12, 0xc4, 0x28, 0x74, 0x57, 0xdc, - 0x6e, 0xb3, 0x3a, 0x6e, 0x9c, 0xe8, 0x8d, 0x91, 0x6b, 0xb7, 0x70, 0x1c, 0x6d, 0xac, 0x5d, 0xfd, - 0xec, 0x5a, 0x71, 0xea, 0x27, 0x6f, 0xb5, 0xf7, 0x45, 0xa3, 0x87, 0xe8, 0x10, 0xdd, 0xe2, 0xb7, - 0xeb, 0x8d, 0xba, 0xea, 0x24, 0x3a, 0x6a, 0x7d, 0x75, 0x93, 0x83, 0xc1, 0x7f, 0xb9, 0x6e, 0x2d, - 0xd5, 0x55, 0x0d, 0x1d, 0x80, 0x2c, 0xb1, 0xc1, 0xb1, 0x12, 0x1e, 0xf1, 0x5c, 0x4a, 0x1c, 0x68, - 0x6e, 0x63, 0x24, 0x25, 0x4d, 0xf7, 0xed, 0xdd, 0x9a, 0x6e, 0x2a, 0x3f, 0x6a, 0x19, 0x91, 0x6a, - 0x86, 0x12, 0x3f, 0x56, 0xe2, 0x7e, 0x34, 0x94, 0x86, 0xd5, 0x80, 0x1f, 0x3a, 0x05, 0xf3, 0x88, - 0x89, 0xcf, 0x4e, 0x98, 0xe0, 0x48, 0xe2, 0x88, 0x08, 0x95, 0x8f, 0x95, 0x2e, 0x81, 0xfa, 0x0c, - 0xfe, 0xe5, 0xc7, 0x8d, 0xb9, 0x92, 0x82, 0x7f, 0x77, 0xf7, 0xc5, 0xdf, 0x3d, 0x91, 0x3e, 0x10, - 0x7f, 0xbb, 0xf8, 0x37, 0xc1, 0x83, 0x47, 0x35, 0x63, 0x78, 0x75, 0x37, 0x57, 0xc1, 0xb1, 0x64, - 0xf8, 0x65, 0x0d, 0x7e, 0x1a, 0xd3, 0x6d, 0xa7, 0x02, 0xc2, 0x4c, 0x98, 0x08, 0x4c, 0xc2, 0x4f, - 0x5f, 0xfb, 0x17, 0x3e, 0x7e, 0xdc, 0x45, 0xa6, 0xe8, 0x90, 0xbc, 0xbc, 0xd8, 0x43, 0x26, 0x85, - 0x5b, 0xdb, 0x8b, 0xd0, 0xbc, 0x0f, 0x47, 0xc4, 0x54, 0xc7, 0xca, 0xc7, 0x51, 0xb7, 0x64, 0x9e, - 0x15, 0xd1, 0x05, 0x37, 0x81, 0x8d, 0xbd, 0x58, 0x63, 0x84, 0x88, 0xfe, 0xac, 0xa2, 0x03, 0x66, - 0xa0, 0x60, 0x71, 0xc5, 0x70, 0x20, 0x75, 0x40, 0x5f, 0xdb, 0xba, 0xf6, 0x69, 0x9e, 0x6c, 0xa1, - 0x82, 0x71, 0xf4, 0xe1, 0xdf, 0x4c, 0x21, 0x3e, 0x13, 0xaa, 0x5b, 0x4e, 0xcf, 0x7b, 0x4a, 0x8d, - 0xcb, 0xa4, 0xa6, 0x17, 0xf3, 0x97, 0xd1, 0x16, 0x1d, 0xed, 0xf7, 0x7b, 0xc5, 0xf3, 0x17, 0xb9, - 0x73, 0xe4, 0x47, 0x16, 0x1b, 0xee, 0x2a, 0x0c, 0xc1, 0xb0, 0xe9, 0x01, 0xab, 0xb8, 0x8d, 0xee, - 0x93, 0xad, 0x1f, 0xb7, 0xda, 0x1c, 0xe3, 0x54, 0x9b, 0xec, 0x94, 0x9f, 0x20, 0x15, 0x93, 0xad, - 0xef, 0x0c, 0xaa, 0xc5, 0x25, 0x26, 0x3c, 0xd5, 0x26, 0x3c, 0x95, 0x13, 0x8e, 0xf1, 0x0b, 0x4a, - 0xf0, 0x4b, 0x40, 0xd3, 0x62, 0xee, 0x53, 0x1d, 0xac, 0xd7, 0x15, 0x76, 0x49, 0x1c, 0xbe, 0x60, - 0x11, 0x07, 0xbb, 0xf7, 0x72, 0xf3, 0x81, 0xfc, 0x74, 0x65, 0xd4, 0xbd, 0x83, 0x8d, 0xeb, 0x9c, - 0x72, 0xd4, 0xb4, 0x9e, 0x70, 0xd6, 0x70, 0x0f, 0x2f, 0xff, 0xad, 0x4e, 0xd9, 0xbc, 0xdb, 0x23, - 0x94, 0x6f, 0x78, 0x84, 0x98, 0xa6, 0x74, 0xdc, 0xaf, 0x61, 0x56, 0xf9, 0x33, 0xd8, 0xb4, 0xeb, - 0xad, 0x9a, 0xc3, 0xcb, 0x02, 0x79, 0xfa, 0xa6, 0xdc, 0xf7, 0x7c, 0x70, 0x4a, 0x8d, 0x79, 0xa2, - 0xbf, 0x6f, 0xdb, 0xad, 0x67, 0x1a, 0xb3, 0xde, 0xf8, 0x64, 0xa0, 0x20, 0xb3, 0x5a, 0xda, 0x7a, - 0x5f, 0xe0, 0x89, 0xf0, 0x63, 0x11, 0xd3, 0xa2, 0x1e, 0xc4, 0xc7, 0x23, 0x72, 0xe4, 0xac, 0x18, - 0x33, 0x4e, 0x56, 0xbb, 0xa4, 0x85, 0x92, 0x0e, 0xab, 0x76, 0x8e, 0x0a, 0x82, 0x66, 0x6d, 0xf9, - 0x59, 0x1f, 0x80, 0x53, 0x0b, 0xc0, 0xbb, 0x02, 0x11, 0x04, 0x3b, 0xf9, 0x3c, 0xf7, 0xba, 0xe4, - 0xf3, 0xc4, 0x23, 0xa8, 0xf4, 0xbe, 0xcf, 0x75, 0x51, 0xdc, 0x0a, 0x17, 0x5e, 0xd1, 0xfd, 0x11, - 0xf7, 0xcf, 0x4a, 0x63, 0xaf, 0x96, 0x08, 0x3e, 0x6c, 0xac, 0x6e, 0x76, 0x87, 0xac, 0x2a, 0x7f, - 0x4d, 0x25, 0xe5, 0x6e, 0x9d, 0x2e, 0xb3, 0x6d, 0xa1, 0xbe, 0x29, 0x8d, 0xa5, 0xb2, 0x39, 0x3f, - 0xd9, 0x38, 0x1a, 0x3f, 0xa2, 0xe1, 0x54, 0xfd, 0xd9, 0xc3, 0xd1, 0xdd, 0x2c, 0xf7, 0x8f, 0x72, - 0x27, 0x02, 0xbd, 0xb5, 0xfc, 0x9b, 0xb3, 0x2c, 0x32, 0xf2, 0x6b, 0x1a, 0xfa, 0x61, 0x73, 0xea, - 0x47, 0x9c, 0xb8, 0x38, 0xef, 0x54, 0xe7, 0x83, 0x68, 0xb2, 0x45, 0xa3, 0xa5, 0x09, 0xad, 0x6d, - 0xf6, 0xf9, 0x56, 0x8a, 0xfa, 0x97, 0x9a, 0xfd, 0x71, 0x2b, 0xb4, 0x7b, 0xff, 0x42, 0xab, 0x3f, - 0x6f, 0x07, 0x76, 0xf4, 0x2f, 0x34, 0xfb, 0x74, 0x6b, 0xb3, 0xc3, 0x7f, 0xa1, 0xd5, 0xef, 0x2a, - 0xad, 0x52, 0x93, 0xbc, 0x7d, 0xe1, 0x57, 0xe2, 0xae, 0x13, 0x56, 0xb8, 0x4e, 0x56, 0x52, 0x0b, - 0x91, 0x11, 0xad, 0xa8, 0x60, 0xc3, 0xeb, 0xea, 0xed, 0xfe, 0xb5, 0xd2, 0xee, 0xa8, 0x5b, 0xd3, - 0x2e, 0x2c, 0x10, 0x56, 0x88, 0xe3, 0x95, 0xd4, 0x62, 0xee, 0x6a, 0x17, 0xec, 0xe1, 0xa5, 0xf8, - 0xfc, 0xb7, 0x27, 0xbe, 0x07, 0x56, 0x0c, 0xac, 0x34, 0xd8, 0x62, 0x37, 0xb2, 0x27, 0xf6, 0xef, - 0xaa, 0xec, 0xf2, 0xfb, 0x82, 0xe8, 0x55, 0x7f, 0xbd, 0xbe, 0x6e, 0x4c, 0xc0, 0x4a, 0x5e, 0x95, - 0xc5, 0x8f, 0x0e, 0xca, 0xdf, 0xaa, 0xf5, 0x0d, 0xed, 0xc8, 0xc9, 0x60, 0x7f, 0xa5, 0xbf, 0x0d, - 0xf5, 0x8a, 0x3f, 0x59, 0x32, 0xbc, 0x8a, 0xa5, 0x4f, 0xa3, 0xa0, 0xb9, 0xd2, 0x30, 0xf4, 0x6a, - 0x7f, 0xaf, 0x54, 0x13, 0xa4, 0x3a, 0xbc, 0xa7, 0xda, 0x2f, 0x77, 0x81, 0xd9, 0x1b, 0xe8, 0x60, - 0xf6, 0x4a, 0xa8, 0xfe, 0x55, 0xef, 0x8f, 0xa0, 0xbc, 0xa7, 0x27, 0xc6, 0xca, 0x35, 0x00, 0xc0, - 0x7b, 0x6a, 0xe4, 0x45, 0x0d, 0xc3, 0xd7, 0xe5, 0xc4, 0x90, 0x1b, 0xac, 0x7a, 0xd9, 0x94, 0x69, - 0x4c, 0x0a, 0x5a, 0x53, 0x64, 0x52, 0x89, 0x00, 0x27, 0x00, 0x50, 0x9f, 0x40, 0x57, 0x08, 0x28, - 0xd3, 0xba, 0x24, 0xfa, 0xd1, 0x33, 0x43, 0xad, 0x8f, 0x04, 0x54, 0xe1, 0xfd, 0xfd, 0x7e, 0xab, - 0xb7, 0xdb, 0x6c, 0xf7, 0x46, 0x12, 0x77, 0x90, 0x22, 0xd8, 0xf4, 0x32, 0x5b, 0xb8, 0x21, 0x73, - 0xfc, 0xd0, 0xfd, 0xd9, 0x61, 0x6e, 0x86, 0x71, 0x07, 0xdc, 0xbf, 0x3b, 0x2c, 0x62, 0xee, 0x0f, - 0xf0, 0x9b, 0xb9, 0x3f, 0x3a, 0x2c, 0x73, 0x19, 0x73, 0xce, 0xdc, 0x98, 0x39, 0x61, 0xe0, 0xbe, - 0x77, 0x42, 0xe6, 0x3e, 0x75, 0xc2, 0xb9, 0x9b, 0xc3, 0x7b, 0xe6, 0xfe, 0xea, 0xcc, 0xdd, 0xc8, - 0x49, 0x99, 0xfb, 0x57, 0x27, 0x0d, 0xdd, 0xef, 0x9c, 0xcc, 0x77, 0xdf, 0x3a, 0x19, 0x73, 0x9f, - 0xc3, 0x4f, 0xe6, 0xa6, 0xcc, 0xc9, 0x32, 0xf7, 0xa7, 0xf5, 0xda, 0xaa, 0xbb, 0x61, 0x09, 0xa3, - 0x02, 0xd1, 0xe5, 0x35, 0xee, 0x79, 0x94, 0x4c, 0xfd, 0xc8, 0x59, 0xae, 0x9d, 0xef, 0x6d, 0xe7, - 0x6f, 0xde, 0x9f, 0x9d, 0x6c, 0x61, 0xfd, 0xbd, 0x4d, 0xa1, 0x0e, 0x1e, 0xab, 0x0b, 0x7f, 0x62, - 0x15, 0xc5, 0xaf, 0xd5, 0x1b, 0x43, 0x11, 0x96, 0x59, 0x7f, 0xb3, 0x1d, 0x78, 0xf0, 0xad, 0x18, - 0xe3, 0x99, 0xfd, 0x62, 0xfd, 0x5a, 0x13, 0x77, 0xe0, 0x6f, 0x18, 0x30, 0x02, 0x4a, 0xcd, 0x2d, - 0xbc, 0x3f, 0x22, 0x67, 0xd0, 0x38, 0xc6, 0x16, 0xa1, 0xb0, 0x73, 0xea, 0x32, 0x80, 0xe3, 0x13, - 0x1e, 0xed, 0x9f, 0x02, 0x29, 0xfc, 0xd9, 0x49, 0x43, 0xcb, 0x1e, 0x17, 0xd1, 0x6f, 0xfe, 0xec, - 0x84, 0x99, 0x85, 0xd7, 0x05, 0xc2, 0x03, 0x45, 0xe7, 0x82, 0x07, 0x3f, 0xa4, 0x40, 0x5e, 0x90, - 0x12, 0x58, 0x18, 0x88, 0x00, 0xc0, 0xc0, 0x32, 0x3e, 0x3e, 0x60, 0xdc, 0x14, 0x8a, 0xe5, 0x0d, - 0x4d, 0x85, 0xd0, 0x6f, 0xb3, 0x69, 0xcd, 0xbc, 0x94, 0xf1, 0x4b, 0x02, 0xe2, 0x09, 0x43, 0x76, - 0xe1, 0x94, 0xa2, 0x94, 0xc9, 0x9c, 0x76, 0xcf, 0xc5, 0x48, 0x75, 0x4e, 0xc6, 0x63, 0xed, 0x2f, - 0x63, 0x77, 0xe6, 0x00, 0xfa, 0x61, 0x66, 0x72, 0x44, 0x64, 0x88, 0x98, 0xf5, 0x9d, 0xc0, 0x8d, - 0x1d, 0xdf, 0x4d, 0xd7, 0xfc, 0x76, 0x40, 0x84, 0x97, 0x55, 0xe0, 0x65, 0x12, 0x5e, 0x26, 0xe1, - 0x85, 0xb9, 0x14, 0x00, 0xc3, 0xdc, 0x5a, 0x76, 0x35, 0x4c, 0x1a, 0x43, 0xd0, 0xd3, 0x43, 0x60, - 0x67, 0xa5, 0xe4, 0xd4, 0x76, 0x81, 0x0d, 0x8b, 0xc8, 0xff, 0x4b, 0x09, 0x09, 0x90, 0x45, 0xea, - 0x00, 0x85, 0xc4, 0x4e, 0xec, 0x0e, 0x86, 0x78, 0x99, 0xc0, 0x6a, 0x35, 0xd8, 0xc7, 0xbf, 0x13, - 0x24, 0x6f, 0x18, 0x5c, 0x66, 0xbb, 0x32, 0xbc, 0x18, 0x45, 0xf6, 0x8a, 0x62, 0x37, 0x3d, 0xe8, - 0x4e, 0x78, 0x50, 0x11, 0x5e, 0xc7, 0x17, 0x75, 0x7c, 0xac, 0x93, 0x42, 0x1d, 0xbf, 0xa8, 0x83, - 0x56, 0xd3, 0x5a, 0xee, 0x74, 0x1d, 0x67, 0x4e, 0xe8, 0x34, 0x1a, 0x7f, 0x76, 0xce, 0x2c, 0xfb, - 0x64, 0x0d, 0x86, 0x9a, 0xdf, 0x59, 0xd8, 0xc5, 0xdd, 0x21, 0x47, 0x04, 0x7b, 0xc7, 0xf7, 0x8e, - 0x61, 0x12, 0xe1, 0xff, 0x8d, 0xde, 0x89, 0xd4, 0x40, 0xfc, 0xce, 0x91, 0x07, 0xc5, 0xd7, 0x36, - 0x4e, 0x4c, 0xe7, 0x95, 0xe7, 0x77, 0xce, 0x44, 0x30, 0x56, 0x15, 0x81, 0x84, 0x47, 0x92, 0x4b, - 0xc7, 0x7e, 0x27, 0xf0, 0x44, 0x7c, 0x16, 0x3d, 0x2a, 0x28, 0xb4, 0x8b, 0x97, 0xc1, 0x63, 0x0c, - 0x58, 0x5e, 0x07, 0x66, 0x24, 0x45, 0xfc, 0xaf, 0x45, 0xf8, 0x12, 0x2b, 0x06, 0x9c, 0x35, 0x9b, - 0x8d, 0x37, 0xab, 0x55, 0x1b, 0x23, 0x40, 0xc6, 0xf0, 0xfc, 0x9d, 0x16, 0xe5, 0x83, 0xdf, 0x18, - 0x12, 0xaf, 0x56, 0x0d, 0x19, 0xdb, 0x9e, 0xd3, 0xdc, 0x32, 0x75, 0x33, 0x67, 0xea, 0x86, 0x22, - 0xc4, 0x09, 0x46, 0xf1, 0x4a, 0x01, 0xc6, 0x74, 0xb5, 0xc2, 0xd1, 0x89, 0x65, 0x8a, 0xf1, 0xe6, - 0x9f, 0x62, 0x44, 0x26, 0x20, 0xdc, 0xa2, 0x3d, 0xa2, 0x94, 0x27, 0xcd, 0xe6, 0x13, 0x2b, 0xb3, - 0x27, 0xcb, 0xa9, 0x9b, 0xad, 0x5d, 0x0b, 0x63, 0xae, 0x8a, 0x9b, 0xa3, 0x28, 0xd0, 0xdf, 0xc6, - 0x4d, 0x09, 0xb9, 0xb3, 0x54, 0x25, 0x44, 0x6c, 0x17, 0xba, 0xdc, 0x96, 0xec, 0x5e, 0xe8, 0xd7, - 0xee, 0x9c, 0xd9, 0x45, 0x3a, 0x5e, 0xde, 0x19, 0xe5, 0x3c, 0xc8, 0x12, 0x06, 0x17, 0x02, 0x1c, - 0x92, 0x35, 0x4b, 0x61, 0x60, 0x28, 0x68, 0xc6, 0x92, 0x6e, 0x5c, 0x10, 0xc1, 0x70, 0xaa, 0xf1, - 0x7e, 0xc8, 0x42, 0xcf, 0x3b, 0xd3, 0xd5, 0x2a, 0x3d, 0xce, 0x3b, 0x0b, 0xbc, 0x2a, 0x81, 0x3f, - 0x78, 0x3d, 0x11, 0x4b, 0x27, 0xef, 0xbc, 0x72, 0x36, 0xb1, 0x9d, 0x77, 0x02, 0x42, 0x35, 0x46, - 0x5a, 0xa7, 0x46, 0xe8, 0x8a, 0x89, 0x18, 0x97, 0x6d, 0x07, 0x6f, 0x04, 0x09, 0xd4, 0xcd, 0x46, - 0xac, 0x13, 0x53, 0x40, 0xc7, 0x99, 0x93, 0xd8, 0xce, 0xb5, 0x0a, 0x1a, 0x5e, 0x85, 0x01, 0x37, - 0x0b, 0x10, 0x8c, 0x06, 0xef, 0x5e, 0x5d, 0x68, 0xc0, 0x81, 0xe9, 0x6a, 0xd7, 0xef, 0xc4, 0x3c, - 0x2c, 0x54, 0x60, 0x63, 0x4c, 0x4e, 0x79, 0xc1, 0xec, 0x71, 0xec, 0x64, 0x60, 0xa1, 0x74, 0x7c, - 0x58, 0xdf, 0x79, 0xe7, 0x48, 0xdc, 0x05, 0x72, 0xd5, 0x6c, 0x5e, 0xb3, 0x89, 0x08, 0xce, 0x8e, - 0x91, 0xce, 0xae, 0xd9, 0xfa, 0xe1, 0xf8, 0xd4, 0x35, 0x4d, 0xf5, 0x21, 0xda, 0x19, 0xf1, 0x92, - 0xe2, 0xd0, 0x37, 0x13, 0x21, 0x5a, 0xce, 0x8e, 0xcf, 0x8a, 0x40, 0x72, 0x07, 0x4c, 0x5b, 0xb2, - 0x67, 0xfc, 0xde, 0x8f, 0xb1, 0xdf, 0xf2, 0x4e, 0x29, 0x36, 0x3a, 0xad, 0x03, 0x3c, 0x39, 0x49, - 0x91, 0x8d, 0x9f, 0xc0, 0x80, 0x60, 0x92, 0xd6, 0xa7, 0xd0, 0x05, 0x5b, 0x43, 0x21, 0xbd, 0x04, - 0xa5, 0xa9, 0xa1, 0xd0, 0x2a, 0xcd, 0x70, 0x85, 0x02, 0xaf, 0xc8, 0x80, 0x56, 0x83, 0x35, 0x46, - 0xa7, 0x53, 0x97, 0x94, 0x04, 0xb6, 0x08, 0xa1, 0x07, 0xa3, 0x3d, 0x4e, 0x5a, 0xad, 0x13, 0x60, - 0x0a, 0x69, 0x67, 0xea, 0x44, 0x5e, 0x23, 0x1e, 0x47, 0x40, 0x3d, 0x16, 0xbe, 0xe3, 0xfd, 0x09, - 0xfc, 0xc1, 0xbb, 0xb1, 0x4e, 0x19, 0x45, 0x8e, 0x29, 0xa6, 0x78, 0xf1, 0xe0, 0x37, 0xeb, 0xd2, - 0x5e, 0x3e, 0x58, 0xa6, 0xb0, 0x3e, 0x7a, 0x7c, 0x7d, 0x28, 0xf6, 0x80, 0xd1, 0xec, 0x54, 0x78, - 0xf0, 0xcc, 0x7b, 0x68, 0x3e, 0xc4, 0xeb, 0x74, 0x3a, 0x47, 0xc7, 0x0c, 0x6f, 0xaf, 0x79, 0x68, - 0xaa, 0x37, 0x41, 0xe5, 0xa7, 0xec, 0xc1, 0x6f, 0x0f, 0x96, 0xf1, 0xda, 0xbb, 0x7c, 0xb0, 0xcc, - 0x26, 0xe6, 0xb1, 0xe9, 0x9a, 0x1d, 0x73, 0x8d, 0x6d, 0x1f, 0x69, 0x2c, 0x64, 0x4d, 0x99, 0x27, - 0x26, 0x5e, 0xe8, 0x74, 0xba, 0xb6, 0xc5, 0xdd, 0x22, 0x0e, 0x5e, 0x2e, 0xa2, 0xc0, 0xe0, 0xa8, - 0x9d, 0x9c, 0xe2, 0xf8, 0xca, 0xb0, 0xf1, 0xd8, 0x81, 0x26, 0xf4, 0x64, 0xb6, 0x72, 0xbd, 0x32, - 0xcd, 0xdb, 0x5a, 0x8c, 0xef, 0xce, 0x01, 0x49, 0x30, 0x81, 0xdc, 0x8d, 0x0d, 0xe0, 0x4e, 0x4b, - 0x00, 0x7d, 0x8a, 0x77, 0x76, 0xbe, 0x35, 0xb2, 0x64, 0x91, 0xce, 0xd8, 0xc7, 0xf7, 0xaf, 0x3c, - 0x2c, 0x9e, 0xae, 0x27, 0xb3, 0xdb, 0x59, 0xc4, 0x4e, 0x91, 0xa8, 0x81, 0x22, 0x50, 0x60, 0xe1, - 0x64, 0xef, 0x3c, 0x2a, 0xa6, 0x1b, 0x43, 0x7b, 0x66, 0xf6, 0xfa, 0xd1, 0x0e, 0x4d, 0x78, 0x8c, - 0xd3, 0xdd, 0x88, 0x30, 0xae, 0x61, 0x86, 0x0c, 0x05, 0x0a, 0x8f, 0xb5, 0x1b, 0x01, 0x10, 0x9a, - 0x64, 0x2d, 0xef, 0x05, 0x80, 0x19, 0x04, 0x22, 0xe4, 0xd9, 0x4b, 0x98, 0x1e, 0x84, 0x72, 0xc1, - 0x8b, 0xac, 0x55, 0x91, 0x0c, 0x8a, 0x88, 0x44, 0x4b, 0xd4, 0xb7, 0x4f, 0xf1, 0x12, 0x15, 0x19, - 0x7e, 0x1f, 0x28, 0x29, 0x23, 0x6f, 0x22, 0xf1, 0xb2, 0x60, 0x02, 0x44, 0x77, 0xe9, 0x2d, 0x17, - 0x69, 0xe4, 0x02, 0xf5, 0x39, 0x22, 0x72, 0x9e, 0x3b, 0x65, 0x6b, 0x07, 0x17, 0xeb, 0x25, 0x2c, - 0xce, 0x05, 0x0d, 0x86, 0x0f, 0xa5, 0x88, 0xef, 0xd7, 0xf9, 0x2d, 0x3d, 0x16, 0x44, 0x0b, 0xac, - 0x1a, 0xd0, 0x89, 0x74, 0x0b, 0x32, 0xc1, 0x5a, 0x00, 0xa7, 0x1f, 0x51, 0x69, 0x13, 0xcb, 0x01, - 0xbe, 0xce, 0xc4, 0xad, 0x32, 0x88, 0x8f, 0x19, 0x46, 0x8b, 0xcb, 0xd5, 0x68, 0x3f, 0xc5, 0xda, - 0x80, 0xe4, 0x28, 0x72, 0x1a, 0x05, 0x86, 0x4e, 0x42, 0x22, 0x84, 0x19, 0xcb, 0x74, 0x5e, 0xd5, - 0x89, 0x62, 0xbb, 0x3c, 0x79, 0x24, 0x7a, 0x90, 0x5b, 0x6b, 0xcb, 0x8a, 0x07, 0x7e, 0x04, 0x8c, - 0x54, 0xe6, 0x4d, 0x4a, 0x95, 0xdf, 0x6c, 0x60, 0x6f, 0x9f, 0xe2, 0x53, 0xed, 0x62, 0x05, 0x3c, - 0x70, 0xab, 0x5d, 0x95, 0x92, 0xb6, 0x64, 0x68, 0x63, 0x10, 0xa4, 0xa1, 0x76, 0x1f, 0x54, 0x6c, - 0x62, 0x2c, 0xc7, 0xc4, 0x23, 0xb6, 0x9f, 0x4d, 0x40, 0x64, 0xcb, 0x10, 0xc8, 0x0b, 0x98, 0x50, - 0x1c, 0xb8, 0xbc, 0x02, 0x2b, 0x54, 0x21, 0x80, 0x13, 0xe4, 0x72, 0x29, 0xbf, 0xc3, 0x0d, 0x70, - 0x90, 0xd0, 0xed, 0x1b, 0x53, 0x68, 0x56, 0x0f, 0xbc, 0xf9, 0x02, 0x90, 0x3c, 0xaf, 0xa4, 0x1d, - 0xe1, 0x89, 0x89, 0x83, 0x19, 0xa0, 0x6b, 0x4a, 0xf7, 0xf5, 0xcc, 0xe9, 0x79, 0x4e, 0xcf, 0x04, - 0xc0, 0x14, 0x5e, 0x69, 0xd1, 0xcf, 0x57, 0xab, 0xf9, 0xe1, 0x14, 0xe4, 0x52, 0x00, 0x0d, 0x39, - 0x53, 0x91, 0x3d, 0x87, 0xec, 0x00, 0x5a, 0x71, 0xe6, 0x42, 0x4e, 0x41, 0xf9, 0xe9, 0xe1, 0x5c, - 0x95, 0xb2, 0x01, 0x68, 0x09, 0xbf, 0x90, 0x3c, 0x53, 0x3e, 0x37, 0x2f, 0x58, 0x0b, 0x41, 0x86, - 0xc9, 0x9a, 0x7a, 0xc0, 0x7e, 0x6f, 0x30, 0x70, 0x39, 0x70, 0x48, 0x41, 0x47, 0x82, 0x2f, 0xcb, - 0x70, 0x67, 0x18, 0xb3, 0x31, 0x84, 0x7f, 0x33, 0x60, 0xda, 0xf4, 0x71, 0x79, 0xe5, 0x62, 0x19, - 0xe8, 0xf0, 0x86, 0xc9, 0x48, 0xf5, 0x9f, 0xd9, 0x6d, 0x66, 0x25, 0x2a, 0xd4, 0x25, 0x06, 0xcc, - 0x06, 0x81, 0x23, 0xc3, 0xa4, 0xa1, 0xce, 0x73, 0xce, 0x78, 0x7b, 0xd0, 0x5c, 0xb3, 0x89, 0x51, - 0x37, 0xa7, 0x20, 0xde, 0xcf, 0x29, 0x64, 0x9b, 0xd0, 0xe7, 0xce, 0x3c, 0x59, 0x19, 0x04, 0xe8, - 0x0c, 0x05, 0x48, 0x23, 0x9e, 0xcc, 0x3a, 0x53, 0x77, 0xd6, 0x59, 0xa8, 0xa6, 0xe0, 0x79, 0xad, - 0x1c, 0x64, 0x33, 0x4e, 0x74, 0xa2, 0x16, 0xbc, 0x81, 0x08, 0x44, 0xfa, 0x3a, 0x03, 0xa4, 0xd7, - 0x42, 0x77, 0xa6, 0xed, 0x74, 0xf1, 0x9b, 0x61, 0x45, 0x48, 0xda, 0x6a, 0xe8, 0x6b, 0x0c, 0xf6, - 0xca, 0x2f, 0xbb, 0xa3, 0x4b, 0x51, 0x5f, 0x06, 0x11, 0x7b, 0x06, 0xb2, 0x6e, 0xea, 0xcf, 0x3e, - 0x4f, 0xb6, 0x65, 0xb8, 0x7a, 0xc6, 0x93, 0x38, 0xbc, 0xa4, 0xc8, 0x87, 0xdf, 0xe1, 0x75, 0x0a, - 0xe3, 0xb8, 0xb8, 0x91, 0xdb, 0xc8, 0xac, 0xe2, 0xba, 0xa2, 0x5e, 0xb7, 0xfb, 0x88, 0xf6, 0x83, - 0xc3, 0x43, 0xa5, 0x69, 0x54, 0xc3, 0x23, 0x0a, 0x8a, 0x0b, 0x9d, 0xb0, 0x85, 0xe7, 0xe2, 0x0a, - 0xe9, 0xc3, 0x63, 0xca, 0x01, 0x5e, 0xf1, 0xca, 0x01, 0x7e, 0x67, 0x65, 0x71, 0xe5, 0x00, 0xeb, - 0x4c, 0xed, 0x75, 0xde, 0x6a, 0x39, 0x31, 0x28, 0x1c, 0xa5, 0x3b, 0xef, 0x9f, 0x68, 0xa1, 0x69, - 0x4f, 0x31, 0xe4, 0xa7, 0x0a, 0x65, 0xbe, 0xf3, 0x70, 0xe7, 0xdc, 0x31, 0x3f, 0x7d, 0x7a, 0x08, - 0xcb, 0xea, 0xe1, 0xa9, 0xbc, 0x1a, 0x90, 0x79, 0x66, 0x95, 0x35, 0x9a, 0xce, 0x51, 0x25, 0x55, - 0x5c, 0x55, 0xc3, 0x33, 0xdf, 0x32, 0x6f, 0xe7, 0x1f, 0x16, 0x06, 0x43, 0x5f, 0x41, 0x32, 0x40, - 0x4f, 0x98, 0xb0, 0x3f, 0xed, 0x58, 0x37, 0x6d, 0x7b, 0x52, 0x5c, 0x97, 0x60, 0x8d, 0x57, 0x0f, - 0xec, 0x1d, 0xe7, 0x15, 0x15, 0x2f, 0x97, 0xbc, 0xf6, 0xb3, 0x4b, 0x91, 0xfd, 0x6c, 0x5b, 0x6b, - 0x18, 0xa3, 0x4d, 0x94, 0xf9, 0x7d, 0x5b, 0x99, 0x19, 0xe8, 0xf7, 0xbc, 0xc8, 0x47, 0x28, 0x02, - 0x3c, 0xf1, 0x93, 0xf5, 0x29, 0x7b, 0x64, 0x4d, 0x5c, 0xeb, 0xd8, 0x7c, 0x78, 0x62, 0x5b, 0xf0, - 0xf4, 0xe9, 0x53, 0x67, 0x75, 0xfc, 0x8f, 0x4f, 0xf1, 0xa7, 0x4f, 0x98, 0xd2, 0xb2, 0x3f, 0xf5, - 0x56, 0x5a, 0x72, 0xe6, 0x98, 0x0f, 0x2d, 0xfb, 0xd3, 0x27, 0xcc, 0xb1, 0xa1, 0xea, 0x27, 0x7b, - 0xe7, 0x9c, 0x54, 0x8a, 0xd7, 0x0c, 0xed, 0x8f, 0xdf, 0xd0, 0xc7, 0x50, 0x51, 0xa5, 0x5e, 0x32, - 0xb9, 0xdf, 0x01, 0x13, 0x7b, 0x09, 0x64, 0xaf, 0xe9, 0x79, 0xe5, 0xd0, 0x76, 0x6f, 0x12, 0x43, - 0xe5, 0xe0, 0x45, 0xd0, 0x18, 0xe5, 0x77, 0x8d, 0xf1, 0x57, 0x41, 0x69, 0xc0, 0xab, 0x85, 0x24, - 0xe3, 0xd2, 0xa2, 0x79, 0x43, 0x93, 0xad, 0xd6, 0x6f, 0xec, 0x10, 0x49, 0x41, 0xbb, 0x9e, 0x4f, - 0xbb, 0xe2, 0xe3, 0x35, 0xe3, 0xcc, 0x99, 0xf1, 0xd8, 0xd9, 0xb1, 0x8c, 0x7e, 0x18, 0x13, 0xff, - 0xe5, 0xbb, 0x17, 0x42, 0x7d, 0xe5, 0x3c, 0x95, 0xb3, 0x4f, 0x15, 0x28, 0x16, 0xa3, 0xe8, 0xd3, - 0x3d, 0x07, 0x9e, 0x16, 0x2c, 0x96, 0x6e, 0x98, 0xd5, 0xc1, 0x33, 0xda, 0x60, 0x08, 0x32, 0xe8, - 0x3b, 0xbf, 0x4e, 0xd2, 0xcf, 0x46, 0x94, 0x9c, 0xd3, 0x00, 0x02, 0x96, 0xfb, 0x61, 0x94, 0x75, - 0x80, 0x0f, 0xb7, 0x54, 0x43, 0x4e, 0xbe, 0x16, 0xd7, 0xca, 0x2f, 0x7f, 0x63, 0xed, 0xb6, 0xf3, - 0xba, 0xb8, 0xd7, 0x0e, 0x1e, 0xb3, 0x8b, 0xf0, 0x2c, 0xb7, 0x40, 0xdb, 0x5f, 0x53, 0x60, 0xc1, - 0x4e, 0xf2, 0xb9, 0x1a, 0xff, 0x2f, 0xc3, 0xcb, 0x2f, 0xf3, 0x45, 0xb6, 0x36, 0x8a, 0x67, 0xbc, - 0xcf, 0x82, 0xbf, 0xc3, 0xa4, 0x4a, 0xa0, 0x4e, 0x15, 0x6b, 0xc8, 0xaa, 0xb1, 0x8d, 0xdf, 0xb3, - 0xea, 0x1d, 0x66, 0x1c, 0x07, 0x6a, 0xb2, 0x30, 0x58, 0x1d, 0x5d, 0x58, 0xc0, 0xd2, 0x0c, 0x03, - 0xcc, 0x5a, 0xa6, 0xb8, 0x8a, 0xa0, 0x8d, 0x76, 0x2f, 0xbf, 0x78, 0xf0, 0xad, 0xb8, 0x37, 0x33, - 0x93, 0xf7, 0x24, 0x82, 0x41, 0x10, 0x23, 0x00, 0x60, 0xee, 0x09, 0x24, 0x77, 0x90, 0x08, 0xd1, - 0x8c, 0x73, 0xcd, 0xdf, 0x33, 0x93, 0xf4, 0xed, 0x57, 0x45, 0x2d, 0x15, 0x1e, 0x9b, 0xc2, 0xc4, - 0x82, 0x36, 0x25, 0xa0, 0xf8, 0x99, 0x4d, 0x9f, 0x64, 0x19, 0xbb, 0x9c, 0x46, 0xb7, 0x1d, 0x0c, - 0xb3, 0x19, 0x46, 0xec, 0x28, 0x4f, 0x99, 0x7f, 0x09, 0x6b, 0x0a, 0xc3, 0xeb, 0xab, 0x10, 0xf9, - 0x7c, 0x07, 0xde, 0x34, 0xc7, 0x95, 0xd8, 0xa8, 0x7a, 0x03, 0xfc, 0x9a, 0x02, 0x79, 0xa5, 0x16, - 0x4c, 0xac, 0x9d, 0x2a, 0x39, 0x6f, 0x3c, 0x42, 0x1d, 0x03, 0x9e, 0x73, 0xbc, 0x53, 0x8a, 0x5f, - 0x6b, 0x45, 0x3c, 0x80, 0x47, 0x46, 0x04, 0x21, 0x0d, 0x33, 0x07, 0x9c, 0xc6, 0x3b, 0x2d, 0xa5, - 0xba, 0xa2, 0x46, 0xab, 0xb5, 0x76, 0x4e, 0xc7, 0x08, 0x04, 0x36, 0x29, 0xb8, 0x98, 0xb8, 0x62, - 0xc8, 0xf0, 0x8c, 0xcd, 0xc1, 0x88, 0x48, 0x84, 0xa1, 0x9f, 0x03, 0x07, 0xd3, 0x34, 0x8d, 0xeb, - 0x63, 0x1e, 0x6c, 0xf8, 0xc4, 0x41, 0xfd, 0x2d, 0xc4, 0xe0, 0x9f, 0xd0, 0xf1, 0x17, 0x8c, 0x8a, - 0x2b, 0x7d, 0x6a, 0x54, 0xa2, 0xf0, 0x8d, 0x18, 0x8f, 0xa7, 0xa0, 0xa1, 0xf6, 0xe9, 0xce, 0x1d, - 0xe8, 0x84, 0x06, 0x85, 0xc5, 0xa5, 0xca, 0x28, 0x6b, 0xc0, 0x78, 0x10, 0x1f, 0xa6, 0x2a, 0x6b, - 0x1a, 0xa4, 0x43, 0x8c, 0x37, 0xa6, 0x37, 0xc5, 0x19, 0x45, 0xae, 0x64, 0xd2, 0x66, 0xef, 0xb3, - 0x3b, 0x28, 0xc1, 0x14, 0xbd, 0x08, 0xef, 0xba, 0x61, 0xb6, 0xea, 0x68, 0x23, 0x89, 0x39, 0x75, - 0xfc, 0x7e, 0x47, 0x4b, 0xa7, 0x7c, 0xb5, 0xe2, 0x02, 0x7f, 0x76, 0x74, 0x74, 0x84, 0xf7, 0xf1, - 0x1c, 0x5d, 0x30, 0xa0, 0x4d, 0x7b, 0x9c, 0x49, 0xae, 0x7d, 0x84, 0x06, 0xee, 0x83, 0x65, 0x25, - 0xec, 0xb1, 0x55, 0xee, 0xd2, 0x56, 0x3c, 0xfe, 0x23, 0x73, 0xd0, 0xca, 0xa2, 0xeb, 0x16, 0xe8, - 0xf2, 0xab, 0x53, 0xe8, 0xca, 0x42, 0xad, 0xea, 0xc1, 0xf2, 0xa3, 0x05, 0x42, 0x37, 0x43, 0xeb, - 0x05, 0xdf, 0xed, 0x53, 0x0c, 0xcc, 0x3a, 0xae, 0x0c, 0x26, 0x1b, 0x9f, 0x22, 0xfc, 0x74, 0x29, - 0xd1, 0xb8, 0x12, 0x59, 0xba, 0x88, 0x9c, 0xfc, 0x4c, 0x2c, 0x1d, 0xbc, 0x9e, 0x59, 0x5e, 0x5f, - 0x56, 0xdc, 0x2b, 0x55, 0xf0, 0x38, 0x71, 0x8d, 0x33, 0x28, 0xc6, 0x0b, 0x98, 0xc6, 0x29, 0xde, - 0xce, 0x94, 0x5e, 0x41, 0xfd, 0xeb, 0x30, 0xbf, 0x30, 0x7c, 0xe3, 0xca, 0x8f, 0x40, 0x33, 0x79, - 0xfd, 0xf2, 0xf5, 0x0b, 0x0a, 0xf4, 0x69, 0x44, 0xe1, 0x67, 0x66, 0x68, 0x0c, 0x5e, 0xbb, 0x7a, - 0x07, 0xd8, 0xa5, 0xb6, 0x07, 0x83, 0x8c, 0xb0, 0xc1, 0x77, 0xa0, 0x1a, 0x1b, 0x71, 0x84, 0xb7, - 0xdf, 0xd7, 0x1a, 0x4e, 0xcc, 0x3b, 0x2f, 0x85, 0x75, 0xb7, 0x64, 0xe3, 0xed, 0xad, 0x14, 0xd1, - 0x77, 0xfc, 0x35, 0x5d, 0xdd, 0x71, 0x37, 0x2d, 0xf4, 0xb4, 0xf5, 0x9a, 0xd8, 0xef, 0xa8, 0xa3, - 0xaf, 0x1f, 0xd9, 0xb6, 0x3b, 0x72, 0x2b, 0x7d, 0x89, 0x6b, 0x6a, 0xa1, 0xa3, 0xbf, 0x96, 0x6f, - 0x9f, 0xff, 0x50, 0x8a, 0xef, 0x0f, 0xba, 0xb6, 0xf4, 0xe8, 0x96, 0xbd, 0x18, 0xc5, 0x9b, 0xa7, - 0xe5, 0x60, 0xb0, 0x65, 0x50, 0x94, 0x41, 0x8b, 0x63, 0xe9, 0xbb, 0x04, 0xe6, 0x8f, 0x97, 0x2d, - 0x27, 0x79, 0xd5, 0x32, 0xb6, 0x83, 0x41, 0x46, 0xdb, 0x5a, 0x80, 0x74, 0x1e, 0x78, 0x79, 0x96, - 0x26, 0x59, 0xf6, 0x96, 0x82, 0xa4, 0x4f, 0xe8, 0x5a, 0x24, 0x99, 0xed, 0x99, 0xe2, 0xf2, 0x68, - 0x18, 0x94, 0x1f, 0x27, 0xf1, 0xed, 0x65, 0xb2, 0xb8, 0xbf, 0x0e, 0x88, 0xce, 0xdc, 0x74, 0x2b, - 0x89, 0x7a, 0x20, 0x76, 0x10, 0x60, 0x74, 0xb7, 0x1e, 0xdb, 0xb8, 0x79, 0xcb, 0x76, 0xfe, 0xc0, - 0x1d, 0xaa, 0x62, 0x0f, 0x0a, 0x3d, 0xbc, 0xdd, 0x86, 0xd7, 0x6e, 0xff, 0xc1, 0x56, 0xab, 0x0b, - 0xd0, 0x61, 0x29, 0xa6, 0xf0, 0x6a, 0xa5, 0xa6, 0x06, 0xef, 0xd3, 0x42, 0x81, 0x4b, 0x71, 0x91, - 0x29, 0x48, 0x36, 0x7f, 0x32, 0x9f, 0xbf, 0x7d, 0x2d, 0x96, 0x0d, 0x5e, 0x36, 0xce, 0x02, 0xbc, - 0x33, 0x3d, 0x07, 0xad, 0x7e, 0x7b, 0x14, 0xe7, 0x8d, 0x1a, 0x4e, 0xe1, 0x22, 0x53, 0x61, 0x90, - 0x7f, 0xa0, 0x8b, 0xce, 0xf8, 0x4d, 0x66, 0x25, 0x50, 0x7f, 0x54, 0xa0, 0x3e, 0xff, 0x5a, 0x50, - 0x37, 0x82, 0x38, 0x2b, 0x6f, 0xef, 0xcf, 0xcc, 0xe3, 0x8e, 0x1e, 0x60, 0x3b, 0x47, 0xe1, 0x14, - 0x96, 0xcb, 0x39, 0x5e, 0x09, 0xcf, 0x2f, 0x51, 0xc2, 0xc8, 0xdd, 0xcd, 0xe6, 0xcf, 0x40, 0x47, - 0x5a, 0x82, 0xed, 0x3c, 0xe5, 0xd1, 0xe4, 0x6d, 0xac, 0x87, 0x97, 0x17, 0xd3, 0xf5, 0x85, 0x0d, - 0x86, 0xb7, 0x02, 0x81, 0xf2, 0xc4, 0x8a, 0x8b, 0x89, 0x20, 0x0b, 0x2b, 0xe3, 0x25, 0xb8, 0xe8, - 0xd3, 0xa2, 0x4b, 0x7d, 0xab, 0x97, 0xcd, 0x53, 0xc0, 0x6d, 0x28, 0xd0, 0xb0, 0x18, 0xbf, 0x8b, - 0x4e, 0x33, 0x07, 0xbf, 0xe3, 0x71, 0xe6, 0x9f, 0x33, 0x3c, 0x6b, 0x49, 0xb1, 0xd2, 0xb9, 0x55, - 0xc9, 0x3f, 0xd9, 0xc5, 0xfe, 0x6c, 0x11, 0x16, 0x5e, 0xa8, 0xe2, 0x78, 0xdf, 0xf2, 0xfa, 0x0a, - 0x23, 0x5b, 0xdf, 0x32, 0xef, 0x96, 0x55, 0xdd, 0x90, 0x3c, 0x16, 0x3c, 0xd6, 0x9b, 0xf0, 0x90, - 0xc7, 0x85, 0x4a, 0x81, 0x89, 0x0e, 0xad, 0x18, 0xe0, 0xbd, 0xa4, 0xa8, 0xda, 0xae, 0x16, 0xa4, - 0x5e, 0x1b, 0x14, 0x5d, 0x89, 0x99, 0xce, 0x56, 0x2b, 0x1e, 0x52, 0xde, 0xee, 0x08, 0x75, 0xac, - 0x72, 0xeb, 0x7d, 0x0e, 0x62, 0x43, 0xbf, 0xcd, 0x0f, 0xd8, 0x7e, 0xee, 0xdf, 0x10, 0xeb, 0x25, - 0xdf, 0xa1, 0x76, 0x8d, 0x5f, 0xa1, 0xb5, 0x51, 0x67, 0xe2, 0x7a, 0x6d, 0xba, 0xd6, 0x12, 0x2d, - 0x71, 0xa1, 0x94, 0xad, 0xa1, 0x35, 0x17, 0x99, 0x31, 0xef, 0x5d, 0x83, 0x68, 0x8d, 0x97, 0xfb, - 0x1d, 0xd1, 0x05, 0x78, 0xfa, 0x35, 0x06, 0xda, 0x55, 0x1f, 0x7f, 0xad, 0x20, 0x52, 0xe2, 0x51, - 0xf7, 0x95, 0x82, 0xbe, 0x22, 0xae, 0x24, 0xad, 0x4e, 0x12, 0x21, 0x10, 0x83, 0xa0, 0x63, 0x7d, - 0xb0, 0xb4, 0xfe, 0x80, 0x3f, 0xe3, 0x14, 0x5f, 0xd1, 0x5c, 0x69, 0x36, 0xff, 0xc0, 0x7b, 0x6f, - 0xa5, 0x23, 0xea, 0x81, 0x40, 0x26, 0xe2, 0x87, 0xf0, 0xe9, 0x48, 0xca, 0xd0, 0x20, 0x76, 0x1a, - 0x21, 0xda, 0xab, 0x6f, 0x58, 0xe9, 0x1e, 0x3c, 0x2c, 0xb2, 0x95, 0x84, 0x79, 0x20, 0xf6, 0x02, - 0xdf, 0x47, 0x36, 0x82, 0x60, 0xc1, 0x12, 0xcf, 0x78, 0x1b, 0x3f, 0xe2, 0xc5, 0x01, 0x00, 0x8d, - 0x78, 0xfd, 0x81, 0x49, 0x12, 0xff, 0x93, 0x21, 0xf3, 0x2b, 0x76, 0xf2, 0xf8, 0xb6, 0x8d, 0xb8, - 0x76, 0x5b, 0xdc, 0x7f, 0xf8, 0x27, 0x5e, 0xdf, 0x8e, 0x9e, 0x01, 0xf4, 0xa2, 0x16, 0x2f, 0x1e, - 0x6a, 0xa1, 0xdc, 0x63, 0x20, 0x68, 0x03, 0xb0, 0x6a, 0xd9, 0xdf, 0x1c, 0xc8, 0x50, 0xd4, 0x95, - 0xb8, 0xd6, 0x45, 0x08, 0xfa, 0x43, 0x63, 0xf9, 0x8d, 0x41, 0xff, 0x2b, 0x2e, 0x70, 0x53, 0x49, - 0x90, 0x08, 0x92, 0x98, 0x61, 0x9c, 0x6b, 0xf3, 0x22, 0xcf, 0xe7, 0x99, 0xbb, 0xb3, 0xb3, 0x88, - 0xe7, 0x9f, 0xcf, 0x51, 0x97, 0xdc, 0xa1, 0xac, 0xff, 0xe8, 0x76, 0x7a, 0xbb, 0xa3, 0x4e, 0x6f, - 0x67, 0xba, 0x08, 0xa3, 0x80, 0xa7, 0x09, 0xed, 0x0e, 0xc8, 0xd3, 0x74, 0x2a, 0x2d, 0xed, 0x00, - 0xb3, 0x81, 0xc1, 0xee, 0x7c, 0x49, 0x8b, 0xec, 0xc6, 0xc7, 0xb8, 0xf0, 0x19, 0xd8, 0x63, 0x97, - 0x3b, 0xa6, 0x68, 0x68, 0x4d, 0x7f, 0xd7, 0x86, 0x36, 0xb2, 0x1d, 0x54, 0xae, 0xe1, 0xef, 0x34, - 0x09, 0x6e, 0x0d, 0x71, 0x57, 0x98, 0x99, 0xc4, 0xc8, 0xba, 0x2c, 0x1b, 0x06, 0x78, 0x10, 0x84, - 0x57, 0x06, 0xdd, 0x48, 0xe0, 0xc9, 0x60, 0xfd, 0x90, 0x78, 0xd1, 0x3b, 0xfc, 0xe6, 0x28, 0xf7, - 0x53, 0x50, 0x14, 0x8c, 0xe9, 0x2d, 0xe8, 0x0b, 0xea, 0x1a, 0x2e, 0xe3, 0x7f, 0xfd, 0xf7, 0xff, - 0xfa, 0x3f, 0xa0, 0xd5, 0x1e, 0x96, 0xea, 0x1f, 0x52, 0xf5, 0x30, 0x40, 0x09, 0xc0, 0x17, 0x09, - 0x86, 0xe6, 0x37, 0x0f, 0x0f, 0x76, 0x20, 0x1d, 0x7e, 0xa1, 0x84, 0x71, 0x10, 0xc6, 0xf3, 0x45, - 0x6e, 0x7c, 0xc3, 0x91, 0x0b, 0xc4, 0x98, 0x83, 0x12, 0x86, 0x4a, 0xc6, 0x02, 0x5e, 0x9f, 0xcc, - 0xe7, 0x26, 0xd5, 0xbf, 0xa2, 0xa7, 0x04, 0xe4, 0x48, 0x38, 0xfb, 0x0c, 0x72, 0x80, 0xe5, 0x3f, - 0x85, 0xec, 0xda, 0xc2, 0xdb, 0x29, 0x08, 0xcc, 0xbb, 0x1a, 0x01, 0x48, 0x81, 0x1b, 0xf2, 0x66, - 0xc4, 0xf3, 0x3f, 0xd7, 0xd0, 0x47, 0x50, 0x84, 0x44, 0x3b, 0xfc, 0xf1, 0x9f, 0x84, 0x07, 0xb8, - 0x34, 0xbb, 0x94, 0x00, 0xdd, 0x66, 0xff, 0x6c, 0x3b, 0xa0, 0x42, 0x48, 0xe4, 0xe0, 0xd3, 0xf6, - 0x46, 0x60, 0xb5, 0xc5, 0x87, 0xc6, 0x0a, 0xe7, 0x9d, 0x9e, 0xbe, 0x11, 0xcd, 0xd6, 0x43, 0xe7, - 0x5f, 0x09, 0x64, 0x4d, 0xf9, 0x63, 0xd1, 0x2e, 0xbc, 0xc2, 0x34, 0xb3, 0xa8, 0xd2, 0xf2, 0x37, - 0x5a, 0xd3, 0x1f, 0x2e, 0xd8, 0x25, 0x06, 0x82, 0x27, 0x2d, 0xc7, 0x40, 0xed, 0xdd, 0x03, 0xe2, - 0x85, 0xb4, 0x36, 0x4f, 0xe2, 0x2d, 0x97, 0x53, 0xbe, 0x81, 0x1e, 0x48, 0x62, 0x11, 0xe8, 0xd4, - 0x42, 0xd1, 0x03, 0x0f, 0x20, 0x2f, 0x81, 0x03, 0x22, 0x4a, 0x81, 0x0c, 0xcd, 0x43, 0x41, 0x7d, - 0x07, 0x3b, 0x3c, 0xbf, 0x28, 0xf8, 0x8d, 0x28, 0x79, 0x1d, 0x81, 0xe8, 0x3d, 0xfc, 0xf9, 0xd5, - 0x8b, 0xe7, 0x9b, 0x65, 0x44, 0x11, 0x3f, 0xca, 0x7b, 0xe6, 0xe1, 0x13, 0xf4, 0x78, 0xc6, 0xa0, - 0xb9, 0x5e, 0xb1, 0xde, 0xf6, 0xe6, 0xa0, 0x6c, 0xbf, 0x54, 0xb6, 0xbf, 0xb5, 0xd9, 0x28, 0x3c, - 0xbf, 0xc8, 0xcd, 0xc3, 0x57, 0xf8, 0x67, 0x7b, 0x83, 0x81, 0x9f, 0x7e, 0x36, 0x0f, 0x9f, 0xc3, - 0xef, 0xd6, 0x86, 0xa6, 0xf0, 0x6b, 0x1e, 0x3e, 0x85, 0xdf, 0xed, 0xcd, 0xcc, 0x41, 0xf5, 0x35, - 0x0f, 0xdf, 0xc1, 0xef, 0xd6, 0x66, 0x60, 0x62, 0x66, 0xd0, 0xce, 0x11, 0xfe, 0xd9, 0xde, 0x50, - 0x7c, 0xeb, 0xc7, 0xe6, 0xe1, 0x1b, 0xf8, 0xd5, 0xca, 0xec, 0xf0, 0x29, 0xc2, 0x27, 0x5c, 0xb0, - 0x86, 0x5a, 0xce, 0x97, 0x41, 0x84, 0x4a, 0x8e, 0x1f, 0x02, 0xaf, 0x97, 0x5c, 0xe2, 0x1b, 0x95, - 0x11, 0x2d, 0x2e, 0xe3, 0xae, 0xa9, 0xd8, 0x86, 0x4c, 0x32, 0xb7, 0xb4, 0x83, 0x79, 0x3d, 0x20, - 0x83, 0xaf, 0x29, 0xdf, 0xbf, 0xb7, 0xf9, 0x32, 0x38, 0x83, 0x3b, 0xcb, 0x57, 0x7a, 0x01, 0x91, - 0x12, 0x87, 0x31, 0x90, 0x4f, 0xf3, 0xdb, 0xfd, 0xc7, 0xfb, 0xdd, 0x31, 0xcf, 0xff, 0x46, 0x03, - 0x23, 0x09, 0xfc, 0x08, 0xd7, 0x98, 0xa9, 0xf1, 0x46, 0x3f, 0x92, 0x8c, 0xcd, 0x38, 0x98, 0x1b, - 0x74, 0x4f, 0x2b, 0x36, 0x15, 0x25, 0xa9, 0x7b, 0x9e, 0xb2, 0x5b, 0x13, 0x1a, 0xb0, 0x66, 0xb6, - 0xd1, 0xef, 0xf6, 0x87, 0x25, 0x8e, 0xf9, 0x2a, 0x9c, 0xb1, 0x38, 0x03, 0xfb, 0x0a, 0xb7, 0xf5, - 0x53, 0xe3, 0xfb, 0x77, 0xaf, 0xda, 0x57, 0x83, 0x83, 0x9d, 0xb9, 0x0e, 0x90, 0x1f, 0x83, 0x49, - 0xf5, 0x9a, 0xc5, 0x0b, 0x40, 0x93, 0x68, 0x79, 0x9e, 0x64, 0x21, 0x4e, 0x93, 0xeb, 0x4f, 0x41, - 0x1f, 0x01, 0x19, 0x3e, 0x16, 0x97, 0xc2, 0xba, 0x74, 0x27, 0x2c, 0x02, 0x71, 0x78, 0xc0, 0xd7, - 0xb6, 0xd6, 0xc6, 0x53, 0x4a, 0xe8, 0x21, 0xa4, 0x3c, 0xef, 0xf0, 0x1b, 0xde, 0xd5, 0xf6, 0xc2, - 0x7d, 0xad, 0xf0, 0x7d, 0x65, 0x07, 0x30, 0xca, 0x27, 0x41, 0x60, 0xbc, 0x38, 0x3b, 0x03, 0xba, - 0xa9, 0x54, 0x43, 0x0e, 0xa1, 0xd5, 0x78, 0xee, 0xe7, 0xbe, 0x69, 0x5c, 0x84, 0x01, 0xa8, 0xf7, - 0x1e, 0x5d, 0x67, 0x8a, 0x1d, 0x71, 0x36, 0x22, 0xf0, 0x08, 0xb0, 0xa1, 0x60, 0x22, 0x39, 0x95, - 0x5f, 0x46, 0x87, 0xff, 0x1b, 0x43, 0xa6, 0x88, 0xb3, 0xfd, 0xf7, 0x00, 0x00 + 0x15, 0xd2, 0x4f, 0x70, 0xb6, 0x88, 0x57, 0xab, 0x76, 0x5f, 0x3c, 0x4e, 0xf0, 0x5c, 0xf0, 0xc5, + 0x67, 0xcf, 0x3c, 0x67, 0x71, 0xdf, 0xd4, 0xfc, 0x5b, 0x20, 0x5e, 0x72, 0xa8, 0x0d, 0x13, 0x28, + 0xc4, 0x89, 0xee, 0x16, 0x83, 0xcc, 0x25, 0x25, 0xba, 0x22, 0x13, 0x2a, 0x7e, 0x76, 0xb1, 0x8d, + 0x9e, 0xb9, 0x86, 0x5a, 0x0e, 0xb5, 0x7d, 0xe8, 0xe1, 0x1e, 0x49, 0xc9, 0x65, 0xcf, 0x9d, 0x7d, + 0x5c, 0xf0, 0x97, 0x33, 0xc4, 0xbe, 0xdb, 0x5e, 0xb3, 0x59, 0xe7, 0x41, 0xe3, 0x0d, 0x7a, 0x6d, + 0x3c, 0x1b, 0x12, 0xac, 0x01, 0xf7, 0x78, 0x36, 0xae, 0x38, 0xa6, 0x42, 0xfe, 0x20, 0xdd, 0x29, + 0xe3, 0x4f, 0x33, 0x58, 0x35, 0x89, 0xdd, 0x56, 0x6f, 0x11, 0xbc, 0xa1, 0x52, 0x2f, 0xbd, 0x9b, + 0x39, 0xba, 0x2a, 0x99, 0xad, 0x23, 0xcc, 0x89, 0x10, 0x8f, 0xc5, 0x2e, 0x01, 0x8b, 0xc9, 0x46, + 0x02, 0xf3, 0xa7, 0xd6, 0x97, 0x23, 0xbc, 0x36, 0x0e, 0xfa, 0x43, 0xaa, 0x0b, 0x81, 0x1b, 0x76, + 0x4e, 0xe2, 0x49, 0x3b, 0x70, 0x1c, 0x97, 0xe6, 0x30, 0xd1, 0xb6, 0x9f, 0x10, 0x10, 0x98, 0x2c, + 0xde, 0xa0, 0x30, 0x0c, 0xd1, 0xa0, 0x4c, 0xaa, 0x26, 0x61, 0xd9, 0xaf, 0xe4, 0x70, 0x9f, 0xef, + 0x86, 0x9d, 0x88, 0x75, 0x85, 0x1b, 0x41, 0x4a, 0xda, 0x48, 0x91, 0x1b, 0xd1, 0x1a, 0xfa, 0x4b, + 0x40, 0x3f, 0x76, 0xa2, 0x8a, 0x25, 0x19, 0x49, 0x4b, 0xb2, 0xbd, 0x45, 0xfc, 0xdc, 0x69, 0x49, + 0xb6, 0x6b, 0x2c, 0x49, 0xe8, 0xa6, 0xb0, 0x24, 0xf9, 0x8b, 0xb2, 0x24, 0x55, 0x42, 0x9a, 0x5c, + 0xbf, 0x49, 0xd1, 0x5b, 0x54, 0x35, 0x2d, 0xab, 0xfe, 0x0c, 0x27, 0xa9, 0xea, 0xe5, 0xb5, 0xce, + 0x56, 0x35, 0x81, 0xba, 0xdb, 0x94, 0x9b, 0x07, 0x7c, 0xe7, 0xb7, 0xf3, 0x99, 0xdd, 0x66, 0xe8, + 0x78, 0x93, 0x53, 0x40, 0x6e, 0xeb, 0x4a, 0xde, 0x52, 0x08, 0xbf, 0xe3, 0xe8, 0x84, 0xb8, 0x21, + 0x51, 0xab, 0x89, 0xfe, 0xc6, 0xd2, 0xd8, 0xb5, 0x3e, 0x70, 0xe3, 0xdc, 0x9f, 0xf1, 0x03, 0x62, + 0x38, 0x3b, 0x85, 0xfa, 0x49, 0x27, 0xfe, 0xef, 0xaa, 0xca, 0x2b, 0x54, 0xbd, 0xcb, 0x7a, 0x13, + 0xe4, 0x80, 0xfe, 0xba, 0x36, 0xb8, 0xef, 0xda, 0xdf, 0xb0, 0x63, 0xa9, 0xf0, 0x3f, 0x37, 0x10, + 0xb0, 0x69, 0xfc, 0x30, 0xca, 0xa8, 0xb6, 0x20, 0x39, 0x1f, 0x88, 0x26, 0x75, 0xf8, 0xae, 0x88, + 0x07, 0x6f, 0x34, 0x9b, 0x13, 0x58, 0x20, 0xae, 0x78, 0x86, 0xf5, 0xc1, 0x88, 0xd3, 0x91, 0x53, + 0x30, 0x27, 0x76, 0x87, 0xdf, 0xc5, 0xd8, 0x1b, 0x27, 0xaa, 0x74, 0x10, 0x64, 0x4f, 0x00, 0x00, + 0xac, 0x30, 0x27, 0xe7, 0x0e, 0xec, 0x98, 0x58, 0x24, 0xf0, 0x70, 0xed, 0x05, 0x4c, 0x4f, 0x3c, + 0x22, 0x48, 0x2c, 0xb9, 0xb4, 0x88, 0x84, 0xde, 0x89, 0x04, 0xc7, 0x8b, 0x3a, 0xd1, 0x26, 0x6b, + 0xa5, 0x86, 0x6c, 0x4d, 0xbd, 0xb8, 0x6b, 0xd1, 0x01, 0x47, 0x8d, 0x00, 0x94, 0x7a, 0xb2, 0x53, + 0x48, 0xe2, 0x1e, 0x13, 0x8e, 0xa3, 0xbb, 0x27, 0x6b, 0x2c, 0x51, 0x08, 0xcb, 0x21, 0xf7, 0xce, + 0x42, 0x94, 0xf7, 0x29, 0xf2, 0xf7, 0x58, 0x22, 0xd2, 0xe1, 0x07, 0xbc, 0xd1, 0x16, 0xf7, 0x92, + 0x2d, 0x5c, 0xa6, 0xbc, 0x93, 0xc6, 0x7b, 0x07, 0x23, 0x36, 0x77, 0x12, 0xfc, 0xc6, 0xa4, 0xca, + 0xc5, 0x30, 0x39, 0x2d, 0xb7, 0xf4, 0x24, 0x8a, 0x84, 0xec, 0xe6, 0x4c, 0x58, 0x1b, 0x0b, 0x5f, + 0xa2, 0xff, 0xe6, 0xb1, 0x00, 0x67, 0x83, 0x76, 0xc1, 0x3c, 0x86, 0xa6, 0x61, 0x16, 0x7b, 0x95, + 0xad, 0x1f, 0xde, 0xa7, 0x1a, 0x81, 0xe6, 0x12, 0x98, 0x17, 0x88, 0xe5, 0xbd, 0xc9, 0x6e, 0x7c, + 0x12, 0x28, 0x91, 0xea, 0x29, 0x27, 0xb2, 0x44, 0xb9, 0x24, 0x4f, 0xc8, 0xa9, 0x0d, 0x2d, 0x22, + 0x12, 0x4d, 0x92, 0xf9, 0x4a, 0x92, 0x1d, 0xc7, 0x27, 0x5c, 0x8c, 0x89, 0x7e, 0xd6, 0x20, 0x54, + 0x9c, 0x58, 0x9e, 0x00, 0xab, 0xf4, 0x88, 0x5b, 0x59, 0x13, 0xa0, 0x08, 0x92, 0x4a, 0x7d, 0xd0, + 0x81, 0x49, 0x88, 0x72, 0x26, 0xa1, 0x4b, 0x51, 0x46, 0x32, 0x74, 0x2b, 0x99, 0x03, 0xb7, 0x31, + 0x42, 0x3a, 0x72, 0x03, 0xab, 0x28, 0x24, 0xad, 0x81, 0x73, 0xf6, 0x9a, 0x53, 0x67, 0x95, 0x15, + 0xca, 0xf9, 0x95, 0xe9, 0xf0, 0xe3, 0x23, 0xfa, 0xf6, 0x83, 0xde, 0x7b, 0x45, 0x5a, 0xd1, 0xf6, + 0x23, 0x1a, 0x6c, 0x34, 0x15, 0xdc, 0x4d, 0x3f, 0x61, 0x4a, 0x32, 0xb8, 0x8c, 0x10, 0xd9, 0xc8, + 0x25, 0xfb, 0x93, 0xbb, 0xf5, 0x9b, 0x04, 0x73, 0xfa, 0x60, 0xc9, 0x0d, 0xb8, 0xf5, 0x71, 0x18, + 0x3c, 0xf2, 0x4c, 0x7c, 0x0d, 0x83, 0xf5, 0xb7, 0xe6, 0xc9, 0x69, 0x45, 0xc8, 0xfa, 0x25, 0x7c, + 0x23, 0x48, 0xb4, 0xe9, 0xf9, 0x12, 0x03, 0x9d, 0x40, 0x95, 0x4e, 0xb6, 0x98, 0x66, 0xa0, 0x8b, + 0xc6, 0xe7, 0x16, 0xb6, 0x20, 0x68, 0x10, 0xa8, 0xc2, 0x96, 0x1f, 0x3d, 0xad, 0xb9, 0x3f, 0x3a, + 0xbf, 0x73, 0xd7, 0x61, 0x4c, 0x5b, 0x9f, 0x17, 0x7e, 0xf6, 0xf6, 0x3a, 0x46, 0xad, 0x8c, 0xa5, + 0xf9, 0xad, 0xf2, 0x04, 0x11, 0xf3, 0x47, 0xff, 0x23, 0x3a, 0x23, 0xf3, 0x1a, 0xdf, 0x4f, 0xd4, + 0xa1, 0x92, 0x1a, 0xab, 0xd3, 0x1c, 0x1d, 0x8a, 0x69, 0xd8, 0x79, 0xc5, 0x83, 0xb1, 0x59, 0xad, + 0xe4, 0x96, 0xd2, 0x2b, 0x56, 0xd6, 0x2e, 0x37, 0x20, 0xee, 0x80, 0x04, 0x1d, 0x51, 0xfa, 0x6e, + 0x29, 0xce, 0x17, 0xe9, 0x4d, 0x3a, 0xaf, 0xaa, 0x34, 0x2a, 0xf7, 0x53, 0x18, 0x99, 0xbd, 0xdb, + 0xdb, 0x86, 0x35, 0xc5, 0x9f, 0x3c, 0x91, 0xb2, 0xae, 0x45, 0x9e, 0x08, 0x92, 0xa0, 0xa1, 0x8f, + 0x9c, 0x69, 0xf4, 0x1c, 0x90, 0x45, 0xa4, 0x81, 0xa2, 0x3d, 0xde, 0x35, 0x4d, 0x62, 0xe5, 0x8e, + 0x4b, 0xa2, 0xb7, 0xd4, 0x10, 0x9d, 0xc7, 0xc2, 0x27, 0x3a, 0x00, 0xa8, 0x80, 0xf0, 0xee, 0xd9, + 0x75, 0xb2, 0x97, 0xb8, 0xa3, 0x3c, 0x05, 0x6e, 0xfd, 0x79, 0xcd, 0x56, 0x2b, 0x8b, 0x2b, 0x43, + 0x6a, 0x08, 0x4e, 0xbe, 0x8d, 0xc7, 0x33, 0xda, 0x5a, 0x28, 0x90, 0x85, 0x07, 0xa1, 0xa8, 0x52, + 0x69, 0xdd, 0x97, 0x74, 0x77, 0xcd, 0x35, 0x53, 0x9c, 0x77, 0xd6, 0xc9, 0xca, 0x54, 0x6a, 0x3c, + 0x6a, 0x4f, 0x74, 0x4c, 0xd5, 0x14, 0xdf, 0x59, 0x9a, 0xfa, 0xb6, 0x8c, 0x70, 0x96, 0x88, 0x9d, + 0x19, 0x5c, 0x1f, 0x45, 0xf7, 0xc8, 0x53, 0x6a, 0x5b, 0x40, 0xbf, 0xab, 0x59, 0xb3, 0x1d, 0x92, + 0x57, 0xb5, 0x23, 0x26, 0x9b, 0xd2, 0xc6, 0x54, 0x3b, 0xd1, 0xc9, 0x1c, 0x19, 0x47, 0x66, 0x8a, + 0xd9, 0x09, 0xbc, 0x63, 0xae, 0xf3, 0x88, 0x05, 0xb3, 0x0c, 0xb6, 0x4e, 0xf5, 0x76, 0x5a, 0x14, + 0xc2, 0xa9, 0x86, 0x71, 0x70, 0xff, 0x7b, 0x89, 0x6b, 0x20, 0xd3, 0xe0, 0x36, 0xbc, 0xf2, 0xfd, + 0xc7, 0x68, 0xa7, 0x72, 0x6b, 0xa1, 0xa2, 0x2b, 0x07, 0xf6, 0x52, 0x7d, 0xf8, 0x07, 0xdc, 0x1d, + 0xd4, 0x7c, 0x0e, 0x7e, 0xb3, 0xa9, 0x1e, 0xd5, 0x29, 0xbe, 0xb1, 0xcd, 0xa4, 0x7e, 0xd0, 0xb5, + 0xd5, 0x51, 0xe9, 0x14, 0x9b, 0x89, 0x64, 0x61, 0x5d, 0x67, 0xe0, 0x49, 0x30, 0x25, 0xe5, 0x7d, + 0xd8, 0xd4, 0x9e, 0x58, 0x52, 0x3b, 0x4e, 0x8f, 0xbb, 0x27, 0xa8, 0x3a, 0xe3, 0x3c, 0xa7, 0xc7, + 0xbd, 0x13, 0xb0, 0x90, 0x64, 0x56, 0xa2, 0xd2, 0xeb, 0x94, 0x57, 0x92, 0x24, 0xb2, 0x53, 0x4f, + 0x75, 0xef, 0x88, 0x8d, 0xda, 0x1a, 0x2b, 0x8b, 0x49, 0xd9, 0xc4, 0x74, 0x2b, 0x4b, 0xce, 0xd6, + 0x5a, 0x58, 0x00, 0x9b, 0xf3, 0x49, 0x85, 0xd5, 0xb2, 0x55, 0xbb, 0x30, 0x1b, 0xdb, 0xcb, 0xa2, + 0x4f, 0xa5, 0xec, 0xea, 0x7b, 0x52, 0x60, 0x56, 0x30, 0xf2, 0xf4, 0x08, 0xfa, 0x72, 0xf2, 0x2d, + 0x33, 0x2c, 0x37, 0x85, 0x8b, 0x93, 0xe8, 0x01, 0x47, 0x2f, 0x6f, 0x7b, 0xb9, 0x69, 0x46, 0xe5, + 0x20, 0xd5, 0x85, 0x17, 0xac, 0x46, 0x38, 0xd7, 0xc9, 0xe6, 0x00, 0xb4, 0x70, 0x3e, 0x78, 0x3e, + 0x9a, 0x35, 0x6a, 0x36, 0x51, 0xab, 0x35, 0x46, 0xf1, 0x5c, 0x6b, 0x2f, 0x82, 0xed, 0x93, 0x7d, + 0x98, 0x46, 0xea, 0x5c, 0x48, 0xc6, 0xf2, 0x97, 0xe2, 0x24, 0x10, 0x41, 0xa3, 0x8e, 0x50, 0xd5, + 0x08, 0xda, 0x02, 0x02, 0x83, 0xba, 0x37, 0x78, 0x54, 0x09, 0xd4, 0x8a, 0x11, 0x6d, 0xf8, 0x59, + 0x5a, 0x5e, 0x51, 0x8c, 0xe5, 0x4a, 0xe1, 0x78, 0xbc, 0x7f, 0xb5, 0x90, 0x56, 0xf4, 0xa5, 0x2b, + 0x86, 0x74, 0x33, 0xd0, 0x9e, 0xca, 0xda, 0x4e, 0xea, 0xd5, 0x4f, 0xe6, 0x24, 0x2a, 0x1d, 0x10, + 0x70, 0x71, 0xe7, 0x92, 0x9f, 0xa7, 0xf4, 0x6f, 0x2c, 0xd0, 0xc6, 0xa5, 0x92, 0x57, 0x08, 0x69, + 0x98, 0x85, 0xfc, 0x20, 0x18, 0xe7, 0xad, 0x96, 0x58, 0xff, 0xe3, 0xe0, 0x9e, 0xb6, 0x8f, 0xf3, + 0x13, 0x57, 0x3c, 0x3a, 0xf9, 0xa1, 0x6c, 0xb2, 0xdd, 0x9b, 0x54, 0x27, 0x3b, 0x71, 0x80, 0x70, + 0x40, 0xff, 0xd1, 0x69, 0x3a, 0x3f, 0x48, 0x27, 0x72, 0x5e, 0xf9, 0xa4, 0xf2, 0x30, 0x16, 0xe6, + 0xda, 0x15, 0xc9, 0xfc, 0xec, 0x93, 0x9e, 0x73, 0xbf, 0xd6, 0x9d, 0xf3, 0xdd, 0xe8, 0xaf, 0x97, + 0x48, 0xcd, 0xe6, 0x96, 0x45, 0x01, 0xad, 0x82, 0x82, 0x04, 0x36, 0x4d, 0x45, 0xf5, 0xdd, 0x20, + 0x0f, 0x7e, 0x6a, 0x27, 0xbb, 0x48, 0x16, 0x51, 0x40, 0x87, 0x77, 0x2e, 0x68, 0xe9, 0x1b, 0xd7, + 0x17, 0xf0, 0x03, 0x54, 0x43, 0x3a, 0xa9, 0x46, 0x35, 0xfa, 0x7a, 0x51, 0xa4, 0x2f, 0xbb, 0xad, + 0x5b, 0xfe, 0x3e, 0x47, 0x06, 0xc1, 0xd7, 0xe3, 0xc4, 0x8f, 0x84, 0xcf, 0x29, 0xb7, 0xa6, 0x7c, + 0xa4, 0x0e, 0x83, 0x68, 0x15, 0xfb, 0xc4, 0x30, 0xb4, 0x5d, 0x56, 0x94, 0x3d, 0x82, 0x2d, 0xe8, + 0x5b, 0xae, 0x85, 0xd2, 0xb2, 0x44, 0xf6, 0x4a, 0x27, 0xe9, 0x14, 0x87, 0xc5, 0x99, 0x69, 0x48, + 0x5e, 0x65, 0x97, 0xf8, 0xa9, 0x2a, 0x65, 0x2b, 0xf5, 0x4e, 0x96, 0xf3, 0xbc, 0x84, 0x0e, 0xcb, + 0x22, 0x6f, 0x7c, 0xc6, 0x03, 0x23, 0x20, 0x8b, 0x4c, 0xe4, 0x59, 0xf7, 0x72, 0x8e, 0xa8, 0x55, + 0xbf, 0xe3, 0x50, 0x40, 0x47, 0x9c, 0x4f, 0xf0, 0x4c, 0xdd, 0x76, 0x2f, 0x33, 0x35, 0x86, 0x1f, + 0x6d, 0x96, 0xdb, 0x87, 0x84, 0x12, 0xe6, 0x6b, 0x2b, 0x97, 0xaa, 0xb4, 0x3c, 0xd6, 0xd2, 0x70, + 0x0a, 0x6d, 0x3a, 0x66, 0x0d, 0xdf, 0x30, 0x0c, 0x41, 0x10, 0x02, 0x60, 0xf1, 0x86, 0x14, 0xc1, + 0x95, 0xf4, 0xe3, 0x1b, 0xe7, 0xd6, 0xf9, 0xf3, 0x44, 0x79, 0x5a, 0xec, 0x3b, 0x86, 0x3f, 0xde, + 0xd8, 0x09, 0xd5, 0xb5, 0xc9, 0x8d, 0xbd, 0xdb, 0xbc, 0xf6, 0xb4, 0x45, 0xb9, 0x9f, 0xca, 0x56, + 0x76, 0xd1, 0x5e, 0x69, 0x14, 0x08, 0x2e, 0x2c, 0x91, 0x88, 0x05, 0x86, 0x1f, 0xdf, 0x5e, 0x26, + 0x29, 0x33, 0xff, 0x09, 0xfd, 0x56, 0xb8, 0x9e, 0x3a, 0x54, 0x9e, 0x05, 0x9e, 0xe2, 0x16, 0xdb, + 0x0a, 0x96, 0x37, 0x4c, 0x4b, 0x32, 0xf1, 0x1e, 0xa5, 0x5c, 0x51, 0x81, 0xf4, 0x54, 0x7a, 0x35, + 0xc3, 0xfe, 0x97, 0x48, 0xa8, 0xfb, 0x05, 0x04, 0xb3, 0x94, 0x46, 0x4a, 0xa1, 0xbf, 0x1e, 0xb3, + 0x56, 0xeb, 0x64, 0x1c, 0x97, 0x81, 0x42, 0x02, 0x8a, 0xe9, 0xab, 0x37, 0x3c, 0xeb, 0x49, 0x1e, + 0x36, 0x0b, 0xcf, 0xba, 0xf2, 0x27, 0x89, 0x8e, 0x5a, 0x03, 0xf0, 0x9f, 0xa5, 0xaf, 0x7a, 0xfe, + 0x26, 0xcf, 0x94, 0x4d, 0xf2, 0x0d, 0x00, 0xdd, 0x4a, 0x12, 0xcc, 0xda, 0xbd, 0x00, 0x3b, 0xc0, + 0x43, 0xd2, 0x2b, 0x96, 0x22, 0x62, 0x8b, 0xd3, 0x98, 0x74, 0xf0, 0x4c, 0x1e, 0xc1, 0xa5, 0x2c, + 0xbb, 0xa4, 0x6a, 0xf3, 0xe6, 0x95, 0x95, 0x49, 0xe1, 0x34, 0x8b, 0xe9, 0xe3, 0xdc, 0x86, 0xc9, + 0x29, 0xaa, 0x1c, 0x9c, 0x13, 0xa5, 0x56, 0xab, 0xfa, 0xf1, 0xad, 0x56, 0x62, 0x7c, 0x16, 0x27, + 0x26, 0x51, 0xbe, 0x5a, 0x5c, 0x36, 0xb3, 0x55, 0x0e, 0x4c, 0x7c, 0x18, 0x47, 0xa9, 0x09, 0xb2, + 0xae, 0x38, 0x82, 0x8e, 0x4f, 0x6c, 0x79, 0x00, 0x07, 0xf0, 0xd6, 0xd0, 0x70, 0x38, 0x29, 0x92, + 0x75, 0xcc, 0x8a, 0xd4, 0x46, 0xa1, 0xef, 0xa9, 0xb6, 0x14, 0x29, 0xb9, 0x95, 0x71, 0x37, 0xbe, + 0x6e, 0xe0, 0x93, 0x7f, 0x02, 0x4f, 0x20, 0xe5, 0x26, 0x15, 0x21, 0xa7, 0x09, 0xb8, 0x45, 0xfc, + 0x39, 0xe6, 0xdf, 0xe3, 0x93, 0x77, 0x07, 0x7f, 0xa4, 0x46, 0x2a, 0xa7, 0xd0, 0xb7, 0xeb, 0x86, + 0x56, 0xd7, 0x24, 0x17, 0xe9, 0xc6, 0x75, 0x98, 0x5f, 0x18, 0x49, 0xcc, 0x44, 0x17, 0xb0, 0xc0, + 0x0c, 0x60, 0x3a, 0x28, 0x2b, 0xb3, 0xbb, 0xfb, 0x71, 0xaa, 0xf8, 0x72, 0xbf, 0x76, 0x76, 0x8a, + 0x12, 0xda, 0xe4, 0xd8, 0xf6, 0x97, 0xcc, 0x4d, 0xbd, 0xbe, 0x8d, 0x07, 0xb2, 0x4d, 0x7b, 0x73, + 0xbc, 0x4a, 0x4f, 0xa0, 0x02, 0x4a, 0x01, 0xd0, 0xbe, 0x69, 0x38, 0xc6, 0x41, 0x22, 0x0c, 0x98, + 0x84, 0x5b, 0x63, 0xd5, 0xa6, 0xcf, 0xc2, 0x88, 0x34, 0xf9, 0x6d, 0x2d, 0x63, 0xbe, 0x21, 0x3c, + 0xe7, 0x78, 0x5a, 0x98, 0x30, 0xe7, 0xa3, 0xe7, 0xea, 0x8c, 0xc1, 0x72, 0x7d, 0x12, 0x07, 0x2f, + 0x6e, 0xd8, 0x0c, 0x45, 0xc2, 0x29, 0x9e, 0xbc, 0x73, 0x77, 0x76, 0x1e, 0x2c, 0xb7, 0x1d, 0xcc, + 0x5f, 0xef, 0x60, 0x6b, 0xa7, 0x00, 0x05, 0xfe, 0xe5, 0xf8, 0xaf, 0xec, 0xb1, 0xf0, 0x23, 0xb6, + 0xda, 0xc9, 0xf5, 0xc8, 0xd6, 0x3e, 0x62, 0x3c, 0x66, 0x27, 0x9e, 0xef, 0x94, 0xde, 0xe9, 0x8b, + 0x46, 0x3c, 0xf0, 0x79, 0x17, 0xfc, 0x04, 0x2a, 0x41, 0x8f, 0x26, 0x8d, 0xad, 0x9f, 0xfd, 0xad, + 0x53, 0xfa, 0xe8, 0x2b, 0xd8, 0xba, 0xcd, 0xa3, 0x6e, 0xe9, 0x73, 0x65, 0x2a, 0xe2, 0x95, 0x0a, + 0x56, 0x3f, 0x4a, 0xae, 0x7e, 0x4e, 0xa2, 0x77, 0x2c, 0x3d, 0x98, 0x4e, 0xe4, 0xf1, 0x43, 0xf0, + 0x42, 0xb9, 0xe7, 0x21, 0x46, 0x84, 0xe6, 0x43, 0x0e, 0xae, 0xc8, 0x16, 0xce, 0x6f, 0x12, 0x41, + 0x78, 0x52, 0x9e, 0x4d, 0xc0, 0x08, 0x70, 0x69, 0x2f, 0xd0, 0xf2, 0x0b, 0x67, 0x28, 0xee, 0x0e, + 0xda, 0xc5, 0xf1, 0x61, 0x7f, 0x8d, 0x4d, 0x68, 0x9f, 0x16, 0xe8, 0x47, 0xa5, 0x7b, 0x63, 0x6d, + 0x1f, 0x43, 0x07, 0x1a, 0x47, 0xff, 0x75, 0x87, 0xb9, 0x6f, 0x6d, 0xc0, 0x2c, 0xb0, 0x11, 0xd5, + 0xba, 0x3c, 0x22, 0xac, 0x75, 0xbd, 0x5a, 0xe9, 0x1f, 0x3c, 0x78, 0xda, 0xd9, 0x6f, 0xcb, 0xf6, + 0x0e, 0x97, 0xd7, 0xa0, 0xfb, 0x5d, 0x67, 0x1d, 0x3a, 0x58, 0x6e, 0xa9, 0x23, 0xe0, 0x95, 0x59, + 0x05, 0x78, 0x98, 0x40, 0x9e, 0x0f, 0xd3, 0x0a, 0x90, 0xad, 0x9d, 0x01, 0x1b, 0xd8, 0xd2, 0xd8, + 0x23, 0xb2, 0xe1, 0xae, 0xbe, 0xf0, 0x8c, 0xe2, 0x27, 0x55, 0xfc, 0x9b, 0x6a, 0x98, 0xb4, 0xff, + 0x1d, 0xc9, 0x69, 0xed, 0x0d, 0x86, 0x5d, 0xb0, 0x8b, 0xf5, 0xb2, 0x79, 0x92, 0x18, 0xd3, 0xf0, + 0x7c, 0x32, 0x99, 0x98, 0xf4, 0x65, 0x08, 0xee, 0x95, 0x5b, 0xd1, 0x6a, 0xf5, 0x70, 0x69, 0x5e, + 0x99, 0x6e, 0x9e, 0x82, 0xfa, 0xf8, 0x50, 0x73, 0x89, 0x6a, 0x5b, 0xe9, 0xc2, 0xda, 0x1f, 0x9b, + 0x78, 0x76, 0xff, 0x35, 0x4e, 0xac, 0x90, 0x56, 0xab, 0x95, 0x39, 0x3d, 0x82, 0x34, 0xf1, 0x0a, + 0x06, 0xbf, 0xa7, 0x95, 0xe1, 0xe7, 0xe7, 0x79, 0x01, 0x5b, 0xee, 0x93, 0xd1, 0x5b, 0x39, 0x47, + 0x9d, 0x08, 0x6a, 0x74, 0xd1, 0x31, 0x40, 0x4d, 0x6d, 0xad, 0xfb, 0x68, 0x6b, 0xe5, 0x9e, 0x2d, + 0x4e, 0xb3, 0x03, 0x25, 0xc3, 0x7c, 0xfb, 0x60, 0xff, 0xe2, 0xe7, 0x4f, 0xba, 0xfa, 0xa5, 0xed, + 0x13, 0xdb, 0x98, 0x2f, 0x1a, 0x66, 0xf7, 0x68, 0x62, 0x1b, 0x06, 0xc0, 0x3d, 0xfe, 0xba, 0x52, + 0xd3, 0x4a, 0x74, 0xd7, 0xa8, 0x64, 0x5b, 0xe0, 0x69, 0x74, 0xeb, 0xb4, 0x30, 0xbd, 0xb0, 0x70, + 0x4d, 0xc3, 0x48, 0xf3, 0xce, 0x8d, 0xa7, 0x8c, 0x07, 0xdd, 0x13, 0x88, 0x9f, 0x49, 0x72, 0x06, + 0x0c, 0x4b, 0xe8, 0x76, 0x4b, 0x99, 0x9e, 0x56, 0xe6, 0xcf, 0x2d, 0x65, 0xfa, 0xaa, 0x4c, 0x85, + 0x74, 0x01, 0x30, 0x13, 0x77, 0x99, 0x34, 0xc8, 0x73, 0xae, 0x82, 0x69, 0x29, 0x21, 0x00, 0xfc, + 0x46, 0x09, 0x54, 0x29, 0xe1, 0x5d, 0xea, 0xea, 0x3b, 0x3c, 0x42, 0xad, 0xf2, 0xc6, 0x95, 0x13, + 0xa7, 0x82, 0xfc, 0x4c, 0xe4, 0xfe, 0xfa, 0x72, 0xf6, 0xf9, 0xd9, 0x42, 0x8a, 0x34, 0xfa, 0x0e, + 0xbd, 0x2d, 0x3f, 0xd0, 0xb9, 0x1a, 0x27, 0xcc, 0xe8, 0x68, 0x64, 0x89, 0x0d, 0x94, 0x8e, 0x4c, + 0x02, 0x1b, 0x90, 0x45, 0xc4, 0x83, 0xac, 0x33, 0xb1, 0xaa, 0xad, 0xa1, 0x5f, 0xe7, 0x9e, 0x59, + 0x76, 0xaa, 0x75, 0xf8, 0xd7, 0x92, 0x9e, 0xfc, 0x6a, 0x72, 0x23, 0x9b, 0x7f, 0x44, 0xe9, 0x69, + 0xdf, 0x8f, 0x6b, 0xe6, 0x76, 0xc9, 0x73, 0xb4, 0x31, 0x36, 0xf9, 0x31, 0x0a, 0x65, 0xfc, 0x44, + 0xc1, 0xd0, 0xaa, 0xe7, 0x1b, 0x44, 0xb7, 0xf2, 0x6b, 0x33, 0x22, 0xbb, 0xf2, 0x07, 0xeb, 0xa5, + 0x2c, 0xf1, 0xd1, 0xba, 0x2b, 0xbf, 0x04, 0xf5, 0x36, 0xc0, 0xdd, 0x12, 0x13, 0xa9, 0xf2, 0x4d, + 0xe8, 0x97, 0xd7, 0x13, 0xa3, 0xde, 0x28, 0xbf, 0x0d, 0x09, 0x6c, 0xa3, 0xa8, 0x5d, 0x83, 0x05, + 0x11, 0x98, 0x48, 0x46, 0x80, 0xf5, 0xe4, 0x8c, 0x9a, 0x5a, 0xc0, 0xd8, 0xee, 0xfc, 0xc6, 0x36, + 0x5d, 0xb3, 0x1a, 0x42, 0xd6, 0x2c, 0x98, 0x9d, 0xf4, 0xf6, 0xab, 0xef, 0x16, 0x4d, 0xce, 0x73, + 0xd1, 0x63, 0x7f, 0x3b, 0xc7, 0x0f, 0xe1, 0xd8, 0xc4, 0x34, 0x5d, 0x05, 0xa1, 0xb5, 0x73, 0xfc, + 0xe9, 0xe7, 0xdf, 0x4e, 0x76, 0xce, 0x1d, 0xd3, 0xa0, 0xed, 0x54, 0x91, 0x6a, 0xfd, 0xe3, 0xd3, + 0xf5, 0xb2, 0xb7, 0xb6, 0x57, 0xd6, 0xa7, 0xac, 0xc5, 0x1f, 0xa1, 0x0c, 0xf3, 0x0e, 0x91, 0x84, + 0x3e, 0xc2, 0x84, 0x49, 0xe2, 0x21, 0x31, 0x86, 0x27, 0x66, 0x8e, 0xd2, 0xd9, 0x0b, 0x2d, 0xfc, + 0x56, 0xf5, 0x6b, 0xc5, 0x65, 0xf1, 0x19, 0x8a, 0x08, 0x6e, 0x4a, 0x6c, 0x49, 0x2e, 0xce, 0x0e, + 0x8c, 0xf9, 0x85, 0x3f, 0xbb, 0xd0, 0xcf, 0x75, 0x60, 0xcc, 0x83, 0xfa, 0xd3, 0x39, 0x18, 0xbc, + 0x50, 0x7e, 0xd9, 0xf8, 0x1c, 0xde, 0xdf, 0xc2, 0x7b, 0xfd, 0xf9, 0x3e, 0x2c, 0x4d, 0x41, 0x24, + 0xf5, 0xe2, 0x2f, 0xe8, 0x93, 0xf2, 0xad, 0xe5, 0x23, 0x46, 0xac, 0xbd, 0x28, 0xff, 0x0a, 0x13, + 0xb6, 0x95, 0x4f, 0xe6, 0x45, 0xd1, 0x64, 0x4e, 0xe7, 0x80, 0xb4, 0x4f, 0x0b, 0x4a, 0x67, 0x12, + 0xca, 0xe9, 0xff, 0x24, 0x46, 0xee, 0x2b, 0xa1, 0x7f, 0xd7, 0xc0, 0x48, 0xa1, 0xb2, 0xeb, 0x41, + 0xb8, 0x0b, 0xc1, 0xe2, 0xf8, 0x53, 0x81, 0x02, 0x0a, 0x9b, 0xb3, 0x1d, 0x65, 0xff, 0x37, 0x4d, + 0x08, 0xb6, 0x1f, 0x94, 0x5b, 0x0f, 0xbe, 0x74, 0xf2, 0x2a, 0x5f, 0xf4, 0xaa, 0x91, 0x23, 0xae, + 0xf2, 0x8b, 0x30, 0x13, 0xab, 0x54, 0x04, 0x3a, 0xf1, 0xcc, 0x6e, 0x67, 0x68, 0x3a, 0x8a, 0xfa, + 0x3d, 0x2c, 0x22, 0xbe, 0xc9, 0xfc, 0x40, 0x0b, 0x19, 0xb8, 0x02, 0x3b, 0x3b, 0x03, 0xb6, 0xf1, + 0x24, 0x8a, 0x80, 0xe3, 0x06, 0x9e, 0xc9, 0x23, 0x1a, 0x55, 0xca, 0xc0, 0xac, 0xd0, 0x41, 0x15, + 0x3a, 0x56, 0xbf, 0x83, 0xdf, 0x52, 0x82, 0x3c, 0xc2, 0xee, 0x94, 0xcc, 0xad, 0xc8, 0xac, 0x0a, + 0x78, 0xbc, 0xb4, 0xc3, 0x2a, 0xed, 0xda, 0x77, 0xf7, 0x03, 0x4b, 0x3d, 0x8c, 0x65, 0x47, 0x41, + 0xe9, 0xec, 0x0c, 0x42, 0xc9, 0x5b, 0xbf, 0x95, 0x84, 0x52, 0x19, 0x79, 0x4f, 0xa8, 0x2f, 0xff, + 0x76, 0xfa, 0xd5, 0xf7, 0xce, 0xc4, 0xee, 0x8d, 0x49, 0xe4, 0x45, 0x4b, 0xeb, 0xce, 0xdc, 0xba, + 0xe9, 0x83, 0xc9, 0xc7, 0x56, 0xb7, 0x60, 0xef, 0x05, 0x52, 0x0a, 0xc7, 0x1d, 0xca, 0xe6, 0xf2, + 0xb0, 0x31, 0xbd, 0xb6, 0x4d, 0xa4, 0x6e, 0xed, 0xcb, 0xf0, 0x9a, 0x03, 0x82, 0x7a, 0xa8, 0xce, + 0x0a, 0x99, 0x2b, 0x52, 0xaa, 0x6c, 0xf0, 0x89, 0x51, 0xd4, 0x54, 0x23, 0x6a, 0xaf, 0xa9, 0x56, + 0x19, 0xff, 0x46, 0xcd, 0x64, 0xae, 0xc2, 0xee, 0x6d, 0x1c, 0x57, 0x2c, 0x88, 0xb6, 0xe1, 0x11, + 0xd9, 0x6e, 0x41, 0x11, 0x2e, 0x10, 0x55, 0x74, 0x0b, 0x95, 0x89, 0xef, 0xed, 0x23, 0x4f, 0x15, + 0xd4, 0x0e, 0x0d, 0xe3, 0xe7, 0xc2, 0x3a, 0xd3, 0x89, 0x36, 0xf1, 0x0c, 0x49, 0x82, 0x06, 0x8b, + 0x03, 0x9b, 0xda, 0x07, 0x8b, 0xf6, 0xa4, 0x62, 0x5a, 0x27, 0x11, 0x20, 0xcc, 0x14, 0x95, 0xca, + 0x1b, 0x6d, 0xb6, 0x4b, 0x89, 0x9a, 0x24, 0x0e, 0xe3, 0x0c, 0x8c, 0xe9, 0xa7, 0x0c, 0x68, 0x0d, + 0x7a, 0xe2, 0x75, 0x62, 0xa0, 0xfe, 0xa3, 0x70, 0x1a, 0x81, 0x5c, 0xd4, 0x10, 0xa1, 0xce, 0x12, + 0xd5, 0x84, 0x5b, 0xad, 0xda, 0xd3, 0x74, 0xb6, 0x02, 0xf7, 0xb2, 0x78, 0x2c, 0x8c, 0x25, 0xe5, + 0x5b, 0xac, 0x15, 0x39, 0xcb, 0x4b, 0x96, 0x5f, 0x24, 0x01, 0x9e, 0x87, 0xcc, 0xcd, 0xb5, 0x88, + 0xcc, 0x47, 0x72, 0x33, 0xf9, 0x0c, 0x4a, 0x23, 0x45, 0xba, 0x40, 0xaf, 0x85, 0x65, 0x7e, 0x87, + 0xd6, 0xaf, 0xd9, 0x8a, 0x5a, 0x26, 0x79, 0xf1, 0xce, 0x50, 0xd5, 0xc0, 0xef, 0x56, 0x4c, 0xbb, + 0xa8, 0xb5, 0xcc, 0x2d, 0x1f, 0xbf, 0x87, 0x85, 0x85, 0x45, 0x5f, 0x87, 0x97, 0x56, 0x0a, 0x18, + 0x98, 0xa0, 0x44, 0x3a, 0xe6, 0x0b, 0xfc, 0x6c, 0xd6, 0x80, 0xfe, 0x72, 0x18, 0x10, 0xb6, 0x58, + 0x66, 0x16, 0x24, 0x04, 0xc0, 0xaa, 0x8f, 0xfd, 0x28, 0xba, 0xe5, 0x16, 0xdd, 0xba, 0x2c, 0x11, + 0xea, 0x37, 0xc7, 0xb4, 0xb3, 0x07, 0x72, 0x43, 0x8d, 0x0e, 0x5a, 0x34, 0x98, 0x1e, 0x20, 0x40, + 0x7c, 0x5f, 0x7a, 0x05, 0x7c, 0x08, 0x63, 0x19, 0x68, 0xe4, 0x39, 0xe3, 0x6c, 0x21, 0x93, 0x1b, + 0x0c, 0x68, 0x13, 0x3a, 0xfe, 0xa6, 0x8d, 0x22, 0xce, 0x13, 0xd3, 0xd7, 0xba, 0x5b, 0x0e, 0x39, + 0x29, 0x60, 0x85, 0x27, 0xc2, 0xaf, 0x3d, 0x7c, 0xac, 0x3b, 0x5f, 0x4f, 0x3a, 0x3c, 0xf4, 0xb4, + 0x17, 0x95, 0xdd, 0xb7, 0xba, 0x8b, 0xd6, 0x66, 0x07, 0xbe, 0xce, 0x8e, 0x54, 0x0c, 0x21, 0x7f, + 0x4b, 0x53, 0x80, 0x35, 0x68, 0x6b, 0x26, 0xbf, 0x97, 0xed, 0x8f, 0xe5, 0xe3, 0xc1, 0x48, 0x3d, + 0x62, 0xc0, 0x10, 0x55, 0x04, 0x3f, 0x7a, 0xc7, 0x2a, 0x45, 0xc1, 0xfb, 0x20, 0x17, 0x40, 0x6c, + 0x69, 0xae, 0x11, 0x89, 0x10, 0x93, 0xd9, 0x25, 0xc6, 0x5b, 0xd3, 0xc8, 0x5c, 0x82, 0x58, 0x77, + 0x12, 0x88, 0xce, 0x13, 0x32, 0xa1, 0x6f, 0xf0, 0x2f, 0xd5, 0x6b, 0xb8, 0x88, 0x36, 0x49, 0xdb, + 0x66, 0x74, 0x6b, 0x51, 0xfc, 0x00, 0xf4, 0x0b, 0x1b, 0xbd, 0xcd, 0xbe, 0xac, 0x20, 0x08, 0xcc, + 0x2f, 0x29, 0xc8, 0xec, 0x2a, 0x1f, 0x2d, 0x0a, 0xe8, 0xf4, 0x59, 0x16, 0x53, 0x40, 0x86, 0xdd, + 0xf2, 0x39, 0xa5, 0x48, 0xa7, 0x0b, 0x71, 0x26, 0xa0, 0x1a, 0x0e, 0x21, 0xdf, 0x28, 0x93, 0x63, + 0x19, 0x3a, 0xe4, 0x89, 0xe0, 0x82, 0x65, 0x6b, 0xe7, 0xca, 0xe6, 0x2d, 0x1d, 0x72, 0xd1, 0x29, + 0xca, 0xd6, 0x4e, 0x22, 0xe2, 0xc7, 0xc9, 0x34, 0x23, 0x50, 0xb7, 0xd9, 0x2c, 0x3e, 0xba, 0x2d, + 0x17, 0xc1, 0x46, 0x81, 0x31, 0x10, 0xf2, 0x78, 0x41, 0x71, 0xc2, 0x7d, 0x5b, 0x41, 0x9a, 0x0f, + 0x5e, 0xb2, 0xf8, 0x5a, 0x77, 0x4b, 0x9b, 0x34, 0xcb, 0xbc, 0xac, 0xe4, 0x03, 0x74, 0xc6, 0x93, + 0xfb, 0xf0, 0xa9, 0x18, 0x1e, 0x52, 0x11, 0x04, 0xd6, 0xc8, 0x9d, 0x9c, 0xbe, 0x2a, 0x87, 0xe4, + 0x75, 0xae, 0x52, 0x23, 0x27, 0x6a, 0x36, 0xfd, 0x56, 0x6b, 0x5d, 0x3a, 0x65, 0x29, 0x47, 0x36, + 0x29, 0xa1, 0xbf, 0x0f, 0x16, 0x4c, 0x69, 0x3a, 0x5a, 0xbe, 0xb3, 0x7d, 0x87, 0xbe, 0x86, 0x9e, + 0x45, 0x5c, 0x06, 0x98, 0x02, 0x34, 0x65, 0x8f, 0x60, 0x19, 0xc1, 0x10, 0x50, 0xb7, 0x79, 0x99, + 0xb3, 0x4b, 0x79, 0x5a, 0x16, 0x05, 0xba, 0xda, 0x5a, 0x90, 0x0f, 0x22, 0x76, 0x8b, 0x06, 0x23, + 0xe3, 0xe4, 0x46, 0x75, 0xda, 0xf2, 0x93, 0x52, 0xe9, 0x0a, 0x66, 0x72, 0x13, 0xa3, 0x2e, 0xdb, + 0xd3, 0x03, 0xc0, 0x28, 0x5f, 0xd1, 0x86, 0xae, 0xa1, 0x79, 0x91, 0xca, 0x9f, 0x75, 0x94, 0x59, + 0xb0, 0x5c, 0xa3, 0xe2, 0xec, 0x34, 0x1e, 0x99, 0xbe, 0xe2, 0xe1, 0x29, 0x36, 0xbf, 0xbb, 0xd5, + 0xeb, 0x29, 0x5c, 0x68, 0x15, 0x09, 0x5a, 0xe9, 0x11, 0xdf, 0x5a, 0xb9, 0x08, 0x31, 0x23, 0x43, + 0x72, 0xe8, 0xd8, 0x3c, 0x2f, 0x63, 0x93, 0x8e, 0x95, 0x99, 0x28, 0xeb, 0x4c, 0x42, 0xcb, 0xe6, + 0x64, 0xd4, 0x04, 0x28, 0x32, 0xfc, 0xec, 0x36, 0x9e, 0x1d, 0x7e, 0xd3, 0xd0, 0x22, 0x4a, 0xca, + 0xc8, 0x5c, 0x26, 0x08, 0x3b, 0x06, 0x32, 0x89, 0x05, 0x85, 0x65, 0xca, 0xad, 0x7a, 0x27, 0xaf, + 0xcd, 0x54, 0xa1, 0x83, 0x52, 0x8f, 0x8b, 0x30, 0x90, 0xbd, 0xf9, 0xa4, 0xfe, 0x88, 0x22, 0x60, + 0x9d, 0x00, 0x38, 0xa6, 0x23, 0xee, 0x2c, 0xbb, 0xcc, 0xda, 0x62, 0x7b, 0xfa, 0xc4, 0xb4, 0xdd, + 0xab, 0x24, 0x0c, 0x8c, 0xae, 0x93, 0x79, 0xf1, 0x44, 0xf3, 0x65, 0xc7, 0xc5, 0x31, 0x2c, 0xdb, + 0x05, 0x34, 0x8a, 0x7d, 0x3e, 0xa0, 0x93, 0xf0, 0x3c, 0xb6, 0x32, 0x98, 0xb9, 0xe8, 0xac, 0x83, + 0x4d, 0xbd, 0x04, 0xc3, 0xf6, 0x2d, 0x6f, 0x6d, 0xb5, 0x02, 0x49, 0x3a, 0xe6, 0x11, 0xa3, 0x1a, + 0xf9, 0x6a, 0xd5, 0x68, 0x80, 0x81, 0x70, 0x11, 0x5e, 0xe2, 0x7c, 0x0b, 0xa5, 0xc8, 0xf7, 0x3e, + 0x5b, 0x61, 0xb3, 0x89, 0x71, 0x2f, 0x78, 0x50, 0x5f, 0x90, 0xcd, 0x32, 0x29, 0x65, 0x40, 0x26, + 0x57, 0xe2, 0xa3, 0xb0, 0xc4, 0x03, 0x7d, 0x18, 0xb5, 0x88, 0xc9, 0x67, 0x4b, 0x3c, 0xd9, 0x2e, + 0xfd, 0x51, 0xea, 0x55, 0xd6, 0xc1, 0x9b, 0xe6, 0x26, 0xa2, 0x36, 0x3e, 0xdb, 0x6e, 0xea, 0x9c, + 0x61, 0xba, 0x3f, 0x47, 0x9d, 0x34, 0x0d, 0x81, 0xbd, 0x50, 0x6b, 0x0b, 0x48, 0x8c, 0x13, 0x58, + 0x4d, 0x24, 0xb0, 0x17, 0xcd, 0x66, 0x5e, 0xa0, 0xfe, 0x1e, 0x9c, 0x51, 0xb5, 0x13, 0x71, 0x90, + 0x70, 0x41, 0x1e, 0x42, 0x48, 0x58, 0xad, 0x88, 0x26, 0xb4, 0x4d, 0x66, 0x4a, 0xc6, 0xcd, 0x4a, + 0xde, 0x6e, 0xe0, 0x21, 0xdc, 0x22, 0xba, 0xc7, 0x6a, 0x05, 0xb6, 0xc7, 0xd4, 0xc3, 0xf7, 0x79, + 0x12, 0xdd, 0x62, 0x20, 0xab, 0x09, 0xcf, 0x96, 0xaf, 0xa0, 0x02, 0xd9, 0xd5, 0x4f, 0x09, 0xfe, + 0x32, 0xfb, 0xc7, 0x3f, 0x0c, 0xae, 0x26, 0x1a, 0x18, 0xe7, 0x87, 0xeb, 0x35, 0xfe, 0x14, 0xf8, + 0x3e, 0x9e, 0x93, 0x95, 0x55, 0x69, 0x6f, 0x3a, 0x30, 0x66, 0x7e, 0x8c, 0x21, 0xa8, 0x60, 0x76, + 0x40, 0xb3, 0x0b, 0x8c, 0x7f, 0xfc, 0xc3, 0x74, 0x4c, 0xba, 0x08, 0xe2, 0x9a, 0xdf, 0xe1, 0xb3, + 0xaf, 0x6e, 0x28, 0xfa, 0x76, 0xb0, 0xdf, 0x43, 0x77, 0x34, 0xe8, 0xeb, 0x57, 0xc9, 0x67, 0xf6, + 0x34, 0x4a, 0xa6, 0x1f, 0xdf, 0xbf, 0xca, 0xdc, 0xb9, 0x13, 0x27, 0x18, 0x6f, 0x89, 0xac, 0xc2, + 0xf7, 0x0c, 0x46, 0x76, 0x7e, 0xce, 0xd2, 0xcc, 0xbd, 0x70, 0x58, 0x0c, 0xdc, 0x7b, 0x86, 0x1e, + 0x44, 0x76, 0x9e, 0x62, 0x44, 0xcb, 0xcb, 0xb5, 0x97, 0x15, 0x5a, 0xc8, 0xe7, 0x4d, 0xf7, 0x8a, + 0x57, 0xb8, 0x57, 0x90, 0x52, 0x40, 0x6b, 0x70, 0x99, 0xc0, 0xcc, 0x75, 0xe5, 0x3c, 0x0d, 0xa8, + 0xa7, 0x62, 0x24, 0x2f, 0x28, 0x42, 0xae, 0x3d, 0xa9, 0xa6, 0xb8, 0xc7, 0x27, 0xce, 0xad, 0x77, + 0xad, 0x69, 0xc3, 0xb3, 0x2c, 0x6b, 0x8b, 0xa8, 0x5a, 0x28, 0xf8, 0x4a, 0x79, 0xe8, 0xba, 0xd7, + 0x32, 0xaf, 0xbc, 0x46, 0xec, 0x5f, 0x85, 0xa0, 0xe8, 0x27, 0x29, 0x5d, 0x4f, 0xf2, 0x04, 0xed, + 0x6d, 0x34, 0xfb, 0x9a, 0xcd, 0x46, 0x5d, 0x16, 0x06, 0x81, 0x03, 0xd5, 0x72, 0xe7, 0x45, 0x70, + 0xce, 0x3e, 0xed, 0x7c, 0x0a, 0x5a, 0x9f, 0x3a, 0xf0, 0xb3, 0x63, 0x3b, 0x0f, 0xf4, 0x05, 0x86, + 0x57, 0xa6, 0x7d, 0x7c, 0xff, 0xd2, 0x3d, 0x7d, 0xb0, 0xdc, 0x88, 0xff, 0xb4, 0xc6, 0x8d, 0xa5, + 0xd2, 0x8e, 0xd2, 0x5a, 0x2f, 0xe5, 0xe7, 0x17, 0x14, 0x29, 0xbb, 0x00, 0x79, 0x07, 0x94, 0xfa, + 0xcd, 0xfc, 0x0c, 0xe3, 0x8b, 0x59, 0x5d, 0x67, 0x33, 0x07, 0xd8, 0x35, 0xc8, 0x87, 0x80, 0xdd, + 0xbc, 0x3d, 0xa3, 0xca, 0xad, 0x9e, 0xed, 0x6e, 0x94, 0x5a, 0x9f, 0x3a, 0x37, 0x1e, 0xee, 0xb3, + 0x78, 0xdc, 0xbc, 0xfd, 0xdd, 0xbf, 0xf2, 0x39, 0x4d, 0x9b, 0x40, 0x6a, 0x30, 0xe3, 0x22, 0x80, + 0x17, 0x5f, 0xd9, 0xf0, 0x4e, 0x3b, 0xd9, 0x48, 0x0d, 0x16, 0x4c, 0x97, 0xb3, 0xc4, 0x09, 0x74, + 0xf3, 0x35, 0xdf, 0xb1, 0x58, 0x66, 0x9f, 0xc3, 0xb9, 0xfb, 0x04, 0xa7, 0x7d, 0xe3, 0xe4, 0xdc, + 0x13, 0xbb, 0x58, 0x4c, 0x4f, 0x70, 0xed, 0xa1, 0xa6, 0x4e, 0xf7, 0x43, 0xbc, 0xc7, 0x73, 0x38, + 0x0f, 0xec, 0x0e, 0x1e, 0xc0, 0xb0, 0xc7, 0x4f, 0xbc, 0x1c, 0xf5, 0xfe, 0x2c, 0x41, 0x06, 0xe9, + 0x1d, 0x02, 0xe0, 0x1e, 0x08, 0xc3, 0x63, 0xa6, 0x4e, 0x4c, 0x9d, 0xc0, 0xba, 0xa4, 0x2b, 0x21, + 0xf3, 0xec, 0xe7, 0x30, 0xc7, 0x38, 0x48, 0xab, 0x55, 0x8e, 0x65, 0xb4, 0xa3, 0x4d, 0x55, 0xfa, + 0x7a, 0x52, 0xf4, 0x8d, 0x5d, 0xbe, 0x67, 0xe7, 0x2f, 0x6e, 0xe6, 0x00, 0x92, 0xec, 0x2d, 0x07, + 0x5e, 0x6f, 0xe5, 0x72, 0x55, 0xbe, 0xc0, 0x38, 0x3b, 0xd5, 0xfd, 0x9c, 0xfc, 0x22, 0x4d, 0xae, + 0x0d, 0xb6, 0xb6, 0x9d, 0x23, 0xac, 0xb3, 0xb4, 0x88, 0xb7, 0xa5, 0x0c, 0xd9, 0xd3, 0x0b, 0xbe, + 0x7c, 0x61, 0xed, 0x0b, 0x1f, 0x6b, 0xe6, 0x9f, 0xf9, 0x69, 0x58, 0xec, 0xc0, 0x88, 0xf5, 0xfd, + 0xc2, 0x86, 0x4e, 0x9c, 0x00, 0x7b, 0x2a, 0xd6, 0xc5, 0x5b, 0xdd, 0x28, 0x9e, 0x98, 0x06, 0xe7, + 0x78, 0xb0, 0x38, 0xcf, 0xd2, 0xe4, 0x12, 0x0c, 0x13, 0xe6, 0x9a, 0x26, 0xb9, 0xbc, 0x5f, 0x09, + 0xbd, 0xa9, 0x11, 0xe2, 0x31, 0x8c, 0xed, 0xe7, 0xcc, 0x4b, 0x7c, 0x9c, 0x93, 0x78, 0x1b, 0x19, + 0x2c, 0x06, 0x91, 0x2c, 0x32, 0x78, 0x37, 0x30, 0x0f, 0x22, 0x0f, 0xec, 0xba, 0xcf, 0xc7, 0x29, + 0x8b, 0x44, 0x0d, 0x30, 0xce, 0x23, 0x58, 0xe5, 0x3c, 0xb3, 0xf8, 0xce, 0x21, 0x94, 0x9a, 0x5a, + 0x39, 0xf8, 0x15, 0xc7, 0x1b, 0xe9, 0x84, 0x5f, 0x05, 0xd7, 0x16, 0x90, 0xa0, 0x43, 0x9b, 0xa2, + 0x65, 0xd1, 0x71, 0x4c, 0x95, 0x8c, 0x94, 0x20, 0xc3, 0xd3, 0x40, 0xde, 0x2b, 0x84, 0x85, 0x1f, + 0x5f, 0xe6, 0x27, 0x61, 0x79, 0x9b, 0x66, 0xa3, 0x88, 0x58, 0x93, 0x77, 0xd8, 0x9c, 0x4e, 0x36, + 0xa3, 0xe2, 0xc5, 0x81, 0x7c, 0xe6, 0xed, 0x7c, 0xfa, 0xb4, 0x73, 0x5e, 0xe0, 0xff, 0x77, 0xd1, + 0x4f, 0xbb, 0xe7, 0xd1, 0x3e, 0x96, 0x5c, 0x31, 0x2e, 0x00, 0x21, 0x6d, 0x5a, 0x8a, 0x3f, 0x26, + 0xbf, 0x0a, 0x94, 0x34, 0x4b, 0xb7, 0x91, 0x70, 0x0b, 0x53, 0xcd, 0x20, 0x98, 0xbf, 0x85, 0xb2, + 0xf0, 0x11, 0xd7, 0x55, 0xf1, 0x95, 0x1d, 0xbd, 0xe1, 0xae, 0xa1, 0x85, 0x3b, 0x21, 0xee, 0x6b, + 0xcb, 0xec, 0xec, 0xc0, 0xf4, 0x42, 0xa2, 0xa6, 0x60, 0xf0, 0x52, 0x82, 0x5a, 0x53, 0x3a, 0x2e, + 0x2d, 0xe0, 0xf9, 0x16, 0x6f, 0x35, 0xd1, 0x13, 0x26, 0xdc, 0xb2, 0x4c, 0x5b, 0xf1, 0x61, 0xbb, + 0x4f, 0x5a, 0x67, 0xae, 0xb8, 0x01, 0x0d, 0x26, 0x9d, 0xc4, 0x2e, 0x3d, 0xc4, 0xab, 0x55, 0x7c, + 0x98, 0x4e, 0x52, 0x37, 0xb6, 0x6d, 0xc8, 0x6a, 0x94, 0xc6, 0xf9, 0xe9, 0x13, 0x6d, 0xc4, 0xa3, + 0xee, 0x23, 0x1d, 0xd9, 0xcf, 0x1c, 0xe4, 0x17, 0xb6, 0x23, 0x17, 0x1f, 0x5e, 0xd6, 0x22, 0x9f, + 0x7b, 0x32, 0x5c, 0x92, 0x51, 0xf4, 0x96, 0x97, 0xb0, 0x06, 0x7c, 0xa6, 0x45, 0x22, 0xd4, 0xec, + 0x14, 0xd5, 0xad, 0xa2, 0xfe, 0x6a, 0x25, 0x33, 0x7a, 0x7a, 0x46, 0x1f, 0x32, 0xfa, 0x34, 0x05, + 0xca, 0xa4, 0x64, 0x2d, 0x8f, 0x00, 0x59, 0xad, 0x7a, 0xdb, 0x32, 0x0a, 0x10, 0x75, 0xa4, 0x6d, + 0x05, 0x8c, 0x9f, 0x24, 0x24, 0xe0, 0xa8, 0x62, 0x7e, 0x9c, 0xaa, 0xcf, 0x27, 0x4e, 0x26, 0x74, + 0x76, 0xc0, 0x45, 0x02, 0x4a, 0x27, 0x56, 0xac, 0xda, 0x51, 0x45, 0xfa, 0x38, 0x03, 0xb1, 0x48, + 0x8d, 0x8b, 0xb6, 0x39, 0x73, 0xb5, 0xdd, 0xa2, 0xca, 0x9e, 0xfe, 0xa2, 0xea, 0x6f, 0x74, 0x7a, + 0x52, 0x42, 0x72, 0x1d, 0x62, 0x05, 0xd7, 0x2b, 0x0e, 0x8c, 0x22, 0x6e, 0x55, 0xf4, 0x69, 0x55, + 0x30, 0xae, 0xe3, 0xf6, 0x40, 0x5b, 0x21, 0x1e, 0x4c, 0xe7, 0xbb, 0xf0, 0xed, 0x9e, 0x16, 0xbf, + 0x13, 0x16, 0xf1, 0x81, 0x32, 0x9b, 0x31, 0x8a, 0xa7, 0x5c, 0x00, 0x3e, 0x5f, 0x73, 0x34, 0x41, + 0x68, 0xc6, 0x97, 0x5f, 0x5b, 0xda, 0x8c, 0xe1, 0x2b, 0xce, 0x19, 0xfc, 0xe2, 0x9b, 0xe4, 0x10, + 0x50, 0x01, 0x04, 0xf3, 0x1c, 0x3f, 0x2e, 0x6b, 0x91, 0xb1, 0x1f, 0xe7, 0x61, 0xbc, 0x60, 0x6b, + 0x85, 0x72, 0xde, 0x0c, 0xd6, 0xeb, 0xe9, 0xf5, 0x96, 0x50, 0xbc, 0x57, 0x14, 0x27, 0xa7, 0xc1, + 0x58, 0xd5, 0x38, 0x19, 0xdb, 0x00, 0xe5, 0xd8, 0x17, 0x61, 0x15, 0x8a, 0x74, 0x8c, 0x2e, 0xcb, + 0x0f, 0xbd, 0x67, 0x02, 0x19, 0x3e, 0x74, 0x8c, 0x1f, 0xbd, 0xe2, 0x88, 0xe5, 0xc1, 0x01, 0xa2, + 0x79, 0x10, 0xe5, 0xd5, 0xa2, 0xf4, 0xf9, 0xf1, 0x56, 0x64, 0xdb, 0xad, 0xb0, 0xf3, 0x7b, 0x12, + 0xc6, 0x96, 0x69, 0xea, 0x07, 0x2c, 0x7e, 0xa3, 0x03, 0xd9, 0xa9, 0xa4, 0xb7, 0xd8, 0x13, 0xd7, + 0xa4, 0x64, 0x6e, 0x59, 0xfd, 0x05, 0x6d, 0x3b, 0xed, 0x88, 0x2c, 0xbc, 0x7f, 0x20, 0x99, 0xb3, + 0xda, 0x22, 0x3c, 0xc7, 0x5e, 0xf3, 0x83, 0xa3, 0xa2, 0x42, 0xb3, 0xf9, 0xa1, 0x78, 0x81, 0xe9, + 0x95, 0x4f, 0xd8, 0x31, 0x7e, 0x49, 0xcd, 0xeb, 0xc8, 0x09, 0xcd, 0x8c, 0x10, 0x3d, 0xaa, 0x22, + 0x55, 0x00, 0x16, 0x7a, 0x1f, 0x41, 0x05, 0xcf, 0xed, 0x31, 0xb6, 0xc4, 0xb3, 0x8e, 0x33, 0x3c, + 0x4a, 0x27, 0x9e, 0x43, 0x98, 0x04, 0x4b, 0x7b, 0x03, 0x3b, 0xc8, 0xa6, 0xf6, 0xd7, 0x92, 0xd3, + 0x15, 0x63, 0x7e, 0xc9, 0xd9, 0x12, 0x7e, 0x07, 0x85, 0x44, 0x21, 0xc5, 0x95, 0x08, 0xf8, 0x26, + 0x57, 0xe6, 0x38, 0x48, 0x14, 0x52, 0x0a, 0xcd, 0x04, 0xc3, 0xa2, 0xe1, 0xd8, 0x70, 0x7b, 0xcb, + 0xc8, 0x6d, 0xd5, 0xf8, 0x35, 0x18, 0xf7, 0xcc, 0xa2, 0xa9, 0xb1, 0xa8, 0x8d, 0x32, 0x05, 0x3b, + 0x69, 0x9b, 0xbe, 0x68, 0x52, 0x30, 0xbc, 0x2f, 0xb3, 0x46, 0x0e, 0x12, 0x71, 0xc0, 0x62, 0x2a, + 0x60, 0x69, 0xd1, 0x87, 0x18, 0xfc, 0x78, 0x89, 0x17, 0x4b, 0xa7, 0x9b, 0xec, 0xb4, 0xc5, 0x2a, + 0x6b, 0x52, 0x9f, 0xd8, 0x77, 0x72, 0x62, 0xf9, 0xc1, 0xc4, 0xb4, 0xd9, 0x7c, 0x69, 0xa5, 0x05, + 0xb2, 0xb9, 0x53, 0x2a, 0x1e, 0x17, 0x20, 0xbc, 0xb7, 0x72, 0x95, 0x7d, 0x1c, 0x9f, 0x08, 0x60, + 0x44, 0x5f, 0xe9, 0x38, 0x06, 0x18, 0xef, 0x5a, 0xa2, 0xda, 0x44, 0x4a, 0x94, 0xf3, 0x16, 0x25, + 0xd1, 0xac, 0x56, 0x84, 0x9d, 0x32, 0x17, 0x03, 0xf5, 0xa7, 0x00, 0xf9, 0x03, 0x07, 0x19, 0x83, + 0x03, 0x97, 0x69, 0x41, 0x02, 0xe9, 0x7b, 0xaf, 0x81, 0x08, 0x52, 0x68, 0x2a, 0xe3, 0xb7, 0x9b, + 0x84, 0x60, 0x71, 0x9d, 0x61, 0x23, 0xc7, 0xfe, 0x09, 0xff, 0x45, 0x71, 0x80, 0x51, 0xf0, 0xb8, + 0x86, 0x43, 0xba, 0x8c, 0x75, 0xfa, 0x9e, 0xfd, 0x4e, 0x0e, 0x21, 0x03, 0xe4, 0xae, 0x91, 0x08, + 0x33, 0xc9, 0x30, 0x1f, 0x2c, 0xfd, 0xb5, 0xc9, 0x35, 0x93, 0x07, 0x4b, 0xac, 0xbc, 0x36, 0xf2, + 0x04, 0x1e, 0xb1, 0x81, 0x75, 0xe7, 0x94, 0xf3, 0xd7, 0x19, 0xb4, 0x97, 0xf1, 0xef, 0x61, 0xaa, + 0xfb, 0xa8, 0x33, 0x5b, 0xae, 0x70, 0xc1, 0xc4, 0x12, 0xef, 0x9d, 0x15, 0x3b, 0xaf, 0xad, 0x19, + 0xc1, 0x88, 0xbf, 0xe3, 0x64, 0x82, 0x0d, 0x7b, 0x89, 0xfa, 0x06, 0xf0, 0xda, 0x4f, 0x63, 0xeb, + 0xf4, 0xb5, 0x3f, 0x9f, 0x93, 0xab, 0xf6, 0xc1, 0x32, 0x03, 0x18, 0xda, 0x87, 0xf8, 0x84, 0x1d, + 0xc1, 0x4b, 0x90, 0x50, 0x14, 0x6e, 0xbc, 0x33, 0x89, 0xac, 0xc3, 0x53, 0x9b, 0x5f, 0xa1, 0xf4, + 0xc6, 0xf9, 0x03, 0x6c, 0x4c, 0xe0, 0x11, 0x5d, 0x87, 0x81, 0x61, 0x6f, 0x5b, 0xe6, 0xc2, 0x3b, + 0x14, 0xf7, 0xc4, 0x2c, 0x6c, 0x53, 0x3a, 0xe1, 0x7f, 0xf0, 0xa0, 0x0c, 0xca, 0xf5, 0x77, 0x30, + 0xb0, 0x30, 0x23, 0xc5, 0x53, 0xe0, 0x2f, 0xf7, 0xca, 0x2b, 0x56, 0xa9, 0x37, 0xe5, 0xb8, 0xb6, + 0xa6, 0xd4, 0x99, 0x9d, 0x65, 0x96, 0xce, 0xdc, 0x1b, 0xf2, 0xa8, 0x9d, 0x75, 0x7e, 0x0b, 0xbc, + 0x72, 0x87, 0x0e, 0x9b, 0xd3, 0x25, 0x2e, 0xe3, 0xea, 0xe9, 0x63, 0x6e, 0x18, 0x3a, 0x0b, 0xfa, + 0x28, 0x69, 0x63, 0xcf, 0x0d, 0x55, 0x31, 0xd3, 0x21, 0x3d, 0x14, 0x15, 0x40, 0xeb, 0x8d, 0xd7, + 0x68, 0x58, 0x7f, 0x78, 0xa2, 0x0f, 0x5b, 0x7d, 0x23, 0x26, 0xd4, 0xcf, 0xcd, 0x06, 0x44, 0x90, + 0x48, 0x54, 0x76, 0x3d, 0x50, 0x41, 0xff, 0xf0, 0x2c, 0x24, 0x74, 0xae, 0x80, 0xcb, 0x41, 0xc3, + 0x3c, 0x64, 0xb6, 0x1a, 0x78, 0xf8, 0xd5, 0x03, 0x27, 0x53, 0x40, 0x2a, 0x61, 0x0e, 0x47, 0xc3, + 0x29, 0x1f, 0xfb, 0x23, 0x3f, 0x33, 0x2e, 0x89, 0x6c, 0x1e, 0x02, 0xd9, 0xac, 0x1f, 0x8e, 0x39, + 0xe4, 0xe8, 0x19, 0x08, 0xbd, 0xcb, 0x53, 0x8c, 0x3c, 0xa4, 0x48, 0xda, 0xc7, 0x68, 0xae, 0xaa, + 0x37, 0x74, 0x73, 0x0b, 0x37, 0xa6, 0x0a, 0x5f, 0xa1, 0x55, 0x06, 0x31, 0x6d, 0x69, 0xaf, 0x60, + 0x46, 0xe8, 0xb9, 0x1e, 0xf7, 0x5a, 0x80, 0xd9, 0x9c, 0x01, 0xd2, 0x4a, 0x91, 0x6d, 0x09, 0x3f, + 0xb0, 0x0c, 0x7c, 0x52, 0xdb, 0x95, 0x86, 0x4e, 0xc7, 0x74, 0xf9, 0x0a, 0xe0, 0x86, 0x34, 0x62, + 0x1e, 0xa9, 0xee, 0xc1, 0x32, 0xc5, 0x40, 0x1a, 0x50, 0xec, 0x63, 0x1a, 0x81, 0x62, 0xb9, 0x36, + 0xac, 0x07, 0x20, 0xe9, 0x60, 0x94, 0x6b, 0x1b, 0xe8, 0x1e, 0x26, 0x56, 0x76, 0xb6, 0x96, 0x4f, + 0x4e, 0x08, 0xda, 0x27, 0x9e, 0xe4, 0x5b, 0xa0, 0xe0, 0xd9, 0x36, 0xdd, 0xe1, 0xf6, 0xd9, 0xf2, + 0xeb, 0x73, 0x39, 0x31, 0xf8, 0x9a, 0xa7, 0x8e, 0x90, 0x54, 0x8e, 0xf1, 0xb1, 0xb6, 0xd7, 0xdb, + 0x71, 0x88, 0x46, 0x08, 0x7d, 0x4e, 0x6c, 0x08, 0x0a, 0x72, 0x70, 0x03, 0xe7, 0xae, 0x06, 0x29, + 0x38, 0x14, 0xd2, 0xd8, 0x73, 0x0c, 0xec, 0xf7, 0x23, 0xea, 0xfd, 0x9c, 0x4c, 0x7e, 0xc6, 0xa5, + 0x83, 0xfe, 0x9f, 0x23, 0xa2, 0x03, 0xe9, 0x2b, 0xcc, 0x16, 0x73, 0x62, 0x61, 0x54, 0xe7, 0xa9, + 0xf7, 0x33, 0x7a, 0x5f, 0x45, 0x12, 0x4a, 0xee, 0x9f, 0xe9, 0x7a, 0x8a, 0x66, 0xf3, 0x67, 0x5d, + 0xbb, 0xb7, 0x9d, 0xef, 0xbc, 0x37, 0xa2, 0xd9, 0xbf, 0x7a, 0x0f, 0x79, 0x86, 0x79, 0x63, 0x02, + 0x01, 0xb2, 0x34, 0x17, 0xe4, 0x05, 0x36, 0xbd, 0x09, 0xf4, 0x83, 0xcd, 0xfe, 0xe9, 0x7c, 0xef, + 0xfc, 0xcd, 0xf9, 0xc9, 0x13, 0xf4, 0x2b, 0x3d, 0x43, 0xd6, 0x0f, 0x62, 0x27, 0x48, 0x2e, 0x97, + 0x37, 0x4a, 0xaf, 0x9a, 0x6c, 0x5b, 0xe3, 0xdb, 0x88, 0x3b, 0x3c, 0x4b, 0xe9, 0x04, 0x36, 0x2e, + 0xd7, 0x9a, 0xbb, 0x57, 0x9c, 0xed, 0xab, 0x78, 0xeb, 0x4a, 0x14, 0x31, 0x97, 0xb5, 0x2b, 0x63, + 0x8c, 0xd4, 0x5a, 0xd2, 0xcd, 0xeb, 0xf1, 0xda, 0x5e, 0x96, 0x8d, 0xe6, 0x18, 0x28, 0xd4, 0x44, + 0x52, 0x46, 0xa4, 0xf1, 0x4b, 0x13, 0xad, 0xa7, 0xfc, 0x9a, 0x80, 0xef, 0xf8, 0xbd, 0x00, 0x3f, + 0xf2, 0x8b, 0x00, 0x9e, 0xc3, 0x9f, 0xe1, 0x09, 0x4e, 0xa3, 0x73, 0xe7, 0xb4, 0x0b, 0xb0, 0x78, + 0xea, 0x36, 0xc8, 0x52, 0xba, 0x9e, 0x82, 0x5f, 0x2c, 0x33, 0x96, 0xb2, 0xee, 0x54, 0xfa, 0x27, + 0x69, 0x8c, 0xde, 0x83, 0xe5, 0x02, 0x94, 0x6f, 0x73, 0x7d, 0x38, 0xf5, 0x50, 0xc9, 0x40, 0xf3, + 0xed, 0x61, 0xc5, 0x81, 0xf0, 0xf0, 0x5e, 0x07, 0x42, 0x26, 0x1c, 0x08, 0xe8, 0x3e, 0xd8, 0x4e, + 0x7b, 0x5f, 0xc4, 0x87, 0x1e, 0xca, 0x3e, 0x05, 0x1f, 0x7a, 0xa8, 0xe8, 0xea, 0xa1, 0x43, 0x10, + 0xbb, 0x20, 0x2d, 0x16, 0x6b, 0xd3, 0x51, 0x87, 0x03, 0xdc, 0x4f, 0xa7, 0x4b, 0x41, 0x7d, 0x99, + 0xe9, 0x2e, 0x81, 0xd0, 0x5c, 0xf3, 0xd3, 0x83, 0xe5, 0xd4, 0x7a, 0xf8, 0xd0, 0x5e, 0x9b, 0xeb, + 0xf5, 0xa7, 0x53, 0x04, 0x4b, 0x12, 0x97, 0x0f, 0x06, 0xec, 0xf1, 0x83, 0xe5, 0x53, 0x3c, 0x59, + 0x84, 0xc7, 0xfb, 0xe1, 0x07, 0xca, 0x3f, 0xbc, 0x79, 0xe8, 0x40, 0x05, 0xde, 0x0a, 0x39, 0x17, + 0x1f, 0xda, 0xe6, 0xda, 0x01, 0x6e, 0x71, 0x3b, 0x39, 0x85, 0x8c, 0x07, 0xcb, 0xbf, 0xae, 0x1f, + 0x2a, 0xb3, 0x4a, 0x94, 0x7e, 0xe8, 0x70, 0x4c, 0x01, 0x29, 0x3f, 0x04, 0xd6, 0x7d, 0xea, 0x9a, + 0x67, 0x3e, 0xea, 0xb4, 0x54, 0xef, 0x7c, 0x62, 0xaa, 0x06, 0x3f, 0x99, 0x37, 0x9f, 0x4a, 0xd4, + 0xff, 0x89, 0xdc, 0x56, 0x9f, 0xcc, 0xcd, 0x36, 0x97, 0x6b, 0xd9, 0x2a, 0x96, 0xc0, 0x66, 0x4d, + 0xd5, 0xec, 0x09, 0x79, 0x5b, 0x6e, 0x0c, 0xef, 0x50, 0x08, 0xe1, 0x1b, 0x20, 0xa6, 0x87, 0x5c, + 0x32, 0x3f, 0x9c, 0x08, 0xe1, 0x74, 0x23, 0x16, 0x0d, 0x16, 0x6b, 0x34, 0x6e, 0x48, 0xd6, 0x50, + 0x7d, 0xdb, 0xbd, 0x91, 0x5b, 0xab, 0xbe, 0x77, 0xc8, 0x37, 0xcf, 0xf0, 0x4a, 0x9a, 0xfc, 0x35, + 0x27, 0x17, 0xeb, 0xf8, 0x21, 0x12, 0xe8, 0xc3, 0x13, 0xdc, 0xba, 0x04, 0x6b, 0x18, 0xbf, 0xab, + 0x7d, 0xf8, 0x08, 0x20, 0x38, 0xf8, 0x24, 0x5d, 0xdb, 0xa7, 0xe2, 0xfb, 0x2d, 0xe0, 0x1c, 0x59, + 0xe9, 0x7c, 0x5e, 0xc8, 0x4f, 0x26, 0x37, 0xa4, 0x9a, 0x66, 0x20, 0xe3, 0xb4, 0x32, 0x8a, 0x96, + 0x2d, 0xfd, 0x35, 0x7c, 0x4b, 0x14, 0x9d, 0x71, 0x62, 0xe2, 0x49, 0x4d, 0x6e, 0x36, 0xbb, 0x64, + 0x11, 0x12, 0xb1, 0x6c, 0x6c, 0x04, 0xda, 0x6a, 0x61, 0xb3, 0x6d, 0xe2, 0x6a, 0xbc, 0x20, 0x37, + 0xd2, 0x56, 0x19, 0x5c, 0x7c, 0x5e, 0x9c, 0x0a, 0x0d, 0xae, 0xb7, 0xdb, 0xb2, 0x16, 0x93, 0x85, + 0xfc, 0x48, 0xb0, 0x0b, 0x96, 0xf4, 0xbe, 0xed, 0xb0, 0x5a, 0x5e, 0xb9, 0xce, 0x3b, 0x49, 0x8c, + 0x7c, 0xda, 0x0b, 0xef, 0x64, 0xaa, 0x60, 0x4e, 0x82, 0x7c, 0x30, 0x41, 0x8a, 0x40, 0x29, 0x13, + 0xd5, 0xe3, 0x49, 0xde, 0xe1, 0x6f, 0x5e, 0xea, 0x6e, 0x0c, 0xbd, 0x73, 0x9d, 0x86, 0x00, 0x28, + 0x58, 0x00, 0x60, 0x1f, 0x84, 0xc8, 0xb2, 0xdd, 0x12, 0x7d, 0x3e, 0x5d, 0xad, 0xfe, 0xb0, 0x6e, + 0x24, 0x4f, 0x25, 0x7a, 0x54, 0xfb, 0xe2, 0x38, 0xa1, 0xdf, 0xd1, 0x85, 0x62, 0xb6, 0x73, 0xdb, + 0x6c, 0x62, 0xb9, 0xbf, 0x2a, 0x2a, 0xc2, 0x88, 0x70, 0x50, 0x0f, 0x43, 0x02, 0x0b, 0xca, 0x84, + 0x7a, 0x7a, 0xcd, 0x1f, 0x45, 0xcd, 0x73, 0x5e, 0x13, 0x89, 0x4c, 0x1c, 0xc9, 0xa2, 0x43, 0xb2, + 0xd5, 0x86, 0x96, 0x6b, 0xd9, 0x14, 0x3f, 0xe8, 0x5f, 0x6a, 0xeb, 0x39, 0x6f, 0xeb, 0x04, 0x39, + 0xcc, 0xdf, 0xbd, 0xfe, 0xc1, 0x41, 0x6f, 0x5f, 0xcc, 0xf6, 0x2f, 0x1e, 0x79, 0x2b, 0xca, 0x97, + 0xc6, 0xca, 0xd7, 0xde, 0x88, 0xbf, 0xa3, 0x07, 0x42, 0x5e, 0x43, 0x0a, 0x1c, 0x71, 0xa2, 0x1d, + 0xb7, 0xd7, 0xac, 0x03, 0x65, 0x92, 0xe8, 0x9f, 0x0e, 0x8e, 0xe3, 0x83, 0x74, 0x6c, 0x63, 0xd8, + 0x0a, 0x24, 0x8c, 0x0b, 0xbc, 0x1f, 0x2f, 0x60, 0x4f, 0x72, 0x2b, 0x06, 0x03, 0x78, 0xed, 0x7e, + 0x75, 0x43, 0x5a, 0x19, 0xbd, 0x31, 0x90, 0x16, 0xc7, 0xd0, 0xe2, 0x89, 0x87, 0x1f, 0x43, 0x36, + 0x53, 0xfb, 0xe0, 0x60, 0x6f, 0x95, 0x1e, 0x1e, 0x1e, 0xee, 0x61, 0x4c, 0x1f, 0x68, 0xe4, 0x57, + 0x87, 0x41, 0x0f, 0x4c, 0x3f, 0xad, 0xce, 0xbb, 0xcc, 0x99, 0x27, 0x2d, 0x2a, 0x98, 0x0a, 0x30, + 0x66, 0xf8, 0x47, 0xff, 0xe3, 0x31, 0x66, 0x1d, 0x7a, 0xbf, 0x2a, 0xff, 0x87, 0x8f, 0xd1, 0x1b, + 0xe4, 0x02, 0xf9, 0x55, 0xef, 0x3c, 0xe7, 0x57, 0xec, 0x32, 0xf4, 0x32, 0xd8, 0xe4, 0x1b, 0x1b, + 0xef, 0x93, 0x53, 0x65, 0x62, 0xa5, 0x2d, 0x28, 0x2a, 0x5c, 0x17, 0xd0, 0xbd, 0x0d, 0x76, 0x19, + 0xa0, 0xda, 0x22, 0xa7, 0x12, 0x7e, 0x12, 0xb2, 0xd7, 0x1f, 0x50, 0xc9, 0xd5, 0x0a, 0x9e, 0x06, + 0xfc, 0x29, 0x64, 0x14, 0x61, 0x11, 0xfb, 0x73, 0x5a, 0x2d, 0x28, 0x26, 0xed, 0x94, 0x4a, 0x63, + 0x80, 0x3f, 0x27, 0x2d, 0xac, 0x92, 0xb8, 0xd8, 0x1f, 0x2b, 0x41, 0x47, 0x4d, 0x8c, 0xb3, 0xeb, + 0x10, 0x7d, 0x66, 0xf8, 0xe2, 0xa0, 0x9d, 0xe2, 0x67, 0xcc, 0xe8, 0xf5, 0xba, 0xae, 0xd8, 0x1b, + 0xf8, 0x14, 0x9b, 0x63, 0x91, 0x36, 0x54, 0x69, 0xa9, 0x4c, 0xeb, 0xcb, 0x72, 0xc6, 0x11, 0x31, + 0xb0, 0x0e, 0x2a, 0x95, 0xcf, 0x44, 0x17, 0xa0, 0x0a, 0x5a, 0x7d, 0x60, 0xda, 0xa2, 0xfa, 0x63, + 0x59, 0x54, 0xdb, 0x4a, 0xe3, 0x7a, 0xb2, 0x48, 0xef, 0xf5, 0x71, 0x9c, 0x55, 0x04, 0x4e, 0x04, + 0x68, 0xa0, 0x5e, 0x5b, 0xbf, 0x16, 0xa6, 0x17, 0x90, 0x34, 0x64, 0xb6, 0x11, 0x73, 0x3c, 0xff, + 0xb0, 0x07, 0x10, 0xc2, 0x3f, 0x8e, 0x1f, 0xdb, 0xa5, 0x0a, 0x43, 0x60, 0x09, 0x07, 0xde, 0x68, + 0x77, 0x77, 0xb0, 0x3b, 0xa9, 0x83, 0x10, 0x31, 0xcd, 0xda, 0x54, 0x60, 0xe4, 0xd4, 0x15, 0xd8, + 0xdd, 0xed, 0xef, 0x8f, 0x5a, 0x16, 0x3b, 0x3c, 0xc4, 0x7b, 0xbc, 0x76, 0x47, 0x83, 0x7e, 0xb7, + 0x65, 0xf5, 0xba, 0xfd, 0x41, 0x93, 0xa1, 0x35, 0x6c, 0xa9, 0xd1, 0x8d, 0x14, 0x72, 0x72, 0x81, + 0x9c, 0xfd, 0x3d, 0x95, 0x34, 0x55, 0x38, 0x2c, 0xd2, 0xae, 0x64, 0x5a, 0xb7, 0xaf, 0xd2, 0xce, + 0x64, 0xda, 0xc0, 0xed, 0x75, 0x6b, 0x70, 0xd1, 0x6c, 0xe2, 0x58, 0x65, 0x3d, 0x59, 0x4d, 0x54, + 0xda, 0x1d, 0xb9, 0xfc, 0xef, 0x63, 0x97, 0x28, 0x32, 0xe0, 0x27, 0xb9, 0x5c, 0x24, 0xc0, 0x43, + 0x6f, 0xb8, 0x07, 0x7a, 0xf5, 0x81, 0x57, 0x44, 0x52, 0xf9, 0x55, 0xc4, 0x2d, 0x81, 0x76, 0xdb, + 0x3d, 0x67, 0x60, 0xcb, 0x2d, 0x94, 0x7f, 0x1c, 0x77, 0xdb, 0x8f, 0x4f, 0x5a, 0x3b, 0xb8, 0x9a, + 0x9d, 0xb4, 0x38, 0x86, 0x9e, 0x3b, 0x7b, 0xea, 0xc3, 0x8f, 0xf4, 0x10, 0xd7, 0x52, 0xd5, 0xc7, + 0x69, 0x57, 0x8b, 0xdb, 0x48, 0x8b, 0x9e, 0x72, 0xe4, 0xf4, 0x9c, 0xcd, 0xe5, 0xe1, 0x98, 0x5d, + 0xf2, 0xc1, 0x35, 0x9b, 0xbb, 0xa3, 0x06, 0xed, 0xe0, 0xef, 0x3e, 0x6e, 0x10, 0xb1, 0x13, 0x95, + 0xd7, 0x4d, 0x49, 0xe1, 0x11, 0xa1, 0xf5, 0x80, 0x47, 0x81, 0xeb, 0xa7, 0x76, 0xad, 0xef, 0x32, + 0x5b, 0xac, 0x10, 0x43, 0xb9, 0x5c, 0xd7, 0xdd, 0x52, 0x78, 0x1d, 0xfe, 0x1d, 0x39, 0x1b, 0x03, + 0x8e, 0xf9, 0xf2, 0xe2, 0xe4, 0x09, 0x52, 0xb2, 0x6e, 0x51, 0xef, 0xef, 0x02, 0x9c, 0xfc, 0x46, + 0xbb, 0xec, 0xd0, 0xdb, 0x7f, 0x6c, 0x03, 0xc1, 0xb5, 0xf7, 0x1f, 0xb7, 0x7a, 0xc5, 0xf7, 0x02, + 0x90, 0x3e, 0xda, 0xa5, 0xf4, 0xd1, 0xae, 0x4c, 0xe7, 0x16, 0x63, 0xc6, 0x27, 0x24, 0x83, 0x09, + 0x79, 0x6c, 0x0b, 0xce, 0x80, 0xe5, 0x86, 0x7b, 0x6b, 0x3e, 0x5d, 0xbd, 0x91, 0x48, 0x8d, 0xbd, + 0x0c, 0xd0, 0xda, 0x1b, 0x3d, 0x4a, 0x5b, 0xe2, 0x8b, 0x62, 0xea, 0x38, 0x06, 0x91, 0x8b, 0xbe, + 0x08, 0x81, 0x27, 0x28, 0x25, 0x91, 0x22, 0xb3, 0x61, 0x5a, 0x73, 0xaf, 0xc0, 0xa4, 0xc6, 0x0f, + 0x08, 0x6d, 0xd2, 0x0f, 0xde, 0x13, 0xbc, 0x85, 0xe8, 0x8d, 0x15, 0x85, 0xb0, 0x92, 0xd8, 0x65, + 0x29, 0x6b, 0x7c, 0xc2, 0x1e, 0x7b, 0x87, 0x13, 0xcd, 0x6f, 0x3b, 0x40, 0x87, 0x03, 0x5b, 0xbb, + 0x0f, 0x96, 0xbf, 0x16, 0xce, 0x3b, 0x66, 0xcb, 0x4b, 0x65, 0x3f, 0xc5, 0x6a, 0xbf, 0x02, 0xcb, + 0x00, 0x58, 0xbf, 0x96, 0x5d, 0x2f, 0x9f, 0xf0, 0xfc, 0x26, 0xd0, 0xa0, 0xbd, 0x3e, 0x05, 0x75, + 0x31, 0x0c, 0x6e, 0xdc, 0x1c, 0x54, 0xd0, 0x35, 0x6d, 0xbc, 0x1b, 0xc5, 0xd1, 0x09, 0x56, 0x16, + 0x04, 0xdc, 0x33, 0x2f, 0x08, 0x72, 0x99, 0xba, 0xef, 0xac, 0x4b, 0xe6, 0xe0, 0xae, 0x0f, 0x79, + 0xf5, 0x17, 0xbc, 0xb4, 0x33, 0x75, 0x1b, 0x60, 0x28, 0x36, 0x7e, 0x27, 0x6a, 0x10, 0x2e, 0x0e, + 0xe6, 0xcd, 0x26, 0xd4, 0x38, 0x15, 0x11, 0xf7, 0xcd, 0xa6, 0x1e, 0xbd, 0x3a, 0x67, 0xac, 0x20, + 0x72, 0xb4, 0x30, 0x51, 0x4c, 0x02, 0xa1, 0xa7, 0x9e, 0x7f, 0xed, 0x87, 0x50, 0x0c, 0x10, 0x39, + 0x81, 0xde, 0x52, 0x6c, 0x99, 0x83, 0x20, 0x9b, 0x77, 0x05, 0x84, 0xf8, 0x30, 0xae, 0x00, 0x8f, + 0xe7, 0x4f, 0x9d, 0x4e, 0xa7, 0x53, 0x38, 0xb3, 0x94, 0xcf, 0xb9, 0xdd, 0x3b, 0x19, 0x6f, 0x39, + 0xe5, 0x8e, 0x1d, 0xc7, 0x1e, 0xd8, 0xd0, 0xbc, 0xef, 0xcf, 0xcc, 0xc1, 0xfb, 0x13, 0xe8, 0xd9, + 0x87, 0xf6, 0x36, 0xca, 0x63, 0x30, 0x8f, 0x09, 0xfe, 0xb8, 0x4b, 0xfa, 0xc4, 0xde, 0xba, 0x42, + 0x99, 0xb1, 0x5a, 0x35, 0x2e, 0x28, 0x6a, 0x24, 0xac, 0xb1, 0x77, 0x74, 0x96, 0xd1, 0x81, 0x34, + 0xc8, 0xf3, 0xe8, 0xa2, 0x4a, 0xde, 0xde, 0x2d, 0x73, 0x1e, 0x30, 0xcb, 0xe2, 0x2f, 0x09, 0xa3, + 0xfb, 0xad, 0xec, 0x4e, 0xea, 0x2c, 0x41, 0x5f, 0x0b, 0x18, 0xdd, 0x7c, 0x9b, 0xb9, 0x66, 0x06, + 0xd6, 0x57, 0x3b, 0x49, 0xc3, 0xf3, 0x30, 0x36, 0xf5, 0xe3, 0x77, 0x67, 0xac, 0xb4, 0xb5, 0x42, + 0x53, 0x21, 0xf7, 0x57, 0x4a, 0xf3, 0x51, 0x54, 0x59, 0x48, 0x21, 0xab, 0x7b, 0xb9, 0x3e, 0xd2, + 0xce, 0x31, 0xba, 0xb0, 0x84, 0xf1, 0x68, 0xe0, 0xb5, 0xb8, 0xe1, 0x59, 0xc8, 0x52, 0x03, 0x94, + 0x77, 0xb6, 0x86, 0x9f, 0xb7, 0xa8, 0xd0, 0x9d, 0xda, 0x6b, 0x32, 0x95, 0xb9, 0x66, 0x75, 0x74, + 0x11, 0x5e, 0x7a, 0x91, 0x74, 0x61, 0x05, 0x8c, 0x6f, 0xa0, 0x3e, 0xa0, 0x6d, 0x42, 0x10, 0xdd, + 0xad, 0x5c, 0x59, 0x4d, 0xb3, 0x66, 0xb3, 0x6e, 0x9a, 0x1b, 0x7c, 0x9e, 0x27, 0xa9, 0x2b, 0x46, + 0xa2, 0xed, 0x07, 0x4e, 0x29, 0x85, 0x8e, 0x97, 0x76, 0x16, 0x69, 0x11, 0xa5, 0x31, 0x10, 0x25, + 0x23, 0x65, 0xe9, 0x7a, 0x01, 0x73, 0x22, 0x7e, 0xea, 0x84, 0xc0, 0x7a, 0xed, 0xcf, 0xe9, 0x98, + 0x87, 0x76, 0x40, 0xa3, 0xf2, 0x01, 0x19, 0xdd, 0xc8, 0x12, 0xd1, 0xa9, 0xee, 0xa2, 0x8a, 0xb8, + 0xfd, 0xa7, 0x11, 0x0a, 0x0f, 0x60, 0xe1, 0x03, 0x31, 0x3f, 0xc6, 0xc2, 0x6a, 0x67, 0x01, 0x7a, + 0x15, 0xe5, 0x86, 0x3b, 0xdd, 0x71, 0xd3, 0x01, 0x25, 0xfa, 0x92, 0x79, 0xe8, 0x0d, 0x7f, 0xe0, + 0x40, 0xc3, 0x6b, 0x31, 0x68, 0xb0, 0x04, 0xa1, 0x87, 0xdf, 0x52, 0x3a, 0x56, 0x03, 0x0f, 0xd7, + 0xfc, 0x21, 0x37, 0x2e, 0x18, 0x14, 0x2b, 0x9c, 0xe5, 0x40, 0x32, 0xc2, 0x27, 0x8e, 0xc1, 0x0e, + 0x79, 0xdd, 0xcf, 0xcc, 0xfb, 0xa9, 0x6c, 0xbc, 0x5f, 0xe0, 0xde, 0x1d, 0xf2, 0xbd, 0xca, 0x6e, + 0x7f, 0xb3, 0xf9, 0xa6, 0xd9, 0xfc, 0xae, 0xd9, 0x7c, 0x0a, 0x74, 0xd6, 0x38, 0x5f, 0xad, 0x9e, + 0x23, 0xc1, 0x35, 0x6e, 0x57, 0xab, 0x1f, 0x71, 0x7d, 0xbc, 0x12, 0xce, 0xea, 0xc6, 0xd3, 0x62, + 0xe3, 0x77, 0xbb, 0x93, 0x82, 0x76, 0x08, 0x0f, 0x4d, 0x3a, 0xdf, 0x14, 0xce, 0x4c, 0xce, 0x9e, + 0xa4, 0x23, 0x8b, 0x76, 0x96, 0xc7, 0xdb, 0x2b, 0xe3, 0x66, 0x70, 0x65, 0x8b, 0x12, 0x68, 0x10, + 0x69, 0x06, 0xfa, 0x17, 0x6b, 0x01, 0x1d, 0xd2, 0x80, 0xd4, 0xd7, 0x0b, 0x7e, 0x7b, 0xdf, 0xdb, + 0x29, 0xff, 0xf0, 0x9b, 0x5c, 0x10, 0x95, 0xed, 0x53, 0xc6, 0x43, 0x38, 0xa1, 0x7d, 0x80, 0x96, + 0x79, 0xb1, 0xe5, 0x69, 0x17, 0x05, 0x45, 0xfc, 0x4b, 0x98, 0x44, 0x26, 0x0e, 0xc7, 0x99, 0x47, + 0xcf, 0xde, 0xbf, 0x7c, 0xf7, 0x81, 0x80, 0xed, 0xe4, 0xfe, 0x39, 0x9e, 0xd2, 0xc2, 0x58, 0x6b, + 0x64, 0x97, 0x7b, 0x9e, 0x15, 0x4e, 0x4c, 0x6d, 0x23, 0xd8, 0x54, 0x5e, 0x3a, 0xc0, 0xd5, 0x5f, + 0x91, 0xac, 0x70, 0x8d, 0x96, 0x4a, 0x97, 0x77, 0x87, 0xa1, 0x82, 0xe6, 0xa6, 0x01, 0xbc, 0x8b, + 0x3a, 0xb6, 0x6b, 0xbe, 0x7a, 0xf9, 0xe6, 0xaf, 0xa5, 0x6e, 0xd1, 0x99, 0x86, 0xdb, 0xc8, 0x7a, + 0xaf, 0xfa, 0x66, 0xb2, 0xea, 0x5c, 0x24, 0x62, 0x7b, 0xdf, 0xf3, 0x8f, 0x2e, 0x3a, 0x09, 0x47, + 0x8c, 0xb2, 0xf1, 0x81, 0x1b, 0x48, 0x44, 0xe0, 0x4d, 0xa9, 0xa0, 0x3e, 0xe4, 0x29, 0x63, 0xfc, + 0x16, 0xec, 0x77, 0x28, 0x63, 0x30, 0x5a, 0xd5, 0x1c, 0x1d, 0x59, 0x08, 0x82, 0x32, 0xb4, 0xe8, + 0x16, 0xa5, 0x23, 0xc0, 0x35, 0xb3, 0x7f, 0x44, 0xbd, 0x84, 0x47, 0xd6, 0x96, 0xb9, 0x9b, 0x2e, + 0x19, 0x2a, 0x9f, 0x61, 0x79, 0x19, 0x4b, 0xd8, 0xaa, 0xb0, 0x53, 0x14, 0x4d, 0x8a, 0x27, 0x7e, + 0x51, 0xcf, 0x40, 0x8d, 0x3f, 0x96, 0xbc, 0x31, 0xb5, 0x2e, 0x97, 0xcd, 0x9e, 0x19, 0xff, 0xf4, + 0x64, 0x2d, 0xdc, 0x6d, 0xd7, 0xcc, 0xb9, 0x65, 0x1e, 0x74, 0x7a, 0x4e, 0x81, 0x77, 0xaf, 0xe8, + 0xeb, 0xc0, 0x0a, 0x70, 0x0f, 0x98, 0xdc, 0x04, 0x70, 0xb8, 0x76, 0x50, 0x70, 0x5b, 0x8d, 0x91, + 0x4b, 0xae, 0x7b, 0x37, 0x47, 0x07, 0xfb, 0x13, 0x17, 0x26, 0xc6, 0x12, 0x6e, 0x84, 0xcd, 0xe6, + 0x05, 0x53, 0xdb, 0x35, 0x13, 0xdc, 0x52, 0x71, 0x05, 0xc3, 0xce, 0x9c, 0x3f, 0xac, 0x74, 0x72, + 0x03, 0x9a, 0x91, 0xcb, 0x9c, 0x25, 0x77, 0x8a, 0xba, 0xb0, 0x68, 0x52, 0x74, 0x99, 0x70, 0x22, + 0x9d, 0x79, 0x1a, 0xf6, 0x14, 0x74, 0x7c, 0x2b, 0x72, 0x8e, 0xe1, 0x70, 0xe8, 0x2b, 0x4d, 0x58, + 0xab, 0xf2, 0xe6, 0x34, 0xc3, 0xa7, 0x14, 0x6f, 0xb9, 0x70, 0xa1, 0xb8, 0x9b, 0x01, 0x24, 0xc2, + 0x8f, 0x7a, 0x26, 0x1f, 0x8e, 0xe4, 0xc3, 0x2b, 0xf9, 0xe0, 0xcb, 0x87, 0x40, 0x3e, 0x4c, 0xd5, + 0x51, 0x35, 0xf9, 0x10, 0xbb, 0x8d, 0x9e, 0x93, 0xf3, 0x10, 0x39, 0x97, 0x2e, 0xbf, 0x88, 0x89, + 0x20, 0x28, 0x07, 0xab, 0x18, 0x43, 0x9a, 0xdf, 0x59, 0xb4, 0x8c, 0x56, 0x0b, 0xb7, 0x1b, 0xc7, + 0xf8, 0x0c, 0xfa, 0x89, 0x00, 0x8e, 0x67, 0xe2, 0xc7, 0xda, 0x7e, 0xe7, 0xcc, 0xe3, 0xf4, 0xa1, + 0xfc, 0xf1, 0x32, 0x5e, 0x31, 0xed, 0xb0, 0x80, 0xb0, 0xf6, 0x41, 0x90, 0x65, 0x6e, 0x06, 0x9d, + 0xb2, 0x35, 0x97, 0xe3, 0xd6, 0x9f, 0xd8, 0xe1, 0x6a, 0xf5, 0x5e, 0xe0, 0x02, 0x2f, 0x2e, 0xc5, + 0x0f, 0x8c, 0x43, 0xbe, 0xbf, 0x3a, 0xa3, 0x10, 0xdc, 0xa8, 0x8c, 0x22, 0x0b, 0xe3, 0x5f, 0xc7, + 0x8b, 0xf7, 0xf3, 0xf2, 0xbe, 0x0c, 0x0a, 0x25, 0x79, 0x6e, 0x89, 0x3e, 0x73, 0x0e, 0x53, 0xa6, + 0x8e, 0x0e, 0xf2, 0xe0, 0xb4, 0xfa, 0xd1, 0x3d, 0xf3, 0x70, 0x69, 0x98, 0x65, 0xce, 0x69, 0xba, + 0xc6, 0xb1, 0xa9, 0x37, 0x63, 0x9e, 0x18, 0x6b, 0xcd, 0x59, 0x63, 0x8f, 0x4b, 0xf0, 0xfc, 0x58, + 0x81, 0x87, 0x18, 0xad, 0xdf, 0x89, 0xe9, 0x48, 0xc5, 0x1a, 0xcf, 0x45, 0xf8, 0x1d, 0xdf, 0xd3, + 0x6d, 0x67, 0xcf, 0xfc, 0x0f, 0xd3, 0x5e, 0xfe, 0xea, 0x81, 0x89, 0xc4, 0xbc, 0x42, 0x14, 0xf6, + 0x1f, 0xfd, 0xaa, 0xf6, 0xc1, 0xd1, 0xe8, 0xdf, 0xe3, 0xdb, 0x65, 0x87, 0x7f, 0x07, 0x1e, 0xf9, + 0x27, 0xdf, 0xbe, 0x1a, 0xc3, 0xdb, 0xd8, 0xfe, 0xfb, 0x23, 0xaf, 0x3f, 0xfe, 0x9e, 0xdc, 0x00, + 0xda, 0xfd, 0x73, 0xd6, 0xdf, 0x6d, 0xe7, 0x17, 0xcb, 0xbc, 0x21, 0x36, 0x84, 0x3f, 0xc8, 0xad, + 0x59, 0xee, 0x83, 0x06, 0x8e, 0x73, 0x21, 0xfa, 0x27, 0x67, 0xd9, 0x55, 0x72, 0x1b, 0x32, 0x74, + 0x70, 0xf3, 0xbd, 0x26, 0xee, 0xf5, 0xcf, 0x6f, 0x51, 0xbd, 0xa5, 0xd9, 0x0c, 0xd8, 0x74, 0x71, + 0x7e, 0xce, 0x68, 0x62, 0x2e, 0x52, 0xda, 0x86, 0x84, 0xde, 0xc3, 0x33, 0x3c, 0xcb, 0xc1, 0x4f, + 0xfc, 0x33, 0x8c, 0xa3, 0x5a, 0x75, 0x3c, 0x7c, 0xef, 0xf4, 0x46, 0x4e, 0xaf, 0xbb, 0x0b, 0x53, + 0xf7, 0x67, 0x69, 0xc0, 0xb8, 0x65, 0x88, 0x47, 0x86, 0x0d, 0x3f, 0xbb, 0x34, 0xe9, 0x2b, 0xe4, + 0x98, 0xa0, 0x67, 0x9d, 0x97, 0xca, 0x8b, 0x81, 0x3e, 0x9b, 0x22, 0x51, 0x36, 0x99, 0xe2, 0xcd, + 0x01, 0x2a, 0x75, 0xd0, 0x57, 0xa9, 0xbe, 0x48, 0xd5, 0xfc, 0x20, 0x29, 0x1e, 0x82, 0x2c, 0x52, + 0xb5, 0x26, 0x12, 0x0f, 0x4c, 0xba, 0x61, 0xa1, 0x41, 0x44, 0xea, 0x12, 0x72, 0xbc, 0xcd, 0xab, + 0xeb, 0xa0, 0xd9, 0xe1, 0xc3, 0xbf, 0x08, 0xfe, 0x05, 0xf0, 0xef, 0x02, 0x28, 0xfe, 0xc2, 0x4b, + 0xc6, 0x89, 0x97, 0xb4, 0xb0, 0x66, 0x77, 0xd5, 0x1d, 0xc7, 0xc7, 0x8f, 0xf7, 0x77, 0x4f, 0xbc, + 0xde, 0x38, 0x3b, 0x1e, 0xe0, 0x43, 0x97, 0x1e, 0x46, 0xf8, 0x10, 0x1e, 0x8f, 0x1e, 0x9f, 0x78, + 0xe1, 0x71, 0xff, 0x84, 0x4a, 0xc9, 0x34, 0xfa, 0x8b, 0x09, 0x43, 0x91, 0xb0, 0x77, 0xe2, 0x5d, + 0xb4, 0xfa, 0xdd, 0xe1, 0x1e, 0xbe, 0xec, 0xc3, 0x0b, 0xe5, 0x3e, 0xc6, 0x5c, 0xd0, 0x90, 0xc2, + 0xe3, 0xc1, 0xc9, 0xaa, 0x6b, 0xb7, 0xda, 0xfd, 0x15, 0x96, 0x7e, 0xdc, 0x3d, 0xf1, 0xd8, 0x38, + 0xf7, 0x58, 0x0b, 0x72, 0x46, 0xc3, 0x13, 0x20, 0x08, 0x9b, 0x67, 0xf4, 0x4e, 0x80, 0x68, 0x98, + 0xcb, 0x77, 0x87, 0x7b, 0xa0, 0xfe, 0x40, 0x99, 0xa2, 0x4e, 0x4a, 0xee, 0x8d, 0xc3, 0xc3, 0xc3, + 0xee, 0xa1, 0x97, 0xe3, 0x1f, 0xbc, 0xf9, 0xaf, 0xb7, 0x27, 0xce, 0x01, 0xe5, 0x6e, 0x90, 0x2c, + 0x85, 0x7f, 0x21, 0x3b, 0x4e, 0xc1, 0x86, 0xc6, 0x3e, 0xb9, 0x8b, 0x61, 0xdf, 0x95, 0x56, 0xac, + 0xb0, 0x8c, 0xc5, 0xdf, 0xbe, 0x2b, 0x2d, 0x60, 0xfa, 0x3b, 0xe8, 0xbb, 0xdc, 0x0e, 0x12, 0xa5, + 0x7b, 0x2e, 0xae, 0x50, 0xf8, 0x1f, 0xc7, 0x07, 0x34, 0xe7, 0x79, 0xdd, 0x09, 0xb0, 0x3f, 0x00, + 0xd7, 0xed, 0xda, 0x13, 0xeb, 0xc6, 0x62, 0xad, 0xe1, 0xaa, 0xcb, 0x89, 0xc3, 0xe6, 0xf9, 0x94, + 0x71, 0x06, 0xec, 0xdf, 0xe2, 0x78, 0xe5, 0xa9, 0xb6, 0x4b, 0xd0, 0xee, 0x73, 0x60, 0x0d, 0x61, + 0x5d, 0x01, 0xf8, 0x8f, 0x05, 0xf8, 0xa2, 0xcb, 0x5d, 0xea, 0x92, 0x77, 0x51, 0xb4, 0xdf, 0x2f, + 0xb7, 0xbf, 0x5c, 0xe0, 0x25, 0x08, 0x50, 0xb7, 0xbe, 0x95, 0xdd, 0x7d, 0x77, 0x59, 0x4d, 0x1b, + 0x3e, 0x76, 0x15, 0x6e, 0xa0, 0xcd, 0x12, 0x76, 0x20, 0x6f, 0xf9, 0x1b, 0xb4, 0xc8, 0x41, 0xcb, + 0x45, 0x85, 0xbe, 0xbb, 0x7c, 0x00, 0x73, 0xa0, 0x52, 0xa5, 0x85, 0x8f, 0x4d, 0x8f, 0xd4, 0x30, + 0xb6, 0x25, 0x8b, 0x1d, 0x7e, 0x7e, 0xf5, 0xa1, 0x15, 0x11, 0xe8, 0xbd, 0xc7, 0x88, 0x82, 0x82, + 0xa8, 0x60, 0x4e, 0xd7, 0x8c, 0xff, 0x85, 0x39, 0xce, 0x3d, 0x22, 0x80, 0x55, 0x77, 0x5d, 0xd4, + 0xd8, 0xc7, 0x38, 0x95, 0xb2, 0x00, 0xaf, 0xc6, 0x70, 0xe0, 0xfb, 0xea, 0xb8, 0x9f, 0x6c, 0x7a, + 0x64, 0x2f, 0x05, 0x19, 0x17, 0x14, 0x56, 0x5b, 0x70, 0xcf, 0x26, 0x9b, 0x98, 0x13, 0x2f, 0x24, + 0x61, 0x0f, 0xa9, 0x56, 0x14, 0x45, 0x02, 0x10, 0x92, 0x56, 0x03, 0x81, 0x28, 0x48, 0x32, 0x2f, + 0x91, 0x64, 0x3e, 0xf6, 0xbd, 0x5c, 0x23, 0x4b, 0x4b, 0x8c, 0xc1, 0x96, 0xe4, 0xb9, 0xd7, 0xaf, + 0x25, 0xcf, 0xfc, 0xdf, 0x49, 0x9e, 0x15, 0xea, 0xcc, 0xef, 0xa1, 0xce, 0xe5, 0x19, 0x51, 0xcf, + 0x5e, 0x4f, 0x52, 0xcf, 0x5e, 0xaf, 0x9e, 0x06, 0xf3, 0x2f, 0xa0, 0xc1, 0x6d, 0xad, 0xec, 0xef, + 0x73, 0xe0, 0xaa, 0xad, 0x0c, 0x46, 0xce, 0x9e, 0xb6, 0x50, 0xbe, 0x27, 0x72, 0xec, 0xf5, 0x05, + 0x3a, 0x08, 0xf0, 0xa5, 0x60, 0x1d, 0xbd, 0x3b, 0x9a, 0x1f, 0x76, 0xdd, 0xa5, 0xef, 0x11, 0xe3, + 0x21, 0xd2, 0x91, 0x28, 0x80, 0x2a, 0x79, 0x93, 0x3c, 0x70, 0x30, 0x41, 0x7e, 0xcb, 0x8a, 0x0e, + 0x0e, 0x06, 0x30, 0x17, 0x7d, 0x6c, 0x2d, 0xf5, 0x88, 0x82, 0x56, 0x8a, 0xbd, 0xe5, 0xad, 0x1e, + 0xb0, 0x9e, 0x11, 0xf4, 0x3d, 0xd2, 0x4a, 0xe3, 0xe2, 0xe8, 0x9f, 0x10, 0x4d, 0x54, 0xfa, 0x04, + 0x7c, 0x6b, 0x3d, 0x11, 0x19, 0xe5, 0xb2, 0x01, 0xdc, 0x86, 0xf7, 0x06, 0xc5, 0x02, 0x00, 0x23, + 0xae, 0xd5, 0x2e, 0x9a, 0x97, 0x3d, 0x02, 0x10, 0x9c, 0xc9, 0xf2, 0x06, 0x52, 0x59, 0xa0, 0x01, + 0x33, 0x67, 0x05, 0x00, 0xa0, 0x45, 0xfc, 0x13, 0x99, 0xa5, 0x65, 0xa5, 0x7c, 0x24, 0x36, 0x35, + 0xd4, 0xa7, 0x61, 0x00, 0x06, 0xa1, 0x44, 0x00, 0xac, 0x96, 0xbf, 0xd9, 0xa8, 0x6a, 0x53, 0xa5, + 0x3d, 0x51, 0x49, 0x0c, 0xdf, 0x2e, 0x86, 0x82, 0x44, 0x8e, 0x68, 0xcd, 0xbd, 0x00, 0xa7, 0x80, + 0x03, 0x1e, 0x22, 0x09, 0xf2, 0x3c, 0xf1, 0xe8, 0x81, 0x0e, 0x06, 0x2d, 0xe3, 0x5c, 0xc0, 0x0b, + 0xcc, 0x96, 0x14, 0x07, 0xa9, 0x3e, 0x90, 0x3b, 0xe8, 0xa6, 0x3f, 0x40, 0x26, 0x20, 0x71, 0x4c, + 0xb3, 0x83, 0x93, 0x3a, 0xc6, 0x48, 0xb3, 0x62, 0x45, 0x65, 0xc7, 0x91, 0x98, 0x69, 0xcf, 0x1b, + 0xf6, 0x40, 0x97, 0x80, 0x27, 0x1a, 0x3a, 0xa2, 0x7f, 0x58, 0x0c, 0x09, 0x57, 0x1e, 0x07, 0x19, + 0x1a, 0xe9, 0x8b, 0xc5, 0x4f, 0xc2, 0x81, 0x62, 0xf8, 0x83, 0xe2, 0x74, 0xbc, 0x4b, 0xc2, 0x45, + 0x44, 0xb0, 0x25, 0x57, 0xd7, 0x71, 0xde, 0xea, 0xef, 0x11, 0xf0, 0xea, 0x68, 0x68, 0xc1, 0x85, + 0x0a, 0x62, 0x49, 0x75, 0x62, 0x49, 0xeb, 0x89, 0xc5, 0xe2, 0x24, 0x28, 0x96, 0x54, 0xdf, 0x55, + 0x13, 0x98, 0xde, 0x45, 0x32, 0xac, 0x10, 0x7a, 0x9b, 0xc8, 0x81, 0x45, 0xc5, 0x2a, 0xc4, 0xc3, + 0x4a, 0xc4, 0x33, 0x2c, 0x64, 0x43, 0x01, 0x6c, 0x04, 0x13, 0xb1, 0x49, 0x46, 0x14, 0x94, 0x9a, + 0x70, 0x06, 0x4c, 0x4a, 0x9b, 0x6f, 0x85, 0xc0, 0xa1, 0xbd, 0x9c, 0xdf, 0xb9, 0x3c, 0x07, 0xb0, + 0x3c, 0x2f, 0xad, 0xc1, 0xbe, 0xbd, 0x01, 0xe9, 0x60, 0x48, 0x39, 0xc3, 0xcd, 0x9c, 0x7f, 0xa3, + 0x08, 0x61, 0x1a, 0x99, 0x40, 0x63, 0xbc, 0xa9, 0x71, 0xea, 0x72, 0x32, 0x69, 0x58, 0x2f, 0x2c, + 0xdf, 0x26, 0xde, 0x2c, 0x3a, 0xf4, 0x15, 0xa6, 0x96, 0x72, 0x29, 0x42, 0xb9, 0x77, 0x65, 0xd2, + 0x9f, 0x11, 0x72, 0x4a, 0x74, 0xbf, 0x22, 0x1e, 0x3c, 0x92, 0x98, 0x4d, 0x45, 0x8c, 0x62, 0x6f, + 0x34, 0x52, 0x29, 0x6a, 0x7a, 0x38, 0x6b, 0xd5, 0xc4, 0x99, 0x56, 0x68, 0x9d, 0x6b, 0xe4, 0x33, + 0x2b, 0x4d, 0xe2, 0x15, 0x2e, 0xa5, 0x16, 0xae, 0xe4, 0x72, 0xbf, 0x13, 0x2d, 0x5d, 0xa4, 0x36, + 0xbc, 0x11, 0x10, 0x35, 0x35, 0x2c, 0x26, 0x65, 0x24, 0x84, 0xce, 0xb6, 0x61, 0x8e, 0x5c, 0xc1, + 0xe0, 0x81, 0x0a, 0x24, 0x8f, 0x6c, 0xb5, 0x87, 0x7b, 0x72, 0xce, 0x7b, 0x7c, 0x7c, 0xa3, 0x8d, + 0xf1, 0xed, 0x97, 0xc7, 0x37, 0x1c, 0xb8, 0x7c, 0xf9, 0x69, 0xed, 0x00, 0x95, 0x0c, 0xbe, 0xb0, + 0xf6, 0x6e, 0x6d, 0xed, 0xdd, 0x7b, 0x6b, 0xeb, 0xc8, 0x2c, 0x52, 0xb5, 0x55, 0x29, 0x67, 0x5c, + 0x88, 0xda, 0xd1, 0x48, 0x28, 0x08, 0x88, 0xd8, 0x29, 0x9e, 0xee, 0xbf, 0x83, 0x06, 0xba, 0x6e, + 0x1d, 0xa8, 0x8f, 0x49, 0xec, 0x70, 0x5d, 0x75, 0x63, 0xf6, 0x39, 0x31, 0x2b, 0xa8, 0xd6, 0x6b, + 0x14, 0x09, 0x03, 0x2e, 0x41, 0x7c, 0xc1, 0xa3, 0x48, 0x90, 0x1f, 0x78, 0x29, 0x09, 0x70, 0xe9, + 0x2b, 0x67, 0x52, 0x75, 0xe5, 0x1a, 0x48, 0x5e, 0x10, 0xad, 0x18, 0x4b, 0xc3, 0x7a, 0x4d, 0x82, + 0x8e, 0x5f, 0x06, 0xf4, 0x81, 0x3f, 0x2f, 0xbf, 0xb8, 0x45, 0xd1, 0xca, 0x07, 0x4b, 0xb5, 0x8b, + 0xf5, 0xb1, 0xa9, 0xdf, 0x39, 0x16, 0x96, 0xe7, 0xb0, 0xb8, 0x94, 0x06, 0x5e, 0xac, 0x4c, 0x23, + 0x97, 0x5a, 0x4b, 0xaf, 0xf2, 0x40, 0xc4, 0x55, 0xa7, 0x85, 0x8d, 0xf6, 0x79, 0x6b, 0xa0, 0xe8, + 0xac, 0x45, 0x8b, 0xac, 0xdc, 0xa2, 0x90, 0xe0, 0x23, 0x5d, 0xc4, 0xde, 0xc3, 0x35, 0x05, 0x07, + 0xa4, 0xe1, 0xdc, 0xcd, 0x2b, 0xa9, 0xdc, 0x60, 0x2c, 0xd9, 0xd3, 0xb8, 0x3c, 0x27, 0xc4, 0xb1, + 0xea, 0xa0, 0xde, 0xeb, 0xdd, 0xa1, 0x3b, 0x6a, 0x1a, 0xe3, 0x00, 0xc8, 0xe3, 0x4f, 0x3e, 0x3a, + 0x4d, 0x38, 0x68, 0x0a, 0xe0, 0x70, 0xff, 0x9e, 0x02, 0x7b, 0x7d, 0x54, 0x09, 0x0b, 0x05, 0x11, + 0x25, 0x80, 0x25, 0x84, 0x36, 0x1f, 0x99, 0x2d, 0x87, 0x45, 0x4a, 0xcc, 0xa6, 0xac, 0x49, 0xc0, + 0xfc, 0x91, 0xa7, 0x64, 0x01, 0xb8, 0xc2, 0x73, 0xbd, 0xc5, 0x36, 0x9b, 0x79, 0x78, 0xab, 0x32, + 0xb7, 0xd1, 0xce, 0xe0, 0xdf, 0x02, 0xfe, 0x4d, 0xe1, 0xdf, 0x1c, 0xfe, 0x5d, 0xc3, 0xbf, 0x5b, + 0xf8, 0x77, 0x8e, 0x9e, 0x0a, 0xa5, 0x0a, 0x2f, 0x10, 0xd3, 0x44, 0xb8, 0xe7, 0xde, 0x19, 0x88, + 0x6c, 0xa5, 0x8f, 0x9e, 0xc3, 0x44, 0x5d, 0x58, 0x64, 0x4e, 0x69, 0x8a, 0x33, 0x2e, 0x27, 0x8b, + 0x71, 0xd1, 0x7a, 0x8e, 0xbc, 0xa9, 0x61, 0x3d, 0x21, 0x0b, 0x03, 0x85, 0xac, 0x7d, 0x0b, 0xd3, + 0xc1, 0xe4, 0x42, 0xbc, 0xe5, 0x58, 0x04, 0xd1, 0xab, 0xe9, 0xab, 0x69, 0x65, 0xe9, 0x91, 0xa8, + 0x17, 0x5a, 0x76, 0xab, 0x0f, 0x3d, 0x89, 0x2e, 0x53, 0xd5, 0xa5, 0x52, 0x97, 0xa1, 0xcd, 0xbf, + 0x09, 0x12, 0xbe, 0xc4, 0x18, 0x66, 0x64, 0x0d, 0x52, 0x19, 0x5b, 0x53, 0xa3, 0xb9, 0x39, 0xb4, + 0x7c, 0x49, 0x25, 0x0b, 0xc8, 0xd7, 0x6a, 0x28, 0x9f, 0xf1, 0x30, 0xae, 0xcd, 0xc7, 0xc2, 0x0a, + 0xf4, 0x0f, 0x87, 0xb6, 0x80, 0x43, 0x6b, 0x55, 0xc1, 0x03, 0x5c, 0x3b, 0xd5, 0x60, 0x2a, 0x57, + 0x05, 0x96, 0x6f, 0x2f, 0x6f, 0xbd, 0xde, 0xae, 0x98, 0x3f, 0x1c, 0x7c, 0xca, 0x51, 0x94, 0x13, + 0xdb, 0x81, 0xbc, 0x7e, 0x91, 0x47, 0xab, 0xf7, 0xb0, 0xa2, 0xde, 0x43, 0x91, 0xa1, 0x9c, 0xfe, + 0x02, 0x79, 0xbd, 0x3e, 0xa7, 0xb0, 0x92, 0xa5, 0xa7, 0x65, 0x0f, 0xef, 0xce, 0xde, 0x95, 0x43, + 0x4a, 0x5b, 0x7d, 0xb5, 0x24, 0x75, 0x31, 0xdc, 0xd7, 0x71, 0x2f, 0x30, 0x74, 0xae, 0x46, 0xf9, + 0xd9, 0x3a, 0x77, 0xce, 0x31, 0xa9, 0xc2, 0xec, 0x94, 0x75, 0xb4, 0x6d, 0x4e, 0xbb, 0xc0, 0x50, + 0xcf, 0xa0, 0xcd, 0xde, 0x50, 0x4d, 0xcb, 0x99, 0x2c, 0x6c, 0xf1, 0x6e, 0xec, 0x4a, 0x9d, 0xfd, + 0xc7, 0x2e, 0xa9, 0x68, 0x0a, 0xbf, 0xa0, 0xe6, 0xe7, 0x38, 0xad, 0xce, 0x6e, 0xa1, 0xe6, 0x4f, + 0xac, 0x19, 0x6a, 0xda, 0x5d, 0x48, 0x45, 0xfe, 0x36, 0x2b, 0xf8, 0x1b, 0x6a, 0x78, 0xbc, 0xa3, + 0x19, 0x8c, 0x03, 0x93, 0xc6, 0xb7, 0x5e, 0xbf, 0xbf, 0x2e, 0x19, 0x23, 0x30, 0x5a, 0x4c, 0xac, + 0xda, 0x16, 0xe5, 0x6e, 0x55, 0xbf, 0x03, 0xbd, 0x5f, 0x5f, 0xf6, 0x7b, 0x0e, 0xcc, 0xcb, 0xe7, + 0xfd, 0x3a, 0xdf, 0x5b, 0x88, 0x9d, 0xd5, 0xb9, 0x4e, 0x09, 0x03, 0xdb, 0xe5, 0x02, 0x1b, 0x61, + 0xf1, 0x61, 0x2d, 0xf2, 0xe1, 0x3a, 0x49, 0xa1, 0x9e, 0x8b, 0x42, 0xcb, 0x6b, 0x2f, 0x01, 0x20, + 0x07, 0xbd, 0x1a, 0x59, 0x52, 0x5e, 0x42, 0xfd, 0x3e, 0xc6, 0xc4, 0x13, 0x40, 0x3a, 0x00, 0x60, + 0x44, 0x00, 0x8e, 0x86, 0x0e, 0x10, 0x80, 0xe6, 0x13, 0x48, 0xbd, 0xa8, 0xd5, 0x1b, 0x09, 0x23, + 0x46, 0x78, 0x2d, 0xf8, 0x8a, 0xfd, 0x5e, 0x48, 0x14, 0x31, 0x07, 0x79, 0x55, 0x39, 0x10, 0xd6, + 0xe2, 0xb0, 0x5f, 0x51, 0x5d, 0xa4, 0xb4, 0x93, 0x4e, 0x93, 0x5c, 0x2e, 0x4f, 0x3c, 0xc1, 0xaf, + 0xad, 0x9d, 0x7e, 0xdd, 0xda, 0x91, 0x85, 0xd7, 0x7a, 0xe1, 0x86, 0x37, 0xa4, 0xa1, 0xe7, 0x7c, + 0xe8, 0x15, 0x06, 0x2d, 0x58, 0x46, 0x6f, 0x62, 0x4d, 0xd5, 0x78, 0x5f, 0x5a, 0xd7, 0x88, 0xc0, + 0xb9, 0x4a, 0x98, 0xd3, 0xfa, 0x99, 0xd2, 0xba, 0xc1, 0x61, 0x3f, 0xb3, 0x98, 0x73, 0xe6, 0x4c, + 0x9d, 0xb9, 0x3d, 0xae, 0x02, 0xd1, 0xee, 0xab, 0xb5, 0xc1, 0x4b, 0x75, 0x9d, 0xae, 0x2c, 0x85, + 0xb6, 0xa2, 0xca, 0x55, 0x34, 0xa8, 0xf2, 0xba, 0x92, 0x8e, 0x0a, 0xe6, 0x07, 0x10, 0xef, 0x8e, + 0x37, 0x29, 0xaa, 0x9c, 0x28, 0xad, 0x55, 0xb4, 0x52, 0x37, 0xc8, 0x28, 0xa7, 0x96, 0x21, 0xf5, + 0xb5, 0x66, 0xb8, 0x97, 0xc8, 0x37, 0x87, 0xf5, 0x27, 0x70, 0x7c, 0xab, 0x3a, 0x7e, 0x49, 0x84, + 0xa6, 0xad, 0xcc, 0x67, 0xd6, 0xad, 0x73, 0xee, 0xc0, 0xbf, 0x3b, 0x87, 0x8c, 0xaa, 0xc1, 0x50, + 0x73, 0x93, 0x95, 0x40, 0xdf, 0x73, 0xd5, 0xc9, 0x8e, 0xba, 0x39, 0x67, 0x1a, 0x17, 0x1a, 0x28, + 0x3e, 0x02, 0xd0, 0x8f, 0x0a, 0x1e, 0x5d, 0x61, 0xa0, 0xfd, 0x3b, 0x19, 0xa8, 0x3e, 0x1a, 0xf6, + 0xef, 0x18, 0x8d, 0xe2, 0x42, 0x69, 0xe1, 0x51, 0x29, 0x98, 0xd9, 0xf9, 0xa6, 0xec, 0x92, 0x0c, + 0x88, 0x63, 0x73, 0x83, 0x01, 0x29, 0x4f, 0xc9, 0x40, 0x92, 0xfd, 0x58, 0x5b, 0x92, 0x65, 0x26, + 0x91, 0x73, 0xee, 0x8e, 0x72, 0xd0, 0x16, 0xf0, 0x8d, 0x9f, 0x91, 0x0f, 0x57, 0x7e, 0x4c, 0x52, + 0x65, 0x73, 0x0d, 0x14, 0x30, 0x52, 0x63, 0x53, 0xba, 0xc6, 0xf6, 0xd1, 0x6a, 0x0b, 0xe3, 0xdc, + 0xab, 0x36, 0xe6, 0xa1, 0xa7, 0xb6, 0x2c, 0x95, 0xcf, 0x27, 0x8a, 0xe2, 0x76, 0x81, 0x35, 0x68, + 0xce, 0x15, 0x89, 0x93, 0xbd, 0x71, 0x60, 0x9d, 0x39, 0xa2, 0x25, 0x14, 0x9e, 0x0b, 0x69, 0x93, + 0x0e, 0xfa, 0xee, 0x82, 0x33, 0x0e, 0x85, 0x48, 0x6c, 0x9b, 0x71, 0x5b, 0x43, 0x84, 0x9d, 0x91, + 0xc3, 0x0c, 0x85, 0x93, 0xa5, 0xcf, 0xdd, 0x63, 0xd0, 0xae, 0x78, 0x66, 0x44, 0x1d, 0x30, 0xaa, + 0xb5, 0xec, 0xb1, 0xdd, 0xd7, 0xf5, 0x73, 0x7e, 0xa3, 0x50, 0xb1, 0x91, 0x7e, 0xb7, 0x06, 0x33, + 0x9e, 0xa9, 0xd1, 0x31, 0x6f, 0xa6, 0xeb, 0x25, 0x8c, 0x6b, 0x18, 0x77, 0x8b, 0x13, 0x74, 0xea, + 0x14, 0x86, 0x56, 0x52, 0x68, 0x9c, 0xa9, 0x97, 0x28, 0x8d, 0x53, 0xb7, 0xa9, 0xbc, 0x5d, 0x9d, + 0x52, 0xb8, 0xd6, 0x99, 0x94, 0xb4, 0xce, 0xb2, 0x65, 0xe6, 0xf1, 0x5d, 0x9a, 0xec, 0x98, 0xb4, + 0x48, 0xb1, 0x92, 0x61, 0x92, 0x47, 0x3a, 0x11, 0x4a, 0xee, 0x3f, 0xbe, 0xb6, 0x66, 0x8e, 0x64, + 0x5f, 0x5d, 0xd0, 0x3e, 0xc8, 0x43, 0xc9, 0x5d, 0x1a, 0xe4, 0x4a, 0x42, 0x37, 0x0d, 0x8c, 0x58, + 0xf9, 0x73, 0x84, 0xbb, 0x64, 0x56, 0x02, 0x20, 0x05, 0x13, 0x7d, 0xa6, 0x4c, 0x74, 0xee, 0xc4, + 0x01, 0x7e, 0x21, 0x10, 0x91, 0x54, 0x30, 0x50, 0x98, 0xe5, 0xb5, 0x16, 0x79, 0x45, 0xe6, 0xdc, + 0x45, 0x89, 0x5b, 0xf4, 0xac, 0x7b, 0x04, 0xfa, 0x70, 0xe8, 0xd6, 0xb0, 0x03, 0x81, 0x8f, 0x99, + 0x1a, 0x7e, 0x78, 0x3c, 0x53, 0x08, 0x4d, 0x34, 0xff, 0x2c, 0x0c, 0x7d, 0x44, 0xc9, 0x09, 0x2c, + 0xf4, 0x59, 0xab, 0x0f, 0x65, 0xba, 0xe8, 0x79, 0xe3, 0x4d, 0x26, 0x3a, 0x80, 0xca, 0xa3, 0x26, + 0xa6, 0xad, 0x70, 0x62, 0xea, 0xfe, 0x8e, 0x44, 0xeb, 0x32, 0x29, 0xe6, 0x10, 0x9e, 0x05, 0x35, + 0xeb, 0x60, 0xc6, 0x90, 0xac, 0xba, 0x14, 0x93, 0x21, 0x15, 0xf7, 0x72, 0xb3, 0x12, 0x88, 0x2f, + 0xc2, 0x64, 0x49, 0xf7, 0x1a, 0xd5, 0xe1, 0xa7, 0x86, 0x73, 0xe0, 0x62, 0xdf, 0x47, 0xd1, 0xa1, + 0x29, 0x00, 0x5c, 0x43, 0x19, 0x0e, 0xd5, 0x42, 0x27, 0x09, 0x52, 0xb8, 0x42, 0xf8, 0xd7, 0x3d, + 0x5c, 0x59, 0x9e, 0x68, 0x96, 0x20, 0x70, 0x69, 0xf4, 0x1b, 0xc8, 0xb5, 0x8c, 0x64, 0x39, 0x73, + 0xf2, 0xd6, 0x1e, 0xfa, 0x64, 0xed, 0x8a, 0x66, 0x28, 0xa9, 0x48, 0x11, 0x8e, 0x5f, 0x6c, 0x90, + 0x14, 0xaa, 0x7b, 0x89, 0x09, 0x29, 0xc4, 0x2f, 0x0b, 0x16, 0xa0, 0x46, 0xaf, 0xeb, 0xf1, 0xb5, + 0x2e, 0x6e, 0xc9, 0x1d, 0x0b, 0xe9, 0xd2, 0x90, 0x0a, 0x3f, 0xaf, 0x54, 0xd1, 0xb8, 0x7d, 0x6f, + 0x30, 0xd0, 0x3f, 0xdc, 0x36, 0xee, 0xb4, 0x0a, 0x10, 0xb3, 0x3e, 0x17, 0x67, 0x03, 0x7b, 0x13, + 0xf1, 0xc9, 0x97, 0x30, 0xd9, 0x64, 0x52, 0xe1, 0xb1, 0x88, 0x75, 0x5d, 0x01, 0x2f, 0x78, 0xad, + 0x3e, 0x0c, 0x69, 0xb5, 0x04, 0x80, 0x6e, 0x56, 0xd6, 0xd6, 0x4b, 0xb5, 0xd7, 0xda, 0xc9, 0x47, + 0x05, 0x9b, 0x14, 0x33, 0x42, 0xbb, 0x55, 0xc7, 0xf4, 0x70, 0x36, 0x34, 0xf6, 0x2a, 0x14, 0x46, + 0x5f, 0xee, 0x4c, 0x2c, 0x6b, 0xa6, 0x63, 0x93, 0x28, 0xb9, 0xdd, 0xdb, 0x53, 0x7b, 0x26, 0x1b, + 0x06, 0x57, 0xce, 0x27, 0x8a, 0x71, 0x23, 0x05, 0x6f, 0xb4, 0x13, 0x15, 0xd1, 0x88, 0xcf, 0x0b, + 0x15, 0xf3, 0x6f, 0xdc, 0x06, 0xc4, 0x12, 0x72, 0x4e, 0x12, 0x2f, 0xd7, 0x26, 0x20, 0x81, 0x0e, + 0x12, 0x6d, 0x12, 0x40, 0x07, 0x26, 0x7c, 0xa4, 0x76, 0xd5, 0x74, 0x16, 0xf9, 0xbb, 0x1a, 0x66, + 0xd7, 0x77, 0xc8, 0x91, 0x80, 0x9f, 0xc7, 0x02, 0xe9, 0x43, 0x83, 0x00, 0xc9, 0x4c, 0x5b, 0xa7, + 0xf2, 0x8c, 0x64, 0x5a, 0x21, 0x87, 0x2d, 0x1a, 0x70, 0xc1, 0x2d, 0x63, 0x6f, 0xb7, 0x9e, 0x63, + 0x16, 0x19, 0x72, 0x9a, 0x00, 0xbe, 0xb5, 0xc0, 0x7b, 0x4c, 0x40, 0x03, 0xcc, 0xd7, 0x00, 0x4e, + 0xaa, 0x78, 0x7d, 0x6f, 0x53, 0xa3, 0xe1, 0x7a, 0xb1, 0xd0, 0x2c, 0x35, 0x1d, 0x7a, 0xff, 0xf1, + 0x98, 0xc7, 0x2a, 0x28, 0x59, 0x99, 0x37, 0x56, 0x4a, 0xf4, 0xf6, 0x78, 0x4f, 0xec, 0x98, 0xc4, + 0x5e, 0x8f, 0x7b, 0x65, 0xca, 0xe5, 0xc0, 0x28, 0xd7, 0x15, 0xf2, 0x5e, 0x6f, 0x1f, 0x97, 0x3d, + 0xd4, 0x55, 0x0b, 0x1f, 0xf7, 0x62, 0x38, 0x33, 0x48, 0x95, 0xc3, 0x15, 0x0b, 0x8e, 0x54, 0xea, + 0x48, 0x2b, 0x3b, 0x44, 0x6b, 0x9e, 0xfa, 0x2a, 0x46, 0xd7, 0xeb, 0x15, 0xe6, 0xa4, 0x22, 0x20, + 0x99, 0x60, 0x59, 0x6c, 0x32, 0x72, 0x87, 0xb8, 0x7a, 0xb6, 0xe8, 0x3f, 0x68, 0xf6, 0xc8, 0xfa, + 0x3a, 0xf5, 0x89, 0x1d, 0x3b, 0xa6, 0x6f, 0xd6, 0x0a, 0x5d, 0x58, 0x33, 0x22, 0xee, 0x9f, 0xb8, + 0xed, 0x06, 0x48, 0xfd, 0x7c, 0xde, 0x5b, 0x5e, 0x4e, 0x73, 0xee, 0xbd, 0x24, 0xf3, 0xa9, 0x62, + 0xc7, 0xec, 0xc2, 0x22, 0x8b, 0xbd, 0x7e, 0xb7, 0x84, 0x08, 0xbd, 0xb9, 0xbb, 0xe5, 0xe3, 0xd7, + 0xc9, 0x67, 0xe8, 0x68, 0x58, 0xf0, 0x89, 0xaf, 0xed, 0x8b, 0xb6, 0x0c, 0xa0, 0x89, 0xfd, 0x8a, + 0xcc, 0x1c, 0x56, 0x3d, 0xd5, 0x50, 0x66, 0xef, 0xae, 0x6e, 0xea, 0xc5, 0x13, 0xae, 0xd5, 0xa2, + 0xf5, 0x42, 0x55, 0xd6, 0x68, 0xa7, 0xdf, 0xdd, 0x98, 0x7b, 0xb9, 0xde, 0x45, 0x81, 0xe1, 0x7d, + 0x05, 0xf6, 0xee, 0x2b, 0xb0, 0x8f, 0x50, 0x14, 0x42, 0x3e, 0x96, 0x1a, 0x04, 0xe3, 0x2f, 0x9b, + 0x52, 0xfe, 0x5e, 0xde, 0x32, 0xa5, 0x98, 0xa8, 0xc4, 0x59, 0x58, 0x69, 0xcf, 0x95, 0x95, 0x76, + 0x2c, 0xd0, 0xdf, 0xa1, 0x6d, 0x67, 0x28, 0xc7, 0xf6, 0xb2, 0xd8, 0x04, 0x65, 0xde, 0x2b, 0x90, + 0x1c, 0x6d, 0xdc, 0xb6, 0xdc, 0xdb, 0x03, 0x59, 0x2b, 0x89, 0x4c, 0x4e, 0x05, 0xda, 0x63, 0x7a, + 0xa1, 0xfd, 0xbe, 0x33, 0xd0, 0x0b, 0x69, 0xdb, 0x1d, 0x45, 0xe2, 0x5a, 0x6d, 0xde, 0xde, 0xd1, + 0x7b, 0x6f, 0xb7, 0x94, 0x3b, 0xac, 0xc0, 0x46, 0xdd, 0x7e, 0xc4, 0x6e, 0x47, 0xc8, 0xaf, 0xba, + 0xbd, 0x0d, 0xd0, 0xd0, 0x2a, 0xd6, 0x8a, 0xec, 0xef, 0x7f, 0x29, 0x5c, 0xc0, 0x5a, 0x4a, 0x43, + 0xda, 0x73, 0x86, 0x9b, 0xe3, 0xee, 0x3d, 0x2e, 0x15, 0xea, 0x75, 0x47, 0x24, 0x58, 0xbf, 0x6c, + 0xe0, 0x7d, 0x77, 0x59, 0xb3, 0x9b, 0xd0, 0xeb, 0xf5, 0x26, 0xe5, 0xc1, 0x22, 0x47, 0xeb, 0x01, + 0x47, 0xd3, 0x11, 0x31, 0x2a, 0x6f, 0x9b, 0xef, 0x2b, 0x30, 0x50, 0x19, 0x02, 0xab, 0xb8, 0x0c, + 0x86, 0x00, 0xb6, 0x5f, 0x2e, 0x35, 0xe8, 0x96, 0xa7, 0xb2, 0x1e, 0x58, 0x75, 0x16, 0xa0, 0x64, + 0x7f, 0x17, 0xe3, 0xee, 0x53, 0x53, 0x43, 0x0d, 0x3b, 0x6b, 0xf5, 0x31, 0xcb, 0xb2, 0x70, 0xef, + 0x9f, 0x59, 0x18, 0x08, 0x06, 0x0f, 0x0e, 0x01, 0xd4, 0x0c, 0xf4, 0x52, 0xd1, 0x2e, 0x86, 0x3d, + 0xea, 0x0d, 0xfb, 0xce, 0xee, 0x46, 0xf5, 0x9e, 0x9a, 0x38, 0xea, 0xa2, 0xdb, 0xdd, 0x28, 0x31, + 0x2c, 0x03, 0xb1, 0xdb, 0x77, 0x1e, 0x6f, 0x94, 0x19, 0x95, 0xcb, 0x8c, 0x46, 0x35, 0x80, 0xee, + 0xdf, 0x49, 0xff, 0x05, 0x1c, 0x34, 0xc5, 0xbd, 0x6e, 0x0d, 0x66, 0x7b, 0x65, 0x32, 0x78, 0x3c, + 0xfc, 0x12, 0xfa, 0x97, 0xa9, 0xb8, 0xff, 0x50, 0x5d, 0xc5, 0x65, 0x7f, 0xf9, 0xbc, 0xc6, 0xda, + 0x44, 0xf5, 0x40, 0x9d, 0x14, 0xd1, 0x9c, 0xbb, 0x9a, 0x1c, 0x62, 0x5e, 0xda, 0x12, 0xc8, 0x4f, + 0x4b, 0x87, 0x85, 0x72, 0xa0, 0x28, 0x81, 0x82, 0x2d, 0x4c, 0x01, 0xf7, 0x3c, 0x72, 0xef, 0x71, + 0x79, 0x9c, 0x83, 0x91, 0xa4, 0xd8, 0x92, 0x10, 0x46, 0xc9, 0x98, 0x7b, 0x85, 0x31, 0xa1, 0xbb, + 0x93, 0x88, 0xe4, 0x52, 0xf2, 0x7c, 0xd4, 0xec, 0x39, 0x71, 0xbd, 0x96, 0xbb, 0x23, 0x46, 0xb6, + 0x2a, 0x59, 0x1c, 0x8c, 0x92, 0x26, 0x70, 0xac, 0x9b, 0xc0, 0x71, 0xbd, 0x09, 0x3c, 0x94, 0x86, + 0x6f, 0x7c, 0xa7, 0xe1, 0x5b, 0x30, 0x5e, 0xde, 0xef, 0x63, 0xa5, 0xee, 0x73, 0x63, 0x56, 0xf4, + 0x57, 0x6f, 0x86, 0xc9, 0x1e, 0xc4, 0xb6, 0x33, 0x2a, 0x0e, 0xf1, 0xe6, 0xb6, 0x73, 0xc3, 0x1b, + 0xd8, 0x7f, 0x6a, 0x97, 0x0c, 0x8a, 0x9e, 0x7a, 0x85, 0x65, 0x31, 0xfe, 0x53, 0xc5, 0x0a, 0xd6, + 0x82, 0x2f, 0x17, 0xfc, 0x9a, 0xee, 0x88, 0xd1, 0x26, 0x5a, 0x9f, 0x5e, 0xe0, 0xe4, 0xba, 0x87, + 0x34, 0x17, 0xde, 0x56, 0xdd, 0x47, 0xf9, 0x98, 0x07, 0x8e, 0x82, 0x1f, 0xe1, 0x3a, 0x15, 0xc6, + 0x09, 0xc2, 0x23, 0xad, 0x27, 0x09, 0xdc, 0x87, 0xbb, 0x4b, 0x14, 0xe7, 0xc8, 0x5a, 0xfd, 0x2f, + 0xdd, 0xe8, 0x66, 0x35, 0x1b, 0xdd, 0x39, 0x40, 0x55, 0xe7, 0x1e, 0x8a, 0xd5, 0xc8, 0x60, 0x62, + 0xf5, 0x23, 0x6e, 0xa2, 0x48, 0x4c, 0x7b, 0x86, 0x65, 0x53, 0x4b, 0xae, 0x91, 0x5c, 0x5f, 0x23, + 0x97, 0x5b, 0xb1, 0x47, 0x21, 0x5b, 0xfd, 0xbb, 0x4c, 0x85, 0x58, 0x2a, 0xfb, 0xca, 0x64, 0xf0, + 0xe5, 0x42, 0xd9, 0xd7, 0x2c, 0x86, 0xb8, 0xb0, 0x18, 0xd2, 0x42, 0x81, 0x28, 0x0e, 0x2f, 0xe8, + 0xeb, 0xaa, 0x5c, 0x66, 0xbf, 0x8f, 0x9a, 0x71, 0x2e, 0x4f, 0x9d, 0x68, 0xc7, 0xf2, 0x80, 0x2c, + 0x68, 0xf9, 0xe4, 0x2d, 0xee, 0xfa, 0xd6, 0x3c, 0xab, 0x48, 0x31, 0x93, 0xdc, 0xe5, 0xfb, 0xc9, + 0x30, 0xa0, 0x54, 0x11, 0xd4, 0x2f, 0xc2, 0x5e, 0x29, 0xc0, 0x13, 0x45, 0x62, 0x6d, 0x41, 0xed, + 0x4b, 0x6a, 0x8b, 0xc7, 0xf5, 0xc4, 0x28, 0x73, 0xab, 0x74, 0xf8, 0xf9, 0x4e, 0x9b, 0x44, 0xba, + 0xb9, 0x34, 0x9a, 0x8c, 0x35, 0x72, 0x9c, 0x79, 0x72, 0x7f, 0x0d, 0xfb, 0x01, 0xb4, 0xcf, 0x26, + 0x5d, 0x97, 0x41, 0x32, 0xfe, 0xa5, 0x53, 0x2b, 0xb1, 0x6e, 0x35, 0x14, 0x3a, 0xf9, 0x70, 0xcb, + 0x86, 0x9d, 0xb4, 0xcd, 0x2e, 0xe1, 0x2f, 0xe2, 0xa7, 0xc6, 0x3c, 0xce, 0xe5, 0xa6, 0x19, 0x96, + 0x2c, 0xe6, 0x77, 0x1d, 0x6f, 0x6c, 0xc7, 0xa9, 0xcd, 0xad, 0x86, 0xb0, 0x4b, 0xb9, 0xdb, 0xd3, + 0x77, 0x66, 0x8a, 0xa8, 0x62, 0x9d, 0xa8, 0xae, 0xc5, 0xa1, 0xf2, 0xac, 0x8c, 0x8e, 0xd4, 0x4b, + 0x51, 0xa7, 0xf7, 0x32, 0x81, 0x1a, 0x89, 0x12, 0xda, 0x25, 0xde, 0x15, 0xa7, 0x74, 0x76, 0x4f, + 0x3c, 0xbf, 0x35, 0xe8, 0x97, 0xbc, 0x45, 0x96, 0x35, 0x93, 0x6e, 0xcb, 0xfe, 0x9e, 0x3b, 0x6b, + 0xf5, 0xf7, 0x88, 0xa6, 0xc5, 0x99, 0xa3, 0x51, 0x1f, 0x37, 0x80, 0xf8, 0x01, 0x1f, 0x9f, 0x76, + 0x8a, 0xf7, 0x0a, 0x67, 0x5d, 0x1f, 0x50, 0x9a, 0x21, 0xc8, 0x78, 0x4a, 0x4f, 0xee, 0x70, 0x8b, + 0xb4, 0x09, 0xf1, 0x79, 0xb7, 0x4b, 0x75, 0xe4, 0xb9, 0x25, 0x7c, 0x11, 0x4e, 0x36, 0x75, 0xa8, + 0x08, 0x4f, 0x8e, 0x62, 0x91, 0x91, 0xf2, 0x80, 0xfa, 0xe2, 0x04, 0x95, 0x97, 0x8d, 0x63, 0x7c, + 0x11, 0x6e, 0x23, 0xd1, 0x70, 0xb3, 0xc7, 0x8b, 0x48, 0x2f, 0x69, 0x95, 0x54, 0x6e, 0x37, 0x05, + 0x13, 0x47, 0x76, 0x65, 0xa5, 0x95, 0x84, 0x52, 0x75, 0xad, 0xa5, 0x72, 0xad, 0x8d, 0xee, 0x96, + 0x49, 0xf2, 0xf4, 0x5f, 0x8f, 0xbc, 0xa3, 0xa3, 0x8a, 0x9e, 0x37, 0xa8, 0x11, 0x58, 0x5c, 0xfc, + 0xe4, 0xf5, 0xe2, 0x27, 0xaf, 0x8a, 0x1f, 0x8d, 0x37, 0xd3, 0x99, 0x80, 0xed, 0x82, 0x82, 0x79, + 0xfb, 0x83, 0x75, 0x9d, 0xa0, 0x3e, 0xaf, 0xc1, 0x47, 0x69, 0xec, 0x9a, 0xc5, 0x58, 0x3a, 0x3c, + 0xb9, 0xf5, 0xe0, 0x64, 0x2a, 0xc7, 0xb4, 0xde, 0x72, 0x64, 0x52, 0xc7, 0x4a, 0x5a, 0x45, 0x00, + 0x30, 0x69, 0xc9, 0xcd, 0xe5, 0x36, 0xc1, 0x12, 0xe6, 0xac, 0xac, 0x00, 0xed, 0x6b, 0xfb, 0xa8, + 0xc3, 0x4d, 0x3c, 0x69, 0x1b, 0xc2, 0x8f, 0x51, 0xac, 0x6d, 0x10, 0xc1, 0x55, 0xc1, 0x79, 0xb7, + 0xcc, 0xdc, 0x88, 0xe6, 0xa1, 0xaa, 0xe9, 0x8e, 0xaa, 0x87, 0x0a, 0xd5, 0x99, 0x5d, 0xd4, 0x0f, + 0x4b, 0xea, 0x66, 0x59, 0xd3, 0xeb, 0x77, 0xbb, 0x9b, 0x5a, 0x5c, 0xbf, 0x57, 0x29, 0xa3, 0xeb, + 0xc0, 0x6b, 0x5d, 0x97, 0x2b, 0xca, 0xf4, 0xbb, 0x9a, 0x9e, 0x56, 0xd2, 0xc7, 0xea, 0x26, 0xf7, + 0xc1, 0x9d, 0x12, 0x46, 0x30, 0x80, 0x3a, 0xfe, 0xe4, 0x6b, 0x6b, 0x42, 0x3b, 0x3e, 0xeb, 0xcb, + 0x75, 0xe0, 0xeb, 0xeb, 0x40, 0x7d, 0x7f, 0xaa, 0x3b, 0xa8, 0x1a, 0x6c, 0xf2, 0x8b, 0x15, 0x73, + 0x97, 0x1d, 0x2f, 0x50, 0x66, 0xa4, 0xc3, 0x3e, 0xda, 0x0c, 0xbe, 0xa6, 0x95, 0xc1, 0xcc, 0x23, + 0xf6, 0x3d, 0xe9, 0xf3, 0xf4, 0x3d, 0xba, 0xc4, 0x5d, 0xf0, 0x9f, 0xbd, 0x62, 0xc3, 0x0e, 0xe1, + 0x18, 0xaa, 0xdd, 0x9c, 0x7c, 0x63, 0x76, 0x6f, 0xe4, 0xe1, 0xfe, 0x4d, 0x06, 0x88, 0x58, 0xc8, + 0x60, 0xe4, 0xa1, 0xd7, 0x55, 0xe7, 0x26, 0x1a, 0xa9, 0x4d, 0x81, 0xf5, 0x90, 0x21, 0xab, 0xb1, + 0x66, 0x5e, 0x8c, 0x14, 0xc1, 0x59, 0x3a, 0x3c, 0xe7, 0xf2, 0xf9, 0xcc, 0xca, 0x0e, 0x0e, 0x90, + 0xe7, 0xf4, 0x87, 0x0d, 0x2f, 0x94, 0x8f, 0x62, 0x88, 0x29, 0x1d, 0xb8, 0x14, 0x08, 0x20, 0x00, + 0xba, 0x65, 0xef, 0x23, 0xed, 0xd9, 0x70, 0x98, 0xf0, 0x2f, 0xf9, 0xfa, 0x33, 0xbc, 0x9e, 0xd4, + 0x6e, 0x5b, 0x21, 0xfd, 0x5d, 0xdd, 0xa7, 0x59, 0x3f, 0xa9, 0xb7, 0x91, 0x59, 0xd5, 0xdd, 0x21, + 0xf6, 0x1b, 0x07, 0x8f, 0xc5, 0xdf, 0x81, 0x4e, 0xa4, 0xba, 0xe3, 0x93, 0x35, 0xdb, 0x7b, 0x9a, + 0x77, 0x61, 0xd8, 0x5d, 0x21, 0xb5, 0xed, 0xaa, 0x83, 0x6a, 0x23, 0x65, 0xfc, 0x6c, 0xeb, 0x4b, + 0x6e, 0xe5, 0xed, 0x8b, 0x85, 0xbd, 0x3f, 0xd4, 0xfa, 0xd2, 0x8d, 0x09, 0x1a, 0x2f, 0x9e, 0x8a, + 0xec, 0x0f, 0x64, 0xeb, 0xc3, 0xf5, 0x3d, 0xe3, 0x7d, 0xf1, 0x4f, 0x8f, 0xb7, 0xec, 0x6b, 0x11, + 0x27, 0x69, 0x4a, 0x23, 0xa3, 0x91, 0x0e, 0xbb, 0xf2, 0xfd, 0x71, 0x93, 0x69, 0x2a, 0x69, 0xaf, + 0x38, 0xbf, 0xb6, 0x75, 0xc0, 0x43, 0xc5, 0xac, 0x74, 0x2b, 0x41, 0x8c, 0x42, 0x77, 0xc5, 0xed, + 0x36, 0xab, 0xe3, 0xc6, 0x89, 0xde, 0x18, 0xb9, 0x76, 0x0b, 0xc7, 0xd1, 0xc6, 0xda, 0xd5, 0xcf, + 0xae, 0x15, 0xa7, 0x7e, 0xf2, 0x56, 0x7b, 0x5f, 0x34, 0x7a, 0x88, 0x0e, 0xd1, 0x2d, 0x7e, 0xbb, + 0xde, 0xa8, 0xab, 0x4e, 0xa2, 0xa3, 0xd6, 0x57, 0x37, 0x39, 0x18, 0xfc, 0x97, 0xeb, 0xd6, 0x52, + 0x5d, 0xd5, 0xd0, 0x01, 0xc8, 0x12, 0x1b, 0x1c, 0x2b, 0xe1, 0x11, 0xcf, 0xa5, 0xc4, 0x81, 0xe6, + 0x36, 0x46, 0x52, 0xd2, 0x74, 0xdf, 0xde, 0xad, 0xe9, 0xa6, 0xf2, 0xa3, 0x96, 0x11, 0xa9, 0x66, + 0x28, 0xf1, 0x63, 0x25, 0xee, 0x47, 0x43, 0x69, 0x58, 0x0d, 0xf8, 0xa1, 0x53, 0x30, 0x8f, 0x98, + 0xf8, 0xec, 0x84, 0x09, 0x8e, 0x24, 0x8e, 0x88, 0x50, 0xf9, 0x58, 0xe9, 0x12, 0xa8, 0xcf, 0xe0, + 0x5f, 0x7e, 0xdc, 0x98, 0x2b, 0x29, 0xf8, 0x77, 0x77, 0x5f, 0xfc, 0xdd, 0x13, 0xe9, 0x03, 0xf1, + 0xb7, 0x8b, 0x7f, 0x13, 0x3c, 0x78, 0x54, 0x33, 0x86, 0x57, 0x77, 0x73, 0x15, 0x1c, 0x4b, 0x86, + 0x5f, 0xd6, 0xe0, 0xa7, 0x31, 0xdd, 0x76, 0x2a, 0x20, 0xcc, 0x84, 0x89, 0xc0, 0x24, 0xfc, 0xf4, + 0xb5, 0x7f, 0xe1, 0xe3, 0xc7, 0x5d, 0x64, 0x8a, 0x0e, 0xc9, 0xcb, 0x8b, 0x3d, 0x64, 0x52, 0xb8, + 0xb5, 0xbd, 0x08, 0xcd, 0xfb, 0x70, 0x44, 0x4c, 0x75, 0xac, 0x7c, 0x1c, 0x75, 0x4b, 0xe6, 0x59, + 0x11, 0x5d, 0x70, 0x13, 0xd8, 0xd8, 0x8b, 0x35, 0x46, 0x88, 0xe8, 0xcf, 0x2a, 0x3a, 0x60, 0x06, + 0x0a, 0x16, 0x57, 0x0c, 0x07, 0x52, 0x07, 0xf4, 0xb5, 0xad, 0x6b, 0x9f, 0xe6, 0xc9, 0x16, 0x2a, + 0x18, 0x47, 0x1f, 0xfe, 0xcd, 0x14, 0xe2, 0x33, 0xa1, 0xba, 0xe5, 0xf4, 0xbc, 0xa7, 0xd4, 0xb8, + 0x4c, 0x6a, 0x7a, 0x31, 0x7f, 0x19, 0x6d, 0xd1, 0xd1, 0x7e, 0xbf, 0x57, 0x3c, 0x7f, 0x91, 0x3b, + 0x47, 0x7e, 0x64, 0xb1, 0xe1, 0xae, 0xc2, 0x10, 0x0c, 0x9b, 0x1e, 0xb0, 0x8a, 0xdb, 0xe8, 0x3e, + 0xd9, 0xfa, 0x71, 0xab, 0xcd, 0x31, 0x4e, 0xb5, 0xc9, 0x4e, 0xf9, 0x09, 0x52, 0x31, 0xd9, 0xfa, + 0xce, 0xa0, 0x5a, 0x5c, 0x62, 0xc2, 0x53, 0x6d, 0xc2, 0x53, 0x39, 0xe1, 0x18, 0xbf, 0xa0, 0x04, + 0xbf, 0x04, 0x34, 0x2d, 0xe6, 0x3e, 0xd5, 0xc1, 0x7a, 0x5d, 0x61, 0x97, 0xc4, 0xe1, 0x0b, 0x16, + 0x71, 0xb0, 0x7b, 0x2f, 0x37, 0x1f, 0xc8, 0x4f, 0x57, 0x46, 0xdd, 0x3b, 0xd8, 0xb8, 0xce, 0x29, + 0x47, 0x4d, 0xeb, 0x09, 0x67, 0x0d, 0xf7, 0xf0, 0xf2, 0xdf, 0xea, 0x94, 0xcd, 0xbb, 0x3d, 0x42, + 0xf9, 0x86, 0x47, 0x88, 0x69, 0x4a, 0xc7, 0xfd, 0x1a, 0x66, 0x95, 0x3f, 0x83, 0x4d, 0xbb, 0xde, + 0xaa, 0x39, 0xbc, 0x2c, 0x90, 0xa7, 0x6f, 0xca, 0x7d, 0xcf, 0x07, 0xa7, 0xd4, 0x98, 0x27, 0xfa, + 0xfb, 0xb6, 0xdd, 0x7a, 0xa6, 0x31, 0xeb, 0x8d, 0x4f, 0x06, 0x0a, 0x32, 0xab, 0xa5, 0xad, 0xf7, + 0x05, 0x9e, 0x08, 0x3f, 0x16, 0x31, 0x2d, 0xea, 0x41, 0x7c, 0x3c, 0x22, 0x47, 0xce, 0x8a, 0x31, + 0xe3, 0x64, 0xb5, 0x4b, 0x5a, 0x28, 0xe9, 0xb0, 0x6a, 0xe7, 0xa8, 0x20, 0x68, 0xd6, 0x96, 0x9f, + 0xf5, 0x01, 0x38, 0xb5, 0x00, 0xbc, 0x2b, 0x10, 0x41, 0xb0, 0x93, 0xcf, 0x73, 0xaf, 0x4b, 0x3e, + 0x4f, 0x3c, 0x82, 0x4a, 0xef, 0xfb, 0x5c, 0x17, 0xc5, 0xad, 0x70, 0xe1, 0x15, 0xdd, 0x1f, 0x71, + 0xff, 0xac, 0x34, 0xf6, 0x6a, 0x89, 0xe0, 0xc3, 0xc6, 0xea, 0x66, 0x77, 0xc8, 0xaa, 0xf2, 0xd7, + 0x54, 0x52, 0xee, 0xd6, 0xe9, 0x32, 0xdb, 0x16, 0xea, 0x9b, 0xd2, 0x58, 0x2a, 0x9b, 0xf3, 0x93, + 0x8d, 0xa3, 0xf1, 0x23, 0x1a, 0x4e, 0xd5, 0x9f, 0x3d, 0x1c, 0xdd, 0xcd, 0x72, 0xff, 0x28, 0x77, + 0x22, 0xd0, 0x5b, 0xcb, 0xbf, 0x39, 0xcb, 0x22, 0x23, 0xbf, 0xa6, 0xa1, 0x1f, 0x36, 0xa7, 0x7e, + 0xc4, 0x89, 0x8b, 0xf3, 0x4e, 0x75, 0x3e, 0x88, 0x26, 0x5b, 0x34, 0x5a, 0x9a, 0xd0, 0xda, 0x66, + 0x9f, 0x6f, 0xa5, 0xa8, 0x7f, 0xa9, 0xd9, 0x1f, 0xb7, 0x42, 0xbb, 0xf7, 0x2f, 0xb4, 0xfa, 0xf3, + 0x76, 0x60, 0x47, 0xff, 0x42, 0xb3, 0x4f, 0xb7, 0x36, 0x3b, 0xfc, 0x17, 0x5a, 0xfd, 0xae, 0xd2, + 0x2a, 0x35, 0xc9, 0xdb, 0x17, 0x7e, 0x25, 0xee, 0x3a, 0x61, 0x85, 0xeb, 0x64, 0x25, 0xb5, 0x10, + 0x19, 0xd1, 0x8a, 0x0a, 0x36, 0xbc, 0xae, 0xde, 0xee, 0x5f, 0x2b, 0xed, 0x8e, 0xba, 0x35, 0xed, + 0xc2, 0x02, 0x61, 0x85, 0x38, 0x5e, 0x49, 0x2d, 0xe6, 0xae, 0x76, 0xc1, 0x1e, 0x5e, 0x8a, 0xcf, + 0x7f, 0x7b, 0xe2, 0x7b, 0x60, 0xc5, 0xc0, 0x4a, 0x83, 0x2d, 0x76, 0x23, 0x7b, 0x62, 0xff, 0xae, + 0xca, 0x2e, 0xbf, 0x2f, 0x88, 0x5e, 0xf5, 0xd7, 0xeb, 0xeb, 0xc6, 0x04, 0xac, 0xe4, 0x55, 0x59, + 0xfc, 0xe8, 0xa0, 0xfc, 0xad, 0x5a, 0xdf, 0xd0, 0x8e, 0x9c, 0x0c, 0xf6, 0x57, 0xfa, 0xdb, 0x50, + 0xaf, 0xf8, 0x93, 0x25, 0xc3, 0xab, 0x58, 0xfa, 0x34, 0x0a, 0x9a, 0x2b, 0x0d, 0x43, 0xaf, 0xf6, + 0xf7, 0x4a, 0x35, 0x41, 0xaa, 0xc3, 0x7b, 0xaa, 0xfd, 0x72, 0x17, 0x98, 0xbd, 0x81, 0x0e, 0x66, + 0xaf, 0x84, 0xea, 0x5f, 0xf5, 0xfe, 0x08, 0xca, 0x7b, 0x7a, 0x62, 0xac, 0x5c, 0x03, 0x00, 0xbc, + 0xa7, 0x46, 0x5e, 0xd4, 0x30, 0x7c, 0x5d, 0x4e, 0x0c, 0xb9, 0xc1, 0xaa, 0x97, 0x4d, 0x99, 0xc6, + 0xa4, 0xa0, 0x35, 0x45, 0x26, 0x95, 0x08, 0x70, 0x02, 0x00, 0xf5, 0x09, 0x74, 0x85, 0x80, 0x32, + 0xad, 0x4b, 0xa2, 0x1f, 0x3d, 0x33, 0xd4, 0xfa, 0x48, 0x40, 0x15, 0xde, 0xdf, 0xef, 0xb7, 0x7a, + 0xbb, 0xcd, 0x76, 0x6f, 0x24, 0x71, 0x07, 0x29, 0x82, 0x4d, 0x2f, 0xb3, 0x85, 0x1b, 0x32, 0xc7, + 0x0f, 0xdd, 0x9f, 0x1d, 0xe6, 0x66, 0x18, 0x77, 0xc0, 0xfd, 0xbb, 0xc3, 0x22, 0xe6, 0xfe, 0x00, + 0xbf, 0x99, 0xfb, 0xa3, 0xc3, 0x32, 0x97, 0x31, 0xe7, 0xcc, 0x8d, 0x99, 0x13, 0x06, 0xee, 0x7b, + 0x27, 0x64, 0xee, 0x53, 0x27, 0x9c, 0xbb, 0x39, 0xbc, 0x67, 0xee, 0xaf, 0xce, 0xdc, 0x8d, 0x9c, + 0x94, 0xb9, 0x7f, 0x75, 0xd2, 0xd0, 0xfd, 0xce, 0xc9, 0x7c, 0xf7, 0xad, 0x93, 0x31, 0xf7, 0x39, + 0xfc, 0x64, 0x6e, 0xca, 0x9c, 0x2c, 0x73, 0x7f, 0x5a, 0xaf, 0xad, 0xba, 0x1b, 0x96, 0x30, 0x2a, + 0x10, 0x5d, 0x5e, 0xe3, 0x9e, 0x47, 0xc9, 0xd4, 0x8f, 0x9c, 0xe5, 0xda, 0xf9, 0xde, 0x76, 0xfe, + 0xe6, 0xfd, 0xd9, 0xc9, 0x16, 0xd6, 0xdf, 0xdb, 0x14, 0xea, 0xe0, 0xb1, 0xba, 0xf0, 0x27, 0x56, + 0x51, 0xfc, 0x5a, 0xbd, 0x31, 0x14, 0x61, 0x99, 0xf5, 0x37, 0xdb, 0x81, 0x07, 0xdf, 0x8a, 0x31, + 0x9e, 0xd9, 0x2f, 0xd6, 0xaf, 0x35, 0x71, 0x07, 0xfe, 0x86, 0x01, 0x23, 0xa0, 0xd4, 0xdc, 0xc2, + 0xfb, 0x23, 0x72, 0x06, 0x8d, 0x63, 0x6c, 0x11, 0x0a, 0x3b, 0xa7, 0x2e, 0x03, 0x38, 0x3e, 0xe1, + 0xd1, 0xfe, 0x29, 0x90, 0xc2, 0x9f, 0x9d, 0x34, 0xb4, 0xec, 0x71, 0x11, 0xfd, 0xe6, 0xcf, 0x4e, + 0x98, 0x59, 0x78, 0x5d, 0x20, 0x3c, 0x50, 0x74, 0x2e, 0x78, 0xf0, 0x43, 0x0a, 0xe4, 0x05, 0x29, + 0x81, 0x85, 0x81, 0x08, 0x00, 0x0c, 0x2c, 0xe3, 0xe3, 0x03, 0xc6, 0x4d, 0xa1, 0x58, 0xde, 0xd0, + 0x54, 0x08, 0xfd, 0x36, 0x9b, 0xd6, 0xcc, 0x4b, 0x19, 0xbf, 0x24, 0x20, 0x9e, 0x30, 0x64, 0x17, + 0x4e, 0x29, 0x4a, 0x99, 0xcc, 0x69, 0xf7, 0x5c, 0x8c, 0x54, 0xe7, 0x64, 0x3c, 0xd6, 0xfe, 0x32, + 0x76, 0x67, 0x0e, 0xa0, 0x1f, 0x66, 0x26, 0x47, 0x44, 0x86, 0x88, 0x59, 0xdf, 0x09, 0xdc, 0xd8, + 0xf1, 0xdd, 0x74, 0xcd, 0x6f, 0x07, 0x44, 0x78, 0x59, 0x05, 0x5e, 0x26, 0xe1, 0x65, 0x12, 0x5e, + 0x98, 0x4b, 0x01, 0x30, 0xcc, 0xad, 0x65, 0x57, 0xc3, 0xa4, 0x31, 0x04, 0x3d, 0x3d, 0x04, 0x76, + 0x56, 0x4a, 0x4e, 0x6d, 0x17, 0xd8, 0xb0, 0x88, 0xfc, 0xbf, 0x94, 0x90, 0x00, 0x59, 0xa4, 0x0e, + 0x50, 0x48, 0xec, 0xc4, 0xee, 0x60, 0x88, 0x97, 0x09, 0xac, 0x56, 0x83, 0x7d, 0xfc, 0x3b, 0x41, + 0xf2, 0x86, 0xc1, 0x65, 0xb6, 0x2b, 0xc3, 0x8b, 0x51, 0x64, 0xaf, 0x28, 0x76, 0xd3, 0x83, 0xee, + 0x84, 0x07, 0x15, 0xe1, 0x75, 0x7c, 0x51, 0xc7, 0xc7, 0x3a, 0x29, 0xd4, 0xf1, 0x8b, 0x3a, 0x68, + 0x35, 0xad, 0xe5, 0x4e, 0xd7, 0x71, 0xe6, 0x84, 0x4e, 0xa3, 0xf1, 0x67, 0xe7, 0xcc, 0xb2, 0x4f, + 0xd6, 0x60, 0xa8, 0xf9, 0x9d, 0x85, 0x5d, 0xdc, 0x1d, 0x72, 0x44, 0xb0, 0x77, 0x7c, 0xef, 0x18, + 0x26, 0x11, 0xfe, 0xdf, 0xe8, 0x9d, 0x48, 0x0d, 0xc4, 0xef, 0x1c, 0x79, 0x50, 0x7c, 0x6d, 0xe3, + 0xc4, 0x74, 0x5e, 0x79, 0x7e, 0xe7, 0x4c, 0x04, 0x63, 0x55, 0x11, 0x48, 0x78, 0x24, 0xb9, 0x74, + 0xec, 0x77, 0x02, 0x4f, 0xc4, 0x67, 0xd1, 0xa3, 0x82, 0x42, 0xbb, 0x78, 0x19, 0x3c, 0xc6, 0x80, + 0xe5, 0x75, 0x60, 0x46, 0x52, 0xc4, 0xff, 0x5a, 0x84, 0x2f, 0xb1, 0x62, 0xc0, 0x59, 0xb3, 0xd9, + 0x78, 0xb3, 0x5a, 0xb5, 0x31, 0x02, 0x64, 0x0c, 0xcf, 0xdf, 0x69, 0x51, 0x3e, 0xf8, 0x8d, 0x21, + 0xf1, 0x6a, 0xd5, 0x90, 0xb1, 0xed, 0x39, 0xcd, 0x2d, 0x53, 0x37, 0x73, 0xa6, 0x6e, 0x28, 0x42, + 0x9c, 0x60, 0x14, 0xaf, 0x14, 0x60, 0x4c, 0x57, 0x2b, 0x1c, 0x9d, 0x58, 0xa6, 0x18, 0x6f, 0xfe, + 0x29, 0x46, 0x64, 0x02, 0xc2, 0x2d, 0xda, 0x23, 0x4a, 0x79, 0xd2, 0x6c, 0x3e, 0xb1, 0x32, 0x7b, + 0xb2, 0x9c, 0xba, 0xd9, 0xda, 0xb5, 0x30, 0xe6, 0xaa, 0xb8, 0x39, 0x8a, 0x02, 0xfd, 0x6d, 0xdc, + 0x94, 0x90, 0x3b, 0x4b, 0x55, 0x42, 0xc4, 0x76, 0xa1, 0xcb, 0x6d, 0xc9, 0xee, 0x85, 0x7e, 0xed, + 0xce, 0x99, 0x5d, 0xa4, 0xe3, 0xe5, 0x9d, 0x51, 0xce, 0x83, 0x2c, 0x61, 0x70, 0x21, 0xc0, 0x21, + 0x59, 0xb3, 0x14, 0x06, 0x86, 0x82, 0x66, 0x2c, 0xe9, 0xc6, 0x05, 0x11, 0x0c, 0xa7, 0x1a, 0xef, + 0x87, 0x2c, 0xf4, 0xbc, 0x33, 0x5d, 0xad, 0xd2, 0xe3, 0xbc, 0xb3, 0xc0, 0xab, 0x12, 0xf8, 0x83, + 0xd7, 0x13, 0xb1, 0x74, 0xf2, 0xce, 0x2b, 0x67, 0x13, 0xdb, 0x79, 0x27, 0x20, 0x54, 0x63, 0xa4, + 0x75, 0x6a, 0x84, 0xae, 0x98, 0x88, 0x71, 0xd9, 0x76, 0xf0, 0x46, 0x90, 0x40, 0xdd, 0x6c, 0xc4, + 0x3a, 0x31, 0x05, 0x74, 0x9c, 0x39, 0x89, 0xed, 0x5c, 0xab, 0xa0, 0xe1, 0x55, 0x18, 0x70, 0xb3, + 0x00, 0xc1, 0x68, 0xf0, 0xee, 0xd5, 0x85, 0x06, 0x1c, 0x98, 0xae, 0x76, 0xfd, 0x4e, 0xcc, 0xc3, + 0x42, 0x05, 0x36, 0xc6, 0xe4, 0x94, 0x17, 0xcc, 0x1e, 0xc7, 0x4e, 0x06, 0x16, 0x4a, 0xc7, 0x87, + 0xf5, 0x9d, 0x77, 0x8e, 0xc4, 0x5d, 0x20, 0x57, 0xcd, 0xe6, 0x35, 0x9b, 0x88, 0xe0, 0xec, 0x18, + 0xe9, 0xec, 0x9a, 0xad, 0x1f, 0x8e, 0x4f, 0x5d, 0xd3, 0x54, 0x1f, 0xa2, 0x9d, 0x11, 0x2f, 0x29, + 0x0e, 0x7d, 0x33, 0x11, 0xa2, 0xe5, 0xec, 0xf8, 0xac, 0x08, 0x24, 0x77, 0xc0, 0xb4, 0x25, 0x7b, + 0xc6, 0xef, 0xfd, 0x18, 0xfb, 0x2d, 0xef, 0x94, 0x62, 0xa3, 0xd3, 0x3a, 0xc0, 0x93, 0x93, 0x14, + 0xd9, 0xf8, 0x09, 0x0c, 0x08, 0x26, 0x69, 0x7d, 0x0a, 0x5d, 0xb0, 0x35, 0x14, 0xd2, 0x4b, 0x50, + 0x9a, 0x1a, 0x0a, 0xad, 0xd2, 0x0c, 0x57, 0x28, 0xf0, 0x8a, 0x0c, 0x68, 0x35, 0x58, 0x63, 0x74, + 0x3a, 0x75, 0x49, 0x49, 0x60, 0x8b, 0x10, 0x7a, 0x30, 0xda, 0xe3, 0xa4, 0xd5, 0x3a, 0x01, 0xa6, + 0x90, 0x76, 0xa6, 0x4e, 0xe4, 0x35, 0xe2, 0x71, 0x04, 0xd4, 0x63, 0xe1, 0x3b, 0xde, 0x9f, 0xc0, + 0x1f, 0xbc, 0x1b, 0xeb, 0x94, 0x51, 0xe4, 0x98, 0x62, 0x8a, 0x17, 0x0f, 0x7e, 0xb3, 0x2e, 0xed, + 0xe5, 0x83, 0x65, 0x0a, 0xeb, 0xa3, 0xc7, 0xd7, 0x87, 0x62, 0x0f, 0x18, 0xcd, 0x4e, 0x85, 0x07, + 0xcf, 0xbc, 0x87, 0xe6, 0x43, 0xbc, 0x4e, 0xa7, 0x73, 0x74, 0xcc, 0xf0, 0xf6, 0x9a, 0x87, 0xa6, + 0x7a, 0x13, 0x54, 0x7e, 0xca, 0x1e, 0xfc, 0xf6, 0x60, 0x19, 0xaf, 0xbd, 0xcb, 0x07, 0xcb, 0x6c, + 0x62, 0x1e, 0x9b, 0xae, 0xd9, 0x31, 0xd7, 0xd8, 0xf6, 0x91, 0xc6, 0x42, 0xd6, 0x94, 0x79, 0x62, + 0xe2, 0x85, 0x4e, 0xa7, 0x6b, 0x5b, 0xdc, 0x2d, 0xe2, 0xe0, 0xe5, 0x22, 0x0a, 0x0c, 0x8e, 0xda, + 0xc9, 0x29, 0x8e, 0xaf, 0x0c, 0x1b, 0x8f, 0x1d, 0x68, 0x42, 0x4f, 0x66, 0x2b, 0xd7, 0x2b, 0xd3, + 0xbc, 0xad, 0xc5, 0xf8, 0xee, 0x1c, 0x90, 0x04, 0x13, 0xc8, 0xdd, 0xd8, 0x00, 0xee, 0xb4, 0x04, + 0xd0, 0xa7, 0x78, 0x67, 0xe7, 0x5b, 0x23, 0x4b, 0x16, 0xe9, 0x8c, 0x7d, 0x7c, 0xff, 0xca, 0xc3, + 0xe2, 0xe9, 0x7a, 0x32, 0xbb, 0x9d, 0x45, 0xec, 0x14, 0x89, 0x1a, 0x28, 0x02, 0x05, 0x16, 0x4e, + 0xf6, 0xce, 0xa3, 0x62, 0xba, 0x31, 0xb4, 0x67, 0x66, 0xaf, 0x1f, 0xed, 0xd0, 0x84, 0xc7, 0x38, + 0xdd, 0x8d, 0x08, 0xe3, 0x1a, 0x66, 0xc8, 0x50, 0xa0, 0xf0, 0x58, 0xbb, 0x11, 0x00, 0xa1, 0x49, + 0xd6, 0xf2, 0x5e, 0x00, 0x98, 0x41, 0x20, 0x42, 0x9e, 0xbd, 0x84, 0xe9, 0x41, 0x28, 0x17, 0xbc, + 0xc8, 0x5a, 0x15, 0xc9, 0xa0, 0x88, 0x48, 0xb4, 0x44, 0x7d, 0xfb, 0x14, 0x2f, 0x51, 0x91, 0xe1, + 0xf7, 0x81, 0x92, 0x32, 0xf2, 0x26, 0x12, 0x2f, 0x0b, 0x26, 0x40, 0x74, 0x97, 0xde, 0x72, 0x91, + 0x46, 0x2e, 0x50, 0x9f, 0x23, 0x22, 0xe7, 0xb9, 0x53, 0xb6, 0x76, 0x70, 0xb1, 0x5e, 0xc2, 0xe2, + 0x5c, 0xd0, 0x60, 0xf8, 0x50, 0x8a, 0xf8, 0x7e, 0x9d, 0xdf, 0xd2, 0x63, 0x41, 0xb4, 0xc0, 0xaa, + 0x01, 0x9d, 0x48, 0xb7, 0x20, 0x13, 0xac, 0x05, 0x70, 0xfa, 0x11, 0x95, 0x36, 0xb1, 0x1c, 0xe0, + 0xeb, 0x4c, 0xdc, 0x2a, 0x83, 0xf8, 0x98, 0x61, 0xb4, 0xb8, 0x5c, 0x8d, 0xf6, 0x53, 0xac, 0x0d, + 0x48, 0x8e, 0x22, 0xa7, 0x51, 0x60, 0xe8, 0x24, 0x24, 0x42, 0x98, 0xb1, 0x4c, 0xe7, 0x55, 0x9d, + 0x28, 0xb6, 0xcb, 0x93, 0x47, 0xa2, 0x07, 0xb9, 0xb5, 0xb6, 0xac, 0x78, 0xe0, 0x47, 0xc0, 0x48, + 0x65, 0xde, 0xa4, 0x54, 0xf9, 0xcd, 0x06, 0xf6, 0xf6, 0x29, 0x3e, 0xd5, 0x2e, 0x56, 0xc0, 0x03, + 0xb7, 0xda, 0x55, 0x29, 0x69, 0x4b, 0x86, 0x36, 0x06, 0x41, 0x1a, 0x6a, 0xf7, 0x41, 0xc5, 0x26, + 0xc6, 0x72, 0x4c, 0x3c, 0x62, 0xfb, 0xd9, 0x04, 0x44, 0xb6, 0x0c, 0x81, 0xbc, 0x80, 0x09, 0xc5, + 0x81, 0xcb, 0x2b, 0xb0, 0x42, 0x15, 0x02, 0x38, 0x41, 0x2e, 0x97, 0xf2, 0x3b, 0xdc, 0x00, 0x07, + 0x09, 0xdd, 0xbe, 0x31, 0x85, 0x66, 0xf5, 0xc0, 0x9b, 0x2f, 0x00, 0xc9, 0xf3, 0x4a, 0xda, 0x11, + 0x9e, 0x98, 0x38, 0x98, 0x01, 0xba, 0xa6, 0x74, 0x5f, 0xcf, 0x9c, 0x9e, 0xe7, 0xf4, 0x4c, 0x00, + 0x4c, 0xe1, 0x95, 0x16, 0xfd, 0x7c, 0xb5, 0x9a, 0x1f, 0x4e, 0x41, 0x2e, 0x05, 0xd0, 0x90, 0x33, + 0x15, 0xd9, 0x73, 0xc8, 0x0e, 0xa0, 0x15, 0x67, 0x2e, 0xe4, 0x14, 0x94, 0x9f, 0x1e, 0xce, 0x55, + 0x29, 0x1b, 0x80, 0x96, 0xf0, 0x0b, 0xc9, 0x33, 0xe5, 0x73, 0xf3, 0x82, 0xb5, 0x10, 0x64, 0x98, + 0xac, 0xa9, 0x07, 0xec, 0xf7, 0x06, 0x03, 0x97, 0x03, 0x87, 0x14, 0x74, 0x24, 0xf8, 0xb2, 0x0c, + 0x77, 0x86, 0x31, 0x1b, 0x43, 0xf8, 0x37, 0x03, 0xa6, 0x4d, 0x1f, 0x97, 0x57, 0x2e, 0x96, 0x81, + 0x0e, 0x6f, 0x98, 0x8c, 0x54, 0xff, 0x99, 0xdd, 0x66, 0x56, 0xa2, 0x42, 0x5d, 0x62, 0xc0, 0x6c, + 0x10, 0x38, 0x32, 0x4c, 0x1a, 0xea, 0x3c, 0xe7, 0x8c, 0xb7, 0x07, 0xcd, 0x35, 0x9b, 0x18, 0x75, + 0x73, 0x0a, 0xe2, 0xfd, 0x9c, 0x42, 0xb6, 0x09, 0x7d, 0xee, 0xcc, 0x93, 0x95, 0x41, 0x80, 0xce, + 0x50, 0x80, 0x34, 0xe2, 0xc9, 0xac, 0x33, 0x75, 0x67, 0x9d, 0x85, 0x6a, 0x0a, 0x9e, 0xd7, 0xca, + 0x41, 0x36, 0xe3, 0x44, 0x27, 0x6a, 0xc1, 0x1b, 0x88, 0x40, 0xa4, 0xaf, 0x33, 0x40, 0x7a, 0x2d, + 0x74, 0x67, 0xda, 0x4e, 0x17, 0xbf, 0x19, 0x56, 0x84, 0xa4, 0xad, 0x86, 0xbe, 0xc6, 0x60, 0xaf, + 0xfc, 0xb2, 0x3b, 0xba, 0x14, 0xf5, 0x65, 0x10, 0xb1, 0x67, 0x20, 0xeb, 0xa6, 0xfe, 0xec, 0xf3, + 0x64, 0x5b, 0x86, 0xab, 0x67, 0x3c, 0x89, 0xc3, 0x4b, 0x8a, 0x7c, 0xf8, 0x1d, 0x5e, 0xa7, 0x30, + 0x8e, 0x8b, 0x1b, 0xb9, 0x8d, 0xcc, 0x2a, 0xae, 0x2b, 0xea, 0x75, 0xbb, 0x8f, 0x68, 0x3f, 0x38, + 0x3c, 0x54, 0x9a, 0x46, 0x35, 0x3c, 0xa2, 0xa0, 0xb8, 0xd0, 0x09, 0x5b, 0x78, 0x2e, 0xae, 0x90, + 0x3e, 0x3c, 0xa6, 0x1c, 0xe0, 0x15, 0xaf, 0x1c, 0xe0, 0x77, 0x56, 0x16, 0x57, 0x0e, 0xb0, 0xce, + 0xd4, 0x5e, 0xe7, 0xad, 0x96, 0x13, 0x83, 0xc2, 0x51, 0xba, 0xf3, 0xfe, 0x89, 0x16, 0x9a, 0xf6, + 0x14, 0x43, 0x7e, 0xaa, 0x50, 0xe6, 0x3b, 0x0f, 0x77, 0xce, 0x1d, 0xf3, 0xd3, 0xa7, 0x87, 0xb0, + 0xac, 0x1e, 0x9e, 0xca, 0xab, 0x01, 0x99, 0x67, 0x56, 0x59, 0xa3, 0xe9, 0x1c, 0x55, 0x52, 0xc5, + 0x55, 0x35, 0x3c, 0xf3, 0x2d, 0xf3, 0x76, 0xfe, 0x61, 0x61, 0x30, 0xf4, 0x15, 0x24, 0x03, 0xf4, + 0x84, 0x09, 0xfb, 0xd3, 0x8e, 0x75, 0xd3, 0xb6, 0x27, 0xc5, 0x75, 0x09, 0xd6, 0x78, 0xf5, 0xc0, + 0xde, 0x71, 0x5e, 0x51, 0xf1, 0x72, 0xc9, 0x6b, 0x3f, 0xbb, 0x14, 0xd9, 0xcf, 0xb6, 0xb5, 0x86, + 0x31, 0xda, 0x44, 0x99, 0xdf, 0xb7, 0x95, 0x99, 0x81, 0x7e, 0xcf, 0x8b, 0x7c, 0x84, 0x22, 0xc0, + 0x13, 0x3f, 0x59, 0x9f, 0xb2, 0x47, 0xd6, 0xc4, 0xb5, 0x8e, 0xcd, 0x87, 0x27, 0xb6, 0x05, 0x4f, + 0x9f, 0x3e, 0x75, 0x56, 0xc7, 0xff, 0xf8, 0x14, 0x7f, 0xfa, 0x84, 0x29, 0x2d, 0xfb, 0x53, 0x6f, + 0xa5, 0x25, 0x67, 0x8e, 0xf9, 0xd0, 0xb2, 0x3f, 0x7d, 0xc2, 0x1c, 0x1b, 0xaa, 0x7e, 0xb2, 0x77, + 0xce, 0x49, 0xa5, 0x78, 0xcd, 0xd0, 0xfe, 0xf8, 0x0d, 0x7d, 0x0c, 0x15, 0x55, 0xea, 0x25, 0x93, + 0xfb, 0x1d, 0x30, 0xb1, 0x97, 0x40, 0xf6, 0x9a, 0x9e, 0x57, 0x0e, 0x6d, 0xf7, 0x26, 0x31, 0x54, + 0x0e, 0x5e, 0x04, 0x8d, 0x51, 0x7e, 0xd7, 0x18, 0x7f, 0x15, 0x94, 0x06, 0xbc, 0x5a, 0x48, 0x32, + 0x2e, 0x2d, 0x9a, 0x37, 0x34, 0xd9, 0x6a, 0xfd, 0xc6, 0x0e, 0x91, 0x14, 0xb4, 0xeb, 0xf9, 0xb4, + 0x2b, 0x3e, 0x5e, 0x33, 0xce, 0x9c, 0x19, 0x8f, 0x9d, 0x1d, 0xcb, 0xe8, 0x87, 0x31, 0xf1, 0x5f, + 0xbe, 0x7b, 0x21, 0xd4, 0x57, 0xce, 0x53, 0x39, 0xfb, 0x54, 0x81, 0x62, 0x31, 0x8a, 0x3e, 0xdd, + 0x73, 0xe0, 0x69, 0xc1, 0x62, 0xe9, 0x86, 0x59, 0x1d, 0x3c, 0xa3, 0x0d, 0x86, 0x20, 0x83, 0xbe, + 0xf3, 0xeb, 0x24, 0xfd, 0x6c, 0x44, 0xc9, 0x39, 0x0d, 0x20, 0x60, 0xb9, 0x1f, 0x46, 0x59, 0x07, + 0xf8, 0x70, 0x4b, 0x35, 0xe4, 0xe4, 0x6b, 0x71, 0xad, 0xfc, 0xf2, 0x37, 0xd6, 0x6e, 0x3b, 0xaf, + 0x8b, 0x7b, 0xed, 0xe0, 0x31, 0xbb, 0x08, 0xcf, 0x72, 0x0b, 0xb4, 0xfd, 0x35, 0x05, 0x16, 0xec, + 0x24, 0x9f, 0xab, 0xf1, 0xff, 0x32, 0xbc, 0xfc, 0x32, 0x5f, 0x64, 0x6b, 0xa3, 0x78, 0xc6, 0xfb, + 0x2c, 0xf8, 0x3b, 0x4c, 0xaa, 0x04, 0xea, 0x54, 0xb1, 0x86, 0xac, 0x1a, 0xdb, 0xf8, 0x3d, 0xab, + 0xde, 0x61, 0xc6, 0x71, 0xa0, 0x26, 0x0b, 0x83, 0xd5, 0xd1, 0x85, 0x05, 0x2c, 0xcd, 0x30, 0xc0, + 0xac, 0x65, 0x8a, 0xab, 0x08, 0xda, 0x68, 0xf7, 0xf2, 0x8b, 0x07, 0xdf, 0x8a, 0x7b, 0x33, 0x33, + 0x79, 0x4f, 0x22, 0x18, 0x04, 0x31, 0x02, 0x00, 0xe6, 0x9e, 0x40, 0x72, 0x07, 0x89, 0x10, 0xcd, + 0x38, 0xd7, 0xfc, 0x3d, 0x33, 0x49, 0xdf, 0x7e, 0x55, 0xd4, 0x52, 0xe1, 0xb1, 0x29, 0x4c, 0x2c, + 0x68, 0x53, 0x02, 0x8a, 0x9f, 0xd9, 0xf4, 0x49, 0x96, 0xb1, 0xcb, 0x69, 0x74, 0xdb, 0xc1, 0x30, + 0x9b, 0x61, 0xc4, 0x8e, 0xf2, 0x94, 0xf9, 0x97, 0xb0, 0xa6, 0x30, 0xbc, 0xbe, 0x0a, 0x91, 0xcf, + 0x77, 0xe0, 0x4d, 0x73, 0x5c, 0x89, 0x8d, 0xaa, 0x37, 0xc0, 0xaf, 0x29, 0x90, 0x57, 0x6a, 0xc1, + 0xc4, 0xda, 0xa9, 0x92, 0xf3, 0xc6, 0x23, 0xd4, 0x31, 0xe0, 0x39, 0xc7, 0x3b, 0xa5, 0xf8, 0xb5, + 0x56, 0xc4, 0x03, 0x78, 0x64, 0x44, 0x10, 0xd2, 0x30, 0x73, 0xc0, 0x69, 0xbc, 0xd3, 0x52, 0xaa, + 0x2b, 0x6a, 0xb4, 0x5a, 0x6b, 0xe7, 0x74, 0x8c, 0x40, 0x60, 0x93, 0x82, 0x8b, 0x89, 0x2b, 0x86, + 0x0c, 0xcf, 0xd8, 0x1c, 0x8c, 0x88, 0x44, 0x18, 0xfa, 0x39, 0x70, 0x30, 0x4d, 0xd3, 0xb8, 0x3e, + 0xe6, 0xc1, 0x86, 0x4f, 0x1c, 0xd4, 0xdf, 0x42, 0x0c, 0xfe, 0x09, 0x1d, 0x7f, 0xc1, 0xa8, 0xb8, + 0xd2, 0xa7, 0x46, 0x25, 0x0a, 0xdf, 0x88, 0xf1, 0x78, 0x0a, 0x1a, 0x6a, 0x9f, 0xee, 0xdc, 0x81, + 0x4e, 0x68, 0x50, 0x58, 0x5c, 0xaa, 0x8c, 0xb2, 0x06, 0x8c, 0x07, 0xf1, 0x61, 0xaa, 0xb2, 0xa6, + 0x41, 0x3a, 0xc4, 0x78, 0x63, 0x7a, 0x53, 0x9c, 0x51, 0xe4, 0x4a, 0x26, 0x6d, 0xf6, 0x3e, 0xbb, + 0x83, 0x12, 0x4c, 0xd1, 0x8b, 0xf0, 0xae, 0x1b, 0x66, 0xab, 0x8e, 0x36, 0x92, 0x98, 0x53, 0xc7, + 0xef, 0x77, 0xb4, 0x74, 0xca, 0x57, 0x2b, 0x2e, 0xf0, 0x67, 0x47, 0x47, 0x47, 0x78, 0x1f, 0xcf, + 0xd1, 0x05, 0x03, 0xda, 0xb4, 0xc7, 0x99, 0xe4, 0xda, 0x47, 0x68, 0xe0, 0x3e, 0x58, 0x56, 0xc2, + 0x1e, 0x5b, 0xe5, 0x2e, 0x6d, 0xc5, 0xe3, 0x3f, 0x32, 0x07, 0xad, 0x2c, 0xba, 0x6e, 0x81, 0x2e, + 0xbf, 0x3a, 0x85, 0xae, 0x2c, 0xd4, 0xaa, 0x1e, 0x2c, 0x3f, 0x5a, 0x20, 0x74, 0x33, 0xb4, 0x5e, + 0xf0, 0xdd, 0x3e, 0xc5, 0xc0, 0xac, 0xe3, 0xca, 0x60, 0xb2, 0xf1, 0x29, 0xc2, 0x4f, 0x97, 0x12, + 0x8d, 0x2b, 0x91, 0xa5, 0x8b, 0xc8, 0xc9, 0xcf, 0xc4, 0xd2, 0xc1, 0xeb, 0x99, 0xe5, 0xf5, 0x65, + 0xc5, 0xbd, 0x52, 0x05, 0x8f, 0x13, 0xd7, 0x38, 0x83, 0x62, 0xbc, 0x80, 0x69, 0x9c, 0xe2, 0xed, + 0x4c, 0xe9, 0x15, 0xd4, 0xbf, 0x0e, 0xf3, 0x0b, 0xc3, 0x37, 0xae, 0xfc, 0x08, 0x34, 0x93, 0xd7, + 0x2f, 0x5f, 0xbf, 0xa0, 0x40, 0x9f, 0x46, 0x14, 0x7e, 0x66, 0x86, 0xc6, 0xe0, 0xb5, 0xab, 0x77, + 0x80, 0x5d, 0x6a, 0x7b, 0x30, 0xc8, 0x08, 0x1b, 0x7c, 0x07, 0xaa, 0xb1, 0x11, 0x47, 0x78, 0xfb, + 0x7d, 0xad, 0xe1, 0xc4, 0xbc, 0xf3, 0x52, 0x58, 0x77, 0x4b, 0x36, 0xde, 0xde, 0x4a, 0x11, 0x7d, + 0xc7, 0x5f, 0xd3, 0xd5, 0x1d, 0x77, 0xd3, 0x42, 0x4f, 0x5b, 0xaf, 0x89, 0xfd, 0x8e, 0x3a, 0xfa, + 0xfa, 0x91, 0x6d, 0xbb, 0x23, 0xb7, 0xd2, 0x97, 0xb8, 0xa6, 0x16, 0x3a, 0xfa, 0x6b, 0xf9, 0xf6, + 0xf9, 0x0f, 0xa5, 0xf8, 0xfe, 0xa0, 0x6b, 0x4b, 0x8f, 0x6e, 0xd9, 0x8b, 0x51, 0xbc, 0x79, 0x5a, + 0x0e, 0x06, 0x5b, 0x06, 0x45, 0x19, 0xb4, 0x38, 0x96, 0xbe, 0x4b, 0x60, 0xfe, 0x78, 0xd9, 0x72, + 0x92, 0x57, 0x2d, 0x63, 0x3b, 0x18, 0x64, 0xb4, 0xad, 0x05, 0x48, 0xe7, 0x81, 0x97, 0x67, 0x69, + 0x92, 0x65, 0x6f, 0x29, 0x48, 0xfa, 0x84, 0xae, 0x45, 0x92, 0xd9, 0x9e, 0x29, 0x2e, 0x8f, 0x86, + 0x41, 0xf9, 0x71, 0x12, 0xdf, 0x5e, 0x26, 0x8b, 0xfb, 0xeb, 0x80, 0xe8, 0xcc, 0x4d, 0xb7, 0x92, + 0xa8, 0x07, 0x62, 0x07, 0x01, 0x46, 0x77, 0xeb, 0xb1, 0x8d, 0x9b, 0xb7, 0x6c, 0xe7, 0x0f, 0xdc, + 0xa1, 0x2a, 0xf6, 0xa0, 0xd0, 0xc3, 0xdb, 0x6d, 0x78, 0xed, 0xf6, 0x1f, 0x6c, 0xb5, 0xba, 0x00, + 0x1d, 0x96, 0x62, 0x0a, 0xaf, 0x56, 0x6a, 0x6a, 0xf0, 0x3e, 0x2d, 0x14, 0xb8, 0x14, 0x17, 0x99, + 0x82, 0x64, 0xf3, 0x27, 0xf3, 0xf9, 0xdb, 0xd7, 0x62, 0xd9, 0xe0, 0x65, 0xe3, 0x2c, 0xc0, 0x3b, + 0xd3, 0x73, 0xd0, 0xea, 0xb7, 0x47, 0x71, 0xde, 0xa8, 0xe1, 0x14, 0x2e, 0x32, 0x15, 0x06, 0xf9, + 0x07, 0xba, 0xe8, 0x8c, 0xdf, 0x64, 0x56, 0x02, 0xf5, 0x47, 0x05, 0xea, 0xf3, 0xaf, 0x05, 0x75, + 0x23, 0x88, 0xb3, 0xf2, 0xf6, 0xfe, 0xcc, 0x3c, 0xee, 0xe8, 0x01, 0xb6, 0x73, 0x14, 0x4e, 0x61, + 0xb9, 0x9c, 0xe3, 0x95, 0xf0, 0xfc, 0x12, 0x25, 0x8c, 0xdc, 0xdd, 0x6c, 0xfe, 0x0c, 0x74, 0xa4, + 0x25, 0xd8, 0xce, 0x53, 0x1e, 0x4d, 0xde, 0xc6, 0x7a, 0x78, 0x79, 0x31, 0x5d, 0x5f, 0xd8, 0x60, + 0x78, 0x2b, 0x10, 0x28, 0x4f, 0xac, 0xb8, 0x98, 0x08, 0xb2, 0xb0, 0x32, 0x5e, 0x82, 0x8b, 0x3e, + 0x2d, 0xba, 0xd4, 0xb7, 0x7a, 0xd9, 0x3c, 0x05, 0xdc, 0x86, 0x02, 0x0d, 0x8b, 0xf1, 0xbb, 0xe8, + 0x34, 0x73, 0xf0, 0x3b, 0x1e, 0x67, 0xfe, 0x39, 0xc3, 0xb3, 0x96, 0x14, 0x2b, 0x9d, 0x5b, 0x95, + 0xfc, 0x93, 0x5d, 0xec, 0xcf, 0x16, 0x61, 0xe1, 0x85, 0x2a, 0x8e, 0xf7, 0x2d, 0xaf, 0xaf, 0x30, + 0xb2, 0xf5, 0x2d, 0xf3, 0x6e, 0x59, 0xd5, 0x0d, 0xc9, 0x63, 0xc1, 0x63, 0xbd, 0x09, 0x0f, 0x79, + 0x5c, 0xa8, 0x14, 0x98, 0xe8, 0xd0, 0x8a, 0x01, 0xde, 0x4b, 0x8a, 0xaa, 0xed, 0x6a, 0x41, 0xea, + 0xb5, 0x41, 0xd1, 0x95, 0x98, 0xe9, 0x6c, 0xb5, 0xe2, 0x21, 0xe5, 0xed, 0x8e, 0x50, 0xc7, 0x2a, + 0xb7, 0xde, 0xe7, 0x20, 0x36, 0xf4, 0xdb, 0xfc, 0x80, 0xed, 0xe7, 0xfe, 0x0d, 0xb1, 0x5e, 0xf2, + 0x1d, 0x6a, 0xd7, 0xf8, 0x15, 0x5a, 0x1b, 0x75, 0x26, 0xae, 0xd7, 0xa6, 0x6b, 0x2d, 0xd1, 0x12, + 0x17, 0x4a, 0xd9, 0x1a, 0x5a, 0x73, 0x91, 0x19, 0xf3, 0xde, 0x35, 0x88, 0xd6, 0x78, 0xb9, 0xdf, + 0x11, 0x5d, 0x80, 0xa7, 0x5f, 0x63, 0xa0, 0x5d, 0xf5, 0xf1, 0xd7, 0x0a, 0x22, 0x25, 0x1e, 0x75, + 0x5f, 0x29, 0xe8, 0x2b, 0xe2, 0x4a, 0xd2, 0xea, 0x24, 0x11, 0x02, 0x31, 0x08, 0x3a, 0xd6, 0x07, + 0x4b, 0xeb, 0x0f, 0xf8, 0x33, 0x4e, 0xf1, 0x15, 0xcd, 0x95, 0x66, 0xf3, 0x0f, 0xbc, 0xf7, 0x56, + 0x3a, 0xa2, 0x1e, 0x08, 0x64, 0x22, 0x7e, 0x08, 0x9f, 0x8e, 0xa4, 0x0c, 0x0d, 0x62, 0xa7, 0x11, + 0xa2, 0xbd, 0xfa, 0x86, 0x95, 0xee, 0xc1, 0xc3, 0x22, 0x5b, 0x49, 0x98, 0x07, 0x62, 0x2f, 0xf0, + 0x7d, 0x64, 0x23, 0x08, 0x16, 0x2c, 0xf1, 0x8c, 0xb7, 0xf1, 0x23, 0x5e, 0x1c, 0x00, 0xd0, 0x88, + 0xd7, 0x1f, 0x98, 0x24, 0xf1, 0x3f, 0x19, 0x32, 0xbf, 0x62, 0x27, 0x8f, 0x6f, 0xdb, 0x88, 0x6b, + 0xb7, 0xc5, 0xfd, 0x87, 0x7f, 0xe2, 0xf5, 0xed, 0xe8, 0x19, 0x40, 0x2f, 0x6a, 0xf1, 0xe2, 0xa1, + 0x16, 0xca, 0x3d, 0x06, 0x82, 0x36, 0x00, 0xab, 0x96, 0xfd, 0xcd, 0x81, 0x0c, 0x45, 0x5d, 0x89, + 0x6b, 0x5d, 0x84, 0xa0, 0x3f, 0x34, 0x96, 0xdf, 0x18, 0xf4, 0xbf, 0xe2, 0x02, 0x37, 0x95, 0x04, + 0x89, 0x20, 0x89, 0x19, 0xc6, 0xb9, 0x36, 0x2f, 0xf2, 0x7c, 0x9e, 0xb9, 0x3b, 0x3b, 0x8b, 0x78, + 0xfe, 0xf9, 0x1c, 0x75, 0xc9, 0x1d, 0xca, 0xfa, 0x8f, 0x6e, 0xa7, 0xb7, 0x3b, 0xea, 0xf4, 0x76, + 0xa6, 0x8b, 0x30, 0x0a, 0x78, 0x9a, 0xd0, 0xee, 0x80, 0x3c, 0x4d, 0xa7, 0xd2, 0xd2, 0x0e, 0x30, + 0x1b, 0x18, 0xec, 0xce, 0x97, 0xb4, 0xc8, 0x6e, 0x7c, 0x8c, 0x0b, 0x9f, 0x81, 0x3d, 0x76, 0xb9, + 0x63, 0x8a, 0x86, 0xd6, 0xf4, 0x77, 0x6d, 0x68, 0x23, 0xdb, 0x41, 0xe5, 0x1a, 0xfe, 0x4e, 0x93, + 0xe0, 0xd6, 0x10, 0x77, 0x85, 0x99, 0x49, 0x8c, 0xac, 0xcb, 0xb2, 0x61, 0x80, 0x07, 0x41, 0x78, + 0x65, 0xd0, 0x8d, 0x04, 0x9e, 0x0c, 0xd6, 0x0f, 0x89, 0x17, 0xbd, 0xc3, 0x6f, 0x8e, 0x72, 0x3f, + 0x05, 0x45, 0xc1, 0x98, 0xde, 0x82, 0xbe, 0xa0, 0xae, 0xe1, 0x32, 0xfe, 0xd7, 0x7f, 0xff, 0xaf, + 0xff, 0x03, 0x5a, 0xed, 0x61, 0xa9, 0xfe, 0x21, 0x55, 0x0f, 0x03, 0x94, 0x00, 0x7c, 0x91, 0x60, + 0x68, 0x7e, 0xf3, 0xf0, 0x60, 0x07, 0xd2, 0xe1, 0x17, 0x4a, 0x18, 0x07, 0x61, 0x3c, 0x5f, 0xe4, + 0xc6, 0x37, 0x1c, 0xb9, 0x40, 0x8c, 0x39, 0x28, 0x61, 0xa8, 0x64, 0x2c, 0xe0, 0xf5, 0xc9, 0x7c, + 0x6e, 0x52, 0xfd, 0x2b, 0x7a, 0x4a, 0x40, 0x8e, 0x84, 0xb3, 0xcf, 0x20, 0x07, 0x58, 0xfe, 0x53, + 0xc8, 0xae, 0x2d, 0xbc, 0x9d, 0x82, 0xc0, 0xbc, 0xab, 0x11, 0x80, 0x14, 0xb8, 0x21, 0x6f, 0x46, + 0x3c, 0xff, 0x73, 0x0d, 0x7d, 0x04, 0x45, 0x48, 0xb4, 0xc3, 0x1f, 0xff, 0x49, 0x78, 0x80, 0x4b, + 0xb3, 0x4b, 0x09, 0xd0, 0x6d, 0xf6, 0xcf, 0xb6, 0x03, 0x2a, 0x84, 0x44, 0x0e, 0x3e, 0x6d, 0x6f, + 0x04, 0x56, 0x5b, 0x7c, 0x68, 0xac, 0x70, 0xde, 0xe9, 0xe9, 0x1b, 0xd1, 0x6c, 0x3d, 0x74, 0xfe, + 0x95, 0x40, 0xd6, 0x94, 0x3f, 0x16, 0xed, 0xc2, 0x2b, 0x4c, 0x33, 0x8b, 0x2a, 0x2d, 0x7f, 0xa3, + 0x35, 0xfd, 0xe1, 0x82, 0x5d, 0x62, 0x20, 0x78, 0xd2, 0x72, 0x0c, 0xd4, 0xde, 0x3d, 0x20, 0x5e, + 0x48, 0x6b, 0xf3, 0x24, 0xde, 0x72, 0x39, 0xe5, 0x1b, 0xe8, 0x81, 0x24, 0x16, 0x81, 0x4e, 0x2d, + 0x14, 0x3d, 0xf0, 0x00, 0xf2, 0x12, 0x38, 0x20, 0xa2, 0x14, 0xc8, 0xd0, 0x3c, 0x14, 0xd4, 0x77, + 0xb0, 0xc3, 0xf3, 0x8b, 0x82, 0xdf, 0x88, 0x92, 0xd7, 0x11, 0x88, 0xde, 0xc3, 0x9f, 0x5f, 0xbd, + 0x78, 0xbe, 0x59, 0x46, 0x14, 0xf1, 0xa3, 0xbc, 0x67, 0x1e, 0x3e, 0x41, 0x8f, 0x67, 0x0c, 0x9a, + 0xeb, 0x15, 0xeb, 0x6d, 0x6f, 0x0e, 0xca, 0xf6, 0x4b, 0x65, 0xfb, 0x5b, 0x9b, 0x8d, 0xc2, 0xf3, + 0x8b, 0xdc, 0x3c, 0x7c, 0x85, 0x7f, 0xb6, 0x37, 0x18, 0xf8, 0xe9, 0x67, 0xf3, 0xf0, 0x39, 0xfc, + 0x6e, 0x6d, 0x68, 0x0a, 0xbf, 0xe6, 0xe1, 0x53, 0xf8, 0xdd, 0xde, 0xcc, 0x1c, 0x54, 0x5f, 0xf3, + 0xf0, 0x1d, 0xfc, 0x6e, 0x6d, 0x06, 0x26, 0x66, 0x06, 0xed, 0x1c, 0xe1, 0x9f, 0xed, 0x0d, 0xc5, + 0xb7, 0x7e, 0x6c, 0x1e, 0xbe, 0x81, 0x5f, 0xad, 0xcc, 0x0e, 0x9f, 0x22, 0x7c, 0xc2, 0x05, 0x6b, + 0xa8, 0xe5, 0x7c, 0x19, 0x44, 0xa8, 0xe4, 0xf8, 0x21, 0xf0, 0x7a, 0xc9, 0x25, 0xbe, 0x51, 0x19, + 0xd1, 0xe2, 0x32, 0xee, 0x9a, 0x8a, 0x6d, 0xc8, 0x24, 0x73, 0x4b, 0x3b, 0x98, 0xd7, 0x03, 0x32, + 0xf8, 0x9a, 0xf2, 0xfd, 0x7b, 0x9b, 0x2f, 0x83, 0x33, 0xb8, 0xb3, 0x7c, 0xa5, 0x17, 0x10, 0x29, + 0x71, 0x18, 0x03, 0xf9, 0x34, 0xbf, 0xdd, 0x7f, 0xbc, 0xdf, 0x1d, 0xf3, 0xfc, 0x6f, 0x34, 0x30, + 0x92, 0xc0, 0x8f, 0x70, 0x8d, 0x99, 0x1a, 0x6f, 0xf4, 0x23, 0xc9, 0xd8, 0x8c, 0x83, 0xb9, 0x41, + 0xf7, 0xb4, 0x62, 0x53, 0x51, 0x92, 0xba, 0xe7, 0x29, 0xbb, 0x35, 0xa1, 0x01, 0x6b, 0x66, 0x1b, + 0xfd, 0x6e, 0x7f, 0x58, 0xe2, 0x98, 0xaf, 0xc2, 0x19, 0x8b, 0x33, 0xb0, 0xaf, 0x70, 0x5b, 0x3f, + 0x35, 0xbe, 0x7f, 0xf7, 0xaa, 0x7d, 0x35, 0x38, 0xd8, 0x99, 0xeb, 0x00, 0xf9, 0x31, 0x98, 0x54, + 0xaf, 0x59, 0xbc, 0x00, 0x34, 0x89, 0x96, 0xe7, 0x49, 0x16, 0xe2, 0x34, 0xb9, 0xfe, 0x14, 0xf4, + 0x11, 0x90, 0xe1, 0x63, 0x71, 0x29, 0xac, 0x4b, 0x77, 0xc2, 0x22, 0x10, 0x87, 0x07, 0x7c, 0x6d, + 0x6b, 0x6d, 0x3c, 0xa5, 0x84, 0x1e, 0x42, 0xca, 0xf3, 0x0e, 0xbf, 0xe1, 0x5d, 0x6d, 0x2f, 0xdc, + 0xd7, 0x0a, 0xdf, 0x57, 0x76, 0x00, 0xa3, 0x7c, 0x12, 0x04, 0xc6, 0x8b, 0xb3, 0x33, 0xa0, 0x9b, + 0x4a, 0x35, 0xe4, 0x10, 0x5a, 0x8d, 0xe7, 0x7e, 0xee, 0x9b, 0xc6, 0x45, 0x18, 0x80, 0x7a, 0xef, + 0xd1, 0x75, 0xa6, 0xd8, 0x11, 0x67, 0x23, 0x02, 0x8f, 0x00, 0x1b, 0x0a, 0x26, 0x92, 0x53, 0xf9, + 0x65, 0x74, 0xf8, 0xbf, 0x01, 0x4e, 0xb8, 0x96, 0xd0, 0xf3, 0xf7, 0x00, 0x00 }; diff --git a/src/testOutput.txt b/src/testOutput.txt index c9f75685..2097ab43 100644 --- a/src/testOutput.txt +++ b/src/testOutput.txt @@ -21,7 +21,7 @@ initVar create new range var: fx->Offset Y setValue changed Offset Y ->128 initVar create new range var: fx->Legs setValue changed Legs ->4 -parentVar {"details":{"id":"fx","type":"select","ro":false,"o":-7,"value":13,"stage":true,"uiFun":4,"chFun":1,"n":[{"id":"pal","type":"select","ro":false,"o":-8,"uiFun":5,"chFun":2,"value":4,"stage":true},{"id":"speed","type":"range","ro":false,"o":-9,"min":1,"max":255,"value":128},{"id":"Offset X","type":"range","ro":false,"o":-10,"max":255,"value":128},{"id":"Offset Y","type":"range","ro":false,"o":-11,"max":255,"value":128},{"id":"Legs","type":"range","ro":false,"o":-12,"min":1,"max":8,"value":4}]}} +parentVar {"details":{"id":"fx","type":"select","ro":false,"o":-7,"value":13,"stage":true,"fun":4,"chFun":1,"n":[{"id":"pal","type":"select","ro":false,"o":-8,"fun":5,"chFun":2,"value":4,"stage":true},{"id":"speed","type":"range","ro":false,"o":-9,"min":1,"max":255,"value":128},{"id":"Offset X","type":"range","ro":false,"o":-10,"max":255,"value":128},{"id":"Offset Y","type":"range","ro":false,"o":-11,"max":255,"value":128},{"id":"Legs","type":"range","ro":false,"o":-12,"min":1,"max":8,"value":4}]}} initVarAndUpdate chFun init pro v:2 initVarAndUpdate chFun init fxStart v:[{"x":0,"y":0,"z":0}] Coord3D assign 0 0 0 @@ -46,7 +46,7 @@ setValue value removed Fixture Generator initVarAndUpdate chFun init fixtureGen v:0 initVar create new number var: fixtureGen->ledCount setValue changed ledCount ->64 -parentVar {"details":{"id":"fixtureGen","type":"select","ro":false,"o":-24,"value":0,"uiFun":16,"chFun":8,"n":[{"id":"ledCount","type":"number","ro":false,"o":-25,"min":1,"max":4096,"value":64}]}} +parentVar {"details":{"id":"fixtureGen","type":"select","ro":false,"o":-24,"value":0,"fun":16,"chFun":8,"n":[{"id":"ledCount","type":"number","ro":false,"o":-25,"min":1,"max":4096,"value":64}]}} setValue value removed generate setValue value removed Files setValue value removed fileTbl