Merge pull request #3220 from Aircoookie/feature

Feature implementation
This commit is contained in:
Blaž Kristan 2023-05-30 16:52:13 +02:00 committed by GitHub
commit 680afe972e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 2285 additions and 2271 deletions

View File

@ -1,5 +1,26 @@
## WLED changelog
#### Build 2305280
- DDP protocol update (#3193)
- added PCF8574 I2C port expander support for Multi relay usermod
- MQTT multipacket (fragmented) message fix
- new ethernet board: @srg74 Ethernet Shield
- new 2D effects: Soap (#3184) & Octopus & Waving cell (credit @St3P40 https://github.com/80Stepko08)
- various fixes and enhancements
#### Build 2305090
- new ethernet board: @Wladi ABC! WLED Eth
- Battery usermod voltage calculation (#3116)
- custom palette editor (#3164)
- improvements in Dancing Shadows and Tartan effects
- UCS389x support
- switched to NeoPixelBus 2.7.5 (replaced NeoPixelBrightnessBus with NeoPixelBusLg)
- SPI bus clock selection (for LEDs) (#3173)
- DMX mode preset fix (#3134)
- iOS fix for scroll (#3182)
- Wordclock "Norddeutsch" fix (#3161)
- various fixes and enhancements
#### Build 2304090
- updated Arduino ESP8266 core to 4.1.0 (newer compiler)
- updated NeoPixelBus to 2.7.3 (with support for UCS890x chipset)

View File

@ -178,14 +178,12 @@ lib_deps =
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
#TFT_eSPI
#For use SSD1306 OLED display uncomment following
#U8g2@~2.28.8
#U8g2@~2.32.10
#For Dallas sensor uncomment following 2 lines
#OneWire@~2.3.5
#milesburton/DallasTemperature@^3.9.0
#For compatible OLED display uncomment following
#U8g2 #@ ~2.33.15
#For Dallas sensor uncomment following
#OneWire @ ~2.3.7
#For BME280 sensor uncomment following
#BME280@~3.0.0
#BME280 @ ~3.0.0
; adafruit/Adafruit BMP280 Library @ 2.1.0
; adafruit/Adafruit CCS811 Library @ 1.0.4
; adafruit/Adafruit Si7021 Library @ 1.4.0

View File

@ -2805,7 +2805,7 @@ uint16_t mode_bouncing_balls(void) {
// number of balls based on intensity setting to max of 7 (cycles colors)
// non-chosen color is a random color
uint16_t numBalls = (SEGMENT.intensity * (maxNumBalls - 1)) / 255 + 1; // minimum 1 ball
const float gravity = -9.81; // standard value of gravity
const float gravity = -9.81f; // standard value of gravity
const bool hasCol2 = SEGCOLOR(2);
const unsigned long time = millis();
@ -4175,11 +4175,9 @@ static const char _data_FX_MODE_DANCING_SHADOWS[] PROGMEM = "Dancing Shadows@!,#
By Stefan Seegel
*/
uint16_t mode_washing_machine(void) {
float speed = tristate_square8(strip.now >> 7, 90, 15);
float quot = 32.0f - ((float)SEGMENT.speed / 16.0f);
speed /= quot;
int speed = tristate_square8(strip.now >> 7, 90, 15);
SEGENV.step += (speed * 128.0f);
SEGENV.step += (speed * 2048) / (512 - SEGMENT.speed);
for (int i = 0; i < SEGLEN; i++) {
uint8_t col = sin8(((SEGMENT.intensity / 25 + 1) * 255 * i / SEGLEN) + (SEGENV.step >> 7));
@ -4593,7 +4591,7 @@ uint16_t mode_2DBlackHole(void) { // By: Stepko https://editor.soulma
}
SEGMENT.fadeToBlackBy(16 + (SEGMENT.speed>>3)); // create fading trails
float t = (float)(millis())/128; // timebase
unsigned long t = millis()/128; // timebase
// outer stars
for (size_t i = 0; i < 8; i++) {
x = beatsin8(SEGMENT.custom1>>3, 0, cols - 1, 0, ((i % 2) ? 128 : 0) + t * i);

View File

@ -152,12 +152,12 @@ bool Segment::allocateData(size_t len) {
if (data && _dataLen == len) return true; //already allocated
deallocateData();
if (Segment::getUsedSegmentData() + len > MAX_SEGMENT_DATA) return false; //not enough memory
// if possible use SPI RAM on ESP32
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
if (psramFound())
data = (byte*) ps_malloc(len);
else
#endif
// do not use SPI RAM on ESP32 since it is slow
//#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
//if (psramFound())
// data = (byte*) ps_malloc(len);
//else
//#endif
data = (byte*) malloc(len);
if (!data) return false; //allocation failed
Segment::addUsedSegmentData(len);

View File

@ -438,6 +438,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
getStringFromJson(mqttDeviceTopic, if_mqtt[F("topics")][F("device")], 33); // "wled/test"
getStringFromJson(mqttGroupTopic, if_mqtt[F("topics")][F("group")], 33); // ""
CJSON(retainMqttMsg, if_mqtt[F("rtn")]);
#endif
#ifndef WLED_DISABLE_HUESYNC
@ -885,6 +886,7 @@ void serializeConfig() {
if_mqtt[F("user")] = mqttUser;
if_mqtt[F("pskl")] = strlen(mqttPass);
if_mqtt[F("cid")] = mqttClientID;
if_mqtt[F("rtn")] = retainMqttMsg;
JsonObject if_mqtt_topics = if_mqtt.createNestedObject(F("topics"));
if_mqtt_topics[F("device")] = mqttDeviceTopic;

View File

@ -72,7 +72,7 @@
</div>
<div id="briwrap">
<p class="hd">Brightness</p>
<div class="slider" style="left:24px;">
<div class="slider" style="padding-right:32px;">
<i class="icons slider-icon" onclick="tglTheme()" style="transform: translate(-32px,5px);">&#xe2a6;</i>
<div class="sliderwrap il">
<input id="sliderBri" onchange="setBri()" oninput="updateTrail(this)" max="255" min="1" type="range" value="128" />

View File

@ -977,7 +977,7 @@ function genPalPrevCss(id)
function generateListItemHtml(listName, id, name, clickAction, extraHtml = '', effectPar = '')
{
return `<div class="lstI${id==0?' sticky':''}" data-id="${id}" ${effectPar===''?'':'data-opt="'+effectPar+'" '}onClick="${clickAction}(${id})">`+
`<label class="radio schkl" onclick="event.preventDefault()">`+
`<label title="(${id})" class="radio schkl" onclick="event.preventDefault()">`+ // (#1984)
`<input type="radio" value="${id}" name="${listName}">`+
`<span class="radiomark"></span>`+
`<div class="lstIcontent">`+

View File

@ -202,6 +202,7 @@ Client ID: <input type="text" name="MQCID" maxlength="40"><br>
Device Topic: <input type="text" name="MD" maxlength="32"><br>
Group Topic: <input type="text" name="MG" maxlength="32"><br>
Publish on button press: <input type="checkbox" name="BM"><br>
Retain brightness & color messages: <input type="checkbox" name="RT"><br>
<i>Reboot required to apply changes. </i><a href="https://kno.wled.ge/interfaces/mqtt/" target="_blank">MQTT info</a>
</div>
<h3>Philips Hue</h3>

View File

@ -1067,216 +1067,217 @@ const uint8_t PAGE_settings_ui[] PROGMEM = {
// Autogenerated from wled00/data/settings_sync.htm, do not edit!!
const uint16_t PAGE_settings_sync_length = 3318;
const uint16_t PAGE_settings_sync_length = 3340;
const uint8_t PAGE_settings_sync[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xad, 0x1a, 0x6b, 0x53, 0xdb, 0xb8,
0xf6, 0xbb, 0x7f, 0x85, 0xf0, 0xce, 0x74, 0x93, 0x25, 0xe4, 0x01, 0x84, 0x52, 0x88, 0xdd, 0x0b,
0x84, 0x42, 0xee, 0x2d, 0x34, 0x4d, 0xe8, 0xb6, 0x3b, 0x73, 0x67, 0x76, 0x14, 0x5b, 0x49, 0x04,
0xb6, 0xe5, 0xb5, 0x64, 0x1e, 0xd3, 0xed, 0x7f, 0xbf, 0xe7, 0x48, 0xb6, 0x93, 0x98, 0xbc, 0x7a,
0x67, 0x3f, 0x34, 0xd8, 0xd2, 0x39, 0x47, 0xe7, 0xfd, 0x90, 0xdb, 0xd9, 0xe9, 0x7e, 0xba, 0xb8,
0xfb, 0xa3, 0x7f, 0x49, 0xa6, 0x2a, 0x0c, 0xdc, 0x0e, 0xfe, 0x92, 0x80, 0x46, 0x13, 0xc7, 0x66,
0x91, 0x0d, 0xef, 0x8c, 0xfa, 0x6e, 0x27, 0x64, 0x8a, 0x92, 0x88, 0x86, 0xcc, 0xb1, 0x1f, 0x39,
0x7b, 0x8a, 0x45, 0xa2, 0x6c, 0xe2, 0x89, 0x48, 0xb1, 0x48, 0x39, 0xf6, 0x13, 0xf7, 0xd5, 0xd4,
0x69, 0x37, 0x9b, 0xb6, 0x6b, 0x19, 0x50, 0xab, 0xb4, 0xe7, 0xb3, 0x47, 0xee, 0xb1, 0x3d, 0xfd,
0x52, 0xe3, 0x11, 0x57, 0x9c, 0x06, 0x7b, 0xd2, 0xa3, 0x01, 0x73, 0x5a, 0xb5, 0x90, 0x3e, 0xf3,
0x30, 0x0d, 0x8b, 0xf7, 0x54, 0xb2, 0x44, 0xbf, 0xd0, 0x11, 0xbc, 0x47, 0xc2, 0x26, 0x56, 0xe9,
0xe8, 0x8c, 0x21, 0x6f, 0x4a, 0x13, 0xc9, 0xe0, 0x90, 0x54, 0x8d, 0xf7, 0x8e, 0x61, 0x55, 0x71,
0x15, 0x30, 0x77, 0xf8, 0x12, 0x79, 0x64, 0xc8, 0x94, 0xe2, 0xd1, 0x44, 0x76, 0x1a, 0x66, 0xb1,
0x23, 0xbd, 0x84, 0xc7, 0xca, 0xb5, 0x1e, 0x69, 0x42, 0x02, 0xe1, 0xf1, 0xb8, 0xe6, 0x3b, 0xbe,
0xf0, 0xd2, 0x10, 0xd8, 0xac, 0xc1, 0x82, 0xb3, 0xd3, 0x3a, 0x1d, 0xa7, 0x91, 0xa7, 0xb8, 0x88,
0xc8, 0xa4, 0xe7, 0x57, 0x58, 0xf5, 0x7b, 0xc2, 0x54, 0x9a, 0x44, 0xc4, 0xaf, 0x4f, 0x98, 0xba,
0x0c, 0x18, 0x82, 0x9e, 0xbf, 0xe8, 0xad, 0x1f, 0x05, 0xa8, 0x12, 0x93, 0x49, 0xc0, 0x10, 0xda,
0x20, 0xd5, 0xbd, 0x80, 0x4a, 0xf9, 0x91, 0x4b, 0x55, 0xcf, 0xb6, 0xec, 0x29, 0xf7, 0x99, 0x5d,
0xad, 0xe1, 0xbe, 0x7d, 0x2b, 0xec, 0xdd, 0x35, 0x40, 0x33, 0xba, 0xd7, 0x95, 0xea, 0xf7, 0x27,
0x1e, 0xf9, 0xe2, 0xa9, 0x2e, 0x62, 0x16, 0x01, 0x80, 0x52, 0xb1, 0x3c, 0x69, 0x34, 0x1e, 0x22,
0x51, 0x7f, 0x0a, 0x18, 0x32, 0xd5, 0xe0, 0xa0, 0xe5, 0x64, 0x4c, 0x3d, 0x26, 0x1b, 0xa9, 0x1f,
0xef, 0x45, 0x42, 0xf1, 0x31, 0x67, 0x49, 0x63, 0x9e, 0xd0, 0x79, 0x99, 0x50, 0x43, 0x66, 0xba,
0xb1, 0x6b, 0xf6, 0x9f, 0x92, 0x05, 0xe3, 0x79, 0x68, 0xea, 0xdf, 0x03, 0xfc, 0xd1, 0x61, 0xfb,
0xd0, 0x71, 0xfc, 0xfa, 0x70, 0x5c, 0xef, 0xf6, 0xea, 0x8f, 0x34, 0x48, 0xd9, 0xfb, 0x56, 0xb6,
0x70, 0xf9, 0xc5, 0x2c, 0xbc, 0x79, 0x53, 0x59, 0x78, 0x77, 0x9a, 0xd5, 0x93, 0x76, 0xfb, 0xe8,
0xb8, 0x84, 0x07, 0x60, 0xcd, 0x7c, 0xe9, 0x6c, 0x11, 0x33, 0x7f, 0x77, 0x5a, 0xd5, 0x5a, 0x73,
0x13, 0xf5, 0x56, 0x75, 0x8e, 0xcb, 0x40, 0x50, 0xff, 0xdf, 0xc3, 0x0a, 0xab, 0x29, 0x67, 0xa7,
0x59, 0xfd, 0x1e, 0x30, 0x45, 0x04, 0xe0, 0x7b, 0x09, 0xa3, 0x8a, 0x65, 0x96, 0xaa, 0xd8, 0xc6,
0xe4, 0x76, 0xf5, 0x54, 0xd4, 0x41, 0xe4, 0x33, 0xa5, 0x12, 0x3e, 0x4a, 0x15, 0xe8, 0x5a, 0x26,
0x9e, 0x5d, 0x63, 0xd5, 0x5a, 0x79, 0x5d, 0xbd, 0xc4, 0x0c, 0x94, 0xa2, 0xd8, 0xb3, 0x6a, 0xdc,
0xd3, 0x47, 0x9a, 0x13, 0x78, 0x05, 0x48, 0x25, 0xf8, 0x98, 0x5d, 0x53, 0xd5, 0x9a, 0x5f, 0x1f,
0x09, 0xff, 0xa5, 0x4e, 0x63, 0x50, 0xad, 0x7f, 0x31, 0xe5, 0x81, 0x5f, 0x11, 0x08, 0x4f, 0x7d,
0xff, 0xf2, 0x11, 0xb8, 0x40, 0x1b, 0xb3, 0x88, 0x25, 0x15, 0x1b, 0x79, 0xb6, 0x6b, 0x95, 0xaa,
0xe3, 0x7e, 0xbf, 0x62, 0xea, 0xf7, 0x4a, 0xb5, 0x06, 0x3e, 0xfa, 0x3b, 0x0d, 0x2a, 0xd5, 0x1f,
0xcb, 0x11, 0x58, 0x92, 0x88, 0x04, 0xf8, 0x04, 0x04, 0x08, 0x27, 0x29, 0x02, 0x56, 0x0f, 0xc4,
0xa4, 0x62, 0x5f, 0xe2, 0x3a, 0xc9, 0xb4, 0x00, 0x76, 0x24, 0x63, 0x1e, 0x30, 0x2d, 0x0f, 0xc4,
0x4f, 0x02, 0x72, 0x7f, 0xcc, 0xd6, 0xc5, 0x18, 0x63, 0x74, 0xcc, 0x27, 0x69, 0x42, 0xb5, 0xda,
0x8c, 0x3c, 0x64, 0x4c, 0x39, 0xfa, 0xcf, 0x7f, 0xa3, 0x5e, 0xe4, 0x89, 0x30, 0x06, 0xed, 0x31,
0x12, 0xd3, 0x09, 0x23, 0x3e, 0x55, 0x74, 0x07, 0xbc, 0x61, 0x4e, 0xd3, 0x1f, 0x2e, 0xc0, 0x1d,
0xc6, 0x22, 0xa9, 0xdc, 0x3b, 0xcd, 0xd3, 0xfb, 0xce, 0xf1, 0xe9, 0xfd, 0xee, 0x6e, 0x55, 0x7b,
0xf2, 0x95, 0xbd, 0x5b, 0xb9, 0xdf, 0x05, 0xb3, 0xd4, 0xbd, 0x29, 0xf3, 0x1e, 0x98, 0xef, 0x98,
0xe5, 0xa1, 0x5d, 0x35, 0x26, 0x73, 0xdd, 0xfb, 0x37, 0x2d, 0xe3, 0xf5, 0x83, 0x15, 0xb0, 0x83,
0x05, 0xd8, 0xd9, 0xa9, 0x57, 0x78, 0x2a, 0x46, 0x2a, 0x78, 0x15, 0xd8, 0xb8, 0x59, 0x13, 0x0e,
0x44, 0x67, 0x89, 0x0b, 0xb6, 0xeb, 0x2c, 0x67, 0xe4, 0x37, 0x51, 0x53, 0xd9, 0xde, 0x60, 0xc9,
0x9e, 0xf8, 0xcd, 0xd9, 0x3f, 0x2d, 0xf1, 0xea, 0xb0, 0x5a, 0x89, 0x23, 0x47, 0xcd, 0xd8, 0x19,
0xf6, 0x0b, 0x76, 0x16, 0x7c, 0xdb, 0x50, 0x79, 0x8e, 0x01, 0x47, 0xaa, 0x17, 0xb0, 0x8f, 0xcf,
0x65, 0x1c, 0xd0, 0x17, 0x87, 0xb9, 0xcd, 0xf7, 0x76, 0x24, 0x22, 0x66, 0x9f, 0xd8, 0x23, 0x48,
0x2e, 0x0f, 0x60, 0x1e, 0xb7, 0x59, 0xf8, 0x74, 0x3f, 0x3f, 0x74, 0x4e, 0xd1, 0xb9, 0x33, 0x7c,
0x97, 0x4f, 0x5c, 0x79, 0xd3, 0x4a, 0x8c, 0xb9, 0xad, 0x07, 0x6e, 0xbc, 0x80, 0x52, 0xad, 0x7e,
0xf7, 0xa8, 0x64, 0x04, 0x03, 0xed, 0x64, 0x81, 0x17, 0x07, 0x97, 0x4e, 0x47, 0x10, 0x01, 0x0f,
0xa7, 0x1a, 0x04, 0x63, 0xb8, 0x04, 0x82, 0x4b, 0xf3, 0x20, 0x87, 0xcd, 0xc3, 0x32, 0x15, 0x5c,
0xfa, 0x81, 0xf2, 0xd6, 0xd0, 0xf2, 0x73, 0xec, 0x01, 0x67, 0x36, 0x3a, 0xda, 0x89, 0xed, 0x38,
0x59, 0x3a, 0x01, 0xc1, 0xb4, 0x5f, 0xd5, 0xe3, 0x44, 0x28, 0xe1, 0x89, 0x00, 0x04, 0xd4, 0x99,
0xb4, 0x59, 0xab, 0xe8, 0x14, 0xeb, 0x20, 0x44, 0x30, 0x54, 0x22, 0x01, 0xef, 0xc2, 0x24, 0xda,
0x53, 0x2c, 0xc4, 0x48, 0xf0, 0x7a, 0xa0, 0xb3, 0xea, 0xdf, 0x7f, 0x67, 0x60, 0x80, 0x1f, 0xc6,
0xe0, 0xb8, 0x1f, 0x80, 0x3e, 0xb9, 0x11, 0x3e, 0xab, 0x93, 0x7e, 0xc0, 0x90, 0x43, 0x86, 0x09,
0x8e, 0x7c, 0xfd, 0x78, 0xd9, 0x25, 0xbd, 0x3e, 0xb8, 0x66, 0x6d, 0x81, 0xa2, 0x5c, 0xa4, 0x58,
0xd3, 0xd4, 0xaa, 0x55, 0x84, 0xd2, 0xf9, 0x01, 0xc9, 0xbf, 0xd7, 0x89, 0x13, 0xf2, 0xa6, 0xbd,
0xab, 0xb7, 0x4f, 0x6c, 0xbb, 0xba, 0x3b, 0xcb, 0x81, 0x0d, 0x59, 0xbf, 0x97, 0xef, 0x63, 0xe7,
0xd0, 0xae, 0xed, 0xb4, 0xaa, 0x3f, 0xac, 0x4e, 0x23, 0x2b, 0x14, 0x1d, 0x6d, 0x51, 0xf7, 0x5f,
0x3c, 0xc4, 0x92, 0x43, 0xd2, 0x24, 0x80, 0xbc, 0xa1, 0x8d, 0xec, 0x49, 0x09, 0x39, 0x05, 0x00,
0x35, 0x40, 0xa7, 0x61, 0x4a, 0x24, 0xa6, 0x01, 0x08, 0x4a, 0x3c, 0xd9, 0xb1, 0x41, 0x5b, 0x50,
0x8e, 0xc0, 0x61, 0x43, 0x8b, 0x70, 0x78, 0xc7, 0xa7, 0x3f, 0xa5, 0x9d, 0x95, 0xd0, 0xe1, 0xd8,
0x26, 0x50, 0xc0, 0xa6, 0x02, 0x76, 0x62, 0x21, 0xa1, 0x94, 0x42, 0x78, 0xa7, 0xa3, 0x90, 0x43,
0x29, 0x43, 0xcf, 0x07, 0x54, 0x9f, 0x3f, 0x12, 0x5d, 0x23, 0x1c, 0x5b, 0x09, 0x50, 0xcf, 0x53,
0xb6, 0x66, 0x65, 0x8b, 0x53, 0x16, 0xc4, 0xe7, 0xb0, 0x06, 0xe9, 0x48, 0x61, 0x11, 0x82, 0xc4,
0xe5, 0xd8, 0xe6, 0x05, 0xa9, 0x79, 0x01, 0xf7, 0x1e, 0x1c, 0xfb, 0x1a, 0x69, 0xbd, 0xef, 0x34,
0xcc, 0x06, 0xb0, 0x0a, 0x24, 0x0a, 0x1c, 0x6b, 0x05, 0xd2, 0x39, 0x22, 0x9d, 0x53, 0xef, 0x61,
0x86, 0xb7, 0x70, 0x8a, 0xe1, 0xd4, 0x76, 0x87, 0xf4, 0x91, 0xcd, 0x40, 0xa6, 0x09, 0xd4, 0x7e,
0x43, 0x7f, 0xba, 0x6f, 0x4a, 0x30, 0xa8, 0x38, 0x8d, 0x41, 0x3d, 0xfb, 0xb0, 0x74, 0xe0, 0x6a,
0x1b, 0x9e, 0x27, 0xa0, 0x1e, 0x70, 0x3d, 0x05, 0xcb, 0x07, 0xee, 0x97, 0x6e, 0x9f, 0xf4, 0x41,
0xb9, 0x27, 0xa4, 0xc3, 0xa3, 0x38, 0x55, 0x99, 0x7a, 0xbe, 0xf4, 0xed, 0x9c, 0xb9, 0x28, 0x0d,
0x47, 0x2c, 0x01, 0x6d, 0xf1, 0xc8, 0xb1, 0x5b, 0xf0, 0x97, 0x3e, 0x3b, 0xf6, 0x51, 0xbb, 0x7d,
0xd0, 0xb6, 0x73, 0xf5, 0xf8, 0xf0, 0x98, 0xb0, 0xbf, 0x52, 0x9e, 0x30, 0xb4, 0x42, 0xe2, 0xee,
0x47, 0xfe, 0x22, 0xd5, 0xac, 0x7b, 0xf8, 0xb2, 0x6f, 0x93, 0xff, 0x9f, 0x2a, 0x8a, 0x60, 0x69,
0xb1, 0x26, 0x89, 0x48, 0x63, 0xa9, 0x05, 0x58, 0x60, 0x1b, 0x92, 0x89, 0xb6, 0x35, 0xfe, 0x5d,
0x3c, 0x47, 0x3b, 0x0a, 0xd0, 0x34, 0xc9, 0xe1, 0x44, 0xe7, 0x05, 0x97, 0x58, 0x8b, 0xd8, 0x83,
0x0c, 0x7b, 0xb0, 0x15, 0x76, 0x47, 0x61, 0x73, 0x44, 0xac, 0x6c, 0x33, 0xa4, 0xc9, 0x84, 0x47,
0x27, 0x4d, 0x42, 0x53, 0x25, 0x70, 0x17, 0x18, 0x56, 0xc0, 0x78, 0x03, 0x7f, 0xe0, 0x5f, 0xab,
0x78, 0xda, 0x2f, 0x9e, 0x0e, 0x8a, 0xa7, 0xc3, 0xe2, 0xa9, 0x6d, 0x15, 0x8f, 0x47, 0xc5, 0xd3,
0xdb, 0xe2, 0xe9, 0xd8, 0x3c, 0x35, 0x34, 0x79, 0x73, 0xc4, 0x10, 0xca, 0xde, 0x49, 0x01, 0x90,
0x6b, 0xdc, 0x48, 0xa0, 0x53, 0xee, 0x48, 0x3c, 0x67, 0x92, 0xb5, 0x72, 0xff, 0x87, 0x27, 0xb7,
0x8c, 0xb2, 0x14, 0x63, 0xbf, 0x68, 0xfd, 0xe0, 0x71, 0x3b, 0x94, 0x83, 0xe2, 0x90, 0x83, 0xd7,
0x18, 0xcb, 0xf9, 0x3a, 0x2c, 0x50, 0x0e, 0xb7, 0x3c, 0xa4, 0x3d, 0xe3, 0xab, 0xbd, 0x25, 0xca,
0x51, 0x71, 0xc8, 0xd1, 0xb6, 0x7c, 0xbd, 0x2d, 0x50, 0xde, 0x6e, 0x79, 0xc8, 0xf1, 0x8c, 0xaf,
0xe3, 0x1c, 0x65, 0xde, 0x58, 0x03, 0xe6, 0x31, 0xfe, 0xc8, 0x4e, 0xb6, 0x21, 0x36, 0x68, 0x15,
0xc4, 0x06, 0x5b, 0xda, 0x6b, 0xb0, 0x9f, 0x73, 0x3c, 0xd8, 0xdf, 0x52, 0xc8, 0x41, 0x61, 0xaf,
0xc1, 0xc1, 0x96, 0x87, 0x1c, 0xce, 0xf8, 0xda, 0xd2, 0x5e, 0x83, 0x76, 0x71, 0x48, 0x7b, 0x5b,
0xbe, 0x0a, 0x7b, 0x0d, 0x8e, 0xb6, 0x3c, 0xe4, 0xed, 0x8c, 0xaf, 0x2d, 0xed, 0x35, 0x38, 0x2e,
0x0e, 0x59, 0x34, 0x57, 0x43, 0x47, 0x37, 0x24, 0x54, 0x48, 0x3c, 0x85, 0xcd, 0x22, 0xf1, 0x94,
0xd0, 0x78, 0x15, 0xbd, 0x8c, 0x0e, 0xd4, 0x84, 0xf3, 0x84, 0x4f, 0xa6, 0x2a, 0x62, 0x52, 0xd6,
0x3a, 0x8d, 0x0c, 0xc9, 0xda, 0x0e, 0xfb, 0xc2, 0x76, 0x2f, 0x44, 0x20, 0x92, 0x19, 0x62, 0x8e,
0x47, 0x21, 0xa9, 0xae, 0xd2, 0x57, 0x86, 0xfc, 0xcd, 0x76, 0x2f, 0xc7, 0x63, 0xe6, 0x29, 0x39,
0xc3, 0xc6, 0xc4, 0xb9, 0xee, 0xc4, 0xe1, 0x27, 0x18, 0x19, 0xa1, 0xf5, 0x99, 0x60, 0xc3, 0x4e,
0x44, 0x8c, 0xdd, 0x84, 0xac, 0x91, 0xf5, 0x38, 0x57, 0x90, 0x3c, 0x47, 0x22, 0x8d, 0x7c, 0x89,
0xf4, 0x2d, 0xcc, 0x40, 0xc4, 0x4c, 0x3e, 0xa6, 0x1d, 0x91, 0xd8, 0x1b, 0xfb, 0x90, 0xb9, 0x3d,
0x85, 0x23, 0x62, 0x34, 0x61, 0x27, 0x1b, 0x28, 0x76, 0x6d, 0x77, 0x0d, 0xa9, 0xac, 0xfa, 0xc5,
0x09, 0xa8, 0x94, 0x40, 0xe7, 0xdd, 0x1b, 0x6c, 0xa2, 0x77, 0x3e, 0x4f, 0xef, 0x2c, 0x60, 0xcf,
0x74, 0x91, 0xea, 0x26, 0xfc, 0xb3, 0x79, 0xfc, 0x3e, 0x0c, 0x15, 0x3c, 0x96, 0xe4, 0x3a, 0x65,
0x99, 0x38, 0x3f, 0x47, 0xec, 0x7a, 0x9e, 0xd8, 0x0d, 0xf5, 0x12, 0xf1, 0x73, 0xf8, 0x37, 0x19,
0x3e, 0x56, 0xeb, 0x18, 0xda, 0x02, 0x98, 0xb5, 0x60, 0x2e, 0x4e, 0x68, 0x24, 0x43, 0x2e, 0xe5,
0x02, 0x85, 0xac, 0xd0, 0x0e, 0x96, 0x16, 0xda, 0x66, 0x56, 0x68, 0x0f, 0xe0, 0xc1, 0x5a, 0x59,
0x66, 0xb5, 0xc7, 0x80, 0xd3, 0x8f, 0x84, 0x50, 0xc5, 0x16, 0x0c, 0xd9, 0x04, 0x26, 0xac, 0xe0,
0x25, 0x53, 0x80, 0xac, 0x77, 0x1a, 0x1c, 0x7b, 0x8e, 0x82, 0x90, 0x0c, 0x03, 0x5b, 0xd7, 0xe8,
0x5e, 0x24, 0x15, 0x8d, 0x3c, 0x46, 0x70, 0x8e, 0xd2, 0x45, 0xfa, 0x32, 0xd2, 0xa5, 0x92, 0xe7,
0x1b, 0x01, 0x6c, 0xac, 0x94, 0x39, 0x8b, 0xe0, 0xdb, 0x8f, 0x46, 0xe8, 0x1b, 0xfa, 0xc0, 0x88,
0x9a, 0x72, 0x39, 0x43, 0x87, 0x3a, 0xec, 0x89, 0x47, 0x96, 0x20, 0xd1, 0x0d, 0xaa, 0xbb, 0x3d,
0xc7, 0x0b, 0x11, 0xe0, 0xb2, 0xcc, 0xe4, 0x80, 0xd1, 0x40, 0xf1, 0x90, 0x69, 0xfe, 0xb2, 0x00,
0x27, 0xa8, 0xdf, 0x24, 0xdb, 0xd8, 0xc4, 0xdf, 0x20, 0xf3, 0xd8, 0x2f, 0xd0, 0x22, 0x87, 0x94,
0xc3, 0x64, 0x97, 0x87, 0x50, 0x14, 0xbc, 0x6c, 0xe0, 0xea, 0xe6, 0x93, 0x5d, 0xa8, 0x1a, 0x7a,
0x10, 0xf7, 0x96, 0xa9, 0x27, 0x91, 0x3c, 0x90, 0xee, 0xcd, 0x37, 0xa2, 0xf1, 0xb4, 0x6e, 0x61,
0xf3, 0x0e, 0xd0, 0x81, 0x96, 0x64, 0x01, 0x46, 0x92, 0x41, 0xee, 0xf6, 0x74, 0xa7, 0xa8, 0xad,
0x00, 0xbe, 0x81, 0x73, 0x82, 0xbe, 0x31, 0x40, 0x41, 0x4d, 0xf8, 0x12, 0x33, 0x47, 0xd8, 0x38,
0x8e, 0x40, 0x46, 0x68, 0xd5, 0x0f, 0x5a, 0xa4, 0x22, 0xcf, 0x2e, 0x6e, 0xab, 0x9d, 0x86, 0x81,
0x70, 0x4b, 0x90, 0x38, 0x95, 0xd8, 0xee, 0x59, 0xa2, 0xf6, 0x80, 0x95, 0x02, 0xa8, 0x4c, 0x0f,
0xbc, 0xc6, 0x70, 0x02, 0xc3, 0xa3, 0x9d, 0x3f, 0x41, 0xbe, 0x4a, 0xa5, 0x12, 0x21, 0xc1, 0x1e,
0x7d, 0x46, 0xbf, 0x61, 0xf6, 0x8d, 0x98, 0xba, 0x6d, 0xc6, 0x74, 0x0b, 0x73, 0x9a, 0xbb, 0xa4,
0xdd, 0xbc, 0xec, 0x6f, 0xd3, 0x17, 0xce, 0x4b, 0xb5, 0xc6, 0x7d, 0x75, 0x07, 0x7c, 0x93, 0x82,
0x11, 0xb1, 0xcb, 0xdd, 0x60, 0x89, 0xcb, 0x3c, 0xb4, 0x86, 0x8a, 0xe2, 0x88, 0x11, 0x81, 0x1b,
0xc0, 0xd0, 0x57, 0xe6, 0xef, 0xcb, 0xda, 0x70, 0x3a, 0x3a, 0x78, 0xf7, 0xee, 0x5d, 0x89, 0x0d,
0xeb, 0x75, 0x08, 0xe9, 0x88, 0x21, 0x17, 0xc8, 0x01, 0x11, 0x40, 0xbb, 0x43, 0xc9, 0x34, 0x61,
0x63, 0xa7, 0xb8, 0x56, 0x9a, 0x70, 0x35, 0x4d, 0x47, 0x75, 0x4f, 0x84, 0x8d, 0x8f, 0xcc, 0xff,
0xf0, 0x6c, 0x7e, 0xb1, 0x13, 0x87, 0xde, 0x12, 0x2f, 0xd9, 0xfe, 0x1c, 0x05, 0x34, 0x7a, 0xb0,
0x5d, 0xbd, 0xde, 0x69, 0x50, 0x77, 0x07, 0x8f, 0x1a, 0x3e, 0xf0, 0x18, 0x09, 0xee, 0x89, 0xf1,
0x9e, 0x84, 0xb3, 0x18, 0xc6, 0x88, 0x49, 0x13, 0xb3, 0xbc, 0xb0, 0xa2, 0x64, 0x5c, 0x0e, 0x8d,
0xfc, 0xe8, 0x79, 0x52, 0xab, 0x80, 0xfa, 0x3e, 0x66, 0xd9, 0x92, 0x06, 0xba, 0x67, 0x65, 0x0d,
0x58, 0x0b, 0x26, 0x6a, 0xb7, 0x9a, 0x25, 0x05, 0x68, 0x8a, 0x59, 0x48, 0x48, 0xe0, 0x06, 0x26,
0xbd, 0x12, 0xcd, 0x6f, 0xdf, 0x96, 0x0f, 0x19, 0xb9, 0x5a, 0x5b, 0xed, 0x32, 0x4d, 0xe3, 0xca,
0x7a, 0x18, 0x8c, 0x13, 0x2e, 0x12, 0xae, 0x5e, 0xca, 0x23, 0x46, 0xff, 0x8f, 0xb5, 0xa6, 0xda,
0x6f, 0x2e, 0xe3, 0x33, 0x84, 0x79, 0x77, 0x16, 0x66, 0x19, 0xa5, 0x2e, 0xba, 0x46, 0x39, 0x00,
0xdc, 0x2e, 0x97, 0x98, 0x76, 0xfc, 0x55, 0x91, 0x04, 0x7d, 0xda, 0x10, 0x44, 0x85, 0x6c, 0x37,
0xb8, 0x3a, 0xb7, 0x56, 0x41, 0xed, 0x17, 0x50, 0x5d, 0x00, 0x5b, 0x05, 0x75, 0x90, 0x97, 0xf3,
0x95, 0x11, 0xf9, 0x36, 0x87, 0x20, 0xbb, 0xe4, 0xeb, 0x94, 0x2b, 0xb6, 0x8a, 0xd4, 0x71, 0x01,
0x98, 0x55, 0xfa, 0x95, 0xac, 0xbd, 0x2b, 0x43, 0x6e, 0x22, 0x0d, 0x89, 0xc3, 0xd2, 0xe1, 0x46,
0xd6, 0x88, 0xd2, 0x46, 0xcd, 0x85, 0x21, 0x4b, 0x80, 0xda, 0x6a, 0x60, 0x2b, 0x4f, 0x47, 0xb6,
0x5b, 0x00, 0x7d, 0x5d, 0xa9, 0x69, 0xb0, 0x46, 0x1f, 0x5c, 0x95, 0xad, 0xca, 0x3a, 0x94, 0x58,
0x8b, 0xf1, 0xb5, 0xe2, 0xda, 0x96, 0xa1, 0x57, 0xed, 0xf9, 0xe1, 0x73, 0x03, 0x5c, 0xa7, 0x14,
0x69, 0xc6, 0xe3, 0x78, 0x34, 0x16, 0x18, 0x6e, 0xba, 0x1b, 0xbc, 0x83, 0xe2, 0x00, 0xd1, 0x56,
0x4e, 0x11, 0x77, 0x1b, 0x52, 0x58, 0x73, 0xc1, 0xf3, 0x48, 0x68, 0x3a, 0xa7, 0x0f, 0x22, 0xf1,
0xb0, 0x7e, 0x3c, 0x93, 0x51, 0xd1, 0x33, 0x6e, 0x48, 0x59, 0x1f, 0xf2, 0xd6, 0x26, 0x73, 0xc5,
0xa2, 0x62, 0x91, 0x09, 0x0d, 0x43, 0x4a, 0x3c, 0x91, 0x60, 0xdf, 0x05, 0xfa, 0xd8, 0x40, 0x68,
0x70, 0x95, 0x11, 0xca, 0x6b, 0x21, 0xc1, 0xfb, 0x01, 0x31, 0x1e, 0x83, 0x4a, 0x4b, 0xd2, 0x7d,
0xfd, 0xb4, 0x54, 0xba, 0xbd, 0xfd, 0x76, 0x3b, 0x0f, 0x2c, 0x7c, 0xb2, 0x66, 0x91, 0xb5, 0xa4,
0xe4, 0x9a, 0x2e, 0xec, 0x77, 0xc1, 0x41, 0xe2, 0x33, 0x68, 0x5b, 0xb0, 0x9a, 0x9b, 0xfe, 0x40,
0x17, 0x08, 0xac, 0x0f, 0xb7, 0x42, 0x03, 0xcd, 0xd2, 0xbb, 0xbe, 0x92, 0x77, 0x3b, 0x2c, 0xcc,
0x67, 0x70, 0x0f, 0x9b, 0xe3, 0x93, 0x5f, 0xc6, 0x14, 0xbf, 0x74, 0xdc, 0x61, 0x5b, 0x30, 0xe6,
0x49, 0xf8, 0x44, 0x13, 0x06, 0x4d, 0x22, 0x0f, 0x7c, 0xe2, 0x0b, 0x26, 0xb1, 0xbb, 0x02, 0xa3,
0x79, 0x41, 0xea, 0xb3, 0xac, 0xf9, 0x93, 0x69, 0x8c, 0x79, 0xa3, 0x6e, 0x4a, 0x04, 0x0b, 0xe7,
0x6a, 0xc5, 0xac, 0x3c, 0x99, 0xc3, 0xdd, 0xcb, 0x30, 0x0d, 0xa8, 0xca, 0x31, 0xcd, 0x87, 0x93,
0x0d, 0xba, 0x3c, 0xcb, 0xba, 0x15, 0xcb, 0xe0, 0xf0, 0xe8, 0x31, 0xbb, 0x98, 0xd3, 0xfb, 0x25,
0x64, 0xbc, 0xdc, 0x2e, 0x10, 0x7b, 0x5a, 0x81, 0x01, 0x8b, 0x26, 0x6a, 0x0a, 0x21, 0xbf, 0x5f,
0xd0, 0x91, 0x82, 0xb0, 0x8c, 0x11, 0xc3, 0x82, 0xc4, 0x1e, 0xcc, 0xa3, 0x41, 0x00, 0xed, 0x10,
0x43, 0xb1, 0xa5, 0x5a, 0xb4, 0xd2, 0xd9, 0xab, 0x32, 0x9a, 0x9b, 0x20, 0x4f, 0xd7, 0x79, 0x1a,
0x9c, 0xaf, 0x56, 0xba, 0xab, 0x86, 0x52, 0x51, 0xf4, 0x7e, 0xd9, 0x15, 0x52, 0xc9, 0x80, 0x5a,
0x49, 0x4b, 0x8c, 0xf0, 0xe6, 0x97, 0x77, 0xc7, 0xc7, 0xc7, 0xa7, 0xa4, 0x33, 0x72, 0x6f, 0x3e,
0xdf, 0xdd, 0x11, 0x1c, 0x53, 0xb0, 0x4f, 0xc6, 0xeb, 0x79, 0x82, 0xcc, 0x7a, 0x22, 0x8a, 0x30,
0x9d, 0x00, 0xf3, 0x20, 0x37, 0x4b, 0x22, 0x1a, 0x90, 0xa9, 0x90, 0x4a, 0xee, 0x98, 0x70, 0x42,
0x1b, 0x86, 0xf4, 0x85, 0xf0, 0x10, 0xaa, 0x84, 0xd2, 0xb2, 0x01, 0x43, 0x31, 0x34, 0xb5, 0x50,
0x8b, 0x23, 0xdd, 0xf0, 0x8f, 0xf5, 0xf5, 0x23, 0xd4, 0xcf, 0xd1, 0x1c, 0x87, 0x18, 0x3b, 0x64,
0xc4, 0x24, 0x16, 0x58, 0x09, 0xd9, 0x02, 0x86, 0x16, 0x6c, 0xbd, 0x48, 0x0a, 0x0d, 0x99, 0x88,
0x18, 0x62, 0x01, 0x2d, 0x78, 0x91, 0x2c, 0x31, 0xea, 0xa3, 0x50, 0xdd, 0x08, 0x3a, 0xba, 0xf6,
0x02, 0xab, 0x02, 0x5e, 0x8f, 0xec, 0x28, 0x38, 0x27, 0x78, 0xa9, 0x15, 0x8c, 0x82, 0xb3, 0x30,
0x78, 0xf6, 0xc9, 0xe5, 0xb0, 0x8f, 0x5c, 0x03, 0x95, 0x50, 0x8b, 0x85, 0x94, 0x91, 0x3d, 0x6c,
0x13, 0x51, 0xbc, 0xea, 0xd2, 0xf6, 0x17, 0xb5, 0x50, 0xf6, 0x6a, 0x5c, 0x2b, 0xac, 0xf1, 0x0f,
0xf8, 0xb4, 0xd6, 0xf4, 0x6b, 0x97, 0x9e, 0xb9, 0x33, 0x1e, 0xab, 0x0f, 0x75, 0xad, 0xac, 0xf9,
0xc6, 0xb7, 0x4d, 0x6d, 0xe9, 0x67, 0xe3, 0x7c, 0xe7, 0x89, 0x78, 0x60, 0xc9, 0x52, 0xa7, 0xcd,
0x6a, 0xe3, 0xcd, 0xf0, 0x95, 0xd7, 0x2e, 0xbb, 0x46, 0xbc, 0xf9, 0xdc, 0xff, 0x34, 0x58, 0x99,
0x18, 0xad, 0xe5, 0x97, 0x7e, 0x59, 0x67, 0x8c, 0x9a, 0xc8, 0x04, 0xf5, 0xc0, 0x4d, 0xa1, 0x10,
0x71, 0x1a, 0x80, 0x0d, 0x13, 0x34, 0x28, 0xb6, 0xd9, 0xd0, 0xa8, 0x81, 0x55, 0xa0, 0x65, 0x03,
0x6b, 0xa5, 0x38, 0xa1, 0x64, 0xf6, 0xc3, 0xdb, 0x70, 0x6d, 0xdf, 0x5b, 0x86, 0x20, 0xb9, 0xd1,
0x34, 0xa5, 0x18, 0x0e, 0x81, 0x4e, 0xdb, 0x27, 0x63, 0x81, 0xc8, 0x02, 0x36, 0x92, 0xdc, 0x3f,
0x76, 0x72, 0xf7, 0x82, 0x8e, 0x3e, 0x59, 0x88, 0x5a, 0xeb, 0x75, 0xd8, 0xde, 0x7c, 0xfe, 0x32,
0xbc, 0x1c, 0x2c, 0x28, 0xe1, 0xb0, 0x69, 0x58, 0xef, 0x67, 0x67, 0x94, 0xf4, 0x97, 0x1f, 0x3d,
0xd3, 0xe1, 0xe7, 0xfe, 0xd9, 0x70, 0x51, 0x8f, 0x47, 0x87, 0x86, 0xc4, 0x45, 0xc0, 0x51, 0xc4,
0x5e, 0x77, 0x4d, 0xe2, 0xb8, 0xf9, 0x7c, 0xd1, 0xeb, 0x1a, 0x25, 0x96, 0x39, 0xe8, 0xea, 0x74,
0x41, 0xee, 0x44, 0xcc, 0xbd, 0x75, 0x14, 0xba, 0xaf, 0x8c, 0xa8, 0x23, 0xf2, 0x0a, 0x6f, 0x57,
0x37, 0x63, 0x5f, 0x2d, 0x4f, 0x5c, 0xfd, 0x74, 0x04, 0xe3, 0xdd, 0xb4, 0x3c, 0xb5, 0x6f, 0x70,
0xbd, 0xf3, 0xac, 0x0f, 0x87, 0xae, 0xd9, 0xda, 0x38, 0x79, 0x12, 0x3d, 0x1e, 0x6d, 0x5b, 0xde,
0xc3, 0xbf, 0x94, 0x5a, 0x52, 0xd9, 0xb5, 0x3f, 0xe4, 0x85, 0x3d, 0xcb, 0x28, 0x18, 0xbe, 0x73,
0xb3, 0x7e, 0x39, 0x8a, 0x61, 0xe9, 0x9f, 0x0c, 0xe2, 0xf9, 0x5b, 0x85, 0x75, 0xb1, 0xac, 0x4b,
0x13, 0x9e, 0xad, 0xb5, 0xf3, 0x87, 0x48, 0xa1, 0x08, 0x44, 0x40, 0x1d, 0x32, 0x12, 0x3a, 0x36,
0x34, 0x0e, 0xfe, 0x84, 0x91, 0x5e, 0x5f, 0xe7, 0x28, 0x5c, 0x09, 0xb0, 0x93, 0x20, 0x26, 0xdc,
0xe0, 0x34, 0xbd, 0xf6, 0xeb, 0xd9, 0x08, 0x9a, 0x96, 0x5f, 0x31, 0xb5, 0xe9, 0xb2, 0x64, 0xb2,
0x23, 0x99, 0xc2, 0xd9, 0xa0, 0xdc, 0xba, 0x95, 0x4f, 0x9c, 0x7d, 0x01, 0x29, 0x1b, 0x39, 0x32,
0x44, 0x16, 0xc2, 0xf9, 0xfa, 0xe3, 0xda, 0x1e, 0x07, 0x66, 0x20, 0x97, 0x60, 0xcc, 0xbd, 0x94,
0x2e, 0xd6, 0xaf, 0x7b, 0xcb, 0xf1, 0x9a, 0xcd, 0x85, 0xee, 0x08, 0x9b, 0xa2, 0x4d, 0xf3, 0xca,
0x75, 0xdf, 0xf8, 0x09, 0xe4, 0x86, 0xa8, 0x06, 0x2e, 0x62, 0xe6, 0xf6, 0xb5, 0xae, 0x75, 0xad,
0x2f, 0xb8, 0x3e, 0x45, 0x8d, 0x4f, 0xe3, 0xf1, 0x86, 0x7b, 0xad, 0x6b, 0x68, 0xad, 0xc8, 0xdc,
0xe5, 0x1d, 0xd9, 0x7c, 0xe7, 0x76, 0x7d, 0x01, 0x28, 0xfa, 0xc6, 0x0e, 0xd9, 0x42, 0xc5, 0x9d,
0xe7, 0xf6, 0x38, 0x99, 0xbb, 0x7b, 0xcb, 0x80, 0x9b, 0xaf, 0x26, 0x9e, 0x59, 0x85, 0x5e, 0x9c,
0x53, 0xa0, 0x9d, 0x72, 0x49, 0xbd, 0xa4, 0xff, 0xd6, 0xab, 0x21, 0xec, 0xa7, 0xd0, 0xf7, 0x57,
0xb7, 0x07, 0x39, 0xb6, 0xb5, 0x06, 0xfd, 0x60, 0x33, 0xfa, 0x0c, 0x3b, 0x4f, 0xe2, 0x7d, 0x7d,
0x65, 0x87, 0xae, 0x16, 0xa7, 0x72, 0x1a, 0xf0, 0xe8, 0x21, 0x4f, 0x0b, 0x22, 0x9a, 0x73, 0x5f,
0x50, 0xf5, 0x18, 0x3f, 0x33, 0xaa, 0x29, 0x14, 0x69, 0x49, 0x1f, 0xb3, 0x2b, 0x1f, 0xfc, 0x24,
0x5e, 0xe4, 0x65, 0xab, 0xf2, 0x04, 0x56, 0xcf, 0x1a, 0x9f, 0x3c, 0xd9, 0x47, 0x93, 0x6a, 0xae,
0x78, 0xe8, 0x27, 0x55, 0x8a, 0x1e, 0x04, 0xe3, 0x66, 0x54, 0x30, 0xc7, 0xe3, 0xd9, 0xd0, 0x66,
0x82, 0x01, 0xe8, 0xea, 0x88, 0xc4, 0x0f, 0x8d, 0x00, 0x59, 0x34, 0x3c, 0x07, 0xee, 0x90, 0x25,
0x50, 0x64, 0x74, 0xd8, 0x9f, 0xd3, 0xd4, 0x27, 0x09, 0x34, 0x5f, 0xe5, 0xeb, 0x97, 0xf3, 0xee,
0xab, 0xb1, 0xb0, 0xd5, 0x6a, 0x63, 0xee, 0xc4, 0x3f, 0xcd, 0xe6, 0xca, 0x91, 0xef, 0xa0, 0x09,
0xd9, 0x1d, 0x7f, 0x57, 0xc3, 0x1c, 0x1e, 0x35, 0x61, 0x50, 0xc3, 0xdf, 0x66, 0x73, 0xe5, 0x80,
0x66, 0x62, 0x05, 0x7f, 0x57, 0x13, 0x6a, 0xbf, 0x3d, 0x42, 0x18, 0xf8, 0x5d, 0x43, 0xe8, 0xdd,
0x7e, 0x0b, 0x06, 0x2d, 0xfc, 0x5d, 0x4d, 0xa8, 0xd5, 0xd4, 0xa7, 0xe9, 0x3f, 0x6b, 0x48, 0xb5,
0x0c, 0x53, 0xad, 0x32, 0x57, 0x0b, 0xf3, 0x18, 0x24, 0xaf, 0xff, 0x30, 0x16, 0x63, 0x1b, 0x66,
0x54, 0x85, 0x99, 0x1d, 0xcb, 0x73, 0x2f, 0x8c, 0x13, 0xf1, 0x58, 0x27, 0x43, 0x01, 0x33, 0xc8,
0x48, 0xd0, 0xc4, 0x37, 0x1d, 0x21, 0x26, 0xcb, 0x2c, 0x31, 0x92, 0x29, 0x04, 0xa5, 0xb6, 0x47,
0x71, 0xf1, 0x88, 0xc5, 0x6a, 0xed, 0xa7, 0xd7, 0x9f, 0xf9, 0x8a, 0x6a, 0xcd, 0x7d, 0xa1, 0xc5,
0x2f, 0xc5, 0xf0, 0x07, 0xbf, 0x26, 0xe3, 0xa7, 0x65, 0xfc, 0x3f, 0x59, 0xff, 0x03, 0x7a, 0xb5,
0xbc, 0x3e, 0xa3, 0x25, 0x00, 0x00
0xb6, 0xe5, 0x95, 0x64, 0x1e, 0xd3, 0xed, 0x7f, 0xbf, 0xe7, 0xc8, 0x8f, 0x24, 0x26, 0xaf, 0xde,
0xd9, 0x0f, 0x0d, 0xb6, 0x74, 0xce, 0xd1, 0x79, 0x3f, 0xe4, 0x76, 0x76, 0xba, 0x9f, 0x2e, 0xee,
0xfe, 0xe8, 0x5f, 0x92, 0xa9, 0x0e, 0x03, 0xb7, 0x83, 0xbf, 0x24, 0xa0, 0xd1, 0xc4, 0xb1, 0x59,
0x64, 0xc3, 0x3b, 0xa3, 0xbe, 0xdb, 0x09, 0x99, 0xa6, 0x24, 0xa2, 0x21, 0x73, 0xec, 0x47, 0xce,
0x9e, 0x62, 0x21, 0xb5, 0x4d, 0x3c, 0x11, 0x69, 0x16, 0x69, 0xc7, 0x7e, 0xe2, 0xbe, 0x9e, 0x3a,
0xed, 0x66, 0xd3, 0x76, 0xad, 0x14, 0xd4, 0x2a, 0xed, 0xf9, 0xec, 0x91, 0x7b, 0x6c, 0xcf, 0xbc,
0xd4, 0x78, 0xc4, 0x35, 0xa7, 0xc1, 0x9e, 0xf2, 0x68, 0xc0, 0x9c, 0x56, 0x2d, 0xa4, 0xcf, 0x3c,
0x4c, 0xc2, 0xe2, 0x3d, 0x51, 0x4c, 0x9a, 0x17, 0x3a, 0x82, 0xf7, 0x48, 0xd8, 0xc4, 0x2a, 0x1d,
0x9d, 0x31, 0xe4, 0x4d, 0xa9, 0x54, 0x0c, 0x0e, 0x49, 0xf4, 0x78, 0xef, 0x18, 0x56, 0x35, 0xd7,
0x01, 0x73, 0x87, 0x2f, 0x91, 0x47, 0x86, 0x4c, 0x6b, 0x1e, 0x4d, 0x54, 0xa7, 0x91, 0x2e, 0x76,
0x94, 0x27, 0x79, 0xac, 0x5d, 0xeb, 0x91, 0x4a, 0x12, 0x08, 0x8f, 0xc7, 0x35, 0xdf, 0xf1, 0x85,
0x97, 0x84, 0xc0, 0x66, 0x0d, 0x16, 0x9c, 0x9d, 0xd6, 0xe9, 0x38, 0x89, 0x3c, 0xcd, 0x45, 0x44,
0x26, 0x3d, 0xbf, 0xc2, 0xaa, 0xdf, 0x25, 0xd3, 0x89, 0x8c, 0x88, 0x5f, 0x9f, 0x30, 0x7d, 0x19,
0x30, 0x04, 0x3d, 0x7f, 0x31, 0x5b, 0x3f, 0x0a, 0x50, 0x2d, 0x26, 0x93, 0x80, 0x21, 0x74, 0x8a,
0x54, 0xf7, 0x02, 0xaa, 0xd4, 0x47, 0xae, 0x74, 0x3d, 0xdb, 0xb2, 0xa7, 0xdc, 0x67, 0x76, 0xb5,
0x86, 0xfb, 0xf6, 0xad, 0xb0, 0x77, 0xd7, 0x00, 0xcd, 0xe8, 0x5e, 0x57, 0xaa, 0xdf, 0x9f, 0x78,
0xe4, 0x8b, 0xa7, 0xba, 0x88, 0x59, 0x04, 0x00, 0x5a, 0xc7, 0xea, 0xa4, 0xd1, 0x78, 0x88, 0x44,
0xfd, 0x29, 0x60, 0xc8, 0x54, 0x83, 0x83, 0x96, 0xe5, 0x98, 0x7a, 0x4c, 0x35, 0x12, 0x3f, 0xde,
0x8b, 0x84, 0xe6, 0x63, 0xce, 0x64, 0x63, 0x9e, 0xd0, 0x79, 0x99, 0x50, 0x43, 0x65, 0xba, 0xb1,
0x6b, 0xf6, 0x9f, 0x8a, 0x05, 0xe3, 0x79, 0x68, 0xea, 0xdf, 0x03, 0xfc, 0xd1, 0x61, 0xfb, 0xd0,
0x71, 0xfc, 0xfa, 0x70, 0x5c, 0xef, 0xf6, 0xea, 0x8f, 0x34, 0x48, 0xd8, 0xfb, 0x56, 0xb6, 0x70,
0xf9, 0x25, 0x5d, 0x78, 0xf3, 0xa6, 0xb2, 0xf0, 0xee, 0x34, 0xab, 0x27, 0xed, 0xf6, 0xd1, 0x71,
0x09, 0x0f, 0xc0, 0x9a, 0xf9, 0xd2, 0xd9, 0x22, 0x66, 0xfe, 0xee, 0xb4, 0xaa, 0xb5, 0xe6, 0x26,
0xea, 0xad, 0xea, 0x1c, 0x97, 0x81, 0xa0, 0xfe, 0xbf, 0x87, 0x15, 0x56, 0xd3, 0xce, 0x4e, 0xb3,
0xfa, 0x3d, 0x60, 0x9a, 0x08, 0xc0, 0xf7, 0x24, 0xa3, 0x9a, 0x65, 0x96, 0xaa, 0xd8, 0xa9, 0xc9,
0xed, 0xea, 0xa9, 0xa8, 0x83, 0xc8, 0x67, 0x5a, 0x4b, 0x3e, 0x4a, 0x34, 0xe8, 0x5a, 0x49, 0xcf,
0xae, 0xb1, 0x6a, 0xad, 0xbc, 0xae, 0x5f, 0x62, 0x06, 0x4a, 0xd1, 0xec, 0x59, 0x37, 0xee, 0xe9,
0x23, 0xcd, 0x09, 0xbc, 0x02, 0xa4, 0x0a, 0x7c, 0xcc, 0xae, 0xe9, 0x6a, 0xcd, 0xaf, 0x8f, 0x84,
0xff, 0x52, 0xa7, 0x31, 0xa8, 0xd6, 0xbf, 0x98, 0xf2, 0xc0, 0xaf, 0x08, 0x84, 0xa7, 0xbe, 0x7f,
0xf9, 0x08, 0x5c, 0xa0, 0x8d, 0x59, 0xc4, 0x64, 0xc5, 0x46, 0x9e, 0xed, 0x5a, 0xa5, 0xea, 0xb8,
0xdf, 0xaf, 0x98, 0xfe, 0xbd, 0x52, 0xad, 0x81, 0x8f, 0xfe, 0x4e, 0x83, 0x4a, 0xf5, 0xc7, 0x72,
0x04, 0x26, 0xa5, 0x90, 0xc0, 0x27, 0x20, 0x40, 0x38, 0x29, 0x11, 0xb0, 0x7a, 0x20, 0x26, 0x15,
0xfb, 0x12, 0xd7, 0x49, 0xa6, 0x05, 0xb0, 0x23, 0x19, 0xf3, 0x80, 0x19, 0x79, 0x20, 0x7e, 0x24,
0xc8, 0xfd, 0x31, 0x5b, 0x17, 0x63, 0x8c, 0xd1, 0x31, 0x9f, 0x24, 0x92, 0x1a, 0xb5, 0xa5, 0xf2,
0x90, 0x31, 0xe5, 0xe8, 0x3f, 0xff, 0x8d, 0x7a, 0x91, 0x27, 0xc2, 0x18, 0xb4, 0xc7, 0x48, 0x4c,
0x27, 0x8c, 0xf8, 0x54, 0xd3, 0x1d, 0xf0, 0x86, 0x39, 0x4d, 0x7f, 0xb8, 0x00, 0x77, 0x18, 0x0b,
0x59, 0xb9, 0x77, 0x9a, 0xa7, 0xf7, 0x9d, 0xe3, 0xd3, 0xfb, 0xdd, 0xdd, 0xaa, 0xf1, 0xe4, 0x2b,
0x7b, 0xb7, 0x72, 0xbf, 0x0b, 0x66, 0xa9, 0x7b, 0x53, 0xe6, 0x3d, 0x30, 0xdf, 0x49, 0x97, 0x87,
0x76, 0x35, 0x35, 0x99, 0xeb, 0xde, 0xbf, 0x69, 0xa5, 0x5e, 0x3f, 0x58, 0x01, 0x3b, 0x58, 0x80,
0x9d, 0x9d, 0x7a, 0x85, 0xa7, 0x62, 0xa4, 0x82, 0x57, 0x81, 0x8d, 0x9b, 0x35, 0xe1, 0x40, 0x74,
0x96, 0xb8, 0x60, 0xbb, 0xce, 0x72, 0x46, 0x7e, 0x13, 0x35, 0x9d, 0xed, 0x0d, 0x96, 0xec, 0x89,
0xdf, 0x9c, 0xfd, 0xd3, 0x12, 0xaf, 0x0e, 0xab, 0x95, 0x38, 0x72, 0xf4, 0x8c, 0x9d, 0x61, 0xbf,
0x60, 0x67, 0xc1, 0xb7, 0x53, 0x2a, 0xcf, 0x31, 0xe0, 0x28, 0xfd, 0x02, 0xf6, 0xf1, 0xb9, 0x8a,
0x03, 0xfa, 0xe2, 0x30, 0xb7, 0xf9, 0xde, 0x8e, 0x44, 0xc4, 0xec, 0x13, 0x7b, 0x04, 0xc9, 0xe5,
0x01, 0xcc, 0xe3, 0x36, 0x0b, 0x9f, 0xee, 0xe7, 0x87, 0xce, 0x29, 0x3a, 0x77, 0x86, 0xef, 0xea,
0x89, 0x6b, 0x6f, 0x5a, 0x89, 0x31, 0xb7, 0xf5, 0xc0, 0x8d, 0x17, 0x50, 0xaa, 0xd5, 0xef, 0x1e,
0x55, 0x8c, 0x60, 0xa0, 0x9d, 0x2c, 0xf0, 0xe2, 0xe0, 0xd2, 0xe9, 0x08, 0x22, 0xe0, 0xe1, 0xd4,
0x80, 0x60, 0x0c, 0x97, 0x40, 0x70, 0x69, 0x1e, 0xe4, 0xb0, 0x79, 0x58, 0xa6, 0x82, 0x4b, 0x3f,
0x50, 0xde, 0x1a, 0x5a, 0x7e, 0x8e, 0x3d, 0xe0, 0xcc, 0x46, 0x47, 0x3b, 0xb1, 0x1d, 0x27, 0x4b,
0x27, 0x20, 0x98, 0xf1, 0xab, 0x7a, 0x2c, 0x85, 0x16, 0x9e, 0x08, 0x40, 0x40, 0x93, 0x49, 0x9b,
0xb5, 0x8a, 0x49, 0xb1, 0x0e, 0x42, 0x04, 0x43, 0x2d, 0x24, 0x78, 0x17, 0x26, 0xd1, 0x9e, 0x66,
0x21, 0x46, 0x82, 0xd7, 0x03, 0x9d, 0x55, 0xff, 0xfe, 0x3b, 0x03, 0x03, 0xfc, 0x30, 0x06, 0xc7,
0xfd, 0x00, 0xf4, 0xc9, 0x8d, 0xf0, 0x59, 0x9d, 0xf4, 0x03, 0x86, 0x1c, 0x32, 0x4c, 0x70, 0xe4,
0xeb, 0xc7, 0xcb, 0x2e, 0xe9, 0xf5, 0xc1, 0x35, 0x6b, 0x0b, 0x14, 0xd5, 0x22, 0xc5, 0x9a, 0xa1,
0x56, 0xad, 0x22, 0x94, 0xc9, 0x0f, 0x48, 0xfe, 0xbd, 0x49, 0x9c, 0x90, 0x37, 0xed, 0x5d, 0xb3,
0x7d, 0x62, 0xdb, 0xd5, 0xdd, 0x59, 0x0e, 0x6c, 0xa8, 0xfa, 0xbd, 0x7a, 0x1f, 0x3b, 0x87, 0x76,
0x6d, 0xa7, 0x55, 0xfd, 0x61, 0x75, 0x1a, 0x59, 0xa1, 0xe8, 0x18, 0x8b, 0xba, 0xff, 0xe2, 0x21,
0x96, 0x1c, 0x92, 0xc8, 0x00, 0xf2, 0x86, 0x31, 0xb2, 0xa7, 0x14, 0xe4, 0x14, 0x00, 0x34, 0x00,
0x9d, 0x46, 0x5a, 0x22, 0x31, 0x0d, 0x40, 0x50, 0xe2, 0xc9, 0x8e, 0x0d, 0xda, 0x82, 0x72, 0x04,
0x0e, 0x1b, 0x5a, 0x84, 0xc3, 0x3b, 0x3e, 0xfd, 0xa9, 0xec, 0xac, 0x84, 0x0e, 0xc7, 0x36, 0x81,
0x02, 0x36, 0x15, 0xb0, 0x13, 0x0b, 0x05, 0xa5, 0x14, 0xc2, 0x3b, 0x19, 0x85, 0x1c, 0x4a, 0x19,
0x7a, 0x3e, 0xa0, 0xfa, 0xfc, 0x91, 0x98, 0x1a, 0xe1, 0xd8, 0x5a, 0x80, 0x7a, 0x9e, 0xb2, 0x35,
0x2b, 0x5b, 0x9c, 0xb2, 0x20, 0x3e, 0x87, 0x35, 0x48, 0x47, 0x1a, 0x8b, 0x10, 0x24, 0x2e, 0xc7,
0x4e, 0x5f, 0x90, 0x9a, 0x17, 0x70, 0xef, 0xc1, 0xb1, 0xaf, 0x91, 0xd6, 0xfb, 0x4e, 0x23, 0xdd,
0x00, 0x56, 0x81, 0x44, 0x81, 0x63, 0xad, 0x40, 0x3a, 0x47, 0xa4, 0x73, 0xea, 0x3d, 0xcc, 0xf0,
0x16, 0x4e, 0x49, 0x39, 0xb5, 0xdd, 0x21, 0x7d, 0x64, 0x33, 0x90, 0xa9, 0x84, 0xda, 0x9f, 0xd2,
0x9f, 0xee, 0xa7, 0x25, 0x18, 0x54, 0x9c, 0xc4, 0xa0, 0x9e, 0x7d, 0x58, 0x3a, 0x70, 0x8d, 0x0d,
0xcf, 0x25, 0xa8, 0x07, 0x5c, 0x4f, 0xc3, 0xf2, 0x81, 0xfb, 0xa5, 0xdb, 0x27, 0x7d, 0x50, 0xee,
0x09, 0xe9, 0xf0, 0x28, 0x4e, 0x74, 0xa6, 0x9e, 0x2f, 0x7d, 0x3b, 0x67, 0x2e, 0x4a, 0xc2, 0x11,
0x93, 0xa0, 0x2d, 0x1e, 0x39, 0x76, 0x0b, 0xfe, 0xd2, 0x67, 0xc7, 0x3e, 0x6a, 0xb7, 0x0f, 0xda,
0x76, 0xae, 0x1e, 0x1f, 0x1e, 0x25, 0xfb, 0x2b, 0xe1, 0x92, 0xa1, 0x15, 0xa4, 0xbb, 0x1f, 0xf9,
0x8b, 0x54, 0xb3, 0xee, 0xe1, 0xcb, 0xbe, 0x4d, 0xfe, 0x7f, 0xaa, 0x28, 0x82, 0x65, 0xc4, 0x9a,
0x48, 0x91, 0xc4, 0xca, 0x08, 0xb0, 0xc0, 0x36, 0x24, 0x13, 0x63, 0x6b, 0xfc, 0xbb, 0x78, 0x8e,
0x71, 0x14, 0xa0, 0x99, 0x26, 0x87, 0x13, 0x93, 0x17, 0x5c, 0x62, 0x2d, 0x62, 0x0f, 0x32, 0xec,
0xc1, 0x56, 0xd8, 0x1d, 0x8d, 0xcd, 0x11, 0xb1, 0xb2, 0xcd, 0x90, 0xca, 0x09, 0x8f, 0x4e, 0x9a,
0x84, 0x26, 0x5a, 0xe0, 0x2e, 0x30, 0xac, 0x81, 0xf1, 0x06, 0xfe, 0xc0, 0xbf, 0x56, 0xf1, 0xb4,
0x5f, 0x3c, 0x1d, 0x14, 0x4f, 0x87, 0xc5, 0x53, 0xdb, 0x2a, 0x1e, 0x8f, 0x8a, 0xa7, 0xb7, 0xc5,
0xd3, 0x71, 0xfa, 0xd4, 0x30, 0xe4, 0xd3, 0x23, 0x86, 0x50, 0xf6, 0x4e, 0x0a, 0x80, 0x5c, 0xe3,
0xa9, 0x04, 0x26, 0xe5, 0x8e, 0xc4, 0x73, 0x26, 0x59, 0x2b, 0xf7, 0x7f, 0x78, 0x72, 0xcb, 0x28,
0x4b, 0x31, 0xf6, 0x8b, 0xd6, 0x0f, 0x1e, 0xb7, 0x43, 0x39, 0x28, 0x0e, 0x39, 0x78, 0x8d, 0xb1,
0x9c, 0xaf, 0xc3, 0x02, 0xe5, 0x70, 0xcb, 0x43, 0xda, 0x33, 0xbe, 0xda, 0x5b, 0xa2, 0x1c, 0x15,
0x87, 0x1c, 0x6d, 0xcb, 0xd7, 0xdb, 0x02, 0xe5, 0xed, 0x96, 0x87, 0x1c, 0xcf, 0xf8, 0x3a, 0xce,
0x51, 0xe6, 0x8d, 0x35, 0x60, 0x1e, 0xe3, 0x8f, 0xec, 0x64, 0x1b, 0x62, 0x83, 0x56, 0x41, 0x6c,
0xb0, 0xa5, 0xbd, 0x06, 0xfb, 0x39, 0xc7, 0x83, 0xfd, 0x2d, 0x85, 0x1c, 0x14, 0xf6, 0x1a, 0x1c,
0x6c, 0x79, 0xc8, 0xe1, 0x8c, 0xaf, 0x2d, 0xed, 0x35, 0x68, 0x17, 0x87, 0xb4, 0xb7, 0xe5, 0xab,
0xb0, 0xd7, 0xe0, 0x68, 0xcb, 0x43, 0xde, 0xce, 0xf8, 0xda, 0xd2, 0x5e, 0x83, 0xe3, 0xe2, 0x90,
0x45, 0x73, 0x35, 0x4c, 0x74, 0x43, 0x42, 0x85, 0xc4, 0x53, 0xd8, 0x2c, 0x12, 0x4f, 0x92, 0xc6,
0xab, 0xe8, 0x65, 0x74, 0xa0, 0x26, 0x9c, 0x4b, 0x3e, 0x99, 0xea, 0x88, 0x29, 0x55, 0xeb, 0x34,
0x32, 0x24, 0x6b, 0x3b, 0xec, 0x0b, 0xdb, 0xbd, 0x10, 0x81, 0x90, 0x33, 0xc4, 0x1c, 0x8f, 0x42,
0x52, 0x5d, 0xa5, 0xaf, 0x0c, 0xf9, 0x9b, 0xed, 0x5e, 0x8e, 0xc7, 0xcc, 0xd3, 0x6a, 0x86, 0x8d,
0x89, 0x73, 0xdd, 0x89, 0xc3, 0x4f, 0x30, 0x32, 0x42, 0xeb, 0x33, 0xc1, 0x86, 0x9d, 0x88, 0x18,
0xbb, 0x09, 0x55, 0x23, 0xeb, 0x71, 0xae, 0x20, 0x79, 0x8e, 0x44, 0x12, 0xf9, 0x0a, 0xe9, 0x5b,
0x98, 0x81, 0x48, 0x3a, 0xf9, 0xa4, 0xed, 0x88, 0xc2, 0xde, 0xd8, 0x87, 0xcc, 0xed, 0x69, 0x1c,
0x11, 0xa3, 0x09, 0x3b, 0xd9, 0x40, 0xb1, 0x6b, 0xbb, 0x6b, 0x48, 0x65, 0xd5, 0x2f, 0x96, 0xa0,
0x52, 0x02, 0x9d, 0x77, 0x6f, 0xb0, 0x89, 0xde, 0xf9, 0x3c, 0xbd, 0xb3, 0x80, 0x3d, 0xd3, 0x45,
0xaa, 0x9b, 0xf0, 0xcf, 0xe6, 0xf1, 0xfb, 0x30, 0x54, 0xf0, 0x58, 0x91, 0xeb, 0x84, 0x65, 0xe2,
0xfc, 0x1c, 0xb1, 0xeb, 0x79, 0x62, 0x37, 0xd4, 0x93, 0xe2, 0xe7, 0xf0, 0x6f, 0x32, 0x7c, 0xac,
0xd6, 0x31, 0xb4, 0x05, 0x30, 0x6b, 0xc1, 0x5c, 0x2c, 0x69, 0xa4, 0x42, 0xae, 0xd4, 0x02, 0x85,
0xac, 0xd0, 0x0e, 0x96, 0x16, 0xda, 0x66, 0x56, 0x68, 0x0f, 0xe0, 0xc1, 0x5a, 0x59, 0x66, 0x8d,
0xc7, 0x80, 0xd3, 0x8f, 0x84, 0xd0, 0xc5, 0x16, 0x0c, 0xd9, 0x04, 0x26, 0xac, 0xe0, 0x25, 0x53,
0x80, 0xaa, 0x77, 0x1a, 0x1c, 0x7b, 0x8e, 0x82, 0x90, 0x0a, 0x03, 0xdb, 0xd4, 0xe8, 0x5e, 0xa4,
0x34, 0x8d, 0x3c, 0x46, 0x70, 0x8e, 0x32, 0x45, 0xfa, 0x32, 0x32, 0xa5, 0x92, 0xe7, 0x1b, 0x01,
0x6c, 0xac, 0x94, 0x39, 0x8b, 0xe0, 0xdb, 0x8f, 0xa9, 0xd0, 0x37, 0xf4, 0x81, 0x11, 0x3d, 0xe5,
0x6a, 0x86, 0x0e, 0x75, 0xd8, 0x13, 0x8f, 0x4c, 0x22, 0xd1, 0x0d, 0xaa, 0xbb, 0x3d, 0xc7, 0x0b,
0x11, 0xe0, 0xb2, 0xcc, 0xe4, 0x80, 0xd1, 0x40, 0xf3, 0x90, 0x19, 0xfe, 0xb2, 0x00, 0x27, 0xa8,
0x5f, 0x99, 0x6d, 0x6c, 0xe2, 0x6f, 0x90, 0x79, 0xec, 0x17, 0x68, 0x91, 0x43, 0xca, 0x61, 0xb2,
0xcb, 0x43, 0x28, 0x0a, 0x5e, 0x36, 0x70, 0x75, 0xf3, 0xc9, 0x2e, 0x54, 0x0d, 0x3d, 0x88, 0x7b,
0xcb, 0xf4, 0x93, 0x90, 0x0f, 0xa4, 0x7b, 0xf3, 0x8d, 0x18, 0x3c, 0xa3, 0x5b, 0xd8, 0xbc, 0x03,
0x74, 0xa0, 0xa5, 0x58, 0x80, 0x91, 0x94, 0x22, 0x77, 0x7b, 0xa6, 0x53, 0x34, 0x56, 0x00, 0xdf,
0xc0, 0x39, 0xc1, 0xdc, 0x18, 0xa0, 0xa0, 0x69, 0xf8, 0x92, 0x74, 0x8e, 0xb0, 0x71, 0x1c, 0x81,
0x8c, 0xd0, 0xaa, 0x1f, 0xb4, 0x48, 0x45, 0x9d, 0x5d, 0xdc, 0x56, 0x3b, 0x8d, 0x14, 0xc2, 0x2d,
0x41, 0xe2, 0x54, 0x62, 0xbb, 0x67, 0x52, 0xef, 0x01, 0x2b, 0x05, 0x50, 0x99, 0x1e, 0x78, 0x4d,
0xca, 0x09, 0x0c, 0x8f, 0x76, 0xfe, 0x04, 0xf9, 0x2a, 0x51, 0x5a, 0x84, 0x04, 0x7b, 0xf4, 0x19,
0xfd, 0x46, 0xba, 0x9f, 0x8a, 0x69, 0xda, 0x66, 0x4c, 0xb7, 0x30, 0xa7, 0xb9, 0x4b, 0xda, 0xcd,
0xcb, 0xfe, 0x36, 0x7d, 0xe1, 0xbc, 0x54, 0x6b, 0xdc, 0xd7, 0x74, 0xc0, 0x37, 0x09, 0x18, 0x11,
0xbb, 0xdc, 0x0d, 0x96, 0xb8, 0xcc, 0x43, 0x6b, 0xa8, 0x29, 0x8e, 0x18, 0x11, 0xb8, 0x01, 0x0c,
0x7d, 0x65, 0xfe, 0xbe, 0xac, 0x0d, 0xa7, 0xa3, 0x83, 0x77, 0xef, 0xde, 0x95, 0xd8, 0xb0, 0x5e,
0x87, 0x90, 0x89, 0x18, 0x72, 0x81, 0x1c, 0x10, 0x01, 0xb4, 0x3b, 0x94, 0x4c, 0x25, 0x1b, 0x3b,
0xc5, 0xb5, 0xd2, 0x84, 0xeb, 0x69, 0x32, 0xaa, 0x7b, 0x22, 0x6c, 0x7c, 0x64, 0xfe, 0x87, 0xe7,
0xf4, 0x17, 0x3b, 0x71, 0xe8, 0x2d, 0xf1, 0x92, 0xed, 0xcf, 0x51, 0x40, 0xa3, 0x07, 0xdb, 0x35,
0xeb, 0x9d, 0x06, 0x75, 0x77, 0xf0, 0xa8, 0xe1, 0x03, 0x8f, 0x91, 0xe0, 0x9e, 0x18, 0xef, 0x29,
0x38, 0x8b, 0x61, 0x8c, 0xa4, 0x69, 0x62, 0x96, 0x17, 0x56, 0x94, 0x8c, 0xcb, 0x61, 0x2a, 0x3f,
0x7a, 0x9e, 0x32, 0x2a, 0xa0, 0xbe, 0x8f, 0x59, 0xb6, 0xa4, 0x81, 0xee, 0x59, 0x59, 0x03, 0xd6,
0x82, 0x89, 0xda, 0xad, 0x66, 0x49, 0x01, 0x86, 0x62, 0x16, 0x12, 0x0a, 0xb8, 0x81, 0x49, 0xaf,
0x44, 0xf3, 0xdb, 0xb7, 0xe5, 0x43, 0x46, 0xae, 0xd6, 0x56, 0xbb, 0x4c, 0x33, 0x75, 0x65, 0x33,
0x0c, 0xc6, 0x92, 0x0b, 0xc9, 0xf5, 0x4b, 0x79, 0xc4, 0xe8, 0xff, 0xb1, 0xd6, 0x54, 0xfb, 0xcd,
0x65, 0x7c, 0x86, 0x30, 0xef, 0xce, 0xc2, 0x2c, 0xa3, 0xd4, 0x45, 0xd7, 0x28, 0x07, 0x80, 0xdb,
0xe5, 0x0a, 0xd3, 0x8e, 0xbf, 0x2a, 0x92, 0xa0, 0x4f, 0x1b, 0x82, 0xa8, 0x90, 0xed, 0x06, 0x57,
0xe7, 0xd6, 0x2a, 0xa8, 0xfd, 0x02, 0xaa, 0x0b, 0x60, 0xab, 0xa0, 0x0e, 0xf2, 0x72, 0xbe, 0x32,
0x22, 0xdf, 0xe6, 0x10, 0x64, 0x97, 0x7c, 0x9d, 0x72, 0xcd, 0x56, 0x91, 0x3a, 0x2e, 0x00, 0xb3,
0x4a, 0xbf, 0x92, 0xb5, 0x77, 0x65, 0xc8, 0x4d, 0xa4, 0x21, 0x71, 0x58, 0x26, 0xdc, 0xc8, 0x1a,
0x51, 0xda, 0xa8, 0xb9, 0x30, 0x64, 0x12, 0xa8, 0xad, 0x06, 0xb6, 0xf2, 0x74, 0x64, 0xbb, 0x05,
0xd0, 0xd7, 0x95, 0x9a, 0x06, 0x6b, 0xf4, 0xc1, 0x55, 0xd9, 0xaa, 0xac, 0x43, 0x89, 0xb5, 0x18,
0x5f, 0x2b, 0xae, 0x6d, 0x19, 0x7a, 0xd5, 0x9e, 0x1f, 0x3e, 0x37, 0xc0, 0x75, 0x4a, 0x91, 0x96,
0x7a, 0x1c, 0x8f, 0xc6, 0x02, 0xc3, 0xcd, 0x74, 0x83, 0x77, 0x50, 0x1c, 0x20, 0xda, 0xca, 0x29,
0xe2, 0x6e, 0x43, 0x0a, 0x6b, 0x2e, 0x78, 0x1e, 0x09, 0xd3, 0xce, 0xe9, 0x83, 0x90, 0x1e, 0xd6,
0x8f, 0x67, 0x32, 0x2a, 0x7a, 0xc6, 0x0d, 0x29, 0xeb, 0x43, 0xde, 0xda, 0x64, 0xae, 0x58, 0x54,
0x2c, 0x32, 0xa1, 0x61, 0x48, 0x89, 0x27, 0x24, 0xf6, 0x5d, 0xa0, 0x8f, 0x0d, 0x84, 0x06, 0x57,
0x19, 0xa1, 0xbc, 0x16, 0x12, 0xbc, 0x1f, 0x10, 0xe3, 0x31, 0xa8, 0xb4, 0x24, 0xdd, 0xd7, 0x4f,
0x4b, 0xa5, 0xdb, 0xdb, 0x6f, 0xb7, 0xf3, 0xc0, 0xc2, 0x27, 0x6b, 0x16, 0x59, 0x4b, 0x4a, 0x6e,
0xda, 0x85, 0xfd, 0x2e, 0x38, 0x48, 0x7c, 0x06, 0x6d, 0x0b, 0x56, 0xf3, 0xb4, 0x3f, 0x30, 0x05,
0x02, 0xeb, 0xc3, 0xad, 0x30, 0x40, 0xb3, 0xf4, 0x6e, 0xae, 0xe4, 0xdd, 0x0e, 0x0b, 0xf3, 0x19,
0xdc, 0xc3, 0xe6, 0xf8, 0xe4, 0x97, 0x31, 0xc5, 0x2f, 0x1d, 0x77, 0xd8, 0x16, 0x8c, 0xb9, 0x0c,
0x9f, 0xa8, 0x64, 0xd0, 0x24, 0xf2, 0xc0, 0x27, 0xbe, 0x60, 0x0a, 0xbb, 0x2b, 0x30, 0x9a, 0x17,
0x24, 0x3e, 0xcb, 0x9a, 0x3f, 0x95, 0xc4, 0x98, 0x37, 0xea, 0x69, 0x89, 0x60, 0xe1, 0x5c, 0xad,
0x98, 0x95, 0xa7, 0xf4, 0x70, 0xf7, 0x32, 0x4c, 0x02, 0xaa, 0x73, 0xcc, 0xf4, 0xc3, 0xc9, 0x06,
0x5d, 0x9e, 0x65, 0xdd, 0x8a, 0x95, 0xe2, 0xf0, 0xe8, 0x31, 0xbb, 0x98, 0x33, 0xfb, 0x25, 0x64,
0xbc, 0xdc, 0x2e, 0x10, 0x7b, 0x46, 0x81, 0x01, 0x8b, 0x26, 0x7a, 0x0a, 0x21, 0xbf, 0x5f, 0xd0,
0x51, 0x82, 0xb0, 0x8c, 0x91, 0x94, 0x05, 0x85, 0x3d, 0x98, 0x47, 0x83, 0x00, 0xda, 0x21, 0x86,
0x62, 0x2b, 0xbd, 0x68, 0xa5, 0xb3, 0x57, 0x65, 0x34, 0x37, 0x41, 0x9e, 0xae, 0xf3, 0x34, 0x38,
0x5f, 0xad, 0x4c, 0x57, 0x0d, 0xa5, 0xa2, 0xe8, 0xfd, 0xb2, 0x2b, 0xa4, 0x92, 0x01, 0x8d, 0x92,
0x96, 0x18, 0xe1, 0xcd, 0x2f, 0xef, 0x8e, 0x8f, 0x8f, 0x4f, 0x49, 0x67, 0xe4, 0xde, 0x7c, 0xbe,
0xbb, 0x23, 0x38, 0xa6, 0x60, 0x9f, 0x8c, 0xd7, 0xf3, 0x04, 0x99, 0xf5, 0x44, 0x14, 0x61, 0x3a,
0x01, 0xe6, 0x41, 0x6e, 0x26, 0x23, 0x1a, 0x90, 0xa9, 0x50, 0x5a, 0xed, 0xa4, 0xe1, 0x84, 0x36,
0x0c, 0xe9, 0x0b, 0xe1, 0x21, 0x54, 0x09, 0x6d, 0x64, 0x03, 0x86, 0x62, 0x68, 0x6a, 0xa1, 0x16,
0x47, 0xa6, 0xe1, 0x1f, 0x9b, 0xeb, 0x47, 0xa8, 0x9f, 0xa3, 0x39, 0x0e, 0x31, 0x76, 0xc8, 0x88,
0x29, 0x2c, 0xb0, 0x0a, 0xb2, 0x05, 0x0c, 0x2d, 0xd8, 0x7a, 0x91, 0x04, 0x1a, 0x32, 0x11, 0x31,
0xc4, 0x02, 0x5a, 0xf0, 0xa2, 0x98, 0x4c, 0xd5, 0x47, 0xa1, 0xba, 0x11, 0x74, 0x74, 0xe3, 0x05,
0x56, 0x05, 0xbc, 0x1e, 0xd9, 0xd1, 0x70, 0x4e, 0xf0, 0x52, 0x2b, 0x18, 0x05, 0x67, 0x61, 0xf0,
0xec, 0x93, 0xcb, 0x61, 0x1f, 0xb9, 0x06, 0x2a, 0xa1, 0x11, 0x0b, 0x29, 0x23, 0x7b, 0xd8, 0x26,
0xa2, 0x78, 0xd5, 0xa5, 0xed, 0x2f, 0x6a, 0xa1, 0xec, 0xd5, 0xb8, 0x56, 0x58, 0xe3, 0x1f, 0xf0,
0x69, 0xa3, 0xe9, 0xd7, 0x2e, 0x3d, 0x73, 0x67, 0x3c, 0xd6, 0x1c, 0xea, 0x5a, 0x59, 0xf3, 0x8d,
0x6f, 0x9b, 0xda, 0xd2, 0xcf, 0xa9, 0xf3, 0x9d, 0x4b, 0xf1, 0xc0, 0xe4, 0x52, 0xa7, 0xcd, 0x6a,
0xe3, 0xcd, 0xf0, 0x95, 0xd7, 0x2e, 0xbb, 0x46, 0xbc, 0xf9, 0xdc, 0xff, 0x34, 0x58, 0x99, 0x18,
0xad, 0xe5, 0x97, 0x7e, 0x59, 0x67, 0x8c, 0x9a, 0xc8, 0x04, 0xf5, 0xc0, 0x4d, 0xa1, 0x10, 0x71,
0x1a, 0x80, 0x0d, 0x25, 0x1a, 0x14, 0xdb, 0x6c, 0x68, 0xd4, 0xc0, 0x2a, 0xd0, 0xb2, 0x81, 0xb5,
0x12, 0x9c, 0x50, 0x32, 0xfb, 0xe1, 0x6d, 0xb8, 0xb1, 0xef, 0x2d, 0x43, 0x90, 0xdc, 0x68, 0x86,
0x52, 0x0c, 0x87, 0x40, 0xa7, 0xed, 0x93, 0xb1, 0x40, 0x64, 0x01, 0x1b, 0x32, 0xf7, 0x8f, 0x9d,
0xdc, 0xbd, 0xa0, 0xa3, 0x97, 0x0b, 0x51, 0x6b, 0xbd, 0x0e, 0xdb, 0x9b, 0xcf, 0x5f, 0x86, 0x97,
0x83, 0x05, 0x25, 0x1c, 0x36, 0x53, 0xd6, 0xfb, 0xd9, 0x19, 0x25, 0xfd, 0xe5, 0x47, 0xcf, 0x74,
0xf8, 0xb9, 0x7f, 0x36, 0x5c, 0xd4, 0xe3, 0xd1, 0x61, 0x4a, 0xe2, 0x22, 0xe0, 0x28, 0x62, 0xaf,
0xbb, 0x26, 0x71, 0xdc, 0x7c, 0xbe, 0xe8, 0x75, 0x53, 0x25, 0x96, 0x39, 0xe8, 0x9a, 0x74, 0x41,
0xee, 0x44, 0xcc, 0xbd, 0x75, 0x14, 0xba, 0xaf, 0x8c, 0x68, 0x22, 0xf2, 0x0a, 0x6f, 0x57, 0x37,
0x63, 0x5f, 0x2d, 0x4f, 0x5c, 0xfd, 0x64, 0x04, 0xe3, 0xdd, 0xb4, 0x3c, 0xb5, 0x6f, 0x70, 0xbd,
0xf3, 0x9b, 0xa2, 0x16, 0x69, 0x1c, 0xa6, 0x66, 0xd5, 0x90, 0xbc, 0x21, 0x26, 0x3e, 0x48, 0x08,
0x2f, 0x14, 0x06, 0xcf, 0x4d, 0x55, 0xed, 0xce, 0xce, 0x47, 0x58, 0x6b, 0xe3, 0x0c, 0x4b, 0xcc,
0xa0, 0xb5, 0x6d, 0xa3, 0x10, 0xfe, 0xa5, 0xf5, 0x92, 0x1e, 0xc1, 0x78, 0x56, 0xde, 0x22, 0x64,
0xb9, 0x09, 0x13, 0xc1, 0xdc, 0xad, 0x41, 0x39, 0x1f, 0xc0, 0xd2, 0x3f, 0x99, 0x0e, 0xe6, 0xef,
0x27, 0xd6, 0x65, 0x05, 0x53, 0xe4, 0xf0, 0x6c, 0xa3, 0x9d, 0x3f, 0x44, 0x02, 0xe5, 0x24, 0x02,
0xea, 0x90, 0xdb, 0x30, 0x44, 0x40, 0xe9, 0xfe, 0x84, 0x91, 0x5e, 0xdf, 0x64, 0x3b, 0x5c, 0x09,
0xd0, 0x0a, 0x24, 0x0d, 0x5c, 0x38, 0xcd, 0xac, 0xfd, 0x7a, 0x36, 0x82, 0xf6, 0xe7, 0x57, 0x4c,
0x92, 0xa6, 0xc0, 0xa5, 0x79, 0x96, 0x4c, 0xe1, 0x6c, 0x50, 0x6e, 0xdd, 0xca, 0x67, 0xd7, 0xbe,
0x80, 0xe4, 0x8f, 0x1c, 0xa5, 0x44, 0x16, 0x12, 0xc3, 0xf5, 0xc7, 0xb5, 0xdd, 0x12, 0x4c, 0x53,
0x2e, 0xc1, 0xe8, 0x7d, 0x29, 0x5d, 0xd1, 0x5f, 0xf7, 0x96, 0xe3, 0x35, 0x9b, 0x0b, 0x7d, 0x16,
0xb6, 0x57, 0x9b, 0x26, 0x9f, 0xeb, 0x7e, 0xea, 0x27, 0x90, 0x65, 0xa2, 0x1a, 0xb8, 0x48, 0x7a,
0x03, 0xb0, 0xd6, 0xb5, 0xae, 0xcd, 0x55, 0xd9, 0xa7, 0xa8, 0xf1, 0x69, 0x3c, 0xde, 0x70, 0x43,
0x76, 0x0d, 0x4d, 0x1a, 0x99, 0xbb, 0x06, 0x24, 0x9b, 0x6f, 0xef, 0xae, 0x2f, 0x00, 0xc5, 0xdc,
0xfd, 0x21, 0x5b, 0xa8, 0xb8, 0xf3, 0xdc, 0x1e, 0x27, 0x73, 0xb7, 0x78, 0x19, 0x70, 0xf3, 0xd5,
0xec, 0x34, 0xab, 0xf5, 0x8b, 0x13, 0x0f, 0x34, 0x66, 0x2e, 0xa9, 0x97, 0xf4, 0xdf, 0x7a, 0x35,
0xce, 0xfd, 0x14, 0xfa, 0xfe, 0xea, 0x46, 0x23, 0xc7, 0xb6, 0xd6, 0xa0, 0x1f, 0x6c, 0x46, 0x9f,
0x61, 0xe7, 0xe5, 0xa0, 0x6f, 0x2e, 0xff, 0xd0, 0xd5, 0xe2, 0x44, 0x4d, 0x03, 0x1e, 0x3d, 0xe4,
0x09, 0x46, 0x44, 0x73, 0xee, 0x0b, 0xaa, 0x1e, 0xe3, 0x07, 0x4b, 0x3d, 0x85, 0x72, 0xaf, 0xe8,
0x63, 0x76, 0x79, 0x84, 0x1f, 0xd7, 0x8b, 0x0c, 0x6f, 0x55, 0x9e, 0xc0, 0xea, 0x59, 0x0b, 0x95,
0x97, 0x8d, 0x68, 0x52, 0xcd, 0x15, 0x0f, 0x9d, 0xa9, 0x4e, 0xd0, 0x83, 0x60, 0x70, 0x8d, 0x0a,
0xe6, 0x78, 0x3c, 0x1b, 0xff, 0xd2, 0x60, 0x00, 0xba, 0x26, 0x22, 0xf1, 0x93, 0x25, 0x40, 0x16,
0xad, 0xd3, 0x81, 0x3b, 0x64, 0x12, 0xca, 0x95, 0x09, 0xfb, 0x73, 0x9a, 0xf8, 0x44, 0x42, 0x1b,
0x57, 0xbe, 0xc8, 0x39, 0xef, 0xbe, 0x1a, 0x30, 0x5b, 0xad, 0x36, 0x66, 0x61, 0xfc, 0xd3, 0x6c,
0xae, 0x1c, 0x1e, 0x0f, 0x9a, 0x50, 0x27, 0xf0, 0x77, 0x35, 0xcc, 0xe1, 0x51, 0x13, 0x46, 0x3e,
0xfc, 0x6d, 0x36, 0x57, 0x8e, 0x7a, 0x69, 0xac, 0xe0, 0xef, 0x6a, 0x42, 0xed, 0xb7, 0x47, 0x08,
0x03, 0xbf, 0x6b, 0x08, 0xbd, 0xdb, 0x6f, 0xc1, 0xc8, 0x86, 0xbf, 0xab, 0x09, 0xb5, 0x9a, 0xe6,
0x34, 0xf3, 0x67, 0x0d, 0xa9, 0x56, 0xca, 0x54, 0xab, 0xcc, 0xd5, 0xc2, 0x64, 0x07, 0xc9, 0xeb,
0x3f, 0x8c, 0xc5, 0xd8, 0xd0, 0xa5, 0xaa, 0xc2, 0xcc, 0x8e, 0x85, 0xbe, 0x17, 0xc6, 0x52, 0x3c,
0xd6, 0xc9, 0x50, 0xc0, 0x34, 0x33, 0x12, 0x54, 0xfa, 0x69, 0x6f, 0x89, 0xc9, 0x32, 0x4b, 0x8c,
0x64, 0x0a, 0x41, 0x69, 0xec, 0x51, 0x5c, 0x61, 0x62, 0xd9, 0x5b, 0xfb, 0x11, 0xf7, 0x67, 0xbe,
0xc7, 0x5a, 0x73, 0xdf, 0x7a, 0xf1, 0x9b, 0x33, 0xfc, 0xc1, 0xef, 0xd2, 0xf8, 0x91, 0x1a, 0xff,
0x77, 0xd7, 0xff, 0x00, 0x3d, 0x95, 0x0f, 0xad, 0xed, 0x25, 0x00, 0x00
};

File diff suppressed because it is too large Load Diff

View File

@ -130,36 +130,43 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
JsonArray colarr = elem["col"];
if (!colarr.isNull())
{
for (size_t i = 0; i < 3; i++)
{
int rgbw[] = {0,0,0,0};
bool colValid = false;
JsonArray colX = colarr[i];
if (colX.isNull()) {
byte brgbw[] = {0,0,0,0};
const char* hexCol = colarr[i];
if (hexCol == nullptr) { //Kelvin color temperature (or invalid), e.g 2400
int kelvin = colarr[i] | -1;
if (kelvin < 0) continue;
if (kelvin == 0) seg.setColor(i, 0);
if (kelvin > 0) colorKtoRGB(kelvin, brgbw);
if (seg.getLightCapabilities() & 3) {
// segment has RGB or White
for (size_t i = 0; i < 3; i++)
{
int rgbw[] = {0,0,0,0};
bool colValid = false;
JsonArray colX = colarr[i];
if (colX.isNull()) {
byte brgbw[] = {0,0,0,0};
const char* hexCol = colarr[i];
if (hexCol == nullptr) { //Kelvin color temperature (or invalid), e.g 2400
int kelvin = colarr[i] | -1;
if (kelvin < 0) continue;
if (kelvin == 0) seg.setColor(i, 0);
if (kelvin > 0) colorKtoRGB(kelvin, brgbw);
colValid = true;
} else { //HEX string, e.g. "FFAA00"
colValid = colorFromHexString(brgbw, hexCol);
}
for (size_t c = 0; c < 4; c++) rgbw[c] = brgbw[c];
} else { //Array of ints (RGB or RGBW color), e.g. [255,160,0]
byte sz = colX.size();
if (sz == 0) continue; //do nothing on empty array
copyArray(colX, rgbw, 4);
colValid = true;
} else { //HEX string, e.g. "FFAA00"
colValid = colorFromHexString(brgbw, hexCol);
}
for (size_t c = 0; c < 4; c++) rgbw[c] = brgbw[c];
} else { //Array of ints (RGB or RGBW color), e.g. [255,160,0]
byte sz = colX.size();
if (sz == 0) continue; //do nothing on empty array
copyArray(colX, rgbw, 4);
colValid = true;
if (!colValid) continue;
seg.setColor(i, RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]));
if (seg.mode == FX_MODE_STATIC) strip.trigger(); //instant refresh
}
if (!colValid) continue;
seg.setColor(i, RGBW32(rgbw[0],rgbw[1],rgbw[2],rgbw[3]));
if (seg.mode == FX_MODE_STATIC) strip.trigger(); //instant refresh
} else {
// non RGB & non White segment (usually On/Off bus)
seg.setColor(0, ULTRAWHITE);
seg.setColor(1, BLACK);
}
}
@ -202,7 +209,9 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
getVal(elem["ix"], &seg.intensity);
uint8_t pal = seg.palette;
if (getVal(elem["pal"], &pal)) seg.setPalette(pal);
if (seg.getLightCapabilities() & 1) { // ignore palette for White and On/Off segments
if (getVal(elem["pal"], &pal)) seg.setPalette(pal);
}
getVal(elem["c1"], &seg.custom1);
getVal(elem["c2"], &seg.custom2);
@ -713,7 +722,7 @@ void serializeInfo(JsonObject root)
#endif
root[F("freeheap")] = ESP.getFreeHeap();
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
if (psramFound()) root[F("psram")] = ESP.getFreePsram();
#endif
root[F("uptime")] = millis()/1000 + rolloverMillis*4294967;

View File

@ -9,8 +9,8 @@
void parseMQTTBriPayload(char* payload)
{
if (strstr(payload, "ON") || strstr(payload, "on") || strstr(payload, "true")) {bri = briLast; stateUpdated(1);}
else if (strstr(payload, "T" ) || strstr(payload, "t" )) {toggleOnOff(); stateUpdated(1);}
if (strstr(payload, "ON") || strstr(payload, "on") || strstr(payload, "true")) {bri = briLast; stateUpdated(CALL_MODE_DIRECT_CHANGE);}
else if (strstr(payload, "T" ) || strstr(payload, "t" )) {toggleOnOff(); stateUpdated(CALL_MODE_DIRECT_CHANGE);}
else {
uint8_t in = strtoul(payload, NULL, 10);
if (in == 0 && bri > 0) briLast = bri;
@ -142,22 +142,22 @@ void publishMqtt()
sprintf_P(s, PSTR("%u"), bri);
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/g"));
mqtt->publish(subuf, 0, true, s); // retain message
mqtt->publish(subuf, 0, retainMqttMsg, s); // optionally retain message (#2263)
sprintf_P(s, PSTR("#%06X"), (col[3] << 24) | (col[0] << 16) | (col[1] << 8) | (col[2]));
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/c"));
mqtt->publish(subuf, 0, true, s); // retain message
mqtt->publish(subuf, 0, retainMqttMsg, s); // optionally retain message (#2263)
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/status"));
mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT
mqtt->publish(subuf, 0, true, "online"); // retain message for a LWT
char apires[1024]; // allocating 1024 bytes from stack can be risky
char apires[1024]; // allocating 1024 bytes from stack can be risky
XML_response(nullptr, apires);
strlcpy(subuf, mqttDeviceTopic, 33);
strcat_P(subuf, PSTR("/v"));
mqtt->publish(subuf, 0, false, apires); // do not retain message
mqtt->publish(subuf, 0, retainMqttMsg, apires); // optionally retain message (#2263)
#endif
}

View File

@ -152,16 +152,13 @@ int getSignalQuality(int rssi)
//handle Ethernet connection event
void WiFiEvent(WiFiEvent_t event)
{
#ifdef WLED_USE_ETHERNET
char hostname[25];
#endif
switch (event) {
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_ETHERNET)
case SYSTEM_EVENT_ETH_START:
DEBUG_PRINTLN(F("ETH Started"));
break;
case SYSTEM_EVENT_ETH_CONNECTED:
{
DEBUG_PRINTLN(F("ETH Connected"));
if (!apActive) {
WiFi.disconnect(true);
@ -172,10 +169,12 @@ void WiFiEvent(WiFiEvent_t event)
ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
}
// convert the "serverDescription" into a valid DNS hostname (alphanumeric)
char hostname[64];
prepareHostname(hostname);
ETH.setHostname(hostname);
showWelcomePage = false;
break;
}
case SYSTEM_EVENT_ETH_DISCONNECTED:
DEBUG_PRINTLN(F("ETH Disconnected"));
// This doesn't really affect ethernet per se,

View File

@ -52,7 +52,7 @@ static void doSaveState() {
size_t len = measureJson(*fileDoc) + 1;
DEBUG_PRINTLN(len);
// if possible use SPI RAM on ESP32
#ifdef WLED_USE_PSRAM
#if defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
if (psramFound())
tmpRAMbuffer = (char*) ps_malloc(len);
else

View File

@ -350,6 +350,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
strlcpy(mqttDeviceTopic, request->arg(F("MD")).c_str(), 33);
strlcpy(mqttGroupTopic, request->arg(F("MG")).c_str(), 33);
buttonPublishMqtt = request->hasArg(F("BM"));
retainMqttMsg = request->hasArg(F("RT"));
#endif
#ifndef WLED_DISABLE_HUESYNC

View File

@ -188,12 +188,11 @@ void WLED::loop()
DEBUG_PRINT(F("Runtime: ")); DEBUG_PRINTLN(millis());
DEBUG_PRINT(F("Unix time: ")); toki.printTime(toki.getTime());
DEBUG_PRINT(F("Free heap: ")); DEBUG_PRINTLN(ESP.getFreeHeap());
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
if (psramFound()) {
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
DEBUG_PRINT(F("Free PSRAM: ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
} else
DEBUG_PRINTLN(F("No PSRAM"));
}
#endif
DEBUG_PRINT(F("Wifi state: ")); DEBUG_PRINTLN(WiFi.status());
@ -321,25 +320,33 @@ void WLED::setup()
#endif
DEBUG_PRINT(F("heap ")); DEBUG_PRINTLN(ESP.getFreeHeap());
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
#if defined(CONFIG_IDF_TARGET_ESP32S3)
// S3: reserve GPIO 33-37 for "octal" PSRAM
managed_pin_type pins[] = { {33, true}, {34, true}, {35, true}, {36, true}, {37, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#elif defined(CONFIG_IDF_TARGET_ESP32S2)
// S2: reserve GPIO 26-32 for PSRAM (may fail due to isPinOk() but that will also prevent other allocation)
managed_pin_type pins[] = { {26, true}, {27, true}, {28, true}, {29, true}, {30, true}, {31, true}, {32, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
// C3: reserve GPIO 12-17 for PSRAM (may fail due to isPinOk() but that will also prevent other allocation)
managed_pin_type pins[] = { {12, true}, {13, true}, {14, true}, {15, true}, {16, true}, {17, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#else
// GPIO16/GPIO17 reserved for SPI RAM
managed_pin_type pins[] = { {16, true}, {17, true} };
pinManager.allocateMultiplePins(pins, sizeof(pins)/sizeof(managed_pin_type), PinOwner::SPI_RAM);
#endif
#if defined(WLED_USE_PSRAM)
if (psramFound()) {
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32S3)
// GPIO16/GPIO17 reserved for SPI RAM
managed_pin_type pins[2] = { {16, true}, {17, true} };
pinManager.allocateMultiplePins(pins, 2, PinOwner::SPI_RAM);
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
// S3: add GPIO 33-37 for "octal" PSRAM
managed_pin_type pins[5] = { {33, true}, {34, true}, {35, true}, {36, true}, {37, true} };
pinManager.allocateMultiplePins(pins, 5, PinOwner::SPI_RAM);
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
DEBUG_PRINT(F("Free PSRAM : ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
}
#else
DEBUG_PRINTLN(F("PSRAM not used."));
#endif
#endif
DEBUG_PRINT(F("Total PSRAM: ")); DEBUG_PRINT(ESP.getPsramSize()/1024); DEBUG_PRINTLN("kB");
DEBUG_PRINT(F("Free PSRAM : ")); DEBUG_PRINT(ESP.getFreePsram()/1024); DEBUG_PRINTLN("kB");
} else
DEBUG_PRINTLN(F("No PSRAM found."));
#endif
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && !defined(WLED_USE_PSRAM)
DEBUG_PRINTLN(F("PSRAM not used."));
#endif
//DEBUG_PRINT(F("LEDs inited. heap usage ~"));
//DEBUG_PRINTLN(heapPreAlloc - ESP.getFreeHeap());
@ -429,8 +436,6 @@ void WLED::setup()
if (Serial.available() > 0 && Serial.peek() == 'I') handleImprovPacket();
#endif
strip.service(); // why?
#ifndef WLED_DISABLE_OTA
if (aOtaEnabled) {
ArduinoOTA.onStart([]() {
@ -480,7 +485,10 @@ void WLED::beginStrip()
if (briS > 0) bri = briS;
else if (bri == 0) bri = 128;
} else {
// fix for #3196
briLast = briS; bri = 0;
strip.fill(BLACK);
strip.show();
}
if (bootPreset > 0) {
applyPreset(bootPreset, CALL_MODE_INIT);
@ -591,7 +599,7 @@ bool WLED::initEthernet()
return false;
}
/*
/*
For LAN8720 the most correct way is to perform clean reset each time before init
applying LOW to power or nRST pin for at least 100 us (please refer to datasheet, page 59)
ESP_IDF > V4 implements it (150 us, lan87xx_reset_hw(esp_eth_phy_t *phy) function in
@ -718,8 +726,6 @@ void WLED::initInterfaces()
ArduinoOTA.begin();
#endif
strip.service();
// Set up mDNS responder:
if (strlen(cmDNS) > 0) {
// "end" must be called before "begin" is called a 2nd time

View File

@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2305090
#define VERSION 2305280
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG
@ -145,7 +145,7 @@
// The following is a construct to enable code to compile without it.
// There is a code thet will still not use PSRAM though:
// AsyncJsonResponse is a derived class that implements DynamicJsonDocument (AsyncJson-v6.h)
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM) && defined(WLED_USE_PSRAM)
struct PSRAM_Allocator {
void* allocate(size_t size) {
if (psramFound()) return ps_malloc(size); // use PSRAM if it exists
@ -421,6 +421,7 @@ WLED_GLOBAL char mqttUser[41] _INIT(""); // optional: username
WLED_GLOBAL char mqttPass[65] _INIT(""); // optional: password for MQTT auth
WLED_GLOBAL char mqttClientID[41] _INIT(""); // override the client ID
WLED_GLOBAL uint16_t mqttPort _INIT(1883);
WLED_GLOBAL bool retainMqttMsg _INIT(false); // retain brightness and color
#define WLED_MQTT_CONNECTED (mqtt != nullptr && mqtt->connected())
#else
#define WLED_MQTT_CONNECTED false

View File

@ -212,7 +212,7 @@ void appendGPIOinfo() {
//Note: Using pin 3 (RX) disables Adalight / Serial JSON
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
#if defined(ARDUINO_ARCH_ESP32) && defined(BOARD_HAS_PSRAM)
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(CONFIG_IDF_TARGET_ESP32C3)
if (psramFound()) oappend(SET_F(",16,17")); // GPIO16 & GPIO17 reserved for SPI RAM on ESP32 (not on S2, S3 or C3)
#elif defined(CONFIG_IDF_TARGET_ESP32S3)
@ -561,6 +561,7 @@ void getSettingsJS(byte subPage, char* dest)
sappends('s',"MD",mqttDeviceTopic);
sappends('s',SET_F("MG"),mqttGroupTopic);
sappend('c',SET_F("BM"),buttonPublishMqtt);
sappend('c',SET_F("RT"),retainMqttMsg);
#else
oappend(SET_F("toggle('MQTT');")); // hide MQTT settings
#endif