From e9279919ae9e9affa63f30d1f948b66dbb9c1d88 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Mon, 19 Oct 2020 16:58:11 -0700 Subject: [PATCH 01/21] Remove uncompressed style.css. Combine SSID/PWD on same line and toggle between the two every 10 seconds. --- data/style.css | 277 ---------------------------------------- src/graphics/Screen.cpp | 2 +- 2 files changed, 1 insertion(+), 278 deletions(-) delete mode 100644 data/style.css diff --git a/data/style.css b/data/style.css deleted file mode 100644 index 408ee7645..000000000 --- a/data/style.css +++ /dev/null @@ -1,277 +0,0 @@ -/* latin-ext */ -@font-face { - font-family: 'Lato'; - font-style: normal; - font-weight: 400; - src: local('Lato Regular'), local('Lato-Regular'), url(./Google.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} - - -*, *:before, *:after { - box-sizing: border-box; -} - -body { - background: #C5DDEB; - font: 14px/20px "Lato", Arial, sans-serif; - padding: 40px 0; - color: white; -} - - - -.grid { - display: grid; - grid-template-columns: - 1fr 4fr; - grid-template-areas: - "header header" - "sidebar content"; - margin: 0 auto; - width: 750px; - background: #444753; - border-radius: 5px; -} - -.top {grid-area: header;} -.side {grid-area: sidebar;} -.main {grid-area: content;} - -.top { - border-bottom: 2px solid white; -} -.top-text { - font-weight: bold; - font-size: 24px; - text-align: center; - padding: 20px; -} - -.side { - width: 260px; - float: left; -} -.side .side-header { - padding: 20px; - border-bottom: 2px solid white; -} - -.side .side-header .side-text { - padding-left: 10px; - margin-top: 6px; - font-size: 16px; - text-align: left; - font-weight: bold; - -} - -.channel-list ul { - padding: 20px; - height: 570px; - list-style-type: none; -} -.channel-list ul li { - padding-bottom: 20px; -} - -.channel-list .channel-name { - font-size: 20px; - margin-top: 8px; - padding-left: 8px; -} - -.channel-list .message-count { - padding-left: 16px; - color: #92959E; -} - -.icon { - display: inline-block; - width: 1em; - height: 1em; - stroke-width: 0; - stroke: currentColor; - fill: currentColor; -} - -.icon-map-marker { - width: 0.5714285714285714em; -} - -.icon-circle { - width: 0.8571428571428571em; -} - -.content { - display: flex; - flex-direction: column; - flex-wrap: nowrap; -/* width: 490px; */ - float: left; - background: #F2F5F8; -/* border-top-right-radius: 5px; - border-bottom-right-radius: 5px; */ - color: #434651; -} -.content .content-header { - flex-grow: 0; - padding: 20px; - border-bottom: 2px solid white; -} - -.content .content-header .content-from { - padding-left: 10px; - margin-top: 6px; - font-size: 20px; - text-align: center; - font-size: 16px; -} -.content .content-header .content-from .content-from-highlight { - font-weight: bold; -} -.content .content-header .content-num-messages { - color: #92959E; -} - -.content .content-history { - flex-grow: 1; - padding: 20px 20px 20px; - border-bottom: 2px solid white; - overflow-y: scroll; - height: 375px; -} -.content .content-history ul { - list-style-type: none; - padding-inline-start: 10px; -} -.content .content-history .message-data { - margin-bottom: 10px; -} -.content .content-history .message-data-time { - color: #a8aab1; - padding-left: 6px; -} -.content .content-history .message { - color: white; - padding: 8px 10px; - line-height: 20px; - font-size: 14px; - border-radius: 7px; - margin-bottom: 30px; - width: 90%; - position: relative; -} -.content .content-history .message:after { - bottom: 100%; - left: 7%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - border-bottom-color: #86BB71; - border-width: 10px; - margin-left: -10px; -} -.content .content-history .my-message { - background: #86BB71; -} -.content .content-history .other-message { - background: #94C2ED; -} -.content .content-history .other-message:after { - border-bottom-color: #94C2ED; - left: 93%; -} -.content .content-message { - flex-grow: 0; - padding: 10px; -} -.content .content-message textarea { - width: 100%; - border: none; - padding: 10px 10px; - font: 14px/22px "Lato", Arial, sans-serif; - margin-bottom: 10px; - border-radius: 5px; - resize: none; -} - -.content .content-message button { - float: right; - color: #94C2ED; - font-size: 16px; - text-transform: uppercase; - border: none; - cursor: pointer; - font-weight: bold; - background: #F2F5F8; -} -.content .content-message button:hover { - color: #75b1e8; -} -/* Tooltip container */ -.tooltip { - color: #86BB71; - position: relative; - display: inline-block; - border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ -} -/* Tooltip text */ -.tooltip .tooltiptext { - visibility: hidden; - width: 120px; - background-color: #444753; - color: #fff; - text-align: center; - padding: 5px 0; - border-radius: 6px; - /* Position the tooltip text - see examples below! */ - position: absolute; - z-index: 1; -} - -/* Show the tooltip text when you mouse over the tooltip container */ -.tooltip:hover .tooltiptext { - visibility: visible; -} - -.online, .offline, .me { - margin-right: 3px; - font-size: 10px; -} - -.online { - color: #86BB71; -} - -.offline { - color: #E38968; -} - -.me { - color: #94C2ED; -} - -.align-left { - text-align: left; -} - -.align-right { - text-align: right; -} - -.float-right { - float: right; -} - -.clearfix:after { - visibility: hidden; - display: block; - font-size: 0; - content: " "; - clear: both; - height: 0; -} \ No newline at end of file diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 350b27d47..9b7d083bc 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1042,7 +1042,7 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i } } - if ((millis() / 1000) % 2) { + if ((millis() / 10000) % 2) { display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "SSID: " + String(wifiName)); } else { display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "PWD: " + String(wifiPsw)); From baa3d1dae4917581bb5955ba03e785edd3bb5aae Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Wed, 21 Oct 2020 20:57:44 -0700 Subject: [PATCH 02/21] Support for the SPIFFS --- data/static/index.html.gz | Bin 0 -> 75 bytes data/static/meshtastic.js.gz | Bin 0 -> 22464 bytes data/style.css.gz | Bin 1578 -> 0 bytes src/meshwifi/meshhttp.cpp | 641 ++++++++--------- src/meshwifi/meshhttp.h | 1 - src/meshwifi/meshhttpStatic.h | 1220 --------------------------------- 6 files changed, 278 insertions(+), 1584 deletions(-) create mode 100644 data/static/index.html.gz create mode 100644 data/static/meshtastic.js.gz delete mode 100644 data/style.css.gz diff --git a/data/static/index.html.gz b/data/static/index.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..56af1fcad025e8b80d20d43703ea9aa3a77684a1 GIT binary patch literal 75 zcmb2|=HMu~HX)vcIWsRMwL&kWBsYhFQIp}?f13{G623B89a4B88&- c{1PBPH&vk^F+Ek!Mjxn1@9*_vnhXpK0MRTNy#N3J literal 0 HcmV?d00001 diff --git a/data/static/meshtastic.js.gz b/data/static/meshtastic.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..9dc9aacd215ce22f0c20d7186d692db2536530f3 GIT binary patch literal 22464 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 P!?yo7T>1}Vokalvg;gQw literal 0 HcmV?d00001 diff --git a/data/style.css.gz b/data/style.css.gz deleted file mode 100644 index 1ebb3c0d84ce4e1745321d8e2704c5a76386bb75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1578 zcmV+_2G#i=iwFpmh>KqU19NnFY-KKEb8`TlSIKhYHV{2WUx9dP$}^5(lQgwamv~L3 zDu+~-4**3_LKz}dAZST;&A+FyaTDcu<{*)1HX7ZpyB~n-3&e?H1*Ut2F0Mzv=AuwI zCrgUnMhLmlhVes!&i^1voG-k%R0mEIR0z2tyq4}LTdh@s;vmqnQZ5t3#ggzZW;*(d zt}0IC`Pa*~7`McgD5l;dGr-b!y@X-xfz~+)t0M*Ek#DLB*hBc`1h9} z3<4ZP@zbRqMB}-BhL0c&AD@gc3ZlS1ZvzZ}cW&?igL|tHhBxMUKLL&VsS(~zqX6Gd zpPm+@Z==!Z;u2jXDFv6Pej~Y}(twqUJucZRD^>}-%Zy44A~Pu!*}>|Nl-b z>3;n1@ObB;OHdeZ_t#Od-J>%N%Go8lm5lI9RFa~^C6z4K%3G3UW|3H{8km=Y3z?wZ znkj0%L}+xik}NZ;W~|(D0x8rIt*@V0(G5ry#W1_t6lF5{Da<8`b9t;nBqdtmY)uIS zhV0`E1SQL8N+h^YC|am9J$FOoiWLb85UG^Vk{!#`IziJhxV-4&5XbR!d}G8GHc2v8 zl?fVeEqqr>Y|)$XNIR0ay)p#1l(X9E`tJag2OfEU?PMGy( z_zA8>yP@Wsx{jcGoH0q4iV59UhPdi4J4v>>67+L1y1wwM#dDoFy}k9Cs>ef5(bM>8 zW@h>>(ycEwl3h;fb=iQ5UCn1QzKJK}(AK95(7&{M*+c>E>|Ba|sJBloP>*vdHb30t z-jiW^J7R-(0`B_L8R0eH$u*{@DEA|Fi)w>i%az8?P+uKefmRjr(9cJBl#k}`Bbh-+ zyif_%x5H4-@N@n>-Qhj)Sp&tvPb5!)mT9X!z>F36?#FdYN^KH2$nv3n$U~DJo44t*hCuq4D zbe$wASgIUkg6USp^aYHRP3d&m%%^QOxx1T&t?zz|=`w|N9)F}t4!E7r4*B}U-Zdc9 z8r(Q(V;%47^F7qxsF}Vf$^TPV)F^jQn)XtNO6o-YtEV_{!)tyfs^A zrG1x({_id^*y+RPa0KOUd&r-)-U%bEz+mCPFgvc8rf54NK^az>X)EuyQOkT zN;-rCoK;F~(pC4#^XA}Y|6Vd|6vjzA>vv4k74-VUMKkqLmL+?JPi zuj9BE);{}}`a1B!N|rLt6!^AgSw@TYi8DI7)Ya|NTKgHY%O=bKi +#include +#include +#include #include #include @@ -49,11 +53,10 @@ void handleStyleCSS(HTTPRequest *req, HTTPResponse *res); void handleHotspot(HTTPRequest *req, HTTPResponse *res); void handleFavicon(HTTPRequest *req, HTTPResponse *res); void handleRoot(HTTPRequest *req, HTTPResponse *res); -void handleBasicHTML(HTTPRequest *req, HTTPResponse *res); -void handleBasicJS(HTTPRequest *req, HTTPResponse *res); -void handleScriptsScriptJS(HTTPRequest *req, HTTPResponse *res); +void handleStaticBrowse(HTTPRequest *req, HTTPResponse *res); void handleStatic(HTTPRequest *req, HTTPResponse *res); void handle404(HTTPRequest *req, HTTPResponse *res); +void handleFormUpload(HTTPRequest *req, HTTPResponse *res); void middlewareSpeedUp240(HTTPRequest *req, HTTPResponse *res, std::function next); void middlewareSpeedUp160(HTTPRequest *req, HTTPResponse *res, std::function next); @@ -64,6 +67,11 @@ bool isCertReady = 0; uint32_t timeSpeedUp = 0; +// We need to specify some content-type mapping, so the resources get delivered with the +// right content type and are displayed correctly in the browser +char contentTypes[][2][32] = {{".txt", "text/plain"}, {".html", "text/html"}, {".js", "text/javascript"}, + {".png", "image/png"}, {".jpg", "image/jpg"}, {"", ""}}; + void handleWebResponse() { if (isWifiAvailable() == 0) { @@ -79,7 +87,7 @@ void handleWebResponse() insecureServer->loop(); } - /* + /* Slow down the CPU if we have not received a request within the last few seconds. */ @@ -219,11 +227,10 @@ void initWebServer() ResourceNode *nodeHotspot = new ResourceNode("/hotspot-detect.html", "GET", &handleHotspot); ResourceNode *nodeFavicon = new ResourceNode("/favicon.ico", "GET", &handleFavicon); ResourceNode *nodeRoot = new ResourceNode("/", "GET", &handleRoot); - ResourceNode *nodeScriptScriptsJS = new ResourceNode("/scripts/script.js", "GET", &handleScriptsScriptJS); - ResourceNode *nodeBasicHTML = new ResourceNode("/basic.html", "GET", &handleBasicHTML); - ResourceNode *nodeBasicJS = new ResourceNode("/basic.js", "GET", &handleBasicJS); + ResourceNode *nodeStaticBrowse = new ResourceNode("/static", "GET", &handleStaticBrowse); ResourceNode *nodeStatic = new ResourceNode("/static/*", "GET", &handleStatic); ResourceNode *node404 = new ResourceNode("", "GET", &handle404); + ResourceNode *nodeFormUpload = new ResourceNode("/upload", "POST", &handleFormUpload); // Secure nodes secureServer->registerNode(nodeAPIv1ToRadioOptions); @@ -232,11 +239,10 @@ void initWebServer() secureServer->registerNode(nodeHotspot); secureServer->registerNode(nodeFavicon); secureServer->registerNode(nodeRoot); - secureServer->registerNode(nodeScriptScriptsJS); - secureServer->registerNode(nodeBasicHTML); - secureServer->registerNode(nodeBasicJS); + secureServer->registerNode(nodeStaticBrowse); secureServer->registerNode(nodeStatic); secureServer->setDefaultNode(node404); + secureServer->setDefaultNode(nodeFormUpload); secureServer->addMiddleware(&middlewareSpeedUp240); @@ -247,11 +253,10 @@ void initWebServer() insecureServer->registerNode(nodeHotspot); insecureServer->registerNode(nodeFavicon); insecureServer->registerNode(nodeRoot); - insecureServer->registerNode(nodeScriptScriptsJS); - insecureServer->registerNode(nodeBasicHTML); - insecureServer->registerNode(nodeBasicJS); + insecureServer->registerNode(nodeStaticBrowse); insecureServer->registerNode(nodeStatic); insecureServer->setDefaultNode(node404); + insecureServer->setDefaultNode(nodeFormUpload); insecureServer->addMiddleware(&middlewareSpeedUp160); @@ -288,6 +293,85 @@ void middlewareSpeedUp160(HTTPRequest *req, HTTPResponse *res, std::functiongetParams(); + std::string paramValDelete; + + // Set a default content type + res->setHeader("Content-Type", "text/html"); + + if (params->getQueryParameter("delete", paramValDelete)) { + std::string pathDelete = "/" + paramValDelete; + if (SPIFFS.remove(pathDelete.c_str())) { + Serial.println(pathDelete.c_str()); + res->println("File " + "deleted!

File deleted!

"); + res->println("\n"); + res->println(""); + + return; + } else { + Serial.println(pathDelete.c_str()); + res->println("Error deleteing " + "file!

Error deleteing file!

"); + res->println("Error deleteing file!
"); + + return; + } + } + + res->println("

Upload new file

"); + res->println("

This interface is experemntal!

"); + res->println("

This form allows you to upload files. Keep your filenames very short and files small. Big filenames and big " + "files are a known problem.

"); + res->println("
"); + res->println("file:
"); + res->println(""); + res->println("
"); + + res->println("

All Files

"); + + File root = SPIFFS.open("/"); + if (root.isDirectory()) { + res->println(""); + + res->println(""); + File file = root.openNextFile(); + while (file) { + String filePath = String(file.name()); + if (filePath.indexOf("/static") == 0) { + res->println(""); + res->println(""); + res->println(""); + res->println(""); + } + + file = root.openNextFile(); + } + res->println("
"); + + if (String(file.name()).substring(1).endsWith(".gz")) { + String modifiedFile = String(file.name()).substring(1); + modifiedFile.remove((modifiedFile.length() - 3), 3); + res->print("" + String(file.name()).substring(1) + ""); + } else { + res->print("" + String(file.name()).substring(1) + ""); + } + res->println(""); + res->print(String(file.size())); + res->println(""); + res->print("X"); + res->println("
"); + + res->print("
"); + res->print("Total : " + String(SPIFFS.totalBytes()) + " Bytes
"); + res->print("Used : " + String(SPIFFS.usedBytes()) + " Bytes
"); + res->print("Free : " + String(SPIFFS.totalBytes() - SPIFFS.usedBytes()) + " Bytes
"); + } +} void handleStatic(HTTPRequest *req, HTTPResponse *res) { @@ -295,34 +379,183 @@ void handleStatic(HTTPRequest *req, HTTPResponse *res) ResourceParameters *params = req->getParams(); // Set a default content type - res->setHeader("Content-Type", "text/plain"); + res->setHeader("Content-Type", "application/octet-stream"); std::string parameter1; // Print the first parameter value if (params->getPathParameter(0, parameter1)) { - if (parameter1 == "meshtastic.js") { - res->setHeader("Content-Encoding", "gzip"); - res->setHeader("Content-Type", "application/json"); - res->write(STATIC_MESHTASTIC_JS_DATA, STATIC_MESHTASTIC_JS_LENGTH); - return; - } else if (parameter1 == "style.css") { - res->setHeader("Content-Encoding", "gzip"); - res->setHeader("Content-Type", "text/css"); - res->write(STATIC_STYLE_CSS_DATA, STATIC_STYLE_CSS_LENGTH); - return; - - } else { - res->print("Parameter 1: "); - res->printStd(parameter1); + std::string filename = "/static/" + parameter1; + std::string filenameGzip = "/static/" + parameter1 + ".gz"; + if (!SPIFFS.exists(filename.c_str()) && !SPIFFS.exists(filenameGzip.c_str())) { + // Send "404 Not Found" as response, as the file doesn't seem to exist + res->setStatusCode(404); + res->setStatusText("Not found"); + res->println("404 Not Found"); + res->printf("

File not found: %s

\n", filename.c_str()); return; } + // Try to open the file from SPIFFS + File file; + + if (SPIFFS.exists(filename.c_str())) { + file = SPIFFS.open(filename.c_str()); + if (!file.available()) { + DEBUG_MSG("File not available - %s\n", filename.c_str()); + } + + } else if (SPIFFS.exists(filenameGzip.c_str())) { + file = SPIFFS.open(filenameGzip.c_str()); + res->setHeader("Content-Encoding", "gzip"); + if (!file.available()) { + DEBUG_MSG("File not available\n"); + } + } + + res->setHeader("Content-Length", httpsserver::intToString(file.size())); + + // Content-Type is guessed using the definition of the contentTypes-table defined above + int cTypeIdx = 0; + do { + if (filename.rfind(contentTypes[cTypeIdx][0]) != std::string::npos) { + res->setHeader("Content-Type", contentTypes[cTypeIdx][1]); + break; + } + cTypeIdx += 1; + } while (strlen(contentTypes[cTypeIdx][0]) > 0); + + // Read the file from SPIFFS and write it to the HTTP response body + size_t length = 0; + do { + char buffer[256]; + length = file.read((uint8_t *)buffer, 256); + std::string bufferString(buffer, length); + res->write((uint8_t *)bufferString.c_str(), bufferString.size()); + } while (length > 0); + + file.close(); + + return; + } else { res->println("ERROR: This should not have happened..."); } } + +void handleFormUpload(HTTPRequest *req, HTTPResponse *res) +{ + // First, we need to check the encoding of the form that we have received. + // The browser will set the Content-Type request header, so we can use it for that purpose. + // Then we select the body parser based on the encoding. + // Actually we do this only for documentary purposes, we know the form is going + // to be multipart/form-data. + HTTPBodyParser *parser; + std::string contentType = req->getHeader("Content-Type"); + + // The content type may have additional properties after a semicolon, for exampel: + // Content-Type: text/html;charset=utf-8 + // Content-Type: multipart/form-data;boundary=------s0m3w31rdch4r4c73rs + // As we're interested only in the actual mime _type_, we strip everything after the + // first semicolon, if one exists: + size_t semicolonPos = contentType.find(";"); + if (semicolonPos != std::string::npos) { + contentType = contentType.substr(0, semicolonPos); + } + + // Now, we can decide based on the content type: + if (contentType == "multipart/form-data") { + parser = new HTTPMultipartBodyParser(req); + } else { + Serial.printf("Unknown POST Content-Type: %s\n", contentType.c_str()); + return; + } + + res->println("File " + "Upload

File Upload

"); + + // We iterate over the fields. Any field with a filename is uploaded. + // Note that the BodyParser consumes the request body, meaning that you can iterate over the request's + // fields only a single time. The reason for this is that it allows you to handle large requests + // which would not fit into memory. + bool didwrite = false; + + // parser->nextField() will move the parser to the next field in the request body (field meaning a + // form field, if you take the HTML perspective). After the last field has been processed, nextField() + // returns false and the while loop ends. + while (parser->nextField()) { + // For Multipart data, each field has three properties: + // The name ("name" value of the tag) + // The filename (If it was a , this is the filename on the machine of the + // user uploading it) + // The mime type (It is determined by the client. So do not trust this value and blindly start + // parsing files only if the type matches) + std::string name = parser->getFieldName(); + std::string filename = parser->getFieldFilename(); + std::string mimeType = parser->getFieldMimeType(); + // We log all three values, so that you can observe the upload on the serial monitor: + DEBUG_MSG("handleFormUpload: field name='%s', filename='%s', mimetype='%s'\n", name.c_str(), filename.c_str(), + mimeType.c_str()); + + // Double check that it is what we expect + if (name != "file") { + DEBUG_MSG("Skipping unexpected field"); + res->println("

No file found.

"); + return; + } + + // Double check that it is what we expect + if (filename == "") { + DEBUG_MSG("Skipping unexpected field"); + res->println("

No file found.

"); + return; + } + + // SPIFFS limits the total lenth of a path + file to 31 characters. + if (filename.length() + 8 > 31) { + DEBUG_MSG("Uploaded filename too long!"); + res->println("

Uploaded filename too long! Limit of 23 characters.

"); + delete parser; + return; + } + + // You should check file name validity and all that, but we skip that to make the core + // concepts of the body parser functionality easier to understand. + std::string pathname = "/static/" + filename; + + // Create a new file on spiffs to stream the data into + File file = SPIFFS.open(pathname.c_str(), "w"); + size_t fileLength = 0; + didwrite = true; + + // With endOfField you can check whether the end of field has been reached or if there's + // still data pending. With multipart bodies, you cannot know the field size in advance. + while (!parser->endOfField()) { + byte buf[512]; + size_t readLength = parser->read(buf, 512); + file.write(buf, readLength); + fileLength += readLength; + + // Abort the transfer if there is less than 50k space left on the filesystem. + if (SPIFFS.totalBytes() - SPIFFS.usedBytes() < 51200) { + file.close(); + res->println("

Write aborted! File is won't fit!

"); + + delete parser; + return; + } + } + file.close(); + res->printf("

Saved %d bytes to %s

", (int)fileLength, pathname.c_str()); + } + if (!didwrite) { + res->println("

Did not write any file

"); + } + res->println(""); + delete parser; +} + void handle404(HTTPRequest *req, HTTPResponse *res) { @@ -397,15 +630,22 @@ void handleAPIv1FromRadio(HTTPRequest *req, HTTPResponse *res) uint32_t len = 1; if (params->getQueryParameter("all", valueAll)) { + + // If all is ture, return all the buffers we have available + // to us at this point in time. if (valueAll == "true") { while (len) { len = webAPI.getFromRadio(txBuf); res->write(txBuf, len); } + + // Otherwise, just return one protobuf } else { len = webAPI.getFromRadio(txBuf); res->write(txBuf, len); } + + // the param "all" was not spcified. Return just one protobuf } else { len = webAPI.getFromRadio(txBuf); res->write(txBuf, len); @@ -458,248 +698,19 @@ void handleAPIv1ToRadio(HTTPRequest *req, HTTPResponse *res) */ void handleRoot(HTTPRequest *req, HTTPResponse *res) { - - String out = ""; - out += - "\n" - "\n" - "\n" - "\n" - "\n" - " \n" - " Meshtastic - Chat\n" - " \n" - "\n" - "\n" - "\n" - "

This area is under development. Please don't file bugs.

\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "
\n" - "\t
\n" - "\t\t
Meshtastic - Chat
\n" - "\t
\n" - "\n" - "\t
\n" - "
\n" - "\t
\n" - "\t\t
Users
\n" - "\t
\n" - "
    \n" - "
\n" - "
\n" - "
\n" - "
\n" - "
\n" - "\n" - "
\n" - "\t\t All Users\n" - "\t\t
\n" - "\n" - "
\n" - " \n" - "
\n" - "
    \n" - "\t\t
\n" - " \n" - "
\n" - " \n" - "
\n" - " \n" - " \n" - " \n" - " \n" - "\n" - "
\n" - " \n" - "
\n" - " \n" - "
\n" - "\n" - "\n" - "\n" - "\n" - "\n" - ""; - - // Status code is 200 OK by default. - // We want to deliver a simple HTML page, so we send a corresponding content type: res->setHeader("Content-Type", "text/html"); + res->setHeader("Content-Encoding", "gzip"); - // The response implements the Print interface, so you can use it just like - // you would write to Serial etc. - res->print(out); -} + File file = SPIFFS.open("/static/index.html.gz"); -void handleScriptsScriptJS(HTTPRequest *req, HTTPResponse *res) -{ - String out = ""; - out += "String.prototype.toHHMMSS = function () {\n" - " var sec_num = parseInt(this, 10); // don't forget the second param\n" - " var hours = Math.floor(sec_num / 3600);\n" - " var minutes = Math.floor((sec_num - (hours * 3600)) / 60);\n" - " var seconds = sec_num - (hours * 3600) - (minutes * 60);\n" - "\n" - " if (hours < 10) {hours = \"0\"+hours;}\n" - " if (minutes < 10) {minutes = \"0\"+minutes;}\n" - " if (seconds < 10) {seconds = \"0\"+seconds;}\n" - "// return hours+':'+minutes+':'+seconds;\n" - "\treturn hours+'h'+minutes+'m';\n" - "}\n" - "String.prototype.padLeft = function (length, character) { \n" - " return new Array(length - this.length + 1).join(character || ' ') + this; \n" - "};\n" - "\n" - "Date.prototype.toFormattedString = function () {\n" - " return [String(this.getFullYear()).substr(2, 2),\n" - "\t\t\tString(this.getMonth()+1).padLeft(2, '0'),\n" - " String(this.getDate()).padLeft(2, '0')].join(\"/\") + \" \" +\n" - " [String(this.getHours()).padLeft(2, '0'),\n" - " String(this.getMinutes()).padLeft(2, '0')].join(\":\");\n" - "};\n" - "\n" - "function getData(file) {\n" - "\tfetch(file)\n" - "\t.then(function (response) {\n" - "\t\treturn response.json();\n" - "\t})\n" - "\t.then(function (datafile) {\n" - "\t\tupdateData(datafile);\n" - "\t})\n" - "\t.catch(function (err) {\n" - "\t\tconsole.log('error: ' + err);\n" - "\t});\n" - "}\n" - "\t\n" - "function updateData(datafile) {\n" - "// Update System Details\n" - "\tupdateSystem(datafile);\n" - "//\tUpdate Userlist and message count\n" - "\tupdateUsers(datafile);\n" - "// Update Chat\n" - "\tupdateChat(datafile);\n" - "}\n" - "\n" - "function updateSystem(datafile) {\n" - "// Update System Info \n" - "\tvar sysContainer = document.getElementById(\"content-from-id\");\n" - "\tvar newHTML = datafile.data.system.channel;\n" - "\tvar myDate = new Date( datafile.data.system.timeGPS *1000);\n" - "\tnewHTML += ' @' + myDate.toFormattedString();\n" - "\tvar newSec = datafile.data.system.timeSinceStart;\n" - "\tvar strsecondUp = newSec.toString();\n" - "\tnewHTML += ' Up:' + strsecondUp.toHHMMSS();\n" - "\tsysContainer.innerHTML = newHTML;\n" - "}\n" - "\n" - "function updateUsers(datafile) {\n" - "\tvar mainContainer = document.getElementById(\"userlist-id\");\n" - "\tvar htmlUsers = '';\n" - "\tvar timeBase = datafile.data.system.timeSinceStart;\n" - "//\tvar lookup = {};\n" - " for (var i = 0; i < datafile.data.users.length; i++) {\n" - " htmlUsers += formatUsers(datafile.data.users[i],timeBase);\n" - "\t}\n" - "\tmainContainer.innerHTML = htmlUsers;\n" - "}\n" - "\n" - "function formatUsers(user,timeBase) {\n" - "\tnewHTML = '
  • ';\n" - " newHTML += '
    ' + user.NameLong + '(' + user.NameShort + ')
    ';\n" - " newHTML += '
    ';\n" - "\tvar secondsLS = timeBase - user.lastSeen;\n" - "\tvar strsecondsLS = secondsLS.toString();\n" - "\tnewHTML += 'Seen: '+strsecondsLS.toHHMMSS()+' ago ';\n" - "\tif (user.lat == 0 || user.lon == 0) {\n" - "\t\tnewHTML += '';\n" - "\t} else {\n" - "\t\tnewHTML += '
    lat:' + user.lat + ' lon:'+ user.lon+ " - "'';\n" - "\t}\n" - " newHTML += '
    ';\n" - " newHTML += '
  • ';\n" - "\treturn(newHTML);\n" - "}\n" - "\n" - "function onlineStatus(time) {\n" - "\tif (time < 3600) {\n" - "\t\treturn \"online\"\n" - "\t} else {\n" - "\t\treturn \"offline\"\n" - "\t}\n" - "}\n" - "\n" - "function updateChat(datafile) {\n" - "// Update Chat\n" - "\tvar chatContainer = document.getElementById(\"chat-history-id\");\n" - "\tvar htmlChat = '';\n" - "\tvar timeBase = datafile.data.system.timeSinceStart;\n" - "\tfor (var i = 0; i < datafile.data.chat.length; i++) {\n" - "\t\thtmlChat += formatChat(datafile.data.chat[i],timeBase);\n" - "\t}\n" - "\tchatContainer.innerHTML = htmlChat;\n" - "\tscrollHistory();\n" - "}\n" - "\n" - "function formatChat(data,timeBase) {\n" - "\tvar secondsTS = timeBase - data.timestamp;\n" - "\tvar strsecondsTS = secondsTS.toString();\n" - "\tnewHTML = '
  • ';\n" - "\tif (data.local == 1) {\n" - "\t\tnewHTML += '
    ';\n" - "\t\tnewHTML += '' + data.NameLong + '(' + data.NameShort + ')';\n" - "\t\tnewHTML += '' + strsecondsTS.toHHMMSS() + ' ago';\n" - "\t\tnewHTML += '
    ';\n" - "\t\tnewHTML += '
    ' + data.chatLine + '
    ';\n" - "\t} else {\n" - "\t\tnewHTML += '
    ';\n" - "\t\tnewHTML += '' + strsecondsTS.toHHMMSS() + ' ago    ';\n" - "\t\tnewHTML += '' + data.NameLong + '(' + data.NameShort + ')';\n" - "//\t\tnewHTML += '';\n" - "\t\tnewHTML += '
    ';\n" - "\t\tnewHTML += '
    ' + data.chatLine + '
    ';\n" - "\t}\n" - "\n" - " newHTML += '
  • ';\n" - "\treturn(newHTML);\t\n" - "}\n" - "\n" - "function scrollHistory() {\n" - "\tvar chatContainer = document.getElementById(\"chat-div-id\");\n" - "\tchatContainer.scrollTop = chatContainer.scrollHeight;\n" - "}\n" - "\n" - "\n" - "getData('/json/chat/history/dummy');\n" - "\n" - "\n" - "//window.onload=function(){\n" - "//\talert('onload');\n" - "// Async - Run scroll 0.5sec after onload event\n" - "//\tsetTimeout(scrollHistory(),500);\n" - "// }"; - - // Status code is 200 OK by default. - // We want to deliver a simple HTML page, so we send a corresponding content type: - res->setHeader("Content-Type", "text/html"); - - // The response implements the Print interface, so you can use it just like - // you would write to Serial etc. - res->print(out); + // Read the file from SPIFFS and write it to the HTTP response body + size_t length = 0; + do { + char buffer[256]; + length = file.read((uint8_t *)buffer, 256); + std::string bufferString(buffer, length); + res->write((uint8_t *)bufferString.c_str(), bufferString.size()); + } while (length > 0); } void handleFavicon(HTTPRequest *req, HTTPResponse *res) @@ -709,99 +720,3 @@ void handleFavicon(HTTPRequest *req, HTTPResponse *res) // Write data from header file res->write(FAVICON_DATA, FAVICON_LENGTH); } - -/* - To convert text to c strings: - - https://tomeko.net/online_tools/cpp_text_escape.php?lang=en -*/ -void handleBasicJS(HTTPRequest *req, HTTPResponse *res) -{ - String out = ""; - out += "var meshtasticClient;\n" - "var connectionOne;\n" - "\n" - "\n" - "// Important: the connect action must be called from a user interaction (e.g. button press), otherwise the browsers " - "won't allow the connect\n" - "function connect() {\n" - "\n" - " // Create new connection\n" - " var httpconn = new meshtasticjs.IHTTPConnection();\n" - "\n" - " // Set connection params\n" - " let sslActive;\n" - " if (window.location.protocol === 'https:') {\n" - " sslActive = true;\n" - " } else {\n" - " sslActive = false;\n" - " }\n" - " let deviceIp = window.location.hostname; // Your devices IP here\n" - " \n" - "\n" - " // Add event listeners that get called when a new packet is received / state of device changes\n" - " httpconn.addEventListener('fromRadio', function(packet) { console.log(packet)});\n" - "\n" - " // Connect to the device async, then send a text message\n" - " httpconn.connect(deviceIp, sslActive)\n" - " .then(result => { \n" - "\n" - " alert('device has been configured')\n" - " // This gets called when the connection has been established\n" - " // -> send a message over the mesh network. If no recipient node is provided, it gets sent as a broadcast\n" - " return httpconn.sendText('meshtastic is awesome');\n" - "\n" - " })\n" - " .then(result => { \n" - "\n" - " // This gets called when the message has been sucessfully sent\n" - " console.log('Message sent!');})\n" - "\n" - " .catch(error => { console.log(error); });\n" - "\n" - "}"; - - // Status code is 200 OK by default. - // We want to deliver a simple HTML page, so we send a corresponding content type: - res->setHeader("Content-Type", "text/javascript"); - - // The response implements the Print interface, so you can use it just like - // you would write to Serial etc. - res->print(out); -} - -/* - To convert text to c strings: - - https://tomeko.net/online_tools/cpp_text_escape.php?lang=en -*/ -void handleBasicHTML(HTTPRequest *req, HTTPResponse *res) -{ - String out = ""; - out += "\n" - "\n" - "\n" - "\n" - " \n" - " \n" - "\n" - " \n" - " \n" - "\n" - "\n" - "\n" - "\n" - " \n" - " \n" - "\n" - "\n" - ""; - - // Status code is 200 OK by default. - // We want to deliver a simple HTML page, so we send a corresponding content type: - res->setHeader("Content-Type", "text/html"); - - // The response implements the Print interface, so you can use it just like - // you would write to Serial etc. - res->print(out); -} \ No newline at end of file diff --git a/src/meshwifi/meshhttp.h b/src/meshwifi/meshhttp.h index d2af443f0..ce4a346c8 100644 --- a/src/meshwifi/meshhttp.h +++ b/src/meshwifi/meshhttp.h @@ -22,7 +22,6 @@ void handleRoot(); void handleScriptsScriptJS(); void handleJSONChatHistoryDummy(); - class HttpAPI : public PhoneAPI { diff --git a/src/meshwifi/meshhttpStatic.h b/src/meshwifi/meshhttpStatic.h index b4645625f..e48aeb414 100644 --- a/src/meshwifi/meshhttpStatic.h +++ b/src/meshwifi/meshhttpStatic.h @@ -12,1226 +12,6 @@ */ -// Length of the binary data -const int STATIC_STYLE_CSS_LENGTH = 1578; - -const byte STATIC_STYLE_CSS_DATA[] = { - 0x1F, 0x8B, 0x08, 0x08, 0x94, 0x88, 0x8B, 0x5F, 0x00, 0x03, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x2E, 0x63, 0x73, 0x73, 0x00, 0x9D, - 0x57, 0xC9, 0x72, 0xE3, 0x36, 0x10, 0x3D, 0x47, 0x5F, 0x81, 0x78, 0x6A, 0xCA, 0x33, 0x8E, 0x61, 0x93, 0x34, 0xB5, 0x51, 0x97, - 0x78, 0x4D, 0xA5, 0x2A, 0x87, 0x54, 0x96, 0x0F, 0x00, 0x45, 0x50, 0x42, 0x19, 0x22, 0x54, 0x20, 0x68, 0x49, 0x76, 0xCD, 0xBF, - 0xA7, 0xB1, 0x71, 0x13, 0xE5, 0x78, 0xE6, 0x20, 0x91, 0x68, 0x36, 0x1A, 0xDD, 0xAF, 0xBB, 0x1F, 0x80, 0xEB, 0x0B, 0xC4, 0x89, - 0x62, 0x05, 0xA6, 0x7B, 0x85, 0x2E, 0xAE, 0x47, 0xBF, 0xE6, 0xA2, 0x50, 0x38, 0x27, 0x4B, 0x8A, 0xDE, 0x46, 0x08, 0xB9, 0xD1, - 0x86, 0xF1, 0x43, 0x82, 0xCE, 0xFF, 0x20, 0x4A, 0x9C, 0x2F, 0xBC, 0xB8, 0x54, 0x07, 0x4E, 0x13, 0x54, 0x08, 0xB9, 0x21, 0xBC, - 0x96, 0xEE, 0x28, 0x5B, 0xAD, 0x55, 0x82, 0xE2, 0x20, 0xD0, 0xB2, 0x52, 0x2E, 0x13, 0xC4, 0xC5, 0x92, 0xF0, 0x2F, 0x66, 0x3A, - 0xFA, 0x8B, 0xAE, 0x2A, 0x4E, 0xE4, 0xF9, 0xD7, 0xCB, 0xB6, 0x18, 0xB7, 0xC4, 0x95, 0xE4, 0x5F, 0xAE, 0xAE, 0x7F, 0x13, 0x62, - 0xC5, 0xE9, 0xD5, 0x4E, 0xE4, 0x79, 0xF4, 0x15, 0x4C, 0xC3, 0x22, 0xEA, 0xCB, 0xB9, 0x19, 0x9E, 0x7F, 0xD5, 0x96, 0xAB, 0x82, - 0x2D, 0x45, 0x46, 0xB1, 0x24, 0xC5, 0x0A, 0xDC, 0xF8, 0xF7, 0x97, 0x20, 0x0C, 0x02, 0x1C, 0x44, 0xF1, 0xD3, 0xA5, 0x1E, 0x44, - 0xE3, 0xB9, 0x7E, 0x86, 0x8F, 0x20, 0x0C, 0x1F, 0x9F, 0x8C, 0x30, 0x0A, 0xA2, 0xC0, 0x3E, 0x6F, 0x03, 0x0C, 0x7F, 0x77, 0x6E, - 0xF0, 0x00, 0x83, 0x7B, 0xAB, 0x11, 0x86, 0x37, 0xE6, 0x79, 0x3F, 0x01, 0x8D, 0xFB, 0xA9, 0x11, 0xDE, 0x4E, 0xA3, 0x00, 0xDF, - 0x4E, 0x9F, 0x9E, 0x16, 0xA3, 0x6F, 0xA3, 0xD1, 0xE8, 0xE2, 0x12, 0x5D, 0x24, 0x29, 0x05, 0x97, 0xA8, 0x7E, 0x23, 0xB9, 0xA2, - 0xD2, 0x80, 0x95, 0x8A, 0x3D, 0x2E, 0xD9, 0x2B, 0x2B, 0x56, 0x09, 0xBC, 0xCB, 0x8C, 0x4A, 0x0C, 0x22, 0x33, 0x29, 0x15, 0xD9, - 0xC1, 0xEA, 0x90, 0xE5, 0xF3, 0x4A, 0x8A, 0xAA, 0xC8, 0x12, 0xF4, 0xE9, 0x7E, 0xFC, 0xF0, 0xF0, 0x78, 0xE7, 0xA1, 0x4B, 0x50, - 0x18, 0x6F, 0xF7, 0xD7, 0x51, 0xB0, 0xDD, 0xA3, 0x33, 0x0D, 0xCA, 0xD9, 0x25, 0xBA, 0x95, 0x8C, 0xF0, 0x4B, 0x54, 0x92, 0xA2, - 0xC4, 0x25, 0x95, 0x2C, 0xD7, 0xCA, 0x5B, 0x92, 0x65, 0x66, 0x91, 0x58, 0xAB, 0x1A, 0x98, 0x97, 0x82, 0x0B, 0x99, 0xA0, 0xDD, - 0x9A, 0x29, 0x6A, 0xBD, 0x44, 0x68, 0x74, 0xB5, 0x92, 0x2C, 0x33, 0xAB, 0x66, 0xAC, 0xDC, 0x72, 0x02, 0x29, 0xD4, 0x12, 0xAD, - 0xAF, 0x9F, 0x58, 0xD1, 0x0D, 0x48, 0x15, 0xC5, 0x30, 0xBB, 0xDA, 0x14, 0x65, 0x32, 0xFA, 0x29, 0xCC, 0x25, 0x8A, 0x73, 0x79, - 0xAC, 0x42, 0x24, 0x25, 0x5A, 0xE1, 0x6C, 0x4D, 0x09, 0x04, 0x86, 0xEC, 0xE3, 0x0C, 0x04, 0x25, 0xCB, 0x68, 0x4A, 0x24, 0xB8, - 0x50, 0x28, 0x5A, 0xA8, 0x33, 0x3D, 0x77, 0x43, 0xE4, 0x8A, 0x15, 0x09, 0x0A, 0x10, 0xA9, 0x94, 0xD0, 0x92, 0x1D, 0xCB, 0xD4, - 0x3A, 0x41, 0xD3, 0x31, 0xB8, 0xBC, 0xE8, 0xE3, 0x10, 0xC7, 0xF1, 0x74, 0x7C, 0x63, 0xC4, 0x16, 0x36, 0x49, 0x32, 0x56, 0x95, - 0x09, 0x1A, 0x6F, 0x2D, 0x7C, 0x57, 0x4A, 0x6C, 0xD1, 0x9B, 0xF1, 0x48, 0x3B, 0x92, 0xB8, 0xE5, 0x17, 0xDF, 0x46, 0x57, 0x7A, - 0xF9, 0xCE, 0x27, 0xE7, 0x8F, 0xFE, 0xB6, 0x21, 0xAC, 0xE8, 0x7C, 0x73, 0x3E, 0x2E, 0x6A, 0x93, 0xCD, 0x92, 0xA9, 0x50, 0x4A, - 0x6C, 0x12, 0x14, 0x01, 0xA4, 0xA5, 0xE0, 0x00, 0x5C, 0x0D, 0xA6, 0x56, 0x05, 0x24, 0xA0, 0x41, 0xDE, 0xFA, 0x55, 0x9E, 0x0A, - 0x9E, 0x35, 0x0D, 0xC1, 0x5E, 0xA1, 0x10, 0xA3, 0xD8, 0x46, 0xA8, 0x27, 0x60, 0xC2, 0xD9, 0x0A, 0x70, 0x58, 0xC2, 0xA2, 0x54, - 0x76, 0x72, 0x17, 0x05, 0x3E, 0x36, 0x1B, 0x41, 0x83, 0x51, 0x34, 0x71, 0x18, 0xE5, 0x5C, 0x10, 0x58, 0x83, 0xD3, 0x5C, 0x19, - 0x37, 0x8C, 0xA2, 0xF9, 0xC7, 0x2E, 0x0B, 0x6F, 0xC7, 0x16, 0x3F, 0x12, 0xD0, 0x90, 0x29, 0x3B, 0xA8, 0xA3, 0x74, 0x56, 0xB1, - 0x5E, 0x1C, 0x0A, 0xD3, 0x99, 0xB6, 0x79, 0xC5, 0x80, 0x47, 0x82, 0x26, 0xCE, 0xC9, 0x26, 0xF2, 0x70, 0x72, 0x1C, 0xB9, 0x75, - 0xFE, 0x04, 0x6A, 0xC6, 0x95, 0xE5, 0x9A, 0x14, 0x05, 0xE5, 0x98, 0xB3, 0x52, 0xA1, 0x8A, 0x0F, 0xC7, 0xB4, 0x76, 0x33, 0xC7, - 0x53, 0x27, 0xD0, 0xDA, 0x96, 0x81, 0xB0, 0x3A, 0x6C, 0x0D, 0x0D, 0x15, 0x36, 0x59, 0x7D, 0x7B, 0x9C, 0x75, 0x02, 0xAA, 0x61, - 0xA9, 0xF1, 0xEF, 0x4C, 0xA8, 0x47, 0x05, 0xD9, 0xB4, 0x28, 0xD0, 0xA5, 0x76, 0x00, 0x86, 0x99, 0x15, 0x75, 0xF1, 0x9A, 0x0D, - 0xDB, 0xDE, 0xD0, 0xB2, 0x24, 0x2B, 0xDD, 0x6F, 0x55, 0x31, 0x08, 0xB3, 0x03, 0xD0, 0x75, 0xF3, 0xA7, 0x79, 0x34, 0x1F, 0xCF, - 0x1F, 0xAD, 0x25, 0x20, 0xBB, 0xA2, 0xDB, 0xCB, 0xAC, 0xE0, 0xAC, 0xA0, 0x38, 0x05, 0x1A, 0x7D, 0x6E, 0xB5, 0x58, 0x48, 0x37, - 0x6D, 0xC4, 0xDC, 0xB0, 0x54, 0x52, 0x3C, 0x53, 0xEC, 0x74, 0x82, 0x46, 0x04, 0xC5, 0x59, 0x49, 0x09, 0xF5, 0x79, 0xAF, 0x17, - 0x35, 0xA9, 0x62, 0x9C, 0xF7, 0xA5, 0xDE, 0x03, 0xBC, 0x21, 0x5B, 0xF8, 0xC9, 0x67, 0x57, 0x7C, 0xDE, 0xDE, 0xD5, 0x78, 0x1A, - 0xC6, 0xD1, 0xAC, 0xF9, 0xD7, 0xAB, 0xD6, 0x93, 0x96, 0x4C, 0x2E, 0x39, 0xED, 0x4E, 0x98, 0xF5, 0x66, 0xF8, 0x09, 0xAE, 0x45, - 0xBB, 0xA1, 0xE6, 0x9C, 0xBA, 0x8E, 0xA0, 0x7B, 0x9C, 0x31, 0x49, 0x97, 0x8A, 0x09, 0xDD, 0x57, 0x86, 0xB8, 0xEA, 0x2F, 0x3B, - 0x49, 0xB6, 0xBA, 0x12, 0xF4, 0x73, 0x31, 0xBA, 0xBE, 0xF0, 0xAB, 0xC5, 0x73, 0x9D, 0x38, 0xBD, 0xBD, 0xF5, 0x9A, 0xAA, 0xC7, - 0x43, 0x4F, 0xD1, 0xD3, 0xF8, 0x69, 0x66, 0x66, 0xFA, 0x2E, 0xD2, 0xAD, 0x2F, 0x35, 0x92, 0x5D, 0x4E, 0xEA, 0x75, 0xD9, 0x80, - 0x8A, 0x5D, 0xCD, 0x67, 0x32, 0xBE, 0x89, 0x27, 0xE3, 0xD0, 0xD6, 0xA7, 0x0B, 0xD0, 0xBF, 0xB4, 0x7B, 0xD9, 0x44, 0x01, 0xEE, - 0xEC, 0x5C, 0x8A, 0x7E, 0xA8, 0xB7, 0x4F, 0x2D, 0x50, 0x8F, 0x73, 0x29, 0x36, 0x3F, 0xDC, 0xE4, 0xDE, 0x93, 0x61, 0x7A, 0x3B, - 0x62, 0x83, 0x77, 0x02, 0xEE, 0xFA, 0xD3, 0x19, 0xE1, 0x35, 0xE0, 0xC9, 0x35, 0xA6, 0xA7, 0x28, 0xF7, 0x23, 0x76, 0x8B, 0x6A, - 0x83, 0x5D, 0xCB, 0x95, 0xC6, 0xCE, 0x50, 0x5F, 0x1D, 0x5B, 0x81, 0x56, 0x15, 0xF2, 0xD0, 0xCF, 0x47, 0x78, 0x94, 0x8F, 0xE6, - 0xEF, 0x23, 0x99, 0x41, 0x48, 0xBC, 0x50, 0x09, 0xD5, 0xB7, 0xC3, 0x50, 0xD0, 0xE5, 0x52, 0x0A, 0xCE, 0xDB, 0x7D, 0x7A, 0x33, - 0x1D, 0x9F, 0xC4, 0xCB, 0x79, 0xE4, 0xC8, 0xF1, 0x04, 0xF5, 0x35, 0xE9, 0x74, 0xC4, 0x50, 0x2A, 0x22, 0xEB, 0xB4, 0xBE, 0x67, - 0xB7, 0xE6, 0xA5, 0x8C, 0x28, 0x62, 0x96, 0x70, 0x25, 0xE0, 0x83, 0xF9, 0x4E, 0x13, 0x58, 0x31, 0xC7, 0x9D, 0x1E, 0x70, 0x32, - 0x23, 0x24, 0x6D, 0x23, 0xE8, 0x4A, 0xEE, 0x74, 0x89, 0xF4, 0xEC, 0xB6, 0xAD, 0xD5, 0x80, 0xD6, 0xD9, 0x00, 0xBA, 0xAD, 0xAB, - 0xD7, 0x84, 0xEE, 0x41, 0xF5, 0xC9, 0x69, 0x97, 0x65, 0xDC, 0xC9, 0x97, 0x6F, 0xD9, 0x69, 0xA7, 0xF6, 0x7D, 0xE0, 0x37, 0x6E, - 0xBE, 0xE3, 0x91, 0x79, 0xF0, 0xD9, 0xAC, 0x2B, 0x4A, 0x66, 0xF9, 0x47, 0x52, 0x7D, 0x78, 0x7E, 0xA1, 0x1F, 0x0B, 0xA2, 0x73, - 0x54, 0xF4, 0xC8, 0x5A, 0x93, 0x16, 0x8E, 0xE9, 0xE7, 0xC6, 0xB3, 0xC4, 0x95, 0x8F, 0x82, 0xF3, 0x6D, 0xB9, 0x25, 0x9A, 0x8B, - 0xED, 0xD6, 0x60, 0x6C, 0x27, 0xE8, 0x0C, 0x9D, 0xB5, 0xCB, 0x27, 0x68, 0xB9, 0x19, 0x74, 0x9D, 0x24, 0x29, 0x58, 0xAA, 0x1C, - 0x64, 0x82, 0xE9, 0x56, 0xC5, 0xF4, 0x05, 0x8C, 0x94, 0x4D, 0xE9, 0x74, 0xD9, 0xCC, 0xA7, 0x6D, 0x36, 0xB9, 0xBB, 0x9B, 0x86, - 0xAD, 0xEF, 0x7E, 0x8B, 0xE9, 0x32, 0x85, 0x75, 0x1E, 0x7F, 0xA4, 0x4A, 0x0E, 0xB8, 0x9D, 0xD0, 0x0E, 0xF9, 0xFA, 0xC5, 0xDE, - 0x35, 0x20, 0xD4, 0x1A, 0xDC, 0x38, 0x69, 0x63, 0x1E, 0xDF, 0x47, 0x8F, 0x0F, 0xDF, 0x63, 0xA3, 0x93, 0x93, 0x21, 0x0C, 0xBC, - 0x49, 0x9F, 0xA3, 0xF9, 0xCD, 0xE7, 0x61, 0xFB, 0x6D, 0xA7, 0x4E, 0xF2, 0xF8, 0x69, 0x8C, 0xFC, 0x74, 0xCD, 0xAB, 0xFA, 0xB0, - 0xDA, 0xDE, 0x2D, 0x7D, 0x95, 0xF8, 0xCA, 0xE8, 0x35, 0xBC, 0x35, 0x5B, 0x67, 0xA5, 0x7D, 0x97, 0x88, 0xFE, 0xEF, 0x2E, 0x31, - 0xD8, 0xE9, 0xC3, 0xE7, 0x70, 0x04, 0xE5, 0x6E, 0x7B, 0xC8, 0x9F, 0xB5, 0xDE, 0x09, 0x23, 0xAD, 0xC0, 0x60, 0xE1, 0xC0, 0x30, - 0x3B, 0xAE, 0xD9, 0x22, 0x3B, 0xA7, 0x9B, 0x1A, 0xD9, 0x53, 0x67, 0x48, 0x53, 0xFB, 0xFA, 0xEA, 0x97, 0xA0, 0x6A, 0xBB, 0xA5, - 0x72, 0x49, 0x4A, 0x3A, 0x84, 0x03, 0x9C, 0x55, 0x4A, 0x6D, 0xD2, 0x55, 0xF7, 0xC9, 0xF3, 0xE6, 0xE0, 0x66, 0xFF, 0x5E, 0x32, - 0x6C, 0x14, 0xC9, 0x5A, 0x53, 0x77, 0x87, 0xD0, 0xA6, 0xE3, 0x34, 0xA4, 0x66, 0x32, 0x9C, 0x15, 0xFE, 0x11, 0x82, 0x2B, 0xB6, - 0x35, 0xBD, 0x09, 0x37, 0x0E, 0x50, 0x85, 0xBD, 0x1F, 0x2E, 0x0D, 0x56, 0xDA, 0x9E, 0xD6, 0x34, 0xD4, 0x10, 0x87, 0xBC, 0x73, - 0xB6, 0xEB, 0xED, 0x2E, 0x21, 0xA4, 0x35, 0x83, 0x77, 0x9A, 0xA1, 0x94, 0x43, 0x50, 0x0B, 0x04, 0x6E, 0xFC, 0x9E, 0xA3, 0x83, - 0xA8, 0xD0, 0x8E, 0x40, 0x24, 0xF0, 0xB1, 0x84, 0x1B, 0xB2, 0xDE, 0x0E, 0xA1, 0xDA, 0x91, 0x09, 0x80, 0xA4, 0xDC, 0x96, 0x97, - 0x76, 0xAF, 0xE3, 0xB8, 0x17, 0xD6, 0x3E, 0xFB, 0x97, 0xFA, 0x3A, 0xF0, 0xC2, 0x4A, 0x96, 0x32, 0xCE, 0x14, 0xF8, 0xB6, 0x66, - 0x59, 0x46, 0x8B, 0xF6, 0x89, 0x33, 0x3A, 0xBA, 0xD4, 0xD5, 0xED, 0xD3, 0x5C, 0xED, 0xBC, 0x24, 0xCF, 0xF3, 0x0F, 0x5C, 0x8F, - 0xC6, 0xFE, 0x66, 0xDB, 0xAB, 0x44, 0x57, 0x1E, 0x3A, 0xDE, 0x3F, 0x1D, 0x84, 0x26, 0x42, 0xD5, 0x0E, 0x05, 0xA3, 0x92, 0x52, - 0x44, 0xF7, 0x04, 0x2E, 0xAF, 0xB0, 0xF5, 0xA7, 0x14, 0x76, 0xDD, 0x9F, 0xED, 0x81, 0x6C, 0x98, 0x16, 0x5F, 0x61, 0xCF, 0xCC, - 0xE8, 0xDE, 0xEC, 0xF2, 0x50, 0xD6, 0x60, 0xFC, 0xEF, 0xB5, 0xD8, 0x1D, 0x1B, 0xDE, 0xAD, 0x69, 0x61, 0x40, 0xDE, 0x88, 0xAA, - 0xA4, 0x66, 0x47, 0xEF, 0x28, 0x0D, 0x56, 0x80, 0x2B, 0x9F, 0x77, 0x31, 0x35, 0xEF, 0xDC, 0x35, 0x95, 0x30, 0xC9, 0xBF, 0x04, - 0xA6, 0xCA, 0x73, 0xF7, 0xE6, 0xF6, 0x53, 0xD7, 0xAD, 0xD2, 0x1D, 0x19, 0x8E, 0x37, 0xB7, 0xFA, 0x52, 0x63, 0x6D, 0x0C, 0x16, - 0x9F, 0xF9, 0x6C, 0x2D, 0x77, 0xBE, 0x3F, 0xDE, 0xCC, 0xE6, 0x93, 0x99, 0xFD, 0xDE, 0xDB, 0xBF, 0x1B, 0x5E, 0x1D, 0x5D, 0x99, - 0x9C, 0x19, 0xCE, 0x37, 0x2A, 0xC7, 0x97, 0xBD, 0x46, 0x49, 0xD6, 0x27, 0xB8, 0xB6, 0x96, 0x23, 0x02, 0xAD, 0x66, 0xA8, 0xA1, - 0xA5, 0xD6, 0xA5, 0x0A, 0x43, 0x30, 0x9C, 0x12, 0x99, 0xB3, 0x7D, 0x8B, 0xA7, 0x87, 0x6B, 0xB1, 0x6E, 0x9D, 0xBA, 0x67, 0x5A, - 0xB8, 0x04, 0x43, 0x5B, 0xA7, 0x31, 0xAD, 0xC9, 0x41, 0xAD, 0x7B, 0x3B, 0xE9, 0xB7, 0xFF, 0x00, 0x00, 0x1A, 0x0D, 0xA0, 0x16, - 0x13, 0x00, 0x00, -}; - -// Length of the binary data -const int STATIC_MESHTASTIC_JS_LENGTH = 23760; - -const byte STATIC_MESHTASTIC_JS_DATA[] = { - 0x1F, 0x8B, 0x08, 0x08, 0xFE, 0x1C, 0x8B, 0x5F, 0x00, 0x03, 0x6D, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2E, - 0x6A, 0x73, 0x00, 0xC5, 0xBD, 0xFB, 0x77, 0xDB, 0xC6, 0x92, 0x20, 0xFC, 0xFB, 0xFE, 0x15, 0x14, 0xCE, 0xB5, 0x02, 0x84, 0x10, - 0xC5, 0xA7, 0x24, 0x53, 0x82, 0xB9, 0x79, 0xCE, 0xCD, 0x37, 0x79, 0xAD, 0xED, 0xCC, 0xEC, 0x59, 0x86, 0xF1, 0x81, 0xC8, 0xA6, - 0x04, 0x9B, 0x02, 0x38, 0x00, 0x68, 0x45, 0x11, 0x39, 0x7F, 0xFB, 0x57, 0x55, 0xFD, 0x06, 0x1A, 0x14, 0xE5, 0x78, 0xEF, 0xDE, - 0xDC, 0x63, 0x81, 0xFD, 0xAC, 0xAE, 0xAE, 0xAE, 0xAE, 0xAA, 0xAE, 0xAE, 0x3E, 0x5A, 0x6E, 0xD2, 0x79, 0x99, 0x64, 0xA9, 0xCF, - 0xC2, 0x32, 0x78, 0xF4, 0xB2, 0xEB, 0xF7, 0x6C, 0x5E, 0x7A, 0x51, 0x54, 0x3E, 0xAC, 0x59, 0xB6, 0x6C, 0xB1, 0x3F, 0xD7, 0x59, - 0x5E, 0x16, 0xC7, 0xC7, 0xB5, 0x9C, 0xBB, 0x6C, 0xB1, 0x59, 0xB1, 0x09, 0xFF, 0xD3, 0x11, 0xE5, 0xA2, 0xD2, 0x0F, 0xC6, 0x9E, - 0x6C, 0x53, 0x17, 0x5E, 0xB0, 0x65, 0x92, 0xB2, 0xE3, 0x63, 0xFE, 0xB7, 0x13, 0xDF, 0x2D, 0x26, 0xFC, 0xD3, 0x9F, 0xCE, 0xA0, - 0xDF, 0x71, 0x53, 0xBF, 0x13, 0xF1, 0xB7, 0x73, 0xC7, 0x8A, 0xDB, 0x32, 0x2E, 0xCA, 0x64, 0xFE, 0x9E, 0x77, 0xC2, 0x6A, 0x49, - 0x3B, 0xFF, 0x3E, 0x49, 0x17, 0xD9, 0x7D, 0xE8, 0xAB, 0x31, 0x05, 0x8F, 0x39, 0x2B, 0x37, 0x79, 0xDA, 0xD2, 0xA3, 0x0C, 0x1E, - 0x3F, 0xC6, 0x79, 0xAB, 0x8C, 0x1E, 0x77, 0x97, 0x32, 0xB1, 0x95, 0xFB, 0x49, 0xF0, 0x98, 0x2C, 0xFD, 0x72, 0x9A, 0xCC, 0x02, - 0x51, 0x03, 0xBF, 0xE5, 0xA8, 0x2E, 0xB1, 0x4A, 0x1A, 0x61, 0x52, 0xF4, 0x98, 0x8C, 0x93, 0x70, 0x35, 0x3E, 0xEA, 0x85, 0x22, - 0x73, 0xFC, 0xB8, 0xDB, 0x5D, 0x8A, 0x4A, 0x0C, 0x2B, 0xCD, 0xE3, 0xD5, 0xCA, 0x4F, 0x65, 0xDD, 0x30, 0x0D, 0xF5, 0x77, 0x1E, - 0xC0, 0x8F, 0x55, 0x74, 0xD4, 0xD5, 0x69, 0x3B, 0x51, 0x35, 0xEF, 0xDC, 0x45, 0x2C, 0xCC, 0x3B, 0xF3, 0xA8, 0x84, 0x7F, 0x17, - 0x91, 0x39, 0x2F, 0x21, 0x80, 0x97, 0x77, 0x32, 0x9A, 0xA2, 0xED, 0xF6, 0x17, 0x42, 0x55, 0x87, 0xE3, 0xEF, 0xD7, 0x3C, 0x5B, - 0xB3, 0xBC, 0x7C, 0xA0, 0x62, 0x8F, 0x2C, 0xDD, 0xDC, 0xB1, 0x3C, 0xBE, 0x5E, 0xB1, 0x31, 0xF4, 0x71, 0xC3, 0xCA, 0x71, 0xB2, - 0x0B, 0x76, 0xD0, 0x5E, 0x1E, 0x99, 0x18, 0xF0, 0x36, 0x29, 0xAF, 0xBD, 0xF0, 0x8E, 0x24, 0xC2, 0xDF, 0x3C, 0xDC, 0x5D, 0x67, - 0xAB, 0xE3, 0x63, 0xFE, 0xB7, 0x53, 0x66, 0x6F, 0xCA, 0x3C, 0x49, 0x6F, 0xDE, 0xC6, 0x37, 0xC7, 0xC7, 0x4D, 0x3D, 0xD6, 0xCB, - 0x86, 0x80, 0xDD, 0xD5, 0x86, 0x8D, 0xBD, 0x9F, 0x88, 0x2C, 0xBC, 0x5D, 0x10, 0x36, 0x55, 0xF6, 0xDE, 0xBD, 0x63, 0x85, 0x28, - 0x26, 0xAB, 0x1D, 0x75, 0x39, 0xB8, 0x65, 0x64, 0x93, 0x25, 0xCC, 0x4D, 0xEF, 0xB8, 0x3C, 0x3E, 0xF6, 0x59, 0x94, 0xC3, 0x00, - 0x82, 0xF0, 0xE2, 0xB8, 0x94, 0x13, 0xC5, 0x2E, 0x21, 0x77, 0x88, 0xB9, 0x75, 0x22, 0x3A, 0x3E, 0xC6, 0xFF, 0x77, 0x74, 0x4F, - 0xBA, 0x12, 0x4E, 0x69, 0x12, 0x09, 0xE0, 0xE6, 0x39, 0x8B, 0x4B, 0xE6, 0xA7, 0x9B, 0xD5, 0x2A, 0xC0, 0xE6, 0x00, 0x61, 0x40, - 0x12, 0x0D, 0xA0, 0x27, 0xA1, 0x07, 0x29, 0xF1, 0x66, 0x55, 0x7A, 0x55, 0x8C, 0xF3, 0x51, 0x30, 0x18, 0x75, 0x9F, 0x00, 0x2A, - 0x08, 0x2F, 0x1A, 0xC9, 0x2C, 0x58, 0x66, 0xB9, 0x4F, 0xD4, 0xD4, 0x4A, 0x00, 0x8A, 0x00, 0x66, 0x1A, 0xDA, 0x4B, 0x43, 0x35, - 0xDC, 0x52, 0x91, 0x2C, 0x9B, 0x96, 0xB3, 0x5D, 0xE7, 0x1A, 0x48, 0x9A, 0xE0, 0x0A, 0xD3, 0x20, 0x90, 0x64, 0x96, 0x20, 0x8E, - 0xD2, 0xA8, 0x4E, 0xD4, 0x95, 0xD1, 0x4E, 0xEA, 0x0B, 0x81, 0x75, 0x04, 0xEC, 0xBB, 0xB1, 0x23, 0x53, 0x11, 0x32, 0xC2, 0x55, - 0x86, 0x5E, 0xEC, 0x01, 0xF6, 0xC3, 0x12, 0xBB, 0xCB, 0x2A, 0x53, 0x22, 0x0A, 0x0A, 0x14, 0xAD, 0xF3, 0xAC, 0xCC, 0x70, 0x90, - 0x9D, 0xDB, 0xB8, 0xF8, 0xE5, 0x3E, 0x95, 0xC8, 0xE2, 0x8B, 0x01, 0x2B, 0x60, 0x1B, 0xEB, 0xC8, 0xF3, 0xC2, 0x1C, 0xB0, 0x5B, - 0x44, 0xC3, 0x1E, 0xAC, 0xD7, 0xA9, 0x45, 0xE4, 0x39, 0x12, 0x66, 0xC1, 0x5A, 0x88, 0x34, 0x98, 0x45, 0x3E, 0x43, 0x80, 0x9B, - 0x2C, 0xD2, 0xEC, 0x25, 0xF7, 0x7B, 0x41, 0x48, 0x7F, 0x46, 0xC1, 0x65, 0xD6, 0x99, 0x67, 0x0B, 0x76, 0xC3, 0x52, 0xF8, 0x3D, - 0xB8, 0x08, 0xC2, 0xAC, 0xB3, 0x64, 0xE5, 0xFC, 0x16, 0x7F, 0xBD, 0xC4, 0x5F, 0xEB, 0xB8, 0xC4, 0x1F, 0xC3, 0x2E, 0x65, 0x15, - 0x51, 0xD6, 0x49, 0xD2, 0xFF, 0xDA, 0x24, 0x39, 0xF3, 0xBD, 0x65, 0xE1, 0x61, 0x62, 0x99, 0x7D, 0x95, 0xE7, 0xF1, 0x83, 0x85, - 0x49, 0x98, 0x7E, 0xF8, 0x57, 0xCE, 0x53, 0x29, 0x49, 0xE4, 0x03, 0x7B, 0x28, 0x20, 0x23, 0xCC, 0xA3, 0x94, 0xDD, 0xB7, 0xA8, - 0x9A, 0x5F, 0x76, 0x56, 0x2C, 0xBD, 0x29, 0x6F, 0x83, 0x30, 0x89, 0xBA, 0x97, 0xC9, 0x95, 0xFC, 0x7D, 0x19, 0xE4, 0xC8, 0x2A, - 0x60, 0x06, 0xA7, 0x49, 0xBB, 0x3D, 0x9B, 0x29, 0xAC, 0x8A, 0xC5, 0x3E, 0x9D, 0xED, 0xA8, 0x73, 0xDE, 0xB4, 0xD5, 0xBB, 0xEE, - 0xF7, 0x11, 0x30, 0x06, 0xAD, 0xE6, 0x57, 0x4C, 0xB5, 0xFA, 0xC8, 0x89, 0x96, 0x4D, 0x73, 0x68, 0x35, 0x4C, 0xC5, 0xC7, 0xE5, - 0xC7, 0x2C, 0x59, 0xB4, 0xBA, 0x47, 0x51, 0x94, 0xC2, 0x0A, 0x21, 0x26, 0x95, 0x06, 0x92, 0xAD, 0x94, 0x3B, 0xC2, 0x63, 0x1C, - 0x9D, 0xFE, 0xFE, 0xFB, 0xE9, 0x4D, 0x38, 0x8F, 0x4E, 0xBD, 0xD3, 0x1B, 0xC0, 0x5C, 0x52, 0xBC, 0x66, 0x05, 0xCB, 0x3F, 0xB2, - 0x85, 0xD5, 0x3D, 0xAF, 0x75, 0xFA, 0x87, 0x3F, 0x19, 0x2F, 0xB2, 0x6D, 0xB2, 0xDC, 0x26, 0xE9, 0x16, 0x40, 0xDA, 0xAE, 0x58, - 0xB9, 0x85, 0x71, 0x6F, 0xCB, 0xFC, 0x61, 0x0B, 0xED, 0x6D, 0xE7, 0x71, 0xC1, 0xB6, 0x6C, 0x85, 0xFF, 0xC0, 0x02, 0xD8, 0x32, - 0x20, 0xFC, 0xED, 0x32, 0xC6, 0xDF, 0x48, 0xAB, 0xDB, 0xF2, 0x36, 0x29, 0xA0, 0xEC, 0x86, 0x6D, 0x11, 0xB6, 0xED, 0x7D, 0x52, - 0xDE, 0x6E, 0xAF, 0x61, 0x8D, 0x7D, 0x80, 0x8A, 0x30, 0x43, 0xDB, 0xF9, 0x2A, 0x2E, 0x8A, 0xED, 0x3C, 0x4B, 0x8B, 0x72, 0x5B, - 0x6C, 0x80, 0x52, 0xA0, 0x46, 0x9E, 0xDD, 0x6F, 0xEF, 0x6F, 0x93, 0x15, 0xDB, 0x3E, 0x24, 0x6C, 0xB5, 0xD8, 0x2E, 0x18, 0x74, - 0x0A, 0xED, 0xD3, 0xCC, 0x6F, 0x93, 0x3B, 0xFA, 0xB3, 0xDE, 0x5C, 0xAF, 0x92, 0xF9, 0x96, 0x83, 0xB9, 0x2D, 0xCA, 0x18, 0xB8, - 0xFF, 0xB6, 0x80, 0xF6, 0xA1, 0x51, 0xBE, 0xC6, 0xB6, 0x82, 0xBE, 0xA1, 0x62, 0xC9, 0xD2, 0x45, 0xB1, 0x85, 0xB5, 0x0B, 0x34, - 0xF8, 0xB0, 0x5D, 0xC7, 0xF3, 0x0F, 0xF1, 0x0D, 0xDB, 0xAE, 0xF3, 0xE4, 0x23, 0x2C, 0x76, 0xEC, 0xBD, 0x4C, 0x52, 0x00, 0x71, - 0xC1, 0xAE, 0x37, 0x37, 0x37, 0x00, 0x83, 0x44, 0xC4, 0x36, 0xCE, 0x6F, 0x60, 0x55, 0xA7, 0x65, 0x01, 0xC3, 0x2F, 0x59, 0xBE, - 0x8C, 0xE7, 0x58, 0x2D, 0x2B, 0x61, 0xB2, 0xD8, 0x02, 0x41, 0x59, 0x31, 0x99, 0x0D, 0x20, 0xA4, 0x73, 0xE8, 0x36, 0xF8, 0xC7, - 0x69, 0xA7, 0x64, 0x45, 0x09, 0x48, 0xC4, 0xB9, 0x2D, 0xE2, 0x25, 0x31, 0x0C, 0x07, 0x72, 0x8F, 0x4E, 0xFF, 0x98, 0xFE, 0xE3, - 0xF7, 0xFB, 0x77, 0xB3, 0xB6, 0xAE, 0xB2, 0xDD, 0x9A, 0x33, 0x02, 0x09, 0x93, 0x2F, 0xA6, 0xDE, 0x17, 0x6D, 0xD6, 0xC9, 0xD9, - 0x7A, 0x05, 0xBD, 0xFB, 0x71, 0xE8, 0xFD, 0x0E, 0xFF, 0xF3, 0x02, 0x95, 0x32, 0x0F, 0xBF, 0x80, 0xDF, 0x5F, 0x04, 0xED, 0x2F, - 0xBC, 0xD9, 0x17, 0x63, 0xAF, 0xE3, 0xB5, 0x19, 0x76, 0xBC, 0x99, 0x7F, 0x9F, 0xE4, 0x45, 0xE9, 0xE8, 0x17, 0x96, 0xFE, 0xFC, - 0x36, 0xCE, 0xBF, 0x2A, 0xFD, 0x6E, 0x00, 0xB4, 0xF7, 0xDB, 0x1A, 0xD0, 0xFE, 0x0D, 0x4C, 0xA3, 0x1F, 0x40, 0x3F, 0xC5, 0xE6, - 0x9A, 0xF3, 0x2A, 0x58, 0x5F, 0x9C, 0x62, 0x36, 0xD1, 0xE9, 0x3B, 0x7F, 0x1A, 0x9F, 0xFC, 0x35, 0x0B, 0x88, 0x60, 0xE6, 0xF1, - 0x1D, 0x5B, 0x61, 0x79, 0x77, 0xD3, 0xBA, 0x81, 0x6E, 0xD8, 0xAB, 0xB6, 0xA8, 0x80, 0xDE, 0x18, 0x7B, 0xB3, 0xC9, 0x45, 0x4A, - 0x1B, 0xA0, 0x5D, 0x40, 0x48, 0x9C, 0x67, 0x77, 0xEB, 0x38, 0x67, 0xDF, 0x23, 0x39, 0x14, 0x5F, 0x3F, 0xFC, 0xB0, 0x70, 0xB3, - 0x20, 0xD6, 0x49, 0x16, 0x27, 0x25, 0xFC, 0x83, 0x75, 0x16, 0x6C, 0x9E, 0xE5, 0x30, 0xBD, 0x6F, 0x81, 0x18, 0xEA, 0x9B, 0x08, - 0xEB, 0xFC, 0x03, 0xA9, 0x44, 0xED, 0xF1, 0xC8, 0x2E, 0x29, 0xA5, 0x93, 0xC2, 0xF0, 0x60, 0x05, 0xE1, 0x1E, 0xA3, 0x1B, 0x79, - 0x9D, 0x65, 0x25, 0xC0, 0x7E, 0x97, 0x7D, 0x64, 0xAA, 0x6A, 0x68, 0xD6, 0x80, 0xBD, 0xBA, 0x52, 0x3A, 0x5E, 0x2C, 0x54, 0x51, - 0x55, 0xF6, 0x32, 0xD9, 0x6E, 0xFD, 0x04, 0xB9, 0xD6, 0x39, 0x30, 0x71, 0x2E, 0x4C, 0x20, 0x17, 0x49, 0xFC, 0x72, 0xBB, 0xE5, - 0x2D, 0x29, 0xDE, 0xEE, 0x68, 0x2F, 0x45, 0xA9, 0x61, 0x5E, 0x66, 0x39, 0x08, 0x08, 0x8D, 0xBB, 0x29, 0x75, 0xA4, 0x36, 0xD2, - 0x34, 0x34, 0x37, 0xA6, 0x5E, 0xF3, 0x36, 0xAC, 0x39, 0xF7, 0xD3, 0x4D, 0xA4, 0x9C, 0x32, 0x96, 0xC0, 0x95, 0x34, 0x94, 0xDF, - 0x41, 0xA1, 0x1A, 0xFF, 0xB4, 0xD1, 0x2C, 0xB1, 0x90, 0x02, 0x16, 0x90, 0x57, 0xF7, 0x05, 0x12, 0x4A, 0x42, 0x42, 0xEA, 0x7B, - 0xD8, 0x86, 0xD7, 0x5E, 0xB6, 0xDB, 0xE1, 0x5E, 0x3C, 0x94, 0x7B, 0x84, 0x09, 0x1B, 0xF6, 0xB2, 0x06, 0x7B, 0x49, 0xAB, 0x92, - 0x95, 0xB2, 0x4E, 0x54, 0xDD, 0x7A, 0x00, 0x6C, 0x29, 0x3F, 0x18, 0xDB, 0x35, 0xB1, 0xA5, 0x16, 0x12, 0xD3, 0x77, 0x79, 0x0E, - 0xAC, 0xD9, 0x5B, 0x14, 0x65, 0xEB, 0x6E, 0x03, 0xFF, 0x5C, 0xB3, 0x56, 0x0C, 0x50, 0xF2, 0x1A, 0x24, 0x34, 0x1C, 0x95, 0xF5, - 0xE2, 0xB8, 0x05, 0xA9, 0xF2, 0xC5, 0x9A, 0xCD, 0x93, 0x65, 0x02, 0x52, 0x97, 0x1A, 0xA5, 0x12, 0x41, 0x19, 0x6C, 0xB7, 0x39, - 0xCA, 0x79, 0x9C, 0x3A, 0x60, 0x8B, 0xBC, 0x4D, 0x96, 0x20, 0xD4, 0x72, 0x69, 0x84, 0x6F, 0x00, 0xAF, 0xBA, 0x41, 0x39, 0x4D, - 0x61, 0x5F, 0xF1, 0xF1, 0xCF, 0x76, 0x8B, 0x3B, 0x04, 0x54, 0xB9, 0x44, 0x3E, 0x4C, 0xF5, 0xB2, 0x08, 0x33, 0x2E, 0x33, 0x20, - 0xE2, 0x24, 0x9A, 0x82, 0x24, 0x9A, 0xA5, 0xC0, 0x6F, 0xFD, 0x2C, 0x90, 0x5F, 0x09, 0xD0, 0x24, 0x35, 0x91, 0xE8, 0xFD, 0x01, - 0x11, 0x10, 0x95, 0x9D, 0x62, 0xBD, 0x4A, 0x4A, 0x1F, 0xF8, 0x08, 0x6C, 0x71, 0xB0, 0xFA, 0xDC, 0x88, 0xCE, 0x50, 0xF4, 0xD1, - 0xB3, 0x02, 0xF8, 0x46, 0x19, 0xB3, 0x2E, 0x48, 0x14, 0x6A, 0xF2, 0x16, 0x30, 0xE7, 0xC6, 0x2F, 0x9C, 0x71, 0x1F, 0x28, 0x60, - 0x14, 0xC0, 0x12, 0x47, 0x59, 0x6F, 0xAF, 0x04, 0xE0, 0x57, 0x25, 0x9C, 0x24, 0x2A, 0xB5, 0xD4, 0xAE, 0xEA, 0xC8, 0x3D, 0x33, - 0xB1, 0xF6, 0x6A, 0xA0, 0x96, 0x14, 0x28, 0x35, 0xBD, 0x4A, 0xE4, 0xFE, 0xD9, 0x6E, 0xA7, 0x81, 0xDA, 0x2B, 0x41, 0x54, 0x07, - 0x44, 0xCC, 0x8E, 0x8F, 0x73, 0x80, 0x50, 0xFC, 0x40, 0x09, 0x1F, 0xFF, 0xAA, 0xE9, 0x61, 0x3B, 0xD5, 0x5B, 0x46, 0xBB, 0xB3, - 0xFC, 0x05, 0x4C, 0x5B, 0x10, 0xCD, 0x91, 0x8F, 0x9B, 0x5D, 0x4B, 0xEF, 0x04, 0xAD, 0x32, 0x90, 0x84, 0x8F, 0xE4, 0xCD, 0x4B, - 0x5E, 0xBA, 0xF1, 0x89, 0x55, 0x43, 0x0F, 0x14, 0x99, 0x02, 0x76, 0xA6, 0x46, 0x6C, 0x32, 0xC0, 0x54, 0x48, 0x04, 0x05, 0x5C, - 0x78, 0x0D, 0x49, 0xEC, 0x4D, 0x09, 0x9B, 0xD9, 0xDB, 0x1C, 0x58, 0xEA, 0xA4, 0x21, 0x9D, 0x37, 0x0D, 0x9A, 0xD5, 0xBE, 0x8E, - 0x0B, 0x2C, 0xAE, 0x16, 0x8D, 0x8F, 0xE0, 0x52, 0x73, 0x41, 0x87, 0x72, 0xB6, 0x5B, 0x0F, 0x05, 0xF8, 0xFC, 0xF8, 0x38, 0xE5, - 0x15, 0x72, 0x29, 0x56, 0xF8, 0x86, 0xC4, 0x57, 0x91, 0xA1, 0x39, 0x3C, 0x2A, 0x37, 0x20, 0xDA, 0x83, 0x09, 0xDD, 0x10, 0x03, - 0x2B, 0x1B, 0x08, 0xAB, 0x34, 0xF9, 0x10, 0xF2, 0xC3, 0xFD, 0xC8, 0x30, 0x05, 0x4E, 0xA9, 0x7D, 0x44, 0xF5, 0xB2, 0x08, 0x34, - 0x71, 0xD7, 0xB6, 0x37, 0x6E, 0x79, 0x6D, 0xFA, 0x29, 0x90, 0xBD, 0x03, 0x8E, 0x90, 0x74, 0xE2, 0x02, 0x20, 0xB8, 0x4B, 0x0A, - 0x54, 0x2B, 0x7A, 0x7D, 0x10, 0xE3, 0x3A, 0xD7, 0xB0, 0x01, 0x9D, 0x0D, 0x91, 0x49, 0xBD, 0xC4, 0x9F, 0xDF, 0x7D, 0x84, 0x7D, - 0xFE, 0xBB, 0xBB, 0xA4, 0x04, 0x31, 0x00, 0xE5, 0xCA, 0x2E, 0x26, 0x2E, 0x57, 0x59, 0x5C, 0xE2, 0xAF, 0x1E, 0xFE, 0x12, 0x32, - 0x25, 0xB6, 0x30, 0xC0, 0xDF, 0x9B, 0x72, 0x79, 0x81, 0x99, 0xD4, 0xDC, 0x3A, 0xCB, 0x56, 0xF8, 0x83, 0x72, 0x7E, 0xCC, 0xD2, - 0x9B, 0xAF, 0x13, 0x92, 0x62, 0x07, 0x43, 0xAA, 0x5A, 0xFC, 0x0C, 0x02, 0x6C, 0xF4, 0x35, 0x14, 0x62, 0x71, 0xEA, 0x6B, 0xDA, - 0x14, 0x7A, 0x0B, 0x0C, 0x72, 0x0E, 0xE0, 0x1A, 0x9F, 0x9D, 0x8F, 0x2C, 0x2F, 0x60, 0x8C, 0xCE, 0xB4, 0x4E, 0x0A, 0xAD, 0x61, - 0xBB, 0x37, 0xAB, 0xEC, 0x3A, 0x5E, 0x45, 0xB2, 0x03, 0x28, 0x0B, 0x53, 0xE9, 0xD0, 0xF9, 0xB8, 0xBE, 0x7C, 0x7C, 0xCC, 0xFF, - 0xBA, 0xCB, 0x14, 0x6C, 0xB5, 0x3C, 0x3E, 0xC6, 0x7F, 0xB7, 0x24, 0xD6, 0x41, 0xF3, 0xEC, 0x6E, 0x5D, 0x3E, 0x70, 0xC1, 0x59, - 0xCC, 0xE6, 0x32, 0x67, 0xEC, 0x2F, 0x36, 0xB1, 0x7E, 0x81, 0x66, 0x1F, 0x8C, 0x41, 0xBB, 0x17, 0xE5, 0x85, 0xAC, 0xBB, 0xAF, - 0xC2, 0xE3, 0x2E, 0x00, 0x65, 0x9A, 0xF0, 0xF2, 0x03, 0xC8, 0x5D, 0x20, 0x92, 0x45, 0x3F, 0x6F, 0xEE, 0xAE, 0x59, 0xAE, 0x13, - 0xB6, 0xDB, 0xBA, 0xF4, 0xE1, 0xA5, 0x54, 0xC8, 0x52, 0xFB, 0x92, 0xE2, 0xFB, 0x24, 0x4D, 0x80, 0x1C, 0x59, 0x70, 0x7C, 0xFC, - 0x13, 0x30, 0x61, 0x9C, 0xB4, 0x0C, 0x75, 0xC7, 0x08, 0xD0, 0xCB, 0xFB, 0xA8, 0x92, 0x8D, 0x6E, 0x50, 0xA8, 0x6D, 0xBA, 0x41, - 0xD8, 0xA5, 0xCD, 0x15, 0xCE, 0x6B, 0xF2, 0x56, 0x1C, 0x32, 0xBC, 0xA4, 0x54, 0x97, 0x46, 0xCA, 0x2B, 0xC1, 0x46, 0x44, 0xB3, - 0xF3, 0x86, 0x55, 0x35, 0x5D, 0xE4, 0x63, 0x39, 0x6A, 0x0E, 0x52, 0x69, 0x38, 0x22, 0xED, 0x2F, 0x8A, 0x60, 0xE8, 0x47, 0x55, - 0xED, 0x0A, 0x78, 0x1C, 0x0C, 0xAF, 0xBE, 0x6F, 0x21, 0x4B, 0xA3, 0xF9, 0x81, 0x2E, 0xB8, 0xA6, 0x92, 0x07, 0x13, 0xB9, 0x8B, - 0x8C, 0x4D, 0x26, 0x09, 0x4B, 0x5D, 0xA8, 0x30, 0xB0, 0xB9, 0x20, 0x6C, 0x5F, 0x6F, 0x96, 0x4B, 0x96, 0x9B, 0x6B, 0x09, 0x44, - 0x7E, 0x82, 0x8A, 0x45, 0x89, 0xD6, 0x9F, 0xAE, 0xA9, 0x18, 0x88, 0xA3, 0xBC, 0xBC, 0xE2, 0x97, 0xC6, 0xBA, 0xC4, 0x75, 0xF0, - 0x9F, 0x39, 0xCC, 0xC1, 0x04, 0x64, 0x09, 0x18, 0xC2, 0x8E, 0x44, 0x7F, 0x03, 0x3F, 0x94, 0xB8, 0xF3, 0x91, 0x60, 0xDF, 0xF1, - 0x66, 0xDE, 0x2D, 0x61, 0x35, 0x46, 0xA4, 0xED, 0xEA, 0x34, 0x10, 0xDE, 0xB3, 0xF9, 0x6F, 0x29, 0x4A, 0xD4, 0x32, 0x0B, 0x18, - 0x55, 0x15, 0xCE, 0x3D, 0xD4, 0x30, 0x91, 0xA3, 0x9A, 0x38, 0x1B, 0x85, 0xAA, 0x63, 0x12, 0xC6, 0x3A, 0x1C, 0x55, 0xF0, 0xD3, - 0x51, 0x01, 0x21, 0xC3, 0x2C, 0x63, 0x89, 0xA8, 0x1E, 0x7E, 0x03, 0x2D, 0xE1, 0x82, 0x2A, 0xE3, 0x50, 0xA1, 0x29, 0x9D, 0x40, - 0xEA, 0x80, 0x68, 0x39, 0x72, 0x2D, 0x2F, 0xA3, 0xAE, 0xFE, 0x1C, 0xD3, 0xBF, 0x82, 0x63, 0x44, 0x72, 0x3D, 0x77, 0x16, 0xA8, - 0xEE, 0xFE, 0xF0, 0x0B, 0x50, 0x77, 0x25, 0x85, 0xCA, 0x6D, 0xB7, 0x2A, 0x59, 0xFE, 0x54, 0xD3, 0xB5, 0x82, 0x04, 0x0F, 0x11, - 0x0D, 0x93, 0xDE, 0x7F, 0xCD, 0xA2, 0xD3, 0x3F, 0x48, 0x39, 0xE3, 0x1A, 0x5B, 0x77, 0xDB, 0xFB, 0xC7, 0x29, 0xCF, 0x1B, 0xF0, - 0xCC, 0x93, 0x09, 0xE8, 0x7F, 0xDD, 0xED, 0xB4, 0x77, 0xF2, 0x72, 0x36, 0xED, 0xC2, 0x3F, 0x5F, 0x06, 0xB2, 0xC4, 0xD9, 0x90, - 0x4A, 0x40, 0xFE, 0xF4, 0xF7, 0xDF, 0xFF, 0xEC, 0x76, 0x4F, 0xE0, 0xDF, 0xE5, 0x72, 0xF6, 0x78, 0xB1, 0xDB, 0x3A, 0x6A, 0xF1, - 0x6A, 0xD8, 0xFB, 0xDB, 0xEC, 0x9F, 0x71, 0x71, 0xEB, 0x5C, 0x26, 0x13, 0xCD, 0x19, 0x3B, 0x02, 0xCD, 0xC0, 0xD4, 0xB1, 0xB8, - 0x8F, 0x53, 0xA1, 0xF2, 0xFE, 0x62, 0x39, 0xA5, 0xEE, 0x44, 0x93, 0xDF, 0x43, 0xD9, 0x4A, 0xA3, 0x7A, 0x05, 0x55, 0xDA, 0xA4, - 0xD6, 0xB4, 0x70, 0xC9, 0x73, 0x45, 0xC7, 0x54, 0x00, 0x4B, 0xA2, 0xA0, 0x95, 0x85, 0x79, 0xE7, 0x36, 0xC1, 0x8D, 0x33, 0x07, - 0x20, 0x38, 0xFB, 0xF1, 0x25, 0x83, 0x2E, 0x03, 0x9A, 0x4D, 0x10, 0x2C, 0x6F, 0x80, 0x16, 0x11, 0x8C, 0x43, 0xB5, 0xAD, 0x1F, - 0xB3, 0xFB, 0x26, 0x6D, 0x8B, 0xD3, 0x33, 0x6D, 0x9B, 0x51, 0x06, 0x3F, 0x7E, 0xC5, 0x15, 0x34, 0xCF, 0x56, 0x22, 0xC5, 0xF7, - 0xAC, 0x04, 0x9A, 0xC5, 0x2C, 0x65, 0xBF, 0x2C, 0xFF, 0x8D, 0xD1, 0xA6, 0x74, 0xA8, 0xF1, 0xA0, 0xDD, 0xCE, 0x41, 0x7A, 0x64, - 0xD3, 0x1C, 0xC4, 0x9C, 0x5E, 0x55, 0xFC, 0xF4, 0x75, 0x5D, 0x66, 0x0B, 0x51, 0xC0, 0xF1, 0xD1, 0xE6, 0x21, 0x9B, 0x39, 0x81, - 0xAA, 0xAF, 0xE0, 0x9F, 0x93, 0x93, 0x3C, 0x40, 0xA3, 0x1C, 0x70, 0x53, 0xD1, 0xE8, 0xF1, 0xB1, 0xDA, 0xBE, 0xB0, 0x92, 0x4C, - 0xC4, 0x15, 0x6B, 0x25, 0x29, 0xA5, 0x00, 0x7E, 0xEC, 0x76, 0x72, 0x30, 0x6F, 0xEA, 0x83, 0xA9, 0x82, 0x58, 0x6A, 0x18, 0x1D, - 0x43, 0xC3, 0xE6, 0xB8, 0xFE, 0xC6, 0xED, 0x06, 0x2D, 0xDD, 0x23, 0xF5, 0x52, 0x66, 0xFF, 0xDF, 0x9B, 0x5F, 0x7E, 0xFE, 0x65, - 0x8D, 0x4D, 0x15, 0xD1, 0x23, 0xD2, 0x4F, 0x31, 0xE6, 0x7C, 0x9C, 0x74, 0x05, 0xF5, 0xE3, 0xFA, 0x01, 0x74, 0x72, 0xF9, 0xE3, - 0x7D, 0x91, 0xA5, 0x68, 0x94, 0x44, 0x76, 0x04, 0x62, 0xCC, 0x32, 0xB9, 0x01, 0x21, 0xCB, 0x64, 0x8E, 0x92, 0x31, 0x0A, 0x36, - 0xC8, 0x26, 0x7E, 0x85, 0x99, 0x31, 0xA2, 0x2E, 0x80, 0x4C, 0xAF, 0x6E, 0x4A, 0xC1, 0xFD, 0x1B, 0xFF, 0x1A, 0x1B, 0x1A, 0xC9, - 0xB2, 0x86, 0xE4, 0x48, 0x2A, 0x01, 0xD1, 0x87, 0x8B, 0x15, 0xB2, 0x8E, 0xF1, 0xCB, 0x6C, 0xA5, 0xDA, 0x06, 0x68, 0xD3, 0xE3, - 0x0A, 0x50, 0xCD, 0xCC, 0x15, 0x84, 0x2B, 0x6E, 0xB2, 0xE3, 0xF2, 0x9E, 0xDF, 0xBF, 0x08, 0x9E, 0x12, 0xD2, 0xB5, 0x71, 0xAE, - 0x10, 0x46, 0x55, 0x10, 0x6F, 0x82, 0x4B, 0x1F, 0xC4, 0xFE, 0x26, 0x19, 0x31, 0x69, 0x94, 0x0F, 0x0B, 0xF8, 0x89, 0xB6, 0xA1, - 0x9F, 0x51, 0xB9, 0xE6, 0x7A, 0xA1, 0xD0, 0x97, 0x73, 0x7F, 0x14, 0x84, 0x19, 0xFC, 0xE9, 0x06, 0x5A, 0x05, 0x28, 0x38, 0x44, - 0x68, 0x24, 0x24, 0x61, 0x3C, 0x31, 0x80, 0x47, 0xB1, 0x3B, 0x34, 0xAC, 0xC2, 0x8A, 0xE5, 0x3A, 0xD4, 0x34, 0x12, 0x80, 0x8B, - 0x26, 0xC5, 0x8E, 0xE4, 0x46, 0x5E, 0x84, 0xAC, 0x10, 0xB0, 0xB8, 0x8C, 0xA4, 0xCA, 0xD8, 0x2A, 0x85, 0x03, 0x5E, 0x74, 0x9E, - 0xDD, 0xA1, 0xC5, 0x08, 0x98, 0x86, 0xF9, 0xB3, 0x88, 0x32, 0xD2, 0xE2, 0x28, 0x2D, 0x97, 0xF6, 0x38, 0xBE, 0x8E, 0x80, 0x05, - 0x49, 0x72, 0x2F, 0xAA, 0x7A, 0x4D, 0x0C, 0xF4, 0x1F, 0x5F, 0x15, 0x9A, 0xFE, 0xE3, 0xA0, 0xB6, 0xED, 0x95, 0xD3, 0x62, 0x1A, - 0xE3, 0x0A, 0xAC, 0x42, 0x34, 0x35, 0x7E, 0xF3, 0x32, 0x91, 0x28, 0x3B, 0x8B, 0xF0, 0x4F, 0xB0, 0xE3, 0x2C, 0x13, 0xD7, 0x8B, - 0x93, 0xB5, 0x22, 0x5D, 0x11, 0xE2, 0x45, 0x23, 0xF0, 0x91, 0xF1, 0x75, 0x05, 0x5F, 0x62, 0x64, 0xFA, 0xAB, 0x08, 0xB4, 0x4D, - 0x59, 0x0D, 0xB1, 0x54, 0x9F, 0x61, 0xBE, 0x0B, 0x0B, 0x4B, 0x9A, 0xAF, 0xF4, 0x2B, 0x4D, 0xDB, 0x47, 0x47, 0x20, 0x4F, 0x49, - 0x46, 0xCC, 0x00, 0x15, 0x6C, 0xFD, 0x4D, 0xB5, 0x07, 0x6D, 0x53, 0xF5, 0xA7, 0x9E, 0x80, 0xC9, 0xE3, 0xD8, 0x95, 0x10, 0x8A, - 0xA9, 0xF6, 0xCC, 0x19, 0x0C, 0x3D, 0x09, 0x8D, 0x67, 0x4F, 0xC5, 0xF1, 0xB1, 0xF5, 0x53, 0xE0, 0x7B, 0x62, 0x25, 0x8E, 0xC5, - 0x74, 0x79, 0x62, 0xBC, 0xD0, 0xC4, 0xC4, 0x9C, 0xE3, 0x6A, 0x7E, 0x51, 0x2D, 0x50, 0x88, 0x12, 0x80, 0x78, 0x0B, 0x13, 0xF1, - 0x62, 0xE1, 0x32, 0x52, 0x1C, 0x65, 0x4A, 0x74, 0xC5, 0x93, 0x90, 0x1A, 0x29, 0xA3, 0xBA, 0xA3, 0x09, 0xB9, 0x25, 0x44, 0x59, - 0x6E, 0xA0, 0xC8, 0xB4, 0x20, 0x8D, 0x7B, 0x59, 0xAD, 0x2E, 0x80, 0x61, 0x2C, 0x81, 0x84, 0x97, 0xE4, 0x75, 0x2D, 0xE6, 0x2E, - 0xA9, 0x87, 0xCD, 0x44, 0x1B, 0xD2, 0x38, 0xB2, 0x59, 0xAF, 0x12, 0x10, 0xF3, 0x58, 0x8B, 0xA0, 0xF8, 0xC2, 0x6B, 0x83, 0xE6, - 0xF5, 0x05, 0x9E, 0x74, 0x70, 0xE5, 0x4B, 0xAF, 0x26, 0x6D, 0xEC, 0xFC, 0x61, 0xA1, 0x41, 0xD1, 0x60, 0x40, 0xF9, 0xB6, 0xD7, - 0x02, 0xBD, 0x5A, 0xA2, 0x79, 0x7F, 0x23, 0xC8, 0x2E, 0x34, 0x36, 0x4C, 0x4C, 0x28, 0x18, 0x1A, 0x9B, 0x72, 0x8D, 0x8C, 0xAF, - 0x93, 0x19, 0x47, 0xB8, 0x49, 0x3F, 0x20, 0x84, 0x9B, 0x3F, 0x89, 0x07, 0xDF, 0x03, 0x17, 0x4D, 0xE2, 0xA2, 0x09, 0x15, 0x7A, - 0x34, 0xBA, 0x5B, 0x1B, 0x89, 0x51, 0xB9, 0x43, 0x13, 0x4E, 0x6B, 0xDF, 0x42, 0xC5, 0x52, 0xB3, 0x88, 0x5D, 0x9A, 0x9A, 0xAD, - 0x24, 0x20, 0xCC, 0x04, 0x91, 0x9F, 0x84, 0x63, 0xCC, 0xB0, 0xE9, 0x88, 0xDB, 0x2F, 0xAB, 0x26, 0xBA, 0x4F, 0x25, 0x23, 0xBE, - 0x18, 0x6D, 0xC8, 0x10, 0x8B, 0x5C, 0x49, 0x29, 0xF7, 0xCC, 0xC0, 0x22, 0x03, 0x0E, 0x9B, 0x66, 0x65, 0x8B, 0xFD, 0x99, 0x40, - 0xB3, 0x06, 0x36, 0xC4, 0x98, 0x8C, 0x8D, 0xDB, 0x9E, 0x86, 0xB0, 0x9E, 0x03, 0xBD, 0x5A, 0xA9, 0x06, 0x2A, 0x1C, 0x28, 0x30, - 0xA9, 0xCD, 0x25, 0x63, 0xA4, 0x15, 0x7A, 0x34, 0xD7, 0x77, 0xC8, 0x82, 0xA6, 0xC6, 0x68, 0x93, 0x7A, 0xA2, 0x39, 0xA2, 0xCC, - 0x5A, 0x83, 0x07, 0x6F, 0xA9, 0x19, 0x9A, 0xC1, 0xF5, 0x86, 0xF8, 0x9A, 0x2D, 0x57, 0x8C, 0xEA, 0x71, 0x36, 0xA7, 0x0E, 0xC9, - 0x2A, 0xFB, 0x62, 0xA6, 0x2C, 0xDE, 0x47, 0xE9, 0x27, 0xB3, 0x0B, 0xD8, 0x3B, 0xA9, 0xB6, 0xE0, 0xA8, 0x2E, 0x86, 0x21, 0x96, - 0x81, 0x73, 0xE3, 0x34, 0xD7, 0x49, 0x54, 0x72, 0xC6, 0xBA, 0x8E, 0xF3, 0x82, 0x2D, 0xA4, 0x14, 0xA6, 0x08, 0x96, 0xDB, 0xD2, - 0x99, 0x2A, 0x43, 0x3B, 0xA5, 0xCA, 0x04, 0xC4, 0x65, 0x2B, 0xDC, 0x35, 0x8E, 0x7A, 0x95, 0xCD, 0x54, 0x15, 0x59, 0x26, 0xC0, - 0x9A, 0xB1, 0x0D, 0x92, 0x61, 0x5C, 0x26, 0xA6, 0x84, 0x15, 0x7E, 0x66, 0x18, 0x99, 0x1E, 0xF3, 0x2C, 0x2B, 0xC7, 0x55, 0x1B, - 0x93, 0x16, 0x82, 0xB1, 0xD9, 0x4B, 0x21, 0xBC, 0x32, 0x01, 0xD3, 0x65, 0xC0, 0xF4, 0xB7, 0x36, 0x47, 0xC1, 0x5C, 0xAE, 0x56, - 0x38, 0x3F, 0x7B, 0x9A, 0x9B, 0xAA, 0x61, 0xCE, 0x42, 0xB1, 0x7C, 0x44, 0x3B, 0xD8, 0x6A, 0x67, 0x93, 0x72, 0x73, 0x6F, 0xC9, - 0xCF, 0x02, 0xC8, 0x20, 0x5B, 0xE9, 0xA7, 0xF3, 0x3E, 0x4B, 0x52, 0xB2, 0xCF, 0xEE, 0xD0, 0x02, 0x96, 0xED, 0xD9, 0x33, 0x41, - 0x67, 0x37, 0x56, 0x21, 0x1D, 0xA5, 0xE8, 0xC2, 0x59, 0xFA, 0xD5, 0xC2, 0x5E, 0x04, 0x06, 0x34, 0x62, 0xC3, 0xE3, 0x3F, 0xB8, - 0x21, 0xCA, 0x48, 0x90, 0x47, 0x21, 0x5C, 0x29, 0x30, 0x27, 0x8B, 0xD5, 0x66, 0x4A, 0x30, 0x0A, 0x60, 0x3F, 0x80, 0xE7, 0xCB, - 0xD2, 0xB4, 0x9E, 0x24, 0xD0, 0x68, 0xE7, 0xDD, 0x6D, 0x9C, 0x2E, 0x56, 0xEC, 0xAB, 0x05, 0x5F, 0x6E, 0x35, 0x20, 0x5F, 0xD7, - 0xB9, 0xD6, 0x61, 0x2D, 0xBE, 0x6E, 0x82, 0xD1, 0x49, 0x50, 0x76, 0xB7, 0x22, 0xA3, 0xC9, 0x92, 0x28, 0xEB, 0x71, 0x43, 0x18, - 0xC1, 0x51, 0x81, 0xC2, 0xAF, 0xB4, 0xDF, 0x0D, 0x04, 0x37, 0x32, 0x7B, 0x01, 0x22, 0xE1, 0x2B, 0xA0, 0xCA, 0x93, 0xCD, 0x15, - 0x13, 0x98, 0x1D, 0x8B, 0x34, 0x60, 0x6E, 0x76, 0x4B, 0x85, 0xA3, 0xA5, 0xD0, 0x54, 0x23, 0x72, 0x31, 0x7F, 0xA2, 0x81, 0x8A, - 0x8E, 0x66, 0xB4, 0xBB, 0xDD, 0xFA, 0x56, 0xF7, 0xF0, 0xDB, 0x5A, 0xBF, 0x8F, 0xBB, 0x20, 0xA0, 0x3D, 0xC8, 0x35, 0x20, 0x3C, - 0x56, 0x31, 0x16, 0x76, 0x0D, 0x98, 0xFA, 0xD2, 0x97, 0xCD, 0xDB, 0xFC, 0x60, 0x3A, 0x0B, 0x84, 0x06, 0x51, 0xCF, 0xA4, 0x73, - 0x90, 0x40, 0x9C, 0x72, 0x24, 0xB0, 0xE0, 0xD3, 0x85, 0xEF, 0x3B, 0x94, 0x9E, 0x83, 0xFC, 0x11, 0x4A, 0xE4, 0xC1, 0x01, 0x31, - 0xB9, 0x8C, 0xB7, 0x09, 0x9C, 0x16, 0x37, 0xB2, 0xD4, 0x3C, 0x22, 0xF2, 0x41, 0x01, 0x42, 0xC7, 0x05, 0xDC, 0x9B, 0xFD, 0x0C, - 0x51, 0x80, 0x18, 0xB0, 0x8B, 0xD0, 0x11, 0x4C, 0x49, 0x96, 0xDE, 0x4D, 0x71, 0x0B, 0xAD, 0xED, 0xD4, 0x61, 0x4C, 0x8C, 0x2E, - 0x46, 0x31, 0x21, 0x4D, 0x66, 0xC7, 0xFA, 0x58, 0xDE, 0x85, 0x44, 0x89, 0x87, 0xFA, 0xB1, 0x65, 0xA0, 0x35, 0xDF, 0x8A, 0x3B, - 0x02, 0x77, 0x3C, 0xC8, 0xB5, 0x2A, 0x90, 0x04, 0x84, 0x3C, 0xD5, 0x9C, 0x8F, 0xAE, 0x08, 0x21, 0x28, 0xC2, 0xF0, 0x07, 0x5D, - 0xAD, 0x2E, 0x1B, 0x21, 0x70, 0x19, 0xD2, 0x35, 0x33, 0x34, 0xD5, 0x34, 0xBD, 0x25, 0x49, 0x66, 0x26, 0x59, 0xA0, 0x6A, 0x5D, - 0xCA, 0xCA, 0xB0, 0xF5, 0xE3, 0x3E, 0x3F, 0xA6, 0xC3, 0x69, 0x97, 0x0E, 0x8D, 0xA4, 0x1F, 0xB1, 0xC3, 0x77, 0xC4, 0x8D, 0xAD, - 0x64, 0x6E, 0x3E, 0x41, 0xC9, 0xDC, 0x58, 0x4A, 0x26, 0x1D, 0x2F, 0x0B, 0x2D, 0x93, 0x14, 0xCC, 0x3E, 0xF7, 0x30, 0x39, 0x43, - 0x3D, 0x0B, 0xB7, 0x55, 0x74, 0x9A, 0xF8, 0x23, 0x67, 0x64, 0x4A, 0x5B, 0x6C, 0xF9, 0x8A, 0x88, 0x57, 0xDB, 0x9C, 0xAD, 0xB1, - 0x9F, 0xC5, 0x3F, 0x4E, 0xF5, 0xBE, 0xBB, 0xD1, 0xFA, 0x68, 0xB8, 0x09, 0x97, 0x34, 0x79, 0xB1, 0xDE, 0x42, 0xD3, 0x60, 0xE2, - 0x2F, 0x61, 0x4F, 0xDF, 0x80, 0x1E, 0x98, 0x46, 0x99, 0xD0, 0xF4, 0x82, 0xB1, 0x51, 0x24, 0x43, 0x83, 0xEE, 0x32, 0xDA, 0x40, - 0x19, 0xD8, 0xFB, 0x65, 0x89, 0xD0, 0x56, 0x6C, 0x37, 0x41, 0x78, 0x14, 0x5B, 0xB2, 0x3C, 0xB0, 0xA4, 0xAB, 0xEE, 0x7E, 0x81, - 0x1E, 0x64, 0xAF, 0xF4, 0x24, 0x65, 0x37, 0x71, 0x99, 0x7C, 0x64, 0xB6, 0x70, 0x4F, 0x8D, 0x09, 0x21, 0x21, 0x77, 0x6C, 0xF3, - 0x88, 0xC3, 0x06, 0x21, 0xC1, 0xF4, 0x3D, 0x39, 0x9A, 0x73, 0x7F, 0x86, 0x14, 0x16, 0x89, 0x24, 0x26, 0xBF, 0x62, 0xFD, 0x72, - 0xB4, 0x9E, 0x6F, 0x56, 0xF5, 0xD6, 0x5B, 0x98, 0x5A, 0xE9, 0x22, 0x83, 0x2E, 0x0C, 0x48, 0x33, 0x47, 0x5B, 0xDC, 0xE9, 0xC3, - 0x05, 0x2B, 0xE7, 0xCC, 0xD0, 0x28, 0x42, 0xEA, 0xC9, 0x59, 0xF4, 0x10, 0xF2, 0x49, 0x2A, 0x95, 0x34, 0x2A, 0x44, 0xB4, 0x94, - 0xF3, 0xEF, 0x64, 0x21, 0x45, 0x17, 0xDE, 0x32, 0x2A, 0xEC, 0x66, 0x59, 0x49, 0x16, 0x91, 0x27, 0xBF, 0x40, 0x03, 0x97, 0x5A, - 0xBE, 0xEC, 0x24, 0x3A, 0xB2, 0xCA, 0xCA, 0x9A, 0x9C, 0x7C, 0xB0, 0x26, 0xFF, 0x32, 0x6A, 0xDE, 0xC5, 0x6B, 0x25, 0xED, 0x88, - 0x03, 0x2B, 0x63, 0xFF, 0x02, 0xC6, 0x58, 0xFE, 0xB2, 0x34, 0x12, 0x10, 0xE2, 0x6F, 0xB9, 0xDB, 0x8B, 0x91, 0x2A, 0x1C, 0x61, - 0xFE, 0x03, 0x05, 0x66, 0x23, 0x19, 0x4D, 0x5F, 0xA0, 0x4D, 0xC7, 0x64, 0xFB, 0x34, 0x76, 0x04, 0x9E, 0x33, 0xCD, 0xB9, 0x00, - 0xDD, 0x21, 0x3B, 0x58, 0xE4, 0xD1, 0x1F, 0x84, 0x2C, 0xB7, 0xF7, 0x4E, 0xF2, 0xAF, 0xD0, 0x8D, 0x12, 0x76, 0xF0, 0x10, 0x8A, - 0x56, 0x93, 0x05, 0x04, 0x2C, 0x35, 0x9C, 0x82, 0x6A, 0xC6, 0x3B, 0xF4, 0xC7, 0x61, 0x66, 0x8A, 0x14, 0xEB, 0x96, 0xBB, 0x4D, - 0x93, 0x01, 0xC2, 0xB0, 0x6C, 0xD1, 0x52, 0x83, 0xF9, 0x81, 0x7F, 0x48, 0xA0, 0x2B, 0x69, 0x72, 0xE1, 0x0F, 0x9F, 0x28, 0x97, - 0x51, 0xA2, 0xF1, 0x58, 0x7B, 0x63, 0x9E, 0x3E, 0x72, 0xB8, 0x1A, 0xCF, 0x1F, 0xB9, 0xA2, 0x13, 0x99, 0x63, 0x90, 0xFB, 0xBE, - 0x1C, 0xD2, 0x51, 0x4F, 0x6E, 0xB0, 0x6A, 0xAB, 0xF7, 0x65, 0xB3, 0x41, 0x60, 0x0D, 0x1F, 0x45, 0xB9, 0xCD, 0x33, 0x76, 0x74, - 0xD9, 0x4C, 0x44, 0xB2, 0x99, 0x5F, 0xC3, 0x24, 0xED, 0x44, 0xF5, 0xD6, 0x2C, 0xEE, 0xC1, 0xAD, 0x8A, 0x9B, 0xCF, 0x65, 0x74, - 0x89, 0x4D, 0xA3, 0x0B, 0xAD, 0xDA, 0xD0, 0x5A, 0x5E, 0x6A, 0xE1, 0x49, 0x6B, 0x0A, 0x7C, 0xAA, 0x45, 0xE4, 0x71, 0xB7, 0x0D, - 0x45, 0xC5, 0x21, 0xB0, 0x2C, 0x4F, 0x2E, 0xBD, 0x50, 0x2C, 0x67, 0xCF, 0x5C, 0x81, 0x61, 0x93, 0x61, 0x67, 0xBF, 0xFD, 0x65, - 0x56, 0x19, 0xB2, 0x43, 0xD4, 0x93, 0x12, 0x98, 0x24, 0x71, 0x53, 0x04, 0xD3, 0x7C, 0x08, 0x30, 0xEF, 0xD7, 0x16, 0x9D, 0x5A, - 0x6C, 0xC5, 0x54, 0xE5, 0xCD, 0x82, 0xAA, 0x3C, 0x48, 0x6B, 0xC6, 0x77, 0x2C, 0x8B, 0x89, 0x23, 0x4D, 0x88, 0xAD, 0x63, 0x43, - 0x84, 0x0D, 0x60, 0x85, 0x66, 0x1F, 0x36, 0x6B, 0x6C, 0xE7, 0x97, 0x1C, 0x8D, 0xA3, 0x1A, 0x92, 0xA0, 0xBE, 0x3C, 0x4D, 0xD9, - 0x34, 0x9D, 0x38, 0x19, 0xC5, 0xB8, 0x96, 0x5A, 0x6B, 0x45, 0x2A, 0xDC, 0xD5, 0x53, 0x01, 0x57, 0xA1, 0x60, 0xDA, 0x9D, 0xCD, - 0x02, 0x6B, 0x5E, 0xE4, 0x09, 0x80, 0x65, 0x35, 0x11, 0xC8, 0x92, 0xF8, 0xA9, 0xF5, 0x5F, 0x29, 0xB7, 0x7F, 0x68, 0x99, 0xF6, - 0xB3, 0xD5, 0xC6, 0xCF, 0x4A, 0xB3, 0x8D, 0x3D, 0xB9, 0x46, 0x5A, 0x2D, 0x39, 0x0B, 0xAA, 0x43, 0xF2, 0x8F, 0xAA, 0x22, 0x74, - 0x47, 0x71, 0x02, 0x45, 0x25, 0x8E, 0x6C, 0x69, 0x3D, 0x32, 0x7B, 0x95, 0xCA, 0x44, 0xD3, 0xE8, 0x60, 0x6B, 0x37, 0x0D, 0x1D, - 0x76, 0x83, 0x61, 0x6D, 0x56, 0xA4, 0xFA, 0x20, 0xE4, 0xAF, 0xAA, 0x1C, 0x2F, 0xE4, 0x89, 0x40, 0x6F, 0x05, 0x41, 0x0D, 0x31, - 0xB1, 0x3E, 0x15, 0x13, 0xE7, 0x5F, 0xD5, 0x22, 0xA1, 0xB7, 0xF1, 0xE4, 0x08, 0x69, 0x35, 0xA9, 0xA3, 0x2E, 0xE5, 0xA1, 0xC5, - 0x8F, 0xF4, 0x95, 0xEB, 0xB8, 0x38, 0xE1, 0xAF, 0x36, 0xC4, 0x7D, 0x97, 0x5A, 0x72, 0xE5, 0xD1, 0x66, 0x73, 0xC0, 0x74, 0x0A, - 0xB9, 0xF4, 0x32, 0x16, 0xEE, 0x1A, 0x5C, 0xEC, 0xA8, 0x95, 0x9A, 0xA8, 0x7C, 0xF4, 0x3F, 0x5A, 0xD4, 0xBB, 0x0F, 0x19, 0x0C, - 0x56, 0x1D, 0x26, 0xFB, 0xAA, 0x38, 0xC7, 0x5D, 0xBD, 0xC1, 0x20, 0x24, 0x61, 0x0D, 0x4F, 0xB6, 0x3B, 0xF7, 0x78, 0xB4, 0xFD, - 0x74, 0x8B, 0x54, 0x76, 0x5F, 0x7B, 0xF5, 0x1D, 0x9C, 0x99, 0x4A, 0x02, 0x8A, 0x02, 0x92, 0x3D, 0x18, 0xDB, 0x79, 0x6C, 0x3A, - 0x55, 0x8C, 0x2D, 0x81, 0xA2, 0xB9, 0x34, 0x3F, 0x5B, 0xAE, 0x67, 0xD7, 0x06, 0x61, 0xF0, 0x1C, 0x8B, 0x89, 0xC8, 0x65, 0x24, - 0xCC, 0x01, 0xA4, 0x0A, 0x28, 0x96, 0x6A, 0x98, 0x38, 0xA2, 0x5A, 0x1F, 0xF6, 0xBE, 0x24, 0x88, 0x5D, 0xEF, 0x4A, 0xC4, 0x9C, - 0xAB, 0xE6, 0x6E, 0xBA, 0xF5, 0xC0, 0x77, 0xBD, 0xFA, 0x85, 0x12, 0x60, 0xF2, 0x30, 0x2C, 0xD3, 0xDB, 0x13, 0xA4, 0x60, 0xEA, - 0x7D, 0xEC, 0xBA, 0x09, 0x40, 0x1C, 0xC0, 0xA8, 0xC0, 0x99, 0x67, 0x20, 0xCC, 0x2D, 0xAA, 0x5F, 0x3A, 0x47, 0xAA, 0x34, 0x9B, - 0x9A, 0xBA, 0x43, 0xC0, 0x1D, 0x32, 0x49, 0xFE, 0xC8, 0xF8, 0x5E, 0x1A, 0x3E, 0x8A, 0x81, 0xE2, 0x5D, 0x0B, 0x34, 0xED, 0x6D, - 0x9A, 0xF4, 0x9C, 0xF4, 0x39, 0x7A, 0xCE, 0xD2, 0xD6, 0x73, 0x96, 0x9F, 0xA0, 0xE7, 0x2C, 0x2D, 0x3D, 0x07, 0xFF, 0x2D, 0x80, - 0x6D, 0x30, 0xA5, 0xEB, 0x84, 0x05, 0x69, 0x38, 0x43, 0xD4, 0x70, 0x6C, 0xFB, 0xE1, 0x46, 0xAB, 0x9E, 0x78, 0x50, 0x29, 0x5C, - 0x44, 0x8C, 0xF3, 0x57, 0x74, 0xD3, 0x21, 0xCD, 0x93, 0x99, 0x9A, 0x67, 0x3E, 0xA5, 0x0B, 0x30, 0x9C, 0x06, 0xE8, 0x93, 0x4B, - 0x16, 0xBE, 0x56, 0x3B, 0xF3, 0x9D, 0x76, 0xA9, 0x5B, 0x8A, 0x5E, 0x6C, 0xE9, 0x44, 0xAC, 0x88, 0x14, 0x96, 0xB4, 0x71, 0x18, - 0x46, 0x82, 0x0E, 0x4F, 0xE3, 0xCE, 0x14, 0x64, 0xE9, 0x53, 0x4D, 0x2D, 0xAC, 0x93, 0xF7, 0x5A, 0xC1, 0x90, 0xED, 0x96, 0x07, - 0xC8, 0x94, 0x04, 0x90, 0x66, 0xA1, 0x30, 0xD5, 0x1C, 0x7A, 0x01, 0x0C, 0x9E, 0x84, 0x76, 0x62, 0x6C, 0xF4, 0x2D, 0x17, 0x98, - 0x40, 0xC5, 0x6B, 0xB2, 0x2D, 0x3B, 0x34, 0xF7, 0xDA, 0x99, 0x35, 0xBA, 0x9C, 0xD6, 0x6E, 0x88, 0x80, 0x00, 0x0E, 0x28, 0x87, - 0x7F, 0x61, 0x2F, 0xBD, 0xC2, 0xF3, 0x6C, 0xFA, 0xEE, 0xCD, 0x5E, 0xC9, 0x0B, 0x2F, 0x47, 0x5D, 0xE9, 0x19, 0xD4, 0xDB, 0x59, - 0xFD, 0x57, 0xCC, 0xD1, 0x07, 0x42, 0x80, 0xCD, 0x23, 0x2F, 0x77, 0xB5, 0xEE, 0x96, 0x96, 0x97, 0xA6, 0xB4, 0x6C, 0x60, 0xBA, - 0x51, 0x64, 0xAE, 0x4D, 0x9E, 0xDC, 0x95, 0xAC, 0x79, 0x9A, 0xCB, 0xDB, 0x18, 0xBE, 0x31, 0xFF, 0xE4, 0x25, 0x1A, 0x2E, 0xF7, - 0xCB, 0xAA, 0xA2, 0x9B, 0xF9, 0x01, 0xA7, 0x7F, 0xBC, 0x55, 0x2F, 0xDC, 0x98, 0x9D, 0x70, 0x6F, 0x1B, 0x16, 0xCC, 0x68, 0x82, - 0xAD, 0x13, 0xB8, 0x5A, 0x5F, 0x16, 0x46, 0x61, 0xFD, 0x1E, 0x62, 0x8F, 0x89, 0x94, 0xF5, 0x05, 0xFB, 0x44, 0x06, 0x62, 0x1C, - 0x3A, 0x75, 0x96, 0xE4, 0xDE, 0x3E, 0x49, 0x15, 0x7D, 0x8E, 0x8D, 0x4C, 0x2E, 0x92, 0x4C, 0x0A, 0x67, 0xE6, 0x1D, 0x2B, 0x6F, - 0x33, 0xA8, 0x9A, 0x39, 0x73, 0x93, 0x05, 0xEC, 0x7F, 0x2A, 0x43, 0x93, 0x7F, 0xC0, 0x2D, 0x42, 0x65, 0x50, 0x31, 0x05, 0x2D, - 0x6D, 0x13, 0xA5, 0x0B, 0xC3, 0x06, 0xCE, 0x84, 0x30, 0xCF, 0x7F, 0x90, 0x01, 0x91, 0x16, 0x64, 0xB5, 0x15, 0x97, 0x77, 0xF8, - 0x9E, 0x56, 0x8C, 0xCD, 0xC6, 0xB6, 0x80, 0xAA, 0x12, 0x02, 0x23, 0x97, 0xF6, 0x39, 0x53, 0xD6, 0x2A, 0x36, 0xF3, 0xDB, 0x16, - 0x3A, 0x72, 0xA0, 0xA3, 0x27, 0xAB, 0x4F, 0x64, 0xED, 0xFC, 0xCB, 0xB7, 0xC4, 0xAC, 0xD8, 0x50, 0x84, 0x99, 0xD0, 0x34, 0x2A, - 0x4E, 0x7F, 0x69, 0xE5, 0x77, 0x51, 0xF9, 0x9D, 0x55, 0x7E, 0x2F, 0x5D, 0xE7, 0x25, 0x44, 0x2C, 0x86, 0x79, 0x02, 0x46, 0x03, - 0xBD, 0xF2, 0xD1, 0xD5, 0x7D, 0x0E, 0xC4, 0x1A, 0x78, 0x34, 0x0E, 0xDD, 0x00, 0xA7, 0xBE, 0xBC, 0x31, 0x80, 0xC5, 0xA4, 0x0F, - 0xB2, 0xD5, 0x33, 0x30, 0x0D, 0x1B, 0x12, 0x10, 0x32, 0x2B, 0x43, 0x29, 0x6D, 0x21, 0xF3, 0xA9, 0x63, 0x5C, 0xE1, 0x45, 0x6B, - 0x9D, 0xE5, 0x6A, 0xBE, 0x52, 0x5A, 0x0B, 0xC9, 0xB1, 0x04, 0x68, 0x0A, 0x88, 0xEE, 0xA4, 0x21, 0x46, 0x58, 0xE9, 0x2D, 0x66, - 0x2F, 0xD9, 0x82, 0x60, 0xFD, 0x8F, 0x3B, 0xBC, 0x40, 0xA1, 0xED, 0xA2, 0xBE, 0x56, 0xE9, 0x8F, 0xBA, 0xC0, 0x17, 0xF4, 0x99, - 0xA9, 0xAA, 0x70, 0xE9, 0xA2, 0x19, 0xB9, 0x1F, 0x85, 0xE2, 0xF0, 0x43, 0x9C, 0x0D, 0xA8, 0x83, 0x87, 0xE5, 0xD3, 0x87, 0xA5, - 0x36, 0xB1, 0x24, 0x87, 0xCC, 0x6C, 0xED, 0xA8, 0x8E, 0xE6, 0x8B, 0xE9, 0xB3, 0x15, 0xEA, 0xDD, 0xC4, 0x3B, 0xE3, 0x27, 0xDE, - 0x78, 0x44, 0x1A, 0xB7, 0xEE, 0x18, 0x4A, 0xDE, 0x2D, 0xE8, 0x6D, 0xCF, 0x29, 0xA9, 0x3D, 0xC2, 0xBA, 0x32, 0x20, 0xE8, 0xA7, - 0xA2, 0x0B, 0x58, 0x3B, 0x6B, 0x10, 0xEA, 0xD3, 0x96, 0x7D, 0x88, 0xE1, 0x7B, 0x40, 0x7D, 0x7B, 0x99, 0x5B, 0xC7, 0x8B, 0x78, - 0x3E, 0xA6, 0x2F, 0x12, 0x28, 0xE1, 0xFE, 0xC8, 0x76, 0x46, 0x75, 0x9D, 0x43, 0x26, 0xAB, 0x15, 0xBB, 0x89, 0x57, 0x2D, 0xBC, - 0x30, 0x21, 0x50, 0xA5, 0x25, 0x0F, 0x10, 0xE8, 0xC8, 0xE2, 0x01, 0x5B, 0xA2, 0x4D, 0xA9, 0xD6, 0xF5, 0x8A, 0x9C, 0xAD, 0xC8, - 0xB6, 0xE9, 0x59, 0xA4, 0x89, 0xCA, 0x3B, 0x53, 0x17, 0x28, 0xF4, 0x1D, 0x3A, 0xFB, 0x82, 0x85, 0x64, 0x47, 0xF2, 0x0B, 0x29, - 0x95, 0xCF, 0xBC, 0x9F, 0x47, 0x66, 0xA2, 0x6B, 0x81, 0x9B, 0xC0, 0xA0, 0xE4, 0x07, 0x8B, 0xA7, 0x2C, 0x5A, 0x78, 0xE9, 0x8D, - 0xDB, 0x5C, 0xA5, 0xE0, 0x25, 0x16, 0x78, 0xE1, 0xF1, 0x53, 0x82, 0x56, 0xCE, 0x57, 0x45, 0xC4, 0x45, 0x0F, 0xA0, 0x2A, 0x25, - 0xF8, 0x23, 0x20, 0x4A, 0xFA, 0x08, 0xD0, 0x47, 0x66, 0x59, 0x17, 0x9F, 0xBF, 0x5A, 0xAD, 0x4C, 0xF3, 0x85, 0x7D, 0x76, 0x69, - 0xAD, 0xC8, 0x12, 0x56, 0x64, 0x69, 0xDC, 0x23, 0x44, 0xF7, 0x62, 0x73, 0x20, 0x13, 0x48, 0x68, 0xB7, 0x67, 0x46, 0xC3, 0x78, - 0xC1, 0xDA, 0x4A, 0xF3, 0xAD, 0xDD, 0x42, 0xA7, 0xDA, 0x90, 0x71, 0xFB, 0x84, 0xF3, 0x6E, 0xCD, 0x35, 0xB7, 0x22, 0x99, 0x12, - 0xBC, 0x8F, 0xF7, 0x01, 0x4A, 0x65, 0x05, 0xC7, 0xF3, 0x66, 0x9B, 0x50, 0x4A, 0x32, 0xA1, 0x44, 0xE8, 0x89, 0x11, 0x5A, 0x84, - 0x66, 0x0A, 0xA5, 0xD8, 0x78, 0x87, 0xC8, 0xC3, 0xDA, 0x31, 0xE8, 0x94, 0xD0, 0xA6, 0xC7, 0x9D, 0xA2, 0x47, 0x55, 0xBB, 0x62, - 0xE2, 0xD1, 0x64, 0x56, 0x6D, 0x4A, 0x0C, 0x0D, 0x16, 0x70, 0x01, 0xD3, 0xCB, 0xF0, 0x1A, 0x6A, 0x69, 0x9D, 0x56, 0x11, 0x63, - 0xC6, 0x9A, 0xD8, 0x0E, 0xBF, 0x4E, 0x8E, 0xDE, 0x91, 0x16, 0x9C, 0x47, 0x25, 0x30, 0xDE, 0x4E, 0x92, 0x2E, 0xD8, 0x9F, 0xBF, - 0x90, 0xB3, 0x9A, 0xA1, 0x58, 0xBC, 0x3A, 0xE9, 0xC9, 0x4E, 0x13, 0x05, 0x68, 0x52, 0x61, 0xEB, 0x7E, 0x12, 0x25, 0x2E, 0x48, - 0x90, 0x21, 0x06, 0x95, 0xEA, 0xEA, 0xA6, 0x31, 0x5D, 0x82, 0xA9, 0xD2, 0x84, 0x79, 0x27, 0x46, 0x6E, 0x37, 0xA6, 0x38, 0x36, - 0x4D, 0x67, 0xB5, 0xAE, 0x5D, 0x85, 0x14, 0x34, 0x55, 0x20, 0x2E, 0x1D, 0xF6, 0x52, 0xCE, 0xFB, 0xB6, 0xDB, 0x7C, 0xA2, 0x8D, - 0x4F, 0x42, 0x97, 0xD4, 0xCD, 0x38, 0x49, 0x8A, 0x4C, 0x67, 0x75, 0xFB, 0xA4, 0xB0, 0x62, 0x88, 0xAA, 0x00, 0x8E, 0x7D, 0x11, - 0xAB, 0x22, 0x1E, 0x60, 0x7B, 0x5C, 0x3C, 0x50, 0xB4, 0xEC, 0xEA, 0xAB, 0x26, 0xB3, 0x38, 0xFB, 0x2A, 0xF6, 0xF7, 0x85, 0x8D, - 0xB8, 0x1C, 0xA0, 0xF6, 0x75, 0xAC, 0xED, 0x7A, 0x07, 0x0C, 0x35, 0x7C, 0x02, 0x00, 0x32, 0x24, 0x65, 0xF9, 0x27, 0x01, 0xF2, - 0x06, 0xF4, 0x09, 0x20, 0xAD, 0xA7, 0xA1, 0xC8, 0xF6, 0xC3, 0x20, 0xDA, 0x79, 0xAA, 0x7B, 0xA7, 0xBA, 0xCC, 0x39, 0x07, 0xA8, - 0xCC, 0x61, 0x06, 0x5C, 0xA2, 0x88, 0xF2, 0xA7, 0x54, 0x67, 0xB1, 0x16, 0x85, 0x2F, 0x0C, 0xD4, 0x9A, 0x7A, 0x8B, 0x6C, 0x73, - 0x4D, 0xF6, 0x68, 0xBA, 0xB1, 0x03, 0x7F, 0x93, 0xB4, 0x1C, 0xF4, 0xE1, 0xEF, 0x46, 0x7E, 0x14, 0xF2, 0x63, 0x99, 0xFC, 0xC9, - 0x16, 0x3C, 0x49, 0x7F, 0x42, 0xE6, 0xD9, 0x50, 0x14, 0xA7, 0x8F, 0x42, 0x7E, 0x50, 0x19, 0x9E, 0xA4, 0x3F, 0x91, 0xC5, 0x61, - 0x0A, 0x57, 0xE9, 0x42, 0x71, 0x76, 0x32, 0xAB, 0xB8, 0xAB, 0x4A, 0x37, 0xCA, 0x2E, 0x08, 0x4A, 0x18, 0x84, 0x02, 0x10, 0x56, - 0x6E, 0x2B, 0x17, 0xBD, 0x93, 0x69, 0x36, 0xCD, 0xDB, 0xE5, 0x6C, 0x26, 0xAF, 0x78, 0xAB, 0xA5, 0x4D, 0x37, 0x94, 0x92, 0x79, - 0x54, 0xF8, 0xD3, 0x5E, 0x38, 0x0A, 0xBB, 0xF4, 0xDF, 0x48, 0x7D, 0xF5, 0xE0, 0xBF, 0x6E, 0xD8, 0x0F, 0xFB, 0x33, 0xB4, 0xB8, - 0x48, 0xA3, 0x34, 0x96, 0xEE, 0x86, 0xEE, 0xFF, 0x8E, 0x7A, 0xA1, 0xE7, 0x61, 0x38, 0x0A, 0x65, 0x21, 0x0A, 0x71, 0x71, 0x52, - 0x7D, 0x3A, 0x2A, 0x52, 0x75, 0xA1, 0xED, 0x59, 0x78, 0x8E, 0xE9, 0x77, 0xF1, 0xFA, 0xDF, 0xD9, 0x83, 0xCE, 0xA9, 0xF5, 0x3F, - 0x0B, 0xF9, 0xED, 0x27, 0x7E, 0x30, 0xB1, 0x0F, 0xD6, 0xD9, 0xE1, 0xEE, 0xC5, 0xB9, 0xDF, 0x3F, 0x3B, 0xBC, 0xF4, 0xC2, 0x70, - 0x8D, 0xEA, 0x21, 0x39, 0xA4, 0xEA, 0x46, 0x00, 0x50, 0x53, 0x2A, 0x4C, 0x7D, 0x61, 0x0C, 0x9F, 0x68, 0xA3, 0xD3, 0x93, 0x34, - 0xB7, 0xDC, 0x16, 0x96, 0xA9, 0x74, 0x6E, 0x81, 0xB9, 0x91, 0x67, 0x81, 0x29, 0x28, 0x08, 0x96, 0x65, 0x02, 0xC4, 0x78, 0x20, - 0x50, 0xC3, 0x7C, 0x12, 0x3C, 0x5A, 0x66, 0x0E, 0xD1, 0xD8, 0x2D, 0x8B, 0x17, 0xB0, 0x23, 0xE0, 0x1F, 0x61, 0xF6, 0x8B, 0x93, - 0x15, 0x24, 0xE0, 0x1F, 0xDD, 0x09, 0x91, 0x81, 0xD1, 0x11, 0xC3, 0xDB, 0x78, 0x40, 0x49, 0xA6, 0xB5, 0x43, 0x34, 0x88, 0xC5, - 0x05, 0x08, 0xD4, 0x36, 0x4A, 0x12, 0x73, 0x7F, 0x83, 0xE8, 0x0D, 0x8C, 0x1E, 0x54, 0x01, 0x9E, 0xC6, 0x9B, 0xE3, 0x16, 0x14, - 0x44, 0xD2, 0x6D, 0x54, 0xD7, 0xD9, 0x53, 0x79, 0x05, 0xA6, 0x96, 0xE5, 0x2F, 0x84, 0xE5, 0xC9, 0x55, 0x0B, 0xEF, 0xD1, 0xEC, - 0x02, 0x10, 0x0B, 0x5C, 0x27, 0x67, 0x90, 0xB9, 0xD8, 0x19, 0x61, 0x57, 0x56, 0x0A, 0xD3, 0x68, 0x83, 0xE8, 0x8F, 0x46, 0xC7, - 0xC6, 0x7D, 0x4B, 0xBE, 0x17, 0xE8, 0x61, 0xB2, 0x3D, 0xA8, 0x2F, 0x75, 0xB5, 0x07, 0xF3, 0x52, 0x28, 0x90, 0xC3, 0x6D, 0x72, - 0x19, 0x94, 0xB4, 0x86, 0xA2, 0x5E, 0xFF, 0x1C, 0xC5, 0x86, 0x6C, 0xDB, 0xEB, 0x5F, 0x84, 0xF8, 0x11, 0xF9, 0xF8, 0xEF, 0xAB, - 0x57, 0xAF, 0xCE, 0xB7, 0x58, 0xF0, 0xEA, 0xAA, 0x3F, 0x0A, 0xE0, 0x57, 0x37, 0xC4, 0x5F, 0xF0, 0x11, 0x9D, 0x5F, 0x8A, 0x56, - 0xA0, 0x14, 0xD4, 0xDE, 0xD3, 0x92, 0x6C, 0xE8, 0x52, 0x94, 0xC0, 0xDF, 0x1A, 0xA8, 0x8F, 0xF5, 0x81, 0x86, 0x58, 0xB0, 0x07, - 0x05, 0xA1, 0xD6, 0xC5, 0x31, 0x24, 0x51, 0x42, 0x9F, 0x27, 0xF4, 0xCE, 0x54, 0xCA, 0x80, 0xA7, 0xF4, 0x87, 0x3B, 0x85, 0xF6, - 0x5B, 0x1F, 0x64, 0x74, 0xEE, 0xFD, 0xEF, 0xF4, 0x3E, 0xC4, 0x3B, 0xD5, 0x1D, 0x7D, 0xFB, 0x48, 0x7C, 0x83, 0xC6, 0x41, 0x7F, - 0x61, 0x27, 0x97, 0x95, 0x53, 0xBA, 0x9E, 0x28, 0x7F, 0xCA, 0x82, 0xE6, 0xF9, 0xE1, 0xE6, 0x9A, 0xCC, 0x5D, 0x01, 0x76, 0xA8, - 0x93, 0xDF, 0xA1, 0x33, 0x4B, 0x93, 0xCB, 0x51, 0x85, 0xEA, 0xF0, 0x8B, 0x4F, 0x1A, 0xA7, 0x4D, 0x5E, 0x58, 0x11, 0x7B, 0x5B, - 0x2C, 0xA9, 0x5D, 0xB8, 0x6E, 0x34, 0x70, 0xCE, 0x0D, 0x03, 0xA7, 0x59, 0x0C, 0xD7, 0x66, 0x15, 0x08, 0x3E, 0x5F, 0xF5, 0xC9, - 0xE2, 0x33, 0xC5, 0xE7, 0x94, 0x26, 0x81, 0xED, 0xAC, 0x21, 0xF1, 0x0D, 0xA1, 0xD1, 0xE6, 0x41, 0x90, 0xFA, 0x7B, 0x87, 0xB6, - 0xF6, 0x7D, 0x6A, 0xBF, 0x1B, 0x5C, 0x41, 0x5F, 0x93, 0xDE, 0x98, 0x5D, 0xF5, 0xCE, 0x06, 0x17, 0xC3, 0x49, 0x1F, 0xBE, 0xFA, - 0xDD, 0x97, 0xE7, 0xBD, 0x51, 0x7F, 0x32, 0xC0, 0xEF, 0xB3, 0x8B, 0xE1, 0x60, 0x34, 0x1C, 0x9D, 0x4D, 0x86, 0xE3, 0x51, 0x88, - 0x36, 0x5B, 0xB9, 0xDC, 0x6D, 0x90, 0x1A, 0x21, 0x62, 0x57, 0x5D, 0x6E, 0xE3, 0xA7, 0x79, 0xF0, 0x1F, 0xC2, 0x5E, 0x37, 0xCC, - 0xCC, 0xE3, 0x1A, 0x68, 0x93, 0xCB, 0x56, 0x7C, 0x54, 0x44, 0x05, 0x66, 0xCB, 0xC5, 0xFE, 0xC1, 0x8A, 0x5A, 0x3E, 0xBB, 0xBA, - 0xEA, 0xFD, 0x01, 0x63, 0x1A, 0xF4, 0x68, 0x55, 0x04, 0x75, 0x8C, 0x9D, 0x0D, 0x1D, 0x22, 0x42, 0x26, 0x2F, 0x71, 0x59, 0x0A, - 0x83, 0x84, 0x55, 0x3A, 0x06, 0xF9, 0x01, 0x49, 0x7A, 0x95, 0x01, 0x43, 0x83, 0xF5, 0x3E, 0x6A, 0xB0, 0xEF, 0xEF, 0xB6, 0xF3, - 0xD7, 0x5F, 0xDF, 0xA5, 0x74, 0xDC, 0xF3, 0x6C, 0x08, 0x70, 0x03, 0x6F, 0x44, 0x0B, 0xAF, 0xBF, 0x82, 0x4D, 0x8B, 0xC1, 0xEC, - 0x56, 0xD1, 0x21, 0x84, 0x86, 0x27, 0x6A, 0x7F, 0x0C, 0x87, 0x44, 0x85, 0xD5, 0xDA, 0x52, 0xE6, 0x88, 0x1C, 0x4D, 0xD6, 0xBB, - 0x79, 0x36, 0xDA, 0xB1, 0x5B, 0x14, 0xB1, 0x03, 0xEB, 0xF7, 0x6D, 0xE2, 0x84, 0xA2, 0x32, 0x07, 0x22, 0xCD, 0x86, 0x82, 0x2E, - 0x40, 0xEF, 0x1F, 0x6A, 0xCA, 0x4B, 0xF1, 0x73, 0xB2, 0xEF, 0xF1, 0xF3, 0xC7, 0xEF, 0x70, 0xF4, 0x95, 0x3E, 0xB9, 0x88, 0xF6, - 0x9C, 0xB6, 0xBE, 0xA5, 0x1A, 0xD0, 0xD8, 0x05, 0x36, 0x46, 0xBB, 0xFC, 0x5D, 0xE4, 0xE0, 0x5D, 0xAC, 0x9C, 0x54, 0xB9, 0x43, - 0x89, 0xA9, 0x74, 0x1F, 0xDF, 0xD8, 0x9F, 0x6A, 0x41, 0x04, 0x6A, 0xC7, 0x1A, 0xC8, 0x48, 0x12, 0x7E, 0xA0, 0xB1, 0xBB, 0xB4, - 0xE8, 0x85, 0x7C, 0x64, 0x5C, 0x3E, 0xAA, 0xC2, 0xDE, 0x00, 0x33, 0x2D, 0xE4, 0x63, 0x37, 0x25, 0x75, 0x49, 0x7C, 0xB6, 0x5D, - 0xB4, 0x85, 0x78, 0x28, 0xB8, 0xB2, 0x8F, 0xCE, 0x05, 0x82, 0x60, 0x21, 0xF3, 0xB2, 0x90, 0x67, 0x99, 0x30, 0x0A, 0xDC, 0xE4, - 0x59, 0x94, 0xEF, 0x1C, 0x8B, 0xB7, 0x94, 0x53, 0x7D, 0x17, 0x96, 0x35, 0x9C, 0x17, 0xF5, 0x8B, 0xCF, 0x1C, 0xEE, 0x58, 0xF7, - 0xA4, 0xA8, 0x68, 0xE2, 0x6C, 0x36, 0xE6, 0x73, 0x41, 0x8D, 0x8F, 0x6B, 0x83, 0xAA, 0x2C, 0x8D, 0x2C, 0xFF, 0xD0, 0xE4, 0x52, - 0x2B, 0x45, 0x11, 0xB2, 0x80, 0x70, 0xF3, 0x93, 0x96, 0x66, 0x34, 0xBF, 0xAD, 0xCB, 0x35, 0x5A, 0xF2, 0xB1, 0x3B, 0x43, 0x2F, - 0xFB, 0x72, 0x7F, 0x6F, 0x13, 0xBF, 0xD2, 0x05, 0x4F, 0xAE, 0x8A, 0x65, 0x66, 0x96, 0x2D, 0xA0, 0x99, 0x39, 0x4A, 0x54, 0x13, - 0x23, 0x31, 0xF3, 0x70, 0x6F, 0x08, 0xC6, 0xD5, 0xDE, 0xF6, 0x0D, 0x28, 0x70, 0x8C, 0x68, 0xB5, 0x60, 0xAB, 0xE4, 0xCE, 0x1C, - 0x92, 0x61, 0xE5, 0xE1, 0x30, 0xEB, 0x86, 0xC3, 0x3C, 0x92, 0xAD, 0x55, 0xED, 0x35, 0x40, 0xF9, 0x81, 0x9C, 0xC7, 0x9C, 0xA2, - 0x3A, 0xE8, 0x0D, 0x4D, 0x0A, 0x9A, 0xF8, 0xC7, 0x44, 0x81, 0xB1, 0x4F, 0xE7, 0x2E, 0xD8, 0x96, 0x49, 0x9A, 0x14, 0x96, 0xF8, - 0x58, 0xB1, 0x42, 0x21, 0x7C, 0xA2, 0xD5, 0xBA, 0x17, 0xA9, 0x20, 0x70, 0xD1, 0x45, 0x40, 0x37, 0x56, 0x19, 0xBA, 0xC3, 0x2F, - 0xD1, 0xD9, 0x08, 0x04, 0x3B, 0x2E, 0x2B, 0xE4, 0x6D, 0x21, 0x12, 0x33, 0x01, 0xA1, 0xA1, 0x3C, 0x2E, 0xF6, 0xF8, 0x94, 0x86, - 0x96, 0xC4, 0x64, 0xDE, 0xE0, 0xF4, 0x9F, 0x71, 0x03, 0x63, 0xFE, 0x84, 0x1E, 0x61, 0x2B, 0x0F, 0xB1, 0x75, 0xA6, 0xF8, 0x3A, - 0x4E, 0x6F, 0x94, 0x81, 0x13, 0xAD, 0x3E, 0xAD, 0x6C, 0x53, 0xA2, 0x4D, 0x37, 0xC7, 0x0C, 0x32, 0x45, 0x80, 0x08, 0x56, 0xB4, - 0xBD, 0x56, 0x1B, 0xBE, 0x31, 0x18, 0x50, 0x2F, 0x80, 0x1F, 0xAF, 0x28, 0x03, 0x51, 0xA2, 0x45, 0xC8, 0xB9, 0x52, 0x22, 0xAE, - 0x37, 0x4B, 0x75, 0x55, 0x22, 0x2B, 0xA4, 0xF8, 0xAF, 0x14, 0x07, 0x58, 0xBE, 0x24, 0xD4, 0x6F, 0xC2, 0xE5, 0x53, 0x17, 0xCE, - 0xAB, 0xE7, 0x5A, 0xA6, 0xB1, 0x49, 0x17, 0xDB, 0x6E, 0x6B, 0xD6, 0x5B, 0x43, 0xD2, 0x44, 0xB8, 0xEC, 0xC3, 0x18, 0x69, 0xC9, - 0x95, 0x21, 0x02, 0x4C, 0x56, 0x4B, 0xFD, 0xFC, 0xCD, 0xE6, 0xC2, 0xC5, 0x41, 0xEA, 0x8A, 0xDA, 0x48, 0x40, 0x7E, 0xAC, 0xEA, - 0x2B, 0xAC, 0x56, 0x0F, 0xC0, 0x11, 0x2E, 0x1B, 0x2C, 0x98, 0xF0, 0xD0, 0x4C, 0xC0, 0xD8, 0x50, 0x73, 0x03, 0x6D, 0x86, 0xE1, - 0x18, 0x0C, 0xBD, 0xE5, 0x56, 0xAD, 0x41, 0x2C, 0x99, 0xF9, 0x7C, 0x11, 0x47, 0x9C, 0xD5, 0x2B, 0x7A, 0x3E, 0x91, 0x53, 0xF4, - 0x6A, 0x18, 0x08, 0xC1, 0xB4, 0xBC, 0x1A, 0xC0, 0x86, 0x52, 0xEA, 0x53, 0x30, 0xCC, 0x55, 0x0B, 0x56, 0xD8, 0x50, 0x62, 0xCE, - 0x07, 0xF9, 0x69, 0x81, 0x54, 0x52, 0xB6, 0x3E, 0x8A, 0xB1, 0x72, 0xFE, 0xA7, 0xB2, 0xF2, 0x2C, 0xB8, 0xBA, 0x3A, 0xFF, 0xB2, - 0xE4, 0x5A, 0x4B, 0x2D, 0x17, 0xA4, 0x5F, 0x94, 0x45, 0xD5, 0x8D, 0x6B, 0xB9, 0x51, 0x3C, 0xD9, 0x2C, 0x54, 0x34, 0x1B, 0x06, - 0xAD, 0x8C, 0x43, 0x3F, 0x24, 0xE8, 0x3F, 0x3F, 0x60, 0x07, 0x8F, 0x15, 0xEA, 0x28, 0x05, 0x0D, 0x0B, 0xDF, 0x26, 0x8D, 0x85, - 0x5F, 0x01, 0xDA, 0x0F, 0xEF, 0xBD, 0x34, 0xD6, 0x91, 0x39, 0x71, 0x72, 0xDE, 0x46, 0x7A, 0xE4, 0x4F, 0xF6, 0x4C, 0x23, 0x6F, - 0x0F, 0x0E, 0x9D, 0x14, 0x65, 0xAC, 0x55, 0xDD, 0x1C, 0x4E, 0x1E, 0x9F, 0x1B, 0x16, 0x7B, 0xE5, 0xA5, 0xFC, 0x74, 0xF2, 0x23, - 0x3A, 0x25, 0x96, 0x2D, 0x86, 0x42, 0x35, 0xF9, 0x52, 0x6B, 0xAE, 0xB4, 0x32, 0xD9, 0x9D, 0xCF, 0xA6, 0xE5, 0xC9, 0x70, 0xB6, - 0xC5, 0x3F, 0x83, 0xD9, 0xD5, 0xD5, 0x05, 0x7D, 0xF5, 0xE1, 0xAB, 0x77, 0x46, 0x9F, 0x3D, 0xF8, 0xEC, 0xF3, 0x59, 0x31, 0xF5, - 0x7C, 0x6B, 0xBC, 0xED, 0x8B, 0x57, 0xCE, 0x01, 0x87, 0x17, 0x4A, 0x24, 0xE1, 0x8B, 0x6E, 0xE5, 0xCB, 0xE1, 0x28, 0x5E, 0xD8, - 0x8E, 0x86, 0x41, 0xD8, 0x90, 0x1E, 0xEC, 0x14, 0x1B, 0x58, 0xF8, 0x78, 0x9A, 0x60, 0xA8, 0xB3, 0x64, 0x47, 0x77, 0x89, 0x90, - 0x42, 0xFD, 0xDD, 0x6E, 0x1D, 0x79, 0x58, 0xC7, 0x6A, 0x46, 0xA8, 0x90, 0xFE, 0x26, 0x1A, 0xF6, 0x5F, 0x0E, 0x5F, 0x9E, 0x9D, - 0xF7, 0x5F, 0x8E, 0x42, 0x83, 0x53, 0xC1, 0x20, 0x37, 0x51, 0x33, 0xB5, 0x1E, 0x30, 0x3F, 0x9B, 0x4B, 0xDE, 0xC6, 0x66, 0xDF, - 0x74, 0x7F, 0xBE, 0xA6, 0x7A, 0x07, 0x2E, 0xA0, 0x43, 0xDA, 0xEA, 0xF7, 0x9E, 0xDF, 0xD6, 0x68, 0x3F, 0x0F, 0x38, 0xA8, 0x29, - 0x4D, 0x57, 0xD1, 0x28, 0xA8, 0x52, 0x96, 0xDA, 0x43, 0x65, 0x7A, 0x28, 0x68, 0xAD, 0xD7, 0x55, 0xC4, 0xB6, 0xD9, 0xD9, 0xC4, - 0x52, 0x51, 0x9D, 0xD5, 0x46, 0xD2, 0xDD, 0x9A, 0x72, 0x32, 0xEC, 0x52, 0xF3, 0x3D, 0x0A, 0xB7, 0x25, 0xC2, 0xC9, 0x2A, 0xEA, - 0xA6, 0x1F, 0x1A, 0x80, 0xFE, 0x38, 0xF1, 0x7B, 0xC7, 0x2C, 0xD8, 0x76, 0xED, 0x86, 0x6C, 0x05, 0x55, 0x77, 0x2E, 0xBD, 0x51, - 0xDD, 0xDD, 0xD7, 0x74, 0x53, 0x7B, 0xC5, 0x0D, 0x1B, 0x56, 0xDC, 0x50, 0x81, 0xD4, 0xB0, 0xA6, 0x2A, 0x83, 0xFC, 0xDB, 0xDD, - 0x74, 0xB7, 0x07, 0x75, 0x54, 0xD1, 0x3E, 0x0F, 0xEE, 0x45, 0x6C, 0xD9, 0x42, 0x97, 0x04, 0x5E, 0xB0, 0x10, 0x6A, 0x69, 0xBD, - 0x53, 0x5B, 0x89, 0xE6, 0x50, 0xC0, 0x36, 0x68, 0x81, 0x51, 0xD5, 0x5C, 0x0F, 0x63, 0x63, 0x4E, 0x38, 0xA4, 0x4A, 0x7B, 0x10, - 0x20, 0x17, 0x55, 0x40, 0x2A, 0x5A, 0xA8, 0x93, 0xB8, 0xD4, 0xA5, 0xD3, 0xAC, 0x90, 0x2A, 0x02, 0x36, 0x46, 0x7B, 0x5F, 0xDE, - 0x00, 0x2A, 0x73, 0x74, 0xCE, 0xC2, 0xCA, 0x09, 0xAD, 0x00, 0x38, 0x98, 0xC8, 0x2F, 0x71, 0x2A, 0x89, 0x22, 0xF5, 0xB8, 0xC4, - 0x7B, 0x23, 0x24, 0x4E, 0xA9, 0x5C, 0x43, 0xFE, 0xF7, 0xBB, 0x52, 0x75, 0xA4, 0x2A, 0xDA, 0x0B, 0x90, 0x63, 0x80, 0x6E, 0x29, - 0xCC, 0xF7, 0xA8, 0xAD, 0xD6, 0x40, 0x09, 0x09, 0x7A, 0x11, 0x15, 0x84, 0x57, 0xD8, 0x9D, 0x50, 0x56, 0x10, 0x27, 0xB0, 0x95, - 0xD6, 0x3E, 0x24, 0x76, 0x74, 0x56, 0x3C, 0xFE, 0xAD, 0xC5, 0x8E, 0xB2, 0x27, 0x95, 0x35, 0x63, 0xCA, 0x40, 0x11, 0xDF, 0xD1, - 0x17, 0xD9, 0x21, 0xDB, 0xF8, 0x8E, 0x22, 0xDE, 0x02, 0xDF, 0xBC, 0x70, 0x4B, 0x61, 0xB6, 0x8B, 0x56, 0x15, 0xFE, 0xDA, 0xA9, - 0x28, 0x8F, 0x84, 0x8B, 0x5F, 0x18, 0xA0, 0xB7, 0xD5, 0xE5, 0xF8, 0xC5, 0xA2, 0x80, 0x1A, 0x0A, 0xC0, 0x7B, 0x49, 0x19, 0x3D, - 0x23, 0xE3, 0xC2, 0xCA, 0xE9, 0x1B, 0x39, 0x16, 0x05, 0x59, 0xA5, 0x06, 0x63, 0x12, 0x58, 0x86, 0x47, 0x20, 0x7E, 0x44, 0x82, - 0xE5, 0xEB, 0x82, 0x81, 0x6A, 0x82, 0x1C, 0x68, 0x99, 0x55, 0x75, 0x64, 0x74, 0x30, 0x94, 0x39, 0xD2, 0x83, 0xD6, 0x29, 0x7F, - 0xDC, 0x27, 0x39, 0xA3, 0xB3, 0xDB, 0x16, 0x1D, 0x23, 0xB6, 0x62, 0x54, 0xA1, 0x96, 0xA0, 0xCF, 0xCA, 0x90, 0x7E, 0xB8, 0x4E, - 0x76, 0x15, 0x44, 0xED, 0x51, 0x0B, 0x2D, 0x41, 0xC0, 0x56, 0x0B, 0x65, 0x58, 0x52, 0x1E, 0x1E, 0xCA, 0xC3, 0x9B, 0x6B, 0x20, - 0xF0, 0x8C, 0x3D, 0x19, 0x09, 0xCA, 0xBB, 0x4C, 0x79, 0xF4, 0x27, 0xD3, 0x28, 0x1D, 0x3E, 0x92, 0x4D, 0xD2, 0x71, 0xE2, 0x71, - 0x6B, 0x78, 0x38, 0x4F, 0xCB, 0x99, 0x7F, 0x84, 0xE1, 0x9E, 0x36, 0x07, 0x97, 0x46, 0x43, 0x4A, 0x71, 0x48, 0xE9, 0xCE, 0x5F, - 0x7F, 0x7D, 0xCB, 0xAD, 0x42, 0xBA, 0x1B, 0x61, 0xB7, 0x73, 0xD4, 0x5C, 0x3B, 0xFB, 0x79, 0x46, 0xF9, 0x1E, 0x85, 0xEE, 0xFC, - 0x7F, 0x17, 0x16, 0xE8, 0x17, 0x8C, 0x18, 0xA5, 0xE3, 0x02, 0x0D, 0xF7, 0xC4, 0x05, 0x72, 0x28, 0x9C, 0x78, 0x59, 0xD2, 0xF6, - 0x3C, 0x09, 0x6B, 0x61, 0x83, 0xB4, 0x1B, 0xA5, 0xC3, 0x27, 0xA5, 0xEE, 0xBC, 0x44, 0x2E, 0x9C, 0xE4, 0x5F, 0x6D, 0x46, 0x42, - 0xE0, 0x4E, 0xB1, 0x32, 0x10, 0x42, 0x0A, 0xFC, 0x24, 0x02, 0x0D, 0x7F, 0x3A, 0x93, 0x21, 0x0B, 0xD0, 0xED, 0x93, 0xBB, 0xBE, - 0xCA, 0x34, 0x15, 0xD8, 0x60, 0x67, 0x1A, 0x14, 0x44, 0x48, 0x5D, 0x71, 0x07, 0x48, 0xC7, 0xF8, 0xE2, 0x3E, 0x3D, 0x46, 0x3B, - 0xDA, 0x66, 0x59, 0x06, 0x56, 0x06, 0xCC, 0x9A, 0xF2, 0xBD, 0x90, 0x0D, 0x89, 0x48, 0xC5, 0x76, 0xA9, 0x3D, 0xB1, 0x7F, 0x0C, - 0xE1, 0x9B, 0x07, 0xFF, 0xA1, 0x11, 0x35, 0x5C, 0xB3, 0xFB, 0x97, 0x46, 0xF4, 0x21, 0x40, 0x64, 0x22, 0x01, 0x75, 0xC0, 0x5D, - 0xB0, 0xE6, 0x48, 0x3B, 0x2E, 0x8F, 0xBF, 0xB4, 0x69, 0xD2, 0x0D, 0x87, 0x3F, 0x7E, 0x8F, 0x58, 0x8B, 0x71, 0x2A, 0xA4, 0x42, - 0xC5, 0xE7, 0xAF, 0x96, 0xAE, 0x22, 0x4C, 0x07, 0xC6, 0x18, 0xF8, 0x85, 0x71, 0x26, 0xE3, 0x41, 0x54, 0x28, 0x46, 0xE4, 0xA2, - 0xF3, 0x9E, 0xB8, 0x0C, 0x4A, 0xB4, 0x1B, 0x1B, 0x26, 0xD4, 0x83, 0x82, 0xC0, 0x7C, 0xFA, 0x28, 0x0D, 0x77, 0x10, 0x13, 0x2E, - 0xE9, 0xDB, 0x24, 0xBC, 0x53, 0xD5, 0x9D, 0xE4, 0xE7, 0x78, 0x38, 0xD6, 0x1A, 0x45, 0x0F, 0x2E, 0x12, 0x29, 0x7A, 0x41, 0xE8, - 0xCB, 0x2B, 0x62, 0x84, 0x24, 0xD5, 0x1D, 0xC7, 0x13, 0x3A, 0x51, 0xC9, 0x88, 0x07, 0x94, 0x6F, 0xD6, 0x64, 0xB5, 0x7B, 0xB3, - 0x36, 0x8A, 0xEA, 0x81, 0x31, 0x92, 0x6A, 0xAE, 0xC9, 0x26, 0xB4, 0x93, 0x21, 0x5F, 0x89, 0x46, 0xAF, 0xC6, 0x32, 0x94, 0xF1, - 0x3C, 0xC9, 0x3D, 0x4C, 0x17, 0xC1, 0xA5, 0x76, 0x99, 0x03, 0x6F, 0xC9, 0x05, 0x50, 0xC7, 0xC7, 0x7E, 0x6E, 0x4D, 0xA5, 0x7B, - 0xC6, 0x73, 0xD0, 0x63, 0xA5, 0xE4, 0x50, 0x01, 0xDE, 0x11, 0x30, 0xC3, 0x74, 0x53, 0x47, 0xFF, 0x92, 0x5A, 0x9B, 0xC6, 0x4D, - 0x00, 0xBF, 0x3E, 0x99, 0xD3, 0x7C, 0x16, 0xE8, 0xB8, 0x20, 0xD5, 0x18, 0x20, 0x30, 0xC1, 0x8E, 0xFE, 0x2D, 0x0C, 0x21, 0x88, - 0x0B, 0xB7, 0x71, 0x58, 0xBF, 0xA1, 0xA0, 0x62, 0xED, 0xAB, 0xB7, 0x14, 0x38, 0x3E, 0xAB, 0xE9, 0xDC, 0x6B, 0x31, 0x52, 0xC9, - 0xE4, 0x9D, 0x58, 0x8B, 0x63, 0x48, 0xFB, 0x50, 0x56, 0xB9, 0x17, 0xE4, 0xBE, 0xC0, 0x53, 0xF8, 0x39, 0x9E, 0xBE, 0x36, 0x05, - 0x24, 0xC6, 0x8B, 0x3D, 0x78, 0x9D, 0x21, 0x33, 0xA3, 0x2D, 0xE2, 0x92, 0x2B, 0x74, 0xE2, 0x1B, 0x99, 0x88, 0xDB, 0xE1, 0xC1, - 0xFB, 0x61, 0xAA, 0xF6, 0xC3, 0x5E, 0x60, 0x45, 0xB3, 0xAE, 0xDE, 0x2E, 0xA8, 0x3F, 0x3D, 0x41, 0xB3, 0x68, 0x45, 0x74, 0x04, - 0x4C, 0x4F, 0x4B, 0x0A, 0xEA, 0xC8, 0xF8, 0xDF, 0x5D, 0xBA, 0xC7, 0xDC, 0x49, 0x53, 0xCC, 0xC3, 0xD7, 0x8B, 0x3D, 0x97, 0x7B, - 0x08, 0x90, 0x6D, 0xA7, 0xEA, 0xDD, 0x5B, 0xAF, 0xC3, 0x8B, 0x09, 0x27, 0x3D, 0x59, 0xEB, 0x5B, 0x3C, 0x9E, 0x48, 0x4A, 0xD6, - 0x10, 0x9D, 0xBF, 0x56, 0x5D, 0x95, 0x57, 0xED, 0xF0, 0x13, 0xAD, 0x27, 0xE0, 0x95, 0xC7, 0x5E, 0x46, 0x0D, 0x57, 0xCF, 0xCD, - 0x55, 0x8D, 0x7E, 0xA9, 0x8D, 0x8F, 0x2C, 0x4F, 0x96, 0x0F, 0x4F, 0x54, 0xE5, 0x85, 0x44, 0x0D, 0xDC, 0x19, 0x9B, 0xC3, 0xFD, - 0x1A, 0xB5, 0x74, 0x41, 0x51, 0xD3, 0xF1, 0xD4, 0x87, 0x1B, 0x45, 0x6A, 0xB7, 0x93, 0xB8, 0xD9, 0x17, 0xE5, 0x67, 0x4F, 0x75, - 0x5A, 0x81, 0x95, 0xA8, 0x97, 0xCF, 0x10, 0xD9, 0x6C, 0x30, 0x75, 0xD8, 0x3F, 0xF7, 0x92, 0x3D, 0xE9, 0xD1, 0xBD, 0x97, 0x30, - 0x8D, 0xFA, 0x20, 0x89, 0x1D, 0x75, 0xB9, 0xD7, 0x4C, 0xEA, 0x58, 0xC2, 0x39, 0xBD, 0x87, 0x62, 0x2C, 0xE2, 0xD4, 0x58, 0xC4, - 0xD8, 0x81, 0x08, 0xC7, 0x6D, 0x84, 0x76, 0x49, 0xC3, 0x02, 0x46, 0x8A, 0x8F, 0x9A, 0x54, 0x36, 0xAF, 0x0C, 0xCD, 0xB1, 0x19, - 0x86, 0x49, 0x60, 0x01, 0x2E, 0x0F, 0x1E, 0x06, 0x5F, 0x2F, 0x9E, 0xFD, 0xF0, 0x56, 0xD6, 0x92, 0x74, 0x16, 0xD1, 0x90, 0xE5, - 0x18, 0x0D, 0x26, 0x5E, 0xAF, 0x57, 0x0F, 0xFC, 0xF9, 0x1D, 0x98, 0x8E, 0xDD, 0x25, 0xC6, 0x42, 0x66, 0x22, 0xB5, 0x14, 0x11, - 0xD7, 0x40, 0x4D, 0x55, 0x91, 0x8D, 0x31, 0xF2, 0x3E, 0x81, 0x84, 0x00, 0xA1, 0x94, 0x6C, 0xE1, 0x9C, 0x3F, 0x95, 0x25, 0xDF, - 0x8D, 0x0A, 0xDF, 0xBD, 0xBB, 0x67, 0xD7, 0xE8, 0x22, 0xF7, 0x4E, 0x44, 0x86, 0x78, 0xF7, 0xAE, 0x32, 0x21, 0x8A, 0x39, 0xC8, - 0x40, 0xBE, 0xBC, 0x05, 0x94, 0x34, 0x75, 0x5C, 0x66, 0x48, 0x8B, 0xF0, 0xFD, 0x15, 0xDF, 0xA3, 0x32, 0x9E, 0x7A, 0x6C, 0xE3, - 0xF4, 0x8F, 0x53, 0x8C, 0x6C, 0xE8, 0x05, 0x81, 0x59, 0x0F, 0xF7, 0x65, 0xF8, 0x09, 0x80, 0xC2, 0xBF, 0xEA, 0x66, 0x80, 0xC9, - 0x69, 0x20, 0x5D, 0x45, 0x85, 0x96, 0xC6, 0x34, 0x48, 0xD3, 0xA3, 0x94, 0xBA, 0x16, 0x39, 0x90, 0x55, 0xDE, 0xFF, 0x12, 0x90, - 0x3E, 0x41, 0x69, 0x65, 0x47, 0xBA, 0x98, 0x82, 0x52, 0x70, 0x7E, 0xB8, 0x53, 0xDF, 0xE3, 0xA7, 0x90, 0xB0, 0xBD, 0x11, 0xAA, - 0x47, 0x83, 0x40, 0xA0, 0xBC, 0xF3, 0x42, 0xEF, 0xDE, 0x9B, 0x85, 0xF2, 0x7A, 0xCB, 0x3F, 0x38, 0x87, 0xF2, 0x02, 0x50, 0x3E, - 0x41, 0x3A, 0xBA, 0x0F, 0xF0, 0xEB, 0x3E, 0xA2, 0x28, 0xD6, 0xB9, 0xE4, 0x98, 0x90, 0x18, 0xC6, 0x91, 0x2D, 0x78, 0x73, 0x9B, - 0x47, 0xD0, 0x29, 0xA0, 0x6B, 0xDF, 0xF1, 0x70, 0x09, 0xDE, 0xB0, 0xEC, 0x5E, 0xCE, 0xAF, 0x62, 0xCD, 0xBB, 0xE7, 0x7C, 0x5D, - 0x6D, 0xA2, 0x78, 0x3A, 0x37, 0xBC, 0xEC, 0xC3, 0x25, 0x34, 0xFD, 0xCE, 0x25, 0x52, 0x6D, 0x82, 0x70, 0x11, 0x6D, 0x1A, 0x2F, - 0x8A, 0x27, 0x13, 0xE1, 0xDD, 0x3A, 0xDE, 0xF0, 0x48, 0x0A, 0xB7, 0xDC, 0xC9, 0x31, 0x99, 0x4F, 0x17, 0xB3, 0xCB, 0x32, 0x82, - 0xC1, 0xB6, 0xF5, 0xBB, 0x34, 0xFE, 0x46, 0x48, 0x96, 0x1B, 0xBA, 0x60, 0xEC, 0xE7, 0x34, 0xE2, 0x17, 0xC5, 0x11, 0x49, 0x47, - 0xEA, 0xDA, 0xB6, 0x2B, 0x78, 0xD2, 0x5D, 0xF8, 0xE2, 0x7D, 0x00, 0x68, 0x07, 0xEC, 0x8B, 0x46, 0x40, 0x4A, 0x14, 0x08, 0xFE, - 0x60, 0x87, 0x2A, 0x7D, 0x51, 0xC8, 0x0B, 0x71, 0x1F, 0x8C, 0x60, 0xA5, 0x09, 0x55, 0x46, 0xCC, 0x4A, 0x9B, 0xC1, 0x8B, 0x24, - 0x20, 0x2F, 0x01, 0x7D, 0x40, 0x8D, 0x29, 0x2F, 0x0A, 0xFF, 0x43, 0x81, 0x77, 0x2E, 0xBC, 0x10, 0xC0, 0x4D, 0x16, 0x57, 0x57, - 0x83, 0x6D, 0x9F, 0xDB, 0x7E, 0x2F, 0xB6, 0xA9, 0x70, 0x42, 0x9D, 0x6E, 0xB0, 0x2B, 0x44, 0xC6, 0x2C, 0x54, 0x9F, 0x52, 0x81, - 0x8B, 0xA2, 0xE8, 0x76, 0x22, 0xE2, 0xD7, 0x14, 0xD3, 0x17, 0xF8, 0xA0, 0x1B, 0xDF, 0xC1, 0x5E, 0x14, 0x53, 0x6A, 0x7A, 0x16, - 0x2A, 0x18, 0x7A, 0x17, 0x12, 0x86, 0x40, 0x1C, 0xB9, 0xFB, 0xFA, 0xC3, 0x0B, 0x97, 0x14, 0x12, 0xDA, 0xF7, 0x2A, 0x00, 0xAA, - 0x86, 0xCC, 0xB2, 0xBD, 0xB3, 0xED, 0x6D, 0xB8, 0xC0, 0x9B, 0xAC, 0x50, 0x61, 0x87, 0x34, 0x04, 0xFF, 0x04, 0xE3, 0x8D, 0xBE, - 0xA2, 0x5D, 0xC3, 0xF7, 0x0B, 0x25, 0xFE, 0x10, 0x62, 0x4B, 0x8A, 0x0A, 0x22, 0x42, 0x0A, 0xE8, 0x10, 0x3B, 0x22, 0x09, 0x26, - 0x14, 0x47, 0xE5, 0x40, 0x5F, 0x0D, 0x53, 0xC6, 0xDC, 0xF0, 0x89, 0x78, 0x61, 0x4D, 0x84, 0x9C, 0x07, 0x3E, 0x12, 0x42, 0xF5, - 0x42, 0x24, 0xA9, 0xE1, 0x04, 0x63, 0x84, 0xF6, 0xA9, 0x56, 0x4C, 0x8C, 0xA3, 0x64, 0xB5, 0x41, 0x8C, 0xB5, 0x3D, 0x68, 0xD3, - 0x23, 0xBC, 0xDD, 0xD7, 0x11, 0x67, 0xCF, 0xEC, 0x2D, 0x9F, 0x59, 0xEC, 0x5E, 0xE2, 0x0D, 0x7A, 0xDE, 0xA8, 0x20, 0x3A, 0xC7, - 0xC7, 0xCF, 0xA6, 0x51, 0x83, 0x44, 0x9D, 0xE0, 0x35, 0x00, 0xD6, 0x04, 0x95, 0x7A, 0xA9, 0xCF, 0xF7, 0xC4, 0xD7, 0xBD, 0x27, - 0x1C, 0x90, 0x12, 0x1E, 0x36, 0x2A, 0xE5, 0x61, 0xA3, 0x9A, 0xAC, 0x11, 0x89, 0xDE, 0xB2, 0xED, 0xC0, 0x13, 0x37, 0x79, 0xB6, - 0x59, 0x4F, 0x98, 0x93, 0x50, 0x43, 0x13, 0x40, 0x73, 0x7D, 0x78, 0xD8, 0x22, 0xE8, 0x43, 0x02, 0x52, 0x71, 0xC6, 0xA7, 0x7E, - 0xF3, 0xC3, 0x9B, 0x60, 0x7C, 0x40, 0xAB, 0x35, 0xBA, 0xAF, 0x34, 0x2D, 0x48, 0xE9, 0x70, 0xDE, 0x7B, 0xA3, 0x90, 0x32, 0x42, - 0x8B, 0xCF, 0xCD, 0x27, 0x58, 0x7C, 0x6E, 0x2C, 0x8B, 0x0F, 0x62, 0x49, 0x1B, 0x7C, 0xFA, 0x1C, 0xC5, 0xBD, 0x2E, 0x0F, 0xD4, - 0x35, 0xE4, 0x81, 0xBA, 0x60, 0x01, 0xD3, 0x3D, 0xF6, 0xDE, 0x4B, 0x58, 0x3C, 0xF8, 0xB7, 0x87, 0xCC, 0x34, 0xF7, 0x5F, 0x22, - 0xDF, 0xCC, 0x7D, 0xC8, 0xBD, 0xE5, 0x37, 0x03, 0xF0, 0x41, 0x8E, 0x1E, 0x4C, 0xD3, 0x1A, 0x9B, 0x82, 0x42, 0x0F, 0xF8, 0x17, - 0xDA, 0xFC, 0x88, 0x7F, 0x07, 0x41, 0x78, 0x87, 0x7F, 0x87, 0xC6, 0xFC, 0xDD, 0xEC, 0xBB, 0xA7, 0xCE, 0x59, 0xB5, 0x8A, 0x09, - 0x4D, 0xEA, 0x5D, 0x61, 0x79, 0x28, 0xAB, 0xD8, 0x48, 0x76, 0x72, 0x2D, 0xDE, 0x33, 0x26, 0x12, 0x25, 0xD8, 0x97, 0xDE, 0x97, - 0xFA, 0xF9, 0x2B, 0x23, 0x7A, 0x92, 0x69, 0x3E, 0x32, 0x92, 0x79, 0xF7, 0xB5, 0x64, 0x42, 0xA9, 0x7D, 0x63, 0xFE, 0xDA, 0xBE, - 0x31, 0x6F, 0xF4, 0x62, 0xEF, 0x3F, 0xF8, 0xB3, 0xD6, 0xAA, 0xB8, 0x84, 0x28, 0x45, 0x7A, 0xFD, 0x9B, 0x8B, 0xDA, 0xFA, 0x37, - 0x97, 0x9F, 0x43, 0xD6, 0x18, 0x93, 0xF3, 0xC6, 0xB4, 0xA3, 0x6A, 0x20, 0x6A, 0xA1, 0x34, 0xD5, 0x1D, 0x25, 0x5D, 0xC6, 0xF6, - 0xA9, 0xD3, 0xE9, 0x97, 0x35, 0xBC, 0x89, 0x6B, 0x16, 0xEE, 0xF0, 0xF6, 0x62, 0x06, 0x83, 0xEA, 0x2D, 0x39, 0x43, 0x7D, 0x37, - 0x8A, 0x4D, 0x51, 0x0B, 0x9D, 0xC1, 0xAE, 0x96, 0xC3, 0xE2, 0xB8, 0x74, 0x40, 0x85, 0x6C, 0x6D, 0x5F, 0x24, 0xE0, 0xC4, 0x11, - 0x09, 0xD8, 0xAE, 0x5E, 0xF1, 0xE8, 0x33, 0x32, 0x71, 0x05, 0xEA, 0x99, 0xA9, 0xE1, 0xC8, 0x51, 0xCB, 0xBE, 0x6E, 0x6F, 0x4E, - 0xEB, 0xAD, 0x7D, 0xDD, 0x5E, 0x20, 0x01, 0x17, 0xB9, 0x31, 0xDB, 0xFB, 0xBB, 0x30, 0x0A, 0xAA, 0x2E, 0x4C, 0x52, 0xA9, 0x74, - 0xC1, 0xB3, 0xA8, 0x0B, 0xA4, 0xC7, 0xFD, 0x6D, 0x63, 0x09, 0xD9, 0x28, 0x67, 0x08, 0x1D, 0x90, 0xD9, 0x18, 0x2A, 0xF5, 0xDF, - 0x18, 0x47, 0x48, 0x84, 0x44, 0x1F, 0x63, 0xD4, 0x17, 0x66, 0x63, 0x86, 0x27, 0xA6, 0x22, 0x2F, 0x3B, 0x64, 0xE8, 0x06, 0x23, - 0x5E, 0x1A, 0xB9, 0xA4, 0x2E, 0x6C, 0x6C, 0x1E, 0x04, 0x32, 0x94, 0xB0, 0xF6, 0x9B, 0xCF, 0xA4, 0x95, 0xFA, 0x5D, 0x37, 0xB3, - 0x79, 0x91, 0x42, 0xDC, 0x41, 0x55, 0x83, 0x7D, 0x46, 0xC6, 0x00, 0x15, 0x8B, 0x90, 0x19, 0x77, 0x53, 0x9F, 0xB2, 0xC9, 0xD4, - 0x26, 0x0D, 0x94, 0x12, 0xE3, 0x3E, 0x26, 0xE7, 0xB1, 0x82, 0xB6, 0x8D, 0xD6, 0x8C, 0x29, 0xB0, 0x62, 0x3D, 0x4C, 0x6B, 0x33, - 0x64, 0xB5, 0x27, 0xAE, 0x49, 0xD3, 0xAC, 0xDC, 0x5A, 0x46, 0x0F, 0x67, 0x3D, 0xFA, 0xC9, 0xAD, 0x21, 0xB7, 0x96, 0x35, 0x64, - 0x4F, 0xE9, 0x1D, 0xDA, 0xBC, 0x9A, 0x38, 0x81, 0x89, 0xE3, 0x84, 0x07, 0xB9, 0x75, 0xCE, 0x79, 0xA3, 0x64, 0x7F, 0x6B, 0x48, - 0xF6, 0x6B, 0x25, 0xD5, 0x07, 0x2A, 0x50, 0x89, 0x13, 0xCB, 0x09, 0x5A, 0xBE, 0x6C, 0x8E, 0x87, 0x2B, 0x98, 0xA4, 0x62, 0x94, - 0x1C, 0x61, 0x30, 0x2F, 0x90, 0xBB, 0x7B, 0x30, 0xA9, 0x4A, 0x78, 0x16, 0x61, 0x7A, 0x83, 0x71, 0xA9, 0x44, 0x3A, 0x12, 0x4F, - 0x44, 0xE9, 0xE9, 0xCC, 0x59, 0xFA, 0x52, 0xCB, 0x0F, 0xC0, 0x37, 0xD6, 0x41, 0x83, 0xD0, 0xBC, 0x76, 0xCB, 0xCC, 0x58, 0x45, - 0xC8, 0x9A, 0x5C, 0x00, 0x22, 0xE5, 0x84, 0xEC, 0x3F, 0x3C, 0x35, 0x92, 0xD9, 0xE8, 0x23, 0x77, 0xF3, 0x74, 0x08, 0xFF, 0x1B, - 0x2B, 0xD8, 0xC9, 0x65, 0x6E, 0xEE, 0x53, 0xA5, 0xF1, 0x23, 0x74, 0xC6, 0xED, 0x57, 0x64, 0xBC, 0xB1, 0x19, 0xAA, 0xE2, 0xA6, - 0xF8, 0x4A, 0xE0, 0xF2, 0x6A, 0xA3, 0x87, 0xB0, 0x0C, 0xF2, 0x86, 0xD8, 0x17, 0xD3, 0xCD, 0x74, 0x39, 0x9B, 0x49, 0xE1, 0xDD, - 0x8C, 0x5A, 0x51, 0x18, 0x51, 0x2B, 0xB0, 0x50, 0x68, 0x57, 0xE1, 0x21, 0x5C, 0x4B, 0xC9, 0x59, 0x10, 0xA4, 0x2A, 0x38, 0x22, - 0xAB, 0x19, 0x1C, 0x1D, 0x3C, 0x43, 0xF6, 0xC0, 0xAB, 0xD8, 0x3D, 0x88, 0x9B, 0xF4, 0xAE, 0x1E, 0x44, 0x96, 0xAB, 0x07, 0xC2, - 0xF6, 0x42, 0x85, 0x47, 0xE0, 0x4D, 0x5E, 0x56, 0xD1, 0xB0, 0xC0, 0x50, 0x1D, 0xAE, 0x08, 0x1F, 0x0B, 0x19, 0x1B, 0xE4, 0xC6, - 0x99, 0x29, 0x62, 0x83, 0xB8, 0x02, 0x87, 0x2C, 0x54, 0x6C, 0x90, 0xB9, 0xCE, 0x4D, 0xAA, 0xC8, 0x5C, 0x18, 0x37, 0xCE, 0x8D, - 0x09, 0x47, 0x63, 0xAF, 0xFE, 0xA5, 0xAE, 0xE0, 0xFB, 0x8D, 0x14, 0x82, 0xEF, 0xB1, 0x19, 0x4F, 0x26, 0x54, 0xDF, 0x4B, 0xA0, - 0xAA, 0x0E, 0x12, 0xC2, 0x6A, 0x24, 0xEF, 0x50, 0x01, 0x2E, 0xF9, 0x10, 0xB7, 0x94, 0xC7, 0x35, 0x94, 0x2E, 0xCF, 0xC4, 0xF4, - 0xF1, 0x12, 0x5E, 0x87, 0xBF, 0x39, 0xE4, 0x80, 0x29, 0xA9, 0x15, 0xB2, 0xCC, 0xD3, 0xC0, 0x32, 0x0E, 0x39, 0x82, 0xBA, 0x75, - 0x1F, 0x41, 0xE1, 0x40, 0x55, 0xB0, 0x64, 0x19, 0xCD, 0x90, 0x93, 0x8E, 0x17, 0x26, 0x66, 0x98, 0x20, 0xBF, 0xCA, 0x95, 0xB1, - 0x6F, 0x7E, 0xB0, 0xE2, 0x2E, 0x6A, 0x32, 0xAA, 0x65, 0xB2, 0x42, 0xA6, 0xEA, 0xD7, 0x0D, 0x8E, 0x47, 0xAC, 0x12, 0x31, 0x70, - 0x87, 0x1B, 0x53, 0x40, 0x0F, 0x8A, 0x78, 0x7A, 0x72, 0xBC, 0xAA, 0x10, 0x2A, 0x0E, 0x48, 0x6A, 0x33, 0x3C, 0xA9, 0x24, 0xAB, - 0x87, 0x2B, 0x3E, 0xC7, 0xE3, 0x18, 0x34, 0xBB, 0x9E, 0x21, 0xE3, 0x6A, 0x9C, 0xC9, 0x90, 0x3C, 0x84, 0x51, 0x19, 0x08, 0xA4, - 0xF6, 0xA8, 0x46, 0xDE, 0x74, 0x90, 0x77, 0x63, 0x9D, 0x72, 0x1D, 0x10, 0x18, 0xC1, 0xC0, 0xAE, 0x2B, 0x30, 0x82, 0x1D, 0xF3, - 0xC0, 0x90, 0xFF, 0x8C, 0x09, 0xE4, 0x97, 0x76, 0xA9, 0x6E, 0x6E, 0xD8, 0x36, 0xDD, 0xF1, 0x12, 0x1C, 0x81, 0xCF, 0x00, 0x40, - 0x2B, 0xF6, 0x99, 0x39, 0x86, 0x7D, 0xA1, 0x77, 0xA4, 0x08, 0x3A, 0x13, 0x41, 0x03, 0x39, 0x48, 0xE6, 0x89, 0x97, 0x91, 0xB9, - 0x3F, 0x4E, 0xCF, 0xCD, 0xFE, 0xF3, 0x4F, 0x3E, 0x51, 0x3A, 0xD6, 0xCC, 0x27, 0x05, 0x88, 0xA9, 0xFA, 0x94, 0xAB, 0xF8, 0xE3, - 0x91, 0x0E, 0xB2, 0xE3, 0x94, 0xEC, 0x27, 0x35, 0xA9, 0x18, 0xDF, 0xF8, 0x9D, 0x8D, 0x0D, 0x24, 0xE8, 0xD4, 0xBD, 0xD2, 0x36, - 0x96, 0xB0, 0x05, 0x6E, 0xE7, 0x0B, 0x24, 0x58, 0xCC, 0xF5, 0x08, 0x89, 0xAC, 0xFE, 0xBC, 0x77, 0x48, 0x5C, 0x28, 0x73, 0x20, - 0xCA, 0xDD, 0x68, 0xE3, 0xF1, 0x71, 0xF5, 0x98, 0x58, 0x12, 0x83, 0x11, 0xDE, 0x46, 0x86, 0x0A, 0xE6, 0x0C, 0xCE, 0x8A, 0x76, - 0x73, 0x2D, 0x68, 0x4D, 0x36, 0x6F, 0x85, 0xFF, 0x99, 0x98, 0x2C, 0x4A, 0x85, 0x8C, 0xE4, 0x9A, 0x2C, 0x46, 0xE1, 0xB1, 0xE8, - 0xAB, 0x21, 0x9C, 0x8E, 0xE8, 0x00, 0xDF, 0x9A, 0xB2, 0x28, 0xAB, 0x72, 0x22, 0x78, 0xF3, 0xE4, 0xA1, 0xF4, 0x61, 0x24, 0x73, - 0x64, 0xE0, 0x40, 0x10, 0xBC, 0x8D, 0x10, 0x0C, 0xE4, 0xF4, 0x37, 0xC3, 0xEB, 0xD8, 0x0D, 0x86, 0x72, 0x22, 0x44, 0x44, 0xB9, - 0x6A, 0xD8, 0x1C, 0x89, 0xE1, 0xEA, 0x10, 0x32, 0xF3, 0x15, 0x19, 0x81, 0x61, 0x07, 0x42, 0x3F, 0x03, 0xBC, 0x76, 0x83, 0x87, - 0xC2, 0xEB, 0x64, 0x53, 0x8E, 0xB3, 0x5C, 0x73, 0xE6, 0x9E, 0x7A, 0x50, 0x25, 0x79, 0xEA, 0x41, 0x15, 0x77, 0x63, 0x4D, 0x0F, - 0xAA, 0x24, 0x4F, 0x3E, 0xA8, 0x62, 0x35, 0xB8, 0xE7, 0xBA, 0x87, 0x74, 0x45, 0x24, 0xE5, 0xB1, 0x5A, 0x0F, 0x74, 0x19, 0x33, - 0x78, 0x4D, 0x7D, 0xE7, 0x10, 0x41, 0xEE, 0x61, 0xDB, 0x98, 0xCE, 0x0E, 0x38, 0x53, 0x2F, 0xF9, 0xA1, 0xFD, 0x7E, 0x35, 0xCE, - 0xB2, 0x04, 0x0A, 0x7B, 0x80, 0x38, 0x8E, 0x15, 0xFB, 0x83, 0xFF, 0xC8, 0x0F, 0x20, 0xC6, 0x8B, 0x90, 0x2C, 0x79, 0xE3, 0x32, - 0xDC, 0x94, 0xC9, 0x6A, 0x7C, 0x2B, 0x57, 0xA6, 0x38, 0x3F, 0x5D, 0xCB, 0xE2, 0xAF, 0x59, 0xBC, 0x80, 0xE2, 0xCB, 0x86, 0xE2, - 0xE2, 0xE0, 0xF3, 0x41, 0x16, 0x77, 0x97, 0x32, 0x0E, 0x3B, 0x3F, 0x9A, 0x07, 0x9A, 0x7B, 0x2B, 0xA9, 0x73, 0xCE, 0x8F, 0xF6, - 0x51, 0xA4, 0xA3, 0x82, 0x50, 0x5F, 0xEF, 0xC4, 0xFB, 0x41, 0xEA, 0xE5, 0xEB, 0xFA, 0x6B, 0x6A, 0xC1, 0xA5, 0x75, 0xF4, 0x5A, - 0x81, 0xAE, 0x06, 0x6D, 0x62, 0xFC, 0xE8, 0x5C, 0xE3, 0x3B, 0x11, 0xF4, 0x7E, 0xBA, 0x02, 0xCD, 0x02, 0xB4, 0x02, 0x76, 0xA2, - 0x3E, 0x65, 0x4D, 0xDB, 0xAF, 0xD0, 0xA4, 0x96, 0x27, 0xCF, 0xCC, 0x89, 0x9C, 0x60, 0x82, 0xAD, 0x53, 0xF3, 0x7A, 0x0B, 0x87, - 0x9C, 0x9F, 0xEB, 0x26, 0x50, 0x48, 0x02, 0x12, 0x9B, 0x94, 0xC2, 0x68, 0x3B, 0x2E, 0xB5, 0xD9, 0xD6, 0x6E, 0xBD, 0x76, 0xAA, - 0xDE, 0x04, 0x9F, 0xBA, 0x50, 0x5A, 0x85, 0xEF, 0x80, 0x53, 0x76, 0x3B, 0xCE, 0x1C, 0xBE, 0xA4, 0x1D, 0x2D, 0xB5, 0x6B, 0x81, - 0x45, 0x9F, 0x3E, 0xEE, 0x18, 0xCA, 0x49, 0xD4, 0xEE, 0xE9, 0x89, 0xB3, 0x78, 0x09, 0xA9, 0x71, 0x1A, 0x6F, 0xD6, 0x3E, 0xE0, - 0x5C, 0x5E, 0xB6, 0x50, 0x39, 0x99, 0xB7, 0xD5, 0x88, 0x27, 0xCF, 0xE8, 0x65, 0x2B, 0x95, 0x53, 0xFA, 0x9B, 0x8E, 0x13, 0x37, - 0xDA, 0x29, 0x25, 0x78, 0xBC, 0xAD, 0xB8, 0xA4, 0xD0, 0x23, 0x50, 0x9F, 0xE0, 0x41, 0x39, 0xFC, 0x3C, 0x1E, 0x94, 0x3F, 0xC5, - 0x6B, 0xF3, 0xD9, 0x8B, 0xFD, 0xC7, 0x16, 0x29, 0xC6, 0x89, 0x75, 0x3C, 0xAF, 0x58, 0x42, 0x8E, 0x90, 0xD3, 0xC5, 0x1F, 0x2C, - 0x17, 0x9A, 0x2F, 0x8B, 0xB9, 0x1E, 0x93, 0x10, 0x6A, 0x7E, 0xE3, 0x1B, 0x0D, 0x22, 0xBF, 0xFA, 0xE0, 0xC0, 0xBF, 0x8B, 0x64, - 0x6D, 0xD5, 0xA6, 0x47, 0x12, 0xBA, 0xCF, 0xF0, 0x58, 0xA4, 0xC7, 0x02, 0x44, 0xF3, 0xFA, 0xD9, 0x80, 0x7F, 0x9D, 0xFF, 0xA2, - 0xE8, 0x5A, 0xA8, 0x41, 0x12, 0x90, 0x7F, 0x69, 0x08, 0xFC, 0xA2, 0xAE, 0x8C, 0x7C, 0x52, 0x08, 0x7C, 0x75, 0xFC, 0x6A, 0x0E, - 0xA5, 0x22, 0x8A, 0x4B, 0xFF, 0x6D, 0xC8, 0x55, 0xA1, 0xB7, 0xCC, 0xE2, 0xFB, 0x34, 0x24, 0x4B, 0x3D, 0x2A, 0x6A, 0xA1, 0xA1, - 0xF7, 0x04, 0x86, 0xCE, 0x27, 0x78, 0xC6, 0x6F, 0xAD, 0xB6, 0x5C, 0x04, 0x86, 0xCE, 0x1D, 0x81, 0xA1, 0xF1, 0x1A, 0xB4, 0x59, - 0x81, 0x02, 0x43, 0xE7, 0xB5, 0xC0, 0xD0, 0x09, 0xBA, 0x12, 0x57, 0x9A, 0x4D, 0x9A, 0xFC, 0xCA, 0x52, 0xF1, 0xC8, 0xC2, 0x73, - 0x96, 0x78, 0x6C, 0x1F, 0x99, 0xC5, 0x9F, 0xB0, 0xC4, 0x63, 0x6B, 0x89, 0x0B, 0x07, 0x0B, 0xE3, 0xD4, 0xAC, 0x2B, 0x97, 0x38, - 0x9D, 0x9A, 0xF5, 0xCC, 0x13, 0xAE, 0x78, 0xDF, 0x09, 0x97, 0x30, 0x25, 0xA9, 0x23, 0xAE, 0x77, 0x22, 0xC1, 0x15, 0x87, 0x79, - 0x6E, 0x9F, 0x2A, 0xD5, 0x4A, 0x86, 0x6C, 0x17, 0x3F, 0x6D, 0x9A, 0x8C, 0x6D, 0xD3, 0x24, 0x59, 0xE0, 0x44, 0x53, 0x81, 0x3E, - 0x88, 0xB6, 0xCD, 0x70, 0x32, 0x1F, 0xC6, 0xD8, 0xBD, 0xCC, 0xAE, 0x12, 0x2D, 0x88, 0x65, 0xC2, 0xD2, 0xA7, 0x0D, 0x65, 0x7E, - 0x32, 0xCD, 0xD0, 0xD2, 0x27, 0xEA, 0x4C, 0xF1, 0xE7, 0xCC, 0x88, 0x87, 0x6B, 0x84, 0x83, 0xAC, 0xC5, 0x80, 0x0E, 0x1D, 0x26, - 0x29, 0xB4, 0x48, 0xC5, 0xFF, 0x3A, 0x8B, 0x54, 0x83, 0x53, 0xB4, 0xD3, 0x22, 0x25, 0x86, 0xE8, 0xB4, 0x33, 0x99, 0xB3, 0xA3, - 0x2C, 0x47, 0x7F, 0xD3, 0x1C, 0xE3, 0xF6, 0xA6, 0x34, 0x90, 0xA3, 0x40, 0x3A, 0x24, 0x66, 0xB4, 0x59, 0x54, 0x1D, 0x31, 0x59, - 0x44, 0x95, 0xD9, 0x67, 0x4C, 0x92, 0x0A, 0x28, 0x6C, 0x74, 0x7C, 0xA0, 0x59, 0x45, 0x92, 0x01, 0x5A, 0x47, 0x12, 0xBB, 0x4E, - 0x45, 0x07, 0x8A, 0x9F, 0x6B, 0x6C, 0xB2, 0x50, 0xEC, 0x38, 0x60, 0xC4, 0xD3, 0xC4, 0x83, 0x4C, 0x46, 0x16, 0x43, 0x8C, 0xFF, - 0x05, 0xC6, 0x1B, 0x97, 0x80, 0x97, 0x4E, 0x7C, 0x1B, 0x61, 0x86, 0x2D, 0x40, 0xE8, 0x9A, 0x84, 0xAA, 0xF9, 0x61, 0xB6, 0x80, - 0xF8, 0x79, 0xB6, 0x80, 0x54, 0x0F, 0xAE, 0x02, 0xC0, 0x67, 0xD0, 0x9D, 0x2B, 0x2D, 0x56, 0x94, 0xE7, 0xF9, 0x33, 0x75, 0xE5, - 0x78, 0x9F, 0x36, 0x5A, 0x89, 0x37, 0x13, 0xA6, 0xFC, 0x45, 0x65, 0xE9, 0x12, 0x27, 0x43, 0x64, 0xF1, 0x47, 0x9E, 0x6B, 0x54, - 0x64, 0x3E, 0xFA, 0x4C, 0x5C, 0x65, 0x0E, 0x6B, 0x40, 0xBC, 0x43, 0xEF, 0xAB, 0x20, 0x9D, 0x66, 0x0D, 0x7C, 0xD3, 0xB9, 0x72, - 0xCC, 0x17, 0x68, 0x27, 0xC1, 0xE9, 0x1F, 0xFF, 0xF8, 0xFD, 0xFE, 0xDD, 0xEC, 0xF4, 0x26, 0xF4, 0x40, 0x02, 0x4B, 0xA7, 0xF3, - 0x99, 0xE5, 0x22, 0x97, 0x7B, 0xB0, 0xEA, 0xBD, 0x59, 0x98, 0x19, 0x2A, 0xB8, 0x3F, 0x0F, 0x26, 0xF3, 0xB6, 0xF7, 0xCE, 0x1B, - 0xCF, 0x03, 0xE5, 0x0B, 0xC3, 0xE5, 0x86, 0xF5, 0xFC, 0x1B, 0xEE, 0x7F, 0xF3, 0x5F, 0x21, 0xBE, 0x9E, 0x37, 0xC7, 0x43, 0xAA, - 0xC7, 0xBB, 0x71, 0x12, 0xFE, 0x17, 0xD0, 0x82, 0x94, 0x2A, 0x5E, 0xB3, 0xFF, 0xDA, 0x00, 0x63, 0x21, 0xD7, 0x17, 0xDC, 0xB9, - 0xC2, 0xC2, 0xCA, 0x2C, 0xD6, 0xC0, 0xC1, 0x98, 0xCA, 0xDD, 0x29, 0xB4, 0xA7, 0xCF, 0x78, 0x37, 0xD5, 0xBE, 0x73, 0x94, 0x7D, - 0xC2, 0x76, 0x9A, 0xD9, 0x12, 0x33, 0x21, 0x54, 0xEF, 0xA6, 0xB5, 0xD7, 0x56, 0x61, 0xB4, 0xF4, 0xA0, 0x42, 0x38, 0x0F, 0x37, - 0x44, 0xA8, 0xC6, 0xD3, 0xA9, 0x45, 0x30, 0xF1, 0xE7, 0x11, 0xC6, 0x0B, 0x89, 0x55, 0xB4, 0x5B, 0x23, 0x3B, 0xC6, 0x30, 0xB7, - 0xF3, 0x28, 0x0E, 0x55, 0xAE, 0x7D, 0x01, 0xC9, 0x88, 0x0F, 0xE4, 0xBA, 0x7D, 0x54, 0x36, 0x48, 0xD3, 0x95, 0xD7, 0x5F, 0x5D, - 0xB2, 0x78, 0xAE, 0x67, 0xE2, 0x80, 0x16, 0x5C, 0x0F, 0xAE, 0xE5, 0xC6, 0x74, 0x39, 0x9B, 0xB0, 0x44, 0x8A, 0xB9, 0xF1, 0xDC, - 0x09, 0x5E, 0x86, 0xF2, 0x80, 0x60, 0xD4, 0xB1, 0x82, 0x02, 0x45, 0x8B, 0xFE, 0x94, 0x04, 0xBD, 0xB3, 0xF8, 0x0E, 0x76, 0xC6, - 0xA2, 0xFA, 0xF6, 0x9A, 0xEE, 0x3A, 0xCA, 0xEC, 0x34, 0x55, 0x27, 0xAE, 0xD5, 0xA9, 0x92, 0xA0, 0xE3, 0x61, 0x50, 0x93, 0x06, - 0x1D, 0x0F, 0x94, 0x6D, 0x76, 0xD9, 0x01, 0x3A, 0x07, 0x51, 0x85, 0x7A, 0x9B, 0x4C, 0xF7, 0xC7, 0x0F, 0xCB, 0x54, 0xFB, 0x3A, - 0x93, 0xC3, 0x6C, 0x64, 0xAB, 0x04, 0x97, 0x8A, 0xB2, 0xEF, 0x01, 0xD8, 0x67, 0xA9, 0x28, 0xA9, 0x29, 0x4D, 0x70, 0x5D, 0x84, - 0xA6, 0xE5, 0xC8, 0x78, 0xE0, 0x47, 0x9C, 0x22, 0xE0, 0xA7, 0x16, 0x06, 0x8C, 0x31, 0xD5, 0xE7, 0x50, 0x65, 0xF3, 0x41, 0x78, - 0x8E, 0x19, 0x0D, 0x2D, 0xE2, 0xF1, 0xEA, 0x93, 0xAA, 0x0B, 0x54, 0x1A, 0xB1, 0xD0, 0xF3, 0xE9, 0xCA, 0xD0, 0x27, 0x3C, 0xFD, - 0x4A, 0x4D, 0x8D, 0xFD, 0x46, 0x5A, 0xA2, 0x0C, 0x2B, 0xA4, 0x31, 0xD7, 0xF7, 0x2B, 0xD8, 0x09, 0xF6, 0xD0, 0xDB, 0xFE, 0x26, - 0x74, 0xC1, 0xA7, 0x9E, 0xD4, 0xF9, 0x24, 0x77, 0x7F, 0x1D, 0x4D, 0xCE, 0xDE, 0x02, 0x56, 0xA6, 0x97, 0x34, 0xB7, 0xE7, 0x48, - 0x2F, 0x69, 0x3F, 0x37, 0x37, 0x69, 0x6E, 0x7B, 0x0C, 0xC8, 0x39, 0x21, 0x8F, 0xF8, 0x2F, 0xC9, 0x6B, 0x73, 0x4A, 0xE5, 0x7B, - 0x16, 0xC6, 0x84, 0x56, 0xD1, 0x89, 0x26, 0x74, 0x8A, 0x36, 0xCE, 0xE9, 0xD6, 0xF3, 0x2A, 0xBC, 0x8B, 0x2C, 0x3B, 0xAD, 0xD7, - 0xB6, 0xEF, 0x29, 0xEE, 0x39, 0x13, 0x05, 0x9D, 0x03, 0xF4, 0xD2, 0x5D, 0x20, 0xFD, 0xD7, 0x27, 0x5E, 0xF8, 0x21, 0xA4, 0x73, - 0x72, 0x6F, 0xEC, 0xA1, 0x23, 0xBC, 0xC7, 0xEF, 0x5B, 0x53, 0x4F, 0x57, 0x73, 0x40, 0x88, 0x00, 0xA8, 0x8C, 0x72, 0x65, 0x9B, - 0xC2, 0xC0, 0xF5, 0xF2, 0x60, 0xBA, 0xA4, 0x31, 0xFA, 0xE5, 0xF1, 0x79, 0x00, 0x00, 0x0F, 0x69, 0x00, 0x74, 0x65, 0x19, 0xAD, - 0x15, 0xBE, 0x27, 0xEE, 0x5B, 0x97, 0xAF, 0x5E, 0xBD, 0x1A, 0x60, 0x63, 0x15, 0xE7, 0x9E, 0x06, 0x9F, 0x13, 0xF1, 0x8E, 0x6D, - 0x5C, 0xF5, 0x3B, 0x31, 0xCD, 0xC2, 0x21, 0xEC, 0x07, 0x07, 0xF8, 0x7A, 0xC7, 0x9C, 0xC1, 0x6C, 0xAA, 0xEE, 0xDD, 0xB1, 0x78, - 0x22, 0x02, 0x60, 0xA4, 0x5B, 0xD7, 0x2F, 0x92, 0xB1, 0x07, 0x52, 0x49, 0xB2, 0x40, 0xA9, 0x98, 0x3C, 0xBE, 0x4B, 0xE1, 0x4D, - 0x8B, 0xF3, 0x50, 0x26, 0x2B, 0xF3, 0x3D, 0xA9, 0xC0, 0x83, 0x2D, 0xCC, 0xF7, 0x84, 0xDF, 0xCB, 0x46, 0xCE, 0x59, 0xBF, 0x15, - 0xB5, 0x34, 0x96, 0xDA, 0x84, 0x43, 0xCF, 0xD8, 0xAA, 0x52, 0xFD, 0x08, 0x5E, 0xAC, 0x4C, 0x02, 0x13, 0xE8, 0xE7, 0x43, 0xF4, - 0xE2, 0xBD, 0x17, 0x3A, 0xB3, 0x83, 0x31, 0xE5, 0x23, 0x8F, 0x6D, 0x68, 0x6A, 0x4E, 0x4D, 0xD0, 0x1C, 0x56, 0x9B, 0x99, 0xF3, - 0xEA, 0x1F, 0xD5, 0x03, 0x97, 0xD0, 0x44, 0x59, 0x99, 0xE2, 0xBE, 0x31, 0xC7, 0xF1, 0x4D, 0xDF, 0x9A, 0x66, 0x3D, 0x7F, 0x90, - 0x23, 0xA7, 0x50, 0x20, 0xAC, 0x37, 0x6E, 0x7D, 0x80, 0xC2, 0x2F, 0x30, 0xA6, 0x40, 0x8B, 0xCF, 0x78, 0xA8, 0xC0, 0x96, 0x85, - 0xFA, 0x63, 0xCF, 0xF0, 0x2C, 0x96, 0xEE, 0xF6, 0x26, 0xC4, 0xDA, 0xF5, 0x56, 0x18, 0x41, 0xF3, 0x50, 0x43, 0x80, 0x7E, 0xB6, - 0xC6, 0x08, 0x78, 0x6F, 0x1E, 0x6D, 0x92, 0x8A, 0xCA, 0x40, 0x5E, 0x17, 0x77, 0xE3, 0x69, 0x45, 0xE9, 0x5B, 0xF5, 0x08, 0x33, - 0x50, 0xA5, 0x41, 0x90, 0xDA, 0xD7, 0xDC, 0x44, 0x24, 0x3D, 0xEA, 0x69, 0xCD, 0xC7, 0x17, 0x2F, 0x8A, 0xA9, 0xB0, 0x7E, 0x7C, - 0x00, 0xB0, 0xA5, 0x49, 0x64, 0x42, 0x64, 0x80, 0xC5, 0xDF, 0x66, 0xFF, 0x8C, 0x8B, 0x5B, 0xFF, 0x43, 0x30, 0xFE, 0x30, 0x8B, - 0x08, 0xB6, 0x2F, 0x80, 0x0A, 0x10, 0x50, 0x74, 0x77, 0x17, 0x49, 0x48, 0x18, 0xF8, 0x18, 0x9A, 0xF6, 0x69, 0x2F, 0x05, 0x3F, - 0x78, 0x51, 0x98, 0xFE, 0xEC, 0x48, 0x4C, 0x92, 0x9C, 0xD0, 0x31, 0x6A, 0x63, 0x41, 0x27, 0x1C, 0xDA, 0xE7, 0xB3, 0xEA, 0x52, - 0x33, 0xE6, 0x6D, 0x6E, 0xCE, 0x9A, 0x24, 0xBB, 0xDA, 0x34, 0x7B, 0xD4, 0x85, 0xB8, 0x26, 0x49, 0x98, 0xA4, 0x9E, 0x51, 0x42, - 0xA5, 0x80, 0x0C, 0x8D, 0x33, 0x65, 0x2F, 0x33, 0xE1, 0x8B, 0xAD, 0x9A, 0xAA, 0x4F, 0x20, 0xB4, 0x3B, 0xDE, 0x93, 0x6D, 0xCE, - 0x2F, 0x41, 0x90, 0x0B, 0xCC, 0x39, 0x40, 0x0B, 0xC6, 0xCF, 0x03, 0xC9, 0x41, 0x4E, 0x1C, 0x98, 0x27, 0xE9, 0x4C, 0x83, 0xA1, - 0xC8, 0x6C, 0x63, 0x13, 0x1A, 0xC5, 0xF8, 0x2A, 0x9B, 0xC9, 0xAD, 0x91, 0xD6, 0x24, 0xAB, 0x7B, 0xB7, 0x8F, 0xD7, 0x55, 0x6F, - 0xB5, 0xE0, 0xF5, 0xAA, 0xA5, 0x7A, 0x11, 0x57, 0x4E, 0xFE, 0xD1, 0x5D, 0xC5, 0x9B, 0xDF, 0xE7, 0x6E, 0xFC, 0x4B, 0x79, 0xCF, - 0x84, 0x8B, 0x9F, 0x44, 0xA8, 0xBF, 0xE2, 0xD6, 0x37, 0xCF, 0x56, 0x5C, 0x0E, 0x7D, 0xF1, 0x1E, 0xA3, 0x30, 0x70, 0x06, 0x39, - 0xBE, 0xDB, 0x41, 0x9D, 0xC2, 0x5F, 0x1A, 0xEE, 0x4D, 0x4A, 0x4D, 0xB9, 0x3B, 0xD8, 0x65, 0x5F, 0xD9, 0x18, 0xEF, 0x92, 0xA2, - 0xA0, 0x17, 0x89, 0x05, 0xB4, 0x96, 0xCA, 0xEC, 0xFD, 0x9D, 0x5D, 0x36, 0xB5, 0xEE, 0x22, 0x19, 0x3B, 0x2C, 0x3F, 0xE8, 0x00, - 0x0C, 0x7F, 0x81, 0x1A, 0x2F, 0x5F, 0xAB, 0x77, 0x47, 0x7A, 0xAD, 0x6E, 0xB7, 0x77, 0x48, 0x33, 0xE8, 0x05, 0xF8, 0x85, 0x52, - 0xC1, 0x90, 0x3B, 0xCA, 0x77, 0x68, 0xA0, 0x4F, 0xF8, 0x83, 0xEF, 0xCD, 0x86, 0x78, 0xFB, 0xD8, 0x74, 0x3E, 0x22, 0x97, 0xD1, - 0x5C, 0xF9, 0x66, 0x95, 0x7C, 0x91, 0xAD, 0x91, 0xD7, 0xEB, 0xFD, 0x8B, 0x5F, 0x57, 0x6A, 0xD8, 0xBF, 0xD4, 0xD5, 0xA5, 0xCA, - 0x9C, 0x56, 0xEE, 0x31, 0xE1, 0x96, 0x94, 0xD6, 0x6E, 0x1C, 0x51, 0x80, 0x27, 0xE3, 0x56, 0x47, 0x59, 0xB9, 0xD5, 0xE1, 0x24, - 0x81, 0x47, 0xBC, 0x80, 0x63, 0x5D, 0x59, 0x0A, 0x04, 0xC5, 0x10, 0x2D, 0x28, 0x4D, 0xEA, 0x45, 0x41, 0xE4, 0x62, 0xA1, 0x24, - 0xF3, 0x37, 0x12, 0x2D, 0x24, 0x01, 0x90, 0xCB, 0x65, 0xF5, 0x9A, 0x12, 0xAF, 0x64, 0x5F, 0x72, 0xF9, 0x60, 0x5F, 0x59, 0x0A, - 0xF0, 0x7A, 0x3D, 0xAC, 0x1A, 0xEF, 0x03, 0x5D, 0x6A, 0x01, 0x02, 0xC3, 0x5F, 0xF3, 0x70, 0xD9, 0xF6, 0xA6, 0x1F, 0xB8, 0xDF, - 0x25, 0x2D, 0x08, 0xF5, 0xEA, 0x8D, 0xBE, 0xEF, 0x23, 0x81, 0xB5, 0x23, 0x49, 0x34, 0x02, 0x1B, 0xF3, 0xC0, 0x11, 0x4F, 0xDC, - 0xDD, 0x41, 0x9C, 0xD8, 0x50, 0x24, 0x16, 0x08, 0x14, 0x70, 0x4C, 0xDC, 0x29, 0x97, 0x9E, 0x88, 0xD6, 0x74, 0xF0, 0x2C, 0x31, - 0x2B, 0xF8, 0x56, 0x49, 0x32, 0xB5, 0x12, 0x15, 0x4F, 0x5E, 0x93, 0x94, 0xD0, 0xC3, 0xCB, 0x41, 0x16, 0xB0, 0x56, 0xE9, 0xB6, - 0x37, 0x06, 0xFD, 0x6F, 0x55, 0x26, 0xEB, 0x15, 0x6B, 0x71, 0xD7, 0x44, 0x40, 0x52, 0xB5, 0xC9, 0xA8, 0x87, 0x2C, 0x07, 0x1B, - 0xEC, 0x61, 0x6B, 0x3B, 0x05, 0x7E, 0xB0, 0xAB, 0x10, 0x05, 0x0C, 0xA3, 0xBE, 0x7A, 0xF9, 0x26, 0x5F, 0x5B, 0xC0, 0x35, 0x65, - 0xDC, 0x90, 0x07, 0x25, 0x6C, 0x5E, 0xBB, 0x44, 0x39, 0x52, 0xFB, 0xEB, 0x0A, 0x34, 0xA3, 0x9A, 0x33, 0xF1, 0x60, 0x67, 0x1A, - 0x93, 0xEC, 0xA8, 0x8F, 0x08, 0x78, 0xC6, 0xE3, 0x87, 0x31, 0xAE, 0x76, 0xB1, 0x7D, 0xB6, 0x01, 0x2C, 0x14, 0x24, 0xDB, 0x9E, - 0x5E, 0x61, 0xBB, 0xFA, 0x81, 0x19, 0x37, 0x54, 0xD9, 0x27, 0xFB, 0xB5, 0x14, 0xFB, 0x45, 0xA9, 0x47, 0xA6, 0xA4, 0x11, 0xA0, - 0x0B, 0x98, 0xDB, 0xB4, 0xBA, 0xF5, 0x1B, 0x34, 0x52, 0x86, 0x1E, 0x3E, 0x75, 0xC6, 0xD1, 0x0C, 0x84, 0xA2, 0x96, 0x6D, 0x51, - 0x31, 0x8A, 0xBB, 0xDE, 0xE8, 0x15, 0x86, 0xA5, 0xC2, 0x34, 0x24, 0x31, 0x53, 0x4C, 0x74, 0x56, 0x9B, 0x82, 0xD4, 0x36, 0x9B, - 0x01, 0x65, 0xD9, 0x5B, 0x00, 0x8F, 0x75, 0x04, 0x89, 0x6A, 0xB7, 0x36, 0x65, 0x1E, 0x71, 0x5E, 0x0B, 0x03, 0xBA, 0xF4, 0x08, - 0x2F, 0x44, 0x4E, 0x2C, 0x30, 0xC7, 0xD3, 0x46, 0xCD, 0x4F, 0xCC, 0x52, 0xC7, 0x5A, 0x42, 0x52, 0x38, 0xE3, 0xEF, 0x1B, 0x53, - 0x44, 0x23, 0x29, 0xF6, 0xD2, 0xF7, 0xC6, 0xFC, 0x51, 0x98, 0x3F, 0xE4, 0x0B, 0x1E, 0x22, 0x4B, 0xFD, 0x64, 0x16, 0xCF, 0xF8, - 0x21, 0x2D, 0x81, 0xF7, 0xE6, 0x62, 0x1D, 0xA6, 0x75, 0x1C, 0x27, 0xBC, 0x80, 0x67, 0xC5, 0x3E, 0x12, 0x8F, 0x82, 0x68, 0x10, - 0xD4, 0x8F, 0xC2, 0xFC, 0x21, 0x5F, 0x05, 0x31, 0x41, 0xC0, 0x9F, 0x8D, 0x20, 0x1C, 0x1F, 0x73, 0xC9, 0xA9, 0x96, 0x03, 0x22, - 0xD9, 0x7D, 0xE0, 0x4A, 0xBF, 0x4D, 0x6E, 0x6E, 0x49, 0xC6, 0x48, 0xF9, 0x7F, 0x8D, 0x03, 0xD8, 0x52, 0x14, 0x23, 0x7B, 0x14, - 0xFC, 0x45, 0x14, 0x0E, 0x9D, 0x78, 0x26, 0x05, 0x60, 0x33, 0xB6, 0x1B, 0xE4, 0xC8, 0x91, 0x0C, 0x88, 0x15, 0x7C, 0xE1, 0x6A, - 0x5E, 0x66, 0x5A, 0x0D, 0xD3, 0x23, 0x28, 0xAE, 0xA6, 0xE4, 0x03, 0x50, 0xEE, 0xB6, 0x54, 0xAE, 0xD5, 0x98, 0x30, 0x23, 0x55, - 0xB0, 0x26, 0xCC, 0x51, 0x8D, 0xF3, 0x26, 0x8D, 0x4F, 0x36, 0x5C, 0xF4, 0x18, 0x8B, 0x00, 0x8C, 0xA3, 0x5A, 0x81, 0x27, 0x96, - 0x42, 0xA4, 0x07, 0xBC, 0xDD, 0xD6, 0xFB, 0x42, 0xC0, 0xDD, 0x78, 0x96, 0xB1, 0x69, 0xB5, 0x7B, 0xDD, 0xCE, 0x3E, 0x5A, 0x43, - 0xA9, 0x40, 0x91, 0xB3, 0x54, 0x22, 0x3E, 0x37, 0x45, 0x43, 0xBB, 0x83, 0xFE, 0x6B, 0xC6, 0x1F, 0x43, 0xE6, 0xC8, 0xC9, 0x1B, - 0x69, 0x02, 0x4F, 0x65, 0xFF, 0xAF, 0x11, 0x36, 0xB4, 0x7D, 0x36, 0x3C, 0x14, 0x12, 0xA2, 0x4E, 0x07, 0x38, 0x92, 0x90, 0xAC, - 0x66, 0x9F, 0x1E, 0x9F, 0x20, 0x24, 0xD1, 0xA0, 0x9E, 0x90, 0x67, 0xBC, 0x1E, 0xD4, 0xDF, 0x7B, 0x85, 0xF3, 0x99, 0xAC, 0x3D, - 0x35, 0x59, 0xFB, 0x82, 0xF3, 0xF6, 0x44, 0x73, 0xEC, 0x2C, 0x72, 0xB2, 0xDB, 0xD0, 0xE6, 0xE4, 0x99, 0x93, 0x6B, 0x9B, 0xB7, - 0x4F, 0x32, 0xCE, 0xA0, 0xF1, 0xA5, 0x2D, 0xFB, 0xE1, 0x73, 0x66, 0x6E, 0x23, 0xA1, 0x60, 0xF4, 0x2F, 0xDE, 0x03, 0x9F, 0xC7, - 0x0A, 0x81, 0xC9, 0xF8, 0x45, 0x1B, 0x90, 0x76, 0x07, 0x1B, 0x34, 0x62, 0x34, 0x31, 0xD2, 0xA4, 0xD9, 0x83, 0x59, 0x8C, 0xDF, - 0x58, 0xE6, 0x0B, 0xBE, 0xCE, 0xA5, 0xA8, 0xF5, 0x05, 0x0C, 0x53, 0x4A, 0xEC, 0xDA, 0x60, 0x0C, 0xD2, 0x1C, 0xF2, 0x7B, 0xE9, - 0x4A, 0x87, 0x3B, 0x73, 0x4D, 0x64, 0xE5, 0xFD, 0xEB, 0x6D, 0xC4, 0x70, 0xDA, 0x59, 0x90, 0xAC, 0x96, 0xD0, 0x4C, 0x70, 0x29, - 0x87, 0x4B, 0xAB, 0x47, 0xBD, 0x4B, 0xD7, 0x76, 0x21, 0x39, 0x9B, 0xC9, 0xF2, 0x18, 0x6F, 0x5E, 0xBC, 0x95, 0x21, 0x1B, 0x4C, - 0x2C, 0xDA, 0xDB, 0x38, 0xD7, 0x9E, 0xA8, 0x09, 0x55, 0xF0, 0x3E, 0x6C, 0xBD, 0x56, 0xE3, 0xEA, 0x2D, 0x1C, 0x4D, 0x6C, 0x1D, - 0x0D, 0xA8, 0x55, 0x87, 0x41, 0x34, 0x6A, 0x6B, 0xF2, 0x19, 0xCB, 0x90, 0x96, 0x0B, 0xAE, 0x2B, 0xDA, 0x6A, 0x7D, 0xEC, 0x52, - 0x25, 0x11, 0x3A, 0xE9, 0x51, 0x6E, 0x1A, 0x7C, 0xD0, 0xD9, 0xA4, 0x45, 0x72, 0x93, 0xB2, 0x85, 0x98, 0xF1, 0x04, 0x75, 0xE6, - 0x2F, 0xD4, 0xBB, 0xEC, 0x6A, 0x6E, 0x91, 0x3B, 0x4A, 0xCE, 0xCA, 0xE7, 0x16, 0x9B, 0x05, 0xE1, 0xAE, 0x60, 0xB0, 0x29, 0x61, - 0x5B, 0x18, 0x37, 0x95, 0x0F, 0xAA, 0xA9, 0xBE, 0xDE, 0x4E, 0x64, 0x7D, 0xC8, 0xD8, 0x5F, 0xC5, 0x26, 0x27, 0xAC, 0x42, 0x37, - 0xF5, 0xE4, 0x68, 0x30, 0x0E, 0x3B, 0xF6, 0x8D, 0xBB, 0x24, 0xBF, 0xAA, 0x2D, 0x76, 0x46, 0xBA, 0xB2, 0xDC, 0x91, 0x81, 0xFB, - 0x7C, 0x39, 0xCD, 0x38, 0xBC, 0x89, 0x57, 0xE6, 0xC2, 0x22, 0xD8, 0xB8, 0x43, 0xEC, 0x1B, 0x37, 0x75, 0x6E, 0xBF, 0x2C, 0x8F, - 0xA3, 0x57, 0x58, 0xD6, 0xEF, 0xBF, 0x9B, 0x25, 0xC5, 0xD3, 0x0A, 0x84, 0xF3, 0xB0, 0x2B, 0xA1, 0x81, 0xE6, 0xE4, 0xB8, 0x17, - 0xDA, 0x68, 0xE2, 0xD5, 0xF1, 0xD3, 0xB0, 0x2D, 0x62, 0x19, 0xB1, 0x47, 0xB9, 0x49, 0x59, 0xB1, 0x51, 0x2C, 0x29, 0x8F, 0x02, - 0x74, 0xD1, 0x5D, 0xF3, 0x96, 0xE5, 0x66, 0x76, 0x7B, 0x38, 0x1D, 0xDE, 0x60, 0x47, 0x84, 0x65, 0x1D, 0x94, 0x4E, 0x11, 0x71, - 0x1C, 0xB2, 0x89, 0x21, 0x11, 0x72, 0x61, 0x12, 0x60, 0x99, 0x8D, 0xEF, 0xF8, 0xD0, 0x72, 0x82, 0x63, 0x2C, 0xEA, 0xEA, 0xA2, - 0xEA, 0x54, 0x02, 0xCA, 0x85, 0x99, 0x63, 0xD5, 0x67, 0xCF, 0x5C, 0xF5, 0x1C, 0xB4, 0xF7, 0x45, 0x96, 0x82, 0xAC, 0x95, 0x14, - 0xDF, 0x27, 0x69, 0x52, 0x32, 0x6C, 0x3D, 0x98, 0x08, 0x0C, 0xE2, 0xB7, 0x04, 0x2B, 0x69, 0x5C, 0x9D, 0xD9, 0xDF, 0x59, 0x9D, - 0xA6, 0x42, 0xEF, 0x5A, 0x13, 0x1C, 0x48, 0xB4, 0xC2, 0x19, 0xF8, 0x73, 0x83, 0x27, 0x48, 0xC7, 0x6B, 0xAA, 0xA5, 0x57, 0xBC, - 0x79, 0x52, 0xC4, 0x33, 0x45, 0x98, 0x04, 0x6C, 0x50, 0xD7, 0xE3, 0x4B, 0x65, 0x52, 0x5F, 0x5F, 0x77, 0xC6, 0xFA, 0xBA, 0x6B, - 0x5C, 0x5F, 0x16, 0xE6, 0xC2, 0x4C, 0xAF, 0xB2, 0x2A, 0x45, 0xCA, 0x75, 0x26, 0xC0, 0xE6, 0xF1, 0x6B, 0x6D, 0xB0, 0xC5, 0x9A, - 0x11, 0x7E, 0xAF, 0x48, 0x01, 0xBC, 0x67, 0xB1, 0x3E, 0xC6, 0xBA, 0x16, 0x7F, 0xCA, 0xC0, 0x19, 0x9E, 0xDB, 0x18, 0xA4, 0x05, - 0x5A, 0x52, 0x0D, 0x3B, 0x2A, 0x40, 0x91, 0x85, 0xCC, 0x45, 0x91, 0x34, 0x79, 0x97, 0xCA, 0xFB, 0xC5, 0xE6, 0x75, 0x22, 0x3B, - 0xBA, 0xCC, 0xC2, 0xB4, 0xE8, 0xE8, 0x56, 0xC4, 0xB9, 0xC9, 0xC2, 0x5C, 0x3A, 0xEA, 0xAC, 0xC3, 0x50, 0x8D, 0x5A, 0x0B, 0x71, - 0x02, 0x2B, 0x83, 0x14, 0x49, 0x67, 0x3C, 0x1D, 0x7F, 0xC2, 0x3E, 0x26, 0x09, 0x2E, 0x73, 0xAE, 0x82, 0x55, 0xCF, 0x4F, 0xB4, - 0xB4, 0xC1, 0xED, 0x08, 0xA5, 0x65, 0x46, 0xE0, 0x47, 0x11, 0xE5, 0x34, 0xB1, 0x4F, 0x1F, 0x1C, 0x87, 0x09, 0xB1, 0x19, 0x2B, - 0x46, 0x88, 0x32, 0xF3, 0x60, 0xAF, 0x08, 0x30, 0x6F, 0x12, 0x01, 0xE2, 0x43, 0x44, 0x00, 0x3C, 0x7E, 0x98, 0x37, 0x87, 0x97, - 0x59, 0xEC, 0x89, 0x2F, 0x33, 0x47, 0xD3, 0x48, 0x1E, 0xC6, 0xC8, 0xEF, 0xD1, 0x40, 0x53, 0x18, 0x16, 0x1A, 0x11, 0x5C, 0xC4, - 0xB4, 0x5D, 0x57, 0xC7, 0xE4, 0x30, 0xD7, 0x2C, 0xB8, 0xC8, 0x79, 0xE0, 0x88, 0xC8, 0xB8, 0x50, 0x1B, 0x10, 0x1A, 0xC0, 0xCD, - 0x01, 0x71, 0xE0, 0x17, 0x35, 0xC3, 0x4E, 0x05, 0xFA, 0xA4, 0x02, 0xB9, 0xDF, 0x7C, 0x34, 0x94, 0x6E, 0xB7, 0x6A, 0x2C, 0xE2, - 0x9E, 0x70, 0xA5, 0x3D, 0x3C, 0x01, 0xDA, 0x5F, 0x7B, 0xE7, 0xB9, 0x82, 0x9D, 0xA0, 0xE5, 0x34, 0x4C, 0x5C, 0x6E, 0xD2, 0xCE, - 0xC5, 0xF0, 0x74, 0x4C, 0x24, 0x27, 0x71, 0xEB, 0x05, 0xA4, 0x17, 0x82, 0x65, 0x99, 0xAC, 0x47, 0x70, 0xCA, 0xCC, 0x75, 0x26, - 0xC1, 0x93, 0xA7, 0x93, 0x19, 0xAD, 0xA8, 0x8C, 0xAC, 0x9B, 0x7C, 0x75, 0x2C, 0xE8, 0x1B, 0xE8, 0x66, 0x3A, 0x0B, 0x71, 0x46, - 0x80, 0xD6, 0xE1, 0x9F, 0x0D, 0xCC, 0xC4, 0xC6, 0x5C, 0x19, 0x9B, 0xA0, 0x9C, 0x6E, 0x66, 0xC2, 0x78, 0x85, 0xBE, 0x67, 0xF8, - 0xCB, 0xBC, 0xB5, 0x21, 0x48, 0x27, 0x19, 0x53, 0x0E, 0xAE, 0x8C, 0x62, 0x3C, 0x0F, 0xC4, 0xB1, 0x00, 0x24, 0xF1, 0x87, 0x80, - 0x55, 0x58, 0x1F, 0xBA, 0xA4, 0x4F, 0x30, 0x65, 0xDC, 0x13, 0xAF, 0xD8, 0x6E, 0x33, 0x75, 0x96, 0x45, 0xF6, 0x45, 0x0E, 0x43, - 0x62, 0xC2, 0x90, 0x73, 0xCE, 0x84, 0x74, 0x63, 0x2C, 0xC8, 0x04, 0x7B, 0x94, 0x97, 0xCA, 0xB9, 0x38, 0x0E, 0xED, 0x16, 0xCE, - 0xBE, 0xC4, 0x9B, 0xD3, 0x0D, 0x9D, 0x15, 0x8E, 0xCE, 0x70, 0xD5, 0x19, 0x9D, 0x15, 0xCE, 0xCE, 0xE6, 0xCE, 0xCE, 0x1C, 0x3D, - 0xCC, 0xCD, 0x1E, 0xC4, 0x59, 0xC0, 0x1C, 0x9A, 0x0C, 0x17, 0x26, 0x8B, 0x59, 0x6A, 0xE3, 0xF0, 0x72, 0x8F, 0x2A, 0x95, 0x37, - 0x08, 0x18, 0xA0, 0xCF, 0xA0, 0xF0, 0xBA, 0x08, 0x97, 0x2E, 0x65, 0x8A, 0xEE, 0x0A, 0x2E, 0x4D, 0xB5, 0x68, 0x16, 0x5A, 0x3F, - 0xB5, 0xCD, 0x76, 0x49, 0x9B, 0x61, 0x90, 0x57, 0xA4, 0x68, 0x65, 0xDD, 0x4A, 0x6D, 0xE9, 0xD3, 0x7F, 0x91, 0x84, 0xF8, 0xFF, - 0xF7, 0x74, 0x48, 0x61, 0xB4, 0x88, 0xDB, 0x65, 0x25, 0x05, 0x37, 0xCD, 0x4A, 0x92, 0x94, 0xBC, 0x9B, 0x76, 0xF0, 0x54, 0xED, - 0xD7, 0xBE, 0x6B, 0x9F, 0xD6, 0xBB, 0x6F, 0x30, 0x4E, 0xB9, 0x71, 0x76, 0xB7, 0x57, 0x22, 0x40, 0x34, 0x25, 0x1C, 0x4D, 0x26, - 0x18, 0xBA, 0x93, 0x5A, 0x86, 0x6C, 0xDF, 0xC4, 0x10, 0xED, 0xBC, 0x7C, 0x2A, 0x6F, 0x23, 0x6F, 0xEA, 0xB5, 0xF7, 0x6C, 0xBE, - 0x36, 0x9A, 0x3B, 0xEF, 0xB3, 0x24, 0xF5, 0x61, 0xC9, 0x06, 0x6D, 0x6F, 0xE6, 0x5D, 0x4A, 0xAA, 0xB1, 0x05, 0x80, 0x60, 0x21, - 0x94, 0xCF, 0x45, 0x28, 0x64, 0x15, 0xDC, 0x3B, 0xBF, 0xB9, 0x8D, 0xF3, 0x6F, 0x60, 0xD9, 0x8B, 0xE0, 0x7B, 0x3C, 0xA7, 0x32, - 0x8B, 0x42, 0x20, 0x7A, 0x94, 0xE3, 0xC7, 0xED, 0x7C, 0x11, 0xDE, 0x06, 0x66, 0x37, 0xF2, 0x19, 0x4C, 0xEA, 0xA5, 0x22, 0xAD, - 0x73, 0xA9, 0x78, 0xC1, 0x11, 0xA9, 0x1E, 0x69, 0x17, 0x6D, 0xBD, 0xAF, 0xE1, 0x0D, 0x78, 0x24, 0x2F, 0x87, 0x98, 0x58, 0xA1, - 0x30, 0xCA, 0xC3, 0x03, 0xD4, 0x18, 0xC9, 0xE3, 0x32, 0x42, 0x86, 0x70, 0xC9, 0xCF, 0x59, 0x1A, 0xC2, 0xBB, 0x2D, 0x83, 0x4B, - 0xE7, 0x8A, 0x58, 0xF2, 0x4D, 0x77, 0x05, 0x2C, 0x08, 0xFA, 0xE8, 0x86, 0x62, 0x8F, 0xFF, 0x50, 0xF4, 0x3D, 0x1E, 0x28, 0x0B, - 0xE3, 0xF9, 0xA1, 0x35, 0xCB, 0x87, 0x24, 0x6B, 0x7B, 0xBC, 0x23, 0xED, 0x4E, 0x87, 0x15, 0xE3, 0x03, 0x93, 0x2B, 0x7C, 0x61, - 0x6C, 0x43, 0xEF, 0x01, 0xE6, 0xF7, 0xB0, 0x87, 0xF6, 0x35, 0xD4, 0xEF, 0xC5, 0x89, 0x47, 0x1E, 0x2E, 0xC3, 0x75, 0xB8, 0xA0, - 0x2D, 0xB4, 0x3F, 0x7D, 0xAF, 0xF6, 0xD0, 0x60, 0xBC, 0xAC, 0x6D, 0x9F, 0x04, 0xC6, 0x9D, 0x15, 0xCA, 0x4C, 0xF7, 0x89, 0x2C, - 0xAC, 0xDE, 0xE7, 0x9D, 0xB9, 0xF5, 0xBD, 0xA7, 0x1A, 0x76, 0xAF, 0xEF, 0x75, 0x87, 0xBA, 0x97, 0xA7, 0xCE, 0x8A, 0x16, 0xF2, - 0xC4, 0x50, 0x37, 0x85, 0xA4, 0x2D, 0x43, 0xED, 0x2A, 0xD6, 0xC8, 0x63, 0x43, 0x28, 0x72, 0x79, 0x6F, 0xF1, 0xBD, 0xA5, 0x75, - 0x40, 0x22, 0x5B, 0x94, 0xB1, 0xC9, 0xEA, 0xFB, 0x23, 0x6C, 0xF2, 0xCF, 0x31, 0x32, 0xF5, 0x7A, 0xC0, 0xED, 0xA6, 0x5E, 0xE7, - 0x26, 0xCB, 0x6E, 0x56, 0x22, 0xF6, 0x09, 0x3E, 0x90, 0xF0, 0x55, 0xFA, 0xE0, 0xCD, 0xA2, 0x47, 0x2D, 0x2F, 0x56, 0x9F, 0xCF, - 0x62, 0xC7, 0xC7, 0x6C, 0xEA, 0xFD, 0x4F, 0xF2, 0xD4, 0x9A, 0xA9, 0xAD, 0x57, 0xA5, 0xE0, 0xAB, 0x35, 0x85, 0x78, 0x4C, 0x50, - 0x27, 0xAE, 0xE2, 0xA2, 0xFC, 0x41, 0x50, 0x9A, 0x77, 0x0A, 0xEB, 0x8F, 0x42, 0x60, 0x92, 0x88, 0x28, 0x5E, 0xF3, 0x2E, 0x89, - 0xF9, 0x8A, 0xE3, 0xDA, 0x24, 0xF2, 0x3A, 0x1E, 0x5E, 0xB9, 0xD5, 0x2D, 0xCC, 0x61, 0x01, 0x7E, 0x55, 0xFA, 0xDD, 0x60, 0x52, - 0xEB, 0xCB, 0xEF, 0x81, 0xFA, 0xA6, 0x12, 0x85, 0x5F, 0xD9, 0x09, 0x9D, 0x28, 0x29, 0xF2, 0xC6, 0x4E, 0xE9, 0x11, 0x79, 0xF8, - 0x00, 0x19, 0x47, 0x38, 0xD4, 0x71, 0xBF, 0x20, 0xBA, 0x1B, 0xF8, 0x6E, 0x93, 0xAF, 0xC6, 0x09, 0x77, 0xD6, 0x19, 0xE7, 0x52, - 0xF2, 0xCF, 0xED, 0x1B, 0x5B, 0x81, 0x78, 0x71, 0xCE, 0xA7, 0x88, 0xBB, 0xD6, 0xD5, 0x78, 0xFB, 0x62, 0x97, 0x14, 0x03, 0xC6, - 0xAE, 0x2B, 0x06, 0xA8, 0x91, 0xC0, 0x3F, 0x74, 0xAF, 0x00, 0xBD, 0xDC, 0xB9, 0x4A, 0xC8, 0x3A, 0x12, 0x0C, 0xFC, 0x26, 0x38, - 0xE8, 0xBD, 0x00, 0x95, 0x6C, 0x62, 0x56, 0x27, 0xBA, 0x31, 0xEB, 0xAC, 0x85, 0x6F, 0x51, 0xEC, 0xAB, 0x77, 0x29, 0x0C, 0x82, - 0xC6, 0xAC, 0x80, 0xAA, 0x82, 0x31, 0x45, 0x99, 0xB8, 0xA1, 0x82, 0xB7, 0xE8, 0x04, 0x68, 0xB4, 0x0B, 0x57, 0x02, 0x78, 0x6B, - 0x35, 0x02, 0x86, 0x50, 0x31, 0x42, 0xF2, 0xE3, 0x21, 0xE6, 0x8A, 0x33, 0x2B, 0x66, 0xCC, 0xC3, 0x19, 0xE7, 0xF7, 0x61, 0x3C, - 0xEE, 0xFF, 0x4E, 0xA4, 0x19, 0xAF, 0xB9, 0xF3, 0xDC, 0x29, 0x09, 0x4D, 0x79, 0xDB, 0x17, 0xA4, 0x21, 0x63, 0xDD, 0x0A, 0xA1, - 0x77, 0xDA, 0x9D, 0x4D, 0xAA, 0x69, 0x26, 0x7D, 0x54, 0xB2, 0x40, 0x20, 0x55, 0x14, 0x13, 0x25, 0x61, 0x61, 0x4D, 0xA6, 0x7D, - 0xBF, 0xEE, 0xF0, 0x13, 0xF6, 0x85, 0x7D, 0x89, 0x66, 0xF1, 0x09, 0x5E, 0xBF, 0x0B, 0xCB, 0xEB, 0xF7, 0x75, 0x96, 0x89, 0x65, - 0x9B, 0x72, 0xEF, 0x5E, 0x1E, 0x6E, 0x6E, 0xCE, 0x8D, 0xC4, 0x1B, 0x11, 0x84, 0x6E, 0x59, 0x31, 0x16, 0x2F, 0x78, 0xF0, 0x70, - 0xED, 0xF8, 0x0A, 0x04, 0xC7, 0xD4, 0x5D, 0x48, 0xD8, 0x69, 0x72, 0xB6, 0x88, 0xF4, 0x3B, 0x00, 0x2B, 0x86, 0xDC, 0x51, 0x9B, - 0x5F, 0xF0, 0x79, 0xB9, 0xDD, 0xE2, 0x09, 0x0F, 0xD3, 0x12, 0x45, 0x52, 0x12, 0x46, 0x16, 0x18, 0x8E, 0x4A, 0x78, 0x3D, 0x22, - 0x35, 0x17, 0xAC, 0x14, 0x01, 0x7F, 0x7D, 0x95, 0x8E, 0x41, 0x55, 0xE4, 0x4D, 0x16, 0x26, 0x6F, 0xB2, 0xD4, 0x1E, 0xCE, 0x44, - 0xB9, 0xE9, 0xD7, 0xB8, 0xBC, 0x8D, 0x90, 0xF5, 0x95, 0xB7, 0x32, 0xC9, 0x7E, 0xF1, 0x91, 0x95, 0x73, 0x2C, 0x40, 0x7F, 0xED, - 0x77, 0x2A, 0xB3, 0x58, 0xDF, 0x44, 0x68, 0xD1, 0x0B, 0x30, 0x68, 0x41, 0x72, 0x5D, 0xD1, 0x22, 0x46, 0x90, 0xC3, 0x32, 0x11, - 0xEE, 0xCE, 0xC2, 0xAB, 0x5A, 0xDE, 0x32, 0x3B, 0x4A, 0xA4, 0x36, 0xB0, 0xEC, 0xC4, 0x85, 0x0C, 0x09, 0xCC, 0xC2, 0x94, 0x26, - 0xFF, 0x92, 0x2B, 0xAC, 0x09, 0xC6, 0x72, 0xAC, 0xBC, 0xDA, 0xCE, 0x2F, 0x29, 0xCA, 0x65, 0x9E, 0x90, 0x00, 0xCE, 0xFD, 0x77, - 0x63, 0xE1, 0xB9, 0xCC, 0x40, 0xE8, 0xE0, 0x44, 0xA5, 0x6A, 0x6E, 0xAC, 0x77, 0x5B, 0xCD, 0x55, 0xC9, 0xE9, 0xFF, 0x54, 0xB2, - 0xE6, 0x53, 0xAE, 0x8F, 0x97, 0xAF, 0x4E, 0x7A, 0x3A, 0xAE, 0xBB, 0x5E, 0xDD, 0x82, 0x81, 0xE2, 0x1D, 0x8A, 0x42, 0xA9, 0xEA, - 0x56, 0xA8, 0x5C, 0x93, 0x40, 0xE8, 0x6D, 0xF3, 0xFC, 0xE1, 0x91, 0x24, 0x2A, 0xC3, 0xBD, 0xFB, 0xF8, 0xD8, 0x7B, 0xF4, 0xC8, - 0x8A, 0xAF, 0x18, 0x2E, 0x3E, 0xD4, 0x19, 0xD1, 0x5D, 0x21, 0x32, 0xB6, 0xA2, 0x0F, 0x78, 0x68, 0xD5, 0xC1, 0x9B, 0x69, 0x48, - 0x46, 0xB8, 0x41, 0x45, 0x4C, 0xBC, 0x57, 0x09, 0xE2, 0x9F, 0x8F, 0x37, 0x34, 0x73, 0x0C, 0x7F, 0x48, 0x4F, 0x13, 0x16, 0x9D, - 0xE4, 0x8E, 0xD6, 0x09, 0xDD, 0xA1, 0xBA, 0x5C, 0x5C, 0xA9, 0x04, 0xBD, 0x05, 0xC3, 0x0E, 0x9D, 0x44, 0x1B, 0x5D, 0x74, 0xBA, - 0x98, 0x05, 0xF8, 0xFC, 0x99, 0x41, 0x1D, 0x00, 0xBB, 0x95, 0x0D, 0xF0, 0xAD, 0x90, 0x4F, 0x51, 0x0F, 0xF7, 0x2C, 0xFE, 0xF0, - 0x83, 0xD1, 0x0B, 0x76, 0x8D, 0x1D, 0x19, 0xE9, 0x8E, 0xCE, 0x8C, 0xDC, 0xA6, 0x0E, 0x2B, 0x45, 0x78, 0xA7, 0x18, 0x5C, 0x8D, - 0x4B, 0x69, 0xA9, 0x49, 0xF6, 0xFA, 0xEA, 0x58, 0xFD, 0xFA, 0x96, 0x8E, 0x62, 0x8C, 0x57, 0xD5, 0x76, 0xF1, 0x76, 0xBB, 0xDE, - 0x6E, 0xE7, 0x3C, 0xC4, 0x73, 0x5A, 0x7F, 0xD9, 0x8E, 0x78, 0x6C, 0xCA, 0x17, 0xA9, 0xF1, 0xB8, 0x01, 0x92, 0x40, 0x40, 0x3E, - 0xFE, 0x3C, 0x47, 0x3D, 0xC7, 0xC0, 0x67, 0x3F, 0x9E, 0xE0, 0x0C, 0xE3, 0x85, 0x22, 0x90, 0x5A, 0xDA, 0xED, 0x35, 0x46, 0x49, - 0x7B, 0x9B, 0xDC, 0xB1, 0x6C, 0x53, 0x1A, 0x5E, 0xAB, 0xC1, 0xE3, 0xC9, 0x09, 0x48, 0x26, 0xB2, 0xE4, 0x2E, 0x30, 0xA4, 0x6C, - 0x71, 0xB7, 0x23, 0xA7, 0x88, 0xD3, 0x39, 0xAE, 0x37, 0xFE, 0xA2, 0xD1, 0xF7, 0xD0, 0xDD, 0x9B, 0x87, 0x14, 0x61, 0xD7, 0x62, - 0xBB, 0x87, 0x6F, 0x90, 0x7A, 0xC6, 0xD0, 0x04, 0xD1, 0xE1, 0xEA, 0xC2, 0x30, 0xD5, 0x73, 0x0A, 0x46, 0xBD, 0xE0, 0x0F, 0x1F, - 0x63, 0x0F, 0x08, 0x52, 0xCA, 0x97, 0x30, 0x24, 0x6A, 0x88, 0xF2, 0x30, 0xE3, 0x40, 0x25, 0xB8, 0x0B, 0x4C, 0xCA, 0x89, 0x89, - 0x9B, 0xF1, 0x1C, 0xA4, 0x83, 0x31, 0xB6, 0x92, 0x05, 0x08, 0xEC, 0x8E, 0x8B, 0xB3, 0xDD, 0xCB, 0x0A, 0xFD, 0x02, 0xB1, 0xD2, - 0xF3, 0x06, 0x52, 0xD0, 0x7B, 0x08, 0x3F, 0x42, 0xA1, 0x8F, 0xA6, 0x48, 0xFC, 0x31, 0xF0, 0x1F, 0x22, 0x7B, 0x8E, 0x81, 0x45, - 0x96, 0xD3, 0x8F, 0x62, 0x62, 0x1F, 0x88, 0x9A, 0x62, 0xF5, 0x30, 0xE8, 0xA5, 0x35, 0x47, 0x35, 0xAE, 0x83, 0x08, 0xA9, 0x70, - 0x49, 0x9C, 0x37, 0x84, 0xEB, 0x67, 0xD8, 0x32, 0x2B, 0x81, 0x58, 0xB2, 0xB2, 0x55, 0x6C, 0xD6, 0x48, 0x49, 0xCC, 0x78, 0xAE, - 0x43, 0x6C, 0xBA, 0xF4, 0x66, 0x54, 0x19, 0xDE, 0xBA, 0x99, 0x63, 0xE5, 0xAE, 0x97, 0xBC, 0x8D, 0x24, 0x79, 0xBA, 0x94, 0x7B, - 0xAD, 0xFE, 0x36, 0x29, 0xAF, 0x1C, 0x5F, 0xAF, 0x58, 0xCB, 0x88, 0xAE, 0x24, 0x2F, 0xC3, 0xAA, 0xCA, 0x20, 0xE6, 0xBB, 0x5C, - 0x9A, 0xBD, 0x2F, 0xF8, 0xA5, 0x5F, 0x8A, 0x46, 0xC3, 0x3F, 0xD5, 0x4D, 0x2D, 0x15, 0x1A, 0x46, 0xEE, 0xAA, 0xE8, 0xF9, 0x2C, - 0x74, 0xAC, 0x96, 0x17, 0x3C, 0x23, 0x04, 0xD1, 0x25, 0xD7, 0x61, 0x4E, 0xFF, 0x98, 0x7E, 0x75, 0xF2, 0x7F, 0x66, 0xA7, 0x9A, - 0xAF, 0xAE, 0x4D, 0xC1, 0xA9, 0xB4, 0xFD, 0xD2, 0xFD, 0x52, 0x46, 0x64, 0xB1, 0x44, 0x47, 0x7E, 0x83, 0xB3, 0x34, 0xC2, 0x65, - 0xF0, 0x9B, 0xD7, 0xF2, 0x2A, 0x04, 0xC6, 0x40, 0x97, 0x77, 0x32, 0x8C, 0xF8, 0x73, 0x12, 0x54, 0x3B, 0xA8, 0x15, 0xBE, 0xD3, - 0xA3, 0x83, 0x52, 0xF1, 0xA4, 0x24, 0xE4, 0x17, 0x3A, 0x41, 0x8C, 0x3C, 0xEA, 0x0A, 0x0E, 0x7B, 0xD4, 0xDB, 0x99, 0x13, 0xF6, - 0xEE, 0x36, 0x4E, 0x17, 0x2B, 0x56, 0x7B, 0xD1, 0xA3, 0x72, 0xA5, 0x2C, 0x0E, 0x6A, 0xD1, 0x65, 0xF0, 0x85, 0x1C, 0xBB, 0x3F, - 0x60, 0x11, 0x28, 0xBA, 0x05, 0x22, 0x6C, 0x8B, 0x9A, 0x30, 0xB1, 0xE8, 0xD5, 0x9A, 0xB5, 0x5A, 0x9E, 0x07, 0x2B, 0x7E, 0x50, - 0x2D, 0xEE, 0xE0, 0xA1, 0x10, 0x27, 0xB0, 0xA7, 0xAF, 0xCD, 0x49, 0x97, 0x1C, 0xD5, 0x44, 0x45, 0x9E, 0xDB, 0x04, 0xAE, 0x5B, - 0x70, 0x8E, 0x77, 0x47, 0x2A, 0x14, 0x78, 0x19, 0x20, 0xC4, 0x56, 0x0E, 0x2E, 0xC9, 0x89, 0x5D, 0xD6, 0x78, 0x1C, 0x65, 0xDC, - 0x6E, 0x97, 0x35, 0xDF, 0x75, 0xCE, 0x31, 0x1B, 0xA2, 0x52, 0x2A, 0xFC, 0xC2, 0xB0, 0xDE, 0x19, 0x25, 0xF1, 0xD1, 0x90, 0xCB, - 0x03, 0x86, 0x8E, 0xBA, 0x92, 0x63, 0xC2, 0x1C, 0xAF, 0x98, 0xD4, 0xE7, 0xEC, 0x51, 0xDD, 0x44, 0x3F, 0x32, 0xA2, 0x02, 0xD1, - 0x23, 0x49, 0xF6, 0xCC, 0x05, 0xD5, 0x84, 0x6A, 0x28, 0xA5, 0x6A, 0xF9, 0xB0, 0x9A, 0x42, 0xD2, 0x83, 0x3E, 0x72, 0x12, 0xD1, - 0x43, 0x14, 0x0A, 0x8D, 0xE7, 0x6E, 0x4A, 0xFD, 0xF6, 0x8C, 0x0B, 0xC3, 0xBB, 0xDD, 0x81, 0x64, 0xA2, 0x42, 0xE7, 0xDA, 0x18, - 0x73, 0x53, 0x59, 0xA2, 0xEF, 0x11, 0x3E, 0x63, 0xD6, 0x5E, 0xCB, 0xD1, 0x3F, 0x39, 0x71, 0x0D, 0xC0, 0xEC, 0x1A, 0x1F, 0xDE, - 0xE6, 0xE2, 0x79, 0x1A, 0xC1, 0x26, 0x01, 0x2B, 0xB7, 0x88, 0xF2, 0xC3, 0x54, 0x62, 0x2D, 0xC2, 0x83, 0x60, 0x7D, 0x8E, 0xB7, - 0xC6, 0xAE, 0x37, 0x09, 0x60, 0xDF, 0x5B, 0x25, 0x37, 0xB7, 0x25, 0x5E, 0x5E, 0xB6, 0xA4, 0xCB, 0x27, 0x83, 0x00, 0x94, 0x13, - 0xF1, 0xC2, 0x17, 0x3D, 0xE5, 0xDC, 0x41, 0x31, 0x3E, 0x18, 0x6B, 0x91, 0x59, 0xA4, 0x84, 0xA5, 0xE4, 0xF8, 0x39, 0x99, 0xB6, - 0x1B, 0xF6, 0x92, 0x9A, 0xC4, 0x6D, 0x57, 0x17, 0xDB, 0x31, 0x36, 0xC0, 0x95, 0xD6, 0x5C, 0xC4, 0x97, 0x4E, 0x84, 0xCA, 0x96, - 0x8B, 0x38, 0xD3, 0x09, 0xF7, 0x87, 0x4B, 0x78, 0x42, 0x9F, 0x9E, 0x1D, 0xCB, 0x52, 0x48, 0x2B, 0x79, 0xCA, 0x00, 0x53, 0x5E, - 0xB3, 0xE5, 0x8A, 0x51, 0xE7, 0xC2, 0xCC, 0x8E, 0x37, 0x18, 0x21, 0x9D, 0x5E, 0x17, 0x5B, 0xC7, 0xF4, 0x62, 0xC2, 0x88, 0x0A, - 0x02, 0x08, 0x58, 0x8B, 0x7E, 0x60, 0xD4, 0x02, 0xAE, 0x93, 0x24, 0x1D, 0x7E, 0x83, 0xCE, 0xEF, 0x9D, 0xE3, 0x0F, 0x4E, 0xC4, - 0xA4, 0xB4, 0x24, 0x1D, 0x7A, 0x37, 0x4D, 0xE8, 0x2C, 0x49, 0x47, 0xC6, 0x00, 0x11, 0xA1, 0xB3, 0x13, 0xE3, 0x49, 0x06, 0x0C, - 0xA1, 0x0D, 0x05, 0xE8, 0xCA, 0xA3, 0x88, 0x1C, 0x80, 0x3F, 0x79, 0x70, 0x31, 0x1E, 0x59, 0x3B, 0xE9, 0xDC, 0xE7, 0xF1, 0x7A, - 0xCD, 0xF2, 0x82, 0x47, 0xCB, 0xC6, 0x93, 0x01, 0x3C, 0xBA, 0xE5, 0xEE, 0xD4, 0x49, 0x07, 0x4D, 0x6B, 0x3C, 0xD8, 0x40, 0x7D, - 0x4C, 0xE6, 0x93, 0x7B, 0x12, 0x97, 0xC6, 0x08, 0xED, 0x6C, 0xBA, 0x08, 0xA6, 0x80, 0x13, 0x63, 0x95, 0x08, 0xA8, 0x17, 0x55, - 0x83, 0x76, 0x64, 0x1D, 0x66, 0x9D, 0x31, 0x9F, 0xE4, 0x41, 0x35, 0x8E, 0x8C, 0x84, 0xE6, 0x23, 0x81, 0xD0, 0x83, 0x78, 0x11, - 0xC2, 0xEA, 0x82, 0x1B, 0x11, 0x79, 0x0E, 0x1F, 0x35, 0xDD, 0x7D, 0x72, 0x94, 0x11, 0x77, 0xA4, 0x76, 0x8A, 0xCA, 0xEF, 0x92, - 0x34, 0xB9, 0x8B, 0x57, 0x9E, 0x6A, 0x99, 0xC7, 0x2B, 0xB7, 0xDB, 0x44, 0x4A, 0x18, 0xE9, 0x86, 0x79, 0x64, 0x73, 0xBB, 0x49, - 0x2C, 0x62, 0x62, 0x9F, 0xE6, 0x29, 0x5F, 0xCF, 0x79, 0xB8, 0x07, 0xFC, 0x06, 0x9C, 0x51, 0xF0, 0x87, 0x91, 0xA0, 0x3E, 0xB1, - 0x80, 0xD3, 0x30, 0xF5, 0x2B, 0xE8, 0x91, 0x02, 0x68, 0xDE, 0x70, 0x25, 0x6E, 0xE7, 0x07, 0x42, 0x38, 0xCD, 0x41, 0x5E, 0x87, - 0x55, 0xF1, 0xBD, 0x2C, 0x66, 0xDE, 0x08, 0xF6, 0x02, 0xDF, 0x90, 0x4B, 0x6B, 0xD1, 0x37, 0xEE, 0x81, 0x81, 0x66, 0xF7, 0x64, - 0x72, 0xE0, 0x9F, 0x20, 0x9F, 0x6A, 0x56, 0x70, 0xE0, 0x7C, 0xC9, 0x03, 0x13, 0xE7, 0x89, 0x94, 0x60, 0x81, 0x74, 0xD4, 0x24, - 0xE5, 0xC9, 0xAE, 0xB5, 0xD5, 0x9D, 0x9C, 0x94, 0x2F, 0x86, 0xAF, 0x80, 0x77, 0x7B, 0x11, 0xB7, 0x6B, 0x08, 0xC5, 0x0B, 0xF4, - 0xB9, 0x00, 0x38, 0xA7, 0x14, 0x4C, 0x7E, 0x42, 0x8D, 0x78, 0xCE, 0x92, 0x95, 0x3F, 0xF8, 0x52, 0x3D, 0x29, 0x7A, 0x3A, 0x3C, - 0xC9, 0x75, 0x6C, 0xF1, 0xD4, 0x78, 0x73, 0xE6, 0x8C, 0x5E, 0x25, 0xD4, 0xBF, 0x7B, 0xB8, 0xBC, 0x0B, 0xE8, 0xAE, 0xB8, 0x3A, - 0x1B, 0x5E, 0x06, 0xD9, 0x34, 0x9D, 0x16, 0xB3, 0xA8, 0xB8, 0xEA, 0x9F, 0x4D, 0x8A, 0xF6, 0xD9, 0x68, 0x5C, 0x5C, 0x8D, 0xFA, - 0xF0, 0x75, 0xDE, 0x83, 0xAF, 0x33, 0xF8, 0x3A, 0x19, 0x8E, 0x8B, 0x93, 0xD1, 0xCB, 0xED, 0x70, 0x00, 0xA5, 0xDA, 0xED, 0xCB, - 0xC4, 0x15, 0x6F, 0xCA, 0xBE, 0x47, 0x9E, 0x71, 0x55, 0x97, 0xCE, 0xB4, 0xE2, 0xA8, 0x4B, 0x4F, 0x8E, 0x94, 0x57, 0xF9, 0xA5, - 0xF2, 0xD6, 0xE7, 0x4F, 0x66, 0x09, 0x8F, 0x89, 0xB9, 0x7A, 0x23, 0xB4, 0x98, 0xC6, 0xF8, 0xF4, 0x4D, 0x3A, 0xDD, 0xBC, 0x7A, - 0xD5, 0xC7, 0xD0, 0xE6, 0xFE, 0xE0, 0x78, 0x13, 0x5C, 0x5D, 0x0D, 0xA1, 0x85, 0x9E, 0xFD, 0x6A, 0xA8, 0x2A, 0x9A, 0x6C, 0xA1, - 0xF0, 0x90, 0x0A, 0xF7, 0x46, 0x54, 0xBA, 0x0F, 0xA5, 0xFB, 0xF6, 0x4B, 0xA2, 0x76, 0xE9, 0xB3, 0x59, 0xA8, 0x12, 0xCE, 0xA0, - 0x07, 0x3C, 0x78, 0xEB, 0xEE, 0xE2, 0x57, 0x17, 0xBD, 0x97, 0x80, 0x7C, 0xDF, 0xCF, 0x80, 0xBF, 0x66, 0x00, 0x7B, 0x20, 0xCE, - 0xD0, 0x9E, 0x34, 0xFE, 0xA3, 0x1F, 0x0D, 0x8C, 0x53, 0x99, 0x62, 0xE7, 0xD0, 0x8A, 0xEE, 0x52, 0xF5, 0x76, 0xD6, 0x0B, 0xD1, - 0x14, 0x69, 0xE4, 0x9E, 0x81, 0xF2, 0x16, 0x66, 0x13, 0x3F, 0x3E, 0x3E, 0xCE, 0x0E, 0xED, 0x4B, 0x1C, 0x67, 0x76, 0xC3, 0x38, - 0xC0, 0xCA, 0x42, 0xCA, 0x46, 0xB3, 0xF4, 0xF3, 0xEA, 0xEE, 0x2E, 0xE5, 0xB6, 0xB0, 0x37, 0x22, 0x40, 0x8E, 0xB4, 0x22, 0x7C, - 0xFE, 0x74, 0x78, 0x52, 0xE1, 0xEC, 0xC6, 0x49, 0x14, 0x3B, 0x02, 0x32, 0x85, 0x11, 0x91, 0xF8, 0x7D, 0x26, 0x06, 0x59, 0xBC, - 0xEA, 0x05, 0x7C, 0x16, 0xCC, 0x78, 0x3D, 0xFE, 0x3C, 0xCA, 0xF0, 0xBE, 0x9C, 0x3B, 0x42, 0x8F, 0x7E, 0xDA, 0x5D, 0x52, 0x47, - 0xA1, 0xA8, 0x23, 0x89, 0xE6, 0x00, 0x4B, 0x85, 0x0E, 0xC4, 0x6B, 0x49, 0x09, 0x4C, 0xFB, 0xD6, 0x1F, 0x5E, 0x1C, 0xCF, 0x03, - 0xA0, 0x86, 0x90, 0x17, 0xAD, 0x10, 0x81, 0x28, 0x8A, 0x64, 0x92, 0x20, 0x51, 0x6D, 0xFD, 0xB3, 0x2E, 0x95, 0xEF, 0x8B, 0xF2, - 0x03, 0xFB, 0x61, 0x59, 0x59, 0x7E, 0x40, 0xC5, 0xCF, 0xB6, 0x58, 0xA4, 0xBB, 0x43, 0x63, 0x27, 0x0E, 0xB0, 0x78, 0x72, 0x00, - 0xD2, 0xF2, 0x72, 0x92, 0xD2, 0x69, 0x35, 0x88, 0x33, 0x8E, 0xB8, 0x1F, 0xA7, 0x7F, 0xF8, 0x93, 0x31, 0xAA, 0x3A, 0xF1, 0xC9, - 0x5F, 0xDD, 0x93, 0x97, 0xED, 0xD3, 0xD9, 0xE3, 0x70, 0x17, 0x7C, 0x59, 0x4B, 0xEC, 0xEF, 0xA2, 0x68, 0x6B, 0x27, 0x0D, 0x76, - 0x51, 0x30, 0xF9, 0xC7, 0xA9, 0x10, 0x94, 0x9E, 0x34, 0xF9, 0xEB, 0x27, 0x9C, 0x80, 0x7D, 0x72, 0x21, 0x6C, 0x95, 0x80, 0xD0, - 0x95, 0xE2, 0xCE, 0xF9, 0xB8, 0x33, 0xD8, 0x5D, 0x12, 0xDA, 0x0F, 0xEA, 0x35, 0x48, 0x3B, 0x7E, 0xA5, 0x11, 0x8A, 0x5A, 0xE2, - 0x48, 0x34, 0x56, 0xD2, 0xE3, 0x32, 0x1D, 0x97, 0xE1, 0xBC, 0xFC, 0x73, 0x9C, 0x73, 0x1D, 0x66, 0x27, 0x9F, 0x88, 0xB4, 0x7A, - 0x5C, 0x2E, 0xEB, 0x4A, 0xB4, 0x56, 0x8F, 0x82, 0x3A, 0xF0, 0x4A, 0x26, 0x55, 0xA5, 0xCA, 0x6A, 0x29, 0x0E, 0x08, 0x2F, 0xA8, - 0x99, 0x6E, 0xBD, 0x90, 0x70, 0xE3, 0x30, 0xA3, 0xE9, 0xA2, 0xE3, 0x67, 0x8A, 0x6D, 0x4E, 0x72, 0x29, 0x48, 0x27, 0x5C, 0x55, - 0x49, 0xEC, 0x57, 0x91, 0xCD, 0x41, 0xB0, 0xBB, 0xC4, 0xE5, 0x99, 0x50, 0xEF, 0x90, 0x2C, 0x79, 0xA6, 0xF4, 0x3C, 0x45, 0x18, - 0x7A, 0x00, 0x83, 0xE3, 0xD5, 0x32, 0x8E, 0x46, 0xFD, 0x36, 0x58, 0x42, 0x4F, 0x33, 0x63, 0xDD, 0x8A, 0x43, 0x4D, 0x50, 0x72, - 0xB0, 0xE5, 0x13, 0x61, 0x54, 0xB2, 0x03, 0x98, 0x47, 0x09, 0xD3, 0x04, 0xFA, 0x70, 0xAA, 0xD1, 0x86, 0x00, 0x75, 0x5D, 0xDA, - 0x3B, 0x92, 0xFB, 0x27, 0x3D, 0x60, 0x3E, 0xE8, 0x73, 0x1F, 0x28, 0x63, 0x9F, 0xD6, 0x2F, 0xA0, 0x99, 0x25, 0xFC, 0xE9, 0x49, - 0x77, 0x86, 0xA7, 0x13, 0x98, 0xF1, 0x5B, 0x92, 0x96, 0x17, 0x22, 0x72, 0x4E, 0x87, 0x3B, 0xB0, 0xA3, 0x7D, 0xBF, 0xD7, 0xBF, - 0xC0, 0x53, 0x80, 0xE9, 0x60, 0x66, 0x3D, 0x4D, 0x18, 0x52, 0x00, 0xAC, 0x72, 0xDA, 0xC5, 0x60, 0x2F, 0xC9, 0x34, 0x9D, 0x41, - 0x91, 0xEE, 0x0C, 0xBF, 0xDA, 0x3D, 0xFC, 0xEE, 0xF1, 0xEF, 0x3E, 0x7E, 0xF7, 0xF9, 0xF7, 0x60, 0x46, 0xCD, 0x68, 0x93, 0x5A, - 0xE6, 0x6E, 0x66, 0x60, 0x34, 0xD3, 0x37, 0x9A, 0xE9, 0x19, 0xCD, 0x74, 0x67, 0xF6, 0x2D, 0x1B, 0xFD, 0x92, 0x4E, 0x4E, 0x6D, - 0x21, 0xBB, 0xC7, 0x1A, 0xF8, 0x05, 0x2D, 0x85, 0xD8, 0x12, 0x7D, 0xF7, 0xF1, 0x7B, 0xC0, 0xBF, 0xA1, 0xA3, 0xD2, 0x6A, 0x29, - 0xAE, 0xB4, 0x34, 0x50, 0x2D, 0xF5, 0x8D, 0x96, 0x7A, 0x46, 0x4B, 0x5D, 0xBB, 0x25, 0x06, 0x42, 0x30, 0x88, 0x66, 0xE2, 0x19, - 0xF9, 0x28, 0x99, 0xA4, 0xE3, 0x2C, 0x34, 0x13, 0xBF, 0xC6, 0xC4, 0x6C, 0x9C, 0x86, 0xCC, 0x7C, 0x6F, 0x1E, 0xD2, 0x8A, 0x71, - 0x6C, 0xA6, 0x51, 0xB9, 0x78, 0x8C, 0x42, 0x95, 0x19, 0x0B, 0x49, 0x41, 0x5A, 0x6A, 0x8F, 0x4C, 0x61, 0x2A, 0xBF, 0xEA, 0x4E, - 0x7A, 0x63, 0x32, 0xEB, 0xA6, 0x64, 0x72, 0x3B, 0x01, 0x19, 0x9A, 0xAF, 0x40, 0xE6, 0xF7, 0x4E, 0xCB, 0x57, 0xDD, 0x49, 0x77, - 0xDC, 0xEF, 0x0D, 0xCF, 0x87, 0x17, 0x83, 0xB3, 0xE1, 0x85, 0xF6, 0x9C, 0xC4, 0xE5, 0x9A, 0x14, 0x3F, 0xC7, 0x3F, 0xA3, 0xDD, - 0x98, 0x81, 0x5E, 0x32, 0x1C, 0xF4, 0x2F, 0x5E, 0x0E, 0x86, 0x43, 0xBB, 0x48, 0xF9, 0x6A, 0x30, 0xEC, 0xF6, 0x2F, 0xFA, 0x83, - 0xE1, 0xD9, 0xD9, 0xE0, 0x62, 0xD4, 0xBF, 0xB8, 0x38, 0x63, 0xA0, 0xB2, 0x30, 0xDF, 0x4F, 0xAF, 0xAE, 0x06, 0xBD, 0x6D, 0xBF, - 0x37, 0x78, 0xD9, 0x7D, 0x39, 0xEA, 0x0E, 0xBB, 0xFC, 0xD9, 0x21, 0xBB, 0xF2, 0x55, 0xAF, 0x77, 0x3E, 0x1A, 0xBE, 0x1C, 0x0E, - 0x46, 0xDD, 0x8B, 0x7E, 0xBF, 0x7F, 0x71, 0x3E, 0x62, 0x27, 0xA3, 0xA1, 0xAE, 0x4D, 0xB2, 0x54, 0x9E, 0x01, 0x41, 0xFB, 0xE5, - 0x69, 0x6F, 0xD8, 0xED, 0xF5, 0x5F, 0x5E, 0x0C, 0xCF, 0x00, 0x92, 0xE1, 0x45, 0xEF, 0x9C, 0x9D, 0x9C, 0x75, 0x83, 0x4A, 0xAB, - 0xC2, 0xDF, 0x93, 0xEA, 0x2D, 0x57, 0x19, 0x2C, 0x3C, 0xFA, 0x5C, 0x65, 0x68, 0x72, 0x3C, 0xA5, 0xEF, 0x1F, 0x7F, 0xEE, 0xA3, - 0x6F, 0xBA, 0xE8, 0x21, 0x6B, 0xF7, 0xFA, 0xE7, 0xB0, 0x3B, 0x0D, 0xB6, 0x17, 0x03, 0x80, 0xBD, 0x7B, 0x7E, 0x6C, 0xF6, 0xF9, - 0x25, 0xFD, 0x58, 0x67, 0xF7, 0x7E, 0x3F, 0x3C, 0xC9, 0x82, 0x2F, 0x79, 0x99, 0x0B, 0xA3, 0x57, 0xE3, 0x7C, 0x20, 0x97, 0x2B, - 0x54, 0xA8, 0xAA, 0xF4, 0xC6, 0x28, 0xBE, 0x75, 0xF8, 0xA5, 0x9F, 0xBC, 0x7A, 0x35, 0xE8, 0x05, 0xED, 0x1E, 0x88, 0x5E, 0xF0, - 0xF9, 0xAA, 0x3F, 0x38, 0xEE, 0x8F, 0x46, 0xB0, 0x5F, 0xC9, 0x3E, 0x15, 0xA3, 0x82, 0x64, 0x98, 0x9B, 0x6C, 0x52, 0x4C, 0x00, - 0xF3, 0xE3, 0xF4, 0x4B, 0x98, 0xA2, 0x6E, 0x30, 0xEE, 0x52, 0x9A, 0x6B, 0xFC, 0x5F, 0xA6, 0x5F, 0x16, 0x50, 0xCC, 0x00, 0x33, - 0x3B, 0xE9, 0x8D, 0xBA, 0xB0, 0x43, 0x15, 0x6D, 0x09, 0x6C, 0x95, 0xFA, 0x64, 0xC8, 0x52, 0x6E, 0x25, 0xAD, 0x92, 0xA1, 0x99, - 0x9B, 0x05, 0x15, 0x7A, 0xCC, 0x8D, 0xCC, 0x22, 0xA8, 0x10, 0xA6, 0x99, 0x19, 0x07, 0x40, 0xA1, 0x61, 0x23, 0x27, 0x3A, 0x1B, - 0x3E, 0xC5, 0x89, 0x44, 0x89, 0xE7, 0x70, 0xA2, 0xF3, 0xCF, 0xC5, 0x89, 0xE8, 0x7B, 0x88, 0xDF, 0x43, 0xFE, 0x3D, 0xC2, 0xEF, - 0x11, 0xFF, 0x3E, 0xC3, 0xEF, 0x33, 0xFE, 0x7D, 0x3E, 0xA3, 0x6E, 0x9F, 0xE4, 0x5C, 0xE7, 0x46, 0xB7, 0x67, 0x46, 0xB7, 0x23, - 0xA3, 0xDB, 0xA1, 0xD1, 0xED, 0xC0, 0xE8, 0xB6, 0x6F, 0x74, 0xDB, 0x33, 0xBA, 0xFD, 0x5C, 0x9C, 0x0E, 0x7B, 0xA6, 0xEF, 0x21, - 0x7E, 0x8F, 0xF8, 0xF7, 0x08, 0xBF, 0xCF, 0xF8, 0xF7, 0x19, 0x7E, 0x9F, 0xF3, 0xEF, 0xF3, 0xA7, 0x38, 0xE3, 0xB9, 0xEA, 0xF9, - 0xCC, 0xE8, 0x79, 0x64, 0xF4, 0x3C, 0x34, 0x7A, 0x1E, 0x18, 0x3D, 0xF7, 0x8D, 0x9E, 0x7B, 0x46, 0xCF, 0x5D, 0xBB, 0x67, 0x41, - 0xAD, 0xDF, 0x92, 0xE7, 0x76, 0x95, 0x95, 0xF2, 0xD4, 0x0A, 0x2F, 0x35, 0x8A, 0x6A, 0x66, 0x6A, 0x94, 0x3C, 0x84, 0x9B, 0x86, - 0x29, 0x1E, 0x78, 0xF0, 0x93, 0xF1, 0x44, 0x73, 0xD4, 0x82, 0xCE, 0x27, 0x4F, 0x12, 0xCE, 0x51, 0x93, 0x00, 0x45, 0x77, 0x28, - 0xD9, 0x2E, 0xF1, 0xFE, 0x4C, 0xEF, 0x34, 0xA9, 0x32, 0x57, 0xCC, 0xCB, 0xAB, 0xEC, 0x35, 0x09, 0xEC, 0x7A, 0x50, 0xFE, 0xEC, - 0xE5, 0xE8, 0xE5, 0xE0, 0xAC, 0x5B, 0x2B, 0xFF, 0xAA, 0x77, 0xFE, 0xF2, 0xFC, 0xEC, 0xE5, 0xA0, 0x37, 0x18, 0x5E, 0x9C, 0xF5, - 0x07, 0xBD, 0xD1, 0x39, 0xEB, 0xBF, 0xEC, 0xDB, 0xD5, 0xFD, 0x42, 0xF0, 0x5D, 0xE4, 0x13, 0xA3, 0xEE, 0xB9, 0x78, 0x08, 0xD1, - 0x68, 0x8A, 0x3B, 0xF2, 0xD2, 0x99, 0xE7, 0x15, 0x30, 0x5D, 0x28, 0x03, 0x8C, 0xFB, 0x02, 0x8B, 0x76, 0x7B, 0x43, 0x76, 0x02, - 0xCC, 0x05, 0x19, 0x70, 0x1C, 0x25, 0xA7, 0x23, 0xFE, 0x4B, 0x35, 0x60, 0x76, 0x10, 0x9F, 0x0E, 0xFB, 0x2F, 0x87, 0x2F, 0xCF, - 0xCE, 0xFB, 0x2F, 0xCF, 0xDC, 0x5D, 0xCC, 0x9D, 0x6C, 0x38, 0x31, 0xD9, 0x70, 0xAF, 0xDB, 0x1F, 0x0A, 0x95, 0x0B, 0x54, 0xC8, - 0x2E, 0xAA, 0xBE, 0xCC, 0x1F, 0x8E, 0xBA, 0x83, 0xD1, 0xCB, 0x97, 0x67, 0xFD, 0xF3, 0xC1, 0x79, 0x17, 0x7A, 0xF8, 0x12, 0x61, - 0xB1, 0x38, 0xF1, 0x3C, 0x70, 0xC3, 0x34, 0x6F, 0x63, 0x1B, 0xC0, 0xCD, 0xBB, 0xDB, 0x5E, 0x77, 0x78, 0x31, 0x3A, 0x3F, 0xFB, - 0x32, 0x3E, 0xE6, 0x5F, 0x23, 0x13, 0xC6, 0x5D, 0x9D, 0x6B, 0xF3, 0x65, 0xCB, 0x77, 0x0F, 0x94, 0x1F, 0x53, 0x6C, 0xB8, 0x10, - 0x9F, 0x14, 0x64, 0x0D, 0xD8, 0x78, 0x21, 0xD9, 0xF8, 0x3C, 0xC2, 0x9B, 0x3D, 0xFD, 0xEE, 0x71, 0xBF, 0x3B, 0x3C, 0x0F, 0x37, - 0x91, 0x46, 0x05, 0x70, 0x6C, 0xDE, 0xDF, 0x71, 0x11, 0xB4, 0x33, 0xC5, 0xD6, 0xA1, 0x18, 0x8E, 0x73, 0xB2, 0x21, 0xBE, 0x1E, - 0x1B, 0x7C, 0x7D, 0x3E, 0xE1, 0x58, 0xFE, 0x32, 0xFE, 0x72, 0x03, 0x19, 0xC6, 0x30, 0xE7, 0x27, 0xBD, 0x2E, 0xC0, 0xFD, 0xA5, - 0xBF, 0x69, 0x57, 0x51, 0x12, 0xD4, 0xD6, 0x81, 0xC5, 0xD4, 0xC3, 0x6E, 0x38, 0x0C, 0x6A, 0x8B, 0xC2, 0xE2, 0xEC, 0xE1, 0x30, - 0xEC, 0x06, 0xD5, 0x15, 0x62, 0xB1, 0x77, 0xD9, 0x88, 0xB5, 0x5C, 0x2C, 0x1E, 0x4F, 0x6D, 0x20, 0x9F, 0x37, 0xAE, 0x84, 0x28, - 0x31, 0x15, 0xDF, 0x98, 0x8E, 0x60, 0x3B, 0x3B, 0x86, 0xDF, 0xA0, 0xA9, 0xE1, 0x92, 0x06, 0x94, 0x5D, 0xD0, 0xC6, 0x87, 0x09, - 0x7D, 0x9E, 0xD0, 0x3B, 0x53, 0x29, 0x03, 0x9E, 0xD2, 0x1F, 0xDA, 0xFC, 0x54, 0xB7, 0xC6, 0x73, 0xCD, 0xE6, 0x8C, 0xDA, 0xFD, - 0x6A, 0x07, 0x03, 0xD1, 0x7D, 0xE5, 0xDA, 0xB5, 0x52, 0x8F, 0x30, 0xA2, 0xE2, 0x16, 0x4D, 0x1D, 0xBD, 0xD9, 0xD5, 0xD5, 0x05, - 0x7D, 0xF5, 0xE1, 0xAB, 0x77, 0x46, 0x9F, 0x03, 0xF8, 0x14, 0xA4, 0x5F, 0xB9, 0xEF, 0x62, 0x35, 0x80, 0x85, 0x54, 0x23, 0xA2, - 0x6A, 0x5F, 0xB5, 0x37, 0x98, 0xF1, 0x06, 0x0C, 0xDD, 0x0D, 0xE8, 0xFF, 0xEF, 0x58, 0xAB, 0x8C, 0x23, 0x1D, 0x8C, 0xA7, 0xA1, - 0x9E, 0xAC, 0x32, 0x9F, 0xA9, 0xCA, 0x6D, 0xBD, 0x1F, 0xF8, 0xCB, 0x15, 0x6C, 0x91, 0x93, 0xB2, 0x1D, 0xF5, 0xC6, 0x39, 0xAC, - 0x8D, 0x21, 0x7D, 0xF7, 0xC7, 0xA3, 0x11, 0xD0, 0x2B, 0x68, 0xFC, 0x67, 0xC3, 0x51, 0xAF, 0x7F, 0x8C, 0xAE, 0x40, 0xA3, 0xB3, - 0x41, 0xBF, 0xAB, 0x52, 0xEC, 0x56, 0xDA, 0xBD, 0x20, 0x98, 0xF8, 0xD0, 0x41, 0x08, 0x95, 0x87, 0xC1, 0x18, 0xFE, 0x1D, 0x28, - 0xF5, 0x0A, 0x75, 0x2B, 0xA4, 0x93, 0x9A, 0x2A, 0x8A, 0xC7, 0x7D, 0x27, 0x20, 0xE6, 0x05, 0xD2, 0x73, 0xE8, 0xD2, 0x0A, 0x67, - 0x48, 0xA4, 0xC8, 0xFD, 0xAB, 0x85, 0x09, 0x0A, 0xF8, 0x29, 0x37, 0x3F, 0x71, 0xA0, 0xB3, 0x69, 0x41, 0xF6, 0x83, 0x31, 0xF0, - 0x3E, 0xB4, 0xFE, 0x20, 0xC7, 0x1A, 0xCA, 0x54, 0x7F, 0xD0, 0x13, 0xBA, 0xFF, 0xD9, 0xE0, 0x98, 0xD7, 0x82, 0x72, 0xFD, 0xC1, - 0x4B, 0x2C, 0x37, 0x38, 0x1B, 0x4D, 0xA0, 0x31, 0xDF, 0x3F, 0xA7, 0x32, 0xBD, 0x8B, 0xAD, 0xAF, 0x4A, 0xE1, 0xEF, 0xBE, 0xFD, - 0xDB, 0x68, 0x23, 0x38, 0x39, 0x1B, 0x8D, 0x06, 0x67, 0xA1, 0xE8, 0x85, 0xD0, 0xD4, 0x46, 0x11, 0x0E, 0xCD, 0xE1, 0x32, 0x11, - 0x31, 0xD5, 0xF6, 0x91, 0xDD, 0x40, 0xF3, 0xC1, 0x58, 0x42, 0x24, 0x8C, 0x17, 0x7B, 0x5A, 0x0F, 0x0B, 0x65, 0xC8, 0x4A, 0x41, - 0x1F, 0x4F, 0x9F, 0x63, 0xC8, 0xCA, 0x02, 0x32, 0x0D, 0xEA, 0x88, 0x6C, 0x13, 0xDC, 0x82, 0xD2, 0x43, 0x6B, 0x2B, 0xF3, 0x12, - 0xDE, 0x51, 0x0E, 0xD3, 0xE7, 0x98, 0xA6, 0xAC, 0xBA, 0x3B, 0x32, 0xEA, 0x27, 0xFB, 0x63, 0x55, 0xE2, 0xCD, 0x58, 0x61, 0xC7, - 0x34, 0xC8, 0xB3, 0xA0, 0x09, 0x36, 0x09, 0xAB, 0x90, 0xE4, 0x29, 0x2C, 0x45, 0xE3, 0x84, 0x93, 0xA8, 0x2F, 0x13, 0x5E, 0xBD, - 0x3A, 0xDB, 0xF6, 0x5E, 0xF6, 0x43, 0xF1, 0x1B, 0x10, 0x99, 0x6C, 0xA1, 0x42, 0x50, 0xA1, 0xDF, 0xA4, 0x46, 0xBF, 0x80, 0x5B, - 0xBB, 0x27, 0x24, 0xE1, 0x00, 0x89, 0x82, 0xE6, 0xB7, 0xED, 0xCB, 0xE9, 0x83, 0xF9, 0xEA, 0x06, 0x62, 0x32, 0x41, 0x20, 0x06, - 0x28, 0x43, 0xDD, 0x39, 0x10, 0x4E, 0x7F, 0xD8, 0x35, 0x13, 0xFA, 0xC7, 0x67, 0x03, 0x84, 0xC0, 0x48, 0x3B, 0xAB, 0x24, 0x69, - 0x20, 0x7D, 0xB3, 0xE2, 0xB6, 0x2F, 0xD8, 0xD7, 0x13, 0xB5, 0xB4, 0x6D, 0x2A, 0xFB, 0xB4, 0xA7, 0xD8, 0xB5, 0x16, 0x92, 0x6F, - 0xB7, 0x17, 0x88, 0xBD, 0x94, 0x14, 0x8F, 0x9E, 0xB6, 0xFD, 0x2A, 0x95, 0x43, 0x3B, 0x75, 0xF0, 0xE5, 0x7A, 0xD5, 0xDB, 0x6E, - 0xF3, 0x57, 0xA9, 0xB4, 0x81, 0x63, 0xE8, 0xA0, 0xCB, 0xA2, 0x9D, 0xBF, 0x4A, 0xE8, 0xC9, 0x72, 0x86, 0x87, 0xE9, 0x44, 0x83, - 0xE2, 0x3A, 0x10, 0x77, 0x0E, 0x40, 0x9F, 0xB7, 0xA2, 0x1D, 0xE5, 0x0A, 0xF4, 0xF3, 0x63, 0x14, 0x8E, 0x8A, 0xA8, 0xD7, 0xF6, - 0xCF, 0xB7, 0x64, 0x80, 0x7D, 0x86, 0x7B, 0x5E, 0xAA, 0xDC, 0xF3, 0x7A, 0x81, 0x2D, 0xD3, 0x97, 0xC2, 0x36, 0xB6, 0xCA, 0x88, - 0xDB, 0x8B, 0xB3, 0xEB, 0x5B, 0xE0, 0x97, 0xC4, 0x68, 0xF9, 0xFE, 0x9D, 0x76, 0xFE, 0x62, 0x39, 0xB7, 0xA9, 0xA7, 0x40, 0xB1, - 0x00, 0x6B, 0xA6, 0x3C, 0xD4, 0x1D, 0x87, 0x14, 0x5D, 0x0C, 0xF0, 0xF7, 0xD7, 0x5F, 0xDF, 0x71, 0xB3, 0x39, 0x7E, 0x7E, 0x5B, - 0xB1, 0xBB, 0xDA, 0xE7, 0x19, 0x50, 0xBA, 0xCA, 0x99, 0x55, 0x81, 0x1E, 0x77, 0x90, 0x28, 0x04, 0x0C, 0x18, 0x1E, 0x2B, 0xF2, - 0x7E, 0xEF, 0xDA, 0xFF, 0x79, 0xE2, 0x9D, 0x8A, 0x2A, 0x44, 0xFC, 0x0C, 0x9B, 0x1B, 0xD1, 0xE4, 0x2D, 0x97, 0x4B, 0x71, 0x3E, - 0x71, 0x05, 0xFC, 0x91, 0xFC, 0x3B, 0x4F, 0x98, 0x7C, 0x6C, 0x8A, 0x23, 0x00, 0x58, 0x1C, 0x3B, 0xC9, 0x03, 0x43, 0x1A, 0xC3, - 0x64, 0xC5, 0x99, 0x49, 0x42, 0xFD, 0xEF, 0x84, 0xEB, 0xAB, 0xD1, 0x7F, 0xE7, 0xF4, 0xD1, 0x86, 0xE9, 0x54, 0xE5, 0x47, 0x74, - 0xAA, 0x82, 0x89, 0x89, 0x9D, 0x08, 0x7B, 0x0B, 0xF1, 0x09, 0x42, 0x23, 0xE9, 0xBA, 0x21, 0x87, 0xBB, 0x0A, 0xB1, 0xBC, 0x99, - 0xA8, 0x4E, 0x6B, 0x14, 0xF8, 0xE6, 0x38, 0x7D, 0x26, 0x2E, 0xBA, 0x28, 0x27, 0x20, 0xC6, 0xBD, 0x16, 0x8E, 0x12, 0x7E, 0x77, - 0xC2, 0x55, 0x47, 0xDD, 0x1A, 0x66, 0x78, 0x67, 0x18, 0x84, 0xCB, 0x28, 0xD1, 0x77, 0x93, 0x55, 0x33, 0xEA, 0x16, 0x1E, 0xDE, - 0xA6, 0x40, 0xBF, 0x0C, 0xBC, 0x42, 0x31, 0xE1, 0x80, 0x33, 0x75, 0x21, 0x91, 0xE9, 0xEB, 0x88, 0xE3, 0x0C, 0xC7, 0x62, 0xDE, - 0x76, 0x74, 0xCF, 0xC5, 0x91, 0x0C, 0x68, 0x79, 0x8B, 0x18, 0x1C, 0xF4, 0xA4, 0x9A, 0xDA, 0x6B, 0xFF, 0xB7, 0x20, 0x43, 0x89, - 0x58, 0x5D, 0x4A, 0xE3, 0x1E, 0xD8, 0x7B, 0x1E, 0x81, 0xAC, 0x42, 0x5D, 0x86, 0x27, 0x7E, 0xD9, 0x36, 0xE4, 0x44, 0xDB, 0xCE, - 0x07, 0x2D, 0x99, 0x99, 0xA2, 0xB5, 0x2A, 0x90, 0x38, 0x72, 0xF7, 0xB3, 0x37, 0x98, 0x33, 0xE1, 0x47, 0xCE, 0x74, 0xDD, 0xA4, - 0xBB, 0x15, 0xAD, 0x86, 0xE2, 0xEB, 0x36, 0x09, 0x55, 0x78, 0x4F, 0x60, 0xF8, 0x8F, 0x80, 0x94, 0xB1, 0x2E, 0x84, 0x88, 0x19, - 0xEB, 0x92, 0xF2, 0xBA, 0xC9, 0x58, 0x57, 0xD9, 0xED, 0xC4, 0x82, 0x17, 0x5B, 0x85, 0x11, 0xB6, 0x58, 0x71, 0x58, 0x41, 0xD6, - 0x44, 0xF4, 0xAE, 0x90, 0x8B, 0x68, 0x96, 0x47, 0xC5, 0x8C, 0xE6, 0xC5, 0x8F, 0x39, 0xE7, 0x60, 0xB0, 0x3E, 0xB7, 0xEA, 0xBB, - 0x17, 0xA0, 0xEC, 0xA4, 0x7E, 0xF6, 0x03, 0x92, 0xAA, 0xD4, 0xEF, 0x41, 0xA0, 0xA4, 0xB2, 0x50, 0x37, 0x30, 0x34, 0x1A, 0x18, - 0xD9, 0x0D, 0x9C, 0x55, 0x1A, 0x38, 0xD7, 0x0D, 0x04, 0x55, 0xEC, 0xDA, 0x70, 0x2B, 0xB0, 0x1D, 0x7B, 0xA3, 0x8F, 0x82, 0xA5, - 0xC4, 0x9D, 0x26, 0x04, 0x21, 0x7B, 0xAA, 0xDF, 0x52, 0x3A, 0x55, 0x09, 0xC0, 0xFD, 0x55, 0x4D, 0x40, 0xB3, 0xA6, 0x19, 0xA3, - 0x26, 0xFD, 0x36, 0x6B, 0x52, 0x02, 0xC0, 0x6C, 0x83, 0xAB, 0xF8, 0x55, 0xC5, 0x84, 0x22, 0xC2, 0x82, 0xDE, 0x92, 0xC5, 0xC9, - 0xF2, 0x59, 0xBB, 0x45, 0x61, 0x48, 0x7C, 0x01, 0x52, 0xB6, 0x1A, 0x2C, 0xA0, 0xEB, 0x3F, 0x58, 0xA0, 0xD9, 0x29, 0x30, 0x57, - 0x5F, 0x7C, 0x40, 0x41, 0x33, 0xAB, 0x0A, 0x43, 0x9D, 0x51, 0x72, 0x18, 0x4E, 0xFC, 0x9E, 0xC4, 0x4F, 0xD5, 0x71, 0x4E, 0x02, - 0xC1, 0x31, 0xB4, 0x55, 0x00, 0x55, 0x81, 0x40, 0x70, 0x0D, 0x84, 0x34, 0x43, 0x51, 0xE7, 0xC5, 0x06, 0x1E, 0x70, 0x7E, 0x22, - 0xA3, 0xC3, 0xFE, 0x85, 0xEE, 0x51, 0xD0, 0x51, 0x1E, 0x99, 0x68, 0x96, 0xD0, 0x22, 0x17, 0xCE, 0x27, 0x64, 0x28, 0x9D, 0x30, - 0x20, 0xA1, 0xC1, 0xC5, 0x10, 0xFF, 0x82, 0xA0, 0xD2, 0x1B, 0xF7, 0xC7, 0x0C, 0x64, 0x94, 0x97, 0xE7, 0xBD, 0x51, 0x7F, 0x32, - 0x18, 0x0F, 0xC7, 0xA5, 0xC8, 0x2F, 0x29, 0x7F, 0x34, 0x3E, 0x83, 0x14, 0x99, 0x7F, 0x3E, 0xBE, 0x00, 0xA1, 0x1B, 0xD3, 0x5F, - 0x8E, 0x7B, 0xDD, 0x4F, 0x89, 0x4B, 0x0D, 0xE2, 0xC0, 0xA7, 0x85, 0xA5, 0x56, 0x21, 0xA8, 0x7B, 0x56, 0xD4, 0x2B, 0xCB, 0xE3, - 0x3C, 0xA8, 0x68, 0x47, 0x08, 0x91, 0x44, 0xE9, 0xD5, 0xB0, 0x3B, 0x49, 0x3B, 0xE8, 0x32, 0xCA, 0xA5, 0x3D, 0x91, 0x3F, 0x2E, - 0x29, 0x8D, 0x7C, 0x0D, 0x26, 0xC6, 0x37, 0x79, 0xC7, 0x40, 0xE6, 0xBD, 0xFA, 0xB1, 0xCB, 0x9C, 0xBE, 0x3F, 0xE8, 0x85, 0x0C, - 0xFD, 0x67, 0x73, 0xD8, 0x24, 0xDF, 0x71, 0xAF, 0x84, 0x77, 0xF4, 0xFB, 0xB7, 0x14, 0xEF, 0xD4, 0xC0, 0xF6, 0x4A, 0x4D, 0x7C, - 0x8D, 0xB7, 0xB0, 0x78, 0x36, 0x14, 0xE4, 0x1F, 0x28, 0xEC, 0xF2, 0x2F, 0x3D, 0x6C, 0xD3, 0xCD, 0x49, 0x5B, 0x08, 0x8F, 0x8F, - 0xBD, 0x82, 0xA1, 0x03, 0x41, 0x54, 0xAF, 0x81, 0x2E, 0xC0, 0xE4, 0x9F, 0x34, 0xA9, 0x4E, 0x06, 0x39, 0xC5, 0x73, 0xD8, 0xC7, - 0x0E, 0x55, 0x06, 0x98, 0x5D, 0xB6, 0x7E, 0x08, 0xF8, 0x1F, 0xF2, 0x5B, 0xC7, 0x5D, 0x45, 0x1C, 0xF1, 0xDB, 0x67, 0x57, 0x15, - 0xC5, 0x2C, 0x10, 0x22, 0x1E, 0xA3, 0x83, 0x9E, 0x9D, 0x1D, 0x52, 0x98, 0x5F, 0x6B, 0x33, 0x39, 0x66, 0x6A, 0x6E, 0x92, 0xB4, - 0xED, 0x6B, 0x54, 0x21, 0x23, 0x02, 0x98, 0x3C, 0x7E, 0xF3, 0x1D, 0x9D, 0x37, 0x6D, 0x17, 0x06, 0x6B, 0x0B, 0x42, 0xCA, 0x16, - 0xD1, 0x1D, 0xD1, 0x0F, 0x49, 0xEC, 0x66, 0xEF, 0x48, 0x61, 0xA8, 0xE3, 0x39, 0x2C, 0xE5, 0xF5, 0x03, 0x1B, 0x40, 0xEE, 0xB8, - 0xEE, 0x8C, 0x4B, 0x28, 0x70, 0x8B, 0x43, 0xF8, 0x91, 0xC7, 0xAD, 0x60, 0xC1, 0x41, 0xBD, 0x17, 0x76, 0x67, 0xA6, 0xDF, 0xCC, - 0x27, 0x2C, 0x92, 0x97, 0x9F, 0x79, 0x91, 0x54, 0xEE, 0x65, 0xB0, 0x66, 0x5A, 0xD6, 0xA4, 0x69, 0x02, 0xD0, 0x79, 0x47, 0xFA, - 0x92, 0x93, 0xF8, 0x30, 0x23, 0xD8, 0x8F, 0x60, 0x8B, 0x87, 0xC9, 0xE8, 0x9C, 0x16, 0x5A, 0xF1, 0x06, 0x18, 0x2E, 0xBD, 0x37, - 0xD8, 0xDA, 0xA4, 0x9E, 0xC4, 0x79, 0xDE, 0x3A, 0x2B, 0x42, 0xF9, 0xC1, 0xAD, 0x71, 0x77, 0x49, 0xAA, 0xB2, 0xDA, 0x4C, 0xF0, - 0x7B, 0x96, 0xE2, 0x13, 0xD5, 0xB2, 0x0D, 0xCB, 0x5D, 0xFC, 0xE4, 0xC2, 0x0B, 0x9F, 0xDB, 0xD4, 0x27, 0xCF, 0xE7, 0x1E, 0xB9, - 0x5F, 0xAC, 0x40, 0xED, 0xC2, 0x77, 0xA4, 0x85, 0xCD, 0x7A, 0xAC, 0xF9, 0xF5, 0xFC, 0x87, 0xBB, 0xF5, 0xCA, 0x08, 0x33, 0xAF, - 0xAA, 0xA1, 0xCB, 0xE0, 0x77, 0x1F, 0x59, 0x5A, 0x7E, 0x77, 0x97, 0xE0, 0x2B, 0xE4, 0x06, 0x2B, 0x0C, 0xE5, 0xCB, 0x04, 0x58, - 0x37, 0x62, 0x56, 0x20, 0x72, 0xFD, 0xB6, 0x99, 0x14, 0x89, 0xCA, 0xC0, 0x0E, 0x32, 0x5E, 0x2F, 0x01, 0x4C, 0xC4, 0x4F, 0xF7, - 0xD0, 0xA4, 0x05, 0x46, 0x13, 0x81, 0xA6, 0xD6, 0x5E, 0x27, 0x9E, 0x4D, 0xA8, 0xDE, 0x9E, 0xA1, 0x3B, 0x47, 0x5C, 0x60, 0xCD, - 0x1A, 0x63, 0xF7, 0x2B, 0x6C, 0x14, 0x6B, 0x36, 0x47, 0xEF, 0x42, 0x74, 0x6A, 0x17, 0x4A, 0x9C, 0xBC, 0x4F, 0xA3, 0xEE, 0xA3, - 0x24, 0xD6, 0x7D, 0x9A, 0x58, 0x3C, 0xEF, 0x95, 0x71, 0x77, 0x7B, 0x89, 0xA3, 0x80, 0xDC, 0xBA, 0x78, 0x05, 0x95, 0x88, 0x00, - 0x4D, 0xE3, 0x1A, 0xDE, 0x26, 0x5E, 0xE5, 0x11, 0x3B, 0x6F, 0x2C, 0x52, 0xBC, 0x99, 0x9F, 0xE9, 0xEB, 0x7A, 0xC6, 0x25, 0x03, - 0x26, 0xB9, 0x6E, 0xA0, 0xFA, 0xC0, 0x53, 0x7B, 0xDF, 0x63, 0x38, 0x2E, 0x8F, 0x3F, 0x3C, 0x54, 0x08, 0xB5, 0x02, 0xB5, 0xDA, - 0x23, 0xD8, 0xB2, 0xC5, 0x4D, 0x8C, 0xDC, 0xF6, 0x84, 0xE6, 0x90, 0x46, 0x29, 0x01, 0x56, 0x99, 0xAF, 0x89, 0x57, 0x79, 0xBE, - 0x0E, 0x20, 0x13, 0x81, 0xCB, 0x67, 0x38, 0x87, 0xD5, 0xCB, 0x12, 0x4D, 0x50, 0xEC, 0x2A, 0xF9, 0x8B, 0xB8, 0x8C, 0x31, 0x98, - 0x21, 0x65, 0x93, 0xD2, 0x0D, 0x8D, 0x41, 0x66, 0xBA, 0xF0, 0xF1, 0x36, 0x4A, 0x70, 0x58, 0xCB, 0xE4, 0x31, 0xD1, 0x70, 0x2B, - 0x84, 0x7A, 0xC5, 0x10, 0x41, 0xDC, 0x65, 0xB8, 0xB1, 0x94, 0xA0, 0x83, 0x78, 0x85, 0x26, 0xBA, 0x87, 0x16, 0x40, 0x80, 0x73, - 0x2F, 0xAA, 0x5A, 0xF4, 0x05, 0x59, 0x8D, 0x8F, 0xDF, 0x88, 0xF9, 0xC5, 0xDD, 0x48, 0x38, 0xB8, 0xCB, 0x19, 0xE7, 0x46, 0x67, - 0xF9, 0x4F, 0x65, 0x1D, 0xE9, 0x57, 0x11, 0xC4, 0xE0, 0x52, 0xE8, 0x1B, 0x7D, 0x48, 0x7C, 0xF1, 0xEA, 0xDF, 0x73, 0x5C, 0x1C, - 0x50, 0xFF, 0x97, 0x41, 0x8D, 0xB4, 0xB6, 0x49, 0xE7, 0xDA, 0x2C, 0x64, 0xD6, 0x2D, 0x31, 0x74, 0xD4, 0xB0, 0x78, 0x08, 0xE7, - 0x1F, 0xA2, 0xB2, 0xC1, 0x3D, 0x64, 0x20, 0x7B, 0x5F, 0xA8, 0xA7, 0x1F, 0x59, 0x7E, 0x9D, 0x15, 0xD0, 0x28, 0x2E, 0x43, 0x58, - 0xC9, 0x74, 0x6A, 0xE1, 0x89, 0x48, 0x12, 0x74, 0x1B, 0x03, 0xE0, 0x8E, 0xA4, 0xEF, 0x22, 0xFC, 0x0C, 0x0D, 0xBB, 0xAC, 0x1D, - 0x77, 0x04, 0xEF, 0x15, 0x1B, 0xAE, 0x7D, 0xD2, 0x51, 0x04, 0x6F, 0x7E, 0xCE, 0x1D, 0xE9, 0xB5, 0x58, 0x0B, 0x41, 0x3C, 0xDD, - 0xCC, 0x22, 0x8C, 0xAB, 0x10, 0x62, 0x24, 0x04, 0x90, 0x1E, 0xE0, 0x1B, 0xE4, 0x07, 0x79, 0x75, 0xB6, 0x45, 0xF9, 0x65, 0x28, - 0x3D, 0x2A, 0x85, 0xCD, 0x4E, 0x9C, 0xC0, 0x9A, 0xBF, 0xE6, 0x8A, 0x3C, 0x95, 0xF7, 0x65, 0x89, 0x1E, 0x97, 0x12, 0xEE, 0xA5, - 0x01, 0x4E, 0xD5, 0xAF, 0xE5, 0xA4, 0xC7, 0x6F, 0x86, 0x2D, 0xAE, 0x96, 0x0A, 0xB0, 0xE5, 0x74, 0x31, 0x8B, 0xB4, 0x9F, 0x4B, - 0xBB, 0xBD, 0x20, 0x47, 0x19, 0x28, 0x06, 0xD3, 0xC0, 0xF4, 0xA3, 0x31, 0x2F, 0xFC, 0xE9, 0x8B, 0xC5, 0x32, 0x79, 0x5F, 0xCC, - 0x82, 0xD3, 0x1B, 0x6B, 0x6D, 0xAB, 0xBB, 0x22, 0xD0, 0x94, 0xE1, 0x6D, 0x58, 0xCA, 0xD0, 0x4C, 0x32, 0x40, 0x92, 0x37, 0xB6, - 0xF4, 0x30, 0x5F, 0x18, 0x06, 0x72, 0x90, 0x7B, 0x78, 0x68, 0xA5, 0x6A, 0x01, 0xE3, 0xD0, 0x49, 0x15, 0x7A, 0xAF, 0x0A, 0xD1, - 0xF5, 0x38, 0x4E, 0x04, 0x18, 0x71, 0x34, 0x17, 0x05, 0x8A, 0x6A, 0x2B, 0x4A, 0x3D, 0xF7, 0x5E, 0x78, 0xF8, 0x5E, 0xFA, 0x02, - 0x98, 0xCB, 0xD2, 0x79, 0x6F, 0x67, 0x1D, 0xE7, 0x20, 0x4A, 0x02, 0x0F, 0x6F, 0xCD, 0xB3, 0x4D, 0x0A, 0x6C, 0x36, 0x29, 0xEE, - 0x70, 0x61, 0x1B, 0x2E, 0x66, 0xEA, 0xDA, 0x57, 0x6A, 0x1E, 0x6D, 0x24, 0x35, 0xBF, 0x74, 0xA0, 0x26, 0x3F, 0x81, 0xC5, 0xB5, - 0xDD, 0x52, 0xE8, 0x58, 0x1F, 0x1F, 0x34, 0xC0, 0x3B, 0xC6, 0x2A, 0x1A, 0x82, 0xC8, 0x08, 0x1E, 0x7F, 0x4F, 0x5B, 0x50, 0x38, - 0x17, 0x39, 0xF4, 0x0B, 0xD2, 0x7F, 0x4F, 0x77, 0x9E, 0xBA, 0x48, 0xA8, 0xF6, 0xF1, 0x28, 0x83, 0x7E, 0x6D, 0xF7, 0x31, 0x41, - 0xE3, 0xD1, 0x51, 0xEF, 0x13, 0x64, 0xAD, 0x9E, 0x08, 0xA6, 0xDB, 0x1B, 0xE0, 0x2D, 0xFD, 0xC2, 0xAB, 0x3F, 0x70, 0x73, 0x88, - 0xC3, 0xFD, 0xE3, 0x4E, 0x3A, 0xDA, 0xE3, 0xC3, 0xD1, 0xF9, 0xE4, 0xA8, 0xEC, 0xFC, 0x79, 0x8B, 0x02, 0x3E, 0xCA, 0xF8, 0xF2, - 0x06, 0xDB, 0x44, 0x7F, 0x5A, 0xF7, 0xCF, 0xE8, 0xB0, 0x4E, 0x6E, 0x55, 0x20, 0xEA, 0x3B, 0xFC, 0x0C, 0xFE, 0xF7, 0x4F, 0x3F, - 0xFE, 0xB3, 0x2C, 0xD7, 0xE2, 0xCD, 0x8D, 0x49, 0x86, 0xAD, 0x4B, 0x0D, 0x26, 0x99, 0xE4, 0x80, 0xFD, 0x71, 0xCE, 0xD7, 0x06, - 0x9D, 0x8B, 0xC5, 0xF9, 0xC3, 0x24, 0x1D, 0xA7, 0xB5, 0xBB, 0x72, 0xC8, 0xA8, 0xC7, 0x76, 0x65, 0x9F, 0xEB, 0xFC, 0xC4, 0x9F, - 0x77, 0x94, 0xD5, 0x60, 0x7B, 0xC5, 0x25, 0x65, 0x83, 0x01, 0xC2, 0x47, 0x96, 0x12, 0x17, 0x86, 0xCD, 0xA9, 0x64, 0xF3, 0xDB, - 0x38, 0xBD, 0xA9, 0xBE, 0xAB, 0x38, 0xA4, 0xEB, 0xF0, 0x54, 0xE8, 0x0D, 0x16, 0xE2, 0x46, 0xC1, 0x23, 0x4C, 0xC4, 0x4A, 0x9B, - 0xE2, 0xF8, 0xB8, 0xDF, 0x35, 0x7F, 0xEB, 0x70, 0x4F, 0x82, 0x22, 0x79, 0x32, 0xD0, 0x87, 0x2A, 0x21, 0x9E, 0xC6, 0xE3, 0xE3, - 0x94, 0xC2, 0x65, 0xA2, 0xF6, 0x42, 0xDA, 0xFB, 0xA1, 0x23, 0x46, 0x3C, 0x53, 0x39, 0x29, 0x77, 0x2F, 0xD3, 0x2B, 0x5D, 0xE8, - 0x2D, 0xFB, 0xD3, 0xB8, 0x99, 0x97, 0x82, 0x16, 0x44, 0x54, 0x8D, 0x06, 0x8D, 0x4A, 0x21, 0xC3, 0xE6, 0x9E, 0x9A, 0x01, 0x82, - 0x08, 0xDB, 0xAE, 0xB9, 0xD2, 0x6A, 0xDB, 0xA4, 0xE2, 0xE7, 0xC1, 0x82, 0x31, 0xAB, 0xB6, 0x60, 0xF7, 0x86, 0x8E, 0x95, 0x72, - 0x64, 0xB0, 0x11, 0x78, 0x19, 0xD0, 0x76, 0x9E, 0x2C, 0xD8, 0x4F, 0xB0, 0x15, 0xA2, 0x10, 0xE4, 0x25, 0x44, 0x22, 0x80, 0xF8, - 0x4A, 0x86, 0xEF, 0x95, 0x50, 0xFD, 0x14, 0x18, 0x55, 0x92, 0x5E, 0xB6, 0x10, 0x66, 0xD8, 0x40, 0xA3, 0x3F, 0x4F, 0x80, 0xFC, - 0xF3, 0x13, 0x09, 0x62, 0x60, 0xF6, 0x86, 0x42, 0x1C, 0x0F, 0x06, 0x2D, 0xE3, 0xB8, 0x42, 0x6E, 0xB6, 0x66, 0xB0, 0x02, 0xFF, - 0xED, 0xBB, 0xB7, 0x74, 0x75, 0x1B, 0x30, 0x8E, 0x1B, 0xFC, 0x33, 0x02, 0x3C, 0xA0, 0x3D, 0xF4, 0xAB, 0x6B, 0xD8, 0x68, 0x36, - 0xCE, 0x97, 0xA8, 0xC9, 0x01, 0xF5, 0xF7, 0xD3, 0xED, 0xEF, 0xF7, 0xED, 0x71, 0xA0, 0x9D, 0x49, 0xD1, 0x91, 0xA8, 0x93, 0x66, - 0xF9, 0x5D, 0xBC, 0x4A, 0xFE, 0x62, 0x0E, 0xCD, 0xCC, 0xB7, 0xD8, 0xF0, 0xEF, 0xBF, 0xE3, 0xB3, 0x5D, 0xA7, 0x9E, 0xF1, 0x9C, - 0xD7, 0xEF, 0xA7, 0x8F, 0xFD, 0x70, 0x27, 0x92, 0x03, 0x72, 0x9C, 0x2C, 0x29, 0xBE, 0x00, 0x3A, 0xDB, 0x20, 0xAF, 0xA2, 0xC8, - 0x07, 0xFC, 0x06, 0x36, 0xA8, 0xC5, 0xB7, 0xC9, 0xB2, 0xF4, 0x81, 0xC5, 0x9C, 0x7A, 0x66, 0x48, 0x52, 0x7C, 0x40, 0x51, 0xFB, - 0x34, 0x7A, 0x1D, 0xBA, 0xF0, 0x5F, 0x4E, 0xB3, 0xD9, 0x24, 0x7B, 0xD5, 0x85, 0x75, 0x09, 0x09, 0x47, 0x94, 0x70, 0xD2, 0x9B, - 0x4D, 0x4A, 0xE9, 0x9D, 0x79, 0x72, 0x92, 0x85, 0x7D, 0x58, 0x7E, 0x3A, 0x25, 0xE3, 0xFE, 0x9A, 0xD9, 0xD8, 0xD3, 0x2D, 0xD4, - 0x32, 0xD5, 0xCD, 0xBF, 0x76, 0x29, 0xF8, 0xDE, 0xA9, 0x47, 0x6E, 0xD2, 0xB5, 0x27, 0x79, 0x2C, 0x26, 0xD4, 0xCA, 0x89, 0xCB, - 0x64, 0x74, 0x1D, 0x1A, 0xB7, 0xBD, 0x49, 0x39, 0xF6, 0x73, 0x7A, 0x81, 0x38, 0xA3, 0xA7, 0x87, 0x6D, 0x54, 0x71, 0x74, 0xFF, - 0x11, 0x4C, 0xFF, 0x38, 0x9D, 0xB5, 0xFF, 0x71, 0x8A, 0x8F, 0x9D, 0xA9, 0x47, 0x62, 0x32, 0x7C, 0x2F, 0xEE, 0x14, 0x25, 0x80, - 0x71, 0xF9, 0xE4, 0x14, 0xE7, 0x9D, 0x1C, 0x95, 0x84, 0xBC, 0xB3, 0xC0, 0x68, 0xB3, 0x6F, 0x58, 0x59, 0x02, 0x5B, 0x29, 0x7E, - 0x8A, 0xD3, 0x18, 0x43, 0x45, 0x87, 0xA6, 0x88, 0x26, 0x07, 0x86, 0x1B, 0x8D, 0x28, 0xFF, 0xCD, 0x2A, 0xA1, 0x37, 0x89, 0x1C, - 0xC5, 0xD6, 0x46, 0xB1, 0x1F, 0xBE, 0xFE, 0xF1, 0xBB, 0x6F, 0xB2, 0x34, 0xE5, 0xB7, 0x66, 0x9C, 0xC5, 0x6F, 0xCD, 0xE2, 0xFF, - 0x7C, 0xFB, 0xF6, 0xD7, 0x27, 0xCA, 0xAF, 0x8C, 0xF2, 0x78, 0x2B, 0xF6, 0xDB, 0xAF, 0x9D, 0xC5, 0x36, 0x46, 0x31, 0x58, 0x59, - 0x45, 0x53, 0x73, 0x0F, 0x3B, 0xDC, 0x84, 0x31, 0x52, 0x42, 0x2B, 0x79, 0x34, 0x34, 0x1B, 0x8C, 0x5D, 0x80, 0xDC, 0x29, 0x99, - 0xA3, 0xE0, 0xFA, 0x2D, 0xBB, 0xDE, 0xDC, 0xFC, 0x44, 0x61, 0x2B, 0xB8, 0x9C, 0x26, 0xC3, 0x3C, 0x57, 0xD5, 0x3C, 0x8F, 0x78, - 0x1C, 0xDE, 0x6A, 0xBD, 0x63, 0xC5, 0x6D, 0x19, 0x17, 0xD0, 0xC0, 0x7B, 0x7C, 0x12, 0xCF, 0x42, 0x6F, 0xC7, 0x6C, 0x72, 0xDC, - 0xA2, 0x2D, 0x5A, 0xE9, 0x3F, 0xB2, 0x69, 0x72, 0xB0, 0x17, 0x65, 0x22, 0xB6, 0xDB, 0x99, 0x3F, 0x8F, 0x7A, 0xCA, 0x30, 0x70, - 0x0E, 0xE0, 0x23, 0xD8, 0x40, 0xEE, 0xA0, 0xCE, 0xD1, 0xC5, 0x18, 0x19, 0xBE, 0x0A, 0xCF, 0x6F, 0xED, 0x14, 0x7E, 0xE8, 0xC4, - 0xAF, 0x2A, 0x05, 0xE6, 0x55, 0xF3, 0xC7, 0xF7, 0xF1, 0xC7, 0xF8, 0x1D, 0xBE, 0x62, 0x02, 0xF0, 0x8D, 0xF1, 0xCD, 0xA9, 0xCE, - 0x0D, 0x63, 0x1F, 0x8A, 0x8F, 0xC9, 0x0A, 0x44, 0x4C, 0x1C, 0x8B, 0x17, 0x52, 0x11, 0x10, 0xDF, 0x59, 0xFE, 0x8E, 0x10, 0x46, - 0x6F, 0xD1, 0x7A, 0x3F, 0x41, 0x1E, 0xBD, 0x61, 0x51, 0x80, 0x20, 0xA2, 0xEE, 0xA9, 0x3F, 0xFE, 0x9A, 0x15, 0x09, 0x36, 0x3D, - 0x7E, 0xE4, 0x41, 0x82, 0xC6, 0x8F, 0x2B, 0x40, 0x66, 0xB9, 0x59, 0xB0, 0x1F, 0xC6, 0x14, 0x27, 0x65, 0x2C, 0x43, 0xCB, 0x86, - 0xC9, 0x62, 0x7C, 0xBE, 0x0B, 0x31, 0xC4, 0x53, 0x63, 0xFE, 0xC5, 0x2E, 0x8C, 0x57, 0xBC, 0xBA, 0xCC, 0xD5, 0x99, 0x83, 0x5D, - 0x78, 0x1D, 0xA3, 0x96, 0xFA, 0xF0, 0x23, 0xFB, 0xC8, 0x56, 0xF5, 0x02, 0x43, 0x60, 0xC1, 0xC0, 0x55, 0x65, 0x86, 0x0C, 0x62, - 0x8B, 0x59, 0x2F, 0xF1, 0xD8, 0xEF, 0x5B, 0x50, 0x85, 0x34, 0x9C, 0x50, 0x48, 0x96, 0x24, 0x06, 0x8D, 0xC5, 0x40, 0x0E, 0x59, - 0xC7, 0x0F, 0x78, 0x4B, 0x4E, 0x66, 0xF1, 0xE0, 0x8F, 0x98, 0xD7, 0x87, 0x16, 0xF8, 0xFD, 0xC3, 0xF1, 0x23, 0x56, 0x18, 0x3F, - 0xF2, 0xDB, 0xB0, 0xE3, 0xC7, 0x5F, 0x7E, 0xFD, 0xEA, 0x7F, 0xFD, 0xF6, 0xDD, 0xB8, 0x1B, 0x7E, 0xF3, 0xE3, 0x77, 0x5F, 0xBD, - 0x7E, 0xF7, 0xF6, 0xBB, 0xFF, 0xFD, 0x76, 0xDC, 0x13, 0x3F, 0x5E, 0x7F, 0xF7, 0xD5, 0xB7, 0x5F, 0x7D, 0xF3, 0xEF, 0x58, 0x1B, - 0xEA, 0xFF, 0x06, 0x4C, 0x5D, 0x43, 0x90, 0xA8, 0x5E, 0x84, 0x3A, 0x20, 0x40, 0x40, 0x14, 0xE1, 0xED, 0x32, 0x47, 0x6E, 0x7F, - 0x17, 0x16, 0xB7, 0x20, 0x08, 0x35, 0x64, 0x03, 0x8A, 0xEE, 0xE2, 0x39, 0x4C, 0x4E, 0x5E, 0x87, 0x7F, 0x88, 0x00, 0xBC, 0xC6, - 0x79, 0xFD, 0x36, 0x29, 0xE6, 0xB8, 0x0D, 0x3D, 0x68, 0x50, 0x72, 0x4C, 0x87, 0x3F, 0x9B, 0x15, 0xD4, 0x91, 0x71, 0x92, 0xBC, - 0xB0, 0x8A, 0xE1, 0xBE, 0x6A, 0x83, 0xE8, 0x5F, 0xA3, 0xE0, 0xE7, 0x5F, 0x7E, 0x46, 0x04, 0xFC, 0xFC, 0xCB, 0xBB, 0xD7, 0xBF, - 0xFC, 0xF6, 0xF6, 0x3B, 0x18, 0xFE, 0xBF, 0xFD, 0xF2, 0xF6, 0xDD, 0xCF, 0x5F, 0xC1, 0xC0, 0xC3, 0xB7, 0x3F, 0xFC, 0xF4, 0x1D, - 0x24, 0x02, 0x70, 0xBB, 0xF0, 0xCD, 0xE6, 0xFA, 0x57, 0x7C, 0x42, 0xA7, 0x1C, 0x3F, 0xF2, 0x68, 0x46, 0xE3, 0x47, 0x85, 0x70, - 0x4A, 0x18, 0x4F, 0xBD, 0xB5, 0x20, 0x29, 0x90, 0x34, 0xB9, 0xF2, 0x8A, 0xFC, 0x0C, 0x1F, 0xF5, 0x22, 0x20, 0x85, 0x08, 0xA3, - 0x7F, 0x82, 0x72, 0x21, 0x7F, 0x10, 0x50, 0xDE, 0x0C, 0x88, 0x68, 0xFE, 0x41, 0xB7, 0x57, 0x6C, 0xE6, 0x73, 0x56, 0x14, 0x3F, - 0xC0, 0x78, 0xBC, 0x65, 0x9C, 0xAC, 0xE0, 0x03, 0x4D, 0x9F, 0x72, 0xE8, 0x6B, 0x45, 0xC1, 0x7C, 0xB4, 0xBF, 0xAA, 0xEE, 0xF9, - 0x6C, 0x2C, 0x88, 0x6A, 0x78, 0xDE, 0xB7, 0x04, 0x0F, 0x47, 0xF4, 0x86, 0xE6, 0x92, 0xA7, 0xFF, 0x46, 0x00, 0x72, 0x12, 0x34, - 0xA1, 0x94, 0xF9, 0x36, 0xDA, 0xA9, 0xE4, 0x99, 0x2A, 0x09, 0x03, 0xD8, 0x53, 0xEE, 0x5C, 0x94, 0x13, 0x08, 0x37, 0xCA, 0xF1, - 0xD1, 0x12, 0x94, 0x00, 0xCE, 0x7D, 0x9C, 0x96, 0xF2, 0x5D, 0x36, 0x35, 0xF9, 0x18, 0x4B, 0x17, 0x0B, 0x8C, 0x80, 0x6C, 0x24, - 0x16, 0x64, 0xE6, 0x46, 0x4F, 0x6B, 0xAF, 0x0B, 0xE8, 0x20, 0xCC, 0xB8, 0x32, 0x11, 0x07, 0xC6, 0x58, 0x8C, 0xAC, 0x97, 0xD0, - 0x6C, 0xB6, 0xC9, 0xE7, 0xCC, 0x55, 0x0D, 0x48, 0x35, 0xCB, 0x93, 0x1B, 0x90, 0x88, 0xDC, 0xED, 0x12, 0x2D, 0x11, 0x57, 0x79, - 0x8A, 0x20, 0xB8, 0x19, 0x04, 0xA7, 0x8F, 0xA5, 0xF3, 0xFC, 0x61, 0x8D, 0xA4, 0x69, 0xCE, 0x20, 0x9A, 0xA2, 0x5D, 0x10, 0x60, - 0x58, 0x25, 0x67, 0xC7, 0xA1, 0x68, 0x51, 0x66, 0x2A, 0xAA, 0x94, 0x73, 0xAB, 0xFA, 0xA9, 0x2F, 0x23, 0x60, 0x51, 0x89, 0x6B, - 0x38, 0x38, 0x9F, 0x7F, 0xBE, 0x6D, 0x64, 0x3F, 0x90, 0xF9, 0x26, 0x55, 0xF3, 0xC7, 0x83, 0xFC, 0x8A, 0xE9, 0xBD, 0xCD, 0xD6, - 0x3F, 0xA2, 0xC9, 0xA7, 0x61, 0x62, 0x70, 0x62, 0xBF, 0x42, 0x7A, 0xAE, 0xCC, 0x29, 0xCC, 0x0B, 0xE0, 0xE0, 0x9B, 0x8C, 0x0C, - 0x4C, 0x65, 0xA1, 0xD7, 0xE2, 0x6F, 0x29, 0x90, 0xE6, 0x62, 0x8C, 0xA7, 0x3C, 0xDF, 0x80, 0x64, 0x9F, 0xB2, 0x95, 0xDC, 0x96, - 0x0C, 0xE6, 0xF7, 0xE7, 0xAF, 0xD9, 0xBD, 0xA6, 0x5F, 0x0B, 0x69, 0x77, 0x80, 0x9A, 0xBB, 0x6F, 0xC8, 0x6E, 0x2A, 0xF3, 0x7F, - 0xD2, 0x49, 0x9A, 0x15, 0xA7, 0x8B, 0xFB, 0x64, 0x51, 0xDE, 0xBA, 0x71, 0x51, 0xAC, 0x49, 0x63, 0x8A, 0x71, 0x8F, 0x75, 0x94, - 0x80, 0x61, 0xF3, 0x1B, 0x50, 0xAF, 0xE3, 0xD2, 0x45, 0x3D, 0x80, 0xE5, 0x39, 0x87, 0x1D, 0x14, 0x6D, 0x37, 0xE5, 0xAD, 0x8B, - 0x0F, 0x2E, 0x26, 0x17, 0xA6, 0x6E, 0xD6, 0x38, 0x32, 0xD8, 0xF7, 0x4F, 0xE6, 0x08, 0x25, 0xDA, 0xBE, 0xBE, 0xEF, 0xF5, 0x47, - 0xDF, 0xE4, 0xC3, 0xD1, 0x9B, 0x65, 0xAF, 0x7F, 0x01, 0xCC, 0xEC, 0xEB, 0xFB, 0x51, 0xB7, 0xAB, 0x13, 0x7A, 0x90, 0x30, 0xE8, - 0xBD, 0xA3, 0x32, 0x17, 0x6F, 0x96, 0xA3, 0x5E, 0x1F, 0x78, 0x9B, 0xAC, 0x04, 0x09, 0xC3, 0xEE, 0xCB, 0x33, 0xE4, 0x71, 0xC8, - 0x21, 0xE3, 0x45, 0x92, 0xC9, 0xF6, 0x15, 0x9F, 0xC9, 0xF1, 0x9A, 0x3D, 0x50, 0x16, 0x2B, 0x4C, 0xB6, 0xF1, 0xAB, 0x4E, 0x96, - 0x13, 0x30, 0xAF, 0xCE, 0x1A, 0x2F, 0x5D, 0x99, 0xCC, 0xDA, 0xA6, 0x54, 0x69, 0xCD, 0xE8, 0x59, 0x70, 0xB4, 0xAF, 0x73, 0x58, - 0x56, 0x73, 0x90, 0x55, 0xDE, 0xB0, 0x79, 0xE1, 0x5E, 0x30, 0xA8, 0x36, 0xFC, 0x72, 0x9F, 0xB2, 0x1C, 0xDF, 0xED, 0xC8, 0x01, - 0x35, 0xEE, 0xF5, 0x93, 0x6E, 0xEE, 0x7E, 0x4A, 0x0A, 0xA0, 0xB2, 0xB7, 0xD9, 0xF7, 0xC0, 0x37, 0x1C, 0x85, 0x88, 0x23, 0x25, - 0xE5, 0xD7, 0x80, 0xDB, 0x12, 0xA4, 0x90, 0xDB, 0x86, 0x2E, 0x61, 0xBE, 0x8A, 0x79, 0xCE, 0x58, 0xFA, 0x4B, 0xDA, 0x50, 0x02, - 0x58, 0xD7, 0xFA, 0x16, 0x38, 0x81, 0xB0, 0x29, 0x36, 0x94, 0x3A, 0x13, 0xA5, 0xDE, 0x2C, 0x0A, 0x5D, 0xD0, 0x4D, 0x77, 0x28, - 0xE4, 0x58, 0xC5, 0x5C, 0xED, 0x01, 0xFD, 0x15, 0x8B, 0xA2, 0x21, 0x13, 0x88, 0x6F, 0xD5, 0x94, 0x87, 0x2B, 0xF6, 0x2E, 0x49, - 0xFF, 0x33, 0xFE, 0xC0, 0x9A, 0x4A, 0x00, 0x9A, 0xEF, 0x93, 0x65, 0xF2, 0xA6, 0x70, 0xEF, 0xFF, 0x7D, 0x9E, 0xFD, 0x2B, 0x48, - 0x5E, 0xF7, 0x59, 0xEE, 0x2C, 0x32, 0xE0, 0x45, 0xBE, 0x5A, 0x93, 0x5C, 0x59, 0x63, 0x0C, 0xB8, 0x09, 0xB1, 0x1B, 0x63, 0x4B, - 0x33, 0xEB, 0x8E, 0x90, 0xD5, 0xE3, 0xAA, 0x7C, 0xC0, 0xE7, 0x91, 0xCB, 0x7A, 0xED, 0x2E, 0x8C, 0x20, 0xB9, 0x01, 0xA5, 0x8E, - 0xFD, 0x90, 0x82, 0x7C, 0x08, 0x15, 0x9B, 0xE4, 0x02, 0x6B, 0xD8, 0x44, 0xF9, 0xBB, 0x10, 0x45, 0xF5, 0x1F, 0xD2, 0x65, 0xA6, - 0xA9, 0x2F, 0x75, 0x2E, 0xE0, 0x5E, 0xC3, 0x06, 0x0A, 0xA3, 0xDF, 0xBB, 0x21, 0xC3, 0xD0, 0x8B, 0x06, 0x3E, 0x9A, 0x82, 0x1E, - 0xFD, 0xCF, 0x6C, 0xED, 0xA4, 0x21, 0xDC, 0x6A, 0x1E, 0xEA, 0xB0, 0xDD, 0x51, 0x9A, 0x9B, 0xC5, 0x00, 0x84, 0xB7, 0x71, 0xF1, - 0x6F, 0xEB, 0xA2, 0x86, 0x22, 0xBE, 0x00, 0xC4, 0x72, 0x54, 0xD9, 0x16, 0xED, 0x37, 0xE2, 0x1F, 0xE6, 0xE6, 0xF6, 0x1E, 0xA7, - 0x6D, 0xE5, 0xE4, 0x51, 0xB0, 0xA7, 0xE5, 0x77, 0xF7, 0x71, 0xCE, 0xFE, 0x83, 0xEB, 0x32, 0x8E, 0x42, 0x40, 0xEA, 0x64, 0x99, - 0xFF, 0xC6, 0x98, 0x7B, 0x9B, 0xC2, 0x29, 0xFB, 0x2B, 0x10, 0x02, 0x61, 0xBF, 0x77, 0xD3, 0xB6, 0x68, 0x60, 0x93, 0x36, 0xEC, - 0xEA, 0xF4, 0xCC, 0x61, 0xF9, 0xC3, 0x02, 0xA3, 0xA9, 0x37, 0x10, 0xF9, 0x7C, 0x93, 0x63, 0x88, 0x8D, 0x5F, 0x45, 0xC9, 0x06, - 0x42, 0x4F, 0x39, 0x7A, 0x9B, 0xDA, 0xE9, 0xD3, 0x72, 0xC4, 0x30, 0x0D, 0x62, 0x39, 0xFE, 0x54, 0x38, 0x97, 0x2D, 0x52, 0x3C, - 0x50, 0xE2, 0x57, 0xEB, 0x75, 0x05, 0x2F, 0x66, 0x19, 0x12, 0x70, 0xBF, 0x65, 0x18, 0x76, 0x81, 0x2C, 0x56, 0x86, 0x74, 0x8B, - 0xFC, 0x58, 0xC9, 0x4E, 0x9A, 0x39, 0xAB, 0x1D, 0x8F, 0xC8, 0x40, 0x6D, 0x76, 0x8A, 0x50, 0xE4, 0x6C, 0x67, 0xC8, 0x11, 0x6B, - 0xA4, 0x3A, 0xE0, 0xC3, 0xFB, 0xF6, 0xBA, 0x69, 0x7D, 0x58, 0xCD, 0xD0, 0xA2, 0x9C, 0xB3, 0xE4, 0x23, 0xFB, 0x5F, 0x1B, 0xB6, - 0x69, 0x94, 0xB5, 0xB5, 0x40, 0x24, 0x29, 0xE2, 0x63, 0xE3, 0x88, 0x2F, 0x48, 0xE4, 0x00, 0xAA, 0x17, 0xA1, 0x2E, 0xD4, 0x00, - 0xEC, 0x36, 0x70, 0x69, 0x64, 0x6F, 0xE2, 0x8F, 0x75, 0x4E, 0x01, 0x33, 0xBD, 0x48, 0x16, 0x40, 0xE2, 0x0D, 0xAC, 0xA0, 0xC7, - 0x31, 0x0A, 0xDA, 0x28, 0xB7, 0x46, 0x1A, 0x0B, 0xC7, 0xEE, 0xD1, 0xD2, 0x5F, 0xA0, 0xCE, 0xF7, 0x20, 0x91, 0xBD, 0xE6, 0x48, - 0x97, 0x52, 0x1D, 0xE8, 0xB1, 0x49, 0x9C, 0x96, 0x86, 0x98, 0x2F, 0x20, 0xF4, 0xEE, 0x1E, 0x38, 0x92, 0xBC, 0x54, 0xE1, 0xCB, - 0xA3, 0x19, 0x43, 0x05, 0x40, 0x77, 0x8E, 0x0F, 0xBB, 0xD3, 0xAC, 0x7D, 0x93, 0xDD, 0xAD, 0x31, 0xCC, 0x0B, 0x09, 0xF4, 0x39, - 0x03, 0x70, 0xAB, 0x02, 0x61, 0x23, 0xCB, 0x59, 0x0B, 0x51, 0xD3, 0x89, 0x27, 0x24, 0xC6, 0x07, 0xCE, 0x1F, 0x9C, 0x84, 0x20, - 0xE6, 0xDB, 0x2C, 0x51, 0x9B, 0xE1, 0x7D, 0x84, 0x76, 0x86, 0x72, 0xA7, 0x81, 0x4B, 0xA1, 0x52, 0x98, 0x23, 0x94, 0x92, 0x91, - 0x3D, 0xCC, 0x86, 0xA9, 0x17, 0x23, 0x77, 0xCC, 0x2A, 0xA0, 0xE2, 0x6D, 0x76, 0x30, 0xFE, 0x51, 0xC0, 0xE4, 0x60, 0x12, 0x46, - 0x81, 0x12, 0x5E, 0x0B, 0xEC, 0xA3, 0xE1, 0x00, 0x49, 0xDF, 0xD6, 0x97, 0xF6, 0xE1, 0xB0, 0xC7, 0xE5, 0x55, 0xD9, 0x9C, 0x93, - 0x77, 0x74, 0x51, 0xCC, 0x28, 0x5F, 0xEF, 0x5D, 0x93, 0x5D, 0x92, 0x45, 0x78, 0xEF, 0xB5, 0x85, 0xD7, 0xEB, 0x72, 0xDD, 0x21, - 0x4E, 0x37, 0xB8, 0x95, 0x6D, 0x10, 0x77, 0xB6, 0x6E, 0xBF, 0xA4, 0x89, 0xF8, 0x3E, 0x67, 0xFF, 0xD5, 0xC0, 0xD8, 0x1B, 0x59, - 0x70, 0x1F, 0x33, 0x9B, 0x99, 0x2F, 0x6E, 0x3F, 0x6C, 0xB5, 0x44, 0xFB, 0x27, 0xAC, 0x19, 0x7C, 0x8B, 0xA1, 0x6E, 0xC4, 0x40, - 0x3E, 0xB4, 0x93, 0xC6, 0xA6, 0xA2, 0x62, 0x6C, 0x32, 0xAC, 0x3B, 0x78, 0xDB, 0xC8, 0x3C, 0xDB, 0x93, 0x71, 0x1B, 0xDF, 0x17, - 0x2D, 0xD4, 0x7F, 0xD8, 0xA2, 0x05, 0x22, 0x76, 0x0B, 0x5F, 0xFD, 0x48, 0xC8, 0xBC, 0x8A, 0x66, 0x60, 0xB3, 0x02, 0x86, 0xB5, - 0x13, 0xA6, 0x2B, 0xD4, 0x80, 0x7E, 0x15, 0xD5, 0xCD, 0x60, 0x28, 0x40, 0x3F, 0xAD, 0x84, 0xE2, 0x6A, 0xAB, 0x77, 0xB9, 0x99, - 0x0C, 0x83, 0x22, 0xE3, 0x3A, 0xF8, 0xA5, 0x71, 0x04, 0xCC, 0x8F, 0x94, 0xD0, 0x7A, 0x24, 0x8C, 0xF8, 0x6E, 0x3B, 0x97, 0xEC, - 0xEB, 0x9F, 0x14, 0x9F, 0x89, 0x07, 0xBD, 0x95, 0x69, 0x63, 0x0A, 0xF4, 0x26, 0x18, 0x84, 0x36, 0x9A, 0x4B, 0x50, 0xCB, 0xCC, - 0x01, 0x68, 0xF4, 0x98, 0x5D, 0xBF, 0x17, 0x8F, 0xCB, 0x86, 0x38, 0x55, 0x17, 0x64, 0xDF, 0x16, 0x29, 0xBB, 0x3D, 0xE3, 0xC0, - 0x1C, 0x3C, 0x43, 0x10, 0x4F, 0xF7, 0xF1, 0xA0, 0x96, 0x76, 0x08, 0x3D, 0xF6, 0xF7, 0xC7, 0xA7, 0x81, 0x1E, 0x3B, 0x07, 0x87, - 0x51, 0xEB, 0x23, 0xF3, 0xE9, 0x0D, 0x6E, 0x72, 0xD5, 0x23, 0x89, 0x12, 0x1D, 0x21, 0x18, 0xCA, 0x1A, 0x8E, 0x06, 0x0A, 0x31, - 0x37, 0xAC, 0x14, 0x03, 0x93, 0x36, 0x4B, 0x73, 0xBC, 0xBF, 0xE4, 0x18, 0x47, 0x88, 0x3C, 0x60, 0xFF, 0xC7, 0xE9, 0x97, 0x47, - 0x2D, 0x7F, 0x1E, 0xB4, 0xBE, 0x4A, 0x61, 0x8B, 0x8F, 0x5B, 0xFF, 0x96, 0xC4, 0x77, 0x77, 0x71, 0x3E, 0xBF, 0x4D, 0x5A, 0x27, - 0xAD, 0x1F, 0xDE, 0x7C, 0xD3, 0xFA, 0xF2, 0x94, 0xFB, 0x53, 0x3C, 0xEE, 0x08, 0x45, 0x31, 0x77, 0xF1, 0x78, 0x1B, 0xE7, 0xD0, - 0x45, 0xE4, 0xD3, 0xE0, 0x75, 0x82, 0xE5, 0xE7, 0xA1, 0x11, 0x75, 0xE4, 0x3A, 0x23, 0x65, 0xC2, 0x6B, 0x24, 0xC4, 0xCB, 0x13, - 0xFC, 0x6C, 0x42, 0x86, 0xB2, 0x0E, 0xD3, 0xC8, 0xF0, 0x24, 0xB2, 0x1D, 0xFD, 0xB8, 0x3B, 0x1B, 0x1D, 0x56, 0xF1, 0xB3, 0x93, - 0xC0, 0xE5, 0xEF, 0x47, 0xE7, 0xEA, 0xE1, 0xA3, 0x74, 0xD8, 0xC1, 0xF8, 0x83, 0xE3, 0xA3, 0x6E, 0x88, 0xCE, 0x61, 0xF2, 0x5B, - 0x04, 0x5B, 0xDE, 0x19, 0xD5, 0xE7, 0x66, 0xF0, 0x1C, 0x11, 0x9C, 0xEF, 0x92, 0xA2, 0x24, 0x67, 0xA0, 0x04, 0x51, 0x94, 0x64, - 0x1A, 0xA6, 0x08, 0xA1, 0x46, 0x03, 0xFF, 0x51, 0xC4, 0x55, 0xE0, 0x6E, 0x43, 0x08, 0x2F, 0xBA, 0xCF, 0x89, 0xC4, 0x20, 0x74, - 0x1C, 0x17, 0xEA, 0xEC, 0x89, 0xFE, 0x14, 0xCE, 0xBC, 0xA2, 0x03, 0x3A, 0x8C, 0xC3, 0xB8, 0xC1, 0x2A, 0x9B, 0x07, 0x2F, 0xA3, - 0x1E, 0x85, 0x93, 0x63, 0xE1, 0xA7, 0xA1, 0x17, 0x2F, 0x16, 0x16, 0x14, 0x9E, 0xED, 0x6B, 0x12, 0x1A, 0x31, 0xD2, 0xD2, 0xA8, - 0xEC, 0xDC, 0x08, 0xD4, 0x51, 0x78, 0x1E, 0x1E, 0x3C, 0x23, 0x15, 0xE1, 0x32, 0x44, 0xCC, 0x15, 0x79, 0x0F, 0xE0, 0xB2, 0xB8, - 0x8A, 0x2F, 0x8B, 0x76, 0x1B, 0x23, 0xCB, 0x65, 0xD3, 0x62, 0xA6, 0x20, 0x41, 0x1F, 0x52, 0x71, 0x3A, 0x77, 0x29, 0x02, 0xC8, - 0x3C, 0x72, 0xA0, 0xC9, 0xDB, 0x2A, 0x94, 0xE5, 0xC6, 0x79, 0x28, 0x30, 0x38, 0x4E, 0x76, 0x78, 0xE2, 0x18, 0x12, 0xC0, 0x8B, - 0xA4, 0x58, 0x23, 0x59, 0x10, 0xD4, 0x16, 0xB4, 0x3A, 0xCE, 0xA2, 0x82, 0x72, 0xCA, 0x43, 0x46, 0x2B, 0xD7, 0x00, 0x3C, 0xB9, - 0xC1, 0x29, 0xF6, 0x78, 0x87, 0xDC, 0x8B, 0x8B, 0x3C, 0x55, 0x60, 0x3B, 0xE7, 0x22, 0xE4, 0x5B, 0x2B, 0x27, 0x97, 0x57, 0x7C, - 0x60, 0x8D, 0x64, 0xF9, 0x77, 0x31, 0x86, 0xFE, 0xC1, 0x23, 0x2D, 0x15, 0xDA, 0xCD, 0xAA, 0xA5, 0x93, 0x79, 0xFB, 0x14, 0x61, - 0x51, 0x02, 0xEE, 0x98, 0x72, 0xAF, 0xEA, 0xD8, 0xA3, 0x1D, 0x25, 0x4D, 0x54, 0xA7, 0x51, 0xC2, 0x51, 0x9D, 0x48, 0x54, 0x67, - 0x80, 0x6A, 0xBC, 0x4E, 0x21, 0x50, 0x9D, 0x5D, 0x15, 0x97, 0x19, 0x47, 0x75, 0x3A, 0xCD, 0x9C, 0xA8, 0xA6, 0x70, 0xA6, 0x18, - 0xE8, 0x55, 0x1F, 0x1F, 0x21, 0x64, 0xF6, 0x6A, 0xCC, 0x76, 0x3E, 0x67, 0x18, 0x74, 0xBF, 0xE1, 0x3F, 0x59, 0xFC, 0xE1, 0xA7, - 0x78, 0xCD, 0x43, 0x95, 0xCE, 0x23, 0xAB, 0xA8, 0xD8, 0x4F, 0x36, 0x3C, 0x26, 0xE7, 0xA2, 0x68, 0xCD, 0x2B, 0x3B, 0x4B, 0xB1, - 0x59, 0xE3, 0xCB, 0x07, 0xDC, 0xC9, 0x05, 0x05, 0x15, 0xFE, 0xF2, 0x18, 0xB4, 0xB7, 0x03, 0x92, 0xFB, 0x59, 0x1C, 0x6A, 0x98, - 0xAE, 0x34, 0x54, 0x88, 0xBB, 0x9A, 0x76, 0x80, 0xB9, 0xA8, 0x98, 0xCF, 0xEF, 0xE4, 0x8C, 0x93, 0x11, 0x00, 0xB6, 0x58, 0x41, - 0xC4, 0x24, 0xA0, 0x21, 0x26, 0xBF, 0xA1, 0x03, 0x63, 0x10, 0x16, 0xA8, 0x5E, 0xC0, 0xFF, 0x60, 0x2F, 0xB8, 0x45, 0xE3, 0x4E, - 0xCC, 0x99, 0x06, 0xF2, 0x66, 0xE1, 0xD6, 0xCC, 0xBB, 0x42, 0x04, 0x73, 0x3F, 0x29, 0x15, 0x81, 0x25, 0x97, 0xC5, 0x48, 0x68, - 0x63, 0x86, 0xF2, 0x27, 0x14, 0xC4, 0x92, 0x33, 0xB1, 0x2A, 0xC0, 0x61, 0x61, 0x30, 0x65, 0xDF, 0x10, 0xC4, 0xF2, 0x80, 0x18, - 0xEC, 0xB3, 0x59, 0x3E, 0x89, 0xF2, 0x5F, 0x77, 0x8C, 0x41, 0x38, 0x59, 0xFD, 0xF3, 0x10, 0x84, 0x77, 0x52, 0xD5, 0x1E, 0x81, - 0xC3, 0x89, 0xCA, 0x67, 0xA2, 0x18, 0x5B, 0x00, 0x98, 0xA4, 0x0E, 0xFC, 0x99, 0x90, 0x5B, 0x0A, 0xE5, 0x7B, 0xF7, 0x2F, 0x47, - 0xAE, 0x39, 0x90, 0xCF, 0x80, 0x60, 0xA4, 0x59, 0x03, 0xC5, 0x72, 0x80, 0xCF, 0x46, 0xB3, 0x6C, 0x07, 0x19, 0x46, 0xF3, 0x52, - 0xE1, 0xCC, 0xC6, 0xFF, 0x84, 0x75, 0x82, 0xAD, 0xC3, 0x04, 0x61, 0xD3, 0x5F, 0x3F, 0xFC, 0x4C, 0x1B, 0xB9, 0x15, 0x15, 0xB4, - 0x36, 0x8F, 0x41, 0xBD, 0x77, 0x9E, 0x21, 0x9B, 0xC1, 0xF6, 0x7D, 0x07, 0x90, 0x3B, 0xA1, 0x72, 0xBF, 0xCD, 0x90, 0x8E, 0x7F, - 0xA0, 0xD8, 0xEE, 0x48, 0x04, 0xE5, 0x3E, 0x5A, 0x41, 0x08, 0x8E, 0x8F, 0xF5, 0x37, 0xD1, 0x6A, 0x27, 0x59, 0x28, 0x28, 0x64, - 0xC2, 0x6E, 0x43, 0x8D, 0xBE, 0xCD, 0x84, 0xDD, 0x44, 0xEF, 0xBE, 0xBC, 0xF2, 0x65, 0x1D, 0x6C, 0xC9, 0xC5, 0x7D, 0x7E, 0xB9, - 0x3D, 0x7A, 0xF5, 0x78, 0x44, 0xB4, 0x59, 0x7D, 0x0B, 0x83, 0x9F, 0xF2, 0x04, 0xC7, 0xC7, 0xB9, 0xEC, 0x0C, 0x6F, 0xA0, 0x91, - 0x53, 0x5D, 0x4E, 0x6C, 0x06, 0xA3, 0x40, 0xED, 0x9A, 0x70, 0xAE, 0xEF, 0xE4, 0x59, 0xDB, 0x15, 0x49, 0x3B, 0xDF, 0x6C, 0x8A, - 0x32, 0xBB, 0x93, 0xE5, 0x1E, 0x17, 0xAC, 0x44, 0x9B, 0x65, 0x89, 0xBE, 0x8F, 0x3B, 0xCE, 0x55, 0x97, 0x87, 0x71, 0xD5, 0xA4, - 0x10, 0x87, 0xD6, 0x6C, 0x11, 0x1D, 0xF5, 0x64, 0xDA, 0x6B, 0x10, 0xA3, 0xF9, 0x51, 0x76, 0x7A, 0x63, 0x24, 0x73, 0x75, 0xE6, - 0x5B, 0x50, 0xB7, 0x6A, 0x89, 0x6F, 0x60, 0xB3, 0x32, 0xDB, 0xD0, 0xDC, 0x7A, 0x63, 0x24, 0x74, 0xAA, 0x92, 0x82, 0x83, 0xB0, - 0x38, 0x1D, 0x66, 0xE9, 0xCF, 0x76, 0x06, 0xBF, 0x1E, 0x4F, 0x7B, 0x99, 0xF4, 0x83, 0xD4, 0x1A, 0x56, 0x24, 0x83, 0x19, 0x63, - 0x7A, 0xC5, 0x8C, 0x63, 0xE5, 0x11, 0xC3, 0x32, 0x13, 0xB8, 0x7A, 0x2C, 0x92, 0x76, 0x71, 0xF1, 0x90, 0xE2, 0xA9, 0x79, 0xBA, - 0x40, 0x1B, 0x04, 0xCE, 0x40, 0xE4, 0xFD, 0x01, 0x22, 0x11, 0xB0, 0x09, 0x1C, 0x59, 0x02, 0xFF, 0x70, 0xD2, 0x4B, 0x23, 0xA2, - 0x38, 0xEE, 0xED, 0x82, 0x0B, 0x9F, 0xC2, 0x5B, 0x6A, 0xC7, 0xB4, 0x14, 0xF6, 0x55, 0x6E, 0x85, 0xEF, 0xE8, 0x13, 0xD4, 0x90, - 0x71, 0x51, 0x15, 0xDB, 0xE6, 0x77, 0x8C, 0x80, 0xF9, 0x08, 0x19, 0x1A, 0x1D, 0x1A, 0xD1, 0xBA, 0xCC, 0xC9, 0x0C, 0x21, 0x90, - 0x7C, 0x11, 0x03, 0xC8, 0xE3, 0x15, 0x41, 0x0D, 0x9B, 0xCC, 0x51, 0xB0, 0x11, 0x60, 0xB0, 0xC3, 0x23, 0x74, 0x9A, 0x53, 0xD2, - 0xED, 0x43, 0xF8, 0xBF, 0x1B, 0xD2, 0x40, 0xC2, 0xC7, 0x8F, 0x7A, 0xE5, 0xCB, 0x17, 0x20, 0x60, 0x83, 0x3C, 0xC5, 0x8F, 0xAB, - 0x30, 0x84, 0x2C, 0x8A, 0x3E, 0x51, 0x2E, 0xBC, 0x99, 0x1F, 0xD5, 0x21, 0x13, 0x9D, 0x20, 0x66, 0xF6, 0x09, 0x5D, 0x0A, 0xAC, - 0x57, 0x7A, 0x4F, 0xDA, 0x43, 0xE1, 0x53, 0xE1, 0xA3, 0xB3, 0xB3, 0x35, 0x10, 0xC9, 0x39, 0x7D, 0x06, 0xA2, 0x88, 0x71, 0xF1, - 0x1E, 0x86, 0x22, 0x86, 0x86, 0x0F, 0x4C, 0x82, 0x90, 0x72, 0xD4, 0x93, 0x8F, 0xE4, 0x01, 0x7C, 0xB0, 0x9C, 0x71, 0x0D, 0xC5, - 0x1D, 0x75, 0x2C, 0x6F, 0x86, 0xC3, 0x60, 0xA7, 0x3D, 0x76, 0x72, 0x8E, 0xEF, 0x7B, 0x1E, 0x21, 0x03, 0xC0, 0x62, 0xEA, 0x78, - 0xDE, 0x2C, 0x57, 0x1A, 0xE5, 0x72, 0x2A, 0x27, 0x8F, 0xE9, 0x23, 0xDB, 0xCF, 0x11, 0x23, 0x90, 0x24, 0xE4, 0xAC, 0x63, 0xA4, - 0x03, 0x22, 0x41, 0x42, 0xC8, 0xEE, 0xFD, 0x00, 0x9A, 0x19, 0x90, 0x0C, 0x84, 0xE7, 0xF4, 0x51, 0x72, 0xC9, 0xE5, 0x1C, 0x8D, - 0x29, 0xB5, 0x41, 0xC5, 0x36, 0xB6, 0x8A, 0xA7, 0xB0, 0x35, 0x27, 0xB7, 0x70, 0x13, 0x5B, 0x3C, 0xBD, 0x42, 0x94, 0xDC, 0x2D, - 0x1B, 0x03, 0xF3, 0x89, 0xF5, 0xC8, 0xCD, 0x85, 0x18, 0x8D, 0xF4, 0xC1, 0x97, 0xC1, 0x06, 0x9F, 0xDC, 0xCD, 0xD0, 0xE6, 0xA1, - 0xD8, 0x8F, 0x01, 0xC5, 0xB8, 0xC5, 0x9B, 0x6B, 0x25, 0x45, 0x0B, 0xC3, 0xB6, 0x93, 0xF3, 0x9C, 0xF0, 0x6E, 0xA7, 0xC7, 0x1D, - 0x6A, 0x37, 0x54, 0xCB, 0x00, 0x43, 0x2C, 0x50, 0xA8, 0x12, 0xCC, 0x26, 0x40, 0x8F, 0x28, 0x2A, 0xDD, 0xDF, 0x04, 0xE4, 0x07, - 0x11, 0x68, 0x10, 0x0F, 0x6E, 0x93, 0x34, 0x46, 0x9C, 0x02, 0xB7, 0xC6, 0x6B, 0x07, 0x3A, 0x48, 0xC8, 0x68, 0x87, 0xD7, 0x0D, - 0xA3, 0x04, 0x23, 0x74, 0xF0, 0x33, 0xC6, 0x28, 0x0F, 0x8D, 0x38, 0xD5, 0xC9, 0x02, 0xD5, 0xA7, 0x2A, 0x97, 0x4E, 0x16, 0xE8, - 0xFF, 0xE9, 0x63, 0xB6, 0x08, 0x53, 0x77, 0x83, 0xBC, 0x09, 0xA6, 0x58, 0xF2, 0x10, 0x7C, 0x7D, 0x8B, 0x2F, 0x7B, 0x69, 0x2B, - 0x62, 0xE8, 0x28, 0x66, 0xCB, 0x14, 0xC2, 0x3E, 0x85, 0xEF, 0xA1, 0x3B, 0x66, 0xF6, 0x1D, 0x5D, 0x09, 0x12, 0x65, 0xFC, 0xCC, - 0x50, 0xA4, 0x31, 0x96, 0x25, 0x88, 0x20, 0x6A, 0xA6, 0x4B, 0xC3, 0x74, 0x64, 0x6D, 0xAA, 0x72, 0x8E, 0x0D, 0xC6, 0xB7, 0xDD, - 0x3E, 0x77, 0xEA, 0xC7, 0x36, 0xBE, 0x7F, 0x40, 0x84, 0xF3, 0x7A, 0x1D, 0xBB, 0xEB, 0x71, 0x8B, 0x7E, 0xB4, 0xB8, 0xF6, 0xDA, - 0x02, 0xA4, 0x11, 0x05, 0x5C, 0x33, 0x96, 0x12, 0x19, 0x90, 0x85, 0x06, 0x66, 0x83, 0x62, 0x02, 0xB7, 0xE6, 0x71, 0xFA, 0x45, - 0x89, 0xC0, 0x53, 0x87, 0xB0, 0x43, 0x74, 0x5A, 0x6F, 0xF3, 0x07, 0x28, 0xA8, 0x37, 0x92, 0x8E, 0x78, 0x4C, 0xB3, 0x3E, 0x01, - 0x95, 0xD3, 0x41, 0xDC, 0x31, 0x1D, 0xA5, 0x8C, 0xD3, 0x46, 0xEF, 0x33, 0x8C, 0x4E, 0xD2, 0x93, 0x18, 0x9F, 0x50, 0x13, 0xE5, - 0x3B, 0x98, 0xA0, 0xF7, 0x7F, 0x4C, 0xC8, 0x9B, 0xFF, 0xF2, 0x20, 0x78, 0x85, 0x73, 0x3A, 0xEC, 0xBC, 0xC9, 0x8D, 0xB8, 0xBC, - 0x63, 0x4C, 0x53, 0xA7, 0x52, 0x23, 0x64, 0xD5, 0x14, 0xD4, 0x38, 0xF6, 0x0E, 0xF8, 0xC9, 0x2E, 0x8C, 0xD2, 0x21, 0x33, 0x7F, - 0x71, 0xD2, 0x2D, 0xA3, 0x47, 0x65, 0xA2, 0xAC, 0xD6, 0xDD, 0x85, 0x79, 0x13, 0x2D, 0x97, 0x4F, 0xD3, 0x72, 0x6E, 0xD1, 0x72, - 0x6E, 0xD3, 0x32, 0x99, 0x3B, 0x9D, 0x54, 0x8C, 0x5B, 0xF1, 0xE7, 0x26, 0x5F, 0x6E, 0x5C, 0x6D, 0xD1, 0x9F, 0xCF, 0x4E, 0xB8, - 0x32, 0x74, 0x72, 0xED, 0x7E, 0xD4, 0xBF, 0x82, 0x08, 0x1D, 0x93, 0x8F, 0x08, 0x04, 0x31, 0xDC, 0x98, 0x5D, 0x3E, 0x7C, 0x95, - 0xF9, 0x7F, 0x6B, 0x5A, 0x8D, 0x0B, 0x68, 0xD5, 0xCD, 0x47, 0x09, 0x93, 0x9F, 0xC6, 0xEF, 0x55, 0xCB, 0x88, 0x19, 0x91, 0x28, - 0xB7, 0x9E, 0xB9, 0x6C, 0x1A, 0xB0, 0xE1, 0x16, 0x3D, 0xBB, 0x97, 0xDC, 0x74, 0xFA, 0x68, 0xD9, 0xEB, 0x87, 0xFD, 0x1D, 0xEC, - 0x98, 0x0D, 0x78, 0xE0, 0x1A, 0x43, 0x23, 0x0E, 0x4A, 0x0B, 0x07, 0x66, 0x31, 0x72, 0x05, 0x91, 0x47, 0x42, 0x20, 0x4C, 0x57, - 0x90, 0x20, 0xC4, 0xE4, 0xBF, 0x8D, 0x05, 0xF9, 0x09, 0x54, 0x28, 0x28, 0xB6, 0x75, 0x2F, 0xE8, 0x59, 0x78, 0x3F, 0x2D, 0x37, - 0x2B, 0x2D, 0x76, 0x76, 0x77, 0x95, 0x55, 0x24, 0x94, 0xA9, 0xA3, 0xAE, 0x63, 0x8A, 0x80, 0xC9, 0x76, 0x5D, 0x40, 0xEF, 0x1C, - 0xDB, 0x5F, 0x7D, 0xF9, 0x56, 0xA4, 0xEC, 0xBD, 0x3E, 0xA4, 0xF6, 0xF0, 0xAA, 0xAD, 0xBB, 0xE7, 0x9A, 0x63, 0x60, 0x21, 0x17, - 0xA8, 0xAC, 0xD4, 0xE2, 0xFB, 0x6F, 0x0B, 0xF6, 0x6C, 0x4B, 0x31, 0xAB, 0x0A, 0xFD, 0xAE, 0xC4, 0x76, 0xCF, 0xA9, 0x20, 0x08, - 0xAA, 0x16, 0x2F, 0x33, 0xE8, 0x49, 0x95, 0x7A, 0x20, 0x99, 0xDF, 0x8D, 0x7B, 0xB8, 0x2A, 0xE6, 0x52, 0xCB, 0x3A, 0xF9, 0xB0, - 0x0E, 0x3E, 0xBE, 0xBB, 0x5B, 0x97, 0x0F, 0x2D, 0xEE, 0xCC, 0xDE, 0x12, 0x87, 0xA4, 0x68, 0xF9, 0xE8, 0x72, 0xE3, 0x44, 0x54, - 0x58, 0xE7, 0x0B, 0xBE, 0xA7, 0x7A, 0x45, 0x92, 0x7C, 0xB6, 0x2D, 0xC2, 0xE4, 0x30, 0x95, 0x51, 0x54, 0x8E, 0x2E, 0xE8, 0x1E, - 0x56, 0x03, 0xD0, 0x64, 0x69, 0x74, 0x11, 0x84, 0xBC, 0x5D, 0xDC, 0x64, 0x1B, 0x58, 0x6A, 0xE0, 0xE9, 0x49, 0x86, 0xEA, 0x3E, - 0x26, 0x4E, 0x43, 0x83, 0xC0, 0xD4, 0xB8, 0x4A, 0xF1, 0xE1, 0xD6, 0xD9, 0x64, 0x6E, 0x35, 0x43, 0x07, 0x38, 0xAD, 0xF5, 0xC2, - 0xCF, 0x57, 0x45, 0x27, 0xA6, 0x6E, 0x58, 0xF2, 0x5F, 0x7B, 0xAA, 0xAA, 0x53, 0x5A, 0x51, 0x5B, 0xE9, 0xAA, 0x64, 0x37, 0x29, - 0x3B, 0x32, 0x1F, 0x07, 0x27, 0xBF, 0x51, 0x7F, 0x97, 0xC8, 0x12, 0xB0, 0x2A, 0xD7, 0x0B, 0xD4, 0xF0, 0x95, 0xB6, 0x69, 0x54, - 0xC1, 0xDF, 0xC1, 0x1E, 0x38, 0x6A, 0x87, 0xC1, 0x3C, 0x8C, 0xCB, 0xB0, 0xCF, 0x5F, 0x23, 0xAB, 0xE4, 0x3A, 0x16, 0x25, 0x07, - 0x64, 0xBB, 0xDD, 0x23, 0x2F, 0xBA, 0x36, 0xE1, 0x03, 0x56, 0xF6, 0x73, 0x79, 0x58, 0x8D, 0x0C, 0x79, 0xFF, 0x6A, 0x2D, 0x98, - 0x9B, 0x30, 0x34, 0x35, 0x17, 0xA3, 0x92, 0xBC, 0x1D, 0xF4, 0xFF, 0x6F, 0x14, 0x0F, 0xF0, 0xE5, 0xD3, 0x2D, 0x75, 0x8C, 0x89, - 0x13, 0x5F, 0xF1, 0xAE, 0x8E, 0x58, 0xC2, 0xFA, 0x00, 0xD7, 0xC7, 0xE7, 0x92, 0xF0, 0x03, 0xC3, 0x27, 0xD4, 0x08, 0x46, 0x9E, - 0xB3, 0x07, 0x13, 0x83, 0xB3, 0x1B, 0x9B, 0xDB, 0x78, 0xCF, 0xFA, 0xFE, 0x14, 0x14, 0x28, 0x0D, 0x06, 0x94, 0x67, 0x83, 0x29, - 0xE8, 0x58, 0x6F, 0x75, 0xF8, 0x15, 0x0F, 0x62, 0xE2, 0x68, 0x73, 0x51, 0x1B, 0x06, 0x39, 0x14, 0x07, 0x13, 0x5F, 0x97, 0xC0, - 0x94, 0x5A, 0x31, 0x90, 0x59, 0x84, 0x96, 0x63, 0x15, 0x43, 0xF5, 0xDE, 0xE3, 0x26, 0x00, 0x8F, 0x6E, 0x5F, 0x62, 0xAA, 0x38, - 0xFD, 0xC6, 0xA3, 0x9F, 0xA6, 0x5E, 0xB9, 0x65, 0x6B, 0xE2, 0xDB, 0xEB, 0x45, 0x1B, 0xCB, 0x89, 0xBF, 0x85, 0xBA, 0x3E, 0x91, - 0x3E, 0xB6, 0x8F, 0x1F, 0x07, 0xB4, 0xAF, 0x3C, 0xA6, 0x03, 0xB9, 0x98, 0x54, 0x27, 0xB6, 0xE1, 0xB8, 0xDA, 0x91, 0xAC, 0x48, - 0x9D, 0xC9, 0x1F, 0xB2, 0xC3, 0xFD, 0x46, 0x4E, 0xBC, 0x6F, 0x2A, 0x37, 0x03, 0xA2, 0x3F, 0xBE, 0x4F, 0x0A, 0xE9, 0xB5, 0x6E, - 0x2E, 0xEB, 0xEE, 0x35, 0x97, 0x35, 0xB2, 0x4B, 0x2D, 0xC8, 0x88, 0xF3, 0xA1, 0x23, 0x52, 0x4E, 0xCD, 0x3B, 0xDF, 0xB4, 0x20, - 0xDD, 0x44, 0xF9, 0xB7, 0x36, 0x07, 0x63, 0x54, 0x95, 0x8D, 0x61, 0x07, 0x23, 0x26, 0x2F, 0x6D, 0x39, 0x68, 0x19, 0x2A, 0xBF, - 0x69, 0x14, 0x0B, 0xA3, 0xB0, 0x1C, 0x88, 0xC3, 0xA2, 0xB8, 0xAB, 0xAC, 0xE4, 0x47, 0x87, 0x29, 0xB1, 0xFB, 0x34, 0xC2, 0x44, - 0x59, 0xD9, 0x51, 0xF3, 0xC2, 0xD4, 0x7D, 0x29, 0x79, 0x29, 0x29, 0x6F, 0x5B, 0x48, 0x3C, 0x2D, 0x6E, 0xAA, 0x90, 0xAF, 0xBE, - 0x55, 0x99, 0x76, 0xB0, 0xAB, 0x1B, 0x1D, 0x01, 0xDE, 0x4F, 0xDB, 0x12, 0x9D, 0x56, 0xCD, 0xE0, 0xB3, 0x9B, 0x7A, 0xCD, 0xE7, - 0x2C, 0x75, 0x34, 0x28, 0x11, 0xC1, 0x59, 0x9C, 0x3A, 0x72, 0xD1, 0xE5, 0x97, 0xE5, 0x12, 0x14, 0x84, 0xD0, 0x94, 0x63, 0xDA, - 0x66, 0x4E, 0x20, 0xCC, 0xC6, 0xB7, 0xCA, 0x6C, 0xBC, 0xDC, 0x67, 0x36, 0xE6, 0xB8, 0xB5, 0xCD, 0xAE, 0xEA, 0xF2, 0x93, 0x95, - 0x5C, 0x88, 0x27, 0x8D, 0xCC, 0xB4, 0x92, 0x8B, 0xD7, 0x18, 0xF4, 0x29, 0x06, 0x3A, 0xC9, 0x13, 0x24, 0x55, 0xAB, 0x84, 0x12, - 0x29, 0x9E, 0x28, 0xF3, 0x33, 0x39, 0x2D, 0x36, 0x95, 0x20, 0xCB, 0x3E, 0x39, 0x9B, 0x00, 0x31, 0x6A, 0xEA, 0x46, 0xB2, 0x54, - 0x9A, 0x4C, 0x4A, 0x8F, 0xDC, 0xD2, 0xAA, 0x55, 0xD6, 0x34, 0x97, 0xB4, 0x6C, 0x1E, 0x81, 0x36, 0xCB, 0x50, 0x9E, 0xBD, 0xF4, - 0xAC, 0x3B, 0x64, 0x12, 0x43, 0x63, 0x49, 0x99, 0x32, 0x6C, 0x80, 0x5A, 0x47, 0xA7, 0x9A, 0x8D, 0x78, 0x81, 0x7D, 0xEE, 0x95, - 0xC6, 0x1F, 0x93, 0x9B, 0x18, 0x66, 0xA2, 0x73, 0x2D, 0xFD, 0x8F, 0x0F, 0xDD, 0x98, 0x9B, 0xA0, 0xC0, 0x11, 0xB6, 0xAE, 0xA1, - 0x09, 0xC0, 0x52, 0x6B, 0x91, 0xB1, 0x82, 0x14, 0x61, 0xFE, 0x2E, 0x23, 0x64, 0xB2, 0x96, 0xEA, 0xA9, 0x75, 0xCF, 0xAE, 0x5B, - 0xF1, 0x3A, 0x09, 0x41, 0x4F, 0x66, 0xAD, 0xDB, 0xB2, 0x5C, 0x17, 0xE3, 0xD3, 0xD3, 0x05, 0x5E, 0x59, 0x42, 0x7E, 0xDD, 0xB9, - 0xCB, 0xFE, 0x4A, 0x56, 0xAB, 0xB8, 0x93, 0xE5, 0x37, 0xA7, 0x2C, 0x3D, 0xF9, 0xED, 0xCD, 0xE9, 0x22, 0x9B, 0x17, 0xA7, 0xFF, - 0xC9, 0xAE, 0x4F, 0xBF, 0xFA, 0xF5, 0x07, 0xFC, 0xFB, 0x4E, 0x79, 0x4D, 0xBF, 0x83, 0x14, 0x8F, 0x2B, 0xAD, 0x14, 0xF8, 0xE2, - 0xB2, 0xCA, 0xF6, 0x14, 0xF2, 0x39, 0x96, 0xC8, 0x8A, 0x6D, 0x6B, 0x5E, 0x22, 0xFE, 0xC5, 0x47, 0xA2, 0x6E, 0x9B, 0x20, 0x73, - 0x5B, 0x13, 0x33, 0x19, 0xB3, 0x5C, 0xB2, 0xF8, 0x5C, 0xEC, 0x3C, 0x4F, 0xAE, 0x41, 0xC9, 0xB3, 0x10, 0x43, 0x2B, 0xAC, 0xF0, - 0xF1, 0xA4, 0xDC, 0xEC, 0x4E, 0x34, 0xF0, 0x36, 0x13, 0x1D, 0x1A, 0xBD, 0x05, 0x35, 0xC2, 0xC7, 0xD8, 0x9C, 0x66, 0xE5, 0x1B, - 0x56, 0x8A, 0x57, 0xB3, 0xFC, 0x4A, 0xD1, 0xC0, 0x5E, 0x1D, 0x59, 0x58, 0xA9, 0x66, 0x53, 0x75, 0xE1, 0x9B, 0xA5, 0x6D, 0x4D, - 0xD4, 0x1E, 0xCF, 0xCF, 0x59, 0x99, 0x2C, 0x93, 0x79, 0xCC, 0xAF, 0x0A, 0x3A, 0x38, 0x72, 0xD7, 0xAA, 0x6C, 0x6E, 0x73, 0xF8, - 0x7C, 0xC1, 0xF3, 0x77, 0x97, 0x06, 0xE2, 0xB2, 0x37, 0x17, 0xBE, 0xDA, 0xF4, 0x96, 0x51, 0x39, 0xE5, 0x6B, 0x5C, 0xA7, 0xDD, - 0xAA, 0x5E, 0xAD, 0x34, 0xD7, 0x86, 0x49, 0x9E, 0x7C, 0xE2, 0xD2, 0xD4, 0xA0, 0xD5, 0x56, 0xA7, 0xB5, 0xD1, 0x05, 0x78, 0x63, - 0xD6, 0x6D, 0xF1, 0xB0, 0xD5, 0x69, 0x9B, 0xF2, 0xFE, 0x3E, 0x50, 0xCA, 0x1E, 0x85, 0xFA, 0xF0, 0x9C, 0xAD, 0x56, 0x04, 0x8C, - 0x2D, 0x22, 0xD4, 0xEB, 0xF9, 0x14, 0x88, 0x44, 0x88, 0x34, 0x15, 0x93, 0x85, 0xF2, 0x13, 0x61, 0x3A, 0x42, 0x05, 0x0F, 0xA9, - 0x84, 0x31, 0x82, 0xCC, 0x8D, 0xE2, 0x55, 0xF7, 0x92, 0x84, 0x13, 0x60, 0x93, 0x2E, 0x13, 0x88, 0x4D, 0xAA, 0xFE, 0x3E, 0xFE, - 0x1D, 0x04, 0x56, 0xB3, 0xC7, 0xC7, 0x66, 0x7B, 0x55, 0xFD, 0xBB, 0x7A, 0x61, 0x1D, 0x86, 0xF2, 0x09, 0xD2, 0x8F, 0x8D, 0x52, - 0x0B, 0x07, 0x6E, 0x2A, 0xB5, 0x2D, 0x40, 0xEA, 0xA8, 0x19, 0x77, 0xD8, 0x4B, 0x03, 0x5C, 0xE7, 0x1E, 0xC6, 0xE3, 0x7E, 0xFD, - 0x07, 0x1E, 0xAC, 0xA1, 0x0F, 0x62, 0x05, 0xF1, 0x15, 0x44, 0x31, 0xFE, 0xFC, 0x34, 0x6F, 0x9E, 0xB7, 0xCC, 0x63, 0x82, 0xF3, - 0xFA, 0x5A, 0x2F, 0x88, 0xE4, 0x9B, 0x0C, 0x61, 0xF9, 0xB9, 0xC6, 0x6F, 0x83, 0xD2, 0x80, 0x88, 0x2A, 0xA7, 0xE5, 0xA0, 0x5E, - 0x12, 0xF5, 0x33, 0x7A, 0x52, 0xB4, 0x2A, 0xB5, 0x2F, 0x93, 0x15, 0xB4, 0x59, 0x70, 0x45, 0x23, 0x7A, 0x14, 0x3F, 0xC7, 0xD3, - 0x47, 0xC1, 0xB9, 0xE0, 0xD3, 0x3B, 0xBB, 0x8E, 0x7B, 0xD7, 0xFD, 0xDE, 0xC5, 0x49, 0x6F, 0x14, 0x5F, 0x9C, 0x0C, 0xCF, 0x7A, - 0xCB, 0x93, 0x97, 0x4B, 0xF8, 0x1A, 0x2D, 0xE6, 0x31, 0xEB, 0x9F, 0x0F, 0x58, 0xBC, 0x44, 0xD7, 0xE7, 0x19, 0xDE, 0x6E, 0x36, - 0xF6, 0x06, 0x89, 0x22, 0xC7, 0x46, 0xD8, 0xA9, 0x6F, 0x09, 0x7F, 0x1F, 0x4F, 0x46, 0x8B, 0x0D, 0xE8, 0xA9, 0xEE, 0x0C, 0x0A, - 0x41, 0xCD, 0xAB, 0xBD, 0x60, 0x2B, 0xE2, 0x15, 0xD4, 0x20, 0xDE, 0xEA, 0x6A, 0x7B, 0x61, 0x0B, 0x06, 0x89, 0xE6, 0xBD, 0x32, - 0x93, 0x82, 0x00, 0x48, 0xAB, 0xF7, 0x5E, 0x20, 0x2C, 0x45, 0x92, 0x30, 0x60, 0xCC, 0x65, 0x47, 0x2D, 0xEB, 0xCF, 0xC4, 0xA7, - 0x25, 0xEC, 0x6E, 0x07, 0xD7, 0x52, 0x8E, 0xD4, 0xD8, 0xC6, 0xD4, 0x20, 0x2B, 0xD0, 0xB1, 0xF2, 0xD7, 0x3C, 0xB9, 0x8B, 0xF3, - 0x07, 0x59, 0xF0, 0xB0, 0x79, 0xFE, 0xDB, 0x03, 0xD1, 0xA0, 0x3D, 0x3D, 0x86, 0xEA, 0x9E, 0x2A, 0x16, 0xE0, 0x1E, 0x91, 0xD4, - 0x18, 0x5E, 0x65, 0xF1, 0x7A, 0xCB, 0xF3, 0xD1, 0xFC, 0xFC, 0x6C, 0xD1, 0x3F, 0xE9, 0xF5, 0x5F, 0xB2, 0x93, 0xE1, 0x22, 0x5E, - 0x9C, 0xC4, 0xBD, 0xC5, 0xE2, 0xE4, 0xFC, 0xE2, 0xEC, 0xAC, 0xD7, 0x1F, 0x0E, 0xBB, 0x3D, 0x76, 0xEE, 0x55, 0x34, 0x15, 0xDB, - 0x39, 0x5A, 0x1B, 0x70, 0x57, 0x0F, 0xAD, 0x1B, 0xB4, 0x7A, 0x5A, 0x5D, 0xB4, 0x2A, 0xBE, 0xD1, 0xCD, 0x60, 0x4A, 0x87, 0x88, - 0x26, 0xA1, 0x79, 0xCF, 0x28, 0x2E, 0xAE, 0xE3, 0xFE, 0xF5, 0x7C, 0xDE, 0x3F, 0x61, 0xAC, 0xDB, 0x3F, 0x19, 0xC6, 0xA3, 0xD1, - 0x49, 0x3C, 0x1A, 0xF4, 0x4E, 0xE6, 0xA3, 0xFE, 0x68, 0x3E, 0x62, 0xC3, 0xD1, 0x70, 0x31, 0xFA, 0x7F, 0x30, 0x8A, 0xBA, 0x58, - 0xBF, 0x67, 0x0C, 0x6C, 0xF1, 0x72, 0x11, 0xF7, 0x2E, 0xE6, 0x27, 0xF1, 0x45, 0xB7, 0x7B, 0x32, 0x5C, 0x9E, 0x9D, 0x9D, 0xC4, - 0x67, 0xE7, 0xDD, 0x93, 0x38, 0x3E, 0x1F, 0x0D, 0xCF, 0xD9, 0x60, 0x38, 0x1C, 0x0D, 0xFE, 0x65, 0x63, 0xF8, 0x0C, 0xF4, 0x5C, - 0x21, 0x53, 0x37, 0x5D, 0x4B, 0x5F, 0x95, 0xBD, 0xE2, 0xDF, 0xA3, 0xB1, 0x5F, 0x39, 0xD1, 0x8A, 0x51, 0x6C, 0xF2, 0xD2, 0xAC, - 0x54, 0xF8, 0xFB, 0xA6, 0xC1, 0xE1, 0xBF, 0x63, 0xA3, 0x8A, 0x7C, 0x4A, 0xE6, 0xB6, 0x2B, 0x0F, 0xDF, 0xD7, 0x2B, 0xC0, 0x59, - 0xEE, 0x3C, 0xCD, 0x0C, 0x13, 0x6A, 0xE1, 0x81, 0x80, 0x06, 0xAF, 0x05, 0x7D, 0x25, 0x1F, 0xE9, 0x7A, 0x11, 0xA8, 0xD3, 0x4F, - 0xC9, 0xF2, 0x8F, 0x86, 0xB4, 0xEE, 0x80, 0x1D, 0x79, 0x2A, 0xEE, 0x4C, 0x2C, 0xAF, 0x5B, 0x33, 0x0C, 0xB8, 0xB5, 0x44, 0x6A, - 0x42, 0xBD, 0x73, 0x0F, 0x8C, 0x07, 0xB8, 0x6C, 0x24, 0xB5, 0xEA, 0x80, 0xCC, 0xC3, 0x01, 0xB3, 0x20, 0x13, 0xBB, 0x9F, 0xF3, - 0xB4, 0x49, 0x13, 0x59, 0x23, 0xE6, 0xC8, 0xA4, 0xE3, 0x18, 0x81, 0xB2, 0xEB, 0x54, 0xCD, 0x3D, 0x86, 0xA4, 0xDD, 0x20, 0x8E, - 0x4B, 0x43, 0x5C, 0xD5, 0xDE, 0x05, 0x1A, 0x05, 0x91, 0x62, 0x25, 0x74, 0xA2, 0x78, 0xDA, 0x07, 0x07, 0x41, 0x86, 0x84, 0x96, - 0x94, 0x1E, 0x13, 0x10, 0x6D, 0x52, 0x7D, 0x85, 0xA1, 0x50, 0xB1, 0xD9, 0xD5, 0xEB, 0xB0, 0x18, 0x31, 0xAE, 0x21, 0xE6, 0x1E, - 0xC6, 0xB8, 0x29, 0xC3, 0xFE, 0x97, 0xB2, 0xFD, 0x1D, 0x48, 0xE4, 0x6C, 0x80, 0x31, 0xBF, 0x77, 0xFE, 0x20, 0xEC, 0x57, 0x40, - 0xB1, 0x97, 0x80, 0x44, 0x81, 0xA9, 0xC2, 0xED, 0x8C, 0x29, 0xB5, 0x82, 0xAC, 0xEC, 0xEC, 0x9F, 0x9F, 0xB6, 0x9A, 0x5D, 0x24, - 0xD4, 0xC2, 0xEB, 0xC5, 0x20, 0x02, 0xC0, 0x7E, 0xAF, 0x84, 0x7A, 0x0F, 0xFD, 0xA8, 0x95, 0xEB, 0xDE, 0xEA, 0x30, 0x1B, 0xCC, - 0x26, 0x5F, 0x55, 0x0D, 0x30, 0x05, 0x9B, 0x6F, 0x60, 0x79, 0x30, 0xDE, 0x85, 0x88, 0xD8, 0x80, 0x2E, 0xF5, 0x7C, 0x49, 0x33, - 0xC0, 0x37, 0x22, 0x55, 0x5D, 0x85, 0x56, 0xDE, 0x71, 0x55, 0x7B, 0x08, 0x19, 0x43, 0xC2, 0x3C, 0xEA, 0xB1, 0xA1, 0xF0, 0x2B, - 0x23, 0xBB, 0xC8, 0x91, 0xC3, 0x2E, 0xA2, 0x6C, 0xA3, 0xFB, 0xFA, 0xAF, 0x9C, 0x3A, 0xE4, 0x2B, 0xF9, 0x22, 0x90, 0xF0, 0xB1, - 0xCC, 0x22, 0xAE, 0x3C, 0x4D, 0x3C, 0x69, 0x5D, 0xF0, 0xC6, 0xF4, 0x89, 0x5F, 0x7A, 0xB8, 0x59, 0x9B, 0x59, 0x4E, 0xB5, 0x07, - 0x6A, 0xB6, 0x52, 0xDB, 0x76, 0x22, 0x00, 0x08, 0x4D, 0xFE, 0x12, 0x6F, 0x78, 0xEA, 0x62, 0x26, 0x71, 0xE4, 0xA8, 0x1E, 0x1F, - 0xAA, 0xC8, 0xD9, 0xD1, 0x80, 0x9E, 0x69, 0xF9, 0xD9, 0x59, 0x8A, 0x72, 0xE3, 0x09, 0xFB, 0x93, 0x87, 0x90, 0x7B, 0x41, 0x7A, - 0x86, 0xC6, 0x7B, 0x39, 0x5F, 0xB1, 0x38, 0xB7, 0x91, 0xE4, 0x42, 0xA5, 0x34, 0xAF, 0x57, 0x59, 0xCB, 0x67, 0x53, 0x40, 0x6D, - 0xFD, 0xF3, 0x56, 0x47, 0x7F, 0xF3, 0x25, 0x85, 0xB4, 0xBD, 0xD3, 0x78, 0x9D, 0x9C, 0x7E, 0xEC, 0x9D, 0xE2, 0xFE, 0x25, 0xAF, - 0x5C, 0x62, 0x0C, 0xB1, 0x2A, 0x7B, 0x0D, 0xD9, 0x67, 0x56, 0x45, 0xF7, 0xAF, 0x81, 0x76, 0x3B, 0x7C, 0x9A, 0x79, 0x54, 0xA6, - 0xE8, 0x53, 0x94, 0xD5, 0x4F, 0x43, 0xD0, 0xAF, 0xBF, 0xBD, 0xF5, 0x42, 0xD4, 0x70, 0xD5, 0x5C, 0x99, 0x75, 0xC9, 0xE3, 0x90, - 0xE2, 0xB0, 0xE5, 0xC0, 0x82, 0xEC, 0x68, 0x92, 0x98, 0x3C, 0xE6, 0xB7, 0x4D, 0x78, 0xD7, 0x44, 0x18, 0x68, 0xA8, 0xBE, 0xA3, - 0xB7, 0xEB, 0xC7, 0x54, 0x62, 0x17, 0x18, 0x2F, 0x0C, 0x53, 0x6F, 0x63, 0xBB, 0x7C, 0x1D, 0x3C, 0x60, 0x78, 0x1C, 0x38, 0xD5, - 0x10, 0x01, 0x79, 0x4B, 0xAF, 0xAC, 0x17, 0xE3, 0x47, 0xB4, 0xF4, 0x03, 0x93, 0x2C, 0x4F, 0xC8, 0x9D, 0x75, 0xEC, 0x61, 0x48, - 0x4E, 0xB1, 0xA7, 0x9E, 0xFE, 0x79, 0x22, 0x2F, 0x1E, 0x7A, 0xBB, 0xF0, 0x3A, 0x5B, 0x3C, 0xD0, 0x05, 0x2B, 0x58, 0x48, 0xFD, - 0x2E, 0x3D, 0x27, 0x57, 0x09, 0xEF, 0x97, 0x74, 0x62, 0x83, 0xF6, 0xF0, 0x04, 0xB2, 0xC2, 0xEB, 0x71, 0x5E, 0x5A, 0x32, 0xD8, - 0xEF, 0x92, 0xB3, 0x6F, 0x3A, 0x56, 0x10, 0xF1, 0x00, 0xF1, 0xE4, 0xC9, 0x0C, 0x0A, 0x28, 0x91, 0xA8, 0x17, 0x89, 0x7F, 0x00, - 0x9B, 0x7C, 0x35, 0x08, 0x1A, 0xFC, 0x34, 0xE4, 0xC9, 0x80, 0x62, 0x0A, 0xFC, 0x0C, 0x99, 0x6E, 0xC2, 0x35, 0xFB, 0xA4, 0x1C, - 0x28, 0x25, 0x88, 0x4D, 0x67, 0x5D, 0xD9, 0x6A, 0x8C, 0x4D, 0x52, 0x1D, 0x56, 0x14, 0x7A, 0xA1, 0x12, 0x35, 0x17, 0x3B, 0x7E, - 0x79, 0xCE, 0xDA, 0xF4, 0x7C, 0xAE, 0x21, 0x32, 0x69, 0xBE, 0xE0, 0xAB, 0xFB, 0x36, 0x74, 0x36, 0xA8, 0xE2, 0x77, 0x32, 0xD1, - 0x94, 0xBD, 0x04, 0xDC, 0x6D, 0xAD, 0x0E, 0x6C, 0x0B, 0x14, 0xC3, 0x24, 0x5E, 0x59, 0xAD, 0xE1, 0xC5, 0x13, 0x23, 0x81, 0x35, - 0x8C, 0x53, 0x36, 0xB5, 0xA3, 0x6B, 0x4B, 0x0F, 0x91, 0xD7, 0xED, 0xF4, 0x3B, 0x5D, 0x6F, 0x37, 0xC3, 0x7D, 0xFA, 0xF2, 0xFF, - 0x07, 0x74, 0xD7, 0x2F, 0x4E, 0xB1, 0x4F, 0x01, 0x00, -}; - // Length of the binary data const int FAVICON_LENGTH = 2238; From 00eed206cb945647dc215515aa09a3c1b2831d28 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Thu, 22 Oct 2020 18:26:43 -0700 Subject: [PATCH 03/21] Update typo, import from js library --- data/static/basic.js | 51 +++++++++++++++++++++++++++++++++++ data/static/index.html.gz | Bin 75 -> 212 bytes data/static/meshtastic.js.gz | Bin 22464 -> 23599 bytes src/meshwifi/meshhttp.cpp | 2 +- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 data/static/basic.js diff --git a/data/static/basic.js b/data/static/basic.js new file mode 100644 index 000000000..38fd50781 --- /dev/null +++ b/data/static/basic.js @@ -0,0 +1,51 @@ +var meshtasticClient; +var connectionOne; + + +// run init when DOM is ready +document.addEventListener("DOMContentLoaded", function() { + + // Create new client instance + meshtasticClient = new meshtasticjs.Client; + +}); + + +// Important: the connect action must be called from a user interaction (e.g. button press), otherwise the browsers won't allow the connect +function connect() { + + // Create new connection + connectionOne = meshtasticClient.createBLEConnection(); + + // Add event listeners that get called when a new packet is received / state of device changes + connectionOne.addEventListener('dataPacket', function(packet) { console.log(packet)}); + connectionOne.addEventListener('userPacket', function(packet) { console.log(packet)}); + connectionOne.addEventListener('positionPacket', function(packet) { console.log(packet)}); + connectionOne.addEventListener('connected', function() { console.log('connected!')}); + connectionOne.addEventListener('disconnected', function() { console.log('disconnected!')}); + + // Connect to the device async, then send a text message + connectionOne.connect() + .then(result => { + + // This gets called when the connection has been established + // -> send a message over the mesh network. If no recipient node is provided, it gets sent as a broadcast + return connectionOne.sendText('meshtastic is awesome'); + + }) + .then(result => { + + // This gets called when the message has been sucessfully sent + console.log('Message sent!');}) + + .catch(error => { console.log(error); }); + +} + + + + + + + + diff --git a/data/static/index.html.gz b/data/static/index.html.gz index 56af1fcad025e8b80d20d43703ea9aa3a77684a1..4880f9cab18fbcb2e384ad21f7b10462ad4a11cf 100644 GIT binary patch literal 212 zcmV;_04x6=iwFpVFp^&c18Ht#Wq2-VbZu+^bx<*m0x=Bi_Z2=@cLkT0B1uEd8&K9U zY#^JUwL#+dWQjzBsAe=X){Ja_VkLcC877^xAM6T1Ifytcb#oSk9LmWd`k}cTq8|Y4 z%o>2Eun4Qen;th?d>NWFv$v+>uu4Kpx+=&*4vlEgL}q50G)SZWt)k_7$bZX^K|Z3^ ztaH{`V~vmAHQrQfffOB5Erm%BT|%gZa-z%I`29n_>lC!Y{=Eny-xIMl{jzOpRlTB- O*Pos{G623B89a4B88&- c{1PBPH&vk^F+Ek!Mjxn1@9*_vnhXpK0MRTNy#N3J diff --git a/data/static/meshtastic.js.gz b/data/static/meshtastic.js.gz index 9dc9aacd215ce22f0c20d7186d692db2536530f3..3f02faf026953e9b0acf38ff292acc1d806a2448 100644 GIT binary patch literal 23599 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 GRRI8P3Ti+A literal 22464 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 P!?yo7T>1}Vokalvg;gQw diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index eb90a8d3d..3577c9c0d 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -323,7 +323,7 @@ void handleStaticBrowse(HTTPRequest *req, HTTPResponse *res) } res->println("

    Upload new file

    "); - res->println("

    This interface is experemntal!

    "); + res->println("

    *** This interface is experimental ***

    "); res->println("

    This form allows you to upload files. Keep your filenames very short and files small. Big filenames and big " "files are a known problem.

    "); res->println("
    "); From 5981831bc045951fea2decf45675819815694e99 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Thu, 22 Oct 2020 18:43:54 -0700 Subject: [PATCH 04/21] Fixed typo. Updated js library. Update root file handler. Typo fixed. I placed the latest javascript library files into the static folder. Updated the root file handler to be able to serve both compressed and uncompressed files. --- data/static/index.html | 18 ++++++++++++++++++ data/static/index.html.gz | Bin 212 -> 0 bytes src/meshwifi/meshhttp.cpp | 33 ++++++++++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 data/static/index.html delete mode 100644 data/static/index.html.gz diff --git a/data/static/index.html b/data/static/index.html new file mode 100644 index 000000000..663203013 --- /dev/null +++ b/data/static/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/static/index.html.gz b/data/static/index.html.gz deleted file mode 100644 index 4880f9cab18fbcb2e384ad21f7b10462ad4a11cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmV;_04x6=iwFpVFp^&c18Ht#Wq2-VbZu+^bx<*m0x=Bi_Z2=@cLkT0B1uEd8&K9U zY#^JUwL#+dWQjzBsAe=X){Ja_VkLcC877^xAM6T1Ifytcb#oSk9LmWd`k}cTq8|Y4 z%o>2Eun4Qen;th?d>NWFv$v+>uu4Kpx+=&*4vlEgL}q50G)SZWt)k_7$bZX^K|Z3^ ztaH{`V~vmAHQrQfffOB5Erm%BT|%gZa-z%I`29n_>lC!Y{=Eny-xIMl{jzOpRlTB- O*Posprint("" + String(file.name()).substring(1) + ""); } else { - res->print("" + String(file.name()).substring(1) + ""); + res->print("" + String(file.name()).substring(1) + + ""); } res->println(""); res->println(""); @@ -699,9 +700,35 @@ void handleAPIv1ToRadio(HTTPRequest *req, HTTPResponse *res) void handleRoot(HTTPRequest *req, HTTPResponse *res) { res->setHeader("Content-Type", "text/html"); - res->setHeader("Content-Encoding", "gzip"); - File file = SPIFFS.open("/static/index.html.gz"); + std::string filename = "/static/index.html"; + std::string filenameGzip = "/static/index.html.gz"; + + if (!SPIFFS.exists(filename.c_str()) && !SPIFFS.exists(filenameGzip.c_str())) { + // Send "404 Not Found" as response, as the file doesn't seem to exist + res->setStatusCode(404); + res->setStatusText("Not found"); + res->println("404 Not Found"); + res->printf("

    File not found: %s

    \n", filename.c_str()); + return; + } + + // Try to open the file from SPIFFS + File file; + + if (SPIFFS.exists(filename.c_str())) { + file = SPIFFS.open(filename.c_str()); + if (!file.available()) { + DEBUG_MSG("File not available - %s\n", filename.c_str()); + } + + } else if (SPIFFS.exists(filenameGzip.c_str())) { + file = SPIFFS.open(filenameGzip.c_str()); + res->setHeader("Content-Encoding", "gzip"); + if (!file.available()) { + DEBUG_MSG("File not available\n"); + } + } // Read the file from SPIFFS and write it to the HTTP response body size_t length = 0; From 44aafd5b9ce5faf33a224fadc8018a365acfcb9e Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Mon, 26 Oct 2020 18:17:33 -0700 Subject: [PATCH 05/21] Update to basic.js and add mime types. --- data/static/basic.js | 56 +++++++++++++++++---------------------- src/meshwifi/meshhttp.cpp | 5 ++-- 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/data/static/basic.js b/data/static/basic.js index 38fd50781..5cbb8d72b 100644 --- a/data/static/basic.js +++ b/data/static/basic.js @@ -2,50 +2,42 @@ var meshtasticClient; var connectionOne; -// run init when DOM is ready -document.addEventListener("DOMContentLoaded", function() { - - // Create new client instance - meshtasticClient = new meshtasticjs.Client; - -}); - - // Important: the connect action must be called from a user interaction (e.g. button press), otherwise the browsers won't allow the connect function connect() { // Create new connection - connectionOne = meshtasticClient.createBLEConnection(); + var httpconn = new meshtasticjs.IHTTPConnection(); + + // Set connection params + let sslActive; + if (window.location.protocol === 'https:') { + sslActive = true; + } else { + sslActive = false; + } + let deviceIp = window.location.hostname; // Your devices IP here + // Add event listeners that get called when a new packet is received / state of device changes - connectionOne.addEventListener('dataPacket', function(packet) { console.log(packet)}); - connectionOne.addEventListener('userPacket', function(packet) { console.log(packet)}); - connectionOne.addEventListener('positionPacket', function(packet) { console.log(packet)}); - connectionOne.addEventListener('connected', function() { console.log('connected!')}); - connectionOne.addEventListener('disconnected', function() { console.log('disconnected!')}); + httpconn.addEventListener('fromRadio', function (packet) { console.log(packet) }); // Connect to the device async, then send a text message - connectionOne.connect() - .then(result => { + httpconn.connect(deviceIp, sslActive) + .then(result => { - // This gets called when the connection has been established - // -> send a message over the mesh network. If no recipient node is provided, it gets sent as a broadcast - return connectionOne.sendText('meshtastic is awesome'); + alert('device has been configured') + // This gets called when the connection has been established + // -> send a message over the mesh network. If no recipient node is provided, it gets sent as a broadcast + return httpconn.sendText('meshtastic is awesome'); - }) - .then(result => { + }) + .then(result => { - // This gets called when the message has been sucessfully sent - console.log('Message sent!');}) + // This gets called when the message has been sucessfully sent + console.log('Message sent!'); + }) - .catch(error => { console.log(error); }); + .catch(error => { console.log(error); }); } - - - - - - - diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index f03034184..fb4dc0593 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -69,8 +69,9 @@ uint32_t timeSpeedUp = 0; // We need to specify some content-type mapping, so the resources get delivered with the // right content type and are displayed correctly in the browser -char contentTypes[][2][32] = {{".txt", "text/plain"}, {".html", "text/html"}, {".js", "text/javascript"}, - {".png", "image/png"}, {".jpg", "image/jpg"}, {"", ""}}; +char contentTypes[][2][32] = {{".txt", "text/plain"}, {".html", "text/html"}, {".js", "text/javascript"}, + {".png", "image/png"}, {".jpg", "image/jpg"}, {".gz", "application/gzip"}, + {".gif", "image/gif"}, {".json", "application/json"}, {"", ""}}; void handleWebResponse() { From 951b4293c44fa87c2f302c90fa7a345c7e183111 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 6 Nov 2020 22:21:20 -0800 Subject: [PATCH 06/21] Set web cookie and web text editor. --- src/meshwifi/meshhttp.cpp | 157 +++++++++++++++++++++++++++++++++++++- src/meshwifi/meshhttp.h | 2 + 2 files changed, 157 insertions(+), 2 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index fb4dc0593..b9f462265 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -54,6 +54,7 @@ void handleHotspot(HTTPRequest *req, HTTPResponse *res); void handleFavicon(HTTPRequest *req, HTTPResponse *res); void handleRoot(HTTPRequest *req, HTTPResponse *res); void handleStaticBrowse(HTTPRequest *req, HTTPResponse *res); +void handleStaticPost(HTTPRequest *req, HTTPResponse *res); void handleStatic(HTTPRequest *req, HTTPResponse *res); void handle404(HTTPRequest *req, HTTPResponse *res); void handleFormUpload(HTTPRequest *req, HTTPResponse *res); @@ -229,6 +230,7 @@ void initWebServer() ResourceNode *nodeFavicon = new ResourceNode("/favicon.ico", "GET", &handleFavicon); ResourceNode *nodeRoot = new ResourceNode("/", "GET", &handleRoot); ResourceNode *nodeStaticBrowse = new ResourceNode("/static", "GET", &handleStaticBrowse); + ResourceNode *nodeStaticPOST = new ResourceNode("/static", "POST", &handleStaticPost); ResourceNode *nodeStatic = new ResourceNode("/static/*", "GET", &handleStatic); ResourceNode *node404 = new ResourceNode("", "GET", &handle404); ResourceNode *nodeFormUpload = new ResourceNode("/upload", "POST", &handleFormUpload); @@ -241,6 +243,7 @@ void initWebServer() secureServer->registerNode(nodeFavicon); secureServer->registerNode(nodeRoot); secureServer->registerNode(nodeStaticBrowse); + secureServer->registerNode(nodeStaticPOST); secureServer->registerNode(nodeStatic); secureServer->setDefaultNode(node404); secureServer->setDefaultNode(nodeFormUpload); @@ -255,6 +258,7 @@ void initWebServer() insecureServer->registerNode(nodeFavicon); insecureServer->registerNode(nodeRoot); insecureServer->registerNode(nodeStaticBrowse); + insecureServer->registerNode(nodeStaticPOST); insecureServer->registerNode(nodeStatic); insecureServer->setDefaultNode(node404); insecureServer->setDefaultNode(nodeFormUpload); @@ -294,11 +298,82 @@ void middlewareSpeedUp160(HTTPRequest *req, HTTPResponse *res, std::functionprintln("File Edited

    File Edited

    "); + + // The form is submitted with the x-www-form-urlencoded content type, so we need the + // HTTPURLEncodedBodyParser to read the fields. + // Note that the content of the file's content comes from a
    "); + res->println(""); + res->println(""); + res->println(""); + + return; + } + res->println("

    Upload new file

    "); res->println("

    *** This interface is experimental ***

    "); res->println("

    This form allows you to upload files. Keep your filenames very short and files small. Big filenames and big " @@ -339,6 +455,15 @@ void handleStaticBrowse(HTTPRequest *req, HTTPResponse *res) res->println(""); res->println(""); + res->println(""); + res->println(""); + res->println(""); + res->println(""); + res->println(""); + File file = root.openNextFile(); while (file) { String filePath = String(file.name()); @@ -360,8 +485,14 @@ void handleStaticBrowse(HTTPRequest *req, HTTPResponse *res) res->println(""); res->println(""); + res->println(""); + res->println(""); } file = root.openNextFile(); @@ -369,7 +500,7 @@ void handleStaticBrowse(HTTPRequest *req, HTTPResponse *res) res->println("
    File"); + res->println("Size"); + res->println("Actions"); + res->println("
    "); res->print("X"); + "\" onclick=\"return confirm_delete()\">Delete "); res->println(""); + if (!String(file.name()).substring(1).endsWith(".gz")) { + res->print("Edit"); + } + res->println("
    "); res->print("
    "); - res->print("Total : " + String(SPIFFS.totalBytes()) + " Bytes
    "); + // res->print("Total : " + String(SPIFFS.totalBytes()) + " Bytes
    "); res->print("Used : " + String(SPIFFS.usedBytes()) + " Bytes
    "); res->print("Free : " + String(SPIFFS.totalBytes() - SPIFFS.usedBytes()) + " Bytes
    "); } @@ -700,8 +831,19 @@ void handleAPIv1ToRadio(HTTPRequest *req, HTTPResponse *res) */ void handleRoot(HTTPRequest *req, HTTPResponse *res) { + res->setHeader("Content-Type", "text/html"); + randomSeed(millis()); + + res->setHeader("Set-Cookie", + "mt_session=" + httpsserver::intToString(random(1, 9999999)) + "; Expires=Wed, 20 Apr 2049 4:20:00 PST"); + + std::string cookie = req->getHeader("Cookie"); + //String cookieString = cookie.c_str(); + //uint8_t nameIndex = cookieString.indexOf("mt_session"); + //DEBUG_MSG(cookie.c_str()); + std::string filename = "/static/index.html"; std::string filenameGzip = "/static/index.html.gz"; @@ -748,3 +890,14 @@ void handleFavicon(HTTPRequest *req, HTTPResponse *res) // Write data from header file res->write(FAVICON_DATA, FAVICON_LENGTH); } + +void replaceAll(std::string &str, const std::string &from, const std::string &to) +{ + if (from.empty()) + return; + size_t start_pos = 0; + while ((start_pos = str.find(from, start_pos)) != std::string::npos) { + str.replace(start_pos, from.length(), to); + start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx' + } +} \ No newline at end of file diff --git a/src/meshwifi/meshhttp.h b/src/meshwifi/meshhttp.h index ce4a346c8..b7a84475e 100644 --- a/src/meshwifi/meshhttp.h +++ b/src/meshwifi/meshhttp.h @@ -22,6 +22,8 @@ void handleRoot(); void handleScriptsScriptJS(); void handleJSONChatHistoryDummy(); +void replaceAll(std::string& str, const std::string& from, const std::string& to); + class HttpAPI : public PhoneAPI { From 4204c494aebd594944e1b4aac416cfeb72fb4134 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 6 Nov 2020 22:41:26 -0800 Subject: [PATCH 07/21] fix poorly merged file --- src/meshwifi/meshhttp.cpp | 80 --------------------------------------- 1 file changed, 80 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index e4b4b166f..d2393a139 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -298,86 +298,6 @@ void middlewareSpeedUp160(HTTPRequest *req, HTTPResponse *res, std::functiongetParams(); - std::string paramValDelete; - - // Set a default content type - res->setHeader("Content-Type", "text/html"); - - if (params->getQueryParameter("delete", paramValDelete)) { - std::string pathDelete = "/" + paramValDelete; - if (SPIFFS.remove(pathDelete.c_str())) { - Serial.println(pathDelete.c_str()); - res->println("File " - "deleted!

    File deleted!

    "); - res->println("\n"); - res->println(""); - - return; - } else { - Serial.println(pathDelete.c_str()); - res->println("Error deleteing " - "file!

    Error deleteing file!

    "); - res->println("Error deleteing file!
    "); - - return; - } - } - - res->println("

    Upload new file

    "); - res->println("

    *** This interface is experimental ***

    "); - res->println("

    This form allows you to upload files. Keep your filenames very short and files small. Big filenames and big " - "files are a known problem.

    "); - res->println("
    "); - res->println("file:
    "); - res->println(""); - res->println("
    "); - - res->println("

    All Files

    "); - - File root = SPIFFS.open("/"); - if (root.isDirectory()) { - res->println(""); - - res->println(""); - File file = root.openNextFile(); - while (file) { - String filePath = String(file.name()); - if (filePath.indexOf("/static") == 0) { - res->println(""); - res->println(""); - res->println(""); - res->println(""); - } - - file = root.openNextFile(); - } - res->println("
    "); - - if (String(file.name()).substring(1).endsWith(".gz")) { - String modifiedFile = String(file.name()).substring(1); - modifiedFile.remove((modifiedFile.length() - 3), 3); - res->print("" + String(file.name()).substring(1) + ""); - } else { - res->print("" + String(file.name()).substring(1) + - ""); - } - res->println(""); - res->print(String(file.size())); - res->println(""); - res->print("X"); - res->println("
    "); - - res->print("
    "); - res->print("Total : " + String(SPIFFS.totalBytes()) + " Bytes
    "); - res->print("Used : " + String(SPIFFS.usedBytes()) + " Bytes
    "); - res->print("Free : " + String(SPIFFS.totalBytes() - SPIFFS.usedBytes()) + " Bytes
    "); - } -} void handleStaticPost(HTTPRequest *req, HTTPResponse *res) { From e33657eb75ec0f70cb7b958de9aef55bb9af8068 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Mon, 9 Nov 2020 19:47:31 -0800 Subject: [PATCH 08/21] Toggle GPIO2 to HIGH when transmitting a packet out the LORA radio. --- src/configuration.h | 4 ++++ src/main.cpp | 7 +++++++ src/mesh/RadioLibInterface.cpp | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/src/configuration.h b/src/configuration.h index 5e8964d22..3fadf9a6b 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -162,6 +162,10 @@ along with this program. If not, see . // This string must exactly match the case used in release file names or the android updater won't work #define HW_VENDOR "tbeam" +// Jm's TXRX Deduplexer +#define RADIO_TXRX 2 + + // #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep #define I2C_SDA 21 diff --git a/src/main.cpp b/src/main.cpp index 0f24e1bc4..99a197555 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -233,6 +233,13 @@ RadioInterface *rIf = NULL; void setup() { + +// Jm's TXRX Deduplexer +// if 0 - receive +// 1 - transmit +pinMode(RADIO_TXRX, OUTPUT); +digitalWrite(RADIO_TXRX, 0); + #ifdef USE_SEGGER SEGGER_RTT_ConfigUpBuffer(0, NULL, NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_TRIM); #endif diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp index 41d000d69..7d5aa10b2 100644 --- a/src/mesh/RadioLibInterface.cpp +++ b/src/mesh/RadioLibInterface.cpp @@ -247,6 +247,8 @@ void RadioLibInterface::completeSending() txGood++; printPacket("Completed sending", sendingPacket); + digitalWrite(RADIO_TXRX, 0); + // We are done sending that packet, release it packetPool.release(sendingPacket); sendingPacket = NULL; @@ -309,6 +311,8 @@ void RadioLibInterface::handleReceiveInterrupt() /** start an immediate transmit */ void RadioLibInterface::startSend(MeshPacket *txp) { + digitalWrite(RADIO_TXRX, 1); + printPacket("Starting low level send", txp); setStandby(); // Cancel any already in process receives From 49a19e26d5f8dda511cf1e27352e930c1b55a81b Mon Sep 17 00:00:00 2001 From: Charles Crossan Date: Fri, 13 Nov 2020 22:03:21 -0500 Subject: [PATCH 09/21] Only issue ContentType header once; correctly. --- src/meshwifi/meshhttp.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index d2393a139..4f4170cb0 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -72,7 +72,8 @@ uint32_t timeSpeedUp = 0; // right content type and are displayed correctly in the browser char contentTypes[][2][32] = {{".txt", "text/plain"}, {".html", "text/html"}, {".js", "text/javascript"}, {".png", "image/png"}, {".jpg", "image/jpg"}, {".gz", "application/gzip"}, - {".gif", "image/gif"}, {".json", "application/json"}, {"", ""}}; + {".gif", "image/gif"}, {".json", "application/json"}, {".css", "text/css"}, + {"", ""}}; void handleWebResponse() { @@ -511,8 +512,6 @@ void handleStatic(HTTPRequest *req, HTTPResponse *res) // Get access to the parameters ResourceParameters *params = req->getParams(); - // Set a default content type - res->setHeader("Content-Type", "application/octet-stream"); std::string parameter1; // Print the first parameter value @@ -549,16 +548,23 @@ void handleStatic(HTTPRequest *req, HTTPResponse *res) res->setHeader("Content-Length", httpsserver::intToString(file.size())); + bool has_set_content_type = false; // Content-Type is guessed using the definition of the contentTypes-table defined above int cTypeIdx = 0; do { if (filename.rfind(contentTypes[cTypeIdx][0]) != std::string::npos) { res->setHeader("Content-Type", contentTypes[cTypeIdx][1]); + has_set_content_type = true; break; } cTypeIdx += 1; } while (strlen(contentTypes[cTypeIdx][0]) > 0); + if(!has_set_content_type) { + // Set a default content type + res->setHeader("Content-Type", "application/octet-stream"); + } + // Read the file from SPIFFS and write it to the HTTP response body size_t length = 0; do { From d0451399458314b5160aa8b139bd766ee82451db Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Mon, 16 Nov 2020 07:57:32 +0800 Subject: [PATCH 10/21] return ble errors for invalid values --- src/nimble/BluetoothUtil.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/nimble/BluetoothUtil.cpp b/src/nimble/BluetoothUtil.cpp index 8009f5d22..8a0dd779b 100644 --- a/src/nimble/BluetoothUtil.cpp +++ b/src/nimble/BluetoothUtil.cpp @@ -392,6 +392,7 @@ void gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg) } } + /** * A helper function that implements simple read and write handling for a uint32_t * @@ -415,6 +416,7 @@ int chr_readwrite32le(uint32_t *v, struct ble_gatt_access_ctxt *ctxt) if (len < sizeof(le)) { DEBUG_MSG("Error: wrongsized write32\n"); *v = 0; + return BLE_ATT_ERR_UNLIKELY; } else { *v = get_le32(le); DEBUG_MSG("BLE writing a uint32\n"); @@ -441,8 +443,10 @@ int chr_readwrite8(uint8_t *v, size_t vlen, struct ble_gatt_access_ctxt *ctxt) auto rc = ble_hs_mbuf_to_flat(ctxt->om, v, vlen, &len); assert(rc == 0); - if (len < vlen) + if (len < vlen) { DEBUG_MSG("Error: wrongsized write\n"); + return BLE_ATT_ERR_UNLIKELY; + } else { DEBUG_MSG("BLE writing bytes\n"); } From f2698bbf91bd9ab1a16f1c9edd337347d164c2f9 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Mon, 16 Nov 2020 08:20:20 +0800 Subject: [PATCH 11/21] bug #496 - allow update clients to program SPIFFS region also have build system properly build spiffs release builds --- bin/build-all.sh | 6 +++++- docs/software/device-api.md | 1 + src/esp32/BluetoothSoftwareUpdate.cpp | 26 +++++++++++++++++++------- src/esp32/BluetoothSoftwareUpdate.h | 3 ++- src/esp32/NimbleSoftwareUpdate.c | 11 ++++++++++- 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/bin/build-all.sh b/bin/build-all.sh index 9f0888f03..a13bfffc9 100755 --- a/bin/build-all.sh +++ b/bin/build-all.sh @@ -87,8 +87,12 @@ platformio lib update do_boards "$BOARDS_ESP32" "false" do_boards "$BOARDS_NRF52" "true" +echo "Building SPIFFS for ESP32 targets" +pio run --environment tbeam -t buildfs +cp .pio/build/tbeam/spiffs.bin $OUTDIR/bins/universal/spiffs-$VERSION.bin + # keep the bins in archive also -cp $OUTDIR/bins/firmware* $OUTDIR/elfs/firmware* $OUTDIR/bins/universal/firmware* $OUTDIR/elfs/universal/firmware* $ARCHIVEDIR +cp $OUTDIR/bins/firmware* $OUTDIR/bins/universal/spiffs* $OUTDIR/elfs/firmware* $OUTDIR/bins/universal/firmware* $OUTDIR/elfs/universal/firmware* $ARCHIVEDIR echo Updating android bins $OUTDIR/forandroid rm -rf $OUTDIR/forandroid diff --git a/docs/software/device-api.md b/docs/software/device-api.md index 031b586a2..cdf9e1368 100644 --- a/docs/software/device-api.md +++ b/docs/software/device-api.md @@ -111,6 +111,7 @@ Characteristics | e272ebac-d463-4b98-bc84-5cc1a39ee517 | write | data, variable sized, recommended 512 bytes, write one for each block of file | | 4826129c-c22a-43a3-b066-ce8f0d5bacc6 | write | crc32, write last - writing this will complete the OTA operation, now you can read result | | 5e134862-7411-4424-ac4a-210937432c77 | read,notify | result code, readable but will notify when the OTA operation completes | +| 5e134862-7411-4424-ac4a-210937432c67 | write | sets the region for programming, currently only 0 (app) or 100 (spiffs) are defined, if not set app is assumed | | GATT_UUID_SW_VERSION_STR/0x2a28 | read | We also implement these standard GATT entries because SW update probably needs them: | | GATT_UUID_MANU_NAME/0x2a29 | read | | | GATT_UUID_HW_VERSION_STR/0x2a27 | read | | diff --git a/src/esp32/BluetoothSoftwareUpdate.cpp b/src/esp32/BluetoothSoftwareUpdate.cpp index 12e30d1ce..03e156b0b 100644 --- a/src/esp32/BluetoothSoftwareUpdate.cpp +++ b/src/esp32/BluetoothSoftwareUpdate.cpp @@ -6,6 +6,7 @@ #include "RadioLibInterface.h" #include "configuration.h" #include "nimble/BluetoothUtil.h" +#include "NodeDB.h" #include #include @@ -16,6 +17,8 @@ static CRC32 crc; static uint32_t rebootAtMsec = 0; // If not zero we will reboot at this time (used to reboot shortly after the update completes) static uint32_t updateExpectedSize, updateActualSize; +static uint8_t update_result; +static uint8_t update_region; static concurrency::Lock *updateLock; @@ -32,8 +35,8 @@ int update_size_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_ crc.reset(); if (Update.isRunning()) Update.abort(); - bool canBegin = Update.begin(updateExpectedSize); - DEBUG_MSG("Setting update size %u, result %d\n", updateExpectedSize, canBegin); + bool canBegin = Update.begin(updateExpectedSize, update_region); + DEBUG_MSG("Setting region %d update size %u, result %d\n", update_region, updateExpectedSize, canBegin); if (!canBegin) { // Indicate failure by forcing the size to 0 (client will read it back) updateExpectedSize = 0; @@ -72,13 +75,11 @@ int update_data_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_ crc.update(data, len); Update.write(data, len); updateActualSize += len; - powerFSM.trigger(EVENT_CONTACT_FROM_PHONE); + powerFSM.trigger(EVENT_CONTACT_FROM_PHONE); return 0; } -static uint8_t update_result; - /// Handle writes to crc32 int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) { @@ -100,8 +101,14 @@ int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble result = 0xe0; // FIXME, use real error codes } else { if (Update.end()) { - DEBUG_MSG("OTA done, rebooting in 5 seconds!\n"); - rebootAtMsec = millis() + 5000; + if (update_region == U_SPIFFS) { + DEBUG_MSG("SPIFFS updated!\n"); + nodeDB.saveToDisk(); // Since we just wiped spiffs, we need to save our current state + } + else { + DEBUG_MSG("Appload updated, rebooting in 5 seconds!\n"); + rebootAtMsec = millis() + 5000; + } } else { DEBUG_MSG("Error Occurred. Error #: %d\n", Update.getError()); } @@ -125,6 +132,11 @@ int update_result_callback(uint16_t conn_handle, uint16_t attr_handle, struct bl return chr_readwrite8(&update_result, sizeof(update_result), ctxt); } +int update_region_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) +{ + return chr_readwrite8(&update_region, sizeof(update_region), ctxt); +} + void bluetoothRebootCheck() { if (rebootAtMsec && millis() > rebootAtMsec) { diff --git a/src/esp32/BluetoothSoftwareUpdate.h b/src/esp32/BluetoothSoftwareUpdate.h index c7a412d69..f5e1a1ded 100644 --- a/src/esp32/BluetoothSoftwareUpdate.h +++ b/src/esp32/BluetoothSoftwareUpdate.h @@ -14,10 +14,11 @@ int update_size_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_ int update_data_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); int update_result_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); +int update_region_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg); extern const struct ble_gatt_svc_def gatt_update_svcs[]; -extern const ble_uuid128_t update_result_uuid; +extern const ble_uuid128_t update_result_uuid, update_region_uuid; extern int16_t updateResultHandle; diff --git a/src/esp32/NimbleSoftwareUpdate.c b/src/esp32/NimbleSoftwareUpdate.c index e02cd4a9d..956fdf53f 100644 --- a/src/esp32/NimbleSoftwareUpdate.c +++ b/src/esp32/NimbleSoftwareUpdate.c @@ -23,6 +23,10 @@ const ble_uuid128_t update_crc32_uuid = const ble_uuid128_t update_result_uuid = BLE_UUID128_INIT(0x77, 0x2c, 0x43, 0x37, 0x09, 0x21, 0x4a, 0xac, 0x24, 0x44, 0x11, 0x74, 0x62, 0x48, 0x13, 0x5e); +// "5e134862-7411-4424-ac4a-210937432c67" write +const ble_uuid128_t update_region_uuid = + BLE_UUID128_INIT(0x67, 0x2c, 0x43, 0x37, 0x09, 0x21, 0x4a, 0xac, 0x24, 0x44, 0x11, 0x74, 0x62, 0x48, 0x13, 0x5e); + const struct ble_gatt_svc_def gatt_update_svcs[] = { { /*** Service: Security test. */ @@ -47,9 +51,14 @@ const struct ble_gatt_svc_def gatt_update_svcs[] = { }, { .uuid = &update_result_uuid.u, - .access_cb = update_size_callback, + .access_cb = update_result_callback, .flags = BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_READ_AUTHEN | BLE_GATT_CHR_F_NOTIFY, }, + { + .uuid = &update_region_uuid.u, + .access_cb = update_region_callback, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_WRITE_AUTHEN, + }, { 0, /* No more characteristics in this service. */ }}, From df75cefeeb608691452426c5da9c788bba82a303 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Wed, 18 Nov 2020 10:35:13 +0800 Subject: [PATCH 12/21] fix #525 - turn off (buggy) TinyGPS custom candidates support --- platformio.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index c33784cfe..4f73d1955 100644 --- a/platformio.ini +++ b/platformio.ini @@ -31,6 +31,7 @@ build_flags = -Wno-missing-field-initializers -Isrc -Isrc/mesh -Isrc/gps -Ilib/n -DAPP_VERSION=${sysenv.APP_VERSION} -DHW_VERSION=${sysenv.HW_VERSION} -DUSE_THREAD_NAMES + -DTINYGPSPLUS_OPTION_NO_CUSTOM_FIELDS ; leave this commented out to avoid breaking Windows ;upload_port = /dev/ttyUSB0 @@ -64,7 +65,7 @@ lib_deps = https://github.com/meshtastic/arduino-fsm.git#2f106146071fc7bc620e1e8d4b88dc4e0266ce39 https://github.com/meshtastic/SparkFun_Ublox_Arduino_Library.git#31015a55e630a2df77d9d714669c621a5bf355ad https://github.com/meshtastic/RadioLib.git#8657380241bce681c33aab46598bbf13b11f876c - https://github.com/meshtastic/TinyGPSPlus.git + https://github.com/meshtastic/TinyGPSPlus.git#9c1d584d2469523381e077b0b9c1bf868d6c0206 https://github.com/meshtastic/AXP202X_Library.git#8404abb6d4b486748636bc6ad72d2a47baaf5460 Wire ; explicitly needed here because the AXP202 library forgets to add it SPI From d7d13d637c005edc7b60eeca06f08bc3c71a7f46 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Thu, 19 Nov 2020 09:25:02 +0800 Subject: [PATCH 13/21] clean up filesystem goo, add spiffs to install scripts, fix #496 @mc-hamster seems to work pretty good for me, so I'll send a PR to you for the dev-http branch. I'll push out an android alpha build later today (once the build is complete). Once this new device load is out in the field _future_ device builds will support updating spiffs from android. (i.e. device loads older than 1.1.9 must be updated to 1.1.9 or later before spiffs support is implemented on the device side - so some users might need to update twice before the new spiffs contents will appear on their device) --- bin/build-all.sh | 4 ++-- bin/device-install.sh | 3 +++ src/FSCommon.cpp | 21 +++++++++++++++++++++ src/FSCommon.h | 29 +++++++++++++++++++++++++++++ src/main.cpp | 19 +++++++++++-------- src/mesh/NodeDB.cpp | 29 ++--------------------------- 6 files changed, 68 insertions(+), 37 deletions(-) create mode 100644 src/FSCommon.cpp create mode 100644 src/FSCommon.h diff --git a/bin/build-all.sh b/bin/build-all.sh index a13bfffc9..ab779e187 100755 --- a/bin/build-all.sh +++ b/bin/build-all.sh @@ -9,7 +9,7 @@ COUNTRIES="US EU433 EU865 CN JP ANZ KR" #COUNTRIES=CN BOARDS_ESP32="tlora-v2 tlora-v1 tlora-v2-1-1.6 tbeam heltec tbeam0.7" -# BOARDS_ESP32=tbeam +#BOARDS_ESP32=tbeam # FIXME note nrf52840dk build is for some reason only generating a BIN file but not a HEX file nrf52840dk-geeksville is fine BOARDS_NRF52="lora-relay-v1" @@ -113,6 +113,6 @@ XML echo Generating $ARCHIVEDIR/firmware-$VERSION.zip rm -f $ARCHIVEDIR/firmware-$VERSION.zip -zip --junk-paths $ARCHIVEDIR/firmware-$VERSION.zip $OUTDIR/bins/firmware-*-$VERSION.* images/system-info.bin bin/device-install.sh bin/device-update.sh +zip --junk-paths $ARCHIVEDIR/firmware-$VERSION.zip $ARCHIVEDIR/spiffs-$VERSION.bin $OUTDIR/bins/firmware-*-$VERSION.* images/system-info.bin bin/device-install.sh bin/device-update.sh echo BUILT ALL diff --git a/bin/device-install.sh b/bin/device-install.sh index fb374d091..3d5f27af8 100755 --- a/bin/device-install.sh +++ b/bin/device-install.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e + # Usage info show_help() { cat << EOF @@ -36,6 +38,7 @@ if [ -f "${FILENAME}" ]; then echo "Trying to flash ${FILENAME}, but first erasing and writing system information" esptool.py --baud 921600 erase_flash esptool.py --baud 921600 write_flash 0x1000 system-info.bin + esptool.py --baud 921600 write_flash 0x00390000 spiffs-*.bin esptool.py --baud 921600 write_flash 0x10000 ${FILENAME} else echo "Invalid file: ${FILENAME}" diff --git a/src/FSCommon.cpp b/src/FSCommon.cpp new file mode 100644 index 000000000..2ce7f0bbe --- /dev/null +++ b/src/FSCommon.cpp @@ -0,0 +1,21 @@ +#include "FSCommon.h" + +void fsInit() +{ +#ifdef FS + if (!FSBegin()) + { + DEBUG_MSG("ERROR filesystem mount Failed\n"); + assert(0); // FIXME - report failure to phone + } + + DEBUG_MSG("Filesystem files:\n"); + File dir = FS.open("/"); + File f = dir.openNextFile(); + while (f) { + DEBUG_MSG(" %s\n", f.name()); + f.close(); + f = dir.openNextFile(); + } +#endif +} diff --git a/src/FSCommon.h b/src/FSCommon.h new file mode 100644 index 000000000..a1adb952e --- /dev/null +++ b/src/FSCommon.h @@ -0,0 +1,29 @@ +#pragma once + +#include "configuration.h" + +// Cross platform filesystem API + +#ifdef PORTDUINO +// Portduino version +#include "PortduinoFS.h" +#define FS PortduinoFS +#define FSBegin() true +#define FILE_O_WRITE "w" +#define FILE_O_READ "r" +#elif !defined(NO_ESP32) +// ESP32 version +#include "SPIFFS.h" +#define FS SPIFFS +#define FSBegin() FS.begin(true) +#define FILE_O_WRITE "w" +#define FILE_O_READ "r" +#else +// NRF52 version +#include "InternalFileSystem.h" +#define FS InternalFS +#define FSBegin() FS.begin() +using namespace Adafruit_LittleFS_Namespace; +#endif + +void fsInit(); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 61bb2be14..33b60d843 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ // #include "rom/rtc.h" #include "DSRRouter.h" // #include "debug.h" +#include "FSCommon.h" #include "RTC.h" #include "SPILock.h" #include "concurrency/OSThread.h" @@ -173,7 +174,7 @@ class ButtonThread : public OSThread #ifdef BUTTON_PIN userButton = OneButton(BUTTON_PIN, true, true); #ifdef INPUT_PULLUP_SENSE - // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did + // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did pinMode(BUTTON_PIN, INPUT_PULLUP_SENSE); #endif userButton.attachClick(userButtonPressed); @@ -184,9 +185,9 @@ class ButtonThread : public OSThread #ifdef BUTTON_PIN_ALT userButtonAlt = OneButton(BUTTON_PIN_ALT, true, true); #ifdef INPUT_PULLUP_SENSE - // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did + // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did pinMode(BUTTON_PIN_ALT, INPUT_PULLUP_SENSE); -#endif +#endif userButtonAlt.attachClick(userButtonPressed); userButtonAlt.attachDuringLongPress(userButtonPressedLong); userButtonAlt.attachDoubleClick(userButtonDoublePressed); @@ -209,7 +210,7 @@ class ButtonThread : public OSThread canSleep &= userButtonAlt.isIdle(); #endif // if (!canSleep) DEBUG_MSG("Supressing sleep!\n"); - //else DEBUG_MSG("sleep ok\n"); + // else DEBUG_MSG("sleep ok\n"); return 5; } @@ -225,13 +226,13 @@ class ButtonThread : public OSThread DEBUG_MSG("Long press!\n"); screen->adjustBrightness(); } - + static void userButtonDoublePressed() -{ + { #ifndef NO_ESP32 - disablePin(); + disablePin(); #endif -} + } }; static Periodic *ledPeriodic; @@ -266,6 +267,8 @@ void setup() ledPeriodic = new Periodic("Blink", ledBlinker); + fsInit(); + router = new DSRRouter(); #ifdef I2C_SDA diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 61be815ec..517845b9b 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -16,6 +16,7 @@ #include "error.h" #include "mesh-pb-constants.h" #include "meshwifi/meshwifi.h" +#include "FSCommon.h" #include #include @@ -35,27 +36,7 @@ DeviceState versions used to be defined in the .proto file but really only this #define DEVICESTATE_CUR_VER 11 #define DEVICESTATE_MIN_VER DEVICESTATE_CUR_VER -#ifdef PORTDUINO -// Portduino version -#include "PortduinoFS.h" -#define FS PortduinoFS -#define FSBegin() true -#define FILE_O_WRITE "w" -#define FILE_O_READ "r" -#elif !defined(NO_ESP32) -// ESP32 version -#include "SPIFFS.h" -#define FS SPIFFS -#define FSBegin() FS.begin(true) -#define FILE_O_WRITE "w" -#define FILE_O_READ "r" -#else -// NRF52 version -#include "InternalFileSystem.h" -#define FS InternalFS -#define FSBegin() FS.begin() -using namespace Adafruit_LittleFS_Namespace; -#endif + // FIXME - move this somewhere else extern void getMacAddr(uint8_t *dmac); @@ -210,12 +191,6 @@ void NodeDB::init() { installDefaultDeviceState(); - if (!FSBegin()) // FIXME - do this in main? - { - DEBUG_MSG("ERROR filesystem mount Failed\n"); - assert(0); // FIXME - report failure to phone - } - // saveToDisk(); loadFromDisk(); // saveToDisk(); From 19d81347f289cc573bd2fcf1b4c5c8ba2e8b479a Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Fri, 20 Nov 2020 07:42:02 +0800 Subject: [PATCH 14/21] 1.1.9 (release for @mc-hamster only in android app alpha) --- bin/version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/version.sh b/bin/version.sh index 8a7fb3ca3..2e7677737 100644 --- a/bin/version.sh +++ b/bin/version.sh @@ -1,3 +1,3 @@ -export VERSION=1.1.8 \ No newline at end of file +export VERSION=1.1.9 \ No newline at end of file From f60922af34927d1a5d12e62f8d7869588ba772dc Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 22 Nov 2020 15:42:36 -0800 Subject: [PATCH 15/21] Accidently checked in my rf deduplexer --- src/configuration.h | 4 ---- src/main.cpp | 6 ------ 2 files changed, 10 deletions(-) diff --git a/src/configuration.h b/src/configuration.h index 08956678d..ed851ed8f 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -162,10 +162,6 @@ along with this program. If not, see . // This string must exactly match the case used in release file names or the android updater won't work #define HW_VENDOR "tbeam" -// Jm's TXRX Deduplexer -#define RADIO_TXRX 2 - - // #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep #define I2C_SDA 21 diff --git a/src/main.cpp b/src/main.cpp index 84ea99c05..acef3b672 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -245,12 +245,6 @@ void setup() SEGGER_RTT_ConfigUpBuffer(SEGGER_STDOUT_CH, NULL, NULL, 1024, SEGGER_RTT_MODE_NO_BLOCK_TRIM); #endif -// Jm's TXRX Deduplexer -// if 0 - receive -// 1 - transmit -pinMode(RADIO_TXRX, OUTPUT); -digitalWrite(RADIO_TXRX, 0); - #ifdef USE_SEGGER SEGGER_RTT_ConfigUpBuffer(0, NULL, NULL, 0, SEGGER_RTT_MODE_NO_BLOCK_TRIM); #endif From 3ab9d2a50e2cf1b68e87b956761009274e4779f6 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 22 Nov 2020 16:24:22 -0800 Subject: [PATCH 16/21] Removing stuff I accidently checked in for the duplexer --- src/mesh/RadioLibInterface.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp index 069403adf..9a5ec536c 100644 --- a/src/mesh/RadioLibInterface.cpp +++ b/src/mesh/RadioLibInterface.cpp @@ -197,8 +197,6 @@ void RadioLibInterface::completeSending() txGood++; printPacket("Completed sending", p); - digitalWrite(RADIO_TXRX, 0); - // We are done sending that packet, release it packetPool.release(p); // DEBUG_MSG("Done with send\n"); @@ -256,12 +254,10 @@ void RadioLibInterface::handleReceiveInterrupt() } } } - + /** start an immediate transmit */ void RadioLibInterface::startSend(MeshPacket *txp) { - digitalWrite(RADIO_TXRX, 1); - printPacket("Starting low level send", txp); setStandby(); // Cancel any already in process receives From 2bd40b7053b4c6ca11c29238416520f069eb1480 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 22 Nov 2020 18:50:14 -0800 Subject: [PATCH 17/21] Add support for the power button #528 --- src/Power.cpp | 5 +++++ src/main.cpp | 54 +++++++++++++++++++++++++++++++++++++++------------ src/power.h | 1 + 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index ae51e8039..93e3096d0 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -134,6 +134,11 @@ bool Power::setup() return found; } +void Power::shutdown() { + DEBUG_MSG("Shutting down\n"); + axp.shutdown(); +} + /// Reads power status to powerStatus singleton. // // TODO(girts): move this and other axp stuff to power.h/power.cpp. diff --git a/src/main.cpp b/src/main.cpp index acef3b672..228f2b3e3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -167,29 +167,35 @@ class ButtonThread : public OSThread #endif public: + static uint32_t longPressTime; + // callback returns the period for the next callback invocation (or 0 if we should no longer be called) ButtonThread() : OSThread("Button") { #ifdef BUTTON_PIN userButton = OneButton(BUTTON_PIN, true, true); #ifdef INPUT_PULLUP_SENSE - // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did + // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did pinMode(BUTTON_PIN, INPUT_PULLUP_SENSE); #endif userButton.attachClick(userButtonPressed); userButton.attachDuringLongPress(userButtonPressedLong); userButton.attachDoubleClick(userButtonDoublePressed); + userButton.attachLongPressStart(userButtonPressedLongStart); + userButton.attachLongPressStop(userButtonPressedLongStop); wakeOnIrq(BUTTON_PIN, FALLING); #endif #ifdef BUTTON_PIN_ALT userButtonAlt = OneButton(BUTTON_PIN_ALT, true, true); #ifdef INPUT_PULLUP_SENSE - // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did + // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did pinMode(BUTTON_PIN_ALT, INPUT_PULLUP_SENSE); -#endif +#endif userButtonAlt.attachClick(userButtonPressed); userButtonAlt.attachDuringLongPress(userButtonPressedLong); userButtonAlt.attachDoubleClick(userButtonDoublePressed); + userButtonAlt.attachLongPressStart(userButtonPressedLongStart); + userButtonAlt.attachLongPressStop(userButtonPressedLongStop); wakeOnIrq(BUTTON_PIN_ALT, FALLING); #endif } @@ -209,7 +215,7 @@ class ButtonThread : public OSThread canSleep &= userButtonAlt.isIdle(); #endif // if (!canSleep) DEBUG_MSG("Supressing sleep!\n"); - //else DEBUG_MSG("sleep ok\n"); + // else DEBUG_MSG("sleep ok\n"); return 5; } @@ -222,20 +228,44 @@ class ButtonThread : public OSThread } static void userButtonPressedLong() { - DEBUG_MSG("Long press!\n"); + // DEBUG_MSG("Long press!\n"); screen->adjustBrightness(); - } - - static void userButtonDoublePressed() -{ -#ifndef NO_ESP32 - disablePin(); + + // If user button is held down for 10 seconds, shutdown the device. + if (millis() - longPressTime > 10 * 1000) { +#ifdef AXP192_SLAVE_ADDRESS + if (axp192_found == true) { + power->shutdown(); + } #endif -} + } else { + //DEBUG_MSG("Long press %u\n", (millis() - longPressTime)); + } + } + + static void userButtonDoublePressed() + { +#ifndef NO_ESP32 + disablePin(); +#endif + } + + static void userButtonPressedLongStart() + { + DEBUG_MSG("Long press start!\n"); + longPressTime = millis(); + } + + static void userButtonPressedLongStop() + { + DEBUG_MSG("Long press stop!\n"); + longPressTime = 0; + } }; static Periodic *ledPeriodic; static OSThread *powerFSMthread, *buttonThread; +uint32_t ButtonThread::longPressTime = 0; RadioInterface *rIf = NULL; diff --git a/src/power.h b/src/power.h index 8b75834aa..815e22675 100644 --- a/src/power.h +++ b/src/power.h @@ -23,6 +23,7 @@ class Power : private concurrency::OSThread Power(); + void shutdown(); void readPowerStatus(); virtual bool setup(); virtual int32_t runOnce(); From 9801a62d2dc1f722f49013ac57c14385498c7ed2 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 22 Nov 2020 19:01:48 -0800 Subject: [PATCH 18/21] Fix for CI on other boards. --- src/Power.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Power.cpp b/src/Power.cpp index 93e3096d0..4e30c8288 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -134,9 +134,12 @@ bool Power::setup() return found; } -void Power::shutdown() { +void Power::shutdown() +{ +#ifdef AXP192_SLAVE_ADDRESS DEBUG_MSG("Shutting down\n"); axp.shutdown(); +#endif } /// Reads power status to powerStatus singleton. From 817c99e09ccdd9e47ace7e967a6ed2ef02da7a16 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 22 Nov 2020 19:12:11 -0800 Subject: [PATCH 19/21] trying to fix it again --- src/Power.cpp | 2 +- src/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index 4e30c8288..ba908e3fb 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -136,7 +136,7 @@ bool Power::setup() void Power::shutdown() { -#ifdef AXP192_SLAVE_ADDRESS +#ifdef TBEAM_V10 DEBUG_MSG("Shutting down\n"); axp.shutdown(); #endif diff --git a/src/main.cpp b/src/main.cpp index 228f2b3e3..4c0af7f7b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -233,7 +233,7 @@ class ButtonThread : public OSThread // If user button is held down for 10 seconds, shutdown the device. if (millis() - longPressTime > 10 * 1000) { -#ifdef AXP192_SLAVE_ADDRESS +#ifdef TBEAM_V10 if (axp192_found == true) { power->shutdown(); } From 7d4c77abfd95c3f73d0630d9bc3dddb532696626 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 27 Nov 2020 14:49:44 -0800 Subject: [PATCH 20/21] Fix for #533 - deinitWifi() will de initialize the radio even if it was never initialized --- src/meshwifi/meshwifi.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/meshwifi/meshwifi.cpp b/src/meshwifi/meshwifi.cpp index a20cebede..71c4d2277 100644 --- a/src/meshwifi/meshwifi.cpp +++ b/src/meshwifi/meshwifi.cpp @@ -50,9 +50,11 @@ void deinitWifi() saving on the 2.4g transceiver. */ - WiFi.mode(WIFI_MODE_NULL); - DEBUG_MSG("WiFi Turned Off\n"); - // WiFi.printDiag(Serial); + if (isWifiAvailable()) { + WiFi.mode(WIFI_MODE_NULL); + DEBUG_MSG("WiFi Turned Off\n"); + // WiFi.printDiag(Serial); + } } // Startup WiFi @@ -118,7 +120,7 @@ void initWifi() } } - if (!MDNS.begin( "Meshtastic" )) { + if (!MDNS.begin("Meshtastic")) { DEBUG_MSG("Error setting up MDNS responder!\n"); while (1) { From c427c8abf95daa8ce1e7c930a133088ca819347c Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Sat, 28 Nov 2020 08:55:56 +0800 Subject: [PATCH 21/21] oops - fix my crummy merge --- src/main.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index e0c1dbc16..78c1bee16 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -250,6 +250,18 @@ class ButtonThread : public OSThread disablePin(); #endif } + + static void userButtonPressedLongStart() + { + DEBUG_MSG("Long press start!\n"); + longPressTime = millis(); + } + + static void userButtonPressedLongStop() + { + DEBUG_MSG("Long press stop!\n"); + longPressTime = 0; + } }; static Periodic *ledPeriodic;