Full Code of stooged/ESP32-Server-900u for AI

main f0374d41af76 cached
62 files
4.3 MB
1.1M tokens
1 requests
Download .txt
Showing preview only (4,556K chars total). Download the full file or copy to clipboard to get everything.
Repository: stooged/ESP32-Server-900u
Branch: main
Commit: f0374d41af76
Files: 62
Total size: 4.3 MB

Directory structure:
gitextract_b33bnoq0/

├── .gitattributes
├── 3D_Printed_Cases/
│   ├── Adafruit_QT_Py/
│   │   ├── Adafruit_QT_Py_bottom.stl
│   │   ├── Adafruit_QT_Py_top.stl
│   │   └── README.md
│   ├── DevKitM_1/
│   │   ├── DevKitM_1_bottom.stl
│   │   ├── DevKitM_1_top.stl
│   │   └── README.md
│   ├── ESP32_S2_Saola_1/
│   │   ├── ESP32_S2_Saola_1_bottom.stl
│   │   ├── ESP32_S2_Saola_1_top.stl
│   │   └── README.md
│   ├── LILYGO_TTGO_T8_TF_Card_Slot/
│   │   ├── LILYGO_TTGO_T8_TF_Card_Slot_bottom.stl
│   │   ├── LILYGO_TTGO_T8_TF_Card_Slot_top.stl
│   │   └── README.md
│   ├── LILYGO_TTGO_T8_WOOR/
│   │   ├── LILYGO_TTGO_T8_WOOR_bottom.stl
│   │   ├── LILYGO_TTGO_T8_WOOR_top.stl
│   │   └── README.md
│   ├── NodeMCU_32/
│   │   ├── NodeMCU_32_bottom.stl
│   │   ├── NodeMCU_32_top.stl
│   │   └── README.md
│   ├── README.md
│   ├── S3_DevKitC_1/
│   │   ├── README.md
│   │   ├── S3_DevKitC_1_bottom.stl
│   │   └── S3_DevKitC_1_top.stl
│   ├── UM_FeatherS2/
│   │   ├── README.md
│   │   ├── UM_FeatherS2_bottom.stl
│   │   └── UM_FeatherS2_top.stl
│   ├── UM_TinyS2/
│   │   ├── README.md
│   │   ├── UM_TinyS2_bottom.stl
│   │   └── UM_TinyS2_top.stl
│   └── Wemos_S2_Mini/
│       ├── README.md
│       ├── S2_Mini_By_Doyle4.stl
│       ├── Wemos_S2_Mini_bottom.stl
│       └── Wemos_S2_Mini_top.stl
├── ESP32_Server_900u/
│   ├── ESP32_Server_900u.ino
│   ├── Loader.h
│   ├── Pages.h
│   ├── exfathax.h
│   ├── fan.h
│   ├── goldhen.h
│   └── jzip.h
├── ESP32_Server_900u.code-workspace
├── ESP32_Server_900u_HTTPS/
│   ├── ESP32_Server_900u_HTTPS.ino
│   ├── Loader.h
│   ├── Pages.h
│   ├── README.md
│   ├── exfathax.h
│   ├── fan.h
│   ├── goldhen.h
│   └── jzip.h
├── README.md
├── bin2h/
│   ├── README.md
│   ├── bin2h.py
│   ├── bin2h_exe.bat
│   └── bin2h_python.bat
└── esplib_mod/
    ├── README.md
    ├── boards.txt
    └── partitions/
        ├── app1M_nota_spiffs14M_16MB.csv
        ├── app1M_spiffs13M_16MB.csv
        ├── app2M_nota_spiffs13M_16MB.csv
        ├── app2M_spiffs11M_16MB.csv
        ├── app3M_nota_spiffs12M_16MB.csv
        └── app3M_spiffs9M_16MB.csv

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto


================================================
FILE: 3D_Printed_Cases/Adafruit_QT_Py/README.md
================================================
# Adafruit QT Py

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/Adafruit_QT_Py/Adafruit_QT_Py.jpg>


================================================
FILE: 3D_Printed_Cases/DevKitM_1/README.md
================================================
# DevKitM-1

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/DevKitM_1/DevKitM_1.jpg>

================================================
FILE: 3D_Printed_Cases/ESP32_S2_Saola_1/README.md
================================================
# ESP32-S2-Saola-1

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/ESP32_S2_Saola_1/ESP32_S2_Saola_1.jpg>

================================================
FILE: 3D_Printed_Cases/LILYGO_TTGO_T8_TF_Card_Slot/README.md
================================================
# LILYGO-TTGO-T8-TF-Card-Slot

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/LILYGO_TTGO_T8_TF_Card_Slot/LILYGO_TTGO_T8_TF_Card_Slot.jpg>

================================================
FILE: 3D_Printed_Cases/LILYGO_TTGO_T8_WOOR/README.md
================================================
# LILYGO-TTGO-T8-WOOR

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/LILYGO_TTGO_T8_WOOR/LILYGO_TTGO_T8_WOOR.jpg>

================================================
FILE: 3D_Printed_Cases/NodeMCU_32/README.md
================================================
# NodeMCU-32 ESP32(38 pin)

Board Size: 54.8mm x 28mm

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/NodeMCU_32/NodeMCU_32.jpg>


================================================
FILE: 3D_Printed_Cases/README.md
================================================
# 3D Printed Cases

<br>

i have created stl files to 3d print cases for the following boards.

## ESP32-S2 Boards

<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/Adafruit_QT_Py>Adafruit QT Py</a><br>
<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/UM_FeatherS2>UM FeatherS2</a><br>
<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/UM_TinyS2>UM TinyS2</a><br>
<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/Wemos_S2_Mini>Wemos S2 Mini</a><br>
<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/DevKitM_1>DevKitM-1</a><br>
<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/ESP32_S2_Saola_1>ESP32-S2-Saola-1</a><br>
<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/LILYGO_TTGO_T8_TF_Card_Slot>LILYGO-TTGO-T8-TF-Card-Slot</a><br>
<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/LILYGO_TTGO_T8_WOOR>LILYGO-TTGO-T8-WOOR</a><br>


## ESP32-S3 Boards

<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/S3_DevKitC_1>S3_DevKitC_1</a><br>


## ESP32 Boards

<a href=https://github.com/stooged/ESP32-Server-900u/tree/main/3D_Printed_Cases/NodeMCU_32>NodeMCU-32</a><br>

<br>

these cases can be printed in PLA without supports.

<br>

if you wish to edit the cases you can import the `.stl` files into <a href=https://www.tinkercad.com/>Tinkercad<a/> and edit them to suit your needs.

<br>

================================================
FILE: 3D_Printed_Cases/S3_DevKitC_1/README.md
================================================
# S3-DevKitC-1

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/S3_DevKitC_1/S3_DevKitC_1.jpg>

================================================
FILE: 3D_Printed_Cases/UM_FeatherS2/README.md
================================================
# UM FeatherS2

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/UM_FeatherS2/UM_FeatherS2.jpg>


================================================
FILE: 3D_Printed_Cases/UM_TinyS2/README.md
================================================
# UM TinyS2

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/UM_TinyS2/UM_TinyS2.jpg>


================================================
FILE: 3D_Printed_Cases/Wemos_S2_Mini/README.md
================================================
# Wemos S2 Mini

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/Wemos_S2_Mini/Wemos_S2_Mini.jpg>

<hr>

a different style case by <a href=https://github.com/Doyle4>Doyle4</a><br><br>
<a href=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/Wemos_S2_Mini/S2_Mini_By_Doyle4.stl>S2_Mini_By_Doyle4.stl</a><br>

<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/Wemos_S2_Mini/S2_Mini_By_Doyle4.jpg>





================================================
FILE: ESP32_Server_900u/ESP32_Server_900u.ino
================================================
#include <FS.h>
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include "esp_task_wdt.h"
#include <DNSServer.h>
#include <ESPmDNS.h>
#include <Update.h>
#if ARDUINO_USB_CDC_ON_BOOT
#error "The menu option 'Tools / USB CDC On Boot' must be set to 'Disabled'"
#elif ARDUINO_USB_DFU_ON_BOOT
#error "The menu option 'Tools / USB DFU On Boot' must be set to 'Disabled'"
#elif ARDUINO_USB_MSC_ON_BOOT
#error "The menu option 'Tools / USB MSC On Boot' must be set to 'Disabled'"
#elif defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)  // ESP32-S2/S3 BOARDS(usb emulation)
#include "USB.h"
#include "USBMSC.h"
#include "exfathax.h"
#elif defined(CONFIG_IDF_TARGET_ESP32)  // ESP32 BOARDS
#define USBCONTROL false                // set to true if you are using usb control(wired up usb drive)
#define usbPin 4                        // set the pin you want to use for usb control
#else
#error "Selected board not supported"
#endif

                     // use PsFree [ true / false ]
#define PSFREE true  // use the newer psfree webkit exploit.
                     // this is fairly stable but may fail which will require you to try and load the payload again.

                     // use SD Card [ true / false ]
#define USESD false  // a FAT32 formatted SD Card will be used instead of the onboard flash for the storage. 
                     // this requires a board with a sd card slot or a sd card connected.

                        // use the T-Dongle-S3 SD Card [ true / false ]
#define USELILYSD false // a FAT32 formatted SD Card will be used instead of the onboard flash for the storage.
                        // this requires a LilyGO T-Dongle-S3 to be used with a sd card inserted.

                      // use FatFS not SPIFFS [ true / false ]
#define USEFAT false  // FatFS will be used instead of SPIFFS for the storage filesystem or for larger partitons on boards with more than 4mb flash. 
                      // you must select a partition scheme labeled with "FAT" or "FATFS" with this enabled.

                      // use LITTLEFS not SPIFFS [ true / false ]
#define USELFS false  // LITTLEFS will be used instead of SPIFFS for the storage filesystem. 
                      // you must select a partition scheme labeled with "SPIFFS" with this enabled and USEFAT must be false.

                     // enable internal goldhen.h [ true / false ]
#define INTHEN true  // goldhen is placed in the app partition to free up space on the storage for other payloads. 
                     // with this enabled you do not upload goldhen to the board, set this to false if you wish to upload goldhen.

                       // enable autohen [ true / false ]
#define AUTOHEN false  // this will load goldhen instead of the normal index/payload selection page, use this if you only want hen and no other payloads. 
                       // you can update goldhen by uploading the goldhen payload to the board storage with the filename "goldhen.bin".

                     // enable fan threshold [ true / false ]
#define FANMOD true  // this will include a function to set the consoles fan ramp up temperature in °C 
                     // this will not work if the board is a esp32 and the usb control is disabled.



//-------------------DEFAULT SETTINGS------------------//

                        // use config.ini [ true / false ]
#define USECONFIG true  // this will allow you to change these settings below via the admin webpage. 
                        // if you want to permanently use the values below then set this to false.

//create access point
boolean startAP = true;
String AP_SSID = "PS4_WEB_AP";
String AP_PASS = "password";
IPAddress Server_IP(10, 1, 1, 1);
IPAddress Subnet_Mask(255, 255, 255, 0);

//connect to wifi
boolean connectWifi = false;
String WIFI_SSID = "Home_WIFI";
String WIFI_PASS = "password";
String WIFI_HOSTNAME = "ps4.local";

//server port
int WEB_PORT = 80;

//Auto Usb Wait(milliseconds)
int USB_WAIT = 10000;

// Displayed firmware version
String firmwareVer = "1.00";

//ESP sleep after x minutes
boolean espSleep = false;
int TIME2SLEEP = 30;  // minutes


//-----------------------------------------------------//


#include "Loader.h"
#include "Pages.h"
#include "jzip.h"

#if USESD
#include "SD.h"
#include "SPI.h"
#define SCK 12   // pins for sd card
#define MISO 13  // these values are set for the LILYGO TTGO T8 ESP32-S2 board
#define MOSI 11  // you may need to change these for other boards
#define SS 10
#define FILESYS SD
#elif USELILYSD
#include "SD_MMC.h"
#define SD0 14
#define SD1 17 // pins for the LilyGO T-Dongle-S3 sd card
#define SD2 21 // do not change these values
#define SD3 18 // the sd card slot is located in the usb A end of the dongle
#define CLK 12
#define CMD 16
#define FILESYS SD_MMC
#else
#if USEFAT
#include "FFat.h"
#define FILESYS FFat
#else
#if USELFS
#include <LittleFS.h>
#define FILESYS LittleFS
#else
#include "SPIFFS.h"
#define FILESYS SPIFFS
#endif
#endif
#endif

#if INTHEN
#include "goldhen.h"
#endif

#if (!defined(USBCONTROL) | USBCONTROL) && FANMOD
#include "fan.h"
#endif

DNSServer dnsServer;
AsyncWebServer server(WEB_PORT);
boolean hasEnabled = false;
boolean isFormating = false;
long enTime = 0;
int ftemp = 70;
long bootTime = 0;
File upFile;
#if defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)
USBMSC dev;
#endif
//USBCDC USBSerial;



String split(String str, String from, String to) {
  String tmpstr = str;
  tmpstr.toLowerCase();
  from.toLowerCase();
  to.toLowerCase();
  int pos1 = tmpstr.indexOf(from);
  int pos2 = tmpstr.indexOf(to, pos1 + from.length());
  String retval = str.substring(pos1 + from.length(), pos2);
  return retval;
}


bool instr(String str, String search) {
  int result = str.indexOf(search);
  if (result == -1) {
    return false;
  }
  return true;
}


String formatBytes(size_t bytes) {
  if (bytes < 1024) {
    return String(bytes) + " B";
  } else if (bytes < (1024 * 1024)) {
    return String(bytes / 1024.0) + " KB";
  } else if (bytes < (1024 * 1024 * 1024)) {
    return String(bytes / 1024.0 / 1024.0) + " MB";
  } else {
    return String(bytes / 1024.0 / 1024.0 / 1024.0) + " GB";
  }
}


String urlencode(String str) {
  String encodedString = "";
  char c;
  char code0;
  char code1;
  char code2;
  for (int i = 0; i < str.length(); i++) {
    c = str.charAt(i);
    if (c == ' ') {
      encodedString += '+';
    } else if (isalnum(c)) {
      encodedString += c;
    } else {
      code1 = (c & 0xf) + '0';
      if ((c & 0xf) > 9) {
        code1 = (c & 0xf) - 10 + 'A';
      }
      c = (c >> 4) & 0xf;
      code0 = c + '0';
      if (c > 9) {
        code0 = c - 10 + 'A';
      }
      code2 = '\0';
      encodedString += '%';
      encodedString += code0;
      encodedString += code1;
    }
    yield();
  }
  encodedString.replace("%2E", ".");
  return encodedString;
}


void sendwebmsg(AsyncWebServerRequest *request, String htmMsg) {
  String tmphtm = "<!DOCTYPE html><html><head><link rel=\"stylesheet\" href=\"style.css\"></head><center><br><br><br><br><br><br>" + htmMsg + "</center></html>";
  request->send(200, "text/html", tmphtm);
}


void handleFwUpdate(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
  if (!index) {
    String path = request->url();
    if (path != "/update.html") {
      request->send(500, "text/plain", "Internal Server Error");
      return;
    }
    if (!filename.equals("fwupdate.bin")) {
      sendwebmsg(request, "Invalid update file: " + filename);
      return;
    }
    if (!filename.startsWith("/")) {
      filename = "/" + filename;
    }
    //USBSerial.printf("Update Start: %s\n", filename.c_str());
    if (!Update.begin((ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000)) {
      Update.printError(Serial);
      sendwebmsg(request, "Update Failed: " + String(Update.errorString()));
    }
  }
  if (!Update.hasError()) {
    if (Update.write(data, len) != len) {
      Update.printError(Serial);
      sendwebmsg(request, "Update Failed: " + String(Update.errorString()));
    }
  }
  if (final) {
    if (Update.end(true)) {
      //USBSerial.printf("Update Success: %uB\n", index+len);
      String tmphtm = "<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"8; url=/info.html\"><style type=\"text/css\">body {background-color: #1451AE; color: #ffffff; font-size: 20px; font-weight: bold; margin: 0 0 0 0.0; padding: 0.4em 0.4em 0.4em 0.6em;}</style></head><center><br><br><br><br><br><br>Update Success, Rebooting.</center></html>";
      request->send(200, "text/html", tmphtm);
      delay(1000);
      ESP.restart();
    } else {
      Update.printError(Serial);
    }
  }
}


void handleDelete(AsyncWebServerRequest *request) {
  if (!request->hasParam("file", true)) {
    request->redirect("/fileman.html");
    return;
  }
  String path = request->getParam("file", true)->value();
  if (path.length() == 0) {
    request->redirect("/fileman.html");
    return;
  }
  if (FILESYS.exists("/" + path) && path != "/" && !path.equals("config.ini")) {
    FILESYS.remove("/" + path);
  }
  request->redirect("/fileman.html");
}



void handleFileMan(AsyncWebServerRequest *request) {
  File dir = FILESYS.open("/");
  String output = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><title>File Manager</title><link rel=\"stylesheet\" href=\"style.css\"><style>body{overflow-y:auto;} th{border: 1px solid #dddddd; background-color:gray;padding: 8px;}</style><script>function statusDel(fname) {var answer = confirm(\"Are you sure you want to delete \" + fname + \" ?\");if (answer) {return true;} else { return false; }} </script></head><body><br><table id=filetable></table><script>var filelist = [";
  int fileCount = 0;
  while (dir) {
    File file = dir.openNextFile();
    if (!file) {
      dir.close();
      break;
    }
    String fname = String(file.name());
    if (fname.length() > 0 && !fname.equals("config.ini") && !file.isDirectory()) {
      fileCount++;
      fname.replace("|", "%7C");
      fname.replace("\"", "%22");
      output += "\"" + fname + "|" + formatBytes(file.size()) + "\",";
    }
    file.close();
    esp_task_wdt_reset();
  }
  if (fileCount == 0) {
    output += "];</script><center>No files found<br>You can upload files using the <a href=\"/upload.html\" target=\"mframe\"><u>File Uploader</u></a> page.</center></p></body></html>";
  } else {
    output += "];var output = \"\";filelist.forEach(function(entry) {var splF = entry.split(\"|\"); output += \"<tr>\";output += \"<td><a href=\\\"\" +  splF[0] + \"\\\">\" + splF[0] + \"</a></td>\"; output += \"<td>\" + splF[1] + \"</td>\";output += \"<td><a href=\\\"/\" + splF[0] + \"\\\" download><button type=\\\"submit\\\">Download</button></a></td>\";output += \"<td><form action=\\\"/delete\\\" method=\\\"post\\\"><button type=\\\"submit\\\" name=\\\"file\\\" value=\\\"\" + splF[0] + \"\\\" onClick=\\\"return statusDel('\" + splF[0] + \"');\\\">Delete</button></form></td>\";output += \"</tr>\";}); document.getElementById(\"filetable\").innerHTML = \"<tr><th colspan='1'><center>File Name</center></th><th colspan='1'><center>File Size</center></th><th colspan='1'><center><a href='/dlall' target='mframe'><button type='submit'>Download All</button></a></center></th><th colspan='1'><center><a href='/format.html' target='mframe'><button type='submit'>Delete All</button></a></center></th></tr>\" + output;</script></body></html>";
  }
  request->send(200, "text/html", output);
}


void handleDlFiles(AsyncWebServerRequest *request) {
  File dir = FILESYS.open("/");
  String output = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><title>File Downloader</title><link rel=\"stylesheet\" href=\"style.css\"><style>body{overflow-y:auto;}</style><script type=\"text/javascript\" src=\"jzip.js\"></script><script>var filelist = [";
  int fileCount = 0;
  while (dir) {
    File file = dir.openNextFile();
    if (!file) {
      dir.close();
      break;
    }
    String fname = String(file.name());
    if (fname.length() > 0 && !fname.equals("config.ini") && !file.isDirectory()) {
      fileCount++;
      fname.replace("\"", "%22");
      output += "\"" + fname + "\",";
    }
    file.close();
    esp_task_wdt_reset();
  }
  if (fileCount == 0) {
    output += "];</script></head><center>No files found to download<br>You can upload files using the <a href=\"/upload.html\" target=\"mframe\"><u>File Uploader</u></a> page.</center></p></body></html>";
  } else {
    output += "]; async function dlAll(){var zip = new JSZip();for (var i = 0; i < filelist.length; i++) {if (filelist[i] != ''){var xhr = new XMLHttpRequest();xhr.open('GET',filelist[i],false);xhr.overrideMimeType('text/plain; charset=x-user-defined'); xhr.onload = function(e) {if (this.status == 200) {zip.file(filelist[i], this.response,{binary: true});}};xhr.send();document.getElementById('fp').innerHTML = 'Adding: ' + filelist[i];await new Promise(r => setTimeout(r, 50));}}document.getElementById('gen').style.display = 'none';document.getElementById('comp').style.display = 'block';zip.generateAsync({type:'blob'}).then(function(content) {saveAs(content,'esp_files.zip');});}</script></head><body onload='setTimeout(dlAll,100);'><center><br><br><br><br><div id='gen' style='display:block;'><div id='loader'></div><br><br>Generating ZIP<br><p id='fp'></p></div><div id='comp' style='display:none;'><br><br><br><br>Complete<br><br>Downloading: esp_files.zip</div></center></body></html>";
  }
  request->send(200, "text/html", output);
}


void handlePayloads(AsyncWebServerRequest *request) {
  File dir = FILESYS.open("/");
  String output = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><title>ESP Server</title><link rel=\"stylesheet\" href=\"style.css\"><style>body { background-color: #1451AE; color: #ffffff; font-size: 14px; font-weight: bold; margin: 0 0 0 0.0; overflow-y:hidden; text-shadow: 3px 2px DodgerBlue;}</style><script>function setpayload(payload,title,waittime){ sessionStorage.setItem('payload', payload); sessionStorage.setItem('title', title); sessionStorage.setItem('waittime', waittime);  window.open('loader.html', '_self');}</script></head><body><center><h1>9.00 Payloads</h1>";
  int cntr = 0;
  int payloadCount = 0;
  if (USB_WAIT < 5000) { USB_WAIT = 5000; }  // correct unrealistic timing values
  if (USB_WAIT > 25000) { USB_WAIT = 25000; }

#if INTHEN
  payloadCount++;
  cntr++;
  output += "<a onclick=\"setpayload('goldhen.bin','" + String(INTHEN_NAME) + "','" + String(USB_WAIT) + "')\"><button class=\"btn\">" + String(INTHEN_NAME) + "</button></a>&nbsp;";
#endif

  while (dir) {
    File file = dir.openNextFile();
    if (!file) {
      dir.close();
      break;
    }
    String fname = String(file.name());
    if (fname.endsWith(".gz")) {
      fname = fname.substring(0, fname.length() - 3);
    }
    if (fname.length() > 0 && fname.endsWith(".bin") && !file.isDirectory()) {
      payloadCount++;
      String fnamev = fname;
      fnamev.replace(".bin", "");
      output += "<a onclick=\"setpayload('" + urlencode(fname) + "','" + fnamev + "','" + String(USB_WAIT) + "')\"><button class=\"btn\">" + fnamev + "</button></a>&nbsp;";
      cntr++;
      if (cntr == 4) {
        cntr = 0;
        output += "<p></p>";
      }
    }
    file.close();
    esp_task_wdt_reset();
  }

#if (!defined(USBCONTROL) | USBCONTROL) && FANMOD
  payloadCount++;
  output += "<br><p><a onclick='setfantemp()'><button class='btn'>Set Fan Threshold</button></a><select id='temp' class='slct'></select></p><script>function setfantemp(){var e = document.getElementById('temp');var temp = e.value;var xhr = new XMLHttpRequest();xhr.open('POST', 'setftemp', true);xhr.onload = function(e) {if (this.status == 200) {sessionStorage.setItem('payload', 'fant.bin'); sessionStorage.setItem('title', 'Fan Temp ' + temp + ' &deg;C'); localStorage.setItem('temp', temp); sessionStorage.setItem('waittime', '10000');  window.open('loader.html', '_self');}};xhr.send('temp=' + temp);}var stmp = localStorage.getItem('temp');if (!stmp){stmp = 70;}for(var i=55; i<=85; i=i+5){var s = document.getElementById('temp');var o = document.createElement('option');s.options.add(o);o.text = i + String.fromCharCode(32,176,67);o.value = i;if (i == stmp){o.selected = true;}}</script>";
#endif

  if (payloadCount == 0) {
    output += "<msg>No .bin payloads found<br>You need to upload the payloads to the ESP32 board.<br>in the arduino ide select <b>Tools</b> &gt; <b>ESP32 Sketch Data Upload</b><br>or<br>Using a pc/laptop connect to <b>" + AP_SSID + "</b> and navigate to <a href=\"/admin.html\"><u>http://" + WIFI_HOSTNAME + "/admin.html</u></a> and upload the .bin payloads using the <b>File Uploader</b></msg></center></body></html>";
  }
  output += "</center></body></html>";
  request->send(200, "text/html", output);
}


#if USECONFIG
void handleConfig(AsyncWebServerRequest *request) {
  if (request->hasParam("ap_ssid", true) && request->hasParam("ap_pass", true) && request->hasParam("web_ip", true) && request->hasParam("web_port", true) && request->hasParam("subnet", true) && request->hasParam("wifi_ssid", true) && request->hasParam("wifi_pass", true) && request->hasParam("wifi_host", true) && request->hasParam("usbwait", true)) {
    AP_SSID = request->getParam("ap_ssid", true)->value();
    if (!request->getParam("ap_pass", true)->value().equals("********")) {
      AP_PASS = request->getParam("ap_pass", true)->value();
    }
    WIFI_SSID = request->getParam("wifi_ssid", true)->value();
    if (!request->getParam("wifi_pass", true)->value().equals("********")) {
      WIFI_PASS = request->getParam("wifi_pass", true)->value();
    }
    String tmpip = request->getParam("web_ip", true)->value();
    String tmpwport = request->getParam("web_port", true)->value();
    String tmpsubn = request->getParam("subnet", true)->value();
    String WIFI_HOSTNAME = request->getParam("wifi_host", true)->value();
    String tmpua = "false";
    String tmpcw = "false";
    String tmpslp = "false";
    if (request->hasParam("useap", true)) { tmpua = "true"; }
    if (request->hasParam("usewifi", true)) { tmpcw = "true"; }
    if (request->hasParam("espsleep", true)) { tmpslp = "true"; }
    if (tmpua.equals("false") && tmpcw.equals("false")) { tmpua = "true"; }
    int USB_WAIT = request->getParam("usbwait", true)->value().toInt();
    int TIME2SLEEP = request->getParam("sleeptime", true)->value().toInt();
    File iniFile = FILESYS.open("/config.ini", "w");
    if (iniFile) {
      iniFile.print("\r\nAP_SSID=" + AP_SSID + "\r\nAP_PASS=" + AP_PASS + "\r\nWEBSERVER_IP=" + tmpip + "\r\nWEBSERVER_PORT=" + tmpwport + "\r\nSUBNET_MASK=" + tmpsubn + "\r\nWIFI_SSID=" + WIFI_SSID + "\r\nWIFI_PASS=" + WIFI_PASS + "\r\nWIFI_HOST=" + WIFI_HOSTNAME + "\r\nUSEAP=" + tmpua + "\r\nCONWIFI=" + tmpcw + "\r\nUSBWAIT=" + USB_WAIT + "\r\nESPSLEEP=" + tmpslp + "\r\nSLEEPTIME=" + TIME2SLEEP + "\r\n");
      iniFile.close();
    }
    String htmStr = "<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"8; url=/info.html\"><style type=\"text/css\">#loader {z-index: 1;width: 50px;height: 50px;margin: 0 0 0 0;border: 6px solid #f3f3f3;border-radius: 50%;border-top: 6px solid #3498db;width: 50px;height: 50px;-webkit-animation: spin 2s linear infinite;animation: spin 2s linear infinite; } @-webkit-keyframes spin {0%{-webkit-transform: rotate(0deg);}100%{-webkit-transform: rotate(360deg);}}@keyframes spin{0%{ transform: rotate(0deg);}100%{transform: rotate(360deg);}}body {background-color: #1451AE; color: #ffffff; font-size: 20px; font-weight: bold; margin: 0 0 0 0.0; padding: 0.4em 0.4em 0.4em 0.6em;} #msgfmt {font-size: 16px; font-weight: normal;}#status {font-size: 16px; font-weight: normal;}</style></head><center><br><br><br><br><br><p id=\"status\"><div id='loader'></div><br>Config saved<br>Rebooting</p></center></html>";
    request->send(200, "text/html", htmStr);
    delay(1000);
    ESP.restart();
  } else {
    request->redirect("/config.html");
  }
}
#endif


void handleReboot(AsyncWebServerRequest *request) {
  //USBSerial.print("Rebooting ESP");
  AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", rebooting_gz, sizeof(rebooting_gz));
  response->addHeader("Content-Encoding", "gzip");
  request->send(response);
  delay(1000);
  ESP.restart();
}


#if USECONFIG
void handleConfigHtml(AsyncWebServerRequest *request) {
  String tmpUa = "";
  String tmpCw = "";
  String tmpSlp = "";
  if (startAP) { tmpUa = "checked"; }
  if (connectWifi) { tmpCw = "checked"; }
  if (espSleep) { tmpSlp = "checked"; }

  String htmStr = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><title>Config Editor</title><style type=\"text/css\">body {background-color: #1451AE; color: #ffffff; font-size: 14px;font-weight: bold;margin: 0 0 0 0.0;padding: 0.4em 0.4em 0.4em 0.6em;}input[type=\"submit\"]:hover {background: #ffffff;color: green;}input[type=\"submit\"]:active{outline-color: green;color: green;background: #ffffff; }table {font-family: arial, sans-serif;border-collapse: collapse;}td {border: 1px solid #dddddd;text-align: left;padding: 8px;}th {border: 1px solid #dddddd; background-color:gray;text-align: center;padding: 8px;}</style></head><body><form action=\"/config.html\" method=\"post\"><center><table><tr><th colspan=\"2\"><center>Access Point</center></th></tr><tr><td>AP SSID:</td><td><input name=\"ap_ssid\" value=\"" + AP_SSID + "\"></td></tr><tr><td>AP PASSWORD:</td><td><input name=\"ap_pass\" value=\"********\"></td></tr><tr><td>AP IP:</td><td><input name=\"web_ip\" value=\"" + Server_IP.toString() + "\"></td></tr><tr><td>SUBNET MASK:</td><td><input name=\"subnet\" value=\"" + Subnet_Mask.toString() + "\"></td></tr><tr><td>START AP:</td><td><input type=\"checkbox\" name=\"useap\" " + tmpUa + "></td></tr><tr><th colspan=\"2\"><center>Web Server</center></th></tr><tr><td>WEBSERVER PORT:</td><td><input name=\"web_port\" value=\"" + String(WEB_PORT) + "\"></td></tr><tr><th colspan=\"2\"><center>Wifi Connection</center></th></tr><tr><td>WIFI SSID:</td><td><input name=\"wifi_ssid\" value=\"" + WIFI_SSID + "\"></td></tr><tr><td>WIFI PASSWORD:</td><td><input name=\"wifi_pass\" value=\"********\"></td></tr><tr><td>WIFI HOSTNAME:</td><td><input name=\"wifi_host\" value=\"" + WIFI_HOSTNAME + "\"></td></tr><tr><td>CONNECT WIFI:</td><td><input type=\"checkbox\" name=\"usewifi\" " + tmpCw + "></td></tr><tr><th colspan=\"2\"><center>Auto USB Wait</center></th></tr><tr><td>WAIT TIME(ms):</td><td><input name=\"usbwait\" value=\"" + USB_WAIT + "\"></td></tr><tr><th colspan=\"2\"><center>ESP Sleep Mode</center></th></tr><tr><td>ENABLE SLEEP:</td><td><input type=\"checkbox\" name=\"espsleep\" " + tmpSlp + "></td></tr><tr><td>TIME TO SLEEP(minutes):</td><td><input name=\"sleeptime\" value=\"" + TIME2SLEEP + "\"></td></tr></table><br><input id=\"savecfg\" type=\"submit\" value=\"Save Config\"></center></form></body></html>";
  request->send(200, "text/html", htmStr);
}
#endif


void handleFileUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
  if (!index) {
    String path = request->url();
    if (path != "/upload.html") {
      request->send(500, "text/plain", "Internal Server Error");
      return;
    }
    if (!filename.startsWith("/")) {
      filename = "/" + filename;
    }
    if (filename.equals("/config.ini")) { return; }
    //USBSerial.printf("Upload Start: %s\n", filename.c_str());
    upFile = FILESYS.open(filename, "w");
  }
  if (upFile) {
    upFile.write(data, len);
  }
  if (final) {
    upFile.close();
    //USBSerial.printf("upload Success: %uB\n", index+len);
  }
}


void handleConsoleUpdate(String rgn, AsyncWebServerRequest *request) {
  String Version = "05.050.000";
  String sVersion = "05.050.000";
  String lblVersion = "5.05";
  String imgSize = "0";
  String imgPath = "";
  String xmlStr = "<?xml version=\"1.0\" ?><update_data_list><region id=\"" + rgn + "\"><force_update><system level0_system_ex_version=\"0\" level0_system_version=\"" + Version + "\" level1_system_ex_version=\"0\" level1_system_version=\"" + Version + "\"/></force_update><system_pup ex_version=\"0\" label=\"" + lblVersion + "\" sdk_version=\"" + sVersion + "\" version=\"" + Version + "\"><update_data update_type=\"full\"><image size=\"" + imgSize + "\">" + imgPath + "</image></update_data></system_pup><recovery_pup type=\"default\"><system_pup ex_version=\"0\" label=\"" + lblVersion + "\" sdk_version=\"" + sVersion + "\" version=\"" + Version + "\"/><image size=\"" + imgSize + "\">" + imgPath + "</image></recovery_pup></region></update_data_list>";
  request->send(200, "text/xml", xmlStr);
}

#if !USBCONTROL && defined(CONFIG_IDF_TARGET_ESP32)
void handleCacheManifest(AsyncWebServerRequest *request) {
#if !USBCONTROL
  String output = "CACHE MANIFEST\r\n";
  File dir = FILESYS.open("/");
  while (dir) {
    File file = dir.openNextFile();
    if (!file) {
      dir.close();
      break;
    }
    String fname = String(file.name());
    if (fname.length() > 0 && !fname.equals("config.ini") && !file.isDirectory()) {
      if (fname.endsWith(".gz")) {
        fname = fname.substring(0, fname.length() - 3);
      }
      output += urlencode(fname) + "\r\n";
    }
    file.close();
  }
  if (!instr(output, "index.html\r\n")) {
    output += "index.html\r\n";
  }
  if (!instr(output, "menu.html\r\n")) {
    output += "menu.html\r\n";
  }
  if (!instr(output, "loader.html\r\n")) {
    output += "loader.html\r\n";
  }
  if (!instr(output, "payloads.html\r\n")) {
    output += "payloads.html\r\n";
  }
  if (!instr(output, "exploit.js\r\n")) {
    output += "exploit.js\r\n";
  }
  if (!instr(output, "style.css\r\n")) {
    output += "style.css\r\n";
  }
#if INTHEN
  if (!instr(output, "goldhen.bin\r\n")) {
    output += "goldhen.bin\r\n";
  }
#endif
  request->send(200, "text/cache-manifest", output);
#else
  request->send(404);
#endif
}
#endif

void handleInfo(AsyncWebServerRequest *request) {
  float flashFreq = (float)ESP.getFlashChipSpeed() / 1000.0 / 1000.0;
  FlashMode_t ideMode = ESP.getFlashChipMode();
  String mcuType = CONFIG_IDF_TARGET;
  mcuType.toUpperCase();
  String output = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><title>System Information</title><link rel=\"stylesheet\" href=\"style.css\"></head>";
  output += "<hr>###### Software ######<br><br>";
  output += "Firmware version " + firmwareVer + "<br>";
  output += "SDK version: " + String(ESP.getSdkVersion()) + "<br><hr>";
  output += "###### Board ######<br><br>";
  output += "MCU: " + mcuType + "<br>";
#if defined(USB_PRODUCT)
  output += "Board: " + String(USB_PRODUCT) + "<br>";
#endif
  output += "Chip Id: " + String(ESP.getChipModel()) + "<br>";
  output += "CPU frequency: " + String(ESP.getCpuFreqMHz()) + "MHz<br>";
  output += "Cores: " + String(ESP.getChipCores()) + "<br><hr>";
  output += "###### Flash chip information ######<br><br>";
  output += "Flash chip Id: " + String(ESP.getFlashChipMode()) + "<br>";
  output += "Estimated Flash size: " + formatBytes(ESP.getFlashChipSize()) + "<br>";
  output += "Flash frequency: " + String(flashFreq) + " MHz<br>";
  output += "Flash write mode: " + String((ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT"
                                                                     : ideMode == FM_DIO  ? "DIO"
                                                                     : ideMode == FM_DOUT ? "DOUT"
                                                                                          : "UNKNOWN"))
            + "<br><hr>";
  output += "###### Storage information ######<br><br>";
#if USESD || USELILYSD
  output += "Storage Device: SD<br>";
#elif USEFAT
  output += "Filesystem: FatFs<br>";
#elif USELFS
  output += "Filesystem: LittleFS<br>";
#else
  output += "Filesystem: SPIFFS<br>";
#endif
  output += "Total Size: " + formatBytes(FILESYS.totalBytes()) + "<br>";
  output += "Used Space: " + formatBytes(FILESYS.usedBytes()) + "<br>";
  output += "Free Space: " + formatBytes(FILESYS.totalBytes() - FILESYS.usedBytes()) + "<br><hr>";
#if defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)
  if (ESP.getPsramSize() > 0) {
    output += "###### PSRam information ######<br><br>";
    output += "Psram Size: " + formatBytes(ESP.getPsramSize()) + "<br>";
    output += "Free psram: " + formatBytes(ESP.getFreePsram()) + "<br>";
    output += "Max alloc psram: " + formatBytes(ESP.getMaxAllocPsram()) + "<br><hr>";
  }
#endif
  output += "###### Ram information ######<br><br>";
  output += "Ram size: " + formatBytes(ESP.getHeapSize()) + "<br>";
  output += "Free ram: " + formatBytes(ESP.getFreeHeap()) + "<br>";
  output += "Max alloc ram: " + formatBytes(ESP.getMaxAllocHeap()) + "<br><hr>";
  output += "###### Sketch information ######<br><br>";
  output += "Sketch hash: " + ESP.getSketchMD5() + "<br>";
  output += "Sketch size: " + formatBytes(ESP.getSketchSize()) + "<br>";
  output += "Free space available: " + formatBytes(ESP.getFreeSketchSpace() - ESP.getSketchSize()) + "<br><hr>";
  output += "</html>";
  request->send(200, "text/html", output);
}


#if USECONFIG
void writeConfig() {
  File iniFile = FILESYS.open("/config.ini", "w");
  if (iniFile) {
    String tmpua = "false";
    String tmpcw = "false";
    String tmpslp = "false";
    if (startAP) { tmpua = "true"; }
    if (connectWifi) { tmpcw = "true"; }
    if (espSleep) { tmpslp = "true"; }
    iniFile.print("\r\nAP_SSID=" + AP_SSID + "\r\nAP_PASS=" + AP_PASS + "\r\nWEBSERVER_IP=" + Server_IP.toString() + "\r\nWEBSERVER_PORT=" + String(WEB_PORT) + "\r\nSUBNET_MASK=" + Subnet_Mask.toString() + "\r\nWIFI_SSID=" + WIFI_SSID + "\r\nWIFI_PASS=" + WIFI_PASS + "\r\nWIFI_HOST=" + WIFI_HOSTNAME + "\r\nUSEAP=" + tmpua + "\r\nCONWIFI=" + tmpcw + "\r\nUSBWAIT=" + USB_WAIT + "\r\nESPSLEEP=" + tmpslp + "\r\nSLEEPTIME=" + TIME2SLEEP + "\r\n");
    iniFile.close();
  }
}
#endif


void setup() {
  //USBSerial.begin(115200);
  //USBSerial.println("Version: " + firmwareVer);
  //USBSerial.begin();

  pinMode(38, OUTPUT);
  digitalWrite(38, HIGH); 

#if USBCONTROL && defined(CONFIG_IDF_TARGET_ESP32)
  pinMode(usbPin, OUTPUT);
  digitalWrite(usbPin, LOW);
#endif

#if USESD
  SPI.begin(SCK, MISO, MOSI, SS);
  if (FILESYS.begin(SS, SPI)) {
#elif USELILYSD
  FILESYS.setPins(CLK, CMD, SD0, SD1, SD2, SD3);
  if (FILESYS.begin()) {
#else
  if (FILESYS.begin(true)) {
#endif

#if USECONFIG
    if (FILESYS.exists("/config.ini")) {
      File iniFile = FILESYS.open("/config.ini", "r");
      if (iniFile) {
        String iniData;
        while (iniFile.available()) {
          char chnk = iniFile.read();
          iniData += chnk;
        }
        iniFile.close();

        if (instr(iniData, "AP_SSID=")) {
          AP_SSID = split(iniData, "AP_SSID=", "\r\n");
          AP_SSID.trim();
        }

        if (instr(iniData, "AP_PASS=")) {
          AP_PASS = split(iniData, "AP_PASS=", "\r\n");
          AP_PASS.trim();
        }

        if (instr(iniData, "WEBSERVER_IP=")) {
          String strwIp = split(iniData, "WEBSERVER_IP=", "\r\n");
          strwIp.trim();
          Server_IP.fromString(strwIp);
        }

        if (instr(iniData, "SUBNET_MASK=")) {
          String strsIp = split(iniData, "SUBNET_MASK=", "\r\n");
          strsIp.trim();
          Subnet_Mask.fromString(strsIp);
        }

        if (instr(iniData, "WIFI_SSID=")) {
          WIFI_SSID = split(iniData, "WIFI_SSID=", "\r\n");
          WIFI_SSID.trim();
        }

        if (instr(iniData, "WIFI_PASS=")) {
          WIFI_PASS = split(iniData, "WIFI_PASS=", "\r\n");
          WIFI_PASS.trim();
        }

        if (instr(iniData, "WIFI_HOST=")) {
          WIFI_HOSTNAME = split(iniData, "WIFI_HOST=", "\r\n");
          WIFI_HOSTNAME.trim();
        }

        if (instr(iniData, "USEAP=")) {
          String strua = split(iniData, "USEAP=", "\r\n");
          strua.trim();
          if (strua.equals("true")) {
            startAP = true;
          } else {
            startAP = false;
          }
        }

        if (instr(iniData, "CONWIFI=")) {
          String strcw = split(iniData, "CONWIFI=", "\r\n");
          strcw.trim();
          if (strcw.equals("true")) {
            connectWifi = true;
          } else {
            connectWifi = false;
          }
        }

        if (instr(iniData, "USBWAIT=")) {
          String strusw = split(iniData, "USBWAIT=", "\r\n");
          strusw.trim();
          USB_WAIT = strusw.toInt();
        }

        if (instr(iniData, "ESPSLEEP=")) {
          String strsl = split(iniData, "ESPSLEEP=", "\r\n");
          strsl.trim();
          if (strsl.equals("true")) {
            espSleep = true;
          } else {
            espSleep = false;
          }
        }

        if (instr(iniData, "SLEEPTIME=")) {
          String strslt = split(iniData, "SLEEPTIME=", "\r\n");
          strslt.trim();
          TIME2SLEEP = strslt.toInt();
        }
      }
    } else {
      writeConfig();
    }
#endif
  } else {
    //USBSerial.println("Filesystem failed to mount");
  }

  if (startAP) {
    //USBSerial.println("SSID: " + AP_SSID);
    //USBSerial.println("Password: " + AP_PASS);
    //USBSerial.println("");
    //USBSerial.println("WEB Server IP: " + Server_IP.toString());
    //USBSerial.println("Subnet: " + Subnet_Mask.toString());
    //USBSerial.println("WEB Server Port: " + String(WEB_PORT));
    //USBSerial.println("");
    WiFi.softAPConfig(Server_IP, Server_IP, Subnet_Mask);
    WiFi.softAP(AP_SSID.c_str(), AP_PASS.c_str());
    //USBSerial.println("WIFI AP started");
    dnsServer.setTTL(30);
    dnsServer.setErrorReplyCode(DNSReplyCode::ServerFailure);
    dnsServer.start(53, "*", Server_IP);
    //USBSerial.println("DNS server started");
    //USBSerial.println("DNS Server IP: " + Server_IP.toString());
  }

  if (connectWifi && WIFI_SSID.length() > 0 && WIFI_PASS.length() > 0) {
    WiFi.setAutoConnect(true);
    WiFi.setAutoReconnect(true);
    WiFi.hostname(WIFI_HOSTNAME);
    WiFi.begin(WIFI_SSID.c_str(), WIFI_PASS.c_str());
    //USBSerial.println("WIFI connecting");
    if (WiFi.waitForConnectResult() != WL_CONNECTED) {
      //USBSerial.println("Wifi failed to connect");
    } else {
      IPAddress LAN_IP = WiFi.localIP();
      if (LAN_IP) {
        //USBSerial.println("Wifi Connected");
        //USBSerial.println("WEB Server LAN IP: " + LAN_IP.toString());
        //USBSerial.println("WEB Server Port: " + String(WEB_PORT));
        //USBSerial.println("WEB Server Hostname: " + WIFI_HOSTNAME);
        String mdnsHost = WIFI_HOSTNAME;
        mdnsHost.replace(".local", "");
        MDNS.begin(mdnsHost.c_str());
        if (!startAP) {
          dnsServer.setTTL(30);
          dnsServer.setErrorReplyCode(DNSReplyCode::ServerFailure);
          dnsServer.start(53, "*", LAN_IP);
          //USBSerial.println("DNS server started");
          //USBSerial.println("DNS Server IP: " + LAN_IP.toString());
        }
      }
    }
  }


  server.on("/connecttest.txt", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(200, "text/plain", "Microsoft Connect Test");
  });
#if !USBCONTROL && defined(CONFIG_IDF_TARGET_ESP32)
  server.on("/cache.manifest", HTTP_GET, [](AsyncWebServerRequest *request) {
    handleCacheManifest(request);
  });
#endif

#if USECONFIG
  server.on("/config.ini", HTTP_ANY, [](AsyncWebServerRequest *request) {
    request->send(404);
  });
#endif

  server.on("/upload.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", upload_gz, sizeof(upload_gz));
    response->addHeader("Content-Encoding", "gzip");
    request->send(response);
  });

  server.on(
    "/upload.html", HTTP_POST, [](AsyncWebServerRequest *request) {
      request->redirect("/fileman.html");
    },
    handleFileUpload);

  server.on("/fileman.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    handleFileMan(request);
  });

  server.on("/delete", HTTP_POST, [](AsyncWebServerRequest *request) {
    handleDelete(request);
  });

#if USECONFIG
  server.on("/config.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    handleConfigHtml(request);
  });

  server.on("/config.html", HTTP_POST, [](AsyncWebServerRequest *request) {
    handleConfig(request);
  });
#endif

  server.on("/admin.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", admin_gz, sizeof(admin_gz));
    response->addHeader("Content-Encoding", "gzip");
    request->send(response);
  });

  server.on("/reboot.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", reboot_gz, sizeof(reboot_gz));
    response->addHeader("Content-Encoding", "gzip");
    request->send(response);
  });

  server.on("/reboot.html", HTTP_POST, [](AsyncWebServerRequest *request) {
    handleReboot(request);
  });

  server.on("/update.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", update_gz, sizeof(update_gz));
    response->addHeader("Content-Encoding", "gzip");
    request->send(response);
  });

  server.on(
    "/update.html", HTTP_POST, [](AsyncWebServerRequest *request) {
    },
    handleFwUpdate);

  server.on("/info.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    handleInfo(request);
  });

  server.on("/usbon", HTTP_POST, [](AsyncWebServerRequest *request) {
    enableUSB();
    request->send(200, "text/plain", "ok");
  });

  server.on("/usboff", HTTP_POST, [](AsyncWebServerRequest *request) {
    disableUSB();
    request->send(200, "text/plain", "ok");
  });

  server.on("/format.html", HTTP_GET, [](AsyncWebServerRequest *request) {
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", format_gz, sizeof(format_gz));
    response->addHeader("Content-Encoding", "gzip");
    request->send(response);
  });

  server.on("/format.html", HTTP_POST, [](AsyncWebServerRequest *request) {
    isFormating = true;
    request->send(304);
  });

  server.on("/dlall", HTTP_GET, [](AsyncWebServerRequest *request) {
    handleDlFiles(request);
  });

  server.on("/jzip.js", HTTP_GET, [](AsyncWebServerRequest *request) {
    AsyncWebServerResponse *response = request->beginResponse_P(200, "text/javascript", jzip_gz, sizeof(jzip_gz));
    response->addHeader("Content-Encoding", "gzip");
    request->send(response);
  });

#if (!defined(USBCONTROL) | USBCONTROL) && FANMOD
  server.on("/setftemp", HTTP_POST, [](AsyncWebServerRequest *request) {
    if (request->hasParam("temp", true)) {
      ftemp = request->getParam("temp", true)->value().toInt();
      request->send(200, "text/plain", "ok");
    } else {
      request->send(404);
    }
  });

  server.on("/fant.bin", HTTP_GET, [](AsyncWebServerRequest *request) {
    if (ftemp < 55 || ftemp > 85) { ftemp = 70; }
    uint8_t *fant = (uint8_t *)malloc(sizeof(uint8_t) * sizeof(fan));
    memcpy_P(fant, fan, sizeof(fan));
    fant[250] = ftemp;
    fant[368] = ftemp;
    AsyncWebServerResponse *response = request->beginResponse_P(200, "application/octet-stream", fant, sizeof(fan));
    request->send(response);
    free(fant);
  });
#endif

  server.serveStatic("/", FILESYS, "/").setDefaultFile("index.html");

  server.onNotFound([](AsyncWebServerRequest *request) {
    //USBSerial.println(request->url());
    String path = request->url();
    if (instr(path, "/update/ps4/")) {
      String Region = split(path, "/update/ps4/list/", "/");
      handleConsoleUpdate(Region, request);
      return;
    }
    if (instr(path, "/document/") && instr(path, "/ps4/")) {
      request->redirect("http://" + WIFI_HOSTNAME + "/index.html");
      return;
    }
    if (path.endsWith("index.html") || path.endsWith("index.htm") || path.endsWith("/")) {
      AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", index_gz, sizeof(index_gz));
      response->addHeader("Content-Encoding", "gzip");
      request->send(response);
      return;
    }
    if (path.endsWith("style.css")) {
      AsyncWebServerResponse *response = request->beginResponse_P(200, "text/css", style_gz, sizeof(style_gz));
      response->addHeader("Content-Encoding", "gzip");
      request->send(response);
      return;
    }
#if !USBCONTROL && defined(CONFIG_IDF_TARGET_ESP32)
    if (path.endsWith("menu.html")) {
      AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", menu_gz, sizeof(menu_gz));
      response->addHeader("Content-Encoding", "gzip");
      request->send(response);
      return;
    }
#endif
#if PSFREE
    if (path.endsWith("exploit.js")) {
      AsyncWebServerResponse *response = request->beginResponse_P(200, "text/javascript", psf_gz, sizeof(psf_gz));
      response->addHeader("Content-Encoding", "gzip");
      request->send(response);
      return;
    }
#endif
    if (path.endsWith("payloads.html")) {
#if AUTOHEN
      AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", autohen_gz, sizeof(autohen_gz));
      response->addHeader("Content-Encoding", "gzip");
      request->send(response);
#else
      handlePayloads(request);
#endif
      return;
    }
    if (path.endsWith("loader.html")) {
      AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", loader_gz, sizeof(loader_gz));
      response->addHeader("Content-Encoding", "gzip");
      request->send(response);
      return;
    }

#if INTHEN
    if (path.endsWith("goldhen.bin")) {
      AsyncWebServerResponse *response = request->beginResponse_P(200, "application/octet-stream", goldhen_gz, sizeof(goldhen_gz));
      response->addHeader("Content-Encoding", "gzip");
      request->send(response);
      return;
    }
#endif

    request->send(404);
  });


  DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*");
  server.begin();
  //USBSerial.println("HTTP server started");

  if (TIME2SLEEP < 5) { TIME2SLEEP = 5; }  //min sleep time
  bootTime = millis();
}


#if defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)
static int32_t onRead(uint32_t lba, uint32_t offset, void *buffer, uint32_t bufsize) {
  if (lba > 4) { lba = 4; }
  memcpy(buffer, exfathax[lba] + offset, bufsize);
  return bufsize;
}

void enableUSB() {
  dev.vendorID("PS4");
  dev.productID("ESP32 Server");
  dev.productRevision("1.0");
  dev.onRead(onRead);
  dev.mediaPresent(true);
  dev.begin(8192, 512);
  USB.begin();
  enTime = millis();
  hasEnabled = true;
}

void disableUSB() {
  enTime = 0;
  hasEnabled = false;
  dev.end();
  ESP.restart();
}
#else
void enableUSB() {
  digitalWrite(usbPin, HIGH);
  enTime = millis();
  hasEnabled = true;
}

void disableUSB() {
  enTime = 0;
  hasEnabled = false;
  digitalWrite(usbPin, LOW);
}
#endif


void loop() {
  if (espSleep && !isFormating) {
    if (millis() >= (bootTime + (TIME2SLEEP * 60000))) {
      //USBSerial.print("Esp sleep");
      digitalWrite(38, HIGH);
      gpio_hold_en((gpio_num_t)38);
      gpio_deep_sleep_hold_en();
      esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);
      esp_deep_sleep_start();
      return;
    }
  }
  if (hasEnabled && millis() >= (enTime + 15000)) {
    disableUSB();
  }
#if !USESD && !USELILYSD
  if (isFormating) {
    //USBSerial.print("Formatting Storage");
    isFormating = false;
    FILESYS.end();
    FILESYS.format();
    FILESYS.begin(true);
    delay(1000);
#if USECONFIG
    writeConfig();
#endif
  }
#endif
  dnsServer.processNextRequest();
}


================================================
FILE: ESP32_Server_900u/Loader.h
================================================
#if USBCONTROL | defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)
#if PSFREE
static const uint8_t loader_gz[] PROGMEM = {
    31, 139, 8, 8, 70, 235, 193, 101, 2, 255, 108, 111, 97, 100, 101, 114, 46, 104, 116, 109, 108, 0, 229, 125, 251, 147, 219, 54, 146, 240, 207, 59,
    127, 5, 51, 119, 23, 75, 177, 70, 226, 75, 20, 101, 121, 124, 165, 231, 109, 46, 206, 218, 95, 198, 73, 238, 202, 231, 210, 82, 20, 53, 226,
    14, 37, 106, 73, 106, 70, 147, 172, 255, 247, 175, 27, 15, 18, 32, 65, 73, 51, 118, 234, 174, 238, 156, 138, 134, 2, 27, 141, 126, 161, 209,
    0, 26, 208, 235, 111, 38, 239, 198, 31, 254, 243, 253, 84, 91, 103, 155, 232, 205, 107, 242, 121, 241, 122, 29, 120, 75, 248, 147, 133, 89, 20,
    188, 121, 27, 123, 203, 32, 121, 221, 161, 223, 46, 94, 111, 130, 204, 211, 182, 222, 38, 184, 190, 15, 131, 135, 93, 156, 100, 154, 31, 111, 179,
    96, 155, 93, 95, 62, 132, 203, 108, 125, 189, 12, 238, 67, 63, 184, 34, 95, 90, 90, 184, 13, 179, 208, 139, 174, 82, 223, 139, 130, 107, 227,
    18, 80, 164, 217, 35, 160, 90, 196, 203, 199, 223, 253, 56, 138, 147, 87, 15, 235, 48, 11, 6, 43, 64, 115, 149, 134, 191, 5, 175, 76, 125,
    119, 24, 100, 193, 33, 187, 242, 162, 240, 118, 251, 202, 7, 236, 65, 50, 216, 120, 201, 109, 184, 125, 165, 15, 226, 251, 32, 89, 69, 241, 195,
    171, 117, 184, 92, 6, 219, 193, 231, 118, 184, 93, 197, 191, 231, 197, 26, 43, 223, 197, 41, 52, 30, 111, 95, 105, 171, 240, 16, 44, 133, 239,
    222, 34, 141, 163, 61, 52, 154, 197, 187, 87, 154, 221, 253, 151, 65, 20, 172, 178, 87, 90, 87, 255, 23, 129, 14, 205, 236, 2, 33, 228, 251,
    202, 219, 132, 209, 227, 43, 45, 245, 182, 233, 85, 26, 36, 225, 106, 64, 105, 215, 254, 105, 225, 226, 127, 131, 44, 129, 87, 171, 56, 217, 188,
    210, 200, 99, 228, 101, 65, 227, 10, 16, 182, 52, 252, 108, 14, 62, 191, 238, 80, 206, 47, 64, 4, 126, 18, 238, 178, 55, 23, 157, 142, 22,
    39, 33, 112, 229, 69, 90, 112, 216, 69, 113, 8, 68, 172, 179, 108, 151, 190, 234, 116, 110, 195, 108, 189, 95, 180, 253, 120, 211, 25, 175, 131,
    237, 50, 30, 175, 189, 93, 103, 247, 238, 221, 40, 181, 47, 46, 238, 189, 68, 219, 121, 143, 17, 232, 103, 22, 70, 129, 118, 173, 165, 65, 154,
    2, 119, 55, 89, 156, 120, 183, 65, 251, 54, 200, 190, 207, 130, 77, 227, 5, 131, 122, 209, 28, 136, 149, 62, 160, 66, 143, 212, 34, 10, 231,
    117, 246, 233, 226, 87, 47, 204, 62, 132, 155, 99, 85, 30, 0, 36, 3, 144, 82, 75, 19, 15, 76, 230, 90, 187, 188, 28, 92, 92, 132, 43,
    173, 241, 141, 128, 173, 121, 241, 251, 133, 86, 66, 111, 232, 240, 111, 160, 117, 58, 203, 96, 229, 237, 163, 76, 131, 74, 193, 102, 151, 61, 94,
    124, 190, 184, 88, 237, 183, 62, 234, 80, 75, 215, 241, 195, 143, 64, 8, 80, 208, 216, 164, 183, 77, 13, 17, 45, 99, 127, 191, 1, 107, 65,
    154, 166, 81, 128, 143, 163, 199, 239, 151, 141, 203, 13, 133, 188, 108, 130, 169, 108, 131, 228, 207, 31, 126, 124, 11, 45, 65, 189, 193, 121, 181,
    136, 230, 218, 203, 48, 221, 69, 222, 227, 245, 139, 69, 20, 251, 119, 47, 6, 18, 65, 200, 234, 251, 130, 227, 70, 19, 56, 208, 118, 73, 128,
    5, 92, 20, 218, 18, 222, 16, 150, 81, 16, 130, 250, 154, 80, 132, 197, 244, 31, 10, 239, 176, 78, 128, 194, 109, 240, 160, 253, 199, 143, 111,
    255, 12, 38, 241, 83, 240, 247, 125, 144, 102, 141, 230, 32, 135, 3, 152, 118, 188, 11, 182, 141, 23, 255, 54, 253, 240, 162, 37, 218, 67, 11,
    172, 112, 31, 148, 97, 161, 135, 36, 225, 50, 248, 17, 4, 253, 225, 113, 23, 128, 150, 161, 151, 117, 128, 167, 112, 59, 208, 252, 181, 151, 164,
    65, 118, 125, 184, 218, 131, 133, 95, 129, 244, 195, 109, 64, 204, 70, 194, 177, 37, 140, 92, 107, 156, 241, 70, 208, 20, 72, 71, 190, 178, 117,
    152, 130, 196, 188, 108, 159, 106, 215, 215, 154, 169, 235, 34, 4, 254, 147, 45, 131, 192, 39, 65, 186, 139, 183, 105, 80, 180, 246, 57, 127, 10,
    162, 52, 200, 191, 200, 152, 68, 51, 184, 156, 121, 192, 249, 82, 203, 98, 162, 12, 237, 82, 123, 41, 117, 145, 151, 80, 114, 69, 74, 5, 10,
    5, 246, 62, 127, 150, 89, 77, 161, 211, 81, 113, 35, 41, 140, 8, 214, 188, 212, 238, 95, 226, 92, 193, 32, 192, 246, 37, 171, 3, 214, 1,
    61, 124, 122, 243, 222, 53, 29, 7, 141, 60, 151, 89, 10, 116, 164, 89, 28, 223, 6, 203, 194, 128, 192, 186, 188, 69, 20, 252, 124, 51, 106,
    80, 121, 161, 25, 128, 73, 238, 162, 35, 134, 64, 222, 83, 35, 184, 124, 255, 238, 230, 195, 101, 75, 187, 108, 119, 160, 173, 120, 181, 186, 20,
    140, 128, 194, 17, 142, 182, 251, 40, 106, 18, 219, 45, 218, 14, 182, 95, 179, 233, 237, 19, 90, 14, 183, 127, 11, 252, 140, 117, 28, 210, 105,
    150, 143, 48, 190, 132, 126, 46, 82, 10, 33, 72, 140, 170, 64, 232, 65, 104, 71, 237, 40, 216, 222, 102, 107, 237, 141, 166, 55, 47, 36, 59,
    17, 92, 209, 124, 177, 95, 173, 2, 236, 88, 96, 236, 225, 182, 157, 62, 226, 184, 20, 53, 236, 94, 175, 69, 248, 12, 183, 153, 99, 55, 244,
    131, 233, 152, 232, 133, 244, 150, 166, 31, 250, 77, 252, 180, 216, 247, 30, 126, 177, 13, 242, 124, 101, 192, 151, 194, 128, 176, 33, 104, 224, 109,
    176, 133, 6, 170, 164, 13, 84, 4, 69, 100, 124, 69, 248, 246, 6, 40, 137, 125, 203, 108, 80, 28, 50, 94, 10, 55, 127, 72, 96, 168, 76,
    10, 244, 172, 126, 123, 225, 249, 119, 225, 246, 54, 175, 2, 3, 81, 3, 171, 133, 215, 250, 32, 124, 77, 17, 118, 236, 65, 248, 242, 101, 83,
    238, 63, 8, 180, 62, 252, 226, 69, 37, 146, 211, 8, 6, 241, 70, 248, 157, 221, 178, 95, 226, 159, 38, 248, 192, 93, 20, 102, 141, 75, 240,
    134, 73, 0, 142, 36, 13, 26, 205, 246, 223, 226, 112, 75, 138, 138, 151, 27, 111, 215, 200, 125, 67, 218, 252, 61, 9, 178, 125, 2, 64, 40,
    62, 236, 123, 105, 27, 29, 205, 56, 94, 6, 195, 172, 161, 55, 219, 89, 124, 147, 37, 64, 123, 195, 112, 176, 17, 210, 238, 149, 9, 227, 101,
    129, 125, 32, 145, 44, 137, 226, 99, 248, 137, 80, 14, 228, 124, 191, 205, 26, 132, 149, 150, 6, 168, 242, 58, 185, 27, 145, 85, 222, 179, 91,
    37, 33, 182, 152, 242, 90, 26, 24, 128, 161, 253, 3, 244, 108, 146, 79, 96, 94, 214, 93, 182, 78, 2, 226, 3, 185, 210, 176, 130, 96, 8,
    180, 37, 210, 76, 20, 46, 126, 8, 146, 109, 16, 141, 188, 52, 104, 123, 203, 37, 232, 247, 221, 108, 118, 51, 253, 48, 143, 238, 230, 12, 211,
    220, 135, 207, 44, 0, 59, 99, 5, 104, 99, 122, 149, 62, 217, 138, 139, 246, 68, 103, 36, 13, 239, 232, 241, 72, 4, 183, 108, 115, 41, 86,
    93, 89, 213, 153, 177, 222, 168, 161, 37, 124, 35, 122, 179, 98, 244, 141, 130, 96, 7, 227, 46, 245, 22, 84, 197, 164, 3, 189, 79, 226, 77,
    8, 166, 1, 238, 60, 142, 238, 97, 56, 127, 131, 46, 17, 71, 246, 120, 159, 241, 210, 22, 140, 188, 77, 234, 8, 42, 163, 230, 64, 118, 14,
    216, 29, 33, 166, 107, 65, 76, 199, 7, 17, 226, 188, 161, 12, 228, 143, 175, 180, 55, 111, 222, 228, 189, 144, 188, 91, 135, 248, 10, 62, 249,
    155, 226, 21, 81, 64, 184, 133, 17, 207, 15, 132, 49, 76, 131, 206, 18, 53, 75, 35, 48, 176, 3, 146, 71, 84, 141, 70, 222, 38, 69, 9,
    130, 37, 21, 190, 5, 61, 205, 216, 191, 38, 125, 55, 168, 224, 160, 228, 112, 202, 36, 154, 184, 31, 99, 77, 189, 206, 121, 43, 15, 152, 20,
    207, 203, 151, 226, 232, 152, 63, 22, 76, 83, 176, 129, 252, 134, 138, 138, 54, 193, 109, 160, 36, 145, 255, 53, 162, 16, 44, 145, 218, 14, 69,
    215, 98, 181, 154, 85, 254, 211, 253, 226, 203, 248, 191, 250, 67, 248, 127, 163, 53, 10, 1, 200, 184, 85, 226, 184, 186, 250, 154, 226, 248, 10,
    29, 228, 127, 178, 84, 190, 172, 191, 108, 159, 210, 95, 114, 132, 223, 162, 60, 106, 88, 103, 244, 12, 190, 64, 109, 64, 149, 99, 151, 169, 194,
    26, 240, 167, 240, 156, 39, 200, 227, 236, 214, 17, 72, 161, 190, 140, 80, 62, 218, 31, 151, 32, 70, 35, 134, 35, 83, 19, 197, 243, 52, 75,
    114, 75, 41, 108, 173, 136, 32, 16, 143, 92, 105, 29, 74, 149, 114, 243, 42, 215, 169, 206, 95, 144, 241, 107, 30, 75, 150, 248, 165, 164, 12,
    212, 243, 19, 26, 162, 176, 102, 127, 11, 146, 24, 230, 30, 16, 7, 144, 146, 150, 230, 54, 43, 189, 147, 209, 248, 82, 66, 203, 100, 198, 64,
    144, 34, 121, 182, 153, 35, 222, 238, 55, 11, 140, 13, 200, 122, 11, 151, 34, 249, 162, 93, 129, 21, 147, 183, 5, 183, 205, 60, 22, 205, 99,
    104, 10, 75, 58, 237, 239, 42, 197, 14, 147, 196, 123, 100, 80, 47, 181, 70, 231, 191, 218, 157, 118, 134, 147, 0, 138, 187, 169, 253, 171, 102,
    106, 175, 52, 163, 201, 226, 181, 23, 250, 11, 28, 20, 232, 91, 21, 51, 244, 13, 198, 38, 151, 56, 203, 215, 188, 232, 193, 123, 76, 249, 91,
    15, 194, 124, 36, 245, 255, 30, 183, 23, 62, 76, 12, 51, 40, 128, 88, 126, 158, 254, 6, 214, 3, 161, 39, 89, 11, 97, 111, 32, 122, 10,
    146, 251, 96, 190, 223, 237, 32, 254, 37, 112, 4, 200, 16, 129, 104, 117, 6, 186, 156, 135, 203, 3, 192, 168, 106, 118, 52, 123, 64, 38, 168,
    218, 56, 242, 210, 20, 167, 12, 218, 223, 247, 161, 127, 23, 61, 106, 36, 30, 197, 94, 10, 126, 69, 219, 120, 91, 239, 150, 124, 209, 126, 122,
    247, 158, 6, 183, 23, 15, 225, 118, 25, 63, 180, 147, 120, 39, 245, 100, 41, 70, 35, 237, 44, 40, 149, 194, 244, 38, 103, 16, 40, 0, 185,
    232, 7, 87, 12, 222, 56, 91, 50, 6, 22, 57, 43, 248, 168, 212, 157, 123, 168, 194, 42, 6, 105, 138, 196, 150, 28, 50, 234, 106, 148, 109,
    113, 50, 197, 6, 252, 120, 191, 205, 208, 55, 9, 101, 139, 196, 219, 250, 235, 32, 157, 243, 151, 186, 234, 101, 146, 238, 82, 121, 194, 128, 203,
    34, 98, 104, 234, 71, 129, 151, 40, 133, 89, 215, 252, 81, 18, 114, 8, 212, 43, 157, 11, 146, 154, 240, 231, 53, 12, 216, 162, 18, 154, 100,
    110, 93, 54, 155, 38, 128, 194, 116, 177, 52, 176, 150, 229, 252, 49, 196, 41, 93, 165, 242, 167, 66, 14, 197, 28, 236, 179, 200, 238, 110, 159,
    174, 111, 30, 55, 139, 24, 38, 124, 103, 112, 45, 198, 123, 130, 83, 100, 34, 185, 226, 34, 17, 135, 154, 21, 46, 171, 134, 191, 5, 202, 86,
    128, 198, 150, 86, 26, 119, 208, 63, 160, 65, 132, 208, 143, 64, 160, 65, 188, 162, 163, 218, 73, 25, 40, 250, 220, 75, 13, 63, 191, 211, 76,
    148, 4, 32, 197, 241, 106, 240, 124, 44, 240, 100, 112, 76, 226, 0, 252, 153, 140, 61, 95, 129, 190, 175, 64, 91, 85, 223, 37, 117, 31, 27,
    243, 149, 26, 107, 84, 44, 165, 209, 164, 90, 27, 40, 27, 160, 107, 2, 174, 212, 206, 195, 58, 72, 96, 194, 249, 176, 246, 178, 74, 123, 88,
    167, 113, 235, 45, 111, 131, 44, 253, 120, 185, 3, 95, 150, 44, 195, 203, 79, 205, 129, 2, 140, 224, 81, 190, 145, 17, 164, 245, 8, 128, 130,
    163, 245, 55, 241, 189, 246, 17, 40, 248, 212, 146, 208, 72, 54, 141, 139, 10, 18, 127, 73, 184, 107, 33, 217, 164, 14, 62, 129, 93, 39, 62,
    126, 184, 240, 127, 191, 108, 223, 0, 169, 125, 115, 173, 237, 183, 108, 121, 87, 105, 219, 167, 229, 34, 131, 194, 219, 166, 50, 210, 38, 45, 166,
    207, 107, 49, 61, 218, 98, 122, 172, 69, 176, 203, 103, 241, 120, 56, 202, 227, 225, 72, 139, 254, 243, 90, 244, 143, 182, 232, 31, 107, 209, 125,
    86, 131, 238, 177, 246, 220, 35, 205, 245, 159, 213, 92, 255, 88, 115, 253, 250, 230, 10, 255, 195, 6, 99, 193, 215, 127, 71, 34, 6, 54, 107,
    193, 199, 211, 180, 192, 128, 33, 17, 82, 158, 11, 82, 122, 194, 93, 83, 57, 198, 84, 123, 225, 151, 116, 194, 162, 27, 159, 172, 85, 114, 22,
    196, 185, 161, 15, 222, 71, 89, 67, 8, 96, 202, 112, 201, 126, 219, 168, 114, 178, 107, 227, 194, 162, 171, 168, 40, 77, 255, 233, 234, 168, 196,
    28, 150, 157, 203, 157, 52, 52, 35, 143, 44, 78, 100, 120, 211, 143, 248, 240, 233, 12, 174, 25, 81, 157, 14, 104, 16, 0, 119, 26, 12, 198,
    217, 58, 128, 24, 253, 144, 105, 168, 175, 130, 102, 128, 192, 240, 170, 54, 136, 16, 105, 170, 181, 41, 87, 88, 30, 85, 200, 187, 58, 164, 252,
    209, 131, 137, 56, 24, 120, 7, 97, 48, 80, 210, 103, 255, 183, 18, 24, 72, 4, 22, 20, 254, 109, 179, 171, 104, 6, 190, 171, 41, 99, 150,
    82, 26, 4, 118, 53, 4, 34, 154, 106, 131, 96, 250, 181, 102, 176, 107, 71, 30, 188, 88, 207, 201, 4, 134, 104, 191, 140, 153, 132, 224, 13,
    5, 222, 31, 166, 63, 253, 101, 250, 118, 62, 26, 222, 76, 231, 239, 63, 252, 52, 255, 101, 248, 147, 56, 237, 0, 3, 188, 35, 139, 252, 243,
    251, 82, 8, 239, 37, 183, 21, 110, 21, 200, 160, 14, 64, 42, 248, 241, 14, 12, 179, 132, 53, 94, 173, 160, 205, 115, 20, 236, 29, 106, 228,
    87, 71, 73, 243, 148, 202, 1, 101, 11, 244, 238, 29, 62, 213, 96, 62, 51, 28, 98, 60, 28, 67, 0, 221, 148, 54, 87, 23, 13, 209, 30,
    192, 68, 15, 208, 201, 60, 139, 169, 122, 231, 152, 126, 145, 60, 83, 104, 165, 94, 65, 230, 78, 100, 26, 173, 8, 71, 203, 190, 55, 87, 24,
    111, 239, 57, 157, 92, 240, 90, 208, 112, 149, 239, 59, 69, 156, 75, 155, 107, 105, 127, 127, 136, 147, 101, 133, 203, 39, 210, 117, 92, 117, 180,
    137, 51, 24, 3, 35, 169, 87, 30, 101, 194, 86, 50, 177, 252, 106, 76, 44, 235, 58, 192, 242, 73, 76, 4, 203, 195, 17, 38, 76, 37, 19,
    95, 141, 7, 191, 142, 135, 39, 177, 224, 31, 227, 192, 80, 114, 176, 120, 204, 130, 63, 150, 3, 210, 194, 217, 28, 68, 71, 56, 112, 231, 119,
    232, 1, 20, 124, 24, 45, 141, 62, 152, 167, 121, 49, 79, 19, 67, 3, 22, 149, 99, 173, 96, 51, 206, 239, 36, 203, 242, 16, 47, 175, 252,
    226, 74, 29, 250, 33, 226, 220, 104, 118, 213, 93, 229, 217, 164, 95, 110, 134, 191, 76, 39, 115, 230, 219, 111, 62, 12, 199, 63, 160, 115, 167,
    239, 74, 30, 127, 64, 177, 62, 4, 139, 31, 194, 12, 119, 168, 7, 194, 119, 76, 246, 8, 19, 154, 14, 69, 94, 145, 119, 81, 184, 184, 241,
    131, 183, 225, 194, 255, 30, 179, 242, 96, 194, 94, 212, 147, 54, 187, 25, 60, 102, 24, 13, 33, 244, 4, 197, 228, 121, 86, 116, 187, 155, 165,
    90, 53, 46, 17, 196, 131, 34, 220, 105, 102, 171, 152, 108, 139, 252, 225, 110, 126, 159, 97, 102, 202, 124, 21, 38, 105, 54, 15, 104, 21, 182,
    234, 105, 207, 12, 35, 95, 247, 100, 53, 126, 253, 97, 190, 9, 54, 56, 34, 135, 27, 146, 157, 136, 160, 36, 117, 195, 28, 186, 85, 216, 57,
    93, 68, 132, 65, 227, 110, 190, 242, 194, 168, 82, 203, 232, 41, 106, 237, 210, 104, 190, 216, 135, 81, 6, 3, 141, 80, 97, 226, 184, 101, 6,
    126, 253, 225, 39, 17, 154, 128, 89, 214, 104, 168, 87, 1, 231, 64, 52, 6, 76, 212, 60, 230, 241, 54, 160, 84, 24, 186, 51, 28, 207, 122,
    131, 19, 240, 217, 67, 204, 224, 167, 227, 169, 49, 177, 170, 240, 81, 188, 189, 125, 82, 3, 165, 10, 213, 22, 228, 26, 160, 125, 63, 220, 102,
    76, 254, 92, 132, 246, 204, 173, 40, 137, 67, 82, 14, 56, 228, 104, 212, 29, 141, 107, 32, 25, 41, 5, 168, 131, 219, 67, 101, 138, 205, 249,
    135, 183, 55, 243, 239, 127, 28, 254, 219, 148, 74, 218, 13, 92, 221, 68, 89, 151, 176, 222, 85, 20, 207, 49, 27, 179, 153, 83, 33, 183, 156,
    168, 193, 129, 205, 110, 215, 56, 2, 140, 27, 4, 185, 37, 13, 103, 68, 233, 100, 95, 45, 190, 197, 197, 200, 143, 159, 104, 175, 225, 115, 35,
    40, 250, 253, 51, 45, 98, 46, 66, 40, 129, 158, 64, 11, 55, 30, 74, 129, 250, 49, 50, 177, 125, 133, 140, 154, 45, 90, 192, 227, 23, 82,
    104, 244, 157, 190, 46, 190, 72, 233, 11, 99, 102, 79, 28, 169, 194, 129, 148, 247, 93, 103, 44, 22, 251, 180, 216, 233, 246, 70, 61, 177, 220,
    37, 197, 192, 208, 176, 103, 136, 229, 125, 82, 110, 155, 102, 87, 46, 247, 40, 158, 174, 49, 52, 36, 58, 33, 184, 39, 21, 166, 102, 223, 106,
    81, 135, 94, 94, 3, 35, 228, 14, 251, 189, 190, 201, 25, 41, 133, 76, 4, 64, 239, 185, 238, 172, 87, 5, 8, 24, 64, 191, 239, 216, 163,
    49, 111, 194, 143, 66, 109, 160, 73, 148, 57, 206, 204, 101, 213, 211, 140, 11, 105, 52, 26, 143, 69, 178, 132, 200, 23, 1, 76, 219, 24, 143,
    91, 149, 215, 105, 248, 137, 113, 11, 221, 74, 38, 58, 15, 135, 8, 254, 233, 108, 226, 246, 85, 0, 76, 27, 134, 109, 58, 67, 215, 172, 2,
    4, 12, 192, 26, 245, 102, 83, 155, 189, 151, 98, 101, 82, 189, 167, 91, 253, 222, 84, 36, 144, 15, 92, 132, 60, 107, 214, 213, 141, 74, 101,
    166, 114, 115, 54, 26, 79, 196, 170, 41, 93, 169, 160, 47, 117, 219, 213, 29, 83, 194, 28, 82, 201, 104, 47, 53, 247, 19, 8, 151, 172, 33,
    20, 162, 234, 117, 141, 233, 148, 235, 39, 220, 174, 162, 56, 166, 170, 239, 77, 102, 51, 89, 243, 124, 160, 199, 183, 99, 103, 58, 132, 215, 159,
    249, 40, 117, 151, 168, 250, 192, 193, 95, 223, 242, 245, 132, 93, 209, 118, 26, 106, 87, 216, 66, 159, 146, 96, 44, 123, 246, 74, 215, 58, 157,
    127, 127, 247, 94, 179, 4, 156, 166, 10, 167, 164, 14, 202, 245, 108, 54, 153, 244, 20, 218, 226, 18, 27, 247, 167, 227, 97, 245, 61, 123, 109,
    116, 135, 189, 73, 215, 36, 204, 144, 125, 233, 205, 82, 213, 46, 42, 226, 99, 226, 34, 94, 195, 164, 120, 71, 224, 107, 121, 173, 112, 183, 9,
    235, 200, 37, 75, 40, 196, 238, 65, 6, 84, 103, 33, 81, 119, 33, 18, 255, 64, 182, 219, 44, 157, 138, 196, 178, 237, 17, 17, 68, 30, 48,
    97, 222, 111, 228, 97, 210, 43, 96, 102, 235, 47, 63, 253, 170, 93, 189, 33, 27, 127, 155, 32, 91, 199, 75, 45, 76, 113, 207, 18, 252, 113,
    244, 168, 45, 96, 156, 95, 98, 116, 5, 255, 191, 98, 21, 84, 233, 235, 201, 227, 46, 139, 111, 131, 109, 232, 119, 222, 223, 216, 87, 78, 219,
    212, 175, 126, 37, 65, 198, 21, 38, 2, 94, 77, 15, 129, 191, 71, 18, 224, 137, 100, 193, 211, 214, 229, 41, 59, 240, 43, 126, 29, 48, 16,
    186, 161, 134, 217, 220, 228, 65, 46, 38, 169, 26, 252, 145, 191, 162, 91, 174, 225, 10, 55, 9, 243, 103, 254, 146, 236, 119, 204, 87, 73, 188,
    33, 51, 202, 32, 77, 201, 228, 188, 92, 200, 193, 209, 209, 211, 173, 126, 246, 52, 224, 130, 219, 129, 247, 199, 57, 104, 22, 107, 52, 134, 209,
    88, 213, 11, 62, 169, 228, 161, 209, 47, 217, 251, 140, 166, 128, 210, 37, 58, 96, 59, 240, 238, 238, 189, 168, 193, 33, 154, 108, 201, 10, 12,
    201, 229, 201, 136, 157, 14, 167, 47, 94, 177, 22, 20, 152, 73, 195, 5, 106, 169, 201, 28, 17, 232, 93, 19, 144, 25, 48, 154, 65, 148, 149,
    60, 106, 13, 144, 122, 27, 235, 52, 145, 13, 48, 35, 127, 143, 19, 107, 12, 16, 239, 194, 12, 181, 79, 55, 224, 243, 248, 81, 217, 20, 210,
    208, 164, 153, 69, 141, 227, 129, 29, 223, 16, 85, 7, 153, 2, 114, 140, 71, 32, 30, 200, 110, 179, 70, 209, 184, 156, 94, 89, 142, 4, 155,
    92, 112, 106, 228, 82, 230, 83, 67, 25, 210, 8, 212, 21, 97, 238, 147, 137, 170, 9, 57, 69, 242, 132, 140, 81, 37, 85, 213, 240, 133, 147,
    166, 140, 220, 159, 76, 98, 53, 190, 205, 169, 83, 54, 160, 164, 178, 20, 250, 114, 10, 243, 237, 104, 234, 199, 52, 176, 48, 49, 182, 17, 167,
    104, 165, 21, 65, 250, 23, 119, 26, 43, 164, 139, 24, 56, 156, 52, 155, 82, 182, 154, 60, 171, 217, 50, 239, 156, 130, 228, 8, 9, 148, 6,
    238, 102, 5, 37, 176, 94, 87, 78, 208, 194, 29, 232, 194, 35, 216, 5, 24, 207, 121, 147, 87, 167, 232, 108, 179, 10, 207, 104, 51, 133, 252,
    101, 178, 189, 66, 209, 127, 131, 161, 169, 217, 173, 38, 207, 177, 169, 167, 174, 58, 138, 193, 243, 86, 164, 6, 32, 70, 132, 145, 69, 90, 13,
    40, 243, 204, 210, 30, 210, 223, 202, 172, 178, 180, 12, 118, 206, 224, 103, 232, 109, 46, 205, 193, 97, 121, 45, 152, 94, 240, 155, 64, 63, 211,
    14, 198, 208, 108, 9, 129, 34, 40, 45, 216, 237, 106, 60, 42, 135, 46, 28, 170, 46, 74, 7, 170, 181, 11, 138, 202, 89, 245, 249, 94, 74,
    41, 75, 171, 196, 37, 38, 143, 60, 143, 79, 237, 59, 205, 254, 111, 226, 149, 83, 101, 153, 148, 44, 246, 166, 93, 206, 53, 63, 41, 131, 234,
    88, 73, 204, 177, 165, 225, 153, 186, 178, 84, 226, 219, 60, 93, 167, 76, 0, 149, 75, 137, 85, 14, 63, 15, 9, 199, 156, 83, 94, 44, 177,
    42, 228, 192, 236, 232, 82, 177, 219, 40, 234, 183, 136, 13, 139, 226, 160, 48, 182, 0, 147, 99, 115, 155, 140, 252, 243, 192, 199, 228, 196, 136,
    33, 82, 80, 232, 48, 167, 181, 34, 82, 254, 70, 45, 215, 60, 82, 105, 192, 83, 197, 186, 246, 171, 95, 194, 224, 161, 106, 93, 0, 203, 79,
    198, 188, 212, 196, 245, 40, 41, 45, 72, 167, 105, 65, 5, 176, 50, 247, 135, 53, 66, 143, 92, 32, 172, 112, 144, 35, 228, 190, 73, 229, 52,
    170, 118, 76, 49, 213, 239, 82, 10, 70, 204, 64, 21, 70, 92, 150, 16, 139, 192, 136, 185, 149, 5, 68, 253, 41, 158, 65, 172, 17, 128, 146,
    99, 178, 228, 150, 247, 45, 131, 96, 102, 132, 132, 205, 210, 206, 54, 58, 86, 159, 228, 140, 30, 42, 231, 221, 136, 244, 0, 197, 157, 92, 229,
    179, 124, 148, 13, 147, 64, 175, 53, 154, 187, 216, 198, 14, 52, 102, 242, 109, 248, 162, 41, 85, 156, 113, 57, 105, 20, 169, 94, 121, 119, 1,
    141, 188, 138, 85, 22, 33, 7, 143, 167, 159, 41, 192, 139, 165, 150, 35, 240, 252, 212, 234, 156, 28, 254, 61, 100, 101, 104, 91, 4, 222, 196,
    203, 112, 21, 6, 203, 163, 192, 23, 82, 63, 173, 144, 159, 171, 95, 135, 190, 85, 121, 219, 28, 156, 91, 125, 136, 93, 249, 72, 232, 83, 89,
    84, 3, 53, 99, 218, 102, 62, 205, 37, 155, 31, 196, 229, 226, 100, 139, 76, 168, 12, 29, 231, 92, 40, 51, 241, 37, 155, 13, 159, 75, 152,
    129, 140, 149, 197, 122, 62, 95, 200, 86, 77, 96, 43, 31, 58, 146, 150, 222, 154, 231, 55, 96, 140, 159, 36, 185, 120, 27, 136, 146, 195, 197,
    5, 81, 56, 254, 225, 211, 160, 144, 41, 124, 173, 145, 31, 42, 236, 83, 189, 109, 48, 91, 173, 51, 14, 246, 250, 8, 147, 101, 4, 167, 204,
    163, 186, 36, 250, 135, 217, 71, 153, 52, 98, 32, 229, 174, 244, 4, 214, 158, 106, 33, 92, 120, 79, 104, 226, 164, 141, 84, 151, 160, 191, 178,
    145, 20, 167, 177, 197, 189, 126, 242, 41, 250, 100, 122, 64, 175, 62, 237, 160, 180, 3, 44, 128, 215, 244, 208, 18, 212, 51, 229, 92, 141, 87,
    164, 249, 122, 189, 227, 35, 27, 76, 12, 180, 157, 250, 73, 28, 69, 111, 131, 21, 91, 131, 31, 84, 209, 150, 205, 168, 232, 64, 104, 100, 101,
    145, 148, 211, 167, 78, 163, 33, 182, 202, 206, 91, 10, 73, 218, 231, 85, 182, 177, 50, 15, 4, 202, 242, 22, 161, 154, 205, 39, 73, 76, 246,
    6, 79, 21, 89, 9, 111, 105, 117, 163, 50, 254, 222, 221, 43, 195, 49, 41, 168, 37, 112, 124, 162, 199, 227, 29, 82, 177, 20, 199, 138, 163,
    238, 156, 0, 224, 17, 80, 33, 230, 71, 44, 149, 49, 244, 142, 28, 56, 97, 202, 148, 86, 21, 228, 46, 109, 19, 72, 214, 162, 75, 66, 87,
    114, 236, 64, 104, 152, 100, 73, 225, 94, 109, 90, 158, 197, 11, 209, 35, 63, 173, 80, 14, 164, 48, 48, 34, 68, 147, 192, 17, 229, 219, 51,
    181, 111, 191, 213, 88, 25, 75, 31, 198, 114, 199, 150, 203, 77, 94, 238, 203, 229, 22, 47, 95, 201, 229, 54, 47, 183, 202, 1, 88, 193, 0,
    208, 27, 202, 81, 88, 41, 48, 251, 44, 44, 27, 212, 73, 72, 64, 7, 212, 152, 130, 164, 150, 72, 12, 89, 117, 44, 207, 103, 140, 50, 148,
    91, 53, 15, 86, 91, 158, 116, 169, 100, 45, 40, 228, 180, 184, 109, 87, 45, 110, 191, 167, 22, 183, 175, 203, 229, 61, 142, 167, 47, 151, 187,
    172, 220, 45, 149, 247, 57, 30, 175, 212, 174, 206, 94, 232, 37, 189, 25, 156, 34, 189, 91, 86, 28, 149, 212, 71, 172, 41, 25, 192, 64, 5,
    101, 200, 80, 182, 26, 202, 148, 161, 186, 106, 40, 75, 134, 114, 74, 80, 194, 198, 221, 22, 183, 69, 153, 230, 128, 80, 25, 78, 149, 255, 72,
    234, 144, 5, 37, 69, 223, 204, 167, 23, 71, 45, 146, 247, 110, 217, 35, 112, 23, 192, 151, 203, 209, 186, 146, 120, 215, 104, 230, 139, 210, 55,
    222, 54, 204, 30, 1, 32, 240, 239, 242, 51, 81, 242, 193, 120, 83, 167, 201, 181, 228, 244, 155, 160, 13, 47, 10, 146, 172, 113, 73, 151, 126,
    249, 109, 53, 218, 138, 92, 185, 209, 214, 62, 36, 143, 154, 119, 139, 205, 2, 198, 199, 120, 159, 104, 187, 212, 198, 189, 2, 24, 139, 87, 15,
    90, 191, 173, 235, 109, 241, 32, 255, 195, 26, 111, 228, 200, 59, 69, 233, 120, 121, 178, 223, 206, 215, 222, 33, 207, 223, 43, 54, 38, 6, 117,
    84, 91, 120, 21, 3, 33, 252, 155, 242, 20, 140, 229, 100, 20, 173, 119, 58, 152, 86, 161, 61, 220, 229, 108, 192, 183, 29, 12, 115, 32, 154,
    148, 46, 153, 63, 4, 154, 239, 193, 124, 52, 137, 23, 240, 29, 120, 91, 173, 48, 234, 200, 98, 237, 46, 140, 34, 182, 0, 174, 45, 2, 40,
    13, 242, 155, 42, 216, 101, 14, 139, 125, 134, 71, 234, 247, 209, 18, 224, 254, 181, 45, 104, 47, 63, 40, 168, 62, 122, 143, 71, 245, 113, 53,
    70, 184, 184, 36, 63, 199, 223, 110, 139, 242, 19, 206, 212, 75, 23, 104, 180, 52, 171, 240, 220, 37, 161, 114, 49, 176, 198, 97, 0, 75, 60,
    22, 137, 165, 92, 56, 52, 145, 4, 131, 139, 253, 142, 151, 197, 11, 108, 64, 46, 131, 57, 234, 237, 45, 30, 193, 218, 161, 219, 162, 71, 249,
    201, 190, 22, 40, 41, 98, 217, 32, 9, 60, 199, 155, 249, 206, 195, 3, 120, 88, 16, 28, 230, 120, 81, 211, 160, 116, 105, 206, 124, 151, 28,
    26, 120, 165, 20, 167, 172, 211, 1, 173, 206, 151, 143, 91, 232, 24, 115, 14, 145, 251, 206, 132, 248, 112, 89, 251, 221, 62, 222, 230, 80, 108,
    236, 52, 254, 218, 249, 231, 223, 133, 246, 63, 119, 252, 120, 179, 137, 183, 29, 192, 8, 111, 176, 177, 207, 127, 109, 178, 91, 22, 40, 205, 228,
    139, 96, 94, 208, 140, 218, 154, 120, 71, 88, 201, 151, 205, 0, 137, 36, 87, 153, 98, 35, 42, 36, 60, 137, 171, 208, 18, 99, 24, 0, 163,
    56, 230, 193, 65, 238, 217, 76, 76, 100, 9, 105, 200, 243, 146, 85, 92, 59, 186, 219, 202, 151, 124, 105, 187, 156, 39, 134, 227, 121, 252, 32,
    27, 16, 157, 237, 129, 13, 68, 162, 225, 82, 4, 227, 235, 82, 226, 135, 108, 53, 69, 41, 222, 241, 37, 4, 35, 172, 237, 34, 132, 41, 86,
    108, 88, 5, 92, 74, 19, 86, 171, 171, 21, 198, 121, 52, 76, 78, 3, 176, 26, 223, 148, 60, 18, 57, 24, 238, 225, 157, 81, 215, 218, 37,
    13, 185, 233, 166, 162, 217, 6, 187, 60, 92, 86, 78, 6, 80, 82, 107, 118, 43, 132, 228, 145, 230, 137, 3, 86, 84, 98, 127, 101, 134, 212,
    202, 89, 2, 47, 178, 101, 167, 85, 219, 36, 115, 11, 28, 215, 30, 52, 245, 8, 114, 92, 134, 190, 135, 241, 66, 182, 246, 50, 250, 142, 137,
    120, 237, 165, 154, 135, 40, 180, 221, 122, 153, 192, 152, 144, 173, 113, 37, 43, 34, 119, 69, 181, 181, 255, 140, 247, 196, 19, 173, 189, 100, 233,
    199, 203, 128, 100, 193, 135, 155, 91, 112, 24, 168, 43, 220, 131, 227, 235, 255, 152, 179, 205, 220, 47, 193, 0, 237, 62, 132, 233, 26, 193, 112,
    135, 15, 19, 126, 104, 22, 61, 140, 50, 127, 173, 25, 95, 120, 218, 25, 21, 21, 233, 215, 157, 206, 187, 69, 134, 158, 157, 120, 140, 60, 55,
    37, 91, 39, 241, 254, 118, 205, 217, 136, 168, 239, 18, 174, 20, 146, 253, 11, 19, 33, 235, 30, 242, 213, 41, 83, 87, 176, 15, 218, 109, 65,
    156, 75, 210, 117, 231, 116, 65, 114, 78, 23, 185, 105, 245, 98, 18, 112, 164, 158, 178, 130, 193, 107, 48, 155, 195, 125, 219, 106, 61, 113, 146,
    81, 142, 170, 235, 201, 107, 145, 52, 0, 134, 191, 220, 83, 77, 120, 219, 82, 181, 213, 58, 194, 48, 239, 251, 133, 35, 203, 123, 13, 174, 115,
    42, 176, 113, 114, 243, 108, 1, 150, 19, 153, 251, 89, 214, 79, 190, 135, 119, 172, 147, 20, 18, 196, 164, 132, 26, 248, 63, 111, 150, 21, 112,
    204, 157, 168, 1, 151, 187, 97, 253, 206, 159, 148, 6, 113, 214, 30, 28, 167, 145, 169, 72, 66, 112, 254, 206, 159, 249, 212, 157, 63, 198, 106,
    190, 217, 103, 62, 189, 85, 57, 121, 227, 172, 102, 115, 13, 242, 160, 80, 66, 81, 179, 203, 168, 224, 87, 194, 47, 159, 137, 160, 46, 91, 77,
    129, 224, 34, 58, 157, 233, 54, 221, 131, 123, 193, 76, 18, 238, 1, 60, 252, 126, 15, 195, 6, 137, 152, 48, 52, 34, 17, 70, 187, 180, 34,
    178, 82, 30, 4, 50, 117, 235, 83, 171, 134, 117, 50, 244, 233, 146, 64, 41, 42, 118, 180, 137, 56, 165, 209, 62, 132, 0, 11, 189, 33, 59,
    33, 129, 103, 209, 9, 88, 139, 250, 87, 140, 240, 168, 179, 205, 65, 30, 48, 118, 91, 4, 208, 251, 73, 190, 9, 132, 90, 15, 235, 96, 75,
    32, 112, 161, 0, 67, 29, 109, 23, 222, 199, 196, 189, 5, 244, 92, 115, 91, 136, 160, 164, 232, 136, 201, 145, 102, 255, 177, 196, 218, 197, 62,
    125, 164, 217, 169, 35, 211, 157, 204, 92, 30, 144, 75, 48, 126, 188, 163, 64, 195, 241, 100, 160, 120, 143, 227, 7, 121, 111, 246, 12, 107, 166,
    2, 217, 129, 247, 23, 161, 108, 219, 80, 64, 109, 130, 141, 207, 90, 66, 152, 81, 29, 166, 156, 30, 128, 234, 234, 42, 76, 8, 193, 114, 25,
    1, 198, 25, 78, 106, 97, 232, 114, 6, 1, 27, 117, 235, 192, 4, 160, 177, 169, 2, 2, 9, 135, 75, 186, 22, 99, 25, 166, 111, 235, 106,
    24, 63, 209, 169, 176, 103, 163, 190, 221, 87, 192, 252, 71, 24, 209, 204, 78, 163, 183, 236, 234, 42, 44, 247, 65, 18, 190, 247, 50, 127, 77,
    192, 28, 211, 113, 123, 182, 2, 140, 222, 143, 55, 231, 214, 59, 55, 232, 237, 12, 125, 253, 12, 88, 147, 194, 142, 186, 103, 192, 90, 12, 182,
    127, 6, 172, 77, 97, 199, 166, 74, 245, 48, 113, 201, 240, 214, 60, 50, 63, 215, 71, 174, 82, 247, 201, 129, 170, 193, 26, 78, 199, 42, 174,
    151, 81, 250, 184, 97, 188, 154, 214, 200, 233, 205, 106, 129, 40, 147, 166, 105, 44, 234, 148, 181, 15, 151, 84, 21, 67, 221, 81, 65, 80, 182,
    12, 131, 181, 7, 81, 163, 222, 53, 245, 163, 144, 166, 0, 233, 30, 133, 180, 10, 72, 123, 124, 20, 146, 185, 77, 34, 90, 191, 231, 45, 85,
    194, 5, 231, 203, 169, 116, 28, 203, 28, 214, 193, 152, 5, 204, 164, 214, 130, 113, 236, 102, 230, 103, 193, 244, 209, 26, 41, 32, 239, 254, 190,
    15, 246, 193, 220, 143, 226, 52, 152, 7, 187, 144, 66, 247, 221, 126, 223, 96, 30, 70, 157, 244, 175, 186, 113, 2, 161, 75, 199, 0, 0, 76,
    93, 95, 216, 60, 224, 185, 98, 219, 224, 214, 203, 194, 251, 60, 232, 132, 136, 146, 82, 199, 54, 168, 139, 113, 64, 203, 243, 195, 58, 157, 226,
    166, 166, 217, 204, 117, 70, 221, 190, 133, 57, 168, 122, 87, 245, 90, 159, 90, 142, 141, 89, 187, 186, 46, 135, 94, 37, 170, 229, 27, 27, 121,
    197, 150, 120, 43, 20, 15, 61, 238, 20, 43, 34, 69, 185, 89, 125, 145, 143, 119, 100, 240, 192, 145, 133, 222, 75, 146, 4, 27, 168, 144, 22,
    195, 94, 91, 158, 206, 159, 49, 228, 221, 9, 235, 226, 152, 100, 81, 94, 111, 125, 10, 22, 243, 75, 209, 168, 213, 126, 106, 252, 21, 100, 215,
    46, 221, 122, 194, 233, 42, 223, 68, 194, 185, 150, 142, 74, 150, 53, 42, 107, 229, 52, 176, 136, 249, 248, 225, 71, 17, 72, 205, 179, 2, 80,
    125, 80, 39, 84, 34, 173, 59, 102, 47, 194, 28, 227, 86, 113, 244, 177, 72, 4, 254, 36, 44, 224, 197, 73, 2, 211, 186, 224, 5, 216, 38,
    113, 7, 75, 17, 9, 59, 204, 213, 16, 162, 17, 158, 137, 82, 219, 20, 38, 188, 127, 34, 187, 112, 97, 190, 108, 5, 33, 82, 234, 173, 72,
    76, 151, 4, 87, 116, 224, 209, 72, 58, 107, 178, 223, 101, 56, 203, 125, 104, 95, 8, 51, 141, 229, 1, 221, 33, 67, 127, 234, 84, 102, 67,
    26, 228, 133, 9, 5, 160, 49, 159, 133, 6, 188, 104, 222, 111, 127, 196, 109, 165, 71, 237, 231, 201, 9, 21, 213, 232, 17, 98, 128, 147, 218,
    77, 79, 152, 128, 148, 49, 127, 218, 88, 150, 135, 26, 74, 166, 39, 171, 250, 117, 85, 245, 103, 154, 104, 81, 147, 235, 117, 190, 12, 210, 172,
    208, 10, 59, 108, 223, 168, 214, 21, 206, 196, 226, 142, 46, 222, 53, 141, 42, 204, 130, 45, 93, 211, 144, 180, 126, 241, 60, 17, 99, 44, 163,
    131, 151, 179, 172, 211, 82, 85, 99, 144, 252, 102, 201, 246, 254, 0, 86, 193, 50, 37, 86, 43, 55, 220, 160, 136, 91, 133, 160, 229, 182, 84,
    208, 102, 171, 160, 149, 92, 150, 74, 205, 254, 123, 122, 207, 190, 70, 130, 137, 70, 144, 54, 37, 79, 202, 142, 169, 54, 202, 65, 47, 185, 222,
    88, 239, 235, 37, 199, 91, 118, 35, 24, 179, 35, 232, 116, 148, 119, 179, 77, 120, 187, 206, 52, 15, 166, 88, 1, 132, 216, 203, 152, 12, 148,
    49, 124, 36, 233, 81, 84, 56, 107, 145, 80, 213, 0, 242, 25, 206, 57, 176, 116, 158, 115, 46, 214, 10, 51, 53, 176, 116, 62, 115, 62, 100,
    74, 87, 128, 206, 1, 22, 65, 185, 254, 180, 219, 61, 166, 223, 63, 198, 123, 116, 237, 219, 56, 35, 83, 109, 178, 90, 184, 240, 150, 237, 118,
    251, 168, 88, 153, 163, 215, 75, 126, 28, 252, 180, 232, 203, 217, 226, 27, 222, 209, 159, 92, 61, 138, 14, 157, 108, 221, 228, 71, 62, 192, 180,
    112, 91, 35, 255, 105, 2, 230, 76, 89, 63, 177, 242, 46, 98, 158, 237, 164, 113, 34, 38, 247, 54, 251, 25, 88, 164, 17, 131, 87, 62, 167,
    239, 155, 106, 231, 110, 158, 112, 61, 156, 97, 217, 49, 152, 106, 207, 96, 62, 197, 53, 160, 60, 78, 114, 113, 168, 227, 98, 122, 154, 11, 191,
    182, 178, 126, 186, 178, 123, 170, 46, 215, 225, 215, 23, 12, 155, 249, 95, 72, 245, 85, 126, 208, 106, 21, 170, 41, 53, 167, 2, 183, 91, 5,
    193, 69, 175, 27, 238, 118, 209, 35, 159, 174, 16, 215, 25, 164, 248, 70, 209, 215, 236, 70, 221, 82, 64, 139, 159, 21, 46, 130, 239, 78, 135,
    78, 234, 66, 76, 74, 37, 119, 165, 67, 55, 244, 61, 92, 133, 239, 164, 235, 100, 127, 123, 172, 51, 87, 230, 249, 71, 220, 138, 89, 87, 201,
    58, 234, 218, 107, 171, 153, 66, 181, 99, 52, 210, 249, 252, 17, 194, 114, 113, 241, 149, 8, 133, 148, 106, 104, 218, 37, 7, 130, 184, 127, 106,
    92, 98, 203, 19, 231, 80, 193, 22, 41, 16, 116, 108, 141, 117, 203, 176, 221, 19, 28, 210, 73, 62, 185, 249, 191, 119, 98, 248, 33, 83, 253,
    28, 242, 24, 25, 194, 34, 135, 32, 15, 83, 137, 159, 93, 104, 80, 173, 10, 77, 213, 172, 90, 28, 151, 129, 176, 26, 34, 52, 110, 20, 189,
    129, 251, 253, 241, 79, 250, 81, 60, 194, 178, 5, 19, 104, 207, 52, 245, 153, 236, 27, 186, 207, 243, 239, 57, 230, 47, 241, 242, 16, 36, 118,
    133, 32, 145, 83, 244, 135, 120, 171, 156, 224, 147, 46, 168, 219, 42, 168, 16, 133, 238, 35, 118, 169, 182, 112, 145, 68, 205, 2, 208, 81, 233,
    40, 111, 169, 56, 111, 196, 147, 160, 206, 152, 40, 155, 245, 55, 4, 225, 65, 232, 79, 95, 50, 80, 25, 199, 71, 42, 233, 208, 242, 167, 147,
    84, 41, 46, 218, 56, 207, 182, 152, 245, 56, 130, 225, 168, 174, 0, 58, 214, 114, 229, 130, 31, 53, 48, 155, 137, 159, 84, 215, 174, 66, 219,
    87, 180, 236, 24, 194, 70, 186, 214, 197, 14, 176, 158, 180, 107, 167, 85, 208, 208, 148, 111, 169, 150, 83, 71, 242, 244, 142, 31, 189, 93, 190,
    223, 2, 239, 165, 83, 8, 243, 59, 136, 125, 3, 245, 47, 180, 208, 21, 46, 254, 151, 220, 4, 72, 92, 153, 69, 23, 172, 12, 93, 92, 252,
    19, 19, 58, 114, 228, 171, 48, 202, 98, 114, 19, 111, 209, 150, 176, 219, 91, 57, 19, 49, 199, 29, 33, 37, 176, 91, 0, 99, 30, 130, 0,
    145, 103, 89, 16, 124, 213, 68, 139, 96, 27, 195, 140, 229, 21, 73, 17, 41, 170, 29, 203, 141, 98, 185, 35, 40, 197, 138, 220, 58, 157, 31,
    254, 242, 238, 195, 180, 180, 12, 41, 101, 107, 211, 6, 90, 57, 67, 170, 108, 92, 5, 135, 142, 203, 178, 233, 185, 212, 154, 18, 57, 179, 239,
    223, 126, 120, 247, 254, 230, 104, 195, 172, 34, 59, 251, 139, 167, 241, 1, 101, 110, 205, 242, 69, 12, 116, 13, 74, 42, 131, 167, 36, 200, 78,
    224, 22, 115, 255, 115, 212, 167, 47, 5, 160, 205, 41, 225, 196, 4, 243, 162, 198, 153, 100, 160, 208, 238, 78, 164, 62, 43, 43, 26, 18, 3,
    79, 63, 210, 79, 25, 202, 235, 201, 231, 16, 234, 48, 200, 233, 246, 28, 151, 164, 231, 119, 163, 127, 63, 170, 99, 48, 168, 156, 7, 171, 202,
    195, 145, 171, 33, 4, 138, 203, 39, 39, 74, 240, 242, 43, 153, 62, 97, 161, 158, 244, 13, 234, 63, 42, 11, 245, 138, 172, 12, 83, 183, 90,
    154, 216, 65, 32, 150, 161, 189, 154, 101, 179, 73, 89, 110, 149, 139, 5, 115, 71, 241, 151, 159, 127, 156, 255, 240, 255, 126, 158, 254, 60, 189,
    97, 123, 191, 186, 144, 224, 77, 71, 110, 126, 70, 147, 109, 198, 136, 85, 190, 211, 138, 68, 22, 244, 141, 200, 3, 169, 148, 150, 228, 174, 74,
    4, 22, 16, 41, 79, 176, 29, 219, 2, 176, 28, 179, 124, 61, 171, 184, 244, 202, 110, 150, 108, 20, 28, 20, 158, 18, 136, 150, 14, 192, 125,
    174, 219, 42, 144, 197, 64, 175, 64, 87, 156, 16, 45, 218, 104, 137, 44, 137, 233, 44, 184, 20, 130, 39, 70, 230, 105, 236, 223, 145, 29, 58,
    89, 155, 125, 24, 32, 32, 52, 22, 126, 146, 139, 222, 36, 43, 213, 34, 206, 249, 53, 189, 51, 95, 251, 199, 63, 52, 213, 235, 55, 100, 39,
    83, 233, 186, 195, 237, 61, 12, 127, 48, 64, 18, 232, 163, 249, 172, 124, 189, 158, 152, 206, 29, 76, 2, 183, 89, 113, 243, 3, 253, 94, 222,
    157, 43, 159, 180, 161, 80, 146, 131, 43, 209, 91, 73, 228, 151, 107, 208, 100, 126, 28, 12, 73, 207, 214, 13, 97, 242, 85, 87, 135, 158, 93,
    61, 69, 11, 113, 86, 103, 128, 185, 18, 88, 167, 243, 135, 91, 52, 217, 27, 163, 182, 246, 17, 163, 46, 74, 16, 137, 15, 88, 106, 36, 255,
    56, 199, 122, 249, 80, 151, 120, 183, 228, 222, 49, 24, 183, 227, 228, 241, 24, 19, 134, 171, 226, 2, 207, 117, 154, 79, 97, 196, 145, 216, 120,
    2, 169, 31, 168, 203, 210, 222, 189, 27, 241, 34, 254, 3, 132, 108, 27, 7, 127, 135, 176, 248, 45, 189, 218, 28, 228, 159, 111, 70, 45, 109,
    122, 152, 121, 217, 159, 189, 131, 144, 124, 44, 252, 82, 32, 95, 125, 166, 63, 6, 38, 254, 170, 103, 27, 188, 241, 182, 1, 94, 242, 250, 13,
    101, 90, 72, 36, 226, 20, 250, 49, 89, 123, 164, 254, 90, 241, 235, 142, 170, 223, 45, 248, 99, 165, 42, 63, 85, 165, 123, 50, 243, 156, 167,
    204, 255, 233, 79, 127, 146, 104, 194, 176, 38, 240, 182, 60, 122, 163, 35, 212, 183, 48, 70, 65, 105, 138, 169, 147, 208, 151, 151, 124, 220, 236,
    176, 172, 163, 115, 153, 234, 89, 159, 196, 200, 120, 44, 111, 1, 159, 236, 49, 102, 87, 61, 6, 48, 198, 203, 172, 136, 63, 82, 41, 87, 43,
    113, 252, 1, 83, 176, 24, 116, 138, 71, 37, 112, 211, 161, 165, 165, 65, 112, 214, 15, 220, 118, 22, 81, 188, 232, 224, 24, 78, 151, 210, 218,
    244, 7, 74, 54, 184, 62, 129, 137, 155, 149, 195, 24, 4, 234, 232, 239, 59, 178, 142, 207, 5, 213, 107, 177, 159, 78, 41, 77, 26, 154, 131,
    163, 184, 231, 236, 96, 151, 114, 24, 19, 1, 57, 122, 5, 62, 178, 247, 242, 30, 51, 147, 62, 178, 117, 152, 209, 200, 109, 1, 21, 83, 183,
    111, 195, 196, 2, 30, 117, 203, 154, 184, 19, 27, 75, 245, 25, 93, 169, 105, 225, 73, 158, 110, 119, 108, 233, 93, 120, 116, 71, 182, 59, 237,
    186, 125, 120, 236, 119, 167, 174, 238, 246, 166, 240, 56, 117, 115, 88, 118, 125, 97, 151, 34, 115, 140, 46, 112, 71, 171, 21, 0, 150, 213, 179,
    38, 240, 104, 205, 104, 57, 60, 246, 236, 217, 204, 237, 146, 134, 41, 5, 211, 17, 71, 102, 246, 17, 118, 214, 183, 186, 8, 77, 200, 161, 229,
    164, 9, 211, 52, 160, 188, 220, 196, 196, 153, 186, 6, 2, 32, 170, 162, 97, 179, 63, 163, 13, 119, 243, 134, 41, 170, 169, 141, 143, 93, 163,
    212, 132, 5, 143, 163, 62, 162, 34, 77, 216, 2, 155, 166, 67, 68, 85, 225, 205, 28, 205, 44, 100, 222, 40, 55, 49, 118, 137, 160, 16, 21,
    149, 47, 249, 215, 31, 35, 243, 195, 92, 234, 34, 111, 230, 112, 104, 41, 120, 131, 242, 145, 65, 154, 48, 165, 38, 122, 160, 71, 124, 52, 92,
    84, 12, 150, 142, 173, 238, 132, 85, 115, 38, 208, 68, 191, 218, 132, 51, 181, 38, 186, 65, 170, 73, 77, 56, 76, 80, 19, 90, 158, 115, 209,
    35, 202, 50, 104, 121, 25, 89, 207, 84, 35, 235, 91, 106, 100, 125, 148, 186, 211, 85, 35, 115, 28, 53, 50, 183, 167, 70, 230, 34, 6, 183,
    175, 70, 230, 14, 107, 144, 141, 212, 200, 236, 49, 41, 205, 145, 141, 173, 28, 25, 90, 63, 118, 8, 84, 128, 62, 29, 187, 22, 1, 48, 109,
    248, 219, 103, 143, 93, 254, 56, 157, 160, 253, 235, 2, 57, 72, 131, 61, 234, 217, 99, 221, 237, 146, 210, 177, 153, 171, 197, 214, 109, 157, 168,
    219, 156, 229, 0, 192, 174, 203, 12, 6, 154, 24, 91, 244, 145, 232, 125, 216, 67, 241, 33, 28, 35, 125, 58, 158, 142, 140, 9, 41, 53, 138,
    106, 66, 207, 234, 145, 254, 54, 69, 142, 123, 4, 149, 65, 170, 153, 189, 174, 238, 154, 88, 109, 54, 51, 128, 134, 113, 143, 144, 195, 92, 19,
    230, 66, 26, 122, 111, 72, 108, 221, 50, 38, 166, 101, 204, 28, 120, 28, 118, 145, 183, 113, 95, 230, 173, 59, 49, 244, 177, 237, 90, 68, 23,
    212, 111, 16, 34, 33, 176, 157, 77, 187, 45, 234, 242, 76, 74, 14, 174, 222, 194, 191, 41, 237, 243, 64, 206, 184, 112, 32, 164, 183, 224, 142,
    128, 222, 163, 228, 192, 31, 252, 74, 90, 35, 229, 118, 222, 143, 71, 121, 119, 50, 134, 168, 55, 112, 74, 61, 38, 84, 167, 11, 12, 81, 12,
    227, 158, 53, 206, 187, 158, 217, 53, 108, 155, 227, 101, 246, 64, 157, 160, 129, 0, 198, 24, 203, 45, 124, 28, 185, 180, 61, 148, 217, 164, 236,
    130, 12, 130, 215, 212, 177, 61, 242, 104, 187, 166, 91, 224, 53, 10, 139, 130, 254, 143, 24, 122, 196, 181, 245, 115, 255, 96, 217, 57, 233, 93,
    74, 195, 204, 52, 251, 185, 142, 193, 231, 246, 40, 128, 225, 140, 136, 91, 233, 58, 212, 163, 193, 227, 164, 135, 144, 196, 43, 143, 13, 84, 23,
    161, 193, 69, 67, 118, 167, 172, 154, 62, 237, 143, 137, 10, 5, 23, 143, 255, 38, 185, 2, 184, 222, 186, 232, 44, 168, 2, 102, 212, 196, 17,
    160, 139, 74, 49, 117, 170, 183, 41, 179, 7, 82, 6, 85, 73, 119, 178, 208, 119, 17, 95, 93, 72, 82, 215, 233, 110, 7, 209, 16, 85, 45,
    145, 78, 33, 51, 242, 90, 239, 229, 154, 23, 134, 14, 139, 120, 46, 242, 154, 232, 141, 190, 38, 102, 132, 175, 77, 214, 99, 13, 218, 30, 211,
    5, 34, 36, 0, 67, 135, 145, 227, 138, 228, 24, 51, 99, 74, 26, 70, 77, 206, 28, 66, 25, 148, 116, 93, 102, 26, 125, 64, 7, 64, 172,
    26, 83, 55, 171, 214, 103, 213, 208, 240, 73, 53, 144, 101, 165, 26, 10, 52, 175, 70, 39, 60, 68, 102, 133, 160, 80, 23, 51, 226, 182, 105,
    103, 96, 0, 231, 116, 6, 125, 50, 150, 69, 162, 79, 36, 145, 176, 214, 80, 125, 172, 181, 158, 213, 235, 131, 185, 35, 64, 119, 230, 76, 156,
    46, 113, 10, 61, 29, 202, 187, 61, 86, 106, 59, 83, 167, 75, 96, 29, 195, 113, 169, 95, 215, 187, 51, 203, 100, 165, 0, 210, 237, 17, 239,
    169, 59, 150, 51, 237, 245, 137, 47, 161, 152, 241, 209, 164, 152, 201, 216, 130, 88, 233, 163, 139, 56, 200, 35, 34, 66, 220, 57, 57, 148, 72,
    129, 28, 82, 137, 52, 65, 43, 57, 19, 210, 99, 41, 65, 188, 251, 67, 176, 208, 42, 182, 240, 42, 143, 51, 215, 157, 85, 74, 77, 144, 116,
    175, 10, 107, 184, 147, 153, 170, 116, 90, 41, 5, 210, 109, 195, 168, 194, 246, 97, 132, 171, 148, 218, 208, 158, 83, 46, 53, 186, 38, 40, 198,
    85, 150, 86, 49, 56, 230, 196, 84, 150, 206, 198, 229, 82, 199, 236, 246, 135, 122, 181, 20, 252, 130, 162, 148, 119, 233, 18, 172, 217, 87, 149,
    246, 36, 26, 74, 39, 138, 197, 159, 246, 38, 147, 34, 22, 77, 74, 55, 55, 73, 53, 202, 119, 17, 85, 194, 89, 122, 163, 19, 195, 3, 95,
    142, 221, 82, 116, 58, 167, 180, 28, 4, 219, 199, 103, 36, 50, 56, 63, 145, 82, 206, 149, 124, 194, 148, 166, 247, 36, 34, 202, 19, 188, 47,
    56, 148, 123, 254, 201, 92, 89, 172, 210, 207, 135, 254, 126, 230, 116, 171, 114, 106, 147, 45, 86, 230, 71, 154, 89, 86, 195, 58, 240, 118, 26,
    205, 214, 90, 4, 124, 210, 29, 0, 57, 89, 126, 98, 59, 198, 67, 181, 139, 56, 166, 71, 101, 48, 241, 60, 46, 78, 122, 86, 22, 125, 117,
    121, 142, 196, 22, 36, 232, 162, 233, 235, 78, 234, 39, 225, 46, 123, 115, 241, 154, 62, 104, 217, 227, 46, 184, 102, 71, 4, 211, 196, 191, 190,
    108, 119, 24, 129, 237, 191, 165, 151, 111, 132, 10, 29, 160, 116, 9, 127, 23, 241, 242, 17, 254, 44, 195, 123, 205, 199, 31, 166, 188, 198, 27,
    131, 227, 75, 45, 92, 94, 95, 110, 168, 82, 46, 223, 112, 165, 176, 235, 98, 91, 218, 123, 58, 149, 198, 21, 8, 13, 180, 242, 186, 3, 245,
    17, 41, 195, 214, 89, 103, 155, 232, 205, 197, 255, 7, 143, 249, 211, 254, 242, 134, 0, 0};
#else
static const uint8_t loader_gz[] PROGMEM = {
    31, 139, 8, 8, 50, 126, 242, 97, 0, 11, 108, 111, 97, 100, 101, 114, 46, 104, 116, 109, 108, 0, 228, 60, 107, 115, 219, 56, 146, 223, 83, 149,
    255, 128, 248, 110, 39, 210, 88, 150, 40, 90, 214, 195, 138, 179, 37, 201, 210, 78, 46, 153, 77, 42, 246, 206, 236, 86, 46, 165, 161, 72, 72, 226,
    152, 34, 57, 36, 101, 73, 201, 249, 191, 95, 55, 0, 146, 0, 9, 201, 143, 100, 111, 235, 238, 148, 138, 44, 2, 141, 126, 161, 209, 104, 0, 13,
    190, 122, 113, 249, 126, 116, 253, 143, 15, 99, 178, 76, 86, 222, 235, 87, 236, 251, 249, 179, 87, 75, 106, 57, 248, 55, 113, 19, 143, 190, 126, 23,
    88, 14, 141, 94, 53, 248, 19, 20, 175, 104, 98, 17, 223, 90, 209, 139, 91, 151, 110, 194, 32, 74, 136, 29, 248, 9, 245, 147, 139, 163, 141, 235,
    36, 203, 11, 135, 222, 186, 54, 61, 97, 15, 53, 226, 250, 110, 226, 90, 222, 73, 108, 91, 30, 189, 104, 30, 33, 142, 56, 217, 1, 178, 89, 224,
    236, 190, 218, 129, 23, 68, 231, 155, 165, 155, 208, 254, 28, 240, 156, 196, 238, 23, 122, 110, 26, 225, 182, 159, 208, 109, 114, 98, 121, 238, 194, 63,
    183, 1, 61, 141, 250, 43, 43, 90, 184, 254, 185, 209, 15, 110, 105, 52, 247, 130, 205, 249, 210, 117, 28, 234, 247, 239, 234, 174, 63, 15, 190, 102,
    197, 68, 148, 135, 65, 12, 212, 3, 255, 156, 204, 221, 45, 117, 164, 103, 107, 22, 7, 222, 26, 136, 38, 65, 120, 78, 90, 103, 127, 234, 123, 116,
    158, 156, 147, 51, 227, 79, 18, 31, 196, 60, 3, 70, 216, 243, 220, 90, 185, 222, 238, 156, 196, 150, 31, 159, 196, 52, 114, 231, 125, 206, 59, 249,
    183, 89, 23, 255, 245, 147, 8, 170, 230, 65, 180, 58, 39, 236, 167, 103, 37, 180, 114, 2, 8, 107, 4, 191, 171, 253, 187, 87, 13, 46, 57, 170,
    192, 142, 220, 48, 129, 95, 207, 159, 53, 26, 36, 136, 92, 16, 204, 242, 8, 221, 134, 94, 224, 2, 31, 203, 36, 9, 227, 243, 70, 99, 225, 38,
    203, 245, 172, 110, 7, 171, 198, 104, 73, 125, 39, 24, 45, 173, 176, 17, 190, 127, 63, 140, 91, 216, 248, 214, 138, 72, 104, 237, 60, 232, 166, 137,
    235, 81, 114, 65, 98, 26, 199, 32, 226, 85, 18, 68, 214, 130, 214, 23, 52, 121, 147, 208, 85, 229, 165, 128, 122, 89, 237, 43, 173, 174, 177, 99,
    15, 52, 99, 29, 159, 53, 90, 199, 179, 95, 45, 55, 185, 118, 87, 135, 218, 108, 0, 36, 1, 144, 34, 173, 75, 11, 108, 231, 130, 28, 29, 245,
    145, 117, 119, 78, 42, 47, 36, 132, 213, 231, 207, 190, 62, 127, 70, 10, 52, 154, 6, 124, 250, 164, 209, 112, 232, 220, 90, 123, 9, 129, 102, 116,
    21, 38, 187, 231, 207, 238, 16, 203, 124, 237, 219, 216, 165, 36, 94, 6, 155, 159, 129, 33, 224, 164, 178, 138, 23, 85, 194, 144, 57, 129, 189, 94,
    129, 245, 32, 115, 99, 143, 226, 207, 225, 238, 141, 83, 57, 90, 113, 208, 163, 42, 152, 142, 79, 163, 159, 174, 127, 126, 7, 212, 160, 97, 255, 129,
    205, 88, 87, 214, 29, 55, 14, 61, 107, 119, 241, 114, 230, 5, 246, 205, 203, 126, 145, 43, 20, 251, 67, 46, 125, 165, 10, 146, 144, 48, 162, 88,
    144, 170, 133, 56, 80, 35, 132, 71, 165, 72, 253, 89, 197, 50, 86, 193, 63, 168, 204, 237, 50, 2, 78, 125, 186, 33, 127, 255, 249, 221, 79, 96,
    39, 31, 233, 31, 107, 26, 39, 149, 106, 63, 7, 4, 160, 122, 16, 82, 191, 242, 242, 47, 227, 235, 151, 53, 217, 70, 106, 96, 158, 107, 90, 2,
    134, 177, 19, 185, 14, 253, 25, 212, 126, 189, 11, 41, 244, 60, 140, 191, 6, 8, 231, 250, 125, 98, 47, 173, 40, 166, 201, 197, 246, 100, 13, 182,
    127, 2, 125, 225, 250, 148, 219, 146, 130, 196, 103, 242, 92, 144, 84, 254, 10, 173, 202, 236, 163, 116, 201, 210, 141, 65, 121, 86, 178, 142, 201, 197,
    5, 49, 13, 67, 1, 193, 143, 106, 46, 172, 65, 68, 227, 48, 240, 99, 42, 17, 188, 203, 127, 82, 47, 166, 249, 83, 1, 155, 108, 24, 71, 19,
    11, 52, 224, 144, 36, 96, 61, 67, 142, 200, 177, 50, 124, 142, 161, 228, 132, 149, 74, 108, 202, 82, 222, 221, 21, 68, 142, 97, 80, 10, 205, 51,
    134, 82, 86, 82, 38, 20, 234, 127, 13, 178, 62, 7, 109, 214, 143, 178, 118, 204, 104, 152, 43, 0, 235, 207, 180, 23, 3, 47, 113, 18, 4, 11,
    234, 72, 38, 5, 38, 103, 205, 60, 250, 183, 171, 97, 69, 104, 14, 173, 2, 12, 53, 244, 14, 217, 5, 3, 224, 54, 113, 244, 225, 253, 213, 245,
    81, 141, 28, 213, 27, 64, 46, 152, 207, 143, 100, 155, 224, 128, 76, 46, 127, 237, 121, 213, 126, 198, 94, 198, 2, 245, 191, 47, 7, 254, 99, 25,
    112, 253, 223, 169, 157, 136, 129, 197, 6, 149, 179, 131, 73, 201, 181, 51, 253, 114, 8, 89, 129, 162, 71, 164, 17, 134, 6, 86, 247, 168, 191, 72,
    150, 228, 53, 49, 170, 28, 32, 55, 31, 201, 117, 77, 103, 235, 249, 156, 226, 192, 131, 161, 224, 250, 245, 120, 135, 19, 154, 87, 105, 117, 58, 53,
    38, 177, 235, 39, 237, 86, 197, 216, 154, 109, 19, 61, 150, 81, 35, 198, 182, 87, 197, 239, 83, 241, 220, 193, 135, 86, 147, 253, 62, 105, 194, 131,
    100, 87, 72, 9, 40, 188, 163, 62, 80, 40, 115, 215, 215, 178, 228, 177, 185, 25, 27, 212, 87, 192, 75, 96, 159, 154, 21, 142, 164, 128, 153, 3,
    78, 55, 17, 204, 178, 81, 78, 64, 32, 168, 207, 44, 251, 198, 245, 23, 121, 27, 152, 196, 42, 216, 206, 189, 48, 250, 238, 43, 142, 178, 209, 234,
    187, 199, 199, 213, 194, 216, 66, 168, 229, 246, 23, 203, 43, 176, 29, 123, 16, 2, 84, 220, 31, 91, 181, 214, 49, 254, 169, 130, 191, 12, 61, 55,
    169, 28, 129, 231, 140, 40, 248, 154, 152, 86, 170, 245, 223, 3, 215, 103, 69, 121, 229, 202, 10, 43, 153, 247, 136, 171, 95, 35, 154, 172, 35, 0,
    66, 29, 226, 184, 140, 235, 232, 139, 70, 129, 67, 7, 73, 197, 168, 214, 147, 224, 42, 137, 128, 251, 74, 179, 141, 68, 24, 221, 19, 19, 38, 219,
    28, 123, 95, 229, 89, 209, 198, 39, 247, 51, 99, 29, 248, 121, 227, 39, 21, 38, 75, 141, 0, 174, 188, 81, 238, 103, 212, 174, 239, 180, 106, 5,
    77, 214, 68, 31, 214, 8, 24, 66, 147, 252, 23, 244, 183, 201, 190, 65, 254, 66, 23, 38, 203, 136, 50, 79, 153, 246, 29, 182, 144, 45, 130, 211,
    98, 132, 60, 119, 246, 150, 70, 62, 245, 134, 86, 76, 235, 150, 227, 64, 63, 191, 159, 76, 174, 198, 215, 83, 239, 102, 42, 80, 77, 109, 248, 78,
    40, 88, 156, 40, 64, 107, 51, 202, 28, 170, 246, 44, 17, 148, 29, 149, 18, 27, 160, 79, 100, 97, 160, 83, 207, 116, 169, 117, 117, 101, 103, 39,
    6, 40, 65, 155, 120, 81, 242, 118, 249, 212, 237, 81, 26, 194, 164, 45, 156, 9, 239, 114, 54, 170, 62, 68, 193, 202, 5, 83, 1, 247, 31, 120,
    183, 16, 15, 188, 70, 199, 137, 161, 65, 176, 78, 210, 210, 26, 76, 219, 213, 204, 75, 148, 102, 92, 168, 128, 192, 43, 141, 183, 242, 200, 75, 114,
    38, 56, 116, 33, 110, 172, 65, 220, 152, 77, 70, 108, 2, 128, 66, 232, 35, 172, 35, 175, 95, 191, 206, 135, 44, 171, 92, 186, 88, 7, 223, 89,
    149, 84, 201, 186, 201, 245, 97, 254, 180, 169, 52, 33, 18, 24, 88, 94, 181, 56, 165, 131, 168, 208, 65, 136, 173, 82, 201, 232, 114, 172, 160, 126,
    214, 226, 7, 232, 206, 137, 248, 84, 121, 93, 191, 140, 132, 179, 148, 114, 87, 224, 43, 245, 126, 130, 218, 171, 76, 196, 210, 4, 204, 81, 29, 31,
    171, 179, 109, 254, 144, 139, 207, 33, 251, 133, 42, 174, 54, 78, 39, 183, 152, 162, 118, 254, 207, 169, 69, 50, 92, 110, 83, 28, 101, 77, 52, 172,
    106, 85, 17, 175, 103, 223, 168, 138, 147, 127, 150, 42, 94, 147, 74, 174, 11, 21, 189, 86, 51, 39, 39, 223, 95, 51, 223, 99, 8, 253, 47, 80,
    208, 183, 143, 40, 255, 81, 35, 42, 67, 250, 3, 234, 102, 159, 26, 4, 87, 253, 111, 236, 72, 224, 173, 221, 42, 242, 134, 141, 224, 143, 228, 113,
    239, 97, 50, 19, 124, 31, 155, 28, 236, 219, 217, 77, 67, 138, 123, 180, 137, 49, 79, 179, 93, 224, 201, 11, 166, 113, 18, 101, 22, 148, 27, 97,
    30, 168, 32, 166, 66, 171, 165, 171, 180, 202, 236, 174, 212, 72, 179, 148, 66, 13, 92, 100, 193, 107, 65, 112, 206, 142, 68, 77, 93, 41, 225, 39,
    227, 248, 11, 141, 2, 88, 4, 65, 188, 193, 74, 106, 164, 91, 213, 12, 97, 193, 234, 177, 138, 58, 83, 160, 128, 66, 206, 74, 107, 225, 140, 128,
    191, 94, 205, 48, 22, 97, 91, 68, 153, 86, 217, 19, 57, 1, 43, 103, 213, 185, 236, 213, 60, 10, 206, 67, 120, 14, 205, 134, 247, 87, 109, 127,
    15, 162, 200, 218, 9, 176, 99, 82, 105, 252, 103, 189, 81, 79, 112, 49, 194, 209, 87, 201, 159, 137, 73, 206, 73, 179, 42, 2, 197, 151, 198, 75,
    156, 85, 120, 237, 30, 177, 120, 37, 70, 68, 71, 184, 37, 65, 44, 111, 99, 237, 226, 180, 214, 130, 181, 6, 50, 252, 255, 90, 110, 109, 168, 101,
    195, 90, 54, 1, 40, 88, 104, 76, 227, 47, 96, 107, 16, 18, 179, 125, 157, 180, 10, 34, 57, 26, 221, 210, 233, 58, 12, 33, 52, 103, 128, 12,
    170, 169, 64, 113, 4, 2, 214, 153, 186, 206, 22, 128, 116, 77, 27, 164, 213, 207, 86, 212, 35, 207, 138, 99, 92, 211, 144, 63, 214, 174, 125, 227,
    237, 8, 11, 149, 113, 128, 131, 99, 34, 43, 203, 183, 22, 236, 129, 124, 124, 255, 129, 199, 221, 207, 159, 109, 92, 223, 9, 54, 245, 40, 8, 21,
    47, 160, 70, 135, 140, 216, 140, 243, 42, 173, 193, 50, 57, 129, 13, 208, 153, 177, 237, 42, 97, 99, 42, 157, 138, 66, 196, 245, 26, 105, 202, 141,
    167, 22, 246, 113, 25, 133, 186, 144, 19, 251, 38, 9, 247, 84, 90, 106, 41, 167, 10, 9, 59, 88, 251, 9, 250, 54, 185, 112, 22, 89, 190, 189,
    164, 241, 52, 173, 53, 180, 181, 81, 28, 198, 234, 162, 6, 247, 119, 212, 200, 216, 246, 168, 21, 233, 181, 186, 151, 135, 195, 124, 228, 48, 216, 203,
    124, 233, 202, 26, 195, 159, 87, 16, 16, 200, 29, 82, 101, 91, 2, 69, 59, 170, 2, 40, 172, 110, 139, 179, 118, 81, 229, 159, 92, 92, 129, 150,
    90, 127, 150, 244, 33, 134, 15, 251, 163, 202, 29, 174, 227, 229, 213, 110, 53, 11, 96, 141, 250, 16, 241, 149, 56, 83, 242, 171, 66, 57, 39, 153,
    114, 212, 217, 107, 142, 27, 201, 238, 23, 170, 37, 5, 204, 214, 72, 113, 42, 67, 183, 130, 70, 226, 194, 24, 3, 237, 210, 96, 206, 39, 203, 251,
    213, 161, 25, 144, 199, 4, 191, 127, 36, 38, 42, 5, 176, 226, 20, 216, 255, 6, 52, 240, 171, 153, 162, 82, 166, 246, 59, 54, 151, 125, 15, 22,
    191, 7, 123, 186, 238, 47, 245, 254, 193, 128, 66, 219, 121, 149, 146, 229, 84, 170, 188, 3, 181, 125, 143, 128, 124, 99, 163, 171, 208, 218, 44, 105,
    4, 203, 228, 205, 210, 74, 202, 52, 177, 81, 101, 97, 57, 11, 154, 196, 159, 142, 66, 240, 120, 145, 227, 30, 125, 174, 22, 135, 30, 131, 99, 152,
    244, 85, 42, 138, 248, 0, 10, 224, 226, 48, 134, 85, 112, 75, 62, 1, 23, 159, 107, 42, 162, 130, 165, 227, 238, 136, 34, 39, 76, 55, 53, 228,
    158, 53, 195, 95, 96, 237, 145, 141, 95, 93, 248, 223, 43, 89, 61, 128, 146, 23, 23, 100, 237, 139, 13, 109, 189, 197, 63, 64, 65, 42, 44, 84,
    87, 85, 123, 40, 144, 141, 159, 72, 182, 168, 212, 2, 217, 248, 30, 178, 96, 178, 79, 147, 118, 123, 88, 218, 237, 97, 178, 246, 19, 201, 218, 135,
    201, 218, 247, 144, 237, 62, 141, 106, 247, 32, 209, 238, 97, 154, 189, 167, 209, 236, 29, 164, 217, 59, 72, 51, 119, 87, 98, 82, 151, 230, 136, 31,
    89, 240, 33, 150, 80, 248, 243, 1, 12, 193, 76, 163, 114, 83, 94, 167, 114, 182, 220, 80, 134, 82, 3, 127, 165, 29, 103, 232, 91, 198, 106, 62,
    220, 239, 109, 86, 116, 44, 204, 27, 162, 243, 94, 123, 73, 69, 10, 137, 74, 128, 209, 218, 175, 104, 4, 10, 235, 184, 153, 218, 213, 53, 45, 236,
    86, 240, 109, 97, 69, 70, 44, 123, 176, 144, 202, 20, 143, 162, 138, 24, 84, 32, 142, 63, 225, 143, 207, 15, 17, 62, 99, 172, 209, 128, 62, 5,
    216, 144, 192, 156, 158, 44, 41, 44, 16, 182, 9, 193, 238, 147, 24, 7, 16, 140, 219, 246, 135, 36, 50, 99, 123, 13, 173, 43, 17, 215, 42, 191,
    60, 33, 253, 15, 76, 69, 242, 68, 98, 109, 149, 137, 68, 203, 100, 235, 95, 205, 37, 45, 112, 41, 241, 249, 251, 42, 44, 245, 19, 60, 239, 225,
    79, 24, 79, 97, 254, 8, 247, 177, 137, 136, 180, 84, 97, 88, 236, 183, 140, 176, 238, 89, 80, 179, 156, 178, 85, 19, 51, 136, 18, 122, 22, 238,
    87, 244, 200, 223, 142, 63, 254, 117, 252, 110, 58, 28, 92, 141, 167, 31, 174, 63, 78, 127, 25, 124, 84, 22, 59, 96, 153, 55, 236, 228, 99, 122,
    91, 88, 50, 88, 209, 162, 44, 184, 6, 29, 52, 2, 80, 189, 100, 214, 86, 96, 87, 48, 7, 243, 57, 208, 125, 80, 175, 91, 219, 125, 234, 220,
    199, 78, 245, 94, 59, 0, 164, 53, 48, 6, 107, 251, 121, 31, 238, 135, 198, 89, 66, 144, 131, 40, 96, 32, 115, 138, 7, 194, 44, 62, 62, 68,
    63, 64, 131, 104, 154, 4, 188, 195, 167, 152, 226, 18, 61, 85, 123, 197, 49, 195, 150, 109, 108, 73, 175, 9, 122, 75, 222, 58, 235, 188, 148, 228,
    211, 28, 1, 126, 132, 127, 3, 218, 90, 249, 111, 52, 1, 53, 167, 89, 35, 127, 108, 130, 200, 41, 75, 251, 88, 238, 238, 233, 73, 78, 229, 33,
    2, 130, 217, 28, 236, 75, 46, 75, 75, 43, 139, 243, 29, 101, 41, 70, 140, 57, 156, 243, 56, 89, 168, 179, 215, 31, 114, 89, 76, 173, 44, 223,
    81, 148, 98, 20, 42, 185, 216, 71, 73, 98, 223, 35, 72, 83, 43, 200, 108, 151, 104, 102, 160, 239, 44, 8, 35, 242, 112, 65, 188, 195, 130, 116,
    167, 55, 232, 37, 52, 226, 52, 107, 132, 255, 48, 31, 32, 146, 249, 0, 142, 120, 0, 164, 117, 195, 37, 124, 205, 71, 12, 32, 167, 28, 42, 20,
    54, 182, 251, 123, 118, 58, 209, 137, 49, 223, 216, 231, 191, 111, 202, 15, 166, 120, 186, 26, 252, 50, 190, 156, 138, 73, 226, 234, 122, 48, 122, 139,
    179, 132, 168, 44, 204, 29, 253, 52, 215, 111, 67, 103, 111, 221, 4, 19, 1, 250, 114, 1, 38, 218, 184, 17, 207, 83, 227, 117, 188, 214, 115, 103,
    87, 54, 125, 231, 206, 236, 55, 152, 65, 233, 91, 158, 212, 84, 201, 43, 200, 154, 96, 218, 215, 0, 98, 94, 232, 191, 44, 11, 142, 231, 22, 136,
    68, 184, 202, 17, 130, 88, 80, 116, 196, 119, 246, 248, 230, 172, 200, 72, 216, 220, 76, 111, 19, 204, 14, 154, 206, 221, 40, 78, 166, 148, 55, 18,
    187, 185, 173, 73, 179, 153, 239, 231, 138, 38, 191, 190, 157, 174, 232, 10, 39, 123, 119, 197, 18, 74, 17, 150, 37, 205, 152, 131, 174, 6, 120, 202,
    247, 69, 97, 14, 186, 153, 206, 45, 215, 43, 53, 107, 118, 116, 205, 194, 216, 155, 206, 214, 174, 151, 192, 196, 37, 181, 184, 108, 119, 203, 82, 252,
    250, 246, 163, 12, 207, 0, 79, 79, 135, 3, 67, 7, 58, 5, 214, 49, 56, 227, 166, 52, 13, 124, 202, 89, 105, 26, 237, 193, 104, 210, 209, 176,
    162, 54, 72, 54, 129, 104, 48, 30, 141, 155, 151, 167, 154, 6, 94, 224, 47, 30, 71, 162, 208, 66, 67, 163, 208, 6, 172, 193, 118, 253, 68, 116,
    69, 170, 204, 214, 164, 91, 238, 176, 20, 148, 139, 145, 130, 14, 135, 103, 195, 209, 62, 80, 193, 78, 14, 219, 102, 71, 103, 37, 190, 205, 233, 245,
    187, 171, 233, 155, 159, 7, 127, 25, 115, 165, 119, 105, 215, 48, 185, 218, 139, 168, 111, 74, 150, 144, 162, 111, 78, 38, 237, 50, 215, 197, 92, 153,
    20, 218, 60, 59, 211, 200, 152, 67, 227, 49, 73, 102, 92, 131, 137, 48, 2, 118, 2, 25, 44, 112, 127, 245, 211, 103, 49, 162, 210, 165, 26, 148,
    125, 189, 19, 101, 194, 193, 200, 69, 48, 70, 120, 233, 202, 66, 141, 8, 87, 200, 86, 222, 231, 40, 179, 89, 19, 37, 105, 156, 196, 74, 155, 189,
    118, 207, 80, 106, 98, 94, 211, 156, 180, 46, 219, 106, 147, 45, 171, 232, 117, 219, 35, 165, 220, 230, 229, 237, 179, 206, 176, 163, 84, 116, 89, 57,
    200, 54, 232, 52, 149, 138, 30, 171, 104, 153, 230, 89, 161, 194, 226, 168, 206, 154, 131, 166, 202, 46, 172, 49, 88, 147, 177, 217, 59, 173, 165, 211,
    67, 113, 71, 143, 177, 61, 232, 117, 122, 102, 38, 81, 33, 66, 99, 16, 70, 167, 219, 157, 116, 52, 16, 84, 64, 244, 122, 237, 214, 112, 148, 147,
    177, 61, 151, 244, 137, 194, 96, 187, 61, 233, 166, 24, 226, 36, 213, 216, 112, 56, 26, 169, 220, 73, 129, 55, 130, 152, 173, 230, 104, 84, 43, 215,
    199, 238, 103, 33, 56, 12, 189, 2, 243, 89, 244, 197, 104, 140, 39, 151, 221, 158, 22, 66, 116, 79, 179, 101, 182, 7, 93, 83, 3, 65, 5, 196,
    233, 176, 51, 25, 183, 82, 0, 37, 88, 103, 8, 58, 198, 105, 175, 51, 86, 184, 76, 103, 68, 198, 227, 233, 228, 204, 104, 150, 155, 11, 51, 48,
    39, 195, 209, 165, 210, 56, 230, 123, 43, 188, 214, 104, 117, 141, 182, 169, 34, 119, 185, 138, 200, 49, 233, 126, 6, 69, 179, 13, 143, 92, 103, 157,
    179, 230, 120, 156, 117, 151, 235, 207, 189, 32, 224, 214, 208, 185, 156, 76, 138, 198, 144, 6, 19, 88, 63, 106, 143, 7, 8, 112, 151, 79, 116, 55,
    145, 118, 144, 108, 237, 229, 34, 221, 2, 9, 115, 22, 98, 151, 156, 32, 157, 30, 231, 164, 233, 116, 90, 115, 131, 52, 26, 255, 241, 254, 3, 57,
    85, 241, 154, 90, 188, 74, 255, 112, 13, 76, 38, 151, 151, 29, 93, 255, 165, 250, 27, 245, 198, 163, 129, 6, 64, 212, 55, 207, 6, 157, 203, 51,
    83, 136, 197, 206, 249, 87, 142, 150, 56, 118, 205, 167, 168, 139, 184, 155, 38, 199, 61, 4, 55, 157, 55, 116, 195, 149, 187, 151, 109, 182, 3, 196,
    6, 6, 232, 131, 247, 163, 203, 140, 32, 87, 143, 189, 101, 7, 145, 167, 6, 87, 207, 105, 171, 53, 76, 149, 146, 5, 105, 152, 217, 237, 89, 152,
    205, 140, 216, 211, 13, 164, 143, 191, 146, 147, 215, 236, 100, 116, 69, 147, 101, 224, 16, 55, 198, 227, 94, 112, 231, 222, 142, 204, 32, 112, 112, 48,
    166, 131, 255, 231, 105, 11, 221, 213, 133, 104, 23, 38, 193, 130, 250, 174, 221, 248, 112, 213, 58, 105, 215, 77, 227, 228, 87, 22, 185, 156, 96, 42,
    231, 201, 120, 75, 237, 53, 114, 1, 191, 216, 13, 136, 148, 1, 117, 135, 1, 4, 151, 31, 251, 41, 12, 63, 109, 196, 252, 125, 246, 163, 80, 206,
    242, 98, 210, 159, 89, 29, 63, 179, 118, 231, 120, 142, 154, 253, 206, 106, 217, 201, 207, 116, 30, 5, 43, 182, 228, 165, 113, 204, 118, 18, 138, 133,
    25, 60, 78, 20, 60, 141, 66, 252, 234, 231, 42, 12, 97, 254, 192, 117, 114, 18, 16, 30, 26, 17, 209, 154, 3, 200, 65, 215, 47, 201, 135, 132,
    103, 244, 242, 93, 71, 16, 159, 90, 55, 183, 150, 87, 73, 33, 170, 98, 243, 13, 204, 171, 155, 101, 149, 54, 26, 41, 147, 193, 92, 208, 208, 225,
    102, 180, 115, 228, 10, 209, 28, 21, 216, 1, 145, 208, 53, 97, 78, 132, 0, 46, 218, 145, 10, 116, 64, 29, 27, 85, 81, 20, 176, 44, 123, 141,
    27, 0, 24, 130, 222, 184, 9, 218, 2, 71, 145, 199, 168, 90, 98, 200, 69, 149, 39, 119, 85, 14, 7, 141, 249, 193, 177, 62, 142, 149, 208, 99,
    140, 3, 241, 69, 178, 72, 42, 57, 121, 53, 87, 182, 24, 102, 86, 51, 245, 233, 177, 43, 249, 103, 21, 109, 148, 164, 48, 152, 199, 210, 143, 230,
    107, 79, 68, 171, 112, 40, 165, 0, 107, 25, 43, 71, 67, 57, 119, 218, 69, 194, 163, 185, 44, 7, 208, 57, 131, 90, 10, 90, 70, 11, 161, 117,
    206, 100, 118, 118, 207, 253, 28, 1, 107, 147, 3, 37, 101, 201, 88, 216, 221, 228, 127, 241, 28, 182, 196, 190, 140, 34, 133, 43, 44, 237, 180, 132,
    163, 167, 81, 46, 106, 32, 101, 34, 58, 200, 133, 224, 35, 245, 196, 82, 119, 136, 129, 88, 202, 145, 195, 179, 250, 220, 81, 180, 114, 184, 52, 11,
    177, 176, 177, 198, 215, 192, 229, 6, 130, 65, 83, 78, 80, 103, 199, 74, 156, 192, 11, 12, 123, 205, 51, 77, 66, 163, 88, 15, 107, 206, 189, 165,
    90, 149, 8, 4, 158, 48, 11, 169, 27, 22, 101, 225, 69, 230, 72, 252, 165, 36, 179, 72, 111, 17, 87, 76, 254, 6, 195, 176, 203, 147, 157, 68,
    158, 16, 230, 102, 124, 145, 229, 16, 125, 133, 81, 186, 216, 232, 224, 24, 138, 187, 142, 225, 30, 159, 155, 130, 231, 46, 215, 80, 244, 4, 237, 234,
    57, 83, 165, 107, 20, 217, 17, 82, 57, 77, 174, 32, 45, 166, 226, 60, 81, 94, 242, 35, 105, 253, 235, 100, 78, 25, 59, 53, 57, 103, 162, 166,
    94, 186, 93, 240, 16, 93, 148, 167, 87, 102, 165, 53, 130, 119, 49, 75, 218, 9, 22, 89, 26, 84, 145, 11, 174, 159, 162, 196, 105, 131, 169, 203,
    4, 79, 5, 78, 139, 21, 137, 51, 167, 196, 68, 230, 91, 224, 221, 74, 142, 161, 198, 76, 91, 209, 11, 7, 106, 73, 64, 25, 194, 110, 85, 200,
    240, 64, 248, 17, 187, 55, 212, 84, 185, 200, 123, 52, 227, 184, 172, 222, 180, 106, 175, 142, 179, 72, 167, 2, 191, 202, 22, 183, 158, 255, 226, 210,
    77, 217, 226, 0, 56, 189, 40, 117, 76, 148, 157, 52, 37, 227, 202, 224, 25, 87, 57, 180, 62, 173, 74, 144, 225, 119, 111, 16, 88, 186, 210, 227,
    166, 46, 76, 239, 88, 202, 230, 205, 113, 29, 56, 185, 149, 108, 91, 192, 234, 108, 187, 172, 42, 17, 200, 49, 27, 44, 105, 138, 123, 95, 118, 147,
    117, 143, 38, 244, 162, 179, 253, 193, 108, 224, 53, 25, 114, 193, 142, 171, 140, 51, 252, 160, 31, 182, 89, 118, 239, 182, 124, 73, 146, 41, 18, 144,
    220, 20, 26, 221, 169, 143, 44, 89, 247, 130, 240, 148, 210, 58, 14, 174, 145, 80, 118, 197, 86, 13, 172, 236, 190, 53, 249, 189, 200, 255, 220, 186,
    161, 60, 140, 203, 119, 128, 164, 244, 199, 44, 231, 79, 3, 159, 111, 3, 29, 106, 144, 94, 135, 158, 178, 155, 229, 219, 164, 8, 222, 82, 160, 87,
    129, 227, 206, 93, 234, 28, 134, 78, 3, 117, 49, 148, 75, 50, 100, 54, 97, 192, 224, 43, 213, 166, 244, 30, 208, 126, 128, 163, 253, 64, 20, 85,
    218, 251, 131, 110, 199, 156, 218, 108, 129, 205, 78, 123, 152, 127, 198, 53, 29, 91, 183, 53, 13, 92, 218, 161, 226, 228, 74, 177, 14, 127, 48, 103,
    77, 20, 173, 168, 219, 71, 72, 134, 130, 237, 9, 149, 213, 75, 105, 202, 246, 96, 245, 17, 20, 154, 163, 71, 41, 47, 240, 169, 172, 60, 220, 219,
    144, 245, 99, 111, 63, 247, 115, 181, 194, 227, 30, 21, 98, 159, 125, 62, 100, 33, 194, 106, 247, 153, 136, 168, 62, 36, 103, 17, 195, 125, 70, 82,
    222, 189, 253, 231, 89, 73, 145, 55, 102, 38, 197, 65, 245, 24, 225, 30, 107, 39, 169, 254, 30, 67, 227, 94, 75, 41, 239, 152, 127, 119, 83, 201,
    47, 249, 203, 73, 16, 236, 91, 241, 214, 252, 42, 231, 254, 172, 140, 226, 65, 184, 4, 191, 111, 180, 22, 192, 158, 170, 109, 77, 140, 163, 108, 10,
    28, 240, 132, 248, 73, 97, 235, 177, 29, 5, 158, 247, 142, 206, 197, 185, 65, 57, 206, 233, 86, 138, 22, 149, 143, 38, 180, 183, 162, 98, 74, 89,
    104, 247, 227, 97, 118, 43, 174, 232, 202, 121, 243, 15, 107, 221, 194, 214, 105, 200, 80, 84, 187, 12, 85, 173, 62, 82, 111, 5, 247, 240, 104, 197,
    21, 48, 23, 54, 82, 116, 19, 244, 205, 173, 54, 136, 83, 195, 98, 6, 152, 46, 34, 211, 8, 137, 181, 44, 70, 194, 242, 180, 60, 101, 16, 120,
    123, 88, 90, 61, 32, 26, 205, 28, 123, 195, 110, 17, 137, 158, 85, 118, 48, 10, 35, 189, 197, 64, 5, 213, 46, 11, 126, 217, 245, 16, 153, 56,
    203, 51, 195, 131, 234, 184, 188, 97, 32, 133, 158, 233, 197, 146, 82, 240, 133, 177, 20, 227, 157, 69, 157, 168, 236, 142, 73, 126, 248, 129, 136, 50,
    145, 199, 141, 229, 237, 150, 90, 110, 166, 229, 182, 90, 126, 154, 150, 207, 213, 242, 86, 90, 126, 90, 138, 217, 114, 33, 128, 99, 183, 16, 184, 21,
    131, 185, 60, 141, 252, 144, 170, 36, 148, 192, 146, 41, 171, 204, 65, 150, 216, 230, 103, 113, 129, 212, 44, 129, 117, 203, 230, 34, 154, 23, 214, 114,
    58, 165, 75, 125, 243, 0, 189, 183, 186, 122, 189, 219, 29, 189, 222, 109, 67, 45, 239, 164, 120, 122, 106, 121, 87, 148, 119, 11, 229, 189, 20, 143,
    85, 160, 107, 136, 10, 163, 208, 129, 205, 148, 35, 227, 172, 212, 131, 92, 89, 159, 176, 169, 98, 10, 125, 45, 88, 83, 5, 107, 237, 1, 51, 85,
    176, 179, 61, 96, 167, 42, 88, 187, 8, 38, 157, 64, 250, 120, 218, 43, 58, 16, 152, 45, 0, 234, 18, 75, 89, 35, 182, 143, 165, 25, 175, 217,
    10, 229, 62, 243, 76, 7, 189, 234, 42, 114, 223, 144, 238, 226, 163, 169, 69, 65, 88, 201, 107, 26, 141, 43, 203, 119, 147, 29, 128, 80, 251, 134,
    151, 177, 245, 143, 242, 206, 5, 211, 224, 217, 204, 236, 198, 163, 220, 55, 150, 71, 163, 164, 114, 196, 183, 162, 211, 215, 40, 145, 57, 123, 219, 75,
    157, 92, 71, 59, 98, 45, 144, 52, 160, 220, 5, 235, 136, 132, 113, 11, 79, 50, 96, 242, 158, 111, 72, 175, 110, 24, 117, 229, 61, 17, 155, 37,
    190, 13, 38, 31, 39, 154, 151, 22, 68, 107, 127, 186, 180, 182, 121, 66, 100, 126, 126, 210, 223, 203, 254, 41, 190, 246, 131, 73, 240, 162, 180, 170,
    19, 217, 42, 18, 27, 141, 6, 166, 155, 144, 205, 77, 38, 16, 60, 133, 48, 53, 130, 154, 98, 190, 155, 191, 161, 196, 182, 96, 173, 27, 5, 51,
    120, 6, 41, 231, 115, 12, 89, 146, 128, 220, 184, 158, 39, 182, 230, 201, 140, 66, 41, 205, 222, 141, 34, 94, 28, 50, 91, 39, 248, 198, 134, 181,
    231, 0, 220, 159, 235, 74, 127, 230, 247, 68, 115, 6, 149, 183, 59, 224, 27, 33, 112, 15, 72, 122, 131, 78, 246, 186, 136, 122, 93, 209, 166, 244,
    198, 6, 229, 189, 45, 53, 114, 42, 57, 121, 141, 138, 83, 141, 164, 60, 192, 204, 23, 89, 34, 162, 139, 51, 69, 241, 172, 26, 12, 79, 214, 97,
    86, 24, 204, 144, 80, 161, 16, 214, 192, 139, 5, 94, 171, 11, 209, 191, 97, 233, 93, 122, 44, 184, 132, 142, 243, 210, 196, 152, 8, 30, 130, 213,
    52, 180, 216, 221, 75, 44, 161, 219, 41, 190, 97, 76, 61, 48, 99, 239, 209, 8, 163, 109, 5, 95, 135, 150, 49, 217, 104, 64, 111, 79, 157, 157,
    15, 35, 104, 154, 130, 228, 222, 54, 98, 190, 95, 53, 139, 179, 30, 190, 74, 36, 63, 145, 170, 252, 214, 248, 247, 175, 18, 19, 119, 13, 59, 88,
    173, 2, 191, 1, 40, 161, 6, 201, 221, 253, 86, 21, 47, 248, 224, 156, 179, 7, 217, 240, 128, 206, 30, 59, 75, 199, 202, 92, 125, 21, 18, 112,
    201, 178, 197, 57, 62, 214, 175, 76, 46, 117, 175, 92, 145, 14, 3, 107, 84, 203, 148, 110, 11, 94, 64, 232, 139, 109, 99, 13, 178, 212, 112, 157,
    236, 109, 163, 155, 198, 93, 173, 10, 167, 157, 74, 38, 144, 60, 85, 42, 20, 6, 194, 189, 53, 8, 131, 104, 8, 238, 125, 8, 233, 142, 10, 82,
    177, 99, 50, 47, 198, 119, 213, 73, 97, 141, 160, 159, 71, 67, 210, 118, 145, 104, 129, 187, 122, 210, 166, 122, 185, 197, 72, 138, 179, 217, 109, 13,
    209, 230, 69, 209, 129, 177, 183, 10, 88, 248, 202, 179, 11, 114, 196, 227, 121, 126, 64, 106, 214, 193, 92, 183, 71, 229, 171, 27, 156, 223, 61, 103,
    44, 82, 30, 141, 226, 180, 181, 151, 230, 184, 234, 126, 19, 150, 85, 203, 4, 3, 111, 227, 139, 251, 203, 117, 150, 249, 6, 62, 110, 13, 157, 182,
    3, 133, 58, 174, 109, 97, 208, 145, 44, 173, 132, 215, 9, 93, 47, 173, 152, 88, 136, 130, 132, 75, 39, 130, 233, 36, 89, 226, 86, 154, 199, 222,
    114, 86, 39, 255, 8, 214, 204, 99, 45, 173, 200, 177, 3, 135, 178, 107, 9, 238, 106, 1, 78, 5, 59, 13, 79, 17, 211, 195, 10, 204, 156, 23,
    14, 155, 97, 0, 186, 27, 55, 94, 34, 24, 158, 81, 98, 18, 20, 191, 214, 0, 19, 212, 111, 251, 167, 166, 52, 115, 143, 235, 43, 29, 244, 141,
    198, 251, 89, 130, 51, 2, 115, 42, 89, 150, 78, 178, 140, 130, 245, 98, 153, 10, 227, 113, 47, 39, 191, 250, 74, 245, 65, 169, 42, 197, 168, 81,
    223, 231, 51, 238, 202, 230, 194, 7, 52, 232, 213, 97, 131, 122, 202, 119, 72, 167, 124, 35, 158, 183, 207, 215, 25, 135, 26, 106, 91, 52, 179, 38,
    194, 8, 241, 40, 186, 220, 80, 94, 201, 148, 35, 246, 253, 44, 214, 88, 190, 67, 74, 162, 56, 132, 77, 168, 174, 233, 200, 149, 11, 115, 148, 153,
    87, 200, 29, 93, 54, 148, 112, 223, 85, 131, 46, 103, 57, 75, 138, 16, 169, 166, 153, 47, 22, 99, 231, 13, 212, 137, 129, 35, 105, 18, 243, 47,
    246, 52, 248, 105, 229, 148, 225, 49, 89, 100, 15, 188, 58, 56, 203, 107, 146, 252, 44, 81, 73, 250, 120, 216, 89, 98, 202, 167, 232, 45, 5, 195,
    99, 14, 49, 205, 71, 31, 98, 10, 129, 179, 115, 75, 243, 41, 132, 213, 108, 149, 135, 81, 206, 58, 51, 141, 53, 21, 28, 251, 207, 76, 53, 98,
    43, 36, 10, 247, 85, 184, 103, 215, 115, 33, 187, 144, 70, 99, 236, 199, 107, 240, 63, 152, 63, 147, 58, 7, 11, 159, 111, 97, 130, 97, 161, 23,
    198, 88, 44, 64, 169, 23, 247, 100, 230, 218, 235, 91, 166, 113, 250, 185, 180, 209, 33, 72, 179, 137, 210, 40, 104, 150, 35, 75, 239, 165, 9, 175,
    53, 92, 187, 16, 175, 161, 211, 20, 119, 87, 240, 21, 5, 12, 178, 198, 221, 48, 6, 140, 220, 39, 103, 32, 27, 12, 5, 103, 20, 60, 3, 203,
    178, 129, 168, 109, 179, 164, 62, 131, 192, 125, 10, 12, 150, 72, 232, 222, 6, 204, 255, 81, 126, 193, 189, 46, 199, 97, 74, 132, 149, 42, 148, 167,
    75, 138, 68, 229, 217, 58, 222, 241, 28, 223, 161, 217, 189, 156, 116, 243, 136, 95, 129, 178, 131, 144, 131, 13, 70, 151, 125, 29, 0, 206, 53, 12,
    192, 236, 52, 79, 39, 90, 152, 16, 166, 10, 25, 172, 213, 106, 234, 192, 86, 116, 101, 11, 98, 8, 52, 220, 139, 43, 227, 9, 192, 206, 12, 45,
    46, 4, 17, 57, 160, 0, 212, 30, 104, 113, 113, 32, 190, 163, 194, 224, 134, 103, 123, 225, 36, 168, 145, 169, 133, 2, 101, 187, 14, 223, 21, 58,
    109, 154, 118, 203, 216, 3, 100, 71, 6, 215, 251, 100, 216, 107, 245, 116, 64, 127, 119, 61, 158, 24, 219, 236, 56, 103, 134, 22, 207, 45, 141, 220,
    15, 86, 98, 47, 25, 92, 219, 108, 119, 59, 45, 29, 28, 127, 239, 227, 52, 53, 233, 105, 147, 240, 133, 184, 22, 105, 17, 216, 228, 192, 195, 179,
    135, 0, 159, 10, 96, 173, 68, 69, 224, 22, 7, 30, 153, 90, 59, 128, 181, 81, 130, 175, 130, 100, 123, 3, 198, 176, 171, 55, 132, 104, 203, 59,
    228, 116, 48, 30, 105, 101, 119, 188, 248, 191, 187, 123, 210, 230, 54, 110, 37, 63, 231, 95, 76, 84, 245, 34, 42, 166, 164, 57, 56, 7, 237, 40,
    181, 18, 143, 196, 155, 231, 227, 249, 216, 170, 93, 175, 151, 69, 137, 67, 137, 49, 175, 229, 97, 75, 47, 241, 127, 127, 232, 110, 220, 192, 12, 73,
    231, 218, 90, 85, 217, 26, 205, 116, 55, 186, 27, 64, 163, 209, 0, 26, 15, 51, 46, 113, 156, 92, 101, 121, 191, 26, 138, 68, 141, 227, 232, 186,
    178, 222, 182, 147, 17, 85, 202, 101, 152, 121, 65, 72, 184, 40, 226, 69, 50, 231, 51, 76, 99, 63, 53, 9, 26, 107, 160, 69, 61, 104, 162, 64,
    91, 157, 122, 80, 110, 90, 81, 199, 55, 249, 112, 228, 213, 50, 51, 210, 130, 211, 44, 75, 226, 203, 74, 160, 88, 1, 85, 53, 124, 214, 166, 97,
    200, 231, 205, 49, 97, 147, 213, 228, 202, 7, 250, 225, 127, 183, 229, 182, 28, 220, 76, 23, 235, 114, 80, 46, 39, 4, 222, 46, 218, 237, 72, 218,
    31, 255, 41, 139, 192, 151, 163, 4, 192, 173, 115, 23, 12, 206, 79, 64, 91, 236, 120, 34, 102, 70, 243, 242, 118, 184, 153, 124, 148, 254, 43, 115,
    78, 137, 67, 190, 234, 174, 70, 140, 64, 109, 150, 59, 63, 87, 89, 195, 250, 253, 34, 187, 74, 219, 9, 108, 221, 13, 83, 239, 247, 176, 151, 100,
    45, 216, 248, 28, 134, 150, 239, 102, 113, 110, 102, 37, 21, 152, 77, 61, 71, 153, 242, 90, 62, 248, 226, 50, 234, 67, 236, 249, 34, 7, 72, 28,
    103, 96, 16, 162, 188, 54, 171, 114, 198, 48, 214, 106, 156, 60, 179, 195, 8, 123, 12, 146, 31, 180, 48, 62, 108, 41, 113, 34, 194, 135, 144, 137,
    127, 51, 29, 127, 19, 216, 99, 204, 214, 149, 120, 102, 103, 206, 17, 220, 185, 153, 108, 132, 248, 198, 241, 87, 187, 130, 173, 42, 218, 3, 218, 32,
    190, 227, 56, 171, 14, 229, 23, 223, 7, 233, 63, 76, 53, 241, 147, 173, 76, 187, 160, 3, 213, 10, 237, 57, 204, 170, 118, 81, 191, 55, 98, 139,
    139, 213, 138, 205, 30, 203, 99, 214, 96, 209, 92, 140, 12, 58, 252, 4, 158, 40, 13, 156, 25, 185, 3, 167, 178, 56, 56, 76, 240, 30, 215, 20,
    39, 50, 142, 198, 156, 172, 245, 112, 140, 190, 225, 170, 60, 165, 113, 42, 192, 221, 191, 171, 237, 114, 3, 211, 233, 79, 103, 20, 228, 2, 178, 252,
    196, 43, 152, 77, 94, 194, 174, 179, 182, 13, 195, 59, 208, 167, 42, 140, 78, 252, 69, 116, 152, 177, 85, 125, 250, 25, 44, 143, 61, 4, 111, 187,
    187, 170, 171, 170, 82, 153, 247, 176, 187, 174, 215, 187, 90, 132, 113, 24, 97, 143, 198, 51, 170, 104, 185, 225, 125, 111, 55, 242, 77, 37, 114, 248,
    197, 205, 86, 195, 21, 149, 60, 24, 149, 235, 141, 170, 33, 158, 117, 161, 225, 193, 214, 78, 61, 195, 130, 53, 100, 102, 135, 250, 220, 148, 115, 138,
    166, 24, 109, 96, 119, 183, 174, 210, 54, 120, 67, 33, 179, 134, 73, 178, 135, 130, 43, 104, 24, 22, 214, 110, 142, 127, 132, 196, 172, 181, 90, 18,
    59, 41, 147, 64, 217, 77, 165, 114, 171, 56, 31, 120, 220, 84, 252, 146, 213, 16, 253, 225, 41, 221, 94, 17, 160, 55, 210, 40, 215, 39, 166, 205,
    229, 71, 144, 27, 182, 27, 141, 201, 191, 195, 118, 104, 219, 104, 219, 206, 192, 84, 0, 96, 123, 87, 170, 11, 206, 38, 183, 119, 155, 96, 200, 102,
    113, 37, 243, 219, 71, 11, 28, 96, 23, 236, 191, 213, 186, 158, 24, 204, 137, 76, 98, 21, 144, 98, 2, 181, 23, 48, 77, 163, 246, 166, 235, 74,
    84, 1, 76, 179, 165, 3, 64, 215, 20, 132, 218, 11, 218, 128, 149, 117, 25, 220, 110, 225, 76, 195, 195, 98, 11, 195, 192, 124, 177, 193, 201, 61,
    6, 48, 175, 135, 163, 179, 179, 179, 122, 253, 242, 65, 33, 180, 76, 62, 51, 233, 186, 217, 231, 129, 64, 184, 254, 98, 117, 250, 160, 219, 126, 92,
    128, 210, 14, 214, 176, 198, 6, 139, 50, 242, 238, 15, 97, 116, 121, 247, 73, 100, 207, 137, 247, 54, 231, 48, 213, 179, 122, 97, 235, 11, 200, 152,
    163, 139, 192, 222, 203, 44, 196, 21, 195, 128, 23, 93, 183, 76, 66, 106, 211, 104, 196, 21, 86, 35, 62, 196, 108, 128, 86, 118, 139, 226, 140, 2,
    113, 197, 24, 226, 69, 119, 7, 145, 184, 98, 20, 241, 162, 59, 195, 136, 139, 45, 234, 243, 15, 80, 16, 143, 53, 152, 134, 53, 246, 154, 202, 164,
    169, 106, 201, 46, 209, 7, 223, 106, 42, 166, 245, 206, 120, 185, 92, 78, 31, 196, 108, 8, 173, 107, 185, 134, 47, 190, 46, 216, 18, 237, 210, 9,
    63, 52, 249, 161, 92, 221, 165, 63, 63, 167, 169, 227, 4, 118, 240, 226, 69, 3, 172, 123, 222, 12, 97, 197, 224, 124, 125, 183, 218, 222, 214, 246,
    114, 39, 180, 80, 103, 115, 226, 42, 172, 164, 126, 0, 168, 196, 139, 117, 188, 90, 62, 41, 130, 80, 199, 156, 212, 154, 8, 128, 248, 148, 85, 193,
    215, 114, 117, 143, 164, 219, 59, 135, 48, 30, 21, 217, 139, 17, 30, 27, 1, 216, 78, 210, 9, 147, 168, 85, 236, 148, 147, 226, 10, 120, 141, 70,
    190, 107, 164, 194, 232, 130, 2, 173, 229, 69, 11, 175, 104, 122, 137, 253, 69, 240, 140, 22, 46, 46, 43, 173, 34, 90, 178, 67, 21, 90, 28, 70,
    43, 62, 210, 123, 136, 24, 31, 58, 175, 194, 122, 82, 90, 188, 132, 171, 54, 143, 227, 176, 111, 217, 141, 244, 203, 198, 1, 73, 250, 183, 141, 6,
    204, 211, 76, 117, 79, 83, 48, 245, 199, 24, 51, 201, 244, 110, 251, 148, 54, 21, 31, 166, 246, 111, 160, 0, 147, 128, 150, 83, 164, 34, 2, 85,
    175, 37, 127, 202, 146, 61, 7, 72, 3, 108, 159, 41, 185, 183, 116, 117, 136, 125, 159, 242, 107, 70, 181, 104, 199, 176, 102, 156, 54, 223, 81, 86,
    85, 234, 149, 61, 219, 26, 111, 76, 153, 214, 142, 188, 201, 163, 234, 10, 119, 51, 67, 249, 161, 249, 164, 127, 119, 205, 45, 93, 254, 126, 207, 198,
    190, 96, 158, 39, 5, 220, 248, 233, 226, 221, 77, 61, 107, 42, 46, 228, 130, 146, 92, 227, 49, 55, 204, 168, 205, 44, 207, 134, 75, 185, 72, 196,
    0, 148, 68, 240, 114, 240, 129, 121, 209, 165, 179, 167, 3, 47, 69, 162, 72, 155, 248, 141, 169, 40, 209, 214, 37, 20, 55, 139, 66, 61, 22, 105,
    108, 95, 145, 212, 199, 147, 233, 102, 129, 9, 165, 85, 97, 218, 2, 182, 123, 202, 100, 0, 43, 89, 94, 232, 66, 131, 134, 173, 22, 26, 136, 220,
    79, 130, 20, 61, 91, 74, 202, 249, 130, 205, 130, 30, 227, 150, 24, 133, 167, 135, 16, 61, 219, 197, 72, 123, 168, 78, 87, 127, 231, 231, 63, 61,
    127, 241, 166, 231, 68, 70, 141, 157, 239, 84, 76, 83, 10, 166, 23, 232, 1, 84, 135, 44, 11, 126, 60, 65, 232, 239, 196, 98, 170, 255, 244, 239,
    111, 94, 188, 124, 189, 163, 116, 142, 204, 15, 106, 67, 106, 5, 70, 86, 54, 114, 51, 209, 6, 133, 193, 140, 119, 236, 105, 85, 110, 118, 17, 215,
    79, 84, 72, 218, 187, 83, 60, 80, 121, 94, 56, 125, 203, 190, 194, 216, 151, 15, 80, 157, 30, 124, 174, 214, 185, 141, 25, 25, 34, 28, 158, 150,
    129, 68, 146, 120, 230, 241, 142, 42, 10, 230, 17, 6, 65, 203, 170, 238, 23, 87, 255, 190, 163, 170, 89, 227, 146, 114, 36, 174, 28, 53, 89, 63,
    52, 174, 237, 67, 41, 22, 188, 249, 201, 230, 81, 91, 75, 192, 206, 66, 118, 197, 89, 75, 32, 112, 123, 75, 104, 210, 12, 244, 254, 194, 92, 32,
    222, 217, 229, 238, 62, 99, 227, 95, 224, 164, 179, 84, 70, 228, 249, 219, 103, 131, 159, 254, 241, 182, 247, 182, 247, 154, 175, 102, 135, 154, 137, 225,
    163, 189, 56, 58, 203, 215, 143, 116, 28, 176, 114, 114, 35, 14, 24, 79, 144, 5, 177, 214, 78, 29, 248, 118, 82, 107, 180, 252, 231, 7, 235, 22,
    43, 146, 44, 118, 210, 8, 235, 225, 96, 158, 226, 180, 161, 196, 80, 198, 148, 113, 110, 158, 63, 52, 247, 80, 153, 203, 26, 166, 62, 40, 225, 191,
    231, 240, 174, 42, 167, 169, 11, 102, 110, 226, 129, 240, 11, 156, 206, 25, 172, 23, 55, 31, 112, 149, 209, 172, 222, 54, 27, 74, 152, 155, 173, 223,
    151, 71, 89, 143, 13, 52, 52, 226, 223, 225, 192, 18, 6, 191, 254, 106, 83, 165, 123, 88, 112, 77, 214, 111, 226, 39, 243, 143, 108, 188, 100, 67,
    42, 130, 239, 218, 10, 44, 170, 247, 53, 54, 167, 15, 108, 150, 57, 223, 104, 201, 60, 232, 133, 189, 196, 40, 240, 213, 78, 105, 4, 51, 76, 160,
    197, 182, 133, 210, 178, 81, 232, 168, 4, 140, 159, 216, 245, 195, 72, 159, 218, 85, 33, 209, 225, 226, 157, 236, 160, 61, 219, 7, 174, 48, 225, 206,
    207, 255, 140, 134, 142, 171, 123, 212, 250, 222, 129, 231, 70, 76, 161, 103, 193, 55, 143, 138, 255, 246, 109, 211, 114, 112, 92, 13, 111, 49, 97, 29,
    27, 242, 23, 171, 135, 122, 97, 162, 194, 39, 13, 156, 183, 141, 15, 18, 40, 51, 196, 57, 148, 229, 55, 100, 221, 130, 23, 47, 174, 212, 75, 126,
    71, 39, 222, 39, 170, 93, 130, 9, 31, 189, 251, 184, 123, 247, 253, 225, 230, 199, 225, 189, 190, 119, 91, 187, 230, 83, 139, 138, 211, 109, 125, 250,
    197, 189, 103, 204, 110, 207, 27, 204, 150, 94, 124, 207, 165, 86, 2, 40, 246, 110, 22, 24, 8, 37, 219, 174, 0, 42, 117, 251, 39, 169, 214, 122,
    244, 169, 24, 126, 106, 55, 243, 203, 227, 8, 95, 125, 245, 149, 201, 26, 120, 69, 229, 112, 46, 156, 64, 26, 215, 190, 97, 35, 27, 123, 187, 134,
    253, 165, 172, 159, 143, 196, 120, 123, 46, 118, 94, 237, 43, 92, 158, 188, 215, 29, 237, 142, 181, 178, 189, 11, 61, 137, 211, 138, 1, 67, 200, 239,
    200, 163, 95, 62, 107, 97, 218, 130, 191, 129, 221, 104, 28, 126, 13, 7, 83, 96, 121, 164, 25, 172, 203, 114, 175, 219, 173, 207, 175, 167, 139, 235,
    115, 112, 0, 40, 160, 119, 70, 119, 248, 204, 32, 38, 2, 251, 91, 205, 226, 232, 94, 84, 6, 86, 123, 81, 43, 55, 10, 66, 95, 57, 77, 69,
    66, 123, 42, 98, 75, 102, 19, 31, 240, 243, 117, 222, 81, 79, 7, 20, 244, 125, 4, 113, 161, 232, 37, 236, 204, 122, 199, 3, 64, 87, 87, 69,
    147, 241, 209, 43, 218, 45, 54, 93, 97, 143, 97, 146, 116, 139, 110, 11, 222, 134, 125, 10, 17, 53, 225, 252, 84, 154, 118, 146, 48, 101, 143, 197,
    85, 171, 232, 165, 69, 155, 61, 182, 211, 94, 17, 22, 121, 143, 61, 246, 10, 9, 203, 211, 97, 166, 68, 44, 139, 82, 38, 31, 161, 41, 128, 36,
    201, 147, 46, 123, 76, 250, 244, 158, 61, 230, 173, 126, 191, 72, 177, 96, 226, 160, 119, 37, 136, 197, 109, 128, 237, 183, 147, 20, 160, 145, 29, 122,
    143, 69, 196, 113, 196, 222, 219, 69, 116, 179, 94, 17, 1, 0, 144, 82, 5, 199, 237, 62, 21, 156, 202, 130, 137, 84, 175, 5, 143, 105, 100, 21,
    145, 176, 199, 171, 54, 144, 194, 34, 90, 154, 152, 113, 134, 170, 114, 100, 139, 175, 250, 9, 8, 31, 217, 69, 116, 10, 84, 20, 144, 34, 253, 226,
    79, 187, 3, 194, 95, 74, 173, 235, 178, 197, 151, 151, 137, 71, 54, 246, 254, 42, 194, 34, 98, 163, 136, 156, 213, 35, 60, 70, 5, 84, 12, 188,
    237, 36, 105, 151, 163, 101, 93, 86, 68, 219, 45, 34, 235, 37, 221, 48, 66, 52, 163, 136, 140, 43, 170, 75, 239, 165, 20, 57, 86, 86, 68, 239,
    109, 98, 121, 236, 39, 214, 78, 252, 196, 218, 160, 245, 44, 245, 19, 203, 50, 63, 177, 34, 247, 19, 43, 128, 66, 209, 246, 19, 43, 46, 43, 136,
    93, 249, 137, 181, 58, 248, 86, 18, 235, 36, 146, 24, 180, 126, 232, 16, 80, 1, 97, 175, 83, 36, 8, 16, 183, 216, 239, 54, 127, 76, 197, 99,
    175, 11, 237, 63, 212, 216, 1, 30, 90, 87, 121, 171, 19, 22, 41, 190, 237, 196, 178, 90, 90, 97, 43, 196, 234, 142, 251, 18, 128, 137, 91, 240,
    6, 195, 138, 232, 36, 244, 136, 245, 126, 153, 131, 250, 0, 142, 179, 222, 235, 244, 174, 162, 46, 190, 141, 20, 154, 214, 179, 114, 236, 111, 61, 144,
    56, 71, 82, 17, 162, 197, 121, 26, 22, 49, 160, 245, 251, 17, 227, 161, 147, 35, 59, 220, 56, 193, 110, 208, 40, 204, 47, 177, 173, 39, 81, 55,
    78, 162, 126, 198, 30, 47, 83, 144, 173, 211, 54, 101, 75, 187, 81, 216, 105, 21, 9, 214, 5, 217, 13, 100, 146, 121, 193, 253, 94, 218, 36, 163,
    23, 19, 59, 16, 51, 102, 63, 61, 234, 243, 140, 157, 142, 50, 32, 216, 91, 96, 93, 34, 204, 137, 29, 246, 11, 254, 196, 210, 240, 125, 75, 246,
    227, 43, 217, 157, 162, 75, 168, 55, 102, 148, 114, 174, 212, 44, 101, 2, 17, 133, 78, 158, 116, 100, 215, 139, 211, 168, 213, 18, 116, 121, 123, 32,
    35, 24, 1, 64, 212, 129, 247, 9, 60, 94, 21, 84, 30, 232, 172, 107, 155, 160, 8, 233, 198, 33, 148, 135, 143, 173, 34, 46, 20, 221, 72, 181,
    40, 214, 255, 129, 66, 142, 166, 173, 45, 237, 67, 210, 146, 172, 167, 196, 67, 63, 142, 219, 178, 142, 153, 205, 205, 9, 32, 202, 174, 208, 172, 164,
    25, 89, 52, 246, 216, 205, 1, 18, 173, 114, 39, 130, 234, 66, 30, 10, 104, 200, 69, 143, 163, 133, 189, 118, 7, 171, 80, 51, 241, 240, 211, 149,
    21, 32, 234, 45, 5, 99, 65, 21, 208, 167, 38, 14, 0, 41, 84, 74, 28, 82, 189, 245, 120, 123, 192, 119, 12, 21, 187, 83, 2, 182, 11, 109,
    181, 210, 100, 24, 210, 106, 11, 214, 16, 85, 45, 106, 71, 233, 12, 63, 135, 185, 172, 121, 109, 232, 72, 208, 114, 225, 103, 172, 55, 250, 140, 205,
    8, 62, 199, 188, 199, 70, 84, 30, 175, 11, 32, 136, 0, 151, 25, 103, 167, 208, 217, 137, 250, 81, 15, 11, 134, 154, 236, 103, 200, 25, 123, 147,
    22, 188, 105, 180, 25, 57, 6, 196, 209, 120, 117, 115, 180, 54, 71, 131, 134, 143, 104, 76, 151, 14, 26, 40, 84, 162, 209, 172, 8, 117, 166, 20,
    5, 117, 209, 71, 179, 77, 157, 129, 3, 236, 211, 25, 194, 110, 199, 84, 73, 216, 53, 84, 194, 75, 131, 234, 227, 165, 229, 73, 222, 102, 205, 29,
    0, 210, 126, 214, 205, 82, 52, 10, 121, 200, 222, 167, 57, 127, 219, 202, 122, 89, 138, 176, 89, 148, 21, 100, 215, 195, 180, 159, 196, 252, 45, 3,
    73, 115, 180, 158, 97, 150, 100, 189, 188, 141, 182, 132, 40, 195, 99, 76, 148, 161, 147, 117, 129, 42, 61, 22, 64, 3, 31, 129, 16, 208, 150, 236,
    16, 147, 26, 59, 136, 132, 69, 16, 82, 214, 197, 30, 75, 12, 137, 238, 207, 156, 5, 169, 7, 173, 59, 137, 199, 126, 81, 244, 157, 183, 49, 211,
    116, 238, 194, 70, 69, 215, 133, 101, 111, 123, 206, 91, 198, 122, 43, 138, 92, 216, 54, 27, 225, 156, 183, 45, 86, 94, 102, 191, 141, 210, 152, 85,
    76, 225, 125, 235, 82, 200, 226, 110, 236, 125, 219, 239, 216, 111, 179, 56, 109, 95, 58, 176, 176, 129, 190, 235, 121, 43, 186, 180, 5, 27, 183, 125,
    111, 115, 131, 7, 251, 8, 55, 115, 133, 105, 166, 116, 193, 39, 212, 220, 157, 52, 242, 110, 153, 40, 214, 164, 41, 112, 93, 90, 74, 200, 197, 41,
    177, 63, 172, 50, 63, 239, 63, 179, 160, 125, 179, 182, 43, 172, 135, 236, 125, 84, 76, 120, 113, 88, 199, 222, 2, 122, 200, 12, 39, 63, 140, 13,
    119, 218, 7, 63, 95, 122, 238, 153, 144, 247, 58, 252, 108, 169, 215, 188, 165, 247, 151, 189, 167, 96, 206, 25, 88, 30, 248, 148, 231, 199, 249, 134,
    139, 187, 114, 184, 12, 104, 163, 217, 117, 41, 38, 230, 37, 227, 105, 35, 15, 202, 47, 224, 168, 242, 245, 98, 65, 7, 137, 96, 219, 253, 66, 59,
    55, 43, 155, 144, 136, 10, 133, 214, 180, 73, 196, 45, 120, 24, 182, 242, 174, 132, 151, 151, 63, 244, 6, 175, 159, 254, 23, 100, 123, 143, 178, 164,
    128, 163, 23, 120, 57, 2, 123, 245, 162, 63, 232, 188, 126, 61, 232, 191, 120, 254, 102, 208, 191, 236, 80, 66, 248, 235, 130, 67, 252, 120, 249, 250,
    199, 103, 151, 47, 7, 87, 111, 59, 63, 245, 222, 176, 111, 113, 40, 62, 189, 126, 243, 234, 233, 243, 31, 6, 116, 24, 22, 191, 136, 15, 47, 95,
    93, 254, 39, 18, 228, 225, 221, 48, 28, 242, 79, 63, 188, 237, 241, 178, 2, 30, 39, 108, 161, 151, 201, 63, 63, 7, 70, 95, 235, 180, 158, 62,
    255, 143, 203, 191, 63, 237, 14, 94, 190, 120, 250, 252, 77, 239, 21, 223, 192, 77, 156, 61, 123, 214, 123, 69, 124, 63, 191, 124, 6, 124, 31, 141,
    23, 243, 77, 129, 151, 231, 206, 182, 107, 166, 83, 8, 6, 92, 111, 49, 226, 153, 192, 65, 129, 34, 104, 224, 62, 112, 104, 90, 120, 80, 25, 54,
    232, 157, 24, 244, 158, 147, 88, 192, 68, 14, 25, 78, 206, 207, 55, 159, 202, 225, 7, 126, 234, 107, 28, 220, 172, 134, 235, 59, 192, 31, 109, 241,
    180, 193, 221, 112, 54, 131, 172, 195, 172, 245, 25, 43, 125, 203, 197, 141, 29, 246, 222, 206, 225, 195, 133, 186, 63, 248, 10, 59, 75, 195, 56, 191,
    138, 64, 131, 107, 55, 81, 8, 126, 112, 33, 39, 158, 196, 35, 21, 160, 99, 14, 218, 103, 61, 99, 147, 181, 44, 88, 5, 125, 61, 28, 13, 64,
    147, 16, 114, 198, 164, 251, 244, 201, 23, 96, 212, 170, 218, 54, 134, 146, 10, 45, 220, 98, 193, 236, 207, 62, 28, 160, 198, 138, 138, 142, 154, 193,
    17, 251, 247, 203, 231, 19, 179, 252, 219, 197, 130, 80, 5, 191, 6, 90, 12, 104, 219, 213, 180, 1, 39, 157, 31, 67, 158, 158, 243, 187, 205, 108,
    218, 60, 33, 82, 92, 106, 171, 116, 73, 210, 44, 9, 3, 11, 82, 204, 42, 33, 211, 40, 182, 133, 35, 68, 37, 25, 233, 50, 137, 52, 73, 8,
    228, 93, 156, 102, 239, 41, 145, 73, 116, 38, 206, 100, 201, 79, 57, 255, 132, 119, 22, 24, 95, 10, 3, 73, 113, 252, 243, 250, 227, 112, 186, 133,
    197, 96, 61, 188, 254, 88, 47, 173, 169, 213, 193, 99, 79, 82, 26, 237, 251, 205, 99, 102, 139, 182, 220, 8, 126, 54, 10, 162, 195, 52, 131, 225,
    102, 49, 131, 84, 78, 43, 157, 75, 237, 59, 158, 175, 138, 248, 240, 169, 154, 138, 236, 5, 155, 213, 27, 113, 209, 182, 121, 68, 21, 105, 48, 220,
    227, 99, 205, 158, 249, 180, 95, 248, 35, 215, 235, 170, 124, 139, 203, 224, 111, 1, 83, 131, 99, 67, 25, 69, 246, 237, 52, 16, 223, 131, 115, 248,
    229, 31, 25, 68, 102, 70, 123, 49, 194, 74, 240, 249, 102, 241, 114, 179, 106, 44, 155, 193, 194, 73, 50, 176, 8, 46, 46, 244, 59, 42, 77, 102,
    22, 218, 1, 21, 217, 22, 231, 107, 235, 173, 161, 141, 28, 180, 241, 61, 105, 229, 244, 212, 162, 71, 184, 76, 156, 224, 91, 124, 102, 131, 166, 158,
    237, 115, 1, 55, 233, 234, 10, 17, 137, 131, 231, 142, 132, 170, 106, 237, 222, 47, 115, 233, 126, 224, 245, 57, 109, 194, 8, 55, 242, 214, 42, 124,
    96, 133, 30, 255, 247, 22, 218, 197, 49, 243, 49, 150, 229, 112, 211, 152, 50, 253, 155, 195, 198, 41, 179, 201, 167, 8, 206, 125, 42, 184, 37, 189,
    33, 27, 23, 171, 120, 141, 109, 187, 77, 190, 91, 99, 23, 113, 32, 120, 199, 92, 123, 68, 246, 10, 124, 139, 121, 182, 212, 216, 164, 239, 40, 193,
    141, 23, 208, 73, 180, 151, 51, 190, 147, 82, 63, 77, 132, 41, 4, 216, 216, 50, 50, 222, 114, 79, 9, 78, 170, 201, 187, 73, 232, 203, 104, 161,
    6, 7, 129, 191, 28, 224, 42, 159, 214, 103, 248, 128, 248, 40, 136, 105, 135, 202, 71, 230, 218, 44, 86, 103, 144, 55, 162, 113, 82, 223, 111, 8,
    213, 231, 162, 66, 49, 143, 204, 114, 64, 3, 172, 141, 176, 230, 35, 93, 5, 99, 81, 222, 197, 176, 6, 102, 211, 159, 243, 241, 3, 157, 205, 195,
    140, 108, 78, 166, 167, 209, 132, 50, 77, 162, 184, 253, 100, 140, 251, 84, 64, 157, 239, 142, 214, 229, 112, 197, 92, 78, 240, 17, 27, 143, 30, 161,
    242, 79, 222, 91, 99, 198, 235, 114, 211, 144, 99, 129, 75, 239, 26, 147, 32, 192, 209, 160, 195, 248, 192, 61, 238, 165, 26, 165, 182, 211, 233, 19,
    63, 4, 79, 108, 192, 33, 234, 85, 228, 140, 166, 78, 74, 95, 33, 9, 155, 54, 156, 141, 135, 179, 201, 20, 214, 217, 185, 34, 64, 15, 168, 4,
    203, 242, 129, 57, 226, 114, 194, 54, 19, 72, 250, 16, 162, 88, 178, 199, 125, 125, 129, 82, 250, 114, 223, 90, 130, 78, 158, 184, 32, 188, 229, 130,
    18, 107, 139, 241, 160, 122, 150, 162, 46, 140, 134, 235, 99, 73, 200, 4, 101, 138, 146, 160, 229, 22, 205, 160, 16, 178, 56, 239, 43, 41, 233, 66,
    242, 186, 50, 140, 187, 143, 150, 71, 18, 89, 67, 158, 92, 193, 226, 231, 179, 251, 218, 243, 10, 68, 227, 6, 230, 209, 35, 55, 5, 151, 201, 55,
    216, 45, 131, 123, 102, 41, 244, 78, 92, 193, 137, 191, 113, 238, 193, 220, 142, 84, 200, 206, 181, 201, 13, 178, 159, 95, 179, 95, 39, 86, 199, 71,
    147, 35, 106, 219, 226, 217, 88, 142, 229, 91, 3, 76, 158, 47, 136, 107, 211, 157, 35, 251, 41, 61, 10, 143, 213, 138, 165, 95, 224, 53, 130, 170,
    132, 61, 193, 152, 190, 125, 115, 40, 129, 237, 235, 228, 81, 219, 54, 131, 135, 88, 215, 61, 45, 235, 126, 214, 12, 232, 204, 203, 114, 52, 158, 220,
    215, 248, 192, 110, 79, 228, 246, 151, 253, 26, 64, 74, 75, 180, 192, 19, 159, 229, 125, 167, 12, 150, 110, 72, 222, 55, 3, 255, 7, 204, 83, 216,
    84, 19, 0, 231, 230, 82, 50, 48, 241, 30, 246, 90, 96, 113, 249, 200, 35, 168, 69, 210, 177, 42, 248, 214, 108, 110, 249, 113, 50, 141, 143, 118,
    162, 160, 68, 22, 90, 114, 100, 73, 5, 74, 180, 236, 14, 23, 84, 216, 30, 241, 39, 207, 14, 127, 106, 89, 33, 232, 106, 72, 132, 111, 206, 81,
    63, 86, 167, 211, 251, 175, 239, 154, 132, 15, 229, 171, 18, 178, 214, 53, 240, 74, 54, 186, 23, 0, 170, 217, 200, 189, 38, 216, 198, 237, 96, 174,
    15, 79, 111, 89, 131, 62, 70, 223, 239, 9, 158, 21, 25, 97, 56, 7, 90, 86, 113, 10, 57, 44, 131, 225, 116, 114, 59, 135, 45, 32, 94, 76,
    240, 27, 199, 99, 242, 30, 237, 255, 233, 189, 249, 63, 150, 178, 42, 199, 56, 187, 191, 136, 211, 180, 25, 144, 170, 46, 194, 251, 49, 255, 241, 21,
    164, 247, 57, 41, 50, 186, 90, 120, 163, 52, 157, 48, 102, 174, 44, 204, 48, 118, 225, 211, 246, 215, 48, 132, 28, 81, 176, 41, 117, 49, 227, 219,
    236, 230, 139, 249, 41, 166, 82, 185, 27, 174, 239, 154, 1, 184, 175, 77, 80, 195, 100, 99, 218, 0, 75, 145, 62, 243, 213, 222, 225, 149, 249, 76,
    216, 30, 160, 59, 204, 216, 126, 20, 96, 224, 217, 69, 197, 107, 16, 139, 61, 157, 84, 143, 81, 172, 163, 251, 133, 14, 167, 222, 194, 55, 119, 229,
    64, 119, 57, 69, 87, 248, 29, 109, 93, 229, 199, 184, 210, 16, 30, 34, 193, 170, 156, 98, 182, 140, 1, 54, 227, 26, 179, 73, 109, 250, 32, 27,
    40, 180, 1, 65, 217, 1, 24, 182, 232, 96, 123, 232, 144, 216, 207, 164, 198, 117, 36, 12, 243, 106, 152, 127, 67, 25, 182, 253, 52, 62, 10, 67,
    251, 29, 198, 54, 78, 88, 119, 166, 104, 175, 217, 148, 248, 156, 178, 222, 108, 194, 52, 120, 112, 236, 153, 138, 26, 5, 250, 166, 165, 227, 225, 122,
    163, 221, 185, 38, 11, 1, 75, 223, 12, 142, 89, 1, 201, 241, 9, 25, 62, 110, 162, 112, 36, 41, 71, 34, 19, 10, 235, 60, 117, 126, 3, 13,
    20, 149, 174, 67, 20, 51, 111, 247, 248, 216, 114, 177, 86, 116, 84, 160, 54, 96, 198, 199, 32, 215, 113, 64, 108, 170, 11, 203, 165, 197, 168, 22,
    222, 104, 25, 181, 146, 86, 171, 21, 107, 78, 165, 97, 134, 118, 81, 224, 1, 50, 15, 250, 103, 79, 28, 109, 192, 135, 94, 99, 122, 198, 29, 78,
    19, 68, 56, 156, 186, 56, 47, 240, 176, 193, 25, 197, 120, 94, 50, 206, 202, 213, 102, 82, 174, 27, 191, 124, 110, 18, 163, 53, 38, 202, 63, 191,
    161, 67, 19, 162, 218, 173, 27, 91, 40, 31, 51, 228, 211, 246, 204, 164, 252, 72, 120, 143, 12, 71, 108, 29, 136, 24, 11, 196, 228, 64, 196, 68,
    32, 70, 7, 34, 182, 8, 241, 64, 172, 244, 139, 176, 50, 196, 138, 211, 67, 181, 146, 115, 188, 244, 80, 109, 146, 112, 81, 203, 68, 242, 206, 237,
    172, 198, 169, 251, 133, 170, 128, 102, 48, 49, 114, 145, 235, 63, 187, 167, 105, 252, 151, 22, 187, 26, 137, 226, 52, 75, 163, 51, 66, 22, 167, 37,
    45, 153, 140, 159, 67, 216, 209, 100, 146, 211, 106, 6, 81, 134, 246, 73, 11, 78, 43, 220, 237, 36, 137, 135, 85, 136, 49, 249, 80, 90, 224, 218,
    226, 149, 145, 52, 89, 21, 172, 16, 155, 169, 193, 230, 245, 118, 179, 41, 87, 227, 233, 131, 91, 28, 67, 131, 41, 253, 19, 139, 60, 48, 103, 210,
    71, 118, 137, 120, 118, 92, 55, 191, 115, 188, 25, 190, 162, 67, 203, 190, 156, 182, 217, 179, 237, 192, 251, 246, 134, 13, 16, 229, 132, 41, 3, 118,
    189, 138, 133, 30, 149, 97, 220, 6, 187, 155, 220, 222, 105, 112, 145, 138, 218, 202, 179, 81, 140, 81, 24, 150, 22, 227, 115, 24, 232, 23, 215, 63,
    139, 239, 19, 126, 35, 24, 214, 142, 210, 20, 51, 197, 140, 226, 55, 254, 17, 248, 81, 20, 191, 135, 220, 25, 163, 197, 86, 30, 23, 49, 40, 229,
    14, 165, 95, 248, 152, 32, 246, 106, 134, 159, 129, 128, 97, 172, 149, 152, 98, 213, 80, 166, 209, 83, 146, 145, 158, 89, 147, 186, 161, 132, 78, 32,
    216, 124, 56, 63, 189, 94, 220, 99, 6, 89, 128, 214, 151, 87, 34, 190, 188, 2, 35, 248, 98, 117, 83, 6, 147, 13, 56, 245, 235, 13, 79, 214,
    200, 57, 56, 165, 75, 206, 32, 91, 5, 9, 69, 47, 92, 122, 200, 28, 95, 78, 83, 21, 98, 176, 110, 251, 197, 81, 165, 99, 28, 252, 26, 120,
    37, 52, 41, 156, 154, 225, 154, 191, 233, 83, 60, 88, 197, 208, 254, 180, 87, 145, 178, 247, 212, 234, 12, 134, 69, 125, 105, 43, 151, 95, 203, 28,
    181, 118, 8, 197, 227, 134, 171, 181, 21, 175, 83, 225, 172, 149, 249, 104, 88, 42, 154, 212, 76, 29, 116, 127, 200, 158, 111, 126, 217, 92, 211, 63,
    125, 115, 102, 23, 152, 107, 238, 35, 211, 16, 235, 254, 229, 152, 253, 155, 223, 8, 7, 208, 79, 65, 54, 121, 196, 21, 234, 29, 174, 110, 75, 167,
    224, 99, 255, 212, 150, 254, 143, 99, 247, 61, 138, 198, 167, 180, 73, 203, 208, 202, 120, 157, 51, 51, 118, 187, 211, 43, 115, 107, 70, 162, 138, 59,
    12, 43, 220, 109, 181, 163, 223, 194, 168, 88, 86, 101, 80, 133, 100, 169, 122, 30, 16, 191, 175, 93, 117, 245, 112, 91, 104, 101, 27, 43, 195, 246,
    102, 128, 218, 37, 226, 250, 104, 154, 181, 15, 96, 255, 200, 154, 17, 90, 195, 249, 34, 172, 251, 228, 158, 169, 162, 212, 162, 80, 235, 78, 162, 6,
    201, 194, 79, 178, 48, 72, 162, 179, 190, 88, 111, 248, 252, 117, 207, 121, 159, 49, 93, 18, 232, 245, 250, 138, 146, 202, 149, 127, 183, 29, 105, 145,
    48, 234, 31, 24, 58, 116, 23, 25, 97, 75, 204, 128, 6, 172, 6, 28, 202, 53, 86, 187, 53, 115, 156, 224, 165, 30, 12, 66, 115, 118, 148, 177,
    11, 46, 172, 5, 117, 119, 18, 166, 217, 221, 111, 117, 75, 202, 216, 114, 134, 93, 55, 96, 134, 108, 242, 1, 213, 189, 193, 208, 24, 21, 224, 171,
    195, 164, 176, 247, 220, 206, 239, 107, 223, 13, 45, 20, 85, 131, 146, 38, 165, 165, 50, 91, 158, 243, 243, 155, 213, 112, 188, 9, 102, 147, 53, 154,
    74, 216, 213, 244, 176, 44, 71, 67, 219, 241, 26, 174, 62, 13, 102, 204, 3, 197, 237, 0, 246, 206, 130, 194, 244, 12, 63, 13, 214, 211, 225, 199,
    210, 221, 200, 98, 92, 139, 195, 20, 183, 39, 69, 128, 20, 20, 53, 37, 179, 215, 143, 113, 102, 198, 101, 50, 12, 17, 181, 32, 137, 166, 183, 42,
    201, 160, 193, 53, 193, 235, 69, 89, 45, 209, 196, 49, 106, 216, 114, 220, 124, 3, 187, 237, 180, 25, 48, 215, 239, 178, 247, 184, 208, 111, 200, 108,
    74, 251, 243, 250, 166, 156, 78, 31, 107, 149, 173, 239, 246, 80, 46, 23, 44, 88, 27, 95, 96, 163, 209, 99, 173, 254, 180, 143, 176, 152, 12, 51,
    239, 52, 203, 11, 91, 137, 178, 165, 79, 90, 197, 96, 185, 221, 52, 238, 155, 193, 208, 236, 141, 239, 224, 38, 166, 224, 94, 243, 101, 232, 117, 138,
    45, 251, 158, 53, 224, 86, 220, 110, 181, 179, 60, 110, 103, 186, 199, 227, 246, 38, 40, 131, 141, 149, 13, 179, 0, 209, 132, 161, 156, 71, 68, 247,
    91, 141, 164, 77, 141, 175, 184, 83, 141, 5, 250, 33, 228, 251, 19, 171, 221, 80, 93, 158, 145, 146, 239, 221, 94, 35, 248, 81, 109, 212, 9, 37,
    136, 245, 125, 50, 1, 53, 197, 105, 250, 115, 201, 105, 101, 26, 108, 85, 106, 10, 195, 76, 179, 114, 198, 19, 73, 44, 155, 129, 117, 177, 177, 40,
    142, 125, 81, 117, 126, 98, 152, 15, 241, 150, 90, 221, 250, 159, 21, 162, 137, 162, 12, 217, 220, 2, 189, 28, 89, 177, 72, 154, 179, 189, 211, 237,
    147, 247, 94, 219, 127, 250, 194, 182, 12, 153, 70, 37, 217, 113, 173, 131, 134, 202, 212, 61, 177, 91, 49, 23, 133, 206, 103, 123, 100, 1, 55, 97,
    135, 52, 120, 173, 134, 187, 144, 237, 227, 95, 3, 245, 11, 162, 248, 103, 72, 0, 173, 54, 1, 59, 60, 35, 39, 204, 201, 28, 12, 55, 38, 215,
    206, 106, 140, 187, 127, 8, 222, 66, 204, 87, 72, 3, 114, 20, 149, 220, 31, 184, 193, 104, 100, 238, 92, 118, 119, 20, 249, 181, 239, 19, 133, 105,
    215, 149, 102, 191, 182, 82, 177, 57, 76, 54, 150, 17, 94, 115, 60, 30, 219, 65, 146, 81, 112, 126, 81, 189, 253, 75, 54, 20, 234, 63, 170, 219,
    75, 153, 26, 86, 110, 3, 157, 245, 217, 240, 118, 114, 35, 70, 14, 225, 28, 56, 14, 205, 35, 12, 142, 104, 126, 37, 96, 145, 45, 213, 71, 45,
    7, 34, 149, 14, 131, 28, 216, 78, 205, 113, 110, 79, 7, 2, 210, 81, 200, 83, 156, 202, 38, 213, 178, 36, 173, 83, 61, 91, 106, 252, 60, 117,
    135, 212, 61, 217, 19, 90, 212, 246, 38, 124, 62, 49, 14, 100, 195, 170, 245, 120, 139, 39, 123, 41, 235, 203, 154, 102, 246, 195, 235, 9, 36, 229,
    225, 183, 114, 237, 170, 49, 78, 135, 57, 168, 99, 230, 74, 67, 66, 241, 6, 171, 248, 217, 226, 35, 35, 219, 206, 2, 186, 243, 15, 111, 111, 250,
    4, 247, 181, 50, 1, 32, 197, 245, 137, 89, 229, 16, 235, 231, 123, 41, 180, 14, 203, 213, 161, 252, 104, 72, 213, 113, 194, 116, 66, 123, 168, 221,
    214, 38, 200, 52, 85, 151, 149, 148, 79, 25, 55, 77, 192, 52, 22, 126, 137, 123, 177, 97, 15, 46, 110, 194, 108, 102, 71, 152, 103, 225, 232, 4,
    55, 214, 137, 172, 69, 85, 125, 72, 248, 252, 117, 119, 137, 11, 231, 200, 47, 32, 167, 0, 6, 25, 69, 180, 58, 155, 222, 243, 249, 93, 243, 214,
    52, 4, 117, 114, 226, 120, 224, 209, 78, 74, 80, 28, 221, 18, 15, 33, 86, 231, 188, 129, 15, 62, 202, 154, 129, 190, 84, 235, 181, 0, 164, 87,
    10, 10, 73, 183, 202, 174, 50, 78, 87, 69, 23, 33, 202, 91, 96, 132, 107, 76, 50, 68, 210, 240, 88, 109, 247, 127, 130, 127, 91, 79, 203, 201,
    106, 125, 204, 42, 143, 117, 194, 51, 102, 57, 31, 54, 184, 175, 124, 9, 215, 159, 172, 174, 131, 213, 39, 184, 100, 4, 187, 65, 51, 120, 122, 12,
    151, 106, 45, 151, 15, 193, 211, 96, 180, 152, 31, 195, 5, 98, 31, 113, 121, 122, 4, 151, 62, 97, 178, 42, 72, 107, 113, 166, 187, 244, 229, 112,
    3, 103, 10, 102, 75, 102, 112, 177, 20, 172, 254, 15, 252, 148, 194, 217, 207, 90, 50, 13, 120, 183, 167, 31, 142, 160, 182, 107, 47, 32, 99, 143,
    55, 109, 32, 240, 22, 163, 222, 233, 8, 56, 48, 107, 179, 41, 159, 173, 52, 204, 150, 34, 35, 38, 210, 239, 114, 125, 75, 168, 11, 108, 24, 185,
    153, 97, 220, 60, 196, 12, 171, 166, 201, 113, 234, 145, 109, 15, 187, 166, 113, 167, 77, 210, 87, 147, 153, 233, 228, 211, 97, 143, 199, 218, 16, 73,
    157, 6, 35, 149, 78, 215, 212, 196, 82, 226, 156, 169, 9, 136, 15, 46, 149, 112, 119, 246, 142, 62, 88, 129, 162, 45, 230, 144, 12, 120, 56, 191,
    41, 153, 27, 141, 23, 28, 120, 151, 42, 148, 2, 104, 18, 132, 168, 158, 210, 45, 216, 72, 193, 58, 28, 248, 111, 79, 171, 44, 108, 143, 130, 66,
    187, 4, 173, 207, 55, 45, 189, 183, 254, 127, 233, 253, 183, 41, 179, 78, 81, 241, 95, 164, 40, 220, 151, 49, 91, 26, 189, 31, 36, 248, 134, 103,
    151, 176, 252, 136, 223, 65, 183, 141, 134, 212, 174, 44, 5, 102, 178, 27, 243, 186, 233, 195, 212, 205, 137, 238, 36, 88, 83, 3, 209, 255, 209, 26,
    128, 58, 248, 163, 107, 224, 119, 214, 255, 97, 218, 199, 19, 147, 182, 242, 255, 104, 173, 243, 25, 150, 186, 111, 198, 144, 168, 105, 26, 61, 195, 173,
    177, 56, 119, 44, 220, 159, 196, 185, 193, 111, 13, 127, 142, 97, 249, 43, 248, 147, 141, 185, 134, 81, 167, 255, 253, 133, 140, 86, 176, 201, 111, 156,
    215, 25, 181, 195, 233, 240, 99, 7, 195, 204, 128, 186, 86, 180, 106, 125, 106, 198, 200, 36, 211, 131, 90, 239, 82, 111, 106, 173, 39, 70, 48, 0,
    140, 7, 56, 62, 252, 173, 188, 229, 249, 137, 115, 142, 245, 28, 166, 48, 240, 112, 189, 24, 61, 4, 139, 57, 156, 234, 189, 56, 210, 206, 251, 46,
    97, 43, 68, 148, 194, 41, 223, 35, 128, 27, 77, 62, 6, 55, 211, 225, 122, 125, 113, 4, 9, 140, 142, 130, 9, 131, 159, 209, 193, 226, 163, 239,
    85, 34, 46, 116, 130, 155, 193, 75, 74, 17, 5, 89, 182, 130, 179, 179, 179, 239, 206, 25, 62, 150, 11, 229, 17, 3, 155, 217, 244, 251, 127, 1,
    245, 246, 34, 70, 200, 197, 0, 0};
#endif
#else
#if PSFREE
static const uint8_t loader_gz[] PROGMEM = {
    31, 139, 8, 8, 75, 238, 193, 101, 2, 255, 108, 111, 97, 100, 101, 114, 46, 104, 116, 109, 108, 0, 229, 61, 107, 119, 219, 54, 150, 223, 253, 43,
    88, 239, 78, 35, 53, 178, 196, 151, 36, 42, 138, 61, 71, 207, 105, 38, 105, 147, 77, 210, 118, 230, 100, 125, 84, 138, 130, 44, 214, 146, 168,
    146, 148, 45, 183, 147, 255, 190, 247, 226, 65, 2, 36, 244, 176, 155, 158, 217, 179, 155, 158, 202, 20, 120, 113, 159, 192, 197, 5, 112, 1, 189,
    252, 106, 248, 118, 240, 241, 159, 239, 70, 198, 34, 93, 45, 175, 94, 210, 207, 179, 151, 11, 226, 207, 224, 79, 26, 166, 75, 114, 245, 38, 242,
    103, 36, 126, 217, 96, 223, 206, 94, 174, 72, 234, 27, 107, 127, 69, 46, 239, 66, 114, 191, 137, 226, 212, 8, 162, 117, 74, 214, 233, 229, 249,
    125, 56, 75, 23, 151, 51, 114, 23, 6, 228, 130, 126, 169, 25, 225, 58, 76, 67, 127, 121, 145, 4, 254, 146, 92, 90, 231, 128, 34, 73, 31,
    0, 213, 52, 154, 61, 252, 30, 68, 203, 40, 126, 113, 191, 8, 83, 210, 157, 3, 154, 139, 36, 252, 141, 188, 176, 205, 205, 174, 155, 146, 93,
    122, 225, 47, 195, 155, 245, 139, 0, 176, 147, 184, 187, 242, 227, 155, 112, 253, 194, 236, 70, 119, 36, 158, 47, 163, 251, 23, 139, 112, 54, 35,
    235, 238, 231, 122, 184, 158, 71, 191, 103, 197, 6, 47, 223, 68, 9, 16, 143, 214, 47, 140, 121, 184, 35, 51, 233, 187, 63, 77, 162, 229, 22,
    136, 166, 209, 230, 133, 225, 54, 255, 210, 93, 146, 121, 250, 194, 104, 154, 127, 145, 248, 48, 236, 38, 48, 66, 191, 207, 253, 85, 184, 124, 120,
    97, 36, 254, 58, 185, 72, 72, 28, 206, 187, 140, 119, 227, 63, 166, 30, 254, 215, 77, 99, 120, 53, 143, 226, 213, 11, 131, 62, 46, 253, 148,
    84, 46, 0, 97, 205, 192, 207, 106, 247, 243, 203, 6, 147, 252, 12, 84, 16, 196, 225, 38, 189, 58, 107, 52, 140, 40, 14, 65, 42, 127, 105,
    144, 221, 102, 25, 133, 192, 196, 34, 77, 55, 201, 139, 70, 227, 38, 76, 23, 219, 105, 61, 136, 86, 141, 193, 130, 172, 103, 209, 96, 225, 111,
    26, 155, 183, 111, 251, 137, 123, 118, 118, 231, 199, 198, 198, 127, 88, 130, 125, 198, 225, 146, 24, 151, 70, 66, 146, 4, 164, 251, 144, 70, 177,
    127, 67, 234, 55, 36, 125, 149, 146, 85, 229, 25, 135, 122, 86, 237, 202, 149, 62, 162, 65, 15, 212, 162, 6, 47, 212, 25, 250, 96, 252, 75,
    227, 252, 188, 123, 118, 54, 223, 174, 3, 84, 166, 145, 44, 162, 251, 239, 0, 9, 212, 174, 172, 146, 155, 170, 241, 251, 153, 97, 204, 162, 96,
    187, 2, 179, 33, 190, 209, 146, 224, 99, 255, 225, 213, 172, 114, 190, 98, 144, 231, 85, 176, 217, 154, 196, 223, 126, 252, 238, 13, 96, 132, 122,
    221, 211, 106, 81, 21, 214, 103, 97, 178, 89, 250, 15, 151, 207, 166, 203, 40, 184, 125, 214, 61, 251, 44, 49, 132, 156, 190, 203, 25, 174, 84,
    13, 80, 243, 38, 38, 88, 32, 36, 49, 102, 240, 230, 12, 57, 13, 231, 70, 69, 210, 99, 21, 138, 176, 152, 253, 67, 217, 119, 139, 24, 56,
    92, 147, 123, 227, 31, 223, 189, 249, 22, 108, 243, 158, 252, 186, 37, 73, 90, 169, 118, 51, 56, 128, 169, 71, 27, 178, 174, 60, 251, 219, 232,
    227, 179, 154, 108, 152, 26, 52, 135, 45, 41, 194, 66, 83, 141, 195, 25, 249, 46, 92, 145, 143, 15, 27, 2, 234, 134, 230, 222, 0, 153, 194,
    117, 215, 8, 22, 126, 156, 144, 244, 114, 119, 177, 133, 166, 118, 49, 35, 243, 112, 77, 168, 253, 20, 28, 107, 42, 200, 165, 33, 4, 175, 144,
    170, 196, 58, 202, 149, 46, 194, 4, 52, 230, 167, 219, 196, 184, 188, 52, 108, 211, 148, 33, 240, 159, 106, 88, 10, 31, 147, 100, 19, 173, 19,
    146, 83, 251, 156, 61, 145, 101, 66, 178, 47, 42, 38, 185, 25, 156, 143, 125, 144, 124, 102, 164, 17, 53, 134, 113, 110, 60, 87, 218, 234, 115,
    40, 185, 160, 165, 18, 135, 146, 120, 159, 63, 171, 162, 38, 208, 250, 153, 186, 145, 21, 206, 4, 39, 175, 208, 253, 62, 202, 12, 12, 10, 172,
    159, 243, 58, 208, 58, 242, 230, 17, 174, 127, 33, 65, 202, 27, 8, 109, 28, 179, 7, 112, 104, 97, 144, 85, 101, 16, 192, 97, 146, 70, 209,
    13, 153, 157, 49, 82, 82, 75, 65, 125, 213, 151, 100, 125, 147, 46, 140, 43, 195, 172, 158, 41, 250, 144, 122, 204, 100, 186, 157, 207, 9, 54,
    32, 48, 106, 184, 174, 39, 15, 232, 8, 151, 21, 183, 221, 174, 209, 54, 21, 174, 211, 150, 91, 49, 119, 118, 11, 172, 3, 255, 106, 134, 185,
    235, 84, 241, 211, 225, 223, 219, 248, 197, 181, 232, 243, 133, 5, 95, 114, 69, 33, 33, 32, 240, 134, 172, 129, 64, 153, 181, 174, 142, 161, 37,
    117, 232, 8, 95, 95, 1, 39, 81, 224, 216, 21, 134, 67, 197, 203, 224, 38, 247, 49, 248, 230, 56, 71, 207, 235, 215, 167, 126, 112, 27, 174,
    111, 178, 42, 224, 249, 42, 88, 45, 188, 52, 187, 225, 75, 134, 176, 225, 118, 195, 231, 207, 171, 106, 59, 65, 160, 197, 238, 71, 112, 120, 42,
    203, 201, 18, 70, 141, 74, 248, 141, 91, 115, 159, 227, 159, 42, 244, 245, 205, 50, 76, 43, 231, 208, 235, 99, 2, 29, 38, 33, 149, 106, 253,
    151, 40, 92, 211, 162, 252, 229, 202, 223, 84, 178, 62, 144, 84, 127, 143, 73, 186, 141, 1, 8, 213, 135, 109, 44, 169, 99, 135, 26, 68, 51,
    210, 75, 43, 102, 181, 158, 70, 31, 210, 24, 120, 175, 88, 45, 36, 66, 233, 94, 216, 224, 160, 115, 236, 93, 133, 101, 69, 21, 159, 194, 107,
    202, 57, 176, 243, 106, 157, 86, 168, 40, 53, 3, 80, 101, 117, 178, 238, 162, 154, 188, 237, 214, 10, 74, 172, 113, 227, 213, 12, 104, 0, 150,
    241, 47, 176, 179, 77, 63, 65, 120, 213, 118, 233, 34, 38, 180, 175, 11, 163, 97, 5, 169, 33, 48, 74, 148, 204, 50, 156, 190, 38, 241, 154,
    44, 251, 126, 66, 234, 254, 108, 6, 246, 125, 59, 30, 127, 24, 125, 156, 44, 111, 39, 28, 211, 36, 128, 207, 148, 64, 59, 227, 5, 216, 198,
    204, 50, 127, 106, 43, 206, 233, 201, 157, 78, 25, 79, 176, 103, 211, 144, 97, 86, 23, 90, 44, 119, 217, 114, 167, 229, 189, 209, 192, 150, 240,
    149, 182, 215, 38, 75, 66, 54, 48, 190, 48, 7, 198, 76, 76, 59, 208, 187, 56, 90, 133, 208, 52, 192, 109, 69, 203, 59, 24, 209, 174, 176,
    235, 127, 4, 199, 26, 109, 83, 81, 90, 131, 17, 6, 117, 10, 40, 75, 163, 67, 87, 241, 13, 216, 27, 33, 134, 168, 65, 12, 33, 124, 37,
    245, 81, 80, 6, 234, 199, 87, 198, 213, 213, 85, 214, 9, 233, 187, 69, 136, 175, 224, 83, 188, 201, 95, 81, 253, 135, 107, 112, 236, 1, 145,
    92, 181, 1, 125, 101, 89, 45, 12, 52, 32, 13, 40, 30, 81, 85, 42, 25, 77, 134, 18, 244, 74, 43, 124, 13, 102, 26, 243, 127, 85, 246,
    174, 91, 194, 193, 216, 17, 156, 41, 60, 9, 55, 198, 73, 189, 204, 100, 43, 142, 11, 12, 207, 243, 231, 242, 32, 144, 61, 230, 66, 51, 176,
    174, 250, 134, 169, 138, 145, 16, 77, 160, 160, 145, 255, 51, 170, 144, 26, 34, 107, 59, 12, 93, 141, 215, 170, 150, 229, 79, 182, 211, 63, 38,
    255, 197, 159, 34, 255, 149, 81, 201, 21, 160, 226, 214, 169, 227, 226, 226, 75, 170, 227, 11, 116, 144, 255, 205, 90, 249, 99, 253, 101, 253, 152,
    254, 146, 33, 252, 26, 245, 177, 71, 116, 206, 79, 247, 15, 152, 13, 184, 106, 185, 69, 174, 176, 6, 252, 201, 61, 231, 17, 246, 132, 184, 251,
    24, 100, 80, 127, 140, 81, 49, 216, 31, 214, 32, 6, 35, 86, 75, 229, 102, 25, 77, 146, 52, 206, 90, 74, 222, 214, 242, 0, 2, 241, 168,
    149, 22, 161, 82, 41, 107, 94, 197, 58, 229, 48, 29, 5, 191, 20, 161, 100, 65, 94, 198, 74, 87, 31, 134, 179, 8, 133, 147, 253, 141, 196,
    17, 132, 216, 16, 6, 208, 146, 154, 225, 85, 75, 189, 147, 243, 248, 92, 65, 203, 117, 198, 65, 144, 35, 117, 82, 149, 33, 94, 111, 87, 83,
    12, 13, 232, 252, 94, 104, 145, 126, 49, 46, 160, 21, 211, 183, 185, 180, 213, 44, 20, 205, 66, 104, 6, 75, 59, 237, 239, 58, 195, 246, 226,
    216, 127, 224, 80, 207, 141, 74, 227, 191, 235, 141, 122, 138, 243, 45, 134, 187, 106, 252, 213, 176, 141, 23, 134, 85, 229, 225, 218, 51, 243, 25,
    14, 10, 236, 173, 78, 24, 246, 6, 67, 147, 243, 46, 78, 5, 253, 229, 189, 255, 144, 136, 183, 62, 68, 249, 200, 234, 255, 63, 105, 3, 152,
    229, 165, 240, 29, 34, 249, 73, 242, 27, 52, 30, 8, 60, 49, 102, 238, 242, 55, 16, 59, 145, 248, 142, 76, 182, 155, 13, 68, 191, 20, 142,
    2, 89, 50, 16, 171, 206, 65, 103, 147, 112, 182, 3, 24, 93, 205, 134, 225, 130, 90, 112, 197, 99, 176, 244, 147, 4, 39, 12, 198, 175, 219,
    48, 184, 93, 62, 24, 52, 26, 197, 78, 10, 110, 197, 88, 249, 107, 255, 134, 126, 49, 222, 191, 125, 199, 66, 219, 179, 251, 112, 61, 139, 238,
    235, 113, 180, 81, 58, 178, 18, 162, 81, 58, 83, 198, 165, 52, 185, 201, 4, 4, 14, 64, 45, 230, 206, 147, 99, 55, 33, 150, 138, 129, 199,
    205, 26, 57, 74, 117, 39, 62, 90, 176, 140, 65, 153, 32, 241, 137, 117, 202, 60, 141, 150, 150, 96, 83, 38, 16, 68, 219, 117, 138, 174, 73,
    42, 155, 198, 254, 58, 88, 144, 100, 34, 94, 154, 186, 151, 113, 178, 73, 212, 233, 2, 78, 254, 229, 200, 52, 88, 18, 63, 214, 42, 115, 31,
    249, 131, 44, 100, 16, 104, 87, 54, 19, 164, 53, 225, 207, 75, 24, 175, 101, 35, 84, 233, 204, 186, 216, 108, 170, 0, 10, 147, 197, 194, 184,
    90, 212, 243, 167, 16, 39, 116, 165, 202, 215, 185, 30, 242, 25, 216, 103, 89, 220, 205, 54, 89, 124, 120, 88, 77, 35, 152, 238, 157, 32, 181,
    28, 238, 73, 62, 145, 171, 228, 66, 168, 68, 30, 105, 230, 184, 138, 23, 254, 70, 180, 84, 128, 199, 154, 81, 24, 118, 208, 61, 96, 131, 8,
    161, 31, 129, 66, 73, 52, 103, 131, 218, 81, 29, 104, 250, 220, 115, 3, 63, 191, 49, 108, 212, 4, 32, 197, 225, 170, 251, 116, 44, 240, 100,
    9, 76, 242, 248, 251, 153, 14, 61, 95, 128, 191, 47, 192, 91, 217, 222, 5, 115, 31, 26, 242, 181, 22, 171, 148, 90, 74, 165, 202, 172, 214,
    213, 18, 96, 43, 2, 158, 66, 231, 126, 65, 98, 152, 110, 222, 47, 252, 180, 68, 15, 235, 84, 110, 252, 217, 13, 73, 147, 79, 231, 27, 240,
    101, 241, 44, 60, 191, 174, 118, 53, 96, 20, 143, 246, 141, 138, 32, 217, 143, 0, 56, 56, 88, 127, 21, 221, 25, 159, 128, 131, 235, 154, 130,
    70, 105, 211, 184, 164, 160, 200, 23, 135, 155, 26, 178, 77, 235, 224, 19, 180, 235, 56, 192, 15, 15, 254, 239, 20, 219, 55, 64, 26, 95, 93,
    26, 219, 53, 95, 196, 212, 182, 237, 227, 122, 81, 65, 225, 109, 85, 27, 104, 83, 138, 201, 211, 40, 38, 7, 41, 38, 135, 40, 66, 187, 124,
    146, 140, 187, 131, 50, 238, 14, 80, 12, 158, 70, 49, 56, 72, 49, 56, 68, 209, 123, 18, 65, 239, 16, 61, 239, 0, 185, 206, 147, 200, 117,
    14, 145, 235, 236, 39, 151, 251, 31, 62, 24, 75, 190, 254, 27, 26, 49, 240, 73, 11, 62, 30, 231, 5, 6, 12, 133, 145, 226, 84, 144, 241,
    19, 110, 170, 218, 49, 166, 220, 11, 255, 72, 39, 204, 187, 241, 209, 90, 5, 103, 65, 157, 27, 250, 224, 237, 50, 173, 72, 1, 76, 17, 46,
    222, 174, 43, 101, 73, 54, 117, 92, 86, 244, 52, 21, 149, 217, 63, 91, 27, 85, 132, 195, 178, 83, 165, 83, 134, 102, 148, 145, 199, 137, 28,
    111, 242, 9, 31, 174, 79, 144, 154, 51, 213, 104, 128, 5, 1, 112, 99, 192, 96, 156, 46, 8, 132, 232, 187, 212, 64, 123, 229, 60, 3, 4,
    134, 87, 123, 131, 8, 153, 167, 189, 109, 202, 147, 22, 71, 53, 250, 46, 15, 41, 127, 246, 96, 34, 15, 6, 254, 78, 26, 12, 180, 252, 185,
    255, 86, 6, 137, 194, 96, 206, 225, 47, 171, 77, 201, 50, 240, 93, 207, 25, 111, 41, 133, 65, 96, 179, 135, 65, 68, 83, 38, 8, 77, 127,
    111, 51, 216, 212, 151, 62, 188, 88, 76, 232, 4, 134, 90, 191, 136, 153, 134, 224, 21, 13, 222, 215, 163, 247, 223, 143, 222, 76, 250, 189, 15,
    163, 201, 187, 143, 239, 39, 63, 246, 222, 203, 211, 14, 104, 128, 183, 116, 137, 127, 114, 87, 8, 225, 253, 248, 166, 36, 173, 6, 25, 212, 1,
    72, 141, 60, 254, 142, 99, 86, 176, 70, 243, 57, 208, 60, 197, 192, 254, 110, 143, 254, 246, 113, 82, 61, 102, 114, 64, 89, 3, 187, 251, 187,
    235, 61, 152, 79, 12, 135, 184, 12, 135, 16, 64, 55, 101, 228, 246, 69, 67, 172, 7, 112, 213, 3, 116, 60, 73, 35, 102, 222, 9, 238, 246,
    199, 79, 84, 90, 161, 87, 208, 185, 19, 157, 70, 107, 194, 209, 162, 239, 205, 12, 38, 232, 61, 165, 147, 75, 94, 11, 8, 151, 229, 190, 213,
    196, 185, 140, 92, 205, 248, 245, 62, 138, 103, 37, 41, 31, 201, 215, 97, 211, 49, 18, 39, 8, 6, 141, 100, 191, 241, 152, 16, 174, 86, 136,
    217, 23, 19, 98, 182, 175, 3, 204, 30, 37, 4, 153, 237, 14, 8, 97, 107, 133, 248, 98, 50, 4, 251, 100, 120, 148, 8, 193, 33, 9, 44,
    173, 4, 211, 135, 148, 252, 185, 18, 80, 10, 39, 75, 176, 60, 32, 129, 55, 185, 69, 15, 160, 145, 195, 170, 25, 236, 193, 62, 46, 139, 125,
    156, 25, 22, 176, 232, 28, 107, 9, 155, 117, 122, 39, 153, 21, 135, 120, 117, 225, 183, 203, 242, 139, 168, 111, 99, 25, 64, 183, 165, 103, 155,
    125, 249, 208, 251, 113, 52, 156, 112, 215, 254, 225, 99, 111, 240, 26, 125, 59, 123, 87, 112, 248, 28, 235, 61, 153, 190, 14, 83, 220, 158, 238,
    74, 223, 49, 171, 38, 140, 89, 206, 15, 125, 69, 223, 45, 195, 233, 135, 128, 188, 9, 167, 193, 43, 204, 1, 131, 249, 122, 94, 79, 217, 233,
    230, 240, 152, 70, 211, 131, 200, 19, 236, 146, 37, 19, 177, 189, 110, 158, 79, 84, 57, 71, 16, 31, 138, 112, 155, 153, 47, 98, 242, 253, 241,
    251, 219, 201, 93, 234, 79, 151, 100, 50, 15, 227, 36, 157, 16, 86, 133, 47, 122, 186, 99, 203, 202, 150, 61, 121, 141, 159, 94, 79, 86, 100,
    133, 3, 114, 184, 162, 185, 112, 8, 74, 243, 54, 236, 158, 87, 134, 157, 176, 53, 68, 24, 51, 110, 39, 115, 63, 92, 150, 106, 89, 109, 77,
    173, 77, 178, 156, 76, 183, 225, 50, 133, 113, 70, 170, 48, 108, 121, 69, 1, 126, 122, 253, 94, 134, 166, 96, 142, 211, 239, 153, 101, 192, 9,
    48, 141, 241, 18, 107, 29, 147, 104, 77, 24, 23, 150, 217, 234, 13, 198, 237, 238, 17, 248, 244, 62, 226, 240, 163, 193, 200, 26, 58, 101, 248,
    101, 180, 190, 121, 20, 129, 66, 133, 50, 5, 181, 6, 88, 63, 8, 215, 41, 215, 191, 80, 161, 59, 246, 74, 70, 18, 144, 76, 2, 1, 217,
    239, 55, 251, 131, 61, 144, 156, 149, 28, 180, 133, 155, 67, 69, 142, 237, 201, 199, 55, 31, 38, 175, 190, 235, 253, 109, 196, 52, 237, 17, 207,
    180, 81, 215, 5, 172, 183, 37, 195, 11, 204, 214, 120, 220, 42, 177, 91, 204, 210, 16, 192, 118, 179, 105, 29, 0, 198, 237, 129, 172, 37, 245,
    198, 212, 232, 116, 87, 45, 186, 193, 181, 200, 79, 215, 172, 215, 136, 169, 17, 20, 253, 254, 153, 21, 113, 15, 33, 149, 64, 79, 96, 133, 43,
    31, 181, 192, 220, 24, 157, 215, 190, 64, 65, 237, 26, 43, 16, 225, 11, 45, 180, 58, 173, 142, 41, 191, 72, 216, 11, 107, 236, 14, 91, 74,
    133, 29, 45, 239, 120, 173, 129, 92, 28, 176, 226, 86, 179, 221, 111, 203, 229, 30, 45, 6, 129, 122, 109, 75, 46, 239, 208, 114, 215, 182, 155,
    106, 185, 207, 240, 52, 173, 158, 165, 240, 9, 177, 61, 173, 48, 178, 59, 78, 141, 249, 243, 226, 18, 24, 101, 183, 215, 105, 119, 108, 33, 72,
    33, 98, 162, 0, 102, 219, 243, 198, 237, 50, 0, 225, 0, 157, 78, 203, 237, 15, 4, 137, 96, 25, 26, 93, 67, 225, 172, 213, 26, 123, 188,
    122, 146, 10, 37, 245, 251, 131, 129, 204, 150, 20, 248, 34, 128, 237, 90, 131, 65, 173, 244, 58, 9, 175, 185, 180, 208, 173, 84, 166, 179, 104,
    136, 226, 31, 141, 135, 94, 71, 7, 192, 173, 97, 185, 118, 171, 231, 217, 101, 0, 194, 1, 156, 126, 123, 60, 114, 249, 123, 37, 84, 166, 213,
    219, 166, 211, 105, 143, 100, 6, 197, 184, 69, 217, 115, 198, 77, 211, 42, 85, 230, 38, 183, 199, 253, 193, 80, 174, 154, 176, 133, 10, 246, 210,
    116, 61, 179, 101, 43, 152, 67, 166, 25, 227, 185, 225, 93, 131, 114, 233, 18, 66, 174, 170, 118, 211, 26, 141, 132, 125, 194, 245, 124, 25, 69,
    204, 244, 237, 225, 120, 172, 90, 94, 140, 243, 248, 118, 208, 26, 245, 224, 181, 24, 251, 238, 111, 99, 93, 31, 216, 5, 139, 27, 177, 156, 176,
    201, 105, 39, 161, 113, 129, 20, 58, 140, 5, 107, 214, 118, 231, 166, 209, 104, 252, 253, 237, 59, 195, 145, 112, 218, 58, 156, 138, 57, 152, 212,
    227, 241, 112, 216, 214, 88, 75, 104, 108, 208, 25, 13, 122, 229, 247, 252, 181, 213, 236, 181, 135, 77, 155, 10, 67, 119, 165, 87, 51, 29, 93,
    52, 196, 167, 216, 67, 188, 150, 205, 240, 246, 193, 215, 138, 90, 225, 102, 21, 238, 99, 151, 174, 160, 208, 118, 15, 58, 96, 54, 11, 169, 185,
    115, 149, 4, 59, 186, 219, 230, 152, 76, 37, 142, 235, 246, 169, 34, 178, 120, 9, 147, 91, 151, 62, 102, 118, 2, 102, 190, 252, 242, 254, 39,
    227, 226, 138, 238, 251, 173, 72, 186, 136, 102, 70, 152, 224, 142, 37, 248, 227, 229, 131, 49, 133, 113, 126, 134, 193, 21, 252, 255, 130, 87, 208,
    37, 75, 199, 15, 155, 52, 186, 33, 235, 48, 104, 188, 251, 224, 94, 180, 234, 182, 121, 241, 19, 13, 50, 46, 48, 11, 240, 98, 180, 35, 193,
    22, 89, 128, 39, 154, 115, 205, 168, 171, 51, 118, 144, 87, 254, 218, 229, 32, 108, 63, 13, 83, 150, 233, 131, 90, 76, 19, 53, 196, 163, 120,
    197, 54, 92, 195, 57, 238, 17, 102, 207, 226, 37, 221, 238, 152, 204, 227, 104, 69, 39, 148, 36, 73, 232, 220, 188, 88, 40, 192, 209, 209, 179,
    141, 126, 254, 212, 21, 138, 219, 128, 247, 199, 41, 104, 26, 25, 44, 134, 49, 120, 213, 51, 49, 167, 20, 161, 209, 143, 233, 187, 148, 229, 127,
    178, 21, 58, 16, 155, 248, 183, 119, 254, 178, 34, 32, 170, 124, 197, 10, 26, 146, 39, 50, 17, 27, 13, 193, 95, 52, 231, 20, 52, 152, 41,
    225, 28, 181, 66, 50, 67, 4, 118, 55, 36, 100, 22, 140, 102, 16, 101, 197, 15, 70, 5, 180, 94, 199, 58, 85, 20, 3, 154, 81, 176, 197,
    121, 53, 6, 136, 183, 97, 138, 214, 103, 219, 239, 89, 252, 168, 37, 133, 60, 84, 89, 94, 81, 229, 112, 96, 39, 246, 67, 245, 65, 166, 132,
    28, 227, 17, 136, 7, 210, 155, 180, 146, 19, 87, 115, 43, 139, 145, 96, 85, 40, 78, 143, 92, 201, 123, 170, 104, 67, 26, 137, 187, 60, 204,
    125, 52, 83, 123, 66, 78, 153, 61, 41, 93, 84, 203, 85, 57, 124, 17, 172, 105, 35, 247, 71, 179, 88, 142, 111, 51, 238, 180, 4, 180, 92,
    22, 66, 95, 193, 97, 182, 27, 205, 252, 152, 1, 45, 76, 142, 109, 228, 25, 90, 97, 65, 144, 253, 197, 141, 198, 18, 235, 50, 6, 1, 167,
    76, 166, 180, 84, 227, 39, 145, 45, 202, 46, 56, 136, 15, 176, 192, 120, 16, 110, 86, 50, 2, 239, 117, 197, 244, 44, 220, 128, 206, 61, 130,
    155, 131, 137, 140, 55, 117, 113, 138, 77, 54, 203, 240, 156, 55, 91, 74, 94, 166, 187, 43, 12, 253, 87, 24, 154, 218, 205, 114, 234, 28, 159,
    121, 154, 186, 243, 6, 34, 107, 69, 33, 0, 49, 34, 140, 44, 202, 98, 64, 81, 102, 158, 245, 144, 252, 86, 20, 149, 103, 101, 240, 3, 29,
    63, 64, 111, 243, 88, 6, 14, 79, 107, 193, 236, 130, 223, 36, 254, 185, 117, 48, 134, 230, 43, 8, 12, 65, 97, 189, 110, 179, 199, 163, 10,
    232, 220, 161, 154, 178, 118, 160, 90, 61, 231, 168, 152, 82, 159, 109, 165, 20, 114, 180, 10, 82, 98, 238, 200, 211, 228, 52, 190, 49, 220, 127,
    147, 172, 130, 43, 199, 102, 108, 241, 55, 245, 98, 162, 249, 81, 29, 148, 199, 74, 218, 28, 107, 6, 158, 224, 42, 106, 37, 186, 201, 178, 117,
    138, 12, 48, 189, 20, 68, 21, 240, 147, 144, 74, 44, 36, 21, 197, 138, 168, 82, 10, 204, 134, 173, 20, 123, 149, 188, 126, 141, 182, 97, 89,
    29, 12, 198, 149, 96, 50, 108, 94, 149, 179, 127, 26, 248, 128, 30, 23, 177, 100, 14, 114, 27, 102, 188, 150, 84, 42, 222, 232, 245, 154, 69,
    42, 21, 120, 42, 181, 174, 237, 252, 199, 144, 220, 151, 91, 23, 192, 138, 99, 49, 207, 13, 121, 57, 74, 201, 10, 50, 89, 86, 80, 14, 172,
    77, 253, 225, 68, 216, 121, 11, 132, 149, 78, 113, 132, 194, 55, 233, 156, 70, 185, 29, 51, 76, 251, 55, 41, 165, 70, 204, 65, 53, 141, 184,
    168, 33, 30, 129, 209, 230, 86, 84, 16, 243, 167, 120, 78, 110, 143, 2, 180, 18, 211, 37, 183, 172, 111, 89, 20, 51, 103, 36, 172, 22, 54,
    182, 209, 177, 6, 52, 99, 116, 87, 58, 212, 69, 181, 7, 40, 110, 213, 42, 159, 213, 243, 90, 152, 2, 122, 105, 176, 204, 197, 58, 118, 160,
    1, 215, 111, 37, 144, 155, 82, 201, 25, 23, 83, 70, 145, 235, 185, 127, 75, 88, 228, 149, 175, 178, 72, 41, 120, 34, 251, 76, 3, 158, 47,
    181, 28, 128, 23, 103, 36, 39, 244, 168, 233, 46, 45, 66, 187, 50, 240, 42, 154, 133, 243, 144, 204, 14, 2, 159, 41, 253, 180, 196, 126, 102,
    126, 19, 250, 86, 233, 109, 181, 123, 106, 245, 30, 118, 229, 3, 161, 79, 105, 81, 13, 204, 140, 73, 155, 217, 52, 151, 238, 125, 80, 151, 139,
    147, 45, 58, 161, 178, 76, 156, 115, 161, 206, 228, 151, 124, 54, 124, 42, 99, 22, 10, 86, 84, 235, 233, 114, 161, 88, 123, 2, 91, 245, 196,
    145, 178, 244, 86, 61, 157, 128, 53, 120, 148, 230, 162, 53, 145, 53, 135, 139, 11, 178, 114, 130, 221, 117, 55, 215, 41, 124, 221, 163, 63, 52,
    216, 245, 254, 182, 193, 219, 234, 190, 198, 193, 95, 31, 16, 178, 136, 224, 88, 243, 40, 47, 137, 254, 105, 237, 163, 200, 26, 109, 32, 197, 174,
    244, 8, 209, 30, 219, 66, 132, 242, 30, 65, 226, 104, 27, 41, 47, 65, 127, 225, 70, 146, 31, 57, 150, 183, 250, 233, 167, 236, 147, 217, 233,
    188, 253, 89, 7, 133, 13, 96, 9, 124, 79, 15, 45, 64, 61, 81, 207, 229, 120, 69, 153, 175, 239, 119, 124, 116, 127, 137, 131, 214, 147, 32,
    142, 150, 203, 55, 100, 206, 215, 224, 187, 101, 180, 197, 102, 148, 119, 32, 108, 100, 69, 149, 20, 179, 167, 142, 163, 161, 109, 149, 31, 182, 148,
    114, 180, 79, 171, 236, 98, 101, 17, 8, 20, 245, 45, 67, 85, 171, 143, 210, 152, 234, 13, 30, 171, 178, 2, 222, 194, 234, 70, 105, 252, 189,
    189, 211, 134, 99, 74, 80, 75, 225, 196, 68, 79, 196, 59, 180, 98, 33, 142, 149, 71, 221, 9, 5, 192, 243, 159, 82, 204, 143, 88, 74, 99,
    232, 45, 61, 110, 194, 141, 169, 172, 42, 168, 93, 218, 165, 144, 156, 162, 71, 67, 87, 122, 234, 64, 34, 76, 147, 164, 112, 171, 54, 41, 206,
    226, 165, 232, 81, 28, 86, 40, 6, 82, 24, 24, 81, 166, 105, 224, 136, 250, 109, 219, 198, 215, 95, 27, 188, 140, 103, 15, 99, 121, 203, 85,
    203, 109, 81, 30, 168, 229, 142, 40, 159, 171, 229, 174, 40, 119, 138, 1, 88, 46, 0, 240, 27, 170, 81, 88, 33, 48, 251, 44, 45, 27, 236,
    211, 144, 132, 14, 184, 177, 37, 77, 205, 144, 25, 186, 234, 88, 156, 207, 88, 69, 40, 175, 220, 60, 120, 109, 117, 210, 165, 211, 181, 100, 144,
    227, 234, 118, 61, 189, 186, 131, 182, 94, 221, 129, 169, 150, 183, 5, 158, 142, 90, 238, 241, 114, 175, 80, 222, 17, 120, 252, 2, 93, 147, 191,
    48, 11, 118, 179, 4, 71, 102, 179, 104, 56, 166, 169, 79, 88, 83, 105, 0, 93, 29, 148, 165, 66, 185, 122, 40, 91, 133, 106, 234, 161, 28,
    21, 170, 85, 128, 146, 54, 238, 214, 184, 45, 202, 45, 7, 140, 170, 112, 186, 244, 71, 90, 135, 46, 40, 105, 250, 102, 54, 189, 56, 216, 34,
    69, 239, 86, 61, 130, 112, 1, 98, 185, 28, 91, 87, 28, 109, 42, 213, 108, 81, 250, 131, 191, 14, 211, 7, 0, 32, 193, 109, 118, 34, 74,
    61, 21, 111, 155, 44, 183, 150, 158, 125, 147, 172, 225, 47, 73, 156, 86, 206, 217, 210, 175, 184, 27, 197, 152, 211, 123, 37, 234, 198, 199, 248,
    193, 240, 111, 144, 44, 96, 124, 136, 182, 177, 177, 73, 92, 220, 43, 128, 177, 120, 126, 111, 116, 234, 166, 89, 151, 79, 241, 223, 47, 240, 218,
    137, 172, 83, 20, 206, 150, 199, 219, 245, 100, 225, 239, 178, 244, 189, 124, 99, 162, 187, 143, 107, 7, 239, 97, 160, 140, 127, 85, 156, 130, 241,
    148, 140, 156, 122, 163, 129, 89, 21, 198, 253, 109, 38, 6, 124, 219, 192, 48, 7, 170, 73, 216, 146, 249, 61, 49, 2, 31, 230, 163, 113, 52,
    133, 239, 32, 219, 124, 142, 81, 71, 26, 25, 183, 225, 114, 201, 23, 192, 141, 41, 129, 82, 146, 93, 83, 193, 111, 114, 152, 110, 83, 60, 79,
    191, 93, 206, 0, 238, 175, 117, 201, 122, 217, 49, 65, 253, 185, 123, 60, 167, 143, 171, 49, 210, 237, 28, 217, 33, 254, 122, 93, 214, 159, 116,
    160, 94, 185, 61, 163, 102, 56, 185, 231, 46, 40, 85, 168, 129, 19, 135, 1, 44, 246, 121, 36, 150, 8, 229, 176, 68, 18, 12, 46, 182, 27,
    81, 22, 77, 145, 128, 90, 6, 115, 212, 155, 27, 60, 129, 181, 65, 183, 197, 206, 241, 211, 125, 45, 48, 210, 146, 103, 131, 196, 240, 28, 173,
    38, 27, 31, 143, 223, 97, 1, 217, 77, 240, 90, 160, 110, 225, 102, 152, 201, 38, 222, 85, 240, 2, 35, 193, 89, 163, 1, 86, 157, 204, 30,
    214, 208, 49, 38, 2, 34, 243, 157, 49, 245, 225, 170, 245, 155, 29, 188, 202, 33, 223, 216, 169, 252, 220, 248, 207, 223, 37, 250, 159, 27, 65,
    180, 90, 69, 235, 6, 96, 132, 55, 72, 236, 243, 207, 85, 126, 197, 2, 227, 153, 126, 145, 154, 23, 144, 209, 183, 38, 209, 17, 230, 234, 141,
    42, 192, 34, 77, 85, 102, 216, 168, 9, 169, 76, 242, 42, 180, 34, 24, 6, 192, 168, 142, 9, 217, 169, 61, 155, 171, 137, 46, 33, 245, 68,
    90, 178, 78, 234, 150, 233, 213, 178, 37, 95, 70, 87, 200, 196, 113, 60, 77, 30, 20, 3, 162, 179, 45, 136, 129, 72, 12, 92, 138, 224, 114,
    157, 43, 242, 208, 173, 166, 101, 130, 55, 74, 73, 193, 8, 167, 157, 135, 48, 249, 138, 13, 175, 128, 75, 105, 210, 106, 117, 185, 194, 32, 139,
    134, 233, 97, 0, 94, 227, 171, 130, 71, 162, 199, 194, 65, 199, 232, 170, 206, 89, 200, 205, 54, 21, 237, 58, 180, 203, 221, 121, 233, 96, 0,
    99, 117, 207, 110, 133, 148, 60, 82, 61, 114, 190, 138, 105, 236, 103, 222, 144, 106, 153, 72, 224, 69, 214, 252, 172, 106, 157, 38, 110, 129, 227,
    218, 130, 165, 30, 64, 143, 179, 48, 240, 49, 94, 72, 23, 126, 202, 222, 113, 21, 47, 252, 196, 240, 17, 133, 177, 89, 204, 98, 24, 19, 210,
    5, 174, 100, 45, 233, 133, 72, 117, 227, 159, 209, 150, 122, 162, 133, 31, 207, 130, 104, 70, 104, 18, 124, 184, 186, 1, 135, 129, 182, 194, 61,
    56, 177, 254, 143, 41, 219, 220, 253, 82, 12, 64, 247, 62, 76, 22, 8, 134, 59, 124, 152, 240, 195, 146, 232, 97, 148, 249, 121, 207, 248, 34,
    178, 206, 152, 170, 104, 191, 110, 52, 222, 78, 83, 244, 236, 212, 99, 100, 185, 41, 233, 34, 142, 182, 55, 11, 33, 198, 146, 249, 174, 188, 107,
    23, 252, 11, 87, 33, 239, 30, 234, 189, 41, 35, 79, 106, 31, 172, 219, 130, 58, 103, 180, 235, 78, 216, 130, 228, 132, 45, 114, 179, 234, 249,
    36, 224, 64, 61, 109, 5, 75, 212, 224, 109, 14, 247, 109, 203, 245, 228, 73, 70, 49, 170, 222, 207, 94, 141, 166, 1, 112, 252, 197, 158, 106,
    195, 219, 154, 142, 86, 237, 128, 192, 162, 239, 231, 142, 44, 235, 53, 184, 206, 169, 193, 38, 216, 205, 178, 5, 120, 74, 100, 230, 103, 121, 63,
    121, 5, 239, 120, 39, 201, 53, 136, 73, 9, 123, 224, 191, 93, 205, 74, 224, 152, 59, 177, 7, 92, 237, 134, 251, 119, 254, 148, 52, 136, 147,
    246, 224, 4, 143, 220, 68, 10, 130, 211, 119, 254, 236, 199, 238, 252, 113, 81, 179, 205, 62, 251, 241, 84, 213, 228, 141, 147, 200, 102, 22, 20,
    65, 161, 130, 98, 207, 46, 163, 70, 94, 5, 191, 122, 36, 130, 185, 108, 61, 7, 146, 139, 104, 52, 70, 235, 100, 11, 238, 5, 51, 73, 132,
    7, 240, 241, 251, 29, 12, 27, 52, 98, 194, 208, 136, 70, 24, 245, 194, 138, 200, 92, 123, 14, 200, 54, 157, 235, 218, 30, 209, 233, 208, 103,
    42, 10, 101, 168, 248, 201, 38, 234, 148, 250, 219, 16, 2, 44, 244, 134, 252, 128, 4, 30, 69, 167, 96, 53, 230, 95, 49, 194, 99, 206, 54,
    3, 185, 199, 216, 109, 74, 160, 247, 211, 124, 19, 8, 181, 238, 23, 100, 77, 33, 112, 161, 0, 67, 29, 99, 19, 222, 69, 212, 189, 17, 118,
    172, 185, 46, 69, 80, 74, 116, 196, 245, 200, 178, 255, 120, 98, 237, 116, 155, 60, 176, 236, 212, 190, 237, 13, 199, 158, 8, 200, 21, 152, 32,
    218, 48, 160, 222, 96, 216, 213, 188, 199, 241, 131, 190, 183, 219, 150, 51, 214, 129, 108, 192, 251, 203, 80, 174, 107, 105, 160, 86, 100, 21, 112,
    74, 8, 211, 223, 135, 41, 227, 7, 160, 154, 166, 14, 19, 66, 240, 92, 70, 128, 105, 245, 134, 123, 97, 216, 114, 6, 5, 235, 55, 247, 129,
    73, 64, 3, 91, 7, 4, 26, 14, 103, 108, 45, 198, 177, 236, 192, 53, 245, 48, 65, 108, 50, 101, 143, 251, 29, 183, 163, 129, 249, 71, 184,
    100, 153, 157, 86, 123, 214, 52, 117, 88, 238, 72, 28, 190, 243, 211, 96, 65, 193, 90, 118, 203, 107, 187, 26, 48, 178, 102, 139, 110, 188, 245,
    78, 44, 118, 57, 67, 199, 60, 1, 214, 102, 176, 253, 230, 9, 176, 14, 135, 237, 156, 0, 235, 50, 216, 129, 173, 51, 61, 76, 92, 82, 188,
    50, 143, 206, 207, 205, 190, 167, 181, 125, 188, 99, 102, 112, 122, 163, 129, 78, 234, 217, 50, 121, 88, 113, 89, 109, 167, 223, 106, 143, 247, 2,
    49, 33, 109, 219, 154, 238, 51, 214, 54, 156, 49, 83, 244, 204, 150, 14, 130, 137, 101, 89, 156, 30, 68, 141, 102, 211, 54, 15, 66, 218, 18,
    164, 119, 16, 210, 201, 33, 221, 193, 65, 72, 238, 54, 169, 106, 131, 182, 63, 211, 41, 23, 156, 175, 224, 178, 213, 114, 236, 222, 62, 24, 59,
    135, 25, 238, 109, 193, 56, 118, 243, 230, 231, 192, 244, 209, 233, 107, 32, 111, 127, 221, 146, 45, 153, 4, 203, 40, 33, 19, 178, 9, 25, 116,
    199, 235, 116, 44, 238, 97, 244, 73, 255, 186, 11, 39, 16, 186, 112, 12, 0, 192, 244, 245, 165, 205, 3, 145, 43, 182, 38, 55, 126, 26, 222,
    101, 65, 39, 68, 148, 140, 59, 190, 65, 157, 143, 3, 70, 150, 31, 214, 104, 228, 247, 52, 141, 199, 94, 171, 223, 236, 56, 152, 131, 106, 54,
    117, 175, 205, 145, 211, 114, 49, 107, 215, 52, 213, 208, 171, 192, 181, 122, 93, 163, 168, 88, 147, 239, 132, 18, 161, 199, 173, 102, 69, 36, 47,
    183, 203, 47, 178, 241, 142, 14, 30, 56, 178, 176, 107, 73, 98, 178, 130, 10, 73, 62, 236, 213, 213, 233, 252, 9, 67, 222, 173, 180, 46, 142,
    73, 22, 197, 245, 214, 199, 96, 177, 255, 40, 26, 189, 217, 143, 141, 191, 146, 238, 234, 133, 75, 79, 4, 95, 197, 139, 72, 132, 212, 202, 73,
    201, 162, 69, 85, 171, 28, 7, 150, 49, 31, 62, 251, 40, 3, 233, 101, 214, 0, 234, 207, 233, 132, 90, 164, 251, 78, 217, 203, 48, 135, 164,
    213, 156, 124, 204, 19, 129, 175, 165, 5, 188, 40, 142, 97, 90, 71, 158, 65, 219, 164, 238, 96, 38, 35, 225, 103, 185, 42, 82, 52, 34, 50,
    81, 246, 146, 194, 132, 247, 107, 186, 11, 23, 102, 203, 86, 16, 34, 37, 254, 156, 198, 116, 49, 185, 96, 3, 143, 65, 211, 89, 227, 237, 38,
    197, 89, 238, 125, 253, 76, 154, 105, 204, 118, 232, 14, 57, 250, 99, 135, 50, 43, 202, 32, 47, 77, 40, 0, 141, 253, 36, 52, 224, 69, 179,
    126, 251, 29, 110, 43, 61, 24, 63, 12, 143, 152, 104, 143, 29, 33, 6, 56, 106, 221, 228, 72, 19, 80, 50, 230, 143, 55, 150, 217, 110, 15,
    39, 163, 163, 85, 131, 125, 85, 205, 39, 54, 209, 188, 166, 176, 235, 100, 70, 146, 52, 183, 10, 63, 107, 95, 41, 215, 149, 142, 196, 226, 142,
    46, 94, 168, 140, 38, 76, 201, 154, 173, 105, 40, 86, 63, 123, 154, 138, 49, 150, 49, 193, 203, 57, 206, 113, 173, 234, 49, 40, 126, 179, 208,
    246, 254, 4, 81, 161, 101, 42, 162, 150, 46, 184, 65, 21, 215, 114, 69, 171, 180, 116, 208, 118, 45, 231, 21, 221, 2, 111, 246, 175, 216, 173,
    238, 6, 13, 38, 42, 36, 169, 42, 158, 148, 159, 82, 173, 20, 131, 94, 122, 183, 177, 217, 49, 11, 142, 183, 232, 70, 48, 102, 71, 208, 81,
    63, 235, 102, 171, 240, 102, 145, 26, 62, 76, 177, 8, 132, 216, 179, 136, 14, 148, 17, 124, 196, 201, 65, 84, 56, 107, 81, 80, 237, 1, 20,
    51, 156, 83, 96, 217, 60, 231, 84, 172, 37, 97, 246, 192, 178, 249, 204, 233, 144, 9, 91, 1, 58, 5, 88, 6, 21, 246, 51, 110, 182, 152,
    126, 255, 16, 109, 209, 181, 175, 163, 148, 78, 181, 233, 106, 225, 212, 159, 213, 235, 245, 131, 106, 229, 142, 222, 44, 248, 113, 240, 211, 178, 47,
    231, 139, 111, 105, 184, 34, 241, 197, 131, 236, 208, 233, 214, 77, 118, 228, 3, 154, 22, 110, 107, 100, 23, 225, 115, 103, 202, 251, 137, 147, 117,
    17, 251, 100, 39, 141, 19, 49, 181, 183, 185, 79, 192, 162, 140, 24, 162, 242, 41, 125, 223, 214, 59, 119, 251, 136, 235, 17, 2, 171, 142, 193,
    214, 123, 6, 251, 49, 174, 1, 245, 113, 84, 138, 221, 62, 41, 70, 199, 165, 8, 246, 86, 54, 143, 87, 246, 142, 213, 21, 54, 252, 242, 138,
    225, 51, 255, 51, 165, 190, 206, 15, 58, 181, 220, 52, 5, 114, 58, 112, 183, 150, 51, 156, 247, 186, 222, 102, 179, 124, 16, 211, 21, 234, 58,
    73, 130, 111, 52, 125, 205, 173, 236, 91, 10, 168, 137, 179, 194, 121, 240, 221, 104, 176, 73, 93, 136, 73, 169, 244, 162, 116, 232, 134, 129, 143,
    171, 240, 141, 100, 17, 111, 111, 14, 117, 230, 210, 60, 255, 128, 91, 177, 247, 85, 114, 14, 186, 246, 189, 213, 108, 169, 218, 33, 30, 217, 124,
    254, 0, 99, 153, 186, 196, 74, 132, 70, 75, 123, 120, 218, 196, 59, 138, 184, 115, 108, 92, 226, 203, 19, 167, 112, 193, 23, 41, 16, 116, 224,
    12, 76, 199, 114, 189, 35, 18, 178, 73, 62, 189, 246, 191, 125, 100, 248, 161, 83, 253, 12, 242, 16, 27, 210, 34, 135, 164, 15, 91, 139, 159,
    223, 103, 80, 174, 10, 164, 246, 172, 90, 28, 214, 129, 180, 26, 34, 17, 183, 242, 222, 32, 252, 254, 224, 189, 121, 16, 143, 180, 108, 193, 21,
    218, 182, 109, 115, 172, 250, 134, 230, 211, 252, 123, 134, 249, 143, 120, 121, 8, 18, 155, 82, 144, 40, 56, 250, 83, 188, 85, 198, 240, 81, 23,
    212, 172, 229, 92, 200, 74, 15, 16, 187, 82, 91, 186, 71, 98, 207, 2, 208, 65, 237, 104, 47, 169, 56, 109, 196, 83, 160, 78, 152, 40, 219,
    251, 47, 8, 194, 131, 208, 215, 127, 100, 160, 178, 14, 143, 84, 202, 161, 229, 235, 163, 92, 105, 238, 217, 56, 173, 109, 241, 214, 211, 146, 26,
    142, 238, 6, 160, 67, 148, 75, 247, 251, 232, 129, 249, 76, 252, 168, 185, 54, 37, 222, 190, 96, 203, 142, 32, 108, 100, 107, 93, 252, 0, 235,
    209, 118, 221, 170, 229, 60, 84, 213, 59, 170, 213, 212, 145, 44, 189, 227, 59, 127, 147, 237, 183, 192, 123, 229, 20, 194, 228, 22, 98, 95, 162,
    255, 121, 22, 182, 194, 37, 254, 210, 139, 0, 169, 43, 115, 216, 130, 149, 101, 202, 139, 127, 114, 66, 71, 134, 124, 30, 46, 211, 136, 94, 196,
    155, 211, 146, 118, 123, 75, 103, 34, 38, 184, 35, 164, 5, 246, 114, 96, 204, 67, 144, 32, 178, 44, 11, 138, 175, 156, 104, 65, 214, 17, 204,
    88, 94, 208, 20, 145, 188, 218, 161, 220, 40, 158, 59, 130, 90, 44, 233, 173, 209, 120, 253, 253, 219, 143, 163, 194, 50, 164, 146, 173, 205, 8,
    212, 50, 129, 116, 217, 184, 26, 9, 91, 30, 207, 166, 23, 90, 171, 42, 236, 140, 95, 189, 249, 248, 246, 221, 135, 131, 132, 121, 69, 126, 246,
    23, 79, 227, 3, 202, 172, 53, 171, 23, 49, 176, 53, 40, 165, 12, 158, 98, 146, 30, 193, 45, 231, 254, 103, 168, 143, 95, 10, 192, 200, 105,
    225, 228, 4, 243, 188, 198, 137, 108, 160, 210, 110, 143, 164, 62, 107, 43, 90, 138, 0, 143, 63, 210, 207, 4, 202, 234, 169, 231, 16, 246, 97,
    80, 211, 237, 5, 46, 197, 206, 111, 251, 127, 63, 104, 99, 104, 80, 153, 12, 78, 89, 134, 3, 87, 67, 72, 28, 23, 79, 78, 20, 224, 213,
    87, 42, 127, 210, 66, 61, 237, 27, 204, 127, 148, 22, 234, 53, 89, 25, 182, 233, 212, 12, 185, 131, 64, 44, 195, 122, 53, 207, 102, 83, 178,
    220, 74, 247, 10, 102, 142, 226, 251, 31, 190, 155, 188, 254, 175, 31, 70, 63, 140, 62, 240, 189, 95, 83, 74, 240, 102, 35, 183, 56, 163, 201,
    55, 99, 228, 42, 223, 24, 121, 34, 11, 250, 70, 148, 129, 86, 74, 10, 122, 215, 37, 2, 75, 136, 180, 39, 216, 14, 109, 1, 56, 45, 187,
    120, 59, 171, 188, 244, 202, 47, 150, 172, 228, 18, 228, 158, 18, 152, 86, 14, 192, 125, 222, 183, 85, 160, 170, 129, 221, 128, 174, 57, 33, 154,
    211, 168, 201, 34, 201, 233, 44, 184, 20, 130, 39, 70, 38, 73, 20, 220, 210, 29, 58, 213, 154, 29, 24, 32, 32, 52, 150, 126, 143, 139, 93,
    36, 171, 212, 162, 206, 249, 37, 187, 50, 223, 248, 215, 191, 12, 221, 235, 43, 186, 147, 169, 117, 221, 225, 250, 14, 134, 63, 24, 32, 41, 244,
    193, 124, 86, 177, 94, 79, 155, 206, 45, 76, 2, 215, 105, 126, 243, 3, 251, 94, 220, 157, 43, 158, 180, 97, 80, 138, 131, 43, 240, 91, 74,
    228, 87, 107, 176, 100, 126, 28, 12, 105, 207, 54, 45, 105, 242, 181, 175, 14, 59, 187, 122, 140, 23, 234, 172, 78, 0, 243, 20, 176, 70, 227,
    79, 111, 209, 116, 111, 140, 181, 181, 79, 24, 117, 49, 134, 104, 124, 192, 83, 35, 197, 199, 41, 173, 87, 12, 117, 177, 127, 67, 239, 29, 131,
    113, 59, 138, 31, 14, 9, 97, 121, 58, 41, 240, 92, 167, 253, 24, 65, 90, 138, 24, 143, 96, 245, 35, 115, 89, 198, 219, 183, 125, 86, 196,
    91, 238, 171, 117, 2, 127, 141, 143, 224, 37, 127, 248, 208, 55, 134, 49, 110, 225, 246, 214, 51, 99, 0, 81, 220, 173, 241, 246, 181, 241, 19,
    102, 194, 96, 182, 225, 7, 66, 40, 220, 187, 104, 3, 241, 198, 247, 81, 26, 206, 49, 119, 17, 252, 158, 104, 240, 218, 164, 229, 209, 110, 236,
    167, 223, 250, 59, 158, 168, 204, 168, 179, 31, 9, 163, 57, 201, 117, 240, 208, 235, 10, 120, 206, 203, 43, 166, 8, 41, 185, 72, 112, 29, 68,
    116, 61, 146, 249, 112, 205, 207, 26, 234, 126, 202, 224, 207, 213, 180, 250, 84, 214, 248, 209, 108, 116, 53, 141, 94, 97, 11, 163, 29, 226, 175,
    69, 80, 199, 6, 174, 175, 97, 232, 130, 210, 4, 51, 42, 161, 139, 207, 196, 112, 218, 224, 201, 72, 167, 202, 213, 118, 174, 229, 128, 121, 160,
    238, 12, 31, 237, 72, 118, 83, 63, 52, 40, 119, 75, 23, 164, 249, 136, 89, 87, 179, 48, 193, 225, 54, 193, 211, 17, 184, 207, 80, 51, 18,
    104, 79, 167, 252, 130, 106, 99, 186, 140, 166, 13, 28, 182, 217, 234, 89, 157, 253, 36, 201, 10, 151, 36, 48, 87, 179, 116, 254, 130, 66, 29,
    252, 61, 71, 222, 215, 133, 18, 218, 53, 254, 99, 41, 133, 121, 66, 181, 123, 16, 247, 132, 159, 229, 210, 142, 92, 50, 160, 64, 175, 193, 71,
    183, 91, 222, 97, 50, 210, 39, 190, 244, 210, 239, 123, 53, 224, 98, 228, 117, 92, 152, 75, 192, 163, 233, 56, 67, 111, 232, 98, 169, 57, 102,
    139, 51, 53, 60, 188, 211, 108, 14, 28, 179, 9, 143, 94, 223, 245, 70, 77, 175, 3, 143, 157, 230, 200, 51, 189, 246, 8, 30, 71, 94, 6,
    203, 111, 44, 108, 50, 100, 45, 171, 9, 210, 177, 106, 57, 128, 227, 180, 157, 33, 60, 58, 99, 86, 14, 143, 109, 119, 60, 246, 154, 148, 48,
    227, 96, 212, 23, 200, 236, 14, 194, 142, 59, 78, 19, 161, 41, 59, 172, 156, 146, 176, 109, 11, 202, 139, 36, 134, 173, 145, 103, 33, 0, 162,
    202, 9, 219, 157, 49, 35, 220, 204, 8, 51, 84, 35, 23, 31, 155, 86, 129, 132, 3, 143, 253, 14, 162, 162, 36, 92, 73, 76, 187, 69, 85,
    85, 146, 205, 238, 143, 29, 20, 222, 42, 146, 24, 120, 84, 81, 136, 138, 233, 151, 254, 235, 12, 80, 248, 94, 166, 117, 89, 54, 187, 215, 115,
    52, 178, 65, 121, 223, 162, 36, 108, 133, 68, 27, 236, 136, 143, 150, 135, 134, 193, 210, 129, 211, 28, 242, 106, 173, 33, 144, 232, 148, 73, 180,
    70, 206, 208, 180, 104, 53, 133, 68, 139, 43, 106, 200, 202, 51, 41, 218, 212, 88, 22, 43, 47, 34, 107, 219, 122, 100, 29, 71, 143, 172, 131,
    90, 111, 53, 245, 200, 90, 45, 61, 50, 175, 173, 71, 230, 33, 6, 175, 163, 71, 230, 245, 246, 32, 235, 235, 145, 185, 3, 90, 154, 33, 27,
    56, 25, 50, 108, 253, 216, 33, 208, 0, 230, 104, 224, 57, 20, 192, 118, 225, 111, 135, 63, 54, 197, 227, 104, 136, 237, 223, 148, 216, 65, 30,
    220, 126, 219, 29, 152, 94, 147, 150, 14, 236, 204, 44, 174, 233, 154, 212, 220, 246, 56, 3, 0, 113, 61, 222, 96, 128, 196, 192, 97, 143, 212,
    238, 189, 54, 170, 15, 225, 56, 235, 163, 193, 168, 111, 13, 105, 169, 149, 87, 147, 122, 86, 155, 246, 183, 17, 74, 220, 166, 168, 44, 90, 205,
    110, 55, 77, 207, 198, 106, 227, 177, 5, 60, 12, 218, 148, 29, 238, 154, 48, 253, 209, 50, 219, 61, 218, 214, 29, 107, 104, 59, 214, 184, 5,
    143, 189, 38, 202, 54, 232, 168, 178, 53, 135, 150, 57, 112, 61, 135, 218, 130, 249, 13, 202, 36, 196, 178, 227, 81, 179, 198, 92, 158, 205, 216,
    193, 5, 91, 248, 55, 98, 125, 30, 216, 25, 228, 14, 132, 246, 22, 220, 4, 48, 219, 140, 29, 248, 131, 95, 41, 53, 90, 238, 102, 253, 184,
    159, 117, 39, 171, 135, 118, 3, 167, 212, 230, 74, 109, 53, 65, 32, 134, 97, 208, 118, 6, 89, 215, 179, 155, 150, 235, 10, 188, 188, 61, 48,
    39, 104, 33, 128, 53, 192, 114, 7, 31, 251, 30, 163, 135, 58, 27, 22, 93, 144, 69, 241, 218, 38, 210, 163, 143, 174, 103, 123, 57, 94, 43,
    111, 81, 208, 255, 17, 67, 155, 186, 182, 78, 230, 31, 28, 55, 99, 189, 201, 120, 24, 219, 118, 39, 179, 49, 248, 220, 54, 3, 176, 90, 125,
    234, 86, 154, 45, 230, 209, 224, 113, 216, 70, 72, 234, 149, 7, 22, 154, 139, 242, 224, 97, 67, 246, 70, 188, 154, 57, 234, 12, 168, 9, 37,
    23, 143, 255, 134, 153, 1, 132, 221, 154, 232, 44, 152, 1, 198, 172, 137, 35, 64, 19, 141, 98, 155, 204, 110, 35, 222, 30, 104, 25, 84, 165,
    221, 201, 65, 223, 69, 125, 117, 174, 73, 211, 100, 27, 28, 212, 66, 204, 180, 84, 59, 185, 206, 232, 107, 179, 157, 89, 94, 26, 58, 28, 234,
    185, 232, 107, 106, 55, 246, 154, 54, 35, 124, 109, 243, 30, 107, 49, 122, 220, 22, 136, 144, 2, 244, 90, 156, 29, 79, 102, 199, 26, 91, 35,
    74, 24, 45, 57, 110, 81, 206, 160, 164, 233, 241, 166, 209, 1, 116, 0, 196, 171, 113, 115, 243, 106, 29, 94, 13, 27, 62, 173, 6, 186, 44,
    85, 67, 133, 102, 213, 216, 28, 135, 234, 44, 87, 20, 218, 98, 76, 221, 54, 235, 12, 28, 224, 148, 206, 96, 14, 7, 170, 74, 204, 161, 162,
    18, 78, 13, 205, 199, 169, 181, 157, 118, 7, 154, 59, 2, 52, 199, 173, 97, 171, 73, 157, 66, 219, 132, 242, 102, 155, 151, 186, 173, 81, 171,
    73, 97, 91, 86, 203, 99, 126, 221, 108, 142, 29, 155, 151, 2, 72, 179, 77, 189, 167, 217, 114, 90, 163, 118, 135, 250, 18, 134, 25, 31, 109,
    134, 153, 142, 45, 136, 149, 61, 122, 136, 131, 62, 34, 34, 196, 157, 177, 195, 152, 148, 216, 161, 149, 40, 9, 86, 169, 53, 164, 61, 150, 49,
    36, 186, 63, 4, 11, 181, 124, 215, 174, 244, 56, 246, 188, 113, 169, 212, 6, 77, 183, 203, 176, 150, 55, 28, 235, 74, 71, 165, 82, 96, 221,
    181, 172, 50, 108, 7, 70, 184, 82, 169, 11, 244, 90, 197, 82, 171, 105, 131, 97, 60, 109, 105, 25, 67, 203, 30, 218, 218, 210, 241, 160, 88,
    218, 178, 155, 157, 158, 89, 46, 5, 191, 160, 41, 21, 93, 186, 0, 107, 119, 116, 165, 109, 133, 135, 194, 33, 98, 249, 167, 188, 233, 156, 135,
    71, 147, 202, 101, 77, 74, 141, 226, 245, 67, 165, 112, 150, 93, 226, 196, 241, 192, 151, 67, 23, 19, 29, 79, 35, 45, 6, 193, 238, 225, 217,
    134, 10, 46, 14, 161, 20, 211, 35, 31, 49, 93, 105, 63, 138, 137, 226, 252, 237, 177, 231, 112, 95, 78, 227, 171, 247, 100, 21, 221, 177, 85,
    199, 108, 62, 93, 47, 254, 76, 249, 73, 167, 116, 85, 125, 43, 63, 36, 170, 59, 117, 40, 157, 211, 228, 203, 147, 217, 33, 102, 158, 199, 176,
    32, 254, 198, 96, 249, 89, 83, 34, 166, 212, 4, 136, 166, 217, 25, 237, 8, 143, 209, 78, 163, 136, 29, 142, 193, 84, 243, 40, 63, 219, 89,
    90, 230, 53, 213, 41, 18, 95, 130, 96, 203, 164, 47, 27, 73, 16, 135, 155, 244, 234, 236, 37, 123, 48, 210, 135, 13, 185, 228, 135, 2, 147,
    56, 184, 60, 175, 55, 56, 131, 245, 95, 146, 243, 43, 169, 66, 3, 56, 157, 193, 223, 105, 52, 123, 128, 63, 179, 240, 206, 8, 240, 151, 40,
    47, 241, 142, 224, 232, 220, 8, 103, 151, 231, 43, 102, 147, 243, 171, 124, 153, 129, 226, 170, 25, 239, 216, 44, 249, 39, 31, 36, 71, 163, 52,
    160, 62, 34, 229, 216, 26, 139, 116, 181, 188, 58, 251, 31, 2, 28, 86, 135, 82, 133, 0, 0};
#else
static const uint8_t loader_gz[] PROGMEM = {
    31, 139, 8, 8, 115, 222, 5, 98, 0, 11, 108, 111, 97, 100, 101, 114, 46, 104, 116, 109, 108, 0, 228, 60, 107, 115, 219, 56, 146, 223, 167, 106,
    254, 3, 226, 187, 157, 72, 99, 89, 34, 41, 89, 15, 43, 206, 150, 36, 75, 59, 217, 100, 54, 169, 36, 55, 179, 91, 57, 23, 135, 34, 33, 137,
    99, 138, 228, 144, 148, 37, 37, 231, 255, 126, 221, 0, 248, 0, 9, 201, 143, 100, 111, 235, 238, 156, 138, 45, 1, 141, 126, 163, 209, 0, 154, 124,
    241, 236, 234, 237, 228, 227, 63, 222, 77, 201, 42, 89, 123, 47, 95, 176, 223, 223, 127, 247, 98, 69, 45, 7, 255, 38, 110, 226, 209, 151, 111, 2,
    203, 161, 209, 139, 22, 255, 6, 205, 107, 154, 88, 196, 183, 214, 244, 242, 214, 165, 219, 48, 136, 18, 98, 7, 126, 66, 253, 228, 242, 100, 235, 58,
    201, 234, 210, 161, 183, 174, 77, 207, 216, 151, 6, 113, 125, 55, 113, 45, 239, 44, 182, 45, 143, 94, 234, 39, 136, 35, 78, 246, 128, 108, 30, 56,
    251, 47, 118, 224, 5, 209, 197, 118, 229, 38, 116, 184, 0, 60, 103, 177, 251, 153, 94, 24, 90, 184, 27, 38, 116, 151, 156, 89, 158, 187, 244, 47,
    108, 64, 79, 163, 225, 218, 138, 150, 174, 127, 161, 13, 131, 91, 26, 45, 188, 96, 123, 177, 114, 29, 135, 250, 195, 187, 166, 235, 47, 130, 47, 89,
    51, 17, 237, 97, 16, 3, 245, 192, 191, 32, 11, 119, 71, 157, 194, 119, 107, 30, 7, 222, 6, 136, 38, 65, 120, 65, 58, 231, 127, 26, 122, 116,
    145, 92, 144, 115, 237, 79, 5, 62, 136, 113, 14, 140, 176, 239, 11, 107, 237, 122, 251, 11, 18, 91, 126, 124, 22, 211, 200, 93, 12, 57, 239, 228,
    223, 230, 125, 252, 55, 76, 34, 232, 90, 4, 209, 250, 130, 176, 143, 158, 149, 208, 218, 25, 32, 108, 16, 252, 93, 31, 222, 189, 104, 113, 201, 81,
    5, 118, 228, 134, 9, 124, 250, 254, 187, 86, 139, 4, 145, 11, 130, 89, 30, 161, 187, 208, 11, 92, 224, 99, 149, 36, 97, 124, 209, 106, 45, 221,
    100, 181, 153, 55, 237, 96, 221, 154, 172, 168, 239, 4, 147, 149, 21, 182, 194, 183, 111, 199, 113, 7, 7, 223, 90, 17, 9, 173, 189, 7, 102, 154,
    185, 30, 37, 151, 36, 166, 113, 12, 34, 126, 72, 130, 200, 90, 210, 230, 146, 38, 175, 18, 186, 174, 61, 23, 80, 207, 235, 67, 105, 212, 71, 52,
    236, 145, 97, 204, 240, 229, 65, 87, 22, 56, 193, 37, 57, 57, 25, 34, 15, 139, 141, 111, 163, 86, 73, 188, 10, 182, 63, 3, 30, 64, 80, 91,
    199, 203, 58, 249, 242, 253, 119, 132, 56, 129, 189, 89, 131, 1, 17, 231, 212, 163, 248, 113, 188, 127, 229, 212, 78, 214, 28, 244, 164, 14, 214, 243,
    105, 244, 211, 199, 159, 223, 0, 82, 24, 56, 124, 224, 48, 166, 205, 166, 227, 198, 161, 103, 237, 47, 159, 207, 189, 192, 190, 121, 14, 131, 239, 36,
    174, 144, 225, 119, 57, 223, 181, 58, 1, 141, 135, 17, 197, 134, 84, 32, 226, 64, 207, 247, 223, 49, 126, 221, 5, 169, 21, 84, 90, 199, 54, 214,
    193, 127, 80, 13, 187, 85, 4, 156, 250, 116, 75, 254, 254, 243, 155, 159, 192, 84, 239, 233, 31, 27, 26, 39, 181, 250, 48, 7, 4, 160, 102, 16,
    82, 191, 246, 252, 47, 211, 143, 207, 27, 69, 51, 53, 192, 67, 54, 180, 2, 12, 238, 27, 185, 14, 253, 217, 93, 211, 143, 251, 144, 130, 242, 97,
    10, 180, 64, 56, 215, 31, 18, 123, 101, 69, 49, 77, 46, 119, 103, 27, 112, 191, 51, 135, 46, 92, 159, 114, 115, 74, 72, 124, 38, 207, 37, 73,
    229, 175, 209, 122, 145, 125, 148, 46, 89, 185, 49, 40, 207, 74, 54, 49, 185, 188, 36, 134, 166, 73, 32, 248, 35, 27, 154, 13, 136, 104, 28, 6,
    126, 76, 11, 4, 239, 242, 143, 212, 139, 105, 254, 173, 132, 173, 232, 24, 39, 51, 11, 52, 224, 144, 36, 96, 150, 33, 39, 228, 84, 242, 224, 83,
    104, 57, 99, 173, 5, 54, 139, 82, 222, 221, 149, 68, 142, 97, 94, 8, 205, 51, 134, 82, 86, 82, 38, 36, 234, 127, 11, 50, 155, 131, 54, 155,
    39, 217, 56, 230, 52, 5, 183, 113, 253, 223, 169, 157, 8, 199, 97, 78, 227, 236, 33, 238, 185, 118, 54, 158, 67, 0, 179, 113, 18, 4, 75, 234,
    8, 255, 145, 60, 8, 21, 216, 244, 168, 191, 76, 86, 228, 37, 209, 234, 28, 32, 87, 79, 97, 82, 153, 243, 205, 98, 65, 209, 177, 192, 212, 174,
    223, 140, 247, 24, 51, 189, 90, 167, 215, 107, 48, 95, 115, 253, 164, 219, 169, 105, 59, 163, 11, 22, 131, 159, 6, 209, 118, 131, 58, 254, 110, 139,
    239, 61, 252, 210, 209, 217, 231, 51, 29, 190, 20, 244, 134, 148, 128, 194, 27, 234, 3, 133, 42, 119, 67, 37, 75, 30, 11, 255, 56, 160, 185, 6,
    94, 2, 187, 109, 212, 56, 146, 18, 102, 14, 104, 110, 35, 8, 228, 81, 78, 64, 32, 104, 206, 45, 251, 198, 245, 151, 249, 24, 136, 147, 53, 28,
    231, 94, 106, 67, 247, 5, 71, 217, 234, 12, 221, 211, 211, 122, 201, 119, 16, 106, 181, 251, 5, 130, 163, 204, 118, 236, 193, 42, 83, 115, 127, 236,
    52, 58, 167, 248, 167, 14, 241, 32, 244, 220, 164, 118, 2, 145, 33, 162, 48, 151, 98, 90, 171, 55, 127, 15, 92, 159, 53, 229, 157, 107, 43, 172,
    101, 179, 35, 174, 127, 137, 104, 178, 137, 0, 8, 117, 136, 126, 23, 55, 113, 174, 77, 2, 135, 142, 146, 154, 86, 111, 38, 193, 135, 36, 2, 238,
    107, 122, 23, 137, 48, 186, 103, 6, 196, 243, 28, 251, 80, 230, 89, 210, 198, 39, 247, 154, 177, 14, 252, 188, 242, 147, 26, 147, 165, 65, 0, 87,
    62, 40, 159, 71, 178, 233, 123, 157, 70, 73, 147, 13, 97, 195, 6, 1, 71, 208, 201, 127, 129, 189, 13, 246, 27, 228, 47, 153, 48, 89, 69, 148,
    69, 130, 212, 118, 56, 162, 232, 17, 156, 22, 35, 228, 185, 243, 215, 52, 242, 169, 55, 182, 98, 218, 180, 28, 7, 236, 252, 118, 54, 251, 48, 253,
    104, 122, 55, 166, 64, 101, 218, 240, 59, 161, 224, 113, 162, 1, 189, 77, 171, 114, 40, 251, 115, 129, 96, 113, 34, 74, 203, 15, 206, 121, 150, 105,
    56, 205, 76, 151, 202, 169, 92, 157, 204, 98, 130, 18, 244, 137, 103, 135, 103, 115, 236, 81, 26, 194, 162, 36, 2, 29, 55, 57, 155, 85, 239, 162,
    96, 237, 130, 171, 64, 120, 11, 188, 91, 88, 10, 95, 98, 96, 248, 8, 49, 56, 216, 36, 105, 107, 3, 150, 37, 166, 96, 134, 183, 178, 162, 64,
    7, 172, 237, 233, 146, 158, 47, 238, 133, 96, 130, 83, 23, 82, 147, 6, 164, 38, 89, 176, 101, 1, 14, 26, 193, 70, 216, 71, 94, 190, 124, 153,
    79, 89, 214, 185, 114, 177, 15, 126, 103, 93, 133, 78, 102, 38, 215, 135, 245, 193, 166, 133, 128, 79, 96, 98, 121, 245, 242, 146, 5, 162, 130, 129,
    16, 91, 173, 150, 209, 229, 88, 65, 253, 108, 196, 15, 96, 206, 153, 248, 169, 243, 190, 97, 21, 9, 103, 41, 229, 174, 196, 87, 26, 253, 4, 181,
    23, 153, 136, 149, 5, 134, 163, 58, 61, 149, 87, 147, 252, 75, 46, 62, 135, 28, 150, 186, 184, 218, 56, 157, 220, 99, 202, 218, 249, 63, 167, 150,
    130, 227, 114, 159, 226, 40, 27, 98, 96, 93, 169, 138, 120, 51, 255, 74, 85, 156, 253, 179, 84, 241, 146, 212, 114, 93, 200, 232, 149, 154, 57, 59,
    251, 246, 154, 249, 22, 83, 232, 127, 129, 130, 190, 126, 70, 249, 143, 154, 81, 25, 210, 31, 80, 55, 135, 212, 32, 184, 26, 126, 165, 33, 129, 183,
    110, 167, 204, 27, 14, 130, 63, 133, 136, 123, 15, 147, 153, 224, 135, 216, 228, 96, 95, 207, 110, 154, 82, 220, 163, 77, 204, 121, 244, 110, 137, 39,
    47, 48, 227, 36, 202, 60, 40, 119, 194, 60, 81, 65, 76, 165, 81, 43, 87, 26, 149, 249, 93, 101, 144, 98, 171, 128, 26, 184, 204, 146, 215, 146,
    224, 156, 157, 2, 53, 121, 39, 128, 63, 25, 199, 159, 105, 20, 64, 146, 15, 249, 6, 107, 105, 144, 126, 93, 49, 133, 5, 171, 167, 50, 234, 76,
    129, 2, 10, 57, 171, 236, 245, 50, 2, 254, 102, 61, 199, 92, 132, 157, 66, 100, 90, 101, 223, 200, 25, 120, 57, 235, 206, 101, 175, 231, 89, 112,
    158, 194, 115, 104, 54, 189, 191, 40, 237, 61, 138, 34, 107, 47, 192, 78, 73, 173, 245, 159, 205, 86, 51, 193, 109, 32, 71, 95, 39, 127, 38, 6,
    185, 32, 122, 93, 36, 138, 207, 181, 231, 184, 170, 240, 222, 3, 98, 241, 78, 204, 136, 78, 134, 184, 81, 181, 188, 173, 181, 143, 211, 94, 11, 246,
    26, 200, 240, 255, 107, 185, 149, 169, 150, 13, 91, 211, 4, 160, 96, 163, 97, 198, 159, 193, 215, 32, 37, 198, 132, 126, 152, 118, 65, 38, 71, 163,
    91, 106, 110, 194, 16, 82, 115, 6, 200, 160, 116, 9, 138, 35, 16, 176, 142, 233, 58, 59, 0, 82, 13, 109, 145, 206, 144, 231, 152, 192, 236, 196,
    179, 226, 24, 247, 52, 228, 143, 141, 107, 223, 120, 123, 194, 82, 101, 156, 224, 16, 152, 200, 218, 242, 173, 37, 251, 66, 222, 191, 125, 199, 243, 238,
    239, 191, 219, 186, 190, 19, 108, 155, 81, 16, 74, 81, 64, 206, 14, 25, 177, 57, 231, 181, 176, 7, 203, 228, 4, 54, 64, 103, 218, 174, 47, 165,
    141, 169, 116, 50, 10, 145, 215, 43, 164, 169, 14, 54, 45, 180, 113, 21, 133, 188, 145, 19, 231, 2, 9, 143, 84, 74, 106, 41, 167, 18, 9, 59,
    216, 248, 9, 198, 182, 98, 227, 60, 178, 124, 123, 69, 99, 51, 237, 213, 148, 189, 81, 28, 198, 242, 166, 6, 207, 47, 228, 204, 216, 246, 168, 21,
    169, 181, 122, 144, 135, 227, 124, 228, 48, 104, 101, 190, 117, 101, 131, 225, 207, 11, 72, 8, 138, 6, 169, 179, 35, 129, 178, 31, 213, 1, 20, 118,
    183, 229, 85, 187, 172, 242, 79, 46, 238, 64, 43, 163, 175, 11, 250, 16, 211, 135, 253, 145, 229, 14, 55, 241, 234, 195, 126, 61, 15, 96, 143, 250,
    16, 241, 165, 60, 179, 16, 87, 133, 114, 206, 50, 229, 200, 171, 215, 2, 207, 42, 221, 207, 84, 73, 10, 152, 109, 144, 242, 82, 134, 97, 5, 157,
    196, 133, 57, 6, 218, 165, 193, 130, 47, 150, 247, 171, 67, 49, 33, 79, 9, 254, 254, 145, 24, 168, 20, 192, 138, 75, 224, 240, 43, 208, 192, 39,
    61, 69, 37, 45, 237, 119, 108, 45, 251, 22, 44, 126, 11, 246, 84, 230, 175, 88, 255, 104, 66, 161, 52, 94, 173, 226, 57, 181, 58, 55, 160, 210,
    246, 8, 200, 15, 54, 250, 18, 173, 237, 138, 70, 176, 77, 222, 174, 172, 164, 74, 19, 7, 213, 150, 150, 179, 164, 73, 252, 233, 36, 132, 136, 23,
    57, 238, 201, 117, 189, 60, 245, 24, 28, 195, 164, 238, 146, 81, 196, 71, 80, 0, 23, 199, 49, 172, 131, 91, 242, 9, 184, 184, 110, 200, 136, 74,
    158, 142, 167, 35, 146, 156, 176, 220, 52, 144, 123, 54, 12, 63, 129, 183, 71, 54, 254, 234, 195, 255, 65, 197, 235, 1, 148, 60, 187, 36, 27, 95,
    28, 216, 170, 61, 254, 1, 10, 146, 97, 161, 187, 46, 251, 67, 137, 108, 252, 68, 178, 101, 165, 150, 200, 198, 247, 144, 5, 151, 125, 154, 180, 187,
    227, 210, 238, 142, 147, 181, 159, 72, 214, 62, 78, 214, 190, 135, 108, 255, 105, 84, 251, 71, 137, 246, 143, 211, 28, 60, 141, 230, 224, 40, 205, 193,
    81, 154, 121, 184, 18, 139, 122, 97, 141, 248, 145, 37, 31, 98, 11, 133, 31, 31, 192, 16, 172, 52, 50, 55, 213, 125, 42, 103, 203, 13, 139, 80,
    114, 226, 47, 141, 227, 12, 125, 205, 92, 205, 167, 251, 189, 195, 202, 129, 133, 69, 67, 12, 222, 27, 47, 169, 21, 82, 162, 10, 96, 180, 241, 107,
    10, 129, 194, 38, 30, 166, 246, 85, 67, 75, 167, 21, 252, 88, 88, 146, 17, 219, 30, 44, 164, 1
Download .txt
gitextract_b33bnoq0/

├── .gitattributes
├── 3D_Printed_Cases/
│   ├── Adafruit_QT_Py/
│   │   ├── Adafruit_QT_Py_bottom.stl
│   │   ├── Adafruit_QT_Py_top.stl
│   │   └── README.md
│   ├── DevKitM_1/
│   │   ├── DevKitM_1_bottom.stl
│   │   ├── DevKitM_1_top.stl
│   │   └── README.md
│   ├── ESP32_S2_Saola_1/
│   │   ├── ESP32_S2_Saola_1_bottom.stl
│   │   ├── ESP32_S2_Saola_1_top.stl
│   │   └── README.md
│   ├── LILYGO_TTGO_T8_TF_Card_Slot/
│   │   ├── LILYGO_TTGO_T8_TF_Card_Slot_bottom.stl
│   │   ├── LILYGO_TTGO_T8_TF_Card_Slot_top.stl
│   │   └── README.md
│   ├── LILYGO_TTGO_T8_WOOR/
│   │   ├── LILYGO_TTGO_T8_WOOR_bottom.stl
│   │   ├── LILYGO_TTGO_T8_WOOR_top.stl
│   │   └── README.md
│   ├── NodeMCU_32/
│   │   ├── NodeMCU_32_bottom.stl
│   │   ├── NodeMCU_32_top.stl
│   │   └── README.md
│   ├── README.md
│   ├── S3_DevKitC_1/
│   │   ├── README.md
│   │   ├── S3_DevKitC_1_bottom.stl
│   │   └── S3_DevKitC_1_top.stl
│   ├── UM_FeatherS2/
│   │   ├── README.md
│   │   ├── UM_FeatherS2_bottom.stl
│   │   └── UM_FeatherS2_top.stl
│   ├── UM_TinyS2/
│   │   ├── README.md
│   │   ├── UM_TinyS2_bottom.stl
│   │   └── UM_TinyS2_top.stl
│   └── Wemos_S2_Mini/
│       ├── README.md
│       ├── S2_Mini_By_Doyle4.stl
│       ├── Wemos_S2_Mini_bottom.stl
│       └── Wemos_S2_Mini_top.stl
├── ESP32_Server_900u/
│   ├── ESP32_Server_900u.ino
│   ├── Loader.h
│   ├── Pages.h
│   ├── exfathax.h
│   ├── fan.h
│   ├── goldhen.h
│   └── jzip.h
├── ESP32_Server_900u.code-workspace
├── ESP32_Server_900u_HTTPS/
│   ├── ESP32_Server_900u_HTTPS.ino
│   ├── Loader.h
│   ├── Pages.h
│   ├── README.md
│   ├── exfathax.h
│   ├── fan.h
│   ├── goldhen.h
│   └── jzip.h
├── README.md
├── bin2h/
│   ├── README.md
│   ├── bin2h.py
│   ├── bin2h_exe.bat
│   └── bin2h_python.bat
└── esplib_mod/
    ├── README.md
    ├── boards.txt
    └── partitions/
        ├── app1M_nota_spiffs14M_16MB.csv
        ├── app1M_spiffs13M_16MB.csv
        ├── app2M_nota_spiffs13M_16MB.csv
        ├── app2M_spiffs11M_16MB.csv
        ├── app3M_nota_spiffs12M_16MB.csv
        └── app3M_spiffs9M_16MB.csv
Condensed preview — 62 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,605K chars).
[
  {
    "path": ".gitattributes",
    "chars": 66,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": "3D_Printed_Cases/Adafruit_QT_Py/README.md",
    "chars": 134,
    "preview": "# Adafruit QT Py\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/Adafruit_QT_Py/Adafru"
  },
  {
    "path": "3D_Printed_Cases/DevKitM_1/README.md",
    "chars": 118,
    "preview": "# DevKitM-1\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/DevKitM_1/DevKitM_1.jpg>"
  },
  {
    "path": "3D_Printed_Cases/ESP32_S2_Saola_1/README.md",
    "chars": 139,
    "preview": "# ESP32-S2-Saola-1\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/ESP32_S2_Saola_1/ES"
  },
  {
    "path": "3D_Printed_Cases/LILYGO_TTGO_T8_TF_Card_Slot/README.md",
    "chars": 172,
    "preview": "# LILYGO-TTGO-T8-TF-Card-Slot\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/LILYGO_T"
  },
  {
    "path": "3D_Printed_Cases/LILYGO_TTGO_T8_WOOR/README.md",
    "chars": 148,
    "preview": "# LILYGO-TTGO-T8-WOOR\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/LILYGO_TTGO_T8_W"
  },
  {
    "path": "3D_Printed_Cases/NodeMCU_32/README.md",
    "chars": 163,
    "preview": "# NodeMCU-32 ESP32(38 pin)\n\nBoard Size: 54.8mm x 28mm\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3"
  },
  {
    "path": "3D_Printed_Cases/README.md",
    "chars": 1560,
    "preview": "# 3D Printed Cases\n\n<br>\n\ni have created stl files to 3d print cases for the following boards.\n\n## ESP32-S2 Boards\n\n<a h"
  },
  {
    "path": "3D_Printed_Cases/S3_DevKitC_1/README.md",
    "chars": 127,
    "preview": "# S3-DevKitC-1\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/S3_DevKitC_1/S3_DevKitC"
  },
  {
    "path": "3D_Printed_Cases/UM_FeatherS2/README.md",
    "chars": 128,
    "preview": "# UM FeatherS2\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/UM_FeatherS2/UM_Feather"
  },
  {
    "path": "3D_Printed_Cases/UM_TinyS2/README.md",
    "chars": 119,
    "preview": "# UM TinyS2\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/UM_TinyS2/UM_TinyS2.jpg>\n"
  },
  {
    "path": "3D_Printed_Cases/Wemos_S2_Mini/README.md",
    "chars": 485,
    "preview": "# Wemos S2 Mini\n\n<img src=https://github.com/stooged/ESP32-Server-900u/blob/main/3D_Printed_Cases/Wemos_S2_Mini/Wemos_S2"
  },
  {
    "path": "ESP32_Server_900u/ESP32_Server_900u.ino",
    "chars": 43986,
    "preview": "#include <FS.h>\n#include \"WiFi.h\"\n#include \"ESPAsyncWebServer.h\"\n#include \"esp_task_wdt.h\"\n#include <DNSServer.h>\n#inclu"
  },
  {
    "path": "ESP32_Server_900u/Loader.h",
    "chars": 241328,
    "preview": "#if USBCONTROL | defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)\n#if PSFREE\nstatic const uint8_t"
  },
  {
    "path": "ESP32_Server_900u/Pages.h",
    "chars": 38818,
    "preview": "#if USBCONTROL | defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)\nstatic const uint8_t index_gz[]"
  },
  {
    "path": "ESP32_Server_900u/exfathax.h",
    "chars": 3001,
    "preview": "#if defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)\nuint8_t exfathax[5][512] = {\n  { 0, 0, 0, 0,"
  },
  {
    "path": "ESP32_Server_900u/fan.h",
    "chars": 26128,
    "preview": "#if FANMOD\nstatic const uint8_t fan[] PROGMEM = {\n  233, 150, 0, 0, 0, 243, 15, 30, 250, 72, 139, 71, 8, 185, 130, 0, 0,"
  },
  {
    "path": "ESP32_Server_900u/goldhen.h",
    "chars": 1167194,
    "preview": "#if INTHEN\n#define INTHEN_NAME \"GoldHEN v2.3\"\nstatic const uint8_t goldhen_gz[] PROGMEM = {\n    31, 139, 8, 8, 67, 32, 1"
  },
  {
    "path": "ESP32_Server_900u/jzip.h",
    "chars": 132552,
    "preview": "static const uint8_t jzip_gz[] PROGMEM = {\n  31, 139, 8, 8, 28, 227, 18, 98, 0, 11, 106, 122, 105, 112, 46, 106, 115, 0,"
  },
  {
    "path": "ESP32_Server_900u.code-workspace",
    "chars": 76,
    "preview": "{\n\t\"folders\": [\n\t\t{\n\t\t\t\"path\": \"ESP32_Server_900u\"\n\t\t}\n\t],\n\t\"settings\": {}\n}"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/ESP32_Server_900u_HTTPS.ino",
    "chars": 46637,
    "preview": "#include <FS.h>\n#include \"WiFi.h\"\n#include \"ESPAsyncWebServer.h\"\n#include \"esp_task_wdt.h\"\n#include <DNSServer.h>\n#inclu"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/Loader.h",
    "chars": 241328,
    "preview": "#if USBCONTROL | defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)\n#if PSFREE\nstatic const uint8_t"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/Pages.h",
    "chars": 38818,
    "preview": "#if USBCONTROL | defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)\nstatic const uint8_t index_gz[]"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/README.md",
    "chars": 250,
    "preview": "## Libraries\n\nthe variant requires <b><a href=https://github.com/stooged/esp32_https_server>ESP32 HTTPS Server</a></b> s"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/exfathax.h",
    "chars": 3001,
    "preview": "#if defined(CONFIG_IDF_TARGET_ESP32S2) | defined(CONFIG_IDF_TARGET_ESP32S3)\nuint8_t exfathax[5][512] = {\n  { 0, 0, 0, 0,"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/fan.h",
    "chars": 26128,
    "preview": "#if FANMOD\nstatic const uint8_t fan[] PROGMEM = {\n  233, 150, 0, 0, 0, 243, 15, 30, 250, 72, 139, 71, 8, 185, 130, 0, 0,"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/goldhen.h",
    "chars": 1167194,
    "preview": "#if INTHEN\n#define INTHEN_NAME \"GoldHEN v2.3\"\nstatic const uint8_t goldhen_gz[] PROGMEM = {\n    31, 139, 8, 8, 67, 32, 1"
  },
  {
    "path": "ESP32_Server_900u_HTTPS/jzip.h",
    "chars": 132552,
    "preview": "static const uint8_t jzip_gz[] PROGMEM = {\n  31, 139, 8, 8, 28, 227, 18, 98, 0, 11, 106, 122, 105, 112, 46, 106, 115, 0,"
  },
  {
    "path": "README.md",
    "chars": 9535,
    "preview": "# ESP32 Server 9.00u\n\n<br>\n\nThis is a project designed for the <a href=https://www.espressif.com/en/products/socs/esp32-"
  },
  {
    "path": "bin2h/README.md",
    "chars": 468,
    "preview": "# Bin 2 H\n\nthis tool allows you to generate the `goldhen.h` file from the `goldhen.bin` file.\n\nyou just drag and drop th"
  },
  {
    "path": "bin2h/bin2h.py",
    "chars": 1112,
    "preview": "#!/usr/bin/python3\nimport os\nimport sys\nimport gzip\ntry:filename = sys.argv[1]\nexcept:sys.exit(\".bin file required\\n\\nEx"
  },
  {
    "path": "bin2h/bin2h_exe.bat",
    "chars": 47,
    "preview": "set binpath=%~1\ncd /d %~dp0\nbin2h.exe %binpath%"
  },
  {
    "path": "bin2h/bin2h_python.bat",
    "chars": 55,
    "preview": "set binpath=%~1\ncd /d %~dp0\npython bin2h.py \"%binpath%\""
  },
  {
    "path": "esplib_mod/README.md",
    "chars": 1413,
    "preview": "# ESP32 Partition Modification\n\n\nthis is for the 16MB <a href=https://feathers2.io/>FeatherS2</a> board with 16mb of fla"
  },
  {
    "path": "esplib_mod/boards.txt",
    "chars": 1221116,
    "preview": "# Official Espressif options\nmenu.UploadSpeed=Upload Speed\nmenu.USBMode=USB Mode\nmenu.CDCOnBoot=USB CDC On Boot\nmenu.MSC"
  },
  {
    "path": "esplib_mod/partitions/app1M_nota_spiffs14M_16MB.csv",
    "chars": 245,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,"
  },
  {
    "path": "esplib_mod/partitions/app1M_spiffs13M_16MB.csv",
    "chars": 289,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,"
  },
  {
    "path": "esplib_mod/partitions/app2M_nota_spiffs13M_16MB.csv",
    "chars": 245,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,"
  },
  {
    "path": "esplib_mod/partitions/app2M_spiffs11M_16MB.csv",
    "chars": 289,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,"
  },
  {
    "path": "esplib_mod/partitions/app3M_nota_spiffs12M_16MB.csv",
    "chars": 245,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,"
  },
  {
    "path": "esplib_mod/partitions/app3M_spiffs9M_16MB.csv",
    "chars": 288,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\nnvs,      data, nvs,     0x9000,  0x5000,\notadata,  data, ota,     0xe000,"
  }
]

// ... and 21 more files (download for full content)

About this extraction

This page contains the full source code of the stooged/ESP32-Server-900u GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 62 files (4.3 MB), approximately 1.1M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!