From e7fd0006360d75c5a24fd92dea219f1d7257a2f8 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Tue, 22 Nov 2022 20:07:49 +0000 Subject: [PATCH 01/27] Work in progress on building ES8388Source from es8388arduino library --- platformio.ini | 2 + usermods/audioreactive/audio_reactive.h | 7 ++++ usermods/audioreactive/audio_source.h | 53 +++++++++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/platformio.ini b/platformio.ini index 3ba5c7c6..6c3da961 100644 --- a/platformio.ini +++ b/platformio.ini @@ -559,6 +559,8 @@ build_flags_min = lib_deps_min = https://github.com/kosme/arduinoFFT#develop @ 1.9.2 ; used for USERMOD_AUDIOREACTIVE + https://github.com/netmindz/es8388arduino.git @ 0.0.1 ; used for USERMOD_AUDIOREACTIVE ES8388 source + ; monitor_filters = esp32_exception_decoder ; used to show crash details build_flags_max = diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index d96a6fb4..ff2f7f66 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -1220,6 +1220,13 @@ class AudioReactive : public Usermod { if (audioSource) audioSource->initialize(i2swsPin, i2ssdPin); break; #endif + case 6: + DEBUGSR_PRINTLN(F("AR: ES8388 Source")); + audioSource = new ES8388Source(SAMPLE_RATE, BLOCK_SIZE, sdaPin, sclPin); + delay(100); + if (audioSource) audioSource->initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); + break; + #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S3) // ADC over I2S is only possible on "classic" ESP32 case 0: diff --git a/usermods/audioreactive/audio_source.h b/usermods/audioreactive/audio_source.h index e51b2671..7adc9a69 100644 --- a/usermods/audioreactive/audio_source.h +++ b/usermods/audioreactive/audio_source.h @@ -15,6 +15,7 @@ #else #define SRate_t int #endif +#include "ES8388.h" //#include //#include @@ -437,6 +438,58 @@ public: int8_t pin_ES7243_SCL; }; +class ES8388Source : public I2SSource { + private: + + void _es8388InitAdc() { + if (!es8388.init()) Serial.println("Init Fail"); + es8388.inputSelect(IN2); + es8388.setInputGain(8); + es8388.outputSelect(OUT2); + es8388.setOutputVolume(12); + es8388.mixerSourceSelect(MIXADC, MIXADC); + es8388.mixerSourceControl(DACOUT); + uint8_t *reg; + for (uint8_t i = 0; i < 53; i++) { + reg = es8388.readAllReg(); + Serial.printf("Reg-%02d = 0x%02x\r\n", i, reg[i]); + } + } + +public: + ES8388Source(int sampleRate, int blockSize, int sdaPin, int sclPin) : + I2SSource(sampleRate, blockSize) { + _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; + pin_ES8388_SDA = sdaPin; + pin_ES8388_SCL = sclPin; + }; + + void initialize(int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin) { + // Reserve SDA and SCL pins of the I2C interface + if (!pinManager.allocatePin(pin_ES8388_SDA, true, PinOwner::HW_I2C) || + !pinManager.allocatePin(pin_ES8388_SCL, true, PinOwner::HW_I2C)) { + return; + } + + _es8388InitAdc(); + I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin); + } + + void deinitialize() { + // Release SDA and SCL pins of the I2C interface + pinManager.deallocatePin(pin_ES8388_SDA, PinOwner::HW_I2C); + pinManager.deallocatePin(pin_ES8388_SCL, PinOwner::HW_I2C); + I2SSource::deinitialize(); + } + + private: + int8_t pin_ES8388_SDA; + int8_t pin_ES8388_SCL; + ES8388 es8388 = ES8388(pin_ES8388_SDA, pin_ES8388_SCL, 400000); +}; + + + #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S3) // ADC over I2S is only availeable in "classic" ESP32 From 69ed8084a19b53e21e7120a99528df9543fd464e Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Tue, 22 Nov 2022 20:12:51 +0000 Subject: [PATCH 02/27] Work in progress on building ES8388Source from es8388arduino library --- usermods/audioreactive/audio_source.h | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/usermods/audioreactive/audio_source.h b/usermods/audioreactive/audio_source.h index 7adc9a69..ee2ea7dd 100644 --- a/usermods/audioreactive/audio_source.h +++ b/usermods/audioreactive/audio_source.h @@ -443,17 +443,17 @@ class ES8388Source : public I2SSource { void _es8388InitAdc() { if (!es8388.init()) Serial.println("Init Fail"); - es8388.inputSelect(IN2); - es8388.setInputGain(8); - es8388.outputSelect(OUT2); - es8388.setOutputVolume(12); - es8388.mixerSourceSelect(MIXADC, MIXADC); - es8388.mixerSourceControl(DACOUT); - uint8_t *reg; - for (uint8_t i = 0; i < 53; i++) { - reg = es8388.readAllReg(); - Serial.printf("Reg-%02d = 0x%02x\r\n", i, reg[i]); - } + es8388.inputSelect(IN2); + es8388.setInputGain(8); + es8388.outputSelect(OUT2); + es8388.setOutputVolume(12); + es8388.mixerSourceSelect(MIXADC, MIXADC); + es8388.mixerSourceControl(DACOUT); + uint8_t *reg; + for (uint8_t i = 0; i < 53; i++) { + reg = es8388.readAllReg(); + Serial.printf("Reg-%02d = 0x%02x\r\n", i, reg[i]); + } } public: @@ -472,6 +472,11 @@ public: } _es8388InitAdc(); + // i2s + PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); + WRITE_PERI_REG(PIN_CTRL, 0xFFF0); + i2s_set_sample_rates(I2S_NUM_0, 16000); // 16000 further reduces distortion, retaining acceptable quality + I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin); } From 8d8153d3abcfd149cee69aedd26218acadf99b6b Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Tue, 22 Nov 2022 20:28:09 +0000 Subject: [PATCH 03/27] Add ES8388 as source option --- usermods/audioreactive/audio_reactive.h | 1 + 1 file changed, 1 insertion(+) diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index ff2f7f66..3dd46f29 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -1811,6 +1811,7 @@ class AudioReactive : public Usermod { #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) oappend(SET_F("addOption(dd,'Generic I2S PDM',5);")); #endif + oappend(SET_F("addOption(dd,'ES8388',6);")); oappend(SET_F("dd=addDropdown('AudioReactive','cfg:AGC');")); oappend(SET_F("addOption(dd,'Off',0);")); oappend(SET_F("addOption(dd,'Normal',1);")); From 0a8347fb746ac376a54fb1f545823a0c1f5eb3fc Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 27 Nov 2022 16:54:05 +0000 Subject: [PATCH 04/27] Further work in progress on ES8388 driver --- usermods/audioreactive/audio_source.h | 36 ++++++++++++++++++--------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/usermods/audioreactive/audio_source.h b/usermods/audioreactive/audio_source.h index c60a8c0f..2bcab435 100644 --- a/usermods/audioreactive/audio_source.h +++ b/usermods/audioreactive/audio_source.h @@ -489,17 +489,24 @@ class ES8388Source : public I2SSource { private: void _es8388InitAdc() { - if (!es8388.init()) Serial.println("Init Fail"); - es8388.inputSelect(IN2); + DEBUGSR_PRINTF("\nAR: _es8388InitAdc\n"); + + if (!es8388.init()) { + Serial.println("_es8388InitAdc init Fail\n"); + return; + } + es8388.inputSelect(IN2); // IN2 Line-In es8388.setInputGain(8); - es8388.outputSelect(OUT2); + es8388.outputSelect(OUT1); // OUT1 - Headphones es8388.setOutputVolume(12); es8388.mixerSourceSelect(MIXADC, MIXADC); es8388.mixerSourceControl(DACOUT); + es8388.setALCmode(MUSIC); + es8388.analogBypass(true); uint8_t *reg; for (uint8_t i = 0; i < 53; i++) { reg = es8388.readAllReg(); - Serial.printf("Reg-%02d = 0x%02x\r\n", i, reg[i]); + DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); } } @@ -509,22 +516,27 @@ public: _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; pin_ES8388_SDA = sdaPin; pin_ES8388_SCL = sclPin; + DEBUGSR_PRINTF("\nAR: ES8388Source\n"); }; - void initialize(int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin) { + void initialize(int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin, int8_t mclkPin, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) { + DEBUGSR_PRINTF("\nAR: ES8388Source initialize called\n"); // Reserve SDA and SCL pins of the I2C interface - if (!pinManager.allocatePin(pin_ES8388_SDA, true, PinOwner::HW_I2C) || - !pinManager.allocatePin(pin_ES8388_SCL, true, PinOwner::HW_I2C)) { + PinManagerPinType pins[2] = { { pin_ES8388_SDA, true }, { pin_ES8388_SCL, true } }; + if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) { + pinManager.deallocateMultiplePins(pins, 2, PinOwner::HW_I2C); + ERRORSR_PRINTF("\nAR: Failed to allocate ES8388 I2C pins: SDA=%d, SCL=%d\n", pin_ES8388_SDA, pin_ES8388_SCL); return; } _es8388InitAdc(); // i2s - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); - WRITE_PERI_REG(PIN_CTRL, 0xFFF0); - i2s_set_sample_rates(I2S_NUM_0, 16000); // 16000 further reduces distortion, retaining acceptable quality + // PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); + // WRITE_PERI_REG(PIN_CTRL, 0xFFF0); + // i2s_set_sample_rates(I2S_NUM_0, 22050); - I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin); + DEBUGSR_PRINTF("\nAR: ES8388Source calling I2SSource::initialize\n"); + I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); } void deinitialize() { @@ -537,7 +549,7 @@ public: private: int8_t pin_ES8388_SDA; int8_t pin_ES8388_SCL; - ES8388 es8388 = ES8388(pin_ES8388_SDA, pin_ES8388_SCL, 400000); + ES8388 es8388 = ES8388(18, 23, 400000); }; From 4e8974a69b2b5141bfa1b65bc6a691461ce29fb9 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 30 Mar 2023 23:59:38 +0200 Subject: [PATCH 05/27] pio: generic build env for ESP32-S2, and some cleanup --- platformio.ini | 96 +++++++++++++++++++++++++++++++++++-------------- wled00/wled.cpp | 50 ++++++++++++++++++++++++++ 2 files changed, 120 insertions(+), 26 deletions(-) diff --git a/platformio.ini b/platformio.ini index 844db9da..48c5c79b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -60,7 +60,8 @@ default_envs = esp32_pico_4MB_M esp32_4MB_PSRAM_S esp32S3_8MB_M - esp32s2_tinyUF2_PSRAM_M ;; experimental - only for adafruit -S2 boards with tinyUF2 bootloader !!! + ;; esp32s2_tinyUF2_PSRAM_S ;; experimental - only for adafruit -S2 boards with tinyUF2 bootloader !!! + esp32s2_PSRAM_M ;; experimental esp32c3dev_4MB_M ;; experimental esp32_4MB_V4_S ;; experimental esp32_16MB_V4_M ;; experimental @@ -1352,9 +1353,9 @@ board_build.flash_mode = qio ; RAM: [== ] 24.7% (used 80856 bytes from 327680 bytes) ; Flash: [======= ] 66.9% (used 1403489 bytes from 2097152 bytes) -;; MM max for Adafruit QT Py ESP32-S2 -> 4MB flash, PSRAM, and tinyUF2 bootloader +;; MM for Adafruit QT Py ESP32-S2 -> 4MB flash, PSRAM, and tinyUF2 bootloader ;; to ewowi - i'll optimize this entry later, as a few things can be inherited for sure. To softhack: sure ;-) -[env:esp32s2_tinyUF2_PSRAM_M] +[env:esp32s2_tinyUF2_PSRAM_S] extends = esp32_4MB_V4_S_base platform = ${esp32.platformV4} platform_packages = ${esp32.platformV4_packages} @@ -1365,27 +1366,25 @@ board_build.f_flash = 80000000L board_build.flash_mode = qio upload_speed = 256000 ;; 921600 build_unflags = ${common.build_unflags} - -D USERMOD_DALLASTEMPERATURE ;; disabled because it hangs during usermod setup on -S2 (autodetect broken?) - -D USE_ALT_DISPLAY ;; four line display seems to have problems with I2C - it hangs during usermod setup - -D USERMOD_FOUR_LINE_DISPLAY ;; see above - -D USERMOD_ROTARY_ENCODER_UI ;; see above + -D USERMOD_DALLASTEMPERATURE ;; disabled because it hangs during usermod setup on -S3 (autodetect broken?) -D WLED_ENABLE_DMX ;; disabled because it does not work with ESP-IDF 4.4.x (buggy driver in SparkFunDMX) build_flags = ${common.build_flags} ${esp32s2.build_flags} ; ${Debug_Flags.build_flags} ;ewowi: enabling debug causes Error: The program size (1463330 bytes) is greater than maximum allowed (1441792 bytes) -D WLED_WATCHDOG_TIMEOUT=0 -D CONFIG_ASYNC_TCP_USE_WDT=0 - ${common_mm.build_flags_S} ${common_mm.build_flags_M} + ${common_mm.build_flags_S} -Wno-misleading-indentation -Wno-format-truncation - -D WLED_RELEASE_NAME=esp32S2_4MB_UF2_M + -D WLED_RELEASE_NAME=esp32S2_4MB_UF2_S -DARDUINO_USB_CDC_ON_BOOT=1 ;; mandatory, otherwise USB does not work!! -D WLED_DISABLE_ADALIGHT ;; disables serial protocols when using CDC USB (Serial RX will receive junk commands, unless its pulled down by resistor) -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 -D SERVERNAME='"WLED-S2"' -D WLED_USE_PSRAM - -D WLED_DISABLE_INFRARED ;; save flash space - -D WLED_DISABLE_ALEXA ;; save flash space - -D WLED_DISABLE_HUESYNC ;; save flash space - -D WLED_DISABLE_LOXONE ;; save flash space + -D WLED_DISABLE_LOXONE ;; FLASH 1272 bytes + -D WLED_DISABLE_HUESYNC ;; RAM 122 bytes; FLASH 6308 bytes + -D WLED_DISABLE_ALEXA ;; RAM 116 bytes; FLASH 13524 bytes + ; -D WLED_DISABLE_MQTT ;; RAM 216 bytes; FLASH 16496 bytes + -D WLED_DISABLE_INFRARED ;; RAM 136 bytes; FLASH 24492 bytes -D LEDPIN=39 ;; onboard neopixel LED. Attach your own LEDs to GPIO 7 or GPIO 6 -D BTNPIN=0 ;-D RLYPIN=6 @@ -1395,21 +1394,63 @@ build_flags = ${common.build_flags} ${esp32s2.build_flags} -D HW_PIN_CLOCKSPI=36 -D HW_PIN_MISOSPI=37 -D AUDIOPIN=-1 - -D SR_DMTYPE=1 - -D I2S_SDPIN=9 - -D I2S_WSPIN=8 - -D I2S_CKPIN=17 - -D MCLK_PIN=18 + -D SR_DMTYPE=1 -D I2S_SDPIN=9 -D I2S_WSPIN=8 -D I2S_CKPIN=17 -D MCLK_PIN=18 ;-D STATUSLED=-1 -D WLED_USE_MY_CONFIG -lib_deps = ${env.lib_deps} ${esp32s2.lib_deps} ${common_mm.lib_deps_S} ${common_mm.lib_deps_V4_M} -lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation +lib_deps = ${env.lib_deps} ${esp32s2.lib_deps} ${common_mm.lib_deps_S} +lib_ignore = + IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation + OneWire ; not needed as we don't include USERMOD_DALLASTEMPERATURE monitor_filters = esp32_exception_decoder -; RAM: [=== ] 25.4% (used 83324 bytes from 327680 bytes) -; Flash: [==========] 98.6% (used 1421778 bytes from 1441792 bytes) +; RAM: [=== ] 25.1% (used 82348 bytes from 327680 bytes) +; Flash: [==========] 95.8% (used 1381742 bytes from 1441792 bytes) -;; MM max environment for ESP32-C3 -> 4MB flash, no PSRAM -;; to ewowi - i'll optimize this entry later ;-) really, I mean +;; MM environment for generic ESP32-S2, with PSRAM, 4MB flash (300kB filesystem to have more program space) +[env:esp32s2_PSRAM_M] +extends = esp32_4MB_V4_M_base +platform = espressif32@~5.2.0 ;; more stable on -S2 than 5.1.1 +platform_packages = + +board = lolin_s2_mini +board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions) +board_build.flash_mode = dio +upload_speed = 256000 ;; 921600 +build_unflags = ${common.build_unflags} + -DARDUINO_USB_CDC_ON_BOOT=1 + -D USERMOD_DALLASTEMPERATURE ;; disabled because it hangs during usermod setup on -S3 (autodetect broken?) + -D WLED_ENABLE_DMX ;; disabled because it does not work with ESP-IDF 4.4.x (buggy driver in SparkFunDMX) +build_flags = ${common.build_flags} ${esp32s2.build_flags} + ${Debug_Flags.build_flags} + -D WLED_WATCHDOG_TIMEOUT=0 -D CONFIG_ASYNC_TCP_USE_WDT=0 + ${common_mm.build_flags_S} ${common_mm.build_flags_M} + -Wno-misleading-indentation -Wno-format-truncation + -D WLED_RELEASE_NAME=esp32S2_4MB_M + -DARDUINO_USB_CDC_ON_BOOT=0 + -DARDUINO_USB_MSC_ON_BOOT=0 -DARDUINO_USB_DFU_ON_BOOT=0 + -D WLED_DISABLE_ADALIGHT ;; disables serial protocols, as the board onl has CDC USB + -D WLED_USE_PSRAM -DBOARD_HAS_PSRAM + -D WLED_DISABLE_INFRARED ;; save flash space + -D WLED_DISABLE_ALEXA ;; save flash space + -D WLED_DISABLE_HUESYNC ;; save flash space + -D WLED_DISABLE_LOXONE ;; save flash space + -D LEDPIN=16 + -D BTNPIN=-1 -D RLYPIN=-1 -D IRPIN=-1 + -D HW_PIN_SCL=40 -D HW_PIN_SDA=41 + -D HW_PIN_MOSISPI=35 ;WLEDMM renamed from HW_PIN_DATASPI + -D HW_PIN_CLOCKSPI=36 + -D HW_PIN_MISOSPI=37 + -D AUDIOPIN=-1 + -D SR_DMTYPE=1 -D I2S_SDPIN=9 -D I2S_WSPIN=8 -D I2S_CKPIN=17 -D MCLK_PIN=18 + -D WLED_USE_MY_CONFIG +lib_deps = ${env.lib_deps} ${esp32s2.lib_deps} ${common_mm.lib_deps_S} ${common_mm.lib_deps_V4_M} +lib_ignore = + IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation + OneWire ; not needed as we don't include USERMOD_DALLASTEMPERATURE +monitor_filters = esp32_exception_decoder +; RAM: [== ] 22.9% (used 75068 bytes from 327680 bytes) +; Flash: [======== ] 78.3% (used 1487802 bytes from 1900544 bytes) + +;; MM environment for ESP32-C3 -> 4MB flash, no PSRAM [env:esp32c3dev_4MB_M] extends = esp32_4MB_V4_S_base ;platform = ${esp32.platformV4} @@ -1417,7 +1458,8 @@ extends = esp32_4MB_V4_S_base platform = espressif32@~5.2.0 ;; alternative platform, might help in case you experience bootloops due to corrupted flash filesystem platform_packages = board = esp32-c3-devkitm-1 -;board_build.partitions = tools/WLED_ESP32_2MB_noOTA.csv ;; for boards with 2MB flash only (like some Ai-Thinker ESP32-C3-12F models) +;board_build.partitions = tools/WLED_ESP32_4MB_256KB_FS.csv ;; 1.8MB firmware, 256KB filesystem (esptool erase_flash needed when changing from "standard WLED" partitions) +;board_build.partitions = tools/WLED_ESP32_2MB_noOTA.csv ;; use this for boards with 2MB flash (like some Ai-Thinker ESP32-C3-12F models) upload_speed = 256000 ;; 921600 build_unflags = ${common.build_unflags} @@ -1428,11 +1470,11 @@ build_unflags = ${common.build_unflags} -D WLED_ENABLE_DMX ;; disabled because it does not work with ESP-IDF 4.4.x (buggy driver in SparkFunDMX) build_flags = ${common.build_flags} ${esp32c3.build_flags} + ; -D WLED_DISABLE_OTA ;; OTA is not possible for boards with 2MB flash only (like some Ai-Thinker ESP32-C3-12F models) -D WLED_WATCHDOG_TIMEOUT=0 -D CONFIG_ASYNC_TCP_USE_WDT=0 ${common_mm.build_flags_S} ${common_mm.build_flags_M} -Wno-misleading-indentation -Wno-format-truncation -D WLED_RELEASE_NAME=esp32c3dev_4MB_M - ; -D WLED_DISABLE_OTA ;; OTA is not possible for boards with 2MB flash only (like some Ai-Thinker ESP32-C3-12F models) ; -DARDUINO_USB_CDC_ON_BOOT=1 ;; enable CDC USB -> needed for debugging over serial USB ; -D WLED_DISABLE_ADALIGHT ;; to disable serial protocols when using CDC USB (Serial RX will receive junk commands, unless its pulled down by resistor) -DARDUINO_USB_CDC_ON_BOOT=0 ;; disable CDC USB @@ -1452,6 +1494,8 @@ build_flags = ${common.build_flags} ${esp32c3.build_flags} lib_deps = ${env.lib_deps} ${esp32c3.lib_deps} ${common_mm.lib_deps_S} ${common_mm.lib_deps_V4_M} ;lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation ;monitor_filters = esp32_exception_decoder +; RAM: [== ] 23.1% (used 75620 bytes from 327680 bytes) +; Flash: [==========] 95.8% (used 1506216 bytes from 1572864 bytes) # ------------------------------------------------------------------------------ # custom board environments diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 3803c322..8fd64f2d 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -12,6 +12,56 @@ #include "../tools/ESP32-Chip_info.hpp" #endif + +// WLEDMM some buildenv sanity checks + +#ifdef ARDUINO_ARCH_ESP32 // ESP32 + #if !defined(ESP32) + #error please fix your build environment. ESP32 is not defined. + #endif + #if defined(ESP8266) || defined(ARDUINO_ARCH_ESP8266) + #error please fix your build environment. ESP32 and ESP8266 are both defined. + #endif + // only one of ARDUINO_ARCH_ESP32S2, ARDUINO_ARCH_ESP32S3, ARDUINO_ARCH_ESP32C3 allowed + #if defined(ARDUINO_ARCH_ESP32S3) && ( defined(ARDUINO_ARCH_ESP32S2) || defined(ARDUINO_ARCH_ESP32C3) ) + #error please fix your build environment. only one of ARDUINO_ARCH_ESP32S3, ARDUINO_ARCH_ESP32S2, ARDUINO_ARCH_ESP32C3 may be defined + #endif + #if defined(ARDUINO_ARCH_ESP32S2) && ( defined(ARDUINO_ARCH_ESP32S3) || defined(ARDUINO_ARCH_ESP32C3) ) + #error please fix your build environment. only one of ARDUINO_ARCH_ESP32S3, ARDUINO_ARCH_ESP32S2, ARDUINO_ARCH_ESP32C3 may be defined + #endif + #if defined(CONFIG_IDF_TARGET_ESP32) && ( defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3)) + #error please fix your build environment. only one CONFIG_IDF_TARGET may be defined + #endif + // make sure we have a supported CONFIG_IDF_TARGET_ + #if !defined(CONFIG_IDF_TARGET_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) + #error please fix your build environment. No supported CONFIG_IDF_TARGET was defined + #endif + #if CONFIG_IDF_TARGET_ESP32_SOLO || CONFIG_IDF_TARGET_ESP32SOLO + #warning ESP32 SOLO (single core) is not supported. + #endif + // only one of CONFIG_IDF_TARGET_ESP32, CONFIG_IDF_TARGET_ESP32S2, CONFIG_IDF_TARGET_ESP32S3, CONFIG_IDF_TARGET_ESP32C3 is allowed + #if defined(CONFIG_IDF_TARGET_ESP32) && ( defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3)) + #error please fix your build environment. only one CONFIG_IDF_TARGET may be defined + #endif + #if defined(CONFIG_IDF_TARGET_ESP32S3) && ( defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3)) + #error please fix your build environment. only one CONFIG_IDF_TARGET may be defined + #endif + #if defined(CONFIG_IDF_TARGET_ESP32C3) && ( defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32S2)) + #error please fix your build environment. only one CONFIG_IDF_TARGET may be defined + #endif + +#else // 8266 + #if !defined(ARDUINO_ARCH_ESP8266) && !defined(ARDUINO_ARCH_ESP8265) + #error please fix your build environment. Neither ARDUINO_ARCH_ESP8266 nor ARDUINO_ARCH_ESP32 are defined + #else + #if !defined(ESP8266) && !defined(ESP8265) + #error please fix your build environment. ESP8266 is not defined. + #endif + #endif +#endif +// WLEDMM end + + /* * Main WLED class implementation. Mostly initialization and connection logic */ From 292c4e25ba8985ba9205404d13f92cef8f597aa2 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 1 Apr 2023 22:13:46 +0200 Subject: [PATCH 06/27] small updates * colors.cpp: disable gamma calculation if CIE table mode is active (WLED_USE_CIE_BRIGHTNESS_TABLE) * fx.cpp: small improvement to FreqMap, and bugfix for effects that modify binNum / maxVol * pio: update for Line-In shield pins (final hardware version) --- platformio.ini | 13 +++++++++++-- wled00/FX.cpp | 15 +++++++++++++++ wled00/colors.cpp | 4 +++- wled00/wled.h | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/platformio.ini b/platformio.ini index 48c5c79b..df001a91 100644 --- a/platformio.ini +++ b/platformio.ini @@ -940,9 +940,16 @@ build_flags = -D SR_SQUELCH=10 -D SR_GAIN=40 -D SR_FREQ_PROF=7 ; SPM1423 specific [Shield_LineIn] +build_unflags = + -D BTNPIN=17 ;; remove - its in conflict with on-shield rotary + -D ENCODER_SW_PIN=5 ;; remove - its in conflict with on-shield rotary + -D BTNPIN=0 ;; remove - its in conflict with MCLK pin build_flags = - -D SR_DMTYPE=4 -D MCLK_PIN=0 -D I2S_SDPIN=25 -D I2S_WSPIN=15 -D I2S_CKPIN=14 ; for audio Line-In shield - -D SR_SQUELCH=2 -D SR_GAIN=40 -D SR_FREQ_PROF=1 ; CS5343 Line-In specific + -D BTNPIN=-1 + -D SR_DMTYPE=4 -D MCLK_PIN=0 -D I2S_SDPIN=26 -D I2S_WSPIN=25 -D I2S_CKPIN=27 ; for audio Line-In shield, final version + -D SR_LINE_DETECT=34 ; line-in plug insert detection sensor (future support) + -D SR_SQUELCH=8 -D SR_GAIN=40 -D SR_FREQ_PROF=1 ; CS5343 Line-In specific + -D ENCODER_DT_PIN=35 -D ENCODER_CLK_PIN=39 -D ENCODER_SW_PIN=17 ; on-shield rotary encoder [Debug_Flags] build_flags = @@ -1547,6 +1554,7 @@ build_flags = ${wemos_shield_esp32_4MB_M_base.build_flags} ${Shield_SPM1423.buil [env:wemos_shield_esp32_4MB_LineIn_M] extends = wemos_shield_esp32_4MB_M_base +build_unflags = ${common.build_unflags} ${Shield_LineIn.build_unflags} build_flags = ${wemos_shield_esp32_4MB_M_base.build_flags} ${Shield_LineIn.build_flags} -D WLED_RELEASE_NAME=wemos_shield_esp32_4MB_LineIn_M @@ -1602,6 +1610,7 @@ board_build.partitions = tools/WLED_ESP32_16MB.csv ;; WLED standard for [env:wemos_shield_esp32_16MB_LineIn_M] extends = wemos_shield_esp32_4MB_M_base +build_unflags = ${common.build_unflags} ${Shield_LineIn.build_unflags} build_flags = ${wemos_shield_esp32_4MB_M_base.build_flags} ${Shield_LineIn.build_flags} -D WLED_RELEASE_NAME=wemos_shield_esp32_16MB_LineIn_M board = esp32_16MB diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 9a66b74b..16853469 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6037,6 +6037,8 @@ uint16_t mode_ripplepeak(void) { // * Ripple peak. By Andrew Tuli SEGMENT.custom1 = *binNum; SEGMENT.custom2 = *maxVol * 2; } + if (SEGMENT.custom1 < 2) SEGMENT.custom1 = 2; // WLEDMM prevent stupid settings + if (SEGMENT.custom2 < 48) SEGMENT.custom1 = 48; // WLEDMM prevent stupid settings *binNum = SEGMENT.custom1; // Select a bin. *maxVol = SEGMENT.custom2 / 2; // Our volume comparator. @@ -6598,6 +6600,8 @@ uint16_t mode_puddlepeak(void) { // Puddlepeak. By Andrew Tuline. SEGMENT.custom1 = *binNum; SEGMENT.custom2 = *maxVol * 2; } + if (SEGMENT.custom1 < 2) SEGMENT.custom1 = 2; // WLEDMM prevent stupid settings + if (SEGMENT.custom2 < 48) SEGMENT.custom1 = 48; // WLEDMM prevent stupid settings *binNum = SEGMENT.custom1; // Select a bin. *maxVol = SEGMENT.custom2 / 2; // Our volume comparator. @@ -6794,9 +6798,17 @@ uint16_t mode_freqmap(void) { // Map FFT_MajorPeak to SEGLEN. uint16_t pixCol = (log10f(FFT_MajorPeak) - 1.78f) * 255.0f/(MAX_FREQ_LOG10 - 1.78f); // Scale log10 of frequency values to the 255 colour index. if (FFT_MajorPeak < 61.0f) pixCol = 0; // handle underflow +#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) + uint16_t bright = (int) (sqrtf(my_magnitude)*16.0f); // WLEDMM sqrt scaling, to make peaks more prominent +#else uint16_t bright = (int)my_magnitude; +#endif SEGMENT.setPixelColor(locn, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(SEGMENT.intensity+pixCol, false, PALETTE_SOLID_WRAP, 0), bright)); + if (SEGMENT.speed > 228) { // WLEDMM looks nice in 2D + SEGMENT.blur(5*(SEGMENT.speed - 224)); + SEGMENT.setPixelColor(locn, color_blend(SEGCOLOR(1), SEGMENT.color_from_palette(SEGMENT.intensity+pixCol, false, PALETTE_SOLID_WRAP, 0), bright)); + } return FRAMETIME; } // mode_freqmap() @@ -7110,6 +7122,9 @@ uint16_t mode_waterfall(void) { // Waterfall. By: Andrew Tulin SEGMENT.custom2 = *maxVol * 2; } + if (SEGMENT.custom1 < 2) SEGMENT.custom1 = 2; // WLEDMM prevent stupid settings + if (SEGMENT.custom2 < 48) SEGMENT.custom1 = 48; // WLEDMM prevent stupid settings + *binNum = SEGMENT.custom1; // Select a bin. *maxVol = SEGMENT.custom2 / 2; // Our volume comparator. diff --git a/wled00/colors.cpp b/wled00/colors.cpp index 8a4a4ebd..61457eba 100644 --- a/wled00/colors.cpp +++ b/wled00/colors.cpp @@ -326,7 +326,7 @@ static byte gammaT[256] = { // https://github.com/Aircoookie/WLED/issues/2767#issuecomment-1310961308 // unfortunately NepixelsBu has its own internal table, that kills low brightness values similar to the original WLED table. // see https://github.com/Makuna/NeoPixelBus/blob/master/src/internal/NeoGamma.h -static byte gammaT[256] = { +static const byte gammaT[256] = { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, @@ -354,9 +354,11 @@ uint8_t gamma8_cal(uint8_t b, float gamma) // re-calculates & fills gamma table void calcGammaTable(float gamma) { +#if !defined(WLED_USE_CIE_BRIGHTNESS_TABLE) // WLEDMM not possible when using the CIE table for (uint16_t i = 0; i < 256; i++) { gammaT[i] = gamma8_cal(i, gamma); } +#endif } // used for individual channel or brightness gamma correction diff --git a/wled00/wled.h b/wled00/wled.h index 92f4f53b..a6119316 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2303300 +#define VERSION 2303310 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG From 11a02bb81463b496abc82aaa8c8e49ecca8c110c Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 1 Apr 2023 23:21:02 +0200 Subject: [PATCH 07/27] DJLight upgrade * normal mode: similar to 0.13.x version * candy factory mode: produce more brighter colors --- wled00/FX.cpp | 39 +++++++++++++++++++++++++++++---------- wled00/wled.h | 2 +- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 16853469..b2c64012 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6734,6 +6734,7 @@ uint16_t mode_DJLight(void) { // Written by ??? Adapted by Wil um_data = simulateSound(SEGMENT.soundSim); } uint8_t *fftResult = (uint8_t*)um_data->u_data[2]; + float volumeSmth = *(float*)um_data->u_data[0]; if (SEGENV.call == 0) { SEGMENT.setUpLeds(); @@ -6744,23 +6745,41 @@ uint16_t mode_DJLight(void) { // Written by ??? Adapted by Wil if (SEGENV.aux0 != secondHand) { // Triggered millis timing. SEGENV.aux0 = secondHand; - //CRGB color = CRGB(fftResult[15]/2, fftResult[5]/2, fftResult[0]/2); // formula from 0.13.x (10Khz): R = 3880-5120, G=240-340, B=60-100 - //CRGB color = CRGB(fftResult[12]/2, fftResult[3]/2, fftResult[1]/2); // formula for 0.14.x (22Khz): R = 3015-3704, G=216-301, B=86-129 - // an attempt to get colors more balanced - CRGB color = CRGB(fftResult[11]/2 + fftResult[12]/4 + fftResult[14]/4, // red : 2412-3704 + 4479-7106 - fftResult[4]/2 + fftResult[3]/4, // green: 216-430 - fftResult[1]/4 + fftResult[2]/4); // blue: 86-216 + CRGB color = CRGB(0,0,0); + // color = CRGB(fftResult[15]/2, fftResult[5]/2, fftResult[0]/2); // formula from 0.13.x (10Khz): R = 3880-5120, G=240-340, B=60-100 + if (!SEGENV.check1) { + color = CRGB(fftResult[12]/2, fftResult[3]/2, fftResult[1]/2); // formula for 0.14.x (22Khz): R = 3015-3704, G=216-301, B=86-129 + } else { + // candy factory: an attempt to get more colors + color = CRGB(fftResult[11]/2 + fftResult[12]/4 + fftResult[14]/4, // red : 2412-3704 + 4479-7106 + fftResult[4]/2 + fftResult[3]/4, // green: 216-430 + fftResult[0]/4 + fftResult[1]/4 + fftResult[2]/4); // blue: 46-216 + if ((color.getLuma() < 96) && (volumeSmth >= 1.5f)) { // enhance "almost dark" pixels with yellow, based on not-yet-used channels + unsigned yello_g = (fftResult[5] + fftResult[6] + fftResult[7]) / 3; + unsigned yello_r = (fftResult[7] + fftResult[8] + fftResult[9] + fftResult[10]) / 4; + color.green += (uint8_t) yello_g / 2; + color.red += (uint8_t) yello_r / 2; + } + } + + if (volumeSmth < 1.0f) color = CRGB(0,0,0); // silence = black + // make colors less "pastel", by turning up color saturation in HSV space if (color.getLuma() > 32) { // don't change "dark" pixels CHSV hsvColor = rgb2hsv_approximate(color); - hsvColor.v = min(max(hsvColor.v, (uint8_t)48), (uint8_t)212); // 48 < brightness < 212 - hsvColor.s = max(hsvColor.s, (uint8_t)192); // turn up color saturation (> 192) + hsvColor.v = min(max(hsvColor.v, (uint8_t)48), (uint8_t)204); // 48 < brightness < 204 + if (SEGENV.check1) + hsvColor.s = max(hsvColor.s, (uint8_t)204); // candy factory mode: strongly turn up color saturation (> 192) + else + hsvColor.s = max(hsvColor.s, (uint8_t)108); // normal mode: turn up color saturation to avoid pastels color = hsvColor; } //if (color.getLuma() > 12) color.maximizeBrightness(); // for testing //SEGMENT.setPixelColor(mid, color.fadeToBlackBy(map(fftResult[4], 0, 255, 255, 4))); // 0.13.x fade -> 180hz-260hz - SEGMENT.setPixelColor(mid, color.fadeToBlackBy(map(fftResult[3], 0, 255, 255, 4))); // 0.14.x fade -> 216hz-301hz + uint8_t fadeVal = map(fftResult[3], 0, 255, 255, 4); // 0.14.x fade -> 216hz-301hz + if (SEGENV.check1) fadeVal = constrain(fadeVal, 0, 176); // "candy factory" mode - avoid complete fade-out + SEGMENT.setPixelColor(mid, color.fadeToBlackBy(fadeVal)); for (int i = SEGLEN - 1; i > mid; i--) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i-1)); // move to the left for (int i = 0; i < mid; i++) SEGMENT.setPixelColor(i, SEGMENT.getPixelColor(i+1)); // move to the right @@ -6768,7 +6787,7 @@ uint16_t mode_DJLight(void) { // Written by ??? Adapted by Wil return FRAMETIME; } // mode_DJLight() -static const char _data_FX_MODE_DJLIGHT[] PROGMEM = "DJ Light@Speed;;;1f;m12=2,si=0"; // Arc, Beatsin +static const char _data_FX_MODE_DJLIGHT[] PROGMEM = "DJ Light@Speed,,,,,Candy Factory;;;1f;m12=2,si=0"; // Arc, Beatsin //////////////////// diff --git a/wled00/wled.h b/wled00/wled.h index a6119316..49e13d7f 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2303310 +#define VERSION 2303321 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG From eead626dd59d3fa370d89a02de1ccaf591c152d2 Mon Sep 17 00:00:00 2001 From: Ewoud Date: Sun, 2 Apr 2023 13:22:38 +0200 Subject: [PATCH 08/27] 0.14.0-b15.21 release! --- package-lock.json | 4 +- package.json | 2 +- usermods/EXAMPLE_v2/usermod_v2_example.h | 44 +- usermods/multi_relay/usermod_multi_relay.h | 4 +- .../usermod_v2_weather/usermod_v2_weather.h | 3 +- wled00/data/index.js | 2 +- wled00/fcn_declare.h | 1 + wled00/html_other.h | 76 +- wled00/html_settings.h | 312 +-- wled00/html_ui.h | 2238 ++++++++--------- wled00/improv.cpp | 2 +- wled00/wled.h | 2 +- 12 files changed, 1350 insertions(+), 1340 deletions(-) diff --git a/package-lock.json b/package-lock.json index f0952038..97497117 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wled", - "version": "0.14.0-b2.20", + "version": "0.14.0-b15.21", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wled", - "version": "0.14.0-b2.20", + "version": "0.14.0-b15.21", "license": "ISC", "dependencies": { "clean-css": "^4.2.3", diff --git a/package.json b/package.json index 70e769a0..a3297fa4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.14.0-b2.20", + "version": "0.14.0-b15.21", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/usermods/EXAMPLE_v2/usermod_v2_example.h b/usermods/EXAMPLE_v2/usermod_v2_example.h index 43648b58..ba2ffc4e 100644 --- a/usermods/EXAMPLE_v2/usermod_v2_example.h +++ b/usermods/EXAMPLE_v2/usermod_v2_example.h @@ -20,15 +20,32 @@ * 2. Register the usermod by adding #include "usermod_filename.h" in the top and registerUsermod(new MyUsermodClass()) in the bottom of usermods_list.cpp */ +/* WLEDMM: move usermod variables to class. + +As of March 2023 this is work in progress, more variables will be moved in the future. +See Example v2, Temperature, MPU6050 and weather and fastled (rest to be done) as examples which has been converted using the steps below: + +Part 1 +- remove bool enabled = false/true (now default false) +- remove static const char _name[] and _enabled[] +- add constructor which calls superclass (temp?): XXXUsermod(const char *name, bool enabled):Usermod(name, enabled) {} +- replace _enabled with "enabled" +- remove const char PROGMEM init for _name[] and _enabled[] +Part 2 +- Remove bool initDone = false; +- addToConfig: replace createNestedObject with Usermod::addToConfig(root); JsonObject top = root[FPSTR(_name)]; +- readFromConfig: replace !top.isNull and enabled with bool configComplete = Usermod::readFromConfig(root);JsonObject top = root[FPSTR(_name)]; +Part 3 +- remove unsigned long lastTime = 0; //WLEDMM + +*/ + //class name. Use something descriptive and leave the ": public Usermod" part :) class MyExampleUsermod : public Usermod { private: // Private class members. You can declare variables and functions only accessible to your usermod here - bool enabled = false; - bool initDone = false; - unsigned long lastTime = 0; // set your config variables to their boot default value (this can also be done in readFromConfig() or a constructor if you prefer) bool testBool = false; @@ -41,28 +58,25 @@ class MyExampleUsermod : public Usermod { long testLong; int8_t testPins[2]; - // string that are used multiple time (this will save some flash memory) - static const char _name[]; - static const char _enabled[]; - - // any private methods should go here (non-inline methosd should be defined out of class) void publishMqtt(const char* state, bool retain = false); // example for publishing MQTT message public: + MyExampleUsermod(const char *name, bool enabled):Usermod(name, enabled) {} //WLEDMM + // non WLED related methods, may be used for data exchange between usermods (non-inline methods should be defined out of class) /** * Enable/Disable the usermod */ - inline void enable(bool enable) { enabled = enable; } + // inline void enable(bool enable) { enabled = enable; } /** * Get usermod enabled/disabled state */ - inline bool isEnabled() { return enabled; } + // inline bool isEnabled() { return enabled; } // in such case add the following to another usermod: // in private vars: @@ -222,8 +236,8 @@ class MyExampleUsermod : public Usermod { */ void addToConfig(JsonObject& root) { - JsonObject top = root.createNestedObject(FPSTR(_name)); - top[FPSTR(_enabled)] = enabled; + Usermod::addToConfig(root); JsonObject top = root[FPSTR(_name)]; //WLEDMM + //save these vars persistently whenever settings are saved top["great"] = userVar0; top["testBool"] = testBool; @@ -258,9 +272,7 @@ class MyExampleUsermod : public Usermod { // default settings values could be set here (or below using the 3-argument getJsonValue()) instead of in the class definition or constructor // setting them inside readFromConfig() is slightly more robust, handling the rare but plausible use case of single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed) - JsonObject top = root[FPSTR(_name)]; - - bool configComplete = !top.isNull(); + bool configComplete = Usermod::readFromConfig(root);JsonObject top = root[FPSTR(_name)]; //WLEDMM configComplete &= getJsonValue(top["great"], userVar0); configComplete &= getJsonValue(top["testBool"], testBool); @@ -386,8 +398,6 @@ class MyExampleUsermod : public Usermod { // add more strings here to reduce flash memory usage -const char MyExampleUsermod::_name[] PROGMEM = "ExampleUsermod"; -const char MyExampleUsermod::_enabled[] PROGMEM = "enabled"; // implementation of non-inline member methods diff --git a/usermods/multi_relay/usermod_multi_relay.h b/usermods/multi_relay/usermod_multi_relay.h index 6528687d..749b9c75 100644 --- a/usermods/multi_relay/usermod_multi_relay.h +++ b/usermods/multi_relay/usermod_multi_relay.h @@ -202,11 +202,11 @@ class MultiRelay : public Usermod { /** * Enable/Disable the usermod */ - inline void enable(bool enable) { enabled = enable; } + // inline void enable(bool enable) { enabled = enable; } /** * Get usermod enabled/disabled state */ - inline bool isEnabled() { return enabled; } + // inline bool isEnabled() { return enabled; } /** * switch relay on/off diff --git a/usermods/usermod_v2_weather/usermod_v2_weather.h b/usermods/usermod_v2_weather/usermod_v2_weather.h index 9bd256a4..2ed00424 100644 --- a/usermods/usermod_v2_weather/usermod_v2_weather.h +++ b/usermods/usermod_v2_weather/usermod_v2_weather.h @@ -94,7 +94,7 @@ uint16_t mode_2DWeather(void) { return FRAMETIME; } -static const char _data_FX_MODE_2DWEATHER[] PROGMEM = "Weather ☾@;!;!;2;pal=54"; //temperature palette +static const char _data_FX_MODE_2DWEATHER[] PROGMEM = "🌦Weather ☾@;!;!;2;pal=54"; //temperature palette //utility function, move somewhere else??? void epochToString(time_t time, char *timeString) { @@ -144,7 +144,6 @@ class WeatherUsermod : public Usermod { // strings to reduce flash memory usage (used more than twice) String apiKey = ""; //config var - unsigned long lastTime = 0; //will be used to download new forecast every hour char errorMessage[100] = ""; bool isConnected = false; //only call openweathermap if connected diff --git a/wled00/data/index.js b/wled00/data/index.js index 0c337ca7..50459b17 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -671,7 +671,7 @@ function populateInfo(i) if (i.ver.includes("0.14.1")) vcn = "Sitting Ducks"; // easter egg if (i.ver.includes("0.14.0")) vcn = "Lupo"; // check for MM versioning scheme if (i.ver.includes("0.14.0-b2.2")) vcn = "Sitting Ducks"; // early easter egg - if (i.ver.includes("0.14.0-b2.20")) vcn = "Lupo"; + if (i.ver.includes("0.14.0-b15.21")) vcn = "Lupo"; cn += `v${i.ver}  "${vcn}"

(WLEDMM_${i.ver} ${i.rel}.bin)

build ${i.vid}

${urows} ${urows===""?'':''} diff --git a/wled00/fcn_declare.h b/wled00/fcn_declare.h index b06f2844..e2e48b1c 100644 --- a/wled00/fcn_declare.h +++ b/wled00/fcn_declare.h @@ -265,6 +265,7 @@ class Usermod { bool enabled = false; //WLEDMM const char *_name; //WLEDMM bool initDone = false; //WLEDMM + unsigned long lastTime = 0; //WLEDMM public: Usermod(const char *_name = nullptr, bool enabled=false) { um_data = nullptr; this->_name = _name; this->enabled=enabled;} virtual ~Usermod() { if (um_data) delete um_data; } diff --git a/wled00/html_other.h b/wled00/html_other.h index 897e0b3d..eb7b9f3f 100644 --- a/wled00/html_other.h +++ b/wled00/html_other.h @@ -41,46 +41,46 @@ const char PAGE_dmxmap[] PROGMEM = R"=====()====="; #endif // Autogenerated from wled00/data/update.htm, do not edit!! -const uint16_t PAGE_update_length = 605; +const uint16_t PAGE_update_length = 606; const uint8_t PAGE_update[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x75, 0x53, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x7d, 0xcf, 0x57, 0x78, 0x7e, 0x6a, 0x25, 0xea, 0x8c, 0x89, 0x17, 0x46, 0x92, 0xa1, 0xb2, - 0x09, 0x21, 0x31, 0x6d, 0xd2, 0x36, 0x10, 0x4f, 0xc8, 0x89, 0x6f, 0x12, 0x53, 0xc7, 0xce, 0xec, - 0x9b, 0x56, 0xd5, 0xb4, 0x7f, 0xe7, 0xda, 0x69, 0x07, 0xd2, 0xe0, 0x25, 0xaa, 0xe3, 0x73, 0x4f, - 0xcf, 0x3d, 0xe7, 0xa4, 0x38, 0xb9, 0xbc, 0xf9, 0x74, 0xff, 0xe3, 0xf6, 0x8a, 0xf5, 0x38, 0x98, - 0xaa, 0x38, 0x3c, 0x41, 0xaa, 0xaa, 0x18, 0x00, 0x25, 0x6b, 0x9c, 0x45, 0xb0, 0x58, 0xf2, 0x9d, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0x75, 0x53, 0xc1, 0x6e, 0xd4, 0x30, + 0x14, 0xbc, 0xe7, 0x2b, 0x5c, 0x9f, 0x76, 0x25, 0xd6, 0x69, 0x2b, 0x38, 0x50, 0x92, 0x14, 0x2d, + 0xad, 0x10, 0x12, 0xa8, 0x95, 0xda, 0x82, 0x38, 0x21, 0x27, 0x7e, 0x49, 0xcc, 0x3a, 0x76, 0x6a, + 0xbf, 0xec, 0x6a, 0x85, 0xfa, 0xef, 0x3c, 0x3b, 0xbb, 0x05, 0xa9, 0x70, 0x89, 0xe2, 0x64, 0xde, + 0x64, 0xde, 0xcc, 0xa4, 0x38, 0xb9, 0xba, 0xf9, 0x70, 0xff, 0xfd, 0xf6, 0x9a, 0xf5, 0x38, 0x98, + 0xaa, 0x38, 0x5c, 0x41, 0xaa, 0xaa, 0x18, 0x00, 0x25, 0x6b, 0x9c, 0x45, 0xb0, 0x58, 0xf2, 0x9d, 0x56, 0xd8, 0x97, 0x0a, 0xb6, 0xba, 0x81, 0x55, 0x3a, 0x70, 0x66, 0xe5, 0x00, 0x25, 0xdf, 0x6a, - 0xd8, 0x8d, 0xce, 0x23, 0xaf, 0xb2, 0x02, 0x35, 0x1a, 0xa8, 0xbe, 0x7f, 0xbd, 0xba, 0x64, 0x0f, - 0xa3, 0x92, 0x08, 0x45, 0x3e, 0xbf, 0x2a, 0x42, 0xe3, 0xf5, 0x88, 0x55, 0xd6, 0x4e, 0xb6, 0x41, - 0xed, 0x2c, 0x5b, 0x2f, 0x96, 0x4f, 0x3b, 0x6d, 0x95, 0xdb, 0x89, 0x5e, 0x07, 0x74, 0x7e, 0x2f, - 0x6a, 0xd9, 0x6c, 0x16, 0xcb, 0xe7, 0x17, 0xc8, 0x03, 0x41, 0x94, 0x6b, 0xa6, 0x81, 0x14, 0x88, - 0x0e, 0xf0, 0xca, 0x40, 0xfc, 0xb9, 0xde, 0x7f, 0x51, 0x0b, 0x3e, 0xb5, 0x7c, 0x29, 0x02, 0xee, - 0x0d, 0x08, 0xa5, 0xc3, 0x68, 0xe4, 0xbe, 0xe4, 0xd6, 0x59, 0xe0, 0x6f, 0xfe, 0x3b, 0x32, 0x84, - 0xee, 0xf5, 0x4c, 0x6d, 0x5c, 0xb3, 0xe1, 0xcf, 0x59, 0x91, 0x1f, 0x24, 0x1e, 0xa4, 0xb2, 0xe0, - 0x9b, 0x92, 0xe7, 0x01, 0x10, 0xb5, 0xed, 0x42, 0x1e, 0xc4, 0xaf, 0x70, 0x31, 0x96, 0xef, 0x79, - 0xf5, 0x17, 0x32, 0x52, 0x55, 0xd9, 0x47, 0x3d, 0x44, 0x03, 0xd8, 0xe4, 0xcd, 0x82, 0xcf, 0xf4, - 0x4d, 0x08, 0x7c, 0xf9, 0x81, 0x90, 0x09, 0x51, 0xe4, 0xb3, 0xa5, 0xb5, 0x53, 0x7b, 0xe6, 0xac, - 0x71, 0x52, 0x95, 0xfc, 0x33, 0xe0, 0xb7, 0xc5, 0x92, 0xe8, 0xfa, 0xb3, 0x2a, 0xbb, 0x76, 0xce, - 0x5e, 0x3b, 0xc5, 0x92, 0x75, 0x77, 0xae, 0xc5, 0x9d, 0xf4, 0xf0, 0xe2, 0x21, 0x21, 0x8a, 0xd6, - 0xf9, 0x81, 0x51, 0x26, 0xbd, 0xa3, 0xd9, 0xdb, 0x9b, 0xbb, 0x7b, 0xce, 0x64, 0xb2, 0x89, 0x44, - 0x4e, 0x09, 0xc7, 0x99, 0xa6, 0x2b, 0xf2, 0x85, 0x65, 0x40, 0x0e, 0xee, 0x47, 0x0a, 0x67, 0x98, - 0x0c, 0xea, 0x51, 0x7a, 0xcc, 0xe3, 0xfc, 0x8a, 0x60, 0x92, 0x93, 0x82, 0x30, 0xd5, 0x83, 0xa6, - 0x54, 0x1f, 0x92, 0x80, 0x30, 0x4a, 0xcb, 0x1a, 0x23, 0x43, 0x28, 0x79, 0xd0, 0x23, 0xaf, 0x4e, - 0xc5, 0xdb, 0x77, 0xe2, 0x74, 0x55, 0x9f, 0x89, 0xb3, 0xd3, 0x68, 0x0c, 0xdd, 0x93, 0x78, 0x5f, - 0x5d, 0xba, 0x5d, 0x12, 0xcf, 0xb0, 0x07, 0x66, 0xe8, 0x2f, 0x03, 0x32, 0x0f, 0x06, 0x64, 0x80, - 0x73, 0x56, 0x48, 0x96, 0xf5, 0x1e, 0xda, 0x92, 0xf7, 0x88, 0x63, 0x38, 0xcf, 0xf3, 0x4e, 0x63, - 0x3f, 0xd5, 0xa2, 0x71, 0x43, 0x7e, 0xd8, 0x6f, 0x32, 0x10, 0xf2, 0xb8, 0x63, 0x7e, 0x18, 0x0b, - 0x9c, 0xa1, 0xf4, 0x14, 0x54, 0xc9, 0x7f, 0xd6, 0x46, 0xda, 0x0d, 0xc9, 0xd1, 0x43, 0xc7, 0xb2, - 0xe4, 0xfe, 0x91, 0x88, 0xde, 0x88, 0xd0, 0x6b, 0x30, 0x2a, 0x08, 0xed, 0x0e, 0xbc, 0x47, 0x8a, - 0x57, 0xdc, 0x22, 0x6c, 0xbb, 0x8b, 0x64, 0x7c, 0xd9, 0x92, 0xc8, 0x55, 0x78, 0x9c, 0xc8, 0xcc, - 0x58, 0xcf, 0x5c, 0xa6, 0x35, 0x0a, 0x6d, 0xc7, 0x09, 0xd9, 0xec, 0x50, 0xab, 0x0d, 0x1c, 0xab, - 0x7c, 0xf4, 0xd1, 0xc3, 0xe3, 0xa4, 0x3d, 0xa8, 0x19, 0x5d, 0x4f, 0x88, 0xd4, 0xc6, 0x19, 0x3e, - 0x3b, 0x47, 0x64, 0x73, 0x36, 0x27, 0x45, 0x3e, 0x5f, 0xff, 0x03, 0x3a, 0x1f, 0xa2, 0xdd, 0x8d, - 0xd1, 0xcd, 0xa6, 0xe4, 0xeb, 0xe8, 0xf6, 0x9a, 0x4a, 0xfe, 0x67, 0x28, 0xc5, 0x52, 0x15, 0x4a, - 0x6f, 0xb3, 0x94, 0x5e, 0xac, 0x28, 0xd1, 0x54, 0x89, 0x9d, 0x7a, 0x27, 0x84, 0x20, 0x70, 0x22, - 0xbf, 0x4d, 0xdb, 0x32, 0xe5, 0x98, 0x75, 0x48, 0x71, 0x39, 0x3a, 0x38, 0x4f, 0x5a, 0x5b, 0x0f, - 0xa1, 0x4f, 0x91, 0x8c, 0xb2, 0x03, 0x76, 0xbe, 0x2c, 0x72, 0xe2, 0x8b, 0xeb, 0xc6, 0xbe, 0xc5, - 0xf2, 0xc5, 0xaf, 0xfa, 0x37, 0x19, 0xf3, 0xf6, 0x73, 0xeb, 0x03, 0x00, 0x00 + 0xd8, 0x8d, 0xce, 0x23, 0xaf, 0xb2, 0x02, 0x35, 0x1a, 0xa8, 0xbe, 0x7d, 0xbe, 0xbe, 0x62, 0x0f, + 0xa3, 0x92, 0x08, 0x45, 0x3e, 0x3f, 0x2a, 0x42, 0xe3, 0xf5, 0x88, 0x55, 0xd6, 0x4e, 0xb6, 0x41, + 0xed, 0x2c, 0x5b, 0x2f, 0x96, 0xbf, 0x76, 0xda, 0x2a, 0xb7, 0x13, 0xbd, 0x0e, 0xe8, 0xfc, 0x5e, + 0xd4, 0xb2, 0xd9, 0x2c, 0x96, 0x4f, 0xcf, 0x90, 0x07, 0x82, 0x28, 0xd7, 0x4c, 0x03, 0x29, 0x10, + 0x1d, 0xe0, 0xb5, 0x81, 0x78, 0xbb, 0xde, 0x7f, 0x52, 0x0b, 0x3e, 0xb5, 0x7c, 0x29, 0x02, 0xee, + 0x0d, 0x08, 0xa5, 0xc3, 0x68, 0xe4, 0xbe, 0xe4, 0xd6, 0x59, 0xe0, 0xaf, 0xfe, 0x3b, 0x32, 0x84, + 0xee, 0xe5, 0x4c, 0x6d, 0x5c, 0xb3, 0xe1, 0x4f, 0x59, 0x91, 0x1f, 0x24, 0x1e, 0xa4, 0xb2, 0xe0, + 0x9b, 0x92, 0xe7, 0x01, 0x10, 0xb5, 0xed, 0x42, 0x1e, 0xc4, 0xcf, 0x70, 0x39, 0x96, 0x6f, 0x79, + 0xf5, 0x17, 0x32, 0x52, 0x55, 0xd9, 0x7b, 0x3d, 0x44, 0x03, 0xd8, 0xe4, 0xcd, 0x82, 0xcf, 0xf4, + 0x4d, 0x08, 0x7c, 0xf9, 0x8e, 0x90, 0x09, 0x51, 0xe4, 0xb3, 0xa5, 0xb5, 0x53, 0x7b, 0xe6, 0xac, + 0x71, 0x52, 0x95, 0xfc, 0x23, 0xe0, 0xd7, 0xc5, 0x92, 0xe8, 0xfa, 0xf3, 0x2a, 0xfb, 0xe2, 0x9c, + 0xfd, 0xe2, 0x14, 0x4b, 0xd6, 0xdd, 0xb9, 0x16, 0x77, 0xd2, 0xc3, 0xb3, 0x87, 0x84, 0x28, 0x5a, + 0xe7, 0x07, 0x46, 0x99, 0xf4, 0x8e, 0x66, 0x6f, 0x6f, 0xee, 0xee, 0x39, 0x93, 0xc9, 0x26, 0x12, + 0x39, 0x25, 0x1c, 0x67, 0x9a, 0x5e, 0x91, 0x2f, 0x2c, 0x03, 0x72, 0x70, 0x3f, 0x52, 0x38, 0xc3, + 0x64, 0x50, 0x8f, 0xd2, 0x63, 0x1e, 0xe7, 0x57, 0x04, 0x93, 0x9c, 0x14, 0x84, 0xa9, 0x1e, 0x34, + 0xa5, 0xfa, 0x90, 0x04, 0x84, 0x51, 0x5a, 0xd6, 0x18, 0x19, 0x42, 0xc9, 0x83, 0x1e, 0x79, 0x75, + 0x2a, 0xce, 0x5e, 0x8b, 0xd3, 0x55, 0x7d, 0xf6, 0x46, 0x9c, 0x9f, 0x45, 0x67, 0x08, 0x40, 0xea, + 0x7d, 0x75, 0xe5, 0x76, 0x49, 0x3d, 0xc3, 0x1e, 0x98, 0xa1, 0x6f, 0x06, 0x64, 0x1e, 0x0c, 0xc8, + 0x00, 0x17, 0xac, 0x90, 0x2c, 0xeb, 0x3d, 0xb4, 0x25, 0xef, 0x11, 0xc7, 0x70, 0x91, 0xe7, 0x9d, + 0xc6, 0x7e, 0xaa, 0x45, 0xe3, 0x86, 0xfc, 0xb0, 0xe0, 0x64, 0x20, 0xe4, 0x71, 0xc9, 0xfc, 0x30, + 0x16, 0x38, 0x43, 0xe9, 0x29, 0xa9, 0x92, 0xff, 0xa8, 0x8d, 0xb4, 0x1b, 0xd2, 0xa3, 0x87, 0x8e, + 0x65, 0xc9, 0xfe, 0x23, 0x11, 0x3d, 0x11, 0xa1, 0xd7, 0x60, 0x54, 0x10, 0xda, 0x1d, 0x78, 0x8f, + 0x14, 0x2f, 0xb8, 0x45, 0xd8, 0x76, 0x97, 0xc9, 0xf9, 0xb2, 0x25, 0x91, 0xab, 0xf0, 0x38, 0x91, + 0x9b, 0xb1, 0x9f, 0xb9, 0x4c, 0x6b, 0x14, 0xda, 0x8e, 0x13, 0xb2, 0xd9, 0xa2, 0x56, 0x1b, 0x38, + 0x76, 0xf9, 0x68, 0xa4, 0x87, 0xc7, 0x49, 0x7b, 0x50, 0x33, 0xba, 0x9e, 0x10, 0xa9, 0x8e, 0x33, + 0x7c, 0xb6, 0x8e, 0xc8, 0xe6, 0x70, 0x4e, 0x8a, 0x7c, 0x7e, 0xfd, 0x0f, 0xe8, 0x7c, 0x88, 0x7e, + 0x37, 0x46, 0x37, 0x9b, 0x92, 0xaf, 0xa3, 0xdd, 0x6b, 0x6a, 0xf9, 0x9f, 0xa1, 0x94, 0x4b, 0x55, + 0x28, 0xbd, 0xcd, 0x52, 0x7c, 0xb1, 0xa3, 0x44, 0x53, 0x25, 0x76, 0x2a, 0x9e, 0x10, 0x82, 0xc0, + 0x89, 0xfc, 0x36, 0x6d, 0xcb, 0x94, 0x63, 0xd6, 0x21, 0xe5, 0xe5, 0xe8, 0xe0, 0x3c, 0x69, 0x6d, + 0x3d, 0x84, 0x3e, 0x45, 0x32, 0xca, 0x0e, 0xd8, 0xc5, 0xb2, 0xc8, 0x89, 0x2f, 0xae, 0x1b, 0x0b, + 0x17, 0xdb, 0x17, 0x7f, 0xeb, 0xdf, 0x2e, 0x45, 0x6b, 0xaa, 0xec, 0x03, 0x00, 0x00 }; diff --git a/wled00/html_settings.h b/wled00/html_settings.h index 6dcd2ea5..4654bdb9 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -1534,165 +1534,165 @@ const uint8_t PAGE_settings_time[] PROGMEM = { // Autogenerated from wled00/data/settings_sec.htm, do not edit!! -const uint16_t PAGE_settings_sec_length = 2498; +const uint16_t PAGE_settings_sec_length = 2500; const uint8_t PAGE_settings_sec[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xa5, 0x58, 0xff, 0x72, 0xdb, 0xb8, - 0x11, 0xfe, 0x5f, 0x4f, 0x01, 0xe1, 0x66, 0x72, 0x62, 0x8f, 0xa6, 0x1c, 0x27, 0xbd, 0x49, 0x1c, - 0x51, 0xa9, 0x1d, 0x3b, 0x17, 0xdf, 0xd8, 0xb1, 0x27, 0x52, 0x2e, 0xed, 0xa4, 0x99, 0x0c, 0x44, - 0x42, 0x22, 0x22, 0x92, 0xe0, 0x01, 0xa0, 0x15, 0x35, 0x77, 0xef, 0xd1, 0xa7, 0xe9, 0xc3, 0xf4, - 0x49, 0xfa, 0x2d, 0x48, 0x4a, 0xb2, 0xe3, 0x24, 0x93, 0xe9, 0x1f, 0xb6, 0x44, 0x02, 0xd8, 0x1f, - 0xdf, 0xee, 0x7e, 0xbb, 0xd0, 0xa8, 0x7f, 0x72, 0xf9, 0x6c, 0xfa, 0x8f, 0xab, 0x53, 0x96, 0xb9, - 0x22, 0x1f, 0x8f, 0xe8, 0x3f, 0xcb, 0x45, 0xb9, 0x88, 0xb9, 0x2c, 0x39, 0x9e, 0xa5, 0x48, 0xc7, - 0xa3, 0x42, 0x3a, 0xc1, 0x4a, 0x51, 0xc8, 0x98, 0x5f, 0x2b, 0xb9, 0xaa, 0xb4, 0x71, 0x9c, 0x25, - 0xba, 0x74, 0xb2, 0x74, 0x31, 0x5f, 0xa9, 0xd4, 0x65, 0xf1, 0x5f, 0xf7, 0xf7, 0xf9, 0xb8, 0xd7, - 0x6c, 0xed, 0xdd, 0x5a, 0x4b, 0xe5, 0xb5, 0x4a, 0xe4, 0x9e, 0x7f, 0x08, 0x55, 0xa9, 0x9c, 0x12, - 0xf9, 0x9e, 0x4d, 0x44, 0x2e, 0xe3, 0xfb, 0x61, 0x21, 0x3e, 0xaa, 0xa2, 0x2e, 0x36, 0xcf, 0xb5, - 0x95, 0xc6, 0x3f, 0x88, 0x19, 0x9e, 0x4b, 0xcd, 0x59, 0xef, 0x96, 0xea, 0xd6, 0xa0, 0x24, 0x13, - 0xc6, 0x4a, 0x28, 0xa9, 0xdd, 0x7c, 0xef, 0x11, 0xde, 0x3a, 0xe5, 0x72, 0x39, 0xbe, 0x50, 0x36, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xa5, 0x58, 0xff, 0x72, 0xdb, 0x36, + 0x12, 0xfe, 0x5f, 0x4f, 0x01, 0xa1, 0x33, 0xa9, 0x78, 0xa5, 0x29, 0xdb, 0x49, 0x3b, 0x89, 0x23, + 0x2a, 0x67, 0xc7, 0x4e, 0xe3, 0x1b, 0x3b, 0xf6, 0x44, 0x4a, 0x73, 0x37, 0xbd, 0x4e, 0x06, 0x22, + 0x21, 0x11, 0x11, 0x49, 0xb0, 0x00, 0x68, 0x45, 0x97, 0xf6, 0x3d, 0xee, 0x69, 0xee, 0x61, 0xee, + 0x49, 0xee, 0x5b, 0x90, 0x94, 0x64, 0xc7, 0x49, 0x26, 0x73, 0x7f, 0xd8, 0x12, 0x09, 0x60, 0x7f, + 0x7c, 0xbb, 0xfb, 0xed, 0x42, 0xa3, 0xfe, 0xe9, 0xd5, 0xf3, 0xe9, 0x3f, 0xae, 0xcf, 0x58, 0xe6, + 0x8a, 0x7c, 0x3c, 0xa2, 0xff, 0x2c, 0x17, 0xe5, 0x22, 0xe6, 0xb2, 0xe4, 0x78, 0x96, 0x22, 0x1d, + 0x8f, 0x0a, 0xe9, 0x04, 0x2b, 0x45, 0x21, 0x63, 0x7e, 0xa3, 0xe4, 0xaa, 0xd2, 0xc6, 0x71, 0x96, + 0xe8, 0xd2, 0xc9, 0xd2, 0xc5, 0x7c, 0xa5, 0x52, 0x97, 0xc5, 0x3f, 0xee, 0xef, 0xf3, 0x71, 0xaf, + 0xd9, 0xda, 0xbb, 0xb3, 0x96, 0xca, 0x1b, 0x95, 0xc8, 0x3d, 0xff, 0x10, 0xaa, 0x52, 0x39, 0x25, + 0xf2, 0x3d, 0x9b, 0x88, 0x5c, 0xc6, 0x07, 0x61, 0x21, 0x3e, 0xa8, 0xa2, 0x2e, 0x36, 0xcf, 0xb5, + 0x95, 0xc6, 0x3f, 0x88, 0x19, 0x9e, 0x4b, 0xcd, 0x59, 0xef, 0x8e, 0xea, 0xd6, 0xa0, 0x24, 0x13, + 0xc6, 0x4a, 0x28, 0xa9, 0xdd, 0x7c, 0xef, 0x31, 0xde, 0x3a, 0xe5, 0x72, 0x39, 0xbe, 0x54, 0x36, 0x61, 0x13, 0xe9, 0x9c, 0x2a, 0x17, 0x76, 0x34, 0x6c, 0x5e, 0x8e, 0x6c, 0x62, 0x54, 0xe5, 0xc6, - 0xbd, 0x6b, 0x61, 0x58, 0xae, 0x13, 0x55, 0x85, 0x4e, 0x15, 0x52, 0xd7, 0x2e, 0x4c, 0xe3, 0x54, - 0x27, 0x75, 0x01, 0x73, 0x43, 0x2c, 0xc4, 0xfd, 0xfb, 0x4f, 0xe6, 0x75, 0x99, 0x38, 0xa5, 0x4b, - 0xf6, 0x62, 0x10, 0x7c, 0x5a, 0xa9, 0x32, 0xd5, 0xab, 0x48, 0x57, 0xb2, 0x1c, 0xf0, 0xcc, 0xb9, - 0xca, 0x1e, 0x0e, 0x87, 0x45, 0x11, 0x2d, 0x4b, 0x1d, 0xad, 0x72, 0x99, 0x46, 0x0b, 0x39, 0x9c, - 0x4b, 0xe1, 0x6a, 0x23, 0xed, 0xd0, 0xb6, 0x6a, 0x87, 0x3f, 0x58, 0x99, 0xd4, 0x46, 0xb9, 0xf5, - 0x5e, 0xf7, 0x8a, 0x07, 0x7f, 0x6e, 0xe4, 0x1e, 0xdf, 0x96, 0xbb, 0x39, 0xc8, 0x43, 0xfe, 0xde, - 0xca, 0x7c, 0xbe, 0xbb, 0xfb, 0xf5, 0x67, 0xbb, 0xeb, 0x2a, 0x15, 0x4e, 0xde, 0xb5, 0x77, 0x71, - 0x96, 0x0e, 0x64, 0xf0, 0xc9, 0x48, 0xd8, 0x53, 0x32, 0x32, 0xce, 0x9d, 0xe6, 0x92, 0x9c, 0x3b, - 0x5e, 0xfb, 0xa5, 0xed, 0x56, 0x65, 0x2f, 0x67, 0x1f, 0x76, 0x36, 0xcb, 0x7b, 0xf7, 0xb8, 0x9e, - 0x7d, 0x90, 0x89, 0xe3, 0x71, 0xec, 0xd6, 0x95, 0xd4, 0x73, 0x7a, 0xd7, 0x3f, 0x32, 0x46, 0xac, - 0x23, 0x65, 0xfd, 0xe7, 0x0d, 0x09, 0xb9, 0x16, 0xe9, 0xaf, 0x93, 0x81, 0x0c, 0x5d, 0xdc, 0xdf, - 0x0f, 0x3e, 0xe5, 0xd2, 0x31, 0x1d, 0xa7, 0x51, 0x62, 0x00, 0x87, 0x6c, 0xd5, 0x0e, 0x78, 0x83, - 0x3c, 0x0f, 0x9e, 0xe8, 0x08, 0x5e, 0x1e, 0x39, 0x67, 0xd4, 0xac, 0x76, 0x12, 0x0b, 0x26, 0xe1, - 0xa1, 0x0c, 0xc2, 0xdb, 0xef, 0x49, 0x37, 0x7c, 0x73, 0xf2, 0xa3, 0x1b, 0x7e, 0x10, 0xd7, 0xa2, - 0x13, 0xf0, 0xd9, 0x46, 0x61, 0xd7, 0x25, 0x44, 0xb8, 0x20, 0x4c, 0xa3, 0x99, 0x4e, 0xd7, 0x91, - 0xa8, 0x80, 0x4f, 0xfa, 0x2c, 0x53, 0x79, 0x3a, 0xd0, 0xb4, 0x5f, 0xa4, 0xe9, 0xe9, 0x35, 0xac, - 0x38, 0x57, 0x16, 0xf9, 0x28, 0xcd, 0x80, 0x93, 0xcd, 0x3c, 0x1c, 0x04, 0xf1, 0xf8, 0xd3, 0x2f, - 0xd2, 0xfd, 0x36, 0x08, 0x42, 0xc8, 0x3c, 0x4e, 0x96, 0xcf, 0x55, 0x2e, 0x29, 0xcd, 0x06, 0x84, - 0x20, 0x9f, 0x25, 0xcb, 0x64, 0xbe, 0xe0, 0xc1, 0x17, 0x57, 0x2b, 0x44, 0x5b, 0x3a, 0x04, 0x35, - 0xf8, 0xf3, 0x6e, 0x3d, 0xd2, 0x18, 0x6d, 0xe0, 0x1e, 0xf4, 0xa0, 0x18, 0xac, 0xce, 0x65, 0x94, - 0xeb, 0xc5, 0x80, 0x9f, 0xd2, 0x7b, 0xd6, 0x82, 0x87, 0x88, 0xb3, 0x39, 0x44, 0x7b, 0x18, 0x90, - 0xfd, 0x06, 0x70, 0x9d, 0xb7, 0xef, 0x81, 0x3e, 0x0e, 0xce, 0xd5, 0xa2, 0x36, 0xc2, 0xa3, 0xdd, - 0xc0, 0xc0, 0xe6, 0x42, 0x51, 0xd6, 0xfd, 0xb3, 0x3c, 0x2b, 0x13, 0x5d, 0x54, 0x00, 0x5d, 0xb2, + 0xbd, 0x1b, 0x61, 0x58, 0xae, 0x13, 0x55, 0x85, 0x4e, 0x15, 0x52, 0xd7, 0x2e, 0x4c, 0xe3, 0x54, + 0x27, 0x75, 0x01, 0x73, 0x43, 0x2c, 0xc4, 0xfd, 0x83, 0xa7, 0xf3, 0xba, 0x4c, 0x9c, 0xd2, 0x25, + 0x7b, 0x39, 0x08, 0x3e, 0xae, 0x54, 0x99, 0xea, 0x55, 0xa4, 0x2b, 0x59, 0x0e, 0x78, 0xe6, 0x5c, + 0x65, 0x8f, 0x86, 0xc3, 0xa2, 0x88, 0x96, 0xa5, 0x8e, 0x56, 0xb9, 0x4c, 0xa3, 0x85, 0x1c, 0xce, + 0xa5, 0x70, 0xb5, 0x91, 0x76, 0x68, 0x5b, 0xb5, 0xc3, 0xef, 0xac, 0x4c, 0x6a, 0xa3, 0xdc, 0x7a, + 0xaf, 0x7b, 0xc5, 0x83, 0x3f, 0x37, 0x72, 0x4f, 0xee, 0xca, 0xdd, 0x1c, 0xe4, 0x21, 0x7f, 0x67, + 0x65, 0x3e, 0xdf, 0xdd, 0xfd, 0xe6, 0x93, 0xdd, 0x75, 0x95, 0x0a, 0x27, 0xef, 0xdb, 0xbb, 0x38, + 0x4f, 0x07, 0x32, 0xf8, 0x68, 0x24, 0xec, 0x29, 0x19, 0x19, 0xe7, 0xce, 0x72, 0x49, 0xce, 0x9d, + 0xac, 0xfd, 0xd2, 0x76, 0xab, 0xb2, 0x57, 0xb3, 0xf7, 0x3b, 0x9b, 0xe5, 0x83, 0x07, 0x5c, 0xcf, + 0xde, 0xcb, 0xc4, 0xf1, 0x38, 0x76, 0xeb, 0x4a, 0xea, 0x39, 0xbd, 0xeb, 0x1f, 0x1b, 0x23, 0xd6, + 0x91, 0xb2, 0xfe, 0xf3, 0x96, 0x84, 0x5c, 0x8b, 0xf4, 0x6f, 0x93, 0x81, 0x0c, 0x5d, 0xdc, 0xdf, + 0x0f, 0x3e, 0xe6, 0xd2, 0x31, 0x1d, 0xa7, 0x51, 0x62, 0x00, 0x87, 0x6c, 0xd5, 0x0e, 0x78, 0x83, + 0x3c, 0x0f, 0x9e, 0xea, 0x08, 0x5e, 0x1e, 0x3b, 0x67, 0xd4, 0xac, 0x76, 0x12, 0x0b, 0x26, 0xe1, + 0xa1, 0x0c, 0xc2, 0xbb, 0xef, 0x49, 0x37, 0x7c, 0x73, 0xf2, 0x83, 0x1b, 0xbe, 0x17, 0x37, 0xa2, + 0x13, 0xf0, 0xc9, 0x46, 0x61, 0xd7, 0x25, 0x44, 0xb8, 0x20, 0x4c, 0xa3, 0x99, 0x4e, 0xd7, 0x91, + 0xa8, 0x80, 0x4f, 0xfa, 0x3c, 0x53, 0x79, 0x3a, 0xd0, 0xb4, 0x5f, 0xa4, 0xe9, 0xd9, 0x0d, 0xac, + 0xb8, 0x50, 0x16, 0xf9, 0x28, 0xcd, 0x80, 0x93, 0xcd, 0x3c, 0x1c, 0x04, 0xf1, 0xf8, 0xe3, 0xcf, + 0xd2, 0xfd, 0x32, 0x08, 0x42, 0xc8, 0x3c, 0x49, 0x96, 0x2f, 0x54, 0x2e, 0x29, 0xcd, 0x06, 0x84, + 0x20, 0x9f, 0x25, 0xcb, 0x64, 0xbe, 0xe0, 0xc1, 0x67, 0x57, 0x2b, 0x44, 0x5b, 0x3a, 0x04, 0x35, + 0xf8, 0xf3, 0x7e, 0x3d, 0xd2, 0x18, 0x6d, 0xe0, 0x1e, 0xf4, 0xa0, 0x18, 0xac, 0xce, 0x65, 0x94, + 0xeb, 0xc5, 0x80, 0x9f, 0xd1, 0x7b, 0xd6, 0x82, 0x87, 0x88, 0xb3, 0x39, 0x44, 0x7b, 0x18, 0x90, + 0xfd, 0x06, 0x70, 0x5d, 0xb4, 0xef, 0x81, 0x3e, 0x0e, 0xce, 0xd5, 0xa2, 0x36, 0xc2, 0xa3, 0xdd, + 0xc0, 0xc0, 0xe6, 0x42, 0x51, 0xd6, 0xfd, 0xb3, 0x3c, 0x2f, 0x13, 0x5d, 0x54, 0x00, 0x5d, 0xb2, 0x4a, 0x2c, 0x24, 0x43, 0x4a, 0x88, 0x3e, 0x72, 0x61, 0x27, 0x40, 0x36, 0xd3, 0xab, 0xa9, 0x16, - 0xd6, 0x35, 0x31, 0xba, 0x1f, 0x7c, 0xa2, 0xf4, 0xd7, 0xb1, 0xf7, 0xc2, 0xd1, 0x82, 0x0f, 0x8b, - 0x2a, 0x61, 0xf2, 0x8b, 0xe9, 0xc5, 0x79, 0x2c, 0xe1, 0x4b, 0x92, 0x0b, 0x6b, 0xc9, 0x11, 0xf2, - 0x6a, 0xe0, 0x9e, 0xb6, 0xae, 0x1c, 0x72, 0x92, 0x86, 0x28, 0x24, 0xb9, 0x14, 0x66, 0xda, 0x14, - 0xcf, 0xa0, 0x2d, 0x22, 0x1f, 0x1b, 0xb7, 0x86, 0x93, 0xa2, 0x54, 0x85, 0xb7, 0x37, 0xe6, 0xa5, - 0x2e, 0xe1, 0x59, 0xbb, 0x23, 0x06, 0x5c, 0xdd, 0xa1, 0x41, 0x67, 0x20, 0x12, 0x7b, 0x57, 0x9f, - 0x91, 0x85, 0xbe, 0xa6, 0xc4, 0xf0, 0x8a, 0x00, 0xec, 0xc1, 0xe3, 0xfd, 0xfd, 0x1d, 0x77, 0xea, - 0x8a, 0x40, 0xa3, 0x58, 0x90, 0x3f, 0x9d, 0x33, 0xa5, 0x5c, 0xb1, 0xbf, 0x5f, 0x9c, 0xbf, 0x40, - 0x69, 0xbe, 0x92, 0xbf, 0xd7, 0xd2, 0xba, 0x27, 0x5f, 0x09, 0xfc, 0x8e, 0xea, 0x2d, 0x3a, 0x2e, - 0x53, 0x16, 0xda, 0x6d, 0x85, 0x48, 0xc9, 0x29, 0xf2, 0x2e, 0xf4, 0x6f, 0xac, 0x43, 0x59, 0xdb, - 0x71, 0xfc, 0x90, 0xac, 0x08, 0xbe, 0x1a, 0xe7, 0xad, 0x5c, 0xb9, 0x2b, 0x58, 0x92, 0x8c, 0x64, - 0x19, 0xf6, 0x3b, 0x01, 0x4d, 0x01, 0x5f, 0x5d, 0x4e, 0xa6, 0xc8, 0xf0, 0x61, 0xe3, 0x10, 0x62, - 0x40, 0x9e, 0x94, 0xde, 0x93, 0xe7, 0xda, 0x14, 0x27, 0x88, 0xe4, 0x93, 0xb6, 0x2a, 0xcb, 0x36, - 0xa9, 0x07, 0x9c, 0xe2, 0x8b, 0x44, 0x89, 0x28, 0x61, 0xec, 0xdb, 0xfd, 0x77, 0x61, 0x83, 0x3a, - 0xad, 0x95, 0x01, 0xde, 0x5f, 0x8b, 0xbc, 0x06, 0x4b, 0xf2, 0xb0, 0x7f, 0x7f, 0x0b, 0x59, 0x92, - 0xc9, 0x64, 0xf9, 0xb2, 0x2e, 0xb6, 0x75, 0xde, 0x1f, 0xf4, 0x25, 0xb9, 0x10, 0x2d, 0xe5, 0x3a, - 0x42, 0xa8, 0x92, 0x6c, 0x30, 0x7c, 0xbb, 0xbf, 0xf7, 0xf8, 0xdd, 0x30, 0x40, 0xb1, 0xbf, 0xe5, - 0xc7, 0xb0, 0xd7, 0x56, 0x22, 0xa1, 0x12, 0x9c, 0x8a, 0x19, 0xfe, 0x9f, 0x82, 0xcb, 0xe1, 0x22, - 0x9f, 0x64, 0x6a, 0xee, 0xf0, 0xf9, 0x0c, 0xe4, 0x6e, 0x74, 0x8e, 0x6f, 0x47, 0x39, 0x3d, 0x5f, - 0x09, 0x50, 0x36, 0xbd, 0x17, 0x95, 0x3d, 0xd7, 0xc9, 0x92, 0x8e, 0x80, 0xbf, 0x7d, 0x11, 0x4f, - 0x5a, 0x49, 0x57, 0xc8, 0xd0, 0xd7, 0x55, 0xfb, 0xe5, 0x44, 0xaf, 0x4a, 0x2f, 0x17, 0x01, 0xe1, - 0x2f, 0x74, 0x41, 0x1b, 0xc0, 0x2e, 0x7a, 0x75, 0x2e, 0xbd, 0x02, 0xff, 0xdd, 0xef, 0xf6, 0xdf, - 0x5e, 0xa9, 0x45, 0xb6, 0x79, 0xdd, 0x9e, 0x3d, 0x43, 0xa0, 0x0c, 0xbd, 0x3c, 0x91, 0x54, 0x01, - 0xfc, 0x1d, 0x92, 0x38, 0xc9, 0xeb, 0x54, 0xda, 0xc1, 0xc6, 0xbb, 0x20, 0xf8, 0xe3, 0x8f, 0xf6, - 0x09, 0xe5, 0x4a, 0x9f, 0x27, 0x72, 0x2e, 0xea, 0xdc, 0xa1, 0xe8, 0x51, 0x0b, 0x3b, 0x65, 0x72, - 0xb3, 0xc6, 0x01, 0x95, 0xbc, 0xc5, 0x34, 0xe0, 0xde, 0xb2, 0x49, 0x20, 0x4e, 0x9c, 0xff, 0x9e, - 0xff, 0x24, 0x89, 0x5a, 0xef, 0xda, 0x11, 0xfc, 0x34, 0xe0, 0x6f, 0xce, 0x4f, 0x4f, 0x40, 0xa2, - 0x36, 0x7d, 0xca, 0x51, 0x37, 0xd8, 0x6d, 0xd3, 0x60, 0x47, 0xdf, 0x04, 0xc9, 0xc7, 0x29, 0x8c, - 0x87, 0xd8, 0xd4, 0x32, 0x3b, 0x5a, 0x8f, 0x2f, 0x1b, 0x98, 0xaa, 0x9d, 0x4e, 0x74, 0x7e, 0xef, - 0xde, 0xc0, 0xb7, 0xa3, 0xfd, 0x70, 0xe0, 0xfb, 0x55, 0x4c, 0x3b, 0xf2, 0x89, 0xd3, 0x06, 0x08, - 0x92, 0xf2, 0x33, 0x27, 0x0b, 0x4a, 0xeb, 0xe4, 0xac, 0xe2, 0xde, 0xd5, 0x66, 0x1b, 0xce, 0x17, - 0x15, 0x78, 0x84, 0xdc, 0x61, 0x17, 0x3a, 0x95, 0x11, 0xbb, 0x42, 0xc5, 0x5a, 0xc9, 0x24, 0xc5, - 0x91, 0x91, 0x6d, 0xec, 0xec, 0x0a, 0x4c, 0x11, 0xde, 0x90, 0x68, 0x6f, 0x4a, 0x0c, 0xbd, 0xb4, - 0x20, 0xa0, 0x5d, 0x9e, 0xe5, 0x49, 0xfc, 0x53, 0xdf, 0x00, 0xd1, 0xff, 0xf8, 0x4f, 0x7e, 0xf9, - 0x90, 0xc3, 0xdd, 0x6d, 0xf3, 0x1a, 0xda, 0xe8, 0x83, 0x7d, 0x5a, 0xc5, 0x3f, 0x73, 0x8f, 0x6f, - 0x6f, 0x34, 0x6c, 0xbb, 0xee, 0xc8, 0x73, 0xc3, 0xf8, 0x6f, 0xaa, 0xa0, 0xfe, 0xcd, 0x6a, 0x93, - 0xa3, 0xc8, 0x3d, 0x5d, 0x24, 0x16, 0x1c, 0xfa, 0x04, 0x1b, 0xfd, 0x86, 0xd1, 0xb0, 0x99, 0x37, - 0x88, 0xcc, 0xc1, 0x91, 0xa4, 0x39, 0xe6, 0x40, 0x0b, 0xbd, 0x7d, 0x8e, 0xba, 0xe8, 0x31, 0x85, - 0x67, 0xfa, 0xf6, 0xde, 0xf2, 0x76, 0x1e, 0x99, 0xcc, 0x39, 0xc3, 0x34, 0x90, 0x69, 0xac, 0x54, - 0xda, 0xd2, 0x70, 0x90, 0xaa, 0x6b, 0xe6, 0x49, 0x25, 0x06, 0xc7, 0x01, 0x8e, 0xd5, 0xcd, 0x77, - 0x99, 0xcc, 0xab, 0x63, 0x1a, 0x55, 0x10, 0x38, 0x87, 0x68, 0x50, 0xbb, 0x89, 0x79, 0xf3, 0xc0, - 0xa1, 0x35, 0xc9, 0x55, 0xb2, 0x8c, 0xf9, 0x0b, 0x52, 0xfb, 0x74, 0x34, 0x6c, 0x16, 0x60, 0x1a, - 0x44, 0x8c, 0xef, 0x3e, 0xd3, 0xdb, 0x1c, 0x3a, 0xa6, 0x43, 0x54, 0x41, 0xdb, 0x73, 0x37, 0x4e, - 0xd8, 0x7a, 0x56, 0x28, 0xd8, 0x38, 0x11, 0xd7, 0x72, 0xbb, 0x25, 0x33, 0x9d, 0xf8, 0xec, 0x60, - 0xdc, 0x9b, 0xb4, 0x93, 0x03, 0xbb, 0xc7, 0x5e, 0xfb, 0x3e, 0x4f, 0xf9, 0x59, 0x57, 0xc0, 0xe6, - 0x60, 0xdc, 0x8d, 0x35, 0xec, 0xea, 0xec, 0xe5, 0x21, 0x1b, 0xa9, 0xb2, 0xaa, 0x5d, 0x2b, 0xba, - 0x82, 0x73, 0x2b, 0x6d, 0x52, 0xee, 0x41, 0xc2, 0xfa, 0x66, 0x6e, 0xf2, 0xdf, 0xad, 0xfa, 0x17, - 0xbe, 0x3e, 0x04, 0x58, 0xe2, 0x23, 0xf2, 0x7c, 0x81, 0xa9, 0xcc, 0x3f, 0xa9, 0x72, 0xe7, 0x49, - 0x97, 0x28, 0x1b, 0xca, 0xe4, 0x98, 0x6f, 0x88, 0x83, 0x98, 0x30, 0x80, 0xac, 0x4a, 0x38, 0xa4, - 0x0f, 0x56, 0x3c, 0x59, 0xfc, 0x05, 0x6a, 0x48, 0x79, 0x81, 0x04, 0x03, 0xd3, 0x63, 0x7c, 0x32, - 0x2a, 0xe1, 0xcc, 0x0f, 0x5b, 0xd0, 0xb8, 0x9b, 0x70, 0x82, 0x3d, 0x64, 0xa9, 0x5a, 0x28, 0xc7, - 0xb0, 0x6d, 0x06, 0x26, 0x01, 0x26, 0x06, 0xf0, 0x53, 0x48, 0x7c, 0xd8, 0xa1, 0x4c, 0xe7, 0xda, - 0x1c, 0xfe, 0x30, 0x17, 0x34, 0x42, 0xde, 0xfb, 0xe1, 0xf1, 0xa3, 0x47, 0x8f, 0x9e, 0xb0, 0xd7, - 0xa5, 0x2c, 0x13, 0xb3, 0xae, 0x9c, 0x4c, 0x99, 0x33, 0xa2, 0xb4, 0x85, 0xb2, 0x96, 0x2a, 0x84, - 0x1d, 0xa3, 0xe3, 0x19, 0xd4, 0x7a, 0xe9, 0xd8, 0x2a, 0x93, 0x54, 0xbf, 0x39, 0xa6, 0x16, 0x6a, - 0x9a, 0x70, 0x35, 0x64, 0xa9, 0x66, 0x2f, 0x2f, 0xa7, 0x0c, 0xa4, 0xc4, 0xd6, 0xba, 0x36, 0x6c, - 0x26, 0xca, 0x25, 0x16, 0x69, 0x41, 0x9b, 0x90, 0x4d, 0xce, 0x2e, 0x42, 0x26, 0x5d, 0x12, 0xb1, - 0x4a, 0x95, 0xfd, 0x5e, 0x17, 0x58, 0x33, 0x26, 0xee, 0x62, 0x2b, 0x65, 0x20, 0xcd, 0x5a, 0x36, - 0xb8, 0x9c, 0x1e, 0x05, 0xcc, 0xea, 0xb9, 0x5b, 0x09, 0x23, 0x59, 0x33, 0x72, 0xdd, 0xc2, 0xdc, - 0x83, 0x34, 0xd3, 0x1f, 0xbb, 0x64, 0x7c, 0x79, 0xe9, 0xf3, 0xca, 0x8c, 0xaf, 0x10, 0x8c, 0x2a, - 0x33, 0x00, 0xe1, 0x8b, 0x51, 0x6a, 0x4e, 0x5c, 0x5e, 0xdd, 0x88, 0xc8, 0x83, 0x83, 0x16, 0x9d, - 0xa9, 0x06, 0x7a, 0x34, 0x00, 0x33, 0x98, 0x11, 0x32, 0xe4, 0x3c, 0xeb, 0x26, 0x4a, 0x86, 0xf1, - 0xca, 0xa2, 0x51, 0x91, 0x73, 0xac, 0x94, 0x84, 0x8e, 0x66, 0x22, 0xb7, 0xba, 0xc5, 0xdb, 0x65, - 0x12, 0x93, 0x83, 0x31, 0x80, 0x84, 0x75, 0xea, 0xfa, 0xde, 0xaa, 0x69, 0x26, 0x37, 0x6f, 0x68, - 0x36, 0xa8, 0xf3, 0x94, 0xcd, 0x24, 0xcd, 0xd1, 0xe5, 0x02, 0x62, 0x3c, 0x96, 0x50, 0x87, 0xc9, - 0xb0, 0x55, 0x9e, 0x46, 0x74, 0x6c, 0x34, 0x1b, 0xf7, 0x4e, 0x94, 0xed, 0xac, 0x69, 0xf6, 0x95, - 0xda, 0x21, 0x03, 0x08, 0xe4, 0x90, 0x69, 0xa8, 0x34, 0x2b, 0x05, 0xbc, 0x45, 0xc9, 0x90, 0x26, - 0xc8, 0x7f, 0xd8, 0x91, 0xe0, 0xc1, 0xc8, 0x39, 0x8a, 0x2e, 0x63, 0xcd, 0x05, 0x60, 0x83, 0x26, - 0xa1, 0x3e, 0xf3, 0x8e, 0x8e, 0xd4, 0x36, 0xa7, 0xa9, 0x4a, 0x90, 0x6c, 0xcd, 0x34, 0x43, 0x98, - 0x83, 0x01, 0xd6, 0x8d, 0x75, 0x5e, 0xb7, 0x9a, 0x7b, 0xf5, 0x39, 0x85, 0x09, 0xdb, 0xd2, 0xc6, - 0xa4, 0xb4, 0x3f, 0x1a, 0xaa, 0x06, 0xf5, 0x13, 0x59, 0xae, 0x99, 0x48, 0x12, 0x0a, 0x1f, 0x30, - 0x79, 0xa3, 0x9e, 0x2b, 0xd6, 0x71, 0x13, 0x9d, 0xa6, 0x93, 0x32, 0xfd, 0x46, 0x0c, 0x2f, 0xdf, - 0xb4, 0x31, 0xa4, 0xbf, 0xe7, 0x22, 0x01, 0x3d, 0x12, 0xe4, 0x90, 0xf3, 0x8d, 0x83, 0xaf, 0x26, - 0x6d, 0xec, 0x8e, 0xf2, 0x7c, 0xab, 0x56, 0x94, 0x29, 0x6b, 0x87, 0x45, 0xe4, 0x16, 0x56, 0x00, - 0xb8, 0xa4, 0xc4, 0xe8, 0xb0, 0x35, 0xe3, 0xff, 0xa3, 0x12, 0x8e, 0x76, 0xf0, 0xf6, 0xf0, 0x01, - 0x63, 0x18, 0x83, 0xb4, 0x70, 0x08, 0xf2, 0xd2, 0xc7, 0x40, 0x51, 0x56, 0x24, 0x92, 0x46, 0x47, - 0x30, 0x67, 0x33, 0x26, 0x76, 0x59, 0x4f, 0xcc, 0x93, 0x3d, 0x18, 0x4f, 0xba, 0x2c, 0x6f, 0x08, - 0x07, 0x54, 0xf3, 0x60, 0xfc, 0x0d, 0x7a, 0x7c, 0x4d, 0x4c, 0xd7, 0xbb, 0x10, 0x65, 0x2d, 0x72, - 0x1f, 0x96, 0xee, 0xe8, 0x86, 0xf7, 0xcc, 0xf8, 0xb4, 0xc9, 0xe0, 0x23, 0x93, 0xd6, 0xaa, 0xd4, - 0xd8, 0xf4, 0x45, 0x04, 0x5b, 0xa6, 0x3a, 0xba, 0xe4, 0x1b, 0x9b, 0x88, 0x45, 0xeb, 0x0a, 0x24, - 0xf8, 0x0a, 0x13, 0x9d, 0x36, 0xad, 0x51, 0xa2, 0x63, 0xf1, 0x99, 0xc3, 0x08, 0x5d, 0x2e, 0x1b, - 0xb6, 0x6b, 0xc7, 0x75, 0xd6, 0xcb, 0x90, 0x70, 0x31, 0x1f, 0xb6, 0x80, 0xa3, 0x1b, 0x91, 0xcd, - 0x5d, 0x6b, 0x46, 0xf5, 0xb5, 0x53, 0x7b, 0x27, 0xbc, 0x7d, 0x1e, 0x0d, 0xc5, 0x26, 0x10, 0xe3, - 0x5e, 0xab, 0x6f, 0xb3, 0xe8, 0xb3, 0x74, 0xc7, 0x6a, 0x3f, 0xb0, 0xb7, 0x31, 0xf7, 0x33, 0x99, - 0x4f, 0xb9, 0x0a, 0xf7, 0xd0, 0x46, 0xdf, 0x98, 0x75, 0xd0, 0xf5, 0xee, 0xc6, 0xee, 0xc7, 0x9d, - 0x39, 0x36, 0x8d, 0x26, 0xf3, 0x88, 0xa4, 0x84, 0xb7, 0xac, 0x0e, 0x7e, 0x1c, 0xbf, 0xf6, 0xdb, - 0x36, 0x88, 0x36, 0x49, 0xb9, 0x61, 0xab, 0x2f, 0x43, 0xd1, 0x79, 0xc9, 0x5a, 0x34, 0x00, 0x4d, - 0x8b, 0x44, 0x6f, 0x0b, 0x05, 0xe1, 0xd5, 0xc1, 0x70, 0xe3, 0x9e, 0x71, 0x03, 0x8c, 0x0e, 0x8b, - 0x9b, 0x3b, 0xb6, 0x88, 0xf4, 0xee, 0x86, 0xe4, 0xe0, 0xcb, 0x98, 0x7c, 0xa1, 0x73, 0xde, 0x89, - 0xc9, 0x41, 0xb8, 0x63, 0xfc, 0xe7, 0x80, 0xec, 0xe0, 0x41, 0x15, 0xd4, 0xfb, 0x5a, 0x09, 0x35, - 0x8e, 0x50, 0x8b, 0x68, 0xd1, 0x19, 0xde, 0xbc, 0x5c, 0xf9, 0xd2, 0xbc, 0xfc, 0xed, 0xf4, 0xd5, - 0x9b, 0x57, 0x67, 0xd3, 0xd3, 0xa6, 0x6f, 0x80, 0x6e, 0x0d, 0xf5, 0x98, 0x3b, 0x4f, 0x44, 0x3e, - 0x1c, 0x3d, 0xba, 0x84, 0x35, 0x54, 0x7b, 0x53, 0x5e, 0x21, 0x88, 0x34, 0x7e, 0xaf, 0xd1, 0x4d, - 0xd0, 0x00, 0xe7, 0xbb, 0x34, 0xc2, 0xc0, 0xe5, 0x46, 0xee, 0x79, 0x62, 0x6c, 0x2f, 0x7a, 0x5e, - 0xdd, 0xe9, 0xe4, 0x2a, 0x6a, 0xeb, 0xf2, 0xf9, 0x1d, 0x74, 0x1f, 0x6e, 0xa8, 0xdb, 0x7a, 0x72, - 0x24, 0x02, 0x9e, 0x51, 0xe5, 0xa7, 0xe8, 0x4d, 0x51, 0x57, 0x35, 0x47, 0x33, 0x5c, 0xb0, 0xba, - 0x52, 0x69, 0xcb, 0xa1, 0xfb, 0xd1, 0x02, 0x2d, 0x38, 0xab, 0x67, 0x11, 0x6e, 0x8d, 0xc3, 0x0b, - 0xad, 0x4b, 0xcc, 0x86, 0x35, 0x3a, 0xdd, 0x90, 0x06, 0xc2, 0x21, 0x5a, 0xb7, 0x30, 0x0b, 0xfa, - 0x31, 0xe5, 0xfd, 0x2c, 0x47, 0xbf, 0xe4, 0x63, 0x7a, 0x7d, 0x71, 0x41, 0xd9, 0xd0, 0x63, 0xd7, - 0xd2, 0x10, 0xdf, 0xb0, 0xfd, 0xe8, 0xfe, 0xc3, 0x68, 0x7f, 0x6f, 0x76, 0x10, 0x1d, 0xec, 0xb3, - 0xff, 0xfe, 0xfb, 0x3f, 0x04, 0xc1, 0x20, 0x09, 0xd8, 0xc1, 0xfe, 0xc1, 0x03, 0xf6, 0x55, 0x85, - 0x47, 0xca, 0x24, 0x5a, 0xeb, 0xa5, 0x92, 0x8d, 0x3e, 0xba, 0xba, 0xc2, 0x8b, 0x61, 0x21, 0x54, - 0x19, 0x45, 0xd1, 0x8e, 0x3d, 0x87, 0xb4, 0x7e, 0x58, 0xa0, 0x63, 0x20, 0x3d, 0x6e, 0x1b, 0xf5, - 0x8b, 0x97, 0xc8, 0x76, 0xb6, 0x37, 0xf3, 0xec, 0x33, 0x5d, 0x60, 0xae, 0x62, 0x47, 0x35, 0x06, - 0x41, 0xb3, 0xad, 0x67, 0xfc, 0xcd, 0x89, 0x06, 0x01, 0xf1, 0x77, 0x59, 0x77, 0x37, 0x1a, 0x87, - 0x1b, 0xb9, 0xdf, 0x23, 0x6b, 0xa5, 0x96, 0x6a, 0xe8, 0xaf, 0x4c, 0x74, 0x53, 0x80, 0x75, 0x7b, - 0x68, 0x09, 0x7b, 0x89, 0x91, 0xa9, 0xa2, 0x1a, 0xfd, 0xcc, 0xc5, 0xdd, 0xad, 0x18, 0x59, 0x24, - 0x5d, 0xfe, 0x40, 0xff, 0x4a, 0x36, 0xbd, 0xc4, 0x56, 0x32, 0x51, 0xa0, 0x5c, 0x87, 0xb6, 0xb8, - 0xdc, 0x78, 0xda, 0x3b, 0x62, 0x59, 0x8d, 0xae, 0xe9, 0xdf, 0xfa, 0xc1, 0x00, 0xfd, 0x0f, 0x57, - 0x1e, 0xb3, 0xc6, 0x1d, 0x1c, 0x0d, 0x5b, 0x33, 0x9a, 0x7a, 0x91, 0x2a, 0xe8, 0x0d, 0xcd, 0xcf, - 0x33, 0x1e, 0xb7, 0x7e, 0x87, 0x52, 0xaf, 0x89, 0xe2, 0xfd, 0x9f, 0xf7, 0x7c, 0x28, 0x9f, 0x65, - 0x06, 0x17, 0x5c, 0x85, 0xe6, 0x31, 0x49, 0xb2, 0x15, 0xfd, 0x3c, 0xd0, 0xf6, 0xea, 0x73, 0x74, - 0x71, 0xdc, 0xbc, 0x90, 0x72, 0x30, 0xaa, 0x19, 0x35, 0xbe, 0x0b, 0x8c, 0x59, 0xae, 0x67, 0x88, - 0x39, 0x2e, 0xcf, 0x66, 0x78, 0x7e, 0xf6, 0xec, 0xf4, 0xe5, 0xe4, 0xf4, 0x73, 0xac, 0x7b, 0x17, - 0x67, 0x53, 0x96, 0x37, 0x9a, 0xbc, 0x83, 0xe8, 0xef, 0x9d, 0xa1, 0x13, 0x69, 0xe0, 0x15, 0xdc, - 0xb0, 0x16, 0x53, 0x02, 0xfa, 0x09, 0xae, 0xaa, 0x65, 0x47, 0x84, 0x56, 0x55, 0x9c, 0x28, 0xcb, - 0x5f, 0xe3, 0x99, 0xbf, 0x99, 0x53, 0xa7, 0xa3, 0x2d, 0x4d, 0x5b, 0x21, 0x9a, 0x20, 0x92, 0x6c, - 0x7e, 0xfa, 0xf8, 0xea, 0x4c, 0xff, 0xf9, 0x48, 0xdf, 0xfb, 0xae, 0x99, 0x7e, 0x48, 0xcd, 0x16, - 0x1f, 0x74, 0x95, 0xa1, 0x7b, 0x0d, 0xfd, 0xba, 0xfa, 0x3f, 0xde, 0x3c, 0xd9, 0xbe, 0x6d, 0x15, - 0x00, 0x00 + 0xd6, 0x35, 0x31, 0x3a, 0x08, 0x3e, 0x52, 0xfa, 0xeb, 0xd8, 0x7b, 0xe1, 0x68, 0xc1, 0x87, 0x45, + 0x95, 0x30, 0xf9, 0xe5, 0xf4, 0xf2, 0x22, 0x96, 0xf0, 0x25, 0xc9, 0x85, 0xb5, 0xe4, 0x08, 0x79, + 0x35, 0x70, 0xcf, 0x5a, 0x57, 0x8e, 0x38, 0x49, 0x43, 0x14, 0x92, 0x5c, 0x0a, 0x33, 0x6d, 0x8a, + 0x67, 0xd0, 0x16, 0x91, 0x8f, 0x8d, 0x5b, 0xc3, 0x49, 0x51, 0xaa, 0xc2, 0xdb, 0x1b, 0xf3, 0x52, + 0x97, 0xf0, 0xac, 0xdd, 0x11, 0x03, 0xae, 0xee, 0xd0, 0xa0, 0x33, 0x10, 0x89, 0xbd, 0xab, 0xcf, + 0xc8, 0x42, 0xdf, 0x50, 0x62, 0x78, 0x45, 0x00, 0xf6, 0xf0, 0xc9, 0xfe, 0xfe, 0x8e, 0x3b, 0x75, + 0x45, 0xa0, 0x51, 0x2c, 0xc8, 0x9f, 0xce, 0x99, 0x52, 0xae, 0xd8, 0xdf, 0x2f, 0x2f, 0x5e, 0xa2, + 0x34, 0x5f, 0xcb, 0xdf, 0x6b, 0x69, 0xdd, 0xd3, 0x2f, 0x04, 0x7e, 0x47, 0xf5, 0x16, 0x1d, 0x97, + 0x29, 0x0b, 0xed, 0xb6, 0x42, 0xa4, 0xe4, 0x14, 0x79, 0x17, 0xfa, 0x37, 0xd6, 0xa1, 0xac, 0xed, + 0x38, 0x7e, 0x44, 0x56, 0x04, 0x5f, 0x8c, 0xf3, 0x56, 0xae, 0xdc, 0x15, 0x2c, 0x49, 0x46, 0xb2, + 0x0c, 0xfb, 0x9d, 0x80, 0xa6, 0x80, 0xaf, 0xaf, 0x26, 0x53, 0x64, 0xf8, 0xb0, 0x71, 0x08, 0x31, + 0x20, 0x4f, 0x4a, 0xef, 0xc9, 0x0b, 0x6d, 0x8a, 0x53, 0x44, 0xf2, 0x69, 0x5b, 0x95, 0x65, 0x9b, + 0xd4, 0x03, 0x4e, 0xf1, 0x45, 0xa2, 0x44, 0x94, 0x30, 0xf6, 0xd7, 0xfd, 0xdf, 0xc2, 0x06, 0x75, + 0x5a, 0x2b, 0x03, 0xbc, 0xbf, 0x11, 0x79, 0x0d, 0x96, 0xe4, 0x61, 0xff, 0x60, 0x0b, 0x59, 0x92, + 0xc9, 0x64, 0xf9, 0xaa, 0x2e, 0xb6, 0x75, 0xde, 0x1f, 0xf4, 0x25, 0xb9, 0x10, 0x2d, 0xe5, 0x3a, + 0x42, 0xa8, 0x92, 0x6c, 0x30, 0xfc, 0x75, 0x7f, 0xef, 0xc9, 0x6f, 0xc3, 0x00, 0xc5, 0xfe, 0x2b, + 0x3f, 0x81, 0xbd, 0xb6, 0x12, 0x09, 0x95, 0xe0, 0x54, 0xcc, 0xf0, 0xff, 0x0c, 0x5c, 0x0e, 0x17, + 0xf9, 0x24, 0x53, 0x73, 0x87, 0xcf, 0xe7, 0x20, 0x77, 0xa3, 0x73, 0x7c, 0x3b, 0xce, 0xe9, 0xf9, + 0x5a, 0x80, 0xb2, 0xe9, 0xbd, 0xa8, 0xec, 0x85, 0x4e, 0x96, 0x74, 0x04, 0xfc, 0xed, 0x8b, 0x78, + 0xd2, 0x4a, 0xba, 0x46, 0x86, 0xbe, 0xa9, 0xda, 0x2f, 0xa7, 0x7a, 0x55, 0x7a, 0xb9, 0x08, 0x08, + 0x7f, 0xa9, 0x0b, 0xda, 0x00, 0x76, 0xd1, 0xab, 0x0b, 0xe9, 0x15, 0xf8, 0xef, 0x7e, 0xb7, 0xff, + 0xf6, 0x5a, 0x2d, 0xb2, 0xcd, 0xeb, 0xf6, 0xec, 0x39, 0x02, 0x65, 0xe8, 0xe5, 0xa9, 0xa4, 0x0a, + 0xe0, 0xbf, 0x21, 0x89, 0x93, 0xbc, 0x4e, 0xa5, 0x1d, 0x6c, 0xbc, 0x0b, 0x82, 0x3f, 0xfe, 0x68, + 0x9f, 0x50, 0xae, 0xf4, 0x79, 0x2a, 0xe7, 0xa2, 0xce, 0x1d, 0x8a, 0x1e, 0xb5, 0xb0, 0x53, 0x26, + 0xb7, 0x6b, 0x1c, 0x50, 0xc9, 0x3b, 0x4c, 0x03, 0xee, 0x2d, 0x9b, 0x04, 0xe2, 0xc4, 0xf9, 0xef, + 0xf8, 0x0f, 0x92, 0xa8, 0xf5, 0xbe, 0x1d, 0xc1, 0x0f, 0x03, 0xfe, 0xf6, 0xe2, 0xec, 0x14, 0x24, + 0x6a, 0xd3, 0x67, 0x1c, 0x75, 0x83, 0xdd, 0x36, 0x0d, 0x76, 0xf4, 0x4d, 0x90, 0x7c, 0x9c, 0xc2, + 0x78, 0x84, 0x4d, 0x2d, 0xb3, 0xa3, 0xf5, 0xf8, 0xb2, 0x81, 0xa9, 0xda, 0xe9, 0x44, 0xe7, 0x0f, + 0x1e, 0x0c, 0x7c, 0x3b, 0xda, 0x0f, 0x07, 0xbe, 0x5f, 0xc5, 0xb4, 0x23, 0x9f, 0x38, 0x6d, 0x80, + 0x20, 0x29, 0x3f, 0x77, 0xb2, 0xa0, 0xb4, 0x4e, 0xce, 0x2b, 0xee, 0x5d, 0x6d, 0xb6, 0xe1, 0x7c, + 0x51, 0x81, 0x47, 0xc8, 0x1d, 0x76, 0xa9, 0x53, 0x19, 0xb1, 0x6b, 0x54, 0xac, 0x95, 0x4c, 0x52, + 0x1c, 0x19, 0xd9, 0xc6, 0xce, 0xaf, 0xc1, 0x14, 0xe1, 0x2d, 0x89, 0xf6, 0xb6, 0xc4, 0xd0, 0x4b, + 0x0b, 0x02, 0xda, 0xe5, 0x59, 0x9e, 0xc4, 0x3f, 0xf3, 0x0d, 0x10, 0xfd, 0x8f, 0xff, 0xe0, 0x97, + 0x8f, 0x38, 0xdc, 0xdd, 0x36, 0xaf, 0xa1, 0x8d, 0xde, 0xdb, 0x67, 0x55, 0xfc, 0x13, 0xf7, 0xf8, + 0xf6, 0x46, 0xc3, 0xb6, 0xeb, 0x8e, 0x3c, 0x37, 0x8c, 0xff, 0xaa, 0x0a, 0xea, 0xdf, 0xac, 0x36, + 0x39, 0x8a, 0xdc, 0xd3, 0x45, 0x62, 0xc1, 0xa1, 0x4f, 0xb1, 0xd1, 0x6f, 0x18, 0x0d, 0x9b, 0x79, + 0x83, 0xc8, 0x1c, 0x1c, 0x49, 0x9a, 0x63, 0x0e, 0xb4, 0xd0, 0xdb, 0xe7, 0xa8, 0x8b, 0x1e, 0x53, + 0x78, 0xa6, 0x6f, 0xef, 0x2c, 0x6f, 0xe7, 0x91, 0xc9, 0x9c, 0x33, 0x4c, 0x03, 0x99, 0xc6, 0x4a, + 0xa5, 0x2d, 0x0d, 0x07, 0xa9, 0xba, 0x61, 0x9e, 0x54, 0x62, 0x70, 0x1c, 0xe0, 0x58, 0xdd, 0x7e, + 0x97, 0xc9, 0xbc, 0x3a, 0xa1, 0x51, 0x05, 0x81, 0x73, 0x88, 0x06, 0xb5, 0x9b, 0x98, 0x37, 0x0f, + 0x1c, 0x5a, 0x93, 0x5c, 0x25, 0xcb, 0x98, 0xbf, 0x24, 0xb5, 0xcf, 0x46, 0xc3, 0x66, 0x01, 0xa6, + 0x41, 0xc4, 0xf8, 0xfe, 0x33, 0xbd, 0xcd, 0xa1, 0x13, 0x3a, 0x44, 0x15, 0xb4, 0x3d, 0x77, 0xeb, + 0x84, 0xad, 0x67, 0x85, 0x82, 0x8d, 0x13, 0x71, 0x23, 0xb7, 0x5b, 0x32, 0xd3, 0x89, 0xcf, 0x0e, + 0xc7, 0xbd, 0x49, 0x3b, 0x39, 0xb0, 0x07, 0xec, 0x8d, 0xef, 0xf3, 0x94, 0x9f, 0x75, 0x05, 0x6c, + 0x0e, 0xc7, 0xdd, 0x58, 0xc3, 0xae, 0xcf, 0x5f, 0x1d, 0xb1, 0x91, 0x2a, 0xab, 0xda, 0xb5, 0xa2, + 0x2b, 0x38, 0xb7, 0xd2, 0x26, 0xe5, 0x1e, 0x24, 0xac, 0x6f, 0xe6, 0x26, 0xff, 0xdd, 0xaa, 0x7f, + 0xe1, 0xeb, 0x23, 0x80, 0x25, 0x3e, 0x20, 0xcf, 0x17, 0x98, 0xca, 0xfc, 0x93, 0x2a, 0x77, 0x9e, + 0x74, 0x89, 0xb2, 0xa1, 0x4c, 0x8e, 0xf9, 0x86, 0x38, 0x88, 0x09, 0x03, 0xc8, 0xaa, 0x84, 0x43, + 0xfa, 0x60, 0xc5, 0x93, 0xc5, 0x5f, 0xa0, 0x86, 0x94, 0x17, 0x48, 0x30, 0x30, 0x3d, 0xc6, 0x27, + 0xa3, 0x12, 0xce, 0xfc, 0xb0, 0x05, 0x8d, 0xbb, 0x09, 0x27, 0xd8, 0x23, 0x96, 0xaa, 0x85, 0x72, + 0x0c, 0xdb, 0x66, 0x60, 0x12, 0x60, 0x62, 0x00, 0x3f, 0x85, 0xc4, 0x87, 0x1d, 0xca, 0x74, 0xae, + 0xcd, 0xd1, 0x77, 0x73, 0x41, 0x23, 0xe4, 0x83, 0xef, 0x9e, 0x3c, 0x7e, 0xfc, 0xf8, 0x29, 0x7b, + 0x53, 0xca, 0x32, 0x31, 0xeb, 0xca, 0xc9, 0x94, 0x39, 0x23, 0x4a, 0x5b, 0x28, 0x6b, 0xa9, 0x42, + 0xd8, 0x09, 0x3a, 0x9e, 0x41, 0xad, 0x97, 0x8e, 0xad, 0x32, 0x49, 0xf5, 0x9b, 0x63, 0x6a, 0xa1, + 0xa6, 0x09, 0x57, 0x43, 0x96, 0x6a, 0xf6, 0xea, 0x6a, 0xca, 0x40, 0x4a, 0x6c, 0xad, 0x6b, 0xc3, + 0x66, 0xa2, 0x5c, 0x62, 0x91, 0x16, 0xb4, 0x09, 0xd9, 0xe4, 0xfc, 0x32, 0x64, 0xd2, 0x25, 0x11, + 0xab, 0x54, 0xd9, 0xef, 0x75, 0x81, 0x35, 0x63, 0xe2, 0x2e, 0xb6, 0x52, 0x06, 0xd2, 0xac, 0x65, + 0x83, 0xab, 0xe9, 0x71, 0xc0, 0xac, 0x9e, 0xbb, 0x95, 0x30, 0x92, 0x35, 0x23, 0xd7, 0x1d, 0xcc, + 0x3d, 0x48, 0x33, 0xfd, 0xa1, 0x4b, 0xc6, 0x57, 0x57, 0x3e, 0xaf, 0xcc, 0xf8, 0x1a, 0xc1, 0xa8, + 0x32, 0x03, 0x10, 0x3e, 0x1b, 0xa5, 0xe6, 0xc4, 0xd5, 0xf5, 0xad, 0x88, 0x3c, 0x3c, 0x6c, 0xd1, + 0x99, 0x6a, 0xa0, 0x47, 0x03, 0x30, 0x83, 0x19, 0x21, 0x43, 0xce, 0xb3, 0x6e, 0xa2, 0x64, 0x18, + 0xaf, 0x2c, 0x1a, 0x15, 0x39, 0xc7, 0x4a, 0x49, 0xe8, 0x68, 0x26, 0x72, 0xab, 0x5b, 0xbc, 0x5d, + 0x26, 0x31, 0x39, 0x18, 0x03, 0x48, 0x58, 0xa7, 0xae, 0xef, 0xad, 0x9a, 0x66, 0x72, 0xf3, 0x86, + 0x66, 0x83, 0x3a, 0x4f, 0xd9, 0x4c, 0xd2, 0x1c, 0x5d, 0x2e, 0x20, 0xc6, 0x63, 0x09, 0x75, 0x98, + 0x0c, 0x5b, 0xe5, 0x69, 0x44, 0xc7, 0x46, 0xb3, 0x71, 0xef, 0x54, 0xd9, 0xce, 0x9a, 0x66, 0x5f, + 0xa9, 0x1d, 0x32, 0x80, 0x40, 0x0e, 0x99, 0x86, 0x4a, 0xb3, 0x52, 0xc0, 0x5b, 0x94, 0x0c, 0x69, + 0x82, 0xfc, 0x87, 0x1d, 0x09, 0x1e, 0x8c, 0x9c, 0xa3, 0xe8, 0x32, 0xd6, 0x5c, 0x00, 0x36, 0x68, + 0x12, 0xea, 0x33, 0xef, 0xe8, 0x48, 0x6d, 0x73, 0x9a, 0xaa, 0x04, 0xc9, 0xd6, 0x4c, 0x33, 0x84, + 0x39, 0x18, 0x60, 0xdd, 0x58, 0xe7, 0x75, 0xab, 0xb9, 0x57, 0x9f, 0x53, 0x98, 0xb0, 0x2d, 0x6d, + 0x4c, 0x4a, 0xfb, 0xa3, 0xa1, 0x6a, 0x50, 0x3f, 0x95, 0xe5, 0x9a, 0x89, 0x24, 0xa1, 0xf0, 0x01, + 0x93, 0xb7, 0xea, 0x85, 0x62, 0x1d, 0x37, 0xd1, 0x69, 0x3a, 0x29, 0xd3, 0xaf, 0xc4, 0xf0, 0xea, + 0x6d, 0x1b, 0x43, 0xfa, 0x7b, 0x21, 0x12, 0xd0, 0x23, 0x41, 0x0e, 0x39, 0x5f, 0x39, 0xf8, 0x7a, + 0xd2, 0xc6, 0xee, 0x38, 0xcf, 0xb7, 0x6a, 0x45, 0x99, 0xb2, 0x76, 0x58, 0x44, 0x6e, 0x61, 0x05, + 0x80, 0x4b, 0x4a, 0x8c, 0x0e, 0x5b, 0x33, 0xfe, 0x3f, 0x2a, 0xe1, 0x78, 0x07, 0x6f, 0x0f, 0x1f, + 0x30, 0x86, 0x31, 0x48, 0x0b, 0x87, 0x20, 0x2f, 0x7d, 0x0c, 0x14, 0x65, 0x45, 0x22, 0x69, 0x74, + 0x04, 0x73, 0x36, 0x63, 0x62, 0x97, 0xf5, 0xc4, 0x3c, 0xd9, 0xc3, 0xf1, 0xa4, 0xcb, 0xf2, 0x86, + 0x70, 0x40, 0x35, 0x0f, 0xc7, 0x5f, 0xa1, 0xc7, 0x37, 0xc4, 0x74, 0xbd, 0x4b, 0x51, 0xd6, 0x22, + 0xf7, 0x61, 0xe9, 0x8e, 0x6e, 0x78, 0xcf, 0x8c, 0xcf, 0x9a, 0x0c, 0x3e, 0x36, 0x69, 0xad, 0x4a, + 0x8d, 0x4d, 0x9f, 0x45, 0xb0, 0x65, 0xaa, 0xe3, 0x2b, 0xbe, 0xb1, 0x89, 0x58, 0xb4, 0xae, 0x40, + 0x82, 0xaf, 0x31, 0xd1, 0x69, 0xd3, 0x1a, 0x25, 0x3a, 0x16, 0x9f, 0x39, 0x8c, 0xd0, 0xe5, 0xb2, + 0x61, 0xbb, 0x76, 0x5c, 0x67, 0xbd, 0x0c, 0x09, 0x17, 0xf3, 0x61, 0x0b, 0x38, 0xba, 0x11, 0xd9, + 0xdc, 0xb5, 0x66, 0x54, 0x5f, 0x3b, 0xb5, 0x77, 0xc2, 0xdb, 0xe7, 0xd1, 0x50, 0x6c, 0x02, 0x31, + 0xee, 0xb5, 0xfa, 0x36, 0x8b, 0x3e, 0x4b, 0x77, 0xac, 0xf6, 0x03, 0x7b, 0x1b, 0x73, 0x3f, 0x93, + 0xf9, 0x94, 0xab, 0x70, 0x0f, 0x6d, 0xf4, 0x8d, 0x59, 0x07, 0x5d, 0xef, 0x7e, 0xec, 0xbe, 0xdf, + 0x99, 0x63, 0xd3, 0x68, 0x32, 0x8f, 0x48, 0x4a, 0x78, 0xc7, 0xea, 0xe0, 0xfb, 0xf1, 0x1b, 0xbf, + 0x6d, 0x83, 0x68, 0x93, 0x94, 0x1b, 0xb6, 0xfa, 0x3c, 0x14, 0x9d, 0x97, 0xac, 0x45, 0x03, 0xd0, + 0xb4, 0x48, 0xf4, 0xb6, 0x50, 0x10, 0x5e, 0x1d, 0x0c, 0xb7, 0xee, 0x19, 0xb7, 0xc0, 0xe8, 0xb0, + 0xb8, 0xbd, 0x63, 0x8b, 0x48, 0xef, 0x7e, 0x48, 0x0e, 0x3f, 0x8f, 0xc9, 0x67, 0x3a, 0xe7, 0xbd, + 0x98, 0x1c, 0x86, 0x3b, 0xc6, 0x7f, 0x0a, 0xc8, 0x0e, 0x1e, 0x54, 0x41, 0xbd, 0x2f, 0x95, 0x50, + 0xe3, 0x08, 0xb5, 0x88, 0x16, 0x9d, 0xe1, 0xed, 0xcb, 0x95, 0x2f, 0xcd, 0xab, 0x5f, 0xce, 0x5e, + 0xbf, 0x7d, 0x7d, 0x3e, 0x3d, 0x6b, 0xfa, 0x06, 0xe8, 0xd6, 0x50, 0x8f, 0xb9, 0xf7, 0x44, 0xe4, + 0xc3, 0xd1, 0xa3, 0x4b, 0x58, 0x43, 0xb5, 0xb7, 0xe5, 0x15, 0x82, 0x48, 0xe3, 0xf7, 0x1a, 0xdd, + 0x04, 0x0d, 0x70, 0xbe, 0x4b, 0x23, 0x0c, 0x5c, 0x6e, 0xe4, 0x9e, 0x27, 0xc6, 0xf6, 0xa2, 0xe7, + 0xd5, 0x9d, 0x4d, 0xae, 0xa3, 0xb6, 0x2e, 0x5f, 0xdc, 0x43, 0xf7, 0xe1, 0x86, 0xba, 0xad, 0x27, + 0x47, 0x22, 0xe0, 0x19, 0x55, 0x7e, 0x8a, 0xde, 0x14, 0x75, 0x55, 0x73, 0x3c, 0xc3, 0x05, 0xab, + 0x2b, 0x95, 0xb6, 0x1c, 0xba, 0x1f, 0x2d, 0xd0, 0x82, 0xb3, 0x7a, 0x16, 0xe1, 0xd6, 0x38, 0xbc, + 0xd4, 0xba, 0xc4, 0x6c, 0x58, 0xa3, 0xd3, 0x0d, 0x69, 0x20, 0x1c, 0xa2, 0x75, 0x0b, 0xb3, 0xa0, + 0x1f, 0x53, 0xde, 0xcd, 0x72, 0xf4, 0x4b, 0x3e, 0xa6, 0xd7, 0x97, 0x97, 0x94, 0x0d, 0x3d, 0x76, + 0x23, 0x0d, 0xf1, 0x0d, 0xdb, 0x8f, 0x0e, 0x1e, 0x45, 0xfb, 0x7b, 0xb3, 0x83, 0x1f, 0xa3, 0xc3, + 0x03, 0xf6, 0xdf, 0x7f, 0xff, 0x87, 0x30, 0x18, 0x24, 0x01, 0x3b, 0xdc, 0x3f, 0x7c, 0xc8, 0xbe, + 0xa8, 0xf1, 0x58, 0x99, 0x44, 0x6b, 0xbd, 0x54, 0xb2, 0x51, 0x48, 0x77, 0x57, 0xb8, 0x31, 0x2c, + 0x84, 0x2a, 0xa3, 0x28, 0xda, 0x31, 0xe8, 0x88, 0xd6, 0x8f, 0x0a, 0xb4, 0x0c, 0xe4, 0xc7, 0x5d, + 0xab, 0x7e, 0xf6, 0x12, 0xd9, 0xce, 0xf6, 0x66, 0xa0, 0x7d, 0xae, 0x0b, 0x0c, 0x56, 0xec, 0xb8, + 0xc6, 0x24, 0x68, 0xb6, 0x05, 0x8d, 0xbf, 0x39, 0xf1, 0x20, 0x30, 0xfe, 0x26, 0xeb, 0xee, 0x87, + 0xe3, 0x68, 0x23, 0xf7, 0x5b, 0x64, 0xad, 0xd4, 0x52, 0x0d, 0xfd, 0x9d, 0x89, 0xae, 0x0a, 0xb0, + 0x6e, 0x0f, 0x3d, 0x61, 0x2f, 0x31, 0x32, 0x55, 0x54, 0xa4, 0x9f, 0xb8, 0xb8, 0xbb, 0x15, 0x33, + 0x8b, 0xa4, 0xdb, 0x1f, 0xf8, 0x5f, 0xc9, 0xa6, 0x99, 0xd8, 0x4a, 0x26, 0x0a, 0x9c, 0xeb, 0xd0, + 0x17, 0x97, 0x1b, 0x4f, 0x7b, 0xc7, 0x2c, 0xab, 0xd1, 0x36, 0xfd, 0x5b, 0x3f, 0x19, 0xa0, 0x01, + 0xe2, 0xce, 0x63, 0xd6, 0xb8, 0x84, 0xa3, 0x63, 0x6b, 0x46, 0x63, 0x2f, 0x72, 0x05, 0xcd, 0xa1, + 0xf9, 0x7d, 0xc6, 0xe3, 0xd6, 0xef, 0x50, 0xea, 0x35, 0x51, 0x3c, 0xf8, 0x69, 0xcf, 0x87, 0xf2, + 0x79, 0x66, 0x70, 0xc3, 0x55, 0xe8, 0x1e, 0x93, 0x24, 0x5b, 0xd1, 0xef, 0x03, 0x6d, 0xb3, 0xbe, + 0x40, 0x1b, 0xc7, 0xd5, 0x0b, 0x39, 0x07, 0xa3, 0x9a, 0x59, 0xe3, 0x9b, 0xc0, 0x98, 0xe5, 0x7a, + 0x86, 0x98, 0xe3, 0xf6, 0x6c, 0x86, 0x17, 0xe7, 0xcf, 0xcf, 0x5e, 0x4d, 0xce, 0x3e, 0xc5, 0xba, + 0x77, 0x79, 0x3e, 0x65, 0x79, 0xa3, 0xc9, 0x3b, 0x88, 0x06, 0xdf, 0x19, 0x3a, 0x91, 0x06, 0x5e, + 0xc1, 0x0d, 0x6b, 0x31, 0x26, 0xa0, 0xa1, 0xe0, 0xae, 0x5a, 0x76, 0x4c, 0x68, 0x55, 0xc5, 0x89, + 0xb3, 0xfc, 0x3d, 0x9e, 0xf9, 0xab, 0x39, 0xb5, 0x3a, 0xda, 0xd2, 0xf4, 0x15, 0xe2, 0x09, 0x62, + 0xc9, 0xe6, 0xb7, 0x8f, 0x2f, 0x0e, 0xf5, 0x9f, 0xce, 0xf4, 0xbd, 0x6f, 0x1a, 0xea, 0x87, 0xd4, + 0x6d, 0xf1, 0x41, 0x77, 0x19, 0xba, 0xd8, 0xd0, 0xcf, 0xab, 0xff, 0x03, 0x77, 0xd3, 0x48, 0xa2, + 0x6e, 0x15, 0x00, 0x00 }; diff --git a/wled00/html_ui.h b/wled00/html_ui.h index a86e2ab5..e425d2b9 100644 --- a/wled00/html_ui.h +++ b/wled00/html_ui.h @@ -7,7 +7,7 @@ */ // Autogenerated from wled00/data/index.htm, do not edit!! -const uint16_t PAGE_index_L = 35706; +const uint16_t PAGE_index_L = 35710; const uint8_t PAGE_index[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd4, 0xbd, 0x69, 0x7a, 0xe3, 0xb8, 0xb2, 0x20, 0xfa, 0xdf, 0xab, 0x60, 0x32, 0xab, 0x9c, 0x52, 0x89, 0x96, 0xa8, 0x79, 0x4a, 0xd9, @@ -1123,1122 +1123,1122 @@ const uint8_t PAGE_index[] PROGMEM = { 0x5e, 0x5e, 0x28, 0x77, 0xa4, 0x83, 0xb2, 0x47, 0xb9, 0xbb, 0xab, 0xd1, 0x14, 0x7c, 0xc0, 0x57, 0xac, 0xa5, 0x80, 0xd8, 0x1d, 0xd1, 0x81, 0xa4, 0x75, 0xb2, 0x6e, 0xa5, 0xb6, 0x42, 0x3f, 0x48, 0xc5, 0xed, 0x8d, 0xba, 0xb8, 0x5b, 0x11, 0x5f, 0x5a, 0x74, 0x4b, 0x9f, 0x8d, 0x0c, 0x7d, 0x65, - 0xa1, 0xad, 0x4e, 0x2e, 0x9d, 0xfb, 0x6b, 0x70, 0x69, 0x95, 0x28, 0x74, 0x5c, 0x54, 0xc7, 0x20, - 0xd5, 0xb1, 0xc6, 0x82, 0x63, 0xd7, 0x03, 0x7c, 0x87, 0xa5, 0xef, 0xb7, 0xb9, 0xb9, 0xe0, 0xd9, - 0x09, 0xe2, 0xed, 0x04, 0x6e, 0xcd, 0x9e, 0x9f, 0xff, 0xa7, 0x57, 0x0c, 0x1f, 0x4c, 0xa2, 0x2e, - 0xd2, 0x1d, 0x45, 0x4b, 0xd2, 0x63, 0xc4, 0xf0, 0x7f, 0x32, 0xdc, 0xc6, 0x83, 0x34, 0x32, 0xcd, - 0x1d, 0x2b, 0x32, 0x2c, 0xdc, 0x90, 0x44, 0x73, 0xe9, 0x77, 0x20, 0x61, 0xad, 0xf8, 0x6d, 0xae, - 0x2f, 0xf0, 0x2f, 0xc6, 0x39, 0x34, 0xf4, 0x1d, 0x9e, 0xaf, 0x7d, 0xf3, 0xbc, 0xad, 0xba, 0x8a, - 0xc7, 0x40, 0x1a, 0xb9, 0xed, 0xef, 0x03, 0xd3, 0xf5, 0xa1, 0xb8, 0xa7, 0x85, 0xfc, 0xcf, 0xd4, - 0xb3, 0xa3, 0x44, 0x62, 0x9d, 0xc5, 0xee, 0xb7, 0x89, 0x44, 0xef, 0xa2, 0x5e, 0xfe, 0x9c, 0x28, - 0xe4, 0xd0, 0x5b, 0xa0, 0xa9, 0x57, 0xc0, 0xf1, 0xca, 0x7e, 0xa3, 0x6d, 0xe7, 0x8a, 0xa5, 0x4d, - 0xdc, 0x7b, 0xb3, 0x77, 0xdc, 0xe1, 0xe7, 0x2f, 0x40, 0xf7, 0xb9, 0x82, 0xe5, 0xc2, 0xc6, 0xa3, - 0x8d, 0xbc, 0xf0, 0x6d, 0xa5, 0x2e, 0x1b, 0xbc, 0xc8, 0x21, 0xb0, 0x79, 0x38, 0xff, 0xd7, 0x37, - 0x8d, 0xd8, 0x7b, 0xa4, 0x33, 0xea, 0xff, 0xeb, 0x5b, 0xed, 0x5b, 0x2a, 0x91, 0xcd, 0x55, 0x9c, - 0x36, 0xf8, 0x9e, 0x04, 0x4b, 0x08, 0xa8, 0x09, 0x74, 0x83, 0x2f, 0x99, 0xfa, 0x46, 0xb5, 0xd8, - 0xe8, 0x22, 0x1e, 0xae, 0x02, 0x06, 0x79, 0x8d, 0xde, 0x23, 0x0c, 0xc5, 0xfd, 0xcf, 0xec, 0x85, - 0x4e, 0xa9, 0x7d, 0x43, 0x4f, 0x39, 0xed, 0x0e, 0x2e, 0x7f, 0xa6, 0x22, 0xa9, 0x97, 0xf4, 0xeb, - 0x87, 0x5e, 0x9f, 0xc2, 0xc9, 0x02, 0x7f, 0xfb, 0xd8, 0xc0, 0x98, 0x61, 0xeb, 0xf6, 0x51, 0xe0, - 0xeb, 0xdc, 0x8d, 0xf3, 0x76, 0xf3, 0xe8, 0xc1, 0xf1, 0xc9, 0xf2, 0xef, 0x0d, 0xc9, 0x21, 0x5e, - 0xc7, 0xa0, 0xdd, 0xe8, 0xf2, 0xf2, 0x98, 0x78, 0x59, 0xa1, 0x41, 0x71, 0x11, 0xf0, 0x46, 0x63, - 0x17, 0x99, 0x88, 0x17, 0x28, 0x0f, 0x25, 0xc3, 0x59, 0xfb, 0xb0, 0xac, 0x0e, 0xe9, 0x69, 0x50, - 0xe7, 0xa8, 0x0b, 0x08, 0xd9, 0x48, 0x91, 0x26, 0x30, 0x28, 0x28, 0x05, 0xdc, 0xc1, 0x55, 0x1b, - 0x61, 0x50, 0x31, 0xd5, 0x33, 0xac, 0x48, 0xa9, 0xb6, 0xd2, 0x07, 0xa3, 0x8b, 0x1e, 0x4e, 0x42, - 0xf3, 0x08, 0x4b, 0x4e, 0x94, 0x9e, 0x92, 0xb6, 0x68, 0x7a, 0x8a, 0xff, 0x9d, 0xa3, 0x21, 0xd7, - 0x34, 0xcd, 0xb4, 0x2c, 0x45, 0xe0, 0x39, 0x79, 0x77, 0x08, 0xab, 0x59, 0x18, 0xcc, 0x9d, 0x81, - 0xdb, 0x2e, 0xbc, 0x10, 0xd9, 0x82, 0x49, 0x8f, 0x68, 0x7a, 0x12, 0x4b, 0xff, 0x6b, 0x9a, 0xef, - 0x7e, 0xd9, 0xda, 0xe2, 0xd8, 0x14, 0xe2, 0x3a, 0xf8, 0x31, 0xde, 0xad, 0x2d, 0x48, 0x25, 0x1c, - 0xe8, 0x4e, 0xff, 0x65, 0xcc, 0x7f, 0x18, 0x65, 0xfe, 0x10, 0xde, 0x18, 0x82, 0x61, 0xcd, 0x2c, - 0x50, 0x9a, 0xb0, 0xe7, 0xb0, 0x52, 0x8e, 0xc0, 0x5a, 0xc6, 0x0e, 0xc3, 0xa3, 0x0d, 0x22, 0xf7, - 0x75, 0x17, 0xfb, 0x1f, 0x10, 0xc6, 0xb0, 0x7e, 0xfc, 0xc1, 0x0a, 0x66, 0x58, 0x21, 0x10, 0xcc, - 0xbf, 0xbb, 0xe4, 0xd0, 0x60, 0x29, 0xf1, 0x40, 0x1f, 0xc1, 0x62, 0xc2, 0xa6, 0x11, 0x98, 0x96, - 0xfe, 0xfa, 0xb2, 0xe5, 0x2f, 0x46, 0xc9, 0x4c, 0x68, 0x41, 0x10, 0x93, 0xb4, 0x6d, 0x2d, 0x94, - 0x00, 0x18, 0xf0, 0x40, 0xf3, 0x30, 0x12, 0x2b, 0xe1, 0x01, 0x7a, 0x7f, 0x68, 0x49, 0x07, 0x25, - 0x7f, 0x62, 0x0c, 0x01, 0x29, 0xa7, 0x8c, 0x8f, 0xdf, 0xb9, 0x34, 0xc5, 0x63, 0x67, 0x32, 0x37, - 0x58, 0x89, 0x68, 0xa0, 0x5e, 0x04, 0xd7, 0xec, 0x27, 0x51, 0x0b, 0x41, 0x88, 0xc5, 0xce, 0x1f, - 0x0a, 0x28, 0x47, 0x71, 0x81, 0xc5, 0x5c, 0xa0, 0xc0, 0x23, 0x3c, 0x76, 0x80, 0x2b, 0x31, 0xd7, - 0x56, 0xde, 0x09, 0xc3, 0x56, 0x75, 0x4b, 0x71, 0x9c, 0xc3, 0x5b, 0x0e, 0x6b, 0xa1, 0x87, 0xb5, - 0x69, 0x0f, 0xf4, 0x21, 0x63, 0x2f, 0x46, 0x03, 0xdb, 0x30, 0xa5, 0xa1, 0xdf, 0xfb, 0xab, 0xf6, - 0x4d, 0xf3, 0xdc, 0xe9, 0xb5, 0x93, 0x99, 0xc1, 0x8f, 0xb9, 0x06, 0xbb, 0xe8, 0xc0, 0xf7, 0xe9, - 0x68, 0x58, 0x08, 0xc3, 0x29, 0xbe, 0xe5, 0xbc, 0x6f, 0x67, 0x4b, 0xf9, 0x4a, 0xde, 0x87, 0x8c, - 0x3b, 0x51, 0x5c, 0x10, 0x7c, 0x22, 0x52, 0x21, 0xb9, 0xb2, 0xa1, 0x95, 0x30, 0x22, 0x10, 0xa0, - 0x7c, 0x04, 0x2f, 0x1c, 0xc8, 0x28, 0x6e, 0x4e, 0x5a, 0x14, 0x3f, 0x6f, 0xdc, 0x57, 0xe2, 0xe8, - 0x54, 0xfc, 0x04, 0x9e, 0x71, 0xb0, 0x62, 0x20, 0x2d, 0xe3, 0x1b, 0x1a, 0x0b, 0x3a, 0xf2, 0x14, - 0x02, 0x1d, 0x0c, 0x9a, 0xfb, 0xd1, 0x60, 0xf8, 0x28, 0x34, 0x5b, 0x1c, 0xe8, 0x8e, 0x78, 0xc0, - 0x14, 0xdb, 0x1e, 0x4a, 0xdd, 0xa8, 0xa8, 0xd4, 0xc6, 0x8a, 0xa9, 0x6b, 0x43, 0x2a, 0x24, 0x49, - 0x1a, 0xef, 0xa0, 0xa1, 0xdb, 0xae, 0x18, 0xe6, 0x66, 0x92, 0x14, 0xcf, 0x04, 0x9c, 0x3a, 0x51, - 0x0c, 0x3c, 0x46, 0x82, 0x95, 0xff, 0x9b, 0x85, 0x11, 0x49, 0x93, 0x7c, 0x0e, 0x4f, 0xca, 0xaa, - 0x81, 0x45, 0xcb, 0x4d, 0x02, 0xfc, 0x1c, 0xaa, 0x42, 0x0a, 0x22, 0x8c, 0x9b, 0xcc, 0xf8, 0x9b, - 0xb0, 0x92, 0x38, 0xfb, 0x10, 0x77, 0xc8, 0xa1, 0xb7, 0x86, 0x42, 0xce, 0xf9, 0xe0, 0x3d, 0x48, - 0x68, 0xc8, 0xa1, 0xfa, 0xeb, 0x4e, 0x64, 0x12, 0x39, 0xb5, 0x68, 0x5e, 0x8a, 0x3f, 0xdf, 0x65, - 0x07, 0x75, 0x83, 0xa9, 0x98, 0x10, 0x78, 0xc5, 0xfd, 0x84, 0x10, 0x2a, 0x34, 0x95, 0xb6, 0x2a, - 0xc4, 0xb5, 0x8a, 0x47, 0xc5, 0xfc, 0x46, 0xd1, 0x0f, 0xce, 0xed, 0xb7, 0xaf, 0xb8, 0x1b, 0x42, - 0xd5, 0xc8, 0x50, 0x97, 0x64, 0x92, 0xf2, 0xba, 0x81, 0xcd, 0x44, 0x01, 0x99, 0x44, 0x0c, 0x43, - 0x6b, 0x61, 0x12, 0x67, 0x02, 0x48, 0x93, 0x48, 0xa0, 0x75, 0x44, 0x08, 0x44, 0x4b, 0xfb, 0x94, - 0xa1, 0x49, 0xf1, 0x70, 0xb3, 0xcb, 0x70, 0xb3, 0xab, 0xe1, 0x66, 0x97, 0xe1, 0x66, 0x03, 0x70, - 0x23, 0xcb, 0x1b, 0x81, 0x61, 0xf7, 0x16, 0xb7, 0x0c, 0x53, 0xfb, 0x7e, 0xb1, 0x5d, 0x93, 0xd7, - 0x71, 0xd8, 0xde, 0xa5, 0x6e, 0x2a, 0xea, 0x75, 0xc2, 0xed, 0x1e, 0xbf, 0xc8, 0x8a, 0xb3, 0x62, - 0x91, 0x9b, 0x03, 0x93, 0x2c, 0xba, 0xd5, 0x3d, 0x95, 0xe4, 0x6e, 0x53, 0x39, 0x35, 0xdb, 0x0a, - 0xc6, 0xce, 0xf4, 0xeb, 0xb6, 0x7b, 0xde, 0xc2, 0xb9, 0xb9, 0x30, 0x18, 0xf0, 0xe8, 0xda, 0x54, - 0xee, 0x25, 0x3c, 0x41, 0xbb, 0x8a, 0x7a, 0xc3, 0xac, 0x86, 0x6b, 0xc6, 0x7b, 0x1e, 0x35, 0x3c, - 0xd6, 0x9c, 0x08, 0x9e, 0xa3, 0x0d, 0x1f, 0x9e, 0x75, 0xce, 0xcc, 0x7a, 0x47, 0xfc, 0xa8, 0xfa, - 0x01, 0x8f, 0x31, 0x07, 0xfd, 0xe8, 0x76, 0x6a, 0xdf, 0x71, 0xca, 0xb9, 0x10, 0x53, 0x29, 0xda, - 0xb0, 0xea, 0xbb, 0xe1, 0xb4, 0x34, 0xe8, 0x40, 0x75, 0x1a, 0xd2, 0xe5, 0xb7, 0x44, 0xfd, 0x25, - 0x81, 0x86, 0xd5, 0x14, 0xda, 0x6d, 0xdb, 0xd8, 0x3a, 0x66, 0x21, 0x12, 0x6a, 0x92, 0x42, 0x92, - 0xd8, 0x5e, 0x2e, 0xc0, 0xe7, 0x53, 0x6a, 0x12, 0x4c, 0xb5, 0x2f, 0x5f, 0x24, 0x8c, 0x8b, 0x88, - 0x0f, 0x62, 0xf1, 0x3c, 0xa0, 0x7f, 0xfe, 0x89, 0x67, 0xef, 0xd4, 0xcd, 0xcd, 0xe0, 0xc1, 0x18, - 0xc8, 0x46, 0xa0, 0xa1, 0x8e, 0x30, 0xa7, 0x1f, 0x60, 0xa9, 0xed, 0xc0, 0xbf, 0x1a, 0x2f, 0xb3, - 0x30, 0x43, 0x74, 0xbe, 0xb3, 0x8d, 0x25, 0x86, 0x86, 0xee, 0xf8, 0xed, 0x1c, 0x1f, 0x92, 0xf1, - 0xdb, 0x5c, 0x5d, 0xf8, 0x17, 0x52, 0x75, 0x2c, 0x9e, 0xee, 0xd5, 0xad, 0xf0, 0x6c, 0x81, 0x8d, - 0x09, 0x16, 0x85, 0x96, 0xd6, 0xb5, 0x1d, 0xb4, 0xac, 0x79, 0xe6, 0x25, 0xf6, 0xdc, 0x51, 0xea, - 0x02, 0x0a, 0x84, 0x7d, 0x7f, 0x40, 0x80, 0xab, 0x89, 0x99, 0xc0, 0xbc, 0x64, 0x58, 0x7f, 0xa6, - 0xcd, 0xac, 0xbe, 0x2e, 0x93, 0xed, 0x18, 0x06, 0xae, 0x2e, 0x65, 0x0d, 0xd0, 0xcf, 0x92, 0xad, - 0xbd, 0x33, 0x13, 0x5a, 0xc4, 0x63, 0x69, 0xac, 0xc5, 0xbf, 0x72, 0x7d, 0xe9, 0x8a, 0x0f, 0xdb, - 0x62, 0x7f, 0xa1, 0x55, 0xe8, 0x67, 0xc6, 0x41, 0xea, 0xa3, 0xab, 0x4c, 0x69, 0xcf, 0x3c, 0x1f, - 0xa1, 0xe3, 0x92, 0x33, 0x1b, 0x1a, 0x33, 0x60, 0x85, 0x2e, 0x7d, 0xd2, 0x0d, 0x41, 0x76, 0x93, - 0x9e, 0x04, 0xc3, 0x49, 0x7b, 0x12, 0xfa, 0x30, 0x3e, 0xec, 0xfa, 0xc3, 0xd0, 0xa5, 0x87, 0x30, - 0xa7, 0xd8, 0xfd, 0xdd, 0x37, 0xb8, 0x59, 0x6c, 0x11, 0x0e, 0xdd, 0xa8, 0xe7, 0x68, 0xb5, 0xf1, - 0xb2, 0x62, 0xb2, 0x38, 0x00, 0x7e, 0xb1, 0xe2, 0x52, 0xef, 0x00, 0xfd, 0x00, 0x4e, 0x84, 0x5e, - 0x00, 0xd0, 0x25, 0x16, 0x76, 0x15, 0x0a, 0xec, 0xf0, 0xce, 0x05, 0x86, 0x74, 0x7c, 0xb7, 0x3f, - 0xb8, 0xb7, 0xd1, 0xbd, 0xc0, 0xf0, 0x97, 0x30, 0xfa, 0x00, 0xf5, 0x73, 0x05, 0x7d, 0x7c, 0x1f, - 0xe3, 0x38, 0x8c, 0x7e, 0xa5, 0xf8, 0x5c, 0x09, 0x62, 0x38, 0x54, 0xfe, 0x2e, 0x82, 0x3d, 0x74, - 0xd3, 0x0c, 0xa8, 0xe7, 0xc2, 0x3a, 0xdf, 0xdc, 0x34, 0xbf, 0x0f, 0x27, 0x7f, 0x0c, 0x07, 0x30, - 0x09, 0x7b, 0x9f, 0x23, 0xfa, 0x27, 0xc8, 0xfb, 0xb4, 0x4c, 0xdd, 0xa7, 0x10, 0x79, 0x9f, 0xfe, - 0x2e, 0xf2, 0x83, 0x7f, 0x8a, 0xba, 0x4f, 0x4b, 0xd4, 0x0d, 0x61, 0x38, 0xfc, 0xbb, 0x18, 0x32, - 0xf9, 0x32, 0x0e, 0xcb, 0x17, 0xda, 0xa2, 0x64, 0xe0, 0x0d, 0x24, 0xf4, 0x6a, 0x79, 0x78, 0x6e, - 0xf0, 0x4e, 0x82, 0xbb, 0xab, 0xd5, 0x51, 0xb7, 0x2c, 0xe7, 0x3e, 0xcf, 0x7d, 0x2a, 0xf7, 0xb8, - 0xec, 0x1e, 0x77, 0xf0, 0xe8, 0xc7, 0x0d, 0x04, 0x27, 0x1c, 0x51, 0xb7, 0x0c, 0x68, 0x9b, 0x85, - 0xc2, 0x84, 0x53, 0x43, 0x6d, 0x66, 0x73, 0xd1, 0x6e, 0x66, 0x73, 0xae, 0x18, 0xa2, 0x50, 0xb9, - 0xef, 0xce, 0xfd, 0xb2, 0xfe, 0x97, 0x8e, 0x7f, 0x9b, 0x83, 0xac, 0x05, 0x0a, 0x64, 0x73, 0x3b, - 0x18, 0xa4, 0xc6, 0x6e, 0x75, 0x60, 0x44, 0xb8, 0x02, 0x1d, 0x50, 0xb5, 0xbe, 0x67, 0x58, 0x9d, - 0x78, 0x08, 0x59, 0x84, 0x90, 0x5d, 0x05, 0x61, 0x57, 0x32, 0xd7, 0x57, 0xcf, 0x61, 0xf5, 0xdc, - 0xaa, 0xea, 0x4d, 0xb3, 0xbb, 0xbe, 0x7a, 0x1e, 0xab, 0xe7, 0x57, 0x55, 0x6f, 0xd1, 0xcb, 0x4d, - 0xd6, 0x43, 0x28, 0x20, 0x84, 0xc2, 0x2a, 0x08, 0x2f, 0xe7, 0xcc, 0x46, 0x5b, 0x0f, 0xa3, 0x88, - 0x30, 0x8a, 0x2b, 0xb1, 0x50, 0xcc, 0xae, 0x4a, 0x3e, 0x86, 0x52, 0x42, 0x28, 0xa5, 0x95, 0x94, - 0xc4, 0xa3, 0xa0, 0xcb, 0x40, 0x80, 0x1f, 0x69, 0xb1, 0x25, 0x29, 0xfc, 0x4b, 0x18, 0x3a, 0x4c, - 0x49, 0x59, 0xd0, 0xd2, 0x90, 0x4d, 0x94, 0x58, 0xfe, 0x6b, 0xa3, 0xb2, 0xcc, 0x59, 0xca, 0xf0, - 0xdf, 0x62, 0x3e, 0x2b, 0x2a, 0xc0, 0xda, 0xca, 0x27, 0x59, 0xcf, 0x52, 0x96, 0x7b, 0x4b, 0x24, - 0xa8, 0xaf, 0x7d, 0x96, 0xf5, 0x62, 0x20, 0x3c, 0x90, 0x07, 0x45, 0x55, 0x6f, 0x80, 0x68, 0x4f, - 0xfa, 0xe8, 0xb3, 0x3c, 0x18, 0x03, 0xe7, 0x2e, 0x2b, 0xfe, 0x67, 0xfe, 0xb3, 0x4c, 0x18, 0x5b, - 0xbf, 0x10, 0xad, 0xbf, 0x66, 0xcc, 0x8e, 0x1b, 0x34, 0xb0, 0x01, 0xb7, 0xe4, 0x65, 0x76, 0x46, - 0x03, 0x28, 0xdc, 0xf0, 0x2f, 0x5e, 0x49, 0xd2, 0x6d, 0x1c, 0xa1, 0x13, 0xb7, 0xdd, 0xbd, 0x74, - 0xff, 0x54, 0x6b, 0x9f, 0xdd, 0xaf, 0x94, 0xf8, 0x86, 0x22, 0x2e, 0xa2, 0x21, 0x2d, 0xbe, 0xe1, - 0x69, 0x73, 0x3a, 0x3c, 0xcd, 0x9b, 0xdb, 0xe3, 0xad, 0x83, 0x47, 0x8e, 0x95, 0x0e, 0xdd, 0xae, - 0x86, 0x1c, 0xf1, 0xab, 0x1e, 0xdd, 0xf7, 0x84, 0x11, 0xa7, 0x7b, 0x73, 0x08, 0x00, 0x63, 0x73, - 0x86, 0xa8, 0xbf, 0x91, 0xfe, 0x0e, 0x1f, 0xea, 0x3a, 0xae, 0xd6, 0x3b, 0xbe, 0x52, 0xb7, 0xa4, - 0x36, 0x51, 0xbe, 0x88, 0x93, 0xee, 0xec, 0x03, 0x39, 0x8e, 0x4a, 0xf6, 0x91, 0x64, 0xb7, 0x9c, - 0x7b, 0x1c, 0x3d, 0xbe, 0x43, 0xf5, 0x33, 0x28, 0xda, 0x21, 0x25, 0x22, 0xdb, 0x29, 0xe0, 0xf5, - 0xf2, 0x9d, 0xea, 0x30, 0x4c, 0xc4, 0xaf, 0xd9, 0xf2, 0x34, 0xdf, 0x43, 0xa8, 0xd0, 0x77, 0x7f, - 0xc3, 0x13, 0x8f, 0x18, 0x50, 0xbb, 0x00, 0x7e, 0x9d, 0xe3, 0x2f, 0x89, 0x64, 0xdd, 0xff, 0x56, - 0x07, 0xc5, 0xb1, 0x4e, 0xf5, 0x43, 0xc4, 0x13, 0x6a, 0xef, 0x58, 0xce, 0x4e, 0x15, 0xfb, 0x05, - 0xb0, 0xa0, 0x04, 0x03, 0x09, 0x0b, 0x59, 0x3c, 0x9d, 0x8e, 0x17, 0xae, 0xe3, 0x4f, 0x3e, 0x57, - 0xe4, 0x17, 0x71, 0xbb, 0xa6, 0x50, 0x7e, 0x69, 0x1f, 0x1a, 0xa9, 0xb1, 0x3f, 0x0d, 0x4e, 0xc4, - 0x00, 0x2f, 0x38, 0x96, 0x07, 0x98, 0x56, 0xea, 0x22, 0x56, 0x01, 0x5e, 0xde, 0x3a, 0x76, 0xba, - 0xba, 0x7a, 0xf3, 0x58, 0x8d, 0x6e, 0x1c, 0x7b, 0xea, 0xe0, 0xa7, 0xf7, 0x8e, 0xd5, 0xd8, 0x7d, - 0x63, 0x35, 0x66, 0xcf, 0xf8, 0xb7, 0x79, 0xf4, 0xe4, 0xbc, 0xce, 0xac, 0xc2, 0x28, 0x5d, 0x14, - 0x2d, 0x84, 0x3e, 0xbc, 0x06, 0xd9, 0x2b, 0x38, 0x86, 0xd3, 0x90, 0x0e, 0xdc, 0x9b, 0x2e, 0x5c, - 0x05, 0x99, 0xdd, 0x79, 0xc2, 0x67, 0xb6, 0xc3, 0x5e, 0x2f, 0xd7, 0xd7, 0xc5, 0xc5, 0x7d, 0x9c, - 0xcb, 0xdd, 0xce, 0xb6, 0xa7, 0x76, 0xa8, 0x7d, 0x3b, 0xf6, 0xa3, 0x7d, 0xfe, 0x37, 0xfb, 0xf2, - 0xb9, 0x20, 0x12, 0xce, 0x68, 0xe1, 0xf4, 0x09, 0x5d, 0x38, 0x4c, 0x3f, 0x00, 0xc8, 0xe1, 0x90, - 0xa7, 0xd3, 0x69, 0x9e, 0x29, 0xea, 0x6c, 0xa7, 0xc3, 0xa3, 0x32, 0xd8, 0x8e, 0xf4, 0x8a, 0x67, - 0xdb, 0xe9, 0xaf, 0xed, 0x0a, 0x78, 0x5b, 0xa6, 0x31, 0x09, 0xbe, 0x42, 0xb8, 0xc3, 0xb7, 0xa9, - 0x8b, 0xe0, 0x11, 0xc3, 0x3c, 0xe9, 0x13, 0x74, 0x8f, 0x67, 0x21, 0xe5, 0xab, 0xaa, 0x04, 0x89, - 0x0f, 0x98, 0xef, 0xf0, 0x0f, 0xe8, 0x92, 0xa1, 0x00, 0x74, 0x03, 0x21, 0x2d, 0x15, 0x60, 0x77, - 0x0a, 0x82, 0xa5, 0xe9, 0x16, 0xfa, 0xb8, 0x11, 0xd4, 0xf6, 0x2f, 0x7b, 0x3d, 0x3c, 0xe6, 0xea, - 0x17, 0x74, 0x9c, 0x38, 0x91, 0x1e, 0x39, 0x23, 0x10, 0x98, 0x0e, 0x61, 0x51, 0x11, 0xbd, 0xb6, - 0x3a, 0x74, 0x6b, 0xf5, 0x6f, 0xf3, 0x44, 0xa8, 0xdd, 0xe1, 0xa4, 0xe6, 0x6e, 0x02, 0x27, 0xb7, - 0xb2, 0x8b, 0x00, 0x5b, 0x98, 0x8b, 0x25, 0x13, 0xeb, 0x8c, 0x68, 0xbe, 0xf1, 0xe5, 0x7d, 0xa4, - 0x11, 0xda, 0x65, 0x1f, 0x69, 0x74, 0xb8, 0x37, 0xdc, 0xcf, 0x0f, 0xb0, 0x25, 0x1f, 0x60, 0xbb, - 0x0a, 0xd9, 0x20, 0xa6, 0xdd, 0xad, 0x44, 0x74, 0x08, 0xcc, 0x9a, 0x98, 0xfc, 0x47, 0xf0, 0x77, - 0x1d, 0x73, 0xc8, 0xe9, 0x5b, 0x92, 0xaa, 0xf4, 0xb5, 0x1a, 0xca, 0x3a, 0xd3, 0xae, 0xf3, 0xd1, - 0x21, 0x1c, 0xa5, 0x68, 0x00, 0x30, 0x9f, 0xa2, 0x17, 0x5d, 0x2d, 0xf7, 0x9b, 0x8b, 0x0e, 0x39, - 0xd5, 0x4b, 0x96, 0x16, 0x0c, 0xbd, 0x17, 0x25, 0x49, 0x60, 0x92, 0xe8, 0xbd, 0x75, 0xbd, 0xda, - 0x5e, 0xe6, 0x9c, 0x68, 0x9b, 0x8e, 0xf7, 0x71, 0x9b, 0x31, 0xff, 0x93, 0x7b, 0xd4, 0x02, 0xb0, - 0x5e, 0xa2, 0x21, 0x7f, 0x44, 0x9d, 0x91, 0x2e, 0x0f, 0x3f, 0xe1, 0x3e, 0x99, 0x57, 0xde, 0x77, - 0x32, 0xba, 0x10, 0xd7, 0x0c, 0xf4, 0xb7, 0x94, 0x9a, 0xfa, 0x66, 0x3d, 0xad, 0x1d, 0xea, 0x6f, - 0xa9, 0xc4, 0x70, 0xb0, 0x95, 0xc5, 0xbd, 0x38, 0xb7, 0xc3, 0xdf, 0x52, 0x32, 0xbe, 0xc5, 0x74, - 0x97, 0x02, 0x5c, 0x31, 0x8a, 0x4e, 0xde, 0xb6, 0x8f, 0xea, 0x07, 0x88, 0x91, 0x8f, 0x10, 0x1b, - 0x0e, 0x42, 0x48, 0x25, 0x8c, 0x65, 0x7e, 0x93, 0x6b, 0xb8, 0x89, 0xfe, 0xef, 0x23, 0xbb, 0x8e, - 0xdd, 0xbe, 0xa5, 0x06, 0x2e, 0x87, 0xf5, 0xe0, 0xc1, 0x1b, 0x00, 0xde, 0x59, 0x0c, 0xc2, 0x52, - 0xe2, 0x10, 0x6f, 0x3c, 0x55, 0xb4, 0x7e, 0x78, 0x36, 0xb6, 0xf1, 0x2c, 0x64, 0x34, 0xf1, 0xdf, - 0x93, 0x37, 0x7d, 0xd3, 0x88, 0xa5, 0x5f, 0x36, 0xe8, 0x85, 0x09, 0xb0, 0x30, 0x94, 0xff, 0x6f, - 0x91, 0x2c, 0x96, 0xd1, 0x5d, 0x3b, 0xae, 0x51, 0xbc, 0xa0, 0xfc, 0x7f, 0xb9, 0xc4, 0xf8, 0xcc, - 0x8e, 0x37, 0xf3, 0x73, 0x79, 0xa0, 0x23, 0xba, 0x84, 0xf7, 0x59, 0x5a, 0xef, 0xb3, 0x0c, 0x4c, - 0xc9, 0x8c, 0xfd, 0x48, 0x6d, 0xcc, 0xc0, 0x66, 0xdc, 0x18, 0x81, 0xb0, 0xf9, 0x33, 0xe0, 0x3a, - 0x61, 0x3b, 0x47, 0x65, 0x3b, 0x09, 0xae, 0xe6, 0xbe, 0xbc, 0x5a, 0xf5, 0x17, 0xcb, 0xe9, 0x9b, - 0x9b, 0xc6, 0x96, 0xbc, 0x9d, 0xdd, 0xdc, 0xec, 0x6e, 0x99, 0xdb, 0xd9, 0x9d, 0xb1, 0xcb, 0x98, - 0xe8, 0x15, 0xa7, 0xb7, 0xd3, 0xde, 0x10, 0x16, 0xb4, 0xb3, 0xb9, 0x19, 0x49, 0xa0, 0x6e, 0x47, - 0xbe, 0x36, 0xf4, 0x8b, 0x83, 0xb6, 0x7e, 0xf0, 0x48, 0xcb, 0xd1, 0xa7, 0x34, 0x9e, 0xb6, 0x39, - 0x0e, 0xc4, 0x5a, 0x38, 0xea, 0x3c, 0x9f, 0xdc, 0xe9, 0x78, 0xfc, 0xbf, 0xc6, 0x87, 0x12, 0xea, - 0x5b, 0xc7, 0x1e, 0x3a, 0xe6, 0x5a, 0xb4, 0x5f, 0xf4, 0x5b, 0x10, 0x86, 0x4e, 0x43, 0x09, 0x98, - 0xd7, 0xc5, 0xb9, 0xac, 0x14, 0x03, 0x14, 0x43, 0x45, 0xbf, 0xad, 0x57, 0xda, 0xe9, 0xc4, 0xb6, - 0x8d, 0x88, 0xb1, 0x78, 0x6b, 0x78, 0xd2, 0x00, 0xe4, 0x88, 0x96, 0xb6, 0x8d, 0x90, 0xd2, 0x9e, - 0x4c, 0xf1, 0xdb, 0x18, 0xab, 0xf1, 0x31, 0xe4, 0x38, 0x3f, 0x5a, 0x08, 0x72, 0xc4, 0x93, 0x46, - 0x21, 0x2f, 0x18, 0x8b, 0x7e, 0x68, 0x13, 0x04, 0x8d, 0x82, 0x10, 0x97, 0xc8, 0xc4, 0xf3, 0xde, - 0xae, 0x66, 0x64, 0x07, 0x4d, 0x93, 0x69, 0xb8, 0xee, 0xe7, 0xc6, 0x89, 0x01, 0xb6, 0xae, 0x73, - 0x13, 0x2a, 0x1e, 0x41, 0x0e, 0x44, 0x78, 0x18, 0x9f, 0xe2, 0xf7, 0xd0, 0x17, 0xa5, 0x3d, 0x0e, - 0xff, 0x24, 0x32, 0x72, 0x08, 0x99, 0x3d, 0x1a, 0x06, 0x1c, 0x40, 0x41, 0x0e, 0x9a, 0x53, 0x1f, - 0xa0, 0x20, 0xe6, 0xcb, 0xcb, 0x28, 0x44, 0x5c, 0xc2, 0xb1, 0x3a, 0x3b, 0xb0, 0x37, 0x46, 0xe5, - 0x38, 0x36, 0xf0, 0xc2, 0xdd, 0x31, 0x58, 0x0e, 0xe1, 0x74, 0x36, 0x27, 0x82, 0x7b, 0x0f, 0xdb, - 0x0d, 0x16, 0x81, 0x57, 0xf7, 0xcf, 0xcb, 0xab, 0xce, 0x41, 0x77, 0x30, 0x7e, 0xf0, 0xce, 0x89, - 0xa4, 0x7b, 0x30, 0xc6, 0x7d, 0x77, 0xbf, 0x54, 0x83, 0x91, 0x71, 0xde, 0xc6, 0x8a, 0xd4, 0x10, - 0xeb, 0xd2, 0xf7, 0x06, 0xf6, 0xb6, 0x2e, 0xa5, 0x52, 0x49, 0x5f, 0xc8, 0x49, 0xf4, 0xd4, 0x74, - 0xd0, 0x93, 0x4e, 0x0f, 0x1d, 0xd2, 0x19, 0x23, 0xa1, 0x6b, 0xfe, 0x57, 0xd2, 0x6b, 0xb0, 0x6f, - 0xf2, 0x29, 0x69, 0x55, 0x74, 0xdd, 0x97, 0x60, 0x3d, 0x40, 0xe6, 0x97, 0x87, 0xc9, 0xe6, 0xe6, - 0x27, 0x11, 0xce, 0xb2, 0xcb, 0x5a, 0x9c, 0xdd, 0x9a, 0xef, 0x39, 0xbf, 0x64, 0x5f, 0x06, 0x23, - 0x0e, 0x90, 0x5f, 0xd5, 0xb8, 0x5b, 0xcc, 0x10, 0x57, 0x45, 0xff, 0x01, 0x82, 0x74, 0x1a, 0x7f, - 0x51, 0xd9, 0x6d, 0x15, 0xa1, 0x55, 0xdc, 0xdb, 0x0f, 0xf2, 0xfb, 0x80, 0xad, 0x2d, 0x2c, 0xf7, - 0x94, 0x67, 0x12, 0x96, 0xf9, 0xd4, 0xaa, 0x52, 0xc4, 0x2b, 0xf5, 0xdd, 0xd5, 0x52, 0x03, 0x98, - 0x9b, 0x2e, 0xe6, 0x2c, 0x92, 0xd3, 0xd9, 0x57, 0x40, 0xe3, 0x05, 0x23, 0x87, 0x02, 0xb8, 0xb3, - 0x0f, 0xde, 0x44, 0xcb, 0xb9, 0xd4, 0x00, 0xb1, 0x1a, 0xbe, 0xa1, 0x4d, 0x08, 0xdf, 0x66, 0x81, - 0xe1, 0x94, 0x86, 0x95, 0x44, 0xe3, 0x1a, 0x1f, 0x02, 0xe7, 0x12, 0x58, 0xe4, 0xf9, 0xb7, 0x33, - 0xba, 0xb5, 0x54, 0x73, 0x22, 0xd0, 0x96, 0xdd, 0x5d, 0x56, 0x3f, 0x28, 0x59, 0x22, 0xe1, 0x57, - 0x6c, 0x5f, 0xea, 0x5f, 0xdf, 0x6a, 0x1e, 0x0d, 0xe8, 0x47, 0x91, 0x58, 0xaf, 0x71, 0xee, 0x7c, - 0xab, 0x7b, 0x11, 0x83, 0xf4, 0x00, 0x04, 0xc7, 0xd0, 0xa0, 0x1b, 0x70, 0xf4, 0xf8, 0x42, 0xd8, - 0xa7, 0xf4, 0xdb, 0xdc, 0x4e, 0x2b, 0xf2, 0x02, 0x7e, 0x69, 0x7c, 0xa2, 0xb7, 0xa3, 0xd7, 0xc0, - 0xe4, 0x25, 0x27, 0x13, 0x75, 0xa4, 0xb1, 0x1c, 0xc7, 0xd3, 0xc0, 0xd7, 0xf0, 0xf5, 0x7b, 0x56, - 0xdc, 0x71, 0x3f, 0xaf, 0x93, 0xc2, 0x04, 0x77, 0x5b, 0xac, 0x16, 0xd9, 0x47, 0xfb, 0x81, 0x99, - 0x5b, 0x59, 0x11, 0x0f, 0x36, 0x38, 0xae, 0xaa, 0x5f, 0x75, 0x42, 0xcf, 0x9d, 0x85, 0x7c, 0x55, - 0xce, 0x01, 0x34, 0x07, 0x64, 0xe8, 0x78, 0x42, 0x24, 0x67, 0xf9, 0x80, 0x03, 0x63, 0xb3, 0xc0, - 0x49, 0x88, 0x98, 0xb2, 0x01, 0x7e, 0x64, 0xdb, 0x15, 0xb2, 0x29, 0x4d, 0x1c, 0x37, 0xc5, 0xbd, - 0x42, 0x26, 0x89, 0x98, 0x98, 0x54, 0xef, 0xa8, 0x8f, 0x73, 0xf4, 0x84, 0x7a, 0xd0, 0x04, 0xba, - 0x8b, 0x4a, 0xdc, 0x13, 0x32, 0xde, 0x5e, 0x2f, 0x9e, 0x97, 0xb4, 0xbf, 0x13, 0x67, 0xf4, 0xeb, - 0x36, 0x4c, 0x75, 0xf2, 0xc3, 0xfe, 0xd9, 0x98, 0x2b, 0x72, 0x0d, 0x1f, 0x30, 0x3c, 0x13, 0x2d, - 0x6a, 0xf6, 0x92, 0xfd, 0xb9, 0x40, 0x18, 0xc1, 0x63, 0x2a, 0xd4, 0x01, 0x47, 0xef, 0xa4, 0x51, - 0x09, 0x5e, 0x2d, 0x29, 0x99, 0x24, 0x61, 0xd3, 0xc4, 0x24, 0x86, 0x3d, 0xba, 0x47, 0x70, 0x10, - 0x9e, 0xc8, 0x20, 0xf1, 0x6d, 0xbc, 0x0a, 0x85, 0x5f, 0xf8, 0x48, 0xd0, 0xbb, 0x21, 0x88, 0xcb, - 0x78, 0x78, 0xf5, 0x8e, 0xa0, 0xc1, 0x0f, 0x96, 0xc6, 0x3d, 0x79, 0x41, 0x75, 0xe2, 0x4c, 0x59, - 0x12, 0x10, 0x59, 0x26, 0xd3, 0xcb, 0x5e, 0x82, 0xbf, 0x69, 0xdf, 0xef, 0xf1, 0xc9, 0xef, 0x22, - 0x3d, 0x45, 0x11, 0xe6, 0x6e, 0x76, 0xbe, 0x07, 0xcf, 0xdd, 0xb1, 0xa3, 0x40, 0x0e, 0x77, 0x63, - 0x23, 0x78, 0xf7, 0x12, 0x4b, 0xc5, 0x53, 0x03, 0x2c, 0x63, 0x87, 0xaf, 0xd7, 0xbf, 0xd4, 0xb3, - 0x7c, 0xcd, 0xcb, 0xa8, 0x33, 0xea, 0x60, 0x60, 0xa4, 0xba, 0xf3, 0xe3, 0x67, 0x4d, 0x05, 0xb5, - 0x4f, 0x55, 0xf0, 0x2c, 0x11, 0xbd, 0x3a, 0xca, 0x76, 0x2a, 0x7e, 0xcf, 0xff, 0xf9, 0x27, 0x0d, - 0x9e, 0xa4, 0x87, 0x66, 0xa0, 0x1c, 0xfe, 0xba, 0x45, 0x05, 0x7a, 0x87, 0x83, 0x3b, 0xb1, 0x36, - 0x37, 0x79, 0xbc, 0x82, 0x13, 0x23, 0x5e, 0xe9, 0x0d, 0x9b, 0xee, 0x3d, 0xa7, 0x98, 0x90, 0x74, - 0xce, 0x85, 0xfa, 0x5f, 0x7e, 0x76, 0xf7, 0x8b, 0xbd, 0x86, 0x0a, 0x5e, 0x43, 0xf9, 0x9f, 0x3b, - 0xa0, 0x33, 0xd7, 0xf0, 0xa1, 0x2e, 0xd2, 0xf3, 0xe9, 0x09, 0x09, 0xcf, 0xcb, 0x0b, 0x52, 0xa0, - 0xad, 0x84, 0x14, 0x0c, 0x37, 0xe5, 0xfd, 0x06, 0x2a, 0xb9, 0x5c, 0xa9, 0x4e, 0x0b, 0xfb, 0xf9, - 0xd9, 0x60, 0x3e, 0xfd, 0xac, 0x73, 0x24, 0x3f, 0x5d, 0x94, 0x3f, 0x28, 0x92, 0x0b, 0xe4, 0xb3, - 0x0f, 0x2f, 0x87, 0xf3, 0xc7, 0xc1, 0x7c, 0xfa, 0xd9, 0xe3, 0x70, 0x7e, 0x2f, 0x9c, 0x5f, 0xac, - 0x63, 0xbc, 0xb5, 0x9d, 0x6a, 0xb8, 0xdf, 0x9b, 0xc0, 0xe9, 0x80, 0x87, 0x0a, 0x8e, 0xec, 0xa1, - 0x9a, 0xc0, 0x2f, 0xcb, 0x0b, 0x44, 0xd0, 0x04, 0x54, 0x68, 0x40, 0xb5, 0x13, 0x78, 0x60, 0x92, - 0xe4, 0x82, 0x2d, 0x95, 0xee, 0x47, 0xdb, 0x83, 0x2b, 0x65, 0xcc, 0x59, 0x21, 0xef, 0x14, 0x20, - 0x3b, 0x30, 0xe8, 0x9d, 0x1d, 0x73, 0xde, 0x22, 0x47, 0xb1, 0xa2, 0x1c, 0x4e, 0xcf, 0xea, 0x38, - 0x65, 0x5d, 0x1e, 0xff, 0x21, 0x0a, 0x9e, 0xb8, 0xf9, 0xe9, 0xde, 0x86, 0x04, 0x9c, 0xeb, 0xcd, - 0x35, 0x64, 0x73, 0x5a, 0x05, 0x25, 0x5c, 0x7c, 0xc7, 0x9c, 0xa3, 0x90, 0xbc, 0x80, 0x07, 0xac, - 0x04, 0x6c, 0x86, 0xf6, 0xf1, 0xca, 0x4d, 0xfe, 0x15, 0xfd, 0x24, 0xba, 0x41, 0x37, 0x73, 0x1d, - 0x4b, 0xe2, 0xb7, 0x39, 0x7e, 0x2a, 0x44, 0x52, 0xaf, 0x20, 0xb1, 0x65, 0x59, 0x09, 0x04, 0x92, - 0xf4, 0x8e, 0x86, 0xfc, 0x72, 0x4f, 0x52, 0xc1, 0x2a, 0x1a, 0xa5, 0x50, 0xe0, 0x34, 0x95, 0x89, - 0xb1, 0x52, 0x13, 0x07, 0x4a, 0xc2, 0x9d, 0x95, 0x31, 0xb7, 0xd1, 0xf0, 0x5f, 0x1d, 0x48, 0x5c, - 0x9a, 0x1e, 0x27, 0x4a, 0xd6, 0x83, 0x27, 0xda, 0x38, 0xe2, 0x47, 0x84, 0x10, 0x60, 0xe3, 0x50, - 0xf5, 0x04, 0x9f, 0xf6, 0x90, 0x67, 0xf7, 0x41, 0x39, 0xf7, 0xab, 0x36, 0x22, 0x1d, 0xf0, 0x6e, - 0xb2, 0x55, 0xe4, 0x64, 0x30, 0x58, 0x24, 0x5c, 0x8c, 0x1d, 0xf8, 0x0a, 0xde, 0x23, 0xef, 0x5f, - 0xba, 0xe1, 0xa7, 0xe1, 0xac, 0xc6, 0xe3, 0x56, 0xb6, 0x7b, 0x41, 0x80, 0xb3, 0x64, 0xd6, 0x38, - 0xba, 0x3e, 0xd6, 0xb3, 0x0d, 0x6f, 0xb6, 0xe1, 0x39, 0x08, 0xa0, 0x7d, 0x83, 0x8e, 0x42, 0x58, - 0xb2, 0xd0, 0xa1, 0x77, 0xf2, 0xf1, 0xf0, 0x0b, 0x58, 0x87, 0x49, 0xf7, 0xf6, 0x16, 0xe7, 0xac, - 0x17, 0xeb, 0xb2, 0x58, 0x27, 0xdf, 0x5d, 0x78, 0xb0, 0x76, 0xa4, 0x92, 0x73, 0xb6, 0xda, 0xa9, - 0x0d, 0xdb, 0x95, 0x2f, 0x92, 0xa0, 0x08, 0xba, 0x60, 0x82, 0x22, 0x53, 0x5f, 0x92, 0x60, 0x6a, - 0x32, 0x69, 0x06, 0x0f, 0x0f, 0xe0, 0x01, 0xb0, 0x0c, 0x34, 0xf6, 0x07, 0x1e, 0x1d, 0x10, 0xd8, - 0x21, 0x30, 0x41, 0x69, 0xe0, 0xcd, 0x70, 0x82, 0xde, 0xc0, 0x6b, 0xdf, 0xea, 0x74, 0x29, 0x01, - 0x40, 0xbc, 0x89, 0x52, 0x2b, 0x29, 0x21, 0x6e, 0x4e, 0x04, 0xbf, 0xa4, 0xc9, 0xfa, 0x30, 0x81, - 0x11, 0x27, 0xcb, 0x69, 0xfa, 0x72, 0x1a, 0x05, 0xe5, 0x0c, 0x1d, 0x36, 0xb4, 0x95, 0x75, 0x4e, - 0xb3, 0xb1, 0x8b, 0x6d, 0x2c, 0xa6, 0x85, 0x29, 0xaa, 0x6c, 0x12, 0xad, 0x2e, 0x05, 0xc2, 0x63, - 0x50, 0xa4, 0xba, 0x43, 0x66, 0x62, 0x73, 0xf1, 0x59, 0x7d, 0x6c, 0x35, 0x3e, 0xab, 0x93, 0x5c, - 0x7c, 0x81, 0x91, 0x68, 0x98, 0x34, 0x2a, 0x3e, 0x78, 0x7a, 0x22, 0xe3, 0x52, 0x93, 0x92, 0x00, - 0x2f, 0xb6, 0xa1, 0xd1, 0x2e, 0xce, 0x9d, 0xbd, 0x12, 0x5e, 0xd7, 0xab, 0xe0, 0x1f, 0x7d, 0x91, - 0xc4, 0x8b, 0x83, 0x17, 0xbf, 0xff, 0x4a, 0x2e, 0x9c, 0x2b, 0x44, 0xfc, 0x20, 0xb8, 0x1a, 0x17, - 0xbd, 0x6b, 0x18, 0x3f, 0x14, 0x81, 0xee, 0x2b, 0x01, 0xef, 0xa5, 0x7b, 0xd1, 0x15, 0x7a, 0xf7, - 0x54, 0xfd, 0x57, 0x98, 0xd9, 0x96, 0xa7, 0x2a, 0xbd, 0xa6, 0x04, 0x44, 0x10, 0x2e, 0x4e, 0x82, - 0x14, 0xba, 0xaf, 0x24, 0x32, 0x45, 0x99, 0x36, 0x82, 0x4a, 0x0a, 0xfd, 0xe2, 0x88, 0xe3, 0xc8, - 0xa3, 0xdb, 0x90, 0x68, 0x75, 0xe0, 0x6d, 0x25, 0xb8, 0x35, 0x43, 0xa5, 0xbb, 0x44, 0x63, 0xf0, - 0x69, 0x1e, 0xe8, 0x1d, 0xe8, 0x44, 0x92, 0x52, 0xdf, 0xf8, 0x6f, 0x0b, 0x5d, 0x6b, 0x31, 0x0b, - 0xe4, 0xb7, 0xb9, 0xb6, 0xa0, 0x37, 0x14, 0x27, 0x63, 0xf6, 0x8b, 0xb0, 0x4b, 0xba, 0xb3, 0x5f, - 0xf4, 0xd1, 0xce, 0x4b, 0xcc, 0x86, 0x12, 0xad, 0x1e, 0x70, 0x75, 0x20, 0x5e, 0x1a, 0x3d, 0x41, - 0x83, 0x07, 0xe4, 0xf8, 0xe5, 0x8d, 0x22, 0x5a, 0x61, 0xd9, 0x28, 0x8c, 0xf4, 0xdf, 0xfb, 0x22, - 0xe1, 0xb2, 0x55, 0xe9, 0x9d, 0x15, 0x74, 0x76, 0x12, 0xf1, 0xd6, 0x16, 0x77, 0x4f, 0xd0, 0xb7, - 0x31, 0x3d, 0x93, 0xc9, 0x33, 0x36, 0xd1, 0x00, 0xf3, 0x2d, 0x24, 0x6f, 0xa0, 0x3a, 0xd8, 0x0f, - 0x94, 0x06, 0xd6, 0x44, 0x71, 0x2e, 0x9a, 0xe8, 0xe2, 0x7d, 0x76, 0xf9, 0x5c, 0xcd, 0x99, 0xf2, - 0xfb, 0xed, 0xab, 0x7c, 0x8e, 0xaf, 0xb3, 0xd4, 0x7c, 0x28, 0x75, 0xab, 0xed, 0x65, 0x14, 0x22, - 0x19, 0x79, 0x37, 0xa3, 0x18, 0xce, 0x68, 0xb9, 0x19, 0x95, 0x60, 0x03, 0x95, 0x5c, 0xa9, 0xc4, - 0x3b, 0x9c, 0xc7, 0xef, 0x04, 0x6e, 0xf5, 0xe8, 0x68, 0xa1, 0xab, 0x41, 0x78, 0xdc, 0x31, 0xa1, - 0x87, 0xf9, 0x31, 0x7d, 0x07, 0x14, 0x1b, 0xa3, 0xc6, 0x9e, 0x97, 0x97, 0x2b, 0xf6, 0xc1, 0x19, - 0x7a, 0x55, 0x3c, 0x13, 0x35, 0xc0, 0x74, 0x1a, 0xfe, 0x01, 0x75, 0x06, 0x65, 0x07, 0xa8, 0x5c, - 0x58, 0x22, 0xe9, 0xd9, 0x6f, 0x18, 0x18, 0xe7, 0x24, 0xfe, 0x05, 0x85, 0xcd, 0x05, 0x43, 0xe5, - 0xa9, 0xc4, 0x52, 0x35, 0xff, 0x5c, 0x4e, 0xec, 0x2e, 0xab, 0x77, 0x6e, 0x18, 0x96, 0x73, 0x23, - 0xb8, 0x55, 0xe5, 0x5d, 0x54, 0xe8, 0xdc, 0xbc, 0xf2, 0xcd, 0x39, 0x13, 0xee, 0x94, 0xfc, 0xc6, - 0x8e, 0x0f, 0x33, 0xa2, 0x48, 0xc9, 0xc0, 0x11, 0x62, 0xe1, 0x17, 0x24, 0xd3, 0xa1, 0x94, 0xe8, - 0x65, 0x8b, 0x90, 0x87, 0xf7, 0x65, 0x28, 0x4c, 0xaf, 0x97, 0xf0, 0x1c, 0xc2, 0x0e, 0x7f, 0x91, - 0xc1, 0xc3, 0x4a, 0xce, 0xb9, 0x16, 0x05, 0x8f, 0xa3, 0xaa, 0xa9, 0xd4, 0x02, 0xba, 0x27, 0x77, - 0xbf, 0x8b, 0x3b, 0x16, 0x28, 0x12, 0xa1, 0x6f, 0x86, 0xe1, 0x75, 0x16, 0x20, 0xef, 0xd1, 0xa7, - 0x25, 0xa7, 0xf9, 0x9a, 0x48, 0xc3, 0xe9, 0x12, 0x58, 0xec, 0x42, 0xe7, 0x74, 0xbc, 0x76, 0xc3, - 0xff, 0xa8, 0x10, 0xd7, 0x43, 0x49, 0x91, 0x46, 0x45, 0x0f, 0x2d, 0x11, 0xcf, 0x11, 0x16, 0x88, - 0xe6, 0x6d, 0xb1, 0xe3, 0x0e, 0x5e, 0x9d, 0x1a, 0x46, 0x68, 0x52, 0x72, 0x2d, 0x68, 0x41, 0x8d, - 0x6e, 0xba, 0x45, 0x02, 0x2e, 0xb5, 0xd0, 0x92, 0x6b, 0x85, 0xcf, 0xd2, 0x3b, 0x9f, 0x14, 0xfa, - 0xe4, 0x21, 0x7a, 0xf6, 0x49, 0xa6, 0xcf, 0x9c, 0xa1, 0xf7, 0xae, 0x7b, 0x19, 0xa9, 0x32, 0xfd, - 0xcc, 0x0b, 0x36, 0xc6, 0x61, 0x6b, 0x1c, 0xae, 0xdd, 0xec, 0xe6, 0xad, 0xd8, 0xc3, 0xf5, 0x71, - 0xdf, 0x0f, 0x14, 0xc2, 0x0c, 0xe9, 0x06, 0x64, 0x0a, 0xe4, 0x83, 0x8b, 0x05, 0x96, 0xae, 0x8e, - 0xa3, 0x9e, 0x03, 0xb6, 0x6e, 0xb3, 0x3b, 0xf2, 0x88, 0xb3, 0x2a, 0xd7, 0xbd, 0x10, 0x52, 0x09, - 0x29, 0x8c, 0xed, 0x7c, 0x36, 0x04, 0x15, 0x4f, 0x6a, 0xe3, 0x5c, 0x00, 0x4d, 0x7b, 0xe5, 0x85, - 0xf7, 0x36, 0x0d, 0x68, 0x75, 0x2f, 0x7a, 0xbb, 0x47, 0x51, 0x47, 0x2f, 0x2d, 0xef, 0xf3, 0x49, - 0x77, 0x6a, 0x91, 0xf4, 0x40, 0xb2, 0x9a, 0xb6, 0x6d, 0x2a, 0xc0, 0x90, 0x90, 0x3b, 0x94, 0xa6, - 0x7c, 0x12, 0xa6, 0xa7, 0xe4, 0x26, 0xd1, 0x83, 0x8d, 0xcc, 0x96, 0xad, 0xc1, 0xd2, 0xe9, 0xde, - 0xdb, 0x15, 0x3c, 0x99, 0x41, 0x33, 0x33, 0x56, 0xb2, 0xae, 0x7d, 0xa7, 0xd7, 0x45, 0xc1, 0x24, - 0xca, 0x31, 0x2d, 0x41, 0x6d, 0x2c, 0xdd, 0x76, 0x5f, 0x65, 0x97, 0xdd, 0xb3, 0xeb, 0xe0, 0x3a, - 0xfd, 0x24, 0xe5, 0x9f, 0xdf, 0xdd, 0x84, 0xee, 0x56, 0xc9, 0x49, 0x49, 0xfe, 0xaa, 0xaf, 0xba, - 0x58, 0x55, 0x5d, 0xb8, 0xe7, 0x00, 0x03, 0x64, 0x5b, 0x45, 0x41, 0xef, 0x26, 0x54, 0xf6, 0x01, - 0x6f, 0x46, 0x38, 0xc9, 0xb1, 0x19, 0x3c, 0x8d, 0xd0, 0x35, 0xd6, 0xfd, 0x8b, 0xc3, 0x03, 0x77, - 0x01, 0xd2, 0x8b, 0xbf, 0xd3, 0xec, 0x13, 0x63, 0x7f, 0xb7, 0xc9, 0xb8, 0x8b, 0xf9, 0x02, 0x5f, - 0x18, 0x77, 0xae, 0x9c, 0x8b, 0x30, 0x0e, 0xba, 0xa0, 0xe8, 0x4d, 0x7b, 0xa2, 0x7f, 0xe5, 0x2b, - 0x73, 0xad, 0x10, 0xf4, 0xbe, 0xb8, 0x4c, 0xc4, 0x46, 0x32, 0xc6, 0x01, 0x43, 0x02, 0x3e, 0x1a, - 0x41, 0x8b, 0x2f, 0xe1, 0xfb, 0x67, 0x96, 0xf7, 0xba, 0xac, 0x1a, 0xbd, 0x89, 0x4d, 0xdb, 0xb2, - 0x02, 0x01, 0xbd, 0x1e, 0xe8, 0xa7, 0x5f, 0xa8, 0xf3, 0x84, 0x60, 0x61, 0x92, 0xde, 0x88, 0x20, - 0x00, 0x3a, 0x5f, 0xa4, 0x41, 0xa1, 0x1b, 0x4a, 0xd1, 0x7b, 0x90, 0x24, 0x33, 0x75, 0x6b, 0xf8, - 0xda, 0x7e, 0x3a, 0x02, 0x61, 0x64, 0xf8, 0xaf, 0x7b, 0xec, 0x9a, 0x62, 0xc5, 0x3a, 0x4f, 0xa2, - 0x5d, 0xbc, 0xdd, 0xa0, 0xae, 0xe6, 0x24, 0x1b, 0x43, 0xb6, 0x7e, 0x8b, 0x60, 0x5e, 0xb1, 0xef, - 0x14, 0x49, 0x78, 0xfc, 0x05, 0x3f, 0x78, 0xa0, 0xe0, 0xc1, 0x4e, 0x27, 0x3b, 0x2b, 0x28, 0x34, - 0x9b, 0xfe, 0xb2, 0x6c, 0x9d, 0x3e, 0x50, 0x48, 0xf8, 0x0c, 0x99, 0xae, 0x77, 0x6a, 0x2b, 0x2b, - 0x98, 0x7e, 0x66, 0x8a, 0xbe, 0x05, 0xb2, 0x05, 0x79, 0x73, 0x53, 0x5e, 0xe1, 0x68, 0x33, 0x36, - 0x37, 0x8d, 0x15, 0x59, 0xdd, 0xcd, 0xcd, 0xee, 0x4a, 0xbf, 0x08, 0xd3, 0x40, 0x23, 0x80, 0xc3, - 0x45, 0xa2, 0xb0, 0x23, 0xb9, 0x11, 0xf0, 0x41, 0x57, 0x0a, 0x13, 0x31, 0xde, 0xd8, 0x4b, 0x2e, - 0x3f, 0x04, 0x74, 0x52, 0x65, 0x25, 0x07, 0xd8, 0xc0, 0x01, 0x75, 0xf5, 0x8f, 0x86, 0xbe, 0xc5, - 0x1c, 0xb0, 0xe1, 0xa1, 0xc4, 0x2d, 0x83, 0x5f, 0x74, 0x70, 0x80, 0x45, 0x70, 0x87, 0x03, 0x8a, - 0x6d, 0x67, 0x61, 0xc9, 0xdf, 0xdc, 0x34, 0x57, 0x77, 0x36, 0x70, 0x37, 0xb5, 0x67, 0xbe, 0x86, - 0x0d, 0xa6, 0x5f, 0xd4, 0x60, 0xfa, 0x11, 0xd0, 0x1a, 0xfd, 0x28, 0xa8, 0x05, 0xff, 0x93, 0x35, - 0x69, 0x33, 0x73, 0xcb, 0x5a, 0x61, 0x6e, 0x51, 0x4d, 0xcb, 0x59, 0x82, 0x6e, 0xc9, 0xd4, 0x16, - 0xb4, 0x10, 0xea, 0x34, 0x22, 0x13, 0x00, 0x69, 0xf4, 0xce, 0x68, 0xcf, 0xcb, 0xf2, 0x3f, 0xff, - 0x9f, 0xff, 0x0f, 0x9d, 0x2c, 0x3b, 0xda, 0x4a, 0xf4, 0x6b, 0xda, 0x0a, 0x17, 0xea, 0x82, 0x79, - 0xb7, 0xa8, 0x2a, 0xbf, 0xc6, 0x11, 0xeb, 0x22, 0x60, 0x1b, 0xbf, 0x42, 0xce, 0x5d, 0x2a, 0xd3, - 0xfa, 0x0d, 0xde, 0xb9, 0x92, 0x2d, 0x49, 0x9d, 0x40, 0xea, 0x76, 0x76, 0xa7, 0x4f, 0x2f, 0x1d, - 0x04, 0xed, 0xc9, 0xe2, 0x6b, 0x59, 0xb6, 0x92, 0x43, 0xb1, 0x2c, 0x8d, 0x9e, 0x80, 0x59, 0x0d, - 0xeb, 0xc9, 0x97, 0x50, 0xcf, 0xfa, 0x26, 0x40, 0x66, 0xe2, 0x7d, 0x14, 0x3f, 0xe5, 0x69, 0x09, - 0x97, 0x0d, 0x7a, 0x2b, 0x04, 0x87, 0xd1, 0xf5, 0xca, 0xa0, 0xe3, 0x65, 0x04, 0xcd, 0x8e, 0x1a, - 0xce, 0x11, 0xec, 0x01, 0x5b, 0x03, 0xba, 0x04, 0x3d, 0xee, 0x99, 0xc4, 0xff, 0x2a, 0xee, 0xdb, - 0xb6, 0xdb, 0x36, 0xd2, 0x35, 0xef, 0xf7, 0x53, 0x50, 0x48, 0x62, 0x01, 0x26, 0x24, 0xf1, 0x60, - 0x25, 0x0e, 0x28, 0x90, 0xcb, 0x96, 0xed, 0x8e, 0xd6, 0x76, 0x1c, 0x8d, 0xe5, 0x6e, 0xc7, 0x4b, - 0xa3, 0xd5, 0xa2, 0x48, 0x50, 0xc2, 0x18, 0x04, 0x18, 0x00, 0x3a, 0x38, 0x14, 0xf7, 0x0b, 0xcc, - 0x13, 0xec, 0x7d, 0x33, 0x57, 0x73, 0x33, 0x17, 0x73, 0x39, 0x0f, 0x30, 0x4f, 0x34, 0x8f, 0x30, - 0xff, 0xa1, 0xaa, 0x50, 0x85, 0x03, 0x45, 0xc5, 0xe9, 0xde, 0x59, 0xdd, 0x16, 0x51, 0xa8, 0x33, - 0xaa, 0xfe, 0xaa, 0xfa, 0xeb, 0xff, 0xbf, 0xef, 0xba, 0x3d, 0x83, 0x53, 0xa1, 0x60, 0xae, 0xb9, - 0xc2, 0xf3, 0xe2, 0xf5, 0xb0, 0x7b, 0x7f, 0x3f, 0x1b, 0x76, 0x48, 0x9d, 0x0d, 0xdb, 0x8a, 0x16, - 0xec, 0xe2, 0xaf, 0x56, 0xad, 0x9b, 0x30, 0xcd, 0xaf, 0xc7, 0x91, 0x03, 0x67, 0x15, 0x52, 0xf0, - 0xc9, 0xb9, 0xcc, 0xb1, 0xac, 0xd6, 0x29, 0xe2, 0x26, 0x2c, 0xce, 0x4a, 0x3d, 0x05, 0xe3, 0xd0, - 0x00, 0xf7, 0xbb, 0x44, 0xbc, 0xab, 0x7a, 0x05, 0x21, 0xef, 0x3d, 0xf8, 0x6e, 0x0a, 0x59, 0xe1, - 0xcb, 0xfa, 0x62, 0xb2, 0x20, 0x17, 0xba, 0x65, 0xa9, 0x29, 0x96, 0x1a, 0xe6, 0x0d, 0xe3, 0x17, - 0x32, 0xba, 0x52, 0x3a, 0xeb, 0x20, 0xe5, 0x51, 0xc9, 0x1d, 0x17, 0x20, 0x39, 0xa1, 0x1d, 0x16, - 0x34, 0x41, 0x66, 0x87, 0xb3, 0x7f, 0x44, 0xd8, 0xb6, 0x32, 0x4b, 0x7d, 0x93, 0xad, 0x2d, 0xf3, - 0xcd, 0x27, 0xd2, 0x17, 0xe5, 0x4d, 0x09, 0x3f, 0x15, 0x29, 0xb3, 0x86, 0x38, 0x81, 0x8c, 0xb2, - 0xd3, 0x54, 0x66, 0xdc, 0x94, 0xf2, 0x53, 0x43, 0x52, 0xad, 0xd4, 0xc8, 0x0f, 0x9e, 0xce, 0xe0, - 0x5c, 0x98, 0xc3, 0xbf, 0xb8, 0x03, 0x62, 0x7f, 0xf9, 0x0e, 0x08, 0xfe, 0x8e, 0xd2, 0x11, 0xe0, - 0xde, 0x3d, 0x3a, 0x28, 0xdd, 0xef, 0xc8, 0x63, 0xb5, 0xd2, 0x44, 0x84, 0x36, 0x3a, 0x8f, 0xb4, - 0xdb, 0x4e, 0xc2, 0x43, 0x0c, 0x24, 0xaf, 0x0d, 0x1b, 0xae, 0x76, 0x86, 0xab, 0x88, 0x0a, 0x49, - 0xdd, 0xbc, 0x1d, 0x93, 0x10, 0x98, 0x8c, 0xe3, 0x9b, 0x71, 0x76, 0x1c, 0x04, 0x9f, 0xc5, 0x69, - 0x5d, 0x3d, 0xe3, 0xa5, 0xcb, 0x24, 0xbf, 0xe3, 0x8f, 0x32, 0xd1, 0xdf, 0x4a, 0x9f, 0x1b, 0x10, - 0x45, 0x48, 0x8c, 0x35, 0xd9, 0xa5, 0x7d, 0x53, 0x8c, 0x37, 0xd3, 0xb6, 0xd5, 0x43, 0x56, 0x82, - 0x05, 0xa4, 0xd7, 0xb2, 0x76, 0x56, 0xd8, 0x00, 0xb1, 0x40, 0x15, 0xa9, 0x61, 0x8d, 0xe2, 0x1a, - 0xc1, 0x29, 0x7a, 0xf7, 0xc7, 0xe7, 0x4f, 0x05, 0x64, 0x39, 0x0d, 0x54, 0x32, 0x86, 0x72, 0xfb, - 0x9d, 0xa7, 0x09, 0x8c, 0x49, 0x3f, 0x19, 0xa6, 0xa3, 0xae, 0x97, 0xec, 0xa5, 0x58, 0xe0, 0x2e, - 0x67, 0xbc, 0x4b, 0x2e, 0x6c, 0xbe, 0x3d, 0xdd, 0x4d, 0xc8, 0xc0, 0x89, 0x52, 0x0c, 0x9f, 0x77, - 0x3a, 0xa3, 0x85, 0xd7, 0x87, 0xcd, 0xe7, 0xd3, 0x4b, 0x57, 0x8b, 0xcc, 0x1e, 0x70, 0x7e, 0x39, - 0xf9, 0x5e, 0xf2, 0x34, 0x75, 0x8b, 0x8a, 0x8a, 0x3c, 0xcb, 0xb1, 0xf4, 0x18, 0xd5, 0x8c, 0x38, - 0x84, 0x0b, 0xc3, 0x4d, 0xf0, 0x7b, 0x44, 0x5c, 0x44, 0x56, 0xb2, 0x6a, 0x36, 0xe5, 0x44, 0x2c, - 0x0d, 0xae, 0x41, 0x86, 0x54, 0x2b, 0xe6, 0x5e, 0xf9, 0xa7, 0xa7, 0xb8, 0x61, 0x84, 0xac, 0x98, - 0x2a, 0x0e, 0x7f, 0x0b, 0xc2, 0x33, 0xf8, 0x8d, 0xa4, 0x6c, 0xf4, 0xb6, 0xf8, 0xdd, 0xfd, 0x9e, - 0x63, 0xe0, 0x6f, 0x8e, 0x5d, 0x56, 0x31, 0x3d, 0x3c, 0x7c, 0x40, 0x5a, 0x91, 0xfa, 0x69, 0x7d, - 0x4c, 0x5c, 0xab, 0x6c, 0xac, 0x33, 0xce, 0x6c, 0xea, 0x79, 0xbf, 0x4f, 0xcd, 0x03, 0x01, 0x94, - 0x7c, 0x0e, 0x4e, 0x04, 0x73, 0x28, 0x12, 0x28, 0x59, 0x5a, 0x38, 0x75, 0x0d, 0x4c, 0x6c, 0x37, - 0x83, 0x81, 0x1e, 0x3f, 0x9d, 0x09, 0x5d, 0xd8, 0x4d, 0xdd, 0xd4, 0x09, 0xda, 0xa8, 0xb8, 0x55, - 0x53, 0x64, 0xde, 0x10, 0x07, 0xed, 0x44, 0x54, 0xa4, 0xa3, 0x86, 0x48, 0x68, 0xb4, 0xa1, 0x22, - 0x5d, 0xf8, 0xc6, 0x3b, 0xd2, 0x2a, 0xca, 0x85, 0xc4, 0xfd, 0xb6, 0xf4, 0xf2, 0x93, 0xf6, 0xee, - 0xb3, 0xf9, 0x6e, 0x1e, 0x6a, 0xef, 0x6e, 0x4b, 0xef, 0xf4, 0x74, 0x27, 0xe6, 0xbb, 0x7c, 0x51, - 0xbc, 0x1b, 0x98, 0x7d, 0xd8, 0x75, 0x3f, 0x8b, 0x7e, 0x25, 0x4f, 0xf3, 0x63, 0x98, 0x1d, 0x88, - 0x61, 0x0f, 0xcf, 0xb8, 0x82, 0x7e, 0x48, 0xec, 0xa8, 0x9d, 0xed, 0xf5, 0x50, 0x54, 0x70, 0x28, - 0xa6, 0xd4, 0x43, 0xdb, 0xd8, 0xa7, 0x5a, 0x7f, 0xc3, 0x11, 0xcd, 0xbd, 0x7d, 0x20, 0x47, 0x4c, - 0x85, 0xa9, 0xcb, 0x39, 0x72, 0x7e, 0xc5, 0x9b, 0x22, 0xc7, 0x6f, 0x1f, 0xae, 0xe3, 0xf3, 0xa7, - 0xb3, 0x76, 0x17, 0x36, 0x93, 0xf0, 0x4f, 0xa5, 0xa6, 0xcf, 0x6b, 0xeb, 0xff, 0xdc, 0xac, 0xbf, - 0xf9, 0x66, 0x87, 0xf2, 0x8a, 0xe9, 0x47, 0xb9, 0x36, 0x17, 0x0f, 0xd5, 0x86, 0xd3, 0x8a, 0x2a, - 0x99, 0xb9, 0xcb, 0x17, 0x0d, 0x6d, 0xaf, 0x7d, 0xb3, 0x53, 0xe4, 0x57, 0x53, 0x9b, 0x93, 0x07, - 0x7b, 0xbb, 0xbe, 0xac, 0x4a, 0x2f, 0x8b, 0x5d, 0xde, 0xbc, 0x7d, 0x54, 0xac, 0x82, 0x6f, 0x59, - 0xa7, 0x53, 0xc0, 0x67, 0x6b, 0xc8, 0xb1, 0xfb, 0xfb, 0xed, 0xee, 0x3e, 0x1c, 0x26, 0x49, 0xeb, - 0x9b, 0x4b, 0x55, 0x26, 0x6b, 0x3b, 0x21, 0x1e, 0xe9, 0xf6, 0x5d, 0xfe, 0xd9, 0xc5, 0x9f, 0x2d, - 0xfe, 0xdd, 0x83, 0xdf, 0xce, 0x39, 0x2d, 0x38, 0x87, 0xda, 0x62, 0x13, 0xa2, 0xa2, 0xe8, 0x20, - 0x1e, 0x84, 0x6d, 0x3f, 0x77, 0x64, 0x20, 0xac, 0x48, 0x83, 0xe4, 0x20, 0x1b, 0x24, 0x7a, 0x20, - 0xdf, 0x09, 0xce, 0xe9, 0x32, 0x50, 0x86, 0xe1, 0xb2, 0x95, 0x42, 0x58, 0x8a, 0x82, 0x04, 0x03, - 0x26, 0x7e, 0xd2, 0x4e, 0xe1, 0x84, 0x12, 0xb6, 0x73, 0x1a, 0xf1, 0xb3, 0x30, 0x8a, 0x58, 0x46, - 0xbc, 0xb5, 0xaf, 0x4e, 0x83, 0xef, 0xae, 0x84, 0x58, 0x39, 0x73, 0x0f, 0xf7, 0x62, 0x38, 0x08, - 0xbb, 0x75, 0x5d, 0x38, 0x4e, 0x27, 0xd0, 0x5f, 0xb3, 0xbd, 0x5e, 0x7b, 0x42, 0x7d, 0x86, 0xbf, - 0xa6, 0xf0, 0x6b, 0xf7, 0x19, 0xfc, 0x03, 0x62, 0x90, 0x95, 0xd2, 0xc7, 0x47, 0x1c, 0x1b, 0x8b, - 0x80, 0x84, 0x87, 0xed, 0xb6, 0xa6, 0x9b, 0x45, 0xfc, 0x66, 0xb3, 0xe2, 0x0f, 0x0b, 0x44, 0x10, - 0xd2, 0xd8, 0x36, 0x58, 0x2b, 0x1f, 0x12, 0x89, 0xce, 0x92, 0x0a, 0x86, 0xb7, 0xbe, 0xf5, 0x0c, - 0xd9, 0xd0, 0x5e, 0x20, 0x86, 0x87, 0xe5, 0x9a, 0x2d, 0xb6, 0x12, 0xf6, 0x16, 0x54, 0xc1, 0xb8, - 0xb9, 0xb6, 0x73, 0x57, 0x4c, 0x62, 0x39, 0xbc, 0x7a, 0xda, 0x70, 0xe5, 0x2c, 0x7b, 0xcd, 0x59, - 0xb2, 0xa0, 0x1d, 0x68, 0x57, 0xb8, 0x25, 0x27, 0x88, 0x1b, 0xf6, 0x7d, 0x18, 0x18, 0x65, 0x06, - 0xae, 0x9c, 0x1c, 0x3c, 0x94, 0x57, 0x2b, 0x7b, 0x03, 0xa9, 0x4f, 0x51, 0x7e, 0x7e, 0x65, 0x68, - 0xa7, 0x2c, 0x82, 0x4f, 0x68, 0x7d, 0x7c, 0xfa, 0x93, 0xff, 0xf6, 0xd0, 0x6b, 0x59, 0xed, 0x04, - 0x76, 0xdc, 0x77, 0xf0, 0x37, 0x85, 0xbf, 0x3e, 0x3e, 0x3f, 0x4d, 0xc5, 0xde, 0x92, 0x52, 0x9a, - 0x9b, 0xc4, 0x87, 0x0a, 0xad, 0xec, 0x38, 0xe5, 0x85, 0xfe, 0xd0, 0xef, 0xc0, 0xb1, 0x0d, 0xf6, - 0x28, 0x23, 0xd8, 0x5a, 0xa3, 0x92, 0x4e, 0x84, 0xcb, 0x6b, 0x7b, 0xe3, 0xba, 0xfe, 0x5d, 0x6a, - 0x5c, 0xe8, 0xcb, 0xc0, 0xc6, 0x4b, 0x7d, 0x19, 0x01, 0x2f, 0xf6, 0x5d, 0xd2, 0xb3, 0xbd, 0x88, - 0xa7, 0xaf, 0xef, 0x82, 0x09, 0xaa, 0x79, 0xd6, 0x31, 0x88, 0x58, 0xee, 0xb5, 0x6b, 0xcb, 0x21, - 0x57, 0xf8, 0x25, 0x1b, 0x8c, 0x25, 0xb0, 0xcf, 0xec, 0xb8, 0x71, 0xf5, 0x0a, 0x08, 0xfa, 0x89, - 0x96, 0x5f, 0x05, 0xc8, 0x47, 0xdf, 0x34, 0xf4, 0x4f, 0xad, 0x2f, 0x41, 0x14, 0x25, 0xb7, 0x96, - 0x6b, 0x31, 0x30, 0x8e, 0x6b, 0xa1, 0x26, 0x27, 0x46, 0x68, 0x4c, 0x39, 0xa0, 0xce, 0xdc, 0x49, - 0x73, 0x86, 0x13, 0xce, 0x70, 0xa7, 0xeb, 0x34, 0x44, 0x40, 0xfc, 0xb2, 0xc5, 0x69, 0x70, 0x46, - 0x7d, 0x6a, 0x4f, 0x4e, 0xe5, 0xf3, 0x99, 0x1f, 0x94, 0x93, 0x4c, 0x8c, 0x7b, 0x2a, 0x9e, 0x4b, - 0x13, 0x71, 0x5f, 0xb6, 0xd3, 0xdd, 0x02, 0xe1, 0x80, 0xca, 0x16, 0x35, 0x70, 0xd5, 0x92, 0x3c, - 0xdb, 0xeb, 0x43, 0xff, 0x3c, 0x30, 0x88, 0xc5, 0x81, 0x4c, 0xf1, 0xee, 0xb1, 0x0a, 0x28, 0xe3, - 0x5e, 0x9c, 0x6a, 0x22, 0x8a, 0xeb, 0x52, 0x8e, 0xa7, 0x57, 0x0d, 0x4e, 0x47, 0xf6, 0xb4, 0x5d, - 0xc9, 0x0a, 0xb1, 0xbc, 0x85, 0x94, 0x2e, 0x4a, 0x0f, 0x41, 0x0a, 0x85, 0x52, 0x0a, 0x39, 0xab, - 0x3b, 0x3f, 0xff, 0x2e, 0x71, 0xbf, 0x14, 0x75, 0xcf, 0xf7, 0x12, 0xc7, 0x9c, 0xb1, 0x99, 0xcb, - 0xc2, 0xe8, 0x0e, 0x26, 0xcf, 0x6e, 0x5f, 0x49, 0xa4, 0x2f, 0x20, 0xc9, 0x07, 0x7c, 0x77, 0x17, - 0xf8, 0xb1, 0x3a, 0x18, 0x83, 0x14, 0x09, 0x86, 0x3b, 0x30, 0x7f, 0x62, 0xba, 0xef, 0x9f, 0xc0, - 0x20, 0x70, 0xe1, 0xcc, 0x9a, 0x81, 0x78, 0x32, 0x1b, 0x14, 0xeb, 0x2d, 0xb8, 0xf3, 0xf1, 0xb6, - 0xcb, 0xac, 0x09, 0x86, 0xe8, 0x95, 0x11, 0xbd, 0x77, 0x81, 0xfc, 0x9b, 0xd6, 0x03, 0x82, 0xf3, - 0x4e, 0xaf, 0xe6, 0x5a, 0xc1, 0x39, 0x38, 0xc6, 0x8b, 0x2d, 0x73, 0x1c, 0x9b, 0x2c, 0x0e, 0x2e, - 0xc5, 0x70, 0x1c, 0xef, 0xd8, 0xae, 0xe8, 0xdd, 0x10, 0x8a, 0x8f, 0x2f, 0x04, 0x07, 0x81, 0xa4, - 0xf9, 0x40, 0xd0, 0x3e, 0xcb, 0x31, 0xef, 0xb7, 0x03, 0xa7, 0x96, 0x43, 0x41, 0x9a, 0xe7, 0x38, - 0x5a, 0xea, 0x2c, 0x7f, 0x7c, 0x6a, 0x1c, 0x85, 0x3a, 0xa9, 0x36, 0xda, 0x2b, 0x99, 0x58, 0xfb, - 0xc6, 0xeb, 0x55, 0x72, 0xee, 0x20, 0xe8, 0x40, 0x5e, 0xd6, 0x3e, 0x14, 0x59, 0xba, 0x76, 0x53, - 0xda, 0xdf, 0xa2, 0x8b, 0x73, 0xe2, 0x67, 0x69, 0x4e, 0xbc, 0x2a, 0x77, 0x13, 0x22, 0xc4, 0x2e, - 0x35, 0x28, 0xba, 0xe3, 0xe4, 0x36, 0x30, 0xd1, 0xe8, 0x90, 0xc1, 0x7c, 0x24, 0x21, 0xe9, 0x90, - 0x5e, 0x41, 0x8b, 0xfd, 0x2e, 0x32, 0xa2, 0xc6, 0xd1, 0x8b, 0xa6, 0x98, 0x27, 0x5f, 0xe2, 0x89, - 0x11, 0x57, 0x92, 0x9d, 0x1b, 0x09, 0x50, 0x85, 0x2a, 0xee, 0x15, 0x84, 0xc5, 0xde, 0x89, 0x52, - 0x1a, 0x55, 0x82, 0x84, 0x8d, 0x81, 0xad, 0x31, 0x99, 0x57, 0xed, 0xfc, 0x84, 0x86, 0xf6, 0x65, - 0x1a, 0xa2, 0x85, 0x5c, 0xc3, 0xdb, 0x13, 0xc4, 0xe3, 0x58, 0xf3, 0xfe, 0x08, 0xef, 0x03, 0xb3, - 0x30, 0xff, 0xb2, 0x26, 0xce, 0x61, 0x77, 0xdd, 0xcb, 0xde, 0xba, 0x97, 0x7d, 0x7c, 0x29, 0x59, - 0x5f, 0xed, 0x86, 0x58, 0xef, 0xd7, 0xe4, 0xf0, 0x97, 0x35, 0xef, 0x5e, 0x12, 0x4c, 0x6c, 0x41, - 0x25, 0xdb, 0x10, 0xed, 0xa3, 0xe5, 0xe8, 0xd4, 0xae, 0x1a, 0xa3, 0x26, 0xdb, 0x60, 0xdc, 0x22, - 0xc6, 0x41, 0x65, 0xd9, 0x94, 0xd9, 0x96, 0x2d, 0xf7, 0x38, 0xc9, 0xc5, 0x38, 0xaa, 0x4b, 0x71, - 0x78, 0xf8, 0xa1, 0x36, 0xfe, 0x55, 0x70, 0x77, 0x5b, 0x89, 0x1f, 0x20, 0x5b, 0x69, 0x6d, 0x74, - 0xe6, 0x57, 0xaf, 0x2b, 0x80, 0xfa, 0x31, 0xd8, 0xe5, 0x08, 0xf5, 0x45, 0x35, 0xb5, 0x86, 0x89, - 0x77, 0xd7, 0xa6, 0xcd, 0xbe, 0x22, 0xed, 0xcd, 0x9a, 0xb4, 0xb5, 0x09, 0x3e, 0xaf, 0x2f, 0x6c, - 0x4d, 0x6f, 0xc2, 0xb6, 0x7b, 0x6d, 0xda, 0x00, 0x99, 0x52, 0x6b, 0x53, 0xfe, 0x36, 0xc9, 0x76, - 0x6e, 0xd7, 0xa4, 0x23, 0x1e, 0xfb, 0x72, 0x4a, 0x0d, 0xff, 0x54, 0xfc, 0x24, 0x2e, 0xa2, 0x34, - 0xab, 0x4a, 0xe6, 0xf2, 0xfc, 0x35, 0xd8, 0x47, 0x0a, 0x63, 0x1f, 0xb7, 0xaa, 0x15, 0x3e, 0x67, - 0x3a, 0x29, 0xbe, 0xe2, 0x97, 0x96, 0x47, 0x67, 0xa7, 0xea, 0xfe, 0x3f, 0x60, 0xc5, 0x72, 0x46, - 0xfa, 0x60, 0xdd, 0x4a, 0x98, 0x6d, 0x41, 0xaa, 0x4a, 0x66, 0x4d, 0x50, 0x23, 0x1b, 0xfa, 0x5a, - 0x51, 0xee, 0xe6, 0x0f, 0x6a, 0xb8, 0xb9, 0x7c, 0x14, 0xc0, 0x9b, 0xc5, 0x6c, 0x96, 0xd3, 0xc2, - 0x52, 0xba, 0xce, 0x7a, 0x05, 0xf1, 0x2b, 0x71, 0x17, 0x1c, 0x1c, 0x7c, 0xef, 0x44, 0xe6, 0xad, - 0x54, 0xe9, 0x42, 0x21, 0x18, 0xf6, 0x9e, 0x3c, 0x21, 0xec, 0xe5, 0xc6, 0x28, 0xfb, 0x64, 0x8e, - 0x87, 0x36, 0x39, 0xeb, 0x2f, 0x36, 0x5a, 0x06, 0xd6, 0x4e, 0xe4, 0x58, 0x5d, 0xb2, 0x03, 0x90, - 0x36, 0x30, 0x18, 0x13, 0x87, 0x46, 0xad, 0xca, 0xbc, 0xe9, 0xfb, 0xa3, 0x48, 0xd7, 0x09, 0x43, - 0xe4, 0x45, 0x82, 0x8b, 0x97, 0xa9, 0x6b, 0x3e, 0xfc, 0xec, 0x4e, 0xff, 0xe6, 0xe5, 0x5b, 0x05, - 0xb4, 0x4c, 0xce, 0x2b, 0x1f, 0x3f, 0xab, 0x64, 0x69, 0x7c, 0x7c, 0x31, 0x62, 0xd6, 0x7d, 0x7d, - 0xc9, 0x4a, 0x75, 0x91, 0xc0, 0x72, 0x36, 0x67, 0x00, 0x79, 0x31, 0xae, 0x82, 0x3f, 0x72, 0xf5, - 0x11, 0x3b, 0xcb, 0x78, 0xcd, 0x22, 0x8f, 0xe0, 0xc2, 0xa4, 0x02, 0x3f, 0x1e, 0xa7, 0xd0, 0xea, - 0x1c, 0x67, 0x92, 0xe6, 0x46, 0x2e, 0x6e, 0x66, 0x83, 0x1a, 0x23, 0x37, 0xdd, 0xb6, 0x4d, 0x6c, - 0x02, 0xf9, 0x9b, 0x55, 0x18, 0xd8, 0x93, 0x45, 0xae, 0x19, 0x89, 0x0e, 0x02, 0xcd, 0x76, 0x8d, - 0x2c, 0x32, 0x3b, 0xe8, 0xb9, 0x7e, 0xf9, 0x76, 0x3e, 0xbe, 0xbb, 0xbf, 0xef, 0xaa, 0xdf, 0xf0, - 0x62, 0x0b, 0x4d, 0x39, 0x91, 0xf6, 0xac, 0x7f, 0x56, 0x5c, 0xbb, 0x74, 0xc8, 0xb2, 0x75, 0xd4, - 0x30, 0x08, 0xbc, 0xa0, 0x71, 0x80, 0x39, 0xe2, 0x2a, 0x38, 0xde, 0xec, 0x0e, 0x28, 0x2c, 0x1f, - 0xd6, 0xaa, 0xac, 0x73, 0xd3, 0xf0, 0xe6, 0xb4, 0x0c, 0xdc, 0x21, 0x79, 0xe7, 0xb4, 0x2e, 0x09, - 0x9d, 0x71, 0xf5, 0xd6, 0xa8, 0xb9, 0x9e, 0x5e, 0xd0, 0x64, 0xe8, 0xfc, 0x88, 0x1a, 0x49, 0x1c, - 0x87, 0x07, 0xab, 0xf3, 0xef, 0xff, 0x0b, 0xab, 0xf3, 0xe4, 0x89, 0x16, 0xf6, 0x7f, 0xff, 0xcf, - 0xcb, 0x4a, 0x15, 0x37, 0xeb, 0x62, 0x6d, 0xdb, 0x27, 0xe4, 0xf9, 0x7b, 0xa4, 0x52, 0x61, 0x5d, - 0x0e, 0x2f, 0x17, 0xf8, 0x5c, 0x03, 0xea, 0x2c, 0xb1, 0x97, 0xc9, 0x3e, 0x1d, 0xb6, 0x03, 0x38, - 0xcb, 0x85, 0x6f, 0x3b, 0xd4, 0xc4, 0xa2, 0x88, 0x68, 0x5e, 0xf1, 0xc9, 0xee, 0x2c, 0xee, 0x1c, - 0x82, 0x29, 0x55, 0x21, 0xdd, 0x4e, 0xe7, 0x3b, 0xc7, 0x52, 0xf3, 0x2f, 0x0a, 0x17, 0x23, 0xfa, - 0x17, 0x19, 0xbd, 0x94, 0x99, 0x31, 0xfa, 0x40, 0x64, 0xbe, 0xd5, 0x9a, 0xa5, 0xc9, 0x1c, 0x4e, - 0xe9, 0x99, 0x38, 0xa3, 0x47, 0x26, 0xd8, 0xd7, 0x39, 0x71, 0x7b, 0x86, 0x59, 0x2b, 0x0d, 0x26, - 0x41, 0x48, 0x3c, 0x31, 0x58, 0x0b, 0x72, 0xa8, 0x8a, 0xe6, 0x2b, 0x32, 0x4e, 0x43, 0x5b, 0x2c, - 0x61, 0xb9, 0x42, 0xad, 0x41, 0x94, 0xa2, 0x9a, 0xfd, 0x04, 0xb7, 0x87, 0x1a, 0x53, 0x5a, 0xc4, - 0x34, 0x3a, 0xa3, 0xf9, 0xe2, 0x78, 0x8d, 0xa2, 0x2b, 0x60, 0x3c, 0xfb, 0xd1, 0x09, 0x41, 0x84, - 0xdb, 0xe2, 0xd1, 0x81, 0xa3, 0xf5, 0xf4, 0x75, 0x3c, 0xb5, 0x7b, 0x88, 0x76, 0xe6, 0x78, 0xd6, - 0xef, 0xbf, 0x5b, 0x6d, 0x7e, 0x29, 0x59, 0xa1, 0x46, 0xd6, 0x01, 0x14, 0xe6, 0xc3, 0x19, 0x5d, - 0x25, 0xed, 0x9c, 0x51, 0x3a, 0xf2, 0x5a, 0xb5, 0xfb, 0x2e, 0x4e, 0x23, 0xa1, 0x39, 0xa3, 0x22, - 0x4b, 0x86, 0x4f, 0x99, 0x49, 0xde, 0x34, 0x1f, 0x7f, 0x0e, 0x3e, 0x9e, 0x80, 0x18, 0xbd, 0xcd, - 0xee, 0xef, 0xd5, 0x21, 0xf3, 0x36, 0x3b, 0xe8, 0xdc, 0xdf, 0xdb, 0xf6, 0x6d, 0x46, 0xfc, 0xbb, - 0x1f, 0x83, 0x8b, 0x13, 0x68, 0x65, 0x90, 0xdb, 0xb6, 0xe0, 0x05, 0x5e, 0xc3, 0xcd, 0x3a, 0xb2, - 0x6e, 0xb3, 0x0c, 0xea, 0x78, 0x4b, 0xf4, 0x6b, 0xa4, 0x59, 0x20, 0x45, 0x03, 0xab, 0x17, 0xca, - 0xa9, 0xae, 0x92, 0x2c, 0x27, 0x23, 0xa2, 0xb6, 0xb5, 0x87, 0x29, 0x1c, 0xc4, 0xf3, 0x1d, 0xa7, - 0x5f, 0x3e, 0x90, 0x79, 0x1e, 0xf1, 0x8a, 0x5e, 0x5c, 0x83, 0x18, 0x4b, 0x2d, 0xf7, 0x36, 0xdb, - 0x45, 0x30, 0xc1, 0x2c, 0x43, 0xeb, 0x0f, 0x34, 0xb9, 0x41, 0x63, 0x08, 0x9b, 0x65, 0x8e, 0xb2, - 0x4a, 0x82, 0x59, 0x40, 0xc6, 0xa4, 0x2f, 0x29, 0x91, 0x53, 0xa7, 0xb7, 0xa0, 0x04, 0x0e, 0xdb, - 0xc5, 0x12, 0x38, 0xab, 0xb3, 0x34, 0x28, 0xf3, 0x34, 0x9e, 0x0b, 0xc7, 0xd5, 0x1e, 0x98, 0xb8, - 0x17, 0xfb, 0xe8, 0xaf, 0xb4, 0x0a, 0x29, 0x6a, 0x62, 0xb7, 0x6c, 0x36, 0x24, 0x79, 0x36, 0x37, - 0x65, 0x43, 0x8c, 0xd4, 0x18, 0x07, 0xc9, 0x89, 0x60, 0x6f, 0xd9, 0xc8, 0x2e, 0xc0, 0xdc, 0x33, - 0xc7, 0x38, 0xd5, 0x84, 0x19, 0x86, 0x3e, 0x79, 0x62, 0x00, 0x72, 0x67, 0x70, 0x84, 0xd5, 0xc0, - 0xe2, 0xe4, 0x6e, 0x85, 0xd8, 0x8a, 0x46, 0xe2, 0xaf, 0x97, 0x0f, 0x8c, 0xa9, 0x9b, 0xb9, 0x31, - 0x92, 0x8c, 0xd2, 0xc8, 0x81, 0x4d, 0x54, 0x0c, 0x73, 0x7c, 0xc5, 0x9d, 0x3c, 0x89, 0x92, 0x8c, - 0xbb, 0xf8, 0xd1, 0xac, 0x8e, 0xae, 0x86, 0x54, 0xcf, 0x63, 0xcb, 0xed, 0xee, 0xa3, 0x15, 0xd5, - 0x2d, 0x13, 0x1f, 0x8b, 0x12, 0x90, 0xc9, 0x92, 0x0a, 0x48, 0x83, 0xdf, 0xb2, 0xb7, 0xc1, 0xe5, - 0x38, 0x82, 0x85, 0x56, 0xb7, 0x99, 0x2a, 0xea, 0x25, 0x49, 0x26, 0xf1, 0x7b, 0x49, 0x8b, 0x29, - 0xb6, 0x1e, 0x0e, 0x76, 0xb3, 0xeb, 0xc9, 0x04, 0x06, 0x84, 0x0c, 0xed, 0x0c, 0xf0, 0xa8, 0xe9, - 0xa3, 0xc7, 0xa4, 0x5b, 0x3e, 0xba, 0x09, 0x23, 0x90, 0x00, 0x41, 0xcd, 0x5c, 0x38, 0x66, 0xa2, - 0x0d, 0x62, 0x84, 0x11, 0xe3, 0xe8, 0xd5, 0x75, 0xca, 0x4f, 0xd3, 0xeb, 0x14, 0x1e, 0x3f, 0x8c, - 0xc5, 0x63, 0xce, 0x51, 0xdf, 0x8c, 0x91, 0x56, 0x13, 0x03, 0x66, 0xf0, 0xcb, 0x95, 0xc7, 0x4e, - 0x08, 0xba, 0x9e, 0x2e, 0x10, 0x5d, 0x24, 0x9e, 0xba, 0xc6, 0x31, 0x1a, 0x4d, 0x92, 0x22, 0x92, - 0xb2, 0x30, 0x53, 0xf0, 0xb7, 0x9b, 0x63, 0x8e, 0x24, 0xd7, 0x42, 0x6c, 0x1d, 0x57, 0x2e, 0xcf, - 0x55, 0xad, 0xf2, 0x14, 0x91, 0xd1, 0x6b, 0xe0, 0x00, 0xc5, 0xb0, 0x40, 0x35, 0x5b, 0x67, 0xc0, - 0x1b, 0x68, 0x75, 0x64, 0x12, 0x27, 0x21, 0x62, 0x28, 0xe3, 0x85, 0x55, 0x53, 0x2c, 0xb1, 0x62, - 0xd8, 0x2e, 0x20, 0xfe, 0x74, 0x7f, 0x17, 0xe8, 0x3b, 0x84, 0xdd, 0x41, 0x49, 0x0c, 0xaf, 0x4f, - 0xf3, 0x33, 0x52, 0xaf, 0x2a, 0x14, 0x17, 0x92, 0xa7, 0x68, 0x2a, 0xd1, 0x65, 0xca, 0x35, 0x8a, - 0x01, 0x5b, 0x07, 0xd8, 0x6f, 0x1c, 0xb0, 0xb0, 0xcd, 0xf1, 0xa6, 0xb8, 0x27, 0xb6, 0x10, 0x4a, - 0x6a, 0x10, 0xd0, 0x31, 0x9a, 0x8c, 0x4c, 0x4e, 0xb5, 0x8c, 0xcf, 0x44, 0xbd, 0xef, 0xfd, 0xad, - 0x2d, 0xbb, 0xfb, 0x24, 0x2a, 0x8e, 0x92, 0x14, 0xd2, 0x13, 0x21, 0xd0, 0x12, 0x7a, 0x7e, 0xf6, - 0x44, 0x01, 0x07, 0xda, 0x45, 0xe1, 0x79, 0x82, 0x98, 0xb6, 0xea, 0x09, 0x24, 0x9d, 0xf3, 0xd4, - 0x7c, 0xfd, 0x69, 0x64, 0x3e, 0x96, 0xa2, 0x7f, 0xf2, 0xba, 0xb0, 0x49, 0x13, 0xdd, 0x24, 0xfe, - 0x1e, 0x8c, 0x47, 0x63, 0x4f, 0xfc, 0x56, 0xc6, 0x64, 0x98, 0x28, 0x23, 0x2d, 0x20, 0xe2, 0x0a, - 0xa1, 0xf3, 0x4c, 0x5d, 0xfb, 0xc6, 0x5a, 0xc3, 0x2a, 0xed, 0x2a, 0x35, 0x4b, 0xb6, 0x6a, 0x85, - 0x23, 0x78, 0x2c, 0x99, 0xb5, 0x34, 0x43, 0xc5, 0x77, 0x49, 0x4b, 0x7e, 0x72, 0x61, 0x9b, 0x58, - 0x68, 0x56, 0xe0, 0x51, 0x68, 0x4f, 0xeb, 0x76, 0xf2, 0x85, 0xd6, 0x4d, 0xaa, 0xfd, 0x76, 0xba, - 0x83, 0x60, 0x88, 0x3a, 0xb8, 0x9d, 0x1d, 0x27, 0x34, 0x4c, 0xd3, 0xfd, 0x31, 0x1e, 0xc7, 0x21, - 0x88, 0xf8, 0xd6, 0x0d, 0xd3, 0xf4, 0xe2, 0x55, 0xb7, 0xf4, 0xea, 0xa2, 0x78, 0xd5, 0x3b, 0x73, - 0x6d, 0xf5, 0xe5, 0xee, 0xb7, 0xf4, 0x13, 0x24, 0x85, 0xa1, 0x3a, 0xd2, 0x48, 0x7b, 0x5b, 0xa4, - 0x45, 0x82, 0x76, 0x08, 0x3a, 0x3c, 0x79, 0x4b, 0x51, 0x84, 0x0f, 0xa3, 0x22, 0x65, 0x9e, 0xe0, - 0xe0, 0x12, 0x3a, 0x53, 0x48, 0x33, 0xc9, 0x71, 0xd3, 0x02, 0x7f, 0x58, 0x8d, 0xab, 0xcd, 0xe4, - 0x17, 0x6a, 0xc6, 0xd0, 0x7b, 0xc7, 0xad, 0xaa, 0x60, 0xd4, 0xfb, 0xec, 0xce, 0xad, 0x57, 0xc0, - 0xa8, 0x18, 0xa1, 0x11, 0x03, 0xd5, 0x2f, 0x45, 0xe6, 0xdd, 0x11, 0xfe, 0xe3, 0x75, 0xdc, 0x92, - 0x0e, 0xa6, 0x88, 0xd1, 0xc3, 0x18, 0xbd, 0x52, 0x8c, 0xbe, 0x1e, 0xa3, 0x8f, 0x31, 0xfa, 0x32, - 0x06, 0x1d, 0x28, 0x7e, 0xe9, 0xea, 0xce, 0x9c, 0x5b, 0xe3, 0xdd, 0xa4, 0xab, 0xbf, 0xed, 0x95, - 0xdf, 0xf6, 0xf4, 0xb7, 0xfd, 0xf2, 0xdb, 0x3e, 0x62, 0xa4, 0xe2, 0xb2, 0x43, 0x34, 0x26, 0xe2, - 0x37, 0x2f, 0x79, 0x44, 0x54, 0x20, 0x6d, 0xc2, 0xe5, 0x0b, 0x32, 0xdc, 0xee, 0x76, 0x3c, 0x78, - 0x59, 0x18, 0xc7, 0xce, 0xd1, 0x9e, 0xad, 0x35, 0x53, 0x70, 0xdc, 0x5b, 0xd6, 0xe0, 0x02, 0xa4, - 0xef, 0x67, 0x36, 0xf3, 0xee, 0x76, 0x31, 0x36, 0xb2, 0x2b, 0x04, 0x71, 0x72, 0x7d, 0x79, 0xd5, - 0xca, 0x16, 0xe3, 0x49, 0x80, 0x44, 0x75, 0x19, 0x12, 0x04, 0x32, 0x89, 0x49, 0x29, 0x49, 0x0f, - 0x93, 0x08, 0x02, 0x4d, 0x2c, 0x41, 0xd8, 0x16, 0x1b, 0x71, 0xfa, 0x18, 0xe7, 0xe7, 0x30, 0xcb, - 0x70, 0x23, 0x16, 0xa6, 0xcc, 0x11, 0x6e, 0x46, 0xf9, 0x11, 0xa3, 0xbc, 0xd0, 0x6a, 0xd6, 0xa2, - 0x66, 0xb4, 0x60, 0xc0, 0xb5, 0x92, 0x09, 0x48, 0x5c, 0x34, 0x6b, 0x5e, 0x69, 0xf3, 0x88, 0x56, - 0x60, 0x46, 0x89, 0xc5, 0x5f, 0xb0, 0xf9, 0xc0, 0x4b, 0x1b, 0xb2, 0x45, 0x91, 0x93, 0xae, 0x50, - 0x1c, 0xc0, 0x07, 0x82, 0xf3, 0xbf, 0x5b, 0x9c, 0x88, 0x20, 0x60, 0x76, 0xe7, 0x96, 0x5c, 0x81, - 0xcc, 0x99, 0xa8, 0x71, 0xfe, 0xd6, 0x1c, 0xae, 0x04, 0x37, 0xe7, 0xa6, 0x6e, 0x79, 0xba, 0xdd, - 0x66, 0x5e, 0x71, 0xcf, 0x73, 0xb3, 0x22, 0x88, 0xcc, 0xde, 0x91, 0xda, 0xf6, 0xf4, 0xcc, 0xcb, - 0x74, 0xa7, 0x3c, 0x72, 0xec, 0x93, 0xba, 0x76, 0x76, 0x96, 0x43, 0x76, 0x1a, 0x8c, 0x87, 0x7f, - 0x35, 0xa7, 0x3c, 0x77, 0xac, 0xe2, 0x1d, 0xf4, 0x64, 0xcc, 0xae, 0x88, 0xd9, 0x35, 0x62, 0x86, - 0x45, 0xcc, 0xbe, 0x8c, 0xd9, 0x13, 0x31, 0x4d, 0x47, 0x3f, 0xe5, 0xcc, 0x08, 0xf2, 0x26, 0x3b, - 0xd8, 0x1f, 0x64, 0x78, 0x93, 0xc2, 0x83, 0x4f, 0x9b, 0x13, 0x16, 0x9b, 0xed, 0x68, 0x21, 0x6f, - 0x89, 0xfe, 0x05, 0x82, 0x07, 0x5b, 0x30, 0xd3, 0x33, 0x58, 0xa5, 0x0e, 0xba, 0xbd, 0xe7, 0xa3, - 0x9e, 0xb7, 0xef, 0xc0, 0x1e, 0x54, 0xf6, 0x50, 0xc6, 0xde, 0x83, 0x11, 0x48, 0xe3, 0x91, 0x6d, - 0x84, 0x6e, 0xc9, 0xe0, 0x54, 0xdb, 0xdf, 0x63, 0x80, 0xa7, 0x07, 0x74, 0x88, 0x0c, 0x98, 0xbf, - 0x52, 0x8b, 0xf0, 0x92, 0xc9, 0x72, 0xae, 0x08, 0x0b, 0x95, 0x48, 0xf0, 0xac, 0xc3, 0x6b, 0x58, - 0x34, 0xe6, 0xb0, 0x53, 0xcd, 0x90, 0x80, 0x24, 0x69, 0x3e, 0x69, 0x7a, 0x49, 0x83, 0x8a, 0x02, - 0xed, 0xf4, 0x64, 0x25, 0xf7, 0xc5, 0x91, 0x68, 0x76, 0x07, 0x07, 0xe4, 0x5a, 0x4f, 0x58, 0xdc, - 0x49, 0x58, 0xe5, 0x2b, 0xa9, 0x3e, 0x5d, 0x97, 0xec, 0xb7, 0x83, 0x83, 0x48, 0x5d, 0xdd, 0x92, - 0x03, 0x65, 0x74, 0x0a, 0x81, 0x67, 0x82, 0xf0, 0x05, 0xb3, 0x6c, 0x07, 0xcd, 0xee, 0xb5, 0xae, - 0x8c, 0x25, 0xba, 0x39, 0x30, 0xee, 0x38, 0xb7, 0x2c, 0x95, 0x9d, 0xf5, 0x0b, 0xb9, 0xf9, 0x5a, - 0x1e, 0x3f, 0xc3, 0x66, 0xea, 0x22, 0xcb, 0x53, 0xbb, 0xe3, 0x76, 0xbf, 0x87, 0x76, 0x36, 0x94, - 0xa5, 0x37, 0xb9, 0xf0, 0xe3, 0xad, 0x36, 0x94, 0xe2, 0x89, 0x56, 0x22, 0x39, 0x12, 0x42, 0x82, - 0x80, 0x60, 0x64, 0x86, 0xb9, 0x12, 0xd1, 0x57, 0xc5, 0x62, 0x5d, 0x1b, 0x2b, 0x74, 0x24, 0x90, - 0x76, 0x46, 0x41, 0xdb, 0xdf, 0x17, 0x26, 0x05, 0xd3, 0xf2, 0x51, 0xff, 0x1b, 0x56, 0xfe, 0xb4, - 0x74, 0xa5, 0x0c, 0x6b, 0x72, 0x0c, 0xad, 0x4b, 0x80, 0x77, 0x77, 0xc8, 0x5f, 0xfd, 0xc3, 0xbe, - 0x50, 0xec, 0x4c, 0xd0, 0xa7, 0x64, 0x81, 0xff, 0x20, 0x70, 0xf2, 0xb5, 0x8f, 0x8b, 0x51, 0x9d, - 0xc1, 0x91, 0xb9, 0xf4, 0x1a, 0xb7, 0x87, 0x98, 0xcd, 0xac, 0x58, 0xa0, 0xa1, 0xc7, 0x06, 0xe4, - 0x4c, 0x22, 0xe7, 0x3a, 0x7f, 0x46, 0x9c, 0xca, 0x24, 0x22, 0x66, 0xcd, 0xdf, 0x6e, 0x66, 0x28, - 0xc4, 0xa0, 0x3e, 0x34, 0xd8, 0x39, 0x25, 0xdb, 0x5c, 0x92, 0x8c, 0x50, 0x9f, 0xaa, 0x07, 0x63, - 0x48, 0xfb, 0xbc, 0x57, 0xee, 0x15, 0xc7, 0xc6, 0xab, 0xc1, 0xb6, 0xbf, 0x40, 0x54, 0x1c, 0xdf, - 0x6a, 0x93, 0x10, 0x59, 0x30, 0x35, 0x35, 0x7f, 0xb5, 0x99, 0x39, 0x51, 0x82, 0x91, 0xf5, 0xe6, - 0x8e, 0xa6, 0x07, 0xfc, 0x7a, 0x79, 0x89, 0x13, 0x22, 0xb3, 0x06, 0xb0, 0x11, 0xbc, 0xde, 0x42, - 0xa2, 0x41, 0x6d, 0xa9, 0x0e, 0x60, 0x7c, 0xa1, 0xd3, 0x09, 0x66, 0x92, 0x8f, 0x8c, 0xa6, 0xe8, - 0x36, 0xae, 0xa5, 0x76, 0x74, 0x5d, 0xbd, 0x40, 0x0b, 0x0f, 0xb5, 0xed, 0x2e, 0x0c, 0xb2, 0x47, - 0x75, 0x45, 0x5d, 0x16, 0x6e, 0x73, 0x1d, 0x9d, 0x95, 0xfc, 0x20, 0x6f, 0x2b, 0x4c, 0x57, 0x13, - 0x61, 0xb1, 0x25, 0xf5, 0xc5, 0xc8, 0x76, 0x3e, 0x2f, 0xb4, 0xc7, 0x7c, 0xeb, 0xa6, 0xee, 0x53, - 0xb6, 0xf2, 0xfb, 0xfb, 0xb0, 0xe4, 0xd4, 0x1c, 0x92, 0x4f, 0x33, 0x1b, 0xbb, 0xe2, 0x6f, 0x87, - 0x1d, 0x88, 0x6e, 0xea, 0x21, 0x0c, 0x76, 0x58, 0x4b, 0xe0, 0xea, 0xb9, 0x60, 0xaa, 0x42, 0x33, - 0x03, 0x27, 0x7a, 0x79, 0xb1, 0x77, 0xe4, 0x57, 0x5e, 0x0d, 0x94, 0xd1, 0x63, 0xc7, 0x55, 0xd6, - 0x86, 0x68, 0x1c, 0x57, 0x18, 0x6f, 0x93, 0xbc, 0xe7, 0x61, 0x71, 0x84, 0x7d, 0xeb, 0x40, 0x1b, - 0xd0, 0x59, 0x53, 0x7b, 0x81, 0xea, 0x82, 0x8e, 0x7b, 0x04, 0xb2, 0x4a, 0x6f, 0xcc, 0x96, 0x68, - 0xcd, 0x68, 0xae, 0x75, 0x10, 0x06, 0x78, 0x7a, 0xc0, 0x76, 0x19, 0xf9, 0x03, 0xf1, 0x10, 0x18, - 0x6c, 0x47, 0x87, 0x00, 0xfc, 0x29, 0xb8, 0xb3, 0x25, 0xfa, 0xdf, 0x45, 0x9f, 0xc0, 0x40, 0x5a, - 0x74, 0x48, 0x6c, 0x09, 0x65, 0xfb, 0x36, 0x0f, 0x9d, 0x7f, 0x44, 0xd6, 0xb4, 0xd7, 0x40, 0x44, - 0x90, 0x6d, 0xb7, 0xf2, 0x19, 0x58, 0x3b, 0x43, 0xfc, 0x4a, 0xc5, 0x81, 0xb3, 0x3b, 0xd0, 0x8e, - 0x9b, 0x05, 0x96, 0x83, 0x46, 0x8d, 0xfb, 0xb8, 0xe3, 0xef, 0x17, 0x38, 0xfe, 0x6e, 0xc1, 0x50, - 0x54, 0x45, 0x38, 0x4b, 0x4d, 0x7d, 0x70, 0x7f, 0xaf, 0x6b, 0x16, 0x7c, 0xed, 0x9c, 0x4c, 0x32, - 0xf1, 0x16, 0x56, 0xb6, 0x5b, 0xd4, 0x20, 0xc3, 0xd1, 0xdb, 0x56, 0xc7, 0x65, 0xb7, 0xcc, 0x09, - 0xba, 0x72, 0xfb, 0x41, 0x5f, 0x5c, 0xb4, 0x09, 0x8d, 0x44, 0xe6, 0x3f, 0xe4, 0x3a, 0x95, 0x85, - 0xe8, 0x3a, 0x27, 0x4a, 0xc0, 0x93, 0xf5, 0x17, 0x3a, 0x5a, 0xfb, 0xbe, 0xaf, 0x34, 0x3b, 0xbb, - 0xbf, 0x1c, 0xbf, 0x7e, 0x87, 0x26, 0xbc, 0x23, 0x6b, 0x91, 0x64, 0x08, 0x6c, 0x86, 0xfe, 0x55, - 0x74, 0xca, 0x46, 0xb7, 0x17, 0x24, 0x11, 0x43, 0x7e, 0x09, 0xa8, 0x31, 0x9b, 0xbb, 0xce, 0xa2, - 0x04, 0x44, 0x24, 0x6a, 0x3f, 0x76, 0xe3, 0xe4, 0xd6, 0x66, 0x92, 0x12, 0xc1, 0xcc, 0xa5, 0x4e, - 0xb7, 0x2c, 0x05, 0x41, 0xec, 0x87, 0x53, 0x58, 0x66, 0xf9, 0xc7, 0x93, 0x27, 0xc2, 0xf9, 0x49, - 0x3b, 0x0f, 0xf3, 0xb8, 0xd7, 0x3c, 0x67, 0xbb, 0x9d, 0xa7, 0xd2, 0x43, 0x61, 0x10, 0x6e, 0xc1, - 0xf1, 0x98, 0xdc, 0xa5, 0x8b, 0x04, 0x7e, 0xe8, 0xac, 0x6c, 0xa1, 0xd5, 0x29, 0x58, 0xf6, 0x02, - 0x8d, 0x80, 0xbb, 0xff, 0x8c, 0x7c, 0x90, 0x50, 0x73, 0xe0, 0xe6, 0x6a, 0x5d, 0xee, 0x20, 0x90, - 0x86, 0x38, 0xce, 0xc1, 0xd0, 0x0f, 0xb2, 0x05, 0x79, 0x2e, 0xfa, 0xc5, 0x19, 0x0f, 0x49, 0x2a, - 0x64, 0xc2, 0x55, 0x3c, 0xba, 0xcd, 0xe8, 0x7c, 0x6f, 0xc3, 0xd7, 0xdb, 0x5e, 0x5a, 0x37, 0x96, - 0x87, 0x1c, 0x4a, 0xab, 0x6d, 0xc7, 0x63, 0x9f, 0xb5, 0x4c, 0xb9, 0xa3, 0x45, 0xee, 0x15, 0xf4, - 0x2b, 0xac, 0x57, 0xde, 0xd2, 0x3a, 0x64, 0xef, 0xcf, 0x1d, 0x74, 0xe4, 0x83, 0x8e, 0x1c, 0x2f, - 0xd0, 0x56, 0x82, 0xd4, 0x5d, 0xf4, 0x39, 0x06, 0xad, 0xc9, 0x15, 0x36, 0x34, 0xf7, 0xff, 0xfa, - 0xe1, 0xcd, 0xce, 0x73, 0x6b, 0xe5, 0x5e, 0x24, 0xd3, 0x2f, 0x5e, 0xae, 0x3b, 0xb3, 0x3d, 0x42, - 0x21, 0xb5, 0x21, 0x77, 0x6c, 0xce, 0x0a, 0xb3, 0x4d, 0xd4, 0x57, 0x38, 0xc2, 0x1e, 0xa9, 0xc1, - 0xba, 0x84, 0xa1, 0xcf, 0x16, 0x33, 0x5b, 0xb9, 0xd2, 0xca, 0x2c, 0xc9, 0x4b, 0x13, 0xbb, 0xb5, - 0x70, 0xd2, 0x20, 0xf5, 0x14, 0xa9, 0x72, 0x50, 0x7a, 0xbe, 0x9e, 0x2f, 0xf2, 0x2f, 0xca, 0xa5, - 0x8e, 0x90, 0x59, 0x26, 0x30, 0x9b, 0x09, 0x1f, 0xd2, 0x31, 0xd7, 0x60, 0xed, 0x8d, 0x6e, 0xb2, - 0x33, 0xdd, 0x9d, 0xc0, 0x80, 0xce, 0x03, 0xe1, 0x77, 0x65, 0x5b, 0xd3, 0xf0, 0xc6, 0xaa, 0x78, - 0xfd, 0xc3, 0x27, 0x80, 0xaf, 0x78, 0x88, 0x6b, 0xb7, 0x9d, 0xe3, 0x80, 0x80, 0xde, 0x93, 0x7e, - 0x04, 0xeb, 0x41, 0x09, 0x40, 0xc8, 0xee, 0x04, 0xae, 0xf5, 0x6f, 0x2d, 0xde, 0x21, 0xb6, 0xc8, - 0xf8, 0xb5, 0xf5, 0x6f, 0xd6, 0xd7, 0x60, 0x14, 0x50, 0x9e, 0x3a, 0x48, 0xc1, 0xca, 0x50, 0xf6, - 0x35, 0x28, 0xf8, 0x56, 0x85, 0x4a, 0xac, 0xa2, 0xd8, 0x13, 0xcc, 0x94, 0x04, 0xb2, 0xc1, 0x7d, - 0xca, 0x8c, 0x93, 0xb8, 0x2c, 0x9a, 0x62, 0x46, 0xe7, 0x00, 0xd7, 0xe5, 0xce, 0x1a, 0xa9, 0x70, - 0x7f, 0x2f, 0x95, 0xc4, 0x2b, 0x10, 0x3f, 0xbd, 0x7d, 0x54, 0x1a, 0x6a, 0x4a, 0x3b, 0x41, 0x50, - 0xa9, 0x1d, 0xc3, 0xb0, 0x02, 0x20, 0x51, 0xb3, 0x05, 0x08, 0xf3, 0xc0, 0x12, 0x14, 0xc3, 0xeb, - 0x3c, 0x25, 0xcb, 0x0e, 0x77, 0x64, 0x42, 0xa2, 0xae, 0xf6, 0x96, 0x49, 0xec, 0x91, 0x5e, 0x0f, - 0x59, 0x63, 0xe3, 0x15, 0xe9, 0xf8, 0xf4, 0x69, 0x5c, 0xe8, 0x67, 0x48, 0x2f, 0x6f, 0x3c, 0x66, - 0xc1, 0x25, 0x2b, 0x11, 0x58, 0x6b, 0x8f, 0xba, 0x32, 0x52, 0xf1, 0x28, 0xfa, 0x0b, 0x22, 0xf3, - 0x0c, 0x61, 0xfe, 0x96, 0x52, 0xb9, 0xb3, 0xf4, 0x77, 0x6f, 0xab, 0xbb, 0xa2, 0xc6, 0x16, 0x4b, - 0x43, 0xc5, 0x37, 0xf0, 0x5d, 0x04, 0xf5, 0x2c, 0x5a, 0x64, 0xa3, 0x66, 0x71, 0x0b, 0xfe, 0x71, - 0x46, 0xe7, 0xd8, 0xef, 0x20, 0x0e, 0x19, 0xc3, 0xad, 0xf5, 0x29, 0xb9, 0x4e, 0x5b, 0x11, 0xee, - 0x63, 0x99, 0x96, 0x9e, 0xce, 0xa3, 0xdf, 0x2e, 0x49, 0xdd, 0x38, 0xec, 0x68, 0x8c, 0x6b, 0x2b, - 0x0a, 0x45, 0x12, 0x46, 0x08, 0xc4, 0x2b, 0x15, 0x90, 0x20, 0x33, 0x18, 0xad, 0xe2, 0xc5, 0xab, - 0xeb, 0x74, 0x85, 0x60, 0x7d, 0xe4, 0x94, 0x79, 0xee, 0x59, 0x5c, 0xca, 0x94, 0xb1, 0xe2, 0x90, - 0x97, 0x0c, 0x9d, 0x78, 0x0d, 0x68, 0xa2, 0x38, 0xf2, 0xb0, 0x0b, 0xa1, 0x52, 0xab, 0x55, 0xa5, - 0xfe, 0x68, 0x55, 0x63, 0xb6, 0x40, 0xe9, 0x37, 0xb7, 0xe4, 0x2f, 0x07, 0x8e, 0x0a, 0xe4, 0x2e, - 0x4c, 0xd5, 0xcf, 0xe0, 0xe0, 0xd4, 0x82, 0xc7, 0x56, 0x1c, 0xe4, 0xb7, 0x49, 0xfa, 0x99, 0x9b, - 0x03, 0x8b, 0x40, 0x0b, 0xe3, 0xa3, 0x66, 0x00, 0x71, 0x8f, 0x60, 0xe9, 0x0e, 0x76, 0xa1, 0xea, - 0x1f, 0xf0, 0x37, 0x37, 0x1b, 0x11, 0xee, 0x93, 0x87, 0xf3, 0x69, 0x45, 0x49, 0x7c, 0x09, 0x91, - 0x30, 0xb7, 0x5d, 0x4b, 0x9a, 0x94, 0x2c, 0x51, 0xd7, 0xea, 0x2d, 0x51, 0x18, 0x7b, 0xb2, 0x5e, - 0xab, 0xd5, 0x40, 0xa3, 0xe3, 0xa4, 0x8f, 0x4c, 0x1a, 0xd9, 0x14, 0xc9, 0x39, 0x55, 0xe5, 0x1f, - 0xf8, 0x80, 0xc8, 0x06, 0x7a, 0xc3, 0x8e, 0x3b, 0xd2, 0xbd, 0x90, 0x38, 0x33, 0xf1, 0x5f, 0x29, - 0x04, 0x41, 0xd4, 0xd5, 0xfb, 0x05, 0xbd, 0xbd, 0xa9, 0x77, 0x24, 0x5a, 0xe7, 0x7b, 0xd4, 0x94, - 0xa6, 0xd1, 0xf9, 0xa8, 0x26, 0xc1, 0x5a, 0x87, 0x17, 0x4c, 0x01, 0xd2, 0xa3, 0xe4, 0xbd, 0xc2, - 0xde, 0x85, 0x52, 0xb6, 0x90, 0xe3, 0x14, 0x77, 0x00, 0x89, 0x17, 0x4c, 0x45, 0x17, 0x0c, 0xc6, - 0xab, 0xe2, 0xca, 0x41, 0xf6, 0x88, 0x84, 0x78, 0x89, 0x44, 0xaf, 0x59, 0x24, 0x69, 0x83, 0xfa, - 0x4a, 0x1b, 0x57, 0x63, 0x62, 0xc7, 0xb2, 0x66, 0xab, 0x02, 0xa2, 0x55, 0xe5, 0x96, 0x4e, 0x38, - 0x8f, 0x1c, 0x06, 0xff, 0x05, 0x08, 0x2f, 0xef, 0x22, 0x1a, 0xc7, 0xb0, 0x81, 0xce, 0xc2, 0xdf, - 0x61, 0x77, 0xb4, 0x6a, 0x66, 0x3e, 0xe5, 0x92, 0x35, 0x83, 0xb0, 0x87, 0xe5, 0x1b, 0xbd, 0xa7, - 0x55, 0xfe, 0x7c, 0x89, 0xb7, 0x86, 0x1e, 0xa2, 0x19, 0xbe, 0xbd, 0x59, 0xad, 0xce, 0xb5, 0xc1, - 0x72, 0x11, 0x5e, 0x62, 0x37, 0xda, 0x81, 0x5c, 0x78, 0x54, 0x17, 0xf4, 0x5e, 0xc9, 0x6d, 0x12, - 0xdb, 0xdb, 0x68, 0xe1, 0x8e, 0xb9, 0xcb, 0x9d, 0xa1, 0xaa, 0x88, 0x60, 0xf7, 0xb4, 0x38, 0x2d, - 0x6c, 0xab, 0xd1, 0x48, 0x98, 0x3a, 0x28, 0xa5, 0x61, 0xd3, 0x8b, 0xf8, 0x61, 0x02, 0x4a, 0xe2, - 0x23, 0xdf, 0x9b, 0x49, 0xea, 0xdb, 0x5d, 0xdc, 0x32, 0xec, 0xca, 0xed, 0xb1, 0xb2, 0x6f, 0x74, - 0x96, 0xb2, 0x9e, 0xc4, 0xf9, 0xe8, 0x0c, 0x68, 0x91, 0xe1, 0x82, 0x87, 0xdb, 0xdc, 0x6d, 0x73, - 0xa3, 0x82, 0x95, 0xdb, 0xda, 0x8d, 0x6e, 0x64, 0x69, 0xc4, 0xe6, 0x95, 0x9b, 0xd1, 0xba, 0x4f, - 0x9e, 0xad, 0xff, 0xe4, 0xf9, 0x40, 0x66, 0x05, 0xdd, 0x10, 0x8c, 0x32, 0xf3, 0x7b, 0x97, 0x27, - 0x2b, 0x8f, 0xd5, 0xa5, 0x1a, 0xab, 0xe6, 0x30, 0xb5, 0x79, 0x74, 0xe3, 0x48, 0x3d, 0xe2, 0xed, - 0x84, 0x3e, 0xf5, 0xc5, 0x96, 0x06, 0x85, 0x7c, 0x4d, 0xbb, 0x39, 0xc9, 0xe6, 0x8d, 0x17, 0xa3, - 0xef, 0xa8, 0x34, 0xf8, 0x38, 0x93, 0x62, 0xf8, 0x55, 0x96, 0x0b, 0x01, 0x79, 0x20, 0xe7, 0xa1, - 0x31, 0x05, 0x6d, 0xd1, 0x2e, 0x6c, 0x00, 0xfd, 0x80, 0x16, 0x68, 0x38, 0x09, 0x5c, 0x2e, 0xc3, - 0x20, 0xd4, 0x35, 0x80, 0xa2, 0x3d, 0xba, 0x05, 0xef, 0x44, 0x7e, 0x7a, 0x2b, 0x44, 0x4e, 0x75, - 0xcd, 0xc0, 0xad, 0x00, 0xe2, 0x41, 0xca, 0xc5, 0xb9, 0xe3, 0x22, 0x09, 0x55, 0x66, 0x20, 0x32, - 0x92, 0x76, 0x5f, 0xc2, 0xea, 0xd5, 0x3a, 0x9c, 0x67, 0x3b, 0xdd, 0xc2, 0xe5, 0xdc, 0xed, 0x76, - 0x6a, 0x7c, 0x8e, 0x1b, 0x52, 0x65, 0x7a, 0x2a, 0x74, 0x4b, 0x46, 0xe7, 0x4c, 0x9b, 0xeb, 0x31, - 0xbf, 0x75, 0x3c, 0x3b, 0xd6, 0x01, 0x06, 0x61, 0x93, 0x8b, 0xc6, 0x40, 0xca, 0xa9, 0xbb, 0x52, - 0x4a, 0x80, 0xd8, 0xc4, 0x2b, 0x1d, 0x5e, 0x10, 0xbb, 0x76, 0x92, 0x26, 0x51, 0x04, 0x65, 0x27, - 0xe4, 0xd1, 0xb9, 0xbc, 0x08, 0xae, 0xc6, 0x37, 0x61, 0x92, 0x7a, 0x56, 0x36, 0x4f, 0x12, 0xa4, - 0xea, 0xa4, 0x61, 0x0e, 0x8f, 0x78, 0xb3, 0x84, 0xb0, 0x6e, 0x7c, 0xdf, 0x5a, 0xcf, 0x90, 0xa0, - 0xe8, 0x0f, 0x86, 0xb5, 0xa0, 0xf4, 0xc3, 0x06, 0xe0, 0x78, 0x85, 0xc9, 0x9a, 0x3d, 0x02, 0x2b, - 0xbe, 0x04, 0x0f, 0xff, 0x0e, 0x76, 0xf8, 0x99, 0x40, 0xf8, 0xc7, 0x8c, 0x6a, 0x11, 0xe2, 0x0b, - 0x6c, 0xf8, 0x02, 0xda, 0x98, 0xb0, 0x7a, 0xd9, 0x8d, 0xd0, 0xea, 0x3f, 0xff, 0x4e, 0xc0, 0x79, - 0x3f, 0x08, 0x10, 0xdf, 0x90, 0xec, 0x1f, 0x00, 0x12, 0xbf, 0x57, 0x80, 0x30, 0x6b, 0x55, 0x5e, - 0x0f, 0x7b, 0x9c, 0x3d, 0x08, 0xff, 0x8e, 0x95, 0x9d, 0xdf, 0xee, 0x74, 0xbd, 0x02, 0x05, 0x40, - 0xc7, 0x52, 0x0f, 0x9a, 0x30, 0x90, 0xb3, 0x66, 0x0c, 0xe4, 0xcc, 0xc4, 0x40, 0xde, 0xa4, 0x96, - 0x0f, 0xc1, 0xbe, 0x1b, 0xf8, 0xee, 0xf9, 0x9f, 0x55, 0xa7, 0xc7, 0xa0, 0x2f, 0x67, 0xb5, 0x0c, - 0xc2, 0x17, 0xf9, 0x55, 0x05, 0x7e, 0x39, 0x7b, 0x10, 0x7e, 0xd9, 0xfc, 0x96, 0x94, 0x94, 0xd1, - 0x1f, 0x64, 0xe6, 0x05, 0xe3, 0x17, 0x29, 0x06, 0x71, 0x45, 0xab, 0xc1, 0x68, 0x37, 0x31, 0x65, - 0x6b, 0x21, 0xda, 0x57, 0x3a, 0xf9, 0x63, 0xa9, 0xb8, 0x57, 0x6b, 0x8a, 0xdb, 0x7c, 0x78, 0x7d, - 0x7a, 0xe0, 0xcb, 0x21, 0x88, 0x7b, 0xf1, 0xf1, 0x3a, 0xff, 0x9c, 0xd1, 0xf4, 0x70, 0xa5, 0xf4, - 0xf1, 0x44, 0x53, 0xe0, 0xca, 0xeb, 0x7e, 0xfd, 0xb0, 0x7a, 0x18, 0x57, 0xdb, 0xa8, 0x27, 0x81, - 0x6a, 0x7f, 0xbb, 0x54, 0x33, 0x2f, 0x58, 0x11, 0xda, 0x81, 0x46, 0x90, 0xa3, 0x25, 0x9d, 0x34, - 0xc2, 0x85, 0x2f, 0x0c, 0x7e, 0x6c, 0x09, 0x08, 0x0c, 0x15, 0x3b, 0x44, 0xeb, 0xa0, 0x48, 0x1b, - 0x7f, 0x25, 0x54, 0x62, 0x71, 0x16, 0x1f, 0x94, 0xd6, 0x82, 0x62, 0x03, 0x17, 0xeb, 0xc6, 0x29, - 0x32, 0xe3, 0x80, 0x4c, 0x53, 0x1a, 0xd3, 0x54, 0x56, 0x04, 0x59, 0xcd, 0x0c, 0xed, 0xce, 0x46, - 0x24, 0xc8, 0x19, 0x1b, 0x4d, 0xa8, 0x0a, 0x04, 0xb1, 0x29, 0xc2, 0xe4, 0x5c, 0x67, 0x5e, 0xef, - 0xd9, 0xe2, 0x6e, 0xb0, 0x18, 0x4f, 0xa7, 0x61, 0x7c, 0xe9, 0x75, 0x70, 0xca, 0x35, 0x73, 0xe5, - 0xac, 0x05, 0xc6, 0x26, 0x14, 0xe1, 0x0a, 0x47, 0x0e, 0xda, 0x15, 0x32, 0x27, 0xe0, 0xa6, 0x64, - 0x67, 0xb5, 0x5c, 0x33, 0xd4, 0x12, 0xcb, 0xdb, 0x56, 0xfd, 0xae, 0xf6, 0x08, 0xd6, 0xf6, 0xea, - 0x01, 0xc4, 0xe8, 0xee, 0xf3, 0x31, 0xc9, 0x85, 0x17, 0xd3, 0xa9, 0x5c, 0xa9, 0xf8, 0x43, 0x54, - 0x80, 0xce, 0x30, 0xd3, 0x63, 0xa8, 0x75, 0xa4, 0x0c, 0x82, 0x24, 0x2a, 0xd8, 0x80, 0xb1, 0x32, - 0x5a, 0xa4, 0xf2, 0x40, 0x5c, 0x1f, 0x5e, 0x8d, 0x7f, 0xb9, 0xf8, 0x6f, 0x70, 0x06, 0xdb, 0x85, - 0x1c, 0xd3, 0x10, 0xb6, 0x4f, 0xac, 0x10, 0x51, 0x78, 0x8d, 0x11, 0xda, 0x4b, 0x0a, 0xc5, 0x23, - 0x23, 0x0b, 0xee, 0xc6, 0x23, 0xfe, 0xe3, 0xc9, 0xbb, 0x6b, 0xd8, 0xab, 0x62, 0x76, 0x78, 0x49, - 0x19, 0xe9, 0x36, 0x78, 0xa5, 0xc7, 0x5d, 0xc4, 0xf0, 0xb5, 0xb3, 0x3a, 0x04, 0x5f, 0x4c, 0x4f, - 0x48, 0x77, 0xf8, 0x83, 0x2e, 0x57, 0xca, 0xa8, 0xbd, 0x63, 0x0d, 0x6e, 0xb7, 0xb8, 0xa6, 0xd6, - 0x87, 0xda, 0x0c, 0x2a, 0x73, 0x75, 0x1c, 0xbd, 0x2e, 0x5b, 0xb9, 0x47, 0x81, 0xbc, 0x68, 0xca, - 0xd9, 0x1f, 0x94, 0xfb, 0x63, 0x5b, 0xff, 0x46, 0xb3, 0x10, 0x49, 0x55, 0x61, 0xb6, 0x1c, 0x8b, - 0xba, 0xb6, 0x44, 0x77, 0x70, 0xf7, 0x6e, 0x93, 0x59, 0x51, 0x7c, 0xb0, 0x20, 0x88, 0x4e, 0xbc, - 0x58, 0x52, 0xa8, 0xc8, 0x83, 0x18, 0x7d, 0xcf, 0xda, 0x3e, 0x77, 0x3b, 0x4c, 0xf1, 0xf4, 0x0b, - 0x74, 0x3c, 0x74, 0x20, 0x84, 0x19, 0x45, 0x5c, 0xa5, 0xbf, 0x4b, 0x45, 0xd6, 0xb6, 0x9b, 0xeb, - 0x60, 0x5f, 0xc2, 0x3c, 0x28, 0x6f, 0xc4, 0xb2, 0xa2, 0xf9, 0x1a, 0xed, 0x20, 0x72, 0xba, 0x33, - 0x88, 0xd4, 0xf5, 0x34, 0x12, 0x88, 0xd2, 0xa5, 0x45, 0x8d, 0x0a, 0xdf, 0x50, 0x31, 0x93, 0x2f, - 0x3a, 0x5e, 0x03, 0x21, 0x36, 0x62, 0x33, 0x62, 0x16, 0x65, 0xaf, 0xd3, 0xa7, 0xb6, 0xc6, 0x4e, - 0xac, 0x2e, 0x97, 0xe0, 0x5b, 0x41, 0x81, 0x1a, 0xdb, 0xa9, 0xf6, 0xc2, 0x19, 0x22, 0x06, 0x0c, - 0x7f, 0x4d, 0xe3, 0x85, 0xa7, 0xf7, 0xd8, 0x69, 0xf1, 0x8a, 0xee, 0x6c, 0xce, 0x74, 0xee, 0x54, - 0x56, 0x62, 0xeb, 0x2a, 0x2e, 0x98, 0xce, 0xc7, 0x11, 0x9b, 0x86, 0x1a, 0xfd, 0x2e, 0x3c, 0xea, - 0xf2, 0x76, 0x17, 0xc1, 0x12, 0x1c, 0xb7, 0x78, 0x39, 0xbd, 0x4e, 0xcd, 0xb7, 0xc6, 0xab, 0xd3, - 0xfc, 0x4c, 0x8f, 0x5c, 0x28, 0xc9, 0x9b, 0xd2, 0x14, 0x31, 0x28, 0xa9, 0x31, 0xc2, 0x34, 0x2b, - 0xdf, 0x20, 0xaa, 0xad, 0x66, 0x61, 0x44, 0x60, 0xd7, 0x56, 0xdf, 0xed, 0x36, 0x55, 0xdd, 0x7c, - 0x53, 0x53, 0x4f, 0x8c, 0x60, 0xd4, 0x46, 0x87, 0x7a, 0x8e, 0x82, 0xe3, 0x8c, 0x11, 0x28, 0xcd, - 0x0a, 0x21, 0x74, 0xb3, 0xea, 0xef, 0xac, 0x82, 0xe0, 0x05, 0xe9, 0x5e, 0x5d, 0xa7, 0x32, 0x61, - 0x56, 0xb9, 0x8c, 0xb0, 0xcb, 0x7d, 0xa9, 0x5f, 0x6f, 0x74, 0x3b, 0x4f, 0x33, 0xf5, 0x05, 0xf5, - 0x2c, 0x3f, 0x6c, 0x96, 0xa3, 0xd1, 0xd3, 0x9b, 0x64, 0xfc, 0xbe, 0x98, 0xe4, 0x2a, 0x97, 0x01, - 0xda, 0x6e, 0xb1, 0xbb, 0x5e, 0x84, 0x7b, 0xd0, 0x34, 0xbf, 0xd4, 0x80, 0xe3, 0x5d, 0xfd, 0xcd, - 0xc2, 0x78, 0x35, 0xb2, 0xf1, 0x4e, 0x15, 0xb9, 0x05, 0xe0, 0x74, 0x24, 0x64, 0x24, 0xca, 0x43, - 0x23, 0x4d, 0xd2, 0x3d, 0x77, 0xea, 0x67, 0x9a, 0x57, 0x24, 0x37, 0xcf, 0x62, 0xb2, 0xb0, 0x02, - 0x3d, 0x88, 0x72, 0xad, 0x8d, 0x05, 0x93, 0xef, 0x75, 0x3c, 0x2d, 0x62, 0x3e, 0x50, 0x32, 0xab, - 0x0f, 0x4a, 0xe6, 0xc9, 0xc7, 0x26, 0x08, 0xa4, 0x90, 0x78, 0x48, 0x0f, 0x1c, 0x14, 0xbd, 0x8d, - 0x6a, 0xdc, 0x45, 0xe6, 0xa1, 0x01, 0x1b, 0x7c, 0x47, 0xf8, 0xdb, 0x41, 0x30, 0x61, 0xd5, 0xff, - 0xde, 0x69, 0x9e, 0x9e, 0xb9, 0xdc, 0x1c, 0xaf, 0xe3, 0xa6, 0x1e, 0x2a, 0x82, 0xe3, 0xa9, 0xd7, - 0x51, 0x87, 0xb7, 0xe2, 0xab, 0x71, 0xac, 0x51, 0x39, 0x00, 0x16, 0xe0, 0x4c, 0x23, 0xf9, 0x84, - 0x51, 0xc0, 0x27, 0x02, 0xb1, 0x72, 0xc3, 0x7a, 0x09, 0xc7, 0xb9, 0x1d, 0xd8, 0x6a, 0x7a, 0x5d, - 0x38, 0x77, 0x0f, 0xa4, 0x50, 0x5c, 0x4b, 0x5e, 0x7a, 0x72, 0x75, 0x3d, 0x9b, 0x45, 0x01, 0xf1, - 0xa2, 0x35, 0x2e, 0xdf, 0xc5, 0x67, 0xd7, 0x97, 0x70, 0x1c, 0x2c, 0x18, 0x4e, 0x1c, 0x77, 0x5a, - 0x5d, 0xef, 0xef, 0x63, 0x34, 0xab, 0x2f, 0xd3, 0xdd, 0x3d, 0xc8, 0x6c, 0x51, 0x40, 0x8d, 0x3e, - 0x40, 0x09, 0x4b, 0x64, 0x15, 0x28, 0xe8, 0x66, 0x61, 0x1c, 0xe6, 0x41, 0xf4, 0x65, 0xa3, 0xda, - 0x2f, 0xd6, 0x55, 0x3f, 0x46, 0x05, 0x38, 0x54, 0x55, 0x56, 0xfa, 0xd1, 0x35, 0x2e, 0x3e, 0x0a, - 0x8f, 0x2c, 0xf5, 0x55, 0x24, 0xde, 0xb1, 0x28, 0xc3, 0x34, 0xd6, 0xb7, 0x64, 0xd2, 0x62, 0x57, - 0x29, 0x9a, 0x67, 0xb4, 0x47, 0xee, 0x9b, 0xf5, 0xd6, 0x68, 0xbb, 0x63, 0xad, 0x25, 0x84, 0x2e, - 0xd7, 0xfb, 0x81, 0x76, 0xd8, 0x1d, 0xb1, 0x0b, 0xe0, 0x92, 0x63, 0xd8, 0x51, 0x0f, 0x5b, 0x78, - 0x7d, 0xaa, 0x76, 0xb4, 0x25, 0x86, 0x4d, 0x6b, 0x08, 0x13, 0x45, 0xd8, 0xd3, 0x79, 0x4c, 0xc3, - 0xb9, 0x21, 0x07, 0x27, 0x6c, 0x04, 0xb4, 0xba, 0xf1, 0x8c, 0x6b, 0xe8, 0x6a, 0x72, 0x20, 0x81, - 0x7a, 0xf9, 0xfa, 0x90, 0x41, 0x17, 0x5a, 0xe3, 0x09, 0x66, 0x05, 0x96, 0x5e, 0x26, 0xeb, 0x1c, - 0xbe, 0x83, 0x5e, 0xd3, 0x78, 0x2c, 0xcb, 0x1c, 0x9a, 0xfb, 0xfb, 0xd8, 0x7f, 0x59, 0x9e, 0xa4, - 0xd2, 0x2e, 0x50, 0x8b, 0x0c, 0xe7, 0x0c, 0xb5, 0x81, 0x5b, 0x5b, 0x34, 0x5d, 0x09, 0xe1, 0xc7, - 0x35, 0x58, 0x07, 0xcc, 0x5d, 0x7a, 0xe5, 0xb3, 0x6d, 0x70, 0x18, 0xc8, 0xa1, 0x66, 0xb0, 0xa0, - 0x61, 0x47, 0xb8, 0x2d, 0xb9, 0xeb, 0x95, 0x7b, 0xd3, 0x6d, 0x73, 0x6f, 0xba, 0xcd, 0x7b, 0xd3, - 0xfe, 0x8f, 0xb4, 0x37, 0xfd, 0x00, 0x29, 0x4b, 0xe7, 0x86, 0xf3, 0x95, 0x04, 0x9e, 0xce, 0x1e, - 0xa0, 0x27, 0x2e, 0x0f, 0x64, 0x03, 0xfe, 0xf7, 0x88, 0xb1, 0xe0, 0x5b, 0x17, 0x84, 0xc6, 0x1c, - 0x07, 0x59, 0x46, 0x07, 0x12, 0xc5, 0x3f, 0xb9, 0x66, 0x56, 0x61, 0x3b, 0xc2, 0x0b, 0x9a, 0x54, - 0x62, 0xd6, 0xfc, 0x99, 0xb3, 0x7c, 0x6d, 0xad, 0x4f, 0xd0, 0xf0, 0x53, 0xaa, 0x95, 0x2e, 0xf0, - 0x32, 0xf8, 0x71, 0xd5, 0xce, 0xfe, 0x73, 0xaa, 0x7d, 0xc8, 0xe5, 0xc9, 0x9a, 0xe3, 0x0d, 0x15, - 0xcb, 0xae, 0x47, 0x54, 0x1c, 0x8a, 0xb1, 0x1e, 0x55, 0xe1, 0xf3, 0x12, 0x94, 0xba, 0xba, 0x66, - 0x14, 0x4c, 0x24, 0xc6, 0xb3, 0x46, 0x48, 0x92, 0x95, 0xf8, 0x56, 0x91, 0xac, 0x17, 0x1a, 0x68, - 0x12, 0x94, 0x3c, 0x86, 0xa2, 0x97, 0x1a, 0x10, 0xcd, 0x31, 0x8e, 0x39, 0x6d, 0xad, 0xe1, 0x5f, - 0x85, 0xa4, 0x98, 0x6a, 0xc4, 0x1f, 0x25, 0xa6, 0x12, 0xa3, 0x9a, 0xe4, 0x4e, 0x90, 0xad, 0x23, - 0x2c, 0x09, 0xd0, 0xb0, 0x68, 0x21, 0xa7, 0x35, 0x63, 0x90, 0xfc, 0x53, 0x79, 0x4b, 0xb2, 0x2a, - 0x6f, 0x89, 0x60, 0x2f, 0x91, 0x98, 0x42, 0xeb, 0xa9, 0x3a, 0x99, 0x97, 0x18, 0x8f, 0x6b, 0x88, - 0xc8, 0x5a, 0xd0, 0x10, 0x52, 0x2f, 0x12, 0x95, 0xe7, 0xc6, 0xe4, 0x9d, 0xd0, 0x17, 0xa3, 0xc5, - 0x3b, 0x46, 0xc1, 0xde, 0x88, 0xc1, 0xb3, 0x24, 0xda, 0xfe, 0x0b, 0xfa, 0x4a, 0x33, 0x82, 0x31, - 0x0d, 0x29, 0x6f, 0x0d, 0xcb, 0x68, 0x46, 0x55, 0x2b, 0xea, 0xa1, 0x55, 0xe3, 0xb7, 0x48, 0xd4, - 0x41, 0x6f, 0xc9, 0x6f, 0x51, 0x5d, 0x43, 0xf6, 0x86, 0x75, 0x52, 0xf6, 0xca, 0x1a, 0xda, 0x51, - 0x80, 0x53, 0x3f, 0xa0, 0xfb, 0x7d, 0x18, 0x21, 0x78, 0x59, 0xab, 0x55, 0x8f, 0x25, 0xa4, 0x63, - 0x24, 0x86, 0x31, 0x41, 0x9e, 0x7f, 0xd8, 0x95, 0xb4, 0x22, 0x6f, 0xcb, 0x15, 0x19, 0x97, 0xe0, - 0x6d, 0xb9, 0x3d, 0xf9, 0xe3, 0xb3, 0x1a, 0x0a, 0x18, 0x59, 0x27, 0xf0, 0x95, 0x5a, 0x0b, 0x75, - 0xc4, 0x25, 0x12, 0x63, 0xcb, 0xc3, 0x9e, 0xb7, 0x7e, 0xb9, 0x09, 0xd2, 0xdb, 0x14, 0xf6, 0x29, - 0xad, 0xdb, 0x30, 0xbf, 0x6a, 0x91, 0xbd, 0x04, 0x94, 0xfa, 0x57, 0x90, 0xde, 0xc2, 0x67, 0x47, - 0x84, 0xad, 0x1e, 0x25, 0x0a, 0x26, 0x59, 0x69, 0x3f, 0x03, 0x8f, 0x87, 0x59, 0xb1, 0xa3, 0xc1, - 0x26, 0xdf, 0xdf, 0xe7, 0x5f, 0xb7, 0x0f, 0xab, 0xf9, 0x0a, 0x8b, 0xa4, 0xa7, 0xd5, 0x02, 0x1e, - 0x86, 0x2f, 0x8e, 0x8f, 0x5a, 0xf0, 0xfd, 0xe6, 0xe3, 0x78, 0x4a, 0x90, 0xe1, 0x38, 0x20, 0xc6, - 0x69, 0x30, 0x96, 0x29, 0xc6, 0x8b, 0x50, 0x71, 0xcf, 0x52, 0x22, 0x08, 0x20, 0x35, 0x9d, 0x88, - 0x37, 0xac, 0x2f, 0xa6, 0xab, 0x17, 0xd3, 0x45, 0xcd, 0x5c, 0xb6, 0xaa, 0x5d, 0x7c, 0x5b, 0xf3, - 0xef, 0x61, 0x1f, 0x8b, 0xe3, 0x22, 0x4f, 0x5a, 0x47, 0xaf, 0x74, 0x42, 0x5d, 0x5e, 0xa4, 0xa6, - 0x65, 0xfd, 0xa3, 0xda, 0x39, 0x51, 0xf3, 0xe1, 0x4b, 0x4c, 0xf5, 0xfd, 0x53, 0x6f, 0xbf, 0x43, - 0xfb, 0xa7, 0xae, 0xda, 0x3f, 0xe1, 0x77, 0x0c, 0x3c, 0x38, 0xde, 0xbf, 0xd5, 0xee, 0x98, 0x10, - 0xaf, 0x65, 0xd8, 0xb0, 0x1b, 0xc0, 0x6e, 0x7e, 0x78, 0x43, 0x80, 0xfe, 0x0b, 0xc7, 0xbc, 0x1f, - 0x10, 0xe4, 0x02, 0xeb, 0x55, 0x55, 0x52, 0x85, 0x8d, 0x6d, 0xd5, 0x09, 0xce, 0xb8, 0x82, 0xdb, - 0xcd, 0x25, 0x52, 0x57, 0x6c, 0xb7, 0x83, 0xf6, 0xf6, 0x34, 0x88, 0x4c, 0x66, 0xb5, 0x63, 0x9b, - 0xc2, 0x37, 0x26, 0x56, 0x63, 0x76, 0xb6, 0x6d, 0x6f, 0x7b, 0x53, 0xed, 0xe7, 0xb1, 0xa9, 0xfe, - 0xdc, 0x5e, 0x69, 0x35, 0xaf, 0xfd, 0xf0, 0xb7, 0xe3, 0x54, 0x36, 0xc9, 0xba, 0x58, 0x30, 0x8b, - 0xf7, 0x44, 0x1b, 0x0b, 0xf8, 0xbe, 0x20, 0x3f, 0x94, 0x6d, 0x37, 0xe5, 0x04, 0x8c, 0x02, 0x6c, - 0x96, 0x25, 0x44, 0x2e, 0xe6, 0x51, 0x56, 0xe4, 0x71, 0xb5, 0x84, 0x21, 0x38, 0xeb, 0xb3, 0x58, - 0x79, 0x3a, 0xa8, 0x73, 0x41, 0x86, 0x19, 0xfa, 0xe5, 0x22, 0x41, 0xc7, 0xfe, 0x8a, 0xe3, 0x32, - 0x03, 0xf2, 0xb8, 0x41, 0x93, 0xd2, 0x15, 0xdf, 0x87, 0xb1, 0x76, 0x09, 0x27, 0x36, 0xa2, 0x76, - 0xc7, 0x59, 0x49, 0x95, 0xaf, 0x06, 0x45, 0xbc, 0xe8, 0xe0, 0x64, 0x71, 0xe0, 0xcc, 0x3d, 0x4b, - 0x26, 0xd7, 0x78, 0xe9, 0x9a, 0x4b, 0xc7, 0xc1, 0x4d, 0x58, 0xd9, 0x73, 0x61, 0x7d, 0x4e, 0xf6, - 0x77, 0x1b, 0x5f, 0x23, 0x4e, 0x82, 0x98, 0xec, 0x7b, 0xc4, 0x0d, 0xef, 0x22, 0x7b, 0xc3, 0x36, - 0x77, 0xf5, 0x1d, 0x01, 0x27, 0xcc, 0xca, 0x09, 0x59, 0x29, 0xe8, 0xf2, 0x5a, 0x4a, 0x0e, 0x10, - 0xee, 0xf8, 0xbe, 0x72, 0x03, 0xa9, 0xe9, 0xee, 0xf0, 0x8d, 0x52, 0xd3, 0x1f, 0x28, 0xaa, 0x53, - 0x75, 0x9d, 0xf7, 0xbc, 0xf3, 0x1d, 0x2c, 0x33, 0x49, 0x84, 0x52, 0xca, 0xef, 0x09, 0x0d, 0xff, - 0x86, 0xe7, 0x13, 0xf3, 0x30, 0x82, 0x7a, 0x1c, 0x35, 0xeb, 0x5c, 0xde, 0x89, 0x17, 0x07, 0x13, - 0xeb, 0xdb, 0xb2, 0x76, 0x47, 0x11, 0x87, 0xa0, 0x6e, 0x4d, 0x5c, 0x79, 0x49, 0x82, 0xca, 0xba, - 0x33, 0x05, 0x25, 0x72, 0x14, 0xa7, 0x86, 0xbe, 0x07, 0x10, 0xb7, 0x11, 0x53, 0xd5, 0xb8, 0x87, - 0x4f, 0x10, 0xd1, 0x0e, 0x0c, 0x33, 0x6d, 0x56, 0xb1, 0xf6, 0x6e, 0x73, 0xa9, 0x21, 0x15, 0xdc, - 0x95, 0x8b, 0x2f, 0x79, 0x3d, 0xa2, 0xf7, 0x75, 0x51, 0x9d, 0x57, 0xd7, 0x29, 0x19, 0x8c, 0x36, - 0xd4, 0xf6, 0x83, 0x52, 0x6c, 0x34, 0x44, 0xf8, 0x06, 0x2a, 0xd7, 0xee, 0xae, 0x36, 0x2a, 0x4c, - 0x7e, 0xe2, 0x67, 0xf0, 0x89, 0x6b, 0x6f, 0x93, 0x4c, 0xf1, 0x6d, 0x6c, 0x5f, 0x64, 0x3d, 0x59, - 0x76, 0x7f, 0xbf, 0xbf, 0xdf, 0xdf, 0x65, 0xf1, 0xdd, 0xd9, 0xed, 0xc1, 0xc2, 0x1a, 0x2c, 0xe0, - 0x47, 0x57, 0x3f, 0x2b, 0x93, 0x36, 0xae, 0xf2, 0xf9, 0xd5, 0x36, 0xa5, 0xac, 0x8d, 0xdb, 0xeb, - 0x76, 0xe0, 0x6b, 0x67, 0xf5, 0xad, 0xfc, 0x9a, 0x8a, 0x17, 0x3d, 0x28, 0xab, 0xae, 0x2a, 0xde, - 0xa9, 0xaf, 0xf8, 0x87, 0xcd, 0xea, 0x6d, 0xe8, 0xfc, 0xd6, 0x56, 0x7f, 0xcd, 0x98, 0xab, 0x2e, - 0x14, 0x8f, 0x19, 0x73, 0x15, 0x1a, 0x4e, 0xb9, 0x03, 0x2e, 0x0d, 0x06, 0x75, 0x2f, 0xd7, 0x70, - 0xd9, 0x22, 0x84, 0xf4, 0xe2, 0xdd, 0xf5, 0x1c, 0xb5, 0xf2, 0x9a, 0x89, 0xe7, 0xa7, 0xe4, 0xba, - 0x15, 0x07, 0x70, 0x98, 0x1a, 0xe7, 0x2d, 0xd8, 0x14, 0xc2, 0xa6, 0xab, 0x27, 0x8e, 0xfc, 0x19, - 0x6e, 0x03, 0x30, 0x79, 0x6b, 0xac, 0x76, 0x64, 0x5b, 0x02, 0x8d, 0xe6, 0x9f, 0x2b, 0xe9, 0xe5, - 0xe5, 0x62, 0xb7, 0xd3, 0xd1, 0xa4, 0x3e, 0xa9, 0x17, 0x8c, 0x2b, 0x26, 0x5d, 0xe5, 0xdc, 0x91, - 0x22, 0x98, 0x97, 0x01, 0xb5, 0x08, 0xfc, 0xb3, 0x84, 0xb9, 0xbe, 0x66, 0x2f, 0x9b, 0xd2, 0x33, - 0xd0, 0x8b, 0x4c, 0xfc, 0x50, 0xcf, 0xaa, 0xd8, 0xd5, 0x6e, 0x95, 0x15, 0xa9, 0xe9, 0xd9, 0xa6, - 0x0d, 0x86, 0x6e, 0x0e, 0xa0, 0x2d, 0xe4, 0x4a, 0xdf, 0x36, 0x83, 0x93, 0x40, 0x0e, 0x47, 0xb4, - 0x59, 0x3e, 0xd8, 0x54, 0x32, 0x1e, 0x0b, 0x55, 0x91, 0x1c, 0xab, 0x1b, 0x16, 0x1c, 0xd5, 0x96, - 0x4c, 0x8a, 0x94, 0xcd, 0x8b, 0x16, 0x03, 0x54, 0x15, 0xbe, 0xad, 0xd9, 0x6b, 0xd1, 0x86, 0x3e, - 0x28, 0x63, 0xed, 0x89, 0xad, 0x7f, 0xa1, 0x65, 0x1f, 0x14, 0x6f, 0x6a, 0x34, 0xda, 0x79, 0x1d, - 0x3e, 0x96, 0x88, 0xdd, 0xab, 0x8b, 0x4d, 0xb1, 0x3c, 0x91, 0xc8, 0xa8, 0xcd, 0x09, 0x88, 0xb4, - 0xc2, 0xfc, 0x90, 0x0c, 0x25, 0xe1, 0x90, 0xdc, 0x19, 0x29, 0x2a, 0x81, 0x73, 0x8f, 0x32, 0x86, - 0xb3, 0x70, 0x07, 0xcf, 0xa8, 0x05, 0x92, 0x51, 0x95, 0x73, 0x84, 0x78, 0x46, 0x5c, 0x7d, 0x93, - 0x23, 0xf7, 0x2d, 0x30, 0x0c, 0x6a, 0xb9, 0xb3, 0x44, 0x30, 0xba, 0xd6, 0x23, 0x93, 0xcc, 0xf8, - 0x72, 0xcc, 0x06, 0x87, 0xba, 0x4b, 0xac, 0xbc, 0x53, 0x56, 0x9d, 0xb6, 0x84, 0xaa, 0x79, 0xa7, - 0x67, 0xab, 0x92, 0xa7, 0x28, 0x73, 0xec, 0x66, 0x84, 0xd7, 0x09, 0x31, 0x18, 0xd4, 0x13, 0x8d, - 0xb0, 0x33, 0x74, 0xc7, 0x45, 0x10, 0x1a, 0xee, 0xda, 0x95, 0x33, 0xd0, 0x0d, 0xf8, 0xf2, 0x4a, - 0x61, 0xaf, 0xef, 0xbe, 0xb6, 0xac, 0x0c, 0xce, 0x69, 0x2b, 0xdc, 0xee, 0x09, 0xe8, 0x03, 0x3f, - 0x70, 0xd7, 0x17, 0xc9, 0x18, 0x2e, 0x9a, 0x75, 0x35, 0x16, 0x4b, 0xd4, 0xa1, 0x94, 0x9f, 0x41, - 0x9e, 0xa0, 0x13, 0xfc, 0x1a, 0xa6, 0xd7, 0x82, 0xd6, 0xd9, 0x1c, 0x5c, 0xea, 0x33, 0x4a, 0x03, - 0xb7, 0x3f, 0x81, 0xcc, 0x05, 0xef, 0x4a, 0x3a, 0x5b, 0xbe, 0xb8, 0xe7, 0x8e, 0x8c, 0x82, 0xe0, - 0x03, 0x6b, 0xd7, 0x48, 0x26, 0xab, 0xcb, 0x3c, 0xd4, 0x5e, 0x99, 0xec, 0x2e, 0x46, 0xab, 0x4a, - 0x34, 0x2f, 0x8b, 0xdb, 0xd4, 0x80, 0x24, 0x43, 0xdb, 0x55, 0xec, 0x57, 0x1b, 0x4d, 0x09, 0xd1, - 0x2c, 0xdd, 0xd7, 0xba, 0x2b, 0xf6, 0x72, 0x97, 0x0c, 0xe8, 0xf0, 0x53, 0xe0, 0xb5, 0x49, 0x2d, - 0xf1, 0x4c, 0x3b, 0x86, 0x0f, 0x72, 0xe3, 0x45, 0xee, 0x3c, 0xf4, 0xc6, 0x6e, 0x12, 0x7b, 0x89, - 0x7b, 0x91, 0x86, 0x5e, 0x6d, 0xbb, 0x89, 0x89, 0x59, 0x71, 0x20, 0xc0, 0xd7, 0x08, 0x57, 0xab, - 0x81, 0xf0, 0xe2, 0xaa, 0xe1, 0xc5, 0x98, 0x6c, 0xc0, 0x8b, 0x31, 0x7d, 0x98, 0x17, 0xc3, 0x5d, - 0xd4, 0xc7, 0x41, 0x3e, 0x1b, 0xf9, 0x19, 0x52, 0x1a, 0x7b, 0x90, 0xb3, 0x3f, 0x71, 0xf9, 0x37, - 0xe4, 0xe0, 0x4f, 0xc5, 0xef, 0x64, 0xe6, 0x2f, 0x56, 0xfc, 0x13, 0x46, 0x06, 0x79, 0x5a, 0xd1, - 0x22, 0x86, 0x8e, 0x8c, 0xfa, 0x58, 0x4b, 0xf5, 0x6b, 0x64, 0x61, 0x8c, 0xb5, 0x7e, 0x0c, 0x0d, - 0x78, 0x22, 0x94, 0xa9, 0x78, 0xe2, 0x32, 0x15, 0x8f, 0xb8, 0xaa, 0xaf, 0xdc, 0xa3, 0xba, 0xe3, - 0xea, 0x5d, 0x76, 0xd5, 0x54, 0x33, 0x22, 0x3b, 0xcc, 0x99, 0x1d, 0x1d, 0x64, 0xe8, 0x98, 0x78, - 0x7f, 0x1f, 0x0d, 0x89, 0x2f, 0x4a, 0x42, 0x5d, 0xdc, 0x24, 0xe1, 0x54, 0x66, 0xe9, 0x53, 0x14, - 0xf6, 0x0c, 0x3b, 0x88, 0x39, 0xfa, 0x78, 0xa7, 0x36, 0xcb, 0x61, 0x5c, 0xc9, 0xa4, 0xb8, 0x8c, - 0xc7, 0x37, 0x04, 0x8d, 0x6a, 0x26, 0x24, 0x65, 0xd3, 0xf8, 0xfe, 0x7e, 0xab, 0x12, 0x8e, 0xd4, - 0xde, 0x7a, 0x5e, 0xad, 0xa9, 0x9c, 0xcf, 0x02, 0x5f, 0xa3, 0x76, 0x68, 0x46, 0x3c, 0x34, 0xc7, - 0x3c, 0x90, 0xc8, 0x34, 0x3e, 0x62, 0x92, 0x7b, 0x5d, 0x10, 0x1b, 0x64, 0x48, 0x59, 0x85, 0x0c, - 0x69, 0xc0, 0x3e, 0xf1, 0x05, 0x0c, 0xaf, 0xec, 0xdd, 0xb4, 0xda, 0xe3, 0xd5, 0xde, 0x4d, 0x44, - 0xef, 0x26, 0x07, 0x39, 0x77, 0x57, 0x32, 0xcc, 0x2b, 0x1d, 0x23, 0x4f, 0xa9, 0xb9, 0xea, 0xdd, - 0x54, 0x7e, 0x8c, 0x74, 0xfd, 0xc7, 0xa0, 0x7e, 0xe4, 0x21, 0x49, 0x38, 0x29, 0x7e, 0xe2, 0xca, - 0xc7, 0x64, 0xf1, 0xc9, 0x4f, 0x57, 0x0c, 0x7d, 0x5e, 0x99, 0x21, 0xd4, 0xf9, 0xb2, 0x13, 0x54, - 0x33, 0x26, 0x0d, 0x14, 0x24, 0xb5, 0x13, 0x27, 0x7e, 0x78, 0xe2, 0x84, 0x6a, 0xe2, 0xe4, 0xb2, - 0x5a, 0x30, 0x71, 0x32, 0xf1, 0x1b, 0x26, 0x4e, 0xec, 0xd2, 0x47, 0x29, 0x73, 0xea, 0x10, 0xed, - 0x13, 0x46, 0xc9, 0x17, 0x7e, 0x13, 0xdf, 0x0e, 0x9a, 0xdb, 0x28, 0x03, 0x31, 0x63, 0xa2, 0x85, - 0xa6, 0x1d, 0x84, 0x98, 0x67, 0x05, 0xe9, 0xfa, 0xa8, 0x6e, 0x2b, 0x0c, 0xfb, 0xde, 0x2b, 0x54, - 0x83, 0xcd, 0x61, 0xbd, 0x0c, 0xe1, 0xbc, 0x50, 0x5c, 0x34, 0xc0, 0x1b, 0x71, 0xfd, 0x0e, 0x8b, - 0xfb, 0x16, 0xde, 0xac, 0xcb, 0xac, 0x76, 0x76, 0xdc, 0xa6, 0xc5, 0x04, 0x87, 0x5d, 0x07, 0x56, - 0x0d, 0x63, 0x05, 0xca, 0xdf, 0x07, 0x37, 0x6b, 0x56, 0x20, 0x94, 0x94, 0x8d, 0x22, 0xde, 0x58, - 0x81, 0x38, 0xab, 0x4f, 0xeb, 0xf2, 0xfa, 0x64, 0x66, 0xf5, 0xa9, 0x39, 0xa7, 0x9f, 0xc3, 0x35, - 0xf9, 0x80, 0xdc, 0x6e, 0x5a, 0x59, 0xaa, 0xf9, 0xac, 0xab, 0xd0, 0xdc, 0xac, 0xd0, 0x7c, 0x5d, - 0x85, 0xba, 0xbd, 0x75, 0x19, 0x75, 0x7b, 0x66, 0x4e, 0x5d, 0xda, 0x89, 0x09, 0x5d, 0xce, 0x11, - 0xaa, 0x19, 0xca, 0x19, 0x9e, 0xac, 0x6b, 0x61, 0x66, 0xb6, 0x30, 0x0b, 0x1f, 0xca, 0xed, 0xc3, - 0x62, 0x4d, 0x6e, 0xf9, 0xc2, 0x6b, 0x1a, 0xb0, 0x95, 0x5a, 0x05, 0x97, 0xc7, 0xb7, 0xe9, 0x9a, - 0xbc, 0x60, 0xb9, 0xdc, 0x7a, 0xc4, 0xfa, 0x5c, 0x93, 0xff, 0xcb, 0x74, 0x5d, 0xcb, 0x37, 0x5a, - 0x89, 0x4d, 0xa7, 0xb3, 0xcb, 0xe8, 0x4d, 0x1a, 0x04, 0xbf, 0x07, 0xca, 0xcb, 0x5a, 0xdb, 0xbd, - 0x2d, 0xd1, 0xe7, 0xce, 0xca, 0x2d, 0x10, 0xb6, 0x8c, 0x05, 0x44, 0x06, 0x1e, 0xbc, 0x6f, 0x83, - 0xc3, 0x5c, 0xe0, 0x16, 0x3e, 0x7f, 0x81, 0xe6, 0xb2, 0x2b, 0x3c, 0xf6, 0x2a, 0x8e, 0x80, 0x36, - 0x64, 0x1b, 0xc1, 0x09, 0xad, 0x0b, 0x93, 0x68, 0xcd, 0xae, 0x2e, 0x7f, 0xf3, 0xab, 0xaa, 0x0c, - 0xbb, 0x26, 0xfb, 0xc1, 0x48, 0x43, 0xa7, 0x28, 0x23, 0x4d, 0x6c, 0x4b, 0xa4, 0x89, 0x32, 0xa2, - 0xa8, 0x27, 0x3e, 0xd3, 0xb6, 0x6c, 0xb9, 0x57, 0x4e, 0x7a, 0xde, 0x94, 0xb4, 0x0c, 0x40, 0xab, - 0xa1, 0x8f, 0xd6, 0x08, 0x88, 0xd9, 0x5d, 0xd1, 0xeb, 0xc8, 0xdd, 0x75, 0x37, 0x0d, 0x66, 0xd0, - 0xca, 0xd2, 0xd7, 0x53, 0xe0, 0xb8, 0x8f, 0x6a, 0x9b, 0xe4, 0xb7, 0xae, 0xc5, 0xc9, 0xdd, 0xa4, - 0x85, 0x6b, 0x33, 0x78, 0x5c, 0x3b, 0x21, 0x99, 0x17, 0x94, 0x9b, 0x85, 0x23, 0xb2, 0x34, 0x20, - 0x2b, 0xc3, 0xb0, 0x8a, 0xfb, 0xe6, 0x94, 0x87, 0x36, 0xe2, 0xc1, 0xd8, 0x75, 0x03, 0x3b, 0xbb, - 0xab, 0xcd, 0xcb, 0x40, 0x97, 0xaa, 0xcc, 0x14, 0x85, 0x2e, 0x55, 0x9b, 0x65, 0x58, 0x9f, 0x65, - 0x05, 0x92, 0xaa, 0x92, 0x2d, 0xfb, 0x1c, 0xc3, 0x17, 0x14, 0xf0, 0x77, 0x78, 0xe2, 0xbb, 0xbf, - 0x0f, 0x86, 0x7d, 0xc7, 0x9c, 0x37, 0xab, 0x55, 0x95, 0xf2, 0x8b, 0xf1, 0xa8, 0x08, 0xbd, 0x45, - 0xac, 0xa5, 0x7d, 0xfa, 0xfa, 0x3c, 0x9d, 0x26, 0x7d, 0x3f, 0xf3, 0x7a, 0x7a, 0x40, 0x0f, 0x02, - 0xc4, 0xcf, 0x2e, 0x2c, 0xb0, 0xa5, 0xf9, 0x62, 0x54, 0x8b, 0x71, 0x63, 0xb0, 0x5a, 0x1a, 0x34, - 0x5f, 0xb9, 0x6e, 0x99, 0xaa, 0x9b, 0x28, 0x38, 0xe3, 0x25, 0xbb, 0xef, 0x6f, 0x6d, 0xe5, 0xa2, - 0x68, 0x11, 0xd4, 0xa3, 0x20, 0xf1, 0xd0, 0xc5, 0x07, 0xa3, 0xf8, 0xac, 0x54, 0xfc, 0xdb, 0xa4, - 0x2a, 0xf3, 0x70, 0x9e, 0x07, 0xe5, 0x09, 0x40, 0xcb, 0xbb, 0x76, 0x42, 0x44, 0x34, 0xbe, 0x15, - 0x32, 0xd4, 0xc9, 0x73, 0xbf, 0x8d, 0xa0, 0x65, 0xc2, 0x73, 0x5a, 0x5e, 0x57, 0x23, 0xde, 0x87, - 0xba, 0xba, 0xbe, 0xc5, 0x0d, 0x94, 0xfe, 0x54, 0xa0, 0x72, 0x1c, 0xa3, 0xde, 0x2b, 0xb0, 0x9c, - 0x03, 0xbf, 0xc3, 0xb4, 0x6c, 0xcb, 0x05, 0x88, 0xc4, 0x95, 0x2b, 0xcc, 0x8e, 0x05, 0x01, 0x70, - 0xee, 0xca, 0xd4, 0x4e, 0x61, 0x82, 0xf7, 0x5b, 0x54, 0xfc, 0x8e, 0xd1, 0xbb, 0xd2, 0xa8, 0x0f, - 0x08, 0xbc, 0x24, 0x46, 0xd8, 0x61, 0x57, 0xdb, 0x65, 0xbc, 0x4d, 0xc6, 0x68, 0x04, 0x2e, 0x94, - 0x6c, 0x2d, 0xab, 0x2d, 0xaf, 0x94, 0xdb, 0x56, 0xcb, 0x26, 0x9f, 0x74, 0xc7, 0x5a, 0x23, 0xe4, - 0xe8, 0xaa, 0x2b, 0x10, 0x1e, 0xfa, 0xf0, 0xad, 0x16, 0x47, 0x65, 0x6b, 0x3d, 0xbe, 0xaa, 0x53, - 0x42, 0xdb, 0x81, 0x66, 0x1f, 0x1d, 0x74, 0xb1, 0x3a, 0x10, 0xb7, 0xe9, 0x06, 0x0e, 0xce, 0x3e, - 0x47, 0xc3, 0xde, 0x7e, 0xc7, 0x81, 0xf9, 0x9d, 0x42, 0x2d, 0x85, 0xdd, 0xf4, 0xd1, 0x2b, 0xd8, - 0x04, 0x81, 0x08, 0xb8, 0x08, 0x5a, 0x78, 0x9b, 0x97, 0xc0, 0xd1, 0x22, 0xc8, 0xb2, 0x5d, 0xc9, - 0x70, 0x89, 0x90, 0x52, 0xf6, 0xe2, 0x9d, 0xa6, 0x52, 0x21, 0x6d, 0x85, 0x28, 0x19, 0x4b, 0x7c, - 0xe7, 0xdb, 0xf9, 0xc8, 0x52, 0x36, 0xcb, 0x56, 0x61, 0x91, 0xed, 0xb4, 0x17, 0x47, 0x12, 0x14, - 0x71, 0x59, 0x1c, 0xee, 0xea, 0x14, 0x33, 0x4e, 0x3e, 0x82, 0x7d, 0xae, 0xd4, 0x41, 0x16, 0xf6, - 0x7d, 0x6e, 0xc6, 0xfd, 0x8b, 0x7f, 0xb1, 0x9b, 0x3d, 0x64, 0x7e, 0xbc, 0xd0, 0x6a, 0x43, 0x66, - 0x35, 0xda, 0x19, 0x17, 0x06, 0xa6, 0xfe, 0x3a, 0xab, 0xbe, 0x9e, 0x18, 0xaf, 0x27, 0x57, 0x9f, - 0x2b, 0xf6, 0x99, 0xc2, 0xfa, 0x02, 0x37, 0xa6, 0x84, 0xe8, 0x54, 0x0a, 0xe5, 0xb6, 0x13, 0x84, - 0xb4, 0xb0, 0x96, 0xa8, 0xf9, 0x3c, 0x5a, 0x4c, 0x44, 0x77, 0xa1, 0xbe, 0x2c, 0x28, 0xea, 0xcf, - 0xe5, 0xe5, 0xae, 0x3a, 0xfb, 0xe5, 0xe9, 0x97, 0x65, 0xa6, 0x23, 0x9f, 0xc6, 0xce, 0x8a, 0xbd, - 0xf0, 0x79, 0x1c, 0x20, 0x49, 0x5b, 0x0c, 0x1b, 0xe8, 0x02, 0x18, 0xcc, 0x38, 0x23, 0x14, 0x99, - 0xe2, 0x9d, 0x9f, 0xc1, 0xbd, 0x68, 0x3d, 0xf9, 0xe6, 0xc7, 0xe7, 0xcf, 0x9f, 0x0f, 0x5a, 0x3c, - 0x09, 0x5a, 0xa4, 0xf2, 0x6c, 0x7d, 0x41, 0x0f, 0x77, 0xed, 0x3a, 0xba, 0x45, 0xd6, 0xe7, 0x8c, - 0x02, 0xa2, 0x4d, 0x9c, 0xa5, 0xe5, 0x0c, 0x77, 0xba, 0x8f, 0x2e, 0xea, 0xe4, 0x0b, 0xec, 0x55, - 0xee, 0x04, 0x04, 0x5c, 0x18, 0xb7, 0x26, 0x8c, 0xc7, 0x80, 0xcd, 0xd3, 0x0b, 0xe5, 0xe2, 0x08, - 0x16, 0xad, 0x32, 0x55, 0xff, 0x68, 0xf3, 0x84, 0x82, 0x98, 0x9c, 0xd5, 0x17, 0xe3, 0xcb, 0x00, - 0x06, 0xf6, 0x0c, 0x8d, 0xdc, 0xe6, 0xc9, 0x34, 0x9c, 0x7d, 0xc1, 0x69, 0x49, 0x1e, 0xef, 0x3c, - 0x37, 0x61, 0x1b, 0xc5, 0x03, 0x0b, 0xfe, 0x2c, 0x70, 0xe2, 0xf9, 0x8b, 0x23, 0x18, 0x23, 0x70, - 0xd6, 0x79, 0x37, 0xd0, 0x94, 0x30, 0xc2, 0xfe, 0xa2, 0x38, 0xa8, 0x6b, 0x90, 0x3c, 0xf0, 0x65, - 0x7e, 0x8b, 0xe0, 0xb4, 0xaa, 0x0b, 0x80, 0x93, 0x31, 0x41, 0x16, 0xe3, 0xc4, 0xe7, 0x29, 0xbf, - 0x38, 0xaa, 0xce, 0x79, 0x44, 0x8a, 0xdd, 0x4d, 0x46, 0xec, 0xeb, 0x70, 0xba, 0x38, 0x3a, 0x03, - 0x41, 0x6e, 0x38, 0x47, 0x40, 0x10, 0x57, 0xaa, 0x1a, 0x9c, 0x54, 0x83, 0x6e, 0xaa, 0x41, 0x68, - 0xc1, 0x08, 0x33, 0xa6, 0x28, 0x60, 0x19, 0x7b, 0x8b, 0x77, 0x2e, 0x0c, 0x24, 0xcf, 0x6a, 0xea, - 0x2d, 0xc4, 0x0a, 0x0c, 0x02, 0xee, 0xa3, 0x38, 0xb8, 0x8d, 0xbe, 0x90, 0x3c, 0x9a, 0xca, 0x2f, - 0xb6, 0x6b, 0xc1, 0xea, 0x85, 0x43, 0x11, 0x67, 0xbe, 0x2a, 0x08, 0x87, 0x26, 0x85, 0x62, 0x93, - 0x7e, 0x8b, 0x8c, 0x77, 0xd0, 0x39, 0x18, 0xe6, 0x14, 0xd4, 0xdc, 0x12, 0xd1, 0x02, 0xbb, 0xa3, - 0xd0, 0xa0, 0xbb, 0x65, 0xf0, 0x8b, 0xc5, 0x3c, 0x7f, 0x0b, 0xbd, 0xe9, 0x77, 0x5c, 0x1d, 0x06, - 0x43, 0x80, 0x81, 0xe9, 0x28, 0x14, 0x6c, 0x2b, 0x28, 0x05, 0x66, 0x17, 0x2d, 0x94, 0xa4, 0x89, - 0x3f, 0xbe, 0x93, 0x03, 0xc9, 0x0c, 0x45, 0x1f, 0x54, 0x7d, 0x14, 0x6d, 0x6e, 0x5d, 0x68, 0xb9, - 0xa4, 0x91, 0x20, 0xe5, 0x2a, 0xd2, 0xd6, 0x94, 0xf2, 0xed, 0x3e, 0x26, 0xdf, 0xfe, 0xf3, 0x19, - 0x9b, 0x29, 0xe0, 0xed, 0x40, 0x21, 0x29, 0xd7, 0x4a, 0xc2, 0xd2, 0x6a, 0x5b, 0xac, 0x1b, 0xa2, - 0x42, 0xe6, 0x5a, 0x2b, 0x33, 0xc2, 0xb5, 0xbd, 0xe4, 0x30, 0x50, 0xa7, 0x2f, 0x9f, 0xa2, 0xc2, - 0x70, 0x60, 0xf4, 0xe1, 0x24, 0x9e, 0x8d, 0x6c, 0x33, 0xcf, 0x29, 0x2a, 0x7e, 0x57, 0x8e, 0x39, - 0xe2, 0x10, 0xb5, 0xac, 0xf2, 0x85, 0xf5, 0x9b, 0x8e, 0xc6, 0x7b, 0x0e, 0xb2, 0x5e, 0x67, 0xe5, - 0xfa, 0xa4, 0x8a, 0x51, 0xfc, 0x88, 0xee, 0x34, 0x2d, 0x2f, 0xb6, 0x30, 0xad, 0xd6, 0x0a, 0xd8, - 0x98, 0x19, 0x0a, 0xe2, 0x02, 0x81, 0x6c, 0x89, 0x30, 0x72, 0x7e, 0x30, 0xd0, 0x3c, 0x76, 0x9a, - 0xb0, 0x5b, 0xd1, 0xc0, 0x2e, 0x77, 0xea, 0x2e, 0x66, 0xee, 0xee, 0x88, 0x47, 0x63, 0x90, 0xe3, - 0xee, 0xa3, 0xd4, 0x54, 0xf1, 0x0e, 0xc7, 0xf8, 0x31, 0xd1, 0x85, 0xd8, 0xe9, 0xe5, 0xc5, 0x49, - 0x9e, 0xda, 0xb9, 0x86, 0xc1, 0x0a, 0x53, 0x04, 0x44, 0xe1, 0x04, 0xf9, 0x44, 0xb8, 0x1f, 0xe4, - 0x42, 0x53, 0x66, 0xd8, 0x70, 0x4d, 0x22, 0x17, 0xa1, 0x1e, 0x2a, 0x34, 0x56, 0x06, 0xae, 0x6b, - 0x23, 0x53, 0x0c, 0x52, 0xc0, 0x94, 0x11, 0x34, 0x09, 0x74, 0x0b, 0x4f, 0x66, 0x57, 0x88, 0x4e, - 0xac, 0x5c, 0x1d, 0x0e, 0x05, 0x5c, 0xa6, 0x95, 0x82, 0xcc, 0x86, 0xbd, 0xa0, 0xb3, 0x84, 0xfd, - 0xe4, 0xf2, 0xca, 0x83, 0x65, 0x19, 0xfe, 0x7f, 0xe3, 0xe1, 0x25, 0x06, 0x1c, 0xa3, 0x75, 0xa7, - 0x89, 0xfd, 0x0e, 0x73, 0x3c, 0xa5, 0x20, 0x34, 0x60, 0x57, 0xec, 0xb4, 0x11, 0xc1, 0x6f, 0x9a, - 0x2c, 0x83, 0xdd, 0x2b, 0x3d, 0x5a, 0xff, 0xfb, 0x52, 0x3c, 0x67, 0x75, 0x0b, 0x7d, 0x1e, 0xd8, - 0x14, 0x38, 0xbe, 0xc8, 0x6c, 0x48, 0xb0, 0x43, 0x35, 0x72, 0x0e, 0x30, 0x0b, 0xae, 0x1c, 0x04, - 0xae, 0x8a, 0xbe, 0x0c, 0x18, 0xaf, 0x16, 0xbb, 0x0c, 0x2d, 0x45, 0xca, 0xcc, 0x50, 0xaa, 0xdf, - 0x84, 0x17, 0xbc, 0xde, 0xc3, 0xf0, 0x19, 0x06, 0x26, 0xeb, 0x8e, 0x82, 0x9e, 0x4e, 0x5d, 0x93, - 0x72, 0x47, 0xbd, 0xb8, 0x74, 0x4d, 0xbe, 0x9d, 0x02, 0xac, 0x9a, 0x07, 0x10, 0x6c, 0xef, 0xf5, - 0x22, 0xae, 0x82, 0x3b, 0x46, 0x7f, 0xd7, 0x80, 0xdd, 0xba, 0x55, 0xf2, 0x5e, 0x73, 0xc0, 0x9d, - 0xe2, 0x88, 0xd4, 0xbf, 0xe2, 0x20, 0xe6, 0xc5, 0xa6, 0x0d, 0x6b, 0x65, 0x9e, 0x08, 0x38, 0x79, - 0xc4, 0x7e, 0x54, 0x64, 0x3a, 0x8a, 0x6f, 0x14, 0xd6, 0x11, 0x15, 0x16, 0xcf, 0x1e, 0x86, 0x83, - 0xea, 0x3b, 0x96, 0xe0, 0x1f, 0x31, 0xaa, 0x7d, 0x1d, 0xb8, 0x63, 0x23, 0x24, 0x1b, 0xe7, 0xc2, - 0x80, 0xc0, 0x0d, 0xab, 0xc3, 0x54, 0xef, 0xc6, 0x9f, 0x54, 0x55, 0x22, 0x03, 0xf4, 0xb7, 0xc0, - 0xdb, 0xd5, 0x83, 0xff, 0xa6, 0x82, 0x43, 0x38, 0xa2, 0x84, 0x69, 0xb2, 0x7b, 0xc8, 0x35, 0xc8, - 0x6e, 0x3e, 0x24, 0xef, 0x2f, 0x2f, 0x6c, 0x18, 0x69, 0x11, 0x8c, 0x34, 0x18, 0x65, 0x72, 0xac, - 0x95, 0x73, 0x8d, 0x83, 0x3b, 0xe9, 0x4f, 0x76, 0x12, 0x5e, 0x44, 0xd4, 0xd9, 0xa5, 0x46, 0x1f, - 0x21, 0x7b, 0x1d, 0x82, 0x79, 0xc4, 0xc1, 0x38, 0xdd, 0xb9, 0x44, 0xa7, 0x4d, 0x84, 0xa0, 0xfa, - 0xb1, 0x33, 0x0d, 0x2e, 0xdd, 0xd6, 0x37, 0xe3, 0xf1, 0xb8, 0xb5, 0xd3, 0xdd, 0xff, 0xce, 0x6d, - 0x21, 0x81, 0x25, 0x5a, 0xb1, 0xa6, 0x6d, 0xcb, 0xc5, 0xbf, 0x97, 0xe2, 0xef, 0x05, 0x2c, 0xe1, - 0x28, 0x8e, 0xd6, 0xd4, 0x70, 0x5c, 0x57, 0xbf, 0xbf, 0xfd, 0x29, 0xf5, 0xeb, 0x74, 0x3a, 0x9b, - 0xd5, 0x4f, 0x2b, 0xf9, 0x5f, 0x55, 0xc7, 0xea, 0x5f, 0xeb, 0x73, 0x10, 0xc1, 0xee, 0xa4, 0x98, - 0x25, 0x30, 0x4c, 0xd8, 0x29, 0xd8, 0x59, 0x76, 0xe1, 0xf0, 0xc7, 0x57, 0x87, 0x9f, 0x83, 0x2f, - 0x87, 0x09, 0x92, 0xbc, 0x20, 0x4f, 0x03, 0x81, 0xf9, 0xe9, 0xa2, 0x53, 0x78, 0x11, 0x07, 0xb5, - 0x29, 0xd4, 0x5d, 0x47, 0x91, 0x42, 0x65, 0xa2, 0xf3, 0xbf, 0xe8, 0x43, 0xb6, 0xcc, 0x78, 0x1f, - 0x68, 0x73, 0xe5, 0x7b, 0x07, 0x31, 0x4e, 0x79, 0x83, 0xac, 0xa6, 0xbc, 0xf5, 0x0d, 0x22, 0x07, - 0xeb, 0x48, 0x89, 0x30, 0x15, 0xc4, 0x86, 0x99, 0xb4, 0xbf, 0x45, 0xc4, 0xd9, 0x6c, 0x3c, 0xee, - 0x20, 0xcd, 0xc2, 0x06, 0xd3, 0xcc, 0x67, 0x8c, 0xc8, 0xdc, 0x19, 0x75, 0xf0, 0x56, 0x41, 0x0a, - 0x95, 0x5e, 0xe9, 0xac, 0x2a, 0xc5, 0x8e, 0x58, 0x3e, 0x11, 0x9b, 0x4d, 0x0d, 0x0a, 0xbc, 0xa3, - 0x10, 0x0a, 0x7e, 0x38, 0x88, 0x19, 0xf3, 0x07, 0xce, 0xb7, 0xb9, 0xe3, 0x95, 0x82, 0x0e, 0xaf, - 0xc6, 0xb0, 0xbc, 0x45, 0xd0, 0x1f, 0xd9, 0x0d, 0x7c, 0x48, 0xf8, 0x7f, 0xa7, 0x51, 0x64, 0x7f, - 0x0d, 0x29, 0x58, 0xe9, 0x6b, 0xc0, 0xb7, 0x58, 0x5f, 0x91, 0x2b, 0x63, 0x28, 0xfd, 0x54, 0xa8, - 0x3d, 0x8c, 0x7c, 0x4e, 0x1e, 0xcc, 0x27, 0xb3, 0x6a, 0x45, 0x40, 0x29, 0x9f, 0xbf, 0x3d, 0x98, - 0xcf, 0x8d, 0x55, 0x2b, 0x33, 0x4a, 0xf9, 0xfc, 0x6b, 0x35, 0x1f, 0x7b, 0xc9, 0x23, 0xde, 0xab, - 0x9b, 0x19, 0xab, 0x52, 0x7a, 0x9c, 0xcc, 0xc6, 0x28, 0x2d, 0xad, 0x0b, 0x6e, 0xee, 0xd7, 0xad, - 0x0a, 0xe2, 0x1e, 0xa9, 0xbc, 0x26, 0x0c, 0x8a, 0xc1, 0x22, 0x78, 0x71, 0xa5, 0x49, 0x12, 0x39, - 0xe0, 0x9f, 0xb3, 0x3d, 0x48, 0x5c, 0xbb, 0xe3, 0x28, 0x8f, 0xcd, 0xd4, 0x0f, 0xdc, 0x72, 0xd8, - 0x25, 0x02, 0xff, 0x97, 0xc2, 0x2e, 0xfc, 0x4c, 0xa2, 0xb7, 0x8b, 0x57, 0xa5, 0x26, 0x7e, 0x34, - 0x4d, 0x39, 0xd5, 0x66, 0xc0, 0xad, 0xdf, 0xf9, 0xe4, 0x95, 0x39, 0x12, 0xc8, 0x36, 0x73, 0x29, - 0x22, 0x82, 0x39, 0xf8, 0x82, 0x92, 0x6e, 0x4c, 0xcc, 0x8c, 0x65, 0xf3, 0x0e, 0x8b, 0x2e, 0x3f, - 0xdd, 0xd8, 0x8d, 0x90, 0x94, 0xde, 0x2c, 0xd3, 0x45, 0x6e, 0xe0, 0x2e, 0x29, 0x98, 0xc3, 0x0c, - 0xbe, 0xd0, 0x4b, 0x24, 0x9e, 0xb4, 0x11, 0xa6, 0xfb, 0xc1, 0x21, 0x83, 0xde, 0xc6, 0x6e, 0x6f, - 0x0b, 0x93, 0x16, 0x9c, 0x78, 0x76, 0x58, 0xab, 0x7f, 0x53, 0x5b, 0x29, 0x47, 0x5e, 0x02, 0x96, - 0x77, 0x0a, 0x63, 0xf8, 0x0a, 0x99, 0xe4, 0x6f, 0x4b, 0x76, 0x53, 0x2f, 0x74, 0xc7, 0xf0, 0x11, - 0xe2, 0x22, 0xe8, 0x92, 0x82, 0x2e, 0xfc, 0xa8, 0x08, 0xba, 0xa0, 0x20, 0x10, 0x2d, 0xe5, 0x0e, - 0xa3, 0x42, 0xe4, 0x2d, 0x3b, 0x14, 0xe2, 0x9d, 0x9e, 0x9e, 0xb9, 0xf4, 0xbf, 0xb3, 0xd5, 0x4a, - 0xdc, 0x42, 0x23, 0x24, 0x3f, 0xc5, 0xf6, 0x4f, 0xb9, 0x73, 0xc2, 0xb3, 0xf2, 0x2d, 0xb3, 0xa1, - 0x6f, 0x1d, 0x47, 0x68, 0x3a, 0x5c, 0x7f, 0x0b, 0x30, 0x99, 0xe4, 0xba, 0x2a, 0x1a, 0xcf, 0x03, - 0x84, 0x52, 0x3c, 0xd1, 0xf7, 0x7a, 0xc8, 0xf5, 0xf1, 0x17, 0x94, 0x0e, 0x82, 0xfb, 0x05, 0x9f, - 0x25, 0x8f, 0xcc, 0xde, 0xde, 0x65, 0x98, 0x5f, 0x5d, 0x5f, 0xe0, 0x8d, 0xe7, 0xde, 0x8b, 0x30, - 0x9d, 0x24, 0x49, 0xf2, 0x39, 0x0c, 0xf6, 0x90, 0xac, 0x67, 0xef, 0x36, 0xfc, 0x1c, 0xe2, 0x71, - 0xba, 0x0c, 0x1f, 0x2d, 0xc1, 0x93, 0x6c, 0xfb, 0x6a, 0xd2, 0xf6, 0xbb, 0xcf, 0x9d, 0x61, 0x1f, - 0x81, 0x3d, 0x6d, 0x2c, 0xd6, 0x71, 0xaf, 0x26, 0xc3, 0x9e, 0x7c, 0xec, 0x77, 0x50, 0xd4, 0x3f, - 0x7b, 0xe6, 0xfb, 0x57, 0x13, 0x0a, 0x69, 0xfb, 0x7d, 0x0c, 0xe9, 0x3c, 0xd7, 0x42, 0x20, 0x03, - 0xb9, 0xbb, 0x41, 0x38, 0x1f, 0xc7, 0x38, 0x37, 0x9c, 0x5f, 0x65, 0x68, 0x7a, 0x77, 0x35, 0x59, - 0xb9, 0x2d, 0x04, 0x4f, 0x72, 0x5b, 0xfb, 0x9d, 0xef, 0x60, 0x9a, 0xad, 0xdc, 0x1f, 0xbb, 0x12, - 0x40, 0x3a, 0x9e, 0xa5, 0x06, 0x98, 0x2c, 0x04, 0xbc, 0x27, 0xd5, 0x23, 0x6b, 0x46, 0xf1, 0xbd, - 0x21, 0x00, 0xe8, 0x28, 0x03, 0xc7, 0x0c, 0x0b, 0xed, 0x5b, 0x98, 0x0e, 0xa8, 0xf9, 0xac, 0xa2, - 0x5b, 0x65, 0x21, 0xb2, 0xe8, 0x2c, 0x4c, 0xe7, 0xad, 0xf7, 0xc1, 0x45, 0x92, 0x88, 0x63, 0xa3, - 0xcd, 0xe5, 0xc3, 0x2e, 0xb5, 0xc2, 0xad, 0x03, 0x47, 0x71, 0xdf, 0xda, 0x63, 0xb5, 0xc4, 0x4a, - 0x56, 0xf5, 0xc4, 0x04, 0xbe, 0x85, 0x85, 0x35, 0x33, 0xe5, 0x53, 0x9a, 0x71, 0xdd, 0x64, 0xdd, - 0x4f, 0x9c, 0x3f, 0x58, 0x4b, 0x2e, 0xb8, 0xa8, 0xe4, 0x09, 0x91, 0xa9, 0xc9, 0x3a, 0xb8, 0x0d, - 0xd9, 0xcd, 0xca, 0xd9, 0x51, 0x5f, 0xaa, 0xdb, 0x54, 0x09, 0x24, 0xc7, 0xf6, 0x3e, 0x4b, 0xbe, - 0xa6, 0xef, 0xf0, 0x7d, 0xa9, 0x04, 0x0f, 0x21, 0xe3, 0x8f, 0xad, 0xce, 0xea, 0x0c, 0xc1, 0x22, - 0x7f, 0x96, 0x77, 0x48, 0x8c, 0x29, 0x90, 0x2c, 0xfc, 0xf9, 0xad, 0xab, 0x05, 0x40, 0xfa, 0x5f, - 0xe9, 0xe8, 0xae, 0x45, 0xf9, 0xe4, 0xcf, 0xaf, 0x74, 0x74, 0xf6, 0xee, 0x20, 0x10, 0x96, 0x44, - 0x41, 0xc9, 0x92, 0x48, 0xdc, 0xd3, 0x36, 0x5b, 0x2a, 0x21, 0xf4, 0xa7, 0x3c, 0xbb, 0x8a, 0x5e, - 0xb6, 0x70, 0xcb, 0x67, 0x2d, 0x2d, 0x10, 0xf1, 0x64, 0x55, 0x0e, 0x1b, 0x77, 0x4d, 0x4b, 0x67, - 0x2d, 0x57, 0x04, 0xed, 0x5f, 0x09, 0x1a, 0x57, 0x83, 0xc2, 0x4a, 0x90, 0x36, 0xed, 0x58, 0x7f, - 0x81, 0xa7, 0xe8, 0xfb, 0x7b, 0x22, 0xdc, 0x85, 0x82, 0x21, 0x17, 0x7e, 0x1e, 0xcb, 0xe7, 0x90, - 0x9f, 0x43, 0xf9, 0x1c, 0xf1, 0x73, 0x24, 0x9f, 0x31, 0x61, 0xdb, 0xc7, 0xc7, 0xb6, 0x05, 0x7b, - 0x42, 0x4a, 0x2f, 0x9f, 0xd1, 0xb4, 0x92, 0x32, 0x90, 0x01, 0x3f, 0x58, 0x2e, 0x27, 0x74, 0x2d, - 0xc5, 0x08, 0x4c, 0x88, 0x0b, 0x99, 0x43, 0x4a, 0x40, 0xf2, 0x73, 0x52, 0x7a, 0xb9, 0xf7, 0x27, - 0x7f, 0x7b, 0xc5, 0x14, 0x65, 0x1b, 0x51, 0x26, 0xc4, 0xbb, 0xe1, 0x54, 0x02, 0xc9, 0x0a, 0x6e, - 0x04, 0x0c, 0x3a, 0x83, 0xbe, 0xaa, 0xa7, 0x47, 0x18, 0xfb, 0x0a, 0x54, 0xe2, 0x19, 0x33, 0x19, - 0x40, 0x35, 0xfb, 0x67, 0x23, 0xab, 0x8b, 0x98, 0xf7, 0xfd, 0x33, 0x21, 0x2d, 0xd9, 0xa5, 0x5c, - 0x29, 0xe0, 0x9e, 0xc9, 0xb5, 0xcc, 0x22, 0xa8, 0xfc, 0x67, 0x44, 0x7d, 0x80, 0x7f, 0xeb, 0xa8, - 0x0f, 0x98, 0x66, 0x27, 0xd0, 0xc9, 0x75, 0x44, 0x0d, 0x31, 0x75, 0x70, 0x9a, 0x53, 0xea, 0x80, - 0x68, 0x68, 0x38, 0x35, 0xa2, 0x79, 0xa7, 0x6d, 0xff, 0xdc, 0x45, 0x52, 0x3f, 0x82, 0x07, 0xf1, - 0xf0, 0x47, 0xf7, 0x6c, 0x75, 0xbe, 0x5a, 0x21, 0x7f, 0x01, 0xb9, 0x84, 0x66, 0xb0, 0x82, 0xdc, - 0x59, 0x0e, 0x7c, 0x08, 0x88, 0xbb, 0xed, 0xe2, 0x83, 0xd7, 0xed, 0x3d, 0xdf, 0x86, 0xe3, 0xb5, - 0x16, 0x25, 0xd4, 0xa3, 0x84, 0xb5, 0x51, 0x26, 0x5d, 0x2d, 0x0a, 0x3c, 0xd4, 0x45, 0xe9, 0xe9, - 0x51, 0x7a, 0xb5, 0x51, 0xfa, 0x7a, 0x94, 0x3e, 0x44, 0xf9, 0xbe, 0x14, 0x23, 0xd1, 0xcb, 0x81, - 0x07, 0xaf, 0x53, 0x8e, 0xa0, 0x97, 0x02, 0x0f, 0xd5, 0x08, 0x7a, 0x19, 0xf0, 0x50, 0x89, 0xb0, - 0x40, 0x32, 0x58, 0x15, 0x03, 0x9f, 0xbc, 0x6e, 0x29, 0xca, 0xbc, 0x4b, 0xa5, 0x6c, 0x8d, 0xb5, - 0x30, 0xaa, 0x98, 0x11, 0xb0, 0xbb, 0x5f, 0x09, 0x82, 0x64, 0x23, 0x5b, 0xcf, 0x09, 0xf1, 0x7b, - 0x8b, 0xc2, 0xf0, 0xc9, 0x23, 0x48, 0xc5, 0x72, 0x81, 0xa1, 0x16, 0x0b, 0x1e, 0x6a, 0x23, 0xa5, - 0x9f, 0xf4, 0xac, 0x3e, 0x35, 0xe4, 0xa4, 0x47, 0x9a, 0x17, 0x91, 0x1c, 0x4f, 0xab, 0x02, 0xa2, - 0x4f, 0x73, 0x39, 0xfc, 0x0b, 0x33, 0x13, 0x61, 0xc5, 0x2f, 0x68, 0x8c, 0xd7, 0xdb, 0x76, 0x03, - 0x18, 0x64, 0xe4, 0x2c, 0xf1, 0xed, 0x32, 0x26, 0xbf, 0x4c, 0x6f, 0x69, 0x21, 0xc6, 0x2c, 0x3e, - 0xe2, 0x3c, 0x5c, 0x11, 0xfd, 0x3a, 0x59, 0x3d, 0x42, 0x5f, 0xbb, 0x84, 0xa6, 0x02, 0x02, 0xd5, - 0x0a, 0xa7, 0xf4, 0x38, 0xbb, 0xc3, 0x81, 0x49, 0x29, 0xbf, 0x5d, 0xa6, 0x2b, 0x90, 0xa5, 0xe7, - 0x28, 0xb5, 0xfe, 0x6b, 0xec, 0x5a, 0x6e, 0x62, 0x8f, 0x5d, 0x9a, 0x8d, 0xf0, 0xcb, 0x7a, 0x11, - 0x45, 0x96, 0x78, 0x2a, 0x75, 0xfb, 0x93, 0x27, 0xfc, 0xba, 0x5b, 0xf7, 0xbe, 0x57, 0xbc, 0xef, - 0x89, 0xf7, 0xbc, 0x44, 0xf9, 0xbd, 0x7e, 0xc7, 0xf0, 0x3f, 0x0d, 0x63, 0x04, 0xea, 0xc1, 0xe6, - 0x60, 0xe1, 0xdf, 0x2e, 0x27, 0x5a, 0x53, 0xf2, 0xd5, 0xab, 0x96, 0xbc, 0x27, 0x82, 0xf6, 0xfc, - 0x16, 0x51, 0xe8, 0x04, 0xdb, 0x86, 0xbe, 0xa2, 0xdc, 0x23, 0x52, 0x61, 0x89, 0xc9, 0x16, 0x19, - 0x34, 0x12, 0xda, 0x85, 0x8e, 0x25, 0x67, 0xae, 0x35, 0xbd, 0x4e, 0xe9, 0x79, 0x2c, 0x9e, 0x0b, - 0xeb, 0x7d, 0x0a, 0x0e, 0x45, 0x30, 0x23, 0x40, 0x50, 0xbf, 0x04, 0x31, 0xf7, 0x0f, 0xa4, 0xeb, - 0xae, 0xa0, 0x4f, 0x26, 0xc8, 0x86, 0xd0, 0xf6, 0xad, 0x95, 0x38, 0x4c, 0x14, 0xf2, 0x1e, 0x76, - 0x12, 0x57, 0xe1, 0x74, 0x1a, 0x90, 0x8a, 0x95, 0x37, 0x85, 0x78, 0x0f, 0xc7, 0x2f, 0xff, 0x12, - 0xc4, 0xda, 0x7b, 0x41, 0x02, 0xb4, 0xd8, 0xf4, 0x9d, 0x50, 0x0f, 0x69, 0xbb, 0x70, 0x84, 0x23, - 0x7f, 0x11, 0x4f, 0x5f, 0xdf, 0x05, 0x93, 0x6b, 0x26, 0x4d, 0x73, 0x91, 0xdf, 0x6d, 0xc9, 0x38, - 0xe5, 0x01, 0x08, 0x6e, 0x89, 0x54, 0x4e, 0xc0, 0xee, 0x1a, 0xd6, 0x38, 0xe2, 0x87, 0x8f, 0x82, - 0x5d, 0xf4, 0x07, 0xb4, 0x11, 0x3f, 0xd1, 0xb6, 0xd0, 0xb7, 0xb6, 0x05, 0xb2, 0xbe, 0x6d, 0x15, - 0xf4, 0x3d, 0x20, 0x4e, 0x2d, 0xcb, 0x29, 0x52, 0x19, 0x3c, 0xea, 0xec, 0x85, 0xea, 0xa2, 0xd2, - 0x0c, 0x77, 0x81, 0x12, 0xec, 0xd9, 0xe0, 0x5d, 0x8f, 0x25, 0x3f, 0x0f, 0x14, 0x9f, 0xf3, 0x55, - 0x46, 0xee, 0xb8, 0x26, 0x1b, 0xfb, 0x0a, 0x0a, 0x98, 0x85, 0xf1, 0x38, 0x8a, 0xbe, 0xf0, 0x4e, - 0x6f, 0x65, 0xa8, 0xde, 0x50, 0x69, 0x8f, 0x75, 0xfb, 0x08, 0x5b, 0x46, 0x62, 0xaf, 0xd7, 0x70, - 0x41, 0xf0, 0xc0, 0xfc, 0xeb, 0xcf, 0x6f, 0x7f, 0x82, 0x5d, 0xe5, 0x7b, 0x5e, 0x89, 0x07, 0x19, - 0x2a, 0x4a, 0x5f, 0xa3, 0x26, 0x01, 0xb5, 0xa6, 0x08, 0xf3, 0x6d, 0x5b, 0x98, 0x85, 0xa5, 0x11, - 0xc2, 0xeb, 0xc8, 0xc7, 0x04, 0xb7, 0x2a, 0x61, 0xab, 0x89, 0x28, 0x94, 0x42, 0xd0, 0x3d, 0xf4, - 0x3a, 0x1b, 0xfa, 0xcf, 0x3a, 0x88, 0x55, 0x8d, 0xd7, 0x11, 0xd5, 0x6c, 0xe9, 0x56, 0xca, 0x32, - 0x89, 0xe6, 0x35, 0x98, 0x6b, 0xcc, 0x63, 0xf2, 0x99, 0xc1, 0xae, 0xe9, 0x8a, 0x86, 0x76, 0xc0, - 0xc7, 0xbf, 0x9c, 0x7c, 0x80, 0x71, 0xba, 0xc7, 0x0d, 0xb3, 0x24, 0x10, 0x09, 0xb6, 0xe4, 0x4d, - 0x92, 0xce, 0x5f, 0xc1, 0x02, 0x07, 0x4b, 0x1b, 0x3e, 0xbe, 0x8c, 0x92, 0x0b, 0x1b, 0x86, 0xa2, - 0xbb, 0x44, 0x8f, 0x16, 0x13, 0x51, 0x9e, 0xba, 0x7e, 0x45, 0x04, 0x3f, 0x98, 0x10, 0x15, 0x9d, - 0xa7, 0xd1, 0x19, 0x7c, 0x8b, 0x41, 0x2c, 0x60, 0xcf, 0x6d, 0x4b, 0x94, 0xe0, 0x8e, 0x89, 0x84, - 0x16, 0x83, 0xe2, 0xf2, 0xed, 0xb0, 0x1a, 0x5d, 0x78, 0xda, 0xe5, 0xfd, 0x1b, 0xcc, 0xcd, 0x34, - 0xc0, 0x5b, 0xbd, 0x56, 0x76, 0x9d, 0xd2, 0x35, 0x8e, 0x8d, 0x78, 0xd4, 0x0e, 0xbb, 0xd3, 0x8a, - 0xf1, 0x48, 0x4e, 0xd9, 0x23, 0x9c, 0xcb, 0x35, 0xdf, 0xc7, 0xda, 0xd3, 0x63, 0x59, 0x4d, 0x03, - 0x59, 0xab, 0x0b, 0xdd, 0xcb, 0xb0, 0xb5, 0x48, 0x86, 0x1d, 0xa0, 0x93, 0x31, 0x2c, 0xb4, 0x70, - 0x93, 0x3c, 0x89, 0x18, 0x2e, 0x4f, 0xf2, 0x24, 0x1d, 0x5f, 0x06, 0x88, 0x03, 0x85, 0x38, 0xee, - 0xb6, 0x75, 0x1b, 0x11, 0xd1, 0xd3, 0x9d, 0x25, 0x40, 0xb2, 0x50, 0xdd, 0xc3, 0x83, 0x45, 0xdb, - 0x34, 0xe5, 0xcc, 0x45, 0x86, 0xc8, 0xf3, 0x37, 0xe4, 0xd2, 0x87, 0x7f, 0xe4, 0x86, 0x57, 0x2f, - 0x11, 0xde, 0x2c, 0x78, 0x2b, 0x8b, 0x3c, 0xc5, 0xb6, 0xae, 0x1a, 0x5a, 0x19, 0xf1, 0x96, 0x2b, - 0xf7, 0x52, 0x59, 0xdf, 0x70, 0x23, 0x3a, 0xae, 0xc0, 0x5e, 0xd7, 0xaa, 0x99, 0x55, 0xaa, 0xe9, - 0x96, 0xe8, 0x0c, 0x96, 0x0b, 0x4f, 0xcf, 0xd8, 0xbd, 0xd1, 0x61, 0xca, 0xe1, 0x61, 0x55, 0x55, - 0xb6, 0xbb, 0xac, 0x2c, 0x93, 0x97, 0x5e, 0x81, 0xfb, 0xe3, 0x8f, 0x86, 0xe5, 0x4b, 0xb9, 0x62, - 0x4c, 0x50, 0x4a, 0x22, 0xe2, 0x21, 0x0e, 0x09, 0xa8, 0xca, 0xdd, 0x68, 0x41, 0x0a, 0xc5, 0x76, - 0x60, 0x0a, 0x93, 0xaf, 0xa0, 0x3e, 0xd0, 0x39, 0x0f, 0x36, 0x24, 0x32, 0xc8, 0xf0, 0x22, 0x4f, - 0xef, 0x70, 0xd3, 0xe2, 0x02, 0xba, 0xdf, 0xe8, 0x35, 0xf8, 0x6c, 0x90, 0x07, 0x1a, 0xc3, 0x8e, - 0xca, 0xd7, 0x81, 0x95, 0xde, 0x68, 0x77, 0xa1, 0x3f, 0x56, 0xee, 0x7e, 0xc7, 0xf1, 0x90, 0x6a, - 0x63, 0x3d, 0x68, 0x7d, 0xa1, 0xed, 0x84, 0x93, 0xfe, 0xcf, 0x04, 0xd1, 0x1b, 0x30, 0x10, 0x1b, - 0x6d, 0x0c, 0x71, 0xd7, 0x6b, 0x90, 0x52, 0x37, 0x13, 0x2d, 0x13, 0xa0, 0x82, 0x62, 0x48, 0xd8, - 0x88, 0xc2, 0x18, 0xd7, 0x85, 0x41, 0xec, 0x5b, 0xbd, 0x57, 0x96, 0xb0, 0xa4, 0x31, 0x69, 0x88, - 0x09, 0xf4, 0x5e, 0x0f, 0xfc, 0xef, 0xff, 0x1b, 0x77, 0xda, 0x5e, 0x11, 0x14, 0x60, 0x1c, 0x37, - 0x46, 0x1e, 0xdb, 0x7a, 0x76, 0x27, 0x5d, 0x0b, 0x80, 0xac, 0x18, 0x84, 0xbb, 0xa7, 0x26, 0x63, - 0xd0, 0xac, 0x80, 0x56, 0x68, 0x4e, 0x68, 0xe8, 0x20, 0x34, 0x3b, 0x65, 0x37, 0x18, 0x25, 0xb7, - 0x05, 0xfa, 0xf3, 0x7a, 0x12, 0xea, 0xd0, 0xb7, 0x16, 0x44, 0x8c, 0x0c, 0x6d, 0xcd, 0x47, 0x1d, - 0xaf, 0x3b, 0x08, 0x0f, 0x14, 0x50, 0x5d, 0x28, 0x19, 0x98, 0x62, 0x3f, 0x3b, 0x0d, 0xf1, 0x34, - 0xb0, 0x19, 0x0d, 0xf4, 0x6e, 0x9e, 0xfc, 0x15, 0xe4, 0x63, 0x7a, 0x38, 0x46, 0xc2, 0x15, 0x90, - 0x96, 0x66, 0xed, 0xa3, 0xa2, 0xa7, 0xb8, 0x09, 0x66, 0x7c, 0x64, 0x51, 0x96, 0xce, 0x3a, 0x30, - 0x8c, 0x35, 0xe2, 0xdf, 0x28, 0x18, 0xc7, 0x4c, 0x9a, 0x52, 0x07, 0xab, 0x25, 0x24, 0x56, 0x40, - 0x0e, 0x36, 0x61, 0x72, 0x9d, 0x99, 0x5d, 0x28, 0xf5, 0xbc, 0x74, 0x46, 0xd4, 0xdc, 0x73, 0x30, - 0x13, 0x1c, 0x8b, 0xb4, 0xee, 0xd8, 0x28, 0xe9, 0xf9, 0x97, 0x45, 0x66, 0x76, 0xa8, 0xa7, 0x85, - 0x71, 0x46, 0x9e, 0x62, 0x78, 0xcf, 0x8a, 0x44, 0xbf, 0xb1, 0xfc, 0x38, 0xbb, 0x08, 0x4a, 0xc6, - 0x23, 0x31, 0x8c, 0x72, 0x62, 0xd4, 0xaa, 0xe9, 0x6e, 0x36, 0xd7, 0x23, 0x87, 0x49, 0x09, 0x77, - 0x70, 0x46, 0x0e, 0x70, 0xe9, 0xeb, 0xb1, 0x98, 0x02, 0x41, 0x61, 0xad, 0xd7, 0x35, 0x94, 0x9c, - 0x94, 0xed, 0x9b, 0x3b, 0x49, 0x80, 0x27, 0x49, 0x5a, 0x75, 0xbf, 0x6a, 0x51, 0x39, 0x4d, 0x4d, - 0xde, 0x39, 0x53, 0x6d, 0x55, 0x19, 0x8f, 0x0a, 0x02, 0xf1, 0x59, 0x94, 0x7b, 0x8f, 0xee, 0x83, - 0xaf, 0x6d, 0x25, 0x72, 0xa4, 0xe4, 0xca, 0xec, 0xb4, 0x68, 0xad, 0x31, 0xdd, 0x11, 0x6d, 0x7b, - 0x9c, 0xc3, 0x49, 0x55, 0x29, 0x1f, 0xf1, 0x1c, 0xaf, 0x21, 0x27, 0x62, 0x1f, 0x98, 0x07, 0xda, - 0x00, 0xbd, 0x59, 0x1d, 0x39, 0x4a, 0xe9, 0x69, 0xc0, 0xd7, 0x02, 0xb1, 0x43, 0x64, 0x33, 0xa4, - 0x53, 0xa4, 0x70, 0xff, 0x34, 0x3e, 0x43, 0x2e, 0x39, 0x3b, 0xe7, 0x78, 0x22, 0x53, 0xe7, 0x20, - 0x73, 0x14, 0x74, 0x25, 0x9c, 0x39, 0xa3, 0x83, 0x6c, 0x27, 0x1f, 0x44, 0x30, 0xf4, 0x39, 0x16, - 0x29, 0x23, 0x02, 0x76, 0x9a, 0xdd, 0xe9, 0x32, 0xc1, 0x66, 0xa5, 0x12, 0x1a, 0xe1, 0x0e, 0xec, - 0xc7, 0x0c, 0x06, 0x1e, 0xb3, 0x3a, 0x79, 0x8a, 0xb5, 0xd1, 0xe8, 0x76, 0xf4, 0x4a, 0x69, 0xc0, - 0x7d, 0x66, 0xdd, 0xca, 0xf5, 0xd2, 0x22, 0x8a, 0xea, 0xe9, 0xbe, 0xb1, 0x58, 0xcb, 0xa2, 0x53, - 0x95, 0xc3, 0x8b, 0xa6, 0xce, 0x65, 0xf7, 0x36, 0x46, 0x79, 0x0c, 0x34, 0xdf, 0xb6, 0x44, 0x28, - 0xb9, 0x85, 0x82, 0x7c, 0x21, 0x28, 0xd3, 0x95, 0xda, 0x17, 0xa5, 0xd3, 0x10, 0x7b, 0xd4, 0xb8, - 0x61, 0xcf, 0x6a, 0x6f, 0xd8, 0x0b, 0xb2, 0x38, 0x37, 0x80, 0x0f, 0x9f, 0x23, 0x25, 0x6e, 0x35, - 0x96, 0xf2, 0x29, 0xe5, 0x9d, 0x44, 0x8d, 0x47, 0x5d, 0x11, 0xc3, 0x0d, 0x86, 0xf4, 0x39, 0xe5, - 0xc7, 0xc6, 0x2a, 0x97, 0x53, 0x15, 0x76, 0xd7, 0x45, 0x3a, 0xc4, 0x84, 0x57, 0x76, 0x80, 0x31, - 0x9c, 0x46, 0x85, 0x99, 0x46, 0x7c, 0xe6, 0x2f, 0xc4, 0x0f, 0x65, 0xc2, 0xe1, 0x16, 0x63, 0x50, - 0xc5, 0x22, 0x06, 0x07, 0xf8, 0x84, 0x2a, 0x40, 0xc0, 0xd6, 0x39, 0x05, 0x46, 0x9e, 0x0a, 0xf3, - 0x0b, 0x78, 0xc9, 0x98, 0x20, 0xe3, 0xf4, 0x18, 0x44, 0x99, 0x54, 0xce, 0x0b, 0x89, 0x34, 0x8c, - 0x8c, 0x10, 0xf0, 0x4f, 0x7a, 0xcb, 0xf2, 0x17, 0xd2, 0x2d, 0xa8, 0xd8, 0xd9, 0x36, 0x26, 0x2e, - 0x5b, 0xcd, 0xbd, 0x36, 0x96, 0xbc, 0x82, 0x8d, 0x29, 0x0a, 0x4f, 0xa4, 0x45, 0xf8, 0xb7, 0x71, - 0x84, 0x01, 0xd2, 0x92, 0x24, 0xd6, 0x8d, 0xdb, 0xfc, 0x08, 0x0d, 0x1b, 0xa2, 0xaa, 0x8d, 0x97, - 0xe0, 0x8b, 0xe5, 0x04, 0x25, 0x8b, 0x40, 0x26, 0x83, 0x22, 0xbf, 0xce, 0xb8, 0xd1, 0x8e, 0xa4, - 0xe2, 0x89, 0xcc, 0x50, 0x5f, 0xe2, 0xe2, 0xff, 0x85, 0xdd, 0xd8, 0x66, 0xcb, 0xda, 0xcc, 0x34, - 0x65, 0x95, 0xff, 0x01, 0x67, 0x62, 0xed, 0x18, 0x14, 0x93, 0x44, 0x2c, 0x2c, 0x10, 0x2a, 0x06, - 0xcf, 0x17, 0xd1, 0x75, 0x6a, 0xd7, 0x52, 0xe3, 0x56, 0xdf, 0xe8, 0x36, 0xc8, 0xfc, 0x76, 0xc5, - 0xc7, 0xee, 0xbf, 0x1f, 0x56, 0x29, 0x16, 0xe5, 0xb8, 0x85, 0x1a, 0x39, 0xee, 0x3b, 0xff, 0x19, - 0xcd, 0xc2, 0x90, 0x6a, 0x02, 0x5b, 0x89, 0xbb, 0x8e, 0xa0, 0x23, 0xa3, 0xc6, 0x9d, 0x90, 0x91, - 0x95, 0xe8, 0xf5, 0x81, 0x56, 0x7b, 0x26, 0xea, 0x5a, 0x2a, 0x95, 0xb2, 0xc0, 0x9e, 0xfa, 0x90, - 0x5c, 0xc3, 0x57, 0xca, 0x46, 0xe5, 0x00, 0xe4, 0xa1, 0xd3, 0xce, 0xb9, 0x57, 0xe3, 0xec, 0x28, - 0x4d, 0x08, 0xdd, 0x55, 0xee, 0xb6, 0x58, 0x60, 0x54, 0xd5, 0x70, 0x28, 0x06, 0x14, 0xfd, 0x73, - 0x86, 0x67, 0x12, 0xdb, 0x82, 0xb4, 0xca, 0x0c, 0x70, 0xab, 0xb3, 0x92, 0x64, 0xe2, 0xfa, 0xf9, - 0x63, 0xf2, 0x59, 0xae, 0x63, 0x8b, 0x09, 0xee, 0xea, 0xa4, 0x44, 0x02, 0xe9, 0x35, 0x4e, 0x2f, - 0x03, 0x6d, 0x1a, 0x93, 0xd8, 0x17, 0x81, 0xe6, 0x8a, 0xab, 0xa2, 0x0c, 0xf4, 0xb9, 0x1e, 0x27, - 0xd4, 0xe7, 0xb8, 0xdf, 0xd3, 0x9b, 0x91, 0x97, 0x9e, 0x33, 0x54, 0x03, 0x41, 0x67, 0xca, 0xae, - 0x82, 0xdc, 0xf0, 0xda, 0xfe, 0x57, 0xd5, 0xb1, 0x97, 0xaf, 0x5f, 0x1e, 0xbe, 0x83, 0x33, 0xf7, - 0xf8, 0x42, 0x70, 0x83, 0x58, 0xce, 0x29, 0x7f, 0x85, 0x33, 0x31, 0xb2, 0x3e, 0x24, 0x0b, 0xf7, - 0xef, 0x87, 0x75, 0x8e, 0xbf, 0x62, 0x78, 0x6d, 0xd9, 0xf2, 0xdb, 0x74, 0x1c, 0x03, 0x9c, 0x96, - 0xc6, 0x3e, 0xb7, 0x9f, 0x63, 0x3c, 0x79, 0x52, 0xea, 0x87, 0x6a, 0xb5, 0xfc, 0x7c, 0xe7, 0x0e, - 0x09, 0xca, 0xc9, 0xbe, 0x86, 0xf6, 0xe0, 0x19, 0xea, 0xaf, 0xdb, 0x76, 0xfc, 0x34, 0xdb, 0xbb, - 0xfd, 0x08, 0xdb, 0xf6, 0xe4, 0x4d, 0x78, 0x17, 0x4c, 0xed, 0x9e, 0x33, 0xe8, 0x6c, 0xa1, 0x8c, - 0xb5, 0xb9, 0xba, 0xc3, 0x0e, 0x81, 0x55, 0x3a, 0x2a, 0x00, 0x09, 0x67, 0xe3, 0x21, 0x06, 0x44, - 0xc3, 0xdd, 0x6e, 0x0f, 0xb6, 0x2d, 0x9b, 0x34, 0x15, 0x0e, 0x6d, 0xdc, 0x33, 0x90, 0x0f, 0xb4, - 0x9a, 0x77, 0x5d, 0x64, 0xff, 0x0d, 0xe7, 0xec, 0x34, 0xff, 0x62, 0x5b, 0x3b, 0x3b, 0xa1, 0xe5, - 0x72, 0xba, 0x1d, 0x64, 0x84, 0x88, 0xfc, 0xee, 0x4e, 0x24, 0x2f, 0x17, 0xc7, 0xb8, 0xf1, 0xfa, - 0x9c, 0x89, 0x2a, 0xc0, 0x2e, 0xa2, 0x29, 0x8f, 0x99, 0xe5, 0x46, 0xce, 0xa6, 0xfd, 0xda, 0x85, - 0x8c, 0xc4, 0x8c, 0xd0, 0x77, 0xd2, 0x70, 0x8a, 0x90, 0x14, 0x20, 0x35, 0x1c, 0x1c, 0xa5, 0x1d, - 0xa8, 0x3c, 0xeb, 0xc5, 0xd3, 0x09, 0x59, 0xea, 0xdc, 0x7e, 0x1c, 0xfe, 0xf0, 0xe3, 0x0f, 0xf7, - 0xf7, 0xf0, 0x77, 0xbf, 0xff, 0xe3, 0x93, 0x27, 0xb7, 0x1f, 0x0f, 0x7e, 0xe8, 0x75, 0x9c, 0x32, - 0xac, 0x65, 0x51, 0x1a, 0x91, 0xe5, 0x2c, 0x6f, 0x3f, 0xfa, 0xe2, 0x66, 0x88, 0x84, 0x15, 0x91, - 0x2f, 0xb8, 0x5a, 0x4d, 0x06, 0xda, 0xdd, 0x0f, 0x41, 0x0a, 0x88, 0x4f, 0xcb, 0xf8, 0xf9, 0x83, - 0xec, 0x30, 0x89, 0xb0, 0xf9, 0xd8, 0x3e, 0xc1, 0x9e, 0xea, 0xca, 0xb0, 0x0b, 0x79, 0xa5, 0x4f, - 0x92, 0xcd, 0x48, 0x27, 0x62, 0x32, 0x19, 0xd1, 0x16, 0x5f, 0xc3, 0x40, 0xef, 0x3f, 0x2b, 0x12, - 0xe7, 0x8b, 0x22, 0x43, 0xc1, 0xfb, 0x45, 0x23, 0xcd, 0xae, 0x70, 0x34, 0x89, 0x70, 0x06, 0x5b, - 0x27, 0xd0, 0x57, 0x0a, 0x78, 0xe1, 0x8b, 0xb1, 0xf9, 0xc2, 0xad, 0x3f, 0x5a, 0x2f, 0x26, 0x73, - 0xcb, 0x15, 0x51, 0x1c, 0xf1, 0xc3, 0x57, 0xcf, 0xd0, 0x7d, 0xb0, 0x52, 0xf7, 0x9e, 0xa9, 0x21, - 0x7e, 0x7f, 0x8f, 0xac, 0x74, 0x76, 0x11, 0x8e, 0x5f, 0xe0, 0x96, 0x1f, 0xa8, 0xd7, 0xb5, 0x50, - 0xfa, 0x8d, 0x33, 0x15, 0x75, 0x39, 0x30, 0x86, 0x18, 0x59, 0x42, 0xe5, 0x39, 0x12, 0x85, 0x6d, - 0x75, 0x3d, 0x51, 0x1e, 0x94, 0x52, 0xd4, 0xbc, 0xa8, 0x44, 0x69, 0x10, 0xca, 0x25, 0x95, 0xc7, - 0xc5, 0x31, 0xd4, 0x5f, 0x67, 0x66, 0xe1, 0x54, 0x06, 0xbd, 0x91, 0xd6, 0xfb, 0x3c, 0x7a, 0x98, - 0x2b, 0x57, 0x44, 0x85, 0x42, 0x95, 0x3b, 0x29, 0x74, 0x06, 0xc4, 0x1b, 0x59, 0x1d, 0x3c, 0x97, - 0x5f, 0xe7, 0x89, 0xf5, 0x88, 0xaf, 0xa8, 0xa6, 0x04, 0x23, 0xae, 0xc8, 0x7a, 0xe0, 0x85, 0x28, - 0xe4, 0xf6, 0x0c, 0xff, 0x90, 0x73, 0xd6, 0xad, 0x7f, 0xfb, 0x91, 0x1d, 0x32, 0x51, 0x2d, 0x21, - 0x48, 0xed, 0x69, 0x8d, 0xd3, 0xad, 0x45, 0xe6, 0x01, 0xc8, 0xcc, 0x57, 0x41, 0xb0, 0x80, 0x23, - 0xe5, 0xee, 0xee, 0xae, 0xe2, 0x0d, 0x14, 0xdb, 0x49, 0xb9, 0x34, 0x0c, 0x78, 0x25, 0xc2, 0x33, - 0x71, 0x76, 0x15, 0xce, 0xe0, 0x44, 0xce, 0x3e, 0xb8, 0x70, 0xde, 0x27, 0x47, 0x09, 0xfe, 0x95, - 0x39, 0x4e, 0x49, 0x59, 0x9c, 0x39, 0xe2, 0x0d, 0xe2, 0x00, 0x8d, 0x68, 0x11, 0xb8, 0xbf, 0x37, - 0x95, 0x04, 0x81, 0xbb, 0x84, 0x50, 0x32, 0x60, 0x75, 0xb5, 0xda, 0xa0, 0x8a, 0x8d, 0x52, 0x39, - 0x5e, 0x6d, 0x7c, 0x82, 0x23, 0x52, 0x97, 0xb6, 0x95, 0x66, 0xac, 0x78, 0xc2, 0x35, 0x0a, 0x90, - 0xd8, 0x72, 0x61, 0xf8, 0x8b, 0xb9, 0x58, 0x55, 0x22, 0x22, 0x7e, 0xc9, 0xef, 0x01, 0x73, 0x5c, - 0xb9, 0xb8, 0x55, 0x81, 0x7c, 0xaa, 0xb1, 0xe6, 0x09, 0x3a, 0x5f, 0x24, 0xb7, 0x90, 0x19, 0xce, - 0xfa, 0xe6, 0x88, 0x39, 0x2e, 0xa0, 0xcc, 0x50, 0xf3, 0x40, 0x4c, 0xca, 0x32, 0x81, 0x23, 0x94, - 0x8b, 0xe2, 0xff, 0x81, 0x78, 0xd7, 0x8b, 0x87, 0xa2, 0x51, 0xc1, 0xa8, 0x26, 0x57, 0xf1, 0xfe, - 0xe5, 0x60, 0x0f, 0x44, 0x74, 0xb8, 0xc8, 0x87, 0xad, 0x03, 0xf1, 0xe3, 0x5f, 0xc8, 0xe9, 0x3a, - 0x3b, 0x7c, 0xfd, 0x9a, 0xd0, 0xfa, 0x8c, 0x4d, 0x02, 0x4f, 0x7a, 0xf9, 0x4a, 0x98, 0x61, 0xd7, - 0x11, 0x26, 0x35, 0xf3, 0x40, 0x15, 0xf9, 0x16, 0xbf, 0x9d, 0x82, 0x52, 0xd1, 0xc8, 0xdb, 0x9d, - 0x6a, 0xd8, 0xf1, 0x2f, 0xbf, 0x90, 0x21, 0x49, 0xc0, 0xef, 0x6b, 0x79, 0x96, 0x64, 0xe2, 0x8d, - 0xa8, 0x96, 0xd6, 0xab, 0xe8, 0x93, 0x7f, 0xa8, 0x8a, 0x3e, 0x79, 0x9c, 0x32, 0x7e, 0xad, 0xf6, - 0x1d, 0x15, 0xb3, 0x6f, 0x93, 0x4b, 0xd2, 0x2f, 0x2b, 0xb5, 0x7b, 0xe2, 0xd7, 0x75, 0x1d, 0x44, - 0x7b, 0x91, 0x06, 0x63, 0xd4, 0xdd, 0x94, 0x9a, 0x5c, 0xaf, 0x63, 0xdc, 0x65, 0x2a, 0x30, 0x37, - 0xd0, 0xf4, 0xe7, 0xd0, 0x2d, 0xc4, 0x3c, 0x3f, 0xca, 0x11, 0x08, 0xd4, 0x4e, 0xa4, 0x56, 0x64, - 0xb7, 0xf8, 0xcf, 0x32, 0x6c, 0xf5, 0x72, 0x24, 0x83, 0xae, 0x23, 0xbb, 0xd4, 0x2a, 0x0d, 0x51, - 0x56, 0x2e, 0xf2, 0xd4, 0x22, 0x8b, 0xbb, 0xc8, 0x30, 0x4a, 0x2e, 0x8b, 0x1e, 0x6c, 0x11, 0xd1, - 0x62, 0xab, 0xdb, 0x69, 0x65, 0x01, 0x08, 0x94, 0x69, 0x66, 0xa9, 0x88, 0x31, 0x48, 0x8a, 0x26, - 0xf5, 0x7e, 0xcd, 0x35, 0xc6, 0x66, 0xd7, 0x16, 0x49, 0xdd, 0xb5, 0x45, 0xf2, 0x8f, 0xb9, 0xb6, - 0x48, 0xbe, 0xf6, 0xda, 0x22, 0x79, 0xc4, 0xb5, 0xc5, 0x78, 0xe3, 0x6b, 0x8b, 0x4c, 0xbb, 0xb6, - 0x18, 0x37, 0x5c, 0x5b, 0x64, 0x58, 0x78, 0xed, 0xb5, 0xc5, 0xe1, 0x6b, 0xee, 0xcc, 0x3a, 0x47, - 0x99, 0x40, 0x9a, 0x5c, 0xd5, 0x8d, 0x51, 0x10, 0xcb, 0x97, 0xe9, 0x78, 0x2e, 0xc6, 0x69, 0xed, - 0xd5, 0x05, 0xaa, 0xb9, 0x13, 0x85, 0xd4, 0x50, 0xe7, 0x00, 0x9d, 0xb3, 0xb7, 0x09, 0x5a, 0x9a, - 0xac, 0xea, 0xa5, 0x88, 0x9a, 0x0a, 0x6a, 0xfc, 0x5a, 0xeb, 0x07, 0x69, 0xdb, 0xc2, 0x31, 0x64, - 0xb9, 0x72, 0xa4, 0x6a, 0xe4, 0x00, 0x75, 0xa2, 0x6b, 0xf9, 0xc8, 0x19, 0x06, 0xd9, 0xe3, 0x75, - 0x83, 0xfe, 0xc9, 0x13, 0xa9, 0xa9, 0x38, 0x7f, 0xf1, 0xfe, 0xc3, 0xd1, 0xce, 0x9b, 0x5f, 0x5b, - 0x9c, 0x3f, 0x43, 0x90, 0xb7, 0xb4, 0xff, 0x0e, 0xc2, 0x21, 0x5a, 0x1b, 0x52, 0x0e, 0x04, 0x2f, - 0x56, 0x8d, 0x51, 0x06, 0x1f, 0x9d, 0xd0, 0x80, 0xc4, 0x10, 0x86, 0xe3, 0x32, 0x3b, 0x1e, 0xb2, - 0x4b, 0x56, 0x3a, 0x12, 0x69, 0x35, 0xc3, 0x2a, 0x18, 0x14, 0xee, 0x88, 0xd1, 0x3e, 0x49, 0x43, - 0xf6, 0x36, 0x97, 0x0b, 0x04, 0xbb, 0x44, 0x12, 0x6d, 0x1d, 0xa3, 0xf3, 0xb1, 0x59, 0x8a, 0xb1, - 0xb5, 0xad, 0xda, 0xbb, 0xed, 0xb6, 0x04, 0xf4, 0x1a, 0x41, 0x9d, 0xa2, 0x77, 0xdb, 0xfb, 0xeb, - 0x58, 0x03, 0xad, 0xfa, 0x43, 0x35, 0xc7, 0x65, 0x1c, 0x3f, 0xff, 0x5f, 0x7e, 0xa2, 0xaf, 0xbf, - 0x7d, 0xf8, 0x7a, 0xdb, 0xd5, 0xca, 0x84, 0xd2, 0x5e, 0x89, 0x18, 0x2d, 0xad, 0xe7, 0xff, 0x78, - 0xb3, 0x30, 0xa7, 0xc3, 0xd7, 0x1f, 0x82, 0xf9, 0x02, 0x47, 0x12, 0x37, 0x0f, 0x4b, 0x41, 0xef, - 0xd2, 0x56, 0x2e, 0x82, 0xff, 0x21, 0x8d, 0xc2, 0x9a, 0xdf, 0x74, 0xfa, 0x7d, 0xba, 0xcb, 0xd9, - 0x76, 0xe9, 0x5e, 0x1e, 0xff, 0xd1, 0x9b, 0x88, 0x71, 0x5a, 0xf8, 0xfe, 0x6b, 0x9a, 0x58, 0x5b, - 0xba, 0x7e, 0x0b, 0xd9, 0x50, 0xb8, 0x1e, 0xe5, 0x6b, 0x7b, 0xc0, 0x34, 0xc0, 0xdb, 0xae, 0xb1, - 0x74, 0xfc, 0x39, 0x49, 0x62, 0xd8, 0x42, 0x5f, 0x47, 0x41, 0x46, 0xa6, 0x8e, 0x3b, 0xaf, 0x89, - 0x30, 0x36, 0xdb, 0xcb, 0xd3, 0x20, 0xd8, 0x9b, 0x83, 0x20, 0x0b, 0xd2, 0x3d, 0x9c, 0x8f, 0x6f, - 0x7e, 0xdd, 0xa3, 0xa1, 0x20, 0xb1, 0x0c, 0xb9, 0x78, 0x6b, 0x28, 0xe7, 0xea, 0xdb, 0xf0, 0x22, - 0x1d, 0xa7, 0x5f, 0x1e, 0xdd, 0x63, 0x55, 0x72, 0xb7, 0x86, 0x4a, 0xcf, 0xe7, 0xbb, 0x9f, 0xe3, - 0x84, 0x46, 0x1e, 0xc8, 0xb7, 0x3d, 0x38, 0xe7, 0xc6, 0x73, 0x51, 0x71, 0xd8, 0x59, 0x86, 0x3b, - 0xb3, 0xbb, 0x4a, 0xdd, 0x46, 0x6b, 0xfb, 0x2f, 0x1d, 0x82, 0x1c, 0x39, 0x84, 0x03, 0x09, 0xee, - 0x60, 0xc4, 0x3c, 0x6a, 0x81, 0xfc, 0xfb, 0xc3, 0x12, 0x45, 0xca, 0xd8, 0xe1, 0x7a, 0x49, 0x12, - 0x0e, 0xb1, 0x20, 0x5c, 0xee, 0x87, 0xad, 0xbe, 0x5c, 0xdf, 0x61, 0x07, 0xda, 0xc2, 0x85, 0x05, - 0x2f, 0xb7, 0x4f, 0x82, 0x34, 0x1c, 0x47, 0xad, 0x5f, 0xae, 0x17, 0xd7, 0xf9, 0x6e, 0x43, 0x6d, - 0xc6, 0x2d, 0xb6, 0xa9, 0xfc, 0x66, 0xcd, 0x88, 0xfb, 0xe9, 0xe5, 0xcb, 0x35, 0x43, 0x4e, 0x1e, - 0x1e, 0xc8, 0xba, 0x67, 0x00, 0x5d, 0x17, 0xe6, 0x88, 0x5e, 0xa7, 0xc6, 0xe1, 0x4f, 0x2f, 0xc7, - 0xe3, 0xac, 0xf5, 0x12, 0x1d, 0x29, 0x45, 0x16, 0xd6, 0xf0, 0xff, 0xfd, 0x8f, 0xff, 0xf9, 0x1f, - 0x07, 0x7b, 0xe3, 0x3f, 0x56, 0x99, 0xd7, 0x5f, 0x5d, 0x19, 0x31, 0x36, 0xff, 0x94, 0xfa, 0xbc, - 0xfd, 0xf9, 0x2b, 0xaa, 0xc3, 0xe8, 0xf7, 0xd5, 0x7a, 0x9c, 0x0f, 0xaa, 0x6b, 0xef, 0x67, 0x6d, - 0x0b, 0xaf, 0x71, 0xb8, 0x6d, 0xbc, 0x4a, 0x97, 0x57, 0x65, 0x9a, 0x00, 0x72, 0x69, 0xfe, 0x83, - 0x5b, 0xc1, 0x52, 0x67, 0xd0, 0x01, 0x00, 0xed, 0x7b, 0x62, 0xd2, 0x6b, 0x58, 0x87, 0xaf, 0x2d, - 0xbe, 0x7a, 0x82, 0x1a, 0xc8, 0xe9, 0x07, 0xa7, 0xe8, 0x5d, 0x96, 0x1b, 0x70, 0xf4, 0x4a, 0x85, - 0x12, 0x6c, 0xbd, 0x08, 0xa9, 0x4a, 0x8f, 0x3d, 0x3c, 0x19, 0xc0, 0xb0, 0xfc, 0x33, 0xb3, 0x17, - 0x06, 0x23, 0x7b, 0x3f, 0xbd, 0xfc, 0x3b, 0xff, 0x3c, 0x86, 0xad, 0x62, 0xaf, 0xdb, 0x79, 0xde, - 0x79, 0xfe, 0xf7, 0x7e, 0xef, 0xae, 0xdf, 0xfb, 0x7b, 0xf7, 0x7b, 0xd8, 0x27, 0xed, 0xe1, 0x48, - 0xfe, 0xae, 0xd7, 0x59, 0xc0, 0x5b, 0x51, 0x8d, 0xd7, 0xff, 0x19, 0xd5, 0x10, 0xc9, 0xf4, 0x9a, - 0xbc, 0xfd, 0xf9, 0xcf, 0xac, 0x08, 0x8f, 0xcd, 0x0c, 0x73, 0xae, 0x3b, 0xe8, 0x19, 0xe3, 0x05, - 0xc1, 0xbc, 0xe8, 0xdf, 0x18, 0xf5, 0x33, 0x4d, 0xc6, 0x36, 0x72, 0xb4, 0xec, 0x25, 0x0a, 0xc2, - 0x9e, 0x0e, 0x7c, 0x23, 0xa5, 0xc1, 0x6e, 0xda, 0xb7, 0xe6, 0xb0, 0x8d, 0xa6, 0x5b, 0x8b, 0xe5, - 0x83, 0x5b, 0x5f, 0x65, 0x49, 0x66, 0x8c, 0xe9, 0x44, 0x1f, 0xd3, 0x49, 0x69, 0x4c, 0x43, 0xf6, - 0x89, 0x39, 0xae, 0x4b, 0xdb, 0x0a, 0x68, 0xe1, 0xa6, 0xe5, 0x9e, 0xef, 0x3d, 0x65, 0x21, 0xc2, - 0xa3, 0xb5, 0x25, 0xf3, 0xc0, 0xc0, 0xa7, 0x7b, 0xf8, 0xef, 0x82, 0x53, 0xd1, 0xfe, 0x07, 0x9f, - 0x97, 0x1c, 0x5f, 0x43, 0x4c, 0x8d, 0xa7, 0x41, 0xfa, 0x06, 0x09, 0xae, 0x6d, 0x87, 0xdf, 0x2d, - 0xa5, 0x5c, 0x22, 0x57, 0x99, 0xbb, 0x20, 0x62, 0x57, 0x11, 0xe2, 0x93, 0x0d, 0x52, 0xb7, 0x45, - 0xf6, 0xe6, 0x6f, 0xd2, 0x64, 0x2e, 0x11, 0x72, 0xb4, 0x37, 0xf4, 0xc3, 0x11, 0x19, 0x51, 0x81, - 0xab, 0xf3, 0x95, 0xae, 0xbe, 0xd8, 0x43, 0xe2, 0x6d, 0xfc, 0x7b, 0x95, 0xcf, 0xa3, 0x61, 0xeb, - 0xff, 0x03, 0xbe, 0x0a, 0x4d, 0xef, 0x73, 0xbb, 0x01, 0x00 + 0xa1, 0xad, 0x4e, 0x2e, 0x9d, 0xfb, 0x6b, 0x70, 0xb7, 0x3a, 0xd9, 0x62, 0x3a, 0x97, 0x8d, 0x80, + 0xc7, 0x55, 0x75, 0x0c, 0x62, 0x1d, 0xab, 0x2c, 0x38, 0x76, 0x3f, 0xc0, 0x77, 0x58, 0xfb, 0x7e, + 0x9b, 0x9b, 0x0b, 0x9e, 0x1d, 0x21, 0xde, 0x4e, 0xe0, 0xde, 0xec, 0xf9, 0xf9, 0x7f, 0x7a, 0xc5, + 0xf0, 0xc1, 0x24, 0xea, 0x22, 0xdd, 0x51, 0xb4, 0x24, 0x3d, 0x47, 0x0c, 0xff, 0x27, 0xc3, 0x6d, + 0x3c, 0x49, 0x23, 0xd3, 0xdc, 0xb1, 0x22, 0xc3, 0xca, 0x0d, 0x49, 0x34, 0x97, 0x7e, 0x08, 0x12, + 0x16, 0x8b, 0xdf, 0xe6, 0xfa, 0x02, 0xff, 0x62, 0xa0, 0x43, 0x43, 0xdf, 0xe1, 0xf9, 0xda, 0x37, + 0xcf, 0xdd, 0xaa, 0xab, 0x78, 0x0e, 0xa4, 0x91, 0xdb, 0xfe, 0x3e, 0x30, 0x5d, 0x27, 0x8a, 0x7b, + 0x5c, 0xc8, 0xff, 0x4e, 0x3d, 0x3b, 0x4b, 0x24, 0xd6, 0x59, 0xf0, 0x7e, 0x9b, 0x48, 0xf4, 0x32, + 0xea, 0xe5, 0xef, 0x89, 0x42, 0x0e, 0xbd, 0x06, 0x9a, 0xba, 0x05, 0x1c, 0xb7, 0xec, 0x37, 0xda, + 0x76, 0xae, 0x58, 0xda, 0xc4, 0xcd, 0x37, 0x7b, 0xc7, 0x1d, 0x7f, 0xfe, 0x02, 0x94, 0x9f, 0x2b, + 0x58, 0x2f, 0x6c, 0x3c, 0xdb, 0xc8, 0x0b, 0xdf, 0x56, 0x2a, 0xb3, 0xc1, 0x9b, 0x1c, 0x02, 0xbb, + 0x87, 0xf3, 0x7f, 0x7d, 0xd3, 0x88, 0xbd, 0x47, 0x3a, 0xa3, 0xfe, 0xbf, 0xbe, 0xd5, 0xbe, 0xa5, + 0x12, 0xd9, 0x5c, 0xc5, 0x69, 0x83, 0xef, 0x49, 0xb0, 0x86, 0x80, 0x9e, 0x40, 0x77, 0xf8, 0x92, + 0xa9, 0x6f, 0x54, 0x8d, 0x8d, 0xae, 0xe2, 0xe1, 0x2a, 0x60, 0x91, 0xd7, 0xe8, 0x45, 0xc2, 0x50, + 0xdc, 0xff, 0xce, 0x5e, 0xe8, 0x98, 0xda, 0x37, 0x74, 0x95, 0xd3, 0xee, 0xe0, 0xfa, 0x67, 0x2a, + 0x92, 0x7a, 0x49, 0x3f, 0x7f, 0xe8, 0xf5, 0x29, 0x9c, 0x2c, 0xf0, 0xb7, 0x8f, 0x0d, 0x0c, 0x1a, + 0xb6, 0x6e, 0x1f, 0x05, 0xbe, 0xce, 0xdd, 0x38, 0x6f, 0x37, 0x8f, 0x1e, 0x1c, 0x9f, 0x2c, 0xff, + 0xde, 0x90, 0x1c, 0xe2, 0x7d, 0x0c, 0xda, 0x8d, 0x2e, 0x2f, 0x8f, 0x89, 0x97, 0x15, 0x1a, 0x14, + 0x17, 0x01, 0x6f, 0x34, 0x76, 0x91, 0x89, 0x78, 0x81, 0xf2, 0x50, 0x32, 0x9c, 0xb5, 0x0f, 0xeb, + 0xea, 0x90, 0x1e, 0x07, 0x75, 0xce, 0xba, 0x80, 0x94, 0x8d, 0x14, 0x69, 0x02, 0x83, 0x82, 0x56, + 0xc0, 0x1d, 0x5c, 0xb5, 0x11, 0x06, 0x95, 0x53, 0x3d, 0xc3, 0x8a, 0x94, 0x6a, 0x2b, 0x7d, 0xb0, + 0xba, 0xe8, 0xe9, 0x24, 0xb4, 0x8f, 0xb0, 0xe4, 0x44, 0xe9, 0x29, 0x69, 0x8b, 0xa6, 0xa7, 0xf8, + 0xdf, 0x39, 0x1a, 0x73, 0x4d, 0xd3, 0x4c, 0xcb, 0x52, 0x04, 0x9e, 0x93, 0x77, 0x87, 0xb0, 0x9c, + 0x85, 0xc1, 0xdc, 0x19, 0xb8, 0xef, 0xc2, 0x0b, 0x91, 0x3d, 0x98, 0xf4, 0x88, 0xa6, 0x27, 0xb1, + 0xf4, 0xbf, 0xa6, 0xf9, 0xee, 0x97, 0xad, 0x2d, 0x8e, 0x4d, 0x21, 0xae, 0x83, 0x5f, 0xe3, 0xdd, + 0xda, 0x82, 0x54, 0xc2, 0x81, 0xf2, 0xf4, 0x5f, 0xc6, 0xfc, 0x87, 0x51, 0xe6, 0x0f, 0xe1, 0x8d, + 0x31, 0x18, 0xd6, 0xcc, 0x02, 0xad, 0x09, 0x7b, 0x0e, 0x4b, 0xe5, 0x08, 0xcc, 0x65, 0xec, 0x30, + 0x3c, 0xda, 0x20, 0x73, 0x5f, 0x77, 0xb1, 0xff, 0x01, 0x69, 0x0c, 0x0b, 0xc8, 0x1f, 0xac, 0x60, + 0x86, 0x15, 0x02, 0xc9, 0xfc, 0xbb, 0x4b, 0x0e, 0x0d, 0xd6, 0x12, 0x0f, 0xf4, 0x11, 0xac, 0x26, + 0x6c, 0x1a, 0x81, 0x6d, 0xe9, 0x2f, 0x30, 0x5b, 0xfe, 0x6a, 0x94, 0xcc, 0x84, 0x56, 0x04, 0x31, + 0x49, 0xdb, 0xd6, 0x42, 0x09, 0x80, 0x01, 0x0f, 0x34, 0x0f, 0x23, 0xb1, 0x12, 0x1e, 0xa0, 0xf7, + 0x87, 0x96, 0x74, 0x50, 0xf2, 0x27, 0xc6, 0x10, 0x90, 0x72, 0xca, 0xf8, 0xf8, 0x9d, 0x4b, 0x53, + 0x3c, 0x77, 0x26, 0x73, 0x83, 0x95, 0x88, 0x06, 0xea, 0x45, 0x70, 0xcd, 0x7e, 0x12, 0xb5, 0x10, + 0x84, 0x58, 0xec, 0xfc, 0xa1, 0x80, 0x72, 0x14, 0x17, 0x58, 0xcd, 0x05, 0x0a, 0x3c, 0xc2, 0x63, + 0x07, 0xb8, 0x14, 0x73, 0x6d, 0xe5, 0x9d, 0x30, 0x6c, 0x55, 0xb7, 0x14, 0xc7, 0x39, 0xbc, 0xe5, + 0xb0, 0x16, 0xba, 0x58, 0x9b, 0xf6, 0x40, 0x1f, 0x32, 0xf6, 0x62, 0x34, 0xb0, 0x0d, 0x53, 0x1a, + 0xfa, 0xbd, 0xbf, 0x6a, 0xdf, 0x34, 0xcf, 0x9d, 0x5e, 0x3b, 0x99, 0x19, 0xfc, 0x9a, 0x6b, 0xb0, + 0x8b, 0x0e, 0x7c, 0x9f, 0x8e, 0x86, 0x85, 0x30, 0x9c, 0xe2, 0x5b, 0xce, 0xfb, 0x76, 0xb6, 0x94, + 0xaf, 0xe4, 0x7d, 0xc8, 0xb8, 0x15, 0xc5, 0x05, 0xc1, 0x27, 0x22, 0x15, 0x92, 0x2b, 0x1b, 0x5a, + 0x09, 0x23, 0x02, 0x01, 0xca, 0x47, 0xf0, 0xc2, 0x81, 0x8c, 0xe2, 0xe6, 0xa4, 0x45, 0xf1, 0xf3, + 0xc6, 0x7d, 0x25, 0x8e, 0x4e, 0xc5, 0x4f, 0xe0, 0x19, 0x07, 0x2b, 0x06, 0xd2, 0x32, 0xbe, 0xa1, + 0xb1, 0xa0, 0x23, 0x4f, 0x21, 0xd0, 0xc1, 0xa0, 0xb9, 0x1f, 0x0d, 0x86, 0x8f, 0x42, 0xb3, 0xc5, + 0x81, 0xf2, 0x88, 0x27, 0x4c, 0xb1, 0xed, 0xa1, 0xd4, 0x8d, 0x8a, 0x4a, 0x6d, 0xac, 0x98, 0xba, + 0x36, 0xa4, 0x42, 0x92, 0xa4, 0xf1, 0x12, 0x1a, 0xba, 0xef, 0x8a, 0x71, 0x6e, 0x26, 0x49, 0xf1, + 0x4c, 0xc0, 0xa9, 0x13, 0xc5, 0xc0, 0x73, 0x24, 0x58, 0xf9, 0xbf, 0x59, 0x18, 0x91, 0x34, 0xc9, + 0xe7, 0xf0, 0xa8, 0xac, 0x1a, 0x58, 0xb4, 0xdc, 0x24, 0xc0, 0xcf, 0xa1, 0x2a, 0xa4, 0x20, 0xc2, + 0xb8, 0xcb, 0x8c, 0xbf, 0x09, 0x2b, 0x89, 0xb3, 0x0f, 0x71, 0x87, 0x1c, 0x7a, 0x6d, 0x28, 0xe4, + 0x9c, 0x0f, 0xde, 0x83, 0x84, 0x86, 0x1c, 0xaa, 0xc0, 0xee, 0x44, 0x26, 0x91, 0x53, 0x8b, 0xe6, + 0xa5, 0xf8, 0xf3, 0x5d, 0x76, 0x52, 0x37, 0x98, 0x8a, 0x09, 0x81, 0x57, 0xdc, 0x50, 0x08, 0xa1, + 0x42, 0x53, 0x69, 0xab, 0x42, 0x5c, 0xab, 0x78, 0x56, 0xcc, 0x6f, 0x14, 0x1d, 0xe1, 0xdc, 0x7e, + 0xfb, 0x8a, 0xbb, 0x21, 0x54, 0x8f, 0x0c, 0x75, 0x49, 0x26, 0x29, 0xaf, 0x1b, 0xd8, 0x4c, 0x14, + 0x90, 0x49, 0xc4, 0x30, 0xb4, 0x16, 0x26, 0x71, 0x26, 0x80, 0x34, 0x89, 0x04, 0x5a, 0x47, 0x84, + 0x40, 0xb4, 0xb4, 0x4f, 0x19, 0x9a, 0x14, 0x0f, 0x37, 0xbb, 0x0c, 0x37, 0xbb, 0x1a, 0x6e, 0x76, + 0x19, 0x6e, 0x36, 0x00, 0x37, 0xb2, 0xbc, 0x11, 0x18, 0x76, 0x6f, 0x71, 0xcb, 0x30, 0xb5, 0xef, + 0x17, 0xdb, 0x36, 0x79, 0x1d, 0x87, 0x0d, 0x5e, 0xea, 0xa7, 0xa2, 0x6e, 0x27, 0xdc, 0xef, 0xf1, + 0x8b, 0xac, 0x38, 0x2c, 0x16, 0xb9, 0x3a, 0x30, 0xc9, 0xc2, 0x5b, 0xdd, 0x63, 0x49, 0xee, 0x3e, + 0x95, 0x53, 0xb3, 0xad, 0x60, 0xf0, 0x4c, 0xbf, 0x6e, 0xbb, 0x07, 0x2e, 0x9c, 0xab, 0x0b, 0x83, + 0x11, 0x8f, 0xae, 0x51, 0xe5, 0xde, 0xc2, 0x13, 0x34, 0xac, 0xa8, 0x3b, 0xcc, 0x6a, 0xb8, 0x76, + 0xbc, 0xe7, 0x52, 0xc3, 0x73, 0xcd, 0x89, 0xe0, 0x41, 0xda, 0xf0, 0xe9, 0x59, 0xe7, 0xd0, 0xac, + 0x77, 0xc6, 0x8f, 0xaa, 0x1f, 0xf0, 0x18, 0x73, 0xd2, 0x8f, 0xee, 0xa7, 0xf6, 0x1d, 0xaf, 0x9c, + 0x0b, 0x31, 0x95, 0xa2, 0x0d, 0xab, 0xbe, 0x1f, 0x4e, 0x4b, 0x83, 0x0e, 0x54, 0xa7, 0x31, 0x5d, + 0x7e, 0x4b, 0xd4, 0x61, 0x12, 0x68, 0x58, 0x4d, 0xa1, 0xe1, 0xb6, 0x8d, 0xad, 0x63, 0x16, 0x22, + 0xa1, 0x26, 0x29, 0x24, 0x89, 0x6d, 0xe6, 0x02, 0x7c, 0x3e, 0xa5, 0x26, 0xc1, 0x56, 0xfb, 0xf2, + 0x45, 0xc2, 0xc0, 0x88, 0xf8, 0x28, 0x16, 0xcf, 0x05, 0xfa, 0xe7, 0x9f, 0x78, 0xf8, 0x4e, 0xdd, + 0xdc, 0x0c, 0x9e, 0x8c, 0x81, 0x6c, 0x04, 0x1a, 0xea, 0x08, 0xf3, 0xfa, 0x01, 0x96, 0xda, 0x0e, + 0xfc, 0xab, 0xf1, 0x32, 0x8b, 0x33, 0x44, 0xef, 0x3b, 0xdb, 0x59, 0x62, 0x68, 0xe8, 0x8e, 0xe3, + 0xce, 0x71, 0x22, 0x19, 0xbf, 0xcd, 0xd5, 0x85, 0x7f, 0x23, 0x55, 0xc7, 0xe2, 0xe9, 0x66, 0xdd, + 0x0a, 0xd7, 0x16, 0x18, 0x99, 0x60, 0x51, 0x68, 0x69, 0x5d, 0xdb, 0x41, 0xd3, 0x9a, 0x67, 0x6e, + 0x62, 0xcf, 0x1f, 0xa5, 0x2e, 0xa0, 0x40, 0xd8, 0xf9, 0x07, 0x04, 0xb8, 0x9a, 0x98, 0x09, 0xcc, + 0x4b, 0x86, 0xf5, 0x67, 0xda, 0xcc, 0xea, 0xfb, 0x32, 0xd9, 0x96, 0x61, 0xe0, 0xee, 0x52, 0xd6, + 0x00, 0xfd, 0x2e, 0xd9, 0xda, 0x4b, 0x33, 0xa1, 0x45, 0x3c, 0x97, 0xc6, 0x5a, 0xfc, 0x2b, 0xf7, + 0x97, 0xae, 0xf8, 0xb2, 0x2d, 0xf6, 0x17, 0x5a, 0x85, 0x7e, 0x66, 0x1c, 0xa4, 0x3e, 0xba, 0xcb, + 0x94, 0xf6, 0xcc, 0x73, 0x12, 0x3a, 0x3e, 0x39, 0xb3, 0xa1, 0x31, 0x0b, 0x56, 0xe8, 0xd2, 0x27, + 0xdd, 0x10, 0x64, 0x37, 0xe9, 0x49, 0x30, 0x9c, 0xb4, 0x27, 0xa1, 0x0f, 0xe3, 0xc3, 0xee, 0x3f, + 0x0c, 0xdd, 0x7a, 0x08, 0x73, 0x8a, 0x5d, 0xe0, 0x7d, 0x83, 0xbb, 0xc5, 0x16, 0xe1, 0xd0, 0x8f, + 0x7a, 0x8e, 0x56, 0x1b, 0x2f, 0x2b, 0x26, 0x0b, 0x04, 0xe0, 0x17, 0x2b, 0x6e, 0xf5, 0x0e, 0xd0, + 0x0f, 0xe0, 0x44, 0xe8, 0x05, 0x00, 0x5d, 0x62, 0x61, 0x57, 0xa1, 0xc0, 0x0e, 0xef, 0xdc, 0x60, + 0x48, 0xc7, 0x77, 0xfb, 0x83, 0x8b, 0x1b, 0xdd, 0x1b, 0x0c, 0x7f, 0x09, 0xa3, 0x0f, 0x50, 0x3f, + 0x57, 0xd0, 0xc9, 0xf7, 0x31, 0x8e, 0xc3, 0xe8, 0x67, 0x8a, 0xcf, 0x95, 0x20, 0x86, 0x43, 0xe5, + 0xef, 0x22, 0xd8, 0x43, 0x3f, 0xcd, 0x80, 0xba, 0x2e, 0xac, 0xf3, 0xcd, 0x4d, 0xf3, 0xfb, 0x70, + 0xf2, 0xc7, 0x70, 0x00, 0x93, 0xb0, 0xf7, 0x39, 0xa2, 0x7f, 0x82, 0xbc, 0x4f, 0xcb, 0xd4, 0x7d, + 0x0a, 0x91, 0xf7, 0xe9, 0xef, 0x22, 0x3f, 0xf8, 0xa7, 0xa8, 0xfb, 0xb4, 0x44, 0xdd, 0x10, 0x86, + 0xc3, 0xbf, 0x8b, 0x21, 0x93, 0x2f, 0xe3, 0xb0, 0x7c, 0xa1, 0x2d, 0x4a, 0x06, 0x5e, 0x41, 0x42, + 0xef, 0x96, 0x87, 0xe7, 0x06, 0xef, 0x24, 0xb8, 0xdb, 0x5a, 0x1d, 0x75, 0xcb, 0x72, 0x2e, 0xf4, + 0xdc, 0xa7, 0x72, 0x8f, 0xcb, 0xee, 0x71, 0x07, 0x8f, 0x7e, 0xe0, 0x40, 0x70, 0xc2, 0x11, 0x75, + 0xcb, 0x80, 0xb6, 0x59, 0x2c, 0x4c, 0x38, 0x35, 0xd4, 0x66, 0x36, 0x17, 0xed, 0x66, 0x36, 0xe7, + 0x8a, 0x21, 0x0a, 0x95, 0xfb, 0xee, 0x5c, 0x30, 0xeb, 0x7f, 0xea, 0xf8, 0xb7, 0x39, 0xc8, 0x5a, + 0xa0, 0x40, 0x36, 0xb7, 0x83, 0x51, 0x6a, 0xec, 0x5a, 0x07, 0x46, 0x84, 0x2b, 0xd0, 0x01, 0x55, + 0xeb, 0x7b, 0x86, 0xd5, 0x89, 0x87, 0x90, 0x45, 0x08, 0xd9, 0x55, 0x10, 0x76, 0x25, 0x73, 0x7d, + 0xf5, 0x1c, 0x56, 0xcf, 0xad, 0xaa, 0xde, 0x34, 0xbb, 0xeb, 0xab, 0xe7, 0xb1, 0x7a, 0x7e, 0x55, + 0xf5, 0x16, 0xbd, 0xdd, 0x64, 0x3d, 0x84, 0x02, 0x42, 0x28, 0xac, 0x82, 0xf0, 0x72, 0xce, 0x6c, + 0xb4, 0xf5, 0x30, 0x8a, 0x08, 0xa3, 0xb8, 0x12, 0x0b, 0xc5, 0xec, 0xaa, 0xe4, 0x63, 0x28, 0x25, + 0x84, 0x52, 0x5a, 0x49, 0x49, 0x3c, 0x0b, 0xba, 0x0c, 0x04, 0xf8, 0x91, 0x16, 0x5b, 0x92, 0xc2, + 0xbf, 0x84, 0xa1, 0xc3, 0x94, 0x94, 0x05, 0x2d, 0x0d, 0xd9, 0x44, 0x89, 0xe5, 0xbf, 0x36, 0x2a, + 0xcb, 0x9c, 0xa5, 0x0c, 0xff, 0x2d, 0xe6, 0xb3, 0xa2, 0x02, 0xac, 0xad, 0x7c, 0x92, 0xf5, 0x2c, + 0x65, 0xb9, 0xb7, 0x44, 0x82, 0xfa, 0xda, 0x67, 0x59, 0x2f, 0x06, 0xc2, 0x03, 0x79, 0x50, 0x54, + 0xf5, 0x06, 0x88, 0xf6, 0xa4, 0x8f, 0x3e, 0xcb, 0x83, 0x31, 0x70, 0xee, 0xb2, 0xe2, 0x7f, 0xe6, + 0x3f, 0xcb, 0x84, 0xb1, 0xf5, 0x0b, 0xd1, 0xfa, 0x6b, 0xc6, 0xec, 0xb8, 0x41, 0x23, 0x1b, 0x70, + 0x4f, 0x5e, 0x66, 0x87, 0x34, 0x80, 0xc2, 0x0d, 0xff, 0xe6, 0x95, 0x24, 0xdd, 0xc7, 0x11, 0x3a, + 0x71, 0xfb, 0xdd, 0x4b, 0x17, 0x50, 0xb5, 0xf6, 0xd9, 0x05, 0x4b, 0x89, 0x6f, 0x28, 0xe2, 0x22, + 0x1a, 0xd2, 0xe2, 0x1b, 0x1e, 0x37, 0xa7, 0xc3, 0xd3, 0xbc, 0xb9, 0x3d, 0xde, 0x3a, 0x78, 0xe4, + 0x58, 0xe9, 0xd0, 0xf5, 0x6a, 0xc8, 0x11, 0xbf, 0xea, 0xd1, 0x8d, 0x4f, 0x18, 0x71, 0xba, 0x39, + 0x87, 0x00, 0x30, 0x38, 0x67, 0x88, 0xfa, 0x1b, 0xe9, 0xef, 0xf0, 0xa1, 0xae, 0xe3, 0x6a, 0xbd, + 0xe3, 0x2b, 0x75, 0x4b, 0x6a, 0x13, 0xe5, 0x8b, 0x38, 0xe9, 0xce, 0xbe, 0x90, 0xe3, 0xa8, 0x64, + 0x1f, 0x49, 0x76, 0xcb, 0xb9, 0xc8, 0xd1, 0xe3, 0x3b, 0x54, 0x3f, 0x83, 0xa2, 0x1d, 0x52, 0x22, + 0xb2, 0x9d, 0x02, 0x5e, 0x2f, 0xdf, 0xa9, 0x0e, 0xc3, 0x44, 0xfc, 0x9a, 0x3d, 0x4f, 0xf3, 0x3d, + 0x84, 0x0a, 0x7d, 0xf7, 0x77, 0x3c, 0xf1, 0x8c, 0x01, 0xb5, 0x0b, 0xe0, 0xd7, 0x39, 0xff, 0x92, + 0x48, 0xd6, 0xfd, 0x8f, 0x75, 0x50, 0x1c, 0xeb, 0x54, 0x3f, 0x44, 0x3c, 0xa1, 0xf6, 0x8e, 0xe5, + 0x6c, 0x55, 0xb1, 0x5f, 0x00, 0x0b, 0x4a, 0x30, 0x90, 0xb0, 0x90, 0xc5, 0xe3, 0xe9, 0x78, 0xe3, + 0x3a, 0xfe, 0xe4, 0x73, 0x45, 0x7e, 0x11, 0xb7, 0x6d, 0x0a, 0xe5, 0x97, 0x36, 0xa2, 0x91, 0x1a, + 0xfb, 0xd3, 0xe0, 0x44, 0x0c, 0xf0, 0x82, 0x63, 0x79, 0x80, 0x69, 0xa5, 0x2e, 0x62, 0x15, 0xe0, + 0xe5, 0xbd, 0x63, 0xa7, 0xab, 0xab, 0x77, 0x8f, 0xd5, 0xe8, 0xce, 0xb1, 0xa7, 0x0e, 0x7e, 0x7a, + 0xf3, 0x58, 0x8d, 0xdd, 0x38, 0x56, 0x63, 0x36, 0x8d, 0x7f, 0x9b, 0x47, 0x8f, 0xce, 0xeb, 0xcc, + 0x2a, 0x8c, 0xd2, 0x45, 0xd1, 0x42, 0xe8, 0xc3, 0x6b, 0x90, 0xbd, 0x82, 0x63, 0x38, 0x0d, 0xe9, + 0xc0, 0xbd, 0xe9, 0xc2, 0x55, 0x90, 0xd9, 0xa5, 0x27, 0x7c, 0x66, 0x3b, 0xec, 0xf5, 0x72, 0x7d, + 0x5d, 0x5c, 0xdc, 0xd7, 0xb9, 0xdc, 0xfd, 0x6c, 0x7b, 0x6a, 0x87, 0xda, 0xb7, 0x63, 0xbf, 0xda, + 0xe7, 0x7f, 0xb4, 0x2f, 0x9f, 0x0b, 0x22, 0xe1, 0x8c, 0x16, 0x4e, 0x9f, 0xd0, 0x8d, 0xc3, 0xf4, + 0x0b, 0x80, 0x1c, 0x0e, 0x79, 0x3a, 0x9d, 0xe6, 0x99, 0xa2, 0xce, 0x76, 0x3a, 0x3c, 0x2a, 0x83, + 0xed, 0x48, 0xef, 0x78, 0xb6, 0x9d, 0xfe, 0xda, 0xae, 0x80, 0xb7, 0x65, 0x1a, 0x94, 0xe0, 0x2b, + 0x84, 0x3b, 0x7c, 0x9b, 0xba, 0x08, 0x1e, 0x31, 0xce, 0x93, 0x3e, 0x41, 0xf7, 0x78, 0x16, 0x53, + 0xbe, 0xaa, 0x4a, 0x90, 0xf8, 0x80, 0xf9, 0x0e, 0xff, 0x80, 0x2e, 0x19, 0x0a, 0x40, 0x37, 0x10, + 0xd2, 0x52, 0x01, 0x76, 0xa9, 0x20, 0x58, 0x9a, 0x6e, 0xa1, 0x8f, 0x1b, 0x41, 0x6d, 0xff, 0xb2, + 0xd7, 0xc3, 0x73, 0xae, 0x7e, 0x41, 0xc7, 0x89, 0x13, 0xe9, 0x91, 0x33, 0x02, 0x81, 0xe9, 0x10, + 0x16, 0x15, 0xd1, 0x7b, 0xab, 0x43, 0xd7, 0x56, 0xff, 0x36, 0x4f, 0x84, 0xda, 0x1d, 0x4e, 0x6a, + 0xee, 0x2e, 0x70, 0x72, 0x2b, 0xbb, 0x08, 0xb0, 0x85, 0xb9, 0x58, 0x32, 0xb1, 0xce, 0x88, 0xe6, + 0x1b, 0x5f, 0xde, 0x57, 0x1a, 0xa1, 0x5d, 0xf6, 0x95, 0x46, 0x87, 0x7b, 0xc3, 0xfd, 0xfc, 0x00, + 0x5b, 0xf2, 0x01, 0xb6, 0xab, 0x90, 0x0d, 0x62, 0xda, 0xdd, 0x4a, 0x44, 0x87, 0xc0, 0xac, 0x89, + 0xc9, 0x7f, 0x04, 0x7f, 0xd7, 0x31, 0x87, 0x9c, 0xbe, 0x25, 0xa9, 0x4a, 0x5f, 0xab, 0xa1, 0xac, + 0x33, 0xed, 0x3a, 0x1f, 0x1d, 0xc2, 0x51, 0x8a, 0x46, 0x00, 0xf3, 0x29, 0x7a, 0xd3, 0xd5, 0x72, + 0xbf, 0xb9, 0xe8, 0x90, 0x53, 0xbd, 0x64, 0x69, 0xc1, 0xd0, 0x7b, 0x51, 0x92, 0x04, 0x26, 0x89, + 0xde, 0x5b, 0xd7, 0xab, 0xed, 0x65, 0xce, 0x89, 0xb6, 0xe9, 0x78, 0x1f, 0xb7, 0x19, 0xf3, 0x3f, + 0xb9, 0x67, 0x2d, 0x00, 0xeb, 0x25, 0x1a, 0xf2, 0x47, 0xd4, 0x19, 0xe9, 0xf2, 0xf0, 0x13, 0xee, + 0x93, 0x79, 0xe5, 0x7d, 0x27, 0xa3, 0x0b, 0x71, 0xcd, 0x40, 0x7f, 0x4b, 0xa9, 0xa9, 0x6f, 0xd6, + 0xd3, 0xda, 0xa1, 0xfe, 0x96, 0x4a, 0x0c, 0x07, 0x5b, 0x59, 0xdc, 0x8b, 0x73, 0x3b, 0xfc, 0x2d, + 0x25, 0xe3, 0x5b, 0x4c, 0x77, 0x29, 0xc0, 0x15, 0xa3, 0xe8, 0xe4, 0x6d, 0xfb, 0xa8, 0x7e, 0x80, + 0x18, 0xf9, 0x08, 0xb1, 0xe1, 0x20, 0x84, 0x54, 0xc2, 0x58, 0xe6, 0x37, 0xb9, 0x86, 0xbb, 0xe8, + 0xff, 0x3e, 0xb2, 0xeb, 0xd8, 0xed, 0x5b, 0x6a, 0xe0, 0x72, 0x58, 0x0f, 0x1e, 0xbc, 0x01, 0xe0, + 0x9d, 0xc5, 0x20, 0x2c, 0x25, 0x0e, 0xf1, 0xca, 0x53, 0x45, 0xeb, 0x87, 0x67, 0x63, 0x1b, 0x0f, + 0x43, 0x46, 0x13, 0xff, 0x3d, 0x79, 0xd3, 0x37, 0x8d, 0x58, 0xfa, 0x65, 0x83, 0x5e, 0x98, 0x00, + 0x0b, 0x43, 0xf9, 0xff, 0x16, 0xc9, 0x62, 0x19, 0xdd, 0xb5, 0xe3, 0x1a, 0xc5, 0x0b, 0xca, 0xff, + 0x97, 0x4b, 0x8c, 0xcf, 0xec, 0x78, 0x33, 0x3f, 0x97, 0x07, 0x3a, 0xa2, 0x4b, 0x78, 0xdf, 0xa5, + 0xf5, 0xbe, 0xcb, 0xc0, 0x94, 0xcc, 0xd8, 0xaf, 0xd4, 0xc6, 0x0c, 0x6c, 0xc6, 0x8d, 0x11, 0x08, + 0x9b, 0x3f, 0x03, 0xae, 0x13, 0xb6, 0x73, 0x54, 0xb6, 0x93, 0xe0, 0x6a, 0xee, 0xcb, 0xab, 0x55, + 0x7f, 0xb1, 0x9c, 0xbe, 0xb9, 0x69, 0x6c, 0xc9, 0xdb, 0xd9, 0xcd, 0xcd, 0xee, 0x96, 0xb9, 0x9d, + 0xdd, 0x19, 0xbb, 0x8c, 0x89, 0x5e, 0x71, 0x7a, 0x3d, 0xed, 0x0d, 0x61, 0x51, 0x3b, 0x9b, 0x9b, + 0x91, 0x04, 0xea, 0x76, 0xe4, 0x6b, 0x43, 0xbf, 0x38, 0x68, 0xeb, 0x07, 0x8f, 0xb4, 0x1c, 0x7d, + 0x4a, 0xe3, 0x71, 0x9b, 0xe3, 0x40, 0xb0, 0x85, 0xa3, 0xce, 0xf3, 0xc9, 0x9d, 0x8e, 0xc7, 0xff, + 0x6b, 0x7c, 0x28, 0xa1, 0xbe, 0x75, 0xec, 0xa1, 0x63, 0xae, 0x45, 0xfb, 0x45, 0x3f, 0x06, 0x61, + 0xe8, 0x34, 0x94, 0x80, 0x79, 0x5d, 0x9c, 0xdb, 0x4a, 0x31, 0x42, 0x31, 0x54, 0xf4, 0xdb, 0x7a, + 0xa5, 0x9d, 0x4e, 0x6c, 0xdb, 0x88, 0x18, 0x8b, 0xb7, 0x86, 0x27, 0x0d, 0x40, 0x8e, 0x68, 0x69, + 0xdb, 0x08, 0x29, 0xed, 0xc9, 0x14, 0xbf, 0x8d, 0xb1, 0x1a, 0x1f, 0x43, 0x8e, 0xf3, 0xa3, 0x85, + 0x20, 0x47, 0x3c, 0x69, 0x14, 0xf2, 0x82, 0xb1, 0xe8, 0x87, 0x36, 0x41, 0xd0, 0x28, 0x08, 0x71, + 0x89, 0x4c, 0x3c, 0xef, 0xed, 0x6a, 0x46, 0x76, 0xd0, 0x34, 0x99, 0x86, 0xeb, 0x7e, 0x6f, 0x9c, + 0x18, 0x60, 0xeb, 0x3a, 0x57, 0xa1, 0xe2, 0x19, 0xe4, 0x40, 0x84, 0x87, 0xf1, 0x29, 0x7e, 0x0f, + 0x7d, 0x52, 0xda, 0xe3, 0xf0, 0x4f, 0x22, 0x23, 0x87, 0x90, 0xd9, 0xa3, 0x71, 0xc0, 0x01, 0x14, + 0xe4, 0xa0, 0x39, 0xf5, 0x01, 0x0a, 0x62, 0xbe, 0xbc, 0x8c, 0x42, 0xc4, 0x25, 0x1c, 0xab, 0xb3, + 0x03, 0x7b, 0x63, 0x54, 0x8e, 0x63, 0x03, 0x2f, 0xdc, 0x1d, 0x83, 0xe5, 0x18, 0x4e, 0x67, 0x73, + 0x22, 0xb8, 0xf7, 0xb0, 0xdd, 0x60, 0x21, 0x78, 0x75, 0xff, 0xc0, 0xbc, 0xea, 0x9c, 0x74, 0x07, + 0xe3, 0x07, 0x2f, 0x9d, 0x48, 0xba, 0x27, 0x63, 0xdc, 0x77, 0xf7, 0x53, 0x35, 0x18, 0x1a, 0xe7, + 0x6d, 0xac, 0x48, 0x0d, 0xb1, 0x2e, 0x7d, 0x6f, 0x60, 0x6f, 0xeb, 0x52, 0x2a, 0x95, 0xf4, 0x85, + 0x9c, 0x44, 0x8f, 0x4d, 0x07, 0x3d, 0xe9, 0xf4, 0xd4, 0x21, 0x9d, 0x31, 0x12, 0xba, 0xe6, 0x7f, + 0x25, 0xbd, 0x06, 0xfb, 0x26, 0x9f, 0x92, 0x56, 0x85, 0xd7, 0x7d, 0x09, 0xd6, 0x03, 0x64, 0x7e, + 0x79, 0x98, 0x6c, 0x6e, 0x7e, 0x12, 0xe1, 0x2c, 0xbb, 0xad, 0xc5, 0xd9, 0xad, 0xf9, 0x9e, 0xf3, + 0x4b, 0xf6, 0x65, 0x30, 0xe2, 0x00, 0xf9, 0x55, 0x8d, 0xbb, 0xc5, 0x0c, 0x71, 0x55, 0xf8, 0x1f, + 0x20, 0x48, 0xa7, 0xf1, 0x17, 0x95, 0x5d, 0x57, 0x11, 0x5a, 0xc5, 0xbd, 0xfd, 0x20, 0xbf, 0x0f, + 0xd8, 0xda, 0xc2, 0x72, 0x8f, 0x79, 0x26, 0x61, 0x99, 0x4f, 0xad, 0x2a, 0x45, 0xbc, 0x52, 0xdf, + 0x5d, 0x2d, 0x35, 0x80, 0xb9, 0xe9, 0x62, 0xce, 0x42, 0x39, 0x9d, 0x7d, 0x05, 0x34, 0x5e, 0x30, + 0x72, 0x28, 0x80, 0x3b, 0xfb, 0xe2, 0x4d, 0xb4, 0x9c, 0x4b, 0x0d, 0x10, 0xab, 0xe1, 0x2b, 0xda, + 0x84, 0xf0, 0x75, 0x16, 0x18, 0x4f, 0x69, 0x58, 0x49, 0x34, 0xae, 0xf1, 0x21, 0x70, 0x30, 0x81, + 0x85, 0x9e, 0x7f, 0x3b, 0xa3, 0x5b, 0x4b, 0x35, 0x27, 0x02, 0x6d, 0xd9, 0xdd, 0x65, 0xf5, 0x83, + 0x92, 0x25, 0x12, 0x7e, 0xc5, 0xf6, 0xa5, 0xfe, 0xf5, 0xad, 0xe6, 0xd1, 0x80, 0x7e, 0x15, 0x89, + 0xf5, 0x1a, 0xe7, 0xce, 0xb7, 0xba, 0x17, 0x32, 0x48, 0x4f, 0x40, 0x70, 0x0c, 0x0d, 0xba, 0x01, + 0x47, 0xcf, 0x2f, 0x84, 0x7d, 0x4a, 0xbf, 0xcd, 0xed, 0xb4, 0x22, 0x2f, 0xe0, 0x97, 0x06, 0x28, + 0x7a, 0x3b, 0x7a, 0x0d, 0x4c, 0x5e, 0x72, 0x32, 0x51, 0x47, 0x1a, 0xcb, 0x71, 0x3c, 0x0d, 0x7c, + 0x0d, 0x5f, 0xbf, 0x67, 0xc5, 0x1d, 0xf7, 0xfb, 0x3a, 0x29, 0x4c, 0x70, 0xb7, 0xc5, 0x6a, 0x91, + 0x7d, 0xb4, 0x1f, 0x98, 0xb9, 0x95, 0x15, 0xf1, 0x64, 0x83, 0xe3, 0xaa, 0xfa, 0x55, 0x27, 0xf4, + 0xe0, 0x59, 0xc8, 0x57, 0xe5, 0x9c, 0x40, 0x73, 0x40, 0x86, 0xce, 0x27, 0x44, 0x72, 0x96, 0x4f, + 0x38, 0x30, 0x36, 0x0b, 0x1c, 0x85, 0x88, 0x29, 0x1b, 0xe0, 0x47, 0xb6, 0x5d, 0x21, 0x9b, 0xd2, + 0xc4, 0x71, 0x53, 0xdc, 0x2b, 0x64, 0x92, 0x88, 0x09, 0x4a, 0xf5, 0xce, 0xfa, 0x38, 0x67, 0x4f, + 0xa8, 0x07, 0x4d, 0xa0, 0xbb, 0xa8, 0xc4, 0x3d, 0x22, 0xe3, 0xed, 0xf5, 0xe2, 0x81, 0x49, 0xfb, + 0x3b, 0x71, 0x46, 0xbf, 0x6e, 0xc3, 0x54, 0x27, 0x3f, 0xec, 0x9f, 0x8d, 0xb9, 0x22, 0xd7, 0xf0, + 0x01, 0xe3, 0x33, 0xd1, 0xa2, 0x66, 0x2f, 0xd9, 0x9f, 0x0b, 0x84, 0x11, 0x3c, 0xa7, 0x42, 0x1d, + 0x70, 0xf4, 0x52, 0x1a, 0x95, 0xe0, 0xdd, 0x92, 0x92, 0x49, 0x12, 0x36, 0x4d, 0x4c, 0x62, 0xdc, + 0xa3, 0x7b, 0x06, 0x07, 0xe1, 0x89, 0x0c, 0x12, 0xdf, 0xc6, 0xbb, 0x50, 0xf8, 0x85, 0x8f, 0x04, + 0xbd, 0x1c, 0x82, 0xb8, 0x8c, 0x87, 0x77, 0xef, 0x08, 0x1a, 0xfc, 0x60, 0x69, 0xdc, 0x93, 0x17, + 0x54, 0x27, 0xd0, 0x94, 0x25, 0x01, 0x91, 0x65, 0x32, 0xbd, 0xec, 0x25, 0xf8, 0x9b, 0xf6, 0xfd, + 0x1e, 0x9f, 0xfc, 0x2e, 0xd2, 0x63, 0x14, 0x61, 0xee, 0x66, 0x07, 0x7c, 0xf0, 0xe0, 0x1d, 0x3b, + 0x0b, 0xe4, 0x70, 0x37, 0x36, 0x82, 0x97, 0x2f, 0xb1, 0x54, 0x3c, 0x36, 0xc0, 0x32, 0x76, 0xf8, + 0x7a, 0xfd, 0x4b, 0x3d, 0xcb, 0xd7, 0xbc, 0x8c, 0x3a, 0xa3, 0x0e, 0x06, 0x46, 0xaa, 0x3b, 0x3f, + 0x7e, 0xd6, 0x54, 0x50, 0xfb, 0x54, 0x05, 0x0f, 0x13, 0xd1, 0xbb, 0xa3, 0x6c, 0xa7, 0xe2, 0xf7, + 0xfc, 0x9f, 0x7f, 0xd2, 0xe0, 0x49, 0x7a, 0x6a, 0x06, 0xca, 0xe1, 0xaf, 0x5b, 0x54, 0xa0, 0x97, + 0x38, 0xb8, 0x13, 0x6b, 0x73, 0x93, 0xc7, 0x3b, 0x38, 0x31, 0xe4, 0x95, 0x5e, 0xb1, 0xe9, 0x5e, + 0x74, 0x8a, 0x09, 0x49, 0xe7, 0x60, 0xa8, 0xff, 0xe9, 0x67, 0x77, 0xbf, 0xd8, 0x6b, 0xa8, 0xe0, + 0x35, 0x94, 0xff, 0xb9, 0x03, 0x3a, 0x73, 0x0d, 0x1f, 0xea, 0x22, 0x3d, 0xa0, 0x9e, 0x90, 0xf0, + 0xc0, 0xbc, 0x20, 0x05, 0xda, 0x4a, 0x48, 0xc1, 0x78, 0x53, 0xde, 0x6f, 0xa0, 0x92, 0xcb, 0x95, + 0xea, 0xb4, 0xb0, 0x9f, 0x9f, 0x0d, 0xe6, 0xd3, 0xef, 0x3a, 0x47, 0xf2, 0xd3, 0x45, 0xf9, 0x83, + 0x22, 0xb9, 0x40, 0x3e, 0xfb, 0xf2, 0x72, 0x38, 0x7f, 0x1c, 0xcc, 0xa7, 0xdf, 0x3d, 0x0e, 0xe7, + 0xf7, 0xc2, 0xf9, 0xc5, 0x3a, 0x06, 0x5c, 0xdb, 0xa9, 0x86, 0xfb, 0xc1, 0x09, 0x9c, 0x0e, 0x78, + 0xaa, 0xe0, 0xc8, 0x1e, 0xaa, 0x09, 0xfc, 0xb4, 0xbc, 0x40, 0x04, 0x4d, 0x40, 0x85, 0x06, 0x54, + 0x3b, 0x81, 0x07, 0x26, 0x49, 0x2e, 0xd8, 0x52, 0xe9, 0x7e, 0xb5, 0x3d, 0xb8, 0x52, 0xc6, 0x1c, + 0x16, 0xf2, 0x8e, 0x01, 0xb2, 0x13, 0x83, 0xde, 0xe1, 0x31, 0xe7, 0x2d, 0x72, 0x16, 0x2b, 0xca, + 0xe1, 0xf4, 0xb0, 0x8e, 0x53, 0xd6, 0xe5, 0xf1, 0x1f, 0xa2, 0xe0, 0x89, 0x9b, 0x9f, 0xee, 0x75, + 0x48, 0xc0, 0xb9, 0xde, 0x5c, 0x43, 0x36, 0xa7, 0x55, 0x50, 0xc2, 0xc5, 0x77, 0xcc, 0x39, 0x0b, + 0xc9, 0x0b, 0x78, 0xc2, 0x4a, 0xc0, 0x66, 0x68, 0x1f, 0xaf, 0xdc, 0xe4, 0x5f, 0xd1, 0x6f, 0xa2, + 0x1b, 0x74, 0x33, 0xd7, 0xb1, 0x24, 0x7e, 0x9b, 0xe3, 0xb7, 0x42, 0x24, 0xf5, 0x0a, 0x12, 0x5b, + 0x96, 0x95, 0x40, 0x20, 0x49, 0xef, 0x6c, 0xc8, 0x2f, 0xf7, 0x28, 0x15, 0xac, 0xa2, 0x51, 0x0a, + 0x05, 0x8e, 0x53, 0x99, 0x18, 0x2b, 0x35, 0x71, 0xa0, 0x24, 0xdc, 0x59, 0x19, 0x73, 0x1d, 0x0d, + 0xff, 0xd5, 0x81, 0xc4, 0xa5, 0xe9, 0x79, 0xa2, 0x64, 0x3d, 0x78, 0xa4, 0x8d, 0x23, 0x7e, 0x44, + 0x08, 0x01, 0x36, 0x0e, 0x55, 0x4f, 0xf0, 0x69, 0x0f, 0x79, 0x76, 0x21, 0x94, 0x73, 0xc1, 0x6a, + 0x23, 0xd2, 0x01, 0xef, 0x2a, 0x5b, 0x45, 0x4e, 0x06, 0x83, 0x45, 0xc2, 0xc5, 0xd8, 0x89, 0xaf, + 0xe0, 0x45, 0xf2, 0xfe, 0xad, 0x1b, 0x7e, 0x1a, 0xce, 0x6a, 0x3c, 0x6f, 0x65, 0xbb, 0x37, 0x04, + 0x38, 0x4b, 0x66, 0x8d, 0xa3, 0xeb, 0x63, 0x3d, 0xdb, 0xf0, 0x66, 0x1b, 0x1e, 0x84, 0x00, 0xda, + 0x37, 0xe8, 0x28, 0x84, 0x25, 0x0b, 0x1d, 0x7a, 0x27, 0x1f, 0x4f, 0xbf, 0x80, 0x75, 0x98, 0x74, + 0xaf, 0x6f, 0x71, 0x0e, 0x7b, 0xb1, 0x2e, 0x8b, 0x75, 0xf2, 0xdd, 0x85, 0x07, 0x6b, 0x47, 0x2a, + 0x39, 0x67, 0xab, 0x9d, 0xda, 0xb0, 0x5d, 0xf9, 0x22, 0x09, 0x8a, 0xa0, 0x0b, 0x26, 0x28, 0x32, + 0xf5, 0x25, 0x09, 0xa6, 0x26, 0x93, 0x66, 0xf0, 0xf4, 0x00, 0x9e, 0x00, 0xcb, 0x40, 0x63, 0x7f, + 0xe0, 0xd9, 0x01, 0x81, 0x9d, 0x02, 0x13, 0x94, 0x06, 0x5e, 0x0d, 0x27, 0xe8, 0x0d, 0xbc, 0xf7, + 0xad, 0x4e, 0x97, 0x12, 0x00, 0xc4, 0x9b, 0x28, 0xb5, 0x92, 0x12, 0xe2, 0xe6, 0x84, 0xf0, 0x4b, + 0x9a, 0xac, 0x0f, 0x13, 0x18, 0x71, 0xb2, 0x9c, 0xa6, 0x2f, 0xa7, 0x51, 0x50, 0xce, 0xd0, 0x61, + 0x43, 0x5b, 0x59, 0xe7, 0x38, 0x1b, 0xbb, 0xd9, 0xc6, 0x62, 0x5a, 0x98, 0xa2, 0xca, 0x26, 0xd1, + 0xea, 0x52, 0x20, 0x3c, 0x06, 0x45, 0xaa, 0x3b, 0x64, 0x26, 0x36, 0x17, 0x9f, 0xd5, 0xc7, 0x56, + 0xe3, 0xb3, 0x3a, 0xc9, 0xc5, 0x17, 0x18, 0x89, 0x86, 0x49, 0xa3, 0xe2, 0x83, 0xc7, 0x27, 0x32, + 0x2e, 0x35, 0x29, 0x09, 0xf0, 0x66, 0x1b, 0x1a, 0xed, 0xe2, 0x5c, 0xda, 0x2b, 0xe1, 0x7d, 0xbd, + 0x0a, 0xfe, 0xd1, 0x17, 0x49, 0xbc, 0x39, 0x78, 0xf1, 0xfb, 0xaf, 0xe4, 0xc2, 0xb9, 0x43, 0xc4, + 0x0f, 0x82, 0xab, 0x71, 0xd1, 0xcb, 0x86, 0xf1, 0x4b, 0x11, 0xe8, 0xbe, 0x12, 0xf0, 0x62, 0xba, + 0x17, 0x5d, 0xa1, 0x97, 0x4f, 0xd5, 0x7f, 0x85, 0x99, 0x6d, 0x79, 0xaa, 0xd2, 0x7b, 0x4a, 0x40, + 0x04, 0xe1, 0xe2, 0x24, 0x48, 0xa1, 0x0b, 0x4b, 0x22, 0x53, 0x94, 0x69, 0x23, 0xa8, 0xa4, 0xd0, + 0x4f, 0x8e, 0x38, 0x8e, 0x3c, 0xba, 0x0d, 0x89, 0x56, 0x07, 0x5e, 0x57, 0x82, 0x5b, 0x33, 0x54, + 0xba, 0x4b, 0x34, 0x06, 0x9f, 0xe6, 0x81, 0xde, 0x81, 0x4e, 0x24, 0x29, 0xf5, 0x8d, 0xff, 0xb6, + 0xd0, 0xb5, 0x16, 0xb3, 0x40, 0x7e, 0x9b, 0x6b, 0x0b, 0x7a, 0x45, 0x71, 0x32, 0x66, 0xbf, 0x08, + 0xbb, 0xa4, 0x3b, 0xfb, 0x45, 0x1f, 0xed, 0xbc, 0xc4, 0x6c, 0x28, 0xd1, 0xea, 0x01, 0x57, 0x07, + 0xe2, 0xa5, 0xd1, 0x23, 0x34, 0x78, 0x42, 0x8e, 0x5f, 0xde, 0x28, 0xa2, 0x15, 0x96, 0x8d, 0xc2, + 0x48, 0xff, 0xbd, 0x4f, 0x12, 0x2e, 0x5b, 0x95, 0xde, 0x61, 0x41, 0x67, 0x27, 0x11, 0xaf, 0x6d, + 0x71, 0xf7, 0x04, 0x7d, 0x1b, 0xd3, 0x33, 0x99, 0x3c, 0x63, 0x13, 0x0d, 0x30, 0xdf, 0x42, 0xf2, + 0x06, 0xaa, 0x83, 0xfd, 0x40, 0x69, 0x60, 0x4d, 0x14, 0xe7, 0xa6, 0x89, 0x2e, 0x5e, 0x68, 0x97, + 0xcf, 0xd5, 0x9c, 0x29, 0xbf, 0xdf, 0xbe, 0xca, 0xe7, 0xf8, 0x3a, 0x4b, 0xcd, 0x87, 0x52, 0xb7, + 0xda, 0x5e, 0x46, 0x21, 0x92, 0x91, 0x77, 0x33, 0x8a, 0xe1, 0x8c, 0x96, 0x9b, 0x51, 0x09, 0x36, + 0x50, 0xc9, 0x95, 0x4a, 0xbc, 0xc3, 0x79, 0xfc, 0x4e, 0xe0, 0x5a, 0x8f, 0x8e, 0x16, 0xba, 0x1b, + 0x84, 0xc7, 0x1d, 0x13, 0x7a, 0x9a, 0x1f, 0xd3, 0x77, 0x40, 0xb1, 0x31, 0x6a, 0xec, 0x79, 0x79, + 0xb9, 0x62, 0x5f, 0x9c, 0xa1, 0x77, 0xc5, 0x33, 0x51, 0x03, 0x4c, 0xa7, 0xe1, 0x1f, 0x50, 0x67, + 0x50, 0x76, 0x80, 0xca, 0x85, 0x25, 0x92, 0x9e, 0xfd, 0x86, 0x81, 0x71, 0x4e, 0xe2, 0x5f, 0x50, + 0xd8, 0x5c, 0x30, 0x54, 0x9e, 0x4a, 0x2c, 0x55, 0xf3, 0x0f, 0xe6, 0xc4, 0xee, 0xb2, 0x7a, 0x07, + 0x87, 0x61, 0x39, 0x37, 0x82, 0x5b, 0x55, 0xde, 0x4d, 0x85, 0xce, 0xd5, 0x2b, 0xdf, 0x9c, 0x43, + 0xe1, 0x4e, 0xc9, 0x6f, 0xec, 0xfc, 0x30, 0x23, 0x8a, 0x94, 0x0c, 0x9c, 0x21, 0x16, 0x7e, 0x41, + 0x32, 0x1d, 0x4a, 0x89, 0xde, 0xb6, 0x08, 0x79, 0x78, 0x61, 0x86, 0xc2, 0xf4, 0x7a, 0x09, 0xcf, + 0x21, 0xec, 0xf0, 0x17, 0x19, 0x3c, 0xad, 0xe4, 0x9c, 0x6b, 0x51, 0xf0, 0x3c, 0xaa, 0x9a, 0x4a, + 0x2d, 0xa0, 0x7b, 0x72, 0xf7, 0xbb, 0xb8, 0x63, 0x81, 0x22, 0x11, 0xfa, 0x68, 0x18, 0xde, 0x67, + 0x01, 0xf2, 0x1e, 0x7d, 0x5a, 0x72, 0x9a, 0xaf, 0x89, 0x34, 0x9c, 0x2e, 0x81, 0xc5, 0x2e, 0x74, + 0x4e, 0xc7, 0x7b, 0x37, 0xfc, 0xaf, 0x0a, 0x71, 0x3d, 0x94, 0x14, 0x69, 0x54, 0xf4, 0xd0, 0x12, + 0xf1, 0x1c, 0x61, 0x81, 0x68, 0xde, 0x16, 0x3b, 0xee, 0xe0, 0xd5, 0xa9, 0x61, 0x84, 0x26, 0x25, + 0xd7, 0x82, 0x16, 0xd4, 0xe8, 0xa6, 0x5b, 0x24, 0xe0, 0x52, 0x0b, 0x2d, 0xb9, 0x56, 0xf8, 0x30, + 0xbd, 0xf3, 0x4d, 0xa1, 0x4f, 0x9e, 0xa2, 0x67, 0xdf, 0x64, 0xfa, 0xcc, 0x21, 0x7a, 0xef, 0xbe, + 0x97, 0x91, 0x2a, 0xd3, 0xef, 0xbc, 0x60, 0x63, 0x1c, 0xb6, 0xc6, 0xe1, 0xda, 0xcd, 0xae, 0xde, + 0x8a, 0x3d, 0x5d, 0x1f, 0xf7, 0x01, 0x41, 0x21, 0xcc, 0x90, 0x6e, 0x40, 0xa6, 0x40, 0x3e, 0xb8, + 0x59, 0x60, 0xe9, 0xee, 0x38, 0xea, 0x39, 0x60, 0xeb, 0x36, 0xbb, 0x24, 0x8f, 0x38, 0xab, 0x72, + 0xdd, 0x0b, 0x21, 0x95, 0x90, 0xc2, 0xd8, 0xce, 0x67, 0x43, 0x50, 0xf1, 0xa8, 0x36, 0xce, 0x05, + 0xd0, 0xb4, 0x57, 0xde, 0x78, 0x6f, 0xd3, 0x80, 0x56, 0xf7, 0xa6, 0xb7, 0x7b, 0x14, 0x75, 0xf4, + 0xd6, 0xf2, 0x3e, 0x9f, 0x74, 0xa7, 0x16, 0x49, 0x0f, 0x24, 0xab, 0x69, 0xdb, 0xa6, 0x02, 0x0c, + 0x09, 0xb9, 0x43, 0x69, 0xca, 0x27, 0x61, 0x7a, 0x4a, 0x6e, 0x12, 0x3d, 0xd9, 0xc8, 0x6c, 0xd9, + 0x1a, 0x2c, 0x9d, 0xee, 0xc5, 0x5d, 0xc1, 0x93, 0x19, 0x34, 0x33, 0x63, 0x25, 0xeb, 0xda, 0x77, + 0x7a, 0x5f, 0x14, 0x4c, 0xa2, 0x1c, 0xd3, 0x12, 0xd4, 0xc6, 0xd2, 0x75, 0xf7, 0x55, 0x76, 0xdb, + 0x3d, 0xbb, 0x0f, 0xae, 0xd3, 0x4f, 0x52, 0xfe, 0xf9, 0xdd, 0x4d, 0xe8, 0x6e, 0x95, 0x9c, 0x94, + 0xe4, 0xaf, 0xfa, 0xaa, 0x9b, 0x55, 0xd5, 0x85, 0x7b, 0x10, 0x30, 0x40, 0xb6, 0x55, 0x14, 0xf4, + 0xae, 0x42, 0x65, 0x5f, 0xf0, 0x66, 0x84, 0x93, 0x1c, 0x9b, 0xc1, 0xd3, 0x08, 0x5d, 0x63, 0xdd, + 0xbf, 0x39, 0x3c, 0x70, 0x19, 0x20, 0xbd, 0xf9, 0x3b, 0xcd, 0xbe, 0x31, 0xf6, 0x77, 0x9b, 0x8c, + 0xbb, 0x99, 0x2f, 0xf0, 0x89, 0x71, 0xe7, 0xce, 0xb9, 0x08, 0xe3, 0xa0, 0x0b, 0x8a, 0x5e, 0xb5, + 0x27, 0xfa, 0x77, 0xbe, 0x32, 0xd7, 0x0a, 0x41, 0xef, 0x8b, 0xcb, 0x44, 0x6c, 0x24, 0x63, 0x1c, + 0x30, 0x24, 0xe0, 0xa3, 0x11, 0xb4, 0xf8, 0x12, 0xbe, 0x7f, 0x66, 0x79, 0xaf, 0xcb, 0xaa, 0xd1, + 0xab, 0xd8, 0xb4, 0x2d, 0x2b, 0x10, 0xd0, 0xeb, 0x81, 0x7e, 0xfa, 0x85, 0x3a, 0x4f, 0x08, 0x16, + 0x26, 0xe9, 0x8d, 0x08, 0x02, 0xa0, 0xf3, 0x45, 0x1a, 0x14, 0xba, 0xa1, 0x14, 0xbd, 0x07, 0x49, + 0x32, 0x53, 0xb7, 0x86, 0xaf, 0xed, 0xa7, 0x23, 0x10, 0x46, 0x86, 0xff, 0xba, 0xc7, 0xee, 0x29, + 0x56, 0xac, 0xf3, 0x24, 0xda, 0xc5, 0xdb, 0x0d, 0xea, 0x6a, 0x4e, 0xb2, 0x31, 0x64, 0xeb, 0xb7, + 0x08, 0xe6, 0x15, 0xfb, 0x50, 0x91, 0x84, 0xc7, 0x5f, 0xf0, 0x8b, 0x07, 0x0a, 0x9e, 0xec, 0x74, + 0xb2, 0xb3, 0x82, 0x42, 0xb3, 0xe9, 0x2f, 0xcb, 0xd6, 0xe9, 0x03, 0x85, 0x84, 0xcf, 0x90, 0xe9, + 0x7a, 0xa7, 0xb6, 0xb2, 0x82, 0xe9, 0x67, 0xa6, 0xe8, 0x5b, 0x20, 0x5b, 0x90, 0x37, 0x37, 0xe5, + 0x15, 0x8e, 0x36, 0x63, 0x73, 0xd3, 0x58, 0x91, 0xd5, 0xdd, 0xdc, 0xec, 0xae, 0xf4, 0x8b, 0x30, + 0x0d, 0x34, 0x02, 0x38, 0x5c, 0x24, 0x0a, 0x3b, 0x92, 0x1b, 0x01, 0x1f, 0x74, 0xa5, 0x30, 0x11, + 0xe3, 0x8d, 0xbd, 0xe4, 0xf2, 0x43, 0x40, 0x27, 0x55, 0x56, 0x72, 0x80, 0x0d, 0x1c, 0x50, 0x57, + 0xff, 0x68, 0xe8, 0x5b, 0xcc, 0x01, 0x1b, 0x1e, 0x4a, 0xdc, 0x32, 0xf8, 0x45, 0x07, 0x07, 0x58, + 0x04, 0x77, 0x38, 0xa0, 0xd8, 0x76, 0x16, 0x96, 0xfc, 0xcd, 0x4d, 0x73, 0x75, 0x67, 0x03, 0x97, + 0x53, 0x7b, 0xe6, 0x6b, 0xd8, 0x60, 0xfa, 0x45, 0x0d, 0xa6, 0x1f, 0x01, 0xad, 0xd1, 0x8f, 0x82, + 0x5a, 0xf0, 0x3f, 0x59, 0x93, 0x36, 0x33, 0xb7, 0xac, 0x15, 0xe6, 0x16, 0xd5, 0xb4, 0x9c, 0x25, + 0xe8, 0x96, 0x4c, 0x6d, 0x41, 0x0b, 0xa1, 0x4e, 0x23, 0x32, 0x01, 0x90, 0x46, 0x2f, 0x8d, 0xf6, + 0xbc, 0x2c, 0xff, 0xf3, 0xff, 0xf9, 0xff, 0xd0, 0xc9, 0xb2, 0xa3, 0xad, 0x44, 0xbf, 0xa6, 0xad, + 0x70, 0xa1, 0x2e, 0x98, 0x77, 0x8b, 0xaa, 0xf2, 0x6b, 0x1c, 0xb1, 0x2e, 0x02, 0xb6, 0xf1, 0x2b, + 0xe4, 0xdc, 0xa5, 0x32, 0xad, 0xdf, 0xe0, 0x9d, 0x3b, 0xd9, 0x92, 0xd4, 0x09, 0xa4, 0x6e, 0x67, + 0x77, 0xfa, 0xf4, 0xd6, 0x41, 0xd0, 0x9e, 0x2c, 0xbe, 0x96, 0x65, 0x2b, 0x39, 0x14, 0xcb, 0xd2, + 0xe8, 0x09, 0x98, 0xd5, 0xb0, 0x9e, 0x7c, 0x09, 0xf5, 0xac, 0x6f, 0x02, 0x64, 0x26, 0xde, 0x47, + 0xf1, 0x53, 0x9e, 0x96, 0x70, 0xd9, 0xa0, 0xb7, 0x42, 0x70, 0x18, 0x5d, 0xaf, 0x0c, 0x3a, 0x5e, + 0x46, 0xd0, 0xec, 0xa8, 0xe1, 0x9c, 0xc1, 0x1e, 0xfc, 0xaf, 0xe2, 0xbe, 0x6d, 0xbb, 0x6d, 0x23, + 0x5d, 0xf3, 0x7e, 0x3f, 0x05, 0x85, 0x24, 0x16, 0x60, 0x42, 0x12, 0x0f, 0x56, 0xe2, 0x80, 0x02, + 0xb9, 0x6c, 0xd9, 0xee, 0x68, 0x6d, 0xc7, 0xd1, 0x58, 0xee, 0x76, 0xbc, 0x34, 0x5a, 0x2d, 0x8a, + 0x04, 0x25, 0x8c, 0x41, 0x80, 0x01, 0xa0, 0x83, 0x43, 0x71, 0xbf, 0xc0, 0x3c, 0xc1, 0xde, 0x37, + 0x73, 0x35, 0x37, 0x73, 0x31, 0x97, 0xf3, 0x00, 0xf3, 0x44, 0xf3, 0x08, 0xf3, 0x1f, 0xaa, 0x0a, + 0x55, 0x38, 0x50, 0x54, 0x9c, 0xee, 0x9d, 0xd5, 0x6d, 0x11, 0x85, 0x3a, 0xa3, 0xea, 0xaf, 0xaa, + 0xbf, 0xfe, 0xff, 0xfb, 0x78, 0x0d, 0x98, 0x04, 0xa8, 0x71, 0xdf, 0xb3, 0xaf, 0xdb, 0x33, 0x38, + 0x15, 0x0a, 0xea, 0x9a, 0x2b, 0x3c, 0x2f, 0x5e, 0x0f, 0xbb, 0xf7, 0xf7, 0xb3, 0x61, 0x87, 0xd4, + 0xd9, 0xb0, 0xad, 0x68, 0xc1, 0x2e, 0xfe, 0x6a, 0xd5, 0xba, 0x09, 0xd3, 0xfc, 0x7a, 0x1c, 0x39, + 0x70, 0x56, 0x21, 0x05, 0x9f, 0x9c, 0xcb, 0x1c, 0xcb, 0x6a, 0x9d, 0x22, 0x70, 0xc2, 0xe2, 0xac, + 0xd4, 0x53, 0x30, 0x0e, 0x0d, 0x74, 0xbf, 0x4b, 0x04, 0xbc, 0xaa, 0x57, 0x10, 0xf2, 0xde, 0x83, + 0xef, 0xa6, 0x90, 0x16, 0xbe, 0xac, 0x2f, 0x26, 0x0b, 0x72, 0xa1, 0x5b, 0x96, 0x9a, 0x62, 0xa9, + 0x61, 0xde, 0x30, 0x7e, 0x21, 0xa3, 0x2b, 0xa5, 0xb3, 0x0e, 0x52, 0x1e, 0x95, 0xdc, 0x71, 0x81, + 0x92, 0x13, 0xda, 0x61, 0xc1, 0x13, 0x64, 0x76, 0x38, 0xfb, 0x47, 0x84, 0x6d, 0x2b, 0xb3, 0xd4, + 0x37, 0xd9, 0xda, 0x32, 0xdf, 0x7c, 0x22, 0x7d, 0x51, 0xde, 0x94, 0xf0, 0x53, 0x91, 0x32, 0x6b, + 0x88, 0x13, 0xc8, 0x28, 0x3b, 0x4d, 0x65, 0xc6, 0x4d, 0x29, 0x3f, 0x35, 0x24, 0xd5, 0x4a, 0x8d, + 0xfc, 0xe0, 0xe9, 0x0c, 0xce, 0x85, 0x39, 0xfc, 0x8b, 0x3b, 0x20, 0x76, 0x98, 0xef, 0x80, 0xe0, + 0xef, 0x28, 0x1d, 0x01, 0xee, 0xdd, 0xa3, 0x83, 0xd2, 0xfd, 0x8e, 0x3c, 0x56, 0x2b, 0x4d, 0x44, + 0x68, 0xa3, 0xf3, 0x48, 0xbb, 0xed, 0x24, 0x3c, 0xc4, 0x40, 0xf2, 0xda, 0xb0, 0xe1, 0x6a, 0x67, + 0xb8, 0x8a, 0xa8, 0x90, 0xd4, 0xcd, 0xdb, 0x31, 0x09, 0x81, 0xc9, 0x38, 0xbe, 0x19, 0x67, 0xc7, + 0x41, 0xf0, 0x59, 0x9c, 0xd6, 0xd5, 0x33, 0x5e, 0xba, 0x4c, 0xf2, 0x3b, 0xfe, 0x28, 0x13, 0xfd, + 0xad, 0xf4, 0xb9, 0x01, 0x51, 0x84, 0xcc, 0x58, 0x93, 0x5d, 0xda, 0x37, 0xc5, 0x78, 0x33, 0x6d, + 0x5b, 0x3d, 0xa4, 0x25, 0x58, 0x40, 0x7a, 0x2d, 0x6b, 0x67, 0x85, 0x0d, 0x10, 0x0b, 0x54, 0x91, + 0x1a, 0xd6, 0x28, 0xae, 0x11, 0x9c, 0xa2, 0x77, 0x7f, 0x7c, 0xfe, 0x54, 0x60, 0x96, 0xd3, 0x40, + 0x25, 0x63, 0x28, 0xb7, 0xdf, 0x79, 0x9a, 0xc0, 0x98, 0xf4, 0x93, 0x61, 0x3a, 0xea, 0x7a, 0xc9, + 0x5e, 0x8a, 0x05, 0xee, 0x72, 0xc6, 0xbb, 0xe4, 0xc2, 0xe6, 0xdb, 0xd3, 0xdd, 0x84, 0x0c, 0x9c, + 0x28, 0xc5, 0xf0, 0x79, 0xa7, 0x33, 0x5a, 0x78, 0x7d, 0xd8, 0x7c, 0x3e, 0xbd, 0x74, 0xb5, 0xc8, + 0xec, 0x01, 0xe7, 0x97, 0x93, 0xef, 0x25, 0x4f, 0x53, 0xb7, 0xa8, 0xa8, 0xc8, 0xb3, 0x1c, 0x4b, + 0x8f, 0x51, 0xcd, 0x88, 0x43, 0xb8, 0x30, 0xdc, 0x04, 0xbf, 0x47, 0xc8, 0x45, 0xa4, 0x25, 0xab, + 0x66, 0x53, 0x4e, 0xc4, 0xd2, 0xe0, 0x1a, 0x64, 0x48, 0xb5, 0x62, 0xee, 0x95, 0x7f, 0x7a, 0x8a, + 0x1b, 0x46, 0xc8, 0x8a, 0xb9, 0xe2, 0xf0, 0xb7, 0x60, 0x3c, 0x83, 0xdf, 0xc8, 0xca, 0x46, 0x6f, + 0x8b, 0xdf, 0xdd, 0xef, 0x39, 0x06, 0xfe, 0xe6, 0xd8, 0x65, 0x15, 0xd3, 0xc3, 0xc3, 0x07, 0xa4, + 0x15, 0xa9, 0x9f, 0xd6, 0xc7, 0xc4, 0xb5, 0xca, 0xc6, 0x3a, 0xe3, 0xcc, 0xa6, 0x9e, 0xf7, 0xfb, + 0xd4, 0x3c, 0x10, 0x40, 0xc9, 0xe7, 0xe0, 0x44, 0x50, 0x87, 0x22, 0x83, 0x92, 0xa5, 0x85, 0x53, + 0xd7, 0xc0, 0xc4, 0x76, 0x33, 0x18, 0xe8, 0xf1, 0xd3, 0x99, 0xd0, 0x85, 0xdd, 0xd4, 0x4d, 0x9d, + 0xa0, 0x8d, 0x8a, 0x5b, 0x35, 0x45, 0xe6, 0x0d, 0x71, 0xd0, 0x4e, 0x44, 0x45, 0x3a, 0x6a, 0x88, + 0x84, 0x46, 0x1b, 0x2a, 0xd2, 0x85, 0x6f, 0xbc, 0x23, 0xad, 0xa2, 0x5c, 0x48, 0xdc, 0x6f, 0x4b, + 0x2f, 0x3f, 0x69, 0xef, 0x3e, 0x9b, 0xef, 0xe6, 0xa1, 0xf6, 0xee, 0xb6, 0xf4, 0x4e, 0x4f, 0x77, + 0x62, 0xbe, 0xcb, 0x17, 0xc5, 0xbb, 0x81, 0xd9, 0x87, 0x5d, 0xf7, 0xb3, 0xe8, 0x57, 0xf2, 0x34, + 0x3f, 0x86, 0xd9, 0x81, 0x20, 0xf6, 0xf0, 0x8c, 0x2b, 0xe8, 0x87, 0xc4, 0x8e, 0xda, 0xd9, 0x5e, + 0x0f, 0x45, 0x05, 0x87, 0x62, 0x4a, 0x3d, 0xb4, 0x8d, 0x7d, 0xaa, 0xf5, 0x37, 0x1c, 0xd1, 0xdc, + 0xdb, 0x07, 0x72, 0xc4, 0x54, 0x98, 0xba, 0x9c, 0x23, 0xe7, 0x57, 0xbc, 0x29, 0x72, 0xfc, 0xf6, + 0xe1, 0x3a, 0x3e, 0x7f, 0x3a, 0x6b, 0x77, 0x61, 0x33, 0x09, 0xff, 0x54, 0x6a, 0xfa, 0xbc, 0xb6, + 0xfe, 0xcf, 0xcd, 0xfa, 0x9b, 0x6f, 0x76, 0x28, 0xaf, 0x98, 0x7e, 0x94, 0x6b, 0x73, 0xf1, 0x50, + 0x6d, 0x38, 0xad, 0xa8, 0x92, 0x99, 0xbb, 0x7c, 0xd1, 0xd0, 0xf6, 0xda, 0x37, 0x3b, 0x45, 0x7e, + 0x35, 0xb5, 0x39, 0x79, 0xb0, 0xb7, 0xeb, 0xcb, 0xaa, 0xf4, 0xb2, 0xd8, 0xe5, 0xcd, 0xdb, 0x47, + 0xc5, 0x2a, 0xf8, 0x96, 0x75, 0x3a, 0x05, 0x7e, 0xb6, 0x06, 0x1d, 0xbb, 0xbf, 0xdf, 0xee, 0xee, + 0xc3, 0x61, 0x92, 0xb4, 0xbe, 0xb9, 0x54, 0x65, 0xb2, 0xb6, 0x13, 0xe2, 0x91, 0x6e, 0xdf, 0xe5, + 0x9f, 0x5d, 0xfc, 0xd9, 0xe2, 0xdf, 0x3d, 0xf8, 0xed, 0x9c, 0xd3, 0x82, 0x73, 0xa8, 0x2d, 0x36, + 0x21, 0x2a, 0x8a, 0x0e, 0xe2, 0x41, 0xd8, 0xf6, 0x73, 0x47, 0x06, 0xc2, 0x8a, 0x34, 0x48, 0x0e, + 0xb2, 0x41, 0xa2, 0x07, 0xf2, 0x9d, 0xe0, 0x9c, 0x2e, 0x03, 0x65, 0x18, 0x2e, 0x5b, 0x29, 0x84, + 0xa5, 0x28, 0x48, 0x30, 0x60, 0xe2, 0x27, 0xed, 0x14, 0x4e, 0x28, 0x61, 0x3b, 0xa7, 0x11, 0x3f, + 0x0b, 0xa3, 0x88, 0x65, 0xc4, 0x5b, 0xfb, 0xea, 0x34, 0xf8, 0xee, 0x4a, 0x88, 0x95, 0x33, 0xf7, + 0x70, 0x2f, 0x86, 0x83, 0xb0, 0x5b, 0xd7, 0x85, 0xe3, 0x74, 0x02, 0xfd, 0x35, 0xdb, 0xeb, 0xb5, + 0x27, 0xd4, 0x67, 0xf8, 0x6b, 0x0a, 0xbf, 0x76, 0x9f, 0xc1, 0x3f, 0x20, 0x06, 0x59, 0x29, 0x7d, + 0x7c, 0xc4, 0xb1, 0xb1, 0x08, 0x48, 0x78, 0xd8, 0x6e, 0x6b, 0xba, 0x59, 0x04, 0x70, 0x36, 0x2b, + 0xfe, 0xb0, 0x40, 0x04, 0x21, 0x8d, 0x6d, 0x83, 0xb5, 0xf2, 0x21, 0x91, 0xe8, 0x2c, 0xa9, 0x60, + 0x78, 0xeb, 0x5b, 0xcf, 0x90, 0x0e, 0xed, 0x05, 0x62, 0x78, 0x58, 0xae, 0xd9, 0x62, 0x2b, 0x61, + 0x6f, 0x41, 0x15, 0x8c, 0x9b, 0x6b, 0x3b, 0x77, 0xc5, 0x24, 0x96, 0xc3, 0xab, 0xa7, 0x0d, 0x57, + 0xce, 0xb2, 0xd7, 0x9c, 0x25, 0x0b, 0xda, 0x81, 0x76, 0x85, 0x5b, 0x72, 0x82, 0xb8, 0x61, 0xdf, + 0x87, 0x81, 0x51, 0x66, 0xe0, 0xca, 0xc9, 0xc1, 0x43, 0x79, 0xb5, 0xb2, 0x37, 0x90, 0xfa, 0x14, + 0xe5, 0xe7, 0x57, 0x86, 0x76, 0xca, 0x22, 0xf8, 0x84, 0xd6, 0xc7, 0xa7, 0x3f, 0xf9, 0x6f, 0x0f, + 0xbd, 0x96, 0xd5, 0x4e, 0x60, 0xc7, 0x7d, 0x07, 0x7f, 0x53, 0xf8, 0xeb, 0xe3, 0xf3, 0xd3, 0x54, + 0xec, 0x2d, 0x29, 0xa5, 0xb9, 0x49, 0x7c, 0xa8, 0xd0, 0xca, 0x8e, 0x53, 0x5e, 0xe8, 0x0f, 0xfd, + 0x0e, 0x1c, 0xdb, 0x60, 0x8f, 0x32, 0x82, 0xad, 0x35, 0x2a, 0xe9, 0x44, 0xb8, 0xbc, 0xb6, 0x37, + 0xae, 0xeb, 0xdf, 0xa5, 0xc6, 0x85, 0xbe, 0x0c, 0x6c, 0xbc, 0xd4, 0x97, 0x11, 0xf0, 0x62, 0xdf, + 0x25, 0x3d, 0xdb, 0x8b, 0x78, 0xfa, 0xfa, 0x2e, 0x98, 0xa0, 0x9a, 0x67, 0x1d, 0x85, 0x88, 0xe5, + 0x5e, 0xbb, 0xb6, 0x1c, 0x72, 0x85, 0x5f, 0xb2, 0x41, 0x59, 0x02, 0xfb, 0xcc, 0x8e, 0x1b, 0x57, + 0xaf, 0x80, 0xa0, 0x9f, 0x68, 0xf9, 0x55, 0x88, 0x7c, 0xf4, 0x4d, 0x43, 0xff, 0xd4, 0xfa, 0x12, + 0x44, 0x51, 0x72, 0x6b, 0xb9, 0x16, 0x03, 0xe3, 0xb8, 0x16, 0x6a, 0x72, 0x62, 0xc4, 0xc6, 0x94, + 0x03, 0xea, 0xcc, 0x9d, 0x34, 0x67, 0x38, 0xe1, 0x0c, 0x77, 0xba, 0x4e, 0x43, 0x04, 0x04, 0x30, + 0x5b, 0x9c, 0x06, 0x67, 0xd4, 0xa7, 0xf6, 0xe4, 0x54, 0x3e, 0x9f, 0xf9, 0x41, 0x39, 0xc9, 0xc4, + 0xb8, 0xa7, 0xe2, 0xb9, 0x34, 0x11, 0xf7, 0x65, 0x3b, 0xdd, 0x2d, 0x10, 0x0e, 0xa8, 0x6c, 0x51, + 0x03, 0x57, 0x2d, 0xc9, 0xb3, 0xbd, 0x3e, 0xf4, 0xcf, 0x03, 0x83, 0x58, 0x1c, 0xc8, 0x14, 0xf1, + 0x1e, 0xab, 0x80, 0x32, 0xee, 0xc5, 0xa9, 0x26, 0xa2, 0xb8, 0x2e, 0xe5, 0x78, 0x7a, 0xd5, 0xe0, + 0x74, 0x64, 0x4f, 0xdb, 0x95, 0xac, 0x10, 0xcc, 0x5b, 0x48, 0xe9, 0xa2, 0xf4, 0x10, 0xa4, 0x50, + 0x28, 0xa5, 0x90, 0xb3, 0xba, 0xf3, 0xf3, 0xef, 0x12, 0xf7, 0x4b, 0x51, 0xf7, 0x7c, 0x2f, 0x71, + 0xcc, 0x19, 0x9b, 0xb9, 0x2c, 0x8c, 0xee, 0x60, 0xf2, 0xec, 0xf6, 0x95, 0x44, 0xfa, 0x02, 0x92, + 0x7c, 0xc0, 0x77, 0x77, 0x81, 0x1f, 0xab, 0x83, 0x31, 0x48, 0x91, 0x60, 0xb8, 0x03, 0xf3, 0x27, + 0xa6, 0xfb, 0xfe, 0x09, 0x0c, 0x02, 0x17, 0xce, 0xac, 0x19, 0x88, 0x27, 0xb3, 0x41, 0xb1, 0xde, + 0x82, 0x3b, 0x1f, 0x6f, 0xbb, 0xcc, 0x9a, 0x60, 0x88, 0x5e, 0x19, 0xd1, 0x7b, 0x17, 0x48, 0xc0, + 0x69, 0x3d, 0x20, 0x38, 0xef, 0xf4, 0x6a, 0xae, 0x15, 0x9c, 0x83, 0x63, 0xbc, 0xd8, 0x32, 0xc7, + 0xb1, 0x49, 0xe3, 0xe0, 0x52, 0x0c, 0xc7, 0xf1, 0x8e, 0xed, 0x8a, 0xde, 0x0d, 0xb1, 0xf8, 0xf8, + 0x42, 0x70, 0x10, 0x48, 0x9e, 0x0f, 0x44, 0xed, 0xb3, 0x1c, 0xf3, 0x7e, 0x3b, 0x70, 0x6a, 0x49, + 0x14, 0xa4, 0x79, 0x8e, 0xa3, 0xa5, 0xce, 0xf2, 0xc7, 0xa7, 0xc6, 0x51, 0xa8, 0xb3, 0x6a, 0xa3, + 0xbd, 0x92, 0x09, 0xb6, 0x6f, 0xbc, 0x5e, 0x25, 0xe7, 0x0e, 0x82, 0x0e, 0xe4, 0x65, 0xed, 0x43, + 0x91, 0xa5, 0x6b, 0x37, 0xa5, 0xfd, 0x2d, 0xba, 0x38, 0x27, 0x82, 0x96, 0xe6, 0xc4, 0xab, 0x72, + 0x37, 0x21, 0x44, 0xec, 0x52, 0xc3, 0xa2, 0x3b, 0x4e, 0x6e, 0x03, 0x13, 0x8e, 0x0e, 0x29, 0xcc, + 0x47, 0x12, 0x93, 0x0e, 0xf9, 0x15, 0xb4, 0xd8, 0xef, 0x22, 0x23, 0x6a, 0x1c, 0xbd, 0x68, 0x8a, + 0x79, 0xf2, 0x25, 0x9e, 0x18, 0x71, 0x25, 0xdb, 0xb9, 0x91, 0x00, 0x55, 0xa8, 0xe2, 0x5e, 0x41, + 0x58, 0xec, 0x9d, 0x28, 0xa5, 0x51, 0x25, 0x48, 0xd8, 0x18, 0xd8, 0x1a, 0x95, 0x79, 0xd5, 0xce, + 0x4f, 0x68, 0x68, 0x5f, 0xa6, 0x21, 0x5a, 0xc8, 0x35, 0xbc, 0x3d, 0x41, 0x3c, 0x8e, 0x35, 0xef, + 0x8f, 0xf0, 0x3e, 0x30, 0x0b, 0xf3, 0x2f, 0x6b, 0xe2, 0x1c, 0x76, 0xd7, 0xbd, 0xec, 0xad, 0x7b, + 0xd9, 0xc7, 0x97, 0x92, 0xf6, 0xd5, 0x6e, 0x88, 0xf5, 0x7e, 0x4d, 0x0e, 0x7f, 0x59, 0xf3, 0xee, + 0x25, 0xe1, 0xc4, 0x16, 0x5c, 0xb2, 0x0d, 0xd1, 0x3e, 0x5a, 0x8e, 0xce, 0xed, 0xaa, 0x51, 0x6a, + 0xb2, 0x0d, 0xc6, 0x2d, 0x62, 0x1c, 0x54, 0x96, 0x4d, 0x99, 0x6d, 0xd9, 0x72, 0x8f, 0x93, 0x5c, + 0x8c, 0xa3, 0xba, 0x14, 0x87, 0x87, 0x1f, 0x6a, 0xe3, 0x5f, 0x05, 0x77, 0xb7, 0x95, 0xf8, 0x01, + 0xd2, 0x95, 0xd6, 0x46, 0x67, 0x82, 0xf5, 0xba, 0x02, 0xa8, 0x1f, 0x83, 0x5d, 0x8e, 0x50, 0x5f, + 0x54, 0x53, 0x6b, 0x98, 0x79, 0x77, 0x6d, 0xda, 0xec, 0x2b, 0xd2, 0xde, 0xac, 0x49, 0x5b, 0x9b, + 0xe0, 0xf3, 0xfa, 0xc2, 0xd6, 0xf4, 0x26, 0x6c, 0xbb, 0xd7, 0xa6, 0x0d, 0x90, 0x2a, 0xb5, 0x36, + 0xe5, 0x6f, 0x93, 0x6c, 0xe7, 0x76, 0x4d, 0x3a, 0x22, 0xb2, 0x2f, 0xa7, 0xd4, 0x00, 0x50, 0xc5, + 0x4f, 0x22, 0x23, 0x4a, 0xb3, 0xaa, 0x64, 0x2e, 0xcf, 0x5f, 0x83, 0x7e, 0xa4, 0x30, 0xf6, 0x71, + 0xab, 0x5a, 0xe1, 0x73, 0xe6, 0x93, 0xe2, 0x2b, 0x7e, 0x69, 0x79, 0x74, 0x76, 0xaa, 0xee, 0xff, + 0x03, 0x56, 0x2c, 0x67, 0xa4, 0x0f, 0xd6, 0xad, 0x84, 0xd9, 0x16, 0xa4, 0xaa, 0x64, 0xd6, 0x04, + 0x35, 0xd2, 0xa1, 0xaf, 0x15, 0xe5, 0x6e, 0xfe, 0xa0, 0x86, 0x9b, 0xcb, 0x47, 0x01, 0xbc, 0x59, + 0xcc, 0x66, 0x39, 0x2d, 0x2c, 0xa5, 0xeb, 0xac, 0x57, 0x10, 0xc0, 0x12, 0x77, 0xc1, 0xc1, 0xc1, + 0xf7, 0x4e, 0x64, 0xde, 0x4a, 0x95, 0x2e, 0x14, 0x82, 0x61, 0xef, 0xc9, 0x13, 0x02, 0x5f, 0x6e, + 0x8c, 0xb2, 0x4f, 0xe6, 0x78, 0x68, 0x93, 0xb3, 0xfe, 0x62, 0xa3, 0x65, 0x60, 0xed, 0x44, 0x8e, + 0xd5, 0x25, 0x3b, 0x00, 0x69, 0x03, 0x83, 0x31, 0x71, 0x68, 0xd4, 0xaa, 0xcc, 0x9b, 0xbe, 0x3f, + 0x8a, 0x74, 0x9d, 0x31, 0x44, 0x5e, 0x24, 0xb8, 0x78, 0x99, 0xba, 0xe6, 0xc3, 0xcf, 0xee, 0xf4, + 0x6f, 0x5e, 0xbe, 0x55, 0x40, 0xcb, 0xe4, 0xbc, 0xf2, 0xf1, 0xb3, 0x4a, 0x96, 0xc6, 0xc7, 0x17, + 0x23, 0x66, 0xdd, 0xd7, 0x97, 0xb4, 0x54, 0x17, 0x09, 0x2c, 0x67, 0x73, 0x46, 0x90, 0x17, 0xe3, + 0x2a, 0xf8, 0x23, 0x57, 0x1f, 0xb1, 0xb3, 0x8c, 0xd7, 0x2c, 0xf2, 0x88, 0x2e, 0x4c, 0x2a, 0xf0, + 0xe3, 0x71, 0x0a, 0xad, 0xce, 0x71, 0x26, 0x69, 0x6e, 0xe4, 0xe2, 0x66, 0x36, 0xa8, 0x31, 0x72, + 0xd3, 0x6d, 0xdb, 0xc4, 0x26, 0x90, 0xbf, 0x59, 0x85, 0x82, 0x3d, 0x59, 0xe4, 0x9a, 0x91, 0xe8, + 0x20, 0xd0, 0x6c, 0xd7, 0xc8, 0x22, 0xb3, 0x83, 0x9e, 0xeb, 0x97, 0x6f, 0xe7, 0xe3, 0xbb, 0xfb, + 0xfb, 0xae, 0xfa, 0x0d, 0x2f, 0xb6, 0xd0, 0x94, 0x13, 0x79, 0xcf, 0xfa, 0x67, 0xc5, 0xb5, 0x4b, + 0x87, 0x2c, 0x5b, 0x47, 0x0d, 0x83, 0xc0, 0x0b, 0x1a, 0x07, 0x98, 0x23, 0xae, 0x82, 0xe3, 0xcd, + 0xee, 0x80, 0xc2, 0xf2, 0x61, 0xad, 0x4a, 0x3b, 0x37, 0x0d, 0x6f, 0x4e, 0xcb, 0xc0, 0x1d, 0x92, + 0x78, 0x4e, 0xeb, 0x92, 0xd0, 0x19, 0x57, 0x6f, 0x8d, 0x9a, 0xeb, 0xe9, 0x05, 0x4d, 0x86, 0xce, + 0x8f, 0xa8, 0x91, 0xc4, 0x71, 0x78, 0xb0, 0x3a, 0xff, 0xfe, 0xbf, 0xb0, 0x3a, 0x4f, 0x9e, 0x68, + 0x61, 0xff, 0xf7, 0xff, 0xbc, 0xac, 0x54, 0x71, 0xb3, 0x2e, 0xd6, 0xb6, 0x7d, 0x42, 0x9e, 0xbf, + 0x47, 0x2e, 0x15, 0xd6, 0xe5, 0xf0, 0x72, 0x81, 0xcf, 0x35, 0xa8, 0xce, 0x12, 0x7c, 0x99, 0xec, + 0xd3, 0x61, 0x3b, 0x80, 0xb3, 0x5c, 0xf8, 0xb6, 0x43, 0x4d, 0x2c, 0x8a, 0x88, 0xe6, 0x15, 0x9f, + 0xec, 0xce, 0xe2, 0xce, 0x21, 0x98, 0x52, 0x15, 0xd2, 0xed, 0x74, 0xbe, 0x73, 0x2c, 0x35, 0xff, + 0xa2, 0x70, 0x31, 0xa2, 0x7f, 0x91, 0xd2, 0x4b, 0x99, 0x19, 0xa3, 0x0f, 0x44, 0xe6, 0x5b, 0xad, + 0x59, 0x9a, 0xcc, 0xe1, 0x94, 0x9e, 0x89, 0x33, 0x7a, 0x64, 0x82, 0x7d, 0x9d, 0x13, 0xb9, 0x67, + 0x98, 0xb5, 0xd2, 0x60, 0x12, 0x84, 0x44, 0x14, 0x83, 0xb5, 0x20, 0x87, 0xaa, 0x68, 0xbe, 0x22, + 0xe3, 0x34, 0xb4, 0xc5, 0x12, 0x96, 0x2b, 0xd4, 0x1a, 0x44, 0x29, 0xaa, 0xd9, 0x4f, 0x70, 0x7b, + 0xa8, 0x31, 0xa5, 0x45, 0x4c, 0xe3, 0x33, 0x9a, 0x2f, 0x8e, 0xd7, 0x28, 0xba, 0x02, 0x06, 0xb4, + 0x1f, 0x9d, 0x10, 0x46, 0xb8, 0x2d, 0x1e, 0x1d, 0x38, 0x5a, 0x4f, 0x5f, 0xc7, 0x53, 0xbb, 0x87, + 0x68, 0x67, 0x8e, 0x67, 0xfd, 0xfe, 0xbb, 0xd5, 0xe6, 0x97, 0x92, 0x16, 0x6a, 0x64, 0x1d, 0x40, + 0x61, 0x3e, 0x9c, 0xd1, 0x55, 0xd2, 0xce, 0x19, 0xa5, 0x23, 0xaf, 0x55, 0xbb, 0xef, 0xe2, 0x34, + 0x12, 0x9a, 0x33, 0x2a, 0xb2, 0x64, 0xf8, 0x94, 0x99, 0xec, 0x4d, 0xf3, 0xf1, 0xe7, 0xe0, 0xe3, + 0x09, 0x88, 0xd1, 0xdb, 0xec, 0xfe, 0x5e, 0x1d, 0x32, 0x6f, 0xb3, 0x83, 0xce, 0xfd, 0xbd, 0x6d, + 0xdf, 0x66, 0x44, 0xc0, 0xfb, 0x31, 0xb8, 0x38, 0x81, 0x56, 0x06, 0xb9, 0x6d, 0x0b, 0x62, 0xe0, + 0x35, 0xe4, 0xac, 0x23, 0xeb, 0x36, 0xcb, 0xa0, 0x8e, 0xb7, 0xc4, 0xbf, 0x46, 0x9a, 0x05, 0x52, + 0x34, 0xb0, 0x7a, 0xa1, 0x9c, 0xea, 0x2a, 0xc9, 0x72, 0x32, 0x22, 0x6a, 0x5b, 0x7b, 0x98, 0xc2, + 0x41, 0x3c, 0xdf, 0x71, 0xfa, 0xe5, 0x03, 0x99, 0xe7, 0x11, 0xb1, 0xe8, 0xc5, 0x35, 0x88, 0xb1, + 0xd4, 0x72, 0x6f, 0xb3, 0x5d, 0x04, 0x13, 0xcc, 0x32, 0xb4, 0xfe, 0x40, 0x93, 0x1b, 0x34, 0x86, + 0xb0, 0x59, 0xe6, 0x28, 0xab, 0x24, 0x98, 0x05, 0x64, 0x4c, 0xfa, 0x92, 0x12, 0x39, 0x75, 0x7a, + 0x0b, 0x4a, 0xe0, 0xb0, 0x5d, 0x2c, 0x81, 0xb3, 0x3a, 0x4b, 0x83, 0x33, 0x4f, 0x23, 0xba, 0x70, + 0x5c, 0xed, 0x81, 0x99, 0x7b, 0xb1, 0x8f, 0xfe, 0x4a, 0xab, 0x90, 0xe2, 0x26, 0x76, 0xcb, 0x66, + 0x43, 0x92, 0x68, 0x73, 0x53, 0x3a, 0xc4, 0x48, 0x8d, 0x71, 0x90, 0x9c, 0x08, 0xf6, 0x96, 0x8d, + 0xec, 0x02, 0xcd, 0x3d, 0x73, 0x8c, 0x53, 0x4d, 0x98, 0x61, 0xe8, 0x93, 0x27, 0x06, 0x22, 0x77, + 0x06, 0x47, 0x58, 0x0d, 0x2c, 0x4e, 0xee, 0x56, 0x88, 0xae, 0x68, 0x24, 0xfe, 0x7a, 0xf9, 0xc0, + 0x98, 0xba, 0x99, 0x1b, 0x23, 0xcb, 0x28, 0x8d, 0x1c, 0xd8, 0x44, 0xc5, 0x30, 0xc7, 0x57, 0xdc, + 0xc9, 0x93, 0x28, 0xc9, 0xb8, 0x8b, 0x1f, 0x4d, 0xeb, 0xe8, 0x6a, 0x50, 0xf5, 0x3c, 0xb6, 0xdc, + 0xee, 0x3e, 0x5a, 0x51, 0xdd, 0x32, 0xf3, 0xb1, 0x28, 0x01, 0xa9, 0x2c, 0xa9, 0x80, 0x34, 0xf8, + 0x2d, 0x7b, 0x1b, 0x5c, 0x8e, 0x23, 0x58, 0x68, 0x75, 0x9b, 0xa9, 0xa2, 0x5e, 0x92, 0x65, 0x12, + 0xbf, 0x97, 0xb4, 0x98, 0x62, 0xeb, 0xe1, 0x60, 0x37, 0xbb, 0x9e, 0x4c, 0x60, 0x40, 0xc8, 0xd0, + 0xce, 0x00, 0x8f, 0x9a, 0x3e, 0x7a, 0x4c, 0xba, 0xe5, 0xa3, 0x9b, 0x30, 0x02, 0x09, 0x10, 0xd4, + 0xcc, 0x85, 0x63, 0x26, 0xda, 0x20, 0x46, 0x18, 0x31, 0x8e, 0x5e, 0x5d, 0xa7, 0xfc, 0x34, 0xbd, + 0x4e, 0xe1, 0xf1, 0xc3, 0x58, 0x3c, 0xe6, 0x1c, 0xf5, 0xcd, 0x18, 0x79, 0x35, 0x31, 0x60, 0x06, + 0xbf, 0x5c, 0x79, 0xec, 0x84, 0xa0, 0xeb, 0xe9, 0x02, 0xd1, 0x45, 0xe2, 0xa9, 0x6b, 0x1c, 0xa3, + 0xd1, 0x24, 0x29, 0x22, 0x29, 0x0b, 0x33, 0x05, 0x7f, 0xbb, 0x39, 0xe6, 0x48, 0x72, 0x2d, 0xc4, + 0xd6, 0x71, 0xe5, 0xf2, 0x5c, 0xd5, 0x2a, 0x4f, 0x11, 0x1a, 0xbd, 0x06, 0x0e, 0x50, 0x0c, 0x0b, + 0x54, 0xb3, 0x75, 0x06, 0xbc, 0x81, 0x56, 0x47, 0x26, 0x71, 0x12, 0x22, 0x8a, 0x32, 0x5e, 0x58, + 0x35, 0xc5, 0x12, 0x2b, 0x86, 0xed, 0x02, 0xe2, 0x4f, 0xf7, 0x77, 0x81, 0xbe, 0x43, 0xd8, 0x1d, + 0x94, 0xc4, 0xf0, 0xfa, 0x34, 0x3f, 0x23, 0xf5, 0xaa, 0x42, 0x71, 0x21, 0x79, 0x8a, 0xa6, 0x12, + 0x5d, 0xe6, 0x5c, 0xa3, 0x18, 0xb0, 0x75, 0x80, 0xfd, 0xc6, 0x01, 0x0b, 0xdb, 0x1c, 0x6f, 0x8a, + 0x7b, 0x62, 0x0b, 0xa1, 0xa4, 0x06, 0x01, 0x1d, 0xa3, 0xc9, 0xc8, 0xe4, 0x54, 0xcb, 0xf8, 0x4c, + 0xd4, 0xfb, 0xde, 0xdf, 0xda, 0xb2, 0xbb, 0x4f, 0xa2, 0xe2, 0x28, 0x49, 0x21, 0x3d, 0x11, 0x02, + 0x2d, 0xa1, 0xe7, 0x67, 0x4f, 0x14, 0x70, 0xa0, 0x5d, 0x14, 0x9e, 0x27, 0x88, 0x69, 0xab, 0x9e, + 0x40, 0xd2, 0x39, 0x4f, 0xcd, 0xd7, 0x9f, 0x46, 0xe6, 0x63, 0x29, 0xfa, 0x27, 0xaf, 0x0b, 0x9b, + 0x34, 0xd1, 0x4d, 0xe2, 0xef, 0xc1, 0x78, 0x34, 0xf6, 0xc4, 0x6f, 0x65, 0x4c, 0x86, 0x89, 0x32, + 0xd2, 0x02, 0x22, 0xae, 0x10, 0x3a, 0xcf, 0xd4, 0xb5, 0x6f, 0xac, 0x35, 0xac, 0xd2, 0xae, 0x52, + 0xb3, 0x64, 0xab, 0x56, 0x38, 0x82, 0xc7, 0x92, 0x5a, 0x4b, 0x33, 0x54, 0x7c, 0x97, 0xb4, 0xe4, + 0x27, 0x17, 0xb6, 0x89, 0x85, 0x66, 0x05, 0x1e, 0x85, 0xf6, 0xb4, 0x6e, 0x27, 0x5f, 0x68, 0xdd, + 0xa4, 0xda, 0x6f, 0xa7, 0x3b, 0x08, 0x86, 0xa8, 0x83, 0xdb, 0xd9, 0x71, 0x42, 0xc3, 0x34, 0xdd, + 0x1f, 0xe3, 0x71, 0x1c, 0x82, 0x88, 0x70, 0xdd, 0x30, 0x4d, 0x2f, 0x5e, 0x75, 0x4b, 0xaf, 0x2e, + 0x8a, 0x57, 0xbd, 0x33, 0xd7, 0x56, 0x5f, 0xee, 0x7e, 0x4b, 0x3f, 0x41, 0x52, 0x18, 0xaa, 0x23, + 0x8d, 0xb4, 0xb7, 0x45, 0x5a, 0x64, 0x68, 0x87, 0xa0, 0xc3, 0x93, 0xb7, 0x14, 0x45, 0xf8, 0x30, + 0x2a, 0x56, 0xe6, 0x09, 0x0e, 0x2e, 0xa1, 0x33, 0x85, 0x34, 0x93, 0x1c, 0x37, 0x2d, 0xf0, 0x87, + 0xd5, 0xb8, 0xda, 0x4c, 0x7e, 0xa1, 0x66, 0x0c, 0xbd, 0x77, 0xdc, 0xaa, 0x0a, 0x46, 0xbd, 0xcf, + 0xee, 0xdc, 0x7a, 0x05, 0x8c, 0x8a, 0x11, 0x1a, 0x31, 0x50, 0xfd, 0x52, 0x64, 0xde, 0x1d, 0xe1, + 0x3f, 0x5e, 0xc7, 0x2d, 0xe9, 0x60, 0x8a, 0x18, 0x3d, 0x8c, 0xd1, 0x2b, 0xc5, 0xe8, 0xeb, 0x31, + 0xfa, 0x18, 0xa3, 0x2f, 0x63, 0xd0, 0x81, 0xe2, 0x97, 0xae, 0xee, 0xcc, 0xb9, 0x35, 0xde, 0x4d, + 0xba, 0xfa, 0xdb, 0x5e, 0xf9, 0x6d, 0x4f, 0x7f, 0xdb, 0x2f, 0xbf, 0xed, 0x23, 0x46, 0x2a, 0x2e, + 0x3b, 0xc4, 0x63, 0x22, 0x7e, 0xf3, 0x92, 0x47, 0x4c, 0x05, 0xd2, 0x26, 0x5c, 0xbe, 0x20, 0xc3, + 0xed, 0x6e, 0xc7, 0x83, 0x97, 0x85, 0x71, 0xec, 0x1c, 0xed, 0xd9, 0x5a, 0x33, 0x05, 0xc7, 0xbd, + 0x65, 0x0d, 0x2e, 0x40, 0xfa, 0x7e, 0x66, 0x33, 0xef, 0x6e, 0x17, 0x63, 0x23, 0xbd, 0x42, 0x10, + 0x27, 0xd7, 0x97, 0x57, 0xad, 0x6c, 0x31, 0x9e, 0x04, 0xc8, 0x54, 0x97, 0x21, 0x43, 0x20, 0xb3, + 0x98, 0x94, 0x92, 0xf4, 0x30, 0x89, 0x60, 0xd0, 0xc4, 0x12, 0x84, 0x6d, 0xb1, 0x11, 0xa7, 0x8f, + 0x71, 0x7e, 0x0e, 0xb3, 0x0c, 0x37, 0x62, 0x61, 0xca, 0x24, 0xe1, 0x66, 0x94, 0x1f, 0x31, 0xca, + 0x0b, 0xad, 0x66, 0x2d, 0x6a, 0x46, 0x0b, 0x06, 0x5c, 0x2b, 0x99, 0x80, 0xc4, 0x45, 0xb3, 0xe6, + 0x95, 0x36, 0x8f, 0x68, 0x05, 0x66, 0x94, 0x58, 0xfc, 0x05, 0x9b, 0x0f, 0xbc, 0xb4, 0x21, 0x5b, + 0x14, 0x39, 0xe9, 0x0a, 0xc5, 0x01, 0x7c, 0x20, 0x38, 0xff, 0xbb, 0xc5, 0x89, 0x08, 0x02, 0x66, + 0x77, 0x6e, 0xc9, 0x15, 0xc8, 0x9c, 0x89, 0x1a, 0xe9, 0x6f, 0xcd, 0xe1, 0x4a, 0x90, 0x73, 0x6e, + 0xea, 0x96, 0xa7, 0xdb, 0x6d, 0xe6, 0x15, 0xf7, 0x3c, 0x37, 0x2b, 0x82, 0xc8, 0xec, 0x1d, 0xb9, + 0x6d, 0x4f, 0xcf, 0xbc, 0x4c, 0x77, 0xca, 0x23, 0xc7, 0x3e, 0xa9, 0x6b, 0x67, 0x67, 0x39, 0xa4, + 0xa7, 0xc1, 0x78, 0xf8, 0x57, 0x73, 0xca, 0x73, 0xc7, 0x2a, 0xde, 0x41, 0x4f, 0xc6, 0xec, 0x8a, + 0x98, 0x5d, 0x23, 0x66, 0x58, 0xc4, 0xec, 0xcb, 0x98, 0x3d, 0x11, 0xd3, 0x74, 0xf4, 0x53, 0xce, + 0x8c, 0x20, 0x6f, 0xb2, 0x83, 0xfd, 0x41, 0x86, 0x37, 0x29, 0x3c, 0xf8, 0xb4, 0x39, 0x61, 0xb1, + 0xd9, 0x8e, 0x16, 0xf2, 0x96, 0xf8, 0x5f, 0x20, 0x78, 0xb0, 0x05, 0x33, 0x3d, 0x83, 0x55, 0xea, + 0xa0, 0xdb, 0x7b, 0x3e, 0xea, 0x79, 0xfb, 0x0e, 0xec, 0x41, 0x65, 0x0f, 0x65, 0xec, 0x3d, 0x18, + 0x81, 0x34, 0x1e, 0xd9, 0x46, 0xe8, 0x96, 0x0c, 0x4e, 0xb5, 0xfd, 0x3d, 0x06, 0x78, 0x7a, 0x40, + 0x87, 0xd8, 0x80, 0xf9, 0x2b, 0xb5, 0x08, 0x2f, 0x99, 0x2c, 0xe7, 0x8a, 0xb0, 0x50, 0x89, 0x04, + 0xcf, 0x3a, 0xbc, 0x86, 0x45, 0x63, 0x0e, 0x3b, 0xd5, 0x0c, 0x19, 0x48, 0x92, 0xe6, 0x93, 0xa6, + 0x97, 0x34, 0xa8, 0x28, 0xd0, 0x4e, 0x4f, 0x56, 0x72, 0x5f, 0x1c, 0x89, 0x66, 0x77, 0x70, 0x40, + 0xae, 0xf5, 0x84, 0xc5, 0x9d, 0x84, 0x55, 0xbe, 0x92, 0xea, 0xd3, 0x75, 0xc9, 0x7e, 0x3b, 0x38, + 0x88, 0xd4, 0xd5, 0x2d, 0x39, 0x50, 0x46, 0xa7, 0x10, 0x78, 0x26, 0x18, 0x5f, 0x30, 0xcb, 0x76, + 0xd0, 0xec, 0x5e, 0xeb, 0xca, 0x58, 0xa2, 0x9b, 0x03, 0xe3, 0x8e, 0x73, 0xcb, 0x52, 0xd9, 0x59, + 0xbf, 0x90, 0x9b, 0xaf, 0xe5, 0xf1, 0x33, 0x6c, 0xa6, 0x2e, 0xb2, 0x3c, 0xb5, 0x3b, 0x6e, 0xf7, + 0x7b, 0x68, 0x67, 0x43, 0x59, 0x7a, 0x93, 0x0b, 0x3f, 0xde, 0x6a, 0x43, 0x29, 0x9e, 0x68, 0x25, + 0xb2, 0x23, 0x21, 0x24, 0x08, 0x08, 0x46, 0xa6, 0x98, 0x2b, 0x31, 0x7d, 0x55, 0x2c, 0xd6, 0xb5, + 0xb1, 0x42, 0x47, 0x02, 0x69, 0x67, 0x14, 0xb4, 0xfd, 0x7d, 0x61, 0x52, 0x30, 0x2d, 0x1f, 0xf5, + 0xbf, 0x61, 0xe5, 0x4f, 0x4b, 0x57, 0xca, 0xb0, 0x26, 0xc7, 0xd0, 0xba, 0x04, 0x78, 0x77, 0x87, + 0x04, 0xd6, 0x3f, 0xec, 0x0b, 0xc5, 0xce, 0x04, 0x7d, 0x4a, 0x16, 0xf8, 0x0f, 0x02, 0x27, 0x5f, + 0xfb, 0xb8, 0x18, 0xd5, 0x19, 0x1c, 0x99, 0x4b, 0xaf, 0x71, 0x7b, 0x88, 0xd9, 0xcc, 0x8a, 0x05, + 0x1a, 0x7a, 0x6c, 0x40, 0xce, 0x24, 0x72, 0xae, 0xf3, 0x67, 0xc4, 0xa9, 0x4c, 0x22, 0x62, 0xd6, + 0xfc, 0xed, 0x66, 0x86, 0x42, 0x0c, 0xea, 0x43, 0x83, 0x9d, 0x53, 0xb2, 0xcd, 0x25, 0xc9, 0x08, + 0xf5, 0xa9, 0x7a, 0x30, 0x86, 0xb4, 0xcf, 0x7b, 0xe5, 0x5e, 0x71, 0x6c, 0xbc, 0x1a, 0x6c, 0xfb, + 0x0b, 0x44, 0xc5, 0xf1, 0xad, 0x36, 0x09, 0x91, 0x05, 0x73, 0x53, 0xf3, 0x57, 0x9b, 0x99, 0x13, + 0x25, 0x18, 0x59, 0x6f, 0xee, 0x68, 0x7a, 0xc0, 0xaf, 0x97, 0x97, 0x38, 0x21, 0x32, 0x6b, 0x00, + 0x1b, 0xc1, 0xeb, 0x2d, 0x64, 0x1a, 0xd4, 0x96, 0xea, 0x00, 0xc6, 0x17, 0x3a, 0x9d, 0x60, 0x26, + 0xf9, 0xc8, 0x68, 0x8a, 0x6e, 0xe3, 0x5a, 0x6a, 0x47, 0xd7, 0xd5, 0x0b, 0xb4, 0xf0, 0x50, 0xdb, + 0xee, 0xc2, 0x20, 0x7b, 0x54, 0x57, 0xd4, 0x65, 0xe1, 0x36, 0xd7, 0xd1, 0x59, 0xc9, 0x0f, 0xf2, + 0xb6, 0x42, 0x75, 0x35, 0x11, 0x16, 0x5b, 0x52, 0x5f, 0x8c, 0x74, 0xe7, 0xf3, 0x42, 0x7b, 0xcc, + 0xb7, 0x6e, 0xea, 0x3e, 0x65, 0x2b, 0xbf, 0xbf, 0x0f, 0x4b, 0x4e, 0xcd, 0x21, 0xf9, 0x34, 0xb3, + 0xb1, 0x2b, 0xfe, 0x76, 0xd8, 0x81, 0xe8, 0xa6, 0x1e, 0xc2, 0x60, 0x87, 0xb5, 0x04, 0xae, 0x9e, + 0x0b, 0xa6, 0x2a, 0x34, 0x33, 0x70, 0xa2, 0x97, 0x17, 0x7b, 0x47, 0x7e, 0xe5, 0xd5, 0x40, 0x19, + 0x3d, 0x76, 0x5c, 0x65, 0x6d, 0x88, 0xc6, 0x71, 0x85, 0xf1, 0x36, 0xc9, 0x7b, 0x1e, 0x16, 0x47, + 0xd8, 0xb7, 0x0e, 0xb4, 0x01, 0x9d, 0x35, 0xb5, 0x17, 0xa8, 0x2e, 0xe8, 0xb8, 0x47, 0x20, 0xab, + 0xf4, 0xc6, 0x6c, 0x89, 0xd6, 0x8c, 0xe6, 0x5a, 0x07, 0x61, 0x80, 0xa7, 0x07, 0x6c, 0x97, 0x91, + 0x3f, 0x10, 0x0f, 0x81, 0xc1, 0x76, 0x74, 0x08, 0xc0, 0x9f, 0x82, 0x3b, 0x5b, 0xa2, 0xff, 0x5d, + 0xf4, 0x09, 0x0c, 0xa4, 0x45, 0x87, 0xc4, 0x96, 0x50, 0xb6, 0x6f, 0xf3, 0xd0, 0xf9, 0x47, 0x64, + 0x4d, 0x7b, 0x0d, 0x44, 0x04, 0xd9, 0x76, 0x2b, 0x9f, 0x81, 0xb5, 0x33, 0x44, 0xb0, 0x54, 0x1c, + 0x38, 0xbb, 0x03, 0xed, 0xb8, 0x59, 0x60, 0x39, 0x68, 0xdc, 0xb8, 0x8f, 0x3b, 0xfe, 0x7e, 0x81, + 0xe3, 0xef, 0x16, 0x0c, 0x45, 0x55, 0x84, 0xb3, 0xd4, 0xd4, 0x07, 0xf7, 0xf7, 0xba, 0x66, 0xc1, + 0xd7, 0xce, 0xc9, 0x24, 0x13, 0x6f, 0x61, 0x65, 0xbb, 0x45, 0x0d, 0x32, 0x1c, 0xbd, 0x6d, 0x75, + 0x5c, 0x76, 0xcb, 0xa4, 0xa0, 0x2b, 0xb7, 0x1f, 0xf4, 0xc5, 0x45, 0x9b, 0xd0, 0x48, 0x64, 0xfe, + 0x43, 0xae, 0x53, 0x59, 0x88, 0xae, 0x73, 0xa2, 0x04, 0x3c, 0x59, 0x7f, 0xa1, 0xa3, 0xb5, 0xef, + 0xfb, 0x4a, 0xb3, 0xb3, 0xfb, 0xcb, 0xf1, 0xeb, 0x77, 0x68, 0xc2, 0x3b, 0xb2, 0x16, 0x49, 0x86, + 0xc0, 0x66, 0xe8, 0x5f, 0x45, 0xa7, 0x6c, 0x74, 0x7b, 0x41, 0x16, 0x31, 0xe4, 0x97, 0x80, 0x1a, + 0xb3, 0xb9, 0xeb, 0x2c, 0x4a, 0x40, 0x44, 0xa2, 0xf6, 0x63, 0x37, 0x4e, 0x6e, 0x6d, 0x26, 0x29, + 0x11, 0xd4, 0x5c, 0xea, 0x74, 0xcb, 0x52, 0x10, 0xc4, 0x7e, 0x38, 0x85, 0x65, 0x96, 0x7f, 0x3c, + 0x79, 0x22, 0x9c, 0x9f, 0xb4, 0xf3, 0x30, 0x8f, 0x7b, 0xcd, 0x73, 0xb6, 0xdb, 0x79, 0x2a, 0x3d, + 0x14, 0x06, 0xe1, 0x16, 0x1c, 0x8f, 0xc9, 0x5d, 0xba, 0x48, 0xe0, 0x87, 0xce, 0xca, 0x16, 0x5a, + 0x9d, 0x82, 0x66, 0x2f, 0xd0, 0x18, 0xb8, 0xfb, 0xcf, 0xc8, 0x07, 0x09, 0x35, 0x07, 0x6e, 0xae, + 0xd6, 0xe5, 0x0e, 0x02, 0x69, 0x88, 0xe3, 0x1c, 0x0c, 0xfd, 0x20, 0x5b, 0x90, 0xe7, 0xa2, 0x5f, + 0x9c, 0xf1, 0x90, 0xa4, 0x42, 0x26, 0x5c, 0xc5, 0xa3, 0xdb, 0x8c, 0xce, 0xf7, 0x36, 0x7c, 0xbd, + 0xed, 0xa5, 0x75, 0x63, 0x79, 0xc8, 0xa1, 0xb4, 0xda, 0x76, 0x3c, 0xf6, 0x59, 0xcb, 0x94, 0x3b, + 0x5a, 0xe4, 0x5e, 0x41, 0xbf, 0xc2, 0x7a, 0xe5, 0x2d, 0xad, 0x43, 0xf6, 0xfe, 0xdc, 0x41, 0x47, + 0x3e, 0xe8, 0xc8, 0xf1, 0x02, 0x6d, 0x25, 0x48, 0xdd, 0x45, 0x9f, 0x63, 0xd0, 0x9a, 0x5c, 0x61, + 0x43, 0x73, 0xff, 0xaf, 0x1f, 0xde, 0xec, 0x3c, 0xb7, 0x56, 0xee, 0x45, 0x32, 0xfd, 0xe2, 0xe5, + 0xba, 0x33, 0xdb, 0x23, 0x14, 0x52, 0x1b, 0x92, 0xc7, 0xe6, 0xac, 0x30, 0xdb, 0x44, 0x7d, 0x85, + 0x23, 0xec, 0x91, 0x1a, 0xac, 0x4b, 0x18, 0xfa, 0x6c, 0x31, 0xb3, 0x95, 0x2b, 0xad, 0xcc, 0x92, + 0xbc, 0x34, 0xb1, 0x5b, 0x0b, 0x27, 0x0d, 0x52, 0x4f, 0x91, 0x2a, 0x07, 0xa5, 0xe7, 0xeb, 0xf9, + 0x22, 0xff, 0xa2, 0x5c, 0xea, 0x08, 0x99, 0x65, 0x02, 0xb3, 0x99, 0xf0, 0x21, 0x1d, 0x73, 0x0d, + 0xd6, 0xde, 0xe8, 0x26, 0x3b, 0xd3, 0xdd, 0x09, 0x0c, 0xe8, 0x3c, 0x10, 0x7e, 0x57, 0xb6, 0x35, + 0x0d, 0x6f, 0xac, 0x8a, 0xd7, 0x3f, 0x7c, 0x02, 0xf8, 0x8a, 0x87, 0xb8, 0x76, 0xdb, 0x39, 0x0e, + 0x08, 0xe8, 0x3d, 0xe9, 0x47, 0xb0, 0x1e, 0x94, 0x00, 0x84, 0xec, 0x4e, 0xe0, 0x5a, 0xff, 0xd6, + 0xe2, 0x1d, 0x62, 0x8b, 0x8c, 0x5f, 0x5b, 0xff, 0x66, 0x7d, 0x0d, 0x46, 0x01, 0xe5, 0xa9, 0x83, + 0x14, 0xac, 0x0c, 0x65, 0x5f, 0x83, 0x82, 0x6f, 0x55, 0xa8, 0xc4, 0x2a, 0x8a, 0x3d, 0x41, 0x4d, + 0x49, 0x20, 0x1b, 0xdc, 0xa7, 0x4c, 0x39, 0x89, 0xcb, 0xa2, 0x29, 0x66, 0x74, 0x12, 0x70, 0x5d, + 0xee, 0xac, 0x91, 0x0a, 0xf7, 0xf7, 0x52, 0x49, 0xbc, 0x02, 0xf1, 0xd3, 0xdb, 0x47, 0xa5, 0xa1, + 0xa6, 0xb4, 0x13, 0x0c, 0x95, 0xda, 0x31, 0x0c, 0x2b, 0x00, 0x12, 0x35, 0x5b, 0x80, 0x30, 0x0f, + 0x2c, 0xc1, 0x31, 0xbc, 0xce, 0x53, 0xb2, 0xec, 0x70, 0x47, 0x26, 0x24, 0xea, 0x6a, 0x6f, 0x99, + 0xc4, 0x1e, 0xe9, 0xf5, 0x90, 0x36, 0x36, 0x5e, 0x91, 0x8e, 0x4f, 0x9f, 0xc6, 0x85, 0x7e, 0x86, + 0xf4, 0xf2, 0xc6, 0x63, 0x16, 0x5c, 0xb2, 0x12, 0x81, 0xb5, 0xf6, 0xa8, 0x2b, 0x23, 0x15, 0x8f, + 0xa2, 0xbf, 0x20, 0x36, 0xcf, 0x10, 0xe6, 0x6f, 0x29, 0x95, 0x3b, 0x4b, 0x7f, 0xf7, 0xb6, 0xba, + 0x2b, 0x6a, 0x6c, 0xb1, 0x34, 0x54, 0x7c, 0x03, 0xdf, 0x45, 0x50, 0xcf, 0xa2, 0x45, 0x36, 0x6a, + 0x16, 0xb7, 0xe0, 0x1f, 0x67, 0x74, 0x8e, 0xfd, 0x0e, 0xe2, 0x90, 0x31, 0xdc, 0x5a, 0x9f, 0x92, + 0xeb, 0xb4, 0x15, 0xe1, 0x3e, 0x96, 0x79, 0xe9, 0xe9, 0x3c, 0xfa, 0xed, 0x92, 0xd4, 0x8d, 0xc3, + 0x8e, 0xc6, 0xb8, 0xb6, 0xa2, 0x50, 0x64, 0x61, 0x84, 0x40, 0xbc, 0x52, 0x01, 0x09, 0x32, 0x83, + 0xd1, 0x2a, 0x5e, 0xbc, 0xba, 0x4e, 0x57, 0x08, 0xd6, 0x47, 0x4e, 0x99, 0xe7, 0x9e, 0xc5, 0xa5, + 0x4c, 0x19, 0x2b, 0x0e, 0x79, 0xc9, 0xd0, 0x89, 0xd7, 0x80, 0x26, 0x8a, 0x23, 0x0f, 0xbb, 0x10, + 0x2a, 0xb5, 0x5a, 0x55, 0xea, 0x8f, 0x56, 0x35, 0x66, 0x0b, 0x94, 0x7e, 0x73, 0x4b, 0xfe, 0x72, + 0xe0, 0xa8, 0x40, 0xee, 0xc2, 0x54, 0xfd, 0x0c, 0x0e, 0x4e, 0x2d, 0x78, 0x6c, 0xc5, 0x41, 0x7e, + 0x9b, 0xa4, 0x9f, 0xb9, 0x39, 0xb0, 0x08, 0xb4, 0x30, 0x3e, 0x6a, 0x06, 0x10, 0xf7, 0x08, 0x96, + 0xee, 0x60, 0x17, 0xaa, 0xfe, 0x01, 0x7f, 0x73, 0xb3, 0x11, 0xe1, 0x3e, 0x79, 0x38, 0x9f, 0x56, + 0x94, 0xc4, 0x97, 0x10, 0x09, 0x73, 0xdb, 0xb5, 0xa4, 0x49, 0xc9, 0x12, 0x75, 0xad, 0xde, 0x12, + 0x85, 0xb1, 0x27, 0xeb, 0xb5, 0x5a, 0x0d, 0x34, 0x3e, 0x4e, 0xfa, 0xc8, 0xa4, 0x91, 0x4d, 0x91, + 0x9d, 0x53, 0x55, 0xfe, 0x81, 0x0f, 0x88, 0x74, 0xa0, 0x37, 0xec, 0xb8, 0x23, 0xdd, 0x0b, 0x89, + 0x34, 0x13, 0xff, 0x95, 0x42, 0x10, 0x44, 0x5d, 0xbd, 0x5f, 0xd0, 0xdb, 0x9b, 0x7a, 0x47, 0xa2, + 0x75, 0xbe, 0x47, 0x4d, 0x69, 0x1a, 0x9d, 0x8f, 0x6a, 0x12, 0xac, 0x75, 0x78, 0xc1, 0x14, 0x20, + 0x3d, 0x4a, 0xde, 0x2b, 0xec, 0x5d, 0x28, 0x65, 0x0b, 0x39, 0x4e, 0x71, 0x07, 0x90, 0x78, 0xc1, + 0x54, 0x74, 0xc1, 0x60, 0xbc, 0x2a, 0xae, 0x1c, 0x64, 0x8f, 0x48, 0x88, 0x97, 0x48, 0xf4, 0x9a, + 0x45, 0x92, 0x36, 0xa8, 0xaf, 0xb4, 0x71, 0x35, 0x26, 0x76, 0x2c, 0x6b, 0xb6, 0x2a, 0x20, 0x5a, + 0x55, 0x6e, 0xe9, 0x84, 0xf3, 0xc8, 0x61, 0xf0, 0x5f, 0x80, 0xf0, 0xf2, 0x2e, 0xa2, 0x71, 0x0c, + 0x1b, 0xe8, 0x2c, 0xfc, 0x1d, 0x76, 0x47, 0xab, 0x66, 0xea, 0x53, 0x2e, 0x59, 0x33, 0x08, 0x7b, + 0x58, 0xbe, 0xd1, 0x7b, 0x5a, 0xe5, 0xcf, 0x97, 0x78, 0x6b, 0xe8, 0x21, 0x9a, 0xe1, 0xdb, 0x9b, + 0xd5, 0xea, 0x5c, 0x1b, 0x2c, 0x17, 0xe1, 0x25, 0x76, 0xa3, 0x1d, 0xc8, 0x85, 0x47, 0x75, 0x41, + 0xef, 0x95, 0xdc, 0x26, 0xb1, 0xbd, 0x8d, 0x16, 0xee, 0x98, 0xbb, 0xdc, 0x19, 0xaa, 0x8a, 0x08, + 0x76, 0x4f, 0x8b, 0xd3, 0xc2, 0xb6, 0x1a, 0x8d, 0x84, 0xa9, 0x83, 0x52, 0x1a, 0x36, 0xbd, 0x88, + 0x1f, 0x26, 0xa0, 0x24, 0x3e, 0xf2, 0xbd, 0x99, 0xe4, 0xbe, 0xdd, 0xc5, 0x2d, 0xc3, 0xae, 0xdc, + 0x1e, 0x2b, 0xfb, 0x46, 0x67, 0x29, 0xeb, 0x49, 0x9c, 0x8f, 0xce, 0x80, 0x16, 0x19, 0x2e, 0x78, + 0xb8, 0xcd, 0xdd, 0x36, 0x37, 0x2a, 0x58, 0xb9, 0xad, 0xdd, 0xe8, 0x46, 0x96, 0x46, 0x6c, 0x5e, + 0xb9, 0x19, 0xad, 0xfb, 0xe4, 0xd9, 0xfa, 0x4f, 0x9e, 0x0f, 0x64, 0x56, 0xd0, 0x0d, 0xc1, 0x28, + 0x33, 0xbf, 0x77, 0x79, 0xb2, 0xf2, 0x58, 0x5d, 0xaa, 0xb1, 0x6a, 0x0e, 0x53, 0x9b, 0x47, 0x37, + 0x8e, 0xd4, 0x23, 0xde, 0x4e, 0xe8, 0x53, 0x5f, 0x6c, 0x69, 0x50, 0xc8, 0xd7, 0xb4, 0x9b, 0x93, + 0x6c, 0xde, 0x78, 0x31, 0xfa, 0x8e, 0x4a, 0x83, 0x8f, 0x33, 0x29, 0x86, 0x5f, 0x65, 0xb9, 0x10, + 0x90, 0x07, 0x72, 0x1e, 0x1a, 0x53, 0xd0, 0x16, 0xed, 0xc2, 0x06, 0xd0, 0x0f, 0x68, 0x81, 0x86, + 0x93, 0xc0, 0xe5, 0x32, 0x0c, 0x42, 0x5d, 0x03, 0x28, 0xda, 0xa3, 0x5b, 0xf0, 0x4e, 0xe4, 0xa7, + 0xb7, 0x42, 0xe4, 0x54, 0xd7, 0x0c, 0xdc, 0x0a, 0x20, 0x1e, 0xa4, 0x5c, 0x9c, 0x3b, 0x2e, 0x92, + 0x50, 0x65, 0x06, 0x22, 0x23, 0x69, 0xf7, 0x25, 0xac, 0x5e, 0xad, 0xc3, 0x79, 0xb6, 0xd3, 0x2d, + 0x5c, 0xce, 0xdd, 0x6e, 0xa7, 0xc6, 0xe7, 0xb8, 0x21, 0x55, 0xa6, 0xa7, 0x42, 0xb7, 0x64, 0x74, + 0xce, 0xb4, 0xb9, 0x1e, 0xf3, 0x5b, 0xc7, 0xb3, 0x63, 0x1d, 0x60, 0x10, 0x36, 0xb9, 0x68, 0x0c, + 0xa4, 0x9c, 0xba, 0x2b, 0xa5, 0x04, 0x88, 0x4d, 0xbc, 0xd2, 0xe1, 0x05, 0xb1, 0x6b, 0x27, 0x69, + 0x12, 0x45, 0x50, 0x76, 0x42, 0x1e, 0x9d, 0xcb, 0x8b, 0xe0, 0x6a, 0x7c, 0x13, 0x26, 0xa9, 0x67, + 0x65, 0xf3, 0x24, 0x41, 0xaa, 0x4e, 0x1a, 0xe6, 0xf0, 0x88, 0x37, 0x4b, 0x08, 0xeb, 0xc6, 0xf7, + 0xad, 0xf5, 0x0c, 0x09, 0x8a, 0xfe, 0x60, 0x58, 0x0b, 0x4a, 0x3f, 0x6c, 0x00, 0x8e, 0x57, 0x98, + 0xac, 0xd9, 0x23, 0xb0, 0xe2, 0x4b, 0xf0, 0xf0, 0xef, 0x60, 0x87, 0x9f, 0x09, 0x84, 0x7f, 0xcc, + 0xa8, 0x16, 0x21, 0xbe, 0xc0, 0x86, 0x2f, 0xa0, 0x8d, 0x09, 0xab, 0x97, 0xdd, 0x08, 0xad, 0xfe, + 0xf3, 0xef, 0x04, 0x9c, 0xf7, 0x83, 0x00, 0xf1, 0x0d, 0xc9, 0xfe, 0x01, 0x20, 0xf1, 0x7b, 0x05, + 0x08, 0xb3, 0x56, 0xe5, 0xf5, 0xb0, 0xc7, 0xd9, 0x83, 0xf0, 0xef, 0x58, 0xd9, 0xf9, 0xed, 0x4e, + 0xd7, 0x2b, 0x50, 0x00, 0x74, 0x2c, 0xf5, 0xa0, 0x09, 0x03, 0x39, 0x6b, 0xc6, 0x40, 0xce, 0x4c, + 0x0c, 0xe4, 0x4d, 0x6a, 0xf9, 0x10, 0xec, 0xbb, 0x81, 0xef, 0x9e, 0xff, 0x59, 0x75, 0x7a, 0x0c, + 0xfa, 0x72, 0x56, 0xcb, 0x20, 0x7c, 0x91, 0x5f, 0x55, 0xe0, 0x97, 0xb3, 0x07, 0xe1, 0x97, 0xcd, + 0x6f, 0x49, 0x49, 0x19, 0xfd, 0x41, 0x66, 0x5e, 0x30, 0x7e, 0x91, 0x62, 0x10, 0x57, 0xb4, 0x1a, + 0x8c, 0x76, 0x13, 0x53, 0xb6, 0x16, 0xa2, 0x7d, 0xa5, 0x93, 0x3f, 0x96, 0x8a, 0x7b, 0xb5, 0xa6, + 0xb8, 0xcd, 0x87, 0xd7, 0xa7, 0x07, 0xbe, 0x1c, 0x82, 0xb8, 0x17, 0x1f, 0xaf, 0xf3, 0xcf, 0x19, + 0x4d, 0x0f, 0x57, 0x4a, 0x1f, 0x4f, 0x34, 0x05, 0xae, 0xbc, 0xee, 0xd7, 0x0f, 0xab, 0x87, 0x71, + 0xb5, 0x8d, 0x7a, 0x12, 0xa8, 0xf6, 0xb7, 0x4b, 0x35, 0xf3, 0x82, 0x15, 0xa1, 0x1d, 0x68, 0x04, + 0x39, 0x5a, 0xd2, 0x49, 0x23, 0x5c, 0xf8, 0xc2, 0xe0, 0xc7, 0x96, 0x80, 0xc0, 0x50, 0xb1, 0x43, + 0xb4, 0x0e, 0x8a, 0xb4, 0xf1, 0x57, 0x42, 0x25, 0x16, 0x67, 0xf1, 0x41, 0x69, 0x2d, 0x28, 0x36, + 0x70, 0xb1, 0x6e, 0x9c, 0x22, 0x33, 0x0e, 0xc8, 0x34, 0xa5, 0x31, 0x4d, 0x65, 0x45, 0x90, 0xd5, + 0xcc, 0xd0, 0xee, 0x6c, 0x44, 0x82, 0x9c, 0xb1, 0xd1, 0x84, 0xaa, 0x40, 0x10, 0x9b, 0x22, 0x4c, + 0xce, 0x75, 0xe6, 0xf5, 0x9e, 0x2d, 0xee, 0x06, 0x8b, 0xf1, 0x74, 0x1a, 0xc6, 0x97, 0x5e, 0x07, + 0xa7, 0x5c, 0x33, 0x57, 0xce, 0x5a, 0x60, 0x6c, 0x42, 0x11, 0xae, 0x70, 0xe4, 0xa0, 0x5d, 0x21, + 0x73, 0x02, 0x6e, 0x4a, 0x76, 0x56, 0xcb, 0x35, 0x43, 0x2d, 0xb1, 0xbc, 0x6d, 0xd5, 0xef, 0x6a, + 0x8f, 0x60, 0x6d, 0xaf, 0x1e, 0x40, 0x8c, 0xee, 0x3e, 0x1f, 0x93, 0x5c, 0x78, 0x31, 0x9d, 0xca, + 0x95, 0x8a, 0x3f, 0x44, 0x05, 0xe8, 0x0c, 0x33, 0x3d, 0x86, 0x5a, 0x47, 0xca, 0x20, 0x48, 0xa2, + 0x82, 0x0d, 0x18, 0x2b, 0xa3, 0x45, 0x2a, 0x0f, 0xc4, 0xf5, 0xe1, 0xd5, 0xf8, 0x97, 0x8b, 0xff, + 0x06, 0x67, 0xb0, 0x5d, 0xc8, 0x31, 0x0d, 0x61, 0xfb, 0xc4, 0x0a, 0x11, 0x85, 0xd7, 0x18, 0xa1, + 0xbd, 0xa4, 0x50, 0x3c, 0x32, 0xb2, 0xe0, 0x6e, 0x3c, 0xe2, 0x3f, 0x9e, 0xbc, 0xbb, 0x86, 0xbd, + 0x2a, 0x66, 0x87, 0x97, 0x94, 0x91, 0x6e, 0x83, 0x57, 0x7a, 0xdc, 0x45, 0x0c, 0x5f, 0x3b, 0xab, + 0x43, 0xf0, 0xc5, 0xf4, 0x84, 0x74, 0x87, 0x3f, 0xe8, 0x72, 0xa5, 0x8c, 0xda, 0x3b, 0xd6, 0xe0, + 0x76, 0x8b, 0x6b, 0x6a, 0x7d, 0xa8, 0xcd, 0xa0, 0x32, 0x57, 0xc7, 0xd1, 0xeb, 0xb2, 0x95, 0x7b, + 0x14, 0xc8, 0x8b, 0xa6, 0x9c, 0xfd, 0x41, 0xb9, 0x3f, 0xb6, 0xf5, 0x6f, 0x34, 0x0b, 0x91, 0x54, + 0x15, 0x66, 0xcb, 0xb1, 0xa8, 0x6b, 0x4b, 0x74, 0x07, 0x77, 0xef, 0x36, 0x99, 0x15, 0xc5, 0x07, + 0x0b, 0x82, 0xe8, 0xc4, 0x8b, 0x25, 0x85, 0x8a, 0x3c, 0x88, 0xd1, 0xf7, 0xac, 0xed, 0x73, 0xb7, + 0xc3, 0x14, 0x4f, 0xbf, 0x40, 0xc7, 0x43, 0x07, 0x42, 0x98, 0x51, 0xc4, 0x55, 0xfa, 0xbb, 0x54, + 0x64, 0x6d, 0xbb, 0xb9, 0x0e, 0xf6, 0x25, 0xcc, 0x83, 0xf2, 0x46, 0x2c, 0x2b, 0x9a, 0xaf, 0xd1, + 0x0e, 0x22, 0xa7, 0x3b, 0x83, 0x48, 0x5d, 0x4f, 0x23, 0x81, 0x28, 0x5d, 0x5a, 0xd4, 0xa8, 0xf0, + 0x0d, 0x15, 0x33, 0xf9, 0xa2, 0xe3, 0x35, 0x10, 0x62, 0x23, 0x36, 0x23, 0x66, 0x51, 0xf6, 0x3a, + 0x7d, 0x6a, 0x6b, 0xec, 0xc4, 0xea, 0x72, 0x09, 0xbe, 0x15, 0x14, 0xa8, 0xb1, 0x9d, 0x6a, 0x2f, + 0x9c, 0x21, 0x62, 0xc0, 0xf0, 0xd7, 0x34, 0x5e, 0x78, 0x7a, 0x8f, 0x9d, 0x16, 0xaf, 0xe8, 0xce, + 0xe6, 0x4c, 0xe7, 0x4e, 0x65, 0x25, 0xb6, 0xae, 0xe2, 0x82, 0xe9, 0x7c, 0x1c, 0xb1, 0x69, 0xa8, + 0xd1, 0xef, 0xc2, 0xa3, 0x2e, 0x6f, 0x77, 0x11, 0x2c, 0xc1, 0x71, 0x8b, 0x97, 0xd3, 0xeb, 0xd4, + 0x7c, 0x6b, 0xbc, 0x3a, 0xcd, 0xcf, 0xf4, 0xc8, 0x85, 0x92, 0xbc, 0x29, 0x4d, 0x11, 0x83, 0x92, + 0x1a, 0x23, 0x4c, 0xb3, 0xf2, 0x0d, 0xa2, 0xda, 0x6a, 0x16, 0x46, 0x04, 0x76, 0x6d, 0xf5, 0xdd, + 0x6e, 0x53, 0xd5, 0xcd, 0x37, 0x35, 0xf5, 0xc4, 0x08, 0x46, 0x6d, 0x74, 0xa8, 0xe7, 0x28, 0x38, + 0xce, 0x18, 0x81, 0xd2, 0xac, 0x10, 0x42, 0x37, 0xab, 0xfe, 0xce, 0x2a, 0x08, 0x5e, 0x90, 0xee, + 0xd5, 0x75, 0x2a, 0x13, 0x66, 0x95, 0xcb, 0x08, 0xbb, 0xdc, 0x97, 0xfa, 0xf5, 0x46, 0xb7, 0xf3, + 0x34, 0x53, 0x5f, 0x50, 0xcf, 0xf2, 0xc3, 0x66, 0x39, 0x1a, 0x3d, 0xbd, 0x49, 0xc6, 0xef, 0x8b, + 0x49, 0xae, 0x72, 0x19, 0xa0, 0xed, 0x16, 0xbb, 0xeb, 0x45, 0xb8, 0x07, 0x4d, 0xf3, 0x4b, 0x0d, + 0x38, 0xde, 0xd5, 0xdf, 0x2c, 0x8c, 0x57, 0x23, 0x1b, 0xef, 0x54, 0x91, 0x5b, 0x00, 0x4e, 0x47, + 0x42, 0x46, 0xa2, 0x3c, 0x34, 0xd2, 0x24, 0xdd, 0x73, 0xa7, 0x7e, 0xa6, 0x79, 0x45, 0x72, 0xf3, + 0x2c, 0x26, 0x0b, 0x2b, 0xd0, 0x83, 0x28, 0xd7, 0xda, 0x58, 0x30, 0xf9, 0x5e, 0xc7, 0xd3, 0x22, + 0xe6, 0x03, 0x25, 0xb3, 0xfa, 0xa0, 0x64, 0x9e, 0x7c, 0x6c, 0x82, 0x40, 0x0a, 0x89, 0x87, 0xf4, + 0xc0, 0x41, 0xd1, 0xdb, 0xa8, 0xc6, 0x5d, 0x64, 0x1e, 0x1a, 0xb0, 0xc1, 0x77, 0x84, 0xbf, 0x1d, + 0x04, 0x13, 0x56, 0xfd, 0xef, 0x9d, 0xe6, 0xe9, 0x99, 0xcb, 0xcd, 0xf1, 0x3a, 0x6e, 0xea, 0xa1, + 0x22, 0x38, 0x9e, 0x7a, 0x1d, 0x75, 0x78, 0x2b, 0xbe, 0x1a, 0xc7, 0x1a, 0x95, 0x03, 0x60, 0x01, + 0xce, 0x34, 0x92, 0x4f, 0x18, 0x05, 0x7c, 0x22, 0x10, 0x2b, 0x37, 0xac, 0x97, 0x70, 0x9c, 0xdb, + 0x81, 0xad, 0xa6, 0xd7, 0x85, 0x73, 0xf7, 0x40, 0x0a, 0xc5, 0xb5, 0xe4, 0xa5, 0x27, 0x57, 0xd7, + 0xb3, 0x59, 0x14, 0x10, 0x2f, 0x5a, 0xe3, 0xf2, 0x5d, 0x7c, 0x76, 0x7d, 0x09, 0xc7, 0xc1, 0x82, + 0xe1, 0xc4, 0x71, 0xa7, 0xd5, 0xf5, 0xfe, 0x3e, 0x46, 0xb3, 0xfa, 0x32, 0xdd, 0xdd, 0x83, 0xcc, + 0x16, 0x05, 0xd4, 0xe8, 0x03, 0x94, 0xb0, 0x44, 0x56, 0x81, 0x82, 0x6e, 0x16, 0xc6, 0x61, 0x1e, + 0x44, 0x5f, 0x36, 0xaa, 0xfd, 0x62, 0x5d, 0xf5, 0x63, 0x54, 0x80, 0x43, 0x55, 0x65, 0xa5, 0x1f, + 0x5d, 0xe3, 0xe2, 0xa3, 0xf0, 0xc8, 0x52, 0x5f, 0x45, 0xe2, 0x1d, 0x8b, 0x32, 0x4c, 0x63, 0x7d, + 0x4b, 0x26, 0x2d, 0x76, 0x95, 0xa2, 0x79, 0x46, 0x7b, 0xe4, 0xbe, 0x59, 0x6f, 0x8d, 0xb6, 0x3b, + 0xd6, 0x5a, 0x42, 0xe8, 0x72, 0xbd, 0x1f, 0x68, 0x87, 0xdd, 0x11, 0xbb, 0x00, 0x2e, 0x39, 0x86, + 0x1d, 0xf5, 0xb0, 0x85, 0xd7, 0xa7, 0x6a, 0x47, 0x5b, 0x62, 0xd8, 0xb4, 0x86, 0x30, 0x51, 0x84, + 0x3d, 0x9d, 0xc7, 0x34, 0x9c, 0x1b, 0x72, 0x70, 0xc2, 0x46, 0x40, 0xab, 0x1b, 0xcf, 0xb8, 0x86, + 0xae, 0x26, 0x07, 0x12, 0xa8, 0x97, 0xaf, 0x0f, 0x19, 0x74, 0xa1, 0x35, 0x9e, 0x60, 0x56, 0x60, + 0xe9, 0x65, 0xb2, 0xce, 0xe1, 0x3b, 0xe8, 0x35, 0x8d, 0xc7, 0xb2, 0xcc, 0xa1, 0xb9, 0xbf, 0x8f, + 0xfd, 0x97, 0xe5, 0x49, 0x2a, 0xed, 0x02, 0xb5, 0xc8, 0x70, 0xce, 0x50, 0x1b, 0xb8, 0xb5, 0x45, + 0xd3, 0x95, 0x10, 0x7e, 0x5c, 0x83, 0x75, 0xc0, 0xdc, 0xa5, 0x57, 0x3e, 0xdb, 0x06, 0x87, 0x81, + 0x1c, 0x6a, 0x06, 0x0b, 0x1a, 0x76, 0x84, 0xdb, 0x92, 0xbb, 0x5e, 0xb9, 0x37, 0xdd, 0x36, 0xf7, + 0xa6, 0xdb, 0xbc, 0x37, 0xed, 0xff, 0x48, 0x7b, 0xd3, 0x0f, 0x90, 0xb2, 0x74, 0x6e, 0x38, 0x5f, + 0x49, 0xe0, 0xe9, 0xec, 0x01, 0x7a, 0xe2, 0xf2, 0x40, 0x36, 0xe0, 0x7f, 0x8f, 0x18, 0x0b, 0xbe, + 0x75, 0x41, 0x68, 0xcc, 0x71, 0x90, 0x65, 0x74, 0x20, 0x51, 0xfc, 0x93, 0x6b, 0x66, 0x15, 0xb6, + 0x23, 0xbc, 0xa0, 0x49, 0x25, 0x66, 0xcd, 0x9f, 0x39, 0xcb, 0xd7, 0xd6, 0xfa, 0x04, 0x0d, 0x3f, + 0xa5, 0x5a, 0xe9, 0x02, 0x2f, 0x83, 0x1f, 0x57, 0xed, 0xec, 0x3f, 0xa7, 0xda, 0x87, 0x5c, 0x9e, + 0xac, 0x39, 0xde, 0x50, 0xb1, 0xec, 0x7a, 0x44, 0xc5, 0xa1, 0x18, 0xeb, 0x51, 0x15, 0x3e, 0x2f, + 0x41, 0xa9, 0xab, 0x6b, 0x46, 0xc1, 0x44, 0x62, 0x3c, 0x6b, 0x84, 0x24, 0x59, 0x89, 0x6f, 0x15, + 0xc9, 0x7a, 0xa1, 0x81, 0x26, 0x41, 0xc9, 0x63, 0x28, 0x7a, 0xa9, 0x01, 0xd1, 0x1c, 0xe3, 0x98, + 0xd3, 0xd6, 0x1a, 0xfe, 0x55, 0x48, 0x8a, 0xa9, 0x46, 0xfc, 0x51, 0x62, 0x2a, 0x31, 0xaa, 0x49, + 0xee, 0x04, 0xd9, 0x3a, 0xc2, 0x92, 0x00, 0x0d, 0x8b, 0x16, 0x72, 0x5a, 0x33, 0x06, 0xc9, 0x3f, + 0x95, 0xb7, 0x24, 0xab, 0xf2, 0x96, 0x08, 0xf6, 0x12, 0x89, 0x29, 0xb4, 0x9e, 0xaa, 0x93, 0x79, + 0x89, 0xf1, 0xb8, 0x86, 0x88, 0xac, 0x05, 0x0d, 0x21, 0xf5, 0x22, 0x51, 0x79, 0x6e, 0x4c, 0xde, + 0x09, 0x7d, 0x31, 0x5a, 0xbc, 0x63, 0x14, 0xec, 0x8d, 0x18, 0x3c, 0x4b, 0xa2, 0xed, 0xbf, 0xa0, + 0xaf, 0x34, 0x23, 0x18, 0xd3, 0x90, 0xf2, 0xd6, 0xb0, 0x8c, 0x66, 0x54, 0xb5, 0xa2, 0x1e, 0x5a, + 0x35, 0x7e, 0x8b, 0x44, 0x1d, 0xf4, 0x96, 0xfc, 0x16, 0xd5, 0x35, 0x64, 0x6f, 0x58, 0x27, 0x65, + 0xaf, 0xac, 0xa1, 0x1d, 0x05, 0x38, 0xf5, 0x03, 0xba, 0xdf, 0x87, 0x11, 0x82, 0x97, 0xb5, 0x5a, + 0xf5, 0x58, 0x42, 0x3a, 0x46, 0x62, 0x18, 0x13, 0xe4, 0xf9, 0x87, 0x5d, 0x49, 0x2b, 0xf2, 0xb6, + 0x5c, 0x91, 0x71, 0x09, 0xde, 0x96, 0xdb, 0x93, 0x3f, 0x3e, 0xab, 0xa1, 0x80, 0x91, 0x75, 0x02, + 0x5f, 0xa9, 0xb5, 0x50, 0x47, 0x5c, 0x22, 0x31, 0xb6, 0x3c, 0xec, 0x79, 0xeb, 0x97, 0x9b, 0x20, + 0xbd, 0x4d, 0x61, 0x9f, 0xd2, 0xba, 0x0d, 0xf3, 0xab, 0x16, 0xd9, 0x4b, 0x40, 0xa9, 0x7f, 0x05, + 0xe9, 0x2d, 0x7c, 0x76, 0x44, 0xd8, 0xea, 0x51, 0xa2, 0x60, 0x92, 0x95, 0xf6, 0x33, 0xf0, 0x78, + 0x98, 0x15, 0x3b, 0x1a, 0x6c, 0xf2, 0xfd, 0x7d, 0xfe, 0x75, 0xfb, 0xb0, 0x9a, 0xaf, 0xb0, 0x48, + 0x7a, 0x5a, 0x2d, 0xe0, 0x61, 0xf8, 0xe2, 0xf8, 0xa8, 0x05, 0xdf, 0x6f, 0x3e, 0x8e, 0xa7, 0x04, + 0x19, 0x8e, 0x03, 0x62, 0x9c, 0x06, 0x63, 0x99, 0x62, 0xbc, 0x08, 0x15, 0xf7, 0x2c, 0x25, 0x82, + 0x00, 0x52, 0xd3, 0x89, 0x78, 0xc3, 0xfa, 0x62, 0xba, 0x7a, 0x31, 0x5d, 0xd4, 0xcc, 0x65, 0xab, + 0xda, 0xc5, 0xb7, 0x35, 0xff, 0x1e, 0xf6, 0xb1, 0x38, 0x2e, 0xf2, 0xa4, 0x75, 0xf4, 0x4a, 0x27, + 0xd4, 0xe5, 0x45, 0x6a, 0x5a, 0xd6, 0x3f, 0xaa, 0x9d, 0x13, 0x35, 0x1f, 0xbe, 0xc4, 0x54, 0xdf, + 0x3f, 0xf5, 0xf6, 0x3b, 0xb4, 0x7f, 0xea, 0xaa, 0xfd, 0x13, 0x7e, 0xc7, 0xc0, 0x83, 0xe3, 0xfd, + 0x5b, 0xed, 0x8e, 0x09, 0xf1, 0x5a, 0x86, 0x0d, 0xbb, 0x01, 0xec, 0xe6, 0x87, 0x37, 0x04, 0xe8, + 0xbf, 0x70, 0xcc, 0xfb, 0x01, 0x41, 0x2e, 0xb0, 0x5e, 0x55, 0x25, 0x55, 0xd8, 0xd8, 0x56, 0x9d, + 0xe0, 0x8c, 0x2b, 0xb8, 0xdd, 0x5c, 0x22, 0x75, 0xc5, 0x76, 0x3b, 0x68, 0x6f, 0x4f, 0x83, 0xc8, + 0x64, 0x56, 0x3b, 0xb6, 0x29, 0x7c, 0x63, 0x62, 0x35, 0x66, 0x67, 0xdb, 0xf6, 0xb6, 0x37, 0xd5, + 0x7e, 0x1e, 0x9b, 0xea, 0xcf, 0xed, 0x95, 0x56, 0xf3, 0xda, 0x0f, 0x7f, 0x3b, 0x4e, 0x65, 0x93, + 0xac, 0x8b, 0x05, 0xb3, 0x78, 0x4f, 0xb4, 0xb1, 0x80, 0xef, 0x0b, 0xf2, 0x43, 0xd9, 0x76, 0x53, + 0x4e, 0xc0, 0x28, 0xc0, 0x66, 0x59, 0x42, 0xe4, 0x62, 0x1e, 0x65, 0x45, 0x1e, 0x57, 0x4b, 0x18, + 0x82, 0xb3, 0x3e, 0x8b, 0x95, 0xa7, 0x83, 0x3a, 0x17, 0x64, 0x98, 0xa1, 0x5f, 0x2e, 0x12, 0x74, + 0xec, 0xaf, 0x38, 0x2e, 0x33, 0x20, 0x8f, 0x1b, 0x34, 0x29, 0x5d, 0xf1, 0x7d, 0x18, 0x6b, 0x97, + 0x70, 0x62, 0x23, 0x6a, 0x77, 0x9c, 0x95, 0x54, 0xf9, 0x6a, 0x50, 0xc4, 0x8b, 0x0e, 0x4e, 0x16, + 0x07, 0xce, 0xdc, 0xb3, 0x64, 0x72, 0x8d, 0x97, 0xae, 0xb9, 0x74, 0x1c, 0xdc, 0x84, 0x95, 0x3d, + 0x17, 0xd6, 0xe7, 0x64, 0x7f, 0xb7, 0xf1, 0x35, 0xe2, 0x24, 0x88, 0xc9, 0xbe, 0x47, 0xdc, 0xf0, + 0x2e, 0xb2, 0x37, 0x6c, 0x73, 0x57, 0xdf, 0x11, 0x70, 0xc2, 0xac, 0x9c, 0x90, 0x95, 0x82, 0x2e, + 0xaf, 0xa5, 0xe4, 0x00, 0xe1, 0x8e, 0xef, 0x2b, 0x37, 0x90, 0x9a, 0xee, 0x0e, 0xdf, 0x28, 0x35, + 0xfd, 0x81, 0xa2, 0x3a, 0x55, 0xd7, 0x79, 0xcf, 0x3b, 0xdf, 0xc1, 0x32, 0x93, 0x44, 0x28, 0xa5, + 0xfc, 0x9e, 0xd0, 0xf0, 0x6f, 0x78, 0x3e, 0x31, 0x0f, 0x23, 0xa8, 0xc7, 0x51, 0xb3, 0xce, 0xe5, + 0x9d, 0x78, 0x71, 0x30, 0xb1, 0xbe, 0x2d, 0x6b, 0x77, 0x14, 0x71, 0x08, 0xea, 0xd6, 0xc4, 0x95, + 0x97, 0x24, 0xa8, 0xac, 0x3b, 0x53, 0x50, 0x22, 0x47, 0x71, 0x6a, 0xe8, 0x7b, 0x00, 0x71, 0x1b, + 0x31, 0x55, 0x8d, 0x7b, 0xf8, 0x04, 0x11, 0xed, 0xc0, 0x30, 0xd3, 0x66, 0x15, 0x6b, 0xef, 0x36, + 0x97, 0x1a, 0x52, 0xc1, 0x5d, 0xb9, 0xf8, 0x92, 0xd7, 0x23, 0x7a, 0x5f, 0x17, 0xd5, 0x79, 0x75, + 0x9d, 0x92, 0xc1, 0x68, 0x43, 0x6d, 0x3f, 0x28, 0xc5, 0x46, 0x43, 0x84, 0x6f, 0xa0, 0x72, 0xed, + 0xee, 0x6a, 0xa3, 0xc2, 0xe4, 0x27, 0x7e, 0x06, 0x9f, 0xb8, 0xf6, 0x36, 0xc9, 0x14, 0xdf, 0xc6, + 0xf6, 0x45, 0xd6, 0x93, 0x65, 0xf7, 0xf7, 0xfb, 0xfb, 0xfd, 0x5d, 0x16, 0xdf, 0x9d, 0xdd, 0x1e, + 0x2c, 0xac, 0xc1, 0x02, 0x7e, 0x74, 0xf5, 0xb3, 0x32, 0x69, 0xe3, 0x2a, 0x9f, 0x5f, 0x6d, 0x53, + 0xca, 0xda, 0xb8, 0xbd, 0x6e, 0x07, 0xbe, 0x76, 0x56, 0xdf, 0xca, 0xaf, 0xa9, 0x78, 0xd1, 0x83, + 0xb2, 0xea, 0xaa, 0xe2, 0x9d, 0xfa, 0x8a, 0x7f, 0xd8, 0xac, 0xde, 0x86, 0xce, 0x6f, 0x6d, 0xf5, + 0xd7, 0x8c, 0xb9, 0xea, 0x42, 0xf1, 0x98, 0x31, 0x57, 0xa1, 0xe1, 0x94, 0x3b, 0xe0, 0xd2, 0x60, + 0x50, 0xf7, 0x72, 0x0d, 0x97, 0x2d, 0x42, 0x48, 0x2f, 0xde, 0x5d, 0xcf, 0x51, 0x2b, 0xaf, 0x99, + 0x78, 0x7e, 0x4a, 0xae, 0x5b, 0x71, 0x00, 0x87, 0xa9, 0x71, 0xde, 0x82, 0x4d, 0x21, 0x6c, 0xba, + 0x7a, 0xe2, 0xc8, 0x9f, 0xe1, 0x36, 0x00, 0x93, 0xb7, 0xc6, 0x6a, 0x47, 0xb6, 0x25, 0xd0, 0x68, + 0xfe, 0xb9, 0x92, 0x5e, 0x5e, 0x2e, 0x76, 0x3b, 0x1d, 0x4d, 0xea, 0x93, 0x7a, 0xc1, 0xb8, 0x62, + 0xd2, 0x55, 0xce, 0x1d, 0x29, 0x82, 0x79, 0x19, 0x50, 0x8b, 0xc0, 0x3f, 0x4b, 0x98, 0xeb, 0x6b, + 0xf6, 0xb2, 0x29, 0x3d, 0x03, 0xbd, 0xc8, 0xc4, 0x0f, 0xf5, 0xac, 0x8a, 0x5d, 0xed, 0x56, 0x59, + 0x91, 0x9a, 0x9e, 0x6d, 0xda, 0x60, 0xe8, 0xe6, 0x00, 0xda, 0x42, 0xae, 0xf4, 0x6d, 0x33, 0x38, + 0x09, 0xe4, 0x70, 0x44, 0x9b, 0xe5, 0x83, 0x4d, 0x25, 0xe3, 0xb1, 0x50, 0x15, 0xc9, 0xb1, 0xba, + 0x61, 0xc1, 0x51, 0x6d, 0xc9, 0xa4, 0x48, 0xd9, 0xbc, 0x68, 0x31, 0x40, 0x55, 0xe1, 0xdb, 0x9a, + 0xbd, 0x16, 0x6d, 0xe8, 0x83, 0x32, 0xd6, 0x9e, 0xd8, 0xfa, 0x17, 0x5a, 0xf6, 0x41, 0xf1, 0xa6, + 0x46, 0xa3, 0x9d, 0xd7, 0xe1, 0x63, 0x89, 0xd8, 0xbd, 0xba, 0xd8, 0x14, 0xcb, 0x13, 0x89, 0x8c, + 0xda, 0x9c, 0x80, 0x48, 0x2b, 0xcc, 0x0f, 0xc9, 0x50, 0x12, 0x0e, 0xc9, 0x9d, 0x91, 0xa2, 0x12, + 0x38, 0xf7, 0x28, 0x63, 0x38, 0x0b, 0x77, 0xf0, 0x8c, 0x5a, 0x20, 0x19, 0x55, 0x39, 0x47, 0x88, + 0x67, 0xc4, 0xd5, 0x37, 0x39, 0x72, 0xdf, 0x02, 0xc3, 0xa0, 0x96, 0x3b, 0x4b, 0x04, 0xa3, 0x6b, + 0x3d, 0x32, 0xc9, 0x8c, 0x2f, 0xc7, 0x6c, 0x70, 0xa8, 0xbb, 0xc4, 0xca, 0x3b, 0x65, 0xd5, 0x69, + 0x4b, 0xa8, 0x9a, 0x77, 0x7a, 0xb6, 0x2a, 0x79, 0x8a, 0x32, 0xc7, 0x6e, 0x46, 0x78, 0x9d, 0x10, + 0x83, 0x41, 0x3d, 0xd1, 0x08, 0x3b, 0x43, 0x77, 0x5c, 0x04, 0xa1, 0xe1, 0xae, 0x5d, 0x39, 0x03, + 0xdd, 0x80, 0x2f, 0xaf, 0x14, 0xf6, 0xfa, 0xee, 0x6b, 0xcb, 0xca, 0xe0, 0x9c, 0xb6, 0xc2, 0xed, + 0x9e, 0x80, 0x3e, 0xf0, 0x03, 0x77, 0x7d, 0x91, 0x8c, 0xe1, 0xa2, 0x59, 0x57, 0x63, 0xb1, 0x44, + 0x1d, 0x4a, 0xf9, 0x19, 0xe4, 0x09, 0x3a, 0xc1, 0xaf, 0x61, 0x7a, 0x2d, 0x68, 0x9d, 0xcd, 0xc1, + 0xa5, 0x3e, 0xa3, 0x34, 0x70, 0xfb, 0x13, 0xc8, 0x5c, 0xf0, 0xae, 0xa4, 0xb3, 0xe5, 0x8b, 0x7b, + 0xee, 0xc8, 0x28, 0x08, 0x3e, 0xb0, 0x76, 0x8d, 0x64, 0xb2, 0xba, 0xcc, 0x43, 0xed, 0x95, 0xc9, + 0xee, 0x62, 0xb4, 0xaa, 0x44, 0xf3, 0xb2, 0xb8, 0x4d, 0x0d, 0x48, 0x32, 0xb4, 0x5d, 0xc5, 0x7e, + 0xb5, 0xd1, 0x94, 0x10, 0xcd, 0xd2, 0x7d, 0xad, 0xbb, 0x62, 0x2f, 0x77, 0xc9, 0x80, 0x0e, 0x3f, + 0x05, 0x5e, 0x9b, 0xd4, 0x12, 0xcf, 0xb4, 0x63, 0xf8, 0x20, 0x37, 0x5e, 0xe4, 0xce, 0x43, 0x6f, + 0xec, 0x26, 0xb1, 0x97, 0xb8, 0x17, 0x69, 0xe8, 0xd5, 0xb6, 0x9b, 0x98, 0x98, 0x15, 0x07, 0x02, + 0x7c, 0x8d, 0x70, 0xb5, 0x1a, 0x08, 0x2f, 0xae, 0x1a, 0x5e, 0x8c, 0xc9, 0x06, 0xbc, 0x18, 0xd3, + 0x87, 0x79, 0x31, 0xdc, 0x45, 0x7d, 0x1c, 0xe4, 0xb3, 0x91, 0x9f, 0x21, 0xa5, 0xb1, 0x07, 0x39, + 0xfb, 0x13, 0x97, 0x7f, 0x43, 0x0e, 0xfe, 0x54, 0xfc, 0x4e, 0x66, 0xfe, 0x62, 0xc5, 0x3f, 0x61, + 0x64, 0x90, 0xa7, 0x15, 0x2d, 0x62, 0xe8, 0xc8, 0xa8, 0x8f, 0xb5, 0x54, 0xbf, 0x46, 0x16, 0xc6, + 0x58, 0xeb, 0xc7, 0xd0, 0x80, 0x27, 0x42, 0x99, 0x8a, 0x27, 0x2e, 0x53, 0xf1, 0x88, 0xab, 0xfa, + 0xca, 0x3d, 0xaa, 0x3b, 0xae, 0xde, 0x65, 0x57, 0x4d, 0x35, 0x23, 0xb2, 0xc3, 0x9c, 0xd9, 0xd1, + 0x41, 0x86, 0x8e, 0x89, 0xf7, 0xf7, 0xd1, 0x90, 0xf8, 0xa2, 0x24, 0xd4, 0xc5, 0x4d, 0x12, 0x4e, + 0x65, 0x96, 0x3e, 0x45, 0x61, 0xcf, 0xb0, 0x83, 0x98, 0xa3, 0x8f, 0x77, 0x6a, 0xb3, 0x1c, 0xc6, + 0x95, 0x4c, 0x8a, 0xcb, 0x78, 0x7c, 0x43, 0xd0, 0xa8, 0x66, 0x42, 0x52, 0x36, 0x8d, 0xef, 0xef, + 0xb7, 0x2a, 0xe1, 0x48, 0xed, 0xad, 0xe7, 0xd5, 0x9a, 0xca, 0xf9, 0x2c, 0xf0, 0x35, 0x6a, 0x87, + 0x66, 0xc4, 0x43, 0x73, 0xcc, 0x03, 0x89, 0x4c, 0xe3, 0x23, 0x26, 0xb9, 0xd7, 0x05, 0xb1, 0x41, + 0x86, 0x94, 0x55, 0xc8, 0x90, 0x06, 0xec, 0x13, 0x5f, 0xc0, 0xf0, 0xca, 0xde, 0x4d, 0xab, 0x3d, + 0x5e, 0xed, 0xdd, 0x44, 0xf4, 0x6e, 0x72, 0x90, 0x73, 0x77, 0x25, 0xc3, 0xbc, 0xd2, 0x31, 0xf2, + 0x94, 0x9a, 0xab, 0xde, 0x4d, 0xe5, 0xc7, 0x48, 0xd7, 0x7f, 0x0c, 0xea, 0x47, 0x1e, 0x92, 0x84, + 0x93, 0xe2, 0x27, 0xae, 0x7c, 0x4c, 0x16, 0x9f, 0xfc, 0x74, 0xc5, 0xd0, 0xe7, 0x95, 0x19, 0x42, + 0x9d, 0x2f, 0x3b, 0x41, 0x35, 0x63, 0xd2, 0x40, 0x41, 0x52, 0x3b, 0x71, 0xe2, 0x87, 0x27, 0x4e, + 0xa8, 0x26, 0x4e, 0x2e, 0xab, 0x05, 0x13, 0x27, 0x13, 0xbf, 0x61, 0xe2, 0xc4, 0x2e, 0x7d, 0x94, + 0x32, 0xa7, 0x0e, 0xd1, 0x3e, 0x61, 0x94, 0x7c, 0xe1, 0x37, 0xf1, 0xed, 0xa0, 0xb9, 0x8d, 0x32, + 0x10, 0x33, 0x26, 0x5a, 0x68, 0xda, 0x41, 0x88, 0x79, 0x56, 0x90, 0xae, 0x8f, 0xea, 0xb6, 0xc2, + 0xb0, 0xef, 0xbd, 0x42, 0x35, 0xd8, 0x1c, 0xd6, 0xcb, 0x10, 0xce, 0x0b, 0xc5, 0x45, 0x03, 0xbc, + 0x11, 0xd7, 0xef, 0xb0, 0xb8, 0x6f, 0xe1, 0xcd, 0xba, 0xcc, 0x6a, 0x67, 0xc7, 0x6d, 0x5a, 0x4c, + 0x70, 0xd8, 0x75, 0x60, 0xd5, 0x30, 0x56, 0xa0, 0xfc, 0x7d, 0x70, 0xb3, 0x66, 0x05, 0x42, 0x49, + 0xd9, 0x28, 0xe2, 0x8d, 0x15, 0x88, 0xb3, 0xfa, 0xb4, 0x2e, 0xaf, 0x4f, 0x66, 0x56, 0x9f, 0x9a, + 0x73, 0xfa, 0x39, 0x5c, 0x93, 0x0f, 0xc8, 0xed, 0xa6, 0x95, 0xa5, 0x9a, 0xcf, 0xba, 0x0a, 0xcd, + 0xcd, 0x0a, 0xcd, 0xd7, 0x55, 0xa8, 0xdb, 0x5b, 0x97, 0x51, 0xb7, 0x67, 0xe6, 0xd4, 0xa5, 0x9d, + 0x98, 0xd0, 0xe5, 0x1c, 0xa1, 0x9a, 0xa1, 0x9c, 0xe1, 0xc9, 0xba, 0x16, 0x66, 0x66, 0x0b, 0xb3, + 0xf0, 0xa1, 0xdc, 0x3e, 0x2c, 0xd6, 0xe4, 0x96, 0x2f, 0xbc, 0xa6, 0x01, 0x5b, 0xa9, 0x55, 0x70, + 0x79, 0x7c, 0x9b, 0xae, 0xc9, 0x0b, 0x96, 0xcb, 0xad, 0x47, 0xac, 0xcf, 0x35, 0xf9, 0xbf, 0x4c, + 0xd7, 0xb5, 0x7c, 0xa3, 0x95, 0xd8, 0x74, 0x3a, 0xbb, 0x8c, 0xde, 0xa4, 0x41, 0xf0, 0x7b, 0xa0, + 0xbc, 0xac, 0xb5, 0xdd, 0xdb, 0x12, 0x7d, 0xee, 0xac, 0xdc, 0x02, 0x61, 0xcb, 0x58, 0x40, 0x64, + 0xe0, 0xc1, 0xfb, 0x36, 0x38, 0xcc, 0x05, 0x6e, 0xe1, 0xf3, 0x17, 0x68, 0x2e, 0xbb, 0xc2, 0x63, + 0xaf, 0xe2, 0x08, 0x68, 0x43, 0xb6, 0x11, 0x9c, 0xd0, 0xba, 0x30, 0x89, 0xd6, 0xec, 0xea, 0xf2, + 0x37, 0xbf, 0xaa, 0xca, 0xb0, 0x6b, 0xb2, 0x1f, 0x8c, 0x34, 0x74, 0x8a, 0x32, 0xd2, 0xc4, 0xb6, + 0x44, 0x9a, 0x28, 0x23, 0x8a, 0x7a, 0xe2, 0x33, 0x6d, 0xcb, 0x96, 0x7b, 0xe5, 0xa4, 0xe7, 0x4d, + 0x49, 0xcb, 0x00, 0xb4, 0x1a, 0xfa, 0x68, 0x8d, 0x80, 0x98, 0xdd, 0x15, 0xbd, 0x8e, 0xdc, 0x5d, + 0x77, 0xd3, 0x60, 0x06, 0xad, 0x2c, 0x7d, 0x3d, 0x05, 0x8e, 0xfb, 0xa8, 0xb6, 0x49, 0x7e, 0xeb, + 0x5a, 0x9c, 0xdc, 0x4d, 0x5a, 0xb8, 0x36, 0x83, 0xc7, 0xb5, 0x13, 0x92, 0x79, 0x41, 0xb9, 0x59, + 0x38, 0x22, 0x4b, 0x03, 0xb2, 0x32, 0x0c, 0xab, 0xb8, 0x6f, 0x4e, 0x79, 0x68, 0x23, 0x1e, 0x8c, + 0x5d, 0x37, 0xb0, 0xb3, 0xbb, 0xda, 0xbc, 0x0c, 0x74, 0xa9, 0xca, 0x4c, 0x51, 0xe8, 0x52, 0xb5, + 0x59, 0x86, 0xf5, 0x59, 0x56, 0x20, 0xa9, 0x2a, 0xd9, 0xb2, 0xcf, 0x31, 0x7c, 0x41, 0x01, 0x7f, + 0x87, 0x27, 0xbe, 0xfb, 0xfb, 0x60, 0xd8, 0x77, 0xcc, 0x79, 0xb3, 0x5a, 0x55, 0x29, 0xbf, 0x18, + 0x8f, 0x8a, 0xd0, 0x5b, 0xc4, 0x5a, 0xda, 0xa7, 0xaf, 0xcf, 0xd3, 0x69, 0xd2, 0xf7, 0x33, 0xaf, + 0xa7, 0x07, 0xf4, 0x20, 0x40, 0xfc, 0xec, 0xc2, 0x02, 0x5b, 0x9a, 0x2f, 0x46, 0xb5, 0x18, 0x37, + 0x06, 0xab, 0xa5, 0x41, 0xf3, 0x95, 0xeb, 0x96, 0xa9, 0xba, 0x89, 0x82, 0x33, 0x5e, 0xb2, 0xfb, + 0xfe, 0xd6, 0x56, 0x2e, 0x8a, 0x16, 0x41, 0x3d, 0x0a, 0x12, 0x0f, 0x5d, 0x7c, 0x30, 0x8a, 0xcf, + 0x4a, 0xc5, 0xbf, 0x4d, 0xaa, 0x32, 0x0f, 0xe7, 0x79, 0x50, 0x9e, 0x00, 0xb4, 0xbc, 0x6b, 0x27, + 0x44, 0x44, 0xe3, 0x5b, 0x21, 0x43, 0x9d, 0x3c, 0xf7, 0xdb, 0x08, 0x5a, 0x26, 0x3c, 0xa7, 0xe5, + 0x75, 0x35, 0xe2, 0x7d, 0xa8, 0xab, 0xeb, 0x5b, 0xdc, 0x40, 0xe9, 0x4f, 0x05, 0x2a, 0xc7, 0x31, + 0xea, 0xbd, 0x02, 0xcb, 0x39, 0xf0, 0x3b, 0x4c, 0xcb, 0xb6, 0x5c, 0x80, 0x48, 0x5c, 0xb9, 0xc2, + 0xec, 0x58, 0x10, 0x00, 0xe7, 0xae, 0x4c, 0xed, 0x14, 0x26, 0x78, 0xbf, 0x45, 0xc5, 0xef, 0x18, + 0xbd, 0x2b, 0x8d, 0xfa, 0x80, 0xc0, 0x4b, 0x62, 0x84, 0x1d, 0x76, 0xb5, 0x5d, 0xc6, 0xdb, 0x64, + 0x8c, 0x46, 0xe0, 0x42, 0xc9, 0xd6, 0xb2, 0xda, 0xf2, 0x4a, 0xb9, 0x6d, 0xb5, 0x6c, 0xf2, 0x49, + 0x77, 0xac, 0x35, 0x42, 0x8e, 0xae, 0xba, 0x02, 0xe1, 0xa1, 0x0f, 0xdf, 0x6a, 0x71, 0x54, 0xb6, + 0xd6, 0xe3, 0xab, 0x3a, 0x25, 0xb4, 0x1d, 0x68, 0xf6, 0xd1, 0x41, 0x17, 0xab, 0x03, 0x71, 0x9b, + 0x6e, 0xe0, 0xe0, 0xec, 0x73, 0x34, 0xec, 0xed, 0x77, 0x1c, 0x98, 0xdf, 0x29, 0xd4, 0x52, 0xd8, + 0x4d, 0x1f, 0xbd, 0x82, 0x4d, 0x10, 0x88, 0x80, 0x8b, 0xa0, 0x85, 0xb7, 0x79, 0x09, 0x1c, 0x2d, + 0x82, 0x2c, 0xdb, 0x95, 0x0c, 0x97, 0x08, 0x29, 0x65, 0x2f, 0xde, 0x69, 0x2a, 0x15, 0xd2, 0x56, + 0x88, 0x92, 0xb1, 0xc4, 0x77, 0xbe, 0x9d, 0x8f, 0x2c, 0x65, 0xb3, 0x6c, 0x15, 0x16, 0xd9, 0x4e, + 0x7b, 0x71, 0x24, 0x41, 0x11, 0x97, 0xc5, 0xe1, 0xae, 0x4e, 0x31, 0xe3, 0xe4, 0x23, 0xd8, 0xe7, + 0x4a, 0x1d, 0x64, 0x61, 0xdf, 0xe7, 0x66, 0xdc, 0xbf, 0xf8, 0x17, 0xbb, 0xd9, 0x43, 0xe6, 0xc7, + 0x0b, 0xad, 0x36, 0x64, 0x56, 0xa3, 0x9d, 0x71, 0x61, 0x60, 0xea, 0xaf, 0xb3, 0xea, 0xeb, 0x89, + 0xf1, 0x7a, 0x72, 0xf5, 0xb9, 0x62, 0x9f, 0x29, 0xac, 0x2f, 0x70, 0x63, 0x4a, 0x88, 0x4e, 0xa5, + 0x50, 0x6e, 0x3b, 0x41, 0x48, 0x0b, 0x6b, 0x89, 0x9a, 0xcf, 0xa3, 0xc5, 0x44, 0x74, 0x17, 0xea, + 0xcb, 0x82, 0xa2, 0xfe, 0x5c, 0x5e, 0xee, 0xaa, 0xb3, 0x5f, 0x9e, 0x7e, 0x59, 0x66, 0x3a, 0xf2, + 0x69, 0xec, 0xac, 0xd8, 0x0b, 0x9f, 0xc7, 0x01, 0x92, 0xb4, 0xc5, 0xb0, 0x81, 0x2e, 0x80, 0xc1, + 0x8c, 0x33, 0x42, 0x91, 0x29, 0xde, 0xf9, 0x19, 0xdc, 0x8b, 0xd6, 0x93, 0x6f, 0x7e, 0x7c, 0xfe, + 0xfc, 0xf9, 0xa0, 0xc5, 0x93, 0xa0, 0x45, 0x2a, 0xcf, 0xd6, 0x17, 0xf4, 0x70, 0xd7, 0xae, 0xa3, + 0x5b, 0x64, 0x7d, 0xce, 0x28, 0x20, 0xda, 0xc4, 0x59, 0x5a, 0xce, 0x70, 0xa7, 0xfb, 0xe8, 0xa2, + 0x4e, 0xbe, 0xc0, 0x5e, 0xe5, 0x4e, 0x40, 0xc0, 0x85, 0x71, 0x6b, 0xc2, 0x78, 0x0c, 0xd8, 0x3c, + 0xbd, 0x50, 0x2e, 0x8e, 0x60, 0xd1, 0x2a, 0x53, 0xf5, 0x8f, 0x36, 0x4f, 0x28, 0x88, 0xc9, 0x59, + 0x7d, 0x31, 0xbe, 0x0c, 0x60, 0x60, 0xcf, 0xd0, 0xc8, 0x6d, 0x9e, 0x4c, 0xc3, 0xd9, 0x17, 0x9c, + 0x96, 0xe4, 0xf1, 0xce, 0x73, 0x13, 0xb6, 0x51, 0x3c, 0xb0, 0xe0, 0xcf, 0x02, 0x27, 0x9e, 0xbf, + 0x38, 0x82, 0x31, 0x02, 0x67, 0x9d, 0x77, 0x03, 0x4d, 0x09, 0x23, 0xec, 0x2f, 0x8a, 0x83, 0xba, + 0x06, 0xc9, 0x03, 0x5f, 0xe6, 0xb7, 0x08, 0x4e, 0xab, 0xba, 0x00, 0x38, 0x19, 0x13, 0x64, 0x31, + 0x4e, 0x7c, 0x9e, 0xf2, 0x8b, 0xa3, 0xea, 0x9c, 0x47, 0xa4, 0xd8, 0xdd, 0x64, 0xc4, 0xbe, 0x0e, + 0xa7, 0x8b, 0xa3, 0x33, 0x10, 0xe4, 0x86, 0x73, 0x04, 0x04, 0x71, 0xa5, 0xaa, 0xc1, 0x49, 0x35, + 0xe8, 0xa6, 0x1a, 0x84, 0x16, 0x8c, 0x30, 0x63, 0x8a, 0x02, 0x96, 0xb1, 0xb7, 0x78, 0xe7, 0xc2, + 0x40, 0xf2, 0xac, 0xa6, 0xde, 0x42, 0xac, 0xc0, 0x20, 0xe0, 0x3e, 0x8a, 0x83, 0xdb, 0xe8, 0x0b, + 0xc9, 0xa3, 0xa9, 0xfc, 0x62, 0xbb, 0x16, 0xac, 0x5e, 0x38, 0x14, 0x71, 0xe6, 0xab, 0x82, 0x70, + 0x68, 0x52, 0x28, 0x36, 0xe9, 0xb7, 0xc8, 0x78, 0x07, 0x9d, 0x83, 0x61, 0x4e, 0x41, 0xcd, 0x2d, + 0x11, 0x2d, 0xb0, 0x3b, 0x0a, 0x0d, 0xba, 0x5b, 0x06, 0xbf, 0x58, 0xcc, 0xf3, 0xb7, 0xd0, 0x9b, + 0x7e, 0xc7, 0xd5, 0x61, 0x30, 0x04, 0x18, 0x98, 0x8e, 0x42, 0xc1, 0xb6, 0x82, 0x52, 0x60, 0x76, + 0xd1, 0x42, 0x49, 0x9a, 0xf8, 0xe3, 0x3b, 0x39, 0x90, 0xcc, 0x50, 0xf4, 0x41, 0xd5, 0x47, 0xd1, + 0xe6, 0xd6, 0x85, 0x96, 0x4b, 0x1a, 0x09, 0x52, 0xae, 0x22, 0x6d, 0x4d, 0x29, 0xdf, 0xee, 0x63, + 0xf2, 0xed, 0x3f, 0x9f, 0xb1, 0x99, 0x02, 0xde, 0x0e, 0x14, 0x92, 0x72, 0xad, 0x24, 0x2c, 0xad, + 0xb6, 0xc5, 0xba, 0x21, 0x2a, 0x64, 0xae, 0xb5, 0x32, 0x23, 0x5c, 0xdb, 0x4b, 0x0e, 0x03, 0x75, + 0xfa, 0xf2, 0x29, 0x2a, 0x0c, 0x07, 0x46, 0x1f, 0x4e, 0xe2, 0xd9, 0xc8, 0x36, 0xf3, 0x9c, 0xa2, + 0xe2, 0x77, 0xe5, 0x98, 0x23, 0x0e, 0x51, 0xcb, 0x2a, 0x5f, 0x58, 0xbf, 0xe9, 0x68, 0xbc, 0xe7, + 0x20, 0xeb, 0x75, 0x56, 0xae, 0x4f, 0xaa, 0x18, 0xc5, 0x8f, 0xe8, 0x4e, 0xd3, 0xf2, 0x62, 0x0b, + 0xd3, 0x6a, 0xad, 0x80, 0x8d, 0x99, 0xa1, 0x20, 0x2e, 0x10, 0xc8, 0x96, 0x08, 0x23, 0xe7, 0x07, + 0x03, 0xcd, 0x63, 0xa7, 0x09, 0xbb, 0x15, 0x0d, 0xec, 0x72, 0xa7, 0xee, 0x62, 0xe6, 0xee, 0x8e, + 0x78, 0x34, 0x06, 0x39, 0xee, 0x3e, 0x4a, 0x4d, 0x15, 0xef, 0x70, 0x8c, 0x1f, 0x13, 0x5d, 0x88, + 0x9d, 0x5e, 0x5e, 0x9c, 0xe4, 0xa9, 0x9d, 0x6b, 0x18, 0xac, 0x30, 0x45, 0x40, 0x14, 0x4e, 0x90, + 0x4f, 0x84, 0xfb, 0x41, 0x2e, 0x34, 0x65, 0x86, 0x0d, 0xd7, 0x24, 0x72, 0x11, 0xea, 0xa1, 0x42, + 0x63, 0x65, 0xe0, 0xba, 0x36, 0x32, 0xc5, 0x20, 0x05, 0x4c, 0x19, 0x41, 0x93, 0x40, 0xb7, 0xf0, + 0x64, 0x76, 0x85, 0xe8, 0xc4, 0xca, 0xd5, 0xe1, 0x50, 0xc0, 0x65, 0x5a, 0x29, 0xc8, 0x6c, 0xd8, + 0x0b, 0x3a, 0x4b, 0xd8, 0x4f, 0x2e, 0xaf, 0x3c, 0x58, 0x96, 0xe1, 0xff, 0x37, 0x1e, 0x5e, 0x62, + 0xc0, 0x31, 0x5a, 0x77, 0x9a, 0xd8, 0xef, 0x30, 0xc7, 0x53, 0x0a, 0x42, 0x03, 0x76, 0xc5, 0x4e, + 0x1b, 0x11, 0xfc, 0xa6, 0xc9, 0x32, 0xd8, 0xbd, 0xd2, 0xa3, 0xf5, 0xbf, 0x2f, 0xc5, 0x73, 0x56, + 0xb7, 0xd0, 0xe7, 0x81, 0x4d, 0x81, 0xe3, 0x8b, 0xcc, 0x86, 0x04, 0x3b, 0x54, 0x23, 0xe7, 0x00, + 0xb3, 0xe0, 0xca, 0x41, 0xe0, 0xaa, 0xe8, 0xcb, 0x80, 0xf1, 0x6a, 0xb1, 0xcb, 0xd0, 0x52, 0xa4, + 0xcc, 0x0c, 0xa5, 0xfa, 0x4d, 0x78, 0xc1, 0xeb, 0x3d, 0x0c, 0x9f, 0x61, 0x60, 0xb2, 0xee, 0x28, + 0xe8, 0xe9, 0xd4, 0x35, 0x29, 0x77, 0xd4, 0x8b, 0x4b, 0xd7, 0xe4, 0xdb, 0x29, 0xc0, 0xaa, 0x79, + 0x00, 0xc1, 0xf6, 0x5e, 0x2f, 0xe2, 0x2a, 0xb8, 0x63, 0xf4, 0x77, 0x0d, 0xd8, 0xad, 0x5b, 0x25, + 0xef, 0x35, 0x07, 0xdc, 0x29, 0x8e, 0x48, 0xfd, 0x2b, 0x0e, 0x62, 0x5e, 0x6c, 0xda, 0xb0, 0x56, + 0xe6, 0x89, 0x80, 0x93, 0x47, 0xec, 0x47, 0x45, 0xa6, 0xa3, 0xf8, 0x46, 0x61, 0x1d, 0x51, 0x61, + 0xf1, 0xec, 0x61, 0x38, 0xa8, 0xbe, 0x63, 0x09, 0xfe, 0x11, 0xa3, 0xda, 0xd7, 0x81, 0x3b, 0x36, + 0x42, 0xb2, 0x71, 0x2e, 0x0c, 0x08, 0xdc, 0xb0, 0x3a, 0x4c, 0xf5, 0x6e, 0xfc, 0x49, 0x55, 0x25, + 0x32, 0x40, 0x7f, 0x0b, 0xbc, 0x5d, 0x3d, 0xf8, 0x6f, 0x2a, 0x38, 0x84, 0x23, 0x4a, 0x98, 0x26, + 0xbb, 0x87, 0x5c, 0x83, 0xec, 0xe6, 0x43, 0xf2, 0xfe, 0xf2, 0xc2, 0x86, 0x91, 0x16, 0xc1, 0x48, + 0x83, 0x51, 0x26, 0xc7, 0x5a, 0x39, 0xd7, 0x38, 0xb8, 0x93, 0xfe, 0x64, 0x27, 0xe1, 0x45, 0x44, + 0x9d, 0x5d, 0x6a, 0xf4, 0x11, 0xb2, 0xd7, 0x21, 0x98, 0x47, 0x1c, 0x8c, 0xd3, 0x9d, 0x4b, 0x74, + 0xda, 0x44, 0x08, 0xaa, 0x1f, 0x3b, 0xd3, 0xe0, 0xd2, 0x6d, 0x7d, 0x33, 0x1e, 0x8f, 0x5b, 0x3b, + 0xdd, 0xfd, 0xef, 0xdc, 0x16, 0x12, 0x58, 0xa2, 0x15, 0x6b, 0xda, 0xb6, 0x5c, 0xfc, 0x7b, 0x29, + 0xfe, 0x5e, 0xc0, 0x12, 0x8e, 0xe2, 0x68, 0x4d, 0x0d, 0xc7, 0x75, 0xf5, 0xfb, 0xdb, 0x9f, 0x52, + 0xbf, 0x4e, 0xa7, 0xb3, 0x59, 0xfd, 0xb4, 0x92, 0xff, 0x55, 0x75, 0xac, 0xfe, 0xb5, 0x3e, 0x07, + 0x11, 0xec, 0x4e, 0x8a, 0x59, 0x02, 0xc3, 0x84, 0x9d, 0x82, 0x9d, 0x65, 0x17, 0x0e, 0x7f, 0x7c, + 0x75, 0xf8, 0x39, 0xf8, 0x72, 0x98, 0x20, 0xc9, 0x0b, 0xf2, 0x34, 0x10, 0x98, 0x9f, 0x2e, 0x3a, + 0x85, 0x17, 0x71, 0x50, 0x9b, 0x42, 0xdd, 0x75, 0x14, 0x29, 0x54, 0x26, 0x3a, 0xff, 0x8b, 0x3e, + 0x64, 0xcb, 0x8c, 0xf7, 0x81, 0x36, 0x57, 0xbe, 0x77, 0x10, 0xe3, 0x94, 0x37, 0xc8, 0x6a, 0xca, + 0x5b, 0xdf, 0x20, 0x72, 0xb0, 0x8e, 0x94, 0x08, 0x53, 0x41, 0x6c, 0x98, 0x49, 0xfb, 0x5b, 0x44, + 0x9c, 0xcd, 0xc6, 0xe3, 0x0e, 0xd2, 0x2c, 0x6c, 0x30, 0xcd, 0x7c, 0xc6, 0x88, 0xcc, 0x9d, 0x51, + 0x07, 0x6f, 0x15, 0xa4, 0x50, 0xe9, 0x95, 0xce, 0xaa, 0x52, 0xec, 0x88, 0xe5, 0x13, 0xb1, 0xd9, + 0xd4, 0xa0, 0xc0, 0x3b, 0x0a, 0xa1, 0xe0, 0x87, 0x83, 0x98, 0x31, 0x7f, 0xe0, 0x7c, 0x9b, 0x3b, + 0x5e, 0x29, 0xe8, 0xf0, 0x6a, 0x0c, 0xcb, 0x5b, 0x04, 0xfd, 0x91, 0xdd, 0xc0, 0x87, 0x84, 0xff, + 0x77, 0x1a, 0x45, 0xf6, 0xd7, 0x90, 0x82, 0x95, 0xbe, 0x06, 0x7c, 0x8b, 0xf5, 0x15, 0xb9, 0x32, + 0x86, 0xd2, 0x4f, 0x85, 0xda, 0xc3, 0xc8, 0xe7, 0xe4, 0xc1, 0x7c, 0x32, 0xab, 0x56, 0x04, 0x94, + 0xf2, 0xf9, 0xdb, 0x83, 0xf9, 0xdc, 0x58, 0xb5, 0x32, 0xa3, 0x94, 0xcf, 0xbf, 0x56, 0xf3, 0xb1, + 0x97, 0x3c, 0xe2, 0xbd, 0xba, 0x99, 0xb1, 0x2a, 0xa5, 0xc7, 0xc9, 0x6c, 0x8c, 0xd2, 0xd2, 0xba, + 0xe0, 0xe6, 0x7e, 0xdd, 0xaa, 0x20, 0xee, 0x91, 0xca, 0x6b, 0xc2, 0xa0, 0x18, 0x2c, 0x82, 0x17, + 0x57, 0x9a, 0x24, 0x91, 0x03, 0xfe, 0x39, 0xdb, 0x83, 0xc4, 0xb5, 0x3b, 0x8e, 0xf2, 0xd8, 0x4c, + 0xfd, 0xc0, 0x2d, 0x87, 0x5d, 0x22, 0xf0, 0x7f, 0x29, 0xec, 0xc2, 0xcf, 0x24, 0x7a, 0xbb, 0x78, + 0x55, 0x6a, 0xe2, 0x47, 0xd3, 0x94, 0x53, 0x6d, 0x06, 0xdc, 0xfa, 0x9d, 0x4f, 0x5e, 0x99, 0x23, + 0x81, 0x6c, 0x33, 0x97, 0x22, 0x22, 0x98, 0x83, 0x2f, 0x28, 0xe9, 0xc6, 0xc4, 0xcc, 0x58, 0x36, + 0xef, 0xb0, 0xe8, 0xf2, 0xd3, 0x8d, 0xdd, 0x08, 0x49, 0xe9, 0xcd, 0x32, 0x5d, 0xe4, 0x06, 0xee, + 0x92, 0x82, 0x39, 0xcc, 0xe0, 0x0b, 0xbd, 0x44, 0xe2, 0x49, 0x1b, 0x61, 0xba, 0x1f, 0x1c, 0x32, + 0xe8, 0x6d, 0xec, 0xf6, 0xb6, 0x30, 0x69, 0xc1, 0x89, 0x67, 0x87, 0xb5, 0xfa, 0x37, 0xb5, 0x95, + 0x72, 0xe4, 0x25, 0x60, 0x79, 0xa7, 0x30, 0x86, 0xaf, 0x90, 0x49, 0xfe, 0xb6, 0x64, 0x37, 0xf5, + 0x42, 0x77, 0x0c, 0x1f, 0x21, 0x2e, 0x82, 0x2e, 0x29, 0xe8, 0xc2, 0x8f, 0x8a, 0xa0, 0x0b, 0x0a, + 0x02, 0xd1, 0x52, 0xee, 0x30, 0x2a, 0x44, 0xde, 0xb2, 0x43, 0x21, 0xde, 0xe9, 0xe9, 0x99, 0x4b, + 0xff, 0x3b, 0x5b, 0xad, 0xc4, 0x2d, 0x34, 0x42, 0xf2, 0x53, 0x6c, 0xff, 0x94, 0x3b, 0x27, 0x3c, + 0x2b, 0xdf, 0x32, 0x1b, 0xfa, 0xd6, 0x71, 0x84, 0xa6, 0xc3, 0xf5, 0xb7, 0x00, 0x93, 0x49, 0xae, + 0xab, 0xa2, 0xf1, 0x3c, 0x40, 0x28, 0xc5, 0x13, 0x7d, 0xaf, 0x87, 0x5c, 0x1f, 0x7f, 0x41, 0xe9, + 0x20, 0xb8, 0x5f, 0xf0, 0x59, 0xf2, 0xc8, 0xec, 0xed, 0x5d, 0x86, 0xf9, 0xd5, 0xf5, 0x05, 0xde, + 0x78, 0xee, 0xbd, 0x08, 0xd3, 0x49, 0x92, 0x24, 0x9f, 0xc3, 0x60, 0x0f, 0xc9, 0x7a, 0xf6, 0x6e, + 0xc3, 0xcf, 0x21, 0x1e, 0xa7, 0xcb, 0xf0, 0xd1, 0x12, 0x3c, 0xc9, 0xb6, 0xaf, 0x26, 0x6d, 0xbf, + 0xfb, 0xdc, 0x19, 0xf6, 0x11, 0xd8, 0xd3, 0xc6, 0x62, 0x1d, 0xf7, 0x6a, 0x32, 0xec, 0xc9, 0xc7, + 0x7e, 0x07, 0x45, 0xfd, 0xb3, 0x67, 0xbe, 0x7f, 0x35, 0xa1, 0x90, 0xb6, 0xdf, 0xc7, 0x90, 0xce, + 0x73, 0x2d, 0x04, 0x32, 0x90, 0xbb, 0x1b, 0x84, 0xf3, 0x71, 0x8c, 0x73, 0xc3, 0xf9, 0x55, 0x86, + 0xa6, 0x77, 0x57, 0x93, 0x95, 0xdb, 0x42, 0xf0, 0x24, 0xb7, 0xb5, 0xdf, 0xf9, 0x0e, 0xa6, 0xd9, + 0xca, 0xfd, 0xb1, 0x2b, 0x01, 0xa4, 0xe3, 0x59, 0x6a, 0x80, 0xc9, 0x42, 0xc0, 0x7b, 0x52, 0x3d, + 0xb2, 0x66, 0x14, 0xdf, 0x1b, 0x02, 0x80, 0x8e, 0x32, 0x70, 0xcc, 0xb0, 0xd0, 0xbe, 0x85, 0xe9, + 0x80, 0x9a, 0xcf, 0x2a, 0xba, 0x55, 0x16, 0x22, 0x8b, 0xce, 0xc2, 0x74, 0xde, 0x7a, 0x1f, 0x5c, + 0x24, 0x89, 0x38, 0x36, 0xda, 0x5c, 0x3e, 0xec, 0x52, 0x2b, 0xdc, 0x3a, 0x70, 0x14, 0xf7, 0xad, + 0x3d, 0x56, 0x4b, 0xac, 0x64, 0x55, 0x4f, 0x4c, 0xe0, 0x5b, 0x58, 0x58, 0x33, 0x53, 0x3e, 0xa5, + 0x19, 0xd7, 0x4d, 0xd6, 0xfd, 0xc4, 0xf9, 0x83, 0xb5, 0xe4, 0x82, 0x8b, 0x4a, 0x9e, 0x10, 0x99, + 0x9a, 0xac, 0x83, 0xdb, 0x90, 0xdd, 0xac, 0x9c, 0x1d, 0xf5, 0xa5, 0xba, 0x4d, 0x95, 0x40, 0x72, + 0x6c, 0xef, 0xb3, 0xe4, 0x6b, 0xfa, 0x0e, 0xdf, 0x97, 0x4a, 0xf0, 0x10, 0x32, 0xfe, 0xd8, 0xea, + 0xac, 0xce, 0x10, 0x2c, 0xf2, 0x67, 0x79, 0x87, 0xc4, 0x98, 0x02, 0xc9, 0xc2, 0x9f, 0xdf, 0xba, + 0x5a, 0x00, 0xa4, 0xff, 0x95, 0x8e, 0xee, 0x5a, 0x94, 0x4f, 0xfe, 0xfc, 0x4a, 0x47, 0x67, 0xef, + 0x0e, 0x02, 0x61, 0x49, 0x14, 0x94, 0x2c, 0x89, 0xc4, 0x3d, 0x6d, 0xb3, 0xa5, 0x12, 0x42, 0x7f, + 0xca, 0xb3, 0xab, 0xe8, 0x65, 0x0b, 0xb7, 0x7c, 0xd6, 0xd2, 0x02, 0x11, 0x4f, 0x56, 0xe5, 0xb0, + 0x71, 0xd7, 0xb4, 0x74, 0xd6, 0x72, 0x45, 0xd0, 0xfe, 0x95, 0xa0, 0x71, 0x35, 0x28, 0xac, 0x04, + 0x69, 0xd3, 0x8e, 0xf5, 0x17, 0x78, 0x8a, 0xbe, 0xbf, 0x27, 0xc2, 0x5d, 0x28, 0x18, 0x72, 0xe1, + 0xe7, 0xb1, 0x7c, 0x0e, 0xf9, 0x39, 0x94, 0xcf, 0x11, 0x3f, 0x47, 0xf2, 0x19, 0x13, 0xb6, 0x7d, + 0x7c, 0x6c, 0x5b, 0xb0, 0x27, 0xa4, 0xf4, 0xf2, 0x19, 0x4d, 0x2b, 0x29, 0x03, 0x19, 0xf0, 0x83, + 0xe5, 0x72, 0x42, 0xd7, 0x52, 0x8c, 0xc0, 0x84, 0xb8, 0x90, 0x39, 0xa4, 0x04, 0x24, 0x3f, 0x27, + 0xa5, 0x97, 0x7b, 0x7f, 0xf2, 0xb7, 0x57, 0x4c, 0x51, 0xb6, 0x11, 0x65, 0x42, 0xbc, 0x1b, 0x4e, + 0x25, 0x90, 0xac, 0xe0, 0x46, 0xc0, 0xa0, 0x33, 0xe8, 0xab, 0x7a, 0x7a, 0x84, 0xb1, 0xaf, 0x40, + 0x25, 0x9e, 0x31, 0x93, 0x01, 0x54, 0xb3, 0x7f, 0x36, 0xb2, 0xba, 0x88, 0x79, 0xdf, 0x3f, 0x13, + 0xd2, 0x92, 0x5d, 0xca, 0x95, 0x02, 0xee, 0x99, 0x5c, 0xcb, 0x2c, 0x82, 0xca, 0x7f, 0x46, 0xd4, + 0x07, 0xf8, 0xb7, 0x8e, 0xfa, 0x80, 0x69, 0x76, 0x02, 0x9d, 0x5c, 0x47, 0xd4, 0x10, 0x53, 0x07, + 0xa7, 0x39, 0xa5, 0x0e, 0x88, 0x86, 0x86, 0x53, 0x23, 0x9a, 0x77, 0xda, 0xf6, 0xcf, 0x5d, 0x24, + 0xf5, 0x23, 0x78, 0x10, 0x0f, 0x7f, 0x74, 0xcf, 0x56, 0xe7, 0xab, 0x15, 0xf2, 0x17, 0x90, 0x4b, + 0x68, 0x06, 0x2b, 0xc8, 0x9d, 0xe5, 0xc0, 0x87, 0x80, 0xb8, 0xdb, 0x2e, 0x3e, 0x78, 0xdd, 0xde, + 0xf3, 0x6d, 0x38, 0x5e, 0x6b, 0x51, 0x42, 0x3d, 0x4a, 0x58, 0x1b, 0x65, 0xd2, 0xd5, 0xa2, 0xc0, + 0x43, 0x5d, 0x94, 0x9e, 0x1e, 0xa5, 0x57, 0x1b, 0xa5, 0xaf, 0x47, 0xe9, 0x43, 0x94, 0xef, 0x4b, + 0x31, 0x12, 0xbd, 0x1c, 0x78, 0xf0, 0x3a, 0xe5, 0x08, 0x7a, 0x29, 0xf0, 0x50, 0x8d, 0xa0, 0x97, + 0x01, 0x0f, 0x95, 0x08, 0x0b, 0x24, 0x83, 0x55, 0x31, 0xf0, 0xc9, 0xeb, 0x96, 0xa2, 0xcc, 0xbb, + 0x54, 0xca, 0xd6, 0x58, 0x0b, 0xa3, 0x8a, 0x19, 0x01, 0xbb, 0xfb, 0x95, 0x20, 0x48, 0x36, 0xb2, + 0xf5, 0x9c, 0x10, 0xbf, 0xb7, 0x28, 0x0c, 0x9f, 0x3c, 0x82, 0x54, 0x2c, 0x17, 0x18, 0x6a, 0xb1, + 0xe0, 0xa1, 0x36, 0x52, 0xfa, 0x49, 0xcf, 0xea, 0x53, 0x43, 0x4e, 0x7a, 0xa4, 0x79, 0x11, 0xc9, + 0xf1, 0xb4, 0x2a, 0x20, 0xfa, 0x34, 0x97, 0xc3, 0xbf, 0x30, 0x33, 0x11, 0x56, 0xfc, 0x82, 0xc6, + 0x78, 0xbd, 0x6d, 0x37, 0x80, 0x41, 0x46, 0xce, 0x12, 0xdf, 0x2e, 0x63, 0xf2, 0xcb, 0xf4, 0x96, + 0x16, 0x62, 0xcc, 0xe2, 0x23, 0xce, 0xc3, 0x15, 0xd1, 0xaf, 0x93, 0xd5, 0x23, 0xf4, 0xb5, 0x4b, + 0x68, 0x2a, 0x20, 0x50, 0xad, 0x70, 0x4a, 0x8f, 0xb3, 0x3b, 0x1c, 0x98, 0x94, 0xf2, 0xdb, 0x65, + 0xba, 0x02, 0x59, 0x7a, 0x8e, 0x52, 0xeb, 0xbf, 0xc6, 0xae, 0xe5, 0x26, 0xf6, 0xd8, 0xa5, 0xd9, + 0x08, 0xbf, 0xac, 0x17, 0x51, 0x64, 0x89, 0xa7, 0x52, 0xb7, 0x3f, 0x79, 0xc2, 0xaf, 0xbb, 0x75, + 0xef, 0x7b, 0xc5, 0xfb, 0x9e, 0x78, 0xcf, 0x4b, 0x94, 0xdf, 0xeb, 0x77, 0x0c, 0xff, 0xd3, 0x30, + 0x46, 0xa0, 0x1e, 0x6c, 0x0e, 0x16, 0xfe, 0xed, 0x72, 0xa2, 0x35, 0x25, 0x5f, 0xbd, 0x6a, 0xc9, + 0x7b, 0x22, 0x68, 0xcf, 0x6f, 0x11, 0x85, 0x4e, 0xb0, 0x6d, 0xe8, 0x2b, 0xca, 0x3d, 0x22, 0x15, + 0x96, 0x98, 0x6c, 0x91, 0x41, 0x23, 0xa1, 0x5d, 0xe8, 0x58, 0x72, 0xe6, 0x5a, 0xd3, 0xeb, 0x94, + 0x9e, 0xc7, 0xe2, 0xb9, 0xb0, 0xde, 0xa7, 0xe0, 0x50, 0x04, 0x33, 0x02, 0x04, 0xf5, 0x4b, 0x10, + 0x73, 0xff, 0x40, 0xba, 0xee, 0x0a, 0xfa, 0x64, 0x82, 0x6c, 0x08, 0x6d, 0xdf, 0x5a, 0x89, 0xc3, + 0x44, 0x21, 0xef, 0x61, 0x27, 0x71, 0x15, 0x4e, 0xa7, 0x01, 0xa9, 0x58, 0x79, 0x53, 0x88, 0xf7, + 0x70, 0xfc, 0xf2, 0x2f, 0x41, 0xac, 0xbd, 0x17, 0x24, 0x40, 0x8b, 0x4d, 0xdf, 0x09, 0xf5, 0x90, + 0xb6, 0x0b, 0x47, 0x38, 0xf2, 0x17, 0xf1, 0xf4, 0xf5, 0x5d, 0x30, 0xb9, 0x66, 0xd2, 0x34, 0x17, + 0xf9, 0xdd, 0x96, 0x8c, 0x53, 0x1e, 0x80, 0xe0, 0x96, 0x48, 0xe5, 0x04, 0xec, 0xae, 0x61, 0x8d, + 0x23, 0x7e, 0xf8, 0x28, 0xd8, 0x45, 0x7f, 0x40, 0x1b, 0xf1, 0x13, 0x6d, 0x0b, 0x7d, 0x6b, 0x5b, + 0x20, 0xeb, 0xdb, 0x56, 0x41, 0xdf, 0x03, 0xe2, 0xd4, 0xb2, 0x9c, 0x22, 0x95, 0xc1, 0xa3, 0xce, + 0x5e, 0xa8, 0x2e, 0x2a, 0xcd, 0x70, 0x17, 0x28, 0xc1, 0x9e, 0x0d, 0xde, 0xf5, 0x58, 0xf2, 0xf3, + 0x40, 0xf1, 0x39, 0x5f, 0x65, 0xe4, 0x8e, 0x6b, 0xb2, 0xb1, 0xaf, 0xa0, 0x80, 0x59, 0x18, 0x8f, + 0xa3, 0xe8, 0x0b, 0xef, 0xf4, 0x56, 0x86, 0xea, 0x0d, 0x95, 0xf6, 0x58, 0xb7, 0x8f, 0xb0, 0x65, + 0x24, 0xf6, 0x7a, 0x0d, 0x17, 0x04, 0x0f, 0xcc, 0xbf, 0xfe, 0xfc, 0xf6, 0x27, 0xd8, 0x55, 0xbe, + 0xe7, 0x95, 0x78, 0x90, 0xa1, 0xa2, 0xf4, 0x35, 0x6a, 0x12, 0x50, 0x6b, 0x8a, 0x30, 0xdf, 0xb6, + 0x85, 0x59, 0x58, 0x1a, 0x21, 0xbc, 0x8e, 0x7c, 0x4c, 0x70, 0xab, 0x12, 0xb6, 0x9a, 0x88, 0x42, + 0x29, 0x04, 0xdd, 0x43, 0xaf, 0xb3, 0xa1, 0xff, 0xac, 0x83, 0x58, 0xd5, 0x78, 0x1d, 0x51, 0xcd, + 0x96, 0x6e, 0xa5, 0x2c, 0x93, 0x68, 0x5e, 0x83, 0xb9, 0xc6, 0x3c, 0x26, 0x9f, 0x19, 0xec, 0x9a, + 0xae, 0x68, 0x68, 0x07, 0x7c, 0xfc, 0xcb, 0xc9, 0x07, 0x18, 0xa7, 0x7b, 0xdc, 0x30, 0x4b, 0x02, + 0x91, 0x60, 0x4b, 0xde, 0x24, 0xe9, 0xfc, 0x15, 0x2c, 0x70, 0xb0, 0xb4, 0xe1, 0xe3, 0xcb, 0x28, + 0xb9, 0xb0, 0x61, 0x28, 0xba, 0x4b, 0xf4, 0x68, 0x31, 0x11, 0xe5, 0xa9, 0xeb, 0x57, 0x44, 0xf0, + 0x83, 0x09, 0x51, 0xd1, 0x79, 0x1a, 0x9d, 0xc1, 0xb7, 0x18, 0xc4, 0x02, 0xf6, 0xdc, 0xb6, 0x44, + 0x09, 0xee, 0x98, 0x48, 0x68, 0x31, 0x28, 0x2e, 0xdf, 0x0e, 0xab, 0xd1, 0x85, 0xa7, 0x5d, 0xde, + 0xbf, 0xc1, 0xdc, 0x4c, 0x03, 0xbc, 0xd5, 0x6b, 0x65, 0xd7, 0x29, 0x5d, 0xe3, 0xd8, 0x88, 0x47, + 0xed, 0xb0, 0x3b, 0xad, 0x18, 0x8f, 0xe4, 0x94, 0x3d, 0xc2, 0xb9, 0x5c, 0xf3, 0x7d, 0xac, 0x3d, + 0x3d, 0x96, 0xd5, 0x34, 0x90, 0xb5, 0xba, 0xd0, 0xbd, 0x0c, 0x5b, 0x8b, 0x64, 0xd8, 0x01, 0x3a, + 0x19, 0xc3, 0x42, 0x0b, 0x37, 0xc9, 0x93, 0x88, 0xe1, 0xf2, 0x24, 0x4f, 0xd2, 0xf1, 0x65, 0x80, + 0x38, 0x50, 0x88, 0xe3, 0x6e, 0x5b, 0xb7, 0x11, 0x11, 0x3d, 0xdd, 0x59, 0x02, 0x24, 0x0b, 0xd5, + 0x3d, 0x3c, 0x58, 0xb4, 0x4d, 0x53, 0xce, 0x5c, 0x64, 0x88, 0x3c, 0x7f, 0x43, 0x2e, 0x7d, 0xf8, + 0x47, 0x6e, 0x78, 0xf5, 0x12, 0xe1, 0xcd, 0x82, 0xb7, 0xb2, 0xc8, 0x53, 0x6c, 0xeb, 0xaa, 0xa1, + 0x95, 0x11, 0x6f, 0xb9, 0x72, 0x2f, 0x95, 0xf5, 0x0d, 0x37, 0xa2, 0xe3, 0x0a, 0xec, 0x75, 0xad, + 0x9a, 0x59, 0xa5, 0x9a, 0x6e, 0x89, 0xce, 0x60, 0xb9, 0xf0, 0xf4, 0x8c, 0xdd, 0x1b, 0x1d, 0xa6, + 0x1c, 0x1e, 0x56, 0x55, 0x65, 0xbb, 0xcb, 0xca, 0x32, 0x79, 0xe9, 0x15, 0xb8, 0x3f, 0xfe, 0x68, + 0x58, 0xbe, 0x94, 0x2b, 0xc6, 0x04, 0xa5, 0x24, 0x22, 0x1e, 0xe2, 0x90, 0x80, 0xaa, 0xdc, 0x8d, + 0x16, 0xa4, 0x50, 0x6c, 0x07, 0xa6, 0x30, 0xf9, 0x0a, 0xea, 0x03, 0x9d, 0xf3, 0x60, 0x43, 0x22, + 0x83, 0x0c, 0x2f, 0xf2, 0xf4, 0x0e, 0x37, 0x2d, 0x2e, 0xa0, 0xfb, 0x8d, 0x5e, 0x83, 0xcf, 0x06, + 0x79, 0xa0, 0x31, 0xec, 0xa8, 0x7c, 0x1d, 0x58, 0xe9, 0x8d, 0x76, 0x17, 0xfa, 0x63, 0xe5, 0xee, + 0x77, 0x1c, 0x0f, 0xa9, 0x36, 0xd6, 0x83, 0xd6, 0x17, 0xda, 0x4e, 0x38, 0xe9, 0xff, 0x4c, 0x10, + 0xbd, 0x01, 0x03, 0xb1, 0xd1, 0xc6, 0x10, 0x77, 0xbd, 0x06, 0x29, 0x75, 0x33, 0xd1, 0x32, 0x01, + 0x2a, 0x28, 0x86, 0x84, 0x8d, 0x28, 0x8c, 0x71, 0x5d, 0x18, 0xc4, 0xbe, 0xd5, 0x7b, 0x65, 0x09, + 0x4b, 0x1a, 0x93, 0x86, 0x98, 0x40, 0xef, 0xf5, 0xc0, 0xff, 0xfe, 0xbf, 0x71, 0xa7, 0xed, 0x15, + 0x41, 0x01, 0xc6, 0x71, 0x63, 0xe4, 0xb1, 0xad, 0x67, 0x77, 0xd2, 0xb5, 0x00, 0xc8, 0x8a, 0x41, + 0xb8, 0x7b, 0x6a, 0x32, 0x06, 0xcd, 0x0a, 0x68, 0x85, 0xe6, 0x84, 0x86, 0x0e, 0x42, 0xb3, 0x53, + 0x76, 0x83, 0x51, 0x72, 0x5b, 0xa0, 0x3f, 0xaf, 0x27, 0xa1, 0x0e, 0x7d, 0x6b, 0x41, 0xc4, 0xc8, + 0xd0, 0xd6, 0x7c, 0xd4, 0xf1, 0xba, 0x83, 0xf0, 0x40, 0x01, 0xd5, 0x85, 0x92, 0x81, 0x29, 0xf6, + 0xb3, 0xd3, 0x10, 0x4f, 0x03, 0x9b, 0xd1, 0x40, 0xef, 0xe6, 0xc9, 0x5f, 0x41, 0x3e, 0xa6, 0x87, + 0x63, 0x24, 0x5c, 0x01, 0x69, 0x69, 0xd6, 0x3e, 0x2a, 0x7a, 0x8a, 0x9b, 0x60, 0xc6, 0x47, 0x16, + 0x65, 0xe9, 0xac, 0x03, 0xc3, 0x58, 0x23, 0xfe, 0x8d, 0x82, 0x71, 0xcc, 0xa4, 0x29, 0x75, 0xb0, + 0x5a, 0x42, 0x62, 0x05, 0xe4, 0x60, 0x13, 0x26, 0xd7, 0x99, 0xd9, 0x85, 0x52, 0xcf, 0x4b, 0x67, + 0x44, 0xcd, 0x3d, 0x07, 0x33, 0xc1, 0xb1, 0x48, 0xeb, 0x8e, 0x8d, 0x92, 0x9e, 0x7f, 0x59, 0x64, + 0x66, 0x87, 0x7a, 0x5a, 0x18, 0x67, 0xe4, 0x29, 0x86, 0xf7, 0xac, 0x48, 0xf4, 0x1b, 0xcb, 0x8f, + 0xb3, 0x8b, 0xa0, 0x64, 0x3c, 0x12, 0xc3, 0x28, 0x27, 0x46, 0xad, 0x9a, 0xee, 0x66, 0x73, 0x3d, + 0x72, 0x98, 0x94, 0x70, 0x07, 0x67, 0xe4, 0x00, 0x97, 0xbe, 0x1e, 0x8b, 0x29, 0x10, 0x14, 0xd6, + 0x7a, 0x5d, 0x43, 0xc9, 0x49, 0xd9, 0xbe, 0xb9, 0x93, 0x04, 0x78, 0x92, 0xa4, 0x55, 0xf7, 0xab, + 0x16, 0x95, 0xd3, 0xd4, 0xe4, 0x9d, 0x33, 0xd5, 0x56, 0x95, 0xf1, 0xa8, 0x20, 0x10, 0x9f, 0x45, + 0xb9, 0xf7, 0xe8, 0x3e, 0xf8, 0xda, 0x56, 0x22, 0x47, 0x4a, 0xae, 0xcc, 0x4e, 0x8b, 0xd6, 0x1a, + 0xd3, 0x1d, 0xd1, 0xb6, 0xc7, 0x39, 0x9c, 0x54, 0x95, 0xf2, 0x11, 0xcf, 0xf1, 0x1a, 0x72, 0x22, + 0xf6, 0x81, 0x79, 0xa0, 0x0d, 0xd0, 0x9b, 0xd5, 0x91, 0xa3, 0x94, 0x9e, 0x06, 0x7c, 0x2d, 0x10, + 0x3b, 0x44, 0x36, 0x43, 0x3a, 0x45, 0x0a, 0xf7, 0x4f, 0xe3, 0x33, 0xe4, 0x92, 0xb3, 0x73, 0x8e, + 0x27, 0x32, 0x75, 0x0e, 0x32, 0x47, 0x41, 0x57, 0xc2, 0x99, 0x33, 0x3a, 0xc8, 0x76, 0xf2, 0x41, + 0x04, 0x43, 0x9f, 0x63, 0x91, 0x32, 0x22, 0x60, 0xa7, 0xd9, 0x9d, 0x2e, 0x13, 0x6c, 0x56, 0x2a, + 0xa1, 0x11, 0xee, 0xc0, 0x7e, 0xcc, 0x60, 0xe0, 0x31, 0xab, 0x93, 0xa7, 0x58, 0x1b, 0x8d, 0x6e, + 0x47, 0xaf, 0x94, 0x06, 0xdc, 0x67, 0xd6, 0xad, 0x5c, 0x2f, 0x2d, 0xa2, 0xa8, 0x9e, 0xee, 0x1b, + 0x8b, 0xb5, 0x2c, 0x3a, 0x55, 0x39, 0xbc, 0x68, 0xea, 0x5c, 0x76, 0x6f, 0x63, 0x94, 0xc7, 0x40, + 0xf3, 0x6d, 0x4b, 0x84, 0x92, 0x5b, 0x28, 0xc8, 0x17, 0x82, 0x32, 0x5d, 0xa9, 0x7d, 0x51, 0x3a, + 0x0d, 0xb1, 0x47, 0x8d, 0x1b, 0xf6, 0xac, 0xf6, 0x86, 0xbd, 0x20, 0x8b, 0x73, 0x03, 0xf8, 0xf0, + 0x39, 0x52, 0xe2, 0x56, 0x63, 0x29, 0x9f, 0x52, 0xde, 0x49, 0xd4, 0x78, 0xd4, 0x15, 0x31, 0xdc, + 0x60, 0x48, 0x9f, 0x53, 0x7e, 0x6c, 0xac, 0x72, 0x39, 0x55, 0x61, 0x77, 0x5d, 0xa4, 0x43, 0x4c, + 0x78, 0x65, 0x07, 0x18, 0xc3, 0x69, 0x54, 0x98, 0x69, 0xc4, 0x67, 0xfe, 0x42, 0xfc, 0x50, 0x26, + 0x1c, 0x6e, 0x31, 0x06, 0x55, 0x2c, 0x62, 0x70, 0x80, 0x4f, 0xa8, 0x02, 0x04, 0x6c, 0x9d, 0x53, + 0x60, 0xe4, 0xa9, 0x30, 0xbf, 0x80, 0x97, 0x8c, 0x09, 0x32, 0x4e, 0x8f, 0x41, 0x94, 0x49, 0xe5, + 0xbc, 0x90, 0x48, 0xc3, 0xc8, 0x08, 0x01, 0xff, 0xa4, 0xb7, 0x2c, 0x7f, 0x21, 0xdd, 0x82, 0x8a, + 0x9d, 0x6d, 0x63, 0xe2, 0xb2, 0xd5, 0xdc, 0x6b, 0x63, 0xc9, 0x2b, 0xd8, 0x98, 0xa2, 0xf0, 0x44, + 0x5a, 0x84, 0x7f, 0x1b, 0x47, 0x18, 0x20, 0x2d, 0x49, 0x62, 0xdd, 0xb8, 0xcd, 0x8f, 0xd0, 0xb0, + 0x21, 0xaa, 0xda, 0x78, 0x09, 0xbe, 0x58, 0x4e, 0x50, 0xb2, 0x08, 0x64, 0x32, 0x28, 0xf2, 0xeb, + 0x8c, 0x1b, 0xed, 0x48, 0x2a, 0x9e, 0xc8, 0x0c, 0xf5, 0x25, 0x2e, 0xfe, 0x5f, 0xd8, 0x8d, 0x6d, + 0xb6, 0xac, 0xcd, 0x4c, 0x53, 0x56, 0xf9, 0x1f, 0x70, 0x26, 0xd6, 0x8e, 0x41, 0x31, 0x49, 0xc4, + 0xc2, 0x02, 0xa1, 0x62, 0xf0, 0x7c, 0x11, 0x5d, 0xa7, 0x76, 0x2d, 0x35, 0x6e, 0xf5, 0x8d, 0x6e, + 0x83, 0xcc, 0x6f, 0x57, 0x7c, 0xec, 0xfe, 0xfb, 0x61, 0x95, 0x62, 0x51, 0x8e, 0x5b, 0xa8, 0x91, + 0xe3, 0xbe, 0xf3, 0x9f, 0xd1, 0x2c, 0x0c, 0xa9, 0x26, 0xb0, 0x95, 0xb8, 0xeb, 0x08, 0x3a, 0x32, + 0x6a, 0xdc, 0x09, 0x19, 0x59, 0x89, 0x5e, 0x1f, 0x68, 0xb5, 0x67, 0xa2, 0xae, 0xa5, 0x52, 0x29, + 0x0b, 0xec, 0xa9, 0x0f, 0xc9, 0x35, 0x7c, 0xa5, 0x6c, 0x54, 0x0e, 0x40, 0x1e, 0x3a, 0xed, 0x9c, + 0x7b, 0x35, 0xce, 0x8e, 0xd2, 0x84, 0xd0, 0x5d, 0xe5, 0x6e, 0x8b, 0x05, 0x46, 0x55, 0x0d, 0x87, + 0x62, 0x40, 0xd1, 0x3f, 0x67, 0x78, 0x26, 0xb1, 0x2d, 0x48, 0xab, 0xcc, 0x00, 0xb7, 0x3a, 0x2b, + 0x49, 0x26, 0xae, 0x9f, 0x3f, 0x26, 0x9f, 0xe5, 0x3a, 0xb6, 0x98, 0xe0, 0xae, 0x4e, 0x4a, 0x24, + 0x90, 0x5e, 0xe3, 0xf4, 0x32, 0xd0, 0xa6, 0x31, 0x89, 0x7d, 0x11, 0x68, 0xae, 0xb8, 0x2a, 0xca, + 0x40, 0x9f, 0xeb, 0x71, 0x42, 0x7d, 0x8e, 0xfb, 0x3d, 0xbd, 0x19, 0x79, 0xe9, 0x39, 0x43, 0x35, + 0x10, 0x74, 0xa6, 0xec, 0x2a, 0xc8, 0x0d, 0xaf, 0xed, 0x7f, 0x55, 0x1d, 0x7b, 0xf9, 0xfa, 0xe5, + 0xe1, 0x3b, 0x38, 0x73, 0x8f, 0x2f, 0x04, 0x37, 0x88, 0xe5, 0x9c, 0xf2, 0x57, 0x38, 0x13, 0x23, + 0xeb, 0x43, 0xb2, 0x70, 0xff, 0x7e, 0x58, 0xe7, 0xf8, 0x2b, 0x86, 0xd7, 0x96, 0x2d, 0xbf, 0x4d, + 0xc7, 0x31, 0xc0, 0x69, 0x69, 0xec, 0x73, 0xfb, 0x39, 0xc6, 0x93, 0x27, 0xa5, 0x7e, 0xa8, 0x56, + 0xcb, 0xcf, 0x77, 0xee, 0x90, 0xa0, 0x9c, 0xec, 0x6b, 0x68, 0x0f, 0x9e, 0xa1, 0xfe, 0xba, 0x6d, + 0xc7, 0x4f, 0xb3, 0xbd, 0xdb, 0x8f, 0xb0, 0x6d, 0x4f, 0xde, 0x84, 0x77, 0xc1, 0xd4, 0xee, 0x39, + 0x83, 0xce, 0x16, 0xca, 0x58, 0x9b, 0xab, 0x3b, 0xec, 0x10, 0x58, 0xa5, 0xa3, 0x02, 0x90, 0x70, + 0x36, 0x1e, 0x62, 0x40, 0x34, 0xdc, 0xed, 0xf6, 0x60, 0xdb, 0xb2, 0x49, 0x53, 0xe1, 0xd0, 0xc6, + 0x3d, 0x03, 0xf9, 0x40, 0xab, 0x79, 0xd7, 0x45, 0xf6, 0xdf, 0x70, 0xce, 0x4e, 0xf3, 0x2f, 0xb6, + 0xb5, 0xb3, 0x13, 0x5a, 0x2e, 0xa7, 0xdb, 0x41, 0x46, 0x88, 0xc8, 0xef, 0xee, 0x44, 0xf2, 0x72, + 0x71, 0x8c, 0x1b, 0xaf, 0xcf, 0x99, 0xa8, 0x02, 0xec, 0x22, 0x9a, 0xf2, 0x98, 0x59, 0x6e, 0xe4, + 0x6c, 0xda, 0xaf, 0x5d, 0xc8, 0x48, 0xcc, 0x08, 0x7d, 0x27, 0x0d, 0xa7, 0x08, 0x49, 0x01, 0x52, + 0xc3, 0xc1, 0x51, 0xda, 0x81, 0xca, 0xb3, 0x5e, 0x3c, 0x9d, 0x90, 0xa5, 0xce, 0xed, 0xc7, 0xe1, + 0x0f, 0x3f, 0xfe, 0x70, 0x7f, 0x0f, 0x7f, 0xf7, 0xfb, 0x3f, 0x3e, 0x79, 0x72, 0xfb, 0xf1, 0xe0, + 0x87, 0x5e, 0xc7, 0x29, 0xc3, 0x5a, 0x16, 0xa5, 0x11, 0x59, 0xce, 0xf2, 0xf6, 0xa3, 0x2f, 0x6e, + 0x86, 0x48, 0x58, 0x11, 0xf9, 0x82, 0xab, 0xd5, 0x64, 0xa0, 0xdd, 0xfd, 0x10, 0xa4, 0x80, 0xf8, + 0xb4, 0x8c, 0x9f, 0x3f, 0xc8, 0x0e, 0x93, 0x08, 0x9b, 0x8f, 0xed, 0x13, 0xec, 0xa9, 0xae, 0x0c, + 0xbb, 0x90, 0x57, 0xfa, 0x24, 0xd9, 0x8c, 0x74, 0x22, 0x26, 0x93, 0x11, 0x6d, 0xf1, 0x35, 0x0c, + 0xf4, 0xfe, 0xb3, 0x22, 0x71, 0xbe, 0x28, 0x32, 0x14, 0xbc, 0x5f, 0x34, 0xd2, 0xec, 0x0a, 0x47, + 0x93, 0x08, 0x67, 0xb0, 0x75, 0x02, 0x7d, 0xa5, 0x80, 0x17, 0xbe, 0x18, 0x9b, 0x2f, 0xdc, 0xfa, + 0xa3, 0xf5, 0x62, 0x32, 0xb7, 0x5c, 0x11, 0xc5, 0x11, 0x3f, 0x7c, 0xf5, 0x0c, 0xdd, 0x07, 0x2b, + 0x75, 0xef, 0x99, 0x1a, 0xe2, 0xf7, 0xf7, 0xc8, 0x4a, 0x67, 0x17, 0xe1, 0xf8, 0x05, 0x6e, 0xf9, + 0x81, 0x7a, 0x5d, 0x0b, 0xa5, 0xdf, 0x38, 0x53, 0x51, 0x97, 0x03, 0x63, 0x88, 0x91, 0x25, 0x54, + 0x9e, 0x23, 0x51, 0xd8, 0x56, 0xd7, 0x13, 0xe5, 0x41, 0x29, 0x45, 0xcd, 0x8b, 0x4a, 0x94, 0x06, + 0xa1, 0x5c, 0x52, 0x79, 0x5c, 0x1c, 0x43, 0xfd, 0x75, 0x66, 0x16, 0x4e, 0x65, 0xd0, 0x1b, 0x69, + 0xbd, 0xcf, 0xa3, 0x87, 0xb9, 0x72, 0x45, 0x54, 0x28, 0x54, 0xb9, 0x93, 0x42, 0x67, 0x40, 0xbc, + 0x91, 0xd5, 0xc1, 0x73, 0xf9, 0x75, 0x9e, 0x58, 0x8f, 0xf8, 0x8a, 0x6a, 0x4a, 0x30, 0xe2, 0x8a, + 0xac, 0x07, 0x5e, 0x88, 0x42, 0x6e, 0xcf, 0xf0, 0x0f, 0x39, 0x67, 0xdd, 0xfa, 0xb7, 0x1f, 0xd9, + 0x21, 0x13, 0xd5, 0x12, 0x82, 0xd4, 0x9e, 0xd6, 0x38, 0xdd, 0x5a, 0x64, 0x1e, 0x80, 0xcc, 0x7c, + 0x15, 0x04, 0x0b, 0x38, 0x52, 0xee, 0xee, 0xee, 0x2a, 0xde, 0x40, 0xb1, 0x9d, 0x94, 0x4b, 0xc3, + 0x80, 0x57, 0x22, 0x3c, 0x13, 0x67, 0x57, 0xe1, 0x0c, 0x4e, 0xe4, 0xec, 0x83, 0x0b, 0xe7, 0x7d, + 0x72, 0x94, 0xe0, 0x5f, 0x99, 0xe3, 0x94, 0x94, 0xc5, 0x99, 0x23, 0xde, 0x20, 0x0e, 0xd0, 0x88, + 0x16, 0x81, 0xfb, 0x7b, 0x53, 0x49, 0x10, 0xb8, 0x4b, 0x08, 0x25, 0x03, 0x56, 0x57, 0xab, 0x0d, + 0xaa, 0xd8, 0x28, 0x95, 0xe3, 0xd5, 0xc6, 0x27, 0x38, 0x22, 0x75, 0x69, 0x5b, 0x69, 0xc6, 0x8a, + 0x27, 0x5c, 0xa3, 0x00, 0x89, 0x2d, 0x17, 0x86, 0xbf, 0x98, 0x8b, 0x55, 0x25, 0x22, 0xe2, 0x97, + 0xfc, 0x1e, 0x30, 0xc7, 0x95, 0x8b, 0x5b, 0x15, 0xc8, 0xa7, 0x1a, 0x6b, 0x9e, 0xa0, 0xf3, 0x45, + 0x72, 0x0b, 0x99, 0xe1, 0xac, 0x6f, 0x8e, 0x98, 0xe3, 0x02, 0xca, 0x0c, 0x35, 0x0f, 0xc4, 0xa4, + 0x2c, 0x13, 0x38, 0x42, 0xb9, 0x28, 0xfe, 0x1f, 0x88, 0x77, 0xbd, 0x78, 0x28, 0x1a, 0x15, 0x8c, + 0x6a, 0x72, 0x15, 0xef, 0x5f, 0x0e, 0xf6, 0x40, 0x44, 0x87, 0x8b, 0x7c, 0xd8, 0x3a, 0x10, 0x3f, + 0xfe, 0x85, 0x9c, 0xae, 0xb3, 0xc3, 0xd7, 0xaf, 0x09, 0xad, 0xcf, 0xd8, 0x24, 0xf0, 0xa4, 0x97, + 0xaf, 0x84, 0x19, 0x76, 0x1d, 0x61, 0x52, 0x33, 0x0f, 0x54, 0x91, 0x6f, 0xf1, 0xdb, 0x29, 0x28, + 0x15, 0x8d, 0xbc, 0xdd, 0xa9, 0x86, 0x1d, 0xff, 0xf2, 0x0b, 0x19, 0x92, 0x04, 0xfc, 0xbe, 0x96, + 0x67, 0x49, 0x26, 0xde, 0x88, 0x6a, 0x69, 0xbd, 0x8a, 0x3e, 0xf9, 0x87, 0xaa, 0xe8, 0x93, 0xc7, + 0x29, 0xe3, 0xd7, 0x6a, 0xdf, 0x51, 0x31, 0xfb, 0x36, 0xb9, 0x24, 0xfd, 0xb2, 0x52, 0xbb, 0x27, + 0x7e, 0x5d, 0xd7, 0x41, 0xb4, 0x17, 0x69, 0x30, 0x46, 0xdd, 0x4d, 0xa9, 0xc9, 0xf5, 0x3a, 0xc6, + 0x5d, 0xa6, 0x02, 0x73, 0x03, 0x4d, 0x7f, 0x0e, 0xdd, 0x42, 0xcc, 0xf3, 0xa3, 0x1c, 0x81, 0x40, + 0xed, 0x44, 0x6a, 0x45, 0x76, 0x8b, 0xff, 0x2c, 0xc3, 0x56, 0x2f, 0x47, 0x32, 0xe8, 0x3a, 0xb2, + 0x4b, 0xad, 0xd2, 0x10, 0x65, 0xe5, 0x22, 0x4f, 0x2d, 0xb2, 0xb8, 0x8b, 0x0c, 0xa3, 0xe4, 0xb2, + 0xe8, 0xc1, 0x16, 0x11, 0x2d, 0xb6, 0xba, 0x9d, 0x56, 0x16, 0x80, 0x40, 0x99, 0x66, 0x96, 0x8a, + 0x18, 0x83, 0xa4, 0x68, 0x52, 0xef, 0xd7, 0x5c, 0x63, 0x6c, 0x76, 0x6d, 0x91, 0xd4, 0x5d, 0x5b, + 0x24, 0xff, 0x98, 0x6b, 0x8b, 0xe4, 0x6b, 0xaf, 0x2d, 0x92, 0x47, 0x5c, 0x5b, 0x8c, 0x37, 0xbe, + 0xb6, 0xc8, 0xb4, 0x6b, 0x8b, 0x71, 0xc3, 0xb5, 0x45, 0x86, 0x85, 0xd7, 0x5e, 0x5b, 0x1c, 0xbe, + 0xe6, 0xce, 0xac, 0x73, 0x94, 0x09, 0xa4, 0xc9, 0x55, 0xdd, 0x18, 0x05, 0xb1, 0x7c, 0x99, 0x8e, + 0xe7, 0x62, 0x9c, 0xd6, 0x5e, 0x5d, 0xa0, 0x9a, 0x3b, 0x51, 0x48, 0x0d, 0x75, 0x0e, 0xd0, 0x39, + 0x7b, 0x9b, 0xa0, 0xa5, 0xc9, 0xaa, 0x5e, 0x8a, 0xa8, 0xa9, 0xa0, 0xc6, 0xaf, 0xb5, 0x7e, 0x90, + 0xb6, 0x2d, 0x1c, 0x43, 0x96, 0x2b, 0x47, 0xaa, 0x46, 0x0e, 0x50, 0x27, 0xba, 0x96, 0x8f, 0x9c, + 0x61, 0x90, 0x3d, 0x5e, 0x37, 0xe8, 0x9f, 0x3c, 0x91, 0x9a, 0x8a, 0xf3, 0x17, 0xef, 0x3f, 0x1c, + 0xed, 0xbc, 0xf9, 0xb5, 0xc5, 0xf9, 0x33, 0x04, 0x79, 0x4b, 0xfb, 0xef, 0x20, 0x1c, 0xa2, 0xb5, + 0x21, 0xe5, 0x40, 0xf0, 0x62, 0xd5, 0x18, 0x65, 0xf0, 0xd1, 0x09, 0x0d, 0x48, 0x0c, 0x61, 0x38, + 0x2e, 0xb3, 0xe3, 0x21, 0xbb, 0x64, 0xa5, 0x23, 0x91, 0x56, 0x33, 0xac, 0x82, 0x41, 0xe1, 0x8e, + 0x18, 0xed, 0x93, 0x34, 0x64, 0x6f, 0x73, 0xb9, 0x40, 0xb0, 0x4b, 0x24, 0xd1, 0xd6, 0x31, 0x3a, + 0x1f, 0x9b, 0xa5, 0x18, 0x5b, 0xdb, 0xaa, 0xbd, 0xdb, 0x6e, 0x4b, 0x40, 0xaf, 0x11, 0xd4, 0x29, + 0x7a, 0xb7, 0xbd, 0xbf, 0x8e, 0x35, 0xd0, 0xaa, 0x3f, 0x54, 0x73, 0x5c, 0xc6, 0xf1, 0xf3, 0xff, + 0xe5, 0x27, 0xfa, 0xfa, 0xdb, 0x87, 0xaf, 0xb7, 0x5d, 0xad, 0x4c, 0x28, 0xed, 0x95, 0x88, 0xd1, + 0xd2, 0x7a, 0xfe, 0x8f, 0x37, 0x0b, 0x73, 0x3a, 0x7c, 0xfd, 0x21, 0x98, 0x2f, 0x70, 0x24, 0x71, + 0xf3, 0xb0, 0x14, 0xf4, 0x2e, 0x6d, 0xe5, 0x22, 0xf8, 0x1f, 0xd2, 0x28, 0xac, 0xf9, 0x4d, 0xa7, + 0xdf, 0xa7, 0xbb, 0x9c, 0x6d, 0x97, 0xee, 0xe5, 0xf1, 0x1f, 0xbd, 0x89, 0x18, 0xa7, 0x85, 0xef, + 0xbf, 0xa6, 0x89, 0xb5, 0xa5, 0xeb, 0xb7, 0x90, 0x0d, 0x85, 0xeb, 0x51, 0xbe, 0xb6, 0x07, 0x4c, + 0x03, 0xbc, 0xed, 0x1a, 0x4b, 0xc7, 0x9f, 0x93, 0x24, 0x86, 0x2d, 0xf4, 0x75, 0x14, 0x64, 0x64, + 0xea, 0xb8, 0xf3, 0x9a, 0x08, 0x63, 0xb3, 0xbd, 0x3c, 0x0d, 0x82, 0xbd, 0x39, 0x08, 0xb2, 0x20, + 0xdd, 0xc3, 0xf9, 0xf8, 0xe6, 0xd7, 0x3d, 0x1a, 0x0a, 0x12, 0xcb, 0x90, 0x8b, 0xb7, 0x86, 0x72, + 0xae, 0xbe, 0x0d, 0x2f, 0xd2, 0x71, 0xfa, 0xe5, 0xd1, 0x3d, 0x56, 0x25, 0x77, 0x6b, 0xa8, 0xf4, + 0x7c, 0xbe, 0xfb, 0x39, 0x4e, 0x68, 0xe4, 0x81, 0x7c, 0xdb, 0x83, 0x73, 0x6e, 0x3c, 0x17, 0x15, + 0x87, 0x9d, 0x65, 0xb8, 0x33, 0xbb, 0xab, 0xd4, 0x6d, 0xb4, 0xb6, 0xff, 0xd2, 0x21, 0xc8, 0x91, + 0x43, 0x38, 0x90, 0xe0, 0x0e, 0x46, 0xcc, 0xa3, 0x16, 0xc8, 0xbf, 0x3f, 0x2c, 0x51, 0xa4, 0x8c, + 0x1d, 0xae, 0x97, 0x24, 0xe1, 0x10, 0x0b, 0xc2, 0xe5, 0x7e, 0xd8, 0xea, 0xcb, 0xf5, 0x1d, 0x76, + 0xa0, 0x2d, 0x5c, 0x58, 0xf0, 0x72, 0xfb, 0x24, 0x48, 0xc3, 0x71, 0xd4, 0xfa, 0xe5, 0x7a, 0x71, + 0x9d, 0xef, 0x36, 0xd4, 0x66, 0xdc, 0x62, 0x9b, 0xca, 0x6f, 0xd6, 0x8c, 0xb8, 0x9f, 0x5e, 0xbe, + 0x5c, 0x33, 0xe4, 0xe4, 0xe1, 0x81, 0xac, 0x7b, 0x06, 0xd0, 0x75, 0x61, 0x8e, 0xe8, 0x75, 0x6a, + 0x1c, 0xfe, 0xf4, 0x72, 0x3c, 0xce, 0x5a, 0x2f, 0xd1, 0x91, 0x52, 0x64, 0x61, 0x0d, 0xff, 0xdf, + 0xff, 0xf8, 0x9f, 0xff, 0x71, 0xb0, 0x37, 0xfe, 0x63, 0x95, 0x79, 0xfd, 0xd5, 0x95, 0x11, 0x63, + 0xf3, 0x4f, 0xa9, 0xcf, 0xdb, 0x9f, 0xbf, 0xa2, 0x3a, 0x8c, 0x7e, 0x5f, 0xad, 0xc7, 0xf9, 0xa0, + 0xba, 0xf6, 0x7e, 0xd6, 0xb6, 0xf0, 0x1a, 0x87, 0xdb, 0xc6, 0xab, 0x74, 0x79, 0x55, 0xa6, 0x09, + 0x20, 0x97, 0xe6, 0x3f, 0xb8, 0x15, 0x2c, 0x75, 0x06, 0x1d, 0x00, 0xd0, 0xbe, 0x27, 0x26, 0xbd, + 0x86, 0x75, 0xf8, 0xda, 0xe2, 0xab, 0x27, 0xa8, 0x81, 0x9c, 0x7e, 0x70, 0x8a, 0xde, 0x65, 0xb9, + 0x01, 0x47, 0xaf, 0x54, 0x28, 0xc1, 0xd6, 0x8b, 0x90, 0xaa, 0xf4, 0xd8, 0xc3, 0x93, 0x01, 0x0c, + 0xcb, 0x3f, 0x33, 0x7b, 0x61, 0x30, 0xb2, 0xf7, 0xd3, 0xcb, 0xbf, 0xf3, 0xcf, 0x63, 0xd8, 0x2a, + 0xf6, 0xba, 0x9d, 0xe7, 0x9d, 0xe7, 0x7f, 0xef, 0xf7, 0xee, 0xfa, 0xbd, 0xbf, 0x77, 0xbf, 0x87, + 0x7d, 0xd2, 0x1e, 0x8e, 0xe4, 0xef, 0x7a, 0x9d, 0x05, 0xbc, 0x15, 0xd5, 0x78, 0xfd, 0x9f, 0x51, + 0x0d, 0x91, 0x4c, 0xaf, 0xc9, 0xdb, 0x9f, 0xff, 0xcc, 0x8a, 0xf0, 0xd8, 0xcc, 0x30, 0xe7, 0xba, + 0x83, 0x9e, 0x31, 0x5e, 0x10, 0xcc, 0x8b, 0xfe, 0x8d, 0x51, 0x3f, 0xd3, 0x64, 0x6c, 0x23, 0x47, + 0xcb, 0x5e, 0xa2, 0x20, 0xec, 0xe9, 0xc0, 0x37, 0x52, 0x1a, 0xec, 0xa6, 0x7d, 0x6b, 0x0e, 0xdb, + 0x68, 0xba, 0xb5, 0x58, 0x3e, 0xb8, 0xf5, 0x55, 0x96, 0x64, 0xc6, 0x98, 0x4e, 0xf4, 0x31, 0x9d, + 0x94, 0xc6, 0x34, 0x64, 0x9f, 0x98, 0xe3, 0xba, 0xb4, 0xad, 0x80, 0x16, 0x6e, 0x5a, 0xee, 0xf9, + 0xde, 0x53, 0x16, 0x22, 0x3c, 0x5a, 0x5b, 0x32, 0x0f, 0x0c, 0x7c, 0xba, 0x87, 0xff, 0x2e, 0x38, + 0x15, 0xed, 0x7f, 0xf0, 0x79, 0xc9, 0xf1, 0x35, 0xc4, 0xd4, 0x78, 0x1a, 0xa4, 0x6f, 0x90, 0xe0, + 0xda, 0x76, 0xf8, 0xdd, 0x52, 0xca, 0x25, 0x72, 0x95, 0xb9, 0x0b, 0x22, 0x76, 0x15, 0x21, 0x3e, + 0xd9, 0x20, 0x75, 0x5b, 0x64, 0x6f, 0xfe, 0x26, 0x4d, 0xe6, 0x12, 0x21, 0x47, 0x7b, 0x43, 0x3f, + 0x1c, 0x91, 0x11, 0x15, 0xb8, 0x3a, 0x5f, 0xe9, 0xea, 0x8b, 0x3d, 0x24, 0xde, 0xc6, 0xbf, 0x57, + 0xf9, 0x3c, 0x1a, 0xb6, 0xfe, 0x3f, 0x6a, 0xc8, 0xab, 0x65, 0x74, 0xbb, 0x01, 0x00 }; diff --git a/wled00/improv.cpp b/wled00/improv.cpp index ae3b249d..a1ff64bb 100644 --- a/wled00/improv.cpp +++ b/wled00/improv.cpp @@ -189,7 +189,7 @@ void sendImprovInfoResponse() { out[11] = 4; //Firmware len ("WLED") out[12] = 'W'; out[13] = 'L'; out[14] = 'E'; out[15] = 'D'; uint8_t lengthSum = 17; - uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b2.20/%i"),VERSION); + uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b15.21/%i"),VERSION); out[16] = vlen; lengthSum += vlen; uint8_t hlen = 7; #ifdef ESP8266 diff --git a/wled00/wled.h b/wled00/wled.h index 49e13d7f..d1435d1f 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2303321 +#define VERSION 23040200 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG From 27e891510686bd286d66c9cc95265b0c5ccc256b Mon Sep 17 00:00:00 2001 From: Ewoud Date: Sun, 2 Apr 2023 13:42:12 +0200 Subject: [PATCH 09/27] Versioning: 0.14.0-b15 (use the .21 extension on future commits) --- package-lock.json | 4 ++-- package.json | 2 +- wled00/data/index.js | 2 +- wled00/improv.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97497117..e76741a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wled", - "version": "0.14.0-b15.21", + "version": "0.14.0-b15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wled", - "version": "0.14.0-b15.21", + "version": "0.14.0-b15", "license": "ISC", "dependencies": { "clean-css": "^4.2.3", diff --git a/package.json b/package.json index a3297fa4..2c8502a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.14.0-b15.21", + "version": "0.14.0-b15", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/wled00/data/index.js b/wled00/data/index.js index 50459b17..e5026955 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -671,7 +671,7 @@ function populateInfo(i) if (i.ver.includes("0.14.1")) vcn = "Sitting Ducks"; // easter egg if (i.ver.includes("0.14.0")) vcn = "Lupo"; // check for MM versioning scheme if (i.ver.includes("0.14.0-b2.2")) vcn = "Sitting Ducks"; // early easter egg - if (i.ver.includes("0.14.0-b15.21")) vcn = "Lupo"; + if (i.ver.includes("0.14.0-b15")) vcn = "Lupo"; cn += `v${i.ver}  "${vcn}"

(WLEDMM_${i.ver} ${i.rel}.bin)

build ${i.vid}


${urows} ${urows===""?'':''} diff --git a/wled00/improv.cpp b/wled00/improv.cpp index a1ff64bb..87efb97e 100644 --- a/wled00/improv.cpp +++ b/wled00/improv.cpp @@ -189,7 +189,7 @@ void sendImprovInfoResponse() { out[11] = 4; //Firmware len ("WLED") out[12] = 'W'; out[13] = 'L'; out[14] = 'E'; out[15] = 'D'; uint8_t lengthSum = 17; - uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b15.21/%i"),VERSION); + uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b15/%i"),VERSION); out[16] = vlen; lengthSum += vlen; uint8_t hlen = 7; #ifdef ESP8266 From 3dd787314358987487a1fe624ab5aa2fe18193ee Mon Sep 17 00:00:00 2001 From: Ewoud Date: Sun, 2 Apr 2023 15:50:09 +0200 Subject: [PATCH 10/27] First b15 daily build: add fastled usermod --- package-lock.json | 4 +- package.json | 2 +- usermods/usermod_v2_fastled/readme.md | 10 + .../usermod_v2_fastled/usermod_v2_fastled.h | 358 ++++++++++++++++++ wled00/const.h | 1 + wled00/data/index.js | 2 +- wled00/improv.cpp | 2 +- wled00/usermods_list.cpp | 6 + wled00/wled.h | 2 +- 9 files changed, 381 insertions(+), 6 deletions(-) create mode 100644 usermods/usermod_v2_fastled/readme.md create mode 100644 usermods/usermod_v2_fastled/usermod_v2_fastled.h diff --git a/package-lock.json b/package-lock.json index e76741a8..97497117 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wled", - "version": "0.14.0-b15", + "version": "0.14.0-b15.21", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wled", - "version": "0.14.0-b15", + "version": "0.14.0-b15.21", "license": "ISC", "dependencies": { "clean-css": "^4.2.3", diff --git a/package.json b/package.json index 2c8502a3..a3297fa4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.14.0-b15", + "version": "0.14.0-b15.21", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/usermods/usermod_v2_fastled/readme.md b/usermods/usermod_v2_fastled/readme.md new file mode 100644 index 00000000..93707655 --- /dev/null +++ b/usermods/usermod_v2_fastled/readme.md @@ -0,0 +1,10 @@ +# Usermods API v2 example usermod + +In this usermod file you can find the documentation on how to take advantage of the new version 2 usermods! + +## Installation + +Copy `usermod_v2_fastled.h` to the wled00 directory. +Uncomment the corresponding lines in `usermods_list.cpp` and compile! +_(You shouldn't need to actually install this, it does nothing useful)_ + diff --git a/usermods/usermod_v2_fastled/usermod_v2_fastled.h b/usermods/usermod_v2_fastled/usermod_v2_fastled.h new file mode 100644 index 00000000..ae073445 --- /dev/null +++ b/usermods/usermod_v2_fastled/usermod_v2_fastled.h @@ -0,0 +1,358 @@ +#pragma once + +#include "wled.h" + +//WLEDMM + + +// Polar basics demo for the +// FastLED Podcast #2 +// https://www.youtube.com/watch?v=KKjFRZFBUrQ +// +// VO.1 preview version +// by Stefan Petrick 2023 +// This code is licenced under a +// Creative Commons Attribution +// License CC BY-NC 3.0 + +class PolarBasics { + private: + + public: + float runtime; // elapse ms since startup + float newdist, newangle; // parameters for image reconstruction + float z; // 3rd dimension for the 3d noise function + float offset_x, offset_y; // wanna shift the cartesians during runtime? + float scale_x, scale_y; // cartesian scaling in 2 dimensions + float dist, angle; // the actual polar coordinates + + int x, y; // the cartesian coordiantes + int num_x;// = WIDTH; // horizontal pixel count + int num_y;// = HEIGHT; // vertical pixel count + + // Background for setting the following 2 numbers: the FastLED inoise16() function returns + // raw values ranging from 0-65535. In order to improve contrast we filter this output and + // stretch the remains. In histogram (photography) terms this means setting a blackpoint and + // a whitepoint. low_limit MUST be smaller than high_limit. + + uint16_t low_limit;// = 30000; // everything lower drawns in black + // higher numer = more black & more contrast present + uint16_t high_limit;// = 50000; // everything higher gets maximum brightness & bleeds out + // lower number = the result will be more bright & shiny + + float center_x;// = (num_x / 2) - 0.5; // the reference point for polar coordinates + float center_y;// = (num_y / 2) - 0.5; // (can also be outside of the actual xy matrix) + //float center_x = 20; // the reference point for polar coordinates + //float center_y = 20; + + //WLEDMM: assign 32x32 fixed for the time being + float theta [32] [32]; // look-up table for all angles + float distance[32] [32]; // look-up table for all distances + float vignette[32] [32]; + float inverse_vignette[32] [32]; + + // std::vector> theta; // look-up table for all angles + // std::vector> distance; // look-up table for all distances + // std::vector> vignette; + // std::vector> inverse_vignette; + + float spd; // can be used for animation speed manipulation during runtime + + float show1, show2, show3, show4, show5; // to save the rendered values of all animation layers + float red, green, blue; // for the final RGB results after the colormapping + + float c, d, e, f; // factors for oscillators + float linear_c, linear_d, linear_e, linear_f; // linear offsets + float angle_c, angle_d, angle_e, angle_f; // angle offsets + float noise_angle_c, noise_angle_d, noise_angle_e, noise_angle_f; // angles based on linear noise travel + float dir_c, dir_d, dir_e, dir_f; // direction multiplicators + + void init () { + num_x = SEGMENT.virtualWidth(); // horizontal pixel count + num_y = SEGMENT.virtualHeight(); // vertical pixel count + low_limit = 30000; // everything lower drawns in black + // higher numer = more black & more contrast present + high_limit = 50000; // everything higher gets maximum brightness & bleeds out + // lower number = the result will be more bright & shiny + center_x = (num_x / 2) - 0.5; // the reference point for polar coordinates + center_y = (num_y / 2) - 0.5; // (can also be outside of the actual xy matrix) + + //allocate memory for the 2D arrays + // theta.resize(num_x, std::vector(num_y, 0)); + // distance.resize(num_x, std::vector(num_y, 0)); + // vignette.resize(num_x, std::vector(num_y, 0)); + // inverse_vignette.resize(num_x, std::vector(num_y, 0)); + } + + PolarBasics() { + USER_PRINTLN("constructor"); + } + ~PolarBasics() { + USER_PRINTLN("destructor"); + } + + void speedratiosAndOscillators() { + // set speedratios for the offsets & oscillators + + spd = 0.05 ; + c = 0.013 ; + d = 0.017 ; + e = 0.2 ; + f = 0.007 ; + + calculate_oscillators(); // get linear offsets and oscillators going + } + + void forLoop() { + // pick polar coordinates from look the up table + + dist = distance [x] [y]; + angle = theta [y] [x]; + + // Generation of one layer. Explore the parameters and what they do. + + scale_x = 10000; // smaller value = zoom in, bigger structures, less detail + scale_y = 10000; // higher = zoom out, more pixelated, more detail + z = 0; // must be >= 0 + newangle = angle + angle_c; + newdist = dist; + offset_x = 0; // must be >=0 + offset_y = 0; // must be >=0 + + show1 = render_pixel(); + + + // Colormapping - Assign rendered values to colors + + red = show1; + green = 0; + blue = 0; + + // Check the final results. + // Discard faulty RGB values & write the valid results into the framebuffer. + + write_pixel_to_framebuffer(); + } + + void calculate_oscillators() { + + runtime = millis(); // save elapsed ms since start up + + runtime = runtime * spd; // global anaimation speed + + linear_c = runtime * c; // some linear rising offsets 0 to max + linear_d = runtime * d; + linear_e = runtime * e; + linear_f = runtime * f; + + angle_c = fmodf(linear_c, 2 * PI); // some cyclic angle offsets 0 to 2*PI + angle_d = fmodf(linear_d, 2 * PI); + angle_e = fmodf(linear_e, 2 * PI); + angle_f = fmodf(linear_f, 2 * PI); + + dir_c = sinf(angle_c); // some direction oscillators -1 to 1 + dir_d = sinf(angle_d); + dir_e = sinf(angle_e); + dir_f = sinf(angle_f); + + uint16_t noi; + noi = inoise16(10000 + linear_c * 100000); // some noise controlled angular offsets + noise_angle_c = map_float(noi, 0, 65535 , 0, 4*PI); + noi = inoise16(20000 + linear_d * 100000); + noise_angle_d = map_float(noi, 0, 65535 , 0, 4*PI); + noi = inoise16(30000 + linear_e * 100000); + noise_angle_e = map_float(noi, 0, 65535 , 0, 4*PI); + noi = inoise16(40000 + linear_f * 100000); + noise_angle_f = map_float(noi, 0, 65535 , 0, 4*PI); + } + + + // given a static polar origin we can precalculate + // all the (expensive) polar coordinates + + void render_polar_lookup_table() { + + for (int xx = 0; xx < num_x; xx++) { + for (int yy = 0; yy < num_y; yy++) { + + float dx = xx - center_x; + float dy = yy - center_y; + + distance[xx] [yy] = hypotf(dx, dy); + theta[xx] [yy] = atan2f(dy, dx); + + } + } + } + + // convert polar coordinates back to cartesian + // & render noise value there + + float render_pixel() { + + // convert polar coordinates back to cartesian ones + + float newx = (offset_x + center_x - (cosf(newangle) * newdist)) * scale_x; + float newy = (offset_y + center_y - (sinf(newangle) * newdist)) * scale_y; + + // render noisevalue at this new cartesian point + + uint16_t raw_noise_field_value = inoise16(newx, newy, z); + + // a lot is happening here, namely + // A) enhance histogram (improve contrast) by setting the black and white point + // B) scale the result to a 0-255 range + // it's the contrast boosting & the "colormapping" (technically brightness mapping) + + if (raw_noise_field_value < low_limit) raw_noise_field_value = low_limit; + if (raw_noise_field_value > high_limit) raw_noise_field_value = high_limit; + + float scaled_noise_value = map_float(raw_noise_field_value, low_limit, high_limit, 0, 255); + + return scaled_noise_value; + + // done, we've just rendered one color value for one single pixel + } + + // float mapping maintaining 32 bit precision + // we keep values with high resolution for potential later usage + + float map_float(float x, float in_min, float in_max, float out_min, float out_max) { + + float result = (x-in_min) * (out_max-out_min) / (in_max-in_min) + out_min; + if (result < out_min) result = out_min; + if( result > out_max) result = out_max; + + return result; + } + + // Avoid any possible color flicker by forcing the raw RGB values to be 0-255. + // This enables to play freely with random equations for the colormapping + // without causing flicker by accidentally missing the valid target range. + + void rgb_sanity_check() { + + // rescue data if possible: when negative return absolute value + if (red < 0) red = abs(red); + if (green < 0) green = abs(green); + if (blue < 0) blue = abs(blue); + + // discard everything above the valid 0-255 range + if (red > 255) red = 255; + if (green > 255) green = 255; + if (blue > 255) blue = 255; + + } + + void write_pixel_to_framebuffer() { + + // the final color values shall not exceed 255 (to avoid flickering pixels caused by >255 = black...) + // negative values * -1 + + rgb_sanity_check(); + + CRGB finalcolor = CRGB(red, green, blue); + + // write the rendered pixel into the framebutter + SEGMENT.setPixelColorXY(x,y,finalcolor); + } + + // precalculate a radial brightness mask + + void render_vignette_table(float filter_radius) { + + for (int xx = 0; xx < num_x; xx++) { + for (int yy = 0; yy < num_y; yy++) { + + vignette[xx] [yy] = (filter_radius - distance[xx] [yy]) / filter_radius; + if (vignette[xx] [yy] < 0) vignette[xx] [yy] = 0; + } + } + } + +}; + +//effect functions +uint16_t mode_PolarBasics(void) { + + PolarBasics* pb; + + + if(!SEGENV.allocateData(sizeof(PolarBasics))) {SEGMENT.fill(SEGCOLOR(0)); return 350;} //mode_static(); //allocation failed + + pb = reinterpret_cast(SEGENV.data); + + //first time init + if (SEGENV.call == 0) { + + USER_PRINTF("mode_PolarBasics %d\n", sizeof(PolarBasics)); + // if (SEGENV.call == 0) SEGMENT.setUpLeds(); + + pb->init(); + + pb->render_polar_lookup_table(); // precalculate all polar coordinates + // to improve the framerate + pb->render_vignette_table(9.5); // the number is the desired radius in pixel + // WIDTH/2 generates a circle + } + + pb->speedratiosAndOscillators(); + + // ...and now let's generate a frame + + for (pb->x = 0; pb->x < pb->num_x; pb->x++) { + for (pb->y = 0; pb->y < pb->num_y; pb->y++) { + + pb->forLoop(); + + } + } + + // FastLED.show(); + + return FRAMETIME; +} + +static const char _data_FX_mode_PolarBasics[] PROGMEM = "💡Polar Basics ☾@;;;2"; + +//class name. Use something descriptive and leave the ": public Usermod" part :) +class FastledUsermod : public Usermod { + + private: + + + public: + + FastledUsermod(const char *name, bool enabled):Usermod(name, enabled) {} //WLEDMM + + void setup() { + strip.addEffect(255, &mode_PolarBasics, _data_FX_mode_PolarBasics); + + initDone = true; + } + + + void connected() { + } + + + void loop() { + if (!enabled || strip.isUpdating()) return; + + // do your magic here + if (millis() - lastTime > 1000) { + //Serial.println("I'm alive!"); + lastTime = millis(); + } + } + + + uint16_t getId() + { + return USERMOD_ID_FASTLED; + } + +}; + + + diff --git a/wled00/const.h b/wled00/const.h index 7d2c989b..288b4b3f 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -136,6 +136,7 @@ #define USERMOD_ID_ARTIFX 90 //Usermod "usermod_v2_artifx.h" #define USERMOD_ID_WEATHER 91 //Usermod "usermod_v2_weather.h" #define USERMOD_ID_GAMES 92 //Usermod "usermod_v2_games.h" +#define USERMOD_ID_FASTLED 93 //Usermod "usermod_v2_fastled.h" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot diff --git a/wled00/data/index.js b/wled00/data/index.js index e5026955..50459b17 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -671,7 +671,7 @@ function populateInfo(i) if (i.ver.includes("0.14.1")) vcn = "Sitting Ducks"; // easter egg if (i.ver.includes("0.14.0")) vcn = "Lupo"; // check for MM versioning scheme if (i.ver.includes("0.14.0-b2.2")) vcn = "Sitting Ducks"; // early easter egg - if (i.ver.includes("0.14.0-b15")) vcn = "Lupo"; + if (i.ver.includes("0.14.0-b15.21")) vcn = "Lupo"; cn += `v${i.ver}  "${vcn}"

(WLEDMM_${i.ver} ${i.rel}.bin)

build ${i.vid}


${urows} ${urows===""?'':''} diff --git a/wled00/improv.cpp b/wled00/improv.cpp index 87efb97e..a1ff64bb 100644 --- a/wled00/improv.cpp +++ b/wled00/improv.cpp @@ -189,7 +189,7 @@ void sendImprovInfoResponse() { out[11] = 4; //Firmware len ("WLED") out[12] = 'W'; out[13] = 'L'; out[14] = 'E'; out[15] = 'D'; uint8_t lengthSum = 17; - uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b15/%i"),VERSION); + uint8_t vlen = sprintf_P(out+lengthSum,PSTR("0.14.0-b15.21/%i"),VERSION); out[16] = vlen; lengthSum += vlen; uint8_t hlen = 7; #ifdef ESP8266 diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 943ccaaf..a839e2d9 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -205,6 +205,9 @@ #ifdef USERMOD_GAMES #include "../usermods/usermod_v2_games/usermod_v2_games.h" #endif +#ifdef USERMOD_FASTLED +#include "../usermods/usermod_v2_fastled/usermod_v2_fastled.h" +#endif void registerUsermods() { @@ -391,4 +394,7 @@ void registerUsermods() #ifdef USERMOD_GAMES usermods.add(new GamesUsermod()); #endif + #ifdef USERMOD_GAMES + usermods.add(new FastledUsermod("Fastled", true)); + #endif } diff --git a/wled00/wled.h b/wled00/wled.h index d1435d1f..990cf96f 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 23040200 +#define VERSION 2304021 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG From 329899f4108d741c55396d2e9ec97ada44ff1ce7 Mon Sep 17 00:00:00 2001 From: Ewoud Date: Sun, 2 Apr 2023 15:56:27 +0200 Subject: [PATCH 11/27] ooops --- wled00/usermods_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index a839e2d9..02af154a 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -394,7 +394,7 @@ void registerUsermods() #ifdef USERMOD_GAMES usermods.add(new GamesUsermod()); #endif - #ifdef USERMOD_GAMES + #ifdef USERMOD_FASTLED usermods.add(new FastledUsermod("Fastled", true)); #endif } From bd477624f0127b7357cc7c4f22ef7749f62b3855 Mon Sep 17 00:00:00 2001 From: TroyHacks <5659019+troyhacks@users.noreply.github.com> Date: Mon, 3 Apr 2023 22:41:29 -0400 Subject: [PATCH 12/27] Working proof of concept for ES8388 --- usermods/audioreactive/audio_source.h | 338 +++++++++++++++++++++++--- 1 file changed, 308 insertions(+), 30 deletions(-) diff --git a/usermods/audioreactive/audio_source.h b/usermods/audioreactive/audio_source.h index 2bcab435..84eb8df8 100644 --- a/usermods/audioreactive/audio_source.h +++ b/usermods/audioreactive/audio_source.h @@ -485,35 +485,19 @@ public: int8_t pin_ES7243_SCL; }; +/* ES8388 Microphone + This is an I2S microphone that requires ininitialization over + I2C before I2S data can be received +*/ + class ES8388Source : public I2SSource { - private: - - void _es8388InitAdc() { - DEBUGSR_PRINTF("\nAR: _es8388InitAdc\n"); - - if (!es8388.init()) { - Serial.println("_es8388InitAdc init Fail\n"); - return; - } - es8388.inputSelect(IN2); // IN2 Line-In - es8388.setInputGain(8); - es8388.outputSelect(OUT1); // OUT1 - Headphones - es8388.setOutputVolume(12); - es8388.mixerSourceSelect(MIXADC, MIXADC); - es8388.mixerSourceControl(DACOUT); - es8388.setALCmode(MUSIC); - es8388.analogBypass(true); - uint8_t *reg; - for (uint8_t i = 0; i < 53; i++) { - reg = es8388.readAllReg(); - DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); - } - } public: ES8388Source(int sampleRate, int blockSize, int sdaPin, int sclPin) : I2SSource(sampleRate, blockSize) { _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; + // _config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX), + // _config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT; pin_ES8388_SDA = sdaPin; pin_ES8388_SCL = sclPin; DEBUGSR_PRINTF("\nAR: ES8388Source\n"); @@ -529,14 +513,57 @@ public: return; } - _es8388InitAdc(); - // i2s - // PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); - // WRITE_PERI_REG(PIN_CTRL, 0xFFF0); - // i2s_set_sample_rates(I2S_NUM_0, 22050); + ES8388 es8388 = ES8388(pin_ES8388_SDA, pin_ES8388_SCL, 400000); + + if (!es8388.init()) { + Serial.println("_es8388InitAdc init Fail\n"); + return; + } + + es8388.inputSelect(IN2); + es8388.setInputGain(8); + es8388.outputSelect(OUT2); + es8388.setOutputVolume(12); + es8388.mixerSourceSelect(MIXIN2, MIXIN2); + es8388.mixerSourceControl(DACOUT); + es8388.setALCmode(DISABLE); + es8388.analogBypass(true); + + bool pf = es8388.pub_write_reg(0x09, 0x00); // mutes onboard microphones (a bit) and highly reduces distortion + + uint8_t *reg; + for (uint8_t i = 0; i < 53; i++) { + reg = es8388.readAllReg(); + DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); + } + + PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); + WRITE_PERI_REG(PIN_CTRL, 0xFFF0); DEBUGSR_PRINTF("\nAR: ES8388Source calling I2SSource::initialize\n"); - I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); + // I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); + + i2s_config_t i2s_config = { + .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), + .sample_rate = 22050, + .bits_per_sample = I2S_SAMPLE_RESOLUTION, + .channel_format = I2S_MIC_CHANNEL, + .communication_format = I2S_COMM_FORMAT_I2S, + .intr_alloc_flags = 0, + .dma_buf_count = 8, + .dma_buf_len = 512, + .use_apll = false, + .tx_desc_auto_clear = true, + .fixed_mclk = 0}; + + i2s_pin_config_t pin_config = { + .bck_io_num = 27, .ws_io_num = 25, .data_out_num = 26, .data_in_num = 35}; + + i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); + i2s_set_pin(I2S_NUM_0, &pin_config); + + _initialized = true; + } void deinitialize() { @@ -549,9 +576,260 @@ public: private: int8_t pin_ES8388_SDA; int8_t pin_ES8388_SCL; - ES8388 es8388 = ES8388(18, 23, 400000); + }; +// class ES8388Source : public I2SSource { +// private: +// // I2C initialization functions for ES8388 +// void _es8388I2cBegin() { +// bool i2c_initialized = Wire.begin(pin_ES8388_SDA, pin_ES8388_SCL, 100000U); +// if (i2c_initialized == false) { +// ERRORSR_PRINTLN(F("AR: ES8388 failed to initialize I2C bus driver.")); +// } +// } + +// void _es8388I2cWrite(uint8_t reg, uint8_t val) { +// #ifndef ES8388_ADDR +// Wire.beginTransmission(0x10); +// #define ES8388_ADDR 0x10 // default address +// #else +// Wire.beginTransmission(ES7243_ADDR); +// #endif +// Wire.write((uint8_t)reg); +// Wire.write((uint8_t)val); +// uint8_t i2cErr = Wire.endTransmission(); // i2cErr == 0 means OK +// if (i2cErr != 0) { +// DEBUGSR_PRINTF("AR: ES8388 I2C write failed with error=%d (addr=0x%X, reg 0x%X, val 0x%X).\n", i2cErr, ES8388_ADDR, reg, val); +// } +// } + +// void _es8388InitAdc() { + +// // _es8388I2cBegin(); + +// // _es8388I2cWrite(0x08, 0x00); +// // _es8388I2cWrite(0x02, 0xFF); +// // _es8388I2cWrite(0x2B, 0x80); +// // _es8388I2cWrite(0x00, 0x05); +// // _es8388I2cWrite(0x01, 0x40); + +// // _es8388I2cWrite(0x03, 0x00); +// // _es8388I2cWrite(0x0a, 0x50); +// // _es8388I2cWrite(0x0b, 0x80); +// // _es8388I2cWrite(0x09, 0x77); +// // _es8388I2cWrite(0x0c, 0x0C); +// // _es8388I2cWrite(0x0d, 0x02); +// // _es8388I2cWrite(0x10, 0x00); +// // _es8388I2cWrite(0x11, 0x00); + +// // _es8388I2cWrite(0x12, 0xEA); +// // _es8388I2cWrite(0x13, 0xC0); +// // _es8388I2cWrite(0x14, 0x12); +// // _es8388I2cWrite(0x15, 0x06); +// // _es8388I2cWrite(0x16, 0xC3); + +// // _es8388I2cWrite(0x04, 0x3C); +// // _es8388I2cWrite(0x17, 0x18); +// // _es8388I2cWrite(0x18, 0x02); +// // _es8388I2cWrite(0x19, 0x00); +// // _es8388I2cWrite(0x1a, 0x00); +// // _es8388I2cWrite(0x1b, 0x00); + +// // _es8388I2cWrite(0x26, 0x09); +// // _es8388I2cWrite(0x27, 0x50); +// // _es8388I2cWrite(0x28, 0x38); +// // _es8388I2cWrite(0x29, 0x38); +// // _es8388I2cWrite(0x2a, 0x50); + +// // _es8388I2cWrite(0x2e, 0x00); +// // _es8388I2cWrite(0x2f, 0x00); +// // _es8388I2cWrite(0x30, 0x00); +// // _es8388I2cWrite(0x31, 0x00); + +// // ... and now the "config", lol + +// // _es8388I2cWrite(0x09, 0x00); +// // _es8388I2cWrite(0x04, 0x0C); +// // _es8388I2cWrite(0x30, 12); +// // _es8388I2cWrite(0x31, 12); + +// // _es8388I2cWrite(0x26, (1<<3)|1); + +// // _es8388I2cWrite(0x27, (false << 7) | (true << 6) | (2 << 3)); +// // _es8388I2cWrite(0x28, (false << 7) | (true << 6) | (2 << 3)); + +// // _es8388I2cWrite(0x12, 0x00); + +// // _es8388I2cWrite(0x09, 0x00); + +// #include "ES8388.h" + +// ES8388 es8388 = ES8388(pin_ES8388_SDA, pin_ES8388_SCL, 400000); + +// if (!es8388.init()) { +// Serial.println("_es8388InitAdc init Fail\n"); +// return; +// } + +// es8388.inputSelect(IN2); +// es8388.setInputGain(0); +// es8388.outputSelect(OUT2); +// es8388.setOutputVolume(8); +// es8388.mixerSourceSelect(MIXIN2, MIXIN2); +// es8388.mixerSourceControl(DACOUT); +// es8388.setALCmode(MUSIC); +// es8388.analogBypass(true); + +// bool pf = es8388.pub_write_reg(0x09, 0x00); // mutes onboard microphones (a bit) and highly reduces distortion + +// uint8_t *reg; +// for (uint8_t i = 0; i < 53; i++) { +// reg = es8388.readAllReg(); +// DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); +// } + +// } + +// public: +// ES8388Source(SRate_t sampleRate, int blockSize, float sampleScale = 1.0f, bool i2sMaster=true) : +// I2SSource(sampleRate, blockSize, sampleScale, i2sMaster) { +// _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; +// }; + +// void initialize(int8_t sdaPin, int8_t sclPin, int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin, int8_t mclkPin) { + +// // check that pins are valid +// if ((sdaPin < 0) || (sclPin < 0)) { +// ERRORSR_PRINTF("\nAR: invalid ES8388 I2C pins: SDA=%d, SCL=%d\n", sdaPin, sclPin); +// return; +// } + +// if ((i2sckPin < 0) || (mclkPin < 0)) { +// ERRORSR_PRINTF("\nAR: invalid I2S pin: SCK=%d, MCLK=%d\n", i2sckPin, mclkPin); +// return; +// } + +// // Reserve SDA and SCL pins of the I2C interface +// PinManagerPinType es8388Pins[2] = { { sdaPin, true }, { sclPin, true } }; +// if (!pinManager.allocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C)) { +// pinManager.deallocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C); +// ERRORSR_PRINTF("\nAR: Failed to allocate ES8388 I2C pins: SDA=%d, SCL=%d\n", sdaPin, sclPin); +// return; +// } + +// pin_ES8388_SDA = sdaPin; +// pin_ES8388_SCL = sclPin; + +// // First route mclk, then configure ADC over I2C, then configure I2S +// _es8388InitAdc(); +// // I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); + +// PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); +// WRITE_PERI_REG(PIN_CTRL, 0xFFF0); + +// i2s_config_t i2s_config = { +// .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), +// .sample_rate = 22050, +// .bits_per_sample = I2S_SAMPLE_RESOLUTION, +// .channel_format = I2S_MIC_CHANNEL, +// .communication_format = I2S_COMM_FORMAT_I2S, +// .intr_alloc_flags = 0, +// .dma_buf_count = 8, +// .dma_buf_len = 512, +// .use_apll = false, +// .tx_desc_auto_clear = true, +// .fixed_mclk = 0}; + +// i2s_pin_config_t pin_config = { +// .bck_io_num = 27, .ws_io_num = 25, .data_out_num = 26, .data_in_num = 35}; + +// i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); +// i2s_set_pin(I2S_NUM_0, &pin_config); + +// _initialized = true; + +// } + +// void deinitialize() { +// // Release SDA and SCL pins of the I2C interface +// PinManagerPinType es8388Pins[2] = { { pin_ES8388_SDA, true }, { pin_ES8388_SCL, true } }; +// pinManager.deallocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C); +// I2SSource::deinitialize(); +// } + +// private: +// int8_t pin_ES8388_SDA; +// int8_t pin_ES8388_SCL; +// }; + +// class ES8388Source : public I2SSource { +// private: + +// void _es8388InitAdc() { +// DEBUGSR_PRINTF("\nAR: _es8388InitAdc\n"); + +// if (!es8388.init()) { +// Serial.println("_es8388InitAdc init Fail\n"); +// return; +// } +// es8388.inputSelect(IN2); // IN2 Line-In +// es8388.setInputGain(8); +// es8388.outputSelect(OUT1); // OUT1 - Headphones +// es8388.setOutputVolume(12); +// es8388.mixerSourceSelect(MIXADC, MIXADC); +// es8388.mixerSourceControl(DACOUT); +// es8388.setALCmode(MUSIC); +// es8388.analogBypass(true); +// uint8_t *reg; +// for (uint8_t i = 0; i < 53; i++) { +// reg = es8388.readAllReg(); +// DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); +// } +// } + +// public: +// ES8388Source(int sampleRate, int blockSize, int sdaPin, int sclPin) : +// I2SSource(sampleRate, blockSize) { +// _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; +// pin_ES8388_SDA = sdaPin; +// pin_ES8388_SCL = sclPin; +// DEBUGSR_PRINTF("\nAR: ES8388Source\n"); +// }; + +// void initialize(int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin, int8_t mclkPin, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) { +// DEBUGSR_PRINTF("\nAR: ES8388Source initialize called\n"); +// // Reserve SDA and SCL pins of the I2C interface +// PinManagerPinType pins[2] = { { pin_ES8388_SDA, true }, { pin_ES8388_SCL, true } }; +// if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) { +// pinManager.deallocateMultiplePins(pins, 2, PinOwner::HW_I2C); +// ERRORSR_PRINTF("\nAR: Failed to allocate ES8388 I2C pins: SDA=%d, SCL=%d\n", pin_ES8388_SDA, pin_ES8388_SCL); +// return; +// } + +// _es8388InitAdc(); +// // i2s +// // PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); +// // WRITE_PERI_REG(PIN_CTRL, 0xFFF0); +// // i2s_set_sample_rates(I2S_NUM_0, 22050); + +// DEBUGSR_PRINTF("\nAR: ES8388Source calling I2SSource::initialize\n"); +// I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); +// } + +// void deinitialize() { +// // Release SDA and SCL pins of the I2C interface +// pinManager.deallocatePin(pin_ES8388_SDA, PinOwner::HW_I2C); +// pinManager.deallocatePin(pin_ES8388_SCL, PinOwner::HW_I2C); +// I2SSource::deinitialize(); +// } + +// private: +// int8_t pin_ES8388_SDA; +// int8_t pin_ES8388_SCL; +// ES8388 es8388 = ES8388(18, 23, 400000); +// }; + #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 2, 0) From 4997145d8e0b3a560de9717cfa9900f81898fc05 Mon Sep 17 00:00:00 2001 From: Ewoud Date: Tue, 4 Apr 2023 13:02:43 +0200 Subject: [PATCH 13/27] Fastled usermod, add Stefan Petrick effects PolarBasics & CircularBlobs CC BY-NC 3.0 licensed effects only include this usermod only if you accept the terms! Therefore not enabled in platformio.ini builds. --- .../usermod_v2_fastled/usermod_v2_fastled.h | 590 +++++++++++++----- wled00/wled.h | 2 +- 2 files changed, 441 insertions(+), 151 deletions(-) diff --git a/usermods/usermod_v2_fastled/usermod_v2_fastled.h b/usermods/usermod_v2_fastled/usermod_v2_fastled.h index ae073445..f26de688 100644 --- a/usermods/usermod_v2_fastled/usermod_v2_fastled.h +++ b/usermods/usermod_v2_fastled/usermod_v2_fastled.h @@ -2,8 +2,10 @@ #include "wled.h" -//WLEDMM - +//WLEDMM usermod: CC BY-NC 3.0 licensed effects by Stefan Petrick, only include this usermod only if you accept the terms! +//======================================================================================================================== +//======================================================================================================================== +//======================================================================================================================== // Polar basics demo for the // FastLED Podcast #2 @@ -15,7 +17,9 @@ // Creative Commons Attribution // License CC BY-NC 3.0 -class PolarBasics { +//based on: https://gist.github.com/StefanPetrick/9c091d9a28a902af5a7b540e40442c64 + +class StefanPetrickCore { private: public: @@ -30,26 +34,14 @@ class PolarBasics { int num_x;// = WIDTH; // horizontal pixel count int num_y;// = HEIGHT; // vertical pixel count - // Background for setting the following 2 numbers: the FastLED inoise16() function returns - // raw values ranging from 0-65535. In order to improve contrast we filter this output and - // stretch the remains. In histogram (photography) terms this means setting a blackpoint and - // a whitepoint. low_limit MUST be smaller than high_limit. - - uint16_t low_limit;// = 30000; // everything lower drawns in black - // higher numer = more black & more contrast present - uint16_t high_limit;// = 50000; // everything higher gets maximum brightness & bleeds out - // lower number = the result will be more bright & shiny - float center_x;// = (num_x / 2) - 0.5; // the reference point for polar coordinates float center_y;// = (num_y / 2) - 0.5; // (can also be outside of the actual xy matrix) //float center_x = 20; // the reference point for polar coordinates //float center_y = 20; //WLEDMM: assign 32x32 fixed for the time being - float theta [32] [32]; // look-up table for all angles - float distance[32] [32]; // look-up table for all distances - float vignette[32] [32]; - float inverse_vignette[32] [32]; + float theta [60] [32]; // look-up table for all angles WLEDMM: 60x32 to support WLED Effects ledmaps + float distance[60] [32]; // look-up table for all distances // std::vector> theta; // look-up table for all angles // std::vector> distance; // look-up table for all distances @@ -67,13 +59,16 @@ class PolarBasics { float noise_angle_c, noise_angle_d, noise_angle_e, noise_angle_f; // angles based on linear noise travel float dir_c, dir_d, dir_e, dir_f; // direction multiplicators - void init () { + StefanPetrickCore() { + USER_PRINTLN("StefanPetrickCore constructor"); + } + ~StefanPetrickCore() { + USER_PRINTLN("StefanPetrickCore destructor"); + } + + void init() { num_x = SEGMENT.virtualWidth(); // horizontal pixel count num_y = SEGMENT.virtualHeight(); // vertical pixel count - low_limit = 30000; // everything lower drawns in black - // higher numer = more black & more contrast present - high_limit = 50000; // everything higher gets maximum brightness & bleeds out - // lower number = the result will be more bright & shiny center_x = (num_x / 2) - 0.5; // the reference point for polar coordinates center_y = (num_y / 2) - 0.5; // (can also be outside of the actual xy matrix) @@ -82,56 +77,9 @@ class PolarBasics { // distance.resize(num_x, std::vector(num_y, 0)); // vignette.resize(num_x, std::vector(num_y, 0)); // inverse_vignette.resize(num_x, std::vector(num_y, 0)); - } - PolarBasics() { - USER_PRINTLN("constructor"); - } - ~PolarBasics() { - USER_PRINTLN("destructor"); - } - - void speedratiosAndOscillators() { - // set speedratios for the offsets & oscillators - - spd = 0.05 ; - c = 0.013 ; - d = 0.017 ; - e = 0.2 ; - f = 0.007 ; - - calculate_oscillators(); // get linear offsets and oscillators going - } - - void forLoop() { - // pick polar coordinates from look the up table - - dist = distance [x] [y]; - angle = theta [y] [x]; - - // Generation of one layer. Explore the parameters and what they do. - - scale_x = 10000; // smaller value = zoom in, bigger structures, less detail - scale_y = 10000; // higher = zoom out, more pixelated, more detail - z = 0; // must be >= 0 - newangle = angle + angle_c; - newdist = dist; - offset_x = 0; // must be >=0 - offset_y = 0; // must be >=0 - - show1 = render_pixel(); - - - // Colormapping - Assign rendered values to colors - - red = show1; - green = 0; - blue = 0; - - // Check the final results. - // Discard faulty RGB values & write the valid results into the framebuffer. - - write_pixel_to_framebuffer(); + render_polar_lookup_table(); // precalculate all polar coordinates + // to improve the framerate } void calculate_oscillators() { @@ -154,19 +102,8 @@ class PolarBasics { dir_d = sinf(angle_d); dir_e = sinf(angle_e); dir_f = sinf(angle_f); - - uint16_t noi; - noi = inoise16(10000 + linear_c * 100000); // some noise controlled angular offsets - noise_angle_c = map_float(noi, 0, 65535 , 0, 4*PI); - noi = inoise16(20000 + linear_d * 100000); - noise_angle_d = map_float(noi, 0, 65535 , 0, 4*PI); - noi = inoise16(30000 + linear_e * 100000); - noise_angle_e = map_float(noi, 0, 65535 , 0, 4*PI); - noi = inoise16(40000 + linear_f * 100000); - noise_angle_f = map_float(noi, 0, 65535 , 0, 4*PI); } - // given a static polar origin we can precalculate // all the (expensive) polar coordinates @@ -185,6 +122,159 @@ class PolarBasics { } } + // float mapping maintaining 32 bit precision + // we keep values with high resolution for potential later usage + + float map_float(float x, float in_min, float in_max, float out_min, float out_max) { + + float result = (x-in_min) * (out_max-out_min) / (in_max-in_min) + out_min; + if (result < out_min) result = out_min; + if( result > out_max) result = out_max; + + return result; + } + + // Avoid any possible color flicker by forcing the raw RGB values to be 0-255. + // This enables to play freely with random equations for the colormapping + // without causing flicker by accidentally missing the valid target range. + + void rgb_sanity_check() { + // rescue data if possible: when negative return absolute value + if (red < 0) red = abs(red); + if (green < 0) green = abs(green); + if (blue < 0) blue = abs(blue); + + // discard everything above the valid 0-255 range + if (red > 255) red = 255; + if (green > 255) green = 255; + if (blue > 255) blue = 255; + } + + void write_pixel_to_framebuffer() { + // the final color values shall not exceed 255 (to avoid flickering pixels caused by >255 = black...) + // negative values * -1 + + rgb_sanity_check(); + + CRGB finalcolor = CRGB(red, green, blue); + + // write the rendered pixel into the framebutter + SEGMENT.setPixelColorXY(x,y,finalcolor); + } + + // Show the current framerate & rendered pixels per second in the serial monitor. + + void report_performance() { + + int fps = FastLED.getFPS(); // frames per second + int kpps = (fps * SEGMENT.virtualLength()) / 1000; // kilopixel per second + + USER_PRINT(kpps); USER_PRINT(" kpps ... "); + USER_PRINT(fps); USER_PRINT(" fps @ "); + USER_PRINT(SEGMENT.virtualLength()); USER_PRINTLN(" LEDs "); + + } +}; + +class PolarBasics:public StefanPetrickCore { + private: + + public: + // Background for setting the following 2 numbers: the FastLED inoise16() function returns + // raw values ranging from 0-65535. In order to improve contrast we filter this output and + // stretch the remains. In histogram (photography) terms this means setting a blackpoint and + // a whitepoint. low_limit MUST be smaller than high_limit. + + uint16_t low_limit = 30000; // everything lower drawns in black + // higher numer = more black & more contrast present + uint16_t high_limit = 50000; // everything higher gets maximum brightness & bleeds out + // lower number = the result will be more bright & shiny + + // float vignette[60] [32]; + // float inverse_vignette[60] [32]; + + PolarBasics() { + USER_PRINTLN("constructor"); + } + ~PolarBasics() { + USER_PRINTLN("destructor"); + } + + void speedratiosAndOscillators() { + // set speedratios for the offsets & oscillators + + spd = 0.05 ; + c = 0.013 ; + d = 0.017 ; + e = 0.2 ; + f = 0.007 ; + + low_limit = 30000; + high_limit = 50000; + + calculate_oscillators(); // get linear offsets and oscillators going + } + + void forLoop() { + // ...and now let's generate a frame + + for (x = 0; x < num_x; x++) { + for (y = 0; y < num_y; y++) { + // pick polar coordinates from look the up table + + dist = distance [x] [y]; + angle = theta [y] [x]; + + // Generation of one layer. Explore the parameters and what they do. + + scale_x = 10000; // smaller value = zoom in, bigger structures, less detail + scale_y = 10000; // higher = zoom out, more pixelated, more detail + z = linear_c * SEGMENT.custom3; // must be >= 0 + newangle = 5*SEGMENT.intensity/255 * angle + angle_c - 3 * SEGMENT.speed/255 * (dist/10*dir_c); + newdist = dist; + offset_x = SEGMENT.custom1; // must be >=0 + offset_y = SEGMENT.custom2; // must be >=0 + + show1 = render_pixel(); + + // newangle = 5*SEGMENT.intensity/255 * angle + angle_d - 3 * SEGMENT.speed/255 * (dist/10*dir_d); + // z = linear_d * SEGMENT.custom3; // must be >= 0 + // show2 = render_pixel(); + + // newangle = 5*SEGMENT.intensity/255 * angle + angle_e - 3 * SEGMENT.speed/255 * (dist/10*dir_e); + // z = linear_e * SEGMENT.custom3; // must be >= 0 + // show3 = render_pixel(); + + // Colormapping - Assign rendered values to colors + + red = show1; + green = show2; + blue = show3; + + // Check the final results. + // Discard faulty RGB values & write the valid results into the framebuffer. + + write_pixel_to_framebuffer(); + } + } + } + + void calculate_oscillators() { + + StefanPetrickCore::calculate_oscillators(); + + uint16_t noi; + noi = inoise16(10000 + linear_c * 100000); // some noise controlled angular offsets + noise_angle_c = map_float(noi, 0, 65535 , 0, 4*PI); + noi = inoise16(20000 + linear_d * 100000); + noise_angle_d = map_float(noi, 0, 65535 , 0, 4*PI); + noi = inoise16(30000 + linear_e * 100000); + noise_angle_e = map_float(noi, 0, 65535 , 0, 4*PI); + noi = inoise16(40000 + linear_f * 100000); + noise_angle_f = map_float(noi, 0, 65535 , 0, 4*PI); + } + + // convert polar coordinates back to cartesian // & render noise value there @@ -214,73 +304,259 @@ class PolarBasics { // done, we've just rendered one color value for one single pixel } - // float mapping maintaining 32 bit precision - // we keep values with high resolution for potential later usage + // // precalculate a radial brightness mask - float map_float(float x, float in_min, float in_max, float out_min, float out_max) { - - float result = (x-in_min) * (out_max-out_min) / (in_max-in_min) + out_min; - if (result < out_min) result = out_min; - if( result > out_max) result = out_max; + // void render_vignette_table(float filter_radius) { - return result; + // for (int xx = 0; xx < num_x; xx++) { + // for (int yy = 0; yy < num_y; yy++) { + + // vignette[xx] [yy] = (filter_radius - distance[xx] [yy]) / filter_radius; + // if (vignette[xx] [yy] < 0) vignette[xx] [yy] = 0; + // } + // } + // } + +}; + + /* + Ken Perlins improved noise - http://mrl.nyu.edu/~perlin/noise/ + C-port: http://www.fundza.com/c4serious/noise/perlin/perlin.html + by Malcolm Kesson; arduino port by Peter Chiochetti, Sep 2007 : + - make permutation constant byte, obsoletes init(), lookup % 256 + */ + + static const byte p[] = { 151,160,137,91,90, 15,131, 13,201,95,96, + 53,194,233, 7,225,140,36,103,30,69,142, 8,99,37,240,21,10,23,190, 6, + 148,247,120,234,75, 0,26,197,62,94,252,219,203,117, 35,11,32,57,177, + 33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139, + 48,27,166, 77,146,158,231,83,111,229,122, 60,211,133,230,220,105,92, + 41,55,46,245,40,244,102,143,54,65,25,63,161, 1,216,80,73,209,76,132, + 187,208, 89, 18,169,200,196,135,130,116,188,159, 86,164,100,109,198, + 173,186, 3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85, + 212,207,206, 59,227, 47,16,58,17,182,189, 28,42,223,183,170,213,119, + 248,152,2,44,154,163,70,221,153,101,155,167,43,172, 9,129,22,39,253, + 19,98,108,110,79,113,224,232,178,185,112,104,218,246, 97,228,251,34, + 242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107, + 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4, + 150,254,138,236,205, 93,222,114, 67,29,24, 72,243,141,128,195,78,66, + 215,61,156,180 + }; + +// Circular Blobs +// +// VO.2 preview version +// by Stefan Petrick 2023 +// This code is licenced under a +// Creative Commons Attribution +// License CC BY-NC 3.0 +// +// In order to run this on your own setup you might want to check and change +// line 22 & 23 according to your matrix size and +// line 75 to suit your LED interface type. +// +// In case you want to run this code on a different LED driver library +// (like SmartMatrix, OctoWS2812, ESP32 16x parallel output) you will need to change +// line 52 to your own framebuffer and line 276+279 to your own setcolor function. +// In line 154 the framebuffer gets pushed to the LEDs. +// The whole report_performance function you can just comment out. It gets called +// in line 157. +// +// With this adaptions it should be easy to use this code with +// any given LED driver & interface you might prefer. + +//based on https://gist.github.com/StefanPetrick/35ffd8467df22a77067545cfb889aa4f +//and Fastled podcast nr 3: https://www.youtube.com/watch?v=3tfjP7GJnZo + +class CircularBlobs:public StefanPetrickCore { + private: + + float fade(float t){ return t * t * t * (t * (t * 6 - 15) + 10); } + float lerp(float t, float a, float b){ return a + t * (b - a); } + float grad(int hash, float x, float y, float z) + { + int h = hash & 15; /* CONVERT LO 4 BITS OF HASH CODE */ + float u = h < 8 ? x : y, /* INTO 12 GRADIENT DIRECTIONS. */ + v = h < 4 ? y : h==12||h==14 ? x : z; + return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v); + } + + #define P(x) p[(x) & 255] + + float pnoise(float x, float y, float z) { + int X = (int)floorf(x) & 255, /* FIND UNIT CUBE THAT */ + Y = (int)floorf(y) & 255, /* CONTAINS POINT. */ + Z = (int)floorf(z) & 255; + x -= floorf(x); /* FIND RELATIVE X,Y,Z */ + y -= floorf(y); /* OF POINT IN CUBE. */ + z -= floorf(z); + float u = fade(x), /* COMPUTE FADE CURVES */ + v = fade(y), /* FOR EACH OF X,Y,Z. */ + w = fade(z); + int A = P(X)+Y, + AA = P(A)+Z, + AB = P(A+1)+Z, /* HASH COORDINATES OF */ + B = P(X+1)+Y, + BA = P(B)+Z, + BB = P(B+1)+Z; /* THE 8 CUBE CORNERS, */ + + return lerp(w,lerp(v,lerp(u, grad(P(AA ), x, y, z), /* AND ADD */ + grad(P(BA ), x-1, y, z)), /* BLENDED */ + lerp(u, grad(P(AB ), x, y-1, z), /* RESULTS */ + grad(P(BB ), x-1, y-1, z))), /* FROM 8 */ + lerp(v, lerp(u, grad(P(AA+1), x, y, z-1), /* CORNERS */ + grad(P(BA+1), x-1, y, z-1)), /* OF CUBE */ + lerp(u, grad(P(AB+1), x, y-1, z-1), + grad(P(BB+1), x-1, y-1, z-1)))); + } + + + public: + + // Background for setting the following 2 numbers: the pnoise() function returns + // raw values ranging from -1 to +1. In order to improve contrast we filter this output and + // stretch the remains. In histogram (photography) terms this means setting a blackpoint and + // a whitepoint. low_limit MUST be smaller than high_limit. + float low_limit = 0; // everything lower drawns in black + // higher numer = more black & more contrast present + float high_limit = 0.5; // everything higher gets maximum brightness & bleeds out + // lower number = the result will be more bright & shiny + float offset_z; // wanna shift the cartesians during runtime? + float scale_z; // cartesian scaling in 3 dimensions + + void speedratiosAndOscillators() { + + // set speedratios for the offsets & oscillators + + spd = 0.001 ; // higher = faster + c = 0.05 ; + d = 0.07 ; + e = 0.09 ; + f = 0.01 ; + + low_limit = 0; + high_limit = 0.5; + + calculate_oscillators(); // get linear offsets and oscillators going } - // Avoid any possible color flicker by forcing the raw RGB values to be 0-255. - // This enables to play freely with random equations for the colormapping - // without causing flicker by accidentally missing the valid target range. + void forLoop() { + // ...and now let's generate a frame - void rgb_sanity_check() { + for (x = 0; x < num_x; x++) { + for (y = 0; y < num_y; y++) { - // rescue data if possible: when negative return absolute value - if (red < 0) red = abs(red); - if (green < 0) green = abs(green); - if (blue < 0) blue = abs(blue); + dist = distance[x][y]; // pick precalculated polar data + angle = theta[x][y]; - // discard everything above the valid 0-255 range - if (red > 255) red = 255; - if (green > 255) green = 255; - if (blue > 255) blue = 255; - - } - - void write_pixel_to_framebuffer() { - - // the final color values shall not exceed 255 (to avoid flickering pixels caused by >255 = black...) - // negative values * -1 - - rgb_sanity_check(); - - CRGB finalcolor = CRGB(red, green, blue); + // define first animation layer + scale_x = 0.11; // smaller value = zoom in + scale_y = 0.1; // higher = zoom out + scale_z = 0.1; - // write the rendered pixel into the framebutter - SEGMENT.setPixelColorXY(x,y,finalcolor); - } + newangle = angle + 5*SEGMENT.speed/255 * noise_angle_c + 5*SEGMENT.speed/255 * noise_angle_f; + newdist = 5*SEGMENT.intensity/255 * dist; + offset_z = linear_c * 100; + z = -5 * sqrtf(dist) ; + show1 = render_pixel_faster(); - // precalculate a radial brightness mask + // repeat for the 2nd layer, every parameter you don't change stays as it was set + // in the previous layer. - void render_vignette_table(float filter_radius) { + offset_z = linear_d * 100; + newangle = angle + 5*SEGMENT.speed/255 * noise_angle_d + 5*SEGMENT.speed/255 * noise_angle_f; + show2 = render_pixel_faster(); - for (int xx = 0; xx < num_x; xx++) { - for (int yy = 0; yy < num_y; yy++) { + // 3d layer - vignette[xx] [yy] = (filter_radius - distance[xx] [yy]) / filter_radius; - if (vignette[xx] [yy] < 0) vignette[xx] [yy] = 0; + offset_z = linear_e*100; + newangle = angle + 5*SEGMENT.speed/255 * noise_angle_e + 5*SEGMENT.speed/255 * noise_angle_f; + show3 = render_pixel_faster(); + + // create some interference between the layers + + show3 = show3-show2-show1; + if (show3 < 0) show3 = 0; + + // Colormapping - Assign rendered values to colors + + red = show1-show2/2; + if (red < 0) red=0; + green = (show1-show2)/2; + if (green < 0) green=0; + blue = show3-show1/2; + if (blue < 0) blue=0; + + // Check the final results and store them. + // Discard faulty RGB values & write the remaining valid results into the framebuffer. + + write_pixel_to_framebuffer(); } } } + void calculate_oscillators() { + + StefanPetrickCore::calculate_oscillators(); + + float n; + + n = 1 + pnoise(linear_c , 10, 10); // some noise controlled angular offsets 0 to PI + noise_angle_c = n * PI; + n = 1 + pnoise(linear_d , 20, 20); + noise_angle_d = n * PI; + n = 1 + pnoise(linear_e , 30, 30); + noise_angle_e = n * PI; + n = 1 + pnoise(linear_f , 40, 40); + noise_angle_f = n * PI; + } + + // Convert the polar 2 coordinates back to cartesian ones & also apply all 3d transitions. + // Calculate the noise value at this point after the 5 dimensional manipulation of + // the underlaying coordinates. + // + // Now I use a 32 bit float noise function which is more precise AND also more FPU friendly. + // This results in a better render qualitiy in edgecases AND also in a 15% better performance. + // Hurray! + + float render_pixel_faster() { + + // convert polar coordinates back to cartesian ones + + float newx = (offset_x + center_x - (cosf(newangle) * newdist)) * scale_x; + float newy = (offset_y + center_y - (sinf(newangle) * newdist)) * scale_y; + float newz = (offset_z + z) * scale_z; + + // render noisevalue at this new cartesian point + + float raw_noise_field_value = pnoise(newx, newy, newz); + + + // a lot is happening here, namely + // A) enhance histogram (improve contrast) by setting the black and white point + // B) scale the result to a 0-255 range + // it's the contrast boosting & the "colormapping" (technically brightness mapping) + + if (raw_noise_field_value < low_limit) raw_noise_field_value = low_limit; + if (raw_noise_field_value > high_limit) raw_noise_field_value = high_limit; + + float scaled_noise_value = map_float(raw_noise_field_value, low_limit, high_limit, 0, 255); + + return scaled_noise_value; + + // done, we've just rendered one color value for one single pixel + } }; //effect functions uint16_t mode_PolarBasics(void) { - PolarBasics* pb; + PolarBasics* spe; if(!SEGENV.allocateData(sizeof(PolarBasics))) {SEGMENT.fill(SEGCOLOR(0)); return 350;} //mode_static(); //allocation failed - pb = reinterpret_cast(SEGENV.data); + spe = reinterpret_cast(SEGENV.data); //first time init if (SEGENV.call == 0) { @@ -288,65 +564,79 @@ uint16_t mode_PolarBasics(void) { USER_PRINTF("mode_PolarBasics %d\n", sizeof(PolarBasics)); // if (SEGENV.call == 0) SEGMENT.setUpLeds(); - pb->init(); + spe->init(); - pb->render_polar_lookup_table(); // precalculate all polar coordinates - // to improve the framerate - pb->render_vignette_table(9.5); // the number is the desired radius in pixel + // spe->render_vignette_table(9.5); // the number is the desired radius in pixel // WIDTH/2 generates a circle } - pb->speedratiosAndOscillators(); + spe->speedratiosAndOscillators(); - // ...and now let's generate a frame - - for (pb->x = 0; pb->x < pb->num_x; pb->x++) { - for (pb->y = 0; pb->y < pb->num_y; pb->y++) { - - pb->forLoop(); - - } - } + spe->forLoop(); // FastLED.show(); + // EVERY_N_MILLIS(500) spe->report_performance(); + return FRAMETIME; } +static const char _data_FX_mode_PolarBasics[] PROGMEM = "💡Polar Basics ☾@AngleDist,AngleMult;;!;2;sx=0,ix=51,c1=0,c2=0,c3=0"; + + +uint16_t mode_CircularBlobs(void) { + CircularBlobs* spe; + + + if(!SEGENV.allocateData(sizeof(CircularBlobs))) {SEGMENT.fill(SEGCOLOR(0)); return 350;} //mode_static(); //allocation failed + + spe = reinterpret_cast(SEGENV.data); + + //first time init + if (SEGENV.call == 0) { + + USER_PRINTF("mode_CircularBlobs %d\n", sizeof(CircularBlobs)); + // if (SEGENV.call == 0) SEGMENT.setUpLeds(); + + spe->init(); + + } + + spe->speedratiosAndOscillators(); + + spe->forLoop(); + + // FastLED.show(); + + // EVERY_N_MILLIS(500) spe->report_performance(); + + return FRAMETIME; +} +static const char _data_FX_mode_CircularBlobs[] PROGMEM = "💡CircularBlobs ☾@AngleDist,AngleMult;;!;2;sx=51,ix=51,c1=0,c2=0,c3=0"; -static const char _data_FX_mode_PolarBasics[] PROGMEM = "💡Polar Basics ☾@;;;2"; -//class name. Use something descriptive and leave the ": public Usermod" part :) class FastledUsermod : public Usermod { - private: - - public: FastledUsermod(const char *name, bool enabled):Usermod(name, enabled) {} //WLEDMM void setup() { strip.addEffect(255, &mode_PolarBasics, _data_FX_mode_PolarBasics); + strip.addEffect(255, &mode_CircularBlobs, _data_FX_mode_CircularBlobs); initDone = true; } - - void connected() { - } - - void loop() { if (!enabled || strip.isUpdating()) return; // do your magic here if (millis() - lastTime > 1000) { - //Serial.println("I'm alive!"); + //USER_PRINTLN("I'm alive!"); lastTime = millis(); } } - uint16_t getId() { return USERMOD_ID_FASTLED; diff --git a/wled00/wled.h b/wled00/wled.h index 990cf96f..d673e11b 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2304021 +#define VERSION 2304040 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG From d775f7fb2884e20cc921e7b323b906f95673b9dd Mon Sep 17 00:00:00 2001 From: TroyHacks <5659019+troyhacks@users.noreply.github.com> Date: Tue, 4 Apr 2023 14:01:47 -0400 Subject: [PATCH 14/27] Removed reliance on the ES8388 library and made things more in line with similar boards with I2C init. --- lib/ES8388 | 1 + usermods/audioreactive/audio_reactive.h | 4 +- usermods/audioreactive/audio_source.h | 430 ++++++------------------ 3 files changed, 111 insertions(+), 324 deletions(-) create mode 160000 lib/ES8388 diff --git a/lib/ES8388 b/lib/ES8388 new file mode 160000 index 00000000..f589ddfe --- /dev/null +++ b/lib/ES8388 @@ -0,0 +1 @@ +Subproject commit f589ddfe7cc27f294e00644dc510e64bff677f0b diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index ca9f221a..2f9a0482 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -1273,9 +1273,9 @@ class AudioReactive : public Usermod { #endif case 6: DEBUGSR_PRINTLN(F("AR: ES8388 Source")); - audioSource = new ES8388Source(SAMPLE_RATE, BLOCK_SIZE, sdaPin, sclPin); + audioSource = new ES8388Source(SAMPLE_RATE, BLOCK_SIZE); delay(100); - if (audioSource) audioSource->initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); + if (audioSource) audioSource->initialize(sdaPin, sclPin, i2swsPin, i2ssdPin, i2sckPin, mclkPin); break; #if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S3) diff --git a/usermods/audioreactive/audio_source.h b/usermods/audioreactive/audio_source.h index 84eb8df8..a1cd1eda 100644 --- a/usermods/audioreactive/audio_source.h +++ b/usermods/audioreactive/audio_source.h @@ -15,7 +15,7 @@ #else #define SRate_t int #endif -#include "ES8388.h" +// #include "ES8388.h" //#include //#include @@ -489,349 +489,135 @@ public: This is an I2S microphone that requires ininitialization over I2C before I2S data can be received */ - class ES8388Source : public I2SSource { + private: + // I2C initialization functions for ES8388 + void _es8388I2cBegin() { + bool i2c_initialized = Wire.begin(pin_ES8388_SDA, pin_ES8388_SCL, 100000U); + if (i2c_initialized == false) { + ERRORSR_PRINTLN(F("AR: ES8388 failed to initialize I2C bus driver.")); + } + } -public: - ES8388Source(int sampleRate, int blockSize, int sdaPin, int sclPin) : - I2SSource(sampleRate, blockSize) { + void _es8388I2cWrite(uint8_t reg, uint8_t val) { +#ifndef ES8388_ADDR + Wire.beginTransmission(0x10); + #define ES8388_ADDR 0x10 // default address +#else + Wire.beginTransmission(ES7243_ADDR); +#endif + Wire.write((uint8_t)reg); + Wire.write((uint8_t)val); + uint8_t i2cErr = Wire.endTransmission(); // i2cErr == 0 means OK + if (i2cErr != 0) { + DEBUGSR_PRINTF("AR: ES8388 I2C write failed with error=%d (addr=0x%X, reg 0x%X, val 0x%X).\n", i2cErr, ES8388_ADDR, reg, val); + } + } + + void _es8388InitAdc() { + // This is by no means 100% figured but it's working for line-in + // with a little too much noise for my liking... + _es8388I2cBegin(); + _es8388I2cWrite(0x08,0x00); + _es8388I2cWrite(0x02,0xff); + _es8388I2cWrite(0x2b,0x80); + _es8388I2cWrite(0x00,0x05); + _es8388I2cWrite(0x01,0x40); + _es8388I2cWrite(0x03,0x00); + _es8388I2cWrite(0x0a,0x50); + _es8388I2cWrite(0x0b,0x80); + _es8388I2cWrite(0x09,0x77); + _es8388I2cWrite(0x0c,0x0c); + _es8388I2cWrite(0x0d,0x02); + _es8388I2cWrite(0x10,0x00); + _es8388I2cWrite(0x11,0x00); + _es8388I2cWrite(0x12,0xea); + _es8388I2cWrite(0x13,0xc0); + _es8388I2cWrite(0x14,0x12); + _es8388I2cWrite(0x15,0x06); + _es8388I2cWrite(0x16,0xc3); + _es8388I2cWrite(0x04,0x3c); + _es8388I2cWrite(0x17,0x18); + _es8388I2cWrite(0x18,0x02); + _es8388I2cWrite(0x19,0x00); + _es8388I2cWrite(0x1a,0x00); + _es8388I2cWrite(0x1b,0x00); + _es8388I2cWrite(0x26,0x09); + _es8388I2cWrite(0x27,0x50); + _es8388I2cWrite(0x28,0x38); + _es8388I2cWrite(0x29,0x38); + _es8388I2cWrite(0x2a,0x50); + _es8388I2cWrite(0x2e,0x00); + _es8388I2cWrite(0x2f,0x00); + _es8388I2cWrite(0x30,0x00); + _es8388I2cWrite(0x31,0x00); + _es8388I2cWrite(0x02,0x00); + _es8388I2cWrite(0x0a,0x50); + _es8388I2cWrite(0x09,0x00); + _es8388I2cWrite(0x04,0x0c); + _es8388I2cWrite(0x30,0x21); + _es8388I2cWrite(0x31,0x21); + _es8388I2cWrite(0x26,0x09); + _es8388I2cWrite(0x27,0x90); + _es8388I2cWrite(0x2a,0x90); + _es8388I2cWrite(0x12,0x38); + _es8388I2cWrite(0x13,0x30); + _es8388I2cWrite(0x14,0x57); + _es8388I2cWrite(0x15,0x06); + _es8388I2cWrite(0x16,0x89); + _es8388I2cWrite(0x26,0x09); + _es8388I2cWrite(0x27,0x50); + _es8388I2cWrite(0x2a,0x50); + _es8388I2cWrite(0x09,0x00); + } + + public: + ES8388Source(SRate_t sampleRate, int blockSize, float sampleScale = 1.0f, bool i2sMaster=true) : + I2SSource(sampleRate, blockSize, sampleScale, i2sMaster) { _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; - // _config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX), - // _config.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT; - pin_ES8388_SDA = sdaPin; - pin_ES8388_SCL = sclPin; - DEBUGSR_PRINTF("\nAR: ES8388Source\n"); }; - void initialize(int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin, int8_t mclkPin, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) { - DEBUGSR_PRINTF("\nAR: ES8388Source initialize called\n"); + void initialize(int8_t sdaPin, int8_t sclPin, int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin, int8_t mclkPin) { + + // check that pins are valid + if ((sdaPin < 0) || (sclPin < 0)) { + ERRORSR_PRINTF("\nAR: invalid ES8388 I2C pins: SDA=%d, SCL=%d\n", sdaPin, sclPin); + return; + } + + if ((i2sckPin < 0) || (mclkPin < 0)) { + ERRORSR_PRINTF("\nAR: invalid I2S pin: SCK=%d, MCLK=%d\n", i2sckPin, mclkPin); + return; + } + // Reserve SDA and SCL pins of the I2C interface - PinManagerPinType pins[2] = { { pin_ES8388_SDA, true }, { pin_ES8388_SCL, true } }; - if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) { - pinManager.deallocateMultiplePins(pins, 2, PinOwner::HW_I2C); - ERRORSR_PRINTF("\nAR: Failed to allocate ES8388 I2C pins: SDA=%d, SCL=%d\n", pin_ES8388_SDA, pin_ES8388_SCL); + PinManagerPinType es8388Pins[2] = { { sdaPin, true }, { sclPin, true } }; + if (!pinManager.allocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C)) { + pinManager.deallocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C); + ERRORSR_PRINTF("\nAR: Failed to allocate ES8388 I2C pins: SDA=%d, SCL=%d\n", sdaPin, sclPin); return; } - ES8388 es8388 = ES8388(pin_ES8388_SDA, pin_ES8388_SCL, 400000); + pin_ES8388_SDA = sdaPin; + pin_ES8388_SCL = sclPin; - if (!es8388.init()) { - Serial.println("_es8388InitAdc init Fail\n"); - return; - } - - es8388.inputSelect(IN2); - es8388.setInputGain(8); - es8388.outputSelect(OUT2); - es8388.setOutputVolume(12); - es8388.mixerSourceSelect(MIXIN2, MIXIN2); - es8388.mixerSourceControl(DACOUT); - es8388.setALCmode(DISABLE); - es8388.analogBypass(true); - - bool pf = es8388.pub_write_reg(0x09, 0x00); // mutes onboard microphones (a bit) and highly reduces distortion - - uint8_t *reg; - for (uint8_t i = 0; i < 53; i++) { - reg = es8388.readAllReg(); - DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); - } - - PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); - WRITE_PERI_REG(PIN_CTRL, 0xFFF0); - - DEBUGSR_PRINTF("\nAR: ES8388Source calling I2SSource::initialize\n"); - // I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); - - i2s_config_t i2s_config = { - .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), - .sample_rate = 22050, - .bits_per_sample = I2S_SAMPLE_RESOLUTION, - .channel_format = I2S_MIC_CHANNEL, - .communication_format = I2S_COMM_FORMAT_I2S, - .intr_alloc_flags = 0, - .dma_buf_count = 8, - .dma_buf_len = 512, - .use_apll = false, - .tx_desc_auto_clear = true, - .fixed_mclk = 0}; - - i2s_pin_config_t pin_config = { - .bck_io_num = 27, .ws_io_num = 25, .data_out_num = 26, .data_in_num = 35}; - - i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); - i2s_set_pin(I2S_NUM_0, &pin_config); - - _initialized = true; - + // First route mclk, then configure ADC over I2C, then configure I2S + _es8388InitAdc(); + I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); } void deinitialize() { // Release SDA and SCL pins of the I2C interface - pinManager.deallocatePin(pin_ES8388_SDA, PinOwner::HW_I2C); - pinManager.deallocatePin(pin_ES8388_SCL, PinOwner::HW_I2C); + PinManagerPinType es8388Pins[2] = { { pin_ES8388_SDA, true }, { pin_ES8388_SCL, true } }; + pinManager.deallocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C); I2SSource::deinitialize(); } private: int8_t pin_ES8388_SDA; int8_t pin_ES8388_SCL; - }; -// class ES8388Source : public I2SSource { -// private: -// // I2C initialization functions for ES8388 -// void _es8388I2cBegin() { -// bool i2c_initialized = Wire.begin(pin_ES8388_SDA, pin_ES8388_SCL, 100000U); -// if (i2c_initialized == false) { -// ERRORSR_PRINTLN(F("AR: ES8388 failed to initialize I2C bus driver.")); -// } -// } - -// void _es8388I2cWrite(uint8_t reg, uint8_t val) { -// #ifndef ES8388_ADDR -// Wire.beginTransmission(0x10); -// #define ES8388_ADDR 0x10 // default address -// #else -// Wire.beginTransmission(ES7243_ADDR); -// #endif -// Wire.write((uint8_t)reg); -// Wire.write((uint8_t)val); -// uint8_t i2cErr = Wire.endTransmission(); // i2cErr == 0 means OK -// if (i2cErr != 0) { -// DEBUGSR_PRINTF("AR: ES8388 I2C write failed with error=%d (addr=0x%X, reg 0x%X, val 0x%X).\n", i2cErr, ES8388_ADDR, reg, val); -// } -// } - -// void _es8388InitAdc() { - -// // _es8388I2cBegin(); - -// // _es8388I2cWrite(0x08, 0x00); -// // _es8388I2cWrite(0x02, 0xFF); -// // _es8388I2cWrite(0x2B, 0x80); -// // _es8388I2cWrite(0x00, 0x05); -// // _es8388I2cWrite(0x01, 0x40); - -// // _es8388I2cWrite(0x03, 0x00); -// // _es8388I2cWrite(0x0a, 0x50); -// // _es8388I2cWrite(0x0b, 0x80); -// // _es8388I2cWrite(0x09, 0x77); -// // _es8388I2cWrite(0x0c, 0x0C); -// // _es8388I2cWrite(0x0d, 0x02); -// // _es8388I2cWrite(0x10, 0x00); -// // _es8388I2cWrite(0x11, 0x00); - -// // _es8388I2cWrite(0x12, 0xEA); -// // _es8388I2cWrite(0x13, 0xC0); -// // _es8388I2cWrite(0x14, 0x12); -// // _es8388I2cWrite(0x15, 0x06); -// // _es8388I2cWrite(0x16, 0xC3); - -// // _es8388I2cWrite(0x04, 0x3C); -// // _es8388I2cWrite(0x17, 0x18); -// // _es8388I2cWrite(0x18, 0x02); -// // _es8388I2cWrite(0x19, 0x00); -// // _es8388I2cWrite(0x1a, 0x00); -// // _es8388I2cWrite(0x1b, 0x00); - -// // _es8388I2cWrite(0x26, 0x09); -// // _es8388I2cWrite(0x27, 0x50); -// // _es8388I2cWrite(0x28, 0x38); -// // _es8388I2cWrite(0x29, 0x38); -// // _es8388I2cWrite(0x2a, 0x50); - -// // _es8388I2cWrite(0x2e, 0x00); -// // _es8388I2cWrite(0x2f, 0x00); -// // _es8388I2cWrite(0x30, 0x00); -// // _es8388I2cWrite(0x31, 0x00); - -// // ... and now the "config", lol - -// // _es8388I2cWrite(0x09, 0x00); -// // _es8388I2cWrite(0x04, 0x0C); -// // _es8388I2cWrite(0x30, 12); -// // _es8388I2cWrite(0x31, 12); - -// // _es8388I2cWrite(0x26, (1<<3)|1); - -// // _es8388I2cWrite(0x27, (false << 7) | (true << 6) | (2 << 3)); -// // _es8388I2cWrite(0x28, (false << 7) | (true << 6) | (2 << 3)); - -// // _es8388I2cWrite(0x12, 0x00); - -// // _es8388I2cWrite(0x09, 0x00); - -// #include "ES8388.h" - -// ES8388 es8388 = ES8388(pin_ES8388_SDA, pin_ES8388_SCL, 400000); - -// if (!es8388.init()) { -// Serial.println("_es8388InitAdc init Fail\n"); -// return; -// } - -// es8388.inputSelect(IN2); -// es8388.setInputGain(0); -// es8388.outputSelect(OUT2); -// es8388.setOutputVolume(8); -// es8388.mixerSourceSelect(MIXIN2, MIXIN2); -// es8388.mixerSourceControl(DACOUT); -// es8388.setALCmode(MUSIC); -// es8388.analogBypass(true); - -// bool pf = es8388.pub_write_reg(0x09, 0x00); // mutes onboard microphones (a bit) and highly reduces distortion - -// uint8_t *reg; -// for (uint8_t i = 0; i < 53; i++) { -// reg = es8388.readAllReg(); -// DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); -// } - -// } - -// public: -// ES8388Source(SRate_t sampleRate, int blockSize, float sampleScale = 1.0f, bool i2sMaster=true) : -// I2SSource(sampleRate, blockSize, sampleScale, i2sMaster) { -// _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; -// }; - -// void initialize(int8_t sdaPin, int8_t sclPin, int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin, int8_t mclkPin) { - -// // check that pins are valid -// if ((sdaPin < 0) || (sclPin < 0)) { -// ERRORSR_PRINTF("\nAR: invalid ES8388 I2C pins: SDA=%d, SCL=%d\n", sdaPin, sclPin); -// return; -// } - -// if ((i2sckPin < 0) || (mclkPin < 0)) { -// ERRORSR_PRINTF("\nAR: invalid I2S pin: SCK=%d, MCLK=%d\n", i2sckPin, mclkPin); -// return; -// } - -// // Reserve SDA and SCL pins of the I2C interface -// PinManagerPinType es8388Pins[2] = { { sdaPin, true }, { sclPin, true } }; -// if (!pinManager.allocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C)) { -// pinManager.deallocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C); -// ERRORSR_PRINTF("\nAR: Failed to allocate ES8388 I2C pins: SDA=%d, SCL=%d\n", sdaPin, sclPin); -// return; -// } - -// pin_ES8388_SDA = sdaPin; -// pin_ES8388_SCL = sclPin; - -// // First route mclk, then configure ADC over I2C, then configure I2S -// _es8388InitAdc(); -// // I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); - -// PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); -// WRITE_PERI_REG(PIN_CTRL, 0xFFF0); - -// i2s_config_t i2s_config = { -// .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), -// .sample_rate = 22050, -// .bits_per_sample = I2S_SAMPLE_RESOLUTION, -// .channel_format = I2S_MIC_CHANNEL, -// .communication_format = I2S_COMM_FORMAT_I2S, -// .intr_alloc_flags = 0, -// .dma_buf_count = 8, -// .dma_buf_len = 512, -// .use_apll = false, -// .tx_desc_auto_clear = true, -// .fixed_mclk = 0}; - -// i2s_pin_config_t pin_config = { -// .bck_io_num = 27, .ws_io_num = 25, .data_out_num = 26, .data_in_num = 35}; - -// i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); -// i2s_set_pin(I2S_NUM_0, &pin_config); - -// _initialized = true; - -// } - -// void deinitialize() { -// // Release SDA and SCL pins of the I2C interface -// PinManagerPinType es8388Pins[2] = { { pin_ES8388_SDA, true }, { pin_ES8388_SCL, true } }; -// pinManager.deallocateMultiplePins(es8388Pins, 2, PinOwner::HW_I2C); -// I2SSource::deinitialize(); -// } - -// private: -// int8_t pin_ES8388_SDA; -// int8_t pin_ES8388_SCL; -// }; - -// class ES8388Source : public I2SSource { -// private: - -// void _es8388InitAdc() { -// DEBUGSR_PRINTF("\nAR: _es8388InitAdc\n"); - -// if (!es8388.init()) { -// Serial.println("_es8388InitAdc init Fail\n"); -// return; -// } -// es8388.inputSelect(IN2); // IN2 Line-In -// es8388.setInputGain(8); -// es8388.outputSelect(OUT1); // OUT1 - Headphones -// es8388.setOutputVolume(12); -// es8388.mixerSourceSelect(MIXADC, MIXADC); -// es8388.mixerSourceControl(DACOUT); -// es8388.setALCmode(MUSIC); -// es8388.analogBypass(true); -// uint8_t *reg; -// for (uint8_t i = 0; i < 53; i++) { -// reg = es8388.readAllReg(); -// DEBUGSR_PRINTF("Reg-%02d = 0x%02x\r\n", i, reg[i]); -// } -// } - -// public: -// ES8388Source(int sampleRate, int blockSize, int sdaPin, int sclPin) : -// I2SSource(sampleRate, blockSize) { -// _config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT; -// pin_ES8388_SDA = sdaPin; -// pin_ES8388_SCL = sclPin; -// DEBUGSR_PRINTF("\nAR: ES8388Source\n"); -// }; - -// void initialize(int8_t i2swsPin, int8_t i2ssdPin, int8_t i2sckPin, int8_t mclkPin, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) { -// DEBUGSR_PRINTF("\nAR: ES8388Source initialize called\n"); -// // Reserve SDA and SCL pins of the I2C interface -// PinManagerPinType pins[2] = { { pin_ES8388_SDA, true }, { pin_ES8388_SCL, true } }; -// if (!pinManager.allocateMultiplePins(pins, 2, PinOwner::HW_I2C)) { -// pinManager.deallocateMultiplePins(pins, 2, PinOwner::HW_I2C); -// ERRORSR_PRINTF("\nAR: Failed to allocate ES8388 I2C pins: SDA=%d, SCL=%d\n", pin_ES8388_SDA, pin_ES8388_SCL); -// return; -// } - -// _es8388InitAdc(); -// // i2s -// // PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0_CLK_OUT1); -// // WRITE_PERI_REG(PIN_CTRL, 0xFFF0); -// // i2s_set_sample_rates(I2S_NUM_0, 22050); - -// DEBUGSR_PRINTF("\nAR: ES8388Source calling I2SSource::initialize\n"); -// I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin, mclkPin); -// } - -// void deinitialize() { -// // Release SDA and SCL pins of the I2C interface -// pinManager.deallocatePin(pin_ES8388_SDA, PinOwner::HW_I2C); -// pinManager.deallocatePin(pin_ES8388_SCL, PinOwner::HW_I2C); -// I2SSource::deinitialize(); -// } - -// private: -// int8_t pin_ES8388_SDA; -// int8_t pin_ES8388_SCL; -// ES8388 es8388 = ES8388(18, 23, 400000); -// }; - - - #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 2, 0) #if !defined(SOC_I2S_SUPPORTS_ADC) && !defined(SOC_I2S_SUPPORTS_ADC_DAC) #warning this MCU does not support analog sound input From c38baf90b508d1b78d71549f502b98a82ea84c72 Mon Sep 17 00:00:00 2001 From: TroyHacks <5659019+troyhacks@users.noreply.github.com> Date: Tue, 4 Apr 2023 14:04:02 -0400 Subject: [PATCH 15/27] Removing local lib copy --- lib/ES8388 | 1 - 1 file changed, 1 deletion(-) delete mode 160000 lib/ES8388 diff --git a/lib/ES8388 b/lib/ES8388 deleted file mode 160000 index f589ddfe..00000000 --- a/lib/ES8388 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f589ddfe7cc27f294e00644dc510e64bff677f0b From a6a1bbabeb5d3a662740dc7d58a478d3727b9200 Mon Sep 17 00:00:00 2001 From: TroyHacks <5659019+troyhacks@users.noreply.github.com> Date: Tue, 4 Apr 2023 14:07:09 -0400 Subject: [PATCH 16/27] Remove platform.ini entry for ES8388 --- platformio.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 991ac91b..2d5035f0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -587,7 +587,6 @@ build_flags_min = lib_deps_min = https://github.com/kosme/arduinoFFT#develop @ 1.9.2 ; used for USERMOD_AUDIOREACTIVE - https://github.com/netmindz/es8388arduino.git @ 0.0.1 ; used for USERMOD_AUDIOREACTIVE ES8388 source ; monitor_filters = esp32_exception_decoder ; used to show crash details From f44f307f89766416e1f35558ded07a7718adfe3e Mon Sep 17 00:00:00 2001 From: TroyHacks <5659019+troyhacks@users.noreply.github.com> Date: Tue, 4 Apr 2023 17:04:18 -0400 Subject: [PATCH 17/27] Comments and typos, init optimization and shortening. --- usermods/audioreactive/audio_source.h | 93 +++++++++++---------------- 1 file changed, 37 insertions(+), 56 deletions(-) diff --git a/usermods/audioreactive/audio_source.h b/usermods/audioreactive/audio_source.h index a1cd1eda..0d173698 100644 --- a/usermods/audioreactive/audio_source.h +++ b/usermods/audioreactive/audio_source.h @@ -15,7 +15,6 @@ #else #define SRate_t int #endif -// #include "ES8388.h" //#include //#include @@ -485,9 +484,9 @@ public: int8_t pin_ES7243_SCL; }; -/* ES8388 Microphone - This is an I2S microphone that requires ininitialization over - I2C before I2S data can be received +/* ES8388 Sound Modude + This is an I2S sound processing unit that requires ininitialization over + I2C before I2S data can be received. */ class ES8388Source : public I2SSource { private: @@ -504,7 +503,7 @@ class ES8388Source : public I2SSource { Wire.beginTransmission(0x10); #define ES8388_ADDR 0x10 // default address #else - Wire.beginTransmission(ES7243_ADDR); + Wire.beginTransmission(ES8388_ADDR); #endif Wire.write((uint8_t)reg); Wire.write((uint8_t)val); @@ -517,58 +516,40 @@ class ES8388Source : public I2SSource { void _es8388InitAdc() { // This is by no means 100% figured but it's working for line-in // with a little too much noise for my liking... + // https://dl.radxa.com/rock2/docs/hw/ds/ES8388%20user%20Guide.pdf Section 10.1 + // https://docs.google.com/spreadsheets/d/1CN3MvhkcPVESuxKyx1xRYqfUit5hOdsG45St9BCUm-g/edit#gid=0 generally _es8388I2cBegin(); - _es8388I2cWrite(0x08,0x00); - _es8388I2cWrite(0x02,0xff); - _es8388I2cWrite(0x2b,0x80); - _es8388I2cWrite(0x00,0x05); - _es8388I2cWrite(0x01,0x40); - _es8388I2cWrite(0x03,0x00); - _es8388I2cWrite(0x0a,0x50); - _es8388I2cWrite(0x0b,0x80); - _es8388I2cWrite(0x09,0x77); - _es8388I2cWrite(0x0c,0x0c); - _es8388I2cWrite(0x0d,0x02); - _es8388I2cWrite(0x10,0x00); - _es8388I2cWrite(0x11,0x00); - _es8388I2cWrite(0x12,0xea); - _es8388I2cWrite(0x13,0xc0); - _es8388I2cWrite(0x14,0x12); - _es8388I2cWrite(0x15,0x06); - _es8388I2cWrite(0x16,0xc3); - _es8388I2cWrite(0x04,0x3c); - _es8388I2cWrite(0x17,0x18); - _es8388I2cWrite(0x18,0x02); - _es8388I2cWrite(0x19,0x00); - _es8388I2cWrite(0x1a,0x00); - _es8388I2cWrite(0x1b,0x00); - _es8388I2cWrite(0x26,0x09); - _es8388I2cWrite(0x27,0x50); - _es8388I2cWrite(0x28,0x38); - _es8388I2cWrite(0x29,0x38); - _es8388I2cWrite(0x2a,0x50); - _es8388I2cWrite(0x2e,0x00); - _es8388I2cWrite(0x2f,0x00); - _es8388I2cWrite(0x30,0x00); - _es8388I2cWrite(0x31,0x00); - _es8388I2cWrite(0x02,0x00); - _es8388I2cWrite(0x0a,0x50); - _es8388I2cWrite(0x09,0x00); - _es8388I2cWrite(0x04,0x0c); - _es8388I2cWrite(0x30,0x21); - _es8388I2cWrite(0x31,0x21); - _es8388I2cWrite(0x26,0x09); - _es8388I2cWrite(0x27,0x90); - _es8388I2cWrite(0x2a,0x90); - _es8388I2cWrite(0x12,0x38); - _es8388I2cWrite(0x13,0x30); - _es8388I2cWrite(0x14,0x57); - _es8388I2cWrite(0x15,0x06); - _es8388I2cWrite(0x16,0x89); - _es8388I2cWrite(0x26,0x09); - _es8388I2cWrite(0x27,0x50); - _es8388I2cWrite(0x2a,0x50); - _es8388I2cWrite(0x09,0x00); + _es8388I2cWrite(0x08,0x00); // I2S to slave + _es8388I2cWrite(0x02,0xf3); // Power down DEM and STM + _es8388I2cWrite(0x2b,0x80); // Set same LRCK + _es8388I2cWrite(0x00,0x05); // Set chip to Play & Record Mode + _es8388I2cWrite(0x01,0x40); // Power up Analog and lbias ... These 5 (to here) need to be done in order + _es8388I2cWrite(0x03,0x00); // Power up ADC, Analog Input, and Mic Bias + _es8388I2cWrite(0x04,0x3C); // ** In guide, not in working example tho. ** + _es8388I2cWrite(0x0a,0x50); // Use Lin2/Rin2 for ADC input + _es8388I2cWrite(0x09,0x00); // Select Analog Input PGA Gain for ADC to 0dB ** + _es8388I2cWrite(0x0c,0x0c); // I2S format, 24-bit + _es8388I2cWrite(0x0d,0x02); // Set MCLK/LRCK ratio to 256 + _es8388I2cWrite(0x10,0x00); // Set ADC digital volume attenuation to 0dB (left) + _es8388I2cWrite(0x11,0x00); // Set ADC digital volume attenuation to 0dB (right) + _es8388I2cWrite(0x17,0x18); // Set format for DAC (I2S, 24bit) + _es8388I2cWrite(0x18,0x02); // Set DAC MCLK/LRCK ratio to 256 + _es8388I2cWrite(0x1a,0x00); // DAC Volume attenuation 0dB (left) + _es8388I2cWrite(0x1b,0x00); // DAC Volume attenuation 0dB (right) + _es8388I2cWrite(0x2e,0x00); // LOUT1 volume - 00 = -45dB + _es8388I2cWrite(0x2f,0x00); // ROUT1 volume - 00 = -45dB + _es8388I2cWrite(0x0C,0b00000001); // ADC digital format - I2S + Left Justified + _es8388I2cWrite(0x17,0b00000010); // DAC digital format - I2S + Left Justified + _es8388I2cWrite(0x02,0x00); // Power up DEM and STM + // end of guide init ^^^ + _es8388I2cWrite(0x02,0b01000000); // Power. Guide says it's only 6 bits but that 1 means "turn on sometthing for line-out voltage" + _es8388I2cWrite(0x04,0x0c); // LOUT2 an ROUT2 powered + _es8388I2cWrite(0x30,0b00011110); // LOUT2VOL - 0 = -45dB, 0b00011110 = +0dB + _es8388I2cWrite(0x31,0b00011110); // ROUT2VOL - 0 = -45dB, 0b00011110 = +0dB + _es8388I2cWrite(0x26,0x09); // Mixer + _es8388I2cWrite(0x27,0x50); // Mixer + _es8388I2cWrite(0x2a,0x50); // Mixer + _es8388I2cWrite(0x03,0x00); // Power } public: From cae1c0046752ef0329ae7918d4d10e28669582f2 Mon Sep 17 00:00:00 2001 From: Ewoud Date: Wed, 5 Apr 2023 13:22:50 +0200 Subject: [PATCH 18/27] ARTIFX add support for pixelart + small changes arti_wled.h: - add jsonToPixels and frameTime - change printf to print usermod_v2_artifx - return MAX(frameTime,FRAMETIME); FX.h and FX_2Dfcn.cpp - add jsonToPixels audioreactive.h - ES8388 allow for default and add moon --- usermods/artifx/arti_wled.h | 20 ++++++++- usermods/artifx/usermod_v2_artifx.h | 2 +- usermods/audioreactive/audio_reactive.h | 6 ++- .../usermod_v2_fastled/usermod_v2_fastled.h | 3 +- wled00/FX.h | 1 + wled00/FX_2Dfcn.cpp | 42 +++++++++++++++++++ wled00/wled.h | 2 +- 7 files changed, 70 insertions(+), 6 deletions(-) diff --git a/usermods/artifx/arti_wled.h b/usermods/artifx/arti_wled.h index d9c8e363..dd85931b 100644 --- a/usermods/artifx/arti_wled.h +++ b/usermods/artifx/arti_wled.h @@ -86,12 +86,15 @@ enum Externals F_square, F_clamp, - F_printf + F_print, + F_jsonToPixels, //reorder only when creating new wledvxyz.json + F_frameTime }; #if ARTI_PLATFORM != ARTI_ARDUINO #define PI 3.141592654 #endif +uint32_t frameTime = 0; float ARTI::arti_external_function(uint8_t function, float par1, float par2, float par3, float par4, float par5) { @@ -209,6 +212,10 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo case F_millis: return millis(); + case F_jsonToPixels: + SEGMENT.jsonToPixels(SEGMENT.name,(uint8_t)par1); + return floatNull; + default: {} } #else // not arduino @@ -273,6 +280,9 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo case F_millis: return 1000; + + case F_jsonToPixels: + return par1; } #endif @@ -315,7 +325,7 @@ float ARTI::arti_external_function(uint8_t function, float par1, float par2, flo return t > par3 ? par3 : t; } - case F_printf: { + case F_print: { if (par3 == floatNull) { if (par2 == floatNull) { PRINT_ARTI("%f\n", par1); @@ -454,6 +464,9 @@ void ARTI::arti_set_external_variable(float value, uint8_t variable, float par1, SEGMENT.setPixelColorXY((uint16_t)par1%SEGMENT.virtualWidth(), (uint16_t)par2%SEGMENT.virtualHeight(), value); //2D value!! return; + case F_frameTime: + frameTime = (uint16_t)value; + return; } #else switch (variable) @@ -470,6 +483,9 @@ void ARTI::arti_set_external_variable(float value, uint8_t variable, float par1, RUNLOG_ARTI("arti_set_external_variable: leds(%f, %f) := %f\n", par1, par2, value); return; + case F_frameTime: + frameTime = (uint16_t)value; + return; } #endif diff --git a/usermods/artifx/usermod_v2_artifx.h b/usermods/artifx/usermod_v2_artifx.h index eb919073..9a6fe443 100644 --- a/usermods/artifx/usermod_v2_artifx.h +++ b/usermods/artifx/usermod_v2_artifx.h @@ -96,7 +96,7 @@ uint16_t mode_ARTIFX(void) { } } - return FRAMETIME; + return MAX(frameTime,FRAMETIME); } static const char _data_FX_MODE_ARTIFX[] PROGMEM = "⚙️ ARTI-FX ☾@Speed,Intensity,Custom 1, Custom 2, Custom 3;!;!;1;mp12=0"; diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index 1c14cb79..64b33548 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -2188,7 +2188,11 @@ class AudioReactive : public Usermod { oappend(SET_F("addOption(dd,'.Legacy I2S PDM ☾',51);")); #endif #endif - oappend(SET_F("addOption(dd,'ES8388',6);")); + #if SR_DMTYPE==6 + oappend(SET_F("addOption(dd,'ES8388 ☾ (⎌)',6);")); + #else + oappend(SET_F("addOption(dd,'ES8388 ☾',6);")); + #endif #ifdef SR_SQUELCH oappend(SET_F("addInfo('AudioReactive:config:squelch',1,'⎌ ")); oappendi(SR_SQUELCH); oappend("');"); // 0 is field type, 1 is actual field diff --git a/usermods/usermod_v2_fastled/usermod_v2_fastled.h b/usermods/usermod_v2_fastled/usermod_v2_fastled.h index f26de688..c105396b 100644 --- a/usermods/usermod_v2_fastled/usermod_v2_fastled.h +++ b/usermods/usermod_v2_fastled/usermod_v2_fastled.h @@ -2,11 +2,12 @@ #include "wled.h" -//WLEDMM usermod: CC BY-NC 3.0 licensed effects by Stefan Petrick, only include this usermod only if you accept the terms! +#warning WLEDMM usermod: CC BY-NC 3.0 licensed effects by Stefan Petrick, include this usermod only if you accept the terms! //======================================================================================================================== //======================================================================================================================== //======================================================================================================================== + // Polar basics demo for the // FastLED Podcast #2 // https://www.youtube.com/watch?v=KKjFRZFBUrQ diff --git a/wled00/FX.h b/wled00/FX.h index f62ce24a..b7bd3e06 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -616,6 +616,7 @@ typedef struct Segment { void blur2d(fract8 blur_amount) { blur(blur_amount); } void fill_solid(CRGB c) { fill(RGBW32(c.r,c.g,c.b,0)); } void nscale8(uint8_t scale); + bool jsonToPixels(char *name, uint8_t fileNr); #else uint16_t XY(uint16_t x, uint16_t y) { return x; } void setPixelColorXY(int x, int y, uint32_t c) { setPixelColor(x, c); } diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 84335dd8..98a8f184 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -552,6 +552,48 @@ void Segment::drawArc(uint16_t x0, uint16_t y0, uint16_t radius, uint32_t color, } } +bool Segment::jsonToPixels(char * name, uint8_t fileNr) { + char fileName[32]; + //WLEDMM: als support segment name ledmaps + bool isFile = false;; + // strcpy_P(fileName, PSTR("/mario")); + sprintf(fileName, "/%s%d.json", name, fileNr); //WLEDMM: trick to not include 0 in ledmap.json + // strcat(fileName, ".json"); + isFile = WLED_FS.exists(fileName); + + if (!isFile) { + return false; + } + + if (!requestJSONBufferLock(23)) return false; + + USER_PRINTF("file %s %d", fileName, isFile); + + if (!readObjectFromFile(fileName, nullptr, &doc)) { + releaseJSONBufferLock(); + return false; //if file does not exist just exit + } + + JsonArray map = doc[F("seg")][F("i")]; + + // serializeJson(map, Serial); + + if (!map.isNull() && map.size()) { // not an empty map + + for (uint16_t i=0; i().c_str(), map[i+1].as().c_str(), map[i+2].as().c_str()); + CRGB color = CRGB(map[i+2][0], map[i+2][1], map[i+2][2]); + for (uint16_t j=map[i]; j<=map[i+1]; j++) { + setPixelColor(j, color); + } + } + } + USER_PRINTLN(); + + releaseJSONBufferLock(); + return true; +} + #include "src/font/console_font_4x6.h" #include "src/font/console_font_5x8.h" #include "src/font/console_font_5x12.h" diff --git a/wled00/wled.h b/wled00/wled.h index d673e11b..3b4fc24b 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2304040 +#define VERSION 2304050 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG From 95d6d186c7870e17976efbc229d56bdda0344a92 Mon Sep 17 00:00:00 2001 From: TroyHacks <5659019+troyhacks@users.noreply.github.com> Date: Wed, 5 Apr 2023 11:00:14 -0400 Subject: [PATCH 19/27] ES8388 init optimizations and fixes --- usermods/audioreactive/audio_source.h | 50 ++++++++++----------------- 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/usermods/audioreactive/audio_source.h b/usermods/audioreactive/audio_source.h index 35382bb5..088574d3 100644 --- a/usermods/audioreactive/audio_source.h +++ b/usermods/audioreactive/audio_source.h @@ -519,42 +519,28 @@ class ES8388Source : public I2SSource { } void _es8388InitAdc() { - // This is by no means 100% figured but it's working for line-in - // with a little too much noise for my liking... // https://dl.radxa.com/rock2/docs/hw/ds/ES8388%20user%20Guide.pdf Section 10.1 // https://docs.google.com/spreadsheets/d/1CN3MvhkcPVESuxKyx1xRYqfUit5hOdsG45St9BCUm-g/edit#gid=0 generally - _es8388I2cBegin(); - _es8388I2cWrite(0x08,0x00); // I2S to slave - _es8388I2cWrite(0x02,0xf3); // Power down DEM and STM - _es8388I2cWrite(0x2b,0x80); // Set same LRCK - _es8388I2cWrite(0x00,0x05); // Set chip to Play & Record Mode - _es8388I2cWrite(0x01,0x40); // Power up Analog and lbias ... These 5 (to here) need to be done in order - _es8388I2cWrite(0x03,0x00); // Power up ADC, Analog Input, and Mic Bias - _es8388I2cWrite(0x04,0x3C); // ** In guide, not in working example tho. ** - _es8388I2cWrite(0x0a,0x50); // Use Lin2/Rin2 for ADC input - _es8388I2cWrite(0x09,0x00); // Select Analog Input PGA Gain for ADC to 0dB ** - _es8388I2cWrite(0x0c,0x0c); // I2S format, 24-bit - _es8388I2cWrite(0x0d,0x02); // Set MCLK/LRCK ratio to 256 - _es8388I2cWrite(0x10,0x00); // Set ADC digital volume attenuation to 0dB (left) - _es8388I2cWrite(0x11,0x00); // Set ADC digital volume attenuation to 0dB (right) - _es8388I2cWrite(0x17,0x18); // Set format for DAC (I2S, 24bit) - _es8388I2cWrite(0x18,0x02); // Set DAC MCLK/LRCK ratio to 256 - _es8388I2cWrite(0x1a,0x00); // DAC Volume attenuation 0dB (left) - _es8388I2cWrite(0x1b,0x00); // DAC Volume attenuation 0dB (right) - _es8388I2cWrite(0x2e,0x00); // LOUT1 volume - 00 = -45dB - _es8388I2cWrite(0x2f,0x00); // ROUT1 volume - 00 = -45dB - _es8388I2cWrite(0x0C,0b00000001); // ADC digital format - I2S + Left Justified - _es8388I2cWrite(0x17,0b00000010); // DAC digital format - I2S + Left Justified - _es8388I2cWrite(0x02,0x00); // Power up DEM and STM - // end of guide init ^^^ - _es8388I2cWrite(0x02,0b01000000); // Power. Guide says it's only 6 bits but that 1 means "turn on sometthing for line-out voltage" - _es8388I2cWrite(0x04,0x0c); // LOUT2 an ROUT2 powered + // Sets ADC to around what AudioReactive expects, and loops line-in to line-out/headphone for monitoring. + _es8388I2cBegin(); + _es8388I2cWrite(0x08,0x00); // I2S to slave + _es8388I2cWrite(0x02,0xf3); // Power down DEM and STM + _es8388I2cWrite(0x2b,0x80); // Set same LRCK + _es8388I2cWrite(0x00,0x05); // Set chip to Play & Record Mode + _es8388I2cWrite(0x0d,0x02); // Set MCLK/LRCK ratio to 256 + _es8388I2cWrite(0x01,0x40); // Power up analog and lbias + _es8388I2cWrite(0x03,0x00); // Power up ADC, Analog Input, and Mic Bias + _es8388I2cWrite(0x0a,0x50); // Use Lin2/Rin2 for ADC input ("line-in") + _es8388I2cWrite(0x09,0x00); // Select Analog Input PGA Gain for ADC to 0dB (L+R) + _es8388I2cWrite(0x10,0b01000000); // Set ADC digital volume attenuation to -32dB (left) + _es8388I2cWrite(0x11,0b01000000); // Set ADC digital volume attenuation to -32dB (right) + _es8388I2cWrite(0x04,0x0c); // Turn on LOUT2 and ROUT2 power + _es8388I2cWrite(0x02,0b01000000); // Power up DEM and STM and undocumented bit for "turn on line-out amp" + _es8388I2cWrite(0x26,0x09); // Mixer - route LIN2/RIN2 to output + _es8388I2cWrite(0x27,0b01010000); // Mixer - route LIN to left mixer, 0dB gain + _es8388I2cWrite(0x2a,0b01010000); // Mixer - route RIN to right mixer, 0dB gain _es8388I2cWrite(0x30,0b00011110); // LOUT2VOL - 0 = -45dB, 0b00011110 = +0dB _es8388I2cWrite(0x31,0b00011110); // ROUT2VOL - 0 = -45dB, 0b00011110 = +0dB - _es8388I2cWrite(0x26,0x09); // Mixer - _es8388I2cWrite(0x27,0x50); // Mixer - _es8388I2cWrite(0x2a,0x50); // Mixer - _es8388I2cWrite(0x03,0x00); // Power } public: From 7372d3044995a6c1cd8e5482e95c54ac820c3576 Mon Sep 17 00:00:00 2001 From: MoonModules <91013628+MoonModules@users.noreply.github.com> Date: Wed, 5 Apr 2023 23:05:21 +0200 Subject: [PATCH 20/27] Update FUNDING.yml --- .github/FUNDING.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 0ac97d66..5c87f432 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ -github: [Aircoookie,MoonModules] -custom: ['https://paypal.me/Aircoookie','https://paypal.me/ewowi'] +github: [] +custom: ['https://www.paypal.com/donate?business=moonmodules@icloud.com'] From 753f5621d1752651df7769ad9ee043964328c42d Mon Sep 17 00:00:00 2001 From: Ewoud Date: Thu, 6 Apr 2023 11:49:16 +0200 Subject: [PATCH 21/27] ws sendLiveLedsWs: no skiplines to show large matrices uncompressed --- wled00/FX_2Dfcn.cpp | 5 ----- wled00/wled.h | 2 +- wled00/ws.cpp | 20 ++++---------------- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 98a8f184..f1003e45 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -567,8 +567,6 @@ bool Segment::jsonToPixels(char * name, uint8_t fileNr) { if (!requestJSONBufferLock(23)) return false; - USER_PRINTF("file %s %d", fileName, isFile); - if (!readObjectFromFile(fileName, nullptr, &doc)) { releaseJSONBufferLock(); return false; //if file does not exist just exit @@ -576,12 +574,9 @@ bool Segment::jsonToPixels(char * name, uint8_t fileNr) { JsonArray map = doc[F("seg")][F("i")]; - // serializeJson(map, Serial); - if (!map.isNull() && map.size()) { // not an empty map for (uint16_t i=0; i().c_str(), map[i+1].as().c_str(), map[i+2].as().c_str()); CRGB color = CRGB(map[i+2][0], map[i+2][1], map[i+2][2]); for (uint16_t j=map[i]; j<=map[i+1]; j++) { setPixelColor(j, color); diff --git a/wled00/wled.h b/wled00/wled.h index 3b4fc24b..92f3a9f5 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2304050 +#define VERSION 2304060 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG diff --git a/wled00/ws.cpp b/wled00/ws.cpp index 934cd775..efa9601d 100644 --- a/wled00/ws.cpp +++ b/wled00/ws.cpp @@ -162,12 +162,12 @@ bool sendLiveLedsWs(uint32_t wsClient) #ifdef ESP8266 const size_t MAX_LIVE_LEDS_WS = 256U; #else - const size_t MAX_LIVE_LEDS_WS = 1024U; //WLEDMM use 4096 as max matrix size + const size_t MAX_LIVE_LEDS_WS = 4096U; //WLEDMM use 4096 as max matrix size #endif size_t n = ((used -1)/MAX_LIVE_LEDS_WS) +1; //only serve every n'th LED if count over MAX_LIVE_LEDS_WS size_t pos = (strip.isMatrix ? 4 : 2); size_t bufSize = pos + (used/n)*3; - size_t skipLines = 0; + //WLEDMM: no skipLines AsyncWebSocketMessageBuffer * wsBuf = ws.makeBuffer(bufSize); if (!wsBuf) return false; //out of memory @@ -179,25 +179,13 @@ bool sendLiveLedsWs(uint32_t wsClient) buffer[1] = 2; //version buffer[2] = Segment::maxWidth; buffer[3] = Segment::maxHeight; - if (Segment::maxWidth * Segment::maxHeight > MAX_LIVE_LEDS_WS*4) { - buffer[2] = Segment::maxWidth/4; - buffer[3] = Segment::maxHeight/4; - skipLines = 3; - } else if (Segment::maxWidth * Segment::maxHeight > MAX_LIVE_LEDS_WS) { - buffer[2] = Segment::maxWidth/2; - buffer[3] = Segment::maxHeight/2; - skipLines = 1; - } + //WLEDMM: no skipLines } #endif for (size_t i = 0; pos < bufSize -2; i += n) { -#ifndef WLED_DISABLE_2D - if (strip.isMatrix && skipLines) { - if ((i/Segment::maxWidth)%(skipLines+1)) i += Segment::maxWidth * skipLines; - } -#endif + //WLEDMM: no skipLines uint32_t c = strip.getPixelColor(i); buffer[pos++] = qadd8(W(c), R(c)); //R, add white channel to RGB channels as a simple RGBW -> RGB map buffer[pos++] = qadd8(W(c), G(c)); //G From 669b81de92edc6be7c54d3fe77f86c3bde65b554 Mon Sep 17 00:00:00 2001 From: MoonModules <91013628+MoonModules@users.noreply.github.com> Date: Thu, 6 Apr 2023 14:29:59 +0200 Subject: [PATCH 22/27] Update readme.md --- readme.md | 74 +++++++------------------------------------------------ 1 file changed, 9 insertions(+), 65 deletions(-) diff --git a/readme.md b/readme.md index fc5660c4..de25450c 100644 --- a/readme.md +++ b/readme.md @@ -4,81 +4,25 @@ - +

-# Welcome to my project WLED! ✨ +# Welcome to WLED MoonModules! ✨ -A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B, WS2811, SK6812) LEDs or also SPI based chipsets like the WS2801 and APA102! +image -## ⚙️ Features -- WS2812FX library with more than 100 special effects -- FastLED noise effects and 50 palettes -- Modern UI with color, effect and segment controls -- Segments to set different effects and colors to user defined parts of the LED string -- Settings page - configuration via the network -- Access Point and station mode - automatic failsafe AP -- Up to 10 LED outputs per instance -- Support for RGBW strips -- Up to 250 user presets to save and load colors/effects easily, supports cycling through them. -- Presets can be used to automatically execute API calls -- Nightlight function (gradually dims down) -- Full OTA software updatability (HTTP + ArduinoOTA), password protectable -- Configurable analog clock (Cronixie, 7-segment and EleksTube IPS clock support via usermods) -- Configurable Auto Brightness limit for safe operation -- Filesystem-based config for easier backup of presets and settings +MoonModules/WLED is a fork from Aircoookie/WLED which contains latest merge of v0.14 of WLED with additional features. -## 💡 Supported light control interfaces -- WLED app for [Android](https://play.google.com/store/apps/details?id=com.aircoookie.WLED) and [iOS](https://apps.apple.com/us/app/wled/id1475695033) -- JSON and HTTP request APIs -- MQTT -- E1.31, Art-Net, DDP and TPM2.net -- [diyHue](https://github.com/diyhue/diyHue) (Wled is supported by diyHue, including Hue Sync Entertainment under udp. Thanks to [Gregory Mallios](https://github.com/gmallios)) -- [Hyperion](https://github.com/hyperion-project/hyperion.ng) -- UDP realtime -- Alexa voice control (including dimming and color) -- Sync to Philips hue lights -- Adalight (PC ambilight via serial) and TPM2 -- Sync color of multiple WLED devices (UDP notifier) -- Infrared remotes (24-key RGB, receiver required) -- Simple timers/schedules (time from NTP, timezones/DST supported) +This fork is created by members of the Atuline/WLED team to make development against v0.14 possible while still preserving Atuline/WLED v0.13 as a stable and supported version. The Atuline/WLED fork is also called WLED SR (Sound Reactive). -## 📲 Quick start guide and documentation - -See the [documentation on our official site](https://mm.kno.wled.ge)! - -[On this page](https://mm.kno.wled.ge/basics/tutorials/) you can find excellent tutorials and tools to help you get your new project up and running! - -## 🖼️ User interface - - -## 💾 Compatible hardware - -See [here](https://mm.kno.wled.ge/basics/compatible-hardware)! - -## ✌️ Other - -Licensed under the MIT license -Credits [here](https://mm.kno.wled.ge/about/contributors/)! - -Join the Discord server to discuss everything about WLED! - - - -Check out the WLED [Discourse forum](https://wled.discourse.group)! - -You can also send me mails to [dev.aircoookie@gmail.com](mailto:dev.aircoookie@gmail.com), but please, only do so if you want to talk to me privately. - -If WLED really brightens up your day, you can [![](https://img.shields.io/badge/send%20me%20a%20small%20gift-paypal-blue.svg?style=flat-square)](https://paypal.me/aircoookie) +More info here: what-is-moonmodules +HTML tutorial +Donations will be used to buy WLED related hardware and or software shared by the contributors of this repo. *Disclaimer:* -If you are prone to photosensitive epilepsy, we recommended you do **not** use this software. -If you still want to try, don't use strobe, lighting or noise modes or high effect speed settings. - -As per the MIT license, I assume no liability for any damage to you or any other person or equipment. - +Using this software is the users responsibility as it is not bug free. Therefore contributors of this repo are not reliable for anything including but not limited to spontaneous combustion of the entire led strip, the house and the inevitable heat death of the universe From a77900b0957910355522b9d3217d644d44ea96f3 Mon Sep 17 00:00:00 2001 From: MoonModules <91013628+MoonModules@users.noreply.github.com> Date: Thu, 6 Apr 2023 14:32:53 +0200 Subject: [PATCH 23/27] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index de25450c..c00ebd46 100644 --- a/readme.md +++ b/readme.md @@ -21,7 +21,7 @@ This fork is created by members of the Atuline/WLED team to make development aga More info here: what-is-moonmodules HTML tutorial -Donations will be used to buy WLED related hardware and or software shared by the contributors of this repo. +Donations will be used to buy WLED related hardware, software or drinks shared by the contributors of this repo. *Disclaimer:* From 00e9c59295e1d441f131f644fd367cc6212f6c09 Mon Sep 17 00:00:00 2001 From: MoonModules <91013628+MoonModules@users.noreply.github.com> Date: Thu, 6 Apr 2023 14:36:08 +0200 Subject: [PATCH 24/27] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index c00ebd46..132fdc41 100644 --- a/readme.md +++ b/readme.md @@ -21,7 +21,7 @@ This fork is created by members of the Atuline/WLED team to make development aga More info here: what-is-moonmodules HTML tutorial -Donations will be used to buy WLED related hardware, software or drinks shared by the contributors of this repo. +Donations will be used to buy WLED related hardware, software or drinks shared with the contributors of this repo. *Disclaimer:* From b09077627e4c939a4410afa11d68ccfe7542f1b2 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 6 Apr 2023 17:56:32 +0200 Subject: [PATCH 25/27] low-cut audio input filtering * 40Hz low-cut and DC blocker filter - will remove any signal offsets and also removes rumbling noise up to 12db * DC blocker set as default for all sources (prerequisite for later measuring sound pressure) additional filtering options are in the making :-) --- usermods/audioreactive/audio_reactive.h | 50 ++++++++++++++++++------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index 64b33548..3d60a30a 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -121,7 +121,7 @@ const float agcSampleSmooth[AGC_NUM_PRESETS] = { 1/12.f, 1/6.f, 1/16.f}; // static AudioSource *audioSource = nullptr; static volatile bool disableSoundProcessing = false; // if true, sound processing (FFT, filters, AGC) will be suspended. "volatile" as its shared between tasks. -static bool useBandPassFilter = false; // if true, enables a bandpass filter 80Hz-16Khz to remove noise. Applies before FFT. +static uint8_t useInputFilter = 0; // enables low-cut filtering. Applies before FFT. //WLEDMM add experimental settings static uint8_t micLevelMethod = 0; // 0=old "floating" miclev, 1=new "freeze" mode, 2=fast freeze mode (mode 2 may not work for you) @@ -183,7 +183,7 @@ static TaskHandle_t FFT_Task = nullptr; static const float fftResultPink[MAX_PINK+1][NUM_GEQ_CHANNELS] = { { 1.70f, 1.71f, 1.73f, 1.78f, 1.68f, 1.56f, 1.55f, 1.63f, 1.79f, 1.62f, 1.80f, 2.06f, 2.47f, 3.35f, 6.83f, 9.55f }, // 0 default from SR WLED // { 1.30f, 1.32f, 1.40f, 1.46f, 1.52f, 1.57f, 1.68f, 1.80f, 1.89f, 2.00f, 2.11f, 2.21f, 2.30f, 2.39f, 3.09f, 4.34f }, // - Line-In Generic -> pink noise adjustment only - { 1.24f, 1.20f, 1.30f, 1.40f, 1.48f, 1.57f, 1.68f, 1.80f, 1.89f, 2.00f, 2.14f, 2.26f, 2.60f, 3.00f, 3.70f, 5.20f }, // 1 Line-In CS5343 + { 2.35f, 1.32f, 1.32f, 1.40f, 1.48f, 1.57f, 1.68f, 1.80f, 1.89f, 1.95f, 2.14f, 2.26f, 2.50f, 2.90f, 4.20f, 6.50f }, // 1 Line-In CS5343 + DC blocker { 1.82f, 1.72f, 1.70f, 1.50f, 1.52f, 1.57f, 1.68f, 1.80f, 1.89f, 2.00f, 2.11f, 2.21f, 2.30f, 2.90f, 3.86f, 6.29f}, // 2 IMNP441 datasheet response profile * pink noise { 2.80f, 2.20f, 1.30f, 1.15f, 1.55f, 2.45f, 4.20f, 2.80f, 3.20f, 3.60f, 4.20f, 4.90f, 5.70f, 6.05f,10.50f,14.85f}, // 3 IMNP441 - big speaker, strong bass @@ -341,6 +341,23 @@ constexpr bool skipSecondFFT = true; #else constexpr bool skipSecondFFT = false; #endif + +// High-Pass "DC blocker" filter +// see https://www.dsprelated.com/freebooks/filters/DC_Blocker.html +static void runDCBlocker(uint_fast16_t numSamples, float *sampleBuffer) { + constexpr float filterR = 0.990f; // around 40hz + static float xm1 = 0.0f; + static float ym1 = 0.0f; + + for (unsigned i=0; i < numSamples; i++) { + float value = sampleBuffer[i]; + float filtered = value-xm1 + filterR*ym1; + xm1 = value; + ym1 = filtered; + sampleBuffer[i] = filtered; + } +} + // // FFT main task // @@ -410,7 +427,12 @@ void FFTcode(void * parameter) // band pass filter - can reduce noise floor by a factor of 50 // downside: frequencies below 100Hz will be ignored - if (useBandPassFilter) runMicFilter(samplesFFT, vReal); + if ((useInputFilter > 0) && (useInputFilter < 99)) { + switch(useInputFilter) { + case 1: runMicFilter(samplesFFT, vReal); break; // PDM microphone bandpass + case 2: runDCBlocker(samplesFFT, vReal); break; // generic Low-Cut + DC blocker (~40hz cut-off) + } + } // find highest sample in the batch float maxSample = 0.0f; // max sample from FFT batch @@ -531,7 +553,7 @@ void FFTcode(void * parameter) if (freqDist == 0) { /* new mapping, optimized for 22050 Hz by softhack007 --- update: removed overlap */ // bins frequency range - if (useBandPassFilter) { + if (useInputFilter==1) { // skip frequencies below 100hz fftCalc[ 0] = 0.8f * fftAddAvg(3,3); fftCalc[ 1] = 0.9f * fftAddAvg(4,4); @@ -560,7 +582,7 @@ void FFTcode(void * parameter) fftCalc[14] = fftAddAvg(104,164) * 0.88f; // 61 4479 - 7106 high mid + high -- with slight damping } else if (freqDist == 1) { //WLEDMM: Rightshft: note ewowi: frequencies in comments are not correct - if (useBandPassFilter) { + if (useInputFilter==1) { // skip frequencies below 100hz fftCalc[ 0] = 0.8f * fftAddAvg(1,1); fftCalc[ 1] = 0.9f * fftAddAvg(2,2); @@ -1429,7 +1451,7 @@ class AudioReactive : public Usermod { #endif delay(100); // Give that poor microphone some time to setup. - useBandPassFilter = false; + useInputFilter = 2; // default: DC blocker switch (dmType) { #if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32S3) // stub cases for not-yet-supported I2S modes on other ESP32 chips @@ -1447,7 +1469,7 @@ class AudioReactive : public Usermod { break; case 2: DEBUGSR_PRINTLN(F("AR: ES7243 Microphone (right channel only).")); - //useBandPassFilter = true; + //useInputFilter = 0; // in case you need to disable low-cut software filtering audioSource = new ES7243(SAMPLE_RATE, BLOCK_SIZE); delay(100); if (audioSource) audioSource->initialize(sdaPin, sclPin, i2swsPin, i2ssdPin, i2sckPin, mclkPin); @@ -1460,7 +1482,6 @@ class AudioReactive : public Usermod { break; case 4: DEBUGSR_PRINT(F("AR: Generic I2S Microphone with Master Clock - ")); DEBUGSR_PRINTLN(F(I2S_MIC_CHANNEL_TEXT)); - //useBandPassFilter = true; audioSource = new I2SSource(SAMPLE_RATE, BLOCK_SIZE, 1.0f/24.0f); //audioSource = new I2SSource(SAMPLE_RATE, BLOCK_SIZE, 1.0f/24.0f, false); // I2S SLAVE mode - does not work, unfortunately delay(100); @@ -1470,21 +1491,22 @@ class AudioReactive : public Usermod { case 5: DEBUGSR_PRINT(F("AR: I2S PDM Microphone - ")); DEBUGSR_PRINTLN(F(I2S_PDM_MIC_CHANNEL_TEXT)); audioSource = new I2SSource(SAMPLE_RATE, BLOCK_SIZE, 1.0f/4.0f); - useBandPassFilter = true; // this reduces the noise floor on SPM1423 from 5% Vpp (~380) down to 0.05% Vpp (~5) + useInputFilter = 1; // PDM bandpass filter - this reduces the noise floor on SPM1423 from 5% Vpp (~380) down to 0.05% Vpp (~5) delay(100); if (audioSource) audioSource->initialize(i2swsPin, i2ssdPin); break; case 51: DEBUGSR_PRINT(F("AR: Legacy PDM Microphone - ")); DEBUGSR_PRINTLN(F(I2S_PDM_MIC_CHANNEL_TEXT)); audioSource = new I2SSource(SAMPLE_RATE, BLOCK_SIZE, 1.0f); - useBandPassFilter = true; + useInputFilter = 1; // PDM bandpass filter delay(100); if (audioSource) audioSource->initialize(i2swsPin, i2ssdPin); break; #endif case 6: DEBUGSR_PRINTLN(F("AR: ES8388 Source")); - audioSource = new ES8388Source(SAMPLE_RATE, BLOCK_SIZE); + audioSource = new ES8388Source(SAMPLE_RATE, BLOCK_SIZE, 1.0f); + //useInputFilter = 0; // to disable low-cut software filtering and restore previous behaviour delay(100); if (audioSource) audioSource->initialize(sdaPin, sclPin, i2swsPin, i2ssdPin, i2sckPin, mclkPin); break; @@ -1494,7 +1516,7 @@ class AudioReactive : public Usermod { case 0: default: DEBUGSR_PRINTLN(F("AR: Analog Microphone (left channel only).")); - useBandPassFilter = true; + useInputFilter = 1; // PDM bandpass filter seems to work well for analog, too audioSource = new I2SAdcSource(SAMPLE_RATE, BLOCK_SIZE); delay(100); if (audioSource) audioSource->initialize(audioPin); @@ -2102,8 +2124,8 @@ class AudioReactive : public Usermod { if (dmType == 51) dmType = SR_DMTYPE; // MCU does not support legacy PDM #endif #else - if (dmType == 5) useBandPassFilter = true; // enable filter for PDM - if (dmType == 51) useBandPassFilter = true /*false*/; // switch on filter for legacy PDM + if (dmType == 5) useInputFilter = 1; // enable filter for PDM + if (dmType == 51) useInputFilter = 1; // switch on filter for legacy PDM #endif configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][0], i2ssdPin); From 197e120e3bd35b5be6ab2c963ccde86ddf0eff2d Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 6 Apr 2023 18:58:20 +0200 Subject: [PATCH 26/27] estimated audio sound pressure --- usermods/audioreactive/audio_reactive.h | 73 ++++++++++++++++++++++++- wled00/FX.cpp | 6 +- wled00/util.cpp | 5 +- 3 files changed, 78 insertions(+), 6 deletions(-) diff --git a/usermods/audioreactive/audio_reactive.h b/usermods/audioreactive/audio_reactive.h index 3d60a30a..31e185ea 100644 --- a/usermods/audioreactive/audio_reactive.h +++ b/usermods/audioreactive/audio_reactive.h @@ -232,6 +232,7 @@ static const float fftResultPink[MAX_PINK+1][NUM_GEQ_CHANNELS] = { // globals and FFT Output variables shared with animations static float FFT_MajorPeak = 1.0f; // FFT: strongest (peak) frequency static float FFT_Magnitude = 0.0f; // FFT: volume (magnitude) of peak frequency +static float FFT_MajPeakSmth = 1.0f; // FFT: (peak) frequency, smooth static uint8_t fftResult[NUM_GEQ_CHANNELS]= {0};// Our calculated freq. channel result table to be used by effects #if defined(WLED_DEBUG) || defined(SR_DEBUG) || defined(SR_STATS) static float fftTaskCycle = 0; // avg cycle time for FFT task @@ -498,6 +499,7 @@ void FFTcode(void * parameter) FFT.MajorPeak(&FFT_MajorPeak, &FFT_Magnitude); // let the effects know which freq was most dominant #endif FFT_MajorPeak = constrain(FFT_MajorPeak, 1.0f, 11025.0f); // restrict value to range expected by effects + FFT_MajPeakSmth = FFT_MajPeakSmth + 0.42 * (FFT_MajorPeak - FFT_MajPeakSmth); // I like this "swooping peak" look } else { // skip second run --> clear fft results, keep peaks memset(vReal, 0, sizeof(vReal)); @@ -918,6 +920,8 @@ class AudioReactive : public Usermod { // variables used in effects int16_t volumeRaw = 0; // either sampleRaw or rawSampleAgc depending on soundAgc float my_magnitude =0.0f; // FFT_Magnitude, scaled by multAgc + float agcSensitivity = 128; // AGC sensitivity estimation, based on agc gain (multAgc). calculated by getSensitivity(). range 0..255 + float soundPressure = 0; // Sound Pressure estimation, based on microphone raw readings. 0 ->5db, 255 ->105db // used to feed "Info" Page unsigned long last_UDPTime = 0; // time of last valid UDP sound sync datapacket @@ -1228,6 +1232,53 @@ class AudioReactive : public Usermod { } // getSample() + // current sensitivity, based on AGC gain (multAgc) + float getSensitivity() + { + // start with AGC gain factor + float tmpSound = multAgc; + // experimental: this gives you a calculated "real gain" + // if ((sampleAvg> 1.0) && (sampleReal > 0.05)) tmpSound = (float)sampleRaw / sampleReal; // calculate gain from sampleReal + // else tmpSound = ((float)sampleGain/40.0f * (float)inputLevel/128.0f) + 1.0f/16.0f; // silence --> use values from user settings + + if (soundAgc == 0) + tmpSound = ((float)sampleGain/40.0f * (float)inputLevel/128.0f) + 1.0f/16.0f; // AGC off -> use non-AGC gain from presets + else + tmpSound /= (float)sampleGain/40.0f + 1.0f/16.0f; // AGC ON -> scale value so 1 = middle value + + // scale to 0..255. Actually I'm not absolutely happy with this, but it works + if (tmpSound > 1.0) tmpSound = sqrtf(tmpSound); + if (tmpSound > 1.25) tmpSound = ((tmpSound-1.25f)/3.42f) +1.25f; + // we have a value now that should be between 0 and 4 (representing gain 1/16 ... 16.0) + return fminf(fmaxf(128.0*tmpSound -6.0f, 0), 255.0); // return scaled non-inverted value // "-6" to ignore values below 1/24 + } + + // estimate sound pressure, based on some assumptions : + // * sample max = 32676 -> Acoustic overload point --> 105db ==> 255 + // * sample < squelch -> just above hearing level --> 5db ==> 0 + // see https://en.wikipedia.org/wiki/Sound_pressure#Examples_of_sound_pressure + // use with I2S digital microphones. Expect stupid values for analog in, and with Line-In !! + float estimatePressure() { + // some constants + constexpr float logMinSample = 1.2237754316221f; // ln(3.4) + constexpr float sampleMin = 3.4f; + constexpr float logMaxSample = 10.1895683436f; // ln(32767 - 6144) + constexpr float sampleMax = 32767.0f - 6144.0f; + + // take the max sample from last I2S batch. + float micSampleMax = fabsf(sampleReal); // from getSample() - nice results, however distorted by MicLev processing + //float micSampleMax = fabsf(micDataReal); // from FFTCode() - better source, but I'll do more testing before activating this + // make sure we are in expected ranges + if(micSampleMax <= sampleMin) return 0.0f; + if(micSampleMax >= sampleMax) return 255.0f; + + // apply logarithmic scaling + float scaledvalue = logf(micSampleMax); + scaledvalue = (scaledvalue - logMinSample) / (logMaxSample - logMinSample); // 0...1 + return fminf(fmaxf(256.0*scaledvalue, 0), 255.0); // scaled value + } + + /* Limits the dynamics of volumeSmth (= sampleAvg or sampleAgc). * does not affect FFTResult[] or volumeRaw ( = sample or rawSampleAgc) */ @@ -1422,12 +1473,12 @@ class AudioReactive : public Usermod { // usermod exchangeable data // we will assign all usermod exportable data here as pointers to original variables or arrays and allocate memory for pointers um_data = new um_data_t; - um_data->u_size = 8; + um_data->u_size = 11; um_data->u_type = new um_types_t[um_data->u_size]; um_data->u_data = new void*[um_data->u_size]; um_data->u_data[0] = &volumeSmth; //*used (New) um_data->u_type[0] = UMT_FLOAT; - um_data->u_data[1] = &volumeRaw; // used (New) + um_data->u_data[1] = &volumeRaw; // used (New) um_data->u_type[1] = UMT_UINT16; um_data->u_data[2] = fftResult; //*used (Blurz, DJ Light, Noisemove, GEQ_base, 2D Funky Plank, Akemi) um_data->u_type[2] = UMT_BYTE_ARR; @@ -1435,12 +1486,18 @@ class AudioReactive : public Usermod { um_data->u_type[3] = UMT_BYTE; um_data->u_data[4] = &FFT_MajorPeak; //*used (Ripplepeak, Freqmap, Freqmatrix, Freqpixels, Freqwave, Gravfreq, Rocktaves, Waterfall) um_data->u_type[4] = UMT_FLOAT; - um_data->u_data[5] = &my_magnitude; // used (New) + um_data->u_data[5] = &my_magnitude; // used (New) um_data->u_type[5] = UMT_FLOAT; um_data->u_data[6] = &maxVol; // assigned in effect function from UI element!!! (Puddlepeak, Ripplepeak, Waterfall) um_data->u_type[6] = UMT_BYTE; um_data->u_data[7] = &binNum; // assigned in effect function from UI element!!! (Puddlepeak, Ripplepeak, Waterfall) um_data->u_type[7] = UMT_BYTE; + um_data->u_data[8] = &FFT_MajPeakSmth; // new + um_data->u_type[8] = UMT_FLOAT; + um_data->u_data[9] = &soundPressure; // used (New) + um_data->u_type[9] = UMT_FLOAT; + um_data->u_data[10] = &agcSensitivity; // used (New) + um_data->u_type[10] = UMT_FLOAT; } // Reset I2S peripheral for good measure @@ -1666,6 +1723,16 @@ class AudioReactive : public Usermod { if (soundAgc) my_magnitude *= multAgc; if (volumeSmth < 1 ) my_magnitude = 0.001f; // noise gate closed - mute + // get AGC sensitivity and sound pressure + static unsigned long lastEstimate = 0; + if (millis() - lastEstimate > 12) { + lastEstimate = millis(); + agcSensitivity = getSensitivity(); + if (limiterOn) + soundPressure = soundPressure + 0.38f * (estimatePressure() - soundPressure); // dynamics limiter on -> some smoothing + else + soundPressure = soundPressure + 0.95f * (estimatePressure() - soundPressure); // dynamics limiter on -> raw value + } limitSampleDynamics(); } // if (!disableSoundProcessing) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index b2c64012..5a3de00c 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -5976,14 +5976,16 @@ static const char _data_FX_MODE_2DDRIFTROSE[] PROGMEM = "Drift Rose@Fade,Blur;;; um_data_t *um_data; if (usermods.getUMData(&um_data, USERMOD_ID_AUDIOREACTIVE)) { volumeSmth = *(float*) um_data->u_data[0]; - volumeRaw = *(float*) um_data->u_data[1]; + volumeRaw = *(int16_t*) um_data->u_data[1]; fftResult = (uint8_t*) um_data->u_data[2]; samplePeak = *(uint8_t*) um_data->u_data[3]; FFT_MajorPeak = *(float*) um_data->u_data[4]; my_magnitude = *(float*) um_data->u_data[5]; maxVol = (uint8_t*) um_data->u_data[6]; // requires UI element (SEGMENT.customX?), changes source element binNum = (uint8_t*) um_data->u_data[7]; // requires UI element (SEGMENT.customX?), changes source element - fftBin = (float*) um_data->u_data[8]; + FFT_MajPeakSmth= *(float*) um_data->u_data[8]; // FFT Majorpeak smoothed + soundPressure = *(float*) um_data->u_data[9]; // sound pressure ( = logarithmic scale microphone input). Range 0...255 + agcSensitivity = *(float*) um_data->u_data[10]; // current AGC gain, scaled to 0...255. use "255.0f - agcSensitivity" to get MIC input level } else { // add support for no audio data um_data = simulateSound(SEGMENT.soundSim); diff --git a/wled00/util.cpp b/wled00/util.cpp index 5b93780d..e850fff7 100644 --- a/wled00/util.cpp +++ b/wled00/util.cpp @@ -423,7 +423,7 @@ um_data_t* simulateSound(uint8_t simulationId) // NOTE!!! // This may change as AudioReactive usermod may change um_data = new um_data_t; - um_data->u_size = 8; + um_data->u_size = 11; um_data->u_type = new um_types_t[um_data->u_size]; um_data->u_data = new void*[um_data->u_size]; um_data->u_data[0] = &volumeSmth; @@ -434,6 +434,9 @@ um_data_t* simulateSound(uint8_t simulationId) um_data->u_data[5] = &my_magnitude; um_data->u_data[6] = &maxVol; um_data->u_data[7] = &binNum; + um_data->u_data[8] = &FFT_MajorPeak; // dummy (samplePeak smoothed) + um_data->u_data[9] = &volumeSmth; // dummy (soundPressure) + um_data->u_data[10] = &volumeSmth; // dummy (agcSensitivity) } else { // get arrays from um_data fftResult = (uint8_t*)um_data->u_data[2]; From 6cce70b207aa084e58ef659288c6bea9d6949421 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 6 Apr 2023 19:21:27 +0200 Subject: [PATCH 27/27] gravimeter and waverly: option to show sound pressure level * adjusted gravimeter and waverly effects so that "Sound Pressure" can be used instead of volume * some improvements to gravimeter effect * fixing some over/underflows in gravimeter * waverly: option "No Clouds" to only show lower part --- wled00/FX.cpp | 53 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 5a3de00c..df71a056 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -6158,8 +6158,13 @@ uint16_t mode_2DWaverly(void) { um_data = simulateSound(SEGMENT.soundSim); } float volumeSmth = *(float*) um_data->u_data[0]; + float soundPressure = *(float*) um_data->u_data[9]; + float agcSensitivity= *(float*) um_data->u_data[10]; SEGMENT.fadeToBlackBy(SEGMENT.speed); + if (SEGENV.check3 && SEGENV.check2) SEGENV.check2 = false; // only one of the two at anyy time + if ((SEGENV.check2) && (volumeSmth > 0.5f)) volumeSmth = soundPressure; // show sound pressure instead of volume + if (SEGENV.check3) volumeSmth = 255.0 - agcSensitivity; // show AGC level instead of volume long t = millis() / 2; for (int i = 0; i < cols; i++) { @@ -6167,7 +6172,8 @@ uint16_t mode_2DWaverly(void) { uint16_t thisMax = map(thisVal, 0, 512, 0, rows); for (int j = 0; j < thisMax; j++) { - SEGMENT.addPixelColorXY(i, j, ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND)); + if (!SEGENV.check1) + SEGMENT.addPixelColorXY(i, j, ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND)); SEGMENT.addPixelColorXY((cols - 1) - i, (rows - 1) - j, ColorFromPalette(SEGPALETTE, map(j, 0, thisMax, 250, 0), 255, LINEARBLEND)); } } @@ -6175,7 +6181,7 @@ uint16_t mode_2DWaverly(void) { return FRAMETIME; } // mode_2DWaverly() -static const char _data_FX_MODE_2DWAVERLY[] PROGMEM = "Waverly ☾@Amplification,Sensitivity;;!;2v;ix=64,si=0"; // Beatsin +static const char _data_FX_MODE_2DWAVERLY[] PROGMEM = "Waverly ☾@Amplification,Sensitivity,,,,No Clouds,Sound Pressure,AGC debug;;!;2v;ix=64,si=0"; // Beatsin #endif // WLED_DISABLE_2D @@ -6304,23 +6310,45 @@ uint16_t mode_gravimeter(void) { // Gravmeter. By Andrew Tuline. um_data = simulateSound(SEGMENT.soundSim); } float volumeSmth = *(float*) um_data->u_data[0]; + int16_t volumeRaw = *(int16_t*)um_data->u_data[1]; + float soundPressure = *(float*) um_data->u_data[9]; + float agcSensitivity= *(float*) um_data->u_data[10]; #ifdef SR_DEBUG uint8_t samplePeak = *(uint8_t*)um_data->u_data[3]; #endif - //SEGMENT.fade_out(240); - SEGMENT.fade_out(249); // 25% + if (SEGENV.call == 0) { + SEGMENT.setUpLeds(); + SEGMENT.fill(BLACK); + } - float segmentSampleAvg = volumeSmth * (float)SEGMENT.intensity / 255.0; - segmentSampleAvg *= 0.25; // divide by 4, to compensate for later "sensitivty" upscaling + float realVolume = volumeSmth; + if (SEGENV.check3 && SEGENV.check2) SEGENV.check2 = false; // only one option + if ((SEGENV.check2) && (realVolume >= 0.5f)) volumeSmth = soundPressure; + if (SEGENV.check3) volumeSmth = 255.0 - agcSensitivity; - float mySampleAvg = mapf(segmentSampleAvg*2.0, 0, 64, 0, (SEGLEN-1)); // map to pixels availeable in current segment + SEGMENT.fade_out(253); + float sensGain = (float)(SEGMENT.intensity+2) / 257.0f; // min gain = 1/128 + if (sensGain > 0.5f) sensGain = ((sensGain -0.5f) * 2.0f) +0.5f; // extend upper range to 3x + + float segmentSampleAvg = volumeSmth * sensGain; + segmentSampleAvg *= 0.25f; // divide by 4, to compensate for later "sensitivty" upscaling + float mySampleAvg = mapf(segmentSampleAvg*2.0f, 0, 64, 0, (SEGLEN-1)); // map to pixels availeable in current segment int tempsamp = constrain(mySampleAvg,0,SEGLEN-1); // Keep the sample from overflowing. uint8_t gravity = 8 - SEGMENT.speed/32; + int blendVal; + if (SEGENV.check1) blendVal = 255 - roundf((segmentSampleAvg)*6.5f); // reverse, min 48 + else blendVal = roundf(segmentSampleAvg*8.0f); + + //if ((realVolume > 1) && ((blendVal < 1) || (blendVal > 254))) blendVal = millis() % 192; // provides flickering when overtuned + //else + blendVal = constrain(blendVal, 0, 255); // and saturation for all + + if (realVolume > 0.5) // hide main "bar" in silence for (int i=0; i= gravcen->topLED) @@ -6328,8 +6356,11 @@ uint16_t mode_gravimeter(void) { // Gravmeter. By Andrew Tuline. else if (gravcen->gravityCounter % gravity == 0) gravcen->topLED--; - if (gravcen->topLED > 0) { - SEGMENT.setPixelColor(gravcen->topLED, SEGMENT.color_from_palette(millis(), false, PALETTE_SOLID_WRAP, 0)); + if ((gravcen->topLED > 0) && (SEGMENT.speed < 255)){ // hide top pixel if speed = 255 + if (SEGENV.check2 || SEGENV.check3) + SEGMENT.setPixelColor(gravcen->topLED, SEGMENT.color_from_palette(max(uint16_t(millis()/16),(uint16_t)2), false, PALETTE_SOLID_WRAP, 0)); // flicker a bit slower + else + SEGMENT.setPixelColor(gravcen->topLED, SEGMENT.color_from_palette(max(uint16_t(millis()/2),(uint16_t)2), false, PALETTE_SOLID_WRAP, 0)); // normal flickering } gravcen->gravityCounter = (gravcen->gravityCounter + 1) % gravity; @@ -6342,7 +6373,7 @@ uint16_t mode_gravimeter(void) { // Gravmeter. By Andrew Tuline. return FRAMETIME; } // mode_gravimeter() -static const char _data_FX_MODE_GRAVIMETER[] PROGMEM = "Gravimeter@Rate of fall,Sensitivity;!,!;!;1v;ix=128,m12=2,si=0"; // Arc, Beatsin +static const char _data_FX_MODE_GRAVIMETER[] PROGMEM = "Gravimeter ☾@Rate of fall,Sensitivity,,,,Invert Palette,Sound Pressure,AGC debug;!,!;!;1v;ix=128,m12=2,si=0"; // Arc, Beatsin //////////////////////