From d1e24480e0e89a652180644d78f07565a47e56d1 Mon Sep 17 00:00:00 2001 From: bpohvoodoo Date: Fri, 27 Sep 2019 21:10:17 +0200 Subject: [PATCH] Version Bump to 3.0.0.ALPHA1 * removed LEGACY_ANIMATIONS * removed old Custom Animations from beginning of list. * added Custom Animation 'AutoPlay' with number 56 * added Custom Animation 'Custom WS' with number 57 * added Custom Animation 'TV' with number 58 * added Custom Animation 'E1.31' with number 59 * moved Custom Animation 'Fire2012' to number 60 * moved Custom Animation 'Gradients' to number 61 * REST-API changes (will be documented soon) --- Arduino/McLighting/McLighting.ino | 318 +- Arduino/McLighting/WS2812FX.cpp | 1643 ++++++++ Arduino/McLighting/WS2812FX.h | 650 ++++ Arduino/McLighting/data/apple-touch-icon.png | Bin 0 -> 4500 bytes Arduino/McLighting/data/edit.htm | 674 ++++ Arduino/McLighting/data/edit.htm.gz | Bin 4116 -> 5489 bytes Arduino/McLighting/data/favicon.ico | Bin 1150 -> 34494 bytes Arduino/McLighting/data/index.htm | 2624 ++++++++++++- Arduino/McLighting/data/index.htm.gz | Bin 0 -> 19755 bytes Arduino/McLighting/definitions.h | 34 +- Arduino/McLighting/htm_index_gz.h | 3314 ++++++++--------- .../mode_custom_ws2812fx_animations.h | 171 +- Arduino/McLighting/mode_tv.h | 77 - Arduino/McLighting/request_handlers.h | 443 +-- Arduino/McLighting/rest_api.h | 110 +- Arduino/McLighting/version.h | 2 +- Arduino/McLighting/version_info.ino | 16 +- README.md | 5 + 18 files changed, 7623 insertions(+), 2458 deletions(-) create mode 100644 Arduino/McLighting/WS2812FX.cpp create mode 100644 Arduino/McLighting/WS2812FX.h create mode 100644 Arduino/McLighting/data/apple-touch-icon.png create mode 100644 Arduino/McLighting/data/edit.htm create mode 100644 Arduino/McLighting/data/index.htm.gz delete mode 100644 Arduino/McLighting/mode_tv.h diff --git a/Arduino/McLighting/McLighting.ino b/Arduino/McLighting/McLighting.ino index b2dfae5..8a962cb 100644 --- a/Arduino/McLighting/McLighting.ino +++ b/Arduino/McLighting/McLighting.ino @@ -59,7 +59,7 @@ #endif #endif -#if defined(ENABLE_E131) +#if defined(CUSTOM_WS2812FX_ANIMATIONS) // *************************************************************************** // Load libraries for E131 support // *************************************************************************** @@ -106,7 +106,7 @@ WebSocketsServer webSocket = WebSocketsServer(81); // *************************************************************************** // Load and instanciate WS2812FX library // *************************************************************************** -#include // https://github.com/kitesurfer1404/WS2812FX +#include "WS2812FX.h" // https://github.com/kitesurfer1404/WS2812FX WS2812FX * strip = NULL; #if defined(USE_WS2812FX_DMA) @@ -250,19 +250,10 @@ void saveConfigCallback () { // *************************************************************************** #include "request_handlers.h" -#if defined(ENABLE_TV) -// *************************************************************************** -// Include: TV mode -// *************************************************************************** - #include "mode_tv.h" -#endif - -#if defined(CUSTOM_WS2812FX_ANIMATIONS) // *************************************************************************** // Include: Custom animations // *************************************************************************** - #include "mode_custom_ws2812fx_animations.h" // Add animations in this file -#endif +#include "mode_custom_ws2812fx_animations.h" // Add animations in this file // function to Initialize the strip void initStrip(uint16_t stripSize = WS2812FXStripSettings.stripSize, char RGBOrder[5] = WS2812FXStripSettings.RGBOrder, uint8_t pin = WS2812FXStripSettings.pin, uint8_t fxoptions = WS2812FXStripSettings.fxoptions ){ @@ -279,9 +270,7 @@ void initStrip(uint16_t stripSize = WS2812FXStripSettings.stripSize, char RGBOrd WS2812FXStripSettings.pin = pin; WS2812FXStripSettings.fxoptions = fxoptions; } -#if defined(ENABLE_E131) - -#endif + if (ledstates != NULL) { delete(ledstates); } @@ -310,13 +299,16 @@ void initStrip(uint16_t stripSize = WS2812FXStripSettings.stripSize, char RGBOrd strip->setCustomShow(DMA_Show); #endif //parameters: index, start, stop, mode, color, speed, options - strip->setSegment(0, 0, stripSize - 1, ws2812fx_mode, hex_colors, convertSpeed(ws2812fx_speed), fxoptions); + strip->setSegment(selected_segment, 0, stripSize - 1, ws2812fx_mode, hex_colors_trans, convertSpeed(ws2812fx_speed), fxoptions); + strip->setCustomMode(0, F("Autoplay"), myCustomEffect0); + strip->setCustomMode(1, F("Custom WS"), myCustomEffect1); #if defined(CUSTOM_WS2812FX_ANIMATIONS) - strip->setCustomMode(0, F("Fire 2012"), myCustomEffect0); - strip->setCustomMode(1, F("Gradient"), myCustomEffect1); + strip->setCustomMode(2, F("TV"), myCustomEffect2); + strip->setCustomMode(3, F("E1.31"), myCustomEffect3); + strip->setCustomMode(4, F("Fire 2012"), myCustomEffect4); + strip->setCustomMode(5, F("Gradient"), myCustomEffect5); gReverseDirection = (WS2812FXStripSettings.fxoptions & 128); -#endif -#if defined(ENABLE_E131) + if (e131 != NULL) { delete(e131); } e131 = new ESPAsyncE131(END_UNIVERSE - START_UNIVERSE + 1); float universe_leds = 170.0; // a universe has only 512 (0..511) channels: 3*170 or 4*128 <= 512 @@ -559,15 +551,15 @@ void setup() { (writeConfigFS(updateConfig)) ? DBG_OUTPUT_PORT.println("WiFiManager config FS Save success!"): DBG_OUTPUT_PORT.println("WiFiManager config FS Save failure!"); #endif #if ENABLE_STATE_SAVE == 0 - char last_conf[223]; + char last_conf[225]; DBG_OUTPUT_PORT.println("Saving WiFiManager config"); #if defined(ENABLE_MQTT) - snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d", HOSTNAME, mqtt_host, mqtt_port, mqtt_user, mqtt_pass, WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions); + snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d|%1d", HOSTNAME, mqtt_host, mqtt_port, mqtt_user, mqtt_pass, WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions, transEffect); #else - snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d", HOSTNAME, "", "", "", "", WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions); + snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d|%1d", HOSTNAME, "", "", "", "", WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions, transEffect); #endif last_conf[sizeof(last_conf)] = 0x00; - writeEEPROM(0, 222, last_conf); + writeEEPROM(0, 224, last_conf); EEPROM.commit(); updateConfig = false; #endif @@ -681,9 +673,12 @@ void setup() { #endif snprintf(last_state, sizeof(last_state), "STA|%2d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d|%3d", mode, ws2812fx_mode, ws2812fx_speed, brightness, main_color.red, main_color.green, main_color.blue, main_color.white, back_color.red, back_color.green, back_color.blue, back_color.white, xtra_color.red, xtra_color.green, xtra_color.blue,xtra_color.white); last_state[sizeof(last_state)]= 0x00; - DBG_OUTPUT_PORT.println("finished Main Setup!"); - + ws2812fx_speed_actual = ws2812fx_speed; + brightness_trans = brightness; + memcpy(hex_colors, hex_colors_trans, sizeof(hex_colors_trans)); initStrip(); + strip->setBrightness(0); + DBG_OUTPUT_PORT.println("finished Main Setup!"); } // *************************************************************************** @@ -741,81 +736,38 @@ void loop() { // *************************************************************************** // Simple statemachine that handles the different modes // *************************************************************************** - if ((mode != OFF) && (mode != TV) && (mode != E131)) { // strip->start() is only needed for modes with WS2812FX functionality - if(!strip->isRunning()) strip->start(); - } - - if (((mode == OFF) && (brightness_actual == 0)) || (mode == TV) || (mode == E131)) { + if ((mode == OFF) && ((strip->getBrightness() == 0) || !transEffect)) { if(strip->isRunning()) { strip->strip_off(); // Workaround: to be shure, delay(10); // that strip is really off. Sometimes strip->stop isn't enought strip->stop(); // should clear memory + autoCount = 0; + autoDelay = 0; } else { if (prevmode != mode) { // Start temporarily to clear strip strip->start(); strip->strip_off(); // Workaround: to be shure, delay(10); // that strip is really off. Sometimes strip->stop isn't enought strip->stop(); // should clear memory + autoCount = 0; + autoDelay = 0; } } } - - if (( mode == AUTO) || (mode == HOLD) || ((mode == OFF) && (brightness !=0))) { - strip->service(); // strip->service() is only needed for modes with WS2812FX functionality - } - - if ((prevmode == AUTO) && (mode != AUTO)) { - handleAutoStop(); // stop auto mode - } - + if (mode == OFF) { if (prevmode != mode) { #if defined(ENABLE_MQTT) snprintf(mqtt_buf, sizeof(mqtt_buf), "OK =off", ""); #endif - if (fadeEffect) { - brightness_fade = 0; + if (transEffect) { + brightness_trans = 0; } } } - - if (mode == AUTO) { - if (prevmode != mode) { - brightness_fade = brightness; - handleAutoStart(); - #if defined(ENABLE_MQTT) - snprintf(mqtt_buf, sizeof(mqtt_buf), "OK =auto", ""); - #endif - } - } - - #if defined(ENABLE_TV) - if (mode == TV) { - if (prevmode != mode) { - brightness_fade = brightness; - #if defined(ENABLE_MQTT) - snprintf(mqtt_buf, sizeof(mqtt_buf), "OK =tv", ""); - #endif - } - handleTV(); - } - #endif - - #if defined(ENABLE_E131) - if (mode == E131) { - if (prevmode != mode) { - brightness_fade = brightness; - #if defined(ENABLE_MQTT) - snprintf(mqtt_buf, sizeof(mqtt_buf), "OK =e131", ""); - #endif - } - handleE131(); - } - #endif - + if (mode == INIT_STRIP) { mode = prevmode; - //ws2812fx_mode = strip->getMode(); strip->strip_off(); delay(10); if(strip->isRunning()) strip->stop(); @@ -823,58 +775,34 @@ void loop() { prevmode = INIT_STRIP; } - if (mode == SET_ALL) { - mode = prevmode; - if ((prevmode == OFF) || (prevmode == AUTO) || (prevmode == TV) || (prevmode == E131)) { - setModeByStateString(last_state); - } + if (mode == SET) { + mode = HOLD; + if (ws2812fx_mode != strip->getMode(selected_segment)) { // SET_MODE #if defined(ENABLE_MQTT) snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", ws2812fx_mode); #endif - strip->setMode(ws2812fx_mode); - if (fade_cnt==0) { fade_cnt=1; } - if (!fadeEffect) { fade_cnt=255; } - brightness_fade = brightness; - convertColors(); - prevmode = SET_ALL; + strip->strip_off(); + autoCount = 0; + autoDelay = 0; + strip->setMode(selected_segment, ws2812fx_mode); + } + if (strip->getBrightness() != brightness) { + #if defined(ENABLE_MQTT) + snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %%%i", brightness); + #endif + brightness_trans = brightness; + } + prevmode = SET; strip->trigger(); } - - if (mode == SET_MODE) { + + /*if (mode == SET) { mode = HOLD; - #if defined(ENABLE_MQTT) - snprintf(mqtt_buf, sizeof(mqtt_buf), "OK /%i", ws2812fx_mode); - #endif - strip->setMode(ws2812fx_mode); - brightness_fade = brightness; - prevmode = SET_MODE; - strip->trigger(); - } - - if (mode == SET_COLOR) { - if (fade_cnt==0) { fade_cnt=1; } - if (!fadeEffect) { fade_cnt=255; } - convertColors(); - mode = prevmode; - prevmode = SET_COLOR; - } - // Async color transition - if ((fade_cnt > 0) && (fade_cnt < 254)) { - if ((fadeEffect) && (colorFadeDelay <= millis())) { - hex_colors_actual[0] = fade(hex_colors[0], hex_colors_mem[0], fade_cnt); - hex_colors_actual[1] = fade(hex_colors[1], hex_colors_mem[1], fade_cnt); - hex_colors_actual[2] = fade(hex_colors[2], hex_colors_mem[2], fade_cnt); - fade_cnt++; - colorFadeDelay = millis() + FADE_COLOR_DELAY; - strip->setColors(0, hex_colors_actual); - if ((mode == HOLD) && ((ws2812fx_mode != 1) && (ws2812fx_mode != 2) && (ws2812fx_mode != 8) && (ws2812fx_mode != 9) &&(ws2812fx_mode != 10) && (ws2812fx_mode != 15))) strip->trigger(); - } - } - if (fade_cnt >= 254) { - strip->setColors(0, hex_colors); - if (mode == HOLD) strip->trigger(); - fade_cnt = 0; - } + if (trans_cnt==0) { trans_cnt=1; } + if (!transEffect) { trans_cnt=255; } + convertColorsFade(); + prevmode = SET; + }*/ if (mode == SET_SPEED) { #if defined(ENABLE_MQTT) @@ -883,57 +811,17 @@ void loop() { mode = prevmode; prevmode = SET_SPEED; } - // Async speed transition - if (ws2812fx_speed_actual != ws2812fx_speed) { - if (fadeEffect) { - if (speedFadeDelay <= millis()) { - if (ws2812fx_speed_actual < ws2812fx_speed) { - ws2812fx_speed_actual++; - } - if (ws2812fx_speed_actual > ws2812fx_speed) { - ws2812fx_speed_actual--; - } - speedFadeDelay = millis() + FADE_DELAY; - strip->setSpeed(convertSpeed(ws2812fx_speed_actual)); - if ((mode == HOLD) && ((ws2812fx_mode != 1) && (ws2812fx_mode != 2) && (ws2812fx_mode != 8) && (ws2812fx_mode != 9) &&(ws2812fx_mode != 10) && (ws2812fx_mode != 15))) strip->trigger(); - } - } else { - ws2812fx_speed_actual = ws2812fx_speed; - strip->setSpeed(ws2812fx_speed); - if (mode == HOLD) strip->trigger(); - } - } - - if (mode == SET_BRIGHTNESS) { - #if defined(ENABLE_MQTT) - snprintf(mqtt_buf, sizeof(mqtt_buf), "OK %%%i", brightness); - #endif - brightness_fade = brightness; - mode = prevmode; - prevmode = SET_BRIGHTNESS; - } - // Async brightness transition - if (brightness_actual != brightness_fade) { - if (fadeEffect) { - if(brightnessFadeDelay <= millis()) { - if (brightness_actual < brightness_fade) { - brightness_actual++; - } - if (brightness_actual > brightness_fade) { - brightness_actual--; - } - brightnessFadeDelay = millis() + FADE_DELAY; - strip->setBrightness(brightness_actual); - if ((mode == HOLD) && ((ws2812fx_mode != 1) && (ws2812fx_mode != 2) && (ws2812fx_mode != 8) && (ws2812fx_mode != 9) &&(ws2812fx_mode != 10) && (ws2812fx_mode != 15))) strip->trigger(); - } - } else { - brightness_actual = brightness; - strip->setBrightness(brightness_actual); - if (mode == HOLD) strip->trigger(); - } - } - + if (prevmode != mode) { + convertColors(); + if (memcmp(hex_colors_trans, strip->getColors(selected_segment), sizeof(hex_colors_trans)) != 0) { + DBG_OUTPUT_PORT.println("Colors not equal!"); + if (trans_cnt==0) { trans_cnt=1; } + if (!transEffect) { trans_cnt=255; } + convertColorsFade(); + } + strip->setSpeed(selected_segment, convertSpeed(ws2812fx_speed_actual)); + //strip->setBrightness(brightness_actual); if (prevmode != INIT_STRIP) { // do not save if INIT_STRIP mode was set #if defined(ENABLE_STATE_SAVE) if(!settings_save_state.active()) settings_save_state.once(3, tickerSaveState); @@ -970,21 +858,95 @@ void loop() { (writeConfigFS(updateConfig)) ? DBG_OUTPUT_PORT.println("Config FS Save success!"): DBG_OUTPUT_PORT.println("Config FS Save failure!"); #endif #if ENABLE_STATE_SAVE == 0 - char last_conf[223]; + char last_conf[225]; #if defined(ENABLE_MQTT) - snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d", HOSTNAME, mqtt_host, mqtt_port, mqtt_user, mqtt_pass, WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions); + snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d|%1d", HOSTNAME, mqtt_host, mqtt_port, mqtt_user, mqtt_pass, WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions, transEffect); #else - snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d", HOSTNAME, "", "", "", "", WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions); + snprintf(last_conf, sizeof(last_conf), "CNF|%64s|%64s|%5d|%32s|%32s|%4d|%2d|%4s|%3d|%1d", HOSTNAME, "", "", "", "", WS2812FXStripSettings.stripSize, WS2812FXStripSettings.pin, WS2812FXStripSettings.RGBOrder, WS2812FXStripSettings.fxoptions, transEffect); #endif last_conf[sizeof(last_conf) - 1] = 0x00; - writeEEPROM(0, 222, last_conf); + writeEEPROM(0, 224, last_conf); EEPROM.commit(); updateConfig = false; settings_save_conf.detach(); #endif } #endif + + if ((mode == HOLD) || ((mode == OFF) && ((strip->getBrightness() == 0) || !transEffect))) { + if (ws2812fx_mode == FX_MODE_CUSTOM_0) { + handleAutoPlay(); + } + if(!strip->isRunning()) strip->start(); + strip->service(); + } + // Async color transition + if ((trans_cnt > 0) && (trans_cnt < 255)) { + uint32_t hex_colors_actual[3] = {}; + if ((transEffect) && (colorFadeDelay <= millis())) { + hex_colors_actual[0] = trans(hex_colors_trans[0], hex_colors[0], trans_cnt); + hex_colors_actual[1] = trans(hex_colors_trans[1], hex_colors[1], trans_cnt); + hex_colors_actual[2] = trans(hex_colors_trans[2], hex_colors[2], trans_cnt); + strip->setColors(selected_segment, hex_colors_actual); + trans_cnt++; + colorFadeDelay = millis() + TRANS_COLOR_DELAY; + if (mode == HOLD) strip->trigger(); + } + } + if (trans_cnt > 254) { + memcpy(hex_colors, hex_colors_trans, sizeof(hex_colors_trans)); + strip->setColors(selected_segment, hex_colors); + if (mode == HOLD) strip->trigger(); + trans_cnt = 0; + DBG_OUTPUT_PORT.println("Color transition finished!"); + } + + // Async speed transition + if (ws2812fx_speed_actual != ws2812fx_speed) { + if (transEffect) { + if (speedFadeDelay <= millis()) { + DBG_OUTPUT_PORT.println("Speed actual: "); + DBG_OUTPUT_PORT.println(ws2812fx_speed_actual); + DBG_OUTPUT_PORT.println(convertSpeed(ws2812fx_speed_actual)); + DBG_OUTPUT_PORT.println(unconvertSpeed(convertSpeed(ws2812fx_speed_actual))); + if (ws2812fx_speed_actual < ws2812fx_speed) { + ws2812fx_speed_actual++; + } + if (ws2812fx_speed_actual > ws2812fx_speed) { + ws2812fx_speed_actual--; + } + speedFadeDelay = millis() + TRANS_DELAY; + strip->setSpeed(selected_segment, convertSpeed(ws2812fx_speed_actual)); + if (mode == HOLD) strip->trigger(); + } + } else { + ws2812fx_speed_actual = ws2812fx_speed; + strip->setSpeed(selected_segment, convertSpeed(ws2812fx_speed_actual)); + if (mode == HOLD) strip->trigger(); + } + } + + // Async brightness transition + if (strip->getBrightness() != brightness_trans) { + if (transEffect) { + if(brightnessFadeDelay <= millis()) { + if (strip->getBrightness() < brightness_trans) { + strip->increaseBrightness(1); + } + if (strip->getBrightness() > brightness_trans) { + strip->decreaseBrightness(1); + } + brightnessFadeDelay = millis() + TRANS_DELAY; + //if (mode == HOLD) strip->trigger(); + strip->trigger(); + } + } else { + strip->setBrightness(brightness); + if (mode == HOLD) strip->trigger(); + } + } + prevmode = mode; #if defined(ENABLE_REMOTE) diff --git a/Arduino/McLighting/WS2812FX.cpp b/Arduino/McLighting/WS2812FX.cpp new file mode 100644 index 0000000..2a665c1 --- /dev/null +++ b/Arduino/McLighting/WS2812FX.cpp @@ -0,0 +1,1643 @@ +/* + WS2812FX.cpp - Library for WS2812 LED effects. + + Harm Aldick - 2016 + www.aldick.org + + + FEATURES + * A lot of blinken modes and counting + * WS2812FX can be used as drop-in replacement for Adafruit NeoPixel Library + + NOTES + * Uses the Adafruit NeoPixel library. Get it here: + https://github.com/adafruit/Adafruit_NeoPixel + + + + LICENSE + + The MIT License (MIT) + + Copyright (c) 2016 Harm Aldick + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + + CHANGELOG + + 2016-05-28 Initial beta release + 2016-06-03 Code cleanup, minor improvements, new modes + 2016-06-04 2 new fx, fixed setColor (now also resets _mode_color) + 2017-02-02 added external trigger functionality (e.g. for sound-to-light) + 2017-02-02 removed "blackout" on mode, speed or color-change + 2017-09-26 implemented segment and reverse features + 2017-11-16 changed speed calc, reduced memory footprint + 2018-02-24 added hooks for user created custom effects +*/ + +#include "WS2812FX.h" + +void WS2812FX::init() { + resetSegmentRuntimes(); + Adafruit_NeoPixel::begin(); +} + +// void WS2812FX::timer() { +// for (int j=0; j < 1000; j++) { +// uint16_t delay = (this->*_mode[SEGMENT.mode])(); +// } +// } + +void WS2812FX::service() { + if(_running || _triggered) { + unsigned long now = millis(); // Be aware, millis() rolls over every 49 days + bool doShow = false; + for(uint8_t i=0; i < _num_segments; i++) { + _segment_index = i; + CLR_FRAME; + if(now > SEGMENT_RUNTIME.next_time || _triggered) { + SET_FRAME; + doShow = true; + uint16_t delay = (this->*_mode[SEGMENT.mode])(); + SEGMENT_RUNTIME.next_time = now + max(delay, SPEED_MIN); + SEGMENT_RUNTIME.counter_mode_call++; + } + } + if(doShow) { + delay(1); // for ESP32 (see https://forums.adafruit.com/viewtopic.php?f=47&t=117327) + show(); + } + _triggered = false; + } +} + +// overload setPixelColor() functions so we can use gamma correction +// (see https://learn.adafruit.com/led-tricks-gamma-correction/the-issue) +void WS2812FX::setPixelColor(uint16_t n, uint32_t c) { + if(IS_GAMMA) { + uint8_t w = (c >> 24) & 0xFF; + uint8_t r = (c >> 16) & 0xFF; + uint8_t g = (c >> 8) & 0xFF; + uint8_t b = c & 0xFF; + Adafruit_NeoPixel::setPixelColor(n, gamma8(r), gamma8(g), gamma8(b), gamma8(w)); + } else { + Adafruit_NeoPixel::setPixelColor(n, c); + } +} + +void WS2812FX::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b) { + if(IS_GAMMA) { + Adafruit_NeoPixel::setPixelColor(n, gamma8(r), gamma8(g), gamma8(b)); + } else { + Adafruit_NeoPixel::setPixelColor(n, r, g, b); + } +} + +void WS2812FX::setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w) { + if(IS_GAMMA) { + Adafruit_NeoPixel::setPixelColor(n, gamma8(r), gamma8(g), gamma8(b), gamma8(w)); + } else { + Adafruit_NeoPixel::setPixelColor(n, r, g, b, w); + } +} + +void WS2812FX::copyPixels(uint16_t dest, uint16_t src, uint16_t count) { + uint8_t *pixels = getPixels(); + uint8_t bytesPerPixel = getNumBytesPerPixel(); // 3=RGB, 4=RGBW + + memmove(pixels + (dest * bytesPerPixel), pixels + (src * bytesPerPixel), count * bytesPerPixel); +} + +// overload show() functions so we can use custom show() +void WS2812FX::show(void) { + if(customShow == NULL) { + Adafruit_NeoPixel::show(); + } else { + customShow(); + } +} + +void WS2812FX::start() { + resetSegmentRuntimes(); + _running = true; +} + +void WS2812FX::stop() { + _running = false; + strip_off(); +} + +void WS2812FX::pause() { + _running = false; +} + +void WS2812FX::resume() { + _running = true; +} + +void WS2812FX::trigger() { + _triggered = true; +} + +void WS2812FX::setMode(uint8_t m) { + setMode(0, m); +} + +void WS2812FX::setMode(uint8_t seg, uint8_t m) { + resetSegmentRuntime(seg); + _segments[seg].mode = constrain(m, 0, MODE_COUNT - 1); +} + +void WS2812FX::setOptions(uint8_t seg, uint8_t o) { + _segments[seg].options = o; +} + +void WS2812FX::setSpeed(uint16_t s) { + setSpeed(0, s); +} + +void WS2812FX::setSpeed(uint8_t seg, uint16_t s) { +// resetSegmentRuntime(seg); + _segments[seg].speed = constrain(s, SPEED_MIN, SPEED_MAX); +} + +void WS2812FX::increaseSpeed(uint8_t s) { + uint16_t newSpeed = constrain(SEGMENT.speed + s, SPEED_MIN, SPEED_MAX); + setSpeed(newSpeed); +} + +void WS2812FX::decreaseSpeed(uint8_t s) { + uint16_t newSpeed = constrain(SEGMENT.speed - s, SPEED_MIN, SPEED_MAX); + setSpeed(newSpeed); +} + +void WS2812FX::setColor(uint8_t r, uint8_t g, uint8_t b) { + setColor(((uint32_t)r << 16) | ((uint32_t)g << 8) | b); +} + +void WS2812FX::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { + setColor((((uint32_t)w << 24)| ((uint32_t)r << 16) | ((uint32_t)g << 8)| ((uint32_t)b))); +} + +void WS2812FX::setColor(uint32_t c) { + setColor(0, c); +} + +void WS2812FX::setColor(uint8_t seg, uint32_t c) { +// resetSegmentRuntime(seg); + _segments[seg].colors[0] = c; +} + +void WS2812FX::setColors(uint8_t seg, uint32_t* c) { +// resetSegmentRuntime(seg); + for(uint8_t i=0; i 1); + + _segments[0].start = 0; + _segments[0].stop = Adafruit_NeoPixel::numLEDs - 1; +} + +void WS2812FX::increaseLength(uint16_t s) { + s = _segments[0].stop - _segments[0].start + 1 + s; + setLength(s); +} + +void WS2812FX::decreaseLength(uint16_t s) { + if (s > _segments[0].stop - _segments[0].start + 1) s = 1; + s = _segments[0].stop - _segments[0].start + 1 - s; + + for(uint16_t i=_segments[0].start + s; i <= (_segments[0].stop - _segments[0].start + 1); i++) { + setPixelColor(i, 0); + } + show(); + + setLength(s); +} + +boolean WS2812FX::isRunning() { + return _running; +} + +boolean WS2812FX::isTriggered() { + return _triggered; +} + +boolean WS2812FX::isFrame() { + return isFrame(0); +} + +boolean WS2812FX::isFrame(uint8_t segIndex) { + return (_segment_runtimes[segIndex].aux_param2 & FRAME); +} + +boolean WS2812FX::isCycle() { + return isCycle(0); +} + +boolean WS2812FX::isCycle(uint8_t segIndex) { + return (_segment_runtimes[segIndex].aux_param2 & CYCLE); +} + +uint8_t WS2812FX::getMode(void) { + return getMode(0); +} + +uint8_t WS2812FX::getMode(uint8_t seg) { + return _segments[seg].mode; +} + +uint16_t WS2812FX::getSpeed(void) { + return getSpeed(0); +} + +uint16_t WS2812FX::getSpeed(uint8_t seg) { + return _segments[seg].speed; +} + + +uint8_t WS2812FX::getOptions(uint8_t seg) { + return _segments[seg].options; +} + +uint16_t WS2812FX::getLength(void) { + return numPixels(); +} + +uint16_t WS2812FX::getNumBytes(void) { + return numBytes; +} + +uint8_t WS2812FX::getNumBytesPerPixel(void) { + return (wOffset == rOffset) ? 3 : 4; // 3=RGB, 4=RGBW +} + +uint8_t WS2812FX::getModeCount(void) { + return MODE_COUNT; +} + +uint8_t WS2812FX::getNumSegments(void) { + return _num_segments; +} + +void WS2812FX::setNumSegments(uint8_t n) { + _num_segments = n; +} + +uint32_t WS2812FX::getColor(void) { + return getColor(0); +} + +uint32_t WS2812FX::getColor(uint8_t seg) { + return _segments[seg].colors[0]; +} + +uint32_t* WS2812FX::getColors(uint8_t seg) { + return _segments[seg].colors; +} + +WS2812FX::Segment* WS2812FX::getSegment(void) { + return &_segments[_segment_index]; +} + +WS2812FX::Segment* WS2812FX::getSegment(uint8_t seg) { + return &_segments[seg]; +} + +WS2812FX::Segment* WS2812FX::getSegments(void) { + return _segments; +} + +WS2812FX::Segment_runtime* WS2812FX::getSegmentRuntime(void) { + return &_segment_runtimes[_segment_index]; +} + +WS2812FX::Segment_runtime* WS2812FX::getSegmentRuntime(uint8_t seg) { + return &_segment_runtimes[seg]; +} + +WS2812FX::Segment_runtime* WS2812FX::getSegmentRuntimes(void) { + return _segment_runtimes; +} + +const __FlashStringHelper* WS2812FX::getModeName(uint8_t m) { + if(m < MODE_COUNT) { + return _names[m]; + } else { + return F(""); + } +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, bool reverse) { + uint32_t colors[] = {color, 0, 0}; + setSegment(n, start, stop, mode, colors, speed, reverse); +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, uint8_t options) { + uint32_t colors[] = {color, 0, 0}; + setSegment(n, start, stop, mode, colors, speed, options); +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, bool reverse) { + setSegment(n, start, stop, mode, colors, speed, (uint8_t)(reverse ? REVERSE : NO_OPTIONS)); +} + +void WS2812FX::setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, uint8_t options) { + if(n < (sizeof(_segments) / sizeof(_segments[0]))) { + if(n + 1 > _num_segments) _num_segments = n + 1; + _segments[n].start = start; + _segments[n].stop = stop; + _segments[n].mode = mode; + _segments[n].speed = speed; + _segments[n].options = options; + + for(uint8_t i=0; i g -> b -> back to r + * Inspired by the Adafruit examples. + */ +uint32_t WS2812FX::color_wheel(uint8_t pos) { + pos = 255 - pos; + if(pos < 85) { + return ((uint32_t)(255 - pos * 3) << 16) | ((uint32_t)(0) << 8) | (pos * 3); + } else if(pos < 170) { + pos -= 85; + return ((uint32_t)(0) << 16) | ((uint32_t)(pos * 3) << 8) | (255 - pos * 3); + } else { + pos -= 170; + return ((uint32_t)(pos * 3) << 16) | ((uint32_t)(255 - pos * 3) << 8) | (0); + } +} + + +/* + * Returns a new, random wheel index with a minimum distance of 42 from pos. + */ +uint8_t WS2812FX::get_random_wheel_index(uint8_t pos) { + uint8_t r = 0; + uint8_t x = 0; + uint8_t y = 0; + uint8_t d = 0; + + while(d < 42) { + r = random8(); + x = abs(pos - r); + y = 255 - x; + d = min(x, y); + } + + return r; +} + +// fast 8-bit random number generator shamelessly borrowed from FastLED +uint8_t WS2812FX::random8() { + _rand16seed = (_rand16seed * 2053) + 13849; + return (uint8_t)((_rand16seed + (_rand16seed >> 8)) & 0xFF); +} + +// note random8(lim) generates numbers in the range 0 to (lim -1) +uint8_t WS2812FX::random8(uint8_t lim) { + uint8_t r = random8(); + r = (r * lim) >> 8; + return r; +} + +uint16_t WS2812FX::random16() { + return (uint16_t)random8() * 256 + random8(); +} + +// note random16(lim) generates numbers in the range 0 to (lim - 1) +uint16_t WS2812FX::random16(uint16_t lim) { + uint16_t r = random16(); + r = ((uint32_t)r * lim) >> 16; + return r; +} + +// Return the sum of all LED intensities (can be used for +// rudimentary power calculations) +uint32_t WS2812FX::intensitySum() { + uint8_t *pixels = getPixels(); + uint32_t sum = 0; + for(uint16_t i=0; i 255) lum = 511 - lum; // lum = 15 -> 255 -> 15 + + uint16_t delay; + if(lum == 15) delay = 970; // 970 pause before each breath + else if(lum <= 25) delay = 38; // 19 + else if(lum <= 50) delay = 36; // 18 + else if(lum <= 75) delay = 28; // 14 + else if(lum <= 100) delay = 20; // 10 + else if(lum <= 125) delay = 14; // 7 + else if(lum <= 150) delay = 11; // 5 + else delay = 10; // 4 + + uint32_t color = SEGMENT.colors[0]; + uint8_t w = (color >> 24 & 0xFF) * lum / 256; + uint8_t r = (color >> 16 & 0xFF) * lum / 256; + uint8_t g = (color >> 8 & 0xFF) * lum / 256; + uint8_t b = (color & 0xFF) * lum / 256; + for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) { + setPixelColor(i, r, g, b, w); + } + + SEGMENT_RUNTIME.counter_mode_step += 2; + if(SEGMENT_RUNTIME.counter_mode_step > (512-15)) SEGMENT_RUNTIME.counter_mode_step = 15; + return delay; +} + + +/* + * Fades the LEDs between two colors + */ +uint16_t WS2812FX::mode_fade(void) { + int lum = SEGMENT_RUNTIME.counter_mode_step; + if(lum > 255) lum = 511 - lum; // lum = 0 -> 255 -> 0 + + uint32_t color = color_blend(SEGMENT.colors[0], SEGMENT.colors[1], lum); + for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) { + setPixelColor(i, color); + } + + SEGMENT_RUNTIME.counter_mode_step += 4; + if(SEGMENT_RUNTIME.counter_mode_step > 511) SEGMENT_RUNTIME.counter_mode_step = 0; + return (SEGMENT.speed / 128); +} + + +/* + * scan function - runs a block of pixels back and forth. + */ +uint16_t WS2812FX::scan(uint32_t color1, uint32_t color2, bool dual) { + int8_t dir = SEGMENT_RUNTIME.aux_param ? -1 : 1; + uint8_t size = 1 << SIZE_OPTION; + + for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) { + setPixelColor(i, color2); + } + + for(uint8_t i = 0; i < size; i++) { + if(IS_REVERSE || dual) { + setPixelColor(SEGMENT.stop - SEGMENT_RUNTIME.counter_mode_step - i, color1); + } + if(!IS_REVERSE || dual) { + setPixelColor(SEGMENT.start + SEGMENT_RUNTIME.counter_mode_step + i, color1); + } + } + + SEGMENT_RUNTIME.counter_mode_step += dir; + if(SEGMENT_RUNTIME.counter_mode_step == 0) SEGMENT_RUNTIME.aux_param = 0; + if(SEGMENT_RUNTIME.counter_mode_step >= (SEGMENT_LENGTH - size)) SEGMENT_RUNTIME.aux_param = 1; + + return (SEGMENT.speed / (SEGMENT_LENGTH * 2)); +} + + +/* + * Runs a block of pixels back and forth. + */ +uint16_t WS2812FX::mode_scan(void) { + return scan(SEGMENT.colors[0], SEGMENT.colors[1], false); +} + + +/* + * Runs two blocks of pixels back and forth in opposite directions. + */ +uint16_t WS2812FX::mode_dual_scan(void) { + return scan(SEGMENT.colors[0], SEGMENT.colors[1], true); +} + + +/* + * Cycles all LEDs at once through a rainbow. + */ +uint16_t WS2812FX::mode_rainbow(void) { + uint32_t color = color_wheel(SEGMENT_RUNTIME.counter_mode_step); + for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) { + setPixelColor(i, color); + } + + SEGMENT_RUNTIME.counter_mode_step = (SEGMENT_RUNTIME.counter_mode_step + 1) & 0xFF; + return (SEGMENT.speed / 256); +} + + +/* + * Cycles a rainbow over the entire string of LEDs. + */ +uint16_t WS2812FX::mode_rainbow_cycle(void) { + for(uint16_t i=0; i < SEGMENT_LENGTH; i++) { + uint32_t color = color_wheel(((i * 256 / SEGMENT_LENGTH) + SEGMENT_RUNTIME.counter_mode_step) & 0xFF); + setPixelColor(SEGMENT.start + i, color); + } + + SEGMENT_RUNTIME.counter_mode_step = (SEGMENT_RUNTIME.counter_mode_step + 1) & 0xFF; + return (SEGMENT.speed / 256); +} + + +/* + * Theatre-style crawling lights. + * Inspired by the Adafruit examples. + */ +uint16_t WS2812FX::mode_theater_chase(void) { + return tricolor_chase(SEGMENT.colors[0], SEGMENT.colors[1], SEGMENT.colors[1]); +} + + +/* + * Theatre-style crawling lights with rainbow effect. + * Inspired by the Adafruit examples. + */ +uint16_t WS2812FX::mode_theater_chase_rainbow(void) { + SEGMENT_RUNTIME.counter_mode_step = (SEGMENT_RUNTIME.counter_mode_step + 1) & 0xFF; + uint32_t color = color_wheel(SEGMENT_RUNTIME.counter_mode_step); + return tricolor_chase(color, SEGMENT.colors[1], SEGMENT.colors[1]); +} + + +/* + * Running lights effect with smooth sine transition. + */ +uint16_t WS2812FX::mode_running_lights(void) { + uint8_t w = ((SEGMENT.colors[0] >> 24) & 0xFF); + uint8_t r = ((SEGMENT.colors[0] >> 16) & 0xFF); + uint8_t g = ((SEGMENT.colors[0] >> 8) & 0xFF); + uint8_t b = (SEGMENT.colors[0] & 0xFF); + + uint8_t size = 1 << SIZE_OPTION; + uint8_t sineIncr = max(1, (256 / SEGMENT_LENGTH) * size); + for(uint16_t i=0; i < SEGMENT_LENGTH; i++) { + int lum = (int)sine8(((i + SEGMENT_RUNTIME.counter_mode_step) * sineIncr)); + if(IS_REVERSE) { + setPixelColor(SEGMENT.start + i, (r * lum) / 256, (g * lum) / 256, (b * lum) / 256, (w * lum) / 256); + } else { + setPixelColor(SEGMENT.stop - i, (r * lum) / 256, (g * lum) / 256, (b * lum) / 256, (w * lum) / 256); + } + } + SEGMENT_RUNTIME.counter_mode_step = (SEGMENT_RUNTIME.counter_mode_step + 1) % 256; + return (SEGMENT.speed / SEGMENT_LENGTH); +} + + +/* + * twinkle function + */ +uint16_t WS2812FX::twinkle(uint32_t color1, uint32_t color2) { + if(SEGMENT_RUNTIME.counter_mode_step == 0) { + for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) { + setPixelColor(i, color2); + } + uint16_t min_leds = max(1, SEGMENT_LENGTH / 5); // make sure, at least one LED is on + uint16_t max_leds = max(1, SEGMENT_LENGTH / 2); // make sure, at least one LED is on + SEGMENT_RUNTIME.counter_mode_step = random(min_leds, max_leds); + } + + setPixelColor(SEGMENT.start + random16(SEGMENT_LENGTH), color1); + + SEGMENT_RUNTIME.counter_mode_step--; + return (SEGMENT.speed / SEGMENT_LENGTH); +} + +/* + * Blink several LEDs on, reset, repeat. + * Inspired by www.tweaking4all.com/hardware/arduino/arduino-led-strip-effects/ + */ +uint16_t WS2812FX::mode_twinkle(void) { + return twinkle(SEGMENT.colors[0], SEGMENT.colors[1]); +} + +/* + * Blink several LEDs in random colors on, reset, repeat. + * Inspired by www.tweaking4all.com/hardware/arduino/arduino-led-strip-effects/ + */ +uint16_t WS2812FX::mode_twinkle_random(void) { + return twinkle(color_wheel(random8()), SEGMENT.colors[1]); +} + + +/* + * fade out functions + */ +void WS2812FX::fade_out() { + return fade_out(SEGMENT.colors[1]); +} + +void WS2812FX::fade_out(uint32_t targetColor) { + static const uint8_t rateMapH[] = {0, 1, 1, 1, 2, 3, 4, 6}; + static const uint8_t rateMapL[] = {0, 2, 3, 8, 8, 8, 8, 8}; + + uint8_t rate = FADE_RATE; + uint8_t rateH = rateMapH[rate]; + uint8_t rateL = rateMapL[rate]; + + uint32_t color = targetColor; + int w2 = (color >> 24) & 0xff; + int r2 = (color >> 16) & 0xff; + int g2 = (color >> 8) & 0xff; + int b2 = color & 0xff; + + for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) { + color = getPixelColor(i); // current color + if(rate == 0) { // old fade-to-black algorithm + setPixelColor(i, (color >> 1) & 0x7F7F7F7F); + } else { // new fade-to-color algorithm + int w1 = (color >> 24) & 0xff; + int r1 = (color >> 16) & 0xff; + int g1 = (color >> 8) & 0xff; + int b1 = color & 0xff; + + // calculate the color differences between the current and target colors + int wdelta = w2 - w1; + int rdelta = r2 - r1; + int gdelta = g2 - g1; + int bdelta = b2 - b1; + + // if the current and target colors are almost the same, jump right to the target + // color, otherwise calculate an intermediate color. (fixes rounding issues) + wdelta = abs(wdelta) < 3 ? wdelta : (wdelta >> rateH) + (wdelta >> rateL); + rdelta = abs(rdelta) < 3 ? rdelta : (rdelta >> rateH) + (rdelta >> rateL); + gdelta = abs(gdelta) < 3 ? gdelta : (gdelta >> rateH) + (gdelta >> rateL); + bdelta = abs(bdelta) < 3 ? bdelta : (bdelta >> rateH) + (bdelta >> rateL); + + setPixelColor(i, r1 + rdelta, g1 + gdelta, b1 + bdelta, w1 + wdelta); + } + } +} + + +/* + * color blend function + */ +uint32_t WS2812FX::color_blend(uint32_t color1, uint32_t color2, uint8_t blend) { + if(blend == 0) return color1; + if(blend == 255) return color2; + + uint8_t w1 = (color1 >> 24) & 0xff; + uint8_t r1 = (color1 >> 16) & 0xff; + uint8_t g1 = (color1 >> 8) & 0xff; + uint8_t b1 = color1 & 0xff; + + uint8_t w2 = (color2 >> 24) & 0xff; + uint8_t r2 = (color2 >> 16) & 0xff; + uint8_t g2 = (color2 >> 8) & 0xff; + uint8_t b2 = color2 & 0xff; + + uint32_t w3 = ((w2 * blend) + (w1 * (255U - blend))) / 256U; + uint32_t r3 = ((r2 * blend) + (r1 * (255U - blend))) / 256U; + uint32_t g3 = ((g2 * blend) + (g1 * (255U - blend))) / 256U; + uint32_t b3 = ((b2 * blend) + (b1 * (255U - blend))) / 256U; + + return ((w3 << 24) | (r3 << 16) | (g3 << 8) | (b3)); +} + + +/* + * twinkle_fade function + */ +uint16_t WS2812FX::twinkle_fade(uint32_t color) { + fade_out(); + + if(random8(3) == 0) { + uint8_t size = 1 << SIZE_OPTION; + uint16_t index = SEGMENT.start + random16(SEGMENT_LENGTH - size); + for(uint8_t i=0; i= ((SEGMENT_LENGTH * 2) - 2)) { + SEGMENT_RUNTIME.counter_mode_step = 0; + } + + return (SEGMENT.speed / (SEGMENT_LENGTH * 2)); +} + + +/* + * Firing comets from one end. + */ +uint16_t WS2812FX::mode_comet(void) { + fade_out(); + + if(IS_REVERSE) { + setPixelColor(SEGMENT.stop - SEGMENT_RUNTIME.counter_mode_step, SEGMENT.colors[0]); + } else { + setPixelColor(SEGMENT.start + SEGMENT_RUNTIME.counter_mode_step, SEGMENT.colors[0]); + } + + SEGMENT_RUNTIME.counter_mode_step = (SEGMENT_RUNTIME.counter_mode_step + 1) % SEGMENT_LENGTH; + return (SEGMENT.speed / SEGMENT_LENGTH); +} + + +/* + * Fireworks function. + */ +uint16_t WS2812FX::fireworks(uint32_t color) { + fade_out(); + +// for better performance, manipulate the Adafruit_NeoPixels pixels[] array directly + uint8_t *pixels = getPixels(); + uint8_t bytesPerPixel = getNumBytesPerPixel(); // 3=RGB, 4=RGBW + uint16_t startPixel = SEGMENT.start * bytesPerPixel + bytesPerPixel; + uint16_t stopPixel = SEGMENT.stop * bytesPerPixel ; + for(uint16_t i=startPixel; i > 2) + + pixels[i] + + (pixels[i + bytesPerPixel] >> 2); + pixels[i] = tmpPixel > 255 ? 255 : tmpPixel; + } + + uint8_t size = 2 << SIZE_OPTION; + if(!_triggered) { + for(uint16_t i=0; i> 24) & 0xFF; + byte r = (SEGMENT.colors[0] >> 16) & 0xFF; + byte g = (SEGMENT.colors[0] >> 8) & 0xFF; + byte b = (SEGMENT.colors[0] & 0xFF); + byte lum = max(w, max(r, max(g, b))) / rev_intensity; + for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) { + int flicker = random8(lum); + setPixelColor(i, max(r - flicker, 0), max(g - flicker, 0), max(b - flicker, 0), max(w - flicker, 0)); + } + return (SEGMENT.speed / SEGMENT_LENGTH); +} + +/* + * Random flickering. + */ +uint16_t WS2812FX::mode_fire_flicker(void) { + return fire_flicker(3); +} + +/* +* Random flickering, less intensity. +*/ +uint16_t WS2812FX::mode_fire_flicker_soft(void) { + return fire_flicker(6); +} + +/* +* Random flickering, more intensity. +*/ +uint16_t WS2812FX::mode_fire_flicker_intense(void) { + return fire_flicker(1.7); +} + + +/* + * Tricolor chase function + */ +uint16_t WS2812FX::tricolor_chase(uint32_t color1, uint32_t color2, uint32_t color3) { + uint8_t sizeCnt = 1 << SIZE_OPTION; + uint16_t index = SEGMENT_RUNTIME.counter_mode_call % (sizeCnt * 3); + for(uint16_t i=0; i < SEGMENT_LENGTH; i++, index++) { + index = index % (sizeCnt * 3); + + uint32_t color = color3; + if(index < sizeCnt) color = color1; + else if(index < (sizeCnt * 2)) color = color2; + + if(IS_REVERSE) { + setPixelColor(SEGMENT.start + i, color); + } else { + setPixelColor(SEGMENT.stop - i, color); + } + } + + return (SEGMENT.speed / SEGMENT_LENGTH); +} + + +/* + * Tricolor chase mode + */ +uint16_t WS2812FX::mode_tricolor_chase(void) { + return tricolor_chase(SEGMENT.colors[0], SEGMENT.colors[1], SEGMENT.colors[2]); +} + + +/* + * Alternating white/red/black pixels running. + */ +uint16_t WS2812FX::mode_circus_combustus(void) { + return tricolor_chase(RED, WHITE, BLACK); +} + +/* + * ICU mode + */ +uint16_t WS2812FX::mode_icu(void) { + uint16_t dest = SEGMENT_RUNTIME.counter_mode_step & 0xFFFF; + + setPixelColor(SEGMENT.start + dest, SEGMENT.colors[0]); + setPixelColor(SEGMENT.start + dest + SEGMENT_LENGTH/2, SEGMENT.colors[0]); + + if(SEGMENT_RUNTIME.aux_param3 == dest) { // pause between eye movements + if(random8(6) == 0) { // blink once in a while + setPixelColor(SEGMENT.start + dest, BLACK); + setPixelColor(SEGMENT.start + dest + SEGMENT_LENGTH/2, BLACK); + return 200; + } + SEGMENT_RUNTIME.aux_param3 = random16(SEGMENT_LENGTH/2); + return 1000 + random16(2000); + } + + setPixelColor(SEGMENT.start + dest, BLACK); + setPixelColor(SEGMENT.start + dest + SEGMENT_LENGTH/2, BLACK); + + if(SEGMENT_RUNTIME.aux_param3 > SEGMENT_RUNTIME.counter_mode_step) { + SEGMENT_RUNTIME.counter_mode_step++; + dest++; + } else if (SEGMENT_RUNTIME.aux_param3 < SEGMENT_RUNTIME.counter_mode_step) { + SEGMENT_RUNTIME.counter_mode_step--; + dest--; + } + + setPixelColor(SEGMENT.start + dest, SEGMENT.colors[0]); + setPixelColor(SEGMENT.start + dest + SEGMENT_LENGTH/2, SEGMENT.colors[0]); + + return (SEGMENT.speed / SEGMENT_LENGTH); +} + +/* + * Custom modes + */ +uint16_t WS2812FX::mode_custom_0() { + return customModes[0](); +} +uint16_t WS2812FX::mode_custom_1() { + return customModes[1](); +} +uint16_t WS2812FX::mode_custom_2() { + return customModes[2](); +} +uint16_t WS2812FX::mode_custom_3() { + return customModes[3](); +} +uint16_t WS2812FX::mode_custom_4() { + return customModes[4](); +} +uint16_t WS2812FX::mode_custom_5() { + return customModes[5](); +} +uint16_t WS2812FX::mode_custom_6() { + return customModes[6](); +} +uint16_t WS2812FX::mode_custom_7() { + return customModes[7](); +} +uint16_t WS2812FX::mode_custom_8() { + return customModes[8](); +} +uint16_t WS2812FX::mode_custom_9() { + return customModes[9](); +} +/* + * Custom mode helpers + */ +void WS2812FX::setCustomMode(uint16_t (*p)()) { + customModes[0] = p; +} + +uint8_t WS2812FX::setCustomMode(const __FlashStringHelper* name, uint16_t (*p)()) { + static uint8_t custom_mode_index = 0; + return setCustomMode(custom_mode_index++, name, p); +} + +uint8_t WS2812FX::setCustomMode(uint8_t index, const __FlashStringHelper* name, uint16_t (*p)()) { + if((FX_MODE_CUSTOM_0 + index) < MODE_COUNT) { + _names[FX_MODE_CUSTOM_0 + index] = name; // store the custom mode name + customModes[index] = p; // store the custom mode + + return (FX_MODE_CUSTOM_0 + index); + } + return 0; +} + +/* + * Custom show helper + */ +void WS2812FX::setCustomShow(void (*p)()) { + customShow = p; +} diff --git a/Arduino/McLighting/WS2812FX.h b/Arduino/McLighting/WS2812FX.h new file mode 100644 index 0000000..e4d4932 --- /dev/null +++ b/Arduino/McLighting/WS2812FX.h @@ -0,0 +1,650 @@ +/* + WS2812FX.h - Library for WS2812 LED effects. + + Harm Aldick - 2016 + www.aldick.org + FEATURES + * A lot of blinken modes and counting + * WS2812FX can be used as drop-in replacement for Adafruit NeoPixel Library + NOTES + * Uses the Adafruit NeoPixel library. Get it here: + https://github.com/adafruit/Adafruit_NeoPixel + LICENSE + The MIT License (MIT) + Copyright (c) 2016 Harm Aldick + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + CHANGELOG + 2016-05-28 Initial beta release + 2016-06-03 Code cleanup, minor improvements, new modes + 2016-06-04 2 new fx, fixed setColor (now also resets _mode_color) + 2017-02-02 added external trigger functionality (e.g. for sound-to-light) +*/ + +#ifndef WS2812FX_h +#define WS2812FX_h + +#define FSH(x) (__FlashStringHelper*)(x) + +#include + +#define DEFAULT_BRIGHTNESS (uint8_t)50 +#define DEFAULT_MODE (uint8_t)0 +#define DEFAULT_SPEED (uint16_t)1000 +#define DEFAULT_COLOR (uint32_t)0xFF0000 + +#if defined(ESP8266) || defined(ESP32) + //#pragma message("Compiling for ESP") + #define SPEED_MIN (uint16_t)2 +#else + //#pragma message("Compiling for Arduino") + #define SPEED_MIN (uint16_t)10 +#endif +#define SPEED_MAX (uint16_t)65535 + +#define BRIGHTNESS_MIN (uint8_t)0 +#define BRIGHTNESS_MAX (uint8_t)255 + +/* each segment uses 36 bytes of SRAM memory, so if you're application fails because of + insufficient memory, decreasing MAX_NUM_SEGMENTS may help */ +#define MAX_NUM_SEGMENTS 10 +#define NUM_COLORS 3 /* number of colors per segment */ +#define MAX_CUSTOM_MODES 10 +#define SEGMENT _segments[_segment_index] +#define SEGMENT_RUNTIME _segment_runtimes[_segment_index] +#define SEGMENT_LENGTH (SEGMENT.stop - SEGMENT.start + 1) + +// some common colors +#define RED (uint32_t)0xFF0000 +#define GREEN (uint32_t)0x00FF00 +#define BLUE (uint32_t)0x0000FF +#define WHITE (uint32_t)0xFFFFFF +#define BLACK (uint32_t)0x000000 +#define YELLOW (uint32_t)0xFFFF00 +#define CYAN (uint32_t)0x00FFFF +#define MAGENTA (uint32_t)0xFF00FF +#define PURPLE (uint32_t)0x400080 +#define ORANGE (uint32_t)0xFF3000 +#define PINK (uint32_t)0xFF1493 +#define ULTRAWHITE (uint32_t)0xFFFFFFFF +#define DARK(c) (uint32_t)((c >> 4) & 0x0f0f0f0f) + +// segment options +// bit 7: reverse animation +// bits 4-6: fade rate (0-7) +// bit 3: gamma correction +// bits 1-2: size +// bits 0: TBD +#define NO_OPTIONS (uint8_t)B00000000 +#define REVERSE (uint8_t)B10000000 +#define IS_REVERSE ((SEGMENT.options & REVERSE) == REVERSE) +#define FADE_XFAST (uint8_t)B00010000 +#define FADE_FAST (uint8_t)B00100000 +#define FADE_MEDIUM (uint8_t)B00110000 +#define FADE_SLOW (uint8_t)B01000000 +#define FADE_XSLOW (uint8_t)B01010000 +#define FADE_XXSLOW (uint8_t)B01100000 +#define FADE_GLACIAL (uint8_t)B01110000 +#define FADE_RATE ((SEGMENT.options >> 4) & 7) +#define GAMMA (uint8_t)B00001000 +#define IS_GAMMA ((SEGMENT.options & GAMMA) == GAMMA) +#define SIZE_SMALL (uint8_t)B00000000 +#define SIZE_MEDIUM (uint8_t)B00000010 +#define SIZE_LARGE (uint8_t)B00000100 +#define SIZE_XLARGE (uint8_t)B00000110 +#define SIZE_OPTION ((SEGMENT.options >> 1) & 3) + +// segment runtime options (aux_param2) +#define FRAME (uint8_t)B10000000 +#define SET_FRAME (SEGMENT_RUNTIME.aux_param2 |= FRAME) +#define CLR_FRAME (SEGMENT_RUNTIME.aux_param2 &= ~FRAME) +#define CYCLE (uint8_t)B01000000 +#define SET_CYCLE (SEGMENT_RUNTIME.aux_param2 |= CYCLE) +#define CLR_CYCLE (SEGMENT_RUNTIME.aux_param2 &= ~CYCLE) + +#define MODE_COUNT (sizeof(_names)/sizeof(_names[0])) + +#define FX_MODE_STATIC 0 +#define FX_MODE_BLINK 1 +#define FX_MODE_BREATH 2 +#define FX_MODE_COLOR_WIPE 3 +#define FX_MODE_COLOR_WIPE_INV 4 +#define FX_MODE_COLOR_WIPE_REV 5 +#define FX_MODE_COLOR_WIPE_REV_INV 6 +#define FX_MODE_COLOR_WIPE_RANDOM 7 +#define FX_MODE_RANDOM_COLOR 8 +#define FX_MODE_SINGLE_DYNAMIC 9 +#define FX_MODE_MULTI_DYNAMIC 10 +#define FX_MODE_RAINBOW 11 +#define FX_MODE_RAINBOW_CYCLE 12 +#define FX_MODE_SCAN 13 +#define FX_MODE_DUAL_SCAN 14 +#define FX_MODE_FADE 15 +#define FX_MODE_THEATER_CHASE 16 +#define FX_MODE_THEATER_CHASE_RAINBOW 17 +#define FX_MODE_RUNNING_LIGHTS 18 +#define FX_MODE_TWINKLE 19 +#define FX_MODE_TWINKLE_RANDOM 20 +#define FX_MODE_TWINKLE_FADE 21 +#define FX_MODE_TWINKLE_FADE_RANDOM 22 +#define FX_MODE_SPARKLE 23 +#define FX_MODE_FLASH_SPARKLE 24 +#define FX_MODE_HYPER_SPARKLE 25 +#define FX_MODE_STROBE 26 +#define FX_MODE_STROBE_RAINBOW 27 +#define FX_MODE_MULTI_STROBE 28 +#define FX_MODE_BLINK_RAINBOW 29 +#define FX_MODE_CHASE_WHITE 30 +#define FX_MODE_CHASE_COLOR 31 +#define FX_MODE_CHASE_RANDOM 32 +#define FX_MODE_CHASE_RAINBOW 33 +#define FX_MODE_CHASE_FLASH 34 +#define FX_MODE_CHASE_FLASH_RANDOM 35 +#define FX_MODE_CHASE_RAINBOW_WHITE 36 +#define FX_MODE_CHASE_BLACKOUT 37 +#define FX_MODE_CHASE_BLACKOUT_RAINBOW 38 +#define FX_MODE_COLOR_SWEEP_RANDOM 39 +#define FX_MODE_RUNNING_COLOR 40 +#define FX_MODE_RUNNING_RED_BLUE 41 +#define FX_MODE_RUNNING_RANDOM 42 +#define FX_MODE_LARSON_SCANNER 43 +#define FX_MODE_COMET 44 +#define FX_MODE_FIREWORKS 45 +#define FX_MODE_FIREWORKS_RANDOM 46 +#define FX_MODE_MERRY_CHRISTMAS 47 +#define FX_MODE_FIRE_FLICKER 48 +#define FX_MODE_FIRE_FLICKER_SOFT 49 +#define FX_MODE_FIRE_FLICKER_INTENSE 50 +#define FX_MODE_CIRCUS_COMBUSTUS 51 +#define FX_MODE_HALLOWEEN 52 +#define FX_MODE_BICOLOR_CHASE 53 +#define FX_MODE_TRICOLOR_CHASE 54 +#define FX_MODE_ICU 55 +#define FX_MODE_CUSTOM 56 // keep this for backward compatiblity +#define FX_MODE_CUSTOM_0 56 // custom modes need to go at the end +#define FX_MODE_CUSTOM_1 57 +#define FX_MODE_CUSTOM_2 58 +#define FX_MODE_CUSTOM_3 59 +#define FX_MODE_CUSTOM_4 60 +#define FX_MODE_CUSTOM_5 61 +#define FX_MODE_CUSTOM_6 62 +#define FX_MODE_CUSTOM_7 63 +#define FX_MODE_CUSTOM_8 64 +#define FX_MODE_CUSTOM_9 65 + +// create GLOBAL names to allow WS2812FX to compile with sketches and other libs that store strings +// in PROGMEM (get rid of the "section type conflict with __c" errors once and for all. Amen.) +const char name_0[] PROGMEM = "Static"; +const char name_1[] PROGMEM = "Blink"; +const char name_2[] PROGMEM = "Breath"; +const char name_3[] PROGMEM = "Color Wipe"; +const char name_4[] PROGMEM = "Color Wipe Inverse"; +const char name_5[] PROGMEM = "Color Wipe Reverse"; +const char name_6[] PROGMEM = "Color Wipe Reverse Inverse"; +const char name_7[] PROGMEM = "Color Wipe Random"; +const char name_8[] PROGMEM = "Random Color"; +const char name_9[] PROGMEM = "Single Dynamic"; +const char name_10[] PROGMEM = "Multi Dynamic"; +const char name_11[] PROGMEM = "Rainbow"; +const char name_12[] PROGMEM = "Rainbow Cycle"; +const char name_13[] PROGMEM = "Scan"; +const char name_14[] PROGMEM = "Dual Scan"; +const char name_15[] PROGMEM = "Fade"; +const char name_16[] PROGMEM = "Theater Chase"; +const char name_17[] PROGMEM = "Theater Chase Rainbow"; +const char name_18[] PROGMEM = "Running Lights"; +const char name_19[] PROGMEM = "Twinkle"; +const char name_20[] PROGMEM = "Twinkle Random"; +const char name_21[] PROGMEM = "Twinkle Fade"; +const char name_22[] PROGMEM = "Twinkle Fade Random"; +const char name_23[] PROGMEM = "Sparkle"; +const char name_24[] PROGMEM = "Flash Sparkle"; +const char name_25[] PROGMEM = "Hyper Sparkle"; +const char name_26[] PROGMEM = "Strobe"; +const char name_27[] PROGMEM = "Strobe Rainbow"; +const char name_28[] PROGMEM = "Multi Strobe"; +const char name_29[] PROGMEM = "Blink Rainbow"; +const char name_30[] PROGMEM = "Chase White"; +const char name_31[] PROGMEM = "Chase Color"; +const char name_32[] PROGMEM = "Chase Random"; +const char name_33[] PROGMEM = "Chase Rainbow"; +const char name_34[] PROGMEM = "Chase Flash"; +const char name_35[] PROGMEM = "Chase Flash Random"; +const char name_36[] PROGMEM = "Chase Rainbow White"; +const char name_37[] PROGMEM = "Chase Blackout"; +const char name_38[] PROGMEM = "Chase Blackout Rainbow"; +const char name_39[] PROGMEM = "Color Sweep Random"; +const char name_40[] PROGMEM = "Running Color"; +const char name_41[] PROGMEM = "Running Red Blue"; +const char name_42[] PROGMEM = "Running Random"; +const char name_43[] PROGMEM = "Larson Scanner"; +const char name_44[] PROGMEM = "Comet"; +const char name_45[] PROGMEM = "Fireworks"; +const char name_46[] PROGMEM = "Fireworks Random"; +const char name_47[] PROGMEM = "Merry Christmas"; +const char name_48[] PROGMEM = "Fire Flicker"; +const char name_49[] PROGMEM = "Fire Flicker (soft)"; +const char name_50[] PROGMEM = "Fire Flicker (intense)"; +const char name_51[] PROGMEM = "Circus Combustus"; +const char name_52[] PROGMEM = "Halloween"; +const char name_53[] PROGMEM = "Bicolor Chase"; +const char name_54[] PROGMEM = "Tricolor Chase"; +const char name_55[] PROGMEM = "ICU"; +const char name_56[] PROGMEM = "Custom 0"; // custom modes need to go at the end +const char name_57[] PROGMEM = "Custom 1"; +const char name_58[] PROGMEM = "Custom 2"; +const char name_59[] PROGMEM = "Custom 3"; +const char name_60[] PROGMEM = "Custom 4"; +const char name_61[] PROGMEM = "Custom 5"; +const char name_62[] PROGMEM = "Custom 6"; +const char name_63[] PROGMEM = "Custom 7"; +const char name_64[] PROGMEM = "Custom 8"; +const char name_65[] PROGMEM = "Custom 9"; + +static const __FlashStringHelper* _names[] = { + FSH(name_0), + FSH(name_1), + FSH(name_2), + FSH(name_3), + FSH(name_4), + FSH(name_5), + FSH(name_6), + FSH(name_7), + FSH(name_8), + FSH(name_9), + FSH(name_10), + FSH(name_11), + FSH(name_12), + FSH(name_13), + FSH(name_14), + FSH(name_15), + FSH(name_16), + FSH(name_17), + FSH(name_18), + FSH(name_19), + FSH(name_20), + FSH(name_21), + FSH(name_22), + FSH(name_23), + FSH(name_24), + FSH(name_25), + FSH(name_26), + FSH(name_27), + FSH(name_28), + FSH(name_29), + FSH(name_30), + FSH(name_31), + FSH(name_32), + FSH(name_33), + FSH(name_34), + FSH(name_35), + FSH(name_36), + FSH(name_37), + FSH(name_38), + FSH(name_39), + FSH(name_40), + FSH(name_41), + FSH(name_42), + FSH(name_43), + FSH(name_44), + FSH(name_45), + FSH(name_46), + FSH(name_47), + FSH(name_48), + FSH(name_49), + FSH(name_50), + FSH(name_51), + FSH(name_52), + FSH(name_53), + FSH(name_54), + FSH(name_55), + FSH(name_56), + FSH(name_57), + FSH(name_58), + FSH(name_59), + FSH(name_60), + FSH(name_61), + FSH(name_62), + FSH(name_63), + FSH(name_64), + FSH(name_65) +}; + +class WS2812FX : public Adafruit_NeoPixel { + + typedef uint16_t (WS2812FX::*mode_ptr)(void); + + // segment parameters + public: + typedef struct Segment { // 20 bytes + uint16_t start; + uint16_t stop; + uint16_t speed; + uint8_t mode; + uint8_t options; + uint32_t colors[NUM_COLORS]; + } segment; + + // segment runtime parameters + typedef struct Segment_runtime { // 16 bytes + unsigned long next_time; + uint32_t counter_mode_step; + uint32_t counter_mode_call; + uint8_t aux_param; // auxilary param (usually stores a color_wheel index) + uint8_t aux_param2; // auxilary param (usually stores bitwise options) + uint16_t aux_param3; // auxilary param (usually stores a segment index) + } segment_runtime; + + WS2812FX(uint16_t n, uint8_t p, neoPixelType t) : Adafruit_NeoPixel(n, p, t) { + _mode[FX_MODE_STATIC] = &WS2812FX::mode_static; + _mode[FX_MODE_BLINK] = &WS2812FX::mode_blink; + _mode[FX_MODE_COLOR_WIPE] = &WS2812FX::mode_color_wipe; + _mode[FX_MODE_COLOR_WIPE_INV] = &WS2812FX::mode_color_wipe_inv; + _mode[FX_MODE_COLOR_WIPE_REV] = &WS2812FX::mode_color_wipe_rev; + _mode[FX_MODE_COLOR_WIPE_REV_INV] = &WS2812FX::mode_color_wipe_rev_inv; + _mode[FX_MODE_COLOR_WIPE_RANDOM] = &WS2812FX::mode_color_wipe_random; + _mode[FX_MODE_RANDOM_COLOR] = &WS2812FX::mode_random_color; + _mode[FX_MODE_SINGLE_DYNAMIC] = &WS2812FX::mode_single_dynamic; + _mode[FX_MODE_MULTI_DYNAMIC] = &WS2812FX::mode_multi_dynamic; + _mode[FX_MODE_RAINBOW] = &WS2812FX::mode_rainbow; + _mode[FX_MODE_RAINBOW_CYCLE] = &WS2812FX::mode_rainbow_cycle; + _mode[FX_MODE_SCAN] = &WS2812FX::mode_scan; + _mode[FX_MODE_DUAL_SCAN] = &WS2812FX::mode_dual_scan; + _mode[FX_MODE_FADE] = &WS2812FX::mode_fade; + _mode[FX_MODE_THEATER_CHASE] = &WS2812FX::mode_theater_chase; + _mode[FX_MODE_THEATER_CHASE_RAINBOW] = &WS2812FX::mode_theater_chase_rainbow; + _mode[FX_MODE_TWINKLE] = &WS2812FX::mode_twinkle; + _mode[FX_MODE_TWINKLE_RANDOM] = &WS2812FX::mode_twinkle_random; + _mode[FX_MODE_TWINKLE_FADE] = &WS2812FX::mode_twinkle_fade; + _mode[FX_MODE_TWINKLE_FADE_RANDOM] = &WS2812FX::mode_twinkle_fade_random; + _mode[FX_MODE_SPARKLE] = &WS2812FX::mode_sparkle; + _mode[FX_MODE_FLASH_SPARKLE] = &WS2812FX::mode_flash_sparkle; + _mode[FX_MODE_HYPER_SPARKLE] = &WS2812FX::mode_hyper_sparkle; + _mode[FX_MODE_STROBE] = &WS2812FX::mode_strobe; + _mode[FX_MODE_STROBE_RAINBOW] = &WS2812FX::mode_strobe_rainbow; + _mode[FX_MODE_MULTI_STROBE] = &WS2812FX::mode_multi_strobe; + _mode[FX_MODE_BLINK_RAINBOW] = &WS2812FX::mode_blink_rainbow; + _mode[FX_MODE_CHASE_WHITE] = &WS2812FX::mode_chase_white; + _mode[FX_MODE_CHASE_COLOR] = &WS2812FX::mode_chase_color; + _mode[FX_MODE_CHASE_RANDOM] = &WS2812FX::mode_chase_random; + _mode[FX_MODE_CHASE_RAINBOW] = &WS2812FX::mode_chase_rainbow; + _mode[FX_MODE_CHASE_FLASH] = &WS2812FX::mode_chase_flash; + _mode[FX_MODE_CHASE_FLASH_RANDOM] = &WS2812FX::mode_chase_flash_random; + _mode[FX_MODE_CHASE_RAINBOW_WHITE] = &WS2812FX::mode_chase_rainbow_white; + _mode[FX_MODE_CHASE_BLACKOUT] = &WS2812FX::mode_chase_blackout; + _mode[FX_MODE_CHASE_BLACKOUT_RAINBOW] = &WS2812FX::mode_chase_blackout_rainbow; + _mode[FX_MODE_COLOR_SWEEP_RANDOM] = &WS2812FX::mode_color_sweep_random; + _mode[FX_MODE_RUNNING_COLOR] = &WS2812FX::mode_running_color; + _mode[FX_MODE_RUNNING_RED_BLUE] = &WS2812FX::mode_running_red_blue; + _mode[FX_MODE_RUNNING_RANDOM] = &WS2812FX::mode_running_random; + _mode[FX_MODE_LARSON_SCANNER] = &WS2812FX::mode_larson_scanner; + _mode[FX_MODE_COMET] = &WS2812FX::mode_comet; + _mode[FX_MODE_FIREWORKS] = &WS2812FX::mode_fireworks; + _mode[FX_MODE_FIREWORKS_RANDOM] = &WS2812FX::mode_fireworks_random; + _mode[FX_MODE_MERRY_CHRISTMAS] = &WS2812FX::mode_merry_christmas; + _mode[FX_MODE_FIRE_FLICKER] = &WS2812FX::mode_fire_flicker; + _mode[FX_MODE_FIRE_FLICKER_SOFT] = &WS2812FX::mode_fire_flicker_soft; + _mode[FX_MODE_FIRE_FLICKER_INTENSE] = &WS2812FX::mode_fire_flicker_intense; + _mode[FX_MODE_CIRCUS_COMBUSTUS] = &WS2812FX::mode_circus_combustus; + _mode[FX_MODE_HALLOWEEN] = &WS2812FX::mode_halloween; + _mode[FX_MODE_BICOLOR_CHASE] = &WS2812FX::mode_bicolor_chase; + _mode[FX_MODE_TRICOLOR_CHASE] = &WS2812FX::mode_tricolor_chase; +// if flash memory is constrained (I'm looking at you Arduino Nano), replace modes +// that use a lot of flash with mode_static (reduces flash footprint by about 2100 bytes) +#ifdef REDUCED_MODES + _mode[FX_MODE_BREATH] = &WS2812FX::mode_static; + _mode[FX_MODE_RUNNING_LIGHTS] = &WS2812FX::mode_static; + _mode[FX_MODE_ICU] = &WS2812FX::mode_static; +#else + _mode[FX_MODE_BREATH] = &WS2812FX::mode_breath; + _mode[FX_MODE_RUNNING_LIGHTS] = &WS2812FX::mode_running_lights; + _mode[FX_MODE_ICU] = &WS2812FX::mode_icu; +#endif + _mode[FX_MODE_CUSTOM_0] = &WS2812FX::mode_custom_0; + _mode[FX_MODE_CUSTOM_1] = &WS2812FX::mode_custom_1; + _mode[FX_MODE_CUSTOM_2] = &WS2812FX::mode_custom_2; + _mode[FX_MODE_CUSTOM_3] = &WS2812FX::mode_custom_3; + _mode[FX_MODE_CUSTOM_4] = &WS2812FX::mode_custom_4; + _mode[FX_MODE_CUSTOM_5] = &WS2812FX::mode_custom_5; + _mode[FX_MODE_CUSTOM_6] = &WS2812FX::mode_custom_6; + _mode[FX_MODE_CUSTOM_7] = &WS2812FX::mode_custom_7; + _mode[FX_MODE_CUSTOM_8] = &WS2812FX::mode_custom_8; + _mode[FX_MODE_CUSTOM_9] = &WS2812FX::mode_custom_9; + + brightness = DEFAULT_BRIGHTNESS + 1; // Adafruit_NeoPixel internally offsets brightness by 1 + _running = false; + _num_segments = 1; + _segments[0].mode = DEFAULT_MODE; + _segments[0].colors[0] = DEFAULT_COLOR; + _segments[0].start = 0; + _segments[0].stop = n - 1; + _segments[0].speed = DEFAULT_SPEED; + resetSegmentRuntimes(); + } + + void +// timer(void), + init(void), + service(void), + start(void), + stop(void), + pause(void), + resume(void), + strip_off(void), + fade_out(void), + fade_out(uint32_t), + setMode(uint8_t m), + setMode(uint8_t seg, uint8_t m), + setOptions(uint8_t seg, uint8_t o), + setCustomMode(uint16_t (*p)()), + setCustomShow(void (*p)()), + setSpeed(uint16_t s), + setSpeed(uint8_t seg, uint16_t s), + increaseSpeed(uint8_t s), + decreaseSpeed(uint8_t s), + setColor(uint8_t r, uint8_t g, uint8_t b), + setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w), + setColor(uint32_t c), + setColor(uint8_t seg, uint32_t c), + setColors(uint8_t seg, uint32_t* c), + setBrightness(uint8_t b), + increaseBrightness(uint8_t s), + decreaseBrightness(uint8_t s), + setLength(uint16_t b), + increaseLength(uint16_t s), + decreaseLength(uint16_t s), + trigger(void), + setNumSegments(uint8_t n), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, bool reverse), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color, uint16_t speed, uint8_t options), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, bool reverse), + setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, const uint32_t colors[], uint16_t speed, uint8_t options), + resetSegments(), + resetSegmentRuntimes(), + resetSegmentRuntime(uint8_t), + setPixelColor(uint16_t n, uint32_t c), + setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b), + setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b, uint8_t w), + copyPixels(uint16_t d, uint16_t s, uint16_t c), + show(void); + + boolean + isRunning(void), + isTriggered(void), + isFrame(void), + isFrame(uint8_t), + isCycle(void), + isCycle(uint8_t); + + uint8_t + random8(void), + random8(uint8_t), + getMode(void), + getMode(uint8_t), + getModeCount(void), + setCustomMode(const __FlashStringHelper* name, uint16_t (*p)()), + setCustomMode(uint8_t i, const __FlashStringHelper* name, uint16_t (*p)()), + getNumSegments(void), + get_random_wheel_index(uint8_t), + getOptions(uint8_t), + getNumBytesPerPixel(void); + + uint16_t + random16(void), + random16(uint16_t), + getSpeed(void), + getSpeed(uint8_t), + getLength(void), + getNumBytes(void); + + uint32_t + color_wheel(uint8_t), + getColor(void), + getColor(uint8_t), + intensitySum(void); + + uint32_t* getColors(uint8_t); + uint32_t* intensitySums(void); + + const __FlashStringHelper* getModeName(uint8_t m); + + WS2812FX::Segment* getSegment(void); + + WS2812FX::Segment* getSegment(uint8_t); + + WS2812FX::Segment* getSegments(void); + + WS2812FX::Segment_runtime* getSegmentRuntime(void); + + WS2812FX::Segment_runtime* getSegmentRuntime(uint8_t); + + WS2812FX::Segment_runtime* getSegmentRuntimes(void); + + // mode helper functions + uint16_t + blink(uint32_t, uint32_t, bool strobe), + color_wipe(uint32_t, uint32_t, bool), + twinkle(uint32_t, uint32_t), + twinkle_fade(uint32_t), + chase(uint32_t, uint32_t, uint32_t), + running(uint32_t, uint32_t), + fireworks(uint32_t), + fire_flicker(int), + tricolor_chase(uint32_t, uint32_t, uint32_t), + scan(uint32_t, uint32_t, bool); + uint32_t + color_blend(uint32_t, uint32_t, uint8_t); + + // builtin modes + uint16_t + mode_static(void), + mode_blink(void), + mode_blink_rainbow(void), + mode_strobe(void), + mode_strobe_rainbow(void), + mode_color_wipe(void), + mode_color_wipe_inv(void), + mode_color_wipe_rev(void), + mode_color_wipe_rev_inv(void), + mode_color_wipe_random(void), + mode_color_sweep_random(void), + mode_random_color(void), + mode_single_dynamic(void), + mode_multi_dynamic(void), + mode_breath(void), + mode_fade(void), + mode_scan(void), + mode_dual_scan(void), + mode_theater_chase(void), + mode_theater_chase_rainbow(void), + mode_rainbow(void), + mode_rainbow_cycle(void), + mode_running_lights(void), + mode_twinkle(void), + mode_twinkle_random(void), + mode_twinkle_fade(void), + mode_twinkle_fade_random(void), + mode_sparkle(void), + mode_flash_sparkle(void), + mode_hyper_sparkle(void), + mode_multi_strobe(void), + mode_chase_white(void), + mode_chase_color(void), + mode_chase_random(void), + mode_chase_rainbow(void), + mode_chase_flash(void), + mode_chase_flash_random(void), + mode_chase_rainbow_white(void), + mode_chase_blackout(void), + mode_chase_blackout_rainbow(void), + mode_running_color(void), + mode_running_red_blue(void), + mode_running_random(void), + mode_larson_scanner(void), + mode_comet(void), + mode_fireworks(void), + mode_fireworks_random(void), + mode_merry_christmas(void), + mode_halloween(void), + mode_fire_flicker(void), + mode_fire_flicker_soft(void), + mode_fire_flicker_intense(void), + mode_circus_combustus(void), + mode_bicolor_chase(void), + mode_tricolor_chase(void), + mode_icu(void), + mode_custom_0(void), + mode_custom_1(void), + mode_custom_2(void), + mode_custom_3(void), + mode_custom_4(void), + mode_custom_5(void), + mode_custom_6(void), + mode_custom_7(void), + mode_custom_8(void), + mode_custom_9(void); + private: + uint16_t _rand16seed; + uint16_t (*customModes[MAX_CUSTOM_MODES])(void) { + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; }, + []{ return (uint16_t)1000; } + }; + void (*customShow)(void) = NULL; + + boolean + _running, + _triggered; + + mode_ptr _mode[MODE_COUNT]; // SRAM footprint: 4 bytes per element + + uint8_t _segment_index = 0; + uint8_t _num_segments = 1; + segment _segments[MAX_NUM_SEGMENTS] = { // SRAM footprint: 20 bytes per element + // start, stop, speed, mode, options, color[] + { 0, 7, DEFAULT_SPEED, FX_MODE_STATIC, NO_OPTIONS, {DEFAULT_COLOR}} + }; + segment_runtime _segment_runtimes[MAX_NUM_SEGMENTS]; // SRAM footprint: 16 bytes per element +}; + +#endif diff --git a/Arduino/McLighting/data/apple-touch-icon.png b/Arduino/McLighting/data/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c00fb89de57046547094f4785167e3409afdc8ac GIT binary patch literal 4500 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 m_iVO+_x78a5@6?Iw*L#`C2;+Lpe=y_0000 + + + SPIFFS Editor + + + + + +
+
+
+ + + + diff --git a/Arduino/McLighting/data/edit.htm.gz b/Arduino/McLighting/data/edit.htm.gz index 69ce414f47f4b25a70160fc4985b2bd320c9b90a..9466db2415e67a661531a9e7f152554c10cffe2c 100644 GIT binary patch literal 5489 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 literal 1150 zcmd5)T}YZ?6n@3p3@y{hrv0dyWg4`Ks8LiSs1Zp~iZo)Ag)vw}5=AXod1FBkBZ8nH zm^Z-|?V=!w1lNUBASeXo@J`0^VlWvo2dii2d%G#v{l>?6f6jZJbDr~@k1-K_xw(v1 z9ebI0x7Iqot*#Mb_8XCpMW( zReHVNRa#m)qtR%dYqeVa%E}7s=;*k^yt%pgaZOFlCyT}Mt)ikLSyomSAdHVNiTwQh zYlT9AoSdAi?Ck6_l}cqxrBb4{wllAZC#W|h5(!LCPa_ZrfO4a^w-*$T#l=O$<8hpvoWSq* zr+q%3e_~?7OnSW+IMa^f<71qjo??H0AF)^rR;v~3>+77){QNxD*47Y-M377-5sgNF zZ*FeBB8@*378YW1auP>JN7&xpMmQYC!NCEBhljDWw8S}YZEay}Y>emI+uIY~)4^cy z8F70`_|(9_00svKF*G!U(a}+OJRTk|_-LM-)6~=yc6N5SQH{@((@6bGii?Y1E0xNx zGMVg3&{-mpfX*l>DM4Lb9lE=_xgNW_yPVhI;UPky&|8{|m^5NE!wk}(ie_b}IlBq} zMVOVKdwqR9$B&PX3*3JY_m9Nk&GPc{gN==iJO5F2bv2uvofXmS?P|3;LfBta`3zy6F#O-#g&(F`<>gww4@PB>= d7!xdbpRqYH(Gg7acUp7g|4wmf`3*+E{Q*gMMA`rV diff --git a/Arduino/McLighting/data/index.htm b/Arduino/McLighting/data/index.htm index 6aa58cc..647bb87 100644 --- a/Arduino/McLighting/data/index.htm +++ b/Arduino/McLighting/data/index.htm @@ -1,97 +1,2539 @@ - - - - ESP Monitor - - + - - -
- - - - -
-
-
-
- - \ No newline at end of file + //console.log("Hidden items: " + settings.visibility); +} + +function onSelectColNum(colnum) { + data.color_num = colnum; + console.log("selected color:" + colnum); + // Show selected color number + var x = document.getElementsByClassName("color_wheel_legend"); + for (var i = 0; i < x.length; i++) { + x[i].className = x[i].className.replace(/\belevation-9\b/g, "elevation-3"); + } + x = document.getElementById("colorSel" + colnum); + x.className = x.className.replace(/\belevation-3\b/g, "elevation-9"); + // Set ColorPicker and Sliders to selected color + red.value = data.color["r" + (colnum > 1 ? colnum : "")]; + green.value = data.color["g" + (colnum > 1 ? colnum : "")]; + blue.value = data.color["b" + (colnum > 1 ? colnum : "")]; + white.value = data.color["w" + (colnum > 1 ? colnum : "")]; + initSliderColors(); + changeRangeNumVal(); + colorNumrVals(); +} +function initSettings() { + // Add languages to language select + var lang = document.getElementById("language"); + for (var code in language) { + if (!language.hasOwnProperty(code)) continue; + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = language[code].lang_name; + lang.appendChild(option); + } + lang.value = settings.lang; + lang.addEventListener('change', ()=>{ + //do something here + }); + var wsmessage = document.getElementById("wsmessage"); + wsmessage.value = ""; + wsmessage.addEventListener('change', ()=>{ + ws_send(wsmessage.value); + wsmessage.value = ""; + }); + var hostname = document.getElementById("hostname"); + hostname.value = config.hostname; + hostname.addEventListener('change', ()=>{ + config.hostname = hostname.value; + ws_send("Ch" + config.hostname); + }); + var mqtt_host = document.getElementById("mqtt_host"); + mqtt_host.value = config.mqtt_host; + mqtt_host.addEventListener('change', ()=>{ + config.mqtt_host = mqtt_host.value; + ws_send("Cmh" + config.mqtt_host); + }); + var mqtt_port = document.getElementById("mqtt_port"); + mqtt_port.value = config.mqtt_port; + mqtt_port.addEventListener('change', ()=>{ + config.mqtt_port = mqtt_port.value; + ws_send("Cmp" + config.mqtt_port); + }); + var mqtt_user = document.getElementById("mqtt_user"); + mqtt_user.value = config.mqtt_user; + mqtt_user.addEventListener('change', ()=>{ + config.mqtt_user = mqtt_user.value; + ws_send("Cmu" + config.mqtt_user); + }); + var mqtt_pass = document.getElementById("mqtt_pass"); + mqtt_pass.value = config.mqtt_pass; + mqtt_pass.addEventListener('change', ()=>{ + config.mqtt_pass = mqtt_pass.value; + ws_send("Cmw" + config.mqtt_pass); + }); + var count = document.getElementById("selectcount"); + count.value = config.ws_cnt; + count.addEventListener('change', ()=>{ + config.ws_cnt = count.value; + ws_send("Csc" + config.ws_cnt); + }); + var pin = document.getElementById("selectpin"); + pin.value = config.ws_pin; + pin.addEventListener('change', ()=>{ + config.ws_pin = pin.value; + ws_send("Csp" + config.ws_pin); + }); + var rgbo = document.getElementById("selectrgbo"); + for (var code in selectrgbo) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectrgbo[code]; + rgbo.appendChild(option); + } + rgbo.value = config.ws_rgbo; + rgbo.addEventListener('change', ()=>{ + config.ws_rgbo = rgbo.value; + ws_send("Csr" + config.ws_rgbo); + }); + var optrev = document.getElementById("selectoptrev"); + for (var code in selectoptrev) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptrev[code]; + optrev.appendChild(option); + } + optrev.value = (config.ws_fxopt & 128); + optrev.addEventListener('change', ()=>{ + config.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("Cso" + config.ws_fxopt); + }); + var optfade = document.getElementById("selectoptfade"); + for (var code in selectoptfade) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptfade[code]; + optfade.appendChild(option); + } + optfade.value = (config.ws_fxopt & 112); + optfade.addEventListener('change', ()=>{ + config.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("Cso" + config.ws_fxopt); + }); + var optgamma = document.getElementById("selectoptgamma"); + for (var code in selectoptgamma) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptgamma[code]; + optgamma.appendChild(option); + } + optgamma.value = (config.ws_fxopt & 8); + optgamma.addEventListener('change', ()=>{ + config.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("Cso" + config.ws_fxopt); + }); + var optsize = document.getElementById("selectoptsize"); + for (var code in selectoptsize) { + var option = document.createElement("OPTION"); + option.setAttribute("value", code); + option.innerHTML = selectoptsize[code]; + optsize.appendChild(option); + } + optsize.value = (config.ws_fxopt & 6) + optsize.addEventListener('change', ()=>{ + config.ws_fxopt = optrev.value | optfade.value | optgamma.value | optsize.value; + ws_send("Cso" + config.ws_fxopt); + }); + slavenodes.value = settings.slave_nodes; + lang.addEventListener('change', ()=>{ + settings.lang = lang.options[lang.selectedIndex].value; + }); + var picker = document.getElementById("pickerstyle"); + picker.checked = (settings.picker_type === "circle"); + redrawColorPicker(); // Redraw colorpicker to saved settings + picker.addEventListener('change', ()=>{ + settings.picker_type = (picker.checked) ? "circle" : "wheel"; + redrawColorPicker(); + }); + var settransitionEffects = document.getElementById("set-transitionEffects"); + settransitionEffects.checked = config.transitionEffects; + settransitionEffects.addEventListener('change', ()=>{ + config.transitionEffects = settransitionEffects.checked; + if (settransitionEffects.checked) { + document.getElementById("settransitionEffectsbgcolor").style.backgroundColor = settings.theme_btn; + ws_send("Ce1"); + } else { + document.getElementById("settransitionEffectsbgcolor").style.backgroundColor = ""; + ws_send("Ce0"); + } + }); + var colmain = document.getElementById("color-main"); + colmain.value = settings.theme_color; + colmain.addEventListener('change', ()=>{ + settings.theme_color = colmain.value; + var hexcolor = settings.theme_color; + var yiq = ((parseInt(hexcolor.substr(1,2),16)*299)+(parseInt(hexcolor.substr(3,2),16)*587)+(parseInt(hexcolor.substr(5,2),16)*114))/1000; + document.getElementById("toolbar").style.backgroundColor = settings.theme_color; + document.getElementById("footer").style.backgroundColor = settings.theme_color; + document.getElementById("toolbar").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("footer").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("footer-link").style.color = (yiq >= 125) ? '#111' : '#EEE'; + }); + var colfont = document.getElementById("color-font"); + colfont.value = settings.theme_font; + colfont.addEventListener('change', ()=>{ + settings.theme_font = colfont.value; + document.getElementById("modes").style.color = settings.theme_font; + }); + var colback = document.getElementById("color-back"); + colback.value = settings.theme_back; + colback.addEventListener('change', ()=>{ + settings.theme_back = colback.value; + document.getElementById("container").style.backgroundColor = settings.theme_back; + document.getElementById("language").style.backgroundColor = settings.theme_back; + document.getElementById("selectrgbo").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptrev").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptfade").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptgamma").style.backgroundColor = settings.theme_back; + document.getElementById("selectoptsize").style.backgroundColor = settings.theme_back; + // Set text/icon color depending on background darkness + var hexcolor = settings.theme_back; + var yiq = ((parseInt(hexcolor.substr(1,2),16)*299)+(parseInt(hexcolor.substr(3,2),16)*587)+(parseInt(hexcolor.substr(5,2),16)*114))/1000; + var icons = document.getElementsByClassName("icon--link"); + for (var i = 0; i < icons.length; i++) { + icons[i].style.color = (yiq >= 125) ? '#222' : '#EEE'; + } + document.getElementById("wsmessageLbl").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("redNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("greenNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("blueNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("whiteNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("brightNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("speedNum").style.color = (yiq >= 125) ? '#111' : '#EEE'; + document.getElementById("settings").style.color = (yiq >= 125) ? '#111' : '#EEE'; + }); + var colbtn = document.getElementById("color-btn"); + colbtn.value = settings.theme_btn; + colbtn.addEventListener('change', ()=>{ + settings.theme_btn = colbtn.value; + document.getElementById("settings-save").style.backgroundColor = settings.theme_btn; + document.getElementById("pickerbgcolor").style.backgroundColor = settings.theme_btn; + if (settransitionEffects.checked) document.getElementById("settransitionEffectsbgcolor").style.backgroundColor = settings.theme_btn; + select_active_button(); + }); + var colbtns = document.getElementById("color-btnsel"); + colbtns.value = settings.theme_btnsel; + colbtns.addEventListener('change', ()=>{ + settings.theme_btnsel = colbtns.value; + select_active_button(); + }); + // Set interface colors + var event = new Event('change'); + colmain.dispatchEvent(event); + colfont.dispatchEvent(event); + colback.dispatchEvent(event); + colbtn.dispatchEvent(event); + colbtns.dispatchEvent(event); + + document.getElementById("settings-open").addEventListener('click', ()=>{ + var icons = document.getElementsByClassName("icon--link"); + var set = document.getElementById("settings"); + var arr = set.className.split(" "); + if (arr.indexOf("hidden") === -1) { + set.className += " hidden"; + // hide checkboxes and disabled buttons + data.modes.map(mode => { + if (mode.hidden) { + document.getElementById(mode.id).parentNode.className += " hidden"; + } + }); + for (var i = 0; i < icons.length; i++) { + icons[i].parentNode.className += "hidden"; + } + } else { + set.className = set.className.replace(/\b hidden\b/g, ""); + // show checkboxes and all buttons + data.modes.map(mode => { + if (mode.hidden) { + var parent = document.getElementById(mode.id).parentNode; + parent.className = parent.className.replace(/\b hidden\b/g, ""); + } + }); + for (var i = 0; i < icons.length; i++) { + icons[i].parentNode.className = icons[i].parentNode.className.replace(/\bhidden\b/g, ""); + } + } + }); + document.getElementById("settings-save").addEventListener('click', ()=>{ + settings.slave_nodes = document.getElementById("slavenodes").value; + saveSettings(); + var icons = document.getElementsByClassName("icon--link"); + data.modes.map(mode => { + if (mode.hidden) { + document.getElementById(mode.id).parentNode.className += " hidden"; + } + }); + for (var i = 0; i < icons.length; i++) { + icons[i].parentNode.className += " hidden"; + } + + + document.getElementById("settings").className += " hidden"; + }); +} + +function showSnackbar(msg, why, time) { + var x = document.getElementById("snackbar"); + x.innerHTML = msg; + x.style.backgroundColor = (why === "error") ? "#ad2727" : "#4caf50"; + // Animation is timed with classname (3000, 5000 or 15000) + x.className = "show" + time; + setTimeout(function(){ x.className = x.className.replace("show" + time, ""); }, time); +} + +/* WebSocket code */ +let ws_options = { + connectionTimeout: 1000, + maxRetries: 2, + reconnectionDelayGrowFactor: 2, + debug: true +}; +function disconnectAllAdditionalNodes() { + // Close potentially open connections + data.additional_connections.forEach((conn) => { + conn.close(1000, "Manually closed::disconnectAllAdditionalNode()", {keepClosed: true}); + }); + data.additional_connections = []; + data.num_additional_connections = 0; + var con = document.getElementById("additional-con"); + var arr = con.className.split(" "); + if (arr.indexOf("hidden") === -1) { + con.className += " hidden"; + } +} +function connectAdditionalNodes() { + disconnectAllAdditionalNodes(); + + // Connect to the configured nodes + let nodes = settings.slave_nodes.split(";"); + nodes.forEach((host) => { + host = host.trim(); + if (host !== "") { + let conn = new ReconnectingWebSocket("ws://" + host + ":81", "arduino", ws_options); + console.log("Connecting to additional node", host); + data.additional_connections.push(conn); + + conn.onopen = () => { + console.log("Connected to additional node", host); + data.num_additional_connections++; + var con = document.getElementById("additional-con"); + con.className = con.className = ""; + con.innerHTML = "+" + data.num_additional_connections; + }; + conn.onclose = () => { + console.log("Disconnected to additional node", host); + data.num_additional_connections--; + var con = document.getElementById("additional-con"); + con.innerHTML = "+" + data.num_additional_connections; + if (data.num_additional_connections <= 1) { + con.className = "hidden"; + } + }; + conn.onerror = () => { + console.log("Error on additional node", host); + }; + } + }); +} +function ws_reconnect() { + //data.connection.reconnect(); + ws_connect(); + var con = document.getElementById("connection-failed"); + con.className = "hidden"; +} + +function ws_connect() { + data.connection = new ReconnectingWebSocket(ws_url, "arduino", ws_options); + document.getElementById("percentage").innerHTML = "67%"; + document.getElementById("percentage-done").setAttribute("stroke-dasharray", "67,100"); + document.getElementById("modal-content").innerHTML = language[settings.lang].loadWebsock; + + // When the connection is open, send some data to the server + data.connection.onopen = function() { + console.log("WebSocket open"); + data.is_connected = true; + data.refresh_interval = setInterval(() => ws_send("$"), 10000); + var con = document.getElementById("disconnected"); + con.className = "hidden"; + con = document.getElementById("connected"); + con.className = con.className = ""; + document.getElementById("percentage").innerHTML = "100%"; + document.getElementById("percentage-done").setAttribute("stroke-dasharray", "100,100"); + document.getElementById("modal-content").innerHTML = language[settings.lang].loadReady; + //setTimeout(function() { ws_send("$"); }, 2000); + //setTimeout(function() { ws_send("C"); }, 3000); + //setTimeout(function() { ws_send("~"); }, 4000); + }; + + // When the connection is open, send some data to the server + data.connection.onclose = function() { + console.log("WebSocket closed"); + data.is_connected = false; + clearInterval(data.refresh_interval); + }; + + // Log errors + data.connection.onerror = function(error) { + console.error("WebSocket error", error); + data.is_connected = false; + if (data.connection.retryCount >= ws_options.maxRetries) { + var con = document.getElementById("disconnected"); + con.className = ""; + con = document.getElementById("connected"); + con.className = con.className = "hidden"; + var con = document.getElementById("connection-failed"); + con.className = con.className = ""; + showSnackbar(language[settings.lang].connectError1 + ws_options.maxRetries + language[settings.lang].connectError2, "error", 15000); + } + }; + + // Log messages from the server + data.connection.onmessage = function(e) { + console.log("WebSocket from server: ", e.data); + try { + var res = JSON.parse(e.data); +// document.getElementById('modal').style.display = "none"; + // console.log("res", res); + if (res) { + // Status starts here + if (typeof res.mode !== "undefined") data.mode = res.mode; + if (typeof res.ws2812fx_mode !== "undefined") data.ws2812fx_mode = res.ws2812fx_mode; + if (typeof res.speed !== "undefined") { + data.speed = res.speed; + // init SliderVals + speed.value = res.speed; + } + if (typeof res.brightness !== "undefined") { + data.brightness = res.brightness; + // init ColorSliderVals + bright.value = res.brightness; + } + if (typeof res.color !== "undefined") { + data.color.w = res.color[0]; + data.color.r = res.color[1]; + data.color.g = res.color[2]; + data.color.b = res.color[3]; + data.color.hex = rgbToHex([res.color[0], res.color[1], res.color[2], res.color[3]]); + data.color.w2 = res.color[4]; + data.color.r2 = res.color[5]; + data.color.g2 = res.color[6]; + data.color.b2 = res.color[7]; + data.color.hex2 = rgbToHex([res.color[4], res.color[5], res.color[6], res.color[7]]); + data.color.w3 = res.color[8]; + data.color.r3 = res.color[9]; + data.color.g3 = res.color[10]; + data.color.b3 = res.color[11]; + data.color.hex3 = rgbToHex([res.color[8], res.color[9], res.color[10], res.color[11]]); + // init ColorSliderVals + if (data.color_num === 1) { + red.value = data.color.r; + green.value = data.color.g; + blue.value = data.color.b; + white.value = data.color.w; + } + if (data.color_num === 2) { + red.value = data.color.r2; + green.value = data.color.g2; + blue.value = data.color.b2; + white.value = data.color.w2; + } + if (data.color_num === 3) { + red.value = data.color.r3; + green.value = data.color.g3; + blue.value = data.color.b3; + white.value = data.color.w3; + } + } + // Config starts here + if (typeof res.hostname !== "undefined") { config.hostname = res.hostname; document.getElementById("hostname").value = config.hostname; } + if (typeof res.mqtt_host !== "undefined") { config.mqtt_host = res.mqtt_host; document.getElementById("mqtt_host").value = config.mqtt_host; } + if (typeof res.mqtt_port !== "undefined") { config.mqtt_port = res.mqtt_port; document.getElementById("mqtt_port").value = config.mqtt_port; } + if (typeof res.mqtt_user !== "undefined") { config.mqtt_user = res.mqtt_user; document.getElementById("mqtt_user").value = config.mqtt_user; } + if (typeof res.mqtt_pass !== "undefined") { config.mqtt_pass = res.mqtt_pass; document.getElementById("mqtt_pass").value = config.mqtt_pass; } + if (typeof res.ws_cnt !== "undefined") { config.ws_cnt = res.ws_cnt; document.getElementById("selectcount").value = config.ws_cnt; } + if (typeof res.ws_rgbo !== "undefined") { + config.ws_rgbo = res.ws_rgbo; + document.getElementById("selectrgbo").value = config.ws_rgbo; + config.enable_rgbw = config.ws_rgbo.includes("W"); + if (config.enable_rgbw) { + document.getElementById("white").parentNode.className = ""; + } else { + document.getElementById("white").parentNode.className = "hidden"; + white.value = 0; + data.color.w = 0; + data.color.w2 = 0; + data.color.w3 = 0; + } + + } + if (typeof res.ws_pin !== "undefined") { config.ws_pin = res.ws_pin; document.getElementById("selectpin").value = config.ws_pin; } + if (typeof res.ws_fxopt !== "undefined") { + config.ws_fxopt = res.ws_fxopt; + document.getElementById("selectoptrev").value = (config.ws_fxopt & 128); + document.getElementById("selectoptfade").value = (config.ws_fxopt & 112); + document.getElementById("selectoptgamma").value = (config.ws_fxopt & 8); + document.getElementById("selectoptsize").value = (config.ws_fxopt & 6); + } + // Modes starts here + if (typeof res[0] !== "undefined") { + res.forEach(item => { + if (item.name && item.name.length > 0) { + data.modes.push({ title: item.name, id: item.mode }); + } + }); + } + // init Color Vals + colorNumrVals(); + initSliderColors(); + // init Change Range Val + changeRangeNumVal(); + // init Colors controls + // init display Colors + displayColors(true); + select_active_button(); + } + if (data.init === true) { + // Set selected mode button + //document.getElementById(data.ws2812fx_mode).style.backgroundColor = settings.theme_btnsel; + // Close Loading Modal + setTimeout(() => { + document.getElementById('modal').style.display = "none"; + document.getElementById('container').style.display = ""; + }, 500); + initSettings(); + initcolorSliders(); + data.init = false; + } + } catch (e) {} + }; +} + +function ws_send(message) { + console.log("WS send: ", message); + data.connection.send(message); + if (message!="$") { + data.additional_connections.forEach((conn) => { + console.log("WS send additional to: ", conn.url); + conn.send(message); + }); + } +} +function disable_color_selection(status) { + data.color_disabled = status; + document.getElementById("red").disabled = status; + document.getElementById("redNum").disabled = status; + document.getElementById("red").disabled = status; + document.getElementById("green").disabled = status; + document.getElementById("greenNum").disabled = status; + document.getElementById("blue").disabled = status; + document.getElementById("blueNum").disabled = status; + document.getElementById("white").disabled = status; + document.getElementById("whiteNum").disabled = status; + if (status) { + } +} + +function select_active_button() { + btns = document.getElementsByClassName("btn"); + for (i = 0; i < btns.length; i++) { + btns[i].style.backgroundColor = settings.theme_btn; + } + if (data.mode != 1 || (data.mode === 1 && data.ws2812fx_mode !== 57)) { // CUSTOM WS MODE + wsmess = document.getElementById("message"); + var arr = wsmess.className.split(" "); + if (arr.indexOf("hidden") === -1) { + wsmess.className += " hidden"; + } + } + if (data.mode >= 1) { + document.getElementById(data.ws2812fx_mode).style.backgroundColor = settings.theme_btnsel; + if (data.ws2812fx_mode === 56) { // AUTOPLAY + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(true); + } else if (data.ws2812fx_mode === 57) { //CUSTOM_WS + wsmess = document.getElementById("message"); + wsmess.className = wsmess.className.replace(/\b hidden\b/g, ""); + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(true); + } else if (data.ws2812fx_mode === 58) { //TV + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(false); + } else if (data.ws2812fx_mode === 59) { //E1.31 + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(true); + } else if (data.ws2812fx_mode === 60) { //Fire2012 + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(false); + disable_speed_selection(false); + } else { + disable_modebuttons(false); + disable_color_selection(false); + disable_bright_selection(false); + disable_speed_selection(false); + } + } else if (data.mode === 0) { + document.getElementById("off").style.backgroundColor = settings.theme_btnsel; + disable_modebuttons(false); + disable_color_selection(true); + disable_bright_selection(true); + disable_speed_selection(true); + } +} + +function disable_bright_selection(status) { + document.getElementById("bright").disabled = status; + document.getElementById("brightNum").disabled = status; +} + +function disable_speed_selection(status) { + document.getElementById("speed").disabled = status; + document.getElementById("speedNum").disabled = status; +} + +function disable_modebuttons(status) { + data.modes.forEach(mode => { + //if (settings.visibility.indexOf(mode.id) > -1) { + document.getElementById(mode.id).disabled = status; + }); +} + +function set_mode(mode_id) { + if (Number.isInteger(mode_id)) { + data.mode = 1; + data.ws2812fx_mode = mode_id; + } else { + // For named modes + if (mode_id == "off") { + data.mode = 0; + } + } + select_active_button(); + ws_send("/" + mode_id); +} +function set_speed() { + ws_send("?" + data.speed); +} +function set_brightness() { + ws_send("%" + data.brightness); +} +function set_color() { + if (data.color_num === 1) { + ws_send("#" + rgbToHex([data.color.w, data.color.r, data.color.g, data.color.b])); + } + if (data.color_num === 2) { + ws_send("##" + rgbToHex([data.color.w2, data.color.r2, data.color.g2, data.color.b2])); + } + if (data.color_num === 3) { + ws_send("###" + rgbToHex([data.color.w3, data.color.r3, data.color.g3, data.color.b3])); + } +} + +/* ColorPicker Code */ +var canvas = document.getElementById('color_wheel_canvas'); +var context = canvas.getContext('2d'); + +function componentToHex(c) { + return ("0" + Number(c).toString(16)).slice(-2).toUpperCase(); +} + +function rgbToHex(rgb) { + return (componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]) + componentToHex(rgb[3])); +} + +function onSelectColor(event) { + if (!data.color_disabled) { + var pos; + event.preventDefault(); + + if (event.type === "touchmove") { + var el = event.target; + pos = { + x: Math.round(event.targetTouches[0].pageX - el.offsetLeft), + y: Math.round(event.targetTouches[0].pageY - el.offsetTop) + }; + } + if (event.type === "click") { + pos = { + x: Math.round(event.offsetX), + y: Math.round(event.offsetY) + }; + } + + var color = context.getImageData(pos.x, pos.y, 1, 1).data; + var hex_color = rgbToHex(color); + var colnum = (data.color_num === 1) ? "" : data.color_num; + data.color["hex" + colnum] = hex_color; + data.color["r" + colnum] = color[0]; + data.color["g" + colnum] = color[1]; + data.color["b" + colnum] = color[2]; + data.color["w" + colnum] = 0; + red.value = color[0]; + green.value = color[1]; + blue.value = color[2]; + white.value = 0; + displayColors(); + initSliderColors(); + changeRangeNumVal(); + colorNumrVals(); +} +} +function redrawColorPicker() { + if (context) { + context.clearRect(0, 0, canvas.width, canvas.height); + } + + if (settings.picker_type === "circle") { + drawCircle(); + } else { + drawWheel(); + } +} + + /** + * Draws color ring + */ +function drawWheel() { + var centerX = canvas.width / 2; + var centerY = canvas.height / 2; + // console.log(centerX, centerY, canvas.width, canvas.height); + var innerRadius = canvas.width / 4.5; + var outerRadius = (canvas.width - 10) / 2; + // outer border + context.beginPath(); + // outer circle + context.arc(centerX, centerY, outerRadius, 0, 2 * Math.PI, false); + // draw the outer border: (gets drawn around the circle!) + context.lineWidth = 4; + context.strokeStyle = "#000000"; + context.stroke(); + context.closePath(); + + // fill with beautiful colors + // taken from here: http://stackoverflow.com/questions/18265804/building-a-color-wheel-in-html5 + for (var angle = 0; angle <= 360; angle += 1) { + var startAngle = (angle - 2) * Math.PI / 180; + var endAngle = angle * Math.PI / 180; + context.beginPath(); + context.moveTo(centerX, centerY); + context.arc( + centerX, + centerY, + outerRadius, + startAngle, + endAngle, + false + ); + context.closePath(); + context.fillStyle = "hsl(" + angle + ", 100%, 50%)"; + context.fill(); + context.closePath(); + } + + // inner border + context.beginPath(); + // this.context.arc(centerX, centerY, radius, startAngle, endAngle, counterClockwise); + context.arc(centerX, centerY, innerRadius, 0, 2 * Math.PI, false); + // fill the center + var my_gradient = context.createLinearGradient(0, 0, 170, 0); + my_gradient.addColorStop(0, "black"); + my_gradient.addColorStop(1, "white"); + + context.fillStyle = my_gradient; + context.fillStyle = "white"; + context.fill(); + + // draw the inner line + context.lineWidth = 2; + context.strokeStyle = "#000000"; + context.stroke(); + context.closePath(); +} + + /** + * Draws color circle + */ +function drawCircle() { + let radius = canvas.width / 2; + let image = context.createImageData(2 * radius, 2 * radius); + let data = image.data; + + for (let x = -radius; x < radius; x++) { + for (let y = -radius; y < radius; y++) { + let [r, phi] = xy2polar(x, y); + + if (r > radius) { + // skip all (x,y) coordinates that are outside of the circle + continue; + } + + let deg = rad2deg(phi); + + // Figure out the starting index of this pixel in the image data array. + let rowLength = 2 * radius; + let adjustedX = x + radius; // convert x from [-50, 50] to [0, 100] (the coordinates of the image data array) + let adjustedY = y + radius; // convert y from [-50, 50] to [0, 100] (the coordinates of the image data array) + let pixelWidth = 4; // each pixel requires 4 slots in the data array + let index = (adjustedX + (adjustedY * rowLength)) * pixelWidth; + + let hue = deg; + let saturation = r / radius; + let value = 1.0; + + let [red, green, blue] = hsv2rgb(hue, saturation, value); + let alpha = 255; + + data[index] = red; + data[index + 1] = green; + data[index + 2] = blue; + data[index + 3] = alpha; + } + } + this.context.putImageData(image, 0, 0); +} +function xy2polar(x, y) { + let r = Math.sqrt(x * x + y * y); + let phi = Math.atan2(y, x); + return [r, phi]; +} +function rad2deg(rad) { + // rad in [-Ï€, Ï€] range + // return degree in [0, 360] range + return ((rad + Math.PI) / (2 * Math.PI)) * 360; +} +function hsv2rgb(hue, saturation, value) { + let chroma = value * saturation; + let hue1 = hue / 60; + let x = chroma * (1 - Math.abs((hue1 % 2) - 1)); + let r1, g1, b1; + + if (hue1 >= 0 && hue1 <= 1) { + ([r1, g1, b1] = [chroma, x, 0]); + } else if (hue1 >= 1 && hue1 <= 2) { + ([r1, g1, b1] = [x, chroma, 0]); + } else if (hue1 >= 2 && hue1 <= 3) { + ([r1, g1, b1] = [0, chroma, x]); + } else if (hue1 >= 3 && hue1 <= 4) { + ([r1, g1, b1] = [0, x, chroma]); + } else if (hue1 >= 4 && hue1 <= 5) { + ([r1, g1, b1] = [x, 0, chroma]); + } else if (hue1 >= 5 && hue1 <= 6) { + ([r1, g1, b1] = [chroma, 0, x]); + } + + let m = value - chroma; + let [r, g, b] = [r1 + m, g1 + m, b1 + m]; + + // Change r,g,b values from [0,1] to [0,255] + return [255 * r, 255 * g, 255 * b]; +} + +function translate(node) { + if (node.nodeType === 3 && node.data in language.en) { + node.data = language[settings.lang][node.data]; + } + if (node.nodeType === 1 && node.nodeName !== "SCRIPT") { + for (var i = 0; i < node.childNodes.length; i++) { + translate(node.childNodes[i]); + } + } +} +document.addEventListener("DOMContentLoaded", function(event) { + // Code to run since DOM is loaded and ready + getModes(); + readSettings(); + ws_connect(); + ws_send("$") + document.getElementById("modal-content").innerHTML = language.en.loadModes; + //ws_send("C"); + getConfig(); + canvas.width = 400; + canvas.height = 400; + + redrawColorPicker(); +}); + + + diff --git a/Arduino/McLighting/data/index.htm.gz b/Arduino/McLighting/data/index.htm.gz new file mode 100644 index 0000000000000000000000000000000000000000..50d463761194d6ce10e47eed6ed6cdc7ed9971be GIT binary patch literal 19755 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∨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 hPV)J>d> smaller == slower uint8_t ws2812fx_speed_actual = 196; // Global variable for storing the speed for effects while fading --> smaller == slower uint8_t brightness = 196; // Global variable for storing the brightness (255 == 100%) -uint8_t brightness_actual = 0; // Global variable for storing the brightness while fadeing (255 == 100%) -uint8_t brightness_fade = 0; // Global variable for storing the brightness before change -uint8_t ws2812fx_mode = 0; // Global variable for storing the WS2812FX modes +uint8_t brightness_trans = 0; // Global variable for storing the brightness before change +uint8_t ws2812fx_mode = 0; // Global variable for storing the WS2812FX mode to set uint32_t hex_colors[3] = {}; // Color array for setting colors of WS2812FX -uint32_t hex_colors_actual[3] = {}; // Color array for actual colors of WS2812FX while fading -uint32_t hex_colors_mem[3] = {}; // Color array of colors of WS2812FX before fading +uint32_t hex_colors_trans[3] = {}; // Color array of colors of WS2812FX before fading struct ledstate // Data structure to store a state of a single led { uint8_t red; @@ -177,7 +175,7 @@ bool updateState = false; // Button handling #if defined(ENABLE_BUTTON) -//#define BTN_MODE_SHORT "STA|mo|fxm| h| s| r1| g1| b1| w1| r2| g2| b2| w2| r3| g3| b3| w3" // Example +//#define BTN_MODE_SHORT "STA|mo|fxm| b| s| r1| g1| b1| w1| r2| g2| b2| w2| r3| g3| b3| w3" // Example #define BTN_MODE_SHORT "STA| 5| 0|255|196| 0| 0| 0|255| 0| 0| 0| 0| 0| 0| 0| 0" // Static white #define BTN_MODE_MEDIUM "STA| 5| 48|200|196|255|102| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0" // Fire flicker #define BTN_MODE_LONG "STA| 5| 46|200|196|255|102| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0" // Fireworks random diff --git a/Arduino/McLighting/htm_index_gz.h b/Arduino/McLighting/htm_index_gz.h index c2be8a4..be6cd62 100644 --- a/Arduino/McLighting/htm_index_gz.h +++ b/Arduino/McLighting/htm_index_gz.h @@ -1,1670 +1,1652 @@ #include -#define index_htm_gz_len 19973 +#define index_htm_gz_len 19755 static const char index_htm_gz[] PROGMEM ={ - 0x1f, 0x8b, 0x08, 0x08, 0x83, 0xe6, 0x93, 0x5c, 0x04, 0x00, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x00, 0xe4, 0x5d, 0xdd, 0x7a, - 0x1b, 0x3d, 0x11, 0x3e, 0xe7, 0x79, 0xb8, 0x87, 0xad, 0x0b, 0xad, 0x0d, - 0xb6, 0xe3, 0x9f, 0x24, 0xa4, 0x4e, 0x1d, 0x48, 0xfb, 0xa5, 0xa5, 0xd0, - 0x9f, 0x8f, 0xa4, 0x50, 0xa0, 0xf4, 0x09, 0x6b, 0x5b, 0xb6, 0x97, 0xac, - 0x77, 0xcd, 0xee, 0xba, 0x49, 0x1a, 0x72, 0x2d, 0x9c, 0x70, 0xc2, 0x0d, - 0x70, 0xc4, 0x11, 0xdc, 0x18, 0xef, 0x8c, 0xa4, 0xd5, 0xfe, 0x3a, 0x76, - 0x9a, 0x98, 0xbf, 0x7c, 0x5f, 0x6d, 0xaf, 0x34, 0x9a, 0x19, 0x8d, 0x46, - 0xa3, 0x91, 0x34, 0xd2, 0x3e, 0x7d, 0xf0, 0xcd, 0xbb, 0xe7, 0xef, 0x7f, - 0xf3, 0xed, 0x91, 0x35, 0x8d, 0x66, 0xee, 0xc1, 0x77, 0xbf, 0xf3, 0x54, - 0x7d, 0x5b, 0xf8, 0x7b, 0x3a, 0x15, 0xf6, 0x48, 0xfd, 0xe6, 0xe7, 0xc8, - 0x89, 0x5c, 0x71, 0xf0, 0x66, 0xf8, 0xda, 0x99, 0x4c, 0x23, 0xc7, 0x9b, - 0x3c, 0xdd, 0xe2, 0x94, 0x24, 0xc8, 0x4c, 0x44, 0xb6, 0x35, 0x9c, 0xda, - 0x41, 0x28, 0xa2, 0x7e, 0xe5, 0x97, 0xef, 0x5f, 0x34, 0xf6, 0x2a, 0xb9, - 0x7c, 0xcf, 0x9e, 0x89, 0x7e, 0xe5, 0xb3, 0x23, 0xce, 0xe7, 0x7e, 0x10, - 0x55, 0xac, 0xa1, 0xef, 0x45, 0xc2, 0x03, 0xfc, 0xb9, 0x33, 0x8a, 0xa6, - 0xfd, 0x91, 0xf8, 0xec, 0x0c, 0x45, 0x83, 0x1f, 0xea, 0x96, 0xe3, 0x39, - 0x91, 0x63, 0xbb, 0x8d, 0x70, 0x68, 0xbb, 0xa2, 0xdf, 0x6e, 0xb6, 0xca, - 0xf0, 0xcd, 0xfc, 0x81, 0xe3, 0xa2, 0x98, 0x18, 0x34, 0xec, 0xf9, 0xbc, - 0x31, 0xb4, 0xe7, 0xf6, 0xc0, 0x15, 0x09, 0xec, 0x97, 0x22, 0x4c, 0x95, - 0x75, 0x1d, 0xef, 0xcc, 0x0a, 0x84, 0xdb, 0xaf, 0x84, 0x53, 0xf0, 0x31, - 0x5c, 0x44, 0x96, 0x03, 0xe0, 0x8a, 0x35, 0x0d, 0xc4, 0xb8, 0x5f, 0x99, - 0x46, 0xd1, 0x3c, 0xec, 0x6d, 0x6d, 0x0d, 0x47, 0x5e, 0x33, 0xb0, 0xcf, - 0x27, 0x4e, 0xd4, 0x1c, 0xfa, 0xb3, 0xad, 0xc8, 0x1f, 0xb8, 0x8b, 0xd9, - 0x96, 0x91, 0xc2, 0x2f, 0x5f, 0x6d, 0xb5, 0xbb, 0xdb, 0xbb, 0xa2, 0xdb, - 0xdd, 0xde, 0x9a, 0xd9, 0x91, 0x08, 0xc0, 0x6d, 0x22, 0xfb, 0xb5, 0x3f, - 0xf1, 0xb7, 0xc6, 0xf6, 0x67, 0x42, 0xdd, 0xc4, 0x47, 0xc5, 0x8a, 0x2e, - 0xe7, 0x60, 0xd7, 0x99, 0xd9, 0x13, 0xb1, 0x75, 0xd1, 0x90, 0x24, 0xb7, - 0x8a, 0x19, 0x43, 0x45, 0x50, 0xa5, 0xc8, 0x5f, 0x0c, 0xa7, 0x8d, 0xfb, - 0xe2, 0x2d, 0x4b, 0xa3, 0x39, 0xf7, 0x26, 0x65, 0x72, 0x8a, 0x2e, 0x5d, - 0x11, 0x4e, 0x85, 0x88, 0xb2, 0x8c, 0x8c, 0x21, 0xe4, 0xb0, 0x39, 0xf1, - 0xfd, 0x89, 0x2b, 0xec, 0xb9, 0x13, 0x32, 0x3b, 0xc3, 0x30, 0xfc, 0xf1, - 0xd8, 0x9e, 0x39, 0xee, 0x65, 0xff, 0x8d, 0x22, 0xfe, 0xc3, 0x57, 0xa0, - 0x90, 0x6e, 0x06, 0x46, 0x8a, 0x84, 0x1f, 0x58, 0x57, 0x94, 0x3a, 0xb0, - 0x87, 0x67, 0x93, 0xc0, 0x5f, 0x78, 0xa3, 0x46, 0x20, 0xe6, 0xc2, 0x8e, - 0x7a, 0x96, 0xe7, 0xab, 0x9f, 0xfb, 0x04, 0x30, 0xb7, 0x47, 0x23, 0xf0, - 0xde, 0xb3, 0x5a, 0xfc, 0x38, 0xb3, 0x83, 0x89, 0xe3, 0xc9, 0xa7, 0x6b, - 0x60, 0xa9, 0x5b, 0x3d, 0x7b, 0x0c, 0x62, 0xf8, 0x1e, 0x88, 0xb1, 0x1f, - 0x08, 0x46, 0x8b, 0x3f, 0xd2, 0x8c, 0x33, 0x27, 0x6a, 0x0c, 0xfc, 0x8b, - 0x46, 0xe8, 0x7c, 0x61, 0x14, 0x8e, 0x37, 0x05, 0x5b, 0x8c, 0x17, 0x7f, - 0x05, 0x39, 0x12, 0x29, 0x75, 0x0a, 0x8d, 0x86, 0x6a, 0x4a, 0x50, 0xa2, - 0xb7, 0xdb, 0x69, 0xee, 0x7c, 0x9f, 0xf3, 0x07, 0xfe, 0xe8, 0x32, 0x9f, - 0xdf, 0x6e, 0xee, 0x88, 0x99, 0x42, 0x0d, 0x19, 0x8a, 0xc6, 0x54, 0x90, - 0xdc, 0x91, 0xbe, 0xbb, 0x9f, 0x80, 0x3d, 0x97, 0xa9, 0xdb, 0xad, 0x56, - 0x32, 0x55, 0xca, 0xad, 0x57, 0x39, 0x86, 0xd6, 0x9f, 0xdb, 0x97, 0x95, - 0x7a, 0xe5, 0xa7, 0xc2, 0xfd, 0x2c, 0x22, 0x67, 0x68, 0xbf, 0x15, 0x0b, - 0x91, 0x7c, 0xb6, 0x64, 0x42, 0xfc, 0x5c, 0x3f, 0x24, 0x49, 0xd7, 0x43, - 0xdb, 0x0b, 0x1b, 0x21, 0x2a, 0x31, 0x56, 0x78, 0x87, 0xbe, 0xeb, 0x07, - 0xbd, 0x87, 0x9d, 0x4e, 0x47, 0x32, 0xbd, 0x88, 0x22, 0xdf, 0xab, 0x5b, - 0x1f, 0xa5, 0x3e, 0xca, 0xc7, 0xca, 0xa7, 0x38, 0x21, 0x10, 0xe8, 0xc3, - 0x89, 0xe7, 0x70, 0x31, 0x98, 0x39, 0x32, 0x21, 0xf0, 0xdd, 0x44, 0x09, - 0x59, 0xf3, 0xe1, 0x22, 0x08, 0x81, 0xde, 0x9a, 0xfb, 0x8e, 0x07, 0xf1, - 0xef, 0xa7, 0x68, 0x38, 0xde, 0x7c, 0x11, 0xd5, 0x2d, 0x7f, 0x1e, 0x51, - 0xd3, 0xce, 0xeb, 0x56, 0x28, 0x5c, 0x31, 0x44, 0x4a, 0x24, 0x2e, 0x22, - 0x3b, 0x10, 0x36, 0xe1, 0x90, 0x35, 0x37, 0xa2, 0xb7, 0xb6, 0x7e, 0x60, - 0x9d, 0xcc, 0xc5, 0xd0, 0x19, 0x5f, 0x72, 0x8e, 0xce, 0xb0, 0xbd, 0xa1, - 0xb0, 0xfc, 0x31, 0xd2, 0x82, 0x99, 0x05, 0x3c, 0x33, 0x01, 0xdd, 0xb3, - 0x7e, 0xb0, 0x95, 0xa0, 0x28, 0xd1, 0xf9, 0x9f, 0x45, 0x30, 0x76, 0xfd, - 0xf3, 0x9e, 0xf5, 0xd9, 0x09, 0x1d, 0x18, 0x03, 0x46, 0x79, 0x38, 0x1a, - 0xa1, 0x6a, 0xa1, 0xf5, 0x7b, 0x9d, 0xfd, 0x7b, 0x0b, 0x15, 0xb5, 0x22, - 0xdf, 0xfa, 0xfd, 0xd4, 0x19, 0x8d, 0x84, 0xf7, 0x7b, 0x10, 0xb2, 0x5e, - 0x1d, 0x59, 0x7b, 0x5b, 0x4f, 0xb6, 0xda, 0xad, 0xad, 0x76, 0x3b, 0x8d, - 0xbb, 0xd7, 0x6b, 0xcc, 0xfc, 0x2f, 0x8d, 0xb1, 0x3f, 0x5c, 0x84, 0x0d, - 0xc7, 0xf3, 0x44, 0x90, 0x93, 0x61, 0x1e, 0x24, 0x2b, 0xd5, 0x3c, 0x44, - 0x4e, 0xce, 0x79, 0x10, 0xd5, 0x41, 0xfc, 0x60, 0x24, 0x82, 0x06, 0x77, - 0x9b, 0x9e, 0x95, 0xef, 0x12, 0x86, 0x51, 0x53, 0x3e, 0x40, 0xee, 0x66, - 0xb9, 0xf4, 0x17, 0x11, 0xe9, 0x3c, 0xb1, 0x64, 0x98, 0xce, 0x30, 0x58, - 0xe7, 0x51, 0x67, 0x6d, 0x05, 0x24, 0x02, 0xa6, 0x3b, 0xdb, 0x73, 0x58, - 0x86, 0x00, 0x3a, 0x01, 0x5a, 0x12, 0x05, 0xb7, 0xf2, 0x73, 0x3f, 0x08, - 0xc4, 0x10, 0xcd, 0x3a, 0x15, 0x68, 0x4e, 0x1b, 0x43, 0x83, 0x13, 0x5d, - 0x52, 0x23, 0xb3, 0xdc, 0xac, 0xa1, 0xeb, 0x0c, 0xcf, 0x68, 0x7c, 0x60, - 0x6b, 0x1c, 0x52, 0x8b, 0x3b, 0xef, 0x4e, 0xd2, 0x0d, 0xad, 0xb5, 0x94, - 0xe9, 0xb1, 0xa6, 0x36, 0x22, 0x10, 0x0a, 0x49, 0xef, 0xc8, 0x28, 0x79, - 0x52, 0x9f, 0x5e, 0x38, 0x01, 0xec, 0xcc, 0x85, 0xb5, 0xdd, 0xfa, 0x61, - 0xdd, 0x7a, 0x45, 0xba, 0xef, 0x41, 0x9d, 0x8e, 0x2e, 0xe6, 0xe8, 0x6d, - 0x90, 0x46, 0xbb, 0xdd, 0x00, 0xda, 0x7c, 0x6f, 0xc8, 0xf7, 0x81, 0x9c, - 0xfd, 0x93, 0x1d, 0xd6, 0x62, 0xa2, 0x73, 0x40, 0x78, 0xd1, 0x7e, 0x56, - 0x01, 0x24, 0x1f, 0x9c, 0xcc, 0xd0, 0x19, 0xc3, 0xd5, 0x1b, 0x39, 0x21, - 0xd5, 0x72, 0x54, 0xff, 0xee, 0x77, 0x3e, 0xea, 0xdf, 0x9f, 0x64, 0x03, - 0xcd, 0xed, 0x21, 0x44, 0x82, 0x26, 0x69, 0x6e, 0x4b, 0xe0, 0xe6, 0x20, - 0xf2, 0x4e, 0x4f, 0xe5, 0x70, 0xa9, 0x2a, 0x6d, 0xbb, 0xce, 0xc4, 0x6b, - 0x38, 0x91, 0x98, 0x85, 0x3d, 0x6b, 0x28, 0xa8, 0x72, 0x49, 0x16, 0x02, - 0x7b, 0xe4, 0x2c, 0xc2, 0x98, 0xa6, 0x61, 0x23, 0x9d, 0x04, 0xc2, 0x73, - 0xd7, 0x06, 0xa9, 0xb1, 0x2b, 0x2e, 0x28, 0x85, 0x7f, 0xf4, 0xac, 0xb6, - 0xd5, 0xb2, 0xec, 0x45, 0xe4, 0x73, 0xd2, 0x1f, 0x16, 0x61, 0x84, 0x9e, - 0xde, 0x50, 0xf4, 0x0d, 0x39, 0x63, 0xe3, 0x93, 0xe0, 0x73, 0x3f, 0x84, - 0x5f, 0x00, 0x25, 0xa7, 0x91, 0xc9, 0x8e, 0x9c, 0xcf, 0x2c, 0x04, 0x96, - 0x95, 0xcc, 0xa0, 0x8a, 0x75, 0x43, 0x98, 0xa5, 0x81, 0x33, 0x6c, 0x0c, - 0xc4, 0x17, 0x47, 0x04, 0xd5, 0x56, 0xb3, 0xb3, 0x53, 0x47, 0xfa, 0x1e, - 0x7d, 0xe0, 0x57, 0xbb, 0xc6, 0x85, 0xce, 0xa7, 0xa8, 0x61, 0x23, 0x84, - 0x40, 0x58, 0x9e, 0xe7, 0x81, 0x3d, 0xe7, 0x74, 0xf6, 0x40, 0xe2, 0xaa, - 0x18, 0x21, 0xad, 0x25, 0x9b, 0xdd, 0xf9, 0x45, 0x52, 0x08, 0x84, 0x8e, - 0x07, 0x03, 0x29, 0x0b, 0x43, 0xa5, 0xd3, 0x6e, 0x29, 0x48, 0x35, 0x4c, - 0x58, 0x5d, 0x2a, 0x6a, 0xa4, 0xd5, 0x32, 0xd5, 0x4f, 0x8e, 0x32, 0x56, - 0x7b, 0x9b, 0xc1, 0xd2, 0xa3, 0x89, 0xb5, 0xd3, 0x6a, 0xad, 0x2c, 0x56, - 0xd0, 0xb1, 0xf6, 0x14, 0x12, 0x63, 0x4a, 0xac, 0xb6, 0xa6, 0x3f, 0x73, - 0xbc, 0x86, 0xe2, 0x72, 0x8f, 0xe0, 0x32, 0xfd, 0x3b, 0xee, 0x1d, 0x23, - 0x31, 0xf4, 0x03, 0x9b, 0x84, 0xcf, 0x6a, 0x79, 0xbb, 0x16, 0xa9, 0x4b, - 0x0d, 0xb2, 0xda, 0xb3, 0x70, 0x59, 0x43, 0xc3, 0x76, 0xd3, 0x58, 0xe7, - 0x36, 0xa8, 0x19, 0x90, 0x39, 0x83, 0xe9, 0x86, 0x81, 0x4f, 0x5a, 0x86, - 0x45, 0x88, 0x66, 0x90, 0x9d, 0xcc, 0xf0, 0x43, 0x7f, 0x64, 0xb1, 0x8a, - 0x73, 0x55, 0x76, 0x58, 0x9c, 0x1b, 0xff, 0xe5, 0x72, 0x8d, 0x6e, 0x34, - 0x1a, 0x03, 0xd7, 0x1f, 0x9e, 0x49, 0x15, 0x31, 0xad, 0x9e, 0xf4, 0x3e, - 0xf6, 0xd3, 0x59, 0x4c, 0x8f, 0x9a, 0x58, 0x67, 0x65, 0x3b, 0x4c, 0xde, - 0x7d, 0x51, 0xdd, 0x47, 0xe6, 0xc4, 0xe5, 0x4d, 0x4a, 0xf2, 0x29, 0x6e, - 0x66, 0xa3, 0x3c, 0xb1, 0xce, 0xed, 0xb5, 0xbe, 0x9f, 0xf2, 0x0d, 0xac, - 0x87, 0x2f, 0x5e, 0xbc, 0x50, 0x29, 0x79, 0x3b, 0xf4, 0xc0, 0x99, 0x91, - 0xbf, 0x6e, 0x2b, 0x33, 0x14, 0x6b, 0xba, 0x2e, 0xbb, 0x3d, 0xb4, 0xc7, - 0x3b, 0x2d, 0x03, 0x65, 0x84, 0xd2, 0x5c, 0xc0, 0x48, 0x07, 0x43, 0x3b, - 0x64, 0x67, 0xcc, 0xa8, 0xfc, 0xae, 0x54, 0xf9, 0xbc, 0x71, 0xd5, 0xf0, - 0x69, 0xc1, 0xfa, 0x30, 0x9f, 0x33, 0x2d, 0x59, 0xf9, 0x64, 0x7a, 0x09, - 0xfe, 0x02, 0x56, 0x7d, 0xa3, 0xb7, 0x49, 0xe5, 0xb1, 0x07, 0xa1, 0xef, - 0x2e, 0x22, 0x91, 0x92, 0x89, 0xd6, 0xde, 0x84, 0x8a, 0x9b, 0xa4, 0xa9, - 0xee, 0x49, 0x06, 0x9d, 0x84, 0x30, 0x29, 0x39, 0x67, 0x34, 0xd7, 0xfb, - 0x77, 0x62, 0x09, 0x7f, 0xc1, 0xe8, 0x38, 0xa2, 0x66, 0xd9, 0xce, 0x88, - 0x7c, 0x3c, 0x1e, 0x97, 0x8a, 0xfc, 0xa1, 0x78, 0xd2, 0x16, 0xbb, 0xdd, - 0xe5, 0x92, 0xcf, 0x43, 0xc5, 0xec, 0xba, 0x6e, 0x03, 0x93, 0x31, 0x6f, - 0x22, 0x7a, 0xd2, 0xb9, 0x9d, 0xda, 0x23, 0xff, 0x5c, 0xe5, 0x9a, 0x04, - 0xea, 0xec, 0x5d, 0xd8, 0x80, 0x1d, 0xfc, 0x6b, 0xb4, 0xf1, 0x11, 0x4c, - 0x06, 0x76, 0xb5, 0x55, 0xa7, 0xff, 0x9a, 0x9d, 0x1a, 0xba, 0x26, 0x9b, - 0x08, 0x32, 0x50, 0xf8, 0x99, 0xcc, 0x6c, 0x6f, 0x73, 0x6e, 0x9b, 0x72, - 0xf7, 0xf2, 0xb9, 0x9d, 0x9a, 0x6c, 0x3f, 0x9a, 0xf7, 0x94, 0x5b, 0xcd, - 0x65, 0xe6, 0xd1, 0xe8, 0xbd, 0xf4, 0x8a, 0x31, 0x09, 0x58, 0x04, 0x02, - 0x7d, 0x2f, 0xa2, 0xf9, 0x0b, 0x50, 0x3c, 0x06, 0x3e, 0xfb, 0x71, 0xaa, - 0x77, 0xde, 0x0c, 0x99, 0xb0, 0x9e, 0x1d, 0x58, 0xcf, 0x1b, 0x0d, 0x65, - 0xd2, 0x7b, 0xb7, 0xda, 0xb7, 0x32, 0x6b, 0x45, 0x46, 0x8b, 0xd5, 0x5e, - 0xa9, 0x75, 0x42, 0x50, 0xfc, 0xd1, 0x68, 0xd0, 0xb4, 0x6b, 0x89, 0x6b, - 0xdd, 0xd4, 0xf3, 0x39, 0x9e, 0xb4, 0x85, 0xcd, 0xd9, 0x08, 0x25, 0xc0, - 0x20, 0x15, 0xd1, 0xca, 0x25, 0x5b, 0xa3, 0xb3, 0x03, 0x0e, 0xd4, 0x07, - 0xf3, 0x52, 0x8a, 0x60, 0x64, 0x07, 0x67, 0xf9, 0xf2, 0xad, 0xba, 0x45, - 0xff, 0x73, 0x7d, 0x54, 0x59, 0xb8, 0x3d, 0xef, 0xe1, 0x58, 0xbd, 0xf1, - 0x47, 0xb6, 0x6b, 0x55, 0x8d, 0xde, 0xd6, 0xd8, 0xd5, 0x79, 0x38, 0xe3, - 0xf4, 0xab, 0xb4, 0xf9, 0x1e, 0x3b, 0x17, 0x62, 0x84, 0xe2, 0x89, 0xae, - 0xd0, 0x4e, 0x0e, 0x39, 0x98, 0x82, 0xce, 0x91, 0xb4, 0x03, 0x2d, 0x63, - 0xbf, 0xea, 0xb5, 0x3f, 0xe4, 0xb1, 0x04, 0xae, 0x3e, 0x79, 0x71, 0xa4, - 0xaf, 0xc0, 0xce, 0xcd, 0x21, 0xc6, 0x91, 0xee, 0x71, 0x5c, 0xa8, 0x95, - 0x1c, 0x48, 0xdb, 0x2d, 0xd5, 0xe7, 0x64, 0x83, 0xc5, 0x09, 0x66, 0x3e, - 0x10, 0x9b, 0xc2, 0x54, 0x97, 0x33, 0x55, 0x96, 0xfa, 0x5b, 0x93, 0xde, - 0x9d, 0xed, 0xba, 0x04, 0x24, 0x25, 0x22, 0x19, 0xc8, 0x97, 0x4a, 0xaa, - 0x3d, 0xfc, 0x29, 0x59, 0xf4, 0x99, 0x4b, 0xe5, 0xce, 0xb7, 0xb4, 0xab, - 0xa5, 0xdd, 0xc0, 0x26, 0x8b, 0x47, 0x2b, 0x9a, 0xf1, 0x2e, 0x95, 0x56, - 0x18, 0xc5, 0x2b, 0xb4, 0x08, 0x63, 0x41, 0xff, 0x21, 0x37, 0x6f, 0xd8, - 0x8d, 0x35, 0x22, 0x21, 0x66, 0x35, 0x7d, 0xbb, 0xd0, 0x4f, 0xd8, 0x6d, - 0xa5, 0x1c, 0x74, 0xee, 0xca, 0xb0, 0x94, 0xce, 0xc8, 0x7a, 0xb8, 0xb7, - 0xb7, 0xc7, 0x59, 0x66, 0xb0, 0x90, 0x8d, 0x8f, 0x1a, 0x10, 0xef, 0xb6, - 0xa3, 0x9c, 0x7d, 0xe3, 0xce, 0xb5, 0x59, 0xd6, 0x4b, 0x79, 0x53, 0x3d, - 0x4e, 0x0a, 0x02, 0x1d, 0xde, 0x5f, 0x40, 0x02, 0xcb, 0x9d, 0xc4, 0x36, - 0x23, 0x89, 0x93, 0x1a, 0xe4, 0x9f, 0x25, 0xfc, 0xb4, 0x9c, 0xf1, 0x36, - 0x98, 0x9b, 0x81, 0x7f, 0x6e, 0x38, 0x6c, 0x8c, 0x1c, 0x4c, 0x09, 0xa4, - 0x32, 0x22, 0x23, 0x07, 0xd9, 0x0c, 0x04, 0x14, 0x24, 0x14, 0xa5, 0x25, - 0x1a, 0x0a, 0x20, 0x5d, 0x12, 0x0d, 0xb3, 0x98, 0x79, 0xc5, 0x85, 0x64, - 0x5e, 0x11, 0xbc, 0x26, 0xb6, 0xac, 0xdc, 0x52, 0x7a, 0x07, 0x56, 0x93, - 0x4a, 0xc9, 0xf2, 0x33, 0xfb, 0xa2, 0x91, 0x50, 0xff, 0x74, 0x01, 0x92, - 0x13, 0xc0, 0xd2, 0xe2, 0xa3, 0x4f, 0x05, 0x06, 0x3f, 0xe6, 0x33, 0xf7, - 0xb4, 0x46, 0x97, 0xc0, 0x32, 0x23, 0x03, 0xf4, 0xa1, 0xab, 0xfe, 0x35, - 0x3a, 0xe9, 0xb1, 0xa1, 0x25, 0x07, 0x07, 0x95, 0xbb, 0x8d, 0x7f, 0xad, - 0x2c, 0x40, 0x7b, 0x5b, 0x42, 0xb0, 0x5e, 0xed, 0x15, 0x42, 0x74, 0x6a, - 0x09, 0xcf, 0xa2, 0x4c, 0x17, 0x77, 0x77, 0x77, 0x73, 0xdc, 0xee, 0x16, - 0x73, 0x6b, 0x46, 0xb2, 0x12, 0x6e, 0xd5, 0x60, 0x76, 0x23, 0xbb, 0xed, - 0xd5, 0xf8, 0x4d, 0x33, 0xf5, 0xa4, 0x98, 0xa9, 0x1d, 0x45, 0xb6, 0xd1, - 0xcd, 0xe2, 0xfb, 0x91, 0xa2, 0xf8, 0x84, 0x28, 0x92, 0x80, 0x73, 0x6c, - 0xef, 0x24, 0x84, 0xdc, 0x26, 0x24, 0xb9, 0x66, 0xe8, 0x96, 0x8a, 0xb0, - 0xbb, 0x5c, 0x84, 0xed, 0x4e, 0x31, 0xbb, 0x3f, 0x52, 0xad, 0xd5, 0xd8, - 0x2e, 0x94, 0x61, 0xcc, 0x2a, 0xc1, 0x75, 0x4a, 0x85, 0xb8, 0x43, 0xb9, - 0x94, 0xbd, 0xbd, 0xa6, 0x10, 0xdb, 0x3b, 0xc5, 0x6c, 0xed, 0x29, 0x39, - 0x35, 0x76, 0x4a, 0xd9, 0x92, 0x34, 0x97, 0xb2, 0xc5, 0x22, 0x24, 0x54, - 0x3b, 0x2b, 0xb1, 0x45, 0x9d, 0xa6, 0x4e, 0x36, 0x6f, 0xea, 0xb8, 0x23, - 0xf6, 0x4b, 0xd0, 0xf7, 0x68, 0xb1, 0x32, 0x6f, 0xa2, 0x4a, 0xbb, 0xe2, - 0xc3, 0xc8, 0xf7, 0x31, 0x8c, 0x48, 0x73, 0x69, 0x7c, 0x07, 0x33, 0x4f, - 0xca, 0xd7, 0x95, 0xe5, 0x56, 0xae, 0xc6, 0x2a, 0x77, 0xe7, 0x66, 0x2d, - 0x6e, 0x95, 0x68, 0xf1, 0xb2, 0xd9, 0x55, 0xba, 0x02, 0x69, 0x4f, 0x32, - 0x1e, 0xaf, 0x69, 0x18, 0xae, 0xc7, 0x4f, 0xe4, 0x7c, 0x6b, 0x91, 0xa9, - 0xda, 0xae, 0xb8, 0x98, 0x90, 0xb7, 0xfc, 0xc6, 0xab, 0xe6, 0xd1, 0x22, - 0x8b, 0x95, 0x77, 0x1d, 0x80, 0x33, 0xe3, 0xc9, 0xb5, 0x96, 0xcd, 0x83, - 0x5d, 0x11, 0x81, 0x1e, 0x4f, 0xf2, 0x25, 0xe6, 0x66, 0xab, 0x23, 0x66, - 0x4b, 0xa7, 0xff, 0xc6, 0x5d, 0x90, 0xeb, 0x82, 0x66, 0xa6, 0x62, 0x72, - 0x84, 0xeb, 0x3a, 0xf3, 0xd0, 0x09, 0x0b, 0x59, 0xec, 0x79, 0x7e, 0x54, - 0xed, 0x8d, 0x9d, 0x20, 0x8c, 0x1a, 0xac, 0x3d, 0x35, 0xeb, 0xca, 0x8c, - 0x8d, 0x2c, 0x3f, 0xc9, 0xb6, 0x52, 0x92, 0xb1, 0xef, 0x83, 0xc7, 0x82, - 0xf5, 0xea, 0xbc, 0x67, 0x60, 0xa6, 0x7d, 0x45, 0x99, 0xc5, 0xb2, 0xbe, - 0xeb, 0x19, 0x69, 0xac, 0x3b, 0x29, 0xd5, 0x31, 0xad, 0xc7, 0xc6, 0xca, - 0x74, 0xa7, 0xd2, 0x79, 0x6c, 0x62, 0xca, 0x68, 0xaa, 0xa6, 0xf3, 0x54, - 0xd7, 0xca, 0x81, 0x94, 0x66, 0x9b, 0xf9, 0x5c, 0x6e, 0x1d, 0xc5, 0x10, - 0x4f, 0xf6, 0xc0, 0x66, 0x27, 0xe3, 0xbc, 0x37, 0xb7, 0x79, 0xde, 0x53, - 0x6f, 0xd7, 0x54, 0xa9, 0xd5, 0xa1, 0xd9, 0x3b, 0xfa, 0xc9, 0x4c, 0x8c, - 0x1c, 0xdb, 0xf2, 0x3d, 0xf7, 0xd2, 0x0a, 0x87, 0x81, 0x10, 0x9e, 0x65, - 0x7b, 0x23, 0xab, 0x9a, 0x70, 0x53, 0x9e, 0xd0, 0xcc, 0x57, 0x69, 0x43, - 0xd6, 0x99, 0x4a, 0x99, 0x90, 0x27, 0x2d, 0xad, 0xd5, 0xd7, 0xc0, 0xbe, - 0x12, 0xee, 0x76, 0x67, 0x77, 0x7b, 0x35, 0xe4, 0xed, 0xf6, 0xde, 0xce, - 0xda, 0xd8, 0x9f, 0xb4, 0x56, 0xc5, 0xfe, 0xa3, 0x55, 0xb1, 0x27, 0xaa, - 0xbb, 0xf3, 0xa4, 0x18, 0x79, 0x5e, 0xb1, 0xf2, 0x88, 0xe1, 0xa9, 0xe7, - 0xd8, 0x6d, 0x69, 0x64, 0xa4, 0x2f, 0xcd, 0x8b, 0xb0, 0x2d, 0x1f, 0x95, - 0x2b, 0x34, 0xb0, 0xd1, 0x75, 0xe1, 0xd9, 0x36, 0xbb, 0xa9, 0xbf, 0xce, - 0xf7, 0xf7, 0x13, 0x40, 0x93, 0x80, 0x4d, 0xf2, 0x7e, 0xa6, 0x82, 0xa5, - 0xc5, 0xae, 0x93, 0xf4, 0x3a, 0x79, 0x7a, 0xc4, 0x7e, 0x73, 0x37, 0xf5, - 0xb7, 0xbd, 0x1a, 0xc1, 0x7c, 0xb9, 0x02, 0x8a, 0xdd, 0x22, 0x8a, 0x9d, - 0x9d, 0xd5, 0x28, 0x00, 0x2e, 0x8f, 0x71, 0xbb, 0x08, 0x63, 0xb7, 0x9b, - 0xa9, 0xfd, 0x6a, 0x04, 0xf2, 0xc5, 0xf2, 0xf4, 0x76, 0x8a, 0xe8, 0x6d, - 0xb7, 0xd3, 0x75, 0xff, 0xd1, 0x6a, 0xf4, 0xf2, 0xc5, 0xf2, 0xf4, 0x76, - 0x8b, 0xe8, 0xed, 0xb4, 0x56, 0x23, 0x00, 0xb8, 0x3c, 0xc6, 0x1f, 0x15, - 0x62, 0xcc, 0xea, 0xcb, 0xee, 0x8a, 0x14, 0xf2, 0xe5, 0xf2, 0x14, 0xf7, - 0x8a, 0x28, 0xee, 0x66, 0xf4, 0x65, 0x45, 0x82, 0xf9, 0x62, 0x79, 0x7a, - 0x4f, 0x8a, 0xe8, 0xfd, 0x68, 0x45, 0x2d, 0xfb, 0x51, 0x91, 0x96, 0xb5, - 0x5b, 0x85, 0x5d, 0x33, 0xa3, 0x2f, 0x2b, 0xf6, 0x94, 0x5c, 0xb1, 0x22, - 0x82, 0x85, 0xb6, 0xe0, 0x49, 0xfb, 0x56, 0x32, 0x7b, 0xd2, 0xbe, 0x59, - 0x66, 0xed, 0x62, 0x63, 0xd0, 0x5a, 0x51, 0xd3, 0x08, 0x70, 0x35, 0xa3, - 0xb7, 0x4b, 0x83, 0x46, 0xca, 0xf0, 0x85, 0xb3, 0xcd, 0x1a, 0xbe, 0x70, - 0xb6, 0x69, 0xc3, 0x17, 0xce, 0xee, 0xda, 0xf0, 0x85, 0xb3, 0xcd, 0x1a, - 0xbe, 0x70, 0xb6, 0x59, 0xc3, 0x17, 0xce, 0xee, 0xda, 0xf0, 0x85, 0xb3, - 0x4d, 0x1b, 0xbe, 0x70, 0xb6, 0x59, 0xc3, 0x17, 0xce, 0xee, 0xda, 0xf0, - 0x85, 0xb3, 0x0d, 0x1b, 0xbe, 0x70, 0xb6, 0x61, 0xc3, 0x17, 0xce, 0x36, - 0x66, 0xf8, 0xb4, 0x5b, 0x6d, 0x88, 0xcf, 0x46, 0x9b, 0x35, 0x7c, 0xb3, - 0xd1, 0xa6, 0x0d, 0xdf, 0x6c, 0x74, 0xd7, 0x86, 0x6f, 0x36, 0xda, 0xac, - 0xe1, 0x9b, 0x8d, 0x36, 0x6b, 0xf8, 0x66, 0xa3, 0xbb, 0x36, 0x7c, 0xb3, - 0xd1, 0xa6, 0x0d, 0xdf, 0x6c, 0xb4, 0x59, 0xc3, 0x37, 0x1b, 0xdd, 0xb5, - 0xe1, 0x9b, 0x8d, 0x36, 0x6c, 0xf8, 0x66, 0xa3, 0x0d, 0x1b, 0xbe, 0xd9, - 0x68, 0x63, 0x86, 0x2f, 0x9e, 0xf3, 0x1b, 0xea, 0xee, 0x64, 0xb3, 0x96, - 0xcf, 0x9d, 0x6c, 0xda, 0xf2, 0xb9, 0x93, 0xbb, 0xb6, 0x7c, 0xee, 0x64, - 0xb3, 0x96, 0xcf, 0x9d, 0x6c, 0xd6, 0xf2, 0xb9, 0x93, 0xbb, 0xb6, 0x7c, - 0xee, 0x64, 0xd3, 0x96, 0xcf, 0x9d, 0x6c, 0xd6, 0xf2, 0xb9, 0x93, 0xbb, - 0xb6, 0x7c, 0xee, 0x64, 0xc3, 0x96, 0xcf, 0x9d, 0x6c, 0xd8, 0xf2, 0xb9, - 0x93, 0xcd, 0x59, 0xbe, 0x78, 0x3d, 0xd2, 0xcc, 0xb4, 0xdd, 0xcd, 0x5a, - 0xbe, 0x0b, 0x77, 0xd3, 0x96, 0xef, 0xc2, 0xbd, 0x6b, 0xcb, 0x77, 0xe1, - 0x6e, 0xd6, 0xf2, 0x5d, 0xb8, 0x9b, 0xb5, 0x7c, 0x17, 0xee, 0x5d, 0x5b, - 0xbe, 0x0b, 0x77, 0xd3, 0x96, 0xef, 0xc2, 0xdd, 0xac, 0xe5, 0xbb, 0x70, - 0xef, 0xda, 0xf2, 0x5d, 0xb8, 0x1b, 0xb6, 0x7c, 0x17, 0xee, 0x86, 0x2d, - 0xdf, 0x85, 0x7b, 0x2f, 0x96, 0x6f, 0xd9, 0x9e, 0xc9, 0xce, 0x93, 0xc4, - 0x9e, 0x89, 0xdc, 0xa9, 0x6c, 0x5c, 0x84, 0x0d, 0x2a, 0x92, 0x89, 0x42, - 0x95, 0xbb, 0xcd, 0xc9, 0x1d, 0x6e, 0x43, 0xa8, 0x49, 0xfb, 0x9f, 0x72, - 0xab, 0x25, 0xc5, 0x62, 0x3b, 0xb7, 0x21, 0xae, 0x68, 0x14, 0xe2, 0x96, - 0x10, 0x1c, 0xbc, 0x65, 0xd3, 0x56, 0x0d, 0xce, 0x6f, 0xc8, 0x33, 0x01, - 0x3f, 0xd8, 0xa2, 0x1d, 0x74, 0x27, 0x18, 0xe2, 0xa8, 0x11, 0x1d, 0x0f, - 0x8b, 0x4e, 0x4f, 0xe5, 0x93, 0xda, 0x1a, 0xf6, 0x9c, 0x99, 0x0a, 0x1c, - 0x4e, 0x02, 0x35, 0xc6, 0x0e, 0x4c, 0x3e, 0x76, 0xdc, 0x64, 0x20, 0x8c, - 0x8c, 0xb7, 0xa7, 0xe3, 0x18, 0x16, 0x15, 0x4a, 0xc4, 0x8b, 0x06, 0x7e, - 0x84, 0x60, 0xb6, 0x6a, 0xe3, 0x49, 0x6b, 0x24, 0x26, 0x32, 0xfa, 0xaa, - 0x53, 0xb7, 0xba, 0x80, 0x4c, 0x01, 0x36, 0x7c, 0xec, 0x52, 0x3b, 0xf1, - 0x5e, 0x29, 0xc3, 0x6d, 0xcb, 0xb0, 0xac, 0x1c, 0x7b, 0x8e, 0x37, 0xf6, - 0x97, 0x31, 0xa7, 0x4f, 0x1e, 0x10, 0x7b, 0xc0, 0x7d, 0x6e, 0x07, 0xa3, - 0x70, 0x3f, 0x1d, 0x58, 0xbf, 0x9f, 0xe6, 0x52, 0xfe, 0x74, 0xc1, 0xe8, - 0x6f, 0xaa, 0x88, 0xd9, 0x10, 0x33, 0xb5, 0x63, 0xf8, 0x93, 0x33, 0x71, - 0x39, 0x0e, 0x70, 0x86, 0x2d, 0xcc, 0x57, 0x5e, 0x05, 0x0c, 0x80, 0x13, - 0x1c, 0x5c, 0x08, 0xfc, 0x33, 0x81, 0x18, 0xbd, 0x10, 0xb9, 0x81, 0x4d, - 0x04, 0x48, 0x5b, 0xf6, 0xad, 0xeb, 0x1c, 0x96, 0x3c, 0x97, 0x1a, 0x8f, - 0xfc, 0x8e, 0x99, 0xd4, 0x21, 0x78, 0xa5, 0x6c, 0xd6, 0x12, 0x2a, 0x42, - 0xc7, 0x71, 0x3c, 0x04, 0xa4, 0x51, 0x1c, 0xc3, 0x96, 0xf5, 0xde, 0xb7, - 0xc3, 0x48, 0x86, 0xfb, 0x85, 0x9c, 0xaa, 0x88, 0xf0, 0x59, 0x1b, 0x79, - 0xdc, 0x22, 0xb5, 0x71, 0x9e, 0x18, 0xb3, 0x3b, 0x1c, 0x9e, 0x96, 0xdb, - 0x09, 0x47, 0x34, 0x0a, 0x36, 0x0c, 0xcb, 0xe2, 0xde, 0xd0, 0xbf, 0x91, - 0x95, 0x0f, 0x9b, 0x35, 0x91, 0x73, 0xcb, 0xa2, 0xf0, 0x3b, 0x8c, 0x38, - 0xbb, 0x85, 0xb8, 0x62, 0x80, 0x22, 0xb1, 0xc7, 0x63, 0x80, 0x89, 0x38, - 0xec, 0x16, 0x04, 0xd8, 0xb5, 0x7f, 0xa4, 0x76, 0xf2, 0x8d, 0x44, 0x9a, - 0x38, 0x59, 0x78, 0xde, 0x6d, 0xb5, 0x5a, 0x39, 0xd1, 0xc8, 0xdf, 0x99, - 0x88, 0xf5, 0x84, 0xa6, 0x8d, 0xed, 0x91, 0x70, 0x3c, 0x8a, 0x1e, 0x0d, - 0xeb, 0xfc, 0x80, 0x48, 0x2e, 0x7e, 0xb2, 0x3a, 0xf8, 0xe0, 0x52, 0xeb, - 0x40, 0xe7, 0x98, 0xda, 0xb9, 0x5b, 0xa6, 0xb6, 0xd7, 0x62, 0x6a, 0xbb, - 0x84, 0xa9, 0xf6, 0x1d, 0x73, 0xd5, 0x5e, 0x8f, 0x2d, 0x06, 0x57, 0x7d, - 0x52, 0xd3, 0x89, 0x7b, 0x95, 0x2a, 0xa7, 0x0c, 0x64, 0x40, 0x81, 0xe8, - 0x2a, 0xf6, 0x34, 0xd9, 0xe3, 0xaf, 0x75, 0x37, 0x33, 0x5a, 0x92, 0xec, - 0x6b, 0xaa, 0xab, 0xde, 0x0b, 0xd2, 0x1c, 0xc7, 0xba, 0x72, 0x06, 0x7b, - 0x09, 0x06, 0x43, 0x20, 0x4f, 0x5c, 0x63, 0xbf, 0x17, 0xac, 0xb0, 0x28, - 0xc7, 0xd4, 0xc9, 0xc5, 0xc8, 0x0a, 0xcf, 0x9d, 0x68, 0x38, 0xb5, 0x1a, - 0x88, 0xff, 0x0e, 0x23, 0x9c, 0x3b, 0xa6, 0xa8, 0xdf, 0xe1, 0x54, 0x0c, - 0xcf, 0x74, 0xd8, 0x6f, 0x53, 0x41, 0x5c, 0x95, 0x85, 0x2d, 0xe5, 0x83, - 0xc8, 0xe5, 0x51, 0x8c, 0x74, 0xbf, 0x4f, 0x5b, 0x1e, 0xf3, 0xac, 0xbd, - 0xa2, 0xdc, 0x21, 0x1c, 0x15, 0x7f, 0x14, 0x33, 0x20, 0x4f, 0x6f, 0x59, - 0x99, 0x33, 0x54, 0x49, 0x1c, 0xad, 0x14, 0x82, 0x96, 0x2e, 0x8d, 0x20, - 0x3c, 0x39, 0xbe, 0x96, 0x1d, 0x4b, 0xc8, 0xc7, 0x79, 0x9b, 0xf8, 0xe6, - 0x6c, 0xd8, 0x73, 0x60, 0x90, 0x9b, 0xa3, 0x10, 0xad, 0x32, 0xdb, 0x39, - 0x18, 0x0c, 0x90, 0x55, 0x12, 0xfe, 0xb2, 0x2d, 0x7b, 0x48, 0x3e, 0xcd, - 0x70, 0xad, 0x4e, 0xd2, 0x2e, 0x65, 0x3e, 0x8e, 0x9b, 0xaf, 0x54, 0x52, - 0xf5, 0xef, 0xec, 0x26, 0x25, 0xac, 0x9e, 0x4d, 0x75, 0xa4, 0x78, 0x4d, - 0x1d, 0xb6, 0xcb, 0x46, 0x00, 0x19, 0xa6, 0x75, 0xbb, 0x6a, 0x70, 0x93, - 0xf5, 0x58, 0x9d, 0xa0, 0x6a, 0x3f, 0xb4, 0xe2, 0xc6, 0x28, 0xa6, 0x94, - 0x2c, 0xc4, 0x07, 0x1b, 0x4d, 0x91, 0x82, 0xb8, 0x44, 0x79, 0xfe, 0x61, - 0x19, 0x21, 0x23, 0xbf, 0x34, 0xf7, 0xf9, 0x11, 0xf7, 0xd7, 0x55, 0x12, - 0x4f, 0x4d, 0xd6, 0x72, 0x16, 0xde, 0x08, 0xb3, 0x3c, 0xdf, 0x34, 0x60, - 0x93, 0xeb, 0x07, 0xfa, 0xd9, 0x91, 0x51, 0x29, 0x78, 0x1e, 0x36, 0xc5, - 0x72, 0xfe, 0x50, 0x8b, 0x2a, 0x01, 0xd9, 0xa0, 0xd5, 0xd4, 0x51, 0xa8, - 0x25, 0x5d, 0x33, 0x7d, 0xa8, 0xd9, 0xe2, 0x03, 0xca, 0xa9, 0x38, 0xd5, - 0x8e, 0x89, 0x53, 0xb5, 0x6d, 0x7b, 0xd9, 0x39, 0x3a, 0x13, 0xe3, 0x9e, - 0x12, 0xba, 0x3a, 0x23, 0xca, 0x2d, 0xa8, 0x8f, 0x88, 0x2e, 0x45, 0x5f, - 0x4a, 0x20, 0xf6, 0x4a, 0x8c, 0x82, 0x6a, 0x63, 0xc5, 0xd8, 0xb5, 0x95, - 0x91, 0xbe, 0x0f, 0x27, 0x35, 0x54, 0xd2, 0x55, 0x8a, 0xc1, 0x6d, 0xb6, - 0x25, 0x79, 0x75, 0xa1, 0x30, 0x56, 0xe6, 0xa3, 0xa4, 0xa6, 0x6d, 0x15, - 0x11, 0x98, 0xc5, 0xde, 0x53, 0x6d, 0x72, 0x95, 0xea, 0x6e, 0x8f, 0xdf, - 0x20, 0x1a, 0xd1, 0x92, 0x4d, 0x17, 0x92, 0xb9, 0x95, 0x61, 0x9a, 0xd6, - 0x73, 0xe6, 0x15, 0xff, 0xb3, 0x4f, 0x64, 0x79, 0x8b, 0xd9, 0x80, 0x00, - 0x06, 0x22, 0x3a, 0xa7, 0x59, 0x44, 0x0b, 0xa0, 0x74, 0x1e, 0x04, 0xe6, - 0x8c, 0x4e, 0x57, 0xa8, 0x7c, 0xf8, 0x40, 0xc2, 0x1d, 0x85, 0x8f, 0xb3, - 0x9e, 0x56, 0xd2, 0xd9, 0x4a, 0x55, 0x65, 0x9b, 0xaa, 0xd2, 0xe5, 0xbf, - 0x58, 0x4a, 0xae, 0x3d, 0x10, 0xae, 0x3c, 0x90, 0xcd, 0x3f, 0xd3, 0x52, - 0xd9, 0x4b, 0x9b, 0x83, 0xd8, 0x15, 0xcc, 0xfb, 0x71, 0x29, 0x26, 0x0e, - 0x0f, 0x0f, 0x13, 0x76, 0x9b, 0x5b, 0xb4, 0x50, 0x4b, 0xf2, 0x22, 0xa7, - 0x11, 0x45, 0x44, 0xcc, 0x6d, 0xc7, 0x70, 0x9b, 0x53, 0x1d, 0x29, 0x00, - 0x9c, 0x36, 0x96, 0x3c, 0x97, 0x0e, 0x27, 0xba, 0x9a, 0x5a, 0x62, 0x8c, - 0x42, 0x8e, 0x50, 0xba, 0x11, 0xf2, 0x58, 0xaf, 0x56, 0xa8, 0x61, 0xbb, - 0xdd, 0xce, 0x8f, 0x44, 0x46, 0x72, 0x5c, 0xb7, 0xf8, 0x24, 0x56, 0xce, - 0x4a, 0xe6, 0x8e, 0x09, 0x9b, 0x11, 0x8e, 0x43, 0x4c, 0xa9, 0xad, 0xd2, - 0x47, 0x37, 0xe5, 0x8c, 0x6d, 0x49, 0x2f, 0x2c, 0xef, 0x88, 0x59, 0x4b, - 0xab, 0x40, 0xac, 0x16, 0x45, 0x47, 0x0a, 0x3b, 0xcc, 0x45, 0x34, 0x1b, - 0xe9, 0xb7, 0xf8, 0x8f, 0x84, 0xb8, 0x54, 0x60, 0xd2, 0xee, 0x5e, 0x95, - 0x30, 0xb7, 0xd3, 0xda, 0x1b, 0x8e, 0x87, 0x99, 0x6e, 0x19, 0xb0, 0xda, - 0x2b, 0x94, 0xa5, 0x0d, 0xc2, 0x50, 0x9f, 0xae, 0xcc, 0x08, 0x15, 0x6b, - 0x64, 0xbe, 0x1b, 0x96, 0xca, 0x2b, 0x31, 0x57, 0x2f, 0xaf, 0xe9, 0x36, - 0xff, 0xd5, 0xa5, 0xfa, 0x65, 0x93, 0x89, 0xf7, 0x65, 0x0c, 0xd6, 0xf3, - 0x49, 0xbd, 0x9e, 0x1e, 0x39, 0x64, 0xa9, 0x46, 0x34, 0x85, 0xac, 0xb8, - 0x26, 0xf1, 0x19, 0xf8, 0x24, 0x93, 0x1a, 0xba, 0x20, 0xf3, 0xda, 0x62, - 0xb9, 0xa9, 0x21, 0x8d, 0xf1, 0xa4, 0x04, 0xb6, 0x16, 0xf1, 0x78, 0xa0, - 0x6f, 0x65, 0x06, 0xfa, 0xed, 0x22, 0xb9, 0x12, 0xdc, 0xf7, 0x8b, 0xbc, - 0x9d, 0x9c, 0x3e, 0x3f, 0x1c, 0xf2, 0x5f, 0x99, 0x82, 0x0a, 0xfe, 0x2b, - 0x14, 0xff, 0xf6, 0x8a, 0xe2, 0x7f, 0x38, 0x60, 0x37, 0x4a, 0x75, 0xf9, - 0x8f, 0xb0, 0xad, 0x7d, 0x99, 0x62, 0xc6, 0x8f, 0xbc, 0x2f, 0x15, 0x6b, - 0xef, 0xc3, 0x70, 0x2e, 0x30, 0xc8, 0x27, 0x4b, 0x73, 0xca, 0x4a, 0x85, - 0xb7, 0x7e, 0xa0, 0x0c, 0xf4, 0x07, 0xdc, 0xa6, 0xe2, 0x26, 0x86, 0x92, - 0xd3, 0x73, 0x4a, 0x38, 0x1d, 0xda, 0xde, 0x67, 0x3b, 0xd4, 0x98, 0xca, - 0x4e, 0x23, 0xeb, 0xe5, 0x4f, 0x0e, 0x12, 0x36, 0x4b, 0x49, 0xf9, 0x64, - 0x63, 0xca, 0x8c, 0x4b, 0x7c, 0xf3, 0x41, 0xe9, 0xd8, 0x53, 0xb1, 0xe7, - 0x8d, 0x29, 0xe4, 0xc2, 0xe7, 0x0b, 0x1b, 0xc5, 0x47, 0x03, 0xc9, 0xdf, - 0x28, 0x3f, 0x5b, 0xad, 0xd4, 0x3d, 0x59, 0x43, 0x57, 0x4c, 0x84, 0x76, - 0x49, 0x8c, 0xce, 0x74, 0xbf, 0x9f, 0x39, 0x7d, 0xbb, 0xad, 0xcd, 0x4d, - 0x7e, 0x28, 0x58, 0xe6, 0xef, 0x97, 0x44, 0xef, 0xe7, 0xb4, 0x2e, 0x35, - 0xe2, 0xab, 0x13, 0x88, 0xcd, 0x9d, 0x40, 0xcc, 0x8a, 0x5c, 0x81, 0x96, - 0xc9, 0x49, 0xce, 0x28, 0x9a, 0x7b, 0x3a, 0xb5, 0xd4, 0xc6, 0x1b, 0x0d, - 0x5e, 0xe6, 0x7b, 0x5c, 0x27, 0x6e, 0xc5, 0xd9, 0xd2, 0xd7, 0xe2, 0xc8, - 0xa7, 0xc4, 0x55, 0x4c, 0x4f, 0xe9, 0xb6, 0x99, 0x83, 0x04, 0xe8, 0xc8, - 0xf9, 0x6c, 0x39, 0x23, 0x5c, 0xa0, 0x81, 0x05, 0x3b, 0x08, 0xfe, 0x14, - 0x4b, 0x51, 0x1e, 0x38, 0xab, 0xc8, 0xab, 0x2e, 0xfa, 0x15, 0x2d, 0x25, - 0x6a, 0x88, 0x8a, 0x2a, 0x18, 0x17, 0x9e, 0xb6, 0x0f, 0x14, 0x3c, 0x88, - 0xb4, 0xb3, 0xb9, 0xf3, 0x83, 0x37, 0xce, 0x30, 0xf0, 0x43, 0x7f, 0x1c, - 0xbd, 0x3a, 0x7a, 0xba, 0x35, 0x4f, 0x92, 0xdd, 0x02, 0xdd, 0x22, 0x36, - 0xf8, 0x74, 0xa3, 0xa6, 0x93, 0xca, 0x1d, 0xba, 0x76, 0x18, 0x32, 0x80, - 0x39, 0xfe, 0xa8, 0x01, 0x53, 0xc0, 0xe1, 0xe7, 0x89, 0x45, 0xd7, 0x43, - 0xa1, 0x63, 0xf7, 0x2b, 0xe8, 0xba, 0xb4, 0xa1, 0xb0, 0xd7, 0x6d, 0x3d, - 0xd9, 0xdb, 0xdb, 0xed, 0x24, 0x7f, 0x57, 0xa4, 0xde, 0xf4, 0x2b, 0x9d, - 0x56, 0xab, 0xa2, 0x54, 0x46, 0x3d, 0x5c, 0xcc, 0x5c, 0x2f, 0x94, 0xf7, - 0x13, 0xe1, 0x7a, 0xa2, 0xf3, 0xf3, 0xf3, 0xe6, 0x79, 0xb7, 0xe9, 0x07, - 0x93, 0x2d, 0xe4, 0xb6, 0xb6, 0x40, 0x40, 0x13, 0xce, 0x11, 0x97, 0xab, - 0x67, 0x6a, 0xb9, 0xad, 0x5f, 0x79, 0x28, 0xc6, 0xf4, 0x5f, 0x45, 0xaf, - 0xbf, 0x29, 0x8a, 0xa0, 0x4d, 0xeb, 0x73, 0xfd, 0x0a, 0x4b, 0xd5, 0x1a, - 0x82, 0x51, 0x6c, 0xdc, 0x3c, 0x69, 0xef, 0x6c, 0x3f, 0xd9, 0xee, 0xb6, - 0x91, 0x70, 0x99, 0x49, 0x08, 0xf0, 0xbc, 0x93, 0x78, 0xde, 0x5a, 0x4e, - 0x9f, 0x45, 0x49, 0x87, 0xe0, 0x21, 0x23, 0x7b, 0x82, 0x65, 0x3f, 0x22, - 0xa3, 0x25, 0x58, 0xb4, 0x90, 0x5a, 0x31, 0x1c, 0xb7, 0x5a, 0xf6, 0x70, - 0xd8, 0xce, 0x73, 0x9c, 0x5d, 0x42, 0x24, 0x16, 0x5b, 0x75, 0x8c, 0x62, - 0x71, 0x0e, 0xf5, 0x22, 0x5c, 0x9c, 0xd5, 0xaf, 0xb0, 0xd9, 0xba, 0xb7, - 0x2a, 0x4e, 0x74, 0x45, 0xf2, 0x4b, 0xae, 0xba, 0x59, 0x0a, 0xcb, 0x51, - 0xef, 0x4a, 0x0b, 0x06, 0x7c, 0x65, 0xd9, 0xba, 0x64, 0x2e, 0x76, 0x2a, - 0xf2, 0x0c, 0xcc, 0x0c, 0x60, 0xb4, 0x08, 0x2f, 0xa8, 0x6a, 0x20, 0x88, - 0xc7, 0x00, 0xea, 0xa9, 0x3a, 0xaa, 0x37, 0x9c, 0xfa, 0xe0, 0x5a, 0x5e, - 0x1e, 0x51, 0x89, 0x17, 0xf3, 0x00, 0x88, 0x6b, 0xcb, 0xda, 0xad, 0xef, - 0x3f, 0xdd, 0x22, 0xb8, 0x95, 0x58, 0x4a, 0x69, 0x75, 0x21, 0x57, 0x9d, - 0xd6, 0x57, 0x73, 0xd5, 0xa9, 0x1c, 0x2c, 0x65, 0xe9, 0xe9, 0xd6, 0xa4, - 0xa8, 0x3f, 0x91, 0xbe, 0x9b, 0x74, 0xd3, 0x7d, 0x57, 0xe9, 0xce, 0x7a, - 0x81, 0x0e, 0x94, 0xcb, 0x40, 0xe2, 0x83, 0x1a, 0xab, 0x99, 0x1c, 0xcf, - 0x96, 0xc5, 0xe4, 0x61, 0x29, 0x53, 0x28, 0x69, 0x84, 0x69, 0xe4, 0x4a, - 0x1f, 0x2d, 0x4b, 0xa7, 0x91, 0x45, 0x56, 0x49, 0x65, 0x4b, 0xd7, 0x34, - 0x07, 0xd6, 0xb4, 0xcb, 0x4c, 0x51, 0xf6, 0xa0, 0x5a, 0xcc, 0x8b, 0x1a, - 0x7e, 0x28, 0xaa, 0x46, 0xe3, 0x58, 0x09, 0x0f, 0x9d, 0xfb, 0x42, 0x8d, - 0xe9, 0x46, 0x3a, 0x16, 0xd7, 0x0a, 0x65, 0x79, 0xe3, 0x25, 0x16, 0x6f, - 0x51, 0xce, 0x52, 0x4c, 0x00, 0xf2, 0x74, 0x2b, 0xa0, 0xf3, 0x46, 0x62, - 0x14, 0x9b, 0x09, 0x39, 0xf0, 0xa1, 0xbc, 0x63, 0xd9, 0x98, 0x71, 0x37, - 0xe4, 0x33, 0xb8, 0x0d, 0x16, 0xc6, 0x96, 0xa4, 0x6f, 0x01, 0xa8, 0x1c, - 0x9c, 0x3b, 0x63, 0xe7, 0xe9, 0x96, 0x73, 0xf0, 0xc8, 0x1b, 0x84, 0xf3, - 0x7d, 0xf9, 0xc9, 0x44, 0x74, 0x81, 0xf4, 0x16, 0x53, 0xe5, 0x80, 0xaa, - 0x8c, 0xca, 0x12, 0xc8, 0x81, 0x64, 0xe7, 0x20, 0x66, 0x45, 0x25, 0xcb, - 0xaf, 0x1b, 0x6b, 0x00, 0xad, 0x89, 0x4b, 0xae, 0xc9, 0x75, 0x88, 0x4e, - 0x65, 0xbb, 0xa7, 0xc4, 0xfc, 0xa9, 0x3f, 0x1e, 0x7f, 0x6d, 0x05, 0xc0, - 0xc9, 0x2d, 0xeb, 0x00, 0xf5, 0xe4, 0x39, 0x91, 0xb4, 0x05, 0xd9, 0xa6, - 0x58, 0x15, 0x8b, 0x24, 0x4e, 0x78, 0xb0, 0x66, 0xe2, 0xb8, 0x45, 0x6d, - 0xaa, 0x2e, 0x3a, 0xf3, 0xbd, 0xe7, 0x74, 0x95, 0x15, 0xee, 0x4e, 0x0c, - 0x4f, 0x03, 0xa1, 0xca, 0x55, 0x6b, 0x24, 0xbe, 0x32, 0x59, 0xd1, 0x81, - 0x39, 0xcc, 0x12, 0xc5, 0xb9, 0x91, 0x92, 0xac, 0x75, 0x5c, 0x3e, 0xae, - 0x32, 0x13, 0x59, 0x52, 0x77, 0xad, 0x99, 0xe9, 0x34, 0x74, 0xf0, 0x25, - 0xc3, 0xbf, 0x3a, 0xf4, 0x0f, 0x67, 0x85, 0x0f, 0xa1, 0xdf, 0xd4, 0x45, - 0xf9, 0xc0, 0x2d, 0x1f, 0x9e, 0x40, 0x80, 0x7c, 0xdc, 0x3f, 0x93, 0x6e, - 0x2e, 0x2f, 0x21, 0xac, 0xd2, 0x4b, 0xf3, 0x76, 0xaa, 0xc0, 0x5d, 0x5b, - 0x3a, 0x00, 0x49, 0xb7, 0x9c, 0x9b, 0x28, 0xef, 0xad, 0x57, 0xd0, 0x18, - 0x43, 0xd9, 0x18, 0xbe, 0x77, 0xc2, 0xde, 0x2f, 0xfb, 0xf8, 0x55, 0xf1, - 0x19, 0xa8, 0x6b, 0x94, 0xcd, 0xb7, 0x2c, 0xce, 0xe0, 0x9a, 0x96, 0x80, - 0x40, 0xd2, 0x12, 0x97, 0x62, 0xa2, 0xac, 0x46, 0x86, 0x03, 0x20, 0x69, - 0xc7, 0xca, 0x51, 0xe0, 0x5f, 0x27, 0x4e, 0xa6, 0x13, 0x03, 0xcf, 0x73, - 0xfc, 0xbd, 0x5d, 0xcc, 0xaa, 0xed, 0xda, 0x92, 0x5a, 0x1b, 0xd5, 0x3c, - 0x60, 0xfc, 0xba, 0xa7, 0xb4, 0x7b, 0x32, 0xd5, 0xf0, 0xf2, 0x53, 0x71, - 0xd1, 0x2e, 0x50, 0xf1, 0x55, 0x94, 0x66, 0x69, 0x05, 0x3b, 0xab, 0x55, - 0xb0, 0x5b, 0x5e, 0xc1, 0xce, 0x6d, 0x2a, 0xd8, 0x29, 0xaa, 0x60, 0xe7, - 0x3e, 0x2a, 0xd8, 0xfd, 0xea, 0x0a, 0x76, 0x6f, 0x53, 0xc1, 0x6e, 0x51, - 0x05, 0xbb, 0x5f, 0x59, 0x41, 0xce, 0x5b, 0xd1, 0x54, 0x2c, 0xeb, 0xeb, - 0x3f, 0x5a, 0xa5, 0x47, 0xeb, 0xf5, 0x8a, 0xb8, 0x67, 0xc7, 0x85, 0x6e, - 0x34, 0x05, 0xa8, 0x2d, 0x5f, 0x85, 0xb1, 0x92, 0xcf, 0xb2, 0xac, 0x05, - 0xcd, 0x02, 0x6d, 0xe5, 0xe0, 0xc6, 0x96, 0xdf, 0xba, 0x59, 0x33, 0x6e, - 0x22, 0xcd, 0xcb, 0x0d, 0x14, 0x72, 0x00, 0x2f, 0x9d, 0xc6, 0xc9, 0x80, - 0x86, 0x28, 0x4e, 0xbc, 0xa9, 0xa4, 0x5c, 0xaa, 0x94, 0x0b, 0xe5, 0x72, - 0x9d, 0xad, 0x82, 0x4a, 0x30, 0x1a, 0xe8, 0xd0, 0x8d, 0x75, 0x96, 0xc5, - 0x3f, 0xdb, 0xee, 0x02, 0xe5, 0xb1, 0x74, 0xac, 0x6f, 0xb2, 0xe5, 0x15, - 0xa2, 0x0a, 0x6d, 0xf0, 0x63, 0xb2, 0x86, 0x6f, 0xfb, 0x82, 0xb3, 0x63, - 0xdc, 0x95, 0xcd, 0x09, 0x64, 0x12, 0x08, 0x1a, 0x1c, 0xf9, 0xeb, 0x2b, - 0x85, 0xc2, 0x38, 0xee, 0x4d, 0x2c, 0x8c, 0x7d, 0x83, 0x82, 0x19, 0x80, - 0xbb, 0xca, 0x01, 0x7d, 0x7e, 0xa5, 0x58, 0x08, 0xc5, 0xbd, 0x49, 0x85, - 0x90, 0x6f, 0x50, 0x28, 0xb4, 0xa3, 0x08, 0x7a, 0xf4, 0xf5, 0xb5, 0x62, - 0x21, 0x1c, 0xf7, 0x27, 0x17, 0xc2, 0xbe, 0x49, 0xc1, 0xc8, 0x55, 0xd0, - 0xd8, 0x32, 0xea, 0xa5, 0xae, 0x3d, 0x75, 0x33, 0x4c, 0x57, 0x7e, 0xef, - 0xaf, 0xe5, 0xa3, 0x5b, 0xfa, 0x82, 0x32, 0x08, 0x7c, 0x80, 0xa9, 0x3e, - 0xfc, 0x9c, 0x91, 0x08, 0xc9, 0xe9, 0x22, 0x37, 0xf4, 0x2b, 0xc5, 0x2f, - 0x19, 0xbe, 0x37, 0xf9, 0x4b, 0xf4, 0x1b, 0x6c, 0x00, 0x5e, 0x48, 0xbe, - 0x5b, 0xf9, 0xd3, 0x3c, 0x67, 0x26, 0x82, 0x3b, 0x10, 0x36, 0x98, 0xbb, - 0xc7, 0x01, 0x03, 0xd8, 0xbf, 0x7e, 0xc8, 0xc8, 0x8e, 0xe9, 0xc9, 0x4b, - 0x05, 0x93, 0x8b, 0xbd, 0x6d, 0xda, 0x46, 0xbc, 0xb1, 0x1e, 0x2c, 0x2d, - 0x2d, 0x55, 0x19, 0x05, 0xa2, 0xcb, 0xac, 0x50, 0x7f, 0x59, 0x67, 0x1d, - 0xcb, 0x22, 0x2b, 0x49, 0x53, 0x30, 0x62, 0x2c, 0x31, 0x65, 0x88, 0xfc, - 0x09, 0xee, 0x4e, 0x3f, 0x54, 0x19, 0xd5, 0x68, 0x8a, 0x4b, 0xd4, 0x55, - 0x20, 0x41, 0xed, 0x46, 0x16, 0x63, 0x07, 0x2f, 0x85, 0x7d, 0x30, 0x91, - 0xdb, 0xe1, 0x69, 0x6f, 0xc9, 0xe2, 0xb5, 0xbd, 0x15, 0xbc, 0x3c, 0xfa, - 0xd3, 0xaa, 0x42, 0x42, 0x4d, 0xe1, 0x7e, 0x3d, 0x70, 0x33, 0x0b, 0x37, - 0x3d, 0xca, 0xe2, 0xcd, 0xb4, 0xc4, 0x15, 0xe8, 0x7b, 0x2c, 0x5f, 0x5d, - 0xe8, 0xc6, 0xa6, 0xbb, 0x23, 0xbf, 0x32, 0x99, 0x96, 0x5f, 0x9f, 0xc6, - 0xe5, 0xdf, 0xb4, 0x70, 0x98, 0x9b, 0x15, 0xaa, 0x8d, 0x82, 0xc2, 0xc9, - 0x21, 0x2d, 0x37, 0xdd, 0xb8, 0x9a, 0xb4, 0xc2, 0xcc, 0xb6, 0xd4, 0xe3, - 0x55, 0x86, 0x3e, 0x54, 0xdc, 0x41, 0xbc, 0xcb, 0xf8, 0xc0, 0xc2, 0xfc, - 0x79, 0xf8, 0x46, 0x82, 0xca, 0x65, 0xf9, 0x95, 0x94, 0x90, 0x30, 0x65, - 0x08, 0xc5, 0x54, 0xca, 0xf7, 0x80, 0x8b, 0x36, 0x2b, 0xd4, 0x86, 0x0d, - 0xef, 0x80, 0x62, 0xa1, 0xf7, 0x3e, 0xdb, 0x6c, 0xbd, 0xc9, 0x7b, 0x72, - 0x1b, 0x02, 0xef, 0x7b, 0x28, 0x6d, 0x1a, 0x49, 0xae, 0x88, 0x68, 0x89, - 0xda, 0xe8, 0x8b, 0x44, 0xd7, 0xd3, 0x1b, 0xc9, 0xd7, 0xbd, 0x6a, 0x0e, - 0xe6, 0x4a, 0xdb, 0xac, 0x11, 0x72, 0xc3, 0xed, 0x35, 0x8c, 0xeb, 0xe2, - 0x66, 0xb5, 0x90, 0xc0, 0x5c, 0x33, 0x57, 0x95, 0x88, 0x6b, 0x96, 0x8a, - 0xea, 0x21, 0x51, 0xc9, 0x5f, 0x6b, 0x36, 0xf2, 0x0a, 0x0c, 0x23, 0xe4, - 0x53, 0x1b, 0x3c, 0xb0, 0xfb, 0x15, 0x36, 0xbd, 0x72, 0xb0, 0x71, 0x13, - 0x0e, 0x7d, 0x68, 0x68, 0xbb, 0xb6, 0x12, 0x2a, 0xb2, 0xb6, 0xba, 0xe4, - 0x3d, 0x58, 0xe8, 0xbb, 0xb5, 0xaa, 0x2b, 0x34, 0x1e, 0xeb, 0xc4, 0xb7, - 0x0e, 0x06, 0xa8, 0xe0, 0x9e, 0x1b, 0x0f, 0xe5, 0x57, 0x1e, 0x6a, 0x78, - 0xe9, 0x44, 0xd6, 0xea, 0x1e, 0x1a, 0x7d, 0xce, 0xd5, 0x25, 0x5e, 0x6e, - 0x5c, 0x22, 0x30, 0x6d, 0x6e, 0x0a, 0xde, 0x61, 0x73, 0xb3, 0x50, 0x56, - 0x96, 0x8a, 0xdc, 0x67, 0xbb, 0x8f, 0xe1, 0xb7, 0x54, 0x51, 0x96, 0x0c, - 0x5f, 0x46, 0x7d, 0x7e, 0xea, 0x87, 0x11, 0xed, 0x95, 0xdc, 0x6a, 0x0c, - 0x9b, 0xca, 0xc2, 0xff, 0x9e, 0x21, 0x6c, 0x59, 0x07, 0x69, 0xb7, 0x56, - 0xaa, 0xfc, 0x9b, 0x5f, 0xbc, 0x7f, 0x4f, 0x02, 0xb8, 0x55, 0xe5, 0x67, - 0x7f, 0x8c, 0xa2, 0x53, 0x92, 0xc0, 0x7f, 0x5c, 0xed, 0x57, 0x6b, 0x79, - 0xaa, 0xfc, 0xb7, 0x7e, 0xb0, 0x4e, 0xe5, 0xe5, 0x1c, 0x24, 0x33, 0x6f, - 0xd8, 0xdd, 0xd9, 0xe9, 0xee, 0x24, 0x44, 0x82, 0xa3, 0x4a, 0xff, 0x79, - 0x22, 0xd9, 0x5d, 0x59, 0x24, 0xbf, 0x0c, 0x6f, 0xb4, 0xa6, 0x4b, 0xf4, - 0x81, 0xe2, 0x6e, 0xfe, 0x8b, 0x2b, 0xff, 0x2d, 0xca, 0xae, 0x51, 0xf9, - 0x39, 0xc0, 0xcf, 0x51, 0x93, 0x84, 0x00, 0x28, 0xe9, 0xdf, 0x22, 0x80, - 0x55, 0x56, 0xb7, 0xef, 0xd0, 0xc9, 0x7b, 0x8e, 0x11, 0xe3, 0x2e, 0xbb, - 0x8e, 0xc4, 0x3a, 0x04, 0xd6, 0xff, 0xbc, 0xce, 0x93, 0xac, 0xf7, 0xf1, - 0xcb, 0x67, 0xef, 0x56, 0x77, 0x6c, 0xe5, 0x4f, 0x04, 0xaa, 0xf9, 0x9b, - 0x77, 0x6d, 0x95, 0x77, 0xe4, 0x7d, 0x6d, 0x23, 0xb5, 0x77, 0x93, 0x2d, - 0x84, 0xd3, 0x94, 0xff, 0x96, 0xf6, 0xd9, 0x80, 0x7a, 0x77, 0x13, 0x72, - 0x7b, 0xf7, 0xed, 0xfb, 0xe3, 0xa3, 0x5f, 0xad, 0xdb, 0xd0, 0x78, 0xbb, - 0x18, 0xce, 0x89, 0x6e, 0xb0, 0xa9, 0x33, 0x2c, 0xbf, 0x38, 0xfc, 0xe6, - 0xe8, 0x16, 0x3c, 0xe3, 0x3c, 0xd5, 0x26, 0xa7, 0x5e, 0x19, 0xa6, 0x5f, - 0x1e, 0xbe, 0x79, 0x73, 0x78, 0x0b, 0xae, 0x27, 0xf6, 0x6c, 0x66, 0xff, - 0xfb, 0xd8, 0x3e, 0x79, 0xf5, 0xdb, 0xdb, 0xc8, 0x1a, 0x3e, 0xf1, 0x5d, - 0xcb, 0xfa, 0xbe, 0xbb, 0x46, 0xf9, 0xe8, 0xa9, 0x23, 0xfc, 0x65, 0x78, - 0xbf, 0x1a, 0x4c, 0x4d, 0x4c, 0x81, 0x1a, 0x4a, 0x97, 0xce, 0x4d, 0x34, - 0xee, 0xa2, 0x2b, 0xb0, 0x99, 0xcb, 0x9b, 0x37, 0x93, 0xdf, 0xd8, 0x64, - 0xe4, 0xf8, 0x39, 0x65, 0xcd, 0xd4, 0x4c, 0xc7, 0x6c, 0x92, 0xce, 0x00, - 0x58, 0xd1, 0xab, 0xc1, 0xea, 0x50, 0xc9, 0x8a, 0x34, 0x5e, 0x60, 0x3e, - 0xb3, 0x12, 0x0d, 0x9a, 0xf8, 0xdc, 0x92, 0xc6, 0x33, 0x84, 0xb9, 0xad, - 0x44, 0x83, 0xc2, 0xba, 0x6f, 0x4b, 0x23, 0x5a, 0x4d, 0x54, 0x83, 0xe8, - 0xb6, 0x92, 0x02, 0x05, 0xc4, 0x05, 0xac, 0x4a, 0x04, 0xda, 0xb2, 0x16, - 0x1d, 0x46, 0xbb, 0x66, 0xff, 0xb8, 0x2b, 0xc5, 0x76, 0xed, 0xcf, 0xe2, - 0x2d, 0xad, 0xe9, 0xad, 0x31, 0xa2, 0x1a, 0xf7, 0x98, 0x8b, 0x7b, 0x28, - 0x7e, 0x17, 0xee, 0xa1, 0xde, 0x41, 0xd0, 0x67, 0x16, 0x69, 0x17, 0xe1, - 0x9e, 0x06, 0xd5, 0x58, 0x5a, 0x71, 0xc4, 0x57, 0x6a, 0x31, 0xb2, 0x11, - 0xa2, 0x5a, 0x7a, 0x5b, 0x45, 0xe6, 0xc7, 0xe6, 0x2d, 0xf9, 0xa2, 0x0c, - 0x7a, 0x69, 0x5d, 0xe2, 0xe5, 0x64, 0xc9, 0x17, 0xfd, 0xdd, 0xb0, 0x89, - 0xc4, 0x6f, 0x6e, 0xca, 0xee, 0x24, 0x11, 0x55, 0x6c, 0x24, 0xf1, 0xf7, - 0x89, 0x62, 0x25, 0x0e, 0x16, 0x5b, 0x75, 0x71, 0x37, 0x03, 0x21, 0x2f, - 0xbf, 0xe7, 0xda, 0xc9, 0x9f, 0x71, 0x43, 0xc5, 0x47, 0x71, 0xcb, 0x36, - 0x6b, 0x9e, 0xf2, 0x6a, 0x8f, 0x9d, 0x79, 0x25, 0xed, 0xc4, 0xc1, 0x19, - 0x95, 0x41, 0xf1, 0x7b, 0x71, 0xb7, 0x2a, 0x09, 0x42, 0xfc, 0xa6, 0x25, - 0x08, 0x11, 0x8d, 0x4a, 0x2f, 0x2d, 0x3e, 0x1d, 0xb8, 0x36, 0x9e, 0x0f, - 0xbe, 0x0d, 0xfc, 0x3f, 0xd0, 0x00, 0x32, 0xf5, 0x69, 0x7d, 0xc2, 0x3e, - 0xc0, 0xd9, 0xe4, 0x7f, 0xfc, 0x15, 0xa7, 0x57, 0xda, 0x7b, 0xb2, 0x36, - 0xd6, 0x3a, 0xa1, 0x9a, 0x85, 0x8d, 0xe7, 0xcf, 0x85, 0x57, 0xd2, 0x78, - 0xba, 0xc1, 0x94, 0x8e, 0x7d, 0x7d, 0x8b, 0xc5, 0xad, 0xe4, 0xc4, 0x61, - 0x7d, 0xb9, 0x36, 0x92, 0xe2, 0x58, 0x16, 0x14, 0x8c, 0x2b, 0x48, 0x9c, - 0x79, 0x72, 0x84, 0x74, 0xc6, 0x56, 0x15, 0xe1, 0x7e, 0x78, 0xb3, 0x16, - 0x62, 0x0a, 0x9b, 0x34, 0xff, 0x3c, 0x9c, 0x80, 0xc5, 0x26, 0xdf, 0x9f, - 0xf0, 0x6e, 0x5c, 0x7d, 0xfc, 0xe6, 0xe4, 0xd5, 0xd1, 0xe3, 0xda, 0x83, - 0x7e, 0xbf, 0xd1, 0xb6, 0xfe, 0xf4, 0x27, 0xcb, 0xc0, 0xe2, 0x58, 0xd2, - 0xaf, 0xb0, 0x94, 0x06, 0xfd, 0x34, 0xc0, 0xef, 0x03, 0x67, 0x84, 0xd2, - 0x5b, 0x8f, 0x6b, 0xd6, 0x41, 0x7c, 0x75, 0xbb, 0xf9, 0xa3, 0xaa, 0xe0, - 0xcd, 0xb3, 0x4d, 0xd7, 0x9f, 0x54, 0x2b, 0x78, 0x41, 0xeb, 0x48, 0x44, - 0x32, 0x56, 0xb4, 0xb6, 0x9f, 0x06, 0x1c, 0xe1, 0xf0, 0xd8, 0x8c, 0xd8, - 0x40, 0x83, 0x1e, 0xc9, 0x17, 0xc4, 0x3e, 0xbb, 0x7c, 0x35, 0xaa, 0xe6, - 0x8e, 0x48, 0xd4, 0x9a, 0xac, 0x63, 0x4d, 0x7d, 0xa4, 0xb3, 0x6f, 0x3d, - 0xe6, 0x1e, 0xf2, 0x78, 0x55, 0x84, 0xf1, 0x26, 0x40, 0x11, 0xaa, 0x29, - 0x6a, 0x93, 0xc4, 0x94, 0x3a, 0xdf, 0xa1, 0x44, 0x99, 0x17, 0x2e, 0x1f, - 0x0e, 0xd2, 0xab, 0xf8, 0xa8, 0xe3, 0x98, 0xdf, 0x80, 0x8d, 0xaa, 0x03, - 0xf4, 0x07, 0xb8, 0x76, 0xc3, 0xc2, 0x6e, 0xb0, 0x05, 0x7f, 0x02, 0x87, - 0x3b, 0xcf, 0x3d, 0x1d, 0xf1, 0xcc, 0xc7, 0xf0, 0x18, 0xe0, 0xb9, 0x3f, - 0xbf, 0xa4, 0x3b, 0x62, 0xe2, 0x1c, 0xc1, 0xe7, 0x3b, 0x2b, 0xa4, 0x6a, - 0xd5, 0x23, 0x6f, 0xe2, 0x3a, 0xe1, 0xb4, 0x66, 0x7d, 0x96, 0xa2, 0xaf, - 0x67, 0x20, 0xf1, 0x1e, 0x69, 0x46, 0xf2, 0x6a, 0x6c, 0xd9, 0x49, 0xd4, - 0x96, 0x13, 0x62, 0x5a, 0x12, 0x86, 0x74, 0xa5, 0x0b, 0x4d, 0xb9, 0xc3, - 0x3a, 0x21, 0xbd, 0xe4, 0xf7, 0x82, 0x10, 0x8b, 0xf6, 0xc2, 0xe5, 0x37, - 0xe8, 0x2a, 0xfc, 0x40, 0xc2, 0x47, 0x9a, 0x3e, 0xe3, 0x4e, 0x10, 0x57, - 0xd7, 0xa4, 0xaf, 0x9b, 0x53, 0x78, 0xbd, 0x44, 0xcb, 0x32, 0xc0, 0x29, - 0xad, 0xe3, 0xe1, 0xe8, 0xb8, 0x2a, 0x5f, 0xa9, 0x9b, 0x6c, 0x8a, 0xce, - 0xa5, 0x2c, 0xd3, 0x79, 0x93, 0xb9, 0x28, 0x27, 0x33, 0x2d, 0x9d, 0x6b, - 0xfd, 0xf2, 0x95, 0x55, 0xc5, 0x3c, 0xf1, 0x43, 0x2d, 0x09, 0x17, 0x47, - 0xf3, 0x02, 0x38, 0xfe, 0x9d, 0x04, 0x40, 0xb3, 0x25, 0x61, 0xe4, 0x63, - 0x1e, 0x2c, 0x0e, 0x91, 0x05, 0xcc, 0xb1, 0xfe, 0x5d, 0x40, 0xe8, 0x28, - 0x08, 0xfc, 0xa0, 0x0d, 0x20, 0xcc, 0xd4, 0xdd, 0x11, 0x5c, 0xaa, 0x48, - 0xe5, 0xb0, 0x98, 0x4c, 0x5d, 0x9a, 0x16, 0x74, 0x1e, 0xa7, 0xc8, 0xca, - 0x50, 0x74, 0x80, 0xc2, 0xa2, 0x8d, 0xfb, 0xb0, 0x69, 0x7d, 0xeb, 0xd2, - 0xd1, 0x4a, 0x1c, 0x06, 0x93, 0x2d, 0x7a, 0x7c, 0xf4, 0xfc, 0xdd, 0xdb, - 0xb7, 0x47, 0xcf, 0xdf, 0xab, 0xd7, 0xde, 0x12, 0xe2, 0x28, 0x40, 0xdb, - 0x4f, 0xa0, 0x90, 0xcd, 0x24, 0x42, 0x17, 0x97, 0xf1, 0xbc, 0xa1, 0xb1, - 0x0f, 0xc8, 0xf4, 0xc5, 0x3c, 0x33, 0x7a, 0xb6, 0x9a, 0x4d, 0x00, 0x5a, - 0x5b, 0xb8, 0xcd, 0x05, 0xdb, 0xcd, 0x71, 0x53, 0x35, 0x70, 0x1a, 0x84, - 0x60, 0x90, 0x04, 0xc6, 0x8d, 0x7a, 0xe0, 0xde, 0x21, 0x65, 0x47, 0x38, - 0x83, 0xf1, 0x22, 0xf1, 0x52, 0x44, 0xb5, 0x34, 0x31, 0x35, 0x26, 0x24, - 0xe9, 0xa9, 0x82, 0xf7, 0x46, 0xf2, 0x83, 0x18, 0x84, 0xe8, 0xb8, 0x24, - 0x71, 0x29, 0x3e, 0x56, 0x55, 0x99, 0x28, 0x22, 0x45, 0x36, 0x5d, 0xe4, - 0x18, 0x67, 0xaa, 0x2e, 0x51, 0x80, 0xbf, 0x8b, 0x00, 0xb8, 0x05, 0x00, - 0xc0, 0xdf, 0x9c, 0x02, 0xa4, 0xe6, 0x2a, 0x11, 0x29, 0x43, 0xbc, 0x01, - 0x87, 0xdb, 0xc5, 0xc8, 0xfe, 0x1e, 0x6a, 0x28, 0x92, 0x9c, 0x24, 0xd9, - 0x54, 0x86, 0x0c, 0x59, 0x1f, 0xe4, 0xaf, 0x64, 0xe6, 0xcc, 0x9c, 0xdd, - 0x02, 0xc0, 0xab, 0x31, 0x59, 0x0d, 0x34, 0x04, 0x58, 0x25, 0xc6, 0xd4, - 0x06, 0x30, 0xde, 0x43, 0x8c, 0x01, 0x0e, 0x29, 0x2c, 0x2f, 0x2f, 0xc2, - 0x0c, 0xc5, 0xf7, 0x26, 0xb1, 0xb6, 0x9d, 0x09, 0x31, 0xa7, 0x33, 0xe2, - 0x33, 0x18, 0x69, 0x94, 0xb3, 0x23, 0x2b, 0xf9, 0x76, 0x79, 0x18, 0x46, - 0x11, 0x7a, 0x8f, 0x23, 0x32, 0x0a, 0x67, 0x00, 0xcb, 0xbf, 0xff, 0x38, - 0xa5, 0xb6, 0x98, 0x70, 0x2c, 0xe6, 0x11, 0x22, 0x2f, 0x1a, 0x23, 0xb2, - 0x36, 0xca, 0x1a, 0xe3, 0xf5, 0x8a, 0x67, 0x38, 0xaf, 0x3e, 0x0d, 0xc0, - 0x47, 0x3d, 0x7e, 0x9d, 0x32, 0x24, 0x7e, 0x34, 0x9a, 0x88, 0x54, 0xa3, - 0xb0, 0xe3, 0x4a, 0x4d, 0x4c, 0xdf, 0xe9, 0x6e, 0x39, 0xa2, 0x86, 0x4c, - 0xf7, 0x55, 0x8e, 0xb1, 0x43, 0xf2, 0x4b, 0xfa, 0x4e, 0x66, 0x50, 0x98, - 0x19, 0xd2, 0x9f, 0xe1, 0x2b, 0x99, 0xcc, 0x93, 0x20, 0x92, 0x24, 0xbe, - 0x93, 0x19, 0xd4, 0x2c, 0xa7, 0x40, 0x06, 0x96, 0x89, 0x38, 0x02, 0x97, - 0x90, 0x90, 0x39, 0x56, 0xaf, 0xb2, 0x49, 0x42, 0x1e, 0x1d, 0xab, 0xcf, - 0x16, 0x77, 0x21, 0xec, 0xb2, 0xb2, 0x94, 0x27, 0x0b, 0xb6, 0x92, 0xc5, - 0xf4, 0x1e, 0x21, 0x8a, 0x1d, 0xaa, 0x9f, 0xc9, 0x6c, 0xbd, 0xff, 0xcf, - 0x1c, 0x6b, 0x3d, 0xb7, 0x74, 0x5a, 0x12, 0x32, 0xb1, 0x2f, 0x2c, 0xc1, - 0x4f, 0x38, 0x41, 0x8d, 0x31, 0x79, 0x60, 0xb3, 0x2f, 0x43, 0xc0, 0xea, - 0x67, 0x1e, 0xca, 0x6c, 0x60, 0x00, 0x8a, 0x7e, 0x5a, 0x27, 0x22, 0xc0, - 0xb8, 0x92, 0x81, 0x33, 0x6b, 0xfd, 0x04, 0x47, 0xc3, 0x0d, 0xff, 0xcc, - 0x42, 0x99, 0xe5, 0x6f, 0x8d, 0x8d, 0x7e, 0xe7, 0x08, 0xa7, 0x17, 0x8b, - 0x35, 0xe8, 0xb7, 0x6a, 0x25, 0x38, 0x0d, 0x6a, 0x56, 0x4a, 0xa9, 0xce, - 0xe8, 0x7d, 0x73, 0xeb, 0xf5, 0xd1, 0x37, 0x16, 0xa7, 0xa4, 0x20, 0xcd, - 0xda, 0x22, 0x00, 0xf1, 0x65, 0xbd, 0x23, 0xf7, 0x3f, 0x05, 0x12, 0xaf, - 0xe7, 0xc5, 0xa8, 0x5e, 0x7e, 0xfb, 0xea, 0x9d, 0x45, 0x09, 0x79, 0xb0, - 0x77, 0x73, 0x1e, 0xaf, 0x63, 0x50, 0xf5, 0x9c, 0x81, 0x34, 0x0b, 0x5d, - 0x44, 0x55, 0x5e, 0x70, 0x96, 0x05, 0x31, 0x0b, 0x4b, 0x80, 0x79, 0x01, - 0xc3, 0x40, 0x2f, 0xc4, 0x17, 0xf9, 0x7a, 0x9a, 0xa5, 0x1c, 0xd2, 0x77, - 0x5a, 0x9a, 0x41, 0x5f, 0x09, 0xd4, 0xeb, 0x04, 0xb3, 0xd0, 0x66, 0x05, - 0x85, 0x75, 0x61, 0x32, 0xa3, 0x5e, 0x7f, 0xe2, 0x7c, 0xc9, 0x52, 0x37, - 0x2b, 0x09, 0x46, 0x67, 0xf8, 0xd0, 0xec, 0x18, 0xbe, 0xae, 0xec, 0x8b, - 0xe9, 0x3a, 0xc5, 0xeb, 0x01, 0x80, 0xc7, 0xeb, 0x41, 0x33, 0x4d, 0x17, - 0xcf, 0xe4, 0x29, 0x57, 0x5c, 0xa4, 0x9b, 0x20, 0x9e, 0x82, 0x53, 0xbf, - 0x34, 0x87, 0xc0, 0xf3, 0x20, 0x91, 0x47, 0x10, 0x3c, 0xe0, 0x65, 0x88, - 0x9b, 0xe9, 0xaf, 0x66, 0x97, 0x8c, 0xab, 0x04, 0x4d, 0x41, 0x26, 0x77, - 0xae, 0x63, 0x50, 0x59, 0xde, 0x92, 0xfb, 0xb4, 0x29, 0x70, 0xb9, 0x77, - 0x4a, 0x56, 0x87, 0x7e, 0x64, 0x2c, 0x86, 0x60, 0x6a, 0x1f, 0xe8, 0x3b, - 0x99, 0x91, 0x8c, 0x6c, 0x20, 0x12, 0x78, 0xb4, 0xe2, 0xe7, 0x24, 0xa0, - 0x7a, 0x27, 0x3b, 0xf9, 0x2b, 0xd4, 0x3b, 0xd0, 0x5e, 0x9f, 0xc9, 0x32, - 0xd2, 0x73, 0x12, 0xcc, 0xcc, 0x7e, 0xc9, 0x1a, 0xc4, 0x47, 0x8c, 0x12, - 0xb6, 0xd8, 0x3a, 0x21, 0x10, 0x8b, 0x61, 0xac, 0xea, 0xef, 0x2a, 0xfb, - 0xbf, 0xab, 0xa0, 0xa2, 0x38, 0x27, 0x49, 0x43, 0x4c, 0xca, 0x15, 0x4a, - 0x4e, 0xda, 0xc8, 0xbb, 0x38, 0xa1, 0x72, 0x3a, 0x21, 0x03, 0xc8, 0x66, - 0x55, 0xe7, 0xc9, 0x84, 0x2c, 0x44, 0x7a, 0x94, 0xa4, 0xa4, 0xc4, 0x70, - 0x5f, 0x36, 0x3a, 0x1a, 0x14, 0x73, 0x39, 0xcb, 0xfa, 0xa9, 0xcf, 0xc6, - 0x26, 0x39, 0xe7, 0xaa, 0x48, 0xa0, 0x6b, 0x05, 0xec, 0xb9, 0xa5, 0x5e, - 0xe3, 0x5b, 0x81, 0xee, 0x8a, 0x84, 0x51, 0x78, 0xbf, 0x8e, 0x23, 0xba, - 0xe8, 0xc0, 0xf7, 0x30, 0x43, 0x59, 0xe2, 0x38, 0x7a, 0x0e, 0xac, 0x70, - 0x0c, 0x58, 0xe6, 0x3a, 0xfe, 0x0a, 0x00, 0x34, 0xa0, 0xfa, 0x73, 0xc0, - 0x2f, 0xce, 0x97, 0x39, 0x90, 0x3f, 0x87, 0xa3, 0x11, 0x23, 0x75, 0x08, - 0x29, 0x46, 0xee, 0xe4, 0x28, 0xdc, 0x5c, 0xee, 0x3c, 0x9e, 0x09, 0x0c, - 0x35, 0x13, 0x01, 0x39, 0x0f, 0xf0, 0x6b, 0xd4, 0xb4, 0x5e, 0x8a, 0x41, - 0xb0, 0x70, 0xce, 0x2c, 0x18, 0x93, 0x0c, 0x1b, 0xd6, 0x99, 0xe7, 0xcf, - 0x2d, 0x7f, 0x16, 0x3f, 0x43, 0x13, 0xb9, 0x5c, 0x20, 0xca, 0x1d, 0x4a, - 0xfe, 0x46, 0x73, 0x8c, 0xc4, 0x7d, 0x38, 0x3e, 0x19, 0x6f, 0xf2, 0x15, - 0x5d, 0x0e, 0xe6, 0xba, 0x78, 0x12, 0xde, 0xbd, 0xd2, 0x54, 0x23, 0x6a, - 0x72, 0x6c, 0x0d, 0x4d, 0x0b, 0x2c, 0x71, 0x26, 0x7f, 0xee, 0xda, 0x76, - 0xb0, 0xc4, 0x97, 0x7c, 0x41, 0x0b, 0xc1, 0x03, 0xe7, 0x0f, 0x92, 0x7b, - 0x2c, 0xbe, 0x79, 0xda, 0xa1, 0x14, 0xda, 0x9f, 0x54, 0x4d, 0xa5, 0x5b, - 0xe1, 0x1e, 0x6a, 0x28, 0x12, 0xcc, 0x94, 0x78, 0x93, 0xa8, 0x45, 0x38, - 0x9c, 0x2e, 0xce, 0x97, 0xba, 0x94, 0x87, 0xb8, 0xe6, 0x67, 0x81, 0x1e, - 0x80, 0x1a, 0x61, 0xb5, 0x61, 0x38, 0x05, 0x39, 0x21, 0x42, 0x5c, 0xa8, - 0x31, 0x21, 0xd6, 0x50, 0x05, 0xe8, 0x2d, 0x4f, 0x1c, 0x9b, 0x69, 0xaf, - 0xf1, 0x5c, 0x04, 0x67, 0x11, 0x6b, 0x75, 0xa1, 0xcf, 0x68, 0x74, 0x94, - 0x6e, 0x2a, 0x1a, 0xdb, 0x51, 0xe8, 0x0b, 0xc4, 0x0b, 0xfd, 0xe1, 0xcc, - 0xb8, 0x8c, 0x5f, 0x7c, 0x1b, 0xb4, 0xa5, 0xcf, 0x88, 0xab, 0xe2, 0xb4, - 0xd7, 0x98, 0xf7, 0x16, 0xb9, 0x49, 0xc4, 0xa2, 0xc8, 0x5b, 0xf4, 0xfd, - 0x12, 0x77, 0xd1, 0x2f, 0x71, 0x17, 0xed, 0xc5, 0x79, 0xa1, 0xbf, 0xe8, - 0x44, 0xe5, 0xde, 0xe2, 0x4b, 0x20, 0x25, 0x4f, 0x6f, 0x46, 0x9e, 0xde, - 0xd4, 0x9f, 0x80, 0xf7, 0x51, 0xb9, 0x8b, 0x98, 0x2d, 0xe0, 0xda, 0x5c, - 0xe0, 0x4e, 0x5c, 0xc3, 0xd9, 0xea, 0xae, 0x21, 0x69, 0xdf, 0x7b, 0xdb, - 0x76, 0x37, 0xe9, 0x19, 0x0a, 0x6f, 0x55, 0xc7, 0x70, 0x22, 0x95, 0x03, - 0xf2, 0xf1, 0x6c, 0x7b, 0xb6, 0x82, 0x7b, 0x78, 0x6e, 0x43, 0x35, 0xcf, - 0xfd, 0xe5, 0x0e, 0x22, 0x5c, 0x43, 0x16, 0xfb, 0xd7, 0x38, 0x7e, 0x2b, - 0xb8, 0x90, 0x59, 0xdf, 0xd0, 0xc7, 0xb3, 0xf8, 0x5f, 0x70, 0x0d, 0x49, - 0x67, 0xe6, 0x36, 0x3a, 0xbe, 0x6d, 0x9d, 0x51, 0x87, 0x13, 0x5e, 0xa9, - 0x6f, 0x78, 0xe8, 0x4e, 0xc4, 0x0c, 0x6a, 0xbe, 0xc4, 0x3d, 0x3c, 0x0b, - 0xcb, 0xfd, 0xc3, 0x43, 0xb4, 0xa6, 0x08, 0xe0, 0x21, 0x96, 0x3b, 0x88, - 0x3f, 0xc7, 0x40, 0x86, 0xc5, 0xd5, 0x25, 0x0e, 0xe2, 0x4b, 0x71, 0x86, - 0x69, 0x27, 0x06, 0x38, 0x02, 0xbd, 0xd9, 0x3d, 0xa4, 0xda, 0xb1, 0x1d, - 0xb1, 0xce, 0x1c, 0xf1, 0x65, 0x89, 0x87, 0x78, 0x26, 0xdc, 0x42, 0x0f, - 0xd1, 0x59, 0xea, 0x20, 0xea, 0x9f, 0x16, 0x7c, 0x55, 0xe1, 0x2d, 0xf1, - 0x10, 0xe9, 0xcb, 0x62, 0x37, 0x91, 0x06, 0xe5, 0x1b, 0x5d, 0x44, 0xf0, - 0x9e, 0xb0, 0xbc, 0x34, 0xc0, 0x2c, 0x5c, 0xe3, 0x1f, 0x4e, 0x04, 0x4c, - 0xbc, 0xa0, 0x25, 0xd7, 0xa5, 0x0e, 0x62, 0x6a, 0xd0, 0xf5, 0xe7, 0x20, - 0x64, 0x7b, 0x45, 0x7e, 0x62, 0x06, 0x0e, 0xd8, 0xc9, 0x7c, 0xe5, 0x40, - 0xf3, 0x43, 0xe1, 0x54, 0x44, 0x1a, 0x6f, 0x6e, 0xf4, 0x5b, 0xc9, 0x5d, - 0x94, 0x7a, 0x97, 0x71, 0x18, 0x47, 0xa2, 0xd4, 0x61, 0xfc, 0x46, 0x2c, - 0xa2, 0x70, 0x78, 0xcf, 0xcb, 0x8c, 0xe4, 0x2d, 0x2c, 0x6e, 0xf0, 0x16, - 0xb1, 0x9c, 0x8c, 0x66, 0xf4, 0xa2, 0x32, 0x3f, 0xf1, 0x83, 0x43, 0xae, - 0xad, 0x71, 0x3c, 0x6e, 0x70, 0x14, 0x3d, 0xe8, 0xb3, 0xc7, 0xe3, 0xf0, - 0xcc, 0x49, 0xba, 0x88, 0x09, 0xcf, 0xc5, 0xfa, 0x29, 0xc2, 0x47, 0x2d, - 0x11, 0x2e, 0x77, 0x1a, 0x67, 0xb6, 0xcb, 0x4b, 0xc4, 0x0b, 0xe0, 0x6a, - 0x5a, 0xcf, 0x84, 0xb7, 0x88, 0xbe, 0x08, 0xeb, 0xc3, 0xab, 0xa3, 0x6f, - 0x8e, 0x8e, 0xad, 0x5f, 0x1d, 0x1d, 0x3f, 0x7b, 0xf5, 0xf6, 0x9b, 0xa3, - 0xb7, 0x75, 0x6b, 0x31, 0x23, 0x54, 0x9e, 0x3f, 0x9c, 0x52, 0x89, 0x2f, - 0x0b, 0x6e, 0x3d, 0x67, 0xa9, 0xbf, 0xf8, 0x9a, 0x4c, 0x15, 0x1e, 0x9c, - 0xfb, 0x5a, 0x09, 0x54, 0xaa, 0x1b, 0xd3, 0x3a, 0x72, 0xa4, 0x5e, 0x2e, - 0x48, 0x2f, 0xef, 0x8b, 0xa8, 0x1a, 0x66, 0x8d, 0x6b, 0x0f, 0x69, 0xad, - 0xb4, 0xf8, 0xf8, 0x42, 0x04, 0x91, 0x33, 0x29, 0x5d, 0x7d, 0x64, 0x88, - 0xa9, 0x0b, 0x1d, 0x18, 0x08, 0x67, 0x66, 0xbd, 0x66, 0xa7, 0x91, 0x54, - 0xe2, 0x50, 0xaf, 0x42, 0x86, 0x0d, 0x12, 0x66, 0x1d, 0x1d, 0x09, 0x2f, - 0xb8, 0x96, 0x4d, 0x61, 0x1a, 0xef, 0x5e, 0xfc, 0x63, 0x91, 0x64, 0x6c, - 0xc9, 0x6a, 0xe4, 0x62, 0x99, 0xeb, 0xf8, 0x01, 0x6a, 0x8f, 0x91, 0x05, - 0x1b, 0x1c, 0x18, 0xfe, 0xa0, 0x10, 0xb8, 0x76, 0x72, 0xc1, 0xf3, 0x46, - 0xf0, 0x5c, 0x07, 0x5f, 0x58, 0x24, 0x8b, 0xce, 0x71, 0xd5, 0x02, 0xba, - 0xa9, 0x23, 0xc6, 0x30, 0x55, 0xf0, 0xbe, 0xc6, 0xa4, 0xbf, 0xcf, 0xb8, - 0x9e, 0x10, 0xc3, 0x99, 0x50, 0x08, 0xe8, 0x72, 0xbb, 0x3a, 0xbe, 0xc2, - 0x30, 0xe5, 0x65, 0xaa, 0x9e, 0xe0, 0xcc, 0xf2, 0x0e, 0xa6, 0x35, 0x5e, - 0x78, 0x67, 0x24, 0x3c, 0x07, 0xd2, 0xd7, 0x28, 0x3d, 0x31, 0x9d, 0x29, - 0x94, 0xb8, 0x92, 0x19, 0xbf, 0xec, 0xb3, 0x68, 0x01, 0xbd, 0xc1, 0xaf, - 0x67, 0xca, 0xeb, 0x3c, 0x47, 0xde, 0x97, 0xe6, 0xb3, 0x66, 0x7e, 0xb1, - 0x72, 0x24, 0x96, 0x2c, 0x57, 0xbe, 0xb0, 0x83, 0x81, 0x28, 0x72, 0x40, - 0xa3, 0x62, 0xff, 0xf3, 0x9f, 0x7f, 0x2f, 0xf3, 0x3f, 0x0b, 0xdd, 0x4f, - 0xe1, 0xfc, 0xf3, 0xcf, 0xe5, 0x0e, 0xe8, 0xe1, 0xd9, 0x17, 0x41, 0x3e, - 0x46, 0x80, 0xb5, 0x5c, 0xaa, 0x97, 0xf5, 0x96, 0x9d, 0x1c, 0x0f, 0xf4, - 0xfe, 0xf9, 0xb7, 0x7f, 0xfe, 0x59, 0x04, 0x65, 0xbe, 0xe8, 0xb2, 0xb2, - 0x67, 0x2e, 0x3d, 0x06, 0x77, 0xe0, 0x95, 0xae, 0xb6, 0x60, 0x39, 0x0f, - 0x6c, 0x28, 0x33, 0x28, 0x84, 0xe7, 0xff, 0xfc, 0xcb, 0x14, 0x4d, 0xb2, - 0x49, 0xcf, 0x74, 0xf1, 0xef, 0x5f, 0xb3, 0x3c, 0xf4, 0xbe, 0xd8, 0x53, - 0x77, 0xb9, 0xc7, 0x79, 0x2c, 0x1c, 0xf4, 0x9d, 0xb1, 0x0f, 0xe7, 0xea, - 0xf6, 0x1e, 0x6c, 0xf1, 0xd2, 0xa5, 0xf0, 0x12, 0xa2, 0xbf, 0x13, 0x5f, - 0xf5, 0x25, 0xb9, 0x1e, 0xe7, 0xcd, 0x55, 0xbc, 0xd5, 0x9f, 0xc3, 0x5b, - 0x6d, 0xae, 0xe4, 0xa8, 0xbe, 0x64, 0x8d, 0x5e, 0xea, 0xab, 0xbe, 0x8a, - 0xd7, 0x2f, 0xa9, 0x53, 0xa6, 0xea, 0xb5, 0x74, 0x29, 0xd3, 0xbe, 0xdd, - 0x52, 0xe6, 0x4f, 0x79, 0xbd, 0x74, 0xb2, 0x64, 0x29, 0xf3, 0x3d, 0xde, - 0xa2, 0x70, 0x83, 0xa3, 0xca, 0xfc, 0xc1, 0x40, 0x31, 0xe8, 0x32, 0x57, - 0x95, 0xaa, 0x74, 0x6e, 0x03, 0xf6, 0x72, 0x9e, 0xa9, 0x57, 0xde, 0x55, - 0xfd, 0x79, 0x20, 0x9c, 0xb0, 0xc8, 0x53, 0x3d, 0xb6, 0x47, 0xab, 0x38, - 0xaa, 0xb6, 0xf7, 0x05, 0x61, 0x19, 0x2b, 0xf8, 0xaa, 0xb0, 0xb3, 0x9f, - 0x9d, 0xa5, 0xce, 0xea, 0xb9, 0x70, 0x22, 0x00, 0xdc, 0xb0, 0x98, 0xa9, - 0x5d, 0xa5, 0x65, 0xae, 0x6a, 0x66, 0xac, 0xc7, 0x51, 0x62, 0x07, 0x66, - 0x23, 0x28, 0xf4, 0x56, 0x53, 0xa0, 0xc0, 0xae, 0x81, 0xa3, 0x07, 0x59, - 0xe8, 0xc2, 0x91, 0xf8, 0x44, 0x81, 0xf3, 0x68, 0x9c, 0xa6, 0x5b, 0x36, - 0x16, 0xaf, 0xb0, 0xf4, 0x89, 0x55, 0x91, 0x9f, 0xea, 0xa5, 0x4f, 0xf9, - 0xda, 0x0d, 0x84, 0x0f, 0xc8, 0x7d, 0x74, 0x13, 0xcc, 0x6c, 0x76, 0xd2, - 0x5f, 0x1e, 0x3f, 0x43, 0x49, 0x7c, 0x6a, 0xb4, 0x2f, 0x9f, 0x1d, 0x23, - 0x01, 0x9f, 0x3a, 0x01, 0x6d, 0x20, 0x5b, 0x22, 0x4e, 0x78, 0xf6, 0x12, - 0x09, 0xf8, 0xd4, 0x09, 0xcf, 0x8e, 0x29, 0x01, 0x9f, 0x71, 0xc2, 0x4b, - 0xc2, 0x81, 0x4f, 0x9d, 0xf0, 0x41, 0x92, 0xa1, 0xaf, 0x38, 0x49, 0x12, - 0xa2, 0xaf, 0x38, 0x49, 0x92, 0xa2, 0xaf, 0x38, 0x49, 0x12, 0xa3, 0xaf, - 0x38, 0x49, 0x92, 0xc3, 0x97, 0x49, 0x92, 0x04, 0xe9, 0x2b, 0xae, 0xc6, - 0x07, 0xa6, 0x48, 0x5f, 0x26, 0x49, 0x56, 0xed, 0x43, 0xa2, 0x6e, 0x1f, - 0x98, 0x22, 0x7d, 0xc5, 0xbc, 0x7f, 0x60, 0xf4, 0xf4, 0x65, 0x92, 0x64, - 0x7d, 0x3e, 0x24, 0xd0, 0x1f, 0x7f, 0xa0, 0x82, 0xf4, 0x65, 0x04, 0xf7, - 0x81, 0xa0, 0xe8, 0xcb, 0x88, 0x8e, 0xa1, 0xe8, 0xcb, 0x08, 0xef, 0x83, - 0x94, 0xde, 0x87, 0x84, 0xf8, 0x38, 0x89, 0xbe, 0x8c, 0x00, 0x19, 0x17, - 0x7d, 0x19, 0x8a, 0xdc, 0x23, 0xe8, 0x2b, 0x47, 0xb1, 0x18, 0xca, 0x34, - 0x17, 0x25, 0xd1, 0x97, 0xa1, 0xc8, 0x49, 0xf8, 0x2a, 0x4c, 0x4a, 0xeb, - 0x8c, 0x89, 0x8b, 0x36, 0x5a, 0xd3, 0xea, 0xe1, 0xa3, 0xf2, 0xf6, 0xdd, - 0xf1, 0x9b, 0xc3, 0xd7, 0x1a, 0x43, 0xbb, 0xb3, 0x47, 0x64, 0x8e, 0xe0, - 0xdb, 0x9f, 0x1c, 0x65, 0x71, 0x98, 0x38, 0x65, 0x85, 0x44, 0x62, 0x21, - 0x1c, 0x6f, 0x8f, 0x62, 0x0c, 0xbb, 0x48, 0x20, 0x13, 0x7f, 0xfa, 0xeb, - 0x17, 0x87, 0x27, 0xef, 0x75, 0x72, 0xb7, 0xa3, 0x93, 0x93, 0xa9, 0xdb, - 0x7b, 0x3a, 0xf5, 0xcd, 0xd1, 0x37, 0xaf, 0x7e, 0xf9, 0x46, 0xa7, 0xef, - 0x6e, 0xeb, 0xf4, 0x93, 0xd7, 0xef, 0xe2, 0xea, 0xed, 0xb5, 0x62, 0xd4, - 0xc9, 0xe4, 0x27, 0x86, 0x62, 0x32, 0xbd, 0xdd, 0x8e, 0x49, 0xbe, 0x7c, - 0x7d, 0xf8, 0xfc, 0xd5, 0xe1, 0xeb, 0xb8, 0x3e, 0xa6, 0x46, 0x26, 0x86, - 0x59, 0x56, 0xc9, 0xd4, 0xc8, 0xe2, 0xd1, 0x27, 0x26, 0x8d, 0x34, 0x4e, - 0xc8, 0xca, 0xc4, 0xc4, 0x13, 0xa7, 0x11, 0x60, 0x48, 0x02, 0xf3, 0x90, - 0x6c, 0x2c, 0xda, 0x8e, 0x4c, 0xcd, 0x56, 0x75, 0x5b, 0x27, 0xbf, 0x3e, - 0x3c, 0x7e, 0x79, 0x14, 0x0b, 0x40, 0xa7, 0xfe, 0x5a, 0x26, 0x1b, 0xce, - 0x29, 0x2c, 0xe8, 0x01, 0xc5, 0xd5, 0x98, 0x09, 0x22, 0xdd, 0x83, 0x18, - 0x87, 0x38, 0x54, 0x1b, 0x8e, 0x33, 0x16, 0xcd, 0x19, 0x76, 0x58, 0xfe, - 0x10, 0xd6, 0x18, 0xb0, 0x20, 0x12, 0x0e, 0xb6, 0x7b, 0x44, 0xa1, 0x63, - 0x5b, 0xc5, 0x48, 0x12, 0x71, 0x3b, 0xc7, 0x09, 0x00, 0xb8, 0x6b, 0x27, - 0x9c, 0xdf, 0x87, 0xe3, 0xcc, 0x0b, 0x47, 0xd5, 0xda, 0x55, 0x85, 0x76, - 0xf4, 0x69, 0x1e, 0x81, 0x00, 0x98, 0x7d, 0x2a, 0x21, 0x4c, 0x6e, 0x54, - 0xf7, 0x6a, 0x57, 0x81, 0x88, 0x16, 0x81, 0x57, 0x15, 0xfd, 0x77, 0x03, - 0xb2, 0x73, 0x4d, 0xcc, 0x2c, 0x60, 0xe4, 0x22, 0x9f, 0x02, 0xde, 0xde, - 0x8d, 0xff, 0xf4, 0xa7, 0xab, 0xd3, 0xd3, 0x39, 0x3d, 0x9f, 0x9e, 0xf6, - 0x3e, 0x7e, 0xba, 0x26, 0x0b, 0x4a, 0x97, 0x54, 0x63, 0x31, 0xf7, 0x90, - 0xee, 0x26, 0x7d, 0xf4, 0x28, 0xc6, 0x26, 0xea, 0x51, 0xed, 0x4a, 0x34, - 0x63, 0xf0, 0x7e, 0x74, 0xfd, 0xa7, 0x3f, 0xa5, 0x73, 0xc7, 0xb8, 0x43, - 0x8d, 0x78, 0xf0, 0xf8, 0x3e, 0xfb, 0x5a, 0xd4, 0x9c, 0xda, 0xe1, 0xbb, - 0x73, 0x0f, 0xf4, 0xe6, 0x30, 0xe9, 0x97, 0x55, 0xaf, 0xf6, 0xe8, 0x51, - 0x55, 0x7c, 0xf4, 0x3e, 0xf5, 0x23, 0x7c, 0xd4, 0xae, 0x6b, 0xcc, 0xe2, - 0xf5, 0xbe, 0xc2, 0x82, 0x32, 0x92, 0xe7, 0xf8, 0xd9, 0x47, 0x0d, 0xe5, - 0x1d, 0x0c, 0xbe, 0x87, 0x4a, 0x2e, 0xd0, 0xdc, 0x01, 0xe8, 0x0a, 0x06, - 0xab, 0x47, 0x4d, 0x66, 0x45, 0xdd, 0x58, 0x8e, 0x3b, 0x52, 0xfb, 0x7d, - 0xef, 0xc7, 0xaa, 0x9a, 0x43, 0x76, 0xbd, 0x41, 0xb1, 0x57, 0xf5, 0x93, - 0x60, 0xe6, 0x77, 0x1d, 0x77, 0xef, 0x59, 0x7e, 0xed, 0x9a, 0x19, 0x36, - 0x42, 0xd3, 0x12, 0xb3, 0x92, 0x55, 0x53, 0x5c, 0xa8, 0xe0, 0xc4, 0xa8, - 0xce, 0x4f, 0x8c, 0x50, 0x5c, 0x5f, 0x57, 0x6b, 0x75, 0xbf, 0x6f, 0xa0, - 0x13, 0xec, 0xab, 0x26, 0x20, 0x0a, 0x7e, 0x5f, 0x34, 0x87, 0x78, 0x75, - 0x62, 0x95, 0x8a, 0xd6, 0x2b, 0x3c, 0x7b, 0xab, 0x20, 0xf3, 0x4f, 0x7f, - 0xa2, 0x84, 0x7d, 0x45, 0xd3, 0x6f, 0xaa, 0xf5, 0xe1, 0x7e, 0xa4, 0x7f, - 0xd5, 0xfd, 0x26, 0x03, 0x83, 0xaa, 0x7f, 0xad, 0xc0, 0xa2, 0xaa, 0x57, - 0x17, 0xb5, 0xba, 0x77, 0x8d, 0xfa, 0xd5, 0x83, 0x25, 0xb4, 0xeb, 0x3e, - 0xa8, 0xfb, 0x08, 0xaa, 0x6d, 0x41, 0x36, 0x11, 0x84, 0x1f, 0xf5, 0xdb, - 0xa2, 0x5b, 0xab, 0xc7, 0x69, 0x1e, 0xd2, 0x10, 0xba, 0x58, 0xa9, 0xb1, - 0xee, 0x04, 0x69, 0x26, 0x87, 0xae, 0x1f, 0x62, 0xc6, 0xe4, 0x67, 0x98, - 0x0c, 0x9a, 0x98, 0x12, 0x3e, 0xc7, 0x86, 0xa2, 0xd7, 0x7f, 0xd0, 0xaa, - 0x07, 0x68, 0x9b, 0x11, 0xf8, 0xc5, 0x0f, 0x88, 0x3c, 0xf4, 0xbd, 0xbe, - 0x57, 0x0f, 0x0a, 0x19, 0x75, 0x92, 0x42, 0x76, 0xc6, 0x55, 0xb8, 0xf4, - 0x1c, 0x57, 0x87, 0xdd, 0xcc, 0x07, 0x7d, 0x08, 0x93, 0x94, 0x2e, 0xd6, - 0xf1, 0x9a, 0xc4, 0x60, 0x12, 0xae, 0xeb, 0x61, 0xff, 0x0a, 0x87, 0x71, - 0x54, 0x8f, 0x60, 0x3c, 0xdf, 0x08, 0xf2, 0x87, 0xda, 0x62, 0xbb, 0x8e, - 0x0e, 0x57, 0x94, 0xd1, 0xfd, 0xe1, 0xb6, 0xe8, 0xfe, 0xe0, 0x8d, 0x1d, - 0x4d, 0x9b, 0x98, 0x9e, 0x8e, 0xfc, 0x59, 0xb5, 0x46, 0xa0, 0xbf, 0x9c, - 0x53, 0x30, 0x57, 0x6f, 0x47, 0x74, 0xeb, 0x41, 0xb6, 0xd4, 0x4b, 0xcc, - 0x32, 0x5f, 0xd8, 0xa4, 0x68, 0xbd, 0x76, 0xb3, 0x5b, 0x37, 0xb9, 0xef, - 0x51, 0x04, 0x6b, 0x65, 0xbd, 0x6d, 0x94, 0x62, 0x3e, 0xa2, 0x80, 0xd6, - 0x8c, 0xdb, 0x5b, 0xad, 0xfa, 0x48, 0x0c, 0x16, 0x93, 0xde, 0x83, 0xf6, - 0xf5, 0x7e, 0x56, 0x77, 0x12, 0x0d, 0x22, 0xa0, 0x48, 0xac, 0x0e, 0x19, - 0xe1, 0x5f, 0x5d, 0x4b, 0xe1, 0xfb, 0x7d, 0x16, 0x32, 0xab, 0xd6, 0xa9, - 0xeb, 0x90, 0x43, 0x2a, 0x02, 0xd4, 0x99, 0x5b, 0x1f, 0x7d, 0xb3, 0xae, - 0x14, 0x82, 0x7e, 0x52, 0xcc, 0x2a, 0x7d, 0x73, 0x0b, 0x51, 0xbf, 0xad, - 0xcb, 0x62, 0x20, 0x1f, 0x5c, 0xf2, 0xc4, 0x05, 0x91, 0x9e, 0x2a, 0x2d, - 0x9c, 0x52, 0xf0, 0x5b, 0x2c, 0x1d, 0xb4, 0x99, 0xca, 0x50, 0x09, 0xaf, - 0x21, 0xde, 0xfe, 0x03, 0x0d, 0x3d, 0xc0, 0x12, 0x5e, 0x70, 0xf9, 0x5e, - 0x46, 0xc3, 0xba, 0xfe, 0xa0, 0xa2, 0xd2, 0x99, 0xd2, 0x73, 0xe8, 0x86, - 0x18, 0x19, 0x60, 0xc5, 0xd1, 0x2f, 0x16, 0x02, 0xb1, 0xeb, 0x1f, 0x3f, - 0xc9, 0x54, 0xdf, 0x63, 0xd8, 0xbe, 0xac, 0xa6, 0x4e, 0xe3, 0x5a, 0x64, - 0xd2, 0x54, 0xf1, 0x4c, 0x2a, 0xd5, 0x2d, 0x95, 0x74, 0x3a, 0x45, 0xd3, - 0xb9, 0xe2, 0x1d, 0xd2, 0x53, 0xaa, 0xee, 0x37, 0x4f, 0x59, 0xf0, 0xd5, - 0x0a, 0x15, 0xb1, 0xf8, 0xf2, 0x46, 0xa5, 0xc8, 0x51, 0x1f, 0x99, 0xbe, - 0x9c, 0x45, 0x35, 0xe3, 0x06, 0xaf, 0x03, 0x6f, 0xdc, 0x19, 0x7e, 0x9c, - 0xc8, 0xe8, 0x45, 0xfb, 0x43, 0xe8, 0x73, 0xa0, 0x9a, 0xb8, 0xea, 0xc7, - 0xc2, 0x51, 0x29, 0xb5, 0x3a, 0x92, 0x16, 0x0c, 0xab, 0x52, 0xfa, 0xb0, - 0xa3, 0x1a, 0x3c, 0x6f, 0x3b, 0x00, 0x8d, 0xcb, 0x9f, 0x31, 0x6b, 0x07, - 0xd3, 0x48, 0xbe, 0xae, 0x7b, 0x8c, 0xe1, 0x3c, 0x6c, 0x26, 0xe4, 0x8b, - 0x04, 0xf3, 0x84, 0xec, 0x94, 0x38, 0x9b, 0xb0, 0xa5, 0x47, 0x98, 0x6e, - 0x1b, 0xe4, 0x22, 0xc6, 0x2e, 0x31, 0x85, 0xb8, 0x96, 0x10, 0x89, 0xd7, - 0xc0, 0x9c, 0x6f, 0x09, 0x5f, 0x09, 0xf2, 0xd1, 0x23, 0xf5, 0x8b, 0xca, - 0x23, 0xd5, 0x28, 0x56, 0x93, 0x12, 0xf3, 0x54, 0xa2, 0x24, 0x15, 0xb2, - 0x05, 0x47, 0x24, 0xd6, 0xd7, 0xaa, 0x14, 0xa9, 0x30, 0x28, 0x5e, 0xa7, - 0x1a, 0x46, 0x2d, 0x1e, 0x94, 0xb4, 0x8d, 0xe2, 0x4c, 0x37, 0x0f, 0x73, - 0xa6, 0xd2, 0xc0, 0x9c, 0x79, 0xc8, 0xf1, 0xa7, 0xd2, 0xef, 0x84, 0x45, - 0x9e, 0x3b, 0x94, 0x30, 0xc8, 0x9a, 0xa9, 0xd8, 0xab, 0x0b, 0x45, 0x56, - 0x32, 0x63, 0xd6, 0x89, 0xab, 0x4a, 0x21, 0x2b, 0xef, 0x5f, 0xbd, 0x39, - 0x7a, 0xf7, 0xcb, 0xf7, 0x15, 0xa8, 0x50, 0x0c, 0xfb, 0xe3, 0x4a, 0x24, - 0x35, 0xa1, 0xd2, 0x93, 0x60, 0xb2, 0x96, 0x8c, 0xf8, 0xd1, 0xa3, 0xf8, - 0x27, 0xd7, 0xd0, 0x90, 0xbd, 0x10, 0x43, 0x4b, 0xd2, 0x8e, 0xeb, 0x5c, - 0xc9, 0x88, 0x80, 0xb3, 0x6f, 0x29, 0x00, 0xc2, 0xa4, 0x99, 0xcf, 0x48, - 0xe3, 0x39, 0xfa, 0x67, 0x59, 0x73, 0x51, 0xdf, 0x4d, 0x36, 0xd6, 0x69, - 0xb2, 0x63, 0x84, 0x34, 0xd4, 0xe5, 0x2c, 0x0a, 0xaa, 0x68, 0x48, 0xc9, - 0xaa, 0x33, 0x16, 0xa4, 0xab, 0x9f, 0xf9, 0xc6, 0xa5, 0xd4, 0xaf, 0x6d, - 0xda, 0x45, 0xe0, 0xf6, 0x85, 0xfa, 0xcd, 0xa3, 0x3a, 0xa6, 0xec, 0xa1, - 0x1a, 0x9c, 0xe3, 0xde, 0xdf, 0xf7, 0xd4, 0xb3, 0x91, 0x85, 0xa2, 0xa0, - 0x1c, 0x05, 0x39, 0x04, 0x69, 0x17, 0x05, 0x24, 0x2a, 0x2a, 0xa0, 0xf7, - 0xd5, 0x5b, 0xcc, 0x25, 0xae, 0x30, 0xde, 0xf7, 0xf2, 0xfd, 0xbb, 0x75, - 0x5d, 0xc7, 0x6a, 0x3c, 0x16, 0xe1, 0x68, 0xa2, 0xdd, 0x83, 0x45, 0x05, - 0xf6, 0xb1, 0x33, 0x59, 0xe8, 0x67, 0x88, 0xbf, 0x14, 0xfd, 0xbb, 0x6f, - 0x8f, 0xde, 0x96, 0x22, 0x6e, 0x7f, 0x05, 0xe2, 0xe7, 0xaf, 0xdf, 0x9d, - 0x2c, 0x63, 0xba, 0xf3, 0x95, 0xb8, 0x8f, 0xbe, 0x29, 0x45, 0xdd, 0xbd, - 0x35, 0xea, 0xd8, 0x1f, 0x5b, 0x4d, 0xf0, 0xa2, 0x69, 0x80, 0xee, 0x84, - 0x26, 0xb5, 0xc6, 0x12, 0x6a, 0x94, 0x7d, 0x27, 0x74, 0x54, 0xe3, 0x2c, - 0x21, 0x45, 0x10, 0x77, 0x55, 0x2b, 0xd9, 0x5c, 0x4b, 0x88, 0x49, 0x80, - 0x3b, 0xa1, 0x65, 0xc6, 0xb0, 0x52, 0x7a, 0xb2, 0x07, 0x9e, 0x87, 0x3f, - 0xa6, 0x1f, 0x99, 0x61, 0xb0, 0x97, 0xf5, 0x3b, 0xe0, 0xe8, 0x31, 0x12, - 0x63, 0x9d, 0xb2, 0x10, 0xe8, 0xf5, 0x1a, 0x11, 0xb9, 0xb4, 0x06, 0xa7, - 0x01, 0xa8, 0xdd, 0x49, 0xd5, 0x8c, 0x3b, 0x55, 0x5a, 0x35, 0xf6, 0x2d, - 0xe1, 0x0e, 0x56, 0xb3, 0x0e, 0x58, 0xbd, 0x75, 0x37, 0x3c, 0x0c, 0x16, - 0xe3, 0xb1, 0xc0, 0x56, 0xc5, 0xe1, 0x6c, 0x29, 0x1f, 0x79, 0x87, 0xac, - 0x89, 0x42, 0x8b, 0xa1, 0xa8, 0x26, 0xe7, 0x31, 0x1a, 0xbc, 0x22, 0x77, - 0x9e, 0x2a, 0x7d, 0xed, 0x77, 0x47, 0x3f, 0x16, 0x3f, 0xc4, 0x9c, 0x03, - 0x0b, 0x95, 0x13, 0x9c, 0xaf, 0x8b, 0xac, 0xc4, 0x3c, 0xf0, 0x19, 0xbc, - 0x40, 0x99, 0xcb, 0x77, 0xd9, 0xf0, 0xaf, 0xc1, 0x65, 0x24, 0x5e, 0x33, - 0x6c, 0x5d, 0x5c, 0xa3, 0xa6, 0x3f, 0xac, 0xe6, 0x9b, 0x38, 0xcd, 0x78, - 0xef, 0x8e, 0xc4, 0x21, 0x2e, 0x30, 0x14, 0x84, 0x64, 0xd9, 0xd7, 0xd0, - 0x36, 0x53, 0xa8, 0x57, 0xa9, 0xdc, 0x09, 0x1b, 0x7a, 0xbc, 0x59, 0x83, - 0x09, 0x5d, 0xe4, 0xae, 0x58, 0x08, 0x68, 0xef, 0xf2, 0x04, 0x6f, 0x5c, - 0x5e, 0xa7, 0xdf, 0x99, 0x42, 0xbd, 0x3b, 0x37, 0xa5, 0x8b, 0x60, 0x1d, - 0x71, 0x2c, 0x82, 0xd5, 0x24, 0x91, 0x20, 0xd1, 0x94, 0x13, 0x8b, 0x94, - 0x42, 0x9b, 0xd9, 0x94, 0xa0, 0xb5, 0x05, 0x9e, 0xde, 0x16, 0x4d, 0x59, - 0x5a, 0xc5, 0xb3, 0x21, 0x3d, 0x97, 0xc9, 0xfb, 0x39, 0xcb, 0x64, 0x87, - 0x83, 0x74, 0x94, 0xaa, 0xac, 0xa8, 0x81, 0x60, 0x8a, 0xcc, 0x16, 0x5b, - 0xb5, 0xb4, 0x53, 0xd5, 0xc3, 0x4b, 0x47, 0x18, 0x85, 0xc5, 0x8f, 0xa3, - 0x4a, 0x11, 0x10, 0x0e, 0x25, 0xfc, 0x91, 0x3a, 0xef, 0x88, 0x0e, 0x80, - 0x63, 0xb3, 0x2e, 0xee, 0x88, 0x95, 0xda, 0x75, 0x4a, 0x14, 0xf1, 0xbc, - 0x35, 0x23, 0x8e, 0xe5, 0x73, 0xbe, 0xfc, 0x34, 0x2e, 0x3f, 0x6b, 0x34, - 0xa6, 0xf5, 0xe6, 0x9a, 0xab, 0x6e, 0x6f, 0xfc, 0x64, 0x66, 0x22, 0xeb, - 0x71, 0xc9, 0x8a, 0x9a, 0x84, 0x74, 0x55, 0x78, 0x22, 0x93, 0xf2, 0x46, - 0x97, 0x72, 0xd0, 0x97, 0x1c, 0xf0, 0xc8, 0xcc, 0xf4, 0x8d, 0x04, 0x09, - 0x11, 0x5c, 0x78, 0x45, 0xdf, 0xcc, 0x91, 0xc0, 0x40, 0x1a, 0x50, 0x09, - 0x59, 0xc2, 0xe6, 0x0d, 0xe7, 0x7c, 0x11, 0x4e, 0x51, 0x2a, 0xc3, 0x26, - 0x0e, 0xfc, 0xa5, 0xbc, 0xd1, 0x8c, 0xe0, 0x33, 0xf3, 0xf6, 0x8f, 0xe2, - 0xd3, 0xa3, 0x47, 0xf9, 0x34, 0x89, 0x3b, 0xca, 0x35, 0x26, 0xbd, 0x8d, - 0x60, 0x5d, 0xec, 0xd5, 0x7c, 0x62, 0xbf, 0x80, 0x22, 0xde, 0x1e, 0x84, - 0x8d, 0x9d, 0xa2, 0x79, 0x24, 0xb7, 0xe6, 0x75, 0xa6, 0x9e, 0x4a, 0x48, - 0x86, 0xbe, 0x59, 0xd6, 0x93, 0x73, 0xfc, 0x7e, 0x6b, 0x3f, 0x7a, 0x8a, - 0x85, 0x30, 0x3e, 0x8a, 0x19, 0xaa, 0x21, 0x63, 0x3f, 0xfa, 0xe1, 0x0f, - 0x6b, 0xe2, 0x63, 0xf4, 0xa9, 0x1f, 0xe7, 0xe0, 0x61, 0x3f, 0xe5, 0x8a, - 0x37, 0x19, 0xf1, 0xa3, 0x47, 0x89, 0x03, 0xa4, 0x74, 0xfe, 0xd4, 0xbd, - 0xac, 0xaa, 0x94, 0xfa, 0x47, 0x6c, 0x23, 0x9c, 0x1c, 0x54, 0x3e, 0xd1, - 0x72, 0xdf, 0xd0, 0x8e, 0xf2, 0x6d, 0x70, 0x0a, 0xeb, 0xf2, 0x16, 0xd6, - 0x9c, 0x57, 0x6a, 0x92, 0x2c, 0x4a, 0xf6, 0x52, 0xe4, 0xc0, 0xa9, 0x68, - 0x2e, 0x59, 0xde, 0xc9, 0xae, 0x06, 0x2c, 0x5b, 0x09, 0xc2, 0xda, 0x1b, - 0x90, 0x15, 0x2d, 0x32, 0xd5, 0x03, 0x83, 0xc5, 0x07, 0x96, 0xc2, 0x85, - 0x28, 0xbf, 0xee, 0x50, 0x71, 0xfb, 0x22, 0x5f, 0x7c, 0x68, 0x8a, 0x3b, - 0x28, 0x5e, 0xb8, 0xc0, 0xe5, 0xd4, 0x17, 0xfd, 0x40, 0x2f, 0x2d, 0x65, - 0xbb, 0xec, 0x41, 0x0b, 0x9a, 0x80, 0x7c, 0xb9, 0xca, 0x35, 0xf7, 0xcf, - 0xab, 0x5e, 0xae, 0x5b, 0x37, 0xda, 0xb5, 0xda, 0xc1, 0x90, 0xe1, 0x86, - 0xb5, 0x7a, 0xaa, 0x2b, 0x78, 0x90, 0x26, 0x36, 0xcf, 0x38, 0x4a, 0x60, - 0x51, 0xab, 0x2f, 0x32, 0xf2, 0x3e, 0xb7, 0x9d, 0xa8, 0x58, 0xce, 0x9a, - 0x1f, 0x5a, 0x45, 0xc5, 0x78, 0x80, 0xf0, 0x62, 0x91, 0x9a, 0xc7, 0x25, - 0xd6, 0x47, 0xa2, 0x7a, 0xa6, 0xe5, 0xaa, 0x68, 0xd7, 0x92, 0x96, 0xfd, - 0x65, 0xe0, 0x26, 0x54, 0x9f, 0xd7, 0x09, 0x73, 0xce, 0x8a, 0x50, 0x8b, - 0x83, 0x8a, 0x2e, 0xb5, 0x32, 0xd4, 0xe7, 0x33, 0xcd, 0x32, 0xf7, 0x09, - 0x5e, 0x97, 0x4f, 0x94, 0x90, 0x9c, 0x43, 0x23, 0xaa, 0x0c, 0x92, 0xf7, - 0x7f, 0xca, 0x50, 0x46, 0x0c, 0x1f, 0x35, 0x23, 0xec, 0x1c, 0x6a, 0x98, - 0xe8, 0x3a, 0x9a, 0xd2, 0x2d, 0x22, 0x47, 0x3c, 0xab, 0xc7, 0x6e, 0xf6, - 0x67, 0x9b, 0x2e, 0x2e, 0xf8, 0xe5, 0xf1, 0xeb, 0x8c, 0x95, 0xd6, 0x26, - 0xaf, 0x44, 0x84, 0x84, 0xf9, 0x41, 0x6e, 0x2d, 0xee, 0xd1, 0xa3, 0x42, - 0x1b, 0x5e, 0xbb, 0x2a, 0x58, 0xb5, 0x6b, 0xc9, 0xd5, 0xae, 0x8c, 0xe2, - 0x7b, 0xf0, 0xd0, 0xcc, 0x0a, 0x25, 0x54, 0xd7, 0xac, 0x38, 0xfe, 0x38, - 0x4c, 0xe4, 0xf4, 0xb0, 0x52, 0x0b, 0xd0, 0xdc, 0x12, 0x67, 0x52, 0x29, - 0x03, 0x94, 0xc8, 0xaf, 0x81, 0x06, 0xf5, 0x05, 0x0a, 0xc6, 0x6b, 0xb3, - 0x75, 0xdb, 0x14, 0x58, 0xfc, 0xd8, 0xa9, 0xd6, 0x7a, 0x0b, 0xaa, 0x5b, - 0x4e, 0x55, 0xfb, 0x7e, 0x2d, 0xa5, 0x7c, 0x60, 0xc5, 0x0a, 0x24, 0x2f, - 0xf8, 0xa6, 0xe0, 0x12, 0xd8, 0xef, 0x9c, 0x23, 0x5d, 0x39, 0xe8, 0xd3, - 0x22, 0xf4, 0x3e, 0x5e, 0x67, 0x2b, 0xae, 0x0a, 0xd0, 0xfe, 0xf0, 0x87, - 0x69, 0x95, 0x56, 0xec, 0xe6, 0x31, 0x69, 0xd5, 0x97, 0xe6, 0x56, 0x5b, - 0x5a, 0x1a, 0xec, 0x63, 0x95, 0x89, 0x57, 0xa2, 0xab, 0xd3, 0xbe, 0x8d, - 0x75, 0xef, 0x0e, 0x4c, 0xe4, 0x54, 0x4f, 0xcd, 0x6a, 0xa9, 0x66, 0x7f, - 0xeb, 0x5b, 0xb2, 0xdd, 0x63, 0x31, 0xc8, 0xb3, 0xff, 0xb4, 0xa3, 0xfc, - 0xd9, 0x41, 0xc0, 0x96, 0x5a, 0x8b, 0x9c, 0xb2, 0x15, 0x94, 0x5d, 0xa9, - 0x5a, 0x63, 0x45, 0x2a, 0x58, 0x31, 0x4c, 0xf5, 0x80, 0xaa, 0xe0, 0xd5, - 0x8d, 0xda, 0x75, 0x16, 0x9c, 0x76, 0x60, 0x52, 0x83, 0xf8, 0x8f, 0x45, - 0x76, 0x1d, 0xb7, 0x87, 0xc2, 0x39, 0x49, 0x5c, 0x01, 0x1b, 0x8c, 0x58, - 0xbc, 0x4a, 0xd2, 0x03, 0x4c, 0xfc, 0x40, 0x4e, 0x16, 0x8d, 0x96, 0xfd, - 0x64, 0xe2, 0x8f, 0xa9, 0x5f, 0xdb, 0xdc, 0x75, 0x4d, 0x62, 0xad, 0xa7, - 0x52, 0x51, 0x22, 0x37, 0xe5, 0x4a, 0xad, 0x66, 0xe6, 0xd8, 0xa2, 0x14, - 0x8c, 0xa0, 0x49, 0xa1, 0x1b, 0x98, 0x95, 0xd6, 0x54, 0x85, 0x5e, 0xbe, - 0xd2, 0x20, 0xe8, 0x6b, 0x43, 0x36, 0x24, 0xd7, 0xc9, 0x4e, 0x97, 0x01, - 0x4b, 0x75, 0xbd, 0xa4, 0x9a, 0xe8, 0x35, 0x3b, 0xbd, 0xd6, 0x95, 0x5f, - 0x2f, 0xac, 0xf2, 0x06, 0x51, 0x55, 0xfe, 0xd6, 0x0b, 0x7f, 0x0a, 0x30, - 0x3f, 0x68, 0x3a, 0x61, 0xa1, 0x43, 0x46, 0x0a, 0x5b, 0xe0, 0xa2, 0xde, - 0xe0, 0x74, 0x2a, 0x56, 0xf3, 0x9a, 0xba, 0x0f, 0x5d, 0xbe, 0x2a, 0xf0, - 0x37, 0xf3, 0xeb, 0x7b, 0xcc, 0x3d, 0x2f, 0x99, 0x69, 0x86, 0x31, 0xa2, - 0x0e, 0xa7, 0x64, 0x53, 0x73, 0x02, 0x33, 0x6b, 0xd5, 0xa5, 0xd2, 0x92, - 0x20, 0x16, 0x5f, 0x96, 0x51, 0xcb, 0xfb, 0x8d, 0xad, 0x34, 0xc6, 0xfc, - 0xda, 0x5d, 0x46, 0x2a, 0x15, 0x25, 0x67, 0x96, 0x3d, 0x6d, 0x16, 0xfe, - 0x38, 0x6a, 0x26, 0x92, 0xc0, 0x65, 0x8f, 0x3e, 0x52, 0x58, 0x73, 0xe2, - 0xc8, 0x32, 0x6b, 0x16, 0x04, 0x0c, 0xdf, 0x99, 0x22, 0x15, 0x23, 0xe3, - 0x22, 0xaf, 0x4b, 0x6e, 0x25, 0x54, 0x72, 0xfb, 0x0e, 0x37, 0x94, 0x52, - 0x3b, 0x65, 0xf9, 0x46, 0xb8, 0xa1, 0x5c, 0x7c, 0x0b, 0x7a, 0xc1, 0x7a, - 0xfa, 0x8d, 0x65, 0xe5, 0x16, 0x62, 0x5e, 0x6d, 0xd3, 0xaa, 0x29, 0xbb, - 0xdd, 0x5a, 0x22, 0x93, 0xf0, 0x79, 0x79, 0x21, 0x7d, 0x5d, 0x61, 0xa1, - 0xc8, 0xfa, 0x92, 0x42, 0xa1, 0xdb, 0x89, 0x09, 0x05, 0x6f, 0x2b, 0xa3, - 0x64, 0x47, 0x4c, 0x09, 0x29, 0x99, 0xc1, 0x62, 0xca, 0x6f, 0x0d, 0xe5, - 0x40, 0x32, 0x5b, 0x45, 0x44, 0x0b, 0x9b, 0xc4, 0xf8, 0x3f, 0x0e, 0x5d, - 0xa0, 0x2b, 0x63, 0x11, 0xb1, 0x80, 0x73, 0x5d, 0x78, 0x5d, 0x32, 0x1c, - 0xe1, 0x21, 0x07, 0x11, 0x37, 0xf5, 0x5d, 0xba, 0x80, 0xa3, 0x2b, 0x5d, - 0x24, 0x54, 0xbf, 0x6f, 0x55, 0x08, 0xc2, 0xa5, 0xc7, 0x0a, 0x5d, 0xdf, - 0x62, 0xd2, 0x2b, 0xfa, 0x76, 0x16, 0x8d, 0xb1, 0xd2, 0x7e, 0xd2, 0x69, - 0xb6, 0x77, 0xf7, 0x9a, 0xed, 0x0e, 0x5e, 0x03, 0xde, 0xee, 0x56, 0xe4, - 0x0b, 0x6d, 0x79, 0xfb, 0x1c, 0xd3, 0x49, 0x1a, 0x55, 0x08, 0xea, 0x9c, - 0x02, 0x12, 0x2a, 0xd6, 0x0f, 0xb9, 0x18, 0xbe, 0x2a, 0xbd, 0xbd, 0x76, - 0x45, 0x73, 0x17, 0x1f, 0x1b, 0x35, 0x31, 0x15, 0xae, 0xcd, 0xf1, 0xc4, - 0x26, 0x7c, 0x2c, 0xa2, 0x83, 0xc5, 0xa7, 0x63, 0x19, 0x7c, 0xf7, 0xf0, - 0x05, 0xff, 0xa5, 0xf3, 0x74, 0xd8, 0x2d, 0xbf, 0x6b, 0x3c, 0x9b, 0x39, - 0x90, 0x81, 0x79, 0xea, 0x2d, 0xf0, 0x99, 0xbc, 0xc8, 0x93, 0xc5, 0xf6, - 0x5a, 0xcf, 0x5b, 0xb9, 0x2c, 0x04, 0x7d, 0x48, 0x8a, 0xc0, 0x1a, 0xe7, - 0x7e, 0x76, 0x42, 0x67, 0xe0, 0xb8, 0x4e, 0x84, 0xe0, 0xb8, 0x8f, 0x9f, - 0x64, 0xa2, 0x3a, 0x44, 0x7c, 0x4a, 0xed, 0x4b, 0xe1, 0x6d, 0xfa, 0x70, - 0x70, 0x3a, 0x46, 0x96, 0xee, 0xec, 0x41, 0x62, 0x1c, 0x0d, 0x77, 0xea, - 0xa9, 0x70, 0x38, 0x8e, 0xf9, 0x90, 0xe2, 0x90, 0x6b, 0x12, 0x46, 0x18, - 0x53, 0x13, 0xe2, 0xaa, 0x11, 0xc6, 0xf7, 0x00, 0x67, 0xd3, 0xe6, 0x1c, - 0xbc, 0xda, 0x52, 0x49, 0xf1, 0xf5, 0xb0, 0x39, 0x30, 0xf8, 0x0d, 0x26, - 0x8d, 0x1a, 0x6a, 0xe8, 0x51, 0x39, 0xf3, 0x4c, 0x21, 0x67, 0x69, 0x08, - 0xdc, 0x42, 0x99, 0x82, 0x18, 0x5f, 0xf8, 0xf3, 0x44, 0x19, 0xe1, 0xd1, - 0x1a, 0x0a, 0x95, 0x3b, 0xef, 0xe1, 0xf4, 0x1e, 0x7c, 0xa7, 0xba, 0xa9, - 0x12, 0x2e, 0x7e, 0x30, 0x21, 0x37, 0x7c, 0xe2, 0xd1, 0x14, 0x54, 0x0d, - 0x77, 0x75, 0xde, 0xc3, 0x1b, 0xa5, 0x03, 0xfa, 0x98, 0xd0, 0xc7, 0x80, - 0x3e, 0xa6, 0xe2, 0xa2, 0x57, 0x69, 0xa9, 0x3f, 0x44, 0xb4, 0x9f, 0x77, - 0x18, 0x88, 0x3f, 0x27, 0xfc, 0x39, 0xe8, 0x28, 0xb8, 0x4e, 0x1a, 0xb0, - 0xcb, 0x80, 0xfc, 0x39, 0xe1, 0xcf, 0x41, 0x57, 0x01, 0x76, 0x13, 0x80, - 0xfa, 0xd4, 0x88, 0x7c, 0xd5, 0x8b, 0xc7, 0xf1, 0xcf, 0xd0, 0x68, 0x95, - 0xca, 0x2f, 0x25, 0xe1, 0x84, 0xb8, 0xd6, 0x9d, 0xbd, 0x76, 0x67, 0x7c, - 0x71, 0x2a, 0x6b, 0x40, 0x31, 0x20, 0xc9, 0x4a, 0x9c, 0x62, 0x69, 0x09, - 0xe0, 0x75, 0x53, 0xcb, 0x30, 0xa1, 0x1f, 0xc6, 0xab, 0x4d, 0x95, 0x34, - 0xaf, 0x8e, 0x3c, 0x35, 0x10, 0xc9, 0x72, 0x40, 0x7a, 0x5a, 0x0c, 0x64, - 0x64, 0xe8, 0x84, 0x3a, 0x5d, 0x8c, 0x8c, 0xf4, 0x65, 0xd0, 0xf9, 0x18, - 0x53, 0x8b, 0xe9, 0x29, 0x87, 0xa4, 0xc2, 0x7f, 0x34, 0x65, 0xe8, 0x82, - 0xa1, 0x58, 0x21, 0x4d, 0x1d, 0x64, 0x34, 0x67, 0x8c, 0xc6, 0xb4, 0x21, - 0xad, 0x6d, 0xbc, 0x8a, 0xf6, 0xf9, 0x54, 0x01, 0xbd, 0x53, 0x86, 0x6e, - 0x9e, 0x99, 0x07, 0xe4, 0xcd, 0xd0, 0x89, 0x81, 0x28, 0xc4, 0x81, 0x4c, - 0x86, 0x41, 0x4f, 0x36, 0x51, 0x4b, 0xbf, 0xc2, 0x31, 0x57, 0xd7, 0xb5, - 0xad, 0x9f, 0x85, 0x14, 0x94, 0xa8, 0xde, 0x7e, 0x7e, 0xa2, 0xde, 0xdf, - 0x36, 0xb8, 0xb4, 0x5e, 0x22, 0x61, 0x62, 0x5b, 0xbf, 0x72, 0x70, 0x82, - 0xc4, 0xff, 0xee, 0x77, 0x28, 0x0c, 0x09, 0xf8, 0xe5, 0x89, 0xa5, 0x91, - 0x85, 0x55, 0x93, 0xe0, 0xf2, 0x44, 0x86, 0x5d, 0x05, 0xdf, 0xfd, 0x4e, - 0x1c, 0xda, 0xf0, 0xc7, 0xb0, 0x1a, 0x72, 0xea, 0x91, 0x5b, 0x53, 0x3a, - 0x25, 0x9d, 0x36, 0x73, 0x65, 0x53, 0xaa, 0xa8, 0x81, 0x96, 0xe6, 0x89, - 0x89, 0xc8, 0x34, 0x62, 0x4b, 0xbe, 0xf8, 0x1e, 0x37, 0x2d, 0xb9, 0xf0, - 0xa9, 0x03, 0xd0, 0xed, 0x13, 0x85, 0xc7, 0x0f, 0xf1, 0xf3, 0x71, 0xad, - 0x2e, 0x43, 0xf4, 0x75, 0x1a, 0x3f, 0x20, 0x95, 0xe3, 0xf3, 0x75, 0x22, - 0xfd, 0x46, 0x1a, 0x07, 0xe7, 0xc7, 0x89, 0xf4, 0x40, 0xa9, 0x4a, 0xb9, - 0x74, 0xb2, 0x7c, 0x42, 0xba, 0x54, 0x2f, 0x9d, 0x8c, 0x07, 0xa2, 0xb6, - 0x6f, 0xc5, 0xbc, 0x45, 0xd4, 0xf2, 0x59, 0xd6, 0x10, 0x8a, 0xff, 0x2b, - 0xdb, 0xd5, 0x85, 0x64, 0x42, 0xcc, 0x63, 0x3a, 0x53, 0x27, 0x69, 0x66, - 0xd3, 0xb9, 0x2a, 0x45, 0x73, 0x9d, 0xc9, 0xd5, 0x49, 0x86, 0xfd, 0x74, - 0x7e, 0x9c, 0x16, 0xd7, 0x23, 0x9d, 0xaf, 0x93, 0x50, 0xa1, 0x84, 0xac, - 0x55, 0xf3, 0x7f, 0x23, 0xef, 0xca, 0xe2, 0x3a, 0x49, 0xa5, 0x53, 0x29, - 0xba, 0x74, 0xea, 0xf5, 0x7a, 0x69, 0x14, 0xf2, 0xb5, 0xfb, 0x46, 0x1e, - 0xaf, 0x07, 0x9a, 0xa6, 0x79, 0x1f, 0x3f, 0x92, 0x3f, 0xc5, 0x32, 0x29, - 0x02, 0xe0, 0x8c, 0x4f, 0x5a, 0x2e, 0x45, 0x10, 0x94, 0xfe, 0x49, 0xcb, - 0xa6, 0x10, 0x82, 0x33, 0x3e, 0x19, 0xf9, 0x14, 0xc1, 0xc8, 0x1c, 0x00, - 0xed, 0x2b, 0x95, 0x53, 0x55, 0x52, 0xb7, 0x68, 0x18, 0x85, 0xd6, 0x19, - 0xcf, 0x39, 0xbd, 0x6a, 0xbb, 0xc0, 0x25, 0xbb, 0x5f, 0x3c, 0xde, 0xd2, - 0xf8, 0xfc, 0x00, 0x19, 0x9c, 0xb0, 0xc2, 0x05, 0x65, 0xf2, 0x15, 0x93, - 0x18, 0x72, 0xd9, 0xf6, 0x36, 0x63, 0xfb, 0xa4, 0x2f, 0x2c, 0x1b, 0xc4, - 0xd7, 0x6d, 0x30, 0x51, 0xd0, 0xfb, 0x3d, 0x4c, 0x77, 0xf5, 0x7b, 0x57, - 0x90, 0x5e, 0x93, 0x2f, 0x87, 0xbc, 0xae, 0x5b, 0xdf, 0xbb, 0x62, 0x51, - 0x25, 0x9e, 0x49, 0x30, 0xea, 0xb1, 0xf6, 0xfb, 0xfd, 0x55, 0x39, 0xc1, - 0x0b, 0x26, 0x8b, 0x38, 0x71, 0x60, 0xb1, 0x82, 0x9f, 0xbe, 0x7f, 0xf3, - 0x9a, 0x5c, 0x84, 0x87, 0x04, 0x01, 0x16, 0xde, 0xfb, 0x80, 0xae, 0x7e, - 0x24, 0xf9, 0x2a, 0x4a, 0x75, 0x2b, 0xe6, 0x49, 0x35, 0xaa, 0x7e, 0x30, - 0xdc, 0x7c, 0x4a, 0x5e, 0x06, 0x07, 0x49, 0x9f, 0xc0, 0x10, 0x49, 0x31, - 0x9b, 0xe4, 0x94, 0xdf, 0x24, 0xad, 0x59, 0xb2, 0x94, 0x4c, 0x01, 0x2b, - 0x85, 0xb3, 0x42, 0xeb, 0x8a, 0xd2, 0xa5, 0x97, 0x51, 0x45, 0x37, 0x85, - 0x34, 0x76, 0x5a, 0xba, 0xf8, 0xb5, 0x45, 0x6b, 0x05, 0x6b, 0xb5, 0x4c, - 0xbb, 0x72, 0x63, 0x4b, 0x18, 0x71, 0x35, 0x03, 0x90, 0x4b, 0x25, 0x4c, - 0xb2, 0x09, 0x83, 0x35, 0xdb, 0x83, 0xe8, 0xe7, 0xe5, 0x9f, 0x40, 0x88, - 0x91, 0x72, 0x65, 0x7c, 0xf4, 0xb6, 0xd6, 0xf5, 0xea, 0xd3, 0xc9, 0x55, - 0x28, 0x97, 0x32, 0xe8, 0xac, 0x59, 0xa5, 0xce, 0x0a, 0x55, 0xea, 0xac, - 0x8c, 0x90, 0x5e, 0xd0, 0xba, 0x5e, 0x9d, 0xba, 0xb9, 0x3a, 0xe5, 0x52, - 0x06, 0xdd, 0x35, 0xeb, 0xd4, 0x5d, 0xa1, 0x4e, 0x5d, 0xad, 0x85, 0x66, - 0x6c, 0xe3, 0xcb, 0x03, 0x61, 0x8e, 0x19, 0x86, 0x96, 0x8d, 0xe2, 0x6b, - 0xa7, 0xce, 0xa7, 0x18, 0xcb, 0xbe, 0x79, 0xf7, 0x06, 0x2e, 0x83, 0x3e, - 0xe7, 0x67, 0xec, 0x90, 0x84, 0x87, 0xdd, 0x0e, 0x7e, 0x05, 0xe3, 0x53, - 0x55, 0x63, 0xab, 0x19, 0x77, 0x64, 0x5f, 0xb3, 0xfa, 0xa6, 0x43, 0x4a, - 0xd2, 0xb2, 0x57, 0xa6, 0x61, 0x64, 0x5a, 0x12, 0x8a, 0xbb, 0x6b, 0x1a, - 0x88, 0x93, 0x52, 0x30, 0xd4, 0xef, 0x33, 0x40, 0x9c, 0x96, 0x86, 0x32, - 0x63, 0x92, 0x01, 0x53, 0x89, 0x49, 0x38, 0x33, 0x34, 0x19, 0x30, 0x99, - 0xa6, 0xa0, 0x8a, 0x25, 0x56, 0x28, 0x26, 0x23, 0x25, 0x86, 0x95, 0x3e, - 0x0c, 0x6b, 0x83, 0x11, 0x14, 0xf0, 0xc8, 0xb7, 0xcf, 0x0c, 0x26, 0x0a, - 0x11, 0xa7, 0xab, 0x81, 0x2a, 0xa7, 0x4b, 0x85, 0x46, 0xb7, 0x85, 0xed, - 0xed, 0xdf, 0x27, 0xc5, 0xba, 0xac, 0x64, 0xab, 0x9e, 0x36, 0xd1, 0x5c, - 0xd6, 0x08, 0x7b, 0x79, 0x51, 0x14, 0xce, 0xda, 0x73, 0xd3, 0x04, 0xcb, - 0xf9, 0x65, 0x10, 0x4d, 0xb3, 0xec, 0xd1, 0x60, 0x35, 0x4d, 0xb6, 0x1c, - 0xad, 0x84, 0xd1, 0x88, 0x96, 0x3f, 0x1b, 0xcc, 0xe4, 0x9c, 0xf2, 0xf5, - 0xa7, 0xfd, 0x04, 0x11, 0x1c, 0x20, 0x75, 0x47, 0x7c, 0x94, 0xe8, 0x63, - 0xeb, 0xd3, 0xbe, 0x19, 0x43, 0x93, 0x28, 0xac, 0x83, 0xbe, 0xd5, 0xde, - 0x4b, 0xdd, 0x38, 0xca, 0x88, 0x9a, 0xbc, 0xae, 0xfa, 0xd6, 0x9e, 0x41, - 0x5d, 0xd2, 0x09, 0xb4, 0x4e, 0x8f, 0x81, 0x1a, 0x51, 0x0e, 0x5b, 0xbf, - 0x1b, 0xe8, 0x57, 0x5b, 0xfe, 0x6e, 0xb0, 0x35, 0xa9, 0x5b, 0x15, 0x3c, - 0x22, 0xc8, 0xfe, 0xac, 0x92, 0x1e, 0x14, 0x6e, 0x8f, 0x9b, 0x90, 0x29, - 0xd4, 0x9a, 0x92, 0xc1, 0xfd, 0xdd, 0xef, 0xc4, 0x1a, 0xa7, 0x5e, 0x27, - 0x94, 0x57, 0xb9, 0x5b, 0xea, 0xdb, 0x6d, 0x95, 0xed, 0xb6, 0x9a, 0x76, - 0x1f, 0x6a, 0x76, 0xa7, 0x3a, 0xa6, 0x4d, 0xc4, 0x70, 0x4a, 0x6f, 0xb0, - 0xb4, 0x02, 0xfe, 0xe4, 0x7c, 0x9a, 0xc2, 0x28, 0xcb, 0x2a, 0x1d, 0x75, - 0x63, 0x24, 0x14, 0xf4, 0x31, 0x3e, 0x94, 0x39, 0xcb, 0x9b, 0xd3, 0xfc, - 0x02, 0xd2, 0x63, 0x59, 0xea, 0x71, 0xdd, 0xaa, 0xd6, 0xfa, 0x07, 0x57, - 0x29, 0x97, 0x66, 0x66, 0x9f, 0xe1, 0xe4, 0x05, 0xae, 0xd8, 0x88, 0x6d, - 0xb9, 0x8d, 0xdf, 0x28, 0x2d, 0x68, 0xca, 0x32, 0xc0, 0xc1, 0x69, 0x9a, - 0xa6, 0xb4, 0x30, 0x2d, 0xa3, 0xb3, 0xbd, 0xa9, 0x63, 0xc7, 0xb1, 0xed, - 0xe3, 0xf7, 0x5a, 0x29, 0x76, 0x62, 0x36, 0x12, 0xfe, 0x95, 0xd6, 0x2f, - 0xdd, 0x5b, 0xd2, 0x1e, 0x1b, 0xaf, 0x01, 0xb5, 0x6b, 0x56, 0x72, 0xd0, - 0x4b, 0x0e, 0x06, 0x37, 0x17, 0xee, 0xa4, 0x0b, 0x77, 0xd6, 0x2b, 0xdd, - 0x4d, 0x97, 0xee, 0x96, 0x94, 0xce, 0x9b, 0x67, 0x93, 0x99, 0xf1, 0xb4, - 0xe3, 0xfe, 0x54, 0x4b, 0xf6, 0x80, 0x4d, 0xb6, 0x0e, 0x13, 0x2c, 0x6c, - 0x9f, 0x04, 0x2b, 0xca, 0xed, 0xbd, 0x65, 0x1b, 0x4d, 0xf4, 0x60, 0xbc, - 0xaa, 0x9c, 0x3b, 0xe9, 0xe2, 0x9d, 0x75, 0xcb, 0x77, 0xd3, 0xe5, 0xbb, - 0xba, 0xfc, 0x9d, 0xb6, 0x14, 0xd9, 0x93, 0x4d, 0x36, 0x14, 0xd1, 0x2b, - 0x6c, 0x27, 0xc3, 0x88, 0x9c, 0x90, 0xdc, 0xb2, 0x95, 0x06, 0xca, 0x1b, - 0x5a, 0x55, 0xc8, 0x9d, 0x74, 0xe9, 0xce, 0x9a, 0xc5, 0xbb, 0xe9, 0xe2, - 0x5d, 0x55, 0xfc, 0x4e, 0x9b, 0x88, 0x0c, 0xf4, 0x46, 0xdb, 0x88, 0x08, - 0x16, 0x37, 0x52, 0x82, 0x15, 0x39, 0xa9, 0xbf, 0x6d, 0x33, 0x9d, 0x2b, - 0x7f, 0x74, 0x65, 0x41, 0x77, 0xd2, 0xc5, 0x3b, 0xeb, 0x96, 0xef, 0xa6, - 0xcb, 0x77, 0x55, 0xf9, 0xbb, 0x6d, 0x29, 0x39, 0xe8, 0x6d, 0xb2, 0xa9, - 0x24, 0xc5, 0xc2, 0xb6, 0x4a, 0x32, 0xa3, 0x97, 0x57, 0x72, 0xad, 0x25, - 0x85, 0x62, 0xd6, 0x6d, 0x63, 0xe7, 0x6f, 0x3d, 0xb9, 0xe8, 0xa5, 0x82, - 0x67, 0x31, 0xa2, 0xbb, 0x5d, 0x2f, 0x30, 0x0c, 0xe6, 0x17, 0x0d, 0x6a, - 0x66, 0x92, 0xb2, 0x59, 0x8f, 0x80, 0x09, 0x16, 0x8a, 0x3e, 0xc1, 0x8a, - 0x5a, 0xd7, 0x2b, 0x11, 0x3c, 0xe7, 0x65, 0x26, 0x53, 0x79, 0xa9, 0x9e, - 0x50, 0xee, 0xdd, 0x0a, 0x94, 0x09, 0x16, 0xcb, 0xf2, 0xda, 0x78, 0x5f, - 0xa9, 0x4a, 0x79, 0xaa, 0x3e, 0xc3, 0x45, 0x80, 0xef, 0xc4, 0x8a, 0x9a, - 0xca, 0xd1, 0x93, 0x01, 0x12, 0x52, 0x6a, 0x2e, 0x60, 0xbb, 0x08, 0x3a, - 0xad, 0xea, 0xdb, 0x73, 0x3e, 0xea, 0x6d, 0xaa, 0x26, 0xa5, 0x7c, 0xfa, - 0x58, 0x49, 0xdc, 0xb8, 0x52, 0x49, 0xad, 0x3f, 0xa5, 0xd0, 0xf6, 0x15, - 0xdd, 0xd4, 0xac, 0x20, 0x47, 0xfc, 0xa9, 0xd5, 0x5a, 0x97, 0x34, 0xdd, - 0xd6, 0xb2, 0x06, 0xdd, 0xe4, 0x32, 0xb9, 0x82, 0xcc, 0x4e, 0x82, 0x33, - 0xcb, 0xf3, 0xf4, 0x96, 0x83, 0x00, 0x51, 0x18, 0x99, 0x99, 0x2f, 0x1b, - 0x22, 0x86, 0xe1, 0x99, 0xaf, 0x99, 0x83, 0xc9, 0xad, 0x80, 0x3e, 0x47, - 0x68, 0xb1, 0x12, 0xc7, 0xca, 0xab, 0x99, 0x84, 0x5a, 0x16, 0x68, 0x38, - 0x7b, 0xce, 0xac, 0xe0, 0x56, 0xff, 0xc0, 0xba, 0x2a, 0x35, 0x5a, 0xab, - 0xf6, 0xe9, 0x9c, 0xe7, 0x9d, 0xcc, 0xcd, 0x2e, 0x71, 0xa4, 0xb5, 0xf6, - 0x3d, 0xba, 0xeb, 0x84, 0xae, 0x21, 0xf3, 0x9e, 0x33, 0x12, 0x55, 0xa7, - 0xc8, 0x67, 0xe5, 0x94, 0x4e, 0xbf, 0x29, 0x60, 0x1c, 0x79, 0xe2, 0x94, - 0xa2, 0x1d, 0x64, 0xb5, 0xb9, 0x50, 0x4a, 0x35, 0x13, 0xce, 0xe5, 0xff, - 0x92, 0x00, 0xb8, 0x42, 0x6b, 0x89, 0x80, 0x7c, 0x8c, 0xff, 0x25, 0x09, - 0x50, 0x7d, 0xd6, 0x12, 0x00, 0x8d, 0xdd, 0xff, 0x53, 0x12, 0xa0, 0x0a, - 0xad, 0x27, 0x02, 0x39, 0x26, 0xae, 0x23, 0x83, 0xff, 0x8c, 0x9a, 0x4a, - 0xbe, 0xd7, 0xaa, 0x2a, 0x46, 0xab, 0xf5, 0x4c, 0xde, 0xc6, 0x2a, 0x03, - 0xce, 0x56, 0xb6, 0x5e, 0xd7, 0xc9, 0x7b, 0x28, 0x5e, 0xcd, 0xe6, 0x72, - 0xa1, 0x5a, 0xbe, 0x0d, 0x83, 0x0e, 0xe3, 0xab, 0xfb, 0x23, 0x12, 0xe3, - 0xc4, 0x05, 0x5d, 0x42, 0x51, 0x5d, 0x04, 0x18, 0x75, 0xe7, 0x3e, 0x5d, - 0x0d, 0x4c, 0xf1, 0x59, 0xb4, 0x1a, 0x53, 0xb3, 0xcc, 0x80, 0x01, 0xa8, - 0x40, 0x0d, 0x17, 0xbf, 0x7e, 0xf3, 0xfa, 0xa7, 0x28, 0x71, 0x2c, 0xfe, - 0x88, 0x45, 0x95, 0x48, 0xd7, 0x8c, 0x00, 0x70, 0xa2, 0x93, 0x63, 0xf1, - 0x43, 0x8a, 0xc5, 0x97, 0xd2, 0x41, 0x99, 0xa4, 0x5b, 0x90, 0xf2, 0xa0, - 0x65, 0x3c, 0x8c, 0x89, 0xde, 0x67, 0x17, 0x7a, 0xdb, 0x7a, 0xf4, 0xc8, - 0xe2, 0x0c, 0xc2, 0xb2, 0x08, 0xa5, 0x5f, 0xde, 0x2a, 0x7c, 0xd5, 0x50, - 0x24, 0xc7, 0x30, 0x85, 0x26, 0x9c, 0x63, 0x9b, 0x5d, 0xd0, 0x65, 0x4f, - 0x8a, 0xa3, 0x24, 0x29, 0x0d, 0xfd, 0x00, 0xd8, 0x1e, 0x3f, 0x06, 0x8d, - 0x38, 0xa9, 0x66, 0x30, 0x9b, 0xbf, 0x58, 0x06, 0x31, 0x54, 0x02, 0xa7, - 0x71, 0x0d, 0x96, 0x96, 0xac, 0x9c, 0x2c, 0x86, 0x43, 0x8c, 0xfb, 0x0f, - 0x2a, 0xb9, 0xc2, 0xf2, 0x31, 0x8f, 0xe7, 0x46, 0xe1, 0xd4, 0x12, 0xe8, - 0x8f, 0x8e, 0x8f, 0xdf, 0x1d, 0x3f, 0xb0, 0x72, 0xaf, 0xaf, 0x91, 0xf4, - 0x32, 0xb4, 0xae, 0x13, 0xcb, 0xaa, 0xd4, 0xca, 0x35, 0x6e, 0x2f, 0x3e, - 0xfb, 0x5d, 0xf9, 0xf6, 0x1d, 0x5d, 0xfb, 0x62, 0xb1, 0x06, 0x44, 0x41, - 0xec, 0x40, 0x4a, 0xce, 0x0c, 0xd8, 0xcb, 0xa3, 0x22, 0x28, 0x06, 0x20, - 0xa5, 0x65, 0xb4, 0x59, 0xd7, 0x0e, 0x5b, 0x25, 0x7c, 0xab, 0x64, 0xdc, - 0xf6, 0x4a, 0xdb, 0x2a, 0xf4, 0x99, 0x09, 0x33, 0xda, 0x02, 0x30, 0x07, - 0x6b, 0xe0, 0xf4, 0x96, 0x0a, 0x8b, 0x30, 0xba, 0x23, 0x37, 0x57, 0x4d, - 0x0f, 0x4a, 0xbd, 0x68, 0xea, 0xa5, 0xf4, 0xb8, 0x64, 0x14, 0x07, 0x9f, - 0x98, 0x46, 0xd4, 0x8f, 0x8d, 0xd7, 0xef, 0x9c, 0xbc, 0xef, 0x01, 0x57, - 0x6e, 0xe2, 0x28, 0xa8, 0xfd, 0xb1, 0x96, 0xb9, 0x18, 0xc8, 0x50, 0x6f, - 0xac, 0x7a, 0xee, 0xd6, 0x58, 0x35, 0x94, 0x50, 0x2b, 0x59, 0x9d, 0x50, - 0xa8, 0xfb, 0xd6, 0xcf, 0x4e, 0xde, 0xbd, 0x6d, 0xce, 0xed, 0x80, 0x8f, - 0x2d, 0x17, 0xe8, 0x99, 0x0a, 0x19, 0x9f, 0xa9, 0xc5, 0x6c, 0x46, 0x6a, - 0xee, 0xb2, 0xc8, 0xe0, 0xcd, 0x11, 0x88, 0x0f, 0x3d, 0xc3, 0x4c, 0xcf, - 0x62, 0x6b, 0x63, 0xfe, 0x32, 0xd4, 0x18, 0xac, 0x89, 0x70, 0x23, 0xae, - 0x50, 0xfc, 0xa0, 0x8e, 0x5d, 0x98, 0x17, 0x74, 0x15, 0xff, 0x99, 0x09, - 0x02, 0xd3, 0x96, 0xa7, 0x4f, 0xae, 0xd4, 0x35, 0xab, 0x06, 0x5b, 0x1d, - 0x6f, 0x44, 0x93, 0x8f, 0x0c, 0xa7, 0xa7, 0x42, 0xe6, 0x2f, 0xaf, 0xd9, - 0xf9, 0xe4, 0xb5, 0x7b, 0x80, 0x6e, 0x5f, 0x75, 0x38, 0x7e, 0xe5, 0xd7, - 0x87, 0xe1, 0xe8, 0xd9, 0x10, 0x0f, 0xf0, 0xc3, 0x33, 0x9b, 0x71, 0xca, - 0x3d, 0x07, 0x46, 0x4f, 0x22, 0x8d, 0x31, 0x9a, 0x5b, 0xd4, 0x4e, 0x3c, - 0x74, 0xac, 0x81, 0x1d, 0x54, 0x93, 0xc0, 0xf1, 0x45, 0x9f, 0x75, 0x4b, - 0x85, 0x0c, 0xd2, 0x64, 0xa6, 0xd5, 0x2a, 0xea, 0x64, 0x94, 0x96, 0xeb, - 0x00, 0xcf, 0x39, 0x44, 0x6c, 0xa5, 0x1e, 0x20, 0xa3, 0xc9, 0x6e, 0x54, - 0xff, 0x42, 0xe5, 0x97, 0x65, 0xef, 0x5c, 0xf1, 0xf9, 0xea, 0x97, 0x95, - 0x54, 0x1f, 0x50, 0x71, 0xe9, 0x92, 0x6e, 0x01, 0x90, 0x38, 0x8e, 0xd1, - 0xca, 0xf5, 0x0d, 0x55, 0x05, 0x03, 0xd1, 0x4f, 0x15, 0xd8, 0xbf, 0x11, - 0x75, 0x1c, 0x69, 0x57, 0x8a, 0xda, 0x40, 0xf4, 0xd3, 0x25, 0x56, 0x44, - 0x8e, 0x90, 0xbd, 0x72, 0xe4, 0x06, 0xa2, 0x9f, 0x2a, 0xb1, 0x2a, 0x72, - 0x0a, 0xfe, 0x2b, 0x45, 0x6e, 0x20, 0xfa, 0xe9, 0x12, 0x2b, 0x22, 0xa7, - 0x28, 0xc2, 0x52, 0xe4, 0x06, 0xa2, 0x9f, 0x2e, 0x71, 0x33, 0x72, 0x19, - 0x8e, 0x88, 0xf4, 0x32, 0xe4, 0x1a, 0xa2, 0x6f, 0xc0, 0x57, 0x10, 0x88, - 0x8a, 0x6a, 0xb4, 0xac, 0xd5, 0x2d, 0xa8, 0x22, 0x67, 0x4a, 0xf6, 0x93, - 0x98, 0xf6, 0x97, 0x97, 0x4a, 0x44, 0x44, 0xa2, 0x5c, 0x1a, 0x15, 0xec, - 0xc8, 0xd0, 0x5d, 0xd0, 0x28, 0x56, 0xf9, 0xc0, 0x63, 0xeb, 0x0a, 0x56, - 0x2f, 0x53, 0x1d, 0x19, 0x92, 0xb9, 0x44, 0x4a, 0x1a, 0xa2, 0x9f, 0x00, - 0x5f, 0x49, 0x4a, 0x1c, 0xd9, 0x59, 0x8a, 0xd6, 0x40, 0xf4, 0x53, 0x05, - 0xfe, 0x2f, 0xcc, 0xb1, 0x16, 0x58, 0xbe, 0x89, 0xa1, 0x44, 0x2b, 0x56, - 0x80, 0x66, 0x4c, 0xe0, 0x9d, 0xec, 0x1e, 0xd2, 0x68, 0x8f, 0x3a, 0xb5, - 0x29, 0x5c, 0xa1, 0xc0, 0xe8, 0x9b, 0x7d, 0xc2, 0x5b, 0xa3, 0xff, 0x57, - 0x79, 0xc7, 0xda, 0xdc, 0x48, 0x0d, 0xfb, 0xcc, 0xbf, 0x58, 0xc2, 0xa3, - 0x1b, 0x48, 0xda, 0x26, 0x69, 0x0f, 0xb8, 0x52, 0x18, 0xb8, 0xe3, 0x71, - 0x33, 0xbc, 0x06, 0x8e, 0xd7, 0x74, 0x3a, 0x37, 0x49, 0xb3, 0x6d, 0x03, - 0x69, 0x12, 0x76, 0xb7, 0xb4, 0x9d, 0xa3, 0x0c, 0xff, 0x90, 0xbf, 0x84, - 0x24, 0xdb, 0x2b, 0x3f, 0x77, 0xbd, 0x7b, 0x2d, 0x30, 0xd0, 0x81, 0x4b, - 0x62, 0x4b, 0xb2, 0x2c, 0xcb, 0x6f, 0x4b, 0x12, 0xe1, 0x43, 0xf5, 0x42, - 0xfc, 0xc7, 0xe7, 0xbb, 0x2e, 0x84, 0x71, 0x12, 0x1d, 0x01, 0x32, 0x8e, - 0x80, 0x99, 0x58, 0x30, 0xb7, 0xfe, 0x13, 0x3d, 0x6a, 0x3d, 0xb1, 0xee, - 0xc3, 0x25, 0xc3, 0x20, 0xa1, 0xf0, 0xa1, 0x24, 0x74, 0xcf, 0xea, 0x0d, - 0x01, 0x1f, 0x26, 0x38, 0x0f, 0x22, 0xf0, 0x36, 0xad, 0x3f, 0x70, 0x36, - 0x4c, 0x86, 0xc9, 0x93, 0xc7, 0x5a, 0xc6, 0x62, 0x2e, 0x53, 0x3f, 0x25, - 0xa1, 0x68, 0x39, 0x42, 0x4a, 0x7d, 0xed, 0x89, 0x01, 0xc6, 0x7d, 0x3d, - 0x54, 0x62, 0x57, 0x0e, 0xdf, 0xa4, 0xe4, 0xd3, 0xde, 0xe3, 0x27, 0xdf, - 0xf5, 0x74, 0xe8, 0x62, 0xb3, 0xaa, 0x81, 0xfe, 0xe6, 0xab, 0x0f, 0xbe, - 0x00, 0x70, 0xe3, 0xfd, 0x42, 0x0d, 0xf8, 0x13, 0x03, 0x76, 0x56, 0xd6, - 0x91, 0xfe, 0xf0, 0xdb, 0xa7, 0x4f, 0xbf, 0x34, 0x89, 0xcf, 0x5a, 0x71, - 0x5e, 0x5e, 0x97, 0x2e, 0x34, 0x6c, 0x81, 0x48, 0x95, 0x52, 0x4b, 0x9e, - 0xa9, 0x25, 0xca, 0xbe, 0x22, 0x85, 0x85, 0xa2, 0xb5, 0x6d, 0x06, 0x4f, - 0xa6, 0xf0, 0x29, 0x46, 0x0a, 0x64, 0xb5, 0x2c, 0x53, 0x25, 0x8d, 0x38, - 0xb7, 0x12, 0x08, 0xd2, 0x0c, 0x7c, 0x40, 0xea, 0x6b, 0x59, 0x30, 0x62, - 0x21, 0xaa, 0x8a, 0xa0, 0xcb, 0x39, 0xc8, 0xc8, 0xa1, 0x62, 0x89, 0x93, - 0xc9, 0x33, 0x10, 0xbc, 0xd0, 0x87, 0x3c, 0xe7, 0x4c, 0x19, 0x81, 0x53, - 0x89, 0x81, 0x27, 0xcb, 0x8c, 0x65, 0xb0, 0x69, 0xc5, 0x56, 0xd6, 0x0b, - 0x0d, 0x3e, 0x13, 0xab, 0x0e, 0x6e, 0x2b, 0x83, 0x02, 0x89, 0x04, 0x0d, - 0x6e, 0x12, 0xa7, 0x17, 0x2c, 0xf8, 0xcf, 0x90, 0x22, 0x13, 0xdb, 0xb1, - 0x7c, 0x19, 0xcd, 0x18, 0xf3, 0x52, 0x4d, 0x59, 0x69, 0x3b, 0x47, 0xdb, - 0xa8, 0xe4, 0xfd, 0xa4, 0x47, 0x27, 0xe0, 0xcf, 0x66, 0xeb, 0xeb, 0x67, - 0x70, 0x8e, 0x0e, 0x14, 0x33, 0x19, 0xe1, 0x38, 0x79, 0xa8, 0xe5, 0x69, - 0x64, 0x43, 0x02, 0x2a, 0xd7, 0x67, 0x67, 0xcb, 0x4c, 0x74, 0x3a, 0xda, - 0x16, 0xb3, 0x84, 0x50, 0xc9, 0x83, 0x63, 0x0b, 0x65, 0x9b, 0x4d, 0x08, - 0xa5, 0xa8, 0x26, 0x9c, 0x5b, 0xda, 0x01, 0xa0, 0xa1, 0xac, 0x59, 0xa9, - 0x67, 0x19, 0xe5, 0x71, 0xa0, 0xec, 0xa4, 0xb8, 0x78, 0x90, 0x5c, 0xcc, - 0xf7, 0x92, 0x25, 0x5c, 0x37, 0x5f, 0x2f, 0xc7, 0xa8, 0x96, 0x69, 0x58, - 0x38, 0x89, 0x48, 0x24, 0x61, 0x90, 0xc6, 0xd6, 0x8e, 0xa8, 0x62, 0x03, - 0xd9, 0x37, 0xb8, 0x02, 0x56, 0xec, 0x11, 0x2a, 0xcf, 0x38, 0x0c, 0x81, - 0x58, 0x9a, 0x77, 0x9b, 0xc7, 0x7a, 0x93, 0xc9, 0x6b, 0xbd, 0x83, 0x68, - 0xec, 0xe1, 0x7c, 0xbd, 0x42, 0x12, 0xa0, 0x6a, 0x1f, 0x94, 0xb0, 0x04, - 0x87, 0x1e, 0x91, 0x91, 0xc1, 0xf1, 0xfa, 0x67, 0xc8, 0x9b, 0x16, 0xe7, - 0xd3, 0x3c, 0x47, 0x6b, 0x6b, 0xa4, 0x3b, 0x18, 0xed, 0xee, 0x46, 0xd5, - 0x17, 0xf4, 0x4e, 0xf5, 0xc7, 0xf0, 0x24, 0xab, 0xc7, 0x5d, 0x38, 0x68, - 0xdc, 0x88, 0x5c, 0x2e, 0xe8, 0x0c, 0x07, 0xfc, 0x94, 0xae, 0x57, 0x8d, - 0xdb, 0x11, 0x6b, 0x3c, 0x37, 0x45, 0x6b, 0x6f, 0x43, 0xca, 0x8b, 0x0d, - 0x9b, 0x10, 0xc5, 0xed, 0x48, 0xde, 0x37, 0xb7, 0x1e, 0xa0, 0x07, 0xcf, - 0x6f, 0xcd, 0xe3, 0xb4, 0xaf, 0xc5, 0x63, 0xac, 0x2a, 0xce, 0x71, 0x55, - 0xc2, 0xd5, 0xa2, 0x3c, 0x17, 0x1e, 0xa2, 0x13, 0x10, 0x7c, 0xc1, 0x48, - 0xa7, 0xd0, 0xe3, 0x53, 0x69, 0xcf, 0x04, 0xd3, 0x53, 0x85, 0x61, 0x54, - 0xac, 0x7a, 0xcb, 0xad, 0x72, 0x6d, 0x9f, 0xa5, 0x90, 0xde, 0xa7, 0xa5, - 0x16, 0xe4, 0x5e, 0x66, 0xc1, 0xe3, 0x80, 0x54, 0xab, 0x34, 0x5e, 0x0f, - 0x1d, 0xf7, 0xdd, 0xf5, 0x9a, 0x91, 0x0f, 0x92, 0xb1, 0x51, 0xfc, 0xcb, - 0x1b, 0x72, 0x91, 0x50, 0x09, 0xbb, 0xcb, 0x76, 0x4f, 0x1e, 0x1a, 0x71, - 0xc4, 0x42, 0x9c, 0x39, 0x4c, 0x52, 0xb4, 0xaa, 0x51, 0x4d, 0x8c, 0x01, - 0x24, 0xe4, 0xd9, 0x53, 0xb2, 0xb4, 0x22, 0x07, 0x73, 0x5b, 0xbb, 0x6b, - 0x02, 0x9b, 0x55, 0x5e, 0x0c, 0x24, 0x9f, 0xab, 0xab, 0x51, 0x8e, 0x44, - 0x2d, 0x83, 0x76, 0x17, 0x09, 0x3e, 0xaf, 0x87, 0xe1, 0x58, 0x84, 0xb4, - 0x4e, 0x4e, 0xf3, 0xf5, 0x85, 0x8a, 0x60, 0xad, 0x07, 0xbf, 0xde, 0xe6, - 0xc3, 0x2d, 0xe3, 0xf6, 0x4d, 0xd4, 0x15, 0xc6, 0x0e, 0x28, 0xce, 0x6d, - 0x7b, 0x22, 0x0a, 0x8d, 0xaf, 0xf7, 0x13, 0x7f, 0xfb, 0x6b, 0x00, 0xb6, - 0x0a, 0x20, 0x0d, 0x57, 0x07, 0xfc, 0x5d, 0x83, 0x60, 0x83, 0x5a, 0x12, - 0xbc, 0x41, 0x44, 0x34, 0x50, 0x99, 0x43, 0x5b, 0x65, 0x6a, 0xe1, 0xcd, - 0xee, 0x4f, 0x69, 0xb6, 0x0e, 0xf1, 0x87, 0x12, 0x65, 0x96, 0x56, 0xe3, - 0xcc, 0x6c, 0x3d, 0xbf, 0xb1, 0x07, 0x1f, 0xb9, 0x96, 0x38, 0x0c, 0x95, - 0x2c, 0xf2, 0x01, 0xa9, 0x5a, 0x37, 0x9a, 0xa7, 0x5a, 0xf8, 0xcb, 0x3a, - 0xd5, 0x32, 0x46, 0x7d, 0x1a, 0x67, 0x14, 0xbe, 0xd3, 0xa0, 0x6c, 0xc8, - 0xa7, 0xc2, 0xd1, 0x57, 0xeb, 0x00, 0x38, 0xea, 0x1a, 0x8e, 0xb8, 0xe9, - 0xbc, 0xb4, 0xcb, 0xdc, 0xd3, 0x3a, 0x74, 0xc8, 0xfa, 0x2a, 0x14, 0x91, - 0xd2, 0x37, 0x62, 0x57, 0x2e, 0x57, 0x07, 0x84, 0xef, 0xdf, 0x56, 0x98, - 0x0b, 0x5c, 0x53, 0xe7, 0xdd, 0x66, 0x67, 0x49, 0x58, 0x7d, 0x82, 0x46, - 0x26, 0xb7, 0x4b, 0xa0, 0x6a, 0x82, 0xc8, 0x2e, 0x1e, 0x03, 0x9e, 0x3c, - 0x73, 0xff, 0x58, 0xfe, 0x4c, 0x8d, 0xa5, 0xe2, 0x72, 0x3d, 0x93, 0xf9, - 0x1f, 0xc2, 0xd7, 0xf4, 0x88, 0x86, 0x49, 0xd1, 0xd5, 0x17, 0xa7, 0x37, - 0x95, 0xe4, 0xfa, 0xc7, 0x83, 0xe4, 0xb9, 0x30, 0x75, 0xdc, 0xc2, 0x5e, - 0xb8, 0x10, 0x16, 0xa5, 0x3b, 0x38, 0xb8, 0x6f, 0x29, 0x9e, 0xab, 0x12, - 0xe5, 0xcc, 0x99, 0x6e, 0x29, 0xf4, 0xad, 0x01, 0x95, 0x34, 0x48, 0xb6, - 0x8c, 0x69, 0x81, 0x2e, 0x8a, 0xbd, 0x0b, 0x7a, 0x7c, 0x4e, 0x20, 0x62, - 0xcc, 0x0c, 0x2a, 0xaa, 0xfd, 0xe6, 0x39, 0x27, 0x83, 0x11, 0x48, 0xc3, - 0xb0, 0xa6, 0x9b, 0xf6, 0x23, 0x9b, 0xa5, 0x0d, 0x26, 0x8b, 0xdf, 0x3e, - 0x7a, 0xf4, 0xd1, 0x37, 0xdf, 0x58, 0x0d, 0x80, 0xe3, 0xd7, 0x80, 0xa7, - 0x82, 0x98, 0x2d, 0xa9, 0xdd, 0x03, 0x68, 0xae, 0x81, 0xe9, 0xbb, 0x10, - 0x67, 0xff, 0x40, 0x71, 0xa2, 0x36, 0xa7, 0xfc, 0x17, 0x33, 0xe8, 0x56, - 0x5d, 0x08, 0xc4, 0x22, 0x56, 0xbd, 0xaa, 0x7f, 0x34, 0xee, 0x38, 0xcd, - 0xcd, 0xba, 0x10, 0x88, 0xa7, 0xa6, 0xdd, 0xeb, 0x17, 0xb9, 0xff, 0xb6, - 0xa7, 0x00, 0x73, 0x79, 0x9a, 0x89, 0xd7, 0x1d, 0x6e, 0x47, 0x7d, 0x59, - 0xfb, 0x59, 0xdd, 0x44, 0x04, 0x17, 0xd2, 0xed, 0xd7, 0xcf, 0xd8, 0x75, - 0x36, 0x6b, 0x5c, 0x7d, 0xc4, 0x0c, 0x2d, 0xda, 0xbd, 0x89, 0xce, 0x18, - 0xe8, 0x1f, 0x12, 0x71, 0x06, 0x1e, 0x2f, 0xcd, 0x02, 0xfb, 0x5c, 0x96, - 0x02, 0xfc, 0x20, 0x19, 0x99, 0x4f, 0xce, 0x89, 0xb0, 0x4b, 0x17, 0x07, - 0xfb, 0x18, 0xca, 0x78, 0x66, 0x6f, 0xb3, 0x7a, 0xeb, 0xed, 0x94, 0x62, - 0xd3, 0x4c, 0xe7, 0xf8, 0x05, 0x6d, 0x9d, 0x7d, 0xf4, 0x64, 0x83, 0x39, - 0x4d, 0xa6, 0x62, 0x8a, 0xa4, 0xe2, 0x4e, 0xce, 0x18, 0xa9, 0xa4, 0xfd, - 0x3d, 0x88, 0x53, 0xe6, 0x52, 0x8b, 0xc0, 0xd7, 0xbc, 0x24, 0xf9, 0x17, - 0x80, 0xaa, 0x44, 0x0f, 0xc7, 0x4f, 0x74, 0x55, 0x24, 0x71, 0x0c, 0xe1, - 0x0a, 0xe4, 0x38, 0x93, 0xb9, 0xa9, 0xe4, 0x07, 0xd6, 0xbb, 0xd4, 0xbc, - 0xd9, 0x5c, 0x75, 0x8e, 0x18, 0x7b, 0x1d, 0x85, 0x3d, 0x3b, 0xa3, 0x63, - 0x8d, 0xb0, 0xe1, 0x10, 0x1f, 0xef, 0xe8, 0xcc, 0xf7, 0x5e, 0xed, 0x75, - 0xb0, 0x25, 0x73, 0x59, 0x76, 0xe6, 0x24, 0x9e, 0x32, 0x21, 0x6b, 0x74, - 0xb7, 0x35, 0x09, 0xee, 0x6d, 0x39, 0x48, 0xcd, 0x33, 0x11, 0xb4, 0xf0, - 0x99, 0xd8, 0xa5, 0xc3, 0x60, 0x64, 0x85, 0x38, 0x61, 0xc7, 0xfb, 0xab, - 0x6f, 0x54, 0xc8, 0x1e, 0xb8, 0x94, 0x4e, 0xa1, 0x68, 0x78, 0xa2, 0x54, - 0x35, 0x9c, 0xfd, 0x2c, 0x32, 0x11, 0xf9, 0x40, 0xc2, 0x19, 0x85, 0x45, - 0xb9, 0x20, 0x09, 0x02, 0x7f, 0x08, 0x4a, 0x29, 0x81, 0x79, 0x1e, 0x4d, - 0x28, 0x30, 0xb7, 0x09, 0x28, 0x5f, 0xd0, 0x69, 0x77, 0xd3, 0x50, 0x8a, - 0x47, 0x46, 0xc5, 0x87, 0x37, 0x8f, 0xd4, 0x06, 0x34, 0xed, 0x09, 0x96, - 0xc8, 0xd4, 0x1f, 0x9e, 0x63, 0x9d, 0x41, 0x4b, 0xaa, 0x66, 0xe4, 0x05, - 0xe1, 0x82, 0xce, 0xb7, 0xe0, 0xe3, 0xdd, 0xe4, 0x5a, 0xde, 0xa2, 0xc1, - 0x2f, 0xf0, 0x5e, 0xa6, 0x37, 0xf1, 0xf5, 0xd1, 0xe2, 0x58, 0xdf, 0xd9, - 0x52, 0x82, 0xdf, 0x32, 0x84, 0x0f, 0x21, 0xde, 0x91, 0xd6, 0x21, 0x9c, - 0x32, 0xe9, 0x59, 0x1d, 0x16, 0x6a, 0xd1, 0x6c, 0xe6, 0xe6, 0xca, 0xe8, - 0xda, 0xe4, 0xa5, 0x89, 0x91, 0x89, 0xc3, 0xc8, 0x3b, 0x3d, 0x5d, 0xdc, - 0x99, 0xb4, 0xfc, 0x15, 0x21, 0x8b, 0x92, 0xe9, 0x6a, 0x5e, 0xbd, 0x31, - 0x2b, 0xd7, 0x56, 0x43, 0x00, 0x96, 0x65, 0xb3, 0xc0, 0x8d, 0x7f, 0xd4, - 0xcb, 0x91, 0x57, 0xa9, 0x1d, 0x30, 0x4e, 0x8e, 0x60, 0x58, 0x90, 0x3f, - 0x68, 0x23, 0x7f, 0xac, 0xbf, 0xe2, 0xf7, 0x12, 0x38, 0x8b, 0x23, 0x30, - 0x03, 0x4c, 0x2f, 0xfe, 0x2c, 0x0e, 0x1f, 0x4f, 0x52, 0xfd, 0x04, 0xae, - 0xe2, 0x08, 0x04, 0x5f, 0xbc, 0x84, 0x1f, 0x88, 0xb8, 0x8f, 0x43, 0x6e, - 0xad, 0x97, 0x7b, 0xde, 0x9d, 0x12, 0x2c, 0x18, 0xaa, 0xb5, 0x37, 0xb5, - 0x87, 0xfa, 0x21, 0x1b, 0x86, 0xbb, 0x04, 0x66, 0xd4, 0xe9, 0x93, 0x42, - 0x74, 0xfa, 0x00, 0x3d, 0x12, 0xd1, 0x37, 0x45, 0x54, 0xbe, 0x77, 0x37, - 0x64, 0x6f, 0x85, 0x10, 0xd3, 0xbf, 0x15, 0x42, 0xba, 0xe4, 0x80, 0xac, - 0xee, 0x30, 0x14, 0xa2, 0x85, 0x3d, 0xe1, 0xc3, 0x50, 0xfc, 0x93, 0x38, - 0xd6, 0x69, 0x09, 0xb5, 0x54, 0x6f, 0x40, 0x8c, 0xba, 0xc0, 0xde, 0x03, - 0x90, 0x23, 0x84, 0x3d, 0xde, 0xae, 0x02, 0x8c, 0x32, 0x16, 0x81, 0x18, - 0x87, 0x45, 0x82, 0x8c, 0xd5, 0x37, 0x09, 0x4a, 0xa9, 0x88, 0xb1, 0x24, - 0x3a, 0x60, 0x80, 0x56, 0x0f, 0x82, 0xe7, 0xd0, 0x99, 0xd6, 0x17, 0x59, - 0x79, 0x0e, 0x94, 0x92, 0xf3, 0x2c, 0xcf, 0xac, 0x2d, 0x04, 0xed, 0x4f, - 0x0b, 0x9e, 0x5c, 0x83, 0x2d, 0x29, 0x81, 0xb8, 0x29, 0x19, 0x4d, 0x71, - 0x0c, 0xca, 0x6a, 0x67, 0xb5, 0xe0, 0x55, 0xcd, 0x7b, 0x16, 0x59, 0x55, - 0x5a, 0xb8, 0x44, 0xb7, 0x42, 0x7c, 0xb3, 0x1b, 0xae, 0x8f, 0x84, 0xe1, - 0xea, 0xa8, 0x04, 0x45, 0xdb, 0xbe, 0x26, 0x36, 0xc1, 0xda, 0xd4, 0xcc, - 0xb9, 0x6f, 0xb6, 0xca, 0xf2, 0x4d, 0xfe, 0x8f, 0xce, 0x61, 0x50, 0xb0, - 0x31, 0xfb, 0x5e, 0xc8, 0x5e, 0xdf, 0x27, 0x03, 0xbe, 0x82, 0xae, 0x11, - 0x42, 0x05, 0xa4, 0x68, 0x30, 0x9a, 0x2d, 0x86, 0x2a, 0xc3, 0x06, 0x6c, - 0x2f, 0x08, 0x9d, 0x35, 0x26, 0x13, 0x16, 0xc5, 0x05, 0xca, 0xc2, 0x41, - 0x6e, 0x2d, 0x0c, 0xb8, 0x22, 0x6f, 0x16, 0x06, 0x00, 0xb1, 0x30, 0x54, - 0x8a, 0x2b, 0x0c, 0x95, 0x61, 0x01, 0x76, 0x15, 0x86, 0x64, 0x4d, 0x7d, - 0xaf, 0x15, 0xc6, 0x06, 0x84, 0x61, 0x23, 0xb7, 0x17, 0x06, 0x5e, 0xe9, - 0x37, 0x0a, 0x03, 0x81, 0x14, 0x0d, 0x46, 0x73, 0x84, 0xa1, 0x32, 0x6c, - 0xc0, 0x8e, 0xc2, 0x10, 0xac, 0x31, 0x99, 0x3a, 0x61, 0x5c, 0x82, 0x30, - 0x1c, 0xe4, 0xd6, 0xc2, 0xc0, 0x27, 0x08, 0x8d, 0xc2, 0x40, 0x20, 0x45, - 0x83, 0xd1, 0x1c, 0x61, 0xa8, 0x0c, 0x1b, 0xb0, 0xa3, 0x30, 0x04, 0x6b, - 0x4c, 0xa6, 0x4e, 0x18, 0xb8, 0x8e, 0x70, 0x90, 0xdb, 0x08, 0xe3, 0x04, - 0x96, 0xf2, 0x35, 0x5d, 0x44, 0xad, 0xa4, 0x09, 0xac, 0xa2, 0x40, 0xbf, - 0x2c, 0x31, 0xa8, 0xf7, 0x17, 0x0c, 0xd1, 0xa1, 0x67, 0xa8, 0x07, 0x1d, - 0x12, 0x3f, 0x5c, 0xf1, 0xe2, 0x04, 0x2a, 0x6e, 0x60, 0xb5, 0xea, 0x0f, - 0xf0, 0x04, 0xa2, 0xb9, 0xce, 0x00, 0xa4, 0xb0, 0x11, 0xc1, 0x53, 0x5f, - 0x48, 0xe5, 0xfc, 0x4e, 0xb5, 0x15, 0x8c, 0xc0, 0xbf, 0x75, 0x75, 0x55, - 0xdd, 0x9f, 0x71, 0xda, 0xd4, 0x15, 0xdf, 0x99, 0x34, 0x57, 0x16, 0xa1, - 0xc2, 0x2b, 0x36, 0x86, 0x81, 0x35, 0xdb, 0x3f, 0xbf, 0xf8, 0x62, 0x76, - 0xc4, 0xf2, 0x4b, 0x83, 0xc6, 0xc4, 0xe6, 0x45, 0x17, 0x41, 0xb9, 0xed, - 0x49, 0xaf, 0x79, 0x18, 0xa2, 0x53, 0x8b, 0x4a, 0x71, 0xe3, 0x47, 0x5d, - 0x9b, 0xe2, 0x16, 0xc6, 0xc2, 0xaa, 0x69, 0xd4, 0x97, 0x5e, 0xf2, 0x34, - 0xac, 0x08, 0xed, 0xd8, 0xdc, 0xb4, 0x02, 0xae, 0xae, 0x71, 0x19, 0xea, - 0x5f, 0xd4, 0xbc, 0x82, 0x21, 0xa7, 0x81, 0x45, 0x72, 0x73, 0x13, 0x4b, - 0x38, 0xd5, 0xc8, 0xa9, 0xfd, 0x6a, 0xe9, 0x75, 0x0c, 0x7b, 0x89, 0x38, - 0x0c, 0xdc, 0xa9, 0xbd, 0xe5, 0x1b, 0x28, 0xb3, 0xbc, 0xdf, 0x12, 0x19, - 0x33, 0x93, 0x7f, 0xcb, 0x88, 0x93, 0x9c, 0x20, 0x02, 0x48, 0xd6, 0xe9, - 0xc8, 0x1a, 0x74, 0xc4, 0x2a, 0xa9, 0xd5, 0x28, 0x27, 0x79, 0x88, 0xd2, - 0x10, 0x04, 0x8c, 0x50, 0x11, 0x04, 0xfb, 0x77, 0xe9, 0x08, 0x72, 0xe4, - 0x28, 0x89, 0x4c, 0x8f, 0xd2, 0x12, 0x04, 0xac, 0x55, 0x93, 0xd1, 0x18, - 0x91, 0x18, 0xba, 0xc3, 0x3e, 0xe0, 0x5f, 0xaf, 0x27, 0x54, 0x66, 0x94, - 0xa2, 0x10, 0x64, 0x84, 0xa6, 0x10, 0xdc, 0xbf, 0x4b, 0x55, 0x88, 0x25, - 0x47, 0x57, 0x54, 0x46, 0x94, 0xb2, 0x10, 0x64, 0x9d, 0xb6, 0xc0, 0x90, - 0x62, 0x02, 0xff, 0x07, 0x95, 0x05, 0x8a, 0x88, 0x1b, 0x54, 0x00, 0x30, - 0x66, 0x50, 0x01, 0xb0, 0x7f, 0xd9, 0xa0, 0x82, 0x1c, 0xb9, 0x8a, 0x42, - 0xe9, 0x71, 0x83, 0x0a, 0x00, 0xd6, 0x0e, 0x2a, 0x0f, 0xfa, 0x3a, 0xe8, - 0x7f, 0x6a, 0x44, 0x21, 0x87, 0xb6, 0xe4, 0xcf, 0xd6, 0x3d, 0xd6, 0xd2, - 0x9c, 0xdd, 0x76, 0x3b, 0xdd, 0x32, 0xdf, 0x60, 0x1c, 0x0a, 0x74, 0xd1, - 0x08, 0xc5, 0x11, 0xfd, 0x50, 0xe7, 0xc8, 0x4f, 0xf0, 0xb6, 0xed, 0x58, - 0xb0, 0xe0, 0xdf, 0x02, 0x9c, 0xfc, 0x5c, 0xbf, 0x1f, 0x16, 0x10, 0x74, - 0xed, 0xa1, 0x6a, 0x29, 0xb1, 0xf8, 0x9e, 0x45, 0x7b, 0x44, 0xa0, 0x39, - 0xfe, 0x15, 0x0f, 0x2a, 0x44, 0xb8, 0xfd, 0x9e, 0x66, 0xf5, 0x9c, 0x4f, - 0xaf, 0xb4, 0x13, 0x70, 0x38, 0x9c, 0xa5, 0x17, 0x46, 0x94, 0x2e, 0xce, - 0x6d, 0x25, 0x53, 0xe5, 0x5a, 0xbe, 0x2c, 0x52, 0xc4, 0xb9, 0xf0, 0x56, - 0x5b, 0x6c, 0x2f, 0x6f, 0xc0, 0xb3, 0x59, 0x0b, 0xb8, 0x55, 0xab, 0x98, - 0x4d, 0x2a, 0x9f, 0xc5, 0x92, 0xeb, 0x10, 0xe7, 0xae, 0x44, 0xb1, 0x34, - 0x75, 0x6b, 0x54, 0x3f, 0x3a, 0x94, 0x43, 0x05, 0xa7, 0x84, 0xa3, 0xe3, - 0xb2, 0x70, 0x99, 0x7f, 0x95, 0x67, 0xdc, 0xea, 0xb9, 0x28, 0xfd, 0xa4, - 0x4a, 0xe1, 0x67, 0xcf, 0xfa, 0x57, 0x6a, 0x4c, 0xed, 0x56, 0xd2, 0xf3, - 0x58, 0x91, 0xa9, 0x76, 0x11, 0x34, 0x0b, 0xc0, 0x57, 0x25, 0xeb, 0xdc, - 0x5a, 0x00, 0x36, 0xdf, 0xc1, 0xf5, 0xfa, 0xde, 0xea, 0x38, 0xcf, 0x59, - 0xdc, 0x02, 0x9d, 0xa7, 0x0a, 0x98, 0xe9, 0x95, 0x02, 0xfd, 0x02, 0x05, - 0x88, 0x7d, 0x7e, 0x0f, 0x85, 0xdd, 0xd1, 0x15, 0xa1, 0xb8, 0xe9, 0x8c, - 0x66, 0x54, 0x34, 0xd7, 0xfd, 0xf0, 0x69, 0xbe, 0xb9, 0xf7, 0x9e, 0x96, - 0x2c, 0x2f, 0xa6, 0x8b, 0x55, 0xe3, 0x75, 0xda, 0x10, 0xa1, 0x94, 0x72, - 0x2b, 0x2c, 0x77, 0x38, 0xd4, 0x5c, 0x96, 0xeb, 0xa0, 0xad, 0xce, 0x12, - 0x7c, 0xc4, 0xa0, 0x0c, 0xa3, 0x4c, 0x4b, 0xef, 0xce, 0xb3, 0x6b, 0x02, - 0xab, 0x63, 0x85, 0xa1, 0x6f, 0x16, 0xbf, 0xe0, 0x98, 0x91, 0xd2, 0x23, - 0xc9, 0x27, 0x30, 0xf3, 0x2a, 0x74, 0xf9, 0x46, 0x26, 0x1d, 0x0d, 0xc6, - 0xfd, 0xc1, 0xe8, 0x41, 0xff, 0x8d, 0xf1, 0x3b, 0xef, 0xf4, 0xdf, 0x0c, - 0xc3, 0x4d, 0x14, 0xdc, 0xfe, 0xdb, 0x6f, 0xd5, 0xc1, 0xed, 0x2b, 0xb8, - 0xd1, 0x68, 0xaf, 0xdf, 0xdf, 0x19, 0xc1, 0x13, 0x90, 0x98, 0x1b, 0xeb, - 0x72, 0xbd, 0x5e, 0xce, 0xa6, 0x2d, 0xd4, 0x90, 0x0a, 0x8d, 0xa1, 0x7c, - 0xba, 0x5e, 0x97, 0xd9, 0x7d, 0x10, 0xb6, 0x59, 0x56, 0xad, 0x92, 0x82, - 0xcc, 0xc9, 0x2b, 0xe1, 0x78, 0x1f, 0x07, 0xe7, 0xad, 0x57, 0x46, 0xa3, - 0xd1, 0x56, 0xf2, 0x10, 0xbe, 0x7c, 0xf4, 0xd1, 0x47, 0x5b, 0x31, 0x94, - 0x89, 0xe5, 0xfb, 0x23, 0x4c, 0x6f, 0xd3, 0xbb, 0x51, 0xb7, 0xfb, 0x13, - 0x3a, 0xf3, 0x6f, 0xee, 0x4f, 0x08, 0xa5, 0xfa, 0x93, 0xc2, 0x0a, 0xf5, - 0x27, 0xcc, 0xd3, 0x21, 0x5b, 0x1d, 0x44, 0xba, 0xb4, 0x80, 0x3b, 0xa3, - 0xc4, 0xa8, 0x87, 0x20, 0xf4, 0x26, 0xcf, 0x16, 0x90, 0x8f, 0x78, 0x40, - 0x2a, 0xa8, 0x63, 0xcd, 0x52, 0x41, 0x28, 0x25, 0x15, 0x85, 0x15, 0x92, - 0x0a, 0xe6, 0x99, 0x90, 0xdd, 0xa5, 0x22, 0xb8, 0x53, 0x74, 0xe2, 0xa5, - 0x22, 0xdf, 0xde, 0xb6, 0xe9, 0x4b, 0x08, 0x10, 0x43, 0x5a, 0xdd, 0xc7, - 0xde, 0x3d, 0x65, 0x3e, 0x6c, 0xbc, 0x2f, 0xda, 0x62, 0x01, 0x7f, 0x8f, - 0xd4, 0x61, 0x3f, 0x70, 0x6f, 0x82, 0x51, 0xdb, 0x8b, 0x7b, 0xa4, 0x0f, - 0xbb, 0x95, 0xee, 0xec, 0xcb, 0x97, 0x27, 0x65, 0x76, 0x5d, 0xee, 0x90, - 0x71, 0x8d, 0xe8, 0x8c, 0xf3, 0x6c, 0x23, 0xde, 0x92, 0x26, 0x90, 0xc4, - 0x34, 0x13, 0x74, 0xb7, 0x8a, 0x7e, 0xba, 0x62, 0x67, 0x4c, 0x44, 0xfd, - 0x77, 0x4f, 0x98, 0xca, 0x2f, 0x6e, 0x11, 0xf3, 0x94, 0xa9, 0xb2, 0x3c, - 0xe2, 0x71, 0x25, 0xf4, 0x8c, 0x89, 0x68, 0x06, 0x9f, 0x32, 0xc1, 0x9f, - 0x80, 0x80, 0x17, 0x4c, 0x4d, 0xd3, 0xc4, 0x78, 0x3c, 0xf6, 0x4e, 0x42, - 0xb7, 0x11, 0x4a, 0xa2, 0x16, 0x77, 0xe0, 0xec, 0xb7, 0xdb, 0x7c, 0x04, - 0x7f, 0x11, 0x2f, 0x20, 0xee, 0x87, 0xbc, 0xf0, 0x1c, 0x75, 0x0f, 0x84, - 0xe9, 0xe5, 0xd3, 0xfd, 0x90, 0xc6, 0x37, 0x51, 0xf7, 0x43, 0x19, 0x5f, - 0x4b, 0xdd, 0x13, 0x69, 0xe1, 0xb3, 0xe7, 0x7e, 0x68, 0x17, 0x9b, 0xec, - 0xbe, 0x9a, 0x51, 0x8d, 0x35, 0xdd, 0x48, 0x3b, 0x6b, 0x8a, 0x32, 0x62, - 0xe3, 0x02, 0x40, 0xc6, 0x8a, 0xa2, 0x0c, 0x6e, 0x5b, 0x20, 0x4b, 0x87, - 0x7b, 0x81, 0x3d, 0x0b, 0x31, 0x26, 0xa9, 0xc4, 0x2f, 0x26, 0x14, 0x91, - 0x21, 0x1c, 0x95, 0xb4, 0x99, 0x1e, 0xca, 0x55, 0x0c, 0x75, 0x71, 0x44, - 0xd2, 0xbc, 0x65, 0x74, 0xa9, 0xc7, 0xec, 0xca, 0xef, 0x66, 0xbb, 0xda, - 0x58, 0x76, 0xe3, 0xa8, 0xd9, 0xeb, 0x47, 0xf0, 0x74, 0x47, 0x0c, 0xf9, - 0x9f, 0x02, 0x87, 0x75, 0xb5, 0x88, 0x52, 0x56, 0xa0, 0x6a, 0xe9, 0x6b, - 0x11, 0x54, 0x58, 0x82, 0x36, 0x60, 0xdb, 0x3c, 0xd1, 0xf0, 0x52, 0x83, - 0x52, 0x8c, 0x52, 0x5b, 0xd7, 0x57, 0x2e, 0x4f, 0x28, 0x2e, 0xd3, 0xe9, - 0xf4, 0x24, 0x93, 0xde, 0xdb, 0xdb, 0xb8, 0x53, 0x94, 0x5b, 0xfd, 0xb0, - 0xff, 0x2e, 0xde, 0x07, 0xd5, 0x83, 0x60, 0x83, 0x36, 0x81, 0x94, 0xab, - 0x66, 0x88, 0x22, 0x00, 0x02, 0x2f, 0xbd, 0xe3, 0x7a, 0xb4, 0x08, 0xf7, - 0xe8, 0x69, 0x1b, 0x32, 0x4d, 0x56, 0x4d, 0x73, 0xb7, 0x4b, 0x1c, 0x65, - 0xb1, 0x79, 0xd8, 0xcc, 0x9f, 0x83, 0x37, 0xcd, 0xa5, 0xf6, 0xf3, 0x13, - 0x69, 0xb2, 0xcc, 0x80, 0x5b, 0x8a, 0xa4, 0x67, 0x9b, 0x4e, 0x02, 0x70, - 0x65, 0x0a, 0xa2, 0x4e, 0xb3, 0xfa, 0xae, 0x55, 0x06, 0xfd, 0x99, 0x34, - 0x93, 0x37, 0x0f, 0xd9, 0x66, 0xd9, 0x31, 0x38, 0xc3, 0x8c, 0x4c, 0x78, - 0x3c, 0x05, 0x93, 0x94, 0xac, 0xa0, 0x07, 0xd6, 0x2a, 0x8c, 0x57, 0x22, - 0xf4, 0x0f, 0xf4, 0x2a, 0xe0, 0xa2, 0xe9, 0x62, 0xba, 0x71, 0x8c, 0xe8, - 0xf8, 0xcf, 0xb6, 0x25, 0xa9, 0xf8, 0x8c, 0x75, 0x47, 0x21, 0x0d, 0x49, - 0xf4, 0x83, 0xcc, 0xb8, 0x7a, 0x59, 0xeb, 0x40, 0xa3, 0xef, 0xbc, 0xd8, - 0xea, 0x54, 0x5f, 0xa1, 0x86, 0xd9, 0x92, 0x5c, 0xb5, 0xf5, 0x6a, 0x62, - 0xb6, 0x1b, 0xe9, 0x86, 0xff, 0xf9, 0xbc, 0xac, 0xb6, 0x7c, 0x3a, 0xdf, - 0xeb, 0x3b, 0xcd, 0x4a, 0xc6, 0x53, 0x76, 0xb3, 0x4e, 0x97, 0xcb, 0xbf, - 0xab, 0x45, 0x51, 0xae, 0x42, 0x3a, 0xc9, 0x61, 0x9b, 0xe6, 0x3d, 0xf0, - 0x93, 0x23, 0x00, 0x53, 0x36, 0x94, 0xd4, 0x4d, 0x3c, 0xff, 0xa4, 0x76, - 0x1c, 0x86, 0xf2, 0xdd, 0x5a, 0xd4, 0x57, 0xe2, 0xd6, 0x3d, 0x73, 0x6e, - 0xb4, 0xcd, 0x37, 0x16, 0x3f, 0x6d, 0x86, 0x4a, 0xdf, 0x55, 0x5c, 0xdd, - 0x98, 0xc7, 0xb7, 0x79, 0x50, 0x8a, 0x35, 0xc5, 0x59, 0x96, 0x7f, 0x77, - 0xbc, 0xe7, 0x8c, 0x53, 0xe5, 0x18, 0x35, 0x6e, 0xa1, 0xb5, 0x71, 0x83, - 0x92, 0xde, 0x62, 0x77, 0xb8, 0x4d, 0x6e, 0xc3, 0x86, 0xc6, 0x02, 0x7f, - 0x8b, 0x58, 0xd7, 0xf2, 0x1c, 0x56, 0x5f, 0xc6, 0xad, 0x63, 0xb0, 0x67, - 0x5a, 0x71, 0x5e, 0x14, 0x67, 0xe8, 0x41, 0xff, 0x66, 0x90, 0x60, 0xc8, - 0x59, 0xa8, 0x53, 0xa3, 0xcd, 0x94, 0x2c, 0x5f, 0x12, 0xa8, 0x9a, 0xfa, - 0xda, 0xb8, 0x81, 0x07, 0xb2, 0x2a, 0x3d, 0xb8, 0xca, 0x4c, 0xa1, 0x58, - 0x9c, 0x2f, 0x95, 0x95, 0x28, 0xdd, 0x5f, 0xbe, 0x32, 0x9d, 0x8f, 0xdf, - 0x1a, 0xbf, 0x45, 0x17, 0x98, 0xaf, 0xec, 0x9d, 0x4c, 0x4f, 0xf7, 0x77, - 0x7b, 0xbc, 0xc4, 0xfa, 0x60, 0xb5, 0xb8, 0x98, 0x52, 0x25, 0x16, 0x05, - 0x31, 0x3c, 0x17, 0xfe, 0x1b, 0x48, 0x04, 0xf4, 0x40, 0x3f, 0x45, 0x63, - 0x5a, 0x61, 0x6f, 0x9a, 0x40, 0x29, 0x23, 0xfc, 0xd2, 0xf7, 0x99, 0x41, - 0xf5, 0x40, 0x0c, 0xf8, 0xea, 0x96, 0xc8, 0xc8, 0x12, 0xfc, 0x01, 0xc4, - 0x23, 0xec, 0xa7, 0x0c, 0x62, 0x62, 0x6c, 0x48, 0x6e, 0xa5, 0x48, 0xd9, - 0xe3, 0xaa, 0x1e, 0xea, 0x1d, 0x94, 0x83, 0xbc, 0xac, 0x2e, 0xe1, 0xc7, - 0x55, 0xa1, 0x62, 0xef, 0x73, 0x50, 0x55, 0x37, 0x68, 0x7e, 0x32, 0xc2, - 0x9a, 0x89, 0x5c, 0x2d, 0x08, 0x7f, 0x32, 0x96, 0x69, 0x79, 0xc6, 0x38, - 0x8f, 0x33, 0x58, 0xe7, 0x7f, 0x92, 0xaf, 0xaf, 0x3e, 0x9e, 0x62, 0xc0, - 0x4c, 0x06, 0xa2, 0x18, 0xcd, 0x22, 0x4c, 0x28, 0x1a, 0xed, 0x99, 0x31, - 0x0b, 0x95, 0xcd, 0xf1, 0x72, 0x69, 0x9a, 0x1d, 0x9b, 0x16, 0x46, 0x14, - 0x6f, 0x39, 0xd9, 0xac, 0x4b, 0xd0, 0x85, 0x05, 0x4c, 0x60, 0x37, 0x14, - 0xd5, 0x5b, 0x63, 0xb8, 0xd0, 0xac, 0xfc, 0xbc, 0x91, 0x4e, 0xd9, 0xdc, - 0x3f, 0xc5, 0x44, 0xc7, 0x69, 0x2e, 0xa4, 0xc9, 0xd8, 0xe4, 0x54, 0xe5, - 0xa4, 0xf7, 0xf9, 0x74, 0x75, 0x49, 0x25, 0x51, 0xea, 0xfc, 0xe1, 0xc3, - 0x1a, 0x66, 0xc9, 0x72, 0xf9, 0xf9, 0xcf, 0x59, 0xb6, 0x79, 0x44, 0xc0, - 0xa2, 0xb2, 0xb7, 0xda, 0x82, 0xbd, 0x91, 0x3d, 0x68, 0x85, 0xa3, 0x63, - 0x1d, 0x2c, 0x1c, 0xb3, 0x15, 0xc7, 0x07, 0x63, 0xc7, 0x53, 0xbb, 0x35, - 0x67, 0x1a, 0x43, 0x80, 0xa4, 0xae, 0x63, 0x2e, 0x3d, 0x21, 0x35, 0xb4, - 0xf4, 0x6c, 0xbd, 0xec, 0x04, 0x5a, 0x0d, 0x43, 0x83, 0x69, 0x52, 0x26, - 0x6b, 0x15, 0x6c, 0xfa, 0x7a, 0x05, 0x01, 0x9a, 0xac, 0x21, 0x02, 0x0c, - 0x9f, 0x3f, 0xc0, 0x1e, 0x4b, 0xbe, 0x3f, 0xb9, 0xcc, 0xa1, 0xb3, 0xd2, - 0x04, 0x24, 0xe0, 0x40, 0xf1, 0xc5, 0xcf, 0xc0, 0xbb, 0x12, 0x55, 0xfb, - 0x03, 0x55, 0x7b, 0x01, 0xcd, 0xaa, 0x83, 0x86, 0x24, 0xb6, 0xea, 0x60, - 0x9a, 0xb4, 0xd1, 0xd9, 0x86, 0xee, 0x71, 0xe1, 0xf8, 0x3b, 0x61, 0xd7, - 0x8f, 0xae, 0xf9, 0x3f, 0x70, 0x44, 0x42, 0x90, 0x9b, 0xb4, 0xaf, 0x55, - 0x7f, 0x02, 0xce, 0xaa, 0x8e, 0x9b, 0xfa, 0x63, 0x5f, 0x83, 0x8e, 0x4e, - 0xf3, 0xf9, 0xe5, 0x62, 0xb5, 0x86, 0xaf, 0xdc, 0x9d, 0xa1, 0xf4, 0xb0, - 0x83, 0x81, 0x47, 0x15, 0x75, 0x14, 0x14, 0xab, 0x06, 0xd5, 0x13, 0xc8, - 0xd8, 0x86, 0x32, 0xf5, 0x4a, 0x2b, 0x9d, 0xb3, 0x62, 0x82, 0x40, 0x72, - 0x4a, 0x46, 0x9f, 0x59, 0xd4, 0x53, 0x0f, 0x6d, 0x3f, 0xd5, 0xf5, 0x0c, - 0x66, 0xf3, 0x78, 0xfe, 0x22, 0x7a, 0xcc, 0x9b, 0x6f, 0x5a, 0x38, 0x2f, - 0xd6, 0x77, 0x2c, 0xee, 0xf5, 0x91, 0xda, 0xf9, 0xdd, 0xeb, 0xf9, 0x91, - 0x4c, 0x77, 0x4d, 0x6f, 0x42, 0xe3, 0x36, 0x55, 0xc2, 0x5e, 0x47, 0x1c, - 0x78, 0xa5, 0x4d, 0xa3, 0x55, 0xb4, 0xb8, 0x1f, 0x43, 0xff, 0xba, 0x17, - 0x89, 0x0f, 0x87, 0xf7, 0x2a, 0xf1, 0x17, 0x15, 0x9e, 0xea, 0x9a, 0x4d, - 0x23, 0xed, 0xbb, 0x87, 0x09, 0x0f, 0x70, 0x1e, 0x46, 0x62, 0xdd, 0x22, - 0xde, 0x46, 0xb5, 0x1d, 0x2d, 0x49, 0xa2, 0xdb, 0xee, 0x23, 0x82, 0x5e, - 0xaf, 0x22, 0x1b, 0xed, 0x36, 0xc2, 0x13, 0x06, 0x8c, 0x22, 0xd5, 0x8c, - 0xae, 0xcf, 0xbf, 0x24, 0x26, 0x96, 0xcb, 0xb6, 0x06, 0xc4, 0x2e, 0x14, - 0xaa, 0xa4, 0xf8, 0xb9, 0x89, 0x49, 0x0e, 0x4f, 0xa7, 0x8b, 0x65, 0xc6, - 0xb6, 0xef, 0x41, 0xd9, 0x12, 0xc3, 0x26, 0xcb, 0x0e, 0xc3, 0x26, 0xbb, - 0xf5, 0x63, 0x2b, 0xe0, 0x5f, 0xe6, 0xcb, 0xc0, 0x58, 0xda, 0xb8, 0x95, - 0x0a, 0x3b, 0x60, 0x7b, 0xf0, 0xd6, 0xfd, 0x38, 0x60, 0x7b, 0xf0, 0xd6, - 0xdd, 0x39, 0x60, 0xb3, 0xbc, 0xa8, 0x90, 0x33, 0x36, 0x90, 0x4c, 0x01, - 0x92, 0xd1, 0xa7, 0xd6, 0xef, 0xcf, 0xb3, 0x95, 0x98, 0x54, 0x59, 0xa4, - 0x8b, 0x82, 0x56, 0x60, 0x03, 0x0a, 0x0c, 0x40, 0x26, 0xc3, 0x24, 0x75, - 0x39, 0xfd, 0x42, 0x6a, 0xfe, 0x6b, 0x96, 0xfb, 0x5a, 0x83, 0x67, 0x04, - 0xd7, 0x03, 0xbf, 0xab, 0xe3, 0x55, 0x3b, 0x51, 0x69, 0xee, 0x16, 0x8f, - 0x83, 0xd6, 0x07, 0x1d, 0x57, 0xd8, 0xd1, 0xeb, 0xc5, 0xd4, 0xff, 0x44, - 0xfe, 0x4a, 0xa9, 0xaf, 0x19, 0x4e, 0x34, 0x06, 0xb4, 0xe8, 0xdd, 0xc5, - 0xb2, 0x5a, 0x0c, 0x5c, 0xbc, 0x52, 0x91, 0x5a, 0xdc, 0x62, 0x94, 0x88, - 0xeb, 0x25, 0x92, 0x6e, 0xa7, 0x89, 0x27, 0x42, 0x05, 0x6d, 0x05, 0x06, - 0x21, 0xbc, 0xd6, 0x92, 0x44, 0xbc, 0x16, 0x03, 0x71, 0xa1, 0xc6, 0x31, - 0x05, 0x74, 0x55, 0xe5, 0xaf, 0x31, 0x4a, 0x81, 0x71, 0x9b, 0x1f, 0x8a, - 0x0a, 0xc5, 0xcd, 0x2f, 0x37, 0x51, 0x63, 0x54, 0x80, 0x76, 0xa8, 0x8f, - 0x24, 0xea, 0xa4, 0x3d, 0xea, 0xef, 0x12, 0x75, 0x4f, 0x43, 0xbd, 0xbd, - 0xd7, 0x1e, 0x48, 0xab, 0x84, 0xb6, 0x5d, 0x50, 0x6c, 0x84, 0x1a, 0x3b, - 0xa1, 0xed, 0xf0, 0x86, 0x42, 0x76, 0x55, 0xfd, 0xcd, 0xdb, 0x27, 0xbd, - 0x95, 0xfe, 0x6c, 0x7d, 0x96, 0xd0, 0x8c, 0x58, 0x84, 0x6a, 0x41, 0xb9, - 0x7a, 0x2d, 0x28, 0xc1, 0x5b, 0x15, 0xca, 0xd1, 0x2b, 0xa3, 0x9c, 0x44, - 0xd1, 0x67, 0xdb, 0x2a, 0xe1, 0xd2, 0xc1, 0x9d, 0x13, 0xcb, 0xfc, 0xe6, - 0x11, 0x59, 0xc4, 0xbe, 0x77, 0xa8, 0xcd, 0x21, 0xdb, 0xbc, 0x6f, 0x26, - 0xce, 0x5a, 0x2e, 0x88, 0x82, 0xe3, 0x0a, 0xfc, 0x35, 0x2f, 0x36, 0x3b, - 0x8d, 0x2c, 0x51, 0xa3, 0x8b, 0x1a, 0xc5, 0x5a, 0x57, 0xc8, 0x9a, 0xf3, - 0xbb, 0x94, 0xdd, 0xeb, 0xe2, 0x22, 0x4c, 0x96, 0x4b, 0xab, 0xa6, 0x51, - 0xf2, 0xa6, 0xbf, 0x85, 0x20, 0x3d, 0x06, 0x7f, 0xac, 0x79, 0x19, 0x1b, - 0x39, 0x6e, 0xc6, 0x02, 0xba, 0x2c, 0x5f, 0x83, 0x08, 0x77, 0x91, 0x11, - 0x7d, 0xb4, 0x72, 0xb2, 0x11, 0x15, 0x6f, 0x81, 0x35, 0x1b, 0xc9, 0x4b, - 0xd2, 0xe4, 0xeb, 0x2e, 0xdb, 0x46, 0xda, 0x3a, 0x87, 0xa0, 0xa8, 0x71, - 0xf1, 0x14, 0x2a, 0xcc, 0x9d, 0x9d, 0xa8, 0x43, 0xd1, 0x2d, 0x1a, 0xaa, - 0xb7, 0xd4, 0x25, 0xaf, 0x8c, 0x3b, 0x85, 0x4d, 0xb6, 0x82, 0xde, 0xea, - 0x5e, 0x3b, 0x99, 0x55, 0x80, 0xf2, 0x81, 0x5d, 0xf8, 0xb7, 0x4d, 0x18, - 0x07, 0xbc, 0x03, 0x15, 0x11, 0x79, 0xc8, 0xb7, 0x57, 0x41, 0x4e, 0x4b, - 0x1a, 0x3d, 0xd4, 0x03, 0x9f, 0x99, 0xe3, 0xec, 0x54, 0x77, 0x74, 0xa5, - 0xa0, 0x22, 0xc2, 0x3b, 0x5c, 0x15, 0xe3, 0xb7, 0x47, 0xe3, 0xd3, 0xeb, - 0x67, 0x61, 0xa2, 0x16, 0xcc, 0xa1, 0x89, 0x17, 0x57, 0x0c, 0x3d, 0x15, - 0x89, 0x0f, 0x3b, 0xa0, 0x87, 0x58, 0x64, 0xfc, 0xc0, 0xc5, 0x8a, 0x0c, - 0x5e, 0x2f, 0x5c, 0x2a, 0x91, 0xf3, 0x1f, 0x07, 0xce, 0x8d, 0xfa, 0xc8, - 0x54, 0x9b, 0x37, 0x3c, 0x9e, 0xfa, 0x70, 0x58, 0xcb, 0xe8, 0x4a, 0x39, - 0xf1, 0x3a, 0x2d, 0x42, 0x0d, 0xb5, 0xa3, 0x33, 0xe0, 0x70, 0x15, 0xdd, - 0xa0, 0xa2, 0x31, 0x05, 0x34, 0x57, 0x94, 0x2e, 0xe5, 0xdb, 0xd5, 0xb1, - 0x72, 0x8f, 0xcf, 0x04, 0x30, 0x04, 0x7d, 0x23, 0x46, 0x6e, 0x60, 0x8c, - 0x22, 0x30, 0xce, 0x0c, 0x8c, 0x71, 0x04, 0xc6, 0xcc, 0xc0, 0x98, 0x44, - 0x60, 0xc0, 0x93, 0x43, 0x61, 0xd4, 0xfe, 0x74, 0xfd, 0x69, 0x76, 0x9d, - 0x1e, 0xe9, 0x75, 0x1a, 0x18, 0xfc, 0x0e, 0x0c, 0x5e, 0x06, 0x46, 0x39, - 0xc7, 0xfd, 0xe6, 0x92, 0xae, 0xc6, 0x06, 0x73, 0x7b, 0x11, 0xcc, 0xe5, - 0x26, 0xca, 0x7e, 0x04, 0xca, 0x99, 0x89, 0xf2, 0x20, 0x02, 0x65, 0x66, - 0xa2, 0xbc, 0x15, 0x81, 0x02, 0x52, 0x1b, 0x07, 0xc4, 0xb6, 0x67, 0x88, - 0x66, 0xdf, 0xf8, 0xf5, 0x00, 0x7f, 0x71, 0x41, 0x71, 0x62, 0x9b, 0x18, - 0xdc, 0xbd, 0x1d, 0xc1, 0x5d, 0x6e, 0xa2, 0xbc, 0x13, 0x81, 0x72, 0x66, - 0xa2, 0x8c, 0x62, 0x14, 0x7a, 0x66, 0xe1, 0xc4, 0xa8, 0x34, 0x08, 0x6e, - 0x12, 0x10, 0xdc, 0xdb, 0x86, 0x70, 0xde, 0x31, 0xb5, 0xcf, 0x52, 0xc6, - 0x11, 0x88, 0xee, 0x2e, 0x06, 0x94, 0x50, 0x48, 0xe8, 0xe0, 0x08, 0x10, - 0x76, 0x5e, 0xb7, 0x9d, 0x07, 0x18, 0x0a, 0x3a, 0xac, 0x23, 0xb9, 0x07, - 0x90, 0xc2, 0x4e, 0xea, 0x40, 0xee, 0x21, 0x9c, 0xb0, 0x63, 0x3a, 0x50, - 0x23, 0x40, 0x6a, 0x11, 0x7d, 0x2b, 0x20, 0x98, 0x71, 0x27, 0xc1, 0x8c, - 0x3b, 0x49, 0x66, 0xdc, 0x45, 0x34, 0xe3, 0x4e, 0xb2, 0x19, 0xb7, 0x12, - 0x4e, 0x40, 0x36, 0x93, 0x4e, 0xb2, 0x99, 0x74, 0x92, 0xcd, 0xa4, 0x8b, - 0x6c, 0x10, 0xa9, 0xb5, 0x68, 0x26, 0xf1, 0xa2, 0xb9, 0xf5, 0x2e, 0x00, - 0x45, 0x28, 0xb3, 0x56, 0x0b, 0xc0, 0x9a, 0x70, 0x5f, 0xcf, 0x1d, 0x07, - 0x6c, 0x76, 0xc4, 0xaf, 0x18, 0x2f, 0x71, 0x41, 0xb7, 0x70, 0x11, 0x2b, - 0x86, 0x9a, 0x80, 0x61, 0xcf, 0x9b, 0x43, 0x86, 0x45, 0xb9, 0x6f, 0x0b, - 0xba, 0x6b, 0x8b, 0xe6, 0x6f, 0xb3, 0xce, 0x1b, 0xf9, 0xf3, 0x44, 0x1d, - 0x6b, 0xe4, 0x0f, 0x60, 0x42, 0xfc, 0x41, 0x56, 0x3c, 0x7f, 0xfe, 0xb0, - 0x65, 0xcf, 0x9b, 0x03, 0x97, 0x45, 0x39, 0x39, 0x0b, 0x3a, 0x35, 0x8b, - 0xe6, 0x6f, 0x33, 0xf5, 0xae, 0x7c, 0x9b, 0x63, 0x9f, 0x25, 0x31, 0x7e, - 0xc7, 0x82, 0x7e, 0xc6, 0x62, 0xf8, 0xab, 0x09, 0x9e, 0xf6, 0xbc, 0x2e, - 0x7c, 0x5a, 0x12, 0xe7, 0x08, 0xcc, 0xeb, 0xfc, 0x2b, 0xaa, 0x61, 0xff, - 0xb6, 0xf0, 0x6b, 0x71, 0x06, 0x5d, 0x56, 0x3d, 0xfe, 0x86, 0x90, 0x6e, - 0x6d, 0x82, 0x87, 0xc5, 0x55, 0xe8, 0xaa, 0x45, 0x24, 0xb1, 0x24, 0x2e, - 0xd4, 0xec, 0x8b, 0x17, 0xaa, 0x1d, 0x2e, 0xc5, 0xcd, 0xb4, 0xbb, 0x15, - 0x68, 0xf3, 0x96, 0x2a, 0x1a, 0x76, 0xdc, 0x06, 0x78, 0x52, 0x07, 0x0c, - 0x9a, 0x1d, 0x35, 0x97, 0xc5, 0x87, 0xe7, 0x7b, 0x5e, 0x13, 0xa0, 0xaf, - 0xb1, 0x1f, 0x02, 0x8c, 0x57, 0x7b, 0x21, 0x3d, 0xb2, 0x17, 0x92, 0x53, - 0x8f, 0xf8, 0x5e, 0xd8, 0x2a, 0xea, 0x5f, 0xa3, 0xf6, 0x98, 0x86, 0x8f, - 0x91, 0x5e, 0xba, 0xda, 0x53, 0x17, 0x86, 0x8f, 0x91, 0xde, 0x9d, 0xda, - 0x93, 0x97, 0x86, 0x8f, 0x51, 0xfe, 0x80, 0xda, 0x53, 0x17, 0x66, 0x8f, - 0xf5, 0x5e, 0x64, 0x0e, 0x92, 0x28, 0xa5, 0xc4, 0x50, 0x38, 0xd0, 0x43, - 0x5b, 0x1d, 0xb0, 0xb5, 0x8a, 0x31, 0x9c, 0xff, 0x8f, 0x22, 0x0c, 0x33, - 0x6c, 0x70, 0x43, 0x99, 0x98, 0x7b, 0xc9, 0xe6, 0xc0, 0xed, 0x51, 0x21, - 0xee, 0xed, 0xa2, 0x64, 0x80, 0xf7, 0xaf, 0xe9, 0x5f, 0x20, 0xc9, 0x90, - 0x71, 0x71, 0xe4, 0xbd, 0xac, 0x17, 0xe4, 0x65, 0x3b, 0x5f, 0x2f, 0x8b, - 0x30, 0xa0, 0x3a, 0x14, 0x26, 0x04, 0x17, 0x4e, 0xe5, 0xcb, 0x2a, 0xe0, - 0x8d, 0xae, 0x5e, 0x6c, 0x94, 0x81, 0x8c, 0x5f, 0xd0, 0xbc, 0xa9, 0x22, - 0x3e, 0x54, 0x30, 0xb7, 0xe0, 0xa9, 0x72, 0x56, 0xb2, 0x5f, 0x79, 0x52, - 0x00, 0x51, 0x8a, 0x0f, 0x38, 0xd4, 0x1f, 0xdd, 0xb3, 0xdf, 0x36, 0xf6, - 0x4f, 0x50, 0xba, 0x5b, 0x73, 0x7e, 0x0d, 0xf9, 0x99, 0x0c, 0x73, 0x05, - 0x9d, 0xd3, 0xd7, 0x7c, 0x7c, 0xeb, 0x28, 0xee, 0xb8, 0xdb, 0x5a, 0x5d, - 0xb4, 0x3b, 0xcb, 0x6f, 0xa4, 0x56, 0x99, 0xef, 0xfb, 0x28, 0x7a, 0x9f, - 0xcc, 0xd0, 0x83, 0xda, 0xa0, 0x9e, 0x0b, 0x69, 0x85, 0x3b, 0xc2, 0x09, - 0x9f, 0xcd, 0xf8, 0x81, 0x58, 0x13, 0xf8, 0x7e, 0x2f, 0x68, 0xa6, 0x71, - 0x82, 0x06, 0x49, 0x09, 0xdd, 0xbf, 0xa8, 0xeb, 0x1d, 0xfb, 0x25, 0x8a, - 0x13, 0x45, 0x04, 0x05, 0xee, 0x5e, 0xd3, 0x7c, 0x93, 0x20, 0x10, 0x5d, - 0xcc, 0x28, 0xc0, 0x03, 0xff, 0x0d, 0x50, 0x20, 0x24, 0x89, 0x4a, 0x7a, - 0xf9, 0x10, 0x6e, 0xab, 0xa9, 0x90, 0x98, 0x87, 0x7a, 0xb5, 0x8f, 0x5f, - 0x43, 0x5c, 0xea, 0x2f, 0x8b, 0xca, 0x35, 0xf1, 0x4c, 0x2f, 0x95, 0xe0, - 0xc1, 0x8c, 0xe7, 0xce, 0xce, 0xe5, 0x98, 0x47, 0x41, 0xef, 0xeb, 0x4f, - 0x69, 0x60, 0x24, 0x7d, 0x9e, 0x80, 0xf0, 0x96, 0x82, 0x5b, 0x3b, 0x9c, - 0x8b, 0x76, 0x10, 0x22, 0x30, 0xe8, 0x4e, 0x43, 0x00, 0x01, 0xe1, 0x26, - 0x2b, 0x69, 0x98, 0x06, 0xbb, 0xa0, 0xc1, 0x98, 0xd7, 0x11, 0xb3, 0x0b, - 0x1a, 0x9d, 0xc3, 0x74, 0x46, 0xec, 0xc8, 0x2b, 0x1e, 0xe3, 0x74, 0xc5, - 0xeb, 0x58, 0x24, 0x2e, 0xdb, 0x3b, 0x95, 0x49, 0x88, 0xf5, 0x85, 0x42, - 0xe7, 0xb0, 0x55, 0xe7, 0xd6, 0xea, 0xa4, 0x81, 0x79, 0x43, 0x81, 0xcf, - 0xca, 0x38, 0xab, 0x13, 0x80, 0x33, 0x5d, 0x13, 0xb2, 0xcd, 0x06, 0xd0, - 0x08, 0x9b, 0x6c, 0x40, 0x26, 0x59, 0x6b, 0xb4, 0x98, 0x04, 0xb8, 0xe7, - 0xe8, 0x53, 0x98, 0xba, 0xc0, 0x4c, 0x46, 0x11, 0xb6, 0xb7, 0xa1, 0x70, - 0x44, 0x2e, 0xb5, 0x3d, 0x60, 0xd6, 0x0e, 0x9f, 0x50, 0x77, 0x97, 0x2f, - 0xfb, 0xba, 0xdf, 0xa6, 0x51, 0xe2, 0xdf, 0xb9, 0x59, 0xa3, 0x20, 0x1b, - 0x6d, 0xe5, 0xe2, 0x95, 0x1c, 0xbc, 0xd0, 0xd8, 0x8f, 0x8a, 0xe9, 0x74, - 0x97, 0x33, 0xb8, 0xd4, 0x5b, 0xa2, 0x22, 0x0d, 0xf0, 0x52, 0x6a, 0x0e, - 0x4d, 0x1c, 0xa1, 0x31, 0x31, 0x0c, 0x28, 0x6e, 0x27, 0x63, 0x20, 0xe9, - 0xae, 0xd6, 0x07, 0xe8, 0x6e, 0xe7, 0x5d, 0x89, 0x1d, 0x82, 0x82, 0xc7, - 0xc7, 0x27, 0x5f, 0x9f, 0x9e, 0xb6, 0x32, 0xf5, 0x66, 0x41, 0xb5, 0x12, - 0x56, 0x8d, 0xc0, 0x8c, 0x95, 0x63, 0xa3, 0xcc, 0x5c, 0xe0, 0xb0, 0xd8, - 0x08, 0xb6, 0xd1, 0x07, 0x9d, 0x23, 0x3d, 0x54, 0x64, 0x32, 0x27, 0xfa, - 0xf6, 0xe9, 0x97, 0xf1, 0x66, 0x66, 0x51, 0x01, 0xba, 0x6a, 0x64, 0x66, - 0x70, 0xdb, 0x55, 0x6c, 0xad, 0x45, 0xd7, 0x46, 0x7c, 0xae, 0x08, 0x6b, - 0xc5, 0x38, 0x6e, 0x6d, 0x3e, 0xdc, 0x2b, 0xdb, 0xb8, 0x47, 0xd2, 0x75, - 0x31, 0x46, 0xbe, 0x86, 0x4e, 0xbe, 0xa8, 0x90, 0xdb, 0xf5, 0xeb, 0x18, - 0x69, 0x57, 0x48, 0xed, 0x8e, 0xef, 0x4c, 0xb1, 0x37, 0xde, 0x3c, 0x05, - 0x45, 0x9f, 0x8d, 0x26, 0xa3, 0x3b, 0x12, 0x7e, 0xa7, 0x06, 0xe8, 0xda, - 0x08, 0xdd, 0x1b, 0xa2, 0xad, 0xea, 0xc7, 0xb5, 0x87, 0xb7, 0x4d, 0xf6, - 0x9a, 0x0f, 0x39, 0x82, 0x8f, 0xf0, 0x2e, 0x8b, 0x72, 0x7d, 0x71, 0x87, - 0x2d, 0xd3, 0x7d, 0xbd, 0x10, 0xa6, 0xa4, 0x9f, 0x09, 0xcb, 0xa4, 0xce, - 0x86, 0xde, 0x2f, 0xac, 0x45, 0x2f, 0xa2, 0x49, 0x2f, 0xa6, 0x4d, 0x5d, - 0x35, 0x8a, 0xb4, 0xaa, 0xeb, 0xcd, 0xaa, 0xbe, 0xfb, 0xf5, 0x2f, 0xa5, - 0x83, 0x35, 0x92, 0x6b, 0xf0, 0xe6, 0xe8, 0xf5, 0x02, 0xb1, 0xcb, 0x66, - 0x40, 0x60, 0x06, 0x77, 0x03, 0x2e, 0xa3, 0x2c, 0xbc, 0x0e, 0x7c, 0x02, - 0x5e, 0xb7, 0x4d, 0x1d, 0x21, 0xb6, 0xe5, 0x52, 0xd3, 0x4a, 0xe6, 0xb0, - 0x4d, 0xec, 0xea, 0x9d, 0x9d, 0xee, 0xf1, 0xa9, 0x1b, 0xad, 0xdd, 0xdd, - 0x7a, 0x84, 0x4d, 0xbe, 0xb3, 0x92, 0x2a, 0x43, 0xc8, 0xcf, 0x00, 0x19, - 0x0b, 0xea, 0xe0, 0x5d, 0x28, 0x51, 0x07, 0x75, 0x56, 0xd4, 0x57, 0xd5, - 0x73, 0x98, 0x28, 0x88, 0x7a, 0x96, 0xc1, 0x4e, 0xa2, 0xc0, 0xd7, 0xe6, - 0x67, 0x59, 0x5e, 0x95, 0x0c, 0x45, 0xfb, 0xc3, 0x99, 0xee, 0x73, 0xdf, - 0xf1, 0x3f, 0xd4, 0x94, 0x14, 0x82, 0x8b, 0x64, 0x58, 0xd0, 0x7d, 0x0c, - 0x03, 0x26, 0x9e, 0x17, 0xcf, 0x09, 0xb8, 0x30, 0x17, 0xd0, 0x02, 0x9f, - 0xea, 0x20, 0x16, 0xc5, 0x0a, 0xd9, 0xe5, 0x65, 0x57, 0x5f, 0x53, 0x86, - 0xa9, 0x94, 0xbf, 0xd6, 0x11, 0x19, 0xc7, 0x11, 0xc1, 0x79, 0xb9, 0x8e, - 0xcc, 0x24, 0x8e, 0x8c, 0x9a, 0x46, 0xc2, 0x84, 0xf6, 0xbc, 0x1b, 0xb2, - 0xc6, 0x13, 0xdc, 0xca, 0x34, 0x82, 0xac, 0x5e, 0x65, 0x91, 0xa4, 0x62, - 0x96, 0x82, 0x51, 0x17, 0xc3, 0x0d, 0xbc, 0x85, 0xf7, 0x3e, 0xe0, 0xf1, - 0x1b, 0x58, 0x2f, 0x2a, 0x3f, 0xeb, 0xf4, 0xe0, 0xbf, 0x56, 0xe1, 0x33, - 0x98, 0x8f, 0x08, 0x4d, 0x05, 0x02, 0x3f, 0xfa, 0xb1, 0x57, 0x55, 0xc8, - 0x2b, 0x58, 0x08, 0xbf, 0x53, 0xd3, 0xaf, 0x13, 0x07, 0xc6, 0x0b, 0x1e, - 0xe3, 0xd7, 0x99, 0xf1, 0x6b, 0x76, 0xdc, 0xd7, 0x4e, 0xd7, 0xa2, 0xdf, - 0x55, 0x31, 0x0f, 0x35, 0x4c, 0x8c, 0x4d, 0x2e, 0xcc, 0x9f, 0x67, 0xe6, - 0xcf, 0xd9, 0x38, 0x96, 0x91, 0x49, 0x80, 0x91, 0x3a, 0x4e, 0x26, 0x26, - 0x27, 0xe6, 0xcf, 0x33, 0xf3, 0xe7, 0x6c, 0x62, 0x70, 0x72, 0x8b, 0x9f, - 0xc2, 0x17, 0x82, 0x11, 0x42, 0xf6, 0x91, 0xf2, 0x86, 0x40, 0x36, 0x0b, - 0xd3, 0xd5, 0xaf, 0xd3, 0xba, 0xa5, 0xcb, 0x96, 0x1e, 0xa7, 0x57, 0x40, - 0x93, 0x0f, 0x2d, 0x69, 0xf0, 0x80, 0x1e, 0x42, 0x01, 0x5b, 0x64, 0x20, - 0xee, 0x23, 0x91, 0x96, 0x6e, 0x8d, 0xe7, 0x04, 0x67, 0xd8, 0xbc, 0x5f, - 0x6c, 0xd6, 0x2b, 0x20, 0x2c, 0xea, 0x79, 0x52, 0x89, 0x23, 0xcf, 0xca, - 0xcb, 0x7c, 0x95, 0xa4, 0xbd, 0x5d, 0x14, 0x84, 0x18, 0xcc, 0x20, 0x7b, - 0xbb, 0x5c, 0x7f, 0x23, 0xa2, 0xc9, 0x83, 0x9b, 0x4e, 0x58, 0xb1, 0x51, - 0xd0, 0xee, 0xe1, 0x18, 0xd3, 0xbf, 0xdd, 0x6c, 0xe0, 0xb2, 0x67, 0x5a, - 0x64, 0xa9, 0x33, 0xfc, 0xb2, 0x20, 0xe1, 0x8b, 0x53, 0x04, 0xf3, 0xa0, - 0x40, 0xe0, 0xc6, 0xae, 0x0f, 0xa5, 0x7a, 0x32, 0x46, 0xa1, 0x8c, 0x71, - 0x28, 0x43, 0x36, 0xc0, 0x6d, 0x28, 0x3c, 0xf3, 0x3a, 0x17, 0x6e, 0xbd, - 0x8c, 0x6e, 0xf3, 0xb2, 0xe7, 0x98, 0x17, 0x00, 0x8c, 0xe0, 0xe8, 0xb2, - 0x55, 0x09, 0x79, 0x7b, 0x93, 0xd3, 0xe7, 0xe3, 0xec, 0x74, 0x7a, 0xb9, - 0x2c, 0x49, 0x02, 0x4c, 0x4d, 0x80, 0x70, 0x3c, 0x85, 0x72, 0x7d, 0x79, - 0x72, 0x7e, 0xb1, 0xfe, 0x35, 0xe3, 0xc1, 0x4a, 0xd1, 0x25, 0x47, 0x6c, - 0x12, 0x7e, 0x9a, 0x43, 0xdb, 0xf1, 0x90, 0x25, 0x62, 0x9e, 0xdb, 0xab, - 0xec, 0xeb, 0x87, 0xc9, 0xe7, 0xd3, 0xf2, 0x7c, 0x9b, 0x16, 0xcc, 0xa9, - 0x8e, 0xf9, 0x14, 0x4b, 0xa1, 0xdb, 0xcf, 0xed, 0x0d, 0xac, 0x73, 0x7f, - 0x48, 0x86, 0x40, 0x7d, 0x1b, 0xc6, 0x7d, 0x18, 0x2a, 0x3e, 0xcb, 0x4e, - 0xcb, 0xfe, 0xc0, 0xa4, 0x74, 0x13, 0x4b, 0xe9, 0x47, 0xa6, 0x84, 0x79, - 0x9b, 0xbe, 0x36, 0xaa, 0x2a, 0x55, 0x0f, 0x57, 0x9e, 0xdc, 0xf9, 0x60, - 0xc5, 0x3b, 0x54, 0x4c, 0x14, 0xf9, 0x43, 0x0c, 0xe7, 0x02, 0xf4, 0x47, - 0x3f, 0x6f, 0xdc, 0x8e, 0xec, 0x65, 0x1e, 0xbb, 0x08, 0xf5, 0xb4, 0x27, - 0x17, 0x50, 0xc7, 0xc7, 0xd0, 0xfe, 0x29, 0xf0, 0xb5, 0x7d, 0x3d, 0x48, - 0xf0, 0xe3, 0x06, 0x6c, 0x6b, 0xe0, 0xbf, 0x3e, 0x19, 0xa1, 0x20, 0x21, - 0xf6, 0xa7, 0xfb, 0x4c, 0xd2, 0x60, 0x25, 0xa7, 0x04, 0xcb, 0x0f, 0x20, - 0x0d, 0x38, 0xa1, 0xf1, 0x18, 0xdc, 0xbe, 0xa0, 0xbf, 0x17, 0x33, 0x53, - 0xe0, 0x1b, 0xc1, 0x96, 0xa1, 0x34, 0x0e, 0x6e, 0x7d, 0x9c, 0x1c, 0x72, - 0xf1, 0x1e, 0xe0, 0xdc, 0x04, 0xe5, 0x87, 0xfb, 0x0e, 0xe4, 0x99, 0x0f, - 0x72, 0xe4, 0x83, 0x9c, 0xf9, 0x20, 0xc7, 0x3e, 0xc8, 0x2b, 0x0d, 0x92, - 0xd7, 0x13, 0xfc, 0x2c, 0xd4, 0xe4, 0xc8, 0x7a, 0xfd, 0xe9, 0x32, 0xc1, - 0x8f, 0x3c, 0xdd, 0x62, 0xdd, 0xd7, 0x37, 0xee, 0xd5, 0x6d, 0xff, 0x8e, - 0xe3, 0x50, 0xeb, 0x53, 0xaf, 0x1b, 0x55, 0xc4, 0x18, 0x4b, 0xa4, 0x6a, - 0x19, 0x1a, 0xaf, 0xd4, 0x8d, 0xcc, 0x11, 0xbf, 0x46, 0x7b, 0xf1, 0xdd, - 0x41, 0x02, 0xff, 0xc9, 0x31, 0xfb, 0x6a, 0x31, 0x2f, 0xcf, 0xab, 0x5f, - 0xe7, 0x19, 0x4e, 0xfa, 0xda, 0x2c, 0xa2, 0x68, 0xc7, 0xc4, 0x6c, 0xd1, - 0x4b, 0x25, 0x36, 0x29, 0x3d, 0x0d, 0x9e, 0xb4, 0x12, 0xd0, 0xf7, 0x38, - 0xb3, 0xa4, 0x5a, 0x89, 0x55, 0xa1, 0x3b, 0x6f, 0xbc, 0x21, 0x41, 0xdf, - 0x48, 0x1e, 0x03, 0x64, 0x21, 0x7b, 0x10, 0x4e, 0x09, 0x2a, 0x63, 0x87, - 0x65, 0xa3, 0x51, 0x33, 0x86, 0xcf, 0x93, 0x0c, 0xea, 0x9f, 0xff, 0x90, - 0x1c, 0x1a, 0x35, 0x4e, 0x76, 0x60, 0xc9, 0x68, 0x03, 0xfd, 0x08, 0x40, - 0x86, 0x20, 0x14, 0x94, 0x6b, 0xb4, 0x25, 0xa9, 0x0e, 0x14, 0x66, 0x94, - 0x3c, 0xb1, 0x24, 0x32, 0xe2, 0xfd, 0x1a, 0x6e, 0xb0, 0x2f, 0x0b, 0x97, - 0xa5, 0xbd, 0xed, 0x7d, 0x0d, 0x14, 0xae, 0xb0, 0x35, 0xd0, 0xd4, 0x80, - 0x1d, 0x82, 0xb1, 0x76, 0xdf, 0x64, 0x8f, 0xc0, 0x93, 0xd9, 0x3a, 0x07, - 0x8d, 0xc3, 0x44, 0x6e, 0xfa, 0x59, 0x76, 0xb6, 0x58, 0x7d, 0x05, 0xc3, - 0x56, 0xda, 0xb7, 0xc1, 0x45, 0xdb, 0x99, 0xe0, 0xd3, 0xfc, 0xc4, 0xad, - 0x9f, 0xce, 0x0d, 0xe9, 0xcf, 0x18, 0x9a, 0x85, 0x86, 0xc2, 0xaf, 0x9e, - 0x0c, 0xc4, 0xed, 0x0a, 0x13, 0xa7, 0xb6, 0x40, 0x53, 0x3f, 0x83, 0xa9, - 0x87, 0x49, 0x0a, 0x63, 0x5e, 0x41, 0x99, 0xab, 0x64, 0x4a, 0x43, 0x28, - 0x02, 0x49, 0x26, 0x5e, 0xee, 0x9b, 0x6c, 0x2c, 0x17, 0xab, 0xec, 0x7b, - 0xaa, 0xac, 0x5a, 0x4e, 0x73, 0x9e, 0xb0, 0xad, 0xfe, 0x06, 0x0f, 0x71, - 0x20, 0xb7, 0xf7, 0xca, 0x2e, 0xfd, 0xf5, 0xbc, 0x50, 0x69, 0xdf, 0x4a, - 0x26, 0x7b, 0xde, 0x4a, 0x1c, 0x15, 0xcf, 0xa7, 0x8b, 0xe5, 0x52, 0x78, - 0xb8, 0x9a, 0x65, 0xb0, 0x1b, 0x5b, 0x9c, 0x5e, 0x2e, 0x95, 0x63, 0x51, - 0x05, 0x52, 0x4e, 0x7f, 0xce, 0x56, 0x64, 0x68, 0x48, 0xaf, 0x81, 0x1e, - 0x26, 0xe7, 0x65, 0xb9, 0x79, 0x08, 0x96, 0xce, 0x25, 0x1c, 0x24, 0xc1, - 0x24, 0x9b, 0x9f, 0x2e, 0xd7, 0x57, 0x30, 0x2c, 0x5d, 0xec, 0xfc, 0x72, - 0x99, 0x15, 0x74, 0x03, 0xbd, 0x33, 0x7a, 0x7b, 0xfc, 0x60, 0xff, 0xed, - 0xdd, 0xbd, 0x9d, 0xd9, 0xe5, 0x62, 0x89, 0x0f, 0x17, 0x86, 0xd3, 0x21, - 0x91, 0x1d, 0xd2, 0xa2, 0x6a, 0xb8, 0x58, 0x0d, 0xcf, 0xcb, 0x8b, 0xe5, - 0xbe, 0x15, 0xf0, 0x0b, 0x46, 0x87, 0xa5, 0x18, 0x63, 0xe4, 0xd7, 0x77, - 0x61, 0x05, 0xf9, 0xa0, 0xfa, 0xf5, 0xa6, 0xbd, 0xb8, 0x06, 0x1c, 0xf1, - 0x50, 0xe9, 0x03, 0x89, 0x98, 0x0a, 0xc0, 0x21, 0x2c, 0x80, 0xb9, 0xa5, - 0x40, 0x63, 0x46, 0x6f, 0xdb, 0x8e, 0xce, 0x61, 0x19, 0xaa, 0x90, 0x08, - 0x27, 0x00, 0x1e, 0xd2, 0x28, 0x37, 0x17, 0xd7, 0x1b, 0x4f, 0xd7, 0x8e, - 0x0e, 0x29, 0x50, 0x5b, 0xd7, 0xcc, 0x19, 0x56, 0x61, 0xb9, 0xa9, 0x40, - 0xc2, 0x4c, 0xd5, 0x75, 0xd2, 0xca, 0x61, 0x51, 0x58, 0x19, 0x50, 0x59, - 0x5f, 0x32, 0x29, 0x30, 0x27, 0x29, 0x56, 0x43, 0x6a, 0xe3, 0xe6, 0xa2, - 0xf6, 0x54, 0xfa, 0x78, 0x5e, 0x2c, 0x53, 0x98, 0x94, 0x54, 0x5b, 0xe1, - 0x03, 0x02, 0x74, 0x2b, 0x80, 0x2f, 0x3b, 0x5e, 0xeb, 0xf7, 0x02, 0xd8, - 0x69, 0x5c, 0xa1, 0xb7, 0xac, 0xb2, 0x38, 0x98, 0xb4, 0xe9, 0xf2, 0xe5, - 0xf9, 0xa2, 0xd8, 0xae, 0xef, 0xe5, 0xb9, 0x10, 0xa6, 0x2e, 0x3f, 0x16, - 0x19, 0x50, 0xbf, 0x44, 0x38, 0x78, 0x87, 0x73, 0xf2, 0xf3, 0xd5, 0x02, - 0x7b, 0x7c, 0xcc, 0xc8, 0x01, 0x5c, 0xc6, 0x8f, 0x1c, 0x28, 0x09, 0x1c, - 0x14, 0x24, 0x3a, 0x8f, 0x86, 0x17, 0x37, 0xcf, 0xce, 0x90, 0x3b, 0x48, - 0xe6, 0x45, 0x94, 0x8c, 0x6f, 0xf7, 0x19, 0x0c, 0x15, 0xd3, 0xfc, 0x13, - 0x91, 0xad, 0x26, 0xb8, 0xd1, 0x5b, 0xf8, 0x29, 0x49, 0xeb, 0xe8, 0xf8, - 0x56, 0x44, 0x98, 0x30, 0xc1, 0x81, 0x0a, 0x02, 0xc3, 0xc5, 0x3e, 0x06, - 0x05, 0x69, 0x04, 0x85, 0x65, 0x99, 0xba, 0xc8, 0xa7, 0x81, 0x23, 0xd0, - 0xfe, 0x3a, 0x81, 0x83, 0x20, 0x94, 0x22, 0x05, 0x10, 0x5e, 0x4d, 0x70, - 0xc6, 0x52, 0xd9, 0xda, 0x38, 0x2c, 0x86, 0x07, 0xca, 0xf1, 0xfd, 0x0d, - 0x94, 0x8d, 0x13, 0xb3, 0x18, 0xc6, 0xfd, 0x53, 0x33, 0xaf, 0x06, 0xd4, - 0xa0, 0xb5, 0xcc, 0x4a, 0xa9, 0x6d, 0xc1, 0xa9, 0x99, 0x60, 0x16, 0xb8, - 0x46, 0x76, 0x5a, 0x9c, 0x57, 0xce, 0xa0, 0x4d, 0x95, 0xd6, 0xf2, 0xf7, - 0x3e, 0x53, 0xa0, 0xb5, 0x22, 0x10, 0x20, 0x42, 0x6a, 0x51, 0xad, 0x8d, - 0xb6, 0x08, 0x72, 0x0d, 0xf9, 0x43, 0x81, 0x79, 0x00, 0x3f, 0xde, 0x4d, - 0xaa, 0xef, 0xe6, 0x43, 0x06, 0xc6, 0xb8, 0xd1, 0x31, 0x6e, 0x34, 0x8c, - 0x1b, 0x0b, 0x43, 0x71, 0x71, 0x94, 0xc3, 0xf2, 0xfe, 0x7c, 0x81, 0x2b, - 0xd4, 0xeb, 0x9b, 0xf1, 0x66, 0xbd, 0x9c, 0xe6, 0x29, 0xac, 0xf8, 0x6f, - 0x90, 0x53, 0x8f, 0xd9, 0x77, 0xf2, 0x9e, 0xa4, 0x18, 0x7a, 0xa7, 0x57, - 0xfc, 0xbc, 0xd8, 0x90, 0x4f, 0x5b, 0xa0, 0x72, 0xd3, 0x07, 0xf1, 0xc0, - 0x28, 0xb0, 0x58, 0x81, 0x68, 0x0a, 0x50, 0x96, 0x69, 0x09, 0xf3, 0x2b, - 0xcd, 0xbe, 0xc5, 0x62, 0x0e, 0x9f, 0xa7, 0xda, 0x3c, 0xeb, 0x75, 0xaf, - 0x04, 0x4b, 0xbb, 0x4b, 0xcf, 0x4b, 0x30, 0xb7, 0x1a, 0xf3, 0x0c, 0x4c, - 0x67, 0x91, 0xb5, 0x31, 0x7c, 0x4b, 0xa1, 0x42, 0x0e, 0xff, 0x74, 0x36, - 0xb8, 0x38, 0xbb, 0x14, 0xe5, 0x53, 0xc1, 0x34, 0x9a, 0xe0, 0x9b, 0x3d, - 0x3a, 0x89, 0x15, 0xec, 0x2c, 0x8a, 0x64, 0xb3, 0xb8, 0xce, 0x96, 0x90, - 0x46, 0x30, 0xd4, 0x3c, 0xa2, 0xad, 0xc8, 0x5d, 0xca, 0xb6, 0x5b, 0x76, - 0xbe, 0xbe, 0xfa, 0x4c, 0xbc, 0x74, 0x3d, 0xd4, 0x9a, 0xfa, 0xc0, 0x05, - 0x9c, 0xce, 0x7f, 0x82, 0x13, 0xba, 0x6c, 0xfe, 0x03, 0x0a, 0x1b, 0xc6, - 0x5f, 0x09, 0x28, 0x17, 0x71, 0x30, 0x4f, 0x43, 0x8b, 0x8b, 0x69, 0xfc, - 0x68, 0xb8, 0x4f, 0x1e, 0x2c, 0x8f, 0xd1, 0x7f, 0xc8, 0xd1, 0x2e, 0x8e, - 0xd3, 0xf0, 0x3d, 0x05, 0x86, 0x74, 0x89, 0x02, 0xc7, 0x5e, 0x1e, 0xfb, - 0xe1, 0xa2, 0x71, 0x2d, 0x79, 0xe3, 0x2f, 0xfa, 0xe6, 0x9e, 0x8a, 0x26, - 0x71, 0xf2, 0x8a, 0x09, 0x8b, 0xcc, 0xe0, 0xac, 0x5c, 0x8a, 0x39, 0xcf, - 0x7e, 0xb9, 0x5c, 0xe4, 0x40, 0x70, 0x2f, 0x29, 0x96, 0xeb, 0xb2, 0x50, - 0x72, 0x67, 0x92, 0x2e, 0x45, 0x6a, 0x2e, 0x5a, 0x4b, 0x28, 0x81, 0x42, - 0x8d, 0x52, 0xae, 0xe2, 0x1b, 0xdc, 0x24, 0x7d, 0x5c, 0x65, 0x30, 0x07, - 0x07, 0x3e, 0xdd, 0x39, 0xa7, 0x5d, 0x13, 0xe8, 0x8d, 0xa7, 0xc9, 0x8a, - 0x29, 0x9c, 0xd0, 0x4c, 0xa5, 0xdb, 0xaa, 0x3c, 0xd9, 0x09, 0x37, 0xae, - 0xda, 0x7d, 0x8d, 0xb6, 0x77, 0xbd, 0xa5, 0x1c, 0xc1, 0x26, 0x69, 0x20, - 0xb6, 0x78, 0x03, 0xda, 0xcc, 0xd1, 0xee, 0xb5, 0xf8, 0x75, 0x0c, 0x9b, - 0xe6, 0x14, 0x58, 0x18, 0x68, 0x65, 0x0d, 0x04, 0xb5, 0xbe, 0x4f, 0x87, - 0x96, 0x9b, 0xf3, 0x29, 0x2a, 0xda, 0xfe, 0xbe, 0x5d, 0x0c, 0xc9, 0xec, - 0x88, 0x84, 0x83, 0xb4, 0xa1, 0xbc, 0x83, 0x50, 0x3e, 0xc8, 0x6b, 0x04, - 0x30, 0x82, 0x9d, 0x3a, 0xa8, 0x31, 0x40, 0x11, 0xb7, 0x75, 0x40, 0x13, - 0x00, 0x12, 0x8c, 0x85, 0x8e, 0x97, 0xcd, 0x39, 0x7e, 0x73, 0xa9, 0x1d, - 0x31, 0x90, 0x06, 0xd1, 0xcc, 0xb8, 0x6b, 0x9d, 0xe8, 0x9a, 0x03, 0x92, - 0x39, 0x42, 0x43, 0x81, 0x34, 0x57, 0x17, 0xbf, 0xe4, 0x65, 0x7a, 0x0d, - 0x6d, 0x8c, 0x7c, 0xdc, 0xc0, 0xe7, 0x8d, 0x3e, 0xc4, 0xc2, 0x38, 0xa0, - 0x00, 0xa1, 0xa8, 0xd5, 0x38, 0x85, 0x43, 0x8c, 0x6b, 0x02, 0xe0, 0xc3, - 0x37, 0x35, 0x00, 0x5a, 0x65, 0xab, 0xa1, 0x04, 0x3e, 0x75, 0xcf, 0xa7, - 0xf0, 0x13, 0xd4, 0x0f, 0x3a, 0xc9, 0x9f, 0x7f, 0x0c, 0x92, 0x3f, 0xff, - 0x38, 0x86, 0x04, 0xd8, 0x2f, 0xab, 0x6c, 0x45, 0x13, 0x10, 0x41, 0xb0, - 0x04, 0x08, 0xf5, 0x82, 0xf5, 0x31, 0xc3, 0x71, 0xc1, 0x29, 0xd2, 0x06, - 0xae, 0xe5, 0x9a, 0x03, 0xb7, 0x4d, 0xa9, 0xb6, 0x06, 0x21, 0xcd, 0x05, - 0x54, 0x8b, 0xaf, 0x7a, 0x8d, 0x31, 0x84, 0x74, 0x72, 0x0e, 0xfd, 0x19, - 0x74, 0x45, 0x64, 0x01, 0x35, 0x06, 0xd7, 0x64, 0x04, 0x84, 0x46, 0x00, - 0x03, 0x1f, 0xc0, 0x00, 0x14, 0xc7, 0x39, 0xd0, 0xc5, 0x24, 0x0d, 0xc0, - 0x4d, 0x47, 0xc9, 0x50, 0x4a, 0x72, 0x56, 0xa4, 0x29, 0x61, 0xbd, 0x86, - 0x8b, 0xf8, 0x21, 0xac, 0xf8, 0x75, 0x99, 0xe7, 0x23, 0xd0, 0x72, 0xf8, - 0x7f, 0x36, 0x32, 0x4e, 0x00, 0x09, 0xe1, 0x3d, 0xd8, 0x38, 0x80, 0x89, - 0x00, 0x95, 0xe9, 0x3a, 0xf3, 0x4b, 0x8f, 0x18, 0x17, 0x35, 0xea, 0x48, - 0x14, 0x0e, 0x4d, 0x06, 0xba, 0x71, 0x6c, 0xee, 0xd7, 0x0d, 0x9a, 0x23, - 0x9d, 0xe6, 0xb8, 0x9e, 0x26, 0xd0, 0x92, 0x64, 0xeb, 0x69, 0x8e, 0x75, - 0x9a, 0x93, 0x7a, 0x9a, 0xbb, 0x4c, 0xf3, 0xba, 0x8e, 0xe6, 0x44, 0xa7, - 0xb9, 0xd7, 0x48, 0xb3, 0x62, 0xb5, 0x8e, 0xe6, 0x9e, 0x4e, 0x73, 0xbf, - 0xb1, 0xee, 0xbb, 0x31, 0x34, 0xf7, 0x75, 0x9a, 0x0f, 0xe2, 0xda, 0x68, - 0x97, 0xeb, 0x4e, 0x9d, 0x9e, 0x15, 0xe2, 0xa2, 0xd2, 0xc0, 0xa1, 0x2c, - 0x9b, 0xa0, 0x78, 0xf9, 0x71, 0x06, 0xc4, 0x88, 0x16, 0x39, 0x02, 0xba, - 0x80, 0x04, 0xf9, 0x39, 0xa3, 0xcf, 0x63, 0x6d, 0xd5, 0xa9, 0xec, 0x24, - 0xf2, 0xc1, 0xd9, 0x60, 0x46, 0x54, 0x95, 0x03, 0x1f, 0x10, 0xd8, 0x48, - 0x4d, 0x59, 0x30, 0x36, 0x1e, 0x9b, 0x7d, 0x1c, 0x52, 0x40, 0x87, 0xa1, - 0x2c, 0xf1, 0xe5, 0x4c, 0x7e, 0x81, 0x72, 0x9d, 0x83, 0xf1, 0x12, 0x7a, - 0x6a, 0xb1, 0x84, 0x39, 0x2e, 0x45, 0xef, 0x8d, 0xfa, 0x39, 0x16, 0x25, - 0x6c, 0xe3, 0x3f, 0x4f, 0xd5, 0x21, 0x13, 0xb5, 0x28, 0x25, 0xd3, 0x7c, - 0xb5, 0x58, 0x55, 0xfe, 0x8a, 0xb6, 0x4d, 0x07, 0xe6, 0x0c, 0x14, 0xf6, - 0x92, 0x76, 0x54, 0xc1, 0x1c, 0xb3, 0x1c, 0xc3, 0x65, 0x93, 0xd6, 0x57, - 0xc9, 0xf4, 0x2e, 0x83, 0x6c, 0x7c, 0xbe, 0x79, 0xf4, 0xf5, 0x93, 0xaf, - 0x9e, 0xf6, 0xa0, 0xf4, 0x7a, 0x6f, 0xe6, 0x84, 0x7a, 0x82, 0xa1, 0xaf, - 0xd1, 0xe2, 0xaf, 0xde, 0xaf, 0x39, 0x0b, 0xc5, 0xc2, 0x3a, 0x5a, 0x40, - 0xa3, 0x07, 0x1e, 0x27, 0xa8, 0xcb, 0x1b, 0xd7, 0xa3, 0x7d, 0xef, 0xf1, - 0x97, 0x9f, 0xd3, 0x95, 0x0c, 0xa4, 0xad, 0xa7, 0xf3, 0x6c, 0x0e, 0x3b, - 0x51, 0xd5, 0x00, 0xd5, 0x5d, 0x04, 0xb7, 0x39, 0x14, 0x84, 0x2d, 0x9b, - 0x5f, 0xae, 0x92, 0x62, 0xb1, 0x3a, 0xc9, 0x12, 0x40, 0x47, 0x87, 0x6b, - 0x4b, 0xc2, 0xa5, 0x28, 0x0a, 0x39, 0x3a, 0x97, 0x93, 0xa7, 0xa8, 0x59, - 0x49, 0x06, 0x52, 0x6a, 0xdf, 0x40, 0x79, 0x6c, 0xa0, 0x10, 0xf4, 0x90, - 0x69, 0xb8, 0x9d, 0xbb, 0x03, 0x77, 0x8e, 0xa0, 0x01, 0xdb, 0xc8, 0x21, - 0x31, 0x53, 0xed, 0x24, 0x3d, 0xe1, 0xb6, 0x81, 0xb8, 0x30, 0x99, 0x57, - 0x9c, 0x98, 0xfb, 0x0e, 0xe8, 0xe3, 0x2a, 0x08, 0x9c, 0x75, 0x0c, 0xa8, - 0x72, 0xc2, 0x41, 0xa9, 0xa1, 0x1d, 0xf4, 0xe6, 0x79, 0x77, 0xa7, 0x38, - 0xc9, 0x17, 0x9b, 0xf2, 0x3d, 0x48, 0xa2, 0x9f, 0xb3, 0xf5, 0xfc, 0x06, - 0x7e, 0xbc, 0xbb, 0x83, 0x67, 0x3d, 0xf0, 0xe5, 0x2f, 0x58, 0x97, 0xe8, - 0x36, 0x48, 0x94, 0x01, 0x00 + 0x1f, 0x8b, 0x08, 0x08, 0xb6, 0xdf, 0x88, 0x5d, 0x04, 0x00, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x2e, 0x68, 0x74, 0x6d, 0x00, 0xe4, 0x5d, 0x5d, 0x77, + 0x1b, 0x3d, 0x11, 0xbe, 0xe7, 0x1c, 0xfe, 0xc3, 0xd6, 0x85, 0xd6, 0x06, + 0xdb, 0xf1, 0x47, 0x12, 0x52, 0xa7, 0xce, 0x4b, 0xda, 0xa6, 0xa5, 0xd0, + 0x8f, 0x97, 0xa6, 0x50, 0xa0, 0xf4, 0x84, 0xb5, 0x2d, 0xdb, 0x4b, 0xd6, + 0xbb, 0x66, 0x77, 0xdd, 0x24, 0x0d, 0xf9, 0x27, 0x9c, 0xc3, 0x0d, 0x37, + 0xfc, 0x01, 0xae, 0xb8, 0x82, 0x3f, 0xc6, 0x33, 0x23, 0x69, 0xb5, 0x9f, + 0x8e, 0x9d, 0x26, 0xe6, 0x2b, 0xef, 0x5b, 0xdb, 0x2b, 0x8d, 0x66, 0x46, + 0xa3, 0xd1, 0x68, 0x24, 0x8d, 0xb4, 0x8f, 0xef, 0x3d, 0x7b, 0xfb, 0xf4, + 0xfd, 0xaf, 0xbf, 0x3d, 0xb2, 0xa6, 0xd1, 0xcc, 0x3d, 0xf8, 0xee, 0x77, + 0x1e, 0xab, 0x6f, 0x0b, 0x7f, 0x8f, 0xa7, 0xc2, 0x1e, 0xa9, 0xdf, 0xfc, + 0x1c, 0x39, 0x91, 0x2b, 0x0e, 0x5e, 0x0f, 0x5f, 0x39, 0x93, 0x69, 0xe4, + 0x78, 0x93, 0xc7, 0x5b, 0x9c, 0x92, 0x04, 0x99, 0x89, 0xc8, 0xb6, 0x86, + 0x53, 0x3b, 0x08, 0x45, 0xd4, 0xaf, 0xfc, 0xe2, 0xfd, 0xf3, 0xc6, 0x5e, + 0x25, 0x97, 0xef, 0xd9, 0x33, 0xd1, 0xaf, 0x7c, 0x76, 0xc4, 0xd9, 0xdc, + 0x0f, 0xa2, 0x8a, 0x35, 0xf4, 0xbd, 0x48, 0x78, 0x80, 0x3f, 0x73, 0x46, + 0xd1, 0xb4, 0x3f, 0x12, 0x9f, 0x9d, 0xa1, 0x68, 0xf0, 0x43, 0xdd, 0x72, + 0x3c, 0x27, 0x72, 0x6c, 0xb7, 0x11, 0x0e, 0x6d, 0x57, 0xf4, 0xdb, 0xcd, + 0x56, 0x19, 0xbe, 0x99, 0x3f, 0x70, 0x5c, 0x14, 0x13, 0x83, 0x86, 0x3d, + 0x9f, 0x37, 0x86, 0xf6, 0xdc, 0x1e, 0xb8, 0x22, 0x81, 0xfd, 0x42, 0x84, + 0xa9, 0xb2, 0xae, 0xe3, 0x9d, 0x5a, 0x81, 0x70, 0xfb, 0x95, 0x70, 0x0a, + 0x3e, 0x86, 0x8b, 0xc8, 0x72, 0x00, 0x5c, 0xb1, 0xa6, 0x81, 0x18, 0xf7, + 0x2b, 0xd3, 0x28, 0x9a, 0x87, 0xbd, 0xad, 0xad, 0xc0, 0x3e, 0x6b, 0x4e, + 0x9c, 0x68, 0xba, 0x18, 0x2c, 0x42, 0x11, 0x28, 0x6c, 0xcd, 0xa1, 0x3f, + 0xdb, 0x7a, 0x6e, 0x0f, 0x5e, 0xd9, 0x83, 0xc6, 0xab, 0x85, 0xf0, 0x84, + 0xb7, 0x65, 0xe4, 0xb2, 0x35, 0xb3, 0xc3, 0x48, 0x04, 0x5b, 0x87, 0xc1, + 0x68, 0xe1, 0x78, 0x7e, 0x32, 0x67, 0x64, 0x47, 0xf6, 0xd6, 0xd8, 0xfe, + 0x4c, 0x84, 0x9a, 0xf8, 0xa8, 0x58, 0xd1, 0xc5, 0x1c, 0xcc, 0x3b, 0x33, + 0x7b, 0x22, 0xb6, 0xce, 0x1b, 0x92, 0x81, 0xad, 0x62, 0x36, 0x51, 0x2d, + 0x54, 0x30, 0xf2, 0x17, 0xc3, 0x69, 0xe3, 0xce, 0x39, 0xcd, 0x12, 0x6b, + 0xce, 0xbd, 0x49, 0x99, 0xf8, 0xa2, 0x0b, 0x57, 0x84, 0x53, 0x21, 0xa2, + 0x2c, 0x47, 0x63, 0xf0, 0x10, 0x36, 0x27, 0xbe, 0x3f, 0x71, 0x85, 0x3d, + 0x77, 0x42, 0x66, 0x66, 0x18, 0x86, 0xdf, 0x8c, 0xed, 0x99, 0xe3, 0x5e, + 0xf4, 0x5f, 0xdb, 0xa0, 0x8e, 0xd6, 0xfd, 0xe1, 0x4b, 0x50, 0x48, 0xb7, + 0x0e, 0x23, 0x45, 0xc2, 0x0f, 0xac, 0x4b, 0x4a, 0x1d, 0xd8, 0xc3, 0xd3, + 0x49, 0xe0, 0x2f, 0xbc, 0x51, 0x23, 0x10, 0x73, 0x61, 0x47, 0x3d, 0xcb, + 0xf3, 0xd5, 0xcf, 0x7d, 0x02, 0x98, 0xdb, 0xa3, 0x11, 0xf8, 0xee, 0x59, + 0x2d, 0x7e, 0x9c, 0xd9, 0xc1, 0xc4, 0xf1, 0xe4, 0xd3, 0x15, 0xb0, 0xd4, + 0xad, 0x9e, 0x3d, 0x06, 0x31, 0x7c, 0x0f, 0xc4, 0xd8, 0x0f, 0x04, 0xa3, + 0xc5, 0x1f, 0x29, 0xcc, 0xa9, 0x13, 0x35, 0x06, 0xfe, 0x79, 0x23, 0x74, + 0xbe, 0x30, 0x0a, 0xc7, 0x9b, 0x82, 0x2d, 0xc6, 0x8b, 0xbf, 0x82, 0x1c, + 0x89, 0x94, 0xfa, 0x8a, 0x46, 0x43, 0x35, 0x25, 0x28, 0xd1, 0xdb, 0xed, + 0x34, 0x77, 0xbe, 0xcf, 0xf9, 0x03, 0x7f, 0x74, 0x91, 0xcf, 0x6f, 0x37, + 0x77, 0xc4, 0x4c, 0xa1, 0x86, 0x0c, 0x45, 0x63, 0x2a, 0x48, 0xe6, 0x48, + 0xdf, 0xdd, 0x4f, 0xc0, 0x9e, 0xc9, 0xd4, 0xed, 0x56, 0x2b, 0x99, 0x2a, + 0xe5, 0xd6, 0xab, 0xbc, 0x43, 0x67, 0x38, 0xb3, 0x2f, 0x2a, 0xf5, 0xca, + 0x4f, 0x84, 0xfb, 0x59, 0x44, 0xce, 0xd0, 0x7e, 0x23, 0x16, 0x22, 0xf9, + 0x6c, 0xc9, 0x84, 0xf8, 0xb9, 0x7e, 0x48, 0x92, 0xae, 0x87, 0xb6, 0x17, + 0x36, 0x42, 0x54, 0x62, 0xac, 0xf0, 0x0e, 0x7d, 0xd7, 0x0f, 0x7a, 0xf7, + 0x3b, 0x9d, 0x8e, 0x64, 0x7a, 0x11, 0x45, 0xbe, 0x57, 0xb7, 0x3e, 0x4a, + 0xc5, 0x94, 0x8f, 0x95, 0x4f, 0x71, 0x42, 0x20, 0xd0, 0xb5, 0x13, 0xcf, + 0xe1, 0x62, 0x30, 0x73, 0x64, 0x42, 0xe0, 0xbb, 0x89, 0x12, 0xb2, 0xe6, + 0xc3, 0x45, 0x10, 0x02, 0xbd, 0x35, 0xf7, 0x1d, 0x0f, 0xe2, 0xdf, 0x4f, + 0xd1, 0x70, 0xbc, 0xf9, 0x22, 0xaa, 0x5b, 0xfe, 0x3c, 0xa2, 0xa6, 0x9d, + 0xd7, 0xad, 0x50, 0xb8, 0x62, 0x88, 0x94, 0x48, 0x9c, 0x47, 0x76, 0x20, + 0x6c, 0xc2, 0x21, 0x6b, 0x6e, 0x44, 0x6f, 0x6d, 0xfd, 0xc0, 0x3a, 0x9e, + 0x8b, 0xa1, 0x33, 0xbe, 0xe0, 0x1c, 0x9d, 0x61, 0x7b, 0x43, 0x61, 0xf9, + 0x63, 0xa4, 0x05, 0x33, 0x0b, 0x78, 0x66, 0x02, 0xba, 0x67, 0xfd, 0x60, + 0x2b, 0x41, 0x51, 0xa2, 0xf3, 0x3f, 0x8b, 0x60, 0xec, 0xfa, 0x67, 0x3d, + 0xeb, 0xb3, 0x13, 0x3a, 0xb0, 0x11, 0x8c, 0xf2, 0x70, 0x34, 0x42, 0xd5, + 0x42, 0xeb, 0x77, 0x3a, 0xfb, 0x77, 0x16, 0x2a, 0x6a, 0x45, 0xbe, 0xf5, + 0xbb, 0xa9, 0x33, 0x1a, 0x09, 0xef, 0x77, 0x20, 0x64, 0xbd, 0x3c, 0xb2, + 0xf6, 0xb6, 0x1e, 0x6d, 0xb5, 0x5b, 0x5b, 0xed, 0x76, 0x1a, 0x77, 0xaf, + 0xd7, 0x98, 0xf9, 0x5f, 0x1a, 0x63, 0x7f, 0xb8, 0x08, 0x1b, 0x8e, 0xe7, + 0x89, 0x20, 0x27, 0xc3, 0x3c, 0x48, 0x56, 0xaa, 0x79, 0x88, 0x9c, 0x9c, + 0xf3, 0x20, 0xaa, 0x83, 0xf8, 0xc1, 0x48, 0x04, 0x0d, 0xee, 0x36, 0x3d, + 0x2b, 0xdf, 0x25, 0x0c, 0xa3, 0xa6, 0x7c, 0x80, 0xdc, 0xcd, 0x72, 0xe9, + 0x2f, 0x22, 0xd2, 0x79, 0x62, 0xc9, 0x30, 0x9d, 0x61, 0xb0, 0xce, 0x83, + 0xd1, 0xda, 0x0a, 0x48, 0x04, 0x4c, 0x77, 0xb6, 0xe7, 0xb0, 0x0c, 0x01, + 0x74, 0x02, 0xb4, 0x24, 0x0a, 0x6e, 0xe5, 0xa7, 0x7e, 0x10, 0x88, 0x21, + 0x9a, 0x75, 0x2a, 0xd0, 0x9c, 0x36, 0x46, 0x0c, 0x27, 0xba, 0xa0, 0x46, + 0x66, 0xb9, 0x59, 0x43, 0xd7, 0x19, 0x9e, 0xd2, 0xb0, 0xc1, 0x66, 0x39, + 0xa4, 0x16, 0x77, 0xde, 0x1e, 0xa7, 0x1b, 0x5a, 0x6b, 0x29, 0xd3, 0x63, + 0x4d, 0x6d, 0x44, 0x20, 0x14, 0x92, 0xde, 0x91, 0x51, 0xf2, 0xa4, 0x3e, + 0x3d, 0x77, 0x02, 0xd8, 0x99, 0x73, 0x6b, 0xbb, 0xf5, 0xc3, 0xba, 0xf5, + 0x92, 0x74, 0xdf, 0x83, 0x3a, 0x1d, 0x9d, 0xcf, 0xd1, 0xdb, 0x20, 0x8d, + 0x76, 0xbb, 0x01, 0xb4, 0xf9, 0xde, 0x90, 0xef, 0x03, 0x39, 0xfb, 0x27, + 0x3b, 0xac, 0xc5, 0x44, 0xe7, 0x80, 0xf0, 0xa2, 0xfd, 0xac, 0x02, 0x48, + 0x3e, 0x38, 0x99, 0xa1, 0x33, 0x86, 0xab, 0x37, 0x72, 0x42, 0xaa, 0xe5, + 0xa8, 0xfe, 0xdd, 0xef, 0x7c, 0xd4, 0xbf, 0x3f, 0xc9, 0x06, 0x9a, 0xdb, + 0x43, 0x88, 0x04, 0x4d, 0xd2, 0xdc, 0x96, 0xc0, 0xcd, 0x41, 0xe4, 0x9d, + 0x9c, 0xc8, 0xd1, 0x44, 0x55, 0xda, 0x76, 0x9d, 0x89, 0xd7, 0x70, 0x22, + 0x31, 0x0b, 0x7b, 0xd6, 0x50, 0x50, 0xe5, 0x92, 0x2c, 0x04, 0xf6, 0xc8, + 0x59, 0x84, 0x31, 0x4d, 0xc3, 0x46, 0x3a, 0x09, 0x84, 0xe7, 0xae, 0x0d, + 0x52, 0x63, 0x57, 0x9c, 0x53, 0x0a, 0xff, 0xe8, 0x59, 0x6d, 0xab, 0x65, + 0xd9, 0x8b, 0xc8, 0xe7, 0xa4, 0xdf, 0x2f, 0xc2, 0x08, 0x3d, 0xbd, 0xa1, + 0xe8, 0x1b, 0x72, 0xc6, 0xc6, 0x27, 0xc1, 0xe7, 0x7e, 0x08, 0x77, 0x01, + 0x4a, 0x4e, 0x23, 0x93, 0x1d, 0x39, 0x9f, 0x59, 0x08, 0x2c, 0x2b, 0x99, + 0x41, 0x15, 0xeb, 0x86, 0x30, 0x4b, 0x03, 0x67, 0xd8, 0x18, 0x88, 0x2f, + 0x8e, 0x08, 0xaa, 0xad, 0x66, 0x67, 0xa7, 0x8e, 0xf4, 0x3d, 0xfa, 0xc0, + 0xaf, 0x76, 0x8d, 0x0b, 0x9d, 0x4d, 0x51, 0xc3, 0x46, 0x08, 0x81, 0xb0, + 0x3c, 0xcf, 0x02, 0x7b, 0xce, 0xe9, 0xec, 0x98, 0xc4, 0x55, 0x31, 0x42, + 0x5a, 0x4b, 0x36, 0xbb, 0xf3, 0xf3, 0xa4, 0x10, 0x08, 0x1d, 0x0f, 0x06, + 0x52, 0x16, 0x86, 0x4a, 0xa7, 0xdd, 0x52, 0x90, 0x6a, 0x98, 0xb0, 0xba, + 0x54, 0xd4, 0x48, 0xab, 0x65, 0xaa, 0x9f, 0x1c, 0x65, 0xac, 0xf6, 0x36, + 0x83, 0xa5, 0x47, 0x13, 0x6b, 0xa7, 0xd5, 0x5a, 0x59, 0xac, 0xa0, 0x63, + 0xed, 0x29, 0x24, 0xc6, 0x94, 0x58, 0x6d, 0x4d, 0x7f, 0xe6, 0x78, 0x0d, + 0xc5, 0xe5, 0x1e, 0xc1, 0x65, 0xfa, 0x77, 0xdc, 0x3b, 0x46, 0x62, 0xe8, + 0x07, 0x36, 0x09, 0x9f, 0xd5, 0xf2, 0x66, 0x2d, 0x52, 0x97, 0x1a, 0x64, + 0xb5, 0x67, 0xe1, 0xb2, 0x86, 0x86, 0xed, 0xa6, 0xb1, 0xce, 0x6d, 0x50, + 0x33, 0x20, 0x73, 0x06, 0xd3, 0x0d, 0x03, 0x9f, 0xb4, 0x0c, 0xe4, 0x1b, + 0x35, 0x64, 0x27, 0x33, 0xfc, 0xd0, 0x1f, 0x59, 0xac, 0xe2, 0x5c, 0x95, + 0x1d, 0x16, 0xe7, 0xc6, 0x7f, 0xb9, 0x5c, 0xa3, 0x1b, 0x8d, 0xc6, 0xc0, + 0xf5, 0x87, 0xa7, 0x52, 0x45, 0x4c, 0xab, 0x27, 0xbd, 0x8f, 0xfd, 0x74, + 0x16, 0xd3, 0xa3, 0x26, 0xd6, 0x59, 0xd9, 0x0e, 0x93, 0x77, 0x5f, 0x54, + 0xf7, 0x91, 0x39, 0x71, 0x79, 0x93, 0x92, 0x7c, 0x8a, 0x9b, 0xd9, 0x28, + 0x4f, 0xac, 0x73, 0x7b, 0xad, 0xef, 0xa7, 0x7c, 0x03, 0xeb, 0xfe, 0xf3, + 0xe7, 0xcf, 0x55, 0x4a, 0xde, 0x0e, 0xdd, 0x73, 0x66, 0xe4, 0xc6, 0xdb, + 0xca, 0x0c, 0xc5, 0x9a, 0xae, 0xcb, 0x6e, 0x0f, 0xed, 0xf1, 0x4e, 0xcb, + 0x40, 0x19, 0xa1, 0x34, 0x17, 0x30, 0xd2, 0xc1, 0xd0, 0x0e, 0xd9, 0x19, + 0x33, 0x2a, 0xbf, 0x2b, 0x55, 0x3e, 0x6f, 0x5c, 0x35, 0x7c, 0x5a, 0xb0, + 0x3e, 0xcc, 0xe7, 0x4c, 0x4b, 0x56, 0x3e, 0x99, 0x5e, 0x82, 0xbf, 0x80, + 0x55, 0xdf, 0xe8, 0x6d, 0x52, 0x79, 0xec, 0x41, 0xe8, 0xbb, 0x8b, 0x48, + 0xa4, 0x64, 0xa2, 0xb5, 0x37, 0xa1, 0xe2, 0x26, 0x69, 0xaa, 0x7b, 0x92, + 0x41, 0x27, 0x21, 0x4c, 0x4a, 0xce, 0x19, 0xcd, 0xf5, 0xfe, 0x9d, 0x58, + 0xc2, 0x5f, 0x30, 0x3a, 0x8e, 0xa8, 0x59, 0xb6, 0x33, 0x22, 0x1f, 0x8f, + 0xc7, 0xa5, 0x22, 0xbf, 0x2f, 0x1e, 0xb5, 0xc5, 0x6e, 0x77, 0xb9, 0xe4, + 0xf3, 0x50, 0x31, 0xbb, 0xae, 0xdb, 0xc0, 0x1c, 0xcd, 0x9b, 0x88, 0x9e, + 0x74, 0x6e, 0xa7, 0xf6, 0xc8, 0x3f, 0x53, 0xb9, 0x26, 0x81, 0x3a, 0x7b, + 0x17, 0x36, 0x60, 0x07, 0xff, 0x1a, 0x6d, 0x7c, 0x04, 0x93, 0x81, 0x5d, + 0x6d, 0xd5, 0xe9, 0xbf, 0x66, 0xa7, 0x86, 0xae, 0xc9, 0x26, 0x82, 0x0c, + 0x14, 0x7e, 0x26, 0x33, 0xdb, 0xdb, 0x9c, 0xdb, 0xa6, 0xdc, 0xbd, 0x7c, + 0x6e, 0xa7, 0x26, 0xdb, 0x8f, 0x26, 0x40, 0xe5, 0x56, 0x73, 0x99, 0x79, + 0x34, 0x7a, 0x2f, 0xbd, 0x62, 0x4c, 0x02, 0x16, 0x81, 0x40, 0xdf, 0x8b, + 0x68, 0xee, 0x02, 0x14, 0x0f, 0x81, 0xcf, 0x7e, 0x98, 0xea, 0x9d, 0xd7, + 0x43, 0x26, 0xac, 0x67, 0x07, 0xd6, 0xf3, 0x5a, 0x43, 0x99, 0xf4, 0xde, + 0xad, 0xf6, 0x8d, 0xcc, 0x5a, 0x91, 0xd1, 0x62, 0xb5, 0x57, 0x6a, 0x9d, + 0x10, 0x14, 0x7f, 0x34, 0x1a, 0x34, 0xed, 0x5a, 0xe2, 0x5a, 0x37, 0x67, + 0x6a, 0x4a, 0xc5, 0x93, 0xb6, 0xb0, 0x39, 0x1b, 0xa1, 0x04, 0x18, 0xa4, + 0x22, 0x5a, 0xb9, 0x64, 0x6b, 0x74, 0x76, 0xc0, 0x81, 0xfa, 0x60, 0x5e, + 0x4a, 0x11, 0x8c, 0xec, 0xe0, 0x34, 0x5f, 0xbe, 0x55, 0xb7, 0xe8, 0x7f, + 0xae, 0x8f, 0x2a, 0x0b, 0xb7, 0xe7, 0x3d, 0x1c, 0xab, 0xd7, 0xfe, 0xc8, + 0x76, 0xad, 0xaa, 0xd1, 0xdb, 0x1a, 0xbb, 0x3a, 0xf7, 0x67, 0x9c, 0x7e, + 0x99, 0x36, 0xdf, 0x63, 0xe7, 0x5c, 0x8c, 0x50, 0x3c, 0xd1, 0x15, 0xda, + 0xc9, 0x21, 0x07, 0x53, 0xd0, 0x39, 0x92, 0x76, 0xa0, 0x65, 0xec, 0x57, + 0xbd, 0xf2, 0x87, 0x3c, 0x96, 0xc0, 0xd5, 0x27, 0x2f, 0x8e, 0xf4, 0x15, + 0xd8, 0xb9, 0x39, 0xc4, 0x38, 0xd2, 0x3d, 0x8e, 0x0b, 0xb5, 0x92, 0x03, + 0x69, 0xbb, 0xa5, 0xfa, 0x9c, 0x6c, 0xb0, 0x38, 0xc1, 0xcc, 0x07, 0x62, + 0x53, 0x98, 0xea, 0x72, 0xa6, 0xca, 0x52, 0x7f, 0x6b, 0xd2, 0xbb, 0xb3, + 0x5d, 0x97, 0x80, 0xa4, 0x44, 0x24, 0x03, 0xf9, 0x52, 0x49, 0xb5, 0x87, + 0x3f, 0x25, 0x8b, 0x3e, 0x71, 0xa9, 0xdc, 0xd9, 0x96, 0x76, 0xb5, 0xb4, + 0x1b, 0xd8, 0x64, 0xf1, 0x68, 0x45, 0x33, 0xde, 0xa5, 0xd2, 0x0a, 0xa3, + 0x78, 0x85, 0x16, 0x61, 0x2c, 0xe8, 0x3f, 0xe4, 0xe6, 0x0d, 0xbb, 0xb1, + 0x46, 0x24, 0xc4, 0xac, 0xa6, 0x6f, 0x17, 0xfa, 0x09, 0xbb, 0xad, 0x94, + 0x83, 0xce, 0x5d, 0x19, 0x96, 0xd2, 0x19, 0x59, 0xf7, 0xf7, 0xf6, 0xf6, + 0x38, 0xcb, 0x0c, 0x16, 0xb2, 0xf1, 0x51, 0x03, 0xe2, 0xdd, 0x76, 0x94, + 0xb3, 0x6f, 0xdc, 0xb9, 0x36, 0xcb, 0x7a, 0x29, 0x6f, 0xaa, 0xc7, 0x49, + 0x41, 0xa0, 0xc3, 0xfb, 0x0b, 0x48, 0x60, 0xb9, 0x93, 0xd8, 0x66, 0x24, + 0x71, 0x52, 0x83, 0xfc, 0xb3, 0x84, 0x9f, 0x96, 0x33, 0xde, 0x06, 0x73, + 0x33, 0xf0, 0xcf, 0x0c, 0x87, 0x8d, 0x91, 0x83, 0x29, 0x81, 0x54, 0x46, + 0x64, 0xe4, 0x20, 0x9b, 0x81, 0x80, 0x82, 0x84, 0xa2, 0xb4, 0x44, 0x43, + 0x01, 0xa4, 0x4b, 0xa2, 0x61, 0x16, 0x33, 0xaf, 0xb8, 0x90, 0xcc, 0x2b, + 0x82, 0xd7, 0xc4, 0x96, 0x95, 0x5b, 0x4a, 0xef, 0xc0, 0x6a, 0x52, 0x29, + 0x59, 0x7e, 0x66, 0x9f, 0x37, 0x12, 0xea, 0x9f, 0x2e, 0x40, 0x72, 0x02, + 0x58, 0x5a, 0x7c, 0xf4, 0xa9, 0xc0, 0xe0, 0xc7, 0x7c, 0xe6, 0x9e, 0xd6, + 0xe8, 0x12, 0x58, 0x66, 0x64, 0x80, 0x3e, 0x74, 0xd5, 0xbf, 0x46, 0x27, + 0x3d, 0x36, 0xb4, 0xe4, 0xe0, 0xa0, 0x72, 0xb7, 0xf1, 0xaf, 0x95, 0x05, + 0x68, 0x6f, 0x4b, 0x08, 0xd6, 0xab, 0xbd, 0x42, 0x88, 0x4e, 0x2d, 0xe1, + 0x59, 0x94, 0xe9, 0xe2, 0xee, 0xee, 0x6e, 0x8e, 0xdb, 0xdd, 0x62, 0x6e, + 0xcd, 0x48, 0x56, 0xc2, 0xad, 0x1a, 0xcc, 0xae, 0x65, 0xb7, 0xbd, 0x1a, + 0xbf, 0x69, 0xa6, 0x1e, 0x15, 0x33, 0xb5, 0xa3, 0xc8, 0x36, 0xba, 0x59, + 0x7c, 0x3f, 0x52, 0x14, 0x1f, 0x11, 0x45, 0x12, 0x70, 0x8e, 0xed, 0x9d, + 0x84, 0x90, 0xdb, 0x84, 0x24, 0xd7, 0x0c, 0xdd, 0x52, 0x11, 0x76, 0x97, + 0x8b, 0xb0, 0xdd, 0x29, 0x66, 0xf7, 0x47, 0xaa, 0xb5, 0x1a, 0xdb, 0x85, + 0x32, 0x8c, 0x59, 0x25, 0xb8, 0x4e, 0xa9, 0x10, 0x77, 0x28, 0x97, 0xb2, + 0xb7, 0xd7, 0x14, 0x62, 0x7b, 0xa7, 0x98, 0xad, 0x3d, 0x25, 0xa7, 0xc6, + 0x4e, 0x29, 0x5b, 0x92, 0xe6, 0x52, 0xb6, 0x58, 0x84, 0x84, 0x6a, 0x67, + 0x25, 0xb6, 0xa8, 0xd3, 0xd4, 0xc9, 0xe6, 0x4d, 0x1d, 0x77, 0xc4, 0x7e, + 0x09, 0xfa, 0x1e, 0x2d, 0x56, 0xe6, 0x4d, 0x54, 0x69, 0x57, 0xbc, 0x1f, + 0xf9, 0x3e, 0x86, 0x11, 0x69, 0x2e, 0x8d, 0xef, 0x60, 0xe6, 0x49, 0xf9, + 0xba, 0xb2, 0xdc, 0xca, 0xd5, 0x58, 0xe5, 0xee, 0x5c, 0xaf, 0xc5, 0xad, + 0x12, 0x2d, 0x5e, 0x36, 0xbb, 0x4a, 0x57, 0x20, 0xed, 0x49, 0xc6, 0xe3, + 0x35, 0x0d, 0xc3, 0xf5, 0xf8, 0x89, 0x9c, 0x6f, 0x2d, 0x32, 0x55, 0xdb, + 0x15, 0x17, 0x13, 0xf2, 0x96, 0xdf, 0x78, 0xd5, 0x3c, 0x5a, 0x64, 0xb1, + 0xf2, 0x66, 0x04, 0x70, 0x66, 0x3c, 0xb9, 0xd6, 0xb2, 0x79, 0xb0, 0x2b, + 0x22, 0xd0, 0xe3, 0x49, 0xbe, 0xc4, 0xdc, 0x6c, 0x75, 0xc4, 0x6c, 0xe9, + 0xf4, 0xdf, 0xb8, 0x0b, 0x72, 0x5d, 0xd0, 0xcc, 0x54, 0x4c, 0x8e, 0x70, + 0x5d, 0x67, 0x1e, 0x3a, 0x61, 0x21, 0x8b, 0x3d, 0xcf, 0x8f, 0xaa, 0xbd, + 0xb1, 0x13, 0x84, 0x51, 0x83, 0xb5, 0xa7, 0x66, 0x5d, 0x9a, 0xb1, 0x91, + 0xe5, 0x27, 0xd9, 0x56, 0x4a, 0x32, 0xf6, 0x7d, 0xf0, 0x58, 0xb0, 0x5e, + 0x9d, 0xf7, 0x0c, 0xcc, 0xb4, 0xaf, 0x28, 0xb3, 0x58, 0xd6, 0xb7, 0x3d, + 0x23, 0x8d, 0x75, 0x27, 0xa5, 0x3a, 0xa6, 0xf5, 0xd8, 0x58, 0x99, 0xee, + 0x54, 0x3a, 0x8f, 0x4d, 0x4c, 0x19, 0x4d, 0xd5, 0x74, 0x9e, 0xea, 0x5a, + 0x39, 0x90, 0xd2, 0x6c, 0x33, 0x9f, 0xcb, 0xad, 0xa3, 0x18, 0xe2, 0xc9, + 0x1e, 0xd8, 0xec, 0x64, 0x9c, 0xf7, 0xe6, 0x36, 0xcf, 0x7b, 0xea, 0xed, + 0x9a, 0x2a, 0xb5, 0x3a, 0x34, 0x7b, 0x47, 0x3f, 0x9e, 0x89, 0x91, 0x63, + 0x5b, 0xbe, 0xe7, 0x5e, 0x58, 0xe1, 0x30, 0x10, 0xc2, 0xb3, 0x6c, 0x6f, + 0x64, 0x55, 0x13, 0x6e, 0xca, 0x23, 0x9a, 0xf9, 0x2a, 0x6d, 0xc8, 0x3a, + 0x53, 0x29, 0x13, 0xf2, 0xa8, 0xa5, 0xb5, 0xfa, 0x0a, 0xd8, 0x57, 0xc2, + 0xdd, 0xee, 0xec, 0x6e, 0xaf, 0x86, 0xbc, 0xdd, 0xde, 0xdb, 0x59, 0x1b, + 0xfb, 0xa3, 0xd6, 0xaa, 0xd8, 0x7f, 0xb4, 0x2a, 0xf6, 0x44, 0x75, 0x77, + 0x1e, 0x15, 0x23, 0xcf, 0x2b, 0x56, 0x1e, 0x31, 0x3c, 0xf5, 0x1c, 0xbb, + 0x2d, 0x8d, 0x8c, 0xf4, 0xa5, 0x79, 0x1e, 0xb6, 0xe5, 0xa3, 0x72, 0x85, + 0x06, 0x36, 0xba, 0x2e, 0x3c, 0xdb, 0x66, 0x37, 0xf5, 0xd7, 0xf9, 0xfe, + 0x7e, 0x02, 0x68, 0x12, 0xb0, 0x49, 0xde, 0xcf, 0x54, 0xb0, 0xb4, 0xd8, + 0x55, 0x92, 0x5e, 0x27, 0x4f, 0x8f, 0xd8, 0x6f, 0xee, 0xa6, 0xfe, 0xb6, + 0x57, 0x23, 0x98, 0x2f, 0x57, 0x40, 0xb1, 0x5b, 0x44, 0xb1, 0xb3, 0xb3, + 0x1a, 0x05, 0xc0, 0xe5, 0x31, 0x6e, 0x17, 0x61, 0xec, 0x76, 0x33, 0xb5, + 0x5f, 0x8d, 0x40, 0xbe, 0x58, 0x9e, 0xde, 0x4e, 0x11, 0xbd, 0xed, 0x76, + 0xba, 0xee, 0x3f, 0x5a, 0x8d, 0x5e, 0xbe, 0x58, 0x9e, 0xde, 0x6e, 0x11, + 0xbd, 0x9d, 0xd6, 0x6a, 0x04, 0x00, 0x97, 0xc7, 0xf8, 0xa3, 0x42, 0x8c, + 0x59, 0x7d, 0xd9, 0x5d, 0x91, 0x42, 0xbe, 0x5c, 0x9e, 0xe2, 0x5e, 0x11, + 0xc5, 0xdd, 0x8c, 0xbe, 0xac, 0x48, 0x30, 0x5f, 0x2c, 0x4f, 0xef, 0x51, + 0x11, 0xbd, 0x1f, 0xad, 0xa8, 0x65, 0x3f, 0x2a, 0xd2, 0xb2, 0x76, 0xab, + 0xb0, 0x6b, 0x66, 0xf4, 0x65, 0xc5, 0x9e, 0x92, 0x2b, 0x56, 0x44, 0xb0, + 0xd0, 0x16, 0x3c, 0x6a, 0xdf, 0x48, 0x66, 0x8f, 0xda, 0xd7, 0xcb, 0xac, + 0x5d, 0x6c, 0x0c, 0x5a, 0x2b, 0x6a, 0x1a, 0x01, 0xae, 0x66, 0xf4, 0x76, + 0x69, 0xd0, 0x48, 0x19, 0xbe, 0x70, 0xb6, 0x59, 0xc3, 0x17, 0xce, 0x36, + 0x6d, 0xf8, 0xc2, 0xd9, 0x6d, 0x1b, 0xbe, 0x70, 0xb6, 0x59, 0xc3, 0x17, + 0xce, 0x36, 0x6b, 0xf8, 0xc2, 0xd9, 0x6d, 0x1b, 0xbe, 0x70, 0xb6, 0x69, + 0xc3, 0x17, 0xce, 0x36, 0x6b, 0xf8, 0xc2, 0xd9, 0x6d, 0x1b, 0xbe, 0x70, + 0xb6, 0x61, 0xc3, 0x17, 0xce, 0x36, 0x6c, 0xf8, 0xc2, 0xd9, 0xc6, 0x0c, + 0x9f, 0x76, 0xab, 0x0d, 0xf1, 0xd9, 0x68, 0xb3, 0x86, 0x6f, 0x36, 0xda, + 0xb4, 0xe1, 0x9b, 0x8d, 0x6e, 0xdb, 0xf0, 0xcd, 0x46, 0x9b, 0x35, 0x7c, + 0xb3, 0xd1, 0x66, 0x0d, 0xdf, 0x6c, 0x74, 0xdb, 0x86, 0x6f, 0x36, 0xda, + 0xb4, 0xe1, 0x9b, 0x8d, 0x36, 0x6b, 0xf8, 0x66, 0xa3, 0xdb, 0x36, 0x7c, + 0xb3, 0xd1, 0x86, 0x0d, 0xdf, 0x6c, 0xb4, 0x61, 0xc3, 0x37, 0x1b, 0x6d, + 0xcc, 0xf0, 0xc5, 0x73, 0x7e, 0x43, 0xdd, 0x9d, 0x6c, 0xd6, 0xf2, 0xb9, + 0x93, 0x4d, 0x5b, 0x3e, 0x77, 0x72, 0xdb, 0x96, 0xcf, 0x9d, 0x6c, 0xd6, + 0xf2, 0xb9, 0x93, 0xcd, 0x5a, 0x3e, 0x77, 0x72, 0xdb, 0x96, 0xcf, 0x9d, + 0x6c, 0xda, 0xf2, 0xb9, 0x93, 0xcd, 0x5a, 0x3e, 0x77, 0x72, 0xdb, 0x96, + 0xcf, 0x9d, 0x6c, 0xd8, 0xf2, 0xb9, 0x93, 0x0d, 0x5b, 0x3e, 0x77, 0xb2, + 0x39, 0xcb, 0x17, 0xaf, 0x47, 0x9a, 0x99, 0xb6, 0xbb, 0x59, 0xcb, 0x77, + 0xee, 0x6e, 0xda, 0xf2, 0x9d, 0xbb, 0xb7, 0x6d, 0xf9, 0xce, 0xdd, 0xcd, + 0x5a, 0xbe, 0x73, 0x77, 0xb3, 0x96, 0xef, 0xdc, 0xbd, 0x6d, 0xcb, 0x77, + 0xee, 0x6e, 0xda, 0xf2, 0x9d, 0xbb, 0x9b, 0xb5, 0x7c, 0xe7, 0xee, 0x6d, + 0x5b, 0xbe, 0x73, 0x77, 0xc3, 0x96, 0xef, 0xdc, 0xdd, 0xb0, 0xe5, 0x3b, + 0x77, 0xef, 0xc4, 0xf2, 0x2d, 0xdb, 0x33, 0xd9, 0x79, 0x94, 0xd8, 0x33, + 0x91, 0x3b, 0x95, 0x8d, 0xf3, 0xb0, 0x41, 0x45, 0x32, 0x51, 0xa8, 0x72, + 0xb7, 0x39, 0xb9, 0xc3, 0x6d, 0x08, 0x35, 0x69, 0xff, 0x53, 0x6e, 0xb5, + 0xa4, 0x58, 0x6c, 0xe7, 0x36, 0xc4, 0x15, 0x8d, 0x42, 0xdc, 0x12, 0x82, + 0x83, 0xb7, 0x6c, 0xda, 0xaa, 0xc1, 0xf9, 0x0d, 0x79, 0x26, 0xe0, 0x07, + 0x5b, 0xb4, 0x83, 0xee, 0x04, 0x43, 0x1c, 0x35, 0xa2, 0x53, 0x63, 0xd1, + 0xc9, 0x89, 0x7c, 0x52, 0x5b, 0xc3, 0x9e, 0x33, 0x53, 0x81, 0xc3, 0x49, + 0xa0, 0xc6, 0xd8, 0x81, 0xc9, 0xc7, 0x8e, 0x9b, 0x0c, 0x84, 0x91, 0xf1, + 0xf6, 0x74, 0x1c, 0xc3, 0xa2, 0x42, 0x89, 0x78, 0xd1, 0xc0, 0x8f, 0x10, + 0xcc, 0x56, 0x6d, 0x3c, 0x6a, 0x8d, 0xc4, 0x44, 0x46, 0x5f, 0x75, 0xea, + 0x56, 0x17, 0x90, 0x29, 0xc0, 0x86, 0x8f, 0x5d, 0x6a, 0x27, 0xde, 0x2b, + 0x65, 0xb8, 0x6d, 0x19, 0x96, 0x95, 0x63, 0xcf, 0xf1, 0xc6, 0xfe, 0x32, + 0xe6, 0xf4, 0xc9, 0x03, 0x62, 0x0f, 0xb8, 0xcf, 0xec, 0x60, 0x14, 0xee, + 0xa7, 0x03, 0xeb, 0xf7, 0xd3, 0x5c, 0xca, 0x9f, 0x2e, 0x18, 0xfd, 0x75, + 0x15, 0x31, 0x1b, 0x62, 0xa6, 0x76, 0x0c, 0x7f, 0x7c, 0x2a, 0x2e, 0xc6, + 0x01, 0x8e, 0xb6, 0x85, 0xf9, 0xca, 0xab, 0x80, 0x01, 0x70, 0x82, 0x83, + 0x0b, 0x81, 0x7f, 0x2a, 0x10, 0xa3, 0x17, 0x22, 0x37, 0xb0, 0x89, 0x00, + 0x69, 0xcb, 0xbe, 0x75, 0x95, 0xc3, 0x92, 0xe7, 0x52, 0xe3, 0x91, 0xdf, + 0x31, 0x93, 0x3a, 0x04, 0xaf, 0x94, 0xcd, 0x5a, 0x42, 0x45, 0xe8, 0x38, + 0x8e, 0x87, 0x80, 0x34, 0x8a, 0x63, 0xd8, 0xb2, 0xde, 0xfb, 0x38, 0x51, + 0x26, 0xc3, 0xfd, 0x42, 0x4e, 0x55, 0x44, 0xf8, 0xac, 0x8d, 0x3c, 0x6e, + 0x91, 0xda, 0x38, 0x4f, 0x8c, 0xd9, 0x1d, 0x0e, 0x4f, 0xcb, 0xed, 0x84, + 0x23, 0x1a, 0x05, 0x1b, 0x86, 0x65, 0x71, 0x6f, 0xe8, 0xdf, 0xc8, 0xca, + 0x87, 0xcd, 0x9a, 0xc8, 0xb9, 0x65, 0x51, 0xf8, 0x1d, 0x46, 0x9c, 0xdd, + 0x42, 0x5c, 0x31, 0x40, 0x91, 0xd8, 0xe3, 0x31, 0xc0, 0x44, 0x1c, 0x76, + 0x0b, 0x02, 0xec, 0xda, 0x3f, 0x52, 0x3b, 0xf9, 0x46, 0x22, 0x4d, 0x1c, + 0x38, 0x3c, 0xeb, 0xb6, 0x5a, 0xad, 0x9c, 0x68, 0xe4, 0xef, 0x4c, 0xc4, + 0x7a, 0x42, 0xd3, 0xc6, 0xf6, 0x48, 0x38, 0x1e, 0x45, 0x8f, 0x86, 0x75, + 0x7e, 0x40, 0x24, 0x17, 0x3f, 0x59, 0x1d, 0x7c, 0x70, 0xa9, 0x75, 0xa0, + 0x73, 0x4c, 0xed, 0xdc, 0x2e, 0x53, 0xdb, 0x6b, 0x31, 0xb5, 0x5d, 0xc2, + 0x54, 0xfb, 0x96, 0xb9, 0x6a, 0xaf, 0xc7, 0x16, 0x83, 0xab, 0x3e, 0xa9, + 0xe9, 0xc4, 0xbd, 0x4a, 0x95, 0x53, 0x06, 0x32, 0xa0, 0x40, 0x74, 0x15, + 0x7b, 0x9a, 0xec, 0xf1, 0x57, 0xba, 0x9b, 0x19, 0x2d, 0x49, 0xf6, 0x35, + 0xd5, 0x55, 0xef, 0x04, 0x69, 0x8e, 0x63, 0x5d, 0x39, 0x83, 0xbd, 0x04, + 0x83, 0x21, 0x90, 0x27, 0xae, 0xb1, 0xdf, 0x09, 0x56, 0x58, 0x94, 0x77, + 0xd4, 0xc9, 0xc5, 0xc8, 0x0a, 0xcf, 0x9c, 0x68, 0x38, 0xb5, 0x1a, 0x88, + 0xff, 0x0e, 0x23, 0x1c, 0x47, 0xa6, 0xa8, 0xdf, 0xe1, 0x54, 0x0c, 0x4f, + 0x75, 0xd8, 0x6f, 0x53, 0x41, 0x5c, 0x96, 0x85, 0x2d, 0xe5, 0x83, 0xc8, + 0xe5, 0x51, 0x8c, 0x74, 0xbf, 0x4f, 0x5b, 0x1e, 0xf3, 0xac, 0xbd, 0xa2, + 0xdc, 0x21, 0x1c, 0x15, 0x7f, 0x14, 0x33, 0x20, 0x4f, 0x6f, 0x59, 0x99, + 0x33, 0x54, 0x49, 0x1c, 0xad, 0x14, 0x82, 0x96, 0x2e, 0x8d, 0x20, 0x3c, + 0x39, 0xbe, 0x96, 0x1d, 0x4b, 0xc8, 0xc7, 0x79, 0x9b, 0xf8, 0xe6, 0x6c, + 0xd8, 0x73, 0x60, 0x90, 0x9b, 0xa3, 0x10, 0xad, 0x32, 0xdb, 0x39, 0x18, + 0x0c, 0x90, 0x55, 0x12, 0xfe, 0xb2, 0x2d, 0x7b, 0x48, 0x3e, 0xcd, 0x70, + 0xad, 0x4e, 0xd2, 0x2e, 0x65, 0x3e, 0x8e, 0x9b, 0xaf, 0x54, 0x52, 0xf5, + 0xef, 0xec, 0x26, 0x25, 0xac, 0x9e, 0x4d, 0x75, 0xa4, 0x78, 0x4d, 0x1d, + 0xb6, 0xcb, 0x46, 0x00, 0x19, 0xa6, 0x75, 0xb3, 0x6a, 0x70, 0x93, 0xf5, + 0x58, 0x9d, 0xa0, 0x6a, 0x3f, 0xb4, 0xe2, 0xc6, 0x28, 0xa6, 0x94, 0x2c, + 0xc4, 0x07, 0x1b, 0x4d, 0x91, 0x82, 0xb8, 0x44, 0x79, 0xfe, 0x61, 0x19, + 0x21, 0x23, 0xbf, 0x34, 0xf7, 0xf9, 0x11, 0xf7, 0x57, 0x55, 0x12, 0x4f, + 0x4d, 0xd6, 0x72, 0x16, 0x5e, 0x0b, 0xb3, 0x3c, 0xdf, 0x34, 0x60, 0x93, + 0xeb, 0x07, 0xfa, 0xd9, 0x91, 0x51, 0x29, 0x78, 0x1e, 0x36, 0xc5, 0x72, + 0xfe, 0x50, 0x8b, 0x2a, 0x01, 0xd9, 0xa0, 0xd5, 0xd4, 0x51, 0xa8, 0x25, + 0x5d, 0x33, 0x7d, 0xa8, 0xd9, 0xe2, 0x03, 0xca, 0xa9, 0x38, 0xd5, 0x8e, + 0x89, 0x53, 0xb5, 0x6d, 0x7b, 0xd9, 0x39, 0x3a, 0x13, 0xe3, 0x9e, 0x12, + 0xba, 0x3a, 0x23, 0xca, 0x2d, 0xa8, 0x8f, 0x88, 0x2e, 0x45, 0x5f, 0x4a, + 0x20, 0xf6, 0x4a, 0x8c, 0x82, 0x6a, 0x63, 0xc5, 0xd8, 0xb5, 0x95, 0x91, + 0xbe, 0x0f, 0x27, 0x35, 0x54, 0xd2, 0x65, 0x8a, 0xc1, 0x6d, 0xb6, 0x25, + 0x79, 0x75, 0xa1, 0x30, 0x56, 0xe6, 0xa3, 0xa4, 0xa6, 0x6d, 0x15, 0x11, + 0x98, 0xc5, 0xde, 0x53, 0x6d, 0x72, 0x99, 0xea, 0x6e, 0x0f, 0x5f, 0x23, + 0x1a, 0xd1, 0x92, 0x4d, 0x17, 0x92, 0xb9, 0x95, 0x61, 0x9a, 0xd6, 0x53, + 0xe6, 0x15, 0xff, 0xb3, 0x4f, 0x64, 0x79, 0x8b, 0xd9, 0x80, 0x00, 0x06, + 0x22, 0x3a, 0xa3, 0x59, 0x44, 0x0b, 0xa0, 0x74, 0x1e, 0x04, 0xe6, 0x8c, + 0x4e, 0x57, 0xa8, 0x7c, 0xf8, 0x40, 0xc2, 0x1d, 0x85, 0x0f, 0xb3, 0x9e, + 0x56, 0xd2, 0xd9, 0x4a, 0x55, 0x65, 0x9b, 0xaa, 0xd2, 0xe5, 0xbf, 0x58, + 0x4a, 0xae, 0x3d, 0x10, 0xae, 0x3c, 0x90, 0xcd, 0x3f, 0xd3, 0x52, 0xd9, + 0x4b, 0x9b, 0x83, 0xd8, 0x15, 0xcc, 0xfb, 0x71, 0x29, 0x26, 0x0e, 0x0f, + 0x0f, 0x13, 0x76, 0x9b, 0x5b, 0xb4, 0x50, 0x4b, 0xf2, 0x22, 0xa7, 0x11, + 0x45, 0x44, 0xcc, 0x6d, 0xc7, 0x70, 0x9b, 0x53, 0x1d, 0x29, 0x00, 0x9c, + 0x36, 0x96, 0x3c, 0x97, 0x0e, 0x27, 0xba, 0x9a, 0x5a, 0x62, 0x8c, 0x42, + 0x8e, 0x50, 0xba, 0x11, 0xf2, 0x58, 0x2f, 0x57, 0xa8, 0x61, 0xbb, 0xdd, + 0xce, 0x8f, 0x44, 0x46, 0x72, 0x5c, 0xb7, 0xf8, 0x24, 0x56, 0xce, 0x4a, + 0xe6, 0x8e, 0x09, 0x9b, 0x11, 0x8e, 0x43, 0x4c, 0xa9, 0xad, 0xd2, 0x47, + 0x37, 0xe5, 0x8c, 0x6d, 0x49, 0x2f, 0x2c, 0xef, 0x88, 0x59, 0x4b, 0xab, + 0x40, 0xac, 0x16, 0x45, 0x47, 0x0a, 0x3b, 0xcc, 0x45, 0x34, 0x1b, 0xe9, + 0xb7, 0xf8, 0x8f, 0x84, 0xb8, 0x54, 0x60, 0xd2, 0xee, 0x5e, 0x96, 0x30, + 0xb7, 0xd3, 0xda, 0x1b, 0x8e, 0x87, 0x99, 0x6e, 0x19, 0xb0, 0xda, 0x2b, + 0x94, 0xa5, 0x0d, 0xc2, 0x50, 0x9f, 0x2e, 0xcd, 0x08, 0x15, 0x6b, 0x64, + 0xbe, 0x1b, 0x96, 0xca, 0x2b, 0x31, 0x57, 0x2f, 0xaf, 0xe9, 0x36, 0xff, + 0xd5, 0xa5, 0xfa, 0x65, 0x93, 0x89, 0xf7, 0x65, 0x0c, 0xd6, 0xf3, 0x49, + 0xbd, 0x9e, 0x1e, 0x39, 0x64, 0xa9, 0x46, 0x34, 0x85, 0xac, 0xb8, 0x26, + 0xf1, 0x19, 0xf8, 0x24, 0x93, 0x1a, 0xba, 0x20, 0xf3, 0xca, 0x62, 0xb9, + 0xa9, 0x21, 0x8d, 0xf1, 0xa4, 0x04, 0xb6, 0x16, 0xf1, 0x78, 0xa0, 0x6f, + 0x65, 0x06, 0xfa, 0xed, 0x22, 0xb9, 0x12, 0xdc, 0xf7, 0x8b, 0xbc, 0x9d, + 0x9c, 0x3e, 0xdf, 0x1f, 0xf2, 0x5f, 0x99, 0x82, 0x0a, 0xfe, 0x2b, 0x14, + 0xff, 0xf6, 0x8a, 0xe2, 0xbf, 0x3f, 0x60, 0x37, 0x4a, 0x75, 0xf9, 0x8f, + 0xb0, 0xad, 0x7d, 0x99, 0x62, 0xc6, 0x8f, 0xbc, 0x2f, 0x15, 0x6b, 0xef, + 0xfd, 0x70, 0x2e, 0x30, 0xc8, 0x27, 0x4b, 0x73, 0xca, 0x4a, 0x85, 0xb7, + 0x7e, 0xa0, 0x0c, 0xf4, 0x07, 0xdc, 0xa6, 0xe2, 0x26, 0x86, 0x92, 0x93, + 0x33, 0x4a, 0x38, 0x19, 0xda, 0xde, 0x67, 0x3b, 0xd4, 0x98, 0xca, 0x4e, + 0x23, 0xeb, 0xe5, 0x4f, 0x0e, 0x12, 0x36, 0x4b, 0x49, 0xf9, 0x64, 0x63, + 0xca, 0x8c, 0x4b, 0x7c, 0xfd, 0x41, 0xe9, 0xd8, 0x53, 0xb1, 0xe7, 0x8d, + 0x29, 0xe4, 0xc2, 0xe7, 0x0b, 0x1b, 0xc5, 0x47, 0x03, 0xc9, 0xdf, 0x28, + 0x3f, 0x5b, 0xad, 0xd4, 0x3d, 0x59, 0x43, 0x57, 0x4c, 0x84, 0x76, 0x49, + 0x8c, 0xce, 0x74, 0xbf, 0x9f, 0x39, 0x7d, 0xbb, 0xad, 0xcd, 0x4d, 0x7e, + 0x28, 0x58, 0xe6, 0xef, 0x97, 0x44, 0xef, 0xe7, 0xb4, 0x2e, 0x35, 0xe2, + 0xab, 0x13, 0x88, 0xcd, 0x9d, 0x40, 0xcc, 0x8a, 0x5c, 0x81, 0x96, 0xc9, + 0x49, 0xce, 0x28, 0x9a, 0x7b, 0x3a, 0xb5, 0xd4, 0xc6, 0x1b, 0x0d, 0x5e, + 0xe6, 0x7b, 0x5c, 0x25, 0x6e, 0xc5, 0xd9, 0xd2, 0xd7, 0xe2, 0xc8, 0xa7, + 0xc4, 0x0d, 0x4d, 0x8f, 0xe9, 0xb6, 0x99, 0x83, 0x04, 0xe8, 0xc8, 0xf9, + 0x6c, 0x39, 0x23, 0x5c, 0xa0, 0x81, 0x05, 0x3b, 0x08, 0xfe, 0x04, 0x4b, + 0x51, 0x1e, 0x38, 0xab, 0xc8, 0xab, 0x2e, 0xfa, 0x15, 0x2d, 0x25, 0x6a, + 0x88, 0x8a, 0x2a, 0x18, 0x17, 0x9e, 0xb6, 0x0f, 0x14, 0x3c, 0x88, 0xb4, + 0xb3, 0xb9, 0xf3, 0x83, 0xd7, 0xce, 0x30, 0xf0, 0x43, 0x7f, 0x1c, 0xbd, + 0x3c, 0x7a, 0xbc, 0x35, 0x4f, 0x92, 0xdd, 0x02, 0xdd, 0x22, 0x36, 0xf8, + 0x74, 0xa3, 0xa6, 0x93, 0xca, 0x1d, 0xba, 0x76, 0x18, 0x32, 0x80, 0x39, + 0xfe, 0xa8, 0x01, 0x53, 0xc0, 0xe1, 0xe7, 0x89, 0x45, 0xb7, 0x46, 0xa1, + 0x63, 0xf7, 0x2b, 0xe8, 0xba, 0xb4, 0xa1, 0xb0, 0xd7, 0x6d, 0x3d, 0xda, + 0xdb, 0xdb, 0xed, 0x24, 0x7f, 0x57, 0xa4, 0xde, 0xf4, 0x2b, 0x9d, 0x56, + 0xab, 0xa2, 0x54, 0x46, 0x3d, 0x9c, 0xcf, 0x5c, 0x2f, 0x94, 0xf7, 0x13, + 0xe1, 0x7a, 0xa2, 0xb3, 0xb3, 0xb3, 0xe6, 0x59, 0xb7, 0xe9, 0x07, 0x93, + 0x2d, 0xe4, 0xb6, 0xb6, 0x40, 0x40, 0x13, 0xce, 0x11, 0x97, 0xab, 0x67, + 0x6a, 0xb9, 0xad, 0x5f, 0xb9, 0x2f, 0xc6, 0xf4, 0x5f, 0x45, 0xaf, 0xbf, + 0x29, 0x8a, 0xa0, 0x4d, 0xeb, 0x73, 0xfd, 0x0a, 0x4b, 0xd5, 0x1a, 0x82, + 0x51, 0x6c, 0xdc, 0x3c, 0x6a, 0xef, 0x6c, 0x3f, 0xda, 0xee, 0xb6, 0x91, + 0x70, 0x91, 0x49, 0x08, 0xf0, 0xbc, 0x93, 0x78, 0xde, 0x5a, 0x4e, 0x9f, + 0x45, 0x49, 0x87, 0xe0, 0x21, 0x23, 0x7b, 0x82, 0x65, 0x3f, 0x22, 0xa3, + 0x25, 0x58, 0xb4, 0x90, 0x5a, 0x31, 0x1c, 0xb7, 0x5a, 0xf6, 0x70, 0xd8, + 0xce, 0x73, 0x9c, 0x5d, 0x42, 0x24, 0x16, 0x5b, 0x75, 0x8c, 0x62, 0x71, + 0x0e, 0xf5, 0x22, 0xdc, 0xa7, 0xd5, 0xaf, 0xb0, 0xd9, 0xba, 0xb3, 0x2a, + 0x4e, 0x74, 0x45, 0xf2, 0x4b, 0xae, 0xba, 0x59, 0x0a, 0xcb, 0x51, 0xef, + 0x4a, 0x0b, 0x06, 0x7c, 0x65, 0xd9, 0xba, 0x60, 0x2e, 0x76, 0x2a, 0xf2, + 0x0c, 0xcc, 0x0c, 0x60, 0xb4, 0x08, 0x2f, 0xa8, 0x6a, 0x20, 0x88, 0xc7, + 0x00, 0xea, 0xa9, 0x3a, 0xaa, 0x37, 0x9c, 0xfa, 0xe0, 0x5a, 0x5e, 0x1e, + 0x51, 0x89, 0x17, 0xf3, 0x00, 0x88, 0xdb, 0xcc, 0xda, 0xad, 0xef, 0x3f, + 0xde, 0x22, 0xb8, 0x95, 0x58, 0x4a, 0x69, 0x75, 0x21, 0x57, 0x9d, 0xd6, + 0x57, 0x73, 0xd5, 0xa9, 0x1c, 0x2c, 0x65, 0xe9, 0xf1, 0xd6, 0xa4, 0xa8, + 0x3f, 0x91, 0xbe, 0x9b, 0x74, 0xd3, 0x7d, 0x57, 0xe9, 0xce, 0x7a, 0x81, + 0x0e, 0x94, 0xcb, 0x40, 0xe2, 0x83, 0x1a, 0xab, 0x99, 0x1c, 0xcf, 0x96, + 0xc5, 0xe4, 0x61, 0x29, 0x53, 0x28, 0x69, 0x84, 0x69, 0xe4, 0x4a, 0x1f, + 0x2d, 0x4b, 0xa7, 0x91, 0x45, 0x56, 0x49, 0x65, 0x4b, 0xd7, 0x34, 0x07, + 0xd6, 0xb4, 0xcb, 0x4c, 0x51, 0xf6, 0xa0, 0x5a, 0xcc, 0x8b, 0x1a, 0x7e, + 0x28, 0xaa, 0x46, 0xe3, 0x58, 0x09, 0x0f, 0x9d, 0xfb, 0x42, 0x8d, 0xe9, + 0xa2, 0x3a, 0x16, 0xd7, 0x0a, 0x65, 0x79, 0xe3, 0x25, 0x16, 0x6f, 0x51, + 0xce, 0x52, 0x4c, 0x00, 0xf2, 0x74, 0x2b, 0xa0, 0xf3, 0x46, 0x62, 0x14, + 0x9b, 0x09, 0x39, 0xf0, 0xa1, 0xbc, 0x63, 0xd9, 0x98, 0x71, 0x37, 0xe4, + 0x33, 0xb8, 0x0d, 0x16, 0xc6, 0x96, 0xa4, 0x6f, 0x01, 0xa8, 0x1c, 0x9c, + 0x39, 0x63, 0xe7, 0xf1, 0x96, 0x73, 0xf0, 0xc0, 0x1b, 0x84, 0xf3, 0x7d, + 0xf9, 0xc9, 0x44, 0x74, 0x81, 0xf4, 0x16, 0x53, 0xe5, 0x80, 0xaa, 0x8c, + 0xca, 0x12, 0xc8, 0x81, 0x64, 0xe7, 0x20, 0x66, 0x45, 0x25, 0xcb, 0xaf, + 0x6b, 0x6b, 0x00, 0xad, 0x89, 0x4b, 0xae, 0xc9, 0x75, 0x88, 0x4e, 0x65, + 0xbb, 0x27, 0xc4, 0xfc, 0x89, 0x3f, 0x1e, 0x7f, 0x6d, 0x05, 0xc0, 0xc9, + 0x0d, 0xeb, 0x00, 0xf5, 0xe4, 0x39, 0x91, 0xb4, 0x05, 0xd9, 0xa6, 0x58, + 0x15, 0x8b, 0x24, 0x4e, 0x78, 0xb0, 0x66, 0xe2, 0xb8, 0x45, 0x6d, 0xaa, + 0x2e, 0x3a, 0xf3, 0xbd, 0xa7, 0x74, 0x95, 0x15, 0xae, 0x54, 0x0c, 0x4f, + 0x02, 0xa1, 0xca, 0x55, 0x6b, 0x24, 0xbe, 0x32, 0x59, 0xd1, 0x81, 0x39, + 0xcc, 0x12, 0xc5, 0x99, 0x91, 0x92, 0xac, 0x75, 0x5c, 0x3e, 0xae, 0x32, + 0x13, 0x59, 0x52, 0x77, 0xad, 0x99, 0xe9, 0x34, 0x74, 0xf0, 0x25, 0xc3, + 0xbf, 0x3a, 0xf4, 0x0f, 0x67, 0x85, 0x0f, 0xa1, 0x5f, 0xd7, 0x45, 0xf9, + 0xc0, 0x2d, 0x1f, 0x9e, 0x40, 0x80, 0x7c, 0xdc, 0x3f, 0x93, 0x6e, 0x2e, + 0x2f, 0x21, 0xac, 0xd2, 0x4b, 0xf3, 0x76, 0xaa, 0xc0, 0x5d, 0x5b, 0x3a, + 0x00, 0x49, 0xb7, 0x9c, 0x9b, 0x28, 0xef, 0xad, 0x57, 0xd0, 0x18, 0x43, + 0xd9, 0x18, 0xbe, 0x77, 0xcc, 0xde, 0x2f, 0xfb, 0xf8, 0x55, 0xf1, 0x19, + 0xa8, 0x6b, 0x94, 0xcd, 0xb7, 0x2c, 0xce, 0xe0, 0x9a, 0x96, 0x80, 0x40, + 0xd2, 0x12, 0x97, 0x62, 0xa2, 0xac, 0x46, 0x86, 0x03, 0x20, 0x69, 0xc7, + 0xca, 0x51, 0xe0, 0x5f, 0x27, 0x4e, 0xa6, 0x13, 0x03, 0x4f, 0x73, 0xfc, + 0xbd, 0x59, 0xcc, 0xaa, 0xed, 0xda, 0x92, 0x5a, 0x1b, 0xd5, 0x3c, 0x60, + 0xfc, 0xba, 0xa7, 0xb4, 0x7b, 0x32, 0xd5, 0xf0, 0xf2, 0x13, 0x71, 0xde, + 0x2e, 0x50, 0xf1, 0x55, 0x94, 0x66, 0x69, 0x05, 0x3b, 0xab, 0x55, 0xb0, + 0x5b, 0x5e, 0xc1, 0xce, 0x4d, 0x2a, 0xd8, 0x29, 0xaa, 0x60, 0xe7, 0x2e, + 0x2a, 0xd8, 0xfd, 0xea, 0x0a, 0x76, 0x6f, 0x52, 0xc1, 0x6e, 0x51, 0x05, + 0xbb, 0x5f, 0x59, 0x41, 0xce, 0x5b, 0xd1, 0x54, 0x2c, 0xeb, 0xeb, 0x3f, + 0x5a, 0xa5, 0x47, 0xeb, 0xf5, 0x8a, 0xb8, 0x67, 0xc7, 0x85, 0xae, 0x35, + 0x05, 0xa8, 0x2d, 0x5f, 0x85, 0xb1, 0x92, 0xcf, 0xb2, 0xac, 0x05, 0xcd, + 0x02, 0x6d, 0xe5, 0xe0, 0xda, 0x96, 0xdf, 0xba, 0x5e, 0x33, 0xae, 0x23, + 0xcd, 0xcb, 0x0d, 0x14, 0x72, 0x00, 0x2f, 0x9d, 0xc6, 0xc9, 0x80, 0x86, + 0x28, 0x4e, 0xbc, 0xae, 0xa4, 0x5c, 0xaa, 0x94, 0x0b, 0xe5, 0x72, 0x9d, + 0xad, 0x82, 0x4a, 0x30, 0x1a, 0xe8, 0xd0, 0xb5, 0x75, 0x96, 0xc5, 0x3f, + 0xdb, 0xee, 0x02, 0xe5, 0xb1, 0x74, 0xac, 0xaf, 0xb4, 0xe5, 0x15, 0xa2, + 0x0a, 0x6d, 0xf0, 0x63, 0xb2, 0x86, 0x6f, 0xfb, 0x9c, 0xb3, 0x63, 0xdc, + 0x95, 0xcd, 0x09, 0x64, 0x12, 0x08, 0x1a, 0x1c, 0xf9, 0xeb, 0x2b, 0x85, + 0xc2, 0x38, 0xee, 0x4c, 0x2c, 0x8c, 0x7d, 0x83, 0x82, 0x19, 0x80, 0xbb, + 0xca, 0x01, 0x7d, 0x7e, 0xa5, 0x58, 0x08, 0xc5, 0x9d, 0x49, 0x85, 0x90, + 0x6f, 0x50, 0x28, 0xb4, 0xa3, 0x08, 0x7a, 0xf4, 0xf5, 0xb5, 0x62, 0x21, + 0x1c, 0x77, 0x27, 0x17, 0xc2, 0xbe, 0x49, 0xc1, 0xc8, 0x55, 0xd0, 0xd8, + 0x32, 0xea, 0xa5, 0xae, 0x3d, 0x75, 0x33, 0x4c, 0x57, 0x7e, 0xef, 0xaf, + 0xe5, 0xa3, 0x5b, 0xfa, 0x82, 0x32, 0x08, 0x7c, 0x80, 0xa9, 0x3e, 0xfc, + 0x9c, 0x91, 0x08, 0xc9, 0xe9, 0x22, 0x37, 0xf4, 0x2b, 0xc5, 0x2f, 0x19, + 0xbe, 0x33, 0xf9, 0x4b, 0xf4, 0x1b, 0x6c, 0x00, 0x5e, 0x48, 0xbe, 0x5d, + 0xf9, 0xd3, 0x3c, 0x67, 0x26, 0x82, 0x5b, 0x10, 0x36, 0x98, 0xbb, 0xc3, + 0x01, 0x03, 0xd8, 0xbf, 0x7e, 0xc8, 0x90, 0x2b, 0x32, 0xb8, 0xe5, 0x99, + 0x56, 0x88, 0x72, 0xee, 0xbf, 0x5a, 0x11, 0x2e, 0x9c, 0x05, 0xd0, 0xba, + 0xc2, 0xfe, 0xb5, 0x35, 0xd3, 0x24, 0xce, 0x42, 0x45, 0xe4, 0xd5, 0xc0, + 0x5d, 0x86, 0x0e, 0x0b, 0xa9, 0x67, 0xe1, 0x6b, 0x09, 0x6a, 0x96, 0x51, + 0x57, 0x10, 0x1e, 0x04, 0xa6, 0x30, 0x56, 0xd2, 0x04, 0x63, 0x6a, 0xe5, + 0x7b, 0x77, 0x45, 0x8b, 0xcc, 0x6a, 0xa1, 0x9d, 0x77, 0xae, 0xcc, 0x02, + 0xdd, 0x8d, 0x45, 0x7d, 0x4b, 0x7e, 0xa0, 0x4e, 0xfb, 0xca, 0x89, 0x5b, + 0x72, 0x09, 0x1a, 0xaf, 0x00, 0x28, 0x9d, 0x70, 0x4a, 0x72, 0x45, 0x44, + 0x63, 0x0c, 0xfa, 0xda, 0xc8, 0xf5, 0x94, 0x47, 0x72, 0x72, 0xed, 0xaa, + 0xd3, 0x0a, 0x33, 0xe0, 0x65, 0x9e, 0xf1, 0x36, 0xeb, 0x93, 0xdc, 0x5e, + 0x79, 0x85, 0xae, 0xb4, 0xb8, 0x56, 0xa9, 0x1e, 0x4b, 0x60, 0xae, 0x99, + 0xab, 0x4a, 0xc4, 0x35, 0x4b, 0xc5, 0x70, 0x90, 0x70, 0xe4, 0xaf, 0x35, + 0x9b, 0xf5, 0x7a, 0x86, 0xcd, 0x7e, 0xf1, 0xd1, 0x78, 0x0c, 0x02, 0xa1, + 0xe1, 0xb9, 0x0c, 0x59, 0xd6, 0x35, 0x4f, 0xdc, 0x0d, 0x7a, 0x7d, 0x1f, + 0x65, 0x1b, 0xa7, 0xd9, 0x91, 0xb1, 0x5b, 0x95, 0x75, 0x3b, 0x9e, 0x8e, + 0x40, 0xab, 0x68, 0xa5, 0x68, 0xe4, 0x6a, 0xb1, 0x12, 0x4e, 0x9a, 0x4f, + 0x69, 0x14, 0x39, 0x0c, 0x83, 0x89, 0x8c, 0x5a, 0x49, 0x4f, 0x6a, 0x2c, + 0x5e, 0x82, 0x5f, 0x61, 0x32, 0x46, 0x7f, 0xd7, 0x5b, 0xf4, 0x9b, 0x74, + 0xd5, 0xeb, 0xdb, 0x54, 0xaa, 0xca, 0xb7, 0x98, 0x91, 0x8a, 0xe0, 0x8e, + 0x9b, 0x33, 0x51, 0x5e, 0x45, 0x36, 0xd0, 0x3a, 0x16, 0x6f, 0xde, 0x27, + 0x5e, 0xb9, 0xb0, 0xc7, 0xc3, 0x22, 0xcf, 0x9f, 0x65, 0xad, 0xee, 0x40, + 0x0d, 0xe6, 0x5c, 0x5d, 0xe2, 0xe5, 0xda, 0x79, 0xa2, 0x69, 0x7c, 0x53, + 0xf0, 0x16, 0x9b, 0x9b, 0x85, 0xb2, 0xb2, 0x54, 0xe4, 0x66, 0xcb, 0x5d, + 0xd8, 0xf4, 0x52, 0x45, 0x59, 0x32, 0x26, 0x1a, 0xf5, 0xf9, 0x89, 0x1f, + 0x46, 0xb4, 0x60, 0x2e, 0x15, 0x68, 0xa5, 0x06, 0x31, 0x03, 0xe2, 0x54, + 0x16, 0xbe, 0xdb, 0xf1, 0x70, 0xed, 0x7a, 0x5b, 0x74, 0xad, 0xc3, 0x4a, + 0x95, 0x7f, 0xfd, 0xf3, 0xf7, 0xef, 0x49, 0x00, 0x37, 0xaa, 0xfc, 0xec, + 0x0f, 0x51, 0x74, 0x42, 0x12, 0xf8, 0x8f, 0xab, 0xfd, 0x6a, 0x2d, 0x4f, + 0x95, 0xff, 0xd6, 0x0f, 0xd6, 0xa9, 0xbc, 0x74, 0x44, 0x33, 0xce, 0xe3, + 0xee, 0xce, 0x4e, 0x77, 0x27, 0x21, 0x12, 0x9c, 0x57, 0xf9, 0xcf, 0x13, + 0xc9, 0xee, 0xca, 0x22, 0xf9, 0x45, 0x78, 0xad, 0x35, 0x5d, 0xa2, 0x0f, + 0x14, 0x7c, 0xf1, 0x5f, 0x5c, 0xf9, 0x6f, 0x51, 0x76, 0x8d, 0xca, 0xcf, + 0x01, 0x7e, 0x86, 0x9a, 0x24, 0x04, 0x40, 0x49, 0xff, 0x16, 0x01, 0xac, + 0xb2, 0xc4, 0x79, 0x8b, 0xbe, 0xdf, 0x53, 0x8c, 0x18, 0xb7, 0xd9, 0x75, + 0x24, 0xd6, 0x21, 0xb0, 0xfe, 0xe7, 0x75, 0x9e, 0x64, 0xbd, 0xdf, 0xbd, + 0x78, 0xf2, 0x76, 0x75, 0x7f, 0x57, 0xfe, 0x44, 0xb4, 0x92, 0xbf, 0x71, + 0x8f, 0x57, 0x7b, 0x47, 0xde, 0xd7, 0x36, 0x52, 0x7b, 0x37, 0xd9, 0x42, + 0x38, 0x52, 0xf7, 0x6f, 0x69, 0x9f, 0x0d, 0xa8, 0x77, 0x37, 0x21, 0xb7, + 0xb7, 0xdf, 0xbe, 0x7f, 0x77, 0xf4, 0xcb, 0x75, 0x1b, 0x1a, 0xaf, 0x98, + 0xc2, 0x61, 0xc1, 0x0d, 0x36, 0x75, 0x86, 0xe5, 0xe7, 0x87, 0xcf, 0x8e, + 0x6e, 0xc0, 0x33, 0x0e, 0xd5, 0x6c, 0x72, 0x46, 0x96, 0x61, 0xfa, 0xc5, + 0xe1, 0xeb, 0xd7, 0x87, 0x37, 0xe0, 0x7a, 0x62, 0xcf, 0x66, 0xf6, 0xbf, + 0x8f, 0xed, 0xe3, 0x97, 0xbf, 0xb9, 0x89, 0xac, 0xe1, 0x13, 0xdf, 0xb6, + 0xac, 0xef, 0xba, 0x6b, 0x94, 0x8f, 0x9e, 0x3a, 0xcc, 0x5b, 0xc6, 0x78, + 0xab, 0xc1, 0xd4, 0x6c, 0x2c, 0xab, 0xa1, 0x74, 0xe9, 0xdc, 0x44, 0xe3, + 0x2e, 0xba, 0x07, 0x99, 0xb8, 0x5c, 0x61, 0x47, 0xf1, 0xb5, 0x4d, 0x46, + 0x8e, 0x9f, 0x53, 0xd6, 0x4c, 0xcd, 0x74, 0xcc, 0x4e, 0xd9, 0x0c, 0x80, + 0x15, 0xbd, 0x24, 0xa8, 0x4e, 0x16, 0xac, 0x48, 0xe3, 0x39, 0xe6, 0x33, + 0x2b, 0xd1, 0xa0, 0x89, 0xcf, 0x0d, 0x69, 0x3c, 0x41, 0xac, 0xd3, 0x4a, + 0x34, 0x28, 0xb6, 0xf7, 0xa6, 0x34, 0xa2, 0xd5, 0x44, 0x35, 0x88, 0x6e, + 0x2a, 0x29, 0x50, 0xc0, 0xe6, 0xf0, 0xaa, 0x44, 0xa0, 0x2d, 0x6b, 0xd1, + 0x61, 0xb4, 0x6b, 0xf6, 0x8f, 0xdb, 0x52, 0x6c, 0xd7, 0xfe, 0x2c, 0xde, + 0xd0, 0xe2, 0xde, 0x1a, 0x23, 0xaa, 0x71, 0x8f, 0xb9, 0xb8, 0x87, 0xe2, + 0xb7, 0xe1, 0x1e, 0xea, 0xd0, 0x60, 0x75, 0x70, 0x8d, 0x2f, 0xc4, 0xbf, + 0xa3, 0x41, 0x35, 0x96, 0x56, 0x1c, 0xf6, 0x93, 0x5a, 0xa3, 0x6c, 0x84, + 0xa8, 0x96, 0x5e, 0x5b, 0x97, 0xf9, 0xb1, 0x79, 0x4b, 0xbe, 0x2d, 0x81, + 0xde, 0x5c, 0x96, 0x78, 0x43, 0x55, 0xf2, 0x6d, 0x6f, 0xd7, 0xec, 0x24, + 0xf0, 0xeb, 0x7b, 0xb2, 0xdb, 0x09, 0x44, 0x15, 0xbb, 0x09, 0xfc, 0x7d, + 0xac, 0x58, 0x89, 0x23, 0x86, 0x56, 0x5d, 0xe5, 0xcd, 0x40, 0xc8, 0x1b, + 0xd0, 0xb9, 0x76, 0xf2, 0x67, 0xdc, 0x50, 0xf1, 0x79, 0x4c, 0x16, 0x73, + 0x89, 0xc0, 0x0e, 0x1e, 0xdb, 0x99, 0xf7, 0x92, 0xca, 0xb7, 0xa4, 0x2e, + 0x7d, 0x35, 0x6a, 0x25, 0x41, 0x8e, 0x5f, 0xba, 0x03, 0x51, 0xa2, 0x69, + 0xe9, 0xb5, 0xb6, 0x27, 0x03, 0xd7, 0xc6, 0xf3, 0xc1, 0xb7, 0x81, 0xff, + 0x7b, 0x1a, 0x46, 0xa6, 0x3e, 0xad, 0x52, 0xd8, 0x07, 0x38, 0xa6, 0xfa, + 0x8f, 0xbf, 0xe2, 0x20, 0x43, 0xfb, 0x91, 0xac, 0x93, 0xb5, 0x4e, 0xd4, + 0x5e, 0x61, 0x13, 0xfa, 0x73, 0xe1, 0x95, 0x34, 0xa1, 0x6e, 0x36, 0xa5, + 0x69, 0x5f, 0xdf, 0x6e, 0x71, 0x5b, 0x39, 0x71, 0x84, 0x57, 0xae, 0xa5, + 0xa4, 0x38, 0x96, 0xc5, 0x87, 0xe2, 0x36, 0x0a, 0x67, 0x9e, 0x1c, 0x27, + 0x9d, 0xb1, 0x55, 0x45, 0xe4, 0x17, 0x5e, 0xb2, 0x84, 0xf0, 0xb2, 0x26, + 0xcd, 0x42, 0x0f, 0x27, 0xf4, 0x5a, 0x5a, 0x3e, 0x4a, 0xff, 0x76, 0x5c, + 0x7d, 0xf8, 0xfa, 0xf8, 0xe5, 0xd1, 0xc3, 0xda, 0xbd, 0x7e, 0xbf, 0xd1, + 0xb6, 0xfe, 0xf8, 0x47, 0xcb, 0xc0, 0xe2, 0x84, 0xca, 0x2f, 0xb1, 0xa0, + 0x06, 0x2d, 0x35, 0xc0, 0xef, 0x03, 0x67, 0x84, 0xd2, 0x5b, 0x0f, 0x6b, + 0xd6, 0x41, 0x7c, 0x8b, 0xb7, 0xf9, 0xa3, 0xaa, 0xe0, 0x25, 0xa4, 0x4d, + 0xd7, 0x9f, 0x54, 0x2b, 0x78, 0x57, 0xe7, 0x48, 0x44, 0x32, 0x6c, 0xb0, + 0xb6, 0x9f, 0x06, 0x1c, 0xe1, 0x1c, 0xd1, 0x8c, 0xd8, 0x40, 0x83, 0x1e, + 0xc9, 0x77, 0x85, 0x3e, 0xb9, 0x78, 0x39, 0xaa, 0xe6, 0xa2, 0xe5, 0x6b, + 0x4d, 0xd6, 0xb4, 0xa6, 0x3e, 0xdd, 0xd7, 0xb7, 0x1e, 0x72, 0x3f, 0x79, + 0xb8, 0x2a, 0xc2, 0x78, 0x87, 0xa0, 0x08, 0xd5, 0x14, 0xb5, 0x49, 0x62, + 0x4a, 0x85, 0xfa, 0x2b, 0x51, 0xe6, 0x85, 0xcb, 0xe7, 0x44, 0xf4, 0x12, + 0x3f, 0xea, 0x38, 0xe6, 0x77, 0x24, 0xa3, 0xea, 0x00, 0xfd, 0x01, 0x6e, + 0x60, 0xb0, 0xb0, 0x31, 0x68, 0xc1, 0xab, 0xc0, 0x39, 0xbf, 0x33, 0x4f, + 0x05, 0xbf, 0xca, 0x53, 0xee, 0x0c, 0xf0, 0xd4, 0x9f, 0x5f, 0xd0, 0x75, + 0x21, 0x71, 0x8e, 0xe0, 0xa3, 0x7e, 0x15, 0x52, 0xb5, 0xea, 0x91, 0x37, + 0x71, 0x9d, 0x70, 0x5a, 0xb3, 0x3e, 0x4b, 0xd1, 0xd7, 0x33, 0x90, 0x4e, + 0xd4, 0x64, 0x24, 0x2f, 0xc7, 0x96, 0x9d, 0x44, 0x6d, 0x39, 0x21, 0x26, + 0x27, 0x61, 0x48, 0xb7, 0x7b, 0xd0, 0xc4, 0x3b, 0xac, 0x13, 0xd2, 0x0b, + 0x7e, 0x45, 0x04, 0xb1, 0x68, 0x2f, 0x5c, 0x7e, 0x99, 0xaa, 0xc2, 0x0f, + 0x24, 0x7c, 0xba, 0xe5, 0x33, 0xae, 0x87, 0x70, 0x75, 0x4d, 0xfa, 0xba, + 0x39, 0x85, 0xd7, 0x4b, 0xb4, 0x2c, 0x03, 0x9c, 0xd0, 0x6a, 0x1e, 0x4e, + 0x11, 0xab, 0xf2, 0x95, 0xba, 0xc9, 0xa6, 0x40, 0x4d, 0xca, 0x32, 0x7d, + 0x37, 0x99, 0xab, 0xca, 0x99, 0xcc, 0x5f, 0xbc, 0xb4, 0x7e, 0xd9, 0xad, + 0x62, 0xb6, 0xf8, 0xa1, 0x96, 0x84, 0x8b, 0x03, 0x3b, 0x01, 0x1c, 0xff, + 0x4e, 0x02, 0xa0, 0xd9, 0x92, 0x30, 0xf2, 0x31, 0x0f, 0x16, 0x47, 0x4b, + 0x02, 0xe6, 0x9d, 0xfe, 0x5d, 0x40, 0xe8, 0x28, 0x08, 0xfc, 0xa0, 0x0d, + 0x20, 0xcc, 0xd7, 0xdd, 0x11, 0x1c, 0xab, 0x48, 0xe5, 0xb0, 0x98, 0x0c, + 0xbb, 0x4d, 0x0b, 0x3a, 0x8f, 0x03, 0x45, 0x65, 0x28, 0x3a, 0x40, 0x61, + 0xd1, 0x1e, 0x6e, 0xd8, 0xb4, 0xbe, 0x75, 0xe9, 0x94, 0x1d, 0xce, 0x05, + 0xc9, 0x16, 0x7d, 0x77, 0xf4, 0xf4, 0xed, 0x9b, 0x37, 0x47, 0x4f, 0xdf, + 0xab, 0x37, 0xa0, 0x12, 0xe2, 0x28, 0x40, 0xdb, 0x4f, 0xa0, 0x90, 0xcd, + 0x24, 0x42, 0x17, 0xf7, 0xb2, 0xbc, 0xa6, 0x11, 0x10, 0xc8, 0xf4, 0x1d, + 0x2d, 0x33, 0x7a, 0xb6, 0x9a, 0x4d, 0x00, 0x5a, 0x5b, 0x5b, 0x78, 0xb1, + 0x97, 0x13, 0xc6, 0x4d, 0xd5, 0xc0, 0xc1, 0x00, 0x82, 0x41, 0x12, 0x18, + 0x37, 0xea, 0x81, 0x2b, 0x68, 0x94, 0x1d, 0xe1, 0x0c, 0xc6, 0x8b, 0xc4, + 0x0b, 0x11, 0xd5, 0xd2, 0xc4, 0xd4, 0xc8, 0x90, 0xa4, 0xa7, 0x0a, 0xde, + 0x19, 0xc9, 0x0f, 0x62, 0x10, 0xa2, 0xe3, 0x92, 0xc4, 0xa5, 0xf8, 0x58, + 0x55, 0x65, 0xa2, 0x88, 0x14, 0xd9, 0x74, 0x91, 0x77, 0x38, 0x5e, 0x73, + 0x81, 0x02, 0xfc, 0x5d, 0x04, 0xc0, 0x2d, 0x00, 0x00, 0xfe, 0xe6, 0x14, + 0x20, 0x35, 0xb7, 0x4a, 0x48, 0x19, 0xe2, 0x65, 0x28, 0xdc, 0x2e, 0x46, + 0xf6, 0x77, 0x50, 0x43, 0x91, 0xe4, 0x24, 0xc9, 0xa6, 0x32, 0x64, 0xc8, + 0xfa, 0x20, 0x7f, 0x25, 0x33, 0x67, 0xe6, 0x18, 0x0f, 0x00, 0x5e, 0x8e, + 0xc9, 0x6a, 0xa0, 0x21, 0xc0, 0x2a, 0x31, 0xa6, 0xf6, 0x94, 0xf1, 0x4a, + 0x5a, 0x0c, 0x70, 0x48, 0x61, 0x79, 0x79, 0x11, 0xe6, 0x29, 0xbe, 0x37, + 0x89, 0xb5, 0xed, 0x54, 0x88, 0x39, 0x1d, 0x17, 0x9e, 0xc1, 0x48, 0xa3, + 0x9c, 0x1d, 0x59, 0xa9, 0xbe, 0x36, 0xf2, 0x45, 0xe8, 0x3d, 0x8c, 0xc8, + 0x28, 0x9c, 0x02, 0x2c, 0xff, 0x2a, 0xdc, 0x94, 0xda, 0x62, 0xda, 0xb1, + 0x98, 0x63, 0x3b, 0xcd, 0x6f, 0x8c, 0xc8, 0xda, 0x28, 0x6b, 0x8c, 0x37, + 0xed, 0x9d, 0xe2, 0xe8, 0xf2, 0x34, 0x00, 0x1f, 0xf5, 0xf8, 0xcd, 0xba, + 0x90, 0xf8, 0xd1, 0x68, 0x22, 0x52, 0x8d, 0xc2, 0xee, 0x2b, 0x35, 0x31, + 0x7d, 0xa7, 0xbb, 0xe5, 0x88, 0x1a, 0x32, 0xdd, 0x57, 0x39, 0xdc, 0x0a, + 0xc9, 0x2f, 0xe8, 0x3b, 0x99, 0x41, 0x11, 0x47, 0x48, 0x7f, 0x82, 0xaf, + 0x64, 0x32, 0x4f, 0x85, 0x48, 0x92, 0xf8, 0x4e, 0x66, 0x50, 0xb3, 0x9c, + 0x00, 0x19, 0x58, 0x26, 0xe2, 0x88, 0x61, 0x41, 0x42, 0xe6, 0x84, 0xb5, + 0xca, 0x26, 0x09, 0x79, 0x74, 0xc2, 0x3a, 0x5b, 0xdc, 0x85, 0xb0, 0xcb, + 0xca, 0x52, 0x9e, 0x2c, 0xd8, 0x4a, 0x16, 0xd3, 0xb1, 0x03, 0xcc, 0x92, + 0x56, 0x64, 0x4b, 0xa7, 0x25, 0x21, 0x13, 0xbb, 0xc2, 0x12, 0xfc, 0x98, + 0x13, 0xd4, 0x20, 0x92, 0x07, 0x36, 0xdb, 0x2f, 0x04, 0xac, 0x7e, 0xe6, + 0xa1, 0xcc, 0x3e, 0x05, 0xa0, 0xe8, 0xa7, 0x75, 0x2c, 0x02, 0x0c, 0x1c, + 0x19, 0x38, 0xb3, 0xa4, 0x4f, 0x70, 0x34, 0x9e, 0xf0, 0xcf, 0x2c, 0x94, + 0x59, 0xe5, 0xd6, 0xd8, 0xe8, 0x77, 0x8e, 0x70, 0x7a, 0x4d, 0x58, 0x83, + 0x7e, 0xab, 0x16, 0x7c, 0xd3, 0xa0, 0x66, 0x41, 0x94, 0xea, 0x8c, 0xee, + 0x35, 0xb7, 0x5e, 0x1d, 0x3d, 0xb3, 0x38, 0x25, 0x05, 0x69, 0x96, 0x10, + 0x01, 0x88, 0x2f, 0xeb, 0x2d, 0x79, 0xf9, 0x29, 0x90, 0x78, 0xd9, 0x2e, + 0x46, 0xf5, 0xe2, 0xdb, 0x97, 0x6f, 0x2d, 0x4a, 0xc8, 0x83, 0xbd, 0x9d, + 0xf3, 0x80, 0x1c, 0x83, 0xaa, 0xe7, 0x0c, 0xa4, 0x59, 0xcf, 0x22, 0xaa, + 0xf2, 0x32, 0xab, 0x2c, 0x88, 0x59, 0x3f, 0x02, 0xcc, 0x73, 0xf4, 0x7c, + 0x7a, 0xf9, 0xb9, 0xc8, 0xd7, 0xd3, 0xac, 0xd8, 0x90, 0x42, 0xd3, 0x0a, + 0x0c, 0x3a, 0x43, 0xa0, 0x5e, 0x1d, 0x97, 0x85, 0x36, 0x0b, 0x25, 0xac, + 0x0b, 0x93, 0x19, 0x75, 0xeb, 0x63, 0xe7, 0x4b, 0x96, 0xba, 0x59, 0x30, + 0x30, 0x3a, 0xc3, 0x07, 0x24, 0xc7, 0x70, 0x66, 0x65, 0x67, 0x4b, 0xd7, + 0x29, 0x9e, 0xf6, 0x03, 0x1e, 0xaf, 0x82, 0xcc, 0x34, 0x5d, 0x3c, 0x61, + 0xa7, 0x5c, 0x71, 0x9e, 0x6e, 0x82, 0x78, 0xa6, 0x4d, 0x1d, 0xcf, 0x1c, + 0xf8, 0xcd, 0x83, 0x44, 0x1e, 0x41, 0xf0, 0x88, 0x96, 0x21, 0x6e, 0x66, + 0xb9, 0x9a, 0x5d, 0xb2, 0x9e, 0x12, 0x34, 0x05, 0x99, 0xdc, 0xa0, 0x8e, + 0x41, 0xd5, 0x81, 0x71, 0xb9, 0x1d, 0x9b, 0x02, 0x97, 0x5b, 0xa4, 0x64, + 0x56, 0xe8, 0x47, 0xc6, 0x24, 0x08, 0xa6, 0xf6, 0x81, 0xbe, 0x93, 0x19, + 0xb9, 0xfd, 0x7c, 0xaa, 0x73, 0x9c, 0x66, 0xe9, 0xc4, 0x64, 0x11, 0xf5, + 0x26, 0x6e, 0x72, 0x4d, 0xa8, 0x9f, 0xa0, 0xe5, 0x3e, 0x93, 0x11, 0xa4, + 0xe7, 0x24, 0x98, 0x99, 0xee, 0x02, 0xea, 0x30, 0x3e, 0x58, 0x92, 0x30, + 0xbb, 0xd6, 0x31, 0x81, 0x58, 0x0c, 0x63, 0x55, 0x7f, 0x5b, 0xd9, 0xff, + 0x6d, 0x05, 0x55, 0xc6, 0xe9, 0x38, 0x1a, 0x4d, 0x52, 0x5e, 0x4f, 0x72, + 0x96, 0x46, 0x8e, 0xc4, 0x31, 0x95, 0xd3, 0x09, 0x19, 0x40, 0xb6, 0xa0, + 0x3a, 0x4f, 0x26, 0x64, 0x21, 0xd2, 0x03, 0x22, 0x25, 0x25, 0x46, 0xf6, + 0xb2, 0x81, 0xd0, 0xa0, 0x98, 0xcb, 0x09, 0xd5, 0x4f, 0x7c, 0x36, 0x3b, + 0xc9, 0xe9, 0x55, 0x45, 0x02, 0x5d, 0x29, 0x60, 0xcf, 0x2d, 0x75, 0x10, + 0xdf, 0x08, 0x74, 0x5c, 0x24, 0x8c, 0xc2, 0xbb, 0xf5, 0x11, 0xd1, 0x59, + 0x07, 0xbe, 0x87, 0xc9, 0xc8, 0x12, 0x1f, 0xd1, 0x73, 0x60, 0x8f, 0x63, + 0xc0, 0x32, 0x2f, 0xf1, 0x97, 0x00, 0xa0, 0xb1, 0xd3, 0x9f, 0x03, 0x7e, + 0x71, 0xb6, 0xcc, 0x57, 0xfc, 0x19, 0x34, 0x27, 0x46, 0xea, 0x10, 0x52, + 0x0c, 0xd2, 0xc9, 0x01, 0xb7, 0xb9, 0xdc, 0x4f, 0x3c, 0x15, 0x18, 0x55, + 0x26, 0x02, 0x72, 0x1e, 0xe0, 0xd7, 0xa8, 0x69, 0xbd, 0x10, 0x83, 0x60, + 0xe1, 0x9c, 0x5a, 0x30, 0x2b, 0x19, 0x36, 0xac, 0x53, 0xcf, 0x9f, 0x5b, + 0xfe, 0x2c, 0x7e, 0x86, 0x26, 0x72, 0xb9, 0x40, 0x94, 0xfb, 0x8e, 0xfc, + 0x8d, 0xe6, 0x18, 0x89, 0xbb, 0xf0, 0x71, 0x32, 0x8e, 0xe3, 0x4b, 0xba, + 0x12, 0xca, 0x75, 0xf1, 0x24, 0xbc, 0x3b, 0xa5, 0xa9, 0xc6, 0xd6, 0xe4, + 0x28, 0x1b, 0x9a, 0x16, 0x58, 0xe2, 0x37, 0xfe, 0xcc, 0xb5, 0xed, 0x60, + 0x89, 0xdb, 0xf8, 0x9c, 0x56, 0x7e, 0x07, 0xce, 0xef, 0x25, 0xf7, 0x58, + 0x6d, 0xf3, 0xb4, 0xef, 0x28, 0xb4, 0xeb, 0xa8, 0x9a, 0x4a, 0xb7, 0xc2, + 0x1d, 0xd4, 0x50, 0x24, 0x98, 0x29, 0x71, 0x1c, 0x51, 0x8b, 0x70, 0x38, + 0x5d, 0x9c, 0x2d, 0xf5, 0x1e, 0x0f, 0x71, 0xb9, 0xcb, 0x02, 0x3d, 0x00, + 0x35, 0xc2, 0xc2, 0xc2, 0x70, 0x0a, 0x72, 0x42, 0x84, 0xb8, 0x46, 0x61, + 0x42, 0xac, 0xa1, 0x0a, 0xd0, 0x5b, 0x9e, 0x23, 0x36, 0xd3, 0x0e, 0xe2, + 0x99, 0x08, 0x4e, 0x23, 0xd6, 0xea, 0x42, 0xf7, 0xd0, 0xe8, 0x28, 0xdd, + 0x4f, 0x33, 0xb6, 0xa3, 0xd0, 0x17, 0x08, 0x10, 0xfa, 0xfd, 0xa9, 0xf1, + 0x0e, 0xbf, 0xf8, 0x36, 0x68, 0x4b, 0xf7, 0x10, 0x17, 0x84, 0x69, 0x07, + 0x31, 0xef, 0x18, 0x72, 0x93, 0x88, 0x45, 0x91, 0x63, 0xe8, 0xfb, 0x25, + 0x9e, 0xa1, 0x5f, 0xe2, 0x19, 0xda, 0x8b, 0xb3, 0x42, 0xd7, 0xd0, 0x89, + 0xca, 0x1d, 0xc3, 0x17, 0x40, 0x4a, 0x4e, 0xdd, 0x8c, 0x9c, 0xba, 0xa9, + 0x3f, 0x01, 0xef, 0xa3, 0x72, 0x6f, 0x30, 0x5b, 0xc0, 0xb5, 0xb9, 0xc0, + 0x6a, 0x5e, 0xe0, 0x6c, 0x75, 0x2f, 0x90, 0xd4, 0xeb, 0xbd, 0x6d, 0xbb, + 0x9b, 0x74, 0x02, 0x85, 0xb7, 0xaa, 0x0f, 0x38, 0x91, 0xad, 0x0f, 0x01, + 0x78, 0xb6, 0x3d, 0x5b, 0xc1, 0x13, 0x3c, 0xb3, 0xa1, 0x7b, 0x67, 0xfe, + 0x72, 0x5f, 0x10, 0x5e, 0x20, 0xcb, 0xf5, 0x6b, 0x7c, 0xbc, 0x15, 0xbc, + 0xc5, 0xac, 0x1b, 0xe8, 0xe3, 0x59, 0xfc, 0x2f, 0x78, 0x81, 0xa4, 0x33, + 0x73, 0x1b, 0x3d, 0xdb, 0xb6, 0x4e, 0xa9, 0x47, 0x09, 0xaf, 0xd4, 0x0d, + 0x3c, 0x74, 0x27, 0x62, 0x06, 0x3d, 0x5e, 0xe2, 0x09, 0x9e, 0x86, 0xe5, + 0xae, 0xe0, 0x21, 0x5a, 0x53, 0x04, 0x70, 0x06, 0xcb, 0x7d, 0xc1, 0x9f, + 0x61, 0xa4, 0xc2, 0x42, 0xe9, 0x12, 0x5f, 0xf0, 0x85, 0x38, 0xc5, 0x14, + 0x12, 0x23, 0x18, 0x81, 0x5e, 0xef, 0x09, 0x52, 0xed, 0xd8, 0x50, 0x58, + 0xa7, 0x8e, 0xf8, 0xb2, 0xc4, 0x19, 0x3c, 0x15, 0x6e, 0xa1, 0x33, 0xe8, + 0x5c, 0xef, 0x0b, 0xbe, 0xfd, 0x8c, 0x5a, 0xa1, 0x2b, 0x86, 0x82, 0x93, + 0x84, 0xb7, 0xc4, 0x15, 0xa4, 0x2f, 0x8b, 0xfd, 0x41, 0x1a, 0x7d, 0xaf, + 0xf5, 0x05, 0x51, 0x87, 0x84, 0x89, 0xa5, 0x91, 0x64, 0xe1, 0x1a, 0x47, + 0x70, 0x22, 0x60, 0xcb, 0x05, 0x2d, 0xa3, 0x2e, 0xf5, 0x04, 0x53, 0xa3, + 0xab, 0x3f, 0x07, 0x21, 0xdb, 0x2b, 0x72, 0x08, 0x33, 0x70, 0xc0, 0x4e, + 0x76, 0x2a, 0x07, 0x9a, 0x1f, 0xf3, 0xa6, 0x22, 0xd2, 0x78, 0x73, 0xc3, + 0xdc, 0x4a, 0x7e, 0xa1, 0xd4, 0xbf, 0x8c, 0x67, 0x38, 0x12, 0xa5, 0x9e, + 0xe1, 0x33, 0xb1, 0x88, 0xc2, 0xe1, 0x1d, 0x2f, 0x1d, 0x92, 0x5b, 0xb0, + 0xb8, 0xc6, 0x2d, 0xc4, 0x12, 0x31, 0x9a, 0xd1, 0x8b, 0xca, 0x1c, 0xc2, + 0x0f, 0x0e, 0xf9, 0xb0, 0xc6, 0xc3, 0xb8, 0xc6, 0x23, 0xf4, 0xa0, 0xd7, + 0x1e, 0x0f, 0xb8, 0x33, 0x27, 0xe9, 0x0b, 0x26, 0x5c, 0x14, 0xeb, 0x27, + 0x08, 0x0c, 0xb5, 0x44, 0xb8, 0xdc, 0x3b, 0x9c, 0xd9, 0x2e, 0x2f, 0xfb, + 0x2e, 0x80, 0xab, 0x69, 0x3d, 0x11, 0xde, 0x22, 0xfa, 0x22, 0xac, 0x0f, + 0x2f, 0x8f, 0x9e, 0x1d, 0xbd, 0xb3, 0x7e, 0x79, 0xf4, 0xee, 0xc9, 0xcb, + 0x37, 0xcf, 0x8e, 0xde, 0xd4, 0xad, 0xc5, 0x8c, 0x50, 0x79, 0xfe, 0x70, + 0x4a, 0x25, 0xbe, 0x2c, 0xb8, 0xf5, 0x9c, 0xa5, 0x8e, 0xe1, 0x2b, 0x32, + 0x59, 0x78, 0x70, 0xee, 0x6a, 0x75, 0x4f, 0xa9, 0x6e, 0x4c, 0xeb, 0xc8, + 0x91, 0x7a, 0xb9, 0x20, 0xbd, 0xbc, 0x2b, 0xa2, 0x6a, 0xb8, 0x35, 0x3e, + 0x3c, 0xa4, 0xb5, 0xd2, 0x82, 0xe2, 0x73, 0x11, 0x44, 0xce, 0xa4, 0x74, + 0x45, 0x91, 0x21, 0xa6, 0x2e, 0x74, 0x60, 0x20, 0x9c, 0x99, 0xf5, 0x8a, + 0xbd, 0x43, 0x52, 0x89, 0x43, 0xbd, 0xb2, 0x18, 0x36, 0x48, 0x98, 0x75, + 0x74, 0x24, 0xbc, 0xbf, 0x58, 0x36, 0x85, 0x69, 0xbc, 0x3b, 0x71, 0x84, + 0x45, 0x92, 0xb1, 0x25, 0x2b, 0x8c, 0x8b, 0x65, 0x3e, 0xe2, 0x07, 0xa8, + 0x3d, 0x46, 0x18, 0x6c, 0x5a, 0x60, 0x18, 0x84, 0x42, 0xe0, 0x56, 0xc1, + 0x05, 0x4f, 0x10, 0xc1, 0x73, 0x1d, 0x7c, 0x61, 0xe1, 0x2b, 0x3a, 0xc3, + 0x49, 0x7a, 0x74, 0x53, 0x47, 0x8c, 0x61, 0xaa, 0xe0, 0x66, 0x8d, 0x49, + 0x7f, 0x9f, 0x70, 0x3d, 0x21, 0x86, 0x53, 0xa1, 0x10, 0xd0, 0xdd, 0x65, + 0x75, 0x7c, 0x85, 0x61, 0xca, 0x9d, 0x54, 0x3d, 0xc1, 0x99, 0xe5, 0x3d, + 0x49, 0x6b, 0xbc, 0xf0, 0x4e, 0x49, 0x78, 0x0e, 0xa4, 0xaf, 0x51, 0x7a, + 0x62, 0x3a, 0x53, 0x28, 0x71, 0xe3, 0x2e, 0x7e, 0xd9, 0xa7, 0xd1, 0x02, + 0x7a, 0x83, 0x5f, 0x4f, 0x94, 0x7b, 0x79, 0x86, 0xbc, 0x2f, 0xcd, 0x27, + 0xcd, 0xfc, 0x02, 0xe4, 0x48, 0x2c, 0x59, 0x82, 0x7c, 0x6e, 0x07, 0x03, + 0x51, 0xe4, 0x69, 0x46, 0xc5, 0x8e, 0xe6, 0x3f, 0xff, 0x5e, 0xe6, 0x68, + 0x16, 0xfa, 0x99, 0xc2, 0xf9, 0xe7, 0x9f, 0xcb, 0x3d, 0xcd, 0xc3, 0xd3, + 0x2f, 0x82, 0x7c, 0x8d, 0x00, 0xeb, 0xb3, 0x54, 0x2f, 0xeb, 0x0d, 0x3b, + 0x3b, 0x1e, 0xe8, 0xfd, 0xf3, 0x6f, 0xff, 0xfc, 0xb3, 0x08, 0xca, 0x9c, + 0xce, 0x65, 0x65, 0x4f, 0x5d, 0x7a, 0x0c, 0x56, 0x71, 0x3f, 0x57, 0x5b, + 0x84, 0x9c, 0x07, 0x36, 0xb4, 0x15, 0xaf, 0x6a, 0x0e, 0xcf, 0xfe, 0xf9, + 0x97, 0x29, 0x64, 0xbe, 0x49, 0x17, 0x74, 0xf1, 0xef, 0x5f, 0x87, 0x3c, + 0xf4, 0xbe, 0xd8, 0x53, 0x77, 0xb9, 0x6b, 0xf9, 0x4e, 0x38, 0xe8, 0x1c, + 0x63, 0x1f, 0x5e, 0xd4, 0xcd, 0x5d, 0xd5, 0xe2, 0xe5, 0x48, 0xe1, 0x25, + 0x44, 0x7f, 0x2b, 0x4e, 0xe9, 0x0b, 0xf2, 0x2d, 0xce, 0x9a, 0xab, 0xb8, + 0xa5, 0x3f, 0x83, 0x5b, 0xda, 0x5c, 0xc9, 0x23, 0x7d, 0xc1, 0x2a, 0xbb, + 0xd4, 0x29, 0x7d, 0x19, 0xaf, 0x49, 0x52, 0xaf, 0x4b, 0xd5, 0x6b, 0xe9, + 0xf2, 0xa4, 0x7d, 0xb3, 0xe5, 0xc9, 0x9f, 0xf0, 0x1a, 0xe8, 0x64, 0xc9, + 0xf2, 0xe4, 0x7b, 0xdc, 0x82, 0x7f, 0x8d, 0x47, 0xca, 0xfc, 0xc1, 0x02, + 0x31, 0xe8, 0x32, 0x9f, 0x94, 0xaa, 0x74, 0x66, 0x03, 0xf6, 0x62, 0x9e, + 0xa9, 0x57, 0xde, 0x27, 0xfd, 0x59, 0x20, 0x9c, 0xb0, 0xc8, 0x25, 0x7d, + 0x67, 0x8f, 0xae, 0xf3, 0x48, 0xff, 0xf9, 0xa7, 0x41, 0xc2, 0x25, 0x85, + 0xb7, 0x7c, 0xad, 0x47, 0x0a, 0x6b, 0xfa, 0xd9, 0x59, 0xea, 0x92, 0xe2, + 0x7d, 0xfb, 0x11, 0x00, 0xae, 0x59, 0x9b, 0xd4, 0x0e, 0xd1, 0x32, 0x87, + 0x34, 0x33, 0xa2, 0xe3, 0x3c, 0xa8, 0x03, 0xdb, 0x11, 0x14, 0xfa, 0xa4, + 0x29, 0x50, 0x60, 0xd7, 0xc0, 0xd1, 0xbd, 0x2c, 0x74, 0xe1, 0x78, 0x7b, + 0xac, 0xc0, 0x79, 0xcc, 0x4d, 0xd3, 0x2d, 0x1b, 0x71, 0x57, 0x58, 0xc9, + 0xc4, 0x22, 0xc7, 0x4f, 0xf4, 0x4a, 0xa6, 0x7c, 0x77, 0x02, 0x36, 0xfe, + 0xe5, 0x0e, 0xb8, 0x09, 0x46, 0x36, 0x7b, 0xe0, 0x2f, 0xde, 0x3d, 0x41, + 0x49, 0x7c, 0x6a, 0xb4, 0x2f, 0x9e, 0xbc, 0x43, 0x02, 0x3e, 0x75, 0x02, + 0xda, 0x40, 0xb6, 0x44, 0x9c, 0xf0, 0xe4, 0x05, 0x12, 0xf0, 0xa9, 0x13, + 0x9e, 0xbc, 0xa3, 0x04, 0x7c, 0xc6, 0x09, 0x2f, 0x08, 0x07, 0x3e, 0x75, + 0xc2, 0x07, 0x49, 0x86, 0xbe, 0xe2, 0x24, 0x49, 0x88, 0xbe, 0xe2, 0x24, + 0x49, 0x8a, 0xbe, 0xe2, 0x24, 0x49, 0x8c, 0xbe, 0xe2, 0x24, 0x49, 0x0e, + 0x5f, 0x26, 0x49, 0x12, 0xa4, 0xaf, 0xb8, 0x1a, 0x1f, 0x98, 0x22, 0x7d, + 0x99, 0x24, 0x59, 0xb5, 0x0f, 0x89, 0xba, 0x7d, 0x60, 0x8a, 0xf4, 0x15, + 0xf3, 0xfe, 0x81, 0xd1, 0xd3, 0x97, 0x49, 0x92, 0xf5, 0xf9, 0x90, 0x40, + 0xff, 0xee, 0x03, 0x15, 0xa4, 0x2f, 0x23, 0xb8, 0x0f, 0x04, 0x45, 0x5f, + 0x46, 0x74, 0x0c, 0x45, 0x5f, 0x46, 0x78, 0x1f, 0xa4, 0xf4, 0x3e, 0x24, + 0xc4, 0xc7, 0x49, 0xf4, 0x65, 0x04, 0xc8, 0xb8, 0xe8, 0xcb, 0x50, 0xe4, + 0x1e, 0x41, 0x5f, 0x39, 0x8a, 0xc5, 0x50, 0xa6, 0xb9, 0x28, 0x89, 0xbe, + 0x0c, 0x45, 0x4e, 0xc2, 0x57, 0x61, 0x52, 0x5a, 0x67, 0x4c, 0x5c, 0xb3, + 0xd1, 0x9a, 0x56, 0x0f, 0x1f, 0x95, 0x37, 0x6f, 0xdf, 0xbd, 0x3e, 0x7c, + 0xa5, 0x31, 0xb4, 0x3b, 0x7b, 0x44, 0xe6, 0x08, 0x1e, 0xfc, 0xf1, 0x51, + 0x16, 0x87, 0x89, 0x33, 0x56, 0x48, 0x24, 0x16, 0xc2, 0xf1, 0xe6, 0x28, + 0xc6, 0xb0, 0x8b, 0x04, 0xb2, 0xf3, 0x27, 0xbf, 0x7a, 0x7e, 0x78, 0xfc, + 0x5e, 0x27, 0x77, 0x3b, 0x3a, 0x39, 0x99, 0xba, 0xbd, 0xa7, 0x53, 0x5f, + 0x1f, 0x3d, 0x7b, 0xf9, 0x8b, 0xd7, 0x3a, 0x7d, 0x77, 0x5b, 0xa7, 0x1f, + 0xbf, 0x7a, 0x1b, 0x57, 0x6f, 0xaf, 0x15, 0xa3, 0x4e, 0x26, 0x3f, 0x32, + 0x14, 0x93, 0xe9, 0xed, 0x76, 0x4c, 0xf2, 0xc5, 0xab, 0xc3, 0xa7, 0x2f, + 0x0f, 0x5f, 0xc5, 0xf5, 0x31, 0x35, 0x32, 0x31, 0xc8, 0xb2, 0x4a, 0xa6, + 0x46, 0x16, 0x0f, 0x41, 0x31, 0x69, 0xa4, 0x71, 0x42, 0x56, 0x26, 0x26, + 0x1e, 0x38, 0x8d, 0x00, 0xe3, 0x12, 0x98, 0x87, 0x64, 0x63, 0xd1, 0x76, + 0x64, 0x6a, 0xb6, 0xaa, 0xdb, 0x3a, 0xf9, 0xd5, 0xe1, 0xbb, 0x17, 0x47, + 0xb1, 0x00, 0x74, 0xea, 0xaf, 0x64, 0xb2, 0xe1, 0x9c, 0x02, 0x7a, 0xee, + 0x51, 0x44, 0x8c, 0x99, 0x06, 0xd2, 0x65, 0x76, 0x71, 0x70, 0x42, 0xb5, + 0xe1, 0x38, 0x63, 0xd1, 0x9c, 0x61, 0xc3, 0xe4, 0xf7, 0x61, 0x8d, 0x01, + 0x0b, 0x22, 0xd9, 0xe6, 0x58, 0x45, 0xa6, 0xa0, 0xaf, 0xad, 0x62, 0x24, + 0x89, 0x88, 0x9b, 0x77, 0x09, 0x00, 0xf8, 0x6c, 0xc7, 0x9c, 0xdf, 0x87, + 0x7b, 0xcc, 0xcb, 0x44, 0xd5, 0xda, 0x65, 0x85, 0xf6, 0xe2, 0x69, 0xb6, + 0x80, 0xd0, 0x95, 0x7d, 0x2a, 0x21, 0x4c, 0x6e, 0x54, 0xf7, 0x6a, 0x97, + 0x81, 0x88, 0x16, 0x81, 0x57, 0x15, 0xfd, 0xb7, 0x03, 0xb2, 0x73, 0x4d, + 0xcc, 0x1f, 0x60, 0xe4, 0x22, 0x9f, 0x42, 0xd5, 0xde, 0x8e, 0xff, 0xf8, + 0xc7, 0xcb, 0x93, 0x93, 0x39, 0x3d, 0x9f, 0x9c, 0xf4, 0x3e, 0x7e, 0xba, + 0x22, 0x0b, 0x4a, 0x37, 0x0d, 0x63, 0x6d, 0xf6, 0x90, 0x2e, 0x98, 0x7c, + 0xf0, 0x20, 0xc6, 0x26, 0xea, 0x51, 0xed, 0x52, 0x34, 0x63, 0xf0, 0x7e, + 0x74, 0xf5, 0xc7, 0x3f, 0xa6, 0x73, 0xc7, 0xb8, 0x08, 0x8b, 0x78, 0xf0, + 0xf8, 0x52, 0xf2, 0x5a, 0xd4, 0x9c, 0xda, 0xe1, 0xdb, 0x33, 0x0f, 0xf4, + 0xe6, 0x30, 0xe9, 0x17, 0x55, 0xaf, 0xf6, 0xe0, 0x41, 0x55, 0x7c, 0xf4, + 0x3e, 0xf5, 0x23, 0x7c, 0xd4, 0xae, 0x6a, 0xcc, 0xe2, 0xd5, 0xbe, 0xc2, + 0x82, 0x32, 0x92, 0xe7, 0xf8, 0xd9, 0x47, 0x0d, 0x29, 0xc0, 0xa1, 0x09, + 0x29, 0xa0, 0x92, 0x0b, 0x34, 0x77, 0x00, 0xba, 0x82, 0xc1, 0xea, 0x51, + 0x93, 0x59, 0x51, 0xd7, 0x4e, 0xe3, 0xa2, 0xcb, 0x7e, 0xdf, 0xfb, 0x46, + 0x55, 0x73, 0xc8, 0x0e, 0x36, 0x28, 0xf6, 0xaa, 0x7e, 0x12, 0xcc, 0xfc, + 0xae, 0xe3, 0x02, 0x35, 0xcb, 0xaf, 0x5d, 0x31, 0xc3, 0x46, 0x68, 0x5a, + 0x62, 0x56, 0xb2, 0x6a, 0x8a, 0x0b, 0x15, 0x56, 0x18, 0xd5, 0xf9, 0x89, + 0x11, 0x8a, 0xab, 0xab, 0x6a, 0xad, 0xee, 0xf7, 0x0d, 0x74, 0x82, 0x7d, + 0xd5, 0x04, 0x44, 0xc1, 0xef, 0x8b, 0xe6, 0x10, 0xef, 0xbf, 0xab, 0x52, + 0xd1, 0x7a, 0x85, 0xe7, 0x68, 0x15, 0x64, 0xfe, 0xf1, 0x8f, 0x94, 0xb0, + 0xaf, 0x68, 0xfa, 0x4d, 0xb5, 0x1a, 0xdc, 0x8f, 0xf4, 0xaf, 0xba, 0xdf, + 0x64, 0x60, 0x50, 0xf5, 0xaf, 0x14, 0x58, 0x54, 0xf5, 0xea, 0xa2, 0x56, + 0xf7, 0xae, 0x50, 0xbf, 0x7a, 0xb0, 0x84, 0x76, 0xdd, 0x07, 0x75, 0x1f, + 0x41, 0xb1, 0x2d, 0xc8, 0x26, 0x82, 0xf0, 0xa3, 0x7e, 0x5b, 0x74, 0x6b, + 0xf5, 0x38, 0xcd, 0x43, 0x1a, 0x82, 0x0e, 0x2b, 0x35, 0xd6, 0x9d, 0x20, + 0xcd, 0xe4, 0xd0, 0xf5, 0x43, 0xcc, 0x8b, 0xfc, 0x0c, 0x93, 0x41, 0x13, + 0x13, 0xbf, 0xa7, 0xd8, 0x1f, 0xf4, 0xfa, 0xf7, 0x5a, 0xf5, 0x00, 0x6d, + 0x33, 0x02, 0xbf, 0xf8, 0x01, 0x91, 0x87, 0xbe, 0xd7, 0xf7, 0xea, 0x41, + 0x21, 0xa3, 0x4e, 0x52, 0xc8, 0xce, 0xb8, 0x0a, 0xbf, 0x9e, 0x23, 0xe2, + 0xb0, 0x39, 0x79, 0xaf, 0x0f, 0x61, 0x92, 0xd2, 0xc5, 0x3a, 0x5e, 0x93, + 0x18, 0x4c, 0xc2, 0x55, 0x3d, 0xec, 0x5f, 0xe2, 0x30, 0x8d, 0xea, 0x11, + 0x8c, 0xe7, 0x99, 0xa0, 0x53, 0xc8, 0x6d, 0xb1, 0x5d, 0x47, 0x87, 0x2b, + 0xca, 0xe8, 0xfe, 0x70, 0x5b, 0x74, 0x7f, 0xf0, 0xda, 0x8e, 0xa6, 0x4d, + 0xb8, 0x51, 0x23, 0x7f, 0x56, 0xad, 0x11, 0xe8, 0x2f, 0xe6, 0x14, 0x86, + 0xd5, 0xdb, 0x11, 0xdd, 0x7a, 0x90, 0x2d, 0xf5, 0x02, 0x73, 0xc9, 0xe7, + 0x36, 0x29, 0x5a, 0xaf, 0xdd, 0xec, 0xd6, 0x4d, 0xee, 0x7b, 0x14, 0xc1, + 0x8a, 0x58, 0x6f, 0x1b, 0xa5, 0x98, 0x8f, 0x28, 0xa0, 0x15, 0xe2, 0xf6, + 0x56, 0xab, 0x3e, 0x12, 0x83, 0xc5, 0xa4, 0x77, 0xaf, 0x7d, 0xb5, 0x9f, + 0xd5, 0x9d, 0x44, 0x83, 0x08, 0x28, 0x12, 0xab, 0x43, 0x46, 0xf8, 0x97, + 0x57, 0x52, 0xf8, 0x7e, 0x9f, 0x85, 0xcc, 0xaa, 0x75, 0xe2, 0x3a, 0xe4, + 0x95, 0x8a, 0x00, 0x75, 0xe6, 0xd6, 0x47, 0xdf, 0xac, 0x2b, 0x85, 0xa0, + 0x9f, 0x14, 0x6d, 0x4a, 0xdf, 0xdc, 0x42, 0xd4, 0x6f, 0xeb, 0xb2, 0x18, + 0xc8, 0x07, 0x17, 0x3c, 0x7b, 0x41, 0x8c, 0xa6, 0x4a, 0x0b, 0xa7, 0x14, + 0xb6, 0x16, 0x4b, 0x07, 0x6d, 0xa6, 0x32, 0x54, 0xc2, 0x2b, 0x88, 0xb7, + 0x7f, 0x4f, 0x43, 0x0f, 0xb0, 0x50, 0x17, 0x5c, 0xbc, 0x97, 0x71, 0xac, + 0xae, 0x3f, 0xa8, 0xa8, 0x74, 0xa6, 0xf4, 0x14, 0xba, 0x21, 0x46, 0x06, + 0x58, 0x71, 0xf4, 0xf3, 0x85, 0x40, 0xec, 0xf9, 0xc7, 0x4f, 0x32, 0xd5, + 0xf7, 0x18, 0xb6, 0x2f, 0xab, 0xa9, 0xd3, 0xb8, 0x16, 0x99, 0x34, 0x55, + 0x3c, 0x93, 0x4a, 0x75, 0x4b, 0x25, 0x9d, 0x4c, 0xd1, 0x74, 0xae, 0x78, + 0x8b, 0xf4, 0x94, 0xaa, 0xfb, 0xcd, 0x13, 0x16, 0x7c, 0xb5, 0x42, 0x45, + 0x2c, 0xbe, 0x81, 0x4f, 0x29, 0x72, 0xd4, 0x47, 0xa6, 0x2f, 0xa7, 0x52, + 0xcd, 0xb8, 0xc1, 0xeb, 0xc0, 0x1b, 0x77, 0x86, 0x6f, 0x12, 0x19, 0xbd, + 0x68, 0x7f, 0x08, 0x7d, 0x0e, 0x54, 0x13, 0x57, 0xfd, 0x58, 0x38, 0x2a, + 0xa5, 0x56, 0x47, 0xd2, 0x82, 0x61, 0x55, 0x4a, 0x1f, 0x76, 0x54, 0x83, + 0xe7, 0x6d, 0x07, 0xa0, 0x71, 0x83, 0x2f, 0xe6, 0xe6, 0x60, 0x1a, 0xc9, + 0x57, 0x75, 0x8f, 0x31, 0x9c, 0x85, 0xcd, 0x84, 0x7c, 0x91, 0x60, 0x9e, + 0x90, 0x9d, 0x12, 0x67, 0x13, 0xb6, 0xf4, 0x08, 0x73, 0x6e, 0x83, 0x5c, + 0xc4, 0xd8, 0x25, 0xa6, 0x10, 0x77, 0xcb, 0x21, 0xf1, 0x0a, 0x98, 0xf3, + 0x2d, 0xe1, 0x2b, 0x41, 0x3e, 0x78, 0xa0, 0x7e, 0x51, 0x79, 0xa4, 0x1a, + 0xc5, 0x6a, 0x52, 0x62, 0x9e, 0x4a, 0x94, 0xa4, 0x42, 0xb6, 0xe0, 0x88, + 0xc4, 0xfa, 0x4a, 0x95, 0x22, 0x15, 0x06, 0xc5, 0xab, 0x54, 0xc3, 0xa8, + 0x15, 0x84, 0x92, 0xb6, 0x51, 0x9c, 0xe9, 0xe6, 0x61, 0xce, 0x54, 0x1a, + 0x98, 0x33, 0x0f, 0x39, 0xfe, 0x54, 0xfa, 0xad, 0xb0, 0xc8, 0x73, 0x87, + 0x12, 0x06, 0x59, 0x33, 0x15, 0x7b, 0x75, 0xa1, 0xc8, 0x4a, 0x66, 0xcc, + 0x6a, 0x70, 0x55, 0x29, 0x64, 0xe5, 0xfd, 0xcb, 0xd7, 0x47, 0x6f, 0x7f, + 0xf1, 0xbe, 0x02, 0x15, 0x8a, 0x61, 0xbf, 0xa9, 0x44, 0x52, 0x13, 0x2a, + 0x3d, 0x09, 0x26, 0x6b, 0xc9, 0x88, 0x1f, 0x3c, 0x88, 0x7f, 0x72, 0x0d, + 0x0d, 0xd9, 0x73, 0x31, 0xb4, 0x24, 0xed, 0xb8, 0xce, 0x95, 0x8c, 0x08, + 0x38, 0xfb, 0x86, 0x02, 0x20, 0x4c, 0x9a, 0xf9, 0x8c, 0x34, 0x9e, 0xa2, + 0x7f, 0x96, 0x35, 0x17, 0xf5, 0xdd, 0x64, 0x63, 0x9d, 0x24, 0x3b, 0x46, + 0x48, 0x43, 0x5d, 0xce, 0xa2, 0xa0, 0x8a, 0x86, 0x94, 0xac, 0x3a, 0x63, + 0x41, 0xba, 0xfa, 0x99, 0x6f, 0x5c, 0x4a, 0xfd, 0xda, 0xa6, 0x5d, 0x04, + 0x6e, 0x5f, 0xa8, 0xdf, 0x3c, 0xaa, 0x63, 0xde, 0x1e, 0xaa, 0xc1, 0x39, + 0xee, 0xfd, 0x7d, 0x4f, 0x3d, 0x1b, 0x59, 0x28, 0x0a, 0xca, 0x51, 0x90, + 0x43, 0x90, 0x76, 0x51, 0x40, 0xa2, 0xa2, 0x42, 0x71, 0x5f, 0xbe, 0xc1, + 0x5c, 0xe2, 0x12, 0xe3, 0x7d, 0x2f, 0xdf, 0xbf, 0x5b, 0x57, 0x75, 0xac, + 0xb9, 0x63, 0xa9, 0x8d, 0x26, 0xda, 0x3d, 0x58, 0x54, 0x60, 0x1f, 0x3b, + 0x93, 0x85, 0x7e, 0x86, 0xf8, 0x4b, 0xd1, 0xbf, 0xfd, 0xf6, 0xe8, 0x4d, + 0x29, 0xe2, 0xf6, 0x57, 0x20, 0x7e, 0xfa, 0xea, 0xed, 0xf1, 0x32, 0xa6, + 0x3b, 0x5f, 0x89, 0xfb, 0xe8, 0x59, 0x29, 0xea, 0xee, 0x8d, 0x51, 0xc7, + 0xfe, 0xd8, 0x6a, 0x82, 0x17, 0x4d, 0x03, 0x74, 0x2b, 0x34, 0xa9, 0x35, + 0x96, 0x50, 0xa3, 0xec, 0x5b, 0xa1, 0xa3, 0x1a, 0x67, 0x09, 0x29, 0x82, + 0xb8, 0xad, 0x5a, 0xc9, 0xe6, 0x5a, 0x42, 0x4c, 0x02, 0xdc, 0x0a, 0x2d, + 0x33, 0x86, 0x95, 0xd2, 0x93, 0x3d, 0xf0, 0x2c, 0xfc, 0x86, 0x7e, 0x64, + 0x86, 0xc1, 0x5e, 0xd6, 0xef, 0x80, 0xa3, 0xc7, 0x48, 0x8c, 0x75, 0xca, + 0x42, 0xa0, 0xd7, 0x6b, 0x44, 0xe4, 0xd2, 0x1a, 0x9c, 0x06, 0xa0, 0x76, + 0x2b, 0x55, 0x33, 0xee, 0x54, 0x69, 0xd5, 0xd8, 0xb7, 0x84, 0x3b, 0x58, + 0xcd, 0x3a, 0x60, 0xf5, 0xd6, 0xed, 0xf0, 0x30, 0x58, 0x60, 0x89, 0x0f, + 0x1b, 0x12, 0x87, 0xb3, 0xa5, 0x7c, 0xe4, 0x1d, 0xb2, 0x26, 0x0a, 0x2d, + 0x86, 0xa2, 0x9a, 0x9c, 0xc7, 0x68, 0xf0, 0x8a, 0xdc, 0x5f, 0xaa, 0xf4, + 0xb5, 0xdf, 0x1d, 0x7d, 0x23, 0x7e, 0x88, 0x39, 0x07, 0x56, 0x2b, 0x27, + 0x38, 0x1f, 0x17, 0x59, 0x89, 0x79, 0xe0, 0x13, 0x78, 0x81, 0x32, 0x97, + 0xef, 0xa2, 0xe1, 0x5f, 0x83, 0x8b, 0x48, 0xbc, 0x62, 0xd8, 0xba, 0xb8, + 0x42, 0x4d, 0x7f, 0x58, 0xcd, 0x37, 0x71, 0x9a, 0xf1, 0xde, 0x2d, 0x89, + 0x43, 0x9c, 0x63, 0x28, 0x08, 0xc9, 0xb2, 0xaf, 0xa1, 0x6d, 0xa6, 0x50, + 0xaf, 0x52, 0xb9, 0x15, 0x36, 0xf4, 0x78, 0xb3, 0x06, 0x13, 0xba, 0xc8, + 0x6d, 0xb1, 0x10, 0xd0, 0x0e, 0xe5, 0x31, 0x5e, 0x9b, 0xbb, 0x4e, 0xbf, + 0x33, 0x85, 0x7a, 0xb7, 0x6e, 0x4a, 0x17, 0xc1, 0x3a, 0xe2, 0x58, 0x04, + 0xab, 0x49, 0x22, 0x41, 0xa2, 0x29, 0x27, 0x16, 0x29, 0x85, 0x36, 0xb3, + 0x29, 0x41, 0x6b, 0x0b, 0x3c, 0xbd, 0x2d, 0x9a, 0xb2, 0xb4, 0x8a, 0x67, + 0x43, 0x7a, 0x2e, 0x93, 0xf7, 0x73, 0x96, 0xc9, 0x0e, 0x47, 0xe0, 0x28, + 0x55, 0x59, 0x51, 0x03, 0xc1, 0x14, 0x99, 0x2d, 0xb6, 0x6a, 0x69, 0xa7, + 0xaa, 0x87, 0x37, 0x47, 0x30, 0x0a, 0x8b, 0x1f, 0x47, 0x95, 0x22, 0x20, + 0x1c, 0x27, 0xf8, 0x03, 0x75, 0xde, 0x11, 0x1d, 0xe0, 0xc6, 0x8e, 0x5d, + 0xdc, 0x11, 0x2b, 0xb5, 0xab, 0x94, 0x28, 0xe2, 0x79, 0x6b, 0x46, 0x1c, + 0xcb, 0xe7, 0x7c, 0xf9, 0x69, 0x5c, 0x7e, 0xd6, 0x68, 0x4c, 0xeb, 0xf5, + 0x35, 0x57, 0xdd, 0xde, 0xf8, 0xc9, 0xcc, 0x44, 0xd6, 0xe3, 0x92, 0x15, + 0x35, 0x09, 0xe9, 0xaa, 0xf0, 0x44, 0x26, 0xe5, 0x8d, 0x2e, 0xe5, 0xa0, + 0x2f, 0x39, 0xe0, 0x91, 0x99, 0xe9, 0x1b, 0x09, 0x12, 0x22, 0xb8, 0xf0, + 0x8a, 0xbe, 0x99, 0x23, 0x81, 0x81, 0x34, 0xa0, 0x12, 0xb2, 0x84, 0xcd, + 0x1b, 0xce, 0xf9, 0x22, 0x9c, 0xa2, 0x54, 0x86, 0x4d, 0x1c, 0xd5, 0x4b, + 0x79, 0xa3, 0x19, 0xc1, 0x67, 0xe6, 0xed, 0x1f, 0xc5, 0xa7, 0x07, 0x0f, + 0xf2, 0x69, 0x12, 0x77, 0x94, 0x6b, 0x4c, 0xba, 0x52, 0x7e, 0x5d, 0xec, + 0xd5, 0x7c, 0x62, 0xbf, 0x80, 0x22, 0x5e, 0x01, 0x83, 0x8d, 0x9d, 0xa2, + 0x79, 0x24, 0xb7, 0xe6, 0x55, 0xa6, 0x9e, 0x4a, 0x48, 0x86, 0xbe, 0x59, + 0xd6, 0x93, 0x73, 0xfc, 0x7e, 0x6b, 0x3f, 0x7a, 0x8c, 0x85, 0x30, 0x3e, + 0x44, 0x19, 0xaa, 0x21, 0x63, 0x3f, 0xfa, 0xe1, 0x0f, 0x6b, 0xe2, 0x63, + 0xf4, 0xa9, 0x1f, 0xe7, 0xe0, 0x61, 0x3f, 0xe5, 0x8a, 0x37, 0x19, 0xf1, + 0x83, 0x07, 0x89, 0xa3, 0x9f, 0x74, 0x72, 0xd4, 0xbd, 0xa8, 0xaa, 0x94, + 0xfa, 0x47, 0x6c, 0x23, 0x1c, 0x1f, 0x54, 0x3e, 0xd1, 0x72, 0xdf, 0xd0, + 0x8e, 0xf2, 0x6d, 0x70, 0x02, 0xeb, 0xf2, 0x06, 0xd6, 0x9c, 0x57, 0x6a, + 0x92, 0x2c, 0x4a, 0xf6, 0x52, 0xe4, 0xc0, 0xa9, 0x68, 0x2e, 0x59, 0xde, + 0xc9, 0xae, 0x06, 0x2c, 0x5b, 0x09, 0xc2, 0xda, 0x1b, 0x90, 0x15, 0x2d, + 0x32, 0xd5, 0x03, 0x83, 0xc5, 0x07, 0x96, 0xc2, 0x85, 0x28, 0xbf, 0xee, + 0x50, 0x71, 0xfb, 0x3c, 0x5f, 0x7c, 0x68, 0x8a, 0x3b, 0x28, 0x5e, 0xb8, + 0xc0, 0xe5, 0xd4, 0x17, 0xfd, 0x40, 0x2f, 0x2d, 0x65, 0xbb, 0xec, 0x41, + 0x0b, 0x9a, 0x80, 0x7c, 0xb9, 0xca, 0x35, 0xf7, 0xcf, 0xaa, 0x5e, 0xae, + 0x5b, 0x37, 0xda, 0xb5, 0xda, 0xc1, 0x90, 0xe1, 0x86, 0xb5, 0x7a, 0xaa, + 0x2b, 0x78, 0xf4, 0xfa, 0x9b, 0x11, 0x91, 0xa9, 0xd4, 0x17, 0xb5, 0xfa, + 0x22, 0x23, 0xef, 0x33, 0xdb, 0x89, 0x8a, 0xe5, 0xac, 0xf9, 0xa1, 0x55, + 0x54, 0x8c, 0x07, 0x88, 0x16, 0x16, 0xa9, 0x79, 0x5c, 0x62, 0x7d, 0x24, + 0xaa, 0x67, 0x5a, 0xae, 0x8a, 0x76, 0x2d, 0x69, 0xd9, 0x5f, 0x04, 0x6e, + 0x42, 0xf5, 0x79, 0x9d, 0x30, 0xe7, 0xac, 0x08, 0xb5, 0x38, 0xa8, 0xe8, + 0x52, 0x2b, 0x43, 0x7d, 0x3e, 0xd3, 0x2c, 0x73, 0x9f, 0xe0, 0x75, 0xf9, + 0x44, 0x09, 0xc9, 0x39, 0x34, 0xa2, 0xca, 0x20, 0x79, 0xff, 0xa7, 0x0c, + 0x65, 0xc4, 0xf0, 0x51, 0x33, 0xc2, 0xce, 0xa1, 0x86, 0x89, 0xae, 0xa2, + 0x29, 0xdd, 0x02, 0x72, 0xc4, 0xb3, 0x7a, 0x6c, 0x69, 0x7f, 0xb6, 0xe9, + 0xe2, 0x81, 0x5f, 0xbc, 0x7b, 0x95, 0xb1, 0xd2, 0xda, 0xe4, 0x95, 0x88, + 0x90, 0x30, 0xdf, 0xcb, 0xad, 0xc5, 0x3d, 0x78, 0x50, 0x68, 0xc3, 0x6b, + 0x97, 0x05, 0xab, 0x76, 0x2d, 0xb9, 0xda, 0x95, 0x51, 0x7c, 0x0f, 0x1e, + 0x9a, 0x59, 0xa1, 0x84, 0xea, 0x9a, 0x15, 0xc7, 0x6f, 0xc2, 0x44, 0x4e, + 0x0f, 0x2b, 0xb5, 0x00, 0xcd, 0x2d, 0x71, 0x26, 0x95, 0x32, 0x40, 0x89, + 0xfc, 0x1a, 0x68, 0x50, 0x5f, 0xa0, 0x60, 0xbc, 0x36, 0x5b, 0xb7, 0x4d, + 0x81, 0xc5, 0x37, 0x4e, 0xb5, 0xd6, 0x5b, 0x50, 0xdd, 0x72, 0xaa, 0xda, + 0xf7, 0x6b, 0x29, 0xe5, 0x03, 0x2b, 0x56, 0x20, 0x79, 0xc1, 0x37, 0x45, + 0x98, 0xc0, 0x7e, 0xe7, 0x1c, 0xe9, 0xca, 0x41, 0x9f, 0x16, 0xa1, 0xf7, + 0xf1, 0x4e, 0x52, 0x71, 0x59, 0x80, 0xf6, 0x87, 0x3f, 0x4c, 0xab, 0xb4, + 0x62, 0x37, 0x8f, 0x49, 0xab, 0xbe, 0x34, 0xb7, 0xda, 0xd2, 0xd2, 0x60, + 0x1f, 0xab, 0x4c, 0xbc, 0x12, 0x5d, 0x9d, 0xf6, 0x6d, 0xac, 0x7b, 0x77, + 0x60, 0x22, 0xa7, 0x7a, 0x6a, 0x56, 0x4b, 0x35, 0xfb, 0x1b, 0xdf, 0x92, + 0xed, 0x1e, 0x8b, 0x41, 0x9e, 0xda, 0xa7, 0x1d, 0xe5, 0xcf, 0x0e, 0xc2, + 0xb2, 0xd4, 0x5a, 0xe4, 0x94, 0xad, 0xa0, 0xec, 0x4a, 0xd5, 0x1a, 0x2b, + 0x52, 0xc1, 0x8a, 0x61, 0xaa, 0x07, 0x54, 0x05, 0xaf, 0x6e, 0xd4, 0xae, + 0xb2, 0xe0, 0xb4, 0x03, 0x93, 0x1a, 0xc4, 0xbf, 0x11, 0xd9, 0x75, 0xdc, + 0x1e, 0x0a, 0xe7, 0x24, 0x71, 0x09, 0x6c, 0x30, 0x62, 0xf1, 0x2a, 0x49, + 0x0f, 0x30, 0xf1, 0x03, 0x39, 0x59, 0x34, 0x5a, 0xf6, 0x93, 0x89, 0xdf, + 0x50, 0xbf, 0xb6, 0xb9, 0xeb, 0x9a, 0xc4, 0x5a, 0x4f, 0xa5, 0xa2, 0x44, + 0x6e, 0xca, 0x95, 0x5a, 0xcd, 0xcc, 0xb1, 0x45, 0x29, 0x18, 0x41, 0x93, + 0x42, 0x37, 0x30, 0x2b, 0xad, 0xa9, 0x0a, 0xbd, 0x7c, 0xa5, 0x41, 0xd0, + 0xd7, 0x86, 0x6c, 0x48, 0xae, 0x92, 0x9d, 0x2e, 0x03, 0x96, 0xea, 0x7a, + 0x49, 0x35, 0xd1, 0x6b, 0x76, 0x7a, 0xad, 0x2b, 0xbf, 0x5e, 0x58, 0xe5, + 0x0d, 0xa2, 0xaa, 0xfc, 0xad, 0x17, 0xfe, 0x14, 0x60, 0x7e, 0xd0, 0x74, + 0xc2, 0x42, 0x87, 0x8c, 0x14, 0xb6, 0xc0, 0x45, 0xbd, 0xc6, 0xe9, 0x54, + 0xac, 0xe6, 0x35, 0x75, 0x1f, 0xba, 0x7c, 0x59, 0xe0, 0x6f, 0xe6, 0xd7, + 0xf7, 0x98, 0x7b, 0x5e, 0x32, 0xd3, 0x0c, 0x63, 0x44, 0x1d, 0x4e, 0xc9, + 0xa6, 0xe6, 0x04, 0x66, 0xd6, 0xaa, 0x4b, 0xa5, 0x25, 0x41, 0x2c, 0xbe, + 0xe6, 0xa2, 0x96, 0xf7, 0x1b, 0x5b, 0x69, 0x8c, 0xf9, 0xb5, 0xbb, 0x8c, + 0x54, 0x2a, 0x4a, 0xce, 0x2c, 0x7b, 0xda, 0x2c, 0xfc, 0x26, 0x6a, 0x26, + 0x92, 0xc0, 0x65, 0x8f, 0x3e, 0x52, 0x58, 0x73, 0xe2, 0xc8, 0x32, 0x6b, + 0x16, 0x04, 0x0c, 0xdf, 0x99, 0x22, 0x15, 0x23, 0xe3, 0x22, 0xaf, 0x4b, + 0x6e, 0x25, 0x54, 0x72, 0xfb, 0x0e, 0xd7, 0x94, 0x52, 0x3b, 0x65, 0xf9, + 0x46, 0xb8, 0xa6, 0x5c, 0x7c, 0xc3, 0x79, 0xc1, 0x7a, 0xfa, 0xb5, 0x65, + 0xe5, 0x16, 0x62, 0x5e, 0x6d, 0xd3, 0xaa, 0x29, 0xbb, 0xdd, 0x5a, 0x22, + 0x93, 0xf0, 0x79, 0x79, 0x21, 0x7d, 0x5d, 0x61, 0xa1, 0xc8, 0xfa, 0x92, + 0x42, 0xa1, 0x9b, 0x89, 0x09, 0x05, 0x6f, 0x2a, 0xa3, 0x64, 0x47, 0x4c, + 0x09, 0x29, 0x99, 0xc1, 0x62, 0xca, 0x6f, 0x0d, 0xe5, 0x40, 0x32, 0x5b, + 0x45, 0x44, 0x0b, 0x9b, 0xc4, 0xf8, 0x3f, 0x0e, 0x5d, 0xa0, 0x2b, 0x5f, + 0x11, 0xb1, 0x80, 0x63, 0x5a, 0x78, 0xe7, 0x2d, 0x1c, 0xe1, 0x21, 0x87, + 0x0a, 0x37, 0xf5, 0x5d, 0xb8, 0x80, 0xa3, 0xcb, 0x58, 0x24, 0x54, 0xbf, + 0x6f, 0x55, 0x08, 0xc2, 0xa5, 0xc7, 0x0a, 0x5d, 0xbc, 0x62, 0xd2, 0x2b, + 0xfa, 0x5e, 0x15, 0x8d, 0xb1, 0xd2, 0x7e, 0xd4, 0x69, 0xb6, 0x77, 0xf7, + 0x9a, 0xed, 0x0e, 0xde, 0xe5, 0xdc, 0xee, 0x56, 0xe4, 0x5b, 0x49, 0x79, + 0xfb, 0x1c, 0xd3, 0x49, 0x1a, 0x55, 0x08, 0xea, 0x8c, 0x02, 0x12, 0x2a, + 0xd6, 0x0f, 0xb9, 0x18, 0xbe, 0x2a, 0xbd, 0xbd, 0x76, 0x45, 0x73, 0x17, + 0x9f, 0x02, 0x35, 0x31, 0x15, 0xae, 0xcd, 0x51, 0xc3, 0x26, 0x7c, 0x2c, + 0xa2, 0x13, 0xc3, 0x27, 0x63, 0x19, 0x81, 0x77, 0xff, 0x39, 0xff, 0xa5, + 0xf3, 0x74, 0x70, 0x2d, 0xbf, 0x30, 0x3a, 0x9b, 0x39, 0x90, 0xd1, 0x79, + 0xea, 0x55, 0xde, 0x99, 0xbc, 0xc8, 0x93, 0xc5, 0xf6, 0x5a, 0x4f, 0x5b, + 0xb9, 0x2c, 0x04, 0x7d, 0x48, 0x8a, 0xc0, 0x1a, 0xe7, 0x7e, 0x76, 0x42, + 0x67, 0xe0, 0xb8, 0x4e, 0x84, 0x88, 0xed, 0x8f, 0x9f, 0x64, 0xa2, 0x3a, + 0x1d, 0x7c, 0x42, 0xed, 0x4b, 0xe1, 0x6d, 0xfa, 0xd4, 0x6f, 0x1c, 0xf8, + 0x76, 0xe2, 0xa9, 0xc8, 0x37, 0x0e, 0xef, 0x90, 0x35, 0x97, 0xcb, 0x0f, + 0xa6, 0xde, 0x53, 0x13, 0xd2, 0xaa, 0xcb, 0xc6, 0x57, 0xf6, 0x66, 0xd3, + 0xe6, 0x1c, 0xac, 0xda, 0x52, 0x49, 0xf1, 0x4d, 0xae, 0x39, 0x30, 0xb8, + 0x08, 0x26, 0x8d, 0xda, 0x64, 0xe8, 0x51, 0x39, 0xf3, 0x4c, 0xd1, 0x65, + 0x69, 0x08, 0x5c, 0x18, 0x99, 0x82, 0x18, 0x9f, 0xfb, 0xf3, 0x44, 0x19, + 0xe1, 0xd1, 0x72, 0x09, 0x95, 0x3b, 0xeb, 0xe1, 0xdc, 0x1d, 0xdc, 0x24, + 0x64, 0x94, 0xc4, 0x0e, 0xd2, 0xf5, 0x42, 0xa6, 0xbe, 0xb8, 0xba, 0xc1, + 0x84, 0xde, 0xf0, 0x41, 0x46, 0x83, 0x55, 0x35, 0xe0, 0xe5, 0x59, 0x0f, + 0xaf, 0x07, 0x0e, 0xe8, 0x63, 0x42, 0x1f, 0x03, 0xfa, 0x98, 0x8a, 0xf3, + 0x5e, 0xa5, 0xa5, 0xfe, 0x10, 0xbf, 0x7e, 0xd6, 0x61, 0x20, 0xfe, 0x9c, + 0xf0, 0xe7, 0xa0, 0xa3, 0xe0, 0x3a, 0x69, 0xc0, 0x2e, 0x03, 0xf2, 0xe7, + 0x84, 0x3f, 0x07, 0x5d, 0x05, 0xd8, 0x4d, 0x00, 0xea, 0x33, 0x22, 0xf2, + 0xbd, 0x1d, 0x1e, 0x47, 0x3b, 0x43, 0xb3, 0x55, 0x2a, 0xbf, 0x61, 0x82, + 0x13, 0x62, 0x91, 0x74, 0xf6, 0xda, 0x9d, 0xf1, 0xf9, 0x89, 0xac, 0x01, + 0xc5, 0x82, 0x24, 0x2b, 0x71, 0x82, 0x25, 0x26, 0x80, 0xd7, 0x4d, 0x2d, + 0xc3, 0x84, 0x9e, 0x18, 0xef, 0x36, 0x55, 0xd2, 0xbc, 0x07, 0xf0, 0xc4, + 0x40, 0x24, 0xcb, 0x01, 0xe9, 0x49, 0x31, 0x90, 0x91, 0xa1, 0x13, 0xea, + 0x74, 0x31, 0x4a, 0x37, 0x0d, 0xe2, 0xd2, 0x31, 0xc5, 0x98, 0x9e, 0x70, + 0x7c, 0x2a, 0xfc, 0x48, 0x53, 0x86, 0xae, 0x08, 0x92, 0xed, 0x94, 0xaa, + 0x83, 0x8c, 0xea, 0x8c, 0xd1, 0x98, 0x36, 0xa4, 0x35, 0x8e, 0x97, 0xd1, + 0x3e, 0x9f, 0x21, 0xa0, 0x17, 0x84, 0xd0, 0xdd, 0x31, 0xf3, 0x80, 0xbc, + 0x1a, 0x3a, 0x1f, 0x10, 0x85, 0x38, 0x67, 0xc9, 0x30, 0xe8, 0xd1, 0x26, + 0x7a, 0xe9, 0x97, 0x38, 0xbd, 0xea, 0xba, 0xb6, 0xf5, 0xd3, 0x90, 0x82, + 0x13, 0xd5, 0xab, 0xac, 0x8f, 0xd5, 0xcb, 0xb8, 0x06, 0x17, 0xd6, 0x0b, + 0x24, 0x4c, 0x6c, 0xeb, 0x97, 0x0e, 0xce, 0x8b, 0xf8, 0xdf, 0xfd, 0x0e, + 0x85, 0x23, 0x01, 0xbf, 0x3c, 0x9f, 0x34, 0xb2, 0xb0, 0x7a, 0x12, 0x5c, + 0x1c, 0xcb, 0xf0, 0xab, 0xe0, 0xbb, 0xdf, 0x89, 0x43, 0x1c, 0xfe, 0x10, + 0x56, 0x43, 0x4e, 0x3d, 0x72, 0x6b, 0x4a, 0xa7, 0xa4, 0xf3, 0x66, 0x2e, + 0x5d, 0x4a, 0x15, 0x35, 0xd0, 0xd2, 0x4c, 0x31, 0x11, 0x99, 0x46, 0x6c, + 0xc9, 0xb7, 0x98, 0xe3, 0xae, 0x24, 0x17, 0xbe, 0x75, 0x00, 0xba, 0x7d, + 0xa2, 0xf0, 0xf0, 0x3e, 0x7e, 0x3e, 0xac, 0xd5, 0x65, 0x40, 0xbe, 0x4e, + 0xe3, 0x07, 0xa4, 0x72, 0x34, 0xbe, 0x4e, 0xa4, 0xdf, 0x48, 0xe3, 0x50, + 0xfc, 0x38, 0x91, 0x1e, 0x28, 0x55, 0x29, 0x97, 0x4e, 0x96, 0x4f, 0x48, + 0x97, 0xea, 0xa5, 0x93, 0xf1, 0x40, 0xd4, 0xf6, 0xad, 0x98, 0xb7, 0x88, + 0x5a, 0x3e, 0xcb, 0x1a, 0x02, 0xef, 0x7f, 0x69, 0xbb, 0xba, 0x90, 0x4c, + 0x88, 0x79, 0x4c, 0x67, 0xea, 0x24, 0xcd, 0x6c, 0x3a, 0x57, 0xa5, 0x68, + 0xae, 0x33, 0xb9, 0x3a, 0xc9, 0xb0, 0x9f, 0xce, 0x8f, 0xd3, 0xe2, 0x7a, + 0xa4, 0xf3, 0x75, 0x12, 0x2a, 0x94, 0x90, 0xb5, 0x6a, 0xfe, 0x67, 0xf2, + 0xb6, 0x2b, 0xae, 0x93, 0x54, 0x3a, 0x95, 0xa2, 0x4b, 0xa7, 0xde, 0x95, + 0x96, 0x46, 0x21, 0xdf, 0xa1, 0x6e, 0xe4, 0xf1, 0x6a, 0xa0, 0x69, 0x9a, + 0x97, 0xab, 0x23, 0xf9, 0x53, 0x2c, 0x93, 0x22, 0x00, 0xce, 0xf8, 0xa4, + 0xe5, 0x52, 0x04, 0x41, 0xe9, 0x9f, 0xb4, 0x6c, 0x0a, 0x21, 0x38, 0xe3, + 0x93, 0x91, 0x4f, 0x11, 0x8c, 0xcc, 0x01, 0xd0, 0xbe, 0x52, 0x39, 0x55, + 0x25, 0x75, 0x4d, 0x86, 0x51, 0x68, 0x9d, 0xf1, 0x94, 0xd3, 0xab, 0xb6, + 0x0b, 0x5c, 0xb2, 0xfb, 0xc5, 0xe3, 0x2e, 0x8d, 0xd3, 0xf7, 0x90, 0xc1, + 0x09, 0x2b, 0x5c, 0x31, 0x26, 0xdf, 0x17, 0x88, 0xa1, 0x97, 0x6d, 0x6f, + 0x33, 0xb6, 0x4f, 0xfa, 0xca, 0x31, 0xf3, 0xce, 0x79, 0x26, 0x0a, 0x7a, + 0xbf, 0x83, 0x5d, 0xaf, 0x7e, 0xef, 0x12, 0xd2, 0x6b, 0xf2, 0x25, 0x8f, + 0x57, 0x75, 0xeb, 0x7b, 0x97, 0x2c, 0xaa, 0xc4, 0x33, 0x09, 0x46, 0x3d, + 0xd6, 0x7e, 0xb7, 0xbf, 0x2a, 0x27, 0x78, 0x5b, 0x60, 0x11, 0x27, 0x0e, + 0x2c, 0x56, 0xf0, 0x93, 0xf7, 0xaf, 0x5f, 0x91, 0xab, 0x70, 0x9f, 0x20, + 0xc0, 0xc2, 0x7b, 0x1f, 0xd0, 0xd5, 0x8f, 0x24, 0x5f, 0x45, 0xa9, 0x6e, + 0xc5, 0x3c, 0xa9, 0x46, 0xd5, 0x0f, 0x86, 0x9b, 0x4f, 0xc9, 0xeb, 0xdc, + 0x20, 0xe9, 0x63, 0x18, 0x22, 0x29, 0x66, 0x93, 0x9c, 0xf2, 0x9f, 0xa4, + 0x35, 0x4b, 0x96, 0x92, 0x29, 0x60, 0xa5, 0x70, 0x76, 0x68, 0x5d, 0x52, + 0xba, 0xf4, 0x36, 0xaa, 0xe8, 0xa6, 0x90, 0xc6, 0x4e, 0x4b, 0x17, 0xbf, + 0xb2, 0x68, 0xcd, 0x60, 0xad, 0x96, 0x69, 0x57, 0xae, 0x6d, 0x09, 0x23, + 0xae, 0x66, 0x00, 0x72, 0xa9, 0x84, 0x49, 0x36, 0x61, 0xb0, 0x66, 0x7b, + 0x10, 0xfd, 0xbc, 0xfc, 0x13, 0x08, 0x31, 0x52, 0xae, 0x8c, 0x8f, 0x5e, + 0xbd, 0xb9, 0x5e, 0x7d, 0x3a, 0xb9, 0x0a, 0xe5, 0x52, 0x06, 0x9d, 0x35, + 0xab, 0xd4, 0x59, 0xa1, 0x4a, 0x9d, 0x95, 0x11, 0xd2, 0xdb, 0x36, 0xd7, + 0xab, 0x53, 0x37, 0x57, 0xa7, 0x5c, 0xca, 0xa0, 0xbb, 0x66, 0x9d, 0xba, + 0x2b, 0xd4, 0xa9, 0xab, 0xb5, 0xd0, 0x8c, 0x6d, 0x7c, 0xfd, 0x1f, 0xcc, + 0x31, 0xc3, 0xd0, 0xf2, 0x51, 0x7c, 0x71, 0xd4, 0xd9, 0x14, 0x63, 0xd9, + 0xb3, 0xb7, 0xaf, 0xe1, 0x32, 0xe8, 0x53, 0x7d, 0xc6, 0x0e, 0x49, 0x78, + 0xd8, 0xed, 0xe0, 0x97, 0x30, 0x3e, 0x55, 0x35, 0xb6, 0x9a, 0x71, 0x47, + 0xf6, 0x35, 0xab, 0x6f, 0x3a, 0xa4, 0x24, 0x2d, 0x7b, 0x65, 0x1a, 0x46, + 0xa6, 0x25, 0xa1, 0xb8, 0xbb, 0xa6, 0x81, 0x38, 0x29, 0x05, 0x43, 0xfd, + 0x3e, 0x03, 0xc4, 0x69, 0x69, 0x28, 0x33, 0x26, 0x19, 0x30, 0x95, 0x98, + 0x84, 0x33, 0x43, 0x93, 0x01, 0x93, 0x69, 0x0a, 0xaa, 0x58, 0x62, 0x85, + 0x62, 0x32, 0x52, 0x62, 0x58, 0xe9, 0xc3, 0xb0, 0x36, 0x18, 0x41, 0x01, + 0x8f, 0x7c, 0x8b, 0xcc, 0x60, 0xa2, 0x10, 0x71, 0xba, 0x1a, 0xa8, 0x72, + 0xba, 0x54, 0x68, 0x74, 0x5b, 0xd8, 0xe6, 0xfe, 0x5d, 0x52, 0xac, 0xcb, + 0x4a, 0xb6, 0xea, 0x69, 0x13, 0xcd, 0x65, 0x8d, 0xb0, 0x97, 0x17, 0x45, + 0xe1, 0xac, 0x3d, 0x37, 0x4d, 0xb0, 0x9c, 0x5f, 0x06, 0xd1, 0x34, 0xcb, + 0x1e, 0x0d, 0x56, 0xd3, 0x64, 0xcb, 0xd1, 0x4a, 0x18, 0x8d, 0x68, 0xf9, + 0xb3, 0xc1, 0x4c, 0xce, 0x29, 0x5f, 0x60, 0xda, 0x4f, 0x10, 0xc1, 0x71, + 0x51, 0x77, 0xc4, 0x47, 0x8a, 0x3e, 0xb6, 0x3e, 0xed, 0x9b, 0x31, 0x34, + 0x89, 0xc2, 0x3a, 0xe8, 0x5b, 0xed, 0xbd, 0xd4, 0x9d, 0xa1, 0x8c, 0xa8, + 0xc9, 0xeb, 0xab, 0x6f, 0xec, 0x19, 0xd4, 0x25, 0x9d, 0x40, 0xeb, 0xf5, + 0x18, 0xa8, 0x11, 0xed, 0xb0, 0xf5, 0xdb, 0x81, 0x7e, 0x4f, 0xe1, 0x6f, + 0x07, 0x5b, 0x93, 0xba, 0x55, 0xc1, 0x23, 0x82, 0xed, 0x4f, 0x2b, 0xe9, + 0x41, 0xe1, 0xe6, 0xb8, 0x09, 0x99, 0x42, 0xad, 0x29, 0x19, 0xdc, 0xdf, + 0xfd, 0x4e, 0xac, 0x71, 0xea, 0xb5, 0x40, 0x79, 0x95, 0xbb, 0xa1, 0xbe, + 0xdd, 0x54, 0xd9, 0x6e, 0xaa, 0x69, 0x77, 0xa1, 0x66, 0xb7, 0xaa, 0x63, + 0xda, 0x44, 0x0c, 0xa7, 0xf4, 0x3a, 0x42, 0x2b, 0xe0, 0x4f, 0xce, 0xa7, + 0x29, 0x8c, 0xb2, 0xac, 0xd2, 0x51, 0x37, 0x46, 0x42, 0x41, 0xbf, 0xc3, + 0x87, 0x32, 0x67, 0x79, 0x73, 0x9a, 0x5f, 0x48, 0x7a, 0x28, 0x4b, 0x3d, + 0xac, 0x5b, 0xd5, 0x5a, 0xff, 0xe0, 0x32, 0xe5, 0xd2, 0xcc, 0xec, 0x53, + 0x9c, 0xc0, 0xc0, 0xc5, 0x1a, 0xb1, 0x2d, 0xb7, 0xf1, 0x1b, 0xa5, 0x05, + 0x4d, 0x59, 0x06, 0x38, 0x26, 0x4d, 0xd3, 0x94, 0x16, 0xa6, 0x65, 0x74, + 0x92, 0x37, 0x75, 0xc8, 0x38, 0xb6, 0x7d, 0xfc, 0x7e, 0x2a, 0xc5, 0x4e, + 0xcc, 0x46, 0xc2, 0xbf, 0xd2, 0xfa, 0xa5, 0x7b, 0x4b, 0xda, 0x63, 0xe3, + 0xb5, 0xa0, 0x76, 0xcd, 0x4a, 0x0e, 0x7a, 0xc9, 0xc1, 0xe0, 0xfa, 0xc2, + 0x9d, 0x74, 0xe1, 0xce, 0x7a, 0xa5, 0xbb, 0xe9, 0xd2, 0xdd, 0x92, 0xd2, + 0x79, 0xf3, 0x6c, 0x32, 0x33, 0x9e, 0x76, 0xdc, 0x9f, 0x6a, 0xc9, 0x1e, + 0xb0, 0xc9, 0xd6, 0x61, 0x82, 0x85, 0xed, 0x93, 0x60, 0x45, 0xb9, 0xbd, + 0x37, 0x6c, 0xa3, 0x89, 0x1e, 0x8c, 0x57, 0x95, 0x73, 0x27, 0x5d, 0xbc, + 0xb3, 0x6e, 0xf9, 0x6e, 0xba, 0x7c, 0x57, 0x97, 0xbf, 0xd5, 0x96, 0x22, + 0x7b, 0xb2, 0xc9, 0x86, 0x22, 0x7a, 0x85, 0xed, 0x64, 0x18, 0x91, 0x13, + 0x92, 0x1b, 0xb6, 0xd2, 0x40, 0x79, 0x43, 0xab, 0x0a, 0xb9, 0x93, 0x2e, + 0xdd, 0x59, 0xb3, 0x78, 0x37, 0x5d, 0xbc, 0xab, 0x8a, 0xdf, 0x6a, 0x13, + 0x91, 0x81, 0xde, 0x68, 0x1b, 0x11, 0xc1, 0xe2, 0x46, 0x4a, 0xb0, 0x22, + 0x27, 0xf5, 0x37, 0x6d, 0xa6, 0x33, 0xe5, 0x8f, 0xae, 0x2c, 0xe8, 0x4e, + 0xba, 0x78, 0x67, 0xdd, 0xf2, 0xdd, 0x74, 0xf9, 0xae, 0x2a, 0x7f, 0xbb, + 0x2d, 0x25, 0x07, 0xbd, 0x4d, 0x36, 0x95, 0xa4, 0x58, 0xd8, 0x56, 0x49, + 0x66, 0xf4, 0xf2, 0x4a, 0xae, 0xb5, 0xa4, 0x50, 0xcc, 0xba, 0x6d, 0xec, + 0xfc, 0xad, 0x27, 0x17, 0xbd, 0x54, 0xf0, 0x24, 0x46, 0x74, 0xbb, 0xeb, + 0x05, 0x86, 0xc1, 0xfc, 0xa2, 0x41, 0xcd, 0x4c, 0x52, 0x36, 0xeb, 0x11, + 0x30, 0xc1, 0x42, 0xd1, 0x27, 0x58, 0x51, 0xeb, 0x7a, 0x25, 0x82, 0xe7, + 0xbc, 0xcc, 0x64, 0x2a, 0x2f, 0xd5, 0x63, 0xca, 0xbd, 0x5d, 0x81, 0x32, + 0xc1, 0x62, 0x59, 0x5e, 0x19, 0xef, 0x2b, 0x55, 0x29, 0x4f, 0xd5, 0x67, + 0xb8, 0x08, 0xf0, 0x9d, 0x58, 0x51, 0x53, 0x39, 0x7a, 0x32, 0x40, 0x42, + 0x4a, 0xcd, 0x05, 0x6c, 0x17, 0xc1, 0xa7, 0x55, 0x7d, 0x57, 0xce, 0x47, + 0xbd, 0x5d, 0xd5, 0xa4, 0x94, 0x4f, 0x1f, 0x2b, 0x89, 0xfb, 0x55, 0x2a, + 0xa9, 0xf5, 0xa7, 0x14, 0xda, 0xbe, 0xa2, 0x9b, 0x9a, 0x15, 0xe4, 0x88, + 0x3f, 0xb6, 0x5a, 0xeb, 0x92, 0xa6, 0xbb, 0x59, 0xd6, 0xa0, 0x9b, 0x5c, + 0x26, 0x57, 0x90, 0xd9, 0x49, 0x70, 0x66, 0x79, 0x9e, 0xde, 0x53, 0x10, + 0x20, 0x1a, 0x23, 0x33, 0xf3, 0x65, 0x43, 0xc4, 0x30, 0x3c, 0xf3, 0x35, + 0x73, 0x30, 0xb9, 0x15, 0xd0, 0xe7, 0x48, 0x2d, 0x56, 0xe2, 0x58, 0x79, + 0x35, 0x93, 0x50, 0xcb, 0x02, 0x0d, 0x67, 0xcf, 0x99, 0x15, 0xdc, 0xea, + 0x1f, 0x58, 0x97, 0xa5, 0x46, 0x6b, 0xd5, 0x3e, 0x9d, 0xf3, 0xbc, 0x93, + 0xb9, 0xd9, 0x25, 0x8e, 0xb4, 0xd6, 0xbe, 0x47, 0x77, 0x9d, 0xd0, 0xa5, + 0x63, 0xde, 0x53, 0x46, 0xa2, 0xea, 0x14, 0xf9, 0xac, 0x9c, 0xd2, 0xe9, + 0x37, 0x05, 0x8c, 0x23, 0x4f, 0x9c, 0x52, 0xd4, 0x83, 0xac, 0x36, 0x17, + 0x4a, 0xa9, 0x66, 0xc2, 0xb9, 0xfc, 0x5f, 0x12, 0x00, 0x57, 0x68, 0x2d, + 0x11, 0x90, 0x8f, 0xf1, 0xbf, 0x24, 0x01, 0xaa, 0xcf, 0x5a, 0x02, 0xa0, + 0xb1, 0xfb, 0x7f, 0x4a, 0x02, 0x54, 0xa1, 0xf5, 0x44, 0x20, 0xc7, 0xc4, + 0x75, 0x64, 0xf0, 0x9f, 0x51, 0x53, 0xc9, 0xf7, 0x5a, 0x55, 0xc5, 0x68, + 0xb5, 0x9e, 0xc9, 0xdb, 0x58, 0x65, 0xc0, 0xd9, 0xca, 0xd6, 0xeb, 0x2a, + 0x79, 0x1f, 0xc5, 0xcb, 0xd9, 0x5c, 0x2e, 0x54, 0xcb, 0xf7, 0x59, 0xd0, + 0xa1, 0x7c, 0x75, 0x8f, 0x44, 0x62, 0x9c, 0x38, 0xa7, 0xcb, 0x28, 0xaa, + 0x8b, 0x00, 0xa3, 0xee, 0xdc, 0xa7, 0x1b, 0x7f, 0x29, 0x4e, 0x8b, 0x56, + 0x63, 0x6a, 0x96, 0x19, 0x30, 0x00, 0x15, 0xa8, 0xe1, 0xe2, 0x57, 0xaf, + 0x5f, 0xfd, 0x04, 0x25, 0xde, 0x89, 0x3f, 0x60, 0x51, 0x25, 0xd2, 0x35, + 0x23, 0x00, 0x9c, 0xec, 0xe4, 0x98, 0xfc, 0x90, 0x62, 0xf2, 0xa5, 0x74, + 0x50, 0x26, 0xe9, 0x16, 0xa4, 0x3c, 0x68, 0x19, 0x17, 0x63, 0xa2, 0xf8, + 0xd9, 0x85, 0xde, 0xb6, 0x1e, 0x3c, 0xb0, 0x38, 0x83, 0xb0, 0x2c, 0x42, + 0xe9, 0x97, 0xb7, 0x0a, 0x5f, 0x16, 0x14, 0xc9, 0x31, 0x4c, 0xa1, 0x09, + 0xe7, 0xd8, 0x66, 0x17, 0x74, 0xf3, 0x93, 0xe2, 0x28, 0x49, 0x4a, 0x43, + 0xdf, 0x03, 0xb6, 0x87, 0x0f, 0x41, 0x23, 0x4e, 0xaa, 0x19, 0xcc, 0xe6, + 0x2f, 0x96, 0x41, 0x0c, 0x95, 0xc0, 0x69, 0x5c, 0x83, 0xa5, 0x25, 0x2b, + 0xc7, 0x8b, 0xe1, 0x10, 0xe3, 0xfe, 0xbd, 0x4a, 0xae, 0xb0, 0x7c, 0xcc, + 0xe3, 0xb9, 0x56, 0x38, 0xb5, 0x04, 0xfa, 0xa3, 0x77, 0xef, 0xde, 0xbe, + 0xbb, 0x67, 0xe5, 0x5e, 0x40, 0x23, 0xe9, 0x65, 0x68, 0x5d, 0x25, 0x96, + 0x55, 0xa9, 0x95, 0x6b, 0xdc, 0x5e, 0x7c, 0x06, 0xbc, 0xf2, 0xed, 0x5b, + 0xba, 0xfe, 0xc5, 0x62, 0x0d, 0x88, 0x82, 0xd8, 0x81, 0x94, 0x9c, 0x19, + 0xb0, 0x17, 0x47, 0x45, 0x50, 0x0c, 0x40, 0x4a, 0xcb, 0x68, 0xb3, 0xae, + 0x1d, 0xb6, 0x4a, 0xf8, 0x0e, 0xc9, 0xb8, 0xed, 0x95, 0xb6, 0x55, 0xe8, + 0x33, 0x13, 0x6e, 0xb4, 0x05, 0x60, 0x0e, 0xd6, 0xc0, 0x29, 0x2e, 0x15, + 0x16, 0x61, 0x74, 0x47, 0x6e, 0xae, 0x9a, 0x1e, 0x94, 0x7a, 0x55, 0xd4, + 0x0b, 0xe9, 0x71, 0xc9, 0x28, 0x0e, 0x3e, 0x39, 0x8d, 0xe8, 0x1f, 0x1b, + 0x2f, 0xd0, 0x39, 0x7e, 0xdf, 0x03, 0xae, 0xdc, 0xc4, 0x51, 0x50, 0xfb, + 0x63, 0x2d, 0x73, 0x31, 0x90, 0x21, 0xdf, 0x58, 0xf5, 0xdc, 0xad, 0xb1, + 0x6a, 0x28, 0xa1, 0x56, 0xb2, 0x3a, 0xa1, 0x50, 0xf7, 0xad, 0x9f, 0x1e, + 0xbf, 0x7d, 0xd3, 0x9c, 0xdb, 0x01, 0x1f, 0x5f, 0x2e, 0xd0, 0x33, 0x15, + 0x3a, 0x3e, 0x53, 0x8b, 0xd9, 0x8c, 0xd4, 0xdc, 0x69, 0x91, 0xc1, 0x9b, + 0x23, 0x10, 0x1f, 0x7e, 0x86, 0x99, 0x9e, 0xc5, 0xd6, 0xc6, 0xfc, 0x65, + 0xa8, 0x31, 0x58, 0x13, 0xb1, 0x48, 0x5c, 0xa1, 0xf8, 0x41, 0x1d, 0xbf, + 0x30, 0xaf, 0xd8, 0x2a, 0xfe, 0x33, 0x13, 0x04, 0xa6, 0x2d, 0x4f, 0xa1, + 0x5c, 0xaa, 0x4b, 0x55, 0x0d, 0xb6, 0x3a, 0xde, 0x69, 0x26, 0x1f, 0x19, + 0x4e, 0x4f, 0x85, 0xcc, 0x5f, 0x5e, 0xb3, 0xf3, 0xc9, 0x6b, 0xf7, 0x00, + 0xdd, 0xbe, 0xea, 0x90, 0xfc, 0xca, 0x2f, 0x00, 0xc3, 0x11, 0xb4, 0x21, + 0x1e, 0xe0, 0x87, 0x67, 0x36, 0xe3, 0x94, 0x7b, 0x0e, 0x8c, 0x9e, 0x44, + 0x9a, 0xc1, 0x88, 0xc8, 0xfa, 0xb3, 0x63, 0x0f, 0x1d, 0x6b, 0x60, 0x07, + 0xd5, 0x24, 0x70, 0x7c, 0xad, 0x67, 0xdd, 0x52, 0xa1, 0x83, 0x34, 0x99, + 0x69, 0xb5, 0x8a, 0x3a, 0x19, 0xa5, 0xe5, 0x3a, 0xc0, 0x53, 0x8e, 0x1f, + 0x5b, 0xa9, 0x07, 0xc8, 0x50, 0xb3, 0x6b, 0xd5, 0xbf, 0x50, 0xf9, 0x65, + 0xd9, 0x5b, 0x57, 0x7c, 0xbe, 0x02, 0x66, 0x25, 0xd5, 0x07, 0x54, 0x5c, + 0xba, 0xa4, 0x5b, 0x00, 0x24, 0x8e, 0x67, 0xb4, 0x72, 0x7d, 0x43, 0x55, + 0xc1, 0x40, 0xf4, 0x53, 0x05, 0xf6, 0xaf, 0x45, 0x1d, 0x87, 0xe1, 0x95, + 0xa2, 0x36, 0x10, 0xfd, 0x74, 0x89, 0x15, 0x91, 0x23, 0x9e, 0xaf, 0x1c, + 0xb9, 0x81, 0xe8, 0xa7, 0x4a, 0xac, 0x8a, 0x9c, 0x22, 0x03, 0x4b, 0x91, + 0x1b, 0x88, 0x7e, 0xba, 0xc4, 0x8a, 0xc8, 0x29, 0xc4, 0xb0, 0x14, 0xb9, + 0x81, 0xe8, 0xa7, 0x4b, 0x5c, 0x8f, 0x5c, 0xc6, 0x2a, 0x22, 0xbd, 0x0c, + 0xb9, 0x86, 0xe8, 0x1b, 0xf0, 0x15, 0x04, 0xa2, 0x42, 0x1e, 0x2d, 0x6b, + 0x75, 0x0b, 0xaa, 0xc8, 0x99, 0x92, 0xfd, 0x24, 0xa6, 0xfd, 0xe5, 0xa5, + 0x12, 0xe1, 0x92, 0x28, 0x97, 0x46, 0x05, 0x3b, 0x32, 0x74, 0x17, 0x34, + 0x8a, 0x55, 0x3e, 0xf0, 0xd8, 0xba, 0x82, 0xd5, 0xcb, 0x54, 0x47, 0xc6, + 0x6b, 0x2e, 0x91, 0x92, 0x86, 0xe8, 0x27, 0xc0, 0x57, 0x92, 0x12, 0x87, + 0x7d, 0x96, 0xa2, 0x35, 0x10, 0xfd, 0x64, 0x81, 0x15, 0x1a, 0x80, 0xc3, + 0x44, 0x39, 0x42, 0x74, 0x09, 0xf6, 0x5c, 0x2c, 0x29, 0xc8, 0x64, 0x0a, + 0xff, 0x5f, 0x18, 0x7e, 0x2d, 0xbf, 0xbc, 0x32, 0x41, 0x5d, 0x57, 0xac, + 0x00, 0xcd, 0xcd, 0xc0, 0x3b, 0x59, 0x58, 0xa4, 0xd1, 0x6e, 0x78, 0x6a, + 0xfb, 0xb9, 0x42, 0xa1, 0xd8, 0xd7, 0x7b, 0x9f, 0x37, 0x46, 0x2f, 0x5f, + 0x35, 0x9a, 0x24, 0x52, 0xbc, 0x50, 0xdf, 0xca, 0x43, 0xa4, 0xd6, 0xbc, + 0x57, 0x00, 0xe9, 0xac, 0x00, 0xd3, 0xcd, 0xc0, 0x5c, 0x15, 0xaf, 0x1d, + 0x72, 0xeb, 0x49, 0x0f, 0x73, 0x86, 0xcf, 0xba, 0xc5, 0xaf, 0x1a, 0x95, + 0x42, 0xcf, 0xfb, 0x89, 0xaf, 0x39, 0x12, 0x98, 0x46, 0x5c, 0x02, 0x6e, + 0xb2, 0xa7, 0x43, 0xe3, 0x2e, 0xde, 0xfc, 0xfa, 0xf2, 0x59, 0x22, 0xc3, + 0x19, 0xa9, 0xd4, 0x9f, 0xb0, 0x50, 0x12, 0x39, 0x52, 0x4a, 0xb5, 0x44, + 0x30, 0x03, 0xbd, 0x23, 0xb6, 0xaf, 0xc5, 0xae, 0xaf, 0x98, 0x53, 0x92, + 0xaf, 0x56, 0x9e, 0xbd, 0xfc, 0x65, 0x25, 0x09, 0x1d, 0xce, 0xbd, 0x25, + 0xd0, 0xc7, 0xdf, 0x1e, 0xbe, 0x91, 0xe0, 0x26, 0x52, 0x62, 0x09, 0xf8, + 0xcb, 0x7f, 0x95, 0x77, 0x2c, 0xca, 0x8d, 0x13, 0xb1, 0x5f, 0x31, 0xe1, + 0x51, 0x87, 0x4b, 0xda, 0x26, 0x7d, 0xdc, 0xa3, 0x14, 0x06, 0x8e, 0x83, + 0xb9, 0x19, 0x18, 0x18, 0xee, 0x78, 0x4d, 0xa7, 0x73, 0x93, 0xb4, 0x6e, + 0x1a, 0x48, 0x93, 0x60, 0xbb, 0xb4, 0x9d, 0xa3, 0x0c, 0x7f, 0xc8, 0x2f, + 0x21, 0x69, 0x77, 0xad, 0x7d, 0xda, 0x6b, 0xd3, 0xf2, 0xec, 0xc0, 0x25, + 0xb1, 0x25, 0xad, 0xa4, 0xd5, 0xbe, 0xb5, 0x92, 0x01, 0x3b, 0x2d, 0xeb, + 0x48, 0x7f, 0xf4, 0xf5, 0xcb, 0x97, 0x5f, 0x98, 0xc4, 0xa7, 0xad, 0x38, + 0x2f, 0xaf, 0x4b, 0x17, 0x1a, 0x16, 0x5b, 0x64, 0x4a, 0xa9, 0xa5, 0xcf, + 0xd4, 0x52, 0x65, 0x5f, 0x91, 0xc2, 0x42, 0xf1, 0x7e, 0x6f, 0x06, 0xce, + 0x59, 0xe8, 0xf4, 0x91, 0x02, 0x59, 0xed, 0x95, 0x69, 0x92, 0x46, 0x4e, + 0x5c, 0x09, 0x04, 0xcf, 0x0c, 0x7c, 0x40, 0xea, 0x6b, 0xaf, 0xa0, 0x03, + 0x43, 0x54, 0x95, 0x6d, 0x97, 0xdf, 0x20, 0x23, 0x87, 0x8a, 0x25, 0x7e, + 0x4c, 0xb1, 0x88, 0xe0, 0x4e, 0x00, 0xbc, 0x73, 0x76, 0xaf, 0x11, 0x38, + 0x95, 0x18, 0xb8, 0x87, 0xcd, 0x58, 0x06, 0x9b, 0x56, 0x36, 0x66, 0xbd, + 0xd0, 0xa0, 0x43, 0x5a, 0xb5, 0x45, 0x5c, 0x5d, 0x61, 0x90, 0x48, 0x50, + 0xe1, 0x26, 0x71, 0xf2, 0x95, 0xc1, 0x7f, 0x86, 0x94, 0xc5, 0xd8, 0xce, + 0xfb, 0xcb, 0x68, 0x46, 0x9f, 0x97, 0x6a, 0xc6, 0x4a, 0x0b, 0x47, 0x5a, + 0xb0, 0x25, 0x1f, 0x24, 0x3d, 0xda, 0x6b, 0x7f, 0x35, 0x5d, 0x5d, 0xbf, + 0x82, 0x1d, 0x7b, 0xa0, 0x98, 0xc9, 0x6c, 0xc8, 0xc9, 0x13, 0xed, 0x9d, + 0x46, 0x36, 0xa4, 0xa0, 0x72, 0x35, 0x9b, 0x2d, 0x32, 0xd1, 0xe8, 0x68, + 0x01, 0xce, 0x1a, 0x42, 0x23, 0x0f, 0xf6, 0x2d, 0xf4, 0xda, 0xac, 0x42, + 0x28, 0x45, 0x55, 0xe1, 0xa9, 0x65, 0x1d, 0x00, 0x1a, 0x7a, 0x35, 0x2d, + 0xf5, 0x57, 0x46, 0x79, 0x9c, 0x5a, 0x3b, 0x29, 0x2e, 0xf6, 0x93, 0x8b, + 0xd3, 0xdd, 0x64, 0x01, 0x07, 0xdb, 0xd7, 0x8b, 0x31, 0x9a, 0x65, 0x1a, + 0x56, 0x4e, 0x22, 0x1e, 0x92, 0x32, 0xc8, 0x62, 0x6b, 0x7b, 0x54, 0xb1, + 0x54, 0xed, 0x1b, 0x5c, 0x01, 0x2b, 0x76, 0x0f, 0x95, 0x67, 0x9c, 0xde, + 0x40, 0x2c, 0x02, 0xba, 0x8d, 0x63, 0xbd, 0x9d, 0x9d, 0xb7, 0x7b, 0x07, + 0xd1, 0xd8, 0xc3, 0xd3, 0xd5, 0x12, 0x49, 0x80, 0xa9, 0x7d, 0x58, 0xc2, + 0x64, 0x1f, 0x5a, 0x44, 0x46, 0x57, 0x9c, 0x57, 0x3f, 0xc2, 0xbb, 0x49, + 0x71, 0x3e, 0xc9, 0x73, 0xbc, 0xdf, 0x8d, 0x74, 0x07, 0xa3, 0xed, 0xed, + 0x28, 0x79, 0xc1, 0xee, 0x54, 0x7b, 0x0c, 0x0f, 0xb2, 0x7a, 0x3e, 0x87, + 0x83, 0xc6, 0x25, 0xcf, 0xe5, 0x9c, 0x76, 0x8b, 0x20, 0x32, 0xea, 0x6a, + 0xd9, 0xb8, 0xf0, 0xb1, 0xfa, 0x73, 0x53, 0xb5, 0xf6, 0x82, 0xa7, 0xbc, + 0x58, 0xf3, 0xa5, 0xa5, 0xb8, 0xb5, 0xcf, 0x07, 0xe6, 0x22, 0x07, 0xec, + 0xe0, 0xf5, 0xad, 0xb9, 0x71, 0xf7, 0x95, 0x70, 0xfb, 0xaa, 0x72, 0x22, + 0x57, 0x25, 0x5c, 0xcd, 0xcb, 0x73, 0x11, 0x93, 0x3a, 0x01, 0xc5, 0x17, + 0x8c, 0x74, 0x06, 0x2d, 0x3e, 0x95, 0x37, 0xa8, 0x60, 0x78, 0xaa, 0x30, + 0x0c, 0xc1, 0x2a, 0xaf, 0x71, 0xf5, 0xd6, 0x8e, 0x92, 0x0a, 0xcf, 0xfb, + 0x34, 0xed, 0x82, 0xb7, 0x97, 0x59, 0x70, 0xe3, 0x21, 0xd5, 0x84, 0xc6, + 0x83, 0xa8, 0xe3, 0xbe, 0x3b, 0x77, 0x33, 0xde, 0x83, 0x66, 0x6c, 0x14, + 0xff, 0xf4, 0x86, 0x82, 0x32, 0x54, 0xca, 0xee, 0xb2, 0xb0, 0x94, 0xdb, + 0x53, 0x9c, 0xf2, 0x10, 0x47, 0x0e, 0x93, 0x14, 0xcd, 0x6a, 0x54, 0x15, + 0x63, 0x62, 0x0a, 0xb9, 0xcb, 0x95, 0x2c, 0xac, 0x2c, 0xc3, 0x5c, 0xd7, + 0xee, 0x9c, 0xc0, 0x66, 0x95, 0x27, 0x03, 0xc9, 0xe7, 0xea, 0x10, 0x96, + 0xb3, 0x56, 0xcb, 0x04, 0xdf, 0x45, 0x82, 0x8e, 0xfc, 0xd0, 0x1d, 0x8b, + 0xf4, 0xd7, 0xc9, 0x59, 0xbe, 0xba, 0x50, 0xd9, 0xae, 0xf5, 0x44, 0xd9, + 0x9b, 0xbc, 0x8d, 0x66, 0x9c, 0xf3, 0x09, 0x59, 0xa1, 0xef, 0x80, 0xe2, + 0xdc, 0xba, 0x27, 0xa2, 0x50, 0xf9, 0x7a, 0x3b, 0xf1, 0xd7, 0xbf, 0x06, + 0x60, 0x9b, 0x00, 0xd2, 0x70, 0x6d, 0xc0, 0xdf, 0x34, 0x08, 0x36, 0x68, + 0x25, 0xc1, 0xb3, 0x4a, 0x44, 0x03, 0x93, 0x39, 0xb4, 0x4d, 0xa6, 0x16, + 0xde, 0x6c, 0xfe, 0xf4, 0xcc, 0xb6, 0x21, 0xfe, 0x50, 0xaa, 0xcc, 0xd2, + 0xaa, 0x9f, 0x99, 0xae, 0x4e, 0x6f, 0xec, 0xce, 0x47, 0xce, 0x25, 0x0e, + 0x43, 0x25, 0x8b, 0xf7, 0x80, 0x54, 0xcd, 0x1b, 0xcd, 0xfd, 0x33, 0xfc, + 0x65, 0xed, 0x9f, 0x19, 0xbd, 0x3e, 0xf5, 0x33, 0x0a, 0xdf, 0xa9, 0x50, + 0xbe, 0x3a, 0xa8, 0x52, 0xd7, 0x57, 0xf3, 0x00, 0xd8, 0x54, 0x1b, 0x8e, + 0xb8, 0xea, 0xbc, 0xb4, 0xcb, 0xdc, 0x53, 0x3b, 0xb4, 0x9d, 0xfb, 0x16, + 0x14, 0x91, 0xd2, 0x37, 0x62, 0x57, 0x4e, 0x57, 0x07, 0x84, 0xef, 0x5f, + 0x56, 0x98, 0x13, 0x5c, 0xd3, 0xe6, 0xdd, 0x6a, 0x67, 0x4d, 0x58, 0x6d, + 0x82, 0x7a, 0x26, 0xb7, 0x49, 0xa0, 0x69, 0x82, 0xca, 0x2e, 0x3e, 0x06, + 0x3c, 0xb9, 0xbb, 0xff, 0x89, 0xfc, 0x99, 0x1a, 0x53, 0xc5, 0xc5, 0x6a, + 0x2a, 0xdf, 0x7f, 0x04, 0x5f, 0xd3, 0x23, 0xea, 0x26, 0x45, 0x53, 0x9f, + 0x9f, 0xdd, 0x54, 0x9a, 0xeb, 0x1f, 0x0f, 0x92, 0xd7, 0xe2, 0x72, 0xe5, + 0x06, 0xb6, 0xc2, 0xb9, 0xb8, 0xc3, 0xba, 0x85, 0x9d, 0xfb, 0x86, 0xe2, + 0xb9, 0x2a, 0x51, 0x8e, 0x9c, 0xe9, 0x86, 0x42, 0xdf, 0x18, 0x50, 0x49, + 0x83, 0x64, 0xc3, 0x18, 0x16, 0xe8, 0x48, 0xda, 0x3b, 0xa1, 0x47, 0xc7, + 0x05, 0x91, 0xbb, 0x66, 0x50, 0x51, 0xed, 0x37, 0x8f, 0x39, 0x19, 0xf4, + 0x40, 0x1a, 0x86, 0x35, 0xdc, 0xb4, 0xef, 0xd9, 0x2c, 0x6b, 0x30, 0x59, + 0xfc, 0xfa, 0xe9, 0xd3, 0x67, 0x2f, 0x5e, 0x58, 0x15, 0x80, 0xfd, 0xd7, + 0x80, 0x87, 0x82, 0x98, 0x25, 0xa9, 0xdd, 0x02, 0x68, 0xac, 0x81, 0xe1, + 0xbb, 0x10, 0xa7, 0x0c, 0x40, 0x71, 0x47, 0x2d, 0x4e, 0xf9, 0x2f, 0xa6, + 0xd3, 0xad, 0x9a, 0x10, 0xa8, 0x45, 0xcc, 0x7a, 0x55, 0xfb, 0x68, 0x5c, + 0x71, 0x9a, 0x8b, 0x75, 0xa1, 0x10, 0x8f, 0xa4, 0xdd, 0xe5, 0x8b, 0x5c, + 0x7f, 0xdb, 0x43, 0x80, 0x39, 0x3d, 0xcd, 0x84, 0x1f, 0x89, 0xdb, 0x50, + 0xdf, 0xd0, 0x7e, 0x56, 0x67, 0x1e, 0xc1, 0x89, 0x74, 0xfb, 0xf9, 0x33, + 0x36, 0x9d, 0xf5, 0x0a, 0x67, 0x1f, 0x31, 0x5d, 0x8b, 0x76, 0x42, 0xa3, + 0x33, 0x06, 0xf6, 0x87, 0x44, 0x9c, 0x8e, 0xc7, 0x4b, 0xb3, 0xc0, 0x36, + 0x97, 0xa5, 0x00, 0x3f, 0x48, 0x46, 0xa6, 0x73, 0x3b, 0x11, 0x76, 0xe9, + 0x62, 0x67, 0x1f, 0x43, 0x19, 0x4f, 0x07, 0x6c, 0x56, 0x6f, 0xbd, 0x8d, + 0x52, 0x2c, 0x9a, 0xe9, 0xc4, 0xa0, 0xa0, 0xa5, 0xb3, 0x8f, 0x9e, 0xac, + 0x30, 0xad, 0xca, 0x56, 0xcb, 0x17, 0x2a, 0x2b, 0x0c, 0x1c, 0x75, 0xc2, + 0x56, 0xca, 0x02, 0x1c, 0x5f, 0x2a, 0xb6, 0x6c, 0x67, 0xbb, 0x44, 0xbc, + 0x97, 0x8c, 0x18, 0xe5, 0x17, 0x2a, 0x73, 0x34, 0x81, 0x3f, 0x01, 0x06, + 0x24, 0x30, 0xf7, 0x99, 0xc9, 0x0b, 0xb0, 0xc0, 0xc4, 0x04, 0x94, 0x7e, + 0x59, 0xda, 0x89, 0x27, 0x94, 0xe2, 0x99, 0x0c, 0x17, 0x1f, 0xdd, 0x3c, + 0x55, 0x8b, 0x8d, 0xb4, 0x27, 0x58, 0xa2, 0x8b, 0xe4, 0xe0, 0xe4, 0x33, + 0x83, 0xfe, 0x48, 0x4d, 0xa4, 0x79, 0xf0, 0x9f, 0xd3, 0x5e, 0x06, 0x7c, + 0xbc, 0x97, 0x5c, 0xcb, 0xb3, 0x19, 0xf8, 0x05, 0xb1, 0xb1, 0x74, 0x9d, + 0x5f, 0x1f, 0xcd, 0x8f, 0xf5, 0x55, 0x0c, 0x3d, 0xf0, 0xdf, 0x37, 0xe0, + 0x05, 0xe7, 0x63, 0x79, 0xe7, 0x80, 0x9f, 0xec, 0xf4, 0xac, 0xca, 0x01, + 0x29, 0x9a, 0x2f, 0x4f, 0xb9, 0x3a, 0xba, 0x36, 0x79, 0x69, 0x62, 0x64, + 0xc7, 0x61, 0xe4, 0x71, 0x4f, 0x57, 0x77, 0x26, 0xef, 0x93, 0x8a, 0xac, + 0x38, 0xc9, 0x64, 0x79, 0x5a, 0x79, 0x2e, 0x95, 0x2b, 0xab, 0x22, 0x00, + 0xcb, 0xf2, 0x84, 0xe7, 0xca, 0x3f, 0xea, 0xe5, 0xc8, 0xab, 0xb4, 0x0e, + 0x68, 0x13, 0x23, 0x68, 0x94, 0xf2, 0x07, 0x2d, 0xda, 0x8e, 0x75, 0xdf, + 0x70, 0x2f, 0x81, 0x59, 0x1c, 0x81, 0x29, 0x60, 0x7a, 0xf1, 0xa7, 0x71, + 0xf8, 0xb8, 0x6b, 0xe6, 0x27, 0x70, 0x15, 0x47, 0x20, 0xe8, 0x47, 0x11, + 0x76, 0x3b, 0x70, 0x5d, 0x0e, 0x6e, 0x2d, 0x7f, 0x30, 0xef, 0xac, 0x18, + 0x06, 0x87, 0x6a, 0x9e, 0x45, 0xf5, 0xa1, 0x7e, 0xc8, 0x8a, 0xe1, 0x26, + 0x81, 0x2f, 0xea, 0xec, 0x49, 0x21, 0x3a, 0x6d, 0x80, 0x5c, 0x0f, 0xf4, + 0x09, 0x30, 0x95, 0xef, 0x9d, 0xf9, 0xda, 0xd3, 0x5e, 0xc4, 0xf4, 0x4f, + 0x7b, 0x91, 0x2e, 0x85, 0xb7, 0xaa, 0xdb, 0xf8, 0x82, 0x84, 0x54, 0xcf, + 0x79, 0xe3, 0x0b, 0xff, 0x24, 0x8e, 0xb5, 0x32, 0xa6, 0x9a, 0xea, 0x0d, + 0x88, 0x51, 0x17, 0xd8, 0xbb, 0xd8, 0x3d, 0x42, 0xd8, 0xe3, 0xcd, 0x2a, + 0x49, 0x25, 0x63, 0x11, 0x88, 0xb1, 0x31, 0x20, 0xc8, 0x58, 0x6d, 0x93, + 0xa0, 0x94, 0x89, 0x18, 0xc3, 0xdf, 0x01, 0x03, 0xb4, 0x72, 0x33, 0x3d, + 0x85, 0xc6, 0xb4, 0xba, 0xc8, 0xca, 0x73, 0xa0, 0x94, 0x9c, 0x67, 0x79, + 0x66, 0x4d, 0x17, 0x69, 0x2d, 0x52, 0xc8, 0xd0, 0x29, 0x75, 0x35, 0x29, + 0x81, 0xb8, 0x2a, 0x19, 0x4d, 0x71, 0x0c, 0xc6, 0x6a, 0xbf, 0x6a, 0xc1, + 0x2b, 0x9c, 0x44, 0x90, 0xd7, 0x80, 0x45, 0x56, 0x95, 0x16, 0x2e, 0xd1, + 0x15, 0x88, 0xcf, 0x0b, 0xc3, 0xf2, 0x48, 0x18, 0x16, 0x47, 0x3d, 0x50, + 0xb4, 0xed, 0xc3, 0x47, 0x13, 0xac, 0x8d, 0x64, 0xce, 0x29, 0xa6, 0x55, + 0xd6, 0x81, 0xab, 0x84, 0xde, 0xd3, 0x73, 0xe8, 0x14, 0x6c, 0xcc, 0xbe, + 0x4f, 0x58, 0x3e, 0xc1, 0xac, 0x91, 0xb6, 0x02, 0x52, 0xe2, 0x32, 0x9a, + 0x2d, 0x6f, 0xf5, 0xc2, 0x06, 0x6c, 0x2f, 0xb1, 0xce, 0x1a, 0x93, 0x09, + 0xcb, 0x7c, 0x81, 0x42, 0x3b, 0xc8, 0x61, 0xa9, 0xe1, 0x28, 0xb5, 0x59, + 0x6a, 0x00, 0x62, 0xa9, 0xd5, 0x13, 0x57, 0x6a, 0xf5, 0xc2, 0x02, 0xec, + 0x2a, 0xb5, 0x64, 0x4d, 0x7d, 0xaf, 0x95, 0x7a, 0x0d, 0x52, 0xdb, 0xc8, + 0x61, 0xa9, 0xe9, 0x8c, 0xb7, 0x51, 0x6a, 0x04, 0x62, 0xa9, 0xd5, 0x13, + 0x47, 0x6a, 0xf5, 0xc2, 0x06, 0xec, 0x28, 0xb5, 0x60, 0x8d, 0xc9, 0xd4, + 0x49, 0x7d, 0x09, 0x52, 0x3b, 0xc8, 0x35, 0x75, 0x0d, 0xd3, 0x8d, 0x46, + 0xa9, 0x11, 0x88, 0xa5, 0x56, 0x4f, 0x1c, 0xa9, 0xd5, 0x0b, 0x1b, 0xb0, + 0xa3, 0xd4, 0x82, 0x35, 0x26, 0x53, 0x27, 0x35, 0x8e, 0xf5, 0x0e, 0xb2, + 0x4f, 0x6a, 0x00, 0xba, 0x5c, 0xd6, 0x58, 0xb7, 0x9a, 0xd6, 0x22, 0x18, + 0xdb, 0x37, 0xfd, 0xb2, 0xe4, 0x55, 0x47, 0xec, 0x0c, 0xd1, 0xc1, 0xa8, + 0xd5, 0x99, 0xbd, 0xc4, 0x0f, 0x4b, 0x58, 0x9c, 0x80, 0x84, 0x26, 0x96, + 0x57, 0x3c, 0x38, 0xce, 0x6e, 0x16, 0x0e, 0x80, 0x94, 0x68, 0x88, 0xe0, + 0x11, 0x0c, 0x9e, 0xf2, 0xfb, 0x4e, 0x62, 0x09, 0x46, 0xe0, 0xdf, 0x3a, + 0xa1, 0x54, 0x13, 0x65, 0x1c, 0xaf, 0x50, 0xe8, 0x1c, 0xd0, 0x2c, 0x15, + 0x42, 0x85, 0x27, 0x44, 0x0c, 0x03, 0x53, 0xa2, 0xbf, 0x7f, 0x6e, 0xc3, + 0xec, 0x88, 0xd9, 0x8d, 0x06, 0x8d, 0x0f, 0x9b, 0xe7, 0x34, 0x04, 0xe5, + 0x56, 0x1c, 0xb9, 0x60, 0x30, 0x44, 0xa7, 0xaa, 0x93, 0xea, 0xc6, 0x8f, + 0xba, 0xca, 0xc3, 0x15, 0x82, 0x85, 0xe5, 0xad, 0x3d, 0x91, 0x7c, 0xaf, + 0xb9, 0xfe, 0x04, 0x5c, 0x5d, 0x0d, 0x32, 0xd4, 0x3f, 0xa8, 0x0e, 0x05, + 0x43, 0x4e, 0x2d, 0x8a, 0xc7, 0xcd, 0xf5, 0x28, 0xe1, 0x54, 0x4d, 0xa6, + 0xb6, 0x3f, 0xc9, 0x3b, 0x98, 0x98, 0x10, 0x71, 0x18, 0xb8, 0x53, 0xa5, + 0x4a, 0xef, 0x14, 0xb3, 0xbc, 0x5f, 0x12, 0x99, 0xd5, 0x90, 0x7f, 0xcb, + 0x9c, 0x80, 0xfc, 0x40, 0xa4, 0xf8, 0xab, 0x33, 0x84, 0x15, 0x18, 0x82, + 0x5d, 0x52, 0xc0, 0x12, 0xa8, 0xb0, 0x28, 0x53, 0x40, 0xc0, 0x08, 0x5b, + 0x40, 0xb0, 0x7f, 0x96, 0x31, 0x20, 0x47, 0x8e, 0x35, 0xc8, 0xe7, 0x51, + 0xe6, 0x80, 0x80, 0xb5, 0xf6, 0x30, 0x1a, 0x23, 0x12, 0x43, 0x77, 0x98, + 0x34, 0xff, 0x73, 0x0c, 0x82, 0x88, 0x47, 0x59, 0x04, 0x41, 0x46, 0x98, + 0x04, 0xc1, 0xfd, 0xb3, 0x6c, 0x82, 0x58, 0x72, 0x8c, 0x42, 0xbd, 0x88, + 0xb2, 0x0a, 0x82, 0xac, 0x33, 0x0b, 0xe8, 0x24, 0x4c, 0xe0, 0x7f, 0xb3, + 0x55, 0x00, 0xad, 0xb8, 0x6e, 0x02, 0x00, 0x63, 0xba, 0x09, 0x00, 0xfb, + 0x87, 0x75, 0x13, 0xc8, 0x91, 0x6b, 0x11, 0xf4, 0x3c, 0xae, 0x9b, 0x00, + 0xc0, 0xda, 0x6e, 0x62, 0xbf, 0xaf, 0x83, 0xfe, 0x3b, 0xfb, 0x08, 0x8a, + 0x15, 0x4a, 0xa1, 0x42, 0xdd, 0xed, 0x1b, 0x2d, 0x8e, 0x68, 0xb7, 0x5d, + 0x1c, 0xf3, 0x5c, 0xf9, 0x50, 0xa0, 0x0b, 0x6d, 0x17, 0x47, 0xf4, 0x43, + 0xed, 0x97, 0x3e, 0xc7, 0x13, 0x84, 0x63, 0xc1, 0x82, 0x7f, 0xd2, 0x7d, + 0xf2, 0x63, 0xfd, 0xe2, 0x51, 0x40, 0xa0, 0x9b, 0x12, 0x5b, 0xab, 0x78, + 0xb6, 0x49, 0xa7, 0x19, 0x74, 0x6f, 0x98, 0x0f, 0x46, 0xb5, 0xf0, 0xa9, + 0xe2, 0x90, 0x58, 0x64, 0x2e, 0xef, 0x69, 0x77, 0x46, 0xf3, 0xc9, 0x95, + 0xb6, 0xd3, 0x0b, 0x9b, 0x90, 0xe4, 0x35, 0x41, 0xcf, 0xc5, 0xfe, 0xa4, + 0x64, 0xaa, 0x5c, 0x49, 0x6f, 0x09, 0x45, 0x9c, 0x0b, 0x6f, 0xb5, 0x1e, + 0xf5, 0xf2, 0x06, 0x3c, 0x9b, 0x52, 0xc0, 0xd9, 0x4d, 0xc5, 0x6c, 0x52, + 0x45, 0x7e, 0x95, 0x5c, 0x87, 0x38, 0x77, 0x35, 0x8a, 0xa5, 0x39, 0x3e, + 0xaf, 0xf5, 0xfd, 0x41, 0x39, 0x74, 0x10, 0x94, 0xba, 0xbc, 0xd4, 0x58, + 0xef, 0x41, 0x27, 0xdb, 0x30, 0x76, 0x87, 0x25, 0xad, 0x47, 0x9c, 0x5a, + 0xbe, 0x9c, 0x33, 0xf3, 0x30, 0x68, 0xbc, 0xef, 0xab, 0x8f, 0xca, 0x74, + 0x46, 0xe6, 0xd2, 0xeb, 0xb7, 0xf7, 0xa2, 0x73, 0x9b, 0x75, 0x36, 0x02, + 0xa5, 0x27, 0xf7, 0xf5, 0x67, 0x1f, 0x93, 0xde, 0xb3, 0xdc, 0xbd, 0x5e, + 0x58, 0xce, 0xed, 0xbb, 0x94, 0x53, 0x93, 0xcb, 0xbb, 0x63, 0xb1, 0xb8, + 0x98, 0xcc, 0x97, 0x8d, 0xe7, 0x4b, 0x43, 0x84, 0x52, 0x36, 0xaf, 0xb0, + 0xdc, 0x7e, 0x53, 0x8b, 0x10, 0xad, 0x83, 0xb6, 0x5a, 0xe6, 0xfb, 0x88, + 0x41, 0x19, 0x5a, 0x99, 0xce, 0x01, 0xc2, 0x79, 0x76, 0x4d, 0x60, 0x75, + 0xac, 0x30, 0xf4, 0xcd, 0xfc, 0x27, 0xec, 0x5c, 0x52, 0xf2, 0x10, 0x7b, + 0x0e, 0x63, 0xb1, 0x42, 0x97, 0x0e, 0x02, 0xe9, 0x68, 0x30, 0xee, 0x0f, + 0x46, 0xfb, 0xfd, 0x77, 0xc7, 0x8f, 0x1f, 0xf7, 0x1f, 0x84, 0xe1, 0x76, + 0x14, 0xdc, 0xde, 0xa3, 0x87, 0x75, 0x70, 0x7b, 0x0a, 0x6e, 0x34, 0xda, + 0xed, 0xf7, 0xb7, 0x46, 0x70, 0xfe, 0x1d, 0x13, 0x92, 0xb0, 0x5c, 0xad, + 0x16, 0xd3, 0x49, 0x8b, 0xc6, 0x43, 0x85, 0xc6, 0x50, 0x3e, 0x5b, 0xad, + 0xca, 0xec, 0x3e, 0x08, 0xdb, 0x2c, 0xab, 0x5a, 0x49, 0x41, 0xe7, 0x14, + 0xfc, 0x6d, 0xbc, 0x87, 0xbd, 0xf8, 0xc6, 0x9b, 0xa3, 0xd1, 0x68, 0x23, + 0x79, 0x02, 0x5f, 0x9e, 0x3d, 0x7b, 0xb6, 0x11, 0x43, 0x99, 0x58, 0xbe, + 0x3f, 0xc2, 0xe4, 0x98, 0xdb, 0x8d, 0xba, 0xdd, 0x9e, 0x30, 0x76, 0x7a, + 0x73, 0x7b, 0x42, 0x28, 0xd5, 0x9e, 0x14, 0x56, 0xa8, 0x3d, 0xe1, 0x3b, + 0x1d, 0xb2, 0xd5, 0x66, 0xa0, 0x4b, 0x0b, 0xb8, 0x33, 0x4b, 0x8c, 0x51, + 0x13, 0x39, 0x24, 0xd9, 0x0a, 0xf2, 0x11, 0x0f, 0x68, 0x05, 0x6d, 0xac, + 0x59, 0x2b, 0x08, 0xa5, 0xb4, 0xa2, 0xb0, 0x42, 0x5a, 0xc1, 0x77, 0x26, + 0x64, 0x77, 0xad, 0x08, 0xee, 0x14, 0x9d, 0x78, 0xad, 0x48, 0xc7, 0xc3, + 0x36, 0x6d, 0x09, 0x01, 0x62, 0x48, 0xab, 0x03, 0xca, 0xbb, 0xa7, 0xcc, + 0xdb, 0x83, 0xf7, 0x45, 0x5b, 0x4c, 0xe9, 0xef, 0x91, 0x3a, 0xac, 0x10, + 0xee, 0x4d, 0x31, 0x6a, 0xc1, 0x71, 0x8f, 0xf4, 0x61, 0xfd, 0xd2, 0x9d, + 0x7d, 0xe9, 0x8a, 0x51, 0x66, 0xd7, 0xe5, 0x16, 0xdd, 0x2c, 0x10, 0x8d, + 0xf1, 0x34, 0x5b, 0x0b, 0x47, 0xba, 0x04, 0x1e, 0x31, 0xcd, 0x04, 0xa3, + 0x5a, 0x62, 0x38, 0xa4, 0xd8, 0x11, 0x13, 0x51, 0xff, 0xd9, 0x03, 0xa6, + 0x0a, 0x3f, 0x5a, 0xc4, 0xf8, 0xf6, 0xf0, 0xb5, 0x0b, 0x5e, 0x6a, 0x07, + 0xfc, 0x7a, 0x88, 0x66, 0xd0, 0xb7, 0x07, 0xfe, 0x04, 0x04, 0xb8, 0xf4, + 0x34, 0x0d, 0x13, 0xe3, 0xf1, 0xd8, 0x3b, 0x08, 0xdd, 0x46, 0x18, 0x89, + 0x3a, 0x30, 0xc7, 0x80, 0xb0, 0xdd, 0x06, 0xa4, 0x5a, 0xf2, 0x22, 0x84, + 0xce, 0x3d, 0x10, 0x26, 0x67, 0x9d, 0xfb, 0x21, 0x8d, 0x6e, 0x3c, 0xf7, + 0x43, 0x19, 0x1d, 0x7c, 0xee, 0x89, 0xb4, 0x08, 0x5e, 0x72, 0x3f, 0xb4, + 0x8b, 0x75, 0x76, 0x5f, 0xd5, 0xa8, 0x7a, 0x83, 0x6e, 0xa4, 0x9d, 0x51, + 0xbf, 0x8c, 0x58, 0x5a, 0x00, 0x90, 0x31, 0xe6, 0x97, 0xc1, 0x85, 0x05, + 0xbc, 0xd2, 0xe1, 0xfe, 0xc4, 0xaa, 0x82, 0x18, 0x93, 0x54, 0xe2, 0x87, + 0x7b, 0x45, 0x64, 0x08, 0xbb, 0x1e, 0x6d, 0x3a, 0xf0, 0x72, 0x19, 0x43, + 0x5d, 0xec, 0x76, 0x34, 0x2f, 0x1d, 0x5d, 0xea, 0xad, 0xd6, 0xf3, 0x77, + 0xbc, 0x90, 0xad, 0xe5, 0x46, 0x8c, 0x78, 0xaf, 0x26, 0xe0, 0xbc, 0x06, + 0xfb, 0x69, 0xe2, 0x42, 0x5f, 0xda, 0x0f, 0x1b, 0x4b, 0x11, 0x65, 0x2d, + 0x40, 0xd5, 0x32, 0x98, 0x22, 0x68, 0x31, 0x04, 0x6d, 0xc0, 0xb6, 0xd9, + 0x5f, 0xf1, 0x52, 0x83, 0x52, 0x8c, 0x52, 0x5b, 0xcb, 0x2b, 0x47, 0x70, + 0xca, 0x10, 0x73, 0x36, 0x39, 0xc9, 0x64, 0x1c, 0xe9, 0x36, 0x81, 0xdd, + 0xd4, 0x6a, 0x38, 0x1c, 0x49, 0x48, 0x4d, 0xf1, 0x1b, 0x40, 0xb0, 0x42, + 0x9b, 0x40, 0xca, 0x65, 0x33, 0x44, 0x11, 0x00, 0x01, 0xef, 0xe0, 0xb8, + 0x26, 0x25, 0x12, 0xd0, 0x79, 0xea, 0x86, 0xae, 0x2e, 0xaa, 0xaa, 0xb9, + 0xdb, 0x59, 0x80, 0xba, 0xd1, 0x75, 0xd8, 0xcc, 0x9f, 0x83, 0x37, 0xc9, + 0xa5, 0xf5, 0xb3, 0x5b, 0x2d, 0x79, 0x6e, 0xc3, 0xd6, 0x7e, 0xd2, 0xb3, + 0xaf, 0x56, 0x01, 0x70, 0xe5, 0x2a, 0xae, 0x6e, 0x52, 0xf6, 0x5d, 0xaf, + 0x6d, 0xfa, 0x33, 0x69, 0x26, 0x0f, 0x0e, 0xf9, 0x4e, 0xa3, 0x73, 0x21, + 0x05, 0x5f, 0x64, 0x22, 0xf6, 0x22, 0xb8, 0xac, 0x67, 0x05, 0x39, 0xe5, + 0xaa, 0x84, 0x42, 0x89, 0xb0, 0xbf, 0x42, 0x43, 0x32, 0x2f, 0xda, 0x5c, + 0x4c, 0xd6, 0xce, 0x25, 0x1b, 0xfe, 0xb3, 0x7d, 0xcd, 0x1d, 0x3e, 0x1b, + 0x3a, 0x34, 0xe5, 0x68, 0xae, 0x5f, 0x57, 0x8f, 0x93, 0xcb, 0x9a, 0x2a, + 0x19, 0x6d, 0xe7, 0xcf, 0x4d, 0xe0, 0xf4, 0x49, 0x5c, 0x98, 0x2d, 0xc9, + 0x55, 0xdb, 0xa8, 0x07, 0x66, 0xbd, 0x91, 0x6d, 0xf8, 0x5d, 0xae, 0xa5, + 0xd8, 0xd2, 0xdd, 0xba, 0xd7, 0x77, 0xaa, 0x95, 0x2e, 0x57, 0xd8, 0xd5, + 0x3a, 0x59, 0x2c, 0xfe, 0xaa, 0x1a, 0x45, 0xbd, 0x0a, 0xed, 0x24, 0x87, + 0x6d, 0xaa, 0xf7, 0xc0, 0x4f, 0x8e, 0x00, 0x4c, 0xdd, 0xd0, 0xa3, 0x6e, + 0xea, 0xf9, 0x3b, 0xad, 0xe3, 0x30, 0xf4, 0xde, 0x95, 0xa2, 0x5e, 0x88, + 0x5b, 0x77, 0x5b, 0xb6, 0xf1, 0xee, 0xae, 0x31, 0xfb, 0x68, 0xd3, 0x55, + 0xfa, 0x8e, 0xb5, 0xea, 0xfa, 0x3c, 0x3e, 0x19, 0x83, 0x52, 0xac, 0x21, + 0xce, 0xba, 0x19, 0x74, 0xc7, 0xcb, 0xb2, 0x38, 0x53, 0x8e, 0x31, 0xe3, + 0x16, 0x56, 0x1b, 0xd7, 0x29, 0xe9, 0x35, 0x76, 0x87, 0x2b, 0xc9, 0x36, + 0x6c, 0x68, 0x2c, 0xf0, 0xb7, 0x88, 0x89, 0x25, 0x8f, 0x61, 0xf5, 0x65, + 0xdc, 0x3a, 0x17, 0x7a, 0xcc, 0x5b, 0x5e, 0x17, 0xc5, 0x0c, 0x63, 0x79, + 0xdf, 0x0c, 0x12, 0x4c, 0x82, 0x09, 0x32, 0x35, 0xde, 0xb3, 0x91, 0xe5, + 0x4b, 0x02, 0x55, 0x55, 0x5f, 0x1b, 0xc7, 0xd6, 0x40, 0x56, 0x3d, 0x0f, + 0xce, 0x32, 0x53, 0x28, 0x16, 0xc7, 0x4b, 0x75, 0x8b, 0x8c, 0xce, 0x02, + 0xdf, 0x9c, 0x9c, 0x8e, 0x1f, 0x8e, 0x1f, 0xd2, 0x61, 0xe0, 0x9b, 0xbb, + 0x27, 0x93, 0xb3, 0xbd, 0xed, 0x1e, 0x4f, 0xb1, 0x3e, 0x5c, 0xce, 0x2f, + 0x26, 0x24, 0xc4, 0xbc, 0x20, 0x86, 0x4f, 0xc5, 0xfd, 0x6e, 0x52, 0x01, + 0x39, 0x75, 0xa7, 0x78, 0xd9, 0x4e, 0xdc, 0x47, 0x4b, 0xa0, 0x94, 0x11, + 0x7e, 0xe9, 0xfb, 0xae, 0xce, 0xf4, 0x40, 0x0d, 0xe8, 0x05, 0x4a, 0x64, + 0x64, 0x09, 0xfe, 0x94, 0xc6, 0x11, 0x77, 0x6e, 0x0c, 0x62, 0xa2, 0x6f, + 0x48, 0x6e, 0xa5, 0x4a, 0x39, 0xf6, 0xa3, 0x9e, 0x7c, 0x1a, 0x8c, 0x83, + 0xe2, 0x3d, 0x2e, 0xe0, 0xc7, 0x55, 0xa1, 0xb2, 0x81, 0x73, 0x7a, 0x47, + 0x37, 0x8d, 0x77, 0x32, 0x42, 0xc9, 0xc4, 0x5b, 0x2d, 0x2d, 0x78, 0x32, + 0x96, 0xcf, 0x6a, 0x52, 0xe2, 0x33, 0x10, 0x65, 0x8d, 0xe5, 0xc4, 0x92, + 0x66, 0xf6, 0x34, 0x75, 0x27, 0x71, 0xb1, 0x30, 0xaf, 0x25, 0x9a, 0xb7, + 0x52, 0x28, 0x03, 0x6c, 0xb2, 0x5e, 0x95, 0x60, 0x0b, 0x73, 0x18, 0xc0, + 0x6e, 0x28, 0xcf, 0xb0, 0xc6, 0x70, 0xa1, 0xdd, 0x0c, 0xf3, 0xe6, 0x5c, + 0xe4, 0xeb, 0xc0, 0x29, 0x3e, 0x74, 0xc2, 0x77, 0xc2, 0x33, 0x99, 0x2d, + 0x99, 0x44, 0x4e, 0x7a, 0x9f, 0x4f, 0x96, 0x97, 0x54, 0x12, 0x3d, 0x3d, + 0x7d, 0xf2, 0xa4, 0x86, 0x59, 0xba, 0xd9, 0xf8, 0xfa, 0xc7, 0x2c, 0x5b, + 0x3f, 0x25, 0x60, 0x21, 0xec, 0xad, 0x36, 0x61, 0x6f, 0x64, 0x0f, 0x6a, + 0xe1, 0xe8, 0x58, 0x07, 0x0b, 0x67, 0x8f, 0xc4, 0xfe, 0xc1, 0x58, 0xf1, + 0xd4, 0xae, 0x8d, 0x99, 0xc6, 0x10, 0x20, 0xa9, 0xe9, 0x98, 0x53, 0x4f, + 0x78, 0x1a, 0x9a, 0x7a, 0xb6, 0x9e, 0x76, 0x02, 0xad, 0x86, 0xae, 0xc1, + 0xbc, 0x86, 0x24, 0xa5, 0x0a, 0x56, 0x7d, 0xbd, 0x81, 0x00, 0x4d, 0xb6, + 0x10, 0x01, 0x86, 0xae, 0x04, 0xb0, 0xc6, 0x92, 0x07, 0xda, 0x97, 0x18, + 0x4e, 0x9d, 0x06, 0x20, 0x01, 0x07, 0x86, 0x2f, 0x7e, 0x06, 0x7c, 0x34, + 0x94, 0xf4, 0x07, 0x4a, 0x7a, 0x01, 0xcd, 0xa6, 0x83, 0x77, 0x12, 0x6c, + 0xd3, 0xc1, 0x67, 0xf2, 0x5e, 0xc7, 0x26, 0x34, 0x8f, 0x0b, 0x27, 0x1e, + 0x02, 0x07, 0xa1, 0x73, 0xaf, 0x07, 0x03, 0x47, 0xa4, 0x04, 0xb9, 0x48, + 0x53, 0xc9, 0xfc, 0x91, 0xb3, 0xaa, 0xe1, 0xa6, 0xfe, 0x6c, 0xbc, 0x60, + 0xa3, 0x93, 0xfc, 0xf4, 0x72, 0xbe, 0x5c, 0xc1, 0x57, 0x6e, 0xce, 0x50, + 0x7a, 0xf8, 0x02, 0xf2, 0xd3, 0x8a, 0x3a, 0x2a, 0x8a, 0x4d, 0x83, 0xe4, + 0x04, 0x32, 0x48, 0xdf, 0x26, 0x10, 0x36, 0x5a, 0x19, 0x26, 0x12, 0x1f, + 0x08, 0x24, 0xa7, 0x64, 0x8c, 0xa9, 0x43, 0x2d, 0xf5, 0xd0, 0x8e, 0x98, + 0x5b, 0xcf, 0x60, 0x76, 0x1a, 0xcf, 0x5f, 0x44, 0x8b, 0x79, 0xf0, 0xc0, + 0xc2, 0xf9, 0x73, 0x6d, 0xc7, 0xe2, 0x5e, 0xef, 0xa9, 0x9d, 0xdf, 0xbd, + 0x9e, 0x1f, 0xc9, 0x0c, 0xe7, 0xf2, 0x00, 0x2a, 0xb7, 0x49, 0x08, 0x7b, + 0x1e, 0x71, 0xe0, 0xd5, 0x36, 0xf5, 0x56, 0xd1, 0xea, 0xfe, 0x18, 0xda, + 0xd7, 0xbd, 0x68, 0x7c, 0x38, 0xbc, 0x57, 0x8d, 0xff, 0x59, 0xe5, 0xa9, + 0xa6, 0xd9, 0xd4, 0xd3, 0xbe, 0x77, 0x98, 0x70, 0x07, 0xe7, 0x61, 0x24, + 0x36, 0x6c, 0xda, 0x6d, 0x54, 0xdd, 0xd1, 0x94, 0x24, 0xba, 0xee, 0x9e, + 0x11, 0xf4, 0x6a, 0x19, 0x59, 0x69, 0xb7, 0x11, 0x37, 0xe5, 0xa1, 0x17, + 0xa9, 0x46, 0x74, 0x7d, 0xfc, 0x25, 0x35, 0xb1, 0x5e, 0x36, 0x19, 0x48, + 0x95, 0x02, 0x98, 0xd5, 0xa3, 0xf8, 0xb1, 0x89, 0x49, 0x0e, 0xcf, 0x26, + 0xf3, 0x45, 0xc6, 0xf7, 0xa5, 0x83, 0xba, 0x25, 0x86, 0x4d, 0x96, 0x1d, + 0x86, 0x4d, 0x76, 0xeb, 0xfb, 0x56, 0x91, 0xf2, 0x3c, 0xd0, 0x97, 0x36, + 0x2e, 0xa5, 0xc2, 0x01, 0x9a, 0xf6, 0x1f, 0xde, 0x4f, 0x80, 0xa6, 0xfd, + 0x87, 0x77, 0x17, 0xa0, 0xc9, 0x8a, 0xb2, 0x40, 0xc1, 0x9a, 0x40, 0x33, + 0x05, 0x68, 0x46, 0x1f, 0x5a, 0xbf, 0x3d, 0xcf, 0x96, 0x62, 0x50, 0x65, + 0x95, 0xce, 0x0b, 0x9a, 0x81, 0x0d, 0x28, 0x44, 0x39, 0x5d, 0x33, 0x25, + 0xad, 0xcb, 0xe1, 0x17, 0x9e, 0xe6, 0x3f, 0x67, 0xb9, 0xaf, 0x36, 0x78, + 0x44, 0x70, 0x63, 0x81, 0xbb, 0x36, 0x5e, 0xd5, 0x13, 0x95, 0xe6, 0x2e, + 0xf1, 0xf4, 0xf4, 0xd9, 0x6e, 0xb0, 0x15, 0x02, 0xb1, 0xf3, 0x68, 0x8b, + 0xa1, 0xff, 0xb9, 0xfc, 0x95, 0x52, 0x5b, 0x63, 0xa7, 0xa9, 0xb7, 0x7a, + 0xfd, 0x01, 0x4d, 0x7a, 0xb7, 0xb1, 0xac, 0x16, 0x1d, 0x17, 0xcf, 0x54, + 0xa4, 0x15, 0xb7, 0xe8, 0x25, 0xe2, 0x5a, 0x89, 0xa4, 0xdb, 0x69, 0xe0, + 0x89, 0x30, 0x41, 0xdb, 0x80, 0x41, 0x09, 0x6f, 0xb7, 0x24, 0x11, 0x6f, + 0xc5, 0x40, 0x5c, 0x98, 0x71, 0x4c, 0x01, 0x5d, 0x4d, 0xf9, 0x2b, 0x8c, + 0x97, 0x6e, 0x1c, 0x78, 0x87, 0xf2, 0xd3, 0x70, 0xf5, 0xcb, 0x45, 0xd4, + 0x18, 0x0d, 0xa0, 0x1d, 0xea, 0x53, 0x89, 0xba, 0xd3, 0x1e, 0xf5, 0x57, + 0x89, 0xba, 0xab, 0xa1, 0xde, 0xde, 0x6b, 0x0b, 0xa4, 0x59, 0x42, 0xdb, + 0x26, 0x28, 0x16, 0x42, 0x8d, 0x8d, 0xd0, 0x8e, 0x16, 0x43, 0xc9, 0x83, + 0xaa, 0xf6, 0xe6, 0x6d, 0x93, 0x5e, 0xa1, 0x3f, 0x5b, 0xcd, 0x12, 0x1a, + 0x11, 0x8b, 0x90, 0x14, 0xf4, 0x56, 0x97, 0x82, 0x1e, 0x78, 0x45, 0xa1, + 0x37, 0xba, 0x30, 0x2a, 0x88, 0x0c, 0x7d, 0xb6, 0x15, 0x09, 0xa7, 0x0e, + 0xee, 0x98, 0x58, 0xe6, 0x37, 0x4f, 0xe9, 0xe2, 0xe6, 0xfb, 0x87, 0xda, + 0x18, 0xb2, 0xc9, 0xeb, 0x66, 0xe2, 0xac, 0xe5, 0x84, 0x28, 0xd8, 0xaf, + 0xc0, 0x5f, 0xf3, 0x64, 0xb3, 0x53, 0xcf, 0x12, 0xd5, 0xbb, 0xa8, 0x5e, + 0xac, 0xb5, 0x40, 0xd6, 0x98, 0xdf, 0xa5, 0xec, 0x5e, 0x97, 0x10, 0x42, + 0xb2, 0x5c, 0x9a, 0x35, 0x8d, 0x92, 0x07, 0xfe, 0x1a, 0x82, 0xe7, 0x31, + 0xf8, 0x63, 0x2d, 0x0a, 0xd1, 0xc8, 0x09, 0x43, 0x14, 0xb0, 0x65, 0xe9, + 0x8e, 0x21, 0xc2, 0xc9, 0x45, 0xb4, 0xd1, 0x2a, 0x30, 0x43, 0x54, 0xe4, + 0x77, 0xb6, 0x6c, 0x24, 0x2f, 0x49, 0x53, 0x2c, 0xac, 0x6c, 0x13, 0x69, + 0xeb, 0x1c, 0x82, 0xa1, 0xc6, 0x45, 0x76, 0xaf, 0x30, 0xb7, 0xb6, 0xa2, + 0x36, 0x45, 0x37, 0xa8, 0xab, 0xde, 0x50, 0x87, 0xbc, 0x2a, 0x6b, 0x3e, + 0x54, 0xd9, 0x12, 0x5a, 0xab, 0x7b, 0xec, 0x64, 0x8a, 0x00, 0xe5, 0x03, + 0xbb, 0xf0, 0x6f, 0x9b, 0x80, 0xf2, 0x78, 0x06, 0x2a, 0x72, 0x83, 0x14, + 0xe5, 0x24, 0x2f, 0x0b, 0x0a, 0x74, 0xd1, 0x18, 0xd0, 0x1a, 0xf8, 0xcc, + 0x9c, 0x60, 0x88, 0xbc, 0x6b, 0x9c, 0x1c, 0x2a, 0xa8, 0x88, 0x40, 0xf3, + 0x57, 0xc5, 0xf8, 0xd1, 0x68, 0x7c, 0x76, 0xfd, 0x2a, 0x4c, 0xd4, 0x82, + 0x39, 0x34, 0xf1, 0xe2, 0x8a, 0x21, 0x5f, 0x8d, 0xf8, 0x00, 0xe8, 0x7a, + 0xb2, 0x37, 0xc6, 0x0f, 0x1c, 0xac, 0xc8, 0x34, 0xda, 0x22, 0x0c, 0x0f, + 0x05, 0x8c, 0xf1, 0xc0, 0xd9, 0xf9, 0xe7, 0x98, 0x6a, 0xf3, 0x82, 0xc7, + 0x23, 0x0f, 0x27, 0xd8, 0x8b, 0x16, 0xca, 0xc9, 0x1c, 0x68, 0x11, 0x6a, + 0x90, 0x8e, 0xf6, 0x80, 0x6b, 0x45, 0xb4, 0xd2, 0x1b, 0xc6, 0x14, 0xd0, + 0x2c, 0x28, 0x1d, 0xca, 0xb7, 0x93, 0xb1, 0x0a, 0x9f, 0xcd, 0x04, 0x30, + 0x19, 0x76, 0x23, 0x46, 0x6e, 0x60, 0x8c, 0x22, 0x30, 0x66, 0x06, 0xc6, + 0x38, 0x02, 0x63, 0x6a, 0x60, 0xec, 0x44, 0x60, 0x80, 0x57, 0x9e, 0xb8, + 0xa9, 0xfd, 0x72, 0x05, 0x89, 0xf1, 0xd3, 0x23, 0x5d, 0xa6, 0x81, 0xc1, + 0xef, 0xc0, 0xe0, 0x65, 0x60, 0x94, 0x73, 0xdc, 0x6f, 0x2e, 0xe9, 0x6a, + 0x6c, 0x30, 0xb7, 0x1b, 0xc1, 0x5c, 0x6e, 0xa2, 0xec, 0x45, 0xa0, 0xcc, + 0x4c, 0x94, 0xfd, 0x08, 0x94, 0xa9, 0x89, 0xf2, 0x30, 0x02, 0x05, 0xb4, + 0x36, 0x0e, 0xa8, 0x6d, 0xd7, 0x50, 0xcd, 0x9e, 0xf1, 0x6b, 0x1f, 0x7f, + 0x71, 0x41, 0x71, 0x6a, 0xdb, 0x31, 0xb8, 0x7b, 0x14, 0xc1, 0x5d, 0x6e, + 0xa2, 0x3c, 0x8e, 0x40, 0x99, 0x99, 0x28, 0xa3, 0x18, 0x83, 0x9e, 0x5a, + 0x38, 0x31, 0x26, 0x0d, 0x8a, 0xdb, 0x09, 0x28, 0xee, 0x91, 0xa1, 0x9c, + 0xc7, 0xa6, 0xf5, 0x59, 0xc6, 0x38, 0x02, 0xd5, 0xdd, 0x45, 0x87, 0x12, + 0x4a, 0x4e, 0x1b, 0xee, 0xba, 0x83, 0x01, 0xcf, 0x36, 0xf3, 0x00, 0x43, + 0x49, 0x38, 0xc8, 0x19, 0xe8, 0x3d, 0x84, 0x14, 0x0c, 0x6c, 0x06, 0x7a, + 0x0f, 0xe1, 0x84, 0x83, 0x99, 0x81, 0x19, 0x49, 0xa4, 0x88, 0x2e, 0xb2, + 0x46, 0x31, 0xe3, 0x4e, 0x8a, 0x19, 0x77, 0xd2, 0xcc, 0xb8, 0x8b, 0x6a, + 0xc6, 0x9d, 0x74, 0x33, 0x6e, 0xa5, 0x9c, 0x80, 0x6e, 0x76, 0x3a, 0xe9, + 0x66, 0xa7, 0x93, 0x6e, 0x76, 0xba, 0xe8, 0x06, 0x91, 0x5a, 0xab, 0x66, + 0x27, 0x5e, 0x35, 0xb7, 0xde, 0x09, 0xa0, 0x48, 0xaa, 0xd4, 0x6a, 0x02, + 0x58, 0x93, 0x78, 0xe8, 0xb5, 0x13, 0xb4, 0xcb, 0xce, 0x3d, 0x14, 0x13, + 0x59, 0x2c, 0x18, 0x4a, 0x2c, 0x62, 0xc6, 0x50, 0x93, 0xba, 0xe8, 0x75, + 0x73, 0xf2, 0xa2, 0xa8, 0x48, 0x60, 0xc1, 0xc8, 0x5f, 0xd1, 0xfc, 0xad, + 0x57, 0x79, 0x23, 0x7f, 0x9e, 0xfc, 0x47, 0x8d, 0xfc, 0x01, 0x4c, 0x88, + 0x3f, 0x78, 0x15, 0xcf, 0x9f, 0x3f, 0x81, 0xd2, 0xeb, 0xe6, 0x14, 0x4a, + 0x51, 0xd1, 0xb5, 0x82, 0xd1, 0xb4, 0xa2, 0xf9, 0x5b, 0x4f, 0xbc, 0x33, + 0xdf, 0xe6, 0x2c, 0x4c, 0x49, 0x4c, 0x1c, 0xac, 0x60, 0xdc, 0xab, 0x18, + 0xfe, 0x6a, 0xd2, 0x38, 0xbd, 0xae, 0x4b, 0xe4, 0x94, 0xc4, 0xc5, 0xab, + 0xf2, 0xc6, 0xa8, 0x8a, 0xaa, 0xd8, 0xbf, 0x2c, 0x11, 0x54, 0xdc, 0x9d, + 0x27, 0x4b, 0x8e, 0xbf, 0x20, 0xb9, 0x54, 0x92, 0xc4, 0x27, 0x17, 0x8a, + 0x13, 0xe8, 0xaa, 0x45, 0xa6, 0x21, 0xfa, 0x33, 0x7d, 0x17, 0xef, 0xa7, + 0x50, 0x6d, 0x73, 0x29, 0x6e, 0xa4, 0xdd, 0xae, 0x40, 0x9b, 0x97, 0x54, + 0xd1, 0xb0, 0xe3, 0x36, 0xc0, 0x3b, 0x75, 0xc0, 0x60, 0xd9, 0x51, 0x63, + 0x59, 0x7c, 0xa2, 0xb0, 0xd7, 0x35, 0xa9, 0xc2, 0x1a, 0xdb, 0x21, 0xc0, + 0x78, 0xad, 0x17, 0x9e, 0x47, 0xb6, 0x42, 0x8a, 0x84, 0x11, 0xdf, 0x0a, + 0x5b, 0xe7, 0x1f, 0x8b, 0x68, 0x83, 0xea, 0x6e, 0x60, 0x64, 0x54, 0xaa, + 0xf6, 0xd4, 0xc5, 0xdd, 0xc0, 0xc8, 0x20, 0x47, 0xed, 0xc9, 0xcb, 0xbb, + 0x81, 0x51, 0xd1, 0x72, 0xda, 0x53, 0x17, 0x37, 0x03, 0xeb, 0x43, 0xaf, + 0x1c, 0x24, 0x51, 0x46, 0x89, 0xa9, 0x32, 0xa0, 0x85, 0xb6, 0xda, 0x60, + 0x6b, 0x95, 0xed, 0x34, 0xff, 0x1f, 0xe5, 0x3a, 0x65, 0xd8, 0xe0, 0x82, + 0x32, 0xf1, 0xaf, 0x25, 0xc3, 0x29, 0xa4, 0xe9, 0x2f, 0x18, 0x24, 0x3a, + 0x50, 0x94, 0x4c, 0x35, 0xfd, 0x15, 0xfd, 0x0b, 0x24, 0x2d, 0xc8, 0xc6, + 0x8c, 0xd6, 0x5e, 0xd6, 0x0b, 0x8a, 0xcc, 0x9c, 0xaf, 0x16, 0x45, 0x18, + 0x50, 0x6d, 0x0a, 0x13, 0x82, 0x0d, 0xe7, 0xa4, 0x4d, 0xc7, 0x13, 0x5d, + 0xbd, 0xd8, 0xa8, 0x0b, 0x32, 0x7e, 0x45, 0xf3, 0xa2, 0x8a, 0xf8, 0x50, + 0xc9, 0x9e, 0x82, 0xbb, 0xca, 0x59, 0xc9, 0xb1, 0xc8, 0xc9, 0x00, 0x44, + 0x29, 0x3e, 0xe0, 0x50, 0x7b, 0x74, 0xf7, 0x7e, 0xdb, 0xdc, 0x7f, 0x82, + 0xd2, 0x5d, 0xc9, 0xd9, 0x1b, 0xf2, 0x33, 0x99, 0x06, 0x07, 0x1a, 0xa7, + 0xaf, 0xfa, 0xf8, 0xd4, 0x51, 0x9c, 0x71, 0xb7, 0xbd, 0x75, 0xd1, 0x6e, + 0x2f, 0xbf, 0x91, 0x5a, 0x75, 0xc3, 0xdd, 0x47, 0xd1, 0xeb, 0x32, 0x43, + 0x0e, 0xb5, 0x41, 0x3b, 0x17, 0xda, 0x0a, 0x37, 0x84, 0x13, 0xde, 0x9b, + 0xf1, 0x03, 0xb1, 0x25, 0xf0, 0xf9, 0x5e, 0xf0, 0x9a, 0xc6, 0x09, 0x5e, + 0x48, 0x4a, 0xe8, 0xfc, 0x85, 0x8f, 0x77, 0x5c, 0x4f, 0x14, 0x3a, 0xce, + 0x95, 0xe7, 0x36, 0x64, 0x57, 0xee, 0x31, 0xcd, 0x8b, 0x04, 0x81, 0xe8, + 0x60, 0x46, 0x01, 0x1e, 0xf8, 0x4f, 0x80, 0x0c, 0x62, 0xec, 0x8c, 0xa9, + 0x1e, 0xbd, 0x71, 0x08, 0xa7, 0xd5, 0x54, 0x48, 0x8c, 0xa3, 0x5e, 0xad, + 0xf3, 0x6b, 0x88, 0x4b, 0xdd, 0xb3, 0xa8, 0x5c, 0x11, 0xcf, 0xe4, 0xa9, + 0x04, 0x0e, 0x33, 0x9e, 0x33, 0x3b, 0x97, 0x63, 0xee, 0x05, 0xbd, 0xde, + 0x9f, 0xf2, 0x82, 0x91, 0x0c, 0x0b, 0x02, 0xca, 0x5b, 0x08, 0x6e, 0x53, + 0x91, 0xec, 0xdd, 0x97, 0xee, 0x41, 0x60, 0xd0, 0x99, 0x86, 0x00, 0x02, + 0xc2, 0x4d, 0xd7, 0x94, 0x61, 0x18, 0xec, 0x82, 0x06, 0x7d, 0x5e, 0x47, + 0xcc, 0x2e, 0x68, 0xb4, 0x0f, 0xd3, 0x19, 0xb1, 0x23, 0xaf, 0xb8, 0x8d, + 0xd3, 0x15, 0xaf, 0x63, 0x91, 0x38, 0x6d, 0xef, 0x54, 0x26, 0x21, 0xd6, + 0x17, 0x0a, 0x8d, 0xc3, 0x36, 0x9d, 0x5b, 0xab, 0x91, 0x06, 0xc6, 0x0d, + 0x05, 0x3e, 0x2d, 0xe3, 0x6e, 0x9d, 0x00, 0x9c, 0x19, 0xcf, 0x8f, 0xef, + 0x6c, 0x00, 0x8d, 0xf0, 0x95, 0x0d, 0x78, 0x49, 0xb7, 0x35, 0x5a, 0x0c, + 0x02, 0xdc, 0x72, 0xf4, 0x21, 0x4c, 0x1d, 0x60, 0x26, 0xa3, 0xe4, 0x97, + 0x5f, 0xf4, 0x47, 0xb4, 0xb5, 0x8c, 0x93, 0x22, 0x7a, 0xe4, 0x1e, 0x4d, + 0xee, 0x3d, 0xec, 0x03, 0x43, 0x62, 0x14, 0xf9, 0xfa, 0xc5, 0xcb, 0x2f, + 0x3e, 0x4f, 0xa0, 0xad, 0x7f, 0xfe, 0xc5, 0xc7, 0xcf, 0xec, 0x48, 0xfb, + 0x75, 0x47, 0xf8, 0xb2, 0x89, 0xfb, 0xaf, 0x32, 0x4a, 0xfc, 0x3b, 0xbf, + 0xcd, 0x28, 0xc8, 0x46, 0x5f, 0x6e, 0xf1, 0x2a, 0xec, 0x7d, 0xb1, 0xef, + 0xde, 0xec, 0x73, 0x74, 0x97, 0x03, 0x37, 0xb0, 0xe0, 0xa1, 0x47, 0x62, + 0xee, 0xed, 0x03, 0x37, 0x74, 0xc7, 0xe4, 0xeb, 0x97, 0x5f, 0x7c, 0xf9, + 0xd9, 0x87, 0xdf, 0x9b, 0x22, 0x4b, 0x43, 0x27, 0x78, 0x79, 0x63, 0x2f, + 0xa5, 0xa1, 0xca, 0xea, 0x7d, 0x83, 0x1d, 0x29, 0xcc, 0x6f, 0x82, 0xb0, + 0xe2, 0x54, 0x93, 0x81, 0xeb, 0x29, 0xd3, 0x39, 0x6f, 0x80, 0x32, 0xef, + 0x06, 0xd4, 0xca, 0xfa, 0x50, 0xc8, 0x2a, 0xcc, 0xee, 0xd5, 0xb7, 0x2f, + 0x04, 0xf2, 0x9f, 0xb3, 0x3a, 0xaf, 0x61, 0x28, 0x13, 0xec, 0x74, 0x2b, + 0xf0, 0xbf, 0xa5, 0xf3, 0x47, 0x42, 0xe7, 0x2f, 0xbf, 0xf9, 0xd7, 0x08, + 0x89, 0xc0, 0x6d, 0xa5, 0x7c, 0x2c, 0xbb, 0xb4, 0x67, 0xa3, 0xcd, 0x9d, + 0xd1, 0xbf, 0x46, 0xd2, 0xf6, 0xd5, 0xb9, 0xbf, 0x2d, 0x05, 0xfd, 0x64, + 0x9e, 0x67, 0xe3, 0xed, 0xd1, 0xf8, 0x5f, 0x23, 0xab, 0x00, 0x6e, 0x4c, + 0x21, 0xf7, 0xa7, 0x25, 0x40, 0xe0, 0xbf, 0x4c, 0x04, 0x2b, 0xa1, 0x9a, + 0x3d, 0x0c, 0x6f, 0xb7, 0xba, 0x4f, 0xda, 0x5b, 0x9d, 0x9d, 0xb5, 0x8a, + 0x8e, 0xc1, 0x83, 0x4c, 0x27, 0x0d, 0xb6, 0xb5, 0x03, 0x57, 0x91, 0x2d, + 0x10, 0xc2, 0xa6, 0xef, 0x4e, 0xd1, 0x82, 0xa5, 0xc8, 0xb9, 0x5d, 0x73, + 0xd6, 0x64, 0x81, 0xd8, 0x65, 0x92, 0x29, 0x30, 0x83, 0xb3, 0x4c, 0x97, + 0x51, 0x96, 0xae, 0x03, 0x9f, 0x80, 0xd7, 0x6d, 0xb1, 0x40, 0x88, 0x6d, + 0xb9, 0xd4, 0x2c, 0x82, 0x39, 0x6c, 0x93, 0x33, 0x75, 0x6b, 0xab, 0x7b, + 0x5e, 0xd4, 0xc6, 0x5b, 0xd4, 0x8e, 0x1c, 0xc1, 0xab, 0xc4, 0x66, 0x3a, + 0xf6, 0x57, 0x58, 0xdc, 0x6b, 0x9e, 0xeb, 0x81, 0x56, 0xa6, 0x19, 0xcc, + 0x2a, 0x0b, 0x74, 0x38, 0x9e, 0x65, 0x79, 0x05, 0xa4, 0xb3, 0x63, 0x38, + 0xfa, 0x8d, 0xd8, 0x6e, 0xfd, 0xbe, 0x7a, 0x92, 0x82, 0x91, 0x3f, 0xd1, + 0xd4, 0x0b, 0xe6, 0x49, 0x4d, 0x70, 0xcb, 0xf0, 0x94, 0x80, 0x0b, 0x73, + 0xee, 0x27, 0xf1, 0x13, 0xe8, 0x12, 0x44, 0x23, 0x57, 0xc8, 0x2e, 0x2f, + 0xdb, 0xde, 0x79, 0x6c, 0xe3, 0x7e, 0x57, 0xe5, 0x48, 0x4e, 0x77, 0x04, + 0x65, 0x79, 0xa4, 0x38, 0x4b, 0x6d, 0x64, 0x38, 0xb8, 0xdc, 0xb1, 0xf0, + 0x3e, 0x00, 0x3c, 0xf6, 0x18, 0xf4, 0xa2, 0xb2, 0x13, 0x9c, 0x07, 0xff, + 0xed, 0x0a, 0x9f, 0xc1, 0x7c, 0x44, 0xa8, 0xa3, 0x11, 0xf8, 0xd1, 0xae, + 0x31, 0x55, 0x21, 0x6f, 0x62, 0x21, 0xec, 0xd5, 0xa3, 0x1f, 0xbe, 0x0c, + 0x0c, 0x7f, 0x07, 0xe3, 0xd7, 0xcc, 0xf8, 0x35, 0x3d, 0xee, 0x6b, 0xfd, + 0x4e, 0xb4, 0x17, 0x0a, 0xf3, 0x50, 0xc3, 0xc4, 0xd8, 0xe4, 0xc2, 0xfc, + 0x39, 0x33, 0x7f, 0x4e, 0xc7, 0xb1, 0x8c, 0xec, 0x04, 0x18, 0xa9, 0xe3, + 0x64, 0xc7, 0xe4, 0xc4, 0xfc, 0x39, 0x33, 0x7f, 0x4e, 0x77, 0x0c, 0x4e, + 0x6e, 0xf1, 0x53, 0xdc, 0x1c, 0x37, 0x92, 0x34, 0x3e, 0x55, 0x77, 0xc7, + 0xc9, 0xc3, 0x7b, 0xb2, 0xfc, 0x79, 0x52, 0x37, 0x57, 0xdf, 0xd0, 0x33, + 0x61, 0x0a, 0x68, 0x8a, 0x38, 0x24, 0xdd, 0xc3, 0x31, 0xe4, 0x20, 0x60, + 0x8b, 0x17, 0x88, 0xfb, 0x54, 0x3c, 0x4b, 0x37, 0xc6, 0xa7, 0x04, 0x67, + 0xdc, 0x10, 0xbe, 0x58, 0xaf, 0x96, 0x40, 0x58, 0xc8, 0x79, 0x52, 0xa9, + 0x23, 0xcf, 0xca, 0xcb, 0x7c, 0x99, 0xa4, 0xbd, 0x6d, 0x54, 0x84, 0x68, + 0xf7, 0xf0, 0x7a, 0xb3, 0x5c, 0xbd, 0x10, 0xb9, 0x79, 0x21, 0xee, 0x1f, + 0x8c, 0xa7, 0x94, 0x02, 0x75, 0x38, 0xc6, 0xe7, 0x5f, 0xaf, 0xd7, 0xb0, + 0x35, 0x3e, 0x29, 0xb2, 0xd4, 0xe9, 0x54, 0x58, 0x91, 0xf0, 0xc5, 0x29, + 0x82, 0x79, 0x50, 0x20, 0x70, 0xbe, 0xd1, 0x87, 0x52, 0x3d, 0x2f, 0x46, + 0xa1, 0x17, 0xe3, 0xd0, 0x0b, 0xa8, 0x80, 0xda, 0x04, 0xa8, 0xab, 0x5c, + 0x04, 0x41, 0x32, 0x9a, 0xcd, 0x1b, 0x9e, 0x4d, 0x31, 0x00, 0x30, 0x52, + 0xcd, 0xca, 0x5a, 0x25, 0xe4, 0xcd, 0x75, 0x4e, 0x9f, 0x1f, 0x8b, 0x54, + 0xf5, 0xa4, 0x01, 0xa6, 0x26, 0x40, 0x38, 0x92, 0x7b, 0xb9, 0xba, 0x3c, + 0x39, 0xbf, 0x58, 0xfd, 0x9c, 0x71, 0x67, 0xa5, 0xe8, 0x52, 0xd8, 0x2a, + 0x09, 0x3f, 0xc9, 0xa1, 0xee, 0xb8, 0xcb, 0x12, 0x19, 0x64, 0xed, 0x49, + 0xcf, 0xf5, 0x93, 0xe4, 0xf3, 0x49, 0x79, 0xbe, 0x49, 0xd3, 0x99, 0x54, + 0xc7, 0x7c, 0x89, 0xa5, 0xd0, 0x59, 0x11, 0x1c, 0x04, 0xcf, 0xb2, 0xef, + 0x92, 0x21, 0x50, 0xdf, 0x84, 0x2e, 0x12, 0xba, 0x8a, 0xcf, 0xb2, 0xb3, + 0xb2, 0x3f, 0x30, 0x29, 0xdd, 0xc4, 0x52, 0xfa, 0x9e, 0x29, 0xe1, 0xbb, + 0x75, 0x5f, 0xeb, 0x55, 0x95, 0xa9, 0x87, 0x85, 0xa7, 0xe0, 0x27, 0x28, + 0x78, 0x07, 0xc1, 0x44, 0x91, 0xdf, 0xc5, 0x70, 0x2e, 0x40, 0xbf, 0xf7, + 0xf3, 0xc6, 0xf5, 0xc8, 0x61, 0xab, 0xb1, 0x89, 0x50, 0x4b, 0x7b, 0x7e, + 0x01, 0x32, 0x52, 0x5a, 0x6e, 0xe0, 0x6b, 0xf3, 0x7a, 0x90, 0xe0, 0xc7, + 0x0d, 0xdc, 0x44, 0x80, 0xff, 0xfa, 0xe4, 0xb2, 0x8f, 0x84, 0x38, 0x40, + 0xe7, 0x2b, 0x49, 0x83, 0x8d, 0x9c, 0x1e, 0x58, 0x51, 0xd3, 0xa8, 0xc3, + 0x09, 0xf5, 0xc7, 0x10, 0x24, 0x03, 0xa3, 0x63, 0x98, 0x2f, 0x05, 0xbe, + 0x91, 0xce, 0x14, 0x4a, 0xe3, 0xf4, 0xb1, 0x90, 0x0c, 0x9e, 0x8b, 0xf7, + 0x00, 0xe7, 0x26, 0x28, 0xbb, 0x39, 0x3b, 0x90, 0x33, 0x1f, 0xe4, 0xc8, + 0x07, 0x39, 0xf5, 0x41, 0x8e, 0x7d, 0x90, 0x57, 0x1a, 0x24, 0x0f, 0xbd, + 0xec, 0x44, 0x67, 0x72, 0x64, 0xf9, 0xca, 0xb9, 0x4c, 0xb0, 0x4b, 0x9c, + 0x5b, 0xac, 0xeb, 0xab, 0xe0, 0x1e, 0x74, 0xf5, 0xef, 0x38, 0xd3, 0xab, + 0x3e, 0xf4, 0xba, 0xf9, 0x0c, 0x8c, 0xbe, 0x44, 0x9a, 0x96, 0x61, 0xf1, + 0xca, 0xdc, 0xe8, 0xf2, 0xd6, 0x57, 0x78, 0xbb, 0x76, 0x7b, 0x90, 0xc0, + 0x7f, 0xb2, 0xcf, 0xbe, 0x9a, 0x9f, 0x96, 0xe7, 0xd5, 0xaf, 0xf3, 0x0c, + 0x07, 0x7d, 0x6d, 0x14, 0x51, 0xb4, 0x63, 0xb2, 0x45, 0xe8, 0xa5, 0x12, + 0x9b, 0xf4, 0x3c, 0x35, 0xf3, 0x55, 0xdb, 0x40, 0xdf, 0xe2, 0xc8, 0x92, + 0x6a, 0x25, 0x56, 0x85, 0x6e, 0xbd, 0xfb, 0xae, 0x04, 0x7d, 0x37, 0xf9, + 0x18, 0x20, 0x0b, 0xd9, 0x82, 0x70, 0x48, 0x50, 0x2f, 0xb6, 0x58, 0x37, + 0x1a, 0x35, 0xa3, 0xfb, 0x3c, 0xc9, 0x40, 0xfe, 0xfc, 0xbb, 0xe4, 0xd0, + 0x90, 0x38, 0xd9, 0x4a, 0xc6, 0x07, 0x36, 0xd0, 0xf7, 0x00, 0x64, 0x28, + 0x42, 0x41, 0xb9, 0x57, 0x5c, 0x24, 0xd5, 0x81, 0xc2, 0x8c, 0xd2, 0x27, + 0x96, 0x44, 0x57, 0x1e, 0xbf, 0x82, 0xf3, 0xbe, 0xcb, 0xc2, 0x65, 0x69, + 0x77, 0x73, 0x4f, 0x03, 0x85, 0x03, 0x3f, 0x0d, 0x34, 0x35, 0x60, 0x87, + 0x70, 0xb5, 0xb5, 0x6f, 0xb2, 0x47, 0xe0, 0xc9, 0x74, 0x95, 0x83, 0xc5, + 0xe1, 0x43, 0xae, 0xfa, 0x69, 0x36, 0x9b, 0x2f, 0xbf, 0x84, 0x6e, 0x2b, + 0xed, 0xdb, 0xe0, 0xa2, 0xee, 0x4c, 0xf0, 0x49, 0x7e, 0xe2, 0xca, 0xa7, + 0x73, 0x43, 0xf6, 0x33, 0x86, 0x6a, 0xa1, 0xae, 0xf0, 0xcb, 0xe7, 0x03, + 0x71, 0xec, 0xc6, 0xc4, 0xa9, 0x2e, 0xf0, 0x62, 0x94, 0xc1, 0xd4, 0x93, + 0x24, 0x85, 0x3e, 0xaf, 0xa0, 0x97, 0xcb, 0x64, 0x42, 0x5d, 0x28, 0x02, + 0x49, 0x26, 0xde, 0xe8, 0x9b, 0x6c, 0x60, 0x1a, 0xf6, 0x6f, 0x49, 0xd8, + 0xc3, 0x64, 0xf7, 0xc0, 0x7c, 0x27, 0x6e, 0xa2, 0xbe, 0xc0, 0x25, 0x36, + 0xbc, 0xed, 0xbd, 0xb9, 0x4d, 0x7f, 0x3d, 0x2f, 0x54, 0xda, 0xb7, 0x1e, + 0xd3, 0xed, 0xc7, 0x4a, 0x1d, 0x15, 0xcf, 0x67, 0xf3, 0xc5, 0x42, 0xc4, + 0x03, 0x9a, 0x66, 0x93, 0xcb, 0x72, 0x7e, 0x76, 0xb9, 0x50, 0x61, 0x18, + 0x15, 0x48, 0x39, 0xf9, 0x31, 0x5b, 0xd2, 0xb5, 0x2c, 0xf2, 0x9d, 0x78, + 0x92, 0x9c, 0x97, 0xe5, 0xfa, 0x09, 0xdc, 0x0b, 0x2d, 0x61, 0x99, 0x0f, + 0x83, 0x6c, 0x7e, 0xb6, 0x58, 0x5d, 0x41, 0xb7, 0x74, 0xb1, 0xf5, 0xd3, + 0x65, 0x56, 0xd0, 0x79, 0xdd, 0xd6, 0xe8, 0xd1, 0x78, 0x7f, 0xef, 0xd1, + 0xf6, 0xee, 0xd6, 0xf4, 0x72, 0xbe, 0xc0, 0x63, 0xde, 0xe1, 0x64, 0x48, + 0x64, 0x87, 0x34, 0xa9, 0x1a, 0xce, 0x97, 0xc3, 0xf3, 0xf2, 0x62, 0xb1, + 0x67, 0xe5, 0x14, 0x82, 0xde, 0x61, 0x21, 0xfa, 0x18, 0xf9, 0xf5, 0x3d, + 0x98, 0x41, 0xee, 0x57, 0xbf, 0x1e, 0xd8, 0x93, 0x6b, 0xc0, 0x11, 0x6e, + 0x1d, 0x1f, 0x4a, 0xc4, 0x54, 0x00, 0x0e, 0x61, 0x02, 0xcc, 0x35, 0x05, + 0x16, 0x33, 0x7a, 0x64, 0x47, 0x4e, 0x86, 0x69, 0xa8, 0x42, 0x22, 0x9c, + 0x00, 0x78, 0xc8, 0xa2, 0xdc, 0xb7, 0x38, 0xdf, 0x78, 0xb9, 0x72, 0x6c, + 0x48, 0x81, 0xda, 0xb6, 0x66, 0x8e, 0xb0, 0x0a, 0xcb, 0x7d, 0x0a, 0x24, + 0xcc, 0xa7, 0xba, 0x4d, 0x5a, 0x6f, 0x58, 0x15, 0xd6, 0x0b, 0x10, 0xd6, + 0xf7, 0x98, 0x0c, 0x98, 0x1f, 0x29, 0x56, 0x43, 0x66, 0xe3, 0xbe, 0x45, + 0xeb, 0xa9, 0xec, 0xf1, 0xbc, 0x58, 0xa4, 0x30, 0x28, 0xa9, 0xba, 0xc2, + 0xe3, 0x56, 0xbc, 0x84, 0x8d, 0xe7, 0xe0, 0x6f, 0xf7, 0x7b, 0x01, 0xec, + 0x34, 0xae, 0xd0, 0x5b, 0x36, 0x59, 0xec, 0x4c, 0xda, 0x34, 0xf9, 0xf2, + 0x7c, 0x5e, 0x6c, 0xd6, 0xb7, 0xf2, 0x5c, 0x28, 0x53, 0xd7, 0x1f, 0xab, + 0x0c, 0xa8, 0x5f, 0x22, 0x1c, 0x78, 0x2d, 0x9c, 0xfc, 0x78, 0x35, 0xc7, + 0x16, 0x1f, 0xd3, 0x73, 0x00, 0x97, 0xf1, 0x3d, 0x07, 0x6a, 0x02, 0x3b, + 0x05, 0x89, 0xce, 0xbd, 0xe1, 0xc5, 0xcd, 0xab, 0x19, 0x72, 0x07, 0x8f, + 0x79, 0x12, 0x25, 0x53, 0x68, 0x7d, 0x06, 0x5d, 0xc5, 0x24, 0xff, 0x54, + 0xbc, 0x56, 0x03, 0xdc, 0xe8, 0x21, 0x7e, 0x4a, 0xd2, 0x3a, 0x3a, 0x9e, + 0xac, 0x8b, 0x0b, 0x1f, 0xe0, 0x5f, 0x85, 0xc0, 0x70, 0x0c, 0x8a, 0x59, + 0x06, 0x1a, 0x41, 0x61, 0x5a, 0xa6, 0x8e, 0x3d, 0xa9, 0xe3, 0x08, 0xd4, + 0xbf, 0x4e, 0xe0, 0x20, 0x08, 0xa5, 0x48, 0x01, 0x84, 0xd7, 0x12, 0x9c, + 0xbe, 0x54, 0xd6, 0x36, 0x76, 0x8b, 0xe1, 0x8e, 0x72, 0x7c, 0x7f, 0x1d, + 0x65, 0xe3, 0xc0, 0x2c, 0xba, 0x71, 0xff, 0xd0, 0xcc, 0xb3, 0x01, 0xd5, + 0x69, 0x2d, 0xb2, 0x52, 0x5a, 0x5b, 0x70, 0x68, 0x26, 0x98, 0x39, 0xce, + 0x91, 0x9d, 0x1a, 0xe7, 0x99, 0x33, 0x58, 0x53, 0x65, 0xb5, 0xfc, 0xbd, + 0xcf, 0x14, 0xc4, 0x65, 0xfa, 0x43, 0x41, 0x48, 0x4d, 0xaa, 0xb5, 0xde, + 0x16, 0x41, 0xae, 0xe1, 0xfd, 0x50, 0x60, 0x1e, 0xc0, 0x8f, 0xf7, 0x92, + 0xea, 0xbb, 0x79, 0xec, 0xcb, 0x18, 0x37, 0x3a, 0xc6, 0x8d, 0x86, 0x71, + 0x63, 0x61, 0x28, 0x2e, 0x8e, 0x72, 0x98, 0xde, 0x9f, 0xcf, 0x71, 0x86, + 0x7a, 0x7d, 0x33, 0x5e, 0xaf, 0x16, 0x93, 0x3c, 0x85, 0x19, 0xff, 0x0d, + 0x72, 0xea, 0xb9, 0x24, 0x9b, 0xbc, 0x2f, 0x29, 0x86, 0xbc, 0x9a, 0x8a, + 0x1f, 0xe7, 0x6b, 0x8a, 0x00, 0x0a, 0x54, 0x6e, 0xfa, 0xa0, 0x1e, 0xe8, + 0x05, 0xe6, 0x4b, 0x50, 0x4d, 0x01, 0xc6, 0x32, 0x29, 0x61, 0x7c, 0xa5, + 0xd1, 0xb7, 0x98, 0x9f, 0xc2, 0xe7, 0x99, 0x36, 0xce, 0x3a, 0xd4, 0xac, + 0x24, 0xfc, 0x61, 0x5f, 0x57, 0x52, 0x66, 0x06, 0x17, 0x0d, 0x91, 0xb5, + 0x31, 0x7c, 0x4b, 0x41, 0x20, 0x87, 0x7f, 0xda, 0x46, 0x9b, 0xcf, 0x2e, + 0x45, 0xf9, 0x54, 0x30, 0xf5, 0x26, 0xe8, 0xe1, 0x44, 0xfb, 0x8b, 0x82, + 0x9d, 0x79, 0x91, 0xac, 0xe7, 0xd7, 0xd9, 0x02, 0x9e, 0x11, 0x0c, 0x55, + 0x8f, 0xa8, 0x2b, 0x0a, 0x2e, 0xb1, 0xe9, 0x96, 0x9d, 0xaf, 0xae, 0x3e, + 0x13, 0x7e, 0x81, 0x87, 0x5a, 0x55, 0x1f, 0xb8, 0x80, 0x93, 0xd3, 0x1f, + 0x2e, 0x8b, 0x32, 0x3b, 0xfd, 0x0e, 0x95, 0x0d, 0xfd, 0xaf, 0x04, 0x94, + 0x93, 0x38, 0x18, 0xa7, 0xa1, 0xc6, 0xc5, 0x30, 0x7e, 0x34, 0xdc, 0xa3, + 0x78, 0x7f, 0xc7, 0x18, 0x6d, 0xe1, 0x68, 0x1b, 0xfb, 0x69, 0xf8, 0x9e, + 0x02, 0x43, 0xba, 0x46, 0x81, 0x63, 0x2f, 0x8f, 0xfd, 0x70, 0xd1, 0x38, + 0x97, 0xbc, 0xf1, 0x17, 0x7d, 0x73, 0x4f, 0x45, 0x93, 0x3a, 0x79, 0xc6, + 0x84, 0x45, 0x66, 0xb0, 0x03, 0x2c, 0xd5, 0x9c, 0x67, 0x3f, 0x5d, 0xce, + 0x73, 0x20, 0xb8, 0x9b, 0x14, 0x8b, 0x55, 0x59, 0x28, 0xbd, 0x33, 0x49, + 0x97, 0x22, 0x55, 0x17, 0xcd, 0x25, 0x94, 0x42, 0x41, 0xa2, 0x94, 0x45, + 0x7c, 0x97, 0xab, 0xa4, 0x8f, 0xb3, 0x0c, 0xe6, 0xe0, 0xc0, 0x67, 0x3b, + 0xe7, 0xb4, 0x6a, 0x02, 0xbb, 0xf1, 0x54, 0x59, 0x31, 0x81, 0x1d, 0x9a, + 0x89, 0x0c, 0xf2, 0x93, 0x27, 0x5b, 0xe1, 0xca, 0x55, 0xab, 0xaf, 0xd1, + 0xe6, 0xb6, 0xb7, 0x94, 0x23, 0x58, 0x24, 0x0d, 0xc4, 0x12, 0x6f, 0x40, + 0x8b, 0x39, 0x5a, 0xbd, 0x16, 0x3f, 0x8f, 0x61, 0xd1, 0x9c, 0x02, 0x0b, + 0x03, 0xad, 0xac, 0x81, 0xa0, 0xd6, 0xf7, 0xd9, 0xd0, 0x62, 0x7d, 0x3e, + 0x41, 0x43, 0xdb, 0xdb, 0xb3, 0x8b, 0x21, 0x9d, 0x1d, 0x91, 0x72, 0x90, + 0x36, 0x94, 0x77, 0x10, 0x7a, 0x0f, 0xfa, 0x1a, 0x01, 0x8c, 0x60, 0xa7, + 0x0e, 0x6a, 0x0c, 0x50, 0xc4, 0x6d, 0x1d, 0xd0, 0x0e, 0x00, 0x09, 0xc6, + 0x42, 0xdb, 0xcb, 0xe6, 0x18, 0xbf, 0xbe, 0xd4, 0xb6, 0x18, 0xc8, 0x82, + 0x68, 0x64, 0xdc, 0xb6, 0x76, 0x74, 0xcd, 0x0e, 0xc9, 0xec, 0xa1, 0xa1, + 0x40, 0x1a, 0xab, 0x8b, 0x9f, 0xf2, 0x32, 0xbd, 0x86, 0x3a, 0x46, 0x3e, + 0x6e, 0xe0, 0xf3, 0x46, 0xef, 0x62, 0xa1, 0x1f, 0x50, 0x80, 0x50, 0xd4, + 0x72, 0x9c, 0xc2, 0x26, 0xc6, 0x35, 0x01, 0xf0, 0xe6, 0x9b, 0xea, 0x00, + 0xad, 0xb2, 0x55, 0x57, 0x02, 0x9f, 0x7a, 0x9c, 0x48, 0xf8, 0x09, 0xe6, + 0x07, 0x8d, 0xe4, 0xf7, 0xdf, 0x06, 0xc9, 0xef, 0xbf, 0x1d, 0xc3, 0x03, + 0x58, 0x2f, 0xab, 0xd7, 0x8a, 0x26, 0x20, 0x82, 0x62, 0x09, 0x10, 0xe4, + 0x82, 0xf9, 0x31, 0xc3, 0x71, 0xc1, 0x29, 0xd2, 0x06, 0xae, 0xe5, 0x9c, + 0x03, 0x97, 0x4d, 0xa9, 0x36, 0x07, 0x21, 0xcb, 0x05, 0x54, 0x8b, 0xaf, + 0x7a, 0x8b, 0x31, 0x94, 0x74, 0x72, 0x0e, 0xed, 0x19, 0x6c, 0x45, 0xbc, + 0x02, 0x6a, 0x0c, 0xae, 0xe9, 0x08, 0x08, 0x8d, 0x00, 0x06, 0x3e, 0x80, + 0x01, 0x28, 0x8e, 0xdf, 0x40, 0x13, 0x93, 0x34, 0x00, 0x37, 0x1d, 0x25, + 0x43, 0xa9, 0xc9, 0x69, 0x91, 0xa6, 0x84, 0xf5, 0x36, 0x4e, 0xe2, 0x87, + 0x30, 0xe3, 0xd7, 0x75, 0x9e, 0x8f, 0xc0, 0xca, 0xe1, 0xff, 0xe9, 0xc8, + 0xd8, 0x01, 0x24, 0x84, 0xf7, 0x61, 0xe1, 0x00, 0xbe, 0x43, 0x54, 0xa6, + 0x1b, 0xfa, 0x2c, 0x3d, 0x62, 0x5c, 0xb4, 0xa8, 0x23, 0x51, 0x38, 0x54, + 0x19, 0xd8, 0xc6, 0xb1, 0xb9, 0x5e, 0x37, 0x68, 0x8e, 0x74, 0x9a, 0xe3, + 0x7a, 0x9a, 0x40, 0x4b, 0x92, 0xad, 0xa7, 0x39, 0xd6, 0x69, 0xee, 0xd4, + 0xd3, 0xdc, 0x66, 0x9a, 0xd7, 0x75, 0x34, 0x77, 0x74, 0x9a, 0xbb, 0x8d, + 0x34, 0x2b, 0x56, 0xeb, 0x68, 0xee, 0xea, 0x34, 0xf7, 0x1a, 0x65, 0xdf, + 0x8e, 0xa1, 0xb9, 0xa7, 0xd3, 0xdc, 0x8f, 0xab, 0xa3, 0x6d, 0x96, 0x9d, + 0x1a, 0x3d, 0x1b, 0xc4, 0x45, 0x65, 0x81, 0x43, 0x59, 0x36, 0x41, 0xf1, + 0xf4, 0x63, 0x06, 0xc4, 0x88, 0x16, 0x85, 0x4d, 0xb9, 0x80, 0x07, 0xf2, + 0x73, 0x4a, 0x9f, 0xc7, 0xda, 0xac, 0x53, 0x79, 0x95, 0xe7, 0x83, 0xd9, + 0x60, 0x4a, 0x54, 0x55, 0xb8, 0x13, 0x50, 0xd8, 0x48, 0x0d, 0x59, 0xd0, + 0x37, 0x1e, 0x9b, 0x6d, 0x1c, 0x9e, 0x80, 0x0d, 0x43, 0x59, 0xe2, 0xcb, + 0x4c, 0x7e, 0x81, 0x72, 0x9d, 0x8d, 0x71, 0xca, 0x2c, 0xb1, 0x80, 0x31, + 0x2e, 0xc5, 0x58, 0x77, 0xfa, 0x3e, 0x16, 0x3d, 0xd8, 0xc4, 0x7f, 0x5e, + 0xaa, 0x4d, 0x26, 0xaa, 0x51, 0x7a, 0x4c, 0xe3, 0xd5, 0x7c, 0x59, 0x45, + 0x77, 0xd9, 0x34, 0xc3, 0x3d, 0x33, 0x50, 0x38, 0xa6, 0xd4, 0x51, 0x05, + 0x73, 0xcc, 0x7a, 0x0c, 0x97, 0x4d, 0x56, 0x5f, 0x3d, 0x26, 0xc7, 0x24, + 0xba, 0x11, 0xf1, 0xe2, 0xe9, 0x57, 0xcf, 0xbf, 0x7c, 0xd9, 0x83, 0xd2, + 0xeb, 0x63, 0x3f, 0x13, 0xea, 0x09, 0x66, 0xd7, 0xc5, 0xfb, 0x51, 0xf5, + 0x51, 0xa0, 0x59, 0x29, 0x16, 0x16, 0xf8, 0x1a, 0xfa, 0x5c, 0x16, 0x48, + 0xa9, 0xea, 0xf0, 0xc6, 0x8d, 0xff, 0xdd, 0xfb, 0xf8, 0x8b, 0xcf, 0xe9, + 0x48, 0x06, 0x9e, 0x81, 0x93, 0x79, 0x76, 0x0a, 0x2b, 0x51, 0x55, 0x01, + 0xd5, 0x59, 0x04, 0xd7, 0x39, 0x14, 0x84, 0x35, 0x9b, 0x5f, 0x2e, 0x93, + 0x62, 0xbe, 0x3c, 0xc9, 0x12, 0x40, 0xc7, 0xf0, 0x54, 0x0b, 0xc2, 0xa5, + 0x98, 0xf3, 0x39, 0x86, 0xe2, 0x92, 0xbb, 0xa8, 0x59, 0x49, 0xd7, 0x49, + 0xd4, 0xba, 0x81, 0xde, 0xb1, 0x3b, 0x77, 0x30, 0x9e, 0xa0, 0x11, 0xa4, + 0xeb, 0x0e, 0x82, 0xdf, 0x81, 0x05, 0x6c, 0x22, 0x87, 0xc4, 0x4c, 0xb5, + 0x92, 0x34, 0xc2, 0x79, 0x55, 0x0c, 0x8b, 0x0b, 0xc6, 0x8a, 0x13, 0x73, + 0xdd, 0x01, 0x6d, 0x5c, 0x65, 0x95, 0xb2, 0xb6, 0x01, 0xd5, 0x9b, 0x70, + 0x3a, 0x5c, 0xa8, 0x07, 0xbd, 0x7a, 0xde, 0xdb, 0x2a, 0x4e, 0xf2, 0xf9, + 0xba, 0x7c, 0x1f, 0x1e, 0xd1, 0xcf, 0xe9, 0xea, 0xf4, 0x06, 0x7e, 0xbc, + 0xb7, 0x85, 0x7b, 0x3d, 0xf0, 0xe5, 0x0f, 0x9a, 0xd7, 0xed, 0xd8, 0xe4, + 0x8b, 0x01, 0x00 }; diff --git a/Arduino/McLighting/mode_custom_ws2812fx_animations.h b/Arduino/McLighting/mode_custom_ws2812fx_animations.h index e025591..8b345aa 100644 --- a/Arduino/McLighting/mode_custom_ws2812fx_animations.h +++ b/Arduino/McLighting/mode_custom_ws2812fx_animations.h @@ -7,8 +7,151 @@ More info on how to create custom aniamtions for WS2812FX: https://github.com/ki */ -#include //https://github.com/FastLED/FastLED +// *************************************************************************** +// Functions and variables for automatic cycling +// *************************************************************************** +void handleAutoPlay() { + if (autoDelay <= millis()) { + hex_colors[0] = autoParams[autoCount][0]; + hex_colors[1] = autoParams[autoCount][1]; + hex_colors[2] = autoParams[autoCount][2]; + strip->setColors(selected_segment, hex_colors); + strip->setSpeed(selected_segment, convertSpeed((uint8_t)autoParams[autoCount][3])); + strip->setMode(selected_segment, (uint8_t)autoParams[autoCount][4]); + strip->trigger(); + autoDelay = millis() + (uint32_t)autoParams[autoCount][5]; + DBG_OUTPUT_PORT.print("autoTick "); + DBG_OUTPUT_PORT.printf("autoTick[%d]: {0x%08x, 0x%08x, 0x%08x, %d, %d, %d}\r\n", autoCount, hex_colors[0], hex_colors[1], hex_colors[2], autoParams[autoCount][3], autoParams[autoCount][4], autoParams[autoCount][5]); + + autoCount++; + if (autoCount >= (sizeof(autoParams) / sizeof(autoParams[0]))) autoCount = 0; + } +} + +void handleAuto() { + // Dummy function +} + +void handleCustomWS() { + // Dummy function +} + +#if defined(CUSTOM_WS2812FX_ANIMATIONS) +// *************************************************************************** +// TV mode +// *************************************************************************** + +uint8_t dipInterval = 10; +uint16_t darkTime = 250; +unsigned long currentDipTime; +unsigned long dipStartTime; +unsigned long currentMillis; +uint8_t ledState = LOW; +long previousMillis = 0; +uint16_t led = 5; +uint16_t interv = 2000; +uint8_t twitch = 50; +uint8_t dipCount = 0; +boolean timeToDip = false; + + +void hsb2rgbAN1(uint16_t index, uint8_t sat, uint8_t bright, uint16_t led) { + // Source: https://blog.adafruit.com/2012/03/14/constant-brightness-hsb-to-rgb-algorithm/ + uint8_t temp[5], n = (index >> 8) % 3; + temp[0] = temp[3] = (uint8_t)(( (sat ^ 255) * bright) / 255); + temp[1] = temp[4] = (uint8_t)((((( (index & 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); + temp[2] = (uint8_t)(((((((index & 255) ^ 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); + strip->setPixelColor(led, temp[n + 2], temp[n + 1], temp[n], 0); +} + + +void updateLed (uint16_t led, uint8_t brightness) { + ledstates[led] = brightness; + for (uint16_t i=0; ishow(); +} + + +// See: http://forum.mysensors.org/topic/85/phoneytv-for-vera-is-here/13 +void handleTV() { + if (timeToDip == false) { + currentMillis = millis(); + if(currentMillis-previousMillis > interv) { + previousMillis = currentMillis; + //interv = random(750,4001);//Adjusts the interval for more/less frequent random light changes + interv = random(1000-(ws2812fx_speed*2),5001-(ws2812fx_speed*8)); + twitch = random(40,100);// Twitch provides motion effect but can be a bit much if too high + dipCount = dipCount++; + } + if(currentMillis-previousMillis dipInterval) { + DBG_OUTPUT_PORT.println("dip"); + timeToDip = true; + dipCount = 0; + dipStartTime = millis(); + darkTime = random(50,150); + dipInterval = random(5,250);// cycles of flicker + } + } + } else { + DBG_OUTPUT_PORT.println("Dip Time"); + currentDipTime = millis(); + if (currentDipTime - dipStartTime < darkTime) { + for (uint16_t i=3; iisEmpty()) + { + e131_packet_t packet; + e131->pull(&packet); // Pull packet from ring buffer + + uint16_t universe = htons(packet.universe); + uint8_t *data = packet.property_values + 1; + + if (universe < START_UNIVERSE || universe > END_UNIVERSE) return; //async will take care about filling the buffer + + // Serial.printf("Universe %u / %u Channels | Packet#: %u / Errors: %u / CH1: %u\n", + // htons(packet.universe), // The Universe for this packet + // htons(packet.property_value_count) - 1, // Start code is ignored, we're interested in dimmer data + // e131.stats.num_packets, // Packet counter + // e131.stats.packet_errors, // Packet error counter + // packet.property_values[1]); // Dimmer data for Channel 1 +/* #if defined(RGBW) + uint16_t multipacketOffset = (universe - START_UNIVERSE) * 128; //if more than 128 LEDs * 4 colors = 512 channels, client will send in next higher universe + if (NUMLEDS <= multipacketOffset) return; + uint16_t len = (128 + multipacketOffset > WS2812FXStripSettings.stripSize) ? (WS2812FXStripSettings.stripSize - multipacketOffset) : 128; + #else*/ + uint16_t multipacketOffset = (universe - START_UNIVERSE) * 170; //if more than 170 LEDs * 3 colors = 510 channels, client will send in next higher universe + if (WS2812FXStripSettings.stripSize <= multipacketOffset) return; + uint16_t len = (170 + multipacketOffset > WS2812FXStripSettings.stripSize) ? (WS2812FXStripSettings.stripSize - multipacketOffset) : 170; +/* #endif */ + for (uint16_t i = 0; i < len; i++){ + uint16_t j = i * 3; +/* #if defined(RGBW) + strip->setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], data[j + 3]); + #else */ + strip->setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], 0); +/* #endif */ + } + } +} + + +#include //https://github.com/FastLED/FastLED /* * paste in the Fire2012 code with a small edit at the end which uses the * setPixelColor() function to copy the color data to the ws2812fx instance. @@ -95,17 +238,39 @@ void Gradient() { } else { pixelnumber = j; } - color = fade(hex_colors_actual[1], hex_colors_actual[0], (j*255)/(WS2812FXStripSettings.stripSize - 1)); + color = trans(strip->getColors(selected_segment)[1], strip->getColors(selected_segment)[0], (j*255)/(WS2812FXStripSettings.stripSize - 1)); strip->setPixelColor(pixelnumber, ((color >> 16) & 0xFF), ((color >> 8) & 0xFF), ((color >> 0) & 0xFF), ((color >> 24) & 0xFF)); } } +#endif uint16_t myCustomEffect0() { - Fire2012(); + handleAuto(); return (strip->getSpeed() / WS2812FXStripSettings.stripSize); } uint16_t myCustomEffect1() { + handleCustomWS(); + return (strip->getSpeed() / WS2812FXStripSettings.stripSize); +} +#if defined(CUSTOM_WS2812FX_ANIMATIONS) +uint16_t myCustomEffect2() { + handleTV(); + return (strip->getSpeed() / WS2812FXStripSettings.stripSize); +} + +uint16_t myCustomEffect3() { + handleE131(); + return (strip->getSpeed() / WS2812FXStripSettings.stripSize); +} + +uint16_t myCustomEffect4() { + Fire2012(); + return (strip->getSpeed() / WS2812FXStripSettings.stripSize); +} + +uint16_t myCustomEffect5() { Gradient(); return (strip->getSpeed() / WS2812FXStripSettings.stripSize); } +#endif diff --git a/Arduino/McLighting/mode_tv.h b/Arduino/McLighting/mode_tv.h deleted file mode 100644 index 428d859..0000000 --- a/Arduino/McLighting/mode_tv.h +++ /dev/null @@ -1,77 +0,0 @@ -// *************************************************************************** -// TV mode -// *************************************************************************** - -uint8_t dipInterval = 10; -uint16_t darkTime = 250; -unsigned long currentDipTime; -unsigned long dipStartTime; -unsigned long currentMillis; -uint8_t ledState = LOW; -long previousMillis = 0; -uint16_t led = 5; -uint16_t interv = 2000; -uint8_t twitch = 50; -uint8_t dipCount = 0; -uint8_t analogLevel = 100; -boolean timeToDip = false; - - -void hsb2rgbAN1(uint16_t index, uint8_t sat, uint8_t bright, uint8_t myled) { - // Source: https://blog.adafruit.com/2012/03/14/constant-brightness-hsb-to-rgb-algorithm/ - uint8_t temp[5], n = (index >> 8) % 3; - temp[0] = temp[3] = (uint8_t)(( (sat ^ 255) * bright) / 255); - temp[1] = temp[4] = (uint8_t)((((( (index & 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); - temp[2] = (uint8_t)(((((((index & 255) ^ 255) * sat) / 255) + (sat ^ 255)) * bright) / 255); - strip->setPixelColor(myled, temp[n + 2], temp[n + 1], temp[n], 0); -} - - -void updateLed (uint16_t led, uint8_t brightness) { - ledstates[led] = brightness; - for (uint16_t i=0; ishow(); -} - - -// See: http://forum.mysensors.org/topic/85/phoneytv-for-vera-is-here/13 -void handleTV() { - if (timeToDip == false) { - currentMillis = millis(); - if(currentMillis-previousMillis > interv) { - previousMillis = currentMillis; - //interv = random(750,4001);//Adjusts the interval for more/less frequent random light changes - interv = random(1000-(ws2812fx_speed*2),5001-(ws2812fx_speed*8)); - twitch = random(40,100);// Twitch provides motion effect but can be a bit much if too high - dipCount = dipCount++; - } - if(currentMillis-previousMillis dipInterval) { - DBG_OUTPUT_PORT.println("dip"); - timeToDip = true; - dipCount = 0; - dipStartTime = millis(); - darkTime = random(50,150); - dipInterval = random(5,250);// cycles of flicker - } - } - } else { - DBG_OUTPUT_PORT.println("Dip Time"); - currentDipTime = millis(); - if (currentDipTime - dipStartTime < darkTime) { - for (uint16_t i=3; ishow(); - } -} diff --git a/Arduino/McLighting/request_handlers.h b/Arduino/McLighting/request_handlers.h index 1e6f0e8..95bcc98 100644 --- a/Arduino/McLighting/request_handlers.h +++ b/Arduino/McLighting/request_handlers.h @@ -3,70 +3,52 @@ // *************************************************************************** // Prototypes -void handleAutoStart(); char * listStatusJSON(); #if defined(ENABLE_STATE_SAVE) bool writeConfigFS(bool); void tickerSaveConfig(); #endif -#if defined(ENABLE_E131) -void handleE131(){ - if (!e131->isEmpty()) - { - e131_packet_t packet; - e131->pull(&packet); // Pull packet from ring buffer - - uint16_t universe = htons(packet.universe); - uint8_t *data = packet.property_values + 1; - - if (universe < START_UNIVERSE || universe > END_UNIVERSE) return; //async will take care about filling the buffer - - // Serial.printf("Universe %u / %u Channels | Packet#: %u / Errors: %u / CH1: %u\n", - // htons(packet.universe), // The Universe for this packet - // htons(packet.property_value_count) - 1, // Start code is ignored, we're interested in dimmer data - // e131.stats.num_packets, // Packet counter - // e131.stats.packet_errors, // Packet error counter - // packet.property_values[1]); // Dimmer data for Channel 1 -/* #if defined(RGBW) - uint16_t multipacketOffset = (universe - START_UNIVERSE) * 128; //if more than 128 LEDs * 4 colors = 512 channels, client will send in next higher universe - if (NUMLEDS <= multipacketOffset) return; - uint16_t len = (128 + multipacketOffset > WS2812FXStripSettings.stripSize) ? (WS2812FXStripSettings.stripSize - multipacketOffset) : 128; - #else*/ - uint16_t multipacketOffset = (universe - START_UNIVERSE) * 170; //if more than 170 LEDs * 3 colors = 510 channels, client will send in next higher universe - if (WS2812FXStripSettings.stripSize <= multipacketOffset) return; - uint16_t len = (170 + multipacketOffset > WS2812FXStripSettings.stripSize) ? (WS2812FXStripSettings.stripSize - multipacketOffset) : 170; -/* #endif */ - for (uint16_t i = 0; i < len; i++){ - uint16_t j = i * 3; -/* #if defined(RGBW) - strip->setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], data[j + 3]); - #else */ - strip->setPixelColor(i + multipacketOffset, data[j], data[j + 1], data[j + 2], 0); -/* #endif */ - } - strip->show(); - } -} -#endif - // Call convertColors whenever main_color, back_color or xtra_color changes. + void convertColors() { - if ((fadeEffect) && (fade_cnt > 1) && (fade_cnt < 254)) { - memcpy(hex_colors_mem, hex_colors_actual, sizeof(hex_colors_actual)); - DBG_OUTPUT_PORT.println("Color transistion aborted. Restarting...!"); - fade_cnt = 1; - } else { - memcpy(hex_colors_mem, hex_colors, sizeof(hex_colors)); - } - hex_colors[0] = (uint32_t)(main_color.white << 24) | (main_color.red << 16) | (main_color.green << 8) | main_color.blue; - hex_colors[1] = (uint32_t)(back_color.white << 24) | (back_color.red << 16) | (back_color.green << 8) | back_color.blue; - hex_colors[2] = (uint32_t)(xtra_color.white << 24) | (xtra_color.red << 16) | (xtra_color.green << 8) | xtra_color.blue; - memcpy(hex_colors_actual, hex_colors, sizeof(hex_colors)); + hex_colors_trans[0] = (uint32_t)(main_color.white << 24) | (main_color.red << 16) | (main_color.green << 8) | main_color.blue; + hex_colors_trans[1] = (uint32_t)(back_color.white << 24) | (back_color.red << 16) | (back_color.green << 8) | back_color.blue; + hex_colors_trans[2] = (uint32_t)(xtra_color.white << 24) | (xtra_color.red << 16) | (xtra_color.green << 8) | xtra_color.blue; } +void convertColorsFade() { + if ((transEffect) && (trans_cnt > 1) && (trans_cnt < 254)) { + memcpy(hex_colors, strip->getColors(selected_segment), sizeof(strip->getColors(selected_segment))); + DBG_OUTPUT_PORT.println("Color transistion aborted. Restarting...!"); + trans_cnt = 1; + } else { + //memcpy(hex_colors, hex_colors_trans, sizeof(hex_colors_trans)); + } +} + +uint8_t calculateColorTransitionSteps () { + //compare all colors and calculate steps + int trans_cnt_max = 0; + int calculate_max[4] = {}; + for (uint8_t i=0; i<3; i++){ + DBG_OUTPUT_PORT.printf("i: %i\r\n", i); + for (uint8_t j=0; j<4; j++) { + DBG_OUTPUT_PORT.printf("j: %i\r\n", j); + calculate_max[j] = ((hex_colors[i] >> ((3-j)*8)) & 0xFF) - ((hex_colors_trans[i] >> ((3-j)*8)) & 0xFF); + calculate_max[j] = abs(calculate_max[j]); + trans_cnt_max = max(trans_cnt_max, calculate_max[j]); + DBG_OUTPUT_PORT.printf("calcmax: %i %i\r\n", j, calculate_max[j]); + } + } + DBG_OUTPUT_PORT.printf("max: %i\r\n", trans_cnt_max); + return trans_cnt_max; +} + + + void getArgs() { - if (mode == SET_ALL || mode == SET_COLOR) { + if (mode == SET) { if (server.arg("rgb") != "") { uint32_t rgb = (uint32_t) strtoul(server.arg("rgb").c_str(), NULL, 16); main_color.white = ((rgb >> 24) & 0xFF); @@ -140,17 +122,15 @@ void getArgs() { xtra_color.blue = constrain(xtra_color.blue, 0, 255); xtra_color.white = constrain(xtra_color.white, 0, 255); } - if (mode == SET_ALL || mode == SET_SPEED || mode == TV) { + if (mode == SET || mode == SET_SPEED) { if ((server.arg("s") != "") && (server.arg("s").toInt() >= 0) && (server.arg("s").toInt() <= 255)) { ws2812fx_speed = constrain(server.arg("s").toInt(), 0, 255); } } - if (mode == SET_ALL || mode == SET_MODE) { + if (mode == SET) { if ((server.arg("m") != "") && (server.arg("m").toInt() >= 0) && (server.arg("m").toInt() <= strip->getModeCount())) { ws2812fx_mode = constrain(server.arg("m").toInt(), 0, strip->getModeCount() - 1); } - } - if (mode == SET_ALL || mode == SET_BRIGHTNESS || mode == AUTO || mode == TV || mode == E131) { if ((server.arg("c") != "") && (server.arg("c").toInt() >= 0) && (server.arg("c").toInt() <= 100)) { brightness = constrain((int) server.arg("c").toInt() * 2.55, 0, 255); } else if ((server.arg("p") != "") && (server.arg("p").toInt() >= 0) && (server.arg("p").toInt() <= 255)) { @@ -162,18 +142,22 @@ void getArgs() { } uint16_t convertSpeed(uint8_t mcl_speed) { - //long ws2812_speed = mcl_speed * 256; uint16_t ws2812_speed = 61760 * (exp(0.0002336 * mcl_speed) - exp(-0.03181 * mcl_speed)); ws2812_speed = SPEED_MAX - ws2812_speed; - if (ws2812_speed < SPEED_MIN) { - ws2812_speed = SPEED_MIN; - } - if (ws2812_speed > SPEED_MAX) { - ws2812_speed = SPEED_MAX; - } + ws2812_speed = constrain(ws2812_speed, SPEED_MIN, SPEED_MAX); return ws2812_speed; } +uint8_t unconvertSpeed(uint16_t ws2812_speed) { + //log((SPEED_MAX - ws2812_speed)/61760) = (0.0002336 * mcl_speed) - (-0.03181 * mcl_speed); + //log((SPEED_MAX - ws2812_speed)/61760) = (0.0002336 + 0.03181) * mcl_speed; + uint16_t mcl_speed = (log((SPEED_MAX - ws2812_speed)/61760))/ (0.0002336 + 0.03181); + //uint16_t mcl_speed = 61760 * (exp(0.0002336 * mcl_speed) - exp(-0.03181 * mcl_speed)); + mcl_speed = 255 - mcl_speed; + mcl_speed = constrain(mcl_speed, 0, 255); + return mcl_speed; +} + // *************************************************************************** // Handler functions for WS and MQTT // *************************************************************************** @@ -184,7 +168,7 @@ void handleSetMainColor(uint8_t * mypayload) { main_color.red = ((rgb >> 16) & 0xFF); main_color.green = ((rgb >> 8) & 0xFF); main_color.blue = ((rgb >> 0) & 0xFF); - mode = SET_COLOR; + mode = SET; } void handleSetBackColor(uint8_t * mypayload) { @@ -194,7 +178,7 @@ void handleSetBackColor(uint8_t * mypayload) { back_color.red = ((rgb >> 16) & 0xFF); back_color.green = ((rgb >> 8) & 0xFF); back_color.blue = ((rgb >> 0) & 0xFF); - mode = SET_COLOR; + mode = SET; } void handleSetXtraColor(uint8_t * mypayload) { // decode rgb data @@ -203,7 +187,7 @@ void handleSetXtraColor(uint8_t * mypayload) { xtra_color.red = ((rgb >> 16) & 0xFF); xtra_color.green = ((rgb >> 8) & 0xFF); xtra_color.blue = ((rgb >> 0) & 0xFF); - mode = SET_COLOR; + mode = SET; } void handleSetAllMode(uint8_t * mypayload) { @@ -215,7 +199,7 @@ void handleSetAllMode(uint8_t * mypayload) { main_color.blue = ((rgb >> 0) & 0xFF); DBG_OUTPUT_PORT.printf("WS: Set all leds to main color: R: [%u] G: [%u] B: [%u] W: [%u]\r\n", main_color.red, main_color.green, main_color.blue, main_color.white); ws2812fx_mode = FX_MODE_STATIC; - mode = SET_ALL; + mode = SET; } void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { @@ -260,7 +244,8 @@ void handleSetSingleLED(uint8_t * mypayload, uint8_t firstChar = 0) { strip->setPixelColor(led, color.red, color.green, color.blue, color.white); strip->show(); } - mode = CUSTOM; + mode = HOLD; + ws2812fx_mode= FX_MODE_CUSTOM_1; } void handleSetDifferentColors(uint8_t * mypayload) { @@ -422,6 +407,7 @@ bool setConfByConfString(String saved_conf_string) { getValue(saved_conf_string, '|', 8).toCharArray(tmp_rgbOrder, 4); checkRGBOrder(tmp_rgbOrder); WS2812FXStripSettings.fxoptions = constrain(((getValue(saved_conf_string, '|', 9).toInt()>>1)<<1), 0, 255); + transEffect = getValue(saved_conf_string, '|', 10).toInt(); return true; } else { DBG_OUTPUT_PORT.println("Saved conf not found!"); @@ -430,8 +416,6 @@ bool setConfByConfString(String saved_conf_string) { return false; } - - bool setModeByStateString(String saved_state_string) { if (getValue(saved_state_string, '|', 0) == "STA") { DBG_OUTPUT_PORT.printf("Parsed state: %s\r\n", saved_state_string.c_str()); @@ -470,7 +454,7 @@ bool setModeByStateString(String saved_state_string) { DBG_OUTPUT_PORT.print("Set to state: "); DBG_OUTPUT_PORT.println(listStatusJSON()); //prevmode=mode; - //mode = SET_ALL; + //mode = SET; return true; } else { DBG_OUTPUT_PORT.println("Saved state not found!"); @@ -479,91 +463,19 @@ bool setModeByStateString(String saved_state_string) { return false; } -#if defined(ENABLE_LEGACY_ANIMATIONS) -void handleSetNamedMode(uint8_t * mypayload) { - if (strcmp((char *) &mypayload[1], "off") == 0) { - mode = OFF; - } - - #if defined(ENABLE_TV) - if (strcmp((char *) &mypayload[1], "tv") == 0) { - mode = TV; - } - #endif - - #if defined(ENABLE_E131) - if (strcmp((char *) &mypayload[1], "e131") == 0) { - mode = E131; - } - #endif - - if (strcmp((char *) &mypayload[1], "auto") == 0) { - mode = AUTO; - } - if (strcmp((char *) &mypayload[1], "all") == 0) { - ws2812fx_mode = FX_MODE_STATIC; - mode = SET_ALL; - } - if (strcmp((char *) &mypayload[1], "wipe") == 0) { - ws2812fx_mode = FX_MODE_COLOR_WIPE; - mode = SET_MODE; - } - if (strcmp((char *) &mypayload[1], "rainbow") == 0) { - ws2812fx_mode = FX_MODE_RAINBOW; - mode = SET_MODE; - } - if (strcmp((char *) &mypayload[1], "rainbowCycle") == 0) { - ws2812fx_mode = FX_MODE_RAINBOW_CYCLE; - mode = SET_MODE; - } - if (strcmp((char *) &mypayload[1], "theaterchase") == 0) { - ws2812fx_mode = FX_MODE_THEATER_CHASE; - mode = SET_MODE; - } - if (strcmp((char *) &mypayload[1], "twinkleRandom") == 0) { - ws2812fx_mode = FX_MODE_TWINKLE_RANDOM; - mode = SET_MODE; - } - if (strcmp((char *) &mypayload[1], "theaterchaseRainbow") == 0) { - ws2812fx_mode = FX_MODE_THEATER_CHASE_RAINBOW; - mode = SET_MODE; - } -#endif -} - void handleSetWS2812FXMode(uint8_t * mypayload) { if (isDigit(mypayload[1])) { ws2812fx_mode = (uint8_t) strtol((const char *) &mypayload[1], NULL, 10); ws2812fx_mode = constrain(ws2812fx_mode, 0, strip->getModeCount() - 1); - mode = SET_MODE; + mode = SET; } else { if (strcmp((char *) &mypayload[1], "off") == 0) { mode = OFF; } - - if (strcmp((char *) &mypayload[1], "auto") == 0) { - mode = AUTO; - } - - #if defined(ENABLE_TV) - if (strcmp((char *) &mypayload[1], "tv") == 0) { - mode = TV; - } - #endif - - #if defined(ENABLE_E131) - if (strcmp((char *) &mypayload[1], "e131") == 0) { - mode = E131; - } - #endif - if (strcmp((char *) &mypayload[1], "custom") == 0) { - mode = CUSTOM; - } } } char * listStatusJSON() { - //uint8_t tmp_mode = (mode == SET_MODE) ? (uint8_t) ws2812fx_mode : strip->getMode(); const size_t bufferSize = JSON_ARRAY_SIZE(12) + JSON_OBJECT_SIZE(6) + 500; DynamicJsonDocument jsonBuffer(bufferSize); JsonObject root = jsonBuffer.to(); @@ -602,7 +514,6 @@ void getStatusJSON() { } char * listConfigJSON() { - //uint8_t tmp_mode = (mode == SET_MODE) ? (uint8_t) ws2812fx_mode : strip->getMode(); #if defined(ENABLE_MQTT) const size_t bufferSize = JSON_OBJECT_SIZE(9) + 500; #else @@ -621,6 +532,7 @@ char * listConfigJSON() { root["ws_rgbo"] = WS2812FXStripSettings.RGBOrder; root["ws_pin"] = WS2812FXStripSettings.pin; root["ws_fxopt"] = WS2812FXStripSettings.fxoptions; + root["transEffect"] = transEffect; uint16_t msg_len = measureJson(root) + 1; char * buffer = (char *) malloc(msg_len); serializeJson(root, buffer, msg_len); @@ -642,19 +554,6 @@ char * listModesJSON() { JsonObject objectoff = root.createNestedObject(); objectoff["mode"] = "off"; objectoff["name"] = "OFF"; - #if defined(ENABLE_TV) - JsonObject objecttv = root.createNestedObject(); - objecttv["mode"] = "tv"; - objecttv["name"] = "TV"; - #endif - #if defined(ENABLE_E131) - JsonObject objecte131 = root.createNestedObject(); - objecte131["mode"] = "e131"; - objecte131["name"] = "E131"; - #endif - JsonObject objectcustom = root.createNestedObject(); - objectcustom["mode"] = "custom"; - objectcustom["name"] = "CUSTOM WS"; for (uint8_t i = 0; i < strip->getModeCount(); i++) { JsonObject object = root.createNestedObject(); object["mode"] = i; @@ -713,37 +612,6 @@ void handleNotFound() { server.send ( 404, "text/plain", message ); } -// *************************************************************************** -// Functions and variables for automatic cycling -// *************************************************************************** -Ticker autoTicker; -uint8_t autoCount = 0; - -void autoTick() { - uint32_t setcolors[] = {autoParams[autoCount][0],autoParams[autoCount][1],autoParams[autoCount][2]}; - strip->setColors(0, setcolors); - strip->setSpeed(convertSpeed((uint8_t)autoParams[autoCount][3])); - strip->setMode((uint8_t)autoParams[autoCount][4]); - strip->trigger(); - autoTicker.once_ms((uint32_t)autoParams[autoCount][5], autoTick); - DBG_OUTPUT_PORT.print("autoTick "); - DBG_OUTPUT_PORT.printf("autoTick[%d]: {0x%08x, 0x%08x, 0x%08x, %d, %d, %d}\r\n", autoCount, autoParams[autoCount][0], autoParams[autoCount][1], autoParams[autoCount][2], autoParams[autoCount][3], autoParams[autoCount][4], autoParams[autoCount][5]); - - autoCount++; - if (autoCount >= (sizeof(autoParams) / sizeof(autoParams[0]))) autoCount = 0; -} - -void handleAutoStart() { - DBG_OUTPUT_PORT.println("Starting AUTO mode."); - autoCount = 0; - autoTick(); -} - -void handleAutoStop() { - DBG_OUTPUT_PORT.println("Stopping AUTO mode."); - autoTicker.detach(); -} - // *************************************************************************** // Functions and variables // *************************************************************************** @@ -787,7 +655,7 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { if (payload[0] == '%') { uint8_t b = (uint8_t) strtol((const char *) &payload[1], NULL, 10); brightness = constrain(b, 0, 255); - mode = SET_BRIGHTNESS; + mode = SET; Dbg_Prefix(mqtt, num); DBG_OUTPUT_PORT.printf("Set brightness to: [%u]\r\n", brightness); } @@ -829,16 +697,6 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { #endif } - #if defined(ENABLE_LEGACY_ANIMATIONS) - // = ==> Activate named mode - if (payload[0] == '=') { - // we get mode data - handleSetNamedMode(payload); - Dbg_Prefix(mqtt, num); - DBG_OUTPUT_PORT.printf("Activated mode [%u]!\r\n", mode); - } - #endif - // $ ==> Get status Info. if (payload[0] == '$') { char * buffer = listStatusJSON(); @@ -896,7 +754,7 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { tmp_fxoptions[3] = 0x00; WS2812FXStripSettings.fxoptions = ((constrain(atoi(tmp_fxoptions), 0, 255)>>1)<<1); updateStrip = true; - } + } } if (updateStrip){ mode = INIT_STRIP; @@ -935,7 +793,14 @@ void checkpayload(uint8_t * payload, bool mqtt = false, uint8_t num = 0) { initMqtt(); } #endif - + if (payload[1] == 'e') { + char tmp_transEffect[2]; + snprintf(tmp_transEffect, sizeof(tmp_transEffect), "%s", &payload[2]); + tmp_transEffect[sizeof(tmp_transEffect) - 1] = 0x00; + transEffect = atoi(tmp_transEffect); + updateConf = true; + } + char * buffer = listConfigJSON(); if (mqtt == true) { DBG_OUTPUT_PORT.print("MQTT: "); @@ -1020,18 +885,6 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght DBG_OUTPUT_PORT.printf("WS: [%u] get Text: %s\r\n", num, payload); checkpayload(payload, false, num); - - // start auto cycling - if (strcmp((char *)payload, "start") == 0 ) { - mode = AUTO; - webSocket.sendTXT(num, "OK"); - } - - // stop auto cycling - if (strcmp((char *)payload, "stop") == 0 ) { - mode = SET_ALL; - webSocket.sendTXT(num, "OK"); - } break; } } @@ -1133,23 +986,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght if (mode == OFF){ root["effect"] = "OFF"; } else { - if (mode == AUTO){ - root["effect"] = "AUTO"; - } else { - if (mode == TV){ - root["effect"] = "TV"; - } else { - if (mode == E131){ - root["effect"] = "E131"; - } else { - if (mode == CUSTOM){ - root["effect"] = "CUSTOM WS"; - } else { - root["effect"] = strip->getModeName(strip->getMode()); - } - } - } - } + root["effect"] = strip->getModeName(strip->getMode()); } #endif char buffer[measureJson(root) + 1]; @@ -1184,7 +1021,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght if (root.containsKey("state")) { const char* state_in = root["state"]; if (strcmp(state_in, on_cmd) == 0) { - mode = SET_ALL; + mode = SET; } else if (strcmp(state_in, off_cmd) == 0) { mode = OFF; @@ -1207,14 +1044,14 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght xtra_color.green = (uint8_t) color["g3"]; xtra_color.blue = (uint8_t) color["b3"]; xtra_color.white = (uint8_t) color["w3"]; - mode = SET_COLOR; + mode = SET; } if (root.containsKey("white_value")) { uint8_t json_white_value = constrain((uint8_t) root["white_value"], 0, 255); if (json_white_value != main_color.white) { main_color.white = json_white_value; - mode = SET_COLOR; + mode = SET; } } @@ -1231,14 +1068,14 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght color_temp = (uint16_t) root["color_temp"]; uint16_t kelvin = 1000000 / color_temp; main_color = temp2rgb(kelvin); - mode = SET_COLOR; + mode = SET; } if (root.containsKey("brightness")) { uint8_t json_brightness = constrain((uint8_t) root["brightness"], 0, 255); //fix #224 if (json_brightness != brightness) { brightness = json_brightness; - mode = SET_BRIGHTNESS; + mode = SET; } } @@ -1248,26 +1085,10 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght if(effectString == "OFF"){ mode = OFF; } - if(effectString == "AUTO"){ - mode = AUTO; - } #endif - #if defined(ENABLE_TV) and defined(ENABLE_HOMEASSISTANT) - if(effectString == "TV"){ - mode = TV; - } - #endif - #if defined(ENABLE_E131) and defined(ENABLE_HOMEASSISTANT) - if(effectString == "E131"){ - mode = E131; - } - #endif - if(effectString == "CUSTOM WS"){ - mode = CUSTOM; - } for (uint8_t i = 0; i < strip->getModeCount(); i++) { if(String(strip->getModeName(i)) == effectString) { - mode = SET_MODE; + mode = SET; ws2812fx_mode = i; break; } @@ -1356,14 +1177,6 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght root["effect"] = "true"; JsonArray effect_list = root.createNestedArray("effect_list"); effect_list.add("OFF"); - effect_list.add("AUTO"); - #if defined(ENABLE_TV) - effect_list.add("TV"); - #endif - #if defined(ENABLE_E131) - effect_list.add("E131"); - #endif - effect_list.add("CUSTOM WS"); for (uint8_t i = 0; i < strip->getModeCount(); i++) { effect_list.add(strip->getModeName(i)); } @@ -1469,14 +1282,6 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght root["effect"] = "true"; JsonArray effect_list = root.createNestedArray("effect_list"); effect_list.add("OFF"); - effect_list.add("AUTO"); - #if defined(ENABLE_TV) - effect_list.add("TV"); - #endif - #if defined(ENABLE_E131) - effect_list.add("E131"); - #endif - effect_list.add("CUSTOM WS"); for (uint8_t i = 0; i < strip->getModeCount(); i++) { effect_list.add(strip->getModeName(i)); } @@ -1522,7 +1327,8 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght DBG_OUTPUT_PORT.printf("Short button press\r\n"); if (mode == OFF) { setModeByStateString(BTN_MODE_SHORT); - mode = SET_ALL; + prevmode = mode; + mode = SET; } else { mode = OFF; } @@ -1532,14 +1338,16 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght void mediumKeyPress() { DBG_OUTPUT_PORT.printf("Medium button press\r\n"); setModeByStateString(BTN_MODE_MEDIUM); - mode = SET_ALL; + prevmode = mode; + mode = SET; } // called when button is kept pressed for 2 seconds or more void longKeyPress() { DBG_OUTPUT_PORT.printf("Long button press\r\n"); setModeByStateString(BTN_MODE_LONG); - mode = SET_ALL; + prevmode = mode; + mode = SET; } void button() { @@ -1583,7 +1391,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght tcs.getData(&r, &g, &b, &col, &conf); DBG_OUTPUT_PORT.printf("Colors: R: [%d] G: [%d] B: [%d] Color: [%d] Conf: [%d]\r\n", (int)r, (int)g, (int)b, (int)col, (int)conf); main_color.red = (pow((r/255.0), GAMMA)*255); main_color.green = (pow((g/255.0), GAMMA)*255); main_color.blue = (pow((b/255.0), GAMMA)*255);main_color.white = 0; - mode = SET_COLOR; + mode = SET; } // called when button is kept pressed for less than 2 seconds @@ -1729,6 +1537,7 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t lenght uint8_t temp_pin; checkPin((uint8_t) root["ws_pin"]); WS2812FXStripSettings.fxoptions = constrain(root["ws_fxopt"].as(), 0, 255) & 0xFE; + transEffect = root["transEffect"].as(); jsonBuffer.clear(); return true; } else { @@ -1849,7 +1658,7 @@ void handleRemote() { if (results.value == rmt_commands[ON_OFF]) { // ON/OFF TOGGLE last_remote_cmd = 0; if (mode == OFF) { - mode = SET_ALL; + mode = SET; } else { mode = OFF; } @@ -1859,18 +1668,18 @@ void handleRemote() { last_remote_cmd = results.value; if (brightness + chng <= 255) { brightness = brightness + chng; - mode = SET_BRIGHTNESS; + mode = SET; } } if (results.value == rmt_commands[BRIGHTNESS_DOWN]) { //Brightness down last_remote_cmd = results.value; if (brightness - chng >= 0) { brightness = brightness - chng; - mode = SET_BRIGHTNESS; + mode = SET; } } } - if ((mode !=AUTO) && (mode != E131) && (mode != OFF)) { + if ((mode !=AUTO) && (mode != OFF)) { if (results.value == rmt_commands[SPEED_UP]) { //Speed Up last_remote_cmd = results.value; if (ws2812fx_speed + chng <= 255) { @@ -1892,19 +1701,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.red + chng <= 255) { main_color.red = main_color.red + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.red + chng <= 255) { back_color.red = back_color.red + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.red + chng <= 255) { xtra_color.red = xtra_color.red + chng; - mode = SET_COLOR; + mode = SET; } } } @@ -1913,19 +1722,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.red - chng >= 0) { main_color.red = main_color.red - chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.red - chng >= 0) { back_color.red = back_color.red - chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.red - chng >= 0) { xtra_color.red = xtra_color.red - chng; - mode = SET_COLOR; + mode = SET; } } } @@ -1934,19 +1743,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.green + chng <= 255) { main_color.green = main_color.green + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.green + chng <= 255) { back_color.green = back_color.green + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.green + chng <= 255) { xtra_color.green = xtra_color.green + chng; - mode = SET_COLOR; + mode = SET; } } } @@ -1955,19 +1764,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.green - chng >= 0) { main_color.green = main_color.green - chng;; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.green - chng >= 0) { back_color.green = back_color.green - chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.green - chng >= 0) { xtra_color.green = xtra_color.green - chng; - mode = SET_COLOR; + mode = SET; } } } @@ -1976,19 +1785,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.blue + chng <= 255) { main_color.blue = main_color.blue + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.blue + chng <= 255) { back_color.blue = back_color.blue + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.blue + chng <= 255) { xtra_color.blue = xtra_color.blue + chng; - mode = SET_COLOR; + mode = SET; } } } @@ -1997,19 +1806,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.blue - chng >= 0) { main_color.blue = main_color.blue - chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.blue - chng >= 0) { back_color.blue = back_color.blue - chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.blue - chng >= 0) { xtra_color.blue = xtra_color.blue - chng; - mode = SET_COLOR; + mode = SET; } } } @@ -2018,19 +1827,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.white + chng <= 255) { main_color.white = main_color.white + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.white + chng <= 255) { back_color.white = back_color.white + chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.white + chng <= 255) { xtra_color.white = xtra_color.white + chng; - mode = SET_COLOR; + mode = SET; } } } @@ -2039,19 +1848,19 @@ void handleRemote() { if (selected_color == 1) { if (main_color.white - chng >= 0) { main_color.white = main_color.white - chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 2) { if (back_color.white - chng >= 0) { back_color.white = back_color.white - chng; - mode = SET_COLOR; + mode = SET; } } if (selected_color == 3) { if (xtra_color.white - chng >= 0) { xtra_color.white = xtra_color.white - chng; - mode = SET_COLOR; + mode = SET; } } } @@ -2073,52 +1882,46 @@ void handleRemote() { if ((ws2812fx_mode < strip->getModeCount()-1) && (mode == HOLD)) { ws2812fx_mode = ws2812fx_mode + 1; } - mode = SET_MODE; + mode = SET; } if (results.value == rmt_commands[MODE_DOWN]) { //Mode down last_remote_cmd = results.value; if ((ws2812fx_mode > 0) && (mode == HOLD)) { ws2812fx_mode = ws2812fx_mode - 1; } - mode = SET_MODE; + mode = SET; } if (results.value == rmt_commands[AUTOMODE]) { // Toggle Automode last_remote_cmd = 0; - if (mode != AUTO) { - mode = AUTO; - } else { - mode = SET_ALL; - } + ws2812fx_mode = 56; + mode = SET; } - #if defined(ENABLE_TV) + #if defined(CUSTOM_WS2812FX_ANIMATIONS) if (results.value == rmt_commands[CUST_1]) { // Select TV Mode last_remote_cmd = 0; - if (mode == TV) { - mode = SET_ALL; - } else { - mode = TV; - } + ws2812fx_mode = 57; + mode = SET; } #endif if (results.value == rmt_commands[CUST_2]) { // Select Custom Mode 2 last_remote_cmd = 0; ws2812fx_mode = 12; - mode = SET_MODE; + mode = SET; } if (results.value == rmt_commands[CUST_3]) { // Select Custom Mode 3 last_remote_cmd = 0; ws2812fx_mode = 48; - mode = SET_MODE; + mode = SET; } if (results.value == rmt_commands[CUST_4]) { // Select Custom Mode 4 last_remote_cmd = 0; ws2812fx_mode = 21; - mode = SET_MODE; + mode = SET; } if (results.value == rmt_commands[CUST_5]) { // Select Custom Mode 5 last_remote_cmd = 0; ws2812fx_mode = 46; - mode = SET_MODE; + mode = SET; } irrecv.resume(); // Receive the next value } @@ -2133,7 +1936,7 @@ uint32_t scale_wrgb(uint32_t wrgb, uint8_t level) { return (w << 24) | (r << 16) | (g << 8) | b; } -uint32_t fade(uint32_t newcolor, uint32_t oldcolor, uint8_t level) { +uint32_t trans(uint32_t newcolor, uint32_t oldcolor, uint8_t level) { newcolor = scale_wrgb(newcolor, level); oldcolor = scale_wrgb(oldcolor, 255-level); return newcolor + oldcolor; diff --git a/Arduino/McLighting/rest_api.h b/Arduino/McLighting/rest_api.h index 3d75b26..8597c0e 100644 --- a/Arduino/McLighting/rest_api.h +++ b/Arduino/McLighting/rest_api.h @@ -118,21 +118,6 @@ #else root["home_assistant"] = "OFF"; #endif - #if defined(ENABLE_LEGACY_ANIMATIONS) - root["legacy_animations"] = "ON"; - #else - root["legacy_animations"] = "OFF"; - #endif - #if defined(ENABLE_TV) - root["tv_animation"] = "ON"; - #else - root["tv_animation"] = "OFF"; - #endif - #if defined(ENABLE_E131) - root["e131_animations"] = "ON"; - #else - root["e131_animations"] = "OFF"; - #endif #if defined(ENABLE_OTA) #if ENABLE_OTA == 0 root["ota"] = "ARDUINO"; @@ -192,12 +177,6 @@ SPIFFS.format(); }); - server.on("/set_brightness", []() { - mode = SET_BRIGHTNESS; - getArgs(); - getStatusJSON(); - }); - server.on("/get_brightness", []() { char str_brightness[4]; snprintf(str_brightness, sizeof(str_brightness), "%i", (int) (brightness / 2.55)); @@ -207,12 +186,6 @@ DBG_OUTPUT_PORT.printf("/get_brightness: %i\r\n", (int) (brightness / 2.55)); }); - server.on("/set_speed", []() { - mode = SET_SPEED; - getArgs(); - getStatusJSON(); - }); - server.on("/get_speed", []() { char str_speed[4]; snprintf(str_speed, sizeof(str_speed), "%i", ws2812fx_speed); @@ -346,9 +319,14 @@ } if (updateConf) { initMqtt(); - } + } #endif + if(server.hasArg("trans_effect")){ + transEffect = server.arg("trans_effect").toInt(); + updateConf = true; + } + #if defined(ENABLE_STATE_SAVE) if (updateStrip || updateConf) { if(!settings_save_conf.active()) settings_save_conf.once(3, tickerSaveConfig); @@ -364,86 +342,14 @@ getStatusJSON(); }); - server.on("/auto", []() { - mode = AUTO; - getArgs(); - getStatusJSON(); - }); - - server.on("/all", []() { + server.on("/set", []() { prevmode = HOLD; ws2812fx_mode = FX_MODE_STATIC; - mode = SET_ALL; + mode = SET; getArgs(); getStatusJSON(); }); - #if defined(ENABLE_LEGACY_ANIMATIONS) - server.on("/wipe", []() { - ws2812fx_mode = FX_MODE_COLOR_WIPE; - mode = SET_ALL; - getArgs(); - getStatusJSON(); - }); - - server.on("/rainbow", []() { - ws2812fx_mode = FX_MODE_RAINBOW; - mode = SET_ALL; - getArgs(); - getStatusJSON(); - }); - - server.on("/rainbowcycle", []() { - ws2812fx_mode = FX_MODE_RAINBOW_CYCLE; - mode = SET_ALL; - getArgs(); - getStatusJSON(); - }); - - server.on("/theaterchase", []() { - ws2812fx_mode = FX_MODE_THEATER_CHASE; - mode = SET_ALL; - getArgs(); - getStatusJSON(); - }); - - server.on("/twinklerandom", []() { - ws2812fx_mode = FX_MODE_TWINKLE_RANDOM; - mode = SET_ALL; - getArgs(); - getStatusJSON(); - }); - - server.on("/theaterchaserainbow", []() { - ws2812fx_mode = FX_MODE_THEATER_CHASE_RAINBOW; - mode = SET_ALL; - getArgs(); - getStatusJSON(); - }); - #endif - - #if defined(ENABLE_E131) - server.on("/e131", []() { - mode = E131; - getArgs(); - getStatusJSON(); - }); - #endif - - #if defined(ENABLE_TV) - server.on("/tv", []() { - mode = TV; - getArgs(); - getStatusJSON(); - }); - #endif - server.on("/get_modes", []() { getModesJSON(); }); - - server.on("/set_mode", []() { - mode = SET_MODE; - getArgs(); - getStatusJSON(); - }); diff --git a/Arduino/McLighting/version.h b/Arduino/McLighting/version.h index abbd427..55e0789 100644 --- a/Arduino/McLighting/version.h +++ b/Arduino/McLighting/version.h @@ -1 +1 @@ -#define SKETCH_VERSION "2.2.7.BETA1.rgbw.3c" +#define SKETCH_VERSION "3.0.0.BETA1" diff --git a/Arduino/McLighting/version_info.ino b/Arduino/McLighting/version_info.ino index 6ecfc3b..1bee4b4 100644 --- a/Arduino/McLighting/version_info.ino +++ b/Arduino/McLighting/version_info.ino @@ -167,9 +167,21 @@ * * 15 September 2019 * Version Bump to 2.2.7.BETA1.rgbw.3colors - * adressed issue: #25 (added Custom Animation 'Gradient') + * adressed issue: #25 (added Custom Animation 'Gradient' with number 57) * adressed issue: #30 (Status 'AUTO' is saved now) - * adressed issue: https://github.com/toblum/McLighting/issues/403 (Experimental Support of transitions: set fadeEffect = true in definitions.h) + * adressed issue: https://github.com/toblum/McLighting/issues/403 (Experimental Support of transitions: set transEffect = true in definitions.h) * corrected use of DMA for Neopixelbus by Makuna (Tests for other strips than SK6812 GRBW were not made) * + * 27 September 2019 + * Version Bump to 3.0.0.ALPHA1 + * removed LEGACY_ANIMATIONS + * removed old Custom Animations from beginning of list. + * added Custom Animation 'AutoPlay' with number 56 + * added Custom Animation 'Custom WS' with number 57 + * added Custom Animation 'TV' with number 58 + * added Custom Animation 'E1.31' with number 59 + * moved Custom Animation 'Fire2012' to number 60 + * moved Custom Animation 'Gradients' to number 61 + * REST-API changes (will be documented soon) + * */ diff --git a/README.md b/README.md index 17d3c82..b5bd2f1 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,10 @@ I hope I didn't miss any sources and mentioned every author. In case I forgot so ## Todos +- [ ] Redesign of Code and bump to V3 +- [ ] Removal of LEGACY_ANIMATIONS +- [ ] Add TV, E1.31 and AUTO to CUSTOM_WS2812FX_ANIMATIONS +- [ ] Include ws28fx library to code due to modifications in library - [ ] Support multiple strips and control them separately or together [Issue](https://github.com/toblum/McLighting/issues/118) - [ ] Remove old / wrong EEPROM settings completely [Issue] - [ ] Customer profile to define segments of (in)active areas on the strip [Issue](https://github.com/toblum/McLighting/issues/37) @@ -69,6 +73,7 @@ I hope I didn't miss any sources and mentioned every author. In case I forgot so - [ ] Multiple buttons/GPIO Inputs. [Issue](https://github.com/toblum/McLighting/issues/119) - [ ] Music visualizer / Bring back ArtNet [Issue](https://github.com/toblum/McLighting/issues/111) - [ ] Display version and parameters (Number of LEDs, definition settings, ..) in the web UI [Issue](https://github.com/toblum/McLighting/issues/150) +- [ ] Support for up to ten segment - [x] Save status: Added saving of status 'AUTO'. [Issue] https://github.com/FabLab-Luenen/McLighting/issues/30 - [x] EXPERIMENTAL: Added transition feature on changing values of color brightness and speed. ATTENTION! Does not work proberly for all WS2812fx effects. - [x] Added Custom Animation 'Gradient': [Issue] https://github.com/FabLab-Luenen/McLighting/issues/25