diff --git a/boards.txt b/boards.txt index 4ec896b00..07a0fc7d1 100644 --- a/boards.txt +++ b/boards.txt @@ -82,8 +82,8 @@ envie_m7.build.alignment=32 envie_m7.build.version=1.2.3+4 envie_m7.menu.security.sien.build.postbuild.cmd="{tools.imgtool.path}/{tools.imgtool.cmd}" {tools.imgtool.flags} envie_m7.menu.security.sien.build.keys.keychain={runtime.platform.path}/libraries/MCUboot/default_keys -envie_m7.menu.security.sien.build.keys.sign_key=ecdsa-p256-signing-key.pem -envie_m7.menu.security.sien.build.keys.encrypt_key=ecdsa-p256-encrypt-key.pem +envie_m7.menu.security.sien.build.keys.sign_key=ecdsa-p256-signing-priv-key.pem +envie_m7.menu.security.sien.build.keys.encrypt_key=ecdsa-p256-encrypt-pub-key.pem envie_m7.menu.security.none.build.postbuild.cmd="{tools.imgtool.path}/{tools.imgtool.cmd}" exit envie_m7.compiler.mbed.arch.define= envie_m7.compiler.mbed.defines={build.variant.path}/defines.txt @@ -99,12 +99,16 @@ envie_m7.vid.1=0x2341 envie_m7.pid.1=0x035b envie_m7.vid.2=0x2341 envie_m7.pid.2=0x045b +envie_m7.vid.3=0x2341 +envie_m7.pid.3=0x055b envie_m7.upload_port.0.vid=0x2341 envie_m7.upload_port.0.pid=0x025b envie_m7.upload_port.1.vid=0x2341 envie_m7.upload_port.1.pid=0x035b envie_m7.upload_port.2.vid=0x2341 envie_m7.upload_port.2.pid=0x045b +envie_m7.upload_port.3.vid=0x2341 +envie_m7.upload_port.3.pid=0x055b envie_m7.upload.tool=dfu-util envie_m7.upload.tool.default=dfu-util @@ -209,6 +213,59 @@ envie_m4.bootloader.file=PORTENTA_H7/portentah7_bootloader_mbed_hs_v2.elf ############################################################## +portenta_x8.name=Arduino Portenta X8 +portenta_x8.build.core=arduino +portenta_x8.build.crossprefix=arm-none-eabi- +portenta_x8.build.compiler_path={runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/ + +portenta_x8.build.variant=PORTENTA_X8 +portenta_x8.build.mcu=cortex-m4 +portenta_x8.build.fpu=-mfpu=fpv4-sp-d16 +portenta_x8.build.float-abi=-mfloat-abi=softfp +portenta_x8.build.extra_flags= +portenta_x8.build.extra_ldflags=-DCM4_BINARY_START=0x08100000 -DCM4_BINARY_END=0x08200000 +portenta_x8.build.architecture=cortex-m4 +portenta_x8.build.board=PORTENTA_X8 +portenta_x8.build.ldscript=linker_script.ld +portenta_x8.compiler.mbed.arch.define= +portenta_x8.compiler.mbed.defines={build.variant.path}/defines.txt +portenta_x8.compiler.mbed.ldflags={build.variant.path}/ldflags.txt +portenta_x8.compiler.mbed.cflags={build.variant.path}/cflags.txt +portenta_x8.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt +portenta_x8.compiler.mbed.includes={build.variant.path}/includes.txt +portenta_x8.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys +portenta_x8.compiler.mbed="{build.variant.path}/libs/libmbed.a" +portenta_x8.vid.0=0x2341 +portenta_x8.pid.0=0x0061 +portenta_x8.build.vid=0x2341 +portenta_x8.build.pid=0x0061 +portenta_x8.upload_port.0.vid=0x2341 +portenta_x8.upload_port.0.pid=0x0061 + +portenta_x8.upload.tool=adb +portenta_x8.upload.tool.default=adb +portenta_x8.upload.vid=0x2341 +portenta_x8.upload.pid=0x0061 +portenta_x8.upload.protocol= +portenta_x8.upload.transport= +portenta_x8.upload.interface=0 +portenta_x8.upload.use_1200bps_touch=false +portenta_x8.upload.wait_for_upload_port=false +portenta_x8.upload.native_usb=true +portenta_x8.upload.maximum_data_size=294248 + +portenta_x8.debug.tool=gdb +portenta_x8.bootloader.tool=openocd +portenta_x8.bootloader.tool.default=openocd +portenta_x8.bootloader.config=-f target/stm32h7x_dual_bank.cfg +portenta_x8.bootloader.programmer=-f interface/stlink.cfg +portenta_x8.bootloader.extra_action.preflash=stm32h7x option_write 0 0x01c 0xb86aaf0 +portenta_x8.bootloader.file=PORTENTA_X7/STM32H747AII6_CM7.elf + +portenta_x8.build.postbuild.cmd="{tools.imgtool.path}/{tools.imgtool.cmd}" exit + +############################################################## + nano33ble.name=Arduino Nano 33 BLE nano33ble.build.core=arduino nano33ble.build.crossprefix=arm-none-eabi- @@ -237,12 +294,16 @@ nano33ble.vid.1=0x2341 nano33ble.pid.1=0x805a nano33ble.vid.2=0x2341 nano33ble.pid.2=0x015a +nano33ble.vid.3=0x2341 +nano33ble.pid.3=0x025a nano33ble.upload_port.0.vid=0x2341 nano33ble.upload_port.0.pid=0x005a nano33ble.upload_port.1.vid=0x2341 nano33ble.upload_port.1.pid=0x805a nano33ble.upload_port.2.vid=0x2341 nano33ble.upload_port.2.pid=0x015a +nano33ble.upload_port.3.vid=0x2341 +nano33ble.upload_port.3.pid=0x025a nano33ble.upload.tool=bossac nano33ble.upload.tool.default=bossac @@ -291,12 +352,16 @@ nanorp2040connect.vid.1=0x2341 nanorp2040connect.pid.1=0x805e nanorp2040connect.vid.2=0x2341 nanorp2040connect.pid.2=0x015e +nanorp2040connect.vid.3=0x2341 +nanorp2040connect.pid.3=0x025e nanorp2040connect.upload_port.0.vid=0x2341 nanorp2040connect.upload_port.0.pid=0x005e nanorp2040connect.upload_port.1.vid=0x2341 nanorp2040connect.upload_port.1.pid=0x805e nanorp2040connect.upload_port.2.vid=0x2341 nanorp2040connect.upload_port.2.pid=0x015e +nanorp2040connect.upload_port.3.vid=0x2341 +nanorp2040connect.upload_port.3.pid=0x025e nanorp2040connect.upload.tool=picotool nanorp2040connect.upload.tool.default=picotool @@ -435,12 +500,16 @@ nicla_vision.vid.1=0x2341 nicla_vision.pid.1=0x035f nicla_vision.vid.2=0x2341 nicla_vision.pid.2=0x045f +nicla_vision.vid.3=0x2341 +nicla_vision.pid.3=0x055f nicla_vision.upload_port.0.vid=0x2341 nicla_vision.upload_port.0.pid=0x025f nicla_vision.upload_port.1.vid=0x2341 nicla_vision.upload_port.1.pid=0x035f nicla_vision.upload_port.2.vid=0x2341 nicla_vision.upload_port.2.pid=0x045f +nicla_vision.upload_port.3.vid=0x2341 +nicla_vision.upload_port.3.pid=0x055f nicla_vision.upload.tool=dfu-util nicla_vision.upload.tool.default=dfu-util diff --git a/bootloaders/NICLA_VISION/bootloader.bin b/bootloaders/NICLA_VISION/bootloader.bin index 2eeb6505c..0db1c77c0 100755 Binary files a/bootloaders/NICLA_VISION/bootloader.bin and b/bootloaders/NICLA_VISION/bootloader.bin differ diff --git a/bootloaders/NICLA_VISION/bootloader.elf b/bootloaders/NICLA_VISION/bootloader.elf index 579cdda71..b6fe6b289 100755 Binary files a/bootloaders/NICLA_VISION/bootloader.elf and b/bootloaders/NICLA_VISION/bootloader.elf differ diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index d6774dda0..c06201cfe 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -112,6 +112,17 @@ extern analogin_config_t adcCurrentConfig; #define Serial3 _UART3_ #define Serial4 _UART4_ +#if defined(RPC_SERIAL) +#undef Serial +#if __has_include("RPC.h") +#include "SerialRPC.h" +#define Serial SerialRPC +#else +extern ErrorSerialClass ErrorSerial; +#define Serial ErrorSerial +#endif +#endif + #include "overloads.h" #endif diff --git a/cores/arduino/Interrupts.cpp b/cores/arduino/Interrupts.cpp index a3b6e1e11..e9003ce22 100644 --- a/cores/arduino/Interrupts.cpp +++ b/cores/arduino/Interrupts.cpp @@ -29,6 +29,7 @@ void detachInterrupt(PinName interruptNum) { void detachInterrupt(pin_size_t interruptNum) { if ((interruptNum < PINS_COUNT) && (digitalPinToInterruptObj(interruptNum) != NULL)) { delete digitalPinToInterruptObj(interruptNum); + digitalPinToInterruptObj(interruptNum) = nullptr; } } @@ -57,7 +58,9 @@ void attachInterruptParam(pin_size_t interruptNum, voidFuncPtrParam func, PinSta if (interruptNum >= PINS_COUNT) { return; } - detachInterrupt(interruptNum); + if (digitalPinToInterruptObj(interruptNum) != nullptr) { + detachInterrupt(interruptNum); + } mbed::InterruptIn* irq = new mbed::InterruptIn(digitalPinToPinName(interruptNum)); if (mode == CHANGE) { irq->rise(mbed::callback(func, param)); diff --git a/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h new file mode 100644 index 000000000..1cce05b2e --- /dev/null +++ b/cores/arduino/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h @@ -0,0 +1,381 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2018, STMicroelectronics + * Copyright (c) 2020, Arduino SA + * + * SPDX-License-Identifier: BSD-3-Clause + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ + +/* MBED TARGET LIST: PORTENTA_H7_M4, PORTENTA_H7_M7 */ + +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" +#include "PinNamesTypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define DUAL_PAD 0xF00 + +typedef enum { + ALT0 = 0x100, + ALT1 = 0x200, + ALT2 = 0x300, + ALT3 = 0x400, + ALT4 = 0x500, +} ALTx; + +typedef enum { + PA_0 = 0x00, + PA_0C = PA_0 | DUAL_PAD, // dual pad + PA_0C_ALT0 = PA_0C | ALT0, // same pin used for alternate HW + PA_0C_ALT1 = PA_0C | ALT1, // same pin used for alternate HW + PA_0C_ALT2 = PA_0C | ALT2, // same pin used for alternate HW + PA_1 = 0x01, + PA_1C = PA_1 | DUAL_PAD, // dual pad + PA_1C_ALT0 = PA_1C | ALT0, // same pin used for alternate HW + PA_1_ALT0 = PA_1 | ALT0, // same pin used for alternate HW + PA_2 = 0x02, + PA_2_ALT0 = PA_2 | ALT0, // same pin used for alternate HW + PA_3 = 0x03, + PA_3_ALT0 = PA_3 | ALT0, // same pin used for alternate HW + PA_4 = 0x04, + PA_4_ALT0 = PA_4 | ALT0, // same pin used for alternate HW + PA_4_ALT1 = PA_4 | ALT1, // same pin used for alternate HW + PA_5 = 0x05, + PA_5_ALT0 = PA_5 | ALT0, // same pin used for alternate HW + PA_5_ALT1 = PA_5 | ALT1, // same pin used for alternate HW + PA_5_ALT2 = PA_5 | ALT2, // same pin used for alternate HW + PA_6 = 0x06, + PA_6_ALT0 = PA_6 | ALT0, // same pin used for alternate HW + PA_7 = 0x07, + PA_7_ALT0 = PA_7 | ALT0, // same pin used for alternate HW + PA_7_ALT1 = PA_7 | ALT1, // same pin used for alternate HW + PA_7_ALT2 = PA_7 | ALT2, // same pin used for alternate HW + PA_8 = 0x08, + PA_9 = 0x09, + PA_9_ALT0 = PA_9 | ALT0, // same pin used for alternate HW + PA_10 = 0x0A, + PA_10_ALT0 = PA_10 | ALT0, // same pin used for alternate HW + PA_11 = 0x0B, + PA_11_ALT0 = PA_11 | ALT0, // same pin used for alternate HW + PA_12 = 0x0C, + PA_12_ALT0 = PA_12 | ALT0, // same pin used for alternate HW + PA_13 = 0x0D, + PA_14 = 0x0E, + PA_15 = 0x0F, + PA_15_ALT0 = PA_15 | ALT0, // same pin used for alternate HW + PA_15_ALT1 = PA_15 | ALT1, // same pin used for alternate HW + PB_0 = 0x10, + PB_0_ALT0 = PB_0 | ALT0, // same pin used for alternate HW + PB_0_ALT1 = PB_0 | ALT1, // same pin used for alternate HW + PB_0_ALT2 = PB_0 | ALT2, // same pin used for alternate HW + PB_1 = 0x11, + PB_1_ALT0 = PB_1 | ALT0, // same pin used for alternate HW + PB_1_ALT1 = PB_1 | ALT1, // same pin used for alternate HW + PB_2 = 0x12, + PB_3 = 0x13, + PB_3_ALT0 = PB_3 | ALT0, // same pin used for alternate HW + PB_3_ALT1 = PB_3 | ALT1, // same pin used for alternate HW + PB_4 = 0x14, + PB_4_ALT0 = PB_4 | ALT0, // same pin used for alternate HW + PB_4_ALT1 = PB_4 | ALT1, // same pin used for alternate HW + PB_5 = 0x15, + PB_5_ALT0 = PB_5 | ALT0, // same pin used for alternate HW + PB_5_ALT1 = PB_5 | ALT1, // same pin used for alternate HW + PB_6 = 0x16, + PB_6_ALT0 = PB_6 | ALT0, // same pin used for alternate HW + PB_6_ALT1 = PB_6 | ALT1, // same pin used for alternate HW + PB_7 = 0x17, + PB_7_ALT0 = PB_7 | ALT0, // same pin used for alternate HW + PB_8 = 0x18, + PB_8_ALT0 = PB_8 | ALT0, // same pin used for alternate HW + PB_9 = 0x19, + PB_9_ALT0 = PB_9 | ALT0, // same pin used for alternate HW + PB_10 = 0x1A, + PB_11 = 0x1B, + PB_12 = 0x1C, + PB_13 = 0x1D, + PB_14 = 0x1E, + PB_14_ALT0 = PB_14 | ALT0, // same pin used for alternate HW + PB_14_ALT1 = PB_14 | ALT1, // same pin used for alternate HW + PB_15 = 0x1F, + PB_15_ALT0 = PB_15 | ALT0, // same pin used for alternate HW + PB_15_ALT1 = PB_15 | ALT1, // same pin used for alternate HW + PC_0 = 0x20, + PC_0_ALT0 = PC_0 | ALT0, // same pin used for alternate HW + PC_0_ALT1 = PC_0 | ALT1, // same pin used for alternate HW + PC_1 = 0x21, + PC_1_ALT0 = PC_1 | ALT0, // same pin used for alternate HW + PC_1_ALT1 = PC_1 | ALT1, // same pin used for alternate HW + PC_1_ALT2 = PC_1 | ALT2, // same pin used for alternate HW + PC_1_ALT3 = PC_1 | ALT3, // same pin used for alternate HW + PC_1_ALT4 = PC_1 | ALT4, // same pin used for alternate HW + PC_2 = 0x22, + PC_2C = PC_2 | DUAL_PAD, // dual pad + PC_2C_ALT0 = PC_2C | ALT0, // same pin used for alternate HW + PC_2_ALT0 = PC_2 | ALT0, // same pin used for alternate HW + PC_2_ALT1 = PC_2 | ALT1, // same pin used for alternate HW + PC_2_ALT2 = PC_2 | ALT2, // same pin used for alternate HW + PC_2_ALT3 = PC_2 | ALT3, // same pin used for alternate HW + PC_2_ALT4 = PC_2 | ALT4, // same pin used for alternate HW + PC_3 = 0x23, + PC_3C = PC_3 | DUAL_PAD, // dual pad + PC_3_ALT0 = PC_3 | ALT0, // same pin used for alternate HW + PC_3_ALT1 = PC_3 | ALT1, // same pin used for alternate HW + PC_3_ALT2 = PC_3 | ALT2, // same pin used for alternate HW + PC_4 = 0x24, + PC_4_ALT0 = PC_4 | ALT0, // same pin used for alternate HW + PC_5 = 0x25, + PC_5_ALT0 = PC_5 | ALT0, // same pin used for alternate HW + PC_5_ALT1 = PC_5 | ALT1, // same pin used for alternate HW + PC_5_ALT2 = PC_5 | ALT2, // same pin used for alternate HW + PC_6 = 0x26, + PC_6_ALT0 = PC_6 | ALT0, // same pin used for alternate HW + PC_7 = 0x27, + PC_7_ALT0 = PC_7 | ALT0, // same pin used for alternate HW + PC_8 = 0x28, + PC_8_ALT0 = PC_8 | ALT0, // same pin used for alternate HW + PC_9 = 0x29, + PC_9_ALT0 = PC_9 | ALT0, // same pin used for alternate HW + PC_10 = 0x2A, + PC_10_ALT0 = PC_10 | ALT0, // same pin used for alternate HW + PC_11 = 0x2B, + PC_11_ALT0 = PC_11 | ALT0, // same pin used for alternate HW + PC_12 = 0x2C, + PC_13 = 0x2D, + PC_14 = 0x2E, + PC_15 = 0x2F, + PD_0 = 0x30, + PD_1 = 0x31, + PD_2 = 0x32, + PD_3 = 0x33, + PD_4 = 0x34, + PD_5 = 0x35, + PD_6 = 0x36, + PD_7 = 0x37, + PD_8 = 0x38, + PD_9 = 0x39, + PD_10 = 0x3A, + PD_11 = 0x3B, + PD_12 = 0x3C, + PD_13 = 0x3D, + PD_14 = 0x3E, + PD_15 = 0x3F, + PE_0 = 0x40, + PE_1 = 0x41, + PE_2 = 0x42, + PE_3 = 0x43, + PE_4 = 0x44, + PE_5 = 0x45, + PE_6 = 0x46, + PE_7 = 0x47, + PE_8 = 0x48, + PE_9 = 0x49, + PE_10 = 0x4A, + PE_11 = 0x4B, + PE_12 = 0x4C, + PE_13 = 0x4D, + PE_14 = 0x4E, + PE_15 = 0x4F, + PF_0 = 0x50, + PF_1 = 0x51, + PF_2 = 0x52, + PF_3 = 0x53, + PF_4 = 0x54, + PF_4_ALT0 = PF_4 | ALT0, // same pin used for alternate HW + PF_5 = 0x55, + PF_6 = 0x56, + PF_6_ALT0 = PF_6 | ALT0, // same pin used for alternate HW + PF_7 = 0x57, + PF_8 = 0x58, + PF_8_ALT0 = PF_8 | ALT0, // same pin used for alternate HW + PF_9 = 0x59, + PF_9_ALT0 = PF_9 | ALT0, // same pin used for alternate HW + PF_10 = 0x5A, + PF_10_ALT0 = PF_10 | ALT0, // same pin used for alternate HW + PF_11 = 0x5B, + PF_12 = 0x5C, + PF_12_ALT0 = PF_12 | ALT0, // same pin used for alternate HW + PF_13 = 0x5D, + PF_14 = 0x5E, + PF_14_ALT0 = PF_14 | ALT0, // same pin used for alternate HW + PF_15 = 0x5F, + PG_0 = 0x60, + PG_1 = 0x61, + PG_2 = 0x62, + PG_3 = 0x63, + PG_4 = 0x64, + PG_5 = 0x65, + PG_6 = 0x66, + PG_7 = 0x67, + PG_8 = 0x68, + PG_9 = 0x69, + PG_10 = 0x6A, + PG_11 = 0x6B, + PG_12 = 0x6C, + PG_13 = 0x6D, + PG_14 = 0x6E, + PG_15 = 0x6F, + PH_0 = 0x70, + PH_1 = 0x71, + PH_2 = 0x72, + PH_3 = 0x73, + PH_3_ALT0 = PH_3 | ALT0, // same pin used for alternate HW + PH_4 = 0x74, + PH_4_ALT0 = PH_4 | ALT0, // same pin used for alternate HW + PH_5 = 0x75, + PH_5_ALT0 = PH_5 | ALT0, // same pin used for alternate HW + PH_6 = 0x76, + PH_7 = 0x77, + PH_8 = 0x78, + PH_9 = 0x79, + PH_10 = 0x7A, + PH_11 = 0x7B, + PH_12 = 0x7C, + PH_13 = 0x7D, + PH_14 = 0x7E, + PH_15 = 0x7F, + PI_0 = 0x80, + PI_1 = 0x81, + PI_2 = 0x82, + PI_3 = 0x83, + PI_4 = 0x84, + PI_5 = 0x85, + PI_6 = 0x86, + PI_7 = 0x87, + PI_8 = 0x88, + PI_9 = 0x89, + PI_10 = 0x8A, + PI_11 = 0x8B, + PI_12 = 0x8C, + PI_13 = 0x8D, + PI_14 = 0x8E, + PI_15 = 0x8F, + PJ_0 = 0x90, + PJ_1 = 0x91, + PJ_2 = 0x92, + PJ_3 = 0x93, + PJ_4 = 0x94, + PJ_5 = 0x95, + PJ_6 = 0x96, + PJ_7 = 0x97, + PJ_8 = 0x98, + PJ_8_ALT0 = PJ_8 | ALT0, // same pin used for alternate HW + PJ_9 = 0x99, + PJ_9_ALT0 = PJ_9 | ALT0, // same pin used for alternate HW + PJ_10 = 0x9A, + PJ_10_ALT0 = PJ_10 | ALT0, // same pin used for alternate HW + PJ_11 = 0x9B, + PJ_11_ALT0 = PJ_11 | ALT0, // same pin used for alternate HW + PJ_12 = 0x9C, + PJ_13 = 0x9D, + PJ_14 = 0x9E, + PJ_15 = 0x9F, + PK_0 = 0xA0, + PK_0_ALT0 = PK_0 | ALT0, // same pin used for alternate HW + PK_1 = 0xA1, + PK_1_ALT0 = PK_1 | ALT0, // same pin used for alternate HW + PK_2 = 0xA2, + PK_3 = 0xA3, + PK_4 = 0xA4, + PK_5 = 0xA5, + PK_6 = 0xA6, + PK_7 = 0xA7, + + /**** ADC internal channels ****/ + + ADC_TEMP = 0xF0, // Internal pin virtual value + ADC_VREF = 0xF1, // Internal pin virtual value + ADC_VBAT = 0xF2, // Internal pin virtual value + + // STDIO for console print +#ifdef MBED_CONF_TARGET_STDIO_UART_TX + CONSOLE_TX = MBED_CONF_TARGET_STDIO_UART_TX, +#else + CONSOLE_TX = PD_5, +#endif +#ifdef MBED_CONF_TARGET_STDIO_UART_RX + CONSOLE_RX = MBED_CONF_TARGET_STDIO_UART_RX, +#else + CONSOLE_RX = PD_6, +#endif + + //Led mappings + LED_RED = PA_0, //Red + LED_GREEN = PA_0, //Green + LED_BLUE = PA_0, //Blue + + /**** OSCILLATOR pins ****/ + RCC_OSC32_IN = PC_14, + RCC_OSC32_OUT = PC_15, + RCC_OSC_IN = PH_0, + RCC_OSC_OUT = PH_1, + + /**** DEBUG pins ****/ + SYS_JTCK_SWCLK = PA_14, + SYS_JTDI = PA_15, + SYS_JTDO_SWO = PB_3, + SYS_JTMS_SWDIO = PA_13, + SYS_JTRST = PB_4, + SYS_PVD_IN = PB_7, + SYS_TRACECLK = PE_2, + SYS_TRACED0 = PE_3, + SYS_TRACED0_ALT0 = PC_1, + SYS_TRACED0_ALT1 = PG_13, + SYS_TRACED1 = PE_4, + SYS_TRACED1_ALT0 = PC_8, + SYS_TRACED1_ALT1 = PG_14, + SYS_TRACED2 = PE_5, + SYS_TRACED2_ALT0 = PD_2, + SYS_TRACED3 = PE_6, + SYS_TRACED3_ALT0 = PC_12, + SYS_TRGIO = PC_7, + SYS_WKUP0 = PA_0, + SYS_WKUP1 = PA_2, + SYS_WKUP2 = PC_13, + SYS_WKUP5 = PC_1, + + // Not connected + NC = (int)0xFFFFFFFF +} PinName; + +// Standardized LED and button names +#define LED1 LED_RED +#define LED2 LED_GREEN +#define LED3 LED_BLUE +#define BUTTON1 PE_5 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/cores/arduino/random_seed.cpp b/cores/arduino/random_seed.cpp new file mode 100644 index 000000000..32ee18750 --- /dev/null +++ b/cores/arduino/random_seed.cpp @@ -0,0 +1,17 @@ +#if defined(MBEDTLS_ENTROPY_NV_SEED) + +#include "mbed.h" + +// Provide stubs for mbedtls entropy source +// The functions may be implemented using a crypto chip like ECCx08 +extern "C" { + WEAK int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len ) { + return -1; + } + + WEAK int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ) { + return -1; + } +} + +#endif \ No newline at end of file diff --git a/cores/arduino/timer.cpp b/cores/arduino/timer.cpp index 6a58694f8..4d6b60474 100644 --- a/cores/arduino/timer.cpp +++ b/cores/arduino/timer.cpp @@ -30,4 +30,8 @@ void ArduinoTimer::start() { void ArduinoTimer::stop() { timer->obj->stop(); +} + +void ArduinoTimer::reset() { + timer->obj->reset(); } \ No newline at end of file diff --git a/cores/arduino/timer.h b/cores/arduino/timer.h index 0b6a436be..9f7dac29f 100644 --- a/cores/arduino/timer.h +++ b/cores/arduino/timer.h @@ -18,6 +18,7 @@ namespace arduino { ~ArduinoTimer(); void start(); void stop(); + void reset(); private: mbed_timer* timer = NULL; diff --git a/cores/arduino/wiring_pulse.cpp b/cores/arduino/wiring_pulse.cpp index acd080841..4a2cb48d6 100644 --- a/cores/arduino/wiring_pulse.cpp +++ b/cores/arduino/wiring_pulse.cpp @@ -243,21 +243,23 @@ unsigned long pulseIn(PinName pin, PinStatus state, unsigned long timeout) unsigned long startMicros = micros(); + uint32_t target = state ? mask : 0; + // wait for any previous pulse to end - while ((*reg_in & mask) == state) { + while ((*reg_in & mask) == target) { if (micros() - startMicros > timeout) return 0; } // wait for the pulse to start - while ((*reg_in & mask) != state) { + while ((*reg_in & mask) != target) { if (micros() - startMicros > timeout) return 0; } unsigned long start = micros(); // wait for the pulse to stop - while ((*reg_in & mask) == state) { + while ((*reg_in & mask) == target) { if (micros() - startMicros > timeout) return 0; } diff --git a/extras/package_index.json.NewTag.template b/extras/package_index.json.NewTag.template index ed27dc74b..27e2c0da0 100644 --- a/extras/package_index.json.NewTag.template +++ b/extras/package_index.json.NewTag.template @@ -202,6 +202,9 @@ "boards": [ { "name": "Arduino Portenta H7" + }, + { + "name": "Arduino Portenta X8" } ], "toolsDependencies": [ @@ -224,6 +227,11 @@ "packager": "arduino", "version": "1.8.0-arduino", "name": "imgtool" + }, + { + "packager": "arduino", + "version": "32.0.0", + "name": "adb" } ] }, @@ -334,4 +342,4 @@ "tools": [] } ] -} \ No newline at end of file +} diff --git a/full.variables b/full.variables index 36dbcc332..58b6f0a77 100644 --- a/full.variables +++ b/full.variables @@ -1,5 +1,5 @@ export FLAVOUR="" -export VARIANTS=("NANO_RP2040_CONNECT ARDUINO_NANO33BLE RASPBERRY_PI_PICO PORTENTA_H7_M7 PORTENTA_H7_M4 EDGE_CONTROL NICLA NICLA_VISION") -export FQBNS=("edge_control nanorp2040connect nano33ble pico envie_m7 envie_m4 nicla_sense nicla_vision") +export VARIANTS=("NANO_RP2040_CONNECT ARDUINO_NANO33BLE RASPBERRY_PI_PICO PORTENTA_H7_M7 PORTENTA_H7_M4 EDGE_CONTROL NICLA NICLA_VISION PORTENTA_X8") +export FQBNS=("edge_control nanorp2040connect nano33ble pico envie_m7 envie_m4 nicla_sense nicla_vision portenta_x8") export LIBRARIES=("") export BOOTLOADERS=("nano33ble PORTENTA_H7 EDGE_CONTROL NICLA NICLA_VISION") diff --git a/libraries/MCUboot/default_keys/ecdsa-p256-encrypt-key.pem b/libraries/MCUboot/default_keys/ecdsa-p256-encrypt-priv-key.pem similarity index 100% rename from libraries/MCUboot/default_keys/ecdsa-p256-encrypt-key.pem rename to libraries/MCUboot/default_keys/ecdsa-p256-encrypt-priv-key.pem diff --git a/libraries/MCUboot/default_keys/ecdsa-p256-encrypt-pub-key.pem b/libraries/MCUboot/default_keys/ecdsa-p256-encrypt-pub-key.pem new file mode 100644 index 000000000..b23dadbcc --- /dev/null +++ b/libraries/MCUboot/default_keys/ecdsa-p256-encrypt-pub-key.pem @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaskgTJbWiejRblEEAobolQsixMmV +Bk/1G/bQ44PZ0YFmbvIHOwPb5NHefENwjaKJ6xv6vgJeXKAS3CMxweA3sA== +-----END PUBLIC KEY----- diff --git a/libraries/MCUboot/default_keys/ecdsa-p256-signing-key.pem b/libraries/MCUboot/default_keys/ecdsa-p256-signing-priv-key.pem similarity index 100% rename from libraries/MCUboot/default_keys/ecdsa-p256-signing-key.pem rename to libraries/MCUboot/default_keys/ecdsa-p256-signing-priv-key.pem diff --git a/libraries/MCUboot/default_keys/ecdsa-p256-signing-pub-key.pem b/libraries/MCUboot/default_keys/ecdsa-p256-signing-pub-key.pem new file mode 100644 index 000000000..4337f3bb5 --- /dev/null +++ b/libraries/MCUboot/default_keys/ecdsa-p256-signing-pub-key.pem @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1RY1JsM7rU1njkMkxJjpay6+DaPx +9JeAezEyB9mVpxdXaUN76ciq0AoMhgvjf5mIUcT5Ipi+Xqr9kDyidBhJBQ== +-----END PUBLIC KEY----- diff --git a/libraries/MCUboot/src/cortex-m7/libbootutil.a b/libraries/MCUboot/src/cortex-m7/libbootutil.a index d68e26232..fecf030aa 100644 Binary files a/libraries/MCUboot/src/cortex-m7/libbootutil.a and b/libraries/MCUboot/src/cortex-m7/libbootutil.a differ diff --git a/libraries/MLC/examples/NiclaVision_DataLogger_FIFO/NiclaVision_DataLogger_FIFO.ino b/libraries/MLC/examples/NiclaVision_DataLogger_FIFO/NiclaVision_DataLogger_FIFO.ino new file mode 100644 index 000000000..1bd9c917b --- /dev/null +++ b/libraries/MLC/examples/NiclaVision_DataLogger_FIFO/NiclaVision_DataLogger_FIFO.ino @@ -0,0 +1,265 @@ +/* + This example exposes the second MB of Nicla Vision flash as a USB disk. + The user can interact with this disk as a bidirectional communication with the board + For example, the board could save data in a file to be retrieved later with a drag and drop. + If the user does a double tap, the firmware goes to datalogger mode (green led on). + Now the user can do another double tap to start a recording of the IMU data + (green led blinking). With another double tap the recording will be stopped (green led on). + Now the user can start/stop other recordings of the IMU data using again the double tap. + The log files are saved in flash with an increasing number suffix data_0.txt, data_1.txt, etc. + If you want to transfer the log files to the PC, you can reset the board and + wait for 10 seconds (blue led blinking). +*/ + +#include "PluggableUSBMSD.h" +#include "QSPIFBlockDevice.h" +#include "MBRBlockDevice.h" +#include "FATFileSystem.h" +#include "LSM6DSOXSensor.h" + +#define INT_1 LSM6DS_INT +#define SENSOR_ODR 104.0f // In Hertz +#define ACC_FS 2 // In g +#define GYR_FS 2000 // In dps +#define MEASUREMENT_TIME_INTERVAL (1000.0f/SENSOR_ODR) // In ms +#define FIFO_SAMPLE_THRESHOLD 199 +#define FLASH_BUFF_LEN 8192 + +typedef enum { + DATA_STORAGE_STATE, + DATA_LOGGER_IDLE_STATE, + DATA_LOGGER_RUNNING_STATE +} demo_state_e; + +volatile demo_state_e demo_state = DATA_STORAGE_STATE; +volatile int mems_event = 0; +uint32_t file_count = 0; +unsigned long timestamp_count = 0; +bool acc_available = false; +bool gyr_available = false; +int32_t acc_value[3]; +int32_t gyr_value[3]; +char buff[FLASH_BUFF_LEN]; +uint32_t pos = 0; + +QSPIFBlockDevice root(QSPI_SO0, QSPI_SO1, QSPI_SO2, QSPI_SO3, QSPI_SCK, QSPI_CS, QSPIF_POLARITY_MODE_1, 40000000); +// Partition 1 is allocated to WiFi +mbed::MBRBlockDevice lsm_data(&root, 2); +static mbed::FATFileSystem lsm_fs("lsm"); + +LSM6DSOXSensor AccGyr(&SPI1, PIN_SPI_SS1); + +USBMSD MassStorage(&root); + +rtos::Thread acquisition_th; + +FILE *f = nullptr; + +void INT1Event_cb() +{ + mems_event = 1; +} + +void USBMSD::begin() +{ + int err = lsm_fs.mount(&lsm_data); + if (err) { + Serial.println("mount failed"); + err = lsm_fs.reformat(&lsm_data); + if (err) { + Serial.println("Reformat failed"); + return; + } + } +} + +mbed::FATFileSystem &USBMSD::getFileSystem() +{ + static mbed::FATFileSystem fs("lsm"); + return fs; +} + +void led_green_thd() +{ + while (1) { + if (demo_state == DATA_LOGGER_RUNNING_STATE) { + digitalWrite(LEDG, LOW); + delay(100); + digitalWrite(LEDG, HIGH); + delay(100); + } + } +} + +void Read_FIFO_Data(uint16_t samples_to_read) +{ + uint16_t i; + + for (i = 0; i < samples_to_read; i++) { + uint8_t tag; + // Check the FIFO tag + AccGyr.Get_FIFO_Tag(&tag); + switch (tag) { + // If we have a gyro tag, read the gyro data + case LSM6DSOX_GYRO_NC_TAG: { + AccGyr.Get_FIFO_G_Axes(gyr_value); + gyr_available = true; + break; + } + // If we have an acc tag, read the acc data + case LSM6DSOX_XL_NC_TAG: { + AccGyr.Get_FIFO_X_Axes(acc_value); + acc_available = true; + break; + } + // We can discard other tags + default: { + break; + } + } + // If we have the measurements of both acc and gyro, we can store them with timestamp + if (acc_available && gyr_available) { + int num_bytes; + num_bytes = snprintf(&buff[pos], (FLASH_BUFF_LEN - pos), "%lu %d %d %d %d %d %d\n", (unsigned long)((float)timestamp_count * MEASUREMENT_TIME_INTERVAL), (int)acc_value[0], (int)acc_value[1], (int)acc_value[2], (int)gyr_value[0], (int)gyr_value[1], (int)gyr_value[2]); + pos += num_bytes; + timestamp_count++; + acc_available = false; + gyr_available = false; + } + } + // We can add the termination character to the string, so we are ready to save it in flash + buff[pos] = '\0'; + pos = 0; +} + +void setup() +{ + Serial.begin(115200); + MassStorage.begin(); + pinMode(LEDB, OUTPUT); + pinMode(LEDG, OUTPUT); + digitalWrite(LEDB, HIGH); + digitalWrite(LEDG, HIGH); + + // Initialize SPI1 bus. + SPI1.begin(); + + //Interrupts. + attachInterrupt(INT_1, INT1Event_cb, RISING); + + // Initialize IMU. + AccGyr.begin(); + AccGyr.Enable_X(); + AccGyr.Enable_G(); + // Configure ODR and FS of the acc and gyro + AccGyr.Set_X_ODR(SENSOR_ODR); + AccGyr.Set_X_FS(ACC_FS); + AccGyr.Set_G_ODR(SENSOR_ODR); + AccGyr.Set_G_FS(GYR_FS); + // Enable the Double Tap event + AccGyr.Enable_Double_Tap_Detection(LSM6DSOX_INT1_PIN); + // Configure FIFO BDR for acc and gyro + AccGyr.Set_FIFO_X_BDR(SENSOR_ODR); + AccGyr.Set_FIFO_G_BDR(SENSOR_ODR); + // Start Led blinking thread + acquisition_th.start(led_green_thd); +} + +void loop() +{ + + if (mems_event) { + mems_event = 0; + LSM6DSOX_Event_Status_t status; + AccGyr.Get_X_Event_Status(&status); + if (status.DoubleTapStatus) { + switch (demo_state) { + case DATA_STORAGE_STATE: { + // Go to DATA_LOGGER_IDLE_STATE state + demo_state = DATA_LOGGER_IDLE_STATE; + digitalWrite(LEDG, LOW); + Serial.println("From DATA_STORAGE_STATE To DATA_LOGGER_IDLE_STATE"); + break; + } + case DATA_LOGGER_IDLE_STATE: { + char filename[32]; + // Go to DATA_LOGGER_RUNNING_STATE state + snprintf(filename, 32, "/lsm/data_%lu.txt", file_count); + Serial.print("Start writing file "); + Serial.println(filename); + // open a file to write some data + // w+ means overwrite, so every time the board is rebooted the file will be overwritten + f = fopen(filename, "w+"); + if (f != nullptr) { + // write header + fprintf(f, "Timestamp[ms] A_X [mg] A_Y [mg] A_Z [mg] G_X [mdps] G_Y [mdps] G_Z [mdps]\n"); + fflush(f); + Serial.println("From DATA_LOGGER_IDLE_STATE To DATA_LOGGER_RUNNING_STATE"); + demo_state = DATA_LOGGER_RUNNING_STATE; + digitalWrite(LEDG, HIGH); + timestamp_count = 0; + pos = 0; + acc_available = false; + gyr_available = false; + // Set FIFO in Continuous mode + AccGyr.Set_FIFO_Mode(LSM6DSOX_STREAM_MODE); + } + break; + } + case DATA_LOGGER_RUNNING_STATE: { + // Empty the FIFO + uint16_t fifo_samples; + AccGyr.Get_FIFO_Num_Samples(&fifo_samples); + Read_FIFO_Data(fifo_samples); + // Store the string in flash + fprintf(f, "%s", buff); + fflush(f); + + // Close the log file and increase the counter + fclose(f); + file_count++; + // Set FIFO in Bypass mode + AccGyr.Set_FIFO_Mode(LSM6DSOX_BYPASS_MODE); + // Go to DATA_LOGGER_IDLE_STATE state + demo_state = DATA_LOGGER_IDLE_STATE; + // Wait for the led thread ends the blinking + delay(250); + digitalWrite(LEDG, LOW); + Serial.println("From DATA_LOGGER_RUNNING_STATE To DATA_LOGGER_IDLE_STATE"); + break; + } + default: + Serial.println("Error! Invalid state"); + } + } + } + + if (demo_state == DATA_LOGGER_RUNNING_STATE) { + uint16_t fifo_samples; + + // Check the number of samples inside FIFO + AccGyr.Get_FIFO_Num_Samples(&fifo_samples); + + // If we reach the threshold we can empty the FIFO + if (fifo_samples > FIFO_SAMPLE_THRESHOLD) { + // Empty the FIFO + Read_FIFO_Data(fifo_samples); + // Store the string in flash + fprintf(f, "%s", buff); + fflush(f); + } + } + + if (demo_state == DATA_STORAGE_STATE && millis() > 10000) { + // Disable the sensor and go to Mass Storage mode + AccGyr.Disable_Double_Tap_Detection(); + AccGyr.Disable_X(); + AccGyr.Disable_G(); + while (1) { + digitalWrite(LEDB, LOW); + delay(100); + digitalWrite(LEDB, HIGH); + delay(100); + } + } +} diff --git a/libraries/MLC/examples/NiclaVision_MLC_Motion_Intensity/NiclaVision_MLC_Motion_Intensity.ino b/libraries/MLC/examples/NiclaVision_MLC_Motion_Intensity/NiclaVision_MLC_Motion_Intensity.ino new file mode 100644 index 000000000..b865d0068 --- /dev/null +++ b/libraries/MLC/examples/NiclaVision_MLC_Motion_Intensity/NiclaVision_MLC_Motion_Intensity.ino @@ -0,0 +1,134 @@ +/* + This example shows how to load the MLC bytecode for Motion Intensity on LSM6DSOX + of the Arduino Nicla Vision. +*/ + +// Includes +#include "LSM6DSOXSensor.h" +#include "lsm6dsox_motion_intensity.h" + +#define INT_1 LSM6DS_INT + +//Interrupts. +volatile int mems_event = 0; + +// Components +LSM6DSOXSensor AccGyr(&SPI1, PIN_SPI_SS1); + +// MLC +ucf_line_t *ProgramPointer; +int32_t LineCounter; +int32_t TotalNumberOfLine; + +void INT1Event_cb(); +void printMLCStatus(uint8_t status); + +void setup() +{ + // Led. + pinMode(LEDB, OUTPUT); + pinMode(LEDG, OUTPUT); + pinMode(LEDR, OUTPUT); + digitalWrite(LEDB, HIGH); + digitalWrite(LEDG, HIGH); + digitalWrite(LEDR, HIGH); + + // Initialize serial for output. + Serial.begin(115200); + + // Initialize I2C bus. + SPI1.begin(); + + AccGyr.begin(); + + /* Feed the program to Machine Learning Core */ + /* Motion Intensity Default program */ + ProgramPointer = (ucf_line_t *)lsm6dsox_motion_intensity; + TotalNumberOfLine = sizeof(lsm6dsox_motion_intensity) / sizeof(ucf_line_t); + Serial.println("Motion Intensity for LSM6DSOX MLC"); + Serial.print("UCF Number Line="); + Serial.println(TotalNumberOfLine); + + for (LineCounter = 0; LineCounter < TotalNumberOfLine; LineCounter++) { + if (AccGyr.Write_Reg(ProgramPointer[LineCounter].address, ProgramPointer[LineCounter].data)) { + Serial.print("Error loading the Program to LSM6DSOX at line: "); + Serial.println(LineCounter); + while (1) { + // Led blinking. + digitalWrite(LED_BUILTIN, LOW); + delay(250); + digitalWrite(LED_BUILTIN, HIGH); + delay(250); + } + } + } + + Serial.println("Program loaded inside the LSM6DSOX MLC"); + + AccGyr.Enable_X(); + AccGyr.Set_X_ODR(104.0f); + AccGyr.Set_X_FS(2); + + //Interrupts. + pinMode(INT_1, INPUT); + attachInterrupt(INT_1, INT1Event_cb, RISING); +} + +void loop() +{ + if (mems_event) { + mems_event = 0; + LSM6DSOX_MLC_Status_t status; + AccGyr.Get_MLC_Status(&status); + if (status.is_mlc1) { + uint8_t mlc_out[8]; + AccGyr.Get_MLC_Output(mlc_out); + printMLCStatus(mlc_out[0]); + } + } +} + +void INT1Event_cb() +{ + mems_event = 1; +} + +void printMLCStatus(uint8_t status) +{ + switch (status) { + case 1: + // Reset leds status + digitalWrite(LEDB, HIGH); + digitalWrite(LEDG, HIGH); + digitalWrite(LEDR, HIGH); + // LEDB On + digitalWrite(LEDB, LOW); + Serial.println("Stationary"); + break; + case 4: + // Reset leds status + digitalWrite(LEDB, HIGH); + digitalWrite(LEDG, HIGH); + digitalWrite(LEDR, HIGH); + // LEDG On + digitalWrite(LEDG, LOW); + Serial.println("Medium Intensity"); + break; + case 8: + // Reset leds status + digitalWrite(LEDB, HIGH); + digitalWrite(LEDG, HIGH); + digitalWrite(LEDR, HIGH); + // LEDR On + digitalWrite(LEDR, LOW); + Serial.println("High Intensity"); + break; + default: + // Reset leds status + digitalWrite(LEDB, HIGH); + digitalWrite(LEDG, HIGH); + digitalWrite(LEDR, HIGH); + Serial.println("Unknown"); + break; + } +} diff --git a/libraries/MLC/examples/NiclaVision_MLC_Motion_Intensity/lsm6dsox_motion_intensity.h b/libraries/MLC/examples/NiclaVision_MLC_Motion_Intensity/lsm6dsox_motion_intensity.h new file mode 100644 index 000000000..cd669df13 --- /dev/null +++ b/libraries/MLC/examples/NiclaVision_MLC_Motion_Intensity/lsm6dsox_motion_intensity.h @@ -0,0 +1,127 @@ +/* + ****************************************************************************** + * @file lsm6dsox_motion_intensity.h + * @author Sensors Software Solution Team + * @brief This file contains the configuration for lsm6dsox_motion_intensity. + * + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef LSM6DSOX_MOTION_INTENSITY_H +#define LSM6DSOX_MOTION_INTENSITY_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include +#ifndef MEMS_UCF_SHARED_TYPES +#define MEMS_UCF_SHARED_TYPES + +/** Common data block definition **/ +typedef struct { + uint8_t address; + uint8_t data; +} ucf_line_t; + +#endif /* MEMS_UCF_SHARED_TYPES */ + +/** Configuration array generated from Unico Tool **/ +const ucf_line_t lsm6dsox_motion_intensity[] = { + {.address = 0x10, .data = 0x00,}, + {.address = 0x11, .data = 0x00,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x04, .data = 0x00,}, + {.address = 0x05, .data = 0x00,}, + {.address = 0x17, .data = 0x40,}, + {.address = 0x02, .data = 0x11,}, + {.address = 0x08, .data = 0xEA,}, + {.address = 0x09, .data = 0x46,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x50,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x0A,}, + {.address = 0x02, .data = 0x11,}, + {.address = 0x08, .data = 0xF2,}, + {.address = 0x09, .data = 0x34,}, + {.address = 0x02, .data = 0x11,}, + {.address = 0x08, .data = 0xFA,}, + {.address = 0x09, .data = 0x3C,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x52,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x5E,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x02, .data = 0x31,}, + {.address = 0x08, .data = 0x3C,}, + {.address = 0x09, .data = 0x3F,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x01,}, + {.address = 0x09, .data = 0x10,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x1F,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x02, .data = 0x31,}, + {.address = 0x08, .data = 0x52,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x01, .data = 0x00,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x17, .data = 0x40,}, + {.address = 0x02, .data = 0x31,}, + {.address = 0x08, .data = 0x5E,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x2C,}, + {.address = 0x09, .data = 0x80,}, + {.address = 0x09, .data = 0xA0,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x41,}, + {.address = 0x09, .data = 0xE0,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x17, .data = 0x00,}, + {.address = 0x04, .data = 0x00,}, + {.address = 0x05, .data = 0x10,}, + {.address = 0x02, .data = 0x01,}, + {.address = 0x01, .data = 0x00,}, + {.address = 0x5E, .data = 0x02,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x0D, .data = 0x01,}, + {.address = 0x60, .data = 0x35,}, + {.address = 0x01, .data = 0x00,}, + {.address = 0x10, .data = 0x40,}, + {.address = 0x11, .data = 0x00,} +}; + +#ifdef __cplusplus +} +#endif + +#endif /* LSM6DSOX_MOTION_INTENSITY_H */ + diff --git a/libraries/MLC/examples/RP2040_DataLogger_FIFO/RP2040_DataLogger_FIFO.ino b/libraries/MLC/examples/RP2040_DataLogger_FIFO/RP2040_DataLogger_FIFO.ino new file mode 100644 index 000000000..ce39211bd --- /dev/null +++ b/libraries/MLC/examples/RP2040_DataLogger_FIFO/RP2040_DataLogger_FIFO.ino @@ -0,0 +1,258 @@ +/* + This example exposes the first MB of Rp2040 flash as a USB disk. + The user can interact with this disk as a bidirectional communication with the board + For example, the board could save data in a file to be retrieved later with a drag and drop. + If the user does a double tap, the firmware goes to datalogger mode (green led on). + Now the user can do another double tap to start a recording of the IMU data + (green led blinking). With another double tap the recording will be stopped (green led on). + Now the user can start/stop other recordings of the IMU data using again the double tap. + The log files are saved in flash with an increasing number suffix data_0.txt, data_1.txt, etc. + If you want to transfer the log files to the PC, you can reset the board and + wait for 10 seconds (blue led blinking). + You can find the video tutorial on LSM6DSOX MLC at: https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-advanced +*/ + +#include "PluggableUSBMSD.h" +#include "FlashIAPBlockDevice.h" +#include "WiFiNINA.h" +#include "LSM6DSOXSensor.h" + +#define INT_1 INT_IMU +#define SENSOR_ODR 104.0f // In Hertz +#define ACC_FS 2 // In g +#define GYR_FS 2000 // In dps +#define MEASUREMENT_TIME_INTERVAL (1000.0f/SENSOR_ODR) // In ms +#define FIFO_SAMPLE_THRESHOLD 199 +#define FLASH_BUFF_LEN 8192 + +typedef enum { + DATA_STORAGE_STATE, + DATA_LOGGER_IDLE_STATE, + DATA_LOGGER_RUNNING_STATE +} demo_state_e; + +volatile demo_state_e demo_state = DATA_STORAGE_STATE; +volatile int mems_event = 0; +uint32_t file_count = 0; +unsigned long timestamp_count = 0; +bool acc_available = false; +bool gyr_available = false; +int32_t acc_value[3]; +int32_t gyr_value[3]; +char buff[FLASH_BUFF_LEN]; +uint32_t pos = 0; + +static FlashIAPBlockDevice bd(XIP_BASE + 0x100000, 0x100000); + +LSM6DSOXSensor AccGyr(&Wire, LSM6DSOX_I2C_ADD_L); + +USBMSD MassStorage(&bd); + +rtos::Thread acquisition_th; + +FILE *f = nullptr; + +void INT1Event_cb() +{ + mems_event = 1; +} + +void USBMSD::begin() +{ + int err = getFileSystem().mount(&bd); + if (err) { + err = getFileSystem().reformat(&bd); + } +} + +mbed::FATFileSystem &USBMSD::getFileSystem() +{ + static mbed::FATFileSystem fs("fs"); + return fs; +} + +void led_green_thd() +{ + while (1) { + if (demo_state == DATA_LOGGER_RUNNING_STATE) { + digitalWrite(LEDG, HIGH); + delay(100); + digitalWrite(LEDG, LOW); + delay(100); + } + } +} + +void Read_FIFO_Data(uint16_t samples_to_read) +{ + uint16_t i; + + for (i = 0; i < samples_to_read; i++) { + uint8_t tag; + // Check the FIFO tag + AccGyr.Get_FIFO_Tag(&tag); + switch (tag) { + // If we have a gyro tag, read the gyro data + case LSM6DSOX_GYRO_NC_TAG: { + AccGyr.Get_FIFO_G_Axes(gyr_value); + gyr_available = true; + break; + } + // If we have an acc tag, read the acc data + case LSM6DSOX_XL_NC_TAG: { + AccGyr.Get_FIFO_X_Axes(acc_value); + acc_available = true; + break; + } + // We can discard other tags + default: { + break; + } + } + // If we have the measurements of both acc and gyro, we can store them with timestamp + if (acc_available && gyr_available) { + int num_bytes; + num_bytes = snprintf(&buff[pos], (FLASH_BUFF_LEN - pos), "%lu %d %d %d %d %d %d\n", (unsigned long)((float)timestamp_count * MEASUREMENT_TIME_INTERVAL), (int)acc_value[0], (int)acc_value[1], (int)acc_value[2], (int)gyr_value[0], (int)gyr_value[1], (int)gyr_value[2]); + pos += num_bytes; + timestamp_count++; + acc_available = false; + gyr_available = false; + } + } + // We can add the termination character to the string, so we are ready to save it in flash + buff[pos] = '\0'; + pos = 0; +} + +void setup() +{ + Serial.begin(115200); + MassStorage.begin(); + pinMode(LEDB, OUTPUT); + pinMode(LEDG, OUTPUT); + digitalWrite(LEDB, LOW); + digitalWrite(LEDG, LOW); + + // Initialize I2C bus. + Wire.begin(); + Wire.setClock(400000); + + //Interrupts. + attachInterrupt(INT_1, INT1Event_cb, RISING); + + // Initialize IMU. + AccGyr.begin(); + AccGyr.Enable_X(); + AccGyr.Enable_G(); + // Configure ODR and FS of the acc and gyro + AccGyr.Set_X_ODR(SENSOR_ODR); + AccGyr.Set_X_FS(ACC_FS); + AccGyr.Set_G_ODR(SENSOR_ODR); + AccGyr.Set_G_FS(GYR_FS); + // Enable the Double Tap event + AccGyr.Enable_Double_Tap_Detection(LSM6DSOX_INT1_PIN); + // Configure FIFO BDR for acc and gyro + AccGyr.Set_FIFO_X_BDR(SENSOR_ODR); + AccGyr.Set_FIFO_G_BDR(SENSOR_ODR); + // Start Led blinking thread + acquisition_th.start(led_green_thd); +} + +void loop() +{ + + if (mems_event) { + mems_event = 0; + LSM6DSOX_Event_Status_t status; + AccGyr.Get_X_Event_Status(&status); + if (status.DoubleTapStatus) { + switch (demo_state) { + case DATA_STORAGE_STATE: { + // Go to DATA_LOGGER_IDLE_STATE state + demo_state = DATA_LOGGER_IDLE_STATE; + digitalWrite(LEDG, HIGH); + Serial.println("From DATA_STORAGE_STATE To DATA_LOGGER_IDLE_STATE"); + break; + } + case DATA_LOGGER_IDLE_STATE: { + char filename[32]; + // Go to DATA_LOGGER_RUNNING_STATE state + snprintf(filename, 32, "/fs/data_%lu.txt", file_count); + Serial.print("Start writing file "); + Serial.println(filename); + // open a file to write some data + // w+ means overwrite, so every time the board is rebooted the file will be overwritten + f = fopen(filename, "w+"); + if (f != nullptr) { + // write header + fprintf(f, "Timestamp[ms] A_X [mg] A_Y [mg] A_Z [mg] G_X [mdps] G_Y [mdps] G_Z [mdps]\n"); + fflush(f); + Serial.println("From DATA_LOGGER_IDLE_STATE To DATA_LOGGER_RUNNING_STATE"); + demo_state = DATA_LOGGER_RUNNING_STATE; + digitalWrite(LEDG, LOW); + timestamp_count = 0; + pos = 0; + acc_available = false; + gyr_available = false; + // Set FIFO in Continuous mode + AccGyr.Set_FIFO_Mode(LSM6DSOX_STREAM_MODE); + } + break; + } + case DATA_LOGGER_RUNNING_STATE: { + // Empty the FIFO + uint16_t fifo_samples; + AccGyr.Get_FIFO_Num_Samples(&fifo_samples); + Read_FIFO_Data(fifo_samples); + // Store the string in flash + fprintf(f, "%s", buff); + fflush(f); + + // Close the log file and increase the counter + fclose(f); + file_count++; + // Set FIFO in Bypass mode + AccGyr.Set_FIFO_Mode(LSM6DSOX_BYPASS_MODE); + // Go to DATA_LOGGER_IDLE_STATE state + demo_state = DATA_LOGGER_IDLE_STATE; + // Wait for the led thread ends the blinking + delay(250); + digitalWrite(LEDG, HIGH); + Serial.println("From DATA_LOGGER_RUNNING_STATE To DATA_LOGGER_IDLE_STATE"); + break; + } + default: + Serial.println("Error! Invalid state"); + } + } + } + + if (demo_state == DATA_LOGGER_RUNNING_STATE) { + uint16_t fifo_samples; + + // Check the number of samples inside FIFO + AccGyr.Get_FIFO_Num_Samples(&fifo_samples); + + // If we reach the threshold we can empty the FIFO + if (fifo_samples > FIFO_SAMPLE_THRESHOLD) { + // Empty the FIFO + Read_FIFO_Data(fifo_samples); + // Store the string in flash + fprintf(f, "%s", buff); + fflush(f); + } + } + + if (demo_state == DATA_STORAGE_STATE && millis() > 10000) { + // Disable the sensor and go to Mass Storage mode + AccGyr.Disable_Double_Tap_Detection(); + AccGyr.Disable_X(); + AccGyr.Disable_G(); + while (1) { + digitalWrite(LEDB, HIGH); + delay(100); + digitalWrite(LEDB, LOW); + delay(100); + } + } +} diff --git a/libraries/MLC/examples/RP2040_MLC_Motion_Intensity/RP2040_MLC_Motion_Intensity.ino b/libraries/MLC/examples/RP2040_MLC_Motion_Intensity/RP2040_MLC_Motion_Intensity.ino new file mode 100644 index 000000000..6b4f300fa --- /dev/null +++ b/libraries/MLC/examples/RP2040_MLC_Motion_Intensity/RP2040_MLC_Motion_Intensity.ino @@ -0,0 +1,136 @@ +/* + This example shows how to load the MLC bytecode for Motion Intensity on LSM6DSOX + of the Arduino Nano RP2040 Connect. + You can find the video tutorial on LSM6DSOX MLC at: https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-advanced +*/ + +// Includes +#include "WiFiNINA.h" +#include "LSM6DSOXSensor.h" +#include "lsm6dsox_motion_intensity.h" + +#define INT_1 INT_IMU + +//Interrupts. +volatile int mems_event = 0; + +// Components +LSM6DSOXSensor AccGyr(&Wire, LSM6DSOX_I2C_ADD_L); + +// MLC +ucf_line_t *ProgramPointer; +int32_t LineCounter; +int32_t TotalNumberOfLine; + +void INT1Event_cb(); +void printMLCStatus(uint8_t status); + +void setup() +{ + // Led. + pinMode(LEDB, OUTPUT); + pinMode(LEDG, OUTPUT); + pinMode(LEDR, OUTPUT); + digitalWrite(LEDB, LOW); + digitalWrite(LEDG, LOW); + digitalWrite(LEDR, LOW); + + // Initialize serial for output. + Serial.begin(115200); + + // Initialize I2C bus. + Wire.begin(); + + AccGyr.begin(); + + /* Feed the program to Machine Learning Core */ + /* Motion Intensity Default program */ + ProgramPointer = (ucf_line_t *)lsm6dsox_motion_intensity; + TotalNumberOfLine = sizeof(lsm6dsox_motion_intensity) / sizeof(ucf_line_t); + Serial.println("Motion Intensity for LSM6DSOX MLC"); + Serial.print("UCF Number Line="); + Serial.println(TotalNumberOfLine); + + for (LineCounter = 0; LineCounter < TotalNumberOfLine; LineCounter++) { + if (AccGyr.Write_Reg(ProgramPointer[LineCounter].address, ProgramPointer[LineCounter].data)) { + Serial.print("Error loading the Program to LSM6DSOX at line: "); + Serial.println(LineCounter); + while (1) { + // Led blinking. + digitalWrite(LED_BUILTIN, HIGH); + delay(250); + digitalWrite(LED_BUILTIN, LOW); + delay(250); + } + } + } + + Serial.println("Program loaded inside the LSM6DSOX MLC"); + + AccGyr.Enable_X(); + AccGyr.Set_X_ODR(104.0f); + AccGyr.Set_X_FS(2); + + //Interrupts. + pinMode(INT_1, INPUT); + attachInterrupt(INT_1, INT1Event_cb, RISING); +} + +void loop() +{ + if (mems_event) { + mems_event = 0; + LSM6DSOX_MLC_Status_t status; + AccGyr.Get_MLC_Status(&status); + if (status.is_mlc1) { + uint8_t mlc_out[8]; + AccGyr.Get_MLC_Output(mlc_out); + printMLCStatus(mlc_out[0]); + } + } +} + +void INT1Event_cb() +{ + mems_event = 1; +} + +void printMLCStatus(uint8_t status) +{ + switch (status) { + case 1: + // Reset leds status + digitalWrite(LEDB, LOW); + digitalWrite(LEDG, LOW); + digitalWrite(LEDR, LOW); + // LEDB On + digitalWrite(LEDB, HIGH); + Serial.println("Stationary"); + break; + case 4: + // Reset leds status + digitalWrite(LEDB, LOW); + digitalWrite(LEDG, LOW); + digitalWrite(LEDR, LOW); + // LEDG On + digitalWrite(LEDG, HIGH); + Serial.println("Medium Intensity"); + break; + case 8: + // Reset leds status + digitalWrite(LEDB, LOW); + digitalWrite(LEDG, LOW); + digitalWrite(LEDR, LOW); + // LEDR On + digitalWrite(LEDR, HIGH); + Serial.println("High Intensity"); + break; + default: + // Reset leds status + digitalWrite(LEDB, LOW); + digitalWrite(LEDG, LOW); + digitalWrite(LEDR, LOW); + Serial.println("Unknown"); + break; + } +} diff --git a/libraries/MLC/examples/RP2040_MLC_Motion_Intensity/lsm6dsox_motion_intensity.h b/libraries/MLC/examples/RP2040_MLC_Motion_Intensity/lsm6dsox_motion_intensity.h new file mode 100644 index 000000000..989639411 --- /dev/null +++ b/libraries/MLC/examples/RP2040_MLC_Motion_Intensity/lsm6dsox_motion_intensity.h @@ -0,0 +1,128 @@ +/* + ****************************************************************************** + * @file lsm6dsox_motion_intensity.h + * @author Sensors Software Solution Team + * @brief This file contains the configuration for lsm6dsox_motion_intensity. + * + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2021 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef LSM6DSOX_MOTION_INTENSITY_H +#define LSM6DSOX_MOTION_INTENSITY_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include +#ifndef MEMS_UCF_SHARED_TYPES +#define MEMS_UCF_SHARED_TYPES + +/** Common data block definition **/ +typedef struct { + uint8_t address; + uint8_t data; +} ucf_line_t; + +#endif /* MEMS_UCF_SHARED_TYPES */ + +/** Configuration array generated from Unico Tool **/ +const ucf_line_t lsm6dsox_motion_intensity[] = { + {.address = 0x10, .data = 0x00,}, + {.address = 0x11, .data = 0x00,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x04, .data = 0x00,}, + {.address = 0x05, .data = 0x00,}, + {.address = 0x17, .data = 0x40,}, + {.address = 0x02, .data = 0x11,}, + {.address = 0x08, .data = 0xEA,}, + {.address = 0x09, .data = 0x46,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x50,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x0A,}, + {.address = 0x02, .data = 0x11,}, + {.address = 0x08, .data = 0xF2,}, + {.address = 0x09, .data = 0x34,}, + {.address = 0x02, .data = 0x11,}, + {.address = 0x08, .data = 0xFA,}, + {.address = 0x09, .data = 0x3C,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x52,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x09, .data = 0x5E,}, + {.address = 0x09, .data = 0x03,}, + {.address = 0x02, .data = 0x31,}, + {.address = 0x08, .data = 0x3C,}, + {.address = 0x09, .data = 0x3F,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x01,}, + {.address = 0x09, .data = 0x10,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x1F,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x02, .data = 0x31,}, + {.address = 0x08, .data = 0x52,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x01, .data = 0x00,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x17, .data = 0x40,}, + {.address = 0x02, .data = 0x31,}, + {.address = 0x08, .data = 0x5E,}, + {.address = 0x09, .data = 0x00,}, + {.address = 0x09, .data = 0x18,}, + {.address = 0x09, .data = 0x11,}, + {.address = 0x09, .data = 0xC0,}, + {.address = 0x09, .data = 0xC8,}, + {.address = 0x09, .data = 0x32,}, + {.address = 0x09, .data = 0x84,}, + {.address = 0x09, .data = 0xE0,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x17, .data = 0x00,}, + {.address = 0x04, .data = 0x00,}, + {.address = 0x05, .data = 0x10,}, + {.address = 0x02, .data = 0x01,}, + {.address = 0x01, .data = 0x00,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x60, .data = 0x35,}, + {.address = 0x01, .data = 0x00,}, + {.address = 0x10, .data = 0x40,}, + {.address = 0x11, .data = 0x00,}, + {.address = 0x5E, .data = 0x02,}, + {.address = 0x01, .data = 0x80,}, + {.address = 0x0D, .data = 0x01,}, + {.address = 0x01, .data = 0x00,} +}; + +#ifdef __cplusplus +} +#endif + +#endif /* LSM6DSOX_MOTION_INTENSITY_H */ diff --git a/libraries/MLC/library.properties b/libraries/MLC/library.properties new file mode 100644 index 000000000..020c1bba6 --- /dev/null +++ b/libraries/MLC/library.properties @@ -0,0 +1,10 @@ +name=MLC +version=1.0 +author=Arduino +maintainer=Arduino +sentence=MLC library for LSM6DSOX on Arduino boards +paragraph= +category=Other +url=https://github.com/arduino/ArduinoCore-mbed/tree/master/libraries/MLC +architectures=mbed,mbed_nano,mbed_nicla +depends=STM32duino LSM6DSOX, WiFiNINA diff --git a/libraries/MLC/src/MLC.h b/libraries/MLC/src/MLC.h new file mode 100644 index 000000000..bd36232ac --- /dev/null +++ b/libraries/MLC/src/MLC.h @@ -0,0 +1 @@ +// Placeholder header to allow showing the example in menu \ No newline at end of file diff --git a/libraries/Nicla_System/src/Nicla_System.cpp b/libraries/Nicla_System/src/Nicla_System.cpp index a738b0c98..0b16919ed 100644 --- a/libraries/Nicla_System/src/Nicla_System.cpp +++ b/libraries/Nicla_System/src/Nicla_System.cpp @@ -85,6 +85,17 @@ bool nicla::disableLDO() return true; } +bool nicla::enterShipMode() +{ + // STATUS reg: + // | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | + // | RO | RO | EN_SHIPMODE | RO | RO | RO | RO | RO | + + uint8_t status_reg = _pmic.getStatus(); + status_reg |= 0x20; + _pmic.writeByte(BQ25120A_ADDRESS, BQ25120A_STATUS, status_reg); +} + uint8_t nicla::readLDOreg() { uint8_t ldo_reg = _pmic.readByte(BQ25120A_ADDRESS, BQ25120A_LDO_CTRL); diff --git a/libraries/Nicla_System/src/Nicla_System.h b/libraries/Nicla_System/src/Nicla_System.h index 8b7e52d33..dd73828e1 100644 --- a/libraries/Nicla_System/src/Nicla_System.h +++ b/libraries/Nicla_System/src/Nicla_System.h @@ -15,6 +15,7 @@ class nicla { static bool enable3V3LDO(); static bool enable1V8LDO(); static bool disableLDO(); + static bool enterShipMode(); static RGBled leds; static BQ25120A _pmic; diff --git a/libraries/PDM/src/nicla_vision/audio.c b/libraries/PDM/src/nicla_vision/audio.c index 3279c778f..0e8afcc2e 100644 --- a/libraries/PDM/src/nicla_vision/audio.c +++ b/libraries/PDM/src/nicla_vision/audio.c @@ -279,7 +279,7 @@ void dfsdm_init() HAL_GPIO_Init(AUDIO_DFSDM1_D1_PORT, &GPIO_InitStruct); } -static int DFSDM_Init(void) +static int DFSDM_Init(uint32_t frequency) { __HAL_DFSDM_CHANNEL_RESET_HANDLE_STATE(&hdfsdm1_channel2); hdfsdm1_channel2.Instance = DFSDM1_Channel2; @@ -292,7 +292,7 @@ static int DFSDM_Init(void) hdfsdm1_channel2.Init.SerialInterface.Type = DFSDM_CHANNEL_SPI_RISING; hdfsdm1_channel2.Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL; hdfsdm1_channel2.Init.Awd.FilterOrder = DFSDM_CHANNEL_FASTSINC_ORDER; - hdfsdm1_channel2.Init.Awd.Oversampling = 125; /* 2MHz/125 = 16kHz */ + hdfsdm1_channel2.Init.Awd.Oversampling = 2000000/frequency; /* 2MHz/125 = 16kHz */ hdfsdm1_channel2.Init.Offset = 0; hdfsdm1_channel2.Init.RightBitShift = 0; if(HAL_OK != HAL_DFSDM_ChannelInit(&hdfsdm1_channel2)) @@ -311,7 +311,7 @@ static int DFSDM_Init(void) hdfsdm1_filter0.Init.InjectedParam.ExtTrigger = DFSDM_FILTER_EXT_TRIG_TIM1_TRGO; hdfsdm1_filter0.Init.InjectedParam.ExtTriggerEdge = DFSDM_FILTER_EXT_TRIG_RISING_EDGE; hdfsdm1_filter0.Init.FilterParam.SincOrder = DFSDM_FILTER_FASTSINC_ORDER; - hdfsdm1_filter0.Init.FilterParam.Oversampling = 125; /* 2MHz/125 = 16kHz */ + hdfsdm1_filter0.Init.FilterParam.Oversampling = 2000000/frequency; /* 2MHz/125 = 16kHz */ hdfsdm1_filter0.Init.FilterParam.IntOversampling = 1; if(HAL_OK != HAL_DFSDM_FilterInit(&hdfsdm1_filter0)) { @@ -363,7 +363,7 @@ int py_audio_init(size_t channels, uint32_t frequency) dfsdm_init(); - if (!DFSDM_Init()) { + if (!DFSDM_Init(frequency)) { return 0; } diff --git a/libraries/RPC/examples/PortentaX8_EchoServer/PortentaX8_EchoServer.ino b/libraries/RPC/examples/PortentaX8_EchoServer/PortentaX8_EchoServer.ino new file mode 100644 index 000000000..25f8c2ee3 --- /dev/null +++ b/libraries/RPC/examples/PortentaX8_EchoServer/PortentaX8_EchoServer.ino @@ -0,0 +1,42 @@ +#include "RPC.h" +#include "SerialRPC.h" + +/* + * This sketch demonstrates how to interact with the Portenta X8 Serial port (over USB) + * On the board, launch both 'proxy' and 'example' binaries (from https://github.com/bcmi-labs/portentax8-m4-proxy) + * The M4 provides the 'subtract' API (which will be invoked by 'example' + * It also provides a full duplex Serial-like interface that is proxies through the serial monitor + * Last but not leas, when you write 'echo' the corresponding function in 'example' will be triggered + */ + +int subtract(int a, int b) { + return a-b; +} + +void setup() { + // put your setup code here, to run once: + Serial.begin(115200); + RPC.bind("subtract", subtract); + delay(1000); +} + +int i = 0; +void loop() { + + //RPC.print("hello"); + //RPC.send("echo", "test"); + //auto res = RPC.call("add", 5, 8).as(); + //RPC.send("echo", String(res).c_str()); + + String str = ""; + while (Serial.available()) { + str += (char)Serial.read(); + } + if (str != "") { + Serial.print(str); + } + if (str.startsWith("echo")) { + delay(100); + RPC.send("echo", "test"); + } +} diff --git a/libraries/RPC/src/RPC.cpp b/libraries/RPC/src/RPC.cpp index 8da7b923c..68b23dd84 100644 --- a/libraries/RPC/src/RPC.cpp +++ b/libraries/RPC/src/RPC.cpp @@ -11,8 +11,8 @@ void rpc::client::send_msgpack(RPCLIB_MSGPACK::sbuffer *buffer) { OPENAMP_send(&rp_endpoints[ENDPOINT_RAW], (const uint8_t*)buffer->data(), buffer->size()); } -static RingBufferN<256> intermediate_buffer; -static RingBufferN<256> intermediate_buffer_resp; +static RingBufferN intermediate_buffer; +static RingBufferN intermediate_buffer_resp; //static uint8_t intermediate_buffer_resp[256]; static rtos::Mutex rx_mtx; @@ -139,7 +139,7 @@ static void disableCM4Autoboot() { } } -int RPCClass::begin() { +int RPCClass::begin(long unsigned int np, uint16_t nd) { OpenAMP_MPU_Config(); @@ -149,13 +149,13 @@ int RPCClass::begin() { // Ideally this should execute only once disableCM4Autoboot(); - eventThread = new rtos::Thread(osPriorityHigh); + eventThread = new rtos::Thread(osPriorityHigh, 4096); eventThread->start(&eventHandler); - dispatcherThread = new rtos::Thread(osPriorityNormal); + dispatcherThread = new rtos::Thread(osPriorityNormal, 4096); dispatcherThread->start(mbed::callback(this, &RPCClass::dispatch)); - responseThread = new rtos::Thread(osPriorityNormal); + responseThread = new rtos::Thread(osPriorityNormal, 4096); responseThread->start(mbed::callback(this, &RPCClass::response)); /* Initialize OpenAmp and libmetal libraries */ @@ -178,8 +178,8 @@ int RPCClass::begin() { * The rpmsg service is initiate by the remote processor, on H7 new_service_cb * callback is received on service creation. Wait for the callback */ - OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RAW], HAL_GetTick() + 500); - OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RESPONSE], HAL_GetTick() + 500); + OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RAW], millis() + 500); + OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RESPONSE], millis() + 500); // Send first dummy message to enable the channel uint8_t message = 0x00; @@ -194,15 +194,15 @@ int RPCClass::begin() { #ifdef CORE_CM4 -int RPCClass::begin() { +int RPCClass::begin(long unsigned int np, uint16_t nd) { - eventThread = new rtos::Thread(osPriorityHigh); + eventThread = new rtos::Thread(osPriorityHigh, 4096); eventThread->start(&eventHandler); - dispatcherThread = new rtos::Thread(osPriorityNormal); + dispatcherThread = new rtos::Thread(osPriorityNormal, 4096); dispatcherThread->start(mbed::callback(this, &RPCClass::dispatch)); - responseThread = new rtos::Thread(osPriorityNormal); + responseThread = new rtos::Thread(osPriorityNormal, 4096); responseThread->start(mbed::callback(this, &RPCClass::response)); /* Initialize OpenAmp and libmetal libraries */ @@ -241,7 +241,7 @@ void RPCClass::response() { } while (true) { - osEvent v = osSignalWait(0, osWaitForever); + osSignalWait(0, osWaitForever); { RPCLIB_MSGPACK::unpacker pac; @@ -286,7 +286,7 @@ void RPCClass::dispatch() { dispatcherThreadId = osThreadGetId(); while (true) { - osEvent v = osSignalWait(0, osWaitForever); + osSignalWait(0, osWaitForever); { RPCLIB_MSGPACK::unpacker pac; diff --git a/libraries/RPC/src/RPC.h b/libraries/RPC/src/RPC.h index e21c09f86..8aa8fa7e7 100644 --- a/libraries/RPC/src/RPC.h +++ b/libraries/RPC/src/RPC.h @@ -44,7 +44,7 @@ namespace arduino { class RPCClass : public Stream, public rpc::detail::dispatcher { public: RPCClass() {}; - int begin(); + int begin(long unsigned int = 0, uint16_t = 0); void end() {}; int available(void) { return rx_buffer.available(); @@ -72,6 +72,19 @@ class RPCClass : public Stream, public rpc::detail::dispatcher { } } + template + void send(std::string const &func_name, + Args... args) { + + auto client = new rpc::client(); + client->send(func_name, args...); + delete client; + } + + void setTimeout(uint32_t milliseconds) { + _timeout = milliseconds; + } + template RPCLIB_MSGPACK::object_handle call(std::string const &func_name, Args... args) { @@ -89,8 +102,15 @@ class RPCClass : public Stream, public rpc::detail::dispatcher { } mtx.unlock(); + clients[i]->setTimeout(_timeout); + has_timed_out = false; + // thread start and client .call clients[i]->call(func_name, args...); + + if (clients[i]->timedOut()) { + has_timed_out = true; + } RPCLIB_MSGPACK::object_handle ret = std::move(clients[i]->result); mtx.lock(); @@ -102,6 +122,10 @@ class RPCClass : public Stream, public rpc::detail::dispatcher { rpc::client* clients[10]; + bool timedOut() { + return has_timed_out; + } + private: RingBufferN<256> rx_buffer; bool initialized = false; @@ -124,6 +148,9 @@ class RPCClass : public Stream, public rpc::detail::dispatcher { mbed::Callback _rx; + uint32_t _timeout = osWaitForever; + bool has_timed_out = false; + //rpc::detail::response response; RPCLIB_MSGPACK::object_handle call_result; diff --git a/libraries/RPC/src/RPC_client.h b/libraries/RPC/src/RPC_client.h index d59d73306..b1e0ed34c 100644 --- a/libraries/RPC/src/RPC_client.h +++ b/libraries/RPC/src/RPC_client.h @@ -20,7 +20,7 @@ class client { auto args_obj = std::make_tuple(args...); auto call_obj = std::make_tuple( - static_cast(client::request_type::request), (const int)callThreadId, func_name, + static_cast(client::request_type::call), (int32_t)callThreadId, func_name, args_obj); auto buffer = new RPCLIB_MSGPACK::sbuffer; @@ -28,12 +28,13 @@ class client { send_msgpack(buffer); - osSignalWait(0, osWaitForever); - - //getResult(result); - + auto e = osSignalWait(0, timeout); delete buffer; + if (e.status != osEventSignal) { + has_timed_out = true; + } + RPCLIB_MSGPACK::object_handle q = std::move(result); return q; } @@ -48,10 +49,11 @@ class client { void send(std::string const &func_name, Args... args) { LOG_DEBUG("Call function {} and forget", func_name); + callThreadId = osThreadGetId(); + auto args_obj = std::make_tuple(args...); auto call_obj = std::make_tuple( - static_cast(client::request_type::request_no_answer), func_name, - args_obj); + static_cast(client::request_type::notification), func_name, args_obj); auto buffer = new RPCLIB_MSGPACK::sbuffer; RPCLIB_MSGPACK::pack(*buffer, call_obj); @@ -60,13 +62,24 @@ class client { delete buffer; } + void setTimeout(uint32_t milliseconds) { + timeout = milliseconds; + } + + bool timedOut() { + return has_timed_out; + } + protected: osThreadId callThreadId; friend class arduino::RPCClass; RPCLIB_MSGPACK::object_handle result; + uint32_t timeout = osWaitForever; + bool has_timed_out = false; + private: - enum class request_type { raw = 1, request = 2, request_no_answer = 3, response = 4 }; + enum class request_type { call = 0, notification = 2 };; void send_msgpack(RPCLIB_MSGPACK::sbuffer *buffer); void getResult(RPCLIB_MSGPACK::object_handle& res); diff --git a/libraries/RPC/src/SerialRPC.cpp b/libraries/RPC/src/SerialRPC.cpp index d43b1b16d..1965e0cba 100644 --- a/libraries/RPC/src/SerialRPC.cpp +++ b/libraries/RPC/src/SerialRPC.cpp @@ -1,3 +1,25 @@ #include "SerialRPC.h" +#include "RPC.h" + +size_t arduino::SerialRPCClass::write(uint8_t* buf, size_t len) { + tx_buffer.clear(); + for (size_t i=0; i < len; i++) { + tx_buffer.push_back(buf[i]); + } + RPC.send("tty", tx_buffer); + return len; +} + +int arduino::SerialRPCClass::begin(long unsigned int, uint16_t) { + if (RPC.begin() == 0) { + return 0; + } + RPC.bind("tty", mbed::callback(this, &SerialRPCClass::onWrite)); + return 1; +} + +arduino::SerialRPCClass::operator bool() { + return RPC; +} arduino::SerialRPCClass SerialRPC; \ No newline at end of file diff --git a/libraries/RPC/src/SerialRPC.h b/libraries/RPC/src/SerialRPC.h index 20bdcc45f..e732f19db 100644 --- a/libraries/RPC/src/SerialRPC.h +++ b/libraries/RPC/src/SerialRPC.h @@ -1,5 +1,8 @@ -#include "RPC.h" +#ifndef __SERIAL_RPC__ +#define __SERIAL_RPC__ + #include "Arduino.h" +#include namespace arduino { @@ -29,10 +32,16 @@ class SerialRPCClass : public Stream { } } + int begin(long unsigned int = 0, uint16_t = 0); + size_t write(uint8_t* buf, size_t len); + size_t write(uint8_t c) { return write(&c, 1); } + size_t write(const uint8_t* buf, size_t len) override { + return write((uint8_t*)buf, len); + } size_t write(const char* buf, size_t len) { return write((uint8_t*)buf, len); } @@ -40,28 +49,9 @@ class SerialRPCClass : public Stream { return write((uint8_t*)buf, len); } - size_t write(uint8_t* buf, size_t len) { - tx_buffer.clear(); - for (size_t i=0; i < len; i++) { - tx_buffer.push_back(buf[i]); - } - RPC.call("on_write", tx_buffer); - return len; - } - using Print::write; - int begin() { - if (RPC.begin() == 0) { - return 0; - } - RPC.bind("on_write", mbed::callback(this, &SerialRPCClass::onWrite)); - return 1; - } - - operator bool() { - return RPC; - } + operator bool(); void attach(void (*fptr)(void)) { @@ -73,8 +63,10 @@ class SerialRPCClass : public Stream { private: mbed::Callback _rx; RingBufferN<1024> rx_buffer; - std::vector tx_buffer; + std::vector tx_buffer; }; } -extern arduino::SerialRPCClass SerialRPC; \ No newline at end of file +extern arduino::SerialRPCClass SerialRPC; + +#endif \ No newline at end of file diff --git a/libraries/STM32H747_System/examples/QSPIFormat/QSPIFormat.ino b/libraries/STM32H747_System/examples/QSPIFormat/QSPIFormat.ino index 76a329206..48d7018b9 100644 --- a/libraries/STM32H747_System/examples/QSPIFormat/QSPIFormat.ino +++ b/libraries/STM32H747_System/examples/QSPIFormat/QSPIFormat.ino @@ -47,11 +47,11 @@ void setup() { Serial.println("Available partition schemes:"); Serial.println("\nPartition scheme 1"); Serial.println("Partition 1: WiFi firmware and certificates 1MB"); - Serial.println("Partition 2: OTA and user data 14MB"); + Serial.println("Partition 2: OTA and user data 13MB"); Serial.println("\nPartition scheme 2"); Serial.println("Partition 1: WiFi firmware and certificates 1MB"); Serial.println("Partition 2: OTA 5MB"); - Serial.println("Partition 3: User data 9MB"), + Serial.println("Partition 3: User data 8MB"), Serial.println("\nDo you want to use partition scheme 1? Y/[n]"); Serial.println("If No, partition scheme 2 will be used."); bool default_scheme = waitResponse(); @@ -62,12 +62,12 @@ void setup() { if (true == waitResponse()) { mbed::MBRBlockDevice::partition(&root, 1, 0x0B, 0, 1024 * 1024); if(default_scheme) { - mbed::MBRBlockDevice::partition(&root, 3, 0x0B, 6 * 1024 * 1024, 0); + mbed::MBRBlockDevice::partition(&root, 3, 0x0B, 14 * 1024 * 1024, 14 * 1024 * 1024); mbed::MBRBlockDevice::partition(&root, 2, 0x0B, 1024 * 1024, 14 * 1024 * 1024); // use space from 15.5MB to 16 MB for another fw, memory mapped } else { - mbed::MBRBlockDevice::partition(&root, 2, 0x0B, 1024 * 1024, 5 * 1024 * 1024); - mbed::MBRBlockDevice::partition(&root, 3, 0x0B, 6 * 1024 * 1024, 9 * 1024 * 1024); + mbed::MBRBlockDevice::partition(&root, 2, 0x0B, 1024 * 1024, 6 * 1024 * 1024); + mbed::MBRBlockDevice::partition(&root, 3, 0x0B, 6 * 1024 * 1024, 14 * 1024 * 1024); // use space from 15.5MB to 16 MB for another fw, memory mapped } diff --git a/libraries/STM32H747_System/examples/STM32H747_getBootloaderInfo/STM32H747_getBootloaderInfo.ino b/libraries/STM32H747_System/examples/STM32H747_getBootloaderInfo/STM32H747_getBootloaderInfo.ino index 6fca30832..d77203ab0 100644 --- a/libraries/STM32H747_System/examples/STM32H747_getBootloaderInfo/STM32H747_getBootloaderInfo.ino +++ b/libraries/STM32H747_System/examples/STM32H747_getBootloaderInfo/STM32H747_getBootloaderInfo.ino @@ -19,7 +19,7 @@ void setup() { Serial.println("USB Speed: " + getUSBSpeed(bootloader_data[3])); Serial.println("Has Ethernet: " + String(bootloader_data[4] == 1 ? "Yes" : "No")); Serial.println("Has WiFi module: " + String(bootloader_data[5] == 1 ? "Yes" : "No")); - Serial.println("RAM size: " + String(bootloader_data[6]) + " MB"); + Serial.println("RAM size: " + getRAMSize(bootloader_data[6])); Serial.println("QSPI size: " + String(bootloader_data[7]) + " MB"); Serial.println("Has Video output: " + String(bootloader_data[8] == 1 ? "Yes" : "No")); Serial.println("Has Crypto chip: " + String(bootloader_data[9] == 1 ? "Yes" : "No")); @@ -49,6 +49,13 @@ String getClockSource(uint8_t flag) { } } +String getRAMSize(uint8_t flag) { + if (flag == 0) { + return "N/A"; + } + return (String(flag) + "MB"); +} + void loop() { delay(1000); } diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/STM32H747_updateBootloader.ino b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/STM32H747_manageBootloader.ino similarity index 96% rename from libraries/STM32H747_System/examples/STM32H747_updateBootloader/STM32H747_updateBootloader.ino rename to libraries/STM32H747_System/examples/STM32H747_manageBootloader/STM32H747_manageBootloader.ino index b5dbe9671..c1a83617c 100644 --- a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/STM32H747_updateBootloader.ino +++ b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/STM32H747_manageBootloader.ino @@ -60,7 +60,7 @@ void setup() { Serial.println("USB Speed: " + getUSBSpeed(bootloader_data[3])); Serial.println("Has Ethernet: " + String(bootloader_data[4] == 1 ? "Yes" : "No")); Serial.println("Has WiFi module: " + String(bootloader_data[5] == 1 ? "Yes" : "No")); - Serial.println("RAM size: " + String(bootloader_data[6]) + " MB"); + Serial.println("RAM size: " + getRAMSize(bootloader_data[6])); Serial.println("QSPI size: " + String(bootloader_data[7]) + " MB"); Serial.println("Has Video output: " + String(bootloader_data[8] == 1 ? "Yes" : "No")); Serial.println("Has Crypto chip: " + String(bootloader_data[9] == 1 ? "Yes" : "No")); @@ -69,8 +69,8 @@ void setup() { wifi_available = bootloader_data[5]; #if defined(ARDUINO_PORTENTA_H7_M7) - Serial.println("\nDo you want to update the default Arduino bootloader? Y/[n]"); - Serial.println("If No, MCUboot bootloader will be updated."); + Serial.println("\nDo you want to install/update the default Arduino bootloader? Y/[n]"); + Serial.println("Choosing \"No\", will install/update the MCUboot bootloader."); if(!waitResponse()) { Serial.println("\nMCUboot has been selected. Do you want to proceed? Y/[n]"); if (waitResponse()) { @@ -172,6 +172,13 @@ String getClockSource(uint8_t flag) { } } +String getRAMSize(uint8_t flag) { + if (flag == 0) { + return "N/A"; + } + return (String(flag) + "MB"); +} + void printProgress(uint32_t offset, uint32_t size, uint32_t threshold, bool reset) { static int percent_done = 0; if (reset == true) { diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/ecdsa-p256-encrypt-key.h b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/ecdsa-p256-encrypt-key.h similarity index 100% rename from libraries/STM32H747_System/examples/STM32H747_updateBootloader/ecdsa-p256-encrypt-key.h rename to libraries/STM32H747_System/examples/STM32H747_manageBootloader/ecdsa-p256-encrypt-key.h diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/ecdsa-p256-signing-key.h b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/ecdsa-p256-signing-key.h similarity index 100% rename from libraries/STM32H747_System/examples/STM32H747_updateBootloader/ecdsa-p256-signing-key.h rename to libraries/STM32H747_System/examples/STM32H747_manageBootloader/ecdsa-p256-signing-key.h diff --git a/libraries/STM32H747_System/examples/STM32H747_manageBootloader/mcuboot_bootloader.h b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/mcuboot_bootloader.h new file mode 100644 index 000000000..27d317e57 --- /dev/null +++ b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/mcuboot_bootloader.h @@ -0,0 +1,10717 @@ +const unsigned char mcuboot_bin[] = { + 0x00, 0x00, 0x08, 0x24, 0x7d, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x05, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x06, 0x00, 0x08, + 0x5f, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xfd, 0x4e, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x06, 0x00, 0x08, + 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x43, 0x55, 0x62, + 0x6f, 0x6f, 0x74, 0x20, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xb5, 0x05, 0x4c, + 0x23, 0x78, 0x33, 0xb9, 0x04, 0x4b, 0x13, 0xb1, 0x04, 0x48, 0xaf, 0xf3, + 0x00, 0x80, 0x01, 0x23, 0x23, 0x70, 0x10, 0xbd, 0x00, 0x04, 0x00, 0x24, + 0x00, 0x00, 0x00, 0x00, 0x38, 0xf2, 0x01, 0x08, 0x08, 0xb5, 0x03, 0x4b, + 0x1b, 0xb1, 0x03, 0x49, 0x03, 0x48, 0xaf, 0xf3, 0x00, 0x80, 0x08, 0xbd, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x24, 0x38, 0xf2, 0x01, 0x08, + 0x15, 0x4b, 0x00, 0x2b, 0x08, 0xbf, 0x13, 0x4b, 0x9d, 0x46, 0xa3, 0xf5, + 0x80, 0x3a, 0x00, 0x21, 0x8b, 0x46, 0x0f, 0x46, 0x13, 0x48, 0x14, 0x4a, + 0x12, 0x1a, 0x1a, 0xf0, 0x97, 0xff, 0x0f, 0x4b, 0x00, 0x2b, 0x00, 0xd0, + 0x98, 0x47, 0x0e, 0x4b, 0x00, 0x2b, 0x00, 0xd0, 0x98, 0x47, 0x00, 0x20, + 0x00, 0x21, 0x04, 0x00, 0x0d, 0x00, 0x0d, 0x48, 0x00, 0x28, 0x02, 0xd0, + 0x0c, 0x48, 0x0d, 0xf0, 0xf9, 0xff, 0x1a, 0xf0, 0x7f, 0xfd, 0x20, 0x00, + 0x29, 0x00, 0x16, 0xf0, 0x2d, 0xfc, 0x0e, 0xf0, 0x9d, 0xfc, 0x00, 0xbf, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x6f, 0x01, 0x08, 0x00, 0x04, 0x00, 0x24, 0xe0, 0xa5, 0x02, 0x24, + 0x75, 0xe5, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xf0, 0x04, 0x0f, + 0x0c, 0xbf, 0xef, 0xf3, 0x08, 0x80, 0xef, 0xf3, 0x09, 0x80, 0x81, 0x69, + 0x11, 0xf8, 0x02, 0x1c, 0x00, 0x29, 0x32, 0xd1, 0x01, 0xb5, 0x90, 0xe8, + 0x0f, 0x10, 0xe0, 0x47, 0xbd, 0xe8, 0x00, 0x50, 0x8c, 0xe8, 0x03, 0x00, + 0x24, 0x4b, 0x93, 0xe8, 0x06, 0x00, 0x91, 0x42, 0x08, 0xbf, 0x70, 0x47, + 0x1a, 0x60, 0x41, 0xb9, 0x1e, 0xf0, 0x10, 0x0f, 0x10, 0xd1, 0x20, 0x4b, + 0x18, 0x68, 0x20, 0xf0, 0x01, 0x00, 0x18, 0x60, 0x0a, 0xe0, 0x2c, 0xe9, + 0xf0, 0x0f, 0x1e, 0xf0, 0x10, 0x0f, 0x08, 0xbf, 0x2c, 0xed, 0x10, 0x8a, + 0x81, 0xf8, 0x22, 0xe0, 0xc1, 0xf8, 0x38, 0xc0, 0x90, 0x6b, 0x92, 0xf8, + 0x22, 0x10, 0x61, 0xf0, 0xff, 0x0e, 0x1e, 0xf0, 0x10, 0x0f, 0x08, 0xbf, + 0xb0, 0xec, 0x10, 0x8a, 0xb0, 0xe8, 0xf0, 0x0f, 0x80, 0xf3, 0x09, 0x88, + 0x70, 0x47, 0x11, 0x4a, 0x13, 0x68, 0x99, 0x42, 0xfa, 0xd8, 0x01, 0xb5, + 0x52, 0xf8, 0x21, 0xc0, 0x0f, 0xc8, 0xe0, 0x47, 0xbd, 0xe8, 0x00, 0x50, + 0xcc, 0xf8, 0x00, 0x00, 0x70, 0x47, 0x01, 0xb5, 0x16, 0xf0, 0xbc, 0xfe, + 0xbd, 0xe8, 0x01, 0x40, 0xef, 0xf3, 0x09, 0x8c, 0xbe, 0xe7, 0x01, 0xb5, + 0x16, 0xf0, 0xf6, 0xfe, 0xbd, 0xe8, 0x01, 0x40, 0xef, 0xf3, 0x09, 0x8c, + 0xb6, 0xe7, 0x00, 0x00, 0x30, 0x01, 0x00, 0x24, 0x34, 0xef, 0x00, 0xe0, + 0xa8, 0xec, 0x01, 0x08, 0xdf, 0xf8, 0x30, 0xd0, 0x04, 0xf0, 0xe0, 0xfc, + 0x00, 0x21, 0x03, 0xe0, 0x0a, 0x4b, 0x5b, 0x58, 0x43, 0x50, 0x04, 0x31, + 0x09, 0x48, 0x0a, 0x4b, 0x42, 0x18, 0x9a, 0x42, 0xf6, 0xd3, 0x09, 0x4a, + 0x02, 0xe0, 0x00, 0x23, 0x42, 0xf8, 0x04, 0x3b, 0x07, 0x4b, 0x9a, 0x42, + 0xf9, 0xd3, 0xff, 0xf7, 0x49, 0xff, 0x70, 0x47, 0x00, 0x00, 0x08, 0x24, + 0x44, 0xf2, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, 0xf0, 0x03, 0x00, 0x24, + 0x00, 0x04, 0x00, 0x24, 0xe0, 0xa5, 0x02, 0x24, 0xfe, 0xe7, 0x00, 0x00, + 0x26, 0x4b, 0x02, 0x22, 0x83, 0xf8, 0x3e, 0x20, 0x1b, 0x68, 0x1a, 0x6a, + 0x22, 0xf0, 0x01, 0x02, 0x1a, 0x62, 0x1a, 0x6a, 0x42, 0xf0, 0x01, 0x02, + 0x1a, 0x62, 0x21, 0x4a, 0x93, 0x42, 0x19, 0xd0, 0x02, 0xf5, 0x80, 0x62, + 0x93, 0x42, 0x15, 0xd0, 0x02, 0xf5, 0x70, 0x52, 0x93, 0x42, 0x11, 0xd0, + 0x02, 0xf5, 0x80, 0x62, 0x93, 0x42, 0x0d, 0xd0, 0x02, 0xf5, 0x80, 0x62, + 0x93, 0x42, 0x09, 0xd0, 0xb3, 0xf1, 0x80, 0x4f, 0x0e, 0xd1, 0x99, 0x68, + 0x16, 0x4a, 0x0a, 0x40, 0x06, 0x2a, 0x21, 0xd1, 0x00, 0x20, 0x70, 0x47, + 0x5a, 0x6c, 0x42, 0xf4, 0x00, 0x42, 0x5a, 0x64, 0x10, 0x4a, 0x93, 0x42, + 0xee, 0xd1, 0xf0, 0xe7, 0x10, 0x4a, 0x93, 0x42, 0xed, 0xd0, 0x02, 0xf5, + 0x80, 0x62, 0x93, 0x42, 0xe9, 0xd0, 0x02, 0xf5, 0x80, 0x62, 0x93, 0x42, + 0xe5, 0xd0, 0x02, 0xf5, 0x78, 0x42, 0x93, 0x42, 0xe1, 0xd0, 0xa2, 0xf5, + 0x6c, 0x42, 0x93, 0x42, 0xdd, 0xd0, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, + 0x1a, 0x60, 0xdd, 0xe7, 0xb2, 0xf5, 0x80, 0x3f, 0xf7, 0xd1, 0xd9, 0xe7, + 0x68, 0x05, 0x00, 0x24, 0x00, 0x00, 0x01, 0x40, 0x07, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x40, 0x08, 0xb5, 0x04, 0x4b, 0x02, 0x78, 0x53, 0xf8, + 0x22, 0x00, 0x03, 0x68, 0x5b, 0x6b, 0x98, 0x47, 0xc0, 0xb2, 0x08, 0xbd, + 0x04, 0x00, 0x00, 0x24, 0x73, 0xb5, 0x0e, 0x46, 0x00, 0x78, 0x11, 0x46, + 0x06, 0x4a, 0x00, 0x24, 0x52, 0xf8, 0x20, 0x00, 0x02, 0x68, 0xcd, 0xe9, + 0x00, 0x34, 0x23, 0x46, 0x95, 0x69, 0x32, 0x46, 0xa8, 0x47, 0x02, 0xb0, + 0x70, 0xbd, 0x00, 0xbf, 0x04, 0x00, 0x00, 0x24, 0x10, 0xb5, 0x84, 0x68, + 0x02, 0xeb, 0x01, 0x12, 0x01, 0x31, 0x20, 0x23, 0xa0, 0x3c, 0x0c, 0x32, + 0xa4, 0xeb, 0x41, 0x11, 0xff, 0xf7, 0xe0, 0xff, 0x00, 0x38, 0x18, 0xbf, + 0x01, 0x20, 0x10, 0xbd, 0x02, 0x4b, 0x6f, 0xf0, 0x02, 0x02, 0x1b, 0x68, + 0x1a, 0x61, 0x70, 0x47, 0x68, 0x05, 0x00, 0x24, 0x03, 0x4b, 0x1a, 0x68, + 0xd3, 0x68, 0x23, 0xf0, 0x02, 0x03, 0xd3, 0x60, 0x70, 0x47, 0x00, 0xbf, + 0x68, 0x05, 0x00, 0x24, 0x06, 0x4b, 0x6f, 0xf0, 0x02, 0x02, 0x1b, 0x68, + 0x1a, 0x61, 0x5a, 0x69, 0x42, 0xf0, 0x02, 0x02, 0x5a, 0x61, 0xda, 0x68, + 0x42, 0xf0, 0x02, 0x02, 0xda, 0x60, 0x70, 0x47, 0x68, 0x05, 0x00, 0x24, + 0x05, 0x4b, 0x6f, 0xf0, 0x02, 0x02, 0x1b, 0x68, 0x58, 0x63, 0x1a, 0x61, + 0xda, 0x68, 0x42, 0xf0, 0x02, 0x02, 0xda, 0x60, 0x70, 0x47, 0x00, 0xbf, + 0x68, 0x05, 0x00, 0x24, 0x01, 0x4b, 0x58, 0x6a, 0x70, 0x47, 0x00, 0xbf, + 0x00, 0x0c, 0x00, 0x40, 0x06, 0x4a, 0x11, 0x68, 0xcb, 0x68, 0x23, 0xf0, + 0x02, 0x03, 0xcb, 0x60, 0x92, 0xf8, 0x3e, 0x30, 0x01, 0x2b, 0x01, 0xd1, + 0xff, 0xf7, 0x38, 0xbf, 0x70, 0x47, 0x00, 0xbf, 0x68, 0x05, 0x00, 0x24, + 0x07, 0x4b, 0x08, 0x4a, 0x13, 0x60, 0x1a, 0x69, 0x91, 0x07, 0x08, 0xd5, + 0xda, 0x68, 0x92, 0x07, 0x05, 0xd5, 0x6f, 0xf0, 0x02, 0x02, 0x04, 0x48, + 0x1a, 0x61, 0x0d, 0xf0, 0x35, 0xbf, 0x70, 0x47, 0x00, 0x0c, 0x00, 0x40, + 0x68, 0x05, 0x00, 0x24, 0x58, 0xd9, 0x01, 0x08, 0x00, 0x48, 0x70, 0x47, + 0x08, 0xd9, 0x01, 0x08, 0x6a, 0xb1, 0x01, 0xf0, 0x03, 0x01, 0x07, 0x4b, + 0x03, 0x29, 0x59, 0x68, 0x08, 0xd0, 0x00, 0xf4, 0x70, 0x60, 0xb0, 0xf5, + 0x70, 0x6f, 0x03, 0xd1, 0x21, 0xea, 0x02, 0x02, 0x5a, 0x60, 0x70, 0x47, + 0x0a, 0x43, 0xfb, 0xe7, 0x00, 0x04, 0x00, 0x58, 0x30, 0xb5, 0x11, 0x4b, + 0x11, 0x4d, 0xd5, 0xf8, 0x94, 0x40, 0x9c, 0x42, 0xfb, 0xd1, 0x49, 0x43, + 0x01, 0x2a, 0x01, 0xeb, 0x41, 0x03, 0x4f, 0xea, 0x41, 0x04, 0x6f, 0xea, + 0x03, 0x03, 0x04, 0xd0, 0x02, 0x2a, 0x0b, 0xd0, 0xc2, 0x68, 0x13, 0x40, + 0x0b, 0xe0, 0xc2, 0x68, 0x13, 0x40, 0x19, 0x43, 0xc1, 0x60, 0x06, 0x4b, + 0x4f, 0xf4, 0x40, 0x72, 0x5a, 0x61, 0x30, 0xbd, 0xc2, 0x68, 0x13, 0x40, + 0x23, 0x43, 0xc3, 0x60, 0xf5, 0xe7, 0x00, 0xbf, 0x00, 0x03, 0x00, 0x80, + 0x00, 0x64, 0x02, 0x58, 0x2d, 0xe9, 0xf0, 0x41, 0x91, 0xf8, 0x00, 0xe0, + 0x4b, 0x78, 0x74, 0x46, 0x4e, 0x69, 0x01, 0x2b, 0x35, 0x4f, 0x4f, 0xea, + 0x44, 0x14, 0xdf, 0xf8, 0xd4, 0xc0, 0x44, 0xd1, 0x00, 0xf5, 0x10, 0x65, + 0x2b, 0x19, 0xb6, 0xb9, 0x1e, 0x69, 0x37, 0x40, 0x1f, 0x61, 0x1e, 0x69, + 0x46, 0xf4, 0x00, 0x26, 0x1e, 0x61, 0x1e, 0x69, 0x06, 0xea, 0x0c, 0x06, + 0x01, 0x2a, 0x1e, 0x61, 0x22, 0xd1, 0x0a, 0x69, 0x02, 0xb1, 0x5a, 0x61, + 0x2b, 0x59, 0x43, 0xf0, 0x04, 0x43, 0x2b, 0x51, 0x00, 0x20, 0xbd, 0xe8, + 0xf0, 0x81, 0xd3, 0xf8, 0x10, 0x80, 0x08, 0xea, 0x0c, 0x0c, 0xc3, 0xf8, + 0x10, 0xc0, 0xd3, 0xf8, 0x10, 0xc0, 0x0c, 0xea, 0x07, 0x07, 0x1f, 0x61, + 0x8f, 0x68, 0xbe, 0x42, 0x1e, 0x69, 0x46, 0xf4, 0x00, 0x26, 0x88, 0xbf, + 0x4f, 0x61, 0x1e, 0x61, 0x4e, 0x69, 0x1f, 0x69, 0xc6, 0xf3, 0x12, 0x06, + 0x3e, 0x43, 0xd9, 0xe7, 0x2b, 0x59, 0x43, 0xf0, 0x04, 0x43, 0x2b, 0x51, + 0x4b, 0x69, 0x00, 0x2b, 0xdc, 0xd0, 0x0e, 0xf0, 0x0f, 0x02, 0x01, 0x23, + 0xd0, 0xf8, 0x34, 0x18, 0x93, 0x40, 0x0b, 0x43, 0xc0, 0xf8, 0x34, 0x38, + 0xd2, 0xe7, 0x00, 0xf5, 0x30, 0x60, 0x03, 0x19, 0x1d, 0x69, 0x05, 0xea, + 0x0c, 0x05, 0x1d, 0x61, 0x1d, 0x69, 0x3d, 0x40, 0x1d, 0x61, 0x8d, 0x68, + 0x06, 0xb1, 0x4d, 0x61, 0x1e, 0x69, 0xc5, 0xf3, 0x12, 0x05, 0x01, 0x2a, + 0x46, 0xf4, 0x00, 0x26, 0x1e, 0x61, 0x1e, 0x69, 0x45, 0xea, 0x06, 0x05, + 0x1d, 0x61, 0x02, 0xd1, 0xca, 0x68, 0x02, 0xb1, 0x5a, 0x61, 0x03, 0x59, + 0x43, 0xf0, 0x04, 0x43, 0x03, 0x51, 0xb1, 0xe7, 0xff, 0xff, 0x07, 0xe0, + 0x00, 0x00, 0xf8, 0xff, 0x4e, 0x4a, 0x70, 0xb5, 0x94, 0x6a, 0x96, 0x6a, + 0xd3, 0x6a, 0x16, 0xf0, 0x7c, 0x7f, 0xc6, 0xf3, 0x05, 0x51, 0x55, 0x6c, + 0x00, 0xf0, 0x8d, 0x80, 0x07, 0xee, 0x90, 0x1a, 0xc3, 0xf3, 0x00, 0x23, + 0xc5, 0xf3, 0xcc, 0x01, 0x04, 0xf0, 0x03, 0x04, 0xf8, 0xee, 0xe7, 0x6a, + 0x4b, 0x43, 0x01, 0x2c, 0xb7, 0xee, 0x00, 0x6a, 0x07, 0xee, 0x90, 0x3a, + 0xfa, 0xee, 0xe9, 0x7a, 0x6b, 0xd0, 0x02, 0x2c, 0x5b, 0xd0, 0x00, 0x2c, + 0x67, 0xd1, 0x13, 0x68, 0x9b, 0x06, 0x46, 0xd5, 0x11, 0x68, 0x13, 0x6c, + 0xc1, 0xf3, 0xc1, 0x01, 0x3a, 0x4a, 0xc3, 0xf3, 0x08, 0x03, 0xca, 0x40, + 0x07, 0xee, 0x10, 0x2a, 0xf8, 0xee, 0xc7, 0x5a, 0x85, 0xee, 0xa6, 0x7a, + 0x06, 0xee, 0x90, 0x3a, 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, + 0x77, 0xee, 0x86, 0x7a, 0x30, 0x4a, 0x67, 0xee, 0x87, 0x7a, 0x13, 0x6c, + 0xc3, 0xf3, 0x46, 0x23, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x37, 0xee, 0x06, 0x7a, 0xc7, 0xee, 0x87, 0x6a, 0xfc, 0xee, 0xe6, 0x6a, + 0xc0, 0xed, 0x00, 0x6a, 0x13, 0x6c, 0xc3, 0xf3, 0x06, 0x43, 0x07, 0xee, + 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x7a, 0xc7, 0xee, + 0x87, 0x6a, 0xfc, 0xee, 0xe6, 0x6a, 0xc0, 0xed, 0x01, 0x6a, 0x13, 0x6c, + 0xc3, 0xf3, 0x06, 0x63, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x37, 0xee, 0x06, 0x6a, 0x87, 0xee, 0x86, 0x7a, 0xbc, 0xee, 0xc7, 0x7a, + 0x80, 0xed, 0x02, 0x7a, 0x70, 0xbd, 0x13, 0x6c, 0xdf, 0xed, 0x19, 0x5a, + 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x85, 0xee, 0xa6, 0x7a, + 0xbe, 0xe7, 0x13, 0x6c, 0xdf, 0xed, 0x12, 0x5a, 0xc3, 0xf3, 0x08, 0x03, + 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, + 0x77, 0xee, 0x86, 0x7a, 0xee, 0xe7, 0x13, 0x6c, 0xdf, 0xed, 0x0c, 0x5a, + 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0xe0, 0xe7, 0xc0, 0xe9, + 0x00, 0x11, 0x81, 0x60, 0xce, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x90, 0xd0, 0x03, 0x00, 0x24, 0x74, 0x4c, 0x20, 0xbc, 0xbe, 0x4b, + 0x00, 0x24, 0x74, 0x4a, 0x4e, 0x4a, 0x70, 0xb5, 0x94, 0x6a, 0x96, 0x6a, + 0xd3, 0x6a, 0x16, 0xf4, 0x7c, 0x3f, 0xc6, 0xf3, 0x05, 0x31, 0xd5, 0x6b, + 0x00, 0xf0, 0x8d, 0x80, 0x07, 0xee, 0x90, 0x1a, 0xc3, 0xf3, 0x00, 0x13, + 0xc5, 0xf3, 0xcc, 0x01, 0x04, 0xf0, 0x03, 0x04, 0xf8, 0xee, 0xe7, 0x6a, + 0x4b, 0x43, 0x01, 0x2c, 0xb7, 0xee, 0x00, 0x6a, 0x07, 0xee, 0x90, 0x3a, + 0xfa, 0xee, 0xe9, 0x7a, 0x6b, 0xd0, 0x02, 0x2c, 0x5b, 0xd0, 0x00, 0x2c, + 0x67, 0xd1, 0x13, 0x68, 0x9b, 0x06, 0x46, 0xd5, 0x11, 0x68, 0x93, 0x6b, + 0xc1, 0xf3, 0xc1, 0x01, 0x3a, 0x4a, 0xc3, 0xf3, 0x08, 0x03, 0xca, 0x40, + 0x07, 0xee, 0x10, 0x2a, 0xf8, 0xee, 0xc7, 0x5a, 0x85, 0xee, 0xa6, 0x7a, + 0x06, 0xee, 0x90, 0x3a, 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, + 0x77, 0xee, 0x86, 0x7a, 0x30, 0x4a, 0x67, 0xee, 0x87, 0x7a, 0x93, 0x6b, + 0xc3, 0xf3, 0x46, 0x23, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x37, 0xee, 0x06, 0x7a, 0xc7, 0xee, 0x87, 0x6a, 0xfc, 0xee, 0xe6, 0x6a, + 0xc0, 0xed, 0x00, 0x6a, 0x93, 0x6b, 0xc3, 0xf3, 0x06, 0x43, 0x07, 0xee, + 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x7a, 0xc7, 0xee, + 0x87, 0x6a, 0xfc, 0xee, 0xe6, 0x6a, 0xc0, 0xed, 0x01, 0x6a, 0x93, 0x6b, + 0xc3, 0xf3, 0x06, 0x63, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x37, 0xee, 0x06, 0x6a, 0x87, 0xee, 0x86, 0x7a, 0xbc, 0xee, 0xc7, 0x7a, + 0x80, 0xed, 0x02, 0x7a, 0x70, 0xbd, 0x93, 0x6b, 0xdf, 0xed, 0x19, 0x5a, + 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x85, 0xee, 0xa6, 0x7a, + 0xbe, 0xe7, 0x93, 0x6b, 0xdf, 0xed, 0x12, 0x5a, 0xc3, 0xf3, 0x08, 0x03, + 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, + 0x77, 0xee, 0x86, 0x7a, 0xee, 0xe7, 0x93, 0x6b, 0xdf, 0xed, 0x0c, 0x5a, + 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0xe0, 0xe7, 0xc0, 0xe9, + 0x00, 0x11, 0x81, 0x60, 0xce, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x90, 0xd0, 0x03, 0x00, 0x24, 0x74, 0x4c, 0x20, 0xbc, 0xbe, 0x4b, + 0x00, 0x24, 0x74, 0x4a, 0x09, 0x4a, 0x82, 0xb0, 0xd2, 0xf8, 0xf4, 0x10, + 0x41, 0xf0, 0x02, 0x01, 0xc2, 0xf8, 0xf4, 0x10, 0xd2, 0xf8, 0xf4, 0x20, + 0x02, 0xf0, 0x02, 0x02, 0x01, 0x92, 0x04, 0x4a, 0x01, 0x9b, 0x53, 0x68, + 0x18, 0x43, 0x50, 0x60, 0x02, 0xb0, 0x70, 0x47, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x04, 0x00, 0x58, 0x11, 0xf0, 0x01, 0x03, 0x07, 0xd0, 0x90, 0xf8, + 0x41, 0x30, 0x03, 0xf0, 0x28, 0x03, 0x28, 0x2b, 0x0c, 0xbf, 0x42, 0x23, + 0xf2, 0x23, 0x8a, 0x07, 0x09, 0xd5, 0x90, 0xf8, 0x41, 0x20, 0x02, 0xf0, + 0x28, 0x02, 0x28, 0x2a, 0x0c, 0xbf, 0x43, 0xf0, 0x44, 0x03, 0x43, 0xf0, + 0xf4, 0x03, 0x0a, 0x04, 0x01, 0x68, 0x48, 0xbf, 0x43, 0xf0, 0xb8, 0x03, + 0x0a, 0x68, 0x22, 0xea, 0x03, 0x03, 0x0b, 0x60, 0x70, 0x47, 0x90, 0xf8, + 0x41, 0x30, 0x02, 0x68, 0x03, 0xf0, 0x28, 0x03, 0x28, 0x2b, 0x10, 0xb5, + 0x1f, 0xd1, 0x93, 0x69, 0x91, 0x69, 0x93, 0x68, 0xd4, 0x68, 0xc4, 0x68, + 0x02, 0x2c, 0x12, 0xd1, 0xc3, 0xf3, 0xc2, 0x13, 0x83, 0xea, 0x11, 0x43, + 0x13, 0xf0, 0x06, 0x03, 0x0b, 0xd1, 0x81, 0x6c, 0x01, 0x31, 0x81, 0x64, + 0x81, 0x6c, 0x02, 0x29, 0x04, 0xd1, 0x08, 0x21, 0x83, 0x64, 0xd1, 0x61, + 0x80, 0xf8, 0x40, 0x30, 0x10, 0xbd, 0x4f, 0xf4, 0x00, 0x41, 0xff, 0xf7, + 0xb9, 0xff, 0x00, 0x23, 0xf6, 0xe7, 0x08, 0x23, 0xd3, 0x61, 0xfa, 0xe7, + 0x30, 0xb5, 0x03, 0x9d, 0xc1, 0xf3, 0x09, 0x01, 0x04, 0x68, 0x45, 0xea, + 0x02, 0x42, 0x60, 0x68, 0x1a, 0x43, 0x04, 0x4b, 0x43, 0xea, 0x55, 0x53, + 0x0a, 0x43, 0x20, 0xea, 0x03, 0x00, 0x02, 0x43, 0x62, 0x60, 0x30, 0xbd, + 0xff, 0x63, 0xff, 0x03, 0x83, 0x6f, 0x37, 0xb5, 0x04, 0x46, 0x00, 0x2b, + 0x62, 0xd0, 0xd0, 0xf8, 0x88, 0x30, 0x00, 0x2b, 0x5e, 0xd0, 0x90, 0xf8, + 0x70, 0x20, 0x90, 0xf8, 0x41, 0x10, 0x00, 0x2a, 0x14, 0xbf, 0x4f, 0xf0, + 0x00, 0x72, 0x00, 0x22, 0x20, 0x29, 0xc2, 0x65, 0x45, 0xd1, 0x90, 0xf8, + 0x40, 0x10, 0x01, 0x29, 0x41, 0xd0, 0x01, 0x25, 0xc1, 0x6e, 0xd0, 0xf8, + 0x84, 0x00, 0x9b, 0xb2, 0x84, 0xf8, 0x40, 0x50, 0x22, 0x25, 0x60, 0x62, + 0x84, 0xf8, 0x41, 0x50, 0x10, 0x25, 0x84, 0xf8, 0x42, 0x50, 0x00, 0x25, + 0x65, 0x64, 0x63, 0x85, 0x20, 0x4b, 0xe2, 0x62, 0x63, 0x63, 0x63, 0x8d, + 0x9b, 0xb2, 0xff, 0x2b, 0x2b, 0xd9, 0xff, 0x23, 0x23, 0x85, 0x4f, 0xf0, + 0x80, 0x73, 0x22, 0x6b, 0x12, 0x2a, 0x4f, 0xf0, 0x00, 0x02, 0x09, 0xd0, + 0xe0, 0x6a, 0xaa, 0x28, 0x23, 0xd1, 0xe2, 0x62, 0x62, 0x8d, 0x92, 0xb2, + 0xff, 0x2a, 0x00, 0xd8, 0xe3, 0x6a, 0x15, 0x4a, 0x89, 0xb2, 0x00, 0x92, + 0x20, 0x46, 0x94, 0xf8, 0x28, 0x20, 0xff, 0xf7, 0xa1, 0xff, 0x62, 0x6b, + 0x11, 0x49, 0x00, 0x23, 0x8a, 0x42, 0x84, 0xf8, 0x40, 0x30, 0x04, 0xd0, + 0x0f, 0x4b, 0x9a, 0x42, 0x14, 0xbf, 0xf4, 0x23, 0x00, 0x23, 0x21, 0x68, + 0x0a, 0x68, 0x13, 0x43, 0x0b, 0x60, 0x03, 0xb0, 0x30, 0xbd, 0x63, 0x8d, + 0x23, 0x85, 0xe3, 0x6a, 0xd3, 0xe7, 0xe2, 0x6a, 0xb2, 0xf5, 0x2a, 0x4f, + 0xd8, 0xd1, 0x4f, 0xf0, 0x00, 0x72, 0xd4, 0xe7, 0x08, 0x23, 0x84, 0xf8, + 0x60, 0x30, 0xee, 0xe7, 0x2b, 0x70, 0x00, 0x08, 0x00, 0x24, 0x00, 0x80, + 0x4d, 0x71, 0x00, 0x08, 0xa1, 0x6c, 0x00, 0x08, 0x03, 0x68, 0x9a, 0x69, + 0x91, 0x07, 0x01, 0xd5, 0x00, 0x22, 0x9a, 0x62, 0x9a, 0x69, 0xd2, 0x07, + 0x03, 0xd4, 0x9a, 0x69, 0x42, 0xf0, 0x01, 0x02, 0x9a, 0x61, 0x70, 0x47, + 0x08, 0xb5, 0x15, 0x4b, 0x20, 0x22, 0xc3, 0x62, 0x00, 0x23, 0x03, 0x63, + 0x43, 0x63, 0x80, 0xf8, 0x41, 0x20, 0x80, 0xf8, 0x42, 0x30, 0x4b, 0x07, + 0x12, 0xd5, 0x03, 0x68, 0x5a, 0x6a, 0x43, 0x6a, 0x1a, 0x70, 0x43, 0x6a, + 0x01, 0x33, 0x43, 0x62, 0x03, 0x8d, 0x4b, 0xb1, 0x01, 0x3b, 0x03, 0x85, + 0x43, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x43, 0x85, 0x43, 0x6c, 0x43, 0xf0, + 0x04, 0x03, 0x43, 0x64, 0x48, 0xf2, 0x03, 0x01, 0xff, 0xf7, 0xfa, 0xfe, + 0x10, 0x22, 0x03, 0x68, 0xda, 0x61, 0x00, 0x23, 0x80, 0xf8, 0x40, 0x30, + 0x08, 0xbd, 0x00, 0xbf, 0x00, 0x00, 0xff, 0xff, 0x08, 0xb5, 0x03, 0x68, + 0x00, 0x21, 0x1a, 0x68, 0x80, 0xf8, 0x42, 0x10, 0x51, 0x04, 0x13, 0xd5, + 0x1a, 0x68, 0x22, 0xf4, 0x80, 0x42, 0x1a, 0x60, 0x90, 0xf8, 0x41, 0x30, + 0x29, 0x2b, 0x11, 0xd1, 0x28, 0x23, 0x01, 0x21, 0x80, 0xf8, 0x41, 0x30, + 0x21, 0x23, 0x03, 0x63, 0xff, 0xf7, 0xd8, 0xfe, 0x00, 0x23, 0x80, 0xf8, + 0x40, 0x30, 0x08, 0xbd, 0x12, 0x04, 0xed, 0xd5, 0x1a, 0x68, 0x22, 0xf4, + 0x00, 0x42, 0xe8, 0xe7, 0x90, 0xf8, 0x41, 0x30, 0x2a, 0x2b, 0xf4, 0xd1, + 0x28, 0x23, 0x02, 0x21, 0x80, 0xf8, 0x41, 0x30, 0x22, 0x23, 0x03, 0x63, + 0xe8, 0xe7, 0x38, 0xb5, 0x00, 0x25, 0x80, 0xf8, 0x42, 0x50, 0x90, 0xf8, + 0x41, 0x30, 0x21, 0x2b, 0x4f, 0xf0, 0x20, 0x03, 0x80, 0xf8, 0x41, 0x30, + 0x0b, 0xd1, 0x11, 0x23, 0x45, 0x63, 0x01, 0x21, 0x03, 0x63, 0xff, 0xf7, + 0xb1, 0xfe, 0x80, 0xf8, 0x40, 0x50, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, + 0x0b, 0xbf, 0x12, 0x23, 0x02, 0x21, 0x45, 0x63, 0x03, 0x63, 0xff, 0xf7, + 0xa5, 0xfe, 0x08, 0x23, 0x80, 0xf8, 0x40, 0x50, 0x80, 0xf8, 0x60, 0x30, + 0x38, 0xbd, 0x02, 0x68, 0x43, 0x6b, 0x91, 0x69, 0x12, 0x68, 0x03, 0xb1, + 0x18, 0x47, 0x70, 0x47, 0x38, 0xb5, 0x0c, 0x4b, 0x04, 0x46, 0x0c, 0x4d, + 0x03, 0x60, 0x00, 0x23, 0xc0, 0xe9, 0x01, 0x31, 0x01, 0x23, 0x03, 0x73, + 0x28, 0x46, 0x0e, 0xf0, 0x61, 0xfb, 0x0a, 0xf0, 0x0f, 0xfa, 0x07, 0x4b, + 0x28, 0x46, 0x1a, 0x68, 0x1c, 0x60, 0x62, 0x60, 0x0e, 0xf0, 0x58, 0xfb, + 0x0a, 0xf0, 0xe6, 0xf9, 0x20, 0x46, 0x38, 0xbd, 0xbc, 0xd8, 0x01, 0x08, + 0xe0, 0x06, 0x00, 0x24, 0xdc, 0x06, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, + 0xe9, 0xb0, 0x05, 0x46, 0x93, 0x46, 0x0f, 0x46, 0x44, 0x22, 0x00, 0x21, + 0x15, 0xa8, 0x98, 0x46, 0x1a, 0xf0, 0x4a, 0xfa, 0xea, 0x6d, 0x42, 0xf2, + 0x10, 0x73, 0x59, 0x46, 0x07, 0x32, 0x15, 0xa8, 0x23, 0x93, 0xd2, 0x08, + 0x0f, 0xf0, 0x28, 0xff, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xd1, 0x81, + 0x05, 0xf1, 0x34, 0x01, 0x08, 0xf1, 0x0c, 0x00, 0x0f, 0xf0, 0x8e, 0xfe, + 0x00, 0x28, 0x40, 0xf0, 0xa3, 0x80, 0x05, 0xf1, 0x28, 0x01, 0x40, 0x46, + 0x0f, 0xf0, 0x86, 0xfe, 0xb0, 0xfa, 0x80, 0xf3, 0x5b, 0x09, 0x05, 0x93, + 0xeb, 0x6d, 0xb3, 0xf5, 0xc0, 0x7f, 0x2c, 0xbf, 0x05, 0x22, 0x04, 0x22, + 0x03, 0x92, 0x05, 0x9a, 0x12, 0xb1, 0x03, 0x9a, 0x01, 0x32, 0x03, 0x92, + 0x03, 0x9a, 0x93, 0x42, 0x98, 0xbf, 0x02, 0x22, 0x01, 0x3b, 0x02, 0xf1, + 0xff, 0x39, 0x03, 0x92, 0x01, 0x22, 0x02, 0xfa, 0x09, 0xf2, 0x06, 0x92, + 0x9d, 0xf8, 0x18, 0x20, 0x04, 0x92, 0x03, 0x9a, 0x13, 0x44, 0xb3, 0xfb, + 0xf2, 0xf3, 0x02, 0x93, 0x05, 0x9b, 0x13, 0xb1, 0x6e, 0x6f, 0x00, 0x2e, + 0x5e, 0xd1, 0x24, 0x21, 0x06, 0x98, 0x1b, 0xf0, 0xa5, 0xfc, 0x06, 0x46, + 0x00, 0x28, 0x00, 0xf0, 0x95, 0x81, 0x00, 0x24, 0x4f, 0xf0, 0x24, 0x0a, + 0x0a, 0xfb, 0x04, 0x60, 0x01, 0x34, 0x0f, 0xf0, 0x19, 0xfe, 0x04, 0x9a, + 0xe3, 0xb2, 0x9a, 0x42, 0xf6, 0xd8, 0x41, 0x46, 0x30, 0x46, 0x10, 0xf0, + 0x69, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x6e, 0xd1, 0x02, 0x9b, 0x80, 0x46, + 0x03, 0xfb, 0x09, 0xfa, 0x4f, 0xf0, 0x01, 0x09, 0xd0, 0x45, 0x53, 0xd1, + 0x0d, 0xf1, 0x98, 0x09, 0x00, 0x22, 0x01, 0x23, 0x48, 0x46, 0x03, 0xeb, + 0xc3, 0x01, 0x01, 0x32, 0x5b, 0x00, 0x06, 0xeb, 0x81, 0x01, 0xdb, 0xb2, + 0x40, 0xf8, 0x04, 0x1b, 0x04, 0x99, 0x99, 0x42, 0xf3, 0xd8, 0x26, 0xa9, + 0x28, 0x46, 0x11, 0xf0, 0x93, 0xff, 0x04, 0x46, 0x00, 0x28, 0x4e, 0xd1, + 0x4f, 0xf0, 0x01, 0x08, 0x08, 0xeb, 0xc8, 0x03, 0xc2, 0x46, 0x06, 0xeb, + 0x83, 0x03, 0x52, 0x46, 0x0a, 0xf1, 0xff, 0x3a, 0x00, 0x2a, 0x6b, 0xd1, + 0x4f, 0xea, 0x48, 0x08, 0x04, 0x9b, 0x5f, 0xfa, 0x88, 0xf8, 0x43, 0x45, + 0xee, 0xd8, 0x24, 0x23, 0x01, 0x32, 0x06, 0x99, 0x91, 0x42, 0x6d, 0xd1, + 0x4a, 0x1e, 0x28, 0x46, 0x26, 0xa9, 0x11, 0xf0, 0x73, 0xff, 0x04, 0x46, + 0x78, 0xbb, 0x05, 0x9b, 0x13, 0xb1, 0x06, 0x9b, 0x6e, 0x67, 0xab, 0x67, + 0x00, 0x24, 0x05, 0xf1, 0x4c, 0x08, 0x01, 0x23, 0x0d, 0xf1, 0x24, 0x09, + 0x21, 0x46, 0x40, 0x46, 0x0e, 0x94, 0xc9, 0xf8, 0x08, 0x40, 0xc9, 0xe9, + 0x00, 0x34, 0xcd, 0xe9, 0x0c, 0x34, 0x0f, 0xf0, 0x56, 0xff, 0x01, 0x28, + 0x53, 0xd0, 0xa4, 0xf5, 0x9f, 0x44, 0x14, 0xe0, 0x05, 0x94, 0x63, 0xe7, + 0x02, 0x9b, 0xb8, 0xfb, 0xf3, 0xf0, 0x09, 0xfa, 0x00, 0xf1, 0x24, 0x23, + 0xc9, 0xb2, 0x03, 0xfb, 0x01, 0x62, 0x02, 0x9b, 0x03, 0xfb, 0x10, 0x80, + 0xe8, 0xb1, 0x11, 0x46, 0x28, 0x46, 0x11, 0xf0, 0xaf, 0xfa, 0x04, 0x46, + 0x28, 0xb3, 0x15, 0xa8, 0x0f, 0xf0, 0xca, 0xfc, 0x44, 0x21, 0x15, 0xa8, + 0x0e, 0xf0, 0x4c, 0xff, 0x42, 0xf2, 0x10, 0x73, 0x23, 0x93, 0x6b, 0x6f, + 0xb3, 0x42, 0x02, 0xd0, 0x00, 0x2e, 0x40, 0xf0, 0x12, 0x81, 0x14, 0xb1, + 0x38, 0x46, 0x10, 0xf0, 0x70, 0xf8, 0x20, 0x46, 0x69, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x49, 0x08, 0x10, 0x46, 0x07, 0x92, 0x01, 0xeb, 0xc1, 0x01, + 0x06, 0xeb, 0x81, 0x01, 0x10, 0xf0, 0xd6, 0xf9, 0x07, 0x9a, 0x04, 0x46, + 0x00, 0x28, 0xd4, 0xd0, 0xd9, 0xe7, 0x08, 0xf1, 0x01, 0x08, 0x6d, 0xe7, + 0x24, 0x22, 0x28, 0x46, 0x07, 0x93, 0x02, 0xfb, 0x0a, 0xf1, 0x72, 0x18, + 0x19, 0x44, 0x11, 0xf0, 0xc1, 0xfb, 0x07, 0x9b, 0x04, 0x46, 0x00, 0x28, + 0x81, 0xd0, 0xc8, 0xe7, 0x03, 0xfb, 0x02, 0x61, 0x49, 0xf8, 0x04, 0x1b, + 0x88, 0xe7, 0x21, 0x46, 0x58, 0x46, 0x0f, 0xf0, 0xfc, 0xfe, 0xb0, 0xfa, + 0x80, 0xfa, 0x59, 0x46, 0x48, 0x46, 0x10, 0xf0, 0x85, 0xf9, 0x04, 0x46, + 0x4f, 0xea, 0x5a, 0x1a, 0x00, 0xbb, 0x5a, 0x46, 0x41, 0x46, 0x0c, 0xa8, + 0x10, 0xf0, 0x39, 0xfe, 0x04, 0x46, 0xc8, 0xb9, 0x52, 0x46, 0x0c, 0xa9, + 0x48, 0x46, 0x0f, 0xf0, 0xd7, 0xff, 0x04, 0x46, 0x90, 0xb9, 0x02, 0x9b, + 0x0d, 0xf1, 0x98, 0x08, 0x01, 0x46, 0x26, 0xa8, 0x5a, 0x1c, 0xa3, 0x46, + 0x1a, 0xf0, 0x1a, 0xf9, 0x43, 0x46, 0x02, 0x9a, 0x5a, 0x45, 0x4f, 0xd1, + 0x4f, 0xf0, 0x00, 0x0e, 0x4f, 0xf0, 0x01, 0x0c, 0xe3, 0x45, 0x65, 0xd2, + 0x0c, 0xa8, 0x0f, 0xf0, 0xf5, 0xff, 0x09, 0xa8, 0x0f, 0xf0, 0xf2, 0xff, + 0x00, 0x2c, 0x8c, 0xd1, 0x0c, 0xa8, 0x0d, 0xf1, 0x98, 0x08, 0x0f, 0xf0, + 0x27, 0xfd, 0x02, 0x9b, 0x32, 0x46, 0x39, 0x46, 0x18, 0xf8, 0x03, 0x30, + 0x28, 0x46, 0x00, 0x93, 0x04, 0x9b, 0x10, 0xf0, 0x4d, 0xfe, 0x04, 0x46, + 0x88, 0xb9, 0x01, 0x21, 0x07, 0xf1, 0x18, 0x00, 0x0f, 0xf0, 0x04, 0xff, + 0x04, 0x46, 0x50, 0xb9, 0x15, 0xab, 0x4d, 0x4a, 0x39, 0x46, 0x28, 0x46, + 0x11, 0xf0, 0xb2, 0xf9, 0x04, 0x46, 0x10, 0xb9, 0x02, 0x9b, 0x00, 0x2b, + 0x5b, 0xd1, 0x0c, 0xa8, 0x0f, 0xf0, 0xdd, 0xff, 0x00, 0x2c, 0x7f, 0xf4, + 0x64, 0xaf, 0x52, 0x46, 0x39, 0x46, 0x28, 0x46, 0x10, 0xf0, 0x0a, 0xfe, + 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x5b, 0xaf, 0x15, 0xab, 0x40, 0x4a, + 0x39, 0x46, 0x28, 0x46, 0x11, 0xf0, 0x98, 0xf9, 0x04, 0x46, 0x00, 0x28, + 0x7f, 0xf4, 0x51, 0xaf, 0x39, 0x46, 0x28, 0x46, 0x11, 0xf0, 0x40, 0xfe, + 0x04, 0x46, 0x4a, 0xe7, 0x59, 0x46, 0x00, 0x22, 0x48, 0x46, 0x05, 0x91, + 0xcd, 0xe9, 0x06, 0x32, 0x0f, 0xf0, 0x7f, 0xfe, 0x07, 0x9a, 0x06, 0x9b, + 0x90, 0x40, 0x02, 0x99, 0x93, 0xf8, 0x00, 0xc0, 0x01, 0x32, 0x4c, 0xea, + 0x00, 0x00, 0x18, 0x70, 0x08, 0x46, 0x05, 0x99, 0x01, 0x44, 0x03, 0x98, + 0x90, 0x42, 0xe9, 0xd8, 0x0b, 0xf1, 0x01, 0x0b, 0x01, 0x33, 0x90, 0xe7, + 0x98, 0xf8, 0x01, 0x00, 0x0c, 0xf1, 0x01, 0x0c, 0x98, 0xf8, 0x00, 0x20, + 0x80, 0xea, 0x0e, 0x03, 0x00, 0xea, 0x0e, 0x00, 0xd9, 0x43, 0x5b, 0xb2, + 0x01, 0xf0, 0x01, 0x01, 0x12, 0xfb, 0x01, 0xf2, 0x52, 0xb2, 0x03, 0xea, + 0x02, 0x09, 0x53, 0x40, 0x08, 0xf8, 0x01, 0x3f, 0x49, 0xea, 0x00, 0x0e, + 0x18, 0xf8, 0x01, 0x3c, 0x5f, 0xfa, 0x8e, 0xfe, 0x43, 0xea, 0xc1, 0x11, + 0x08, 0xf8, 0x01, 0x1c, 0x76, 0xe7, 0x02, 0x9b, 0x3a, 0x46, 0x39, 0x46, + 0x28, 0x46, 0x01, 0x3b, 0x02, 0x93, 0x11, 0xf0, 0xb3, 0xf9, 0x90, 0xb9, + 0x02, 0x9b, 0x32, 0x46, 0x0c, 0xa9, 0x28, 0x46, 0x13, 0xf8, 0x08, 0x30, + 0x00, 0x93, 0x04, 0x9b, 0x10, 0xf0, 0xca, 0xfd, 0x38, 0xb9, 0x0c, 0xab, + 0x3a, 0x46, 0x39, 0x46, 0x28, 0x46, 0x11, 0xf0, 0xe7, 0xfa, 0x00, 0x28, + 0x84, 0xd0, 0x04, 0x46, 0x85, 0xe7, 0x00, 0x26, 0x04, 0x96, 0xec, 0xe6, + 0x0a, 0x4c, 0xea, 0xe6, 0x08, 0xfb, 0x05, 0x60, 0x01, 0x35, 0x0f, 0xf0, + 0x6a, 0xff, 0xeb, 0xb2, 0x04, 0x9a, 0x9a, 0x42, 0xf6, 0xd8, 0x30, 0x46, + 0x19, 0xf0, 0xf4, 0xff, 0xed, 0xe6, 0x00, 0x25, 0x4f, 0xf0, 0x24, 0x08, + 0xf3, 0xe7, 0x00, 0xbf, 0x41, 0x0c, 0x01, 0x08, 0x80, 0xb2, 0xff, 0xff, + 0x2d, 0xe9, 0xf0, 0x4f, 0x2d, 0xed, 0x02, 0x8b, 0xbb, 0xb0, 0x04, 0x46, + 0x0e, 0x46, 0x91, 0x46, 0x08, 0xee, 0x10, 0x3a, 0x0f, 0xf0, 0x92, 0xfc, + 0x02, 0x28, 0x40, 0xf0, 0x9d, 0x81, 0x44, 0x22, 0x00, 0x21, 0x29, 0xa8, + 0x20, 0xad, 0x1a, 0xf0, 0x3b, 0xf8, 0x42, 0xf2, 0x10, 0x73, 0x28, 0x46, + 0x01, 0x27, 0x37, 0x93, 0x0f, 0xf0, 0x58, 0xfc, 0xe2, 0x6d, 0x00, 0x23, + 0x49, 0x46, 0x29, 0xa8, 0x07, 0x32, 0x04, 0x93, 0xd2, 0x08, 0xcd, 0xe9, + 0x02, 0x73, 0x0f, 0xf0, 0x11, 0xfd, 0x03, 0x46, 0x00, 0x28, 0x62, 0xd1, + 0x18, 0xee, 0x10, 0x1a, 0x02, 0xa8, 0x10, 0xf0, 0x71, 0xf8, 0x03, 0x46, + 0x00, 0x28, 0x5a, 0xd1, 0x18, 0xee, 0x10, 0x1a, 0x28, 0x46, 0x10, 0xf0, + 0x95, 0xf8, 0x03, 0x46, 0x00, 0x28, 0x52, 0xd1, 0x39, 0x46, 0x30, 0x46, + 0x0f, 0xf0, 0x24, 0xfe, 0x03, 0x46, 0x00, 0x28, 0x4b, 0xd1, 0x06, 0xf1, + 0x18, 0x07, 0x01, 0x46, 0x38, 0x46, 0x0f, 0xf0, 0x1b, 0xfe, 0x03, 0x46, + 0x00, 0x28, 0x42, 0xd1, 0x04, 0xf1, 0x04, 0x0b, 0x06, 0xf1, 0x0c, 0x00, + 0x0f, 0xf0, 0xe8, 0xfe, 0x59, 0x46, 0x28, 0x46, 0x0f, 0xf0, 0x54, 0xfc, + 0x00, 0x28, 0x2e, 0xda, 0x29, 0xab, 0xb3, 0x4a, 0x29, 0x46, 0x20, 0x46, + 0x11, 0xf0, 0x72, 0xf8, 0x03, 0x46, 0x70, 0xbb, 0x48, 0x46, 0x4f, 0xf0, + 0x01, 0x08, 0x0f, 0xf0, 0x09, 0xfd, 0x43, 0x1e, 0x00, 0x93, 0x00, 0x9b, + 0x01, 0x33, 0x3f, 0xd1, 0x29, 0xab, 0xaa, 0x4a, 0x31, 0x46, 0x20, 0x46, + 0x11, 0xf0, 0x60, 0xf8, 0x03, 0x46, 0xe0, 0xb9, 0x5a, 0x46, 0x39, 0x46, + 0x38, 0x46, 0x11, 0xf0, 0x7f, 0xfb, 0x03, 0x46, 0xa8, 0xb9, 0x3b, 0x46, + 0x32, 0x46, 0x31, 0x46, 0x20, 0x46, 0x10, 0xf0, 0x55, 0xff, 0x03, 0x46, + 0x68, 0xb9, 0x01, 0x21, 0x38, 0x46, 0x0f, 0xf0, 0xdf, 0xfd, 0x03, 0x46, + 0x07, 0xe0, 0x5a, 0x46, 0x29, 0x46, 0x28, 0x46, 0x10, 0xf0, 0x9f, 0xf9, + 0x03, 0x46, 0x00, 0x28, 0xc2, 0xd0, 0x29, 0xa8, 0x00, 0x93, 0x0f, 0xf0, + 0x11, 0xfb, 0x44, 0x21, 0x29, 0xa8, 0x0e, 0xf0, 0x93, 0xfd, 0x42, 0xf2, + 0x10, 0x72, 0x20, 0xa8, 0x37, 0x92, 0x0f, 0xf0, 0xb0, 0xfe, 0x02, 0xa8, + 0x0f, 0xf0, 0x9a, 0xfe, 0x00, 0x9b, 0x00, 0x2b, 0x00, 0xf0, 0x0b, 0x81, + 0x18, 0x46, 0x3b, 0xb0, 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, + 0x00, 0x99, 0x48, 0x46, 0x0f, 0xf0, 0x65, 0xfd, 0x29, 0x46, 0x5f, 0xfa, + 0x80, 0xfa, 0x30, 0x46, 0x52, 0x46, 0x0f, 0xf0, 0x11, 0xfe, 0x03, 0x46, + 0x00, 0x28, 0xd6, 0xd1, 0x52, 0x46, 0x26, 0xa9, 0x38, 0x46, 0x0f, 0xf0, + 0x09, 0xfe, 0x03, 0x46, 0x00, 0x28, 0xce, 0xd1, 0x3b, 0x46, 0x1f, 0x90, + 0x32, 0x46, 0x05, 0xa9, 0xcd, 0xe9, 0x05, 0x80, 0xcd, 0xe9, 0x07, 0x08, + 0xcd, 0xe9, 0x09, 0x00, 0xcd, 0xe9, 0x0b, 0x80, 0xcd, 0xe9, 0x0d, 0x08, + 0xcd, 0xe9, 0x0f, 0x00, 0xcd, 0xe9, 0x11, 0x80, 0xcd, 0xe9, 0x13, 0x08, + 0xcd, 0xe9, 0x15, 0x00, 0xcd, 0xe9, 0x17, 0x80, 0xcd, 0xe9, 0x19, 0x08, + 0xcd, 0xe9, 0x1b, 0x00, 0xcd, 0xe9, 0x1d, 0x80, 0x20, 0x46, 0x10, 0xf0, + 0x1b, 0xfd, 0x03, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x93, 0x80, 0x05, 0xab, + 0x08, 0xa9, 0x20, 0x46, 0x1a, 0x46, 0x10, 0xf0, 0xe9, 0xfe, 0x03, 0x46, + 0x00, 0x28, 0x40, 0xf0, 0x89, 0x80, 0x3b, 0x46, 0x32, 0x46, 0x0b, 0xa9, + 0x20, 0x46, 0x10, 0xf0, 0x17, 0xfd, 0x03, 0x46, 0x00, 0x28, 0x7f, 0xd1, + 0x0b, 0xab, 0x0e, 0xa9, 0x20, 0x46, 0x1a, 0x46, 0x10, 0xf0, 0xd6, 0xfe, + 0x03, 0x46, 0x00, 0x28, 0x76, 0xd1, 0x0e, 0xab, 0x08, 0xaa, 0x11, 0xa9, + 0x20, 0x46, 0x10, 0xf0, 0x05, 0xfd, 0x03, 0x46, 0x00, 0x28, 0x6d, 0xd1, + 0x26, 0xab, 0x2a, 0x46, 0x14, 0xa9, 0x20, 0x46, 0x10, 0xf0, 0xec, 0xfc, + 0x03, 0x46, 0x00, 0x28, 0x64, 0xd1, 0x26, 0xab, 0x2a, 0x46, 0x17, 0xa9, + 0x20, 0x46, 0x10, 0xf0, 0xf3, 0xfc, 0x03, 0x46, 0x00, 0x28, 0x5b, 0xd1, + 0x05, 0xab, 0x17, 0xaa, 0x1a, 0xa9, 0x20, 0x46, 0x10, 0xf0, 0xb2, 0xfe, + 0x03, 0x46, 0x00, 0x28, 0x52, 0xd1, 0x0b, 0xab, 0x14, 0xaa, 0x1d, 0xa9, + 0x20, 0x46, 0x10, 0xf0, 0xa9, 0xfe, 0x03, 0x46, 0x00, 0x28, 0x49, 0xd1, + 0x1d, 0xab, 0x1a, 0xaa, 0x29, 0x46, 0x20, 0x46, 0x10, 0xf0, 0xc8, 0xfc, + 0x03, 0x46, 0x00, 0x28, 0x40, 0xd1, 0x2b, 0x46, 0x2a, 0x46, 0x29, 0x46, + 0x20, 0x46, 0x10, 0xf0, 0x97, 0xfe, 0x03, 0x46, 0x00, 0x28, 0x37, 0xd1, + 0x1d, 0xab, 0x1a, 0xaa, 0x26, 0xa9, 0x20, 0x46, 0x10, 0xf0, 0xc6, 0xfc, + 0x03, 0x46, 0x78, 0xbb, 0x26, 0xab, 0x20, 0x46, 0x1a, 0x46, 0x19, 0x46, + 0x10, 0xf0, 0x86, 0xfe, 0x03, 0x46, 0x38, 0xbb, 0x26, 0xab, 0x02, 0xaa, + 0x20, 0x46, 0x19, 0x46, 0x10, 0xf0, 0x7e, 0xfe, 0x03, 0x46, 0xf8, 0xb9, + 0x0e, 0xab, 0x08, 0xaa, 0x31, 0x46, 0x20, 0x46, 0x10, 0xf0, 0x76, 0xfe, + 0x03, 0x46, 0xb8, 0xb9, 0x11, 0xab, 0x04, 0xf1, 0x10, 0x02, 0x39, 0x46, + 0x20, 0x46, 0x10, 0xf0, 0x6d, 0xfe, 0x03, 0x46, 0x70, 0xb9, 0x3b, 0x46, + 0x0e, 0xaa, 0x39, 0x46, 0x20, 0x46, 0x10, 0xf0, 0x8d, 0xfc, 0x03, 0x46, + 0x30, 0xb9, 0x3b, 0x46, 0x11, 0xaa, 0x39, 0x46, 0x20, 0x46, 0x10, 0xf0, + 0x5d, 0xfe, 0x03, 0x46, 0x05, 0xa8, 0x01, 0x93, 0x0f, 0xf0, 0xbe, 0xfd, + 0x08, 0xa8, 0x0f, 0xf0, 0xbb, 0xfd, 0x0b, 0xa8, 0x0f, 0xf0, 0xb8, 0xfd, + 0x0e, 0xa8, 0x0f, 0xf0, 0xb5, 0xfd, 0x11, 0xa8, 0x0f, 0xf0, 0xb2, 0xfd, + 0x14, 0xa8, 0x0f, 0xf0, 0xaf, 0xfd, 0x17, 0xa8, 0x0f, 0xf0, 0xac, 0xfd, + 0x1a, 0xa8, 0x0f, 0xf0, 0xa9, 0xfd, 0x1d, 0xa8, 0x0f, 0xf0, 0xa6, 0xfd, + 0x01, 0x9b, 0x00, 0x2b, 0x7f, 0xf4, 0xf7, 0xae, 0x52, 0x46, 0x29, 0x46, + 0x30, 0x46, 0x0f, 0xf0, 0x29, 0xfd, 0x03, 0x46, 0x00, 0x28, 0x7f, 0xf4, + 0xee, 0xae, 0x52, 0x46, 0x26, 0xa9, 0x38, 0x46, 0x0f, 0xf0, 0x20, 0xfd, + 0x00, 0x9b, 0x01, 0x3b, 0x00, 0x93, 0x03, 0x46, 0x00, 0x28, 0x3f, 0xf4, + 0xba, 0xae, 0xe0, 0xe6, 0x09, 0x4b, 0x20, 0x46, 0x00, 0x93, 0x0f, 0xf0, + 0xed, 0xfa, 0x01, 0x28, 0x00, 0x9b, 0x7f, 0xf4, 0xed, 0xae, 0x18, 0xee, + 0x10, 0x3a, 0x4a, 0x46, 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x3e, 0xfc, + 0x03, 0x46, 0xe3, 0xe6, 0x41, 0x0c, 0x01, 0x08, 0x80, 0xb0, 0xff, 0xff, + 0xf7, 0xb5, 0x05, 0x46, 0x0c, 0x46, 0x10, 0x46, 0x01, 0x21, 0x16, 0x46, + 0x1f, 0x46, 0x0f, 0xf0, 0x20, 0xfb, 0x30, 0xb9, 0x39, 0x46, 0x20, 0x46, + 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, 0x0f, 0xf0, 0xf9, 0xbe, 0x4f, 0xf0, + 0xff, 0x31, 0x30, 0x46, 0x0f, 0xf0, 0x13, 0xfb, 0xa0, 0xb9, 0x39, 0x46, + 0x20, 0x46, 0x0f, 0xf0, 0xef, 0xfe, 0x10, 0xbb, 0x04, 0xf1, 0x0c, 0x02, + 0x01, 0x46, 0x10, 0x46, 0x01, 0x92, 0x0f, 0xf0, 0x06, 0xfb, 0x01, 0x9a, + 0xc8, 0xb1, 0x29, 0x1d, 0x10, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, + 0x10, 0xf0, 0x6f, 0xbb, 0x31, 0x46, 0x28, 0x46, 0x0f, 0xf0, 0x30, 0xfc, + 0x68, 0xb9, 0x39, 0x46, 0x28, 0x46, 0x10, 0xf0, 0x27, 0xfe, 0x40, 0xb9, + 0x3b, 0x46, 0x32, 0x46, 0x21, 0x46, 0x28, 0x46, 0x03, 0xb0, 0xbd, 0xe8, + 0xf0, 0x40, 0xff, 0xf7, 0xff, 0xbd, 0x03, 0xb0, 0xf0, 0xbd, 0x30, 0xb5, + 0x8f, 0xb0, 0x0c, 0x46, 0x19, 0x46, 0x13, 0x9d, 0xfb, 0xb1, 0x00, 0x23, + 0xcd, 0xe9, 0x06, 0x33, 0x08, 0x93, 0x13, 0x0f, 0x8d, 0xf8, 0x24, 0x30, + 0x13, 0x0d, 0x8d, 0xf8, 0x25, 0x30, 0x13, 0x0b, 0x12, 0x09, 0x8d, 0xf8, + 0x26, 0x30, 0x8d, 0xf8, 0x27, 0x20, 0x4f, 0xf4, 0x8e, 0x72, 0x23, 0x78, + 0x02, 0xfb, 0x03, 0x00, 0x12, 0x9b, 0x05, 0xaa, 0x05, 0x93, 0x0a, 0xab, + 0x04, 0x30, 0x00, 0x93, 0x06, 0xab, 0xcd, 0xe9, 0x01, 0x55, 0x11, 0xf0, + 0x33, 0xfd, 0x0f, 0xb0, 0x30, 0xbd, 0x37, 0xb5, 0x02, 0x23, 0x15, 0x46, + 0x01, 0xaa, 0x04, 0x46, 0x11, 0xf0, 0xb8, 0xfc, 0x18, 0xb9, 0x01, 0x9b, + 0x1b, 0xb9, 0x6f, 0xf0, 0x63, 0x00, 0x03, 0xb0, 0x30, 0xbd, 0x23, 0x68, + 0x93, 0xf9, 0x00, 0x30, 0x00, 0x2b, 0xf6, 0xdb, 0x01, 0x9b, 0x3b, 0xb1, + 0x22, 0x68, 0x11, 0x78, 0xa1, 0xb1, 0x04, 0x2b, 0xef, 0xd8, 0x01, 0xd1, + 0x0b, 0x06, 0xec, 0xd4, 0x00, 0x23, 0x2b, 0x60, 0x01, 0x9b, 0x5a, 0x1e, + 0x01, 0x92, 0x00, 0x2b, 0xe7, 0xd0, 0x23, 0x68, 0x29, 0x68, 0x13, 0xf8, + 0x01, 0x2b, 0x42, 0xea, 0x01, 0x22, 0x2a, 0x60, 0x23, 0x60, 0xf1, 0xe7, + 0x01, 0x32, 0x01, 0x3b, 0x22, 0x60, 0x01, 0x93, 0xe0, 0xe7, 0x00, 0x00, + 0xf8, 0xb5, 0x0a, 0x23, 0x68, 0x4e, 0x05, 0x46, 0x0c, 0x46, 0x03, 0x60, + 0x33, 0x68, 0x1b, 0xb9, 0x11, 0xf0, 0xf4, 0xfe, 0x01, 0x23, 0x33, 0x60, + 0x05, 0xf1, 0x08, 0x03, 0x2a, 0x46, 0x21, 0x46, 0x04, 0xf1, 0x10, 0x00, + 0x42, 0xf8, 0x04, 0x3f, 0x8b, 0x78, 0x04, 0x31, 0x11, 0xf8, 0x03, 0x4c, + 0x1b, 0x04, 0x43, 0xea, 0x04, 0x23, 0x11, 0xf8, 0x04, 0x4c, 0x23, 0x43, + 0x11, 0xf8, 0x01, 0x4c, 0x88, 0x42, 0x43, 0xea, 0x04, 0x63, 0x42, 0xf8, + 0x04, 0x3f, 0xed, 0xd1, 0x2b, 0x68, 0x0c, 0x2b, 0x2e, 0xd0, 0x0e, 0x2b, + 0x5d, 0xd0, 0x0a, 0x2b, 0x28, 0xd1, 0x28, 0x46, 0x53, 0x49, 0x54, 0x4d, + 0x00, 0xf1, 0xa0, 0x06, 0x42, 0x69, 0x10, 0x30, 0x55, 0xf8, 0x04, 0x4b, + 0x50, 0xf8, 0x08, 0x7c, 0xc2, 0xf3, 0x07, 0x23, 0x7c, 0x40, 0xcb, 0x5c, + 0x63, 0x40, 0x14, 0x0e, 0x0c, 0x5d, 0x83, 0xea, 0x04, 0x43, 0xd4, 0xb2, + 0x0c, 0x5d, 0x83, 0xea, 0x04, 0x63, 0xc2, 0xf3, 0x07, 0x44, 0x0c, 0x5d, + 0x83, 0xea, 0x04, 0x23, 0x50, 0xf8, 0x04, 0x4c, 0x83, 0x60, 0x63, 0x40, + 0x04, 0x68, 0xc3, 0x60, 0x63, 0x40, 0x03, 0x61, 0x53, 0x40, 0x43, 0x61, + 0x86, 0x42, 0xdb, 0xd1, 0x00, 0x20, 0xf8, 0xbd, 0x28, 0x46, 0x3f, 0x4c, + 0xc0, 0x35, 0x3d, 0x49, 0xc2, 0x69, 0x18, 0x30, 0x54, 0xf8, 0x04, 0x6b, + 0x50, 0xf8, 0x10, 0x7c, 0xc2, 0xf3, 0x07, 0x23, 0x7e, 0x40, 0xcb, 0x5c, + 0x73, 0x40, 0x16, 0x0e, 0x8e, 0x5d, 0x83, 0xea, 0x06, 0x43, 0xd6, 0xb2, + 0x8e, 0x5d, 0x83, 0xea, 0x06, 0x63, 0xc2, 0xf3, 0x07, 0x46, 0x8e, 0x5d, + 0x83, 0xea, 0x06, 0x23, 0x50, 0xf8, 0x0c, 0x6c, 0x83, 0x60, 0x73, 0x40, + 0x50, 0xf8, 0x08, 0x6c, 0xc3, 0x60, 0x73, 0x40, 0x50, 0xf8, 0x04, 0x6c, + 0x03, 0x61, 0x73, 0x40, 0x06, 0x68, 0x43, 0x61, 0x73, 0x40, 0x83, 0x61, + 0x53, 0x40, 0xc3, 0x61, 0x85, 0x42, 0xd3, 0xd1, 0xcc, 0xe7, 0x28, 0x46, + 0x25, 0x49, 0x26, 0x4d, 0x00, 0xf1, 0xe0, 0x06, 0x44, 0x6a, 0x20, 0x30, + 0x55, 0xf8, 0x04, 0x2b, 0x50, 0xf8, 0x18, 0x7c, 0xc4, 0xf3, 0x07, 0x23, + 0x7a, 0x40, 0xcb, 0x5c, 0x50, 0xf8, 0x08, 0x7c, 0x53, 0x40, 0x22, 0x0e, + 0x8a, 0x5c, 0x83, 0xea, 0x02, 0x43, 0xe2, 0xb2, 0x8a, 0x5c, 0x83, 0xea, + 0x02, 0x63, 0xc4, 0xf3, 0x07, 0x42, 0x8a, 0x5c, 0x83, 0xea, 0x02, 0x23, + 0x50, 0xf8, 0x14, 0x2c, 0x83, 0x60, 0x53, 0x40, 0x50, 0xf8, 0x10, 0x2c, + 0xc3, 0x60, 0x53, 0x40, 0x50, 0xf8, 0x0c, 0x2c, 0x03, 0x61, 0x53, 0x40, + 0xda, 0xb2, 0x43, 0x61, 0x8a, 0x5c, 0x7a, 0x40, 0x1f, 0x0e, 0xcf, 0x5d, + 0x82, 0xea, 0x07, 0x62, 0xc3, 0xf3, 0x07, 0x27, 0xc3, 0xf3, 0x07, 0x43, + 0xcf, 0x5d, 0xcb, 0x5c, 0x82, 0xea, 0x07, 0x22, 0x82, 0xea, 0x03, 0x43, + 0x50, 0xf8, 0x04, 0x2c, 0x83, 0x61, 0x53, 0x40, 0x02, 0x68, 0xc3, 0x61, + 0x53, 0x40, 0x03, 0x62, 0x63, 0x40, 0x43, 0x62, 0x86, 0x42, 0xbb, 0xd1, + 0x82, 0xe7, 0x00, 0xbf, 0x08, 0x07, 0x00, 0x24, 0x1c, 0x04, 0x00, 0x24, + 0x1c, 0x05, 0x00, 0x24, 0xf8, 0xb5, 0x03, 0x78, 0x90, 0xf8, 0x01, 0xc0, + 0x01, 0x2b, 0x05, 0x7f, 0x02, 0x79, 0x07, 0x7b, 0x86, 0x68, 0x44, 0x79, + 0x2e, 0xd0, 0x02, 0x2b, 0x2f, 0xd0, 0x00, 0x2b, 0x30, 0xd1, 0x4f, 0xf4, + 0x80, 0x73, 0x8b, 0x61, 0x00, 0x23, 0xc1, 0xf8, 0x00, 0xc0, 0x4d, 0x61, + 0x4b, 0x63, 0xc1, 0xe9, 0x0b, 0x33, 0x3f, 0xb3, 0xcb, 0x61, 0xcb, 0x60, + 0x03, 0x7c, 0x01, 0x2b, 0x45, 0xd0, 0x02, 0x2b, 0x48, 0xd0, 0x00, 0x2b, + 0x4b, 0xd1, 0x4f, 0xf4, 0x80, 0x43, 0x0b, 0x62, 0x01, 0x23, 0x02, 0x7e, + 0x00, 0x2a, 0x47, 0xd0, 0x00, 0x23, 0x0b, 0x62, 0x0b, 0x61, 0x43, 0x7f, + 0x01, 0x2b, 0x6a, 0xd0, 0x02, 0x2b, 0x6b, 0xd0, 0x00, 0x2b, 0x6c, 0xd1, + 0x4f, 0xf0, 0x80, 0x73, 0x00, 0x20, 0x4b, 0x62, 0x88, 0x62, 0xf8, 0xbd, + 0x4f, 0xf4, 0x00, 0x73, 0xd3, 0xe7, 0x4f, 0xf4, 0x40, 0x73, 0xd0, 0xe7, + 0x00, 0x23, 0xce, 0xe7, 0x01, 0x2a, 0x4e, 0x60, 0x0b, 0xd0, 0x02, 0x2a, + 0x0c, 0xd0, 0x72, 0xb9, 0x4f, 0xf4, 0x80, 0x63, 0xcb, 0x61, 0x03, 0x2c, + 0x09, 0xd8, 0xdf, 0xe8, 0x04, 0xf0, 0x0b, 0x0d, 0x10, 0x13, 0x4f, 0xf4, + 0x00, 0x63, 0xf5, 0xe7, 0x4f, 0xf4, 0x40, 0x63, 0xf2, 0xe7, 0x27, 0x48, + 0x0d, 0xf0, 0x04, 0xfa, 0x00, 0x23, 0xbe, 0xe7, 0x4f, 0xf4, 0x80, 0x53, + 0xbb, 0xe7, 0x4f, 0xf4, 0x00, 0x53, 0xb8, 0xe7, 0x4f, 0xf4, 0x40, 0x53, + 0xb5, 0xe7, 0x4f, 0xf4, 0x00, 0x43, 0x0b, 0x62, 0x02, 0x23, 0xbc, 0xe7, + 0x4f, 0xf4, 0x40, 0x43, 0x0b, 0x62, 0x04, 0x23, 0xb7, 0xe7, 0x00, 0x23, + 0x0b, 0x62, 0xb4, 0xe7, 0x7b, 0xb3, 0x42, 0x7c, 0xb2, 0xfb, 0xf3, 0xf4, + 0x03, 0xfb, 0x14, 0x24, 0x14, 0xf0, 0xff, 0x0f, 0x27, 0xd1, 0x56, 0x1e, + 0xf6, 0x10, 0x74, 0x1c, 0x04, 0x2c, 0x22, 0xdc, 0xc2, 0xeb, 0xc4, 0x02, + 0x12, 0xf0, 0xff, 0x02, 0x10, 0xd0, 0xb2, 0xfb, 0xf3, 0xf3, 0x9d, 0x42, + 0x19, 0xd3, 0xeb, 0x1a, 0x4b, 0x61, 0x43, 0x69, 0x03, 0xfa, 0x02, 0xf2, + 0x8a, 0x60, 0x03, 0x2e, 0x07, 0xd8, 0x24, 0x04, 0xa4, 0xf5, 0x80, 0x34, + 0x0c, 0x61, 0x96, 0xe7, 0x43, 0x69, 0x8b, 0x60, 0xf5, 0xe7, 0x07, 0x48, + 0xbc, 0xe7, 0x4f, 0xf0, 0x00, 0x73, 0x97, 0xe7, 0x4f, 0xf0, 0x40, 0x73, + 0x94, 0xe7, 0x00, 0x23, 0x92, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0x92, 0xe7, + 0xb4, 0xd2, 0x01, 0x08, 0xdd, 0xd2, 0x01, 0x08, 0x00, 0xb5, 0x56, 0x4b, + 0x8d, 0xb0, 0x0a, 0x28, 0x00, 0xf2, 0xa4, 0x80, 0xdf, 0xe8, 0x00, 0xf0, + 0x06, 0x16, 0x24, 0x32, 0x40, 0x4e, 0x5c, 0x6a, 0x78, 0x86, 0x94, 0x00, + 0xd3, 0xf8, 0xe0, 0x20, 0x4f, 0x48, 0x42, 0xf0, 0x01, 0x02, 0xc3, 0xf8, + 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x01, 0x03, 0x01, 0x93, + 0x01, 0x9b, 0x0d, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0xd3, 0xf8, 0xe0, 0x20, + 0x48, 0x48, 0x42, 0xf0, 0x02, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, + 0xe0, 0x30, 0x03, 0xf0, 0x02, 0x03, 0x02, 0x93, 0x02, 0x9b, 0xee, 0xe7, + 0xd3, 0xf8, 0xe0, 0x20, 0x42, 0x48, 0x42, 0xf0, 0x04, 0x02, 0xc3, 0xf8, + 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x04, 0x03, 0x03, 0x93, + 0x03, 0x9b, 0xe0, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, 0x3c, 0x48, 0x42, 0xf0, + 0x08, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, + 0x08, 0x03, 0x04, 0x93, 0x04, 0x9b, 0xd2, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, + 0x36, 0x48, 0x42, 0xf0, 0x10, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, + 0xe0, 0x30, 0x03, 0xf0, 0x10, 0x03, 0x05, 0x93, 0x05, 0x9b, 0xc4, 0xe7, + 0xd3, 0xf8, 0xe0, 0x20, 0x30, 0x48, 0x42, 0xf0, 0x20, 0x02, 0xc3, 0xf8, + 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x20, 0x03, 0x06, 0x93, + 0x06, 0x9b, 0xb6, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, 0x2a, 0x48, 0x42, 0xf0, + 0x40, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, + 0x40, 0x03, 0x07, 0x93, 0x07, 0x9b, 0xa8, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, + 0x24, 0x48, 0x42, 0xf0, 0x80, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, + 0xe0, 0x30, 0x03, 0xf0, 0x80, 0x03, 0x08, 0x93, 0x08, 0x9b, 0x9a, 0xe7, + 0xd3, 0xf8, 0xe0, 0x20, 0x1e, 0x48, 0x42, 0xf4, 0x80, 0x72, 0xc3, 0xf8, + 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf4, 0x80, 0x73, 0x09, 0x93, + 0x09, 0x9b, 0x8c, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, 0x18, 0x48, 0x42, 0xf4, + 0x00, 0x72, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf4, + 0x00, 0x73, 0x0a, 0x93, 0x0a, 0x9b, 0x7e, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, + 0x12, 0x48, 0x42, 0xf4, 0x80, 0x62, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, + 0xe0, 0x30, 0x03, 0xf4, 0x80, 0x63, 0x0b, 0x93, 0x0b, 0x9b, 0x70, 0xe7, + 0x0d, 0x48, 0x0d, 0xf0, 0x07, 0xf9, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x02, 0x58, 0x00, 0x08, 0x02, 0x58, + 0x00, 0x0c, 0x02, 0x58, 0x00, 0x10, 0x02, 0x58, 0x00, 0x14, 0x02, 0x58, + 0x00, 0x18, 0x02, 0x58, 0x00, 0x1c, 0x02, 0x58, 0x00, 0x20, 0x02, 0x58, + 0x00, 0x24, 0x02, 0x58, 0x00, 0x28, 0x02, 0x58, 0xf4, 0xd2, 0x01, 0x08, + 0xf0, 0xb5, 0x82, 0x4d, 0x85, 0xb0, 0x17, 0xf0, 0xa9, 0xfb, 0x81, 0x4b, + 0x00, 0x21, 0x28, 0x60, 0x80, 0x48, 0x00, 0x24, 0x80, 0x4a, 0x83, 0xf8, + 0x20, 0x40, 0x1a, 0x60, 0x5c, 0x62, 0xc3, 0xe9, 0x04, 0x01, 0x4f, 0xf4, + 0xf0, 0x10, 0x00, 0x21, 0xc3, 0xe9, 0x01, 0x44, 0xc3, 0xe9, 0x06, 0x01, + 0x17, 0xf0, 0x7c, 0xf8, 0x68, 0xb9, 0x79, 0x4c, 0x23, 0x78, 0x1b, 0xb9, + 0x17, 0xf0, 0x90, 0xf8, 0x01, 0x23, 0x23, 0x70, 0x76, 0x4b, 0x93, 0xf8, + 0x25, 0x20, 0x00, 0x2a, 0x00, 0xf0, 0xc3, 0x80, 0x5c, 0x6b, 0x74, 0x4b, + 0x14, 0x20, 0x2a, 0x68, 0xc3, 0xe9, 0x01, 0x24, 0x0c, 0xf0, 0xa4, 0xfb, + 0x4f, 0xf6, 0xff, 0x71, 0x83, 0x1e, 0x00, 0xf1, 0x12, 0x02, 0x23, 0xf8, + 0x02, 0x1f, 0x9a, 0x42, 0xfb, 0xd1, 0x6d, 0x4b, 0x00, 0x25, 0x6d, 0x4c, + 0x00, 0x26, 0x18, 0x60, 0x00, 0x27, 0x6c, 0x48, 0x0d, 0xf0, 0xb2, 0xfb, + 0x01, 0x22, 0xa5, 0x21, 0x6a, 0x48, 0x15, 0xf0, 0x1e, 0xfd, 0x01, 0x22, + 0xa6, 0x21, 0x69, 0x48, 0x15, 0xf0, 0x19, 0xfd, 0x01, 0x22, 0xa7, 0x21, + 0x67, 0x48, 0x15, 0xf0, 0x14, 0xfd, 0x1c, 0x22, 0x00, 0x21, 0x20, 0x46, + 0x19, 0xf0, 0x50, 0xfb, 0x88, 0x21, 0x20, 0x46, 0x21, 0x82, 0x03, 0xf0, + 0x41, 0xf8, 0x20, 0x46, 0x00, 0x21, 0x03, 0xf0, 0x61, 0xf8, 0x02, 0x21, + 0xb4, 0xf9, 0x10, 0x00, 0x02, 0xf0, 0x44, 0xf9, 0x5d, 0x4c, 0x5e, 0x48, + 0x5e, 0x4b, 0xa0, 0x61, 0x23, 0x60, 0xc4, 0xe9, 0x02, 0x67, 0xc4, 0xe9, + 0x04, 0x55, 0x0c, 0xf0, 0x93, 0xfd, 0x0c, 0xf0, 0xd5, 0xfb, 0x5a, 0x4a, + 0x5a, 0x4b, 0x1a, 0x60, 0x0c, 0xf0, 0xbc, 0xfb, 0x01, 0x23, 0x65, 0x63, + 0x84, 0xf8, 0x38, 0x30, 0x57, 0x4b, 0xc4, 0xe9, 0x08, 0x67, 0x23, 0x60, + 0x16, 0xf0, 0x58, 0xff, 0x55, 0x4b, 0x56, 0x4c, 0x18, 0x60, 0x17, 0xf0, + 0x29, 0xfb, 0x55, 0x4b, 0x25, 0x61, 0x18, 0x60, 0x54, 0x4b, 0x23, 0x60, + 0x04, 0xf1, 0x44, 0x03, 0x02, 0x93, 0x10, 0x23, 0xcd, 0xe9, 0x00, 0x55, + 0x03, 0x93, 0xef, 0xf3, 0x05, 0x83, 0x00, 0x2b, 0x57, 0xd0, 0x00, 0x20, + 0x20, 0x64, 0x00, 0x25, 0x4d, 0x48, 0x00, 0xf0, 0xbf, 0xf8, 0x44, 0x22, + 0x00, 0x21, 0x4c, 0x48, 0x19, 0xf0, 0x06, 0xfb, 0x01, 0x23, 0x20, 0x22, + 0x29, 0x46, 0xa3, 0x87, 0x65, 0x61, 0x49, 0x48, 0x19, 0xf0, 0xfe, 0xfa, + 0x4f, 0xf4, 0x80, 0x53, 0x28, 0x22, 0x4f, 0xf4, 0xd0, 0x60, 0xc4, 0xe9, + 0x0b, 0x32, 0x45, 0x4b, 0xa3, 0x61, 0x45, 0x4c, 0xa5, 0x65, 0x19, 0xf0, + 0x83, 0xfa, 0x06, 0x46, 0x70, 0xb3, 0xc2, 0x1c, 0x22, 0xf0, 0x03, 0x02, + 0x13, 0x1a, 0x28, 0x46, 0xe2, 0x60, 0xc3, 0xf5, 0xd0, 0x63, 0x23, 0xf0, + 0x03, 0x03, 0x19, 0x46, 0xc4, 0xe9, 0x04, 0x55, 0x6f, 0x1c, 0x00, 0x29, + 0x31, 0xd1, 0x00, 0xb1, 0x25, 0x61, 0x00, 0x25, 0x22, 0x62, 0xc4, 0xe9, + 0x06, 0x53, 0x25, 0x60, 0x0c, 0xf0, 0x06, 0xfe, 0x11, 0xf0, 0x8e, 0xfc, + 0x35, 0x4b, 0x60, 0x60, 0x00, 0x93, 0x35, 0x4b, 0x25, 0x81, 0x02, 0x93, + 0x10, 0x23, 0xa5, 0x72, 0x84, 0xf8, 0x24, 0x50, 0x01, 0x95, 0x03, 0x93, + 0xc4, 0xe9, 0x0a, 0x55, 0xef, 0xf3, 0x05, 0x83, 0xcb, 0xb1, 0x00, 0x20, + 0x20, 0x63, 0x66, 0x61, 0x2d, 0x48, 0x0d, 0xf0, 0x0b, 0xfb, 0x05, 0xb0, + 0xf0, 0xbd, 0x9c, 0x6b, 0x3b, 0xe7, 0x14, 0xf0, 0x67, 0xff, 0x01, 0x46, + 0x00, 0x28, 0xa2, 0xd1, 0x4f, 0xf6, 0xff, 0x70, 0x6a, 0x46, 0xdf, 0xf8, + 0x9c, 0xc0, 0x00, 0xdf, 0x9c, 0xe7, 0x49, 0x08, 0x3d, 0x46, 0x01, 0x20, + 0xc6, 0xe7, 0x14, 0xf0, 0x57, 0xff, 0x00, 0x28, 0xe1, 0xd1, 0x68, 0x46, + 0xdf, 0xf8, 0x84, 0xc0, 0x00, 0xdf, 0xdd, 0xe7, 0x7c, 0x0b, 0x02, 0x24, + 0xb0, 0x06, 0x00, 0x24, 0x00, 0x00, 0x02, 0x08, 0xbc, 0xd6, 0x01, 0x08, + 0xa8, 0x06, 0x00, 0x24, 0xb4, 0x05, 0x00, 0x24, 0x04, 0x00, 0x00, 0x24, + 0xd8, 0x06, 0x00, 0x24, 0xe8, 0x0a, 0x00, 0x24, 0x68, 0x06, 0x00, 0x24, + 0xa8, 0x0b, 0x02, 0x24, 0x48, 0x0b, 0x02, 0x24, 0x0c, 0x07, 0x00, 0x24, + 0xe8, 0x0b, 0x02, 0x24, 0x58, 0xd9, 0x01, 0x08, 0x10, 0xd7, 0x01, 0x08, + 0x21, 0xdf, 0x00, 0x08, 0x10, 0x0b, 0x02, 0x24, 0xb0, 0xd8, 0x01, 0x08, + 0xa4, 0x0b, 0x02, 0x24, 0x34, 0x14, 0x02, 0x24, 0x0c, 0x0b, 0x02, 0x24, + 0xcc, 0xd8, 0x01, 0x08, 0x88, 0x14, 0x02, 0x24, 0xac, 0x14, 0x02, 0x24, + 0x50, 0x14, 0x02, 0x24, 0x15, 0xd3, 0x01, 0x08, 0xd8, 0x13, 0x02, 0x24, + 0x30, 0xd3, 0x01, 0x08, 0x0c, 0x14, 0x02, 0x24, 0x28, 0x06, 0x00, 0x24, + 0xbd, 0x46, 0x01, 0x08, 0x7d, 0x48, 0x01, 0x08, 0x08, 0xb5, 0x72, 0x46, + 0x06, 0x4b, 0x01, 0x25, 0xd3, 0xe8, 0x4f, 0x4f, 0xc3, 0xe8, 0x46, 0x5f, + 0xe4, 0xb2, 0x00, 0x2e, 0xf8, 0xd1, 0x0c, 0xb9, 0x0c, 0xf0, 0x4e, 0xfb, + 0x0c, 0xf0, 0x74, 0xff, 0x78, 0x0b, 0x02, 0x24, 0x1f, 0xb5, 0x00, 0x23, + 0x04, 0x46, 0x03, 0x62, 0x06, 0x4b, 0x00, 0x93, 0x03, 0x1d, 0x68, 0x46, + 0x02, 0x93, 0x1c, 0x23, 0x03, 0x93, 0x0b, 0x23, 0x01, 0x93, 0x15, 0xf0, + 0x59, 0xfb, 0x20, 0x60, 0x04, 0xb0, 0x10, 0xbd, 0x37, 0xd3, 0x01, 0x08, + 0x0b, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x40, 0xf8, 0x04, 0x3b, 0xfe, 0xf7, + 0xbb, 0xff, 0x09, 0x4b, 0x00, 0x21, 0x04, 0xf1, 0x14, 0x00, 0x03, 0xf1, + 0x08, 0x02, 0x94, 0x33, 0x22, 0x60, 0x38, 0x22, 0x63, 0x60, 0x19, 0xf0, + 0x25, 0xfa, 0x4f, 0xf0, 0xff, 0x33, 0x20, 0x46, 0x23, 0x65, 0x10, 0xbd, + 0xf4, 0xd7, 0x01, 0x08, 0x14, 0xd7, 0x01, 0x08, 0x14, 0x4b, 0x10, 0xb5, + 0x04, 0x46, 0x40, 0xf8, 0x04, 0x3b, 0xfe, 0xf7, 0x9f, 0xff, 0x12, 0x4b, + 0x00, 0x21, 0x04, 0xf1, 0x14, 0x00, 0x03, 0xf1, 0x08, 0x02, 0x88, 0x33, + 0x22, 0x60, 0x44, 0x22, 0x63, 0x60, 0x19, 0xf0, 0x09, 0xfa, 0x00, 0x21, + 0x38, 0x22, 0x04, 0xf1, 0x58, 0x00, 0x19, 0xf0, 0x03, 0xfa, 0x00, 0x22, + 0x40, 0x23, 0x04, 0xf1, 0xa4, 0x00, 0xc4, 0xe9, 0x24, 0x23, 0xc4, 0xf8, + 0x98, 0x30, 0x4f, 0xf4, 0x00, 0x73, 0xc4, 0xe9, 0x27, 0x33, 0xff, 0xf7, + 0xa9, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x00, 0xbf, 0xf4, 0xd7, 0x01, 0x08, + 0x18, 0xd8, 0x01, 0x08, 0x10, 0xb5, 0x04, 0x46, 0x80, 0x21, 0x15, 0xf0, + 0xbb, 0xfb, 0x00, 0x21, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, 0x15, 0xf0, + 0xb5, 0xbb, 0x08, 0xb5, 0x02, 0x65, 0x00, 0x22, 0x0b, 0x46, 0x00, 0xf1, + 0x3c, 0x01, 0x42, 0x65, 0x4f, 0xf4, 0x80, 0x72, 0x83, 0x64, 0x82, 0x87, + 0x02, 0x69, 0x01, 0x2a, 0xd2, 0xb2, 0x08, 0xbf, 0xc3, 0x64, 0x00, 0x68, + 0xfe, 0xf7, 0x12, 0xfc, 0x00, 0x20, 0x08, 0xbd, 0x08, 0xb5, 0xc0, 0xf8, + 0x10, 0x22, 0x00, 0x22, 0x0b, 0x46, 0x00, 0xf5, 0xfe, 0x71, 0xc0, 0xf8, + 0x14, 0x22, 0xa0, 0xf8, 0xfc, 0x21, 0x02, 0x69, 0xc0, 0xf8, 0x08, 0x32, + 0x01, 0x2a, 0xd2, 0xb2, 0x08, 0xbf, 0xc0, 0xf8, 0x0c, 0x32, 0x00, 0x68, + 0xfe, 0xf7, 0xfa, 0xfb, 0x00, 0x20, 0x08, 0xbd, 0x0f, 0x4b, 0x00, 0xf1, + 0x60, 0x40, 0xdb, 0x68, 0x00, 0xf5, 0x61, 0x40, 0xc3, 0xf3, 0x02, 0x23, + 0x10, 0xb5, 0xc3, 0xf1, 0x07, 0x04, 0x1a, 0x1d, 0x04, 0x2c, 0x28, 0xbf, + 0x04, 0x24, 0x06, 0x2a, 0x4f, 0xf0, 0xff, 0x32, 0x8c, 0xbf, 0x03, 0x3b, + 0x00, 0x23, 0xa2, 0x40, 0x21, 0xea, 0x02, 0x01, 0x01, 0xfa, 0x03, 0xf3, + 0x1b, 0x01, 0xdb, 0xb2, 0x80, 0xf8, 0x00, 0x33, 0x10, 0xbd, 0x00, 0xbf, + 0x00, 0xed, 0x00, 0xe0, 0x0d, 0x4b, 0x19, 0x88, 0x4f, 0xf6, 0xfd, 0x73, + 0x4a, 0x1e, 0x92, 0xb2, 0x9a, 0x42, 0x97, 0xbf, 0x0a, 0x4b, 0x4f, 0xf0, + 0x02, 0x63, 0x03, 0xea, 0x81, 0x23, 0x03, 0xf1, 0x00, 0x63, 0x83, 0x42, + 0x07, 0xd9, 0xb0, 0xf1, 0x00, 0x6f, 0x34, 0xbf, 0x4f, 0xf0, 0xff, 0x30, + 0x4f, 0xf4, 0x00, 0x30, 0x70, 0x47, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0x47, + 0x80, 0xe8, 0xf1, 0x1f, 0x00, 0xfc, 0x3f, 0x00, 0x06, 0x4b, 0x4f, 0xf6, + 0xfd, 0x71, 0x1a, 0x88, 0x53, 0x1e, 0x9b, 0xb2, 0x8b, 0x42, 0x9a, 0xbf, + 0x03, 0x48, 0x00, 0xea, 0x82, 0x20, 0x4f, 0xf4, 0x00, 0x10, 0x70, 0x47, + 0x80, 0xe8, 0xf1, 0x1f, 0x00, 0xfc, 0x3f, 0x00, 0x08, 0xb5, 0x08, 0x4b, + 0x1b, 0x68, 0x23, 0xb1, 0x07, 0x4b, 0x1b, 0x68, 0x18, 0x65, 0x00, 0x20, + 0x08, 0xbd, 0x06, 0x4b, 0x1b, 0x78, 0x13, 0xb1, 0x05, 0x48, 0x1a, 0xf0, + 0x71, 0xfd, 0x4f, 0xf0, 0xff, 0x30, 0xf5, 0xe7, 0xc4, 0x0b, 0x02, 0x24, + 0x44, 0x05, 0x00, 0x24, 0x08, 0x0b, 0x02, 0x24, 0x51, 0xd3, 0x01, 0x08, + 0x38, 0xb5, 0x0c, 0x46, 0x05, 0x46, 0x01, 0x21, 0x20, 0x46, 0x0e, 0xf0, + 0xb1, 0xfe, 0x28, 0xb9, 0x21, 0x46, 0x28, 0x46, 0xbd, 0xe8, 0x38, 0x40, + 0x0f, 0xf0, 0xdb, 0xbd, 0x38, 0xbd, 0x00, 0x00, 0x70, 0xb5, 0x05, 0x46, + 0x0e, 0x46, 0x09, 0xb9, 0x11, 0x48, 0x70, 0xbd, 0x00, 0x28, 0xfb, 0xd0, + 0x00, 0x24, 0x01, 0x60, 0xc0, 0xe9, 0x01, 0x44, 0x0b, 0x79, 0x05, 0x3b, + 0x01, 0x2b, 0xf3, 0xd8, 0x6c, 0x21, 0x01, 0x20, 0x1a, 0xf0, 0xc8, 0xfb, + 0x68, 0x60, 0x60, 0xb1, 0x6c, 0x22, 0x21, 0x46, 0x19, 0xf0, 0x1e, 0xf9, + 0xb1, 0x79, 0x02, 0x20, 0x1a, 0xf0, 0xbe, 0xfb, 0xa8, 0x60, 0x20, 0xb9, + 0x28, 0x46, 0x0e, 0xf0, 0x67, 0xfc, 0x03, 0x48, 0xdf, 0xe7, 0x20, 0x46, + 0xdd, 0xe7, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, 0x80, 0xae, 0xff, 0xff, + 0x38, 0xb5, 0x0d, 0x46, 0x06, 0x49, 0x04, 0x46, 0xff, 0xf7, 0xce, 0xff, + 0x30, 0xb9, 0x29, 0x46, 0x20, 0x46, 0x20, 0x22, 0xbd, 0xe8, 0x38, 0x40, + 0x0e, 0xf0, 0xf0, 0xbb, 0x38, 0xbd, 0x00, 0xbf, 0x50, 0xd9, 0x01, 0x08, + 0x0b, 0x68, 0x83, 0x60, 0x05, 0x4b, 0xc2, 0x68, 0x13, 0x40, 0x4a, 0x68, + 0x13, 0x43, 0x8a, 0x68, 0x13, 0x43, 0x43, 0xf4, 0x80, 0x53, 0xc3, 0x60, + 0x00, 0x20, 0x70, 0x47, 0xc0, 0xe0, 0xfe, 0xff, 0x46, 0x4b, 0xda, 0x6c, + 0x18, 0x68, 0xd1, 0x03, 0x30, 0xb5, 0x85, 0xb0, 0x7d, 0xd4, 0x10, 0xf0, + 0x00, 0x70, 0x4c, 0xd0, 0x99, 0x6a, 0x9d, 0x6a, 0xda, 0x6a, 0x15, 0xf4, + 0x7c, 0x7f, 0xc5, 0xf3, 0x05, 0x10, 0x5c, 0x6b, 0x43, 0xd0, 0xc4, 0xf3, + 0xcc, 0x04, 0x02, 0xf0, 0x01, 0x02, 0x07, 0xee, 0x90, 0x0a, 0x01, 0xf0, + 0x03, 0x01, 0x62, 0x43, 0xb7, 0xee, 0x00, 0x6a, 0xf8, 0xee, 0xe7, 0x6a, + 0x01, 0x29, 0x07, 0xee, 0x90, 0x2a, 0xfa, 0xee, 0xe9, 0x7a, 0x32, 0xd0, + 0x02, 0x29, 0x40, 0xd0, 0x00, 0x29, 0x4c, 0xd1, 0x1a, 0x68, 0x92, 0x06, + 0x49, 0xd5, 0x19, 0x68, 0x30, 0x4a, 0xc1, 0xf3, 0xc1, 0x01, 0x1b, 0x6b, + 0xca, 0x40, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x2a, 0xf8, 0xee, + 0xc7, 0x5a, 0x85, 0xee, 0xa6, 0x7a, 0x06, 0xee, 0x90, 0x3a, 0xf8, 0xee, + 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x25, 0x4a, + 0x67, 0xee, 0x87, 0x7a, 0x13, 0x6b, 0x13, 0x6b, 0xc3, 0xf3, 0x06, 0x43, + 0x06, 0xee, 0x90, 0x3a, 0x13, 0x6b, 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, + 0x86, 0x6a, 0x87, 0xee, 0xa6, 0x7a, 0xfc, 0xee, 0xc7, 0x7a, 0x17, 0xee, + 0x90, 0x0a, 0x05, 0xb0, 0x30, 0xbd, 0x1b, 0x6b, 0xdf, 0xed, 0x1b, 0x5a, + 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x85, 0xee, 0xa6, 0x7a, + 0xd9, 0xe7, 0x1b, 0x6b, 0xdf, 0xed, 0x14, 0x5a, 0xc3, 0xf3, 0x08, 0x03, + 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, + 0x77, 0xee, 0x86, 0x7a, 0xee, 0xe7, 0x1b, 0x6b, 0xdf, 0xed, 0x0e, 0x5a, + 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0xe0, 0xe7, 0x10, 0xf0, + 0x00, 0x60, 0xce, 0xd0, 0x01, 0xa8, 0xfe, 0xf7, 0xc1, 0xfb, 0x03, 0x98, + 0xc9, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0x00, 0x90, 0xd0, 0x03, + 0x00, 0x24, 0x74, 0x4a, 0x20, 0xbc, 0xbe, 0x4b, 0x00, 0x24, 0x74, 0x4c, + 0x03, 0x46, 0x53, 0xe8, 0x00, 0x0f, 0x01, 0x38, 0x43, 0xe8, 0x00, 0x02, + 0x00, 0x2a, 0xf8, 0xd1, 0x70, 0x47, 0x70, 0xb5, 0x05, 0x6b, 0xe0, 0xb0, + 0x04, 0x46, 0xb5, 0xf5, 0xc0, 0x7f, 0x1d, 0xd8, 0x4f, 0xf4, 0xc0, 0x72, + 0x00, 0x21, 0x68, 0x46, 0x19, 0xf0, 0x3c, 0xf8, 0xe3, 0x6b, 0x2a, 0x46, + 0x69, 0x46, 0x20, 0x6c, 0x98, 0x47, 0xa0, 0xb9, 0x26, 0x6b, 0x69, 0x46, + 0x20, 0x46, 0x32, 0x46, 0x0e, 0xf0, 0xa5, 0xfb, 0x05, 0x46, 0x08, 0xb9, + 0x01, 0x23, 0xe3, 0x62, 0x1e, 0xb1, 0x31, 0x46, 0x68, 0x46, 0x0d, 0xf0, + 0xff, 0xfd, 0x28, 0x46, 0x60, 0xb0, 0x70, 0xbd, 0x6f, 0xf0, 0x04, 0x05, + 0xf9, 0xe7, 0x6f, 0xf0, 0x08, 0x05, 0xf6, 0xe7, 0x07, 0x4b, 0x5a, 0x68, + 0x90, 0x23, 0x53, 0x43, 0x06, 0x4a, 0xd3, 0x58, 0xda, 0x69, 0x12, 0x07, + 0x01, 0xd5, 0x08, 0x22, 0x1a, 0x62, 0xd8, 0x69, 0xc0, 0xf3, 0x40, 0x10, + 0x70, 0x47, 0x00, 0xbf, 0xc8, 0x0b, 0x02, 0x24, 0xa8, 0x0d, 0x02, 0x24, + 0x10, 0xb5, 0x86, 0xb0, 0x04, 0x46, 0x68, 0x46, 0x03, 0x91, 0x80, 0xe8, + 0x0c, 0x00, 0x06, 0xa8, 0x00, 0xe9, 0x0c, 0x00, 0x10, 0xe9, 0x07, 0x00, + 0x03, 0x4b, 0x84, 0xe8, 0x07, 0x00, 0x20, 0x46, 0xe3, 0x60, 0x06, 0xb0, + 0x10, 0xbd, 0x00, 0xbf, 0x2f, 0x83, 0x00, 0x08, 0x70, 0xb5, 0x00, 0x23, + 0x85, 0x68, 0x04, 0x46, 0x06, 0x68, 0x03, 0x61, 0x9d, 0xb9, 0x33, 0x78, + 0x02, 0x2b, 0x01, 0xd9, 0xb3, 0x6a, 0x6b, 0xb9, 0x33, 0x89, 0x0b, 0xb9, + 0x02, 0x20, 0x70, 0xbd, 0xb3, 0x6a, 0xa3, 0x61, 0xa3, 0x69, 0x65, 0x61, + 0x00, 0x2b, 0xf7, 0xd0, 0x73, 0x6b, 0x00, 0x20, 0xe3, 0x61, 0xf4, 0xe7, + 0x1d, 0x46, 0x73, 0x89, 0xb2, 0x89, 0x5a, 0x43, 0x0c, 0xd1, 0x29, 0x46, + 0x20, 0x68, 0x07, 0xf0, 0x88, 0xfe, 0x43, 0x1c, 0x05, 0x46, 0x0b, 0xd0, + 0x01, 0x28, 0xe5, 0xd9, 0xb3, 0x69, 0x98, 0x42, 0xf3, 0xd3, 0xe1, 0xe7, + 0x29, 0x46, 0x30, 0x46, 0x07, 0xf0, 0x58, 0xfe, 0xa0, 0x61, 0xdf, 0xe7, + 0x01, 0x20, 0xda, 0xe7, 0x38, 0xb5, 0x04, 0x46, 0x05, 0x68, 0x04, 0x20, + 0xa1, 0x69, 0xf9, 0xb1, 0x28, 0x46, 0x07, 0xf0, 0x56, 0xfe, 0xc0, 0xb9, + 0xe3, 0x69, 0x1a, 0x78, 0xda, 0xb1, 0xdb, 0x7a, 0xe5, 0x2a, 0x03, 0xf0, + 0x3f, 0x03, 0xa3, 0x71, 0x09, 0xd0, 0x2e, 0x2a, 0x07, 0xd0, 0x0f, 0x2b, + 0x05, 0xd0, 0x23, 0xf0, 0x20, 0x03, 0x08, 0x2b, 0x01, 0xd0, 0x00, 0x20, + 0x38, 0xbd, 0x00, 0x21, 0x20, 0x46, 0x08, 0xf0, 0x67, 0xfc, 0x00, 0x28, + 0xe0, 0xd0, 0x00, 0x23, 0xa3, 0x61, 0xf5, 0xe7, 0x00, 0x28, 0xf2, 0xd0, + 0xf9, 0xe7, 0x04, 0x20, 0xf7, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x87, 0xb0, + 0x06, 0x46, 0x8b, 0x46, 0x17, 0x46, 0x4f, 0xf0, 0x01, 0x09, 0x0d, 0xf1, + 0x17, 0x0a, 0xdd, 0xe9, 0x10, 0x45, 0x25, 0x44, 0xa3, 0xeb, 0x04, 0x08, + 0xac, 0x42, 0x01, 0xd1, 0x01, 0x20, 0x11, 0xe0, 0x08, 0xeb, 0x04, 0x03, + 0x00, 0x22, 0x59, 0x46, 0x30, 0x46, 0x00, 0x93, 0x3b, 0x46, 0xcd, 0xe9, + 0x01, 0xa9, 0x06, 0xf0, 0x46, 0xfd, 0x28, 0xb9, 0x14, 0xf8, 0x01, 0x3b, + 0x9d, 0xf8, 0x17, 0x20, 0x9a, 0x42, 0xe9, 0xd0, 0x07, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x2d, 0xe9, 0xf0, 0x4f, 0x89, 0xb0, 0x06, 0x46, 0x88, 0x46, + 0xdd, 0xf8, 0x4c, 0x90, 0x05, 0x92, 0x4b, 0xb9, 0x4f, 0xf0, 0xff, 0x32, + 0xc9, 0xf8, 0x00, 0x20, 0x14, 0x9a, 0x00, 0x20, 0x13, 0x60, 0x09, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x3b, 0x07, 0xa9, 0x00, 0x68, 0x4f, 0xf0, + 0x04, 0x0a, 0x07, 0x93, 0x06, 0xf0, 0x04, 0xfd, 0x12, 0xa9, 0x05, 0x46, + 0x30, 0x68, 0x0d, 0xf1, 0x14, 0x0b, 0x06, 0xf0, 0xfd, 0xfc, 0x07, 0x46, + 0xaf, 0x42, 0x05, 0x9b, 0x03, 0xd3, 0xc9, 0xf8, 0x00, 0x30, 0x12, 0x9b, + 0xe2, 0xe7, 0xec, 0x1b, 0x95, 0xfa, 0xa5, 0xf2, 0x41, 0x46, 0x30, 0x46, + 0xb4, 0xfa, 0x84, 0xf4, 0xb2, 0xfa, 0x82, 0xf2, 0xc4, 0xf1, 0x1f, 0x04, + 0x94, 0x42, 0x28, 0xbf, 0x14, 0x46, 0xa2, 0x00, 0xcd, 0xe9, 0x01, 0xba, + 0x00, 0x92, 0x00, 0x22, 0x06, 0xf0, 0xfd, 0xfc, 0x00, 0x28, 0xce, 0xd1, + 0x01, 0x23, 0x03, 0xfa, 0x04, 0xf4, 0x2d, 0x1b, 0xdc, 0xe7, 0x30, 0xb5, + 0x14, 0x46, 0x89, 0xb0, 0x0c, 0x25, 0x54, 0xf8, 0x04, 0x3b, 0x03, 0x95, + 0x00, 0x93, 0x2b, 0x44, 0x04, 0x93, 0xd3, 0x79, 0x00, 0x22, 0x05, 0x93, + 0xcd, 0xe9, 0x06, 0x23, 0x01, 0x23, 0x6a, 0x46, 0xcd, 0xe9, 0x01, 0x54, + 0x07, 0xf0, 0x5b, 0xfc, 0x09, 0xb0, 0x30, 0xbd, 0x2d, 0xe9, 0xf0, 0x43, + 0x07, 0x46, 0x95, 0xb0, 0x0e, 0x46, 0x90, 0x46, 0x99, 0x46, 0x01, 0xf1, + 0x24, 0x05, 0x40, 0x46, 0x34, 0x6a, 0x06, 0xf0, 0x42, 0xfe, 0x3b, 0x68, + 0x20, 0x44, 0xdb, 0x69, 0x98, 0x42, 0x18, 0xd8, 0x04, 0x3c, 0x43, 0x46, + 0x00, 0x22, 0x31, 0x46, 0x43, 0xf8, 0x04, 0x4b, 0x09, 0x94, 0xcd, 0xe9, + 0x0a, 0x23, 0x0c, 0x23, 0xcd, 0xe9, 0x0c, 0x34, 0x98, 0xf8, 0x07, 0x30, + 0xcd, 0xe9, 0x0e, 0x29, 0x10, 0x93, 0x09, 0xaa, 0x02, 0x23, 0x38, 0x46, + 0x07, 0xf0, 0x31, 0xfc, 0x15, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x00, 0x2c, + 0x37, 0xdb, 0x35, 0x46, 0x09, 0xac, 0x0f, 0xcd, 0x0f, 0xc4, 0x0f, 0xcd, + 0x0f, 0xc4, 0x95, 0xe8, 0x07, 0x00, 0x84, 0xe8, 0x07, 0x00, 0x31, 0x46, + 0x38, 0x46, 0x07, 0xf0, 0x97, 0xf9, 0x00, 0x28, 0xea, 0xd1, 0x12, 0x9b, + 0x42, 0x46, 0x31, 0x46, 0x73, 0x62, 0x13, 0x9b, 0xb3, 0x62, 0x33, 0x6a, + 0x04, 0x3b, 0x42, 0xf8, 0x04, 0x3b, 0x03, 0x92, 0x0c, 0x22, 0xcd, 0xe9, + 0x01, 0x30, 0xcd, 0xe9, 0x04, 0x23, 0x98, 0xf8, 0x07, 0x30, 0x01, 0xaa, + 0xcd, 0xe9, 0x06, 0x09, 0x08, 0x93, 0x38, 0x46, 0x02, 0x23, 0x07, 0xf0, + 0x02, 0xfc, 0x00, 0x28, 0xce, 0xd1, 0x11, 0x9b, 0x02, 0x46, 0x09, 0xa9, + 0x43, 0xf0, 0x00, 0x43, 0x11, 0x93, 0x73, 0x68, 0x12, 0x93, 0xb3, 0x68, + 0x13, 0x93, 0x03, 0x46, 0xbf, 0xe7, 0x2a, 0x46, 0x31, 0x46, 0x38, 0x46, + 0x06, 0xf0, 0x54, 0xfd, 0x00, 0x28, 0x9c, 0xd0, 0xba, 0xe7, 0x00, 0x00, + 0x18, 0x4b, 0x2d, 0xe9, 0xf7, 0x43, 0x53, 0xf8, 0x20, 0x60, 0x00, 0x23, + 0x0c, 0x46, 0x17, 0x46, 0x1d, 0x46, 0x98, 0x46, 0x0b, 0x60, 0x33, 0x68, + 0x30, 0x46, 0xd3, 0xf8, 0x3c, 0x90, 0x5b, 0x6a, 0x98, 0x47, 0x2a, 0x46, + 0x43, 0x46, 0xcd, 0xe9, 0x00, 0x01, 0x30, 0x46, 0xc8, 0x47, 0xa8, 0xb1, + 0x23, 0x68, 0x2a, 0x46, 0x30, 0x46, 0x47, 0xf8, 0x33, 0x50, 0x33, 0x68, + 0x19, 0x6b, 0x43, 0x46, 0x88, 0x47, 0x23, 0x68, 0x2d, 0x18, 0x07, 0xeb, + 0xc3, 0x03, 0x48, 0xeb, 0x01, 0x08, 0x58, 0x60, 0x21, 0x68, 0x01, 0x31, + 0xb1, 0xf5, 0x70, 0x7f, 0x21, 0x60, 0xdc, 0xd3, 0x00, 0x20, 0x03, 0xb0, + 0xbd, 0xe8, 0xf0, 0x83, 0x04, 0x00, 0x00, 0x24, 0x08, 0xb5, 0x04, 0x4b, + 0x02, 0x78, 0x53, 0xf8, 0x22, 0x00, 0x03, 0x68, 0x9b, 0x6a, 0x98, 0x47, + 0xc0, 0xb2, 0x08, 0xbd, 0x04, 0x00, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x43, + 0x1d, 0x46, 0x89, 0xb0, 0x06, 0x46, 0x0f, 0x46, 0x6c, 0x1e, 0x90, 0x46, + 0xff, 0xf7, 0xea, 0xff, 0x04, 0x44, 0x40, 0x42, 0x04, 0x40, 0xe4, 0xb2, + 0x20, 0x2c, 0x1a, 0xd8, 0x30, 0x46, 0xfd, 0xf7, 0xc5, 0xff, 0x81, 0x46, + 0x2a, 0x46, 0x41, 0x46, 0x68, 0x46, 0x18, 0xf0, 0x3b, 0xfe, 0x62, 0x1b, + 0x49, 0x46, 0x0d, 0xeb, 0x05, 0x00, 0x18, 0xf0, 0x43, 0xfe, 0x23, 0x46, + 0x6a, 0x46, 0x39, 0x46, 0x30, 0x46, 0xfd, 0xf7, 0xbf, 0xff, 0x00, 0x38, + 0x18, 0xbf, 0x01, 0x20, 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x4f, 0xf0, + 0xff, 0x30, 0xf9, 0xe7, 0x07, 0xb5, 0x8d, 0xf8, 0x07, 0x10, 0x01, 0x23, + 0x81, 0x68, 0x0d, 0xf1, 0x07, 0x02, 0x80, 0x39, 0xff, 0xf7, 0xc8, 0xff, + 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x07, 0xb5, 0x81, 0x68, 0x01, 0x23, + 0x01, 0xaa, 0x40, 0x39, 0x8d, 0xf8, 0x04, 0x30, 0xff, 0xf7, 0xbc, 0xff, + 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0x00, 0x13, 0xb5, 0x06, 0x4b, + 0x00, 0x78, 0x53, 0xf8, 0x20, 0x00, 0x00, 0x23, 0x04, 0x68, 0xcd, 0xe9, + 0x00, 0x23, 0x0a, 0x46, 0xe4, 0x69, 0xa0, 0x47, 0x02, 0xb0, 0x10, 0xbd, + 0x04, 0x00, 0x00, 0x24, 0x2d, 0xe9, 0xf8, 0x43, 0x03, 0x78, 0x07, 0x46, + 0x0b, 0xb1, 0x01, 0x2b, 0x20, 0xd1, 0x11, 0x4a, 0x2c, 0x21, 0x4f, 0xf4, + 0x34, 0x66, 0x4f, 0xf0, 0x00, 0x08, 0x01, 0xfb, 0x03, 0x23, 0x92, 0x6e, + 0x9d, 0x6a, 0x56, 0x43, 0x1c, 0x46, 0x01, 0x3d, 0xe0, 0x36, 0x63, 0x6a, + 0x38, 0x46, 0x03, 0xeb, 0xc5, 0x02, 0x53, 0xf8, 0x35, 0x10, 0x1b, 0x68, + 0x01, 0x3d, 0xd2, 0xf8, 0x04, 0x90, 0xc9, 0x1a, 0xc8, 0x44, 0x4a, 0x46, + 0xff, 0xf7, 0xcc, 0xff, 0xb0, 0x45, 0xee, 0xd3, 0xbd, 0xe8, 0xf8, 0x83, + 0x01, 0x20, 0xfb, 0xe7, 0x28, 0x07, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x43, + 0x85, 0xb0, 0x1e, 0x46, 0x1b, 0x4b, 0x4f, 0xf0, 0x00, 0x08, 0x03, 0x92, + 0x07, 0x46, 0x02, 0x78, 0x0d, 0x46, 0x53, 0xf8, 0x22, 0x40, 0x0a, 0x46, + 0x23, 0x68, 0x20, 0x46, 0xcd, 0xe9, 0x00, 0x68, 0xd3, 0xf8, 0x3c, 0x90, + 0x43, 0x46, 0xc8, 0x47, 0x03, 0x99, 0x58, 0xb9, 0x12, 0x4b, 0x1b, 0x78, + 0x2b, 0xb1, 0x33, 0x46, 0x2a, 0x46, 0x39, 0x78, 0x10, 0x48, 0x09, 0xf0, + 0x8f, 0xfc, 0x4f, 0xf0, 0xff, 0x34, 0x13, 0xe0, 0x23, 0x68, 0x20, 0x46, + 0x2a, 0x46, 0xcd, 0xe9, 0x00, 0x68, 0xd3, 0xf8, 0x14, 0x90, 0x43, 0x46, + 0xc8, 0x47, 0x04, 0x46, 0x40, 0xb1, 0x07, 0x4b, 0x1b, 0x78, 0x2b, 0xb1, + 0x33, 0x46, 0x2a, 0x46, 0x39, 0x78, 0x06, 0x48, 0x09, 0xf0, 0x78, 0xfc, + 0x20, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x04, 0x00, 0x00, 0x24, + 0x08, 0x0b, 0x02, 0x24, 0x65, 0xd3, 0x01, 0x08, 0x94, 0xd3, 0x01, 0x08, + 0x2d, 0xe9, 0xf7, 0x43, 0x04, 0x46, 0x17, 0x46, 0x99, 0x46, 0x0e, 0x46, + 0x29, 0xb9, 0x4f, 0xf0, 0xff, 0x38, 0x40, 0x46, 0x03, 0xb0, 0xbd, 0xe8, + 0xf0, 0x83, 0x00, 0x2a, 0xf7, 0xd0, 0x0b, 0x69, 0x38, 0x46, 0x8d, 0x68, + 0x1d, 0x44, 0x04, 0x23, 0x29, 0x46, 0x0d, 0xeb, 0x03, 0x02, 0xff, 0xf7, + 0xa3, 0xff, 0x80, 0x46, 0x00, 0x28, 0xea, 0xd1, 0xbd, 0xf8, 0x04, 0x10, + 0x46, 0xf6, 0x08, 0x12, 0xf3, 0x68, 0x91, 0x42, 0x22, 0xd1, 0xbd, 0xf8, + 0x06, 0x10, 0x99, 0x42, 0xdf, 0xd1, 0x04, 0x23, 0x29, 0x44, 0x38, 0x46, + 0x0d, 0xeb, 0x03, 0x02, 0xff, 0xf7, 0x8e, 0xff, 0x00, 0x28, 0xd6, 0xd1, + 0xbd, 0xf8, 0x04, 0x20, 0x46, 0xf6, 0x07, 0x13, 0x9a, 0x42, 0xd0, 0xd1, + 0x00, 0x23, 0xbd, 0xf8, 0x06, 0x20, 0xa4, 0xf8, 0x08, 0x90, 0xa3, 0x72, + 0xf3, 0x68, 0x2b, 0x44, 0x04, 0x35, 0xe3, 0x60, 0x13, 0x44, 0x25, 0x61, + 0x63, 0x61, 0xc4, 0xe9, 0x00, 0x67, 0xc2, 0xe7, 0x00, 0x2b, 0xe7, 0xd0, + 0xbd, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4f, 0xdf, 0xf8, 0x30, 0xb1, + 0x07, 0x46, 0x88, 0x46, 0x00, 0x26, 0xdf, 0xf8, 0x20, 0x91, 0x0b, 0xf1, + 0x6c, 0x0a, 0x2d, 0xed, 0x02, 0x8b, 0x85, 0xb0, 0xcd, 0xe9, 0x02, 0x23, + 0x10, 0x9b, 0xb3, 0x42, 0x01, 0xd8, 0x00, 0x20, 0x11, 0xe0, 0x10, 0x9b, + 0x38, 0x46, 0x40, 0x4a, 0x9d, 0x1b, 0x02, 0x9b, 0xb5, 0xf5, 0x00, 0x3f, + 0x06, 0xeb, 0x03, 0x04, 0x28, 0xbf, 0x4f, 0xf4, 0x00, 0x35, 0x21, 0x46, + 0x2b, 0x46, 0xff, 0xf7, 0x4d, 0xff, 0x28, 0xb1, 0x01, 0x20, 0x05, 0xb0, + 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x3b, 0x78, 0x02, 0x2b, + 0x03, 0x9b, 0x33, 0x44, 0x08, 0xee, 0x10, 0x3a, 0x48, 0xd1, 0x9b, 0xf8, + 0xa4, 0x32, 0x00, 0x2b, 0x3c, 0xd1, 0x98, 0xf8, 0x00, 0x30, 0x01, 0x2b, + 0x25, 0xd1, 0x03, 0x9c, 0x58, 0x46, 0x43, 0x69, 0x13, 0xf0, 0x0c, 0x0f, + 0x1f, 0xd0, 0x34, 0x44, 0x81, 0x68, 0x8c, 0x42, 0x05, 0xeb, 0x04, 0x0e, + 0x49, 0xd2, 0x8e, 0x45, 0x17, 0xd9, 0xae, 0xeb, 0x01, 0x03, 0xa1, 0xeb, + 0x04, 0x0c, 0x00, 0x22, 0x00, 0x69, 0x08, 0x44, 0x86, 0x45, 0x03, 0xd9, + 0x84, 0x42, 0x34, 0xbf, 0x03, 0x1b, 0x00, 0x23, 0x64, 0x1a, 0x09, 0xeb, + 0x0c, 0x01, 0x50, 0x46, 0xcd, 0xe9, 0x00, 0x21, 0x04, 0xeb, 0x0c, 0x02, + 0x39, 0x46, 0xfe, 0xf7, 0xa2, 0xfe, 0x98, 0xf8, 0x00, 0x30, 0x02, 0x2b, + 0x1d, 0xd1, 0x9b, 0xf8, 0xa4, 0x32, 0xd3, 0xb1, 0x00, 0x23, 0x18, 0xee, + 0x10, 0x2a, 0x41, 0x46, 0x50, 0x46, 0x00, 0x93, 0x2b, 0x46, 0xcd, 0xf8, + 0x04, 0x90, 0xfe, 0xf7, 0x90, 0xfe, 0x0e, 0xe0, 0xcd, 0xe9, 0x00, 0x09, + 0x2b, 0x46, 0x22, 0x46, 0x39, 0x46, 0x50, 0x46, 0xfe, 0xf7, 0x87, 0xfe, + 0x3b, 0x78, 0x01, 0x2b, 0xb7, 0xd1, 0x98, 0xf8, 0x00, 0x30, 0x01, 0x2b, + 0x0a, 0xd1, 0x2b, 0x46, 0x4a, 0x46, 0x18, 0xee, 0x10, 0x1a, 0x40, 0x46, + 0xfd, 0xf7, 0x48, 0xfe, 0x00, 0x28, 0x99, 0xd1, 0x2e, 0x44, 0x81, 0xe7, + 0x02, 0x9c, 0x05, 0x48, 0xab, 0xe7, 0x62, 0x1a, 0x2b, 0x46, 0x4f, 0xf0, + 0x00, 0x0c, 0x02, 0xf0, 0x0f, 0x02, 0xb5, 0xe7, 0x08, 0x0b, 0x00, 0x24, + 0x54, 0x07, 0x00, 0x24, 0x28, 0x07, 0x00, 0x24, 0x2d, 0xe9, 0xf7, 0x43, + 0x04, 0x46, 0x0f, 0x46, 0x90, 0x46, 0x1e, 0x46, 0x4f, 0xf6, 0xff, 0x79, + 0xd4, 0xe9, 0x04, 0x23, 0x9a, 0x42, 0x15, 0xd2, 0x23, 0x68, 0xdb, 0x68, + 0x23, 0xb1, 0xe3, 0x68, 0x93, 0x42, 0x04, 0xbf, 0x04, 0x33, 0x23, 0x61, + 0x04, 0x23, 0x21, 0x69, 0x60, 0x68, 0x0d, 0xeb, 0x03, 0x02, 0xff, 0xf7, + 0xb9, 0xfe, 0x18, 0xbb, 0xa3, 0x7a, 0x25, 0x69, 0x33, 0xb1, 0xe3, 0x68, + 0xab, 0x42, 0x03, 0xd8, 0x01, 0x20, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, + 0x21, 0x89, 0xbd, 0xf8, 0x06, 0x30, 0x49, 0x45, 0x03, 0xf1, 0x04, 0x02, + 0x03, 0xd0, 0xbd, 0xf8, 0x04, 0xc0, 0x8c, 0x45, 0x0b, 0xd1, 0x16, 0xb1, + 0xbd, 0xf8, 0x04, 0x10, 0x31, 0x80, 0x04, 0x35, 0x3d, 0x60, 0xa8, 0xf8, + 0x00, 0x30, 0x23, 0x69, 0x13, 0x44, 0x23, 0x61, 0xe5, 0xe7, 0x15, 0x44, + 0x25, 0x61, 0xc7, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0xdf, 0xe7, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x4f, 0xad, 0xf5, 0x55, 0x7d, 0x17, 0x78, 0x0d, 0x46, + 0x14, 0x46, 0x04, 0x93, 0x4f, 0xf4, 0x8e, 0x73, 0x7b, 0x43, 0xc6, 0x5c, + 0x00, 0xeb, 0x03, 0x0c, 0x00, 0x2e, 0x40, 0xf0, 0x0d, 0x82, 0x4f, 0xf4, + 0x8c, 0x72, 0x31, 0x46, 0x0c, 0xf1, 0x04, 0x00, 0x18, 0xf0, 0x56, 0xfc, + 0x32, 0x23, 0x22, 0x46, 0x29, 0x46, 0x11, 0xa8, 0xff, 0xf7, 0xb6, 0xfe, + 0x10, 0xb1, 0x4f, 0xf0, 0xff, 0x30, 0x06, 0xe1, 0x11, 0x9b, 0x00, 0x2b, + 0xf9, 0xd0, 0x12, 0x9b, 0x00, 0x2b, 0xf6, 0xd0, 0x33, 0x46, 0x0d, 0xf1, + 0x1a, 0x02, 0x07, 0xa9, 0x11, 0xa8, 0xff, 0xf7, 0x8d, 0xff, 0x00, 0x28, + 0x40, 0xf0, 0xf7, 0x80, 0xbd, 0xf8, 0x1a, 0x30, 0x71, 0x2b, 0xe8, 0xd1, + 0x43, 0xaa, 0x07, 0x99, 0x20, 0x46, 0xff, 0xf7, 0x55, 0xfe, 0x00, 0x28, + 0xe1, 0xd1, 0xa5, 0x4c, 0x30, 0x23, 0x2f, 0xaa, 0x08, 0xa8, 0x08, 0x94, + 0x8a, 0x34, 0x21, 0x46, 0x10, 0xf0, 0xc2, 0xfa, 0x00, 0x28, 0xd6, 0xd1, + 0x08, 0x99, 0x2f, 0x9b, 0x19, 0x44, 0xa1, 0x42, 0x40, 0xf0, 0xf7, 0x80, + 0x37, 0xaa, 0x08, 0xa8, 0x37, 0x96, 0xfe, 0xf7, 0xf6, 0xfd, 0x37, 0x9b, + 0x03, 0x43, 0x40, 0xf0, 0xeb, 0x80, 0x8e, 0xab, 0x60, 0xaa, 0x21, 0x46, + 0x08, 0xa8, 0x10, 0xf0, 0xbf, 0xfa, 0x00, 0x28, 0x40, 0xf0, 0xdf, 0x80, + 0x61, 0x9a, 0x07, 0x2a, 0x40, 0xf0, 0xd8, 0x80, 0x92, 0x49, 0x62, 0x98, + 0x19, 0xf0, 0x60, 0xff, 0x00, 0x28, 0x40, 0xf0, 0xd1, 0x80, 0x8f, 0x9a, + 0x08, 0x2a, 0x40, 0xf0, 0xca, 0x80, 0x8e, 0x49, 0x90, 0x98, 0x19, 0xf0, + 0x55, 0xff, 0x00, 0x28, 0x40, 0xf0, 0xc3, 0x80, 0x04, 0x23, 0x2f, 0xaa, + 0x21, 0x46, 0x08, 0xa8, 0x10, 0xf0, 0x8c, 0xfa, 0x00, 0x28, 0x40, 0xf0, + 0xb7, 0x80, 0x30, 0x23, 0x2f, 0xaa, 0x21, 0x46, 0x08, 0xa8, 0x10, 0xf0, + 0x83, 0xfa, 0x00, 0x28, 0x40, 0xf0, 0xab, 0x80, 0x37, 0x90, 0x37, 0xaa, + 0x21, 0x46, 0x08, 0xa8, 0xfe, 0xf7, 0xbb, 0xfd, 0x00, 0x28, 0x40, 0xf0, + 0x9f, 0x80, 0x37, 0x9b, 0x01, 0x2b, 0x40, 0xf0, 0x9b, 0x80, 0x04, 0x23, + 0x2f, 0xaa, 0x21, 0x46, 0x08, 0xa8, 0x10, 0xf0, 0x6d, 0xfa, 0x00, 0x28, + 0x40, 0xf0, 0x8f, 0x80, 0xdd, 0xf8, 0xbc, 0x80, 0xb8, 0xf1, 0x20, 0x0f, + 0x40, 0xf0, 0x83, 0x80, 0x08, 0x9b, 0x1f, 0xac, 0x03, 0xf1, 0x20, 0x05, + 0x18, 0x68, 0x08, 0x33, 0x53, 0xf8, 0x04, 0x1c, 0x22, 0x46, 0xab, 0x42, + 0x03, 0xc2, 0x14, 0x46, 0xf6, 0xd1, 0x00, 0x23, 0x01, 0x22, 0x60, 0xa8, + 0xcd, 0xe9, 0x88, 0x23, 0xcd, 0xe9, 0x8a, 0x32, 0xcd, 0xe9, 0x8c, 0x33, + 0x0d, 0xf0, 0xe2, 0xff, 0x7f, 0xa8, 0x0d, 0xf0, 0xd3, 0xff, 0x60, 0xa8, + 0x0e, 0xf0, 0xb9, 0xfa, 0x03, 0x23, 0x60, 0xa8, 0x8d, 0xf8, 0x80, 0x31, + 0x0e, 0xf0, 0xde, 0xf8, 0x28, 0xb1, 0x60, 0xa8, 0x0e, 0xf0, 0xaf, 0xfa, + 0x7f, 0xa8, 0x0e, 0xf0, 0x9a, 0xfa, 0x41, 0x23, 0x43, 0xaa, 0x7f, 0xa9, + 0x60, 0xa8, 0x0e, 0xf0, 0x43, 0xfb, 0x00, 0x28, 0x70, 0xd0, 0x60, 0xa8, + 0x4f, 0xf0, 0xff, 0x34, 0x0e, 0xf0, 0x9f, 0xfa, 0x7f, 0xa8, 0x0e, 0xf0, + 0x8a, 0xfa, 0x8b, 0xa8, 0x0e, 0xf0, 0x74, 0xfa, 0x88, 0xa8, 0x0e, 0xf0, + 0x71, 0xfa, 0x60, 0xa8, 0x0e, 0xf0, 0x93, 0xfa, 0x7f, 0xa8, 0x0e, 0xf0, + 0x7e, 0xfa, 0x00, 0x2c, 0x7f, 0xf4, 0x31, 0xaf, 0x0d, 0xf1, 0x9c, 0x09, + 0x21, 0x46, 0x20, 0x22, 0x0f, 0x94, 0x48, 0x46, 0xcd, 0xe9, 0x0d, 0x44, + 0x18, 0xf0, 0x76, 0xfb, 0x49, 0x46, 0x0d, 0xa8, 0xff, 0xf7, 0x66, 0xfa, + 0x28, 0xbb, 0x20, 0x22, 0x17, 0xa9, 0x0d, 0xa8, 0x0d, 0xf0, 0x4e, 0xfe, + 0xf8, 0xb9, 0x2f, 0xa9, 0x0d, 0xa8, 0x0d, 0xf0, 0x1f, 0xfe, 0xd0, 0xb9, + 0x01, 0x23, 0x30, 0x25, 0xa2, 0x46, 0xdf, 0xf8, 0x08, 0xb1, 0x8d, 0xf8, + 0x28, 0x30, 0x2f, 0xa9, 0x0d, 0xa8, 0x05, 0x93, 0xcd, 0xf8, 0x3c, 0xa0, + 0xcd, 0xe9, 0x0d, 0xaa, 0xff, 0xf7, 0x4a, 0xfa, 0x48, 0xb9, 0x05, 0x9b, + 0x00, 0x2b, 0x62, 0xd0, 0x10, 0x22, 0x59, 0x46, 0x0d, 0xa8, 0x0d, 0xf0, + 0x2f, 0xfe, 0x00, 0x28, 0x6e, 0xd0, 0x0d, 0xa8, 0x0d, 0xf0, 0x9a, 0xfe, + 0xf7, 0xe6, 0x6f, 0xf0, 0x0b, 0x00, 0x0d, 0xf5, 0x55, 0x7d, 0xbd, 0xe8, + 0xf0, 0x8f, 0x6f, 0xf0, 0x0a, 0x00, 0xf8, 0xe7, 0x6f, 0xf0, 0x09, 0x00, + 0xf5, 0xe7, 0x6f, 0xf0, 0x08, 0x00, 0xf2, 0xe7, 0x6f, 0xf0, 0x07, 0x00, + 0xef, 0xe7, 0x6f, 0xf0, 0x06, 0x00, 0xec, 0xe7, 0x6f, 0xf0, 0x05, 0x00, + 0xe9, 0xe7, 0x6f, 0xf0, 0x04, 0x00, 0xe6, 0xe7, 0x6f, 0xf0, 0x02, 0x00, + 0xe3, 0xe7, 0x6f, 0xf0, 0x01, 0x00, 0xe0, 0xe7, 0x7f, 0xa9, 0x60, 0xa8, + 0x0f, 0xf0, 0xf0, 0xfa, 0x00, 0x28, 0x88, 0xd1, 0x20, 0x22, 0x1f, 0xa9, + 0x8b, 0xa8, 0x0e, 0xf0, 0x8f, 0xfa, 0x8e, 0xa8, 0x0d, 0xf0, 0x3c, 0xff, + 0x8b, 0xa9, 0x60, 0xa8, 0x0e, 0xf0, 0xe6, 0xf8, 0x04, 0x46, 0xb8, 0xb9, + 0x7f, 0xa9, 0x60, 0xa8, 0x0f, 0xf0, 0xdc, 0xfa, 0x04, 0x46, 0x88, 0xb9, + 0x7f, 0xab, 0x8b, 0xaa, 0x8e, 0xa9, 0x60, 0xa8, 0xfe, 0xf7, 0xb6, 0xfa, + 0x04, 0x46, 0x48, 0xb9, 0x01, 0x46, 0x94, 0xa8, 0x0d, 0xf0, 0x9b, 0xff, + 0x68, 0xb1, 0x8e, 0xa9, 0x88, 0xa8, 0x0e, 0xf0, 0x4b, 0xfb, 0x04, 0x46, + 0x8e, 0xa8, 0x0e, 0xf0, 0xf2, 0xf9, 0x20, 0x22, 0x17, 0xa9, 0x88, 0xa8, + 0x0d, 0xf0, 0xa2, 0xff, 0x61, 0xe7, 0x08, 0x4c, 0xf4, 0xe7, 0x20, 0x22, + 0x8e, 0xa9, 0x0d, 0xa8, 0x0d, 0xf0, 0xcc, 0xfd, 0x00, 0x28, 0x95, 0xd0, + 0x9b, 0xe7, 0x00, 0xbf, 0x00, 0x04, 0x00, 0x08, 0xe4, 0xd8, 0x01, 0x08, + 0xf4, 0xd8, 0x01, 0x08, 0x80, 0xb0, 0xff, 0xff, 0xc2, 0xd3, 0x01, 0x08, + 0x01, 0x22, 0x0a, 0xa9, 0x0d, 0xa8, 0x0d, 0xf0, 0xb9, 0xfd, 0x00, 0x28, + 0x89, 0xd1, 0x8e, 0xa9, 0x0d, 0xa8, 0x0d, 0xf0, 0x89, 0xfd, 0x03, 0x46, + 0x00, 0x28, 0x82, 0xd1, 0x37, 0xaa, 0x20, 0x2d, 0x02, 0xeb, 0x04, 0x00, + 0x28, 0xd9, 0x0d, 0xf5, 0x0e, 0x7c, 0x03, 0x46, 0x0d, 0xf5, 0x16, 0x7e, + 0x62, 0x46, 0x08, 0x33, 0x03, 0xca, 0x72, 0x45, 0x43, 0xf8, 0x08, 0x0c, + 0x43, 0xf8, 0x04, 0x1c, 0x94, 0x46, 0xf5, 0xd1, 0x20, 0x3d, 0xad, 0xb2, + 0x9d, 0xf8, 0x28, 0x30, 0x20, 0x34, 0x01, 0x33, 0xa4, 0xb2, 0x8d, 0xf8, + 0x28, 0x30, 0x00, 0x23, 0x00, 0x2d, 0x7f, 0xf4, 0x4e, 0xaf, 0x0d, 0xa8, + 0x0d, 0xf0, 0xfc, 0xfd, 0x3b, 0xa9, 0x0a, 0xa8, 0x0c, 0x95, 0xcd, 0xe9, + 0x0a, 0x55, 0xff, 0xf7, 0x97, 0xf9, 0x48, 0xb1, 0x0a, 0xa8, 0x55, 0xe7, + 0x2a, 0x46, 0x8e, 0xa9, 0x05, 0x93, 0x18, 0xf0, 0x8d, 0xfa, 0x05, 0x9b, + 0x1d, 0x46, 0xdf, 0xe7, 0x0d, 0xf2, 0x6d, 0x14, 0x10, 0x22, 0x0a, 0xa8, + 0x21, 0x46, 0x0d, 0xf0, 0x73, 0xfd, 0x00, 0x28, 0xec, 0xd1, 0x2f, 0xa9, + 0x0a, 0xa8, 0x0d, 0xf0, 0x43, 0xfd, 0x00, 0x28, 0xe6, 0xd1, 0x2f, 0xab, + 0x53, 0xa9, 0x13, 0xf8, 0x01, 0x2b, 0xb8, 0xf1, 0x01, 0x08, 0x11, 0xf8, + 0x01, 0x0f, 0x82, 0xea, 0x00, 0x02, 0x46, 0xea, 0x02, 0x06, 0xf4, 0xd1, + 0x00, 0x2e, 0xd7, 0xd1, 0x0a, 0xa8, 0x0d, 0xf0, 0xc9, 0xfd, 0x31, 0x46, + 0x4f, 0xf4, 0x8c, 0x72, 0x8e, 0xa8, 0x18, 0xf0, 0x71, 0xfa, 0x37, 0xa9, + 0x8e, 0xa8, 0xfe, 0xf7, 0x7b, 0xfc, 0x00, 0x28, 0x7f, 0xf4, 0x1b, 0xae, + 0x10, 0x25, 0x31, 0x46, 0x0d, 0xa8, 0x2a, 0x46, 0x18, 0xf0, 0x64, 0xfa, + 0x04, 0x9b, 0x09, 0xaa, 0x29, 0x46, 0x05, 0xfb, 0x07, 0x37, 0x8e, 0xa8, + 0x0d, 0xab, 0xcd, 0xf8, 0x00, 0x90, 0x0c, 0x37, 0x09, 0x96, 0xcd, 0xe9, + 0x01, 0x47, 0x10, 0xf0, 0x61, 0xf9, 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, + 0x40, 0x42, 0x0a, 0xe7, 0x01, 0x20, 0x08, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, + 0x13, 0x78, 0xad, 0xf5, 0x0f, 0x7d, 0x82, 0x46, 0x0d, 0x46, 0x01, 0x2b, + 0x93, 0x46, 0x0d, 0xd1, 0x4b, 0x69, 0x13, 0xf0, 0x0c, 0x0f, 0x09, 0xd0, + 0x90, 0xf8, 0x1c, 0x31, 0x33, 0xb9, 0x4f, 0xf0, 0xff, 0x31, 0x08, 0x46, + 0x0d, 0xf5, 0x0f, 0x7d, 0xbd, 0xe8, 0xf0, 0x8f, 0x40, 0x22, 0x00, 0x21, + 0x6d, 0xa8, 0xdf, 0xf8, 0xa8, 0x82, 0x18, 0xf0, 0x2f, 0xfa, 0xa1, 0x4a, + 0xa1, 0x4b, 0x00, 0x24, 0xaf, 0x68, 0x2e, 0x69, 0xdf, 0xf8, 0x98, 0x92, + 0x3e, 0x44, 0xdf, 0xf8, 0x98, 0xe2, 0xdf, 0xf8, 0x98, 0xc2, 0x9d, 0x48, + 0x9d, 0x49, 0x7d, 0x94, 0xcd, 0xe9, 0x6b, 0x23, 0xeb, 0x68, 0xf3, 0x18, + 0xcd, 0xe9, 0x65, 0x98, 0xcd, 0xe9, 0x02, 0x39, 0xcd, 0xe9, 0x04, 0x8e, + 0x95, 0x4b, 0xdf, 0xf8, 0x64, 0x82, 0x0a, 0x93, 0xcd, 0xe9, 0x63, 0x44, + 0xcd, 0xe9, 0x67, 0xec, 0xcd, 0xe9, 0x69, 0x01, 0xcd, 0xe9, 0x06, 0xc0, + 0xcd, 0xe9, 0x08, 0x12, 0x02, 0x9b, 0xa3, 0x42, 0x42, 0xd8, 0x29, 0xa9, + 0x63, 0xa8, 0x0d, 0xf0, 0xbf, 0xfb, 0x29, 0x46, 0x4f, 0xf6, 0xff, 0x73, + 0x5a, 0x46, 0x23, 0xa8, 0xff, 0xf7, 0x60, 0xfc, 0x01, 0x46, 0x00, 0x28, + 0xbb, 0xd1, 0x4f, 0xf0, 0xff, 0x35, 0x88, 0x4e, 0x07, 0x46, 0xdf, 0xf8, + 0x38, 0x92, 0x2c, 0x46, 0x06, 0xf1, 0x5b, 0x08, 0x23, 0x9b, 0x00, 0x2b, + 0xad, 0xd0, 0x24, 0x9b, 0x00, 0x2b, 0xaa, 0xd0, 0x0d, 0xa9, 0x0d, 0xf1, + 0x32, 0x03, 0x0c, 0xaa, 0x23, 0xa8, 0xff, 0xf7, 0x2f, 0xfd, 0x01, 0x1e, + 0xa3, 0xdb, 0x40, 0xf0, 0x53, 0x82, 0xbd, 0xf8, 0x32, 0x30, 0x10, 0x2b, + 0x59, 0xd1, 0xbd, 0xf8, 0x30, 0x70, 0x20, 0x2f, 0x97, 0xd1, 0x0d, 0x99, + 0x3b, 0x46, 0x43, 0xaa, 0x58, 0x46, 0xff, 0xf7, 0xf1, 0xfb, 0x01, 0x46, + 0x00, 0x28, 0x90, 0xd1, 0x43, 0xa9, 0x3a, 0x46, 0x29, 0xa8, 0x19, 0xf0, + 0x21, 0xfd, 0x01, 0x46, 0x00, 0x28, 0x88, 0xd1, 0x01, 0x27, 0xd3, 0xe7, + 0x02, 0x9b, 0xa3, 0xeb, 0x04, 0x09, 0xb9, 0xf5, 0x80, 0x7f, 0x28, 0xbf, + 0x4f, 0xf4, 0x80, 0x79, 0xa7, 0x42, 0x05, 0xd9, 0x04, 0xeb, 0x09, 0x03, + 0x9f, 0x42, 0x38, 0xbf, 0xa7, 0xeb, 0x04, 0x09, 0xa6, 0x42, 0x05, 0xd9, + 0x04, 0xeb, 0x09, 0x03, 0x9e, 0x42, 0x38, 0xbf, 0xa6, 0xeb, 0x04, 0x09, + 0x21, 0x46, 0x4b, 0x46, 0x62, 0x4a, 0x58, 0x46, 0xff, 0xf7, 0xc6, 0xfb, + 0x01, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x65, 0xaf, 0x9b, 0xf8, 0x00, 0x30, + 0x01, 0x2b, 0x12, 0xd1, 0x6b, 0x69, 0x13, 0xf0, 0x0c, 0x0f, 0x0e, 0xd0, + 0xa7, 0x42, 0x0c, 0xd8, 0xa6, 0x42, 0x0a, 0xd9, 0xe2, 0x1b, 0x59, 0x46, + 0x50, 0x46, 0xcd, 0xf8, 0x04, 0x80, 0x02, 0xf0, 0x0f, 0x03, 0x00, 0x93, + 0x4b, 0x46, 0xfe, 0xf7, 0x3c, 0xfb, 0xb9, 0xf1, 0x00, 0x0f, 0x04, 0xd0, + 0x4a, 0x46, 0x41, 0x46, 0x63, 0xa8, 0x0d, 0xf0, 0xd9, 0xfa, 0x4c, 0x44, + 0x76, 0xe7, 0x01, 0x2b, 0x3d, 0xd1, 0xbd, 0xf8, 0x30, 0x30, 0x20, 0x2b, + 0x3f, 0xf6, 0x3b, 0xaf, 0x0d, 0x99, 0x43, 0xaa, 0x58, 0x46, 0xff, 0xf7, + 0x95, 0xfb, 0x01, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x34, 0xaf, 0x9d, 0xf8, + 0x30, 0x50, 0x20, 0x2d, 0x7b, 0xd8, 0x40, 0x22, 0x02, 0x90, 0x6d, 0xa8, + 0x18, 0xf0, 0x66, 0xf9, 0x03, 0x9b, 0x02, 0x99, 0x5b, 0x22, 0x65, 0x93, + 0x63, 0xa8, 0x04, 0x9b, 0x7d, 0x91, 0x66, 0x93, 0x05, 0x9b, 0x67, 0x93, + 0x06, 0x9b, 0x68, 0x93, 0x07, 0x9b, 0x69, 0x93, 0x08, 0x9b, 0x6a, 0x93, + 0x09, 0x9b, 0x6b, 0x93, 0x0a, 0x9b, 0xcd, 0xe9, 0x63, 0x11, 0x31, 0x46, + 0x6c, 0x93, 0x0d, 0xf0, 0xa5, 0xfa, 0x3a, 0xa9, 0x63, 0xa8, 0x0d, 0xf0, + 0x07, 0xfb, 0x2a, 0x46, 0x43, 0xa9, 0x3a, 0xa8, 0x19, 0xf0, 0x9e, 0xfc, + 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x45, 0x42, 0x50, 0xe7, 0x22, 0x2b, + 0x7f, 0xf4, 0x4e, 0xaf, 0x00, 0x2d, 0x7f, 0xf4, 0x4b, 0xaf, 0xbd, 0xf8, + 0x30, 0x30, 0x80, 0x2b, 0x3f, 0xf6, 0xf7, 0xae, 0x43, 0xac, 0x0d, 0x99, + 0x58, 0x46, 0x22, 0x46, 0xff, 0xf7, 0x50, 0xfb, 0x01, 0x46, 0x00, 0x28, + 0x7f, 0xf4, 0xef, 0xae, 0x30, 0x23, 0x31, 0xaa, 0x41, 0x46, 0x0e, 0xa8, + 0xbd, 0xf8, 0x30, 0xa0, 0x0e, 0x96, 0x0f, 0xf0, 0xbb, 0xff, 0x70, 0xbb, + 0x31, 0x9b, 0x3a, 0xaa, 0x0e, 0x9d, 0x0e, 0xa8, 0x1d, 0x44, 0x63, 0xab, + 0x29, 0x46, 0x0f, 0xf0, 0xc5, 0xff, 0x20, 0xbb, 0x3b, 0x9a, 0x07, 0x2a, + 0x21, 0xd1, 0x49, 0x46, 0x3c, 0x98, 0x19, 0xf0, 0x69, 0xfc, 0xe0, 0xb9, + 0x64, 0x9a, 0x08, 0x2a, 0x19, 0xd1, 0x15, 0x49, 0x65, 0x98, 0x19, 0xf0, + 0x61, 0xfc, 0xa0, 0xb9, 0x03, 0x23, 0x31, 0xaa, 0x29, 0x46, 0x0e, 0xa8, + 0x0f, 0xf0, 0x9a, 0xff, 0x68, 0xb9, 0x31, 0x9a, 0x5a, 0xb1, 0x51, 0x1e, + 0x0e, 0x9b, 0x31, 0x91, 0x18, 0x78, 0x30, 0xb9, 0x58, 0x1c, 0x13, 0x44, + 0x9d, 0x42, 0x0e, 0x90, 0x01, 0xd1, 0x41, 0x29, 0x1c, 0xd0, 0x4f, 0xf0, + 0xff, 0x34, 0x4f, 0xf0, 0xff, 0x35, 0xfd, 0xe6, 0xab, 0xd9, 0x83, 0x1f, + 0x19, 0xcd, 0xe0, 0x5b, 0x7f, 0x52, 0x0e, 0x51, 0x8c, 0x68, 0x05, 0x9b, + 0x00, 0x03, 0x00, 0x08, 0x28, 0x0c, 0x02, 0x24, 0xfd, 0xd8, 0x01, 0x08, + 0x85, 0xae, 0x67, 0xbb, 0x67, 0xe6, 0x09, 0x6a, 0x72, 0xf3, 0x6e, 0x3c, + 0x3a, 0xf5, 0x4f, 0xa5, 0xec, 0xd8, 0x01, 0x08, 0x63, 0xa8, 0x01, 0x25, + 0x0d, 0xf0, 0x00, 0xfd, 0x00, 0x23, 0x85, 0xa8, 0x84, 0x93, 0xcd, 0xe9, + 0x82, 0x53, 0x0d, 0xf0, 0xed, 0xfc, 0x0e, 0x99, 0xa1, 0x4b, 0x63, 0xa8, + 0x0b, 0x91, 0x5b, 0x1a, 0x02, 0x93, 0x0d, 0xf0, 0xce, 0xff, 0x03, 0x22, + 0x63, 0xa8, 0x8d, 0xf8, 0x8c, 0x21, 0x0d, 0xf0, 0xf3, 0xfd, 0x02, 0x9b, + 0x0b, 0x99, 0x58, 0xb1, 0x4f, 0xf0, 0xff, 0x34, 0x63, 0xa8, 0x0d, 0xf0, + 0xc0, 0xff, 0x82, 0xa8, 0x0d, 0xf0, 0x98, 0xff, 0x85, 0xa8, 0x0d, 0xf0, + 0xa8, 0xff, 0xbc, 0xe7, 0x0a, 0x46, 0x63, 0xa8, 0x85, 0xa9, 0x0e, 0xf0, + 0x51, 0xf8, 0x00, 0x28, 0xec, 0xd1, 0x85, 0xa9, 0x63, 0xa8, 0x0f, 0xf0, + 0x6f, 0xf8, 0x00, 0x28, 0xe6, 0xd1, 0xa2, 0x44, 0x30, 0x23, 0x10, 0xaa, + 0x0f, 0x94, 0x51, 0x46, 0xcd, 0xe9, 0x11, 0x50, 0xcd, 0xe9, 0x13, 0x05, + 0xcd, 0xe9, 0x15, 0x00, 0x0f, 0xa8, 0x0f, 0xf0, 0x2b, 0xff, 0x60, 0xb1, + 0xa0, 0xf5, 0x9f, 0x44, 0x11, 0xa8, 0x0d, 0xf0, 0x73, 0xff, 0x14, 0xa8, + 0x0d, 0xf0, 0x70, 0xff, 0x20, 0x1e, 0x18, 0xbf, 0x01, 0x20, 0x44, 0x42, + 0xcc, 0xe7, 0xdd, 0xe9, 0x0f, 0x32, 0x13, 0x44, 0x9a, 0x45, 0x40, 0xf0, + 0xf1, 0x80, 0x11, 0xaa, 0x51, 0x46, 0x0f, 0xa8, 0x0f, 0xf0, 0x71, 0xff, + 0x04, 0x46, 0x30, 0xb9, 0x14, 0xaa, 0x51, 0x46, 0x0f, 0xa8, 0x0f, 0xf0, + 0x6a, 0xff, 0x04, 0x46, 0x10, 0xb1, 0xa4, 0xf5, 0x9f, 0x44, 0xdd, 0xe7, + 0x31, 0xa8, 0x0d, 0xf0, 0x8d, 0xfc, 0x9d, 0xf8, 0x8c, 0x31, 0x09, 0x2b, + 0xcd, 0xe9, 0x17, 0x54, 0xcd, 0xe9, 0x19, 0x45, 0xcd, 0xe9, 0x1b, 0x44, + 0xcd, 0xe9, 0x1d, 0x54, 0xcd, 0xe9, 0x1f, 0x45, 0xcd, 0xe9, 0x21, 0x44, + 0x01, 0xd1, 0x6b, 0x4c, 0xc8, 0xe7, 0x78, 0x9b, 0x00, 0x2b, 0xfa, 0xd0, + 0x01, 0x21, 0x11, 0xa8, 0x0d, 0xf0, 0xeb, 0xfc, 0x00, 0x28, 0x17, 0xda, + 0x66, 0x4c, 0x31, 0xa8, 0x0d, 0xf0, 0x45, 0xff, 0x17, 0xa8, 0x0d, 0xf0, + 0x2f, 0xff, 0x1a, 0xa8, 0x0d, 0xf0, 0x2c, 0xff, 0x1d, 0xa8, 0x0d, 0xf0, + 0x29, 0xff, 0x20, 0xa8, 0x0d, 0xf0, 0x26, 0xff, 0x00, 0x2c, 0xad, 0xd1, + 0x0f, 0x9a, 0x5e, 0x4b, 0x92, 0x45, 0x18, 0xbf, 0x1c, 0x46, 0xa7, 0xe7, + 0x76, 0xa9, 0x11, 0xa8, 0x0d, 0xf0, 0x8a, 0xfc, 0x00, 0x28, 0xe1, 0xda, + 0x01, 0x21, 0x14, 0xa8, 0x0d, 0xf0, 0xc7, 0xfc, 0x00, 0x28, 0xdb, 0xdb, + 0x76, 0xa9, 0x14, 0xa8, 0x0d, 0xf0, 0x7e, 0xfc, 0x00, 0x28, 0xd5, 0xda, + 0x7a, 0x9d, 0x29, 0xa9, 0x17, 0xa8, 0x07, 0x35, 0xed, 0x08, 0x20, 0x2d, + 0x28, 0xbf, 0x20, 0x25, 0x2a, 0x46, 0x0d, 0xf0, 0x8d, 0xff, 0x04, 0x46, + 0x00, 0x28, 0xc8, 0xd1, 0x7a, 0x9b, 0xe9, 0x00, 0xb3, 0xeb, 0xc5, 0x0f, + 0x3d, 0xd3, 0x76, 0xa9, 0x17, 0xa8, 0x0d, 0xf0, 0x65, 0xfc, 0x00, 0x28, + 0x07, 0xdb, 0x17, 0xa9, 0x76, 0xaa, 0x08, 0x46, 0x0e, 0xf0, 0x13, 0xfd, + 0x04, 0x46, 0x00, 0x28, 0xb5, 0xd1, 0x76, 0xaa, 0x14, 0xa9, 0x1a, 0xa8, + 0x0f, 0xf0, 0xa2, 0xfb, 0x04, 0x46, 0x00, 0x28, 0xad, 0xd1, 0x1a, 0xaa, + 0x17, 0xa9, 0x1d, 0xa8, 0x0e, 0xf0, 0x88, 0xf8, 0x04, 0x46, 0x00, 0x28, + 0xa5, 0xd1, 0x1d, 0xa9, 0x76, 0xaa, 0x08, 0x46, 0x0e, 0xf0, 0xc5, 0xfd, + 0x04, 0x46, 0x00, 0x28, 0x9d, 0xd1, 0x1a, 0xaa, 0x11, 0xa9, 0x20, 0xa8, + 0x0e, 0xf0, 0x78, 0xf8, 0x04, 0x46, 0x00, 0x28, 0x95, 0xd1, 0x20, 0xa9, + 0x76, 0xaa, 0x08, 0x46, 0x0e, 0xf0, 0xb5, 0xfd, 0x04, 0x46, 0x00, 0x28, + 0x8d, 0xd1, 0x63, 0xa8, 0x0d, 0xf0, 0x26, 0xfc, 0x01, 0x28, 0x0a, 0xd0, + 0xa4, 0xf5, 0x9d, 0x44, 0x85, 0xe7, 0xc9, 0x1a, 0x17, 0xa8, 0x0d, 0xf0, + 0x09, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xba, 0xd0, 0x7d, 0xe7, 0x3a, 0xa8, + 0x0d, 0xf0, 0xec, 0xfb, 0x6d, 0xab, 0x1d, 0xaa, 0x3a, 0xa9, 0x63, 0xa8, + 0xfe, 0xf7, 0x34, 0xf9, 0x04, 0x46, 0xa0, 0xb9, 0x85, 0xab, 0x20, 0xaa, + 0x31, 0xa9, 0x63, 0xa8, 0xfe, 0xf7, 0x2c, 0xf9, 0x04, 0x46, 0x60, 0xb9, + 0x31, 0xab, 0x3a, 0xaa, 0x63, 0xa8, 0x19, 0x46, 0x0f, 0xf0, 0x2a, 0xfa, + 0x04, 0x46, 0x20, 0xb9, 0x31, 0xa9, 0x63, 0xa8, 0x0f, 0xf0, 0x24, 0xfd, + 0x04, 0x46, 0x3a, 0xa8, 0x0d, 0xf0, 0xa3, 0xfe, 0x00, 0x2c, 0x7f, 0xf4, + 0x58, 0xaf, 0x21, 0x46, 0x37, 0xa8, 0x0d, 0xf0, 0x3c, 0xfc, 0x00, 0x28, + 0x3f, 0xf4, 0x50, 0xaf, 0x31, 0xa9, 0x76, 0xaa, 0x08, 0x46, 0x0e, 0xf0, + 0x70, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x48, 0xaf, 0x11, 0xa9, + 0x31, 0xa8, 0x0d, 0xf0, 0xe9, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, + 0x40, 0xaf, 0x3d, 0xe7, 0x07, 0x4c, 0xfb, 0xe6, 0x00, 0x2f, 0x14, 0xbf, + 0x21, 0x46, 0x01, 0x21, 0x49, 0xe5, 0x00, 0xbf, 0x5b, 0x03, 0x00, 0x08, + 0x80, 0xb0, 0xff, 0xff, 0x00, 0xb2, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xff, + 0x1a, 0xb0, 0xff, 0xff, 0x02, 0x78, 0x07, 0x49, 0x51, 0xf8, 0x22, 0x30, + 0x4b, 0xb1, 0x01, 0x3b, 0x41, 0xf8, 0x22, 0x30, 0x2b, 0xb9, 0x04, 0x4b, + 0x53, 0xf8, 0x22, 0x00, 0x03, 0x68, 0xdb, 0x68, 0x18, 0x47, 0x70, 0x47, + 0xf4, 0x05, 0x00, 0x24, 0x04, 0x00, 0x00, 0x24, 0x22, 0x4b, 0x00, 0xeb, + 0x40, 0x02, 0x01, 0x28, 0x03, 0xeb, 0x82, 0x02, 0x2d, 0xe9, 0xf0, 0x41, + 0x04, 0x46, 0x0a, 0x60, 0x25, 0xd0, 0x02, 0x28, 0x26, 0xd0, 0x48, 0xbb, + 0x1c, 0x4a, 0x5a, 0x60, 0x1c, 0x4f, 0x00, 0x25, 0x57, 0xf8, 0x24, 0x20, + 0x01, 0x32, 0x47, 0xf8, 0x24, 0x20, 0x0c, 0x22, 0x62, 0x43, 0x03, 0xeb, + 0x02, 0x08, 0x9c, 0x54, 0x17, 0x4b, 0x88, 0xf8, 0x01, 0x50, 0x53, 0xf8, + 0x24, 0x60, 0x33, 0x68, 0x30, 0x46, 0x9b, 0x6b, 0x98, 0x47, 0x57, 0xf8, + 0x24, 0x30, 0xc8, 0xf8, 0x08, 0x00, 0x01, 0x2b, 0x17, 0xd1, 0x33, 0x68, + 0x30, 0x46, 0x9b, 0x68, 0xbd, 0xe8, 0xf0, 0x41, 0x18, 0x47, 0x00, 0x22, + 0x1a, 0x61, 0xdb, 0xe7, 0x4f, 0xf0, 0x10, 0x62, 0xda, 0x61, 0xd7, 0xe7, + 0x0a, 0x4b, 0x1b, 0x78, 0x1b, 0xb1, 0x01, 0x46, 0x09, 0x48, 0x08, 0xf0, + 0xf9, 0xfd, 0x4f, 0xf0, 0xff, 0x30, 0xbd, 0xe8, 0xf0, 0x81, 0x28, 0x46, + 0xfb, 0xe7, 0x00, 0xbf, 0x00, 0x06, 0x00, 0x24, 0x00, 0x00, 0x02, 0x08, + 0xf4, 0x05, 0x00, 0x24, 0x04, 0x00, 0x00, 0x24, 0x08, 0x0b, 0x02, 0x24, + 0xd3, 0xd3, 0x01, 0x08, 0x73, 0xb5, 0x04, 0x46, 0x01, 0xa9, 0xc0, 0xb2, + 0xff, 0xf7, 0xa8, 0xff, 0x05, 0x46, 0x20, 0xb1, 0x4f, 0xf0, 0xff, 0x35, + 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, 0x01, 0x98, 0xfd, 0xf7, 0x7a, 0xf8, + 0x06, 0x46, 0x01, 0x98, 0xff, 0xf7, 0x86, 0xff, 0x2c, 0x23, 0x06, 0x48, + 0x03, 0xfb, 0x04, 0x04, 0x63, 0x1e, 0x03, 0x34, 0xa3, 0x42, 0xed, 0xd0, + 0x13, 0xf8, 0x01, 0x2f, 0xb2, 0x42, 0xf9, 0xd0, 0xe6, 0xe7, 0x00, 0xbf, + 0x28, 0x07, 0x00, 0x24, 0x13, 0xb5, 0x00, 0x20, 0x01, 0xa9, 0xff, 0xf7, + 0x85, 0xff, 0x01, 0x46, 0x10, 0xbb, 0x20, 0x23, 0x13, 0x4a, 0x01, 0x98, + 0xff, 0xf7, 0x06, 0xf9, 0x04, 0x1e, 0x18, 0xbf, 0x01, 0x24, 0x01, 0x98, + 0xff, 0xf7, 0x64, 0xff, 0xd4, 0xb9, 0x01, 0xa9, 0x01, 0x20, 0xff, 0xf7, + 0x73, 0xff, 0x98, 0xb9, 0x21, 0x46, 0x20, 0x23, 0x0b, 0x4a, 0x01, 0x98, + 0xff, 0xf7, 0xf4, 0xf8, 0x04, 0x1e, 0x18, 0xbf, 0x01, 0x24, 0x01, 0x98, + 0xff, 0xf7, 0x52, 0xff, 0x0c, 0xb1, 0x84, 0xf0, 0x01, 0x04, 0x20, 0x46, + 0x02, 0xb0, 0x10, 0xbd, 0x01, 0x24, 0xe2, 0xe7, 0x01, 0x24, 0xf2, 0xe7, + 0x00, 0x24, 0xf4, 0xe7, 0x28, 0x07, 0x00, 0x24, 0x54, 0x07, 0x00, 0x24, + 0x13, 0xb5, 0x00, 0x20, 0x01, 0xa9, 0xff, 0xf7, 0x51, 0xff, 0x90, 0xb9, + 0x01, 0x98, 0x01, 0x23, 0x6a, 0x46, 0x81, 0x68, 0x8d, 0xf8, 0x00, 0x30, + 0x40, 0x39, 0x21, 0xf0, 0x1f, 0x01, 0x20, 0x39, 0xff, 0xf7, 0x48, 0xf8, + 0x04, 0x46, 0x01, 0x98, 0xff, 0xf7, 0x2c, 0xff, 0x20, 0x46, 0x02, 0xb0, + 0x10, 0xbd, 0x01, 0x24, 0xfa, 0xe7, 0x00, 0x00, 0xf7, 0xb5, 0x04, 0x46, + 0x0f, 0x46, 0xc0, 0xb2, 0x69, 0x46, 0xff, 0xf7, 0x33, 0xff, 0x30, 0xb1, + 0x01, 0x25, 0x00, 0x98, 0xff, 0xf7, 0x1a, 0xff, 0x28, 0x46, 0x03, 0xb0, + 0xf0, 0xbd, 0x1b, 0x48, 0x2c, 0x23, 0x03, 0xfb, 0x04, 0x04, 0x00, 0x98, + 0x23, 0x69, 0xa6, 0x68, 0x1e, 0x44, 0x04, 0x23, 0x31, 0x46, 0x0d, 0xeb, + 0x03, 0x02, 0xff, 0xf7, 0xa5, 0xf8, 0x05, 0x46, 0x00, 0x28, 0xe7, 0xd1, + 0xbd, 0xf8, 0x04, 0x20, 0x46, 0xf6, 0x08, 0x13, 0xe4, 0x68, 0x9a, 0x42, + 0x1a, 0xd1, 0xbd, 0xf8, 0x06, 0x30, 0x9c, 0x42, 0x01, 0xd0, 0x03, 0x25, + 0xdb, 0xe7, 0x04, 0x23, 0x31, 0x19, 0x00, 0x98, 0x0d, 0xeb, 0x03, 0x02, + 0xff, 0xf7, 0x8e, 0xf8, 0x00, 0x28, 0xd1, 0xd1, 0xbd, 0xf8, 0x04, 0x20, + 0x46, 0xf6, 0x07, 0x13, 0x9a, 0x42, 0xee, 0xd1, 0xbd, 0xf8, 0x06, 0x30, + 0x23, 0x44, 0x33, 0x44, 0x3b, 0x60, 0xc6, 0xe7, 0x00, 0x2c, 0xf1, 0xd0, + 0xe5, 0xe7, 0x00, 0xbf, 0x28, 0x07, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x41, + 0x86, 0xb0, 0x02, 0x23, 0x05, 0x46, 0x00, 0x26, 0x01, 0xaf, 0xdf, 0xf8, + 0x58, 0x80, 0xad, 0xf8, 0x04, 0x30, 0x29, 0x46, 0x17, 0xf8, 0x01, 0x0b, + 0xff, 0xf7, 0xe2, 0xfe, 0x04, 0x46, 0x58, 0xb9, 0x28, 0x68, 0x10, 0x23, + 0x02, 0xaa, 0x81, 0x68, 0x20, 0x39, 0xff, 0xf7, 0x61, 0xf8, 0x04, 0x46, + 0x40, 0xb1, 0x28, 0x68, 0xff, 0xf7, 0xc0, 0xfe, 0x20, 0x46, 0x06, 0xb0, + 0xbd, 0xe8, 0xf0, 0x81, 0x01, 0x26, 0xe6, 0xe7, 0x10, 0x22, 0x41, 0x46, + 0x02, 0xa8, 0x19, 0xf0, 0x89, 0xf9, 0x04, 0x46, 0x00, 0x28, 0xf1, 0xd0, + 0x28, 0x68, 0xff, 0xf7, 0xaf, 0xfe, 0x00, 0x2e, 0xf0, 0xd0, 0x4f, 0xf0, + 0xff, 0x34, 0xe9, 0xe7, 0xd4, 0xd8, 0x01, 0x08, 0x38, 0xb5, 0x4f, 0xf4, + 0x8e, 0x74, 0x05, 0x46, 0x4c, 0x43, 0x02, 0xeb, 0x01, 0x11, 0x20, 0x44, + 0x0c, 0x31, 0x04, 0x30, 0xfe, 0xf7, 0x24, 0xf8, 0x00, 0x28, 0x03, 0x46, + 0x13, 0xbf, 0x00, 0x22, 0x01, 0x22, 0x03, 0x46, 0x4f, 0xf0, 0xff, 0x33, + 0x2a, 0x55, 0x18, 0x46, 0x38, 0xbd, 0x00, 0x00, 0x2d, 0xe9, 0xf7, 0x43, + 0x04, 0x46, 0x0f, 0x46, 0xc0, 0xb2, 0x01, 0xa9, 0xff, 0xf7, 0x9c, 0xfe, + 0x00, 0x28, 0x63, 0xd1, 0x20, 0x46, 0xff, 0xf7, 0xe9, 0xfe, 0x30, 0xb1, + 0x31, 0x4e, 0x2c, 0x25, 0x05, 0xfb, 0x04, 0x65, 0x6b, 0x69, 0xda, 0x06, + 0x0d, 0xd5, 0x0c, 0xb9, 0x01, 0x25, 0x03, 0xe0, 0x25, 0x46, 0x01, 0x98, + 0xfe, 0xf7, 0xe4, 0xff, 0x01, 0x98, 0xff, 0xf7, 0x71, 0xfe, 0x28, 0x46, + 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0xdd, 0xf8, 0x04, 0x80, 0x98, 0xf8, + 0x00, 0x90, 0xb9, 0xf1, 0x01, 0x0f, 0x2a, 0xd0, 0x24, 0x48, 0x29, 0x46, + 0x42, 0x46, 0xff, 0xf7, 0x8d, 0xfb, 0x05, 0x46, 0x2c, 0x23, 0x01, 0x98, + 0x63, 0x43, 0xf1, 0x58, 0xf2, 0x18, 0x20, 0x4b, 0x99, 0x42, 0x0a, 0xd1, + 0x13, 0x69, 0x92, 0x68, 0xd1, 0x43, 0x8b, 0x42, 0x05, 0xd8, 0x13, 0x44, + 0x82, 0x68, 0x93, 0x42, 0x01, 0xd2, 0x00, 0x2d, 0xd8, 0xd0, 0x1c, 0xb1, + 0x82, 0x68, 0x00, 0x21, 0xfe, 0xf7, 0xa8, 0xff, 0x17, 0x4b, 0x1b, 0x78, + 0x00, 0x2b, 0xc9, 0xd0, 0x16, 0x4b, 0x17, 0x49, 0x17, 0x48, 0x00, 0x2c, + 0x18, 0xbf, 0x19, 0x46, 0x08, 0xf0, 0x88, 0xfc, 0xc0, 0xe7, 0x13, 0xf0, + 0x0c, 0x0f, 0xd1, 0xd0, 0x3b, 0x46, 0x42, 0x46, 0x29, 0x46, 0x06, 0xf1, + 0x6c, 0x00, 0xff, 0xf7, 0x3d, 0xf9, 0x00, 0x28, 0x02, 0xda, 0x4f, 0xf0, + 0xff, 0x35, 0xcb, 0xe7, 0xc4, 0xd1, 0x3a, 0x46, 0x49, 0x46, 0x06, 0xf1, + 0x6c, 0x00, 0xff, 0xf7, 0x7d, 0xff, 0x00, 0x28, 0xbc, 0xd0, 0xf2, 0xe7, + 0x4f, 0xf0, 0xff, 0x35, 0xad, 0xe7, 0x00, 0xbf, 0x28, 0x07, 0x00, 0x24, + 0x94, 0x07, 0x00, 0x24, 0x3d, 0xb8, 0xf3, 0x96, 0x08, 0x0b, 0x02, 0x24, + 0xfd, 0xd3, 0x01, 0x08, 0xf5, 0xd3, 0x01, 0x08, 0x07, 0xd4, 0x01, 0x08, + 0x38, 0xb5, 0x0c, 0x46, 0x15, 0x46, 0xfc, 0xf7, 0xfb, 0xfe, 0x25, 0x44, + 0x21, 0x46, 0x11, 0xf8, 0x01, 0x3b, 0x98, 0x42, 0x03, 0xd1, 0xa9, 0x42, + 0xf9, 0xd1, 0x01, 0x20, 0x38, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x38, 0xb5, + 0x0c, 0x46, 0x01, 0x23, 0x11, 0x46, 0x05, 0x46, 0x22, 0x46, 0xfe, 0xf7, + 0x93, 0xff, 0x00, 0x28, 0x10, 0xdb, 0x4c, 0xb1, 0x01, 0x22, 0x21, 0x46, + 0x28, 0x46, 0xff, 0xf7, 0xdf, 0xff, 0x18, 0xb1, 0x03, 0x23, 0x00, 0x20, + 0x23, 0x70, 0x38, 0xbd, 0x23, 0x78, 0x01, 0x2b, 0x0c, 0xbf, 0x01, 0x23, + 0x02, 0x23, 0xf6, 0xe7, 0x01, 0x20, 0xf6, 0xe7, 0x81, 0x68, 0xf0, 0xb5, + 0x89, 0xb0, 0xa1, 0xf1, 0x20, 0x06, 0x05, 0x46, 0xfc, 0xf7, 0xca, 0xfe, + 0x0b, 0x4b, 0x07, 0x46, 0x6c, 0x46, 0x0f, 0xcb, 0x84, 0xe8, 0x0f, 0x00, + 0x10, 0x22, 0x39, 0x46, 0x0d, 0xeb, 0x02, 0x00, 0x17, 0xf0, 0x48, 0xfd, + 0x20, 0x23, 0x22, 0x46, 0x31, 0x46, 0x28, 0x46, 0xfc, 0xf7, 0xc4, 0xfe, + 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x09, 0xb0, 0xf0, 0xbd, 0x00, 0xbf, + 0xd4, 0xd8, 0x01, 0x08, 0x30, 0xb5, 0x00, 0x23, 0x87, 0xb0, 0x0d, 0x46, + 0x81, 0x68, 0x05, 0x93, 0x02, 0xaa, 0x20, 0x39, 0x04, 0x46, 0xcd, 0xe9, + 0x03, 0x33, 0xff, 0x23, 0x02, 0x93, 0x10, 0x23, 0xfe, 0xf7, 0x4c, 0xff, + 0x00, 0x28, 0x11, 0xdb, 0x10, 0x22, 0x02, 0xa9, 0x20, 0x46, 0xff, 0xf7, + 0x99, 0xff, 0x68, 0xb1, 0x03, 0x23, 0x2b, 0x70, 0x0d, 0xf1, 0x07, 0x02, + 0xa1, 0x68, 0x01, 0x23, 0x20, 0x46, 0x80, 0x39, 0xfe, 0xf7, 0x3a, 0xff, + 0x00, 0x28, 0x0b, 0xda, 0x01, 0x20, 0x2c, 0xe0, 0x10, 0x22, 0x17, 0x49, + 0x02, 0xa8, 0x19, 0xf0, 0x69, 0xf8, 0x00, 0x28, 0x14, 0xbf, 0x02, 0x23, + 0x01, 0x23, 0xe8, 0xe7, 0x9d, 0xf8, 0x07, 0x30, 0x0d, 0xf1, 0x07, 0x01, + 0x20, 0x46, 0x03, 0xf0, 0x0f, 0x02, 0x1b, 0x09, 0x6a, 0x70, 0x01, 0x22, + 0x2b, 0x71, 0xff, 0xf7, 0x73, 0xff, 0x10, 0xb9, 0x6b, 0x78, 0x04, 0x2b, + 0x03, 0xd9, 0x01, 0x23, 0x6b, 0x70, 0x00, 0x23, 0x2b, 0x71, 0xa2, 0x68, + 0xa9, 0x1c, 0x20, 0x46, 0x60, 0x3a, 0xff, 0xf7, 0x76, 0xff, 0x00, 0x28, + 0xd6, 0xd1, 0xa2, 0x68, 0xe9, 0x1c, 0x20, 0x46, 0x40, 0x3a, 0xff, 0xf7, + 0x6e, 0xff, 0x07, 0xb0, 0x30, 0xbd, 0x00, 0xbf, 0xd4, 0xd8, 0x01, 0x08, + 0x1f, 0xb5, 0x00, 0x20, 0x01, 0xa9, 0xff, 0xf7, 0x77, 0xfd, 0xa8, 0xb9, + 0x02, 0xa9, 0x01, 0x98, 0xff, 0xf7, 0x9e, 0xff, 0x04, 0x46, 0x68, 0xb9, + 0x9d, 0xf8, 0x0b, 0x30, 0x03, 0x2b, 0x03, 0xd1, 0x01, 0x98, 0xfe, 0xf7, + 0xa8, 0xfe, 0x04, 0x46, 0x01, 0x98, 0xff, 0xf7, 0x51, 0xfd, 0x20, 0x46, + 0x04, 0xb0, 0x10, 0xbd, 0x01, 0x24, 0xf7, 0xe7, 0x01, 0x24, 0xf8, 0xe7, + 0x13, 0xb5, 0x0c, 0x46, 0xc0, 0xb2, 0x01, 0xa9, 0xff, 0xf7, 0x58, 0xfd, + 0x50, 0xb9, 0x21, 0x46, 0x01, 0x98, 0xff, 0xf7, 0x7f, 0xff, 0x04, 0x46, + 0x01, 0x98, 0xff, 0xf7, 0x3b, 0xfd, 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, + 0x01, 0x24, 0xfa, 0xe7, 0x30, 0xb5, 0x85, 0xb0, 0x0d, 0x46, 0x04, 0x46, + 0x01, 0x20, 0x02, 0xa9, 0xff, 0xf7, 0xe4, 0xff, 0xe9, 0x79, 0x01, 0x29, + 0x02, 0xd0, 0x20, 0x46, 0xfe, 0xf7, 0x6e, 0xfe, 0x9d, 0xf8, 0x0b, 0x30, + 0x01, 0x2b, 0x02, 0xd1, 0x20, 0x46, 0xfe, 0xf7, 0x74, 0xfe, 0xab, 0x68, + 0x20, 0x46, 0xa1, 0x68, 0x01, 0x93, 0x04, 0x23, 0xa0, 0x39, 0x0d, 0xeb, + 0x03, 0x02, 0xfe, 0xf7, 0x2f, 0xfe, 0x2a, 0x46, 0x00, 0x21, 0x20, 0x46, + 0xfc, 0xf7, 0x22, 0xfe, 0x2a, 0x46, 0x01, 0x21, 0x20, 0x46, 0xfc, 0xf7, + 0x1d, 0xfe, 0x20, 0x46, 0xff, 0xf7, 0x28, 0xff, 0x00, 0x20, 0x05, 0xb0, + 0x30, 0xbd, 0x04, 0x28, 0x09, 0xd0, 0x05, 0x28, 0x03, 0xd1, 0x48, 0x1e, + 0x18, 0xbf, 0x01, 0x20, 0x70, 0x47, 0x43, 0x1a, 0x58, 0x42, 0x58, 0x41, + 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, 0x10, 0xb5, 0x04, 0x46, 0xfe, 0xf7, + 0x01, 0xfe, 0x4f, 0xf4, 0x34, 0x62, 0xa3, 0x68, 0xe0, 0x3b, 0x02, 0xfb, + 0x10, 0x30, 0x10, 0xbd, 0x30, 0xb5, 0x83, 0x79, 0x8d, 0xb0, 0x05, 0x46, + 0x00, 0x2b, 0x03, 0xa9, 0x14, 0xbf, 0x02, 0x20, 0x00, 0x20, 0xff, 0xf7, + 0xf7, 0xfc, 0x60, 0xbb, 0x03, 0x98, 0xff, 0xf7, 0xe6, 0xff, 0x16, 0x4b, + 0x29, 0x79, 0x9a, 0x6e, 0x01, 0x39, 0x2b, 0x68, 0x02, 0xeb, 0x42, 0x04, + 0x01, 0x3b, 0x4a, 0x43, 0x04, 0xfb, 0x03, 0x23, 0x1c, 0x18, 0x03, 0x98, + 0xfe, 0xf7, 0xdc, 0xfd, 0x01, 0x90, 0x03, 0x98, 0xfc, 0xf7, 0xbc, 0xfd, + 0x20, 0x22, 0x01, 0x46, 0x04, 0xa8, 0x17, 0xf0, 0x41, 0xfc, 0x2a, 0x79, + 0x21, 0x46, 0x01, 0x9b, 0x8d, 0xf8, 0x10, 0x20, 0x04, 0xaa, 0x03, 0x98, + 0xfc, 0xf7, 0xba, 0xfd, 0x04, 0x1e, 0x18, 0xbf, 0x01, 0x24, 0x03, 0x98, + 0xff, 0xf7, 0xb8, 0xfc, 0x20, 0x46, 0x0d, 0xb0, 0x30, 0xbd, 0x01, 0x24, + 0xf7, 0xe7, 0x00, 0xbf, 0x28, 0x07, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, + 0x04, 0x46, 0x8d, 0xb0, 0x00, 0x20, 0x63, 0x79, 0x01, 0x2b, 0xcd, 0xe9, + 0x04, 0x00, 0x40, 0xf0, 0x93, 0x81, 0x23, 0x68, 0x01, 0x2b, 0x40, 0xf0, + 0x8f, 0x81, 0x23, 0x79, 0x01, 0x2b, 0x40, 0xf0, 0x8b, 0x81, 0xb9, 0x4d, + 0xb9, 0x4e, 0x2a, 0x68, 0xb2, 0x42, 0x02, 0xd1, 0x05, 0xa9, 0xff, 0xf7, + 0x6f, 0xfd, 0x6b, 0x69, 0x13, 0xf0, 0x0c, 0x0f, 0x00, 0xf0, 0xb9, 0x81, + 0xb2, 0x49, 0x23, 0x46, 0x2a, 0x6a, 0x01, 0xf1, 0x6c, 0x00, 0xfe, 0xf7, + 0x95, 0xff, 0x01, 0x46, 0x18, 0xb9, 0x22, 0x46, 0xaf, 0x48, 0xff, 0xf7, + 0xdb, 0xfd, 0xeb, 0x6a, 0xb3, 0x42, 0x03, 0xd1, 0x04, 0xa9, 0x01, 0x20, + 0xff, 0xf7, 0x56, 0xfd, 0x2b, 0x6c, 0x13, 0xf0, 0x0c, 0x0f, 0x00, 0xf0, + 0xa7, 0x81, 0xa9, 0x49, 0x23, 0x46, 0xea, 0x6c, 0x01, 0xf1, 0x40, 0x00, + 0xfe, 0xf7, 0x7c, 0xff, 0x20, 0xb9, 0x22, 0x46, 0x01, 0x21, 0xa3, 0x48, + 0xff, 0xf7, 0xc2, 0xfd, 0x95, 0xf8, 0x88, 0x31, 0xab, 0xb1, 0x04, 0xf1, + 0x2c, 0x02, 0x04, 0xf1, 0x1c, 0x03, 0x11, 0x46, 0x53, 0xf8, 0x04, 0x0b, + 0x93, 0x42, 0x41, 0xf8, 0x04, 0x0b, 0xf9, 0xd1, 0x4f, 0xf4, 0x8c, 0x72, + 0x00, 0x21, 0x9b, 0x48, 0x17, 0xf0, 0xd0, 0xfb, 0x22, 0x46, 0x02, 0x21, + 0x96, 0x48, 0xff, 0xf7, 0xa9, 0xfd, 0xdd, 0xe9, 0x04, 0x32, 0x93, 0x42, + 0x88, 0xbf, 0x05, 0x93, 0x05, 0x9b, 0xa3, 0x60, 0x8f, 0x4d, 0x00, 0x23, + 0x05, 0x99, 0x6e, 0x6a, 0x1a, 0x46, 0x2f, 0x6d, 0x18, 0x46, 0x9a, 0x46, + 0xa8, 0x46, 0x91, 0x42, 0x01, 0xd8, 0x9a, 0x42, 0x05, 0xd2, 0x06, 0xeb, + 0xca, 0x05, 0x0a, 0xf1, 0x01, 0x0a, 0x6d, 0x68, 0x2a, 0x44, 0x99, 0x42, + 0x02, 0xd8, 0x93, 0x42, 0x80, 0xf0, 0x8d, 0x81, 0x07, 0xeb, 0xc0, 0x05, + 0x91, 0x42, 0x00, 0xf1, 0x01, 0x00, 0x6d, 0x68, 0x2b, 0x44, 0xec, 0xd8, + 0x99, 0x42, 0xe6, 0xd8, 0x9a, 0x42, 0xe4, 0xd1, 0xd1, 0x46, 0x4f, 0xf0, + 0x00, 0x0b, 0x81, 0x4b, 0x5d, 0x46, 0x0b, 0xf1, 0x01, 0x0b, 0x1b, 0x78, + 0x2b, 0xb1, 0x0a, 0xf1, 0x01, 0x02, 0x59, 0x46, 0x7d, 0x48, 0x08, 0xf0, + 0x63, 0xfa, 0xd8, 0xf8, 0x58, 0x30, 0xd8, 0xf8, 0x24, 0x20, 0x99, 0x68, + 0x00, 0x23, 0x10, 0x1d, 0x1f, 0x46, 0x50, 0xf8, 0x39, 0x30, 0x3b, 0x44, + 0x99, 0x42, 0x03, 0xd3, 0xb9, 0xf1, 0x01, 0x09, 0xf6, 0xd2, 0x1f, 0x46, + 0x21, 0x68, 0x4b, 0x1e, 0xab, 0x42, 0x00, 0xf2, 0x4a, 0x81, 0x09, 0xf1, + 0x01, 0x00, 0x13, 0x68, 0xd8, 0xf8, 0x68, 0x50, 0x52, 0xf8, 0x30, 0x60, + 0xd8, 0xf8, 0x28, 0x00, 0xf6, 0x1a, 0x01, 0x38, 0x07, 0xeb, 0x06, 0x0c, + 0x52, 0xf8, 0x30, 0x20, 0xd3, 0x1a, 0x9c, 0x45, 0x40, 0xf2, 0x25, 0x81, + 0x4f, 0xf4, 0x34, 0x63, 0x6f, 0xf0, 0xdf, 0x02, 0x01, 0x29, 0x03, 0xfb, + 0x15, 0x25, 0x3d, 0x44, 0x40, 0xf0, 0x1c, 0x81, 0x7b, 0x1b, 0x18, 0xbf, + 0x01, 0x23, 0xa3, 0x71, 0x06, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0xf0, 0xfb, + 0x07, 0xa9, 0x01, 0x20, 0xff, 0xf7, 0xec, 0xfb, 0x08, 0xa9, 0x02, 0x20, + 0xff, 0xf7, 0xe8, 0xfb, 0x23, 0x79, 0x01, 0x2b, 0x40, 0xf0, 0x0a, 0x81, + 0x08, 0x98, 0x00, 0x21, 0x82, 0x68, 0xfe, 0xf7, 0x2b, 0xfd, 0x23, 0x68, + 0x01, 0x2b, 0x13, 0xd1, 0x21, 0x46, 0x08, 0x98, 0xff, 0xf7, 0x8e, 0xfe, + 0xa3, 0x79, 0x6b, 0xb9, 0x06, 0x98, 0x03, 0x93, 0xfe, 0xf7, 0x2e, 0xfd, + 0x21, 0x46, 0x06, 0x98, 0xff, 0xf7, 0x84, 0xfe, 0x08, 0x98, 0x03, 0x9b, + 0x82, 0x68, 0x19, 0x46, 0xfe, 0xf7, 0x14, 0xfd, 0x00, 0x23, 0x32, 0x46, + 0x00, 0x95, 0xdd, 0xe9, 0x07, 0x01, 0xfe, 0xf7, 0xd7, 0xfd, 0x20, 0x46, + 0xff, 0xf7, 0xbc, 0xfe, 0x02, 0x23, 0x23, 0x71, 0x18, 0xb1, 0x45, 0x4a, + 0x13, 0x68, 0x01, 0x33, 0x13, 0x60, 0x3a, 0x46, 0x31, 0x46, 0x07, 0x98, + 0xfe, 0xf7, 0xfe, 0xfc, 0x33, 0x46, 0x32, 0x46, 0x00, 0x95, 0xdd, 0xe9, + 0x06, 0x01, 0xfe, 0xf7, 0xc1, 0xfd, 0x23, 0x68, 0x01, 0x2b, 0x04, 0xd1, + 0xa3, 0x79, 0x13, 0xb9, 0x07, 0x98, 0xfe, 0xf7, 0xff, 0xfc, 0x20, 0x46, + 0xff, 0xf7, 0x9e, 0xfe, 0x03, 0x23, 0x23, 0x71, 0x18, 0xb1, 0x36, 0x4a, + 0x13, 0x68, 0x01, 0x33, 0x13, 0x60, 0x3a, 0x46, 0x31, 0x46, 0x06, 0x98, + 0xfe, 0xf7, 0xe0, 0xfc, 0x33, 0x46, 0x00, 0x22, 0x06, 0x99, 0x08, 0x98, + 0x00, 0x95, 0xfe, 0xf7, 0xa3, 0xfd, 0xa3, 0x79, 0x00, 0x2b, 0x39, 0xd0, + 0x08, 0x98, 0xff, 0xf7, 0x7a, 0xfe, 0xd8, 0xf8, 0x68, 0x30, 0x02, 0x46, + 0x06, 0x99, 0x5b, 0x00, 0x08, 0x98, 0x00, 0x93, 0x73, 0x19, 0xfe, 0xf7, + 0x93, 0xfd, 0x18, 0xb1, 0x25, 0x4a, 0x13, 0x68, 0x01, 0x33, 0x13, 0x60, + 0x0a, 0xa9, 0x08, 0x98, 0xff, 0xf7, 0xa0, 0xfd, 0x9d, 0xf8, 0x2b, 0x30, + 0x01, 0x2b, 0x02, 0xd1, 0x06, 0x98, 0xfe, 0xf7, 0xac, 0xfc, 0x9d, 0xf8, + 0x29, 0x10, 0x01, 0x29, 0x02, 0xd0, 0x06, 0x98, 0xfe, 0xf7, 0x98, 0xfc, + 0x06, 0x98, 0x09, 0xaa, 0xa3, 0x68, 0x81, 0x68, 0x09, 0x93, 0x04, 0x23, + 0xa0, 0x39, 0xfe, 0xf7, 0x61, 0xfc, 0x22, 0x46, 0x00, 0x21, 0x06, 0x98, + 0xfc, 0xf7, 0x54, 0xfc, 0x22, 0x46, 0x01, 0x21, 0x06, 0x98, 0xfc, 0xf7, + 0x4f, 0xfc, 0x06, 0x98, 0xff, 0xf7, 0x5a, 0xfd, 0x00, 0x23, 0xa5, 0x79, + 0x20, 0x46, 0xa3, 0x71, 0xff, 0xf7, 0x48, 0xfe, 0x23, 0x68, 0x01, 0x33, + 0x23, 0x60, 0x01, 0x23, 0x23, 0x71, 0xa8, 0xb1, 0x09, 0x4a, 0x13, 0x68, + 0x01, 0x33, 0x13, 0x60, 0x10, 0xe0, 0x00, 0xbf, 0x28, 0x07, 0x00, 0x24, + 0x3d, 0xb8, 0xf3, 0x96, 0x94, 0x07, 0x00, 0x24, 0x54, 0x07, 0x00, 0x24, + 0xd0, 0x09, 0x00, 0x24, 0x08, 0x0b, 0x02, 0x24, 0x2d, 0xd4, 0x01, 0x08, + 0x04, 0x0b, 0x00, 0x24, 0x00, 0x2d, 0x57, 0xd0, 0x3a, 0x46, 0x00, 0x21, + 0x08, 0x98, 0xfe, 0xf7, 0x73, 0xfc, 0x51, 0xe0, 0x0a, 0xa8, 0xff, 0xf7, + 0x31, 0xfc, 0x50, 0xb9, 0x0a, 0x98, 0x04, 0x23, 0x04, 0xf1, 0x08, 0x02, + 0x81, 0x68, 0xa0, 0x39, 0xfe, 0xf7, 0xa2, 0xfc, 0x0a, 0x98, 0xff, 0xf7, + 0x03, 0xfb, 0x04, 0xf1, 0x1c, 0x05, 0xa3, 0x68, 0x00, 0x26, 0x39, 0x4f, + 0xa9, 0x46, 0x04, 0xf1, 0x2c, 0x08, 0x05, 0x93, 0x0a, 0xa8, 0x5f, 0xfa, + 0x86, 0xfa, 0xa5, 0xf1, 0x10, 0x0b, 0xff, 0xf7, 0x15, 0xfc, 0x68, 0xb9, + 0x0a, 0x98, 0x10, 0x23, 0x5a, 0x46, 0x81, 0x68, 0xa1, 0xf1, 0xa0, 0x0c, + 0x71, 0x1c, 0xac, 0xeb, 0x41, 0x11, 0xfe, 0xf7, 0x83, 0xfc, 0x0a, 0x98, + 0xff, 0xf7, 0xe4, 0xfa, 0x5a, 0x46, 0x12, 0xf8, 0x01, 0x3b, 0xff, 0x2b, + 0x3d, 0xd1, 0x95, 0x42, 0xf9, 0xd1, 0x10, 0x35, 0x00, 0x2e, 0x7f, 0xf4, + 0x8f, 0xae, 0x01, 0x26, 0xdc, 0xe7, 0x10, 0x22, 0xff, 0x21, 0x04, 0xf1, + 0x0c, 0x00, 0x17, 0xf0, 0x4b, 0xfa, 0x4c, 0xe6, 0x10, 0x22, 0xff, 0x21, + 0x04, 0xf1, 0x1c, 0x00, 0x17, 0xf0, 0x44, 0xfa, 0x77, 0xe6, 0x3d, 0x46, + 0x00, 0x23, 0xe4, 0xe6, 0x02, 0x2b, 0x3f, 0xf4, 0x20, 0xaf, 0x03, 0x2b, + 0x3f, 0xf4, 0x3b, 0xaf, 0x06, 0x98, 0xff, 0xf7, 0xbd, 0xfa, 0x07, 0x98, + 0xff, 0xf7, 0xba, 0xfa, 0x08, 0x98, 0xff, 0xf7, 0xb7, 0xfa, 0xb9, 0xf1, + 0xff, 0x3f, 0x7f, 0xf4, 0x90, 0xae, 0x14, 0x4b, 0x19, 0x68, 0x00, 0x29, + 0x05, 0xdd, 0x13, 0x4b, 0x1b, 0x78, 0x13, 0xb1, 0x12, 0x48, 0x08, 0xf0, + 0xf5, 0xf8, 0x00, 0x20, 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x91, 0x42, + 0x7f, 0xf6, 0x7a, 0xae, 0x63, 0xe6, 0x22, 0x46, 0x51, 0x46, 0x38, 0x46, + 0xff, 0xf7, 0xf4, 0xfb, 0x00, 0x2e, 0xbc, 0xd0, 0x4b, 0x46, 0x42, 0x46, + 0x53, 0xf8, 0x04, 0x1b, 0x43, 0x45, 0x42, 0xf8, 0x04, 0x1b, 0xf9, 0xd1, + 0x22, 0x46, 0x02, 0x21, 0x38, 0x46, 0xff, 0xf7, 0xe5, 0xfb, 0xae, 0xe7, + 0x94, 0x07, 0x00, 0x24, 0x04, 0x0b, 0x00, 0x24, 0x08, 0x0b, 0x02, 0x24, + 0x45, 0xd4, 0x01, 0x08, 0x38, 0xb5, 0x43, 0x1c, 0x0c, 0x46, 0x29, 0xd0, + 0x00, 0xf0, 0x0f, 0x02, 0x1d, 0x4b, 0xc0, 0xf3, 0x03, 0x10, 0x53, 0xf8, + 0x22, 0x50, 0xfd, 0xf7, 0x83, 0xfd, 0x1b, 0x49, 0x1b, 0x4b, 0xd1, 0xf8, + 0x94, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0x05, 0xfb, 0x05, 0xf2, 0x01, 0x68, + 0x02, 0xeb, 0x42, 0x03, 0x0b, 0x40, 0xb3, 0xfb, 0xf2, 0xf3, 0x01, 0x3b, + 0x01, 0x2b, 0x19, 0xd8, 0xe3, 0x1e, 0x02, 0x2b, 0x43, 0x68, 0x0c, 0xd8, + 0x2b, 0x43, 0x03, 0x2c, 0x43, 0x60, 0x19, 0xd1, 0x01, 0x22, 0x29, 0x46, + 0xfc, 0xf7, 0xee, 0xfb, 0x0c, 0x4b, 0x4f, 0xf4, 0x40, 0x72, 0x5a, 0x61, + 0x38, 0xbd, 0x23, 0xea, 0x05, 0x03, 0x01, 0x2c, 0x43, 0x60, 0xf1, 0xd0, + 0x02, 0x2c, 0x07, 0xd0, 0x00, 0x22, 0xee, 0xe7, 0x04, 0xf0, 0xfd, 0x03, + 0x01, 0x2b, 0xe9, 0xd0, 0x05, 0x2c, 0xf5, 0xd1, 0x02, 0x22, 0xe6, 0xe7, + 0x05, 0x2c, 0xf2, 0xe7, 0x10, 0xd9, 0x01, 0x08, 0x00, 0x64, 0x02, 0x58, + 0x00, 0x03, 0x00, 0x80, 0x2d, 0xe9, 0xf8, 0x43, 0x46, 0x1c, 0x05, 0x46, + 0x0c, 0x46, 0x00, 0xf0, 0x9c, 0x80, 0x1f, 0xfa, 0x80, 0xf9, 0x55, 0x4a, + 0x40, 0xf4, 0x70, 0x61, 0xb2, 0xf9, 0x00, 0x30, 0x58, 0x1c, 0x4b, 0xd1, + 0x00, 0x26, 0x52, 0x4b, 0x09, 0xf0, 0x0f, 0x02, 0xc5, 0xf3, 0x03, 0x10, + 0x53, 0xf8, 0x22, 0x70, 0xfd, 0xf7, 0x2e, 0xfd, 0x4e, 0x49, 0x4f, 0x4b, + 0xd1, 0xf8, 0x94, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0x07, 0xfb, 0x07, 0xfc, + 0xc4, 0xf3, 0x83, 0x12, 0x83, 0x68, 0x0c, 0xeb, 0x4c, 0x0e, 0x0f, 0x2a, + 0x6f, 0xea, 0x0e, 0x01, 0x14, 0xbf, 0x02, 0xfb, 0x0c, 0xf2, 0x43, 0xea, + 0x0e, 0x03, 0x4f, 0xf4, 0x40, 0x7e, 0x1c, 0xbf, 0x0b, 0x40, 0x13, 0x43, + 0x04, 0xf0, 0x07, 0x02, 0x83, 0x60, 0x02, 0x2a, 0x3f, 0x4b, 0xc3, 0xf8, + 0x14, 0xe0, 0x36, 0xd1, 0x0e, 0xf1, 0x00, 0x4e, 0xd3, 0xf8, 0x94, 0x80, + 0xf0, 0x45, 0xfb, 0xd1, 0x19, 0xf0, 0x08, 0x0f, 0xc4, 0xf3, 0x83, 0x28, + 0x5d, 0xd0, 0x3b, 0x0a, 0xd0, 0xf8, 0x24, 0xe0, 0x5b, 0x43, 0x5b, 0x43, + 0xc3, 0xeb, 0x03, 0x19, 0x03, 0xfb, 0x08, 0xf3, 0x2e, 0xea, 0x09, 0x0e, + 0x4e, 0xea, 0x03, 0x03, 0x43, 0x62, 0x31, 0x4b, 0x4f, 0xf4, 0x40, 0x7e, + 0xc3, 0xf8, 0x14, 0xe0, 0x02, 0x23, 0x1e, 0xe0, 0x43, 0xf4, 0x70, 0x63, + 0x8b, 0x42, 0x10, 0xd1, 0x04, 0xf0, 0x03, 0x03, 0x56, 0x68, 0x03, 0x2b, + 0xab, 0xd1, 0x09, 0xf4, 0x70, 0x63, 0xb3, 0xf5, 0x70, 0x6f, 0xa6, 0xd1, + 0x32, 0x46, 0x21, 0x46, 0x28, 0x46, 0xbd, 0xe8, 0xf8, 0x43, 0xfc, 0xf7, + 0x4b, 0xbb, 0x08, 0x32, 0x98, 0xe7, 0x03, 0x2a, 0x3c, 0xd0, 0x02, 0xf1, + 0xff, 0x3e, 0xde, 0xf1, 0x00, 0x03, 0x43, 0xeb, 0x0e, 0x03, 0xdf, 0xf8, + 0x78, 0x90, 0xdf, 0xf8, 0x78, 0xe0, 0xd9, 0xf8, 0x94, 0x80, 0xf0, 0x45, + 0xfb, 0xd1, 0xd0, 0xf8, 0x00, 0xe0, 0x03, 0xfb, 0x0c, 0xfc, 0x01, 0x3a, + 0x01, 0xea, 0x0e, 0x01, 0x01, 0x2a, 0x41, 0xea, 0x0c, 0x01, 0x01, 0x60, + 0x05, 0xd8, 0x43, 0x68, 0x22, 0x07, 0x4c, 0xbf, 0x3b, 0x43, 0xbb, 0x43, + 0x43, 0x60, 0xc4, 0xf3, 0x01, 0x12, 0x39, 0x46, 0xfc, 0xf7, 0x36, 0xfb, + 0x32, 0x46, 0x21, 0x46, 0x28, 0x46, 0xfc, 0xf7, 0x1d, 0xfb, 0x0c, 0x4b, + 0x4f, 0xf4, 0x40, 0x72, 0x5a, 0x61, 0xbd, 0xe8, 0xf8, 0x83, 0x0c, 0xfb, + 0x0c, 0xf9, 0x03, 0x6a, 0xc9, 0xeb, 0x09, 0x1e, 0x23, 0xea, 0x0e, 0x0e, + 0x09, 0xfb, 0x08, 0xf3, 0x4e, 0xea, 0x03, 0x03, 0x03, 0x62, 0xa2, 0xe7, + 0x13, 0x46, 0xc6, 0xe7, 0x3c, 0xd5, 0x01, 0x08, 0x10, 0xd9, 0x01, 0x08, + 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x10, 0xb5, 0x0a, 0xf0, + 0x97, 0xf9, 0x13, 0x4b, 0x13, 0x48, 0x14, 0x4a, 0x59, 0x6a, 0x14, 0x68, + 0x03, 0x88, 0x11, 0x60, 0x1b, 0x1b, 0x0b, 0x44, 0x01, 0x46, 0xb3, 0xf5, + 0x80, 0x3f, 0x16, 0xd3, 0x4f, 0xf4, 0x7a, 0x71, 0xb3, 0xfb, 0xf1, 0xf2, + 0x01, 0xfb, 0x12, 0x33, 0x03, 0x80, 0x06, 0xe0, 0x01, 0x32, 0xa3, 0xf5, + 0x7a, 0x73, 0xb3, 0xf5, 0x7a, 0x7f, 0xf9, 0xd2, 0x0b, 0x80, 0x08, 0x4c, + 0x23, 0x68, 0x1a, 0x44, 0x22, 0x60, 0x0a, 0xf0, 0x61, 0xf9, 0x20, 0x68, + 0x10, 0xbd, 0x00, 0x22, 0xf1, 0xe7, 0x00, 0xbf, 0x00, 0x0c, 0x00, 0x40, + 0x9c, 0x0b, 0x02, 0x24, 0xa0, 0x0b, 0x02, 0x24, 0x28, 0x0d, 0x02, 0x24, + 0x38, 0xb5, 0x0b, 0x4c, 0x22, 0x68, 0xd3, 0x68, 0x23, 0xf0, 0xa0, 0x03, + 0xd3, 0x60, 0xff, 0xf7, 0xc5, 0xff, 0x05, 0x46, 0x23, 0x68, 0xdb, 0x68, + 0x9b, 0x06, 0x01, 0xd5, 0x00, 0x20, 0x38, 0xbd, 0xff, 0xf7, 0xbc, 0xff, + 0x40, 0x1b, 0xb0, 0xf5, 0x7a, 0x7f, 0xf3, 0xd9, 0x03, 0x20, 0xf6, 0xe7, + 0x44, 0x05, 0x00, 0x24, 0x2d, 0xe9, 0xf8, 0x43, 0x05, 0x46, 0x29, 0x4f, + 0x3c, 0x69, 0xff, 0xf7, 0xad, 0xff, 0x02, 0x2d, 0x06, 0x46, 0x27, 0x4b, + 0x26, 0xd1, 0xd7, 0xf8, 0x10, 0x41, 0x26, 0x4f, 0x1c, 0x40, 0x44, 0xf0, + 0x00, 0x44, 0xdf, 0xf8, 0x88, 0x80, 0x4c, 0xf2, 0x50, 0x39, 0x04, 0x2f, + 0x1d, 0xd1, 0xd8, 0xf8, 0x10, 0x00, 0xc0, 0xf3, 0x80, 0x00, 0x70, 0xb9, + 0x34, 0xf0, 0x00, 0x41, 0x22, 0xd0, 0x1e, 0x4a, 0x00, 0x2c, 0x93, 0x69, + 0x43, 0xea, 0x04, 0x03, 0x93, 0x61, 0x18, 0x4b, 0x17, 0xdb, 0x5c, 0x61, + 0x01, 0x20, 0xbd, 0xe8, 0xf8, 0x83, 0xff, 0xf7, 0x87, 0xff, 0x80, 0x1b, + 0x48, 0x45, 0xe4, 0xd9, 0x03, 0x20, 0xf6, 0xe7, 0x1c, 0x40, 0x04, 0x27, + 0xdb, 0xe7, 0xd8, 0xf8, 0x10, 0x31, 0x27, 0xea, 0x03, 0x03, 0x13, 0xf0, + 0x04, 0x0f, 0x0c, 0xbf, 0x01, 0x20, 0x00, 0x20, 0xdb, 0xe7, 0xc3, 0xf8, + 0x14, 0x11, 0xe5, 0xe7, 0x01, 0x2d, 0x09, 0x4b, 0x06, 0xd1, 0x1a, 0x69, + 0xd1, 0x03, 0xe0, 0xd5, 0x4f, 0xf4, 0x80, 0x32, 0x5a, 0x61, 0xdc, 0xe7, + 0xd3, 0xf8, 0x10, 0x21, 0xd2, 0x03, 0xd8, 0xd5, 0x4f, 0xf4, 0x80, 0x32, + 0xc3, 0xf8, 0x14, 0x21, 0xd3, 0xe7, 0x00, 0xbf, 0x00, 0x20, 0x00, 0x52, + 0x00, 0x00, 0xee, 0x17, 0x04, 0x00, 0x00, 0x80, 0x80, 0x0b, 0x02, 0x24, + 0x38, 0xb5, 0x11, 0x4c, 0xe3, 0x68, 0x03, 0xf0, 0x07, 0x03, 0x06, 0x2b, + 0x06, 0xd0, 0xe0, 0x68, 0x00, 0xf0, 0x3f, 0x00, 0x16, 0x38, 0x18, 0xbf, + 0x01, 0x20, 0x38, 0xbd, 0xe3, 0x68, 0x23, 0xf0, 0x3f, 0x03, 0x43, 0xf0, + 0x16, 0x03, 0xe3, 0x60, 0xff, 0xf7, 0x40, 0xff, 0x05, 0x46, 0x63, 0x68, + 0x9b, 0x04, 0x01, 0xd5, 0x00, 0x20, 0xf0, 0xe7, 0xff, 0xf7, 0x38, 0xff, + 0x40, 0x1b, 0xb0, 0xf5, 0x7a, 0x7f, 0xf4, 0xd9, 0x01, 0x20, 0xe8, 0xe7, + 0x00, 0x48, 0x02, 0x58, 0x70, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0x16, 0x46, + 0x23, 0x68, 0xdb, 0x69, 0x35, 0xea, 0x03, 0x03, 0x01, 0xd1, 0x00, 0x20, + 0x17, 0xe0, 0xff, 0xf7, 0x23, 0xff, 0x80, 0x1b, 0x23, 0x68, 0xb0, 0xf1, + 0x00, 0x7f, 0x1a, 0x68, 0x10, 0xd3, 0x22, 0xf4, 0xd0, 0x72, 0x1a, 0x60, + 0x9a, 0x68, 0x22, 0xf0, 0x01, 0x02, 0x9a, 0x60, 0x20, 0x23, 0xc4, 0xf8, + 0x84, 0x30, 0xc4, 0xf8, 0x88, 0x30, 0x00, 0x23, 0x03, 0x20, 0x84, 0xf8, + 0x80, 0x30, 0x70, 0xbd, 0x51, 0x07, 0xdd, 0xd5, 0xda, 0x69, 0x12, 0x05, + 0xda, 0xd5, 0x4f, 0xf4, 0x00, 0x62, 0x1a, 0x62, 0x1a, 0x68, 0x22, 0xf4, + 0xd0, 0x72, 0x1a, 0x60, 0x9a, 0x68, 0x22, 0xf0, 0x01, 0x02, 0x9a, 0x60, + 0x20, 0x23, 0xc4, 0xf8, 0x84, 0x30, 0xc4, 0xf8, 0x88, 0x30, 0xc4, 0xf8, + 0x8c, 0x30, 0xe2, 0xe7, 0xf8, 0xb5, 0x3e, 0x4c, 0x06, 0x46, 0x0d, 0x46, + 0xa3, 0x6a, 0x03, 0xf0, 0x03, 0x03, 0x03, 0x2b, 0x71, 0xd0, 0x23, 0x68, + 0x23, 0xf0, 0x80, 0x53, 0x23, 0x60, 0xff, 0xf7, 0xe5, 0xfe, 0x07, 0x46, + 0x23, 0x68, 0x9a, 0x00, 0x5a, 0xd4, 0xa3, 0x6a, 0x01, 0x2d, 0x32, 0x68, + 0x23, 0xf0, 0x7c, 0x73, 0x43, 0xea, 0x02, 0x53, 0xa3, 0x62, 0xb3, 0x68, + 0xf2, 0x68, 0x03, 0xf1, 0xff, 0x33, 0x02, 0xf1, 0xff, 0x32, 0x4f, 0xea, + 0x43, 0x23, 0x4f, 0xea, 0x02, 0x42, 0x9b, 0xb2, 0x02, 0xf4, 0xfe, 0x02, + 0x43, 0xea, 0x02, 0x03, 0x72, 0x68, 0x02, 0xf1, 0xff, 0x32, 0xc2, 0xf3, + 0x08, 0x02, 0x43, 0xea, 0x02, 0x03, 0x32, 0x69, 0x02, 0xf1, 0xff, 0x32, + 0x4f, 0xea, 0x02, 0x62, 0x02, 0xf0, 0xfe, 0x42, 0x43, 0xea, 0x02, 0x03, + 0x23, 0x64, 0xe3, 0x6a, 0x72, 0x69, 0x23, 0xf4, 0x40, 0x63, 0x43, 0xea, + 0x02, 0x03, 0xe3, 0x62, 0xe3, 0x6a, 0xb2, 0x69, 0x23, 0xf4, 0x00, 0x73, + 0x43, 0xea, 0x02, 0x03, 0xe3, 0x62, 0xe3, 0x6a, 0x23, 0xf4, 0x80, 0x73, + 0xe3, 0x62, 0x63, 0x6c, 0xf2, 0x69, 0x23, 0xf4, 0x7f, 0x43, 0x23, 0xf0, + 0xf8, 0x03, 0x43, 0xea, 0xc2, 0x03, 0x63, 0x64, 0xe3, 0x6a, 0x43, 0xf4, + 0x80, 0x73, 0xe3, 0x62, 0xe3, 0x6a, 0x0c, 0xbf, 0x43, 0xf4, 0x00, 0x03, + 0x43, 0xf0, 0x80, 0x73, 0xe3, 0x62, 0x0e, 0x4c, 0x23, 0x68, 0x43, 0xf0, + 0x80, 0x53, 0x23, 0x60, 0xff, 0xf7, 0x8c, 0xfe, 0x05, 0x46, 0x23, 0x68, + 0x9b, 0x00, 0x08, 0xd5, 0x00, 0x20, 0x05, 0xe0, 0xff, 0xf7, 0x84, 0xfe, + 0xc0, 0x1b, 0x02, 0x28, 0x9c, 0xd9, 0x03, 0x20, 0xf8, 0xbd, 0xff, 0xf7, + 0x7d, 0xfe, 0x40, 0x1b, 0x02, 0x28, 0xee, 0xd9, 0xf7, 0xe7, 0x01, 0x20, + 0xf6, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0xf8, 0xb5, 0x3e, 0x4c, + 0x06, 0x46, 0x0d, 0x46, 0xa3, 0x6a, 0x03, 0xf0, 0x03, 0x03, 0x03, 0x2b, + 0x71, 0xd0, 0x23, 0x68, 0x23, 0xf0, 0x80, 0x63, 0x23, 0x60, 0xff, 0xf7, + 0x65, 0xfe, 0x07, 0x46, 0x23, 0x68, 0x1a, 0x01, 0x5a, 0xd4, 0xa3, 0x6a, + 0x01, 0x2d, 0x32, 0x68, 0x23, 0xf4, 0x7c, 0x33, 0x43, 0xea, 0x02, 0x33, + 0xa3, 0x62, 0xb3, 0x68, 0xf2, 0x68, 0x03, 0xf1, 0xff, 0x33, 0x02, 0xf1, + 0xff, 0x32, 0x4f, 0xea, 0x43, 0x23, 0x4f, 0xea, 0x02, 0x42, 0x9b, 0xb2, + 0x02, 0xf4, 0xfe, 0x02, 0x43, 0xea, 0x02, 0x03, 0x72, 0x68, 0x02, 0xf1, + 0xff, 0x32, 0xc2, 0xf3, 0x08, 0x02, 0x43, 0xea, 0x02, 0x03, 0x32, 0x69, + 0x02, 0xf1, 0xff, 0x32, 0x4f, 0xea, 0x02, 0x62, 0x02, 0xf0, 0xfe, 0x42, + 0x43, 0xea, 0x02, 0x03, 0xa3, 0x63, 0xe3, 0x6a, 0x72, 0x69, 0x23, 0xf0, + 0xc0, 0x03, 0x43, 0xea, 0x02, 0x03, 0xe3, 0x62, 0xe3, 0x6a, 0xb2, 0x69, + 0x23, 0xf0, 0x20, 0x03, 0x43, 0xea, 0x02, 0x03, 0xe3, 0x62, 0xe3, 0x6a, + 0x23, 0xf0, 0x10, 0x03, 0xe3, 0x62, 0xe3, 0x6b, 0xf2, 0x69, 0x23, 0xf4, + 0x7f, 0x43, 0x23, 0xf0, 0xf8, 0x03, 0x43, 0xea, 0xc2, 0x03, 0xe3, 0x63, + 0xe3, 0x6a, 0x43, 0xf0, 0x10, 0x03, 0xe3, 0x62, 0xe3, 0x6a, 0x0c, 0xbf, + 0x43, 0xf4, 0x80, 0x13, 0x43, 0xf4, 0x00, 0x13, 0xe3, 0x62, 0x0e, 0x4c, + 0x23, 0x68, 0x43, 0xf0, 0x80, 0x63, 0x23, 0x60, 0xff, 0xf7, 0x0c, 0xfe, + 0x05, 0x46, 0x23, 0x68, 0x1b, 0x01, 0x08, 0xd5, 0x00, 0x20, 0x05, 0xe0, + 0xff, 0xf7, 0x04, 0xfe, 0xc0, 0x1b, 0x02, 0x28, 0x9c, 0xd9, 0x03, 0x20, + 0xf8, 0xbd, 0xff, 0xf7, 0xfd, 0xfd, 0x40, 0x1b, 0x02, 0x28, 0xee, 0xd9, + 0xf7, 0xe7, 0x01, 0x20, 0xf6, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, + 0xf8, 0xb5, 0x03, 0x68, 0x05, 0x46, 0xdf, 0x07, 0x25, 0xd4, 0x2b, 0x68, + 0x5e, 0x07, 0x1c, 0xd5, 0xab, 0x4c, 0x23, 0x68, 0x43, 0xf4, 0x80, 0x73, + 0x23, 0x60, 0xff, 0xf7, 0xe5, 0xfd, 0x06, 0x46, 0x23, 0x68, 0xda, 0x05, + 0x6a, 0xd5, 0xab, 0x68, 0xa6, 0x4c, 0x01, 0x2b, 0x6c, 0xd1, 0x23, 0x6f, + 0x43, 0xf0, 0x01, 0x03, 0x23, 0x67, 0x41, 0xf2, 0x88, 0x37, 0xff, 0xf7, + 0xd5, 0xfd, 0xa1, 0x4e, 0x04, 0x46, 0x33, 0x6f, 0x9b, 0x07, 0x40, 0xf1, + 0x84, 0x80, 0x69, 0x6a, 0x00, 0x29, 0x40, 0xf0, 0x87, 0x80, 0x00, 0x20, + 0x29, 0xe0, 0x9b, 0x4b, 0x1a, 0x69, 0x99, 0x6a, 0x02, 0xf0, 0x38, 0x02, + 0x10, 0x2a, 0x05, 0xd0, 0x18, 0x2a, 0x0b, 0xd1, 0x01, 0xf0, 0x03, 0x02, + 0x02, 0x2a, 0x07, 0xd1, 0x1b, 0x68, 0x9c, 0x03, 0xc9, 0xd5, 0x6b, 0x68, + 0x00, 0x2b, 0xc6, 0xd1, 0x01, 0x20, 0x14, 0xe0, 0x6a, 0x68, 0xb2, 0xf5, + 0x80, 0x3f, 0x11, 0xd1, 0x1a, 0x68, 0x42, 0xf4, 0x80, 0x32, 0x1a, 0x60, + 0xff, 0xf7, 0xaa, 0xfd, 0x8b, 0x4e, 0x04, 0x46, 0x33, 0x68, 0x98, 0x03, + 0xb5, 0xd4, 0xff, 0xf7, 0xa3, 0xfd, 0x00, 0x1b, 0x64, 0x28, 0xf7, 0xd9, + 0x03, 0x20, 0xf8, 0xbd, 0x85, 0x4c, 0x23, 0x68, 0x92, 0xb9, 0x23, 0xf4, + 0x80, 0x33, 0x23, 0x60, 0x23, 0x68, 0x23, 0xf4, 0x80, 0x23, 0x23, 0x60, + 0xff, 0xf7, 0x92, 0xfd, 0x06, 0x46, 0x23, 0x68, 0x99, 0x03, 0x9e, 0xd5, + 0xff, 0xf7, 0x8c, 0xfd, 0x80, 0x1b, 0x64, 0x28, 0xf7, 0xd9, 0xe7, 0xe7, + 0xb2, 0xf5, 0xa0, 0x2f, 0x07, 0xd1, 0x43, 0xf4, 0x80, 0x23, 0x23, 0x60, + 0x23, 0x68, 0x43, 0xf4, 0x80, 0x33, 0x23, 0x60, 0xd0, 0xe7, 0x23, 0xf4, + 0x80, 0x33, 0x23, 0x60, 0x23, 0x68, 0x23, 0xf4, 0x80, 0x23, 0xf6, 0xe7, + 0xff, 0xf7, 0x74, 0xfd, 0x80, 0x1b, 0x64, 0x28, 0x8c, 0xd9, 0xcf, 0xe7, + 0xab, 0xb9, 0x23, 0x6f, 0x41, 0xf2, 0x88, 0x37, 0x23, 0xf0, 0x01, 0x03, + 0x23, 0x67, 0x23, 0x6f, 0x23, 0xf0, 0x04, 0x03, 0x23, 0x67, 0xff, 0xf7, + 0x63, 0xfd, 0x06, 0x46, 0x23, 0x6f, 0x98, 0x07, 0x8f, 0xd5, 0xff, 0xf7, + 0x5d, 0xfd, 0x80, 0x1b, 0xb8, 0x42, 0xf7, 0xd9, 0xb8, 0xe7, 0x05, 0x2b, + 0x23, 0x6f, 0x03, 0xd1, 0x43, 0xf0, 0x04, 0x03, 0x23, 0x67, 0x74, 0xe7, + 0x23, 0xf0, 0x01, 0x03, 0x23, 0x67, 0x23, 0x6f, 0x23, 0xf0, 0x04, 0x03, + 0x70, 0xe7, 0xff, 0xf7, 0x49, 0xfd, 0x00, 0x1b, 0xb8, 0x42, 0x7f, 0xf6, + 0x72, 0xaf, 0xa3, 0xe7, 0x58, 0x4c, 0x23, 0x69, 0x03, 0xf0, 0x38, 0x03, + 0x18, 0x2b, 0x7a, 0xd0, 0x23, 0x68, 0x02, 0x29, 0x23, 0xf0, 0x80, 0x73, + 0x23, 0x60, 0x67, 0xd1, 0xff, 0xf7, 0x36, 0xfd, 0x06, 0x46, 0x23, 0x68, + 0x99, 0x01, 0x5b, 0xd4, 0xa3, 0x6a, 0xaa, 0x6a, 0x23, 0xf4, 0x7c, 0x73, + 0x23, 0xf0, 0x03, 0x03, 0x13, 0x43, 0xea, 0x6a, 0x43, 0xea, 0x02, 0x13, + 0xa3, 0x62, 0x6b, 0x6b, 0xaa, 0x6b, 0x01, 0x3b, 0x01, 0x3a, 0x5b, 0x02, + 0x12, 0x04, 0x9b, 0xb2, 0x02, 0xf4, 0xfe, 0x02, 0x13, 0x43, 0x2a, 0x6b, + 0x01, 0x3a, 0xc2, 0xf3, 0x08, 0x02, 0x13, 0x43, 0xea, 0x6b, 0x01, 0x3a, + 0x12, 0x06, 0x02, 0xf0, 0xfe, 0x42, 0x13, 0x43, 0x23, 0x63, 0xe3, 0x6a, + 0x23, 0xf0, 0x01, 0x03, 0xe3, 0x62, 0x63, 0x6b, 0xaa, 0x6c, 0x23, 0xf4, + 0x7f, 0x43, 0x23, 0xf0, 0xf8, 0x03, 0x43, 0xea, 0xc2, 0x03, 0x63, 0x63, + 0xe3, 0x6a, 0x2a, 0x6c, 0x23, 0xf0, 0x0c, 0x03, 0x13, 0x43, 0xe3, 0x62, + 0xe3, 0x6a, 0x6a, 0x6c, 0x23, 0xf0, 0x02, 0x03, 0x33, 0x4d, 0x13, 0x43, + 0xe3, 0x62, 0xe3, 0x6a, 0x43, 0xf4, 0x80, 0x33, 0xe3, 0x62, 0xe3, 0x6a, + 0x43, 0xf4, 0x00, 0x33, 0xe3, 0x62, 0xe3, 0x6a, 0x43, 0xf4, 0x80, 0x23, + 0xe3, 0x62, 0xe3, 0x6a, 0x43, 0xf0, 0x01, 0x03, 0xe3, 0x62, 0x23, 0x68, + 0x43, 0xf0, 0x80, 0x73, 0x23, 0x60, 0xff, 0xf7, 0xe1, 0xfc, 0x04, 0x46, + 0x2b, 0x68, 0x9a, 0x01, 0x3f, 0xf5, 0x11, 0xaf, 0xff, 0xf7, 0xda, 0xfc, + 0x00, 0x1b, 0x02, 0x28, 0xf6, 0xd9, 0x35, 0xe7, 0xff, 0xf7, 0xd4, 0xfc, + 0x80, 0x1b, 0x02, 0x28, 0x9b, 0xd9, 0x2f, 0xe7, 0xff, 0xf7, 0xce, 0xfc, + 0x05, 0x46, 0x23, 0x68, 0x9b, 0x01, 0x7f, 0xf5, 0xfe, 0xae, 0xff, 0xf7, + 0xc7, 0xfc, 0x40, 0x1b, 0x02, 0x28, 0xf6, 0xd9, 0x22, 0xe7, 0x01, 0x29, + 0xa2, 0x6a, 0x23, 0x6b, 0x3f, 0xf4, 0x08, 0xaf, 0x02, 0xf0, 0x03, 0x01, + 0xa8, 0x6a, 0x81, 0x42, 0x7f, 0xf4, 0x02, 0xaf, 0xc2, 0xf3, 0x05, 0x12, + 0xe9, 0x6a, 0x8a, 0x42, 0x7f, 0xf4, 0xfc, 0xae, 0x2a, 0x6b, 0xc3, 0xf3, + 0x08, 0x01, 0x01, 0x3a, 0x91, 0x42, 0x7f, 0xf4, 0xf5, 0xae, 0x6a, 0x6b, + 0xc3, 0xf3, 0x46, 0x21, 0x01, 0x3a, 0x91, 0x42, 0x7f, 0xf4, 0xee, 0xae, + 0xaa, 0x6b, 0xc3, 0xf3, 0x06, 0x41, 0x01, 0x3a, 0x91, 0x42, 0x7f, 0xf4, + 0xe7, 0xae, 0xea, 0x6b, 0xc3, 0xf3, 0x06, 0x63, 0x01, 0x3a, 0x93, 0x42, + 0x3f, 0xf4, 0xcb, 0xae, 0xde, 0xe6, 0x00, 0xbf, 0x00, 0x48, 0x02, 0x58, + 0x00, 0x44, 0x02, 0x58, 0x2d, 0xe9, 0xf0, 0x41, 0xdd, 0xf8, 0x18, 0x80, + 0x04, 0x46, 0x0e, 0x46, 0x15, 0x46, 0x1f, 0x46, 0x22, 0x68, 0x93, 0x68, + 0x33, 0x42, 0x14, 0xbf, 0x01, 0x23, 0x00, 0x23, 0xab, 0x42, 0x01, 0xd1, + 0x00, 0x20, 0x12, 0xe0, 0xb8, 0xf1, 0xff, 0x3f, 0xf3, 0xd0, 0xff, 0xf7, + 0x79, 0xfc, 0xc0, 0x1b, 0x40, 0x45, 0x02, 0xd8, 0xb8, 0xf1, 0x00, 0x0f, + 0xea, 0xd1, 0x04, 0x23, 0x01, 0x20, 0x84, 0xf8, 0x41, 0x30, 0x63, 0x6c, + 0x43, 0xf0, 0x01, 0x03, 0x63, 0x64, 0xbd, 0xe8, 0xf0, 0x81, 0x2d, 0xe9, + 0xf0, 0x4f, 0x05, 0x46, 0x85, 0xb0, 0x0c, 0x46, 0xff, 0xf7, 0x62, 0xfc, + 0x95, 0xf8, 0x40, 0x20, 0x07, 0xee, 0x90, 0x0a, 0x01, 0x2a, 0x00, 0xf0, + 0xe1, 0x80, 0x01, 0x22, 0x02, 0x20, 0x85, 0xf8, 0x40, 0x20, 0x95, 0xf8, + 0x41, 0x20, 0x01, 0x2a, 0x40, 0xf0, 0xbe, 0x80, 0x00, 0x22, 0x41, 0xf2, + 0x88, 0x31, 0x17, 0xee, 0x90, 0x3a, 0xcd, 0xed, 0x03, 0x7a, 0x6a, 0x64, + 0x00, 0x91, 0x20, 0x21, 0x85, 0xf8, 0x41, 0x00, 0x28, 0x46, 0xff, 0xf7, + 0xb3, 0xff, 0xdd, 0xed, 0x03, 0x7a, 0x00, 0x28, 0x40, 0xf0, 0xaa, 0x80, + 0xd4, 0xf8, 0x24, 0xc0, 0xbc, 0xf1, 0x00, 0x0f, 0x03, 0xd0, 0xa2, 0x6a, + 0x29, 0x68, 0x01, 0x3a, 0x0a, 0x61, 0xd4, 0xf8, 0x18, 0xa0, 0xd4, 0xe9, + 0x07, 0x27, 0xba, 0xf1, 0x00, 0x0f, 0x50, 0xd0, 0x63, 0x69, 0x4c, 0xea, + 0x0a, 0x0a, 0xd5, 0xf8, 0x00, 0xe0, 0x26, 0x68, 0x4f, 0xea, 0x83, 0x4b, + 0xd4, 0xf8, 0x34, 0x80, 0xd4, 0xe9, 0x0b, 0x19, 0x67, 0xb3, 0xa3, 0x68, + 0x47, 0xea, 0x0a, 0x0a, 0x27, 0x69, 0xce, 0xf8, 0x1c, 0x30, 0xba, 0xb1, + 0x32, 0x43, 0x11, 0x43, 0xe2, 0x68, 0x41, 0xea, 0x09, 0x09, 0x49, 0xea, + 0x08, 0x08, 0x48, 0xea, 0x07, 0x07, 0x17, 0x43, 0x47, 0xea, 0x0b, 0x07, + 0x47, 0xea, 0x0a, 0x07, 0xce, 0xf8, 0x14, 0x70, 0x62, 0x68, 0xce, 0xf8, + 0x18, 0x20, 0xbc, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0x81, 0x80, 0x62, 0xe0, + 0x31, 0x43, 0x41, 0xea, 0x09, 0x09, 0x49, 0xea, 0x08, 0x08, 0x48, 0xea, + 0x07, 0x07, 0x47, 0xea, 0x0b, 0x07, 0x47, 0xea, 0x0a, 0x07, 0xce, 0xf8, + 0x14, 0x70, 0xec, 0xe7, 0x52, 0xb1, 0x42, 0xea, 0x06, 0x07, 0x0f, 0x43, + 0x47, 0xea, 0x09, 0x07, 0x47, 0xea, 0x08, 0x08, 0xe7, 0x68, 0x48, 0xea, + 0x07, 0x07, 0xd7, 0xe7, 0x46, 0xea, 0x01, 0x07, 0x47, 0xea, 0x09, 0x07, + 0x47, 0xea, 0x08, 0x07, 0x47, 0xea, 0x0b, 0x0b, 0x4b, 0xea, 0x0a, 0x07, + 0xe5, 0xe7, 0x37, 0xb3, 0xa1, 0x68, 0x4c, 0xea, 0x07, 0x07, 0xd5, 0xf8, + 0x00, 0xe0, 0x26, 0x69, 0xce, 0xf8, 0x1c, 0x10, 0x61, 0x69, 0xd4, 0xf8, + 0x34, 0x80, 0x89, 0x04, 0xd4, 0xe9, 0x0b, 0xa9, 0x6a, 0xb1, 0x32, 0x43, + 0xe3, 0x68, 0x42, 0xea, 0x0a, 0x0a, 0x4a, 0xea, 0x09, 0x09, 0x49, 0xea, + 0x08, 0x08, 0x48, 0xea, 0x03, 0x08, 0x48, 0xea, 0x01, 0x01, 0x0f, 0x43, + 0xb2, 0xe7, 0x46, 0xea, 0x0a, 0x06, 0x46, 0xea, 0x09, 0x09, 0x49, 0xea, + 0x08, 0x08, 0x48, 0xea, 0x01, 0x01, 0x0f, 0x43, 0xbd, 0xe7, 0x8a, 0xb1, + 0xe1, 0x6a, 0x4c, 0xea, 0x02, 0x02, 0x0a, 0x43, 0x21, 0x6b, 0x0a, 0x43, + 0x61, 0x6b, 0x0a, 0x43, 0xe1, 0x68, 0x0a, 0x43, 0x61, 0x69, 0x42, 0xea, + 0x81, 0x42, 0x29, 0x68, 0x4a, 0x61, 0x62, 0x68, 0x8a, 0x61, 0x9a, 0xe7, + 0xbc, 0xf1, 0x00, 0x0f, 0x10, 0xd1, 0x41, 0xf2, 0x88, 0x32, 0x17, 0xee, + 0x90, 0x3a, 0x02, 0x21, 0x28, 0x46, 0x00, 0x92, 0x01, 0x22, 0xff, 0xf7, + 0x05, 0xff, 0xa8, 0xb1, 0x00, 0x23, 0x85, 0xf8, 0x40, 0x30, 0x05, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0xe3, 0x6a, 0x22, 0x6b, 0x4c, 0xea, 0x03, 0x03, + 0x13, 0x43, 0x62, 0x6b, 0x13, 0x43, 0x62, 0x69, 0x43, 0xea, 0x82, 0x43, + 0x2a, 0x68, 0x53, 0x61, 0x01, 0x23, 0x85, 0xf8, 0x41, 0x30, 0xe9, 0xe7, + 0x2b, 0x68, 0x02, 0x22, 0xda, 0x60, 0xf7, 0xe7, 0x02, 0x20, 0xe6, 0xe7, + 0xf0, 0xb5, 0x93, 0xb0, 0x04, 0x46, 0x08, 0x46, 0x16, 0x46, 0x04, 0xa9, + 0x1d, 0x46, 0xfc, 0xf7, 0x51, 0xff, 0x48, 0xb9, 0x2b, 0x68, 0x04, 0xa9, + 0x20, 0x46, 0x0e, 0x93, 0xff, 0xf7, 0xff, 0xfe, 0x07, 0x46, 0x18, 0xb1, + 0x4f, 0xf0, 0xff, 0x30, 0x13, 0xb0, 0xf0, 0xbd, 0xff, 0xf7, 0x60, 0xfb, + 0x25, 0x68, 0x03, 0x46, 0xa9, 0x69, 0x94, 0xf8, 0x40, 0x20, 0x01, 0x2a, + 0xf2, 0xd0, 0x01, 0x22, 0x84, 0xf8, 0x40, 0x20, 0x94, 0xf8, 0x41, 0x20, + 0x01, 0x2a, 0xd0, 0xb2, 0x46, 0xd1, 0x67, 0x64, 0x00, 0x2e, 0x3e, 0xd0, + 0x22, 0x22, 0x84, 0xf8, 0x41, 0x20, 0x2a, 0x69, 0x01, 0x32, 0xa2, 0x63, + 0x2a, 0x69, 0x26, 0x63, 0x41, 0xf2, 0x88, 0x36, 0x01, 0x32, 0x62, 0x63, + 0x6a, 0x69, 0x22, 0xf0, 0x40, 0x62, 0x42, 0xf0, 0x80, 0x62, 0x6a, 0x61, + 0xa9, 0x61, 0xa2, 0x6b, 0xa2, 0xb9, 0x01, 0x22, 0x02, 0x21, 0x20, 0x46, + 0x00, 0x96, 0xff, 0xf7, 0xa3, 0xfe, 0x10, 0xb9, 0x23, 0x68, 0x02, 0x22, + 0xda, 0x60, 0x01, 0x23, 0x84, 0xf8, 0x41, 0x30, 0x00, 0x23, 0xc0, 0x1a, + 0x84, 0xf8, 0x40, 0x30, 0x18, 0xbf, 0x01, 0x20, 0x40, 0x42, 0xbf, 0xe7, + 0x01, 0x22, 0x06, 0x21, 0x20, 0x46, 0x00, 0x96, 0x03, 0x93, 0xff, 0xf7, + 0x8d, 0xfe, 0x00, 0x28, 0xeb, 0xd1, 0x95, 0xf8, 0x20, 0x10, 0x22, 0x6b, + 0x03, 0x9b, 0x11, 0x70, 0x22, 0x6b, 0x01, 0x32, 0x22, 0x63, 0xa2, 0x6b, + 0x01, 0x3a, 0xa2, 0x63, 0xd3, 0xe7, 0x63, 0x6c, 0x43, 0xf0, 0x08, 0x03, + 0x63, 0x64, 0xdd, 0xe7, 0x02, 0x20, 0xdb, 0xe7, 0xf7, 0xb5, 0x00, 0x93, + 0x05, 0x46, 0x90, 0xf8, 0x94, 0x30, 0x14, 0x46, 0x01, 0x91, 0xdd, 0xe9, + 0x08, 0x67, 0xf3, 0xb1, 0xd6, 0xb1, 0x3b, 0x68, 0xdb, 0xb1, 0x0a, 0xf0, + 0x3f, 0xfe, 0x23, 0x46, 0x28, 0x46, 0xdd, 0xe9, 0x00, 0x21, 0x0a, 0xf0, + 0x87, 0xfc, 0x3b, 0x46, 0x32, 0x46, 0x05, 0xf1, 0x68, 0x01, 0x28, 0x1d, + 0xff, 0xf7, 0x74, 0xff, 0x04, 0x1e, 0x28, 0x46, 0x18, 0xbf, 0x01, 0x24, + 0x64, 0x42, 0x0a, 0xf0, 0x21, 0xfe, 0x20, 0x46, 0x03, 0xb0, 0xf0, 0xbd, + 0x6f, 0xf0, 0x01, 0x04, 0xf9, 0xe7, 0x4f, 0xf0, 0xff, 0x34, 0xf6, 0xe7, + 0xf0, 0xb5, 0x93, 0xb0, 0x04, 0x46, 0x08, 0x46, 0x16, 0x46, 0x04, 0xa9, + 0x1d, 0x46, 0xfc, 0xf7, 0xb5, 0xfe, 0x48, 0xb9, 0x2b, 0x68, 0x04, 0xa9, + 0x20, 0x46, 0x0e, 0x93, 0xff, 0xf7, 0x63, 0xfe, 0x07, 0x46, 0x18, 0xb1, + 0x4f, 0xf0, 0xff, 0x30, 0x13, 0xb0, 0xf0, 0xbd, 0xff, 0xf7, 0xc4, 0xfa, + 0x94, 0xf8, 0x40, 0x20, 0x03, 0x46, 0x25, 0x68, 0x01, 0x2a, 0xf3, 0xd0, + 0x01, 0x22, 0x84, 0xf8, 0x40, 0x20, 0x94, 0xf8, 0x41, 0x20, 0x01, 0x2a, + 0xd0, 0xb2, 0x43, 0xd1, 0x67, 0x64, 0x00, 0x2e, 0x3b, 0xd0, 0x12, 0x22, + 0x84, 0xf8, 0x41, 0x20, 0x2a, 0x69, 0x01, 0x32, 0xe2, 0x62, 0x2a, 0x69, + 0x66, 0x62, 0x41, 0xf2, 0x88, 0x36, 0x01, 0x32, 0xa2, 0x62, 0x6a, 0x69, + 0x22, 0xf0, 0x40, 0x62, 0x6a, 0x61, 0xe2, 0x6a, 0xa2, 0xb9, 0x01, 0x22, + 0x02, 0x21, 0x20, 0x46, 0x00, 0x96, 0xff, 0xf7, 0x0b, 0xfe, 0x10, 0xb9, + 0x23, 0x68, 0x02, 0x22, 0xda, 0x60, 0x01, 0x23, 0x84, 0xf8, 0x41, 0x30, + 0x00, 0x23, 0xc0, 0x1a, 0x84, 0xf8, 0x40, 0x30, 0x18, 0xbf, 0x01, 0x20, + 0x40, 0x42, 0xc3, 0xe7, 0x01, 0x22, 0x04, 0x21, 0x20, 0x46, 0x00, 0x96, + 0x03, 0x93, 0xff, 0xf7, 0xf5, 0xfd, 0x00, 0x28, 0xeb, 0xd1, 0x62, 0x6a, + 0x03, 0x9b, 0x12, 0x78, 0x85, 0xf8, 0x20, 0x20, 0x62, 0x6a, 0x01, 0x32, + 0x62, 0x62, 0xe2, 0x6a, 0x01, 0x3a, 0xe2, 0x62, 0xd3, 0xe7, 0x63, 0x6c, + 0x43, 0xf0, 0x08, 0x03, 0x63, 0x64, 0xdd, 0xe7, 0x02, 0x20, 0xdb, 0xe7, + 0x2d, 0xe9, 0xf0, 0x47, 0x1c, 0x46, 0x90, 0xb0, 0x90, 0xf8, 0x94, 0x30, + 0x05, 0x46, 0xdd, 0xf8, 0x68, 0x90, 0xdd, 0xe9, 0x18, 0xa8, 0xcd, 0xe9, + 0x00, 0x21, 0x63, 0xb3, 0x0a, 0xf0, 0xa6, 0xfd, 0x4f, 0xf0, 0xff, 0x33, + 0x28, 0x46, 0x2e, 0x1d, 0x05, 0xf1, 0x68, 0x07, 0xdd, 0xe9, 0x00, 0x21, + 0x0a, 0xf0, 0xea, 0xfb, 0x14, 0xb1, 0xba, 0xf1, 0x00, 0x0f, 0x23, 0xd1, + 0xb8, 0xf1, 0x00, 0x0f, 0x02, 0xd0, 0xb9, 0xf1, 0x00, 0x0f, 0x19, 0xd1, + 0x02, 0xa9, 0x38, 0x46, 0xfc, 0xf7, 0x2a, 0xfe, 0x04, 0x46, 0x38, 0xb9, + 0x01, 0x23, 0x02, 0xa9, 0xcd, 0xe9, 0x0b, 0x03, 0x30, 0x46, 0xff, 0xf7, + 0xd6, 0xfd, 0x08, 0xb1, 0x4f, 0xf0, 0xff, 0x34, 0x28, 0x46, 0x0a, 0xf0, + 0x75, 0xfd, 0x20, 0x46, 0x10, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x4f, 0xf0, + 0xff, 0x34, 0xf8, 0xe7, 0x9c, 0xb1, 0xba, 0xf1, 0x00, 0x0f, 0x10, 0xd0, + 0x22, 0x46, 0x02, 0xab, 0x39, 0x46, 0x30, 0x46, 0xcd, 0xf8, 0x08, 0xa0, + 0xff, 0xf7, 0x4a, 0xff, 0x04, 0x46, 0x00, 0x28, 0xe4, 0xd1, 0xb8, 0xf1, + 0x00, 0x0f, 0xe3, 0xd0, 0xb9, 0xf1, 0x00, 0x0f, 0xe0, 0xd0, 0x02, 0xab, + 0x42, 0x46, 0x39, 0x46, 0x30, 0x46, 0xcd, 0xf8, 0x08, 0x90, 0xff, 0xf7, + 0x9d, 0xfe, 0x04, 0x1e, 0x18, 0xbf, 0x01, 0x24, 0x64, 0x42, 0xd3, 0xe7, + 0x70, 0xb5, 0x0e, 0x46, 0x04, 0x46, 0x08, 0x09, 0xfc, 0xf7, 0x96, 0xfe, + 0x4f, 0xf4, 0x70, 0x71, 0x05, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x48, 0xf9, + 0x23, 0x8a, 0x0a, 0x4a, 0x06, 0xf0, 0x0f, 0x06, 0x03, 0xf0, 0x0f, 0x03, + 0x01, 0x21, 0x65, 0x61, 0x52, 0xf8, 0x23, 0x30, 0x01, 0xfa, 0x06, 0xf6, + 0xa3, 0x61, 0x05, 0xf1, 0x10, 0x03, 0x18, 0x35, 0x26, 0x60, 0x63, 0x60, + 0xc4, 0xe9, 0x02, 0x55, 0x70, 0xbd, 0x00, 0xbf, 0x10, 0xd9, 0x01, 0x08, + 0x10, 0xb5, 0x0c, 0x4b, 0x0c, 0x4c, 0xd4, 0xf8, 0x94, 0x20, 0x9a, 0x42, + 0xfb, 0xd1, 0xd0, 0xe9, 0x05, 0x42, 0x52, 0x43, 0x02, 0xeb, 0x42, 0x03, + 0xdb, 0x43, 0x39, 0xb9, 0x22, 0x68, 0x13, 0x40, 0x23, 0x60, 0x4f, 0xf4, + 0x40, 0x72, 0x04, 0x4b, 0x5a, 0x61, 0x10, 0xbd, 0x21, 0x68, 0x0b, 0x40, + 0x13, 0x43, 0xf5, 0xe7, 0x00, 0x03, 0x00, 0x80, 0x00, 0x64, 0x02, 0x58, + 0x03, 0x4b, 0xd9, 0x68, 0x1a, 0x68, 0x22, 0xea, 0x01, 0x02, 0x1a, 0x60, + 0x59, 0x60, 0x70, 0x47, 0x00, 0x65, 0x02, 0x58, 0x44, 0x4a, 0x13, 0x69, + 0x11, 0x46, 0x03, 0xf0, 0x38, 0x03, 0x10, 0x2b, 0x30, 0xb5, 0x7c, 0xd0, + 0x05, 0xd8, 0x00, 0x2b, 0x55, 0xd0, 0x08, 0x2b, 0x79, 0xd0, 0x0a, 0x68, + 0x52, 0xe0, 0x18, 0x2b, 0xfb, 0xd1, 0x90, 0x6a, 0x95, 0x6a, 0xd1, 0x6a, + 0x15, 0xf4, 0x7c, 0x7f, 0xc5, 0xf3, 0x05, 0x13, 0x54, 0x6b, 0x3b, 0xd0, + 0x07, 0xee, 0x90, 0x3a, 0xc4, 0xf3, 0xcc, 0x04, 0x01, 0xf0, 0x01, 0x03, + 0x00, 0xf0, 0x03, 0x00, 0xf8, 0xee, 0xe7, 0x6a, 0x63, 0x43, 0x01, 0x28, + 0xf7, 0xee, 0x00, 0x5a, 0x07, 0xee, 0x90, 0x3a, 0xfa, 0xee, 0xe9, 0x7a, + 0x39, 0xd0, 0x02, 0x28, 0x47, 0xd0, 0x11, 0x68, 0x2d, 0x4b, 0xc1, 0xf3, + 0xc1, 0x01, 0x12, 0x6b, 0xcb, 0x40, 0xc2, 0xf3, 0x08, 0x02, 0x07, 0xee, + 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x6a, 0x86, 0xee, 0x26, 0x7a, 0x06, 0xee, + 0x90, 0x2a, 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, + 0xa5, 0x7a, 0x22, 0x4b, 0x67, 0xee, 0x87, 0x7a, 0x1b, 0x6b, 0xc3, 0xf3, + 0x46, 0x23, 0x01, 0x33, 0x07, 0xee, 0x10, 0x3a, 0xf8, 0xee, 0xc7, 0x6a, + 0x87, 0xee, 0xa6, 0x7a, 0xfc, 0xee, 0xc7, 0x7a, 0x17, 0xee, 0x90, 0x3a, + 0x19, 0x49, 0x8a, 0x69, 0x89, 0x69, 0xc2, 0xf3, 0x03, 0x22, 0x19, 0x49, + 0x8a, 0x5c, 0xd3, 0x40, 0x18, 0x4a, 0x13, 0x60, 0x30, 0xbd, 0x12, 0x68, + 0xc2, 0xf3, 0xc1, 0x02, 0x13, 0x4b, 0xd3, 0x40, 0xee, 0xe7, 0x13, 0x6b, + 0x9f, 0xed, 0x14, 0x6a, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, + 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0xa5, 0x7a, + 0x86, 0xee, 0x26, 0x7a, 0xcd, 0xe7, 0x13, 0x6b, 0x9f, 0xed, 0x0d, 0x6a, + 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, + 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0xa5, 0x7a, 0xee, 0xe7, 0x08, 0x4b, + 0xce, 0xe7, 0x08, 0x4b, 0xcc, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x90, 0xd0, 0x03, 0x29, 0xd5, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x24, 0x74, 0x4a, 0x20, 0xbc, 0xbe, 0x4b, 0x40, 0x78, 0x7d, 0x01, + 0x00, 0x09, 0x3d, 0x00, 0x2b, 0x4b, 0xd3, 0xf8, 0x88, 0x20, 0x42, 0xf4, + 0x70, 0x02, 0xc3, 0xf8, 0x88, 0x20, 0x1a, 0x69, 0x42, 0xf0, 0x10, 0x02, + 0x1a, 0x61, 0x27, 0x4a, 0x13, 0x68, 0x03, 0xf0, 0x0f, 0x03, 0x06, 0x2b, + 0x05, 0xd8, 0x13, 0x68, 0x23, 0xf0, 0x0f, 0x03, 0x43, 0xf0, 0x07, 0x03, + 0x13, 0x60, 0x22, 0x4b, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x60, + 0x00, 0x22, 0x1a, 0x61, 0x1f, 0x4a, 0x19, 0x68, 0x0a, 0x40, 0x1c, 0x49, + 0x1a, 0x60, 0x0a, 0x68, 0x12, 0x07, 0x05, 0xd5, 0x0a, 0x68, 0x22, 0xf0, + 0x0f, 0x02, 0x42, 0xf0, 0x07, 0x02, 0x0a, 0x60, 0x00, 0x22, 0x19, 0x49, + 0x9a, 0x61, 0xda, 0x61, 0x1a, 0x62, 0x99, 0x62, 0x17, 0x49, 0xd9, 0x62, + 0x17, 0x49, 0x19, 0x63, 0x5a, 0x63, 0x99, 0x63, 0xda, 0x63, 0x19, 0x64, + 0x5a, 0x64, 0x19, 0x68, 0x21, 0xf4, 0x80, 0x21, 0x19, 0x60, 0x1a, 0x66, + 0x12, 0x4a, 0x53, 0x6a, 0x43, 0xf4, 0x80, 0x43, 0x53, 0x62, 0x11, 0x4b, + 0x1b, 0x68, 0x1b, 0x0c, 0x1b, 0x04, 0xb3, 0xf1, 0x00, 0x5f, 0x02, 0xd2, + 0x0e, 0x4b, 0x01, 0x22, 0x1a, 0x60, 0x0e, 0x4b, 0x43, 0xf2, 0xd2, 0x02, + 0x1a, 0x60, 0x0d, 0x4a, 0x01, 0x4b, 0x9a, 0x60, 0x70, 0x47, 0x00, 0xbf, + 0x00, 0xed, 0x00, 0xe0, 0x00, 0x20, 0x00, 0x52, 0x00, 0x44, 0x02, 0x58, + 0x7f, 0xed, 0xf6, 0xea, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0xff, 0x01, + 0x80, 0x02, 0x01, 0x01, 0xc0, 0x00, 0x00, 0x58, 0x00, 0x10, 0x00, 0x5c, + 0x08, 0x81, 0x00, 0x51, 0x00, 0x40, 0x00, 0x52, 0x00, 0x00, 0x00, 0x08, + 0x0a, 0x4b, 0x01, 0x3b, 0x0f, 0xd0, 0x02, 0x69, 0x00, 0x2a, 0xfa, 0xda, + 0x03, 0x69, 0x07, 0x4a, 0x43, 0xf0, 0x01, 0x03, 0x03, 0x61, 0x01, 0x3a, + 0x05, 0xd0, 0x03, 0x69, 0x13, 0xf0, 0x01, 0x03, 0xf9, 0xd1, 0x18, 0x46, + 0x70, 0x47, 0x03, 0x20, 0x70, 0x47, 0x00, 0xbf, 0x41, 0x0d, 0x03, 0x00, + 0x30, 0xb5, 0x05, 0x6c, 0x00, 0xf5, 0x30, 0x63, 0x0f, 0x4c, 0xa5, 0x42, + 0x03, 0xd9, 0xd0, 0xf8, 0x00, 0x4b, 0x00, 0x2c, 0x16, 0xdb, 0x00, 0x24, + 0x01, 0x29, 0x1c, 0x61, 0x1c, 0x69, 0x44, 0xf4, 0x00, 0x24, 0x1c, 0x61, + 0x1c, 0x69, 0x44, 0xf0, 0x18, 0x04, 0x1c, 0x61, 0x1c, 0x69, 0x44, 0xf0, + 0xc0, 0x44, 0x1c, 0x61, 0x06, 0xd1, 0x5a, 0x61, 0xd0, 0xf8, 0x00, 0x3b, + 0x43, 0xf0, 0x80, 0x23, 0xc0, 0xf8, 0x00, 0x3b, 0x00, 0x20, 0x30, 0xbd, + 0x0a, 0x30, 0x54, 0x4f, 0xd0, 0xf8, 0x00, 0x3e, 0x23, 0xf0, 0x03, 0x03, + 0xc0, 0xf8, 0x00, 0x3e, 0xd0, 0xf8, 0x04, 0x38, 0x43, 0xf0, 0x02, 0x03, + 0xc0, 0xf8, 0x04, 0x38, 0x00, 0x20, 0x70, 0x47, 0x70, 0xb5, 0x00, 0x23, + 0x94, 0x08, 0x00, 0xf5, 0x80, 0x55, 0x02, 0xf0, 0x03, 0x02, 0xa3, 0x42, + 0x14, 0xd3, 0x01, 0xeb, 0x84, 0x01, 0x7a, 0xb1, 0x00, 0xf5, 0x80, 0x50, + 0x00, 0x23, 0x04, 0x68, 0xd8, 0x00, 0x24, 0xfa, 0x00, 0xf0, 0xc8, 0x54, + 0x01, 0x33, 0x98, 0xb2, 0x82, 0x42, 0xf7, 0xd1, 0x01, 0x3a, 0x92, 0xb2, + 0x01, 0x32, 0x11, 0x44, 0x08, 0x46, 0x70, 0xbd, 0x2e, 0x68, 0x41, 0xf8, + 0x23, 0x60, 0x01, 0x33, 0xe3, 0xe7, 0x70, 0xb5, 0x0e, 0x78, 0x01, 0x25, + 0x00, 0xf5, 0x00, 0x62, 0x06, 0xf0, 0x0f, 0x03, 0x74, 0x01, 0x9d, 0x40, + 0x4b, 0x78, 0x01, 0x2b, 0xd3, 0x69, 0x17, 0xd1, 0x1d, 0x43, 0x00, 0xf5, + 0x10, 0x60, 0xd5, 0x61, 0x03, 0x59, 0x1a, 0x04, 0x0e, 0xd4, 0x8a, 0x68, + 0x05, 0x59, 0xc2, 0xf3, 0x0a, 0x03, 0xca, 0x78, 0x2b, 0x43, 0x43, 0xea, + 0x82, 0x43, 0x43, 0xea, 0x86, 0x53, 0x43, 0xf0, 0x80, 0x53, 0x43, 0xf4, + 0x00, 0x43, 0x03, 0x51, 0x00, 0x20, 0x70, 0xbd, 0x43, 0xea, 0x05, 0x45, + 0x00, 0xf5, 0x30, 0x60, 0xd5, 0x61, 0x03, 0x59, 0x1b, 0x04, 0xf5, 0xd4, + 0x8b, 0x68, 0x02, 0x59, 0xc3, 0xf3, 0x0a, 0x03, 0x13, 0x43, 0xca, 0x78, + 0x43, 0xea, 0x82, 0x43, 0xe7, 0xe7, 0x00, 0x00, 0x11, 0x4b, 0x4f, 0xf4, + 0xfa, 0x51, 0x02, 0x46, 0x1b, 0x68, 0xb3, 0xfb, 0xf1, 0xf1, 0x41, 0xf2, + 0x88, 0x33, 0x4b, 0x43, 0x01, 0x3b, 0x13, 0xd3, 0x51, 0x6b, 0x11, 0xf0, + 0x45, 0x0f, 0xf9, 0xd0, 0x89, 0x04, 0xf7, 0xd4, 0x53, 0x6b, 0x5b, 0x07, + 0x02, 0xd5, 0x04, 0x20, 0x90, 0x63, 0x70, 0x47, 0x50, 0x6b, 0x10, 0xf0, + 0x01, 0x00, 0x14, 0xbf, 0x01, 0x23, 0x04, 0x4b, 0x93, 0x63, 0x70, 0x47, + 0x4f, 0xf0, 0x00, 0x40, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x24, + 0xc5, 0x00, 0x20, 0x00, 0x45, 0x4b, 0x10, 0xb5, 0x1b, 0x68, 0x04, 0x46, + 0x4f, 0xf4, 0xfa, 0x50, 0xb3, 0xfb, 0xf0, 0xf3, 0x42, 0x48, 0x5a, 0x43, + 0x00, 0x2a, 0x48, 0xd0, 0x63, 0x6b, 0x03, 0x42, 0x07, 0xd0, 0x9b, 0x04, + 0x05, 0xd4, 0x63, 0x6b, 0x58, 0x07, 0x04, 0xd5, 0x04, 0x20, 0xa0, 0x63, + 0x10, 0xbd, 0x01, 0x3a, 0xf0, 0xe7, 0x60, 0x6b, 0x10, 0xf0, 0x01, 0x00, + 0x02, 0xd0, 0x01, 0x23, 0xa3, 0x63, 0xf5, 0xe7, 0x37, 0x4b, 0xa3, 0x63, + 0x23, 0x69, 0xdb, 0xb2, 0x99, 0x42, 0x31, 0xd1, 0x63, 0x69, 0x35, 0x48, + 0x18, 0x40, 0x00, 0x28, 0xea, 0xd0, 0x00, 0x2b, 0x2c, 0xdb, 0x5a, 0x00, + 0x2d, 0xd4, 0x9c, 0x00, 0x2d, 0xd4, 0xd9, 0x00, 0x2d, 0xd4, 0x1a, 0x01, + 0x2e, 0xd4, 0x5c, 0x01, 0x2f, 0xd4, 0xd9, 0x01, 0x30, 0xd4, 0x1a, 0x02, + 0x31, 0xd4, 0x5c, 0x02, 0x32, 0xd4, 0x99, 0x02, 0x33, 0xd4, 0xda, 0x02, + 0x34, 0xd4, 0x5c, 0x03, 0x35, 0xd4, 0x99, 0x03, 0x36, 0xd4, 0xda, 0x03, + 0x37, 0xd4, 0x1c, 0x04, 0x38, 0xd4, 0x59, 0x04, 0x39, 0xd4, 0x9a, 0x04, + 0x3a, 0xd4, 0x13, 0xf0, 0x08, 0x0f, 0x14, 0xbf, 0x4f, 0xf4, 0x00, 0x00, + 0x4f, 0xf4, 0x80, 0x30, 0xc0, 0xe7, 0x4f, 0xf0, 0x00, 0x40, 0xbd, 0xe7, + 0x01, 0x20, 0xbb, 0xe7, 0x4f, 0xf0, 0x00, 0x70, 0xb8, 0xe7, 0x40, 0x20, + 0xb6, 0xe7, 0x80, 0x20, 0xb4, 0xe7, 0x4f, 0xf4, 0x80, 0x70, 0xb1, 0xe7, + 0x4f, 0xf4, 0x00, 0x70, 0xae, 0xe7, 0x4f, 0xf4, 0x80, 0x60, 0xab, 0xe7, + 0x4f, 0xf4, 0x00, 0x60, 0xa8, 0xe7, 0x4f, 0xf4, 0x80, 0x50, 0xa5, 0xe7, + 0x4f, 0xf4, 0x00, 0x50, 0xa2, 0xe7, 0x4f, 0xf4, 0x80, 0x40, 0x9f, 0xe7, + 0x4f, 0xf4, 0x00, 0x40, 0x9c, 0xe7, 0x4f, 0xf4, 0x00, 0x30, 0x99, 0xe7, + 0x4f, 0xf4, 0x80, 0x20, 0x96, 0xe7, 0x4f, 0xf4, 0x00, 0x20, 0x93, 0xe7, + 0x4f, 0xf4, 0x80, 0x10, 0x90, 0xe7, 0x4f, 0xf4, 0x00, 0x10, 0x8d, 0xe7, + 0x4f, 0xf4, 0x80, 0x00, 0x8a, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x24, + 0x45, 0x00, 0x20, 0x00, 0xc5, 0x00, 0x20, 0x00, 0x08, 0xe0, 0xff, 0xfd, + 0xf0, 0xb5, 0x12, 0x4d, 0x87, 0xb0, 0x0d, 0x27, 0x00, 0x24, 0x6b, 0x6c, + 0x01, 0xa9, 0x2e, 0x68, 0x1b, 0x04, 0x30, 0x46, 0x01, 0x93, 0x4f, 0xf4, + 0x80, 0x73, 0xcd, 0xe9, 0x02, 0x73, 0x4f, 0xf4, 0x80, 0x53, 0xcd, 0xe9, + 0x04, 0x43, 0xfc, 0xf7, 0x43, 0xff, 0x41, 0xf2, 0x88, 0x32, 0x39, 0x46, + 0x30, 0x46, 0xff, 0xf7, 0x51, 0xff, 0x28, 0xb9, 0x2b, 0x68, 0x5c, 0x69, + 0xc4, 0xf3, 0x43, 0x20, 0x07, 0xb0, 0xf0, 0xbd, 0x6b, 0x6b, 0x18, 0x43, + 0x68, 0x63, 0xf7, 0xe7, 0x2c, 0x0d, 0x02, 0x24, 0x30, 0xb5, 0x4f, 0xf4, + 0x80, 0x73, 0x87, 0xb0, 0x06, 0x25, 0x00, 0x22, 0x04, 0x46, 0x01, 0x91, + 0x01, 0xa9, 0xcd, 0xe9, 0x02, 0x53, 0x4f, 0xf4, 0x80, 0x53, 0xcd, 0xe9, + 0x04, 0x23, 0xfc, 0xf7, 0x1f, 0xff, 0x41, 0xf2, 0x88, 0x32, 0x29, 0x46, + 0x20, 0x46, 0xff, 0xf7, 0x2d, 0xff, 0x07, 0xb0, 0x30, 0xbd, 0x30, 0xb5, + 0x4f, 0xf4, 0x80, 0x73, 0x87, 0xb0, 0x37, 0x25, 0x00, 0x22, 0x04, 0x46, + 0x01, 0x91, 0x01, 0xa9, 0xcd, 0xe9, 0x02, 0x53, 0x4f, 0xf4, 0x80, 0x53, + 0xcd, 0xe9, 0x04, 0x23, 0xfc, 0xf7, 0x06, 0xff, 0x41, 0xf2, 0x88, 0x32, + 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x14, 0xff, 0x07, 0xb0, 0x30, 0xbd, + 0x10, 0xb5, 0x00, 0x23, 0x86, 0xb0, 0x04, 0x46, 0x01, 0xa9, 0xcd, 0xe9, + 0x01, 0x33, 0xcd, 0xe9, 0x03, 0x33, 0x4f, 0xf4, 0x80, 0x53, 0x05, 0x93, + 0xfc, 0xf7, 0xf0, 0xfe, 0x0a, 0x4b, 0x4f, 0xf4, 0xfa, 0x52, 0x1b, 0x68, + 0xb3, 0xfb, 0xf2, 0xf2, 0x41, 0xf2, 0x88, 0x33, 0x53, 0x43, 0x01, 0x3b, + 0x07, 0xd3, 0x62, 0x6b, 0x12, 0x06, 0xfa, 0xd5, 0x04, 0x4b, 0x00, 0x20, + 0xa3, 0x63, 0x06, 0xb0, 0x10, 0xbd, 0x4f, 0xf0, 0x00, 0x40, 0xfa, 0xe7, + 0x00, 0x00, 0x00, 0x24, 0xc5, 0x00, 0x20, 0x00, 0x30, 0xb5, 0x00, 0x23, + 0x87, 0xb0, 0x0c, 0x25, 0x4f, 0xf4, 0x80, 0x72, 0x04, 0x46, 0x01, 0xa9, + 0xcd, 0xe9, 0x03, 0x23, 0xcd, 0xe9, 0x01, 0x35, 0x4f, 0xf4, 0x80, 0x53, + 0x05, 0x93, 0xc3, 0x68, 0x43, 0xf0, 0x80, 0x03, 0xc3, 0x60, 0xc3, 0x68, + 0x23, 0xf0, 0x40, 0x03, 0xc3, 0x60, 0xfc, 0xf7, 0xbd, 0xfe, 0x07, 0x4a, + 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xcc, 0xfe, 0xe3, 0x68, 0xb0, 0xf1, + 0x00, 0x7f, 0x08, 0xbf, 0x00, 0x20, 0x23, 0xf0, 0x80, 0x03, 0xe3, 0x60, + 0x07, 0xb0, 0x30, 0xbd, 0x00, 0xe1, 0xf5, 0x05, 0x30, 0xb5, 0x4f, 0xf4, + 0x80, 0x73, 0x87, 0xb0, 0x10, 0x25, 0x00, 0x22, 0x04, 0x46, 0x01, 0x91, + 0x01, 0xa9, 0xcd, 0xe9, 0x02, 0x53, 0x4f, 0xf4, 0x80, 0x53, 0xcd, 0xe9, + 0x04, 0x23, 0xfc, 0xf7, 0x9b, 0xfe, 0x41, 0xf2, 0x88, 0x32, 0x29, 0x46, + 0x20, 0x46, 0xff, 0xf7, 0xa9, 0xfe, 0x07, 0xb0, 0x30, 0xbd, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x47, 0x36, 0x4d, 0x86, 0xb0, 0x07, 0x46, 0xfe, 0xf7, + 0x8b, 0xfe, 0x08, 0x21, 0x80, 0x46, 0x28, 0x68, 0xff, 0xf7, 0xda, 0xff, + 0x04, 0x46, 0x00, 0x28, 0x37, 0xd1, 0x69, 0x6c, 0x28, 0x68, 0x09, 0x04, + 0xff, 0xf7, 0x67, 0xff, 0x04, 0x46, 0x80, 0xbb, 0x2e, 0x68, 0x4f, 0xf0, + 0xff, 0x33, 0x4f, 0xf0, 0x33, 0x09, 0x01, 0xa9, 0x73, 0x62, 0x08, 0x23, + 0x01, 0x90, 0xb3, 0x62, 0xf3, 0x6a, 0x04, 0x90, 0x30, 0x46, 0x23, 0xf0, + 0xff, 0x03, 0x43, 0xf0, 0x33, 0x03, 0xf3, 0x62, 0x4f, 0xf4, 0x80, 0x73, + 0xcd, 0xe9, 0x02, 0x93, 0x4f, 0xf4, 0x80, 0x53, 0x05, 0x93, 0xfc, 0xf7, + 0x61, 0xfe, 0x41, 0xf2, 0x88, 0x32, 0x49, 0x46, 0x30, 0x46, 0xff, 0xf7, + 0x6f, 0xfe, 0x04, 0x46, 0x68, 0xb9, 0x81, 0x46, 0x06, 0x46, 0x40, 0xf2, + 0x2a, 0x5a, 0x2b, 0x68, 0x5a, 0x6b, 0x12, 0xea, 0x0a, 0x0f, 0x5a, 0x6b, + 0x07, 0xd0, 0x11, 0x07, 0x16, 0xd5, 0x08, 0x24, 0x9c, 0x63, 0x20, 0x46, + 0x06, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x10, 0x03, 0x05, 0xd4, 0x24, 0xb9, + 0xd3, 0xf8, 0x80, 0x60, 0x01, 0x24, 0xd3, 0xf8, 0x80, 0x90, 0xfe, 0xf7, + 0x3d, 0xfe, 0xa0, 0xeb, 0x08, 0x00, 0x01, 0x30, 0xe3, 0xd1, 0x4f, 0xf0, + 0x00, 0x44, 0xea, 0xe7, 0x5a, 0x6b, 0x92, 0x07, 0x01, 0xd5, 0x02, 0x24, + 0xe4, 0xe7, 0x5c, 0x6b, 0x14, 0xf0, 0x20, 0x04, 0x01, 0xd0, 0x20, 0x24, + 0xde, 0xe7, 0x05, 0x4a, 0x36, 0xba, 0x9a, 0x63, 0x99, 0xfa, 0x89, 0xf3, + 0x7e, 0x60, 0x3b, 0x60, 0xd7, 0xe7, 0x00, 0xbf, 0x2c, 0x0d, 0x02, 0x24, + 0x3a, 0x0f, 0x00, 0x18, 0x2d, 0xe9, 0xf8, 0x43, 0x06, 0x68, 0x05, 0x46, + 0x16, 0xf0, 0x00, 0x76, 0x07, 0xd0, 0x83, 0x6c, 0x20, 0x2b, 0x1f, 0xd0, + 0x0d, 0xd8, 0x73, 0xb1, 0x10, 0x2b, 0x15, 0xd0, 0x01, 0x26, 0x2b, 0x68, + 0xd9, 0x01, 0x73, 0xd5, 0x6b, 0x6c, 0x03, 0x2b, 0x6f, 0xd8, 0xdf, 0xe8, + 0x03, 0xf0, 0x20, 0x1b, 0x22, 0x20, 0x30, 0x2b, 0xf2, 0xd1, 0x73, 0x4a, + 0x00, 0x26, 0xa9, 0x6c, 0xd3, 0x6c, 0x23, 0xf0, 0x30, 0x03, 0x0b, 0x43, + 0xd3, 0x64, 0xea, 0xe7, 0x6e, 0x4a, 0xd3, 0x6a, 0x43, 0xf4, 0x00, 0x33, + 0xd3, 0x62, 0xf0, 0xe7, 0x02, 0x21, 0x04, 0x30, 0xfe, 0xf7, 0x7c, 0xff, + 0x06, 0x46, 0x00, 0x28, 0xdd, 0xd1, 0xe8, 0xe7, 0x67, 0x4a, 0xd3, 0x6a, + 0x43, 0xf4, 0x00, 0x33, 0xd3, 0x62, 0x34, 0x46, 0x04, 0xe0, 0x02, 0x21, + 0x28, 0x1d, 0xfe, 0xf7, 0x6d, 0xff, 0x04, 0x46, 0x00, 0x2c, 0x47, 0xd1, + 0x60, 0x4a, 0x69, 0x6c, 0xd3, 0x6c, 0x23, 0xf0, 0x03, 0x03, 0x0b, 0x43, + 0xd3, 0x64, 0x2b, 0x68, 0x5a, 0x02, 0x47, 0xd5, 0x5c, 0x4f, 0x3b, 0x68, + 0x43, 0xf4, 0x80, 0x73, 0x3b, 0x60, 0xfe, 0xf7, 0xcd, 0xfd, 0x80, 0x46, + 0x3b, 0x68, 0xdb, 0x05, 0x34, 0xd5, 0x00, 0x2c, 0x66, 0xd1, 0x55, 0x4b, + 0xd5, 0xf8, 0xb4, 0x00, 0x1a, 0x6f, 0x42, 0x40, 0x12, 0xf4, 0x40, 0x7f, + 0x0b, 0xd0, 0x1a, 0x6f, 0x19, 0x6f, 0x22, 0xf4, 0x40, 0x72, 0x41, 0xf4, + 0x80, 0x31, 0x19, 0x67, 0x19, 0x6f, 0x21, 0xf4, 0x80, 0x31, 0x19, 0x67, + 0x1a, 0x67, 0xb0, 0xf5, 0x80, 0x7f, 0x3a, 0xd0, 0xd5, 0xf8, 0xb4, 0x30, + 0x48, 0x49, 0x03, 0xf4, 0x40, 0x72, 0xb2, 0xf5, 0x40, 0x7f, 0x43, 0xd1, + 0x08, 0x69, 0x47, 0x4a, 0x20, 0xf4, 0x7c, 0x50, 0x02, 0xea, 0x13, 0x12, + 0x02, 0x43, 0x0a, 0x61, 0xc3, 0xf3, 0x0b, 0x03, 0x40, 0x4a, 0x11, 0x6f, + 0x0b, 0x43, 0x13, 0x67, 0x0c, 0xe0, 0x01, 0x26, 0x34, 0x46, 0xbe, 0xe7, + 0x26, 0x46, 0xbc, 0xe7, 0xfe, 0xf7, 0x92, 0xfd, 0xa0, 0xeb, 0x08, 0x00, + 0x64, 0x28, 0xc1, 0xd9, 0x03, 0x26, 0x34, 0x46, 0x2b, 0x68, 0xd9, 0x07, + 0x08, 0xd5, 0xeb, 0x6f, 0x10, 0x2b, 0x3c, 0xd0, 0x26, 0xd8, 0x5b, 0xb3, + 0x08, 0x2b, 0x32, 0xd0, 0x01, 0x26, 0x34, 0x46, 0x2b, 0x68, 0x9a, 0x07, + 0x48, 0xd5, 0xab, 0x6f, 0x05, 0x2b, 0x58, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, + 0x3c, 0x37, 0x51, 0x3c, 0x3c, 0x3c, 0xfe, 0xf7, 0x73, 0xfd, 0xdf, 0xf8, + 0xac, 0x80, 0x07, 0x46, 0x41, 0xf2, 0x88, 0x39, 0xd8, 0xf8, 0x70, 0x30, + 0x98, 0x07, 0xb9, 0xd4, 0xfe, 0xf7, 0x68, 0xfd, 0xc0, 0x1b, 0x48, 0x45, + 0xf6, 0xd9, 0xd5, 0xe7, 0x0a, 0x69, 0x22, 0xf4, 0x7c, 0x52, 0xbe, 0xe7, + 0x26, 0x46, 0xd1, 0xe7, 0x23, 0xf0, 0x08, 0x02, 0x20, 0x2a, 0x01, 0xd0, + 0x18, 0x2b, 0xd5, 0xd1, 0x9c, 0xb9, 0x1d, 0x4a, 0xe9, 0x6f, 0x53, 0x6d, + 0x23, 0xf0, 0x38, 0x03, 0x0b, 0x43, 0x53, 0x65, 0xce, 0xe7, 0x01, 0x21, + 0x28, 0x1d, 0xfe, 0xf7, 0xd7, 0xfe, 0x04, 0x46, 0xf0, 0xe7, 0x01, 0x21, + 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, 0x50, 0xfe, 0xf7, 0xe7, 0x26, 0x46, + 0xc0, 0xe7, 0x01, 0x21, 0x28, 0x1d, 0xfe, 0xf7, 0xc9, 0xfe, 0x04, 0x46, + 0xe4, 0xb9, 0x0f, 0x4a, 0xa9, 0x6f, 0x53, 0x6d, 0x23, 0xf0, 0x07, 0x03, + 0x0b, 0x43, 0x53, 0x65, 0x2b, 0x68, 0x5b, 0x07, 0x2a, 0xd5, 0xd5, 0xf8, + 0x94, 0x30, 0x05, 0x2b, 0x00, 0xf2, 0x9e, 0x80, 0xdf, 0xe8, 0x03, 0xf0, + 0x19, 0x14, 0x96, 0x19, 0x19, 0x19, 0x01, 0x21, 0x05, 0xf1, 0x24, 0x00, + 0xfe, 0xf7, 0x2e, 0xfe, 0xe3, 0xe7, 0x01, 0x26, 0x34, 0x46, 0xe9, 0xe7, + 0x26, 0x46, 0xe7, 0xe7, 0x00, 0x44, 0x02, 0x58, 0x00, 0x48, 0x02, 0x58, + 0xcf, 0xff, 0xff, 0x00, 0x01, 0x21, 0x28, 0x1d, 0xfe, 0xf7, 0x9e, 0xfe, + 0x04, 0x46, 0x00, 0x2c, 0x40, 0xf0, 0x83, 0x80, 0x53, 0x4a, 0xd5, 0xf8, + 0x94, 0x10, 0x93, 0x6d, 0x23, 0xf0, 0x07, 0x03, 0x0b, 0x43, 0x93, 0x65, + 0x2b, 0x68, 0x1f, 0x07, 0x14, 0xd5, 0xd5, 0xf8, 0x84, 0x30, 0xb3, 0xf5, + 0x80, 0x5f, 0x07, 0xd1, 0x02, 0x21, 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, + 0x05, 0xfe, 0x00, 0x28, 0x18, 0xbf, 0x01, 0x26, 0x47, 0x4a, 0xd5, 0xf8, + 0x84, 0x10, 0x53, 0x6d, 0x23, 0xf4, 0x40, 0x53, 0x0b, 0x43, 0x53, 0x65, + 0x2b, 0x68, 0xd8, 0x06, 0x14, 0xd5, 0xd5, 0xf8, 0x98, 0x30, 0xb3, 0xf5, + 0x80, 0x7f, 0x07, 0xd1, 0x02, 0x21, 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, + 0xed, 0xfd, 0x00, 0x28, 0x18, 0xbf, 0x01, 0x26, 0x3b, 0x4a, 0xd5, 0xf8, + 0x98, 0x10, 0x93, 0x6d, 0x23, 0xf4, 0x40, 0x73, 0x0b, 0x43, 0x93, 0x65, + 0x2b, 0x68, 0x59, 0x03, 0x19, 0xd5, 0xd5, 0xf8, 0x88, 0x30, 0xb3, 0xf5, + 0x00, 0x1f, 0x44, 0xd0, 0xb3, 0xf5, 0x40, 0x1f, 0x07, 0xd0, 0xb3, 0xf5, + 0x80, 0x1f, 0x45, 0xd1, 0x30, 0x4a, 0xd3, 0x6a, 0x43, 0xf4, 0x00, 0x33, + 0xd3, 0x62, 0x00, 0x2c, 0x41, 0xd1, 0x2d, 0x4a, 0xd5, 0xf8, 0x88, 0x10, + 0x53, 0x6d, 0x23, 0xf4, 0x40, 0x13, 0x0b, 0x43, 0x53, 0x65, 0x2b, 0x68, + 0xda, 0x03, 0x06, 0xd5, 0x2b, 0x6d, 0x00, 0x2b, 0x35, 0xd0, 0xb3, 0xf5, + 0x80, 0x3f, 0x40, 0xd0, 0x01, 0x26, 0x29, 0x68, 0x4b, 0x00, 0x09, 0xd5, + 0x22, 0x4b, 0x1a, 0x69, 0x22, 0xf4, 0x00, 0x42, 0x1a, 0x61, 0x1a, 0x69, + 0xd5, 0xf8, 0xbc, 0x00, 0x02, 0x43, 0x1a, 0x61, 0x00, 0x29, 0x06, 0xda, + 0x1c, 0x4a, 0x69, 0x6d, 0xd3, 0x6c, 0x23, 0xf0, 0x40, 0x53, 0x0b, 0x43, + 0xd3, 0x64, 0x30, 0x1e, 0x18, 0xbf, 0x01, 0x20, 0xbd, 0xe8, 0xf8, 0x83, + 0x01, 0x21, 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, 0x9b, 0xfd, 0x7b, 0xe7, + 0x01, 0x26, 0x34, 0x46, 0x84, 0xe7, 0x26, 0x46, 0x82, 0xe7, 0x01, 0x21, + 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, 0x90, 0xfd, 0x04, 0x46, 0xbe, 0xe7, + 0x01, 0x26, 0x34, 0x46, 0xc5, 0xe7, 0x26, 0x46, 0xc3, 0xe7, 0x0b, 0x4a, + 0xd3, 0x6a, 0x43, 0xf4, 0x00, 0x33, 0xd3, 0x62, 0x6c, 0xb9, 0x08, 0x4a, + 0x29, 0x6d, 0xd3, 0x6c, 0x23, 0xf4, 0x80, 0x33, 0x0b, 0x43, 0xd3, 0x64, + 0xbf, 0xe7, 0x02, 0x21, 0x28, 0x1d, 0xfe, 0xf7, 0xf7, 0xfd, 0x04, 0x46, + 0xf0, 0xe7, 0x26, 0x46, 0xb7, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, + 0x00, 0xb5, 0x0c, 0x23, 0xc5, 0xb0, 0x01, 0x93, 0x00, 0x23, 0x01, 0xa8, + 0x0a, 0x93, 0x03, 0x93, 0x01, 0x23, 0x06, 0x93, 0xfe, 0xf7, 0x64, 0xfe, + 0x70, 0xb9, 0x4f, 0xf4, 0x80, 0x03, 0x14, 0xa8, 0x14, 0x93, 0x4f, 0xf4, + 0x00, 0x73, 0x41, 0x93, 0xff, 0xf7, 0x30, 0xfe, 0x20, 0xb9, 0x04, 0x4a, + 0x13, 0x6f, 0x43, 0xf4, 0x00, 0x43, 0x13, 0x67, 0x45, 0xb0, 0x5d, 0xf8, + 0x04, 0xfb, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0x48, 0x4b, 0x1a, 0x69, + 0x02, 0xf0, 0x38, 0x02, 0x10, 0x2a, 0x30, 0xb5, 0x00, 0xf0, 0x86, 0x80, + 0x18, 0x2a, 0x0c, 0xd0, 0x00, 0x2a, 0x40, 0xf0, 0x83, 0x80, 0x1a, 0x68, + 0x42, 0x48, 0x12, 0xf0, 0x20, 0x0f, 0x03, 0xd0, 0x1b, 0x68, 0xc3, 0xf3, + 0xc1, 0x03, 0xd8, 0x40, 0x30, 0xbd, 0x99, 0x6a, 0x9d, 0x6a, 0xda, 0x6a, + 0x15, 0xf4, 0x7c, 0x7f, 0xc5, 0xf3, 0x05, 0x10, 0x5c, 0x6b, 0xf5, 0xd0, + 0xc4, 0xf3, 0xcc, 0x04, 0x02, 0xf0, 0x01, 0x02, 0x07, 0xee, 0x90, 0x0a, + 0x01, 0xf0, 0x03, 0x01, 0x62, 0x43, 0xb7, 0xee, 0x00, 0x6a, 0xf8, 0xee, + 0xe7, 0x6a, 0x01, 0x29, 0x07, 0xee, 0x90, 0x2a, 0xfa, 0xee, 0xe9, 0x7a, + 0x4c, 0xd0, 0x02, 0x29, 0x3c, 0xd0, 0x00, 0x29, 0x48, 0xd1, 0x1a, 0x68, + 0x92, 0x06, 0x27, 0xd5, 0x19, 0x68, 0x2c, 0x4a, 0xc1, 0xf3, 0xc1, 0x01, + 0x1b, 0x6b, 0xca, 0x40, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x2a, + 0xf8, 0xee, 0xc7, 0x5a, 0x85, 0xee, 0xa6, 0x7a, 0x06, 0xee, 0x90, 0x3a, + 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, 0x86, 0x7a, + 0x20, 0x4b, 0x67, 0xee, 0x87, 0x7a, 0x1b, 0x6b, 0xc3, 0xf3, 0x46, 0x23, + 0x01, 0x33, 0x07, 0xee, 0x10, 0x3a, 0xf8, 0xee, 0xc7, 0x6a, 0x87, 0xee, + 0xa6, 0x7a, 0xfc, 0xee, 0xc7, 0x7a, 0x17, 0xee, 0x90, 0x0a, 0xb3, 0xe7, + 0x1b, 0x6b, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, + 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x9f, 0xed, + 0x14, 0x6a, 0x86, 0xee, 0x26, 0x7a, 0xdd, 0xe7, 0x1b, 0x6b, 0xc3, 0xf3, + 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, + 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x9f, 0xed, 0x0d, 0x6a, 0xee, 0xe7, + 0x1b, 0x6b, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, + 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x9f, 0xed, + 0x07, 0x6a, 0xe0, 0xe7, 0x06, 0x48, 0x85, 0xe7, 0x06, 0x48, 0x83, 0xe7, + 0x00, 0x44, 0x02, 0x58, 0x00, 0x90, 0xd0, 0x03, 0x00, 0x24, 0x74, 0x4c, + 0x20, 0xbc, 0xbe, 0x4b, 0x00, 0x24, 0x74, 0x4a, 0x40, 0x78, 0x7d, 0x01, + 0x00, 0x09, 0x3d, 0x00, 0x08, 0xb5, 0xff, 0xf7, 0x5d, 0xff, 0x09, 0x49, + 0x09, 0x4a, 0x8b, 0x69, 0xc3, 0xf3, 0x03, 0x23, 0xd3, 0x5c, 0x03, 0xf0, + 0x1f, 0x03, 0xd8, 0x40, 0x8b, 0x69, 0x03, 0xf0, 0x0f, 0x03, 0xd3, 0x5c, + 0x04, 0x4a, 0x03, 0xf0, 0x1f, 0x03, 0x10, 0x60, 0xd8, 0x40, 0x08, 0xbd, + 0x00, 0x44, 0x02, 0x58, 0x29, 0xd5, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, + 0x73, 0xb5, 0x0e, 0x46, 0x04, 0x46, 0xff, 0xf7, 0xdf, 0xff, 0xb0, 0xfb, + 0xf6, 0xf5, 0xff, 0x2d, 0x47, 0xdc, 0xff, 0xf7, 0xd9, 0xff, 0xb0, 0xfb, + 0xf6, 0xf1, 0x01, 0xfb, 0x16, 0x06, 0x06, 0xb9, 0x01, 0x3d, 0x65, 0x60, + 0xfe, 0xf7, 0x72, 0xfb, 0x94, 0xf8, 0x41, 0x20, 0x03, 0x46, 0x12, 0xb9, + 0x41, 0xf2, 0x88, 0x32, 0xa2, 0x64, 0x20, 0x68, 0xa1, 0x68, 0x02, 0x68, + 0x01, 0x39, 0x22, 0xf4, 0x70, 0x62, 0x42, 0xea, 0x01, 0x22, 0x20, 0x21, + 0x02, 0x60, 0x20, 0x46, 0xa2, 0x6c, 0x00, 0x92, 0x00, 0x22, 0xfe, 0xf7, + 0xcb, 0xfe, 0x30, 0xbb, 0x22, 0x68, 0xe5, 0x69, 0xe3, 0x68, 0x11, 0x68, + 0x2b, 0x43, 0x25, 0x6a, 0x21, 0xf0, 0x7f, 0x41, 0x2b, 0x43, 0x65, 0x68, + 0x21, 0xf0, 0xd0, 0x01, 0x43, 0xea, 0x05, 0x63, 0x0b, 0x43, 0x13, 0x60, + 0x55, 0x68, 0xd4, 0xe9, 0x05, 0x31, 0x0b, 0x43, 0x21, 0x69, 0x43, 0xea, + 0x01, 0x43, 0x09, 0x49, 0x29, 0x40, 0x0b, 0x43, 0x53, 0x60, 0x13, 0x68, + 0x43, 0xf0, 0x01, 0x03, 0x13, 0x60, 0x01, 0x23, 0x60, 0x64, 0x84, 0xf8, + 0x41, 0x30, 0x02, 0xb0, 0x70, 0xbd, 0xff, 0x25, 0xbd, 0xe7, 0x4f, 0xf0, + 0xff, 0x30, 0xf8, 0xe7, 0xfe, 0xf8, 0xe0, 0xff, 0x08, 0xb5, 0xff, 0xf7, + 0x89, 0xff, 0x05, 0x4b, 0x05, 0x4a, 0x1b, 0x6a, 0xc3, 0xf3, 0x02, 0x13, + 0xd3, 0x5c, 0x03, 0xf0, 0x1f, 0x03, 0xd8, 0x40, 0x08, 0xbd, 0x00, 0xbf, + 0x00, 0x44, 0x02, 0x58, 0x29, 0xd5, 0x01, 0x08, 0x08, 0xb5, 0xff, 0xf7, + 0x77, 0xff, 0x05, 0x4b, 0x05, 0x4a, 0xdb, 0x69, 0xc3, 0xf3, 0x02, 0x23, + 0xd3, 0x5c, 0x03, 0xf0, 0x1f, 0x03, 0xd8, 0x40, 0x08, 0xbd, 0x00, 0xbf, + 0x00, 0x44, 0x02, 0x58, 0x29, 0xd5, 0x01, 0x08, 0x08, 0xb5, 0xff, 0xf7, + 0x65, 0xff, 0x05, 0x4b, 0x05, 0x4a, 0xdb, 0x69, 0xc3, 0xf3, 0x02, 0x13, + 0xd3, 0x5c, 0x03, 0xf0, 0x1f, 0x03, 0xd8, 0x40, 0x08, 0xbd, 0x00, 0xbf, + 0x00, 0x44, 0x02, 0x58, 0x29, 0xd5, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x43, + 0x7f, 0x4e, 0x90, 0x21, 0x7f, 0x4c, 0x89, 0xb0, 0xd6, 0xf8, 0x08, 0xe0, + 0xf0, 0x68, 0x37, 0x69, 0xd6, 0xf8, 0x14, 0xc0, 0xd6, 0xe9, 0x00, 0x35, + 0x69, 0x43, 0x62, 0x18, 0x63, 0x50, 0x00, 0x21, 0xc2, 0xf8, 0x04, 0xe0, + 0xa2, 0xf8, 0x56, 0x10, 0xa2, 0xf8, 0x54, 0x10, 0xa2, 0xf8, 0x5e, 0x10, + 0xa2, 0xf8, 0x5c, 0x10, 0x91, 0x62, 0x51, 0x66, 0x90, 0x60, 0xd7, 0x60, + 0xc2, 0xf8, 0x10, 0xc0, 0xc2, 0xe9, 0x06, 0x11, 0xc2, 0xe9, 0x08, 0x11, + 0xb6, 0xf9, 0x1a, 0x10, 0x01, 0x31, 0x5a, 0xd1, 0x08, 0x21, 0x51, 0x61, + 0x6c, 0x4a, 0x93, 0x42, 0x10, 0xd1, 0x90, 0x22, 0xbe, 0xf5, 0x16, 0x5f, + 0x02, 0xfb, 0x05, 0x42, 0x92, 0xf8, 0x80, 0x10, 0x54, 0xd8, 0x01, 0x29, + 0x06, 0xd0, 0x19, 0x68, 0x41, 0xf0, 0x02, 0x01, 0x19, 0x60, 0x00, 0x21, + 0x82, 0xf8, 0x80, 0x10, 0x90, 0x22, 0x02, 0xfb, 0x05, 0x41, 0xd1, 0xf8, + 0x84, 0x60, 0x0e, 0xb9, 0x81, 0xf8, 0x80, 0x60, 0x02, 0xfb, 0x05, 0x42, + 0x24, 0x21, 0x40, 0xea, 0x0c, 0x00, 0xc2, 0xf8, 0x84, 0x10, 0x19, 0x68, + 0x52, 0x69, 0x21, 0xf0, 0x01, 0x01, 0x10, 0x43, 0x59, 0x4a, 0x19, 0x60, + 0x19, 0x68, 0x0a, 0x40, 0x10, 0x43, 0x18, 0x60, 0x5a, 0x68, 0x22, 0xf4, + 0x40, 0x52, 0x17, 0x43, 0x5f, 0x60, 0x9a, 0x68, 0x22, 0xf0, 0x6e, 0x42, + 0x22, 0xf4, 0x30, 0x62, 0x9a, 0x60, 0xda, 0x6a, 0x22, 0xf0, 0x0f, 0x02, + 0xda, 0x62, 0x50, 0x4a, 0x93, 0x42, 0x25, 0xd1, 0x4f, 0x4b, 0x5b, 0x6d, + 0x03, 0xf0, 0x38, 0x03, 0x28, 0x2b, 0x00, 0xf2, 0x84, 0x80, 0x4d, 0x4a, + 0xd3, 0x5c, 0x08, 0x2b, 0x00, 0xf2, 0xb3, 0x81, 0x08, 0x2b, 0x7c, 0xd8, + 0xdf, 0xe8, 0x13, 0xf0, 0xd8, 0x01, 0xde, 0x01, 0x7b, 0x00, 0x7b, 0x00, + 0xe1, 0x01, 0x7b, 0x00, 0x7b, 0x00, 0x7b, 0x00, 0xe6, 0x01, 0xb6, 0xf9, + 0x18, 0x10, 0x01, 0x31, 0x0c, 0xbf, 0x04, 0x21, 0x0c, 0x21, 0x9e, 0xe7, + 0x01, 0x29, 0xb1, 0xd0, 0x19, 0x68, 0x21, 0xf0, 0x02, 0x01, 0xa9, 0xe7, + 0x3e, 0x4a, 0x93, 0x42, 0x07, 0xd1, 0x3b, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, + 0x07, 0x03, 0x05, 0x2b, 0x5b, 0xd8, 0x3b, 0x4a, 0xd6, 0xe7, 0x3b, 0x4a, + 0x93, 0x42, 0x07, 0xd1, 0x35, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, + 0x05, 0x2b, 0x50, 0xd8, 0x37, 0x4a, 0xcb, 0xe7, 0x37, 0x4a, 0x93, 0x42, + 0x07, 0xd1, 0x30, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, + 0x45, 0xd8, 0x34, 0x4a, 0xc0, 0xe7, 0x34, 0x4a, 0x93, 0x42, 0x07, 0xd1, + 0x2a, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, 0x3a, 0xd8, + 0x30, 0x4a, 0xb5, 0xe7, 0x30, 0x4a, 0x93, 0x42, 0x07, 0xd1, 0x25, 0x4b, + 0x5b, 0x6d, 0x03, 0xf0, 0x38, 0x03, 0x28, 0x2b, 0x2f, 0xd8, 0x2d, 0x4a, + 0xaa, 0xe7, 0x2d, 0x4a, 0x93, 0x42, 0x07, 0xd1, 0x1f, 0x4b, 0x5b, 0x6d, + 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, 0x24, 0xd8, 0x29, 0x4a, 0x9f, 0xe7, + 0x29, 0x4a, 0x93, 0x42, 0x07, 0xd1, 0x1a, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, + 0x07, 0x03, 0x05, 0x2b, 0x19, 0xd8, 0x26, 0x4a, 0x94, 0xe7, 0x13, 0x4a, + 0x93, 0x42, 0x14, 0xd1, 0x02, 0xf5, 0x0e, 0x32, 0x93, 0x6d, 0x03, 0xf0, + 0x07, 0x03, 0x05, 0x2b, 0x0d, 0xd8, 0x21, 0x49, 0xcb, 0x5c, 0x10, 0x2b, + 0x00, 0xf0, 0x00, 0x81, 0x09, 0xd8, 0x04, 0x2b, 0x00, 0xf0, 0xf2, 0x80, + 0x08, 0x2b, 0x00, 0xf0, 0xf4, 0x80, 0x02, 0x2b, 0x36, 0xd0, 0x01, 0x26, + 0x3a, 0xe0, 0x20, 0x2b, 0x00, 0xf0, 0x2d, 0x81, 0x40, 0x2b, 0xf8, 0xd1, + 0x4f, 0xf4, 0x00, 0x40, 0xf5, 0xe0, 0x00, 0xbf, 0xc8, 0x0b, 0x02, 0x24, + 0xa8, 0x0d, 0x02, 0x24, 0x00, 0x0c, 0x00, 0x58, 0xf3, 0x69, 0xff, 0xcf, + 0x00, 0x10, 0x01, 0x40, 0x00, 0x44, 0x02, 0x58, 0xf4, 0xd4, 0x01, 0x08, + 0x00, 0x44, 0x00, 0x40, 0x1d, 0xd5, 0x01, 0x08, 0x00, 0x48, 0x00, 0x40, + 0x1d, 0xd5, 0x01, 0x08, 0x00, 0x4c, 0x00, 0x40, 0x1d, 0xd5, 0x01, 0x08, + 0x00, 0x50, 0x00, 0x40, 0x1d, 0xd5, 0x01, 0x08, 0x00, 0x14, 0x01, 0x40, + 0xf4, 0xd4, 0x01, 0x08, 0x00, 0x78, 0x00, 0x40, 0x1d, 0xd5, 0x01, 0x08, + 0x00, 0x7c, 0x00, 0x40, 0x1d, 0xd5, 0x01, 0x08, 0x23, 0xd5, 0x01, 0x08, + 0xff, 0xf7, 0x9a, 0xfe, 0x00, 0x28, 0x40, 0xf0, 0xc4, 0x80, 0x00, 0x26, + 0x90, 0x22, 0x4f, 0xf0, 0x01, 0x13, 0x01, 0x2e, 0x02, 0xfb, 0x05, 0xf2, + 0x04, 0xeb, 0x02, 0x01, 0x8b, 0x66, 0x4f, 0xf0, 0x00, 0x03, 0xc1, 0xe9, + 0x1c, 0x33, 0x00, 0xf0, 0x34, 0x81, 0x8b, 0x6a, 0x00, 0x2b, 0x66, 0xd0, + 0xd8, 0x07, 0x06, 0xd5, 0xa0, 0x58, 0xc9, 0x6a, 0x42, 0x68, 0x22, 0xf4, + 0x00, 0x32, 0x0a, 0x43, 0x42, 0x60, 0x9a, 0x07, 0x09, 0xd5, 0x90, 0x22, + 0x6a, 0x43, 0xa1, 0x58, 0xa0, 0x18, 0x4a, 0x68, 0x00, 0x6b, 0x22, 0xf4, + 0x80, 0x32, 0x02, 0x43, 0x4a, 0x60, 0x5f, 0x07, 0x09, 0xd5, 0x90, 0x22, + 0x6a, 0x43, 0xa1, 0x58, 0xa0, 0x18, 0x4a, 0x68, 0x40, 0x6b, 0x22, 0xf4, + 0x80, 0x22, 0x02, 0x43, 0x4a, 0x60, 0x18, 0x07, 0x09, 0xd5, 0x90, 0x22, + 0x6a, 0x43, 0xa1, 0x58, 0xa0, 0x18, 0x4a, 0x68, 0x80, 0x6b, 0x22, 0xf4, + 0x00, 0x42, 0x02, 0x43, 0x4a, 0x60, 0xd9, 0x06, 0x09, 0xd5, 0x90, 0x22, + 0x6a, 0x43, 0xa1, 0x58, 0xa0, 0x18, 0x8a, 0x68, 0xc0, 0x6b, 0x22, 0xf4, + 0x80, 0x52, 0x02, 0x43, 0x8a, 0x60, 0x9a, 0x06, 0x09, 0xd5, 0x90, 0x22, + 0x6a, 0x43, 0xa1, 0x58, 0xa0, 0x18, 0x8a, 0x68, 0x00, 0x6c, 0x22, 0xf4, + 0x00, 0x52, 0x02, 0x43, 0x8a, 0x60, 0x5f, 0x06, 0x13, 0xd5, 0x90, 0x22, + 0x6a, 0x43, 0xa1, 0x58, 0xa0, 0x18, 0x4a, 0x68, 0x47, 0x6c, 0x22, 0xf4, + 0x80, 0x12, 0xb7, 0xf5, 0x80, 0x1f, 0x42, 0xea, 0x07, 0x02, 0x4a, 0x60, + 0x05, 0xd1, 0x4a, 0x68, 0x80, 0x6c, 0x22, 0xf4, 0xc0, 0x02, 0x02, 0x43, + 0x4a, 0x60, 0x18, 0x06, 0x09, 0xd5, 0x90, 0x23, 0x6b, 0x43, 0xe2, 0x58, + 0xe1, 0x18, 0x53, 0x68, 0xc9, 0x6c, 0x23, 0xf4, 0x00, 0x23, 0x0b, 0x43, + 0x53, 0x60, 0x90, 0x27, 0x6f, 0x43, 0xe3, 0x59, 0x04, 0xeb, 0x07, 0x08, + 0x5a, 0x68, 0x22, 0xf4, 0x90, 0x42, 0x5a, 0x60, 0x9a, 0x68, 0x22, 0xf0, + 0x2a, 0x02, 0x9a, 0x60, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x60, + 0x00, 0x23, 0xc8, 0xf8, 0x8c, 0x30, 0xfe, 0xf7, 0x35, 0xf9, 0xe3, 0x59, + 0x02, 0x46, 0x1b, 0x68, 0x19, 0x07, 0x00, 0xf1, 0xa3, 0x80, 0x90, 0x23, + 0x6b, 0x43, 0xe3, 0x58, 0x1b, 0x68, 0x5b, 0x07, 0x07, 0xd5, 0x4f, 0xf4, + 0x80, 0x01, 0x40, 0x46, 0xfe, 0xf7, 0xf4, 0xf9, 0x00, 0x28, 0x40, 0xf0, + 0x9f, 0x80, 0x90, 0x23, 0x03, 0xfb, 0x05, 0x44, 0x20, 0x23, 0xc4, 0xf8, + 0x84, 0x30, 0xc4, 0xf8, 0x88, 0x30, 0x00, 0x23, 0xe3, 0x66, 0x84, 0xf8, + 0x80, 0x30, 0x92, 0xe0, 0x02, 0xa8, 0xfa, 0xf7, 0x6d, 0xfd, 0x03, 0x98, + 0x46, 0xe7, 0x05, 0xa8, 0xfa, 0xf7, 0xc0, 0xfc, 0x06, 0x98, 0x41, 0xe7, + 0x13, 0x68, 0x46, 0x48, 0x13, 0xf0, 0x20, 0x0f, 0x03, 0xd0, 0x13, 0x68, + 0xc3, 0xf3, 0xc1, 0x03, 0xd8, 0x40, 0x4f, 0xf0, 0x90, 0x09, 0x42, 0x4b, + 0x09, 0xfb, 0x05, 0xf9, 0x04, 0xeb, 0x09, 0x01, 0x4a, 0x6a, 0xd1, 0xf8, + 0x04, 0x80, 0x33, 0xf8, 0x12, 0x20, 0x08, 0xeb, 0x48, 0x01, 0xb0, 0xfb, + 0xf2, 0xf3, 0x8b, 0x42, 0xff, 0xf4, 0xed, 0xae, 0xb3, 0xeb, 0x08, 0x3f, + 0x3f, 0xf6, 0xe9, 0xae, 0x00, 0x23, 0x00, 0x21, 0x17, 0xf0, 0xbc, 0xf8, + 0x42, 0x46, 0x0f, 0x02, 0x00, 0x23, 0x06, 0x02, 0x47, 0xea, 0x10, 0x67, + 0x4f, 0xea, 0x58, 0x00, 0x30, 0x18, 0x47, 0xf1, 0x00, 0x01, 0x17, 0xf0, + 0xaf, 0xf8, 0x30, 0x4b, 0xa0, 0xf5, 0x40, 0x72, 0x9a, 0x42, 0x3f, 0xf6, + 0xd2, 0xae, 0x54, 0xf8, 0x09, 0x30, 0xd8, 0x60, 0x09, 0xe7, 0x2c, 0x48, + 0xcb, 0xe7, 0x20, 0x2b, 0x39, 0xd0, 0x40, 0x2b, 0x39, 0xd0, 0x10, 0x2b, + 0x7f, 0xf4, 0xc5, 0xae, 0x28, 0x4b, 0x24, 0x48, 0x1a, 0x68, 0x12, 0xf0, + 0x20, 0x0f, 0x03, 0xd0, 0x1b, 0x68, 0xc3, 0xf3, 0xc1, 0x03, 0xd8, 0x40, + 0x90, 0x23, 0x6b, 0x43, 0xe1, 0x18, 0x4a, 0x68, 0x4e, 0x6a, 0x1e, 0x49, + 0x31, 0xf8, 0x16, 0x10, 0xb0, 0xfb, 0xf1, 0xf0, 0x00, 0xeb, 0x52, 0x00, + 0xb0, 0xfb, 0xf2, 0xf0, 0x80, 0xb2, 0x4f, 0xf6, 0xef, 0x72, 0xa0, 0xf1, + 0x10, 0x01, 0x91, 0x42, 0x3f, 0xf6, 0xa5, 0xae, 0xe3, 0x58, 0xd2, 0xe7, + 0xff, 0xf7, 0x98, 0xfd, 0x00, 0x28, 0x3f, 0xf4, 0xda, 0xae, 0xe1, 0xe7, + 0xff, 0xf7, 0x80, 0xfd, 0xf8, 0xe7, 0x02, 0xa8, 0xfa, 0xf7, 0xf4, 0xfc, + 0x03, 0x98, 0xf3, 0xe7, 0x05, 0xa8, 0xfa, 0xf7, 0x47, 0xfc, 0x06, 0x98, + 0xee, 0xe7, 0x0d, 0x48, 0xd2, 0xe7, 0x4f, 0xf4, 0x00, 0x40, 0xcf, 0xe7, + 0x01, 0x90, 0x4f, 0xf4, 0x00, 0x11, 0x40, 0x46, 0xfe, 0xf7, 0x56, 0xf9, + 0x01, 0x9a, 0x00, 0x28, 0x3f, 0xf4, 0x53, 0xaf, 0x03, 0x26, 0x30, 0x46, + 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x00, 0xbf, 0x00, 0x90, 0xd0, 0x03, + 0x9c, 0xd6, 0x01, 0x08, 0xff, 0xfc, 0x0f, 0x00, 0x00, 0x09, 0x3d, 0x00, + 0x00, 0x44, 0x02, 0x58, 0x15, 0x4b, 0x4f, 0xf4, 0xe1, 0x32, 0x10, 0xb5, + 0x9a, 0x60, 0xb0, 0xb0, 0x1a, 0x68, 0x13, 0x4b, 0x9a, 0x42, 0x1c, 0xd1, + 0xbc, 0x22, 0x00, 0x21, 0x01, 0xa8, 0x15, 0xf0, 0x5d, 0xf9, 0x04, 0x23, + 0x68, 0x46, 0x00, 0x93, 0x01, 0x23, 0x25, 0x93, 0xff, 0xf7, 0x3e, 0xfa, + 0xff, 0xf7, 0x62, 0xfd, 0x78, 0xb1, 0x00, 0x23, 0x0a, 0x4c, 0x25, 0x93, + 0x0a, 0x4b, 0xd4, 0xf8, 0x8c, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0x68, 0x46, + 0xff, 0xf7, 0x30, 0xfa, 0x4f, 0xf4, 0x40, 0x73, 0xe3, 0x60, 0xff, 0xf7, + 0x51, 0xfd, 0x30, 0xb0, 0x10, 0xbd, 0x00, 0xbf, 0xc8, 0x0b, 0x02, 0x24, + 0x00, 0x0c, 0x00, 0x58, 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, + 0x37, 0xb5, 0x44, 0x4c, 0x23, 0x69, 0xa3, 0x69, 0xa3, 0x69, 0xa3, 0x69, + 0xe5, 0x69, 0xe3, 0x69, 0x23, 0x6a, 0x05, 0xf0, 0x70, 0x05, 0x40, 0x4b, + 0x1b, 0x68, 0xff, 0xf7, 0x25, 0xfd, 0xd4, 0xf8, 0xe8, 0x30, 0x3e, 0x4a, + 0x43, 0xf0, 0x08, 0x03, 0xc4, 0xf8, 0xe8, 0x30, 0xd4, 0xf8, 0xe8, 0x30, + 0x03, 0xf0, 0x08, 0x03, 0x01, 0x93, 0x01, 0x9b, 0x39, 0x4b, 0xd2, 0xf8, + 0x8c, 0x10, 0x99, 0x42, 0xfb, 0xd1, 0xd4, 0xf8, 0x90, 0x30, 0x43, 0xf0, + 0x08, 0x03, 0xc4, 0xf8, 0x90, 0x30, 0xd4, 0xf8, 0x90, 0x30, 0x23, 0xf0, + 0x08, 0x03, 0xc4, 0xf8, 0x90, 0x30, 0x4f, 0xf4, 0x40, 0x73, 0x31, 0x4c, + 0xd3, 0x60, 0x31, 0x4b, 0x23, 0x60, 0x4f, 0xf0, 0xff, 0x33, 0xe3, 0x60, + 0x2f, 0x4b, 0x00, 0x2d, 0x4d, 0xd1, 0xb0, 0xfb, 0xf3, 0xf0, 0x00, 0x23, + 0x01, 0x38, 0x23, 0x61, 0xa3, 0x60, 0x60, 0x60, 0xc4, 0xe9, 0x05, 0x33, + 0x94, 0xf8, 0x3d, 0x30, 0x03, 0xf0, 0xff, 0x02, 0x0b, 0xb9, 0x84, 0xf8, + 0x3c, 0x20, 0x25, 0x4a, 0x02, 0x23, 0x84, 0xf8, 0x3d, 0x30, 0x13, 0x68, + 0x23, 0xf4, 0x7c, 0x73, 0x13, 0x60, 0x4f, 0xf0, 0xff, 0x33, 0xd3, 0x62, + 0x01, 0x23, 0x90, 0x62, 0x53, 0x61, 0x84, 0xf8, 0x48, 0x30, 0x84, 0xf8, + 0x3e, 0x30, 0x84, 0xf8, 0x3f, 0x30, 0x84, 0xf8, 0x40, 0x30, 0x84, 0xf8, + 0x41, 0x30, 0x84, 0xf8, 0x42, 0x30, 0x84, 0xf8, 0x43, 0x30, 0x84, 0xf8, + 0x44, 0x30, 0x84, 0xf8, 0x45, 0x30, 0x84, 0xf8, 0x46, 0x30, 0x84, 0xf8, + 0x47, 0x30, 0x84, 0xf8, 0x3d, 0x30, 0x14, 0x4b, 0x14, 0x4a, 0x9b, 0x68, + 0xc3, 0xf8, 0x08, 0x21, 0xbf, 0xf3, 0x4f, 0x8f, 0x12, 0x4b, 0x4f, 0xf4, + 0x80, 0x22, 0x5a, 0x60, 0x94, 0xf8, 0x3e, 0x30, 0x01, 0x2b, 0x01, 0xd1, + 0xfa, 0xf7, 0xd8, 0xf9, 0x22, 0x68, 0xd3, 0x68, 0x23, 0xf0, 0x02, 0x03, + 0xd3, 0x60, 0x03, 0xb0, 0x30, 0xbd, 0x40, 0x00, 0xaf, 0xe7, 0x00, 0xbf, + 0x00, 0x44, 0x02, 0x58, 0x00, 0x20, 0x00, 0x52, 0x00, 0x64, 0x02, 0x58, + 0x00, 0x03, 0x00, 0x80, 0x68, 0x05, 0x00, 0x24, 0x00, 0x0c, 0x00, 0x40, + 0x40, 0x42, 0x0f, 0x00, 0x00, 0xed, 0x00, 0xe0, 0x65, 0x08, 0x00, 0x08, + 0x00, 0xe1, 0x00, 0xe0, 0x00, 0x23, 0xf0, 0xb5, 0x04, 0x46, 0x89, 0xb0, + 0xc3, 0x66, 0x83, 0x60, 0x39, 0xb1, 0x8b, 0x88, 0xa0, 0xf8, 0x58, 0x30, + 0x8b, 0x89, 0xa0, 0xf8, 0x5a, 0x30, 0x0b, 0x68, 0x03, 0x60, 0x23, 0x68, + 0xa8, 0x4a, 0x93, 0x42, 0x12, 0xd1, 0x00, 0x23, 0x84, 0xf8, 0x50, 0x30, + 0xa6, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, 0x42, 0xf4, 0x00, 0x12, 0xc3, 0xf8, + 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, 0x03, 0xf4, 0x00, 0x13, 0x01, 0x93, + 0x01, 0x9b, 0xa1, 0x4b, 0xe3, 0x65, 0x0b, 0xe0, 0xa0, 0x4a, 0x93, 0x42, + 0x7c, 0xd0, 0x02, 0xf5, 0x80, 0x62, 0x93, 0x42, 0x00, 0xf0, 0x8a, 0x80, + 0x9d, 0x4a, 0x93, 0x42, 0x00, 0xf0, 0x98, 0x80, 0x9c, 0x49, 0xb4, 0xf9, + 0x58, 0x00, 0x08, 0xf0, 0x1f, 0xfd, 0x9b, 0x49, 0xb4, 0xf9, 0x5a, 0x00, + 0x08, 0xf0, 0x1a, 0xfd, 0x04, 0x21, 0xb4, 0xf9, 0x58, 0x00, 0xfd, 0xf7, + 0x5b, 0xfe, 0x04, 0x21, 0xb4, 0xf9, 0x5a, 0x00, 0xfd, 0xf7, 0x56, 0xfe, + 0x63, 0x6d, 0x0b, 0xb9, 0x93, 0x4b, 0x63, 0x65, 0x93, 0x4a, 0x14, 0x21, + 0x66, 0x6d, 0x12, 0x68, 0x23, 0x68, 0xb2, 0xfb, 0xf6, 0xf2, 0x4a, 0x43, + 0x63, 0x60, 0x11, 0x46, 0x98, 0x69, 0x00, 0x04, 0x01, 0xd5, 0x01, 0x39, + 0xfa, 0xd1, 0x8d, 0x4d, 0x8d, 0x49, 0xd5, 0xf8, 0x8c, 0x00, 0x88, 0x42, + 0xfb, 0xd1, 0x81, 0x49, 0x8b, 0x42, 0x79, 0xd1, 0x80, 0x49, 0xd1, 0xf8, + 0x90, 0x00, 0x40, 0xf4, 0x00, 0x10, 0xc1, 0xf8, 0x90, 0x00, 0xd1, 0xf8, + 0x90, 0x00, 0x20, 0xf4, 0x00, 0x10, 0xc1, 0xf8, 0x90, 0x00, 0x82, 0x49, + 0x4f, 0xf4, 0x40, 0x70, 0xc8, 0x60, 0x99, 0x69, 0x09, 0x04, 0x01, 0xd5, + 0x01, 0x3a, 0xfa, 0xd1, 0x7f, 0x4a, 0x96, 0x42, 0x1a, 0xd1, 0x73, 0x4a, + 0x93, 0x42, 0x02, 0xd1, 0x01, 0x20, 0xfa, 0xf7, 0x23, 0xfc, 0x22, 0x68, + 0x72, 0x4b, 0x9a, 0x42, 0x02, 0xd1, 0x02, 0x20, 0xfa, 0xf7, 0x1c, 0xfc, + 0x22, 0x68, 0x78, 0x4b, 0x9a, 0x42, 0x02, 0xd1, 0x04, 0x20, 0xfa, 0xf7, + 0x15, 0xfc, 0x22, 0x68, 0x6c, 0x4b, 0x9a, 0x42, 0x02, 0xd1, 0x08, 0x20, + 0xfa, 0xf7, 0x0e, 0xfc, 0x6e, 0x49, 0x6f, 0x4b, 0xd1, 0xf8, 0x8c, 0x20, + 0x9a, 0x42, 0xfb, 0xd1, 0x62, 0x4b, 0x22, 0x68, 0x9a, 0x42, 0x62, 0x4b, + 0x6a, 0xd1, 0x59, 0x6d, 0x21, 0xf4, 0x40, 0x51, 0x59, 0x65, 0x6f, 0xe0, + 0x01, 0x23, 0x84, 0xf8, 0x50, 0x30, 0x5d, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, + 0x42, 0xf4, 0x80, 0x02, 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, + 0x03, 0xf4, 0x80, 0x03, 0x02, 0x93, 0x02, 0x9b, 0x62, 0x4b, 0x6b, 0xe7, + 0x02, 0x23, 0x84, 0xf8, 0x50, 0x30, 0x54, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, + 0x42, 0xf4, 0x00, 0x02, 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, + 0x03, 0xf4, 0x00, 0x03, 0x03, 0x93, 0x03, 0x9b, 0x5a, 0x4b, 0x59, 0xe7, + 0x03, 0x23, 0x84, 0xf8, 0x50, 0x30, 0x4b, 0x4b, 0xd3, 0xf8, 0xf4, 0x20, + 0x42, 0xf0, 0x80, 0x02, 0xc3, 0xf8, 0xf4, 0x20, 0xd3, 0xf8, 0xf4, 0x30, + 0x03, 0xf0, 0x80, 0x03, 0x04, 0x93, 0x04, 0x9b, 0x52, 0x4b, 0x47, 0xe7, + 0x45, 0x49, 0x8b, 0x42, 0x14, 0xd0, 0x01, 0xf5, 0x80, 0x61, 0x8b, 0x42, + 0x1c, 0xd0, 0x43, 0x49, 0x8b, 0x42, 0x88, 0xd1, 0x3e, 0x49, 0xd1, 0xf8, + 0x9c, 0x00, 0x40, 0xf0, 0x80, 0x00, 0xc1, 0xf8, 0x9c, 0x00, 0xd1, 0xf8, + 0x9c, 0x00, 0x20, 0xf0, 0x80, 0x00, 0xc1, 0xf8, 0x9c, 0x00, 0x7a, 0xe7, + 0x37, 0x49, 0xd1, 0xf8, 0x90, 0x00, 0x40, 0xf4, 0x80, 0x00, 0xc1, 0xf8, + 0x90, 0x00, 0xd1, 0xf8, 0x90, 0x00, 0x20, 0xf4, 0x80, 0x00, 0x6c, 0xe7, + 0x31, 0x49, 0xd1, 0xf8, 0x90, 0x00, 0x40, 0xf4, 0x00, 0x00, 0xc1, 0xf8, + 0x90, 0x00, 0xd1, 0xf8, 0x90, 0x00, 0x20, 0xf4, 0x00, 0x00, 0x60, 0xe7, + 0x2d, 0x49, 0x8a, 0x42, 0x91, 0xd0, 0x01, 0xf5, 0x80, 0x61, 0x8a, 0x42, + 0x8d, 0xd0, 0x2b, 0x49, 0x8a, 0x42, 0x3f, 0xd0, 0x2e, 0x4b, 0x4f, 0xf4, + 0x40, 0x71, 0xd9, 0x60, 0x94, 0xf8, 0x45, 0x30, 0x20, 0x2b, 0xd8, 0xb2, + 0x1a, 0xd1, 0x94, 0xf8, 0x44, 0x30, 0x01, 0x2b, 0x16, 0xd0, 0x24, 0x23, + 0x84, 0xf8, 0x45, 0x30, 0x63, 0x68, 0x19, 0x68, 0x21, 0xf0, 0x01, 0x01, + 0x19, 0x60, 0x19, 0x68, 0x21, 0xf4, 0x80, 0x51, 0x19, 0x60, 0x19, 0x68, + 0x19, 0x60, 0x19, 0x68, 0x41, 0xf0, 0x01, 0x01, 0x19, 0x60, 0x00, 0x23, + 0x84, 0xf8, 0x45, 0x00, 0x84, 0xf8, 0x44, 0x30, 0x13, 0x4b, 0x22, 0xf4, + 0x00, 0x61, 0xa5, 0x68, 0x99, 0x42, 0xe7, 0x6e, 0x11, 0x4b, 0x03, 0xd0, + 0x12, 0x49, 0x8a, 0x42, 0x40, 0xf0, 0x8c, 0x80, 0x5b, 0x6d, 0x03, 0xf4, + 0x40, 0x53, 0xb3, 0xf5, 0x00, 0x5f, 0x00, 0xf0, 0xb6, 0x80, 0x0c, 0xd8, + 0xa3, 0xb3, 0xb3, 0xf5, 0x80, 0x5f, 0x00, 0xf0, 0x97, 0x80, 0x17, 0x48, + 0x08, 0xf0, 0x8a, 0xfc, 0x99, 0x6d, 0x21, 0xf4, 0x40, 0x71, 0x99, 0x65, + 0xba, 0xe7, 0xb3, 0xf5, 0x40, 0x5f, 0xf4, 0xd1, 0x65, 0xb3, 0xb7, 0x42, + 0x2a, 0xd1, 0x2a, 0xe0, 0x00, 0x54, 0x00, 0x40, 0x00, 0x44, 0x02, 0x58, + 0x1f, 0x00, 0x20, 0x00, 0x00, 0x58, 0x00, 0x40, 0x00, 0x1c, 0x00, 0x58, + 0x00, 0xd6, 0x01, 0x08, 0x64, 0xd5, 0x01, 0x08, 0xa0, 0x86, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, + 0x40, 0x42, 0x0f, 0x00, 0x00, 0x5c, 0x00, 0x40, 0x21, 0x00, 0x22, 0x00, + 0x48, 0x00, 0x49, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x72, 0xd4, 0x01, 0x08, + 0xff, 0xf7, 0x10, 0xfb, 0x0d, 0xb1, 0xb7, 0x42, 0x03, 0xd0, 0x3f, 0x4b, + 0x98, 0x42, 0x66, 0xd0, 0x00, 0x25, 0x00, 0x23, 0x01, 0x22, 0xa5, 0x60, + 0xe3, 0x60, 0xc4, 0xe9, 0x04, 0x23, 0xc4, 0xe9, 0x08, 0x33, 0xc4, 0xe9, + 0x06, 0x33, 0x94, 0xf8, 0x45, 0x30, 0x03, 0xf0, 0xff, 0x02, 0x0b, 0xb9, + 0x84, 0xf8, 0x44, 0x20, 0x24, 0x23, 0x25, 0xf0, 0x70, 0x65, 0x84, 0xf8, + 0x45, 0x30, 0x63, 0x68, 0x1a, 0x68, 0x22, 0xf0, 0x01, 0x02, 0x1a, 0x60, + 0x1d, 0x61, 0x9a, 0x68, 0x22, 0xf4, 0x00, 0x42, 0x9a, 0x60, 0x4f, 0xf4, + 0x00, 0x42, 0x9a, 0x60, 0x5a, 0x68, 0x42, 0xf0, 0x00, 0x72, 0x42, 0xf4, + 0x00, 0x42, 0x5a, 0x60, 0xda, 0x68, 0x22, 0xf4, 0x00, 0x42, 0xda, 0x60, + 0x00, 0x22, 0xda, 0x60, 0x1a, 0x60, 0x19, 0x68, 0x41, 0xf0, 0x01, 0x01, + 0x19, 0x60, 0x20, 0x23, 0xa2, 0x64, 0x84, 0xf8, 0x45, 0x30, 0x4f, 0xf0, + 0x00, 0x73, 0x62, 0x63, 0x66, 0x65, 0x84, 0xf8, 0x46, 0x20, 0xe6, 0x66, + 0x84, 0xf8, 0x64, 0x20, 0x23, 0x66, 0xa2, 0x66, 0x09, 0xb0, 0xf0, 0xbd, + 0x1b, 0x49, 0x8a, 0x42, 0x1b, 0xd1, 0x9b, 0x6d, 0x03, 0xf4, 0x40, 0x73, + 0xb3, 0xf5, 0x00, 0x7f, 0x13, 0xd0, 0x05, 0xd8, 0x4b, 0xb1, 0xb3, 0xf5, + 0x80, 0x7f, 0x09, 0xd0, 0x15, 0x48, 0x71, 0xe7, 0xb3, 0xf5, 0x40, 0x7f, + 0xfa, 0xd1, 0x14, 0x48, 0x9e, 0xe7, 0xff, 0xf7, 0x89, 0xfa, 0x9b, 0xe7, + 0x05, 0xa8, 0xfa, 0xf7, 0x67, 0xf9, 0x07, 0x98, 0x96, 0xe7, 0x10, 0x48, + 0x94, 0xe7, 0x10, 0x48, 0x60, 0xe7, 0x10, 0x4b, 0x9e, 0x42, 0x08, 0xd0, + 0x0f, 0x4b, 0x9e, 0x42, 0x07, 0xd0, 0x0f, 0x4b, 0x0f, 0x4d, 0x9e, 0x42, + 0x18, 0xbf, 0x00, 0x25, 0x8d, 0xe7, 0x0e, 0x4d, 0x8b, 0xe7, 0x0e, 0x4d, + 0x89, 0xe7, 0x00, 0x2d, 0x86, 0xd0, 0x05, 0x48, 0x7f, 0xe7, 0x00, 0xbf, + 0x00, 0x0e, 0x27, 0x07, 0x00, 0x1c, 0x00, 0x58, 0x8f, 0xd4, 0x01, 0x08, + 0x00, 0x09, 0x3d, 0x00, 0x00, 0x90, 0xd0, 0x03, 0xaa, 0xd4, 0x01, 0x08, + 0x80, 0x1a, 0x06, 0x00, 0x40, 0x42, 0x0f, 0x00, 0xa0, 0x86, 0x01, 0x00, + 0x76, 0x56, 0xe1, 0x40, 0x34, 0x14, 0xc1, 0x20, 0x36, 0x15, 0xc3, 0x00, + 0x2d, 0xe9, 0xf3, 0x41, 0x04, 0x46, 0x88, 0x46, 0x09, 0xf0, 0x67, 0xf9, + 0xd4, 0xf8, 0x90, 0x50, 0x04, 0xf1, 0x34, 0x00, 0x35, 0xf0, 0x00, 0x75, + 0x0d, 0xd1, 0x4f, 0xf0, 0x00, 0x73, 0x84, 0xf8, 0x94, 0x50, 0xc4, 0xf8, + 0x90, 0x30, 0x94, 0xf8, 0x80, 0x30, 0x03, 0x2b, 0x7e, 0xd8, 0xdf, 0xe8, + 0x03, 0xf0, 0x05, 0x77, 0x79, 0x7b, 0x77, 0x48, 0x08, 0xf0, 0xa2, 0xfb, + 0x76, 0x4e, 0x77, 0x4a, 0x77, 0x4f, 0x42, 0xf8, 0x23, 0x00, 0xb4, 0xf9, + 0x8c, 0x30, 0xb9, 0x68, 0x03, 0xf1, 0x10, 0x0c, 0xb4, 0xf9, 0x8e, 0x20, + 0x41, 0xf8, 0x2c, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xb9, 0x68, 0x02, 0xf1, + 0x10, 0x0c, 0x41, 0xf8, 0x2c, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0x00, 0x2b, + 0x60, 0xdb, 0x03, 0xf1, 0x60, 0x41, 0x20, 0x26, 0x01, 0xf5, 0x61, 0x41, + 0x81, 0xf8, 0x00, 0x63, 0x00, 0x2a, 0x5e, 0xdb, 0x02, 0xf1, 0x60, 0x41, + 0x20, 0x26, 0x00, 0x2b, 0x01, 0xf5, 0x61, 0x41, 0x81, 0xf8, 0x00, 0x63, + 0x5e, 0xda, 0x01, 0x23, 0x51, 0x09, 0x02, 0xf0, 0x1f, 0x02, 0x03, 0xfa, + 0x02, 0xf2, 0x61, 0x4b, 0x43, 0xf8, 0x21, 0x20, 0x94, 0xf8, 0x75, 0x30, + 0x20, 0x2b, 0x40, 0xf0, 0xa1, 0x80, 0x94, 0xf8, 0x74, 0x30, 0x01, 0x2b, + 0x00, 0xf0, 0x9c, 0x80, 0x01, 0x23, 0xd4, 0xf8, 0x90, 0x20, 0xc4, 0xf8, + 0x58, 0x80, 0x84, 0xf8, 0x74, 0x30, 0x21, 0x23, 0x84, 0xf8, 0x75, 0x30, + 0x10, 0x23, 0x84, 0xf8, 0x76, 0x30, 0x00, 0x23, 0xa3, 0x67, 0x02, 0x23, + 0xa4, 0xf8, 0x5e, 0x30, 0x52, 0x4b, 0x22, 0x66, 0xa3, 0x66, 0xb4, 0xf8, + 0x5e, 0x30, 0x9b, 0xb2, 0xff, 0x2b, 0x3c, 0xd9, 0xff, 0x23, 0xa4, 0xf8, + 0x5c, 0x30, 0x4f, 0xf0, 0x80, 0x73, 0x61, 0x6e, 0x11, 0x29, 0x04, 0xd1, + 0xaa, 0x2a, 0x02, 0xd0, 0xb2, 0xf5, 0x2a, 0x4f, 0x3c, 0xd1, 0x22, 0x6e, + 0xaa, 0x2a, 0x32, 0xd1, 0x00, 0x22, 0x22, 0x66, 0xb4, 0xf8, 0x5e, 0x20, + 0x92, 0xb2, 0xff, 0x2a, 0x00, 0xd8, 0x23, 0x6e, 0x43, 0x4a, 0x30, 0xe0, + 0x43, 0x4e, 0x8c, 0xe7, 0x43, 0x4e, 0x8a, 0xe7, 0x43, 0x4e, 0x88, 0xe7, + 0x00, 0x26, 0x86, 0xe7, 0x03, 0xf0, 0x0f, 0x01, 0x04, 0x39, 0x0f, 0x44, + 0x20, 0x21, 0x39, 0x76, 0x9e, 0xe7, 0x02, 0xf0, 0x0f, 0x06, 0x3e, 0x49, + 0x00, 0x2b, 0x31, 0x44, 0x4f, 0xf0, 0x20, 0x06, 0x0e, 0x76, 0xa9, 0xdb, + 0x5e, 0x09, 0x03, 0xf0, 0x1f, 0x01, 0x01, 0x23, 0x8b, 0x40, 0x32, 0x49, + 0x41, 0xf8, 0x26, 0x30, 0x00, 0x2a, 0x96, 0xda, 0x9e, 0xe7, 0xb4, 0xf8, + 0x5e, 0x30, 0xa4, 0xf8, 0x5c, 0x30, 0x23, 0x6e, 0xc1, 0xe7, 0x22, 0x6e, + 0xb2, 0xf5, 0x2a, 0x4f, 0xca, 0xd1, 0x4f, 0xf0, 0x00, 0x72, 0xc6, 0xe7, + 0x00, 0x22, 0x00, 0x92, 0x10, 0x21, 0x94, 0xf8, 0x5c, 0x20, 0xfa, 0xf7, + 0x21, 0xfa, 0x00, 0x23, 0x2b, 0x4a, 0x84, 0xf8, 0x74, 0x30, 0xa3, 0x6e, + 0x93, 0x42, 0x03, 0xd0, 0x29, 0x4a, 0x93, 0x42, 0x18, 0xbf, 0xf2, 0x25, + 0x62, 0x6b, 0x13, 0x68, 0x1d, 0x43, 0x27, 0x4b, 0x15, 0x60, 0x1d, 0x68, + 0xd4, 0xf8, 0x84, 0x30, 0xb5, 0xfb, 0xf3, 0xf3, 0x5a, 0x25, 0x5d, 0x43, + 0x94, 0xf8, 0x94, 0x30, 0x13, 0xf0, 0x1e, 0x0f, 0x01, 0xd1, 0x01, 0x3d, + 0x1d, 0xd1, 0xb4, 0xf9, 0x8e, 0x60, 0xb4, 0xf9, 0x8c, 0x00, 0x02, 0xf0, + 0x21, 0xfb, 0x30, 0x46, 0x02, 0xf0, 0x1e, 0xfb, 0x1d, 0xb1, 0x94, 0xf8, + 0x94, 0x30, 0x08, 0x2b, 0x13, 0xd0, 0x00, 0x21, 0x04, 0xf1, 0x30, 0x00, + 0xff, 0xf7, 0xe8, 0xfc, 0x6f, 0xf0, 0x01, 0x05, 0x20, 0x46, 0x09, 0xf0, + 0x68, 0xf8, 0xa8, 0x1e, 0x18, 0xbf, 0x01, 0x20, 0x02, 0xb0, 0xbd, 0xe8, + 0xf0, 0x81, 0x01, 0x20, 0x07, 0xf0, 0x98, 0xfd, 0xd6, 0xe7, 0x02, 0x25, + 0xf0, 0xe7, 0x00, 0xbf, 0xc0, 0xd4, 0x01, 0x08, 0xd5, 0x72, 0x00, 0x08, + 0x64, 0x0b, 0x02, 0x24, 0x00, 0xed, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe0, + 0x2b, 0x70, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0xf1, 0x72, 0x00, 0x08, + 0x0d, 0x73, 0x00, 0x08, 0x29, 0x73, 0x00, 0x08, 0xfc, 0xec, 0x00, 0xe0, + 0x4d, 0x71, 0x00, 0x08, 0xa1, 0x6c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, + 0x38, 0xb5, 0x90, 0xf8, 0x41, 0x30, 0x04, 0x46, 0x00, 0x21, 0x60, 0x2b, + 0x17, 0xd1, 0x02, 0x68, 0x20, 0x23, 0x80, 0xf8, 0x40, 0x10, 0x80, 0xf8, + 0x41, 0x30, 0x01, 0x63, 0x13, 0x68, 0xb0, 0xf9, 0x5a, 0x50, 0x23, 0xf0, + 0xfe, 0x03, 0xb0, 0xf9, 0x58, 0x00, 0x13, 0x60, 0x02, 0xf0, 0xce, 0xfa, + 0x28, 0x46, 0x02, 0xf0, 0xcb, 0xfa, 0x02, 0x23, 0x84, 0xf8, 0x60, 0x30, + 0x38, 0xbd, 0x01, 0x63, 0x04, 0x38, 0x85, 0x6c, 0x80, 0xf8, 0x44, 0x10, + 0x15, 0xf0, 0x04, 0x05, 0x18, 0xbf, 0x14, 0x25, 0xff, 0xf7, 0x90, 0xfc, + 0x45, 0xf0, 0x02, 0x05, 0x84, 0xf8, 0x60, 0x50, 0xee, 0xe7, 0x80, 0x6b, + 0x83, 0x6b, 0x0b, 0xb1, 0x00, 0x22, 0x1a, 0x65, 0xc3, 0x6b, 0x0b, 0xb1, + 0x00, 0x22, 0x1a, 0x65, 0xff, 0xf7, 0xc6, 0xbf, 0x70, 0xb5, 0x3c, 0x4a, + 0x00, 0x25, 0x90, 0xf8, 0x41, 0x30, 0x04, 0x46, 0x80, 0xf8, 0x42, 0x50, + 0x28, 0x3b, 0xc2, 0x62, 0x45, 0x85, 0x42, 0x6c, 0x02, 0x2b, 0x41, 0xea, + 0x02, 0x01, 0x41, 0x64, 0x2b, 0xd8, 0x03, 0x21, 0xfa, 0xf7, 0x28, 0xf9, + 0x28, 0x23, 0x80, 0xf8, 0x41, 0x30, 0x32, 0x4b, 0xa0, 0x6b, 0x63, 0x63, + 0x23, 0x6b, 0x00, 0x28, 0x36, 0xd0, 0x11, 0x2b, 0x01, 0xd0, 0x21, 0x2b, + 0x32, 0xd1, 0x23, 0x68, 0x1a, 0x68, 0x51, 0x04, 0x03, 0xd5, 0x1a, 0x68, + 0x22, 0xf4, 0x80, 0x42, 0x1a, 0x60, 0x90, 0xf8, 0x35, 0x30, 0x01, 0x2b, + 0x21, 0xd0, 0x28, 0x4b, 0x03, 0x65, 0x00, 0x23, 0x84, 0xf8, 0x40, 0x30, + 0x90, 0xf8, 0x35, 0x30, 0x02, 0x2b, 0x13, 0xd0, 0x80, 0x23, 0x43, 0x65, + 0xa0, 0x6b, 0x03, 0x6d, 0xbd, 0xe8, 0x70, 0x40, 0x18, 0x47, 0x48, 0xf2, + 0x03, 0x01, 0xfa, 0xf7, 0xfb, 0xf8, 0x90, 0xf8, 0x41, 0x30, 0x60, 0x2b, + 0x02, 0xd0, 0x20, 0x23, 0x80, 0xf8, 0x41, 0x30, 0x00, 0x23, 0xcd, 0xe7, + 0x02, 0xf0, 0xb6, 0xf9, 0x00, 0x28, 0xe9, 0xd1, 0x70, 0xbd, 0x20, 0x46, + 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0x72, 0xbf, 0xe0, 0x6b, 0x00, 0x28, + 0xf7, 0xd0, 0x12, 0x2b, 0x01, 0xd0, 0x22, 0x2b, 0xf3, 0xd1, 0x23, 0x68, + 0x1a, 0x68, 0x12, 0x04, 0x03, 0xd5, 0x1a, 0x68, 0x22, 0xf4, 0x00, 0x42, + 0x1a, 0x60, 0x90, 0xf8, 0x35, 0x30, 0x01, 0x2b, 0xe7, 0xd0, 0x0b, 0x4b, + 0x03, 0x65, 0x00, 0x23, 0x84, 0xf8, 0x40, 0x30, 0x90, 0xf8, 0x35, 0x30, + 0x02, 0x2b, 0x03, 0xd0, 0x80, 0x23, 0x43, 0x65, 0xe0, 0x6b, 0xc4, 0xe7, + 0x02, 0xf0, 0x8c, 0xf9, 0x00, 0x28, 0xd5, 0xd0, 0xf8, 0xe7, 0x00, 0xbf, + 0x00, 0x00, 0xff, 0xff, 0x2d, 0x6e, 0x00, 0x08, 0x43, 0x6a, 0x00, 0x08, + 0xf8, 0xb5, 0x03, 0x68, 0x20, 0x22, 0x04, 0x46, 0x0e, 0x46, 0x1f, 0x68, + 0x90, 0xf8, 0x41, 0x50, 0xda, 0x61, 0x05, 0xf0, 0xf7, 0x05, 0x21, 0x2d, + 0x70, 0xd1, 0x48, 0xf2, 0x01, 0x01, 0xfa, 0xf7, 0xab, 0xf8, 0x25, 0x63, + 0x23, 0x68, 0x20, 0x46, 0x5a, 0x68, 0x42, 0xf4, 0x00, 0x42, 0x5a, 0x60, + 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x72, 0x22, 0xf4, 0x8b, 0x32, 0x22, 0xf4, + 0xff, 0x72, 0x22, 0xf0, 0x01, 0x02, 0x5a, 0x60, 0xfa, 0xf7, 0x6c, 0xf9, + 0x79, 0x04, 0x5c, 0xd5, 0x22, 0x68, 0x13, 0x68, 0x23, 0xf4, 0x80, 0x43, + 0x13, 0x60, 0xa3, 0x6b, 0x13, 0xb3, 0x1b, 0x68, 0x38, 0x4a, 0x93, 0x42, + 0x1b, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x18, 0xd0, 0x18, 0x32, 0x93, 0x42, + 0x15, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x12, 0xd0, 0x18, 0x32, 0x93, 0x42, + 0x0f, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x0c, 0xd0, 0x18, 0x32, 0x93, 0x42, + 0x09, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x06, 0xd0, 0x02, 0xf5, 0x56, 0x72, + 0x93, 0x42, 0x02, 0xd0, 0x18, 0x32, 0x93, 0x42, 0xff, 0xd0, 0x5b, 0x68, + 0x9b, 0xb2, 0x63, 0x85, 0x73, 0x07, 0x10, 0xd5, 0x23, 0x68, 0x26, 0xf0, + 0x04, 0x06, 0x5a, 0x6a, 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, + 0x63, 0x62, 0x23, 0x8d, 0x2b, 0xb1, 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, + 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x63, 0x8d, 0x9b, 0xb2, 0x1b, 0xb1, + 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x63, 0x64, 0x00, 0x23, 0x84, 0xf8, + 0x42, 0x30, 0x65, 0x6c, 0x63, 0x63, 0xdd, 0xb1, 0x61, 0x6c, 0x20, 0x46, + 0xff, 0xf7, 0x0c, 0xff, 0x94, 0xf8, 0x41, 0x30, 0x28, 0x2b, 0x22, 0xd1, + 0x31, 0x46, 0x20, 0x46, 0xbd, 0xe8, 0xf8, 0x40, 0xfa, 0xf7, 0x20, 0xb9, + 0x22, 0x2d, 0x91, 0xd1, 0x48, 0xf2, 0x02, 0x01, 0x8b, 0xe7, 0x3a, 0x04, + 0xca, 0xd5, 0x22, 0x68, 0x13, 0x68, 0x23, 0xf4, 0x00, 0x43, 0x13, 0x60, + 0xe3, 0x6b, 0x9f, 0xe7, 0xe3, 0x6a, 0x13, 0xf5, 0x80, 0x3f, 0x0b, 0xd0, + 0x20, 0x46, 0xfa, 0xf7, 0x39, 0xf9, 0x07, 0x4b, 0xe3, 0x62, 0x20, 0x23, + 0x84, 0xf8, 0x40, 0x50, 0x84, 0xf8, 0x41, 0x30, 0x25, 0x63, 0xf8, 0xbd, + 0x94, 0xf8, 0x41, 0x30, 0xf5, 0xe7, 0x00, 0xbf, 0x10, 0x00, 0x02, 0x40, + 0x00, 0x00, 0xff, 0xff, 0xf8, 0xb5, 0x90, 0xf8, 0x40, 0x30, 0x04, 0x46, + 0x0e, 0x46, 0x15, 0x46, 0x01, 0x2b, 0xc7, 0x6a, 0x00, 0xf0, 0xb7, 0x80, + 0x01, 0x23, 0x8a, 0x06, 0x80, 0xf8, 0x40, 0x30, 0x03, 0xd5, 0xab, 0x06, + 0x01, 0xd5, 0xff, 0xf7, 0x49, 0xff, 0xf2, 0x06, 0x40, 0xf1, 0xa3, 0x80, + 0xeb, 0x06, 0x40, 0xf1, 0xa0, 0x80, 0xe9, 0x0b, 0xa8, 0x0b, 0x41, 0xea, + 0x95, 0x35, 0xed, 0x07, 0x40, 0xf1, 0x95, 0x80, 0xe2, 0x6b, 0x52, 0xb3, + 0x11, 0xf0, 0x01, 0x03, 0x26, 0xd0, 0x13, 0x68, 0x4e, 0x4a, 0x93, 0x42, + 0x1e, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x1b, 0xd0, 0x18, 0x32, 0x93, 0x42, + 0x18, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x15, 0xd0, 0x18, 0x32, 0x93, 0x42, + 0x12, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x0f, 0xd0, 0x18, 0x32, 0x93, 0x42, + 0x0c, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x09, 0xd0, 0x02, 0xf5, 0x56, 0x72, + 0x93, 0x42, 0x05, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x02, 0xd0, 0x18, 0x32, + 0x93, 0x42, 0xff, 0xd0, 0x5b, 0x68, 0xb3, 0xfa, 0x83, 0xf3, 0x5b, 0x09, + 0x1a, 0x46, 0xa3, 0x6b, 0x4b, 0xb3, 0xc1, 0x07, 0x27, 0xd5, 0x1b, 0x68, + 0x38, 0x49, 0x8b, 0x42, 0x1e, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x1b, 0xd0, + 0x18, 0x31, 0x8b, 0x42, 0x18, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x15, 0xd0, + 0x18, 0x31, 0x8b, 0x42, 0x12, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x0f, 0xd0, + 0x18, 0x31, 0x8b, 0x42, 0x0c, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x09, 0xd0, + 0x01, 0xf5, 0x56, 0x71, 0x8b, 0x42, 0x05, 0xd0, 0x18, 0x31, 0x8b, 0x42, + 0x02, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0xff, 0xd0, 0x5b, 0x68, 0xb3, 0xfa, + 0x83, 0xf3, 0x5b, 0x09, 0x0b, 0xb9, 0x01, 0x2a, 0x1f, 0xd1, 0x94, 0xf8, + 0x41, 0x30, 0x28, 0x2b, 0x0a, 0xd1, 0xb7, 0xf1, 0x00, 0x7f, 0x07, 0xd1, + 0x31, 0x46, 0x20, 0x46, 0xfa, 0xf7, 0x74, 0xf8, 0x00, 0x20, 0x84, 0xf8, + 0x40, 0x00, 0xf8, 0xbd, 0x94, 0xf8, 0x41, 0x20, 0x23, 0x68, 0x29, 0x2a, + 0x4f, 0xf0, 0x10, 0x02, 0xda, 0x61, 0xf3, 0xd1, 0x17, 0xf5, 0x80, 0x3f, + 0xf0, 0xd0, 0x20, 0x46, 0xfa, 0xf7, 0x54, 0xf8, 0xfa, 0xf7, 0x8e, 0xf8, + 0xea, 0xe7, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x37, 0xf0, 0x80, 0x72, + 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x63, 0x64, 0x94, 0xf8, 0x41, 0x30, + 0xdb, 0xb2, 0xdd, 0xd1, 0x03, 0xf0, 0xf7, 0x03, 0x21, 0x2b, 0x01, 0xd1, + 0x23, 0x63, 0x01, 0xe0, 0x22, 0x2b, 0xfb, 0xd0, 0x61, 0x6c, 0x20, 0x46, + 0xff, 0xf7, 0x28, 0xfe, 0xd0, 0xe7, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, + 0xcc, 0xe7, 0x32, 0x07, 0xca, 0xd5, 0x2b, 0x07, 0xc8, 0xd5, 0x20, 0x46, + 0xf9, 0xf7, 0x79, 0xff, 0xc4, 0xe7, 0x02, 0x20, 0xc5, 0xe7, 0x00, 0xbf, + 0x10, 0x00, 0x02, 0x40, 0xf8, 0xb5, 0x90, 0xf8, 0x40, 0x30, 0x04, 0x46, + 0x0d, 0x46, 0x16, 0x46, 0x01, 0x2b, 0xc7, 0x6a, 0x7d, 0xd0, 0x01, 0x23, + 0x8a, 0x06, 0x80, 0xf8, 0x40, 0x30, 0x03, 0xd5, 0xb3, 0x06, 0x01, 0xd5, + 0xff, 0xf7, 0x84, 0xfe, 0xe8, 0x06, 0x34, 0xd5, 0xf1, 0x06, 0x32, 0xd5, + 0x63, 0x8d, 0x9b, 0xb2, 0x03, 0xbb, 0x94, 0xf8, 0x41, 0x30, 0x28, 0x2b, + 0x0a, 0xd1, 0xb7, 0xf1, 0x00, 0x7f, 0x07, 0xd1, 0x29, 0x46, 0x20, 0x46, + 0xfa, 0xf7, 0x10, 0xf8, 0x00, 0x20, 0x84, 0xf8, 0x40, 0x00, 0xf8, 0xbd, + 0x94, 0xf8, 0x41, 0x20, 0x23, 0x68, 0x29, 0x2a, 0x4f, 0xf0, 0x10, 0x02, + 0xda, 0x61, 0xf3, 0xd1, 0x17, 0xf5, 0x80, 0x3f, 0xf0, 0xd0, 0x20, 0x46, + 0xf9, 0xf7, 0xf0, 0xff, 0x20, 0x46, 0xfa, 0xf7, 0x29, 0xf8, 0xe9, 0xe7, + 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, + 0x63, 0x64, 0x37, 0xf0, 0x80, 0x73, 0xdf, 0xd1, 0x61, 0x6c, 0x20, 0x46, + 0xff, 0xf7, 0xce, 0xfd, 0xda, 0xe7, 0x6a, 0x07, 0x1a, 0xd5, 0x73, 0x07, + 0x18, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x6b, 0xb1, 0x23, 0x68, 0x5a, 0x6a, + 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, + 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, + 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, 0xc1, 0xd1, 0x17, 0xf5, 0x80, 0x3f, + 0xbe, 0xd0, 0xcf, 0xe7, 0x28, 0x07, 0x05, 0xd5, 0x31, 0x07, 0x03, 0xd5, + 0x20, 0x46, 0xf9, 0xf7, 0x06, 0xff, 0xb5, 0xe7, 0xaa, 0x07, 0xb3, 0xd5, + 0xb3, 0x07, 0xb1, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x6b, 0xb1, 0x63, 0x6a, + 0x22, 0x68, 0x13, 0xf8, 0x01, 0x1b, 0x91, 0x62, 0x63, 0x62, 0x63, 0x8d, + 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x23, 0x8d, 0x01, 0x3b, 0x23, 0x85, + 0xa0, 0xe7, 0x37, 0xf0, 0x80, 0x73, 0xaf, 0xd0, 0x9c, 0xe7, 0x02, 0x20, + 0x9d, 0xe7, 0x37, 0xb5, 0x03, 0x68, 0x20, 0x22, 0x04, 0x46, 0x0d, 0x46, + 0xda, 0x61, 0x90, 0xf8, 0x41, 0x30, 0x21, 0x2b, 0x37, 0xd1, 0x01, 0x21, + 0xf9, 0xf7, 0xbc, 0xfe, 0x11, 0x23, 0x23, 0x63, 0x23, 0x68, 0xe9, 0x06, + 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x72, 0x22, 0xf4, 0x8b, 0x32, 0x22, 0xf4, + 0xff, 0x72, 0x22, 0xf0, 0x01, 0x02, 0x5a, 0x60, 0x4f, 0xf0, 0x00, 0x02, + 0x62, 0x63, 0xa2, 0xf5, 0x80, 0x32, 0xe2, 0x62, 0x05, 0xd5, 0x10, 0x22, + 0xda, 0x61, 0x62, 0x6c, 0x42, 0xf0, 0x04, 0x02, 0x62, 0x64, 0x94, 0xf8, + 0x41, 0x20, 0x60, 0x2a, 0x05, 0xd1, 0x6a, 0x07, 0x03, 0xd5, 0x5b, 0x6a, + 0xdb, 0xb2, 0x01, 0x93, 0x01, 0x9b, 0x20, 0x46, 0xf9, 0xf7, 0x68, 0xff, + 0x63, 0x6c, 0x94, 0xf8, 0x41, 0x20, 0x60, 0x2a, 0x00, 0xd0, 0x7b, 0xb1, + 0x61, 0x6c, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, 0xff, 0xf7, + 0x4b, 0xbd, 0x90, 0xf8, 0x41, 0x30, 0x22, 0x2b, 0xc8, 0xd1, 0x02, 0x21, + 0xf9, 0xf7, 0x80, 0xfe, 0x12, 0x23, 0xc2, 0xe7, 0x94, 0xf8, 0x41, 0x20, + 0x21, 0x2a, 0x12, 0xd1, 0x20, 0x22, 0x84, 0xf8, 0x40, 0x30, 0x84, 0xf8, + 0x41, 0x20, 0x23, 0x63, 0x94, 0xf8, 0x42, 0x20, 0x84, 0xf8, 0x42, 0x30, + 0x40, 0x2a, 0x01, 0xd1, 0x03, 0xb0, 0x30, 0xbd, 0x03, 0xb0, 0xbd, 0xe8, + 0x30, 0x40, 0xf9, 0xf7, 0xc7, 0xbe, 0x94, 0xf8, 0x41, 0x20, 0x22, 0x2a, + 0xf4, 0xd1, 0x20, 0x22, 0x84, 0xf8, 0x40, 0x30, 0x84, 0xf8, 0x41, 0x20, + 0x23, 0x63, 0x94, 0xf8, 0x42, 0x20, 0x84, 0xf8, 0x42, 0x30, 0x40, 0x2a, + 0xe8, 0xd0, 0x08, 0x23, 0x84, 0xf8, 0x60, 0x30, 0xe4, 0xe7, 0x73, 0xb5, + 0x90, 0xf8, 0x40, 0x30, 0x04, 0x46, 0x0d, 0x46, 0x16, 0x46, 0x01, 0x2b, + 0x00, 0xf0, 0x86, 0x80, 0x01, 0x23, 0xca, 0x06, 0x80, 0xf8, 0x40, 0x30, + 0x17, 0xd5, 0xf3, 0x06, 0x15, 0xd5, 0x03, 0x68, 0x10, 0x22, 0xda, 0x61, + 0x43, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x43, 0x64, 0xf9, 0xf7, 0x0e, 0xff, + 0xaa, 0x06, 0x05, 0xd5, 0xb3, 0x06, 0x03, 0xd5, 0x29, 0x46, 0x20, 0x46, + 0xff, 0xf7, 0x69, 0xff, 0x00, 0x20, 0x84, 0xf8, 0x40, 0x00, 0x02, 0xb0, + 0x70, 0xbd, 0x68, 0x07, 0x12, 0xd5, 0x71, 0x07, 0x10, 0xd5, 0x23, 0x68, + 0x25, 0xf0, 0x04, 0x05, 0x5a, 0x6a, 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, + 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, + 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0xdd, 0xe7, 0xaa, 0x07, 0x07, 0xd5, + 0xb3, 0x07, 0x05, 0xd5, 0x63, 0x6a, 0x22, 0x68, 0x13, 0xf8, 0x01, 0x1b, + 0x91, 0x62, 0xec, 0xe7, 0x28, 0x06, 0x32, 0xd5, 0x71, 0x06, 0x30, 0xd5, + 0x63, 0x8d, 0x22, 0x68, 0x9b, 0xb2, 0x03, 0xb3, 0x20, 0x8d, 0xf0, 0xb9, + 0x51, 0x68, 0x63, 0x8d, 0xc1, 0xf3, 0x09, 0x01, 0x9b, 0xb2, 0xff, 0x2b, + 0x08, 0xd9, 0xff, 0x22, 0x4f, 0xf0, 0x80, 0x73, 0x00, 0x90, 0x22, 0x85, + 0x20, 0x46, 0xf9, 0xf7, 0x41, 0xfe, 0xb9, 0xe7, 0x62, 0x8d, 0xe3, 0x6a, + 0x92, 0xb2, 0x13, 0xf5, 0x80, 0x3f, 0x22, 0x85, 0xd2, 0xb2, 0x02, 0xd0, + 0xe3, 0x6a, 0x00, 0x90, 0xf0, 0xe7, 0x4f, 0xf0, 0x00, 0x73, 0x00, 0x90, + 0xec, 0xe7, 0x53, 0x68, 0x9a, 0x01, 0x03, 0xd4, 0x20, 0x46, 0xf9, 0xf7, + 0x1c, 0xff, 0xa3, 0xe7, 0x40, 0x21, 0x20, 0x46, 0xff, 0xf7, 0x9e, 0xfc, + 0x9e, 0xe7, 0x6b, 0x06, 0x9c, 0xd5, 0x70, 0x06, 0x9a, 0xd5, 0x63, 0x8d, + 0x9b, 0xb2, 0x00, 0x2b, 0xf2, 0xd1, 0x23, 0x68, 0x5a, 0x68, 0x91, 0x01, + 0x92, 0xd4, 0xe2, 0x6a, 0x12, 0xf5, 0x80, 0x3f, 0xe6, 0xd1, 0x5a, 0x68, + 0x42, 0xf4, 0x80, 0x42, 0x5a, 0x60, 0x89, 0xe7, 0x02, 0x20, 0x92, 0xe7, + 0x13, 0xb5, 0x90, 0xf8, 0x40, 0x30, 0x04, 0x46, 0x01, 0x2b, 0x00, 0xf0, + 0x87, 0x80, 0x01, 0x23, 0x80, 0xf8, 0x40, 0x30, 0xcb, 0x06, 0x1e, 0xd5, + 0xd0, 0x06, 0x1c, 0xd5, 0x10, 0x23, 0x22, 0x68, 0x3f, 0x49, 0xd3, 0x61, + 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x63, 0x64, 0x63, 0x6b, 0x8b, 0x42, + 0x0f, 0xd0, 0x3c, 0x49, 0x8b, 0x42, 0x0c, 0xbf, 0x60, 0x23, 0x20, 0x23, + 0x11, 0x68, 0x20, 0x46, 0x0b, 0x43, 0x13, 0x60, 0xf9, 0xf7, 0x72, 0xfe, + 0x00, 0x20, 0x84, 0xf8, 0x40, 0x00, 0x02, 0xb0, 0x10, 0xbd, 0x60, 0x23, + 0xf2, 0xe7, 0x0b, 0x06, 0x43, 0xd5, 0x50, 0x06, 0x41, 0xd5, 0x23, 0x68, + 0x1a, 0x68, 0x22, 0xf0, 0x40, 0x02, 0x1a, 0x60, 0x62, 0x8d, 0x92, 0xb2, + 0x6a, 0xb3, 0x59, 0x68, 0x63, 0x8d, 0xc1, 0xf3, 0x09, 0x01, 0x9b, 0xb2, + 0xff, 0x2b, 0x1b, 0xd9, 0xff, 0x23, 0x23, 0x85, 0x4f, 0xf0, 0x80, 0x73, + 0x00, 0x22, 0x20, 0x46, 0x00, 0x92, 0x94, 0xf8, 0x28, 0x20, 0xf9, 0xf7, + 0xc5, 0xfd, 0x63, 0x8d, 0x22, 0x8d, 0x9b, 0x1a, 0x9b, 0xb2, 0x63, 0x85, + 0x94, 0xf8, 0x41, 0x30, 0x22, 0x2b, 0x23, 0x68, 0x1a, 0x68, 0x0c, 0xbf, + 0x42, 0xf4, 0x00, 0x42, 0x42, 0xf4, 0x80, 0x42, 0x1a, 0x60, 0xc9, 0xe7, + 0x63, 0x8d, 0x23, 0x85, 0xe3, 0x6a, 0x13, 0xf5, 0x80, 0x3f, 0x01, 0xd0, + 0xe3, 0x6a, 0xdf, 0xe7, 0x4f, 0xf0, 0x00, 0x73, 0xdc, 0xe7, 0x5b, 0x68, + 0x9a, 0x01, 0x03, 0xd4, 0x20, 0x46, 0xf9, 0xf7, 0x94, 0xfe, 0xb7, 0xe7, + 0x40, 0x21, 0x20, 0x46, 0xff, 0xf7, 0x16, 0xfc, 0xb2, 0xe7, 0x4b, 0x06, + 0x12, 0xd5, 0x50, 0x06, 0x10, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, + 0xf2, 0xd1, 0x23, 0x68, 0x5a, 0x68, 0x92, 0x01, 0xa6, 0xd4, 0xe2, 0x6a, + 0x12, 0xf5, 0x80, 0x3f, 0xe6, 0xd1, 0x5a, 0x68, 0x42, 0xf4, 0x80, 0x42, + 0x5a, 0x60, 0x9d, 0xe7, 0x88, 0x06, 0x9b, 0xd5, 0x93, 0x06, 0x99, 0xd5, + 0x20, 0x46, 0xff, 0xf7, 0x6c, 0xfe, 0x95, 0xe7, 0x02, 0x20, 0x96, 0xe7, + 0x4d, 0x71, 0x00, 0x08, 0xa1, 0x6c, 0x00, 0x08, 0x03, 0x68, 0x99, 0x69, + 0x1a, 0x68, 0x10, 0xb4, 0xcc, 0x05, 0x08, 0xd5, 0x14, 0x06, 0x06, 0xd5, + 0x44, 0x6c, 0x44, 0xf0, 0x01, 0x04, 0x44, 0x64, 0x4f, 0xf4, 0x80, 0x74, + 0xdc, 0x61, 0x4c, 0x05, 0x08, 0xd5, 0x14, 0x06, 0x06, 0xd5, 0x44, 0x6c, + 0x44, 0xf0, 0x08, 0x04, 0x44, 0x64, 0x4f, 0xf4, 0x80, 0x64, 0xdc, 0x61, + 0x89, 0x05, 0x08, 0xd5, 0x12, 0x06, 0x06, 0xd5, 0x42, 0x6c, 0x42, 0xf0, + 0x02, 0x02, 0x42, 0x64, 0x4f, 0xf4, 0x00, 0x72, 0xda, 0x61, 0x41, 0x6c, + 0x11, 0xf0, 0x0b, 0x0f, 0x03, 0xd0, 0x5d, 0xf8, 0x04, 0x4b, 0xff, 0xf7, + 0xc5, 0xbb, 0x5d, 0xf8, 0x04, 0x4b, 0x70, 0x47, 0x05, 0x4b, 0x07, 0xb5, + 0x18, 0x68, 0x01, 0x90, 0xf9, 0xf7, 0x59, 0xfe, 0x01, 0x98, 0x03, 0xb0, + 0x5d, 0xf8, 0x04, 0xeb, 0xff, 0xf7, 0xc4, 0xbf, 0x64, 0x0b, 0x02, 0x24, + 0x05, 0x4b, 0x07, 0xb5, 0x58, 0x68, 0x01, 0x90, 0xf9, 0xf7, 0x4b, 0xfe, + 0x01, 0x98, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, 0xff, 0xf7, 0xb6, 0xbf, + 0x64, 0x0b, 0x02, 0x24, 0x05, 0x4b, 0x07, 0xb5, 0x98, 0x68, 0x01, 0x90, + 0xf9, 0xf7, 0x3d, 0xfe, 0x01, 0x98, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, + 0xff, 0xf7, 0xa8, 0xbf, 0x64, 0x0b, 0x02, 0x24, 0x05, 0x4b, 0x07, 0xb5, + 0xd8, 0x68, 0x01, 0x90, 0xf9, 0xf7, 0x2f, 0xfe, 0x01, 0x98, 0x03, 0xb0, + 0x5d, 0xf8, 0x04, 0xeb, 0xff, 0xf7, 0x9a, 0xbf, 0x64, 0x0b, 0x02, 0x24, + 0x85, 0x4a, 0x13, 0x68, 0x03, 0xf0, 0x0f, 0x03, 0x8b, 0x42, 0x2d, 0xe9, + 0xf0, 0x41, 0x04, 0x46, 0x0d, 0x46, 0xc0, 0xf0, 0x88, 0x80, 0x23, 0x68, + 0x5f, 0x07, 0x00, 0xf1, 0x92, 0x80, 0x1e, 0x07, 0x0b, 0xd5, 0x7e, 0x49, + 0x66, 0x69, 0xc8, 0x69, 0x00, 0xf0, 0x70, 0x00, 0x86, 0x42, 0x04, 0xd9, + 0xca, 0x69, 0x22, 0xf0, 0x70, 0x02, 0x32, 0x43, 0xca, 0x61, 0xd8, 0x06, + 0x0b, 0xd5, 0x77, 0x49, 0xa6, 0x69, 0xc8, 0x69, 0x00, 0xf4, 0xe0, 0x60, + 0x86, 0x42, 0x04, 0xd9, 0xca, 0x69, 0x22, 0xf4, 0xe0, 0x62, 0x32, 0x43, + 0xca, 0x61, 0x99, 0x06, 0x0b, 0xd5, 0x70, 0x49, 0xe6, 0x69, 0x08, 0x6a, + 0x00, 0xf0, 0x70, 0x00, 0x86, 0x42, 0x04, 0xd9, 0x0a, 0x6a, 0x22, 0xf0, + 0x70, 0x02, 0x32, 0x43, 0x0a, 0x62, 0x9a, 0x07, 0x0b, 0xd5, 0x69, 0x49, + 0xe6, 0x68, 0x88, 0x69, 0x00, 0xf0, 0x0f, 0x00, 0x86, 0x42, 0x04, 0xd9, + 0x8a, 0x69, 0x22, 0xf0, 0x0f, 0x02, 0x32, 0x43, 0x8a, 0x61, 0xdf, 0x07, + 0x65, 0xd4, 0x23, 0x68, 0x9e, 0x07, 0x00, 0xf1, 0x97, 0x80, 0x5f, 0x49, + 0x0a, 0x68, 0x02, 0xf0, 0x0f, 0x02, 0x95, 0x42, 0xc0, 0xf0, 0x9e, 0x80, + 0x58, 0x07, 0x00, 0xf1, 0xa6, 0x80, 0x19, 0x07, 0x0b, 0xd5, 0x5a, 0x49, + 0x65, 0x69, 0xc8, 0x69, 0x00, 0xf0, 0x70, 0x00, 0x85, 0x42, 0x04, 0xd2, + 0xca, 0x69, 0x22, 0xf0, 0x70, 0x02, 0x2a, 0x43, 0xca, 0x61, 0xda, 0x06, + 0x0b, 0xd5, 0x53, 0x49, 0xa5, 0x69, 0xc8, 0x69, 0x00, 0xf4, 0xe0, 0x60, + 0x85, 0x42, 0x04, 0xd2, 0xca, 0x69, 0x22, 0xf4, 0xe0, 0x62, 0x2a, 0x43, + 0xca, 0x61, 0x9b, 0x06, 0x0b, 0xd5, 0x4c, 0x4a, 0xe0, 0x69, 0x11, 0x6a, + 0x01, 0xf0, 0x70, 0x01, 0x88, 0x42, 0x04, 0xd2, 0x13, 0x6a, 0x23, 0xf0, + 0x70, 0x03, 0x03, 0x43, 0x13, 0x62, 0xfe, 0xf7, 0xe5, 0xfa, 0x45, 0x4a, + 0x93, 0x69, 0x92, 0x69, 0xc3, 0xf3, 0x03, 0x23, 0x43, 0x4a, 0xd3, 0x5c, + 0x03, 0xf0, 0x1f, 0x03, 0xd8, 0x40, 0x42, 0x4b, 0x18, 0x60, 0xfe, 0xf7, + 0xdb, 0xfe, 0x00, 0x20, 0x0b, 0xe0, 0x13, 0x68, 0x23, 0xf0, 0x0f, 0x03, + 0x0b, 0x43, 0x13, 0x60, 0x13, 0x68, 0x03, 0xf0, 0x0f, 0x03, 0x8b, 0x42, + 0x3f, 0xf4, 0x6d, 0xaf, 0x01, 0x20, 0xbd, 0xe8, 0xf0, 0x81, 0x36, 0x49, + 0x26, 0x69, 0x88, 0x69, 0x00, 0xf0, 0x70, 0x00, 0x86, 0x42, 0x7f, 0xf6, + 0x66, 0xaf, 0x8a, 0x69, 0x22, 0xf0, 0x70, 0x02, 0x32, 0x43, 0x8a, 0x61, + 0x5f, 0xe7, 0x2f, 0x4b, 0xa1, 0x68, 0x9a, 0x69, 0x22, 0xf4, 0x70, 0x62, + 0x0a, 0x43, 0x9a, 0x61, 0x62, 0x68, 0x1b, 0x68, 0x02, 0x2a, 0x1c, 0xd1, + 0x13, 0xf4, 0x00, 0x3f, 0xe0, 0xd0, 0x28, 0x4e, 0x41, 0xf2, 0x88, 0x38, + 0x33, 0x69, 0x23, 0xf0, 0x07, 0x03, 0x13, 0x43, 0x33, 0x61, 0xfc, 0xf7, + 0xe3, 0xfe, 0x07, 0x46, 0x33, 0x69, 0x62, 0x68, 0x03, 0xf0, 0x38, 0x03, + 0xb3, 0xeb, 0xc2, 0x0f, 0x3f, 0xf4, 0x79, 0xaf, 0xfc, 0xf7, 0xd8, 0xfe, + 0xc0, 0x1b, 0x40, 0x45, 0xf2, 0xd9, 0x03, 0x20, 0xc7, 0xe7, 0x03, 0x2a, + 0x02, 0xd1, 0x13, 0xf0, 0x00, 0x7f, 0xdf, 0xe7, 0x01, 0x2a, 0x02, 0xd1, + 0x13, 0xf4, 0x80, 0x7f, 0xda, 0xe7, 0x13, 0xf0, 0x04, 0x0f, 0xd7, 0xe7, + 0x14, 0x49, 0xe6, 0x68, 0x88, 0x69, 0x00, 0xf0, 0x0f, 0x00, 0x86, 0x42, + 0xbf, 0xf4, 0x61, 0xaf, 0x8a, 0x69, 0x22, 0xf0, 0x0f, 0x02, 0x32, 0x43, + 0x8a, 0x61, 0x5a, 0xe7, 0x0a, 0x68, 0x22, 0xf0, 0x0f, 0x02, 0x2a, 0x43, + 0x0a, 0x60, 0x0a, 0x68, 0x02, 0xf0, 0x0f, 0x02, 0x95, 0x42, 0xa1, 0xd1, + 0x56, 0xe7, 0x08, 0x49, 0x25, 0x69, 0x88, 0x69, 0x00, 0xf0, 0x70, 0x00, + 0x85, 0x42, 0xbf, 0xf4, 0x52, 0xaf, 0x8a, 0x69, 0x22, 0xf0, 0x70, 0x02, + 0x2a, 0x43, 0x8a, 0x61, 0x4b, 0xe7, 0x00, 0xbf, 0x00, 0x20, 0x00, 0x52, + 0x00, 0x44, 0x02, 0x58, 0x29, 0xd5, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, + 0x90, 0xf8, 0xbc, 0x23, 0x03, 0x68, 0x01, 0x2a, 0x21, 0xd0, 0x01, 0x22, + 0x80, 0xf8, 0xbc, 0x23, 0x82, 0x6a, 0x01, 0x2a, 0x06, 0xd1, 0x82, 0x69, + 0x01, 0x2a, 0x03, 0xd0, 0x9a, 0x6b, 0x42, 0xf4, 0x80, 0x32, 0x9a, 0x63, + 0x9a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x9a, 0x60, 0xd3, 0xf8, 0x00, 0x2e, + 0x22, 0xf0, 0x03, 0x02, 0xc3, 0xf8, 0x00, 0x2e, 0xd3, 0xf8, 0x04, 0x28, + 0x22, 0xf0, 0x02, 0x02, 0xc3, 0xf8, 0x04, 0x28, 0x00, 0x23, 0x80, 0xf8, + 0xbc, 0x33, 0x18, 0x46, 0x70, 0x47, 0x02, 0x20, 0x70, 0x47, 0x00, 0x00, + 0x2d, 0xe9, 0xf7, 0x4f, 0x00, 0x23, 0xdf, 0xf8, 0xbc, 0x81, 0xdf, 0xf8, + 0xbc, 0xc1, 0x4f, 0xf0, 0xb0, 0x49, 0x0a, 0x68, 0x32, 0xfa, 0x03, 0xf4, + 0x02, 0xd1, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x27, 0x9f, 0x40, + 0x3a, 0x40, 0x00, 0xf0, 0xb6, 0x80, 0x4c, 0x68, 0x4f, 0xea, 0x43, 0x0e, + 0x03, 0x25, 0x24, 0xf0, 0x10, 0x0a, 0x05, 0xfa, 0x0e, 0xf5, 0x0a, 0xf1, + 0xff, 0x36, 0xed, 0x43, 0x01, 0x2e, 0x10, 0xd8, 0x86, 0x68, 0x06, 0xea, + 0x05, 0x0b, 0xce, 0x68, 0x06, 0xfa, 0x0e, 0xf6, 0x46, 0xea, 0x0b, 0x06, + 0x86, 0x60, 0x46, 0x68, 0x26, 0xea, 0x07, 0x07, 0xc4, 0xf3, 0x00, 0x16, + 0x9e, 0x40, 0x37, 0x43, 0x47, 0x60, 0xc7, 0x68, 0xba, 0xf1, 0x02, 0x0f, + 0x8e, 0x68, 0x07, 0xea, 0x05, 0x07, 0x06, 0xfa, 0x0e, 0xf6, 0x46, 0xea, + 0x07, 0x06, 0xc6, 0x60, 0x14, 0xd1, 0x4f, 0xea, 0xd3, 0x0a, 0x03, 0xf0, + 0x07, 0x0b, 0x0f, 0x27, 0x00, 0xeb, 0x8a, 0x0a, 0x4f, 0xea, 0x8b, 0x0b, + 0xda, 0xf8, 0x20, 0x60, 0x07, 0xfa, 0x0b, 0xf7, 0x26, 0xea, 0x07, 0x07, + 0x0e, 0x69, 0x06, 0xfa, 0x0b, 0xf6, 0x3e, 0x43, 0xca, 0xf8, 0x20, 0x60, + 0x06, 0x68, 0x35, 0x40, 0x04, 0xf0, 0x03, 0x06, 0x06, 0xfa, 0x0e, 0xfe, + 0x4e, 0xea, 0x05, 0x05, 0x05, 0x60, 0xe5, 0x00, 0x6b, 0xd5, 0xd8, 0xf8, + 0xf4, 0x50, 0x23, 0xf0, 0x03, 0x06, 0x03, 0xf0, 0x03, 0x07, 0x4f, 0xf0, + 0x0f, 0x0e, 0x45, 0xf0, 0x02, 0x05, 0x06, 0xf1, 0xb0, 0x46, 0xbf, 0x00, + 0xc8, 0xf8, 0xf4, 0x50, 0x06, 0xf5, 0x80, 0x66, 0xd8, 0xf8, 0xf4, 0x50, + 0x05, 0xf0, 0x02, 0x05, 0x01, 0x95, 0x01, 0x9d, 0x0e, 0xfa, 0x07, 0xf5, + 0xd6, 0xf8, 0x08, 0xa0, 0x2a, 0xea, 0x05, 0x0e, 0x31, 0x4d, 0xa8, 0x42, + 0x4d, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, 0x4b, 0xd0, 0x05, 0xf5, + 0x80, 0x65, 0xa8, 0x42, 0x49, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, + 0x47, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, 0x45, 0xd0, 0x05, 0xf5, + 0x80, 0x65, 0xa8, 0x42, 0x43, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, + 0x41, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, 0x3f, 0xd0, 0x05, 0xf5, + 0x80, 0x65, 0xa8, 0x42, 0x3d, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, + 0x0c, 0xbf, 0x09, 0x25, 0x0a, 0x25, 0xbd, 0x40, 0xe7, 0x03, 0x45, 0xea, + 0x0e, 0x05, 0xb5, 0x60, 0x6f, 0xea, 0x02, 0x06, 0xdc, 0xf8, 0x00, 0x50, + 0x54, 0xbf, 0x35, 0x40, 0x15, 0x43, 0xa7, 0x03, 0xcc, 0xf8, 0x00, 0x50, + 0xdc, 0xf8, 0x04, 0x50, 0x54, 0xbf, 0x35, 0x40, 0x15, 0x43, 0xe7, 0x02, + 0x4f, 0xf0, 0xb0, 0x47, 0xcc, 0xf8, 0x04, 0x50, 0xd9, 0xf8, 0x00, 0x50, + 0x54, 0xbf, 0x35, 0x40, 0x15, 0x43, 0xa4, 0x02, 0x3d, 0x60, 0x7d, 0x68, + 0x54, 0xbf, 0x35, 0x40, 0x15, 0x43, 0xc9, 0xf8, 0x04, 0x50, 0x01, 0x33, + 0x3b, 0xe7, 0x00, 0x25, 0xd5, 0xe7, 0x01, 0x25, 0xd3, 0xe7, 0x02, 0x25, + 0xd1, 0xe7, 0x03, 0x25, 0xcf, 0xe7, 0x04, 0x25, 0xcd, 0xe7, 0x05, 0x25, + 0xcb, 0xe7, 0x06, 0x25, 0xc9, 0xe7, 0x07, 0x25, 0xc7, 0xe7, 0x08, 0x25, + 0xc5, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x02, 0x58, 0x00, 0x44, 0x02, 0x58, + 0x80, 0x00, 0x00, 0x58, 0xf0, 0xb5, 0xa5, 0xb0, 0x20, 0x22, 0x00, 0x21, + 0x04, 0x46, 0x09, 0xa8, 0x13, 0xf0, 0x78, 0xfe, 0x4c, 0x22, 0x00, 0x21, + 0x11, 0xa8, 0x13, 0xf0, 0x73, 0xfe, 0x56, 0x4b, 0x9b, 0x6a, 0x03, 0xf0, + 0x03, 0x03, 0x02, 0x2b, 0x34, 0xd0, 0x53, 0x4b, 0x02, 0x27, 0x53, 0x4e, + 0x00, 0x25, 0xd3, 0xf8, 0xe0, 0x20, 0x04, 0xa9, 0x30, 0x46, 0x42, 0xf0, + 0x80, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x07, 0x95, + 0x03, 0xf0, 0x80, 0x03, 0x03, 0x93, 0x03, 0x9b, 0x01, 0x23, 0xcd, 0xe9, + 0x04, 0x73, 0x06, 0x93, 0xff, 0xf7, 0xee, 0xfe, 0x0a, 0x20, 0x01, 0xf0, + 0xf7, 0xfb, 0xb7, 0x61, 0xfc, 0xf7, 0xfe, 0xfd, 0x45, 0x4b, 0xf4, 0xb9, + 0x01, 0x94, 0xda, 0x6a, 0x22, 0xf0, 0x01, 0x02, 0xda, 0x62, 0xdb, 0x6a, + 0x03, 0xf0, 0x01, 0x03, 0x01, 0x93, 0x41, 0x4b, 0x9a, 0x69, 0x42, 0xf4, + 0x40, 0x42, 0x9a, 0x61, 0x9b, 0x69, 0x03, 0xf4, 0x40, 0x43, 0x01, 0x93, + 0x01, 0x9b, 0x1f, 0xe0, 0x01, 0x21, 0x09, 0xa8, 0xcd, 0xe9, 0x09, 0x11, + 0xff, 0xf7, 0x8e, 0xfd, 0x00, 0x28, 0xc2, 0xd0, 0x00, 0x20, 0x25, 0xb0, + 0xf0, 0xbd, 0x02, 0x95, 0xda, 0x6a, 0x22, 0xf0, 0x01, 0x02, 0xda, 0x62, + 0xdb, 0x6a, 0x33, 0x4a, 0x03, 0xf0, 0x01, 0x03, 0x02, 0x93, 0x93, 0x69, + 0x23, 0xf4, 0x40, 0x43, 0x43, 0xf4, 0x80, 0x43, 0x93, 0x61, 0x93, 0x69, + 0x03, 0xf4, 0x40, 0x43, 0x02, 0x93, 0x02, 0x9b, 0x2b, 0x4a, 0x93, 0x69, + 0x9d, 0x04, 0xfc, 0xd5, 0x21, 0x21, 0x4f, 0xf4, 0xa0, 0x23, 0x05, 0x22, + 0x00, 0x2c, 0x4f, 0xf0, 0x08, 0x05, 0x11, 0xa8, 0x1c, 0x92, 0x0c, 0xbf, + 0xa0, 0x22, 0x28, 0x22, 0x21, 0x95, 0xcd, 0xe9, 0x11, 0x13, 0x01, 0x23, + 0x1d, 0x92, 0x00, 0x22, 0x17, 0x93, 0x02, 0x23, 0x23, 0x92, 0x1e, 0x93, + 0x20, 0x93, 0x22, 0x92, 0xcd, 0xe9, 0x1a, 0x33, 0x0a, 0x23, 0x1f, 0x93, + 0xfc, 0xf7, 0x08, 0xff, 0x01, 0x46, 0x00, 0x28, 0xc2, 0xd1, 0x3f, 0x22, + 0x03, 0x23, 0xcd, 0xe9, 0x09, 0x23, 0x40, 0x23, 0x4f, 0xf4, 0x80, 0x62, + 0xcd, 0xe9, 0x0b, 0x05, 0xcd, 0xe9, 0x0e, 0x32, 0x0d, 0x93, 0x10, 0x93, + 0xe4, 0xb1, 0x09, 0xa8, 0xff, 0xf7, 0x3e, 0xfd, 0x00, 0x28, 0xaf, 0xd1, + 0x0c, 0x4b, 0x01, 0x20, 0x1a, 0x68, 0x42, 0xf0, 0x80, 0x02, 0x1a, 0x60, + 0xd3, 0xf8, 0xf4, 0x20, 0x42, 0xf0, 0x02, 0x02, 0xc3, 0xf8, 0xf4, 0x20, + 0xd3, 0xf8, 0xf4, 0x30, 0x07, 0x4a, 0x03, 0xf0, 0x02, 0x03, 0x00, 0x93, + 0x00, 0x9b, 0x13, 0x6a, 0x43, 0xf0, 0x01, 0x03, 0x13, 0x62, 0x98, 0xe7, + 0x04, 0x21, 0xe0, 0xe7, 0x00, 0x44, 0x02, 0x58, 0x00, 0x1c, 0x02, 0x58, + 0x00, 0x04, 0x00, 0x58, 0x00, 0x48, 0x02, 0x58, 0x10, 0xb5, 0x04, 0x46, + 0xef, 0xf3, 0x05, 0x83, 0x13, 0xb1, 0x6f, 0xf0, 0x05, 0x00, 0x10, 0xbd, + 0x0f, 0xf0, 0x64, 0xfa, 0x00, 0x28, 0xf8, 0xd1, 0x20, 0x46, 0x4f, 0xf0, + 0xff, 0x31, 0xdf, 0xf8, 0x08, 0xc0, 0x00, 0xdf, 0xf3, 0xe7, 0x00, 0xbf, + 0x39, 0x40, 0x01, 0x08, 0x00, 0x20, 0x70, 0x47, 0x6f, 0xf0, 0x57, 0x00, + 0x70, 0x47, 0x6f, 0xf0, 0x57, 0x00, 0x70, 0x47, 0x03, 0x68, 0x10, 0xb4, + 0x9c, 0x6c, 0x00, 0x23, 0xa4, 0x46, 0x1a, 0x46, 0x5d, 0xf8, 0x04, 0x4b, + 0x60, 0x47, 0x6f, 0xf0, 0x57, 0x00, 0x70, 0x47, 0x43, 0x68, 0x0a, 0x46, + 0x19, 0x68, 0x10, 0xb4, 0x8c, 0x6d, 0x81, 0x68, 0x18, 0x46, 0x23, 0x46, + 0x5d, 0xf8, 0x04, 0x4b, 0x18, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, + 0x18, 0x46, 0x52, 0x6d, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, + 0x18, 0x46, 0x12, 0x6d, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, + 0x18, 0x46, 0xd2, 0x6c, 0x10, 0x47, 0x30, 0xb4, 0x44, 0x68, 0x13, 0x46, + 0x22, 0x68, 0x95, 0x6c, 0x0a, 0x46, 0x81, 0x68, 0x20, 0x46, 0xac, 0x46, + 0x30, 0xbc, 0x60, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, 0x18, 0x46, + 0x52, 0x6c, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, 0x18, 0x46, + 0x12, 0x6c, 0x10, 0x47, 0x30, 0xb4, 0x44, 0x68, 0x13, 0x46, 0x22, 0x68, + 0xd5, 0x6b, 0x0a, 0x46, 0x81, 0x68, 0x20, 0x46, 0xac, 0x46, 0x30, 0xbc, + 0x60, 0x47, 0x30, 0xb4, 0x44, 0x68, 0x13, 0x46, 0x22, 0x68, 0x95, 0x6b, + 0x0a, 0x46, 0x81, 0x68, 0x20, 0x46, 0xac, 0x46, 0x30, 0xbc, 0x60, 0x47, + 0x10, 0xb5, 0x04, 0x46, 0x40, 0x68, 0x30, 0xb1, 0x03, 0x68, 0xa1, 0x68, + 0x5b, 0x6b, 0x98, 0x47, 0x00, 0x23, 0x63, 0x60, 0x10, 0xbd, 0x6f, 0xf0, + 0x15, 0x00, 0xfb, 0xe7, 0x38, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xee, 0xff, + 0x05, 0x46, 0x23, 0x68, 0x20, 0x46, 0x5b, 0x68, 0x98, 0x47, 0x28, 0x46, + 0x38, 0xbd, 0x70, 0xb5, 0x0d, 0x46, 0x41, 0x68, 0x04, 0x46, 0x41, 0xb9, + 0x29, 0x68, 0x0e, 0x6b, 0x00, 0xf1, 0x08, 0x01, 0x28, 0x46, 0xb0, 0x47, + 0x00, 0xb9, 0x65, 0x60, 0x70, 0xbd, 0x6f, 0xf0, 0x15, 0x00, 0xfb, 0xe7, + 0x04, 0x4b, 0x10, 0xb5, 0x03, 0x60, 0x04, 0x46, 0x43, 0x68, 0x0b, 0xb1, + 0xff, 0xf7, 0xce, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x20, 0xdb, 0x01, 0x08, + 0x03, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x60, 0xff, 0xf7, 0xee, 0xff, + 0x20, 0x46, 0x10, 0xbd, 0xa0, 0xdb, 0x01, 0x08, 0x43, 0x68, 0x81, 0x68, + 0x1a, 0x68, 0x18, 0x46, 0x52, 0x6f, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, + 0x1a, 0x68, 0x18, 0x46, 0x12, 0x6f, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, + 0x1a, 0x68, 0x18, 0x46, 0xd2, 0x6e, 0x10, 0x47, 0x43, 0x68, 0x0a, 0x46, + 0x19, 0x68, 0x10, 0xb4, 0x8c, 0x6e, 0x81, 0x68, 0x18, 0x46, 0x23, 0x46, + 0x5d, 0xf8, 0x04, 0x4b, 0x18, 0x47, 0x10, 0xb5, 0x04, 0x46, 0x40, 0x68, + 0x30, 0xb1, 0x03, 0x68, 0xa1, 0x68, 0x1b, 0x6e, 0x98, 0x47, 0x00, 0x23, + 0x63, 0x60, 0x10, 0xbd, 0x6f, 0xf0, 0x15, 0x00, 0xfb, 0xe7, 0x38, 0xb5, + 0x04, 0x46, 0xff, 0xf7, 0xee, 0xff, 0x05, 0x46, 0x23, 0x68, 0x20, 0x46, + 0x5b, 0x68, 0x98, 0x47, 0x28, 0x46, 0x38, 0xbd, 0x38, 0xb5, 0x43, 0x68, + 0x04, 0x46, 0x0d, 0x46, 0x43, 0xb9, 0x0b, 0x68, 0x00, 0xf1, 0x08, 0x01, + 0x28, 0x46, 0xdb, 0x6d, 0x98, 0x47, 0x00, 0xb9, 0x65, 0x60, 0x38, 0xbd, + 0x6f, 0xf0, 0x15, 0x00, 0xfb, 0xe7, 0x00, 0x00, 0x04, 0x4b, 0x10, 0xb5, + 0x03, 0x60, 0x04, 0x46, 0x43, 0x68, 0x0b, 0xb1, 0xff, 0xf7, 0xcd, 0xff, + 0x20, 0x46, 0x10, 0xbd, 0xf4, 0xda, 0x01, 0x08, 0x03, 0x4b, 0x10, 0xb5, + 0x04, 0x46, 0x03, 0x60, 0xff, 0xf7, 0xee, 0xff, 0x20, 0x46, 0x10, 0xbd, + 0x74, 0xdb, 0x01, 0x08, 0x03, 0x68, 0x01, 0x33, 0x03, 0x60, 0x00, 0x20, + 0x70, 0x47, 0xf7, 0xb5, 0x08, 0x9f, 0x0e, 0x46, 0x04, 0x68, 0x19, 0x46, + 0xc0, 0x69, 0x00, 0x23, 0x25, 0x68, 0x00, 0x97, 0x00, 0x27, 0xe0, 0xfb, + 0x06, 0x23, 0x20, 0x46, 0x01, 0x97, 0x6d, 0x69, 0xa8, 0x47, 0x03, 0xb0, + 0xf0, 0xbd, 0xf7, 0xb5, 0x08, 0x9f, 0x0e, 0x46, 0x04, 0x68, 0x19, 0x46, + 0xc0, 0x69, 0x00, 0x23, 0x25, 0x68, 0x00, 0x97, 0x00, 0x27, 0xe0, 0xfb, + 0x06, 0x23, 0x20, 0x46, 0x01, 0x97, 0xad, 0x69, 0xa8, 0x47, 0x03, 0xb0, + 0xf0, 0xbd, 0x37, 0xb5, 0x04, 0x68, 0xc3, 0x69, 0x00, 0x20, 0x22, 0x68, + 0x00, 0x93, 0x01, 0x90, 0x20, 0x46, 0xd5, 0x69, 0xa1, 0xfb, 0x03, 0x23, + 0xa8, 0x47, 0x03, 0xb0, 0x30, 0xbd, 0x00, 0x68, 0x03, 0x68, 0x1b, 0x69, + 0x18, 0x47, 0x00, 0x28, 0x07, 0xdc, 0x10, 0xf1, 0x16, 0x0f, 0x04, 0xda, + 0x10, 0xf1, 0x34, 0x0f, 0x08, 0xbf, 0x6f, 0xf0, 0x89, 0x00, 0x70, 0x47, + 0x70, 0xb5, 0x0a, 0x44, 0x0e, 0x4e, 0x03, 0x68, 0x93, 0xfa, 0xa3, 0xf3, + 0x93, 0xfa, 0xa3, 0xf3, 0x03, 0x60, 0x91, 0x42, 0x12, 0xd0, 0x11, 0xf8, + 0x01, 0x4b, 0x84, 0xea, 0x03, 0x05, 0x05, 0xf0, 0x0f, 0x05, 0x56, 0xf8, + 0x25, 0x50, 0x85, 0xea, 0x13, 0x13, 0x83, 0xea, 0x14, 0x14, 0x04, 0xf0, + 0x0f, 0x04, 0x56, 0xf8, 0x24, 0x40, 0x84, 0xea, 0x13, 0x13, 0xea, 0xe7, + 0x03, 0x60, 0x70, 0xbd, 0x58, 0xda, 0x01, 0x08, 0x0b, 0x68, 0x10, 0xb5, + 0x04, 0x68, 0x9c, 0x42, 0x09, 0xd0, 0x40, 0x68, 0x4a, 0x68, 0x90, 0x42, + 0x05, 0xd0, 0x94, 0x42, 0x03, 0xd0, 0x18, 0x1a, 0x18, 0xbf, 0x01, 0x20, + 0x10, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x03, 0x68, 0x01, 0x33, 0x04, 0xd0, + 0x40, 0x68, 0x43, 0x1c, 0x58, 0x42, 0x58, 0x41, 0x70, 0x47, 0x01, 0x20, + 0x70, 0x47, 0x03, 0x68, 0x1a, 0x6a, 0xc3, 0x6a, 0xd3, 0x1a, 0x19, 0x44, + 0xb1, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x11, 0x03, 0x6b, 0x8b, 0x42, + 0x10, 0xb5, 0x0b, 0xd9, 0x4c, 0x09, 0xc2, 0x6b, 0x01, 0x23, 0x01, 0xf0, + 0x1f, 0x01, 0x03, 0xfa, 0x01, 0xf1, 0x52, 0xf8, 0x24, 0x30, 0x0b, 0x43, + 0x42, 0xf8, 0x24, 0x30, 0x00, 0x20, 0x10, 0xbd, 0x03, 0x68, 0x08, 0x46, + 0x18, 0x47, 0x03, 0x69, 0x10, 0xb5, 0x04, 0x46, 0x13, 0xb1, 0x50, 0xf8, + 0x04, 0x1b, 0x98, 0x47, 0x20, 0x46, 0x10, 0xbd, 0x38, 0xb5, 0x03, 0x68, + 0x04, 0x46, 0x0d, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x23, 0x68, 0x2d, 0x69, + 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, 0x38, 0xbd, 0x38, 0xb5, + 0x03, 0x68, 0x04, 0x46, 0x0d, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x23, 0x68, + 0xed, 0x68, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, 0x38, 0xbd, + 0x38, 0xb5, 0x03, 0x68, 0x04, 0x46, 0x0d, 0x46, 0x9b, 0x6f, 0x98, 0x47, + 0x23, 0x68, 0x6d, 0x69, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, + 0x38, 0xbd, 0x03, 0x68, 0x01, 0x22, 0xd3, 0xf8, 0x80, 0x30, 0x18, 0x47, + 0x08, 0xb5, 0x06, 0x4b, 0x53, 0xf8, 0x20, 0x00, 0x03, 0x68, 0xdb, 0x6a, + 0x98, 0x47, 0x80, 0xb2, 0xb0, 0xf5, 0x00, 0x7f, 0x38, 0xbf, 0x4f, 0xf4, + 0x00, 0x70, 0x08, 0xbd, 0xa8, 0x15, 0x02, 0x24, 0x2d, 0xe9, 0xff, 0x47, + 0x16, 0x46, 0x1c, 0x46, 0x80, 0x46, 0xdf, 0xf8, 0x44, 0x90, 0x03, 0x91, + 0xff, 0xf7, 0xe6, 0xff, 0xa0, 0xfb, 0x06, 0x67, 0xa0, 0xfb, 0x04, 0x45, + 0x59, 0xf8, 0x28, 0x00, 0x32, 0x46, 0x03, 0x68, 0xcd, 0xe9, 0x00, 0x45, + 0xd3, 0xf8, 0x1c, 0xa0, 0x3b, 0x46, 0xd0, 0x47, 0x50, 0xb9, 0x59, 0xf8, + 0x28, 0x00, 0x32, 0x46, 0x03, 0x99, 0x03, 0x68, 0xcd, 0xe9, 0x00, 0x45, + 0x9c, 0x69, 0x3b, 0x46, 0xa0, 0x47, 0x00, 0xb1, 0x04, 0x20, 0x04, 0xb0, + 0xbd, 0xe8, 0xf0, 0x87, 0xa8, 0x15, 0x02, 0x24, 0x7f, 0xb5, 0x16, 0x46, + 0x05, 0x46, 0x1c, 0x46, 0x03, 0x91, 0xff, 0xf7, 0xbf, 0xff, 0x0a, 0x4a, + 0x03, 0x46, 0x03, 0x99, 0x52, 0xf8, 0x25, 0x00, 0xa3, 0xfb, 0x04, 0x45, + 0x02, 0x68, 0xcd, 0xe9, 0x00, 0x45, 0x54, 0x69, 0xa3, 0xfb, 0x06, 0x23, + 0xa0, 0x47, 0x00, 0x28, 0x14, 0xbf, 0x04, 0x20, 0x00, 0x20, 0x04, 0xb0, + 0x70, 0xbd, 0x00, 0xbf, 0xa8, 0x15, 0x02, 0x24, 0x13, 0x28, 0x9a, 0xbf, + 0x01, 0x4b, 0x18, 0x56, 0x40, 0x42, 0x70, 0x47, 0xc1, 0xd9, 0x01, 0x08, + 0x03, 0x28, 0xca, 0x7e, 0x8b, 0x7e, 0x08, 0xbf, 0x48, 0x7d, 0x43, 0xea, + 0x02, 0x23, 0x02, 0xbf, 0x0a, 0x7d, 0x42, 0xea, 0x00, 0x22, 0x43, 0xea, + 0x02, 0x43, 0x18, 0x46, 0x70, 0x47, 0x60, 0xb1, 0x03, 0x68, 0x5b, 0xb1, + 0x1a, 0x78, 0x5a, 0xb1, 0x80, 0x88, 0xda, 0x88, 0x90, 0x42, 0x16, 0xbf, + 0x09, 0x20, 0x00, 0x20, 0x00, 0x23, 0x0b, 0x60, 0x70, 0x47, 0x03, 0x46, + 0x09, 0x20, 0xfa, 0xe7, 0x09, 0x20, 0x13, 0x46, 0xf7, 0xe7, 0x02, 0x68, + 0x10, 0xb5, 0x04, 0x46, 0x5a, 0xb1, 0x11, 0x46, 0x11, 0xf8, 0x01, 0x3b, + 0x20, 0x2b, 0x11, 0xd9, 0x3a, 0x2b, 0xf9, 0xd1, 0x13, 0x78, 0x30, 0x3b, + 0xd8, 0xb2, 0x09, 0x28, 0x02, 0xd9, 0x4f, 0xf0, 0xff, 0x30, 0x06, 0xe0, + 0x02, 0x32, 0x91, 0x42, 0xf9, 0xd1, 0x03, 0x2b, 0x18, 0x46, 0xf6, 0xdc, + 0x21, 0x60, 0x10, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x38, 0xb5, 0xc3, 0x78, + 0x04, 0x46, 0x13, 0xb9, 0x00, 0x25, 0x28, 0x46, 0x38, 0xbd, 0xd0, 0xe9, + 0x0c, 0x21, 0x01, 0x23, 0x40, 0x78, 0xff, 0xf7, 0x63, 0xff, 0x05, 0x46, + 0x80, 0xb9, 0x21, 0x6b, 0x63, 0x6a, 0xe2, 0x69, 0xcb, 0x1a, 0xe0, 0x70, + 0x93, 0x42, 0xed, 0xd2, 0xa3, 0x78, 0x02, 0x2b, 0xea, 0xd1, 0x0a, 0x44, + 0x01, 0x23, 0x61, 0x6b, 0x60, 0x78, 0xff, 0xf7, 0x51, 0xff, 0xe4, 0xe7, + 0x01, 0x25, 0xe2, 0xe7, 0x0b, 0x0a, 0x01, 0x70, 0x43, 0x70, 0x0b, 0x0c, + 0x09, 0x0e, 0x83, 0x70, 0xc1, 0x70, 0x70, 0x47, 0x42, 0x88, 0x43, 0x78, + 0x00, 0x78, 0x43, 0xea, 0x02, 0x23, 0x40, 0xea, 0x03, 0x20, 0x70, 0x47, + 0x00, 0x23, 0x70, 0xb5, 0x1c, 0x46, 0x2e, 0x26, 0xc5, 0x69, 0x2a, 0x5d, + 0x01, 0x34, 0x20, 0x2a, 0x0a, 0xd0, 0x05, 0x2a, 0x08, 0xbf, 0xe5, 0x22, + 0x09, 0x2c, 0x02, 0xbf, 0xcd, 0x18, 0x01, 0x33, 0x6e, 0x72, 0xcd, 0x18, + 0x01, 0x33, 0x6a, 0x72, 0x0b, 0x2c, 0xed, 0xd1, 0x0b, 0x44, 0x00, 0x22, + 0x5a, 0x72, 0xc3, 0x69, 0xdb, 0x7a, 0x03, 0xf0, 0x3f, 0x03, 0x0b, 0x72, + 0xc4, 0x69, 0x04, 0xf1, 0x1c, 0x00, 0xff, 0xf7, 0xd5, 0xff, 0x08, 0x60, + 0xe2, 0x7d, 0xa3, 0x7d, 0x43, 0xea, 0x02, 0x23, 0xcb, 0x80, 0x62, 0x7e, + 0x23, 0x7e, 0x43, 0xea, 0x02, 0x23, 0x8b, 0x80, 0x70, 0xbd, 0x40, 0x68, + 0x03, 0x68, 0x9b, 0x6c, 0x18, 0x47, 0xd0, 0xe9, 0x04, 0x31, 0x10, 0xb5, + 0xd0, 0xe9, 0x08, 0x24, 0xd0, 0x1a, 0x64, 0xeb, 0x01, 0x01, 0x10, 0xbd, + 0x40, 0x68, 0x03, 0x68, 0x5b, 0x6b, 0x18, 0x47, 0x41, 0x68, 0x30, 0xb4, + 0xd0, 0xe9, 0x04, 0x40, 0x0d, 0x68, 0x12, 0x19, 0x2d, 0x6b, 0x40, 0xeb, + 0x03, 0x03, 0x08, 0x46, 0x29, 0x46, 0x30, 0xbc, 0x08, 0x47, 0x41, 0x68, + 0x0b, 0x68, 0x10, 0xb4, 0x1c, 0x6b, 0xd0, 0xe9, 0x04, 0x23, 0x08, 0x46, + 0x21, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x08, 0x47, 0x40, 0x68, 0x03, 0x68, + 0x9b, 0x6a, 0x18, 0x47, 0x40, 0x68, 0x03, 0x68, 0x5b, 0x6a, 0x18, 0x47, + 0x2d, 0xe9, 0xf3, 0x47, 0x05, 0x46, 0x14, 0x46, 0x98, 0x46, 0x40, 0x68, + 0xd5, 0xe9, 0x04, 0x23, 0x01, 0x68, 0xa2, 0x18, 0xdd, 0xe9, 0x0a, 0xa9, + 0x48, 0xeb, 0x03, 0x03, 0xcd, 0xe9, 0x00, 0xa9, 0x49, 0x6c, 0x88, 0x47, + 0x80, 0xb1, 0x14, 0xeb, 0x0a, 0x04, 0xd5, 0xe9, 0x04, 0x32, 0x48, 0xeb, + 0x09, 0x08, 0xe6, 0x18, 0x48, 0xeb, 0x02, 0x07, 0xd5, 0xe9, 0x08, 0x23, + 0xbb, 0x42, 0x08, 0xbf, 0xb2, 0x42, 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, + 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x2d, 0xe9, 0xf3, 0x47, 0x05, 0x46, + 0x14, 0x46, 0x98, 0x46, 0x40, 0x68, 0xd5, 0xe9, 0x04, 0x23, 0x01, 0x68, + 0xa2, 0x18, 0xdd, 0xe9, 0x0a, 0xa9, 0x48, 0xeb, 0x03, 0x03, 0xcd, 0xe9, + 0x00, 0xa9, 0x09, 0x6c, 0x88, 0x47, 0x80, 0xb1, 0x14, 0xeb, 0x0a, 0x04, + 0xd5, 0xe9, 0x04, 0x32, 0x48, 0xeb, 0x09, 0x08, 0xe6, 0x18, 0x48, 0xeb, + 0x02, 0x07, 0xd5, 0xe9, 0x08, 0x23, 0xbb, 0x42, 0x08, 0xbf, 0xb2, 0x42, + 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, + 0x2d, 0xe9, 0xf3, 0x47, 0x05, 0x46, 0x14, 0x46, 0x98, 0x46, 0x40, 0x68, + 0xd5, 0xe9, 0x04, 0x23, 0x01, 0x68, 0xa2, 0x18, 0xdd, 0xe9, 0x0a, 0xa9, + 0x48, 0xeb, 0x03, 0x03, 0xcd, 0xe9, 0x00, 0xa9, 0xc9, 0x6b, 0x88, 0x47, + 0x80, 0xb1, 0x14, 0xeb, 0x0a, 0x04, 0xd5, 0xe9, 0x04, 0x32, 0x48, 0xeb, + 0x09, 0x08, 0xe6, 0x18, 0x48, 0xeb, 0x02, 0x07, 0xd5, 0xe9, 0x08, 0x23, + 0xbb, 0x42, 0x08, 0xbf, 0xb2, 0x42, 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, + 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x2d, 0xe9, 0xf3, 0x41, 0xdd, 0xe9, + 0x08, 0x67, 0x01, 0x68, 0x04, 0x46, 0x15, 0x46, 0x98, 0x46, 0xcd, 0xe9, + 0x00, 0x67, 0x49, 0x6c, 0x88, 0x47, 0x68, 0xb1, 0x60, 0x68, 0xd4, 0xe9, + 0x04, 0x23, 0x01, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x08, 0x67, 0x48, 0xeb, + 0x03, 0x03, 0xc9, 0x69, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, 0x08, 0x47, + 0x6f, 0xf4, 0x7a, 0x60, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x2d, 0xe9, + 0xf0, 0x43, 0x85, 0xb0, 0x04, 0x46, 0x15, 0x46, 0x98, 0x46, 0x03, 0x91, + 0xdd, 0xe9, 0x0c, 0x67, 0xcd, 0xe9, 0x00, 0x67, 0x01, 0x68, 0xd1, 0xf8, + 0x40, 0x90, 0xc8, 0x47, 0x78, 0xb1, 0x60, 0x68, 0x03, 0x99, 0xd4, 0xe9, + 0x04, 0x23, 0x04, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x0c, 0x67, 0xa4, 0x69, + 0x48, 0xeb, 0x03, 0x03, 0xa4, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, + 0x60, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, + 0x2d, 0xe9, 0xf0, 0x43, 0x85, 0xb0, 0x04, 0x46, 0x15, 0x46, 0x98, 0x46, + 0x03, 0x91, 0xdd, 0xe9, 0x0c, 0x67, 0xcd, 0xe9, 0x00, 0x67, 0x01, 0x68, + 0xd1, 0xf8, 0x3c, 0x90, 0xc8, 0x47, 0x78, 0xb1, 0x60, 0x68, 0x03, 0x99, + 0xd4, 0xe9, 0x04, 0x23, 0x04, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x0c, 0x67, + 0x64, 0x69, 0x48, 0xeb, 0x03, 0x03, 0xa4, 0x46, 0x05, 0xb0, 0xbd, 0xe8, + 0xf0, 0x43, 0x60, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xbd, 0xe8, + 0xf0, 0x83, 0x40, 0x68, 0x03, 0x68, 0x1b, 0x69, 0x18, 0x47, 0x40, 0x68, + 0x03, 0x68, 0xdb, 0x68, 0x18, 0x47, 0x73, 0xb5, 0x04, 0x46, 0x40, 0x68, + 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x05, 0x46, 0x58, 0xbb, 0x60, 0x68, + 0x03, 0x68, 0x9b, 0x6b, 0x98, 0x47, 0x23, 0x7a, 0x3b, 0xb1, 0x25, 0x72, + 0xd4, 0xe9, 0x04, 0x32, 0xc3, 0x1a, 0x61, 0xeb, 0x02, 0x02, 0xc4, 0xe9, + 0x04, 0x32, 0x23, 0x7e, 0x43, 0xb1, 0x00, 0x26, 0xd4, 0xe9, 0x08, 0x32, + 0x26, 0x76, 0xc3, 0x1a, 0x61, 0xeb, 0x02, 0x01, 0xc4, 0xe9, 0x08, 0x31, + 0xd4, 0xe9, 0x04, 0x16, 0xd4, 0xe9, 0x08, 0x32, 0x20, 0x68, 0x5b, 0x1a, + 0x62, 0xeb, 0x06, 0x02, 0xcd, 0xe9, 0x00, 0x32, 0x00, 0x22, 0x41, 0x6c, + 0x00, 0x23, 0x20, 0x46, 0x88, 0x47, 0x00, 0x28, 0x08, 0xbf, 0x6f, 0xf4, + 0x7a, 0x65, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, 0x70, 0x47, 0x40, 0x68, + 0x10, 0xb1, 0x03, 0x68, 0x9b, 0x6c, 0x18, 0x47, 0x70, 0x47, 0x40, 0x7e, + 0x70, 0x47, 0x00, 0x7e, 0x70, 0x47, 0xd0, 0xe9, 0x04, 0x21, 0x10, 0xb5, + 0xd0, 0xe9, 0x02, 0x34, 0x98, 0x18, 0x44, 0xeb, 0x01, 0x01, 0x10, 0xbd, + 0xd0, 0xe9, 0x02, 0x01, 0x70, 0x47, 0xd0, 0xe9, 0x04, 0x01, 0x70, 0x47, + 0x90, 0xf8, 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, 0x03, 0x68, 0x5b, 0x6b, + 0x18, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x70, 0x47, 0x90, 0xf8, 0x20, 0x10, + 0x30, 0xb4, 0x59, 0xb1, 0xd0, 0xe9, 0x01, 0x14, 0xc0, 0x68, 0x0d, 0x68, + 0x12, 0x19, 0x2d, 0x6b, 0x40, 0xeb, 0x03, 0x03, 0x08, 0x46, 0x29, 0x46, + 0x30, 0xbc, 0x08, 0x47, 0x00, 0x20, 0x00, 0x21, 0x30, 0xbc, 0x70, 0x47, + 0x90, 0xf8, 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, 0x03, 0x68, 0xdb, 0x6a, + 0x18, 0x47, 0x00, 0x20, 0x00, 0x21, 0x70, 0x47, 0x90, 0xf8, 0x20, 0x30, + 0x1b, 0xb1, 0x40, 0x68, 0x03, 0x68, 0x9b, 0x6a, 0x18, 0x47, 0x00, 0x20, + 0x00, 0x21, 0x70, 0x47, 0x90, 0xf8, 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, + 0x03, 0x68, 0x5b, 0x6a, 0x18, 0x47, 0x00, 0x20, 0x00, 0x21, 0x70, 0x47, + 0x2d, 0xe9, 0xf3, 0x41, 0x90, 0xf8, 0x20, 0x10, 0x04, 0x46, 0x15, 0x46, + 0x98, 0x46, 0xdd, 0xe9, 0x08, 0x67, 0x99, 0xb1, 0x01, 0x68, 0xcd, 0xe9, + 0x00, 0x67, 0x49, 0x6c, 0x88, 0x47, 0x68, 0xb1, 0xe3, 0x68, 0xd4, 0xe9, + 0x01, 0x02, 0x01, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x08, 0x67, 0x48, 0xeb, + 0x03, 0x03, 0xc9, 0x69, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, 0x08, 0x47, + 0x6f, 0xf4, 0x7a, 0x60, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x2d, 0xe9, + 0xf0, 0x43, 0x90, 0xf8, 0x20, 0xc0, 0x85, 0xb0, 0x04, 0x46, 0x15, 0x46, + 0x98, 0x46, 0x03, 0x91, 0xdd, 0xe9, 0x0c, 0x67, 0xbc, 0xf1, 0x00, 0x0f, + 0x16, 0xd0, 0xcd, 0xe9, 0x00, 0x67, 0x01, 0x68, 0xd1, 0xf8, 0x40, 0x90, + 0xc8, 0x47, 0x78, 0xb1, 0xe3, 0x68, 0x03, 0x99, 0xd4, 0xe9, 0x01, 0x02, + 0x04, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x0c, 0x67, 0xa4, 0x69, 0x48, 0xeb, + 0x03, 0x03, 0xa4, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, 0x60, 0x47, + 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x2d, 0xe9, + 0xf0, 0x43, 0x90, 0xf8, 0x20, 0xc0, 0x85, 0xb0, 0x04, 0x46, 0x15, 0x46, + 0x98, 0x46, 0x03, 0x91, 0xdd, 0xe9, 0x0c, 0x67, 0xbc, 0xf1, 0x00, 0x0f, + 0x16, 0xd0, 0xcd, 0xe9, 0x00, 0x67, 0x01, 0x68, 0xd1, 0xf8, 0x3c, 0x90, + 0xc8, 0x47, 0x78, 0xb1, 0xe3, 0x68, 0x03, 0x99, 0xd4, 0xe9, 0x01, 0x02, + 0x04, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x0c, 0x67, 0x64, 0x69, 0x48, 0xeb, + 0x03, 0x03, 0xa4, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, 0x60, 0x47, + 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x90, 0xf8, + 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, 0x03, 0x68, 0x1b, 0x69, 0x18, 0x47, + 0x6f, 0xf4, 0x7a, 0x60, 0x70, 0x47, 0x2d, 0xe9, 0xf0, 0x47, 0xd0, 0xe9, + 0x01, 0x14, 0x05, 0x68, 0x4f, 0xea, 0x64, 0x0a, 0x9d, 0xf8, 0x20, 0xc0, + 0x05, 0xeb, 0x64, 0x00, 0xe4, 0x07, 0x9d, 0xf8, 0x24, 0xe0, 0x48, 0xbf, + 0x55, 0xf8, 0x0a, 0x40, 0x9d, 0xf8, 0x28, 0x80, 0xdd, 0xf8, 0x2c, 0x90, + 0x48, 0xbf, 0x61, 0x58, 0xdd, 0xe9, 0x0c, 0x67, 0xcd, 0xe9, 0x0a, 0x89, + 0xcd, 0xe9, 0x0c, 0x67, 0xcd, 0xe9, 0x08, 0xce, 0xbd, 0xe8, 0xf0, 0x47, + 0x08, 0x47, 0xff, 0x20, 0x70, 0x47, 0xd0, 0xe9, 0x44, 0x01, 0x70, 0x47, + 0xf0, 0xb5, 0x1f, 0x46, 0xd0, 0xf8, 0x18, 0x31, 0x16, 0x46, 0x01, 0x33, + 0x2d, 0xd1, 0xd0, 0xf8, 0x60, 0x21, 0xd0, 0xe9, 0x44, 0x45, 0xaf, 0x42, + 0x08, 0xbf, 0xa6, 0x42, 0x1c, 0xd2, 0xd0, 0xf8, 0x28, 0x11, 0xc9, 0xb1, + 0x01, 0x29, 0x0c, 0xd0, 0x00, 0xf5, 0xb4, 0x7c, 0x00, 0x23, 0x99, 0x42, + 0x12, 0xdd, 0xfc, 0xe8, 0x02, 0x45, 0xbd, 0x42, 0x08, 0xbf, 0xb4, 0x42, + 0x02, 0xd2, 0x01, 0x33, 0xf5, 0xe7, 0x00, 0x23, 0x03, 0x44, 0x01, 0x21, + 0x93, 0xf8, 0x54, 0x41, 0x00, 0x23, 0x0c, 0x42, 0x05, 0xd0, 0x72, 0x33, + 0x50, 0xf8, 0x23, 0x20, 0x10, 0x46, 0xd1, 0x17, 0xf0, 0xbd, 0x01, 0x33, + 0x49, 0x00, 0x04, 0x2b, 0x49, 0xb2, 0xf2, 0xd1, 0xf6, 0xe7, 0x4f, 0xf4, + 0x80, 0x50, 0x00, 0x21, 0xf4, 0xe7, 0x00, 0x00, 0x00, 0x48, 0x70, 0x47, + 0x84, 0xd9, 0x01, 0x08, 0xd0, 0xf8, 0x60, 0x01, 0x00, 0x21, 0x70, 0x47, + 0x01, 0x20, 0x00, 0x21, 0x70, 0x47, 0x2d, 0xe9, 0xf7, 0x4f, 0x16, 0x46, + 0x01, 0x68, 0x02, 0x69, 0x05, 0x46, 0x00, 0x93, 0x01, 0x92, 0x89, 0x6b, + 0x47, 0x69, 0xdd, 0xe9, 0x0c, 0xab, 0x16, 0xeb, 0x0a, 0x08, 0x43, 0xeb, + 0x0b, 0x09, 0x88, 0x47, 0x49, 0x45, 0x08, 0xbf, 0x40, 0x45, 0xdd, 0xe9, + 0x00, 0x32, 0x03, 0xd2, 0x00, 0x20, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, + 0x16, 0xf1, 0x78, 0x44, 0x28, 0x46, 0x43, 0xf1, 0xff, 0x31, 0xa4, 0x18, + 0x2a, 0x68, 0x41, 0xeb, 0x07, 0x07, 0x11, 0x6b, 0x32, 0x46, 0x88, 0x47, + 0x02, 0x46, 0x0b, 0x46, 0x20, 0x46, 0x39, 0x46, 0x14, 0xf0, 0xf2, 0xfe, + 0x13, 0x43, 0xe7, 0xd1, 0x14, 0xeb, 0x0a, 0x04, 0x2b, 0x68, 0x28, 0x46, + 0x47, 0xeb, 0x0b, 0x07, 0x18, 0xf1, 0xff, 0x32, 0x19, 0x6b, 0x49, 0xf1, + 0xff, 0x33, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x20, 0x46, 0x39, 0x46, + 0x14, 0xf0, 0xde, 0xfe, 0x13, 0x43, 0x0c, 0xbf, 0x01, 0x20, 0x00, 0x20, + 0xd1, 0xe7, 0x00, 0x00, 0x00, 0x48, 0x70, 0x47, 0x8a, 0xd9, 0x01, 0x08, + 0xd0, 0xe9, 0x06, 0x01, 0x70, 0x47, 0x90, 0xf8, 0x20, 0x30, 0x00, 0x2b, + 0x0c, 0xbf, 0x4f, 0xf0, 0xff, 0x30, 0xff, 0x20, 0x70, 0x47, 0x90, 0xf8, + 0x20, 0x30, 0x13, 0xb1, 0x20, 0x20, 0x00, 0x21, 0x70, 0x47, 0x00, 0x20, + 0xfb, 0xe7, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xcd, 0xfa, 0x20, 0x46, + 0x12, 0xf0, 0x78, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, + 0xff, 0xf7, 0x22, 0xfb, 0x20, 0x46, 0x12, 0xf0, 0x6f, 0xff, 0x20, 0x46, + 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xaf, 0xfa, 0x20, 0x46, + 0x12, 0xf0, 0x66, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, + 0xff, 0xf7, 0x04, 0xfb, 0x20, 0x46, 0x12, 0xf0, 0x5d, 0xff, 0x20, 0x46, + 0x10, 0xbd, 0x03, 0x68, 0x9b, 0x6a, 0x10, 0xb5, 0x04, 0x46, 0x13, 0xb9, + 0xc0, 0x69, 0x12, 0xf0, 0x53, 0xff, 0x23, 0x68, 0xdb, 0x6a, 0x13, 0xb9, + 0xa0, 0x6a, 0x12, 0xf0, 0x4d, 0xff, 0x23, 0x68, 0x1b, 0x6b, 0x23, 0xb9, + 0xe0, 0x6b, 0xbd, 0xe8, 0x10, 0x40, 0x12, 0xf0, 0x45, 0xbf, 0x10, 0xbd, + 0x03, 0x68, 0x73, 0xb5, 0x0c, 0x46, 0x9b, 0x6f, 0x06, 0x46, 0x98, 0x47, + 0x01, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0x39, 0xfc, 0x05, 0x46, 0x00, 0xb9, + 0x20, 0x60, 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x14, 0xb1, + 0x20, 0x46, 0x12, 0xf0, 0x2f, 0xff, 0x28, 0x46, 0x02, 0xb0, 0xbd, 0xe8, + 0x70, 0x40, 0xff, 0xf7, 0x11, 0xbc, 0x08, 0xb1, 0x12, 0xf0, 0x26, 0xbf, + 0x70, 0x47, 0x10, 0xb5, 0x04, 0x46, 0x12, 0xf0, 0x21, 0xff, 0x20, 0x46, + 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0x12, 0xf0, 0x1b, 0xff, 0x20, 0x46, + 0x10, 0xbd, 0x0b, 0x46, 0x40, 0xf2, 0x01, 0x12, 0x00, 0x21, 0x70, 0xb5, + 0x04, 0x46, 0x18, 0x46, 0x12, 0xf0, 0x76, 0xff, 0x03, 0x46, 0x60, 0x68, + 0xa1, 0x68, 0x02, 0x68, 0x55, 0x6e, 0x1a, 0x46, 0x2b, 0x46, 0xbd, 0xe8, + 0x70, 0x40, 0x18, 0x47, 0x10, 0xb5, 0x0c, 0x46, 0x82, 0x69, 0xff, 0x21, + 0xa0, 0x68, 0x12, 0xf0, 0x65, 0xff, 0x4f, 0xf0, 0xff, 0x33, 0x23, 0x60, + 0x10, 0xbd, 0xf7, 0xb5, 0x0c, 0x46, 0x09, 0x68, 0x06, 0x46, 0x17, 0x46, + 0x4b, 0x1c, 0x21, 0xd0, 0x00, 0x68, 0x83, 0x69, 0x00, 0x93, 0x85, 0x68, + 0xd4, 0xe9, 0x01, 0x23, 0xa8, 0x47, 0x05, 0x46, 0x20, 0xb9, 0x37, 0xb9, + 0x21, 0x46, 0x30, 0x68, 0xff, 0xf7, 0xe0, 0xff, 0x28, 0x46, 0x03, 0xb0, + 0xf0, 0xbd, 0x33, 0x68, 0x39, 0x46, 0x30, 0x46, 0x9b, 0x69, 0x01, 0x93, + 0xa3, 0x68, 0x00, 0x93, 0xd4, 0xe9, 0x00, 0x23, 0xf9, 0xf7, 0xa9, 0xff, + 0x00, 0x28, 0x05, 0xdb, 0xea, 0xd1, 0x6f, 0xf0, 0x33, 0x05, 0xeb, 0xe7, + 0x00, 0x25, 0xe9, 0xe7, 0x05, 0x46, 0xe7, 0xe7, 0x2d, 0xe9, 0xf7, 0x4f, + 0x0c, 0x9c, 0x07, 0x46, 0x0d, 0x46, 0x91, 0x46, 0x98, 0x46, 0xdd, 0xf8, + 0x38, 0xa0, 0xba, 0xf1, 0x00, 0x0f, 0x03, 0xd1, 0x50, 0x46, 0x03, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0x2b, 0x68, 0x38, 0x68, 0x43, 0x45, 0x82, 0x69, + 0x28, 0xd1, 0x6b, 0x68, 0xa3, 0x42, 0x25, 0xd8, 0x03, 0xeb, 0x02, 0x0b, + 0xa3, 0x45, 0x21, 0xd9, 0xab, 0xeb, 0x04, 0x0b, 0xe0, 0x1a, 0xab, 0x68, + 0xd3, 0x45, 0x0d, 0x99, 0x18, 0x44, 0x28, 0xbf, 0xd3, 0x46, 0x5a, 0x46, + 0x5c, 0x44, 0x12, 0xf0, 0xfd, 0xfe, 0x0d, 0x9b, 0x5b, 0x44, 0xaa, 0xeb, + 0x0b, 0x0b, 0x0d, 0x93, 0x3b, 0x68, 0x9a, 0x69, 0xb4, 0xfb, 0xf2, 0xf3, + 0x02, 0xfb, 0x13, 0x43, 0x33, 0xb9, 0x4a, 0x46, 0x29, 0x46, 0x38, 0x46, + 0xff, 0xf7, 0x99, 0xff, 0x00, 0x28, 0xd0, 0xd1, 0xda, 0x46, 0xca, 0xe7, + 0xb4, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x43, 0x4b, 0xbb, 0x92, 0x45, + 0x27, 0xd3, 0x41, 0x46, 0xba, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0xab, + 0x22, 0x46, 0xaa, 0xeb, 0x0b, 0x0a, 0xcd, 0xf8, 0x00, 0xa0, 0x83, 0x68, + 0x1e, 0x46, 0x0d, 0x9b, 0xb0, 0x47, 0x00, 0x28, 0xb7, 0xd1, 0xb9, 0xf1, + 0x00, 0x0f, 0x04, 0xd1, 0x0d, 0x9b, 0x54, 0x44, 0x53, 0x44, 0x0d, 0x93, + 0xde, 0xe7, 0x0d, 0x9b, 0x42, 0x46, 0x49, 0x46, 0x38, 0x46, 0x00, 0x93, + 0x23, 0x46, 0xcd, 0xf8, 0x04, 0xa0, 0xf9, 0xf7, 0x38, 0xff, 0x00, 0x28, + 0xa3, 0xdb, 0xed, 0xd1, 0x6f, 0xf0, 0x33, 0x00, 0x9f, 0xe7, 0xe3, 0x1a, + 0xd3, 0x46, 0xc5, 0xf8, 0x00, 0x80, 0x6b, 0x60, 0xc8, 0xe7, 0x00, 0x00, + 0x70, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x86, 0xfb, 0x05, 0x46, 0x00, 0x28, + 0x3f, 0xd1, 0x23, 0x78, 0x03, 0x2b, 0x35, 0xd1, 0x26, 0x79, 0x01, 0x2e, + 0x32, 0xd1, 0x01, 0x46, 0xa2, 0x89, 0x60, 0x6b, 0x12, 0xf0, 0xae, 0xfe, + 0x63, 0x6b, 0x55, 0x22, 0x41, 0x21, 0x72, 0x20, 0x83, 0xf8, 0xfe, 0x21, + 0xaa, 0x22, 0x83, 0xf8, 0xff, 0x21, 0x52, 0x23, 0x62, 0x6b, 0x13, 0x70, + 0x53, 0x70, 0x61, 0x23, 0xd1, 0x70, 0x93, 0x70, 0x62, 0x6b, 0x82, 0xf8, + 0xe7, 0x31, 0x82, 0xf8, 0xe4, 0x01, 0x82, 0xf8, 0xe5, 0x01, 0x82, 0xf8, + 0xe6, 0x11, 0x60, 0x6b, 0x61, 0x69, 0x00, 0xf5, 0xf4, 0x70, 0xff, 0xf7, + 0x7b, 0xfb, 0x60, 0x6b, 0x21, 0x69, 0x00, 0xf5, 0xf6, 0x70, 0xff, 0xf7, + 0x75, 0xfb, 0x22, 0x6a, 0x33, 0x46, 0x61, 0x6b, 0x01, 0x32, 0x60, 0x78, + 0x22, 0x63, 0xff, 0xf7, 0xbb, 0xfa, 0x25, 0x71, 0x62, 0x78, 0x03, 0x4b, + 0x53, 0xf8, 0x22, 0x00, 0xb0, 0xfa, 0x80, 0xf0, 0x40, 0x09, 0x70, 0xbd, + 0xa8, 0x15, 0x02, 0x24, 0x90, 0xf8, 0x20, 0x30, 0x10, 0xb5, 0x04, 0x46, + 0x5b, 0xb1, 0x1c, 0x30, 0xf9, 0xf7, 0x1c, 0xfe, 0x38, 0xb9, 0x84, 0xf8, + 0x20, 0x00, 0x60, 0x68, 0x03, 0x68, 0xbd, 0xe8, 0x10, 0x40, 0xdb, 0x68, + 0x18, 0x47, 0x00, 0x20, 0x10, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, 0x89, 0xb0, + 0x90, 0x46, 0x99, 0x46, 0x05, 0x46, 0x9d, 0xf8, 0x48, 0x20, 0xc3, 0x46, + 0x9d, 0xf8, 0x50, 0x30, 0x90, 0xf8, 0xfa, 0x71, 0xdd, 0xe9, 0x15, 0x61, + 0x05, 0x91, 0x03, 0x2a, 0x57, 0xd8, 0xdf, 0xe8, 0x02, 0xf0, 0x1b, 0x02, + 0x19, 0x03, 0x02, 0x27, 0x0f, 0x2b, 0x4f, 0xf0, 0x00, 0x02, 0x05, 0xf1, + 0x04, 0x0a, 0x08, 0xbf, 0x95, 0xf8, 0xfd, 0x31, 0x11, 0x46, 0x50, 0x46, + 0x00, 0x92, 0x03, 0x93, 0x3b, 0x46, 0xcd, 0xe9, 0x01, 0x22, 0x07, 0xf0, + 0x91, 0xf8, 0x04, 0x46, 0x38, 0xb1, 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, + 0x03, 0x27, 0xe7, 0xe7, 0x4f, 0xf0, 0xff, 0x3b, 0xe4, 0xe7, 0x05, 0x9b, + 0x4f, 0xf0, 0xff, 0x32, 0x9d, 0xf8, 0x4c, 0x10, 0x50, 0x46, 0x07, 0x93, + 0x07, 0xab, 0xcd, 0xe9, 0x00, 0x63, 0x5b, 0x46, 0xfc, 0xf7, 0x22, 0xfa, + 0x3b, 0x46, 0x83, 0x46, 0x22, 0x46, 0x21, 0x46, 0x50, 0x46, 0xcd, 0xe9, + 0x02, 0x44, 0xcd, 0xe9, 0x00, 0x44, 0x07, 0xf0, 0x6f, 0xf8, 0x00, 0x28, + 0xdd, 0xd1, 0xbb, 0xf1, 0x00, 0x0f, 0x01, 0xd0, 0x58, 0x46, 0xd8, 0xe7, + 0x95, 0xf8, 0x01, 0x01, 0x00, 0x28, 0xd4, 0xd0, 0xb9, 0xf1, 0x00, 0x0f, + 0x08, 0xbf, 0xb8, 0xf1, 0x04, 0x0f, 0x04, 0xd1, 0x33, 0x78, 0x43, 0xf0, + 0x0a, 0x03, 0x33, 0x70, 0xee, 0xe7, 0xb9, 0xf1, 0x00, 0x0f, 0x08, 0xbf, + 0xb8, 0xf1, 0x02, 0x0f, 0xe8, 0xd1, 0x33, 0x78, 0x23, 0xf0, 0x04, 0x03, + 0xf3, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0xbc, 0xe7, 0x08, 0xb5, 0x90, 0xf8, + 0x20, 0x30, 0x2b, 0xb1, 0x00, 0x69, 0x10, 0x44, 0xf9, 0xf7, 0x5a, 0xfc, + 0x00, 0x21, 0x08, 0xbd, 0x18, 0x46, 0xfb, 0xe7, 0x08, 0xb5, 0x90, 0xf8, + 0x20, 0x30, 0x23, 0xb1, 0x00, 0x69, 0xf9, 0xf7, 0x4f, 0xfc, 0x00, 0x21, + 0x08, 0xbd, 0x18, 0x46, 0xfb, 0xe7, 0xf7, 0xb5, 0x90, 0xf8, 0x20, 0x10, + 0x04, 0x46, 0x15, 0x46, 0xdd, 0xe9, 0x08, 0x67, 0x71, 0xb1, 0x01, 0x68, + 0xcd, 0xe9, 0x00, 0x67, 0x49, 0x6c, 0x88, 0x47, 0x40, 0xb1, 0x21, 0x69, + 0x32, 0x46, 0x20, 0x1d, 0x29, 0x44, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, + 0x07, 0xf0, 0xc4, 0xb8, 0x6f, 0xf4, 0x7a, 0x60, 0x03, 0xb0, 0xf0, 0xbd, + 0xf0, 0xb5, 0x90, 0xf8, 0x20, 0x70, 0x85, 0xb0, 0x04, 0x46, 0x15, 0x46, + 0x03, 0x91, 0xdd, 0xe9, 0x0a, 0x6c, 0x7f, 0xb1, 0x07, 0x68, 0xcd, 0xe9, + 0x00, 0x6c, 0x3f, 0x6c, 0xb8, 0x47, 0x48, 0xb1, 0x22, 0x69, 0x33, 0x46, + 0x03, 0x99, 0x20, 0x1d, 0x2a, 0x44, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, + 0x07, 0xf0, 0xf2, 0xb9, 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xf0, 0xbd, + 0x90, 0xf8, 0x20, 0x30, 0x10, 0xb5, 0x04, 0x46, 0x13, 0xb9, 0x43, 0x62, + 0x00, 0x20, 0x10, 0xbd, 0x24, 0x30, 0xf9, 0xf7, 0x49, 0xfd, 0x00, 0x28, + 0xf8, 0xd1, 0x84, 0xf8, 0x20, 0x00, 0x20, 0x1d, 0xbd, 0xe8, 0x10, 0x40, + 0x07, 0xf0, 0x1e, 0xbb, 0x90, 0xf8, 0x20, 0x30, 0x2d, 0xe9, 0xf0, 0x4f, + 0x81, 0x46, 0x85, 0xb0, 0x03, 0xb9, 0x43, 0x62, 0x09, 0xf1, 0x24, 0x06, + 0x56, 0xe8, 0x00, 0x0f, 0x01, 0x30, 0x46, 0xe8, 0x00, 0x03, 0x00, 0x2b, + 0xf8, 0xd1, 0x01, 0x28, 0x43, 0xd1, 0x09, 0xf1, 0x04, 0x00, 0x07, 0xf0, + 0x23, 0xfb, 0x80, 0x46, 0x30, 0xb1, 0x30, 0x46, 0xf9, 0xf7, 0x24, 0xfd, + 0x40, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xd9, 0xe9, 0x06, 0xab, + 0xd9, 0xe9, 0x04, 0x45, 0x1a, 0xeb, 0x04, 0x03, 0x00, 0x93, 0x4b, 0xeb, + 0x05, 0x03, 0x01, 0x93, 0xf9, 0xf7, 0xf2, 0xfb, 0x00, 0x23, 0x00, 0xf1, + 0x00, 0x6c, 0x86, 0x46, 0xdd, 0xe9, 0x00, 0x01, 0x8b, 0x42, 0x08, 0xbf, + 0x84, 0x45, 0x05, 0xd2, 0x30, 0x46, 0x6f, 0xf4, 0x7a, 0x68, 0xf9, 0xf7, + 0x05, 0xfd, 0xdf, 0xe7, 0x00, 0x2d, 0x08, 0xbf, 0xb4, 0xf1, 0x00, 0x6f, + 0xf4, 0xd3, 0x5a, 0xea, 0x0b, 0x03, 0x0e, 0xd1, 0x4f, 0xf0, 0x00, 0x61, + 0x0b, 0x1b, 0x02, 0x93, 0x65, 0xeb, 0x45, 0x03, 0x03, 0x93, 0xdd, 0xe9, + 0x02, 0x67, 0x16, 0xeb, 0x0e, 0x06, 0x47, 0xf1, 0x00, 0x07, 0xc9, 0xe9, + 0x06, 0x67, 0x01, 0x21, 0x89, 0xf8, 0x20, 0x10, 0xc4, 0xe7, 0x98, 0x46, + 0xc2, 0xe7, 0x70, 0xb5, 0x14, 0x46, 0x6f, 0xf0, 0x00, 0x46, 0x12, 0x68, + 0x05, 0x46, 0x04, 0x98, 0xb2, 0x42, 0x07, 0xd2, 0x38, 0xb1, 0x01, 0x46, + 0x18, 0x46, 0x14, 0xf0, 0x0f, 0xf8, 0x43, 0x1c, 0x05, 0xd1, 0x20, 0x60, + 0x70, 0xbd, 0x15, 0xb1, 0x8a, 0x42, 0x38, 0xbf, 0xab, 0x54, 0x23, 0x68, + 0x01, 0x33, 0x23, 0x60, 0xf6, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4f, + 0x89, 0xb0, 0x00, 0x24, 0x05, 0x46, 0x9d, 0xf8, 0x50, 0xa0, 0x9d, 0xf8, + 0x48, 0x00, 0xa2, 0x45, 0xdd, 0xf8, 0x54, 0x80, 0x07, 0x94, 0x14, 0xbf, + 0x4f, 0xf0, 0x30, 0x0b, 0x4f, 0xf0, 0x20, 0x0b, 0x01, 0x28, 0xcd, 0xe9, + 0x05, 0x44, 0x3f, 0xd1, 0xa3, 0x42, 0x3d, 0xda, 0x5b, 0x42, 0x81, 0x46, + 0x84, 0x1e, 0x00, 0x27, 0x0d, 0xf1, 0x14, 0x0c, 0x4f, 0xf0, 0x0a, 0x0e, + 0xe4, 0xb2, 0x02, 0x94, 0x02, 0x9c, 0x01, 0x2c, 0x56, 0xd8, 0x02, 0x28, + 0x03, 0xf0, 0x0f, 0x04, 0x4f, 0xea, 0x13, 0x13, 0x0c, 0xbf, 0x33, 0x4e, + 0x33, 0x4e, 0x34, 0x5d, 0x0c, 0xf8, 0x07, 0x40, 0x7c, 0x1c, 0x00, 0x2b, + 0x46, 0xd1, 0xb9, 0xf1, 0x00, 0x0f, 0x27, 0xd0, 0xba, 0xf1, 0x00, 0x0f, + 0x09, 0xd0, 0x2d, 0x23, 0x28, 0x46, 0xcd, 0xf8, 0x00, 0x80, 0xcd, 0xe9, + 0x02, 0x12, 0xff, 0xf7, 0xa4, 0xff, 0xdd, 0xe9, 0x02, 0x12, 0xbc, 0x1c, + 0x13, 0x9b, 0x9c, 0x42, 0x1b, 0xdb, 0xba, 0xf1, 0x00, 0x0f, 0x09, 0xd1, + 0x2d, 0x23, 0x28, 0x46, 0xcd, 0xf8, 0x00, 0x80, 0xcd, 0xe9, 0x02, 0x12, + 0xff, 0xf7, 0x93, 0xff, 0xdd, 0xe9, 0x02, 0x12, 0x01, 0x3c, 0x1e, 0xe0, + 0x13, 0xb1, 0x4f, 0xf0, 0x00, 0x09, 0xbf, 0xe7, 0x30, 0x23, 0x01, 0x24, + 0x8d, 0xf8, 0x14, 0x30, 0x13, 0x9b, 0x9c, 0x42, 0x13, 0xda, 0x4f, 0xf0, + 0x00, 0x09, 0x5b, 0x46, 0x28, 0x46, 0xcd, 0xf8, 0x00, 0x80, 0xcd, 0xe9, + 0x02, 0x12, 0xff, 0xf7, 0x7a, 0xff, 0x13, 0x9b, 0x01, 0x3b, 0xa3, 0x42, + 0x13, 0x93, 0xdd, 0xe9, 0x02, 0x12, 0xf0, 0xdc, 0xb9, 0xf1, 0x00, 0x0f, + 0xd1, 0xd1, 0x05, 0xae, 0x6c, 0xb9, 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, + 0x27, 0x46, 0xa5, 0xe7, 0xb3, 0xfb, 0xfe, 0xf4, 0x0e, 0xfb, 0x14, 0x33, + 0x30, 0x33, 0x0c, 0xf8, 0x07, 0x30, 0x23, 0x46, 0xaa, 0xe7, 0x01, 0x3c, + 0xcd, 0xf8, 0x00, 0x80, 0x28, 0x46, 0x33, 0x5d, 0xcd, 0xe9, 0x02, 0x12, + 0xff, 0xf7, 0x57, 0xff, 0xdd, 0xe9, 0x02, 0x12, 0xe4, 0xe7, 0x00, 0xbf, + 0xec, 0xdb, 0x01, 0x08, 0xfc, 0xdb, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, + 0x1c, 0x46, 0x89, 0xb0, 0x00, 0x23, 0x89, 0x46, 0x12, 0x9e, 0x15, 0x46, + 0x07, 0x93, 0xb2, 0xb1, 0x99, 0x42, 0x14, 0xdb, 0x0c, 0xbf, 0x01, 0x23, + 0x01, 0xf1, 0xff, 0x39, 0x4f, 0xf0, 0x00, 0x0b, 0x04, 0x93, 0x15, 0xf8, + 0x0b, 0x30, 0x73, 0xb9, 0x48, 0xb1, 0x04, 0x9b, 0x3b, 0xb9, 0x07, 0x9b, + 0x4b, 0x45, 0x95, 0xbf, 0x04, 0x9a, 0x04, 0x9b, 0xc2, 0x54, 0x00, 0xf8, + 0x09, 0x30, 0x07, 0x98, 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x25, 0x2b, + 0x40, 0xf0, 0x02, 0x81, 0x0b, 0xf1, 0x01, 0x08, 0x15, 0xf8, 0x08, 0x30, + 0x20, 0x3b, 0xdb, 0xb2, 0x0d, 0x2b, 0x07, 0xd8, 0x42, 0xf6, 0x09, 0x02, + 0x22, 0xfa, 0x03, 0xf3, 0xdb, 0x07, 0x48, 0xbf, 0x0b, 0xf1, 0x02, 0x08, + 0x15, 0xf8, 0x08, 0x30, 0x2a, 0x2b, 0x1d, 0xd1, 0x00, 0x21, 0x08, 0xf1, + 0x01, 0x02, 0x04, 0x34, 0x8e, 0x46, 0xaf, 0x5c, 0xab, 0x18, 0x2e, 0x2f, + 0x51, 0xd1, 0x5f, 0x78, 0x2a, 0x2f, 0x2c, 0xd0, 0x4f, 0xf0, 0x00, 0x0a, + 0xc5, 0xf1, 0x01, 0x0c, 0x0c, 0xeb, 0x03, 0x02, 0x13, 0xf8, 0x01, 0x7f, + 0x30, 0x3f, 0x5f, 0xfa, 0x87, 0xf8, 0xb8, 0xf1, 0x09, 0x0f, 0x21, 0xd8, + 0x0a, 0x22, 0x02, 0xfb, 0x0a, 0x7a, 0xf1, 0xe7, 0x30, 0x2b, 0x15, 0xd1, + 0x08, 0xf1, 0x01, 0x08, 0x15, 0xf8, 0x08, 0x30, 0x30, 0x2b, 0xf9, 0xd0, + 0x4f, 0xf0, 0x01, 0x0e, 0xa8, 0x44, 0x00, 0x21, 0xa8, 0xeb, 0x05, 0x02, + 0x18, 0xf8, 0x01, 0x3b, 0x30, 0x3b, 0xdf, 0xb2, 0x09, 0x2f, 0xd2, 0xd8, + 0x0a, 0x22, 0x02, 0xfb, 0x01, 0x31, 0xf3, 0xe7, 0x4f, 0xf0, 0x00, 0x0e, + 0xee, 0xe7, 0x02, 0x32, 0x54, 0xf8, 0x04, 0xab, 0xab, 0x5c, 0x68, 0x2b, + 0x1e, 0xd1, 0xab, 0x18, 0x5b, 0x78, 0x68, 0x2b, 0x0c, 0xbf, 0x72, 0x23, + 0x11, 0x23, 0x03, 0xf0, 0x03, 0x08, 0x90, 0x44, 0x15, 0xf8, 0x08, 0x70, + 0x64, 0x2f, 0x01, 0xd0, 0x69, 0x2f, 0x3f, 0xd1, 0x82, 0x2b, 0x27, 0xd1, + 0x25, 0x23, 0x07, 0xaa, 0x49, 0x46, 0x00, 0x96, 0x05, 0x90, 0x25, 0x2f, + 0x18, 0xbf, 0xd8, 0x46, 0xff, 0xf7, 0xb9, 0xfe, 0x2e, 0xe0, 0x6f, 0xf0, + 0x00, 0x4a, 0xdd, 0xe7, 0x6c, 0x2b, 0x06, 0xd1, 0xab, 0x18, 0x5b, 0x78, + 0x6c, 0x2b, 0x0c, 0xbf, 0x82, 0x23, 0x21, 0x23, 0xdd, 0xe7, 0x6a, 0x2b, + 0x08, 0xd0, 0x7a, 0x2b, 0x08, 0xd0, 0x74, 0x2b, 0x08, 0xd0, 0x4c, 0x2b, + 0x14, 0xbf, 0x00, 0x23, 0x61, 0x23, 0xd2, 0xe7, 0x31, 0x23, 0xd0, 0xe7, + 0x41, 0x23, 0xce, 0xe7, 0x51, 0x23, 0xcc, 0xe7, 0x11, 0x2b, 0x54, 0xf8, + 0x04, 0x2b, 0x0f, 0xd0, 0x72, 0x2b, 0x00, 0xd1, 0x52, 0xb2, 0x01, 0x23, + 0x01, 0x91, 0xcd, 0xe9, 0x02, 0xe6, 0x00, 0x93, 0x49, 0x46, 0x13, 0x46, + 0x07, 0xaa, 0x05, 0x90, 0xff, 0xf7, 0xa4, 0xfe, 0x05, 0x98, 0x38, 0xe0, + 0x12, 0xb2, 0xf0, 0xe7, 0x75, 0x2f, 0x03, 0xd0, 0x07, 0xf0, 0xdf, 0x02, + 0x58, 0x2a, 0x16, 0xd1, 0x82, 0x2b, 0xb9, 0xd0, 0x11, 0x2b, 0x54, 0xf8, + 0x04, 0x2b, 0x09, 0xd0, 0x72, 0x2b, 0x00, 0xd1, 0xd2, 0xb2, 0x75, 0x2f, + 0x01, 0x91, 0xcd, 0xe9, 0x02, 0xe6, 0x03, 0xd1, 0x00, 0x23, 0xde, 0xe7, + 0x92, 0xb2, 0xf6, 0xe7, 0x58, 0x2f, 0x0c, 0xbf, 0x03, 0x23, 0x02, 0x23, + 0xd7, 0xe7, 0x63, 0x2f, 0x09, 0xd1, 0x54, 0xf8, 0x04, 0x3b, 0x07, 0xaa, + 0x49, 0x46, 0x00, 0x96, 0xdb, 0xb2, 0x05, 0x90, 0xff, 0xf7, 0x5d, 0xfe, + 0xd2, 0xe7, 0x73, 0x2f, 0x16, 0xd1, 0x54, 0xf8, 0x04, 0xbb, 0x0b, 0xf1, + 0xff, 0x37, 0x17, 0xf8, 0x01, 0x3f, 0x23, 0xb1, 0xaa, 0xeb, 0x07, 0x02, + 0x1b, 0xeb, 0x02, 0x0f, 0x02, 0xd1, 0x08, 0xf1, 0x01, 0x0b, 0x0e, 0xe7, + 0x07, 0xaa, 0x49, 0x46, 0x00, 0x96, 0x05, 0x90, 0xff, 0xf7, 0x45, 0xfe, + 0x05, 0x98, 0xec, 0xe7, 0x70, 0x2f, 0x7f, 0xf4, 0x7d, 0xaf, 0x54, 0xf8, + 0x04, 0x7b, 0x30, 0x23, 0x07, 0xaa, 0x49, 0x46, 0x00, 0x96, 0x05, 0x90, + 0xff, 0xf7, 0x37, 0xfe, 0x78, 0x23, 0x07, 0xaa, 0x49, 0x46, 0x05, 0x98, + 0x00, 0x96, 0xff, 0xf7, 0x30, 0xfe, 0x00, 0x23, 0x07, 0xaa, 0x49, 0x46, + 0x05, 0x98, 0x03, 0x96, 0xcd, 0xe9, 0x01, 0x33, 0x03, 0x23, 0x00, 0x93, + 0x3b, 0x46, 0x99, 0xe7, 0x07, 0xaa, 0x49, 0x46, 0x00, 0x96, 0xd8, 0x46, + 0x05, 0x90, 0xff, 0xf7, 0x1e, 0xfe, 0x93, 0xe7, 0x0a, 0x4b, 0xda, 0x68, + 0x42, 0xf0, 0x01, 0x02, 0xda, 0x60, 0xda, 0x68, 0xd2, 0x07, 0x0b, 0xd5, + 0xd3, 0xf8, 0x0c, 0x21, 0x42, 0xf0, 0x01, 0x02, 0xc3, 0xf8, 0x0c, 0x21, + 0xd3, 0xf8, 0x0c, 0x01, 0xc0, 0x43, 0x00, 0xf0, 0x01, 0x00, 0x70, 0x47, + 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x00, 0x52, 0x10, 0x4b, 0xda, 0x68, + 0xd2, 0x07, 0x06, 0xd4, 0x0e, 0x4b, 0xd3, 0xf8, 0x0c, 0x01, 0x10, 0xf0, + 0x01, 0x00, 0x0a, 0xd1, 0x70, 0x47, 0x0c, 0x4a, 0x5a, 0x60, 0x02, 0xf1, + 0x88, 0x32, 0x5a, 0x60, 0xdb, 0x68, 0xdb, 0x07, 0xf0, 0xd5, 0x01, 0x20, + 0x70, 0x47, 0x07, 0x4a, 0xc3, 0xf8, 0x04, 0x21, 0x02, 0xf1, 0x88, 0x32, + 0xc3, 0xf8, 0x04, 0x21, 0xd3, 0xf8, 0x0c, 0x01, 0x00, 0xf0, 0x01, 0x00, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0x20, 0x00, 0x52, 0x23, 0x01, 0x67, 0x45, + 0x50, 0x4a, 0x08, 0xb5, 0x03, 0x68, 0x93, 0x42, 0x52, 0xd0, 0x4f, 0x49, + 0x8b, 0x42, 0x4f, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x4c, 0xd0, 0x18, 0x31, + 0x8b, 0x42, 0x49, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x46, 0xd0, 0x18, 0x31, + 0x8b, 0x42, 0x43, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x40, 0xd0, 0x18, 0x31, + 0x8b, 0x42, 0x3d, 0xd0, 0x01, 0xf5, 0x56, 0x71, 0x8b, 0x42, 0x39, 0xd0, + 0x18, 0x31, 0x8b, 0x42, 0x36, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x33, 0xd0, + 0x18, 0x31, 0x8b, 0x42, 0x30, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x2d, 0xd0, + 0x18, 0x31, 0x8b, 0x42, 0x2a, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x27, 0xd0, + 0x18, 0x31, 0x8b, 0x42, 0x24, 0xd0, 0x1a, 0x68, 0x22, 0xf0, 0x0e, 0x02, + 0x1a, 0x60, 0x1a, 0x68, 0x22, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x35, 0x4a, + 0x93, 0x42, 0x43, 0xd1, 0x02, 0x6e, 0x13, 0x68, 0x23, 0xf4, 0x80, 0x73, + 0x13, 0x60, 0xd0, 0xe9, 0x16, 0x13, 0x03, 0xf0, 0x1f, 0x02, 0x01, 0x23, + 0x93, 0x40, 0x4b, 0x60, 0xd0, 0xe9, 0x19, 0x32, 0x5a, 0x60, 0xc3, 0x6e, + 0x00, 0x2b, 0x46, 0xd0, 0x1a, 0x68, 0x22, 0xf4, 0x80, 0x72, 0x1a, 0x60, + 0xd0, 0xe9, 0x1c, 0x32, 0x5a, 0x60, 0x3e, 0xe0, 0x04, 0x21, 0x93, 0x42, + 0x80, 0xf8, 0x35, 0x10, 0x1e, 0xd0, 0x23, 0x4a, 0x93, 0x42, 0x1b, 0xd0, + 0x18, 0x32, 0x93, 0x42, 0x18, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x15, 0xd0, + 0x18, 0x32, 0x93, 0x42, 0x12, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x0f, 0xd0, + 0x18, 0x32, 0x93, 0x42, 0x0c, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x09, 0xd0, + 0x02, 0xf5, 0x56, 0x72, 0x93, 0x42, 0x05, 0xd0, 0x18, 0x32, 0x93, 0x42, + 0x02, 0xd0, 0x18, 0x32, 0x93, 0x42, 0xff, 0xd0, 0x1a, 0x68, 0x22, 0xf0, + 0x01, 0x02, 0x1a, 0x60, 0x00, 0x20, 0x08, 0xbd, 0x12, 0x4a, 0x93, 0x42, + 0xb8, 0xd0, 0x14, 0x32, 0x93, 0x42, 0xb5, 0xd0, 0x14, 0x32, 0x93, 0x42, + 0xb2, 0xd0, 0x14, 0x32, 0x93, 0x42, 0xaf, 0xd0, 0x14, 0x32, 0x93, 0x42, + 0xac, 0xd0, 0x14, 0x32, 0x93, 0x42, 0xa9, 0xd0, 0x14, 0x32, 0x93, 0x42, + 0xa6, 0xd0, 0x00, 0x23, 0x80, 0xf8, 0x34, 0x30, 0x01, 0x23, 0x80, 0xf8, + 0x35, 0x30, 0x03, 0x6d, 0x00, 0x2b, 0xdf, 0xd0, 0x98, 0x47, 0xdd, 0xe7, + 0x10, 0x00, 0x02, 0x40, 0x28, 0x00, 0x02, 0x40, 0x08, 0x54, 0x02, 0x58, + 0x1c, 0x54, 0x02, 0x58, 0x00, 0x28, 0x0d, 0xdb, 0x43, 0x09, 0x01, 0x22, + 0x00, 0xf0, 0x1f, 0x00, 0x20, 0x33, 0x02, 0xfa, 0x00, 0xf0, 0x04, 0x4a, + 0x42, 0xf8, 0x23, 0x00, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, + 0x70, 0x47, 0x00, 0xbf, 0x00, 0xe1, 0x00, 0xe0, 0x38, 0xb5, 0x04, 0x46, + 0xfb, 0xf7, 0x5c, 0xf9, 0x05, 0x46, 0x01, 0x34, 0xfb, 0xf7, 0x58, 0xf9, + 0x43, 0x1b, 0xa3, 0x42, 0xfa, 0xd3, 0x38, 0xbd, 0xf8, 0xb5, 0xc5, 0x69, + 0x0f, 0x46, 0x0e, 0x68, 0x08, 0x3d, 0xae, 0x42, 0x13, 0xd3, 0xb6, 0xfb, + 0xf5, 0xf0, 0x01, 0x38, 0x14, 0xf0, 0x36, 0xf9, 0x84, 0x1c, 0xa6, 0xeb, + 0x84, 0x04, 0xb4, 0xfb, 0xf5, 0xf4, 0x20, 0x46, 0x14, 0xf0, 0x2e, 0xf9, + 0xa6, 0xeb, 0x80, 0x00, 0x04, 0xfb, 0x15, 0x05, 0x20, 0x46, 0x3d, 0x60, + 0xf8, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x85, 0xb0, + 0x0f, 0x46, 0x91, 0x46, 0x98, 0x46, 0x10, 0x9d, 0x03, 0x90, 0xdd, 0xe9, + 0x0e, 0x46, 0x0d, 0xb9, 0x28, 0x46, 0x59, 0xe0, 0x03, 0x9b, 0x18, 0x68, + 0xb9, 0xf1, 0x00, 0x0f, 0x1e, 0xd0, 0xd9, 0xf8, 0x00, 0x30, 0x43, 0x45, + 0x1a, 0xd1, 0xd9, 0xf8, 0x04, 0x10, 0xa1, 0x42, 0x16, 0xd8, 0x82, 0x69, + 0x01, 0xeb, 0x02, 0x0a, 0x54, 0x45, 0x11, 0xd2, 0xaa, 0xeb, 0x04, 0x0a, + 0x61, 0x1a, 0xd9, 0xf8, 0x08, 0x30, 0xaa, 0x45, 0x28, 0xbf, 0xaa, 0x46, + 0x30, 0x46, 0x52, 0x46, 0x19, 0x44, 0x56, 0x44, 0x54, 0x44, 0xa5, 0xeb, + 0x0a, 0x05, 0x12, 0xf0, 0xf3, 0xf9, 0xd8, 0xe7, 0x3a, 0x68, 0x43, 0x69, + 0x90, 0x45, 0x0e, 0xd1, 0x79, 0x68, 0x8c, 0x42, 0x0b, 0xd3, 0x01, 0xeb, + 0x03, 0x0a, 0x54, 0x45, 0x07, 0xd2, 0xaa, 0xeb, 0x04, 0x0a, 0x61, 0x1a, + 0xbb, 0x68, 0xaa, 0x45, 0x28, 0xbf, 0xaa, 0x46, 0xe2, 0xe7, 0xb4, 0xfb, + 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x42, 0xd0, 0xf8, 0x04, 0xb0, 0x8a, 0xb9, + 0x9d, 0x42, 0x0f, 0xd3, 0x22, 0x46, 0x41, 0x46, 0xb5, 0xfb, 0xf3, 0xfa, + 0x03, 0xfb, 0x1a, 0x5a, 0x33, 0x46, 0xa5, 0xeb, 0x0a, 0x05, 0x00, 0x95, + 0xd8, 0x47, 0x68, 0xb9, 0x2e, 0x44, 0x2c, 0x44, 0x55, 0x46, 0xac, 0xe7, + 0xa2, 0x1a, 0x00, 0x93, 0x41, 0x46, 0xbb, 0x68, 0xc7, 0xf8, 0x00, 0x80, + 0x7a, 0x60, 0xd8, 0x47, 0x00, 0x28, 0xa2, 0xd0, 0x05, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x2d, 0xe9, 0xf0, 0x4f, 0x8b, 0xb0, 0x91, 0x46, 0x07, 0x46, + 0x88, 0x46, 0x14, 0x9a, 0x07, 0xa9, 0x00, 0x68, 0x0d, 0xf1, 0x20, 0x0b, + 0x01, 0x3a, 0x05, 0x93, 0xdd, 0xf8, 0x58, 0xa0, 0x07, 0x92, 0xff, 0xf7, + 0x67, 0xff, 0x05, 0x9b, 0x05, 0x46, 0x19, 0x46, 0x05, 0x93, 0x50, 0x46, + 0x15, 0x9b, 0x98, 0x47, 0x02, 0x46, 0x18, 0xbb, 0x15, 0xb3, 0x05, 0xf0, + 0x01, 0x06, 0x4a, 0x46, 0x00, 0x90, 0x38, 0x46, 0xc6, 0xf1, 0x02, 0x04, + 0x05, 0x9b, 0xa1, 0x00, 0xcd, 0xe9, 0x01, 0xb1, 0x41, 0x46, 0xff, 0xf7, + 0x6c, 0xff, 0x02, 0x46, 0x90, 0xb9, 0x01, 0x3c, 0x94, 0x42, 0x07, 0xdc, + 0x0a, 0xab, 0x02, 0x3e, 0x03, 0xeb, 0x84, 0x04, 0x35, 0x44, 0x54, 0xf8, + 0x08, 0x3c, 0xdc, 0xe7, 0x08, 0x99, 0x50, 0x46, 0x15, 0x9b, 0x98, 0x47, + 0x01, 0x22, 0x00, 0x28, 0xee, 0xd0, 0x02, 0x46, 0x10, 0x46, 0x0b, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0x2d, 0xe9, 0xf0, 0x47, 0x86, 0xb0, 0x05, 0x46, + 0x0f, 0x46, 0x14, 0x46, 0x00, 0xf1, 0x14, 0x09, 0xd6, 0x18, 0x4f, 0xf0, + 0x01, 0x0a, 0x0d, 0xf1, 0x17, 0x08, 0xb4, 0x42, 0x03, 0xd1, 0x00, 0x20, + 0x06, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x00, 0x94, 0x3b, 0x46, 0x00, 0x22, + 0x49, 0x46, 0x28, 0x46, 0x01, 0x34, 0xcd, 0xe9, 0x01, 0x8a, 0xff, 0xf7, + 0x36, 0xff, 0x00, 0x28, 0xf0, 0xd1, 0x01, 0x22, 0x41, 0x46, 0x0e, 0x98, + 0xfe, 0xf7, 0xfa, 0xfc, 0xe7, 0xe7, 0x1f, 0xb5, 0x06, 0x9c, 0x00, 0x92, + 0x00, 0x22, 0xcd, 0xe9, 0x01, 0x34, 0x0b, 0x46, 0x00, 0xf1, 0x14, 0x01, + 0xff, 0xf7, 0x23, 0xff, 0x04, 0xb0, 0x10, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, + 0x13, 0x68, 0x8b, 0xb0, 0x00, 0x26, 0x07, 0x46, 0x04, 0x93, 0x0c, 0x46, + 0x53, 0x68, 0xb0, 0x46, 0x0d, 0xf1, 0x10, 0x0b, 0x06, 0xad, 0x4f, 0xf0, + 0x10, 0x0a, 0x05, 0x93, 0x5b, 0xf8, 0x26, 0x90, 0x2b, 0x46, 0x00, 0x22, + 0x38, 0x46, 0x49, 0x46, 0xcd, 0xf8, 0x00, 0xa0, 0xff, 0xf7, 0xd9, 0xff, + 0x70, 0xb1, 0x10, 0xf1, 0x34, 0x0f, 0x06, 0xd1, 0x46, 0xb1, 0xb8, 0xf1, + 0x00, 0x0f, 0x14, 0xbf, 0x00, 0x20, 0x6f, 0xf0, 0x33, 0x00, 0x0b, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x26, 0xe5, 0xe7, 0xb8, 0xf1, 0x00, 0x0f, + 0x04, 0xd0, 0xe2, 0x69, 0x06, 0x9b, 0x9b, 0x1a, 0x00, 0x2b, 0xeb, 0xdb, + 0x07, 0x9b, 0x23, 0xf0, 0x00, 0x43, 0x13, 0x2b, 0xe6, 0xd9, 0x3a, 0x68, + 0xd2, 0x69, 0x93, 0x42, 0xe2, 0xd8, 0x4f, 0xf0, 0xff, 0x33, 0x03, 0xa8, + 0x10, 0x22, 0x29, 0x46, 0x03, 0x93, 0xfe, 0xf7, 0xa9, 0xfc, 0x07, 0x9b, + 0x10, 0x22, 0x00, 0x90, 0x49, 0x46, 0x23, 0xf0, 0x00, 0x43, 0x38, 0x46, + 0x10, 0x3b, 0xff, 0xf7, 0x81, 0xff, 0x00, 0x28, 0xcb, 0xd1, 0x03, 0x9b, + 0x00, 0x2b, 0xcb, 0xd1, 0x0a, 0xaa, 0x86, 0xf0, 0x01, 0x03, 0x04, 0xf1, + 0x1c, 0x0c, 0xc4, 0xf8, 0x04, 0x90, 0x02, 0xeb, 0x83, 0x03, 0x4f, 0xf0, + 0x01, 0x08, 0x53, 0xf8, 0x18, 0x3c, 0xc4, 0xe9, 0x02, 0x3a, 0x95, 0xe8, + 0x0f, 0x00, 0x8c, 0xe8, 0x0f, 0x00, 0xb7, 0xe7, 0xf7, 0xb5, 0x04, 0x46, + 0x04, 0x30, 0x0e, 0x46, 0x15, 0x46, 0xfe, 0xf7, 0xb2, 0xfc, 0x10, 0xb1, + 0x00, 0x20, 0x03, 0xb0, 0xf0, 0xbd, 0x01, 0x23, 0x00, 0x90, 0x6a, 0x46, + 0x29, 0x46, 0x20, 0x46, 0x01, 0x93, 0xff, 0xf7, 0x87, 0xff, 0x00, 0x28, + 0xf3, 0xd1, 0x05, 0xf1, 0x24, 0x07, 0x38, 0x46, 0xfe, 0xf7, 0x9f, 0xfc, + 0x00, 0x28, 0xeb, 0xd1, 0x31, 0x46, 0x38, 0x46, 0xfe, 0xf7, 0x88, 0xfc, + 0x38, 0xb1, 0x3a, 0x46, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x74, 0xff, + 0x00, 0x28, 0xee, 0xd0, 0xdf, 0xe7, 0x01, 0x20, 0xdd, 0xe7, 0x43, 0x79, + 0x82, 0x79, 0x04, 0x33, 0xc0, 0x79, 0x13, 0x44, 0x18, 0x44, 0x70, 0x47, + 0x2d, 0xe9, 0xf0, 0x43, 0x01, 0x23, 0x97, 0xb0, 0x0f, 0x46, 0x06, 0x46, + 0x00, 0x21, 0x90, 0x46, 0xcd, 0xe9, 0x05, 0x13, 0x05, 0x99, 0x40, 0x46, + 0xb8, 0x47, 0x04, 0x46, 0x10, 0xbb, 0x06, 0x99, 0x40, 0x46, 0xb8, 0x47, + 0x04, 0x46, 0xe8, 0xb9, 0x05, 0xaa, 0x0b, 0xa9, 0x30, 0x46, 0xff, 0xf7, + 0x4f, 0xff, 0x04, 0x46, 0xb0, 0xb9, 0x0c, 0x25, 0x13, 0x9b, 0x0e, 0x9a, + 0x23, 0xf0, 0x00, 0x43, 0x02, 0xf1, 0x0c, 0x01, 0x04, 0x3b, 0x99, 0x42, + 0x10, 0xd9, 0x14, 0x9b, 0x05, 0xa8, 0x05, 0x93, 0x15, 0x9b, 0x06, 0x93, + 0xfe, 0xf7, 0x5b, 0xfc, 0x00, 0x28, 0xdb, 0xd0, 0xf5, 0x68, 0x06, 0xf1, + 0x14, 0x09, 0x4d, 0xbb, 0x20, 0x46, 0x17, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, + 0x0c, 0x99, 0x08, 0xab, 0x30, 0x46, 0x00, 0x95, 0xff, 0xf7, 0x1f, 0xff, + 0x01, 0x46, 0x00, 0x28, 0x42, 0xd1, 0x07, 0xa8, 0xff, 0xf7, 0xb7, 0xff, + 0x0e, 0x9b, 0x18, 0x44, 0x9d, 0xf8, 0x20, 0x30, 0x03, 0xf0, 0x70, 0x03, + 0x0e, 0x90, 0x10, 0x2b, 0xd0, 0xd1, 0x0a, 0x9b, 0x00, 0x2b, 0xcc, 0xd0, + 0x0a, 0x46, 0x00, 0x93, 0x06, 0xf1, 0x14, 0x01, 0x09, 0x9b, 0x30, 0x46, + 0xcd, 0xe9, 0x01, 0x78, 0xff, 0xf7, 0x9b, 0xfe, 0x00, 0x28, 0xc0, 0xd0, + 0x04, 0x46, 0xd5, 0xe7, 0xeb, 0x69, 0xda, 0x03, 0x12, 0xd4, 0xeb, 0x69, + 0x9b, 0x03, 0x0d, 0xd5, 0x2b, 0x6a, 0x5b, 0xb1, 0x00, 0x93, 0x05, 0xf1, + 0x2c, 0x02, 0x49, 0x46, 0x30, 0x46, 0xcd, 0xe9, 0x01, 0x78, 0x6b, 0x6a, + 0xff, 0xf7, 0x85, 0xfe, 0x00, 0x28, 0xe9, 0xd1, 0x2d, 0x68, 0xbe, 0xe7, + 0x6b, 0x69, 0x00, 0x2b, 0xe9, 0xd0, 0x00, 0x93, 0x05, 0xf1, 0x2c, 0x02, + 0x49, 0x46, 0x30, 0x46, 0xcd, 0xe9, 0x01, 0x78, 0x2b, 0x69, 0xff, 0xf7, + 0x74, 0xfe, 0x00, 0x28, 0xdd, 0xd0, 0xd7, 0xe7, 0x04, 0x46, 0xad, 0xe7, + 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, 0x0d, 0x46, 0x01, 0x27, 0x30, 0x4e, + 0x4f, 0xf0, 0x00, 0x08, 0x22, 0x6b, 0xd4, 0xe9, 0x0d, 0x13, 0x91, 0x42, + 0x24, 0xd1, 0x00, 0x2b, 0x52, 0xd0, 0x20, 0x68, 0xe1, 0x6a, 0xd0, 0xf8, + 0x20, 0xc0, 0x0a, 0x44, 0xb2, 0xfb, 0xfc, 0xf1, 0x0c, 0xfb, 0x11, 0x22, + 0x00, 0x21, 0xe2, 0x62, 0x42, 0x6a, 0xe0, 0x6b, 0x93, 0x42, 0x94, 0xbf, + 0x23, 0x63, 0x22, 0x63, 0xd2, 0x08, 0xc4, 0xf8, 0x34, 0x80, 0x12, 0xf0, + 0x11, 0xf8, 0x20, 0x1d, 0xfe, 0xf7, 0xdb, 0xfb, 0x00, 0x28, 0xdd, 0xd1, + 0x22, 0x46, 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x4d, 0xff, 0x00, 0x28, + 0xd4, 0xd0, 0x25, 0xe0, 0x48, 0x1c, 0x01, 0x3b, 0xd4, 0xf8, 0x3c, 0xc0, + 0x60, 0x63, 0x48, 0x09, 0xa3, 0x63, 0x01, 0xf0, 0x1f, 0x03, 0x5c, 0xf8, + 0x20, 0x00, 0x07, 0xfa, 0x03, 0xf3, 0x03, 0x42, 0xc7, 0xd1, 0xe3, 0x6a, + 0x19, 0x44, 0x23, 0x68, 0x1a, 0x6a, 0xb1, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, + 0x13, 0x11, 0x29, 0x60, 0x01, 0x21, 0x25, 0x6b, 0x63, 0x6b, 0xab, 0x42, + 0x10, 0xd0, 0x5a, 0x09, 0x03, 0xf0, 0x1f, 0x00, 0x5c, 0xf8, 0x22, 0x20, + 0x01, 0xfa, 0x00, 0xf0, 0x10, 0x40, 0x01, 0xd1, 0xbd, 0xe8, 0xf0, 0x81, + 0x01, 0x33, 0x63, 0x63, 0xa3, 0x6b, 0x01, 0x3b, 0xa3, 0x63, 0xeb, 0xe7, + 0x00, 0x20, 0xf5, 0xe7, 0x6f, 0xf0, 0x1b, 0x00, 0xf2, 0xe7, 0x00, 0xbf, + 0x3b, 0x7c, 0x00, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, 0x04, 0x46, 0x87, 0xb0, + 0x0e, 0x46, 0x00, 0xf1, 0x14, 0x0a, 0x05, 0xa9, 0x20, 0x46, 0xff, 0xf7, + 0x8d, 0xff, 0x05, 0x46, 0x48, 0xb9, 0x20, 0x68, 0x05, 0x99, 0xc3, 0x68, + 0x98, 0x47, 0x05, 0x46, 0x00, 0x28, 0x3b, 0xd0, 0x10, 0xf1, 0x34, 0x0f, + 0xef, 0xd0, 0x28, 0x46, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x0d, 0xf1, + 0x13, 0x07, 0x73, 0x6a, 0x5a, 0x46, 0x51, 0x46, 0x20, 0x46, 0xcd, 0xf8, + 0x08, 0x90, 0xcd, 0xe9, 0x00, 0x87, 0xff, 0xf7, 0x76, 0xfd, 0x70, 0xb9, + 0x05, 0x9b, 0x52, 0x46, 0x04, 0xf1, 0x20, 0x01, 0x20, 0x46, 0xcd, 0xf8, + 0x00, 0x80, 0xcd, 0xe9, 0x01, 0x79, 0xff, 0xf7, 0x67, 0xf8, 0x20, 0xb1, + 0x10, 0xf1, 0x34, 0x0f, 0xcf, 0xd0, 0x05, 0x46, 0xdd, 0xe7, 0x08, 0xf1, + 0x01, 0x08, 0xb3, 0x6a, 0x43, 0x45, 0xdc, 0xd8, 0x23, 0x68, 0xa1, 0x6a, + 0x9a, 0x69, 0x70, 0x6b, 0x11, 0xf0, 0x7c, 0xff, 0x23, 0x6a, 0x04, 0xf1, + 0x20, 0x01, 0x20, 0x68, 0xf3, 0x62, 0x63, 0x6a, 0x33, 0x63, 0xff, 0xf7, + 0x15, 0xf8, 0x05, 0x9b, 0x73, 0x62, 0xc6, 0xe7, 0x80, 0x46, 0x06, 0xf1, + 0x2c, 0x0b, 0x4f, 0xf0, 0x01, 0x09, 0xe4, 0xe7, 0xcb, 0x69, 0x5a, 0x03, + 0x44, 0xbf, 0x23, 0xf4, 0x80, 0x23, 0x4f, 0xf0, 0xff, 0x32, 0x2d, 0xe9, + 0xf0, 0x41, 0x48, 0xbf, 0xcb, 0x61, 0x05, 0x46, 0xcb, 0x69, 0x90, 0xb0, + 0x48, 0xbf, 0xca, 0x62, 0x0c, 0x46, 0x13, 0xf4, 0x00, 0x30, 0x2c, 0xd0, + 0x0f, 0x6a, 0x2c, 0x22, 0x00, 0x21, 0x02, 0xa8, 0x11, 0xf0, 0x5e, 0xff, + 0x23, 0x69, 0x05, 0xf1, 0x14, 0x06, 0x06, 0x93, 0x63, 0x69, 0x07, 0x93, + 0x01, 0x23, 0x96, 0xe8, 0x07, 0x00, 0xcd, 0xe9, 0x09, 0x37, 0x10, 0xab, + 0x03, 0xe9, 0x07, 0x00, 0x4f, 0xf0, 0xff, 0x33, 0x98, 0x46, 0x6b, 0x61, + 0x22, 0x6a, 0x63, 0x69, 0x9a, 0x42, 0x13, 0xd3, 0x04, 0xf1, 0x2c, 0x08, + 0x32, 0x46, 0x41, 0x46, 0x28, 0x46, 0xfe, 0xf7, 0xe0, 0xff, 0x28, 0xb3, + 0x10, 0xf1, 0x34, 0x0f, 0x05, 0xd1, 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, + 0x6b, 0xff, 0x00, 0x28, 0xf0, 0xd0, 0x10, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, + 0x01, 0x23, 0x0d, 0xf1, 0x07, 0x02, 0x02, 0xa9, 0x28, 0x46, 0x00, 0xf0, + 0x52, 0xf9, 0x00, 0x28, 0xf3, 0xdb, 0x01, 0x23, 0x0d, 0xf1, 0x07, 0x02, + 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x16, 0xf8, 0x00, 0x28, 0xea, 0xdb, + 0x6b, 0x69, 0x01, 0x33, 0x1c, 0xbf, 0xcd, 0xf8, 0x34, 0x80, 0xc5, 0xf8, + 0x14, 0x80, 0xcd, 0xe7, 0x63, 0x6a, 0x23, 0x61, 0x23, 0x6a, 0x63, 0x61, + 0xe3, 0x69, 0x23, 0xf4, 0x00, 0x33, 0x43, 0xf4, 0x80, 0x33, 0xc4, 0xe9, + 0x07, 0x37, 0xd6, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x9b, 0x46, 0x8d, 0xb0, + 0xcb, 0x69, 0x05, 0x46, 0x04, 0x92, 0x0c, 0x46, 0x03, 0xf0, 0x03, 0x02, + 0x01, 0x2a, 0x00, 0xf0, 0x20, 0x81, 0x5e, 0x03, 0x14, 0xd4, 0xe6, 0x69, + 0x32, 0x05, 0x1a, 0xd4, 0x27, 0x6a, 0x17, 0xeb, 0x0b, 0x0f, 0x00, 0xf1, + 0x19, 0x81, 0x16, 0xf4, 0x00, 0x36, 0x18, 0xd0, 0xd9, 0x46, 0xe3, 0x69, + 0xb9, 0xf1, 0x00, 0x0f, 0x25, 0xd1, 0x23, 0xf4, 0x00, 0x23, 0x5a, 0x46, + 0xe3, 0x61, 0x04, 0xe0, 0xff, 0xf7, 0x70, 0xff, 0x02, 0x46, 0x00, 0x28, + 0xe5, 0xd0, 0x10, 0x46, 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x62, 0x69, + 0x21, 0x6a, 0x8a, 0x42, 0x88, 0xbf, 0x22, 0x62, 0xde, 0xe7, 0x63, 0x69, + 0x9f, 0x42, 0xe3, 0xd9, 0x23, 0x62, 0x0b, 0xaa, 0x01, 0x23, 0x21, 0x46, + 0x28, 0x46, 0x8d, 0xf8, 0x2c, 0x60, 0xff, 0xf7, 0xc1, 0xff, 0x02, 0x1e, + 0xe7, 0xdb, 0x23, 0x6a, 0x9f, 0x42, 0xf2, 0xd8, 0xd4, 0xe7, 0x9b, 0x03, + 0x04, 0xf1, 0x2c, 0x06, 0x20, 0xd5, 0x2b, 0x68, 0xa2, 0x6a, 0xdb, 0x69, + 0x9a, 0x42, 0x42, 0xd1, 0x2b, 0x68, 0x05, 0xf1, 0x14, 0x0a, 0x1b, 0x6a, + 0xab, 0x63, 0xd4, 0xe9, 0x08, 0x32, 0xcd, 0xe9, 0x09, 0x23, 0x0b, 0xa9, + 0x28, 0x46, 0xff, 0xf7, 0x7d, 0xfe, 0x02, 0x46, 0xf8, 0xb9, 0x28, 0x68, + 0x0b, 0x99, 0xc3, 0x68, 0x98, 0x47, 0x02, 0x46, 0x18, 0xb3, 0x12, 0xf1, + 0x34, 0x0f, 0x16, 0xd1, 0x4f, 0xf0, 0xff, 0x33, 0x2b, 0x62, 0xec, 0xe7, + 0x23, 0x6a, 0x00, 0x2b, 0xe0, 0xd0, 0x04, 0xf1, 0x28, 0x02, 0x01, 0x3b, + 0x31, 0x46, 0x28, 0x46, 0x02, 0x92, 0x04, 0xf1, 0x24, 0x02, 0x00, 0x93, + 0x01, 0x92, 0xd4, 0xe9, 0x04, 0x23, 0xf8, 0xf7, 0x26, 0xff, 0x02, 0x46, + 0x20, 0xb1, 0xe3, 0x69, 0x43, 0xf4, 0x00, 0x23, 0xe3, 0x61, 0xa6, 0xe7, + 0x31, 0x46, 0x28, 0x68, 0xfe, 0xf7, 0x1c, 0xff, 0xc6, 0xe7, 0x0a, 0x9b, + 0x28, 0x68, 0x43, 0xbb, 0x0b, 0x9a, 0x62, 0x62, 0xa3, 0x62, 0xe3, 0x69, + 0x43, 0xf4, 0x00, 0x33, 0xe3, 0x61, 0xa8, 0x46, 0x58, 0xf8, 0x14, 0x3b, + 0xdf, 0x69, 0xa3, 0x6a, 0xff, 0x1a, 0x4f, 0x45, 0x28, 0xbf, 0x4f, 0x46, + 0x04, 0x9b, 0x42, 0x46, 0x31, 0x46, 0x28, 0x46, 0x01, 0x93, 0xa3, 0x6a, + 0x02, 0x97, 0x00, 0x93, 0x63, 0x6a, 0xfe, 0xf7, 0x35, 0xff, 0x02, 0x46, + 0x00, 0x28, 0x75, 0xd0, 0x10, 0xf1, 0x34, 0x0f, 0xd1, 0xd1, 0x21, 0x46, + 0x28, 0x46, 0xff, 0xf7, 0x91, 0xfe, 0x02, 0x46, 0x00, 0x28, 0xe7, 0xd0, + 0xc9, 0xe7, 0x01, 0x3b, 0x0a, 0xa9, 0x05, 0x92, 0x0a, 0x93, 0xff, 0xf7, + 0x07, 0xfc, 0x0a, 0x9b, 0x29, 0x68, 0x01, 0x33, 0x05, 0x9a, 0xc9, 0x69, + 0x0a, 0x93, 0x8b, 0x42, 0x4a, 0xd1, 0x01, 0x30, 0x90, 0x46, 0x09, 0xaf, + 0x90, 0xfa, 0xa0, 0xf3, 0xb3, 0xfa, 0x83, 0xf3, 0x05, 0x93, 0x01, 0x33, + 0x06, 0x93, 0x4f, 0xea, 0x88, 0x03, 0x52, 0x46, 0x31, 0x46, 0x28, 0x46, + 0x07, 0x93, 0x04, 0x23, 0xcd, 0xe9, 0x01, 0x73, 0x07, 0x9b, 0x00, 0x93, + 0x0b, 0x9b, 0xfe, 0xf7, 0x01, 0xff, 0x02, 0x46, 0x00, 0x28, 0x86, 0xd1, + 0x05, 0x9b, 0x43, 0x45, 0x30, 0xd1, 0x08, 0xf1, 0x01, 0x08, 0x06, 0x9b, + 0x43, 0x45, 0xe6, 0xd8, 0x0b, 0x9b, 0x63, 0x62, 0x06, 0x9b, 0x9b, 0x00, + 0xa2, 0xe7, 0x01, 0x23, 0x00, 0x22, 0x51, 0x46, 0x28, 0x46, 0xcd, 0xf8, + 0x00, 0x80, 0xcd, 0xe9, 0x01, 0x73, 0x09, 0x9b, 0xff, 0xf7, 0xe9, 0xfb, + 0x02, 0x46, 0x00, 0x28, 0x85, 0xd1, 0x01, 0x23, 0x52, 0x46, 0x31, 0x46, + 0x28, 0x46, 0xcd, 0xf8, 0x00, 0x80, 0xcd, 0xe9, 0x01, 0x73, 0x0b, 0x9b, + 0xfe, 0xf7, 0xd8, 0xfe, 0x02, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x5d, 0xaf, + 0x08, 0xf1, 0x01, 0x08, 0x0a, 0x9b, 0x98, 0x45, 0xdd, 0xd3, 0x7d, 0xe7, + 0x90, 0x46, 0x0d, 0xf1, 0x23, 0x07, 0xf7, 0xe7, 0x04, 0x23, 0x51, 0x46, + 0x28, 0x46, 0xcd, 0xe9, 0x01, 0x73, 0x07, 0x9b, 0x00, 0x93, 0x09, 0x9b, + 0xff, 0xf7, 0xc3, 0xfb, 0x02, 0x46, 0x00, 0x28, 0xc1, 0xd0, 0x5e, 0xe7, + 0x23, 0x6a, 0xa9, 0xeb, 0x07, 0x09, 0x3b, 0x44, 0x23, 0x62, 0xa3, 0x6a, + 0x3b, 0x44, 0xa3, 0x62, 0x04, 0x9b, 0x3b, 0x44, 0x04, 0x93, 0x2b, 0x68, + 0x1b, 0x6a, 0xab, 0x63, 0xed, 0xe6, 0x6f, 0xf0, 0x08, 0x02, 0xf8, 0xe6, + 0x6f, 0xf0, 0x1a, 0x02, 0xf5, 0xe6, 0x2d, 0xe9, 0xf0, 0x4f, 0x1d, 0x46, + 0xcb, 0x69, 0x90, 0x46, 0x87, 0xb0, 0x03, 0xf0, 0x03, 0x02, 0x07, 0x46, + 0x0c, 0x46, 0x02, 0x2a, 0x54, 0xd0, 0x9a, 0x03, 0x05, 0xd4, 0x26, 0x6a, + 0x62, 0x69, 0x96, 0x42, 0x08, 0xd3, 0x00, 0x20, 0x03, 0xe0, 0xff, 0xf7, + 0x4d, 0xfe, 0x00, 0x28, 0xf5, 0xd0, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, + 0x96, 0x1b, 0x04, 0xf1, 0x2c, 0x01, 0x04, 0xf1, 0x28, 0x0a, 0x04, 0xf1, + 0x24, 0x0b, 0xae, 0x42, 0x28, 0xbf, 0x2e, 0x46, 0xb1, 0x46, 0xb9, 0xf1, + 0x00, 0x0f, 0x01, 0xd1, 0x30, 0x46, 0xec, 0xe7, 0xe3, 0x69, 0x5b, 0x03, + 0x04, 0xd5, 0x3b, 0x68, 0xa2, 0x6a, 0xdb, 0x69, 0x9a, 0x42, 0x10, 0xd1, + 0x23, 0x6a, 0x38, 0x46, 0x05, 0x91, 0x00, 0x93, 0xcd, 0xe9, 0x01, 0xba, + 0xd4, 0xe9, 0x04, 0x23, 0xf8, 0xf7, 0x31, 0xfe, 0x00, 0x28, 0xd8, 0xd1, + 0xe3, 0x69, 0x05, 0x99, 0x43, 0xf4, 0x80, 0x23, 0xe3, 0x61, 0x3a, 0x68, + 0x38, 0x46, 0xa3, 0x6a, 0xd5, 0x69, 0x00, 0x22, 0x00, 0x93, 0xed, 0x1a, + 0x63, 0x6a, 0x05, 0x91, 0x4d, 0x45, 0x28, 0xbf, 0x4d, 0x46, 0xcd, 0xe9, + 0x01, 0x85, 0xff, 0xf7, 0x56, 0xfb, 0x00, 0x28, 0xc1, 0xd1, 0x23, 0x6a, + 0xa8, 0x44, 0xa9, 0xeb, 0x05, 0x09, 0x05, 0x99, 0x2b, 0x44, 0x23, 0x62, + 0xa3, 0x6a, 0x2b, 0x44, 0xa3, 0x62, 0xc4, 0xe7, 0x6f, 0xf0, 0x08, 0x00, + 0xb3, 0xe7, 0x70, 0xb5, 0x92, 0xb0, 0x06, 0x46, 0x0d, 0x46, 0xff, 0xf7, + 0xf9, 0xfd, 0x04, 0x46, 0x68, 0xbb, 0xeb, 0x69, 0x03, 0xf4, 0x10, 0x23, + 0xb3, 0xf5, 0x80, 0x3f, 0x27, 0xd1, 0x2a, 0x1d, 0x10, 0x46, 0xfe, 0xf7, + 0x32, 0xf9, 0x10, 0xbb, 0x07, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x0e, 0xfc, + 0x04, 0x46, 0xe0, 0xb9, 0x0c, 0x23, 0xea, 0x68, 0x06, 0x90, 0x00, 0x93, + 0x04, 0xab, 0x08, 0x99, 0x03, 0x92, 0xcd, 0xe9, 0x04, 0x00, 0x30, 0x46, + 0xff, 0xf7, 0xf3, 0xfb, 0x04, 0x46, 0x70, 0xb9, 0x2b, 0x69, 0x03, 0xaa, + 0x07, 0xa9, 0x30, 0x46, 0x05, 0x93, 0x6b, 0x69, 0x06, 0x93, 0xf8, 0xf7, + 0x20, 0xfe, 0x04, 0x46, 0x18, 0xb9, 0xeb, 0x69, 0x23, 0xf4, 0x80, 0x33, + 0xeb, 0x61, 0x20, 0x46, 0x12, 0xb0, 0x70, 0xbd, 0x73, 0xb5, 0x0c, 0x46, + 0x04, 0x31, 0x06, 0x46, 0xff, 0xf7, 0x02, 0xfd, 0x05, 0x46, 0xf0, 0xb9, + 0x04, 0xf1, 0x08, 0x01, 0x30, 0x46, 0xff, 0xf7, 0xfb, 0xfc, 0x05, 0x46, + 0xb8, 0xb9, 0x04, 0x23, 0x02, 0x46, 0x61, 0x68, 0x30, 0x46, 0x00, 0x93, + 0x04, 0xf1, 0x1c, 0x03, 0xff, 0xf7, 0xc7, 0xfb, 0x10, 0xb1, 0x10, 0xf1, + 0x34, 0x0f, 0x0d, 0xd1, 0xe3, 0x69, 0x14, 0x22, 0x01, 0x33, 0xe3, 0x61, + 0x4f, 0xf0, 0xff, 0x33, 0xc4, 0xe9, 0x08, 0x23, 0xa3, 0x62, 0x10, 0x23, + 0xe3, 0x60, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, 0x05, 0x46, 0xfa, 0xe7, + 0x2d, 0xe9, 0xf3, 0x41, 0x06, 0x46, 0x0c, 0x46, 0x15, 0x46, 0x01, 0xf1, + 0x24, 0x08, 0x10, 0x27, 0x22, 0x6a, 0xe1, 0x68, 0x22, 0xf0, 0x00, 0x43, + 0x01, 0xf1, 0x0c, 0x00, 0x04, 0x3b, 0x98, 0x42, 0x17, 0xd8, 0x0c, 0x23, + 0x0a, 0x46, 0x30, 0x46, 0x61, 0x68, 0x00, 0x93, 0x2b, 0x1d, 0xff, 0xf7, + 0x9a, 0xfb, 0x01, 0x46, 0x90, 0xb9, 0xe6, 0x68, 0x28, 0x46, 0x2e, 0x60, + 0xff, 0xf7, 0x31, 0xfc, 0x30, 0x44, 0xe0, 0x60, 0x28, 0x46, 0xff, 0xf7, + 0x2c, 0xfc, 0xa3, 0x69, 0x18, 0x44, 0xa0, 0x61, 0x04, 0xe0, 0x00, 0x2a, + 0x06, 0xdb, 0x29, 0x60, 0x6f, 0xf0, 0x01, 0x01, 0x08, 0x46, 0x02, 0xb0, + 0xbd, 0xe8, 0xf0, 0x81, 0x21, 0x46, 0x42, 0x46, 0x30, 0x46, 0xff, 0xf7, + 0x89, 0xfb, 0x01, 0x46, 0x00, 0x28, 0xf3, 0xd1, 0xa3, 0x69, 0xe7, 0x60, + 0x14, 0x33, 0xa3, 0x61, 0xc8, 0xe7, 0x2d, 0xe9, 0xf8, 0x43, 0x14, 0x46, + 0x1d, 0x46, 0x00, 0x22, 0x01, 0x23, 0x06, 0x46, 0x0f, 0x46, 0x04, 0xf1, + 0x24, 0x08, 0x05, 0xf1, 0x08, 0x09, 0xc4, 0xe9, 0x09, 0x23, 0x40, 0x46, + 0xfe, 0xf7, 0x8f, 0xf8, 0x08, 0xb1, 0x00, 0x20, 0x0d, 0xe0, 0x42, 0x46, + 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x68, 0xfb, 0x38, 0xb9, 0x2a, 0x46, + 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xa2, 0xff, 0x18, 0xb1, 0x83, 0x1c, + 0xeb, 0xd0, 0xbd, 0xe8, 0xf8, 0x83, 0x2b, 0x79, 0x03, 0xf0, 0x70, 0x03, + 0x20, 0x2b, 0xf0, 0xd1, 0x39, 0x46, 0x48, 0x46, 0xfe, 0xf7, 0x62, 0xf8, + 0x00, 0x28, 0xea, 0xd1, 0x01, 0x20, 0xf0, 0xe7, 0x70, 0xb5, 0x05, 0x46, + 0x92, 0xb0, 0x04, 0x30, 0x0e, 0x46, 0xfe, 0xf7, 0x68, 0xf8, 0x68, 0xbb, + 0x01, 0x23, 0x01, 0x90, 0x01, 0xaa, 0x07, 0xa9, 0x28, 0x46, 0x02, 0x93, + 0xff, 0xf7, 0x40, 0xfb, 0x04, 0x46, 0x18, 0xb9, 0x10, 0xa8, 0xfe, 0xf7, + 0x5a, 0xf8, 0x10, 0xb1, 0x20, 0x46, 0x12, 0xb0, 0x70, 0xbd, 0x10, 0xaa, + 0x07, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x32, 0xfb, 0x38, 0xb9, 0x03, 0xaa, + 0x07, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x6c, 0xff, 0x18, 0xb1, 0x83, 0x1c, + 0xea, 0xd0, 0x04, 0x46, 0xec, 0xe7, 0x9d, 0xf9, 0x10, 0x30, 0x00, 0x2b, + 0xf1, 0xdb, 0x08, 0x22, 0x31, 0x46, 0x05, 0xa8, 0x12, 0xf0, 0xca, 0xff, + 0x00, 0x28, 0xea, 0xd1, 0x01, 0x24, 0xdf, 0xe7, 0x00, 0x24, 0xdd, 0xe7, + 0x2d, 0xe9, 0xf0, 0x4f, 0x2d, 0xed, 0x02, 0x8b, 0x85, 0xb0, 0x1f, 0x68, + 0x05, 0x46, 0x08, 0xee, 0x10, 0x1a, 0x02, 0x93, 0x40, 0xf6, 0x22, 0x03, + 0x14, 0x46, 0xdf, 0xf8, 0x40, 0x91, 0x53, 0x60, 0x43, 0x68, 0x93, 0x60, + 0x83, 0x68, 0xd3, 0x60, 0x49, 0x46, 0x38, 0x46, 0x13, 0xf0, 0xa9, 0xf8, + 0x07, 0xeb, 0x00, 0x08, 0x83, 0x46, 0x49, 0x46, 0x40, 0x46, 0x13, 0xf0, + 0x7e, 0xf8, 0x01, 0x28, 0x06, 0x46, 0x08, 0xeb, 0x00, 0x0a, 0x05, 0xd1, + 0x17, 0xf8, 0x0b, 0x30, 0x2e, 0x2b, 0x0a, 0xd1, 0x57, 0x46, 0xe9, 0xe7, + 0x02, 0x28, 0x06, 0xd1, 0x02, 0x46, 0x3f, 0x49, 0x40, 0x46, 0x12, 0xf0, + 0x93, 0xff, 0x00, 0x28, 0xf4, 0xd0, 0x57, 0x46, 0x4f, 0xf0, 0x01, 0x0b, + 0x49, 0x46, 0x50, 0x46, 0x13, 0xf0, 0x87, 0xf8, 0x82, 0x44, 0x49, 0x46, + 0x50, 0x46, 0x13, 0xf0, 0x5e, 0xf8, 0x02, 0x46, 0x90, 0xb1, 0x02, 0x28, + 0x0c, 0xd1, 0x03, 0x90, 0x50, 0x46, 0x33, 0x49, 0x12, 0xf0, 0x7c, 0xff, + 0x03, 0x9a, 0x28, 0xb9, 0xbb, 0xf1, 0x01, 0x0b, 0x04, 0xd1, 0x0a, 0xf1, + 0x02, 0x07, 0xc3, 0xe7, 0x0b, 0xf1, 0x01, 0x0b, 0x92, 0x44, 0xe1, 0xe7, + 0x98, 0xf8, 0x00, 0x00, 0x00, 0x28, 0x46, 0xd0, 0x02, 0x9b, 0xc3, 0xf8, + 0x00, 0x80, 0x23, 0x79, 0x22, 0x2b, 0x4a, 0xd1, 0x04, 0xf1, 0x08, 0x0a, + 0x18, 0xee, 0x10, 0x1a, 0x28, 0x46, 0x52, 0x46, 0xff, 0xf7, 0xb2, 0xfa, + 0x00, 0x28, 0x36, 0xd1, 0x05, 0xf1, 0x14, 0x0b, 0x22, 0x46, 0x18, 0xee, + 0x10, 0x1a, 0x28, 0x46, 0xff, 0xf7, 0xe8, 0xfe, 0x68, 0xbb, 0x23, 0x79, + 0x03, 0xf0, 0x7f, 0x03, 0x11, 0x2b, 0x01, 0xd0, 0x22, 0x2b, 0xf1, 0xd1, + 0xe3, 0x79, 0xb3, 0x42, 0xee, 0xd1, 0x23, 0x68, 0x59, 0x46, 0x62, 0x79, + 0x28, 0x46, 0x04, 0x33, 0x13, 0x44, 0xa2, 0x79, 0x13, 0x44, 0x18, 0xee, + 0x10, 0x2a, 0xcd, 0xe9, 0x00, 0x86, 0x52, 0x68, 0xf8, 0xf7, 0x4b, 0xfc, + 0x00, 0x28, 0x12, 0xdb, 0xdc, 0xd0, 0x95, 0xf8, 0x41, 0x30, 0x00, 0x2b, + 0x82, 0xd1, 0x94, 0xf9, 0x04, 0x30, 0x00, 0x2b, 0xbf, 0xf6, 0x7e, 0xaf, + 0x51, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x2e, 0xff, 0x00, 0x28, 0x07, 0xd0, + 0x01, 0xdb, 0x6f, 0xf0, 0x01, 0x00, 0x05, 0xb0, 0xbd, 0xec, 0x02, 0x8b, + 0xbd, 0xe8, 0xf0, 0x8f, 0x23, 0x79, 0x03, 0xf0, 0x7f, 0x03, 0x23, 0x71, + 0x6a, 0xe7, 0x6f, 0xf0, 0x13, 0x00, 0xf2, 0xe7, 0x95, 0xd9, 0x01, 0x08, + 0x93, 0xd9, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x47, 0x80, 0x46, 0x8c, 0xb0, + 0x10, 0x46, 0x0c, 0x46, 0x16, 0x46, 0xff, 0xf7, 0xf0, 0xfa, 0x0b, 0x6a, + 0x14, 0x30, 0x23, 0xf0, 0x00, 0x43, 0x83, 0x42, 0x1d, 0xd1, 0x01, 0xaa, + 0x04, 0x31, 0x40, 0x46, 0xff, 0xf7, 0xba, 0xfa, 0x05, 0x1e, 0x12, 0xdb, + 0x09, 0x9a, 0x00, 0x2a, 0x13, 0xda, 0x23, 0x6a, 0x01, 0xa9, 0x40, 0x46, + 0x63, 0xf0, 0x00, 0x43, 0x13, 0x40, 0x09, 0x93, 0x63, 0x6a, 0x0a, 0x93, + 0xa3, 0x6a, 0x0b, 0x93, 0x00, 0x23, 0x1a, 0x46, 0x00, 0xf0, 0xdb, 0xf8, + 0x05, 0x46, 0x28, 0x46, 0x0c, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x33, 0x68, + 0x30, 0x46, 0x01, 0x93, 0xff, 0xf7, 0xc7, 0xfa, 0x00, 0x23, 0x02, 0x90, + 0x01, 0xaa, 0x21, 0x46, 0x40, 0x46, 0xcd, 0xe9, 0x03, 0x33, 0x01, 0x23, + 0x00, 0xf0, 0xc7, 0xf8, 0x05, 0x46, 0x00, 0x28, 0xe9, 0xd1, 0xd8, 0xf8, + 0x0c, 0x70, 0x21, 0x1d, 0x4f, 0xf0, 0xff, 0x3a, 0xcf, 0xb9, 0xd8, 0xf8, + 0x10, 0x70, 0x21, 0x1d, 0x00, 0x2f, 0xde, 0xd0, 0x38, 0x1d, 0xfd, 0xf7, + 0x29, 0xff, 0x70, 0xb9, 0xfc, 0x68, 0x33, 0x68, 0x9c, 0x42, 0x0a, 0xd9, + 0x30, 0x46, 0xff, 0xf7, 0xa4, 0xfa, 0x20, 0x1a, 0xf8, 0x60, 0x30, 0x46, + 0xff, 0xf7, 0x9f, 0xfa, 0xbb, 0x69, 0x18, 0x1a, 0xb8, 0x61, 0x3f, 0x68, + 0xe8, 0xe7, 0x38, 0x1d, 0xfd, 0xf7, 0x14, 0xff, 0x30, 0xb9, 0xd7, 0xf8, + 0x0c, 0x90, 0x33, 0x68, 0x99, 0x45, 0x03, 0xd1, 0xc7, 0xe9, 0x01, 0xaa, + 0x3f, 0x68, 0xd7, 0xe7, 0xfc, 0xd9, 0x30, 0x46, 0xff, 0xf7, 0x89, 0xfa, + 0xa9, 0xeb, 0x00, 0x00, 0xf8, 0x60, 0xf5, 0xe7, 0xf0, 0xb5, 0x01, 0x27, + 0x06, 0x1d, 0xa7, 0xb0, 0x04, 0x46, 0x80, 0xf8, 0x40, 0x70, 0x30, 0x46, + 0xfd, 0xf7, 0x09, 0xff, 0x05, 0x46, 0x00, 0x28, 0x7f, 0xd1, 0x01, 0x46, + 0x2c, 0x22, 0x05, 0xa8, 0x11, 0xf0, 0x34, 0xfb, 0x4f, 0xf0, 0x00, 0x43, + 0x28, 0x22, 0x29, 0x46, 0x10, 0xa8, 0x0d, 0x93, 0x11, 0xf0, 0x2c, 0xfb, + 0x1a, 0x97, 0x23, 0x68, 0x1b, 0x6a, 0x9d, 0x42, 0x02, 0xd3, 0x6f, 0xf0, + 0x33, 0x00, 0x1b, 0xe0, 0x19, 0xa8, 0xfd, 0xf7, 0xee, 0xfe, 0x00, 0x28, + 0x65, 0xd1, 0x19, 0xaa, 0x10, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0xc8, 0xf9, + 0x80, 0xb9, 0x0d, 0x9b, 0x00, 0x2b, 0x38, 0xdb, 0x30, 0x46, 0xfd, 0xf7, + 0xe0, 0xfe, 0x58, 0xb1, 0x19, 0x9b, 0x0e, 0x93, 0x1a, 0x9b, 0x0f, 0x93, + 0x00, 0x23, 0x05, 0xa9, 0x20, 0x46, 0x1a, 0x46, 0x00, 0xf0, 0x51, 0xf8, + 0x27, 0xb0, 0xf0, 0xbd, 0x01, 0xab, 0x1b, 0xaa, 0x0e, 0xa9, 0x20, 0x46, + 0xff, 0xf7, 0x2d, 0xfe, 0x00, 0x28, 0xf5, 0xdb, 0xea, 0xd0, 0x03, 0x9a, + 0x0e, 0x99, 0x04, 0x9b, 0x8a, 0x42, 0x0f, 0x98, 0x01, 0xd1, 0x98, 0x42, + 0x17, 0xd0, 0x82, 0x42, 0x01, 0xd1, 0x99, 0x42, 0x13, 0xd0, 0x0e, 0x92, + 0xdf, 0xe7, 0x9d, 0xf9, 0x70, 0x30, 0x00, 0x2b, 0x0d, 0xda, 0x1d, 0xa9, + 0x20, 0x46, 0xff, 0xf7, 0x45, 0xfe, 0x00, 0x28, 0xdc, 0xdb, 0x1e, 0xd0, + 0x1b, 0xaa, 0x10, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0x25, 0xff, 0x00, 0x28, + 0xd4, 0xd1, 0x1b, 0xaa, 0x10, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0xc6, 0xfd, + 0x00, 0x28, 0xe6, 0xd0, 0x83, 0x1c, 0xcb, 0xd1, 0x0d, 0xf1, 0x40, 0x0c, + 0x05, 0xaf, 0x01, 0x35, 0xbc, 0xe8, 0x0f, 0x00, 0x0f, 0xc7, 0xbc, 0xe8, + 0x0f, 0x00, 0x0f, 0xc7, 0x9c, 0xe8, 0x07, 0x00, 0x87, 0xe8, 0x07, 0x00, + 0x99, 0xe7, 0x9d, 0xf8, 0x70, 0x30, 0x1b, 0xaa, 0x10, 0xa9, 0x20, 0x46, + 0x03, 0xf0, 0x7f, 0x03, 0x8d, 0xf8, 0x70, 0x30, 0xf8, 0xf7, 0x93, 0xfb, + 0xd9, 0xe7, 0x00, 0x20, 0xae, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x2d, 0xed, + 0x02, 0x8b, 0x9b, 0xb0, 0x06, 0x46, 0x0d, 0x46, 0x07, 0x93, 0xcb, 0x69, + 0x07, 0x98, 0x01, 0x33, 0x05, 0x92, 0x02, 0xeb, 0x00, 0x17, 0xcb, 0x61, + 0x0b, 0x1d, 0xd1, 0xe9, 0x01, 0x14, 0x08, 0xee, 0x10, 0x3a, 0x13, 0x46, + 0xc5, 0xe9, 0x01, 0x41, 0x9f, 0x42, 0x0f, 0xd1, 0x00, 0x23, 0xcd, 0xe9, + 0x09, 0x41, 0x06, 0x93, 0x30, 0x68, 0x69, 0x68, 0xc3, 0x68, 0x98, 0x47, + 0x04, 0x46, 0x70, 0xb1, 0x14, 0xf1, 0x34, 0x0f, 0x00, 0xf0, 0xf3, 0x80, + 0x20, 0x46, 0xfe, 0xe0, 0xd8, 0x68, 0x10, 0x33, 0x2a, 0x6a, 0x02, 0x44, + 0x53, 0xf8, 0x0c, 0x0c, 0x12, 0x1a, 0x2a, 0x62, 0xe4, 0xe7, 0x05, 0xf1, + 0x1c, 0x08, 0x0d, 0xf1, 0x2c, 0x09, 0x4f, 0xf0, 0xff, 0x33, 0x06, 0xf1, + 0x20, 0x0a, 0x10, 0x27, 0x10, 0x22, 0x41, 0x46, 0x48, 0x46, 0x0b, 0x93, + 0xfd, 0xf7, 0x10, 0xfe, 0x22, 0x46, 0x00, 0x94, 0x6b, 0x68, 0x51, 0x46, + 0x30, 0x46, 0xcd, 0xe9, 0x01, 0x87, 0xfe, 0xf7, 0x39, 0xfb, 0x04, 0x46, + 0x00, 0x28, 0xd5, 0xd1, 0x83, 0x46, 0xb8, 0x46, 0x08, 0xee, 0x90, 0x9a, + 0x2a, 0xe0, 0x07, 0x9b, 0x9b, 0x45, 0x80, 0xf2, 0x9f, 0x80, 0x05, 0x9a, + 0x4f, 0xea, 0x0b, 0x13, 0xd3, 0x58, 0x02, 0xeb, 0x0b, 0x19, 0x43, 0x45, + 0x40, 0xf0, 0x96, 0x80, 0x18, 0xee, 0x90, 0x0a, 0xd9, 0xe9, 0x02, 0x12, + 0xfd, 0xf7, 0xec, 0xfd, 0xd9, 0xf8, 0x0c, 0x30, 0x00, 0x22, 0x51, 0x46, + 0x02, 0x93, 0x30, 0x46, 0xd9, 0xf8, 0x08, 0x30, 0xcd, 0xe9, 0x00, 0x73, + 0x6b, 0x68, 0xfe, 0xf7, 0x11, 0xfb, 0x04, 0x46, 0x00, 0x28, 0xad, 0xd1, + 0xd9, 0xf8, 0x04, 0x30, 0x0b, 0xf1, 0x01, 0x0b, 0x98, 0x44, 0xd9, 0xf8, + 0x0c, 0x30, 0x1f, 0x44, 0x2b, 0x6a, 0x23, 0xf0, 0x00, 0x43, 0x04, 0x3b, + 0xbb, 0x42, 0xce, 0xd8, 0x04, 0x23, 0x0d, 0xf1, 0x2c, 0x08, 0x00, 0x22, + 0x51, 0x46, 0x02, 0x93, 0x30, 0x46, 0x6b, 0x68, 0xcd, 0xe9, 0x00, 0x78, + 0xfe, 0xf7, 0xf4, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x90, 0xd1, 0x4f, 0xf0, + 0xff, 0x33, 0x02, 0x46, 0x51, 0x46, 0x30, 0x46, 0x73, 0x61, 0xfe, 0xf7, + 0xbc, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x85, 0xd1, 0x30, 0x68, 0x03, 0x69, + 0x98, 0x47, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x7f, 0xaf, 0x4f, 0xf0, + 0xff, 0x33, 0x0f, 0xaf, 0x02, 0x46, 0x69, 0x68, 0x0f, 0x93, 0x30, 0x46, + 0x2b, 0x6a, 0x00, 0x97, 0x23, 0xf0, 0x00, 0x43, 0x04, 0x3b, 0xff, 0xf7, + 0x81, 0xf8, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x71, 0xaf, 0x0f, 0x9a, + 0x0b, 0x9b, 0x9a, 0x42, 0x5f, 0xd1, 0x06, 0x9b, 0x43, 0xb3, 0x06, 0xf1, + 0x04, 0x09, 0x48, 0x46, 0xfd, 0xf7, 0xc3, 0xfd, 0x00, 0x28, 0x74, 0xd1, + 0x43, 0x46, 0x3a, 0x46, 0x09, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x1b, 0xfd, + 0x00, 0x28, 0x5c, 0xdb, 0x6b, 0xd0, 0x6b, 0x68, 0x42, 0x46, 0x39, 0x46, + 0x30, 0x46, 0x0d, 0x93, 0xab, 0x68, 0x0e, 0x93, 0xf8, 0xf7, 0xbb, 0xfa, + 0x00, 0x28, 0x50, 0xd1, 0x49, 0x46, 0x09, 0xa8, 0xfd, 0xf7, 0x98, 0xfd, + 0x18, 0xb9, 0x6b, 0x68, 0x73, 0x60, 0xab, 0x68, 0xb3, 0x60, 0x30, 0x46, + 0xff, 0xf7, 0x8e, 0xfe, 0x00, 0x28, 0x42, 0xd1, 0x34, 0x69, 0x00, 0x2c, + 0x3f, 0xf4, 0x3e, 0xaf, 0x18, 0xee, 0x10, 0x1a, 0x20, 0x1d, 0xfd, 0xf7, + 0x85, 0xfd, 0x18, 0xb9, 0x6b, 0x68, 0x63, 0x60, 0xab, 0x68, 0xa3, 0x60, + 0x24, 0x68, 0xf0, 0xe7, 0x01, 0x23, 0x42, 0x46, 0x0a, 0x99, 0x30, 0x46, + 0x00, 0x93, 0x0f, 0xab, 0xff, 0xf7, 0x5b, 0xf8, 0x04, 0x46, 0x00, 0x28, + 0x7f, 0xf4, 0x26, 0xaf, 0x01, 0x22, 0x0f, 0xa9, 0x18, 0xee, 0x90, 0x0a, + 0xfd, 0xf7, 0x4a, 0xfd, 0x01, 0x23, 0x22, 0x46, 0x51, 0x46, 0x02, 0x93, + 0x0f, 0xab, 0x30, 0x46, 0xcd, 0xe9, 0x00, 0x73, 0x6b, 0x68, 0xfe, 0xf7, + 0x71, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x0d, 0xaf, 0x08, 0xf1, + 0x01, 0x08, 0x01, 0x37, 0x62, 0xe7, 0x4f, 0xf0, 0xff, 0x33, 0x00, 0x22, + 0x0f, 0xa9, 0x09, 0xa8, 0x33, 0x62, 0x01, 0x23, 0xcd, 0xe9, 0x0f, 0x23, + 0xfd, 0xf7, 0x4e, 0xfd, 0x30, 0xb9, 0x6f, 0xf0, 0x33, 0x00, 0x1b, 0xb0, + 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x18, 0xee, 0x10, 0x1a, + 0x30, 0x46, 0xff, 0xf7, 0x4f, 0xf9, 0x01, 0x23, 0x06, 0x93, 0x00, 0x28, + 0x3f, 0xf4, 0xe6, 0xae, 0xef, 0xe7, 0x3a, 0x46, 0x09, 0xa9, 0x30, 0x46, + 0xff, 0xf7, 0x8e, 0xf8, 0x00, 0x28, 0xe8, 0xdb, 0xa4, 0xd0, 0x6b, 0x68, + 0x39, 0x46, 0x30, 0x46, 0x18, 0x93, 0xab, 0x68, 0x19, 0x93, 0x00, 0x23, + 0x1a, 0x46, 0xff, 0xf7, 0xb6, 0xfe, 0x97, 0xe7, 0x83, 0x69, 0x02, 0x39, + 0x02, 0x3b, 0x8b, 0x42, 0x83, 0xbf, 0x43, 0x89, 0xc0, 0x6a, 0x01, 0xfb, + 0x03, 0x00, 0x00, 0x20, 0x70, 0x47, 0x38, 0xb5, 0x03, 0x6b, 0x05, 0x46, + 0x0c, 0x46, 0x8b, 0x42, 0x0f, 0xd0, 0xfd, 0xf7, 0x23, 0xfe, 0x58, 0xb9, + 0x22, 0x46, 0x01, 0x23, 0x69, 0x6b, 0x68, 0x78, 0xfd, 0xf7, 0xb6, 0xfd, + 0x00, 0x28, 0x1c, 0xbf, 0x4f, 0xf0, 0xff, 0x34, 0x01, 0x20, 0x2c, 0x63, + 0x38, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x01, 0x29, 0xf8, 0xb5, 0x04, 0x46, + 0x0e, 0x46, 0x64, 0xd9, 0x83, 0x69, 0x99, 0x42, 0x61, 0xd2, 0x03, 0x78, + 0x02, 0x2b, 0x30, 0xd0, 0x03, 0x2b, 0x45, 0xd0, 0x01, 0x2b, 0x5a, 0xd1, + 0x01, 0xeb, 0x51, 0x05, 0x83, 0x89, 0x41, 0x6a, 0xb5, 0xfb, 0xf3, 0xf3, + 0x19, 0x44, 0xff, 0xf7, 0xd0, 0xff, 0x10, 0xb1, 0x4f, 0xf0, 0xff, 0x30, + 0xf8, 0xbd, 0xa1, 0x89, 0x6f, 0x1c, 0x20, 0x46, 0xb5, 0xfb, 0xf1, 0xf3, + 0x01, 0xfb, 0x13, 0x55, 0x63, 0x6b, 0xb7, 0xfb, 0xf1, 0xf1, 0x5d, 0x5d, + 0x63, 0x6a, 0x19, 0x44, 0xff, 0xf7, 0xbd, 0xff, 0x00, 0x28, 0xeb, 0xd1, + 0xa2, 0x89, 0xb7, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x73, 0x62, 0x6b, + 0xd0, 0x5c, 0xf3, 0x07, 0x45, 0xea, 0x00, 0x20, 0x4c, 0xbf, 0x00, 0x09, + 0xc0, 0xf3, 0x0b, 0x00, 0xde, 0xe7, 0x83, 0x89, 0x5b, 0x08, 0xb1, 0xfb, + 0xf3, 0xf3, 0x41, 0x6a, 0x19, 0x44, 0xff, 0xf7, 0xa4, 0xff, 0x00, 0x28, + 0xd2, 0xd1, 0xa2, 0x89, 0x76, 0x00, 0xb6, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, + 0x13, 0x66, 0x63, 0x6b, 0x9a, 0x19, 0x98, 0x5d, 0x52, 0x78, 0x40, 0xea, + 0x02, 0x20, 0xc7, 0xe7, 0x83, 0x89, 0x9b, 0x08, 0xb1, 0xfb, 0xf3, 0xf3, + 0x41, 0x6a, 0x19, 0x44, 0xff, 0xf7, 0x8d, 0xff, 0x00, 0x28, 0xbb, 0xd1, + 0xa1, 0x89, 0xb6, 0x00, 0xb6, 0xfb, 0xf1, 0xf0, 0x01, 0xfb, 0x10, 0x66, + 0x60, 0x6b, 0x30, 0x44, 0xfd, 0xf7, 0xd6, 0xfd, 0x20, 0xf0, 0x70, 0x40, + 0xb0, 0xe7, 0x01, 0x20, 0xae, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x1e, 0x46, + 0x03, 0x68, 0x85, 0xb0, 0x0c, 0x46, 0x9b, 0x6f, 0x82, 0x46, 0x91, 0x46, + 0x98, 0x47, 0x03, 0xa9, 0x20, 0x46, 0xfd, 0xf7, 0x68, 0xfd, 0x05, 0x46, + 0x07, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xa3, 0x80, 0x65, 0x7c, 0x0d, 0xbb, + 0x23, 0x7c, 0x13, 0xf0, 0x01, 0x03, 0x00, 0x93, 0x00, 0xf0, 0x9d, 0x80, + 0xe3, 0x68, 0x2f, 0x46, 0x62, 0x69, 0x9b, 0x1a, 0x9e, 0x42, 0x28, 0xbf, + 0x1e, 0x46, 0x9e, 0xb1, 0x03, 0x98, 0x62, 0x69, 0x83, 0x89, 0xb2, 0xfb, + 0xf3, 0xf1, 0x03, 0xfb, 0x11, 0x23, 0x00, 0x2b, 0x69, 0xd1, 0x43, 0x89, + 0x01, 0x3b, 0x0b, 0x40, 0x01, 0x93, 0x1e, 0xd1, 0x8a, 0xb9, 0xa0, 0x68, + 0x01, 0x28, 0x13, 0xd8, 0x02, 0x25, 0x65, 0x74, 0xda, 0xf8, 0x00, 0x30, + 0x50, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x00, 0x2d, 0x7c, 0xd0, 0x28, 0x46, + 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, 0xfd, 0xf7, 0x1b, 0xbd, 0xa1, 0x69, + 0x20, 0x68, 0xff, 0xf7, 0x4c, 0xff, 0xe9, 0xe7, 0x43, 0x1c, 0x03, 0xd1, + 0x01, 0x23, 0x00, 0x9d, 0x63, 0x74, 0xe7, 0xe7, 0xa0, 0x61, 0xdd, 0xf8, + 0x0c, 0xb0, 0xa1, 0x69, 0x58, 0x46, 0xff, 0xf7, 0x1b, 0xff, 0x00, 0x28, + 0xdc, 0xd0, 0x01, 0x9b, 0x03, 0xeb, 0x00, 0x08, 0xbb, 0xf8, 0x0c, 0x30, + 0x9e, 0x42, 0x34, 0xd3, 0x01, 0x99, 0xbb, 0xf8, 0x0a, 0x20, 0x9b, 0xf8, + 0x01, 0x00, 0xb6, 0xfb, 0xf3, 0xf3, 0x19, 0x44, 0x91, 0x42, 0x49, 0x46, + 0x84, 0xbf, 0x01, 0x9b, 0xd3, 0x1a, 0x42, 0x46, 0x01, 0x93, 0xfd, 0xf7, + 0xd1, 0xfc, 0x01, 0x9b, 0x00, 0x28, 0xd7, 0xd1, 0xdd, 0xf8, 0x0c, 0xb0, + 0x9b, 0xf8, 0x03, 0x20, 0x7a, 0xb1, 0xdb, 0xf8, 0x30, 0x00, 0xa0, 0xeb, + 0x08, 0x00, 0x83, 0x42, 0x09, 0xd9, 0xbb, 0xf8, 0x0c, 0x20, 0xdb, 0xf8, + 0x34, 0x10, 0x00, 0xfb, 0x02, 0x90, 0x01, 0x93, 0x11, 0xf0, 0x48, 0xf8, + 0x01, 0x9b, 0xbb, 0xf8, 0x0c, 0x80, 0x03, 0xfb, 0x08, 0xf8, 0x63, 0x69, + 0xa6, 0xeb, 0x08, 0x06, 0x47, 0x44, 0xc1, 0x44, 0x43, 0x44, 0x63, 0x61, + 0x8d, 0xe7, 0xc4, 0xf8, 0x1c, 0x80, 0x03, 0x98, 0x62, 0x69, 0x83, 0x89, + 0xe1, 0x69, 0xb2, 0xfb, 0xf3, 0xf8, 0x03, 0xfb, 0x18, 0x28, 0xa3, 0xeb, + 0x08, 0x03, 0xb3, 0x42, 0x28, 0xbf, 0x33, 0x46, 0x98, 0x46, 0xff, 0xf7, + 0xd6, 0xfe, 0x00, 0x28, 0xa2, 0xd1, 0x03, 0x9a, 0x60, 0x69, 0x91, 0x89, + 0xb0, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x03, 0x51, 0x6b, 0x48, 0x46, + 0x42, 0x46, 0x19, 0x44, 0x11, 0xf0, 0x1a, 0xf8, 0xd5, 0xe7, 0x00, 0x27, + 0x7e, 0xe7, 0x2f, 0x46, 0x07, 0x25, 0x7b, 0xe7, 0x38, 0x46, 0x05, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0x38, 0xb5, 0x00, 0x23, 0x04, 0x46, 0xc3, 0x70, + 0x4f, 0xf0, 0xff, 0x33, 0x03, 0x63, 0xff, 0xf7, 0xb4, 0xfe, 0x00, 0x28, + 0x51, 0xd1, 0x64, 0x6b, 0x23, 0x78, 0x94, 0xf8, 0xff, 0x51, 0x94, 0xf8, + 0xfe, 0x01, 0xeb, 0x2b, 0x40, 0xea, 0x05, 0x25, 0x03, 0xd0, 0x18, 0x33, + 0xdb, 0xb2, 0x01, 0x2b, 0x3c, 0xd8, 0x4a, 0xf6, 0x55, 0x23, 0x9d, 0x42, + 0x07, 0xd1, 0x08, 0x22, 0x21, 0x49, 0x04, 0xf1, 0x52, 0x00, 0x12, 0xf0, + 0x55, 0xfb, 0x00, 0x28, 0x36, 0xd0, 0x22, 0x7b, 0xe3, 0x7a, 0x43, 0xea, + 0x02, 0x23, 0xa3, 0xf5, 0x00, 0x72, 0xb2, 0xf5, 0x60, 0x6f, 0x27, 0xd8, + 0x60, 0x7b, 0x28, 0xb3, 0x59, 0x1e, 0x42, 0x1e, 0x0b, 0x40, 0x02, 0x40, + 0x13, 0x43, 0x1f, 0xd1, 0xe2, 0x7b, 0xa3, 0x7b, 0x53, 0xea, 0x02, 0x23, + 0x1a, 0xd0, 0x23, 0x7c, 0x01, 0x3b, 0x01, 0x2b, 0x16, 0xd8, 0xa2, 0x7c, + 0x63, 0x7c, 0x53, 0xea, 0x02, 0x23, 0x11, 0xd0, 0x22, 0x7d, 0xe3, 0x7c, + 0x43, 0xea, 0x02, 0x23, 0x7f, 0x2b, 0x06, 0xd8, 0x04, 0xf1, 0x20, 0x00, + 0xfd, 0xf7, 0xc4, 0xfc, 0xb0, 0xf5, 0x80, 0x3f, 0x04, 0xd3, 0xe2, 0x7d, + 0xa3, 0x7d, 0x53, 0xea, 0x02, 0x23, 0x08, 0xd1, 0x4a, 0xf6, 0x55, 0x20, + 0x85, 0x42, 0x0c, 0xbf, 0x02, 0x20, 0x03, 0x20, 0x38, 0xbd, 0x04, 0x20, + 0xfc, 0xe7, 0x00, 0x20, 0xfa, 0xe7, 0x00, 0xbf, 0x98, 0xd9, 0x01, 0x08, + 0x2d, 0xe9, 0xf0, 0x4f, 0x00, 0x26, 0x87, 0xb0, 0x0d, 0x46, 0x17, 0x46, + 0x0e, 0x60, 0xfd, 0xf7, 0x5e, 0xfc, 0x00, 0x28, 0xc0, 0xf2, 0x51, 0x81, + 0xb0, 0x4b, 0x53, 0xf8, 0x20, 0x40, 0x00, 0x2c, 0x00, 0xf0, 0x4d, 0x81, + 0x2c, 0x60, 0x23, 0x78, 0xbb, 0xb9, 0x60, 0x70, 0xc0, 0xb2, 0xac, 0x4d, + 0x55, 0xf8, 0x20, 0x00, 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x10, 0xf0, + 0x01, 0x06, 0xc3, 0xb2, 0x40, 0xf0, 0x3f, 0x81, 0x17, 0xf0, 0xfe, 0x0f, + 0x02, 0xd0, 0x5b, 0x07, 0x00, 0xf1, 0x3b, 0x81, 0x60, 0x78, 0x55, 0xf8, + 0x20, 0x30, 0x23, 0xb9, 0x01, 0x26, 0x30, 0x46, 0x07, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0xfd, 0xf7, 0xb1, 0xfb, 0xa0, 0xf5, 0x00, 0x72, 0xa0, 0x81, + 0xb2, 0xf5, 0x60, 0x6f, 0xf2, 0xd8, 0x42, 0x1e, 0x02, 0x42, 0xef, 0xd1, + 0x63, 0x6b, 0x00, 0x2b, 0x00, 0xf0, 0xf2, 0x80, 0x00, 0x21, 0x20, 0x46, + 0xff, 0xf7, 0x58, 0xff, 0x02, 0x28, 0x40, 0xf0, 0xfd, 0x80, 0x65, 0x6b, + 0x02, 0xaf, 0x05, 0xf5, 0xe3, 0x71, 0xb8, 0x46, 0x05, 0xf2, 0x06, 0x25, + 0x08, 0x46, 0xfd, 0xf7, 0x5d, 0xfc, 0x10, 0x31, 0x48, 0xf8, 0x04, 0x0b, + 0x8d, 0x42, 0xf7, 0xd1, 0x00, 0x25, 0x57, 0xf8, 0x04, 0x1b, 0x00, 0x29, + 0x00, 0xf0, 0xde, 0x80, 0x20, 0x46, 0xff, 0xf7, 0x3d, 0xff, 0x01, 0x28, + 0x00, 0xf2, 0xd9, 0x80, 0x65, 0x6b, 0xb4, 0xf8, 0x0c, 0x90, 0x2a, 0x7b, + 0xeb, 0x7a, 0x43, 0xea, 0x02, 0x23, 0x99, 0x45, 0x40, 0xf0, 0xd6, 0x80, + 0xe8, 0x7d, 0xa9, 0x7d, 0x51, 0xea, 0x00, 0x21, 0x04, 0xd1, 0x05, 0xf1, + 0x24, 0x00, 0xfd, 0xf7, 0x39, 0xfc, 0x01, 0x46, 0xe1, 0x61, 0x95, 0xf8, + 0x10, 0xa0, 0xd4, 0xf8, 0x30, 0xb0, 0x0a, 0xf1, 0xff, 0x33, 0x84, 0xf8, + 0x02, 0xa0, 0x01, 0x2b, 0x00, 0xf2, 0xc0, 0x80, 0x6b, 0x7b, 0x63, 0x81, + 0x00, 0x2b, 0x00, 0xf0, 0xbb, 0x80, 0x5a, 0x1e, 0x1a, 0x42, 0x40, 0xf0, + 0xb7, 0x80, 0xaa, 0x7c, 0x95, 0xf8, 0x11, 0x80, 0x48, 0xea, 0x02, 0x28, + 0x0f, 0xfa, 0x88, 0xf2, 0xa4, 0xf8, 0x08, 0x80, 0x00, 0x92, 0x4f, 0xea, + 0x59, 0x12, 0xb8, 0xfb, 0xf2, 0xf7, 0x02, 0xfb, 0x17, 0x82, 0x92, 0xb2, + 0x00, 0x2a, 0x40, 0xf0, 0xa3, 0x80, 0x2a, 0x7d, 0xe8, 0x7c, 0x50, 0xea, + 0x02, 0x20, 0x05, 0xd1, 0x05, 0xf1, 0x20, 0x00, 0x01, 0x93, 0xfd, 0xf7, + 0x05, 0xfc, 0x01, 0x9b, 0x95, 0xf8, 0x0f, 0xc0, 0xaa, 0x7b, 0x52, 0xea, + 0x0c, 0x22, 0x00, 0xf0, 0x91, 0x80, 0x01, 0xfb, 0x0a, 0xfc, 0x17, 0x44, + 0x07, 0xeb, 0x0c, 0x0e, 0x70, 0x45, 0xc0, 0xf0, 0x89, 0x80, 0xa0, 0xeb, + 0x0e, 0x00, 0x98, 0x42, 0xb0, 0xfb, 0xf3, 0xf7, 0xc0, 0xf0, 0x82, 0x80, + 0x58, 0x4b, 0x9f, 0x42, 0x7e, 0xd8, 0x4f, 0xf6, 0xf5, 0x73, 0x9f, 0x42, + 0x40, 0xf2, 0x9d, 0x80, 0x4f, 0xf0, 0x03, 0x0a, 0x02, 0x37, 0x5a, 0x44, + 0x0b, 0xeb, 0x0e, 0x03, 0xba, 0xf1, 0x03, 0x0f, 0xa7, 0x61, 0xc4, 0xf8, + 0x20, 0xb0, 0x62, 0x62, 0xe3, 0x62, 0x74, 0xd1, 0x95, 0xf8, 0x2b, 0x20, + 0x95, 0xf8, 0x2a, 0x30, 0x43, 0xea, 0x02, 0x23, 0x00, 0x9a, 0x1a, 0x43, + 0x13, 0xb2, 0x00, 0x2b, 0x60, 0xd1, 0xbf, 0x00, 0x05, 0xf1, 0x2c, 0x00, + 0xfd, 0xf7, 0xc8, 0xfb, 0xa0, 0x62, 0x09, 0xf1, 0xff, 0x33, 0x1f, 0x44, + 0xb7, 0xfb, 0xf9, 0xf9, 0x89, 0x45, 0x53, 0xd8, 0x4f, 0xf0, 0xff, 0x33, + 0xba, 0xf1, 0x03, 0x0f, 0xc4, 0xe9, 0x04, 0x33, 0x4f, 0xf0, 0x80, 0x03, + 0x23, 0x71, 0x30, 0xd1, 0x95, 0xf8, 0x31, 0x20, 0x95, 0xf8, 0x30, 0x30, + 0x43, 0xea, 0x02, 0x23, 0x01, 0x2b, 0x28, 0xd1, 0x0b, 0xf1, 0x01, 0x01, + 0x20, 0x46, 0xff, 0xf7, 0x54, 0xfd, 0x10, 0xbb, 0x61, 0x6b, 0x20, 0x71, + 0x91, 0xf8, 0xff, 0x21, 0x91, 0xf8, 0xfe, 0x31, 0x43, 0xea, 0x02, 0x23, + 0x4a, 0xf6, 0x55, 0x22, 0x93, 0x42, 0x16, 0xd1, 0x08, 0x46, 0xfd, 0xf7, + 0x99, 0xfb, 0x2f, 0x4b, 0x98, 0x42, 0x10, 0xd1, 0x01, 0xf5, 0xf2, 0x70, + 0xfd, 0xf7, 0x92, 0xfb, 0x2c, 0x4b, 0x98, 0x42, 0x09, 0xd1, 0x01, 0xf5, + 0xf4, 0x70, 0xfd, 0xf7, 0x8b, 0xfb, 0x60, 0x61, 0x01, 0xf5, 0xf6, 0x70, + 0xfd, 0xf7, 0x86, 0xfb, 0x20, 0x61, 0x27, 0x4a, 0x84, 0xf8, 0x00, 0xa0, + 0x13, 0x88, 0x01, 0x33, 0x9b, 0xb2, 0x13, 0x80, 0xe3, 0x80, 0xfa, 0xe6, + 0x10, 0xf0, 0x18, 0xfe, 0x60, 0x63, 0x00, 0x28, 0x7f, 0xf4, 0x08, 0xaf, + 0x11, 0x26, 0xf2, 0xe6, 0x03, 0x20, 0x01, 0x35, 0x04, 0x2d, 0x7f, 0xf4, + 0x18, 0xaf, 0x04, 0x28, 0x3f, 0xf4, 0xea, 0xae, 0x0d, 0x26, 0xe8, 0xe6, + 0x04, 0x28, 0x3f, 0xf4, 0xe5, 0xae, 0x01, 0x28, 0x7f, 0xf6, 0x18, 0xaf, + 0xf6, 0xe7, 0xb8, 0xf1, 0x00, 0x0f, 0xf3, 0xd0, 0xba, 0xf1, 0x02, 0x0f, + 0x4f, 0xea, 0x47, 0x03, 0x62, 0x44, 0x1a, 0xbf, 0xdb, 0x19, 0x07, 0xf0, + 0x01, 0x07, 0x1f, 0x46, 0xa2, 0x62, 0x18, 0xbf, 0x07, 0xeb, 0x53, 0x07, + 0x89, 0xe7, 0x0b, 0x26, 0xcd, 0xe6, 0x0c, 0x26, 0xcb, 0xe6, 0x03, 0x26, + 0xc9, 0xe6, 0x0a, 0x26, 0xc7, 0xe6, 0x40, 0xf6, 0xf5, 0x7a, 0x57, 0x45, + 0x8c, 0xbf, 0x4f, 0xf0, 0x02, 0x0a, 0x4f, 0xf0, 0x01, 0x0a, 0x5b, 0xe7, + 0xf4, 0x14, 0x02, 0x24, 0xa8, 0x15, 0x02, 0x24, 0xf5, 0xff, 0xff, 0x0f, + 0x52, 0x52, 0x61, 0x41, 0x72, 0x72, 0x41, 0x61, 0xf0, 0x14, 0x02, 0x24, + 0x2d, 0xe9, 0xf7, 0x4f, 0x15, 0x46, 0x80, 0x46, 0x28, 0x22, 0x00, 0x21, + 0x28, 0x46, 0x10, 0xf0, 0x37, 0xfe, 0xd8, 0xf8, 0x00, 0x30, 0x40, 0x46, + 0x9b, 0x6f, 0x98, 0x47, 0x08, 0xf1, 0x4c, 0x03, 0x00, 0x22, 0x01, 0xa9, + 0x68, 0x46, 0x00, 0x93, 0xff, 0xf7, 0x70, 0xfe, 0x06, 0x46, 0x04, 0x46, + 0x00, 0x28, 0x6e, 0xd1, 0xdd, 0xf8, 0x04, 0x90, 0xd9, 0xe9, 0x05, 0x7a, + 0xaa, 0xf1, 0x02, 0x03, 0x9f, 0x42, 0x1c, 0xd9, 0x99, 0xf8, 0x00, 0x60, + 0x01, 0x2e, 0x35, 0xd1, 0x4f, 0xf0, 0x02, 0x0a, 0x07, 0x46, 0x51, 0x46, + 0x48, 0x46, 0xff, 0xf7, 0xca, 0xfc, 0x43, 0x1c, 0x59, 0xd0, 0x01, 0x28, + 0x56, 0xd0, 0x00, 0xb9, 0x01, 0x37, 0x01, 0x9b, 0x0a, 0xf1, 0x01, 0x0a, + 0x9b, 0x69, 0x9a, 0x45, 0xef, 0xd3, 0x01, 0x9b, 0x1a, 0x79, 0x5f, 0x61, + 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x71, 0xb9, 0xf8, 0x0c, 0x30, 0x00, 0x24, + 0xd9, 0xf8, 0x18, 0x20, 0x40, 0x46, 0xc5, 0xe9, 0x00, 0x33, 0x02, 0x3a, + 0xb9, 0xf8, 0x0a, 0x30, 0x5a, 0x43, 0x5f, 0x43, 0x0c, 0x23, 0x6b, 0x62, + 0xd8, 0xf8, 0x00, 0x30, 0xc5, 0xe9, 0x02, 0x24, 0xdb, 0x6f, 0xc5, 0xe9, + 0x04, 0x74, 0xc5, 0xe9, 0x06, 0x74, 0x98, 0x47, 0x20, 0x46, 0x03, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0xd9, 0xf8, 0x24, 0x10, 0x07, 0x46, 0x3c, 0xb9, + 0x01, 0x98, 0x01, 0xf1, 0x01, 0x0b, 0xff, 0xf7, 0x7a, 0xfc, 0x06, 0x46, + 0x08, 0xbb, 0x59, 0x46, 0x01, 0x9e, 0x32, 0x78, 0x73, 0x6b, 0x02, 0x2a, + 0x03, 0xeb, 0x04, 0x00, 0x0f, 0xd1, 0x1b, 0x5d, 0x02, 0x34, 0x42, 0x78, + 0x53, 0xea, 0x02, 0x23, 0x08, 0xbf, 0x01, 0x37, 0xb3, 0x89, 0xba, 0xf1, + 0x01, 0x0a, 0xb4, 0xfb, 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x44, 0xe0, 0xd1, + 0xb9, 0xe7, 0xfd, 0xf7, 0xb3, 0xfa, 0x30, 0xf0, 0x70, 0x43, 0x04, 0xf1, + 0x04, 0x04, 0x08, 0xbf, 0x01, 0x37, 0xed, 0xe7, 0x02, 0x26, 0xd8, 0xf8, + 0x00, 0x30, 0x40, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x30, 0x46, 0x03, 0xb0, + 0xbd, 0xe8, 0xf0, 0x4f, 0xfd, 0xf7, 0x2e, 0xba, 0x7f, 0xb5, 0xcd, 0xe9, + 0x00, 0x10, 0x03, 0xa8, 0x14, 0x46, 0x03, 0x91, 0xfd, 0xf7, 0x51, 0xfa, + 0x05, 0x1e, 0x19, 0xdb, 0x0d, 0x4e, 0x56, 0xf8, 0x25, 0x20, 0x22, 0xb1, + 0x00, 0x23, 0x50, 0x6b, 0x13, 0x70, 0x10, 0xf0, 0x33, 0xfd, 0x01, 0x9b, + 0x13, 0xb1, 0x00, 0x22, 0x1a, 0x70, 0x5a, 0x63, 0x46, 0xf8, 0x25, 0x30, + 0x2c, 0xb1, 0x00, 0x22, 0x01, 0xa9, 0x68, 0x46, 0xff, 0xf7, 0xd2, 0xfd, + 0x04, 0x46, 0x20, 0x46, 0x04, 0xb0, 0x70, 0xbd, 0x0b, 0x24, 0xfa, 0xe7, + 0xf4, 0x14, 0x02, 0x24, 0xf8, 0xb5, 0x03, 0x68, 0x04, 0x46, 0x9b, 0x6f, + 0x98, 0x47, 0x23, 0x6d, 0x01, 0x33, 0x07, 0xd1, 0x23, 0x68, 0x6f, 0xf0, + 0x15, 0x05, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, 0xf8, 0xbd, + 0x00, 0x22, 0x04, 0xf1, 0x4c, 0x01, 0x10, 0x4f, 0x10, 0x46, 0xff, 0xf7, + 0xc1, 0xff, 0x23, 0x6d, 0x06, 0x46, 0x57, 0xf8, 0x23, 0x00, 0x03, 0x68, + 0xdb, 0x68, 0x98, 0x47, 0x23, 0x68, 0x05, 0x46, 0x18, 0xb1, 0xdb, 0x6f, + 0x20, 0x46, 0x98, 0x47, 0xe8, 0xe7, 0x22, 0x6d, 0xdb, 0x6f, 0x47, 0xf8, + 0x22, 0x00, 0x4f, 0xf0, 0xff, 0x32, 0x20, 0x46, 0x22, 0x65, 0x98, 0x47, + 0x30, 0x46, 0xbd, 0xe8, 0xf8, 0x40, 0xfd, 0xf7, 0xd3, 0xb9, 0x00, 0xbf, + 0xa8, 0x15, 0x02, 0x24, 0x08, 0x4b, 0x10, 0xb5, 0x03, 0x60, 0x8c, 0x33, + 0x04, 0x46, 0x43, 0x60, 0xff, 0xf7, 0xc2, 0xff, 0x05, 0x4b, 0x20, 0x46, + 0x23, 0x60, 0x2c, 0x33, 0x40, 0xf8, 0x04, 0x3f, 0x04, 0xf0, 0x2e, 0xff, + 0x20, 0x46, 0x10, 0xbd, 0x1c, 0xd7, 0x01, 0x08, 0xb8, 0xd7, 0x01, 0x08, + 0xa0, 0xf1, 0x04, 0x00, 0xff, 0xf7, 0xe6, 0xbf, 0x10, 0xb5, 0x04, 0x46, + 0xff, 0xf7, 0xe2, 0xff, 0x20, 0x46, 0x10, 0xf0, 0xc7, 0xfc, 0x20, 0x46, + 0x10, 0xbd, 0xa0, 0xf1, 0x04, 0x00, 0xff, 0xf7, 0xf3, 0xbf, 0x00, 0x00, + 0x03, 0x68, 0x73, 0xb5, 0x04, 0x46, 0x9b, 0x6f, 0x01, 0x92, 0x0d, 0x46, + 0x98, 0x47, 0x23, 0x6d, 0x01, 0x9a, 0x01, 0x33, 0x07, 0xd0, 0x23, 0x68, + 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x6f, 0xf0, 0x15, 0x00, 0x02, 0xb0, + 0x70, 0xbd, 0x16, 0x48, 0x00, 0x23, 0x06, 0x46, 0x50, 0xf8, 0x04, 0x1b, + 0xd9, 0xb9, 0x46, 0xf8, 0x23, 0x50, 0x04, 0xf1, 0x14, 0x00, 0x23, 0x65, + 0x30, 0x33, 0x84, 0xf8, 0x4e, 0x10, 0x04, 0xf1, 0x4c, 0x01, 0x84, 0xf8, + 0x4c, 0x30, 0x3a, 0x23, 0x84, 0xf8, 0x4d, 0x30, 0xff, 0xf7, 0x50, 0xff, + 0x23, 0x68, 0x05, 0x46, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, + 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfd, 0xf7, 0x73, 0xb9, 0x01, 0x33, + 0x04, 0x2b, 0xdd, 0xd1, 0x23, 0x68, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, + 0x6f, 0xf0, 0x0b, 0x00, 0xd1, 0xe7, 0x00, 0xbf, 0xa8, 0x15, 0x02, 0x24, + 0x01, 0x29, 0x2d, 0xe9, 0xf8, 0x43, 0x04, 0x46, 0x0e, 0x46, 0x17, 0x46, + 0x40, 0xf2, 0x83, 0x80, 0x83, 0x69, 0x8b, 0x42, 0x7f, 0xd9, 0x03, 0x78, + 0x02, 0x2b, 0x45, 0xd0, 0x03, 0x2b, 0x5a, 0xd0, 0x01, 0x2b, 0x78, 0xd1, + 0x01, 0xeb, 0x51, 0x09, 0x83, 0x89, 0x41, 0x6a, 0xb9, 0xfb, 0xf3, 0xf3, + 0x19, 0x44, 0xff, 0xf7, 0x68, 0xfb, 0x05, 0x46, 0x60, 0xbb, 0xa3, 0x89, + 0x16, 0xf0, 0x01, 0x06, 0x60, 0x6b, 0x09, 0xf1, 0x01, 0x08, 0xb9, 0xfb, + 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x92, 0x0f, 0xbf, 0xfb, 0xb2, 0x83, 0x5c, + 0x03, 0xf0, 0x0f, 0x01, 0x3b, 0x01, 0x1c, 0xbf, 0x03, 0xf0, 0xf0, 0x03, + 0x0b, 0x43, 0x83, 0x54, 0x01, 0x23, 0x61, 0x6a, 0x20, 0x46, 0xe3, 0x70, + 0xa3, 0x89, 0xb8, 0xfb, 0xf3, 0xf3, 0x19, 0x44, 0xff, 0xf7, 0x47, 0xfb, + 0x05, 0x46, 0x58, 0xb9, 0xa3, 0x89, 0x61, 0x6b, 0xb8, 0xfb, 0xf3, 0xf0, + 0x03, 0xfb, 0x10, 0x80, 0x3e, 0xb1, 0xc7, 0xf3, 0x07, 0x17, 0x0f, 0x54, + 0x01, 0x23, 0xe3, 0x70, 0x28, 0x46, 0xbd, 0xe8, 0xf8, 0x83, 0x0b, 0x5c, + 0xc7, 0xf3, 0x03, 0x27, 0x23, 0xf0, 0x0f, 0x03, 0x1f, 0x43, 0xf2, 0xe7, + 0x83, 0x89, 0x5b, 0x08, 0xb1, 0xfb, 0xf3, 0xf3, 0x41, 0x6a, 0x19, 0x44, + 0xff, 0xf7, 0x27, 0xfb, 0x05, 0x46, 0x00, 0x28, 0xea, 0xd1, 0xa2, 0x89, + 0x76, 0x00, 0xb6, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x66, 0x63, 0x6b, + 0x9f, 0x55, 0x98, 0x19, 0x3f, 0x12, 0x47, 0x70, 0xdc, 0xe7, 0x83, 0x89, + 0x9b, 0x08, 0xb1, 0xfb, 0xf3, 0xf3, 0x41, 0x6a, 0x19, 0x44, 0xff, 0xf7, + 0x10, 0xfb, 0x05, 0x46, 0x00, 0x28, 0xd3, 0xd1, 0xa3, 0x89, 0xb6, 0x00, + 0x27, 0xf0, 0x70, 0x47, 0xb6, 0xfb, 0xf3, 0xf1, 0x03, 0xfb, 0x11, 0x61, + 0x66, 0x6b, 0x0e, 0x44, 0x30, 0x46, 0xfd, 0xf7, 0x55, 0xf9, 0x00, 0xf0, + 0x70, 0x40, 0x47, 0xea, 0x00, 0x01, 0x30, 0x46, 0xfd, 0xf7, 0x46, 0xf9, + 0xbc, 0xe7, 0x02, 0x25, 0xbc, 0xe7, 0x2d, 0xe9, 0xf0, 0x41, 0x80, 0x46, + 0x05, 0x68, 0x0f, 0x46, 0x49, 0xb9, 0x2e, 0x69, 0xc6, 0xb1, 0xab, 0x69, + 0xb3, 0x42, 0x98, 0xbf, 0x01, 0x26, 0x6b, 0x69, 0xa3, 0xb9, 0x00, 0x24, + 0x06, 0xe0, 0x28, 0x46, 0xff, 0xf7, 0xfb, 0xfa, 0x01, 0x28, 0x04, 0x46, + 0x03, 0xd8, 0x01, 0x24, 0x20, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x42, 0x1c, + 0x51, 0xd0, 0xab, 0x69, 0x83, 0x42, 0xf7, 0xd8, 0x3e, 0x46, 0xea, 0xe7, + 0x01, 0x26, 0xe8, 0xe7, 0xbe, 0x42, 0x15, 0xd1, 0xab, 0x69, 0x74, 0x1c, + 0xd8, 0xf8, 0x00, 0x00, 0xa3, 0x42, 0x98, 0xbf, 0x02, 0x24, 0x21, 0x46, + 0xff, 0xf7, 0xdf, 0xfa, 0x01, 0x28, 0xe4, 0xd0, 0x43, 0x1c, 0x3a, 0xd0, + 0xd8, 0xb1, 0x2b, 0x69, 0x01, 0x2b, 0x03, 0xd9, 0xaa, 0x69, 0x93, 0x42, + 0x38, 0xbf, 0x1e, 0x46, 0x34, 0x46, 0x01, 0x34, 0xab, 0x69, 0xa3, 0x42, + 0x02, 0xd8, 0x01, 0x2e, 0xcb, 0xd9, 0x02, 0x24, 0x21, 0x46, 0xd8, 0xf8, + 0x00, 0x00, 0xff, 0xf7, 0xc6, 0xfa, 0x40, 0xb1, 0x01, 0x28, 0xca, 0xd0, + 0x01, 0x30, 0x20, 0xd0, 0xb4, 0x42, 0xec, 0xd1, 0xbd, 0xe7, 0x00, 0x2c, + 0xe8, 0xd0, 0x4f, 0xf0, 0xff, 0x32, 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, + 0x1b, 0xff, 0x90, 0xb9, 0x57, 0xb9, 0x2c, 0x61, 0xd5, 0xe9, 0x05, 0x32, + 0x02, 0x3a, 0x93, 0x42, 0x10, 0xd9, 0x2b, 0x79, 0x43, 0xf0, 0x01, 0x03, + 0x2b, 0x71, 0xb1, 0xe7, 0x22, 0x46, 0x39, 0x46, 0x28, 0x46, 0xff, 0xf7, + 0x09, 0xff, 0x00, 0x28, 0xed, 0xd0, 0x01, 0x28, 0xa7, 0xd1, 0x4f, 0xf0, + 0xff, 0x34, 0xa5, 0xe7, 0x01, 0x3b, 0x6b, 0x61, 0xeb, 0xe7, 0x2d, 0xe9, + 0xf3, 0x41, 0x0d, 0x46, 0x01, 0xa9, 0x04, 0x46, 0xfd, 0xf7, 0x75, 0xf8, + 0x06, 0x46, 0x00, 0x28, 0x63, 0xd1, 0x66, 0x7c, 0x00, 0x2e, 0x60, 0xd1, + 0xe3, 0x68, 0xab, 0x42, 0x04, 0xd2, 0x22, 0x7c, 0x12, 0xf0, 0x02, 0x0f, + 0x08, 0xbf, 0x1d, 0x46, 0x00, 0x22, 0x63, 0x69, 0x62, 0x61, 0xb5, 0xb9, + 0x00, 0x20, 0xe2, 0x68, 0x63, 0x69, 0x93, 0x42, 0x81, 0xbf, 0x22, 0x7c, + 0xe3, 0x60, 0x42, 0xf0, 0x40, 0x02, 0x22, 0x74, 0x01, 0x9a, 0x91, 0x89, + 0xb3, 0xfb, 0xf1, 0xf2, 0x01, 0xfb, 0x12, 0x33, 0x00, 0x2b, 0x42, 0xd0, + 0xe3, 0x69, 0x83, 0x42, 0x18, 0xbf, 0xe0, 0x61, 0x3d, 0xe0, 0x01, 0x9a, + 0x51, 0x89, 0x97, 0x89, 0x4f, 0x43, 0x73, 0xb3, 0x01, 0x3b, 0x6a, 0x1e, + 0xb3, 0xfb, 0xf7, 0xf1, 0xb2, 0xfb, 0xf7, 0xf2, 0x8a, 0x42, 0x26, 0xd3, + 0x7a, 0x42, 0xa1, 0x69, 0x13, 0x40, 0xed, 0x1a, 0x63, 0x61, 0x00, 0x29, + 0xd4, 0xd0, 0xbd, 0x42, 0x63, 0x69, 0x0c, 0xd9, 0x3b, 0x44, 0xa5, 0xeb, + 0x07, 0x08, 0x63, 0x61, 0x23, 0x7c, 0x9a, 0x07, 0x2a, 0xd5, 0x20, 0x46, + 0xff, 0xf7, 0x3b, 0xff, 0x05, 0x46, 0x48, 0xbb, 0x01, 0x46, 0x63, 0x69, + 0x01, 0x98, 0x2b, 0x44, 0x63, 0x61, 0x83, 0x89, 0xb5, 0xfb, 0xf3, 0xf2, + 0x03, 0xfb, 0x12, 0x55, 0x00, 0x2d, 0xb9, 0xd0, 0xff, 0xf7, 0x16, 0xfa, + 0x48, 0xb1, 0x10, 0x44, 0xb5, 0xe7, 0xa1, 0x68, 0x81, 0xb9, 0x20, 0x46, + 0xff, 0xf7, 0x23, 0xff, 0x01, 0x28, 0x01, 0x46, 0x05, 0xd1, 0x02, 0x26, + 0x66, 0x74, 0x30, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x48, 0x1c, + 0x01, 0xd1, 0x01, 0x26, 0xf6, 0xe7, 0xa1, 0x60, 0xa1, 0x61, 0xc8, 0xe7, + 0x20, 0x68, 0xff, 0xf7, 0x1e, 0xfa, 0x05, 0x46, 0x6b, 0x1c, 0xf4, 0xd0, + 0x01, 0x2d, 0xea, 0xd9, 0x01, 0x9b, 0x9b, 0x69, 0xab, 0x42, 0xe6, 0xd9, + 0x29, 0x46, 0xa5, 0x61, 0x45, 0x46, 0xba, 0xe7, 0xf8, 0xb5, 0x1f, 0x46, + 0x03, 0x68, 0x06, 0x46, 0x0d, 0x46, 0x9b, 0x6f, 0x14, 0x46, 0x98, 0x47, + 0x02, 0x2f, 0x11, 0xd1, 0xeb, 0x68, 0x1c, 0x44, 0x21, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0x67, 0xff, 0x33, 0x68, 0x04, 0x46, 0x30, 0x46, 0xdb, 0x6f, + 0x6d, 0x69, 0x98, 0x47, 0x44, 0xb1, 0x20, 0x46, 0xbd, 0xe8, 0xf8, 0x40, + 0xfc, 0xf7, 0xc0, 0xbf, 0x01, 0x2f, 0xed, 0xd1, 0x6b, 0x69, 0xea, 0xe7, + 0x28, 0x46, 0xf8, 0xbd, 0x03, 0x69, 0x2d, 0xe9, 0xf0, 0x47, 0x03, 0xf1, + 0x20, 0x08, 0x05, 0x46, 0x89, 0x46, 0x04, 0x68, 0xb8, 0xf5, 0x00, 0x1f, + 0x24, 0xbf, 0x00, 0x23, 0x83, 0x61, 0x83, 0x69, 0x83, 0xb1, 0xa2, 0x89, + 0xb8, 0xfb, 0xf2, 0xf0, 0x02, 0xfb, 0x10, 0x82, 0x00, 0x2a, 0x56, 0xd1, + 0x01, 0x33, 0x69, 0x69, 0xab, 0x61, 0x39, 0xb9, 0x23, 0x89, 0xb3, 0xeb, + 0x58, 0x1f, 0x4e, 0xd8, 0x00, 0x23, 0xab, 0x61, 0x04, 0x20, 0x0a, 0xe0, + 0x67, 0x89, 0x01, 0x3f, 0x07, 0x40, 0x46, 0xd1, 0x20, 0x46, 0xff, 0xf7, + 0xc6, 0xf9, 0x01, 0x28, 0x06, 0x46, 0x02, 0xd8, 0x02, 0x20, 0xbd, 0xe8, + 0xf0, 0x87, 0x42, 0x1c, 0x01, 0xd1, 0x01, 0x20, 0xf9, 0xe7, 0xa3, 0x69, + 0x83, 0x42, 0x30, 0xd8, 0xb9, 0xf1, 0x00, 0x0f, 0xe4, 0xd0, 0x69, 0x69, + 0x28, 0x46, 0xff, 0xf7, 0xa4, 0xfe, 0x06, 0x46, 0x00, 0x28, 0x38, 0xd0, + 0x01, 0x28, 0xe9, 0xd0, 0x43, 0x1c, 0xec, 0xd0, 0x20, 0x46, 0xfc, 0xf7, + 0xbb, 0xff, 0x82, 0x46, 0x00, 0x28, 0xe6, 0xd1, 0x31, 0x46, 0x20, 0x46, + 0xff, 0xf7, 0x7e, 0xf9, 0x51, 0x46, 0x20, 0x63, 0x81, 0x46, 0xa2, 0x89, + 0x60, 0x6b, 0x10, 0xf0, 0xe3, 0xfa, 0xd4, 0xf8, 0x34, 0xa0, 0x63, 0x89, + 0xbb, 0x42, 0x09, 0xd9, 0x01, 0x23, 0x09, 0xeb, 0x07, 0x02, 0x51, 0x46, + 0x60, 0x78, 0xfc, 0xf7, 0x11, 0xff, 0x08, 0xb9, 0x01, 0x37, 0xf2, 0xe7, + 0x63, 0x89, 0x9f, 0x42, 0xc9, 0xd1, 0x31, 0x46, 0x20, 0x46, 0x6e, 0x61, + 0xff, 0xf7, 0x60, 0xf9, 0xa8, 0x61, 0xa2, 0x89, 0x00, 0x20, 0xc5, 0xf8, + 0x10, 0x80, 0xb8, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x88, 0x63, 0x6b, + 0x43, 0x44, 0xeb, 0x61, 0xb3, 0xe7, 0x07, 0x20, 0xb1, 0xe7, 0x37, 0xb5, + 0x0d, 0x46, 0x01, 0xa9, 0x04, 0x46, 0xfc, 0xf7, 0x50, 0xff, 0x18, 0xb9, + 0x20, 0x46, 0x1d, 0xb9, 0xf7, 0xf7, 0xbe, 0xfa, 0x03, 0xb0, 0x30, 0xbd, + 0xf7, 0xf7, 0xee, 0xfa, 0x10, 0xf0, 0xfb, 0x03, 0xf8, 0xd1, 0x6b, 0x72, + 0xa3, 0x69, 0x1b, 0xb1, 0x29, 0x46, 0x20, 0x46, 0xfc, 0xf7, 0xa0, 0xff, + 0x00, 0x21, 0x20, 0x46, 0xff, 0xf7, 0x68, 0xff, 0x04, 0x28, 0x08, 0xbf, + 0x00, 0x20, 0xe9, 0xe7, 0x03, 0x68, 0x70, 0xb5, 0x0d, 0x46, 0x04, 0x46, + 0x9b, 0x6f, 0x98, 0x47, 0x28, 0x46, 0x00, 0x21, 0xff, 0xf7, 0xd5, 0xff, + 0x23, 0x68, 0x20, 0x46, 0xdb, 0x6f, 0xbd, 0xe8, 0x70, 0x40, 0x18, 0x47, + 0x03, 0x68, 0xf0, 0xb5, 0x16, 0x46, 0x0f, 0x69, 0x87, 0xb0, 0x9b, 0x6f, + 0x05, 0x46, 0x0c, 0x46, 0x98, 0x47, 0xb7, 0x42, 0x09, 0xdd, 0x00, 0x21, + 0x20, 0x46, 0xff, 0xf7, 0xc0, 0xff, 0x2b, 0x68, 0x28, 0x46, 0xdb, 0x6f, + 0x98, 0x47, 0x07, 0xb0, 0xf0, 0xbd, 0xb7, 0x42, 0xf7, 0xda, 0x69, 0x46, + 0x20, 0x46, 0xff, 0xf7, 0xb4, 0xff, 0x27, 0x69, 0x00, 0x28, 0xf0, 0xd1, + 0x9d, 0xf8, 0x09, 0x30, 0x00, 0x2b, 0xf2, 0xd1, 0xeb, 0xe7, 0x03, 0x68, + 0x70, 0xb5, 0x0e, 0x46, 0x86, 0xb0, 0x04, 0x46, 0x9b, 0x6f, 0x15, 0x46, + 0x98, 0x47, 0x30, 0x46, 0x69, 0x46, 0xff, 0xf7, 0xa0, 0xff, 0x23, 0x68, + 0x06, 0x46, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x2e, 0xb1, 0x30, 0x46, + 0x06, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfc, 0xf7, 0xd3, 0xbe, 0x9d, 0xf8, + 0x09, 0x00, 0x78, 0xb1, 0x9d, 0xf8, 0x08, 0x30, 0x0c, 0x22, 0x0d, 0xf1, + 0x09, 0x01, 0x28, 0x46, 0x13, 0xf0, 0x10, 0x0f, 0x14, 0xbf, 0x03, 0x23, + 0x05, 0x23, 0x85, 0xf8, 0x00, 0x31, 0x11, 0xf0, 0x83, 0xfe, 0x01, 0x20, + 0x06, 0xb0, 0x70, 0xbd, 0x2d, 0xe9, 0xf7, 0x4f, 0x04, 0x46, 0xd0, 0xf8, + 0x00, 0x90, 0x0d, 0x46, 0x11, 0xf8, 0x01, 0x3b, 0x2f, 0x2b, 0xfa, 0xd0, + 0x5c, 0x2b, 0xf8, 0xd0, 0x00, 0x23, 0xa3, 0x60, 0x2b, 0x78, 0x1f, 0x2b, + 0x25, 0xd9, 0x04, 0xf1, 0x20, 0x07, 0x4f, 0xf0, 0x20, 0x3b, 0xc5, 0xf1, + 0x02, 0x03, 0x05, 0xf1, 0xff, 0x3a, 0x00, 0x26, 0x4f, 0xf0, 0x08, 0x08, + 0x00, 0x93, 0x51, 0x4a, 0x51, 0x4b, 0xc7, 0xf8, 0x04, 0xb0, 0xc7, 0xf8, + 0x00, 0xb0, 0xc7, 0xf8, 0x07, 0xb0, 0x00, 0x99, 0x01, 0xeb, 0x0a, 0x00, + 0x1a, 0xf8, 0x01, 0x1f, 0x20, 0x29, 0x2e, 0xd9, 0x2f, 0x29, 0x01, 0xd0, + 0x5c, 0x29, 0x0f, 0xd1, 0x2b, 0x5c, 0x2f, 0x2b, 0x01, 0xd0, 0x5c, 0x2b, + 0x25, 0xd1, 0x01, 0x30, 0xf8, 0xe7, 0x80, 0x23, 0x20, 0x46, 0x84, 0xf8, + 0x2b, 0x30, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, 0xf7, 0xf7, 0x08, 0xba, + 0x2e, 0x29, 0x76, 0xd0, 0xb0, 0x45, 0x72, 0xd9, 0x08, 0x06, 0x18, 0x46, + 0x44, 0xbf, 0x01, 0xf0, 0x7f, 0x01, 0x51, 0x5c, 0x01, 0x91, 0x11, 0xf0, + 0x15, 0xfe, 0x00, 0x28, 0x67, 0xd1, 0x01, 0x99, 0x38, 0x4b, 0xa1, 0xf1, + 0x61, 0x00, 0x36, 0x4a, 0x19, 0x28, 0x9c, 0xbf, 0x20, 0x39, 0xc9, 0xb2, + 0xb9, 0x55, 0x01, 0x36, 0xc9, 0xe7, 0x05, 0x44, 0x00, 0x2e, 0x58, 0xd0, + 0x94, 0xf8, 0x20, 0x30, 0xe5, 0x2b, 0x04, 0xbf, 0x05, 0x23, 0x84, 0xf8, + 0x20, 0x30, 0x20, 0x29, 0x28, 0xd9, 0x2b, 0x78, 0x21, 0x2b, 0x34, 0xbf, + 0x04, 0x23, 0x00, 0x23, 0x20, 0x46, 0x84, 0xf8, 0x2b, 0x30, 0xd4, 0xf8, + 0x00, 0x80, 0xf7, 0xf7, 0xd5, 0xf9, 0x06, 0x46, 0xe8, 0xb9, 0xa1, 0x69, + 0x40, 0x46, 0xff, 0xf7, 0x62, 0xf8, 0x06, 0x46, 0xb8, 0xb9, 0xe0, 0x69, + 0x03, 0x78, 0x9b, 0xb1, 0xc3, 0x7a, 0x03, 0xf0, 0x3f, 0x03, 0xa3, 0x71, + 0xc6, 0x7a, 0x16, 0xf0, 0x08, 0x06, 0x04, 0xd1, 0x0b, 0x22, 0x39, 0x46, + 0x11, 0xf0, 0x0c, 0xfd, 0x38, 0xb1, 0x00, 0x21, 0x20, 0x46, 0xff, 0xf7, + 0x75, 0xfe, 0xe2, 0xe7, 0x04, 0x23, 0xd9, 0xe7, 0x04, 0x26, 0x94, 0xf8, + 0x2b, 0x30, 0x4e, 0xb1, 0x04, 0x2e, 0x03, 0xd1, 0x13, 0xf0, 0x04, 0x0f, + 0x08, 0xbf, 0x05, 0x26, 0x30, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, + 0x5a, 0x07, 0xf9, 0xd4, 0xa3, 0x79, 0xdb, 0x06, 0x0f, 0xd5, 0xb9, 0xf8, + 0x0c, 0x10, 0x22, 0x69, 0x99, 0xf8, 0x00, 0x00, 0xb2, 0xfb, 0xf1, 0xf3, + 0x01, 0xfb, 0x13, 0x23, 0xd9, 0xf8, 0x34, 0x10, 0x19, 0x44, 0xfc, 0xf7, + 0x13, 0xfe, 0xa0, 0x60, 0x5f, 0xe7, 0x05, 0x26, 0xe4, 0xe7, 0x06, 0x26, + 0xe2, 0xe7, 0xb8, 0xf1, 0x0b, 0x0f, 0xfa, 0xd0, 0x08, 0x26, 0x4f, 0xf0, + 0x0b, 0x08, 0x64, 0xe7, 0xd5, 0xd9, 0x01, 0x08, 0xa1, 0xd9, 0x01, 0x08, + 0x2d, 0xe9, 0xf7, 0x4f, 0x0c, 0x46, 0x80, 0x46, 0x11, 0x46, 0x05, 0x68, + 0x01, 0x2c, 0x5a, 0xd9, 0xab, 0x69, 0xa3, 0x42, 0x57, 0xd9, 0x62, 0xb9, + 0x27, 0x46, 0xdf, 0xf8, 0xb4, 0x90, 0x21, 0x46, 0xd8, 0xf8, 0x00, 0x00, + 0x26, 0x46, 0xff, 0xf7, 0x1a, 0xf8, 0x04, 0x46, 0x58, 0xb9, 0x00, 0x20, + 0x06, 0xe0, 0x4f, 0xf0, 0xff, 0x32, 0x28, 0x46, 0xff, 0xf7, 0x76, 0xfc, + 0x00, 0x28, 0xeb, 0xd0, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x28, + 0x3d, 0xd0, 0x43, 0x1c, 0x3d, 0xd0, 0x00, 0x22, 0x31, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0x68, 0xfc, 0x00, 0x28, 0xf1, 0xd1, 0xd5, 0xe9, 0x05, 0x32, + 0x02, 0x3a, 0x93, 0x42, 0x05, 0xd2, 0x01, 0x33, 0x6b, 0x61, 0x2b, 0x79, + 0x43, 0xf0, 0x01, 0x03, 0x2b, 0x71, 0x73, 0x1c, 0xa3, 0x42, 0x22, 0xd0, + 0x95, 0xf8, 0x01, 0xb0, 0x59, 0xf8, 0x2b, 0x30, 0xe3, 0xb1, 0x39, 0x46, + 0x28, 0x46, 0xfe, 0xf7, 0xc7, 0xff, 0x31, 0x46, 0x82, 0x46, 0x28, 0x46, + 0xfe, 0xf7, 0xc2, 0xff, 0x6f, 0x89, 0x06, 0x46, 0x58, 0x46, 0xfc, 0xf7, + 0x53, 0xfd, 0x02, 0x46, 0x3e, 0x44, 0x59, 0xf8, 0x2b, 0x00, 0xa6, 0xeb, + 0x0a, 0x06, 0x03, 0x68, 0xa6, 0xfb, 0x02, 0x67, 0xcd, 0xe9, 0x00, 0x67, + 0x19, 0x6a, 0xa2, 0xfb, 0x0a, 0x23, 0x88, 0x47, 0x27, 0x46, 0xab, 0x69, + 0xa3, 0x42, 0xac, 0xd8, 0xb3, 0xe7, 0x02, 0x20, 0xba, 0xe7, 0x01, 0x20, + 0xb8, 0xe7, 0x00, 0xbf, 0xa8, 0x15, 0x02, 0x24, 0x2d, 0xe9, 0xff, 0x41, + 0x03, 0x68, 0x0c, 0x46, 0x01, 0x92, 0x06, 0x46, 0x9b, 0x6f, 0x98, 0x47, + 0x01, 0x99, 0x20, 0x46, 0x67, 0x69, 0xff, 0xf7, 0x1e, 0xfd, 0x05, 0x46, + 0x48, 0xb1, 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, + 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, 0xfc, 0xf7, 0x77, 0xbd, 0x03, 0xa9, + 0x20, 0x46, 0xfc, 0xf7, 0x8a, 0xfd, 0x05, 0x46, 0x00, 0x28, 0xee, 0xd1, + 0x65, 0x7c, 0x00, 0x2d, 0xeb, 0xd1, 0x23, 0x7c, 0x9a, 0x07, 0x01, 0xd4, + 0x07, 0x25, 0xe6, 0xe7, 0xd4, 0xf8, 0x14, 0x80, 0xe3, 0x68, 0x98, 0x45, + 0x08, 0xd3, 0x20, 0x46, 0x39, 0x46, 0xff, 0xf7, 0xfa, 0xfc, 0x04, 0x46, + 0x70, 0xbb, 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0xb8, 0xf1, 0x00, 0x0f, + 0x11, 0xd1, 0x2a, 0x46, 0xa1, 0x68, 0x20, 0x46, 0xff, 0xf7, 0x58, 0xff, + 0x05, 0x46, 0xc4, 0xf8, 0x08, 0x80, 0x63, 0x69, 0xe3, 0x60, 0x23, 0x7c, + 0x43, 0xf0, 0x40, 0x03, 0x23, 0x74, 0x00, 0x2d, 0xe3, 0xd0, 0x65, 0x74, + 0xc3, 0xe7, 0xa1, 0x69, 0x20, 0x68, 0xfe, 0xf7, 0x76, 0xff, 0x43, 0x1c, + 0x01, 0x46, 0x0b, 0xd0, 0x01, 0x28, 0x0b, 0xd0, 0x03, 0x9b, 0x9b, 0x69, + 0x98, 0x42, 0xe8, 0xd2, 0xa2, 0x69, 0x20, 0x46, 0xff, 0xf7, 0x3a, 0xff, + 0x05, 0x46, 0xe2, 0xe7, 0x01, 0x25, 0xe0, 0xe7, 0x02, 0x25, 0xde, 0xe7, + 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x20, 0x46, 0xab, 0xe7, + 0xf0, 0xb5, 0x1f, 0x46, 0x09, 0x4b, 0x16, 0x46, 0xdd, 0xe9, 0x05, 0x45, + 0xc0, 0xe9, 0x00, 0x31, 0x00, 0x23, 0x03, 0x76, 0x03, 0x72, 0x54, 0xea, + 0x05, 0x03, 0x08, 0xbf, 0x01, 0x23, 0xc0, 0xe9, 0x04, 0x67, 0xc0, 0xe9, + 0x08, 0x45, 0x08, 0xbf, 0x03, 0x76, 0xf0, 0xbd, 0xa0, 0xda, 0x01, 0x08, + 0x70, 0x47, 0x00, 0x00, 0x03, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x60, + 0xfd, 0xf7, 0xe0, 0xfa, 0x20, 0x46, 0x10, 0xbd, 0xbc, 0xd6, 0x01, 0x08, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xf2, 0xff, 0x20, 0x46, 0x10, 0xf0, + 0x15, 0xf8, 0x20, 0x46, 0x10, 0xbd, 0x00, 0x00, 0x08, 0xb5, 0x03, 0x6a, + 0x01, 0x3b, 0x03, 0x62, 0x00, 0x68, 0x0c, 0xf0, 0x79, 0xf9, 0x01, 0x46, + 0x30, 0xb1, 0x04, 0x4b, 0x1b, 0x78, 0xdb, 0xb2, 0x13, 0xb9, 0x03, 0x48, + 0xf6, 0xf7, 0x0a, 0xfe, 0x08, 0xbd, 0x00, 0xbf, 0x78, 0x0b, 0x02, 0x24, + 0x17, 0x01, 0x02, 0x80, 0x08, 0xb5, 0x03, 0x48, 0x04, 0xf0, 0x56, 0xf9, + 0xbd, 0xe8, 0x08, 0x40, 0xff, 0xf7, 0xe2, 0xbf, 0x80, 0x15, 0x02, 0x24, + 0x10, 0xb5, 0x04, 0x46, 0x00, 0x68, 0xfc, 0xf7, 0x95, 0xfa, 0x01, 0x46, + 0x18, 0xb9, 0x23, 0x6a, 0x01, 0x33, 0x23, 0x62, 0x10, 0xbd, 0x04, 0x4b, + 0x1b, 0x78, 0xdb, 0xb2, 0x00, 0x2b, 0xf9, 0xd1, 0x02, 0x48, 0xf6, 0xf7, + 0xe7, 0xfd, 0x00, 0xbf, 0x78, 0x0b, 0x02, 0x24, 0x15, 0x01, 0x02, 0x80, + 0x70, 0xb5, 0x00, 0xf1, 0xa4, 0x06, 0x0c, 0x46, 0x05, 0x46, 0x30, 0x46, + 0xff, 0xf7, 0xe0, 0xff, 0x04, 0xf1, 0x10, 0x02, 0x21, 0x46, 0x05, 0xf1, + 0x14, 0x00, 0xfd, 0xf7, 0xdf, 0xfe, 0x38, 0xb9, 0x23, 0x69, 0x63, 0x60, + 0x63, 0x69, 0xa3, 0x60, 0x0e, 0x23, 0xa3, 0x61, 0x10, 0x23, 0xe3, 0x60, + 0x30, 0x46, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0xab, 0xbf, 0x13, 0xb5, + 0x0c, 0x46, 0xa4, 0x30, 0x01, 0x90, 0xff, 0xf7, 0xc5, 0xff, 0xa4, 0x69, + 0x01, 0x98, 0xff, 0xf7, 0xa1, 0xff, 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, + 0x10, 0x40, 0xfc, 0xf7, 0xa2, 0xbb, 0x2d, 0xe9, 0xf0, 0x41, 0x06, 0x46, + 0x00, 0xf1, 0xa4, 0x07, 0x0c, 0x46, 0x15, 0x46, 0x14, 0x36, 0x38, 0x46, + 0xff, 0xf7, 0xb0, 0xff, 0x04, 0xf1, 0x10, 0x02, 0x21, 0x46, 0x30, 0x46, + 0xfd, 0xf7, 0xb0, 0xfe, 0xd0, 0xb9, 0x23, 0x69, 0x04, 0xf1, 0x24, 0x08, + 0xa5, 0x61, 0x63, 0x60, 0x63, 0x69, 0xa3, 0x60, 0x10, 0x23, 0xe3, 0x60, + 0x21, 0x6a, 0x21, 0xf0, 0x00, 0x43, 0x9d, 0x42, 0x01, 0xd8, 0xe5, 0x60, + 0x0a, 0xe0, 0x00, 0x29, 0xa5, 0xeb, 0x03, 0x05, 0x06, 0xda, 0x42, 0x46, + 0x21, 0x46, 0x30, 0x46, 0xfd, 0xf7, 0x96, 0xfe, 0x00, 0x28, 0xed, 0xd0, + 0x38, 0x46, 0xbd, 0xe8, 0xf0, 0x41, 0xff, 0xf7, 0x69, 0xbf, 0x00, 0x00, + 0x2d, 0xe9, 0xf0, 0x41, 0x00, 0xf1, 0xa4, 0x08, 0xc8, 0xb0, 0x0e, 0x46, + 0x05, 0x46, 0x40, 0x46, 0x17, 0x46, 0xff, 0xf7, 0x7d, 0xff, 0x4f, 0xf4, + 0x84, 0x72, 0x00, 0x21, 0x06, 0xa8, 0x0f, 0xf0, 0xcf, 0xff, 0xb3, 0x69, + 0x14, 0x35, 0x0e, 0x2b, 0x22, 0xd1, 0x22, 0x23, 0x36, 0x49, 0x08, 0xa8, + 0x8d, 0xf8, 0x18, 0x30, 0x10, 0xf0, 0xb0, 0xfd, 0x0f, 0x23, 0x01, 0x24, + 0xb3, 0x61, 0x40, 0x46, 0xff, 0xf7, 0x46, 0xff, 0x01, 0x2c, 0x0d, 0xd1, + 0x9d, 0xf8, 0x18, 0x30, 0x11, 0x2b, 0x59, 0xd0, 0x22, 0x2b, 0x14, 0xbf, + 0x00, 0x23, 0x03, 0x23, 0x08, 0xa9, 0x38, 0x46, 0x87, 0xf8, 0x00, 0x31, + 0x10, 0xf0, 0x9a, 0xfd, 0x20, 0x46, 0x48, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, + 0xfc, 0xf7, 0x37, 0xbb, 0x0f, 0x2b, 0x08, 0xd1, 0x22, 0x23, 0x25, 0x49, + 0x08, 0xa8, 0x8d, 0xf8, 0x18, 0x30, 0x10, 0xf0, 0x8b, 0xfd, 0x10, 0x23, + 0xd9, 0xe7, 0x02, 0xaa, 0x31, 0x46, 0x28, 0x46, 0xfe, 0xf7, 0x86, 0xfa, + 0x04, 0x46, 0x18, 0xb1, 0x82, 0x1c, 0x08, 0xbf, 0x00, 0x24, 0xd0, 0xe7, + 0x9d, 0xf8, 0x0c, 0x30, 0x03, 0xf0, 0x7f, 0x02, 0x11, 0x2a, 0x01, 0xd0, + 0x22, 0x2a, 0xec, 0xd1, 0x1b, 0x06, 0x0c, 0xd5, 0x04, 0xa9, 0x28, 0x46, + 0xfe, 0xf7, 0xe2, 0xfa, 0x04, 0x1e, 0xc0, 0xdb, 0xe3, 0xd1, 0x9d, 0xf8, + 0x0c, 0x30, 0x03, 0xf0, 0x7f, 0x03, 0x8d, 0xf8, 0x0c, 0x30, 0x9d, 0xf8, + 0x0c, 0x30, 0x28, 0x46, 0x02, 0x9a, 0x11, 0x2b, 0x8d, 0xf8, 0x18, 0x30, + 0x02, 0xf1, 0x04, 0x02, 0x9d, 0xf8, 0x0e, 0x10, 0x04, 0xbf, 0x05, 0x9b, + 0x07, 0x93, 0x9d, 0xf8, 0x0d, 0x30, 0x1a, 0x44, 0x9d, 0xf8, 0x0f, 0x30, + 0x0a, 0x44, 0x00, 0x93, 0x71, 0x68, 0x08, 0xab, 0xfd, 0xf7, 0x03, 0xfe, + 0x04, 0x1e, 0x08, 0xbf, 0x01, 0x24, 0x9c, 0xe7, 0x05, 0x23, 0xa7, 0xe7, + 0x96, 0xd9, 0x01, 0x08, 0x95, 0xd9, 0x01, 0x08, 0x37, 0xb5, 0x05, 0x46, + 0xa4, 0x30, 0x0c, 0x46, 0x01, 0x90, 0xff, 0xf7, 0xf9, 0xfe, 0x05, 0xf1, + 0x24, 0x02, 0x6b, 0x6a, 0x01, 0x98, 0x1b, 0xb1, 0x9c, 0x42, 0x0d, 0xd1, + 0x23, 0x68, 0x13, 0x60, 0xff, 0xf7, 0xce, 0xfe, 0x14, 0xb1, 0x20, 0x46, + 0x0f, 0xf0, 0xdc, 0xfe, 0x00, 0x20, 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, + 0xfc, 0xf7, 0xcb, 0xba, 0x1a, 0x46, 0x1b, 0x68, 0xeb, 0xe7, 0x2d, 0xe9, + 0xf0, 0x47, 0x00, 0xf1, 0xa4, 0x06, 0x0d, 0x46, 0x81, 0x46, 0x86, 0xb0, + 0x30, 0x46, 0x90, 0x46, 0xff, 0xf7, 0xd6, 0xfe, 0xea, 0x69, 0x09, 0xf1, + 0x14, 0x09, 0x02, 0xf0, 0x03, 0x03, 0x01, 0x2b, 0x5a, 0xd0, 0x92, 0x03, + 0x6b, 0x69, 0x03, 0xd5, 0x2a, 0x6a, 0x93, 0x42, 0x38, 0xbf, 0x13, 0x46, + 0x98, 0x45, 0x24, 0xd2, 0x29, 0x46, 0x48, 0x46, 0xfd, 0xf7, 0xa2, 0xff, + 0x04, 0x46, 0xa8, 0xb9, 0x05, 0xab, 0x05, 0x90, 0x05, 0xf1, 0x2c, 0x01, + 0x48, 0x46, 0x02, 0x93, 0x05, 0xf1, 0x10, 0x03, 0xcd, 0xe9, 0x00, 0x83, + 0xd5, 0xe9, 0x04, 0x23, 0xf6, 0xf7, 0x9d, 0xff, 0x04, 0x46, 0x28, 0xb9, + 0xeb, 0x69, 0xc5, 0xf8, 0x14, 0x80, 0x43, 0xf4, 0x80, 0x33, 0xeb, 0x61, + 0x30, 0x46, 0xff, 0xf7, 0x87, 0xfe, 0x20, 0x46, 0x06, 0xb0, 0xbd, 0xe8, + 0xf0, 0x47, 0xfc, 0xf7, 0x88, 0xba, 0x2e, 0xd9, 0x2f, 0x6a, 0xbb, 0x42, + 0x09, 0xd0, 0x29, 0x46, 0x48, 0x46, 0xfd, 0xf7, 0x79, 0xff, 0x04, 0x1e, + 0x15, 0xd1, 0x6b, 0x69, 0x00, 0x2b, 0x24, 0xdb, 0x2b, 0x62, 0x4f, 0xf0, + 0x00, 0x0a, 0x2b, 0x6a, 0x98, 0x45, 0x0e, 0xd8, 0x29, 0x46, 0x48, 0x46, + 0xfd, 0xf7, 0x6a, 0xff, 0x20, 0xb9, 0x38, 0x1e, 0xb4, 0xbf, 0x6f, 0xf0, + 0x15, 0x00, 0x28, 0x62, 0x00, 0xea, 0xe0, 0x74, 0xd6, 0xe7, 0xd5, 0xdb, + 0xeb, 0xe7, 0x01, 0x23, 0x05, 0xaa, 0x29, 0x46, 0x48, 0x46, 0x8d, 0xf8, + 0x14, 0xa0, 0xfd, 0xf7, 0xc1, 0xff, 0x04, 0x1e, 0xe3, 0xda, 0xc9, 0xe7, + 0x6f, 0xf0, 0x08, 0x04, 0xc6, 0xe7, 0x00, 0x24, 0xc4, 0xe7, 0x6f, 0xf0, + 0x15, 0x04, 0xc1, 0xe7, 0x37, 0xb5, 0x0d, 0x46, 0xa4, 0x30, 0x01, 0x90, + 0xff, 0xf7, 0x66, 0xfe, 0xeb, 0x69, 0x6c, 0x69, 0x13, 0xf4, 0x00, 0x3f, + 0x01, 0x98, 0x03, 0xd0, 0x2b, 0x6a, 0x9c, 0x42, 0x38, 0xbf, 0x1c, 0x46, + 0xff, 0xf7, 0x3a, 0xfe, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, + 0xfc, 0xf7, 0x3b, 0xba, 0x13, 0xb5, 0x0c, 0x46, 0xa4, 0x30, 0x01, 0x90, + 0xff, 0xf7, 0x4e, 0xfe, 0x24, 0x6a, 0x01, 0x98, 0xff, 0xf7, 0x2a, 0xfe, + 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0x10, 0x40, 0xfc, 0xf7, 0x2b, 0xba, + 0x2d, 0xe9, 0xf0, 0x41, 0x00, 0xf1, 0xa4, 0x08, 0x05, 0x46, 0x0e, 0x46, + 0x14, 0x46, 0x40, 0x46, 0x1f, 0x46, 0xff, 0xf7, 0x39, 0xfe, 0x05, 0xf1, + 0x14, 0x00, 0x31, 0x46, 0xfd, 0xf7, 0x14, 0xff, 0x05, 0x46, 0x70, 0xb9, + 0x3f, 0xb1, 0x01, 0x2f, 0x33, 0x6a, 0x01, 0xd1, 0x1c, 0x44, 0x02, 0xe0, + 0x02, 0x2f, 0x0e, 0xd0, 0x1c, 0x46, 0x00, 0x2c, 0xaa, 0xbf, 0x25, 0x46, + 0x6f, 0xf0, 0x15, 0x05, 0x34, 0x62, 0x40, 0x46, 0xff, 0xf7, 0x00, 0xfe, + 0x28, 0x46, 0xbd, 0xe8, 0xf0, 0x41, 0xfc, 0xf7, 0x02, 0xba, 0x73, 0x69, + 0xea, 0xe7, 0x37, 0xb5, 0x00, 0xf1, 0xa4, 0x05, 0x04, 0x46, 0x01, 0x91, + 0x28, 0x46, 0xff, 0xf7, 0x11, 0xfe, 0x01, 0x99, 0x04, 0xf1, 0x14, 0x00, + 0xfe, 0xf7, 0xed, 0xf8, 0x04, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xe8, 0xfd, + 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, 0xfc, 0xf7, 0xe9, 0xb9, + 0x30, 0xb5, 0x00, 0xf1, 0xa4, 0x05, 0x85, 0xb0, 0x04, 0x46, 0x28, 0x46, + 0x01, 0x93, 0xcd, 0xe9, 0x02, 0x21, 0xff, 0xf7, 0xf7, 0xfd, 0x03, 0x99, + 0x04, 0xf1, 0x14, 0x00, 0xdd, 0xe9, 0x01, 0x32, 0xfd, 0xf7, 0x3a, 0xff, + 0x04, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xcc, 0xfd, 0x20, 0x46, 0x05, 0xb0, + 0xbd, 0xe8, 0x30, 0x40, 0xfc, 0xf7, 0xcd, 0xb9, 0x30, 0xb5, 0x00, 0xf1, + 0xa4, 0x05, 0x85, 0xb0, 0x04, 0x46, 0x28, 0x46, 0x01, 0x93, 0xcd, 0xe9, + 0x02, 0x21, 0xff, 0xf7, 0xdb, 0xfd, 0x03, 0x99, 0x04, 0xf1, 0x14, 0x00, + 0xdd, 0xe9, 0x01, 0x32, 0xfe, 0xf7, 0x51, 0xf8, 0x04, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0xb0, 0xfd, 0x20, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0x30, 0x40, + 0xfc, 0xf7, 0xb1, 0xb9, 0xf8, 0xb5, 0x00, 0xf1, 0xa4, 0x07, 0x05, 0x46, + 0x0c, 0x46, 0x38, 0x46, 0xff, 0xf7, 0xc2, 0xfd, 0x21, 0x46, 0x05, 0xf1, + 0x14, 0x00, 0xfe, 0xf7, 0x9e, 0xf8, 0x05, 0xf1, 0x20, 0x02, 0x06, 0x46, + 0x2b, 0x6a, 0x1b, 0xb1, 0x9c, 0x42, 0x16, 0xd1, 0x23, 0x68, 0x13, 0x60, + 0xa3, 0x69, 0x0b, 0xb1, 0x1b, 0x68, 0x2b, 0xb9, 0x6b, 0x69, 0x5b, 0x6b, + 0x13, 0xb9, 0x60, 0x6b, 0x0f, 0xf0, 0x9c, 0xfd, 0x38, 0x46, 0xff, 0xf7, + 0x87, 0xfd, 0x20, 0x46, 0x0f, 0xf0, 0x96, 0xfd, 0x30, 0x46, 0xbd, 0xe8, + 0xf8, 0x40, 0xfc, 0xf7, 0x86, 0xb9, 0x1a, 0x46, 0x1b, 0x68, 0xe2, 0xe7, + 0x2d, 0xe9, 0xf3, 0x41, 0x06, 0x46, 0x14, 0x46, 0x00, 0x21, 0x28, 0x22, + 0x06, 0xf1, 0xa4, 0x07, 0x20, 0x46, 0x00, 0x25, 0x0f, 0xf0, 0xe8, 0xfd, + 0x38, 0x46, 0x06, 0xf1, 0x14, 0x08, 0x01, 0x95, 0xff, 0xf7, 0x8a, 0xfd, + 0x06, 0xf1, 0x18, 0x00, 0xfc, 0xf7, 0xab, 0xf9, 0x28, 0xb9, 0x01, 0xaa, + 0x0d, 0x49, 0x40, 0x46, 0xfd, 0xf7, 0x1e, 0xfd, 0x05, 0x46, 0x38, 0x46, + 0xff, 0xf7, 0x5c, 0xfd, 0x6d, 0xb9, 0x73, 0x6f, 0x01, 0x9a, 0xc4, 0xe9, + 0x00, 0x33, 0xb3, 0x6f, 0xc4, 0xe9, 0x02, 0x35, 0x9b, 0x1a, 0xc4, 0xe9, + 0x04, 0x35, 0xc4, 0xe9, 0x06, 0x35, 0xff, 0x23, 0x63, 0x62, 0x28, 0x46, + 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0xbf, 0x35, 0x7b, 0x00, 0x08, + 0x2d, 0xe9, 0xf0, 0x41, 0x80, 0x46, 0x00, 0xf1, 0xa4, 0x06, 0xd4, 0xb0, + 0x0c, 0x46, 0x08, 0xf1, 0x14, 0x07, 0x30, 0x46, 0x15, 0x46, 0xff, 0xf7, + 0x59, 0xfd, 0x02, 0xab, 0x03, 0xaa, 0x07, 0xa9, 0x38, 0x46, 0x02, 0x94, + 0xfe, 0xf7, 0x40, 0xf9, 0x04, 0x46, 0xc0, 0xb9, 0x01, 0x46, 0x4f, 0xf4, + 0x84, 0x72, 0x12, 0xa8, 0x0f, 0xf0, 0xa2, 0xfd, 0x9d, 0xf8, 0x10, 0x30, + 0x08, 0xf1, 0x18, 0x01, 0x05, 0xa8, 0x11, 0x2b, 0x8d, 0xf8, 0x48, 0x30, + 0x04, 0xbf, 0x06, 0x9b, 0x13, 0x93, 0xfc, 0xf7, 0x51, 0xf9, 0x04, 0x46, + 0xc0, 0xb9, 0x17, 0x49, 0x14, 0xa8, 0x10, 0xf0, 0x7b, 0xfb, 0x30, 0x46, + 0xff, 0xf7, 0x14, 0xfd, 0x13, 0x9b, 0x2b, 0x61, 0x9d, 0xf8, 0x48, 0x30, + 0x11, 0x2b, 0x1d, 0xd0, 0x22, 0x2b, 0x44, 0xf2, 0xff, 0x13, 0x18, 0xbf, + 0x00, 0x23, 0x20, 0x46, 0x6b, 0x60, 0x54, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, + 0xfc, 0xf7, 0x09, 0xb9, 0x03, 0x9b, 0x38, 0x46, 0x9d, 0xf8, 0x11, 0x10, + 0x04, 0x33, 0x9d, 0xf8, 0x12, 0x20, 0x19, 0x44, 0x9d, 0xf8, 0x13, 0x30, + 0x0a, 0x44, 0x00, 0x93, 0x08, 0x99, 0x14, 0xab, 0xfd, 0xf7, 0x0b, 0xfc, + 0x04, 0x46, 0xd8, 0xe7, 0x48, 0xf2, 0xff, 0x13, 0xe3, 0xe7, 0x00, 0xbf, + 0x93, 0xd9, 0x01, 0x08, 0xf0, 0xb5, 0x00, 0xf1, 0xa4, 0x06, 0x05, 0x46, + 0x9f, 0xb0, 0x0c, 0x46, 0x30, 0x46, 0x05, 0xf1, 0x14, 0x07, 0xff, 0xf7, + 0xff, 0xfc, 0x95, 0xf8, 0x54, 0x30, 0x03, 0x94, 0x00, 0x2b, 0x43, 0xd0, + 0x03, 0xab, 0x04, 0xaa, 0x08, 0xa9, 0x38, 0x46, 0xfe, 0xf7, 0xe2, 0xf8, + 0x83, 0x1c, 0x04, 0x46, 0x49, 0xd1, 0x2f, 0x21, 0x03, 0x98, 0x11, 0xf0, + 0x6b, 0xf9, 0x00, 0x28, 0x3a, 0xd1, 0x6b, 0x69, 0x13, 0xa9, 0x38, 0x46, + 0x1b, 0x6a, 0xeb, 0x64, 0xfd, 0xf7, 0xfe, 0xff, 0x04, 0x46, 0x00, 0x28, + 0x30, 0xd1, 0x11, 0x9b, 0x02, 0x46, 0x13, 0xa9, 0x1c, 0x93, 0x12, 0x9b, + 0x1d, 0x93, 0x03, 0x46, 0x38, 0x46, 0xfe, 0xf7, 0x78, 0xfa, 0x04, 0x46, + 0x20, 0xbb, 0x40, 0xf6, 0x22, 0x03, 0x8d, 0xf8, 0x16, 0x00, 0xad, 0xf8, + 0x14, 0x30, 0x03, 0x9b, 0x18, 0x46, 0x01, 0x93, 0x10, 0xf0, 0x16, 0xfb, + 0x14, 0x99, 0x15, 0x9a, 0x8d, 0xf8, 0x17, 0x00, 0x38, 0x46, 0x06, 0x91, + 0x07, 0x92, 0x01, 0x9b, 0xcd, 0xe9, 0x11, 0x12, 0x04, 0xaa, 0x08, 0xa9, + 0xf6, 0xf7, 0x04, 0xfe, 0x04, 0x46, 0x48, 0xb9, 0x6b, 0x69, 0x1b, 0x6a, + 0xeb, 0x64, 0x05, 0xe0, 0x38, 0x46, 0xfe, 0xf7, 0xc5, 0xf9, 0x04, 0x46, + 0x00, 0x28, 0xb5, 0xd0, 0x30, 0x46, 0xff, 0xf7, 0x8d, 0xfc, 0x20, 0x46, + 0x1f, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, 0xfc, 0xf7, 0x8e, 0xb8, 0x00, 0x28, + 0x08, 0xbf, 0x6f, 0xf0, 0x10, 0x04, 0xf1, 0xe7, 0xf0, 0xb5, 0x00, 0xf1, + 0xa4, 0x05, 0x04, 0x46, 0x9d, 0xb0, 0x0f, 0x46, 0x28, 0x46, 0x04, 0xf1, + 0x14, 0x06, 0xff, 0xf7, 0x97, 0xfc, 0x94, 0xf8, 0x54, 0x30, 0x01, 0x97, + 0x83, 0xb1, 0x01, 0xab, 0x02, 0xaa, 0x06, 0xa9, 0x30, 0x46, 0xfe, 0xf7, + 0x7b, 0xf8, 0x04, 0x46, 0x78, 0xb1, 0x28, 0x46, 0xff, 0xf7, 0x68, 0xfc, + 0x20, 0x46, 0x1d, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, 0xfc, 0xf7, 0x69, 0xb8, + 0x30, 0x46, 0xfe, 0xf7, 0x91, 0xf9, 0x04, 0x46, 0x00, 0x28, 0xe8, 0xd0, + 0xef, 0xe7, 0x9d, 0xf8, 0x0c, 0x30, 0x22, 0x2b, 0x1e, 0xd0, 0x02, 0xaa, + 0x06, 0xa9, 0x30, 0x46, 0xfe, 0xf7, 0x10, 0xf9, 0x04, 0x46, 0x00, 0x28, + 0xe3, 0xd1, 0x9d, 0xf8, 0x0c, 0x30, 0x22, 0x2b, 0xdf, 0xd1, 0x06, 0xaa, + 0x12, 0xa9, 0x30, 0x46, 0xfd, 0xf7, 0xd2, 0xfb, 0x04, 0x1e, 0xd8, 0xdb, + 0x1a, 0x9b, 0x06, 0xa9, 0x30, 0x46, 0x0f, 0x93, 0x1b, 0x9b, 0x10, 0x93, + 0x00, 0x23, 0x1a, 0x46, 0xfe, 0xf7, 0xfb, 0xf9, 0x04, 0x46, 0xcc, 0xe7, + 0x04, 0xaa, 0x11, 0xa9, 0x30, 0x46, 0xfd, 0xf7, 0x59, 0xfb, 0x04, 0x46, + 0x00, 0x28, 0xc4, 0xd1, 0x19, 0x9b, 0x14, 0x2b, 0xd5, 0xd0, 0x6f, 0xf0, + 0x26, 0x04, 0xbe, 0xe7, 0x70, 0xb5, 0x00, 0xf1, 0xa4, 0x06, 0x05, 0x46, + 0x30, 0x46, 0xff, 0xf7, 0x43, 0xfc, 0xd5, 0xf8, 0x90, 0x40, 0x64, 0xb1, + 0x05, 0xf1, 0x14, 0x00, 0xfc, 0xf7, 0xd3, 0xfc, 0xd5, 0xf8, 0x90, 0x00, + 0x03, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x00, 0x23, 0x04, 0x46, 0xc5, 0xf8, + 0x90, 0x30, 0x30, 0x46, 0xff, 0xf7, 0x10, 0xfc, 0x20, 0x46, 0x70, 0xbd, + 0x0a, 0x4b, 0x10, 0xb5, 0x03, 0x60, 0x80, 0x33, 0x04, 0x46, 0x43, 0x60, + 0xff, 0xf7, 0xdc, 0xff, 0xd4, 0xf8, 0xa4, 0x00, 0x0b, 0xf0, 0x38, 0xfd, + 0x05, 0x4b, 0x20, 0x46, 0x23, 0x60, 0x2c, 0x33, 0x40, 0xf8, 0x04, 0x3f, + 0x03, 0xf0, 0x62, 0xfe, 0x20, 0x46, 0x10, 0xbd, 0x20, 0xd8, 0x01, 0x08, + 0xb8, 0xd7, 0x01, 0x08, 0xa0, 0xf1, 0x04, 0x00, 0xff, 0xf7, 0xe2, 0xbf, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xde, 0xff, 0x20, 0x46, 0x0f, 0xf0, + 0xfb, 0xfb, 0x20, 0x46, 0x10, 0xbd, 0xa0, 0xf1, 0x04, 0x00, 0xff, 0xf7, + 0xf3, 0xbf, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x43, 0x00, 0xf1, 0xa4, 0x07, + 0x0d, 0x46, 0x04, 0x46, 0x99, 0xb0, 0x38, 0x46, 0xff, 0xf7, 0xf8, 0xfb, + 0xc4, 0xf8, 0x90, 0x50, 0x2b, 0x68, 0x28, 0x46, 0x9b, 0x68, 0x98, 0x47, + 0x06, 0x46, 0x48, 0xb1, 0x00, 0x23, 0xc4, 0xf8, 0x90, 0x30, 0x38, 0x46, + 0xff, 0xf7, 0xca, 0xfb, 0x30, 0x46, 0x19, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, + 0x24, 0x22, 0x01, 0x46, 0x04, 0xf1, 0x6c, 0x00, 0x04, 0xf1, 0x58, 0x08, + 0x0f, 0xf0, 0x36, 0xfc, 0x5c, 0x4b, 0xa5, 0x65, 0x28, 0x46, 0xe3, 0x65, + 0x04, 0xf1, 0x14, 0x09, 0x5a, 0x4b, 0x23, 0x66, 0x5a, 0x4b, 0x63, 0x66, + 0x5a, 0x4b, 0xa3, 0x66, 0x2b, 0x68, 0x5b, 0x6a, 0x98, 0x47, 0xd4, 0xf8, + 0x94, 0x30, 0x83, 0x42, 0x2c, 0xbf, 0xe3, 0x66, 0xe0, 0x66, 0x28, 0x46, + 0x2b, 0x68, 0x9b, 0x6a, 0x98, 0x47, 0xd4, 0xf8, 0x98, 0x30, 0x83, 0x42, + 0x2c, 0xbf, 0x23, 0x67, 0x20, 0x67, 0x28, 0x46, 0x2b, 0x68, 0xdb, 0x6a, + 0x98, 0x47, 0xd4, 0xf8, 0x9c, 0x30, 0x83, 0x42, 0x2c, 0xbf, 0x63, 0x67, + 0x60, 0x67, 0x28, 0x46, 0x2b, 0x68, 0x9b, 0x6b, 0x98, 0x47, 0x33, 0x46, + 0x62, 0x6f, 0x11, 0xf0, 0xe1, 0xfa, 0xa0, 0x67, 0x1f, 0x30, 0xd4, 0xf8, + 0xa0, 0x30, 0xc4, 0xf8, 0x14, 0x80, 0x20, 0xf0, 0x1f, 0x00, 0x83, 0x42, + 0x94, 0xbf, 0xe3, 0x67, 0xe0, 0x67, 0xd4, 0xf8, 0x80, 0x30, 0x00, 0x2b, + 0x4c, 0xd0, 0x23, 0x63, 0xd4, 0xf8, 0x84, 0x30, 0x00, 0x2b, 0x5e, 0xd0, + 0xe3, 0x63, 0x04, 0xf1, 0x34, 0x01, 0x40, 0x46, 0xfc, 0xf7, 0x7e, 0xfc, + 0x4f, 0xf0, 0xff, 0x33, 0x65, 0x69, 0xa3, 0x62, 0x2b, 0x6b, 0x00, 0x2b, + 0x58, 0xd0, 0x23, 0x65, 0x4f, 0xf0, 0xff, 0x33, 0x2a, 0x6a, 0x0d, 0xa9, + 0x48, 0x46, 0xe2, 0x64, 0x02, 0xaa, 0xc4, 0xe9, 0x06, 0x33, 0x00, 0x23, + 0xc4, 0xe9, 0x08, 0x33, 0xa4, 0xf8, 0x54, 0x30, 0xa3, 0x64, 0x02, 0x93, + 0xc4, 0xe9, 0x10, 0x33, 0x01, 0x23, 0x03, 0x93, 0xfd, 0xf7, 0x7a, 0xfa, + 0x05, 0x46, 0x00, 0x28, 0x48, 0xd1, 0x20, 0x23, 0x10, 0x22, 0x0e, 0x99, + 0x48, 0x46, 0x00, 0x93, 0x05, 0xab, 0xfd, 0xf7, 0x62, 0xfa, 0x05, 0x46, + 0x00, 0x28, 0x3d, 0xd1, 0x06, 0x9b, 0x08, 0x22, 0x23, 0x49, 0x0b, 0xa8, + 0xa3, 0x61, 0x07, 0x9b, 0xe3, 0x61, 0x10, 0xf0, 0x0f, 0xff, 0x06, 0x46, + 0x80, 0xbb, 0x0a, 0x9b, 0x1a, 0x0c, 0x01, 0x2a, 0x03, 0xd1, 0x9b, 0xb2, + 0x01, 0x2b, 0x7f, 0xf6, 0x66, 0xaf, 0x6f, 0xf0, 0x15, 0x05, 0x27, 0xe0, + 0xe0, 0x6e, 0x0f, 0xf0, 0x37, 0xfb, 0x20, 0x63, 0x00, 0x28, 0xad, 0xd1, + 0x6f, 0xf0, 0x0b, 0x05, 0x48, 0x46, 0xfc, 0xf7, 0xdc, 0xfb, 0x00, 0x23, + 0x38, 0x46, 0xc4, 0xf8, 0x90, 0x30, 0xff, 0xf7, 0x1f, 0xfb, 0x28, 0x46, + 0x19, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, 0xfb, 0xf7, 0x20, 0xbf, 0x20, 0x6f, + 0x0f, 0xf0, 0x20, 0xfb, 0xe0, 0x63, 0x00, 0x28, 0x9b, 0xd1, 0xe7, 0xe7, + 0x68, 0x6a, 0xc0, 0x08, 0x0f, 0xf0, 0x18, 0xfb, 0x20, 0x65, 0x00, 0x28, + 0xa0, 0xd1, 0xdf, 0xe7, 0x6f, 0xf0, 0x33, 0x05, 0x48, 0x46, 0xfc, 0xf7, + 0xbc, 0xfb, 0xde, 0xe7, 0x3f, 0x7b, 0x00, 0x08, 0x63, 0x7b, 0x00, 0x08, + 0x87, 0x7b, 0x00, 0x08, 0xa3, 0x7b, 0x00, 0x08, 0xb0, 0xd9, 0x01, 0x08, + 0x08, 0xb5, 0x03, 0x48, 0x03, 0xf0, 0x66, 0xfc, 0xbd, 0xe8, 0x08, 0x40, + 0xff, 0xf7, 0x12, 0xbb, 0x80, 0x15, 0x02, 0x24, 0x13, 0xb5, 0x15, 0x4c, + 0x20, 0x46, 0x03, 0xf0, 0x5b, 0xfc, 0xff, 0xf7, 0x09, 0xfb, 0x20, 0x46, + 0x03, 0xf0, 0x56, 0xfc, 0xff, 0xf7, 0xe4, 0xfa, 0x4f, 0xf0, 0xff, 0x32, + 0x4f, 0xf0, 0xff, 0x33, 0x68, 0x46, 0xcd, 0xe9, 0x00, 0x23, 0x0f, 0xf0, + 0x73, 0xf9, 0xd0, 0xe9, 0x02, 0x32, 0xdb, 0x02, 0x43, 0xea, 0x02, 0x43, + 0x42, 0x68, 0x43, 0xea, 0x42, 0x13, 0x02, 0x68, 0x02, 0xeb, 0xd2, 0x72, + 0x43, 0xea, 0x62, 0x03, 0x42, 0x69, 0x00, 0x69, 0x50, 0x3a, 0x01, 0x30, + 0x43, 0xea, 0x42, 0x63, 0x43, 0xea, 0x40, 0x50, 0x02, 0xb0, 0x10, 0xbd, + 0x04, 0x15, 0x02, 0x24, 0x37, 0xb5, 0x01, 0xa9, 0x04, 0x46, 0xfb, 0xf7, + 0xce, 0xff, 0x00, 0x28, 0x32, 0xd1, 0x23, 0x7c, 0x13, 0xf0, 0x40, 0x00, + 0x2e, 0xd0, 0xff, 0xf7, 0xc5, 0xff, 0x21, 0x6a, 0x05, 0x46, 0x01, 0x98, + 0xfe, 0xf7, 0xc7, 0xf9, 0x30, 0xbb, 0x62, 0x6a, 0xd3, 0x7a, 0x43, 0xf0, + 0x20, 0x03, 0xd3, 0x72, 0xa3, 0x68, 0x21, 0x68, 0x18, 0x12, 0x93, 0x76, + 0xd0, 0x76, 0x02, 0xf1, 0x1c, 0x00, 0x09, 0x78, 0x03, 0x29, 0x01, 0xbf, + 0x1b, 0x0c, 0x13, 0x75, 0x1b, 0x12, 0x53, 0x75, 0xe1, 0x68, 0xfb, 0xf7, + 0xfd, 0xff, 0x29, 0x46, 0x02, 0xf1, 0x16, 0x00, 0xfb, 0xf7, 0xf8, 0xff, + 0x00, 0x23, 0x01, 0x98, 0x93, 0x74, 0xd3, 0x74, 0x01, 0x23, 0xc3, 0x70, + 0xfc, 0xf7, 0x44, 0xfc, 0x23, 0x7c, 0x23, 0xf0, 0x40, 0x03, 0x23, 0x74, + 0x03, 0xb0, 0x30, 0xbd, 0x38, 0xb5, 0x03, 0x68, 0x0d, 0x46, 0x04, 0x46, + 0x9b, 0x6f, 0x98, 0x47, 0x28, 0x46, 0xff, 0xf7, 0xbb, 0xff, 0x23, 0x68, + 0x05, 0x46, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, 0xbd, 0xe8, + 0x38, 0x40, 0xfb, 0xf7, 0x6d, 0xbf, 0x2d, 0xe9, 0xf0, 0x4f, 0x1e, 0x46, + 0x03, 0x68, 0x85, 0xb0, 0x0d, 0x46, 0x9b, 0x6f, 0x82, 0x46, 0x91, 0x46, + 0x98, 0x47, 0x03, 0xa9, 0x28, 0x46, 0xfb, 0xf7, 0x76, 0xff, 0x04, 0x46, + 0x07, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xd6, 0x80, 0x6c, 0x7c, 0x5c, 0xbb, + 0x2b, 0x7c, 0x9a, 0x07, 0x40, 0xf1, 0xd2, 0x80, 0x6b, 0x69, 0x00, 0x27, + 0xde, 0x42, 0x00, 0x97, 0x28, 0xbf, 0xde, 0x43, 0x00, 0x2e, 0x00, 0xf0, + 0xbb, 0x80, 0x03, 0x98, 0x6a, 0x69, 0x83, 0x89, 0xb2, 0xfb, 0xf3, 0xf1, + 0x03, 0xfb, 0x11, 0x23, 0x00, 0x2b, 0x40, 0xf0, 0x8d, 0x80, 0xb0, 0xf8, + 0x0a, 0x80, 0x08, 0xf1, 0xff, 0x38, 0x18, 0xea, 0x01, 0x08, 0x25, 0xd1, + 0xd2, 0xb9, 0xa8, 0x68, 0x30, 0xb9, 0x01, 0x46, 0x28, 0x46, 0xfe, 0xf7, + 0x5a, 0xfe, 0x00, 0x28, 0x00, 0xf0, 0xa0, 0x80, 0x01, 0x28, 0x11, 0xd1, + 0x02, 0x24, 0x6c, 0x74, 0xda, 0xf8, 0x00, 0x30, 0x50, 0x46, 0xdb, 0x6f, + 0x98, 0x47, 0x00, 0x2c, 0x00, 0xf0, 0xa5, 0x80, 0x20, 0x46, 0x05, 0xb0, + 0xbd, 0xe8, 0xf0, 0x4f, 0xfb, 0xf7, 0x1e, 0xbf, 0xa9, 0x69, 0xe5, 0xe7, + 0x43, 0x1c, 0x01, 0xd1, 0x01, 0x24, 0xea, 0xe7, 0xab, 0x68, 0xa8, 0x61, + 0x03, 0xb9, 0xa8, 0x60, 0x03, 0x98, 0xeb, 0x69, 0x02, 0x6b, 0x9a, 0x42, + 0x47, 0xd0, 0xdd, 0xf8, 0x0c, 0xb0, 0xa9, 0x69, 0x58, 0x46, 0xfe, 0xf7, + 0x1b, 0xf9, 0x00, 0x28, 0xd8, 0xd0, 0xbb, 0xf8, 0x0c, 0x30, 0x08, 0xeb, + 0x00, 0x02, 0x9e, 0x42, 0x3e, 0xd3, 0xbb, 0xf8, 0x0a, 0x10, 0xb6, 0xfb, + 0xf3, 0xf3, 0x08, 0xeb, 0x03, 0x00, 0x88, 0x42, 0x9b, 0xf8, 0x01, 0x00, + 0x88, 0xbf, 0xa1, 0xeb, 0x08, 0x03, 0x49, 0x46, 0xcd, 0xe9, 0x00, 0x23, + 0xfb, 0xf7, 0xa8, 0xfe, 0x80, 0x46, 0xdd, 0xe9, 0x00, 0x23, 0x00, 0x28, + 0xd0, 0xd1, 0x03, 0x98, 0x01, 0x6b, 0x89, 0x1a, 0x8b, 0x42, 0x0a, 0xd9, + 0x82, 0x89, 0x40, 0x6b, 0x02, 0xfb, 0x01, 0x91, 0x00, 0x93, 0x0f, 0xf0, + 0x4f, 0xfa, 0x03, 0x9a, 0x00, 0x9b, 0x82, 0xf8, 0x03, 0x80, 0x03, 0x9a, + 0xb2, 0xf8, 0x0c, 0x80, 0x03, 0xfb, 0x08, 0xf8, 0x01, 0x23, 0x00, 0x93, + 0x6b, 0x69, 0xa6, 0xeb, 0x08, 0x06, 0xea, 0x68, 0x47, 0x44, 0x43, 0x44, + 0xc1, 0x44, 0x6b, 0x61, 0x9a, 0x42, 0x2c, 0xbf, 0xea, 0x60, 0xeb, 0x60, + 0x78, 0xe7, 0xfb, 0xf7, 0x0d, 0xff, 0x00, 0x28, 0xb3, 0xd0, 0xa7, 0xe7, + 0x69, 0x69, 0xeb, 0x68, 0x99, 0x42, 0x08, 0xd3, 0x58, 0x46, 0x01, 0x92, + 0xfb, 0xf7, 0x02, 0xff, 0x01, 0x9a, 0x00, 0x28, 0x9c, 0xd1, 0x03, 0x9b, + 0x1a, 0x63, 0xea, 0x61, 0x03, 0x98, 0x6b, 0x69, 0xb0, 0xf8, 0x0c, 0x80, + 0xe9, 0x69, 0xb3, 0xfb, 0xf8, 0xf2, 0x08, 0xfb, 0x12, 0x32, 0xa8, 0xeb, + 0x02, 0x08, 0xb0, 0x45, 0x28, 0xbf, 0xb0, 0x46, 0xfe, 0xf7, 0xc1, 0xf8, + 0x00, 0x28, 0x87, 0xd1, 0x03, 0x9a, 0x69, 0x69, 0x90, 0x89, 0xb1, 0xfb, + 0xf0, 0xf3, 0x00, 0xfb, 0x13, 0x13, 0x50, 0x6b, 0x49, 0x46, 0x42, 0x46, + 0x18, 0x44, 0x0f, 0xf0, 0x05, 0xfa, 0x03, 0x9b, 0x4f, 0xf0, 0x01, 0x02, + 0xda, 0x70, 0xbb, 0xe7, 0x2b, 0x7c, 0x43, 0xf0, 0x40, 0x03, 0x2b, 0x74, + 0x00, 0x9b, 0x00, 0x2b, 0x3f, 0xf4, 0x5c, 0xaf, 0x28, 0x46, 0xff, 0xf7, + 0xc9, 0xfe, 0x57, 0xe7, 0x00, 0x27, 0x55, 0xe7, 0x27, 0x46, 0x07, 0x24, + 0x52, 0xe7, 0x38, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x03, 0x68, + 0x73, 0xb5, 0x0d, 0x46, 0x9b, 0x6f, 0x06, 0x46, 0x98, 0x47, 0x28, 0x46, + 0xff, 0xf7, 0xb6, 0xfe, 0x04, 0x46, 0x30, 0xb9, 0x01, 0xa9, 0x28, 0x46, + 0xfb, 0xf7, 0x83, 0xfe, 0x04, 0x46, 0x00, 0xb9, 0x28, 0x60, 0x33, 0x68, + 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x15, 0xb1, 0x28, 0x46, 0x0f, 0xf0, + 0x79, 0xf9, 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfb, 0xf7, + 0x5b, 0xbe, 0x00, 0x00, 0xf0, 0xb5, 0x0e, 0x46, 0x85, 0xb0, 0x90, 0xf8, + 0x20, 0x10, 0x05, 0x46, 0x14, 0x46, 0xdd, 0xe9, 0x0a, 0x7c, 0x19, 0xb9, + 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xf0, 0xbd, 0x01, 0x68, 0xcd, 0xe9, + 0x00, 0x7c, 0xc9, 0x6b, 0x88, 0x47, 0x00, 0x28, 0xf4, 0xd0, 0x29, 0x69, + 0x0d, 0x48, 0x61, 0x18, 0x03, 0x91, 0x03, 0xf0, 0xb5, 0xfa, 0xff, 0xf7, + 0x63, 0xf9, 0x02, 0xf0, 0xa7, 0xfa, 0x02, 0xf0, 0x81, 0xfa, 0x3a, 0x46, + 0x03, 0x99, 0x30, 0x46, 0x0f, 0xf0, 0xa4, 0xf9, 0x02, 0xf0, 0x68, 0xfa, + 0x02, 0xf0, 0x8a, 0xfa, 0x03, 0x48, 0x03, 0xf0, 0xa3, 0xfa, 0xff, 0xf7, + 0x31, 0xf9, 0x00, 0x20, 0xda, 0xe7, 0x00, 0xbf, 0x58, 0x15, 0x02, 0x24, + 0x10, 0xb5, 0x04, 0x46, 0x04, 0x30, 0x0b, 0xf0, 0x6d, 0xfb, 0x04, 0xf1, + 0x54, 0x00, 0xff, 0xf7, 0x43, 0xf9, 0x00, 0x23, 0x20, 0x6c, 0x63, 0x61, + 0x01, 0x23, 0x84, 0xf8, 0x3d, 0x30, 0xbd, 0xe8, 0x10, 0x40, 0x0b, 0xf0, + 0xb9, 0xb9, 0x07, 0xb5, 0x13, 0x46, 0x0a, 0x46, 0x6f, 0xf0, 0x00, 0x41, + 0x00, 0x90, 0x00, 0x20, 0xfc, 0xf7, 0x00, 0xfd, 0x03, 0xb0, 0x5d, 0xf8, + 0x04, 0xfb, 0x0e, 0xb4, 0x0f, 0xb5, 0x05, 0xab, 0x6f, 0xf0, 0x00, 0x41, + 0x53, 0xf8, 0x04, 0x2b, 0x00, 0x90, 0x00, 0x20, 0x03, 0x93, 0xfc, 0xf7, + 0xf1, 0xfc, 0x04, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, 0x03, 0xb0, 0x70, 0x47, + 0x13, 0xb5, 0x00, 0x24, 0x00, 0x94, 0xfc, 0xf7, 0xe7, 0xfc, 0x02, 0xb0, + 0x10, 0xbd, 0x07, 0xb5, 0x13, 0x46, 0x00, 0x22, 0x00, 0x92, 0x0a, 0x46, + 0x6f, 0xf0, 0x00, 0x41, 0xfc, 0xf7, 0xdc, 0xfc, 0x03, 0xb0, 0x5d, 0xf8, + 0x04, 0xfb, 0x00, 0x00, 0x07, 0xb5, 0x0b, 0x46, 0x06, 0x49, 0x02, 0x46, + 0x00, 0x20, 0x09, 0x68, 0x89, 0x68, 0x00, 0x91, 0x6f, 0xf0, 0x00, 0x41, + 0xfc, 0xf7, 0xcc, 0xfc, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0xbf, + 0x10, 0x03, 0x00, 0x24, 0x0c, 0xb4, 0x1f, 0xb5, 0x06, 0xab, 0x00, 0x24, + 0x53, 0xf8, 0x04, 0x2b, 0x00, 0x94, 0x03, 0x93, 0xfc, 0xf7, 0xbc, 0xfc, + 0x04, 0xb0, 0xbd, 0xe8, 0x10, 0x40, 0x02, 0xb0, 0x70, 0x47, 0x0e, 0xb4, + 0x0f, 0xb5, 0x00, 0x21, 0x05, 0xab, 0x53, 0xf8, 0x04, 0x2b, 0x00, 0x91, + 0x6f, 0xf0, 0x00, 0x41, 0x03, 0x93, 0xfc, 0xf7, 0xab, 0xfc, 0x04, 0xb0, + 0x5d, 0xf8, 0x04, 0xeb, 0x03, 0xb0, 0x70, 0x47, 0x0f, 0xb4, 0x1f, 0xb5, + 0x08, 0x49, 0x06, 0xab, 0x00, 0x20, 0x09, 0x68, 0x53, 0xf8, 0x04, 0x2b, + 0x89, 0x68, 0x03, 0x93, 0x00, 0x91, 0x6f, 0xf0, 0x00, 0x41, 0xfc, 0xf7, + 0x97, 0xfc, 0x05, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, 0x04, 0xb0, 0x70, 0x47, + 0x10, 0x03, 0x00, 0x24, 0x73, 0xb5, 0x05, 0x46, 0x0c, 0x20, 0x0e, 0x46, + 0x01, 0x92, 0x02, 0xf0, 0x3f, 0xf9, 0x00, 0x23, 0x29, 0x46, 0x01, 0x9a, + 0x04, 0x46, 0xc0, 0xe9, 0x01, 0x33, 0x07, 0x4b, 0x03, 0x60, 0xfb, 0xf7, + 0x33, 0xfc, 0x05, 0x46, 0x30, 0xb1, 0x23, 0x68, 0x20, 0x46, 0x5b, 0x68, + 0x98, 0x47, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, 0x34, 0x60, 0xfa, 0xe7, + 0x74, 0xdb, 0x01, 0x08, 0x73, 0xb5, 0x05, 0x46, 0x0c, 0x20, 0x0e, 0x46, + 0xcd, 0xe9, 0x00, 0x32, 0x02, 0xf0, 0x20, 0xf9, 0x00, 0x21, 0x04, 0x46, + 0xc0, 0xe9, 0x01, 0x11, 0x08, 0x49, 0xdd, 0xe9, 0x00, 0x32, 0x01, 0x60, + 0x29, 0x46, 0xfb, 0xf7, 0xb6, 0xfb, 0x05, 0x46, 0x30, 0xb1, 0x23, 0x68, + 0x20, 0x46, 0x5b, 0x68, 0x98, 0x47, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, + 0x34, 0x60, 0xfa, 0xe7, 0xa0, 0xdb, 0x01, 0x08, 0x03, 0x68, 0x2d, 0xe9, + 0xf0, 0x41, 0xdb, 0x6e, 0x04, 0x46, 0x0d, 0x46, 0x98, 0x47, 0x80, 0x46, + 0x40, 0xf2, 0x01, 0x10, 0x02, 0xf0, 0xfc, 0xf8, 0x23, 0x68, 0x00, 0x27, + 0x06, 0x46, 0x1b, 0x6f, 0x29, 0x46, 0x20, 0x46, 0x98, 0x47, 0x23, 0x68, + 0x32, 0x46, 0x29, 0x46, 0x20, 0x46, 0x5b, 0x6e, 0x98, 0x47, 0x00, 0x28, + 0x01, 0xdd, 0x01, 0x37, 0xf5, 0xe7, 0x23, 0x68, 0x42, 0x46, 0x29, 0x46, + 0x20, 0x46, 0x9b, 0x6e, 0x98, 0x47, 0x30, 0x46, 0x0f, 0xf0, 0x4e, 0xf8, + 0x38, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x2d, 0xe9, 0xf0, 0x43, 0x06, 0x46, + 0x87, 0xb0, 0x2c, 0x20, 0x15, 0x46, 0x06, 0xf1, 0xa4, 0x08, 0x0f, 0x46, + 0x02, 0xf0, 0xd4, 0xf8, 0x04, 0x46, 0x40, 0x46, 0x06, 0xf1, 0x14, 0x09, + 0xff, 0xf7, 0x48, 0xf8, 0xb3, 0x69, 0x02, 0xaa, 0x21, 0x46, 0x63, 0x60, + 0x48, 0x46, 0xf3, 0x69, 0x01, 0x95, 0xa3, 0x60, 0x01, 0xab, 0xfd, 0xf7, + 0x2b, 0xfc, 0x05, 0x46, 0xa8, 0xb9, 0x9d, 0xf8, 0x0c, 0x30, 0x22, 0x2b, + 0x1c, 0xd1, 0x04, 0xaa, 0x21, 0x46, 0x48, 0x46, 0xfc, 0xf7, 0x38, 0xff, + 0x05, 0x46, 0x50, 0xb9, 0x63, 0x68, 0x23, 0x61, 0xa3, 0x68, 0x63, 0x61, + 0x0e, 0x23, 0xa3, 0x61, 0x10, 0x23, 0xe3, 0x60, 0x73, 0x6a, 0x74, 0x62, + 0x23, 0x60, 0x40, 0x46, 0xff, 0xf7, 0x02, 0xf8, 0x4d, 0xb9, 0x3c, 0x60, + 0x28, 0x46, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, 0xfb, 0xf7, 0x01, 0xbc, + 0x6f, 0xf0, 0x13, 0x05, 0xf1, 0xe7, 0x20, 0x46, 0x0f, 0xf0, 0x06, 0xf8, + 0xf2, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x07, 0x46, 0x9b, 0x46, 0x93, 0xb0, + 0x38, 0x20, 0x07, 0xf1, 0xa4, 0x09, 0x88, 0x46, 0x16, 0x46, 0x02, 0xf0, + 0x8d, 0xf8, 0x04, 0x46, 0x48, 0x46, 0xff, 0xf7, 0x03, 0xf8, 0x1b, 0xf0, + 0x03, 0x0c, 0x07, 0xf1, 0x14, 0x0a, 0x00, 0xf0, 0xc5, 0x80, 0xbc, 0xf1, + 0x01, 0x0f, 0x4f, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0xc1, 0x80, 0xbc, 0xf1, + 0x02, 0x0f, 0x84, 0x46, 0x01, 0xd0, 0x00, 0x21, 0x00, 0xe0, 0x03, 0x21, + 0x4f, 0xea, 0x6b, 0x02, 0x02, 0x96, 0x4f, 0xea, 0xab, 0x05, 0x02, 0xf4, + 0x80, 0x72, 0x05, 0xf4, 0x00, 0x75, 0x2a, 0x43, 0x0b, 0xf4, 0x80, 0x65, + 0x2a, 0x43, 0x4f, 0xea, 0x0b, 0x25, 0x05, 0xf4, 0x00, 0x65, 0x15, 0x43, + 0x45, 0xea, 0x0c, 0x05, 0x05, 0x43, 0x0d, 0x43, 0x05, 0xf0, 0x03, 0x03, + 0x01, 0x2b, 0x11, 0xd1, 0x02, 0xab, 0x03, 0xaa, 0x07, 0xa9, 0x50, 0x46, + 0xfd, 0xf7, 0xbe, 0xfb, 0x06, 0x46, 0x00, 0xbb, 0x9d, 0xf8, 0x10, 0x30, + 0x22, 0x2b, 0x00, 0xf0, 0x8a, 0x80, 0xa9, 0x05, 0x3f, 0xd5, 0x6f, 0xf0, + 0x10, 0x06, 0x09, 0xe0, 0x97, 0xf8, 0x54, 0x30, 0x00, 0x2b, 0xe9, 0xd1, + 0x50, 0x46, 0xfd, 0xf7, 0xcf, 0xfc, 0x06, 0x46, 0x00, 0x28, 0xe3, 0xd0, + 0x48, 0x46, 0xfe, 0xf7, 0x97, 0xff, 0x00, 0x2e, 0x78, 0xd1, 0xc8, 0xf8, + 0x00, 0x40, 0x30, 0x46, 0x13, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, 0xfb, 0xf7, + 0x94, 0xbb, 0x82, 0x1c, 0xf0, 0xd1, 0x02, 0x9b, 0x2f, 0x21, 0x18, 0x46, + 0x01, 0x93, 0x10, 0xf0, 0x23, 0xfc, 0x83, 0x46, 0x00, 0x28, 0xe7, 0xd1, + 0xeb, 0x05, 0xe5, 0xd5, 0x01, 0x9b, 0x40, 0xf6, 0x11, 0x02, 0x8d, 0xf8, + 0x12, 0x00, 0x18, 0x46, 0xad, 0xf8, 0x10, 0x20, 0x0f, 0xf0, 0xe2, 0xfd, + 0x4f, 0xf0, 0xff, 0x32, 0x8d, 0xf8, 0x13, 0x00, 0x07, 0xa9, 0x01, 0x9b, + 0x50, 0x46, 0xcd, 0xe9, 0x05, 0x2b, 0x03, 0xaa, 0xf6, 0xf7, 0xd2, 0xf8, + 0x06, 0x46, 0x00, 0x28, 0xcc, 0xd1, 0x08, 0x9b, 0x00, 0x22, 0x68, 0x05, + 0x63, 0x60, 0x09, 0x9b, 0xa2, 0x61, 0xa3, 0x60, 0x03, 0x9b, 0xe3, 0x60, + 0x05, 0x9b, 0x23, 0x61, 0x06, 0x9b, 0xc4, 0xe9, 0x07, 0x52, 0x63, 0x61, + 0x0a, 0xd4, 0x4f, 0xf0, 0xff, 0x33, 0x7d, 0x69, 0xe3, 0x62, 0x6b, 0x6b, + 0xf3, 0xb1, 0x3a, 0x6a, 0x62, 0xb1, 0x6f, 0xf0, 0x0b, 0x06, 0xb1, 0xe7, + 0x13, 0xb1, 0x45, 0xf4, 0x80, 0x35, 0xe5, 0x61, 0x4f, 0xf0, 0xff, 0x32, + 0x00, 0x23, 0xc4, 0xe9, 0x04, 0x23, 0xea, 0xe7, 0x63, 0x63, 0xe3, 0x69, + 0x03, 0xf0, 0x03, 0x03, 0x01, 0x2b, 0x04, 0xd0, 0x04, 0xf1, 0x2c, 0x01, + 0x28, 0x46, 0xfc, 0xf7, 0x43, 0xf8, 0x3b, 0x6a, 0x00, 0x26, 0x3c, 0x62, + 0x23, 0x60, 0x97, 0xe7, 0xe3, 0x69, 0x03, 0xf0, 0x03, 0x03, 0x01, 0x2b, + 0x06, 0xd1, 0x68, 0x69, 0x0e, 0xf0, 0x34, 0xff, 0x60, 0x63, 0x00, 0x28, + 0xef, 0xd1, 0xd6, 0xe7, 0xa8, 0x69, 0x0e, 0xf0, 0x2d, 0xff, 0x60, 0x63, + 0x00, 0x28, 0xe3, 0xd1, 0xcf, 0xe7, 0x6f, 0xf0, 0x14, 0x06, 0x81, 0xe7, + 0x20, 0x46, 0x0e, 0xf0, 0x2b, 0xff, 0x84, 0xe7, 0x01, 0x20, 0x42, 0xe7, + 0x4f, 0xf0, 0x02, 0x0c, 0x3f, 0xe7, 0x00, 0x00, 0xf0, 0xb5, 0x0c, 0x46, + 0x8b, 0xb0, 0x06, 0x46, 0x24, 0xb9, 0x32, 0x60, 0x04, 0x61, 0x30, 0x46, + 0x0b, 0xb0, 0xf0, 0xbd, 0x10, 0x46, 0x01, 0x92, 0x0f, 0xf0, 0x70, 0xfd, + 0x04, 0x30, 0x01, 0xf0, 0xa7, 0xff, 0x3a, 0x23, 0x30, 0x34, 0x05, 0x46, + 0x43, 0x70, 0x2f, 0x23, 0x04, 0x70, 0x03, 0x30, 0x00, 0xf8, 0x01, 0x3c, + 0x37, 0x46, 0x01, 0x99, 0x06, 0xac, 0x0f, 0xf0, 0x57, 0xfd, 0x08, 0x4b, + 0x00, 0x22, 0x47, 0xf8, 0x04, 0x5b, 0x05, 0x93, 0x06, 0x4b, 0x02, 0x93, + 0x02, 0xab, 0xcd, 0xe9, 0x03, 0x22, 0x0f, 0xcb, 0x84, 0xe8, 0x0f, 0x00, + 0x87, 0xe8, 0x0f, 0x00, 0xd7, 0xe7, 0x00, 0xbf, 0x71, 0x7c, 0x00, 0x08, + 0x6f, 0x85, 0x00, 0x08, 0xf0, 0xb5, 0x06, 0x46, 0x8b, 0xb0, 0x2c, 0x20, + 0x0f, 0x46, 0x01, 0x92, 0x01, 0xf0, 0x7c, 0xff, 0x01, 0x9a, 0x05, 0x46, + 0x31, 0x6d, 0x05, 0xa8, 0xff, 0xf7, 0xbe, 0xff, 0x33, 0x68, 0x30, 0x46, + 0x9b, 0x6f, 0x98, 0x47, 0x05, 0x9b, 0x03, 0x93, 0x00, 0x2d, 0x3d, 0xd0, + 0x00, 0x22, 0x04, 0xa9, 0x03, 0xa8, 0xfd, 0xf7, 0x81, 0xff, 0x04, 0x46, + 0x80, 0xb9, 0x04, 0x9b, 0x28, 0x46, 0x03, 0x99, 0x2b, 0x60, 0xfe, 0xf7, + 0xf7, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x31, 0xd1, 0x95, 0xf9, 0x2b, 0x30, + 0x00, 0x2b, 0x0c, 0xdb, 0xab, 0x79, 0xdb, 0x06, 0x03, 0xd4, 0x05, 0x24, + 0x00, 0x23, 0x2b, 0x60, 0x10, 0xe0, 0x04, 0x9b, 0xe9, 0x69, 0x18, 0x78, + 0xfb, 0xf7, 0xaa, 0xfb, 0xa8, 0x60, 0x04, 0x9b, 0x28, 0x46, 0xdb, 0x88, + 0xab, 0x80, 0xf5, 0xf7, 0x25, 0xff, 0x04, 0x28, 0x04, 0x46, 0xec, 0xd0, + 0x00, 0x28, 0xeb, 0xd1, 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, + 0x74, 0xb1, 0x28, 0x46, 0x0e, 0xf0, 0xa6, 0xfe, 0x20, 0x46, 0xfb, 0xf7, + 0x8b, 0xfb, 0x04, 0x46, 0x05, 0xa8, 0xfb, 0xf7, 0xfa, 0xfa, 0x20, 0x46, + 0x0b, 0xb0, 0xf0, 0xbd, 0x09, 0x24, 0xeb, 0xe7, 0x3d, 0x60, 0xf5, 0xe7, + 0x04, 0x28, 0xd2, 0xd0, 0xd2, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, 0x07, 0x46, + 0x94, 0xb0, 0x1c, 0x46, 0x28, 0x20, 0x88, 0x46, 0x01, 0x92, 0x01, 0xf0, + 0x1f, 0xff, 0x01, 0x9a, 0x39, 0x6d, 0x05, 0x46, 0x04, 0xa8, 0xff, 0xf7, + 0x61, 0xff, 0xa1, 0x07, 0x56, 0xbf, 0x04, 0xf0, 0x01, 0x06, 0x03, 0x26, + 0x01, 0x36, 0xa2, 0x05, 0x05, 0xd5, 0x63, 0x05, 0x4c, 0xbf, 0x46, 0xf0, + 0x08, 0x06, 0x46, 0xf0, 0x10, 0x06, 0x3b, 0x68, 0x20, 0x07, 0x38, 0x46, + 0x9b, 0x6f, 0x48, 0xbf, 0x46, 0xf0, 0x30, 0x06, 0x98, 0x47, 0x04, 0x9b, + 0x02, 0x93, 0x95, 0xb9, 0x09, 0x24, 0x3b, 0x68, 0x38, 0x46, 0xdb, 0x6f, + 0x98, 0x47, 0x28, 0x46, 0x0e, 0xf0, 0x64, 0xfe, 0x20, 0x46, 0xfb, 0xf7, + 0x49, 0xfb, 0x04, 0x46, 0x04, 0xa8, 0xfb, 0xf7, 0xb8, 0xfa, 0x20, 0x46, + 0x14, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x32, 0x46, 0x03, 0xa9, 0x02, 0xa8, + 0xfd, 0xf7, 0x00, 0xff, 0x00, 0x28, 0x40, 0xf0, 0xeb, 0x80, 0x03, 0x9b, + 0x09, 0xa8, 0x02, 0x99, 0x09, 0x93, 0xfe, 0xf7, 0x75, 0xfc, 0x04, 0x46, + 0x20, 0xb9, 0x9d, 0xf9, 0x4f, 0x30, 0x00, 0x2b, 0xb8, 0xbf, 0x06, 0x24, + 0x16, 0xf0, 0x1c, 0x0f, 0x00, 0xf0, 0xc9, 0x80, 0x00, 0x2c, 0x79, 0xd0, + 0x04, 0x2c, 0x40, 0xf0, 0xce, 0x80, 0x09, 0xa8, 0xdd, 0xf8, 0x24, 0x90, + 0xf5, 0xf7, 0xa8, 0xfe, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xd2, 0x80, + 0x0f, 0x99, 0x48, 0x46, 0xfd, 0xf7, 0x33, 0xfd, 0x04, 0x46, 0x00, 0x28, + 0x40, 0xf0, 0xca, 0x80, 0x10, 0x9b, 0x1b, 0x78, 0xe5, 0x2b, 0x5a, 0xd1, + 0x0f, 0x99, 0x48, 0x46, 0xfd, 0xf7, 0x27, 0xfd, 0x04, 0x46, 0x00, 0x28, + 0x40, 0xf0, 0xb1, 0x80, 0x01, 0x46, 0x20, 0x22, 0x10, 0x98, 0x46, 0xf0, + 0x08, 0x06, 0x0e, 0xf0, 0x7d, 0xfe, 0x11, 0xab, 0x10, 0x9a, 0x03, 0xcb, + 0x10, 0x60, 0x51, 0x60, 0x19, 0x88, 0x9b, 0x78, 0x11, 0x81, 0x93, 0x72, + 0x01, 0x23, 0x89, 0xf8, 0x03, 0x30, 0xff, 0xf7, 0x07, 0xfb, 0x01, 0x46, + 0x01, 0x90, 0x10, 0x98, 0x0e, 0x30, 0xfb, 0xf7, 0x55, 0xfb, 0x10, 0x98, + 0x01, 0x99, 0x16, 0x30, 0xfb, 0xf7, 0x50, 0xfb, 0x03, 0x9c, 0x10, 0x99, + 0x20, 0x78, 0xfb, 0xf7, 0xe9, 0xfa, 0x20, 0x23, 0x81, 0x46, 0xcb, 0x72, + 0x00, 0x23, 0x10, 0x9a, 0x93, 0x76, 0xd3, 0x76, 0x21, 0x78, 0x03, 0x29, + 0x04, 0xbf, 0x13, 0x75, 0x53, 0x75, 0x10, 0x9a, 0x13, 0x77, 0x53, 0x77, + 0x93, 0x77, 0xd3, 0x77, 0x01, 0x23, 0xe3, 0x70, 0xa0, 0xb1, 0x01, 0x46, + 0x00, 0x22, 0x09, 0xa8, 0xd4, 0xf8, 0x30, 0xa0, 0xfe, 0xf7, 0xcc, 0xfc, + 0x04, 0x46, 0x00, 0x28, 0x6d, 0xd1, 0x51, 0x46, 0x03, 0x98, 0xfd, 0xf7, + 0xdc, 0xfc, 0x09, 0xf1, 0xff, 0x33, 0x03, 0x9a, 0x04, 0x46, 0x13, 0x61, + 0x00, 0x28, 0x62, 0xd1, 0x31, 0x07, 0x48, 0xbf, 0x46, 0xf0, 0x40, 0x06, + 0x0d, 0xe0, 0x00, 0x2b, 0xa2, 0xd0, 0x01, 0x21, 0x09, 0xa8, 0xfe, 0xf7, + 0xf3, 0xfa, 0x8d, 0xe7, 0x9d, 0xf8, 0x2a, 0x30, 0x13, 0xf0, 0x11, 0x0f, + 0x50, 0xd1, 0x31, 0x07, 0xb1, 0xd4, 0x03, 0x9c, 0xdd, 0xf8, 0x40, 0x90, + 0x23, 0x6b, 0x49, 0x46, 0xc5, 0xf8, 0x24, 0x90, 0x2b, 0x62, 0x20, 0x78, + 0xfb, 0xf7, 0xa2, 0xfa, 0x01, 0x46, 0xa8, 0x60, 0x09, 0xf1, 0x1c, 0x00, + 0xfb, 0xf7, 0x06, 0xfb, 0xe3, 0x88, 0xb2, 0x06, 0x81, 0x46, 0xab, 0x80, + 0x4f, 0xf0, 0x00, 0x03, 0xe8, 0x60, 0x2c, 0x60, 0x2e, 0x74, 0x6b, 0x74, + 0xeb, 0x61, 0x6b, 0x61, 0x1f, 0xd5, 0xf0, 0xb1, 0x63, 0x89, 0xa4, 0x89, + 0x68, 0x61, 0x5c, 0x43, 0x4c, 0x45, 0x2d, 0xd2, 0x28, 0x68, 0xa9, 0xeb, + 0x04, 0x09, 0xfd, 0xf7, 0xb0, 0xfc, 0x01, 0x28, 0x01, 0x46, 0x27, 0xd9, + 0x43, 0x1c, 0xf3, 0xd1, 0x01, 0x24, 0xa9, 0x61, 0xec, 0xb9, 0x03, 0x98, + 0x83, 0x89, 0xb9, 0xfb, 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x93, 0x23, 0xb1, + 0xfd, 0xf7, 0x7c, 0xfc, 0xf0, 0xb1, 0x10, 0x44, 0xe8, 0x61, 0x3b, 0x68, + 0x38, 0x46, 0x00, 0x24, 0xdb, 0x6f, 0x98, 0x47, 0xc8, 0xf8, 0x00, 0x50, + 0x16, 0xe7, 0x44, 0xb9, 0x9d, 0xf8, 0x2a, 0x30, 0xda, 0x06, 0x0d, 0xd4, + 0xb4, 0x07, 0x9f, 0xd5, 0xd8, 0x07, 0x9d, 0xd5, 0x07, 0x24, 0x00, 0x23, + 0x2b, 0x60, 0xfe, 0xe6, 0x00, 0x24, 0xda, 0xe7, 0x02, 0x24, 0xd8, 0xe7, + 0x04, 0x46, 0xf6, 0xe7, 0x04, 0x24, 0xf4, 0xe7, 0x02, 0x24, 0xf2, 0xe7, + 0x04, 0x2c, 0xef, 0xd0, 0xef, 0xe7, 0x70, 0xb5, 0x98, 0xb0, 0x05, 0x46, + 0x16, 0x46, 0x0a, 0x46, 0x01, 0x6d, 0x02, 0xa8, 0xff, 0xf7, 0x30, 0xfe, + 0x2b, 0x68, 0x28, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x18, 0x22, 0x00, 0x21, + 0x07, 0xa8, 0x0e, 0xf0, 0xb1, 0xfd, 0x02, 0x9b, 0x00, 0x22, 0x0d, 0xa9, + 0x01, 0xa8, 0x01, 0x93, 0xfd, 0xf7, 0xf0, 0xfd, 0x04, 0x46, 0x50, 0xb9, + 0x01, 0x99, 0x0d, 0xa8, 0xfe, 0xf7, 0x68, 0xfb, 0x04, 0x46, 0x20, 0xb9, + 0x9d, 0xf9, 0x5f, 0x30, 0x00, 0x2b, 0x0e, 0xda, 0x06, 0x24, 0x2b, 0x68, + 0x28, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x20, 0x46, 0xfb, 0xf7, 0x18, 0xfa, + 0x04, 0x46, 0x02, 0xa8, 0xfb, 0xf7, 0x87, 0xf9, 0x20, 0x46, 0x18, 0xb0, + 0x70, 0xbd, 0x13, 0x9b, 0x8d, 0xf8, 0x25, 0x00, 0x1b, 0xb1, 0x07, 0xa9, + 0x0d, 0xa8, 0xfb, 0xf7, 0x83, 0xfa, 0x9d, 0xf8, 0x24, 0x20, 0x40, 0xf2, + 0xff, 0x11, 0x07, 0x9b, 0x28, 0x46, 0x12, 0xf0, 0x10, 0x0f, 0x4f, 0xf0, + 0x00, 0x04, 0x33, 0x61, 0x14, 0xbf, 0x4f, 0xf4, 0x80, 0x43, 0x4f, 0xf4, + 0x00, 0x43, 0x12, 0xf0, 0x01, 0x0f, 0x40, 0xf2, 0x6d, 0x12, 0x08, 0xbf, + 0x0a, 0x46, 0x13, 0x43, 0x73, 0x60, 0x2b, 0x68, 0xdb, 0x6f, 0x98, 0x47, + 0xd5, 0xe7, 0xf0, 0xb5, 0x9f, 0xb0, 0x05, 0x46, 0x0a, 0x46, 0x01, 0x6d, + 0x03, 0xa8, 0xff, 0xf7, 0xd9, 0xfd, 0x2b, 0x68, 0x28, 0x46, 0x9b, 0x6f, + 0x98, 0x47, 0x03, 0x9b, 0x02, 0x22, 0x02, 0xa9, 0x01, 0xa8, 0x01, 0x93, + 0xfd, 0xf7, 0x9e, 0xfd, 0x04, 0x46, 0x80, 0xb9, 0x02, 0x9b, 0x08, 0xa8, + 0x01, 0x99, 0x08, 0x93, 0xfe, 0xf7, 0x14, 0xfb, 0x04, 0x46, 0x40, 0xb9, + 0x9d, 0xf9, 0x4b, 0x30, 0x00, 0x2b, 0x49, 0xdb, 0x9d, 0xf8, 0x26, 0x70, + 0xfa, 0x07, 0x10, 0xd5, 0x07, 0x24, 0x2b, 0x68, 0x28, 0x46, 0xdb, 0x6f, + 0x98, 0x47, 0x07, 0x2c, 0x40, 0xd0, 0x20, 0x46, 0xfb, 0xf7, 0xbe, 0xf9, + 0x04, 0x46, 0x03, 0xa8, 0xfb, 0xf7, 0x2d, 0xf9, 0x20, 0x46, 0x1f, 0xb0, + 0xf0, 0xbd, 0x02, 0x9c, 0x0f, 0x99, 0x20, 0x78, 0xfb, 0xf7, 0xba, 0xf9, + 0xfb, 0x06, 0x06, 0x46, 0x12, 0xd4, 0x08, 0x9f, 0x0e, 0x99, 0x38, 0x46, + 0xfd, 0xf7, 0xc7, 0xfb, 0x04, 0x46, 0x00, 0x28, 0xdf, 0xd1, 0x0f, 0x9b, + 0xe5, 0x22, 0x1a, 0x70, 0x01, 0x23, 0xfb, 0x70, 0xae, 0xb9, 0x02, 0x98, + 0xfb, 0xf7, 0x5c, 0xfe, 0x04, 0x46, 0xd4, 0xe7, 0x15, 0x90, 0x13, 0xa8, + 0x13, 0x94, 0xf5, 0xf7, 0x21, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xcc, 0xd1, + 0x13, 0xa8, 0xf5, 0xf7, 0x4f, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xc5, 0xd0, + 0x04, 0x28, 0xc4, 0xd1, 0xdb, 0xe7, 0x02, 0x46, 0x31, 0x46, 0x08, 0xa8, + 0xfe, 0xf7, 0x8c, 0xfb, 0x04, 0x46, 0x00, 0x28, 0xbb, 0xd1, 0xe0, 0xe7, + 0x06, 0x24, 0xb8, 0xe7, 0x6f, 0xf0, 0x59, 0x04, 0xbf, 0xe7, 0x00, 0x00, + 0x2d, 0xe9, 0xf3, 0x4d, 0x00, 0xf1, 0x1c, 0x03, 0x07, 0x46, 0x53, 0xe8, + 0x00, 0x2f, 0x01, 0x32, 0x43, 0xe8, 0x00, 0x26, 0x00, 0x2e, 0xf8, 0xd1, + 0x01, 0x2a, 0x40, 0xf0, 0x86, 0x80, 0x78, 0x68, 0x03, 0x68, 0x9b, 0x68, + 0x98, 0x47, 0x06, 0x46, 0x68, 0xbb, 0x78, 0x68, 0x03, 0x68, 0x5b, 0x6a, + 0x98, 0x47, 0x42, 0x28, 0x38, 0xbf, 0x42, 0x20, 0x04, 0x46, 0x01, 0xf0, + 0x09, 0xfd, 0x80, 0x46, 0x78, 0x68, 0xc4, 0xf5, 0x00, 0x72, 0x03, 0x68, + 0x41, 0x46, 0xcd, 0xe9, 0x00, 0x46, 0x5d, 0x69, 0x33, 0x46, 0xa8, 0x47, + 0x06, 0x46, 0x98, 0xb9, 0xa4, 0xf1, 0x42, 0x03, 0x08, 0xeb, 0x03, 0x05, + 0x95, 0xf8, 0x40, 0x30, 0x55, 0x2b, 0x64, 0xd1, 0x95, 0xf8, 0x41, 0x30, + 0xaa, 0x2b, 0x60, 0xd1, 0x7b, 0x7e, 0x05, 0xeb, 0x03, 0x13, 0x13, 0xf8, + 0x10, 0x2c, 0x52, 0x06, 0x08, 0xd0, 0x2e, 0x4e, 0x40, 0x46, 0x0e, 0xf0, + 0x51, 0xfc, 0x00, 0x23, 0x87, 0xf8, 0x20, 0x30, 0xfb, 0x61, 0x4c, 0xe0, + 0x13, 0xf8, 0x0c, 0x2c, 0x0f, 0x2a, 0x04, 0xd8, 0x48, 0xf2, 0x21, 0x03, + 0xd3, 0x40, 0xdb, 0x07, 0xed, 0xd4, 0x78, 0x68, 0x4f, 0xf0, 0x00, 0x0a, + 0x03, 0x68, 0xdb, 0x6a, 0x98, 0x47, 0x7b, 0x7e, 0xb0, 0xf5, 0x00, 0x7f, + 0x03, 0xf1, 0xff, 0x33, 0x38, 0xbf, 0x4f, 0xf4, 0x00, 0x70, 0x05, 0xeb, + 0x03, 0x13, 0x1a, 0x79, 0x3a, 0x76, 0x53, 0xf8, 0x08, 0x1f, 0x0a, 0x0a, + 0x61, 0xf3, 0x07, 0x0a, 0x62, 0xf3, 0x0f, 0x2a, 0x0a, 0x0c, 0x09, 0x0e, + 0x62, 0xf3, 0x17, 0x4a, 0x00, 0x22, 0x61, 0xf3, 0x1f, 0x6a, 0xa0, 0xfb, + 0x0a, 0xab, 0xc7, 0xe9, 0x02, 0xab, 0x5b, 0x68, 0x19, 0x0a, 0x63, 0xf3, + 0x07, 0x02, 0x61, 0xf3, 0x0f, 0x22, 0x19, 0x0c, 0x1b, 0x0e, 0x61, 0xf3, + 0x17, 0x42, 0x63, 0xf3, 0x1f, 0x62, 0xa0, 0xfb, 0x02, 0x45, 0x78, 0x68, + 0x52, 0x46, 0x03, 0x68, 0xc7, 0xe9, 0x04, 0x45, 0xcd, 0xe9, 0x00, 0x45, + 0x59, 0x6c, 0x5b, 0x46, 0x88, 0x47, 0x00, 0x28, 0xaf, 0xd0, 0x01, 0x23, + 0x40, 0x46, 0x87, 0xf8, 0x20, 0x30, 0x0e, 0xf0, 0xff, 0xfb, 0x30, 0x46, + 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0x02, 0x4e, 0xa4, 0xe7, 0x00, 0xbf, + 0xe2, 0xf3, 0xff, 0xff, 0xe3, 0xf3, 0xff, 0xff, 0x70, 0xb5, 0x1d, 0x4b, + 0x05, 0x46, 0x04, 0x46, 0x45, 0xf8, 0x54, 0x3b, 0x28, 0x46, 0xfe, 0xf7, + 0xf9, 0xfb, 0x20, 0x6c, 0x66, 0x69, 0x0a, 0xf0, 0x75, 0xfc, 0x00, 0x23, + 0x63, 0x61, 0x94, 0xf8, 0x3d, 0x30, 0x6b, 0xb9, 0x01, 0x23, 0x84, 0xf8, + 0x3d, 0x30, 0x4e, 0xb1, 0xef, 0xf3, 0x05, 0x83, 0x33, 0xb9, 0x0a, 0xf0, + 0xef, 0xf8, 0x18, 0xb9, 0x30, 0x46, 0xdf, 0xf8, 0x40, 0xc0, 0x00, 0xdf, + 0x28, 0x46, 0xfe, 0xf7, 0xbf, 0xfb, 0x94, 0xf8, 0x3c, 0x30, 0x2b, 0xb1, + 0xa0, 0x6a, 0x08, 0xb1, 0x0e, 0xf0, 0xca, 0xfb, 0x00, 0x23, 0xa3, 0x62, + 0x60, 0x6d, 0x0a, 0xf0, 0xe9, 0xfc, 0x25, 0x6c, 0xef, 0xf3, 0x05, 0x83, + 0x33, 0xb9, 0x0a, 0xf0, 0xd5, 0xf8, 0x18, 0xb9, 0x28, 0x46, 0xdf, 0xf8, + 0x10, 0xc0, 0x00, 0xdf, 0x20, 0x46, 0x70, 0xbd, 0xcc, 0xd8, 0x01, 0x08, + 0xc5, 0x42, 0x01, 0x08, 0x95, 0x43, 0x01, 0x08, 0x10, 0xb5, 0x04, 0x46, + 0xff, 0xf7, 0xba, 0xff, 0x20, 0x46, 0x0e, 0xf0, 0xab, 0xfb, 0x20, 0x46, + 0x10, 0xbd, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x47, 0x00, 0x23, 0x8a, 0xb0, + 0x81, 0x46, 0x42, 0xf2, 0x10, 0x78, 0xdf, 0xf8, 0x5c, 0xa0, 0x01, 0x24, + 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x8d, 0xf8, 0x27, 0x30, 0xef, 0xf3, + 0x05, 0x83, 0x2b, 0xb9, 0x0a, 0xf0, 0xaa, 0xf8, 0x10, 0xb9, 0x01, 0x20, + 0xd4, 0x46, 0x00, 0xdf, 0x0d, 0xf1, 0x27, 0x03, 0x4f, 0xf0, 0xff, 0x32, + 0x05, 0x21, 0x48, 0x46, 0x04, 0x93, 0x00, 0x23, 0xcd, 0xe9, 0x06, 0x45, + 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x02, 0x67, 0x00, 0xf0, + 0x7f, 0xf8, 0x9d, 0xf8, 0x27, 0x30, 0x13, 0xf0, 0x01, 0x00, 0x02, 0xd0, + 0xb8, 0xf1, 0x01, 0x08, 0xdd, 0xd1, 0x80, 0xf0, 0x01, 0x00, 0x0a, 0xb0, + 0xbd, 0xe8, 0xf0, 0x87, 0xe5, 0x48, 0x01, 0x08, 0xf0, 0xb5, 0x00, 0x23, + 0x8b, 0xb0, 0x00, 0x26, 0x00, 0x27, 0x8d, 0xf8, 0x27, 0x30, 0x4f, 0xf0, + 0xff, 0x32, 0x04, 0x93, 0x06, 0x21, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, + 0x04, 0x46, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x67, 0x00, 0xf0, + 0x5b, 0xf8, 0x05, 0x46, 0x18, 0xb1, 0x4f, 0xf0, 0xff, 0x30, 0x0b, 0xb0, + 0xf0, 0xbd, 0x20, 0x46, 0xff, 0xf7, 0xaa, 0xff, 0x00, 0x28, 0xf6, 0xd0, + 0x01, 0x22, 0x00, 0x23, 0x05, 0x21, 0x20, 0x46, 0x00, 0x95, 0xcd, 0xe9, + 0x06, 0x23, 0x0d, 0xf1, 0x27, 0x03, 0x4f, 0xf0, 0xff, 0x32, 0x04, 0x93, + 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x02, 0x67, 0x00, 0xf0, 0x3e, 0xf8, + 0x00, 0x28, 0xe2, 0xd1, 0x9d, 0xf8, 0x27, 0x00, 0x80, 0xf0, 0x02, 0x00, + 0x40, 0xf3, 0x40, 0x00, 0xdd, 0xe7, 0x70, 0xb5, 0x1d, 0x46, 0xd0, 0xf8, + 0xf4, 0x30, 0x86, 0xb0, 0x06, 0x46, 0x01, 0x33, 0x17, 0xd0, 0x14, 0x0e, + 0x8d, 0xf8, 0x17, 0x40, 0xff, 0xf7, 0xb8, 0xff, 0x70, 0xb9, 0x01, 0x23, + 0x4f, 0xf0, 0xff, 0x32, 0xd6, 0xf8, 0xf4, 0x10, 0x00, 0x93, 0x0d, 0xf1, + 0x17, 0x03, 0xcd, 0xe9, 0x01, 0x00, 0x30, 0x1d, 0xf8, 0xf7, 0x16, 0xf8, + 0x06, 0xb0, 0x70, 0xbd, 0x4f, 0xf0, 0xff, 0x30, 0xfa, 0xe7, 0x90, 0xf8, + 0xfa, 0x31, 0x03, 0x2b, 0x0e, 0xd0, 0x6b, 0x1c, 0x08, 0xbf, 0xb2, 0xf1, + 0xff, 0x3f, 0x09, 0xd0, 0x00, 0x2d, 0x08, 0xbf, 0xb2, 0xf1, 0x80, 0x7f, + 0x2c, 0xbf, 0x4f, 0xf0, 0xff, 0x30, 0x00, 0x20, 0x40, 0xb2, 0xe7, 0xe7, + 0x00, 0x20, 0xe5, 0xe7, 0x2d, 0xe9, 0xf7, 0x43, 0x0a, 0x9e, 0x04, 0x46, + 0x15, 0x46, 0x0c, 0x9f, 0xdd, 0xf8, 0x38, 0x80, 0xdd, 0xf8, 0x40, 0x90, + 0x01, 0x91, 0xff, 0xf7, 0xbe, 0xff, 0x58, 0xb9, 0x33, 0x46, 0x2a, 0x46, + 0x01, 0x99, 0x20, 0x1d, 0x0a, 0x97, 0xcd, 0xe9, 0x0b, 0x89, 0x03, 0xb0, + 0xbd, 0xe8, 0xf0, 0x43, 0xf7, 0xf7, 0xe2, 0xbf, 0x03, 0xb0, 0xbd, 0xe8, + 0xf0, 0x83, 0xd0, 0xf8, 0xe8, 0x30, 0x01, 0x33, 0x2d, 0xe9, 0xf0, 0x47, + 0x05, 0x46, 0x88, 0xb0, 0x8a, 0x46, 0x1d, 0xd1, 0xff, 0xf7, 0x68, 0xff, + 0x28, 0xb1, 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, 0x08, 0xb0, 0xbd, 0xe8, + 0xf0, 0x87, 0x00, 0x22, 0x00, 0x23, 0x01, 0x21, 0x04, 0x90, 0xcd, 0xf8, + 0x00, 0xa0, 0xcd, 0xe9, 0x06, 0x23, 0xd5, 0xf8, 0xe4, 0x30, 0x4f, 0xf0, + 0xff, 0x32, 0xcd, 0xe9, 0x02, 0x30, 0x4f, 0xf0, 0xff, 0x33, 0x28, 0x46, + 0xff, 0xf7, 0xbe, 0xff, 0x04, 0x46, 0xe6, 0xe7, 0xff, 0xf7, 0x4a, 0xff, + 0x00, 0x28, 0xe0, 0xd1, 0x4f, 0xf0, 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, + 0x01, 0x26, 0x00, 0x27, 0x04, 0x90, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, + 0xff, 0x33, 0x01, 0x21, 0x28, 0x46, 0xcd, 0xf8, 0x00, 0xa0, 0xcd, 0xe9, + 0x06, 0x89, 0xcd, 0xe9, 0x02, 0x67, 0xff, 0xf7, 0xa3, 0xff, 0x04, 0x46, + 0x00, 0x28, 0xca, 0xd1, 0x28, 0x46, 0xff, 0xf7, 0x2d, 0xff, 0x00, 0x28, + 0xc3, 0xd1, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0xd5, 0xf8, + 0xe8, 0x10, 0x04, 0x94, 0xcd, 0xf8, 0x00, 0xa0, 0xcd, 0xe9, 0x06, 0x89, + 0xcd, 0xe9, 0x02, 0x67, 0xcb, 0xe7, 0xf0, 0xb5, 0x01, 0x22, 0x89, 0xb0, + 0x00, 0x23, 0x00, 0x26, 0x00, 0x27, 0x0c, 0x46, 0x04, 0x91, 0x05, 0x21, + 0x05, 0x46, 0xcd, 0xe9, 0x06, 0x23, 0x00, 0x23, 0x4f, 0xf0, 0xff, 0x32, + 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x02, 0x67, 0xff, 0xf7, + 0x77, 0xff, 0x98, 0xb9, 0xd5, 0xf8, 0xe4, 0x30, 0x01, 0x3b, 0x0f, 0xd0, + 0x01, 0x34, 0x00, 0x90, 0x4f, 0xf0, 0xff, 0x32, 0xd5, 0xf8, 0xec, 0x10, + 0x04, 0x94, 0xcd, 0xe9, 0x06, 0x30, 0xcd, 0xe9, 0x02, 0x67, 0x4f, 0xf0, + 0xff, 0x33, 0x28, 0x46, 0xff, 0xf7, 0x62, 0xff, 0x09, 0xb0, 0xf0, 0xbd, + 0xf0, 0xb5, 0x00, 0xf1, 0xbc, 0x07, 0x04, 0x46, 0x89, 0xb0, 0x38, 0x46, + 0xfe, 0xf7, 0x66, 0xfa, 0x94, 0xf8, 0x04, 0x52, 0x2d, 0xb9, 0x38, 0x46, + 0xc4, 0xf8, 0x00, 0x52, 0xfe, 0xf7, 0x3e, 0xfa, 0x09, 0xe0, 0xd4, 0xf8, + 0x00, 0x62, 0x01, 0x3e, 0xc4, 0xf8, 0x00, 0x62, 0x36, 0xb1, 0x00, 0x25, + 0x38, 0x46, 0xfe, 0xf7, 0x33, 0xfa, 0x28, 0x46, 0x09, 0xb0, 0xf0, 0xbd, + 0x00, 0x22, 0x00, 0x23, 0x04, 0x21, 0x20, 0x46, 0x04, 0x96, 0x00, 0x96, + 0xcd, 0xe9, 0x06, 0x23, 0xcd, 0xe9, 0x02, 0x23, 0x4f, 0xf0, 0xff, 0x33, + 0x4f, 0xf0, 0xff, 0x32, 0xff, 0xf7, 0x32, 0xff, 0x00, 0x28, 0x84, 0xf8, + 0x04, 0x62, 0x38, 0x46, 0x0c, 0xbf, 0x00, 0x25, 0x6f, 0xf4, 0x7a, 0x65, + 0xfe, 0xf7, 0x16, 0xfa, 0xd4, 0xf8, 0xb4, 0x30, 0x00, 0x2b, 0xde, 0xd1, + 0x10, 0x48, 0xb4, 0xf9, 0xb8, 0x40, 0x02, 0xf0, 0x7d, 0xfb, 0xfe, 0xf7, + 0x2b, 0xfa, 0x0e, 0x4b, 0x1b, 0x68, 0x03, 0xf1, 0x14, 0x01, 0x1a, 0x46, + 0x02, 0x33, 0xb2, 0xf9, 0x00, 0x00, 0xa0, 0x42, 0x0c, 0xd1, 0x4f, 0xf6, + 0xff, 0x73, 0x13, 0x80, 0x08, 0x4a, 0x13, 0x68, 0x00, 0x2b, 0x01, 0xdd, + 0x01, 0x3b, 0x13, 0x60, 0x03, 0x48, 0x02, 0xf0, 0x65, 0xfb, 0xb3, 0xe7, + 0x8b, 0x42, 0xea, 0xd1, 0xf8, 0xe7, 0x00, 0xbf, 0x2c, 0x15, 0x02, 0x24, + 0xd8, 0x06, 0x00, 0x24, 0x54, 0x15, 0x02, 0x24, 0x2d, 0xe9, 0xf0, 0x47, + 0x00, 0xf1, 0xbc, 0x07, 0x88, 0xb0, 0x04, 0x46, 0x15, 0x46, 0x10, 0x9e, + 0x38, 0x46, 0x05, 0x93, 0x89, 0x46, 0xfe, 0xf7, 0xfd, 0xf9, 0x2a, 0x46, + 0x05, 0x9b, 0x20, 0x46, 0xd4, 0xf8, 0xe0, 0xa0, 0x07, 0x96, 0xff, 0xf7, + 0xb2, 0xfe, 0xa0, 0xbb, 0x94, 0xf8, 0xfd, 0x31, 0x04, 0xf1, 0x04, 0x08, + 0x94, 0xf8, 0xf9, 0x21, 0x03, 0x93, 0x40, 0x46, 0x94, 0xf8, 0xfe, 0x31, + 0x02, 0x93, 0x94, 0xf8, 0xfb, 0x31, 0xcd, 0xe9, 0x00, 0x23, 0x94, 0xf8, + 0xfa, 0x31, 0x94, 0xf8, 0xf8, 0x11, 0x02, 0xf0, 0x8d, 0xfc, 0x06, 0x46, + 0xe8, 0xb9, 0x94, 0xf8, 0xfb, 0x01, 0x07, 0xab, 0x51, 0x46, 0xb0, 0xfa, + 0x80, 0xf0, 0x40, 0x09, 0xcd, 0xe9, 0x00, 0x93, 0x42, 0x42, 0x2b, 0x46, + 0x40, 0x46, 0xf7, 0xf7, 0x25, 0xfe, 0x05, 0x46, 0x32, 0x46, 0x31, 0x46, + 0x40, 0x46, 0xcd, 0xe9, 0x02, 0x66, 0xcd, 0xe9, 0x00, 0x66, 0x94, 0xf8, + 0xfa, 0x31, 0x02, 0xf0, 0x71, 0xfc, 0x45, 0xea, 0x00, 0x04, 0x64, 0xb2, + 0x0c, 0xb1, 0x6f, 0xf4, 0x7a, 0x64, 0x38, 0x46, 0xfe, 0xf7, 0x9a, 0xf9, + 0x20, 0x46, 0x08, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x2d, 0xe9, 0xf0, 0x4f, + 0x92, 0x46, 0x9b, 0x46, 0x8d, 0xb0, 0x04, 0x46, 0xd0, 0xe9, 0x44, 0x23, + 0x9b, 0x45, 0x08, 0xbf, 0x92, 0x45, 0x28, 0xd2, 0xd0, 0xf8, 0x28, 0xc1, + 0xbc, 0xf1, 0x00, 0x0f, 0x23, 0xd0, 0xbc, 0xf1, 0x01, 0x0f, 0x0c, 0xd0, + 0x00, 0xf5, 0xb4, 0x7e, 0x00, 0x25, 0xac, 0x45, 0x1b, 0xdd, 0xfe, 0xe8, + 0x02, 0x01, 0x59, 0x45, 0x08, 0xbf, 0x50, 0x45, 0x02, 0xd2, 0x01, 0x35, + 0xf5, 0xe7, 0x00, 0x25, 0x61, 0x19, 0x91, 0xf8, 0x54, 0x11, 0x05, 0x91, + 0x16, 0x99, 0x1a, 0xeb, 0x01, 0x06, 0x17, 0x99, 0x4b, 0xeb, 0x01, 0x07, + 0xbb, 0x42, 0x08, 0xbf, 0xb2, 0x42, 0x07, 0xd2, 0x61, 0x4c, 0x20, 0x46, + 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x4f, 0xf0, 0xff, 0x35, 0xe9, 0xe7, + 0x23, 0x68, 0x52, 0x46, 0x20, 0x46, 0x19, 0x6b, 0x5b, 0x46, 0x88, 0x47, + 0x02, 0x46, 0x0b, 0x46, 0x50, 0x46, 0x59, 0x46, 0x10, 0xf0, 0xa6, 0xf8, + 0x13, 0x43, 0xe9, 0xd1, 0x16, 0xf1, 0xff, 0x32, 0x23, 0x68, 0x20, 0x46, + 0x19, 0x6b, 0x47, 0xf1, 0xff, 0x33, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, + 0x30, 0x46, 0x39, 0x46, 0x10, 0xf0, 0x96, 0xf8, 0x13, 0x43, 0xd9, 0xd1, + 0x04, 0xf5, 0xe4, 0x73, 0x09, 0x93, 0xdd, 0xe9, 0x16, 0x23, 0x13, 0x43, + 0x00, 0xf0, 0x94, 0x80, 0xd4, 0xf8, 0x18, 0x91, 0xb9, 0xf1, 0xff, 0x3f, + 0x59, 0xd1, 0x1a, 0xf1, 0xff, 0x33, 0x4f, 0xf0, 0x08, 0x07, 0x4f, 0xf0, + 0x03, 0x06, 0x0a, 0x93, 0x4b, 0xf1, 0xff, 0x33, 0x0b, 0x93, 0x05, 0xf1, + 0x09, 0x03, 0x04, 0xeb, 0xc3, 0x03, 0x08, 0x93, 0x05, 0x9b, 0x3b, 0x42, + 0x24, 0xd0, 0x09, 0x9b, 0x4f, 0xf0, 0x00, 0x09, 0x50, 0x46, 0x59, 0x46, + 0x53, 0xf8, 0x26, 0x30, 0x1a, 0x46, 0x98, 0x46, 0x4b, 0x46, 0x10, 0xf0, + 0x69, 0xf8, 0x13, 0x43, 0x16, 0xd1, 0xdd, 0xe9, 0x16, 0x23, 0x4b, 0x45, + 0x08, 0xbf, 0x42, 0x45, 0x10, 0xd3, 0x0a, 0x9b, 0x13, 0xeb, 0x08, 0x03, + 0x06, 0x93, 0x0b, 0x9b, 0x43, 0xeb, 0x09, 0x03, 0x07, 0x93, 0x08, 0x9b, + 0xdd, 0xe9, 0x06, 0x01, 0xd3, 0xe9, 0x48, 0x23, 0x8b, 0x42, 0x08, 0xbf, + 0x82, 0x42, 0x03, 0xd2, 0x01, 0x3e, 0x4f, 0xea, 0x57, 0x07, 0xd3, 0xd2, + 0x04, 0xeb, 0x86, 0x06, 0xd6, 0xf8, 0xb8, 0x91, 0xd6, 0xf8, 0xc8, 0x61, + 0x04, 0xf1, 0xbc, 0x07, 0x4f, 0xf0, 0x00, 0x08, 0x38, 0x46, 0xfe, 0xf7, + 0x0b, 0xf9, 0x20, 0x46, 0xff, 0xf7, 0x8a, 0xfd, 0x00, 0x28, 0x3d, 0xd1, + 0x5b, 0x46, 0x52, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xbe, 0xfd, 0x03, 0x46, + 0x40, 0xb1, 0x6f, 0xf4, 0x7a, 0x64, 0x38, 0x46, 0xfe, 0xf7, 0xda, 0xf8, + 0x73, 0xe7, 0x4f, 0xf4, 0x80, 0x56, 0xe3, 0xe7, 0xcd, 0xe9, 0x01, 0x00, + 0x00, 0x90, 0x52, 0x46, 0x49, 0x46, 0x20, 0x1d, 0xf7, 0xf7, 0xdc, 0xfd, + 0x00, 0x28, 0xec, 0xd1, 0x1a, 0xeb, 0x06, 0x0a, 0x16, 0x9b, 0x4b, 0xeb, + 0x08, 0x0b, 0x9b, 0x1b, 0x16, 0x93, 0x17, 0x9b, 0x63, 0xeb, 0x08, 0x03, + 0x17, 0x93, 0xdd, 0xe9, 0x16, 0x23, 0x13, 0x43, 0x0c, 0xd0, 0x04, 0xeb, + 0xc5, 0x03, 0xd3, 0xe9, 0x5a, 0x23, 0x5b, 0x45, 0x08, 0xbf, 0x52, 0x45, + 0x3f, 0xbf, 0x01, 0x35, 0x63, 0x19, 0x93, 0xf8, 0x54, 0x31, 0x05, 0x93, + 0x20, 0x46, 0xff, 0xf7, 0x17, 0xfd, 0x28, 0xb1, 0x38, 0x46, 0xfe, 0xf7, + 0xa9, 0xf8, 0x6a, 0xe7, 0x03, 0x4c, 0xc8, 0xe7, 0x03, 0x4c, 0xc6, 0xe7, + 0x00, 0x24, 0x3c, 0xe7, 0x5b, 0xf0, 0xff, 0xff, 0x5c, 0xf0, 0xff, 0xff, + 0x5d, 0xf0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, 0x1f, 0x46, 0x00, 0xf1, + 0x08, 0x03, 0x04, 0x46, 0x0e, 0x46, 0x15, 0x46, 0x00, 0xf1, 0xbc, 0x08, + 0x00, 0xf1, 0x04, 0x09, 0x2d, 0xed, 0x02, 0x8b, 0x08, 0xee, 0x10, 0x3a, + 0x87, 0xb0, 0xdd, 0xe9, 0x12, 0x23, 0x13, 0x43, 0x7c, 0xd0, 0xd4, 0xf8, + 0xf0, 0x31, 0x4f, 0xf0, 0x00, 0x0b, 0x28, 0x46, 0x39, 0x46, 0x9a, 0x46, + 0x1a, 0x46, 0x02, 0x93, 0x5b, 0x46, 0x0f, 0xf0, 0xcf, 0xff, 0x12, 0x99, + 0x51, 0x18, 0x00, 0x91, 0x13, 0x99, 0x4b, 0x41, 0x01, 0x93, 0xdd, 0xe9, + 0x00, 0x01, 0x59, 0x45, 0x4f, 0xf0, 0x00, 0x0b, 0x08, 0xbf, 0x50, 0x45, + 0x40, 0x46, 0x2a, 0xbf, 0x02, 0x9b, 0x12, 0x9b, 0x9b, 0x1a, 0x02, 0x93, + 0x02, 0x9b, 0x9a, 0x46, 0xcd, 0xe9, 0x04, 0xab, 0xfe, 0xf7, 0x82, 0xf8, + 0x20, 0x46, 0xff, 0xf7, 0x01, 0xfd, 0x00, 0x28, 0x4e, 0xd1, 0x2a, 0x46, + 0x3b, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x35, 0xfd, 0x50, 0xb1, 0x6f, 0xf4, + 0x7a, 0x64, 0x40, 0x46, 0xfe, 0xf7, 0x52, 0xf8, 0x20, 0x46, 0x07, 0xb0, + 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x94, 0xf8, 0x98, 0x30, + 0x00, 0x2b, 0xf0, 0xd0, 0x00, 0x2e, 0xee, 0xd0, 0x04, 0x9b, 0x00, 0x2b, + 0xeb, 0xd0, 0x48, 0x46, 0x02, 0xf0, 0x04, 0xfb, 0x4f, 0xf0, 0xff, 0x33, + 0x2a, 0x46, 0x02, 0x21, 0x48, 0x46, 0x02, 0xf0, 0x4b, 0xf9, 0x04, 0xab, + 0x32, 0x46, 0x04, 0xf1, 0x6c, 0x01, 0x18, 0xee, 0x10, 0x0a, 0xf7, 0xf7, + 0xd3, 0xfc, 0x03, 0x90, 0x48, 0x46, 0x02, 0xf0, 0xe7, 0xfa, 0x03, 0x9b, + 0x00, 0x2b, 0xd2, 0xd1, 0xdd, 0xe9, 0x04, 0x23, 0x9b, 0x45, 0x08, 0xbf, + 0x92, 0x45, 0xcc, 0xd1, 0x02, 0x9b, 0x15, 0xeb, 0x0a, 0x05, 0x20, 0x46, + 0x1e, 0x44, 0x12, 0x9b, 0x47, 0xeb, 0x0b, 0x07, 0xb3, 0xeb, 0x0a, 0x03, + 0x12, 0x93, 0x13, 0x9b, 0x63, 0xeb, 0x0b, 0x03, 0x13, 0x93, 0xff, 0xf7, + 0x7d, 0xfc, 0x28, 0xb1, 0x40, 0x46, 0xfe, 0xf7, 0x0f, 0xf8, 0x82, 0xe7, + 0x02, 0x4c, 0xb6, 0xe7, 0x02, 0x4c, 0xb4, 0xe7, 0x00, 0x24, 0xb5, 0xe7, + 0x5c, 0xf0, 0xff, 0xff, 0x5d, 0xf0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, + 0xd0, 0xf8, 0xb4, 0xa0, 0x05, 0x46, 0x2d, 0xed, 0x02, 0x8b, 0xb5, 0xb0, + 0xba, 0xf1, 0x00, 0x0f, 0x0c, 0xd0, 0xae, 0x4a, 0xae, 0x4b, 0xba, 0xf1, + 0xff, 0x3f, 0x0c, 0xbf, 0x92, 0x46, 0x9a, 0x46, 0x50, 0x46, 0x35, 0xb0, + 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0xf1, 0xbc, 0x03, + 0x18, 0x46, 0x08, 0xee, 0x90, 0x3a, 0xfe, 0xf7, 0x05, 0xf8, 0x2b, 0x1d, + 0x52, 0x46, 0x51, 0x46, 0x08, 0xee, 0x10, 0x3a, 0x95, 0xf8, 0xfa, 0x31, + 0x18, 0xee, 0x10, 0x0a, 0xcd, 0xe9, 0x02, 0xaa, 0xcd, 0xe9, 0x00, 0xaa, + 0x02, 0xf0, 0xa4, 0xfa, 0x30, 0xb1, 0x6f, 0xf4, 0x7a, 0x6a, 0x18, 0xee, + 0x90, 0x0a, 0xfd, 0xf7, 0xcf, 0xff, 0xdb, 0xe7, 0x95, 0xf8, 0x04, 0x32, + 0x0b, 0xb9, 0xc5, 0xf8, 0x00, 0xa2, 0xd5, 0xf8, 0x00, 0x62, 0x01, 0x36, + 0x01, 0x2e, 0xc5, 0xf8, 0x00, 0x62, 0xee, 0xd1, 0x00, 0x23, 0xd5, 0xf8, + 0xf4, 0x41, 0x85, 0xf8, 0xfb, 0x31, 0x85, 0xf8, 0xfd, 0x31, 0x95, 0xf8, + 0x98, 0x30, 0x00, 0x2b, 0xe1, 0xd0, 0x18, 0xee, 0x10, 0x0a, 0x02, 0xf0, + 0x77, 0xfa, 0x18, 0xee, 0x10, 0x3a, 0x21, 0x46, 0xc5, 0xf8, 0x90, 0x40, + 0x18, 0x1d, 0xf8, 0xf7, 0xa3, 0xfb, 0x80, 0x46, 0x18, 0xee, 0x10, 0x0a, + 0x02, 0xf0, 0x60, 0xfa, 0xb8, 0xf1, 0x00, 0x0f, 0xcd, 0xd1, 0x28, 0x46, + 0xff, 0xf7, 0x0a, 0xfc, 0x00, 0x28, 0x00, 0xf0, 0xd5, 0x84, 0x82, 0x4f, + 0x03, 0x22, 0x20, 0xac, 0x9f, 0x21, 0x3b, 0x78, 0x28, 0x46, 0x04, 0x94, + 0xbb, 0x46, 0x8d, 0xf8, 0x80, 0x30, 0x00, 0x23, 0xcd, 0xf8, 0x00, 0x80, + 0xad, 0xf8, 0x81, 0x80, 0xcd, 0xe9, 0x06, 0x23, 0x00, 0x22, 0x00, 0x23, + 0xcd, 0xe9, 0x02, 0x23, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, + 0xff, 0xf7, 0x94, 0xfc, 0x00, 0x28, 0xaa, 0xd1, 0x9d, 0xf8, 0x80, 0x30, + 0xbf, 0x2b, 0x00, 0xf0, 0xb5, 0x80, 0x00, 0xf2, 0xa5, 0x80, 0x01, 0x2b, + 0x00, 0xf0, 0xb6, 0x80, 0x9d, 0x2b, 0x00, 0xf0, 0xb0, 0x80, 0x00, 0x23, + 0x10, 0xae, 0xdf, 0xf8, 0xb8, 0x81, 0x29, 0x46, 0x30, 0x46, 0x00, 0x27, + 0x0d, 0xf1, 0x70, 0x09, 0xc5, 0xe9, 0x42, 0x33, 0xc5, 0xe9, 0x48, 0x33, + 0xcd, 0xe9, 0x20, 0x83, 0x94, 0xe8, 0x0c, 0x00, 0xf4, 0xf7, 0xce, 0xff, + 0x4f, 0xf0, 0x5a, 0x0c, 0x96, 0xe8, 0x0f, 0x00, 0x08, 0x26, 0x84, 0xe8, + 0x0f, 0x00, 0x01, 0x23, 0x00, 0x22, 0x20, 0x46, 0x23, 0x99, 0xcd, 0xf8, + 0x0c, 0x90, 0xb2, 0x46, 0x02, 0x96, 0xcd, 0xe9, 0x00, 0x3c, 0xcd, 0xe9, + 0x04, 0x67, 0x00, 0x23, 0x88, 0x47, 0xb8, 0x42, 0xcd, 0xf8, 0x28, 0x80, + 0x6f, 0xdb, 0x04, 0x22, 0x57, 0x49, 0x48, 0x46, 0x0f, 0xf0, 0x14, 0xfb, + 0x80, 0x46, 0x00, 0x28, 0x67, 0xd1, 0x9d, 0xf8, 0x75, 0x30, 0x01, 0x2b, + 0x63, 0xd1, 0x9d, 0xf8, 0x76, 0x30, 0x32, 0x46, 0x0b, 0x93, 0x3b, 0x46, + 0x37, 0x46, 0x1e, 0x46, 0x01, 0x21, 0x5a, 0x20, 0xcd, 0xe9, 0x04, 0x76, + 0xcd, 0xe9, 0x00, 0x10, 0xcd, 0xe9, 0x02, 0xa9, 0x20, 0x46, 0x23, 0x99, + 0xcd, 0xe9, 0x0c, 0x32, 0x88, 0x47, 0x00, 0x28, 0x4d, 0xdb, 0x9d, 0xf8, + 0x72, 0x30, 0x01, 0x2b, 0x09, 0x93, 0x48, 0xd1, 0x1d, 0x99, 0x08, 0x0e, + 0xff, 0x28, 0xdd, 0xe9, 0x0c, 0x32, 0x12, 0xd1, 0x9d, 0xf8, 0x70, 0x00, + 0x81, 0x28, 0x65, 0xd0, 0x84, 0x28, 0x6d, 0xd0, 0x58, 0xb9, 0x21, 0xf0, + 0x7f, 0x41, 0xc5, 0xf8, 0x08, 0x11, 0x9d, 0xf8, 0x73, 0x10, 0x89, 0x00, + 0x50, 0x29, 0xa8, 0xbf, 0x50, 0x21, 0xc5, 0xf8, 0x0c, 0x11, 0x08, 0x32, + 0x0b, 0x98, 0x08, 0xf1, 0x01, 0x01, 0x43, 0xf1, 0x00, 0x03, 0x40, 0x45, + 0x4c, 0xdc, 0x0a, 0x9b, 0x00, 0x27, 0x14, 0xae, 0x29, 0x46, 0x20, 0x93, + 0x30, 0x46, 0x21, 0x97, 0x94, 0xe8, 0x0c, 0x00, 0xf4, 0xf7, 0x62, 0xff, + 0x0d, 0xf1, 0x70, 0x0c, 0x96, 0xe8, 0x0f, 0x00, 0x8c, 0xe8, 0x0f, 0x00, + 0xd5, 0xf8, 0x0c, 0x31, 0x08, 0x22, 0x01, 0x26, 0x60, 0x46, 0x1f, 0x99, + 0x03, 0x94, 0x00, 0x96, 0xcd, 0xe9, 0x04, 0x37, 0x5a, 0x23, 0xcd, 0xe9, + 0x01, 0x32, 0xd5, 0xf8, 0x08, 0x21, 0x3b, 0x46, 0x88, 0x47, 0x82, 0x46, + 0x18, 0xb9, 0x9d, 0xf9, 0x87, 0x30, 0xbb, 0x42, 0x46, 0xda, 0xdf, 0xf8, + 0x88, 0xa0, 0x00, 0xe7, 0xc2, 0x2b, 0x7f, 0xf4, 0x5e, 0xaf, 0x03, 0x23, + 0x85, 0xf8, 0x00, 0x61, 0x85, 0xf8, 0xf0, 0x00, 0xc5, 0xf8, 0xe4, 0x30, + 0x15, 0x23, 0xc5, 0xf8, 0xec, 0x30, 0x52, 0xe7, 0x85, 0xf8, 0x02, 0x01, + 0x4f, 0xe7, 0xc5, 0xf8, 0xe4, 0x60, 0x4c, 0xe7, 0x9d, 0xf8, 0x81, 0x30, + 0x02, 0x2b, 0x7f, 0xf4, 0x48, 0xaf, 0x9d, 0xf8, 0x82, 0x30, 0x20, 0x2b, + 0x7f, 0xf4, 0x43, 0xaf, 0x01, 0x23, 0x85, 0xf8, 0x01, 0x31, 0x3e, 0xe7, + 0x88, 0x46, 0x7b, 0xe7, 0x21, 0xf0, 0x7f, 0x41, 0xc5, 0xf8, 0x20, 0x11, + 0x9d, 0xf8, 0x73, 0x10, 0x89, 0x00, 0xc5, 0xf8, 0x24, 0x11, 0x9e, 0xe7, + 0x21, 0xf0, 0x7f, 0x41, 0xc5, 0xf8, 0xd8, 0x11, 0x9d, 0xf8, 0x73, 0x10, + 0x89, 0x00, 0xc5, 0xf8, 0xdc, 0x11, 0x94, 0xe7, 0x5a, 0xf0, 0xff, 0xff, + 0x59, 0xf0, 0xff, 0xff, 0xbe, 0xd9, 0x01, 0x08, 0xb9, 0xd9, 0x01, 0x08, + 0xc7, 0x87, 0x00, 0x08, 0x5e, 0xf0, 0xff, 0xff, 0x21, 0x9b, 0x01, 0x33, + 0xdb, 0x08, 0xc5, 0xe9, 0x44, 0x30, 0xd5, 0xf8, 0x0c, 0x31, 0x28, 0x2b, + 0x89, 0xbf, 0x9d, 0xf8, 0xa8, 0x30, 0x4f, 0xf4, 0x80, 0x76, 0x1b, 0x11, + 0x9e, 0x40, 0x9d, 0xf8, 0xbd, 0x30, 0x13, 0xf0, 0x08, 0x02, 0xc5, 0xf8, + 0xf0, 0x61, 0x5a, 0xd0, 0x00, 0x21, 0x00, 0x23, 0x00, 0x20, 0x4f, 0xf0, + 0xff, 0x32, 0x04, 0x93, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, + 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0xf0, 0x21, 0x28, 0x46, 0xff, 0xf7, + 0x7b, 0xfb, 0x00, 0x28, 0x8f, 0xd1, 0x28, 0x46, 0xff, 0xf7, 0xce, 0xfa, + 0x06, 0x46, 0x00, 0x28, 0x89, 0xd0, 0xd5, 0xf8, 0x0c, 0x01, 0x1c, 0x28, + 0x5f, 0xd9, 0x01, 0x23, 0x05, 0xf5, 0xdc, 0x71, 0x05, 0xf5, 0xe4, 0x7c, + 0x4f, 0xf0, 0xff, 0x3e, 0x98, 0x46, 0x22, 0x7f, 0x41, 0xf8, 0x04, 0xeb, + 0x08, 0xfa, 0x02, 0xf2, 0x01, 0x2a, 0xca, 0x60, 0x0e, 0xd9, 0x67, 0x7f, + 0x41, 0xf8, 0x04, 0x7c, 0xd5, 0xf8, 0x60, 0x71, 0xba, 0x42, 0x00, 0xd3, + 0x0f, 0xb9, 0xc5, 0xf8, 0x60, 0x21, 0x95, 0xf8, 0x54, 0x21, 0x1a, 0x43, + 0x85, 0xf8, 0x54, 0x21, 0x5b, 0x00, 0x8c, 0x45, 0x04, 0xf1, 0x02, 0x04, + 0xdb, 0xb2, 0xe2, 0xd1, 0x9d, 0xf8, 0x82, 0x30, 0x9f, 0x06, 0x3d, 0xd5, + 0x9d, 0xf8, 0x89, 0x30, 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, 0x88, 0x30, + 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x9b, 0x00, 0x85, 0xf8, 0xfd, 0x21, + 0x85, 0xf8, 0xfb, 0x31, 0x02, 0x23, 0x85, 0xf8, 0xf9, 0x31, 0x00, 0x26, + 0x85, 0xf8, 0xfe, 0x31, 0x41, 0xe0, 0xdb, 0x06, 0x7f, 0xf5, 0x45, 0xaf, + 0x00, 0x26, 0x00, 0x27, 0x04, 0x92, 0x4f, 0xf0, 0xff, 0x33, 0x00, 0x92, + 0x66, 0x21, 0x4f, 0xf0, 0xff, 0x32, 0x28, 0x46, 0xcd, 0xe9, 0x06, 0x67, + 0xcd, 0xe9, 0x02, 0x67, 0xff, 0xf7, 0x1e, 0xfb, 0x00, 0x28, 0x7f, 0xf4, + 0x32, 0xaf, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0x99, 0x21, + 0x04, 0x90, 0x00, 0x90, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x67, + 0x90, 0xe7, 0x9d, 0xf8, 0x81, 0x30, 0xff, 0x2b, 0xc5, 0xf8, 0x18, 0x31, + 0xbe, 0xd1, 0x1e, 0xe7, 0x10, 0x28, 0x66, 0xdd, 0x9d, 0xf8, 0x90, 0x20, + 0xd4, 0x06, 0x62, 0xd5, 0x9d, 0xf8, 0x9b, 0x30, 0xc5, 0xf8, 0xe0, 0x30, + 0x9d, 0xf8, 0x9a, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x9b, 0x00, + 0x85, 0xf8, 0xfd, 0x21, 0x85, 0xf8, 0xfb, 0x31, 0x02, 0x23, 0x85, 0xf8, + 0xf9, 0x31, 0x85, 0xf8, 0xfe, 0x31, 0x95, 0xf8, 0x00, 0x31, 0x93, 0xb3, + 0x00, 0x22, 0x9b, 0xf8, 0x00, 0x30, 0x18, 0xee, 0x10, 0x0a, 0x8d, 0xf8, + 0x60, 0x30, 0x11, 0x46, 0x02, 0x23, 0xad, 0xf8, 0x61, 0x20, 0xcd, 0xe9, + 0x02, 0x22, 0xcd, 0xe9, 0x00, 0x22, 0x02, 0xf0, 0x97, 0xf8, 0x00, 0xbb, + 0x18, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x49, 0xfb, 0xd8, 0xb9, 0x9d, 0xf8, + 0x62, 0x30, 0x28, 0x46, 0x43, 0xf0, 0x02, 0x03, 0x8d, 0xf8, 0x62, 0x30, + 0xff, 0xf7, 0x5c, 0xfa, 0x88, 0xb9, 0x18, 0xa9, 0x28, 0x46, 0xff, 0xf7, + 0xe4, 0xfa, 0x04, 0x46, 0x58, 0xb9, 0x28, 0x46, 0xff, 0xf7, 0x1a, 0xfa, + 0x38, 0xb1, 0x18, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x60, 0x40, 0x8d, 0xf8, + 0x62, 0x40, 0xff, 0xf7, 0x2c, 0xfb, 0x9b, 0xf8, 0x00, 0x20, 0x00, 0x23, + 0x8d, 0xf8, 0x3c, 0x20, 0x8d, 0xf8, 0x60, 0x20, 0x9d, 0xf8, 0xba, 0x20, + 0xad, 0xf8, 0x3d, 0x30, 0xc2, 0xf3, 0x02, 0x12, 0xad, 0xf8, 0x61, 0x30, + 0x01, 0x3a, 0x04, 0x2a, 0x00, 0xf2, 0xfe, 0x80, 0xdf, 0xe8, 0x12, 0xf0, + 0xb6, 0x00, 0x22, 0x01, 0x26, 0x01, 0xb6, 0x00, 0xb6, 0x00, 0x58, 0x06, + 0x0e, 0xd5, 0x9d, 0xf8, 0x8b, 0x30, 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, + 0x8a, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x85, 0xf8, 0xfd, 0x21, + 0x85, 0xf8, 0xfb, 0x31, 0x02, 0x23, 0x58, 0xe7, 0x9d, 0xf8, 0x90, 0x20, + 0xd1, 0x07, 0x7d, 0xd5, 0x9d, 0xf8, 0x97, 0x30, 0xc5, 0xf8, 0xe0, 0x30, + 0x9d, 0xf8, 0x96, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x5b, 0x00, + 0x85, 0xf8, 0xfd, 0x21, 0x85, 0xf8, 0xfb, 0x31, 0x01, 0x23, 0x85, 0xf8, + 0xf9, 0x31, 0x85, 0xf8, 0xfe, 0x31, 0x95, 0xf8, 0xf0, 0x30, 0xbb, 0xb1, + 0xd5, 0xf8, 0x0c, 0x31, 0x3f, 0x2b, 0x13, 0xdd, 0x9d, 0xf8, 0xbf, 0x30, + 0x13, 0xf0, 0x40, 0x02, 0x00, 0xf0, 0x5e, 0x81, 0x03, 0x23, 0x4f, 0xf0, + 0x00, 0x0b, 0x85, 0xf8, 0xfa, 0x31, 0x95, 0xf8, 0xfa, 0x31, 0x03, 0x2b, + 0x00, 0xf0, 0xe2, 0x81, 0xbb, 0xf1, 0x00, 0x0f, 0x7f, 0xf4, 0x73, 0xae, + 0x28, 0x46, 0xff, 0xf7, 0xb1, 0xf9, 0x00, 0x28, 0x3f, 0xf4, 0x6d, 0xae, + 0x0a, 0x9b, 0x18, 0xae, 0x4f, 0xf0, 0x00, 0x09, 0x0d, 0xf1, 0x80, 0x08, + 0x29, 0x46, 0x20, 0x93, 0xcd, 0xf8, 0x84, 0x90, 0x30, 0x46, 0x1c, 0xac, + 0x98, 0xe8, 0x0c, 0x00, 0xf4, 0xf7, 0xa2, 0xfd, 0xd5, 0xf8, 0x20, 0xb1, + 0x96, 0xe8, 0x0f, 0x00, 0x84, 0xe8, 0x0f, 0x00, 0xbb, 0xf1, 0x00, 0x0f, + 0x04, 0xd0, 0xd5, 0xf8, 0x24, 0x61, 0x00, 0x2e, 0x40, 0xf0, 0xc8, 0x81, + 0x01, 0x23, 0xc5, 0xf8, 0x28, 0x31, 0xd5, 0xe9, 0x44, 0x32, 0xc5, 0xf8, + 0x2c, 0x31, 0x13, 0xf1, 0xff, 0x33, 0x42, 0xf1, 0xff, 0x32, 0xc5, 0xe9, + 0x5a, 0x32, 0xd2, 0x4b, 0x28, 0x46, 0x1b, 0x78, 0x8d, 0xf8, 0x80, 0x30, + 0x00, 0x23, 0xad, 0xf8, 0x81, 0x30, 0xff, 0xf7, 0x79, 0xf9, 0x00, 0x28, + 0x3f, 0xf4, 0x35, 0xae, 0x95, 0xf8, 0x02, 0x41, 0x00, 0x2c, 0x00, 0xf0, + 0x09, 0x82, 0x01, 0x2c, 0x00, 0xf0, 0x20, 0x82, 0x28, 0x46, 0xff, 0xf7, + 0x6b, 0xf9, 0x00, 0x28, 0x3f, 0xf4, 0x27, 0xae, 0x01, 0x23, 0x85, 0xf8, + 0x04, 0x32, 0x26, 0xe5, 0xda, 0x06, 0x06, 0xd5, 0x9d, 0xf8, 0x8f, 0x30, + 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, 0x8e, 0x30, 0x7e, 0xe7, 0xdb, 0x07, + 0x0e, 0xd5, 0x9d, 0xf8, 0x8d, 0x30, 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, + 0x8c, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x85, 0xf8, 0xfd, 0x21, + 0x85, 0xf8, 0xfb, 0x31, 0x01, 0x23, 0x78, 0xe7, 0x03, 0x23, 0xc5, 0xf8, + 0xe0, 0x30, 0x76, 0xe7, 0x01, 0x23, 0xc5, 0xf8, 0xf8, 0x30, 0xc5, 0xf8, + 0xfc, 0x30, 0xd5, 0xf8, 0xf8, 0x30, 0x5f, 0x1c, 0x09, 0xd0, 0xd5, 0xf8, + 0xfc, 0x10, 0x4c, 0x1c, 0x05, 0xd0, 0x34, 0xaa, 0x13, 0x44, 0x01, 0x22, + 0x8a, 0x40, 0x03, 0xf8, 0x94, 0x2c, 0x18, 0xa9, 0x28, 0x46, 0xff, 0xf7, + 0x4a, 0xfa, 0x9d, 0xf8, 0x62, 0x30, 0x9d, 0xf8, 0x3e, 0x20, 0x28, 0x46, + 0xbd, 0xf8, 0x3c, 0x10, 0x13, 0x43, 0xbd, 0xf8, 0x60, 0x20, 0x9d, 0xf8, + 0x3c, 0x70, 0x0a, 0x43, 0x18, 0xa9, 0x9d, 0xf8, 0x3d, 0x40, 0xad, 0xf8, + 0x60, 0x20, 0x8d, 0xf8, 0x62, 0x30, 0xff, 0xf7, 0xde, 0xf9, 0x28, 0x46, + 0xff, 0xf7, 0x16, 0xf9, 0x00, 0x28, 0x3f, 0xf4, 0xd2, 0xad, 0x00, 0x23, + 0x18, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x60, 0x30, 0x8d, 0xf8, 0x62, 0x30, + 0xff, 0xf7, 0x25, 0xfa, 0x9d, 0xf8, 0x60, 0x30, 0x1f, 0x40, 0x9d, 0xf8, + 0x61, 0x30, 0x1c, 0x40, 0x57, 0xea, 0x04, 0x03, 0x3f, 0xf4, 0xbf, 0xad, + 0x00, 0x2e, 0x3f, 0xf4, 0x2e, 0xaf, 0x9d, 0xf8, 0xb9, 0x30, 0x9d, 0xf8, + 0xb8, 0x20, 0x1b, 0x01, 0x03, 0xf0, 0x10, 0x03, 0x43, 0xea, 0x12, 0x13, + 0x08, 0x2b, 0x66, 0xd0, 0x37, 0xdc, 0x02, 0x2b, 0x23, 0xdc, 0x00, 0x2b, + 0x3f, 0xf4, 0x1d, 0xaf, 0x00, 0x21, 0x00, 0x23, 0x00, 0x20, 0x4f, 0xf0, + 0xff, 0x32, 0x04, 0x93, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, + 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0x38, 0x21, 0x28, 0x46, 0xff, 0xf7, + 0x83, 0xf9, 0x0a, 0xe7, 0xc5, 0xf8, 0xf8, 0x30, 0x06, 0x23, 0x92, 0xe7, + 0xc5, 0xf8, 0xf8, 0x30, 0x07, 0x23, 0x4f, 0xf0, 0x3e, 0x0e, 0xc5, 0xf8, + 0xfc, 0x30, 0x3f, 0x23, 0xc5, 0xe9, 0x3a, 0xe3, 0x89, 0xe7, 0x04, 0x2b, + 0x7f, 0xf4, 0xf9, 0xae, 0x00, 0x21, 0x00, 0x23, 0x00, 0x20, 0x4f, 0xf0, + 0xff, 0x32, 0x04, 0x93, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, + 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0x35, 0x21, 0xda, 0xe7, 0x10, 0x2b, + 0x7f, 0xf4, 0xe7, 0xae, 0x01, 0x26, 0x00, 0x27, 0x18, 0xac, 0x4f, 0xf0, + 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, 0x4f, 0xf0, 0x00, 0x0b, 0x4f, 0xf0, + 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0x65, 0x21, 0x28, 0x46, 0x04, 0x94, + 0xcd, 0xf8, 0x00, 0xb0, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x89, + 0xff, 0xf7, 0x46, 0xf9, 0x9d, 0xf8, 0x60, 0x30, 0x4f, 0xf0, 0xff, 0x32, + 0x61, 0x21, 0x03, 0xf0, 0x7f, 0x03, 0x04, 0x94, 0xcd, 0xf8, 0x00, 0xb0, + 0x8d, 0xf8, 0x60, 0x30, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x06, 0x67, + 0xcd, 0xe9, 0x02, 0x89, 0xac, 0xe7, 0x01, 0x26, 0x00, 0x27, 0x18, 0xac, + 0x4f, 0xf0, 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, 0x4f, 0xf0, 0x00, 0x0b, + 0x52, 0x4a, 0x00, 0x23, 0x65, 0x21, 0x28, 0x46, 0x04, 0x94, 0xcd, 0xf8, + 0x00, 0xb0, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x89, 0xff, 0xf7, + 0x1d, 0xf9, 0x9d, 0xf8, 0x60, 0x30, 0x4b, 0x4a, 0x71, 0x21, 0x43, 0xf0, + 0x40, 0x03, 0x04, 0x94, 0xcd, 0xf8, 0x00, 0xb0, 0x8d, 0xf8, 0x60, 0x30, + 0x00, 0x23, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x89, 0x85, 0xe7, + 0xd8, 0x07, 0x11, 0xd5, 0x00, 0x20, 0x00, 0x21, 0x04, 0x92, 0x00, 0x92, + 0xcd, 0xe9, 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0x4f, 0xf0, 0xff, 0x32, + 0x4f, 0xf0, 0xff, 0x33, 0xb7, 0x21, 0x28, 0x46, 0xff, 0xf7, 0xfa, 0xf8, + 0x60, 0xbb, 0x8d, 0xe6, 0x13, 0xf0, 0x02, 0x02, 0x0d, 0xd0, 0x28, 0x46, + 0xff, 0xf7, 0x82, 0xf8, 0x00, 0x28, 0x65, 0xd1, 0x00, 0x22, 0x00, 0x23, + 0x04, 0x90, 0x00, 0x90, 0xcd, 0xe9, 0x06, 0x23, 0xcd, 0xe9, 0x02, 0x23, + 0xe4, 0xe7, 0x13, 0xf0, 0x10, 0x01, 0x39, 0xd0, 0x01, 0x26, 0x00, 0x27, + 0x18, 0xac, 0x4f, 0xf0, 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, 0x8d, 0xf8, + 0x60, 0x20, 0x00, 0x92, 0x4f, 0xf0, 0xff, 0x33, 0x4f, 0xf0, 0xff, 0x32, + 0xb5, 0x21, 0x28, 0x46, 0x04, 0x94, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, + 0x02, 0x89, 0xff, 0xf7, 0xcd, 0xf8, 0x10, 0xb1, 0xdf, 0xf8, 0x90, 0xb0, + 0x63, 0xe6, 0x9d, 0xf8, 0x60, 0x30, 0x28, 0x46, 0x43, 0xf0, 0x01, 0x03, + 0x8d, 0xf8, 0x60, 0x30, 0xff, 0xf7, 0x50, 0xf8, 0x83, 0x46, 0x98, 0xbb, + 0x04, 0x90, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0xb1, 0x21, + 0x28, 0x46, 0x00, 0x94, 0xcd, 0xe9, 0x06, 0x89, 0xcd, 0xe9, 0x02, 0x67, + 0xff, 0xf7, 0xb0, 0xf8, 0x00, 0x28, 0xe1, 0xd1, 0x03, 0x23, 0x85, 0xf8, + 0xfa, 0x31, 0x44, 0xe6, 0x13, 0xf0, 0x08, 0x00, 0x13, 0xd0, 0x80, 0x23, + 0x00, 0x22, 0x04, 0x91, 0x17, 0x21, 0x8d, 0xf8, 0x60, 0x30, 0x00, 0x23, + 0xcd, 0xe9, 0x06, 0x23, 0x01, 0x22, 0x00, 0x23, 0xcd, 0xe9, 0x02, 0x23, + 0x18, 0xab, 0x4f, 0xf0, 0xff, 0x32, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, + 0x95, 0xe7, 0x13, 0xf0, 0x04, 0x0b, 0x4f, 0xf0, 0x02, 0x03, 0xe0, 0xd0, + 0xc5, 0x22, 0xc5, 0xf8, 0xf4, 0x20, 0x20, 0xe6, 0xdf, 0xf8, 0x10, 0xb0, + 0x21, 0xe6, 0x00, 0xbf, 0xbe, 0xd9, 0x01, 0x08, 0x03, 0x00, 0x80, 0x00, + 0x5e, 0xf0, 0xff, 0xff, 0x5c, 0xf0, 0xff, 0xff, 0x00, 0x22, 0x18, 0xee, + 0x10, 0x0a, 0x11, 0x46, 0xcd, 0xe9, 0x02, 0x22, 0xcd, 0xe9, 0x00, 0x22, + 0x01, 0xf0, 0x30, 0xfe, 0x00, 0x28, 0x3f, 0xf4, 0x11, 0xae, 0x86, 0xe4, + 0x30, 0x46, 0x0d, 0xf0, 0x65, 0xfb, 0x07, 0x46, 0x00, 0x28, 0x3f, 0xf4, + 0x80, 0xac, 0x5a, 0x23, 0x08, 0x21, 0x03, 0x90, 0x5a, 0x46, 0x20, 0x46, + 0xcd, 0xe9, 0x01, 0x31, 0x01, 0x23, 0x1f, 0x99, 0x00, 0x93, 0x4b, 0x46, + 0xcd, 0xe9, 0x04, 0x69, 0x88, 0x47, 0x00, 0x28, 0x3d, 0xdb, 0x3e, 0x78, + 0xd5, 0xf8, 0x24, 0xc1, 0x16, 0xf0, 0x02, 0x06, 0x94, 0xe8, 0x0f, 0x00, + 0x88, 0xe8, 0x0f, 0x00, 0x40, 0xf0, 0xb9, 0x80, 0x07, 0xeb, 0x0c, 0x09, + 0x3c, 0x46, 0x08, 0x34, 0xa1, 0x45, 0x2c, 0xd3, 0x01, 0x20, 0x00, 0x21, + 0x14, 0xf8, 0x06, 0x3c, 0x14, 0xf8, 0x05, 0xbc, 0x54, 0xf8, 0x04, 0x2c, + 0xcd, 0xe9, 0x04, 0x01, 0x0f, 0xa9, 0x40, 0x46, 0x03, 0x91, 0x03, 0xf0, + 0x0f, 0x01, 0x9b, 0x09, 0x02, 0x91, 0x14, 0xf8, 0x07, 0x1c, 0x00, 0x93, + 0x00, 0x23, 0x01, 0x91, 0x23, 0x99, 0x88, 0x47, 0x00, 0x28, 0x12, 0xdb, + 0x9d, 0xf8, 0x3c, 0x30, 0x76, 0x00, 0x14, 0xf8, 0x08, 0x2c, 0x1b, 0xea, + 0x03, 0x0f, 0xf6, 0xb2, 0x23, 0x78, 0x18, 0xbf, 0x46, 0xf0, 0x01, 0x06, + 0xd2, 0x07, 0x03, 0xf0, 0x02, 0x03, 0x00, 0xf1, 0x8a, 0x80, 0x00, 0x2b, + 0xcf, 0xd0, 0x4f, 0xf0, 0xff, 0x34, 0x7b, 0xe0, 0x09, 0x99, 0x01, 0x33, + 0x49, 0x00, 0x04, 0x2b, 0xc9, 0xb2, 0x09, 0x91, 0x69, 0xd1, 0x73, 0xe0, + 0x28, 0x46, 0xfe, 0xf7, 0x9d, 0xff, 0x00, 0x28, 0x7f, 0xf4, 0x21, 0xac, + 0x00, 0x22, 0x00, 0x23, 0x04, 0x90, 0x98, 0x21, 0x00, 0x90, 0x28, 0x46, + 0xcd, 0xe9, 0x06, 0x23, 0xcd, 0xe9, 0x02, 0x23, 0x4f, 0xf0, 0xff, 0x32, + 0x4f, 0xf0, 0xff, 0x33, 0xfe, 0xf7, 0xfa, 0xff, 0x00, 0x28, 0x3f, 0xf4, + 0xe1, 0xad, 0x0c, 0xe4, 0x20, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x65, 0xf8, + 0x00, 0x28, 0x7f, 0xf4, 0x06, 0xac, 0xd5, 0xf8, 0xf8, 0x30, 0x7b, 0xb9, + 0xd5, 0xf8, 0xfc, 0x30, 0x9c, 0x40, 0x44, 0xf0, 0x03, 0x04, 0xe4, 0xb2, + 0x9d, 0xf8, 0x80, 0x30, 0x20, 0xa9, 0x28, 0x46, 0x1c, 0x40, 0x8d, 0xf8, + 0x80, 0x40, 0xfe, 0xf7, 0xfa, 0xff, 0xe1, 0xe7, 0x03, 0x24, 0xf3, 0xe7, + 0xdf, 0xf8, 0xc4, 0xa0, 0xff, 0xf7, 0xf1, 0xba, 0x0c, 0xf1, 0x01, 0x03, + 0x0a, 0x2b, 0xc5, 0xf8, 0x28, 0x31, 0xb4, 0xdc, 0x6f, 0xf4, 0xaa, 0x79, + 0x04, 0x34, 0x05, 0xf5, 0x96, 0x78, 0x05, 0xf5, 0xaa, 0x76, 0x05, 0xf5, + 0xb4, 0x7e, 0x00, 0x21, 0x0f, 0x22, 0xa9, 0xeb, 0x05, 0x09, 0x23, 0x68, + 0x14, 0xf8, 0x04, 0x0b, 0x23, 0xf0, 0xff, 0x03, 0x00, 0xf0, 0x0f, 0x00, + 0x03, 0xf5, 0x80, 0x73, 0x02, 0x40, 0x48, 0xf8, 0x04, 0x3b, 0x01, 0x3b, + 0x06, 0xf8, 0x01, 0x0b, 0x0b, 0x44, 0xd9, 0x17, 0x18, 0x46, 0xee, 0xe8, + 0x02, 0x01, 0x59, 0x1c, 0x09, 0xeb, 0x06, 0x03, 0x9c, 0x45, 0xe6, 0xdc, + 0x00, 0x23, 0xc5, 0xf8, 0x60, 0x31, 0x09, 0x99, 0x11, 0xea, 0x02, 0x04, + 0x8a, 0xd0, 0x05, 0xeb, 0x83, 0x03, 0x00, 0x24, 0xd3, 0xf8, 0xc8, 0x31, + 0xc5, 0xf8, 0x60, 0x31, 0x38, 0x46, 0x0d, 0xf0, 0x99, 0xfa, 0x01, 0x34, + 0x3f, 0xf4, 0xad, 0xab, 0x69, 0xe5, 0x3c, 0x46, 0x4e, 0x46, 0xd5, 0xf8, + 0x24, 0x21, 0x3a, 0x44, 0x21, 0x78, 0x88, 0x07, 0x7f, 0xf5, 0x71, 0xaf, + 0x04, 0xf1, 0x08, 0x03, 0x9a, 0x42, 0xff, 0xf4, 0x6c, 0xaf, 0x94, 0xf8, + 0x02, 0xc0, 0x0c, 0xf1, 0x02, 0x03, 0x04, 0xeb, 0x83, 0x03, 0x9a, 0x42, + 0xff, 0xf4, 0x63, 0xaf, 0x60, 0x78, 0xb0, 0x42, 0xa4, 0xd0, 0xc9, 0x07, + 0x3f, 0xf5, 0x5d, 0xaf, 0x1c, 0x46, 0xe5, 0xe7, 0x5d, 0xf0, 0xff, 0xff, + 0x70, 0x47, 0x00, 0x00, 0x09, 0x4b, 0x0a, 0x48, 0x5b, 0x68, 0x70, 0xb5, + 0x90, 0x24, 0x8d, 0x18, 0x04, 0xfb, 0x03, 0x03, 0x8d, 0x42, 0x07, 0xd0, + 0x11, 0xf8, 0x01, 0x4b, 0x18, 0x68, 0xc6, 0x69, 0x36, 0x06, 0xfc, 0xd5, + 0x84, 0x62, 0xf5, 0xe7, 0x10, 0x46, 0x70, 0xbd, 0xc8, 0x0b, 0x02, 0x24, + 0xa8, 0x0d, 0x02, 0x24, 0x00, 0x20, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, + 0x6f, 0xf0, 0x15, 0x00, 0x70, 0x47, 0x6f, 0xf0, 0x1c, 0x00, 0x70, 0x47, + 0x03, 0x68, 0x1b, 0x68, 0x18, 0x47, 0x6f, 0xf0, 0x15, 0x00, 0x70, 0x47, + 0x11, 0x20, 0x70, 0x47, 0xbf, 0xf3, 0x5f, 0x8f, 0x01, 0x22, 0x08, 0x49, + 0x8a, 0x60, 0x01, 0x32, 0x0b, 0x69, 0x04, 0x2a, 0x23, 0xf0, 0x01, 0x03, + 0x43, 0xea, 0x00, 0x03, 0x0b, 0x61, 0xf5, 0xd1, 0xbf, 0xf3, 0x4f, 0x8f, + 0xbf, 0xf3, 0x6f, 0x8f, 0x70, 0x47, 0x00, 0xbf, 0x90, 0xed, 0x00, 0xe0, + 0xbf, 0xf3, 0x5f, 0x8f, 0x06, 0x4a, 0x00, 0x23, 0x93, 0x60, 0x13, 0x69, + 0x23, 0xf0, 0x01, 0x03, 0x18, 0x43, 0x10, 0x61, 0xbf, 0xf3, 0x4f, 0x8f, + 0xbf, 0xf3, 0x6f, 0x8f, 0x70, 0x47, 0x00, 0xbf, 0x90, 0xed, 0x00, 0xe0, + 0x70, 0x47, 0x2d, 0xe9, 0xf0, 0x47, 0x46, 0x68, 0x96, 0xf8, 0x32, 0x70, + 0x87, 0xbb, 0x03, 0x68, 0x5b, 0x68, 0x98, 0x47, 0x34, 0x6a, 0x84, 0x42, + 0x2a, 0xd0, 0x33, 0x69, 0x04, 0x1b, 0x96, 0xf9, 0x34, 0x20, 0x1c, 0x40, + 0xb3, 0x68, 0x30, 0x62, 0xa4, 0xfb, 0x03, 0x45, 0xca, 0xb1, 0x73, 0x6a, + 0x14, 0xeb, 0x03, 0x08, 0x45, 0xf1, 0x00, 0x09, 0x00, 0x2a, 0x1b, 0xdb, + 0xc2, 0xf1, 0x20, 0x01, 0xa2, 0xf1, 0x20, 0x03, 0x28, 0xfa, 0x02, 0xf4, + 0x29, 0xfa, 0x02, 0xf5, 0x09, 0xfa, 0x01, 0xf1, 0x29, 0xfa, 0x03, 0xf3, + 0x0c, 0x43, 0x1c, 0x43, 0x04, 0xfa, 0x02, 0xf2, 0xa8, 0xeb, 0x02, 0x02, + 0x72, 0x62, 0xd6, 0xe9, 0x0a, 0x32, 0x1b, 0x19, 0x45, 0xeb, 0x02, 0x02, + 0xc6, 0xe9, 0x0a, 0x32, 0xbd, 0xe8, 0xf0, 0x87, 0xd6, 0xf8, 0x0c, 0xa0, + 0x3b, 0x46, 0x40, 0x46, 0x49, 0x46, 0x52, 0x46, 0x0f, 0xf0, 0x20, 0xf9, + 0x04, 0x46, 0x0d, 0x46, 0x0a, 0xfb, 0x10, 0x82, 0xe8, 0xe7, 0x2d, 0xe9, + 0xf1, 0x4f, 0x46, 0x68, 0x05, 0x46, 0x37, 0x6b, 0x27, 0xf0, 0x7f, 0x47, + 0x27, 0xf0, 0xff, 0x07, 0x00, 0x2f, 0x57, 0xd1, 0xff, 0xf7, 0xad, 0xff, + 0x73, 0x68, 0x00, 0x2b, 0x60, 0xd0, 0xd5, 0xf8, 0x00, 0xa0, 0xd3, 0xe9, + 0x00, 0x01, 0xd6, 0xe9, 0x0a, 0x23, 0x8b, 0x42, 0x08, 0xbf, 0x82, 0x42, + 0x05, 0xd3, 0xda, 0xf8, 0x14, 0x30, 0x01, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, + 0x18, 0x47, 0x6c, 0x68, 0xd4, 0xe9, 0x0a, 0x32, 0xd4, 0xf8, 0x14, 0xb0, + 0xb0, 0xeb, 0x03, 0x08, 0x61, 0xeb, 0x02, 0x09, 0xd4, 0xe9, 0x06, 0x23, + 0x4b, 0x45, 0x08, 0xbf, 0x42, 0x45, 0x20, 0xd3, 0xe3, 0x68, 0x94, 0xf9, + 0x33, 0xc0, 0xa3, 0xfb, 0x08, 0x01, 0x03, 0xfb, 0x09, 0x11, 0xbc, 0xf1, + 0x00, 0x0f, 0x13, 0xd0, 0xa2, 0x68, 0x53, 0x1e, 0xc0, 0x18, 0x41, 0xf1, + 0x00, 0x01, 0xbc, 0xf1, 0x00, 0x0f, 0x24, 0xdb, 0xcc, 0xf1, 0x20, 0x02, + 0xac, 0xf1, 0x20, 0x03, 0x20, 0xfa, 0x0c, 0xf0, 0x01, 0xfa, 0x02, 0xf2, + 0x21, 0xfa, 0x03, 0xf3, 0x10, 0x43, 0x18, 0x43, 0x83, 0x45, 0x28, 0xbf, + 0x83, 0x46, 0x23, 0x6a, 0x9b, 0x44, 0x23, 0x69, 0x0b, 0xea, 0x03, 0x0b, + 0xda, 0xf8, 0x10, 0x30, 0x58, 0x46, 0x98, 0x47, 0x2b, 0x68, 0x5b, 0x68, + 0x98, 0x47, 0x33, 0x6a, 0x5b, 0x45, 0x0a, 0xd2, 0x58, 0x45, 0x0c, 0xd2, + 0x83, 0x42, 0x0a, 0xd8, 0x01, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x3b, 0x46, + 0x0f, 0xf0, 0xb2, 0xf8, 0xe2, 0xe7, 0x83, 0x42, 0xf6, 0xd9, 0x58, 0x45, + 0xf4, 0xd3, 0x2b, 0x68, 0x5b, 0x69, 0xaa, 0xe7, 0x73, 0x69, 0x30, 0x6a, + 0x32, 0x69, 0x18, 0x44, 0x2b, 0x68, 0x10, 0x40, 0x1b, 0x69, 0x01, 0xb0, + 0xbd, 0xe8, 0xf0, 0x4f, 0x18, 0x47, 0x84, 0xb0, 0x01, 0xa8, 0x04, 0xb0, + 0x80, 0xe8, 0x0e, 0x00, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, 0x00, 0x29, + 0x0c, 0xbf, 0x6f, 0xf0, 0x18, 0x00, 0x00, 0x20, 0x70, 0x47, 0x41, 0x68, + 0x03, 0x46, 0x30, 0xb4, 0x71, 0xb1, 0xd0, 0xe9, 0x03, 0x20, 0x00, 0xf0, + 0x01, 0x04, 0x02, 0xb9, 0x44, 0xb1, 0x45, 0x10, 0x01, 0xeb, 0x60, 0x00, + 0x0c, 0xb1, 0x49, 0x59, 0x8a, 0x58, 0x99, 0x68, 0x30, 0xbc, 0x10, 0x47, + 0x30, 0xbc, 0x70, 0x47, 0x6f, 0xf0, 0x15, 0x00, 0x70, 0x47, 0x03, 0x68, + 0x00, 0x22, 0x1b, 0x69, 0x11, 0x46, 0x18, 0x47, 0x03, 0x68, 0x01, 0x22, + 0x00, 0x21, 0x1b, 0x69, 0x18, 0x47, 0x00, 0x00, 0x30, 0xb1, 0x03, 0x68, + 0x23, 0xb1, 0x1b, 0x79, 0x05, 0x2b, 0x03, 0xd0, 0x06, 0x2b, 0x24, 0xd0, + 0x20, 0x48, 0x70, 0x47, 0x43, 0x68, 0x00, 0x20, 0xdf, 0xf8, 0xa4, 0xc0, + 0x1e, 0x4a, 0x1f, 0x49, 0xc3, 0xe9, 0x02, 0xc2, 0x02, 0xf1, 0x79, 0x42, + 0xdf, 0xf8, 0x98, 0xc0, 0x02, 0xf5, 0x74, 0x02, 0x02, 0xf5, 0x01, 0x62, + 0x1a, 0x61, 0x1a, 0x4a, 0xc3, 0xe9, 0x05, 0x12, 0x02, 0xf1, 0xd1, 0x42, + 0x02, 0xf5, 0xc0, 0x12, 0x02, 0xf5, 0x1e, 0x62, 0xda, 0x61, 0x16, 0x4a, + 0xc3, 0xe9, 0x08, 0xc2, 0x01, 0x22, 0xc3, 0xe9, 0x00, 0x00, 0x9a, 0x66, + 0x70, 0x47, 0x43, 0x68, 0x00, 0x20, 0x12, 0x49, 0x12, 0x4a, 0xdf, 0xf8, + 0x64, 0xc0, 0x98, 0x66, 0xc3, 0xe9, 0x02, 0x12, 0x10, 0x4a, 0x11, 0x49, + 0xc3, 0xe9, 0x04, 0xc2, 0x10, 0x4a, 0xc3, 0xe9, 0x06, 0x12, 0x10, 0x4a, + 0x1a, 0x62, 0x02, 0xf1, 0x74, 0x52, 0xa2, 0xf5, 0x23, 0x02, 0xa2, 0xf6, + 0x92, 0x42, 0xc3, 0xe9, 0x00, 0x00, 0x5a, 0x62, 0x70, 0x47, 0x00, 0xbf, + 0x00, 0xaf, 0xff, 0xff, 0x07, 0xd5, 0x7c, 0x36, 0x39, 0x59, 0x0e, 0xf7, + 0x31, 0x0b, 0xc0, 0xff, 0xa4, 0x4f, 0xfa, 0xbe, 0x67, 0xe6, 0x09, 0x6a, + 0x85, 0xae, 0x67, 0xbb, 0x3a, 0xf5, 0x4f, 0xa5, 0x7f, 0x52, 0x0e, 0x51, + 0x8c, 0x68, 0x05, 0x9b, 0xab, 0xd9, 0x83, 0x1f, 0xd8, 0x9e, 0x05, 0xc1, + 0xa7, 0x8f, 0xf9, 0x64, 0x72, 0xf3, 0x6e, 0x3c, 0x13, 0x78, 0x10, 0xb5, + 0x04, 0x68, 0x8c, 0x42, 0x38, 0xbf, 0x01, 0x3b, 0x13, 0x70, 0x03, 0x68, + 0x59, 0x1a, 0x01, 0x60, 0x10, 0xbd, 0x03, 0x68, 0x59, 0x18, 0x01, 0x60, + 0x28, 0xbf, 0x01, 0x23, 0x11, 0x78, 0x38, 0xbf, 0x00, 0x23, 0x0b, 0x44, + 0x13, 0x70, 0x70, 0x47, 0x43, 0x68, 0x30, 0xb5, 0x2b, 0xb9, 0x4a, 0x68, + 0x62, 0xb9, 0x18, 0x1e, 0x18, 0xbf, 0x01, 0x20, 0x28, 0xe0, 0x82, 0x68, + 0x02, 0xeb, 0x83, 0x02, 0x52, 0xf8, 0x04, 0x2c, 0x00, 0x2a, 0xf2, 0xd1, + 0x01, 0x3b, 0xef, 0xe7, 0x8c, 0x68, 0x04, 0xeb, 0x82, 0x05, 0x55, 0xf8, + 0x04, 0x5c, 0x85, 0xb9, 0x01, 0x3a, 0xe9, 0xe7, 0x82, 0x68, 0x52, 0xf8, + 0x23, 0x10, 0x54, 0xf8, 0x23, 0x20, 0x91, 0x42, 0x05, 0xd8, 0x03, 0xf1, + 0xff, 0x33, 0x0a, 0xd2, 0x4f, 0xf0, 0xff, 0x30, 0x0a, 0xe0, 0x01, 0x20, + 0x08, 0xe0, 0x0b, 0xb1, 0x93, 0x42, 0xfa, 0xd8, 0x93, 0x42, 0xf5, 0xd3, + 0x01, 0x3b, 0x5a, 0x1c, 0xe8, 0xd1, 0x00, 0x20, 0x30, 0xbd, 0x00, 0x21, + 0xf0, 0xb5, 0x0a, 0x46, 0x45, 0x68, 0x95, 0x42, 0x02, 0xd1, 0x00, 0x24, + 0x20, 0x46, 0xf0, 0xbd, 0x83, 0x68, 0x53, 0xf8, 0x22, 0x60, 0x00, 0x23, + 0x26, 0xfa, 0x03, 0xf7, 0xcc, 0x18, 0xff, 0x07, 0xf4, 0xd4, 0x01, 0x33, + 0x20, 0x2b, 0x01, 0xeb, 0x03, 0x04, 0xf5, 0xd1, 0x01, 0x32, 0x21, 0x46, + 0xe9, 0xe7, 0x03, 0x68, 0x70, 0xb5, 0xcd, 0x1a, 0x00, 0x2d, 0x0d, 0xdd, + 0x93, 0xf9, 0x00, 0x60, 0x1c, 0x78, 0x00, 0x2e, 0x0b, 0xdb, 0x5c, 0x1c, + 0x04, 0x60, 0x1b, 0x78, 0x13, 0x60, 0x03, 0x68, 0xc9, 0x1a, 0x13, 0x68, + 0x8b, 0x42, 0x34, 0xd9, 0x6f, 0xf0, 0x5f, 0x00, 0x70, 0xbd, 0x04, 0xf0, + 0x7f, 0x04, 0x01, 0x3c, 0x03, 0x2c, 0x29, 0xd8, 0xdf, 0xe8, 0x04, 0xf0, + 0x02, 0x09, 0x12, 0x20, 0x01, 0x2d, 0xf1, 0xd0, 0x5c, 0x78, 0x02, 0x33, + 0x14, 0x60, 0x03, 0x60, 0xe7, 0xe7, 0x02, 0x2d, 0xea, 0xdd, 0xb3, 0xf8, + 0x01, 0x40, 0x03, 0x33, 0x64, 0xba, 0xa4, 0xb2, 0x14, 0x60, 0xf4, 0xe7, + 0x03, 0x2d, 0xe1, 0xdd, 0x9c, 0x78, 0x04, 0x33, 0x13, 0xf8, 0x03, 0x5c, + 0x24, 0x02, 0x44, 0xea, 0x05, 0x44, 0x13, 0xf8, 0x01, 0x5c, 0x2c, 0x43, + 0x14, 0x60, 0xe6, 0xe7, 0x04, 0x2d, 0xd3, 0xdd, 0xd3, 0xf8, 0x01, 0x40, + 0x05, 0x33, 0x24, 0xba, 0x14, 0x60, 0xde, 0xe7, 0x6f, 0xf0, 0x63, 0x00, + 0xcc, 0xe7, 0x00, 0x20, 0xca, 0xe7, 0x00, 0x00, 0x02, 0x4b, 0x98, 0x7a, + 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x70, 0x47, 0x1c, 0x01, 0x00, 0x24, + 0x08, 0xb5, 0x05, 0xf0, 0x61, 0xfa, 0xfc, 0xe7, 0x10, 0xb5, 0x04, 0x46, + 0x0d, 0xf0, 0x08, 0xf8, 0x20, 0x46, 0x10, 0xbd, 0x02, 0x4b, 0x18, 0x68, + 0x08, 0xb1, 0x09, 0xf0, 0x6f, 0xb9, 0x70, 0x47, 0x38, 0x28, 0x02, 0x24, + 0x02, 0x4b, 0x18, 0x68, 0x08, 0xb1, 0xf9, 0xf7, 0xa1, 0xba, 0x70, 0x47, + 0x38, 0x28, 0x02, 0x24, 0x01, 0x20, 0x08, 0xb5, 0x00, 0xf0, 0x78, 0xfd, + 0x11, 0xf0, 0x01, 0x00, 0x10, 0xb5, 0x8c, 0xb2, 0x04, 0xd0, 0xf4, 0xf7, + 0x33, 0xf8, 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0xe2, 0x06, 0x0a, 0xd5, + 0x05, 0x4b, 0x5a, 0x68, 0x90, 0x23, 0x53, 0x43, 0x04, 0x4a, 0xd3, 0x58, + 0xdb, 0x69, 0x1b, 0x06, 0x48, 0xbf, 0x40, 0xf0, 0x10, 0x00, 0x10, 0xbd, + 0xc8, 0x0b, 0x02, 0x24, 0xa8, 0x0d, 0x02, 0x24, 0xf8, 0xb5, 0x0d, 0x46, + 0x82, 0xb3, 0x19, 0x4b, 0x19, 0x4c, 0x5f, 0x68, 0x90, 0x23, 0x03, 0xfb, + 0x07, 0x43, 0x9a, 0x68, 0xb2, 0xf5, 0x80, 0x5f, 0x16, 0xd1, 0x1a, 0x69, + 0xba, 0xb9, 0x40, 0xf2, 0xff, 0x12, 0xa3, 0xf8, 0x60, 0x20, 0x90, 0x22, + 0x02, 0xfb, 0x07, 0x42, 0xb2, 0xf8, 0x60, 0x60, 0xf4, 0xf7, 0x04, 0xf8, + 0x00, 0x28, 0xfb, 0xd0, 0x90, 0x23, 0x01, 0x20, 0x7b, 0x43, 0xe3, 0x58, + 0x5b, 0x6a, 0x1e, 0x40, 0x2e, 0x70, 0xf8, 0xbd, 0x1a, 0xb9, 0x1a, 0x69, + 0x32, 0xb9, 0xff, 0x22, 0xe7, 0xe7, 0xb2, 0xf1, 0x80, 0x5f, 0x05, 0xd1, + 0x1a, 0x69, 0x0a, 0xb9, 0x7f, 0x22, 0xe0, 0xe7, 0x3f, 0x22, 0xde, 0xe7, + 0x00, 0x22, 0xdc, 0xe7, 0x10, 0x46, 0xec, 0xe7, 0xc8, 0x0b, 0x02, 0x24, + 0xa8, 0x0d, 0x02, 0x24, 0x43, 0x6b, 0x30, 0xb5, 0x05, 0x46, 0x85, 0xb0, + 0x53, 0xb1, 0x00, 0xf1, 0x28, 0x03, 0x6c, 0x46, 0x0f, 0xcb, 0x84, 0xe8, + 0x0f, 0x00, 0x00, 0x23, 0x20, 0x46, 0x6b, 0x63, 0x09, 0xf0, 0xc0, 0xf9, + 0x05, 0xb0, 0x30, 0xbd, 0x39, 0xb1, 0x01, 0xf1, 0x80, 0x41, 0x01, 0x39, + 0x00, 0xeb, 0x81, 0x01, 0x81, 0x42, 0x03, 0x46, 0x00, 0xd2, 0x70, 0x47, + 0x1b, 0x68, 0x0a, 0x68, 0x1b, 0xba, 0x12, 0xba, 0x40, 0xf8, 0x04, 0x2b, + 0x41, 0xf8, 0x04, 0x39, 0xf2, 0xe7, 0x00, 0x00, 0x03, 0x4b, 0x59, 0x6a, + 0x5a, 0x6a, 0x52, 0x1a, 0x82, 0x42, 0xfb, 0xd3, 0x70, 0x47, 0x00, 0xbf, + 0x00, 0x0c, 0x00, 0x40, 0x07, 0xb5, 0x01, 0x90, 0x0c, 0xf0, 0x60, 0xff, + 0x01, 0x99, 0x10, 0xb9, 0x02, 0x48, 0xf3, 0xf7, 0x6b, 0xfd, 0x03, 0xb0, + 0x5d, 0xf8, 0x04, 0xfb, 0x1f, 0x01, 0x01, 0x80, 0x03, 0x78, 0x23, 0xf0, + 0x03, 0x03, 0x43, 0xf0, 0x01, 0x03, 0x03, 0x70, 0xff, 0xf7, 0x50, 0xbf, + 0x10, 0xb5, 0x04, 0x46, 0x03, 0x78, 0x03, 0xf0, 0x03, 0x03, 0x01, 0x2b, + 0x08, 0xd0, 0xff, 0xf7, 0x4f, 0xff, 0x23, 0x78, 0x03, 0xf0, 0x03, 0x02, + 0x01, 0x2a, 0x03, 0xd1, 0xff, 0xf7, 0x40, 0xff, 0x00, 0x20, 0x03, 0xe0, + 0x43, 0xf0, 0x02, 0x03, 0x23, 0x70, 0x01, 0x20, 0x10, 0xbd, 0x00, 0x00, + 0x01, 0x4b, 0x18, 0x68, 0x09, 0xf0, 0xa8, 0xb8, 0xf0, 0x27, 0x02, 0x24, + 0x01, 0x4b, 0x18, 0x68, 0xf9, 0xf7, 0xdc, 0xb9, 0xf0, 0x27, 0x02, 0x24, + 0x01, 0x4b, 0x18, 0x68, 0x09, 0xf0, 0x9c, 0xb8, 0x30, 0x28, 0x02, 0x24, + 0x01, 0x4b, 0x18, 0x68, 0xf9, 0xf7, 0xd0, 0xb9, 0x30, 0x28, 0x02, 0x24, + 0x01, 0x20, 0x70, 0x47, 0x07, 0x4a, 0x08, 0x49, 0x13, 0x68, 0x18, 0x44, + 0x88, 0x42, 0x83, 0xbf, 0x06, 0x4b, 0x0c, 0x22, 0x4f, 0xf0, 0xff, 0x30, + 0x10, 0x60, 0x8c, 0xbf, 0x1a, 0x60, 0x18, 0x46, 0x70, 0x47, 0x00, 0xbf, + 0x10, 0x01, 0x00, 0x24, 0x00, 0xfc, 0x07, 0x24, 0xd8, 0xa5, 0x02, 0x24, + 0x06, 0x4a, 0x13, 0x68, 0x43, 0xb1, 0x01, 0x3b, 0x13, 0x60, 0x2b, 0xb9, + 0x04, 0x4a, 0x13, 0x70, 0x04, 0x4b, 0x1b, 0x78, 0x03, 0xb1, 0x62, 0xb6, + 0x70, 0x47, 0x00, 0xbf, 0xec, 0x27, 0x02, 0x24, 0x3c, 0x28, 0x02, 0x24, + 0xe8, 0x27, 0x02, 0x24, 0xef, 0xf3, 0x10, 0x83, 0x72, 0xb6, 0x07, 0x4a, + 0x11, 0x78, 0x31, 0xb9, 0xdb, 0x43, 0x06, 0x49, 0x03, 0xf0, 0x01, 0x03, + 0x0b, 0x70, 0x01, 0x23, 0x13, 0x70, 0x04, 0x4a, 0x13, 0x68, 0x01, 0x33, + 0x13, 0x60, 0x70, 0x47, 0x3c, 0x28, 0x02, 0x24, 0xe8, 0x27, 0x02, 0x24, + 0xec, 0x27, 0x02, 0x24, 0x08, 0xb5, 0xff, 0xf7, 0xe5, 0xff, 0x06, 0x4a, + 0x13, 0x88, 0x01, 0x3b, 0x9b, 0xb2, 0x13, 0x80, 0x13, 0xb9, 0x01, 0x20, + 0xff, 0xf7, 0xa4, 0xfc, 0xbd, 0xe8, 0x08, 0x40, 0xff, 0xf7, 0xc4, 0xbf, + 0x34, 0x28, 0x02, 0x24, 0x10, 0xb5, 0x07, 0x4c, 0xff, 0xf7, 0xd2, 0xff, + 0x21, 0x88, 0x11, 0xb9, 0x08, 0x46, 0xff, 0xf7, 0x95, 0xfc, 0x01, 0x31, + 0x21, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xb3, 0xbf, 0x00, 0xbf, + 0x34, 0x28, 0x02, 0x24, 0x08, 0xb5, 0xff, 0xf7, 0xc1, 0xff, 0x06, 0x4a, + 0x13, 0x88, 0x01, 0x3b, 0x9b, 0xb2, 0x13, 0x80, 0x13, 0xb9, 0x01, 0x20, + 0xff, 0xf7, 0x6a, 0xfc, 0xbd, 0xe8, 0x08, 0x40, 0xff, 0xf7, 0xa0, 0xbf, + 0x36, 0x28, 0x02, 0x24, 0x10, 0xb5, 0x06, 0x4c, 0xff, 0xf7, 0xae, 0xff, + 0x20, 0x88, 0x08, 0xb9, 0xff, 0xf7, 0x5c, 0xfc, 0x01, 0x30, 0x20, 0x80, + 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x90, 0xbf, 0x36, 0x28, 0x02, 0x24, + 0xf0, 0xb5, 0x8f, 0xb0, 0x07, 0x46, 0x0e, 0x46, 0x15, 0x46, 0x00, 0x21, + 0x14, 0x22, 0x09, 0xa8, 0x01, 0xac, 0x0c, 0xf0, 0xf7, 0xfe, 0x10, 0x4b, + 0x08, 0x94, 0x5b, 0x69, 0x01, 0x97, 0xda, 0x6b, 0x04, 0x93, 0x05, 0x92, + 0x5a, 0x6b, 0x1b, 0x6b, 0x06, 0x92, 0x07, 0x93, 0xcd, 0xe9, 0x02, 0x56, + 0xff, 0xf7, 0x88, 0xff, 0x09, 0x4a, 0x0a, 0x4d, 0x13, 0x68, 0x01, 0x33, + 0x13, 0x60, 0x0f, 0xcc, 0x0f, 0xc5, 0x0f, 0xcc, 0x0f, 0xc5, 0x0f, 0xcc, + 0x0f, 0xc5, 0x23, 0x68, 0x2b, 0x60, 0xff, 0xf7, 0x65, 0xff, 0x00, 0x20, + 0x0f, 0xb0, 0xf0, 0xbd, 0x1c, 0x01, 0x00, 0x24, 0xf4, 0x27, 0x02, 0x24, + 0xfc, 0x27, 0x02, 0x24, 0xf8, 0xb5, 0x05, 0x46, 0xff, 0xf7, 0x6c, 0xff, + 0xd0, 0xe9, 0x00, 0x34, 0xdb, 0x68, 0x98, 0x47, 0x94, 0xf8, 0x32, 0x30, + 0x1b, 0xb1, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, 0x4d, 0xbf, 0x01, 0x23, + 0x84, 0xf8, 0x31, 0x30, 0x63, 0x68, 0xab, 0xb1, 0x28, 0x46, 0xff, 0xf7, + 0x34, 0xfc, 0x61, 0x68, 0xd4, 0xe9, 0x0a, 0x67, 0xd1, 0xe9, 0x00, 0x23, + 0x9f, 0x42, 0x08, 0xbf, 0x96, 0x42, 0x09, 0xd3, 0x6b, 0x68, 0x5a, 0x68, + 0xcb, 0x68, 0x63, 0x60, 0x23, 0x68, 0x00, 0x2b, 0xea, 0xd0, 0x90, 0x68, + 0x98, 0x47, 0xe7, 0xe7, 0x00, 0x23, 0x28, 0x46, 0x84, 0xf8, 0x31, 0x30, + 0xff, 0xf7, 0x61, 0xfc, 0xd9, 0xe7, 0x2d, 0xe9, 0xf7, 0x43, 0x04, 0x46, + 0x00, 0xf1, 0x08, 0x05, 0x80, 0x69, 0x90, 0x46, 0x99, 0x46, 0x01, 0x90, + 0xff, 0xf7, 0x34, 0xff, 0x01, 0x98, 0xff, 0xf7, 0x0c, 0xfc, 0x01, 0x98, + 0x00, 0x21, 0x42, 0x68, 0x24, 0x61, 0x53, 0x68, 0xc4, 0xe9, 0x02, 0x89, + 0x2b, 0xb9, 0x63, 0x61, 0x61, 0xb9, 0x55, 0x60, 0xff, 0xf7, 0x45, 0xfc, + 0x0f, 0xe0, 0xd3, 0xe9, 0x00, 0x67, 0xb9, 0x45, 0x08, 0xbf, 0xb0, 0x45, + 0xf3, 0xd3, 0x19, 0x46, 0xdb, 0x68, 0xef, 0xe7, 0xd2, 0xe9, 0x0a, 0x23, + 0xcd, 0x60, 0x4b, 0x45, 0x08, 0xbf, 0x42, 0x45, 0xec, 0xd2, 0x03, 0xb0, + 0xbd, 0xe8, 0xf0, 0x43, 0xff, 0xf7, 0xfa, 0xbe, 0x90, 0xf8, 0x3c, 0x30, + 0x30, 0xb4, 0x53, 0xb1, 0x00, 0x23, 0x80, 0xf8, 0x3c, 0x30, 0x90, 0xf8, + 0x3e, 0x30, 0x13, 0xb9, 0x01, 0x23, 0x80, 0xf8, 0x3d, 0x30, 0x30, 0xbc, + 0x70, 0x47, 0x90, 0xf8, 0x3f, 0x30, 0x00, 0x2b, 0xf9, 0xd0, 0x83, 0x6b, + 0x4f, 0xf0, 0x80, 0x62, 0x01, 0x33, 0x83, 0x63, 0x0b, 0x4b, 0x5a, 0x60, + 0xd0, 0xe9, 0x0c, 0x32, 0x01, 0x33, 0x42, 0xf1, 0x00, 0x02, 0xc0, 0xe9, + 0x0c, 0x32, 0xd0, 0xe9, 0x0a, 0x23, 0x12, 0xf5, 0x7a, 0x75, 0x43, 0xf1, + 0x00, 0x04, 0x12, 0xf5, 0xfa, 0x62, 0xc0, 0xe9, 0x0a, 0x54, 0x43, 0xf1, + 0x00, 0x03, 0x30, 0xbc, 0xff, 0xf7, 0x9f, 0xbf, 0x00, 0xed, 0x00, 0xe0, + 0x38, 0xb5, 0xd0, 0xe9, 0x08, 0x25, 0xd0, 0xe9, 0x02, 0x13, 0x04, 0x46, + 0x52, 0x18, 0x45, 0xeb, 0x03, 0x03, 0xff, 0xf7, 0x92, 0xff, 0x63, 0x6b, + 0x2b, 0xb1, 0x04, 0xf1, 0x28, 0x00, 0xbd, 0xe8, 0x38, 0x40, 0x08, 0xf0, + 0xf7, 0xbf, 0x38, 0xbd, 0x09, 0x4b, 0x30, 0xb5, 0x1a, 0x46, 0x09, 0x4c, + 0xd3, 0xf8, 0x94, 0x50, 0xa5, 0x42, 0xfb, 0xd1, 0x03, 0x68, 0x29, 0xb1, + 0x81, 0x68, 0x0b, 0x60, 0x4f, 0xf4, 0x40, 0x73, 0x53, 0x61, 0x30, 0xbd, + 0xc1, 0x68, 0x1b, 0x04, 0xf7, 0xe7, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x58, + 0x00, 0x03, 0x00, 0x80, 0xf0, 0xb5, 0x72, 0xb6, 0x00, 0x23, 0x26, 0x4a, + 0x4f, 0xf0, 0xff, 0x36, 0x25, 0x4f, 0x13, 0x60, 0x4f, 0xf0, 0xe0, 0x22, + 0x1d, 0x46, 0x51, 0x68, 0x01, 0xf0, 0x0f, 0x01, 0x01, 0x31, 0x9a, 0x00, + 0x4f, 0xea, 0xc3, 0x0c, 0x02, 0xf1, 0x60, 0x42, 0x02, 0xf5, 0x61, 0x42, + 0xc2, 0xf8, 0x80, 0x60, 0xc2, 0xf8, 0x80, 0x61, 0x00, 0x22, 0x02, 0xeb, + 0x0c, 0x04, 0x01, 0x32, 0x3c, 0x44, 0x08, 0x2a, 0x84, 0xf8, 0x00, 0x53, + 0xf7, 0xd1, 0x01, 0x33, 0x99, 0x42, 0xe8, 0xdc, 0x16, 0x4b, 0x4f, 0xf0, + 0x20, 0x62, 0x5a, 0x60, 0x40, 0xf2, 0xfa, 0x52, 0x98, 0x60, 0xda, 0x60, + 0x00, 0x22, 0x1d, 0x61, 0x11, 0x46, 0x9c, 0x18, 0x01, 0x32, 0x0c, 0x2a, + 0x21, 0x76, 0xfa, 0xd1, 0x4f, 0xf0, 0xff, 0x32, 0x59, 0x62, 0x9a, 0x62, + 0x0d, 0x4a, 0xda, 0x62, 0x1f, 0x22, 0x1a, 0x63, 0xbf, 0xf3, 0x5f, 0x8f, + 0x0b, 0x4b, 0x59, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, + 0xd0, 0xe9, 0x00, 0x31, 0x00, 0x22, 0x82, 0xf3, 0x14, 0x88, 0x9d, 0x46, + 0x82, 0xf3, 0x10, 0x88, 0x08, 0x47, 0xf0, 0xbd, 0x10, 0xe0, 0x00, 0xe0, + 0x00, 0xe1, 0x00, 0xe0, 0x00, 0xed, 0x00, 0xe0, 0x02, 0x00, 0x00, 0xc0, + 0x90, 0xed, 0x00, 0xe0, 0x0c, 0xf0, 0xbc, 0xbd, 0x0c, 0xf0, 0xca, 0xbd, + 0x0c, 0xf0, 0x72, 0xbe, 0x0c, 0xf0, 0x16, 0xbe, 0x40, 0x68, 0x28, 0xb1, + 0x03, 0x7b, 0x01, 0x2b, 0x01, 0xd1, 0x04, 0x38, 0x70, 0x47, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x43, 0x68, 0x93, 0xf8, 0x30, 0x20, 0x2d, 0xe9, + 0xf0, 0x47, 0x06, 0x46, 0x00, 0x2a, 0x74, 0xd1, 0x93, 0xf8, 0x32, 0x30, + 0x00, 0x2b, 0x70, 0xd1, 0x03, 0x68, 0x1b, 0x68, 0x98, 0x47, 0x33, 0x68, + 0xdb, 0x69, 0x98, 0x47, 0x36, 0x4b, 0x02, 0x68, 0x00, 0x2a, 0x08, 0xbf, + 0x1a, 0x46, 0x11, 0x46, 0x1c, 0x46, 0xb1, 0xfb, 0xf3, 0xf3, 0x04, 0xfb, + 0x13, 0x13, 0x21, 0x46, 0x00, 0x2b, 0xf7, 0xd1, 0x2f, 0x4b, 0x01, 0x25, + 0x77, 0x68, 0xb3, 0xfb, 0xf4, 0xf1, 0x1f, 0x23, 0xb9, 0x60, 0x01, 0x3b, + 0x03, 0xd3, 0x05, 0xfa, 0x03, 0xfc, 0x61, 0x45, 0xf9, 0xd1, 0xb2, 0xfb, + 0xf4, 0xf2, 0x87, 0xf8, 0x33, 0x30, 0x01, 0x24, 0x1f, 0x23, 0xfa, 0x60, + 0x04, 0xfa, 0x03, 0xf5, 0xaa, 0x42, 0x01, 0xd0, 0x01, 0x3b, 0xf9, 0xd2, + 0x87, 0xf8, 0x34, 0x30, 0x44, 0x68, 0x23, 0x1f, 0x1b, 0x2b, 0x93, 0xbf, + 0x01, 0x23, 0x4f, 0xf0, 0xff, 0x33, 0x20, 0x24, 0xa3, 0x40, 0xa4, 0xf1, + 0x04, 0x04, 0x98, 0xbf, 0x03, 0xf1, 0xff, 0x33, 0x12, 0xf1, 0xff, 0x30, + 0x3b, 0x61, 0x4f, 0xf0, 0x07, 0x03, 0x03, 0xfa, 0x04, 0xf4, 0x4f, 0xf0, + 0x00, 0x03, 0x4f, 0xea, 0xe4, 0x79, 0x7c, 0x61, 0xa4, 0xfb, 0x01, 0x45, + 0x9a, 0x46, 0x01, 0xfb, 0x09, 0x55, 0x43, 0xf1, 0xff, 0x31, 0x20, 0x18, + 0x45, 0xeb, 0x01, 0x01, 0x0e, 0xf0, 0x1e, 0xfc, 0x33, 0x68, 0xc7, 0xe9, + 0x06, 0x01, 0x5b, 0x68, 0xc7, 0xe9, 0x00, 0xaa, 0x98, 0x47, 0x73, 0x68, + 0x38, 0x62, 0x00, 0x21, 0x00, 0x20, 0x01, 0x22, 0xc3, 0xf8, 0x24, 0xa0, + 0x83, 0xf8, 0x32, 0xa0, 0x1a, 0x86, 0xc3, 0xe9, 0x0a, 0x01, 0x30, 0x46, + 0xff, 0xf7, 0xa7, 0xfa, 0x30, 0x46, 0xbd, 0xe8, 0xf0, 0x47, 0xff, 0xf7, + 0xe8, 0xba, 0xbd, 0xe8, 0xf0, 0x87, 0x00, 0xbf, 0x40, 0x42, 0x0f, 0x00, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x7a, 0xff, 0xff, 0xf7, 0xbc, 0xfd, + 0x20, 0x46, 0xff, 0xf7, 0x94, 0xfa, 0x63, 0x68, 0xd3, 0xe9, 0x0a, 0x01, + 0xff, 0xf7, 0xa0, 0xfd, 0x10, 0xbd, 0x2d, 0xe9, 0xf8, 0x43, 0x0c, 0x46, + 0x80, 0x46, 0x88, 0x69, 0xff, 0xf7, 0xea, 0xff, 0xd4, 0xe9, 0x0a, 0x59, + 0x46, 0x1b, 0x61, 0xeb, 0x09, 0x07, 0x00, 0x2f, 0x08, 0xbf, 0xb6, 0xf5, + 0x7a, 0x7f, 0x2a, 0xd3, 0x00, 0x2f, 0x08, 0xbf, 0xb6, 0xf5, 0xfa, 0x6f, + 0x28, 0xd3, 0x00, 0x2e, 0x4f, 0xf4, 0x7a, 0x72, 0x30, 0x46, 0x77, 0xf1, + 0x01, 0x03, 0x4f, 0xf0, 0x00, 0x03, 0xb4, 0xbf, 0x00, 0x21, 0x39, 0x46, + 0x0e, 0xf0, 0xcc, 0xfb, 0x4f, 0xf4, 0x7a, 0x76, 0x00, 0x23, 0xa3, 0x63, + 0xa0, 0xfb, 0x06, 0x23, 0x55, 0x19, 0x06, 0xfb, 0x01, 0x33, 0x43, 0xeb, + 0x09, 0x03, 0xc4, 0xe9, 0x0a, 0x53, 0xd4, 0xe9, 0x0c, 0x32, 0xc3, 0x18, + 0x40, 0x46, 0x42, 0xeb, 0x01, 0x01, 0xc4, 0xe9, 0x0c, 0x31, 0xc8, 0xe9, + 0x00, 0x31, 0xbd, 0xe8, 0xf8, 0x83, 0x00, 0x20, 0x01, 0x46, 0xe3, 0xe7, + 0x01, 0x20, 0x00, 0x21, 0xe0, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0x70, 0x43, + 0x15, 0x4e, 0x35, 0x68, 0x2d, 0xbb, 0x15, 0x4c, 0x4f, 0xf0, 0x00, 0x08, + 0x14, 0x48, 0x4f, 0xf0, 0x00, 0x09, 0x14, 0x4b, 0xa0, 0x61, 0x23, 0x60, + 0xc4, 0xe9, 0x02, 0x89, 0xc4, 0xe9, 0x04, 0x55, 0xff, 0xf7, 0x18, 0xff, + 0xff, 0xf7, 0x5a, 0xfd, 0x0f, 0x4b, 0x10, 0x4a, 0x1a, 0x60, 0xff, 0xf7, + 0x41, 0xfd, 0x0f, 0x4b, 0xa0, 0x69, 0x23, 0x60, 0xff, 0xf7, 0x8e, 0xff, + 0x84, 0xf8, 0x40, 0x50, 0x34, 0x60, 0xc4, 0xe9, 0x08, 0x01, 0xc4, 0xe9, + 0x0a, 0x01, 0xc4, 0xe9, 0x0c, 0x89, 0xc4, 0xe9, 0x0e, 0x55, 0x30, 0x68, + 0xbd, 0xe8, 0x70, 0x83, 0xd8, 0x27, 0x02, 0x24, 0x90, 0x27, 0x02, 0x24, + 0x58, 0xd9, 0x01, 0x08, 0x10, 0xd7, 0x01, 0x08, 0x10, 0x0b, 0x02, 0x24, + 0x21, 0xdf, 0x00, 0x08, 0x58, 0xe1, 0x01, 0x08, 0xb1, 0xf9, 0x00, 0x30, + 0x5a, 0x1c, 0x01, 0xd1, 0x18, 0x46, 0x70, 0x47, 0x83, 0x42, 0x01, 0xd1, + 0x88, 0x68, 0x70, 0x47, 0x0c, 0x31, 0xf3, 0xe7, 0x08, 0xb5, 0x43, 0x1c, + 0x03, 0xd1, 0x03, 0x46, 0x18, 0x46, 0x08, 0xbd, 0x0c, 0x31, 0xb1, 0xf9, + 0x00, 0x30, 0x5a, 0x1c, 0x04, 0xd0, 0x98, 0x42, 0xf8, 0xd1, 0x4b, 0x68, + 0x59, 0x1c, 0xf3, 0xd1, 0x01, 0x46, 0x01, 0x48, 0xf3, 0xf7, 0x16, 0xfa, + 0x30, 0x01, 0x01, 0x80, 0x88, 0x42, 0x08, 0xb5, 0x07, 0xd0, 0x43, 0x1c, + 0x05, 0xd0, 0x01, 0x31, 0x01, 0x46, 0x02, 0xd0, 0x02, 0x48, 0xf3, 0xf7, + 0x09, 0xfa, 0x08, 0x46, 0x08, 0xbd, 0x00, 0xbf, 0x30, 0x01, 0x01, 0x80, + 0xd0, 0xf8, 0x90, 0x30, 0x2d, 0xe9, 0xf0, 0x4f, 0x01, 0x2b, 0x04, 0x46, + 0x2d, 0xed, 0x08, 0x8b, 0x87, 0xb0, 0x02, 0x93, 0x07, 0xd9, 0x00, 0x20, + 0x84, 0xf8, 0x94, 0x00, 0x07, 0xb0, 0xbd, 0xec, 0x08, 0x8b, 0xbd, 0xe8, + 0xf0, 0x8f, 0x03, 0x1d, 0xb0, 0xf9, 0x96, 0x70, 0xb0, 0xf9, 0x98, 0x60, + 0x08, 0xee, 0x10, 0x3a, 0xd0, 0xf8, 0x8c, 0x30, 0xb0, 0xf9, 0x9a, 0x50, + 0xb0, 0xf9, 0x9c, 0xa0, 0x08, 0xee, 0x90, 0x3a, 0xb0, 0xf9, 0x9e, 0xb0, + 0xb0, 0xf9, 0xa0, 0x80, 0x38, 0x46, 0x72, 0x49, 0xff, 0xf7, 0xb0, 0xff, + 0x71, 0x49, 0x03, 0x90, 0x30, 0x46, 0xff, 0xf7, 0xab, 0xff, 0x70, 0x49, + 0x01, 0x90, 0x28, 0x46, 0xff, 0xf7, 0xa6, 0xff, 0x6e, 0x49, 0x09, 0xee, + 0x10, 0x0a, 0x50, 0x46, 0xff, 0xf7, 0xa0, 0xff, 0x6c, 0x49, 0x09, 0xee, + 0x90, 0x0a, 0x58, 0x46, 0xff, 0xf7, 0x9a, 0xff, 0x6a, 0x49, 0x0a, 0xee, + 0x10, 0x0a, 0x40, 0x46, 0xff, 0xf7, 0x94, 0xff, 0x01, 0x9a, 0x03, 0x9b, + 0x81, 0x46, 0x11, 0x46, 0x18, 0x46, 0xff, 0xf7, 0xa3, 0xff, 0x19, 0xee, + 0x90, 0x1a, 0x01, 0x90, 0x19, 0xee, 0x10, 0x0a, 0xff, 0xf7, 0x9c, 0xff, + 0x49, 0x46, 0x03, 0x90, 0x1a, 0xee, 0x10, 0x0a, 0xff, 0xf7, 0x96, 0xff, + 0x01, 0x9b, 0x1a, 0x46, 0x03, 0x9b, 0x9a, 0x42, 0xab, 0xd1, 0x01, 0x9b, + 0x83, 0x42, 0xa8, 0xd1, 0x54, 0x49, 0x38, 0x46, 0xff, 0xf7, 0x68, 0xff, + 0x53, 0x49, 0x03, 0x90, 0x30, 0x46, 0xff, 0xf7, 0x63, 0xff, 0x52, 0x49, + 0x09, 0xee, 0x10, 0x0a, 0x28, 0x46, 0xff, 0xf7, 0x5d, 0xff, 0x50, 0x49, + 0x09, 0xee, 0x90, 0x0a, 0x50, 0x46, 0xff, 0xf7, 0x57, 0xff, 0x4e, 0x49, + 0x0a, 0xee, 0x10, 0x0a, 0x58, 0x46, 0xff, 0xf7, 0x51, 0xff, 0x4c, 0x49, + 0x0a, 0xee, 0x90, 0x0a, 0x40, 0x46, 0xff, 0xf7, 0x4b, 0xff, 0x4a, 0x4a, + 0x0b, 0xee, 0x10, 0x0a, 0x03, 0x9b, 0xd2, 0xf8, 0xd4, 0x10, 0x48, 0x48, + 0x41, 0xf4, 0x80, 0x41, 0xc2, 0xf8, 0xd4, 0x10, 0xd2, 0xf8, 0xd4, 0x10, + 0x01, 0xf4, 0x80, 0x41, 0x05, 0x91, 0x05, 0x99, 0x43, 0x49, 0xd0, 0xf8, + 0x8c, 0xc0, 0x8c, 0x45, 0xfb, 0xd1, 0xd1, 0x6f, 0x4f, 0xf0, 0x00, 0x09, + 0x41, 0xf4, 0x80, 0x41, 0xd1, 0x67, 0xd1, 0x6f, 0x21, 0xf4, 0x80, 0x41, + 0xd1, 0x67, 0x4f, 0xf4, 0x40, 0x72, 0x01, 0x21, 0xc2, 0x60, 0x00, 0x22, + 0x38, 0x46, 0xa4, 0xf8, 0x54, 0x70, 0x84, 0xf8, 0x45, 0x20, 0x22, 0x61, + 0x84, 0xf8, 0x44, 0x20, 0x4f, 0xf0, 0x00, 0x42, 0x92, 0xfa, 0xa2, 0xf2, + 0xb2, 0xfa, 0x82, 0xf2, 0x01, 0x3a, 0x62, 0x61, 0x4f, 0xf4, 0x80, 0x62, + 0xa2, 0x61, 0x02, 0x9a, 0xe2, 0x61, 0x01, 0x9a, 0xc4, 0xe9, 0x02, 0x11, + 0x62, 0x60, 0x19, 0x46, 0xc4, 0xe9, 0x08, 0x99, 0xf5, 0xf7, 0xe6, 0xf9, + 0x49, 0x46, 0x38, 0x46, 0xf5, 0xf7, 0x9a, 0xf9, 0x19, 0xee, 0x10, 0x1a, + 0x30, 0x46, 0xa4, 0xf8, 0x56, 0x60, 0xf5, 0xf7, 0xdb, 0xf9, 0x49, 0x46, + 0x30, 0x46, 0xf5, 0xf7, 0x8f, 0xf9, 0x19, 0xee, 0x90, 0x1a, 0x28, 0x46, + 0xa4, 0xf8, 0x58, 0x50, 0xf5, 0xf7, 0xd0, 0xf9, 0x49, 0x46, 0x28, 0x46, + 0xf5, 0xf7, 0x84, 0xf9, 0x1a, 0xee, 0x10, 0x1a, 0x50, 0x46, 0xa4, 0xf8, + 0x5a, 0xa0, 0xf5, 0xf7, 0xc5, 0xf9, 0x49, 0x46, 0x50, 0x46, 0xf5, 0xf7, + 0x79, 0xf9, 0x1a, 0xee, 0x90, 0x1a, 0x58, 0x46, 0xa4, 0xf8, 0x5c, 0xb0, + 0xf5, 0xf7, 0xba, 0xf9, 0x49, 0x46, 0x58, 0x46, 0xf5, 0xf7, 0x6e, 0xf9, + 0x1b, 0xee, 0x10, 0x1a, 0x40, 0x46, 0xa4, 0xf8, 0x5e, 0x80, 0xf5, 0xf7, + 0xaf, 0xf9, 0x49, 0x46, 0x40, 0x46, 0xf5, 0xf7, 0x63, 0xf9, 0x18, 0xee, + 0x90, 0x1a, 0x18, 0xee, 0x10, 0x0a, 0xf6, 0xf7, 0xdb, 0xfe, 0xb0, 0xfa, + 0x80, 0xf0, 0x40, 0x09, 0x00, 0xe7, 0x00, 0xbf, 0x28, 0xdd, 0x01, 0x08, + 0x58, 0xdd, 0x01, 0x08, 0x88, 0xdd, 0x01, 0x08, 0xac, 0xdd, 0x01, 0x08, + 0xdc, 0xdd, 0x01, 0x08, 0x00, 0xde, 0x01, 0x08, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x43, 0x1c, 0x07, 0xb5, + 0x10, 0xd1, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x83, 0x42, 0x0a, 0xd1, + 0x89, 0x68, 0x01, 0x90, 0xf5, 0xf7, 0x82, 0xf9, 0x00, 0x21, 0x01, 0x98, + 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, 0xf5, 0xf7, 0x33, 0xb9, 0x0c, 0x31, + 0xb1, 0xf9, 0x00, 0x30, 0x5a, 0x1c, 0xed, 0xd1, 0x01, 0x46, 0x01, 0x48, + 0xf3, 0xf7, 0xca, 0xf8, 0x30, 0x01, 0x01, 0x80, 0x38, 0xb5, 0x15, 0x46, + 0x04, 0x46, 0x01, 0x82, 0xf6, 0xf7, 0x16, 0xf8, 0x20, 0x46, 0x29, 0x46, + 0xff, 0xf7, 0xf4, 0xfc, 0x01, 0x21, 0xf6, 0xf7, 0x33, 0xf8, 0xb4, 0xf9, + 0x10, 0x00, 0x00, 0x21, 0xbd, 0xe8, 0x38, 0x40, 0xf5, 0xf7, 0x14, 0xb9, + 0x00, 0xb5, 0x89, 0xb0, 0x15, 0x4d, 0xff, 0xf7, 0xad, 0xfb, 0x00, 0x22, + 0xa5, 0x21, 0x01, 0xa8, 0xff, 0xf7, 0xe2, 0xff, 0x04, 0x24, 0x01, 0x21, + 0x01, 0xa8, 0xff, 0xf7, 0xdb, 0xfc, 0x28, 0x46, 0xff, 0xf7, 0x24, 0xfb, + 0x00, 0x21, 0x01, 0xa8, 0xff, 0xf7, 0xd4, 0xfc, 0x28, 0x46, 0xff, 0xf7, + 0x1d, 0xfb, 0x01, 0x3c, 0xef, 0xd1, 0x04, 0x24, 0x09, 0x4e, 0x01, 0x21, + 0x01, 0xa8, 0xff, 0xf7, 0xc9, 0xfc, 0x30, 0x46, 0xff, 0xf7, 0x12, 0xfb, + 0x00, 0x21, 0x01, 0xa8, 0xff, 0xf7, 0xc2, 0xfc, 0x30, 0x46, 0xff, 0xf7, + 0x0b, 0xfb, 0x01, 0x3c, 0xef, 0xd1, 0xdb, 0xe7, 0xf0, 0x49, 0x02, 0x00, + 0x80, 0x1a, 0x06, 0x00, 0x08, 0xb5, 0x08, 0xb1, 0xff, 0xf7, 0xca, 0xff, + 0xfe, 0xe7, 0x00, 0x00, 0x08, 0xb5, 0x0e, 0x4b, 0x01, 0x21, 0xd3, 0xe8, + 0x4f, 0x2f, 0xc3, 0xe8, 0x40, 0x1f, 0xd2, 0xb2, 0x00, 0x28, 0xf8, 0xd1, + 0x2a, 0xb1, 0xff, 0xf7, 0x6d, 0xfb, 0xbf, 0xf3, 0x4f, 0x8f, 0x20, 0xbf, + 0xfd, 0xe7, 0xef, 0xf3, 0x05, 0x83, 0x1b, 0xb9, 0xef, 0xf3, 0x10, 0x83, + 0xdb, 0x07, 0x01, 0xd5, 0xff, 0xf7, 0xae, 0xff, 0x01, 0x20, 0xff, 0xf7, + 0xdd, 0xff, 0x00, 0xbf, 0xf8, 0x27, 0x02, 0x24, 0x0f, 0xb4, 0x72, 0x46, + 0x08, 0xb5, 0x07, 0x4b, 0x01, 0x20, 0xd3, 0xe8, 0x4f, 0x1f, 0xc3, 0xe8, + 0x44, 0x0f, 0xc9, 0xb2, 0x00, 0x2c, 0xf8, 0xd1, 0x11, 0xb9, 0x03, 0x48, + 0xff, 0xf7, 0xa8, 0xfb, 0xff, 0xf7, 0xce, 0xff, 0x78, 0x0b, 0x02, 0x24, + 0x00, 0x01, 0xff, 0x80, 0x3f, 0x28, 0x2d, 0xe9, 0xf0, 0x4f, 0x06, 0x46, + 0x8b, 0xb0, 0x00, 0xf3, 0x2b, 0x81, 0x96, 0x4f, 0x57, 0xf8, 0x20, 0x00, + 0x41, 0x1c, 0x40, 0xf0, 0x09, 0x81, 0x02, 0x2e, 0x00, 0xf3, 0x06, 0x81, + 0x92, 0x48, 0xdf, 0xf8, 0x8c, 0x92, 0x03, 0x78, 0xbf, 0xf3, 0x5b, 0x8f, + 0x13, 0xf0, 0x01, 0x0f, 0x40, 0xf0, 0xf9, 0x80, 0xff, 0xf7, 0xcc, 0xfa, + 0x00, 0x28, 0x00, 0xf0, 0xf4, 0x80, 0x8c, 0x4b, 0xc9, 0xf8, 0x00, 0x30, + 0x8b, 0x4b, 0x1a, 0x68, 0x98, 0x46, 0x00, 0x2a, 0x40, 0xf0, 0xe8, 0x80, + 0x89, 0x49, 0x09, 0x20, 0xff, 0xf7, 0xf0, 0xfd, 0x04, 0x46, 0x88, 0x49, + 0x0a, 0x20, 0xff, 0xf7, 0xeb, 0xfd, 0x01, 0x46, 0x20, 0x46, 0x86, 0x4d, + 0xff, 0xf7, 0xfc, 0xfd, 0x82, 0x49, 0x04, 0x46, 0x09, 0x20, 0xff, 0xf7, + 0xd5, 0xfd, 0x81, 0x49, 0x83, 0x46, 0x0a, 0x20, 0xff, 0xf7, 0xd0, 0xfd, + 0x80, 0x4b, 0x82, 0x46, 0x2c, 0x60, 0x9c, 0x42, 0x21, 0xd1, 0x7f, 0x4a, + 0xd2, 0xf8, 0xf0, 0x10, 0x41, 0xf0, 0x10, 0x01, 0xc2, 0xf8, 0xf0, 0x10, + 0xd2, 0xf8, 0xf0, 0x20, 0x02, 0xf0, 0x10, 0x02, 0x09, 0x92, 0x09, 0x9a, + 0x79, 0x4a, 0x94, 0x42, 0x4a, 0xd1, 0x77, 0x4b, 0xd3, 0xf8, 0xf0, 0x20, + 0x42, 0xf0, 0x20, 0x02, 0xc3, 0xf8, 0xf0, 0x20, 0xd3, 0xf8, 0xf0, 0x30, + 0x03, 0xf0, 0x20, 0x03, 0x04, 0x93, 0x04, 0x9b, 0x72, 0x4b, 0x9c, 0x42, + 0x4a, 0xd1, 0x01, 0x24, 0x87, 0xe0, 0x70, 0x4a, 0x94, 0x42, 0x1a, 0xd0, + 0x02, 0xf5, 0x80, 0x62, 0x94, 0x42, 0x24, 0xd0, 0x6d, 0x4a, 0x94, 0x42, + 0x5c, 0xd0, 0x6d, 0x4a, 0x94, 0x42, 0xdd, 0xd1, 0x67, 0x4a, 0xd2, 0xf8, + 0xe8, 0x10, 0x41, 0xf4, 0x80, 0x11, 0xc2, 0xf8, 0xe8, 0x10, 0xd2, 0xf8, + 0xe8, 0x20, 0x02, 0xf4, 0x80, 0x12, 0x05, 0x92, 0x05, 0x9a, 0x9c, 0x42, + 0xde, 0xd1, 0x00, 0x24, 0x69, 0xe0, 0x5f, 0x4a, 0xd2, 0xf8, 0xe8, 0x10, + 0x41, 0xf4, 0x00, 0x31, 0xc2, 0xf8, 0xe8, 0x10, 0xd2, 0xf8, 0xe8, 0x20, + 0x02, 0xf4, 0x00, 0x32, 0x08, 0x92, 0x08, 0x9a, 0xbe, 0xe7, 0x58, 0x4a, + 0xd2, 0xf8, 0xe8, 0x10, 0x41, 0xf4, 0x80, 0x21, 0xc2, 0xf8, 0xe8, 0x10, + 0xd2, 0xf8, 0xe8, 0x20, 0x02, 0xf4, 0x80, 0x22, 0x07, 0x92, 0x07, 0x9a, + 0x56, 0x4a, 0x94, 0x42, 0x37, 0xd1, 0x50, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, + 0x42, 0xf0, 0x80, 0x42, 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, + 0x03, 0xf0, 0x80, 0x43, 0x03, 0x93, 0x03, 0x9b, 0x4f, 0x4b, 0x9c, 0x42, + 0x74, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x9c, 0x42, 0x72, 0xd0, 0x03, 0xf5, + 0x80, 0x63, 0x9c, 0x42, 0x70, 0xd0, 0x03, 0xf5, 0x44, 0x43, 0x9c, 0x42, + 0x6e, 0xd0, 0xa3, 0xf5, 0x1c, 0x43, 0x9c, 0x42, 0x6c, 0xd0, 0x03, 0xf5, + 0x80, 0x63, 0x9c, 0x42, 0x5e, 0xd0, 0x45, 0x48, 0x84, 0x42, 0x14, 0xbf, + 0x4f, 0xf0, 0xff, 0x34, 0x08, 0x24, 0x20, 0xe0, 0x3a, 0x4a, 0xd2, 0xf8, + 0xe8, 0x10, 0x41, 0xf4, 0x00, 0x21, 0xc2, 0xf8, 0xe8, 0x10, 0xd2, 0xf8, + 0xe8, 0x20, 0x02, 0xf4, 0x00, 0x22, 0x06, 0x92, 0x06, 0x9a, 0x3c, 0x4a, + 0x94, 0x42, 0x3a, 0xd0, 0x39, 0x4a, 0x94, 0x42, 0x9f, 0xd1, 0x31, 0x4b, + 0x08, 0x24, 0xd3, 0xf8, 0xf4, 0x20, 0x42, 0xf0, 0x08, 0x02, 0xc3, 0xf8, + 0xf4, 0x20, 0xd3, 0xf8, 0xf4, 0x30, 0x03, 0xf0, 0x08, 0x03, 0x01, 0x93, + 0x01, 0x9b, 0x59, 0x46, 0x09, 0x20, 0x6c, 0x60, 0xf4, 0xf7, 0xfa, 0xff, + 0x01, 0x21, 0x09, 0x20, 0xf4, 0xf7, 0xae, 0xff, 0x51, 0x46, 0x0a, 0x20, + 0xf4, 0xf7, 0xf2, 0xff, 0x01, 0x21, 0x0a, 0x20, 0xf4, 0xf7, 0xa6, 0xff, + 0x00, 0x23, 0x4f, 0xf4, 0xe1, 0x32, 0xc5, 0xe9, 0x04, 0x33, 0xc5, 0xe9, + 0x02, 0x23, 0x27, 0x4b, 0xab, 0x61, 0xf6, 0xf7, 0xa7, 0xfd, 0x01, 0x23, + 0xc8, 0xf8, 0x00, 0x30, 0xf7, 0xf7, 0x28, 0xf8, 0x12, 0x48, 0xff, 0xf7, + 0xcd, 0xf9, 0x22, 0x48, 0x47, 0xf8, 0x26, 0x90, 0x0b, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x15, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, 0x42, 0xf0, 0x00, 0x42, + 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, 0x03, 0xf0, 0x00, 0x43, + 0x02, 0x93, 0x02, 0x9b, 0x07, 0x24, 0xc6, 0xe7, 0x02, 0x24, 0xc4, 0xe7, + 0x03, 0x24, 0xc2, 0xe7, 0x04, 0x24, 0xc0, 0xe7, 0x05, 0x24, 0xbe, 0xe7, + 0x06, 0x24, 0xbc, 0xe7, 0x00, 0x20, 0xe1, 0xe7, 0x10, 0x00, 0x00, 0x24, + 0xb8, 0x26, 0x02, 0x24, 0xe4, 0xe0, 0x01, 0x08, 0x40, 0x28, 0x02, 0x24, + 0x8c, 0xdf, 0x01, 0x08, 0x30, 0xde, 0x01, 0x08, 0xc8, 0x0b, 0x02, 0x24, + 0x00, 0x10, 0x01, 0x40, 0x00, 0x44, 0x02, 0x58, 0x00, 0x14, 0x01, 0x40, + 0x00, 0x44, 0x00, 0x40, 0x00, 0x4c, 0x00, 0x40, 0x00, 0x50, 0x00, 0x40, + 0x00, 0x78, 0x00, 0x40, 0x00, 0x48, 0x00, 0x40, 0x00, 0x0c, 0x00, 0x58, + 0x00, 0x7c, 0x00, 0x40, 0x09, 0x00, 0x0a, 0x00, 0xdc, 0x27, 0x02, 0x24, + 0x38, 0xb5, 0x0d, 0x46, 0xff, 0xf7, 0xa2, 0xfe, 0x04, 0x46, 0x30, 0xb9, + 0x0b, 0xf0, 0xc4, 0xfa, 0x09, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x30, + 0x38, 0xbd, 0x03, 0x68, 0xdb, 0x69, 0x98, 0x47, 0x00, 0x28, 0x20, 0x46, + 0x14, 0xbf, 0x4f, 0xf4, 0x00, 0x53, 0x4f, 0xf4, 0x00, 0x43, 0x6b, 0x60, + 0x23, 0x68, 0x9b, 0x6a, 0x98, 0x47, 0x28, 0x61, 0x00, 0x20, 0xed, 0xe7, + 0x13, 0xb5, 0xcd, 0xe9, 0x00, 0x21, 0xff, 0xf7, 0x83, 0xfe, 0xdd, 0xe9, + 0x00, 0x21, 0x40, 0xb9, 0x0b, 0xf0, 0xa4, 0xfa, 0x09, 0x23, 0x03, 0x60, + 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, 0x03, 0x68, + 0x1b, 0x69, 0x98, 0x47, 0x04, 0x1e, 0xf7, 0xda, 0x64, 0x42, 0x0b, 0xf0, + 0x95, 0xfa, 0x04, 0x60, 0xf0, 0xe7, 0x10, 0xb5, 0xff, 0xf7, 0x6a, 0xfe, + 0x04, 0x46, 0x28, 0xb9, 0x0b, 0xf0, 0x8c, 0xfa, 0x09, 0x23, 0x03, 0x60, + 0x20, 0x46, 0x10, 0xbd, 0x03, 0x68, 0xdb, 0x69, 0x98, 0x47, 0x04, 0x1e, + 0xf8, 0xda, 0x64, 0x42, 0x0b, 0xf0, 0x80, 0xfa, 0x04, 0x60, 0x00, 0x24, + 0xf2, 0xe7, 0xff, 0xf7, 0xe8, 0xbf, 0x13, 0xb5, 0xcd, 0xe9, 0x00, 0x21, + 0xff, 0xf7, 0x50, 0xfe, 0xdd, 0xe9, 0x00, 0x21, 0x40, 0xb9, 0x0b, 0xf0, + 0x71, 0xfa, 0x09, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, + 0x02, 0xb0, 0x10, 0xbd, 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x04, 0x1e, + 0xf7, 0xda, 0x64, 0x42, 0x0b, 0xf0, 0x62, 0xfa, 0x04, 0x60, 0xf0, 0xe7, + 0x7f, 0xb5, 0x00, 0x2a, 0x04, 0x46, 0x0d, 0x46, 0x06, 0xda, 0x0b, 0xf0, + 0x59, 0xfa, 0x16, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x30, 0x19, 0xe0, + 0x01, 0x92, 0xff, 0xf7, 0xbe, 0xff, 0x01, 0x9a, 0xe8, 0xb1, 0x11, 0x4e, + 0x01, 0x22, 0x0d, 0xf1, 0x0f, 0x01, 0x20, 0x46, 0xff, 0xf7, 0xcd, 0xff, + 0x00, 0x28, 0xee, 0xdb, 0x0a, 0xd0, 0x9d, 0xf8, 0x0f, 0x30, 0x0d, 0x2b, + 0x08, 0xd1, 0x32, 0x5d, 0x0a, 0x2a, 0x33, 0x55, 0xee, 0xd0, 0x0a, 0x23, + 0x01, 0x20, 0x2b, 0x70, 0x04, 0xb0, 0x70, 0xbd, 0x0a, 0x2b, 0x02, 0xd1, + 0x32, 0x5d, 0x0d, 0x2a, 0xf3, 0xe7, 0x33, 0x55, 0xf4, 0xe7, 0x29, 0x46, + 0x20, 0x46, 0xff, 0xf7, 0xb2, 0xff, 0xf1, 0xe7, 0xbc, 0x26, 0x02, 0x24, + 0x13, 0xb5, 0xcd, 0xe9, 0x00, 0x21, 0xff, 0xf7, 0xff, 0xfd, 0xdd, 0xe9, + 0x00, 0x21, 0x40, 0xb9, 0x0b, 0xf0, 0x20, 0xfa, 0x09, 0x23, 0x03, 0x60, + 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, 0x03, 0x68, + 0xdb, 0x68, 0x98, 0x47, 0x04, 0x1e, 0xf7, 0xda, 0x64, 0x42, 0x0b, 0xf0, + 0x11, 0xfa, 0x04, 0x60, 0xf0, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf7, 0x4f, + 0xb2, 0xf1, 0x00, 0x08, 0x05, 0x46, 0x0e, 0x46, 0x09, 0xda, 0x0b, 0xf0, + 0x05, 0xfa, 0x16, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, + 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xff, 0xf7, 0x68, 0xff, 0x04, 0x46, + 0x60, 0xb3, 0x1f, 0x4a, 0x00, 0x27, 0xdf, 0xf8, 0x7c, 0xa0, 0x4f, 0xf0, + 0x0d, 0x0b, 0x53, 0x5d, 0x3c, 0x46, 0x91, 0x46, 0xb8, 0x45, 0x21, 0xdd, + 0xf2, 0x5d, 0x0a, 0x2a, 0x1b, 0xd1, 0x0d, 0x2b, 0x01, 0x93, 0x18, 0xd0, + 0xbc, 0x42, 0x0c, 0xda, 0x3a, 0x1b, 0x31, 0x19, 0x28, 0x46, 0xff, 0xf7, + 0xb7, 0xff, 0x00, 0x28, 0x01, 0x9b, 0xda, 0xdb, 0x04, 0x44, 0xa7, 0x42, + 0xd9, 0xdc, 0x09, 0xf8, 0x05, 0x30, 0x01, 0x22, 0x51, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0xaa, 0xff, 0x00, 0x28, 0xce, 0xdb, 0xcf, 0xd0, 0x09, 0xf8, + 0x05, 0xb0, 0xf3, 0x5d, 0x01, 0x37, 0xdb, 0xe7, 0xa0, 0x45, 0xc8, 0xdd, + 0xa8, 0xeb, 0x04, 0x02, 0x31, 0x19, 0x28, 0x46, 0xff, 0xf7, 0x9a, 0xff, + 0x00, 0x28, 0xbe, 0xdb, 0x24, 0x18, 0x1f, 0xbf, 0x36, 0x19, 0x02, 0x4b, + 0x16, 0xf8, 0x01, 0x2c, 0x5a, 0x55, 0xb8, 0xe7, 0xfc, 0x26, 0x02, 0x24, + 0x10, 0xdc, 0x01, 0x08, 0x38, 0xb5, 0x05, 0x46, 0x00, 0x24, 0xff, 0xf7, + 0x8b, 0xfd, 0x0b, 0x4b, 0x43, 0xf8, 0x25, 0x40, 0x30, 0xb9, 0x0b, 0xf0, + 0xab, 0xf9, 0x09, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x30, 0x38, 0xbd, + 0x03, 0x68, 0x5b, 0x69, 0x98, 0x47, 0x05, 0x1e, 0x04, 0xda, 0x6d, 0x42, + 0x0b, 0xf0, 0x9e, 0xf9, 0x05, 0x60, 0xf2, 0xe7, 0x20, 0x46, 0xf2, 0xe7, + 0x10, 0x00, 0x00, 0x24, 0xf8, 0xb5, 0x4b, 0x69, 0x15, 0x46, 0x0c, 0x46, + 0x9b, 0x1a, 0x00, 0x2b, 0xac, 0xbf, 0xd3, 0x18, 0x13, 0x1c, 0x4b, 0x61, + 0x03, 0x89, 0x8b, 0x80, 0xff, 0xf7, 0xa8, 0xf8, 0x02, 0x46, 0x03, 0x68, + 0x6b, 0xb3, 0x5e, 0x69, 0x61, 0x69, 0x77, 0x1a, 0x00, 0x2f, 0x24, 0xdb, + 0x8e, 0x42, 0x26, 0xd1, 0x9b, 0x68, 0xa3, 0x60, 0x13, 0xb1, 0x04, 0xf1, + 0x08, 0x01, 0x19, 0x61, 0x13, 0x68, 0x21, 0x46, 0x00, 0x26, 0x41, 0xf8, + 0x0c, 0x3f, 0x9e, 0x60, 0x19, 0x61, 0x14, 0x60, 0x83, 0x6a, 0x22, 0x61, + 0x6b, 0xb1, 0x90, 0xf8, 0x24, 0x20, 0x52, 0xb1, 0x02, 0x68, 0xa2, 0x42, + 0x07, 0xd1, 0xe2, 0x68, 0x2a, 0xb9, 0x61, 0x69, 0xc0, 0x6a, 0x49, 0x1b, + 0x21, 0xea, 0xe1, 0x71, 0x98, 0x47, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, + 0x67, 0xb8, 0x03, 0xf1, 0x08, 0x02, 0x9b, 0x68, 0xd0, 0xe7, 0xa3, 0x60, + 0x13, 0xb1, 0x04, 0xf1, 0x08, 0x01, 0x19, 0x61, 0x00, 0x23, 0xe3, 0x60, + 0xdd, 0xe7, 0x38, 0xb5, 0x85, 0x69, 0x00, 0xf1, 0x08, 0x04, 0xff, 0xf7, + 0x69, 0xf8, 0x6a, 0x68, 0x53, 0x68, 0x9c, 0x42, 0x09, 0xd1, 0x43, 0x69, + 0x28, 0x46, 0x53, 0x60, 0xfe, 0xf7, 0x81, 0xfd, 0xbd, 0xe8, 0x38, 0x40, + 0xff, 0xf7, 0x48, 0xb8, 0x13, 0x46, 0x00, 0x2b, 0xf8, 0xd0, 0xda, 0x68, + 0x94, 0x42, 0xf9, 0xd1, 0x42, 0x69, 0xda, 0x60, 0xf2, 0xe7, 0x00, 0x00, + 0xf8, 0xb5, 0x0f, 0x4b, 0x00, 0x26, 0x00, 0x27, 0x00, 0x25, 0x04, 0x46, + 0x03, 0x60, 0xc0, 0xe9, 0x02, 0x67, 0xc0, 0xe9, 0x04, 0x55, 0x0b, 0x48, + 0xa0, 0x61, 0xff, 0xf7, 0xff, 0xf9, 0xff, 0xf7, 0x41, 0xf8, 0x09, 0x4b, + 0x09, 0x4a, 0x1a, 0x60, 0xff, 0xf7, 0x28, 0xf8, 0x01, 0x23, 0x20, 0x46, + 0x65, 0x63, 0x84, 0xf8, 0x38, 0x30, 0x06, 0x4b, 0xc4, 0xe9, 0x08, 0x67, + 0x23, 0x60, 0xf8, 0xbd, 0x10, 0xd7, 0x01, 0x08, 0x58, 0xd9, 0x01, 0x08, + 0x10, 0x0b, 0x02, 0x24, 0x21, 0xdf, 0x00, 0x08, 0x4c, 0xe1, 0x01, 0x08, + 0x84, 0xb0, 0xf8, 0xb5, 0x04, 0x46, 0x07, 0xa8, 0xdd, 0xe9, 0x0c, 0x67, + 0x04, 0xf1, 0x28, 0x05, 0x80, 0xe8, 0x0e, 0x00, 0xff, 0xf7, 0x1c, 0xf8, + 0x0f, 0xc8, 0x85, 0xe8, 0x0f, 0x00, 0x20, 0x46, 0xff, 0xf7, 0xa7, 0xff, + 0xa0, 0x69, 0xc4, 0xe9, 0x08, 0x67, 0xff, 0xf7, 0x4f, 0xfa, 0x82, 0x19, + 0x20, 0x46, 0x41, 0xeb, 0x07, 0x03, 0xff, 0xf7, 0xcc, 0xf8, 0xbd, 0xe8, + 0xf8, 0x40, 0x04, 0xb0, 0xfe, 0xf7, 0xf2, 0xbf, 0xf8, 0xb5, 0x04, 0x46, + 0x0e, 0x46, 0x15, 0x46, 0x00, 0x21, 0x20, 0x22, 0x68, 0x30, 0x1f, 0x46, + 0x0b, 0xf0, 0x5c, 0xff, 0x94, 0xf8, 0x60, 0x30, 0x72, 0x1c, 0x84, 0xf8, + 0x68, 0x30, 0x16, 0xbf, 0x00, 0x23, 0x01, 0x23, 0x84, 0xf8, 0x69, 0x60, + 0x84, 0xf8, 0x6a, 0x30, 0x94, 0xf8, 0x61, 0x30, 0x84, 0xf8, 0x6c, 0x30, + 0x94, 0xf8, 0x62, 0x30, 0x84, 0xf8, 0x6d, 0x30, 0x6b, 0x1c, 0x16, 0xbf, + 0x00, 0x23, 0x01, 0x23, 0x25, 0x67, 0x01, 0x37, 0x84, 0xf8, 0x74, 0x30, + 0x94, 0xf8, 0x63, 0x30, 0x84, 0xf8, 0x78, 0x30, 0x94, 0xf8, 0x64, 0x30, + 0x84, 0xf8, 0x79, 0x30, 0x16, 0xbf, 0x00, 0x23, 0x01, 0x23, 0xe3, 0x67, + 0x84, 0xf8, 0x80, 0x30, 0xd4, 0xf8, 0x88, 0x30, 0x84, 0xf8, 0x84, 0x30, + 0x94, 0xf8, 0x65, 0x30, 0x84, 0xf8, 0x85, 0x30, 0xf8, 0xbd, 0x43, 0x68, + 0x1a, 0x68, 0x03, 0x68, 0x1a, 0x42, 0x14, 0xbf, 0x01, 0x20, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x09, 0x4b, 0x30, 0xb5, 0x1a, 0x46, 0x09, 0x4c, + 0xd3, 0xf8, 0x94, 0x50, 0xa5, 0x42, 0xfb, 0xd1, 0x03, 0x68, 0x29, 0xb1, + 0x81, 0x68, 0x0b, 0x60, 0x4f, 0xf4, 0x40, 0x73, 0x53, 0x61, 0x30, 0xbd, + 0xc1, 0x68, 0x1b, 0x04, 0xf7, 0xe7, 0x00, 0xbf, 0x00, 0x64, 0x02, 0x58, + 0x00, 0x03, 0x00, 0x80, 0x38, 0xb5, 0x05, 0x46, 0x04, 0x68, 0x54, 0xb9, + 0xfe, 0xf7, 0x9e, 0xfe, 0x2c, 0x68, 0x24, 0xb9, 0x2c, 0x1d, 0x20, 0x46, + 0xf2, 0xf7, 0xb0, 0xfc, 0x2c, 0x60, 0xfe, 0xf7, 0x8d, 0xfe, 0x20, 0x46, + 0x38, 0xbd, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x41, 0x88, 0x46, 0x00, 0x25, + 0x04, 0x46, 0x23, 0x49, 0xc0, 0xe9, 0x00, 0x55, 0x40, 0x46, 0x0d, 0xf0, + 0x42, 0xfb, 0x80, 0x44, 0xc4, 0xf8, 0x00, 0x80, 0x23, 0x68, 0x1a, 0x78, + 0x2f, 0x2a, 0x1c, 0xd1, 0x01, 0x33, 0x23, 0x60, 0x1c, 0x48, 0xff, 0xf7, + 0xd7, 0xff, 0xfb, 0xf7, 0x85, 0xfe, 0x1b, 0x4b, 0x1e, 0x68, 0xd6, 0xb1, + 0xb7, 0x68, 0xb7, 0xb1, 0x38, 0x46, 0x0c, 0xf0, 0xc9, 0xfc, 0x85, 0x42, + 0x11, 0xd1, 0x2a, 0x46, 0x41, 0x46, 0x38, 0x46, 0x0d, 0xf0, 0x28, 0xfa, + 0x58, 0xb9, 0x12, 0x48, 0xff, 0xf7, 0xc2, 0xff, 0xfb, 0xf7, 0x50, 0xfe, + 0x17, 0xe0, 0x00, 0x2a, 0xe2, 0xd0, 0x01, 0x33, 0x01, 0x35, 0x23, 0x60, + 0xd8, 0xe7, 0x76, 0x68, 0xe3, 0xe7, 0x07, 0x2d, 0xef, 0xd1, 0x2a, 0x46, + 0x41, 0x46, 0x0b, 0x48, 0x0d, 0xf0, 0x12, 0xfa, 0x00, 0x28, 0xe8, 0xd1, + 0x06, 0x48, 0xff, 0xf7, 0xab, 0xff, 0xfb, 0xf7, 0x39, 0xfe, 0x07, 0x4b, + 0x1e, 0x68, 0x20, 0x46, 0x66, 0x60, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0xbf, + 0x93, 0xd9, 0x01, 0x08, 0xe0, 0x06, 0x00, 0x24, 0xdc, 0x06, 0x00, 0x24, + 0x12, 0xdc, 0x01, 0x08, 0x8c, 0x27, 0x02, 0x24, 0x2d, 0xe9, 0xff, 0x47, + 0x8a, 0x46, 0x3f, 0x49, 0x05, 0x46, 0x0c, 0xf0, 0x7b, 0xfc, 0x04, 0x46, + 0x28, 0xb9, 0xff, 0xf7, 0xf1, 0xfb, 0x20, 0x46, 0x04, 0xb0, 0xbd, 0xe8, + 0xf0, 0x87, 0x3a, 0x49, 0x28, 0x46, 0x0c, 0xf0, 0x6f, 0xfc, 0x20, 0xb9, + 0x01, 0x20, 0x01, 0x24, 0xff, 0xf7, 0xe4, 0xfb, 0xf1, 0xe7, 0x36, 0x49, + 0x28, 0x46, 0x0c, 0xf0, 0x65, 0xfc, 0x20, 0xb9, 0x02, 0x20, 0x02, 0x24, + 0xff, 0xf7, 0xda, 0xfb, 0xe7, 0xe7, 0x2b, 0x78, 0x40, 0x2b, 0x02, 0xd1, + 0xd5, 0xf8, 0x01, 0x40, 0xe1, 0xe7, 0x2f, 0x4e, 0x03, 0x24, 0x2f, 0x48, + 0xb0, 0x46, 0xff, 0xf7, 0x69, 0xff, 0xfb, 0xf7, 0x17, 0xfe, 0x56, 0xf8, + 0x24, 0x90, 0xb9, 0xf1, 0x00, 0x0f, 0x2a, 0xd0, 0x01, 0x34, 0x40, 0x2c, + 0xf7, 0xd1, 0x0a, 0xf0, 0xe7, 0xff, 0x18, 0x23, 0x03, 0x60, 0x26, 0x48, + 0xff, 0xf7, 0x58, 0xff, 0xfb, 0xf7, 0xe6, 0xfd, 0x0a, 0xe0, 0x02, 0xa8, + 0xff, 0xf7, 0xac, 0xf8, 0x05, 0x46, 0x40, 0xb9, 0x0a, 0xf0, 0xd8, 0xff, + 0x13, 0x23, 0x03, 0x60, 0x46, 0xf8, 0x24, 0x50, 0x4f, 0xf0, 0xff, 0x34, + 0xb9, 0xe7, 0x03, 0x68, 0x01, 0xa9, 0x02, 0x9a, 0x9d, 0x68, 0x2a, 0xf4, + 0x80, 0x33, 0xa8, 0x47, 0x05, 0x46, 0xe8, 0xb1, 0x6d, 0x42, 0x0a, 0xf0, + 0xc5, 0xff, 0x05, 0x60, 0x46, 0xf8, 0x24, 0x90, 0xec, 0xe7, 0x4f, 0xf0, + 0xff, 0x37, 0x13, 0x48, 0x46, 0xf8, 0x24, 0x70, 0xff, 0xf7, 0x30, 0xff, + 0xfb, 0xf7, 0xbe, 0xfd, 0x29, 0x46, 0x02, 0xa8, 0xcd, 0xf8, 0x04, 0x90, + 0xff, 0xf7, 0x3a, 0xff, 0x03, 0x9d, 0x00, 0x2d, 0xd4, 0xd0, 0x2b, 0x7b, + 0x00, 0x2b, 0xcc, 0xd1, 0x04, 0x3d, 0x01, 0x95, 0x01, 0x9b, 0x09, 0x4a, + 0x48, 0xf8, 0x24, 0x30, 0x00, 0x23, 0x13, 0x55, 0x07, 0x4a, 0x13, 0x55, + 0x89, 0xe7, 0x00, 0xbf, 0x64, 0xe1, 0x01, 0x08, 0x6b, 0xe1, 0x01, 0x08, + 0x5c, 0xe1, 0x01, 0x08, 0x10, 0x00, 0x00, 0x24, 0x3c, 0x27, 0x02, 0x24, + 0xbc, 0x26, 0x02, 0x24, 0xfc, 0x26, 0x02, 0x24, 0x1d, 0x4b, 0x70, 0xb5, + 0x03, 0x60, 0x04, 0x46, 0x1c, 0x48, 0xff, 0xf7, 0x01, 0xff, 0xfb, 0xf7, + 0xaf, 0xfd, 0xa3, 0x68, 0x2b, 0xb1, 0x1a, 0x49, 0x62, 0x68, 0x0b, 0x68, + 0xa3, 0x42, 0x24, 0xd1, 0x0a, 0x60, 0x18, 0x4b, 0x15, 0x48, 0x1a, 0x68, + 0xa2, 0x42, 0x04, 0xbf, 0x00, 0x22, 0x1a, 0x60, 0xff, 0xf7, 0xee, 0xfe, + 0xfb, 0xf7, 0x7c, 0xfd, 0x25, 0x7b, 0xa5, 0xb9, 0x12, 0x48, 0x26, 0x1f, + 0xff, 0xf7, 0xe6, 0xfe, 0xfb, 0xf7, 0x94, 0xfd, 0x10, 0x4a, 0x40, 0x23, + 0x52, 0xf8, 0x04, 0x1b, 0x8e, 0x42, 0x08, 0xbf, 0x42, 0xf8, 0x04, 0x5c, + 0x01, 0x3b, 0xf7, 0xd1, 0x0a, 0x48, 0xff, 0xf7, 0xd7, 0xfe, 0xfb, 0xf7, + 0x65, 0xfd, 0x20, 0x46, 0x70, 0xbd, 0x19, 0x46, 0x5b, 0x68, 0xa3, 0x42, + 0xfb, 0xd1, 0x4a, 0x60, 0xd5, 0xe7, 0x00, 0xbf, 0xbc, 0xd8, 0x01, 0x08, + 0xe0, 0x06, 0x00, 0x24, 0xdc, 0x06, 0x00, 0x24, 0x8c, 0x27, 0x02, 0x24, + 0x3c, 0x27, 0x02, 0x24, 0x10, 0x00, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, + 0xff, 0xf7, 0xb4, 0xff, 0x20, 0x46, 0x0b, 0xf0, 0x5b, 0xfd, 0x20, 0x46, + 0x10, 0xbd, 0x00, 0x00, 0x08, 0xb5, 0x03, 0x48, 0xff, 0xf7, 0xb2, 0xfe, + 0xbd, 0xe8, 0x08, 0x40, 0xfb, 0xf7, 0x3e, 0xbd, 0x64, 0x27, 0x02, 0x24, + 0x08, 0xb5, 0x03, 0x48, 0xff, 0xf7, 0xa8, 0xfe, 0xbd, 0xe8, 0x08, 0x40, + 0xfb, 0xf7, 0x54, 0xbd, 0x64, 0x27, 0x02, 0x24, 0x2d, 0xe9, 0xf0, 0x47, + 0x9d, 0xf8, 0x20, 0x70, 0x05, 0x46, 0x89, 0x46, 0x92, 0x46, 0x02, 0x2f, + 0x98, 0x46, 0x9d, 0xf8, 0x24, 0x60, 0x22, 0xd8, 0x12, 0x4b, 0xdb, 0x5d, + 0xfb, 0xb1, 0xb6, 0xfb, 0xf3, 0xf4, 0x03, 0xfb, 0x14, 0x64, 0x14, 0xf0, + 0xff, 0x04, 0x18, 0xd1, 0xff, 0xf7, 0xde, 0xff, 0x9d, 0xf8, 0x28, 0x30, + 0x28, 0x46, 0x85, 0xf8, 0x60, 0x90, 0x85, 0xf8, 0x65, 0x30, 0x0b, 0x9b, + 0x85, 0xf8, 0x61, 0xa0, 0x85, 0xf8, 0x62, 0x80, 0x85, 0xf8, 0x63, 0x70, + 0x85, 0xf8, 0x64, 0x60, 0xc5, 0xf8, 0x88, 0x30, 0xff, 0xf7, 0xc0, 0xff, + 0x20, 0x46, 0xbd, 0xe8, 0xf0, 0x87, 0x4f, 0xf0, 0xff, 0x30, 0xfa, 0xe7, + 0x25, 0xdc, 0x01, 0x08, 0x27, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x60, + 0xff, 0xf7, 0xbc, 0xff, 0x25, 0x49, 0x62, 0x68, 0x13, 0x68, 0x23, 0xf0, + 0x01, 0x03, 0x13, 0x60, 0x00, 0x23, 0xa3, 0x64, 0x84, 0xf8, 0x45, 0x30, + 0x21, 0x4b, 0xd1, 0xf8, 0x8c, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0x20, 0x4b, + 0xb4, 0xf9, 0x54, 0x00, 0xda, 0x6f, 0x42, 0xf4, 0x80, 0x42, 0xda, 0x67, + 0xda, 0x6f, 0x22, 0xf4, 0x80, 0x42, 0xda, 0x67, 0x4f, 0xf4, 0x40, 0x72, + 0xca, 0x60, 0x40, 0xf2, 0xc3, 0x31, 0xd3, 0xf8, 0xd4, 0x20, 0x22, 0xf4, + 0x80, 0x42, 0xc3, 0xf8, 0xd4, 0x20, 0xf4, 0xf7, 0x93, 0xfb, 0xb4, 0xf9, + 0x56, 0x00, 0x40, 0xf2, 0xc3, 0x31, 0xf4, 0xf7, 0x8d, 0xfb, 0xb4, 0xf9, + 0x58, 0x00, 0x40, 0xf2, 0xc3, 0x31, 0xf4, 0xf7, 0x87, 0xfb, 0xb4, 0xf9, + 0x5a, 0x00, 0x40, 0xf2, 0xc3, 0x31, 0xf4, 0xf7, 0x81, 0xfb, 0xb4, 0xf9, + 0x5c, 0x00, 0x40, 0xf2, 0xc3, 0x31, 0xf4, 0xf7, 0x7b, 0xfb, 0x40, 0xf2, + 0xc3, 0x31, 0xb4, 0xf9, 0x5e, 0x00, 0xf4, 0xf7, 0x75, 0xfb, 0x20, 0x46, + 0xff, 0xf7, 0x6a, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x34, 0xe1, 0x01, 0x08, + 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x00, 0x44, 0x02, 0x58, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xa4, 0xff, 0x20, 0x46, 0x0b, 0xf0, + 0xb1, 0xfc, 0x20, 0x46, 0x10, 0xbd, 0x08, 0xb5, 0xcc, 0x30, 0xff, 0xf7, + 0x09, 0xfe, 0xbd, 0xe8, 0x08, 0x40, 0xfb, 0xf7, 0x95, 0xbc, 0x08, 0xb5, + 0xcc, 0x30, 0xff, 0xf7, 0x01, 0xfe, 0xbd, 0xe8, 0x08, 0x40, 0xfb, 0xf7, + 0xad, 0xbc, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4f, 0x0d, 0x46, 0x16, 0x46, + 0x85, 0xb0, 0xf2, 0xf7, 0x89, 0xfb, 0xac, 0x19, 0x00, 0xf1, 0x00, 0x60, + 0xa0, 0x42, 0xc0, 0xf0, 0x1e, 0x81, 0x09, 0xd9, 0x20, 0x46, 0xf2, 0xf7, + 0x5f, 0xfb, 0xb4, 0xfb, 0xf0, 0xf3, 0x03, 0xfb, 0x10, 0x40, 0x00, 0x28, + 0x40, 0xf0, 0x13, 0x81, 0x90, 0x48, 0x4f, 0xf0, 0x00, 0x09, 0xdf, 0xf8, + 0x58, 0xb2, 0xff, 0xf7, 0xdd, 0xfd, 0xfb, 0xf7, 0x8b, 0xfc, 0x00, 0x2e, + 0x00, 0xf0, 0xfe, 0x80, 0xb9, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0xf8, 0x80, + 0x05, 0xf1, 0x78, 0x43, 0xb5, 0xf1, 0x01, 0x6f, 0x4f, 0xf0, 0x10, 0x0a, + 0x4f, 0xea, 0x53, 0x43, 0x01, 0x93, 0x34, 0xbf, 0x01, 0x23, 0x02, 0x23, + 0x01, 0x2b, 0x03, 0xf0, 0x01, 0x08, 0x03, 0xf0, 0x02, 0x07, 0x0c, 0xbf, + 0x4f, 0xf0, 0x00, 0x63, 0x4f, 0xf0, 0x01, 0x63, 0x02, 0x93, 0xfe, 0xf7, + 0xb1, 0xfd, 0xfe, 0xf7, 0x8b, 0xfd, 0xbb, 0xf8, 0x00, 0x30, 0x4f, 0xf6, + 0xfd, 0x71, 0x5a, 0x1e, 0x92, 0xb2, 0x8a, 0x42, 0x97, 0xbf, 0x78, 0x4a, + 0x4f, 0xf0, 0x02, 0x63, 0x02, 0xea, 0x83, 0x23, 0x03, 0xf1, 0x00, 0x63, + 0x9d, 0x42, 0x0e, 0xd2, 0xb5, 0xf1, 0x00, 0x6f, 0x0b, 0xd3, 0x73, 0x4c, + 0x73, 0x4b, 0xd4, 0xf8, 0x88, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0xf9, 0xf7, + 0x67, 0xf9, 0x60, 0xb1, 0x4f, 0xf4, 0x40, 0x73, 0xa3, 0x60, 0xfe, 0xf7, + 0x57, 0xfd, 0xfe, 0xf7, 0x79, 0xfd, 0xba, 0xf1, 0x01, 0x0a, 0xd4, 0xd1, + 0x4f, 0xf0, 0xff, 0x39, 0x6b, 0xe0, 0xfe, 0xf7, 0x35, 0xfd, 0xbb, 0xf8, + 0x00, 0x20, 0x4f, 0xf6, 0xfd, 0x71, 0xdf, 0xf8, 0xac, 0x91, 0x53, 0x1e, + 0x9b, 0xb2, 0x8b, 0x42, 0x99, 0xf8, 0x14, 0x30, 0x97, 0xbf, 0x63, 0x4c, + 0x4f, 0xf0, 0x01, 0x64, 0x04, 0xea, 0x42, 0x24, 0x04, 0xf1, 0x00, 0x64, + 0xa5, 0x42, 0x2a, 0xbf, 0x2c, 0x1b, 0x01, 0x9c, 0x64, 0x0c, 0x01, 0x2b, + 0x00, 0xf0, 0x93, 0x80, 0x01, 0x20, 0x00, 0x23, 0x89, 0xf8, 0x14, 0x00, + 0xc9, 0xf8, 0x18, 0x30, 0xb8, 0xf1, 0x00, 0x0f, 0x00, 0xf0, 0x9d, 0x80, + 0xf4, 0xf7, 0xc0, 0xfb, 0x03, 0x1e, 0x18, 0xbf, 0x01, 0x23, 0x00, 0x2f, + 0x00, 0xf0, 0x99, 0x80, 0x02, 0x20, 0x03, 0x93, 0xf4, 0xf7, 0xb6, 0xfb, + 0x03, 0x9b, 0x00, 0x28, 0x3b, 0xd0, 0x01, 0x20, 0x00, 0x23, 0xc0, 0x1a, + 0x89, 0xf8, 0x14, 0x30, 0x18, 0xbf, 0x01, 0x20, 0xc0, 0xf1, 0x00, 0x09, + 0x02, 0x9b, 0x03, 0xeb, 0x44, 0x44, 0xbf, 0xf3, 0x4f, 0x8f, 0x49, 0x4b, + 0x04, 0xf5, 0x00, 0x32, 0xc3, 0xf8, 0x70, 0x42, 0x20, 0x34, 0x94, 0x42, + 0xfa, 0xd1, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0xbf, 0xf3, + 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x00, 0x22, 0xc3, 0xf8, 0x50, 0x22, + 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0xfe, 0xf7, 0xc6, 0xfc, + 0xf9, 0xf7, 0xe2, 0xf8, 0x00, 0x28, 0x94, 0xd1, 0x37, 0x4b, 0x4f, 0xf4, + 0x40, 0x72, 0x9a, 0x60, 0xb9, 0xf1, 0x00, 0x0f, 0x8d, 0xd1, 0xfe, 0xf7, + 0xe5, 0xfc, 0xfe, 0xf7, 0x07, 0xfd, 0x28, 0x46, 0xf2, 0xf7, 0x94, 0xfa, + 0x36, 0x1a, 0x05, 0x44, 0x41, 0xe7, 0x00, 0x2b, 0xc1, 0xd1, 0xb8, 0xf1, + 0x00, 0x0f, 0x0a, 0xd0, 0x30, 0x4a, 0xd3, 0x68, 0x23, 0xf4, 0xe6, 0x63, + 0xd3, 0x60, 0xd3, 0x68, 0x43, 0xea, 0x04, 0x23, 0x43, 0xf0, 0xa4, 0x03, + 0xd3, 0x60, 0x77, 0xb1, 0x2a, 0x4a, 0xd2, 0xf8, 0x0c, 0x31, 0x23, 0xf4, + 0xe6, 0x63, 0xc2, 0xf8, 0x0c, 0x31, 0xd2, 0xf8, 0x0c, 0x31, 0x43, 0xea, + 0x04, 0x23, 0x43, 0xf0, 0xa4, 0x03, 0xc2, 0xf8, 0x0c, 0x31, 0xb8, 0xf1, + 0x00, 0x0f, 0x2b, 0xd0, 0x01, 0x20, 0xf4, 0xf7, 0x51, 0xfb, 0x20, 0x4a, + 0xd3, 0x68, 0x23, 0xf4, 0xe0, 0x63, 0x23, 0xf0, 0x04, 0x03, 0xd3, 0x60, + 0x5f, 0xb1, 0x02, 0x20, 0xf4, 0xf7, 0x46, 0xfb, 0x1a, 0x4a, 0xd2, 0xf8, + 0x0c, 0x31, 0x23, 0xf4, 0xe0, 0x63, 0x23, 0xf0, 0x04, 0x03, 0xc2, 0xf8, + 0x0c, 0x31, 0x00, 0x28, 0x88, 0xd1, 0x00, 0x20, 0x86, 0xe7, 0x4f, 0xf0, + 0xff, 0x39, 0x8b, 0xe7, 0x4f, 0xf0, 0xff, 0x39, 0x0b, 0x48, 0xff, 0xf7, + 0xd7, 0xfc, 0xfb, 0xf7, 0x65, 0xfb, 0x48, 0x46, 0x05, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x4f, 0xf0, 0xff, 0x39, 0xf8, 0xe7, 0x00, 0x2f, 0xea, 0xd0, + 0xdb, 0xe7, 0x00, 0x2f, 0xe7, 0xd0, 0x43, 0x46, 0x66, 0xe7, 0x00, 0x28, + 0x7f, 0xf4, 0x6b, 0xaf, 0xaa, 0xe7, 0x00, 0xbf, 0x58, 0x15, 0x02, 0x24, + 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, + 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xed, 0x00, 0xe0, 0x00, 0x20, 0x00, 0x52, + 0x80, 0xe8, 0xf1, 0x1f, 0x80, 0x0b, 0x02, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, + 0x12, 0xf0, 0x1f, 0x04, 0x87, 0xb0, 0x82, 0x46, 0x0f, 0x46, 0x16, 0x46, + 0x99, 0x46, 0x40, 0xf0, 0x26, 0x81, 0x00, 0x29, 0x00, 0xf0, 0x23, 0x81, + 0xf2, 0xf7, 0x34, 0xfa, 0x09, 0xeb, 0x06, 0x03, 0x00, 0xf1, 0x00, 0x60, + 0x83, 0x42, 0x00, 0xf2, 0x1a, 0x81, 0x8e, 0x48, 0xdf, 0xf8, 0x50, 0xb2, + 0xff, 0xf7, 0x94, 0xfc, 0xfb, 0xf7, 0x42, 0xfb, 0xb9, 0xf1, 0x00, 0x0f, + 0x00, 0xf0, 0x06, 0x81, 0x00, 0x2c, 0x40, 0xf0, 0x01, 0x81, 0x30, 0x46, + 0xf2, 0xf7, 0xfc, 0xf9, 0xb6, 0xfb, 0xf0, 0xf5, 0x00, 0xfb, 0x15, 0x65, + 0x45, 0x1b, 0x4d, 0x45, 0x28, 0xbf, 0x4d, 0x46, 0xbb, 0x07, 0x01, 0xd1, + 0x1f, 0x2d, 0x4b, 0xd8, 0x20, 0x2d, 0xa8, 0x46, 0x39, 0x46, 0xda, 0xf8, + 0x04, 0x00, 0x28, 0xbf, 0x4f, 0xf0, 0x20, 0x08, 0x42, 0x46, 0x0b, 0xf0, + 0x6b, 0xfb, 0x1f, 0x2d, 0x07, 0xd8, 0xda, 0xf8, 0x04, 0x00, 0xc8, 0xf1, + 0x20, 0x02, 0xff, 0x21, 0x40, 0x44, 0x0b, 0xf0, 0x6f, 0xfb, 0xda, 0xf8, + 0x04, 0x30, 0x20, 0x25, 0x03, 0x93, 0x10, 0x23, 0x02, 0x93, 0xfe, 0xf7, + 0x55, 0xfc, 0xfe, 0xf7, 0x2f, 0xfc, 0x71, 0x4b, 0x19, 0x88, 0x4f, 0xf6, + 0xfd, 0x73, 0x4a, 0x1e, 0x92, 0xb2, 0x9a, 0x42, 0x97, 0xbf, 0x6e, 0x4b, + 0x4f, 0xf0, 0x02, 0x63, 0x03, 0xea, 0x81, 0x23, 0x03, 0xf1, 0x00, 0x63, + 0x9e, 0x42, 0x10, 0xd2, 0xb6, 0xf1, 0x00, 0x6f, 0x0d, 0xd3, 0x69, 0x4c, + 0x69, 0x4b, 0xd4, 0xf8, 0x88, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0xf9, 0xf7, + 0x0b, 0xf8, 0x00, 0x28, 0x00, 0xf0, 0xac, 0x80, 0x4f, 0xf4, 0x40, 0x73, + 0xa3, 0x60, 0xfe, 0xf7, 0xf9, 0xfb, 0xfe, 0xf7, 0x1b, 0xfc, 0x02, 0x9b, + 0x01, 0x3b, 0x02, 0x93, 0xd1, 0xd1, 0x4f, 0xf0, 0xff, 0x34, 0x87, 0xe0, + 0x25, 0xf0, 0x1f, 0x05, 0x03, 0x97, 0xa8, 0x46, 0xc7, 0xe7, 0x01, 0x2b, + 0x00, 0xf0, 0x9b, 0x80, 0x02, 0xf1, 0x78, 0x40, 0x01, 0x23, 0xb0, 0xf5, + 0x80, 0x1f, 0x8b, 0xf8, 0x14, 0x30, 0x06, 0xd3, 0xa2, 0xf1, 0x01, 0x63, + 0xb3, 0xf5, 0x80, 0x1f, 0x80, 0xf0, 0x85, 0x80, 0x02, 0x23, 0x00, 0x20, + 0x05, 0x92, 0x04, 0x93, 0xcb, 0xf8, 0x18, 0x00, 0x18, 0x46, 0xf4, 0xf7, + 0x6b, 0xfa, 0x05, 0x9a, 0x20, 0xbb, 0x04, 0x9b, 0x4d, 0x48, 0x01, 0x2b, + 0x67, 0xd1, 0xc1, 0x68, 0x41, 0xf0, 0x02, 0x01, 0xc1, 0x60, 0xbf, 0xf3, + 0x6f, 0x8f, 0xbf, 0xf3, 0x4f, 0x8f, 0x00, 0x20, 0x01, 0x99, 0x09, 0x58, + 0x11, 0x50, 0x04, 0x30, 0x20, 0x28, 0xf9, 0xd1, 0x05, 0x92, 0xbf, 0xf3, + 0x6f, 0x8f, 0xbf, 0xf3, 0x4f, 0x8f, 0x18, 0x46, 0x04, 0x93, 0xf4, 0xf7, + 0x4d, 0xfa, 0x04, 0x9b, 0x05, 0x9a, 0x01, 0x2b, 0x3e, 0x4b, 0x51, 0xd1, + 0xd9, 0x68, 0x21, 0xf0, 0x02, 0x01, 0xd9, 0x60, 0x00, 0x23, 0x8b, 0xf8, + 0x14, 0x30, 0x00, 0x28, 0x4f, 0xd1, 0x01, 0x9b, 0x20, 0x32, 0x20, 0x33, + 0x01, 0x93, 0x9b, 0xf8, 0x14, 0x30, 0x70, 0x19, 0x82, 0x42, 0x03, 0xd2, + 0x00, 0x2c, 0xae, 0xd0, 0x4f, 0xf0, 0xff, 0x34, 0x00, 0x2d, 0x11, 0xdd, + 0x06, 0xf0, 0x1f, 0x03, 0x2b, 0x44, 0xbf, 0xf3, 0x4f, 0x8f, 0x30, 0x48, + 0x32, 0x46, 0x33, 0x44, 0xc0, 0xf8, 0x70, 0x22, 0x20, 0x32, 0x99, 0x1a, + 0x00, 0x29, 0xf9, 0xdc, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, + 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x27, 0x4b, 0x00, 0x22, + 0xc3, 0xf8, 0x50, 0x22, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, + 0xf8, 0xf7, 0x68, 0xff, 0x00, 0x28, 0x7f, 0xf4, 0x78, 0xaf, 0x1e, 0x4b, + 0x4f, 0xf4, 0x40, 0x72, 0x9a, 0x60, 0x00, 0x2c, 0x7f, 0xf4, 0x71, 0xaf, + 0xfe, 0xf7, 0x6a, 0xfb, 0xfe, 0xf7, 0x8c, 0xfb, 0xa9, 0xeb, 0x08, 0x09, + 0x46, 0x44, 0x47, 0x44, 0x10, 0xe7, 0xd0, 0xf8, 0x0c, 0x11, 0x41, 0xf0, + 0x02, 0x01, 0xc0, 0xf8, 0x0c, 0x11, 0x94, 0xe7, 0xd3, 0xf8, 0x0c, 0x11, + 0x21, 0xf0, 0x02, 0x01, 0xc3, 0xf8, 0x0c, 0x11, 0xaa, 0xe7, 0x4f, 0xf0, + 0xff, 0x34, 0xb0, 0xe7, 0x03, 0x9b, 0x04, 0x46, 0x32, 0x46, 0x01, 0x93, + 0xab, 0xe7, 0x4f, 0xf0, 0xff, 0x34, 0xab, 0xe7, 0x4f, 0xf0, 0xff, 0x34, + 0x05, 0x48, 0xff, 0xf7, 0x85, 0xfb, 0xfb, 0xf7, 0x13, 0xfa, 0x20, 0x46, + 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x4f, 0xf0, 0xff, 0x34, 0xf8, 0xe7, + 0x58, 0x15, 0x02, 0x24, 0x80, 0xe8, 0xf1, 0x1f, 0x00, 0xfc, 0x3f, 0x00, + 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x00, 0x20, 0x00, 0x52, + 0x00, 0xed, 0x00, 0xe0, 0x80, 0x0b, 0x02, 0x24, 0x10, 0xb5, 0x04, 0x46, + 0x0b, 0x48, 0xff, 0xf7, 0x67, 0xfb, 0xfb, 0xf7, 0x15, 0xfa, 0xfe, 0xf7, + 0x59, 0xfb, 0xfe, 0xf7, 0x33, 0xfb, 0xfe, 0xf7, 0x1f, 0xfb, 0xfe, 0xf7, + 0x41, 0xfb, 0x60, 0x68, 0x08, 0xb1, 0x0b, 0xf0, 0xfb, 0xf9, 0x03, 0x48, + 0xff, 0xf7, 0x56, 0xfb, 0xfb, 0xf7, 0xe4, 0xf9, 0x00, 0x20, 0x10, 0xbd, + 0x58, 0x15, 0x02, 0x24, 0x10, 0xb5, 0x04, 0x46, 0x12, 0x48, 0xff, 0xf7, + 0x4b, 0xfb, 0xfb, 0xf7, 0xf9, 0xf9, 0xfe, 0xf7, 0x3d, 0xfb, 0xfe, 0xf7, + 0x17, 0xfb, 0x0f, 0x4b, 0x0f, 0x4a, 0xd3, 0xf8, 0x88, 0x10, 0x91, 0x42, + 0xfb, 0xd1, 0x4f, 0xf4, 0x8e, 0x01, 0x0d, 0x4a, 0x51, 0x61, 0x4f, 0xf4, + 0x40, 0x72, 0x9a, 0x60, 0xfe, 0xf7, 0xf6, 0xfa, 0xfe, 0xf7, 0x18, 0xfb, + 0x20, 0x20, 0xfe, 0xf7, 0x67, 0xfa, 0x60, 0x60, 0x03, 0x48, 0xff, 0xf7, + 0x2d, 0xfb, 0xfb, 0xf7, 0xbb, 0xf9, 0x00, 0x20, 0x10, 0xbd, 0x00, 0xbf, + 0x58, 0x15, 0x02, 0x24, 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, + 0x00, 0x20, 0x00, 0x52, 0x02, 0x4b, 0x0a, 0x46, 0x00, 0x21, 0x1b, 0x68, + 0x18, 0x47, 0x00, 0xbf, 0x14, 0x01, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, + 0x00, 0xf1, 0x08, 0x03, 0xd3, 0xb0, 0x04, 0x93, 0x4a, 0xab, 0x05, 0x93, + 0x00, 0xf1, 0x28, 0x03, 0x06, 0x93, 0xdd, 0xe9, 0x04, 0x32, 0x53, 0xf8, + 0x04, 0x0b, 0x42, 0xf8, 0x04, 0x0b, 0x06, 0x98, 0x98, 0x42, 0xf8, 0xd1, + 0x0a, 0xaa, 0x01, 0xf1, 0x40, 0x00, 0x4b, 0x78, 0x04, 0x31, 0x11, 0xf8, + 0x04, 0x4c, 0x1b, 0x04, 0x43, 0xea, 0x04, 0x63, 0x11, 0xf8, 0x01, 0x4c, + 0x23, 0x43, 0x11, 0xf8, 0x02, 0x4c, 0x88, 0x42, 0x43, 0xea, 0x04, 0x23, + 0x42, 0xf8, 0x04, 0x3b, 0xed, 0xd1, 0x50, 0x9b, 0x0d, 0xf1, 0x20, 0x0b, + 0xa2, 0x48, 0x00, 0x93, 0xde, 0x46, 0xdd, 0xf8, 0x44, 0xc1, 0x81, 0x46, + 0xdd, 0xf8, 0x38, 0xa1, 0x4f, 0x9e, 0x01, 0x90, 0xdd, 0xe9, 0x4a, 0x72, + 0xdd, 0xe9, 0x4c, 0x31, 0x4f, 0xea, 0xfa, 0x25, 0xde, 0xf8, 0x08, 0x40, + 0xd9, 0xf8, 0x00, 0x00, 0x0e, 0xf1, 0x20, 0x0e, 0x85, 0xea, 0xba, 0x15, + 0x09, 0xf1, 0x20, 0x09, 0x20, 0x44, 0x00, 0x9c, 0x85, 0xea, 0x7a, 0x65, + 0x05, 0x44, 0x00, 0x98, 0x70, 0x40, 0x00, 0xea, 0x0a, 0x00, 0x60, 0x40, + 0x47, 0xea, 0x02, 0x04, 0x05, 0x44, 0x4f, 0xea, 0x77, 0x30, 0x1c, 0x40, + 0xac, 0x44, 0x80, 0xea, 0xb7, 0x00, 0x07, 0xea, 0x02, 0x05, 0x80, 0xea, + 0xb7, 0x50, 0x61, 0x44, 0x2c, 0x43, 0x59, 0xf8, 0x1c, 0x5c, 0x04, 0x44, + 0x5e, 0xf8, 0x14, 0x0c, 0xa4, 0x44, 0x05, 0x44, 0x8a, 0xea, 0x06, 0x04, + 0x00, 0x98, 0x0c, 0xea, 0x07, 0x08, 0x05, 0x44, 0x0c, 0x40, 0x4f, 0xea, + 0xf1, 0x20, 0x74, 0x40, 0x80, 0xea, 0xb1, 0x10, 0x25, 0x44, 0x4c, 0xea, + 0x07, 0x04, 0x80, 0xea, 0x71, 0x60, 0x14, 0x40, 0x28, 0x44, 0x4f, 0xea, + 0x7c, 0x35, 0x44, 0xea, 0x08, 0x04, 0x85, 0xea, 0xbc, 0x05, 0x03, 0x44, + 0x85, 0xea, 0xbc, 0x55, 0x25, 0x44, 0x59, 0xf8, 0x18, 0x4c, 0x05, 0x44, + 0x5e, 0xf8, 0x10, 0x0c, 0x04, 0x44, 0x4c, 0xea, 0x05, 0x00, 0x26, 0x44, + 0x81, 0xea, 0x0a, 0x04, 0x38, 0x40, 0x1c, 0x40, 0x84, 0xea, 0x0a, 0x08, + 0x06, 0xeb, 0x08, 0x04, 0x4f, 0xea, 0xf3, 0x26, 0x0c, 0xea, 0x05, 0x08, + 0x86, 0xea, 0xb3, 0x16, 0x40, 0xea, 0x08, 0x00, 0x86, 0xea, 0x73, 0x66, + 0x26, 0x44, 0x4f, 0xea, 0x75, 0x34, 0x84, 0xea, 0xb5, 0x04, 0x32, 0x44, + 0x84, 0xea, 0xb5, 0x54, 0x04, 0x44, 0x59, 0xf8, 0x14, 0x0c, 0x34, 0x44, + 0x5e, 0xf8, 0x0c, 0x6c, 0x30, 0x44, 0x45, 0xea, 0x04, 0x06, 0x82, 0x44, + 0x81, 0xea, 0x03, 0x00, 0x06, 0xea, 0x0c, 0x06, 0x10, 0x40, 0x80, 0xea, + 0x01, 0x08, 0x0a, 0xeb, 0x08, 0x00, 0x4f, 0xea, 0xf2, 0x2a, 0x8a, 0xea, + 0xb2, 0x1a, 0x8a, 0xea, 0x72, 0x6a, 0x82, 0x44, 0x4f, 0xea, 0x74, 0x30, + 0x0a, 0xeb, 0x07, 0x08, 0x80, 0xea, 0xb4, 0x00, 0x05, 0xea, 0x04, 0x07, + 0x80, 0xea, 0xb4, 0x50, 0x3e, 0x43, 0x5e, 0xf8, 0x08, 0x7c, 0x30, 0x44, + 0x59, 0xf8, 0x10, 0x6c, 0x50, 0x44, 0x3e, 0x44, 0x83, 0xea, 0x02, 0x0a, + 0x31, 0x44, 0x4f, 0xea, 0xf8, 0x26, 0x0a, 0xea, 0x08, 0x0a, 0x44, 0xea, + 0x00, 0x07, 0x86, 0xea, 0xb8, 0x16, 0x8a, 0xea, 0x03, 0x0a, 0x2f, 0x40, + 0x86, 0xea, 0x78, 0x66, 0x51, 0x44, 0x04, 0xea, 0x00, 0x0a, 0x0e, 0x44, + 0x4f, 0xea, 0x70, 0x31, 0x47, 0xea, 0x0a, 0x07, 0x82, 0xea, 0x08, 0x0a, + 0x81, 0xea, 0xb0, 0x01, 0xb4, 0x44, 0x81, 0xea, 0xb0, 0x51, 0x0a, 0xea, + 0x0c, 0x0a, 0x39, 0x44, 0x5e, 0xf8, 0x04, 0x7c, 0x8a, 0xea, 0x02, 0x0a, + 0x31, 0x44, 0x59, 0xf8, 0x0c, 0x6c, 0x3e, 0x44, 0x00, 0xea, 0x01, 0x07, + 0x33, 0x44, 0x4f, 0xea, 0xfc, 0x26, 0x86, 0xea, 0xbc, 0x16, 0x53, 0x44, + 0x86, 0xea, 0x7c, 0x66, 0x1e, 0x44, 0xab, 0x19, 0x40, 0xea, 0x01, 0x05, + 0x00, 0x93, 0x4f, 0xea, 0x71, 0x33, 0x25, 0x40, 0x83, 0xea, 0xb1, 0x03, + 0x3d, 0x43, 0x83, 0xea, 0xb1, 0x53, 0x2b, 0x44, 0x59, 0xf8, 0x08, 0x5c, + 0x33, 0x44, 0xde, 0xf8, 0x00, 0x60, 0x35, 0x44, 0x00, 0x9e, 0x15, 0x44, + 0x88, 0xea, 0x0c, 0x02, 0x32, 0x40, 0x82, 0xea, 0x08, 0x07, 0xea, 0x19, + 0x4f, 0xea, 0xf6, 0x25, 0x01, 0xea, 0x03, 0x07, 0x85, 0xea, 0xb6, 0x15, + 0x85, 0xea, 0x76, 0x65, 0x15, 0x44, 0x4f, 0xea, 0x73, 0x32, 0x66, 0x19, + 0x41, 0xea, 0x03, 0x04, 0x82, 0xea, 0xb3, 0x02, 0x04, 0x40, 0x82, 0xea, + 0xb3, 0x52, 0x3c, 0x43, 0x22, 0x44, 0x59, 0xf8, 0x04, 0x4c, 0x2a, 0x44, + 0xde, 0xf8, 0x04, 0x50, 0x2c, 0x44, 0x4f, 0xea, 0x72, 0x35, 0xa0, 0x44, + 0x00, 0x9c, 0x85, 0xea, 0xb2, 0x05, 0x8c, 0xea, 0x04, 0x04, 0x34, 0x40, + 0x84, 0xea, 0x0c, 0x07, 0x08, 0xeb, 0x07, 0x04, 0x4f, 0xea, 0xf6, 0x28, + 0x43, 0xea, 0x02, 0x07, 0x88, 0xea, 0xb6, 0x18, 0x0f, 0x40, 0x88, 0xea, + 0x76, 0x68, 0x44, 0x44, 0x85, 0xea, 0xb2, 0x58, 0x03, 0xea, 0x02, 0x05, + 0x00, 0xeb, 0x04, 0x0a, 0x18, 0xa8, 0x3d, 0x43, 0x70, 0x45, 0x45, 0x44, + 0x04, 0xeb, 0x05, 0x07, 0x7f, 0xf4, 0xd8, 0xae, 0x00, 0x98, 0xcd, 0xf8, + 0x44, 0xc1, 0xcd, 0xf8, 0x38, 0xa1, 0xcd, 0xe9, 0x4f, 0x60, 0x38, 0xa8, + 0xcd, 0xe9, 0x4a, 0x72, 0xcd, 0xe9, 0x4c, 0x31, 0xcd, 0xe9, 0x08, 0x45, + 0x07, 0x90, 0x01, 0xe0, 0x28, 0xdc, 0x01, 0x08, 0xdb, 0xf8, 0x40, 0x00, + 0x0b, 0xf1, 0x20, 0x0b, 0x5b, 0xf8, 0x14, 0x5c, 0x4f, 0xea, 0xf0, 0x4e, + 0x5b, 0xf8, 0x18, 0x4c, 0x4f, 0xea, 0xb5, 0x48, 0x8e, 0xea, 0x70, 0x4e, + 0x88, 0xea, 0xf5, 0x18, 0x8e, 0xea, 0x90, 0x2e, 0xdb, 0xf8, 0x0c, 0x00, + 0x88, 0xea, 0xd5, 0x08, 0x20, 0x44, 0x4f, 0xea, 0xfa, 0x24, 0x86, 0x44, + 0x84, 0xea, 0xba, 0x14, 0x0e, 0xeb, 0x08, 0x00, 0x84, 0xea, 0x7a, 0x6e, + 0x00, 0x9c, 0x03, 0x90, 0x74, 0x40, 0x00, 0x98, 0x04, 0xea, 0x0a, 0x04, + 0x44, 0x40, 0x01, 0x98, 0x74, 0x44, 0x00, 0x6c, 0x8a, 0xea, 0x06, 0x0e, + 0x20, 0x44, 0x03, 0x9c, 0x20, 0x44, 0xcb, 0xf8, 0x28, 0x40, 0x07, 0xea, + 0x02, 0x04, 0x84, 0x44, 0x47, 0xea, 0x02, 0x00, 0x01, 0xeb, 0x0c, 0x08, + 0x4f, 0xea, 0x77, 0x31, 0x18, 0x40, 0x81, 0xea, 0xb7, 0x01, 0x0e, 0xea, + 0x08, 0x0e, 0x20, 0x43, 0x5b, 0xf8, 0x10, 0x4c, 0x81, 0xea, 0xb7, 0x51, + 0x8e, 0xea, 0x06, 0x0e, 0x8a, 0xea, 0x08, 0x09, 0x08, 0x44, 0xdb, 0xf8, + 0x24, 0x10, 0x84, 0x44, 0x4f, 0xea, 0xf1, 0x40, 0x80, 0xea, 0x71, 0x40, + 0x80, 0xea, 0x91, 0x20, 0xdb, 0xf8, 0x10, 0x10, 0x29, 0x44, 0x4f, 0xea, + 0xb4, 0x45, 0x85, 0xea, 0xf4, 0x15, 0x01, 0x44, 0x01, 0x98, 0x85, 0xea, + 0xd4, 0x05, 0x40, 0x6c, 0x29, 0x44, 0x00, 0x9d, 0x28, 0x44, 0x4f, 0xea, + 0xf8, 0x25, 0xcb, 0xf8, 0x2c, 0x10, 0x08, 0x44, 0x85, 0xea, 0xb8, 0x15, + 0x86, 0x44, 0x85, 0xea, 0x78, 0x65, 0x05, 0xeb, 0x0e, 0x00, 0x4f, 0xea, + 0x7c, 0x35, 0x07, 0xea, 0x0c, 0x0e, 0x03, 0x44, 0x85, 0xea, 0xbc, 0x05, + 0x00, 0x93, 0x47, 0xea, 0x0c, 0x03, 0x85, 0xea, 0xbc, 0x55, 0x13, 0x40, + 0x43, 0xea, 0x0e, 0x03, 0x5b, 0xf8, 0x0c, 0xec, 0x1d, 0x44, 0x03, 0x9b, + 0x05, 0x44, 0x4f, 0xea, 0xf3, 0x40, 0x80, 0xea, 0x73, 0x40, 0x80, 0xea, + 0x93, 0x20, 0xdb, 0xf8, 0x14, 0x30, 0x23, 0x44, 0x4f, 0xea, 0xbe, 0x44, + 0x03, 0x44, 0x00, 0x98, 0x84, 0xea, 0xfe, 0x14, 0x09, 0xea, 0x00, 0x09, + 0x01, 0x98, 0x84, 0xea, 0xde, 0x04, 0x80, 0x6c, 0x89, 0xea, 0x0a, 0x09, + 0x23, 0x44, 0x30, 0x44, 0x4f, 0xea, 0x75, 0x36, 0xcb, 0xf8, 0x30, 0x30, + 0x18, 0x44, 0x86, 0xea, 0xb5, 0x06, 0x81, 0x44, 0x00, 0x98, 0x86, 0xea, + 0xb5, 0x56, 0x4f, 0xea, 0xf0, 0x24, 0x84, 0xea, 0xb0, 0x14, 0x84, 0xea, + 0x70, 0x64, 0x04, 0xeb, 0x09, 0x00, 0x4c, 0xea, 0x05, 0x04, 0x02, 0x44, + 0x3c, 0x40, 0x02, 0x92, 0x0c, 0xea, 0x05, 0x02, 0x14, 0x43, 0x5b, 0xf8, + 0x08, 0x2c, 0x34, 0x44, 0x04, 0x44, 0x4f, 0xea, 0xf1, 0x40, 0x80, 0xea, + 0x71, 0x40, 0x80, 0xea, 0x91, 0x21, 0xdb, 0xf8, 0x18, 0x00, 0x86, 0x44, + 0x02, 0x98, 0x71, 0x44, 0x4f, 0xea, 0xb2, 0x4e, 0x8e, 0xea, 0xf2, 0x1e, + 0x8e, 0xea, 0xd2, 0x0e, 0x8e, 0x44, 0x00, 0x99, 0x88, 0xea, 0x01, 0x01, + 0x01, 0x40, 0x01, 0x98, 0xcb, 0xf8, 0x34, 0xe0, 0xc6, 0x6c, 0x81, 0xea, + 0x08, 0x01, 0x02, 0x98, 0x56, 0x44, 0x4f, 0xea, 0x74, 0x3a, 0x4f, 0xea, + 0xf0, 0x20, 0x76, 0x44, 0x8a, 0xea, 0xb4, 0x0a, 0x31, 0x44, 0x02, 0x9e, + 0x8a, 0xea, 0xb4, 0x5a, 0x80, 0xea, 0xb6, 0x10, 0x80, 0xea, 0x76, 0x60, + 0x46, 0x18, 0x45, 0xea, 0x04, 0x00, 0x05, 0xea, 0x04, 0x01, 0x00, 0xea, + 0x0c, 0x00, 0x07, 0xeb, 0x06, 0x09, 0x08, 0x43, 0x4f, 0xea, 0xf3, 0x41, + 0x81, 0xea, 0x73, 0x41, 0x50, 0x44, 0x81, 0xea, 0x93, 0x23, 0xdb, 0xf8, + 0x1c, 0x10, 0x30, 0x44, 0x5b, 0xf8, 0x04, 0x6c, 0x0a, 0x44, 0x02, 0x99, + 0x13, 0x44, 0x4f, 0xea, 0xb6, 0x42, 0x82, 0xea, 0xf6, 0x12, 0x82, 0xea, + 0xd6, 0x02, 0x1a, 0x44, 0x00, 0x9b, 0x83, 0xea, 0x01, 0x07, 0x4f, 0xea, + 0xf9, 0x21, 0xcb, 0xf8, 0x38, 0x20, 0x07, 0xea, 0x09, 0x07, 0x81, 0xea, + 0xb9, 0x11, 0x5f, 0x40, 0x01, 0x9b, 0x81, 0xea, 0x79, 0x61, 0x1b, 0x6d, + 0x13, 0x44, 0x43, 0x44, 0x04, 0xea, 0x00, 0x08, 0x1f, 0x44, 0xcb, 0x19, + 0x44, 0xea, 0x00, 0x07, 0x4f, 0xea, 0x70, 0x31, 0x2f, 0x40, 0x9c, 0x44, + 0x81, 0xea, 0xb0, 0x01, 0x47, 0xea, 0x08, 0x07, 0xdb, 0xf8, 0x00, 0x80, + 0x81, 0xea, 0xb0, 0x51, 0x39, 0x44, 0x4f, 0xea, 0xfe, 0x47, 0x19, 0x44, + 0x87, 0xea, 0x7e, 0x47, 0xdb, 0xf8, 0x20, 0x30, 0x87, 0xea, 0x9e, 0x2e, + 0x9f, 0x19, 0x4f, 0xea, 0xb8, 0x43, 0x00, 0x9e, 0x83, 0xea, 0xf8, 0x13, + 0x77, 0x44, 0x83, 0xea, 0xd8, 0x03, 0x1f, 0x44, 0x02, 0x9b, 0x83, 0xea, + 0x09, 0x0e, 0xcb, 0xf8, 0x3c, 0x70, 0x0e, 0xea, 0x0c, 0x0e, 0x8e, 0xea, + 0x03, 0x0e, 0x01, 0x9b, 0x5b, 0x6d, 0x3b, 0x44, 0x33, 0x44, 0x9e, 0x44, + 0x4f, 0xea, 0xfc, 0x23, 0x83, 0xea, 0xbc, 0x13, 0x83, 0xea, 0x7c, 0x63, + 0x03, 0xeb, 0x0e, 0x06, 0x00, 0xea, 0x01, 0x0e, 0xab, 0x19, 0x40, 0xea, + 0x01, 0x05, 0x00, 0x93, 0x4f, 0xea, 0x71, 0x33, 0x25, 0x40, 0x83, 0xea, + 0xb1, 0x03, 0x45, 0xea, 0x0e, 0x05, 0xdb, 0xf8, 0x04, 0xe0, 0x83, 0xea, + 0xb1, 0x53, 0x2b, 0x44, 0xdb, 0xf8, 0x24, 0x50, 0x33, 0x44, 0x4f, 0xea, + 0xf2, 0x46, 0x86, 0xea, 0x72, 0x46, 0x86, 0xea, 0x92, 0x22, 0x05, 0xeb, + 0x08, 0x06, 0x89, 0xea, 0x0c, 0x08, 0x16, 0x44, 0x4f, 0xea, 0xbe, 0x42, + 0x82, 0xea, 0xfe, 0x12, 0x82, 0xea, 0xde, 0x02, 0x16, 0x44, 0x00, 0x9a, + 0x08, 0xea, 0x02, 0x08, 0x01, 0x9a, 0xcb, 0xf8, 0x40, 0x60, 0x95, 0x6d, + 0x88, 0xea, 0x09, 0x08, 0x02, 0x9a, 0x35, 0x44, 0x00, 0x9e, 0x15, 0x44, + 0x00, 0x9a, 0x4f, 0xea, 0xf2, 0x22, 0x45, 0x44, 0x01, 0xea, 0x03, 0x08, + 0x82, 0xea, 0xb6, 0x12, 0x82, 0xea, 0x76, 0x62, 0x15, 0x44, 0x4f, 0xea, + 0x73, 0x32, 0x66, 0x19, 0x41, 0xea, 0x03, 0x04, 0x82, 0xea, 0xb3, 0x02, + 0x04, 0x40, 0x82, 0xea, 0xb3, 0x52, 0x44, 0xea, 0x08, 0x04, 0x22, 0x44, + 0x4f, 0xea, 0xf7, 0x44, 0x84, 0xea, 0x77, 0x44, 0x2a, 0x44, 0xdb, 0xf8, + 0x08, 0x50, 0x84, 0xea, 0x97, 0x27, 0x03, 0x9c, 0xa6, 0x44, 0x4f, 0xea, + 0xb5, 0x44, 0x84, 0xea, 0xf5, 0x14, 0x77, 0x44, 0x84, 0xea, 0xd5, 0x05, + 0x00, 0x9c, 0x8c, 0xea, 0x04, 0x0e, 0x01, 0x9c, 0x3d, 0x44, 0xe7, 0x6d, + 0x0e, 0xea, 0x06, 0x0e, 0x4f, 0xea, 0xf6, 0x24, 0xcb, 0xf8, 0x44, 0x50, + 0x2f, 0x44, 0x8e, 0xea, 0x0c, 0x0e, 0x84, 0xea, 0xb6, 0x14, 0x4f, 0x44, + 0x4f, 0xea, 0x72, 0x35, 0x84, 0xea, 0x76, 0x64, 0x77, 0x44, 0x85, 0xea, + 0xb2, 0x05, 0x3c, 0x44, 0x43, 0xea, 0x02, 0x07, 0x85, 0xea, 0xb2, 0x5e, + 0x03, 0xea, 0x02, 0x05, 0x00, 0xeb, 0x04, 0x0a, 0x01, 0x98, 0x0f, 0x40, + 0x20, 0x30, 0x3d, 0x43, 0x01, 0x90, 0x07, 0x98, 0x75, 0x44, 0x58, 0x45, + 0x04, 0xeb, 0x05, 0x07, 0x7f, 0xf4, 0x20, 0xae, 0x00, 0x98, 0xcd, 0xf8, + 0x44, 0xc1, 0xcd, 0xf8, 0x38, 0xa1, 0xcd, 0xe9, 0x4f, 0x60, 0xcd, 0xe9, + 0x4a, 0x72, 0xcd, 0xe9, 0x4c, 0x31, 0xcd, 0xe9, 0x08, 0x45, 0x04, 0x9b, + 0x05, 0x99, 0x1b, 0x68, 0x51, 0xf8, 0x04, 0x2b, 0x13, 0x44, 0x04, 0x9a, + 0x05, 0x91, 0x42, 0xf8, 0x04, 0x3b, 0x06, 0x9b, 0x04, 0x92, 0x93, 0x42, + 0xf1, 0xd1, 0x08, 0xa8, 0x4f, 0xf4, 0x94, 0x71, 0xff, 0xf7, 0x84, 0xfc, + 0x00, 0x20, 0x53, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x2d, 0xe9, 0xf8, 0x43, + 0x03, 0x68, 0x05, 0x46, 0x0e, 0x46, 0x14, 0x46, 0x03, 0xf0, 0x3f, 0x07, + 0x9b, 0x18, 0x03, 0x60, 0x22, 0xbf, 0x43, 0x68, 0x01, 0x33, 0x43, 0x60, + 0x9f, 0xb1, 0xc7, 0xf1, 0x40, 0x09, 0x91, 0x45, 0x0f, 0xd8, 0x00, 0xf1, + 0x28, 0x08, 0x4a, 0x46, 0x08, 0xeb, 0x07, 0x00, 0x0a, 0xf0, 0x80, 0xfe, + 0x41, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x6a, 0xfc, 0xb0, 0xb9, 0x40, 0x3c, + 0x4e, 0x44, 0x3c, 0x44, 0x07, 0x46, 0x26, 0x44, 0x04, 0xe0, 0x28, 0x46, + 0xff, 0xf7, 0x60, 0xfc, 0x60, 0xb9, 0x40, 0x3c, 0x3f, 0x2c, 0xa6, 0xeb, + 0x04, 0x01, 0xf6, 0xd8, 0x44, 0xb1, 0x05, 0xf1, 0x28, 0x00, 0x22, 0x46, + 0x38, 0x44, 0x0a, 0xf0, 0x65, 0xfe, 0x00, 0x20, 0xbd, 0xe8, 0xf8, 0x83, + 0x20, 0x46, 0xfb, 0xe7, 0x10, 0xb4, 0x58, 0xb1, 0x04, 0x68, 0x4c, 0xb1, + 0x24, 0x79, 0x05, 0x3c, 0x01, 0x2c, 0x05, 0xd8, 0x42, 0xb1, 0x40, 0x68, + 0x5d, 0xf8, 0x04, 0x4b, 0xff, 0xf7, 0xb8, 0xbf, 0x02, 0x48, 0x5d, 0xf8, + 0x04, 0x4b, 0x70, 0x47, 0x10, 0x46, 0xfa, 0xe7, 0x00, 0xaf, 0xff, 0xff, + 0x38, 0xb5, 0x03, 0x68, 0x04, 0x46, 0x63, 0xb1, 0x85, 0x68, 0x55, 0xb1, + 0xfd, 0xf7, 0xbe, 0xfc, 0x40, 0xb9, 0x23, 0x68, 0x29, 0x46, 0x20, 0x46, + 0x9a, 0x79, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0xd9, 0xbf, 0x01, 0x48, + 0x38, 0xbd, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, 0x03, 0x68, 0x03, 0xf0, + 0x3f, 0x03, 0x5a, 0x1c, 0x03, 0x44, 0x70, 0xb5, 0x38, 0x2a, 0x0d, 0x46, + 0x00, 0xf1, 0x28, 0x06, 0x4f, 0xf0, 0x80, 0x01, 0x04, 0x46, 0x83, 0xf8, + 0x28, 0x10, 0x06, 0xeb, 0x02, 0x00, 0x61, 0xd8, 0xc2, 0xf1, 0x38, 0x02, + 0x00, 0x21, 0x0a, 0xf0, 0x2b, 0xfe, 0x20, 0x46, 0xd4, 0xe9, 0x00, 0x31, + 0x5a, 0x0f, 0xdb, 0x00, 0x42, 0xea, 0xc1, 0x02, 0x31, 0x46, 0x1b, 0xba, + 0x12, 0xba, 0x63, 0x66, 0x22, 0x66, 0xff, 0xf7, 0xfd, 0xfb, 0x00, 0x28, + 0x4b, 0xd1, 0xe3, 0x7a, 0x2b, 0x70, 0x63, 0x89, 0x6b, 0x70, 0xa3, 0x68, + 0x1b, 0x0a, 0xab, 0x70, 0xa3, 0x68, 0xeb, 0x70, 0xe3, 0x7b, 0x2b, 0x71, + 0xe3, 0x89, 0x6b, 0x71, 0xe3, 0x68, 0x1b, 0x0a, 0xab, 0x71, 0xe3, 0x68, + 0xeb, 0x71, 0xe3, 0x7c, 0x2b, 0x72, 0x63, 0x8a, 0x6b, 0x72, 0x23, 0x69, + 0x1b, 0x0a, 0xab, 0x72, 0x23, 0x69, 0xeb, 0x72, 0xe3, 0x7d, 0x2b, 0x73, + 0xe3, 0x8a, 0x6b, 0x73, 0x63, 0x69, 0x1b, 0x0a, 0xab, 0x73, 0x63, 0x69, + 0xeb, 0x73, 0xe3, 0x7e, 0x2b, 0x74, 0x63, 0x8b, 0x6b, 0x74, 0xa3, 0x69, + 0x1b, 0x0a, 0xab, 0x74, 0xa3, 0x69, 0xeb, 0x74, 0xe3, 0x7f, 0x2b, 0x75, + 0xe3, 0x8b, 0x6b, 0x75, 0xe3, 0x69, 0x1b, 0x0a, 0xab, 0x75, 0xe3, 0x69, + 0xeb, 0x75, 0x94, 0xf8, 0x23, 0x30, 0x2b, 0x76, 0x63, 0x8c, 0x6b, 0x76, + 0x23, 0x6a, 0x1b, 0x0a, 0xab, 0x76, 0x23, 0x6a, 0xeb, 0x76, 0xa3, 0x6e, + 0x4b, 0xb9, 0x94, 0xf8, 0x27, 0x30, 0x2b, 0x77, 0xe3, 0x8c, 0x6b, 0x77, + 0x63, 0x6a, 0x1b, 0x0a, 0xab, 0x77, 0x63, 0x6a, 0xeb, 0x77, 0x70, 0xbd, + 0x00, 0x21, 0xc2, 0xf1, 0x40, 0x02, 0x0a, 0xf0, 0xc9, 0xfd, 0x31, 0x46, + 0x20, 0x46, 0xff, 0xf7, 0xa5, 0xfb, 0x00, 0x28, 0xf3, 0xd1, 0x01, 0x46, + 0x38, 0x22, 0x30, 0x46, 0x91, 0xe7, 0x00, 0x00, 0x40, 0xb1, 0x03, 0x68, + 0x33, 0xb1, 0x1b, 0x79, 0x05, 0x3b, 0x01, 0x2b, 0x02, 0xd8, 0x40, 0x68, + 0xff, 0xf7, 0x72, 0xbf, 0x00, 0x48, 0x70, 0x47, 0x00, 0xaf, 0xff, 0xff, + 0x42, 0xf2, 0x10, 0x73, 0x99, 0x42, 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, + 0x0d, 0x46, 0x03, 0xd9, 0x6f, 0xf0, 0x0f, 0x00, 0xbd, 0xe8, 0xf0, 0x81, + 0x46, 0x68, 0x8e, 0x42, 0x1a, 0xd2, 0x04, 0x21, 0x28, 0x46, 0x0c, 0xf0, + 0x41, 0xf8, 0x07, 0x46, 0x00, 0x28, 0xf1, 0xd0, 0xd4, 0xf8, 0x08, 0x80, + 0xb8, 0xf1, 0x00, 0x0f, 0x0c, 0xd0, 0xb6, 0x00, 0x41, 0x46, 0x32, 0x46, + 0x0a, 0xf0, 0x82, 0xfd, 0x1e, 0xb1, 0x31, 0x46, 0x40, 0x46, 0xff, 0xf7, + 0x63, 0xfb, 0xa0, 0x68, 0x0a, 0xf0, 0x22, 0xfd, 0xc4, 0xe9, 0x01, 0x57, + 0x00, 0x20, 0xdd, 0xe7, 0x42, 0xf2, 0x10, 0x73, 0x99, 0x42, 0x2d, 0xe9, + 0xf0, 0x41, 0x05, 0x46, 0x0c, 0x46, 0x03, 0xd9, 0x6f, 0xf0, 0x0f, 0x00, + 0xbd, 0xe8, 0xf0, 0x81, 0x46, 0x68, 0x8e, 0x42, 0x03, 0xd8, 0xbd, 0xe8, + 0xf0, 0x41, 0xff, 0xf7, 0xc1, 0xbf, 0x73, 0x1e, 0xfb, 0xb9, 0x01, 0x33, + 0x04, 0x21, 0x9c, 0x42, 0x38, 0xbf, 0x1c, 0x46, 0x20, 0x46, 0x0c, 0xf0, + 0x0b, 0xf8, 0x07, 0x46, 0x00, 0x28, 0xe7, 0xd0, 0xd5, 0xf8, 0x08, 0x80, + 0xb8, 0xf1, 0x00, 0x0f, 0x0b, 0xd0, 0x41, 0x46, 0xa2, 0x00, 0x0a, 0xf0, + 0x4d, 0xfd, 0xb1, 0x00, 0x02, 0xd0, 0x40, 0x46, 0xff, 0xf7, 0x2e, 0xfb, + 0xa8, 0x68, 0x0a, 0xf0, 0xed, 0xfc, 0x00, 0x20, 0xc5, 0xe9, 0x01, 0x47, + 0xd4, 0xe7, 0xaa, 0x68, 0x52, 0xf8, 0x23, 0x20, 0x00, 0x2a, 0xda, 0xd1, + 0x01, 0x3b, 0xd7, 0xe7, 0x03, 0x68, 0xf0, 0xb5, 0x04, 0x46, 0x89, 0xb0, + 0x0d, 0x46, 0xf3, 0xb1, 0x86, 0x68, 0xe6, 0xb1, 0x69, 0x46, 0x9f, 0x79, + 0xff, 0xf7, 0x7e, 0xff, 0xa8, 0xb9, 0x20, 0x46, 0xfd, 0xf7, 0xa6, 0xfb, + 0x88, 0xb9, 0x23, 0x68, 0xf1, 0x19, 0x20, 0x46, 0x9a, 0x79, 0xff, 0xf7, + 0xc3, 0xfe, 0x50, 0xb9, 0x23, 0x68, 0x69, 0x46, 0x20, 0x46, 0x5a, 0x79, + 0xff, 0xf7, 0xbc, 0xfe, 0x18, 0xb9, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, + 0x67, 0xff, 0x09, 0xb0, 0xf0, 0xbd, 0x01, 0x48, 0xfb, 0xe7, 0x00, 0xbf, + 0x00, 0xaf, 0xff, 0xff, 0x10, 0xb4, 0x04, 0x68, 0x2c, 0xb1, 0x83, 0x68, + 0x1b, 0xb1, 0x5d, 0xf8, 0x04, 0x4b, 0xff, 0xf7, 0xa7, 0xbe, 0x02, 0x48, + 0x5d, 0xf8, 0x04, 0x4b, 0x70, 0x47, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, + 0x2d, 0xe9, 0xf0, 0x41, 0x0e, 0x46, 0x88, 0xb0, 0x17, 0x46, 0x05, 0x46, + 0x00, 0x28, 0x52, 0xd0, 0x03, 0x68, 0x00, 0x2b, 0x4f, 0xd0, 0x82, 0x68, + 0x00, 0x2a, 0x4c, 0xd0, 0x9b, 0x79, 0xbb, 0x42, 0x13, 0xd2, 0xfd, 0xf7, + 0x69, 0xfb, 0x04, 0x46, 0x88, 0xbb, 0x3a, 0x46, 0x31, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0x86, 0xfe, 0x04, 0x46, 0x50, 0xbb, 0x69, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0x30, 0xff, 0x04, 0x46, 0x20, 0xbb, 0x2b, 0x68, 0x6e, 0x46, + 0x5f, 0x79, 0x2b, 0x68, 0x36, 0x21, 0xd5, 0xf8, 0x08, 0x80, 0x01, 0x3e, + 0x9a, 0x79, 0x40, 0x46, 0x47, 0x44, 0x08, 0xeb, 0x02, 0x04, 0x0a, 0xf0, + 0xdd, 0xfc, 0x2b, 0x68, 0x5c, 0x21, 0x20, 0x46, 0x9a, 0x79, 0x0a, 0xf0, + 0xd7, 0xfc, 0x43, 0x46, 0x60, 0x1e, 0x9f, 0x42, 0x13, 0xd1, 0x28, 0x46, + 0xfd, 0xf7, 0x3e, 0xfb, 0x04, 0x46, 0x30, 0xb9, 0x2b, 0x68, 0x41, 0x46, + 0x28, 0x46, 0x9a, 0x79, 0xff, 0xf7, 0x5a, 0xfe, 0x04, 0x46, 0x20, 0x21, + 0x68, 0x46, 0xff, 0xf7, 0x9b, 0xfa, 0x20, 0x46, 0x08, 0xb0, 0xbd, 0xe8, + 0xf0, 0x81, 0x16, 0xf8, 0x01, 0x1f, 0x1a, 0x78, 0x4a, 0x40, 0x03, 0xf8, + 0x01, 0x2b, 0x10, 0xf8, 0x01, 0x2f, 0x31, 0x78, 0x4a, 0x40, 0x02, 0x70, + 0xdd, 0xe7, 0x01, 0x4c, 0xed, 0xe7, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, + 0x10, 0xb5, 0x04, 0x46, 0xf0, 0xb1, 0x03, 0x68, 0xe3, 0xb1, 0x40, 0x68, + 0x48, 0xb1, 0x1b, 0x79, 0x05, 0x3b, 0x01, 0x2b, 0x02, 0xd8, 0x6c, 0x21, + 0xff, 0xf7, 0x78, 0xfa, 0x60, 0x68, 0x0a, 0xf0, 0x37, 0xfc, 0xa0, 0x68, + 0x40, 0xb1, 0x23, 0x68, 0x9b, 0x79, 0x59, 0x00, 0x0b, 0xb1, 0xff, 0xf7, + 0x6d, 0xfa, 0xa0, 0x68, 0x0a, 0xf0, 0x2c, 0xfc, 0x20, 0x46, 0x0c, 0x21, + 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x64, 0xba, 0x10, 0xbd, 0x2d, 0xe9, + 0xf0, 0x47, 0x05, 0x68, 0x8a, 0xb0, 0x82, 0x46, 0x0e, 0x46, 0x17, 0x46, + 0x05, 0xb1, 0x6d, 0x79, 0x76, 0xb3, 0x00, 0x2f, 0x14, 0xbf, 0x4f, 0xf0, + 0x02, 0x08, 0x4f, 0xf0, 0x01, 0x08, 0x00, 0x23, 0x0a, 0xf1, 0x0c, 0x09, + 0x8d, 0xf8, 0x04, 0x30, 0x50, 0x46, 0xff, 0xf7, 0x1b, 0xfe, 0x04, 0x46, + 0xb0, 0xb9, 0x2a, 0x46, 0x49, 0x46, 0x50, 0x46, 0xff, 0xf7, 0x4e, 0xff, + 0x04, 0x46, 0x78, 0xb9, 0x01, 0x22, 0x01, 0xa9, 0x50, 0x46, 0xff, 0xf7, + 0x47, 0xff, 0x04, 0x46, 0x40, 0xb9, 0xb8, 0xf1, 0x02, 0x0f, 0x10, 0xd0, + 0x02, 0xa9, 0x50, 0x46, 0xff, 0xf7, 0x14, 0xff, 0x04, 0x46, 0x98, 0xb1, + 0x02, 0xa8, 0x20, 0x21, 0xff, 0xf7, 0x2e, 0xfa, 0x20, 0x46, 0x0a, 0xb0, + 0xbd, 0xe8, 0xf0, 0x87, 0x4f, 0xf0, 0x01, 0x08, 0xd3, 0xe7, 0x3a, 0x46, + 0x31, 0x46, 0x50, 0x46, 0xff, 0xf7, 0x2c, 0xff, 0x04, 0x46, 0x00, 0x28, + 0xe6, 0xd0, 0xeb, 0xe7, 0x2a, 0x46, 0x02, 0xa9, 0x50, 0x46, 0xff, 0xf7, + 0x33, 0xff, 0x04, 0x46, 0x00, 0x28, 0xe3, 0xd1, 0x2a, 0x46, 0x49, 0x46, + 0x50, 0x46, 0xff, 0xf7, 0x1b, 0xff, 0x04, 0x46, 0x00, 0x28, 0xdb, 0xd1, + 0x49, 0x46, 0x50, 0x46, 0xff, 0xf7, 0xea, 0xfe, 0x04, 0x46, 0x00, 0x28, + 0xd4, 0xd1, 0x9d, 0xf8, 0x04, 0x30, 0x01, 0x33, 0xdb, 0xb2, 0x43, 0x45, + 0x8d, 0xf8, 0x04, 0x30, 0xb0, 0xd3, 0xcb, 0xe7, 0x2d, 0xe9, 0xf8, 0x43, + 0x06, 0x68, 0x04, 0x46, 0x0f, 0x46, 0x15, 0x46, 0x06, 0xb1, 0x76, 0x79, + 0xb5, 0xf5, 0x80, 0x6f, 0x3b, 0xd8, 0xe3, 0x6b, 0x63, 0xb9, 0x04, 0xf1, + 0x0c, 0x09, 0xbd, 0xb9, 0x2a, 0x46, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, + 0x86, 0xff, 0x78, 0xb9, 0xe3, 0x6a, 0x01, 0x33, 0xe3, 0x62, 0x0b, 0xe0, + 0x63, 0x6b, 0x01, 0x2b, 0x03, 0xd0, 0xe2, 0x6a, 0xa3, 0x6b, 0x9a, 0x42, + 0xeb, 0xdd, 0x20, 0x46, 0xf1, 0xf7, 0xb9, 0xfb, 0x00, 0x28, 0xe6, 0xd0, + 0xbd, 0xe8, 0xf8, 0x83, 0xae, 0x42, 0x20, 0x46, 0xb0, 0x46, 0x28, 0xbf, + 0xa8, 0x46, 0xff, 0xf7, 0x9f, 0xfd, 0x00, 0x28, 0xf4, 0xd1, 0x32, 0x46, + 0x49, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xd2, 0xfe, 0x00, 0x28, 0xed, 0xd1, + 0x49, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xa2, 0xfe, 0x00, 0x28, 0xe7, 0xd1, + 0x38, 0x46, 0x42, 0x46, 0x49, 0x46, 0x47, 0x44, 0xa5, 0xeb, 0x08, 0x05, + 0x0a, 0xf0, 0xd2, 0xfb, 0xc7, 0xe7, 0x6f, 0xf0, 0x02, 0x00, 0xdb, 0xe7, + 0x00, 0x23, 0x01, 0x22, 0xc0, 0xe9, 0x04, 0x33, 0xc0, 0xe9, 0x00, 0x23, + 0xc0, 0xe9, 0x02, 0x32, 0xc0, 0xe9, 0x06, 0x23, 0x03, 0x62, 0x70, 0x47, + 0x38, 0xb5, 0x00, 0x24, 0x01, 0x25, 0x01, 0x46, 0x04, 0x70, 0x44, 0x62, + 0xc0, 0xe9, 0x01, 0x54, 0xc0, 0xe9, 0x03, 0x45, 0xc0, 0xe9, 0x05, 0x44, + 0xc0, 0xe9, 0x07, 0x54, 0x28, 0x30, 0xff, 0xf7, 0xe3, 0xff, 0xc1, 0xe9, + 0x13, 0x54, 0xc1, 0xe9, 0x15, 0x44, 0xc1, 0xe9, 0x17, 0x44, 0xc1, 0xe9, + 0x19, 0x44, 0xc1, 0xe9, 0x1b, 0x44, 0xc1, 0xe9, 0x1d, 0x44, 0x38, 0xbd, + 0x03, 0x6b, 0x2b, 0xb1, 0xc3, 0x6b, 0x00, 0x2b, 0x0c, 0xbf, 0x02, 0x20, + 0x01, 0x20, 0x70, 0x47, 0x18, 0x46, 0x70, 0x47, 0x02, 0x46, 0x43, 0x68, + 0x30, 0xb5, 0x23, 0xb9, 0x48, 0x68, 0x58, 0xb9, 0x00, 0x2b, 0x38, 0xd1, + 0x31, 0xe0, 0x90, 0x68, 0x00, 0xeb, 0x83, 0x00, 0x50, 0xf8, 0x04, 0x0c, + 0x00, 0x28, 0xf3, 0xd1, 0x01, 0x3b, 0xf0, 0xe7, 0x8c, 0x68, 0x04, 0xeb, + 0x80, 0x05, 0x55, 0xf8, 0x04, 0x5c, 0x25, 0xbb, 0x01, 0x38, 0xea, 0xe7, + 0x83, 0x42, 0x09, 0x68, 0x01, 0xd2, 0x48, 0x42, 0x22, 0xe0, 0x10, 0x68, + 0x00, 0x28, 0x03, 0xdd, 0x00, 0x29, 0x13, 0xda, 0x01, 0x20, 0x1b, 0xe0, + 0x00, 0x29, 0x0f, 0xdd, 0x70, 0xb1, 0x4f, 0xf0, 0xff, 0x30, 0x15, 0xe0, + 0x91, 0x68, 0x51, 0xf8, 0x23, 0x50, 0x54, 0xf8, 0x23, 0x10, 0x8d, 0x42, + 0x0e, 0xd8, 0x03, 0xf1, 0xff, 0x33, 0x02, 0xd2, 0x40, 0x42, 0x09, 0xe0, + 0x01, 0x3b, 0x59, 0x1c, 0xf0, 0xd1, 0x00, 0x20, 0x04, 0xe0, 0x00, 0x2b, + 0xda, 0xd0, 0x83, 0x42, 0xd8, 0xd9, 0x10, 0x68, 0x30, 0xbd, 0x1f, 0xb5, + 0x81, 0xea, 0xe1, 0x73, 0xcd, 0xf8, 0x0c, 0xd0, 0xa3, 0xeb, 0xe1, 0x73, + 0x00, 0x93, 0x4b, 0x1c, 0x4f, 0xf0, 0x01, 0x03, 0x18, 0xbf, 0x01, 0x21, + 0x02, 0x93, 0x01, 0x91, 0x01, 0xa9, 0xff, 0xf7, 0xab, 0xff, 0x05, 0xb0, + 0x5d, 0xf8, 0x04, 0xfb, 0xf8, 0xb5, 0x04, 0x46, 0x08, 0x46, 0x63, 0x68, + 0xb2, 0xeb, 0x83, 0x0f, 0x4f, 0xea, 0x83, 0x05, 0x1c, 0xd9, 0x52, 0x1b, + 0x8e, 0x18, 0x00, 0x21, 0x0a, 0xf0, 0x42, 0xfb, 0x2a, 0x46, 0x30, 0x46, + 0x81, 0x18, 0x00, 0x23, 0x9a, 0x42, 0x13, 0xd1, 0x00, 0x20, 0xf8, 0xbd, + 0x03, 0xf0, 0x03, 0x01, 0x23, 0xf0, 0x03, 0x0c, 0xa7, 0x68, 0xce, 0x00, + 0x57, 0xf8, 0x0c, 0x10, 0xf1, 0x40, 0x11, 0xf0, 0xff, 0x0f, 0x11, 0xd1, + 0x01, 0x33, 0xab, 0x42, 0xf0, 0xd1, 0xe9, 0xe7, 0x13, 0x46, 0xfa, 0xe7, + 0x03, 0xf0, 0x03, 0x00, 0x23, 0xf0, 0x03, 0x06, 0xa7, 0x68, 0x01, 0x33, + 0xc5, 0x00, 0xb8, 0x59, 0xe8, 0x40, 0x01, 0xf8, 0x01, 0x0d, 0xdd, 0xe7, + 0x6f, 0xf0, 0x07, 0x00, 0xdd, 0xe7, 0x00, 0x00, 0x42, 0x2a, 0xf0, 0xb5, + 0x06, 0x46, 0x93, 0xb0, 0x08, 0x46, 0x15, 0x46, 0x26, 0xd8, 0x01, 0xa9, + 0xff, 0xf7, 0xbe, 0xff, 0x04, 0x46, 0xc8, 0xb9, 0x11, 0x49, 0x30, 0x46, + 0xf1, 0xf7, 0xd0, 0xf9, 0x04, 0x46, 0x98, 0xb9, 0x06, 0xf1, 0x0c, 0x07, + 0x20, 0x22, 0x30, 0x46, 0x39, 0x46, 0xff, 0xf7, 0xf1, 0xfd, 0x04, 0x46, + 0x50, 0xb9, 0x20, 0x22, 0x01, 0x21, 0x38, 0x46, 0x0a, 0xf0, 0xf8, 0xfa, + 0x2a, 0x46, 0x01, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x68, 0xfe, 0x04, 0x46, + 0x1d, 0xb1, 0x29, 0x46, 0x01, 0xa8, 0xff, 0xf7, 0xc5, 0xf8, 0x20, 0x46, + 0x13, 0xb0, 0xf0, 0xbd, 0x01, 0x4c, 0xf6, 0xe7, 0x50, 0xd9, 0x01, 0x08, + 0x00, 0xb3, 0xff, 0xff, 0x02, 0x46, 0x40, 0x68, 0x80, 0xb1, 0x43, 0x1e, + 0x92, 0x68, 0x73, 0xb9, 0x52, 0xf8, 0x23, 0x10, 0x00, 0x20, 0x4f, 0xf0, + 0x00, 0x42, 0x11, 0x42, 0x03, 0xd1, 0x01, 0x30, 0x52, 0x08, 0x20, 0x28, + 0xf9, 0xd1, 0x01, 0x33, 0xc0, 0xeb, 0x43, 0x10, 0x70, 0x47, 0x52, 0xf8, + 0x23, 0x10, 0x00, 0x29, 0xec, 0xd1, 0x01, 0x3b, 0xe9, 0xe7, 0x00, 0x00, + 0x38, 0xb5, 0x14, 0x4a, 0x01, 0x25, 0x14, 0x4b, 0x04, 0x46, 0xc2, 0x60, + 0x43, 0x66, 0x08, 0x23, 0x12, 0x4a, 0x83, 0x63, 0x42, 0x62, 0x12, 0x4a, + 0x45, 0x64, 0x42, 0x65, 0x11, 0x4a, 0xc0, 0xe9, 0x01, 0x53, 0xc0, 0xe9, + 0x07, 0x53, 0xc0, 0xe9, 0x13, 0x53, 0xc0, 0xe9, 0x0a, 0x53, 0x0e, 0x4b, + 0xc0, 0xe9, 0x0f, 0x35, 0x0d, 0x4b, 0xc0, 0xe9, 0x0c, 0x25, 0x83, 0x64, + 0x04, 0x30, 0xff, 0xf7, 0xc3, 0xff, 0xa0, 0x65, 0x04, 0xf1, 0x4c, 0x00, + 0xff, 0xf7, 0xbe, 0xff, 0xc4, 0xe9, 0x17, 0x05, 0x00, 0x20, 0x38, 0xbd, + 0xf4, 0xe1, 0x01, 0x08, 0x09, 0x19, 0x01, 0x08, 0x74, 0xe1, 0x01, 0x08, + 0xd4, 0xe1, 0x01, 0x08, 0x94, 0xe1, 0x01, 0x08, 0xb4, 0xe1, 0x01, 0x08, + 0x18, 0x01, 0x00, 0x24, 0xf8, 0xb5, 0x04, 0x46, 0x0e, 0x46, 0x4d, 0x09, + 0x01, 0xf0, 0x1f, 0x07, 0xff, 0xf7, 0xa4, 0xff, 0x63, 0x68, 0x30, 0x44, + 0xb0, 0xeb, 0x43, 0x1f, 0x05, 0xd8, 0x1f, 0x2e, 0x0f, 0xd8, 0x00, 0x2f, + 0x3b, 0xd1, 0x00, 0x20, 0x0a, 0xe0, 0x10, 0xf0, 0x1f, 0x01, 0x18, 0xbf, + 0x01, 0x21, 0x01, 0xeb, 0x50, 0x11, 0x20, 0x46, 0xff, 0xf7, 0xc4, 0xfc, + 0x00, 0x28, 0xee, 0xd0, 0xf8, 0xbd, 0x63, 0x68, 0x6f, 0xf0, 0x03, 0x00, + 0x9a, 0x00, 0x68, 0x43, 0x19, 0x46, 0xa9, 0x42, 0xa2, 0xf1, 0x04, 0x02, + 0x0b, 0xd8, 0xab, 0x42, 0x4f, 0xf0, 0x00, 0x02, 0x28, 0xbf, 0x2b, 0x46, + 0x9b, 0x00, 0x04, 0x3b, 0x19, 0x1d, 0xdc, 0xd0, 0xa1, 0x68, 0xca, 0x50, + 0xf9, 0xe7, 0xa6, 0x68, 0x01, 0x39, 0x06, 0xeb, 0x02, 0x0c, 0x5c, 0xf8, + 0x00, 0xc0, 0x46, 0xf8, 0x02, 0xc0, 0xe6, 0xe7, 0xa0, 0x68, 0x50, 0xf8, + 0x25, 0x10, 0x01, 0xfa, 0x07, 0xf3, 0x13, 0x43, 0x21, 0xfa, 0x06, 0xf2, + 0x40, 0xf8, 0x25, 0x30, 0x01, 0x35, 0x63, 0x68, 0xab, 0x42, 0xf1, 0xd8, + 0xc3, 0xe7, 0x00, 0x22, 0xc7, 0xf1, 0x20, 0x06, 0xf7, 0xe7, 0x43, 0x68, + 0xb1, 0xeb, 0x43, 0x1f, 0x3f, 0xbf, 0x4a, 0x09, 0x83, 0x68, 0x01, 0xf0, + 0x1f, 0x01, 0x53, 0xf8, 0x22, 0x00, 0x3a, 0xbf, 0x20, 0xfa, 0x01, 0xf1, + 0x01, 0xf0, 0x01, 0x00, 0x00, 0x20, 0x70, 0x47, 0xf8, 0xb5, 0x07, 0x46, + 0x0d, 0x46, 0xff, 0xf7, 0x77, 0xfe, 0x02, 0x28, 0x06, 0x46, 0x1d, 0xd1, + 0x00, 0x21, 0x28, 0x46, 0xff, 0xf7, 0xe3, 0xff, 0x60, 0xbb, 0x01, 0x21, + 0x28, 0x46, 0xff, 0xf7, 0xde, 0xff, 0x04, 0x46, 0x30, 0xbb, 0x28, 0x46, + 0xff, 0xf7, 0x34, 0xff, 0xfb, 0x6d, 0x01, 0x38, 0x98, 0x42, 0x1f, 0xd1, + 0xfe, 0x28, 0x07, 0xd1, 0x31, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xcf, 0xff, + 0x0d, 0x4b, 0x04, 0x1e, 0x18, 0xbf, 0x1c, 0x46, 0x20, 0x46, 0xf8, 0xbd, + 0x01, 0x28, 0x0f, 0xd1, 0x01, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x9d, 0xfe, + 0x00, 0x28, 0x0b, 0xdb, 0x07, 0xf1, 0x4c, 0x01, 0x28, 0x46, 0xff, 0xf7, + 0x53, 0xfe, 0x00, 0x28, 0x03, 0x4c, 0xb8, 0xbf, 0x00, 0x24, 0xeb, 0xe7, + 0x02, 0x4c, 0xe9, 0xe7, 0x00, 0x4c, 0xe7, 0xe7, 0x80, 0xb3, 0xff, 0xff, + 0x80, 0xb0, 0xff, 0xff, 0x70, 0xb5, 0x0e, 0x46, 0x01, 0x21, 0x04, 0x46, + 0xff, 0xf7, 0x38, 0xfc, 0x05, 0x46, 0x48, 0xb9, 0x62, 0x68, 0x01, 0x46, + 0xa0, 0x68, 0x92, 0x00, 0x0a, 0xf0, 0xe0, 0xf9, 0xa3, 0x68, 0x1e, 0x60, + 0x01, 0x23, 0x23, 0x60, 0x28, 0x46, 0x70, 0xbd, 0x10, 0xb5, 0x01, 0x21, + 0x04, 0x46, 0xff, 0xf7, 0xe7, 0xff, 0x60, 0xb9, 0x01, 0x21, 0x04, 0xf1, + 0x0c, 0x00, 0xff, 0xf7, 0xe1, 0xff, 0x30, 0xb9, 0x01, 0x46, 0x04, 0xf1, + 0x18, 0x00, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xd9, 0xbf, 0x10, 0xbd, + 0xf0, 0xb4, 0x43, 0x68, 0x4e, 0x09, 0x01, 0xf0, 0x1f, 0x04, 0xb3, 0x42, + 0x01, 0xd3, 0x04, 0xd1, 0x5c, 0xb3, 0x00, 0x21, 0xf0, 0xbc, 0xff, 0xf7, + 0xcb, 0xbf, 0x1f, 0x29, 0x27, 0xd8, 0x04, 0xbb, 0x00, 0x20, 0xf0, 0xbc, + 0x70, 0x47, 0x82, 0x68, 0x57, 0x59, 0x04, 0x35, 0x42, 0xf8, 0x21, 0x70, + 0x01, 0x31, 0x9a, 0x1b, 0x8a, 0x42, 0xf6, 0xd8, 0x00, 0x21, 0x93, 0x42, + 0xef, 0xd9, 0x85, 0x68, 0x45, 0xf8, 0x22, 0x10, 0x01, 0x32, 0xf8, 0xe7, + 0x86, 0x68, 0x56, 0xf8, 0x23, 0x50, 0x25, 0xfa, 0x04, 0xf2, 0x0a, 0x43, + 0x05, 0xfa, 0x07, 0xf1, 0x46, 0xf8, 0x23, 0x20, 0x01, 0x3b, 0xf3, 0xd2, + 0xde, 0xe7, 0x00, 0x21, 0xc4, 0xf1, 0x20, 0x07, 0xf8, 0xe7, 0x1f, 0x29, + 0xd8, 0xd9, 0xb5, 0x00, 0x00, 0x21, 0xde, 0xe7, 0x88, 0x42, 0xf8, 0xb5, + 0x06, 0x46, 0x0d, 0x46, 0x14, 0x46, 0x01, 0xd1, 0x00, 0x20, 0xf8, 0xbd, + 0x49, 0x68, 0xff, 0xf7, 0xd1, 0xfb, 0x00, 0x28, 0xf9, 0xd1, 0x71, 0x68, + 0x28, 0x46, 0xff, 0xf7, 0xcb, 0xfb, 0x00, 0x28, 0xf3, 0xd1, 0x62, 0x42, + 0x31, 0x68, 0x22, 0x43, 0x2c, 0x68, 0xc2, 0xf3, 0xc0, 0x12, 0xc2, 0xf1, + 0x01, 0x03, 0x03, 0xfb, 0x01, 0xf7, 0x51, 0x43, 0x04, 0xfb, 0x02, 0x74, + 0x34, 0x60, 0x2c, 0x68, 0x04, 0xfb, 0x03, 0x11, 0x29, 0x60, 0x71, 0x68, + 0x88, 0x42, 0xdd, 0xd2, 0xd6, 0xf8, 0x08, 0xc0, 0xaf, 0x68, 0x5c, 0xf8, + 0x20, 0x10, 0x57, 0xf8, 0x20, 0x40, 0x03, 0xfb, 0x01, 0xfe, 0x51, 0x43, + 0x04, 0xfb, 0x02, 0xe4, 0x4c, 0xf8, 0x20, 0x40, 0x57, 0xf8, 0x20, 0x40, + 0x04, 0xfb, 0x03, 0x11, 0x47, 0xf8, 0x20, 0x10, 0x01, 0x30, 0xe6, 0xe7, + 0x2d, 0xe9, 0xf0, 0x41, 0x0d, 0x46, 0x49, 0x68, 0x06, 0x46, 0x14, 0x46, + 0xff, 0xf7, 0x96, 0xfb, 0xb8, 0xb9, 0x62, 0x42, 0x29, 0x68, 0x33, 0x68, + 0x22, 0x43, 0xd5, 0xf8, 0x04, 0xe0, 0xd5, 0xf8, 0x08, 0x80, 0xc2, 0xf3, + 0xc0, 0x12, 0x51, 0x43, 0xc2, 0xf1, 0x01, 0x0c, 0x03, 0xfb, 0x0c, 0x13, + 0xb1, 0x68, 0x33, 0x60, 0x03, 0x46, 0x9e, 0x45, 0x05, 0xd1, 0x6b, 0x68, + 0x72, 0x68, 0x9a, 0x42, 0x0c, 0xd8, 0xbd, 0xe8, 0xf0, 0x81, 0x58, 0xf8, + 0x23, 0x70, 0x51, 0xf8, 0x23, 0x40, 0x57, 0x43, 0x04, 0xfb, 0x0c, 0x74, + 0x41, 0xf8, 0x23, 0x40, 0x01, 0x33, 0xec, 0xe7, 0x51, 0xf8, 0x23, 0x20, + 0x0c, 0xfb, 0x02, 0xf2, 0x41, 0xf8, 0x23, 0x20, 0x01, 0x33, 0xe7, 0xe7, + 0x10, 0xb5, 0x04, 0x46, 0x70, 0xb1, 0x80, 0x68, 0x38, 0xb1, 0x61, 0x68, + 0x89, 0x00, 0x01, 0xd0, 0xfe, 0xf7, 0xe6, 0xfe, 0xa0, 0x68, 0x0a, 0xf0, + 0xa5, 0xf8, 0x00, 0x23, 0x01, 0x22, 0xa3, 0x60, 0xc4, 0xe9, 0x00, 0x23, + 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xe9, 0xff, 0x04, 0xf1, + 0x0c, 0x00, 0xff, 0xf7, 0xe5, 0xff, 0x04, 0xf1, 0x18, 0x00, 0xbd, 0xe8, + 0x10, 0x40, 0xff, 0xf7, 0xdf, 0xbf, 0x08, 0xb1, 0xff, 0xf7, 0xef, 0xbf, + 0x70, 0x47, 0x70, 0xb5, 0x04, 0x46, 0x60, 0xb3, 0x03, 0x6e, 0x01, 0x2b, + 0x12, 0xd0, 0x04, 0x30, 0xff, 0xf7, 0xd2, 0xff, 0x04, 0xf1, 0x10, 0x00, + 0xff, 0xf7, 0xce, 0xff, 0x04, 0xf1, 0x1c, 0x00, 0xff, 0xf7, 0xca, 0xff, + 0x04, 0xf1, 0x28, 0x00, 0xff, 0xf7, 0xe7, 0xff, 0x04, 0xf1, 0x4c, 0x00, + 0xff, 0xf7, 0xc2, 0xff, 0x63, 0x6f, 0x8b, 0xb9, 0x20, 0x46, 0x7c, 0x21, + 0xbd, 0xe8, 0x70, 0x40, 0xfe, 0xf7, 0xaa, 0xbe, 0x06, 0xfb, 0x05, 0x00, + 0x01, 0x35, 0xff, 0xf7, 0xd6, 0xff, 0xd4, 0xe9, 0x1d, 0x03, 0xab, 0x42, + 0xf6, 0xd8, 0x0a, 0xf0, 0x61, 0xf8, 0xed, 0xe7, 0x00, 0x25, 0x24, 0x26, + 0xf5, 0xe7, 0x70, 0xbd, 0x2d, 0xe9, 0xf8, 0x43, 0x11, 0xf0, 0x03, 0x06, + 0x99, 0x46, 0x43, 0x68, 0x05, 0x46, 0x18, 0xbf, 0x01, 0x26, 0x0f, 0x46, + 0x90, 0x46, 0x06, 0xeb, 0x91, 0x06, 0xb3, 0x42, 0x08, 0xd1, 0x00, 0x21, + 0x28, 0x46, 0xff, 0xf7, 0xc1, 0xfe, 0x04, 0x46, 0x88, 0xb1, 0x20, 0x46, + 0xbd, 0xe8, 0xf8, 0x83, 0xff, 0xf7, 0x90, 0xff, 0x00, 0x23, 0x01, 0x22, + 0x31, 0x46, 0x28, 0x46, 0xab, 0x60, 0xc5, 0xe9, 0x00, 0x23, 0xff, 0xf7, + 0xef, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xe8, 0xd0, 0xed, 0xe7, 0xc7, 0xeb, + 0x86, 0x03, 0xa9, 0x68, 0x3a, 0x46, 0x48, 0x46, 0x19, 0x44, 0xc0, 0x47, + 0x04, 0x46, 0x00, 0x28, 0xe3, 0xd1, 0x31, 0x46, 0xa8, 0x68, 0xfd, 0xf7, + 0x9d, 0xf8, 0xde, 0xe7, 0x2d, 0xe9, 0xf0, 0x41, 0x12, 0xf0, 0x03, 0x06, + 0x43, 0x68, 0x04, 0x46, 0x88, 0x46, 0x18, 0xbf, 0x01, 0x26, 0x17, 0x46, + 0x06, 0xeb, 0x92, 0x06, 0xb3, 0x42, 0x08, 0xd1, 0x00, 0x21, 0x20, 0x46, + 0xff, 0xf7, 0x8c, 0xfe, 0x05, 0x46, 0x88, 0xb1, 0x28, 0x46, 0xbd, 0xe8, + 0xf0, 0x81, 0xff, 0xf7, 0x5b, 0xff, 0x00, 0x23, 0x01, 0x22, 0x31, 0x46, + 0x20, 0x46, 0xa3, 0x60, 0xc4, 0xe9, 0x00, 0x23, 0xff, 0xf7, 0xba, 0xfa, + 0x05, 0x46, 0x00, 0x28, 0xe8, 0xd0, 0xed, 0xe7, 0xb8, 0xf1, 0x00, 0x0f, + 0xea, 0xd0, 0xa3, 0x68, 0xc7, 0xeb, 0x86, 0x00, 0x41, 0x46, 0x3a, 0x46, + 0x18, 0x44, 0x0a, 0xf0, 0x4d, 0xf8, 0x31, 0x46, 0xa0, 0x68, 0xfd, 0xf7, + 0x67, 0xf8, 0xdd, 0xe7, 0x2d, 0xe9, 0xf8, 0x43, 0x81, 0x46, 0x0d, 0x46, + 0x90, 0x46, 0x1e, 0x46, 0x1b, 0xb9, 0x4d, 0x4c, 0x20, 0x46, 0xbd, 0xe8, + 0xf8, 0x83, 0x04, 0x30, 0xff, 0xf7, 0x64, 0xfd, 0xc4, 0x1d, 0x48, 0x46, + 0xff, 0xf7, 0x92, 0xfc, 0x02, 0x28, 0x4f, 0xea, 0xd4, 0x07, 0x65, 0xd1, + 0xbe, 0x42, 0xee, 0xd1, 0x16, 0xf0, 0x03, 0x01, 0x6b, 0x68, 0x18, 0xbf, + 0x01, 0x21, 0x01, 0xeb, 0x54, 0x14, 0x9c, 0x42, 0x4a, 0xd1, 0x00, 0x21, + 0x28, 0x46, 0xff, 0xf7, 0x43, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xdf, 0xd1, + 0xa9, 0x68, 0xe2, 0x00, 0x18, 0xf8, 0x04, 0x30, 0x24, 0xf0, 0x03, 0x00, + 0x01, 0x34, 0x02, 0xf0, 0x18, 0x02, 0xa7, 0x42, 0x03, 0xfa, 0x02, 0xf2, + 0x0b, 0x58, 0x43, 0xea, 0x02, 0x03, 0x0b, 0x50, 0xef, 0xd8, 0x05, 0xf1, + 0x0c, 0x00, 0xff, 0xf7, 0x01, 0xff, 0x99, 0xf8, 0x00, 0x30, 0x09, 0x2b, + 0x12, 0xd1, 0xfb, 0x00, 0x6a, 0x68, 0x01, 0x3b, 0xb3, 0xeb, 0x42, 0x1f, + 0x0c, 0xd2, 0x58, 0x09, 0xa9, 0x68, 0x01, 0x22, 0x03, 0xf0, 0x1f, 0x03, + 0x02, 0xfa, 0x03, 0xf3, 0x51, 0xf8, 0x20, 0x20, 0x22, 0xea, 0x03, 0x02, + 0x41, 0xf8, 0x20, 0x20, 0x01, 0x21, 0x05, 0xf1, 0x18, 0x00, 0xff, 0xf7, + 0x0f, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xab, 0xd1, 0x48, 0x46, 0xff, 0xf7, + 0x45, 0xfc, 0x01, 0x28, 0x81, 0x46, 0xa5, 0xd1, 0x98, 0xf8, 0x00, 0x30, + 0xc3, 0xb9, 0x01, 0x2e, 0x9f, 0xd1, 0x28, 0x46, 0xbd, 0xe8, 0xf8, 0x43, + 0xff, 0xf7, 0x10, 0xbe, 0x28, 0x46, 0xff, 0xf7, 0xcf, 0xfe, 0x00, 0x23, + 0x01, 0x22, 0x21, 0x46, 0x28, 0x46, 0xab, 0x60, 0xc5, 0xe9, 0x00, 0x23, + 0xff, 0xf7, 0x2e, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xa5, 0xd0, 0x8b, 0xe7, + 0x13, 0x4c, 0xdd, 0xe7, 0x04, 0x2b, 0x1f, 0xd1, 0x7b, 0x00, 0x01, 0x33, + 0xb3, 0x42, 0x82, 0xd1, 0x3a, 0x46, 0x08, 0xf1, 0x01, 0x01, 0x28, 0x46, + 0xff, 0xf7, 0x40, 0xff, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x7a, 0xaf, + 0x79, 0x1c, 0x3a, 0x46, 0x05, 0xf1, 0x0c, 0x00, 0x41, 0x44, 0xff, 0xf7, + 0x35, 0xff, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x6f, 0xaf, 0x49, 0x46, + 0x05, 0xf1, 0x18, 0x00, 0xbd, 0xe8, 0xf8, 0x43, 0xff, 0xf7, 0xc8, 0xbd, + 0x01, 0x4c, 0x65, 0xe7, 0x80, 0xb0, 0xff, 0xff, 0x80, 0xb1, 0xff, 0xff, + 0x88, 0x42, 0x70, 0xb5, 0x05, 0x46, 0x0e, 0x46, 0x03, 0xd0, 0x4c, 0x68, + 0x3c, 0xb9, 0xff, 0xf7, 0x8f, 0xfe, 0x00, 0x20, 0x11, 0xe0, 0xb3, 0x68, + 0x53, 0xf8, 0x24, 0x30, 0x13, 0xb9, 0x01, 0x3c, 0x00, 0x2c, 0xf8, 0xd1, + 0x01, 0x34, 0x6a, 0x68, 0x33, 0x68, 0xa2, 0x42, 0x2b, 0x60, 0x05, 0xd2, + 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xe4, 0xf9, 0x40, 0xb1, 0x70, 0xbd, + 0x12, 0x1b, 0xa8, 0x68, 0x00, 0x21, 0x92, 0x00, 0x00, 0xeb, 0x84, 0x00, + 0x09, 0xf0, 0x8a, 0xff, 0xa2, 0x00, 0xb1, 0x68, 0xa8, 0x68, 0x09, 0xf0, + 0x77, 0xff, 0xdc, 0xe7, 0x38, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0xff, 0xf7, + 0xcf, 0xff, 0x70, 0xb9, 0x05, 0xf1, 0x0c, 0x01, 0x04, 0xf1, 0x0c, 0x00, + 0xff, 0xf7, 0xc8, 0xff, 0x38, 0xb9, 0x05, 0xf1, 0x18, 0x01, 0x04, 0xf1, + 0x18, 0x00, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0xbf, 0xbf, 0x38, 0xbd, + 0x2d, 0xe9, 0xf0, 0x4f, 0x00, 0x23, 0x89, 0xb0, 0x17, 0x46, 0x88, 0x42, + 0x4f, 0xf0, 0x01, 0x02, 0x81, 0x46, 0x88, 0x46, 0x07, 0x93, 0x04, 0x93, + 0xcd, 0xe9, 0x05, 0x23, 0xcd, 0xe9, 0x02, 0x23, 0x06, 0xd1, 0x05, 0xa8, + 0xff, 0xf7, 0xaa, 0xff, 0x06, 0x46, 0x90, 0xbb, 0x0d, 0xf1, 0x14, 0x08, + 0xb9, 0x45, 0x06, 0xd1, 0x49, 0x46, 0x02, 0xa8, 0xff, 0xf7, 0xa0, 0xff, + 0x06, 0x46, 0x40, 0xbb, 0x02, 0xaf, 0xd8, 0xf8, 0x04, 0xa0, 0xba, 0xf1, + 0x00, 0x0f, 0x2c, 0xd1, 0x7c, 0x68, 0xac, 0xbb, 0x0a, 0xeb, 0x04, 0x01, + 0x48, 0x46, 0xff, 0xf7, 0x91, 0xf9, 0x06, 0x46, 0xc8, 0xb9, 0x01, 0x46, + 0x48, 0x46, 0xff, 0xf7, 0x4d, 0xfd, 0x06, 0x46, 0x98, 0xb9, 0x6f, 0xf0, + 0x0f, 0x03, 0x4f, 0xea, 0x1a, 0x1b, 0x04, 0xf1, 0xff, 0x3c, 0x03, 0xfb, + 0x0b, 0xab, 0xab, 0xf1, 0x08, 0x03, 0x01, 0x93, 0xbc, 0xf1, 0xff, 0x3f, + 0x23, 0xd1, 0xd8, 0xf8, 0x00, 0x20, 0x3b, 0x68, 0x53, 0x43, 0xc9, 0xf8, + 0x00, 0x30, 0x02, 0xa8, 0xff, 0xf7, 0x0a, 0xfe, 0x05, 0xa8, 0xff, 0xf7, + 0x07, 0xfe, 0x30, 0x46, 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xd8, 0xf8, + 0x08, 0x30, 0x03, 0xeb, 0x8a, 0x03, 0x53, 0xf8, 0x04, 0x3c, 0x00, 0x2b, + 0xca, 0xd1, 0x0a, 0xf1, 0xff, 0x3a, 0xc4, 0xe7, 0xbb, 0x68, 0x03, 0xeb, + 0x84, 0x03, 0x53, 0xf8, 0x04, 0x3c, 0x00, 0x2b, 0xc2, 0xd1, 0x01, 0x3c, + 0xbf, 0xe7, 0xba, 0x68, 0x00, 0x24, 0xd9, 0xf8, 0x08, 0x30, 0x52, 0xf8, + 0x2c, 0xe0, 0x52, 0x46, 0xd8, 0xf8, 0x08, 0x50, 0x03, 0xeb, 0x8c, 0x03, + 0x0f, 0x2a, 0x48, 0xd8, 0xbb, 0xf1, 0x07, 0x0f, 0x40, 0xf2, 0xb7, 0x80, + 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, + 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, + 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, + 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, + 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, + 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, + 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, + 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, + 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, + 0x43, 0xf8, 0x04, 0x1b, 0x01, 0x9a, 0x00, 0x2a, 0x7d, 0xd1, 0x1a, 0x68, + 0x14, 0x19, 0x43, 0xf8, 0x04, 0x4b, 0x4f, 0xf0, 0x01, 0x04, 0xf8, 0xd2, + 0x0c, 0xf1, 0xff, 0x3c, 0x82, 0xe7, 0x10, 0x3a, 0x55, 0xf8, 0x04, 0x0b, + 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, + 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, + 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, + 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, + 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, + 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, + 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, + 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, + 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, + 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, + 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, + 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, + 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, + 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, + 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, + 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, + 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, + 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, + 0x43, 0xf8, 0x04, 0x1b, 0x42, 0xe7, 0x5a, 0x46, 0x7f, 0xe7, 0x01, 0x3a, + 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, + 0x04, 0x1b, 0x76, 0xe7, 0x1f, 0xb5, 0x01, 0x23, 0x00, 0x92, 0x01, 0xaa, + 0xcd, 0xf8, 0x0c, 0xd0, 0xcd, 0xe9, 0x01, 0x33, 0xff, 0xf7, 0xbc, 0xfe, + 0x05, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x2d, 0xe9, 0xff, 0x41, 0x16, 0x46, + 0x00, 0x23, 0x01, 0x22, 0x05, 0x46, 0xb0, 0x42, 0x0f, 0x46, 0x03, 0x93, + 0xcd, 0xe9, 0x01, 0x23, 0x06, 0xd1, 0x01, 0x46, 0x01, 0xa8, 0xff, 0xf7, + 0x67, 0xfe, 0x04, 0x46, 0x20, 0xbb, 0x01, 0xae, 0xbd, 0x42, 0x1a, 0xd1, + 0x01, 0x23, 0x2b, 0x60, 0xd6, 0xe9, 0x01, 0x37, 0x1b, 0xbb, 0xaa, 0x68, + 0x00, 0x24, 0x16, 0x1f, 0x20, 0x46, 0x98, 0x42, 0x25, 0xd1, 0xac, 0xb1, + 0x4f, 0xf0, 0xff, 0x30, 0x69, 0x68, 0x99, 0x42, 0x3a, 0xd9, 0x52, 0xf8, + 0x23, 0x10, 0x99, 0xb3, 0x52, 0xf8, 0x23, 0x10, 0x00, 0x24, 0x01, 0x39, + 0x42, 0xf8, 0x23, 0x10, 0x06, 0xe0, 0x39, 0x46, 0x28, 0x46, 0xff, 0xf7, + 0x43, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xdd, 0xd0, 0x01, 0xa8, 0xff, 0xf7, + 0xd5, 0xfc, 0x20, 0x46, 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x07, 0xeb, + 0x83, 0x02, 0x52, 0xf8, 0x04, 0x2c, 0x00, 0x2a, 0xd5, 0xd1, 0x01, 0x3b, + 0xd2, 0xe7, 0x56, 0xf8, 0x04, 0xef, 0xae, 0xeb, 0x04, 0x01, 0x31, 0x60, + 0x57, 0xf8, 0x20, 0xc0, 0x01, 0x30, 0x61, 0x45, 0xa1, 0xeb, 0x0c, 0x01, + 0x2c, 0xbf, 0x4f, 0xf0, 0x00, 0x08, 0x4f, 0xf0, 0x01, 0x08, 0x31, 0x60, + 0xa6, 0x45, 0x2c, 0xbf, 0x44, 0x46, 0x08, 0xf1, 0x01, 0x04, 0xc0, 0xe7, + 0x42, 0xf8, 0x23, 0x00, 0x01, 0x33, 0xc1, 0xe7, 0xc6, 0xd1, 0x6f, 0xf0, + 0x09, 0x04, 0xd1, 0xe7, 0x30, 0xb5, 0x8f, 0xb0, 0x09, 0x23, 0x01, 0x22, + 0x00, 0x21, 0x04, 0x46, 0x05, 0xa8, 0x8d, 0xf8, 0x03, 0x10, 0x04, 0x90, + 0xcd, 0xe9, 0x02, 0x23, 0x24, 0x22, 0x09, 0xf0, 0xb3, 0xfd, 0x10, 0x21, + 0x20, 0x46, 0xfe, 0xf7, 0xff, 0xff, 0x05, 0x46, 0x00, 0x28, 0x40, 0xf0, + 0x29, 0x82, 0xa3, 0x68, 0x01, 0xa8, 0x1a, 0x68, 0x19, 0x6a, 0x01, 0x92, + 0x0d, 0xf1, 0x03, 0x02, 0xfc, 0xf7, 0x81, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, 0x7a, 0xfc, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0x68, 0xfc, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, + 0x61, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, + 0xfc, 0xf7, 0x5a, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0x99, 0x6b, 0xfc, 0xf7, 0x53, 0xfc, 0x01, 0x9a, 0xa3, 0x68, 0x1a, 0x60, + 0x0d, 0xf1, 0x03, 0x02, 0x9d, 0xf9, 0x03, 0x10, 0x5b, 0x68, 0x00, 0x29, + 0x8d, 0xf8, 0x03, 0x50, 0x01, 0x93, 0x80, 0xf2, 0xf2, 0x81, 0x49, 0x42, + 0x01, 0xa8, 0xfc, 0xf7, 0x41, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, + 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, 0x45, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6a, 0xfc, 0xf7, 0x3e, 0xfc, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, 0x2c, 0xfc, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, + 0x25, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, + 0xfc, 0xf7, 0x1e, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0xd9, 0x6b, 0xfc, 0xf7, 0x17, 0xfc, 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, + 0x03, 0x10, 0x5a, 0x60, 0x0d, 0xf1, 0x03, 0x02, 0x9b, 0x68, 0x01, 0x93, + 0x00, 0x23, 0x99, 0x42, 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, 0xb9, 0x81, + 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, 0x04, 0xfc, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6a, 0xfc, 0xf7, 0x08, 0xfc, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0x01, 0xfc, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, + 0xef, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, + 0xfc, 0xf7, 0xe8, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0xd9, 0x6b, 0xfc, 0xf7, 0xe1, 0xfb, 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, + 0x03, 0x10, 0x9a, 0x60, 0x0d, 0xf1, 0x03, 0x02, 0xdb, 0x68, 0x01, 0x93, + 0x00, 0x23, 0x99, 0x42, 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, 0x87, 0x81, + 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, 0xce, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0xd2, 0xfb, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0xcb, 0xfb, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, + 0xc4, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, + 0xfc, 0xf7, 0xbd, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0x59, 0x6b, 0xfc, 0xf7, 0xb6, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, + 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, 0xa4, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6a, 0xfc, 0xf7, 0x9d, 0xfb, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, 0x96, 0xfb, + 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, 0xda, 0x60, 0x0d, 0xf1, + 0x03, 0x02, 0x1b, 0x69, 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, 0x8d, 0xf8, + 0x03, 0x30, 0x80, 0xf2, 0x40, 0x81, 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, + 0x83, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, + 0xfc, 0xf7, 0x87, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0x19, 0x6b, 0xfc, 0xf7, 0x80, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, + 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0x79, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0x72, 0xfb, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0x6b, 0xfb, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, + 0x59, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6a, + 0xfc, 0xf7, 0x52, 0xfb, 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, + 0x1a, 0x61, 0x0d, 0xf1, 0x03, 0x02, 0x5b, 0x69, 0x01, 0x93, 0x00, 0x23, + 0x99, 0x42, 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, 0x00, 0x81, 0x49, 0x42, + 0x01, 0xa8, 0xfc, 0xf7, 0x3f, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, + 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0x43, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0x3c, 0xfb, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0x35, 0xfb, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, + 0x2e, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, + 0xfc, 0xf7, 0x27, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0x99, 0x6a, 0xfc, 0xf7, 0x15, 0xfb, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, + 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0x0e, 0xfb, 0x01, 0x9a, 0xa3, 0x68, + 0x9d, 0xf9, 0x03, 0x10, 0x5a, 0x61, 0x0d, 0xf1, 0x03, 0x02, 0x9b, 0x69, + 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, + 0xc0, 0x80, 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, 0xfb, 0xfa, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0xff, 0xfa, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, + 0xf8, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, + 0xfc, 0xf7, 0xf1, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0xd9, 0x6b, 0xfc, 0xf7, 0xea, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, + 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0xe3, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0xdc, 0xfa, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6a, 0xfc, 0xf7, 0xca, 0xfa, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, + 0xc3, 0xfa, 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, 0x9a, 0x61, + 0x0d, 0xf1, 0x03, 0x02, 0xdb, 0x69, 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, + 0x8d, 0xf8, 0x03, 0x30, 0x79, 0xda, 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, + 0xb1, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, + 0xfc, 0xf7, 0xb5, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0xd9, 0x6b, 0xfc, 0xf7, 0xae, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, + 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, 0xa7, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, + 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6a, 0xfc, 0xf7, 0xa0, 0xfa, 0xa3, 0x68, + 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6a, 0xfc, 0xf7, 0x8e, 0xfa, + 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, + 0x87, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, + 0xfc, 0xf7, 0x80, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, + 0x59, 0x6b, 0xfc, 0xf7, 0x79, 0xfa, 0x01, 0x9b, 0xa1, 0x68, 0x9d, 0xf9, + 0x03, 0x20, 0xcb, 0x61, 0x22, 0xea, 0xe2, 0x73, 0x0b, 0x62, 0x00, 0x23, + 0x01, 0x93, 0x08, 0x23, 0x01, 0x33, 0x60, 0x68, 0x98, 0x42, 0x32, 0xd8, + 0x00, 0x2a, 0x11, 0xda, 0x03, 0x9b, 0x52, 0x42, 0x04, 0x99, 0x20, 0x46, + 0x03, 0xf1, 0x80, 0x43, 0x01, 0x3b, 0x41, 0xf8, 0x23, 0x20, 0x22, 0x46, + 0x02, 0xa9, 0xff, 0xf7, 0x60, 0xfd, 0x05, 0x46, 0x10, 0xb9, 0x4f, 0xf0, + 0xff, 0x33, 0x23, 0x60, 0x28, 0x46, 0x0f, 0xb0, 0x30, 0xbd, 0x01, 0xa8, + 0xfc, 0xf7, 0x5b, 0xfa, 0x0d, 0xe6, 0x01, 0xa8, 0xfc, 0xf7, 0x57, 0xfa, + 0x46, 0xe6, 0x01, 0xa8, 0xfc, 0xf7, 0x53, 0xfa, 0x78, 0xe6, 0x01, 0xa8, + 0xfc, 0xf7, 0x4f, 0xfa, 0xbf, 0xe6, 0x01, 0xa8, 0xfc, 0xf7, 0x4b, 0xfa, + 0xff, 0xe6, 0x01, 0xa8, 0xfc, 0xf7, 0x47, 0xfa, 0x3f, 0xe7, 0x01, 0xa8, + 0xfc, 0xf7, 0x43, 0xfa, 0x85, 0xe7, 0x01, 0x98, 0x41, 0xf8, 0x23, 0x00, + 0xc4, 0xe7, 0x38, 0xb5, 0x0c, 0x46, 0x05, 0x1d, 0x29, 0x46, 0x20, 0x46, + 0xfe, 0xf7, 0xb0, 0xff, 0x00, 0x28, 0x01, 0xda, 0x00, 0x20, 0x06, 0xe0, + 0x2a, 0x46, 0x21, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x28, 0xfd, 0x00, 0x28, + 0xf0, 0xd0, 0x38, 0xbd, 0x90, 0x42, 0x2d, 0xe9, 0xf0, 0x41, 0x07, 0x46, + 0x0d, 0x46, 0x16, 0x46, 0x02, 0xd0, 0x88, 0x42, 0x29, 0xd1, 0x35, 0x46, + 0x01, 0x23, 0x6e, 0x68, 0x3b, 0x60, 0x66, 0xbb, 0x31, 0x46, 0x38, 0x46, + 0xfe, 0xf7, 0x8a, 0xfd, 0x04, 0x46, 0x18, 0xbb, 0xa9, 0x68, 0x05, 0x46, + 0xbb, 0x68, 0x86, 0x42, 0x2a, 0xd1, 0x03, 0xeb, 0x86, 0x03, 0xdd, 0xb1, + 0x7a, 0x68, 0x06, 0xf1, 0x01, 0x08, 0xb2, 0x42, 0x08, 0xd8, 0x41, 0x46, + 0x38, 0x46, 0xfe, 0xf7, 0x77, 0xfd, 0x00, 0x28, 0x2f, 0xd1, 0xbb, 0x68, + 0x03, 0xeb, 0x86, 0x03, 0x1a, 0x68, 0x46, 0x46, 0x55, 0x19, 0x43, 0xf8, + 0x04, 0x5b, 0x2c, 0xbf, 0x01, 0x25, 0x00, 0x25, 0xe7, 0xe7, 0xff, 0xf7, + 0x67, 0xfb, 0x04, 0x46, 0x00, 0x28, 0xd0, 0xd0, 0x20, 0x46, 0xbd, 0xe8, + 0xf0, 0x81, 0xab, 0x68, 0x03, 0xeb, 0x86, 0x03, 0x53, 0xf8, 0x04, 0x3c, + 0x00, 0x2b, 0xcb, 0xd1, 0x01, 0x3e, 0xc8, 0xe7, 0x53, 0xf8, 0x20, 0x20, + 0x12, 0xeb, 0x05, 0x0c, 0x51, 0xf8, 0x20, 0x20, 0x2c, 0xbf, 0x01, 0x25, + 0x00, 0x25, 0x1c, 0xeb, 0x02, 0x02, 0x43, 0xf8, 0x20, 0x20, 0x2c, 0xbf, + 0x01, 0x22, 0x00, 0x22, 0x01, 0x30, 0x15, 0x44, 0xbf, 0xe7, 0x04, 0x46, + 0xde, 0xe7, 0xf8, 0xb5, 0x0d, 0x68, 0x04, 0x46, 0x13, 0x68, 0x0f, 0x46, + 0x16, 0x46, 0x6b, 0x43, 0x00, 0x2b, 0x16, 0xdd, 0x11, 0x46, 0x38, 0x46, + 0xfc, 0xf7, 0xd0, 0xf9, 0x00, 0x28, 0x06, 0xdb, 0x32, 0x46, 0x39, 0x46, + 0x20, 0x46, 0xff, 0xf7, 0xb8, 0xfc, 0x40, 0xb1, 0xf8, 0xbd, 0x3a, 0x46, + 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xb1, 0xfc, 0x00, 0x28, 0xf7, 0xd1, + 0x6d, 0x42, 0x25, 0x60, 0xf4, 0xe7, 0xff, 0xf7, 0x85, 0xff, 0xf0, 0xe7, + 0x7f, 0xb5, 0x00, 0x23, 0x01, 0xf1, 0x0c, 0x05, 0x16, 0x46, 0x01, 0x22, + 0x01, 0x1d, 0x01, 0xa8, 0x03, 0x93, 0xcd, 0xe9, 0x01, 0x23, 0x2a, 0x46, + 0xff, 0xf7, 0xcf, 0xff, 0x04, 0x46, 0x68, 0xb9, 0x01, 0x46, 0x28, 0x46, + 0xfe, 0xf7, 0x57, 0xff, 0x01, 0xa9, 0x00, 0x28, 0x0c, 0xbf, 0x00, 0x22, + 0x06, 0xf0, 0x01, 0x02, 0x28, 0x46, 0xff, 0xf7, 0x65, 0xf9, 0x04, 0x46, + 0x01, 0xa8, 0xff, 0xf7, 0x97, 0xf9, 0x20, 0x46, 0x04, 0xb0, 0x70, 0xbd, + 0x2d, 0xe9, 0xf7, 0x4f, 0x9d, 0xf8, 0x30, 0x80, 0x06, 0x46, 0x0d, 0x46, + 0x1f, 0x46, 0xc8, 0xf3, 0x45, 0x09, 0x02, 0xf1, 0x0c, 0x04, 0x4f, 0xf0, + 0x00, 0x0b, 0x01, 0xf1, 0x0c, 0x0a, 0xbb, 0x45, 0x08, 0xd1, 0x4f, 0xea, + 0xd8, 0x12, 0x29, 0x46, 0x30, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, + 0xff, 0xf7, 0xc2, 0xbf, 0x5f, 0xfa, 0x8b, 0xf2, 0xa4, 0xf1, 0x0c, 0x01, + 0x28, 0x46, 0xa2, 0xeb, 0x09, 0x03, 0x5a, 0x42, 0x5a, 0x41, 0x01, 0x92, + 0xff, 0xf7, 0x38, 0xf9, 0x48, 0xb9, 0x21, 0x46, 0x01, 0x9a, 0x50, 0x46, + 0x0b, 0xf1, 0x01, 0x0b, 0x24, 0x34, 0xff, 0xf7, 0x2f, 0xf9, 0x00, 0x28, + 0xdd, 0xd0, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xf8, 0xb5, 0x0d, 0x68, + 0x04, 0x46, 0x13, 0x68, 0x0f, 0x46, 0x16, 0x46, 0x6b, 0x43, 0x16, 0xd5, + 0x11, 0x46, 0x38, 0x46, 0xfc, 0xf7, 0x56, 0xf9, 0x00, 0x28, 0x06, 0xdb, + 0x32, 0x46, 0x39, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x3e, 0xfc, 0x40, 0xb1, + 0xf8, 0xbd, 0x3a, 0x46, 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x37, 0xfc, + 0x00, 0x28, 0xf7, 0xd1, 0x6d, 0x42, 0x25, 0x60, 0xf4, 0xe7, 0xff, 0xf7, + 0x0b, 0xff, 0xf0, 0xe7, 0x38, 0xb5, 0x0c, 0x46, 0x05, 0x46, 0x11, 0x46, + 0x1a, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xd6, 0xff, 0x28, 0xb9, 0x21, 0x46, + 0x28, 0x46, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0xe8, 0xbe, 0x38, 0xbd, + 0x70, 0xb5, 0x0c, 0x46, 0x06, 0x46, 0x11, 0x46, 0x1a, 0x46, 0x20, 0x46, + 0xff, 0xf7, 0x4b, 0xff, 0x05, 0x46, 0x80, 0xb9, 0x04, 0x36, 0x23, 0x68, + 0x00, 0x2b, 0x0c, 0xda, 0x00, 0x21, 0x20, 0x46, 0xfe, 0xf7, 0xcf, 0xfe, + 0x30, 0xb1, 0x32, 0x46, 0x21, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xb6, 0xff, + 0x00, 0x28, 0xf0, 0xd0, 0x05, 0x46, 0x28, 0x46, 0x70, 0xbd, 0x2d, 0xe9, + 0xf0, 0x4f, 0x06, 0x46, 0x9b, 0xb0, 0x89, 0x46, 0x10, 0x46, 0x00, 0x21, + 0x90, 0x46, 0xfe, 0xf7, 0xba, 0xfe, 0x00, 0x28, 0xc0, 0xf2, 0x9b, 0x81, + 0x05, 0xd1, 0x6f, 0xf0, 0x0b, 0x04, 0x20, 0x46, 0x1b, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x00, 0x23, 0x01, 0x25, 0x41, 0x46, 0x48, 0x46, 0x14, 0x95, + 0xcd, 0xe9, 0x08, 0x53, 0xcd, 0xe9, 0x0a, 0x35, 0xcd, 0xe9, 0x0c, 0x33, + 0xcd, 0xe9, 0x0e, 0x53, 0xcd, 0xe9, 0x10, 0x35, 0xcd, 0xe9, 0x12, 0x33, + 0x03, 0x23, 0x15, 0x93, 0x17, 0xab, 0x16, 0x93, 0xfc, 0xf7, 0xe8, 0xf8, + 0x00, 0x28, 0x17, 0xda, 0x36, 0xb1, 0x49, 0x46, 0x30, 0x46, 0xff, 0xf7, + 0x47, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x46, 0xd1, 0x00, 0x21, 0x30, 0x46, + 0xfe, 0xf7, 0x8b, 0xfe, 0x00, 0x28, 0xc0, 0xf2, 0x5b, 0x81, 0x41, 0x46, + 0x30, 0x46, 0xfe, 0xf7, 0x41, 0xfe, 0x00, 0x28, 0x80, 0xf2, 0x5b, 0x81, + 0x00, 0x24, 0xca, 0xe7, 0x49, 0x46, 0x08, 0xa8, 0xff, 0xf7, 0x30, 0xfa, + 0x04, 0x46, 0x80, 0xbb, 0x41, 0x46, 0x0b, 0xa8, 0xff, 0xf7, 0x2a, 0xfa, + 0x04, 0x46, 0x50, 0xbb, 0xd9, 0xf8, 0x04, 0x10, 0x0e, 0xa8, 0x0b, 0x95, + 0x02, 0x31, 0x08, 0x95, 0xfe, 0xf7, 0x20, 0xfc, 0x04, 0x46, 0x00, 0xbb, + 0x01, 0x46, 0x0e, 0xa8, 0xfe, 0xf7, 0xdc, 0xff, 0x04, 0x46, 0xd0, 0xb9, + 0x02, 0x21, 0x11, 0xa8, 0xfe, 0xf7, 0x14, 0xfc, 0x04, 0x46, 0xa0, 0xb9, + 0x0b, 0xa8, 0xfe, 0xf7, 0xdb, 0xfe, 0x00, 0xf0, 0x1f, 0x00, 0x1f, 0x28, + 0x20, 0xd0, 0xc0, 0xf1, 0x1f, 0x07, 0x08, 0xa8, 0x39, 0x46, 0xfe, 0xf7, + 0x25, 0xff, 0x04, 0x46, 0x28, 0xb9, 0x39, 0x46, 0x0b, 0xa8, 0xfe, 0xf7, + 0x1f, 0xff, 0x04, 0x46, 0x98, 0xb1, 0x08, 0xa8, 0xff, 0xf7, 0x92, 0xf8, + 0x0b, 0xa8, 0xff, 0xf7, 0x8f, 0xf8, 0x0e, 0xa8, 0xff, 0xf7, 0x8c, 0xf8, + 0x11, 0xa8, 0xff, 0xf7, 0x89, 0xf8, 0x0c, 0x21, 0x17, 0xa8, 0xfd, 0xf7, + 0x75, 0xff, 0x00, 0x2c, 0xa6, 0xd0, 0x80, 0xe7, 0x27, 0x46, 0x09, 0x9d, + 0x0b, 0xa8, 0xdd, 0xf8, 0x30, 0xb0, 0xa5, 0xeb, 0x0b, 0x03, 0x4f, 0xea, + 0x43, 0x1a, 0x01, 0x93, 0x51, 0x46, 0xfe, 0xf7, 0xfd, 0xfe, 0x04, 0x46, + 0x00, 0x28, 0xdc, 0xd1, 0x01, 0x9b, 0x9b, 0x00, 0x0b, 0xa9, 0x08, 0xa8, + 0x01, 0x93, 0xfe, 0xf7, 0xdb, 0xfd, 0x00, 0x28, 0x01, 0x9b, 0x36, 0xda, + 0x51, 0x46, 0x0b, 0xa8, 0xfe, 0xf7, 0xb6, 0xff, 0x04, 0x46, 0x00, 0x28, + 0xcb, 0xd1, 0x0b, 0xf1, 0xff, 0x33, 0x05, 0xf1, 0xff, 0x3a, 0x05, 0xf1, + 0x80, 0x45, 0x01, 0x93, 0x9b, 0x00, 0x01, 0x3d, 0x03, 0x93, 0x0b, 0xf1, + 0x80, 0x43, 0xa5, 0xeb, 0x0b, 0x05, 0x02, 0x3b, 0xad, 0x00, 0x9b, 0x00, + 0x07, 0x93, 0x01, 0x9b, 0x53, 0x45, 0x29, 0xd3, 0x00, 0x2e, 0xb4, 0xd0, + 0x39, 0x46, 0x08, 0xa8, 0xfe, 0xf7, 0x98, 0xff, 0x88, 0xb9, 0xd9, 0xf8, + 0x00, 0x30, 0x08, 0xa9, 0x30, 0x46, 0x08, 0x93, 0xff, 0xf7, 0xa6, 0xf9, + 0x01, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xbe, 0x80, 0x30, 0x46, 0xfe, 0xf7, + 0xea, 0xfd, 0x00, 0x28, 0x9f, 0xd1, 0x01, 0x23, 0x33, 0x60, 0x04, 0x46, + 0x9b, 0xe7, 0x10, 0x99, 0x01, 0x93, 0xca, 0x58, 0x01, 0x32, 0xca, 0x50, + 0x08, 0xa9, 0x0b, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x4c, 0xfe, 0x01, 0x9b, + 0x04, 0x46, 0x00, 0x28, 0xb2, 0xd0, 0x8c, 0xe7, 0xdd, 0xf8, 0x28, 0xb0, + 0x4f, 0xea, 0x8a, 0x03, 0x03, 0x9a, 0x04, 0x93, 0x0b, 0xeb, 0x8a, 0x03, + 0x5b, 0xf8, 0x2a, 0x10, 0x06, 0x93, 0x0d, 0x9b, 0x9a, 0x58, 0x04, 0x9b, + 0x91, 0x42, 0xa3, 0xf1, 0x04, 0x03, 0x05, 0x93, 0x10, 0x9b, 0x03, 0xeb, + 0x05, 0x00, 0x02, 0x90, 0x75, 0xd3, 0x4f, 0xf0, 0xff, 0x32, 0x5a, 0x51, + 0xba, 0xf1, 0x01, 0x0f, 0x02, 0x9a, 0x16, 0xbf, 0x06, 0x9b, 0x00, 0x23, + 0x53, 0xf8, 0x08, 0x3c, 0x17, 0x93, 0x05, 0x9b, 0x5b, 0xf8, 0x03, 0x30, + 0x18, 0x93, 0x04, 0x9b, 0x5b, 0xf8, 0x03, 0x30, 0x19, 0x93, 0x02, 0x9b, + 0x1b, 0x68, 0x01, 0x33, 0x13, 0x60, 0x10, 0x9a, 0x00, 0x21, 0x11, 0xa8, + 0x53, 0x59, 0x01, 0x3b, 0x53, 0x51, 0xfe, 0xf7, 0x15, 0xff, 0x00, 0x28, + 0xb5, 0xd1, 0x01, 0x9b, 0x0d, 0x9a, 0x00, 0x2b, 0x66, 0xd0, 0x07, 0x9b, + 0xd1, 0x58, 0x13, 0x9b, 0x19, 0x60, 0x03, 0x99, 0x52, 0x58, 0x11, 0xa9, + 0x5a, 0x60, 0x08, 0x46, 0x10, 0x9b, 0x5a, 0x59, 0xff, 0xf7, 0xbc, 0xfa, + 0x00, 0x28, 0xa2, 0xd1, 0x14, 0xa9, 0x11, 0xa8, 0xfe, 0xf7, 0x42, 0xfd, + 0x00, 0x28, 0xdc, 0xdc, 0x10, 0x9b, 0x0b, 0xa9, 0x11, 0xa8, 0x5a, 0x59, + 0xff, 0xf7, 0xae, 0xfa, 0x00, 0x28, 0x94, 0xd1, 0x4f, 0xea, 0xc5, 0x0b, + 0x11, 0xa8, 0x59, 0x46, 0xfe, 0xf7, 0x4a, 0xfe, 0x00, 0x28, 0x8c, 0xd1, + 0x08, 0xa9, 0x11, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0xe0, 0xfd, 0x01, 0x46, + 0x00, 0x28, 0x3b, 0xd1, 0x08, 0xa8, 0xfe, 0xf7, 0x68, 0xfd, 0x00, 0x28, + 0x19, 0xda, 0x0b, 0xa9, 0x11, 0xa8, 0xff, 0xf7, 0x17, 0xf9, 0x00, 0x28, + 0x7f, 0xf4, 0x79, 0xaf, 0x59, 0x46, 0x11, 0xa8, 0xfe, 0xf7, 0x30, 0xfe, + 0x00, 0x28, 0x7f, 0xf4, 0x72, 0xaf, 0x08, 0xa9, 0x11, 0xaa, 0x08, 0x46, + 0xff, 0xf7, 0x40, 0xfe, 0x00, 0x28, 0x7f, 0xf4, 0x6a, 0xaf, 0x10, 0x9a, + 0x53, 0x59, 0x01, 0x3b, 0x53, 0x51, 0x0a, 0xf1, 0xff, 0x3a, 0x04, 0x3d, + 0x45, 0xe7, 0x05, 0x9b, 0x5b, 0xf8, 0x03, 0x00, 0x7a, 0xb1, 0x00, 0x23, + 0x0a, 0xf0, 0x82, 0xff, 0x0b, 0x46, 0x00, 0x21, 0x02, 0x46, 0x4f, 0xf0, + 0xff, 0x30, 0x99, 0x42, 0x08, 0xbf, 0x90, 0x42, 0x00, 0xd2, 0x02, 0x46, + 0x02, 0x9b, 0x1a, 0x60, 0x78, 0xe7, 0x4f, 0xf0, 0xff, 0x32, 0xf9, 0xe7, + 0x01, 0x99, 0x98, 0xe7, 0x0c, 0x46, 0xe4, 0xe6, 0x42, 0x46, 0x31, 0x46, + 0x30, 0x46, 0xff, 0xf7, 0x15, 0xfe, 0x04, 0x46, 0xed, 0xe6, 0x42, 0x46, + 0x31, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x93, 0xfd, 0x04, 0x46, 0x00, 0x28, + 0x3f, 0xf4, 0x95, 0xae, 0x67, 0xe6, 0x6f, 0xf0, 0x09, 0x04, 0x64, 0xe6, + 0xf8, 0xb5, 0x0c, 0x46, 0x06, 0x46, 0x11, 0x46, 0x1a, 0x46, 0x20, 0x46, + 0xff, 0xf7, 0x08, 0xf9, 0x05, 0x46, 0x50, 0xbb, 0x77, 0x6e, 0x37, 0xb9, + 0x32, 0x1d, 0x21, 0x46, 0x20, 0x46, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, + 0x42, 0xbe, 0x23, 0x68, 0x00, 0x2b, 0x04, 0xda, 0x01, 0x46, 0x20, 0x46, + 0xfe, 0xf7, 0xff, 0xfc, 0x60, 0xbb, 0x20, 0x46, 0xfe, 0xf7, 0x7c, 0xfd, + 0xb3, 0x6d, 0xb0, 0xeb, 0x43, 0x0f, 0x25, 0xd8, 0x20, 0x46, 0xb8, 0x47, + 0x05, 0x46, 0x70, 0xb9, 0x04, 0x36, 0x23, 0x68, 0x00, 0x2b, 0x04, 0xda, + 0x00, 0x21, 0x20, 0x46, 0xfe, 0xf7, 0xeb, 0xfc, 0x38, 0xb9, 0x31, 0x46, + 0x20, 0x46, 0xfe, 0xf7, 0xa3, 0xfc, 0x00, 0x28, 0x0a, 0xda, 0x28, 0x46, + 0xf8, 0xbd, 0x32, 0x46, 0x21, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xca, 0xfd, + 0x00, 0x28, 0xe8, 0xd0, 0x05, 0x46, 0xf4, 0xe7, 0x32, 0x46, 0x21, 0x46, + 0x20, 0x46, 0xff, 0xf7, 0x12, 0xfa, 0x00, 0x28, 0xe7, 0xd0, 0xf5, 0xe7, + 0x00, 0x4d, 0xea, 0xe7, 0x80, 0xb0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x43, + 0x0e, 0x46, 0x8b, 0xb0, 0x05, 0x46, 0x01, 0x21, 0x06, 0xf1, 0x18, 0x00, + 0xfe, 0xf7, 0xc3, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x99, 0x80, + 0x28, 0x46, 0xfe, 0xf7, 0x6f, 0xfc, 0x02, 0x28, 0x07, 0x46, 0x0f, 0xd1, + 0x30, 0x46, 0xfe, 0xf7, 0x37, 0xfd, 0xeb, 0x6d, 0x07, 0x30, 0x07, 0x33, + 0xc0, 0x08, 0xb0, 0xeb, 0xd3, 0x0f, 0x47, 0x4b, 0x88, 0xbf, 0x1c, 0x46, + 0x20, 0x46, 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x01, 0x28, 0x40, 0xf0, + 0x82, 0x80, 0x21, 0x46, 0x30, 0x46, 0xfe, 0xf7, 0xa2, 0xfc, 0x00, 0x28, + 0x79, 0xdb, 0x06, 0xf1, 0x0c, 0x09, 0x21, 0x46, 0x48, 0x46, 0xfe, 0xf7, + 0x9a, 0xfc, 0x00, 0x28, 0x71, 0xdb, 0x05, 0xf1, 0x04, 0x08, 0x30, 0x46, + 0x41, 0x46, 0xfe, 0xf7, 0x4f, 0xfc, 0x00, 0x28, 0x69, 0xda, 0x41, 0x46, + 0x48, 0x46, 0xfe, 0xf7, 0x49, 0xfc, 0x00, 0x28, 0x63, 0xda, 0x4b, 0x46, + 0x4a, 0x46, 0x01, 0xa9, 0x28, 0x46, 0xcd, 0xe9, 0x01, 0x74, 0xcd, 0xe9, + 0x03, 0x47, 0xcd, 0xe9, 0x05, 0x44, 0xff, 0xf7, 0x65, 0xff, 0x04, 0x46, + 0x00, 0x28, 0x4d, 0xd1, 0x33, 0x46, 0x32, 0x46, 0x04, 0xa9, 0x28, 0x46, + 0xff, 0xf7, 0x5c, 0xff, 0x04, 0x46, 0x00, 0x28, 0x44, 0xd1, 0xab, 0x69, + 0x00, 0x2b, 0x37, 0xd1, 0x03, 0x23, 0x04, 0xa9, 0x07, 0xaa, 0xcd, 0xf8, + 0x24, 0xd0, 0x00, 0x93, 0x01, 0x23, 0x08, 0x46, 0xcd, 0xe9, 0x07, 0x33, + 0xff, 0xf7, 0xd5, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x32, 0xd1, 0x04, 0x9b, + 0x00, 0x2b, 0x19, 0xdb, 0x04, 0xaa, 0x33, 0x46, 0x28, 0x46, 0x11, 0x46, + 0xff, 0xf7, 0x3e, 0xff, 0x04, 0x46, 0x38, 0xbb, 0x04, 0xaa, 0x05, 0xf1, + 0x1c, 0x03, 0x28, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x5d, 0xfd, 0x04, 0x46, + 0xf0, 0xb9, 0x04, 0xa9, 0x01, 0xa8, 0xfe, 0xf7, 0x05, 0xfc, 0x13, 0x4b, + 0x04, 0x1e, 0x18, 0xbf, 0x1c, 0x46, 0x15, 0xe0, 0x00, 0x21, 0x04, 0xa8, + 0xfe, 0xf7, 0x3f, 0xfc, 0x00, 0x28, 0xdf, 0xd0, 0x04, 0xa9, 0x42, 0x46, + 0x08, 0x46, 0xff, 0xf7, 0x25, 0xfd, 0xd3, 0xe7, 0x04, 0xaa, 0x05, 0xf1, + 0x10, 0x03, 0x28, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x3f, 0xfd, 0x04, 0x46, + 0x00, 0x28, 0xcf, 0xd0, 0x01, 0xa8, 0xfe, 0xf7, 0x77, 0xfe, 0x04, 0xa8, + 0xfe, 0xf7, 0x74, 0xfe, 0x78, 0xe7, 0x02, 0x4c, 0x76, 0xe7, 0x02, 0x4c, + 0x74, 0xe7, 0x00, 0xbf, 0x80, 0xb3, 0xff, 0xff, 0x80, 0xb0, 0xff, 0xff, + 0x2d, 0xe9, 0xf0, 0x4f, 0x87, 0x6d, 0x85, 0xb0, 0x91, 0x46, 0x9a, 0x46, + 0x07, 0x37, 0x00, 0x23, 0x01, 0x22, 0x06, 0x46, 0x0d, 0x46, 0xff, 0x08, + 0x4f, 0xf0, 0x0c, 0x08, 0x00, 0xf1, 0x04, 0x0b, 0x03, 0x93, 0xcd, 0xe9, + 0x01, 0x23, 0x53, 0x46, 0x4a, 0x46, 0x39, 0x46, 0x01, 0xa8, 0xfe, 0xf7, + 0xa7, 0xfe, 0x04, 0x46, 0xf0, 0xb9, 0x59, 0x46, 0x01, 0xa8, 0xfe, 0xf7, + 0xbb, 0xfb, 0x00, 0x28, 0x1f, 0xda, 0xb8, 0xf1, 0x01, 0x08, 0x21, 0xd0, + 0x01, 0x21, 0x01, 0xa8, 0xfe, 0xf7, 0xf5, 0xfb, 0x00, 0x28, 0xe8, 0xdd, + 0x01, 0xab, 0x2a, 0x46, 0x29, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xd4, 0xfe, + 0x04, 0x46, 0x38, 0xb9, 0x05, 0xf1, 0x18, 0x02, 0x01, 0xab, 0x30, 0x46, + 0x11, 0x46, 0xff, 0xf7, 0xcb, 0xfe, 0x04, 0x46, 0x01, 0xa8, 0xfe, 0xf7, + 0x2d, 0xfe, 0x20, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x21, + 0x01, 0xa8, 0xfe, 0xf7, 0x77, 0xfd, 0xd2, 0xe7, 0x00, 0x4c, 0xf1, 0xe7, + 0x00, 0xb3, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, 0x87, 0x6d, 0x87, 0xb0, + 0x91, 0x46, 0x9a, 0x46, 0x07, 0x37, 0x00, 0x23, 0x01, 0x22, 0x05, 0x46, + 0x0e, 0x46, 0xff, 0x08, 0x4f, 0xf0, 0x0c, 0x08, 0x00, 0xf1, 0x04, 0x0b, + 0x05, 0x93, 0x02, 0x93, 0xcd, 0xe9, 0x03, 0x23, 0xcd, 0xe9, 0x00, 0x23, + 0x53, 0x46, 0x4a, 0x46, 0x39, 0x46, 0x03, 0xa8, 0xfe, 0xf7, 0x5a, 0xfe, + 0x04, 0x46, 0xb8, 0xbb, 0x59, 0x46, 0x03, 0xa8, 0xfe, 0xf7, 0x6e, 0xfb, + 0x00, 0x28, 0x3b, 0xda, 0xb8, 0xf1, 0x01, 0x08, 0x3d, 0xd0, 0x01, 0x21, + 0x03, 0xa8, 0xfe, 0xf7, 0xa8, 0xfb, 0x00, 0x28, 0xe8, 0xdd, 0x06, 0xf1, + 0x18, 0x02, 0x03, 0xab, 0x28, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x86, 0xfe, + 0x04, 0x46, 0xf8, 0xb9, 0x03, 0xab, 0x69, 0x46, 0x28, 0x46, 0x1a, 0x46, + 0xff, 0xf7, 0x7e, 0xfe, 0x04, 0x46, 0xb8, 0xb9, 0x6b, 0x46, 0x32, 0x46, + 0x31, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x76, 0xfe, 0x04, 0x46, 0x78, 0xb9, + 0x03, 0xab, 0x6a, 0x46, 0x69, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x6e, 0xfe, + 0x04, 0x46, 0x38, 0xb9, 0x06, 0xf1, 0x0c, 0x02, 0x6b, 0x46, 0x28, 0x46, + 0x11, 0x46, 0xff, 0xf7, 0x65, 0xfe, 0x04, 0x46, 0x03, 0xa8, 0xfe, 0xf7, + 0xc7, 0xfd, 0x68, 0x46, 0xfe, 0xf7, 0xc4, 0xfd, 0x20, 0x46, 0x07, 0xb0, + 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x21, 0x03, 0xa8, 0xfe, 0xf7, 0x0e, 0xfd, + 0xb6, 0xe7, 0x01, 0x4c, 0xee, 0xe7, 0x00, 0xbf, 0x00, 0xb3, 0xff, 0xff, + 0x2d, 0xe9, 0xf0, 0x41, 0x00, 0x23, 0x8c, 0xb0, 0x0d, 0x46, 0x01, 0x21, + 0x0b, 0x93, 0x06, 0x46, 0x08, 0x93, 0x17, 0x46, 0x05, 0x93, 0x02, 0x93, + 0xcd, 0xe9, 0x09, 0x13, 0xcd, 0xe9, 0x06, 0x13, 0xcd, 0xe9, 0x03, 0x13, + 0xcd, 0xe9, 0x00, 0x13, 0x83, 0x69, 0x00, 0x2b, 0x40, 0xf0, 0xdd, 0x80, + 0x02, 0xf1, 0x18, 0x03, 0x06, 0xa9, 0x1a, 0x46, 0xff, 0xf7, 0x32, 0xfe, + 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xc3, 0x80, 0x06, 0xab, 0x3a, 0x46, + 0x03, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x50, 0xfc, 0x04, 0x46, 0x00, 0x28, + 0x40, 0xf0, 0xb9, 0x80, 0x06, 0xab, 0x3a, 0x46, 0x69, 0x46, 0x30, 0x46, + 0xff, 0xf7, 0x56, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xaf, 0x80, + 0x6b, 0x46, 0x03, 0xaa, 0x06, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x14, 0xfe, + 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xa5, 0x80, 0x03, 0x22, 0x06, 0xa9, + 0x09, 0xa8, 0xff, 0xf7, 0x55, 0xf8, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, + 0x9c, 0x80, 0x06, 0xf1, 0x04, 0x08, 0x41, 0x46, 0x09, 0xa8, 0xfe, 0xf7, + 0xd7, 0xfa, 0x00, 0x28, 0x80, 0xf2, 0x8a, 0x80, 0x07, 0xf1, 0x0c, 0x08, + 0x03, 0xa9, 0x30, 0x46, 0x43, 0x46, 0x42, 0x46, 0xff, 0xf7, 0xf6, 0xfd, + 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x87, 0x80, 0x03, 0xa9, 0x30, 0x46, + 0xef, 0xf7, 0x24, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xd1, 0x03, 0xab, + 0x3a, 0x46, 0x06, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0xe5, 0xfd, 0x04, 0x46, + 0x00, 0x28, 0x76, 0xd1, 0x06, 0xa9, 0x30, 0x46, 0xef, 0xf7, 0x14, 0xfd, + 0x04, 0x46, 0x00, 0x28, 0x6f, 0xd1, 0x03, 0xab, 0x69, 0x46, 0x30, 0x46, + 0x1a, 0x46, 0xff, 0xf7, 0xd5, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x66, 0xd1, + 0x69, 0x46, 0x30, 0x46, 0xef, 0xf7, 0x04, 0xfd, 0x04, 0x46, 0x00, 0x28, + 0x5f, 0xd1, 0x09, 0xab, 0x03, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, + 0xc5, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x56, 0xd1, 0x03, 0xaa, 0x06, 0xab, + 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xf4, 0xfb, 0x04, 0x46, 0x00, 0x28, + 0x4d, 0xd1, 0x03, 0xaa, 0x06, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, + 0xeb, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x44, 0xd1, 0x06, 0xaa, 0x03, 0xab, + 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xe2, 0xfb, 0x04, 0x46, 0x00, 0x28, + 0x3b, 0xd1, 0x06, 0xaa, 0x09, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, + 0xa1, 0xfd, 0x04, 0x46, 0x98, 0xbb, 0x06, 0xaa, 0x6b, 0x46, 0x30, 0x46, + 0x11, 0x46, 0xff, 0xf7, 0xd1, 0xfb, 0x04, 0x46, 0x58, 0xbb, 0x07, 0xf1, + 0x18, 0x03, 0x42, 0x46, 0x69, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x90, 0xfd, + 0x04, 0x46, 0x10, 0xbb, 0x69, 0x46, 0x30, 0x46, 0xef, 0xf7, 0xc0, 0xfc, + 0x04, 0x46, 0xe0, 0xb9, 0x03, 0xa9, 0x28, 0x46, 0xfe, 0xf7, 0x52, 0xfe, + 0x04, 0x46, 0xb0, 0xb9, 0x06, 0xa9, 0x05, 0xf1, 0x0c, 0x00, 0xfe, 0xf7, + 0x4b, 0xfe, 0x04, 0x46, 0x78, 0xb9, 0x69, 0x46, 0x05, 0xf1, 0x18, 0x00, + 0xfe, 0xf7, 0x44, 0xfe, 0x04, 0x46, 0x08, 0xe0, 0x09, 0xa9, 0x42, 0x46, + 0x08, 0x46, 0xfe, 0xf7, 0xc6, 0xff, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, + 0x66, 0xaf, 0x09, 0xa8, 0xfe, 0xf7, 0xce, 0xfc, 0x06, 0xa8, 0xfe, 0xf7, + 0xcb, 0xfc, 0x03, 0xa8, 0xfe, 0xf7, 0xc8, 0xfc, 0x68, 0x46, 0xfe, 0xf7, + 0xc5, 0xfc, 0x20, 0x46, 0x0c, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x13, 0x46, + 0x06, 0xa9, 0xff, 0xf7, 0x57, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xe8, 0xd1, + 0x03, 0x22, 0x06, 0xa9, 0x09, 0xa8, 0xfe, 0xf7, 0x99, 0xff, 0x04, 0x46, + 0x00, 0x28, 0xe0, 0xd1, 0x06, 0xf1, 0x04, 0x08, 0x41, 0x46, 0x09, 0xa8, + 0xfe, 0xf7, 0x1c, 0xfa, 0x00, 0x28, 0x2f, 0xda, 0x06, 0xf1, 0x10, 0x08, + 0x00, 0x21, 0x40, 0x46, 0xfe, 0xf7, 0x57, 0xfa, 0x00, 0x28, 0x3f, 0xf4, + 0x3d, 0xaf, 0x07, 0xf1, 0x18, 0x03, 0x06, 0xa9, 0x30, 0x46, 0x1a, 0x46, + 0xff, 0xf7, 0x34, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xc5, 0xd1, 0x06, 0xab, + 0x03, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0x2b, 0xfd, 0x04, 0x46, + 0x00, 0x28, 0xbc, 0xd1, 0x43, 0x46, 0x03, 0xaa, 0x06, 0xa9, 0x30, 0x46, + 0xff, 0xf7, 0x22, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xb3, 0xd1, 0x09, 0xaa, + 0x06, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x41, 0xfb, 0x04, 0x46, + 0x00, 0x28, 0x3f, 0xf4, 0x17, 0xaf, 0xa8, 0xe7, 0x09, 0xa9, 0x42, 0x46, + 0x08, 0x46, 0xfe, 0xf7, 0x66, 0xff, 0x04, 0x46, 0x00, 0x28, 0xc1, 0xd0, + 0x9f, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x43, 0x02, 0xf1, 0x18, 0x09, + 0x97, 0xb0, 0x06, 0x46, 0x0d, 0x46, 0x48, 0x46, 0x00, 0x21, 0x90, 0x46, + 0x1f, 0x46, 0xfe, 0xf7, 0x16, 0xfa, 0x40, 0xb9, 0x39, 0x46, 0x28, 0x46, + 0xfe, 0xf7, 0xf2, 0xfd, 0x04, 0x46, 0x20, 0x46, 0x17, 0xb0, 0xbd, 0xe8, + 0xf0, 0x83, 0x3b, 0x6a, 0x7b, 0xb1, 0x07, 0xf1, 0x18, 0x04, 0x00, 0x21, + 0x20, 0x46, 0xfe, 0xf7, 0x04, 0xfa, 0x08, 0xb9, 0x41, 0x46, 0xec, 0xe7, + 0x01, 0x21, 0x20, 0x46, 0xfe, 0xf7, 0xfd, 0xf9, 0x00, 0x28, 0x40, 0xf0, + 0xff, 0x80, 0x00, 0x23, 0x01, 0x22, 0x13, 0xa9, 0x30, 0x46, 0x15, 0x93, + 0x12, 0x93, 0x0f, 0x93, 0x0c, 0x93, 0x09, 0x93, 0x06, 0x93, 0x03, 0x93, + 0xcd, 0xe9, 0x13, 0x23, 0xcd, 0xe9, 0x10, 0x23, 0xcd, 0xe9, 0x0d, 0x23, + 0xcd, 0xe9, 0x0a, 0x23, 0xcd, 0xe9, 0x07, 0x23, 0xcd, 0xe9, 0x04, 0x23, + 0xcd, 0xe9, 0x01, 0x23, 0x4b, 0x46, 0x4a, 0x46, 0xff, 0xf7, 0xc4, 0xfc, + 0x04, 0x46, 0x00, 0x28, 0x3a, 0xd1, 0x4b, 0x46, 0x13, 0xaa, 0x10, 0xa9, + 0x30, 0x46, 0xff, 0xf7, 0xbb, 0xfc, 0x04, 0x46, 0x90, 0xbb, 0x13, 0xaa, + 0x3b, 0x46, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xb3, 0xfc, 0x04, 0x46, + 0x50, 0xbb, 0x10, 0xaa, 0x07, 0xf1, 0x0c, 0x03, 0x30, 0x46, 0x11, 0x46, + 0xff, 0xf7, 0xaa, 0xfc, 0x04, 0x46, 0x08, 0xbb, 0x13, 0xaa, 0x43, 0x46, + 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xda, 0xfa, 0x04, 0x46, 0xc8, 0xb9, + 0x10, 0xaa, 0x08, 0xf1, 0x0c, 0x07, 0x30, 0x46, 0x3b, 0x46, 0x11, 0x46, + 0xff, 0xf7, 0xd0, 0xfa, 0x04, 0x46, 0x78, 0xb9, 0x01, 0x46, 0x13, 0xa8, + 0xfe, 0xf7, 0xab, 0xf9, 0x20, 0xbb, 0x21, 0x46, 0x10, 0xa8, 0xfe, 0xf7, + 0xa6, 0xf9, 0xd8, 0xb9, 0x42, 0x46, 0x29, 0x46, 0x30, 0x46, 0xff, 0xf7, + 0x37, 0xfe, 0x04, 0x46, 0x13, 0xa8, 0xfe, 0xf7, 0xe9, 0xfb, 0x10, 0xa8, + 0xfe, 0xf7, 0xe6, 0xfb, 0x0d, 0xa8, 0xfe, 0xf7, 0xe3, 0xfb, 0x0a, 0xa8, + 0xfe, 0xf7, 0xe0, 0xfb, 0x07, 0xa8, 0xfe, 0xf7, 0xdd, 0xfb, 0x04, 0xa8, + 0xfe, 0xf7, 0xda, 0xfb, 0x01, 0xa8, 0xfe, 0xf7, 0xd7, 0xfb, 0x78, 0xe7, + 0x28, 0x46, 0xfe, 0xf7, 0x11, 0xfb, 0xe4, 0xe7, 0x13, 0xab, 0x4a, 0x46, + 0x01, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x66, 0xfc, 0x04, 0x46, 0x00, 0x28, + 0xdc, 0xd1, 0x13, 0xab, 0x0d, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, + 0x5d, 0xfc, 0x04, 0x46, 0x00, 0x28, 0xd3, 0xd1, 0x13, 0xab, 0x0d, 0xaa, + 0x0a, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x54, 0xfc, 0x04, 0x46, 0x00, 0x28, + 0xca, 0xd1, 0x0d, 0xaa, 0x43, 0x46, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, + 0x4b, 0xfc, 0x04, 0x46, 0x00, 0x28, 0xc1, 0xd1, 0x0d, 0xa9, 0x13, 0xa8, + 0xfe, 0xf7, 0x12, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xba, 0xd1, 0x13, 0xa9, + 0x30, 0x46, 0xef, 0xf7, 0x73, 0xfb, 0x04, 0x46, 0x00, 0x28, 0xb3, 0xd1, + 0x10, 0xab, 0x07, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0x34, 0xfc, + 0x04, 0x46, 0x00, 0x28, 0xaa, 0xd1, 0x07, 0xaa, 0x13, 0xab, 0x30, 0x46, + 0x11, 0x46, 0xff, 0xf7, 0x63, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xa1, 0xd1, + 0x07, 0xaa, 0x0a, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x5a, 0xfa, + 0x04, 0x46, 0x00, 0x28, 0x98, 0xd1, 0x0d, 0xaa, 0x07, 0xab, 0x30, 0x46, + 0x11, 0x46, 0xff, 0xf7, 0x51, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x8f, 0xd1, + 0x0d, 0xaa, 0x10, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x10, 0xfc, + 0x04, 0x46, 0x00, 0x28, 0x86, 0xd1, 0x0a, 0xaa, 0x3b, 0x46, 0x30, 0x46, + 0x11, 0x46, 0xff, 0xf7, 0x07, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, + 0x7d, 0xaf, 0x0a, 0xab, 0x0d, 0xaa, 0x04, 0xa9, 0x30, 0x46, 0xff, 0xf7, + 0x35, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x73, 0xaf, 0x07, 0xa9, + 0x28, 0x46, 0xfe, 0xf7, 0xc3, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, + 0x6b, 0xaf, 0x04, 0xa9, 0x05, 0xf1, 0x0c, 0x00, 0xfe, 0xf7, 0xba, 0xfc, + 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x62, 0xaf, 0x01, 0xa9, 0x05, 0xf1, + 0x18, 0x00, 0xfe, 0xf7, 0xb1, 0xfc, 0x5a, 0xe7, 0x00, 0x4c, 0xe8, 0xe6, + 0x80, 0xb0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x43, 0x06, 0x46, 0xa3, 0xb0, + 0x0f, 0x46, 0x10, 0x46, 0x01, 0x21, 0x15, 0x46, 0xfe, 0xf7, 0xed, 0xf8, + 0x00, 0x28, 0x40, 0xf3, 0xc4, 0x81, 0x00, 0x23, 0x4f, 0xf0, 0x01, 0x09, + 0x39, 0x46, 0x1c, 0xa8, 0x18, 0x93, 0x15, 0x93, 0x12, 0x93, 0x0f, 0x93, + 0x1b, 0x93, 0x0c, 0x93, 0x09, 0x93, 0x06, 0x93, 0x03, 0x93, 0xcd, 0xe9, + 0x16, 0x93, 0xcd, 0xe9, 0x13, 0x93, 0xcd, 0xe9, 0x10, 0x93, 0xcd, 0xe9, + 0x0d, 0x93, 0xcd, 0xe9, 0x19, 0x93, 0xcd, 0xe9, 0x0a, 0x93, 0xcd, 0xe9, + 0x07, 0x93, 0xcd, 0xe9, 0x04, 0x93, 0xcd, 0xe9, 0x01, 0x93, 0xcd, 0xe9, + 0x1c, 0x93, 0xcd, 0xe9, 0x1e, 0x39, 0xcd, 0xe9, 0x20, 0x33, 0xfe, 0xf7, + 0x77, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x5a, 0xd1, 0x29, 0x46, 0x1f, 0xa8, + 0xfe, 0xf7, 0x70, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x53, 0xd1, 0x1c, 0xa8, + 0xfb, 0xf7, 0x37, 0xfb, 0x80, 0x46, 0x1f, 0xa8, 0xfb, 0xf7, 0x33, 0xfb, + 0x80, 0x45, 0x28, 0xbf, 0x80, 0x46, 0x1c, 0xa8, 0x41, 0x46, 0xfe, 0xf7, + 0x49, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x42, 0xd1, 0x41, 0x46, 0x1f, 0xa8, + 0xfe, 0xf7, 0x42, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x3b, 0xd1, 0xcd, 0xf8, + 0x7c, 0x90, 0xcd, 0xf8, 0x70, 0x90, 0x00, 0x21, 0x1c, 0xa8, 0xfe, 0xf7, + 0x98, 0xf8, 0x58, 0xb9, 0x41, 0x46, 0x1f, 0xa8, 0xfe, 0xf7, 0x68, 0xf9, + 0x04, 0x46, 0x60, 0xbb, 0x1f, 0xa9, 0x19, 0xa8, 0xfe, 0xf7, 0x42, 0xfc, + 0x04, 0x46, 0x26, 0xe0, 0x1c, 0xa8, 0xfb, 0xf7, 0x0a, 0xfb, 0x01, 0x46, + 0x1c, 0xa8, 0xfe, 0xf7, 0x23, 0xfa, 0x04, 0x46, 0xe8, 0xb9, 0x1f, 0xa8, + 0xfb, 0xf7, 0x01, 0xfb, 0x01, 0x46, 0x1f, 0xa8, 0xfe, 0xf7, 0x1a, 0xfa, + 0x04, 0x46, 0xa0, 0xb9, 0x1f, 0xa9, 0x1c, 0xa8, 0xfe, 0xf7, 0x32, 0xf8, + 0x00, 0x28, 0xc0, 0xf2, 0x9c, 0x80, 0x1c, 0xa9, 0x1f, 0xaa, 0x08, 0x46, + 0xfe, 0xf7, 0xab, 0xfd, 0x04, 0x46, 0x30, 0xb9, 0x01, 0x21, 0x1c, 0xa8, + 0xfe, 0xf7, 0x06, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xc7, 0xd0, 0x1c, 0xa8, + 0xfe, 0xf7, 0xae, 0xfa, 0x1f, 0xa8, 0xfe, 0xf7, 0xab, 0xfa, 0x00, 0x2c, + 0x40, 0xf0, 0xa6, 0x80, 0x01, 0x21, 0x19, 0xa8, 0xfe, 0xf7, 0x57, 0xf8, + 0x00, 0x28, 0x40, 0xf0, 0x2b, 0x81, 0x2a, 0x46, 0x39, 0x46, 0x16, 0xa8, + 0xff, 0xf7, 0x8b, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x96, 0x80, + 0x16, 0xa9, 0x13, 0xa8, 0xfe, 0xf7, 0xfc, 0xfb, 0x04, 0x46, 0x00, 0x28, + 0x40, 0xf0, 0x8e, 0x80, 0x29, 0x46, 0x0a, 0xa8, 0xfe, 0xf7, 0xf4, 0xfb, + 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x86, 0x80, 0x29, 0x46, 0x07, 0xa8, + 0xfe, 0xf7, 0xec, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x7e, 0xd1, 0x01, 0x21, + 0x10, 0xa8, 0xfe, 0xf7, 0xa7, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x77, 0xd1, + 0x01, 0x46, 0x0d, 0xa8, 0xfe, 0xf7, 0xa0, 0xf9, 0x04, 0x46, 0x00, 0x28, + 0x70, 0xd1, 0x01, 0x46, 0x04, 0xa8, 0xfe, 0xf7, 0x99, 0xf9, 0x04, 0x46, + 0x00, 0x28, 0x69, 0xd1, 0x01, 0x21, 0x01, 0xa8, 0xfe, 0xf7, 0x92, 0xf9, + 0x04, 0x46, 0x00, 0x28, 0x62, 0xd1, 0x15, 0x9b, 0x1b, 0x68, 0xd8, 0x07, + 0x49, 0xd5, 0x09, 0x9b, 0x1b, 0x68, 0xdb, 0x07, 0x40, 0xf1, 0x8f, 0x80, + 0x07, 0xa9, 0x13, 0xa8, 0xfd, 0xf7, 0xc8, 0xff, 0x00, 0x28, 0xc0, 0xf2, + 0xb8, 0x80, 0x13, 0xa9, 0x07, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x75, 0xf8, + 0x04, 0x46, 0x00, 0x28, 0x4a, 0xd1, 0x10, 0xa9, 0x04, 0xaa, 0x08, 0x46, + 0xff, 0xf7, 0x6d, 0xf8, 0x04, 0x46, 0x00, 0x28, 0x42, 0xd1, 0x01, 0xaa, + 0x0d, 0xa9, 0x08, 0x46, 0xff, 0xf7, 0x65, 0xf8, 0x04, 0x46, 0x00, 0x28, + 0x3a, 0xd1, 0x00, 0x21, 0x13, 0xa8, 0xfd, 0xf7, 0xec, 0xff, 0x00, 0x28, + 0xd1, 0xd1, 0x00, 0x21, 0x04, 0xa8, 0xfd, 0xf7, 0xe6, 0xff, 0x00, 0x28, + 0xc0, 0xf2, 0xa6, 0x80, 0x29, 0x46, 0x04, 0xa8, 0xfd, 0xf7, 0x9c, 0xff, + 0x00, 0x28, 0x80, 0xf2, 0xa9, 0x80, 0x04, 0xa9, 0x30, 0x46, 0xfe, 0xf7, + 0x8d, 0xfb, 0x04, 0x46, 0x20, 0xe0, 0x1f, 0xa9, 0x1c, 0xaa, 0x08, 0x46, + 0xfe, 0xf7, 0x0f, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x69, 0xaf, + 0x01, 0x21, 0x1f, 0xa8, 0x60, 0xe7, 0x01, 0x21, 0x13, 0xa8, 0xfe, 0xf7, + 0x65, 0xf9, 0x04, 0x46, 0x70, 0xb9, 0x12, 0x9b, 0x1b, 0x68, 0xdf, 0x07, + 0x29, 0xd4, 0x0f, 0x9b, 0x1b, 0x68, 0xdc, 0x07, 0x25, 0xd4, 0x01, 0x21, + 0x10, 0xa8, 0xfe, 0xf7, 0x57, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x2f, 0xd0, + 0x16, 0xa8, 0xfe, 0xf7, 0xff, 0xf9, 0x13, 0xa8, 0xfe, 0xf7, 0xfc, 0xf9, + 0x10, 0xa8, 0xfe, 0xf7, 0xf9, 0xf9, 0x0d, 0xa8, 0xfe, 0xf7, 0xf6, 0xf9, + 0x19, 0xa8, 0xfe, 0xf7, 0xf3, 0xf9, 0x0a, 0xa8, 0xfe, 0xf7, 0xf0, 0xf9, + 0x07, 0xa8, 0xfe, 0xf7, 0xed, 0xf9, 0x04, 0xa8, 0xfe, 0xf7, 0xea, 0xf9, + 0x01, 0xa8, 0xfe, 0xf7, 0xe7, 0xf9, 0x20, 0x46, 0x23, 0xb0, 0xbd, 0xe8, + 0xf0, 0x83, 0x10, 0xa9, 0x0a, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x7e, 0xf8, + 0x04, 0x46, 0x00, 0x28, 0xd8, 0xd1, 0x0d, 0xa9, 0x16, 0xaa, 0x08, 0x46, + 0xfe, 0xf7, 0xfb, 0xff, 0x04, 0x46, 0x00, 0x28, 0xc9, 0xd0, 0xcf, 0xe7, + 0x01, 0x21, 0x0d, 0xa8, 0xfe, 0xf7, 0x20, 0xf9, 0x64, 0xe7, 0x01, 0x21, + 0x07, 0xa8, 0xfe, 0xf7, 0x1b, 0xf9, 0x04, 0x46, 0x00, 0x28, 0xc3, 0xd1, + 0x06, 0x9b, 0x1b, 0x68, 0xd9, 0x07, 0x13, 0xd4, 0x03, 0x9b, 0x1b, 0x68, + 0xda, 0x07, 0x0f, 0xd4, 0x01, 0x21, 0x04, 0xa8, 0xfe, 0xf7, 0x0c, 0xf9, + 0x04, 0x46, 0x00, 0x28, 0xb4, 0xd1, 0x01, 0x21, 0x01, 0xa8, 0xfe, 0xf7, + 0x05, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, 0x4e, 0xaf, 0xab, 0xe7, + 0x04, 0xa9, 0x0a, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x49, 0xf8, 0x04, 0x46, + 0x00, 0x28, 0xa3, 0xd1, 0x01, 0xa9, 0x16, 0xaa, 0x08, 0x46, 0xfe, 0xf7, + 0xc6, 0xff, 0x04, 0x46, 0x00, 0x28, 0xdf, 0xd0, 0x9a, 0xe7, 0x07, 0xa9, + 0x13, 0xaa, 0x08, 0x46, 0xfe, 0xf7, 0xbd, 0xff, 0x04, 0x46, 0x00, 0x28, + 0x92, 0xd1, 0x04, 0xa9, 0x10, 0xaa, 0x08, 0x46, 0xfe, 0xf7, 0xb5, 0xff, + 0x04, 0x46, 0x00, 0x28, 0x8a, 0xd1, 0x0d, 0xaa, 0x01, 0xa9, 0x46, 0xe7, + 0x04, 0xa9, 0x2a, 0x46, 0x08, 0x46, 0xff, 0xf7, 0x25, 0xf8, 0x04, 0x46, + 0x00, 0x28, 0x3f, 0xf4, 0x4a, 0xaf, 0x7d, 0xe7, 0x04, 0xa9, 0x2a, 0x46, + 0x08, 0x46, 0xfe, 0xf7, 0xa0, 0xff, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, + 0x47, 0xaf, 0x73, 0xe7, 0x6f, 0xf0, 0x0d, 0x04, 0x70, 0xe7, 0x6f, 0xf0, + 0x03, 0x04, 0x88, 0xe7, 0x2d, 0xe9, 0xf0, 0x41, 0x01, 0xf1, 0x18, 0x05, + 0x88, 0xb0, 0x07, 0x46, 0x88, 0x46, 0x28, 0x46, 0x00, 0x21, 0xfd, 0xf7, + 0x18, 0xff, 0x04, 0x46, 0x00, 0x28, 0x3b, 0xd0, 0x00, 0x23, 0x01, 0x26, + 0x3a, 0x1d, 0x29, 0x46, 0x05, 0xa8, 0x07, 0x93, 0x04, 0x93, 0xcd, 0xe9, + 0x05, 0x63, 0xcd, 0xe9, 0x02, 0x63, 0xff, 0xf7, 0x11, 0xfe, 0x04, 0x46, + 0x30, 0xbb, 0x05, 0xab, 0x02, 0xa9, 0x38, 0x46, 0x1a, 0x46, 0xff, 0xf7, + 0xe7, 0xf9, 0x04, 0x46, 0xf0, 0xb9, 0x02, 0xab, 0x42, 0x46, 0x41, 0x46, + 0x38, 0x46, 0xff, 0xf7, 0xdf, 0xf9, 0x04, 0x46, 0xb0, 0xb9, 0x08, 0xf1, + 0x0c, 0x02, 0x02, 0xab, 0x38, 0x46, 0x11, 0x46, 0x01, 0x92, 0xff, 0xf7, + 0xd5, 0xf9, 0x04, 0x46, 0x60, 0xb9, 0x01, 0x9a, 0x05, 0xab, 0x38, 0x46, + 0x11, 0x46, 0xff, 0xf7, 0xcd, 0xf9, 0x04, 0x46, 0x20, 0xb9, 0x31, 0x46, + 0x28, 0x46, 0xfe, 0xf7, 0x57, 0xf8, 0x04, 0x46, 0x05, 0xa8, 0xfe, 0xf7, + 0x29, 0xf9, 0x02, 0xa8, 0xfe, 0xf7, 0x26, 0xf9, 0x20, 0x46, 0x08, 0xb0, + 0xbd, 0xe8, 0xf0, 0x81, 0x01, 0x2a, 0x2d, 0xe9, 0xf0, 0x4f, 0x06, 0x46, + 0x8d, 0xb0, 0x0c, 0x46, 0x15, 0x46, 0x07, 0xd8, 0x09, 0x68, 0xff, 0xf7, + 0xa7, 0xff, 0x82, 0x46, 0x50, 0x46, 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, + 0x0c, 0x21, 0x10, 0x46, 0x09, 0xf0, 0xca, 0xfc, 0x07, 0x46, 0x00, 0x28, + 0x00, 0xf0, 0xb7, 0x80, 0x4f, 0xf0, 0x0c, 0x08, 0x81, 0x46, 0x02, 0x46, + 0x01, 0x21, 0x08, 0xfb, 0x05, 0xf8, 0x00, 0xeb, 0x08, 0x03, 0x00, 0x93, + 0x00, 0x23, 0x93, 0x60, 0x00, 0x98, 0xc2, 0xe9, 0x00, 0x13, 0x0c, 0x32, + 0x90, 0x42, 0xf8, 0xd1, 0x38, 0x46, 0x0b, 0x93, 0x08, 0x93, 0x05, 0x93, + 0xcd, 0xe9, 0x09, 0x13, 0xcd, 0xe9, 0x06, 0x13, 0xcd, 0xe9, 0x03, 0x13, + 0x21, 0x68, 0x18, 0x31, 0xfe, 0xf7, 0x52, 0xfa, 0x82, 0x46, 0x90, 0xbb, + 0x04, 0xf1, 0x04, 0x0b, 0x07, 0xf1, 0x0c, 0x01, 0x04, 0xeb, 0x85, 0x04, + 0x5b, 0xf8, 0x04, 0x3b, 0xa1, 0xf1, 0x0c, 0x02, 0x30, 0x46, 0x01, 0x91, + 0x18, 0x33, 0xff, 0xf7, 0x73, 0xf9, 0x82, 0x46, 0x08, 0xbb, 0x01, 0x99, + 0x5c, 0x45, 0x01, 0xf1, 0x0c, 0x01, 0xef, 0xd1, 0xa8, 0xf1, 0x0c, 0x01, + 0x32, 0x1d, 0x09, 0xa8, 0x39, 0x44, 0xff, 0xf7, 0x87, 0xfd, 0x82, 0x46, + 0x98, 0xb9, 0x01, 0x3d, 0x4f, 0xf0, 0x0c, 0x08, 0xa7, 0xf1, 0x0c, 0x0b, + 0x15, 0xbb, 0x09, 0xa9, 0x06, 0xa8, 0xfe, 0xf7, 0x27, 0xfa, 0x82, 0x46, + 0x38, 0xb9, 0x06, 0xab, 0x03, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, + 0x51, 0xf9, 0x82, 0x46, 0x38, 0xb3, 0x09, 0xa8, 0xfe, 0xf7, 0xb2, 0xf8, + 0x06, 0xa8, 0xfe, 0xf7, 0xaf, 0xf8, 0x03, 0xa8, 0xfe, 0xf7, 0xac, 0xf8, + 0x48, 0x46, 0x09, 0xf1, 0x0c, 0x09, 0xfe, 0xf7, 0xa7, 0xf8, 0x00, 0x9b, + 0x4b, 0x45, 0xf7, 0xd1, 0x38, 0x46, 0x08, 0xf0, 0x53, 0xf9, 0x89, 0xe7, + 0x08, 0xfb, 0x05, 0xb3, 0x09, 0xaa, 0x06, 0xa9, 0x30, 0x46, 0xff, 0xf7, + 0x33, 0xf9, 0x82, 0x46, 0x00, 0x28, 0xe0, 0xd1, 0x54, 0xf8, 0x04, 0x3c, + 0x09, 0xaa, 0x30, 0x46, 0x18, 0x33, 0x11, 0x46, 0xff, 0xf7, 0x28, 0xf9, + 0xcd, 0xe7, 0x54, 0xf8, 0x04, 0x2c, 0x03, 0xab, 0x30, 0x46, 0x11, 0x46, + 0xff, 0xf7, 0x20, 0xf9, 0x82, 0x46, 0x00, 0x28, 0xcd, 0xd1, 0x54, 0xf8, + 0x04, 0x2c, 0x03, 0xab, 0x30, 0x46, 0x0c, 0x32, 0x11, 0x46, 0xff, 0xf7, + 0x15, 0xf9, 0x82, 0x46, 0x00, 0x28, 0xc2, 0xd1, 0x54, 0xf8, 0x04, 0x2c, + 0x06, 0xab, 0x30, 0x46, 0x0c, 0x32, 0x11, 0x46, 0xff, 0xf7, 0x0a, 0xf9, + 0x82, 0x46, 0x00, 0x28, 0xb7, 0xd1, 0xb1, 0x68, 0x54, 0xf8, 0x04, 0x0c, + 0xfd, 0xf7, 0xfc, 0xfb, 0x82, 0x46, 0x00, 0x28, 0xaf, 0xd1, 0x54, 0xf8, + 0x04, 0x0c, 0xb1, 0x68, 0x0c, 0x30, 0xfd, 0xf7, 0xf3, 0xfb, 0x82, 0x46, + 0x00, 0x28, 0xa6, 0xd1, 0x54, 0xf8, 0x04, 0x0d, 0x18, 0x30, 0xfe, 0xf7, + 0x57, 0xf8, 0x00, 0x2d, 0x9f, 0xd0, 0x01, 0x3d, 0x8e, 0xe7, 0xdf, 0xf8, + 0x04, 0xa0, 0x39, 0xe7, 0x80, 0xb2, 0xff, 0xff, 0x70, 0xb4, 0x04, 0x68, + 0x0e, 0x1b, 0x00, 0x2e, 0x07, 0xdd, 0x26, 0x78, 0x9e, 0x42, 0x08, 0xd1, + 0x01, 0x34, 0x04, 0x60, 0x70, 0xbc, 0xfb, 0xf7, 0x90, 0xb8, 0x6f, 0xf0, + 0x5f, 0x00, 0x70, 0xbc, 0x70, 0x47, 0x6f, 0xf0, 0x61, 0x00, 0xfa, 0xe7, + 0x2d, 0xe9, 0xf7, 0x43, 0x90, 0x46, 0x1f, 0x46, 0x01, 0xaa, 0x30, 0x23, + 0x05, 0x46, 0x89, 0x46, 0xff, 0xf7, 0xe2, 0xff, 0x04, 0x46, 0xf8, 0xb9, + 0x2e, 0x68, 0xa9, 0xeb, 0x06, 0x09, 0xb9, 0xf1, 0x00, 0x0f, 0x35, 0xdd, + 0x01, 0x99, 0x42, 0x46, 0x33, 0x78, 0x28, 0x46, 0x0e, 0x44, 0x42, 0xf8, + 0x04, 0x3b, 0x06, 0x23, 0x31, 0x46, 0xff, 0xf7, 0xcf, 0xff, 0x04, 0x46, + 0x60, 0xb9, 0x2a, 0x68, 0xd8, 0xf8, 0x04, 0x10, 0xc8, 0xf8, 0x08, 0x20, + 0x53, 0x18, 0xb3, 0x42, 0x2b, 0x60, 0x07, 0xd1, 0x0c, 0x21, 0x38, 0x46, + 0xfc, 0xf7, 0xfe, 0xfe, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, + 0x51, 0x5c, 0x01, 0x33, 0x3a, 0x46, 0x28, 0x46, 0x42, 0xf8, 0x04, 0x1b, + 0x31, 0x46, 0x2b, 0x60, 0xfb, 0xf7, 0x4f, 0xf8, 0x04, 0x46, 0x00, 0x28, + 0xee, 0xd1, 0x2b, 0x68, 0x7a, 0x68, 0xbb, 0x60, 0x13, 0x44, 0xb3, 0x42, + 0x2b, 0x60, 0x0c, 0xbf, 0x04, 0x46, 0x6f, 0xf0, 0x65, 0x04, 0xe3, 0xe7, + 0x6f, 0xf0, 0x5f, 0x04, 0xe0, 0xe7, 0x37, 0xb5, 0x02, 0x23, 0x15, 0x46, + 0x01, 0xaa, 0x04, 0x46, 0xff, 0xf7, 0x9a, 0xff, 0x40, 0xb9, 0x01, 0x9a, + 0x28, 0x46, 0x21, 0x68, 0xfe, 0xf7, 0x6e, 0xf8, 0x23, 0x68, 0x01, 0x9a, + 0x13, 0x44, 0x23, 0x60, 0x03, 0xb0, 0x30, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, + 0x97, 0xb0, 0x02, 0x93, 0x13, 0x68, 0x20, 0x9c, 0x0f, 0x2b, 0x01, 0x93, + 0xcd, 0xe9, 0x0a, 0x02, 0x00, 0xf2, 0xf1, 0x81, 0x21, 0x9b, 0xb5, 0x4d, + 0x0b, 0x44, 0xb5, 0x4e, 0xb5, 0x4f, 0x0c, 0x93, 0x21, 0x9b, 0x0c, 0x9a, + 0x93, 0x42, 0x07, 0xd1, 0x0b, 0x9b, 0x00, 0x20, 0x1a, 0x46, 0x01, 0x9b, + 0x13, 0x60, 0x17, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x9b, 0x83, 0xb1, + 0x01, 0x9b, 0x21, 0x99, 0xe3, 0x5c, 0x11, 0xf8, 0x01, 0x2b, 0x53, 0x40, + 0x22, 0x9a, 0x21, 0x91, 0x02, 0xf8, 0x01, 0x3b, 0x01, 0x9b, 0x22, 0x92, + 0x01, 0x33, 0x03, 0xf0, 0x0f, 0x03, 0x01, 0x93, 0xe0, 0xe7, 0x0a, 0x9b, + 0xdf, 0xf8, 0x98, 0xc2, 0x5a, 0x68, 0x02, 0x9b, 0x19, 0x68, 0x0e, 0x91, + 0x13, 0x68, 0x4b, 0x40, 0x0e, 0x93, 0x02, 0x9b, 0x59, 0x68, 0x0f, 0x91, + 0x53, 0x68, 0x4b, 0x40, 0x0f, 0x93, 0x02, 0x9b, 0x99, 0x68, 0x10, 0x91, + 0x93, 0x68, 0x4b, 0x40, 0x10, 0x93, 0x02, 0x9b, 0xd9, 0x68, 0x02, 0xf1, + 0x10, 0x03, 0x30, 0x32, 0x11, 0x91, 0x0d, 0x93, 0x52, 0xf8, 0x24, 0x3c, + 0x4b, 0x40, 0x11, 0x93, 0x0a, 0x9b, 0x1b, 0x68, 0x5b, 0x10, 0x04, 0x93, + 0x01, 0x3b, 0x05, 0x93, 0x03, 0x93, 0x20, 0x32, 0xdd, 0xe9, 0x0e, 0x9a, + 0xdd, 0xe9, 0x10, 0x83, 0x5f, 0xfa, 0x89, 0xf0, 0x19, 0x0e, 0x55, 0xf8, + 0x20, 0x00, 0x5f, 0xfa, 0x83, 0xfe, 0x56, 0xf8, 0x21, 0x10, 0x5f, 0xfa, + 0x88, 0xfb, 0x55, 0xf8, 0x2e, 0xe0, 0x48, 0x40, 0xca, 0xf3, 0x07, 0x21, + 0x55, 0xf8, 0x2b, 0xb0, 0x57, 0xf8, 0x21, 0x10, 0x48, 0x40, 0xc8, 0xf3, + 0x07, 0x41, 0x5c, 0xf8, 0x21, 0x10, 0x48, 0x40, 0x52, 0xf8, 0x40, 0x1c, + 0x41, 0x40, 0xc8, 0xb2, 0x06, 0x90, 0x08, 0x0e, 0x07, 0x90, 0xc1, 0xf3, + 0x07, 0x40, 0x08, 0x90, 0xc1, 0xf3, 0x07, 0x20, 0x09, 0x90, 0x4f, 0xea, + 0x18, 0x60, 0xc8, 0xf3, 0x07, 0x28, 0x56, 0xf8, 0x20, 0x00, 0x8e, 0xea, + 0x00, 0x0e, 0xc9, 0xf3, 0x07, 0x20, 0x57, 0xf8, 0x20, 0x00, 0x8e, 0xea, + 0x00, 0x0e, 0xca, 0xf3, 0x07, 0x40, 0x5c, 0xf8, 0x20, 0x00, 0x8e, 0xea, + 0x00, 0x0e, 0x4f, 0xea, 0x1a, 0x60, 0x5f, 0xfa, 0x8a, 0xfa, 0x56, 0xf8, + 0x20, 0x00, 0x55, 0xf8, 0x2a, 0xa0, 0x8b, 0xea, 0x00, 0x00, 0xc3, 0xf3, + 0x07, 0x2b, 0xc3, 0xf3, 0x07, 0x43, 0x57, 0xf8, 0x2b, 0xb0, 0x5c, 0xf8, + 0x23, 0x30, 0x80, 0xea, 0x0b, 0x00, 0xc9, 0xf3, 0x07, 0x4b, 0x4f, 0xea, + 0x19, 0x69, 0x5c, 0xf8, 0x2b, 0xb0, 0x56, 0xf8, 0x29, 0x90, 0x80, 0xea, + 0x0b, 0x00, 0x8a, 0xea, 0x09, 0x0a, 0x57, 0xf8, 0x28, 0x90, 0x8a, 0xea, + 0x09, 0x0a, 0x8a, 0xea, 0x03, 0x0a, 0x03, 0x9b, 0x00, 0x2b, 0x00, 0xf3, + 0xbf, 0x80, 0x05, 0x9b, 0x12, 0x91, 0x4f, 0xea, 0x43, 0x1c, 0x04, 0x9b, + 0x00, 0x2b, 0x0d, 0x9b, 0xd8, 0xbf, 0x4f, 0xf0, 0x00, 0x0c, 0x63, 0x44, + 0x5a, 0x68, 0x9c, 0x46, 0x8a, 0xea, 0x02, 0x0a, 0xcd, 0xf8, 0x4c, 0xa0, + 0x99, 0x68, 0x41, 0x40, 0x53, 0x48, 0x14, 0x91, 0xda, 0x68, 0x8e, 0xea, + 0x02, 0x0e, 0x4f, 0xea, 0x1e, 0x62, 0xcd, 0xf8, 0x54, 0xe0, 0x10, 0xf8, + 0x02, 0x90, 0x06, 0x9a, 0x10, 0xf8, 0x02, 0x80, 0x1a, 0x69, 0x88, 0xea, + 0x02, 0x02, 0x82, 0xea, 0x09, 0x68, 0xca, 0xf3, 0x07, 0x22, 0x82, 0x5c, + 0x88, 0xea, 0x02, 0x28, 0xc1, 0xf3, 0x07, 0x42, 0x82, 0x5c, 0x88, 0xea, + 0x02, 0x48, 0x07, 0x9a, 0x10, 0xf8, 0x02, 0xb0, 0x5a, 0x69, 0xcd, 0xf8, + 0x38, 0x80, 0x82, 0xea, 0x0b, 0x6b, 0x5f, 0xfa, 0x8a, 0xf2, 0x82, 0x5c, + 0x8b, 0xea, 0x02, 0x0b, 0xc1, 0xf3, 0x07, 0x22, 0x82, 0x5c, 0x8b, 0xea, + 0x02, 0x2b, 0xce, 0xf3, 0x07, 0x42, 0x82, 0x5c, 0x8b, 0xea, 0x02, 0x4b, + 0x08, 0x9a, 0x10, 0xf8, 0x02, 0x90, 0x9a, 0x69, 0x09, 0x9b, 0x82, 0xea, + 0x09, 0x42, 0xcd, 0xf8, 0x3c, 0xb0, 0x5f, 0xfa, 0x81, 0xf9, 0x09, 0x0e, + 0x10, 0xf8, 0x09, 0x90, 0x82, 0xea, 0x09, 0x02, 0x4f, 0xea, 0x1a, 0x69, + 0x10, 0xf8, 0x09, 0x90, 0x82, 0xea, 0x09, 0x62, 0xce, 0xf3, 0x07, 0x29, + 0x5f, 0xfa, 0x8e, 0xfe, 0x10, 0xf8, 0x09, 0x90, 0x82, 0xea, 0x09, 0x22, + 0x10, 0x92, 0x10, 0xf8, 0x03, 0x90, 0xca, 0xf3, 0x07, 0x43, 0xdc, 0xf8, + 0x1c, 0xc0, 0xc3, 0x5c, 0x8c, 0xea, 0x09, 0x29, 0x10, 0xf8, 0x0e, 0xc0, + 0x89, 0xea, 0x0c, 0x09, 0x10, 0xf8, 0x01, 0xc0, 0x4f, 0xea, 0x18, 0x21, + 0x22, 0x72, 0x89, 0xea, 0x0c, 0x69, 0x84, 0xf8, 0x00, 0x80, 0x61, 0x70, + 0x4f, 0xea, 0x18, 0x41, 0x89, 0xea, 0x03, 0x43, 0x84, 0xf8, 0x04, 0xb0, + 0xa1, 0x70, 0x4f, 0xea, 0x1b, 0x21, 0x4f, 0xea, 0x13, 0x69, 0x23, 0x73, + 0x61, 0x71, 0x4f, 0xea, 0x1b, 0x41, 0x4f, 0xea, 0x18, 0x68, 0x0e, 0xa8, + 0xa1, 0x71, 0x11, 0x0a, 0x4f, 0xea, 0x1b, 0x6b, 0x84, 0xf8, 0x03, 0x80, + 0x61, 0x72, 0x11, 0x0c, 0x12, 0x0e, 0x84, 0xf8, 0x07, 0xb0, 0xa1, 0x72, + 0x20, 0x21, 0xe2, 0x72, 0x1a, 0x0a, 0x84, 0xf8, 0x0f, 0x90, 0x62, 0x73, + 0x1a, 0x0c, 0x11, 0x93, 0xa2, 0x73, 0xfc, 0xf7, 0x63, 0xfd, 0x02, 0x9b, + 0x03, 0xf1, 0x10, 0x02, 0x12, 0xf8, 0x01, 0x3d, 0x01, 0x33, 0xdb, 0xb2, + 0x13, 0x70, 0x00, 0x2b, 0x7f, 0xf4, 0xac, 0xae, 0x02, 0x9b, 0x9a, 0x42, + 0xf4, 0xd1, 0xa7, 0xe6, 0xb8, 0x15, 0x02, 0x24, 0xb8, 0x21, 0x02, 0x24, + 0xb8, 0x19, 0x02, 0x24, 0x1c, 0x04, 0x00, 0x24, 0xb8, 0x1d, 0x02, 0x24, + 0x12, 0x91, 0x52, 0xf8, 0x3c, 0x3c, 0x8a, 0xea, 0x03, 0x09, 0x06, 0x9b, + 0xcd, 0xf8, 0x4c, 0x90, 0x52, 0xf8, 0x38, 0x1c, 0x41, 0x40, 0x14, 0x91, + 0x52, 0xf8, 0x34, 0x0c, 0x8e, 0xea, 0x00, 0x00, 0x55, 0xf8, 0x23, 0xe0, + 0x15, 0x90, 0x4f, 0xea, 0x10, 0x68, 0x52, 0xf8, 0x30, 0x3c, 0x56, 0xf8, + 0x28, 0x80, 0x83, 0xea, 0x0e, 0x0e, 0x07, 0x9b, 0x8e, 0xea, 0x08, 0x0e, + 0xc9, 0xf3, 0x07, 0x28, 0x57, 0xf8, 0x28, 0x80, 0x8e, 0xea, 0x08, 0x0e, + 0xc1, 0xf3, 0x07, 0x48, 0x5c, 0xf8, 0x28, 0x80, 0x8e, 0xea, 0x08, 0x0e, + 0x5f, 0xfa, 0x89, 0xf8, 0xcd, 0xf8, 0x38, 0xe0, 0x56, 0xf8, 0x23, 0xe0, + 0x52, 0xf8, 0x2c, 0x3c, 0x55, 0xf8, 0x28, 0x80, 0x83, 0xea, 0x0e, 0x0e, + 0x08, 0x9b, 0x8e, 0xea, 0x08, 0x0e, 0xc1, 0xf3, 0x07, 0x28, 0x57, 0xf8, + 0x28, 0x80, 0x8e, 0xea, 0x08, 0x0e, 0xc0, 0xf3, 0x07, 0x48, 0x5c, 0xf8, + 0x28, 0x80, 0x8e, 0xea, 0x08, 0x0e, 0x5c, 0xf8, 0x23, 0x80, 0xcd, 0xf8, + 0x3c, 0xe0, 0x5f, 0xfa, 0x81, 0xfe, 0x52, 0xf8, 0x28, 0x3c, 0x09, 0x0e, + 0x55, 0xf8, 0x2e, 0xe0, 0x8e, 0xea, 0x08, 0x0e, 0x4f, 0xea, 0x19, 0x68, + 0x8e, 0xea, 0x03, 0x0e, 0x56, 0xf8, 0x28, 0x80, 0x09, 0x9b, 0x8e, 0xea, + 0x08, 0x0e, 0xc0, 0xf3, 0x07, 0x28, 0xc0, 0xb2, 0x57, 0xf8, 0x28, 0x80, + 0x8e, 0xea, 0x08, 0x0e, 0xcd, 0xf8, 0x40, 0xe0, 0x55, 0xf8, 0x20, 0xe0, + 0x57, 0xf8, 0x23, 0x00, 0xc9, 0xf3, 0x07, 0x43, 0x8e, 0xea, 0x00, 0x0e, + 0x52, 0xf8, 0x24, 0x0c, 0x56, 0xf8, 0x21, 0x10, 0x8e, 0xea, 0x00, 0x00, + 0x48, 0x40, 0x5c, 0xf8, 0x23, 0x10, 0x03, 0x9b, 0x48, 0x40, 0x01, 0x3b, + 0x11, 0x90, 0x03, 0x93, 0x5b, 0xe6, 0x6f, 0xf0, 0x20, 0x00, 0x1a, 0xe6, + 0xf0, 0xb5, 0xad, 0xf6, 0x04, 0x0d, 0x01, 0x23, 0x00, 0x22, 0x0d, 0xf5, + 0x80, 0x60, 0x05, 0x46, 0x13, 0xf0, 0x80, 0x01, 0x4d, 0xf8, 0x23, 0x20, + 0x40, 0xf8, 0x04, 0x3b, 0x02, 0xf1, 0x01, 0x02, 0x18, 0xbf, 0x1b, 0x21, + 0x83, 0xea, 0x43, 0x03, 0xb2, 0xf5, 0x80, 0x7f, 0x83, 0xea, 0x01, 0x03, + 0xdb, 0xb2, 0xed, 0xd1, 0x36, 0x48, 0x01, 0x23, 0x00, 0x22, 0x13, 0xf0, + 0x80, 0x01, 0x02, 0xf1, 0x01, 0x02, 0x40, 0xf8, 0x04, 0x3b, 0x18, 0xbf, + 0x1b, 0x21, 0x0a, 0x2a, 0x81, 0xea, 0x43, 0x03, 0xdb, 0xb2, 0xf2, 0xd1, + 0x63, 0x23, 0x2f, 0x4c, 0x2f, 0x48, 0x01, 0x21, 0x23, 0x70, 0x00, 0x23, + 0x80, 0xf8, 0x63, 0x30, 0x5d, 0xf8, 0x21, 0x30, 0xc3, 0xf1, 0xff, 0x03, + 0x55, 0xf8, 0x23, 0xe0, 0x4f, 0xea, 0xee, 0x12, 0x42, 0xea, 0x4e, 0x02, + 0x5f, 0xfa, 0x82, 0xfc, 0xc2, 0xf3, 0xc0, 0x12, 0x42, 0xea, 0x4c, 0x02, + 0xd7, 0xb2, 0xc2, 0xf3, 0xc0, 0x12, 0x42, 0xea, 0x47, 0x02, 0xd6, 0xb2, + 0xc2, 0xf3, 0xc0, 0x12, 0x42, 0xea, 0x46, 0x02, 0xd3, 0xb2, 0x83, 0xea, + 0x0e, 0x03, 0x83, 0xea, 0x0c, 0x03, 0x7b, 0x40, 0x73, 0x40, 0x83, 0xf0, + 0x63, 0x03, 0x63, 0x54, 0xc1, 0x54, 0x01, 0x31, 0xb1, 0xf5, 0x80, 0x7f, + 0xd6, 0xd1, 0xdf, 0xf8, 0x5c, 0xc0, 0x18, 0x4f, 0x18, 0x4e, 0x19, 0x4d, + 0x19, 0x4c, 0x1c, 0xf8, 0x01, 0x2b, 0x12, 0xf0, 0x80, 0x0f, 0x4f, 0xea, + 0x02, 0x43, 0x14, 0xbf, 0x1b, 0x20, 0x00, 0x20, 0x43, 0xea, 0x02, 0x23, + 0x01, 0x39, 0x80, 0xea, 0x42, 0x00, 0xc0, 0xb2, 0x82, 0xea, 0x00, 0x02, + 0x83, 0xea, 0x00, 0x03, 0x43, 0xea, 0x02, 0x63, 0x4f, 0xea, 0x33, 0x62, + 0x47, 0xf8, 0x04, 0x3b, 0x46, 0xf8, 0x04, 0x2b, 0x4f, 0xea, 0x33, 0x42, + 0x4f, 0xea, 0x33, 0x23, 0x45, 0xf8, 0x04, 0x2b, 0x44, 0xf8, 0x04, 0x3b, + 0xdb, 0xd1, 0x0d, 0xf6, 0x04, 0x0d, 0xf0, 0xbd, 0x1c, 0x05, 0x00, 0x24, + 0x1c, 0x04, 0x00, 0x24, 0xb8, 0x25, 0x02, 0x24, 0xb8, 0x15, 0x02, 0x24, + 0xb8, 0x19, 0x02, 0x24, 0xb8, 0x1d, 0x02, 0x24, 0xb8, 0x21, 0x02, 0x24, + 0x10, 0xb5, 0xfb, 0xf7, 0x8b, 0xf9, 0x01, 0x23, 0x80, 0xf8, 0x3f, 0x30, + 0x83, 0x6b, 0x1b, 0xb1, 0x06, 0x4b, 0x4f, 0xf0, 0x80, 0x62, 0x5a, 0x60, + 0xd0, 0xe9, 0x0a, 0x23, 0xbd, 0xe8, 0x10, 0x40, 0x12, 0xf5, 0x7a, 0x72, + 0x43, 0xf1, 0x00, 0x03, 0xfa, 0xf7, 0xa9, 0xbf, 0x00, 0xed, 0x00, 0xe0, + 0x08, 0xb5, 0xef, 0xf3, 0x05, 0x83, 0x53, 0xb1, 0x12, 0x4b, 0x1b, 0x68, + 0x98, 0x69, 0xfb, 0xf7, 0x1b, 0xf9, 0x4f, 0xf4, 0x7a, 0x72, 0x00, 0x23, + 0x09, 0xf0, 0x60, 0xfb, 0x08, 0xbd, 0xfa, 0xf7, 0xd5, 0xfe, 0xef, 0xf3, + 0x05, 0x83, 0x6b, 0xb1, 0x0b, 0x4b, 0xd8, 0x68, 0x0b, 0x4b, 0x1a, 0x68, + 0x18, 0x60, 0x82, 0x42, 0x81, 0xbf, 0x0a, 0x49, 0x0a, 0x68, 0x01, 0x32, + 0x0a, 0x60, 0xfa, 0xf7, 0xb1, 0xfe, 0xeb, 0xe7, 0x03, 0xf0, 0xd2, 0xfa, + 0x00, 0x28, 0xed, 0xd1, 0xdf, 0xf8, 0x14, 0xc0, 0x00, 0xdf, 0xeb, 0xe7, + 0xd8, 0x27, 0x02, 0x24, 0x1c, 0x01, 0x00, 0x24, 0xe4, 0x27, 0x02, 0x24, + 0xe0, 0x27, 0x02, 0x24, 0xd5, 0x47, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, + 0x85, 0xb0, 0xef, 0xf3, 0x05, 0x83, 0x00, 0x2b, 0x42, 0xd0, 0x00, 0x20, + 0xdf, 0xf8, 0x48, 0xa1, 0xda, 0xf8, 0x00, 0x40, 0xfa, 0xf7, 0xa4, 0xfe, + 0xd4, 0xe9, 0x0c, 0x89, 0xfa, 0xf7, 0x8c, 0xfe, 0xa3, 0x6b, 0xb8, 0xeb, + 0x03, 0x08, 0x69, 0xeb, 0xe3, 0x79, 0x18, 0xeb, 0x00, 0x04, 0x49, 0xf1, + 0x00, 0x05, 0xfb, 0xf7, 0x25, 0xf9, 0x4f, 0xf4, 0x7a, 0x73, 0xa4, 0xfb, + 0x03, 0x67, 0x03, 0xfb, 0x05, 0x77, 0x00, 0x20, 0xfa, 0xf7, 0x6e, 0xfd, + 0x00, 0x28, 0x55, 0xd1, 0xda, 0xf8, 0x00, 0x30, 0x93, 0xf8, 0x3d, 0x30, + 0x00, 0x2b, 0x4f, 0xd1, 0x6f, 0xf0, 0x00, 0x43, 0x4f, 0xf0, 0xff, 0x32, + 0x9d, 0x42, 0x08, 0xbf, 0x94, 0x42, 0xec, 0xd0, 0xda, 0xf8, 0x00, 0xb0, + 0x9b, 0xf8, 0x3c, 0x30, 0x00, 0x2b, 0xe6, 0xd1, 0x59, 0x46, 0x02, 0xa8, + 0xfb, 0xf7, 0xbf, 0xf8, 0xdd, 0xe9, 0x02, 0x23, 0xab, 0x42, 0x08, 0xbf, + 0xa2, 0x42, 0x0b, 0xd3, 0x01, 0x23, 0x8b, 0xf8, 0x3d, 0x30, 0xd8, 0xe7, + 0x03, 0xf0, 0x76, 0xfa, 0x00, 0x28, 0xb8, 0xd1, 0xdf, 0xf8, 0xc0, 0xc0, + 0x00, 0xdf, 0xb5, 0xe7, 0xfa, 0xf7, 0x5e, 0xfe, 0xdb, 0xe9, 0x0c, 0x01, + 0xfa, 0xf7, 0x46, 0xfe, 0x23, 0x1a, 0x4f, 0xf0, 0x01, 0x00, 0x00, 0x93, + 0x65, 0xeb, 0x01, 0x03, 0x9b, 0xf8, 0x40, 0x10, 0x01, 0x93, 0xab, 0xf8, + 0x3c, 0x00, 0xdb, 0xe9, 0x08, 0x23, 0x16, 0xeb, 0x02, 0x0c, 0x47, 0xeb, + 0x03, 0x03, 0x39, 0xb9, 0xdb, 0xf8, 0x18, 0x20, 0x11, 0x68, 0x91, 0xf8, + 0x20, 0x10, 0x69, 0xbb, 0x8b, 0xf8, 0x40, 0x00, 0x4f, 0xf0, 0x00, 0x02, + 0x9b, 0xf8, 0x40, 0x00, 0x8b, 0xf8, 0x3e, 0x20, 0x10, 0xb9, 0x01, 0x20, + 0x8b, 0xf8, 0x40, 0x00, 0x62, 0x46, 0x2b, 0xe0, 0xda, 0xf8, 0x00, 0x40, + 0x20, 0x46, 0xfb, 0xf7, 0xc0, 0xfd, 0x00, 0x23, 0x94, 0xf8, 0x40, 0x20, + 0xa3, 0x87, 0x0a, 0xb1, 0x84, 0xf8, 0x40, 0x30, 0xda, 0xf8, 0x00, 0x10, + 0x02, 0xa8, 0xfb, 0xf7, 0x70, 0xf8, 0x02, 0x9c, 0xef, 0xf3, 0x05, 0x83, + 0x3b, 0xb9, 0x03, 0xf0, 0x2d, 0xfa, 0x20, 0xb9, 0xa4, 0xeb, 0x08, 0x00, + 0xdf, 0xf8, 0x30, 0xc0, 0x00, 0xdf, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, + 0xdd, 0xe9, 0x00, 0x12, 0x00, 0x2a, 0x08, 0xbf, 0x05, 0x29, 0xcd, 0xd3, + 0xbc, 0xf5, 0x7a, 0x62, 0x8b, 0xf8, 0x3e, 0x00, 0x43, 0xf1, 0xff, 0x33, + 0x58, 0x46, 0xfa, 0xf7, 0xc6, 0xfe, 0x74, 0xe7, 0xd8, 0x27, 0x02, 0x24, + 0x9d, 0x51, 0x01, 0x08, 0x31, 0x4d, 0x01, 0x08, 0x2d, 0xe9, 0xf3, 0x47, + 0x05, 0x46, 0x00, 0x26, 0x67, 0x4f, 0xff, 0xf7, 0x11, 0xff, 0x85, 0xf8, + 0x24, 0x60, 0xfa, 0xf7, 0xf3, 0xfd, 0x6b, 0x68, 0x01, 0xa9, 0x1b, 0x1a, + 0x00, 0x2b, 0x2b, 0x68, 0xd8, 0xbf, 0x68, 0x60, 0x01, 0x93, 0x1b, 0xb1, + 0x5a, 0x69, 0x12, 0x1a, 0x00, 0x2a, 0x3b, 0xdd, 0x2b, 0x60, 0x03, 0xb1, + 0x1d, 0x61, 0x0e, 0x60, 0x01, 0x99, 0x11, 0xb1, 0x2b, 0x89, 0x01, 0x33, + 0x2b, 0x81, 0xfa, 0xf7, 0xc7, 0xfd, 0x01, 0xa8, 0x00, 0x29, 0x31, 0xd1, + 0x01, 0x9c, 0x05, 0xf1, 0x18, 0x09, 0x4f, 0xf0, 0x01, 0x0a, 0x00, 0x2c, + 0x37, 0xd1, 0xff, 0xf7, 0xe9, 0xfe, 0xfa, 0xf7, 0xcd, 0xfd, 0x2b, 0x68, + 0x00, 0x2b, 0x7e, 0xd0, 0x5c, 0x69, 0x24, 0x1a, 0x24, 0xea, 0xe4, 0x74, + 0xfa, 0xf7, 0xb0, 0xfd, 0xd5, 0xf8, 0x30, 0x80, 0xef, 0xf3, 0x05, 0x83, + 0x00, 0x2b, 0x75, 0xd0, 0xb8, 0xf1, 0x00, 0x0f, 0x7d, 0xd1, 0xab, 0x7a, + 0x00, 0x2b, 0x00, 0xf0, 0x8a, 0x80, 0xfa, 0xf7, 0xb5, 0xfd, 0xab, 0x7a, + 0x00, 0x2b, 0x00, 0xf0, 0x82, 0x80, 0x00, 0x23, 0xab, 0x72, 0x02, 0xb0, + 0xbd, 0xe8, 0xf0, 0x47, 0xfa, 0xf7, 0x96, 0xbd, 0x03, 0xf1, 0x08, 0x01, + 0x9b, 0x68, 0xba, 0xe7, 0x8c, 0x68, 0x0b, 0x46, 0x00, 0x22, 0x9a, 0x60, + 0x1a, 0x46, 0xdb, 0x68, 0x00, 0x2b, 0xfa, 0xd1, 0x02, 0x60, 0x01, 0xf1, + 0x08, 0x00, 0x21, 0x46, 0xbe, 0xe7, 0x23, 0x6a, 0xd4, 0xf8, 0x08, 0x80, + 0x13, 0xb1, 0x04, 0xf1, 0x24, 0x00, 0x98, 0x47, 0xa2, 0x69, 0x00, 0x2a, + 0x0b, 0xdb, 0x63, 0x69, 0x13, 0x44, 0x63, 0x61, 0xff, 0xf7, 0xa4, 0xfe, + 0x21, 0x46, 0x02, 0x46, 0x28, 0x46, 0xfb, 0xf7, 0xcf, 0xfc, 0x44, 0x46, + 0xaf, 0xe7, 0xeb, 0x68, 0x73, 0xb1, 0xa3, 0x42, 0x0c, 0xd8, 0x2b, 0x6a, + 0xa3, 0x42, 0x09, 0xd3, 0xa3, 0x79, 0x2a, 0x69, 0x01, 0x33, 0xdb, 0xb2, + 0x13, 0xfa, 0x02, 0xf2, 0x14, 0xbf, 0xa3, 0x71, 0x84, 0xf8, 0x06, 0xa0, + 0xe3, 0x69, 0x13, 0xb1, 0x04, 0xf1, 0x24, 0x00, 0x98, 0x47, 0xeb, 0x68, + 0x23, 0xb1, 0xa3, 0x42, 0x02, 0xd8, 0x2b, 0x6a, 0xa3, 0x42, 0x01, 0xd2, + 0xa6, 0x71, 0xde, 0xe7, 0xfa, 0xf7, 0x62, 0xfd, 0x48, 0x46, 0xab, 0x69, + 0x83, 0xb1, 0x19, 0x68, 0x22, 0x68, 0x91, 0x42, 0x08, 0xd3, 0x0b, 0xd1, + 0xe3, 0x60, 0x03, 0x68, 0x9b, 0x68, 0xa3, 0x60, 0x04, 0x60, 0xfa, 0xf7, + 0x3f, 0xfd, 0xcc, 0xe7, 0x03, 0xf1, 0x08, 0x00, 0x9b, 0x68, 0xed, 0xe7, + 0xe6, 0x60, 0x03, 0x68, 0xf3, 0xe7, 0x4f, 0xf0, 0xff, 0x34, 0x81, 0xe7, + 0x03, 0xf0, 0x56, 0xf9, 0x02, 0x46, 0x00, 0x28, 0x84, 0xd1, 0x40, 0x46, + 0x01, 0x21, 0x23, 0x46, 0xbc, 0x46, 0x00, 0xdf, 0x81, 0xe7, 0x98, 0xf8, + 0x00, 0x30, 0xf3, 0x2b, 0x7f, 0xf4, 0x7d, 0xaf, 0x00, 0x2c, 0x7f, 0xf4, + 0x7a, 0xaf, 0x22, 0x46, 0x01, 0x21, 0x40, 0x46, 0x03, 0xf0, 0xbe, 0xfd, + 0x73, 0xe7, 0xfa, 0xf7, 0x19, 0xfd, 0xff, 0xf7, 0x45, 0xfe, 0x34, 0xe7, + 0x25, 0x77, 0x01, 0x08, 0x01, 0x4b, 0x58, 0x69, 0x70, 0x47, 0x00, 0xbf, + 0x1c, 0x01, 0x00, 0x24, 0x01, 0x23, 0x0a, 0x4a, 0x90, 0xf9, 0x20, 0x10, + 0x43, 0x70, 0x1c, 0x32, 0x93, 0x68, 0x10, 0xb5, 0x1b, 0xb1, 0x93, 0xf9, + 0x20, 0x40, 0x8c, 0x42, 0x05, 0xdc, 0xc0, 0xe9, 0x02, 0x32, 0x90, 0x60, + 0x03, 0xb1, 0xd8, 0x60, 0x10, 0xbd, 0x1a, 0x46, 0x9b, 0x68, 0xf1, 0xe7, + 0x1c, 0x01, 0x00, 0x24, 0x90, 0xf8, 0x22, 0x30, 0x82, 0x6b, 0x13, 0xf0, + 0x10, 0x0f, 0x0c, 0xbf, 0x60, 0x20, 0x20, 0x20, 0x10, 0x44, 0x70, 0x47, + 0x10, 0xb5, 0xc4, 0x69, 0x62, 0x1c, 0xd0, 0xe9, 0x04, 0x31, 0x0c, 0xd1, + 0x03, 0xb1, 0x59, 0x61, 0x42, 0x69, 0x1a, 0xb1, 0x13, 0x61, 0x00, 0x23, + 0x43, 0x61, 0x01, 0xe0, 0x07, 0x4a, 0x13, 0x63, 0x00, 0x23, 0xc3, 0x61, + 0x10, 0xbd, 0x1b, 0xb1, 0xda, 0x69, 0x59, 0x61, 0x22, 0x44, 0xda, 0x61, + 0x42, 0x69, 0x00, 0x2a, 0xee, 0xd1, 0x01, 0x4a, 0xd3, 0x62, 0xf1, 0xe7, + 0x1c, 0x01, 0x00, 0x24, 0xc2, 0x68, 0x2a, 0xb1, 0x83, 0x68, 0x93, 0x60, + 0x03, 0xb1, 0xda, 0x60, 0x00, 0x23, 0xc3, 0x60, 0x70, 0x47, 0x03, 0x78, + 0xf1, 0x2b, 0x00, 0xd0, 0x70, 0x47, 0xc0, 0x68, 0xf9, 0xe7, 0x83, 0x68, + 0x9a, 0x68, 0x82, 0x60, 0x02, 0xb1, 0xd0, 0x60, 0x00, 0x22, 0x18, 0x46, + 0xda, 0x60, 0x70, 0x47, 0x38, 0xb5, 0x1f, 0x4c, 0x23, 0x7a, 0x02, 0x2b, + 0x35, 0xd1, 0x63, 0x6a, 0x00, 0x2b, 0x34, 0xd0, 0x63, 0x69, 0x4a, 0x1c, + 0x58, 0x70, 0x16, 0xd1, 0x22, 0x6b, 0x00, 0x21, 0x72, 0xb9, 0x4f, 0xf0, + 0xff, 0x30, 0xc3, 0xe9, 0x04, 0x21, 0xd8, 0x61, 0x59, 0xb1, 0x0b, 0x61, + 0x15, 0x48, 0xff, 0xf7, 0xde, 0xff, 0x02, 0x23, 0x43, 0x70, 0xa0, 0x61, + 0x01, 0x20, 0x38, 0xbd, 0x11, 0x46, 0x12, 0x69, 0xec, 0xe7, 0x23, 0x63, + 0xf2, 0xe7, 0xe2, 0x6a, 0x00, 0x20, 0x12, 0xb1, 0xd5, 0x69, 0xa9, 0x42, + 0x0b, 0xd2, 0xd9, 0x61, 0xc3, 0xe9, 0x04, 0x20, 0x58, 0xb1, 0x03, 0x61, + 0x00, 0x2a, 0xe5, 0xd0, 0xd0, 0x69, 0x53, 0x61, 0x41, 0x1a, 0xd1, 0x61, + 0xe0, 0xe7, 0x10, 0x46, 0x49, 0x1b, 0x12, 0x69, 0xeb, 0xe7, 0xe3, 0x62, + 0xf2, 0xe7, 0x00, 0x20, 0xdf, 0xe7, 0x18, 0x46, 0xdd, 0xe7, 0x00, 0xbf, + 0x1c, 0x01, 0x00, 0x24, 0x38, 0x01, 0x00, 0x24, 0x91, 0xf9, 0x20, 0x20, + 0x83, 0x68, 0x10, 0xb5, 0x1b, 0xb1, 0x93, 0xf9, 0x20, 0x40, 0x94, 0x42, + 0x05, 0xda, 0xc1, 0xe9, 0x02, 0x30, 0x81, 0x60, 0x03, 0xb1, 0xd9, 0x60, + 0x10, 0xbd, 0x18, 0x46, 0x9b, 0x68, 0xf1, 0xe7, 0x01, 0x23, 0x01, 0x46, + 0x43, 0x70, 0x01, 0x48, 0xff, 0xf7, 0xe8, 0xbf, 0x38, 0x01, 0x00, 0x24, + 0x70, 0xb5, 0x12, 0x4d, 0x04, 0x46, 0x2e, 0x7a, 0x69, 0x69, 0x90, 0xb9, + 0x02, 0x2e, 0x0f, 0xd1, 0x6c, 0x6a, 0x6c, 0xb1, 0x94, 0xf9, 0x20, 0x20, + 0x91, 0xf9, 0x20, 0x30, 0x9a, 0x42, 0x07, 0xdd, 0x20, 0x46, 0xff, 0xf7, + 0x77, 0xff, 0x08, 0x46, 0xff, 0xf7, 0x32, 0xff, 0x66, 0x70, 0xac, 0x61, + 0x70, 0xbd, 0x02, 0x2e, 0x05, 0xd1, 0x90, 0xf9, 0x20, 0x20, 0x91, 0xf9, + 0x20, 0x30, 0x9a, 0x42, 0xf1, 0xdc, 0x20, 0x46, 0xbd, 0xe8, 0x70, 0x40, + 0xff, 0xf7, 0xd2, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x38, 0xb5, 0x04, 0x46, + 0x15, 0x46, 0xff, 0xf7, 0x33, 0xff, 0x01, 0x60, 0x20, 0x46, 0xff, 0xf7, + 0x39, 0xff, 0x1d, 0xb1, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0xca, 0xbf, + 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0xbe, 0xbf, 0x10, 0xb5, 0x04, 0x46, + 0x80, 0x69, 0x18, 0xb1, 0x00, 0x22, 0x11, 0x46, 0xff, 0xf7, 0xe6, 0xff, + 0x63, 0x78, 0x23, 0x2b, 0x02, 0xbf, 0xa3, 0x68, 0x00, 0x22, 0x9a, 0x61, + 0x10, 0xbd, 0x10, 0xb5, 0x01, 0x46, 0x04, 0x46, 0x64, 0xb1, 0x23, 0x78, + 0xf1, 0x2b, 0x07, 0xd0, 0x08, 0x46, 0xff, 0xf7, 0x37, 0xff, 0x20, 0x46, + 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x8e, 0xbf, 0xe4, 0x68, 0xf1, 0xe7, + 0x10, 0xbd, 0x00, 0x00, 0x38, 0xb5, 0x25, 0x4d, 0xec, 0x6a, 0x00, 0x2c, + 0x45, 0xd0, 0xe3, 0x69, 0x01, 0x3b, 0xe3, 0x61, 0x00, 0x2b, 0x40, 0xd1, + 0x63, 0x78, 0x73, 0x2b, 0x06, 0xd0, 0x09, 0xd8, 0x53, 0x2b, 0x0b, 0xd0, + 0x03, 0xf0, 0xdf, 0x03, 0x43, 0x2b, 0x29, 0xd1, 0x20, 0x46, 0xff, 0xf7, + 0x20, 0xff, 0x25, 0xe0, 0x03, 0xf0, 0xef, 0x03, 0x83, 0x2b, 0xf6, 0xe7, + 0x20, 0x46, 0xff, 0xf7, 0x18, 0xff, 0xc3, 0x78, 0x9b, 0x07, 0x1b, 0xd5, + 0xc0, 0x68, 0x90, 0xf9, 0x21, 0x20, 0xc3, 0x6a, 0xd9, 0x78, 0x89, 0x07, + 0x09, 0xd5, 0x99, 0x68, 0x8c, 0x42, 0x08, 0xbf, 0xa1, 0x68, 0x21, 0xb1, + 0x91, 0xf9, 0x20, 0x10, 0x8a, 0x42, 0xb8, 0xbf, 0x0a, 0x46, 0x5b, 0x69, + 0x00, 0x2b, 0xef, 0xd1, 0x90, 0xf9, 0x20, 0x30, 0x93, 0x42, 0x03, 0xd0, + 0x80, 0xf8, 0x20, 0x20, 0xff, 0xf7, 0xaf, 0xff, 0x20, 0x46, 0xff, 0xf7, + 0xed, 0xfe, 0xff, 0xf7, 0x59, 0xff, 0x24, 0x69, 0x24, 0xb1, 0xe3, 0x69, + 0x00, 0x2b, 0xc1, 0xd0, 0x00, 0x23, 0x63, 0x61, 0xec, 0x62, 0x38, 0xbd, + 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x03, 0x46, 0x53, 0xe8, 0x00, 0x0f, + 0x08, 0x42, 0x03, 0xd1, 0xbf, 0xf3, 0x2f, 0x8f, 0x00, 0x20, 0x05, 0xe0, + 0x20, 0xea, 0x01, 0x02, 0x43, 0xe8, 0x00, 0x24, 0x04, 0xb1, 0xf1, 0xe7, + 0x10, 0xbd, 0x10, 0xb5, 0x03, 0x46, 0x53, 0xe8, 0x00, 0x0f, 0x00, 0xea, + 0x01, 0x02, 0x8a, 0x42, 0x03, 0xd0, 0xbf, 0xf3, 0x2f, 0x8f, 0x00, 0x20, + 0x05, 0xe0, 0x20, 0xea, 0x01, 0x02, 0x43, 0xe8, 0x00, 0x24, 0x04, 0xb1, + 0xef, 0xe7, 0x10, 0xbd, 0x10, 0xb5, 0x43, 0x78, 0x04, 0x46, 0x33, 0x2b, + 0x15, 0xd1, 0x90, 0xf8, 0x23, 0x30, 0x41, 0x6a, 0x03, 0xf0, 0x01, 0x02, + 0x9b, 0x07, 0x08, 0xd4, 0x28, 0x30, 0x1a, 0xb1, 0xff, 0xf7, 0xdd, 0xff, + 0x48, 0xb1, 0x0b, 0xe0, 0xff, 0xf7, 0xc8, 0xff, 0xfa, 0xe7, 0x80, 0x6a, + 0x01, 0xea, 0x00, 0x03, 0x12, 0xb1, 0x99, 0x42, 0xf4, 0xd0, 0x10, 0xbd, + 0x00, 0x2b, 0xfc, 0xd0, 0x01, 0x46, 0x00, 0x22, 0x20, 0x46, 0xbd, 0xe8, + 0x10, 0x40, 0xff, 0xf7, 0x35, 0xbf, 0xd0, 0xe8, 0x5f, 0x3f, 0x13, 0xb9, + 0xbf, 0xf3, 0x2f, 0x8f, 0x04, 0xe0, 0x5a, 0x1e, 0xc0, 0xe8, 0x51, 0x2f, + 0x01, 0xb1, 0xf4, 0xe7, 0x98, 0xb2, 0x70, 0x47, 0x10, 0xb5, 0xd0, 0xe8, + 0x5f, 0x3f, 0x5a, 0x1c, 0x91, 0x42, 0x00, 0xd8, 0x00, 0x22, 0xc0, 0xe8, + 0x54, 0x2f, 0x04, 0xb1, 0xf5, 0xe7, 0x98, 0xb2, 0x10, 0xbd, 0x10, 0xb5, + 0xd0, 0xe8, 0x5f, 0x3f, 0x99, 0x42, 0x02, 0xd8, 0xbf, 0xf3, 0x2f, 0x8f, + 0x04, 0xe0, 0x5a, 0x1c, 0xc0, 0xe8, 0x54, 0x2f, 0x04, 0xb1, 0xf3, 0xe7, + 0x98, 0xb2, 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0xb8, 0xb1, 0x03, 0x78, + 0xf6, 0x2b, 0x14, 0xd1, 0x83, 0x68, 0x3b, 0xb1, 0xff, 0xf7, 0x73, 0xfe, + 0x01, 0x22, 0x00, 0x21, 0xff, 0xf7, 0xfe, 0xfe, 0x00, 0x20, 0x10, 0xbd, + 0xc1, 0x89, 0x0c, 0x30, 0xff, 0xf7, 0xdd, 0xff, 0xe3, 0x89, 0x83, 0x42, + 0x8c, 0xbf, 0x00, 0x20, 0x6f, 0xf0, 0x02, 0x00, 0xf3, 0xe7, 0x6f, 0xf0, + 0x03, 0x00, 0xf0, 0xe7, 0x83, 0x68, 0x10, 0xb5, 0x04, 0x46, 0x63, 0xb1, + 0x0c, 0x30, 0xff, 0xf7, 0xb2, 0xff, 0x40, 0xb1, 0x20, 0x46, 0xff, 0xf7, + 0x54, 0xfe, 0x00, 0x22, 0xbd, 0xe8, 0x10, 0x40, 0x11, 0x46, 0xff, 0xf7, + 0xdd, 0xbe, 0x10, 0xbd, 0x28, 0x4b, 0x5a, 0x69, 0x70, 0xb5, 0x04, 0x46, + 0x00, 0x2a, 0x41, 0xd0, 0x00, 0x28, 0x42, 0xd0, 0x03, 0x78, 0xf5, 0x2b, + 0x3f, 0xd1, 0x03, 0x7e, 0x00, 0x2b, 0x3f, 0xd0, 0xc1, 0x68, 0x91, 0x42, + 0x3c, 0xd1, 0x01, 0x3b, 0xdb, 0xb2, 0x03, 0x76, 0x13, 0xbb, 0x43, 0x69, + 0x0b, 0xb1, 0x01, 0x69, 0x19, 0x61, 0x21, 0x69, 0xf1, 0xb1, 0x4b, 0x61, + 0x92, 0xf9, 0x21, 0x30, 0xd5, 0x6a, 0xdd, 0xb9, 0x82, 0xf8, 0x20, 0x30, + 0xa3, 0x68, 0x83, 0xb1, 0x20, 0x46, 0xff, 0xf7, 0x26, 0xfe, 0x06, 0x46, + 0x2a, 0x46, 0x29, 0x46, 0xff, 0xf7, 0xb0, 0xfe, 0xf3, 0x6a, 0xc4, 0xe9, + 0x03, 0x65, 0x63, 0x61, 0x03, 0xb1, 0x1c, 0x61, 0x01, 0x23, 0xf4, 0x62, + 0x23, 0x76, 0x00, 0x20, 0xff, 0xf7, 0x7c, 0xfe, 0x00, 0x20, 0x0f, 0xe0, + 0xd3, 0x62, 0xdf, 0xe7, 0xe9, 0x78, 0x89, 0x07, 0x06, 0xd5, 0xa9, 0x68, + 0x21, 0xb1, 0x91, 0xf9, 0x20, 0x10, 0x8b, 0x42, 0xb8, 0xbf, 0x0b, 0x46, + 0x6d, 0x69, 0xd6, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0xbd, 0x6f, 0xf0, + 0x03, 0x00, 0xfb, 0xe7, 0x6f, 0xf0, 0x02, 0x00, 0xf8, 0xe7, 0x00, 0xbf, + 0x1c, 0x01, 0x00, 0x24, 0x22, 0x4b, 0x70, 0xb5, 0x5d, 0x69, 0x04, 0x46, + 0x0e, 0x46, 0x00, 0x2d, 0x35, 0xd0, 0x00, 0x28, 0x36, 0xd0, 0x03, 0x78, + 0xf5, 0x2b, 0x33, 0xd1, 0x03, 0x7e, 0x53, 0xb9, 0xc0, 0xe9, 0x03, 0x53, + 0xeb, 0x6a, 0x43, 0x61, 0x03, 0xb1, 0x18, 0x61, 0x01, 0x23, 0xec, 0x62, + 0x00, 0x20, 0x23, 0x76, 0x70, 0xbd, 0xc2, 0x78, 0xd1, 0x07, 0x06, 0xd5, + 0xc1, 0x68, 0xa9, 0x42, 0x03, 0xd1, 0xff, 0x2b, 0x21, 0xd0, 0x01, 0x33, + 0xf2, 0xe7, 0xf6, 0xb1, 0x93, 0x07, 0x0a, 0xd5, 0xe0, 0x68, 0x95, 0xf9, + 0x20, 0x30, 0x90, 0xf9, 0x20, 0x20, 0x9a, 0x42, 0x03, 0xda, 0x80, 0xf8, + 0x20, 0x30, 0xff, 0xf7, 0x78, 0xfe, 0x31, 0x46, 0x53, 0x20, 0xff, 0xf7, + 0xcd, 0xfd, 0x18, 0xb1, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x0c, 0xfe, + 0x6f, 0xf0, 0x01, 0x00, 0xda, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0xd7, 0xe7, + 0x6f, 0xf0, 0x03, 0x00, 0xd4, 0xe7, 0x6f, 0xf0, 0x02, 0x00, 0xd1, 0xe7, + 0x1c, 0x01, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, 0x00, 0x26, + 0x01, 0x27, 0x0c, 0xb9, 0xbd, 0xe8, 0xf0, 0x81, 0xe3, 0x78, 0xd4, 0xf8, + 0x14, 0x80, 0x1b, 0x07, 0x12, 0xd5, 0xa3, 0x68, 0x26, 0x76, 0x7b, 0xb1, + 0x20, 0x46, 0xff, 0xf7, 0x9e, 0xfd, 0x00, 0x22, 0x05, 0x46, 0x11, 0x46, + 0xff, 0xf7, 0x28, 0xfe, 0xeb, 0x6a, 0xc4, 0xe9, 0x03, 0x56, 0x63, 0x61, + 0x03, 0xb1, 0x1c, 0x61, 0xec, 0x62, 0x27, 0x76, 0x44, 0x46, 0xe2, 0xe7, + 0x03, 0x46, 0x53, 0xe8, 0x00, 0x0f, 0x42, 0x1c, 0x43, 0xe8, 0x00, 0x21, + 0x01, 0xb1, 0xf8, 0xe7, 0x70, 0x47, 0x03, 0x6b, 0x30, 0xb4, 0xbb, 0xb1, + 0xcd, 0x78, 0x00, 0x24, 0xda, 0x78, 0xaa, 0x42, 0x0a, 0xd3, 0x1a, 0x46, + 0xc1, 0xe9, 0x01, 0x24, 0x62, 0xb1, 0x91, 0x60, 0x7c, 0xb1, 0x61, 0x60, + 0x28, 0x30, 0x30, 0xbc, 0xff, 0xf7, 0xe4, 0xbf, 0x5a, 0x68, 0x1c, 0x46, + 0x00, 0x2a, 0xf1, 0xd0, 0x13, 0x46, 0xeb, 0xe7, 0xc1, 0x62, 0xf1, 0xe7, + 0xc1, 0xe9, 0x01, 0x33, 0xc1, 0x62, 0x01, 0x63, 0xee, 0xe7, 0x30, 0xb5, + 0xf0, 0xb1, 0xc3, 0x68, 0x8b, 0x42, 0x1b, 0xd8, 0x03, 0x69, 0x8b, 0x42, + 0x18, 0xd9, 0x00, 0xf1, 0x14, 0x03, 0x1a, 0x68, 0x0a, 0x60, 0xbf, 0xf3, + 0x5f, 0x8f, 0x53, 0xe8, 0x00, 0x2f, 0x0c, 0x68, 0x94, 0x42, 0xf6, 0xd1, + 0x43, 0xe8, 0x00, 0x15, 0x05, 0xb1, 0xf2, 0xe7, 0x04, 0x30, 0x50, 0xe8, + 0x00, 0x3f, 0x5a, 0x1e, 0x40, 0xe8, 0x00, 0x21, 0x01, 0xb1, 0xf8, 0xe7, + 0x00, 0x20, 0x30, 0xbd, 0x6f, 0xf0, 0x03, 0x00, 0xfb, 0xe7, 0x10, 0xb5, + 0x90, 0xb1, 0x00, 0xf1, 0x14, 0x03, 0x53, 0xe8, 0x00, 0x4f, 0x14, 0xb9, + 0xbf, 0xf3, 0x2f, 0x8f, 0x04, 0xe0, 0x22, 0x68, 0x43, 0xe8, 0x00, 0x21, + 0x01, 0xb1, 0xf4, 0xe7, 0x14, 0xb1, 0x04, 0x30, 0xff, 0xf7, 0xa0, 0xff, + 0x20, 0x46, 0x10, 0xbd, 0x04, 0x46, 0xfb, 0xe7, 0x30, 0xb5, 0xc0, 0xb1, + 0x89, 0xb1, 0xc2, 0xb1, 0xcb, 0xb1, 0x00, 0x24, 0x01, 0x60, 0xc3, 0x60, + 0x43, 0x61, 0xc0, 0xe9, 0x01, 0x42, 0x02, 0xfb, 0x01, 0xf4, 0x1d, 0x19, + 0x05, 0x61, 0x18, 0x46, 0x01, 0x39, 0x04, 0xd1, 0xa2, 0x1a, 0x99, 0x50, + 0x01, 0x21, 0x08, 0x46, 0x30, 0xbd, 0x85, 0x18, 0x05, 0x60, 0x28, 0x46, + 0xf4, 0xe7, 0x01, 0x46, 0xf7, 0xe7, 0x11, 0x46, 0xf5, 0xe7, 0x19, 0x46, + 0xf3, 0xe7, 0x30, 0xb5, 0x80, 0xb1, 0xc9, 0xb1, 0xa1, 0xf1, 0x08, 0x05, + 0x00, 0xf1, 0x08, 0x04, 0x00, 0x22, 0xa5, 0x42, 0x09, 0xd1, 0x6b, 0x68, + 0x23, 0xf0, 0x03, 0x04, 0x43, 0x68, 0x1b, 0x1b, 0x43, 0x60, 0x3a, 0xb9, + 0x6a, 0x60, 0x01, 0x20, 0x30, 0xbd, 0x23, 0x68, 0x22, 0x46, 0x3b, 0xb1, + 0x1c, 0x46, 0xee, 0xe7, 0x51, 0xf8, 0x08, 0x3c, 0x13, 0x60, 0xf4, 0xe7, + 0x08, 0x46, 0xf3, 0xe7, 0x18, 0x46, 0xf1, 0xe7, 0x10, 0xb5, 0xc3, 0x78, + 0x04, 0x46, 0x13, 0xf0, 0x01, 0x03, 0x22, 0xd1, 0x03, 0x80, 0x83, 0x78, + 0x9a, 0x07, 0x08, 0xd5, 0x13, 0xf0, 0x10, 0x0f, 0x01, 0x6b, 0x13, 0x4b, + 0x0f, 0xd0, 0xd3, 0xf8, 0x84, 0x00, 0xff, 0xf7, 0x70, 0xff, 0xa3, 0x78, + 0xdb, 0x07, 0x1c, 0xd5, 0x0e, 0x4b, 0x21, 0x46, 0xd3, 0xf8, 0x88, 0x00, + 0x38, 0xb1, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x64, 0xbf, 0x58, 0x6f, + 0xff, 0xf7, 0xbd, 0xff, 0xef, 0xe7, 0xd3, 0xf8, 0x80, 0x00, 0xbd, 0xe8, + 0x10, 0x40, 0xff, 0xf7, 0xb6, 0xbf, 0x04, 0x23, 0x43, 0x70, 0x00, 0x23, + 0xc3, 0x60, 0x03, 0x4b, 0x5a, 0x6b, 0x82, 0x60, 0x02, 0xb1, 0xd0, 0x60, + 0x5c, 0x63, 0x10, 0xbd, 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, + 0x00, 0x28, 0x3a, 0xd0, 0x03, 0x78, 0xf1, 0x2b, 0x37, 0xd1, 0x43, 0x78, + 0x03, 0xf0, 0x0f, 0x03, 0x02, 0x2b, 0x06, 0xd0, 0x03, 0x2b, 0x27, 0xd0, + 0x01, 0x2b, 0x22, 0xd0, 0x6f, 0xf0, 0x02, 0x00, 0x1e, 0xe0, 0x17, 0x4b, + 0x1a, 0x7a, 0x02, 0x2a, 0xf8, 0xd1, 0x5b, 0x6a, 0x00, 0x2b, 0xf5, 0xd0, + 0xe0, 0x6a, 0xff, 0xf7, 0xe5, 0xfe, 0x20, 0x46, 0xff, 0xf7, 0x34, 0xfd, + 0x61, 0x78, 0x02, 0x29, 0x17, 0xd1, 0x10, 0x48, 0xff, 0xf7, 0x8d, 0xfc, + 0x0d, 0x4b, 0x41, 0x70, 0x98, 0x61, 0xef, 0xf3, 0x09, 0x82, 0xa2, 0x63, + 0x00, 0x22, 0x5a, 0x61, 0x20, 0x46, 0xff, 0xf7, 0x99, 0xff, 0x00, 0x20, + 0x10, 0xbd, 0xff, 0xf7, 0x6f, 0xfc, 0xe3, 0xe7, 0xff, 0xf7, 0x6c, 0xfc, + 0xff, 0xf7, 0x4a, 0xfc, 0xde, 0xe7, 0x00, 0x20, 0xff, 0xf7, 0xdc, 0xfc, + 0xee, 0xe7, 0x6f, 0xf0, 0x03, 0x00, 0xef, 0xe7, 0x1c, 0x01, 0x00, 0x24, + 0x38, 0x01, 0x00, 0x24, 0x70, 0xb5, 0x0f, 0x4c, 0x26, 0x7a, 0x02, 0x2e, + 0x18, 0xd1, 0x63, 0x6a, 0xb3, 0xb1, 0x65, 0x69, 0xe8, 0x6a, 0xff, 0xf7, + 0xb1, 0xfe, 0x28, 0x46, 0xff, 0xf7, 0x00, 0xfd, 0x04, 0xf1, 0x1c, 0x00, + 0xff, 0xf7, 0x5b, 0xfc, 0x46, 0x70, 0xa0, 0x61, 0xef, 0xf3, 0x09, 0x83, + 0xab, 0x63, 0x00, 0x23, 0x28, 0x46, 0x63, 0x61, 0xbd, 0xe8, 0x70, 0x40, + 0xff, 0xf7, 0x66, 0xbf, 0x70, 0xbd, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, + 0x70, 0xb5, 0x05, 0x46, 0x38, 0xb3, 0x03, 0x78, 0xf6, 0x2b, 0x24, 0xd1, + 0x83, 0x68, 0x63, 0xb1, 0x28, 0x46, 0xff, 0xf7, 0x40, 0xfc, 0x00, 0x22, + 0x6f, 0xf0, 0x02, 0x01, 0xff, 0xf7, 0xca, 0xfc, 0xa8, 0x68, 0x00, 0x28, + 0xf4, 0xd1, 0xff, 0xf7, 0x9d, 0xfc, 0xab, 0x78, 0x00, 0x26, 0x13, 0xf0, + 0x01, 0x03, 0x2e, 0x70, 0x12, 0xd0, 0x0a, 0x4b, 0x29, 0x46, 0xd3, 0xf8, + 0x98, 0x40, 0x24, 0xb1, 0x20, 0x46, 0xff, 0xf7, 0xc2, 0xfe, 0x30, 0x46, + 0x70, 0xbd, 0xd3, 0xf8, 0x80, 0x00, 0xff, 0xf7, 0x18, 0xff, 0x20, 0x46, + 0xf8, 0xe7, 0x6f, 0xf0, 0x03, 0x00, 0xf5, 0xe7, 0x18, 0x46, 0xf3, 0xe7, + 0x1c, 0x01, 0x00, 0x24, 0x70, 0xb5, 0x04, 0x46, 0x00, 0x28, 0x49, 0xd0, + 0x03, 0x78, 0xf5, 0x2b, 0x46, 0xd1, 0x03, 0x7e, 0xbb, 0xb1, 0x63, 0x69, + 0xc0, 0x68, 0x0b, 0xb1, 0x22, 0x69, 0x1a, 0x61, 0x22, 0x69, 0x02, 0xb3, + 0x53, 0x61, 0x90, 0xf9, 0x21, 0x20, 0xc3, 0x6a, 0xeb, 0xb9, 0x90, 0xf9, + 0x20, 0x30, 0x93, 0x42, 0x03, 0xd0, 0x80, 0xf8, 0x20, 0x20, 0xff, 0xf7, + 0xac, 0xfc, 0xa0, 0x68, 0xf8, 0xb9, 0xff, 0xf7, 0x5f, 0xfc, 0xa0, 0x78, + 0x00, 0x26, 0x10, 0xf0, 0x01, 0x00, 0x26, 0x70, 0x08, 0xd0, 0x15, 0x4b, + 0x21, 0x46, 0xd3, 0xf8, 0x94, 0x50, 0xdd, 0xb1, 0x28, 0x46, 0xff, 0xf7, + 0x84, 0xfe, 0x30, 0x46, 0x70, 0xbd, 0xc3, 0x62, 0xdd, 0xe7, 0xd9, 0x78, + 0x89, 0x07, 0x06, 0xd5, 0x99, 0x68, 0x21, 0xb1, 0x91, 0xf9, 0x20, 0x10, + 0x8a, 0x42, 0xb8, 0xbf, 0x0a, 0x46, 0x5b, 0x69, 0xd4, 0xe7, 0x20, 0x46, + 0xff, 0xf7, 0xd7, 0xfb, 0x00, 0x22, 0x6f, 0xf0, 0x02, 0x01, 0xff, 0xf7, + 0x61, 0xfc, 0xd4, 0xe7, 0xd3, 0xf8, 0x80, 0x00, 0xff, 0xf7, 0xc3, 0xfe, + 0x28, 0x46, 0xe1, 0xe7, 0x6f, 0xf0, 0x03, 0x00, 0xde, 0xe7, 0x00, 0xbf, + 0x1c, 0x01, 0x00, 0x24, 0xf0, 0xb5, 0x68, 0xb3, 0x81, 0xb1, 0x0f, 0x31, + 0x00, 0xf1, 0x08, 0x06, 0x21, 0xf0, 0x07, 0x07, 0x33, 0x46, 0x36, 0x68, + 0x5c, 0x68, 0xf1, 0x1a, 0x24, 0xf0, 0x03, 0x04, 0x09, 0x1b, 0x8f, 0x42, + 0x04, 0xd9, 0x31, 0x68, 0x00, 0x29, 0xf3, 0xd1, 0x08, 0x46, 0xf0, 0xbd, + 0x45, 0x68, 0x3a, 0x43, 0x04, 0x68, 0x3d, 0x44, 0x45, 0x60, 0x20, 0x44, + 0x50, 0xf8, 0x04, 0x1c, 0x08, 0x38, 0x8d, 0x42, 0x88, 0xbf, 0x45, 0x60, + 0x58, 0x68, 0x18, 0xb9, 0x03, 0xf1, 0x08, 0x01, 0x5a, 0x60, 0xeb, 0xe7, + 0x20, 0xf0, 0x03, 0x00, 0x19, 0x18, 0x1e, 0x50, 0x4a, 0x60, 0x19, 0x60, + 0x08, 0x31, 0xe3, 0xe7, 0x01, 0x46, 0xe1, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, + 0x85, 0xb0, 0x81, 0x46, 0x02, 0x91, 0x20, 0xb9, 0x00, 0x24, 0x20, 0x46, + 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0x2a, 0x00, 0xf0, 0x86, 0x80, + 0x94, 0x68, 0xb4, 0xb1, 0xa0, 0x07, 0xf3, 0xd1, 0xd3, 0x68, 0x43, 0x2b, + 0xf0, 0xd9, 0x97, 0x69, 0xd2, 0xe9, 0x04, 0x65, 0x8e, 0xb1, 0x71, 0x07, + 0xea, 0xd1, 0x00, 0x2d, 0xe8, 0xd0, 0x77, 0xb9, 0x18, 0x27, 0x6b, 0x07, + 0xe4, 0xd1, 0xa5, 0xf1, 0x48, 0x01, 0x57, 0x4b, 0x99, 0x42, 0x0b, 0xd9, + 0xde, 0xe7, 0xd3, 0x68, 0x00, 0x2b, 0xea, 0xd0, 0xda, 0xe7, 0x00, 0x2f, + 0x64, 0xd0, 0x7b, 0x1e, 0x37, 0x2b, 0xd5, 0xd8, 0x00, 0x2d, 0xec, 0xd1, + 0xd2, 0xe9, 0x00, 0xa3, 0x01, 0x93, 0x00, 0x2c, 0x69, 0xd1, 0x4e, 0x4b, + 0xd3, 0xf8, 0x88, 0x00, 0x00, 0x28, 0x5d, 0xd0, 0xff, 0xf7, 0x13, 0xfe, + 0x04, 0x46, 0x00, 0x28, 0xc4, 0xd0, 0x4f, 0xf0, 0x01, 0x08, 0xa6, 0xb9, + 0xdf, 0xf8, 0x1c, 0xb1, 0x00, 0x2d, 0x71, 0xd1, 0xdb, 0xf8, 0x84, 0x00, + 0x00, 0x28, 0x57, 0xd0, 0xff, 0xf7, 0x03, 0xfe, 0x00, 0x28, 0x70, 0xd0, + 0x48, 0xf0, 0x10, 0x08, 0x06, 0x46, 0x4f, 0xf4, 0x80, 0x55, 0x48, 0xf0, + 0x02, 0x08, 0x00, 0x2c, 0xac, 0xd0, 0x40, 0xf2, 0xf1, 0x13, 0xfd, 0x22, + 0x65, 0x63, 0x40, 0x3d, 0x23, 0x80, 0x7f, 0xb2, 0x01, 0x9b, 0x35, 0x44, + 0x62, 0x84, 0xe3, 0x70, 0x00, 0x23, 0x38, 0x4a, 0x84, 0xf8, 0x02, 0x80, + 0xc4, 0xf8, 0x04, 0xa0, 0x84, 0xf8, 0x20, 0x70, 0x84, 0xf8, 0x21, 0x70, + 0xc4, 0xe9, 0x0e, 0x59, 0xc4, 0xe9, 0x02, 0x33, 0xc4, 0xe9, 0x04, 0x33, + 0xc4, 0xe9, 0x06, 0x33, 0xc4, 0xe9, 0x09, 0x33, 0xc4, 0xe9, 0x0b, 0x36, + 0x32, 0x60, 0xa2, 0x6b, 0x11, 0x46, 0x02, 0xf1, 0x34, 0x00, 0x42, 0xf8, + 0x04, 0x3b, 0x82, 0x42, 0xfb, 0xd1, 0x2a, 0x4b, 0x20, 0x46, 0x2a, 0x4a, + 0xc1, 0xe9, 0x0d, 0x39, 0x4f, 0xf0, 0x80, 0x73, 0xcb, 0x63, 0x02, 0x9b, + 0x0b, 0x62, 0x23, 0x4b, 0x1a, 0x66, 0xff, 0xf7, 0x69, 0xfb, 0x74, 0xe7, + 0x18, 0x27, 0x9b, 0xe7, 0x92, 0x46, 0x16, 0x46, 0x18, 0x27, 0x15, 0x46, + 0x01, 0x92, 0x9c, 0xe7, 0x01, 0x22, 0x44, 0x21, 0xd3, 0xf8, 0x80, 0x00, + 0xff, 0xf7, 0x2e, 0xff, 0x9c, 0xe7, 0x4f, 0xf0, 0x00, 0x08, 0x9e, 0xe7, + 0x2a, 0x46, 0x4f, 0xf4, 0x80, 0x55, 0x4f, 0xf4, 0x80, 0x51, 0xdb, 0xf8, + 0x74, 0x00, 0xff, 0xf7, 0x21, 0xff, 0xf8, 0xb9, 0xb8, 0xf1, 0x00, 0x0f, + 0x1e, 0xd0, 0xdb, 0xf8, 0x88, 0x20, 0x7a, 0xb1, 0x21, 0x46, 0x10, 0x46, + 0x00, 0x24, 0xff, 0xf7, 0x74, 0xfd, 0x9a, 0xe7, 0x32, 0x46, 0x29, 0x46, + 0xdb, 0xf8, 0x74, 0x00, 0xff, 0xf7, 0x0e, 0xff, 0xeb, 0xe7, 0x4f, 0xf4, + 0x80, 0x55, 0xe9, 0xe7, 0x21, 0x46, 0xdb, 0xf8, 0x80, 0x00, 0x03, 0x92, + 0xff, 0xf7, 0xbf, 0xfd, 0x03, 0x9a, 0x14, 0x46, 0x16, 0x46, 0x86, 0xe7, + 0x06, 0x46, 0x84, 0xe7, 0x44, 0x46, 0x82, 0xe7, 0xb7, 0xff, 0xff, 0x7f, + 0x1c, 0x01, 0x00, 0x24, 0xa5, 0x2e, 0x5a, 0xe2, 0x05, 0x6e, 0x01, 0x08, + 0x95, 0x3e, 0x01, 0x08, 0x70, 0xb5, 0x4f, 0xf6, 0xfe, 0x73, 0x14, 0x46, + 0x42, 0x1e, 0x05, 0x46, 0x0e, 0x46, 0x9a, 0x42, 0x01, 0xd9, 0x00, 0x20, + 0x70, 0xbd, 0x88, 0x42, 0xfb, 0xd3, 0xcc, 0xb1, 0xa0, 0x68, 0x22, 0x68, + 0x90, 0xb1, 0x10, 0xf0, 0x03, 0x03, 0xf4, 0xd1, 0xe1, 0x68, 0x0f, 0x29, + 0xf1, 0xd9, 0x14, 0x46, 0xf6, 0x22, 0x83, 0x70, 0x00, 0x23, 0x44, 0x60, + 0x02, 0x70, 0x83, 0x60, 0x0d, 0x4a, 0x0e, 0x4b, 0x86, 0x81, 0xc5, 0x81, + 0x9a, 0x66, 0xe5, 0xe7, 0xe3, 0x68, 0x00, 0x2b, 0xe1, 0xd1, 0x14, 0x46, + 0x09, 0x4b, 0xd3, 0xf8, 0x98, 0x00, 0x28, 0xb1, 0xff, 0xf7, 0x47, 0xfd, + 0x00, 0x28, 0xd8, 0xd0, 0x01, 0x23, 0xe5, 0xe7, 0x01, 0x22, 0x10, 0x21, + 0xd3, 0xf8, 0x80, 0x00, 0xff, 0xf7, 0xba, 0xfe, 0xf4, 0xe7, 0x00, 0xbf, + 0x6d, 0x3f, 0x01, 0x08, 0x1c, 0x01, 0x00, 0x24, 0x38, 0xb5, 0x03, 0x46, + 0x60, 0xb3, 0xd0, 0xe9, 0x00, 0x45, 0x80, 0x68, 0xa0, 0xb1, 0x10, 0xf0, + 0x03, 0x02, 0x01, 0xd0, 0x00, 0x20, 0x38, 0xbd, 0xdb, 0x68, 0x1b, 0x2b, + 0xfa, 0xd9, 0x13, 0x46, 0xf5, 0x22, 0x83, 0x70, 0x00, 0x23, 0xc5, 0x70, + 0x02, 0x70, 0x44, 0x60, 0x03, 0x76, 0xc0, 0xe9, 0x02, 0x33, 0xc0, 0xe9, + 0x04, 0x33, 0xee, 0xe7, 0xdb, 0x68, 0x00, 0x2b, 0xea, 0xd1, 0x0a, 0x4b, + 0xd3, 0xf8, 0x94, 0x00, 0x30, 0xb9, 0x01, 0x22, 0x1c, 0x21, 0xd3, 0xf8, + 0x80, 0x00, 0xff, 0xf7, 0x8b, 0xfe, 0x01, 0xe0, 0xff, 0xf7, 0x0b, 0xfd, + 0x00, 0x28, 0xdb, 0xd0, 0x01, 0x23, 0xdf, 0xe7, 0x04, 0x46, 0x05, 0x46, + 0xeb, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x98, 0xb1, + 0x40, 0xea, 0x01, 0x03, 0x13, 0xf0, 0x07, 0x03, 0x0e, 0xd1, 0x17, 0x29, + 0x0a, 0xd9, 0x01, 0x60, 0x08, 0x39, 0x10, 0x22, 0x0c, 0x18, 0x42, 0x60, + 0x84, 0x60, 0x0b, 0x50, 0x81, 0x68, 0x4a, 0x60, 0xc3, 0x60, 0x01, 0x23, + 0x18, 0x46, 0x10, 0xbd, 0x00, 0x23, 0xfb, 0xe7, 0x01, 0x4b, 0xd8, 0x68, + 0x70, 0x47, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x38, 0xb5, 0x1c, 0x4c, + 0x25, 0x7a, 0x01, 0x2d, 0x28, 0xd0, 0x7d, 0xbb, 0x1a, 0x4b, 0x29, 0x46, + 0x28, 0x46, 0xe3, 0x65, 0x10, 0x23, 0xa4, 0xf8, 0x54, 0x30, 0x05, 0x23, + 0x23, 0x64, 0xff, 0xf7, 0xd1, 0xff, 0x08, 0xb1, 0xc4, 0xf8, 0x80, 0x50, + 0x00, 0x21, 0x08, 0x46, 0xff, 0xf7, 0xca, 0xff, 0xb0, 0xb9, 0xd4, 0xf8, + 0x80, 0x30, 0x00, 0x21, 0x63, 0x67, 0x08, 0x46, 0xff, 0xf7, 0xc2, 0xff, + 0x80, 0xb9, 0xd4, 0xf8, 0x80, 0x30, 0x00, 0x21, 0xa3, 0x67, 0x08, 0x46, + 0xff, 0xf7, 0xba, 0xff, 0x50, 0xb9, 0xd4, 0xf8, 0x80, 0x30, 0xe3, 0x67, + 0x01, 0x23, 0x23, 0x72, 0x00, 0x20, 0x38, 0xbd, 0x00, 0x23, 0xe8, 0xe7, + 0x00, 0x23, 0xee, 0xe7, 0x00, 0x23, 0xf4, 0xe7, 0x4f, 0xf0, 0xff, 0x30, + 0xf5, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0xf0, 0x43, 0x02, 0x24, + 0x06, 0x4b, 0xda, 0x6a, 0x3a, 0xb1, 0xd0, 0x69, 0x5b, 0x6c, 0x1b, 0xb1, + 0x1b, 0x69, 0x98, 0x42, 0x28, 0xbf, 0x18, 0x46, 0x70, 0x47, 0x4f, 0xf0, + 0xff, 0x30, 0xf5, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, + 0xd0, 0xb1, 0x02, 0x68, 0x80, 0x68, 0x98, 0xb1, 0x10, 0xf0, 0x03, 0x03, + 0x01, 0xd0, 0x00, 0x20, 0x10, 0xbd, 0xe1, 0x68, 0x0f, 0x29, 0xfa, 0xd9, + 0x14, 0x46, 0xf3, 0x22, 0x83, 0x70, 0x00, 0x23, 0x44, 0x60, 0x02, 0x70, + 0x0d, 0x4a, 0xc0, 0xe9, 0x02, 0x33, 0x0d, 0x4b, 0x5a, 0x66, 0xef, 0xe7, + 0xe3, 0x68, 0x00, 0x2b, 0xeb, 0xd1, 0x14, 0x46, 0x09, 0x4b, 0xd3, 0xf8, + 0x90, 0x00, 0x28, 0xb1, 0xff, 0xf7, 0x71, 0xfc, 0x00, 0x28, 0xe2, 0xd0, + 0x01, 0x23, 0xe6, 0xe7, 0x01, 0x22, 0x10, 0x21, 0xd3, 0xf8, 0x80, 0x00, + 0xff, 0xf7, 0xe4, 0xfd, 0xf4, 0xe7, 0x00, 0xbf, 0xdf, 0x77, 0x01, 0x08, + 0x1c, 0x01, 0x00, 0x24, 0x01, 0x46, 0x08, 0xb5, 0x38, 0xb1, 0x13, 0x20, + 0xff, 0xf7, 0xa6, 0xf9, 0x80, 0xf0, 0x01, 0x00, 0xc0, 0xb2, 0x40, 0x42, + 0x08, 0xbd, 0x6f, 0xf0, 0x03, 0x00, 0xfb, 0xe7, 0x00, 0x48, 0x70, 0x47, + 0x14, 0xe2, 0x01, 0x08, 0xd0, 0xe9, 0x09, 0x31, 0xc2, 0x6a, 0x00, 0x6a, + 0x42, 0x43, 0x01, 0xfb, 0x03, 0x23, 0xa0, 0xfb, 0x01, 0x01, 0x19, 0x44, + 0x70, 0x47, 0xd0, 0xe9, 0x06, 0x01, 0x70, 0x47, 0xd0, 0xe9, 0x04, 0x01, + 0x70, 0x47, 0xd0, 0xe9, 0x02, 0x01, 0x70, 0x47, 0x01, 0x68, 0x2d, 0xe9, + 0xf0, 0x47, 0x17, 0x46, 0x98, 0x46, 0x09, 0x6b, 0x06, 0x46, 0xdd, 0xe9, + 0x08, 0x9a, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x38, 0x46, 0x41, 0x46, + 0x08, 0xf0, 0x7a, 0xfc, 0x13, 0x43, 0x02, 0xd0, 0x00, 0x20, 0xbd, 0xe8, + 0xf0, 0x87, 0x17, 0xeb, 0x09, 0x04, 0x33, 0x68, 0x30, 0x46, 0x48, 0xeb, + 0x0a, 0x05, 0x14, 0xf1, 0xff, 0x32, 0x19, 0x6b, 0x45, 0xf1, 0xff, 0x33, + 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x20, 0x46, 0x29, 0x46, 0x08, 0xf0, + 0x63, 0xfc, 0x13, 0x43, 0xe8, 0xd1, 0x33, 0x68, 0x30, 0x46, 0x9b, 0x6b, + 0x98, 0x47, 0xa9, 0x42, 0x08, 0xbf, 0xa0, 0x42, 0x2c, 0xbf, 0x01, 0x20, + 0x00, 0x20, 0xde, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, 0x1e, 0x46, 0x03, 0x68, + 0x15, 0x46, 0x04, 0x46, 0x9b, 0x6a, 0xdd, 0xe9, 0x08, 0x7a, 0x98, 0x47, + 0x02, 0x46, 0x0b, 0x46, 0x28, 0x46, 0x31, 0x46, 0x08, 0xf0, 0x46, 0xfc, + 0x13, 0x43, 0x02, 0xd0, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x87, 0x23, 0x68, + 0x20, 0x46, 0x9b, 0x6a, 0x98, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x38, 0x46, + 0x51, 0x46, 0x08, 0xf0, 0x37, 0xfc, 0x13, 0x43, 0xf0, 0xd1, 0x15, 0xeb, + 0x07, 0x08, 0x23, 0x68, 0x20, 0x46, 0x46, 0xeb, 0x0a, 0x09, 0x9b, 0x6b, + 0x98, 0x47, 0x49, 0x45, 0x08, 0xbf, 0x40, 0x45, 0x2c, 0xbf, 0x01, 0x20, + 0x00, 0x20, 0xe2, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, 0x1e, 0x46, 0x03, 0x68, + 0x15, 0x46, 0x04, 0x46, 0x5b, 0x6a, 0xdd, 0xe9, 0x08, 0x7a, 0x98, 0x47, + 0x02, 0x46, 0x0b, 0x46, 0x28, 0x46, 0x31, 0x46, 0x08, 0xf0, 0x16, 0xfc, + 0x13, 0x43, 0x02, 0xd0, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x87, 0x23, 0x68, + 0x20, 0x46, 0x5b, 0x6a, 0x98, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x38, 0x46, + 0x51, 0x46, 0x08, 0xf0, 0x07, 0xfc, 0x13, 0x43, 0xf0, 0xd1, 0x15, 0xeb, + 0x07, 0x08, 0x23, 0x68, 0x20, 0x46, 0x46, 0xeb, 0x0a, 0x09, 0x9b, 0x6b, + 0x98, 0x47, 0x49, 0x45, 0x08, 0xbf, 0x40, 0x45, 0x2c, 0xbf, 0x01, 0x20, + 0x00, 0x20, 0xe2, 0xe7, 0x70, 0x47, 0x00, 0x00, 0x00, 0xf0, 0x7b, 0x43, + 0xb3, 0xf1, 0x00, 0x5f, 0x0e, 0xd0, 0x00, 0xf0, 0x77, 0x43, 0xb3, 0xf1, + 0x40, 0x5f, 0x09, 0xd0, 0x00, 0xf0, 0x7f, 0x40, 0xb0, 0xf1, 0x80, 0x5f, + 0x14, 0xbf, 0x4f, 0xf0, 0xff, 0x30, 0x4f, 0xf0, 0x01, 0x60, 0x70, 0x47, + 0x00, 0x48, 0x70, 0x47, 0x00, 0x00, 0x04, 0x08, 0xbf, 0xf3, 0x4f, 0x8f, + 0x05, 0x49, 0x06, 0x4b, 0xca, 0x68, 0x02, 0xf4, 0xe0, 0x62, 0x13, 0x43, + 0xcb, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0x00, 0xbf, 0xfd, 0xe7, 0x00, 0xbf, + 0x00, 0xed, 0x00, 0xe0, 0x04, 0x00, 0xfa, 0x05, 0x03, 0x68, 0x18, 0x47, + 0x00, 0x48, 0x70, 0x47, 0x1b, 0xe2, 0x01, 0x08, 0xd0, 0xe9, 0x04, 0x01, + 0x70, 0x47, 0xd0, 0xe9, 0x0a, 0x01, 0x70, 0x47, 0xd0, 0xe9, 0x0a, 0x01, + 0x70, 0x47, 0xd0, 0xe9, 0x08, 0x01, 0x70, 0x47, 0xd0, 0xe9, 0x06, 0x01, + 0x70, 0x47, 0x30, 0xb5, 0x03, 0x99, 0x54, 0x18, 0x04, 0x9a, 0x43, 0xeb, + 0x02, 0x05, 0xd0, 0xe9, 0x04, 0x23, 0xab, 0x42, 0x08, 0xbf, 0xa2, 0x42, + 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, 0x30, 0xbd, 0x00, 0x20, 0x70, 0x47, + 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0xd0, 0xe9, 0x00, 0x30, 0x18, 0x47, + 0xd0, 0xe9, 0x01, 0x32, 0x01, 0x68, 0x10, 0xb4, 0x01, 0xeb, 0x62, 0x00, + 0x54, 0x10, 0xd2, 0x07, 0x48, 0xbf, 0x0a, 0x59, 0x5d, 0xf8, 0x04, 0x4b, + 0x48, 0xbf, 0xd3, 0x58, 0x18, 0x47, 0x70, 0x47, 0x00, 0x20, 0x50, 0x70, + 0x90, 0x70, 0xd0, 0x70, 0x70, 0x47, 0x00, 0x00, 0xb0, 0xf1, 0x20, 0x4f, + 0x73, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0x0d, 0xd3, 0x11, 0x4b, 0x18, 0x68, + 0x38, 0xb1, 0x06, 0x68, 0x00, 0x23, 0xcd, 0xe9, 0x00, 0x23, 0x04, 0xf1, + 0xc0, 0x42, 0x76, 0x69, 0xb0, 0x47, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, + 0xb0, 0xf1, 0x10, 0x4f, 0x08, 0xd2, 0x4b, 0x1e, 0x02, 0x44, 0x94, 0x42, + 0xf5, 0xd0, 0x14, 0xf8, 0x01, 0x1b, 0x03, 0xf8, 0x01, 0x1f, 0xf8, 0xe7, + 0x05, 0x4b, 0x18, 0x68, 0x00, 0x23, 0x06, 0x68, 0xcd, 0xe9, 0x00, 0x23, + 0x04, 0xf1, 0xe0, 0x42, 0x76, 0x69, 0xe5, 0xe7, 0x0c, 0x0b, 0x02, 0x24, + 0xa4, 0x0b, 0x02, 0x24, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0x47, 0x03, 0x68, + 0xdb, 0x6a, 0x18, 0x47, 0x30, 0xb5, 0xa1, 0xf1, 0x10, 0x04, 0x00, 0x25, + 0x00, 0xf0, 0x0f, 0x02, 0xcd, 0x73, 0x02, 0x39, 0x00, 0x09, 0xd3, 0xb2, + 0x09, 0x2a, 0xcc, 0xbf, 0x37, 0x33, 0x30, 0x33, 0x0b, 0x74, 0x8c, 0x42, + 0xf2, 0xd1, 0x30, 0xbd, 0x32, 0x23, 0x10, 0xb5, 0x0a, 0x4c, 0x0b, 0x80, + 0x0a, 0x4b, 0xa1, 0x1c, 0x18, 0x68, 0xff, 0xf7, 0xe5, 0xff, 0x09, 0x4b, + 0x04, 0xf1, 0x12, 0x01, 0x18, 0x68, 0xff, 0xf7, 0xdf, 0xff, 0x07, 0x4b, + 0x04, 0xf1, 0x22, 0x01, 0x18, 0x68, 0xff, 0xf7, 0xd9, 0xff, 0x20, 0x46, + 0x10, 0xbd, 0x00, 0xbf, 0x58, 0x02, 0x00, 0x24, 0x00, 0xe8, 0xf1, 0x1f, + 0x04, 0xe8, 0xf1, 0x1f, 0x08, 0xe8, 0xf1, 0x1f, 0x04, 0x23, 0x01, 0x48, + 0x0b, 0x80, 0x70, 0x47, 0x54, 0x02, 0x00, 0x24, 0x12, 0x23, 0x01, 0x48, + 0x0b, 0x80, 0x70, 0x47, 0x40, 0x02, 0x00, 0x24, 0x30, 0xb5, 0x01, 0x38, + 0x00, 0x25, 0x2b, 0x46, 0x01, 0x35, 0x44, 0x5d, 0x00, 0x2c, 0xfa, 0xd1, + 0xdb, 0xb2, 0x01, 0x33, 0x5b, 0x00, 0x13, 0x80, 0x0b, 0x70, 0x03, 0x23, + 0x4b, 0x70, 0x02, 0x23, 0x10, 0xf8, 0x01, 0x5f, 0x05, 0xb9, 0x30, 0xbd, + 0x5a, 0x1c, 0xcd, 0x54, 0x02, 0x33, 0xd2, 0xb2, 0xdb, 0xb2, 0x8c, 0x54, + 0xf4, 0xe7, 0x00, 0x00, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, + 0xff, 0xf7, 0xde, 0xff, 0x08, 0x46, 0x08, 0xbd, 0x38, 0x2b, 0x02, 0x24, + 0x22, 0xe2, 0x01, 0x08, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, + 0xff, 0xf7, 0xd2, 0xff, 0x08, 0x46, 0x08, 0xbd, 0x38, 0x2b, 0x02, 0x24, + 0x30, 0xe2, 0x01, 0x08, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, + 0xff, 0xf7, 0xc6, 0xff, 0x08, 0x46, 0x08, 0xbd, 0x38, 0x2b, 0x02, 0x24, + 0x3b, 0xe2, 0x01, 0x08, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, + 0xff, 0xf7, 0xba, 0xff, 0x08, 0x46, 0x08, 0xbd, 0x38, 0x2b, 0x02, 0x24, + 0x46, 0xe2, 0x01, 0x08, 0x08, 0xb5, 0xd0, 0xf8, 0xb4, 0x32, 0x5b, 0x68, + 0x98, 0x47, 0x00, 0x20, 0x08, 0xbd, 0x08, 0xb5, 0xd0, 0xf8, 0xb4, 0x32, + 0x0b, 0xb9, 0x02, 0x20, 0x08, 0xbd, 0x1b, 0x68, 0x98, 0x47, 0x00, 0x28, + 0xfa, 0xd0, 0xf8, 0xe7, 0xd0, 0xe9, 0x00, 0x30, 0x18, 0x47, 0x00, 0x00, + 0x09, 0x29, 0x08, 0xb5, 0x0a, 0xd8, 0xd0, 0xf8, 0xbc, 0x32, 0x06, 0x39, + 0x53, 0xf8, 0x21, 0x00, 0x10, 0xb1, 0x03, 0x49, 0xff, 0xf7, 0x92, 0xff, + 0x01, 0x48, 0x00, 0xe0, 0x00, 0x20, 0x08, 0xbd, 0x44, 0x2c, 0x02, 0x24, + 0x0a, 0x23, 0x03, 0x80, 0x00, 0x48, 0x70, 0x47, 0x04, 0x03, 0x00, 0x24, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, + 0x78, 0x23, 0x03, 0x80, 0x00, 0x48, 0x70, 0x47, 0x8c, 0x02, 0x00, 0x24, + 0x38, 0xb5, 0x1e, 0x4c, 0x05, 0x46, 0x23, 0x7a, 0x04, 0x2b, 0x35, 0xd1, + 0xff, 0xf7, 0x8e, 0xfd, 0xe2, 0x6a, 0xa8, 0x42, 0x03, 0x46, 0x94, 0xbf, + 0x00, 0xf1, 0xff, 0x33, 0x2b, 0x46, 0x12, 0xb1, 0xd0, 0x69, 0xc0, 0x1a, + 0xd0, 0x61, 0x62, 0x6c, 0x12, 0xb1, 0x10, 0x69, 0xc0, 0x1a, 0x10, 0x61, + 0xe0, 0x68, 0x03, 0x44, 0x05, 0x44, 0xe3, 0x60, 0xe3, 0x68, 0xab, 0x42, + 0x13, 0xd1, 0x02, 0x23, 0x00, 0x20, 0x23, 0x72, 0xfe, 0xf7, 0xc0, 0xff, + 0x00, 0x23, 0x63, 0x72, 0xbf, 0xf3, 0x4f, 0x8f, 0xa2, 0x7a, 0x22, 0xb1, + 0xa3, 0x72, 0x4f, 0xf0, 0x80, 0x52, 0x09, 0x4b, 0x5a, 0x60, 0xbd, 0xe8, + 0x38, 0x40, 0xfe, 0xf7, 0x1d, 0xbd, 0x01, 0x33, 0xe3, 0x60, 0xff, 0xf7, + 0x09, 0xf8, 0x23, 0x6d, 0x00, 0x2b, 0xe1, 0xd0, 0x98, 0x47, 0xdf, 0xe7, + 0x38, 0xbd, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x00, 0xed, 0x00, 0xe0, + 0x38, 0xb5, 0x0f, 0x4c, 0x05, 0x46, 0xb4, 0xf8, 0x54, 0x10, 0x04, 0xf1, + 0x56, 0x00, 0xff, 0xf7, 0xa6, 0xf8, 0x81, 0x42, 0x03, 0xd8, 0x02, 0x21, + 0x0a, 0x48, 0xed, 0xf7, 0xff, 0xf8, 0x04, 0xf1, 0x58, 0x00, 0xff, 0xf7, + 0x8f, 0xf8, 0xe3, 0x6d, 0x43, 0xf8, 0x20, 0x50, 0x63, 0x7a, 0x23, 0xb9, + 0x05, 0x4b, 0x4f, 0xf0, 0x80, 0x52, 0x5a, 0x60, 0x38, 0xbd, 0x01, 0x23, + 0xa3, 0x72, 0xfb, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0x26, 0x01, 0x02, 0x80, + 0x00, 0xed, 0x00, 0xe0, 0xf8, 0xb5, 0x9c, 0x46, 0x0d, 0x46, 0x17, 0x46, + 0x04, 0x46, 0x00, 0x28, 0x72, 0xd0, 0x02, 0x78, 0xfa, 0x2a, 0x6f, 0xd1, + 0x00, 0x29, 0x6d, 0xd0, 0x00, 0xf1, 0x28, 0x02, 0x52, 0xe8, 0x00, 0x1f, + 0x11, 0xb9, 0xbf, 0xf3, 0x2f, 0x8f, 0x04, 0xe0, 0x48, 0x1e, 0x42, 0xe8, + 0x00, 0x06, 0x06, 0xb1, 0xf4, 0xe7, 0x11, 0xb1, 0xe6, 0x6a, 0x01, 0x22, + 0x9e, 0xb9, 0xbc, 0xf1, 0x00, 0x0f, 0x5c, 0xd0, 0x61, 0x46, 0x83, 0x20, + 0xfe, 0xf7, 0xfa, 0xfe, 0x40, 0xb1, 0x30, 0x4b, 0x20, 0x46, 0x59, 0x69, + 0xfe, 0xf7, 0x38, 0xff, 0xef, 0xf3, 0x09, 0x83, 0xc3, 0xe9, 0x02, 0x57, + 0x6f, 0xf0, 0x01, 0x00, 0x23, 0xe0, 0xb1, 0x1c, 0xd1, 0xe8, 0x4f, 0x0f, + 0xc1, 0xe8, 0x43, 0x2f, 0x03, 0xb1, 0xf9, 0xe7, 0x10, 0xf0, 0xff, 0x0f, + 0x44, 0xd0, 0xb6, 0x68, 0xde, 0xe7, 0x9a, 0x60, 0xb2, 0x68, 0xaa, 0xb1, + 0x53, 0x60, 0x62, 0x6a, 0x06, 0xf1, 0x0c, 0x01, 0x28, 0x46, 0x06, 0xf0, + 0xf1, 0xfa, 0x0f, 0xb1, 0xf3, 0x78, 0x3b, 0x70, 0x00, 0x25, 0x04, 0xf1, + 0x0c, 0x07, 0x31, 0x46, 0x38, 0x46, 0x35, 0x70, 0xff, 0xf7, 0x5d, 0xf9, + 0xa3, 0x68, 0x1b, 0xb9, 0x00, 0x20, 0xf8, 0xbd, 0x23, 0x63, 0xe8, 0xe7, + 0x38, 0x46, 0xff, 0xf7, 0x78, 0xf9, 0x06, 0x46, 0x00, 0x28, 0xf5, 0xd0, + 0x20, 0x46, 0xfe, 0xf7, 0xb4, 0xfe, 0x07, 0x46, 0x29, 0x46, 0x01, 0x22, + 0xfe, 0xf7, 0x3e, 0xff, 0x38, 0x46, 0xfe, 0xf7, 0x73, 0xfe, 0x62, 0x6a, + 0x07, 0x46, 0x81, 0x68, 0x06, 0xf1, 0x0c, 0x00, 0x06, 0xf0, 0xc8, 0xfa, + 0xf9, 0x23, 0xb5, 0x70, 0x31, 0x46, 0x33, 0x70, 0x20, 0x46, 0xfb, 0x68, + 0xf3, 0x70, 0xff, 0xf7, 0x16, 0xf9, 0xd9, 0xe7, 0x6f, 0xf0, 0x03, 0x00, + 0xd7, 0xe7, 0x6f, 0xf0, 0x02, 0x00, 0xd4, 0xe7, 0xd6, 0xe9, 0x01, 0x32, + 0x00, 0x2b, 0xb8, 0xd1, 0xe2, 0x62, 0xb7, 0xe7, 0x1c, 0x01, 0x00, 0x24, + 0xf8, 0xb5, 0x81, 0x78, 0x04, 0x46, 0x85, 0x68, 0x00, 0x29, 0x38, 0xd0, + 0x43, 0x68, 0xc6, 0x68, 0x8b, 0xb3, 0x9d, 0x60, 0xa2, 0x68, 0x82, 0xb3, + 0x53, 0x60, 0x00, 0x27, 0x06, 0xf1, 0x0c, 0x05, 0x21, 0x46, 0x28, 0x46, + 0x27, 0x70, 0xff, 0xf7, 0x12, 0xf9, 0xb3, 0x68, 0x00, 0x2b, 0x4c, 0xd0, + 0x28, 0x46, 0xff, 0xf7, 0x30, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x46, 0xd0, + 0x30, 0x46, 0xfe, 0xf7, 0x6c, 0xfe, 0x05, 0x46, 0x3a, 0x46, 0x39, 0x46, + 0xfe, 0xf7, 0xf6, 0xfe, 0x28, 0x46, 0xfe, 0xf7, 0x2b, 0xfe, 0x72, 0x6a, + 0x81, 0x68, 0x05, 0x46, 0x04, 0xf1, 0x0c, 0x00, 0x06, 0xf0, 0x80, 0xfa, + 0xf9, 0x23, 0xa7, 0x70, 0x21, 0x46, 0x23, 0x70, 0x30, 0x46, 0xeb, 0x68, + 0xe3, 0x70, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, 0xcc, 0xb8, 0xf5, 0x62, + 0xcc, 0xe7, 0x33, 0x63, 0xcd, 0xe7, 0xab, 0x68, 0x03, 0xb3, 0x5b, 0x78, + 0x83, 0x2b, 0x1d, 0xd1, 0x28, 0x46, 0xfe, 0xf7, 0x46, 0xfe, 0x06, 0x46, + 0x0a, 0x46, 0xfe, 0xf7, 0xd1, 0xfe, 0x30, 0x46, 0xfe, 0xf7, 0x06, 0xfe, + 0x06, 0x46, 0x6a, 0x6a, 0x04, 0xf1, 0x0c, 0x01, 0x80, 0x68, 0x06, 0xf0, + 0x5b, 0xfa, 0xf3, 0x68, 0x0b, 0xb1, 0xe2, 0x78, 0x1a, 0x70, 0x00, 0x23, + 0x21, 0x46, 0x05, 0xf1, 0x0c, 0x00, 0x23, 0x70, 0xbd, 0xe8, 0xf8, 0x40, + 0xff, 0xf7, 0xc5, 0xb8, 0x21, 0x46, 0x28, 0x46, 0xd1, 0xe7, 0xf8, 0xbd, + 0x2d, 0xe9, 0xf0, 0x41, 0x0c, 0x46, 0x17, 0x46, 0x98, 0x46, 0x05, 0x46, + 0x00, 0x28, 0x48, 0xd0, 0x03, 0x78, 0xfa, 0x2b, 0x45, 0xd1, 0x00, 0x29, + 0x43, 0xd0, 0x83, 0x68, 0xc3, 0xb1, 0x5b, 0x78, 0x83, 0x2b, 0x15, 0xd1, + 0xfe, 0xf7, 0x13, 0xfe, 0x06, 0x46, 0x01, 0x22, 0x00, 0x21, 0xfe, 0xf7, + 0x9d, 0xfe, 0x30, 0x46, 0xfe, 0xf7, 0xd2, 0xfd, 0x06, 0x46, 0x6a, 0x6a, + 0x21, 0x46, 0x80, 0x68, 0x06, 0xf0, 0x28, 0xfa, 0xf0, 0x68, 0x08, 0xb1, + 0x07, 0x70, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x81, 0x05, 0xf1, 0x0c, 0x00, + 0xff, 0xf7, 0xb9, 0xf8, 0x06, 0x46, 0x70, 0xb1, 0x21, 0x46, 0x6a, 0x6a, + 0x0c, 0x30, 0x00, 0x24, 0x06, 0xf0, 0x16, 0xfa, 0xf9, 0x23, 0x31, 0x46, + 0x28, 0x46, 0x33, 0x70, 0xb4, 0x70, 0xf7, 0x70, 0xff, 0xf7, 0x65, 0xf8, + 0xe7, 0xe7, 0xb8, 0xf1, 0x00, 0x0f, 0x13, 0xd0, 0x41, 0x46, 0x93, 0x20, + 0xfe, 0xf7, 0xec, 0xfd, 0x40, 0xb1, 0x09, 0x4b, 0x28, 0x46, 0x59, 0x69, + 0xfe, 0xf7, 0x2a, 0xfe, 0xef, 0xf3, 0x09, 0x83, 0xc3, 0xe9, 0x02, 0x47, + 0x6f, 0xf0, 0x01, 0x00, 0xd4, 0xe7, 0x6f, 0xf0, 0x03, 0x00, 0xd1, 0xe7, + 0x6f, 0xf0, 0x02, 0x00, 0xce, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, + 0x38, 0xb5, 0x27, 0x4c, 0x23, 0x7a, 0x01, 0x2b, 0x03, 0xd0, 0x4f, 0xf0, + 0xff, 0x35, 0x28, 0x46, 0x38, 0xbd, 0x24, 0x4a, 0x00, 0x21, 0x24, 0x48, + 0xff, 0xf7, 0x2c, 0xfa, 0xa0, 0x62, 0x00, 0xf0, 0x4f, 0xf8, 0x05, 0x46, + 0x00, 0x28, 0xf0, 0xd1, 0x20, 0x4a, 0xe1, 0x6c, 0x20, 0x48, 0xff, 0xf7, + 0x21, 0xfa, 0xa0, 0x64, 0x00, 0x28, 0xe8, 0xd0, 0x1e, 0x4a, 0xff, 0x23, + 0x82, 0xf8, 0x22, 0x30, 0x92, 0xf8, 0x22, 0x30, 0xd2, 0x68, 0x63, 0xf0, + 0xff, 0x03, 0xc2, 0xf3, 0x02, 0x22, 0xdb, 0x43, 0x14, 0xbf, 0xb3, 0xfa, + 0x83, 0xf3, 0x20, 0x23, 0xc3, 0xf1, 0x20, 0x03, 0x93, 0x42, 0x98, 0xbf, + 0x53, 0x1c, 0xfe, 0x22, 0x02, 0xfa, 0x03, 0xf3, 0x12, 0x4a, 0xdb, 0xb2, + 0xd3, 0x77, 0xf0, 0x23, 0x82, 0xf8, 0x23, 0x30, 0x93, 0x68, 0x10, 0x4a, + 0xda, 0x63, 0xbf, 0xf3, 0x4f, 0x8f, 0x4f, 0xf0, 0xff, 0x33, 0x23, 0x61, + 0xfe, 0xf7, 0x5c, 0xfb, 0x0c, 0x48, 0xfe, 0xf7, 0x86, 0xfd, 0x02, 0x23, + 0x43, 0x70, 0xa0, 0x61, 0x83, 0xf3, 0x14, 0x88, 0xbf, 0xf3, 0x6f, 0x8f, + 0x23, 0x72, 0xb6, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0xac, 0xec, 0x01, 0x08, + 0xa1, 0xe3, 0x00, 0x08, 0xe8, 0xec, 0x01, 0x08, 0x41, 0x6e, 0x01, 0x08, + 0x00, 0xed, 0x00, 0xe0, 0x5f, 0x06, 0x00, 0x08, 0x38, 0x01, 0x00, 0x24, + 0x38, 0xb5, 0x0d, 0x4c, 0xfa, 0x23, 0x00, 0x25, 0x14, 0x22, 0x23, 0x70, + 0x08, 0x23, 0x04, 0x21, 0x04, 0xf1, 0x0c, 0x00, 0xa5, 0x70, 0xc4, 0xe9, + 0x09, 0x35, 0x08, 0x4b, 0xc4, 0xe9, 0x01, 0x55, 0xc4, 0xe9, 0x0b, 0x55, + 0xff, 0xf7, 0x2e, 0xf8, 0x05, 0x4b, 0x06, 0x4a, 0x28, 0x46, 0xdc, 0x64, + 0x1a, 0x67, 0x05, 0x4a, 0x1a, 0x65, 0x38, 0xbd, 0x30, 0x44, 0x02, 0x24, + 0x64, 0x44, 0x02, 0x24, 0x1c, 0x01, 0x00, 0x24, 0x11, 0x4f, 0x01, 0x08, + 0x75, 0x6e, 0x01, 0x08, 0x38, 0xb5, 0x11, 0x4c, 0x23, 0x7a, 0x02, 0x2b, + 0x1c, 0xd1, 0x10, 0x4b, 0x1d, 0x68, 0x28, 0x46, 0xfa, 0xf7, 0x9f, 0xf9, + 0x00, 0x23, 0x4f, 0xf0, 0x00, 0x72, 0x85, 0xf8, 0x3f, 0x30, 0x0c, 0x4b, + 0x5a, 0x60, 0x01, 0x22, 0x62, 0x72, 0xbf, 0xf3, 0x4f, 0x8f, 0x59, 0x68, + 0xc9, 0x00, 0x03, 0xd5, 0x4f, 0xf0, 0x00, 0x61, 0x59, 0x60, 0xa2, 0x72, + 0x04, 0x23, 0x23, 0x72, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0x3e, 0xbb, + 0x00, 0x20, 0x38, 0xbd, 0x1c, 0x01, 0x00, 0x24, 0xd8, 0x27, 0x02, 0x24, + 0x00, 0xed, 0x00, 0xe0, 0x2d, 0xe9, 0xf0, 0x4f, 0x8b, 0xb0, 0x01, 0x68, + 0x06, 0x46, 0x93, 0x46, 0x14, 0x9f, 0x15, 0x9c, 0x00, 0x97, 0x01, 0x94, + 0x49, 0x6c, 0x88, 0x47, 0x00, 0x28, 0x00, 0xf0, 0xbf, 0x80, 0x33, 0x68, + 0x30, 0x46, 0xdb, 0x6c, 0x98, 0x47, 0x96, 0xf8, 0x80, 0x30, 0x43, 0xb9, + 0x33, 0x68, 0x30, 0x46, 0x5b, 0x4c, 0x1b, 0x6d, 0x98, 0x47, 0x20, 0x46, + 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x59, 0x4c, 0x94, 0xf8, 0x30, 0x30, + 0x25, 0x46, 0x01, 0x2b, 0x5f, 0xfa, 0x83, 0xfa, 0x1a, 0xd1, 0x4f, 0xf0, + 0x00, 0x09, 0x58, 0x46, 0xd6, 0xe9, 0x08, 0x23, 0x49, 0x46, 0xcd, 0xe9, + 0x02, 0x32, 0x07, 0xf0, 0xf9, 0xff, 0x03, 0x9a, 0x80, 0x46, 0x02, 0x9b, + 0xb8, 0x1a, 0x49, 0x46, 0x58, 0x44, 0x07, 0xf0, 0xf1, 0xff, 0x80, 0x45, + 0x07, 0x46, 0xc4, 0xf8, 0x34, 0x90, 0x05, 0xd9, 0x63, 0x6b, 0x43, 0xf0, + 0x00, 0x63, 0x63, 0x63, 0x48, 0x4c, 0x80, 0xe0, 0x23, 0x6d, 0x98, 0x42, + 0x03, 0xd9, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x73, 0xf5, 0xe7, 0x03, 0x23, + 0xd4, 0xf8, 0x00, 0x90, 0x84, 0xf8, 0x30, 0x30, 0x23, 0x6c, 0x9a, 0x06, + 0x09, 0xd4, 0x41, 0x4b, 0xc9, 0xf8, 0x38, 0x30, 0x63, 0x6b, 0x43, 0xf0, + 0x80, 0x63, 0x63, 0x63, 0x84, 0xf8, 0x30, 0xa0, 0xe4, 0xe7, 0xd9, 0xf8, + 0x14, 0x30, 0x9b, 0x01, 0x06, 0xd5, 0x3a, 0x4b, 0xc9, 0xf8, 0x38, 0x30, + 0x63, 0x6b, 0x43, 0xf4, 0x00, 0x63, 0xf0, 0xe7, 0xa3, 0x6b, 0x01, 0x2b, + 0x04, 0xd0, 0x03, 0x2b, 0x36, 0xd0, 0x4f, 0xea, 0x48, 0x28, 0x47, 0x02, + 0x20, 0x24, 0x00, 0x23, 0xcd, 0xf8, 0x14, 0x80, 0x4f, 0xf4, 0x80, 0x7a, + 0x4f, 0xf4, 0x80, 0x58, 0x05, 0xa9, 0x48, 0x46, 0xcd, 0xe9, 0x06, 0x4a, + 0xcd, 0xe9, 0x08, 0x38, 0xec, 0xf7, 0xd4, 0xff, 0x41, 0xf2, 0x88, 0x32, + 0x21, 0x46, 0x48, 0x46, 0xef, 0xf7, 0xe2, 0xff, 0x48, 0xb1, 0x2b, 0x68, + 0x26, 0x4a, 0x9a, 0x63, 0x6b, 0x6b, 0x18, 0x43, 0x01, 0x23, 0x68, 0x63, + 0x85, 0xf8, 0x30, 0x30, 0xb0, 0xe7, 0x2c, 0x68, 0x05, 0xa9, 0x05, 0x97, + 0x21, 0x27, 0xcd, 0xe9, 0x08, 0x08, 0x20, 0x46, 0xcd, 0xe9, 0x06, 0x7a, + 0xec, 0xf7, 0xb8, 0xff, 0x41, 0xf2, 0x88, 0x32, 0x39, 0x46, 0x20, 0x46, + 0xef, 0xf7, 0xc6, 0xff, 0x00, 0x28, 0xe2, 0xd1, 0x00, 0x23, 0x4f, 0xf4, + 0x80, 0x72, 0x26, 0x27, 0x2c, 0x68, 0x05, 0xa9, 0x20, 0x46, 0xcd, 0xe9, + 0x07, 0x23, 0xcd, 0xe9, 0x05, 0x37, 0x4f, 0xf4, 0x80, 0x53, 0x09, 0x93, + 0xec, 0xf7, 0xa0, 0xff, 0x4f, 0xf2, 0x18, 0x62, 0x39, 0x46, 0x20, 0x46, + 0xef, 0xf7, 0xae, 0xff, 0x28, 0xb1, 0x2b, 0x68, 0x0c, 0x4a, 0x9a, 0x63, + 0x6c, 0x6b, 0x20, 0x43, 0xca, 0xe7, 0x01, 0x23, 0x04, 0x46, 0x85, 0xf8, + 0x30, 0x30, 0xf0, 0xf7, 0x35, 0xf8, 0x04, 0x28, 0xfb, 0xd1, 0x33, 0x68, + 0x30, 0x46, 0x1b, 0x6d, 0x98, 0x47, 0x4c, 0xe7, 0x04, 0x4c, 0x4a, 0xe7, + 0x74, 0xec, 0xff, 0xff, 0x2c, 0x0d, 0x02, 0x24, 0x6e, 0xec, 0xff, 0xff, + 0xff, 0x0f, 0xe0, 0x1f, 0x75, 0xec, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, + 0x8b, 0xb0, 0x0e, 0x46, 0x01, 0x68, 0x05, 0x46, 0x93, 0x46, 0x9a, 0x46, + 0xdd, 0xe9, 0x14, 0x78, 0xcd, 0xe9, 0x00, 0x78, 0x09, 0x6c, 0x88, 0x47, + 0x00, 0x28, 0x00, 0xf0, 0xfe, 0x80, 0x2b, 0x68, 0x28, 0x46, 0xdb, 0x6c, + 0x98, 0x47, 0x95, 0xf8, 0x80, 0x30, 0x43, 0xb9, 0x2b, 0x68, 0x28, 0x46, + 0x7b, 0x4c, 0x1b, 0x6d, 0x98, 0x47, 0x20, 0x46, 0x0b, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0xab, 0x6d, 0x78, 0x4c, 0x03, 0x93, 0xd5, 0xe9, 0x08, 0x89, + 0xee, 0xf7, 0x52, 0xff, 0x07, 0x46, 0x26, 0xb9, 0x63, 0x6b, 0x43, 0xf0, + 0x00, 0x63, 0x63, 0x63, 0x68, 0xe0, 0x94, 0xf8, 0x30, 0x30, 0x01, 0x2b, + 0x40, 0xf0, 0xd7, 0x80, 0x42, 0x46, 0x4b, 0x46, 0x51, 0x46, 0x58, 0x46, + 0x07, 0xf0, 0x16, 0xff, 0x82, 0x46, 0x42, 0x46, 0x4b, 0x46, 0xdd, 0xe9, + 0x14, 0x01, 0x07, 0xf0, 0x0f, 0xff, 0x22, 0x6d, 0x0a, 0xeb, 0x00, 0x01, + 0x00, 0x23, 0x80, 0x46, 0x91, 0x42, 0x63, 0x63, 0x03, 0xd9, 0x63, 0x6b, + 0x43, 0xf0, 0x00, 0x73, 0xdf, 0xe7, 0xd4, 0xf8, 0x00, 0xb0, 0x03, 0x22, + 0x4f, 0xea, 0x48, 0x29, 0x84, 0xf8, 0x30, 0x20, 0xcb, 0xf8, 0x2c, 0x30, + 0xa3, 0x6b, 0x01, 0x2b, 0x4f, 0xf0, 0xff, 0x33, 0xcb, 0xf8, 0x24, 0x30, + 0x18, 0xbf, 0x4f, 0xea, 0x4a, 0x2a, 0xcb, 0xf8, 0x28, 0x90, 0xb8, 0xf1, + 0x01, 0x0f, 0xdb, 0xf8, 0x2c, 0x30, 0x23, 0xf0, 0xff, 0x03, 0x43, 0xf0, + 0x90, 0x03, 0xcb, 0xf8, 0x2c, 0x30, 0xdb, 0xf8, 0x0c, 0x30, 0x43, 0xf0, + 0x40, 0x03, 0xcb, 0xf8, 0x0c, 0x30, 0x27, 0xd9, 0x20, 0x23, 0xcd, 0xf8, + 0x14, 0xa0, 0x4f, 0xf0, 0x19, 0x0a, 0xe3, 0x62, 0x4f, 0xf4, 0x80, 0x71, + 0x00, 0x23, 0x58, 0x46, 0xcd, 0xf8, 0x18, 0xa0, 0xcd, 0xe9, 0x07, 0x13, + 0x4f, 0xf4, 0x80, 0x53, 0x05, 0xa9, 0x09, 0x93, 0xec, 0xf7, 0xf4, 0xfe, + 0x41, 0xf2, 0x88, 0x32, 0x51, 0x46, 0x58, 0x46, 0xef, 0xf7, 0x02, 0xff, + 0x78, 0xb3, 0x23, 0x68, 0x43, 0x4a, 0x9a, 0x63, 0x63, 0x6b, 0x18, 0x43, + 0x60, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0x00, 0x23, 0xe3, 0x62, + 0x3f, 0x4c, 0x67, 0xe0, 0x10, 0x23, 0xcd, 0xf8, 0x14, 0xa0, 0x4f, 0xf0, + 0x18, 0x0a, 0xe3, 0x62, 0xd6, 0xe7, 0x43, 0x6b, 0x5a, 0x04, 0x0c, 0xd5, + 0xb9, 0xf1, 0x1f, 0x0f, 0x09, 0xd9, 0x06, 0xf1, 0x20, 0x03, 0x56, 0xf8, + 0x04, 0x2b, 0xb3, 0x42, 0xc0, 0xf8, 0x80, 0x20, 0xf9, 0xd1, 0xa9, 0xf1, + 0x20, 0x09, 0xee, 0xf7, 0xc7, 0xfe, 0x03, 0x9b, 0xc0, 0x1b, 0x83, 0x42, + 0x05, 0xd8, 0x23, 0x68, 0x2e, 0x4a, 0x9a, 0x63, 0x63, 0x6b, 0x63, 0x63, + 0xd5, 0xe7, 0x20, 0x68, 0x43, 0x6b, 0x13, 0xf4, 0x8d, 0x7f, 0xde, 0xd0, + 0xc3, 0x68, 0x23, 0xf0, 0x40, 0x03, 0xc3, 0x60, 0x43, 0x6b, 0xdb, 0x05, + 0x09, 0xd5, 0xb8, 0xf1, 0x01, 0x0f, 0x06, 0xd9, 0xa3, 0x6b, 0x03, 0x2b, + 0x03, 0xd0, 0xef, 0xf7, 0xd3, 0xff, 0x00, 0x28, 0xb9, 0xd1, 0x22, 0x68, + 0x50, 0x6b, 0x10, 0xf0, 0x08, 0x00, 0x05, 0xd0, 0x1e, 0x4b, 0x93, 0x63, + 0x63, 0x6b, 0x43, 0xf0, 0x08, 0x03, 0xdc, 0xe7, 0x51, 0x6b, 0x11, 0xf0, + 0x02, 0x01, 0x0a, 0xd0, 0x19, 0x4b, 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, + 0x02, 0x03, 0x63, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xe0, 0x62, + 0xaa, 0xe7, 0x53, 0x6b, 0x13, 0xf0, 0x10, 0x03, 0x0a, 0xd0, 0x12, 0x4b, + 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, 0x10, 0x03, 0x63, 0x63, 0x01, 0x23, + 0x84, 0xf8, 0x30, 0x30, 0xe1, 0x62, 0x9b, 0xe7, 0x0e, 0x49, 0x91, 0x63, + 0x01, 0x22, 0x84, 0xf8, 0x30, 0x20, 0x1c, 0x46, 0xef, 0xf7, 0x1e, 0xff, + 0x04, 0x28, 0xfb, 0xd1, 0x2b, 0x68, 0x28, 0x46, 0x1b, 0x6d, 0x98, 0x47, + 0x11, 0xe7, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x53, 0x1d, 0xe7, 0x06, 0x4c, + 0x0b, 0xe7, 0x00, 0xbf, 0x74, 0xec, 0xff, 0xff, 0x2c, 0x0d, 0x02, 0x24, + 0xff, 0x0f, 0xe0, 0x1f, 0x6c, 0xec, 0xff, 0xff, 0x3a, 0x0f, 0x00, 0x18, + 0x75, 0xec, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, 0x8b, 0xb0, 0x0e, 0x46, + 0x01, 0x68, 0x05, 0x46, 0x93, 0x46, 0x9a, 0x46, 0xdd, 0xe9, 0x14, 0x78, + 0xcd, 0xe9, 0x00, 0x78, 0xc9, 0x6b, 0x88, 0x47, 0x00, 0x28, 0x00, 0xf0, + 0x0e, 0x81, 0x2b, 0x68, 0x28, 0x46, 0xdb, 0x6c, 0x98, 0x47, 0x95, 0xf8, + 0x80, 0x30, 0x43, 0xb9, 0x2b, 0x68, 0x28, 0x46, 0x83, 0x4c, 0x1b, 0x6d, + 0x98, 0x47, 0x20, 0x46, 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xab, 0x6d, + 0x80, 0x4c, 0x03, 0x93, 0xd5, 0xe9, 0x08, 0x89, 0xee, 0xf7, 0x34, 0xfe, + 0x07, 0x46, 0x26, 0xb9, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x63, 0x63, 0x63, + 0x69, 0xe0, 0x94, 0xf8, 0x30, 0x30, 0x01, 0x2b, 0x40, 0xf0, 0xe7, 0x80, + 0x42, 0x46, 0x4b, 0x46, 0x51, 0x46, 0x58, 0x46, 0x07, 0xf0, 0xf8, 0xfd, + 0x82, 0x46, 0x42, 0x46, 0x4b, 0x46, 0xdd, 0xe9, 0x14, 0x01, 0x07, 0xf0, + 0xf1, 0xfd, 0x22, 0x6d, 0x0a, 0xeb, 0x00, 0x01, 0x00, 0x23, 0x80, 0x46, + 0x91, 0x42, 0x63, 0x63, 0x03, 0xd9, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x73, + 0xdf, 0xe7, 0xd4, 0xf8, 0x00, 0xb0, 0x03, 0x22, 0x4f, 0xea, 0x48, 0x29, + 0x84, 0xf8, 0x30, 0x20, 0xcb, 0xf8, 0x2c, 0x30, 0xa3, 0x6b, 0x01, 0x2b, + 0x4f, 0xf0, 0xff, 0x33, 0xcb, 0xf8, 0x24, 0x30, 0x18, 0xbf, 0x4f, 0xea, + 0x4a, 0x2a, 0xcb, 0xf8, 0x28, 0x90, 0xb8, 0xf1, 0x01, 0x0f, 0xdb, 0xf8, + 0x2c, 0x30, 0x23, 0xf0, 0xff, 0x03, 0x43, 0xf0, 0x92, 0x03, 0xcb, 0xf8, + 0x2c, 0x30, 0xdb, 0xf8, 0x0c, 0x30, 0x43, 0xf0, 0x40, 0x03, 0xcb, 0xf8, + 0x0c, 0x30, 0x28, 0xd9, 0x02, 0x23, 0xcd, 0xf8, 0x14, 0xa0, 0x4f, 0xf0, + 0x12, 0x0a, 0xe3, 0x62, 0x4f, 0xf4, 0x80, 0x71, 0x00, 0x23, 0x58, 0x46, + 0xcd, 0xf8, 0x18, 0xa0, 0xcd, 0xe9, 0x07, 0x13, 0x4f, 0xf4, 0x80, 0x53, + 0x05, 0xa9, 0x09, 0x93, 0xec, 0xf7, 0xd6, 0xfd, 0x41, 0xf2, 0x88, 0x32, + 0x51, 0x46, 0x58, 0x46, 0xef, 0xf7, 0xe4, 0xfd, 0x00, 0x28, 0x3e, 0xd0, + 0x23, 0x68, 0x4b, 0x4a, 0x9a, 0x63, 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, + 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0x00, 0x23, 0xe3, 0x62, 0x47, 0x4c, + 0x76, 0xe0, 0x01, 0x23, 0xcd, 0xf8, 0x14, 0xa0, 0x4f, 0xf0, 0x11, 0x0a, + 0xe3, 0x62, 0xd5, 0xe7, 0x43, 0x6b, 0x1a, 0x04, 0x19, 0xd5, 0xb9, 0xf1, + 0x1f, 0x0f, 0x16, 0xd9, 0x33, 0x1d, 0x06, 0xf1, 0x24, 0x01, 0x22, 0x68, + 0x04, 0x33, 0xd2, 0xf8, 0x80, 0x20, 0x10, 0x0a, 0x03, 0xf8, 0x08, 0x2c, + 0x03, 0xf8, 0x07, 0x0c, 0x10, 0x0c, 0x12, 0x0e, 0x03, 0xf8, 0x06, 0x0c, + 0x03, 0xf8, 0x05, 0x2c, 0x8b, 0x42, 0xee, 0xd1, 0x20, 0x36, 0xa9, 0xf1, + 0x20, 0x09, 0xee, 0xf7, 0x9b, 0xfd, 0x03, 0x9b, 0xc0, 0x1b, 0x83, 0x42, + 0x07, 0xd8, 0x23, 0x68, 0x2f, 0x4a, 0x9a, 0x63, 0x63, 0x6b, 0x43, 0xf0, + 0x00, 0x43, 0x63, 0x63, 0xc6, 0xe7, 0x20, 0x68, 0x43, 0x6b, 0x13, 0xf4, + 0x95, 0x7f, 0xcf, 0xd0, 0xc3, 0x68, 0x23, 0xf0, 0x40, 0x03, 0xc3, 0x60, + 0x43, 0x6b, 0xdb, 0x05, 0x09, 0xd5, 0xb8, 0xf1, 0x01, 0x0f, 0x06, 0xd9, + 0xa3, 0x6b, 0x03, 0x2b, 0x03, 0xd0, 0xef, 0xf7, 0xa5, 0xfe, 0x00, 0x28, + 0xaa, 0xd1, 0x22, 0x68, 0x50, 0x6b, 0x10, 0xf0, 0x08, 0x00, 0x05, 0xd0, + 0x1e, 0x4b, 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, 0x08, 0x03, 0xdc, 0xe7, + 0x51, 0x6b, 0x11, 0xf0, 0x02, 0x01, 0x0a, 0xd0, 0x19, 0x4b, 0x93, 0x63, + 0x63, 0x6b, 0x43, 0xf0, 0x02, 0x03, 0x63, 0x63, 0x01, 0x23, 0x84, 0xf8, + 0x30, 0x30, 0xe0, 0x62, 0x9b, 0xe7, 0x53, 0x6b, 0x13, 0xf0, 0x20, 0x03, + 0x0a, 0xd0, 0x12, 0x4b, 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, 0x20, 0x03, + 0x63, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xe1, 0x62, 0x8c, 0xe7, + 0x0e, 0x49, 0x91, 0x63, 0x01, 0x22, 0x84, 0xf8, 0x30, 0x20, 0x1c, 0x46, + 0xef, 0xf7, 0xf0, 0xfd, 0x04, 0x28, 0xfb, 0xd1, 0x2b, 0x68, 0x28, 0x46, + 0x1b, 0x6d, 0x98, 0x47, 0x01, 0xe7, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x53, + 0x0d, 0xe7, 0x06, 0x4c, 0xfb, 0xe6, 0x00, 0xbf, 0x74, 0xec, 0xff, 0xff, + 0x2c, 0x0d, 0x02, 0x24, 0xff, 0x0f, 0xe0, 0x1f, 0x6d, 0xec, 0xff, 0xff, + 0x3a, 0x0f, 0x00, 0x18, 0x75, 0xec, 0xff, 0xff, 0x38, 0xb5, 0x03, 0x68, + 0x04, 0x46, 0x00, 0x25, 0xdb, 0x6c, 0x98, 0x47, 0x10, 0x4b, 0x03, 0x22, + 0x7c, 0x20, 0x83, 0xf8, 0x30, 0x20, 0x0f, 0x4a, 0x11, 0x68, 0x21, 0xf0, + 0x03, 0x01, 0x11, 0x60, 0x5d, 0x63, 0x1a, 0x60, 0x83, 0xf8, 0x30, 0x50, + 0xf3, 0xf7, 0xa4, 0xfb, 0x0a, 0x4a, 0x20, 0x46, 0xd2, 0xf8, 0xdc, 0x30, + 0x23, 0xf4, 0x00, 0x73, 0xc2, 0xf8, 0xdc, 0x30, 0x23, 0x68, 0x84, 0xf8, + 0x54, 0x50, 0x84, 0xf8, 0x80, 0x50, 0x1b, 0x6d, 0x98, 0x47, 0x28, 0x46, + 0x38, 0xbd, 0x00, 0xbf, 0x2c, 0x0d, 0x02, 0x24, 0x00, 0x24, 0x02, 0x48, + 0x00, 0x44, 0x02, 0x58, 0x03, 0x68, 0x2d, 0xe9, 0xf0, 0x4f, 0xdb, 0x6c, + 0x9f, 0xb0, 0xb8, 0x4c, 0x05, 0x46, 0x98, 0x47, 0xb7, 0x4b, 0xb8, 0x4e, + 0x4f, 0xf4, 0x80, 0x42, 0x23, 0x60, 0x04, 0x23, 0xe2, 0x60, 0x4f, 0xf0, + 0x01, 0x08, 0x63, 0x61, 0x00, 0x23, 0xb4, 0x4f, 0x4f, 0xf0, 0x03, 0x09, + 0x23, 0x61, 0x0e, 0xa9, 0x38, 0x46, 0xc4, 0xe9, 0x01, 0x33, 0xd6, 0xf8, + 0xe0, 0x20, 0x42, 0xf0, 0x40, 0x02, 0xc6, 0xf8, 0xe0, 0x20, 0xd6, 0xf8, + 0xe0, 0x20, 0x10, 0x93, 0x02, 0xf0, 0x40, 0x02, 0xcd, 0xf8, 0x44, 0x90, + 0x07, 0x92, 0x07, 0x9a, 0x08, 0x22, 0xcd, 0xe9, 0x0e, 0x28, 0xf1, 0xf7, + 0x65, 0xfe, 0x4f, 0xf4, 0x00, 0x23, 0x0e, 0xa9, 0xa5, 0x48, 0xbb, 0x61, + 0x02, 0x27, 0xd6, 0xf8, 0xdc, 0x30, 0x43, 0xf4, 0x00, 0x73, 0xc6, 0xf8, + 0xdc, 0x30, 0xd6, 0xf8, 0xdc, 0x30, 0x03, 0xf4, 0x00, 0x73, 0x06, 0x93, + 0x06, 0x9b, 0xd6, 0xf8, 0xe0, 0x30, 0x43, 0xf0, 0x02, 0x03, 0xc6, 0xf8, + 0xe0, 0x30, 0xd6, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x02, 0x03, 0x05, 0x93, + 0x05, 0x9b, 0xd6, 0xf8, 0xe0, 0x30, 0x43, 0xf0, 0x08, 0x03, 0xc6, 0xf8, + 0xe0, 0x30, 0xd6, 0xf8, 0xe0, 0x30, 0xcd, 0xf8, 0x44, 0x90, 0x03, 0xf0, + 0x08, 0x03, 0x04, 0x93, 0x04, 0x9b, 0x09, 0x23, 0x12, 0x93, 0x4c, 0xf2, + 0x18, 0x03, 0xcd, 0xe9, 0x0f, 0x78, 0x0e, 0x93, 0xf1, 0xf7, 0x30, 0xfe, + 0xc0, 0x23, 0x0e, 0xa9, 0x8c, 0x48, 0x0e, 0x93, 0x0b, 0x23, 0x12, 0x93, + 0xf1, 0xf7, 0x28, 0xfe, 0x05, 0x21, 0x7c, 0x20, 0xec, 0xf7, 0xd4, 0xfb, + 0x88, 0x4b, 0x4f, 0xf0, 0x80, 0x52, 0xda, 0x60, 0x8d, 0xf8, 0x0f, 0x80, + 0x9d, 0xf8, 0x0f, 0x30, 0x01, 0x2b, 0x5f, 0xfa, 0x83, 0xf8, 0x12, 0xd0, + 0x7c, 0x20, 0xf3, 0xf7, 0x0d, 0xfb, 0xd6, 0xf8, 0xdc, 0x30, 0x28, 0x46, + 0x23, 0xf4, 0x00, 0x73, 0xc6, 0xf8, 0xdc, 0x30, 0x2b, 0x68, 0x85, 0xf8, + 0x54, 0x70, 0x1b, 0x6d, 0x98, 0x47, 0x7c, 0x48, 0x1f, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x94, 0xf8, 0x30, 0x30, 0x03, 0xf0, 0xff, 0x02, 0x03, 0xb9, + 0x22, 0x76, 0x03, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xec, 0xf7, 0x76, 0xfc, + 0x70, 0xb9, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0x4f, 0xf0, 0x00, 0x63, + 0x63, 0x63, 0x01, 0x23, 0x28, 0x46, 0x85, 0xf8, 0x54, 0x30, 0x2b, 0x68, + 0x1b, 0x6d, 0x98, 0x47, 0x6e, 0x48, 0xe1, 0xe7, 0x21, 0x68, 0x6e, 0x4b, + 0x4a, 0x68, 0x6e, 0x4f, 0xb0, 0xfb, 0xf3, 0xf3, 0x3a, 0x40, 0x1a, 0x43, + 0x5b, 0x00, 0xb0, 0xfb, 0xf3, 0xf0, 0x6b, 0x4b, 0x4a, 0x60, 0x0a, 0x68, + 0xb3, 0xfb, 0xf0, 0xf0, 0x42, 0xf0, 0x03, 0x02, 0x01, 0x30, 0x0a, 0x60, + 0xf3, 0xf7, 0xe0, 0xfa, 0x00, 0x23, 0x20, 0x68, 0x08, 0x93, 0xef, 0xf7, + 0x3d, 0xfd, 0x83, 0x46, 0x88, 0xbb, 0x4f, 0xf4, 0xd5, 0x70, 0x08, 0x22, + 0xd4, 0xf8, 0x00, 0x90, 0x0e, 0xa9, 0x60, 0x4e, 0xcd, 0xe9, 0x0e, 0x02, + 0x4f, 0xf4, 0x80, 0x72, 0x48, 0x46, 0xcd, 0xe9, 0x10, 0x2b, 0x4f, 0xf4, + 0x80, 0x52, 0x12, 0x92, 0xec, 0xf7, 0x26, 0xfc, 0x32, 0x68, 0x4f, 0xf4, + 0xfa, 0x51, 0xb2, 0xfb, 0xf1, 0xf1, 0x41, 0xf2, 0x88, 0x32, 0x4a, 0x43, + 0x01, 0x3a, 0x0d, 0xd3, 0xd9, 0xf8, 0x34, 0x10, 0x11, 0xf0, 0x45, 0x0f, + 0xf8, 0xd0, 0x89, 0x04, 0xf6, 0xd4, 0xd9, 0xf8, 0x34, 0x20, 0x52, 0x07, + 0x10, 0xd5, 0x04, 0x22, 0xc9, 0xf8, 0x38, 0x20, 0x00, 0x22, 0x20, 0x68, + 0xe2, 0x63, 0xef, 0xf7, 0x0b, 0xfd, 0xf0, 0xb1, 0x83, 0x46, 0x01, 0x22, + 0x84, 0xf8, 0x30, 0x20, 0x63, 0x6b, 0x43, 0xea, 0x0b, 0x03, 0x9f, 0xe7, + 0xd9, 0xf8, 0x34, 0x20, 0xd3, 0x07, 0x01, 0xd5, 0x01, 0x22, 0xe9, 0xe7, + 0xd9, 0xf8, 0x34, 0x20, 0x50, 0x06, 0x02, 0xd5, 0x40, 0x22, 0xc9, 0xf8, + 0x38, 0x20, 0x01, 0x22, 0xe2, 0x63, 0x00, 0x21, 0x20, 0x68, 0xef, 0xf7, + 0xd6, 0xfc, 0x28, 0xb1, 0x4f, 0xf0, 0x80, 0x5b, 0xe1, 0xe7, 0xe2, 0x6b, + 0x01, 0x2a, 0xf4, 0xd0, 0x4f, 0xf6, 0xfe, 0x79, 0x00, 0x21, 0xca, 0x46, + 0x37, 0xe0, 0x20, 0x68, 0xef, 0xf7, 0xc7, 0xfc, 0x83, 0x46, 0x00, 0x28, + 0xd3, 0xd1, 0x35, 0x4b, 0x29, 0x21, 0x22, 0x68, 0xcd, 0xe9, 0x0e, 0x31, + 0x4f, 0xf4, 0x80, 0x71, 0x4f, 0xf4, 0x80, 0x53, 0x01, 0x92, 0x12, 0x93, + 0xcd, 0xe9, 0x10, 0x10, 0x0e, 0xa9, 0x10, 0x46, 0xec, 0xf7, 0xca, 0xfb, + 0x33, 0x68, 0x4f, 0xf4, 0xfa, 0x51, 0x01, 0x9a, 0xb3, 0xfb, 0xf1, 0xf1, + 0x41, 0xf2, 0x88, 0x33, 0x4b, 0x43, 0x01, 0x3b, 0xd2, 0xd3, 0x51, 0x6b, + 0x11, 0xf0, 0x45, 0x0f, 0xf9, 0xd0, 0x89, 0x04, 0xf7, 0xd4, 0x53, 0x6b, + 0x5b, 0x07, 0x02, 0xd5, 0x04, 0x23, 0x93, 0x63, 0xc6, 0xe7, 0x22, 0x4b, + 0x93, 0x63, 0x23, 0x68, 0xd3, 0xf8, 0x14, 0xb0, 0x08, 0x9a, 0x4f, 0xea, + 0xdb, 0x71, 0x01, 0x32, 0x08, 0x92, 0x08, 0x9a, 0x4a, 0x45, 0x01, 0xd8, + 0x00, 0x29, 0xc2, 0xd0, 0x08, 0x9a, 0x52, 0x45, 0x13, 0xd8, 0x1b, 0xf0, + 0x80, 0x4f, 0x01, 0xd0, 0x01, 0x23, 0xa3, 0x63, 0xd4, 0xf8, 0x00, 0x90, + 0xd9, 0xf8, 0x00, 0x30, 0x98, 0x07, 0x29, 0xd1, 0x4f, 0xf0, 0x80, 0x60, + 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, + 0x2d, 0xe7, 0x4f, 0xf0, 0x80, 0x7b, 0x82, 0xe7, 0x2c, 0x0d, 0x02, 0x24, + 0x00, 0x24, 0x02, 0x48, 0x00, 0x44, 0x02, 0x58, 0x00, 0x18, 0x02, 0x58, + 0x00, 0x04, 0x02, 0x58, 0x00, 0x0c, 0x02, 0x58, 0x00, 0xe1, 0x00, 0xe0, + 0x73, 0xec, 0xff, 0xff, 0x74, 0xec, 0xff, 0xff, 0x00, 0x35, 0x0c, 0x00, + 0x00, 0x2c, 0xc0, 0xff, 0x10, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x10, 0xc1, 0xc5, 0x00, 0x20, 0x00, 0xa3, 0x6b, 0x03, 0x2b, + 0x69, 0xd0, 0x00, 0x23, 0x02, 0x22, 0x4f, 0xf4, 0x80, 0x5a, 0x0e, 0xa9, + 0x48, 0x46, 0xcd, 0xf8, 0x48, 0xa0, 0xcd, 0xe9, 0x0e, 0x32, 0x4f, 0xf4, + 0x40, 0x72, 0xcd, 0xe9, 0x10, 0x23, 0xec, 0xf7, 0x59, 0xfb, 0x48, 0x46, + 0xef, 0xf7, 0x42, 0xfb, 0x00, 0x28, 0xbf, 0xd1, 0xd4, 0xf8, 0x00, 0x90, + 0xd9, 0xf8, 0x14, 0x30, 0xe3, 0x66, 0xd9, 0xf8, 0x18, 0x30, 0x23, 0x67, + 0xd9, 0xf8, 0x1c, 0x30, 0x63, 0x67, 0xd9, 0xf8, 0x20, 0x30, 0xa3, 0x67, + 0xa3, 0x6b, 0x03, 0x2b, 0x43, 0xd0, 0x4f, 0xf4, 0x80, 0x73, 0x03, 0x21, + 0x0e, 0x90, 0xcd, 0xe9, 0x0f, 0x13, 0xcd, 0xe9, 0x11, 0x0a, 0x0e, 0xa9, + 0x48, 0x46, 0xec, 0xf7, 0x37, 0xfb, 0x33, 0x68, 0x4f, 0xf4, 0xfa, 0x52, + 0xb3, 0xfb, 0xf2, 0xf2, 0x41, 0xf2, 0x88, 0x33, 0x53, 0x43, 0x01, 0x3b, + 0xc0, 0xf0, 0x1c, 0x81, 0xd9, 0xf8, 0x34, 0x20, 0x12, 0xf0, 0x45, 0x0f, + 0xf7, 0xd0, 0x92, 0x04, 0xf5, 0xd4, 0xd9, 0xf8, 0x34, 0x30, 0x5b, 0x07, + 0x03, 0xd5, 0x04, 0x20, 0xc9, 0xf8, 0x38, 0x00, 0x88, 0xe7, 0xd9, 0xf8, + 0x34, 0x00, 0x10, 0xf0, 0x01, 0x00, 0x03, 0xd0, 0x01, 0x23, 0xc9, 0xf8, + 0x38, 0x30, 0x7f, 0xe7, 0xd9, 0xf8, 0x10, 0x30, 0xdb, 0xb2, 0x03, 0x2b, + 0x40, 0xf0, 0xfc, 0x80, 0xc9, 0x4b, 0xc9, 0xf8, 0x38, 0x30, 0xd9, 0xf8, + 0x14, 0x30, 0x13, 0xf4, 0x60, 0x42, 0x40, 0xf0, 0xe6, 0x80, 0xa1, 0x6b, + 0x1b, 0x0c, 0x26, 0x68, 0x03, 0x29, 0x40, 0xf0, 0xf2, 0x80, 0xd4, 0xf8, + 0x00, 0xb0, 0xdb, 0xf8, 0x18, 0x30, 0x1b, 0x0d, 0x23, 0x64, 0xe3, 0x6d, + 0x9a, 0x0f, 0x8d, 0xf8, 0x38, 0x20, 0xc3, 0xf3, 0x83, 0x62, 0x8d, 0xf8, + 0x39, 0x20, 0xc3, 0xf3, 0x01, 0x62, 0x8d, 0xf8, 0x3a, 0x20, 0xc3, 0xf3, + 0x07, 0x42, 0x8d, 0xf8, 0x3b, 0x20, 0xc3, 0xf3, 0x07, 0x22, 0xdb, 0xb2, + 0x8d, 0xf8, 0x3c, 0x20, 0x8d, 0xf8, 0x3d, 0x30, 0x23, 0x6e, 0x1a, 0x0d, + 0xad, 0xf8, 0x3e, 0x20, 0xc3, 0xf3, 0x03, 0x42, 0x8d, 0xf8, 0x40, 0x20, + 0xc3, 0xf3, 0xc0, 0x32, 0x8d, 0xf8, 0x41, 0x20, 0xc3, 0xf3, 0x80, 0x32, + 0x8d, 0xf8, 0x42, 0x20, 0xc3, 0xf3, 0x40, 0x32, 0x8d, 0xf8, 0x43, 0x20, + 0xc3, 0xf3, 0x00, 0x32, 0x8d, 0xf8, 0x44, 0x20, 0x00, 0x22, 0x8d, 0xf8, + 0x45, 0x20, 0xa2, 0x6b, 0x00, 0x2a, 0x40, 0xf0, 0xd6, 0x80, 0x40, 0xf6, + 0xfc, 0x71, 0x62, 0x6e, 0x01, 0xea, 0x83, 0x03, 0x43, 0xea, 0x92, 0x73, + 0x12, 0x93, 0xc2, 0xf3, 0xc2, 0x63, 0x8d, 0xf8, 0x4c, 0x30, 0xc2, 0xf3, + 0x02, 0x63, 0x8d, 0xf8, 0x4d, 0x30, 0xc2, 0xf3, 0x42, 0x53, 0x8d, 0xf8, + 0x4e, 0x30, 0xc2, 0xf3, 0x82, 0x43, 0xc2, 0xf3, 0xc2, 0x32, 0x8d, 0xf8, + 0x4f, 0x30, 0x8d, 0xf8, 0x50, 0x20, 0x12, 0x9b, 0x9d, 0xf8, 0x50, 0x20, + 0x01, 0x33, 0x02, 0xf0, 0x07, 0x02, 0x02, 0x32, 0x93, 0x40, 0x9d, 0xf8, + 0x40, 0x20, 0x02, 0xf0, 0x0f, 0x01, 0x01, 0x22, 0xa3, 0x64, 0x8a, 0x40, + 0xe2, 0x64, 0x52, 0x0a, 0x53, 0x43, 0x23, 0x65, 0x4f, 0xf4, 0x00, 0x73, + 0x63, 0x65, 0x4f, 0xf0, 0x01, 0x0a, 0x63, 0x6e, 0x4f, 0xf4, 0x80, 0x79, + 0x4f, 0xf4, 0x80, 0x56, 0x58, 0x46, 0xc3, 0xf3, 0x80, 0x32, 0x0d, 0x96, + 0x8d, 0xf8, 0x51, 0x20, 0xc3, 0xf3, 0xc6, 0x12, 0x03, 0xf0, 0x7f, 0x03, + 0x8d, 0xf8, 0x52, 0x20, 0x8d, 0xf8, 0x53, 0x30, 0xa3, 0x6e, 0xda, 0x0f, + 0xc3, 0xf3, 0x00, 0x41, 0x8d, 0xf8, 0x54, 0x20, 0xc3, 0xf3, 0x41, 0x72, + 0x8d, 0xf8, 0x55, 0x20, 0xc3, 0xf3, 0x82, 0x62, 0x8d, 0xf8, 0x56, 0x20, + 0xc3, 0xf3, 0x83, 0x52, 0x8d, 0xf8, 0x57, 0x20, 0xc3, 0xf3, 0x40, 0x52, + 0x8d, 0xf8, 0x58, 0x20, 0x00, 0x22, 0x8d, 0xf8, 0x59, 0x20, 0x8d, 0xf8, + 0x5a, 0x10, 0xc3, 0xf3, 0xc0, 0x31, 0x0c, 0x92, 0x8d, 0xf8, 0x5b, 0x10, + 0xc3, 0xf3, 0x80, 0x31, 0x8d, 0xf8, 0x5c, 0x10, 0xc3, 0xf3, 0x40, 0x31, + 0x8d, 0xf8, 0x5d, 0x10, 0xc3, 0xf3, 0x00, 0x31, 0x8d, 0xf8, 0x5e, 0x10, + 0xc3, 0xf3, 0x81, 0x21, 0x8d, 0xf8, 0x5f, 0x10, 0xc3, 0xf3, 0x01, 0x21, + 0xc3, 0xf3, 0x46, 0x03, 0x8d, 0xf8, 0x60, 0x10, 0x09, 0xa9, 0x8d, 0xf8, + 0x61, 0x30, 0x63, 0x6c, 0x8d, 0xf8, 0x62, 0xa0, 0x1b, 0x04, 0x09, 0x93, + 0x07, 0x23, 0xcd, 0xe9, 0x0a, 0x39, 0xec, 0xf7, 0x39, 0xfa, 0x07, 0x23, + 0x41, 0xf2, 0x88, 0x32, 0x58, 0x46, 0x19, 0x46, 0xef, 0xf7, 0x46, 0xfa, + 0x00, 0x28, 0x7f, 0xf4, 0x9b, 0xae, 0x4f, 0xf4, 0x00, 0x71, 0x20, 0x68, + 0xef, 0xf7, 0x7e, 0xfb, 0x00, 0x28, 0x59, 0xd0, 0x23, 0x68, 0x57, 0x4a, + 0x9a, 0x63, 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, 0x84, 0xf8, 0x30, 0xa0, + 0xbf, 0xe5, 0x5e, 0x04, 0x07, 0xd4, 0x13, 0xf4, 0x00, 0x4f, 0x0c, 0xbf, + 0x4f, 0xf4, 0x80, 0x30, 0x4f, 0xf4, 0x80, 0x50, 0x80, 0xe6, 0x4f, 0xf4, + 0x00, 0x50, 0x7d, 0xe6, 0x01, 0x20, 0x7b, 0xe6, 0x4f, 0xf0, 0x00, 0x40, + 0x78, 0xe6, 0x63, 0x64, 0x1b, 0x04, 0x09, 0x21, 0x30, 0x46, 0x0e, 0x93, + 0x4f, 0xf4, 0x40, 0x73, 0x11, 0x92, 0xcd, 0xe9, 0x0f, 0x13, 0x4f, 0xf4, + 0x80, 0x53, 0x0e, 0xa9, 0x12, 0x93, 0xec, 0xf7, 0xfd, 0xf9, 0x30, 0x46, + 0xef, 0xf7, 0xe6, 0xf9, 0x00, 0x28, 0x7f, 0xf4, 0x63, 0xae, 0x23, 0x68, + 0x5a, 0x69, 0xe2, 0x65, 0x9a, 0x69, 0x22, 0x66, 0xda, 0x69, 0x62, 0x66, + 0x1b, 0x6a, 0xa3, 0x66, 0xed, 0xe6, 0x01, 0x2a, 0x0f, 0xd1, 0x1b, 0x04, + 0xb4, 0xf8, 0x66, 0x20, 0x03, 0xf4, 0x7c, 0x13, 0x13, 0x43, 0x12, 0x93, + 0x12, 0x9b, 0x01, 0x33, 0x9b, 0x02, 0xa3, 0x64, 0x23, 0x65, 0x4f, 0xf4, + 0x00, 0x73, 0xe3, 0x64, 0x48, 0xe7, 0x31, 0x4b, 0x4f, 0xf0, 0x80, 0x50, + 0xcb, 0xf8, 0x38, 0x30, 0x63, 0x6b, 0x43, 0xf0, 0x80, 0x53, 0x63, 0x63, + 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0x39, 0xe6, 0xee, 0xf7, 0xcc, 0xf9, + 0x82, 0x46, 0x20, 0x68, 0x43, 0x69, 0x9b, 0x01, 0x00, 0xf1, 0xc3, 0x80, + 0x40, 0x21, 0xef, 0xf7, 0x17, 0xfb, 0x58, 0xb1, 0x63, 0x6b, 0x63, 0x63, + 0x23, 0x68, 0x23, 0x4a, 0x9a, 0x63, 0x63, 0x6b, 0x18, 0x43, 0x01, 0x23, + 0x60, 0x63, 0x84, 0xf8, 0x30, 0x30, 0x9f, 0xe0, 0x61, 0x6c, 0x20, 0x68, + 0x09, 0x04, 0xef, 0xf7, 0x9a, 0xfa, 0x00, 0x28, 0xec, 0xd1, 0xd4, 0xf8, + 0x00, 0xb0, 0x4f, 0xf0, 0xff, 0x33, 0x0e, 0xa9, 0xcb, 0xf8, 0x24, 0x30, + 0x40, 0x23, 0xcb, 0xf8, 0x28, 0x30, 0xdb, 0xf8, 0x2c, 0x30, 0x23, 0xf0, + 0xff, 0x03, 0x43, 0xf0, 0x63, 0x03, 0xcb, 0xf8, 0x2c, 0x30, 0x0d, 0x23, + 0x0e, 0x90, 0xcd, 0xe9, 0x11, 0x06, 0x58, 0x46, 0xcd, 0xe9, 0x0f, 0x39, + 0xec, 0xf7, 0x94, 0xf9, 0x0d, 0x23, 0x41, 0xf2, 0x88, 0x32, 0x58, 0x46, + 0x19, 0x46, 0xef, 0xf7, 0xa1, 0xf9, 0x00, 0x28, 0xc8, 0xd1, 0x0e, 0xae, + 0x23, 0x68, 0x5a, 0x6b, 0x12, 0xf4, 0x95, 0x7f, 0x5a, 0x6b, 0x0d, 0xd0, + 0x11, 0x07, 0x7c, 0xd4, 0x5a, 0x6b, 0x92, 0x07, 0x77, 0xd4, 0x5b, 0x6b, + 0x9b, 0x06, 0x22, 0xd5, 0x20, 0x20, 0xb9, 0xe7, 0xc5, 0x00, 0x20, 0x00, + 0xff, 0x0f, 0xe0, 0x1f, 0x10, 0x04, 0x07, 0xd5, 0x06, 0xf1, 0x20, 0x02, + 0xd3, 0xf8, 0x80, 0x10, 0x46, 0xf8, 0x04, 0x1b, 0x96, 0x42, 0xf9, 0xd1, + 0xee, 0xf7, 0x6a, 0xf9, 0xa0, 0xeb, 0x0a, 0x00, 0x01, 0x30, 0xdb, 0xd1, + 0x4f, 0xf0, 0x00, 0x40, 0xa2, 0xe7, 0xd2, 0xf8, 0x80, 0x30, 0x46, 0xf8, + 0x04, 0x3b, 0xee, 0xf7, 0x5d, 0xf9, 0xa0, 0xeb, 0x0a, 0x00, 0x01, 0x30, + 0xf2, 0xd0, 0x22, 0x68, 0x53, 0x6b, 0x13, 0xf4, 0x80, 0x53, 0xf0, 0xd1, + 0xa8, 0x49, 0x91, 0x63, 0x0e, 0x99, 0xc1, 0xf3, 0x81, 0x12, 0x8d, 0xf8, + 0x24, 0x20, 0xc1, 0xf3, 0x40, 0x12, 0x8d, 0xf8, 0x25, 0x20, 0x0a, 0x0a, + 0x22, 0xf0, 0xff, 0x02, 0x42, 0xea, 0x11, 0x62, 0x92, 0xb2, 0xad, 0xf8, + 0x26, 0x20, 0x0f, 0x9a, 0x12, 0xba, 0x0a, 0x92, 0x10, 0x9a, 0xd1, 0xb2, + 0x8d, 0xf8, 0x2c, 0x10, 0xc2, 0xf3, 0x07, 0x21, 0x8d, 0xf8, 0x2d, 0x10, + 0xc2, 0xf3, 0x03, 0x51, 0x12, 0x0c, 0x8d, 0xf8, 0x2e, 0x10, 0x11, 0x99, + 0x22, 0xf0, 0xff, 0x02, 0xc8, 0xb2, 0x02, 0x43, 0xad, 0xf8, 0x30, 0x20, + 0xc1, 0xf3, 0x85, 0x22, 0x8d, 0xf8, 0x32, 0x20, 0xc1, 0xf3, 0x01, 0x22, + 0x8d, 0xf8, 0x33, 0x20, 0xc1, 0xf3, 0x03, 0x12, 0x01, 0xf0, 0x0f, 0x01, + 0x8d, 0xf8, 0x34, 0x20, 0x9d, 0xf8, 0x4b, 0x20, 0x8d, 0xf8, 0x35, 0x10, + 0x8d, 0xf8, 0x36, 0x20, 0x4f, 0xf4, 0x00, 0x71, 0x20, 0x68, 0x1e, 0x46, + 0xef, 0xf7, 0x64, 0xfa, 0x70, 0xb1, 0x23, 0x68, 0x86, 0x4a, 0x9a, 0x63, + 0x60, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xa7, 0xe4, 0x02, 0x20, + 0x44, 0xe7, 0x08, 0x20, 0x42, 0xe7, 0x4f, 0xf4, 0x00, 0x60, 0x3f, 0xe7, + 0x00, 0x2e, 0x7f, 0xf4, 0x9e, 0xac, 0xa1, 0x6b, 0x9d, 0xf8, 0x34, 0x20, + 0x01, 0x29, 0x9d, 0xf8, 0x35, 0x30, 0xd2, 0xb2, 0xdb, 0xb2, 0x13, 0xd1, + 0x13, 0x43, 0x14, 0xbf, 0x4f, 0xf4, 0x00, 0x73, 0x4f, 0xf4, 0x80, 0x73, + 0xa3, 0x65, 0x03, 0x23, 0xe6, 0x68, 0x99, 0x42, 0x84, 0xf8, 0x30, 0x30, + 0x02, 0xd0, 0xb6, 0xf5, 0x00, 0x4f, 0x05, 0xd1, 0x63, 0x6b, 0x43, 0xf0, + 0x80, 0x53, 0x5c, 0xe0, 0xa6, 0x65, 0xf0, 0xe7, 0xb6, 0xf5, 0x80, 0x4f, + 0x33, 0xd1, 0x00, 0x23, 0xcd, 0xe9, 0x0e, 0x33, 0x23, 0x68, 0x5b, 0x69, + 0x98, 0x01, 0x26, 0xd4, 0x0e, 0xa8, 0xef, 0xf7, 0x3f, 0xfa, 0x60, 0xb9, + 0x0f, 0x9b, 0x59, 0x03, 0x22, 0xd5, 0x61, 0x6c, 0x20, 0x68, 0x09, 0x04, + 0xef, 0xf7, 0xb1, 0xf9, 0x18, 0xb9, 0x02, 0x21, 0x20, 0x68, 0xef, 0xf7, + 0x93, 0xf9, 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, 0x63, 0x6b, 0x00, 0x2b, + 0x3b, 0xd0, 0x23, 0x68, 0x5d, 0x4a, 0x9a, 0x63, 0x4f, 0xf4, 0x00, 0x71, + 0x20, 0x68, 0xef, 0xf7, 0x09, 0xfa, 0x00, 0x28, 0x6d, 0xd0, 0x23, 0x68, + 0x58, 0x4a, 0x9a, 0x63, 0x63, 0x6b, 0x18, 0x43, 0xa0, 0xe7, 0x4f, 0xf4, + 0x00, 0x60, 0xe6, 0xe7, 0x4f, 0xf0, 0x80, 0x60, 0xe3, 0xe7, 0xfe, 0xb9, + 0x23, 0x68, 0xcd, 0xe9, 0x0e, 0x66, 0x5b, 0x69, 0x9a, 0x01, 0x13, 0xd4, + 0x0e, 0xa8, 0xef, 0xf7, 0x0b, 0xfa, 0x60, 0xb9, 0x0f, 0x9b, 0xdb, 0x03, + 0x0f, 0xd5, 0x61, 0x6c, 0x20, 0x68, 0x09, 0x04, 0xef, 0xf7, 0x7d, 0xf9, + 0x18, 0xb9, 0x01, 0x46, 0x20, 0x68, 0xef, 0xf7, 0x5f, 0xf9, 0x61, 0x6b, + 0x08, 0x43, 0xca, 0xe7, 0x4f, 0xf4, 0x00, 0x60, 0xf9, 0xe7, 0x4f, 0xf0, + 0x80, 0x60, 0xf6, 0xe7, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x63, 0x63, 0x63, + 0xc0, 0xe7, 0xec, 0xf7, 0x8f, 0xf8, 0x98, 0xb3, 0x3f, 0x4a, 0xb0, 0xfb, + 0xf2, 0xf9, 0xd4, 0xe9, 0x04, 0xc3, 0xd4, 0xe9, 0x01, 0x8e, 0x4b, 0x45, + 0x0c, 0xd2, 0xa1, 0x6d, 0xb1, 0xf5, 0x00, 0x7f, 0x08, 0xd0, 0xb1, 0xf5, + 0x80, 0x7f, 0x19, 0xd1, 0x9b, 0xb9, 0x90, 0x42, 0x02, 0xd9, 0x37, 0x4b, + 0xb0, 0xfb, 0xf3, 0xf3, 0x21, 0x68, 0x46, 0xea, 0x08, 0x06, 0x4f, 0xf0, + 0x00, 0x08, 0x4a, 0x68, 0x46, 0xea, 0x0e, 0x06, 0x17, 0x40, 0x46, 0xea, + 0x0c, 0x06, 0x37, 0x43, 0x1f, 0x43, 0x4f, 0x60, 0x9e, 0xe7, 0x59, 0x00, + 0xb0, 0xfb, 0xf1, 0xf1, 0x91, 0x42, 0xe7, 0xe7, 0x2c, 0x4a, 0x1b, 0xb9, + 0x90, 0x42, 0x88, 0xbf, 0x4b, 0x46, 0xe5, 0xe7, 0x59, 0x00, 0xb0, 0xfb, + 0xf1, 0xf0, 0xf7, 0xe7, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x63, 0x63, 0x63, + 0x8a, 0xe7, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xb8, 0xf1, 0x00, 0x0f, + 0x7f, 0xf4, 0xdf, 0xab, 0xee, 0xf7, 0x3c, 0xf8, 0x06, 0x46, 0xef, 0xf7, + 0xe1, 0xf8, 0x04, 0x28, 0x2b, 0xd1, 0xe3, 0x6b, 0x00, 0x26, 0xa0, 0x6b, + 0x01, 0x22, 0x66, 0x63, 0x6b, 0x63, 0x23, 0x6c, 0xa1, 0x6c, 0xab, 0x63, + 0x63, 0x6c, 0x27, 0x6d, 0xe6, 0x62, 0x85, 0xf8, 0x54, 0x60, 0x84, 0xf8, + 0x30, 0x20, 0xeb, 0x63, 0xe3, 0x6c, 0x64, 0x6d, 0x28, 0x63, 0x29, 0x64, + 0x28, 0x71, 0x28, 0x46, 0x85, 0xf8, 0x80, 0x20, 0x6b, 0x64, 0xaf, 0x64, + 0xec, 0x64, 0xc5, 0xe9, 0x0a, 0x16, 0xc5, 0xe9, 0x02, 0x36, 0xc5, 0xe9, + 0x04, 0x36, 0xc5, 0xe9, 0x06, 0x36, 0xc5, 0xe9, 0x08, 0x36, 0x2b, 0x68, + 0x1b, 0x6d, 0x98, 0x47, 0x30, 0x46, 0xff, 0xf7, 0x97, 0xbb, 0xee, 0xf7, + 0x09, 0xf8, 0x80, 0x1b, 0x01, 0x30, 0xca, 0xd1, 0x4f, 0xf0, 0x00, 0x43, + 0x63, 0x63, 0xf6, 0xe6, 0x3a, 0x0f, 0x00, 0x18, 0xff, 0x0f, 0xe0, 0x1f, + 0x80, 0xf0, 0xfa, 0x02, 0x00, 0xe1, 0xf5, 0x05, 0x40, 0x78, 0x7d, 0x01, + 0x10, 0xb5, 0x04, 0x46, 0x05, 0xf0, 0x88, 0xf8, 0x20, 0x46, 0x10, 0xbd, + 0x10, 0xb5, 0x04, 0x46, 0x05, 0xf0, 0x82, 0xf8, 0x20, 0x46, 0x10, 0xbd, + 0x38, 0xb5, 0xd0, 0xf8, 0xb8, 0x32, 0x00, 0x25, 0x41, 0xf2, 0x18, 0x01, + 0x04, 0x46, 0x03, 0xf5, 0x80, 0x52, 0x15, 0x60, 0x41, 0xf2, 0x04, 0x02, + 0x9d, 0x50, 0x02, 0x22, 0x5a, 0x54, 0x41, 0xf2, 0x10, 0x01, 0x5d, 0x54, + 0x41, 0xf2, 0x14, 0x01, 0x5a, 0x54, 0xd0, 0xf8, 0xb8, 0x02, 0x18, 0xb1, + 0x05, 0xf0, 0x66, 0xf8, 0xc4, 0xf8, 0xb8, 0x52, 0x00, 0x20, 0x38, 0xbd, + 0x0d, 0x4b, 0x4f, 0xf4, 0x00, 0x72, 0x10, 0xb5, 0x03, 0x60, 0x00, 0x23, + 0x04, 0x46, 0x5c, 0x30, 0x40, 0xe9, 0x15, 0x23, 0x40, 0xe9, 0x13, 0x23, + 0x40, 0xe9, 0x11, 0x23, 0x40, 0xe9, 0x0f, 0x23, 0x00, 0x22, 0x00, 0x23, + 0x40, 0xe9, 0x0d, 0x23, 0xeb, 0xf7, 0x66, 0xfe, 0x4f, 0xf4, 0x7a, 0x73, + 0x20, 0x46, 0xa3, 0x65, 0x10, 0xbd, 0x00, 0xbf, 0x60, 0xeb, 0x01, 0x08, + 0x5c, 0x30, 0xf5, 0xf7, 0x2f, 0xb8, 0x5c, 0x30, 0xf5, 0xf7, 0x4c, 0xb8, + 0x08, 0xb5, 0x09, 0x4b, 0x1b, 0x68, 0x2b, 0xb1, 0x08, 0x4b, 0x1b, 0x68, + 0x50, 0x33, 0x53, 0xf8, 0x20, 0x00, 0x08, 0xbd, 0x06, 0x4b, 0x1b, 0x78, + 0x13, 0xb1, 0x06, 0x48, 0x06, 0xf0, 0xb2, 0xfc, 0x4f, 0xf0, 0xff, 0x30, + 0xf5, 0xe7, 0x00, 0xbf, 0xc4, 0x0b, 0x02, 0x24, 0x44, 0x05, 0x00, 0x24, + 0x08, 0x0b, 0x02, 0x24, 0x5a, 0xe2, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x41, + 0x49, 0x4e, 0x35, 0x68, 0x00, 0x2d, 0x65, 0xd1, 0xef, 0xf7, 0x22, 0xfb, + 0x47, 0x4c, 0x48, 0x4b, 0x7f, 0x21, 0x25, 0x61, 0xc4, 0xe9, 0x00, 0x35, + 0xff, 0x23, 0xc4, 0xe9, 0x02, 0x13, 0x94, 0xf8, 0x21, 0x30, 0xc4, 0xe9, + 0x06, 0x55, 0x03, 0xf0, 0xff, 0x02, 0x1b, 0xb9, 0x84, 0xf8, 0x20, 0x20, + 0xef, 0xf7, 0x0e, 0xfb, 0x02, 0x23, 0xca, 0x22, 0x84, 0xf8, 0x21, 0x30, + 0x23, 0x68, 0x5a, 0x62, 0x53, 0x22, 0x5a, 0x62, 0xdd, 0x68, 0x15, 0xf0, + 0x40, 0x05, 0x2d, 0xd0, 0x22, 0x68, 0x20, 0x69, 0x93, 0x68, 0x23, 0xf4, + 0xe0, 0x03, 0x23, 0xf0, 0x40, 0x03, 0x93, 0x60, 0x63, 0x68, 0x91, 0x68, + 0x03, 0x43, 0xa0, 0x69, 0x03, 0x43, 0x0b, 0x43, 0x93, 0x60, 0xd4, 0xe9, + 0x02, 0x13, 0x43, 0xea, 0x01, 0x43, 0x13, 0x61, 0x2e, 0x4b, 0xda, 0x68, + 0x22, 0xf0, 0x40, 0x02, 0xda, 0x60, 0x9a, 0x68, 0x92, 0x06, 0x33, 0xd5, + 0x9a, 0x68, 0x22, 0xf0, 0x20, 0x02, 0x9a, 0x60, 0xed, 0xf7, 0x76, 0xff, + 0x05, 0x46, 0x10, 0xb1, 0x03, 0x25, 0x84, 0xf8, 0x21, 0x50, 0x25, 0x4a, + 0x93, 0x68, 0x43, 0xf0, 0x20, 0x03, 0x93, 0x60, 0x75, 0xb9, 0x24, 0xe0, + 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0x03, 0x08, 0xda, 0x60, 0xed, 0xf7, + 0x31, 0xff, 0x07, 0x46, 0x23, 0x68, 0xdb, 0x68, 0x5b, 0x06, 0x0b, 0xd5, + 0x00, 0x2d, 0xc3, 0xd0, 0x23, 0x68, 0xff, 0x22, 0x5a, 0x62, 0x1d, 0xbb, + 0x01, 0x23, 0x84, 0xf8, 0x21, 0x30, 0x33, 0x60, 0xbd, 0xe8, 0xf0, 0x81, + 0xed, 0xf7, 0x1e, 0xff, 0xc0, 0x1b, 0xb0, 0xf5, 0x7a, 0x7f, 0xe9, 0xd9, + 0x03, 0x25, 0x84, 0xf8, 0x21, 0x80, 0xe5, 0xe7, 0xed, 0xf7, 0x46, 0xff, + 0x60, 0xb9, 0x22, 0x68, 0x00, 0x25, 0x60, 0x69, 0xd3, 0x6c, 0x23, 0xf0, + 0x03, 0x03, 0xd3, 0x64, 0xe3, 0x69, 0xd1, 0x6c, 0x03, 0x43, 0x0b, 0x43, + 0xd3, 0x64, 0xdb, 0xe7, 0x03, 0x25, 0x84, 0xf8, 0x21, 0x50, 0xd7, 0xe7, + 0x07, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0xdb, 0xd0, 0x06, 0x48, 0xbd, 0xe8, + 0xf0, 0x41, 0x06, 0xf0, 0x11, 0xbc, 0x00, 0xbf, 0xc4, 0x0b, 0x02, 0x24, + 0x44, 0x05, 0x00, 0x24, 0x00, 0x40, 0x00, 0x58, 0x08, 0x0b, 0x02, 0x24, + 0x6e, 0xe2, 0x01, 0x08, 0x10, 0xb5, 0x0b, 0x4c, 0x20, 0x46, 0xf9, 0xf7, + 0xba, 0xf8, 0xb0, 0xfa, 0x80, 0xf1, 0x20, 0x46, 0x08, 0x4c, 0x49, 0x09, + 0xf9, 0xf7, 0xbc, 0xf8, 0x20, 0x46, 0xf9, 0xf7, 0xb0, 0xf8, 0xb0, 0xfa, + 0x80, 0xf1, 0x20, 0x46, 0x49, 0x09, 0xbd, 0xe8, 0x10, 0x40, 0xf9, 0xf7, + 0xb1, 0xb8, 0x00, 0xbf, 0x0c, 0x07, 0x00, 0x24, 0xa8, 0x0b, 0x02, 0x24, + 0x10, 0xb5, 0x04, 0x46, 0x01, 0x68, 0xd0, 0xe9, 0x01, 0x23, 0x05, 0x48, + 0xf9, 0xf7, 0x0c, 0xfc, 0x20, 0x68, 0x04, 0xf0, 0x5b, 0xff, 0x20, 0x46, + 0xbd, 0xe8, 0x10, 0x40, 0x04, 0xf0, 0x56, 0xbf, 0xb0, 0x3f, 0x02, 0x24, + 0x38, 0xb5, 0x04, 0x46, 0x41, 0xf2, 0x1c, 0x00, 0x04, 0xf0, 0x46, 0xff, + 0xc4, 0xf8, 0xb8, 0x02, 0xe0, 0xb1, 0x02, 0x22, 0x41, 0xf2, 0x18, 0x03, + 0x00, 0xf5, 0x80, 0x51, 0x0c, 0x4d, 0xc2, 0x52, 0x00, 0x23, 0x0b, 0x60, + 0x41, 0xf2, 0x04, 0x01, 0x43, 0x50, 0x41, 0xf2, 0x08, 0x01, 0x45, 0x50, + 0x41, 0xf2, 0x0c, 0x01, 0x43, 0x50, 0x41, 0xf2, 0x10, 0x01, 0x43, 0x50, + 0x41, 0xf2, 0x14, 0x03, 0xc2, 0x52, 0xd4, 0xf8, 0xbc, 0x32, 0x1b, 0x69, + 0x98, 0x47, 0x00, 0xb1, 0x02, 0x20, 0x38, 0xbd, 0x00, 0x00, 0x04, 0x08, + 0x2d, 0xe9, 0xf0, 0x41, 0x05, 0x46, 0x40, 0x68, 0x88, 0x46, 0x11, 0x46, + 0xdd, 0xe9, 0x06, 0x67, 0x38, 0xb9, 0x10, 0x48, 0x06, 0xf0, 0xa2, 0xfb, + 0x6f, 0xf4, 0x7a, 0x64, 0x20, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0x22, + 0x04, 0xf0, 0x02, 0xfc, 0x04, 0x46, 0x08, 0xb1, 0x0a, 0x48, 0xf1, 0xe7, + 0x6b, 0x68, 0x32, 0x46, 0x01, 0x21, 0x40, 0x46, 0x04, 0xf0, 0xe8, 0xfb, + 0x00, 0x23, 0x02, 0x46, 0xbb, 0x42, 0x08, 0xbf, 0xb0, 0x42, 0xe9, 0xd0, + 0x69, 0x68, 0x04, 0x48, 0xf5, 0xf7, 0x3a, 0xfe, 0xe2, 0xe7, 0x00, 0xbf, + 0x7d, 0xe2, 0x01, 0x08, 0x93, 0xe2, 0x01, 0x08, 0xa0, 0xe2, 0x01, 0x08, + 0xb0, 0xf1, 0x20, 0x4f, 0x7f, 0xb5, 0x04, 0x46, 0x14, 0xd3, 0x15, 0x4b, + 0x1d, 0x68, 0x1d, 0xb3, 0x2b, 0x68, 0x00, 0xf1, 0xc0, 0x42, 0xde, 0x69, + 0x19, 0x6b, 0x28, 0x46, 0x00, 0x23, 0x03, 0x92, 0x88, 0x47, 0x03, 0x9a, + 0x00, 0x23, 0xcd, 0xe9, 0x00, 0x01, 0x28, 0x46, 0xb0, 0x47, 0x80, 0xb2, + 0x04, 0xb0, 0x70, 0xbd, 0xb0, 0xf1, 0x10, 0x4f, 0x06, 0xd3, 0x0a, 0x4b, + 0x00, 0xf1, 0xe0, 0x42, 0x1d, 0x68, 0x2b, 0x68, 0xde, 0x69, 0xe7, 0xe7, + 0xeb, 0xf7, 0xa6, 0xfd, 0x21, 0x46, 0x02, 0x46, 0x05, 0x48, 0xf9, 0xf7, + 0x31, 0xfa, 0xea, 0xe7, 0x4f, 0xf6, 0xff, 0x70, 0xe8, 0xe7, 0x00, 0xbf, + 0x0c, 0x0b, 0x02, 0x24, 0xa4, 0x0b, 0x02, 0x24, 0xb0, 0x3f, 0x02, 0x24, + 0x10, 0xb5, 0x0c, 0x4c, 0xf7, 0xf7, 0xc6, 0xff, 0x20, 0x46, 0xf8, 0xf7, + 0x54, 0xff, 0x00, 0x23, 0x63, 0x63, 0xf7, 0xf7, 0xab, 0xff, 0x01, 0x21, + 0x07, 0x48, 0xf8, 0xf7, 0xfb, 0xff, 0x01, 0x21, 0x06, 0x48, 0xf8, 0xf7, + 0xf7, 0xff, 0x01, 0x21, 0x05, 0x48, 0xbd, 0xe8, 0x10, 0x40, 0xf8, 0xf7, + 0xf1, 0xbf, 0x00, 0xbf, 0xe8, 0x0b, 0x02, 0x24, 0xa8, 0x0b, 0x02, 0x24, + 0x48, 0x0b, 0x02, 0x24, 0x0c, 0x07, 0x00, 0x24, 0x10, 0xb5, 0x02, 0x24, + 0xc0, 0xe9, 0x07, 0x22, 0xc0, 0xf8, 0x94, 0x42, 0xd0, 0xf8, 0xc0, 0x02, + 0xeb, 0xf7, 0x1b, 0xfd, 0x00, 0x20, 0x10, 0xbd, 0x08, 0xb5, 0x00, 0x22, + 0x04, 0x23, 0x11, 0x46, 0xc0, 0xf8, 0x94, 0x32, 0xd0, 0xf8, 0xc0, 0x02, + 0xeb, 0xf7, 0x0f, 0xfd, 0x00, 0x20, 0x08, 0xbd, 0xf0, 0xb5, 0x41, 0xf2, + 0x18, 0x02, 0xd0, 0xf8, 0xb8, 0x42, 0x89, 0xb0, 0x07, 0x46, 0xa3, 0x5c, + 0x04, 0x2b, 0x65, 0xd1, 0x04, 0xf5, 0x80, 0x56, 0x41, 0xf2, 0x04, 0x03, + 0x31, 0x68, 0x00, 0x29, 0x4f, 0xd1, 0x22, 0x78, 0xaa, 0xb9, 0xe3, 0x58, + 0x01, 0x2b, 0x41, 0xd1, 0x00, 0x25, 0x41, 0xf2, 0x04, 0x03, 0x41, 0xf2, + 0x18, 0x02, 0xe5, 0x50, 0x03, 0x23, 0x35, 0x60, 0xa3, 0x54, 0x41, 0xf2, + 0x11, 0x02, 0xa5, 0x54, 0x41, 0xf2, 0x12, 0x02, 0xa5, 0x52, 0x41, 0xf2, + 0x14, 0x02, 0xa3, 0x54, 0x2b, 0xe0, 0x21, 0x2a, 0x10, 0xd1, 0xe3, 0x58, + 0x05, 0x2b, 0x29, 0xd1, 0xe3, 0x78, 0xa2, 0x78, 0x1b, 0x04, 0x03, 0xeb, + 0x02, 0x23, 0x62, 0x78, 0x13, 0x44, 0x22, 0x79, 0x03, 0xeb, 0x02, 0x63, + 0x41, 0xf2, 0x08, 0x02, 0xa3, 0x50, 0xd9, 0xe7, 0x41, 0x2a, 0x19, 0xd1, + 0xe3, 0x58, 0x05, 0x2b, 0x16, 0xd1, 0xe3, 0x78, 0xa0, 0x78, 0x1b, 0x04, + 0x03, 0xeb, 0x00, 0x23, 0x60, 0x78, 0x03, 0x44, 0x20, 0x79, 0x03, 0xeb, + 0x00, 0x60, 0x41, 0xf2, 0x08, 0x03, 0xe0, 0x50, 0xd7, 0xf8, 0xbc, 0x32, + 0x9b, 0x69, 0x98, 0x47, 0x00, 0x28, 0xc1, 0xd0, 0x02, 0x25, 0x28, 0x46, + 0x09, 0xb0, 0xf0, 0xbd, 0x00, 0x23, 0x41, 0xf2, 0x04, 0x02, 0x38, 0x46, + 0xa3, 0x50, 0x33, 0x60, 0xeb, 0xf7, 0xa2, 0xfc, 0xb4, 0xe7, 0x01, 0x29, + 0xb2, 0xd9, 0x41, 0xf2, 0x08, 0x02, 0x02, 0x39, 0xa0, 0x58, 0xd7, 0xf8, + 0xbc, 0x22, 0x00, 0xeb, 0x01, 0x31, 0x20, 0x46, 0xd5, 0x69, 0xe2, 0x58, + 0xa8, 0x47, 0xe1, 0xe7, 0x07, 0x2b, 0x4f, 0xf0, 0x00, 0x03, 0x13, 0xd1, + 0x41, 0xf2, 0x19, 0x01, 0x63, 0x54, 0x18, 0x49, 0x91, 0xf8, 0x2f, 0x50, + 0x41, 0xf2, 0x11, 0x01, 0x15, 0xf0, 0x04, 0x05, 0x0a, 0xd0, 0x06, 0x20, + 0xa0, 0x54, 0x41, 0xf2, 0x12, 0x02, 0x63, 0x54, 0xa3, 0x52, 0x41, 0xf2, + 0x14, 0x02, 0xa0, 0x54, 0x1d, 0x46, 0xca, 0xe7, 0x08, 0x23, 0xa3, 0x54, + 0x41, 0xf2, 0x12, 0x02, 0x65, 0x54, 0xa5, 0x52, 0x41, 0xf2, 0x14, 0x02, + 0xa3, 0x54, 0xd0, 0xf8, 0xbc, 0x32, 0x5b, 0x69, 0x98, 0x47, 0x09, 0x4b, + 0x09, 0x4a, 0x00, 0x21, 0x09, 0x48, 0x07, 0x92, 0x06, 0x95, 0x00, 0x92, + 0xcd, 0xe9, 0x04, 0x37, 0x04, 0xab, 0xcd, 0xe9, 0x02, 0x01, 0x06, 0x48, + 0x0e, 0xcb, 0xf8, 0xf7, 0xc1, 0xfe, 0xac, 0xe7, 0x8c, 0x02, 0x00, 0x24, + 0x79, 0x68, 0x01, 0x08, 0xd5, 0x4c, 0x01, 0x08, 0x40, 0x0d, 0x03, 0x00, + 0x28, 0x06, 0x00, 0x24, 0x38, 0xb5, 0xd0, 0xf8, 0xb4, 0x32, 0x04, 0x46, + 0x01, 0x79, 0x5b, 0x68, 0x98, 0x47, 0xd4, 0xf8, 0xc0, 0x42, 0x94, 0xf8, + 0xbc, 0x33, 0x01, 0x2b, 0x21, 0xd0, 0x25, 0x68, 0x01, 0x23, 0x84, 0xf8, + 0xbc, 0x33, 0x28, 0x46, 0xab, 0x68, 0x23, 0xf0, 0x01, 0x03, 0xab, 0x60, + 0xee, 0xf7, 0xb0, 0xfc, 0x4f, 0xf4, 0x84, 0x63, 0x22, 0x68, 0x13, 0x61, + 0x0a, 0x4b, 0x01, 0x3b, 0x02, 0xd0, 0x11, 0x69, 0x89, 0x06, 0xfa, 0xd4, + 0xa3, 0x6a, 0x01, 0x2b, 0x06, 0xd1, 0xa3, 0x69, 0x01, 0x2b, 0x03, 0xd0, + 0xab, 0x6b, 0x23, 0xf4, 0x80, 0x33, 0xab, 0x63, 0x00, 0x23, 0x84, 0xf8, + 0xbc, 0x33, 0x00, 0x20, 0x38, 0xbd, 0x00, 0xbf, 0x41, 0x0d, 0x03, 0x00, + 0x08, 0xb5, 0xff, 0xf7, 0xc9, 0xff, 0xfe, 0xf7, 0x05, 0xf9, 0x00, 0x00, + 0x2d, 0xe9, 0xf7, 0x43, 0x0d, 0x78, 0x00, 0x23, 0x06, 0x46, 0xd0, 0xf8, + 0xb8, 0x42, 0x15, 0xf0, 0x60, 0x05, 0xad, 0xf8, 0x06, 0x30, 0x00, 0xf0, + 0x7c, 0x81, 0x20, 0x2d, 0x40, 0xf0, 0x8f, 0x81, 0x91, 0xf8, 0x01, 0x80, + 0xb8, 0xf1, 0x06, 0x0f, 0x00, 0xf2, 0x89, 0x81, 0xdf, 0xe8, 0x18, 0xf0, + 0x44, 0x01, 0x07, 0x00, 0x43, 0x00, 0xb4, 0x00, 0x0b, 0x01, 0x22, 0x01, + 0x27, 0x01, 0x41, 0xf2, 0x18, 0x03, 0xca, 0x88, 0xe0, 0x5c, 0x02, 0xb3, + 0x02, 0x28, 0x01, 0xd0, 0x05, 0x28, 0x18, 0xd1, 0x49, 0x88, 0x04, 0xf5, + 0x80, 0x53, 0x19, 0x60, 0x41, 0xf2, 0x04, 0x03, 0x41, 0xf2, 0x18, 0x01, + 0xe2, 0x50, 0x03, 0x23, 0x63, 0x54, 0x41, 0xf2, 0x14, 0x01, 0x63, 0x54, + 0x21, 0x46, 0xd6, 0xf8, 0xc0, 0x02, 0xc6, 0xf8, 0x94, 0x32, 0xc6, 0xe9, + 0x57, 0x22, 0xeb, 0xf7, 0xf7, 0xfb, 0x00, 0x25, 0x15, 0xe0, 0x30, 0x46, + 0xeb, 0xf7, 0xd2, 0xfb, 0xf9, 0xe7, 0x05, 0x28, 0x01, 0xd0, 0x02, 0x28, + 0xf7, 0xd1, 0x4f, 0xf4, 0x83, 0x72, 0x00, 0x25, 0xe2, 0x52, 0x41, 0xf2, + 0x11, 0x03, 0x06, 0x22, 0xe5, 0x54, 0x41, 0xf2, 0x12, 0x03, 0xe5, 0x52, + 0x41, 0xf2, 0x14, 0x03, 0xe2, 0x54, 0x28, 0x46, 0x03, 0xb0, 0xbd, 0xe8, + 0xf0, 0x83, 0xca, 0x88, 0x41, 0xf2, 0x18, 0x00, 0x00, 0x2a, 0x5f, 0xd0, + 0x20, 0x5c, 0x04, 0xf5, 0x80, 0x53, 0x02, 0x28, 0x01, 0xd0, 0x09, 0x28, + 0x52, 0xd1, 0x4f, 0x88, 0x41, 0xf2, 0x04, 0x09, 0x1f, 0x60, 0x41, 0xf2, + 0x18, 0x03, 0x44, 0xf8, 0x09, 0x20, 0xdf, 0xb9, 0x03, 0x2a, 0x21, 0x46, + 0x4f, 0xf0, 0x03, 0x02, 0x98, 0xbf, 0x4f, 0xf0, 0x09, 0x08, 0x04, 0xf8, + 0x03, 0x80, 0x41, 0xf2, 0x11, 0x03, 0xe7, 0x54, 0x41, 0xf2, 0x12, 0x03, + 0xe7, 0x52, 0x41, 0xf2, 0x14, 0x03, 0x04, 0xf8, 0x03, 0x80, 0x4f, 0xf4, + 0x04, 0x53, 0x23, 0x80, 0x41, 0x23, 0xa3, 0x70, 0x30, 0x46, 0xff, 0xf7, + 0x71, 0xfe, 0xb2, 0xe7, 0x01, 0x2f, 0x41, 0xf2, 0x11, 0x01, 0x1b, 0xd0, + 0x09, 0x20, 0x00, 0x25, 0x02, 0x3f, 0xe0, 0x54, 0x41, 0xf2, 0x12, 0x03, + 0x65, 0x54, 0x21, 0x46, 0xe5, 0x52, 0x41, 0xf2, 0x14, 0x03, 0xe0, 0x54, + 0x41, 0xf2, 0x08, 0x03, 0xe0, 0x58, 0xd6, 0xf8, 0xbc, 0x32, 0x00, 0xeb, + 0x07, 0x30, 0x1b, 0x6a, 0x98, 0x47, 0x34, 0xf8, 0x09, 0x20, 0x01, 0x46, + 0x30, 0x46, 0xff, 0xf7, 0x51, 0xfe, 0xaa, 0xe7, 0x0f, 0x22, 0x00, 0x25, + 0xe2, 0x54, 0x41, 0xf2, 0x12, 0x03, 0x65, 0x54, 0xe5, 0x52, 0x41, 0xf2, + 0x14, 0x03, 0xe2, 0x54, 0x30, 0x46, 0xeb, 0xf7, 0x5d, 0xfb, 0x9c, 0xe7, + 0x00, 0x25, 0x41, 0xf2, 0x04, 0x02, 0xa5, 0x50, 0x1d, 0x60, 0xf5, 0xe7, + 0x02, 0x23, 0x41, 0xf2, 0x11, 0x01, 0x23, 0x54, 0x62, 0x54, 0x41, 0xf2, + 0x12, 0x01, 0x62, 0x52, 0x41, 0xf2, 0x14, 0x01, 0x63, 0x54, 0x72, 0xe7, + 0x41, 0xf2, 0x18, 0x02, 0x04, 0xf5, 0x80, 0x55, 0xa3, 0x5c, 0x10, 0x35, + 0x03, 0x2b, 0x04, 0xd0, 0x06, 0x2b, 0x2d, 0xd0, 0x06, 0x22, 0x29, 0x46, + 0xae, 0xe7, 0x41, 0xf2, 0x04, 0x03, 0x41, 0xf2, 0x11, 0x00, 0xe3, 0x58, + 0xeb, 0xb1, 0x04, 0x23, 0x41, 0xf2, 0x12, 0x01, 0xa3, 0x54, 0x00, 0x22, + 0x22, 0x54, 0x62, 0x52, 0x41, 0xf2, 0x14, 0x02, 0xa3, 0x54, 0x41, 0xf2, + 0x08, 0x03, 0xe0, 0x58, 0x04, 0xf5, 0x80, 0x53, 0x19, 0x68, 0xd6, 0xf8, + 0xbc, 0x32, 0x31, 0xb9, 0x22, 0x78, 0x41, 0x2a, 0x03, 0xd1, 0x5b, 0x6a, + 0x2a, 0x46, 0x98, 0x47, 0xdc, 0xe7, 0x5b, 0x6a, 0x2a, 0x46, 0x01, 0x21, + 0xf9, 0xe7, 0x05, 0x21, 0xa1, 0x54, 0x23, 0x54, 0x41, 0xf2, 0x12, 0x02, + 0xa3, 0x52, 0x0d, 0xe0, 0x41, 0xf2, 0x19, 0x03, 0xe3, 0x5c, 0x01, 0x2b, + 0x0c, 0xd1, 0x07, 0x21, 0xa1, 0x54, 0x41, 0xf2, 0x11, 0x02, 0xa3, 0x54, + 0x41, 0xf2, 0x12, 0x03, 0x00, 0x22, 0xe2, 0x52, 0x41, 0xf2, 0x14, 0x03, + 0xe1, 0x54, 0xbf, 0xe7, 0x00, 0x2b, 0xbd, 0xd1, 0x56, 0x49, 0x91, 0xf8, + 0x2f, 0x10, 0x49, 0x07, 0xb8, 0xd5, 0x02, 0x21, 0xa1, 0x54, 0x41, 0xf2, + 0x11, 0x02, 0xa3, 0x54, 0xdc, 0xe7, 0x41, 0xf2, 0x18, 0x03, 0x41, 0xf2, + 0x10, 0x01, 0xe2, 0x5c, 0x0a, 0x2a, 0x07, 0xd1, 0x02, 0x22, 0x00, 0x25, + 0xe2, 0x54, 0x41, 0xf2, 0x14, 0x03, 0x65, 0x50, 0xe2, 0x52, 0x24, 0xe7, + 0x0a, 0x22, 0xe2, 0x54, 0x0e, 0x23, 0x63, 0x50, 0x41, 0xf2, 0x14, 0x03, + 0xe2, 0x52, 0x04, 0xe7, 0x04, 0xf5, 0x80, 0x51, 0x01, 0x22, 0x18, 0x31, + 0x48, 0xe7, 0x41, 0xf2, 0x18, 0x02, 0xa3, 0x5c, 0x09, 0x2b, 0x3f, 0xf6, + 0xfa, 0xae, 0x4f, 0xf4, 0x1b, 0x75, 0xdd, 0x40, 0xed, 0x43, 0x15, 0xf0, + 0x01, 0x05, 0x7f, 0xf4, 0xf2, 0xae, 0x02, 0x23, 0xa3, 0x54, 0x41, 0xf2, + 0x10, 0x02, 0xa5, 0x50, 0x41, 0xf2, 0x14, 0x02, 0xa3, 0x52, 0x04, 0xf5, + 0x80, 0x53, 0x1d, 0x60, 0x41, 0xf2, 0x04, 0x03, 0xe5, 0x50, 0xfa, 0xe6, + 0x41, 0xf2, 0x18, 0x00, 0x22, 0x5c, 0x09, 0x2a, 0x14, 0xd8, 0x4f, 0xf4, + 0x1b, 0x73, 0xd3, 0x40, 0xdb, 0x43, 0x13, 0xf0, 0x01, 0x03, 0x0d, 0xd1, + 0x02, 0x22, 0x22, 0x54, 0x41, 0xf2, 0x10, 0x00, 0x23, 0x50, 0x41, 0xf2, + 0x14, 0x00, 0x22, 0x52, 0x04, 0xf5, 0x80, 0x52, 0x13, 0x60, 0x41, 0xf2, + 0x04, 0x02, 0xa3, 0x50, 0x27, 0x4b, 0x93, 0xf8, 0x30, 0x50, 0x15, 0xf0, + 0x10, 0x05, 0x08, 0xd0, 0x30, 0x46, 0x45, 0x46, 0xff, 0xf7, 0x46, 0xfe, + 0xd6, 0xf8, 0xc0, 0x02, 0xf0, 0xf7, 0xf0, 0xfc, 0xd1, 0xe6, 0x48, 0x88, + 0xf2, 0xf7, 0x22, 0xfa, 0xcd, 0xe6, 0x4f, 0x78, 0x0b, 0x2f, 0x12, 0xd8, + 0xdf, 0xe8, 0x07, 0xf0, 0x06, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x11, + 0x11, 0x11, 0x23, 0x2c, 0x90, 0xf8, 0x9c, 0x32, 0x03, 0x2b, 0x06, 0xd1, + 0x02, 0x22, 0x0d, 0xf1, 0x06, 0x01, 0x3d, 0x46, 0xff, 0xf7, 0x5e, 0xfd, + 0xb7, 0xe6, 0x30, 0x46, 0x02, 0x25, 0xeb, 0xf7, 0x73, 0xfa, 0xb2, 0xe6, + 0x4b, 0x88, 0x1b, 0x12, 0x21, 0x2b, 0x05, 0xd1, 0xca, 0x88, 0x0f, 0x49, + 0x09, 0x2a, 0x28, 0xbf, 0x09, 0x22, 0xf9, 0xe6, 0x00, 0x22, 0x11, 0x46, + 0xf6, 0xe6, 0x90, 0xf8, 0x9c, 0x32, 0x03, 0x2b, 0xe9, 0xd1, 0x04, 0xf5, + 0x80, 0x51, 0x01, 0x22, 0x0c, 0x31, 0xed, 0xe6, 0x8b, 0x78, 0x03, 0x2b, + 0xe1, 0xd8, 0x90, 0xf8, 0x9c, 0x22, 0x03, 0x2a, 0xdd, 0xd1, 0x41, 0xf2, + 0x0c, 0x02, 0xa3, 0x50, 0x91, 0xe6, 0x00, 0xbf, 0x8c, 0x02, 0x00, 0x24, + 0xb9, 0x02, 0x00, 0x24, 0x43, 0x68, 0x2d, 0xe9, 0xf3, 0x47, 0xdd, 0xe9, + 0x0a, 0x45, 0x80, 0x46, 0x91, 0x46, 0x1b, 0xb9, 0x1b, 0x48, 0x06, 0xf0, + 0x4d, 0xf8, 0x23, 0xe0, 0x00, 0x26, 0x00, 0x27, 0x4f, 0xf0, 0xff, 0x0a, + 0xaf, 0x42, 0xd8, 0xf8, 0x04, 0x00, 0x08, 0xbf, 0xa6, 0x42, 0x22, 0xd0, + 0x00, 0x22, 0x09, 0xeb, 0x06, 0x01, 0x04, 0xf0, 0xa5, 0xf8, 0x08, 0xb1, + 0x12, 0x48, 0xea, 0xe7, 0x01, 0x22, 0xd8, 0xf8, 0x04, 0x30, 0x0d, 0xf1, + 0x07, 0x00, 0x8d, 0xf8, 0x07, 0xa0, 0x11, 0x46, 0x05, 0xf0, 0x5e, 0xff, + 0x01, 0x28, 0x02, 0x46, 0x09, 0xd0, 0xd8, 0xf8, 0x04, 0x10, 0x0b, 0x48, + 0xf5, 0xf7, 0xdc, 0xfa, 0x6f, 0xf4, 0x7a, 0x60, 0x02, 0xb0, 0xbd, 0xe8, + 0xf0, 0x87, 0x01, 0x36, 0x47, 0xf1, 0x00, 0x07, 0xd6, 0xe7, 0x03, 0xf0, + 0xbd, 0xfe, 0x00, 0x28, 0xf4, 0xd0, 0x04, 0x48, 0xc9, 0xe7, 0x00, 0xbf, + 0xbe, 0xe2, 0x01, 0x08, 0xd5, 0xe2, 0x01, 0x08, 0xe3, 0xe2, 0x01, 0x08, + 0x02, 0xe3, 0x01, 0x08, 0x70, 0xb5, 0x04, 0x46, 0x40, 0x68, 0x0d, 0x46, + 0x04, 0x9e, 0x11, 0x46, 0x18, 0xb9, 0x10, 0x48, 0x06, 0xf0, 0x06, 0xf8, + 0x12, 0xe0, 0x00, 0x22, 0x04, 0xf0, 0x6a, 0xf8, 0x08, 0xb1, 0x0d, 0x48, + 0xf6, 0xe7, 0x01, 0x22, 0x63, 0x68, 0x31, 0x46, 0x28, 0x46, 0x05, 0xf0, + 0x27, 0xff, 0x01, 0x28, 0x02, 0x46, 0x06, 0xd0, 0x61, 0x68, 0x08, 0x48, + 0xf5, 0xf7, 0xa6, 0xfa, 0x6f, 0xf4, 0x7a, 0x60, 0x70, 0xbd, 0x60, 0x68, + 0x03, 0xf0, 0x8c, 0xfe, 0x00, 0x28, 0xf9, 0xd0, 0x03, 0x48, 0xdf, 0xe7, + 0x10, 0xe3, 0x01, 0x08, 0x29, 0xe3, 0x01, 0x08, 0x39, 0xe3, 0x01, 0x08, + 0x5a, 0xe3, 0x01, 0x08, 0x08, 0xb5, 0x40, 0x68, 0x03, 0xf0, 0xb2, 0xfd, + 0x00, 0x20, 0x08, 0xbd, 0xf7, 0xb5, 0x04, 0x46, 0xd0, 0xe9, 0x02, 0x01, + 0x03, 0xf0, 0xb0, 0xff, 0x60, 0x60, 0x48, 0xb9, 0xd4, 0xe9, 0x02, 0x12, + 0x13, 0x48, 0xf5, 0xf7, 0x81, 0xfa, 0x6f, 0xf4, 0x7a, 0x65, 0x28, 0x46, + 0x03, 0xb0, 0xf0, 0xbd, 0x02, 0x22, 0x00, 0x21, 0x04, 0xf0, 0x2c, 0xf8, + 0x05, 0x46, 0x18, 0xb1, 0x0d, 0x48, 0x05, 0xf0, 0xbf, 0xff, 0xf0, 0xe7, + 0x60, 0x68, 0x00, 0x27, 0x04, 0xf0, 0xe0, 0xf8, 0xd4, 0xe9, 0x04, 0x23, + 0x9f, 0x42, 0x08, 0xbf, 0x90, 0x42, 0x06, 0xd0, 0xa1, 0x68, 0xcd, 0xe9, + 0x00, 0x23, 0x02, 0x46, 0x05, 0x48, 0xf5, 0xf7, 0x61, 0xfa, 0x01, 0x23, + 0x84, 0xf8, 0x30, 0x30, 0xdd, 0xe7, 0x00, 0xbf, 0x6a, 0xe3, 0x01, 0x08, + 0x91, 0xe3, 0x01, 0x08, 0x9e, 0xe3, 0x01, 0x08, 0x1f, 0xb5, 0x16, 0x48, + 0xf9, 0xf7, 0x0c, 0xf9, 0x15, 0x4b, 0x18, 0x68, 0xf0, 0xb1, 0x03, 0x68, + 0xdb, 0x68, 0x98, 0x47, 0x01, 0xa9, 0x01, 0x20, 0xec, 0xf7, 0x10, 0xfc, + 0xb0, 0xb9, 0x02, 0xa9, 0x01, 0x98, 0xec, 0xf7, 0x37, 0xfe, 0x01, 0x46, + 0x68, 0xb9, 0x9d, 0xf8, 0x08, 0x30, 0x01, 0x98, 0x02, 0x2b, 0x0f, 0xd0, + 0x03, 0x2b, 0x06, 0xd1, 0xec, 0xf7, 0x0a, 0xfe, 0x18, 0xb9, 0x02, 0x21, + 0x01, 0x98, 0xeb, 0xf7, 0x2d, 0xfd, 0x01, 0x98, 0xec, 0xf7, 0xe4, 0xfb, + 0x00, 0x20, 0x05, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x82, 0x68, 0xeb, 0xf7, + 0x3d, 0xfd, 0xf4, 0xe7, 0xb0, 0x3f, 0x02, 0x24, 0x0c, 0x0b, 0x02, 0x24, + 0x02, 0xf0, 0x70, 0xbb, 0xef, 0xf3, 0x10, 0x83, 0x2b, 0xb9, 0xef, 0xf3, + 0x11, 0x80, 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x70, 0x47, 0x01, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x08, 0xb5, 0xef, 0xf3, 0x05, 0x83, 0x4b, 0xb1, + 0x08, 0x4b, 0x58, 0x69, 0x08, 0x4b, 0x1b, 0x68, 0x03, 0xb1, 0x98, 0x47, + 0xdf, 0xf8, 0x1c, 0xc0, 0x00, 0xdf, 0xfe, 0xe7, 0xff, 0xf7, 0xe4, 0xff, + 0x00, 0x28, 0xf1, 0xd1, 0xdf, 0xf8, 0x10, 0xc0, 0x00, 0xdf, 0xef, 0xe7, + 0x1c, 0x01, 0x00, 0x24, 0x0c, 0xdc, 0x01, 0x08, 0x51, 0x43, 0x01, 0x08, + 0x7d, 0x3b, 0x01, 0x08, 0x04, 0x46, 0x0b, 0x4d, 0x07, 0xb5, 0xef, 0xf3, + 0x05, 0x83, 0x00, 0x2b, 0xfb, 0xd1, 0xff, 0xf7, 0xcd, 0xff, 0x02, 0x46, + 0x00, 0x28, 0xf6, 0xd1, 0x20, 0x46, 0x69, 0x46, 0x4f, 0xf0, 0xff, 0x33, + 0xac, 0x46, 0x00, 0xdf, 0x00, 0x28, 0xee, 0xd1, 0xdd, 0xe9, 0x00, 0x30, + 0x98, 0x47, 0xea, 0xe7, 0x01, 0x4e, 0x01, 0x08, 0x2d, 0xe9, 0xf7, 0x4f, + 0x39, 0x4d, 0x6c, 0x6c, 0x00, 0x2c, 0x63, 0xd0, 0x23, 0x69, 0x4f, 0xf0, + 0x00, 0x08, 0xdf, 0xf8, 0xe0, 0x90, 0x4f, 0xf0, 0xf9, 0x0a, 0x01, 0x3b, + 0x6f, 0x69, 0x23, 0x61, 0x23, 0x69, 0x00, 0x2b, 0x55, 0xd1, 0xe3, 0x68, + 0x0b, 0xb1, 0xa2, 0x68, 0x9a, 0x60, 0xd5, 0xf8, 0x4c, 0xb0, 0x04, 0xf1, + 0x18, 0x01, 0x6b, 0x64, 0xef, 0xf3, 0x05, 0x83, 0x43, 0xb1, 0xbb, 0xf1, + 0x00, 0x0f, 0x13, 0xd1, 0xab, 0x69, 0x03, 0x21, 0x29, 0x48, 0x6b, 0x61, + 0xeb, 0xf7, 0x86, 0xf8, 0x01, 0x91, 0xff, 0xf7, 0x91, 0xff, 0x01, 0x99, + 0x02, 0x46, 0x00, 0x28, 0xef, 0xd1, 0x58, 0x46, 0x13, 0x46, 0xcc, 0x46, + 0x00, 0xdf, 0x00, 0x28, 0xec, 0xd1, 0x1b, 0xe0, 0x9b, 0xf8, 0x00, 0x30, + 0x01, 0x91, 0xfa, 0x2b, 0xe6, 0xd1, 0x0b, 0xf1, 0x0c, 0x00, 0xfd, 0xf7, + 0x5a, 0xf9, 0x06, 0x46, 0x00, 0x28, 0xdf, 0xd0, 0x01, 0x99, 0x0c, 0x30, + 0xdb, 0xf8, 0x24, 0x20, 0x04, 0xf0, 0xb6, 0xfa, 0x01, 0x99, 0x30, 0x46, + 0x86, 0xf8, 0x00, 0xa0, 0xa6, 0xf8, 0x02, 0x80, 0xc6, 0xe9, 0x01, 0x1b, + 0xfd, 0xf7, 0x4e, 0xff, 0xe3, 0x78, 0x01, 0x2b, 0x1d, 0xd1, 0x6b, 0x6c, + 0x00, 0x21, 0x62, 0x69, 0x13, 0xb1, 0x18, 0x69, 0x82, 0x42, 0x10, 0xd2, + 0x22, 0x61, 0xc4, 0xe9, 0x02, 0x13, 0x1b, 0xb1, 0x18, 0x69, 0x9c, 0x60, + 0x82, 0x1a, 0x1a, 0x61, 0x59, 0xb1, 0xcc, 0x60, 0x6c, 0x6c, 0x00, 0x2c, + 0xa6, 0xd1, 0x6f, 0x61, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x19, 0x46, + 0x12, 0x1a, 0xdb, 0x68, 0xe6, 0xe7, 0x6c, 0x64, 0xf2, 0xe7, 0x01, 0x23, + 0x63, 0x70, 0xef, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0x27, 0x01, 0x02, 0x80, + 0xdd, 0x4f, 0x01, 0x08, 0x07, 0xb5, 0xbf, 0xf3, 0x5f, 0x8f, 0x78, 0x4b, + 0x00, 0x22, 0x19, 0x68, 0x10, 0x46, 0x5a, 0x60, 0xc1, 0xf3, 0x07, 0x21, + 0x91, 0x42, 0x40, 0xf0, 0xaa, 0x80, 0x10, 0x22, 0xda, 0x60, 0x73, 0x4a, + 0x1a, 0x61, 0x13, 0x22, 0xda, 0x60, 0x72, 0x4a, 0x1a, 0x61, 0x11, 0x22, + 0xda, 0x60, 0x71, 0x4a, 0x1a, 0x61, 0x71, 0x4a, 0xda, 0x60, 0x71, 0x4a, + 0x1a, 0x61, 0x07, 0x22, 0x5a, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, + 0x6f, 0x8f, 0x6e, 0x4b, 0x6e, 0x49, 0x98, 0x68, 0x4f, 0xf0, 0x00, 0x53, + 0x1a, 0x18, 0x02, 0xf1, 0x60, 0x42, 0x12, 0x68, 0x43, 0xf8, 0x04, 0x2b, + 0x8b, 0x42, 0xf7, 0xd1, 0x67, 0x4b, 0x4f, 0xf0, 0x00, 0x52, 0x9a, 0x60, + 0x5a, 0x69, 0x95, 0x03, 0x15, 0xd4, 0x5a, 0x69, 0x12, 0xf4, 0x00, 0x32, + 0x11, 0xd1, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0xc3, 0xf8, + 0x50, 0x22, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x5a, 0x69, + 0x42, 0xf4, 0x00, 0x32, 0x5a, 0x61, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, + 0x6f, 0x8f, 0x59, 0x4b, 0x5a, 0x69, 0xd4, 0x03, 0x27, 0xd4, 0x5a, 0x69, + 0x12, 0xf4, 0x80, 0x32, 0x23, 0xd1, 0xc3, 0xf8, 0x84, 0x20, 0xbf, 0xf3, + 0x4f, 0x8f, 0xd3, 0xf8, 0x80, 0x20, 0x43, 0xf6, 0xe0, 0x74, 0xc2, 0xf3, + 0xc9, 0x00, 0xc2, 0xf3, 0x4e, 0x32, 0x52, 0x01, 0x02, 0xea, 0x04, 0x06, + 0x01, 0x46, 0x46, 0xea, 0x81, 0x75, 0x01, 0x39, 0xc3, 0xf8, 0x60, 0x52, + 0xf9, 0xd2, 0x20, 0x3a, 0x12, 0xf1, 0x20, 0x0f, 0xf2, 0xd1, 0xbf, 0xf3, + 0x4f, 0x8f, 0x5a, 0x69, 0x42, 0xf4, 0x80, 0x32, 0x5a, 0x61, 0xbf, 0xf3, + 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x45, 0x4c, 0xd4, 0xf8, 0xe0, 0x30, + 0x43, 0xf0, 0x00, 0x73, 0xc4, 0xf8, 0xe0, 0x30, 0xd4, 0xf8, 0xe0, 0x30, + 0x03, 0xf0, 0x00, 0x73, 0x01, 0x93, 0x01, 0x9b, 0xed, 0xf7, 0x4a, 0xff, + 0x3b, 0x49, 0x3e, 0x4b, 0xca, 0x68, 0x22, 0xf4, 0xe0, 0x62, 0x12, 0x04, + 0x12, 0x0c, 0x13, 0x43, 0xcb, 0x60, 0xee, 0xf7, 0xc1, 0xfc, 0xa3, 0x69, + 0xa2, 0x69, 0xc3, 0xf3, 0x03, 0x23, 0x38, 0x4a, 0xd3, 0x5c, 0x03, 0xf0, + 0x1f, 0x03, 0xd8, 0x40, 0x36, 0x4b, 0x18, 0x60, 0xef, 0xf7, 0xb8, 0xf8, + 0x23, 0x6f, 0x98, 0x07, 0x0a, 0xd4, 0x34, 0x4a, 0x13, 0x68, 0x43, 0xf4, + 0x80, 0x73, 0x13, 0x60, 0x32, 0x4b, 0x1b, 0x68, 0x23, 0x6f, 0x23, 0xf0, + 0x18, 0x03, 0x23, 0x67, 0xed, 0xf7, 0x90, 0xf9, 0x01, 0x20, 0xf0, 0xf7, + 0x5d, 0xfb, 0x30, 0xb9, 0x2d, 0x48, 0xf7, 0xf7, 0x1f, 0xff, 0x9a, 0x60, + 0x01, 0x32, 0x18, 0x61, 0x4e, 0xe7, 0xed, 0xf7, 0x15, 0xff, 0xe9, 0xf7, + 0xad, 0xfb, 0xef, 0xf3, 0x05, 0x83, 0x2b, 0xb9, 0xff, 0xf7, 0x7c, 0xfe, + 0x10, 0xb9, 0xdf, 0xf8, 0xb0, 0xc0, 0x00, 0xdf, 0x24, 0x4a, 0x25, 0x4b, + 0x13, 0x61, 0x4f, 0xf4, 0x80, 0x53, 0x53, 0x61, 0x44, 0x23, 0xd3, 0x60, + 0x22, 0x4b, 0x93, 0x60, 0x18, 0x23, 0x93, 0x61, 0x21, 0x4b, 0x13, 0x60, + 0xef, 0xf3, 0x05, 0x83, 0x1b, 0xb1, 0x1c, 0x49, 0x1f, 0x48, 0xea, 0xf7, + 0x55, 0xff, 0xff, 0xf7, 0x61, 0xfe, 0x01, 0x46, 0x00, 0x28, 0xf6, 0xd1, + 0x1c, 0x48, 0xdf, 0xf8, 0x78, 0xc0, 0x00, 0xdf, 0x00, 0x28, 0xf0, 0xd0, + 0xef, 0xf3, 0x05, 0x83, 0x2b, 0xb9, 0xff, 0xf7, 0x53, 0xfe, 0x10, 0xb9, + 0xdf, 0xf8, 0x64, 0xc0, 0x00, 0xdf, 0x00, 0x21, 0xe6, 0xe7, 0x00, 0xbf, + 0x90, 0xed, 0x00, 0xe0, 0x39, 0xf0, 0x02, 0x06, 0x39, 0x07, 0x02, 0x13, + 0x3f, 0xf5, 0x0b, 0x13, 0x12, 0x00, 0x00, 0x80, 0x39, 0x00, 0x02, 0x13, + 0x00, 0xed, 0x00, 0xe0, 0x98, 0x02, 0x00, 0x20, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x03, 0xfa, 0x05, 0x29, 0xd5, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x48, 0x02, 0x58, 0x00, 0x10, 0x00, 0x5c, 0xec, 0xe3, 0x01, 0x08, + 0x58, 0x3f, 0x02, 0x24, 0x58, 0x2f, 0x02, 0x24, 0xb4, 0x44, 0x02, 0x24, + 0x00, 0xe4, 0x01, 0x08, 0x1d, 0x01, 0x01, 0x80, 0x19, 0xa7, 0x01, 0x08, + 0xe1, 0x47, 0x01, 0x08, 0x05, 0x45, 0x01, 0x08, 0x91, 0x50, 0x01, 0x08, + 0xb1, 0xf1, 0x20, 0x4f, 0x2d, 0xe9, 0xf0, 0x43, 0x06, 0x46, 0x8b, 0xb0, + 0x0d, 0x46, 0x14, 0x46, 0x1c, 0xd3, 0x79, 0x4f, 0x38, 0x68, 0x00, 0x28, + 0x00, 0xf0, 0xea, 0x80, 0x03, 0x68, 0x4f, 0xf0, 0x00, 0x09, 0x90, 0x46, + 0x00, 0x22, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, 0x89, 0x45, 0x05, 0xf1, + 0xc0, 0x45, 0x08, 0xbf, 0x84, 0x42, 0x3d, 0xd3, 0x38, 0x68, 0x2a, 0x46, + 0x03, 0x68, 0xcd, 0xe9, 0x00, 0x89, 0x9c, 0x69, 0x00, 0x23, 0x31, 0x46, + 0xa0, 0x47, 0x61, 0xe0, 0xb1, 0xf1, 0x10, 0x4f, 0x62, 0xd2, 0x10, 0x46, + 0x04, 0xf0, 0xd2, 0xf8, 0x22, 0x46, 0x31, 0x46, 0x07, 0x46, 0x04, 0xf0, + 0x2d, 0xf9, 0x0c, 0x20, 0x04, 0xf0, 0xca, 0xf8, 0x64, 0x4b, 0x00, 0x22, + 0x84, 0x60, 0x05, 0x93, 0x06, 0xae, 0x63, 0x4b, 0x04, 0x92, 0xcd, 0xe9, + 0x02, 0x30, 0x02, 0xab, 0xc0, 0xe9, 0x00, 0x75, 0x0f, 0xcb, 0x60, 0x4d, + 0x86, 0xe8, 0x0f, 0x00, 0xf7, 0xf7, 0xc6, 0xf9, 0x2b, 0x46, 0x53, 0xf8, + 0x18, 0x4f, 0x00, 0x2c, 0x5d, 0xd1, 0xeb, 0x69, 0x33, 0x2b, 0x40, 0xf2, + 0x9f, 0x80, 0x2c, 0x6a, 0x34, 0x3b, 0x04, 0xf1, 0x34, 0x02, 0xeb, 0x61, + 0x34, 0x23, 0x2a, 0x62, 0x23, 0x60, 0x01, 0x23, 0xa3, 0x71, 0x57, 0xe0, + 0x38, 0x68, 0x00, 0x22, 0x03, 0x68, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, + 0x04, 0xf0, 0x9c, 0xf8, 0x22, 0x46, 0x31, 0x46, 0x80, 0x46, 0x04, 0xf0, + 0xf7, 0xf8, 0x38, 0x68, 0x08, 0xeb, 0x04, 0x09, 0x03, 0x68, 0x5b, 0x6b, + 0x98, 0x47, 0x06, 0x46, 0x38, 0x68, 0x00, 0x22, 0x03, 0x68, 0x19, 0x6b, + 0x00, 0x23, 0x88, 0x47, 0x31, 0x46, 0x02, 0x1b, 0x48, 0x46, 0x04, 0xf0, + 0xf3, 0xf8, 0x3c, 0x68, 0x00, 0x22, 0x23, 0x68, 0x20, 0x46, 0x9e, 0x69, + 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, 0x2a, 0x46, 0x00, 0x23, 0xcd, 0xe9, + 0x00, 0x01, 0x41, 0x46, 0x20, 0x46, 0xb0, 0x47, 0x80, 0xb2, 0x0b, 0xb0, + 0xbd, 0xe8, 0xf0, 0x83, 0x3b, 0x4f, 0x01, 0xf1, 0xe0, 0x45, 0x00, 0x22, + 0x38, 0x68, 0x03, 0x68, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, 0x00, 0x23, + 0x8b, 0x42, 0x08, 0xbf, 0x84, 0x42, 0x06, 0xd2, 0x38, 0x68, 0x00, 0x22, + 0x03, 0x68, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, 0x04, 0x46, 0x38, 0x68, + 0x00, 0x23, 0x02, 0x68, 0xcd, 0xe9, 0x00, 0x43, 0x94, 0x69, 0x2a, 0x46, + 0x79, 0xe7, 0x22, 0x68, 0x33, 0x2a, 0x3d, 0xd9, 0xe2, 0x68, 0x00, 0x2a, + 0x37, 0xd0, 0x1a, 0x60, 0xa3, 0x68, 0x93, 0x60, 0xf7, 0xf7, 0x44, 0xf9, + 0x00, 0x22, 0x4f, 0xf0, 0xff, 0x33, 0x04, 0xf1, 0x24, 0x07, 0xc4, 0xe9, + 0x05, 0x23, 0x96, 0xe8, 0x0f, 0x00, 0x87, 0xe8, 0x0f, 0x00, 0x23, 0x4b, + 0xe3, 0x61, 0xfc, 0xf7, 0x63, 0xfa, 0x22, 0x4b, 0x02, 0x46, 0x21, 0x46, + 0x23, 0x62, 0x63, 0x69, 0x03, 0x44, 0x1c, 0x48, 0x63, 0x61, 0xf8, 0xf7, + 0x89, 0xf8, 0x2a, 0x6b, 0xef, 0xf3, 0x05, 0x83, 0x13, 0xb9, 0xff, 0xf7, + 0x49, 0xfd, 0xe8, 0xb1, 0xd2, 0xb1, 0x13, 0x78, 0xf3, 0x2b, 0x17, 0xd1, + 0x02, 0xf1, 0x0c, 0x03, 0x01, 0x21, 0x53, 0xe8, 0x00, 0x4f, 0x44, 0xea, + 0x01, 0x00, 0x43, 0xe8, 0x00, 0x05, 0x05, 0xb1, 0xf7, 0xe7, 0x10, 0x46, + 0xfd, 0xf7, 0x1a, 0xfd, 0x08, 0xe0, 0xa2, 0x68, 0x1a, 0x60, 0xc7, 0xe7, + 0x04, 0xf1, 0x08, 0x03, 0xa4, 0x68, 0x5a, 0xe7, 0xf7, 0xf7, 0x08, 0xf9, + 0x00, 0x20, 0x96, 0xe7, 0x10, 0x46, 0x01, 0x21, 0xdf, 0xf8, 0x28, 0xc0, + 0x00, 0xdf, 0xf7, 0xe7, 0x4f, 0xf6, 0xff, 0x70, 0x8d, 0xe7, 0x00, 0xbf, + 0x0c, 0x0b, 0x02, 0x24, 0x03, 0x4b, 0x01, 0x08, 0xf5, 0x64, 0x01, 0x08, + 0xd8, 0x13, 0x02, 0x24, 0xa4, 0x0b, 0x02, 0x24, 0x27, 0x4b, 0x01, 0x08, + 0x2d, 0x78, 0x01, 0x08, 0x75, 0x77, 0x01, 0x08, 0x73, 0xb5, 0x1f, 0x4c, + 0x04, 0xf1, 0x56, 0x05, 0x04, 0xf1, 0x5a, 0x06, 0xb4, 0xf8, 0x54, 0x10, + 0x28, 0x46, 0x01, 0x91, 0xfc, 0xf7, 0x7d, 0xfd, 0x58, 0xb3, 0x01, 0x99, + 0x30, 0x46, 0xfc, 0xf7, 0x85, 0xfd, 0xe3, 0x6d, 0x53, 0xf8, 0x20, 0x00, + 0x18, 0xb3, 0x03, 0x78, 0xf1, 0x3b, 0x08, 0x2b, 0xec, 0xd8, 0x01, 0xa2, + 0x52, 0xf8, 0x23, 0xf0, 0x29, 0x74, 0x01, 0x08, 0xd9, 0x73, 0x01, 0x08, + 0x2f, 0x74, 0x01, 0x08, 0xd9, 0x73, 0x01, 0x08, 0xd9, 0x73, 0x01, 0x08, + 0x33, 0x74, 0x01, 0x08, 0x37, 0x74, 0x01, 0x08, 0xd9, 0x73, 0x01, 0x08, + 0x3b, 0x74, 0x01, 0x08, 0x23, 0x6e, 0x98, 0x47, 0xd4, 0xe7, 0x63, 0x6e, + 0xfb, 0xe7, 0xa3, 0x6e, 0xf9, 0xe7, 0xe3, 0x6e, 0xf7, 0xe7, 0x23, 0x6f, + 0xf5, 0xe7, 0x00, 0x20, 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfc, 0xf7, + 0x57, 0xbc, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x1f, 0x4b, 0x18, 0x68, + 0x70, 0xb5, 0x38, 0x30, 0xea, 0xf7, 0xc6, 0xff, 0x18, 0xb1, 0x1d, 0x4b, + 0x4f, 0xf0, 0x80, 0x62, 0x5a, 0x60, 0x1c, 0x4c, 0xe3, 0x68, 0x01, 0x33, + 0xe3, 0x60, 0xfc, 0xf7, 0x9f, 0xfc, 0x00, 0x20, 0xfc, 0xf7, 0x40, 0xfc, + 0x23, 0x6d, 0x03, 0xb1, 0x98, 0x47, 0x22, 0x6c, 0x2a, 0xb3, 0xa3, 0x69, + 0xe1, 0x6b, 0x99, 0x42, 0x03, 0xd0, 0xd9, 0x69, 0xe3, 0x63, 0x01, 0xb9, + 0xda, 0x61, 0xda, 0x69, 0xba, 0xb9, 0x26, 0x7a, 0x02, 0x2e, 0x18, 0xd1, + 0x65, 0x6a, 0xb5, 0xb1, 0xe3, 0x6b, 0x95, 0xf9, 0x20, 0x20, 0x93, 0xf9, + 0x20, 0x30, 0x9a, 0x42, 0x0f, 0xd1, 0x28, 0x46, 0xfc, 0xf7, 0xac, 0xfb, + 0xe0, 0x6b, 0xfc, 0xf7, 0x17, 0xfc, 0x6e, 0x70, 0x23, 0x6c, 0xe5, 0x63, + 0xa5, 0x61, 0xeb, 0x61, 0x03, 0xe0, 0x01, 0x3a, 0xda, 0x61, 0x00, 0x2a, + 0xe3, 0xd0, 0x70, 0xbd, 0xd8, 0x27, 0x02, 0x24, 0x00, 0xed, 0x00, 0xe0, + 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, 0xef, 0xf3, 0x05, 0x83, + 0x1b, 0xb1, 0x5c, 0xb9, 0x6f, 0xf0, 0x03, 0x00, 0x17, 0xe0, 0xff, 0xf7, + 0x7d, 0xfc, 0x00, 0x28, 0xf7, 0xd1, 0x20, 0x46, 0xdf, 0xf8, 0x2c, 0xc0, + 0x00, 0xdf, 0x0e, 0xe0, 0x23, 0x78, 0xf6, 0x2b, 0xf0, 0xd1, 0xe1, 0x89, + 0x04, 0xf1, 0x0c, 0x00, 0xfc, 0xf7, 0x01, 0xfd, 0xe3, 0x89, 0x83, 0x42, + 0x04, 0xd9, 0x20, 0x46, 0xfd, 0xf7, 0x4c, 0xfc, 0x00, 0x20, 0x10, 0xbd, + 0x6f, 0xf0, 0x02, 0x00, 0xfb, 0xe7, 0x00, 0xbf, 0x31, 0x3f, 0x01, 0x08, + 0x10, 0xb5, 0x2c, 0x4c, 0x2c, 0x48, 0xf3, 0xf7, 0x53, 0xff, 0x63, 0x69, + 0x13, 0xb9, 0x94, 0xf8, 0x3d, 0x30, 0x23, 0xb1, 0x28, 0x48, 0xf3, 0xf7, + 0x2b, 0xff, 0x00, 0x20, 0x10, 0xbd, 0xa3, 0x6a, 0x53, 0xb1, 0xa2, 0x6a, + 0x00, 0x23, 0x25, 0x49, 0xe0, 0x6a, 0xb3, 0xeb, 0x90, 0x0f, 0x11, 0xd2, + 0x42, 0xf8, 0x23, 0x10, 0x01, 0x33, 0xf7, 0xe7, 0xe0, 0x6a, 0x21, 0x4b, + 0x98, 0x42, 0x94, 0xbf, 0x20, 0xf0, 0x03, 0x00, 0x4f, 0xf0, 0xff, 0x30, + 0x03, 0xf0, 0x1c, 0xff, 0xa0, 0x62, 0x00, 0x28, 0xe7, 0xd1, 0xdf, 0xe7, + 0x44, 0x23, 0x1b, 0x4a, 0x63, 0x62, 0x1b, 0x4b, 0x22, 0x62, 0x63, 0x60, + 0x1a, 0x4b, 0xa3, 0x60, 0x00, 0x23, 0xe3, 0x60, 0x19, 0x4b, 0x23, 0x61, + 0xef, 0xf3, 0x05, 0x83, 0x8b, 0xb1, 0x00, 0x23, 0x63, 0x61, 0x94, 0xf8, + 0x3c, 0x30, 0x2b, 0xb1, 0xa0, 0x6a, 0x08, 0xb1, 0x03, 0xf0, 0x08, 0xff, + 0x00, 0x23, 0xa3, 0x62, 0x0b, 0x48, 0xf3, 0xf7, 0xf1, 0xfe, 0x20, 0x6c, + 0xff, 0xf7, 0x8e, 0xff, 0xc1, 0xe7, 0xff, 0xf7, 0x13, 0xfc, 0x00, 0x28, + 0xe9, 0xd1, 0xa2, 0xf1, 0x78, 0x01, 0x0c, 0x48, 0x60, 0x3a, 0xdf, 0xf8, + 0x30, 0xc0, 0x00, 0xdf, 0x60, 0x61, 0x00, 0x28, 0xb0, 0xd1, 0xe0, 0xe7, + 0x34, 0x14, 0x02, 0x24, 0x88, 0x14, 0x02, 0x24, 0xa5, 0x2e, 0x5a, 0xe2, + 0xfb, 0xff, 0xff, 0x7f, 0xac, 0x14, 0x02, 0x24, 0xd8, 0x13, 0x02, 0x24, + 0xd1, 0x39, 0x01, 0x08, 0x09, 0x4b, 0x01, 0x08, 0x45, 0xc1, 0x00, 0x08, + 0x05, 0x45, 0x01, 0x08, 0x02, 0x46, 0x08, 0xb5, 0xef, 0xf3, 0x05, 0x83, + 0x13, 0xb1, 0x6f, 0xf0, 0x05, 0x00, 0x08, 0xbd, 0xff, 0xf7, 0xe8, 0xfb, + 0x00, 0x28, 0xf8, 0xd1, 0x10, 0x46, 0xdf, 0xf8, 0x08, 0xc0, 0x00, 0xdf, + 0xf5, 0xe7, 0x00, 0xbf, 0xf9, 0x43, 0x01, 0x08, 0x06, 0x4b, 0x10, 0xb5, + 0x03, 0x60, 0x04, 0x46, 0x90, 0xf8, 0x80, 0x30, 0x0b, 0xb1, 0xfe, 0xf7, + 0xfd, 0xf8, 0xe0, 0x6d, 0xff, 0xf7, 0xe0, 0xff, 0x20, 0x46, 0x10, 0xbd, + 0x60, 0xeb, 0x01, 0x08, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xec, 0xff, + 0x20, 0x46, 0x03, 0xf0, 0xb1, 0xfe, 0x20, 0x46, 0x10, 0xbd, 0x00, 0x00, + 0x07, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x60, 0xf5, 0xf7, 0x48, 0xfc, + 0xd4, 0xf8, 0xbc, 0x00, 0xff, 0xf7, 0xc8, 0xff, 0x20, 0x1d, 0xf8, 0xf7, + 0x91, 0xf9, 0x20, 0x46, 0x10, 0xbd, 0x00, 0xbf, 0x0c, 0xeb, 0x01, 0x08, + 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xea, 0xff, 0x20, 0x46, 0x03, 0xf0, + 0x95, 0xfe, 0x20, 0x46, 0x10, 0xbd, 0x00, 0x00, 0x02, 0x46, 0x08, 0xb5, + 0xef, 0xf3, 0x05, 0x83, 0x13, 0xb1, 0x6f, 0xf0, 0x05, 0x00, 0x08, 0xbd, + 0xff, 0xf7, 0x9e, 0xfb, 0x00, 0x28, 0xf8, 0xd1, 0x10, 0x46, 0xdf, 0xf8, + 0x08, 0xc0, 0x00, 0xdf, 0xf5, 0xe7, 0x00, 0xbf, 0x91, 0x3f, 0x01, 0x08, + 0x02, 0x46, 0x08, 0xb5, 0xef, 0xf3, 0x05, 0x83, 0x0b, 0xb1, 0x00, 0x20, + 0x08, 0xbd, 0xff, 0xf7, 0x8b, 0xfb, 0x00, 0x28, 0xf9, 0xd1, 0x10, 0x46, + 0xdf, 0xf8, 0x04, 0xc0, 0x00, 0xdf, 0xf5, 0xe7, 0x39, 0x47, 0x01, 0x08, + 0x10, 0xb4, 0x02, 0xf0, 0x01, 0x04, 0x92, 0x07, 0x09, 0xd4, 0x0c, 0x30, + 0x1c, 0xb1, 0x5d, 0xf8, 0x04, 0x4b, 0xfc, 0xf7, 0xb8, 0xbb, 0x5d, 0xf8, + 0x04, 0x4b, 0xfc, 0xf7, 0xa3, 0xbb, 0xc0, 0x68, 0x01, 0xea, 0x00, 0x02, + 0x2c, 0xb1, 0x91, 0x42, 0x18, 0xbf, 0x00, 0x20, 0x5d, 0xf8, 0x04, 0x4b, + 0x70, 0x47, 0x00, 0x2a, 0x08, 0xbf, 0x00, 0x20, 0xf8, 0xe7, 0x00, 0x00, + 0xf8, 0xb5, 0x0d, 0x46, 0x17, 0x46, 0x1e, 0x46, 0x04, 0x46, 0xc0, 0xb1, + 0x03, 0x78, 0xf3, 0x2b, 0x15, 0xd1, 0x00, 0x29, 0x13, 0xdb, 0xff, 0xf7, + 0xd5, 0xff, 0x90, 0xb9, 0x96, 0xb1, 0x31, 0x46, 0x43, 0x20, 0xfc, 0xf7, + 0x79, 0xfa, 0x38, 0xb1, 0x08, 0x4b, 0x20, 0x46, 0x59, 0x69, 0xfc, 0xf7, + 0xb7, 0xfa, 0x4d, 0x62, 0x81, 0xf8, 0x23, 0x70, 0x6f, 0xf0, 0x01, 0x00, + 0x01, 0xe0, 0x6f, 0xf0, 0x03, 0x00, 0xf8, 0xbd, 0x6f, 0xf0, 0x02, 0x00, + 0xfb, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0xf8, 0xb5, 0x06, 0x46, + 0x70, 0xb3, 0x03, 0x78, 0xf3, 0x2b, 0x2b, 0xd1, 0x00, 0x29, 0x29, 0xdb, + 0x00, 0xf1, 0x0c, 0x03, 0x53, 0xe8, 0x00, 0x2f, 0x42, 0xea, 0x01, 0x04, + 0x43, 0xe8, 0x00, 0x40, 0x00, 0xb1, 0xf7, 0xe7, 0xb5, 0x68, 0x25, 0xb9, + 0x28, 0x46, 0xfc, 0xf7, 0xab, 0xfa, 0x20, 0x46, 0xf8, 0xbd, 0x69, 0x6a, + 0x30, 0x46, 0x95, 0xf8, 0x23, 0x20, 0xaf, 0x68, 0xff, 0xf7, 0x9a, 0xff, + 0x01, 0x46, 0x68, 0xb1, 0x95, 0xf8, 0x23, 0x30, 0x9b, 0x07, 0x56, 0xbf, + 0x6c, 0x6a, 0x04, 0x46, 0x20, 0xea, 0x04, 0x04, 0x28, 0x46, 0xfc, 0xf7, + 0x1f, 0xfa, 0x00, 0x22, 0xfc, 0xf7, 0xba, 0xfa, 0x3d, 0x46, 0xe0, 0xe7, + 0x6f, 0xf0, 0x03, 0x04, 0xe1, 0xe7, 0x70, 0xb5, 0x05, 0x46, 0x84, 0x68, + 0x04, 0xb9, 0x70, 0xbd, 0x61, 0x6a, 0x28, 0x46, 0x94, 0xf8, 0x23, 0x20, + 0xa6, 0x68, 0xff, 0xf7, 0x79, 0xff, 0x01, 0x46, 0x28, 0xb1, 0x20, 0x46, + 0xfc, 0xf7, 0x06, 0xfa, 0x00, 0x22, 0xfc, 0xf7, 0xa1, 0xfa, 0x34, 0x46, + 0xec, 0xe7, 0x70, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0x16, 0x46, 0x00, 0x21, + 0x1c, 0x22, 0x03, 0xf0, 0x39, 0xfe, 0x20, 0x46, 0x32, 0x46, 0x29, 0x46, + 0xf7, 0xf7, 0x0e, 0xfb, 0x20, 0x46, 0x70, 0xbd, 0xc3, 0x68, 0x18, 0x47, + 0xff, 0xf7, 0xfc, 0xbf, 0x38, 0xb5, 0xd0, 0xf8, 0xc0, 0x42, 0x01, 0xf0, + 0x0f, 0x05, 0x63, 0x68, 0x9d, 0x42, 0x37, 0xd8, 0x11, 0xf0, 0x80, 0x0f, + 0x4f, 0xf0, 0x1c, 0x02, 0x34, 0xd0, 0x02, 0xfb, 0x05, 0x43, 0x02, 0xfb, + 0x05, 0x41, 0x01, 0x22, 0x3c, 0x33, 0x81, 0xf8, 0x3d, 0x20, 0x01, 0x22, + 0x1d, 0x70, 0x9a, 0x70, 0x94, 0xf8, 0xbc, 0x13, 0x91, 0x42, 0x23, 0xd0, + 0x84, 0xf8, 0xbc, 0x23, 0x1a, 0x78, 0x5b, 0x78, 0x20, 0x68, 0x01, 0x2b, + 0x4f, 0xf0, 0x20, 0x03, 0x0c, 0xbf, 0x00, 0xf5, 0x10, 0x61, 0x00, 0xf5, + 0x30, 0x61, 0x13, 0xfb, 0x02, 0x13, 0x19, 0x68, 0x00, 0x29, 0x04, 0xdb, + 0x1a, 0xb1, 0x1a, 0x68, 0x22, 0xf0, 0x80, 0x42, 0x1a, 0x60, 0x1a, 0x68, + 0x42, 0xf4, 0x00, 0x12, 0x1a, 0x60, 0x25, 0xb9, 0x04, 0xf5, 0x71, 0x72, + 0x21, 0x7c, 0xed, 0xf7, 0x55, 0xfc, 0x00, 0x23, 0x84, 0xf8, 0xbc, 0x33, + 0x00, 0x20, 0x38, 0xbd, 0x02, 0xfb, 0x01, 0x43, 0x02, 0xfb, 0x01, 0x41, + 0x00, 0x22, 0x03, 0xf5, 0xfe, 0x73, 0x81, 0xf8, 0xfd, 0x21, 0xc8, 0xe7, + 0x70, 0xb5, 0x04, 0x46, 0x16, 0x46, 0x0d, 0x46, 0x51, 0xbb, 0xd0, 0xf8, + 0x94, 0x32, 0x03, 0x2b, 0x1f, 0xd1, 0xd0, 0xe9, 0x58, 0x12, 0x91, 0x42, + 0x0e, 0xd9, 0x89, 0x1a, 0x8a, 0x42, 0xc0, 0xf8, 0x60, 0x11, 0xd0, 0xf8, + 0xc0, 0x02, 0x88, 0xbf, 0x8a, 0xb2, 0x31, 0x46, 0x98, 0xbf, 0x92, 0xb2, + 0xea, 0xf7, 0xfa, 0xfb, 0x28, 0x46, 0x70, 0xbd, 0xd0, 0xf8, 0xb4, 0x32, + 0x1b, 0x69, 0x23, 0xb1, 0x90, 0xf8, 0x9c, 0x22, 0x03, 0x2a, 0x00, 0xd1, + 0x98, 0x47, 0x20, 0x46, 0xfe, 0xf7, 0xbe, 0xfe, 0xf0, 0xe7, 0x05, 0x2b, + 0xee, 0xd1, 0xc4, 0xf8, 0x94, 0x12, 0xff, 0xf7, 0x85, 0xff, 0xe9, 0xe7, + 0xd0, 0xf8, 0xb4, 0x32, 0x9b, 0x69, 0x33, 0xb1, 0x90, 0xf8, 0x9c, 0x22, + 0x03, 0x2a, 0x02, 0xd1, 0x00, 0x25, 0x98, 0x47, 0xde, 0xe7, 0x02, 0x25, + 0xdc, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0x80, 0x48, 0x00, 0x20, 0x91, 0xb0, + 0xea, 0xf7, 0x3c, 0xfc, 0x00, 0x20, 0xef, 0xf7, 0x1b, 0xff, 0xed, 0xf7, + 0xdb, 0xfa, 0xfe, 0xf7, 0x6d, 0xfe, 0xae, 0x48, 0xf8, 0xf7, 0x3c, 0xfb, + 0xad, 0x4b, 0x18, 0x68, 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0xac, 0x4b, + 0x18, 0x68, 0x10, 0xb1, 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0xaa, 0x4e, + 0x06, 0x23, 0xaa, 0x4a, 0x30, 0x21, 0xaa, 0x48, 0xf4, 0xf7, 0x34, 0xfc, + 0xd6, 0xf8, 0xb4, 0x32, 0x13, 0xb1, 0x00, 0x23, 0xc6, 0xf8, 0xb4, 0x32, + 0xa6, 0x4b, 0x4f, 0xf0, 0x01, 0x0a, 0xa6, 0x4c, 0x06, 0x22, 0xc6, 0xf8, + 0xb0, 0x32, 0x00, 0x23, 0xa4, 0x48, 0x33, 0x70, 0x23, 0x63, 0x23, 0x61, + 0xe3, 0x60, 0xe3, 0x62, 0x86, 0xf8, 0x9c, 0xa2, 0xc4, 0xf8, 0x04, 0x64, + 0xc6, 0xf8, 0xc0, 0x42, 0xc4, 0xe9, 0x08, 0x33, 0xc4, 0xe9, 0x06, 0xa3, + 0x94, 0xf8, 0xbd, 0x33, 0xc4, 0xe9, 0x00, 0x02, 0x03, 0xf0, 0xff, 0x07, + 0x00, 0x2b, 0x40, 0xf0, 0xa3, 0x80, 0x99, 0x4d, 0x4f, 0xf0, 0x02, 0x09, + 0x84, 0xf8, 0xbc, 0x73, 0x4f, 0xf0, 0x0a, 0x08, 0xd5, 0xf8, 0xe0, 0x30, + 0x4f, 0xf0, 0x03, 0x0b, 0x0b, 0xa9, 0x94, 0x48, 0x43, 0xea, 0x0a, 0x03, + 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, 0xe0, 0x30, 0x03, 0xea, 0x0a, 0x03, + 0x0a, 0x93, 0x0a, 0x9b, 0xd5, 0xf8, 0xe0, 0x30, 0x43, 0xf0, 0x02, 0x03, + 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x02, 0x03, + 0x09, 0x93, 0x09, 0x9b, 0xd5, 0xf8, 0xe0, 0x30, 0x43, 0xf0, 0x04, 0x03, + 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x04, 0x03, + 0x08, 0x93, 0x08, 0x9b, 0xd5, 0xf8, 0xe0, 0x30, 0x43, 0xf0, 0x80, 0x03, + 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x80, 0x03, + 0x07, 0x93, 0x07, 0x9b, 0xd5, 0xf8, 0xe0, 0x30, 0x43, 0xf4, 0x80, 0x73, + 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, 0xe0, 0x30, 0x0d, 0x97, 0x03, 0xf4, + 0x80, 0x73, 0x06, 0x93, 0x06, 0x9b, 0x20, 0x23, 0xcd, 0xe9, 0x0e, 0xb8, + 0xcd, 0xe9, 0x0b, 0x39, 0xef, 0xf7, 0xa6, 0xfd, 0x08, 0x23, 0x0b, 0xa9, + 0x71, 0x48, 0xcd, 0xf8, 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0x39, 0xcd, 0xe9, + 0x0d, 0x7b, 0xef, 0xf7, 0x9b, 0xfd, 0x43, 0xf6, 0x23, 0x43, 0x0b, 0xa9, + 0x6c, 0x48, 0x0d, 0x97, 0xcd, 0xf8, 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0x39, + 0xef, 0xf7, 0x90, 0xfd, 0x0b, 0xa9, 0x69, 0x48, 0x0d, 0x97, 0xcd, 0xf8, + 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0xa9, 0xef, 0xf7, 0x87, 0xfd, 0x10, 0x23, + 0x0b, 0xa9, 0x65, 0x48, 0x0d, 0x97, 0xcd, 0xf8, 0x3c, 0x80, 0xcd, 0xe9, + 0x0b, 0x39, 0xef, 0xf7, 0x7d, 0xfd, 0x4f, 0xf4, 0x00, 0x63, 0x0b, 0xa9, + 0x60, 0x48, 0x0d, 0x97, 0xcd, 0xf8, 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0x39, + 0xef, 0xf7, 0x72, 0xfd, 0xd5, 0xf8, 0xd8, 0x30, 0x51, 0x46, 0x4d, 0x20, + 0x43, 0xf0, 0x80, 0x63, 0xc5, 0xf8, 0xd8, 0x30, 0xd5, 0xf8, 0xd8, 0x30, + 0x03, 0xf0, 0x80, 0x63, 0x05, 0x93, 0x05, 0x9b, 0xd5, 0xf8, 0xd8, 0x30, + 0x43, 0xf0, 0x00, 0x73, 0xc5, 0xf8, 0xd8, 0x30, 0xd5, 0xf8, 0xd8, 0x30, + 0x03, 0xf0, 0x00, 0x73, 0x04, 0x93, 0x04, 0x9b, 0xea, 0xf7, 0x06, 0xfb, + 0x4f, 0x4b, 0x4f, 0xf4, 0x00, 0x52, 0x9a, 0x60, 0x03, 0x23, 0x27, 0x68, + 0x84, 0xf8, 0xbd, 0x33, 0x44, 0x4b, 0xdb, 0x6b, 0x13, 0xf4, 0x80, 0x73, + 0x08, 0xbf, 0x23, 0x61, 0xbb, 0x68, 0xd4, 0xf8, 0x10, 0x80, 0x23, 0xf0, + 0x01, 0x03, 0xbb, 0x60, 0xa3, 0x69, 0x01, 0x2b, 0x40, 0xf0, 0xd4, 0x82, + 0xbb, 0x6b, 0x62, 0x6b, 0x23, 0xf4, 0x80, 0x33, 0x01, 0x2a, 0xbb, 0x63, + 0xfb, 0x68, 0x23, 0xf4, 0x84, 0x03, 0x23, 0xf0, 0x40, 0x03, 0xfb, 0x60, + 0xfb, 0x68, 0x23, 0xf4, 0x40, 0x13, 0xfb, 0x60, 0x03, 0xd1, 0xfb, 0x68, + 0x43, 0xf4, 0x80, 0x13, 0xfb, 0x60, 0x38, 0x46, 0xed, 0xf7, 0xd8, 0xfa, + 0x05, 0x46, 0xb8, 0xf1, 0x01, 0x0f, 0x10, 0xd1, 0xfb, 0x6d, 0x9b, 0xb2, + 0xfb, 0x65, 0xfb, 0x6d, 0x43, 0xf0, 0x7b, 0x73, 0x43, 0xf4, 0x00, 0x33, + 0xfb, 0x65, 0xbb, 0x68, 0x43, 0xf0, 0x06, 0x03, 0xbb, 0x60, 0xbb, 0x68, + 0x43, 0xf0, 0x20, 0x03, 0xbb, 0x60, 0x00, 0x2d, 0x00, 0xf0, 0xb9, 0x82, + 0x02, 0x23, 0x84, 0xf8, 0xbd, 0x33, 0x23, 0x68, 0x4f, 0xf4, 0x00, 0x72, + 0xd6, 0xf8, 0xc0, 0x02, 0x5a, 0x62, 0x5a, 0x6a, 0x42, 0xf0, 0x00, 0x72, + 0x9a, 0x62, 0x26, 0x4b, 0xc6, 0xf8, 0xb4, 0x32, 0x25, 0x4b, 0xc6, 0xf8, + 0xbc, 0x32, 0xef, 0xf7, 0xcf, 0xfc, 0x4d, 0x20, 0xf1, 0xf7, 0xee, 0xf9, + 0x65, 0x20, 0xf1, 0xf7, 0xeb, 0xf9, 0x17, 0x4b, 0x5a, 0x69, 0x9b, 0x69, + 0x1a, 0x42, 0x00, 0xf0, 0x47, 0x82, 0x13, 0x4f, 0x3c, 0x68, 0xb9, 0x46, + 0x63, 0x69, 0x13, 0xf0, 0x01, 0x03, 0x03, 0x93, 0x40, 0xf0, 0x3e, 0x82, + 0x62, 0x69, 0xa3, 0x69, 0x1a, 0x42, 0x00, 0xf0, 0x39, 0x82, 0x63, 0x69, + 0xa2, 0x69, 0x13, 0x40, 0x9b, 0x07, 0x29, 0xd5, 0x63, 0x69, 0x03, 0xf0, + 0x02, 0x03, 0x63, 0x61, 0x24, 0xe0, 0x00, 0xbf, 0xb0, 0x3f, 0x02, 0x24, + 0xa4, 0x0b, 0x02, 0x24, 0x0c, 0x0b, 0x02, 0x24, 0x74, 0x28, 0x02, 0x24, + 0x05, 0xe4, 0x01, 0x08, 0x44, 0x28, 0x02, 0x24, 0xc0, 0x01, 0x00, 0x24, + 0xbc, 0x3f, 0x02, 0x24, 0x00, 0x00, 0x04, 0x40, 0x00, 0x44, 0x02, 0x58, + 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x02, 0x58, 0x00, 0x08, 0x02, 0x58, + 0x00, 0x1c, 0x02, 0x58, 0x00, 0x20, 0x02, 0x58, 0x00, 0xe1, 0x00, 0xe0, + 0xdc, 0x01, 0x00, 0x24, 0x18, 0x02, 0x00, 0x24, 0x63, 0x69, 0xa2, 0x69, + 0x13, 0x40, 0xde, 0x06, 0x29, 0xd5, 0xa3, 0x69, 0x23, 0xf0, 0x10, 0x03, + 0xa3, 0x61, 0x26, 0x6a, 0xc6, 0xf3, 0x43, 0x43, 0x06, 0xf0, 0x0f, 0x05, + 0x02, 0x2b, 0x40, 0xf0, 0x77, 0x83, 0x47, 0xf6, 0xf0, 0x73, 0x1e, 0x42, + 0x14, 0xd0, 0x1c, 0x23, 0xc6, 0xf3, 0x0a, 0x18, 0x20, 0x46, 0x03, 0xfb, + 0x05, 0x95, 0x42, 0x46, 0xd5, 0xf8, 0x08, 0x12, 0xed, 0xf7, 0x8e, 0xfa, + 0xd5, 0xf8, 0x08, 0x32, 0x43, 0x44, 0xc5, 0xf8, 0x08, 0x32, 0xd5, 0xf8, + 0x14, 0x32, 0x43, 0x44, 0xc5, 0xf8, 0x14, 0x32, 0x3a, 0x68, 0x93, 0x69, + 0x43, 0xf0, 0x10, 0x03, 0x93, 0x61, 0x3b, 0x68, 0x5a, 0x69, 0x99, 0x69, + 0x0a, 0x40, 0x15, 0x03, 0x00, 0xf1, 0x65, 0x83, 0xbe, 0x4e, 0x33, 0x68, + 0xb1, 0x46, 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, 0x12, 0xf4, 0x80, 0x2f, + 0x10, 0xd0, 0xd3, 0xf8, 0x18, 0x28, 0x03, 0xf5, 0x00, 0x63, 0x37, 0x46, + 0x04, 0xf5, 0x10, 0x6b, 0xdb, 0x69, 0x13, 0x40, 0x9b, 0xb2, 0x02, 0x93, + 0x00, 0x23, 0x01, 0x93, 0x02, 0x9b, 0x00, 0x2b, 0x40, 0xf0, 0x88, 0x86, + 0x30, 0x68, 0x42, 0x69, 0x83, 0x69, 0x1a, 0x42, 0x10, 0xd5, 0xd4, 0xf8, + 0x04, 0x38, 0x23, 0xf0, 0x01, 0x03, 0xc4, 0xf8, 0x04, 0x38, 0x96, 0xf8, + 0xf4, 0x33, 0x01, 0x2b, 0x04, 0xbf, 0x00, 0x23, 0x86, 0xf8, 0xf4, 0x33, + 0x43, 0x69, 0x03, 0xf0, 0x00, 0x43, 0x43, 0x61, 0x43, 0x69, 0x82, 0x69, + 0x13, 0x40, 0x1a, 0x05, 0x10, 0xd5, 0xd4, 0xf8, 0x08, 0x38, 0xdb, 0x07, + 0x08, 0xd5, 0xd6, 0xf8, 0x04, 0x34, 0x93, 0xf8, 0x9c, 0x22, 0x83, 0xf8, + 0x9d, 0x22, 0x04, 0x22, 0x83, 0xf8, 0x9c, 0x22, 0x43, 0x69, 0x03, 0xf4, + 0x00, 0x63, 0x43, 0x61, 0x43, 0x69, 0x82, 0x69, 0x13, 0x40, 0x1f, 0x01, + 0x11, 0xd5, 0x43, 0x69, 0x03, 0xf0, 0x00, 0x63, 0x43, 0x61, 0x97, 0x4b, + 0x93, 0xf8, 0xf4, 0x23, 0x00, 0x2a, 0x40, 0xf0, 0x68, 0x87, 0x01, 0x22, + 0x83, 0xf8, 0xf4, 0x23, 0x42, 0x6d, 0xc2, 0xf3, 0x83, 0x02, 0xc3, 0xf8, + 0xf8, 0x23, 0x43, 0x69, 0x82, 0x69, 0x13, 0x40, 0xdd, 0x04, 0x3e, 0xd5, + 0xd4, 0xf8, 0x04, 0x38, 0x04, 0xf5, 0x00, 0x62, 0x23, 0xf0, 0x01, 0x03, + 0x53, 0x60, 0x4f, 0xf4, 0x84, 0x63, 0x03, 0x61, 0x89, 0x4b, 0x01, 0x3b, + 0x02, 0xd0, 0x01, 0x69, 0x89, 0x06, 0xfa, 0xd4, 0x04, 0xf5, 0x10, 0x63, + 0xdf, 0xf8, 0x10, 0xc2, 0x4f, 0xf6, 0x7f, 0x37, 0xdc, 0xf8, 0x04, 0x10, + 0x0d, 0x46, 0x03, 0x99, 0xa9, 0x42, 0xc0, 0xf0, 0x49, 0x87, 0xd3, 0x69, + 0x43, 0xf0, 0x01, 0x13, 0xd3, 0x61, 0xdc, 0xf8, 0x30, 0x30, 0x00, 0x2b, + 0x00, 0xf0, 0x61, 0x87, 0xd2, 0xf8, 0x84, 0x30, 0x43, 0xf0, 0x0b, 0x03, + 0xc2, 0xf8, 0x84, 0x30, 0x53, 0x6c, 0x43, 0xf0, 0x0b, 0x03, 0x53, 0x64, + 0xd4, 0xf8, 0x00, 0x38, 0x76, 0x4a, 0x23, 0xf4, 0xfe, 0x63, 0x31, 0x7c, + 0xc4, 0xf8, 0x00, 0x38, 0xed, 0xf7, 0xa8, 0xf9, 0x32, 0x68, 0x53, 0x69, + 0x03, 0xf4, 0x80, 0x53, 0x53, 0x61, 0x34, 0x68, 0x63, 0x69, 0xa2, 0x69, + 0x13, 0x40, 0x9f, 0x04, 0x40, 0xf1, 0xbe, 0x80, 0xd4, 0xf8, 0x00, 0x39, + 0x23, 0xf4, 0xff, 0x63, 0x23, 0xf0, 0x07, 0x03, 0xc4, 0xf8, 0x00, 0x39, + 0xd4, 0xf8, 0x04, 0x28, 0x42, 0xf4, 0x80, 0x72, 0xc4, 0xf8, 0x04, 0x28, + 0xd4, 0xf8, 0x08, 0x28, 0x12, 0xf0, 0x06, 0x03, 0x04, 0xd0, 0x12, 0xf0, + 0x02, 0x0f, 0x14, 0xbf, 0x02, 0x23, 0x0f, 0x23, 0xf3, 0x60, 0xed, 0xf7, + 0x81, 0xfe, 0xf7, 0x68, 0xfb, 0xb2, 0x02, 0x2b, 0x40, 0xf0, 0x3f, 0x87, + 0x5d, 0x4b, 0x5e, 0x4a, 0x03, 0x44, 0x93, 0x42, 0x40, 0xf2, 0x27, 0x87, + 0x5c, 0x4b, 0x5d, 0x4a, 0x03, 0x44, 0x93, 0x42, 0x40, 0xf2, 0x24, 0x87, + 0xa0, 0xf5, 0x74, 0x03, 0x5a, 0x4a, 0xa3, 0xf5, 0x10, 0x53, 0x93, 0x42, + 0x40, 0xf2, 0x1f, 0x87, 0xa0, 0xf1, 0x83, 0x73, 0x57, 0x4a, 0xa3, 0xf5, + 0xe7, 0x43, 0x93, 0x42, 0xc0, 0xf0, 0x1a, 0x87, 0x55, 0x4b, 0x56, 0x4a, + 0x03, 0x44, 0x93, 0x42, 0x40, 0xf2, 0x17, 0x87, 0x54, 0x4b, 0x55, 0x4a, + 0x03, 0x44, 0x93, 0x42, 0xc0, 0xf0, 0x14, 0x87, 0x53, 0x4b, 0x54, 0x4a, + 0x03, 0x44, 0x93, 0x42, 0xc0, 0xf0, 0x11, 0x87, 0xa0, 0xf1, 0xb7, 0x73, + 0x51, 0x4a, 0xa3, 0xf5, 0x58, 0x53, 0x93, 0x42, 0xc0, 0xf0, 0x0c, 0x87, + 0x4f, 0x4b, 0x50, 0x4a, 0x03, 0x44, 0x93, 0x42, 0x34, 0xbf, 0x07, 0x23, + 0x06, 0x23, 0xe2, 0x68, 0x00, 0x3f, 0x4f, 0xf0, 0x00, 0x08, 0x22, 0xf4, + 0x70, 0x52, 0x18, 0xbf, 0x01, 0x27, 0xe2, 0x60, 0xe2, 0x68, 0x42, 0xea, + 0x83, 0x23, 0xe3, 0x60, 0x40, 0x23, 0xd6, 0xf8, 0x04, 0x44, 0xd4, 0xf8, + 0xc0, 0x52, 0xc5, 0xf8, 0x04, 0x32, 0x05, 0xf5, 0xfe, 0x71, 0x95, 0xf8, + 0xbc, 0x33, 0xa5, 0xf8, 0xfc, 0x81, 0x01, 0x2b, 0x85, 0xf8, 0xff, 0x81, + 0x07, 0xd0, 0x01, 0x23, 0x28, 0x68, 0x85, 0xf8, 0xbc, 0x33, 0xed, 0xf7, + 0x72, 0xf9, 0x85, 0xf8, 0xbc, 0x83, 0xd4, 0xf8, 0xc0, 0x52, 0x40, 0x22, + 0x01, 0x23, 0x4f, 0xf0, 0x00, 0x08, 0xc4, 0xf8, 0x64, 0x21, 0x4f, 0xf4, + 0x80, 0x70, 0xc4, 0xf8, 0x58, 0x31, 0x05, 0xf1, 0x3c, 0x01, 0x6a, 0x64, + 0x95, 0xf8, 0xbc, 0x23, 0xa8, 0x87, 0x9a, 0x42, 0x85, 0xf8, 0x3f, 0x80, + 0xa5, 0xf8, 0x42, 0x80, 0x06, 0xd0, 0x28, 0x68, 0x85, 0xf8, 0xbc, 0x33, + 0xed, 0xf7, 0x53, 0xf9, 0x85, 0xf8, 0xbc, 0x83, 0x01, 0x23, 0x00, 0x21, + 0x40, 0x22, 0xa3, 0x61, 0x84, 0xf8, 0x9c, 0x32, 0xd4, 0xf8, 0xb8, 0x32, + 0x62, 0x62, 0xc4, 0xf8, 0x94, 0x12, 0x61, 0x60, 0xc4, 0xf8, 0xa4, 0x12, + 0x23, 0xb1, 0xd4, 0xf8, 0xb4, 0x32, 0x20, 0x46, 0x5b, 0x68, 0x98, 0x47, + 0xd6, 0xf8, 0x04, 0x34, 0x32, 0x68, 0x1f, 0x74, 0x53, 0x69, 0x03, 0xf4, + 0x00, 0x53, 0x53, 0x61, 0x32, 0x68, 0x53, 0x69, 0x92, 0x69, 0x13, 0x40, + 0x1d, 0x07, 0x35, 0xd5, 0xd6, 0xf8, 0x04, 0x04, 0x90, 0xf8, 0x9c, 0x32, + 0x03, 0x2b, 0x04, 0xd1, 0xd0, 0xf8, 0xb4, 0x32, 0xdb, 0x69, 0x03, 0xb1, + 0x98, 0x47, 0x32, 0x68, 0x53, 0x69, 0x03, 0xf0, 0x08, 0x03, 0x53, 0x61, + 0x24, 0xe0, 0x00, 0xbf, 0xbc, 0x3f, 0x02, 0x24, 0x41, 0x0d, 0x03, 0x00, + 0x80, 0x43, 0x02, 0x24, 0x40, 0x53, 0x27, 0xff, 0xff, 0x34, 0x0c, 0x00, + 0x40, 0x1e, 0x1b, 0xff, 0x3f, 0x42, 0x0f, 0x00, 0x7f, 0x4f, 0x12, 0x00, + 0x20, 0xd6, 0x13, 0x00, 0x60, 0xb6, 0xe5, 0xfe, 0x5f, 0xe3, 0x16, 0x00, + 0x00, 0xd3, 0xce, 0xfe, 0x40, 0x77, 0x1b, 0x00, 0xc0, 0x5b, 0xb3, 0xfe, + 0xc0, 0x91, 0x21, 0x00, 0x20, 0x75, 0x38, 0x00, 0xe0, 0x54, 0x59, 0xfe, + 0xe0, 0x9c, 0x41, 0x00, 0x33, 0x68, 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, + 0xd4, 0x02, 0x03, 0xd5, 0x5a, 0x69, 0x02, 0xf4, 0x80, 0x12, 0x5a, 0x61, + 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, 0x90, 0x02, 0x03, 0xd5, 0x5a, 0x69, + 0x02, 0xf4, 0x00, 0x12, 0x5a, 0x61, 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, + 0x51, 0x00, 0x03, 0xd5, 0x5a, 0x69, 0x02, 0xf0, 0x80, 0x42, 0x5a, 0x61, + 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, 0x52, 0x07, 0x10, 0xd5, 0x5c, 0x68, + 0x63, 0x07, 0x09, 0xd5, 0xd6, 0xf8, 0x04, 0x04, 0x01, 0x23, 0x80, 0xf8, + 0x9c, 0x32, 0xd0, 0xf8, 0xb4, 0x32, 0x01, 0x79, 0x5b, 0x68, 0x98, 0x47, + 0x33, 0x68, 0x5a, 0x68, 0x14, 0x43, 0x5c, 0x60, 0xb7, 0x4b, 0x1a, 0x68, + 0x51, 0x1c, 0x19, 0x60, 0x28, 0x21, 0x92, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, + 0x13, 0x23, 0x00, 0x2b, 0x7f, 0xf4, 0xa7, 0xad, 0xb2, 0x4d, 0xb3, 0x4c, + 0x2b, 0x78, 0x6b, 0xb9, 0xb2, 0x4a, 0x23, 0x78, 0x12, 0x78, 0xb2, 0x48, + 0x13, 0x44, 0x23, 0x70, 0xf7, 0xf7, 0xcb, 0xfa, 0xb0, 0xfa, 0x80, 0xf1, + 0xae, 0x48, 0x49, 0x09, 0xf7, 0xf7, 0xce, 0xfa, 0x22, 0x78, 0x2b, 0x78, + 0xa2, 0xf1, 0x0a, 0x01, 0x01, 0x33, 0xc9, 0xb2, 0xdb, 0xb2, 0xf0, 0x29, + 0x2b, 0x70, 0x05, 0xd9, 0xa6, 0x48, 0x01, 0x78, 0x4d, 0x42, 0x52, 0x1a, + 0x05, 0x70, 0x22, 0x70, 0x22, 0x78, 0x9a, 0x42, 0x7f, 0xf4, 0x81, 0xad, + 0xa2, 0x48, 0xf7, 0xf7, 0xae, 0xfa, 0xb0, 0xfa, 0x80, 0xf1, 0xa0, 0x48, + 0x49, 0x09, 0xf7, 0xf7, 0xb1, 0xfa, 0x76, 0xe5, 0xfb, 0x68, 0x38, 0x46, + 0xd4, 0xf8, 0x28, 0x90, 0x43, 0xf0, 0x40, 0x03, 0xfb, 0x60, 0xed, 0xf7, + 0x13, 0xf8, 0xbb, 0x6b, 0x05, 0x46, 0xb9, 0xf1, 0x00, 0x0f, 0x03, 0xd1, + 0x43, 0xf4, 0x80, 0x33, 0xbb, 0x63, 0x32, 0xe5, 0x23, 0xf4, 0x80, 0x33, + 0xfa, 0xe7, 0x23, 0x68, 0x32, 0x20, 0xda, 0x68, 0x22, 0xf0, 0xc0, 0x42, + 0xda, 0x60, 0xda, 0x68, 0x42, 0xf0, 0x80, 0x42, 0xda, 0x60, 0xf0, 0xf7, + 0x55, 0xff, 0x67, 0x68, 0x2b, 0x46, 0x4f, 0xf0, 0x1c, 0x0c, 0x4f, 0xf0, + 0x01, 0x0e, 0x28, 0x46, 0xd9, 0xb2, 0x5a, 0x1c, 0x8f, 0x42, 0x00, 0xf2, + 0xb2, 0x80, 0x00, 0x23, 0x4f, 0xf0, 0x1c, 0x0c, 0x19, 0x46, 0xd8, 0xb2, + 0x01, 0x33, 0x87, 0x42, 0x00, 0xf2, 0xb8, 0x80, 0x23, 0x68, 0xd4, 0xf8, + 0x2c, 0xc0, 0xd4, 0xe9, 0x03, 0x12, 0x02, 0x92, 0xd4, 0xe9, 0x06, 0xe2, + 0x01, 0x92, 0x00, 0x22, 0x90, 0x46, 0x02, 0xf1, 0x40, 0x00, 0x01, 0x32, + 0x03, 0xeb, 0x80, 0x00, 0x0f, 0x2a, 0xc0, 0xf8, 0x04, 0x80, 0xf6, 0xd1, + 0x03, 0xf5, 0x00, 0x60, 0xbc, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0xab, 0x80, + 0x42, 0x68, 0x42, 0xf0, 0x02, 0x02, 0x42, 0x60, 0x9a, 0x6b, 0x22, 0xf4, + 0x00, 0x12, 0x9a, 0x63, 0x1a, 0x68, 0x42, 0xf0, 0x40, 0x02, 0x1a, 0x60, + 0x1a, 0x68, 0x42, 0xf0, 0x80, 0x02, 0x1a, 0x60, 0x00, 0x22, 0xbe, 0xf1, + 0x01, 0x0f, 0xc3, 0xf8, 0x00, 0x2e, 0xd3, 0xf8, 0x00, 0x28, 0xc3, 0xf8, + 0x00, 0x28, 0xd3, 0xf8, 0x00, 0x28, 0x40, 0xf0, 0x96, 0x80, 0x00, 0x29, + 0x40, 0xf0, 0x90, 0x80, 0xc3, 0xf8, 0x00, 0x28, 0x4f, 0xf4, 0x84, 0x62, + 0x1a, 0x61, 0x64, 0x4a, 0x01, 0x3a, 0x00, 0xf0, 0x8d, 0x80, 0x19, 0x69, + 0x89, 0x06, 0xf9, 0xd4, 0x10, 0x22, 0x1a, 0x61, 0x5f, 0x4a, 0x01, 0x3a, + 0x00, 0xf0, 0x86, 0x80, 0x19, 0x69, 0xc9, 0x06, 0xf9, 0xd4, 0x00, 0x22, + 0x03, 0xf5, 0x10, 0x61, 0x4f, 0xf0, 0x90, 0x48, 0x4f, 0xf0, 0x00, 0x69, + 0x96, 0x46, 0x4f, 0xf6, 0x7f, 0x3a, 0x02, 0x61, 0x42, 0x61, 0xc2, 0x61, + 0x97, 0x42, 0x75, 0xd1, 0x00, 0x27, 0x03, 0xf5, 0x30, 0x61, 0x4f, 0xf0, + 0x90, 0x48, 0x4f, 0xf0, 0x00, 0x69, 0xbe, 0x46, 0x4f, 0xf6, 0x7f, 0x3a, + 0xba, 0x42, 0x7e, 0xd1, 0x02, 0x69, 0x22, 0xf4, 0x80, 0x72, 0x02, 0x61, + 0x00, 0x22, 0x9a, 0x61, 0x6f, 0xf0, 0x80, 0x42, 0x5a, 0x61, 0x02, 0x9a, + 0x1a, 0xb9, 0x9a, 0x69, 0x42, 0xf0, 0x10, 0x02, 0x9a, 0x61, 0x99, 0x69, + 0x47, 0x4a, 0x0a, 0x43, 0x9a, 0x61, 0x01, 0x9a, 0x1a, 0xb1, 0x9a, 0x69, + 0x42, 0xf0, 0x08, 0x02, 0x9a, 0x61, 0xbc, 0xf1, 0x01, 0x0f, 0x05, 0xd1, + 0x9a, 0x69, 0x42, 0xf0, 0x80, 0x42, 0x42, 0xf0, 0x04, 0x02, 0x9a, 0x61, + 0x00, 0x2d, 0x7f, 0xf4, 0x97, 0xac, 0x01, 0x22, 0x84, 0xf8, 0x38, 0x50, + 0x84, 0xf8, 0xbd, 0x23, 0x62, 0x6a, 0x01, 0x2a, 0x0d, 0xd1, 0x84, 0xf8, + 0xf4, 0x53, 0xc4, 0xf8, 0xfc, 0x23, 0x9a, 0x69, 0x42, 0xf0, 0x00, 0x62, + 0x9a, 0x61, 0x5a, 0x6d, 0x42, 0xf0, 0x80, 0x52, 0x42, 0xf0, 0x03, 0x02, + 0x5a, 0x65, 0x18, 0x46, 0xec, 0xf7, 0x7c, 0xff, 0x7f, 0xe4, 0x0c, 0xfb, + 0x01, 0x43, 0x83, 0xf8, 0x3d, 0xe0, 0x83, 0xf8, 0x3c, 0x10, 0xa3, 0xf8, + 0x42, 0x10, 0x83, 0xf8, 0x3f, 0x00, 0x18, 0x65, 0xc3, 0xe9, 0x11, 0x00, + 0x13, 0x46, 0x39, 0xe7, 0x0c, 0xfb, 0x00, 0x42, 0x82, 0xf8, 0xfd, 0x11, + 0x82, 0xf8, 0xfc, 0x01, 0x82, 0xf8, 0xff, 0x11, 0xc2, 0xf8, 0x10, 0x12, + 0xc2, 0xe9, 0x81, 0x11, 0x35, 0xe7, 0x9a, 0x6b, 0x42, 0xf4, 0x00, 0x12, + 0x9a, 0x63, 0x5f, 0xe7, 0x42, 0xf0, 0x01, 0x02, 0x6c, 0xe7, 0x42, 0xf0, + 0x03, 0x02, 0x69, 0xe7, 0x01, 0x25, 0x73, 0xe7, 0x01, 0x25, 0x7a, 0xe7, + 0xd1, 0xf8, 0x00, 0xb0, 0xbb, 0xf1, 0x00, 0x0f, 0x0c, 0xda, 0x42, 0xb9, + 0xc1, 0xf8, 0x00, 0x90, 0xc1, 0xf8, 0x10, 0xe0, 0x01, 0x32, 0xc1, 0xf8, + 0x08, 0xa0, 0x20, 0x31, 0x78, 0xe7, 0xc1, 0xf8, 0x00, 0x80, 0xf5, 0xe7, + 0xc1, 0xf8, 0x00, 0xe0, 0xf2, 0xe7, 0xd1, 0xf8, 0x00, 0xb0, 0xbb, 0xf1, + 0x00, 0x0f, 0x0c, 0xda, 0x47, 0xb9, 0xc1, 0xf8, 0x00, 0x90, 0xc1, 0xf8, + 0x10, 0xe0, 0x01, 0x37, 0xc1, 0xf8, 0x08, 0xa0, 0x20, 0x31, 0x6f, 0xe7, + 0xc1, 0xf8, 0x00, 0x80, 0xf5, 0xe7, 0xc1, 0xf8, 0x00, 0xe0, 0xf2, 0xe7, + 0x44, 0x2d, 0x02, 0x24, 0x43, 0x2d, 0x02, 0x24, 0x0f, 0x03, 0x00, 0x24, + 0x0e, 0x03, 0x00, 0x24, 0x48, 0x0b, 0x02, 0x24, 0x41, 0x0d, 0x03, 0x00, + 0x00, 0x38, 0x3c, 0x80, 0x06, 0x2b, 0x7f, 0xf4, 0x9f, 0xac, 0x08, 0x22, + 0xb2, 0x49, 0x20, 0x46, 0xc6, 0xf3, 0x0a, 0x16, 0xec, 0xf7, 0x1c, 0xff, + 0x1c, 0x23, 0x03, 0xfb, 0x05, 0x95, 0xd5, 0xf8, 0x14, 0x32, 0x1e, 0x44, + 0xc5, 0xf8, 0x14, 0x62, 0x8e, 0xe4, 0xd3, 0xf8, 0x18, 0x78, 0x03, 0xf5, + 0x00, 0x63, 0x04, 0xf5, 0x30, 0x69, 0xdf, 0xf8, 0xa4, 0xb2, 0xdb, 0x69, + 0x4f, 0xf0, 0x00, 0x08, 0x1f, 0x40, 0x3f, 0x0c, 0x00, 0x2f, 0x3f, 0xf4, + 0x8b, 0xac, 0xf8, 0x07, 0x40, 0xf1, 0x7a, 0x81, 0xa2, 0x4d, 0x5f, 0xfa, + 0x88, 0xf6, 0x28, 0x68, 0x00, 0xf5, 0x30, 0x6c, 0x0c, 0xeb, 0x46, 0x13, + 0x9a, 0x68, 0xd0, 0xf8, 0x14, 0x38, 0x02, 0xea, 0x03, 0x0a, 0x2b, 0x46, + 0x1a, 0xf0, 0x01, 0x0f, 0x1b, 0xd0, 0x29, 0x69, 0x01, 0x22, 0x0c, 0xeb, + 0x48, 0x1c, 0x01, 0x29, 0xc9, 0xf8, 0x08, 0x20, 0xd0, 0xf8, 0x40, 0xe0, + 0xdc, 0xf8, 0x08, 0x20, 0x40, 0xf0, 0x9e, 0x80, 0x11, 0x07, 0x07, 0xd5, + 0x93, 0x4b, 0x9e, 0x45, 0x09, 0xd9, 0x10, 0x04, 0x07, 0xd5, 0x4f, 0xf4, + 0x00, 0x43, 0x02, 0xe0, 0x91, 0x06, 0x70, 0xd5, 0x20, 0x23, 0xcc, 0xf8, + 0x08, 0x30, 0x1a, 0xf0, 0x08, 0x0f, 0x00, 0xf0, 0x36, 0x81, 0x2b, 0x68, + 0x08, 0x22, 0xc9, 0xf8, 0x08, 0x20, 0x1a, 0x6c, 0x03, 0xf5, 0x30, 0x63, + 0x01, 0x92, 0x03, 0xeb, 0x48, 0x13, 0x01, 0x99, 0x9a, 0x68, 0x08, 0x46, + 0x84, 0x49, 0x88, 0x42, 0x04, 0xd9, 0x11, 0x04, 0x02, 0xd5, 0x4f, 0xf4, + 0x00, 0x42, 0x9a, 0x60, 0x7f, 0x4a, 0xd2, 0xf8, 0x04, 0x54, 0x92, 0xf8, + 0xc4, 0x03, 0x05, 0xf5, 0x2a, 0x71, 0x85, 0xf8, 0xa8, 0x02, 0x92, 0xf8, + 0xc5, 0xc3, 0x85, 0xf8, 0xa9, 0xc2, 0x92, 0xf8, 0xc7, 0x33, 0x92, 0xf8, + 0xc6, 0x63, 0x06, 0xeb, 0x03, 0x26, 0xb6, 0xb2, 0xa5, 0xf8, 0xaa, 0x62, + 0x92, 0xf8, 0xc9, 0xe3, 0x92, 0xf8, 0xc8, 0x33, 0x03, 0xeb, 0x0e, 0x23, + 0x9b, 0xb2, 0xa5, 0xf8, 0xac, 0x32, 0x92, 0xf8, 0xcb, 0xe3, 0x92, 0xf8, + 0xca, 0x23, 0x02, 0xeb, 0x0e, 0x22, 0x4f, 0xf0, 0x01, 0x0e, 0x92, 0xb2, + 0xc5, 0xe9, 0xa5, 0xe2, 0x00, 0xf0, 0x1f, 0x0e, 0xa5, 0xf8, 0xae, 0x22, + 0xbe, 0xf1, 0x01, 0x0f, 0x00, 0xf0, 0xae, 0x81, 0xbe, 0xf1, 0x02, 0x0f, + 0x00, 0xf0, 0xc9, 0x81, 0xbe, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0xa7, 0x82, + 0x00, 0xf0, 0x60, 0x00, 0x20, 0x28, 0x00, 0xf0, 0xf6, 0x81, 0x40, 0x28, + 0x00, 0xf0, 0xf3, 0x81, 0x00, 0x28, 0x40, 0xf0, 0x87, 0x80, 0xbc, 0xf1, + 0x09, 0x0f, 0x00, 0xf2, 0x83, 0x80, 0xdf, 0xe8, 0x1c, 0xf0, 0x6e, 0x01, + 0x88, 0x01, 0x81, 0x00, 0x82, 0x01, 0x81, 0x00, 0xf1, 0x00, 0x49, 0x00, + 0x81, 0x00, 0x57, 0x01, 0x1d, 0x01, 0x12, 0xf0, 0x28, 0x0f, 0x8e, 0xd1, + 0x54, 0x49, 0x8e, 0x45, 0x01, 0xd9, 0x12, 0x04, 0x81, 0xd4, 0xdc, 0xf8, + 0x10, 0x20, 0xdb, 0xf8, 0x04, 0x12, 0xc2, 0xf3, 0x12, 0x02, 0x8a, 0x1a, + 0xcb, 0xf8, 0x14, 0x22, 0xdb, 0xf8, 0x08, 0x22, 0x11, 0x44, 0xd5, 0xf8, + 0x10, 0x22, 0x58, 0xea, 0x02, 0x02, 0xcb, 0xf8, 0x08, 0x12, 0x10, 0xd1, + 0x46, 0x4a, 0x01, 0x21, 0xec, 0xf7, 0x12, 0xfe, 0x45, 0x4b, 0x0a, 0xe0, + 0x46, 0x49, 0x8e, 0x45, 0x12, 0xd1, 0x11, 0x04, 0x3f, 0xf5, 0x63, 0xaf, + 0x90, 0x06, 0x02, 0xd5, 0x20, 0x22, 0xcc, 0xf8, 0x08, 0x20, 0x1c, 0x22, + 0x31, 0x46, 0xd5, 0xf8, 0x04, 0x04, 0x02, 0xfb, 0x06, 0x33, 0xd3, 0xf8, + 0x08, 0x22, 0xff, 0xf7, 0xb5, 0xf9, 0x5a, 0xe7, 0xd5, 0xf8, 0x10, 0x12, + 0x58, 0xea, 0x01, 0x01, 0xef, 0xd1, 0x05, 0xf5, 0x71, 0x72, 0xdd, 0xe7, + 0x00, 0x23, 0xad, 0xf8, 0x2c, 0x30, 0x33, 0x0a, 0x01, 0x3b, 0x06, 0x2b, + 0x30, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, 0x04, 0x16, 0x22, 0x2f, 0x2f, 0x4e, + 0x57, 0x00, 0xd5, 0xf8, 0xb0, 0x32, 0x1b, 0x68, 0x0b, 0xa9, 0x28, 0x7c, + 0x98, 0x47, 0xbd, 0xf8, 0x2c, 0x30, 0x00, 0x2b, 0x63, 0xd0, 0xb5, 0xf8, + 0xae, 0x22, 0x00, 0x2a, 0x56, 0xd1, 0x28, 0x46, 0xfe, 0xf7, 0x74, 0xf8, + 0x5f, 0xe0, 0x2a, 0x7c, 0xd5, 0xf8, 0xb4, 0x32, 0x2a, 0xb9, 0x9b, 0x6a, + 0x0b, 0xa8, 0x98, 0x47, 0x02, 0x23, 0x43, 0x70, 0xe9, 0xe7, 0xdb, 0x6a, + 0xf8, 0xe7, 0xf1, 0xb2, 0x05, 0x29, 0x1f, 0xd8, 0xdf, 0xe8, 0x01, 0xf0, + 0x03, 0x0a, 0x0e, 0x12, 0x16, 0x1a, 0xd5, 0xf8, 0xb0, 0x32, 0x5b, 0x68, + 0x00, 0x2b, 0xd7, 0xd1, 0x28, 0x46, 0xbc, 0xe0, 0xd5, 0xf8, 0xb0, 0x32, + 0x9b, 0x68, 0xf7, 0xe7, 0xd5, 0xf8, 0xb0, 0x32, 0xdb, 0x68, 0xf3, 0xe7, + 0xd5, 0xf8, 0xb0, 0x32, 0x1b, 0x69, 0xef, 0xe7, 0xd5, 0xf8, 0xb0, 0x32, + 0x5b, 0x69, 0xeb, 0xe7, 0xd5, 0xf8, 0xb0, 0x32, 0x9b, 0x69, 0xe7, 0xe7, + 0xd5, 0xf8, 0xb4, 0x32, 0x9b, 0x6b, 0x00, 0x2b, 0xe4, 0xd0, 0x0b, 0xaa, + 0x28, 0x46, 0x98, 0x47, 0xbb, 0xe7, 0x2b, 0x7c, 0x00, 0x2b, 0xdd, 0xd1, + 0xd5, 0xf8, 0xb4, 0x32, 0x0b, 0xa8, 0x5b, 0x6b, 0x98, 0x47, 0xb2, 0xe7, + 0x2b, 0x7c, 0x00, 0x2b, 0xd4, 0xd1, 0xd5, 0xf8, 0xb4, 0x32, 0x0b, 0xa8, + 0x1b, 0x6b, 0x98, 0x47, 0x07, 0x23, 0xbc, 0xe7, 0x80, 0x43, 0x02, 0x24, + 0xbc, 0x3f, 0x02, 0x24, 0x0a, 0x30, 0x54, 0x4f, 0x0a, 0x31, 0x54, 0x4f, + 0x9a, 0x42, 0x01, 0x46, 0x28, 0x46, 0x28, 0xbf, 0x1a, 0x46, 0xad, 0xf8, + 0x2c, 0x20, 0xfe, 0xf7, 0x0b, 0xf8, 0xb5, 0xf8, 0xae, 0x32, 0x00, 0x2b, + 0x9b, 0xd0, 0x01, 0x9b, 0x1a, 0x46, 0xcc, 0x4b, 0x9a, 0x42, 0x08, 0xd9, + 0xcb, 0x4b, 0x19, 0x69, 0x01, 0x29, 0x04, 0xd1, 0x03, 0xf5, 0x71, 0x72, + 0x18, 0x68, 0xec, 0xf7, 0x65, 0xfd, 0x1a, 0xf0, 0x10, 0x0f, 0x02, 0xd0, + 0x10, 0x23, 0xc9, 0xf8, 0x08, 0x30, 0x1a, 0xf0, 0x20, 0x0f, 0x02, 0xd0, + 0x20, 0x23, 0xc9, 0xf8, 0x08, 0x30, 0x1a, 0xf4, 0x00, 0x5f, 0x03, 0xd0, + 0x4f, 0xf4, 0x00, 0x53, 0xc9, 0xf8, 0x08, 0x30, 0x08, 0xf1, 0x01, 0x08, + 0x7f, 0x08, 0x09, 0xf1, 0x20, 0x09, 0x0b, 0xf1, 0x1c, 0x0b, 0x77, 0xe6, + 0x1a, 0x43, 0x8d, 0xd1, 0x7f, 0x2e, 0x8b, 0xd8, 0x95, 0xf8, 0x9c, 0x32, + 0x03, 0x2b, 0x87, 0xd0, 0xf3, 0xb2, 0xd5, 0xf8, 0xc0, 0x12, 0x85, 0xf8, + 0x9e, 0x32, 0x91, 0xf8, 0xbc, 0x03, 0x01, 0x28, 0x10, 0xd0, 0x08, 0x68, + 0x81, 0xf8, 0x38, 0x30, 0xd0, 0xf8, 0x00, 0x38, 0x23, 0xf4, 0xfe, 0x63, + 0xc0, 0xf8, 0x00, 0x38, 0xd0, 0xf8, 0x00, 0x38, 0x43, 0xea, 0x06, 0x13, + 0xc0, 0xf8, 0x00, 0x38, 0x81, 0xf8, 0xbc, 0x23, 0x28, 0x46, 0xfd, 0xf7, + 0xc5, 0xff, 0x1e, 0xb1, 0x02, 0x23, 0x85, 0xf8, 0x9c, 0x32, 0xac, 0xe7, + 0x01, 0x23, 0xfa, 0xe7, 0xf1, 0xb2, 0xa4, 0x4e, 0x01, 0x29, 0x31, 0x70, + 0x3f, 0xf6, 0x5e, 0xaf, 0x95, 0xf8, 0x9c, 0x32, 0x02, 0x2b, 0x09, 0xd0, + 0x03, 0x2b, 0x19, 0xd0, 0x28, 0x46, 0xe9, 0xf7, 0xbd, 0xfc, 0x31, 0x78, + 0x28, 0x46, 0xfc, 0xf7, 0xb9, 0xfa, 0x96, 0xe7, 0x00, 0x29, 0x3f, 0xf4, + 0x30, 0xaf, 0x01, 0x21, 0x03, 0x23, 0x69, 0x60, 0x85, 0xf8, 0x9c, 0x32, + 0x28, 0x46, 0xfc, 0xf7, 0xb4, 0xfa, 0x02, 0x28, 0x28, 0x46, 0x7f, 0xf4, + 0x25, 0xaf, 0xe9, 0xf7, 0xa7, 0xfc, 0x84, 0xe7, 0x39, 0xb9, 0x02, 0x23, + 0x28, 0x46, 0x69, 0x60, 0x85, 0xf8, 0x9c, 0x32, 0xfc, 0xf7, 0x9e, 0xfa, + 0x17, 0xe7, 0x69, 0x68, 0x01, 0x29, 0x3f, 0xf4, 0x14, 0xaf, 0xc9, 0xb2, + 0x28, 0x46, 0xfc, 0xf7, 0x95, 0xfa, 0x31, 0x78, 0x69, 0x60, 0xe1, 0xe7, + 0x01, 0x2a, 0x7f, 0xf4, 0x27, 0xaf, 0x95, 0xf8, 0x9c, 0x32, 0x02, 0x2b, + 0x0a, 0xd8, 0x00, 0x2b, 0x3f, 0xf4, 0x20, 0xaf, 0x29, 0x46, 0x00, 0x23, + 0x41, 0xf8, 0x08, 0x3f, 0x28, 0x46, 0xfd, 0xf7, 0x67, 0xff, 0x5e, 0xe7, + 0x03, 0x2b, 0x7f, 0xf4, 0x15, 0xaf, 0x29, 0x1d, 0xf6, 0xe7, 0x95, 0xf8, + 0x9c, 0x32, 0x01, 0x3b, 0x02, 0x2b, 0x3f, 0xf6, 0x0d, 0xaf, 0x02, 0x2a, + 0x7f, 0xf4, 0x0a, 0xaf, 0x01, 0x23, 0xeb, 0x60, 0xd5, 0xf8, 0xa4, 0x32, + 0x0b, 0xb1, 0x03, 0x23, 0xeb, 0x60, 0x02, 0x22, 0x05, 0xf1, 0x0c, 0x01, + 0xe2, 0xe7, 0x01, 0x2e, 0x7f, 0xf4, 0x43, 0xaf, 0xc5, 0xf8, 0xa4, 0x62, + 0xdb, 0xe6, 0x95, 0xf8, 0x9c, 0x32, 0x01, 0x3b, 0x02, 0x2b, 0x3f, 0xf6, + 0xf3, 0xae, 0x01, 0x2e, 0x7f, 0xf4, 0x37, 0xaf, 0x00, 0x23, 0xc5, 0xf8, + 0xa4, 0x32, 0xce, 0xe6, 0x00, 0xf0, 0x60, 0x02, 0x40, 0x2a, 0x02, 0xd0, + 0x42, 0x06, 0x3f, 0xf5, 0xe5, 0xae, 0x95, 0xf8, 0x9c, 0x22, 0x01, 0x3a, + 0x02, 0x2a, 0x3f, 0xf6, 0xdf, 0xae, 0xdb, 0xb2, 0x02, 0x2b, 0x3f, 0xf6, + 0xdb, 0xae, 0xd5, 0xf8, 0xb4, 0x32, 0x28, 0x46, 0x9b, 0x68, 0x98, 0x47, + 0xb5, 0xf8, 0xae, 0x32, 0x00, 0x2b, 0x7f, 0xf4, 0x18, 0xaf, 0x00, 0x28, + 0x7f, 0xf4, 0x15, 0xaf, 0xaf, 0xe6, 0x00, 0xf0, 0x60, 0x00, 0x20, 0x28, + 0x31, 0xd0, 0x40, 0x28, 0x2f, 0xd0, 0x00, 0x28, 0x7f, 0xf4, 0xc4, 0xae, + 0xbc, 0xf1, 0x01, 0x0f, 0xd9, 0xb2, 0x40, 0xd0, 0xbc, 0xf1, 0x03, 0x0f, + 0x2b, 0xd0, 0xbc, 0xf1, 0x00, 0x0f, 0x7f, 0xf4, 0xb9, 0xae, 0x95, 0xf8, + 0x9c, 0x22, 0x02, 0x2a, 0x00, 0xf0, 0x9c, 0x80, 0x03, 0x2a, 0x7f, 0xf4, + 0xb1, 0xae, 0x5b, 0xb2, 0x01, 0xf0, 0x0f, 0x00, 0x14, 0x26, 0x00, 0x2b, + 0x06, 0xfb, 0x00, 0x50, 0x80, 0xf2, 0x9f, 0x80, 0x82, 0x69, 0x00, 0x2a, + 0x3f, 0xf4, 0xa4, 0xae, 0x01, 0xf0, 0x7f, 0x02, 0x02, 0xfb, 0x06, 0x66, + 0x2e, 0x44, 0x11, 0xf0, 0x7f, 0x02, 0x40, 0xf0, 0x9e, 0x80, 0x32, 0x60, + 0x02, 0x22, 0x31, 0x46, 0x7a, 0xe7, 0xd5, 0xf8, 0xb4, 0x32, 0x28, 0x46, + 0x9b, 0x68, 0x98, 0x47, 0xd7, 0xe6, 0x95, 0xf8, 0x9c, 0x32, 0x02, 0x2b, + 0x5a, 0xd0, 0x03, 0x2b, 0x7f, 0xf4, 0x8a, 0xae, 0x4b, 0x06, 0x3f, 0xf4, + 0x6a, 0xae, 0x56, 0xea, 0x02, 0x03, 0x7f, 0xf4, 0x66, 0xae, 0x28, 0x46, + 0xfe, 0xf7, 0xa8, 0xff, 0x61, 0xe6, 0x95, 0xf8, 0x9c, 0x22, 0x02, 0x2a, + 0x48, 0xd0, 0x03, 0x2a, 0x7f, 0xf4, 0x78, 0xae, 0x00, 0x2e, 0x7f, 0xf4, + 0xbc, 0xae, 0x4a, 0x06, 0x3f, 0xf4, 0x55, 0xae, 0xd5, 0xf8, 0xc0, 0x22, + 0x01, 0xf0, 0x0f, 0x01, 0x50, 0x68, 0x81, 0x42, 0x3f, 0xf6, 0x4d, 0xae, + 0xc1, 0xeb, 0xc1, 0x00, 0x13, 0xf0, 0x80, 0x0f, 0x4f, 0xf0, 0x1c, 0x03, + 0x4f, 0xea, 0x80, 0x00, 0x39, 0xd0, 0x3c, 0x30, 0x03, 0xfb, 0x01, 0x23, + 0x01, 0x26, 0x10, 0x44, 0x83, 0xf8, 0x3d, 0x60, 0x00, 0x23, 0x01, 0x70, + 0x83, 0x70, 0x92, 0xf8, 0xbc, 0x33, 0x01, 0x2b, 0x3f, 0xf4, 0x35, 0xae, + 0x01, 0x23, 0x11, 0x68, 0x4f, 0xf0, 0x20, 0x0c, 0x82, 0xf8, 0xbc, 0x33, + 0x43, 0x78, 0x06, 0x78, 0x01, 0x2b, 0x0c, 0xbf, 0x01, 0xf5, 0x10, 0x63, + 0x01, 0xf5, 0x30, 0x63, 0x1c, 0xfb, 0x06, 0x33, 0x19, 0x68, 0x21, 0xf4, + 0x00, 0x11, 0x19, 0x60, 0xc1, 0x78, 0x02, 0x39, 0x01, 0x29, 0x03, 0xd8, + 0x19, 0x68, 0x41, 0xf0, 0x80, 0x51, 0x19, 0x60, 0x00, 0x23, 0x82, 0xf8, + 0xbc, 0x33, 0x14, 0xe6, 0x4e, 0x06, 0x28, 0x46, 0x3f, 0xf4, 0xed, 0xae, + 0xfe, 0xf7, 0x54, 0xff, 0x80, 0x21, 0x28, 0x46, 0xfe, 0xf7, 0x50, 0xff, + 0x6d, 0xe6, 0x00, 0xf5, 0xfe, 0x70, 0x03, 0xfb, 0x01, 0x23, 0x00, 0x26, + 0x10, 0x44, 0x83, 0xf8, 0xfd, 0x61, 0xc3, 0xe7, 0x0a, 0x30, 0x54, 0x4f, + 0xbc, 0x3f, 0x02, 0x24, 0x80, 0x3f, 0x02, 0x24, 0x4e, 0x06, 0x7f, 0xf4, + 0x15, 0xae, 0x18, 0x06, 0x4f, 0xf0, 0x00, 0x03, 0x4f, 0xf0, 0x02, 0x02, + 0x4c, 0xbf, 0x05, 0xf1, 0x14, 0x01, 0x05, 0xf5, 0xaa, 0x71, 0x0b, 0x60, + 0xec, 0xe6, 0xd0, 0xf8, 0x58, 0x21, 0x00, 0x2a, 0x3f, 0xf4, 0x04, 0xae, + 0x01, 0xf0, 0x7f, 0x02, 0x06, 0xfb, 0x02, 0x56, 0x06, 0xf5, 0xaa, 0x76, + 0x5d, 0xe7, 0x00, 0x2b, 0xd5, 0xf8, 0xc0, 0x02, 0x4f, 0xf0, 0x1c, 0x03, + 0xb5, 0xbf, 0x03, 0xfb, 0x02, 0x01, 0x03, 0xfb, 0x01, 0x03, 0x91, 0xf8, + 0x3e, 0x30, 0x93, 0xf8, 0xfe, 0x31, 0x03, 0xb1, 0x01, 0x23, 0x33, 0x60, + 0x50, 0xe7, 0x00, 0xf0, 0x80, 0x01, 0xbc, 0xe7, 0x02, 0x9b, 0xd9, 0x07, + 0x40, 0xf1, 0x0c, 0x81, 0xd9, 0xf8, 0x00, 0x00, 0x9d, 0xf8, 0x04, 0xa0, + 0xd0, 0xf8, 0x10, 0x18, 0x00, 0xf5, 0x10, 0x62, 0xd0, 0xf8, 0x34, 0x58, + 0x0a, 0xf0, 0x0f, 0x08, 0x02, 0xeb, 0x4a, 0x12, 0x25, 0xfa, 0x08, 0xf8, + 0x92, 0x68, 0x4f, 0xea, 0xc8, 0x18, 0x5f, 0xfa, 0x88, 0xf8, 0x48, 0xea, + 0x01, 0x08, 0x08, 0xea, 0x02, 0x08, 0x18, 0xf0, 0x01, 0x0f, 0x42, 0xd0, + 0x01, 0x9b, 0xd4, 0xf8, 0x34, 0x28, 0x03, 0xf0, 0x0f, 0x01, 0x01, 0x23, + 0x03, 0xfa, 0x01, 0xf1, 0x22, 0xea, 0x01, 0x02, 0xd9, 0xf8, 0x10, 0x10, + 0x99, 0x42, 0xc4, 0xf8, 0x34, 0x28, 0xcb, 0xf8, 0x08, 0x30, 0x0b, 0xd1, + 0x01, 0x9b, 0xd7, 0xe9, 0x11, 0x52, 0x2a, 0x44, 0xba, 0x64, 0xd9, 0xf8, + 0x50, 0x20, 0x13, 0x43, 0x02, 0xd1, 0x98, 0x4a, 0xec, 0xf7, 0x64, 0xfb, + 0x97, 0x4b, 0xd3, 0xf8, 0x04, 0x54, 0xba, 0xf1, 0x00, 0x0f, 0x40, 0xf0, + 0x9b, 0x80, 0xd5, 0xf8, 0x94, 0x22, 0x02, 0x2a, 0x40, 0xf0, 0x8e, 0x80, + 0xd5, 0xe9, 0x08, 0x20, 0x82, 0x42, 0x60, 0xd9, 0x12, 0x1a, 0x99, 0x6c, + 0xd5, 0xf8, 0xc0, 0x02, 0x2a, 0x62, 0x92, 0xb2, 0xe9, 0xf7, 0x05, 0xfb, + 0x52, 0x46, 0x51, 0x46, 0xd5, 0xf8, 0xc0, 0x02, 0xe9, 0xf7, 0x14, 0xfb, + 0x95, 0xf8, 0xa0, 0x22, 0x01, 0x2a, 0x02, 0xd1, 0x00, 0x22, 0x85, 0xf8, + 0xa0, 0x22, 0x18, 0xf0, 0x08, 0x0f, 0x02, 0xd0, 0x08, 0x22, 0xcb, 0xf8, + 0x08, 0x20, 0x18, 0xf0, 0x10, 0x0f, 0x02, 0xd0, 0x10, 0x22, 0xcb, 0xf8, + 0x08, 0x20, 0x18, 0xf0, 0x40, 0x0f, 0x02, 0xd0, 0x40, 0x22, 0xcb, 0xf8, + 0x08, 0x20, 0x18, 0xf0, 0x02, 0x0f, 0x02, 0xd0, 0x02, 0x22, 0xcb, 0xf8, + 0x08, 0x20, 0x18, 0xf0, 0x80, 0x0f, 0x00, 0xf0, 0x91, 0x80, 0xd7, 0xe9, + 0x14, 0x21, 0x91, 0x42, 0x00, 0xf2, 0x8c, 0x80, 0x52, 0x1a, 0x79, 0x6c, + 0xd9, 0xf8, 0x00, 0x50, 0x8a, 0x42, 0x01, 0x9b, 0x05, 0xf5, 0x10, 0x6c, + 0x28, 0xbf, 0x0a, 0x46, 0x05, 0xf5, 0x80, 0x51, 0x0c, 0xeb, 0x43, 0x1c, + 0x03, 0x32, 0x01, 0xeb, 0x0a, 0x33, 0x92, 0x08, 0xdc, 0xf8, 0x18, 0xe0, + 0x1f, 0xfa, 0x8e, 0xfe, 0x96, 0x45, 0xd7, 0xe9, 0x14, 0x01, 0x6f, 0xd3, + 0x88, 0x42, 0x01, 0xd9, 0x00, 0x28, 0x4c, 0xd1, 0x01, 0x9a, 0x01, 0x21, + 0xd5, 0xf8, 0x34, 0x38, 0x02, 0xf0, 0x0f, 0x02, 0x01, 0xfa, 0x02, 0xf2, + 0x23, 0xea, 0x02, 0x03, 0xc5, 0xf8, 0x34, 0x38, 0x60, 0xe0, 0xe9, 0x69, + 0xb1, 0xfb, 0xf0, 0xf2, 0x00, 0xfb, 0x12, 0x12, 0x72, 0xb9, 0x88, 0x42, + 0x0c, 0xd8, 0xd5, 0xf8, 0x98, 0x22, 0x91, 0x42, 0x08, 0xd2, 0x52, 0x46, + 0x51, 0x46, 0xd5, 0xf8, 0xc0, 0x02, 0xe9, 0xf7, 0x9a, 0xfa, 0xc5, 0xf8, + 0x98, 0xa2, 0x91, 0xe7, 0xd5, 0xf8, 0xb4, 0x22, 0xd2, 0x68, 0x2a, 0xb1, + 0x95, 0xf8, 0x9c, 0x12, 0x03, 0x29, 0x01, 0xd1, 0x28, 0x46, 0x90, 0x47, + 0x80, 0x21, 0x28, 0x46, 0xfe, 0xf7, 0x3e, 0xfe, 0x05, 0x22, 0xc5, 0xf8, + 0x94, 0x22, 0x00, 0x22, 0x11, 0x46, 0x7f, 0xe7, 0x32, 0xf0, 0x04, 0x03, + 0x80, 0xd1, 0x80, 0x21, 0x28, 0x46, 0xfe, 0xf7, 0x31, 0xfe, 0x7b, 0xe7, + 0xd5, 0xf8, 0xb4, 0x22, 0x52, 0x69, 0x00, 0x2a, 0x3f, 0xf4, 0x7d, 0xaf, + 0x95, 0xf8, 0x9c, 0x12, 0x03, 0x29, 0x7f, 0xf4, 0x78, 0xaf, 0x51, 0x46, + 0x28, 0x46, 0x90, 0x47, 0x73, 0xe7, 0x41, 0x1a, 0x7a, 0x6c, 0x99, 0xf8, + 0x10, 0x00, 0x91, 0x42, 0x28, 0xbf, 0x11, 0x46, 0xca, 0x1c, 0x92, 0x08, + 0x30, 0xb1, 0xb8, 0x6c, 0x08, 0x44, 0xb8, 0x64, 0x78, 0x6d, 0x01, 0x44, + 0x79, 0x65, 0x95, 0xe7, 0x88, 0xb2, 0xd7, 0xf8, 0x48, 0xe0, 0x03, 0x30, + 0x80, 0x08, 0x0e, 0xeb, 0x80, 0x00, 0x86, 0x45, 0xef, 0xd0, 0x5e, 0xf8, + 0x04, 0x8b, 0xc3, 0xf8, 0x00, 0x80, 0xf8, 0xe7, 0x88, 0x42, 0x91, 0xd9, + 0x01, 0x9b, 0x1c, 0x37, 0x0b, 0xf1, 0x20, 0x0b, 0x01, 0x33, 0x01, 0x93, + 0x02, 0x9b, 0x5b, 0x08, 0x02, 0x93, 0xff, 0xf7, 0x59, 0xb8, 0xd3, 0xf8, + 0x04, 0x34, 0x93, 0xf8, 0x9c, 0x22, 0x83, 0xf8, 0x9d, 0x22, 0x04, 0x22, + 0x83, 0xf8, 0x9c, 0x22, 0xff, 0xf7, 0x95, 0xb8, 0x9f, 0x60, 0x20, 0x33, + 0x53, 0xf8, 0x20, 0x1c, 0x21, 0xf4, 0x00, 0x11, 0x43, 0xf8, 0x20, 0x1c, + 0x53, 0xf8, 0x20, 0x1c, 0x41, 0xf0, 0x00, 0x61, 0x43, 0xf8, 0x20, 0x1c, + 0xc3, 0xf8, 0xe8, 0x71, 0xd3, 0xf8, 0xe0, 0x11, 0x21, 0xf4, 0x00, 0x11, + 0xc3, 0xf8, 0xe0, 0x11, 0xd3, 0xf8, 0xe0, 0x11, 0x41, 0xf0, 0x00, 0x61, + 0xc3, 0xf8, 0xe0, 0x11, 0x03, 0x99, 0x01, 0x31, 0x03, 0x91, 0xff, 0xf7, + 0x8f, 0xb8, 0x53, 0x69, 0x43, 0xf4, 0x00, 0x53, 0x43, 0xf0, 0x2b, 0x03, + 0x53, 0x61, 0x13, 0x69, 0x43, 0xf0, 0x0b, 0x03, 0x13, 0x61, 0xff, 0xf7, + 0x9d, 0xb8, 0x0f, 0x23, 0xff, 0xf7, 0x0d, 0xb9, 0x0e, 0x23, 0xff, 0xf7, + 0x0a, 0xb9, 0x0d, 0x23, 0xff, 0xf7, 0x07, 0xb9, 0x0c, 0x23, 0xff, 0xf7, + 0x04, 0xb9, 0x0b, 0x23, 0xff, 0xf7, 0x01, 0xb9, 0x0a, 0x23, 0xff, 0xf7, + 0xfe, 0xb8, 0x09, 0x23, 0xff, 0xf7, 0xfb, 0xb8, 0x08, 0x23, 0xff, 0xf7, + 0xf8, 0xb8, 0x00, 0xbf, 0x80, 0x43, 0x02, 0x24, 0xbc, 0x3f, 0x02, 0x24, + 0x52, 0x48, 0xf8, 0xb5, 0x05, 0x78, 0xbf, 0xf3, 0x5b, 0x8f, 0x15, 0xf0, + 0x01, 0x05, 0x40, 0xf0, 0x92, 0x80, 0xf5, 0xf7, 0x07, 0xfc, 0x00, 0x28, + 0x00, 0xf0, 0x8d, 0x80, 0x4c, 0x4c, 0x5c, 0x22, 0x4c, 0x4b, 0x29, 0x46, + 0x04, 0xf1, 0x08, 0x00, 0x4b, 0x4e, 0x23, 0x60, 0x01, 0x27, 0x4b, 0x4b, + 0x63, 0x60, 0x02, 0xf0, 0xb3, 0xfb, 0x3b, 0x23, 0x20, 0x1d, 0xc4, 0xf8, + 0xa8, 0x50, 0xa4, 0xf8, 0x9a, 0x30, 0x47, 0x4b, 0xa4, 0xf8, 0x68, 0x50, + 0xc4, 0xf8, 0x8c, 0x50, 0x84, 0xf8, 0x98, 0x50, 0xc4, 0xe9, 0x27, 0x63, + 0x4f, 0xf4, 0x00, 0x33, 0x66, 0x26, 0x63, 0x66, 0x41, 0x4b, 0xa4, 0xf8, + 0xa4, 0x60, 0xc4, 0xe9, 0x24, 0x37, 0x40, 0x4b, 0xc4, 0xe9, 0x2b, 0x35, + 0xf5, 0xf7, 0x34, 0xff, 0x04, 0xf1, 0xbc, 0x00, 0xa4, 0xf8, 0xb8, 0x60, + 0xe9, 0xf7, 0x44, 0xf9, 0x3b, 0x4b, 0x3c, 0x48, 0xc4, 0xf8, 0xf4, 0x31, + 0xc4, 0xf8, 0x00, 0x52, 0x84, 0xf8, 0x04, 0x52, 0xf6, 0xf7, 0x7e, 0xfc, + 0xf2, 0xf7, 0x2c, 0xfb, 0x37, 0x4a, 0x15, 0x68, 0x09, 0x2d, 0x51, 0xdc, + 0x36, 0x4b, 0x1b, 0x68, 0x98, 0x1e, 0x19, 0x46, 0x03, 0xf1, 0x12, 0x06, + 0x30, 0xf9, 0x02, 0x7f, 0x66, 0x2f, 0x4a, 0xd0, 0xb0, 0x42, 0xf9, 0xd1, + 0x14, 0x33, 0x08, 0x46, 0x02, 0x31, 0xb0, 0xf9, 0x00, 0x60, 0x01, 0x36, + 0x3b, 0xd1, 0x66, 0x23, 0x03, 0x80, 0x01, 0x35, 0x15, 0x60, 0x00, 0x25, + 0x28, 0x48, 0xf6, 0xf7, 0x5d, 0xfc, 0xf2, 0xf7, 0xeb, 0xfa, 0x00, 0x20, + 0x00, 0x21, 0xc4, 0xf8, 0xb4, 0x50, 0x03, 0x25, 0x00, 0x23, 0x4f, 0xf0, + 0xff, 0x32, 0xc4, 0xf8, 0x60, 0x31, 0xc4, 0xf8, 0x18, 0x21, 0x84, 0xf8, + 0x54, 0x31, 0x84, 0xf8, 0xfd, 0x31, 0x84, 0xf8, 0xfe, 0x31, 0xc4, 0xf8, + 0xe8, 0x20, 0xc4, 0xf8, 0xfc, 0x20, 0xa4, 0xf8, 0x00, 0x31, 0xc4, 0xe9, + 0x44, 0x01, 0x4f, 0xf4, 0x00, 0x30, 0x01, 0x21, 0xc4, 0xf8, 0xf8, 0x01, + 0x02, 0x20, 0xc4, 0xf8, 0x28, 0x11, 0x84, 0xf8, 0xf0, 0x10, 0x84, 0xf8, + 0x02, 0x11, 0xc4, 0xe9, 0x38, 0x50, 0x35, 0x20, 0xc4, 0xf8, 0xec, 0x00, + 0x07, 0x48, 0xc4, 0xe9, 0x3d, 0x22, 0xf5, 0xf7, 0x6f, 0xfb, 0x06, 0x48, + 0xf8, 0xbd, 0x99, 0x42, 0xbb, 0xd1, 0xc2, 0xe7, 0x6f, 0xf0, 0x01, 0x05, + 0xc2, 0xe7, 0x4f, 0xf0, 0xff, 0x35, 0xbf, 0xe7, 0x38, 0x2c, 0x02, 0x24, + 0x48, 0x2d, 0x02, 0x24, 0x0c, 0xeb, 0x01, 0x08, 0x3c, 0x00, 0x57, 0x00, + 0x34, 0xe1, 0x01, 0x08, 0x3d, 0x00, 0x5a, 0x00, 0x40, 0x42, 0x0f, 0x00, + 0xc9, 0xeb, 0x00, 0x08, 0x00, 0x5a, 0x62, 0x02, 0x2c, 0x15, 0x02, 0x24, + 0x54, 0x15, 0x02, 0x24, 0xd8, 0x06, 0x00, 0x24, 0x09, 0x4b, 0x0a, 0x4a, + 0x19, 0x78, 0xff, 0x29, 0x0b, 0xd1, 0x01, 0x33, 0x93, 0x42, 0xf9, 0xd1, + 0x07, 0x4a, 0x19, 0x78, 0xff, 0x29, 0x04, 0xd1, 0x01, 0x33, 0x93, 0x42, + 0xf9, 0xd1, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0xbf, + 0x00, 0x03, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x05, 0x00, 0x08, + 0x2d, 0xe9, 0xf7, 0x4f, 0xfd, 0xf7, 0x6a, 0xfa, 0x00, 0x20, 0xfd, 0xf7, + 0x4b, 0xfa, 0x40, 0xf2, 0xaa, 0x73, 0xa9, 0x4c, 0x98, 0x42, 0xa9, 0x4d, + 0x63, 0xd1, 0x01, 0x20, 0xfd, 0xf7, 0x42, 0xfa, 0xc0, 0xb2, 0x20, 0x60, + 0x01, 0x20, 0xfd, 0xf7, 0x3d, 0xfa, 0x00, 0xf0, 0x07, 0x00, 0x20, 0x71, + 0x01, 0x20, 0xfd, 0xf7, 0x37, 0xfa, 0xc0, 0xf3, 0x00, 0x10, 0x60, 0x71, + 0x01, 0x20, 0xfd, 0xf7, 0x31, 0xfa, 0xc0, 0xf3, 0xc0, 0x10, 0xa0, 0x71, + 0x02, 0x20, 0xfd, 0xf7, 0x2b, 0xfa, 0xa0, 0x60, 0x03, 0x20, 0xfd, 0xf7, + 0x27, 0xfa, 0xe0, 0x60, 0x04, 0x20, 0xfd, 0xf7, 0x23, 0xfa, 0xc0, 0xb2, + 0x20, 0x62, 0x04, 0x20, 0xfd, 0xf7, 0x1e, 0xfa, 0x00, 0xf0, 0x07, 0x00, + 0x84, 0xf8, 0x24, 0x00, 0x04, 0x20, 0xfd, 0xf7, 0x17, 0xfa, 0xc0, 0xf3, + 0x00, 0x10, 0x84, 0xf8, 0x25, 0x00, 0x04, 0x20, 0xfd, 0xf7, 0x10, 0xfa, + 0xc0, 0xf3, 0xc0, 0x10, 0x84, 0xf8, 0x26, 0x00, 0x05, 0x20, 0xfd, 0xf7, + 0x09, 0xfa, 0xa0, 0x62, 0x06, 0x20, 0xfd, 0xf7, 0x05, 0xfa, 0x2b, 0x78, + 0xe0, 0x62, 0x8b, 0xb1, 0x87, 0x48, 0x03, 0xf0, 0xc1, 0xfe, 0x2b, 0x78, + 0x63, 0xb1, 0x22, 0x79, 0x21, 0x68, 0x85, 0x48, 0xf3, 0xf7, 0x6e, 0xf9, + 0x2b, 0x78, 0x2b, 0xb1, 0x94, 0xf8, 0x24, 0x20, 0x21, 0x6a, 0x82, 0x48, + 0xf3, 0xf7, 0x66, 0xf9, 0x23, 0x79, 0x94, 0xf8, 0x24, 0x20, 0x03, 0xf0, + 0x02, 0x01, 0x9a, 0x42, 0x40, 0xf0, 0x16, 0x81, 0xf9, 0xb1, 0x2b, 0x78, + 0x3b, 0xb3, 0x7c, 0x48, 0x03, 0xf0, 0xa4, 0xfe, 0x23, 0xe0, 0x02, 0x20, + 0x4f, 0xf4, 0xf0, 0x13, 0xa4, 0x21, 0x04, 0x22, 0xa0, 0x62, 0x21, 0x60, + 0xa2, 0x80, 0x21, 0x62, 0xa2, 0x84, 0xc4, 0xe9, 0x02, 0x03, 0x01, 0x23, + 0x4f, 0xf4, 0x00, 0x30, 0xa3, 0x71, 0x84, 0xf8, 0x26, 0x30, 0x2b, 0x78, + 0xe0, 0x62, 0x00, 0x2b, 0xda, 0xd0, 0x70, 0x48, 0x03, 0xf0, 0x8a, 0xfe, + 0xd6, 0xe7, 0x11, 0x07, 0x14, 0xd5, 0x88, 0x20, 0xf5, 0xf7, 0x94, 0xfa, + 0x06, 0x46, 0xfd, 0xf7, 0x9b, 0xf9, 0x26, 0x61, 0x26, 0x63, 0x63, 0x79, + 0x00, 0x2b, 0x3d, 0xd0, 0x22, 0x79, 0x12, 0xf0, 0x02, 0x08, 0x11, 0xd0, + 0x2b, 0x78, 0x1b, 0xb3, 0x63, 0x48, 0x03, 0xf0, 0x73, 0xfe, 0x1c, 0xe0, + 0x52, 0x07, 0x04, 0xd5, 0xff, 0xf7, 0x82, 0xfe, 0x20, 0x61, 0x20, 0x63, + 0xeb, 0xe7, 0x2b, 0x78, 0x00, 0x2b, 0xe8, 0xd0, 0x5e, 0x48, 0xbf, 0xe7, + 0x12, 0xf0, 0x08, 0x07, 0x13, 0xd0, 0x28, 0x20, 0xf5, 0xf7, 0x70, 0xfa, + 0xe3, 0x68, 0x06, 0x46, 0xa2, 0x68, 0xcd, 0xe9, 0x00, 0x38, 0x43, 0x46, + 0x21, 0x69, 0xf2, 0xf7, 0x93, 0xf9, 0x66, 0x61, 0x66, 0x63, 0x63, 0x79, + 0x00, 0x2b, 0x4a, 0xd0, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x53, 0x07, + 0x09, 0xd5, 0x28, 0x20, 0xf5, 0xf7, 0x5a, 0xfa, 0xe3, 0x68, 0x06, 0x46, + 0xa2, 0x68, 0xcd, 0xe9, 0x00, 0x37, 0x3b, 0x46, 0xe8, 0xe7, 0x2b, 0x78, + 0x00, 0x2b, 0xed, 0xd0, 0x4a, 0x48, 0xc8, 0xe7, 0xa3, 0x79, 0x00, 0x2b, + 0x30, 0xd0, 0x22, 0x6a, 0x23, 0x68, 0x9a, 0x42, 0x04, 0xd0, 0x2b, 0x78, + 0x13, 0xb1, 0x46, 0x48, 0x03, 0xf0, 0x32, 0xfe, 0xa2, 0x68, 0xa3, 0x6a, + 0x9a, 0x42, 0x04, 0xd0, 0x2b, 0x78, 0x13, 0xb1, 0x42, 0x48, 0x03, 0xf0, + 0x29, 0xfe, 0x28, 0x20, 0x41, 0x4e, 0xf5, 0xf7, 0x35, 0xfa, 0x22, 0x69, + 0x00, 0x27, 0xa1, 0x68, 0x60, 0x61, 0x41, 0x76, 0x60, 0x63, 0xc0, 0xe9, + 0x00, 0x62, 0x00, 0x22, 0x00, 0x26, 0x02, 0x76, 0xc2, 0x61, 0x80, 0xf8, + 0x20, 0x20, 0xc0, 0xe9, 0x02, 0x67, 0xc0, 0xe9, 0x04, 0x67, 0xf3, 0xf7, + 0xf9, 0xfc, 0x00, 0x28, 0xb9, 0xd0, 0x2b, 0x78, 0x00, 0x2b, 0xb6, 0xd0, + 0x34, 0x48, 0x94, 0xe7, 0x23, 0x69, 0x63, 0x61, 0x63, 0x63, 0x23, 0x68, + 0x5e, 0x06, 0x43, 0xd5, 0xc8, 0x20, 0xf5, 0xf7, 0x11, 0xfa, 0x30, 0x49, + 0x06, 0x46, 0xe8, 0xf7, 0xc3, 0xff, 0xe6, 0x61, 0xe0, 0x69, 0x61, 0x69, + 0x03, 0x68, 0xe0, 0x63, 0x5b, 0x6a, 0x98, 0x47, 0x20, 0xb1, 0x2b, 0x78, + 0x13, 0xb1, 0x2a, 0x48, 0x03, 0xf0, 0xf0, 0xfd, 0x38, 0x20, 0x01, 0x26, + 0xf5, 0xf7, 0xfc, 0xf9, 0x00, 0x27, 0xe3, 0x68, 0x00, 0x25, 0x26, 0x4a, + 0x4f, 0xf4, 0x80, 0x58, 0xdf, 0xf8, 0x98, 0xb0, 0x4f, 0xf0, 0x00, 0x09, + 0xdf, 0xf8, 0x94, 0xa0, 0x82, 0x60, 0xc0, 0xf8, 0x00, 0xb0, 0x45, 0x61, + 0xa0, 0x61, 0xc0, 0xe9, 0x03, 0xa3, 0xc0, 0xe9, 0x06, 0x67, 0xc0, 0xe9, + 0x08, 0x67, 0xc0, 0xe9, 0x0a, 0x89, 0x38, 0x20, 0xf5, 0xf7, 0xe0, 0xf9, + 0xe3, 0x6a, 0x1a, 0x4a, 0xc0, 0xf8, 0x00, 0xb0, 0xc0, 0xe9, 0x02, 0x2a, + 0xc0, 0xe9, 0x04, 0x35, 0xc0, 0xe9, 0x06, 0x67, 0xc0, 0xe9, 0x08, 0x67, + 0xc0, 0xe9, 0x0a, 0x89, 0xa0, 0x63, 0x6d, 0xe7, 0x54, 0x20, 0xf5, 0xf7, + 0xcd, 0xf9, 0x0e, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0x63, 0xff, 0xba, 0xe7, + 0xb4, 0x05, 0x00, 0x24, 0x08, 0x0b, 0x02, 0x24, 0x2b, 0xe4, 0x01, 0x08, + 0x3d, 0xe4, 0x01, 0x08, 0x54, 0xe4, 0x01, 0x08, 0x7c, 0xe4, 0x01, 0x08, + 0x69, 0xe4, 0x01, 0x08, 0x87, 0xe4, 0x01, 0x08, 0x90, 0xe4, 0x01, 0x08, + 0x99, 0xe4, 0x01, 0x08, 0xbc, 0xeb, 0x01, 0x08, 0xa3, 0xe4, 0x01, 0x08, + 0xb6, 0xd9, 0x01, 0x08, 0xaa, 0xe4, 0x01, 0x08, 0xb2, 0xe4, 0x01, 0x08, + 0xc5, 0xe4, 0x01, 0x08, 0x20, 0xec, 0x01, 0x08, 0xc1, 0xe4, 0x01, 0x08, + 0x29, 0xb1, 0x2b, 0x78, 0x63, 0xb1, 0xa4, 0x48, 0x03, 0xf0, 0x8e, 0xfd, + 0x08, 0xe0, 0x18, 0x07, 0x10, 0xd5, 0x88, 0x20, 0xf5, 0xf7, 0x98, 0xf9, + 0x06, 0x46, 0xfd, 0xf7, 0x9f, 0xf8, 0x26, 0x61, 0x94, 0xf8, 0x24, 0x30, + 0x9a, 0x07, 0x10, 0xd5, 0x2b, 0x78, 0xbb, 0xb1, 0x9b, 0x48, 0x03, 0xf0, + 0x7b, 0xfd, 0x13, 0xe0, 0x59, 0x07, 0x03, 0xd5, 0xff, 0xf7, 0x8a, 0xfd, + 0x20, 0x61, 0xef, 0xe7, 0x2b, 0x78, 0x00, 0x2b, 0xec, 0xd0, 0x96, 0x48, + 0xde, 0xe7, 0x1f, 0x07, 0x13, 0xd5, 0x88, 0x20, 0xf5, 0xf7, 0x7a, 0xf9, + 0x06, 0x46, 0xfd, 0xf7, 0x81, 0xf8, 0x26, 0x63, 0x66, 0x79, 0x00, 0x2e, + 0x46, 0xd0, 0x22, 0x79, 0x12, 0xf0, 0x02, 0x08, 0x10, 0xd0, 0x2b, 0x78, + 0xf3, 0xb1, 0x8a, 0x48, 0x03, 0xf0, 0x5a, 0xfd, 0x1a, 0xe0, 0x5e, 0x07, + 0x03, 0xd5, 0xff, 0xf7, 0x69, 0xfd, 0x20, 0x63, 0xec, 0xe7, 0x2b, 0x78, + 0x00, 0x2b, 0xe9, 0xd0, 0x86, 0x48, 0xd0, 0xe7, 0x12, 0xf0, 0x08, 0x07, + 0x1d, 0xd0, 0x28, 0x20, 0xf5, 0xf7, 0x58, 0xf9, 0xe3, 0x68, 0x06, 0x46, + 0xa2, 0x68, 0xcd, 0xe9, 0x00, 0x38, 0x43, 0x46, 0x21, 0x69, 0xf2, 0xf7, + 0x7b, 0xf8, 0x66, 0x61, 0x94, 0xf8, 0x25, 0x60, 0x00, 0x2e, 0x00, 0xf0, + 0xca, 0x80, 0x94, 0xf8, 0x24, 0x20, 0x12, 0xf0, 0x02, 0x08, 0x3b, 0xd0, + 0x2b, 0x78, 0x00, 0x2b, 0x48, 0xd0, 0x75, 0x48, 0x03, 0xf0, 0x2e, 0xfd, + 0x44, 0xe0, 0x50, 0x07, 0x09, 0xd5, 0x28, 0x20, 0xf5, 0xf7, 0x38, 0xf9, + 0xe3, 0x68, 0x06, 0x46, 0xa2, 0x68, 0xcd, 0xe9, 0x00, 0x37, 0x3b, 0x46, + 0xde, 0xe7, 0x2b, 0x78, 0x00, 0x2b, 0xdf, 0xd0, 0x6c, 0x48, 0xbf, 0xe7, + 0xa3, 0x79, 0xf3, 0xb1, 0x28, 0x20, 0x4f, 0xf0, 0x00, 0x08, 0xf5, 0xf7, + 0x25, 0xf9, 0x4f, 0xf0, 0x00, 0x09, 0x21, 0x69, 0xa2, 0x68, 0x68, 0x4f, + 0x06, 0x76, 0x42, 0x76, 0xc6, 0x61, 0x80, 0xf8, 0x20, 0x60, 0x60, 0x61, + 0xc0, 0xe9, 0x00, 0x71, 0xc0, 0xe9, 0x02, 0x89, 0xc0, 0xe9, 0x04, 0x89, + 0xf3, 0xf7, 0xea, 0xfb, 0x00, 0x28, 0xc1, 0xd0, 0x2b, 0x78, 0x00, 0x2b, + 0xbe, 0xd0, 0x5f, 0x48, 0x9e, 0xe7, 0x23, 0x69, 0x63, 0x61, 0xb9, 0xe7, + 0x12, 0xf0, 0x08, 0x07, 0x74, 0xd0, 0x28, 0x20, 0xf5, 0xf7, 0x02, 0xf9, + 0xe3, 0x6a, 0x06, 0x46, 0xa2, 0x6a, 0xcd, 0xe9, 0x00, 0x38, 0x43, 0x46, + 0x21, 0x6b, 0xf2, 0xf7, 0x25, 0xf8, 0x66, 0x63, 0x63, 0x79, 0x00, 0x2b, + 0x2f, 0xd1, 0x23, 0x68, 0x5a, 0x06, 0x40, 0xf1, 0xb7, 0x80, 0xc8, 0x20, + 0xf5, 0xf7, 0xee, 0xf8, 0x50, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0xa0, 0xfe, + 0xe6, 0x61, 0xe0, 0x69, 0x61, 0x69, 0x03, 0x68, 0x5b, 0x6a, 0x98, 0x47, + 0x20, 0xb1, 0x2b, 0x78, 0x13, 0xb1, 0x4b, 0x48, 0x03, 0xf0, 0xce, 0xfc, + 0x38, 0x20, 0xf5, 0xf7, 0xdb, 0xf8, 0x49, 0x4a, 0xe3, 0x68, 0x02, 0x60, + 0x48, 0x4a, 0xa0, 0x61, 0x82, 0x60, 0x48, 0x4a, 0xc0, 0xe9, 0x03, 0x23, + 0x00, 0x23, 0x01, 0x22, 0x43, 0x61, 0x00, 0x23, 0xc0, 0xe9, 0x06, 0x23, + 0xc0, 0xe9, 0x08, 0x23, 0x4f, 0xf4, 0x80, 0x52, 0x00, 0x23, 0xc0, 0xe9, + 0x0a, 0x23, 0x94, 0xf8, 0x25, 0x30, 0x00, 0x2b, 0x7f, 0xf4, 0x5e, 0xae, + 0x23, 0x6a, 0x5b, 0x06, 0x40, 0xf1, 0x8a, 0x80, 0xc8, 0x20, 0xf5, 0xf7, + 0xb9, 0xf8, 0x3b, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0x6b, 0xfe, 0xe6, 0x63, + 0xe0, 0x6b, 0x61, 0x6b, 0x03, 0x68, 0x5b, 0x6a, 0x98, 0x47, 0x20, 0xb1, + 0x2b, 0x78, 0x13, 0xb1, 0x35, 0x48, 0x03, 0xf0, 0x99, 0xfc, 0x38, 0x20, + 0xf5, 0xf7, 0xa6, 0xf8, 0x2e, 0x4a, 0xe3, 0x6a, 0x02, 0x60, 0x32, 0x4a, + 0x82, 0x60, 0x2e, 0x4a, 0xc0, 0xe9, 0x03, 0x23, 0x00, 0x23, 0x01, 0x22, + 0x43, 0x61, 0x00, 0x23, 0xc0, 0xe9, 0x06, 0x23, 0xc0, 0xe9, 0x08, 0x23, + 0x4f, 0xf4, 0x80, 0x52, 0x00, 0x23, 0xc0, 0xe9, 0x0a, 0x23, 0xbd, 0xe6, + 0x51, 0x07, 0x09, 0xd5, 0x28, 0x20, 0xf5, 0xf7, 0x8b, 0xf8, 0xe3, 0x6a, + 0x06, 0x46, 0xa2, 0x6a, 0xcd, 0xe9, 0x00, 0x37, 0x3b, 0x46, 0x87, 0xe7, + 0x2b, 0x78, 0x00, 0x2b, 0x88, 0xd0, 0x17, 0x48, 0x3e, 0xe7, 0x94, 0xf8, + 0x26, 0x30, 0x03, 0xb3, 0x28, 0x20, 0x4f, 0xf0, 0x00, 0x08, 0xf5, 0xf7, + 0x77, 0xf8, 0x4f, 0xf0, 0x00, 0x09, 0x21, 0x6b, 0xa2, 0x6a, 0x11, 0x4f, + 0x06, 0x76, 0x42, 0x76, 0xc6, 0x61, 0x80, 0xf8, 0x20, 0x60, 0x60, 0x63, + 0xc0, 0xe9, 0x00, 0x71, 0xc0, 0xe9, 0x02, 0x89, 0xc0, 0xe9, 0x04, 0x89, + 0xf3, 0xf7, 0x3c, 0xfb, 0x00, 0x28, 0x3f, 0xf4, 0x69, 0xaf, 0x2b, 0x78, + 0x00, 0x2b, 0x3f, 0xf4, 0x65, 0xaf, 0x10, 0x48, 0x1a, 0xe7, 0x23, 0x6b, + 0x63, 0x63, 0x5f, 0xe7, 0x7c, 0xe4, 0x01, 0x08, 0xe0, 0xe4, 0x01, 0x08, + 0xd5, 0xe4, 0x01, 0x08, 0xeb, 0xe4, 0x01, 0x08, 0xbc, 0xeb, 0x01, 0x08, + 0xf6, 0xe4, 0x01, 0x08, 0x10, 0xe5, 0x01, 0x08, 0x14, 0xe5, 0x01, 0x08, + 0x20, 0xec, 0x01, 0x08, 0x25, 0xe5, 0x01, 0x08, 0xc1, 0xe4, 0x01, 0x08, + 0x35, 0xe5, 0x01, 0x08, 0x39, 0xe5, 0x01, 0x08, 0x4a, 0xe5, 0x01, 0x08, + 0x03, 0xe5, 0x01, 0x08, 0x54, 0x20, 0xf5, 0xf7, 0x37, 0xf8, 0x06, 0x49, + 0x06, 0x46, 0xe8, 0xf7, 0xcd, 0xfd, 0x47, 0xe7, 0x54, 0x20, 0xf5, 0xf7, + 0x2f, 0xf8, 0x03, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0xc5, 0xfd, 0x74, 0xe7, + 0x10, 0xe5, 0x01, 0x08, 0x35, 0xe5, 0x01, 0x08, 0x10, 0xb5, 0xff, 0xf7, + 0xe5, 0xfc, 0x68, 0xb9, 0x07, 0x4c, 0x23, 0x78, 0x1b, 0xb9, 0xff, 0xf7, + 0xf9, 0xfc, 0x01, 0x23, 0x23, 0x70, 0x05, 0x4b, 0x5a, 0x79, 0x0a, 0xb1, + 0x58, 0x69, 0x10, 0xbd, 0x98, 0x69, 0xfc, 0xe7, 0x00, 0x20, 0xfa, 0xe7, + 0xa8, 0x06, 0x00, 0x24, 0xb4, 0x05, 0x00, 0x24, 0x2d, 0xe9, 0x80, 0x48, + 0xed, 0xb0, 0x04, 0xaf, 0xfc, 0xf7, 0x52, 0xff, 0x07, 0x20, 0xfc, 0xf7, + 0x33, 0xff, 0xc0, 0x07, 0x40, 0xf1, 0x91, 0x82, 0x01, 0x23, 0xe0, 0x4a, + 0xe0, 0x48, 0x13, 0x70, 0x03, 0xf0, 0xec, 0xfb, 0x00, 0x20, 0xdf, 0x4d, + 0xfc, 0xf7, 0x26, 0xff, 0x06, 0x46, 0xde, 0x48, 0x04, 0x78, 0xbf, 0xf3, + 0x5b, 0x8f, 0x14, 0xf0, 0x01, 0x04, 0x30, 0xd1, 0xf5, 0xf7, 0x04, 0xf8, + 0x68, 0xb3, 0xda, 0x4b, 0xd3, 0xf8, 0xd0, 0x20, 0x51, 0x00, 0x00, 0xf1, + 0x7f, 0x82, 0xd3, 0xf8, 0xd0, 0x20, 0x00, 0x2a, 0xc0, 0xf2, 0x7a, 0x82, + 0xd3, 0xf8, 0xd0, 0x20, 0xd2, 0x00, 0x00, 0xf1, 0x77, 0x82, 0xd3, 0xf8, + 0xd0, 0x20, 0x50, 0x01, 0x00, 0xf1, 0x72, 0x82, 0xd3, 0xf8, 0xd0, 0x20, + 0xd1, 0x01, 0x00, 0xf1, 0x6f, 0x82, 0xd3, 0xf8, 0xd0, 0x20, 0x12, 0x02, + 0x0b, 0xd4, 0xd3, 0xf8, 0xd0, 0x20, 0x90, 0x02, 0x00, 0xf1, 0x68, 0x82, + 0xd3, 0xf8, 0xd0, 0x30, 0x13, 0xf4, 0x80, 0x0f, 0x0c, 0xbf, 0x0b, 0x24, + 0x01, 0x24, 0xc4, 0x48, 0x2c, 0x70, 0xf4, 0xf7, 0xcd, 0xff, 0xc4, 0x4c, + 0x23, 0x78, 0xbf, 0xf3, 0x5b, 0x8f, 0xd9, 0x07, 0x0b, 0xd4, 0x20, 0x46, + 0xf4, 0xf7, 0xcc, 0xff, 0x38, 0xb1, 0xbe, 0x4b, 0x20, 0x46, 0xd3, 0xf8, + 0xd0, 0x20, 0xbe, 0x4b, 0x1a, 0x60, 0xf4, 0xf7, 0xbb, 0xff, 0xba, 0x4a, + 0xd2, 0xf8, 0xd0, 0x30, 0x43, 0xf4, 0x80, 0x33, 0xc2, 0xf8, 0xd0, 0x30, + 0x2b, 0x78, 0x01, 0x2b, 0x07, 0xd1, 0x4d, 0xf6, 0x59, 0x70, 0xe8, 0xf7, + 0x0f, 0xfe, 0x4f, 0xf4, 0xfa, 0x70, 0xef, 0xf7, 0x13, 0xfd, 0x00, 0x22, + 0x94, 0x21, 0x07, 0xf1, 0x54, 0x00, 0x00, 0x25, 0xfe, 0xf7, 0x25, 0xf9, + 0x00, 0x22, 0x92, 0x21, 0x07, 0xf1, 0x38, 0x00, 0xfe, 0xf7, 0x1f, 0xf9, + 0x00, 0x22, 0x93, 0x21, 0x07, 0xf1, 0x1c, 0x00, 0xfe, 0xf7, 0x19, 0xf9, + 0x07, 0xf1, 0xa8, 0x04, 0xef, 0xf7, 0x18, 0xfc, 0xa8, 0x4b, 0x98, 0x22, + 0x29, 0x46, 0xc7, 0xf8, 0xa8, 0x30, 0x07, 0xf1, 0xd8, 0x00, 0xa6, 0x4b, + 0xc7, 0xf8, 0xb8, 0x50, 0xc7, 0xf8, 0xbc, 0x30, 0xc7, 0xf8, 0xc0, 0x40, + 0xa7, 0xf8, 0xd4, 0x50, 0xc7, 0xe9, 0x31, 0x55, 0xc7, 0xe9, 0x33, 0x55, + 0x01, 0xf0, 0x40, 0xff, 0x9f, 0x4b, 0xc7, 0xe9, 0x5c, 0x35, 0x24, 0x23, + 0x7b, 0x61, 0x07, 0xf5, 0xbc, 0x73, 0x7a, 0x69, 0x03, 0xf8, 0x01, 0x5b, + 0x01, 0x3a, 0x7a, 0x61, 0xf9, 0xd1, 0x20, 0x46, 0xf6, 0xf7, 0x23, 0xfa, + 0x98, 0x4b, 0x1c, 0x22, 0x79, 0x69, 0x07, 0xf1, 0x70, 0x00, 0xc7, 0xf8, + 0x9c, 0x31, 0x01, 0xf0, 0x27, 0xff, 0x17, 0x21, 0x07, 0xf1, 0x70, 0x00, + 0xa7, 0xf8, 0x80, 0x10, 0xeb, 0xf7, 0x16, 0xfc, 0x79, 0x69, 0x07, 0xf1, + 0x70, 0x00, 0xeb, 0xf7, 0x35, 0xfc, 0x79, 0x69, 0xb7, 0xf9, 0x80, 0x00, + 0xea, 0xf7, 0x18, 0xfd, 0x01, 0x21, 0x07, 0xf1, 0x70, 0x00, 0xf5, 0xf7, + 0xe9, 0xf8, 0x1c, 0x22, 0x79, 0x69, 0x07, 0xf1, 0x8c, 0x00, 0x01, 0xf0, + 0x0b, 0xff, 0x16, 0x21, 0x07, 0xf1, 0x8c, 0x00, 0xa7, 0xf8, 0x9c, 0x10, + 0xeb, 0xf7, 0xfa, 0xfb, 0x79, 0x69, 0x07, 0xf1, 0x8c, 0x00, 0xeb, 0xf7, + 0x19, 0xfc, 0x79, 0x69, 0xb7, 0xf9, 0x9c, 0x00, 0xea, 0xf7, 0xfc, 0xfc, + 0x07, 0xf1, 0x8c, 0x00, 0x01, 0x21, 0xf5, 0xf7, 0xcd, 0xf8, 0x07, 0xf1, + 0x8c, 0x00, 0xf5, 0xf7, 0xc8, 0xff, 0x00, 0x28, 0x78, 0xd0, 0x07, 0xf1, + 0x70, 0x00, 0xf5, 0xf7, 0xc2, 0xff, 0x01, 0x28, 0x72, 0xd0, 0xf4, 0xf7, + 0x87, 0xff, 0x0a, 0x25, 0x79, 0x69, 0xb7, 0xf9, 0x9c, 0x00, 0xea, 0xf7, + 0xe3, 0xfc, 0xf4, 0xf7, 0x6b, 0xff, 0xf4, 0xf7, 0x7d, 0xff, 0x01, 0x21, + 0x07, 0xf1, 0x8c, 0x00, 0xeb, 0xf7, 0xf2, 0xfb, 0xf4, 0xf7, 0x62, 0xff, + 0xf4, 0xf7, 0x74, 0xff, 0x00, 0x21, 0xb7, 0xf9, 0x9c, 0x00, 0xea, 0xf7, + 0xd1, 0xfc, 0xf4, 0xf7, 0x59, 0xff, 0x00, 0x21, 0x07, 0xf1, 0x8c, 0x00, + 0xf5, 0xf7, 0xa8, 0xff, 0x05, 0x20, 0xf4, 0xf7, 0xe9, 0xfe, 0xf4, 0xf7, + 0x63, 0xff, 0x01, 0x21, 0xb7, 0xf9, 0x9c, 0x00, 0xea, 0xf7, 0xc0, 0xfc, + 0xf4, 0xf7, 0x48, 0xff, 0x01, 0x21, 0x07, 0xf1, 0x8c, 0x00, 0xf5, 0xf7, + 0x97, 0xff, 0x05, 0x20, 0xf4, 0xf7, 0xd8, 0xfe, 0x01, 0x3d, 0xdb, 0xd1, + 0xf4, 0xf7, 0x50, 0xff, 0x01, 0x21, 0x07, 0xf1, 0x70, 0x00, 0xeb, 0xf7, + 0xc5, 0xfb, 0xf4, 0xf7, 0x35, 0xff, 0x29, 0x46, 0x07, 0xf1, 0x70, 0x00, + 0xf5, 0xf7, 0x84, 0xff, 0x05, 0x20, 0xf4, 0xf7, 0xc5, 0xfe, 0x01, 0x21, + 0x07, 0xf1, 0x8c, 0x00, 0xf5, 0xf7, 0x7c, 0xff, 0x05, 0x20, 0xf4, 0xf7, + 0xbd, 0xfe, 0x01, 0x21, 0x07, 0xf1, 0x70, 0x00, 0xf5, 0xf7, 0x74, 0xff, + 0x05, 0x20, 0xf4, 0xf7, 0xb5, 0xfe, 0xf4, 0xf7, 0x2f, 0xff, 0x29, 0x46, + 0x07, 0xf1, 0x70, 0x00, 0xeb, 0xf7, 0xa4, 0xfb, 0xf4, 0xf7, 0x14, 0xff, + 0xf4, 0xf7, 0x26, 0xff, 0x07, 0xf1, 0x8c, 0x00, 0x29, 0x46, 0xeb, 0xf7, + 0x9b, 0xfb, 0xf4, 0xf7, 0x0b, 0xff, 0x07, 0xf1, 0x8c, 0x00, 0xf5, 0xf7, + 0x52, 0xff, 0x18, 0xb1, 0x07, 0xf1, 0x70, 0x00, 0xf5, 0xf7, 0x4d, 0xff, + 0xb7, 0xf9, 0x9c, 0x91, 0xb7, 0xf9, 0x9e, 0x51, 0x3a, 0x49, 0x48, 0x46, + 0xf5, 0xf7, 0xe6, 0xf9, 0x80, 0x46, 0x39, 0x49, 0x28, 0x46, 0xf5, 0xf7, + 0xe1, 0xf9, 0x01, 0x46, 0x40, 0x46, 0xf5, 0xf7, 0xf3, 0xf9, 0x34, 0x49, + 0x82, 0x46, 0x48, 0x46, 0xf5, 0xf7, 0xcc, 0xf9, 0x32, 0x49, 0x80, 0x46, + 0x28, 0x46, 0xf5, 0xf7, 0xc7, 0xf9, 0x98, 0x22, 0x00, 0x21, 0xc7, 0xf8, + 0x9c, 0x00, 0x07, 0xf1, 0xd8, 0x00, 0xc7, 0xf8, 0x8c, 0xa0, 0xa7, 0xf8, + 0x90, 0x90, 0xc7, 0xf8, 0x94, 0x80, 0xa7, 0xf8, 0x98, 0x50, 0x01, 0xf0, + 0x4b, 0xfe, 0x07, 0xf1, 0x8c, 0x01, 0x07, 0xf1, 0xd8, 0x00, 0xec, 0xf7, + 0xab, 0xfd, 0x20, 0x46, 0xf6, 0xf7, 0x2d, 0xf9, 0x4f, 0x23, 0x07, 0xf1, + 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, 0xc0, 0xff, + 0x4f, 0xf4, 0x75, 0x63, 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, + 0x8c, 0x30, 0xec, 0xf7, 0xb7, 0xff, 0x40, 0xf2, 0x4c, 0x53, 0x07, 0xf1, + 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, 0xae, 0xff, + 0x40, 0xf2, 0x4d, 0x33, 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, + 0x8c, 0x30, 0xec, 0xf7, 0xa5, 0xff, 0x40, 0xf6, 0x52, 0x13, 0x07, 0xf1, + 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, 0x9c, 0xff, + 0x40, 0xf6, 0x53, 0x73, 0x1a, 0xe0, 0x00, 0xbf, 0x08, 0x0b, 0x02, 0x24, + 0x8d, 0xe5, 0x01, 0x08, 0x50, 0x2f, 0x02, 0x24, 0x3c, 0x2c, 0x02, 0x24, + 0x00, 0x44, 0x02, 0x58, 0x40, 0x2c, 0x02, 0x24, 0x54, 0x2f, 0x02, 0x24, + 0x74, 0xec, 0x01, 0x08, 0x23, 0xe1, 0x00, 0x08, 0xa0, 0x86, 0x01, 0x00, + 0x17, 0x00, 0x16, 0x00, 0x00, 0xd6, 0x01, 0x08, 0x64, 0xd5, 0x01, 0x08, + 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, + 0x77, 0xff, 0x0a, 0x20, 0xef, 0xf7, 0x94, 0xfb, 0x48, 0xf2, 0x9c, 0x03, + 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, + 0x6b, 0xff, 0x42, 0xf2, 0x9e, 0x03, 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, + 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, 0x62, 0xff, 0x0a, 0x20, 0xef, 0xf7, + 0x7f, 0xfb, 0x40, 0xf2, 0x42, 0x23, 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, + 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, 0x56, 0xff, 0x0a, 0x20, 0xef, 0xf7, + 0x73, 0xfb, 0x4a, 0xf2, 0x94, 0x03, 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, + 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, 0x4a, 0xff, 0x40, 0xf6, 0x3b, 0x73, + 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, + 0x41, 0xff, 0x40, 0xf6, 0x35, 0x73, 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, + 0xa7, 0xf8, 0x8c, 0x30, 0xec, 0xf7, 0x38, 0xff, 0x0a, 0x20, 0xef, 0xf7, + 0x55, 0xfb, 0x01, 0x21, 0x07, 0xf1, 0x54, 0x00, 0xf5, 0xf7, 0x8a, 0xfe, + 0x0a, 0x20, 0xef, 0xf7, 0x4d, 0xfb, 0x00, 0x21, 0x07, 0xf1, 0x54, 0x00, + 0xf5, 0xf7, 0x82, 0xfe, 0x0a, 0x20, 0xef, 0xf7, 0x45, 0xfb, 0x01, 0x21, + 0x07, 0xf1, 0x54, 0x00, 0xf5, 0xf7, 0x7a, 0xfe, 0x0a, 0x20, 0xef, 0xf7, + 0x3d, 0xfb, 0x4d, 0xf6, 0x59, 0x73, 0x9e, 0x42, 0x00, 0xf0, 0x2b, 0x82, + 0xff, 0xf7, 0x80, 0xfa, 0x05, 0x46, 0x00, 0x28, 0x00, 0xf0, 0x27, 0x82, + 0xb1, 0x4b, 0x1b, 0x78, 0x13, 0xb1, 0xb1, 0x48, 0x03, 0xf0, 0xa4, 0xf9, + 0x40, 0xf2, 0xaa, 0x73, 0x9e, 0x42, 0x40, 0xf0, 0x30, 0x81, 0x01, 0x20, + 0xfc, 0xf7, 0xda, 0xfc, 0x81, 0x46, 0x5f, 0xfa, 0x80, 0xf8, 0x02, 0x20, + 0xfc, 0xf7, 0xd4, 0xfc, 0x06, 0x46, 0x03, 0x20, 0xfc, 0xf7, 0xd0, 0xfc, + 0xa5, 0x4b, 0x38, 0x61, 0x1b, 0x78, 0x2b, 0xb1, 0x03, 0x46, 0x32, 0x46, + 0x41, 0x46, 0xa4, 0x48, 0xf2, 0xf7, 0x3c, 0xfc, 0xa3, 0x48, 0xf6, 0xf7, + 0x0f, 0xfb, 0x18, 0xf0, 0x02, 0x0f, 0xa2, 0x4d, 0x45, 0xd0, 0x18, 0xf0, + 0x60, 0x0b, 0x4f, 0xf0, 0x28, 0x00, 0xdf, 0xf8, 0xa0, 0xa2, 0x29, 0xd0, + 0xf4, 0xf7, 0x88, 0xfd, 0x00, 0x23, 0x06, 0xf1, 0x00, 0x62, 0xc6, 0xf5, + 0x00, 0x11, 0xc0, 0xf8, 0x00, 0xa0, 0x80, 0xf8, 0x20, 0x30, 0x43, 0x62, + 0xc0, 0xe9, 0x04, 0x23, 0x01, 0x32, 0xc0, 0xe9, 0x01, 0x33, 0xc0, 0xe9, + 0x06, 0x13, 0x00, 0xd0, 0x41, 0xbb, 0x00, 0x21, 0x93, 0x48, 0xe8, 0xf7, + 0xe5, 0xfa, 0x93, 0x48, 0xf5, 0xf7, 0x17, 0xfe, 0x00, 0x28, 0x7f, 0xf4, + 0x69, 0xad, 0x8a, 0x4b, 0x18, 0x70, 0x6b, 0xe5, 0x06, 0x24, 0xa2, 0xe5, + 0x04, 0x24, 0xa0, 0xe5, 0x03, 0x24, 0x9e, 0xe5, 0x02, 0x24, 0x9c, 0xe5, + 0xf4, 0xf7, 0x5e, 0xfd, 0x4f, 0xf0, 0x00, 0x62, 0x00, 0x23, 0xc0, 0xf8, + 0x08, 0xb0, 0x80, 0xf8, 0x20, 0xb0, 0xc0, 0xf8, 0x24, 0xb0, 0xc0, 0xe9, + 0x04, 0x23, 0x4f, 0xf4, 0x00, 0x12, 0x00, 0x23, 0xc0, 0xe9, 0x00, 0xab, + 0xc0, 0xe9, 0x06, 0x23, 0x28, 0x60, 0x18, 0xf0, 0x04, 0x0f, 0x02, 0xd0, + 0xff, 0xf7, 0x4a, 0xf9, 0x28, 0x60, 0x18, 0xf0, 0x08, 0x0f, 0x07, 0xd0, + 0x88, 0x20, 0xf4, 0xf7, 0x3f, 0xfd, 0x82, 0x46, 0xfc, 0xf7, 0x46, 0xfc, + 0xc5, 0xf8, 0x00, 0xa0, 0x19, 0xf0, 0x80, 0x0f, 0x14, 0xd0, 0x28, 0x20, + 0xd5, 0xf8, 0x00, 0x90, 0xf4, 0xf7, 0x32, 0xfd, 0x74, 0x4b, 0x00, 0x22, + 0x46, 0x76, 0x28, 0x60, 0xc0, 0xe9, 0x00, 0x39, 0x00, 0x23, 0xc0, 0xe9, + 0x02, 0x23, 0xc0, 0xe9, 0x04, 0x23, 0x00, 0x23, 0x03, 0x76, 0xc3, 0x61, + 0x80, 0xf8, 0x20, 0x30, 0x18, 0xf0, 0x40, 0x0f, 0xdf, 0xf8, 0xc8, 0x91, + 0x08, 0xd0, 0xc8, 0x20, 0xf4, 0xf7, 0x1a, 0xfd, 0x82, 0x46, 0x69, 0x49, + 0xe8, 0xf7, 0xcc, 0xfa, 0xc9, 0xf8, 0x00, 0xa0, 0x18, 0xf0, 0x20, 0x0f, + 0x08, 0xd0, 0x54, 0x20, 0xf4, 0xf7, 0x0e, 0xfd, 0x80, 0x46, 0x63, 0x49, + 0xe8, 0xf7, 0xa4, 0xfa, 0xc9, 0xf8, 0x00, 0x80, 0xd9, 0xf8, 0x00, 0x00, + 0x29, 0x68, 0x00, 0x28, 0x00, 0xf0, 0xca, 0x80, 0x03, 0x68, 0x5b, 0x6a, + 0x98, 0x47, 0x06, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xa2, 0x80, 0x5b, 0x49, + 0x5b, 0x48, 0x01, 0xf0, 0xc3, 0xf8, 0x81, 0x46, 0x00, 0x28, 0x70, 0xd0, + 0x03, 0x46, 0x04, 0x22, 0x01, 0x21, 0x07, 0xf1, 0x8c, 0x00, 0x01, 0xf0, + 0x35, 0xf9, 0x32, 0x46, 0x31, 0x46, 0x48, 0x46, 0x01, 0xf0, 0x40, 0xf9, + 0xd7, 0xf8, 0x8c, 0x00, 0xfa, 0xf7, 0x9e, 0xff, 0x42, 0x1c, 0x05, 0x46, + 0x00, 0xf0, 0x3b, 0x81, 0x4e, 0x49, 0x07, 0xf1, 0x70, 0x00, 0xf5, 0xf7, + 0xb7, 0xfd, 0x07, 0xf1, 0x70, 0x00, 0xf4, 0xf7, 0xfb, 0xfe, 0x80, 0x46, + 0x00, 0x28, 0x3f, 0xd1, 0x00, 0xf0, 0x26, 0xfe, 0x46, 0x46, 0x13, 0x23, + 0x03, 0x60, 0x28, 0x46, 0xdf, 0xf8, 0xf8, 0xb0, 0xe8, 0xf7, 0x08, 0xfb, + 0xb0, 0xf5, 0x80, 0x4f, 0x28, 0xbf, 0x4f, 0xf4, 0x80, 0x40, 0x80, 0x46, + 0x01, 0xf0, 0x26, 0xfc, 0x82, 0x46, 0x7b, 0x69, 0xb3, 0x42, 0x80, 0xf0, + 0xf3, 0x80, 0x42, 0x46, 0x4b, 0x46, 0x01, 0x21, 0x50, 0x46, 0x01, 0xf0, + 0xff, 0xf8, 0x7b, 0x69, 0x28, 0x46, 0xe9, 0x18, 0x39, 0x61, 0xe8, 0xf7, + 0xef, 0xfa, 0x39, 0x69, 0x02, 0x46, 0xb1, 0xfb, 0xf0, 0xf3, 0x00, 0xfb, + 0x13, 0x13, 0x3b, 0xb9, 0x58, 0x46, 0xf5, 0xf7, 0x75, 0xff, 0x42, 0xf2, + 0x10, 0x70, 0xf4, 0xf7, 0x99, 0xfc, 0x39, 0x69, 0x43, 0x46, 0x0a, 0x46, + 0x58, 0x46, 0x51, 0x46, 0xf6, 0xf7, 0xb6, 0xf8, 0x4f, 0xf4, 0x7a, 0x70, + 0xf4, 0xf7, 0x8e, 0xfc, 0x7b, 0x69, 0x43, 0x44, 0x7b, 0x61, 0xd2, 0xe7, + 0x03, 0x68, 0x22, 0x46, 0x39, 0x6f, 0x9b, 0x69, 0x98, 0x47, 0xb0, 0xf1, + 0x00, 0x08, 0x05, 0xda, 0x00, 0xf0, 0xde, 0xfd, 0xc8, 0xf1, 0x00, 0x03, + 0x03, 0x60, 0xb6, 0xe7, 0xd7, 0xf8, 0xb8, 0x60, 0xb3, 0xe7, 0x6f, 0xf0, + 0x02, 0x00, 0xe8, 0xf7, 0xef, 0xfa, 0x1f, 0x4b, 0x13, 0x49, 0x1a, 0x68, + 0x09, 0x78, 0x02, 0xf0, 0x7f, 0x42, 0xb2, 0xf1, 0x00, 0x5f, 0x00, 0xf0, + 0xd5, 0x80, 0x1a, 0x68, 0x02, 0xf0, 0x7f, 0x42, 0xb2, 0xf1, 0x10, 0x5f, + 0x00, 0xf0, 0xce, 0x80, 0x1a, 0x68, 0x02, 0xf0, 0x7f, 0x42, 0xb2, 0xf1, + 0x40, 0x5f, 0x00, 0xf0, 0xc7, 0x80, 0x1b, 0x68, 0x03, 0xf0, 0x7f, 0x43, + 0xb3, 0xf1, 0x60, 0x5f, 0x00, 0xf0, 0xc0, 0x80, 0x00, 0x29, 0x00, 0xf0, + 0xc8, 0x80, 0x0f, 0x48, 0x03, 0xf0, 0x4a, 0xf8, 0xc3, 0xe0, 0x6f, 0xf0, + 0x01, 0x00, 0xd4, 0xe7, 0x08, 0x0b, 0x02, 0x24, 0xab, 0xe5, 0x01, 0x08, + 0xc8, 0xe5, 0x01, 0x08, 0xb0, 0x3f, 0x02, 0x24, 0x7c, 0x3f, 0x02, 0x24, + 0x01, 0x01, 0xff, 0x80, 0xe8, 0x0a, 0x00, 0x24, 0xbc, 0xeb, 0x01, 0x08, + 0xb6, 0xd9, 0x01, 0x08, 0xe4, 0xe5, 0x01, 0x08, 0xe7, 0xe5, 0x01, 0x08, + 0x00, 0x00, 0x04, 0x08, 0x22, 0xe6, 0x01, 0x08, 0xbc, 0xd6, 0x01, 0x08, + 0xb8, 0x3f, 0x02, 0x24, 0x00, 0x29, 0x6b, 0xd0, 0x0b, 0x68, 0x08, 0x46, + 0xea, 0x46, 0x9b, 0x68, 0x98, 0x47, 0x80, 0x46, 0x00, 0x28, 0x40, 0xf0, + 0x8a, 0x80, 0x28, 0x68, 0x03, 0x68, 0x9b, 0x6a, 0x98, 0x47, 0x10, 0x28, + 0x02, 0x46, 0x28, 0x68, 0xb8, 0xbf, 0x10, 0x22, 0x01, 0x68, 0x93, 0x00, + 0x07, 0x33, 0x23, 0xf0, 0x07, 0x03, 0xad, 0xeb, 0x03, 0x0d, 0xd3, 0x17, + 0x0d, 0xf1, 0x10, 0x09, 0xcd, 0xe9, 0x00, 0x23, 0x43, 0x46, 0x4d, 0x69, + 0x32, 0x46, 0x49, 0x46, 0xa8, 0x47, 0xd9, 0xf8, 0x00, 0x00, 0xfa, 0xf7, + 0xc9, 0xfe, 0x43, 0x1c, 0x05, 0x46, 0x65, 0xd0, 0xe8, 0xf7, 0x48, 0xfa, + 0xb0, 0xf5, 0x80, 0x4f, 0x28, 0xbf, 0x4f, 0xf4, 0x80, 0x40, 0x81, 0x46, + 0x01, 0xf0, 0x66, 0xfb, 0x83, 0x46, 0xc7, 0xf8, 0x0c, 0x80, 0xd7, 0xe9, + 0x04, 0x32, 0x93, 0x42, 0x2f, 0xd9, 0xb1, 0x4b, 0x59, 0x46, 0x18, 0x68, + 0x03, 0x68, 0xcd, 0xf8, 0x00, 0x90, 0xfa, 0x68, 0x01, 0x92, 0xd3, 0xf8, + 0x14, 0x80, 0x7b, 0x69, 0xf2, 0x18, 0x00, 0x23, 0xc0, 0x47, 0x7b, 0x69, + 0x28, 0x46, 0x05, 0xeb, 0x03, 0x08, 0xe8, 0xf7, 0x25, 0xfa, 0x02, 0x46, + 0xb8, 0xfb, 0xf0, 0xf3, 0x00, 0xfb, 0x13, 0x83, 0x3b, 0xb9, 0x41, 0x46, + 0xa4, 0x48, 0xf5, 0xf7, 0xab, 0xfe, 0x42, 0xf2, 0x10, 0x70, 0xf4, 0xf7, + 0xcf, 0xfb, 0x4b, 0x46, 0x42, 0x46, 0x59, 0x46, 0x9f, 0x48, 0xf5, 0xf7, + 0xed, 0xff, 0x4f, 0xf4, 0x7a, 0x70, 0xf4, 0xf7, 0xc5, 0xfb, 0x7b, 0x69, + 0x4b, 0x44, 0x7b, 0x61, 0xcb, 0xe7, 0xd5, 0x46, 0x99, 0x48, 0xf6, 0xf7, + 0x25, 0xf9, 0x99, 0x4b, 0x99, 0x4a, 0xc7, 0xf8, 0xb4, 0x30, 0x99, 0x4b, + 0x99, 0x48, 0xc7, 0xf8, 0xa8, 0x30, 0x00, 0x23, 0xc7, 0xe9, 0x2b, 0x33, + 0x00, 0x23, 0xcd, 0xe9, 0x02, 0x23, 0xd7, 0xf8, 0xb4, 0x30, 0x00, 0x93, + 0x94, 0xe8, 0x0e, 0x00, 0xf5, 0xf7, 0xfc, 0xfb, 0x92, 0x4b, 0x1b, 0x78, + 0x13, 0xb1, 0x92, 0x48, 0x02, 0xf0, 0x9c, 0xff, 0x00, 0x20, 0xe8, 0xf7, + 0x19, 0xfa, 0xef, 0xf7, 0x23, 0xf8, 0xfe, 0xe7, 0xd5, 0x46, 0x28, 0x46, + 0x21, 0xe7, 0x6f, 0xf0, 0x03, 0x00, 0x1e, 0xe7, 0x19, 0xb1, 0x8b, 0x49, + 0x8b, 0x48, 0xf2, 0xf7, 0x3f, 0xfa, 0x00, 0x20, 0xe8, 0xf7, 0x08, 0xfa, + 0x87, 0x48, 0xf4, 0xf7, 0x57, 0xfd, 0xfd, 0xf7, 0xc1, 0xfd, 0x7f, 0x4b, + 0x86, 0x4a, 0xc7, 0xf8, 0xb4, 0x30, 0x86, 0x4b, 0xc7, 0xf8, 0xb0, 0x00, + 0xc7, 0xe9, 0x2a, 0x30, 0x00, 0x23, 0x84, 0x48, 0xcd, 0xe9, 0x02, 0x23, + 0xd7, 0xf8, 0xb4, 0x30, 0x00, 0x93, 0x94, 0xe8, 0x0e, 0x00, 0xf5, 0xf7, + 0xc9, 0xfb, 0x28, 0x46, 0xe8, 0xf7, 0xec, 0xf9, 0x77, 0x4b, 0x1b, 0x78, + 0x13, 0xb1, 0x7d, 0x48, 0x02, 0xf0, 0x66, 0xff, 0x7c, 0x4d, 0x4f, 0xf4, + 0x70, 0x76, 0x00, 0x21, 0x32, 0x46, 0x28, 0x46, 0x01, 0xf0, 0x40, 0xfb, + 0x79, 0x4b, 0x05, 0xf1, 0x20, 0x01, 0x00, 0x20, 0x6b, 0x62, 0x78, 0x4b, + 0x2b, 0x65, 0x78, 0x4b, 0xeb, 0x65, 0xe9, 0xf7, 0xcf, 0xfb, 0x05, 0xf1, + 0x4c, 0x01, 0x01, 0x20, 0xe9, 0xf7, 0xca, 0xfb, 0x05, 0xf1, 0x58, 0x01, + 0x02, 0x20, 0xe9, 0xf7, 0xc5, 0xfb, 0x6a, 0x6a, 0x82, 0x46, 0x21, 0x46, + 0x00, 0x20, 0xc7, 0xf8, 0xa8, 0x60, 0xe8, 0xf7, 0x81, 0xfc, 0xa8, 0xbb, + 0xd7, 0xf8, 0xa8, 0x30, 0x21, 0x46, 0x2a, 0x6d, 0x01, 0x20, 0xab, 0x62, + 0xc7, 0xf8, 0xa8, 0x60, 0xe8, 0xf7, 0x76, 0xfc, 0xf8, 0xb1, 0x09, 0x24, + 0x5b, 0x4b, 0x1b, 0x78, 0x23, 0xb1, 0x4f, 0xf4, 0x70, 0x71, 0x65, 0x48, + 0xf2, 0xf7, 0xe0, 0xf9, 0x01, 0x23, 0x9c, 0x42, 0x85, 0xf8, 0x64, 0x30, + 0x2c, 0xd1, 0x5d, 0x4c, 0x54, 0x4e, 0x94, 0xf8, 0x64, 0x30, 0x04, 0x2b, + 0x87, 0xf8, 0xaf, 0x30, 0x00, 0xf2, 0x37, 0x83, 0x01, 0x2b, 0x00, 0xf2, + 0x3a, 0x83, 0x00, 0xf0, 0xd3, 0x83, 0xff, 0x23, 0x84, 0xf8, 0x64, 0x30, + 0xce, 0xe3, 0xd7, 0xf8, 0xa8, 0x30, 0x21, 0x46, 0xea, 0x6d, 0x02, 0x20, + 0x6b, 0x65, 0xc7, 0xf8, 0xa8, 0x60, 0xe8, 0xf7, 0x4b, 0xfc, 0x08, 0xb1, + 0x01, 0x24, 0xd3, 0xe7, 0xd7, 0xf8, 0xa8, 0x30, 0x28, 0x6a, 0x2b, 0x66, + 0xe8, 0xf7, 0x76, 0xfc, 0x04, 0x46, 0xa8, 0x6d, 0xe8, 0xf7, 0x72, 0xfc, + 0xa0, 0x42, 0x2c, 0xbf, 0xa8, 0x66, 0xac, 0x66, 0x00, 0x20, 0xe9, 0xf7, + 0xe9, 0xfb, 0x83, 0x46, 0x58, 0xb1, 0x3c, 0x4b, 0x1b, 0x78, 0x1b, 0xb1, + 0x00, 0x21, 0x47, 0x48, 0xf2, 0xf7, 0xa2, 0xf9, 0x40, 0x4b, 0x01, 0x22, + 0x83, 0xf8, 0x64, 0x20, 0xc1, 0xe7, 0xd5, 0xf8, 0x28, 0xe0, 0xbe, 0xf5, + 0x70, 0x7f, 0x04, 0xd8, 0xd5, 0xf8, 0x54, 0xc0, 0xbc, 0xf5, 0x70, 0x7f, + 0x07, 0xd9, 0x31, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0xec, 0xd0, 0x3d, 0x48, + 0x02, 0xf0, 0xd8, 0xfe, 0xe8, 0xe7, 0xab, 0x6d, 0x01, 0x46, 0x81, 0x46, + 0x02, 0x46, 0x9b, 0x68, 0x04, 0x46, 0x38, 0x61, 0x7b, 0x60, 0x2b, 0x6d, + 0xbb, 0x60, 0x6b, 0x6a, 0xfb, 0x60, 0x03, 0x46, 0x86, 0x45, 0x0e, 0xd8, + 0x8c, 0x45, 0x0c, 0xd8, 0x86, 0x45, 0x24, 0x4c, 0x04, 0xd1, 0x8c, 0x45, + 0x02, 0xd1, 0x3b, 0x69, 0x4b, 0x45, 0x74, 0xd0, 0x23, 0x78, 0x00, 0x2b, + 0xcc, 0xd0, 0x2e, 0x48, 0xde, 0xe7, 0x93, 0x42, 0x1c, 0xd1, 0xfe, 0x68, + 0x06, 0xeb, 0xc0, 0x08, 0xbe, 0x68, 0x01, 0x30, 0xd8, 0xf8, 0x04, 0x80, + 0x43, 0x44, 0x06, 0xeb, 0xc1, 0x08, 0x01, 0x31, 0xd8, 0xf8, 0x04, 0x80, + 0x42, 0x44, 0x93, 0x42, 0xdc, 0xd1, 0x3a, 0x69, 0x99, 0x44, 0x1a, 0x44, + 0x3a, 0x61, 0x7a, 0x68, 0x9a, 0x42, 0x52, 0xd2, 0x11, 0x4b, 0x1b, 0x78, + 0x00, 0x2b, 0xad, 0xd0, 0x1f, 0x48, 0xbf, 0xe7, 0x40, 0xd2, 0xfe, 0x68, + 0x02, 0x2c, 0x06, 0xeb, 0xc0, 0x08, 0xd8, 0xf8, 0x04, 0x80, 0x43, 0x44, + 0x05, 0xd1, 0x0a, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0x9e, 0xd0, 0x19, 0x48, + 0xb0, 0xe7, 0x01, 0x30, 0x01, 0x24, 0xde, 0xe7, 0x7c, 0x3f, 0x02, 0x24, + 0xb0, 0x3f, 0x02, 0x24, 0xb1, 0x4a, 0x01, 0x08, 0x40, 0x0d, 0x03, 0x00, + 0x8d, 0x4a, 0x01, 0x08, 0x68, 0x06, 0x00, 0x24, 0x08, 0x0b, 0x02, 0x24, + 0xf6, 0xe5, 0x01, 0x08, 0x00, 0x00, 0x04, 0x08, 0x07, 0xe6, 0x01, 0x08, + 0x90, 0xd0, 0x03, 0x00, 0xbd, 0x64, 0x01, 0x08, 0xe8, 0x0b, 0x02, 0x24, + 0x34, 0xe6, 0x01, 0x08, 0x28, 0x07, 0x00, 0x24, 0x80, 0x4b, 0x02, 0x24, + 0x80, 0x87, 0x02, 0x24, 0x80, 0x69, 0x02, 0x24, 0x47, 0xe6, 0x01, 0x08, + 0x87, 0xe6, 0x01, 0x08, 0xb1, 0xe6, 0x01, 0x08, 0x46, 0xe7, 0x01, 0x08, + 0x11, 0xe7, 0x01, 0x08, 0xdd, 0xe6, 0x01, 0x08, 0xbe, 0x68, 0x01, 0x2c, + 0x06, 0xeb, 0xc1, 0x08, 0xd8, 0xf8, 0x04, 0x80, 0x42, 0x44, 0xbe, 0xd0, + 0x01, 0x31, 0x02, 0x24, 0xa3, 0xe7, 0x00, 0x22, 0x13, 0x46, 0x14, 0x46, + 0x7e, 0xe7, 0x20, 0x22, 0xff, 0x21, 0x07, 0xf1, 0xb4, 0x00, 0x01, 0xf0, + 0x25, 0xfa, 0x01, 0x23, 0x00, 0x20, 0x07, 0xf1, 0x8c, 0x01, 0xc7, 0xf8, + 0xa8, 0x30, 0x03, 0xf1, 0x01, 0x23, 0xc7, 0xf8, 0xd4, 0x00, 0xc7, 0xe9, + 0x2b, 0x30, 0xe9, 0xf7, 0x53, 0xfd, 0x07, 0xf1, 0x70, 0x01, 0x02, 0x20, + 0xe9, 0xf7, 0x4e, 0xfd, 0x23, 0x78, 0x6b, 0xb3, 0x97, 0xf8, 0x8c, 0x30, + 0x01, 0x2b, 0x00, 0xf0, 0xff, 0x80, 0xb3, 0x4a, 0xb3, 0x49, 0x03, 0x2b, + 0x18, 0xbf, 0x0a, 0x46, 0x97, 0xf8, 0x8f, 0x10, 0x97, 0xf8, 0x8d, 0x30, + 0x01, 0x91, 0x97, 0xf8, 0x8e, 0x10, 0xaf, 0x48, 0x00, 0x91, 0xaf, 0x49, + 0xf2, 0xf7, 0xcc, 0xf8, 0x23, 0x78, 0xab, 0xb1, 0x97, 0xf8, 0x70, 0x30, + 0x01, 0x2b, 0x00, 0xf0, 0xe9, 0x80, 0xa7, 0x4a, 0xa7, 0x49, 0x03, 0x2b, + 0x18, 0xbf, 0x0a, 0x46, 0x97, 0xf8, 0x73, 0x10, 0x97, 0xf8, 0x71, 0x30, + 0x01, 0x91, 0x97, 0xf8, 0x72, 0x10, 0xa3, 0x48, 0x00, 0x91, 0xa4, 0x49, + 0xf2, 0xf7, 0xb4, 0xf8, 0x97, 0xf8, 0x8c, 0x30, 0x4f, 0xf0, 0x00, 0x09, + 0x97, 0xf8, 0x70, 0x80, 0x08, 0xee, 0x10, 0x3a, 0x9f, 0x4e, 0x97, 0xf8, + 0x8e, 0x30, 0x3b, 0x61, 0x18, 0xee, 0x10, 0x1a, 0x30, 0x78, 0xe9, 0xf7, + 0x50, 0xfd, 0x00, 0x28, 0x00, 0xf0, 0xca, 0x80, 0x41, 0x46, 0x70, 0x78, + 0xe9, 0xf7, 0x49, 0xfd, 0x00, 0x28, 0x00, 0xf0, 0xc3, 0x80, 0xb1, 0x78, + 0x04, 0x29, 0x03, 0xd0, 0x3b, 0x69, 0x99, 0x42, 0x40, 0xf0, 0xbc, 0x80, + 0x92, 0x4b, 0x03, 0xeb, 0x89, 0x03, 0xde, 0x78, 0x23, 0x78, 0x6b, 0xb1, + 0x00, 0x2e, 0x00, 0xf0, 0xaf, 0x80, 0x01, 0x2e, 0x00, 0xf0, 0xae, 0x80, + 0x8d, 0x49, 0x8e, 0x4b, 0x02, 0x2e, 0x18, 0xbf, 0x19, 0x46, 0x8d, 0x48, + 0xf2, 0xf7, 0x7e, 0xf8, 0x01, 0x2e, 0xc7, 0xf8, 0xd4, 0x60, 0x00, 0xf0, + 0xb3, 0x80, 0x02, 0x2e, 0x00, 0xf0, 0xb2, 0x80, 0x00, 0x2e, 0x40, 0xf0, + 0xcb, 0x80, 0x97, 0xf8, 0xad, 0x30, 0x01, 0x2b, 0x40, 0xf0, 0x57, 0x81, + 0xd7, 0xf8, 0xa8, 0x30, 0x01, 0x2b, 0x40, 0xf0, 0x52, 0x81, 0x97, 0xf8, + 0xac, 0x00, 0x01, 0x28, 0x40, 0xf0, 0x4d, 0x81, 0x97, 0xf8, 0xaf, 0x40, + 0x01, 0x2c, 0x40, 0xf0, 0xb7, 0x81, 0x07, 0xf1, 0x70, 0x01, 0x00, 0x20, + 0xe9, 0xf7, 0xc4, 0xfc, 0x06, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x72, 0x81, + 0x07, 0xf1, 0x8c, 0x01, 0x20, 0x46, 0xe9, 0xf7, 0xbb, 0xfc, 0x01, 0x28, + 0x40, 0xf0, 0x67, 0x81, 0x74, 0x4b, 0x1b, 0x78, 0x1b, 0xb1, 0x31, 0x46, + 0x73, 0x48, 0xf2, 0xf7, 0x47, 0xf8, 0x73, 0x4b, 0xc7, 0xf8, 0x8c, 0x30, + 0x00, 0x23, 0x87, 0xf8, 0x90, 0x30, 0x97, 0xf8, 0x73, 0x30, 0x4f, 0xf0, + 0x00, 0x08, 0x97, 0xf8, 0x70, 0x40, 0x3b, 0x61, 0x97, 0xf8, 0x8c, 0x60, + 0x97, 0xf8, 0x72, 0x30, 0x97, 0xf8, 0x8f, 0x90, 0xdf, 0xf8, 0xc4, 0xb1, + 0xfb, 0x60, 0x21, 0x46, 0x9b, 0xf8, 0x00, 0x00, 0xe9, 0xf7, 0xd9, 0xfc, + 0x00, 0x28, 0x00, 0xf0, 0x4b, 0x81, 0x31, 0x46, 0x9b, 0xf8, 0x01, 0x00, + 0xe9, 0xf7, 0xd1, 0xfc, 0x00, 0x28, 0x00, 0xf0, 0x43, 0x81, 0x9b, 0xf8, + 0x02, 0x20, 0x04, 0x2a, 0x03, 0xd0, 0x3b, 0x69, 0x9a, 0x42, 0x40, 0xf0, + 0x3b, 0x81, 0x9b, 0xf8, 0x03, 0x20, 0x04, 0x2a, 0x02, 0xd0, 0x4a, 0x45, + 0x40, 0xf0, 0x34, 0x81, 0x9b, 0xf8, 0x04, 0x20, 0x04, 0x2a, 0x03, 0xd0, + 0xfb, 0x68, 0x9a, 0x42, 0x40, 0xf0, 0x2c, 0x81, 0x52, 0x4b, 0x1b, 0x78, + 0x7b, 0xb1, 0x9b, 0xf8, 0x05, 0x30, 0x02, 0x2b, 0x00, 0xf0, 0x20, 0x81, + 0x03, 0x2b, 0x00, 0xf0, 0x1f, 0x81, 0x50, 0x49, 0x4a, 0x4a, 0x04, 0x2b, + 0x18, 0xbf, 0x11, 0x46, 0x4e, 0x48, 0xf1, 0xf7, 0xf7, 0xff, 0x9b, 0xf8, + 0x05, 0x40, 0xa3, 0x1e, 0x02, 0x2b, 0x00, 0xf2, 0x0d, 0x81, 0x02, 0x2c, + 0x03, 0xd0, 0x04, 0x2c, 0x0c, 0xbf, 0x04, 0x24, 0x03, 0x24, 0x01, 0x20, + 0x07, 0xf1, 0xa8, 0x01, 0xe9, 0xf7, 0x0a, 0xfb, 0x00, 0x28, 0x00, 0xf0, + 0x14, 0x81, 0x01, 0x28, 0x0c, 0xbf, 0x01, 0x24, 0x05, 0x24, 0x0e, 0xe1, + 0x41, 0x4a, 0x03, 0xe7, 0x40, 0x4a, 0x19, 0xe7, 0x40, 0x49, 0x56, 0xe7, + 0x40, 0x49, 0x54, 0xe7, 0x09, 0xf1, 0x01, 0x09, 0x04, 0x36, 0xb9, 0xf1, + 0x04, 0x0f, 0x7f, 0xf4, 0x27, 0xaf, 0x23, 0x78, 0x1b, 0xb1, 0x3c, 0x48, + 0x02, 0xf0, 0x16, 0xfd, 0x00, 0x23, 0xc7, 0xf8, 0xd4, 0x30, 0x52, 0xe7, + 0x4f, 0xf0, 0x02, 0x0b, 0x07, 0xf1, 0x8c, 0x01, 0x5f, 0xfa, 0x8b, 0xf0, + 0xe9, 0xf7, 0x86, 0xf9, 0x06, 0x46, 0x98, 0xb9, 0xd7, 0xf8, 0x8c, 0x90, + 0x48, 0x46, 0xe9, 0xf7, 0x72, 0xfc, 0x99, 0xf8, 0x00, 0x30, 0x38, 0x61, + 0x02, 0x2b, 0x11, 0xd0, 0x01, 0x2b, 0x35, 0xd9, 0x07, 0x24, 0xd7, 0xf8, + 0x8c, 0x00, 0xe9, 0xf7, 0x5f, 0xf9, 0x00, 0x2c, 0x3f, 0xf4, 0x35, 0xaf, + 0x21, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0x3f, 0xf4, 0x01, 0xae, 0x00, 0x21, + 0x27, 0x48, 0xfb, 0xe5, 0x4f, 0xf0, 0x03, 0x0b, 0x00, 0x24, 0xa0, 0x46, + 0x38, 0x69, 0x01, 0x23, 0xa9, 0x6e, 0x07, 0xf1, 0x70, 0x02, 0x01, 0xfb, + 0x08, 0x01, 0x48, 0x46, 0xe8, 0xf7, 0xe2, 0xfa, 0x00, 0x28, 0x76, 0xdb, + 0x01, 0x22, 0x07, 0xf1, 0x70, 0x01, 0x48, 0x46, 0xe9, 0xf7, 0x2e, 0xfb, + 0x00, 0x28, 0x39, 0xd0, 0x16, 0xb1, 0x00, 0x2c, 0x08, 0xbf, 0x44, 0x46, + 0x08, 0xf1, 0x01, 0x08, 0xc3, 0x45, 0xe3, 0xd1, 0x00, 0x2e, 0x44, 0xd0, + 0x00, 0x2c, 0x08, 0xbf, 0x5c, 0x46, 0x34, 0xe0, 0x4f, 0xf4, 0x34, 0x6b, + 0xd8, 0xe7, 0x00, 0xbf, 0x60, 0xe5, 0x01, 0x08, 0x66, 0xe5, 0x01, 0x08, + 0x7f, 0xe7, 0x01, 0x08, 0x71, 0xe7, 0x01, 0x08, 0xbe, 0xe7, 0x01, 0x08, + 0x84, 0xec, 0x01, 0x08, 0xcc, 0xe8, 0x01, 0x08, 0x6a, 0xe5, 0x01, 0x08, + 0xc6, 0xe7, 0x01, 0x08, 0x08, 0x0b, 0x02, 0x24, 0x3e, 0xe8, 0x01, 0x08, + 0x03, 0x01, 0x03, 0x03, 0x7c, 0xe5, 0x01, 0x08, 0x87, 0xe8, 0x01, 0x08, + 0x5b, 0xe5, 0x01, 0x08, 0xe8, 0xe7, 0x01, 0x08, 0x3e, 0xe7, 0x01, 0x08, + 0xd9, 0xe7, 0x01, 0x08, 0x0d, 0xe8, 0x01, 0x08, 0x94, 0xec, 0x01, 0x08, + 0x8e, 0xb3, 0x00, 0x2c, 0xc6, 0xd0, 0xb0, 0x4b, 0x1b, 0x78, 0x13, 0xb1, + 0xaf, 0x48, 0x02, 0xf0, 0x91, 0xfc, 0x03, 0x23, 0xb4, 0xfb, 0xf3, 0xf3, + 0x5a, 0x1c, 0x03, 0xeb, 0x43, 0x03, 0xe4, 0x1a, 0xc7, 0xf8, 0xa8, 0x20, + 0x01, 0x34, 0x87, 0xf8, 0xac, 0x40, 0xd7, 0xf8, 0x8c, 0x00, 0x01, 0x23, + 0x07, 0xf1, 0x70, 0x02, 0x81, 0x68, 0x80, 0x39, 0xe8, 0xf7, 0x80, 0xfa, + 0x04, 0x46, 0x00, 0x28, 0x84, 0xd1, 0x01, 0x22, 0x07, 0xf1, 0x70, 0x01, + 0xd7, 0xf8, 0x8c, 0x00, 0xe9, 0xf7, 0xca, 0xfa, 0x10, 0xb1, 0x01, 0x23, + 0x87, 0xf8, 0x70, 0x30, 0x97, 0xf8, 0x70, 0x30, 0x03, 0xf0, 0x0f, 0x03, + 0x87, 0xf8, 0xaf, 0x30, 0x6b, 0xe7, 0x01, 0x26, 0x94, 0xe7, 0x01, 0x24, + 0x67, 0xe7, 0x07, 0xf1, 0xa8, 0x00, 0x97, 0x4c, 0xe9, 0xf7, 0x16, 0xfc, + 0x97, 0xf8, 0xaf, 0x30, 0x84, 0xf8, 0x64, 0x30, 0x03, 0x3b, 0x01, 0x2b, + 0x05, 0xd8, 0xe9, 0xf7, 0x55, 0xfb, 0x10, 0xb1, 0xff, 0x23, 0x84, 0xf8, + 0x64, 0x30, 0x97, 0xf8, 0xaf, 0x30, 0x02, 0x3b, 0x02, 0x2b, 0x0c, 0xd8, + 0xe9, 0xf7, 0x70, 0xf9, 0x48, 0xb1, 0xff, 0x23, 0x84, 0xf8, 0x64, 0x30, + 0x87, 0x4b, 0x1b, 0x78, 0x3b, 0xb1, 0x89, 0x48, 0x02, 0xf0, 0x40, 0xfc, + 0x03, 0xe0, 0x94, 0xf8, 0x64, 0x30, 0xff, 0x2b, 0xf4, 0xd0, 0x07, 0xf1, + 0xa8, 0x00, 0xe9, 0xf7, 0x29, 0xf9, 0x01, 0x23, 0x84, 0xf8, 0x64, 0x30, + 0x0b, 0xe5, 0x00, 0x28, 0x3f, 0xf4, 0xa3, 0xae, 0xff, 0x24, 0x12, 0xe0, + 0x7f, 0x49, 0xe5, 0xe6, 0x7f, 0x49, 0xe3, 0xe6, 0x08, 0xf1, 0x01, 0x08, + 0x0b, 0xf1, 0x06, 0x0b, 0xb8, 0xf1, 0x03, 0x0f, 0x7f, 0xf4, 0xa5, 0xae, + 0x75, 0x4b, 0x1b, 0x78, 0x13, 0xb1, 0x7a, 0x48, 0x02, 0xf0, 0x1c, 0xfc, + 0x01, 0x24, 0x74, 0x4b, 0x83, 0xf8, 0x64, 0x40, 0x72, 0x4b, 0x93, 0xf8, + 0x64, 0x30, 0x01, 0x2b, 0x7f, 0xf4, 0xeb, 0xac, 0x00, 0x20, 0xe9, 0xf7, + 0xdd, 0xf8, 0x04, 0x46, 0x00, 0x20, 0x07, 0xf1, 0xa8, 0x01, 0xe9, 0xf7, + 0xe1, 0xf9, 0x14, 0xb1, 0x00, 0x28, 0x3f, 0xf4, 0xde, 0xac, 0xec, 0x6a, + 0x01, 0x20, 0x07, 0xf1, 0xa8, 0x01, 0xe9, 0xf7, 0xd7, 0xf9, 0x6b, 0x4b, + 0x9c, 0x42, 0x7f, 0xf4, 0xd4, 0xac, 0x00, 0x28, 0x7f, 0xf4, 0xd1, 0xac, + 0x04, 0x23, 0x85, 0xf8, 0x64, 0x30, 0xcc, 0xe4, 0x07, 0xf1, 0xa8, 0x01, + 0xe9, 0xf7, 0xc8, 0xf9, 0x5e, 0x4b, 0x08, 0xb1, 0x05, 0x22, 0xff, 0xe4, + 0x97, 0xf8, 0xaf, 0x20, 0x83, 0xf8, 0x64, 0x20, 0xce, 0xe7, 0x05, 0x2b, + 0x7f, 0xf4, 0xcb, 0xac, 0xe9, 0xf7, 0xe2, 0xfa, 0x85, 0xe0, 0x00, 0x20, + 0xe9, 0xf7, 0xac, 0xf8, 0x80, 0x46, 0x00, 0x20, 0x07, 0xf1, 0xa8, 0x01, + 0xe9, 0xf7, 0xb0, 0xf9, 0xb8, 0xf1, 0x00, 0x0f, 0x02, 0xd0, 0x00, 0x28, + 0x00, 0xf0, 0x84, 0x80, 0x33, 0x78, 0x3b, 0xb1, 0x54, 0x48, 0x02, 0xf0, + 0xcd, 0xfb, 0x33, 0x78, 0x13, 0xb1, 0x53, 0x48, 0x02, 0xf0, 0xc8, 0xfb, + 0x07, 0xf1, 0x70, 0x01, 0x00, 0x20, 0xe9, 0xf7, 0x3f, 0xf8, 0x07, 0xf1, + 0x8c, 0x01, 0x01, 0x20, 0x4f, 0xf0, 0x00, 0x08, 0xe9, 0xf7, 0x38, 0xf8, + 0xd4, 0xf8, 0x28, 0x90, 0xc1, 0x45, 0x32, 0xd1, 0x23, 0x6c, 0x13, 0xf0, + 0x0c, 0x0f, 0x3e, 0xd1, 0x33, 0x78, 0x1b, 0xb1, 0x79, 0x69, 0x47, 0x48, + 0xf1, 0xf7, 0x62, 0xfe, 0x7b, 0x69, 0x00, 0x93, 0x00, 0x23, 0x39, 0x6f, + 0x1a, 0x46, 0xd7, 0xf8, 0x8c, 0x00, 0xe8, 0xf7, 0x37, 0xfa, 0x82, 0x46, + 0x00, 0x28, 0x39, 0xd1, 0x2b, 0x6d, 0x01, 0x46, 0xd7, 0xf8, 0x8c, 0x00, + 0x5a, 0x68, 0xe8, 0xf7, 0x63, 0xf9, 0xd5, 0xe9, 0x14, 0x23, 0x01, 0x3b, + 0x52, 0xf8, 0x33, 0x10, 0x02, 0xeb, 0xc3, 0x00, 0x13, 0x68, 0x42, 0x68, + 0xc9, 0x1a, 0xd7, 0xf8, 0x8c, 0x00, 0xe8, 0xf7, 0x55, 0xf9, 0x38, 0x6f, + 0xe8, 0xf7, 0xf2, 0xff, 0xd7, 0xf8, 0x8c, 0x00, 0xe8, 0xf7, 0xee, 0xff, + 0x1c, 0xe0, 0x6b, 0x6a, 0x79, 0x69, 0x03, 0xeb, 0xc8, 0x03, 0x38, 0x6f, + 0x08, 0xf1, 0x01, 0x08, 0xd3, 0xf8, 0x04, 0xa0, 0x52, 0x46, 0xe8, 0xf7, + 0x41, 0xf9, 0x7b, 0x69, 0x53, 0x44, 0x7b, 0x61, 0xba, 0xe7, 0x2a, 0x49, + 0x07, 0xf1, 0xa8, 0x03, 0xd7, 0xf8, 0x8c, 0x20, 0x01, 0xf1, 0x40, 0x00, + 0xe8, 0xf7, 0xe0, 0xfa, 0x00, 0x28, 0x11, 0xda, 0x4f, 0xf0, 0x03, 0x0a, + 0x94, 0xf8, 0x64, 0x30, 0xda, 0x1e, 0x01, 0x2a, 0x1a, 0xd8, 0xe9, 0xf7, + 0x61, 0xfa, 0x82, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x44, 0xac, 0xe9, 0xf7, + 0x81, 0xf8, 0x82, 0x46, 0x90, 0xb1, 0x3e, 0xe4, 0xa2, 0xd1, 0x07, 0xf1, + 0xa8, 0x02, 0x01, 0x21, 0x1a, 0x48, 0xe9, 0xf7, 0x11, 0xf9, 0x00, 0x28, + 0x9a, 0xd0, 0xe3, 0xe7, 0x07, 0xf1, 0xa8, 0x00, 0xe9, 0xf7, 0x02, 0xfb, + 0x82, 0x46, 0xdf, 0xe7, 0x02, 0x2b, 0xe8, 0xd0, 0x94, 0xf8, 0x64, 0x30, + 0xff, 0x2b, 0x28, 0xd1, 0x33, 0x78, 0x1b, 0xbb, 0x07, 0xf1, 0xa8, 0x00, + 0xe9, 0xf7, 0x2e, 0xf8, 0x82, 0x46, 0x20, 0xb3, 0x4f, 0xf0, 0xff, 0x35, + 0x31, 0xe0, 0x00, 0xbf, 0x08, 0x0b, 0x02, 0x24, 0xed, 0xe7, 0x01, 0x08, + 0x28, 0x07, 0x00, 0x24, 0x35, 0xe8, 0x01, 0x08, 0x83, 0xe5, 0x01, 0x08, + 0x88, 0xe5, 0x01, 0x08, 0x98, 0xe8, 0x01, 0x08, 0x3d, 0xb8, 0xf3, 0x96, + 0xaa, 0xe8, 0x01, 0x08, 0xd9, 0xe8, 0x01, 0x08, 0xf4, 0xe8, 0x01, 0x08, + 0x54, 0x07, 0x00, 0x24, 0x94, 0x07, 0x00, 0x24, 0x1e, 0x48, 0x02, 0xf0, + 0x19, 0xfb, 0x94, 0xf8, 0x64, 0x30, 0x01, 0x2b, 0xd4, 0xd1, 0x00, 0x21, + 0x08, 0x46, 0xe9, 0xf7, 0xe9, 0xf8, 0x05, 0x46, 0x48, 0xb9, 0x01, 0x46, + 0x30, 0x22, 0x07, 0xf1, 0xa8, 0x00, 0xaa, 0x46, 0x00, 0xf0, 0xea, 0xfe, + 0x23, 0x6a, 0x5b, 0x68, 0x3b, 0x60, 0xa0, 0x6d, 0xba, 0xf1, 0x00, 0x0f, + 0x18, 0xbf, 0x55, 0x46, 0xe8, 0xf7, 0x66, 0xff, 0xe0, 0x6c, 0xe8, 0xf7, + 0x63, 0xff, 0x20, 0x6a, 0xe8, 0xf7, 0x60, 0xff, 0x4d, 0xb1, 0x33, 0x78, + 0x00, 0x2b, 0x3f, 0xf4, 0x6e, 0xab, 0x29, 0x46, 0x0a, 0x48, 0xf1, 0xf7, + 0xa3, 0xfd, 0xff, 0xf7, 0x68, 0xbb, 0xfb, 0xf7, 0xa3, 0xff, 0xa4, 0x68, + 0x3b, 0x68, 0x23, 0x44, 0x1c, 0x46, 0x33, 0x78, 0x1b, 0xb1, 0x21, 0x46, + 0x04, 0x48, 0xf1, 0xf7, 0x95, 0xfd, 0x20, 0x46, 0xf4, 0xf7, 0xb0, 0xf8, + 0x35, 0xe8, 0x01, 0x08, 0x33, 0xe9, 0x01, 0x08, 0x62, 0xe9, 0x01, 0x08, + 0x1f, 0xb5, 0x13, 0x4b, 0x6c, 0x46, 0x0b, 0x25, 0x0f, 0xcb, 0x84, 0xe8, + 0x0f, 0x00, 0x20, 0x46, 0x1c, 0x24, 0xfc, 0xf7, 0xcb, 0xff, 0x0f, 0x4b, + 0x18, 0x60, 0x0f, 0x48, 0x0f, 0x4b, 0x45, 0x60, 0x03, 0x60, 0x0f, 0x4b, + 0xc4, 0x60, 0x83, 0x60, 0xfc, 0xf7, 0xc0, 0xff, 0x0d, 0x4b, 0x18, 0x60, + 0x0d, 0x48, 0x0e, 0x4b, 0xc4, 0x60, 0xc0, 0xe9, 0x00, 0x35, 0x0d, 0x4b, + 0x83, 0x60, 0xfc, 0xf7, 0xb5, 0xff, 0x0c, 0x4b, 0x18, 0x60, 0x00, 0xf0, + 0x91, 0xfc, 0xfe, 0xf7, 0xb3, 0xfe, 0x00, 0xbf, 0x4c, 0xea, 0x01, 0x08, + 0x38, 0x28, 0x02, 0x24, 0xc4, 0x43, 0x02, 0x24, 0x95, 0xe9, 0x01, 0x08, + 0xd4, 0x43, 0x02, 0x24, 0x30, 0x28, 0x02, 0x24, 0x84, 0x3f, 0x02, 0x24, + 0xa2, 0xe9, 0x01, 0x08, 0x94, 0x3f, 0x02, 0x24, 0xf0, 0x27, 0x02, 0x24, + 0x01, 0x4b, 0x18, 0x68, 0x70, 0x47, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, + 0x70, 0xb5, 0x05, 0x46, 0x0c, 0x46, 0x11, 0xb9, 0x00, 0x26, 0x30, 0x46, + 0x70, 0xbd, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0x00, 0xf0, 0x94, 0xf9, + 0x2c, 0x4b, 0x9c, 0x42, 0x14, 0xd1, 0x6c, 0x68, 0x63, 0x6e, 0xd8, 0x07, + 0x05, 0xd4, 0xa3, 0x89, 0x99, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, + 0x8a, 0xfd, 0xb4, 0xf9, 0x0c, 0x30, 0x8b, 0xb9, 0x66, 0x6e, 0x16, 0xf0, + 0x01, 0x06, 0xe3, 0xd1, 0xa0, 0x6d, 0x00, 0xf0, 0x82, 0xfd, 0xe0, 0xe7, + 0x21, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, 0xe6, 0xe7, 0x20, 0x4b, + 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xe1, 0xe7, 0x21, 0x46, 0x28, 0x46, + 0x00, 0xf0, 0x42, 0xf8, 0x23, 0x6b, 0x06, 0x46, 0x33, 0xb1, 0x21, 0x6a, + 0x28, 0x46, 0x98, 0x47, 0x00, 0x28, 0xb8, 0xbf, 0x4f, 0xf0, 0xff, 0x36, + 0xa3, 0x89, 0x1a, 0x06, 0x03, 0xd5, 0x21, 0x69, 0x28, 0x46, 0xf4, 0xf7, + 0x81, 0xf8, 0x61, 0x6b, 0x41, 0xb1, 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, + 0x02, 0xd0, 0x28, 0x46, 0xf4, 0xf7, 0x78, 0xf8, 0x00, 0x23, 0x63, 0x63, + 0xa1, 0x6c, 0x21, 0xb1, 0x28, 0x46, 0xf4, 0xf7, 0x71, 0xf8, 0x00, 0x23, + 0xa3, 0x64, 0x00, 0xf0, 0x31, 0xf9, 0x00, 0x23, 0xa3, 0x81, 0x63, 0x6e, + 0xdb, 0x07, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x46, 0xfd, 0xa0, 0x6d, + 0x00, 0xf0, 0x3f, 0xfd, 0x00, 0xf0, 0x2a, 0xf9, 0x9f, 0xe7, 0x00, 0xbf, + 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, + 0x02, 0x4b, 0x01, 0x46, 0x18, 0x68, 0xff, 0xf7, 0x8f, 0xbf, 0x00, 0xbf, + 0x10, 0x03, 0x00, 0x24, 0x8a, 0x89, 0x2d, 0xe9, 0xf0, 0x41, 0x05, 0x46, + 0x10, 0x07, 0x0c, 0x46, 0x58, 0xd4, 0x4b, 0x68, 0x00, 0x2b, 0x05, 0xdc, + 0x0b, 0x6c, 0x00, 0x2b, 0x02, 0xdc, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x81, + 0xe6, 0x6a, 0x00, 0x2e, 0xf9, 0xd0, 0x00, 0x23, 0x12, 0xf4, 0x80, 0x52, + 0x2f, 0x68, 0x2b, 0x60, 0x32, 0xd0, 0x60, 0x6d, 0xa3, 0x89, 0x5a, 0x07, + 0x05, 0xd5, 0x63, 0x68, 0xc0, 0x1a, 0x63, 0x6b, 0x0b, 0xb1, 0x23, 0x6c, + 0xc0, 0x1a, 0x00, 0x23, 0x02, 0x46, 0xe6, 0x6a, 0x21, 0x6a, 0x28, 0x46, + 0xb0, 0x47, 0x43, 0x1c, 0xa3, 0x89, 0x06, 0xd1, 0x29, 0x68, 0x1d, 0x29, + 0x2c, 0xd8, 0x2a, 0x4a, 0xca, 0x40, 0xd6, 0x07, 0x28, 0xd5, 0x00, 0x22, + 0x62, 0x60, 0xd9, 0x04, 0x22, 0x69, 0x22, 0x60, 0x04, 0xd5, 0x42, 0x1c, + 0x01, 0xd1, 0x2b, 0x68, 0x03, 0xb9, 0x60, 0x65, 0x61, 0x6b, 0x2f, 0x60, + 0x00, 0x29, 0xca, 0xd0, 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, 0x02, 0xd0, + 0x28, 0x46, 0xf4, 0xf7, 0x07, 0xf8, 0x00, 0x20, 0x60, 0x63, 0xc1, 0xe7, + 0x21, 0x6a, 0x01, 0x23, 0x28, 0x46, 0xb0, 0x47, 0x41, 0x1c, 0xc7, 0xd1, + 0x2b, 0x68, 0x00, 0x2b, 0xc4, 0xd0, 0x1d, 0x2b, 0x01, 0xd0, 0x16, 0x2b, + 0x01, 0xd1, 0x2f, 0x60, 0xb1, 0xe7, 0xa3, 0x89, 0x43, 0xf0, 0x40, 0x03, + 0xa3, 0x81, 0xad, 0xe7, 0x0f, 0x69, 0x00, 0x2f, 0xa9, 0xd0, 0x93, 0x07, + 0x0e, 0x68, 0x08, 0xbf, 0x4b, 0x69, 0x0f, 0x60, 0x18, 0xbf, 0x00, 0x23, + 0xa6, 0xeb, 0x07, 0x08, 0x8b, 0x60, 0xb8, 0xf1, 0x00, 0x0f, 0x9c, 0xdd, + 0x21, 0x6a, 0xa6, 0x6a, 0x43, 0x46, 0x3a, 0x46, 0x28, 0x46, 0xb0, 0x47, + 0x00, 0x28, 0x06, 0xdc, 0xa3, 0x89, 0x43, 0xf0, 0x40, 0x03, 0xa3, 0x81, + 0x4f, 0xf0, 0xff, 0x30, 0x8e, 0xe7, 0x07, 0x44, 0xa8, 0xeb, 0x00, 0x08, + 0xe9, 0xe7, 0x00, 0xbf, 0x01, 0x00, 0x40, 0x20, 0x38, 0xb5, 0x0b, 0x69, + 0x05, 0x46, 0x0c, 0x46, 0x13, 0xb9, 0x00, 0x25, 0x28, 0x46, 0x38, 0xbd, + 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0x00, 0xf0, 0x99, 0xf8, 0x14, 0x4b, + 0x9c, 0x42, 0x1b, 0xd1, 0x6c, 0x68, 0xb4, 0xf9, 0x0c, 0x30, 0x00, 0x2b, + 0xef, 0xd0, 0x62, 0x6e, 0xd0, 0x07, 0x04, 0xd4, 0x99, 0x05, 0x02, 0xd4, + 0xa0, 0x6d, 0x00, 0xf0, 0x8c, 0xfc, 0x28, 0x46, 0x21, 0x46, 0xff, 0xf7, + 0x59, 0xff, 0x63, 0x6e, 0xda, 0x07, 0x05, 0x46, 0xe0, 0xd4, 0xa3, 0x89, + 0x9b, 0x05, 0xdd, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x80, 0xfc, 0xd9, 0xe7, + 0x05, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, 0xdf, 0xe7, 0x04, 0x4b, + 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xda, 0xe7, 0x2c, 0xf0, 0x01, 0x08, + 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, 0x01, 0x46, 0x20, 0xb9, + 0x04, 0x4b, 0x05, 0x49, 0x18, 0x68, 0x00, 0xf0, 0x18, 0xbb, 0x04, 0x4b, + 0x18, 0x68, 0xff, 0xf7, 0xb9, 0xbf, 0x00, 0xbf, 0x6c, 0xf0, 0x01, 0x08, + 0x91, 0xa9, 0x01, 0x08, 0x10, 0x03, 0x00, 0x24, 0x00, 0x23, 0x10, 0xb5, + 0x04, 0x46, 0xc0, 0xe9, 0x00, 0x33, 0xc0, 0xe9, 0x04, 0x33, 0x83, 0x60, + 0x81, 0x81, 0x43, 0x66, 0xc2, 0x81, 0x83, 0x61, 0x19, 0x46, 0x08, 0x22, + 0x5c, 0x30, 0x00, 0xf0, 0x1f, 0xfd, 0x05, 0x4b, 0x63, 0x62, 0x05, 0x4b, + 0xa3, 0x62, 0x05, 0x4b, 0xe3, 0x62, 0x05, 0x4b, 0x24, 0x62, 0x23, 0x63, + 0x10, 0xbd, 0x00, 0xbf, 0xc9, 0xb7, 0x01, 0x08, 0xef, 0xb7, 0x01, 0x08, + 0x27, 0xb8, 0x01, 0x08, 0x4b, 0xb8, 0x01, 0x08, 0x01, 0x49, 0x00, 0xf0, + 0xe6, 0xba, 0x00, 0xbf, 0x91, 0xa9, 0x01, 0x08, 0x70, 0xb5, 0x4a, 0x1e, + 0x68, 0x25, 0x55, 0x43, 0x0e, 0x46, 0x05, 0xf1, 0x74, 0x01, 0xf3, 0xf7, + 0x4d, 0xff, 0x04, 0x46, 0x40, 0xb1, 0x00, 0x21, 0xc0, 0xe9, 0x00, 0x16, + 0x0c, 0x30, 0xa0, 0x60, 0x05, 0xf1, 0x68, 0x02, 0x00, 0xf0, 0xf2, 0xfc, + 0x20, 0x46, 0x70, 0xbd, 0x01, 0x48, 0x00, 0xf0, 0x18, 0xbc, 0x00, 0xbf, + 0xd0, 0xa5, 0x02, 0x24, 0x01, 0x48, 0x00, 0xf0, 0x14, 0xbc, 0x00, 0xbf, + 0xd0, 0xa5, 0x02, 0x24, 0x01, 0x48, 0x00, 0xf0, 0x0c, 0xbc, 0x00, 0xbf, + 0xcf, 0xa5, 0x02, 0x24, 0x01, 0x48, 0x00, 0xf0, 0x08, 0xbc, 0x00, 0xbf, + 0xcf, 0xa5, 0x02, 0x24, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xf0, 0xff, + 0xa3, 0x69, 0x1b, 0xb1, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xf0, 0xbf, + 0xc4, 0xe9, 0x12, 0x33, 0x23, 0x65, 0x13, 0x4b, 0x13, 0x4a, 0x1b, 0x68, + 0xa2, 0x62, 0xa3, 0x42, 0x04, 0xbf, 0x01, 0x23, 0xa3, 0x61, 0x20, 0x46, + 0x00, 0xf0, 0x20, 0xf8, 0x60, 0x60, 0x20, 0x46, 0x00, 0xf0, 0x1c, 0xf8, + 0xa0, 0x60, 0x20, 0x46, 0x00, 0xf0, 0x18, 0xf8, 0x00, 0x22, 0xe0, 0x60, + 0x04, 0x21, 0x60, 0x68, 0xff, 0xf7, 0x82, 0xff, 0xa0, 0x68, 0x01, 0x22, + 0x09, 0x21, 0xff, 0xf7, 0x7d, 0xff, 0xe0, 0x68, 0x02, 0x22, 0x12, 0x21, + 0xff, 0xf7, 0x78, 0xff, 0x01, 0x23, 0xa3, 0x61, 0xd2, 0xe7, 0x00, 0xbf, + 0x6c, 0xf0, 0x01, 0x08, 0x75, 0xaa, 0x01, 0x08, 0xf8, 0xb5, 0x07, 0x46, + 0xff, 0xf7, 0xac, 0xff, 0x1e, 0x4b, 0x1e, 0x68, 0xb3, 0x69, 0x13, 0xb9, + 0x30, 0x46, 0xff, 0xf7, 0xbd, 0xff, 0x48, 0x36, 0xd6, 0xe9, 0x01, 0x34, + 0x01, 0x3b, 0x03, 0xd5, 0x33, 0x68, 0x0b, 0xb3, 0x36, 0x68, 0xf7, 0xe7, + 0xb4, 0xf9, 0x0c, 0x50, 0xd5, 0xb9, 0x16, 0x4b, 0xe3, 0x60, 0x04, 0xf1, + 0x58, 0x00, 0x65, 0x66, 0x00, 0xf0, 0xaa, 0xfb, 0xff, 0xf7, 0x96, 0xff, + 0xc4, 0xe9, 0x01, 0x55, 0xc4, 0xe9, 0x04, 0x55, 0x25, 0x60, 0xa5, 0x61, + 0x08, 0x22, 0x29, 0x46, 0x04, 0xf1, 0x5c, 0x00, 0x00, 0xf0, 0x74, 0xfc, + 0xc4, 0xe9, 0x0d, 0x55, 0xc4, 0xe9, 0x12, 0x55, 0x20, 0x46, 0xf8, 0xbd, + 0x68, 0x34, 0xd9, 0xe7, 0x04, 0x21, 0x38, 0x46, 0xff, 0xf7, 0x62, 0xff, + 0x04, 0x46, 0x30, 0x60, 0x00, 0x28, 0xd5, 0xd1, 0xff, 0xf7, 0x78, 0xff, + 0x0c, 0x23, 0x3b, 0x60, 0xee, 0xe7, 0x00, 0xbf, 0x6c, 0xf0, 0x01, 0x08, + 0x01, 0x00, 0xff, 0xff, 0xf7, 0xb5, 0x0f, 0x46, 0x11, 0x46, 0x01, 0xaa, + 0x05, 0x46, 0x01, 0xf0, 0x8f, 0xf8, 0x06, 0x46, 0x18, 0xb9, 0x00, 0x24, + 0x20, 0x46, 0x03, 0xb0, 0xf0, 0xbd, 0x28, 0x46, 0xff, 0xf7, 0xaa, 0xff, + 0x04, 0x46, 0x00, 0x28, 0xf5, 0xd0, 0x39, 0x46, 0x01, 0x9a, 0x4f, 0xf4, + 0xdb, 0x73, 0x28, 0x46, 0x00, 0xf0, 0x28, 0xfd, 0x07, 0x1e, 0x09, 0xda, + 0x00, 0x25, 0xff, 0xf7, 0x4b, 0xff, 0xa0, 0x6d, 0xa5, 0x81, 0x00, 0xf0, + 0x60, 0xfb, 0xff, 0xf7, 0x4b, 0xff, 0xe2, 0xe7, 0x63, 0x6e, 0xdb, 0x07, + 0x05, 0xd4, 0xa3, 0x89, 0x98, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, + 0x56, 0xfb, 0x0e, 0x4b, 0x63, 0x62, 0x0e, 0x4b, 0xa3, 0x62, 0x0e, 0x4b, + 0xe3, 0x62, 0xf1, 0x05, 0x0d, 0x4b, 0xe7, 0x81, 0xa6, 0x81, 0x24, 0x62, + 0x23, 0x63, 0x05, 0xd5, 0x02, 0x23, 0x00, 0x22, 0x21, 0x46, 0x28, 0x46, + 0x00, 0xf0, 0x9c, 0xf8, 0x63, 0x6e, 0xda, 0x07, 0xc4, 0xd4, 0xa3, 0x89, + 0x9b, 0x05, 0xc1, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x3c, 0xfb, 0xbd, 0xe7, + 0xc9, 0xb7, 0x01, 0x08, 0xef, 0xb7, 0x01, 0x08, 0x27, 0xb8, 0x01, 0x08, + 0x4b, 0xb8, 0x01, 0x08, 0x02, 0x4b, 0x0a, 0x46, 0x01, 0x46, 0x18, 0x68, + 0xff, 0xf7, 0xa6, 0xbf, 0x10, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf7, 0x4f, + 0x1f, 0x46, 0x13, 0x46, 0x7b, 0x43, 0x0c, 0x9c, 0x06, 0x46, 0x8a, 0x46, + 0x91, 0x46, 0x9b, 0x46, 0x5f, 0xd0, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, + 0xff, 0xf7, 0x16, 0xff, 0x2e, 0x4b, 0x9c, 0x42, 0x28, 0xd1, 0x74, 0x68, + 0x63, 0x6e, 0xdb, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x9d, 0x05, 0x02, 0xd4, + 0xa0, 0x6d, 0x00, 0xf0, 0x0c, 0xfb, 0x63, 0x68, 0x00, 0x2b, 0x01, 0xda, + 0x00, 0x23, 0x63, 0x60, 0xd8, 0x46, 0xd4, 0xe9, 0x00, 0x15, 0x45, 0x45, + 0x1e, 0xd3, 0x42, 0x46, 0x50, 0x46, 0x00, 0xf0, 0xc5, 0xfb, 0x60, 0x68, + 0x21, 0x68, 0x63, 0x6e, 0xa0, 0xeb, 0x08, 0x00, 0x41, 0x44, 0xda, 0x07, + 0x60, 0x60, 0x21, 0x60, 0x2f, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x2c, 0xd4, + 0xa0, 0x6d, 0x00, 0xf0, 0xf0, 0xfa, 0x28, 0xe0, 0x19, 0x4b, 0x9c, 0x42, + 0x01, 0xd1, 0xb4, 0x68, 0xd2, 0xe7, 0x18, 0x4b, 0x9c, 0x42, 0x08, 0xbf, + 0xf4, 0x68, 0xcd, 0xe7, 0x2a, 0x46, 0x50, 0x46, 0x00, 0xf0, 0xa6, 0xfb, + 0x23, 0x68, 0x2b, 0x44, 0x23, 0x60, 0x21, 0x46, 0xa8, 0xeb, 0x05, 0x03, + 0x30, 0x46, 0x01, 0x93, 0x00, 0xf0, 0xae, 0xfc, 0xaa, 0x44, 0x01, 0x9b, + 0x88, 0xb1, 0x63, 0x6e, 0xd8, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x99, 0x05, + 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0xcb, 0xfa, 0x5d, 0x44, 0xa5, 0xeb, + 0x08, 0x03, 0xb3, 0xfb, 0xf9, 0xf7, 0x38, 0x46, 0x03, 0xb0, 0xbd, 0xe8, + 0xf0, 0x8f, 0x98, 0x46, 0xb7, 0xe7, 0x1f, 0x46, 0xf7, 0xe7, 0x00, 0xbf, + 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, + 0x07, 0xb5, 0x00, 0x93, 0x13, 0x46, 0x0a, 0x46, 0x01, 0x46, 0x03, 0x48, + 0x00, 0x68, 0xff, 0xf7, 0x83, 0xff, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, + 0x10, 0x03, 0x00, 0x24, 0x00, 0xf0, 0x0a, 0xb8, 0x13, 0x46, 0x0a, 0x46, + 0x01, 0x46, 0x02, 0x48, 0x00, 0x68, 0x00, 0xf0, 0x03, 0xb8, 0x00, 0xbf, + 0x10, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x41, 0x0c, 0x46, 0x17, 0x46, + 0x1d, 0x46, 0x06, 0x46, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xff, 0xf7, + 0x8d, 0xfe, 0x51, 0x4b, 0x9c, 0x42, 0x22, 0xd1, 0x74, 0x68, 0x63, 0x6e, + 0xd9, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x9a, 0x05, 0x02, 0xd4, 0xa0, 0x6d, + 0x00, 0xf0, 0x83, 0xfa, 0xa3, 0x89, 0x03, 0xf4, 0x84, 0x73, 0xb3, 0xf5, + 0x84, 0x7f, 0x03, 0xd1, 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xd0, 0xfd, + 0xd4, 0xf8, 0x2c, 0x80, 0xb8, 0xf1, 0x00, 0x0f, 0x13, 0xd1, 0x1d, 0x23, + 0x33, 0x60, 0x63, 0x6e, 0xd9, 0x07, 0x78, 0xd5, 0x4f, 0xf0, 0xff, 0x35, + 0x28, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x3f, 0x4b, 0x9c, 0x42, 0x01, 0xd1, + 0xb4, 0x68, 0xd8, 0xe7, 0x3d, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xf4, 0x68, + 0xd3, 0xe7, 0x01, 0x2d, 0x36, 0xd0, 0x35, 0xf0, 0x02, 0x03, 0x62, 0xd1, + 0x23, 0x69, 0x1b, 0xb9, 0x21, 0x46, 0x30, 0x46, 0x00, 0xf0, 0x7c, 0xfa, + 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xa8, 0xfd, 0x00, 0x28, 0xdc, 0xd1, + 0x21, 0x6a, 0x2b, 0x46, 0x3a, 0x46, 0x30, 0x46, 0xc0, 0x47, 0x01, 0x30, + 0xd5, 0xd0, 0x61, 0x6b, 0x41, 0xb1, 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, + 0x02, 0xd0, 0x30, 0x46, 0xf3, 0xf7, 0x60, 0xfd, 0x00, 0x23, 0x63, 0x63, + 0x23, 0x69, 0x23, 0x60, 0xa3, 0x89, 0x00, 0x26, 0x23, 0xf4, 0x02, 0x63, + 0x66, 0x60, 0xa3, 0x81, 0x08, 0x22, 0x31, 0x46, 0x04, 0xf1, 0x5c, 0x00, + 0x00, 0xf0, 0x04, 0xfb, 0x65, 0x6e, 0x15, 0xf0, 0x01, 0x05, 0x3b, 0xd1, + 0xa3, 0x89, 0x9b, 0x05, 0xba, 0xd4, 0x21, 0xe0, 0x21, 0x46, 0x30, 0x46, + 0xff, 0xf7, 0x7a, 0xfd, 0xa2, 0x89, 0x12, 0xf4, 0x80, 0x52, 0x0c, 0xd0, + 0x65, 0x6d, 0xa3, 0x89, 0x5a, 0x07, 0x19, 0xd5, 0x63, 0x68, 0xed, 0x1a, + 0x63, 0x6b, 0x0b, 0xb1, 0x23, 0x6c, 0xed, 0x1a, 0x2f, 0x44, 0x00, 0x25, + 0xb6, 0xe7, 0x2b, 0x46, 0x21, 0x6a, 0x30, 0x46, 0xc0, 0x47, 0x43, 0x1c, + 0x05, 0x46, 0xec, 0xd1, 0x63, 0x6e, 0xd8, 0x07, 0x98, 0xd4, 0xa3, 0x89, + 0x99, 0x05, 0x95, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x04, 0xfa, 0x93, 0xe7, + 0x18, 0x07, 0xe9, 0xd5, 0x23, 0x68, 0x22, 0x69, 0x00, 0x2b, 0xe5, 0xd0, + 0x9b, 0x1a, 0x1d, 0x44, 0xe2, 0xe7, 0x16, 0x23, 0x82, 0xe7, 0xa3, 0x89, + 0x9a, 0x05, 0x83, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0xf2, 0xf9, 0x7f, 0xe7, + 0x35, 0x46, 0x7f, 0xe7, 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, + 0x0c, 0xf0, 0x01, 0x08, 0x02, 0x4b, 0x01, 0x46, 0x18, 0x68, 0x00, 0xf0, + 0x03, 0xb8, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, 0x70, 0xb5, 0x0c, 0x46, + 0x05, 0x46, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xff, 0xf7, 0xd4, 0xfd, + 0x32, 0x4b, 0x9c, 0x42, 0x14, 0xd1, 0x6c, 0x68, 0x63, 0x6e, 0xda, 0x07, + 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, + 0xca, 0xf9, 0xe6, 0x6a, 0xce, 0xb9, 0x1d, 0x23, 0x2b, 0x60, 0x63, 0x6e, + 0xde, 0x07, 0x0d, 0xd5, 0x4f, 0xf0, 0xff, 0x35, 0x28, 0x46, 0x70, 0xbd, + 0x27, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, 0xe6, 0xe7, 0x26, 0x4b, + 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xe1, 0xe7, 0xa3, 0x89, 0x9d, 0x05, + 0xee, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0xb1, 0xf9, 0xea, 0xe7, 0xa2, 0x89, + 0x02, 0xf0, 0x0c, 0x03, 0x08, 0x2b, 0x19, 0xd1, 0x23, 0x68, 0xbb, 0xb1, + 0x21, 0x69, 0x5b, 0x1a, 0x00, 0x2b, 0x13, 0xdd, 0xd0, 0x05, 0x11, 0xd5, + 0x02, 0x23, 0x00, 0x22, 0x21, 0x6a, 0x28, 0x46, 0xb0, 0x47, 0x41, 0x1c, + 0x05, 0x46, 0x0d, 0xd1, 0x63, 0x6e, 0xda, 0x07, 0xd2, 0xd4, 0xa3, 0x89, + 0x9b, 0x05, 0xcf, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x92, 0xf9, 0xcd, 0xe7, + 0x12, 0xf4, 0x80, 0x52, 0x0f, 0xd0, 0x65, 0x6d, 0xa2, 0x89, 0x56, 0x07, + 0x0d, 0xd5, 0x63, 0x68, 0xed, 0x1a, 0x63, 0x6b, 0x0b, 0xb1, 0x23, 0x6c, + 0xed, 0x1a, 0x63, 0x6e, 0xd9, 0x07, 0xbd, 0xd4, 0x93, 0x05, 0xbb, 0xd4, + 0xe8, 0xe7, 0x01, 0x23, 0xda, 0xe7, 0x10, 0x07, 0xf5, 0xd5, 0x23, 0x68, + 0x00, 0x2b, 0xf2, 0xd0, 0x21, 0x69, 0x5b, 0x1a, 0x1d, 0x44, 0xee, 0xe7, + 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, + 0x2d, 0xe9, 0xf0, 0x41, 0x0f, 0x46, 0x00, 0xf1, 0x48, 0x04, 0x00, 0x26, + 0xd4, 0xe9, 0x01, 0x85, 0xb8, 0xf1, 0x01, 0x08, 0x05, 0xd5, 0x24, 0x68, + 0x00, 0x2c, 0xf7, 0xd1, 0x30, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0xab, 0x89, + 0x01, 0x2b, 0x06, 0xd9, 0xb5, 0xf9, 0x0e, 0x30, 0x01, 0x33, 0x02, 0xd0, + 0x28, 0x46, 0xb8, 0x47, 0x06, 0x43, 0x68, 0x35, 0xea, 0xe7, 0x2d, 0xe9, + 0xf8, 0x43, 0x06, 0x46, 0x88, 0x46, 0x00, 0xf1, 0x48, 0x04, 0x00, 0x27, + 0xd4, 0xe9, 0x01, 0x95, 0xb9, 0xf1, 0x01, 0x09, 0x05, 0xd5, 0x24, 0x68, + 0x00, 0x2c, 0xf7, 0xd1, 0x38, 0x46, 0xbd, 0xe8, 0xf8, 0x83, 0xab, 0x89, + 0x01, 0x2b, 0x07, 0xd9, 0xb5, 0xf9, 0x0e, 0x30, 0x01, 0x33, 0x03, 0xd0, + 0x29, 0x46, 0x30, 0x46, 0xc0, 0x47, 0x07, 0x43, 0x68, 0x35, 0xe9, 0xe7, + 0x70, 0xb5, 0x0d, 0x4d, 0x0d, 0x4c, 0x64, 0x1b, 0xa4, 0x10, 0x00, 0x26, + 0xa6, 0x42, 0x09, 0xd1, 0x0b, 0x4d, 0x0c, 0x4c, 0x02, 0xf0, 0x00, 0xf9, + 0x64, 0x1b, 0xa4, 0x10, 0x00, 0x26, 0xa6, 0x42, 0x05, 0xd1, 0x70, 0xbd, + 0x55, 0xf8, 0x04, 0x3b, 0x98, 0x47, 0x01, 0x36, 0xee, 0xe7, 0x55, 0xf8, + 0x04, 0x3b, 0x98, 0x47, 0x01, 0x36, 0xf2, 0xe7, 0xe0, 0x03, 0x00, 0x24, + 0xe0, 0x03, 0x00, 0x24, 0xe0, 0x03, 0x00, 0x24, 0xe8, 0x03, 0x00, 0x24, + 0x38, 0xb5, 0x07, 0x4b, 0x1d, 0x68, 0xeb, 0x6b, 0x04, 0x46, 0x1b, 0xb9, + 0x24, 0x20, 0x00, 0xf0, 0x69, 0xf9, 0xe8, 0x63, 0xe9, 0x6b, 0x20, 0x46, + 0xbd, 0xe8, 0x38, 0x40, 0x00, 0xf0, 0x02, 0xb8, 0x10, 0x03, 0x00, 0x24, + 0x2d, 0xe9, 0xf3, 0x41, 0x07, 0x46, 0x01, 0x91, 0x00, 0xf0, 0x8e, 0xfe, + 0x01, 0x99, 0x80, 0x46, 0x38, 0x46, 0x00, 0xf0, 0x8d, 0xfe, 0x43, 0x69, + 0x9a, 0x07, 0x04, 0x46, 0x03, 0xf2, 0x6c, 0x76, 0x05, 0xd1, 0x64, 0x22, + 0x96, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x63, 0x7b, 0xbb, 0x4f, 0xf4, + 0xc8, 0x73, 0x96, 0xfb, 0xf3, 0xf5, 0x03, 0xfb, 0x15, 0x65, 0xb5, 0xfa, + 0x85, 0xf5, 0x6d, 0x09, 0x68, 0x4b, 0x30, 0x22, 0x02, 0xfb, 0x05, 0x35, + 0x00, 0xf0, 0x34, 0xfc, 0x00, 0xf0, 0x3e, 0xfc, 0x65, 0x4b, 0x1b, 0x68, + 0x53, 0xb3, 0xd8, 0xf8, 0x04, 0x30, 0xb3, 0x42, 0x19, 0xd1, 0xd8, 0xf8, + 0x00, 0x10, 0xd7, 0xe9, 0x00, 0x67, 0xd8, 0xe9, 0x08, 0x23, 0xd1, 0xb9, + 0x96, 0x42, 0x77, 0xeb, 0x03, 0x03, 0x23, 0xda, 0xd8, 0xe9, 0x12, 0x23, + 0x96, 0x42, 0x77, 0xeb, 0x03, 0x03, 0xb4, 0xbf, 0x01, 0x23, 0x00, 0x23, + 0x23, 0x62, 0x1b, 0xdb, 0xd8, 0xf8, 0x28, 0x10, 0x1a, 0xe0, 0x01, 0x25, + 0xd6, 0xe7, 0x30, 0x46, 0x00, 0xf0, 0x66, 0xfb, 0x00, 0x28, 0xe0, 0xd1, + 0x4f, 0xf0, 0xff, 0x33, 0x04, 0xe0, 0x96, 0x42, 0x77, 0xeb, 0x03, 0x03, + 0x02, 0xda, 0x00, 0x23, 0x23, 0x62, 0xeb, 0xe7, 0xd8, 0xe9, 0x12, 0x23, + 0x96, 0x42, 0x77, 0xeb, 0x03, 0x03, 0xf6, 0xda, 0x01, 0x23, 0x23, 0x62, + 0xd8, 0xf8, 0x50, 0x10, 0x4f, 0xf4, 0x61, 0x63, 0x3c, 0x20, 0x91, 0xfb, + 0xf3, 0xf6, 0x03, 0xfb, 0x16, 0x13, 0x61, 0x68, 0x93, 0xfb, 0xf0, 0xf2, + 0x00, 0xfb, 0x12, 0x30, 0x23, 0x68, 0x89, 0x1a, 0xa2, 0x68, 0x61, 0x60, + 0x1b, 0x1a, 0x92, 0x1b, 0x3b, 0x2b, 0x23, 0x60, 0xa2, 0x60, 0x35, 0xdd, + 0x01, 0x31, 0x61, 0x60, 0x3c, 0x3b, 0x23, 0x60, 0x63, 0x68, 0x3b, 0x2b, + 0x34, 0xdd, 0x01, 0x32, 0xa2, 0x60, 0x3c, 0x3b, 0x63, 0x60, 0xa3, 0x68, + 0x17, 0x2b, 0x33, 0xdd, 0xe2, 0x69, 0x01, 0x32, 0xe2, 0x61, 0xa2, 0x69, + 0x01, 0x32, 0x06, 0x2a, 0xc8, 0xbf, 0x00, 0x22, 0xa2, 0x61, 0xe2, 0x68, + 0x18, 0x3b, 0x01, 0x32, 0xa3, 0x60, 0x23, 0x69, 0xe2, 0x60, 0x55, 0xf8, + 0x23, 0x10, 0x8a, 0x42, 0x0e, 0xdd, 0x0b, 0x2b, 0xa2, 0xeb, 0x01, 0x02, + 0xe2, 0x60, 0x03, 0xf1, 0x01, 0x02, 0x09, 0xbf, 0x63, 0x69, 0x22, 0x61, + 0x00, 0x22, 0x01, 0x33, 0x02, 0xbf, 0x22, 0x61, 0x63, 0x61, 0xe2, 0x61, + 0x00, 0xf0, 0xb6, 0xfb, 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, + 0x00, 0x2b, 0xcb, 0xda, 0x01, 0x39, 0x61, 0x60, 0x3c, 0x33, 0xc6, 0xe7, + 0x00, 0x2b, 0xcc, 0xda, 0x01, 0x3a, 0xa2, 0x60, 0x3c, 0x33, 0xc7, 0xe7, + 0x00, 0x2b, 0xeb, 0xda, 0xe2, 0x69, 0x01, 0x3a, 0xe2, 0x61, 0xa2, 0x69, + 0x01, 0x3a, 0x48, 0xbf, 0x06, 0x22, 0xa2, 0x61, 0xe2, 0x68, 0x18, 0x33, + 0x01, 0x3a, 0xe2, 0x60, 0xa3, 0x60, 0x00, 0x2a, 0xdc, 0xd1, 0x23, 0x69, + 0x01, 0x3b, 0x05, 0xd4, 0x23, 0x61, 0x23, 0x69, 0x55, 0xf8, 0x23, 0x30, + 0xe3, 0x60, 0xd3, 0xe7, 0x0b, 0x23, 0x23, 0x61, 0x63, 0x69, 0x5a, 0x1e, + 0x62, 0x61, 0x03, 0xf2, 0x6b, 0x72, 0x93, 0x07, 0x05, 0xd1, 0x64, 0x21, + 0x92, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x23, 0x63, 0xb9, 0x4f, 0xf4, + 0xc8, 0x71, 0x92, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x23, 0xb3, 0xfa, + 0x83, 0xf3, 0x5b, 0x09, 0x03, 0xf5, 0xb6, 0x73, 0xe3, 0x61, 0xde, 0xe7, + 0x01, 0x23, 0xf9, 0xe7, 0x70, 0xf0, 0x01, 0x08, 0xc0, 0xa5, 0x02, 0x24, + 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, + 0x70, 0xb5, 0x0e, 0x46, 0xb1, 0xf9, 0x0e, 0x10, 0x00, 0x29, 0x96, 0xb0, + 0x14, 0x46, 0x1d, 0x46, 0x07, 0xda, 0x00, 0x23, 0x2b, 0x60, 0xb3, 0x89, + 0x1a, 0x06, 0x10, 0xd4, 0x4f, 0xf4, 0x80, 0x63, 0x0e, 0xe0, 0x6a, 0x46, + 0x00, 0xf0, 0x30, 0xfd, 0x00, 0x28, 0xf2, 0xdb, 0x01, 0x9a, 0x02, 0xf4, + 0x70, 0x42, 0xa2, 0xf5, 0x00, 0x53, 0x5a, 0x42, 0x5a, 0x41, 0x2a, 0x60, + 0xee, 0xe7, 0x40, 0x23, 0x00, 0x20, 0x23, 0x60, 0x16, 0xb0, 0x70, 0xbd, + 0x8b, 0x89, 0x73, 0xb5, 0x9d, 0x07, 0x06, 0x46, 0x0c, 0x46, 0x07, 0xd5, + 0x04, 0xf1, 0x47, 0x03, 0x23, 0x60, 0x23, 0x61, 0x01, 0x23, 0x63, 0x61, + 0x02, 0xb0, 0x70, 0xbd, 0x01, 0xab, 0x6a, 0x46, 0xff, 0xf7, 0xca, 0xff, + 0x00, 0x99, 0x05, 0x46, 0x30, 0x46, 0xf3, 0xf7, 0xe7, 0xfa, 0x48, 0xb9, + 0xb4, 0xf9, 0x0c, 0x30, 0x9a, 0x05, 0xef, 0xd4, 0x23, 0xf0, 0x03, 0x03, + 0x43, 0xf0, 0x02, 0x03, 0xa3, 0x81, 0xe3, 0xe7, 0x0d, 0x4b, 0xb3, 0x62, + 0xa3, 0x89, 0x20, 0x60, 0x43, 0xf0, 0x80, 0x03, 0xa3, 0x81, 0x00, 0x9b, + 0x63, 0x61, 0x01, 0x9b, 0x20, 0x61, 0x5b, 0xb1, 0xb4, 0xf9, 0x0e, 0x10, + 0x30, 0x46, 0x00, 0xf0, 0xf5, 0xfd, 0x28, 0xb1, 0xa3, 0x89, 0x23, 0xf0, + 0x03, 0x03, 0x43, 0xf0, 0x01, 0x03, 0xa3, 0x81, 0xa0, 0x89, 0x05, 0x43, + 0xa5, 0x81, 0xcd, 0xe7, 0x75, 0xaa, 0x01, 0x08, 0x02, 0x4b, 0x01, 0x46, + 0x18, 0x68, 0xf3, 0xf7, 0xb9, 0xba, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, + 0x02, 0x4b, 0x01, 0x46, 0x18, 0x68, 0xf3, 0xf7, 0xad, 0xba, 0x00, 0xbf, + 0x10, 0x03, 0x00, 0x24, 0x01, 0xf0, 0xff, 0x01, 0x10, 0x2a, 0x2b, 0xdb, + 0x10, 0xf0, 0x07, 0x0f, 0x08, 0xd0, 0x10, 0xf8, 0x01, 0x3b, 0x01, 0x3a, + 0x8b, 0x42, 0x2d, 0xd0, 0x10, 0xf0, 0x07, 0x0f, 0x42, 0xb3, 0xf6, 0xd1, + 0xf0, 0xb4, 0x41, 0xea, 0x01, 0x21, 0x41, 0xea, 0x01, 0x41, 0x22, 0xf0, + 0x07, 0x04, 0x7f, 0xf0, 0x00, 0x07, 0x00, 0x23, 0xf0, 0xe8, 0x02, 0x56, + 0x08, 0x3c, 0x85, 0xea, 0x01, 0x05, 0x86, 0xea, 0x01, 0x06, 0x85, 0xfa, + 0x47, 0xf5, 0xa3, 0xfa, 0x87, 0xf5, 0x86, 0xfa, 0x47, 0xf6, 0xa5, 0xfa, + 0x87, 0xf6, 0x8e, 0xb9, 0xee, 0xd1, 0xf0, 0xbc, 0x01, 0xf0, 0xff, 0x01, + 0x02, 0xf0, 0x07, 0x02, 0x32, 0xb1, 0x10, 0xf8, 0x01, 0x3b, 0x01, 0x3a, + 0x83, 0xea, 0x01, 0x03, 0x13, 0xb1, 0xf8, 0xd1, 0x00, 0x20, 0x70, 0x47, + 0x01, 0x38, 0x70, 0x47, 0x00, 0x2d, 0x06, 0xbf, 0x35, 0x46, 0x03, 0x38, + 0x07, 0x38, 0x15, 0xf0, 0x01, 0x0f, 0x07, 0xd1, 0x01, 0x30, 0x15, 0xf4, + 0x80, 0x7f, 0x02, 0xbf, 0x01, 0x30, 0x15, 0xf4, 0xc0, 0x3f, 0x01, 0x30, + 0xf0, 0xbc, 0x01, 0x38, 0x70, 0x47, 0x00, 0xbf, 0x0a, 0x44, 0x91, 0x42, + 0x00, 0xf1, 0xff, 0x33, 0x00, 0xd1, 0x70, 0x47, 0x10, 0xb5, 0x11, 0xf8, + 0x01, 0x4b, 0x03, 0xf8, 0x01, 0x4f, 0x91, 0x42, 0xf9, 0xd1, 0x10, 0xbd, + 0x02, 0x44, 0x03, 0x46, 0x93, 0x42, 0x00, 0xd1, 0x70, 0x47, 0x03, 0xf8, + 0x01, 0x1b, 0xf9, 0xe7, 0x13, 0xb5, 0x4a, 0x43, 0x11, 0x46, 0x01, 0x92, + 0xf3, 0xf7, 0x42, 0xfa, 0x04, 0x46, 0x18, 0xb1, 0x01, 0x9a, 0x00, 0x21, + 0xff, 0xf7, 0xec, 0xff, 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, 0x00, 0x00, + 0x37, 0xb5, 0x00, 0x29, 0x48, 0xd0, 0x51, 0xf8, 0x04, 0x3c, 0x01, 0x90, + 0x00, 0x2b, 0xa1, 0xf1, 0x04, 0x04, 0xb8, 0xbf, 0xe4, 0x18, 0xf3, 0xf7, + 0x49, 0xf8, 0x20, 0x4a, 0x01, 0x98, 0x13, 0x68, 0x15, 0x46, 0x33, 0xb9, + 0x63, 0x60, 0x14, 0x60, 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, 0xf3, 0xf7, + 0x37, 0xb8, 0xa3, 0x42, 0x0b, 0xd9, 0x21, 0x68, 0x62, 0x18, 0x93, 0x42, + 0x04, 0xbf, 0x1a, 0x68, 0x5b, 0x68, 0x63, 0x60, 0x04, 0xbf, 0x52, 0x18, + 0x22, 0x60, 0x2c, 0x60, 0xec, 0xe7, 0x1a, 0x46, 0x5b, 0x68, 0x0b, 0xb1, + 0xa3, 0x42, 0xfa, 0xd9, 0x11, 0x68, 0x55, 0x18, 0xa5, 0x42, 0x0b, 0xd1, + 0x24, 0x68, 0x21, 0x44, 0x54, 0x18, 0xa3, 0x42, 0x11, 0x60, 0xdd, 0xd1, + 0x1c, 0x68, 0x5b, 0x68, 0x53, 0x60, 0x21, 0x44, 0x11, 0x60, 0xd7, 0xe7, + 0x02, 0xd9, 0x0c, 0x23, 0x03, 0x60, 0xd3, 0xe7, 0x25, 0x68, 0x61, 0x19, + 0x8b, 0x42, 0x04, 0xbf, 0x19, 0x68, 0x5b, 0x68, 0x63, 0x60, 0x04, 0xbf, + 0x49, 0x19, 0x21, 0x60, 0x54, 0x60, 0xc7, 0xe7, 0x03, 0xb0, 0x30, 0xbd, + 0x9c, 0xa5, 0x02, 0x24, 0xf8, 0xb5, 0xcd, 0x1c, 0x25, 0xf0, 0x03, 0x05, + 0x08, 0x35, 0x0c, 0x2d, 0x38, 0xbf, 0x0c, 0x25, 0x00, 0x2d, 0x06, 0x46, + 0x01, 0xdb, 0xa9, 0x42, 0x03, 0xd9, 0x0c, 0x23, 0x33, 0x60, 0x00, 0x20, + 0xf8, 0xbd, 0xf2, 0xf7, 0xf3, 0xff, 0x21, 0x49, 0x0a, 0x68, 0x14, 0x46, + 0x9c, 0xb9, 0x20, 0x4f, 0x3b, 0x68, 0x23, 0xb9, 0x21, 0x46, 0x30, 0x46, + 0x00, 0xf0, 0x08, 0xf9, 0x38, 0x60, 0x29, 0x46, 0x30, 0x46, 0x00, 0xf0, + 0x03, 0xf9, 0x43, 0x1c, 0x23, 0xd1, 0x0c, 0x23, 0x33, 0x60, 0x30, 0x46, + 0xf2, 0xf7, 0xd6, 0xff, 0xe3, 0xe7, 0x23, 0x68, 0x5b, 0x1b, 0x17, 0xd4, + 0x0b, 0x2b, 0x03, 0xd9, 0x23, 0x60, 0x1c, 0x44, 0x25, 0x60, 0x04, 0xe0, + 0x63, 0x68, 0xa2, 0x42, 0x0c, 0xbf, 0x0b, 0x60, 0x53, 0x60, 0x30, 0x46, + 0xf2, 0xf7, 0xc4, 0xff, 0x04, 0xf1, 0x0b, 0x00, 0x23, 0x1d, 0x20, 0xf0, + 0x07, 0x00, 0xc2, 0x1a, 0xcc, 0xd0, 0x1b, 0x1a, 0xa3, 0x50, 0xc9, 0xe7, + 0x22, 0x46, 0x64, 0x68, 0xcc, 0xe7, 0xc4, 0x1c, 0x24, 0xf0, 0x03, 0x04, + 0xa0, 0x42, 0xe3, 0xd0, 0x21, 0x1a, 0x30, 0x46, 0x00, 0xf0, 0xd4, 0xf8, + 0x01, 0x30, 0xdd, 0xd1, 0xcf, 0xe7, 0x00, 0xbf, 0x9c, 0xa5, 0x02, 0x24, + 0xa0, 0xa5, 0x02, 0x24, 0xf8, 0xb5, 0x07, 0x46, 0x14, 0x46, 0x0e, 0x46, + 0x21, 0xb9, 0xbd, 0xe8, 0xf8, 0x40, 0x11, 0x46, 0xf3, 0xf7, 0x84, 0xb9, + 0x22, 0xb9, 0xf3, 0xf7, 0x7d, 0xf9, 0x25, 0x46, 0x28, 0x46, 0xf8, 0xbd, + 0x00, 0xf0, 0xc8, 0xfc, 0xa0, 0x42, 0x0f, 0xd2, 0x21, 0x46, 0x38, 0x46, + 0xf3, 0xf7, 0x76, 0xf9, 0x05, 0x46, 0x00, 0x28, 0xf2, 0xd0, 0x31, 0x46, + 0x22, 0x46, 0xff, 0xf7, 0x11, 0xff, 0x31, 0x46, 0x38, 0x46, 0xf3, 0xf7, + 0x67, 0xf9, 0xe9, 0xe7, 0x35, 0x46, 0xe7, 0xe7, 0x38, 0xb5, 0x07, 0x4d, + 0x04, 0x46, 0x08, 0x46, 0x11, 0x46, 0x00, 0x22, 0x2a, 0x60, 0x1a, 0x46, + 0xf4, 0xf7, 0x6e, 0xf8, 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, + 0x23, 0x60, 0x38, 0xbd, 0xd8, 0xa5, 0x02, 0x24, 0x83, 0x89, 0x03, 0xf0, + 0x09, 0x03, 0x09, 0x2b, 0x01, 0xd1, 0xff, 0xf7, 0xbd, 0xb9, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0xf8, 0xb5, 0x0c, 0x46, 0x05, 0x46, 0x18, 0xb1, + 0x83, 0x69, 0x0b, 0xb9, 0xff, 0xf7, 0x1c, 0xfa, 0x3b, 0x4b, 0x9c, 0x42, + 0x0a, 0xd1, 0x6c, 0x68, 0xb4, 0xf9, 0x0c, 0x20, 0x00, 0x23, 0x63, 0x60, + 0xa3, 0x89, 0x9e, 0x06, 0x0c, 0xd5, 0x4f, 0xf0, 0xff, 0x30, 0x66, 0xe0, + 0x35, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, 0xf0, 0xe7, 0x34, 0x4b, + 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xeb, 0xe7, 0x58, 0x07, 0x48, 0xd4, + 0xd9, 0x06, 0x05, 0xd4, 0x09, 0x23, 0x2b, 0x60, 0x42, 0xf0, 0x40, 0x03, + 0xa3, 0x81, 0xe8, 0xe7, 0x1a, 0x07, 0x0b, 0xd5, 0x21, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0x4e, 0xf9, 0x00, 0x28, 0xe0, 0xd1, 0xa3, 0x89, 0xa0, 0x60, + 0x23, 0xf0, 0x08, 0x03, 0xa3, 0x81, 0xa0, 0x61, 0xa3, 0x89, 0x43, 0xf0, + 0x04, 0x03, 0xa3, 0x81, 0x23, 0x69, 0x1b, 0xb9, 0x21, 0x46, 0x28, 0x46, + 0xff, 0xf7, 0x0c, 0xfe, 0xa6, 0x89, 0xb4, 0xf9, 0x0c, 0x70, 0xb3, 0x07, + 0x0f, 0xd0, 0x01, 0x23, 0xa3, 0x81, 0x1e, 0x4b, 0x1e, 0x49, 0x18, 0x68, + 0x06, 0xf0, 0x09, 0x06, 0xff, 0xf7, 0x6c, 0xfc, 0x09, 0x2e, 0xa7, 0x81, + 0x03, 0xd1, 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xa1, 0xf8, 0x22, 0x69, + 0x66, 0x6a, 0x63, 0x69, 0x21, 0x6a, 0x22, 0x60, 0x28, 0x46, 0xb0, 0x47, + 0x00, 0x28, 0x60, 0x60, 0x1c, 0xdc, 0xb4, 0xf9, 0x0c, 0x30, 0x17, 0xbf, + 0x00, 0x22, 0x43, 0xf0, 0x20, 0x03, 0x62, 0x60, 0x43, 0xf0, 0x40, 0x03, + 0xbc, 0xe7, 0x61, 0x6b, 0x00, 0x29, 0xcd, 0xd0, 0x04, 0xf1, 0x44, 0x03, + 0x99, 0x42, 0x02, 0xd0, 0x28, 0x46, 0xf3, 0xf7, 0xd3, 0xf8, 0x23, 0x6c, + 0x63, 0x60, 0x00, 0x20, 0x60, 0x63, 0x00, 0x2b, 0xc0, 0xd0, 0xe3, 0x6b, + 0x23, 0x60, 0xf8, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x2c, 0xf0, 0x01, 0x08, + 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, 0x6c, 0xf0, 0x01, 0x08, + 0x81, 0xb6, 0x01, 0x08, 0x38, 0xb5, 0x06, 0x4d, 0x00, 0x23, 0x04, 0x46, + 0x08, 0x46, 0x2b, 0x60, 0xf2, 0xf7, 0xe0, 0xfe, 0x43, 0x1c, 0x02, 0xd1, + 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, 0xd8, 0xa5, 0x02, 0x24, + 0x10, 0xb5, 0x0c, 0x46, 0xb1, 0xf9, 0x0e, 0x10, 0x00, 0xf0, 0x00, 0xfc, + 0x00, 0x28, 0xab, 0xbf, 0x63, 0x6d, 0xa3, 0x89, 0x1b, 0x18, 0x23, 0xf4, + 0x80, 0x53, 0xac, 0xbf, 0x63, 0x65, 0xa3, 0x81, 0x10, 0xbd, 0x00, 0x20, + 0x70, 0x47, 0x2d, 0xe9, 0xf0, 0x41, 0x1f, 0x46, 0x8b, 0x89, 0xdb, 0x05, + 0x05, 0x46, 0x0c, 0x46, 0x16, 0x46, 0x05, 0xd5, 0xb1, 0xf9, 0x0e, 0x10, + 0x02, 0x23, 0x00, 0x22, 0x00, 0xf0, 0xca, 0xfb, 0xa3, 0x89, 0xb4, 0xf9, + 0x0e, 0x10, 0x23, 0xf4, 0x80, 0x53, 0xa3, 0x81, 0x32, 0x46, 0x3b, 0x46, + 0x28, 0x46, 0xbd, 0xe8, 0xf0, 0x41, 0x00, 0xf0, 0x4d, 0xba, 0x10, 0xb5, + 0x0c, 0x46, 0xb1, 0xf9, 0x0e, 0x10, 0x00, 0xf0, 0xb7, 0xfb, 0x43, 0x1c, + 0xa3, 0x89, 0x15, 0xbf, 0x60, 0x65, 0x23, 0xf4, 0x80, 0x53, 0x43, 0xf4, + 0x80, 0x53, 0xa3, 0x81, 0x18, 0xbf, 0xa3, 0x81, 0x10, 0xbd, 0xb1, 0xf9, + 0x0e, 0x10, 0x00, 0xf0, 0x49, 0xba, 0x00, 0x00, 0x2d, 0xe9, 0xf7, 0x4f, + 0x80, 0x46, 0x00, 0xf0, 0xdd, 0xfa, 0x40, 0xf2, 0xb1, 0x73, 0x98, 0x45, + 0x40, 0xf3, 0x98, 0x80, 0x6f, 0xf4, 0xf6, 0x63, 0x43, 0x44, 0x9b, 0x10, + 0x40, 0xf2, 0x6d, 0x12, 0xa8, 0xf2, 0xb2, 0x75, 0x02, 0xfb, 0x05, 0x35, + 0x6f, 0xf0, 0x63, 0x02, 0xa8, 0xf2, 0x6d, 0x73, 0x93, 0xfb, 0xf2, 0xf3, + 0x1d, 0x44, 0x4f, 0xf4, 0xc8, 0x73, 0x6f, 0xf4, 0xc8, 0x62, 0x98, 0xfb, + 0xf3, 0xf7, 0x03, 0xfb, 0x17, 0x87, 0x42, 0x44, 0xb7, 0xfa, 0x87, 0xfc, + 0xb2, 0xfb, 0xf3, 0xf2, 0x08, 0xf0, 0x03, 0x03, 0x15, 0x44, 0x64, 0x22, + 0xc0, 0xf8, 0x04, 0x80, 0x98, 0xfb, 0xf2, 0xf6, 0x4f, 0xea, 0x5c, 0x1c, + 0x02, 0xfb, 0x16, 0x86, 0x04, 0x46, 0x00, 0xf1, 0x50, 0x0b, 0x00, 0x93, + 0x4f, 0xf0, 0x07, 0x0e, 0x22, 0x7a, 0x63, 0x69, 0x4a, 0x2a, 0x28, 0xd1, + 0x00, 0x99, 0xea, 0x18, 0x01, 0xb9, 0x06, 0xb9, 0x0f, 0xbb, 0x3b, 0x2b, + 0xd4, 0xbf, 0x00, 0x23, 0x01, 0x23, 0x13, 0x44, 0x5a, 0x1e, 0xa3, 0x69, + 0x2c, 0x49, 0x01, 0xfb, 0x02, 0x32, 0xa3, 0x6a, 0x13, 0x44, 0x1a, 0x46, + 0xdb, 0x17, 0xc4, 0xe9, 0x08, 0x23, 0x28, 0x34, 0xa3, 0x45, 0xe3, 0xd1, + 0xd0, 0xe9, 0x08, 0x45, 0xd0, 0xe9, 0x12, 0x23, 0x94, 0x42, 0x75, 0xeb, + 0x03, 0x03, 0xb4, 0xbf, 0x01, 0x23, 0x00, 0x23, 0x03, 0x60, 0x01, 0x20, + 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0x23, 0xdf, 0xe7, 0x44, 0x2a, + 0x01, 0xd1, 0xea, 0x18, 0xdd, 0xe7, 0x00, 0x9a, 0x72, 0xbb, 0x00, 0x2e, + 0x0c, 0xbf, 0xe0, 0x46, 0x4f, 0xf0, 0x01, 0x08, 0x19, 0x49, 0xe2, 0x68, + 0x01, 0x92, 0x4f, 0xf0, 0x30, 0x0a, 0x0a, 0xfb, 0x08, 0x18, 0x2a, 0x46, + 0x4f, 0xf0, 0x00, 0x09, 0xa8, 0xf1, 0x04, 0x08, 0x01, 0x99, 0x09, 0xf1, + 0x01, 0x09, 0x49, 0x45, 0x58, 0xf8, 0x29, 0xa0, 0x18, 0xdc, 0x02, 0xf1, + 0x04, 0x08, 0x98, 0xfb, 0xfe, 0xf9, 0xc9, 0xeb, 0xc9, 0x09, 0xa8, 0xeb, + 0x09, 0x09, 0xb3, 0xeb, 0x09, 0x09, 0x23, 0x69, 0x03, 0xf1, 0xff, 0x33, + 0x48, 0xbf, 0x09, 0xf1, 0x07, 0x09, 0xc3, 0xeb, 0xc3, 0x03, 0x4b, 0x44, + 0x53, 0x45, 0x05, 0xda, 0x1a, 0x44, 0xac, 0xe7, 0xe0, 0x46, 0xd3, 0xe7, + 0x52, 0x44, 0xdd, 0xe7, 0x07, 0x3b, 0xf5, 0xe7, 0x00, 0x20, 0xbd, 0xe7, + 0x80, 0x51, 0x01, 0x00, 0x70, 0xf0, 0x01, 0x08, 0x01, 0x48, 0xff, 0xf7, + 0x9b, 0xbc, 0x00, 0xbf, 0xd3, 0xa5, 0x02, 0x24, 0x01, 0x48, 0xff, 0xf7, + 0x97, 0xbc, 0x00, 0xbf, 0xd3, 0xa5, 0x02, 0x24, 0x01, 0x4b, 0x18, 0x68, + 0x00, 0xf0, 0x02, 0xb8, 0x10, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, + 0x8d, 0xb0, 0x07, 0x46, 0x00, 0xf0, 0x22, 0xfa, 0xae, 0x49, 0xaf, 0x4e, + 0x05, 0x46, 0x38, 0x46, 0x00, 0xf0, 0x14, 0xfa, 0x04, 0x46, 0x70, 0xb9, + 0xac, 0x4b, 0xad, 0x4a, 0x18, 0x60, 0xad, 0x4b, 0x18, 0x60, 0xad, 0x4b, + 0x30, 0x68, 0xc3, 0xe9, 0x00, 0x22, 0xff, 0xf7, 0xe3, 0xfc, 0x34, 0x60, + 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x31, 0x68, 0x00, 0x29, 0x5f, 0xd1, + 0x30, 0x68, 0xff, 0xf7, 0xd9, 0xfc, 0x20, 0x46, 0x00, 0xf0, 0x30, 0xfb, + 0x41, 0x1c, 0x38, 0x46, 0xf2, 0xf7, 0x88, 0xff, 0x30, 0x60, 0x00, 0x28, + 0x57, 0xd1, 0x23, 0x78, 0xa0, 0x4a, 0xa1, 0x49, 0x3a, 0x2b, 0x08, 0xbf, + 0x01, 0x34, 0x0a, 0xae, 0x33, 0x46, 0x20, 0x46, 0x00, 0xf0, 0xe0, 0xfa, + 0x00, 0x28, 0xdf, 0xdd, 0x0a, 0x9b, 0xe7, 0x18, 0xe3, 0x5c, 0x2d, 0x2b, + 0x49, 0xd1, 0x01, 0x37, 0x4f, 0xf0, 0xff, 0x34, 0x0d, 0xf1, 0x20, 0x0a, + 0x0d, 0xf1, 0x1e, 0x0b, 0x4f, 0xf0, 0x00, 0x08, 0xcd, 0xe9, 0x01, 0x6a, + 0x94, 0x49, 0x03, 0x96, 0xcd, 0xf8, 0x00, 0xb0, 0x33, 0x46, 0x07, 0xaa, + 0x38, 0x46, 0xad, 0xf8, 0x1e, 0x80, 0xad, 0xf8, 0x20, 0x80, 0x00, 0xf0, + 0xc1, 0xfa, 0x40, 0x45, 0xc0, 0xdd, 0xbd, 0xf8, 0x1e, 0x30, 0xbd, 0xf8, + 0x20, 0x20, 0xdf, 0xf8, 0x38, 0x92, 0x3c, 0x21, 0x01, 0xfb, 0x03, 0x22, + 0xbd, 0xf8, 0x1c, 0x30, 0x4f, 0xf4, 0x61, 0x61, 0x01, 0xfb, 0x03, 0x23, + 0x5c, 0x43, 0xac, 0x62, 0x81, 0x4c, 0x82, 0x4b, 0x23, 0x60, 0x0a, 0x9b, + 0x81, 0x49, 0x1f, 0x44, 0x4a, 0x46, 0x33, 0x46, 0x38, 0x46, 0x00, 0xf0, + 0xa3, 0xfa, 0x40, 0x45, 0x16, 0xdc, 0x23, 0x68, 0x63, 0x60, 0x77, 0x4b, + 0xaa, 0x6a, 0x1a, 0x60, 0x77, 0x4b, 0xc3, 0xf8, 0x00, 0x80, 0x99, 0xe7, + 0x00, 0xf0, 0xc2, 0xfa, 0x00, 0x28, 0x9b, 0xd1, 0x94, 0xe7, 0x21, 0x46, + 0x00, 0xf0, 0xc6, 0xfa, 0xa3, 0xe7, 0x2b, 0x2b, 0x08, 0xbf, 0x01, 0x37, + 0x01, 0x24, 0xb3, 0xe7, 0x0a, 0x9b, 0xc4, 0xf8, 0x04, 0x90, 0xfc, 0x18, + 0xfb, 0x5c, 0x2d, 0x2b, 0x40, 0xf0, 0x8b, 0x80, 0x01, 0x34, 0x4f, 0xf0, + 0xff, 0x37, 0x00, 0x23, 0xad, 0xf8, 0x1c, 0x30, 0xad, 0xf8, 0x1e, 0x30, + 0xad, 0xf8, 0x20, 0x30, 0x0a, 0x93, 0xcd, 0xe9, 0x02, 0xa6, 0xcd, 0xe9, + 0x00, 0xb6, 0x67, 0x49, 0x33, 0x46, 0x07, 0xaa, 0x20, 0x46, 0x00, 0xf0, + 0x6d, 0xfa, 0x00, 0x28, 0x78, 0xdc, 0xaf, 0x6a, 0xa7, 0xf5, 0x61, 0x67, + 0x0a, 0x9b, 0x2f, 0x65, 0x1c, 0x44, 0x2f, 0x46, 0x4f, 0xf0, 0x00, 0x09, + 0x23, 0x78, 0x2c, 0x2b, 0x08, 0xbf, 0x01, 0x34, 0x94, 0xf8, 0x00, 0x80, + 0xb8, 0xf1, 0x4d, 0x0f, 0x78, 0xd1, 0x0d, 0xf1, 0x26, 0x03, 0xcd, 0xe9, + 0x01, 0x63, 0x09, 0xab, 0x00, 0x93, 0x58, 0x49, 0x03, 0x96, 0x33, 0x46, + 0x0d, 0xf1, 0x22, 0x02, 0x20, 0x46, 0x00, 0xf0, 0x4b, 0xfa, 0x03, 0x28, + 0x7f, 0xf4, 0x4a, 0xaf, 0xbd, 0xf8, 0x22, 0x10, 0x4b, 0x1e, 0x0b, 0x2b, + 0x3f, 0xf6, 0x44, 0xaf, 0xbd, 0xf8, 0x24, 0x20, 0x53, 0x1e, 0x04, 0x2b, + 0x3f, 0xf6, 0x3e, 0xaf, 0xbd, 0xf8, 0x26, 0x30, 0x06, 0x2b, 0x3f, 0xf6, + 0x39, 0xaf, 0xc7, 0xe9, 0x03, 0x12, 0x87, 0xf8, 0x08, 0x80, 0x7b, 0x61, + 0x0a, 0x9b, 0x04, 0xeb, 0x03, 0x08, 0x02, 0x23, 0xad, 0xf8, 0x1c, 0x30, + 0x00, 0x23, 0xad, 0xf8, 0x1e, 0x30, 0xad, 0xf8, 0x20, 0x30, 0x0a, 0x93, + 0x98, 0xf8, 0x00, 0x30, 0x2f, 0x2b, 0x09, 0xd1, 0xcd, 0xe9, 0x02, 0xa6, + 0xcd, 0xe9, 0x00, 0xb6, 0x3e, 0x49, 0x33, 0x46, 0x07, 0xaa, 0x40, 0x46, + 0x00, 0xf0, 0x18, 0xfa, 0xbd, 0xf8, 0x1e, 0x30, 0xbd, 0xf8, 0x20, 0x20, + 0x3c, 0x21, 0x01, 0xfb, 0x03, 0x22, 0xbd, 0xf8, 0x1c, 0x30, 0x4f, 0xf4, + 0x61, 0x61, 0x01, 0xfb, 0x03, 0x23, 0xbb, 0x61, 0x0a, 0x9c, 0x28, 0x37, + 0x44, 0x44, 0xb9, 0xf1, 0x00, 0x0f, 0x20, 0xd0, 0x68, 0x68, 0xff, 0xf7, + 0x2f, 0xfe, 0x28, 0x4b, 0xaa, 0x6a, 0x1a, 0x60, 0x2b, 0x6d, 0x9b, 0x1a, + 0x27, 0x4a, 0x18, 0xbf, 0x01, 0x23, 0x13, 0x60, 0xf8, 0xe6, 0x2b, 0x2b, + 0x08, 0xbf, 0x01, 0x34, 0x01, 0x27, 0x72, 0xe7, 0xbd, 0xf8, 0x1e, 0x30, + 0xbd, 0xf8, 0x20, 0x20, 0x3c, 0x21, 0x01, 0xfb, 0x03, 0x22, 0xbd, 0xf8, + 0x1c, 0x30, 0x4f, 0xf4, 0x61, 0x61, 0x01, 0xfb, 0x03, 0x23, 0x5f, 0x43, + 0x7a, 0xe7, 0x4f, 0xf0, 0x01, 0x09, 0x7d, 0xe7, 0xb8, 0xf1, 0x4a, 0x0f, + 0x06, 0xbf, 0x01, 0x34, 0x43, 0x46, 0x44, 0x23, 0x0a, 0x22, 0x0b, 0xa9, + 0x20, 0x46, 0x05, 0x93, 0x00, 0xf0, 0xaa, 0xfa, 0xdd, 0xf8, 0x2c, 0x80, + 0x05, 0x9b, 0xad, 0xf8, 0x26, 0x00, 0xa0, 0x45, 0x14, 0xd1, 0x4d, 0x23, + 0xb9, 0xf1, 0x00, 0x0f, 0x07, 0xd1, 0x2b, 0x72, 0x03, 0x21, 0x02, 0x23, + 0xc5, 0xe9, 0x03, 0x13, 0xc5, 0xf8, 0x14, 0x90, 0x91, 0xe7, 0x85, 0xf8, + 0x30, 0x30, 0x0b, 0x22, 0x01, 0x23, 0xc5, 0xe9, 0x0d, 0x23, 0x00, 0x23, + 0xeb, 0x63, 0x88, 0xe7, 0x80, 0xb2, 0x3b, 0x72, 0x78, 0x61, 0x84, 0xe7, + 0xd0, 0xf0, 0x01, 0x08, 0xbc, 0xa5, 0x02, 0x24, 0xc4, 0xa5, 0x02, 0x24, + 0xd3, 0xf0, 0x01, 0x08, 0xc0, 0xa5, 0x02, 0x24, 0x74, 0x03, 0x00, 0x24, + 0xaf, 0xa5, 0x02, 0x24, 0xd7, 0xf0, 0x01, 0x08, 0xfa, 0xf0, 0x01, 0x08, + 0xe6, 0xf0, 0x01, 0x08, 0xf9, 0xf0, 0x01, 0x08, 0xa4, 0xa5, 0x02, 0x24, + 0x38, 0xb5, 0x07, 0x4d, 0x04, 0x46, 0x08, 0x46, 0x11, 0x46, 0x00, 0x22, + 0x2a, 0x60, 0x1a, 0x46, 0xf3, 0xf7, 0x50, 0xfb, 0x43, 0x1c, 0x02, 0xd1, + 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, 0xd8, 0xa5, 0x02, 0x24, + 0x38, 0xb5, 0x06, 0x4d, 0x00, 0x23, 0x04, 0x46, 0x08, 0x46, 0x2b, 0x60, + 0xf3, 0xf7, 0x98, 0xfb, 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, + 0x23, 0x60, 0x38, 0xbd, 0xd8, 0xa5, 0x02, 0x24, 0x0b, 0x78, 0x72, 0x2b, + 0x30, 0xb5, 0x22, 0xd0, 0x77, 0x2b, 0x24, 0xd0, 0x61, 0x2b, 0x27, 0xd0, + 0x16, 0x23, 0x03, 0x60, 0x00, 0x20, 0x30, 0xbd, 0x62, 0x2d, 0x12, 0xd0, + 0x78, 0x2d, 0x13, 0xd0, 0x2b, 0x2d, 0x07, 0xd1, 0x20, 0xf0, 0x1c, 0x00, + 0x23, 0xf0, 0x03, 0x03, 0x40, 0xf0, 0x10, 0x00, 0x43, 0xf0, 0x02, 0x03, + 0x11, 0xf8, 0x01, 0x5f, 0x00, 0x2d, 0xed, 0xd1, 0x23, 0x43, 0x13, 0x60, + 0xe9, 0xe7, 0x43, 0xf4, 0x80, 0x33, 0xf5, 0xe7, 0x43, 0xf4, 0x00, 0x63, + 0xf2, 0xe7, 0x00, 0x24, 0x23, 0x46, 0x04, 0x20, 0xee, 0xe7, 0x4f, 0xf4, + 0xc0, 0x64, 0x01, 0x23, 0x08, 0x20, 0xe9, 0xe7, 0x4f, 0xf4, 0x02, 0x74, + 0x01, 0x23, 0x4f, 0xf4, 0x84, 0x70, 0xe3, 0xe7, 0x38, 0xb5, 0x07, 0x4d, + 0x00, 0x23, 0x04, 0x46, 0x08, 0x46, 0x11, 0x46, 0x2b, 0x60, 0xf3, 0xf7, + 0x3b, 0xfa, 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, + 0x38, 0xbd, 0x00, 0xbf, 0xd8, 0xa5, 0x02, 0x24, 0x2d, 0xe9, 0xf8, 0x4f, + 0x07, 0x46, 0x89, 0x46, 0x16, 0x46, 0xf2, 0xf7, 0xd7, 0xfb, 0x18, 0x4b, + 0x1c, 0x68, 0x9a, 0x46, 0x34, 0xb1, 0x4b, 0x46, 0x98, 0x46, 0x13, 0xf8, + 0x01, 0x1b, 0x39, 0xb1, 0x3d, 0x29, 0xf9, 0xd1, 0x38, 0x46, 0xf2, 0xf7, + 0xc3, 0xfb, 0x00, 0x20, 0xbd, 0xe8, 0xf8, 0x8f, 0xa8, 0xeb, 0x09, 0x08, + 0xa3, 0x46, 0x54, 0xf8, 0x04, 0x0b, 0x00, 0x28, 0xf2, 0xd0, 0x42, 0x46, + 0x49, 0x46, 0x00, 0xf0, 0x55, 0xf9, 0x00, 0x28, 0xf4, 0xd1, 0x54, 0xf8, + 0x04, 0x3c, 0x03, 0xeb, 0x08, 0x05, 0x13, 0xf8, 0x08, 0x30, 0x3d, 0x2b, + 0xec, 0xd1, 0xda, 0xf8, 0x00, 0x30, 0xab, 0xeb, 0x03, 0x03, 0x9b, 0x10, + 0x38, 0x46, 0x33, 0x60, 0xf2, 0xf7, 0xa2, 0xfb, 0x68, 0x1c, 0xdd, 0xe7, + 0xd8, 0x03, 0x00, 0x24, 0x07, 0xb5, 0x01, 0xaa, 0xff, 0xf7, 0xc2, 0xff, + 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x48, 0x70, 0x47, + 0x80, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x41, 0xd0, 0xe9, 0x00, 0x67, + 0x0c, 0x46, 0x51, 0x4a, 0x00, 0x23, 0x30, 0x46, 0x39, 0x46, 0x01, 0xf0, + 0x53, 0xf8, 0x39, 0x46, 0x05, 0x46, 0x4d, 0x4a, 0x30, 0x46, 0x00, 0x23, + 0x01, 0xf0, 0x4c, 0xf8, 0x00, 0x2a, 0xbc, 0xbf, 0x02, 0xf5, 0xa8, 0x32, + 0x02, 0xf5, 0xc0, 0x72, 0x4f, 0xf4, 0x61, 0x61, 0x05, 0xf5, 0x2f, 0x20, + 0xb2, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x22, 0x4f, 0xf0, 0x3c, 0x01, + 0xac, 0xbf, 0x00, 0xf6, 0x6c, 0x20, 0x00, 0xf6, 0x6b, 0x20, 0xa3, 0x60, + 0xb2, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x22, 0x63, 0x60, 0x22, 0x60, + 0xc3, 0x1c, 0x07, 0x22, 0x93, 0xfb, 0xf2, 0xf2, 0xc2, 0xeb, 0xc2, 0x02, + 0x9b, 0x1a, 0x48, 0xbf, 0x07, 0x33, 0x00, 0x28, 0xa3, 0x61, 0xb8, 0xbf, + 0xa0, 0xf5, 0x0e, 0x33, 0x36, 0x49, 0xae, 0xbf, 0x90, 0xfb, 0xf1, 0xf1, + 0xa3, 0xf5, 0x2c, 0x73, 0x93, 0xfb, 0xf1, 0xf1, 0x33, 0x4b, 0x03, 0xfb, + 0x01, 0x00, 0x48, 0xf6, 0xac, 0x62, 0xb0, 0xfb, 0xf2, 0xf2, 0x02, 0x44, + 0x40, 0xf2, 0xb4, 0x5c, 0xb0, 0xfb, 0xfc, 0xf3, 0xd2, 0x1a, 0x40, 0xf2, + 0x6d, 0x17, 0x2d, 0x4b, 0xb0, 0xfb, 0xf3, 0xf3, 0x64, 0x26, 0xd3, 0x1a, + 0xb3, 0xfb, 0xf7, 0xf5, 0xb3, 0xfb, 0xfc, 0xf3, 0xb5, 0xfb, 0xf6, 0xf2, + 0xd3, 0x1a, 0x03, 0x44, 0x07, 0xfb, 0x15, 0x33, 0x99, 0x20, 0x03, 0xeb, + 0x83, 0x0c, 0x0c, 0xf1, 0x02, 0x0c, 0x03, 0xf1, 0x01, 0x0e, 0xbc, 0xfb, + 0xf0, 0xf7, 0x78, 0x43, 0x02, 0x30, 0x4f, 0xf0, 0x05, 0x08, 0xb0, 0xfb, + 0xf8, 0xf0, 0xae, 0xeb, 0x00, 0x00, 0x40, 0xf2, 0xf9, 0x5e, 0xf4, 0x45, + 0x94, 0xbf, 0x4f, 0xf0, 0x02, 0x0c, 0x6f, 0xf0, 0x09, 0x0c, 0x67, 0x44, + 0x4f, 0xf4, 0xc8, 0x7c, 0x0c, 0xfb, 0x01, 0x51, 0x01, 0x2f, 0x98, 0xbf, + 0x01, 0x31, 0xb3, 0xf5, 0x99, 0x7f, 0x0c, 0xd3, 0xa3, 0xf5, 0x99, 0x73, + 0xe3, 0x61, 0xa1, 0xf2, 0x6c, 0x71, 0x00, 0x23, 0xe0, 0x60, 0xc4, 0xe9, + 0x04, 0x71, 0x23, 0x62, 0x20, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x15, 0xf0, + 0x03, 0x0f, 0x02, 0xd1, 0x06, 0xfb, 0x12, 0x52, 0x5a, 0xb9, 0x4f, 0xf4, + 0xc8, 0x76, 0xb5, 0xfb, 0xf6, 0xf2, 0x06, 0xfb, 0x12, 0x52, 0xb2, 0xfa, + 0x82, 0xf2, 0x52, 0x09, 0x3b, 0x33, 0x13, 0x44, 0xe2, 0xe7, 0x01, 0x22, + 0xfa, 0xe7, 0x00, 0xbf, 0x80, 0x51, 0x01, 0x00, 0xb1, 0x3a, 0x02, 0x00, + 0x4f, 0xc5, 0xfd, 0xff, 0xb0, 0x3a, 0x02, 0x00, 0x38, 0xb5, 0x06, 0x4d, + 0x00, 0x23, 0x04, 0x46, 0x08, 0x46, 0x2b, 0x60, 0xf3, 0xf7, 0x83, 0xf9, + 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, + 0xd8, 0xa5, 0x02, 0x24, 0x38, 0xb5, 0x07, 0x4d, 0x04, 0x46, 0x08, 0x46, + 0x11, 0x46, 0x00, 0x22, 0x2a, 0x60, 0x1a, 0x46, 0xf3, 0xf7, 0x40, 0xf9, + 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, + 0xd8, 0xa5, 0x02, 0x24, 0x51, 0xf8, 0x04, 0x3c, 0x18, 0x1f, 0x00, 0x2b, + 0xbc, 0xbf, 0x0b, 0x58, 0xc0, 0x18, 0x70, 0x47, 0x38, 0xb5, 0x07, 0x4d, + 0x04, 0x46, 0x08, 0x46, 0x11, 0x46, 0x00, 0x22, 0x2a, 0x60, 0x1a, 0x46, + 0xf3, 0xf7, 0x74, 0xf9, 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, + 0x23, 0x60, 0x38, 0xbd, 0xd8, 0xa5, 0x02, 0x24, 0x0e, 0xb4, 0x10, 0xb5, + 0x9f, 0xb0, 0x21, 0xac, 0x4f, 0xf4, 0x01, 0x71, 0x54, 0xf8, 0x04, 0x2b, + 0x01, 0x92, 0xad, 0xf8, 0x1c, 0x10, 0x04, 0x90, 0x08, 0x90, 0x00, 0xf0, + 0x2f, 0xf8, 0x0c, 0x4b, 0x05, 0x90, 0x09, 0x90, 0x0d, 0x93, 0x0b, 0x48, + 0x01, 0x9a, 0x00, 0x68, 0x03, 0x94, 0x00, 0x23, 0x11, 0x93, 0x16, 0x93, + 0x4f, 0xf6, 0xff, 0x73, 0xad, 0xf8, 0x1e, 0x30, 0x04, 0xa9, 0x23, 0x46, + 0x00, 0xf0, 0x18, 0xf9, 0x1f, 0xb0, 0xbd, 0xe8, 0x10, 0x40, 0x03, 0xb0, + 0x70, 0x47, 0x00, 0xbf, 0xeb, 0xb7, 0x01, 0x08, 0x10, 0x03, 0x00, 0x24, + 0x10, 0xf8, 0x01, 0x2b, 0x11, 0xf8, 0x01, 0x3b, 0x01, 0x2a, 0x28, 0xbf, + 0x9a, 0x42, 0xf7, 0xd0, 0xd0, 0x1a, 0x70, 0x47, 0x03, 0x46, 0x11, 0xf8, + 0x01, 0x2b, 0x03, 0xf8, 0x01, 0x2b, 0x00, 0x2a, 0xf9, 0xd1, 0x70, 0x47, + 0x03, 0x46, 0x13, 0xf8, 0x01, 0x2b, 0x00, 0x2a, 0xfb, 0xd1, 0x18, 0x1a, + 0x01, 0x38, 0x70, 0x47, 0x10, 0xb5, 0x6a, 0xb1, 0x01, 0x39, 0x84, 0x18, + 0x10, 0xf8, 0x01, 0x3b, 0x11, 0xf8, 0x01, 0x2f, 0x93, 0x42, 0x03, 0xd1, + 0xa0, 0x42, 0x01, 0xd0, 0x00, 0x2b, 0xf5, 0xd1, 0x98, 0x1a, 0x10, 0xbd, + 0x10, 0x46, 0xfc, 0xe7, 0x2d, 0xe9, 0xf0, 0x43, 0x3b, 0x4e, 0x86, 0x46, + 0x8c, 0x46, 0x60, 0x46, 0x1c, 0xf8, 0x01, 0x4b, 0xa5, 0x5d, 0x15, 0xf0, + 0x08, 0x05, 0xf8, 0xd1, 0x2d, 0x2c, 0x34, 0xd1, 0x9c, 0xf8, 0x00, 0x40, + 0x4f, 0xf0, 0x01, 0x08, 0x00, 0xf1, 0x02, 0x0c, 0x00, 0x2b, 0x5e, 0xd0, + 0x10, 0x2b, 0x0c, 0xd1, 0x30, 0x2c, 0x0a, 0xd1, 0x9c, 0xf8, 0x00, 0x00, + 0x00, 0xf0, 0xdf, 0x00, 0x58, 0x28, 0x4f, 0xd1, 0x9c, 0xf8, 0x01, 0x40, + 0x10, 0x23, 0x0c, 0xf1, 0x02, 0x0c, 0x4f, 0xf0, 0xff, 0x37, 0x00, 0x25, + 0xb7, 0xfb, 0xf3, 0xf7, 0x03, 0xfb, 0x07, 0xf9, 0x6f, 0xea, 0x09, 0x09, + 0x28, 0x46, 0xa4, 0xf1, 0x30, 0x06, 0x09, 0x2e, 0x18, 0xd8, 0x34, 0x46, + 0xa3, 0x42, 0x24, 0xdd, 0x00, 0x2d, 0x1f, 0xdb, 0x87, 0x42, 0x1d, 0xd3, + 0x01, 0xd1, 0xa1, 0x45, 0x1a, 0xdb, 0x00, 0xfb, 0x03, 0x40, 0x01, 0x25, + 0x1c, 0xf8, 0x01, 0x4b, 0xeb, 0xe7, 0x2b, 0x2c, 0x08, 0xbf, 0x9c, 0xf8, + 0x00, 0x40, 0xa8, 0x46, 0x08, 0xbf, 0x00, 0xf1, 0x02, 0x0c, 0xc7, 0xe7, + 0xa4, 0xf1, 0x41, 0x06, 0x19, 0x2e, 0x01, 0xd8, 0x37, 0x3c, 0xe1, 0xe7, + 0xa4, 0xf1, 0x61, 0x06, 0x19, 0x2e, 0x04, 0xd8, 0x57, 0x3c, 0xdb, 0xe7, + 0x4f, 0xf0, 0xff, 0x35, 0xe4, 0xe7, 0x00, 0x2d, 0x07, 0xda, 0x22, 0x23, + 0xce, 0xf8, 0x00, 0x30, 0x4f, 0xf0, 0xff, 0x30, 0x42, 0xb9, 0xbd, 0xe8, + 0xf0, 0x83, 0xb8, 0xf1, 0x00, 0x0f, 0x00, 0xd0, 0x40, 0x42, 0x00, 0x2a, + 0xf7, 0xd0, 0x0d, 0xb1, 0x0c, 0xf1, 0xff, 0x31, 0x11, 0x60, 0xf2, 0xe7, + 0x30, 0x24, 0x00, 0x2b, 0xb1, 0xd1, 0x08, 0x23, 0xaf, 0xe7, 0x30, 0x2c, + 0xa2, 0xd0, 0x0a, 0x23, 0xab, 0xe7, 0x00, 0xbf, 0x0d, 0xf1, 0x01, 0x08, + 0xff, 0xf7, 0x82, 0xbf, 0x13, 0x46, 0x0a, 0x46, 0x01, 0x46, 0x02, 0x48, + 0x00, 0x68, 0xff, 0xf7, 0x7b, 0xbf, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, + 0x38, 0xb5, 0x4b, 0x1c, 0x14, 0x46, 0x03, 0xd1, 0x4f, 0xf0, 0xff, 0x35, + 0x28, 0x46, 0x38, 0xbd, 0x93, 0x89, 0x23, 0xf0, 0x20, 0x03, 0x93, 0x81, + 0x63, 0x6b, 0x52, 0x68, 0xcd, 0xb2, 0x8b, 0xb1, 0xa3, 0x6b, 0x93, 0x42, + 0x08, 0xdd, 0x23, 0x68, 0x5a, 0x1e, 0x22, 0x60, 0x03, 0xf8, 0x01, 0x5c, + 0x63, 0x68, 0x01, 0x33, 0x63, 0x60, 0xe9, 0xe7, 0x21, 0x46, 0x00, 0xf0, + 0xb5, 0xfb, 0x00, 0x28, 0xf1, 0xd0, 0xe1, 0xe7, 0x21, 0x69, 0x23, 0x68, + 0x51, 0xb1, 0x99, 0x42, 0x08, 0xd2, 0x13, 0xf8, 0x01, 0x1c, 0xa9, 0x42, + 0x04, 0xd1, 0x01, 0x3b, 0x01, 0x32, 0x23, 0x60, 0x62, 0x60, 0xd5, 0xe7, + 0xc4, 0xe9, 0x0f, 0x32, 0x04, 0xf1, 0x44, 0x03, 0x63, 0x63, 0x03, 0x23, + 0xa3, 0x63, 0x23, 0x46, 0x03, 0xf8, 0x46, 0x5f, 0x23, 0x60, 0x01, 0x23, + 0xdc, 0xe7, 0x10, 0xb5, 0x0c, 0x46, 0x49, 0x6b, 0x69, 0xb1, 0x04, 0xf1, + 0x44, 0x03, 0x99, 0x42, 0x01, 0xd0, 0xf2, 0xf7, 0x6f, 0xfb, 0x23, 0x6c, + 0x63, 0x60, 0x00, 0x20, 0x60, 0x63, 0x13, 0xb1, 0xe3, 0x6b, 0x23, 0x60, + 0x10, 0xbd, 0x23, 0x69, 0x23, 0x60, 0x00, 0x23, 0x63, 0x60, 0xa3, 0x89, + 0x43, 0xf0, 0x20, 0x03, 0xa3, 0x81, 0x4f, 0xf0, 0xff, 0x30, 0xf3, 0xe7, + 0x2d, 0xe9, 0xf0, 0x4f, 0x0c, 0x46, 0xad, 0xf5, 0x23, 0x7d, 0x00, 0x21, + 0xcd, 0xe9, 0x44, 0x11, 0xb2, 0x49, 0xa0, 0x91, 0x0d, 0xf1, 0x04, 0x08, + 0xb1, 0x49, 0xb2, 0x4f, 0xdf, 0xf8, 0xc8, 0x92, 0xcd, 0xf8, 0x18, 0x81, + 0x06, 0x46, 0xa1, 0x91, 0x00, 0x93, 0x92, 0xf8, 0x00, 0xa0, 0xba, 0xf1, + 0x00, 0x0f, 0x00, 0xf0, 0x51, 0x81, 0x1a, 0xf8, 0x07, 0x30, 0x13, 0xf0, + 0x08, 0x03, 0x02, 0xf1, 0x01, 0x05, 0x19, 0xd0, 0x63, 0x68, 0x00, 0x2b, + 0x0f, 0xdd, 0x23, 0x68, 0x1a, 0x78, 0xba, 0x5c, 0x12, 0x07, 0x01, 0xd4, + 0x2a, 0x46, 0xe8, 0xe7, 0x45, 0x9a, 0x01, 0x32, 0x45, 0x92, 0x62, 0x68, + 0x01, 0x33, 0x01, 0x3a, 0x62, 0x60, 0x23, 0x60, 0xec, 0xe7, 0xa1, 0x9b, + 0x21, 0x46, 0x30, 0x46, 0x98, 0x47, 0x00, 0x28, 0xe9, 0xd0, 0xed, 0xe7, + 0xba, 0xf1, 0x25, 0x0f, 0x40, 0xf0, 0x83, 0x80, 0x41, 0x93, 0x43, 0x93, + 0x53, 0x78, 0x2a, 0x2b, 0x02, 0xbf, 0x10, 0x23, 0x95, 0x1c, 0x41, 0x93, + 0x0a, 0x22, 0xab, 0x46, 0x1b, 0xf8, 0x01, 0x1b, 0xa1, 0xf1, 0x30, 0x03, + 0x09, 0x2b, 0x1d, 0xd9, 0x91, 0x48, 0x03, 0x22, 0xff, 0xf7, 0x5e, 0xf8, + 0x40, 0xb1, 0x01, 0x23, 0xa0, 0xeb, 0x09, 0x00, 0x03, 0xfa, 0x00, 0xf0, + 0x41, 0x9b, 0x18, 0x43, 0x41, 0x90, 0x5d, 0x46, 0x15, 0xf8, 0x01, 0x3b, + 0x78, 0x2b, 0x06, 0xd8, 0x57, 0x2b, 0x10, 0xd8, 0x25, 0x2b, 0x5c, 0xd0, + 0x56, 0xd8, 0x00, 0x2b, 0x74, 0xd0, 0x03, 0x23, 0x47, 0x93, 0x0a, 0x23, + 0x42, 0x93, 0x81, 0xe0, 0x43, 0x9b, 0x02, 0xfb, 0x03, 0x13, 0x30, 0x3b, + 0x43, 0x93, 0x5d, 0x46, 0xd3, 0xe7, 0xa3, 0xf1, 0x58, 0x02, 0x20, 0x2a, + 0xef, 0xd8, 0x01, 0xa1, 0x51, 0xf8, 0x22, 0xf0, 0x37, 0xc4, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, 0x95, 0xc4, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0xab, 0xc4, 0x01, 0x08, 0x81, 0xc4, 0x01, 0x08, + 0xef, 0xc3, 0x01, 0x08, 0xef, 0xc3, 0x01, 0x08, 0xef, 0xc3, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x85, 0xc4, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, + 0xbb, 0xc4, 0x01, 0x08, 0x8d, 0xc4, 0x01, 0x08, 0x2f, 0xc4, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, 0xb7, 0xc4, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x81, 0xc4, 0x01, 0x08, 0x3f, 0xc3, 0x01, 0x08, + 0x3f, 0xc3, 0x01, 0x08, 0x37, 0xc4, 0x01, 0x08, 0x45, 0x3b, 0x02, 0x2b, + 0xa7, 0xd8, 0x05, 0x23, 0x2b, 0xe0, 0x63, 0x68, 0x00, 0x2b, 0x0d, 0xdd, + 0x23, 0x68, 0x1a, 0x78, 0x52, 0x45, 0x40, 0xf0, 0xa1, 0x80, 0x01, 0x33, + 0x62, 0x68, 0x23, 0x60, 0x45, 0x9b, 0x01, 0x3a, 0x01, 0x33, 0x62, 0x60, + 0x45, 0x93, 0x55, 0xe7, 0xa1, 0x9b, 0x21, 0x46, 0x30, 0x46, 0x98, 0x47, + 0x00, 0x28, 0xeb, 0xd0, 0x44, 0x98, 0x00, 0x28, 0x40, 0xf0, 0x84, 0x80, + 0x4f, 0xf0, 0xff, 0x30, 0x86, 0xe0, 0x41, 0x9a, 0x42, 0xf0, 0x20, 0x02, + 0x41, 0x92, 0x41, 0x9a, 0x42, 0xf4, 0x00, 0x72, 0x41, 0x92, 0x10, 0x22, + 0x6f, 0x2b, 0x42, 0x92, 0x34, 0xbf, 0x03, 0x23, 0x04, 0x23, 0x47, 0x93, + 0x63, 0x68, 0x00, 0x2b, 0x41, 0xdd, 0x41, 0x9b, 0x59, 0x06, 0x04, 0xd4, + 0x23, 0x68, 0x1a, 0x78, 0xba, 0x5c, 0x12, 0x07, 0x40, 0xd4, 0x47, 0x9b, + 0x02, 0x2b, 0x4f, 0xdc, 0x6b, 0x46, 0x22, 0x46, 0x41, 0xa9, 0x30, 0x46, + 0x00, 0xf0, 0x74, 0xf8, 0x01, 0x28, 0x65, 0xd0, 0x02, 0x28, 0x7f, 0xf4, + 0x21, 0xaf, 0xcf, 0xe7, 0x0a, 0x22, 0xdd, 0xe7, 0x00, 0x23, 0x42, 0x93, + 0x03, 0x23, 0xde, 0xe7, 0x08, 0x23, 0x42, 0x93, 0x04, 0x23, 0xda, 0xe7, + 0x29, 0x46, 0x40, 0x46, 0x00, 0xf0, 0xac, 0xf9, 0x41, 0x9b, 0x43, 0xf0, + 0x40, 0x03, 0x41, 0x93, 0x05, 0x46, 0x01, 0x23, 0xcf, 0xe7, 0x41, 0x9b, + 0x43, 0xf0, 0x40, 0x03, 0x41, 0x93, 0x00, 0x23, 0xc9, 0xe7, 0x02, 0x23, + 0xc7, 0xe7, 0x41, 0x98, 0xc3, 0x06, 0x3f, 0xf5, 0xff, 0xae, 0x00, 0x9b, + 0x45, 0x9a, 0x19, 0x1d, 0x00, 0x91, 0x1b, 0x68, 0xc0, 0x07, 0x4c, 0xbf, + 0x1a, 0x80, 0x1a, 0x60, 0xf4, 0xe6, 0xa1, 0x9b, 0x21, 0x46, 0x30, 0x46, + 0x98, 0x47, 0x00, 0x28, 0xb7, 0xd0, 0x9d, 0xe7, 0x45, 0x9a, 0x01, 0x32, + 0x45, 0x92, 0x62, 0x68, 0x01, 0x3a, 0x00, 0x2a, 0x62, 0x60, 0x02, 0xdd, + 0x01, 0x33, 0x23, 0x60, 0xae, 0xe7, 0xa1, 0x9b, 0x21, 0x46, 0x30, 0x46, + 0x98, 0x47, 0x00, 0x28, 0xa8, 0xd0, 0x8b, 0xe7, 0x04, 0x2b, 0x06, 0xdc, + 0x6b, 0x46, 0x22, 0x46, 0x41, 0xa9, 0x30, 0x46, 0x00, 0xf0, 0x7a, 0xf8, + 0xac, 0xe7, 0x0f, 0x4b, 0x00, 0x2b, 0x3f, 0xf4, 0xcf, 0xae, 0x6b, 0x46, + 0x22, 0x46, 0x41, 0xa9, 0x30, 0x46, 0xaf, 0xf3, 0x00, 0x80, 0xa1, 0xe7, + 0xa3, 0x89, 0x13, 0xf0, 0x40, 0x0f, 0x18, 0xbf, 0x4f, 0xf0, 0xff, 0x30, + 0x0d, 0xf5, 0x23, 0x7d, 0xbd, 0xe8, 0xf0, 0x8f, 0x44, 0x98, 0xf9, 0xe7, + 0xb9, 0xc1, 0x01, 0x08, 0x33, 0xc2, 0x01, 0x08, 0x0d, 0xf1, 0x01, 0x08, + 0x0d, 0xf2, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf8, 0x43, + 0x15, 0x46, 0x8a, 0x68, 0x80, 0x46, 0x0c, 0x46, 0x32, 0xb9, 0x8a, 0x69, + 0x00, 0x2a, 0x0c, 0xbf, 0x01, 0x22, 0x4f, 0xf0, 0xff, 0x32, 0x8a, 0x60, + 0x22, 0x68, 0xdf, 0xf8, 0x8c, 0x90, 0xd1, 0x06, 0x5f, 0xbf, 0x1a, 0x68, + 0x11, 0x1d, 0x19, 0x60, 0x16, 0x68, 0x00, 0x27, 0xa0, 0x69, 0x88, 0xb1, + 0x01, 0x28, 0x07, 0xd1, 0x2b, 0x68, 0x1a, 0x78, 0x63, 0x69, 0x9b, 0x5c, + 0x53, 0xb9, 0x27, 0xbb, 0xbd, 0xe8, 0xf8, 0x83, 0x02, 0x28, 0x20, 0xd1, + 0x2b, 0x68, 0x1b, 0x78, 0x13, 0xf8, 0x09, 0x30, 0x1b, 0x07, 0x1a, 0xd4, + 0x23, 0x68, 0xda, 0x06, 0x5e, 0xbf, 0x2b, 0x68, 0x1b, 0x78, 0x06, 0xf8, + 0x01, 0x3b, 0x2a, 0x68, 0x6b, 0x68, 0x01, 0x32, 0x2a, 0x60, 0xa2, 0x68, + 0x01, 0x3b, 0x01, 0x3a, 0x6b, 0x60, 0x01, 0x37, 0xa2, 0x60, 0x42, 0xb1, + 0x00, 0x2b, 0xd7, 0xdc, 0xd4, 0xf8, 0x80, 0x31, 0x29, 0x46, 0x40, 0x46, + 0x98, 0x47, 0x00, 0x28, 0xd0, 0xd0, 0x23, 0x68, 0x13, 0xf0, 0x10, 0x03, + 0x05, 0xd1, 0xe2, 0x68, 0x01, 0x32, 0xe2, 0x60, 0xa2, 0x69, 0x02, 0xb1, + 0x33, 0x70, 0x23, 0x69, 0x1f, 0x44, 0x27, 0x61, 0x00, 0x20, 0xcb, 0xe7, + 0x0d, 0xf1, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, 0x98, 0x46, 0x74, 0x4b, + 0x0c, 0x46, 0x82, 0x46, 0x16, 0x46, 0x93, 0xe8, 0x07, 0x00, 0x87, 0xb0, + 0x03, 0xab, 0x83, 0xe8, 0x07, 0x00, 0x70, 0x4b, 0xa1, 0x69, 0x70, 0x4a, + 0x03, 0x29, 0x18, 0xbf, 0x1a, 0x46, 0xa3, 0x68, 0x01, 0x92, 0x5a, 0x1e, + 0xb2, 0xf5, 0xae, 0x7f, 0x88, 0xbf, 0x6f, 0xf4, 0xae, 0x75, 0x27, 0x46, + 0x82, 0xbf, 0x03, 0xeb, 0x05, 0x09, 0x40, 0xf2, 0x5d, 0x13, 0xa3, 0x60, + 0x57, 0xf8, 0x1c, 0x3b, 0x43, 0xf4, 0x50, 0x63, 0x98, 0xbf, 0x4f, 0xf0, + 0x00, 0x09, 0x23, 0x60, 0x3d, 0x46, 0x4f, 0xf0, 0x00, 0x0b, 0x31, 0x68, + 0x03, 0xab, 0x09, 0x78, 0x53, 0xf8, 0x2b, 0x00, 0x02, 0x22, 0xfe, 0xf7, + 0xad, 0xfe, 0x28, 0xb3, 0xbb, 0xf1, 0x01, 0x0f, 0x59, 0xd1, 0x62, 0x68, + 0x2a, 0xb9, 0x22, 0x68, 0x08, 0x23, 0x42, 0xf4, 0x00, 0x72, 0x63, 0x60, + 0x22, 0x60, 0x22, 0x68, 0x22, 0xf4, 0xa0, 0x62, 0x22, 0x60, 0xa2, 0x68, + 0x51, 0x1e, 0xa1, 0x60, 0x92, 0xb1, 0x32, 0x68, 0x51, 0x1c, 0x31, 0x60, + 0x12, 0x78, 0x05, 0xf8, 0x01, 0x2b, 0x72, 0x68, 0x01, 0x3a, 0x00, 0x2a, + 0x72, 0x60, 0x07, 0xdc, 0xd4, 0xf8, 0x80, 0x21, 0x31, 0x46, 0x50, 0x46, + 0x90, 0x47, 0x00, 0x28, 0x40, 0xf0, 0x85, 0x80, 0x0b, 0xf1, 0x01, 0x0b, + 0xbb, 0xf1, 0x03, 0x0f, 0xcb, 0xd1, 0x63, 0x68, 0x0b, 0xb9, 0x0a, 0x23, + 0x63, 0x60, 0x63, 0x68, 0x45, 0x49, 0x60, 0x69, 0xc9, 0x1a, 0x00, 0xf0, + 0x89, 0xf8, 0x4f, 0xf0, 0x00, 0x0b, 0xa3, 0x68, 0x22, 0x68, 0x00, 0x2b, + 0x3d, 0xd0, 0x31, 0x68, 0x60, 0x69, 0x91, 0xf8, 0x00, 0xc0, 0x10, 0xf8, + 0x0c, 0x00, 0x00, 0x28, 0x35, 0xd0, 0xbc, 0xf1, 0x30, 0x0f, 0x24, 0xd1, + 0x10, 0x05, 0x22, 0xd5, 0x0b, 0xf1, 0x01, 0x0b, 0xb9, 0xf1, 0x00, 0x0f, + 0x03, 0xd0, 0x01, 0x33, 0x09, 0xf1, 0xff, 0x39, 0xa3, 0x60, 0x73, 0x68, + 0x01, 0x3b, 0x00, 0x2b, 0x73, 0x60, 0x1b, 0xdd, 0x33, 0x68, 0x01, 0x33, + 0x33, 0x60, 0xa3, 0x68, 0x01, 0x3b, 0xa3, 0x60, 0xd9, 0xe7, 0xbb, 0xf1, + 0x02, 0x0f, 0xae, 0xd1, 0x22, 0x68, 0x02, 0xf4, 0xc0, 0x61, 0xb1, 0xf5, + 0x00, 0x7f, 0xbf, 0xd1, 0x10, 0x23, 0x63, 0x60, 0x42, 0xf4, 0x80, 0x72, + 0xa2, 0xe7, 0x22, 0xf4, 0x10, 0x62, 0x22, 0x60, 0x0b, 0x78, 0x05, 0xf8, + 0x01, 0x3b, 0xde, 0xe7, 0xd4, 0xf8, 0x80, 0x31, 0x31, 0x46, 0x50, 0x46, + 0x98, 0x47, 0x00, 0x28, 0xdf, 0xd0, 0x23, 0x68, 0xd9, 0x05, 0x0d, 0xd5, + 0xbd, 0x42, 0x09, 0xd9, 0x15, 0xf8, 0x01, 0x1c, 0xd4, 0xf8, 0x7c, 0x31, + 0x32, 0x46, 0x50, 0x46, 0x98, 0x47, 0x05, 0xf1, 0xff, 0x39, 0x4d, 0x46, + 0xbd, 0x42, 0x28, 0xd0, 0x22, 0x68, 0x12, 0xf0, 0x10, 0x02, 0x13, 0xd1, + 0x2a, 0x70, 0x63, 0x68, 0x01, 0x9e, 0x39, 0x46, 0x50, 0x46, 0xb0, 0x47, + 0xd8, 0xf8, 0x00, 0x30, 0x21, 0x68, 0x1a, 0x1d, 0xc8, 0xf8, 0x00, 0x20, + 0x11, 0xf0, 0x20, 0x0f, 0x1b, 0x68, 0x0f, 0xd0, 0x18, 0x60, 0xe3, 0x68, + 0x01, 0x33, 0xe3, 0x60, 0xed, 0x1b, 0xab, 0x44, 0x25, 0x69, 0x5d, 0x44, + 0x25, 0x61, 0x00, 0x20, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x4f, 0xf0, + 0x00, 0x0b, 0xca, 0xe7, 0xca, 0x07, 0x4c, 0xbf, 0x18, 0x80, 0x18, 0x60, + 0xeb, 0xe7, 0x01, 0x20, 0xf2, 0xe7, 0x00, 0xbf, 0x2c, 0xf2, 0x01, 0x08, + 0xa1, 0xc1, 0x01, 0x08, 0x5d, 0xc9, 0x01, 0x08, 0x2a, 0xf2, 0x01, 0x08, + 0x70, 0xb5, 0x0b, 0x78, 0x04, 0x46, 0x5e, 0x2b, 0x0b, 0xbf, 0x4b, 0x78, + 0x48, 0x1c, 0x88, 0x1c, 0x00, 0x22, 0x08, 0xbf, 0x01, 0x22, 0x61, 0x1e, + 0x04, 0xf1, 0xff, 0x05, 0x01, 0xf8, 0x01, 0x2f, 0xa9, 0x42, 0xfb, 0xd1, + 0x0b, 0xb9, 0x01, 0x38, 0x70, 0xbd, 0x82, 0xf0, 0x01, 0x01, 0xe1, 0x54, + 0x42, 0x1c, 0x12, 0xf8, 0x01, 0x5c, 0x2d, 0x2d, 0x02, 0xf1, 0xff, 0x36, + 0x10, 0x46, 0x06, 0xd0, 0x5d, 0x2d, 0xf1, 0xd0, 0x0d, 0xb9, 0x30, 0x46, + 0xee, 0xe7, 0x2b, 0x46, 0xef, 0xe7, 0x16, 0x78, 0x5d, 0x2e, 0xfa, 0xd0, + 0xb3, 0x42, 0xf8, 0xdc, 0x18, 0x46, 0x01, 0x30, 0x86, 0x42, 0x21, 0x54, + 0xfb, 0xdc, 0xd8, 0x43, 0x30, 0x44, 0x5d, 0x1c, 0xb3, 0x42, 0xa8, 0xbf, + 0x00, 0x20, 0x2b, 0x18, 0x02, 0x32, 0xde, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, + 0x3a, 0x4e, 0x86, 0x46, 0x8c, 0x46, 0x60, 0x46, 0x1c, 0xf8, 0x01, 0x4b, + 0xa5, 0x5d, 0x15, 0xf0, 0x08, 0x05, 0xf8, 0xd1, 0x2d, 0x2c, 0x33, 0xd1, + 0x9c, 0xf8, 0x00, 0x40, 0x4f, 0xf0, 0x01, 0x08, 0x00, 0xf1, 0x02, 0x0c, + 0x00, 0x2b, 0x5c, 0xd0, 0x10, 0x2b, 0x0c, 0xd1, 0x30, 0x2c, 0x0a, 0xd1, + 0x9c, 0xf8, 0x00, 0x00, 0x00, 0xf0, 0xdf, 0x00, 0x58, 0x28, 0x4d, 0xd1, + 0x9c, 0xf8, 0x01, 0x40, 0x10, 0x23, 0x0c, 0xf1, 0x02, 0x0c, 0x08, 0xf1, + 0x00, 0x47, 0x01, 0x3f, 0x00, 0x26, 0xb7, 0xfb, 0xf3, 0xf9, 0x30, 0x46, + 0x03, 0xfb, 0x19, 0x7a, 0xa4, 0xf1, 0x30, 0x05, 0x09, 0x2d, 0x18, 0xd8, + 0x2c, 0x46, 0xa3, 0x42, 0x24, 0xdd, 0x75, 0x1c, 0x07, 0xd0, 0x81, 0x45, + 0x1d, 0xd3, 0x01, 0xd1, 0xa2, 0x45, 0x1a, 0xdb, 0x00, 0xfb, 0x03, 0x40, + 0x01, 0x26, 0x1c, 0xf8, 0x01, 0x4b, 0xeb, 0xe7, 0x2b, 0x2c, 0x08, 0xbf, + 0x9c, 0xf8, 0x00, 0x40, 0xa8, 0x46, 0x08, 0xbf, 0x00, 0xf1, 0x02, 0x0c, + 0xc8, 0xe7, 0xa4, 0xf1, 0x41, 0x05, 0x19, 0x2d, 0x01, 0xd8, 0x37, 0x3c, + 0xe1, 0xe7, 0xa4, 0xf1, 0x61, 0x05, 0x19, 0x2d, 0x04, 0xd8, 0x57, 0x3c, + 0xdb, 0xe7, 0x4f, 0xf0, 0xff, 0x36, 0xe4, 0xe7, 0x73, 0x1c, 0x06, 0xd1, + 0x22, 0x23, 0xce, 0xf8, 0x00, 0x30, 0x38, 0x46, 0x42, 0xb9, 0xbd, 0xe8, + 0xf0, 0x87, 0xb8, 0xf1, 0x00, 0x0f, 0x00, 0xd0, 0x40, 0x42, 0x00, 0x2a, + 0xf7, 0xd0, 0x0e, 0xb1, 0x0c, 0xf1, 0xff, 0x31, 0x11, 0x60, 0xf2, 0xe7, + 0x30, 0x24, 0x00, 0x2b, 0xb3, 0xd1, 0x08, 0x23, 0xb1, 0xe7, 0x30, 0x2c, + 0xa4, 0xd0, 0x0a, 0x23, 0xad, 0xe7, 0x00, 0xbf, 0x0d, 0xf1, 0x01, 0x08, + 0xff, 0xf7, 0x84, 0xbf, 0x2d, 0xe9, 0xf0, 0x41, 0x0c, 0x46, 0x49, 0x6b, + 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, 0x1d, 0xd1, 0x4f, 0xf4, 0x80, 0x61, + 0xf1, 0xf7, 0xda, 0xff, 0x18, 0xb9, 0x4f, 0xf0, 0xff, 0x30, 0xbd, 0xe8, + 0xf0, 0x81, 0x4f, 0xf4, 0x80, 0x63, 0xa3, 0x63, 0x94, 0xf8, 0x46, 0x30, + 0x60, 0x63, 0x80, 0xf8, 0xff, 0x33, 0x94, 0xf8, 0x45, 0x30, 0x80, 0xf8, + 0xfe, 0x33, 0x94, 0xf8, 0x44, 0x30, 0x80, 0xf8, 0xfd, 0x33, 0x00, 0xf2, + 0xfd, 0x30, 0x20, 0x60, 0x00, 0x20, 0xe8, 0xe7, 0xa6, 0x6b, 0x77, 0x00, + 0x3a, 0x46, 0xf1, 0xf7, 0xb9, 0xff, 0x05, 0x46, 0x00, 0x28, 0xde, 0xd0, + 0x00, 0xeb, 0x06, 0x08, 0x01, 0x46, 0x32, 0x46, 0x40, 0x46, 0xfe, 0xf7, + 0x53, 0xfd, 0xc4, 0xe9, 0x0d, 0x57, 0xc4, 0xf8, 0x00, 0x80, 0xe9, 0xe7, + 0x02, 0x4b, 0x0a, 0x46, 0x01, 0x46, 0x18, 0x68, 0xf1, 0xf7, 0xa0, 0xbf, + 0x10, 0x03, 0x00, 0x24, 0x70, 0xb5, 0x0e, 0x46, 0x14, 0x46, 0x05, 0x46, + 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xfe, 0xf7, 0x73, 0xf8, 0x14, 0x4b, + 0x9c, 0x42, 0x1a, 0xd1, 0x6c, 0x68, 0x63, 0x6e, 0xd8, 0x07, 0x05, 0xd4, + 0xa3, 0x89, 0x99, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, 0x69, 0xfc, + 0x22, 0x46, 0x28, 0x46, 0x31, 0x46, 0x00, 0xf0, 0xa1, 0xf8, 0x63, 0x6e, + 0xda, 0x07, 0x05, 0x46, 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, + 0xa0, 0x6d, 0xfe, 0xf7, 0x5c, 0xfc, 0x28, 0x46, 0x70, 0xbd, 0x06, 0x4b, + 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, 0xe0, 0xe7, 0x04, 0x4b, 0x9c, 0x42, + 0x08, 0xbf, 0xec, 0x68, 0xdb, 0xe7, 0x00, 0xbf, 0x2c, 0xf0, 0x01, 0x08, + 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, 0x02, 0x4b, 0x0a, 0x46, + 0x01, 0x46, 0x18, 0x68, 0xff, 0xf7, 0xc2, 0xbf, 0x10, 0x03, 0x00, 0x24, + 0x2d, 0xe9, 0xf8, 0x43, 0x08, 0x9c, 0x89, 0x46, 0x17, 0x46, 0x02, 0xfb, + 0x03, 0xf8, 0x05, 0x46, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xfe, 0xf7, + 0x2f, 0xf8, 0x26, 0x4b, 0x9c, 0x42, 0x23, 0xd1, 0x6c, 0x68, 0x63, 0x6e, + 0xde, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x98, 0x05, 0x02, 0xd4, 0xa0, 0x6d, + 0xfe, 0xf7, 0x25, 0xfc, 0xa3, 0x89, 0x19, 0x07, 0x20, 0xd5, 0x23, 0x69, + 0xf3, 0xb1, 0x00, 0x26, 0x46, 0x45, 0x29, 0xd0, 0xa0, 0x68, 0x19, 0xf8, + 0x06, 0x10, 0x01, 0x38, 0x00, 0x28, 0xa0, 0x60, 0x04, 0xda, 0xa3, 0x69, + 0x98, 0x42, 0x19, 0xdb, 0x0a, 0x29, 0x17, 0xd0, 0x23, 0x68, 0x5a, 0x1c, + 0x22, 0x60, 0x19, 0x70, 0x01, 0x36, 0xeb, 0xe7, 0x13, 0x4b, 0x9c, 0x42, + 0x01, 0xd1, 0xac, 0x68, 0xd7, 0xe7, 0x12, 0x4b, 0x9c, 0x42, 0x08, 0xbf, + 0xec, 0x68, 0xd2, 0xe7, 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x8c, 0xf9, + 0x00, 0x28, 0xda, 0xd0, 0x00, 0x26, 0x05, 0xe0, 0x22, 0x46, 0x28, 0x46, + 0x00, 0xf0, 0x32, 0xf9, 0x01, 0x30, 0xe5, 0xd1, 0x63, 0x6e, 0xda, 0x07, + 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, + 0xec, 0xfb, 0xb6, 0xfb, 0xf7, 0xf0, 0xbd, 0xe8, 0xf8, 0x83, 0x00, 0xbf, + 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, + 0x07, 0xb5, 0x00, 0x93, 0x13, 0x46, 0x0a, 0x46, 0x01, 0x46, 0x03, 0x48, + 0x00, 0x68, 0xff, 0xf7, 0x97, 0xff, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, + 0x10, 0x03, 0x00, 0x24, 0x30, 0xb5, 0x01, 0x39, 0x00, 0x24, 0xa2, 0x42, + 0x01, 0xd1, 0x00, 0x20, 0x05, 0xe0, 0x03, 0x5d, 0x01, 0x34, 0x0d, 0x5d, + 0xab, 0x42, 0xf6, 0xd0, 0x58, 0x1b, 0x30, 0xbd, 0x70, 0xb5, 0x0d, 0x46, + 0x14, 0x46, 0x06, 0x46, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xfd, 0xf7, + 0xb7, 0xff, 0x1c, 0x4b, 0x9c, 0x42, 0x24, 0xd1, 0x74, 0x68, 0x63, 0x6e, + 0xd8, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x99, 0x05, 0x02, 0xd4, 0xa0, 0x6d, + 0xfe, 0xf7, 0xad, 0xfb, 0xa3, 0x68, 0x01, 0x3b, 0x00, 0x2b, 0xa3, 0x60, + 0x05, 0xda, 0xa2, 0x69, 0x93, 0x42, 0x1c, 0xdb, 0xeb, 0xb2, 0x0a, 0x2b, + 0x19, 0xd0, 0x23, 0x68, 0x5a, 0x1c, 0x22, 0x60, 0x1d, 0x70, 0xed, 0xb2, + 0x63, 0x6e, 0xda, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, + 0xa0, 0x6d, 0xfe, 0xf7, 0x96, 0xfb, 0x28, 0x46, 0x70, 0xbd, 0x09, 0x4b, + 0x9c, 0x42, 0x01, 0xd1, 0xb4, 0x68, 0xd6, 0xe7, 0x07, 0x4b, 0x9c, 0x42, + 0x08, 0xbf, 0xf4, 0x68, 0xd1, 0xe7, 0x29, 0x46, 0x22, 0x46, 0x30, 0x46, + 0x00, 0xf0, 0xc0, 0xf8, 0x05, 0x46, 0xe3, 0xe7, 0x2c, 0xf0, 0x01, 0x08, + 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, 0x70, 0xb5, 0x0e, 0x46, + 0x05, 0x46, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xfd, 0xf7, 0x70, 0xff, + 0xab, 0x69, 0xac, 0x68, 0x13, 0xb9, 0x28, 0x46, 0xfd, 0xf7, 0x6a, 0xff, + 0x2c, 0x4b, 0x9c, 0x42, 0x20, 0xd1, 0x6c, 0x68, 0x63, 0x6e, 0xdb, 0x07, + 0x05, 0xd4, 0xa3, 0x89, 0x98, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, + 0x60, 0xfb, 0xa3, 0x89, 0x19, 0x07, 0x1d, 0xd5, 0x23, 0x69, 0xdb, 0xb1, + 0x01, 0x3e, 0xa3, 0x68, 0x16, 0xf8, 0x01, 0x1f, 0x01, 0x3b, 0xa3, 0x60, + 0x39, 0xbb, 0x00, 0x2b, 0x38, 0xda, 0x22, 0x46, 0x0a, 0x21, 0x28, 0x46, + 0x00, 0xf0, 0x8a, 0xf8, 0x01, 0x30, 0x11, 0xd0, 0x0a, 0x25, 0x11, 0xe0, + 0x1b, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, 0xda, 0xe7, 0x1a, 0x4b, + 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xd5, 0xe7, 0x21, 0x46, 0x28, 0x46, + 0x00, 0xf0, 0xca, 0xf8, 0x00, 0x28, 0xdd, 0xd0, 0x4f, 0xf0, 0xff, 0x35, + 0x63, 0x6e, 0xda, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, + 0xa0, 0x6d, 0xfe, 0xf7, 0x30, 0xfb, 0x28, 0x46, 0x70, 0xbd, 0x00, 0x2b, + 0x04, 0xda, 0xa2, 0x69, 0x9a, 0x42, 0x06, 0xdc, 0x0a, 0x29, 0x04, 0xd0, + 0x23, 0x68, 0x5a, 0x1c, 0x22, 0x60, 0x19, 0x70, 0xc5, 0xe7, 0x22, 0x46, + 0x28, 0x46, 0x00, 0xf0, 0x59, 0xf8, 0x01, 0x30, 0xbf, 0xd1, 0xdf, 0xe7, + 0x23, 0x68, 0x0a, 0x25, 0x5a, 0x1c, 0x22, 0x60, 0x1d, 0x70, 0xdb, 0xe7, + 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, + 0x02, 0x4b, 0x01, 0x46, 0x18, 0x68, 0xff, 0xf7, 0x8d, 0xbf, 0x00, 0xbf, + 0x10, 0x03, 0x00, 0x24, 0xc9, 0xb2, 0x03, 0x46, 0x10, 0xf8, 0x01, 0x2b, + 0x1a, 0xb1, 0x8a, 0x42, 0xf9, 0xd1, 0x18, 0x46, 0x70, 0x47, 0x00, 0x29, + 0x18, 0xbf, 0x00, 0x23, 0xf9, 0xe7, 0x70, 0xb5, 0x03, 0x46, 0x1e, 0x46, + 0x13, 0xf8, 0x01, 0x4b, 0x44, 0xb1, 0x4a, 0x1e, 0x01, 0xe0, 0xa5, 0x42, + 0x04, 0xd0, 0x12, 0xf8, 0x01, 0x5f, 0x00, 0x2d, 0xf9, 0xd1, 0xf2, 0xe7, + 0x30, 0x1a, 0x70, 0xbd, 0x10, 0xb5, 0x01, 0x39, 0x03, 0x46, 0x32, 0xb1, + 0x11, 0xf8, 0x01, 0x4f, 0x03, 0xf8, 0x01, 0x4b, 0x01, 0x3a, 0x00, 0x2c, + 0xf7, 0xd1, 0x1a, 0x44, 0x00, 0x21, 0x93, 0x42, 0x00, 0xd1, 0x10, 0xbd, + 0x03, 0xf8, 0x01, 0x1b, 0xf9, 0xe7, 0x70, 0xb5, 0x03, 0x46, 0x1e, 0x46, + 0x13, 0xf8, 0x01, 0x4b, 0x3c, 0xb1, 0x4a, 0x1e, 0x01, 0xe0, 0xa5, 0x42, + 0xf7, 0xd0, 0x12, 0xf8, 0x01, 0x5f, 0x00, 0x2d, 0xf9, 0xd1, 0x30, 0x1a, + 0x70, 0xbd, 0x00, 0x00, 0xf8, 0xb5, 0x0e, 0x46, 0x14, 0x46, 0x05, 0x46, + 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xfd, 0xf7, 0xb7, 0xfe, 0x21, 0x4b, + 0x9c, 0x42, 0x2b, 0xd1, 0x6c, 0x68, 0xa3, 0x69, 0xa3, 0x60, 0xa3, 0x89, + 0x1a, 0x07, 0x2f, 0xd5, 0x23, 0x69, 0x6b, 0xb3, 0x23, 0x69, 0x20, 0x68, + 0xc0, 0x1a, 0x63, 0x69, 0xf6, 0xb2, 0x83, 0x42, 0x37, 0x46, 0x04, 0xdc, + 0x21, 0x46, 0x28, 0x46, 0xfd, 0xf7, 0xfa, 0xfd, 0x30, 0xbb, 0xa3, 0x68, + 0x01, 0x3b, 0xa3, 0x60, 0x23, 0x68, 0x5a, 0x1c, 0x22, 0x60, 0x1e, 0x70, + 0x63, 0x69, 0x01, 0x30, 0x83, 0x42, 0x04, 0xd0, 0xa3, 0x89, 0xdb, 0x07, + 0x06, 0xd5, 0x0a, 0x2e, 0x04, 0xd1, 0x21, 0x46, 0x28, 0x46, 0xfd, 0xf7, + 0xe5, 0xfd, 0x88, 0xb9, 0x38, 0x46, 0xf8, 0xbd, 0x0a, 0x4b, 0x9c, 0x42, + 0x01, 0xd1, 0xac, 0x68, 0xcf, 0xe7, 0x09, 0x4b, 0x9c, 0x42, 0x08, 0xbf, + 0xec, 0x68, 0xca, 0xe7, 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x0c, 0xf8, + 0x00, 0x28, 0xcb, 0xd0, 0x4f, 0xf0, 0xff, 0x37, 0xea, 0xe7, 0x00, 0xbf, + 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, + 0x32, 0x4b, 0x70, 0xb5, 0x1d, 0x68, 0x06, 0x46, 0x0c, 0x46, 0x25, 0xb1, + 0xab, 0x69, 0x13, 0xb9, 0x28, 0x46, 0xfd, 0xf7, 0x63, 0xfe, 0x2e, 0x4b, + 0x9c, 0x42, 0x0f, 0xd1, 0x6c, 0x68, 0xa3, 0x89, 0xb4, 0xf9, 0x0c, 0x20, + 0x19, 0x07, 0x2c, 0xd4, 0xdd, 0x06, 0x11, 0xd4, 0x09, 0x23, 0x33, 0x60, + 0x42, 0xf0, 0x40, 0x03, 0xa3, 0x81, 0x4f, 0xf0, 0xff, 0x30, 0x3e, 0xe0, + 0x25, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, 0xeb, 0xe7, 0x24, 0x4b, + 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xe6, 0xe7, 0x58, 0x07, 0x12, 0xd5, + 0x61, 0x6b, 0x41, 0xb1, 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, 0x02, 0xd0, + 0x30, 0x46, 0xf1, 0xf7, 0x5f, 0xfd, 0x00, 0x23, 0x63, 0x63, 0xa3, 0x89, + 0x23, 0xf0, 0x24, 0x03, 0xa3, 0x81, 0x00, 0x23, 0x63, 0x60, 0x23, 0x69, + 0x23, 0x60, 0xa3, 0x89, 0x43, 0xf0, 0x08, 0x03, 0xa3, 0x81, 0x23, 0x69, + 0x4b, 0xb9, 0xa3, 0x89, 0x03, 0xf4, 0x20, 0x73, 0xb3, 0xf5, 0x00, 0x7f, + 0x03, 0xd0, 0x21, 0x46, 0x30, 0x46, 0xfe, 0xf7, 0x4b, 0xfa, 0xa0, 0x89, + 0xb4, 0xf9, 0x0c, 0x20, 0x10, 0xf0, 0x01, 0x03, 0x0a, 0xd0, 0x00, 0x23, + 0xa3, 0x60, 0x63, 0x69, 0x5b, 0x42, 0xa3, 0x61, 0x23, 0x69, 0x43, 0xb9, + 0x10, 0xf0, 0x80, 0x00, 0xba, 0xd1, 0x70, 0xbd, 0x81, 0x07, 0x58, 0xbf, + 0x63, 0x69, 0xa3, 0x60, 0xf4, 0xe7, 0x00, 0x20, 0xf7, 0xe7, 0x00, 0xbf, + 0x10, 0x03, 0x00, 0x24, 0x2c, 0xf0, 0x01, 0x08, 0x4c, 0xf0, 0x01, 0x08, + 0x0c, 0xf0, 0x01, 0x08, 0x7b, 0xb9, 0x72, 0xb9, 0x00, 0x29, 0xbe, 0xbf, + 0x00, 0x20, 0x4f, 0xf0, 0x00, 0x41, 0x06, 0xe0, 0x08, 0xbf, 0x00, 0x28, + 0x1c, 0xbf, 0x6f, 0xf0, 0x00, 0x41, 0x4f, 0xf0, 0xff, 0x30, 0x00, 0xf0, + 0xa1, 0xb9, 0xad, 0xf1, 0x08, 0x0c, 0x6d, 0xe9, 0x04, 0xce, 0x00, 0x29, + 0x09, 0xdb, 0x00, 0x2b, 0x1a, 0xdb, 0x00, 0xf0, 0x35, 0xf8, 0xdd, 0xf8, + 0x04, 0xe0, 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, 0x70, 0x47, 0x40, 0x42, + 0x61, 0xeb, 0x41, 0x01, 0x00, 0x2b, 0x1b, 0xdb, 0x00, 0xf0, 0x28, 0xf8, + 0xdd, 0xf8, 0x04, 0xe0, 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, 0x40, 0x42, + 0x61, 0xeb, 0x41, 0x01, 0x52, 0x42, 0x63, 0xeb, 0x43, 0x03, 0x70, 0x47, + 0x52, 0x42, 0x63, 0xeb, 0x43, 0x03, 0x00, 0xf0, 0x17, 0xf8, 0xdd, 0xf8, + 0x04, 0xe0, 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, 0x40, 0x42, 0x61, 0xeb, + 0x41, 0x01, 0x70, 0x47, 0x52, 0x42, 0x63, 0xeb, 0x43, 0x03, 0x00, 0xf0, + 0x09, 0xf8, 0xdd, 0xf8, 0x04, 0xe0, 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, + 0x52, 0x42, 0x63, 0xeb, 0x43, 0x03, 0x70, 0x47, 0x2d, 0xe9, 0xf0, 0x47, + 0x08, 0x9d, 0x04, 0x46, 0x8c, 0x46, 0x00, 0x2b, 0x40, 0xf0, 0x83, 0x80, + 0x8a, 0x42, 0x17, 0x46, 0x47, 0xd9, 0xb2, 0xfa, 0x82, 0xf2, 0x42, 0xb1, + 0xc2, 0xf1, 0x20, 0x00, 0x24, 0xfa, 0x00, 0xf0, 0x91, 0x40, 0x97, 0x40, + 0x40, 0xea, 0x01, 0x0c, 0x94, 0x40, 0x4f, 0xea, 0x17, 0x48, 0x23, 0x0c, + 0xbc, 0xfb, 0xf8, 0xf6, 0x1f, 0xfa, 0x87, 0xfe, 0x08, 0xfb, 0x16, 0xc1, + 0x43, 0xea, 0x01, 0x43, 0x06, 0xfb, 0x0e, 0xf1, 0x99, 0x42, 0x09, 0xd9, + 0xfb, 0x18, 0x06, 0xf1, 0xff, 0x30, 0x80, 0xf0, 0x19, 0x81, 0x99, 0x42, + 0x40, 0xf2, 0x16, 0x81, 0x02, 0x3e, 0x3b, 0x44, 0x5b, 0x1a, 0xa4, 0xb2, + 0xb3, 0xfb, 0xf8, 0xf0, 0x08, 0xfb, 0x10, 0x33, 0x44, 0xea, 0x03, 0x44, + 0x00, 0xfb, 0x0e, 0xfe, 0xa6, 0x45, 0x09, 0xd9, 0x3c, 0x19, 0x00, 0xf1, + 0xff, 0x33, 0x80, 0xf0, 0x05, 0x81, 0xa6, 0x45, 0x40, 0xf2, 0x02, 0x81, + 0x02, 0x38, 0x3c, 0x44, 0x40, 0xea, 0x06, 0x40, 0xa4, 0xeb, 0x0e, 0x04, + 0x00, 0x26, 0x1d, 0xb1, 0xd4, 0x40, 0x00, 0x23, 0xc5, 0xe9, 0x00, 0x43, + 0x31, 0x46, 0xbd, 0xe8, 0xf0, 0x87, 0x02, 0xb9, 0xff, 0xde, 0xb2, 0xfa, + 0x82, 0xf2, 0x00, 0x2a, 0x50, 0xd1, 0xcb, 0x1b, 0x4f, 0xea, 0x17, 0x4e, + 0x1f, 0xfa, 0x87, 0xf8, 0x01, 0x26, 0xb3, 0xfb, 0xfe, 0xfc, 0x21, 0x0c, + 0x0e, 0xfb, 0x1c, 0x33, 0x41, 0xea, 0x03, 0x41, 0x08, 0xfb, 0x0c, 0xf3, + 0x8b, 0x42, 0x07, 0xd9, 0x79, 0x18, 0x0c, 0xf1, 0xff, 0x30, 0x02, 0xd2, + 0x8b, 0x42, 0x00, 0xf2, 0xe9, 0x80, 0x84, 0x46, 0xc9, 0x1a, 0xa3, 0xb2, + 0xb1, 0xfb, 0xfe, 0xf0, 0x0e, 0xfb, 0x10, 0x11, 0x43, 0xea, 0x01, 0x44, + 0x08, 0xfb, 0x00, 0xf8, 0xa0, 0x45, 0x07, 0xd9, 0x3c, 0x19, 0x00, 0xf1, + 0xff, 0x33, 0x02, 0xd2, 0xa0, 0x45, 0x00, 0xf2, 0xd9, 0x80, 0x18, 0x46, + 0xa4, 0xeb, 0x08, 0x04, 0x40, 0xea, 0x0c, 0x40, 0xbf, 0xe7, 0x8b, 0x42, + 0x09, 0xd9, 0x00, 0x2d, 0x00, 0xf0, 0xb1, 0x80, 0x00, 0x26, 0xc5, 0xe9, + 0x00, 0x01, 0x30, 0x46, 0x31, 0x46, 0xbd, 0xe8, 0xf0, 0x87, 0xb3, 0xfa, + 0x83, 0xf6, 0x00, 0x2e, 0x4a, 0xd1, 0x8b, 0x42, 0x02, 0xd3, 0x82, 0x42, + 0x00, 0xf2, 0xb8, 0x80, 0x84, 0x1a, 0x61, 0xeb, 0x03, 0x01, 0x01, 0x20, + 0x8c, 0x46, 0x00, 0x2d, 0xa8, 0xd0, 0xc5, 0xe9, 0x00, 0x4c, 0xa5, 0xe7, + 0xc2, 0xf1, 0x20, 0x03, 0x20, 0xfa, 0x03, 0xf6, 0x97, 0x40, 0x01, 0xfa, + 0x02, 0xf0, 0x4f, 0xea, 0x17, 0x4e, 0xd9, 0x40, 0x30, 0x43, 0x03, 0x0c, + 0xb1, 0xfb, 0xfe, 0xf6, 0x1f, 0xfa, 0x87, 0xf8, 0x0e, 0xfb, 0x16, 0x11, + 0x43, 0xea, 0x01, 0x43, 0x06, 0xfb, 0x08, 0xf1, 0x99, 0x42, 0x04, 0xfa, + 0x02, 0xf4, 0x09, 0xd9, 0xfb, 0x18, 0x06, 0xf1, 0xff, 0x3c, 0x80, 0xf0, + 0x8d, 0x80, 0x99, 0x42, 0x40, 0xf2, 0x8a, 0x80, 0x02, 0x3e, 0x3b, 0x44, + 0x5b, 0x1a, 0x81, 0xb2, 0xb3, 0xfb, 0xfe, 0xf0, 0x0e, 0xfb, 0x10, 0x33, + 0x41, 0xea, 0x03, 0x41, 0x00, 0xfb, 0x08, 0xf3, 0x8b, 0x42, 0x07, 0xd9, + 0x79, 0x18, 0x00, 0xf1, 0xff, 0x3c, 0x73, 0xd2, 0x8b, 0x42, 0x71, 0xd9, + 0x02, 0x38, 0x39, 0x44, 0xcb, 0x1a, 0x40, 0xea, 0x06, 0x46, 0x78, 0xe7, + 0xc6, 0xf1, 0x20, 0x0c, 0x03, 0xfa, 0x06, 0xf4, 0x22, 0xfa, 0x0c, 0xf3, + 0x1c, 0x43, 0x20, 0xfa, 0x0c, 0xf7, 0x01, 0xfa, 0x06, 0xf3, 0x4f, 0xea, + 0x14, 0x4e, 0x21, 0xfa, 0x0c, 0xf1, 0x1f, 0x43, 0x3b, 0x0c, 0xb1, 0xfb, + 0xfe, 0xf9, 0x1f, 0xfa, 0x84, 0xf8, 0x0e, 0xfb, 0x19, 0x11, 0x43, 0xea, + 0x01, 0x41, 0x09, 0xfb, 0x08, 0xfa, 0x8a, 0x45, 0x02, 0xfa, 0x06, 0xf2, + 0x00, 0xfa, 0x06, 0xf3, 0x08, 0xd9, 0x61, 0x18, 0x09, 0xf1, 0xff, 0x30, + 0x48, 0xd2, 0x8a, 0x45, 0x46, 0xd9, 0xa9, 0xf1, 0x02, 0x09, 0x21, 0x44, + 0xa1, 0xeb, 0x0a, 0x01, 0xbf, 0xb2, 0xb1, 0xfb, 0xfe, 0xf0, 0x0e, 0xfb, + 0x10, 0x11, 0x47, 0xea, 0x01, 0x47, 0x00, 0xfb, 0x08, 0xf8, 0xb8, 0x45, + 0x07, 0xd9, 0xe7, 0x19, 0x00, 0xf1, 0xff, 0x31, 0x2e, 0xd2, 0xb8, 0x45, + 0x2c, 0xd9, 0x02, 0x38, 0x27, 0x44, 0x40, 0xea, 0x09, 0x40, 0xa7, 0xeb, + 0x08, 0x07, 0xa0, 0xfb, 0x02, 0x89, 0x4f, 0x45, 0xc6, 0x46, 0x49, 0x46, + 0x1a, 0xd3, 0x17, 0xd0, 0x5d, 0xb1, 0xb3, 0xeb, 0x0e, 0x02, 0x67, 0xeb, + 0x01, 0x07, 0x07, 0xfa, 0x0c, 0xfc, 0xf2, 0x40, 0x4c, 0xea, 0x02, 0x02, + 0xf7, 0x40, 0xc5, 0xe9, 0x00, 0x27, 0x00, 0x26, 0x31, 0x46, 0xbd, 0xe8, + 0xf0, 0x87, 0x2e, 0x46, 0x28, 0x46, 0x0b, 0xe7, 0x06, 0x46, 0xe9, 0xe6, + 0x18, 0x46, 0xfd, 0xe6, 0x43, 0x45, 0xe5, 0xd2, 0xb8, 0xeb, 0x02, 0x0e, + 0x69, 0xeb, 0x04, 0x01, 0x01, 0x38, 0xdf, 0xe7, 0x08, 0x46, 0xd2, 0xe7, + 0x60, 0x46, 0x8d, 0xe7, 0x81, 0x46, 0xb9, 0xe7, 0x66, 0x46, 0x75, 0xe7, + 0x30, 0x46, 0x4a, 0xe7, 0xac, 0xf1, 0x02, 0x0c, 0x39, 0x44, 0x13, 0xe7, + 0x02, 0x38, 0x3c, 0x44, 0x24, 0xe7, 0x00, 0xbf, 0x70, 0x47, 0x00, 0xbf, + 0x53, 0xb9, 0x4a, 0xb9, 0x00, 0x29, 0x08, 0xbf, 0x00, 0x28, 0x1c, 0xbf, + 0x4f, 0xf0, 0xff, 0x31, 0x4f, 0xf0, 0xff, 0x30, 0xff, 0xf7, 0xf2, 0xbf, + 0xad, 0xf1, 0x08, 0x0c, 0x6d, 0xe9, 0x04, 0xce, 0xff, 0xf7, 0x8a, 0xfe, + 0xdd, 0xf8, 0x04, 0xe0, 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, 0x70, 0x47, + 0x43, 0x08, 0x03, 0xf0, 0x55, 0x33, 0xc0, 0x1a, 0x83, 0x08, 0x03, 0xf0, + 0x33, 0x33, 0x00, 0xf0, 0x33, 0x30, 0x18, 0x44, 0x00, 0xeb, 0x10, 0x10, + 0x00, 0xf0, 0x0f, 0x30, 0x00, 0xeb, 0x00, 0x20, 0x00, 0xeb, 0x00, 0x40, + 0x00, 0x0e, 0x70, 0x47, 0xf8, 0xb5, 0x00, 0xbf, 0xf8, 0xbc, 0x08, 0xbc, + 0x9e, 0x46, 0x70, 0x47, 0xf8, 0xb5, 0x00, 0xbf, 0xf8, 0xbc, 0x08, 0xbc, + 0x9e, 0x46, 0x70, 0x47, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, + 0x20, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x0a, 0x00, 0x49, 0x6e, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x20, 0x61, 0x6c, 0x74, 0x20, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x00, 0x50, 0x69, 0x6e, 0x6d, + 0x61, 0x70, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x72, + 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x2e, 0x00, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, + 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x00, 0x65, 0x71, 0x75, 0x65, + 0x75, 0x65, 0x00, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x6d, + 0x75, 0x74, 0x65, 0x78, 0x00, 0x45, 0x2d, 0x52, 0x54, 0x43, 0x53, 0x65, + 0x74, 0x42, 0x4b, 0x50, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x00, 0x45, 0x2d, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x72, + 0x65, 0x61, 0x64, 0x3a, 0x20, 0x66, 0x61, 0x5f, 0x69, 0x64, 0x20, 0x25, + 0x64, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x30, 0x78, 0x25, + 0x78, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x30, 0x78, 0x25, 0x78, 0x0a, 0x00, + 0x45, 0x2d, 0x52, 0x65, 0x61, 0x64, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x3a, 0x20, 0x66, 0x61, 0x5f, 0x69, 0x64, 0x20, 0x25, 0x64, 0x20, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x30, 0x78, 0x25, 0x78, 0x20, + 0x6c, 0x65, 0x6e, 0x20, 0x30, 0x78, 0x25, 0x78, 0x0a, 0x00, 0x4d, 0x43, + 0x55, 0x42, 0x6f, 0x6f, 0x74, 0x5f, 0x45, 0x43, 0x49, 0x45, 0x53, 0x5f, + 0x76, 0x31, 0x00, 0x45, 0x2d, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x61, + 0x72, 0x65, 0x61, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x75, 0x6e, + 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x69, 0x64, 0x20, 0x25, 0x64, 0x0a, + 0x00, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x00, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x00, 0x45, 0x2d, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x25, 0x73, + 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x21, 0x0a, 0x00, 0x49, 0x2d, 0x53, + 0x77, 0x61, 0x70, 0x20, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x25, + 0x64, 0x20, 0x6f, 0x66, 0x20, 0x25, 0x64, 0x0a, 0x00, 0x57, 0x2d, 0x25, + 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x70, 0x65, 0x72, + 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x73, 0x77, 0x61, 0x70, 0x0a, 0x00, 0x49, 0x32, 0x43, 0x31, 0x32, 0x33, + 0x3a, 0x20, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x63, 0x6c, + 0x6f, 0x63, 0x6b, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x49, + 0x32, 0x43, 0x34, 0x3a, 0x20, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x00, 0x49, 0x32, 0x43, 0x3a, 0x20, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, + 0x77, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, + 0x49, 0x32, 0x43, 0x3a, 0x20, 0x61, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, + 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, + 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, + 0x64, 0x00, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x00, 0x53, 0x48, 0x41, + 0x32, 0x32, 0x34, 0x00, 0x01, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x04, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x08, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x10, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x20, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x00, 0x04, 0x08, + 0x10, 0x20, 0x40, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, 0x06, 0x07, 0x08, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, + 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, + 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, + 0x04, 0x00, 0x06, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x10, 0x00, + 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x75, 0xb3, 0x00, 0x08, 0x89, 0xb3, 0x00, 0x08, + 0x69, 0x89, 0x00, 0x08, 0x41, 0x89, 0x00, 0x08, 0x0d, 0xdf, 0x00, 0x08, + 0xdd, 0xc0, 0x00, 0x08, 0x05, 0x89, 0x00, 0x08, 0xcf, 0x88, 0x00, 0x08, + 0xff, 0x4a, 0x01, 0x08, 0x01, 0x84, 0x00, 0x08, 0xb3, 0x84, 0x00, 0x08, + 0xb9, 0x88, 0x00, 0x08, 0xa1, 0x88, 0x00, 0x08, 0xa3, 0x84, 0x00, 0x08, + 0x9d, 0x84, 0x00, 0x08, 0xf9, 0x49, 0x01, 0x08, 0x99, 0x49, 0x01, 0x08, + 0x07, 0x84, 0x00, 0x08, 0x95, 0x84, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd5, 0xe3, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf1, 0xa9, 0x00, 0x08, 0x25, 0xaa, 0x00, 0x08, + 0x99, 0xc2, 0x00, 0x08, 0x5d, 0xc2, 0x00, 0x08, 0xb7, 0xc9, 0x00, 0x08, + 0x41, 0x79, 0x00, 0x08, 0x07, 0xc9, 0x00, 0x08, 0x5f, 0x79, 0x00, 0x08, + 0x0d, 0xa8, 0x00, 0x08, 0xd7, 0x7c, 0x00, 0x08, 0x85, 0xa9, 0x00, 0x08, + 0x47, 0x79, 0x00, 0x08, 0x97, 0xc6, 0x00, 0x08, 0x9b, 0xc0, 0x00, 0x08, + 0xd3, 0xa2, 0x00, 0x08, 0xb7, 0xbe, 0x00, 0x08, 0x91, 0xbe, 0x00, 0x08, + 0x3d, 0x79, 0x00, 0x08, 0xd9, 0xad, 0x00, 0x08, 0xbd, 0x7c, 0x00, 0x08, + 0x4d, 0x79, 0x00, 0x08, 0xa3, 0x7c, 0x00, 0x08, 0x71, 0xb2, 0x00, 0x08, + 0xe1, 0xc5, 0x00, 0x08, 0x39, 0x85, 0x00, 0x08, 0xbb, 0xaf, 0x00, 0x08, + 0x75, 0xaf, 0x00, 0x08, 0x89, 0x7c, 0x00, 0x08, 0x55, 0xaf, 0x00, 0x08, + 0xd9, 0xc2, 0x00, 0x08, 0xa9, 0xbd, 0x00, 0x08, 0xc9, 0xb3, 0x00, 0x08, + 0x41, 0xaa, 0x00, 0x08, 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x1d, 0xaa, 0x00, 0x08, 0x37, 0xaa, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd5, 0xe3, 0x00, 0x08, 0x41, 0x79, 0x00, 0x08, 0x47, 0x79, 0x00, 0x08, + 0x41, 0x79, 0x00, 0x08, 0x41, 0x79, 0x00, 0x08, 0x5f, 0x79, 0x00, 0x08, + 0x41, 0x79, 0x00, 0x08, 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd5, 0xe3, 0x00, 0x08, 0x41, 0x79, 0x00, 0x08, 0x47, 0x79, 0x00, 0x08, + 0x41, 0x79, 0x00, 0x08, 0x41, 0x79, 0x00, 0x08, 0x5f, 0x79, 0x00, 0x08, + 0x41, 0x79, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x81, 0xbb, 0x00, 0x08, 0xbd, 0xbb, 0x00, 0x08, 0x99, 0xc2, 0x00, 0x08, + 0x5d, 0xc2, 0x00, 0x08, 0x99, 0xba, 0x00, 0x08, 0x41, 0x79, 0x00, 0x08, + 0x11, 0xb9, 0x00, 0x08, 0xc9, 0xb9, 0x00, 0x08, 0xa5, 0xb8, 0x00, 0x08, + 0xd9, 0xbb, 0x00, 0x08, 0x49, 0xbb, 0x00, 0x08, 0x47, 0x79, 0x00, 0x08, + 0xb7, 0xc3, 0x00, 0x08, 0x49, 0xb8, 0x00, 0x08, 0x11, 0xb8, 0x00, 0x08, + 0xd9, 0xb7, 0x00, 0x08, 0xab, 0xb7, 0x00, 0x08, 0x3d, 0x79, 0x00, 0x08, + 0x55, 0xb7, 0x00, 0x08, 0x35, 0xb7, 0x00, 0x08, 0x4d, 0x79, 0x00, 0x08, + 0x05, 0xb7, 0x00, 0x08, 0x1b, 0xb6, 0x00, 0x08, 0x2b, 0xc3, 0x00, 0x08, + 0xdd, 0xb5, 0x00, 0x08, 0xcd, 0xb4, 0x00, 0x08, 0x67, 0xb4, 0x00, 0x08, + 0x47, 0xb4, 0x00, 0x08, 0x0d, 0xb4, 0x00, 0x08, 0xd9, 0xc2, 0x00, 0x08, + 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xbb, 0x00, 0x08, + 0xcf, 0xbb, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0xe8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0xf8, 0x00, 0x08, 0xfd, 0xf8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd9, 0xcb, 0x00, 0x08, 0x5d, 0xcc, 0x00, 0x08, + 0x77, 0xc2, 0x95, 0xf3, 0x60, 0xd2, 0xef, 0x7f, 0x35, 0x52, 0x50, 0x0f, + 0x2c, 0xb6, 0x79, 0x80, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x00, + 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x00, 0x2a, 0x86, 0x48, 0xce, + 0x3d, 0x03, 0x01, 0x07, 0x00, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, + 0x07, 0x00, 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0xe6, 0xd4, 0x01, 0x08, 0x06, 0x20, 0x40, 0x00, + 0x60, 0xd9, 0x01, 0x08, 0x10, 0x0b, 0x02, 0x24, 0x45, 0x08, 0x00, 0x08, + 0x39, 0x08, 0x00, 0x08, 0xe9, 0x07, 0x00, 0x08, 0xd9, 0x07, 0x00, 0x08, + 0x1d, 0x08, 0x00, 0x08, 0xfd, 0x07, 0x00, 0x08, 0x81, 0xdf, 0x00, 0x08, + 0x91, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x51, 0x53, 0x50, 0x49, + 0x46, 0x00, 0x46, 0x4c, 0x41, 0x53, 0x48, 0x49, 0x41, 0x50, 0x00, 0x2f, + 0x00, 0x2e, 0x2e, 0x00, 0x46, 0x41, 0x54, 0x33, 0x32, 0x20, 0x20, 0x20, + 0x00, 0x2a, 0x2b, 0x2c, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x5b, 0x5d, 0x7c, + 0x22, 0x3f, 0x7f, 0x00, 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x66, 0x73, + 0x00, 0x53, 0x46, 0x44, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xff, + 0xfb, 0xfe, 0xec, 0xea, 0xf3, 0xef, 0xf7, 0xf3, 0xed, 0xed, 0xea, 0xfb, + 0x8c, 0xf0, 0xf4, 0xe9, 0xea, 0x80, 0x9a, 0x45, 0x41, 0x8e, 0x41, 0x8f, + 0x80, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8e, 0x8f, 0x90, 0x92, 0x92, + 0x4f, 0x99, 0x4f, 0x55, 0x55, 0x59, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, + 0x9f, 0x41, 0x49, 0x4f, 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, + 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, + 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, + 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, + 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x10, 0xb7, 0x1d, + 0xc8, 0x20, 0x6e, 0x3b, 0xac, 0x30, 0xd9, 0x26, 0x90, 0x41, 0xdc, 0x76, + 0xf4, 0x51, 0x6b, 0x6b, 0x58, 0x61, 0xb2, 0x4d, 0x3c, 0x71, 0x05, 0x50, + 0x20, 0x83, 0xb8, 0xed, 0x44, 0x93, 0x0f, 0xf0, 0xe8, 0xa3, 0xd6, 0xd6, + 0x8c, 0xb3, 0x61, 0xcb, 0xb0, 0xc2, 0x64, 0x9b, 0xd4, 0xd2, 0xd3, 0x86, + 0x78, 0xe2, 0x0a, 0xa0, 0x1c, 0xf2, 0xbd, 0xbd, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x00, 0x08, 0x77, 0x85, 0x00, 0x08, + 0x13, 0x81, 0x00, 0x08, 0x0b, 0x81, 0x00, 0x08, 0x03, 0x81, 0x00, 0x08, + 0xb9, 0x80, 0x00, 0x08, 0x6f, 0x80, 0x00, 0x08, 0x2f, 0x80, 0x00, 0x08, + 0xff, 0x4a, 0x01, 0x08, 0x3d, 0x7f, 0x00, 0x08, 0x35, 0x7f, 0x00, 0x08, + 0x1f, 0x7f, 0x00, 0x08, 0x05, 0x7f, 0x00, 0x08, 0xfd, 0x7e, 0x00, 0x08, + 0xeb, 0x7e, 0x00, 0x08, 0xe1, 0x7f, 0x00, 0x08, 0x93, 0x7f, 0x00, 0x08, + 0x45, 0x7f, 0x00, 0x08, 0xe3, 0x7e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x7b, 0x00, 0x08, 0xf9, 0x84, 0x00, 0x08, + 0x8f, 0x85, 0x00, 0x08, 0xb3, 0x7a, 0x00, 0x08, 0x9d, 0x7a, 0x00, 0x08, + 0x91, 0x7a, 0x00, 0x08, 0x85, 0x7a, 0x00, 0x08, 0x79, 0x7a, 0x00, 0x08, + 0xe5, 0x7a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x08, 0xe7, 0x84, 0x00, 0x08, 0xe3, 0x79, 0x00, 0x08, + 0xcd, 0x79, 0x00, 0x08, 0x9f, 0x79, 0x00, 0x08, 0xf9, 0x79, 0x00, 0x08, + 0xc1, 0x79, 0x00, 0x08, 0xb5, 0x79, 0x00, 0x08, 0x93, 0x79, 0x00, 0x08, + 0x87, 0x79, 0x00, 0x08, 0x7b, 0x79, 0x00, 0x08, 0x65, 0x79, 0x00, 0x08, + 0x17, 0xe1, 0x00, 0x08, 0x13, 0xe1, 0x00, 0x08, 0x27, 0xdf, 0x00, 0x08, + 0x27, 0xdf, 0x00, 0x08, 0x2d, 0xdf, 0x00, 0x08, 0x07, 0xe1, 0x00, 0x08, + 0x2b, 0x7a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x7b, 0x00, 0x08, 0xd5, 0x84, 0x00, 0x08, 0x8f, 0x85, 0x00, 0x08, + 0xcf, 0x7a, 0x00, 0x08, 0x9d, 0x7a, 0x00, 0x08, 0x91, 0x7a, 0x00, 0x08, + 0x85, 0x7a, 0x00, 0x08, 0x79, 0x7a, 0x00, 0x08, 0xe5, 0x7a, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x7a, 0x00, 0x08, + 0xc3, 0x84, 0x00, 0x08, 0xe3, 0x79, 0x00, 0x08, 0xcd, 0x79, 0x00, 0x08, + 0x9f, 0x79, 0x00, 0x08, 0x15, 0x7a, 0x00, 0x08, 0xc1, 0x79, 0x00, 0x08, + 0xb5, 0x79, 0x00, 0x08, 0x93, 0x79, 0x00, 0x08, 0x87, 0x79, 0x00, 0x08, + 0x7b, 0x79, 0x00, 0x08, 0x65, 0x79, 0x00, 0x08, 0x17, 0xe1, 0x00, 0x08, + 0x13, 0xe1, 0x00, 0x08, 0x27, 0xdf, 0x00, 0x08, 0x27, 0xdf, 0x00, 0x08, + 0x2d, 0xdf, 0x00, 0x08, 0x07, 0xe1, 0x00, 0x08, 0x2b, 0x7a, 0x00, 0x08, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, + 0x63, 0x64, 0x65, 0x66, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x00, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, 0x52, 0x54, + 0x58, 0x20, 0x56, 0x35, 0x2e, 0x35, 0x2e, 0x33, 0x00, 0x01, 0x02, 0x04, + 0x98, 0x2f, 0x8a, 0x42, 0x91, 0x44, 0x37, 0x71, 0xcf, 0xfb, 0xc0, 0xb5, + 0xa5, 0xdb, 0xb5, 0xe9, 0x5b, 0xc2, 0x56, 0x39, 0xf1, 0x11, 0xf1, 0x59, + 0xa4, 0x82, 0x3f, 0x92, 0xd5, 0x5e, 0x1c, 0xab, 0x98, 0xaa, 0x07, 0xd8, + 0x01, 0x5b, 0x83, 0x12, 0xbe, 0x85, 0x31, 0x24, 0xc3, 0x7d, 0x0c, 0x55, + 0x74, 0x5d, 0xbe, 0x72, 0xfe, 0xb1, 0xde, 0x80, 0xa7, 0x06, 0xdc, 0x9b, + 0x74, 0xf1, 0x9b, 0xc1, 0xc1, 0x69, 0x9b, 0xe4, 0x86, 0x47, 0xbe, 0xef, + 0xc6, 0x9d, 0xc1, 0x0f, 0xcc, 0xa1, 0x0c, 0x24, 0x6f, 0x2c, 0xe9, 0x2d, + 0xaa, 0x84, 0x74, 0x4a, 0xdc, 0xa9, 0xb0, 0x5c, 0xda, 0x88, 0xf9, 0x76, + 0x52, 0x51, 0x3e, 0x98, 0x6d, 0xc6, 0x31, 0xa8, 0xc8, 0x27, 0x03, 0xb0, + 0xc7, 0x7f, 0x59, 0xbf, 0xf3, 0x0b, 0xe0, 0xc6, 0x47, 0x91, 0xa7, 0xd5, + 0x51, 0x63, 0xca, 0x06, 0x67, 0x29, 0x29, 0x14, 0x85, 0x0a, 0xb7, 0x27, + 0x38, 0x21, 0x1b, 0x2e, 0xfc, 0x6d, 0x2c, 0x4d, 0x13, 0x0d, 0x38, 0x53, + 0x54, 0x73, 0x0a, 0x65, 0xbb, 0x0a, 0x6a, 0x76, 0x2e, 0xc9, 0xc2, 0x81, + 0x85, 0x2c, 0x72, 0x92, 0xa1, 0xe8, 0xbf, 0xa2, 0x4b, 0x66, 0x1a, 0xa8, + 0x70, 0x8b, 0x4b, 0xc2, 0xa3, 0x51, 0x6c, 0xc7, 0x19, 0xe8, 0x92, 0xd1, + 0x24, 0x06, 0x99, 0xd6, 0x85, 0x35, 0x0e, 0xf4, 0x70, 0xa0, 0x6a, 0x10, + 0x16, 0xc1, 0xa4, 0x19, 0x08, 0x6c, 0x37, 0x1e, 0x4c, 0x77, 0x48, 0x27, + 0xb5, 0xbc, 0xb0, 0x34, 0xb3, 0x0c, 0x1c, 0x39, 0x4a, 0xaa, 0xd8, 0x4e, + 0x4f, 0xca, 0x9c, 0x5b, 0xf3, 0x6f, 0x2e, 0x68, 0xee, 0x82, 0x8f, 0x74, + 0x6f, 0x63, 0xa5, 0x78, 0x14, 0x78, 0xc8, 0x84, 0x08, 0x02, 0xc7, 0x8c, + 0xfa, 0xff, 0xbe, 0x90, 0xeb, 0x6c, 0x50, 0xa4, 0xf7, 0xa3, 0xf9, 0xbe, + 0xf2, 0x78, 0x71, 0xc6, 0x29, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x2b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x27, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, + 0xd2, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x2f, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, + 0xd2, 0x0f, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x1b, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x2f, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, + 0xd2, 0x3b, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, + 0xd2, 0x23, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, + 0xd2, 0x3b, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, + 0xd2, 0x13, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, + 0xd2, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x1b, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x2f, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x2f, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, + 0xd2, 0x3b, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, + 0xd2, 0x23, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, + 0xd2, 0x3b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, + 0xd2, 0x13, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, + 0xd2, 0x1f, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, + 0xd2, 0x23, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd9, 0xde, 0x00, 0x08, 0xa9, 0xe3, 0x00, 0x08, 0x15, 0xe4, 0x00, 0x08, + 0xdd, 0xde, 0x00, 0x08, 0x1b, 0xdf, 0x00, 0x08, 0x0d, 0xdf, 0x00, 0x08, + 0x0d, 0xdf, 0x00, 0x08, 0x11, 0xdf, 0x00, 0x08, 0x5d, 0xe1, 0x00, 0x08, + 0x53, 0xe1, 0x00, 0x08, 0x15, 0xdf, 0x00, 0x08, 0x4d, 0xe1, 0x00, 0x08, + 0x17, 0xe1, 0x00, 0x08, 0x13, 0xe1, 0x00, 0x08, 0x27, 0xdf, 0x00, 0x08, + 0x27, 0xdf, 0x00, 0x08, 0xdd, 0xe3, 0x00, 0x08, 0x07, 0xe1, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xf9, 0x00, 0x08, + 0x51, 0xfa, 0x00, 0x08, 0x25, 0xf9, 0x00, 0x08, 0x11, 0xf9, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xe4, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0xe7, 0x00, 0x08, + 0x2f, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x00, 0x2f, 0x73, 0x74, 0x64, + 0x69, 0x6e, 0x00, 0x2f, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x00, 0x00, + 0x4b, 0x60, 0xd2, 0x27, 0x3e, 0x3c, 0xce, 0x3b, 0xf6, 0xb0, 0x53, 0xcc, + 0xb0, 0x06, 0x1d, 0x65, 0xbc, 0x86, 0x98, 0x76, 0x55, 0xbd, 0xeb, 0xb3, + 0xe7, 0x93, 0x3a, 0xaa, 0xd8, 0x35, 0xc6, 0x5a, 0x96, 0xc2, 0x98, 0xd8, + 0x45, 0x39, 0xa1, 0xf4, 0xa0, 0x33, 0xeb, 0x2d, 0x81, 0x7d, 0x03, 0x77, + 0xf2, 0x40, 0xa4, 0x63, 0xe5, 0xe6, 0xbc, 0xf8, 0x47, 0x42, 0x2c, 0xe1, + 0xf2, 0xd1, 0x17, 0x6b, 0xf5, 0x51, 0xbf, 0x37, 0x68, 0x40, 0xb6, 0xcb, + 0xce, 0x5e, 0x31, 0x6b, 0x57, 0x33, 0xce, 0x2b, 0x16, 0x9e, 0x0f, 0x7c, + 0x4a, 0xeb, 0xe7, 0x8e, 0x9b, 0x7f, 0x1a, 0xfe, 0xe2, 0x42, 0xe3, 0x4f, + 0x51, 0x25, 0x63, 0xfc, 0xc2, 0xca, 0xb9, 0xf3, 0x84, 0x9e, 0x17, 0xa7, + 0xad, 0xfa, 0xe6, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x53, 0x44, 0x43, 0x41, 0x52, 0x44, 0x00, 0x46, + 0x49, 0x4c, 0x45, 0x42, 0x44, 0x00, 0x44, 0x46, 0x55, 0x20, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x00, 0x44, 0x46, 0x55, 0x20, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x00, 0x41, 0x72, 0x64, 0x75, 0x69, + 0x6e, 0x6f, 0x20, 0x53, 0x41, 0x00, 0x50, 0x6f, 0x72, 0x74, 0x65, 0x6e, + 0x74, 0x61, 0x20, 0x48, 0x37, 0x20, 0x4d, 0x43, 0x55, 0x62, 0x6f, 0x6f, + 0x74, 0x00, 0x45, 0x2d, 0x52, 0x54, 0x43, 0x47, 0x65, 0x74, 0x42, 0x4b, + 0x50, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x00, 0x45, 0x2d, + 0x48, 0x41, 0x4c, 0x5f, 0x52, 0x54, 0x43, 0x5f, 0x49, 0x6e, 0x69, 0x74, + 0x00, 0x45, 0x2d, 0x52, 0x65, 0x61, 0x64, 0x3a, 0x69, 0x6e, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x20, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x45, + 0x2d, 0x52, 0x65, 0x61, 0x64, 0x3a, 0x66, 0x73, 0x65, 0x65, 0x6b, 0x00, + 0x45, 0x2d, 0x52, 0x65, 0x61, 0x64, 0x3a, 0x68, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x20, 0x25, 0x64, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x30, + 0x78, 0x25, 0x7a, 0x78, 0x0a, 0x00, 0x45, 0x2d, 0x45, 0x72, 0x61, 0x73, + 0x65, 0x3a, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x45, 0x2d, 0x45, 0x72, 0x61, 0x73, 0x65, + 0x3a, 0x66, 0x73, 0x65, 0x65, 0x6b, 0x00, 0x45, 0x2d, 0x45, 0x72, 0x61, + 0x73, 0x65, 0x3a, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x25, 0x64, + 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x30, 0x78, 0x25, 0x7a, 0x78, + 0x0a, 0x00, 0x45, 0x2d, 0x45, 0x72, 0x61, 0x73, 0x65, 0x3a, 0x66, 0x6c, + 0x75, 0x73, 0x68, 0x00, 0x45, 0x2d, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x3a, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x45, 0x2d, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x3a, 0x66, 0x73, 0x65, 0x65, 0x6b, 0x00, 0x45, 0x2d, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x3a, 0x68, 0x61, 0x6e, 0x64, 0x6c, + 0x65, 0x20, 0x25, 0x64, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x30, + 0x78, 0x25, 0x7a, 0x78, 0x0a, 0x00, 0x45, 0x2d, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x61, 0x6d, 0x3a, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x00, 0x45, 0x2d, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, + 0x66, 0x69, 0x6c, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x64, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x25, 0x73, 0x20, 0x25, 0x73, 0x0a, + 0x00, 0x45, 0x2d, 0x49, 0x6e, 0x69, 0x74, 0x3a, 0x66, 0x73, 0x65, 0x65, + 0x6b, 0x00, 0x57, 0x2d, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x25, 0x73, 0x20, + 0x73, 0x69, 0x7a, 0x65, 0x20, 0x28, 0x30, 0x78, 0x25, 0x7a, 0x78, 0x29, + 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x75, + 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x28, + 0x30, 0x78, 0x25, 0x7a, 0x78, 0x29, 0x0a, 0x00, 0x53, 0x65, 0x74, 0x53, + 0x79, 0x73, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x0a, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x40, 0x4d, 0x43, + 0x55, 0x42, 0x6f, 0x6f, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x25, 0x64, 0x20, 0x2f, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x30, 0x2f, 0x30, 0x2a, 0x34, 0x4b, 0x67, 0x00, 0x49, + 0x2d, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x4f, 0x54, 0x41, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x00, 0x49, 0x2d, 0x53, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x61, 0x72, 0x79, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x20, 0x5b, 0x25, + 0x64, 0x5d, 0x0a, 0x00, 0x49, 0x2d, 0x53, 0x63, 0x72, 0x61, 0x74, 0x63, + 0x68, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x0a, + 0x00, 0x49, 0x2d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x4f, + 0x54, 0x41, 0x20, 0x64, 0x61, 0x74, 0x61, 0x00, 0x45, 0x2d, 0x55, 0x20, + 0x6f, 0x6e, 0x20, 0x49, 0x41, 0x50, 0x00, 0x45, 0x2d, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x00, 0x45, 0x2d, 0x42, 0x44, 0x20, 0x55, 0x21, 0x53, + 0x00, 0x45, 0x2d, 0x4d, 0x42, 0x52, 0x20, 0x55, 0x21, 0x53, 0x00, 0x45, + 0x2d, 0x49, 0x6e, 0x69, 0x74, 0x00, 0x45, 0x2d, 0x4d, 0x6f, 0x75, 0x6e, + 0x74, 0x00, 0x2f, 0x66, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x72, 0x62, 0x2b, 0x00, 0x2f, 0x66, 0x73, + 0x2f, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x62, 0x69, 0x6e, + 0x00, 0x45, 0x2d, 0x55, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x00, + 0x45, 0x2d, 0x53, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x41, 0x50, 0x00, 0x45, + 0x2d, 0x53, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x00, 0x45, 0x2d, + 0x49, 0x6e, 0x69, 0x74, 0x20, 0x55, 0x20, 0x4d, 0x42, 0x52, 0x00, 0x45, + 0x2d, 0x49, 0x6e, 0x69, 0x74, 0x20, 0x53, 0x20, 0x4d, 0x42, 0x52, 0x00, + 0x73, 0x65, 0x63, 0x00, 0x45, 0x2d, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x20, + 0x55, 0x20, 0x6f, 0x6e, 0x20, 0x4c, 0x4f, 0x47, 0x00, 0x2f, 0x73, 0x65, + 0x63, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x62, 0x69, 0x6e, + 0x00, 0x73, 0x63, 0x72, 0x00, 0x45, 0x2d, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x20, 0x53, 0x20, 0x6f, 0x6e, 0x20, 0x4c, 0x4f, 0x47, 0x00, 0x2f, 0x73, + 0x63, 0x72, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x62, + 0x69, 0x6e, 0x00, 0x67, 0x6f, 0x6f, 0x64, 0x00, 0x75, 0x6e, 0x73, 0x65, + 0x74, 0x00, 0x62, 0x61, 0x64, 0x00, 0x42, 0x55, 0x47, 0x3b, 0x20, 0x63, + 0x61, 0x6e, 0x27, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x00, + 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x00, 0x74, 0x65, 0x73, 0x74, 0x00, + 0x70, 0x65, 0x72, 0x6d, 0x00, 0x49, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x69, 0x6e, 0x67, 0x20, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x20, + 0x62, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x00, 0x49, + 0x2d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x73, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x65, 0x64, 0x00, 0x49, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, + 0x4f, 0x54, 0x41, 0x20, 0x30, 0x78, 0x25, 0x58, 0x20, 0x30, 0x78, 0x25, + 0x58, 0x20, 0x30, 0x78, 0x25, 0x58, 0x0a, 0x00, 0x72, 0x62, 0x00, 0x2f, + 0x66, 0x73, 0x2f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x2e, 0x42, 0x49, + 0x4e, 0x00, 0x49, 0x2d, 0x53, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x20, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x00, 0x49, 0x2d, 0x42, 0x6f, 0x6f, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x20, + 0x61, 0x74, 0x20, 0x30, 0x78, 0x25, 0x78, 0x0a, 0x0a, 0x00, 0x49, 0x2d, + 0x4e, 0x6f, 0x20, 0x73, 0x6b, 0x65, 0x74, 0x63, 0x68, 0x20, 0x66, 0x6f, + 0x75, 0x6e, 0x64, 0x00, 0x49, 0x2d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x4d, 0x43, 0x55, 0x62, 0x6f, 0x6f, 0x74, 0x00, 0x57, + 0x2d, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x69, 0x6e, 0x67, 0x20, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x3b, + 0x20, 0x42, 0x4f, 0x4f, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x49, 0x4d, + 0x47, 0x5f, 0x53, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x53, 0x3d, 0x25, 0x64, + 0x20, 0x2d, 0x20, 0x74, 0x6f, 0x6f, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, + 0x3f, 0x0a, 0x00, 0x57, 0x2d, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, + 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x20, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x3b, 0x20, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x3d, 0x25, 0x75, 0x0a, 0x00, 0x57, 0x2d, 0x43, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x3a, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x00, 0x57, 0x2d, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x73, + 0x6c, 0x6f, 0x74, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6e, 0x6f, + 0x6e, 0x2d, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, + 0x20, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x00, 0x57, 0x2d, 0x43, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x20, 0x66, 0x69, 0x74, 0x20, 0x69, + 0x6e, 0x73, 0x69, 0x64, 0x65, 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, + 0x68, 0x00, 0x57, 0x2d, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x75, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x73, 0x6c, 0x6f, 0x74, + 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x00, 0x50, 0x72, 0x69, + 0x6d, 0x61, 0x72, 0x79, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x00, 0x49, + 0x2d, 0x25, 0x73, 0x3a, 0x20, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x3d, 0x25, + 0x73, 0x2c, 0x20, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x3d, 0x30, 0x78, 0x25, 0x78, 0x2c, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x5f, + 0x64, 0x6f, 0x6e, 0x65, 0x3d, 0x30, 0x78, 0x25, 0x78, 0x2c, 0x20, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6f, 0x6b, 0x3d, 0x30, 0x78, 0x25, 0x78, + 0x0a, 0x00, 0x53, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x00, 0x49, 0x2d, + 0x42, 0x6f, 0x6f, 0x74, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, + 0x20, 0x25, 0x73, 0x0a, 0x00, 0x49, 0x2d, 0x42, 0x6f, 0x6f, 0x74, 0x20, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, + 0x00, 0x45, 0x2d, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, + 0x69, 0x6e, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x21, 0x00, 0x57, 0x2d, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x3b, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x3d, 0x25, 0x75, 0x0a, + 0x00, 0x45, 0x2d, 0x70, 0x61, 0x6e, 0x69, 0x63, 0x21, 0x00, 0x49, 0x2d, + 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x20, 0x70, 0x61, 0x69, 0x72, 0x20, 0x28, 0x25, 0x64, 0x2e, 0x29, 0x20, + 0x69, 0x73, 0x20, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, + 0x6c, 0x65, 0x2e, 0x20, 0x54, 0x72, 0x65, 0x61, 0x74, 0x20, 0x69, 0x74, + 0x20, 0x61, 0x73, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0a, 0x00, 0x49, + 0x2d, 0x53, 0x77, 0x61, 0x70, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, + 0x25, 0x73, 0x0a, 0x00, 0x49, 0x2d, 0x53, 0x77, 0x61, 0x70, 0x20, 0x74, + 0x79, 0x70, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x49, 0x2d, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, + 0x73, 0x6c, 0x6f, 0x74, 0x20, 0x2d, 0x3e, 0x20, 0x70, 0x72, 0x69, 0x6d, + 0x61, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x00, 0x49, 0x2d, 0x45, + 0x72, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x00, + 0x49, 0x2d, 0x43, 0x6f, 0x70, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, + 0x73, 0x6c, 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x74, + 0x3a, 0x20, 0x30, 0x78, 0x25, 0x7a, 0x78, 0x20, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x0a, 0x00, 0x45, 0x2d, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, + 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, + 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x2c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x25, 0x64, 0x0a, + 0x0a, 0x00, 0x49, 0x2d, 0x42, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x20, + 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x20, 0x61, 0x74, 0x20, 0x30, 0x78, 0x25, 0x78, 0x0a, 0x0a, + 0x00, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x5f, 0x6d, + 0x75, 0x74, 0x65, 0x78, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, + 0x6d, 0x75, 0x74, 0x65, 0x78, 0x00, 0x65, 0x6e, 0x76, 0x5f, 0x6d, 0x75, + 0x74, 0x65, 0x78, 0x00, 0x72, 0x74, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x72, 0x00, 0x72, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x6c, 0x65, 0x00, 0x40, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x46, 0x6c, 0x61, + 0x73, 0x68, 0x20, 0x20, 0x32, 0x4d, 0x42, 0x20, 0x20, 0x20, 0x2f, 0x30, + 0x78, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2f, 0x30, 0x31, + 0x2a, 0x31, 0x32, 0x38, 0x4b, 0x61, 0x2c, 0x31, 0x35, 0x2a, 0x31, 0x32, + 0x38, 0x4b, 0x67, 0x00, 0x40, 0x45, 0x78, 0x74, 0x20, 0x52, 0x41, 0x57, + 0x20, 0x20, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x31, 0x36, 0x4d, 0x42, + 0x20, 0x20, 0x20, 0x2f, 0x30, 0x78, 0x39, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x2f, 0x34, 0x30, 0x39, 0x36, 0x2a, 0x34, 0x4b, 0x67, 0x00, + 0x40, 0x45, 0x78, 0x74, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x46, 0x6c, + 0x61, 0x73, 0x68, 0x20, 0x31, 0x36, 0x4d, 0x42, 0x20, 0x20, 0x20, 0x2f, + 0x30, 0x78, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2f, 0x34, + 0x30, 0x39, 0x36, 0x2a, 0x34, 0x4b, 0x67, 0x00, 0x85, 0xe9, 0x01, 0x08, + 0x0b, 0x00, 0x00, 0x00, 0x80, 0xa5, 0x02, 0x24, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xe8, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf0, 0x43, 0x02, 0x24, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0xac, 0xec, 0x01, 0x08, 0xe8, 0xec, 0x01, 0x08, 0x41, 0x6e, 0x01, 0x08, + 0x51, 0x51, 0x01, 0x08, 0xd0, 0xec, 0x01, 0x08, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x76, 0x01, 0x08, + 0x89, 0x76, 0x01, 0x08, 0x95, 0xd3, 0x00, 0x08, 0x01, 0xcf, 0x00, 0x08, + 0x0d, 0xdf, 0x00, 0x08, 0xc9, 0xcf, 0x00, 0x08, 0x65, 0xd2, 0x00, 0x08, + 0x71, 0xd0, 0x00, 0x08, 0xff, 0x4a, 0x01, 0x08, 0x01, 0x84, 0x00, 0x08, + 0x01, 0x84, 0x00, 0x08, 0xf9, 0x83, 0x00, 0x08, 0x7d, 0x83, 0x00, 0x08, + 0x73, 0x83, 0x00, 0x08, 0x77, 0x83, 0x00, 0x08, 0xf9, 0x49, 0x01, 0x08, + 0x99, 0x49, 0x01, 0x08, 0x31, 0x49, 0x01, 0x08, 0xf1, 0x83, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x76, 0x01, 0x08, + 0x51, 0x76, 0x01, 0x08, 0x99, 0x58, 0x01, 0x08, 0x3d, 0x58, 0x01, 0x08, + 0x0d, 0xdf, 0x00, 0x08, 0xe1, 0x55, 0x01, 0x08, 0xa5, 0x53, 0x01, 0x08, + 0xf1, 0x51, 0x01, 0x08, 0xff, 0x4a, 0x01, 0x08, 0x2b, 0x49, 0x01, 0x08, + 0x25, 0x49, 0x01, 0x08, 0x1f, 0x49, 0x01, 0x08, 0x97, 0x4b, 0x01, 0x08, + 0x91, 0x4b, 0x01, 0x08, 0x09, 0x49, 0x01, 0x08, 0xf9, 0x49, 0x01, 0x08, + 0x99, 0x49, 0x01, 0x08, 0x31, 0x49, 0x01, 0x08, 0x01, 0x49, 0x01, 0x08, + 0x3f, 0x63, 0x01, 0x08, 0x39, 0x63, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xb3, 0x00, 0x08, 0x83, 0x85, 0x00, 0x08, + 0x99, 0xca, 0x00, 0x08, 0xa1, 0x87, 0x00, 0x08, 0x1b, 0x83, 0x00, 0x08, + 0xc7, 0x82, 0x00, 0x08, 0x73, 0x82, 0x00, 0x08, 0x2d, 0x82, 0x00, 0x08, + 0xff, 0x4a, 0x01, 0x08, 0x19, 0x82, 0x00, 0x08, 0x05, 0x82, 0x00, 0x08, + 0xf1, 0x81, 0x00, 0x08, 0xc9, 0x81, 0x00, 0x08, 0xb5, 0x81, 0x00, 0x08, + 0xaf, 0x81, 0x00, 0x08, 0xf9, 0x49, 0x01, 0x08, 0x99, 0x49, 0x01, 0x08, + 0x31, 0x49, 0x01, 0x08, 0x83, 0x81, 0x00, 0x08, 0xa9, 0x81, 0x00, 0x08, + 0x97, 0x81, 0x00, 0x08, 0x93, 0x81, 0x00, 0x08, 0x8f, 0x81, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x4a, 0x01, 0x08, + 0xb5, 0x62, 0x01, 0x08, 0x15, 0x6d, 0x01, 0x08, 0x09, 0x6d, 0x01, 0x08, + 0xf9, 0x4a, 0x01, 0x08, 0x6d, 0x65, 0x01, 0x08, 0xa9, 0x6c, 0x01, 0x08, + 0x19, 0x6c, 0x01, 0x08, 0xff, 0x4a, 0x01, 0x08, 0xd5, 0x4a, 0x01, 0x08, + 0xcf, 0x4a, 0x01, 0x08, 0xc9, 0x4a, 0x01, 0x08, 0xc3, 0x4a, 0x01, 0x08, + 0x73, 0x83, 0x00, 0x08, 0xbd, 0x4a, 0x01, 0x08, 0xdb, 0x4a, 0x01, 0x08, + 0xdb, 0x4a, 0x01, 0x08, 0xdb, 0x4a, 0x01, 0x08, 0xb5, 0x4a, 0x01, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xfa, 0x00, 0x08, + 0x63, 0xfa, 0x00, 0x08, 0x59, 0x4a, 0x01, 0x08, 0xa9, 0x62, 0x01, 0x08, + 0x01, 0x05, 0x01, 0x00, 0x01, 0x05, 0x03, 0x02, 0x04, 0x01, 0x04, 0x01, + 0x03, 0x04, 0x03, 0x02, 0x04, 0x01, 0x04, 0x03, 0x04, 0x02, 0x04, 0x01, + 0x04, 0x01, 0x04, 0x03, 0x01, 0x03, 0x03, 0x04, 0x01, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb6, 0xe9, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x45, 0x02, 0x24, 0x44, 0x00, 0x00, 0x00, 0x80, 0x45, 0x02, 0x24, + 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x44, 0x02, 0x24, 0x34, 0x00, 0x00, 0x00, 0x64, 0x44, 0x02, 0x24, + 0x50, 0x00, 0x00, 0x00, 0xac, 0xe9, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0x44, 0x02, 0x24, 0x44, 0x00, 0x00, 0x00, 0x80, 0x48, 0x02, 0x24, + 0x00, 0x03, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x06, 0x08, 0x01, 0x01, 0x01, 0x08, 0x10, + 0x01, 0x01, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x03, 0x00, 0x24, 0x1f, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x54, 0x5a, 0x00, 0x47, + 0x4d, 0x54, 0x00, 0x25, 0x31, 0x30, 0x5b, 0x5e, 0x30, 0x2d, 0x39, 0x2c, + 0x2b, 0x2d, 0x5d, 0x25, 0x6e, 0x00, 0x4d, 0x25, 0x68, 0x75, 0x25, 0x6e, + 0x2e, 0x25, 0x68, 0x75, 0x25, 0x6e, 0x2e, 0x25, 0x68, 0x75, 0x25, 0x6e, + 0x00, 0x2f, 0x25, 0x68, 0x75, 0x25, 0x6e, 0x3a, 0x25, 0x68, 0x75, 0x25, + 0x6e, 0x3a, 0x25, 0x68, 0x75, 0x25, 0x6e, 0x00, 0x00, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x88, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x42, 0x42, + 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x10, 0x10, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x68, 0x6c, 0x4c, 0x00, 0x2b, 0x2d, 0x00, 0x30, 0x30, 0x00, 0x78, + 0x58, 0x00, 0x41, 0x2d, 0x46, 0x61, 0x2d, 0x66, 0x38, 0x39, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x5d, 0x00, 0x11, 0xf2, 0x01, 0x08, + 0x14, 0xf2, 0x01, 0x08, 0x17, 0xf2, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x13, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x90, 0xd0, 0x03, + 0xb0, 0x06, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0xa5, 0x02, 0x24, 0x8d, 0xb4, 0x01, 0x08, + 0x01, 0x00, 0x00, 0x00, 0x1a, 0xdc, 0x01, 0x08, 0xd3, 0xb3, 0xfb, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0d, 0x4c, 0x01, 0x08, 0x01, 0x4c, 0x01, 0x08, 0x81, 0x4c, 0x01, 0x08, + 0x99, 0x4c, 0x01, 0x08, 0xc1, 0x4b, 0x01, 0x08, 0x69, 0x4c, 0x01, 0x08, + 0x51, 0x4c, 0x01, 0x08, 0x19, 0x65, 0x01, 0x08, 0xc1, 0x62, 0x01, 0x08, + 0x85, 0x68, 0x01, 0x08, 0xad, 0x66, 0x01, 0x08, 0x1d, 0x4d, 0x01, 0x08, + 0x0d, 0x4d, 0x01, 0x08, 0x11, 0x4d, 0x01, 0x08, 0x21, 0x4d, 0x01, 0x08, + 0x19, 0x4d, 0x01, 0x08, 0x15, 0x4d, 0x01, 0x08, 0x25, 0x4d, 0x01, 0x08, + 0x25, 0x4d, 0x01, 0x08, 0x25, 0x4d, 0x01, 0x08, 0x01, 0x4d, 0x01, 0x08, + 0xdd, 0x4c, 0x01, 0x08, 0xbf, 0xe9, 0x01, 0x08, 0xf4, 0xe9, 0x01, 0x08, + 0x20, 0xea, 0x01, 0x08, 0x44, 0x28, 0x02, 0x24, 0x2d, 0x75, 0x01, 0x08, + 0x85, 0x6d, 0x01, 0x08, 0xcd, 0x65, 0x01, 0x08, 0xb5, 0x71, 0x01, 0x08, + 0x35, 0x4b, 0x01, 0x08, 0x29, 0x4b, 0x01, 0x08, 0x12, 0x01, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x40, 0x41, 0x23, 0x5b, 0x03, 0x00, 0x02, 0x01, 0x02, + 0x03, 0x01, 0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x32, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x02, 0x78, 0x00, 0x03, 0x01, 0x02, 0xc0, 0xfa, 0x09, 0x04, 0x00, + 0x00, 0x00, 0xfe, 0x01, 0x02, 0x06, 0x09, 0x04, 0x00, 0x01, 0x00, 0xfe, + 0x01, 0x02, 0x07, 0x09, 0x04, 0x00, 0x02, 0x00, 0xfe, 0x01, 0x02, 0x08, + 0x09, 0x04, 0x00, 0x03, 0x00, 0xfe, 0x01, 0x02, 0x09, 0x09, 0x21, 0x0b, + 0xff, 0x00, 0x00, 0x10, 0x1a, 0x01, 0x08, 0x0b, 0x01, 0x02, 0x02, 0x02, + 0x01, 0x00, 0x09, 0x04, 0x01, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00, 0x05, + 0x24, 0x00, 0x10, 0x01, 0x05, 0x24, 0x01, 0x00, 0x02, 0x04, 0x24, 0x02, + 0x02, 0x05, 0x24, 0x06, 0x01, 0x02, 0x07, 0x05, 0x83, 0x03, 0x08, 0x08, + 0x09, 0x09, 0x04, 0x02, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x05, + 0x02, 0x02, 0x00, 0x02, 0x00, 0x07, 0x05, 0x82, 0x02, 0x00, 0x02, 0x00, + 0x0a, 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x01, 0x14, + 0x14, 0x03, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xf0, 0x01, 0x08, + 0x4c, 0xf0, 0x01, 0x08, 0x0c, 0xf0, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf0, 0x01, 0x08, 0xd3, 0xf0, 0x01, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xa5, 0x02, 0x24, + 0x00, 0x00, 0x00, 0x00, 0x25, 0x05, 0x00, 0x08, 0x41, 0x1d, 0x00, 0x08, + 0x01, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00 +}; +unsigned int mcuboot_bin_len = 128564; diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/nicla_vision_bootloader.h b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/nicla_vision_bootloader.h similarity index 99% rename from libraries/STM32H747_System/examples/STM32H747_updateBootloader/nicla_vision_bootloader.h rename to libraries/STM32H747_System/examples/STM32H747_manageBootloader/nicla_vision_bootloader.h index 6fff31c93..73a237659 100644 --- a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/nicla_vision_bootloader.h +++ b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/nicla_vision_bootloader.h @@ -10582,7 +10582,7 @@ const unsigned char bootloader_mbed_bin[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa0, 0x17, 0x08, 0x01, 0x00, 0x01, 0x08, 0x10, + 0x00, 0x00, 0x00, 0x00, 0xa0, 0x17, 0x08, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01, 0x19, 0x00, 0xcc, 0x12, 0xfe, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x08, 0xd5, 0x09, 0x00, 0x08, 0xb5, 0x0b, 0x00, 0x08, 0x89, 0x0a, 0x00, 0x08, 0xa1, 0x09, 0x00, 0x08, diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/portenta_bootloader.h b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/portenta_bootloader.h similarity index 100% rename from libraries/STM32H747_System/examples/STM32H747_updateBootloader/portenta_bootloader.h rename to libraries/STM32H747_System/examples/STM32H747_manageBootloader/portenta_bootloader.h diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/portenta_lite_bootloader.h b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/portenta_lite_bootloader.h similarity index 100% rename from libraries/STM32H747_System/examples/STM32H747_updateBootloader/portenta_lite_bootloader.h rename to libraries/STM32H747_System/examples/STM32H747_manageBootloader/portenta_lite_bootloader.h diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/portenta_lite_connected_bootloader.h b/libraries/STM32H747_System/examples/STM32H747_manageBootloader/portenta_lite_connected_bootloader.h similarity index 100% rename from libraries/STM32H747_System/examples/STM32H747_updateBootloader/portenta_lite_connected_bootloader.h rename to libraries/STM32H747_System/examples/STM32H747_manageBootloader/portenta_lite_connected_bootloader.h diff --git a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/mcuboot_bootloader.h b/libraries/STM32H747_System/examples/STM32H747_updateBootloader/mcuboot_bootloader.h deleted file mode 100644 index a5d5b831a..000000000 --- a/libraries/STM32H747_System/examples/STM32H747_updateBootloader/mcuboot_bootloader.h +++ /dev/null @@ -1,10671 +0,0 @@ -const unsigned char mcuboot_bin[] = { - 0x00, 0x00, 0x08, 0x24, 0x7d, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x05, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x06, 0x00, 0x08, - 0x5f, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xe9, 0x82, 0x01, 0x08, - 0x79, 0x56, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x06, 0x00, 0x08, - 0xc9, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x43, 0x55, 0x62, - 0x6f, 0x6f, 0x74, 0x20, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xb5, 0x05, 0x4c, - 0x23, 0x78, 0x33, 0xb9, 0x04, 0x4b, 0x13, 0xb1, 0x04, 0x48, 0xaf, 0xf3, - 0x00, 0x80, 0x01, 0x23, 0x23, 0x70, 0x10, 0xbd, 0x00, 0x04, 0x00, 0x24, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xf0, 0x01, 0x08, 0x08, 0xb5, 0x03, 0x4b, - 0x1b, 0xb1, 0x03, 0x49, 0x03, 0x48, 0xaf, 0xf3, 0x00, 0x80, 0x08, 0xbd, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x24, 0x0c, 0xf0, 0x01, 0x08, - 0x15, 0x4b, 0x00, 0x2b, 0x08, 0xbf, 0x13, 0x4b, 0x9d, 0x46, 0xa3, 0xf5, - 0x80, 0x3a, 0x00, 0x21, 0x8b, 0x46, 0x0f, 0x46, 0x13, 0x48, 0x14, 0x4a, - 0x12, 0x1a, 0x1a, 0xf0, 0x47, 0xff, 0x0f, 0x4b, 0x00, 0x2b, 0x00, 0xd0, - 0x98, 0x47, 0x0e, 0x4b, 0x00, 0x2b, 0x00, 0xd0, 0x98, 0x47, 0x00, 0x20, - 0x00, 0x21, 0x04, 0x00, 0x0d, 0x00, 0x0d, 0x48, 0x00, 0x28, 0x02, 0xd0, - 0x0c, 0x48, 0x0e, 0xf0, 0xa9, 0xfe, 0x1a, 0xf0, 0x2d, 0xfd, 0x20, 0x00, - 0x29, 0x00, 0x17, 0xf0, 0x93, 0xf9, 0x0f, 0xf0, 0x43, 0xfb, 0x00, 0xbf, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x39, 0x7a, 0x01, 0x08, 0x00, 0x04, 0x00, 0x24, 0x80, 0xa8, 0x00, 0x24, - 0xd5, 0xf2, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xf0, 0x04, 0x0f, - 0x0c, 0xbf, 0xef, 0xf3, 0x08, 0x80, 0xef, 0xf3, 0x09, 0x80, 0x81, 0x69, - 0x11, 0xf8, 0x02, 0x1c, 0x00, 0x29, 0x32, 0xd1, 0x01, 0xb5, 0x90, 0xe8, - 0x0f, 0x10, 0xe0, 0x47, 0xbd, 0xe8, 0x00, 0x50, 0x8c, 0xe8, 0x03, 0x00, - 0x24, 0x4b, 0x93, 0xe8, 0x06, 0x00, 0x91, 0x42, 0x08, 0xbf, 0x70, 0x47, - 0x1a, 0x60, 0x41, 0xb9, 0x1e, 0xf0, 0x10, 0x0f, 0x10, 0xd1, 0x20, 0x4b, - 0x18, 0x68, 0x20, 0xf0, 0x01, 0x00, 0x18, 0x60, 0x0a, 0xe0, 0x2c, 0xe9, - 0xf0, 0x0f, 0x1e, 0xf0, 0x10, 0x0f, 0x08, 0xbf, 0x2c, 0xed, 0x10, 0x8a, - 0x81, 0xf8, 0x22, 0xe0, 0xc1, 0xf8, 0x38, 0xc0, 0x90, 0x6b, 0x92, 0xf8, - 0x22, 0x10, 0x61, 0xf0, 0xff, 0x0e, 0x1e, 0xf0, 0x10, 0x0f, 0x08, 0xbf, - 0xb0, 0xec, 0x10, 0x8a, 0xb0, 0xe8, 0xf0, 0x0f, 0x80, 0xf3, 0x09, 0x88, - 0x70, 0x47, 0x11, 0x4a, 0x13, 0x68, 0x99, 0x42, 0xfa, 0xd8, 0x01, 0xb5, - 0x52, 0xf8, 0x21, 0xc0, 0x0f, 0xc8, 0xe0, 0x47, 0xbd, 0xe8, 0x00, 0x50, - 0xcc, 0xf8, 0x00, 0x00, 0x70, 0x47, 0x01, 0xb5, 0x17, 0xf0, 0x14, 0xfc, - 0xbd, 0xe8, 0x01, 0x40, 0xef, 0xf3, 0x09, 0x8c, 0xbe, 0xe7, 0x01, 0xb5, - 0x17, 0xf0, 0x4e, 0xfc, 0xbd, 0xe8, 0x01, 0x40, 0xef, 0xf3, 0x09, 0x8c, - 0xb6, 0xe7, 0x00, 0x00, 0x30, 0x01, 0x00, 0x24, 0x34, 0xef, 0x00, 0xe0, - 0xb4, 0xed, 0x01, 0x08, 0xdf, 0xf8, 0x30, 0xd0, 0x05, 0xf0, 0x9e, 0xf8, - 0x00, 0x21, 0x03, 0xe0, 0x0a, 0x4b, 0x5b, 0x58, 0x43, 0x50, 0x04, 0x31, - 0x09, 0x48, 0x0a, 0x4b, 0x42, 0x18, 0x9a, 0x42, 0xf6, 0xd3, 0x09, 0x4a, - 0x02, 0xe0, 0x00, 0x23, 0x42, 0xf8, 0x04, 0x3b, 0x07, 0x4b, 0x9a, 0x42, - 0xf9, 0xd3, 0xff, 0xf7, 0x49, 0xff, 0x70, 0x47, 0x00, 0x00, 0x08, 0x24, - 0x18, 0xf0, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, 0xf0, 0x03, 0x00, 0x24, - 0x00, 0x04, 0x00, 0x24, 0x80, 0xa8, 0x00, 0x24, 0xfe, 0xe7, 0x00, 0x00, - 0x26, 0x4b, 0x02, 0x22, 0x83, 0xf8, 0x3e, 0x20, 0x1b, 0x68, 0x1a, 0x6a, - 0x22, 0xf0, 0x01, 0x02, 0x1a, 0x62, 0x1a, 0x6a, 0x42, 0xf0, 0x01, 0x02, - 0x1a, 0x62, 0x21, 0x4a, 0x93, 0x42, 0x19, 0xd0, 0x02, 0xf5, 0x80, 0x62, - 0x93, 0x42, 0x15, 0xd0, 0x02, 0xf5, 0x70, 0x52, 0x93, 0x42, 0x11, 0xd0, - 0x02, 0xf5, 0x80, 0x62, 0x93, 0x42, 0x0d, 0xd0, 0x02, 0xf5, 0x80, 0x62, - 0x93, 0x42, 0x09, 0xd0, 0xb3, 0xf1, 0x80, 0x4f, 0x0e, 0xd1, 0x99, 0x68, - 0x16, 0x4a, 0x0a, 0x40, 0x06, 0x2a, 0x21, 0xd1, 0x00, 0x20, 0x70, 0x47, - 0x5a, 0x6c, 0x42, 0xf4, 0x00, 0x42, 0x5a, 0x64, 0x10, 0x4a, 0x93, 0x42, - 0xee, 0xd1, 0xf0, 0xe7, 0x10, 0x4a, 0x93, 0x42, 0xed, 0xd0, 0x02, 0xf5, - 0x80, 0x62, 0x93, 0x42, 0xe9, 0xd0, 0x02, 0xf5, 0x80, 0x62, 0x93, 0x42, - 0xe5, 0xd0, 0x02, 0xf5, 0x78, 0x42, 0x93, 0x42, 0xe1, 0xd0, 0xa2, 0xf5, - 0x6c, 0x42, 0x93, 0x42, 0xdd, 0xd0, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, - 0x1a, 0x60, 0xdd, 0xe7, 0xb2, 0xf5, 0x80, 0x3f, 0xf7, 0xd1, 0xd9, 0xe7, - 0x68, 0x05, 0x00, 0x24, 0x00, 0x00, 0x01, 0x40, 0x07, 0x00, 0x01, 0x00, - 0x00, 0x04, 0x00, 0x40, 0x18, 0x4b, 0x2d, 0xe9, 0xf7, 0x43, 0x53, 0xf8, - 0x20, 0x60, 0x00, 0x23, 0x0c, 0x46, 0x17, 0x46, 0x1d, 0x46, 0x98, 0x46, - 0x0b, 0x60, 0x33, 0x68, 0x30, 0x46, 0xd3, 0xf8, 0x3c, 0x90, 0x5b, 0x6a, - 0x98, 0x47, 0x2a, 0x46, 0x43, 0x46, 0xcd, 0xe9, 0x00, 0x01, 0x30, 0x46, - 0xc8, 0x47, 0xa8, 0xb1, 0x23, 0x68, 0x2a, 0x46, 0x30, 0x46, 0x47, 0xf8, - 0x33, 0x50, 0x33, 0x68, 0x19, 0x6b, 0x43, 0x46, 0x88, 0x47, 0x23, 0x68, - 0x2d, 0x18, 0x07, 0xeb, 0xc3, 0x03, 0x48, 0xeb, 0x01, 0x08, 0x58, 0x60, - 0x21, 0x68, 0x01, 0x31, 0xb1, 0xf5, 0x70, 0x7f, 0x21, 0x60, 0xdc, 0xd3, - 0x00, 0x20, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x04, 0x00, 0x00, 0x24, - 0x08, 0xb5, 0x04, 0x4b, 0x02, 0x78, 0x53, 0xf8, 0x22, 0x00, 0x03, 0x68, - 0x5b, 0x6b, 0x98, 0x47, 0xc0, 0xb2, 0x08, 0xbd, 0x04, 0x00, 0x00, 0x24, - 0x08, 0xb5, 0x04, 0x4b, 0x02, 0x78, 0x53, 0xf8, 0x22, 0x00, 0x03, 0x68, - 0x9b, 0x6a, 0x98, 0x47, 0xc0, 0xb2, 0x08, 0xbd, 0x04, 0x00, 0x00, 0x24, - 0x73, 0xb5, 0x0e, 0x46, 0x00, 0x78, 0x11, 0x46, 0x06, 0x4a, 0x00, 0x24, - 0x52, 0xf8, 0x20, 0x00, 0x02, 0x68, 0xcd, 0xe9, 0x00, 0x34, 0x23, 0x46, - 0x95, 0x69, 0x32, 0x46, 0xa8, 0x47, 0x02, 0xb0, 0x70, 0xbd, 0x00, 0xbf, - 0x04, 0x00, 0x00, 0x24, 0x38, 0xb5, 0x0c, 0x46, 0x15, 0x46, 0xff, 0xf7, - 0xcf, 0xff, 0x25, 0x44, 0x21, 0x46, 0x11, 0xf8, 0x01, 0x3b, 0x98, 0x42, - 0x03, 0xd1, 0xa9, 0x42, 0xf9, 0xd1, 0x01, 0x20, 0x38, 0xbd, 0x00, 0x20, - 0xfc, 0xe7, 0x04, 0x28, 0x09, 0xd0, 0x05, 0x28, 0x03, 0xd1, 0x48, 0x1e, - 0x18, 0xbf, 0x01, 0x20, 0x70, 0x47, 0x43, 0x1a, 0x58, 0x42, 0x58, 0x41, - 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, 0x10, 0xb5, 0x84, 0x68, 0x02, 0xeb, - 0x01, 0x12, 0x01, 0x31, 0x20, 0x23, 0xa0, 0x3c, 0x0c, 0x32, 0xa4, 0xeb, - 0x41, 0x11, 0xff, 0xf7, 0xc1, 0xff, 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, - 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xad, 0xff, 0x4f, 0xf4, - 0x34, 0x62, 0xa3, 0x68, 0xe0, 0x3b, 0x02, 0xfb, 0x10, 0x30, 0x10, 0xbd, - 0x02, 0x4b, 0x6f, 0xf0, 0x02, 0x02, 0x1b, 0x68, 0x1a, 0x61, 0x70, 0x47, - 0x68, 0x05, 0x00, 0x24, 0x03, 0x4b, 0x1a, 0x68, 0xd3, 0x68, 0x23, 0xf0, - 0x02, 0x03, 0xd3, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x68, 0x05, 0x00, 0x24, - 0x06, 0x4b, 0x6f, 0xf0, 0x02, 0x02, 0x1b, 0x68, 0x1a, 0x61, 0x5a, 0x69, - 0x42, 0xf0, 0x02, 0x02, 0x5a, 0x61, 0xda, 0x68, 0x42, 0xf0, 0x02, 0x02, - 0xda, 0x60, 0x70, 0x47, 0x68, 0x05, 0x00, 0x24, 0x05, 0x4b, 0x6f, 0xf0, - 0x02, 0x02, 0x1b, 0x68, 0x58, 0x63, 0x1a, 0x61, 0xda, 0x68, 0x42, 0xf0, - 0x02, 0x02, 0xda, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x68, 0x05, 0x00, 0x24, - 0x01, 0x4b, 0x58, 0x6a, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x0c, 0x00, 0x40, - 0x06, 0x4a, 0x11, 0x68, 0xcb, 0x68, 0x23, 0xf0, 0x02, 0x03, 0xcb, 0x60, - 0x92, 0xf8, 0x3e, 0x30, 0x01, 0x2b, 0x01, 0xd1, 0xff, 0xf7, 0xce, 0xbe, - 0x70, 0x47, 0x00, 0xbf, 0x68, 0x05, 0x00, 0x24, 0x07, 0x4b, 0x08, 0x4a, - 0x13, 0x60, 0x1a, 0x69, 0x91, 0x07, 0x08, 0xd5, 0xda, 0x68, 0x92, 0x07, - 0x05, 0xd5, 0x6f, 0xf0, 0x02, 0x02, 0x04, 0x48, 0x1a, 0x61, 0x0e, 0xf0, - 0x7b, 0xbd, 0x70, 0x47, 0x00, 0x0c, 0x00, 0x40, 0x68, 0x05, 0x00, 0x24, - 0x18, 0xdf, 0x01, 0x08, 0x00, 0x48, 0x70, 0x47, 0xc8, 0xde, 0x01, 0x08, - 0x6a, 0xb1, 0x01, 0xf0, 0x03, 0x01, 0x07, 0x4b, 0x03, 0x29, 0x59, 0x68, - 0x08, 0xd0, 0x00, 0xf4, 0x70, 0x60, 0xb0, 0xf5, 0x70, 0x6f, 0x03, 0xd1, - 0x21, 0xea, 0x02, 0x02, 0x5a, 0x60, 0x70, 0x47, 0x0a, 0x43, 0xfb, 0xe7, - 0x00, 0x04, 0x00, 0x58, 0x30, 0xb5, 0x11, 0x4b, 0x11, 0x4d, 0xd5, 0xf8, - 0x94, 0x40, 0x9c, 0x42, 0xfb, 0xd1, 0x49, 0x43, 0x01, 0x2a, 0x01, 0xeb, - 0x41, 0x03, 0x4f, 0xea, 0x41, 0x04, 0x6f, 0xea, 0x03, 0x03, 0x04, 0xd0, - 0x02, 0x2a, 0x0b, 0xd0, 0xc2, 0x68, 0x13, 0x40, 0x0b, 0xe0, 0xc2, 0x68, - 0x13, 0x40, 0x19, 0x43, 0xc1, 0x60, 0x06, 0x4b, 0x4f, 0xf4, 0x40, 0x72, - 0x5a, 0x61, 0x30, 0xbd, 0xc2, 0x68, 0x13, 0x40, 0x23, 0x43, 0xc3, 0x60, - 0xf5, 0xe7, 0x00, 0xbf, 0x00, 0x03, 0x00, 0x80, 0x00, 0x64, 0x02, 0x58, - 0x2d, 0xe9, 0xf0, 0x41, 0x91, 0xf8, 0x00, 0xe0, 0x4b, 0x78, 0x74, 0x46, - 0x4e, 0x69, 0x01, 0x2b, 0x35, 0x4f, 0x4f, 0xea, 0x44, 0x14, 0xdf, 0xf8, - 0xd4, 0xc0, 0x44, 0xd1, 0x00, 0xf5, 0x10, 0x65, 0x2b, 0x19, 0xb6, 0xb9, - 0x1e, 0x69, 0x37, 0x40, 0x1f, 0x61, 0x1e, 0x69, 0x46, 0xf4, 0x00, 0x26, - 0x1e, 0x61, 0x1e, 0x69, 0x06, 0xea, 0x0c, 0x06, 0x01, 0x2a, 0x1e, 0x61, - 0x22, 0xd1, 0x0a, 0x69, 0x02, 0xb1, 0x5a, 0x61, 0x2b, 0x59, 0x43, 0xf0, - 0x04, 0x43, 0x2b, 0x51, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x81, 0xd3, 0xf8, - 0x10, 0x80, 0x08, 0xea, 0x0c, 0x0c, 0xc3, 0xf8, 0x10, 0xc0, 0xd3, 0xf8, - 0x10, 0xc0, 0x0c, 0xea, 0x07, 0x07, 0x1f, 0x61, 0x8f, 0x68, 0xbe, 0x42, - 0x1e, 0x69, 0x46, 0xf4, 0x00, 0x26, 0x88, 0xbf, 0x4f, 0x61, 0x1e, 0x61, - 0x4e, 0x69, 0x1f, 0x69, 0xc6, 0xf3, 0x12, 0x06, 0x3e, 0x43, 0xd9, 0xe7, - 0x2b, 0x59, 0x43, 0xf0, 0x04, 0x43, 0x2b, 0x51, 0x4b, 0x69, 0x00, 0x2b, - 0xdc, 0xd0, 0x0e, 0xf0, 0x0f, 0x02, 0x01, 0x23, 0xd0, 0xf8, 0x34, 0x18, - 0x93, 0x40, 0x0b, 0x43, 0xc0, 0xf8, 0x34, 0x38, 0xd2, 0xe7, 0x00, 0xf5, - 0x30, 0x60, 0x03, 0x19, 0x1d, 0x69, 0x05, 0xea, 0x0c, 0x05, 0x1d, 0x61, - 0x1d, 0x69, 0x3d, 0x40, 0x1d, 0x61, 0x8d, 0x68, 0x06, 0xb1, 0x4d, 0x61, - 0x1e, 0x69, 0xc5, 0xf3, 0x12, 0x05, 0x01, 0x2a, 0x46, 0xf4, 0x00, 0x26, - 0x1e, 0x61, 0x1e, 0x69, 0x45, 0xea, 0x06, 0x05, 0x1d, 0x61, 0x02, 0xd1, - 0xca, 0x68, 0x02, 0xb1, 0x5a, 0x61, 0x03, 0x59, 0x43, 0xf0, 0x04, 0x43, - 0x03, 0x51, 0xb1, 0xe7, 0xff, 0xff, 0x07, 0xe0, 0x00, 0x00, 0xf8, 0xff, - 0x4e, 0x4a, 0x70, 0xb5, 0x94, 0x6a, 0x96, 0x6a, 0xd3, 0x6a, 0x16, 0xf0, - 0x7c, 0x7f, 0xc6, 0xf3, 0x05, 0x51, 0x55, 0x6c, 0x00, 0xf0, 0x8d, 0x80, - 0x07, 0xee, 0x90, 0x1a, 0xc3, 0xf3, 0x00, 0x23, 0xc5, 0xf3, 0xcc, 0x01, - 0x04, 0xf0, 0x03, 0x04, 0xf8, 0xee, 0xe7, 0x6a, 0x4b, 0x43, 0x01, 0x2c, - 0xb7, 0xee, 0x00, 0x6a, 0x07, 0xee, 0x90, 0x3a, 0xfa, 0xee, 0xe9, 0x7a, - 0x6b, 0xd0, 0x02, 0x2c, 0x5b, 0xd0, 0x00, 0x2c, 0x67, 0xd1, 0x13, 0x68, - 0x9b, 0x06, 0x46, 0xd5, 0x11, 0x68, 0x13, 0x6c, 0xc1, 0xf3, 0xc1, 0x01, - 0x3a, 0x4a, 0xc3, 0xf3, 0x08, 0x03, 0xca, 0x40, 0x07, 0xee, 0x10, 0x2a, - 0xf8, 0xee, 0xc7, 0x5a, 0x85, 0xee, 0xa6, 0x7a, 0x06, 0xee, 0x90, 0x3a, - 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, 0x86, 0x7a, - 0x30, 0x4a, 0x67, 0xee, 0x87, 0x7a, 0x13, 0x6c, 0xc3, 0xf3, 0x46, 0x23, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x7a, - 0xc7, 0xee, 0x87, 0x6a, 0xfc, 0xee, 0xe6, 0x6a, 0xc0, 0xed, 0x00, 0x6a, - 0x13, 0x6c, 0xc3, 0xf3, 0x06, 0x43, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, - 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x7a, 0xc7, 0xee, 0x87, 0x6a, 0xfc, 0xee, - 0xe6, 0x6a, 0xc0, 0xed, 0x01, 0x6a, 0x13, 0x6c, 0xc3, 0xf3, 0x06, 0x63, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x6a, - 0x87, 0xee, 0x86, 0x7a, 0xbc, 0xee, 0xc7, 0x7a, 0x80, 0xed, 0x02, 0x7a, - 0x70, 0xbd, 0x13, 0x6c, 0xdf, 0xed, 0x19, 0x5a, 0xc3, 0xf3, 0x08, 0x03, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, - 0x77, 0xee, 0x86, 0x7a, 0x85, 0xee, 0xa6, 0x7a, 0xbe, 0xe7, 0x13, 0x6c, - 0xdf, 0xed, 0x12, 0x5a, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, - 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, - 0xee, 0xe7, 0x13, 0x6c, 0xdf, 0xed, 0x0c, 0x5a, 0xc3, 0xf3, 0x08, 0x03, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, - 0x77, 0xee, 0x86, 0x7a, 0xe0, 0xe7, 0xc0, 0xe9, 0x00, 0x11, 0x81, 0x60, - 0xce, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0x00, 0x90, 0xd0, 0x03, - 0x00, 0x24, 0x74, 0x4c, 0x20, 0xbc, 0xbe, 0x4b, 0x00, 0x24, 0x74, 0x4a, - 0x4e, 0x4a, 0x70, 0xb5, 0x94, 0x6a, 0x96, 0x6a, 0xd3, 0x6a, 0x16, 0xf4, - 0x7c, 0x3f, 0xc6, 0xf3, 0x05, 0x31, 0xd5, 0x6b, 0x00, 0xf0, 0x8d, 0x80, - 0x07, 0xee, 0x90, 0x1a, 0xc3, 0xf3, 0x00, 0x13, 0xc5, 0xf3, 0xcc, 0x01, - 0x04, 0xf0, 0x03, 0x04, 0xf8, 0xee, 0xe7, 0x6a, 0x4b, 0x43, 0x01, 0x2c, - 0xb7, 0xee, 0x00, 0x6a, 0x07, 0xee, 0x90, 0x3a, 0xfa, 0xee, 0xe9, 0x7a, - 0x6b, 0xd0, 0x02, 0x2c, 0x5b, 0xd0, 0x00, 0x2c, 0x67, 0xd1, 0x13, 0x68, - 0x9b, 0x06, 0x46, 0xd5, 0x11, 0x68, 0x93, 0x6b, 0xc1, 0xf3, 0xc1, 0x01, - 0x3a, 0x4a, 0xc3, 0xf3, 0x08, 0x03, 0xca, 0x40, 0x07, 0xee, 0x10, 0x2a, - 0xf8, 0xee, 0xc7, 0x5a, 0x85, 0xee, 0xa6, 0x7a, 0x06, 0xee, 0x90, 0x3a, - 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, 0x86, 0x7a, - 0x30, 0x4a, 0x67, 0xee, 0x87, 0x7a, 0x93, 0x6b, 0xc3, 0xf3, 0x46, 0x23, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x7a, - 0xc7, 0xee, 0x87, 0x6a, 0xfc, 0xee, 0xe6, 0x6a, 0xc0, 0xed, 0x00, 0x6a, - 0x93, 0x6b, 0xc3, 0xf3, 0x06, 0x43, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, - 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x7a, 0xc7, 0xee, 0x87, 0x6a, 0xfc, 0xee, - 0xe6, 0x6a, 0xc0, 0xed, 0x01, 0x6a, 0x93, 0x6b, 0xc3, 0xf3, 0x06, 0x63, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x37, 0xee, 0x06, 0x6a, - 0x87, 0xee, 0x86, 0x7a, 0xbc, 0xee, 0xc7, 0x7a, 0x80, 0xed, 0x02, 0x7a, - 0x70, 0xbd, 0x93, 0x6b, 0xdf, 0xed, 0x19, 0x5a, 0xc3, 0xf3, 0x08, 0x03, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, - 0x77, 0xee, 0x86, 0x7a, 0x85, 0xee, 0xa6, 0x7a, 0xbe, 0xe7, 0x93, 0x6b, - 0xdf, 0xed, 0x12, 0x5a, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, - 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, - 0xee, 0xe7, 0x93, 0x6b, 0xdf, 0xed, 0x0c, 0x5a, 0xc3, 0xf3, 0x08, 0x03, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, - 0x77, 0xee, 0x86, 0x7a, 0xe0, 0xe7, 0xc0, 0xe9, 0x00, 0x11, 0x81, 0x60, - 0xce, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0x00, 0x90, 0xd0, 0x03, - 0x00, 0x24, 0x74, 0x4c, 0x20, 0xbc, 0xbe, 0x4b, 0x00, 0x24, 0x74, 0x4a, - 0x09, 0x4a, 0x82, 0xb0, 0xd2, 0xf8, 0xf4, 0x10, 0x41, 0xf0, 0x02, 0x01, - 0xc2, 0xf8, 0xf4, 0x10, 0xd2, 0xf8, 0xf4, 0x20, 0x02, 0xf0, 0x02, 0x02, - 0x01, 0x92, 0x04, 0x4a, 0x01, 0x9b, 0x53, 0x68, 0x18, 0x43, 0x50, 0x60, - 0x02, 0xb0, 0x70, 0x47, 0x00, 0x44, 0x02, 0x58, 0x00, 0x04, 0x00, 0x58, - 0x11, 0xf0, 0x01, 0x03, 0x07, 0xd0, 0x90, 0xf8, 0x41, 0x30, 0x03, 0xf0, - 0x28, 0x03, 0x28, 0x2b, 0x0c, 0xbf, 0x42, 0x23, 0xf2, 0x23, 0x8a, 0x07, - 0x09, 0xd5, 0x90, 0xf8, 0x41, 0x20, 0x02, 0xf0, 0x28, 0x02, 0x28, 0x2a, - 0x0c, 0xbf, 0x43, 0xf0, 0x44, 0x03, 0x43, 0xf0, 0xf4, 0x03, 0x0a, 0x04, - 0x01, 0x68, 0x48, 0xbf, 0x43, 0xf0, 0xb8, 0x03, 0x0a, 0x68, 0x22, 0xea, - 0x03, 0x03, 0x0b, 0x60, 0x70, 0x47, 0x90, 0xf8, 0x41, 0x30, 0x02, 0x68, - 0x03, 0xf0, 0x28, 0x03, 0x28, 0x2b, 0x10, 0xb5, 0x1f, 0xd1, 0x93, 0x69, - 0x91, 0x69, 0x93, 0x68, 0xd4, 0x68, 0xc4, 0x68, 0x02, 0x2c, 0x12, 0xd1, - 0xc3, 0xf3, 0xc2, 0x13, 0x83, 0xea, 0x11, 0x43, 0x13, 0xf0, 0x06, 0x03, - 0x0b, 0xd1, 0x81, 0x6c, 0x01, 0x31, 0x81, 0x64, 0x81, 0x6c, 0x02, 0x29, - 0x04, 0xd1, 0x08, 0x21, 0x83, 0x64, 0xd1, 0x61, 0x80, 0xf8, 0x40, 0x30, - 0x10, 0xbd, 0x4f, 0xf4, 0x00, 0x41, 0xff, 0xf7, 0xb9, 0xff, 0x00, 0x23, - 0xf6, 0xe7, 0x08, 0x23, 0xd3, 0x61, 0xfa, 0xe7, 0x08, 0xb5, 0x15, 0x4b, - 0x20, 0x22, 0xc3, 0x62, 0x00, 0x23, 0x03, 0x63, 0x43, 0x63, 0x80, 0xf8, - 0x41, 0x20, 0x80, 0xf8, 0x42, 0x30, 0x4b, 0x07, 0x12, 0xd5, 0x03, 0x68, - 0x5a, 0x6a, 0x43, 0x6a, 0x1a, 0x70, 0x43, 0x6a, 0x01, 0x33, 0x43, 0x62, - 0x03, 0x8d, 0x4b, 0xb1, 0x01, 0x3b, 0x03, 0x85, 0x43, 0x8d, 0x01, 0x3b, - 0x9b, 0xb2, 0x43, 0x85, 0x43, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x43, 0x64, - 0x48, 0xf2, 0x03, 0x01, 0xff, 0xf7, 0x90, 0xff, 0x10, 0x22, 0x03, 0x68, - 0xda, 0x61, 0x00, 0x23, 0x80, 0xf8, 0x40, 0x30, 0x08, 0xbd, 0x00, 0xbf, - 0x00, 0x00, 0xff, 0xff, 0x08, 0xb5, 0x03, 0x68, 0x00, 0x21, 0x1a, 0x68, - 0x80, 0xf8, 0x42, 0x10, 0x51, 0x04, 0x13, 0xd5, 0x1a, 0x68, 0x22, 0xf4, - 0x80, 0x42, 0x1a, 0x60, 0x90, 0xf8, 0x41, 0x30, 0x29, 0x2b, 0x11, 0xd1, - 0x28, 0x23, 0x01, 0x21, 0x80, 0xf8, 0x41, 0x30, 0x21, 0x23, 0x03, 0x63, - 0xff, 0xf7, 0x6e, 0xff, 0x00, 0x23, 0x80, 0xf8, 0x40, 0x30, 0x08, 0xbd, - 0x12, 0x04, 0xed, 0xd5, 0x1a, 0x68, 0x22, 0xf4, 0x00, 0x42, 0xe8, 0xe7, - 0x90, 0xf8, 0x41, 0x30, 0x2a, 0x2b, 0xf4, 0xd1, 0x28, 0x23, 0x02, 0x21, - 0x80, 0xf8, 0x41, 0x30, 0x22, 0x23, 0x03, 0x63, 0xe8, 0xe7, 0x00, 0x00, - 0x38, 0xb5, 0x0c, 0x4b, 0x04, 0x46, 0x0c, 0x4d, 0x03, 0x60, 0x00, 0x23, - 0xc0, 0xe9, 0x01, 0x31, 0x01, 0x23, 0x03, 0x73, 0x28, 0x46, 0x0f, 0xf0, - 0x31, 0xfa, 0x0a, 0xf0, 0x91, 0xfd, 0x07, 0x4b, 0x28, 0x46, 0x1a, 0x68, - 0x1c, 0x60, 0x62, 0x60, 0x0f, 0xf0, 0x28, 0xfa, 0x0a, 0xf0, 0x68, 0xfd, - 0x20, 0x46, 0x38, 0xbd, 0x5c, 0xde, 0x01, 0x08, 0xcc, 0x06, 0x00, 0x24, - 0xc8, 0x06, 0x00, 0x24, 0xf8, 0xb5, 0x03, 0x78, 0x90, 0xf8, 0x01, 0xc0, - 0x01, 0x2b, 0x05, 0x7f, 0x02, 0x79, 0x07, 0x7b, 0x86, 0x68, 0x44, 0x79, - 0x2e, 0xd0, 0x02, 0x2b, 0x2f, 0xd0, 0x00, 0x2b, 0x30, 0xd1, 0x4f, 0xf4, - 0x80, 0x73, 0x8b, 0x61, 0x00, 0x23, 0xc1, 0xf8, 0x00, 0xc0, 0x4d, 0x61, - 0x4b, 0x63, 0xc1, 0xe9, 0x0b, 0x33, 0x3f, 0xb3, 0xcb, 0x61, 0xcb, 0x60, - 0x03, 0x7c, 0x01, 0x2b, 0x45, 0xd0, 0x02, 0x2b, 0x48, 0xd0, 0x00, 0x2b, - 0x4b, 0xd1, 0x4f, 0xf4, 0x80, 0x43, 0x0b, 0x62, 0x01, 0x23, 0x02, 0x7e, - 0x00, 0x2a, 0x47, 0xd0, 0x00, 0x23, 0x0b, 0x62, 0x0b, 0x61, 0x43, 0x7f, - 0x01, 0x2b, 0x6a, 0xd0, 0x02, 0x2b, 0x6b, 0xd0, 0x00, 0x2b, 0x6c, 0xd1, - 0x4f, 0xf0, 0x80, 0x73, 0x00, 0x20, 0x4b, 0x62, 0x88, 0x62, 0xf8, 0xbd, - 0x4f, 0xf4, 0x00, 0x73, 0xd3, 0xe7, 0x4f, 0xf4, 0x40, 0x73, 0xd0, 0xe7, - 0x00, 0x23, 0xce, 0xe7, 0x01, 0x2a, 0x4e, 0x60, 0x0b, 0xd0, 0x02, 0x2a, - 0x0c, 0xd0, 0x72, 0xb9, 0x4f, 0xf4, 0x80, 0x63, 0xcb, 0x61, 0x03, 0x2c, - 0x09, 0xd8, 0xdf, 0xe8, 0x04, 0xf0, 0x0b, 0x0d, 0x10, 0x13, 0x4f, 0xf4, - 0x00, 0x63, 0xf5, 0xe7, 0x4f, 0xf4, 0x40, 0x63, 0xf2, 0xe7, 0x27, 0x48, - 0x0e, 0xf0, 0x3e, 0xfe, 0x00, 0x23, 0xbe, 0xe7, 0x4f, 0xf4, 0x80, 0x53, - 0xbb, 0xe7, 0x4f, 0xf4, 0x00, 0x53, 0xb8, 0xe7, 0x4f, 0xf4, 0x40, 0x53, - 0xb5, 0xe7, 0x4f, 0xf4, 0x00, 0x43, 0x0b, 0x62, 0x02, 0x23, 0xbc, 0xe7, - 0x4f, 0xf4, 0x40, 0x43, 0x0b, 0x62, 0x04, 0x23, 0xb7, 0xe7, 0x00, 0x23, - 0x0b, 0x62, 0xb4, 0xe7, 0x7b, 0xb3, 0x42, 0x7c, 0xb2, 0xfb, 0xf3, 0xf4, - 0x03, 0xfb, 0x14, 0x24, 0x14, 0xf0, 0xff, 0x0f, 0x27, 0xd1, 0x56, 0x1e, - 0xf6, 0x10, 0x74, 0x1c, 0x04, 0x2c, 0x22, 0xdc, 0xc2, 0xeb, 0xc4, 0x02, - 0x12, 0xf0, 0xff, 0x02, 0x10, 0xd0, 0xb2, 0xfb, 0xf3, 0xf3, 0x9d, 0x42, - 0x19, 0xd3, 0xeb, 0x1a, 0x4b, 0x61, 0x43, 0x69, 0x03, 0xfa, 0x02, 0xf2, - 0x8a, 0x60, 0x03, 0x2e, 0x07, 0xd8, 0x24, 0x04, 0xa4, 0xf5, 0x80, 0x34, - 0x0c, 0x61, 0x96, 0xe7, 0x43, 0x69, 0x8b, 0x60, 0xf5, 0xe7, 0x07, 0x48, - 0xbc, 0xe7, 0x4f, 0xf0, 0x00, 0x73, 0x97, 0xe7, 0x4f, 0xf0, 0x40, 0x73, - 0x94, 0xe7, 0x00, 0x23, 0x92, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0x92, 0xe7, - 0x40, 0xd4, 0x01, 0x08, 0x69, 0xd4, 0x01, 0x08, 0x00, 0xb5, 0x56, 0x4b, - 0x8d, 0xb0, 0x0a, 0x28, 0x00, 0xf2, 0xa4, 0x80, 0xdf, 0xe8, 0x00, 0xf0, - 0x06, 0x16, 0x24, 0x32, 0x40, 0x4e, 0x5c, 0x6a, 0x78, 0x86, 0x94, 0x00, - 0xd3, 0xf8, 0xe0, 0x20, 0x4f, 0x48, 0x42, 0xf0, 0x01, 0x02, 0xc3, 0xf8, - 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x01, 0x03, 0x01, 0x93, - 0x01, 0x9b, 0x0d, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0xd3, 0xf8, 0xe0, 0x20, - 0x48, 0x48, 0x42, 0xf0, 0x02, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, - 0xe0, 0x30, 0x03, 0xf0, 0x02, 0x03, 0x02, 0x93, 0x02, 0x9b, 0xee, 0xe7, - 0xd3, 0xf8, 0xe0, 0x20, 0x42, 0x48, 0x42, 0xf0, 0x04, 0x02, 0xc3, 0xf8, - 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x04, 0x03, 0x03, 0x93, - 0x03, 0x9b, 0xe0, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, 0x3c, 0x48, 0x42, 0xf0, - 0x08, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, - 0x08, 0x03, 0x04, 0x93, 0x04, 0x9b, 0xd2, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, - 0x36, 0x48, 0x42, 0xf0, 0x10, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, - 0xe0, 0x30, 0x03, 0xf0, 0x10, 0x03, 0x05, 0x93, 0x05, 0x9b, 0xc4, 0xe7, - 0xd3, 0xf8, 0xe0, 0x20, 0x30, 0x48, 0x42, 0xf0, 0x20, 0x02, 0xc3, 0xf8, - 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x20, 0x03, 0x06, 0x93, - 0x06, 0x9b, 0xb6, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, 0x2a, 0x48, 0x42, 0xf0, - 0x40, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf0, - 0x40, 0x03, 0x07, 0x93, 0x07, 0x9b, 0xa8, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, - 0x24, 0x48, 0x42, 0xf0, 0x80, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, - 0xe0, 0x30, 0x03, 0xf0, 0x80, 0x03, 0x08, 0x93, 0x08, 0x9b, 0x9a, 0xe7, - 0xd3, 0xf8, 0xe0, 0x20, 0x1e, 0x48, 0x42, 0xf4, 0x80, 0x72, 0xc3, 0xf8, - 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf4, 0x80, 0x73, 0x09, 0x93, - 0x09, 0x9b, 0x8c, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, 0x18, 0x48, 0x42, 0xf4, - 0x00, 0x72, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x03, 0xf4, - 0x00, 0x73, 0x0a, 0x93, 0x0a, 0x9b, 0x7e, 0xe7, 0xd3, 0xf8, 0xe0, 0x20, - 0x12, 0x48, 0x42, 0xf4, 0x80, 0x62, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, - 0xe0, 0x30, 0x03, 0xf4, 0x80, 0x63, 0x0b, 0x93, 0x0b, 0x9b, 0x70, 0xe7, - 0x0d, 0x48, 0x0e, 0xf0, 0x41, 0xfd, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, - 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x02, 0x58, 0x00, 0x08, 0x02, 0x58, - 0x00, 0x0c, 0x02, 0x58, 0x00, 0x10, 0x02, 0x58, 0x00, 0x14, 0x02, 0x58, - 0x00, 0x18, 0x02, 0x58, 0x00, 0x1c, 0x02, 0x58, 0x00, 0x20, 0x02, 0x58, - 0x00, 0x24, 0x02, 0x58, 0x00, 0x28, 0x02, 0x58, 0x80, 0xd4, 0x01, 0x08, - 0x05, 0x4b, 0x07, 0xb5, 0x18, 0x68, 0x01, 0x90, 0x07, 0xf0, 0x99, 0xff, - 0x01, 0x98, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, 0x07, 0xf0, 0x63, 0xbf, - 0x34, 0x0e, 0x00, 0x24, 0x05, 0x4b, 0x07, 0xb5, 0x58, 0x68, 0x01, 0x90, - 0x07, 0xf0, 0x8b, 0xff, 0x01, 0x98, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, - 0x07, 0xf0, 0x55, 0xbf, 0x34, 0x0e, 0x00, 0x24, 0x05, 0x4b, 0x07, 0xb5, - 0x98, 0x68, 0x01, 0x90, 0x07, 0xf0, 0x7d, 0xff, 0x01, 0x98, 0x03, 0xb0, - 0x5d, 0xf8, 0x04, 0xeb, 0x07, 0xf0, 0x47, 0xbf, 0x34, 0x0e, 0x00, 0x24, - 0x05, 0x4b, 0x07, 0xb5, 0xd8, 0x68, 0x01, 0x90, 0x07, 0xf0, 0x6f, 0xff, - 0x01, 0x98, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, 0x07, 0xf0, 0x39, 0xbf, - 0x34, 0x0e, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, 0xe9, 0xb0, 0x05, 0x46, - 0x93, 0x46, 0x0f, 0x46, 0x44, 0x22, 0x00, 0x21, 0x15, 0xa8, 0x98, 0x46, - 0x1a, 0xf0, 0xa6, 0xf8, 0xea, 0x6d, 0x42, 0xf2, 0x10, 0x73, 0x59, 0x46, - 0x07, 0x32, 0x15, 0xa8, 0x23, 0x93, 0xd2, 0x08, 0x10, 0xf0, 0x3e, 0xfc, - 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xd1, 0x81, 0x05, 0xf1, 0x34, 0x01, - 0x08, 0xf1, 0x0c, 0x00, 0x10, 0xf0, 0xa4, 0xfb, 0x00, 0x28, 0x40, 0xf0, - 0xa3, 0x80, 0x05, 0xf1, 0x28, 0x01, 0x40, 0x46, 0x10, 0xf0, 0x9c, 0xfb, - 0xb0, 0xfa, 0x80, 0xf3, 0x5b, 0x09, 0x05, 0x93, 0xeb, 0x6d, 0xb3, 0xf5, - 0xc0, 0x7f, 0x2c, 0xbf, 0x05, 0x22, 0x04, 0x22, 0x03, 0x92, 0x05, 0x9a, - 0x12, 0xb1, 0x03, 0x9a, 0x01, 0x32, 0x03, 0x92, 0x03, 0x9a, 0x93, 0x42, - 0x98, 0xbf, 0x02, 0x22, 0x01, 0x3b, 0x02, 0xf1, 0xff, 0x39, 0x03, 0x92, - 0x01, 0x22, 0x02, 0xfa, 0x09, 0xf2, 0x06, 0x92, 0x9d, 0xf8, 0x18, 0x20, - 0x04, 0x92, 0x03, 0x9a, 0x13, 0x44, 0xb3, 0xfb, 0xf2, 0xf3, 0x02, 0x93, - 0x05, 0x9b, 0x13, 0xb1, 0x6e, 0x6f, 0x00, 0x2e, 0x5e, 0xd1, 0x24, 0x21, - 0x06, 0x98, 0x1b, 0xf0, 0x01, 0xfb, 0x06, 0x46, 0x00, 0x28, 0x00, 0xf0, - 0x95, 0x81, 0x00, 0x24, 0x4f, 0xf0, 0x24, 0x0a, 0x0a, 0xfb, 0x04, 0x60, - 0x01, 0x34, 0x10, 0xf0, 0x2f, 0xfb, 0x04, 0x9a, 0xe3, 0xb2, 0x9a, 0x42, - 0xf6, 0xd8, 0x41, 0x46, 0x30, 0x46, 0x10, 0xf0, 0x7f, 0xff, 0x04, 0x46, - 0x00, 0x28, 0x6e, 0xd1, 0x02, 0x9b, 0x80, 0x46, 0x03, 0xfb, 0x09, 0xfa, - 0x4f, 0xf0, 0x01, 0x09, 0xd0, 0x45, 0x53, 0xd1, 0x0d, 0xf1, 0x98, 0x09, - 0x00, 0x22, 0x01, 0x23, 0x48, 0x46, 0x03, 0xeb, 0xc3, 0x01, 0x01, 0x32, - 0x5b, 0x00, 0x06, 0xeb, 0x81, 0x01, 0xdb, 0xb2, 0x40, 0xf8, 0x04, 0x1b, - 0x04, 0x99, 0x99, 0x42, 0xf3, 0xd8, 0x26, 0xa9, 0x28, 0x46, 0x12, 0xf0, - 0xa9, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x4e, 0xd1, 0x4f, 0xf0, 0x01, 0x08, - 0x08, 0xeb, 0xc8, 0x03, 0xc2, 0x46, 0x06, 0xeb, 0x83, 0x03, 0x52, 0x46, - 0x0a, 0xf1, 0xff, 0x3a, 0x00, 0x2a, 0x6b, 0xd1, 0x4f, 0xea, 0x48, 0x08, - 0x04, 0x9b, 0x5f, 0xfa, 0x88, 0xf8, 0x43, 0x45, 0xee, 0xd8, 0x24, 0x23, - 0x01, 0x32, 0x06, 0x99, 0x91, 0x42, 0x6d, 0xd1, 0x4a, 0x1e, 0x28, 0x46, - 0x26, 0xa9, 0x12, 0xf0, 0x89, 0xfc, 0x04, 0x46, 0x78, 0xbb, 0x05, 0x9b, - 0x13, 0xb1, 0x06, 0x9b, 0x6e, 0x67, 0xab, 0x67, 0x00, 0x24, 0x05, 0xf1, - 0x4c, 0x08, 0x01, 0x23, 0x0d, 0xf1, 0x24, 0x09, 0x21, 0x46, 0x40, 0x46, - 0x0e, 0x94, 0xc9, 0xf8, 0x08, 0x40, 0xc9, 0xe9, 0x00, 0x34, 0xcd, 0xe9, - 0x0c, 0x34, 0x10, 0xf0, 0x6c, 0xfc, 0x01, 0x28, 0x53, 0xd0, 0xa4, 0xf5, - 0x9f, 0x44, 0x14, 0xe0, 0x05, 0x94, 0x63, 0xe7, 0x02, 0x9b, 0xb8, 0xfb, - 0xf3, 0xf0, 0x09, 0xfa, 0x00, 0xf1, 0x24, 0x23, 0xc9, 0xb2, 0x03, 0xfb, - 0x01, 0x62, 0x02, 0x9b, 0x03, 0xfb, 0x10, 0x80, 0xe8, 0xb1, 0x11, 0x46, - 0x28, 0x46, 0x11, 0xf0, 0xc5, 0xff, 0x04, 0x46, 0x28, 0xb3, 0x15, 0xa8, - 0x10, 0xf0, 0xe0, 0xf9, 0x44, 0x21, 0x15, 0xa8, 0x0f, 0xf0, 0x62, 0xfc, - 0x42, 0xf2, 0x10, 0x73, 0x23, 0x93, 0x6b, 0x6f, 0xb3, 0x42, 0x02, 0xd0, - 0x00, 0x2e, 0x40, 0xf0, 0x12, 0x81, 0x14, 0xb1, 0x38, 0x46, 0x10, 0xf0, - 0x86, 0xfd, 0x20, 0x46, 0x69, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x49, 0x08, - 0x10, 0x46, 0x07, 0x92, 0x01, 0xeb, 0xc1, 0x01, 0x06, 0xeb, 0x81, 0x01, - 0x10, 0xf0, 0xec, 0xfe, 0x07, 0x9a, 0x04, 0x46, 0x00, 0x28, 0xd4, 0xd0, - 0xd9, 0xe7, 0x08, 0xf1, 0x01, 0x08, 0x6d, 0xe7, 0x24, 0x22, 0x28, 0x46, - 0x07, 0x93, 0x02, 0xfb, 0x0a, 0xf1, 0x72, 0x18, 0x19, 0x44, 0x12, 0xf0, - 0xd7, 0xf8, 0x07, 0x9b, 0x04, 0x46, 0x00, 0x28, 0x81, 0xd0, 0xc8, 0xe7, - 0x03, 0xfb, 0x02, 0x61, 0x49, 0xf8, 0x04, 0x1b, 0x88, 0xe7, 0x21, 0x46, - 0x58, 0x46, 0x10, 0xf0, 0x12, 0xfc, 0xb0, 0xfa, 0x80, 0xfa, 0x59, 0x46, - 0x48, 0x46, 0x10, 0xf0, 0x9b, 0xfe, 0x04, 0x46, 0x4f, 0xea, 0x5a, 0x1a, - 0x00, 0xbb, 0x5a, 0x46, 0x41, 0x46, 0x0c, 0xa8, 0x11, 0xf0, 0x4f, 0xfb, - 0x04, 0x46, 0xc8, 0xb9, 0x52, 0x46, 0x0c, 0xa9, 0x48, 0x46, 0x10, 0xf0, - 0xed, 0xfc, 0x04, 0x46, 0x90, 0xb9, 0x02, 0x9b, 0x0d, 0xf1, 0x98, 0x08, - 0x01, 0x46, 0x26, 0xa8, 0x5a, 0x1c, 0xa3, 0x46, 0x19, 0xf0, 0x76, 0xff, - 0x43, 0x46, 0x02, 0x9a, 0x5a, 0x45, 0x4f, 0xd1, 0x4f, 0xf0, 0x00, 0x0e, - 0x4f, 0xf0, 0x01, 0x0c, 0xe3, 0x45, 0x65, 0xd2, 0x0c, 0xa8, 0x10, 0xf0, - 0x0b, 0xfd, 0x09, 0xa8, 0x10, 0xf0, 0x08, 0xfd, 0x00, 0x2c, 0x8c, 0xd1, - 0x0c, 0xa8, 0x0d, 0xf1, 0x98, 0x08, 0x10, 0xf0, 0x3d, 0xfa, 0x02, 0x9b, - 0x32, 0x46, 0x39, 0x46, 0x18, 0xf8, 0x03, 0x30, 0x28, 0x46, 0x00, 0x93, - 0x04, 0x9b, 0x11, 0xf0, 0x63, 0xfb, 0x04, 0x46, 0x88, 0xb9, 0x01, 0x21, - 0x07, 0xf1, 0x18, 0x00, 0x10, 0xf0, 0x1a, 0xfc, 0x04, 0x46, 0x50, 0xb9, - 0x15, 0xab, 0x4d, 0x4a, 0x39, 0x46, 0x28, 0x46, 0x11, 0xf0, 0xc8, 0xfe, - 0x04, 0x46, 0x10, 0xb9, 0x02, 0x9b, 0x00, 0x2b, 0x5b, 0xd1, 0x0c, 0xa8, - 0x10, 0xf0, 0xf3, 0xfc, 0x00, 0x2c, 0x7f, 0xf4, 0x64, 0xaf, 0x52, 0x46, - 0x39, 0x46, 0x28, 0x46, 0x11, 0xf0, 0x20, 0xfb, 0x04, 0x46, 0x00, 0x28, - 0x7f, 0xf4, 0x5b, 0xaf, 0x15, 0xab, 0x40, 0x4a, 0x39, 0x46, 0x28, 0x46, - 0x11, 0xf0, 0xae, 0xfe, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x51, 0xaf, - 0x39, 0x46, 0x28, 0x46, 0x12, 0xf0, 0x56, 0xfb, 0x04, 0x46, 0x4a, 0xe7, - 0x59, 0x46, 0x00, 0x22, 0x48, 0x46, 0x05, 0x91, 0xcd, 0xe9, 0x06, 0x32, - 0x10, 0xf0, 0x95, 0xfb, 0x07, 0x9a, 0x06, 0x9b, 0x90, 0x40, 0x02, 0x99, - 0x93, 0xf8, 0x00, 0xc0, 0x01, 0x32, 0x4c, 0xea, 0x00, 0x00, 0x18, 0x70, - 0x08, 0x46, 0x05, 0x99, 0x01, 0x44, 0x03, 0x98, 0x90, 0x42, 0xe9, 0xd8, - 0x0b, 0xf1, 0x01, 0x0b, 0x01, 0x33, 0x90, 0xe7, 0x98, 0xf8, 0x01, 0x00, - 0x0c, 0xf1, 0x01, 0x0c, 0x98, 0xf8, 0x00, 0x20, 0x80, 0xea, 0x0e, 0x03, - 0x00, 0xea, 0x0e, 0x00, 0xd9, 0x43, 0x5b, 0xb2, 0x01, 0xf0, 0x01, 0x01, - 0x12, 0xfb, 0x01, 0xf2, 0x52, 0xb2, 0x03, 0xea, 0x02, 0x09, 0x53, 0x40, - 0x08, 0xf8, 0x01, 0x3f, 0x49, 0xea, 0x00, 0x0e, 0x18, 0xf8, 0x01, 0x3c, - 0x5f, 0xfa, 0x8e, 0xfe, 0x43, 0xea, 0xc1, 0x11, 0x08, 0xf8, 0x01, 0x1c, - 0x76, 0xe7, 0x02, 0x9b, 0x3a, 0x46, 0x39, 0x46, 0x28, 0x46, 0x01, 0x3b, - 0x02, 0x93, 0x11, 0xf0, 0xc9, 0xfe, 0x90, 0xb9, 0x02, 0x9b, 0x32, 0x46, - 0x0c, 0xa9, 0x28, 0x46, 0x13, 0xf8, 0x08, 0x30, 0x00, 0x93, 0x04, 0x9b, - 0x11, 0xf0, 0xe0, 0xfa, 0x38, 0xb9, 0x0c, 0xab, 0x3a, 0x46, 0x39, 0x46, - 0x28, 0x46, 0x11, 0xf0, 0xfd, 0xff, 0x00, 0x28, 0x84, 0xd0, 0x04, 0x46, - 0x85, 0xe7, 0x00, 0x26, 0x04, 0x96, 0xec, 0xe6, 0x0a, 0x4c, 0xea, 0xe6, - 0x08, 0xfb, 0x05, 0x60, 0x01, 0x35, 0x10, 0xf0, 0x80, 0xfc, 0xeb, 0xb2, - 0x04, 0x9a, 0x9a, 0x42, 0xf6, 0xd8, 0x30, 0x46, 0x19, 0xf0, 0x4e, 0xfe, - 0xed, 0xe6, 0x00, 0x25, 0x4f, 0xf0, 0x24, 0x08, 0xf3, 0xe7, 0x00, 0xbf, - 0x15, 0x19, 0x01, 0x08, 0x80, 0xb2, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, - 0x2d, 0xed, 0x02, 0x8b, 0xbb, 0xb0, 0x04, 0x46, 0x0e, 0x46, 0x91, 0x46, - 0x08, 0xee, 0x10, 0x3a, 0x10, 0xf0, 0xa8, 0xf9, 0x02, 0x28, 0x40, 0xf0, - 0x9d, 0x81, 0x44, 0x22, 0x00, 0x21, 0x29, 0xa8, 0x20, 0xad, 0x19, 0xf0, - 0x97, 0xfe, 0x42, 0xf2, 0x10, 0x73, 0x28, 0x46, 0x01, 0x27, 0x37, 0x93, - 0x10, 0xf0, 0x6e, 0xf9, 0xe2, 0x6d, 0x00, 0x23, 0x49, 0x46, 0x29, 0xa8, - 0x07, 0x32, 0x04, 0x93, 0xd2, 0x08, 0xcd, 0xe9, 0x02, 0x73, 0x10, 0xf0, - 0x27, 0xfa, 0x03, 0x46, 0x00, 0x28, 0x62, 0xd1, 0x18, 0xee, 0x10, 0x1a, - 0x02, 0xa8, 0x10, 0xf0, 0x87, 0xfd, 0x03, 0x46, 0x00, 0x28, 0x5a, 0xd1, - 0x18, 0xee, 0x10, 0x1a, 0x28, 0x46, 0x10, 0xf0, 0xab, 0xfd, 0x03, 0x46, - 0x00, 0x28, 0x52, 0xd1, 0x39, 0x46, 0x30, 0x46, 0x10, 0xf0, 0x3a, 0xfb, - 0x03, 0x46, 0x00, 0x28, 0x4b, 0xd1, 0x06, 0xf1, 0x18, 0x07, 0x01, 0x46, - 0x38, 0x46, 0x10, 0xf0, 0x31, 0xfb, 0x03, 0x46, 0x00, 0x28, 0x42, 0xd1, - 0x04, 0xf1, 0x04, 0x0b, 0x06, 0xf1, 0x0c, 0x00, 0x10, 0xf0, 0xfe, 0xfb, - 0x59, 0x46, 0x28, 0x46, 0x10, 0xf0, 0x6a, 0xf9, 0x00, 0x28, 0x2e, 0xda, - 0x29, 0xab, 0xb3, 0x4a, 0x29, 0x46, 0x20, 0x46, 0x11, 0xf0, 0x88, 0xfd, - 0x03, 0x46, 0x70, 0xbb, 0x48, 0x46, 0x4f, 0xf0, 0x01, 0x08, 0x10, 0xf0, - 0x1f, 0xfa, 0x43, 0x1e, 0x00, 0x93, 0x00, 0x9b, 0x01, 0x33, 0x3f, 0xd1, - 0x29, 0xab, 0xaa, 0x4a, 0x31, 0x46, 0x20, 0x46, 0x11, 0xf0, 0x76, 0xfd, - 0x03, 0x46, 0xe0, 0xb9, 0x5a, 0x46, 0x39, 0x46, 0x38, 0x46, 0x12, 0xf0, - 0x95, 0xf8, 0x03, 0x46, 0xa8, 0xb9, 0x3b, 0x46, 0x32, 0x46, 0x31, 0x46, - 0x20, 0x46, 0x11, 0xf0, 0x6b, 0xfc, 0x03, 0x46, 0x68, 0xb9, 0x01, 0x21, - 0x38, 0x46, 0x10, 0xf0, 0xf5, 0xfa, 0x03, 0x46, 0x07, 0xe0, 0x5a, 0x46, - 0x29, 0x46, 0x28, 0x46, 0x10, 0xf0, 0xb5, 0xfe, 0x03, 0x46, 0x00, 0x28, - 0xc2, 0xd0, 0x29, 0xa8, 0x00, 0x93, 0x10, 0xf0, 0x27, 0xf8, 0x44, 0x21, - 0x29, 0xa8, 0x0f, 0xf0, 0xa9, 0xfa, 0x42, 0xf2, 0x10, 0x72, 0x20, 0xa8, - 0x37, 0x92, 0x10, 0xf0, 0xc6, 0xfb, 0x02, 0xa8, 0x10, 0xf0, 0xb0, 0xfb, - 0x00, 0x9b, 0x00, 0x2b, 0x00, 0xf0, 0x0b, 0x81, 0x18, 0x46, 0x3b, 0xb0, - 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0x99, 0x48, 0x46, - 0x10, 0xf0, 0x7b, 0xfa, 0x29, 0x46, 0x5f, 0xfa, 0x80, 0xfa, 0x30, 0x46, - 0x52, 0x46, 0x10, 0xf0, 0x27, 0xfb, 0x03, 0x46, 0x00, 0x28, 0xd6, 0xd1, - 0x52, 0x46, 0x26, 0xa9, 0x38, 0x46, 0x10, 0xf0, 0x1f, 0xfb, 0x03, 0x46, - 0x00, 0x28, 0xce, 0xd1, 0x3b, 0x46, 0x1f, 0x90, 0x32, 0x46, 0x05, 0xa9, - 0xcd, 0xe9, 0x05, 0x80, 0xcd, 0xe9, 0x07, 0x08, 0xcd, 0xe9, 0x09, 0x00, - 0xcd, 0xe9, 0x0b, 0x80, 0xcd, 0xe9, 0x0d, 0x08, 0xcd, 0xe9, 0x0f, 0x00, - 0xcd, 0xe9, 0x11, 0x80, 0xcd, 0xe9, 0x13, 0x08, 0xcd, 0xe9, 0x15, 0x00, - 0xcd, 0xe9, 0x17, 0x80, 0xcd, 0xe9, 0x19, 0x08, 0xcd, 0xe9, 0x1b, 0x00, - 0xcd, 0xe9, 0x1d, 0x80, 0x20, 0x46, 0x11, 0xf0, 0x31, 0xfa, 0x03, 0x46, - 0x00, 0x28, 0x40, 0xf0, 0x93, 0x80, 0x05, 0xab, 0x08, 0xa9, 0x20, 0x46, - 0x1a, 0x46, 0x11, 0xf0, 0xff, 0xfb, 0x03, 0x46, 0x00, 0x28, 0x40, 0xf0, - 0x89, 0x80, 0x3b, 0x46, 0x32, 0x46, 0x0b, 0xa9, 0x20, 0x46, 0x11, 0xf0, - 0x2d, 0xfa, 0x03, 0x46, 0x00, 0x28, 0x7f, 0xd1, 0x0b, 0xab, 0x0e, 0xa9, - 0x20, 0x46, 0x1a, 0x46, 0x11, 0xf0, 0xec, 0xfb, 0x03, 0x46, 0x00, 0x28, - 0x76, 0xd1, 0x0e, 0xab, 0x08, 0xaa, 0x11, 0xa9, 0x20, 0x46, 0x11, 0xf0, - 0x1b, 0xfa, 0x03, 0x46, 0x00, 0x28, 0x6d, 0xd1, 0x26, 0xab, 0x2a, 0x46, - 0x14, 0xa9, 0x20, 0x46, 0x11, 0xf0, 0x02, 0xfa, 0x03, 0x46, 0x00, 0x28, - 0x64, 0xd1, 0x26, 0xab, 0x2a, 0x46, 0x17, 0xa9, 0x20, 0x46, 0x11, 0xf0, - 0x09, 0xfa, 0x03, 0x46, 0x00, 0x28, 0x5b, 0xd1, 0x05, 0xab, 0x17, 0xaa, - 0x1a, 0xa9, 0x20, 0x46, 0x11, 0xf0, 0xc8, 0xfb, 0x03, 0x46, 0x00, 0x28, - 0x52, 0xd1, 0x0b, 0xab, 0x14, 0xaa, 0x1d, 0xa9, 0x20, 0x46, 0x11, 0xf0, - 0xbf, 0xfb, 0x03, 0x46, 0x00, 0x28, 0x49, 0xd1, 0x1d, 0xab, 0x1a, 0xaa, - 0x29, 0x46, 0x20, 0x46, 0x11, 0xf0, 0xde, 0xf9, 0x03, 0x46, 0x00, 0x28, - 0x40, 0xd1, 0x2b, 0x46, 0x2a, 0x46, 0x29, 0x46, 0x20, 0x46, 0x11, 0xf0, - 0xad, 0xfb, 0x03, 0x46, 0x00, 0x28, 0x37, 0xd1, 0x1d, 0xab, 0x1a, 0xaa, - 0x26, 0xa9, 0x20, 0x46, 0x11, 0xf0, 0xdc, 0xf9, 0x03, 0x46, 0x78, 0xbb, - 0x26, 0xab, 0x20, 0x46, 0x1a, 0x46, 0x19, 0x46, 0x11, 0xf0, 0x9c, 0xfb, - 0x03, 0x46, 0x38, 0xbb, 0x26, 0xab, 0x02, 0xaa, 0x20, 0x46, 0x19, 0x46, - 0x11, 0xf0, 0x94, 0xfb, 0x03, 0x46, 0xf8, 0xb9, 0x0e, 0xab, 0x08, 0xaa, - 0x31, 0x46, 0x20, 0x46, 0x11, 0xf0, 0x8c, 0xfb, 0x03, 0x46, 0xb8, 0xb9, - 0x11, 0xab, 0x04, 0xf1, 0x10, 0x02, 0x39, 0x46, 0x20, 0x46, 0x11, 0xf0, - 0x83, 0xfb, 0x03, 0x46, 0x70, 0xb9, 0x3b, 0x46, 0x0e, 0xaa, 0x39, 0x46, - 0x20, 0x46, 0x11, 0xf0, 0xa3, 0xf9, 0x03, 0x46, 0x30, 0xb9, 0x3b, 0x46, - 0x11, 0xaa, 0x39, 0x46, 0x20, 0x46, 0x11, 0xf0, 0x73, 0xfb, 0x03, 0x46, - 0x05, 0xa8, 0x01, 0x93, 0x10, 0xf0, 0xd4, 0xfa, 0x08, 0xa8, 0x10, 0xf0, - 0xd1, 0xfa, 0x0b, 0xa8, 0x10, 0xf0, 0xce, 0xfa, 0x0e, 0xa8, 0x10, 0xf0, - 0xcb, 0xfa, 0x11, 0xa8, 0x10, 0xf0, 0xc8, 0xfa, 0x14, 0xa8, 0x10, 0xf0, - 0xc5, 0xfa, 0x17, 0xa8, 0x10, 0xf0, 0xc2, 0xfa, 0x1a, 0xa8, 0x10, 0xf0, - 0xbf, 0xfa, 0x1d, 0xa8, 0x10, 0xf0, 0xbc, 0xfa, 0x01, 0x9b, 0x00, 0x2b, - 0x7f, 0xf4, 0xf7, 0xae, 0x52, 0x46, 0x29, 0x46, 0x30, 0x46, 0x10, 0xf0, - 0x3f, 0xfa, 0x03, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0xee, 0xae, 0x52, 0x46, - 0x26, 0xa9, 0x38, 0x46, 0x10, 0xf0, 0x36, 0xfa, 0x00, 0x9b, 0x01, 0x3b, - 0x00, 0x93, 0x03, 0x46, 0x00, 0x28, 0x3f, 0xf4, 0xba, 0xae, 0xe0, 0xe6, - 0x09, 0x4b, 0x20, 0x46, 0x00, 0x93, 0x10, 0xf0, 0x03, 0xf8, 0x01, 0x28, - 0x00, 0x9b, 0x7f, 0xf4, 0xed, 0xae, 0x18, 0xee, 0x10, 0x3a, 0x4a, 0x46, - 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x3e, 0xfc, 0x03, 0x46, 0xe3, 0xe6, - 0x15, 0x19, 0x01, 0x08, 0x80, 0xb0, 0xff, 0xff, 0xf7, 0xb5, 0x05, 0x46, - 0x0c, 0x46, 0x10, 0x46, 0x01, 0x21, 0x16, 0x46, 0x1f, 0x46, 0x10, 0xf0, - 0x36, 0xf8, 0x30, 0xb9, 0x39, 0x46, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x40, 0x10, 0xf0, 0x0f, 0xbc, 0x4f, 0xf0, 0xff, 0x31, 0x30, 0x46, - 0x10, 0xf0, 0x29, 0xf8, 0xa0, 0xb9, 0x39, 0x46, 0x20, 0x46, 0x10, 0xf0, - 0x05, 0xfc, 0x10, 0xbb, 0x04, 0xf1, 0x0c, 0x02, 0x01, 0x46, 0x10, 0x46, - 0x01, 0x92, 0x10, 0xf0, 0x1c, 0xf8, 0x01, 0x9a, 0xc8, 0xb1, 0x29, 0x1d, - 0x10, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, 0x11, 0xf0, 0x85, 0xb8, - 0x31, 0x46, 0x28, 0x46, 0x10, 0xf0, 0x46, 0xf9, 0x68, 0xb9, 0x39, 0x46, - 0x28, 0x46, 0x11, 0xf0, 0x3d, 0xfb, 0x40, 0xb9, 0x3b, 0x46, 0x32, 0x46, - 0x21, 0x46, 0x28, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, 0xff, 0xf7, - 0xff, 0xbd, 0x03, 0xb0, 0xf0, 0xbd, 0x30, 0xb5, 0x8f, 0xb0, 0x0c, 0x46, - 0x19, 0x46, 0x13, 0x9d, 0xfb, 0xb1, 0x00, 0x23, 0xcd, 0xe9, 0x06, 0x33, - 0x08, 0x93, 0x13, 0x0f, 0x8d, 0xf8, 0x24, 0x30, 0x13, 0x0d, 0x8d, 0xf8, - 0x25, 0x30, 0x13, 0x0b, 0x12, 0x09, 0x8d, 0xf8, 0x26, 0x30, 0x8d, 0xf8, - 0x27, 0x20, 0x4f, 0xf4, 0x8e, 0x72, 0x23, 0x78, 0x02, 0xfb, 0x03, 0x00, - 0x12, 0x9b, 0x05, 0xaa, 0x05, 0x93, 0x0a, 0xab, 0x04, 0x30, 0x00, 0x93, - 0x06, 0xab, 0xcd, 0xe9, 0x01, 0x55, 0x12, 0xf0, 0x49, 0xfa, 0x0f, 0xb0, - 0x30, 0xbd, 0x37, 0xb5, 0x02, 0x23, 0x15, 0x46, 0x01, 0xaa, 0x04, 0x46, - 0x12, 0xf0, 0xce, 0xf9, 0x18, 0xb9, 0x01, 0x9b, 0x1b, 0xb9, 0x6f, 0xf0, - 0x63, 0x00, 0x03, 0xb0, 0x30, 0xbd, 0x23, 0x68, 0x93, 0xf9, 0x00, 0x30, - 0x00, 0x2b, 0xf6, 0xdb, 0x01, 0x9b, 0x3b, 0xb1, 0x22, 0x68, 0x11, 0x78, - 0xa1, 0xb1, 0x04, 0x2b, 0xef, 0xd8, 0x01, 0xd1, 0x0b, 0x06, 0xec, 0xd4, - 0x00, 0x23, 0x2b, 0x60, 0x01, 0x9b, 0x5a, 0x1e, 0x01, 0x92, 0x00, 0x2b, - 0xe7, 0xd0, 0x23, 0x68, 0x29, 0x68, 0x13, 0xf8, 0x01, 0x2b, 0x42, 0xea, - 0x01, 0x22, 0x2a, 0x60, 0x23, 0x60, 0xf1, 0xe7, 0x01, 0x32, 0x01, 0x3b, - 0x22, 0x60, 0x01, 0x93, 0xe0, 0xe7, 0x00, 0x00, 0xf8, 0xb5, 0x0a, 0x23, - 0x68, 0x4e, 0x05, 0x46, 0x0c, 0x46, 0x03, 0x60, 0x33, 0x68, 0x1b, 0xb9, - 0x12, 0xf0, 0x0a, 0xfc, 0x01, 0x23, 0x33, 0x60, 0x05, 0xf1, 0x08, 0x03, - 0x2a, 0x46, 0x21, 0x46, 0x04, 0xf1, 0x10, 0x00, 0x42, 0xf8, 0x04, 0x3f, - 0x8b, 0x78, 0x04, 0x31, 0x11, 0xf8, 0x03, 0x4c, 0x1b, 0x04, 0x43, 0xea, - 0x04, 0x23, 0x11, 0xf8, 0x04, 0x4c, 0x23, 0x43, 0x11, 0xf8, 0x01, 0x4c, - 0x88, 0x42, 0x43, 0xea, 0x04, 0x63, 0x42, 0xf8, 0x04, 0x3f, 0xed, 0xd1, - 0x2b, 0x68, 0x0c, 0x2b, 0x2e, 0xd0, 0x0e, 0x2b, 0x5d, 0xd0, 0x0a, 0x2b, - 0x28, 0xd1, 0x28, 0x46, 0x53, 0x49, 0x54, 0x4d, 0x00, 0xf1, 0xa0, 0x06, - 0x42, 0x69, 0x10, 0x30, 0x55, 0xf8, 0x04, 0x4b, 0x50, 0xf8, 0x08, 0x7c, - 0xc2, 0xf3, 0x07, 0x23, 0x7c, 0x40, 0xcb, 0x5c, 0x63, 0x40, 0x14, 0x0e, - 0x0c, 0x5d, 0x83, 0xea, 0x04, 0x43, 0xd4, 0xb2, 0x0c, 0x5d, 0x83, 0xea, - 0x04, 0x63, 0xc2, 0xf3, 0x07, 0x44, 0x0c, 0x5d, 0x83, 0xea, 0x04, 0x23, - 0x50, 0xf8, 0x04, 0x4c, 0x83, 0x60, 0x63, 0x40, 0x04, 0x68, 0xc3, 0x60, - 0x63, 0x40, 0x03, 0x61, 0x53, 0x40, 0x43, 0x61, 0x86, 0x42, 0xdb, 0xd1, - 0x00, 0x20, 0xf8, 0xbd, 0x28, 0x46, 0x3f, 0x4c, 0xc0, 0x35, 0x3d, 0x49, - 0xc2, 0x69, 0x18, 0x30, 0x54, 0xf8, 0x04, 0x6b, 0x50, 0xf8, 0x10, 0x7c, - 0xc2, 0xf3, 0x07, 0x23, 0x7e, 0x40, 0xcb, 0x5c, 0x73, 0x40, 0x16, 0x0e, - 0x8e, 0x5d, 0x83, 0xea, 0x06, 0x43, 0xd6, 0xb2, 0x8e, 0x5d, 0x83, 0xea, - 0x06, 0x63, 0xc2, 0xf3, 0x07, 0x46, 0x8e, 0x5d, 0x83, 0xea, 0x06, 0x23, - 0x50, 0xf8, 0x0c, 0x6c, 0x83, 0x60, 0x73, 0x40, 0x50, 0xf8, 0x08, 0x6c, - 0xc3, 0x60, 0x73, 0x40, 0x50, 0xf8, 0x04, 0x6c, 0x03, 0x61, 0x73, 0x40, - 0x06, 0x68, 0x43, 0x61, 0x73, 0x40, 0x83, 0x61, 0x53, 0x40, 0xc3, 0x61, - 0x85, 0x42, 0xd3, 0xd1, 0xcc, 0xe7, 0x28, 0x46, 0x25, 0x49, 0x26, 0x4d, - 0x00, 0xf1, 0xe0, 0x06, 0x44, 0x6a, 0x20, 0x30, 0x55, 0xf8, 0x04, 0x2b, - 0x50, 0xf8, 0x18, 0x7c, 0xc4, 0xf3, 0x07, 0x23, 0x7a, 0x40, 0xcb, 0x5c, - 0x50, 0xf8, 0x08, 0x7c, 0x53, 0x40, 0x22, 0x0e, 0x8a, 0x5c, 0x83, 0xea, - 0x02, 0x43, 0xe2, 0xb2, 0x8a, 0x5c, 0x83, 0xea, 0x02, 0x63, 0xc4, 0xf3, - 0x07, 0x42, 0x8a, 0x5c, 0x83, 0xea, 0x02, 0x23, 0x50, 0xf8, 0x14, 0x2c, - 0x83, 0x60, 0x53, 0x40, 0x50, 0xf8, 0x10, 0x2c, 0xc3, 0x60, 0x53, 0x40, - 0x50, 0xf8, 0x0c, 0x2c, 0x03, 0x61, 0x53, 0x40, 0xda, 0xb2, 0x43, 0x61, - 0x8a, 0x5c, 0x7a, 0x40, 0x1f, 0x0e, 0xcf, 0x5d, 0x82, 0xea, 0x07, 0x62, - 0xc3, 0xf3, 0x07, 0x27, 0xc3, 0xf3, 0x07, 0x43, 0xcf, 0x5d, 0xcb, 0x5c, - 0x82, 0xea, 0x07, 0x22, 0x82, 0xea, 0x03, 0x43, 0x50, 0xf8, 0x04, 0x2c, - 0x83, 0x61, 0x53, 0x40, 0x02, 0x68, 0xc3, 0x61, 0x53, 0x40, 0x03, 0x62, - 0x63, 0x40, 0x43, 0x62, 0x86, 0x42, 0xbb, 0xd1, 0x82, 0xe7, 0x00, 0xbf, - 0xf4, 0x06, 0x00, 0x24, 0x1c, 0x04, 0x00, 0x24, 0x1c, 0x05, 0x00, 0x24, - 0x38, 0xb5, 0x4f, 0xf4, 0x8e, 0x74, 0x05, 0x46, 0x4c, 0x43, 0x02, 0xeb, - 0x01, 0x11, 0x20, 0x44, 0x0c, 0x31, 0x04, 0x30, 0xff, 0xf7, 0x1a, 0xff, - 0x00, 0x28, 0x03, 0x46, 0x13, 0xbf, 0x00, 0x22, 0x01, 0x22, 0x03, 0x46, - 0x4f, 0xf0, 0xff, 0x33, 0x2a, 0x55, 0x18, 0x46, 0x38, 0xbd, 0x2d, 0xe9, - 0xf0, 0x43, 0x1d, 0x46, 0x89, 0xb0, 0x06, 0x46, 0x0f, 0x46, 0x6c, 0x1e, - 0x90, 0x46, 0xfe, 0xf7, 0x59, 0xfd, 0x04, 0x44, 0x40, 0x42, 0x04, 0x40, - 0xe4, 0xb2, 0x20, 0x2c, 0x1a, 0xd8, 0x30, 0x46, 0xfe, 0xf7, 0x44, 0xfd, - 0x81, 0x46, 0x2a, 0x46, 0x41, 0x46, 0x68, 0x46, 0x19, 0xf0, 0x36, 0xfb, - 0x62, 0x1b, 0x49, 0x46, 0x0d, 0xeb, 0x05, 0x00, 0x19, 0xf0, 0x3e, 0xfb, - 0x23, 0x46, 0x6a, 0x46, 0x39, 0x46, 0x30, 0x46, 0xfe, 0xf7, 0x4a, 0xfd, - 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, - 0x4f, 0xf0, 0xff, 0x30, 0xf9, 0xe7, 0x07, 0xb5, 0x81, 0x68, 0x01, 0x23, - 0x01, 0xaa, 0x40, 0x39, 0x8d, 0xf8, 0x04, 0x30, 0xff, 0xf7, 0xc9, 0xff, - 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x43, - 0x85, 0xb0, 0x1e, 0x46, 0x1b, 0x4b, 0x4f, 0xf0, 0x00, 0x08, 0x03, 0x92, - 0x07, 0x46, 0x02, 0x78, 0x0d, 0x46, 0x53, 0xf8, 0x22, 0x40, 0x0a, 0x46, - 0x23, 0x68, 0x20, 0x46, 0xcd, 0xe9, 0x00, 0x68, 0xd3, 0xf8, 0x3c, 0x90, - 0x43, 0x46, 0xc8, 0x47, 0x03, 0x99, 0x58, 0xb9, 0x12, 0x4b, 0x1b, 0x78, - 0x2b, 0xb1, 0x33, 0x46, 0x2a, 0x46, 0x39, 0x78, 0x10, 0x48, 0x0d, 0xf0, - 0x0f, 0xfa, 0x4f, 0xf0, 0xff, 0x34, 0x13, 0xe0, 0x23, 0x68, 0x20, 0x46, - 0x2a, 0x46, 0xcd, 0xe9, 0x00, 0x68, 0xd3, 0xf8, 0x14, 0x90, 0x43, 0x46, - 0xc8, 0x47, 0x04, 0x46, 0x40, 0xb1, 0x07, 0x4b, 0x1b, 0x78, 0x2b, 0xb1, - 0x33, 0x46, 0x2a, 0x46, 0x39, 0x78, 0x06, 0x48, 0x0d, 0xf0, 0xf8, 0xf9, - 0x20, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x04, 0x00, 0x00, 0x24, - 0xd8, 0x0d, 0x00, 0x24, 0xa1, 0xd4, 0x01, 0x08, 0xd0, 0xd4, 0x01, 0x08, - 0x2d, 0xe9, 0xf7, 0x43, 0x04, 0x46, 0x17, 0x46, 0x99, 0x46, 0x0e, 0x46, - 0x29, 0xb9, 0x4f, 0xf0, 0xff, 0x38, 0x40, 0x46, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x83, 0x00, 0x2a, 0xf7, 0xd0, 0x0b, 0x69, 0x38, 0x46, 0x8d, 0x68, - 0x1d, 0x44, 0x04, 0x23, 0x29, 0x46, 0x0d, 0xeb, 0x03, 0x02, 0xff, 0xf7, - 0xa3, 0xff, 0x80, 0x46, 0x00, 0x28, 0xea, 0xd1, 0xbd, 0xf8, 0x04, 0x10, - 0x46, 0xf6, 0x08, 0x12, 0xf3, 0x68, 0x91, 0x42, 0x22, 0xd1, 0xbd, 0xf8, - 0x06, 0x10, 0x99, 0x42, 0xdf, 0xd1, 0x04, 0x23, 0x29, 0x44, 0x38, 0x46, - 0x0d, 0xeb, 0x03, 0x02, 0xff, 0xf7, 0x8e, 0xff, 0x00, 0x28, 0xd6, 0xd1, - 0xbd, 0xf8, 0x04, 0x20, 0x46, 0xf6, 0x07, 0x13, 0x9a, 0x42, 0xd0, 0xd1, - 0x00, 0x23, 0xbd, 0xf8, 0x06, 0x20, 0xa4, 0xf8, 0x08, 0x90, 0xa3, 0x72, - 0xf3, 0x68, 0x2b, 0x44, 0x04, 0x35, 0xe3, 0x60, 0x13, 0x44, 0x25, 0x61, - 0x63, 0x61, 0xc4, 0xe9, 0x00, 0x67, 0xc2, 0xe7, 0x00, 0x2b, 0xe7, 0xd0, - 0xbd, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4f, 0x07, 0x46, 0x85, 0xb0, - 0x88, 0x46, 0x99, 0x46, 0x00, 0x26, 0xdf, 0xf8, 0xcc, 0xa0, 0xdf, 0xf8, - 0xcc, 0xb0, 0x03, 0x92, 0x0e, 0x9b, 0xb3, 0x42, 0x01, 0xd8, 0x00, 0x20, - 0x0f, 0xe0, 0x0e, 0x9b, 0x52, 0x46, 0x03, 0x99, 0x38, 0x46, 0x9c, 0x1b, - 0x71, 0x18, 0xb4, 0xf5, 0x80, 0x6f, 0x28, 0xbf, 0x4f, 0xf4, 0x80, 0x64, - 0x23, 0x46, 0xff, 0xf7, 0x53, 0xff, 0x18, 0xb1, 0x01, 0x20, 0x05, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x3a, 0x78, 0x98, 0xf8, 0x00, 0x30, 0x01, 0x2a, - 0x05, 0xd0, 0x01, 0x2b, 0x2e, 0xd1, 0x4d, 0x46, 0xdf, 0xf8, 0x88, 0xe0, - 0x04, 0xe0, 0x01, 0x2b, 0x28, 0xd0, 0x03, 0x9d, 0xdf, 0xf8, 0x80, 0xe0, - 0xde, 0xf8, 0x14, 0x30, 0x13, 0xf0, 0x0c, 0x0f, 0x20, 0xd0, 0x35, 0x44, - 0xde, 0xf8, 0x08, 0x10, 0x8d, 0x42, 0xa5, 0xeb, 0x01, 0x00, 0x24, 0xd2, - 0x8c, 0x42, 0x27, 0xd9, 0x63, 0x1a, 0x0a, 0x46, 0x4f, 0xf0, 0x00, 0x0c, - 0xde, 0xf8, 0x10, 0xe0, 0x71, 0x44, 0x04, 0xeb, 0x05, 0x0e, 0x71, 0x45, - 0x03, 0xd2, 0x8d, 0x42, 0x34, 0xbf, 0x4b, 0x1b, 0x00, 0x23, 0x0a, 0xeb, - 0x02, 0x01, 0x02, 0x44, 0x58, 0x46, 0xcd, 0xe9, 0x00, 0xc1, 0x39, 0x46, - 0xff, 0xf7, 0x91, 0xfd, 0x23, 0x46, 0x52, 0x46, 0x06, 0xeb, 0x09, 0x01, - 0x40, 0x46, 0xfe, 0xf7, 0x45, 0xfc, 0x00, 0x28, 0xbc, 0xd1, 0x26, 0x44, - 0xa6, 0xe7, 0x00, 0xf0, 0x0f, 0x0c, 0x23, 0x46, 0x00, 0x22, 0xdb, 0xe7, - 0x00, 0x23, 0x0a, 0x46, 0x9c, 0x46, 0xd7, 0xe7, 0xd8, 0x09, 0x00, 0x24, - 0x80, 0x07, 0x00, 0x24, 0x14, 0x07, 0x00, 0x24, 0x40, 0x07, 0x00, 0x24, - 0x2d, 0xe9, 0xf7, 0x43, 0x04, 0x46, 0x0f, 0x46, 0x90, 0x46, 0x1e, 0x46, - 0x4f, 0xf6, 0xff, 0x79, 0xd4, 0xe9, 0x04, 0x23, 0x9a, 0x42, 0x15, 0xd2, - 0x23, 0x68, 0xdb, 0x68, 0x23, 0xb1, 0xe3, 0x68, 0x93, 0x42, 0x04, 0xbf, - 0x04, 0x33, 0x23, 0x61, 0x04, 0x23, 0x21, 0x69, 0x60, 0x68, 0x0d, 0xeb, - 0x03, 0x02, 0xff, 0xf7, 0xe1, 0xfe, 0x18, 0xbb, 0xa3, 0x7a, 0x25, 0x69, - 0x33, 0xb1, 0xe3, 0x68, 0xab, 0x42, 0x03, 0xd8, 0x01, 0x20, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x83, 0x21, 0x89, 0xbd, 0xf8, 0x06, 0x30, 0x49, 0x45, - 0x03, 0xf1, 0x04, 0x02, 0x03, 0xd0, 0xbd, 0xf8, 0x04, 0xc0, 0x8c, 0x45, - 0x0b, 0xd1, 0x16, 0xb1, 0xbd, 0xf8, 0x04, 0x10, 0x31, 0x80, 0x04, 0x35, - 0x3d, 0x60, 0xa8, 0xf8, 0x00, 0x30, 0x23, 0x69, 0x13, 0x44, 0x23, 0x61, - 0xe5, 0xe7, 0x15, 0x44, 0x25, 0x61, 0xc7, 0xe7, 0x4f, 0xf0, 0xff, 0x30, - 0xdf, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4f, 0x13, 0x78, 0xad, 0xf5, - 0x0f, 0x7d, 0x82, 0x46, 0x0d, 0x46, 0x01, 0x2b, 0x93, 0x46, 0x0d, 0xd1, - 0x4b, 0x69, 0x13, 0xf0, 0x0c, 0x0f, 0x09, 0xd0, 0x90, 0xf8, 0x1c, 0x31, - 0x33, 0xb9, 0x4f, 0xf0, 0xff, 0x31, 0x08, 0x46, 0x0d, 0xf5, 0x0f, 0x7d, - 0xbd, 0xe8, 0xf0, 0x8f, 0x40, 0x22, 0x00, 0x21, 0x6d, 0xa8, 0xdf, 0xf8, - 0xa8, 0x82, 0x19, 0xf0, 0xbb, 0xf9, 0xa1, 0x4a, 0xa1, 0x4b, 0x00, 0x24, - 0xaf, 0x68, 0x2e, 0x69, 0xdf, 0xf8, 0x98, 0x92, 0x3e, 0x44, 0xdf, 0xf8, - 0x98, 0xe2, 0xdf, 0xf8, 0x98, 0xc2, 0x9d, 0x48, 0x9d, 0x49, 0x7d, 0x94, - 0xcd, 0xe9, 0x6b, 0x23, 0xeb, 0x68, 0xf3, 0x18, 0xcd, 0xe9, 0x65, 0x98, - 0xcd, 0xe9, 0x02, 0x39, 0xcd, 0xe9, 0x04, 0x8e, 0x95, 0x4b, 0xdf, 0xf8, - 0x64, 0x82, 0x0a, 0x93, 0xcd, 0xe9, 0x63, 0x44, 0xcd, 0xe9, 0x67, 0xec, - 0xcd, 0xe9, 0x69, 0x01, 0xcd, 0xe9, 0x06, 0xc0, 0xcd, 0xe9, 0x08, 0x12, - 0x02, 0x9b, 0xa3, 0x42, 0x42, 0xd8, 0x29, 0xa9, 0x63, 0xa8, 0x0f, 0xf0, - 0x05, 0xfa, 0x29, 0x46, 0x4f, 0xf6, 0xff, 0x73, 0x5a, 0x46, 0x23, 0xa8, - 0xff, 0xf7, 0xa8, 0xfe, 0x01, 0x46, 0x00, 0x28, 0xbb, 0xd1, 0x4f, 0xf0, - 0xff, 0x35, 0x88, 0x4e, 0x07, 0x46, 0xdf, 0xf8, 0x38, 0x92, 0x2c, 0x46, - 0x06, 0xf1, 0x5b, 0x08, 0x23, 0x9b, 0x00, 0x2b, 0xad, 0xd0, 0x24, 0x9b, - 0x00, 0x2b, 0xaa, 0xd0, 0x0d, 0xa9, 0x0d, 0xf1, 0x32, 0x03, 0x0c, 0xaa, - 0x23, 0xa8, 0xff, 0xf7, 0x4f, 0xff, 0x01, 0x1e, 0xa3, 0xdb, 0x40, 0xf0, - 0x53, 0x82, 0xbd, 0xf8, 0x32, 0x30, 0x10, 0x2b, 0x59, 0xd1, 0xbd, 0xf8, - 0x30, 0x70, 0x20, 0x2f, 0x97, 0xd1, 0x0d, 0x99, 0x3b, 0x46, 0x43, 0xaa, - 0x58, 0x46, 0xff, 0xf7, 0x39, 0xfe, 0x01, 0x46, 0x00, 0x28, 0x90, 0xd1, - 0x43, 0xa9, 0x3a, 0x46, 0x29, 0xa8, 0x1a, 0xf0, 0xad, 0xfc, 0x01, 0x46, - 0x00, 0x28, 0x88, 0xd1, 0x01, 0x27, 0xd3, 0xe7, 0x02, 0x9b, 0xa3, 0xeb, - 0x04, 0x09, 0xb9, 0xf5, 0x80, 0x7f, 0x28, 0xbf, 0x4f, 0xf4, 0x80, 0x79, - 0xa7, 0x42, 0x05, 0xd9, 0x04, 0xeb, 0x09, 0x03, 0x9f, 0x42, 0x38, 0xbf, - 0xa7, 0xeb, 0x04, 0x09, 0xa6, 0x42, 0x05, 0xd9, 0x04, 0xeb, 0x09, 0x03, - 0x9e, 0x42, 0x38, 0xbf, 0xa6, 0xeb, 0x04, 0x09, 0x21, 0x46, 0x4b, 0x46, - 0x62, 0x4a, 0x58, 0x46, 0xff, 0xf7, 0x0e, 0xfe, 0x01, 0x46, 0x00, 0x28, - 0x7f, 0xf4, 0x65, 0xaf, 0x9b, 0xf8, 0x00, 0x30, 0x01, 0x2b, 0x12, 0xd1, - 0x6b, 0x69, 0x13, 0xf0, 0x0c, 0x0f, 0x0e, 0xd0, 0xa7, 0x42, 0x0c, 0xd8, - 0xa6, 0x42, 0x0a, 0xd9, 0xe2, 0x1b, 0x59, 0x46, 0x50, 0x46, 0xcd, 0xf8, - 0x04, 0x80, 0x02, 0xf0, 0x0f, 0x03, 0x00, 0x93, 0x4b, 0x46, 0xff, 0xf7, - 0x6c, 0xfc, 0xb9, 0xf1, 0x00, 0x0f, 0x04, 0xd0, 0x4a, 0x46, 0x41, 0x46, - 0x63, 0xa8, 0x0f, 0xf0, 0x1f, 0xf9, 0x4c, 0x44, 0x76, 0xe7, 0x01, 0x2b, - 0x3d, 0xd1, 0xbd, 0xf8, 0x30, 0x30, 0x20, 0x2b, 0x3f, 0xf6, 0x3b, 0xaf, - 0x0d, 0x99, 0x43, 0xaa, 0x58, 0x46, 0xff, 0xf7, 0xdd, 0xfd, 0x01, 0x46, - 0x00, 0x28, 0x7f, 0xf4, 0x34, 0xaf, 0x9d, 0xf8, 0x30, 0x50, 0x20, 0x2d, - 0x7b, 0xd8, 0x40, 0x22, 0x02, 0x90, 0x6d, 0xa8, 0x19, 0xf0, 0xf2, 0xf8, - 0x03, 0x9b, 0x02, 0x99, 0x5b, 0x22, 0x65, 0x93, 0x63, 0xa8, 0x04, 0x9b, - 0x7d, 0x91, 0x66, 0x93, 0x05, 0x9b, 0x67, 0x93, 0x06, 0x9b, 0x68, 0x93, - 0x07, 0x9b, 0x69, 0x93, 0x08, 0x9b, 0x6a, 0x93, 0x09, 0x9b, 0x6b, 0x93, - 0x0a, 0x9b, 0xcd, 0xe9, 0x63, 0x11, 0x31, 0x46, 0x6c, 0x93, 0x0f, 0xf0, - 0xeb, 0xf8, 0x3a, 0xa9, 0x63, 0xa8, 0x0f, 0xf0, 0x4d, 0xf9, 0x2a, 0x46, - 0x43, 0xa9, 0x3a, 0xa8, 0x1a, 0xf0, 0x2a, 0xfc, 0x00, 0x38, 0x18, 0xbf, - 0x01, 0x20, 0x45, 0x42, 0x50, 0xe7, 0x22, 0x2b, 0x7f, 0xf4, 0x4e, 0xaf, - 0x00, 0x2d, 0x7f, 0xf4, 0x4b, 0xaf, 0xbd, 0xf8, 0x30, 0x30, 0x80, 0x2b, - 0x3f, 0xf6, 0xf7, 0xae, 0x43, 0xac, 0x0d, 0x99, 0x58, 0x46, 0x22, 0x46, - 0xff, 0xf7, 0x98, 0xfd, 0x01, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0xef, 0xae, - 0x30, 0x23, 0x31, 0xaa, 0x41, 0x46, 0x0e, 0xa8, 0xbd, 0xf8, 0x30, 0xa0, - 0x0e, 0x96, 0x11, 0xf0, 0x01, 0xfe, 0x70, 0xbb, 0x31, 0x9b, 0x3a, 0xaa, - 0x0e, 0x9d, 0x0e, 0xa8, 0x1d, 0x44, 0x63, 0xab, 0x29, 0x46, 0x11, 0xf0, - 0x0b, 0xfe, 0x20, 0xbb, 0x3b, 0x9a, 0x07, 0x2a, 0x21, 0xd1, 0x49, 0x46, - 0x3c, 0x98, 0x1a, 0xf0, 0xf5, 0xfb, 0xe0, 0xb9, 0x64, 0x9a, 0x08, 0x2a, - 0x19, 0xd1, 0x15, 0x49, 0x65, 0x98, 0x1a, 0xf0, 0xed, 0xfb, 0xa0, 0xb9, - 0x03, 0x23, 0x31, 0xaa, 0x29, 0x46, 0x0e, 0xa8, 0x11, 0xf0, 0xe0, 0xfd, - 0x68, 0xb9, 0x31, 0x9a, 0x5a, 0xb1, 0x51, 0x1e, 0x0e, 0x9b, 0x31, 0x91, - 0x18, 0x78, 0x30, 0xb9, 0x58, 0x1c, 0x13, 0x44, 0x9d, 0x42, 0x0e, 0x90, - 0x01, 0xd1, 0x41, 0x29, 0x1c, 0xd0, 0x4f, 0xf0, 0xff, 0x34, 0x4f, 0xf0, - 0xff, 0x35, 0xfd, 0xe6, 0xab, 0xd9, 0x83, 0x1f, 0x19, 0xcd, 0xe0, 0x5b, - 0x7f, 0x52, 0x0e, 0x51, 0x8c, 0x68, 0x05, 0x9b, 0x00, 0x03, 0x00, 0x08, - 0x00, 0x6b, 0x00, 0x24, 0xbf, 0xde, 0x01, 0x08, 0x85, 0xae, 0x67, 0xbb, - 0x67, 0xe6, 0x09, 0x6a, 0x72, 0xf3, 0x6e, 0x3c, 0x3a, 0xf5, 0x4f, 0xa5, - 0xae, 0xde, 0x01, 0x08, 0x63, 0xa8, 0x01, 0x25, 0x0f, 0xf0, 0x46, 0xfb, - 0x00, 0x23, 0x85, 0xa8, 0x84, 0x93, 0xcd, 0xe9, 0x82, 0x53, 0x0f, 0xf0, - 0x33, 0xfb, 0x0e, 0x99, 0xa1, 0x4b, 0x63, 0xa8, 0x0b, 0x91, 0x5b, 0x1a, - 0x02, 0x93, 0x0f, 0xf0, 0x14, 0xfe, 0x03, 0x22, 0x63, 0xa8, 0x8d, 0xf8, - 0x8c, 0x21, 0x0f, 0xf0, 0x39, 0xfc, 0x02, 0x9b, 0x0b, 0x99, 0x58, 0xb1, - 0x4f, 0xf0, 0xff, 0x34, 0x63, 0xa8, 0x0f, 0xf0, 0x06, 0xfe, 0x82, 0xa8, - 0x0f, 0xf0, 0xde, 0xfd, 0x85, 0xa8, 0x0f, 0xf0, 0xee, 0xfd, 0xbc, 0xe7, - 0x0a, 0x46, 0x63, 0xa8, 0x85, 0xa9, 0x0f, 0xf0, 0x97, 0xfe, 0x00, 0x28, - 0xec, 0xd1, 0x85, 0xa9, 0x63, 0xa8, 0x10, 0xf0, 0xb5, 0xfe, 0x00, 0x28, - 0xe6, 0xd1, 0xa2, 0x44, 0x30, 0x23, 0x10, 0xaa, 0x0f, 0x94, 0x51, 0x46, - 0xcd, 0xe9, 0x11, 0x50, 0xcd, 0xe9, 0x13, 0x05, 0xcd, 0xe9, 0x15, 0x00, - 0x0f, 0xa8, 0x11, 0xf0, 0x71, 0xfd, 0x60, 0xb1, 0xa0, 0xf5, 0x9f, 0x44, - 0x11, 0xa8, 0x0f, 0xf0, 0xb9, 0xfd, 0x14, 0xa8, 0x0f, 0xf0, 0xb6, 0xfd, - 0x20, 0x1e, 0x18, 0xbf, 0x01, 0x20, 0x44, 0x42, 0xcc, 0xe7, 0xdd, 0xe9, - 0x0f, 0x32, 0x13, 0x44, 0x9a, 0x45, 0x40, 0xf0, 0xf1, 0x80, 0x11, 0xaa, - 0x51, 0x46, 0x0f, 0xa8, 0x11, 0xf0, 0xb7, 0xfd, 0x04, 0x46, 0x30, 0xb9, - 0x14, 0xaa, 0x51, 0x46, 0x0f, 0xa8, 0x11, 0xf0, 0xb0, 0xfd, 0x04, 0x46, - 0x10, 0xb1, 0xa4, 0xf5, 0x9f, 0x44, 0xdd, 0xe7, 0x31, 0xa8, 0x0f, 0xf0, - 0xd3, 0xfa, 0x9d, 0xf8, 0x8c, 0x31, 0x09, 0x2b, 0xcd, 0xe9, 0x17, 0x54, - 0xcd, 0xe9, 0x19, 0x45, 0xcd, 0xe9, 0x1b, 0x44, 0xcd, 0xe9, 0x1d, 0x54, - 0xcd, 0xe9, 0x1f, 0x45, 0xcd, 0xe9, 0x21, 0x44, 0x01, 0xd1, 0x6b, 0x4c, - 0xc8, 0xe7, 0x78, 0x9b, 0x00, 0x2b, 0xfa, 0xd0, 0x01, 0x21, 0x11, 0xa8, - 0x0f, 0xf0, 0x31, 0xfb, 0x00, 0x28, 0x17, 0xda, 0x66, 0x4c, 0x31, 0xa8, - 0x0f, 0xf0, 0x8b, 0xfd, 0x17, 0xa8, 0x0f, 0xf0, 0x75, 0xfd, 0x1a, 0xa8, - 0x0f, 0xf0, 0x72, 0xfd, 0x1d, 0xa8, 0x0f, 0xf0, 0x6f, 0xfd, 0x20, 0xa8, - 0x0f, 0xf0, 0x6c, 0xfd, 0x00, 0x2c, 0xad, 0xd1, 0x0f, 0x9a, 0x5e, 0x4b, - 0x92, 0x45, 0x18, 0xbf, 0x1c, 0x46, 0xa7, 0xe7, 0x76, 0xa9, 0x11, 0xa8, - 0x0f, 0xf0, 0xd0, 0xfa, 0x00, 0x28, 0xe1, 0xda, 0x01, 0x21, 0x14, 0xa8, - 0x0f, 0xf0, 0x0d, 0xfb, 0x00, 0x28, 0xdb, 0xdb, 0x76, 0xa9, 0x14, 0xa8, - 0x0f, 0xf0, 0xc4, 0xfa, 0x00, 0x28, 0xd5, 0xda, 0x7a, 0x9d, 0x29, 0xa9, - 0x17, 0xa8, 0x07, 0x35, 0xed, 0x08, 0x20, 0x2d, 0x28, 0xbf, 0x20, 0x25, - 0x2a, 0x46, 0x0f, 0xf0, 0xd3, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xc8, 0xd1, - 0x7a, 0x9b, 0xe9, 0x00, 0xb3, 0xeb, 0xc5, 0x0f, 0x3d, 0xd3, 0x76, 0xa9, - 0x17, 0xa8, 0x0f, 0xf0, 0xab, 0xfa, 0x00, 0x28, 0x07, 0xdb, 0x17, 0xa9, - 0x76, 0xaa, 0x08, 0x46, 0x10, 0xf0, 0x59, 0xfb, 0x04, 0x46, 0x00, 0x28, - 0xb5, 0xd1, 0x76, 0xaa, 0x14, 0xa9, 0x1a, 0xa8, 0x11, 0xf0, 0xe8, 0xf9, - 0x04, 0x46, 0x00, 0x28, 0xad, 0xd1, 0x1a, 0xaa, 0x17, 0xa9, 0x1d, 0xa8, - 0x0f, 0xf0, 0xce, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xa5, 0xd1, 0x1d, 0xa9, - 0x76, 0xaa, 0x08, 0x46, 0x10, 0xf0, 0x0b, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0x9d, 0xd1, 0x1a, 0xaa, 0x11, 0xa9, 0x20, 0xa8, 0x0f, 0xf0, 0xbe, 0xfe, - 0x04, 0x46, 0x00, 0x28, 0x95, 0xd1, 0x20, 0xa9, 0x76, 0xaa, 0x08, 0x46, - 0x10, 0xf0, 0xfb, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x8d, 0xd1, 0x63, 0xa8, - 0x0f, 0xf0, 0x6c, 0xfa, 0x01, 0x28, 0x0a, 0xd0, 0xa4, 0xf5, 0x9d, 0x44, - 0x85, 0xe7, 0xc9, 0x1a, 0x17, 0xa8, 0x0f, 0xf0, 0x4f, 0xfc, 0x04, 0x46, - 0x00, 0x28, 0xba, 0xd0, 0x7d, 0xe7, 0x3a, 0xa8, 0x0f, 0xf0, 0x32, 0xfa, - 0x6d, 0xab, 0x1d, 0xaa, 0x3a, 0xa9, 0x63, 0xa8, 0xff, 0xf7, 0x64, 0xfa, - 0x04, 0x46, 0xa0, 0xb9, 0x85, 0xab, 0x20, 0xaa, 0x31, 0xa9, 0x63, 0xa8, - 0xff, 0xf7, 0x5c, 0xfa, 0x04, 0x46, 0x60, 0xb9, 0x31, 0xab, 0x3a, 0xaa, - 0x63, 0xa8, 0x19, 0x46, 0x11, 0xf0, 0x70, 0xf8, 0x04, 0x46, 0x20, 0xb9, - 0x31, 0xa9, 0x63, 0xa8, 0x11, 0xf0, 0x6a, 0xfb, 0x04, 0x46, 0x3a, 0xa8, - 0x0f, 0xf0, 0xe9, 0xfc, 0x00, 0x2c, 0x7f, 0xf4, 0x58, 0xaf, 0x21, 0x46, - 0x37, 0xa8, 0x0f, 0xf0, 0x82, 0xfa, 0x00, 0x28, 0x3f, 0xf4, 0x50, 0xaf, - 0x31, 0xa9, 0x76, 0xaa, 0x08, 0x46, 0x10, 0xf0, 0xb6, 0xfb, 0x04, 0x46, - 0x00, 0x28, 0x7f, 0xf4, 0x48, 0xaf, 0x11, 0xa9, 0x31, 0xa8, 0x0f, 0xf0, - 0x2f, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, 0x40, 0xaf, 0x3d, 0xe7, - 0x07, 0x4c, 0xfb, 0xe6, 0x00, 0x2f, 0x14, 0xbf, 0x21, 0x46, 0x01, 0x21, - 0x49, 0xe5, 0x00, 0xbf, 0x5b, 0x03, 0x00, 0x08, 0x80, 0xb0, 0xff, 0xff, - 0x00, 0xb2, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xff, 0x1a, 0xb0, 0xff, 0xff, - 0x38, 0xb5, 0x0c, 0x46, 0x01, 0x23, 0x11, 0x46, 0x05, 0x46, 0x22, 0x46, - 0xff, 0xf7, 0xdc, 0xfb, 0x00, 0x28, 0x10, 0xdb, 0x4c, 0xb1, 0x01, 0x22, - 0x21, 0x46, 0x28, 0x46, 0xfe, 0xf7, 0x1c, 0xf9, 0x18, 0xb1, 0x03, 0x23, - 0x00, 0x20, 0x23, 0x70, 0x38, 0xbd, 0x23, 0x78, 0x01, 0x2b, 0x0c, 0xbf, - 0x01, 0x23, 0x02, 0x23, 0xf6, 0xe7, 0x01, 0x20, 0xf6, 0xe7, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x4f, 0x85, 0xb0, 0x91, 0x4c, 0x18, 0xf0, 0x4c, 0xf8, - 0x00, 0x25, 0x90, 0x4b, 0x90, 0x49, 0x91, 0x4a, 0x19, 0x60, 0x00, 0x21, - 0x10, 0x60, 0x83, 0xf8, 0x20, 0x10, 0x59, 0x62, 0xc3, 0xe9, 0x04, 0x45, - 0x4f, 0xf4, 0xf0, 0x14, 0x00, 0x25, 0xc3, 0xe9, 0x06, 0x45, 0x8b, 0x4d, - 0x14, 0x46, 0xc3, 0xe9, 0x01, 0x11, 0x2b, 0x78, 0x1b, 0xb9, 0x17, 0xf0, - 0x29, 0xfd, 0x01, 0x23, 0x2b, 0x70, 0x87, 0x4a, 0x14, 0x20, 0xd2, 0xe9, - 0x0d, 0x31, 0x92, 0xf8, 0x25, 0x20, 0x00, 0x2a, 0x08, 0xbf, 0x0b, 0x46, - 0x83, 0x4a, 0x21, 0x68, 0xc2, 0xe9, 0x01, 0x13, 0x0c, 0xf0, 0xe6, 0xfd, - 0x4f, 0xf6, 0xff, 0x71, 0x83, 0x1e, 0x00, 0xf1, 0x12, 0x02, 0x23, 0xf8, - 0x02, 0x1f, 0x93, 0x42, 0xfb, 0xd1, 0x7d, 0x4b, 0x01, 0x22, 0xa5, 0x21, - 0x7c, 0x4c, 0x18, 0x60, 0x00, 0x25, 0x7c, 0x48, 0x4f, 0xf0, 0x00, 0x0a, - 0x15, 0xf0, 0x12, 0xfe, 0x01, 0x22, 0xa6, 0x21, 0x79, 0x48, 0x15, 0xf0, - 0x0d, 0xfe, 0x01, 0x22, 0xa7, 0x21, 0x78, 0x48, 0x15, 0xf0, 0x08, 0xfe, - 0x1c, 0x22, 0x00, 0x21, 0x20, 0x46, 0x18, 0xf0, 0x95, 0xfe, 0x88, 0x21, - 0x20, 0x46, 0x4f, 0xf0, 0x00, 0x0b, 0x21, 0x82, 0x02, 0xf0, 0x92, 0xff, - 0x20, 0x46, 0x00, 0x21, 0x70, 0x4e, 0x02, 0xf0, 0xb1, 0xff, 0xdf, 0xf8, - 0x00, 0x92, 0xb4, 0xf9, 0x10, 0x00, 0x02, 0x21, 0x6d, 0x4c, 0x02, 0xf0, - 0x91, 0xf8, 0x6d, 0x4f, 0x30, 0x46, 0xdf, 0xf8, 0xf0, 0x81, 0xc4, 0xf8, - 0x00, 0x90, 0xa6, 0x61, 0xc4, 0xe9, 0x02, 0xab, 0xc4, 0xe9, 0x04, 0x55, - 0x0c, 0xf0, 0xc6, 0xff, 0x0c, 0xf0, 0x12, 0xfe, 0xc7, 0xf8, 0x00, 0x80, - 0x0c, 0xf0, 0xfa, 0xfd, 0x01, 0x23, 0x65, 0x63, 0x84, 0xf8, 0x38, 0x30, - 0x62, 0x4b, 0x63, 0x48, 0x23, 0x60, 0xc4, 0xe9, 0x08, 0xab, 0x00, 0xf0, - 0xed, 0xf9, 0x61, 0x4c, 0x17, 0xf0, 0xca, 0xff, 0x60, 0x4b, 0x25, 0x61, - 0x18, 0x60, 0x60, 0x4b, 0x23, 0x60, 0x04, 0xf1, 0x44, 0x03, 0x02, 0x93, - 0x10, 0x23, 0xcd, 0xe9, 0x00, 0x55, 0x03, 0x93, 0xef, 0xf3, 0x05, 0x83, - 0x00, 0x2b, 0x73, 0xd0, 0x00, 0x20, 0x20, 0x64, 0x00, 0x25, 0x59, 0x48, - 0x00, 0xf0, 0x44, 0xf9, 0x44, 0x22, 0x00, 0x21, 0x57, 0x48, 0x18, 0xf0, - 0x45, 0xfe, 0x01, 0x23, 0x20, 0x22, 0x29, 0x46, 0xa3, 0x87, 0x65, 0x61, - 0x54, 0x48, 0x18, 0xf0, 0x3d, 0xfe, 0x4f, 0xf4, 0x80, 0x53, 0x28, 0x22, - 0x4f, 0xf4, 0xd0, 0x60, 0xc4, 0xe9, 0x0b, 0x32, 0x50, 0x4b, 0xa3, 0x61, - 0x50, 0x4c, 0xa5, 0x65, 0x18, 0xf0, 0xc0, 0xfd, 0x82, 0x46, 0x80, 0xb3, - 0xc2, 0x1c, 0x22, 0xf0, 0x03, 0x02, 0x13, 0x1a, 0x28, 0x46, 0xe2, 0x60, - 0xc3, 0xf5, 0xd0, 0x63, 0x23, 0xf0, 0x03, 0x03, 0x19, 0x46, 0xc4, 0xe9, - 0x04, 0x55, 0x05, 0xf1, 0x01, 0x0c, 0x00, 0x29, 0x4c, 0xd1, 0x00, 0xb1, - 0x25, 0x61, 0x00, 0x25, 0x22, 0x62, 0xc4, 0xe9, 0x06, 0x53, 0x25, 0x60, - 0x0d, 0xf0, 0x3a, 0xf8, 0x11, 0xf0, 0x86, 0xfe, 0x40, 0x4b, 0x60, 0x60, - 0x00, 0x93, 0x40, 0x4b, 0x25, 0x81, 0x02, 0x93, 0x10, 0x23, 0xa5, 0x72, - 0x84, 0xf8, 0x24, 0x50, 0x01, 0x95, 0x03, 0x93, 0xc4, 0xe9, 0x0a, 0x55, - 0xef, 0xf3, 0x05, 0x83, 0xa3, 0xb3, 0x00, 0x20, 0x20, 0x63, 0xc4, 0xf8, - 0x14, 0xa0, 0x38, 0x4c, 0x4f, 0xf0, 0x00, 0x0a, 0x4f, 0xf0, 0x00, 0x0b, - 0x00, 0x25, 0x26, 0x48, 0xc4, 0xf8, 0x00, 0x90, 0xa6, 0x61, 0xc4, 0xe9, - 0x02, 0xab, 0xc4, 0xe9, 0x04, 0x55, 0x0c, 0xf0, 0x3f, 0xff, 0x0c, 0xf0, - 0x8b, 0xfd, 0xc7, 0xf8, 0x00, 0x80, 0x0c, 0xf0, 0x73, 0xfd, 0x01, 0x23, - 0x65, 0x63, 0x84, 0xf8, 0x38, 0x30, 0x2c, 0x4b, 0xc4, 0xe9, 0x08, 0xab, - 0x23, 0x60, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x15, 0xf0, 0x40, 0xf8, - 0x01, 0x46, 0x00, 0x28, 0x86, 0xd1, 0x4f, 0xf6, 0xff, 0x70, 0x6a, 0x46, - 0xdf, 0xf8, 0x9c, 0xc0, 0x00, 0xdf, 0x80, 0xe7, 0x49, 0x08, 0x65, 0x46, - 0x01, 0x20, 0xaa, 0xe7, 0x15, 0xf0, 0x30, 0xf8, 0x00, 0x28, 0xc6, 0xd1, - 0x68, 0x46, 0xdf, 0xf8, 0x88, 0xc0, 0x00, 0xdf, 0xc2, 0xe7, 0x00, 0xbf, - 0x00, 0x00, 0x02, 0x08, 0x70, 0x06, 0x00, 0x24, 0x38, 0xdc, 0x01, 0x08, - 0x4c, 0x0e, 0x00, 0x24, 0x68, 0x06, 0x00, 0x24, 0xb4, 0x05, 0x00, 0x24, - 0x04, 0x00, 0x00, 0x24, 0xc0, 0x06, 0x00, 0x24, 0xb8, 0x09, 0x00, 0x24, - 0x80, 0x2e, 0x00, 0x24, 0x18, 0x0e, 0x00, 0x24, 0xf8, 0x06, 0x00, 0x24, - 0x18, 0xdf, 0x01, 0x08, 0xc0, 0x6a, 0x00, 0x24, 0xe0, 0x0d, 0x00, 0x24, - 0x44, 0xde, 0x01, 0x08, 0x78, 0x2c, 0x00, 0x24, 0x0c, 0x73, 0x00, 0x24, - 0xdc, 0x0d, 0x00, 0x24, 0x6c, 0xde, 0x01, 0x08, 0x60, 0x73, 0x00, 0x24, - 0x84, 0x73, 0x00, 0x24, 0x28, 0x73, 0x00, 0x24, 0xfe, 0xd4, 0x01, 0x08, - 0xb0, 0x72, 0x00, 0x24, 0x19, 0xd5, 0x01, 0x08, 0xe4, 0x72, 0x00, 0x24, - 0x28, 0x06, 0x00, 0x24, 0x50, 0xde, 0x01, 0x08, 0x8c, 0xdc, 0x01, 0x08, - 0xcd, 0xe7, 0x00, 0x08, 0x91, 0x53, 0x01, 0x08, 0x51, 0x55, 0x01, 0x08, - 0x10, 0xb5, 0x04, 0x46, 0x80, 0x21, 0x16, 0xf0, 0x22, 0xf9, 0x00, 0x21, - 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, 0x16, 0xf0, 0x1c, 0xb9, 0x08, 0xb5, - 0x02, 0x65, 0x00, 0x22, 0x0b, 0x46, 0x00, 0xf1, 0x3c, 0x01, 0x42, 0x65, - 0x4f, 0xf4, 0x80, 0x72, 0x83, 0x64, 0x82, 0x87, 0x02, 0x69, 0x01, 0x2a, - 0xd2, 0xb2, 0x08, 0xbf, 0xc3, 0x64, 0x00, 0x68, 0xfe, 0xf7, 0x5e, 0xf8, - 0x00, 0x20, 0x08, 0xbd, 0x08, 0xb5, 0xc0, 0xf8, 0x10, 0x22, 0x00, 0x22, - 0x0b, 0x46, 0x00, 0xf5, 0xfe, 0x71, 0xc0, 0xf8, 0x14, 0x22, 0xa0, 0xf8, - 0xfc, 0x21, 0x02, 0x69, 0xc0, 0xf8, 0x08, 0x32, 0x01, 0x2a, 0xd2, 0xb2, - 0x08, 0xbf, 0xc0, 0xf8, 0x0c, 0x32, 0x00, 0x68, 0xfe, 0xf7, 0x46, 0xf8, - 0x00, 0x20, 0x08, 0xbd, 0x0f, 0x4b, 0x00, 0xf1, 0x60, 0x40, 0xdb, 0x68, - 0x00, 0xf5, 0x61, 0x40, 0xc3, 0xf3, 0x02, 0x23, 0x10, 0xb5, 0xc3, 0xf1, - 0x07, 0x04, 0x1a, 0x1d, 0x04, 0x2c, 0x28, 0xbf, 0x04, 0x24, 0x06, 0x2a, - 0x4f, 0xf0, 0xff, 0x32, 0x8c, 0xbf, 0x03, 0x3b, 0x00, 0x23, 0xa2, 0x40, - 0x21, 0xea, 0x02, 0x01, 0x01, 0xfa, 0x03, 0xf3, 0x1b, 0x01, 0xdb, 0xb2, - 0x80, 0xf8, 0x00, 0x33, 0x10, 0xbd, 0x00, 0xbf, 0x00, 0xed, 0x00, 0xe0, - 0x07, 0xb5, 0x8d, 0xf8, 0x07, 0x10, 0x01, 0x23, 0x81, 0x68, 0x0d, 0xf1, - 0x07, 0x02, 0x80, 0x39, 0xff, 0xf7, 0xbf, 0xf9, 0x03, 0xb0, 0x5d, 0xf8, - 0x04, 0xfb, 0x00, 0x00, 0x08, 0xb5, 0x72, 0x46, 0x06, 0x4b, 0x01, 0x25, - 0xd3, 0xe8, 0x4f, 0x4f, 0xc3, 0xe8, 0x46, 0x5f, 0xe4, 0xb2, 0x00, 0x2e, - 0xf8, 0xd1, 0x0c, 0xb9, 0x0c, 0xf0, 0x08, 0xfd, 0x0d, 0xf0, 0x24, 0xf9, - 0x48, 0x0e, 0x00, 0x24, 0x1f, 0xb5, 0x00, 0x23, 0x04, 0x46, 0x03, 0x62, - 0x06, 0x4b, 0x00, 0x93, 0x03, 0x1d, 0x68, 0x46, 0x02, 0x93, 0x1c, 0x23, - 0x03, 0x93, 0x0b, 0x23, 0x01, 0x93, 0x15, 0xf0, 0x9f, 0xfb, 0x20, 0x60, - 0x04, 0xb0, 0x10, 0xbd, 0x20, 0xd5, 0x01, 0x08, 0x0d, 0x4b, 0x19, 0x88, - 0x4f, 0xf6, 0xfd, 0x73, 0x4a, 0x1e, 0x92, 0xb2, 0x9a, 0x42, 0x97, 0xbf, - 0x0a, 0x4b, 0x4f, 0xf0, 0x02, 0x63, 0x03, 0xea, 0x81, 0x23, 0x03, 0xf1, - 0x00, 0x63, 0x83, 0x42, 0x07, 0xd9, 0xb0, 0xf1, 0x00, 0x6f, 0x34, 0xbf, - 0x4f, 0xf0, 0xff, 0x30, 0x4f, 0xf4, 0x00, 0x30, 0x70, 0x47, 0x4f, 0xf0, - 0xff, 0x30, 0x70, 0x47, 0x80, 0xe8, 0xf1, 0x1f, 0x00, 0xfc, 0x3f, 0x00, - 0x06, 0x4b, 0x4f, 0xf6, 0xfd, 0x71, 0x1a, 0x88, 0x53, 0x1e, 0x9b, 0xb2, - 0x8b, 0x42, 0x9a, 0xbf, 0x03, 0x48, 0x00, 0xea, 0x82, 0x20, 0x4f, 0xf4, - 0x00, 0x10, 0x70, 0x47, 0x80, 0xe8, 0xf1, 0x1f, 0x00, 0xfc, 0x3f, 0x00, - 0x0b, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x40, 0xf8, 0x04, 0x3b, 0xfe, 0xf7, - 0x3d, 0xfa, 0x09, 0x4b, 0x00, 0x21, 0x04, 0xf1, 0x14, 0x00, 0x03, 0xf1, - 0x08, 0x02, 0x94, 0x33, 0x22, 0x60, 0x38, 0x22, 0x63, 0x60, 0x18, 0xf0, - 0xad, 0xfc, 0x4f, 0xf0, 0xff, 0x33, 0x20, 0x46, 0x23, 0x65, 0x10, 0xbd, - 0x70, 0xdd, 0x01, 0x08, 0x90, 0xdc, 0x01, 0x08, 0x14, 0x4b, 0x10, 0xb5, - 0x04, 0x46, 0x40, 0xf8, 0x04, 0x3b, 0xfe, 0xf7, 0x21, 0xfa, 0x12, 0x4b, - 0x00, 0x21, 0x04, 0xf1, 0x14, 0x00, 0x03, 0xf1, 0x08, 0x02, 0x88, 0x33, - 0x22, 0x60, 0x44, 0x22, 0x63, 0x60, 0x18, 0xf0, 0x91, 0xfc, 0x00, 0x21, - 0x38, 0x22, 0x04, 0xf1, 0x58, 0x00, 0x18, 0xf0, 0x8b, 0xfc, 0x00, 0x22, - 0x40, 0x23, 0x04, 0xf1, 0xa4, 0x00, 0xc4, 0xe9, 0x24, 0x23, 0xc4, 0xf8, - 0x98, 0x30, 0x4f, 0xf4, 0x00, 0x73, 0xc4, 0xe9, 0x27, 0x33, 0xff, 0xf7, - 0x77, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x00, 0xbf, 0x70, 0xdd, 0x01, 0x08, - 0x94, 0xdd, 0x01, 0x08, 0xf8, 0xb5, 0x4b, 0x4b, 0x04, 0x46, 0x5c, 0x22, - 0x00, 0x21, 0x03, 0x60, 0x08, 0x30, 0x49, 0x4b, 0x01, 0x27, 0x49, 0x4e, - 0x00, 0x25, 0x40, 0xf8, 0x04, 0x3c, 0x18, 0xf0, 0x67, 0xfc, 0x3b, 0x23, - 0x20, 0x1d, 0xc4, 0xf8, 0xa8, 0x50, 0xa4, 0xf8, 0x9a, 0x30, 0x44, 0x4b, - 0xa4, 0xf8, 0x68, 0x50, 0xc4, 0xf8, 0x8c, 0x50, 0x84, 0xf8, 0x98, 0x50, - 0xc4, 0xe9, 0x27, 0x63, 0x4f, 0xf4, 0x00, 0x33, 0x66, 0x26, 0x63, 0x66, - 0x3e, 0x4b, 0xa4, 0xf8, 0xa4, 0x60, 0xc4, 0xe9, 0x24, 0x37, 0x3d, 0x4b, - 0xc4, 0xe9, 0x2b, 0x35, 0x0c, 0xf0, 0xde, 0xfe, 0x04, 0xf1, 0xbc, 0x00, - 0xa4, 0xf8, 0xb8, 0x60, 0xff, 0xf7, 0x3e, 0xff, 0x38, 0x4b, 0x39, 0x48, - 0xc4, 0xf8, 0xf4, 0x31, 0xc4, 0xf8, 0x00, 0x52, 0x84, 0xf8, 0x04, 0x52, - 0x0d, 0xf0, 0xfc, 0xfb, 0x08, 0xf0, 0x5c, 0xff, 0x34, 0x4a, 0x11, 0x68, - 0x09, 0x29, 0x4e, 0xdc, 0x33, 0x4b, 0x1b, 0x68, 0x9d, 0x1e, 0x18, 0x46, - 0x03, 0xf1, 0x12, 0x06, 0x35, 0xf9, 0x02, 0x7f, 0x66, 0x2f, 0x47, 0xd0, - 0xb5, 0x42, 0xf9, 0xd1, 0x14, 0x33, 0x05, 0x46, 0x02, 0x30, 0xb5, 0xf9, - 0x00, 0x60, 0x01, 0x36, 0x38, 0xd1, 0x66, 0x23, 0x2b, 0x80, 0x01, 0x31, - 0x00, 0x25, 0x11, 0x60, 0x25, 0x48, 0x0d, 0xf0, 0xdb, 0xfb, 0x08, 0xf0, - 0x1b, 0xff, 0x00, 0x20, 0x00, 0x21, 0xc4, 0xf8, 0xb4, 0x50, 0x03, 0x25, - 0x00, 0x23, 0x4f, 0xf0, 0xff, 0x32, 0xc4, 0xf8, 0x60, 0x31, 0xc4, 0xf8, - 0x18, 0x21, 0x84, 0xf8, 0x54, 0x31, 0x84, 0xf8, 0xfd, 0x31, 0x84, 0xf8, - 0xfe, 0x31, 0xc4, 0xf8, 0xe8, 0x20, 0xc4, 0xf8, 0xfc, 0x20, 0xa4, 0xf8, - 0x00, 0x31, 0xc4, 0xe9, 0x44, 0x01, 0x4f, 0xf4, 0x00, 0x30, 0x01, 0x21, - 0xc4, 0xf8, 0xf8, 0x01, 0x02, 0x20, 0xc4, 0xf8, 0x28, 0x11, 0x84, 0xf8, - 0xf0, 0x10, 0x84, 0xf8, 0x02, 0x11, 0xc4, 0xe9, 0x38, 0x50, 0x35, 0x20, - 0xc4, 0xe9, 0x3d, 0x22, 0xc4, 0xf8, 0xec, 0x00, 0x20, 0x46, 0xf8, 0xbd, - 0x98, 0x42, 0xbe, 0xd1, 0xc5, 0xe7, 0x6f, 0xf0, 0x01, 0x05, 0xc5, 0xe7, - 0x4f, 0xf0, 0xff, 0x35, 0xc2, 0xe7, 0x00, 0xbf, 0xe4, 0xdb, 0x01, 0x08, - 0x2c, 0xde, 0x01, 0x08, 0x3c, 0x00, 0x57, 0x00, 0x3d, 0x00, 0x5a, 0x00, - 0x40, 0x42, 0x0f, 0x00, 0x15, 0xf9, 0x00, 0x08, 0x00, 0x5a, 0x62, 0x02, - 0x98, 0x06, 0x00, 0x24, 0xc4, 0x06, 0x00, 0x24, 0xc0, 0x06, 0x00, 0x24, - 0x10, 0xb5, 0x86, 0xb0, 0x04, 0x46, 0x68, 0x46, 0x03, 0x91, 0x80, 0xe8, - 0x0c, 0x00, 0x06, 0xa8, 0x00, 0xe9, 0x0c, 0x00, 0x10, 0xe9, 0x07, 0x00, - 0x03, 0x4b, 0x84, 0xe8, 0x07, 0x00, 0x20, 0x46, 0xe3, 0x60, 0x06, 0xb0, - 0x10, 0xbd, 0x00, 0xbf, 0x73, 0x88, 0x00, 0x08, 0x08, 0xb5, 0x08, 0x4b, - 0x1b, 0x68, 0x23, 0xb1, 0x07, 0x4b, 0x1b, 0x68, 0x18, 0x65, 0x00, 0x20, - 0x08, 0xbd, 0x06, 0x4b, 0x1b, 0x78, 0x13, 0xb1, 0x05, 0x48, 0x19, 0xf0, - 0xc3, 0xff, 0x4f, 0xf0, 0xff, 0x30, 0xf5, 0xe7, 0x9c, 0x2e, 0x00, 0x24, - 0x44, 0x05, 0x00, 0x24, 0xd8, 0x0d, 0x00, 0x24, 0x3a, 0xd5, 0x01, 0x08, - 0x0b, 0x68, 0x83, 0x60, 0x05, 0x4b, 0xc2, 0x68, 0x13, 0x40, 0x4a, 0x68, - 0x13, 0x43, 0x8a, 0x68, 0x13, 0x43, 0x43, 0xf4, 0x80, 0x53, 0xc3, 0x60, - 0x00, 0x20, 0x70, 0x47, 0xc0, 0xe0, 0xfe, 0xff, 0x46, 0x4b, 0xda, 0x6c, - 0x18, 0x68, 0xd1, 0x03, 0x30, 0xb5, 0x85, 0xb0, 0x7d, 0xd4, 0x10, 0xf0, - 0x00, 0x70, 0x4c, 0xd0, 0x99, 0x6a, 0x9d, 0x6a, 0xda, 0x6a, 0x15, 0xf4, - 0x7c, 0x7f, 0xc5, 0xf3, 0x05, 0x10, 0x5c, 0x6b, 0x43, 0xd0, 0xc4, 0xf3, - 0xcc, 0x04, 0x02, 0xf0, 0x01, 0x02, 0x07, 0xee, 0x90, 0x0a, 0x01, 0xf0, - 0x03, 0x01, 0x62, 0x43, 0xb7, 0xee, 0x00, 0x6a, 0xf8, 0xee, 0xe7, 0x6a, - 0x01, 0x29, 0x07, 0xee, 0x90, 0x2a, 0xfa, 0xee, 0xe9, 0x7a, 0x32, 0xd0, - 0x02, 0x29, 0x40, 0xd0, 0x00, 0x29, 0x4c, 0xd1, 0x1a, 0x68, 0x92, 0x06, - 0x49, 0xd5, 0x19, 0x68, 0x30, 0x4a, 0xc1, 0xf3, 0xc1, 0x01, 0x1b, 0x6b, - 0xca, 0x40, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x2a, 0xf8, 0xee, - 0xc7, 0x5a, 0x85, 0xee, 0xa6, 0x7a, 0x06, 0xee, 0x90, 0x3a, 0xf8, 0xee, - 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x25, 0x4a, - 0x67, 0xee, 0x87, 0x7a, 0x13, 0x6b, 0x13, 0x6b, 0xc3, 0xf3, 0x06, 0x43, - 0x06, 0xee, 0x90, 0x3a, 0x13, 0x6b, 0xf8, 0xee, 0xe6, 0x6a, 0x76, 0xee, - 0x86, 0x6a, 0x87, 0xee, 0xa6, 0x7a, 0xfc, 0xee, 0xc7, 0x7a, 0x17, 0xee, - 0x90, 0x0a, 0x05, 0xb0, 0x30, 0xbd, 0x1b, 0x6b, 0xdf, 0xed, 0x1b, 0x5a, - 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, - 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x85, 0xee, 0xa6, 0x7a, - 0xd9, 0xe7, 0x1b, 0x6b, 0xdf, 0xed, 0x14, 0x5a, 0xc3, 0xf3, 0x08, 0x03, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, - 0x77, 0xee, 0x86, 0x7a, 0xee, 0xe7, 0x1b, 0x6b, 0xdf, 0xed, 0x0e, 0x5a, - 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, - 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0xe0, 0xe7, 0x10, 0xf0, - 0x00, 0x60, 0xce, 0xd0, 0x01, 0xa8, 0xfd, 0xf7, 0x1b, 0xff, 0x03, 0x98, - 0xc9, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0x00, 0x90, 0xd0, 0x03, - 0x00, 0x24, 0x74, 0x4a, 0x20, 0xbc, 0xbe, 0x4b, 0x00, 0x24, 0x74, 0x4c, - 0x03, 0x46, 0x53, 0xe8, 0x00, 0x0f, 0x01, 0x38, 0x43, 0xe8, 0x00, 0x02, - 0x00, 0x2a, 0xf8, 0xd1, 0x70, 0x47, 0x38, 0xb5, 0x0c, 0x46, 0x05, 0x46, - 0x01, 0x21, 0x20, 0x46, 0x0e, 0xf0, 0x0c, 0xff, 0x28, 0xb9, 0x21, 0x46, - 0x28, 0x46, 0xbd, 0xe8, 0x38, 0x40, 0x0f, 0xf0, 0x36, 0xbe, 0x38, 0xbd, - 0x70, 0xb5, 0x05, 0x46, 0x0e, 0x46, 0x09, 0xb9, 0x11, 0x48, 0x70, 0xbd, - 0x00, 0x28, 0xfb, 0xd0, 0x00, 0x24, 0x01, 0x60, 0xc0, 0xe9, 0x01, 0x44, - 0x0b, 0x79, 0x05, 0x3b, 0x01, 0x2b, 0xf3, 0xd8, 0x6c, 0x21, 0x01, 0x20, - 0x19, 0xf0, 0x6a, 0xfd, 0x68, 0x60, 0x60, 0xb1, 0x6c, 0x22, 0x21, 0x46, - 0x18, 0xf0, 0xc0, 0xfa, 0xb1, 0x79, 0x02, 0x20, 0x19, 0xf0, 0x60, 0xfd, - 0xa8, 0x60, 0x20, 0xb9, 0x28, 0x46, 0x0e, 0xf0, 0xc3, 0xfc, 0x03, 0x48, - 0xdf, 0xe7, 0x20, 0x46, 0xdd, 0xe7, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, - 0x80, 0xae, 0xff, 0xff, 0x38, 0xb5, 0x0d, 0x46, 0x06, 0x49, 0x04, 0x46, - 0xff, 0xf7, 0xce, 0xff, 0x30, 0xb9, 0x29, 0x46, 0x20, 0x46, 0x20, 0x22, - 0xbd, 0xe8, 0x38, 0x40, 0x0e, 0xf0, 0x4c, 0xbc, 0x38, 0xbd, 0x00, 0xbf, - 0x10, 0xdf, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, 0xad, 0xf5, 0x55, 0x7d, - 0x17, 0x78, 0x0d, 0x46, 0x14, 0x46, 0x04, 0x93, 0x4f, 0xf4, 0x8e, 0x73, - 0x7b, 0x43, 0xc6, 0x5c, 0x00, 0xeb, 0x03, 0x0c, 0x00, 0x2e, 0x40, 0xf0, - 0x0d, 0x82, 0x4f, 0xf4, 0x8c, 0x72, 0x31, 0x46, 0x0c, 0xf1, 0x04, 0x00, - 0x18, 0xf0, 0x84, 0xfa, 0x32, 0x23, 0x22, 0x46, 0x29, 0x46, 0x11, 0xa8, - 0xfe, 0xf7, 0xa0, 0xff, 0x10, 0xb1, 0x4f, 0xf0, 0xff, 0x30, 0x06, 0xe1, - 0x11, 0x9b, 0x00, 0x2b, 0xf9, 0xd0, 0x12, 0x9b, 0x00, 0x2b, 0xf6, 0xd0, - 0x33, 0x46, 0x0d, 0xf1, 0x1a, 0x02, 0x07, 0xa9, 0x11, 0xa8, 0xff, 0xf7, - 0x4f, 0xf8, 0x00, 0x28, 0x40, 0xf0, 0xf7, 0x80, 0xbd, 0xf8, 0x1a, 0x30, - 0x71, 0x2b, 0xe8, 0xd1, 0x43, 0xaa, 0x07, 0x99, 0x20, 0x46, 0xfe, 0xf7, - 0x3f, 0xff, 0x00, 0x28, 0xe1, 0xd1, 0xa5, 0x4c, 0x30, 0x23, 0x2f, 0xaa, - 0x08, 0xa8, 0x08, 0x94, 0x8a, 0x34, 0x21, 0x46, 0x10, 0xf0, 0xaa, 0xff, - 0x00, 0x28, 0xd6, 0xd1, 0x08, 0x99, 0x2f, 0x9b, 0x19, 0x44, 0xa1, 0x42, - 0x40, 0xf0, 0xf7, 0x80, 0x37, 0xaa, 0x08, 0xa8, 0x37, 0x96, 0xfe, 0xf7, - 0xc8, 0xfd, 0x37, 0x9b, 0x03, 0x43, 0x40, 0xf0, 0xeb, 0x80, 0x8e, 0xab, - 0x60, 0xaa, 0x21, 0x46, 0x08, 0xa8, 0x10, 0xf0, 0xa7, 0xff, 0x00, 0x28, - 0x40, 0xf0, 0xdf, 0x80, 0x61, 0x9a, 0x07, 0x2a, 0x40, 0xf0, 0xd8, 0x80, - 0x92, 0x49, 0x62, 0x98, 0x19, 0xf0, 0x8e, 0xfd, 0x00, 0x28, 0x40, 0xf0, - 0xd1, 0x80, 0x8f, 0x9a, 0x08, 0x2a, 0x40, 0xf0, 0xca, 0x80, 0x8e, 0x49, - 0x90, 0x98, 0x19, 0xf0, 0x83, 0xfd, 0x00, 0x28, 0x40, 0xf0, 0xc3, 0x80, - 0x04, 0x23, 0x2f, 0xaa, 0x21, 0x46, 0x08, 0xa8, 0x10, 0xf0, 0x74, 0xff, - 0x00, 0x28, 0x40, 0xf0, 0xb7, 0x80, 0x30, 0x23, 0x2f, 0xaa, 0x21, 0x46, - 0x08, 0xa8, 0x10, 0xf0, 0x6b, 0xff, 0x00, 0x28, 0x40, 0xf0, 0xab, 0x80, - 0x37, 0x90, 0x37, 0xaa, 0x21, 0x46, 0x08, 0xa8, 0xfe, 0xf7, 0x8d, 0xfd, - 0x00, 0x28, 0x40, 0xf0, 0x9f, 0x80, 0x37, 0x9b, 0x01, 0x2b, 0x40, 0xf0, - 0x9b, 0x80, 0x04, 0x23, 0x2f, 0xaa, 0x21, 0x46, 0x08, 0xa8, 0x10, 0xf0, - 0x55, 0xff, 0x00, 0x28, 0x40, 0xf0, 0x8f, 0x80, 0xdd, 0xf8, 0xbc, 0x80, - 0xb8, 0xf1, 0x20, 0x0f, 0x40, 0xf0, 0x83, 0x80, 0x08, 0x9b, 0x1f, 0xac, - 0x03, 0xf1, 0x20, 0x05, 0x18, 0x68, 0x08, 0x33, 0x53, 0xf8, 0x04, 0x1c, - 0x22, 0x46, 0xab, 0x42, 0x03, 0xc2, 0x14, 0x46, 0xf6, 0xd1, 0x00, 0x23, - 0x01, 0x22, 0x60, 0xa8, 0xcd, 0xe9, 0x88, 0x23, 0xcd, 0xe9, 0x8a, 0x32, - 0xcd, 0xe9, 0x8c, 0x33, 0x0e, 0xf0, 0xca, 0xfc, 0x7f, 0xa8, 0x0e, 0xf0, - 0xbb, 0xfc, 0x60, 0xa8, 0x0e, 0xf0, 0xa1, 0xff, 0x03, 0x23, 0x60, 0xa8, - 0x8d, 0xf8, 0x80, 0x31, 0x0e, 0xf0, 0xc6, 0xfd, 0x28, 0xb1, 0x60, 0xa8, - 0x0e, 0xf0, 0x97, 0xff, 0x7f, 0xa8, 0x0e, 0xf0, 0x82, 0xff, 0x41, 0x23, - 0x43, 0xaa, 0x7f, 0xa9, 0x60, 0xa8, 0x0f, 0xf0, 0x2b, 0xf8, 0x00, 0x28, - 0x70, 0xd0, 0x60, 0xa8, 0x4f, 0xf0, 0xff, 0x34, 0x0e, 0xf0, 0x87, 0xff, - 0x7f, 0xa8, 0x0e, 0xf0, 0x72, 0xff, 0x8b, 0xa8, 0x0e, 0xf0, 0x5c, 0xff, - 0x88, 0xa8, 0x0e, 0xf0, 0x59, 0xff, 0x60, 0xa8, 0x0e, 0xf0, 0x7b, 0xff, - 0x7f, 0xa8, 0x0e, 0xf0, 0x66, 0xff, 0x00, 0x2c, 0x7f, 0xf4, 0x31, 0xaf, - 0x0d, 0xf1, 0x9c, 0x09, 0x21, 0x46, 0x20, 0x22, 0x0f, 0x94, 0x48, 0x46, - 0xcd, 0xe9, 0x0d, 0x44, 0x18, 0xf0, 0xa4, 0xf9, 0x49, 0x46, 0x0d, 0xa8, - 0xff, 0xf7, 0xf2, 0xfe, 0x28, 0xbb, 0x20, 0x22, 0x17, 0xa9, 0x0d, 0xa8, - 0x0e, 0xf0, 0x36, 0xfb, 0xf8, 0xb9, 0x2f, 0xa9, 0x0d, 0xa8, 0x0e, 0xf0, - 0x07, 0xfb, 0xd0, 0xb9, 0x01, 0x23, 0x30, 0x25, 0xa2, 0x46, 0xdf, 0xf8, - 0x08, 0xb1, 0x8d, 0xf8, 0x28, 0x30, 0x2f, 0xa9, 0x0d, 0xa8, 0x05, 0x93, - 0xcd, 0xf8, 0x3c, 0xa0, 0xcd, 0xe9, 0x0d, 0xaa, 0xff, 0xf7, 0xd6, 0xfe, - 0x48, 0xb9, 0x05, 0x9b, 0x00, 0x2b, 0x62, 0xd0, 0x10, 0x22, 0x59, 0x46, - 0x0d, 0xa8, 0x0e, 0xf0, 0x17, 0xfb, 0x00, 0x28, 0x6e, 0xd0, 0x0d, 0xa8, - 0x0e, 0xf0, 0x82, 0xfb, 0xf7, 0xe6, 0x6f, 0xf0, 0x0b, 0x00, 0x0d, 0xf5, - 0x55, 0x7d, 0xbd, 0xe8, 0xf0, 0x8f, 0x6f, 0xf0, 0x0a, 0x00, 0xf8, 0xe7, - 0x6f, 0xf0, 0x09, 0x00, 0xf5, 0xe7, 0x6f, 0xf0, 0x08, 0x00, 0xf2, 0xe7, - 0x6f, 0xf0, 0x07, 0x00, 0xef, 0xe7, 0x6f, 0xf0, 0x06, 0x00, 0xec, 0xe7, - 0x6f, 0xf0, 0x05, 0x00, 0xe9, 0xe7, 0x6f, 0xf0, 0x04, 0x00, 0xe6, 0xe7, - 0x6f, 0xf0, 0x02, 0x00, 0xe3, 0xe7, 0x6f, 0xf0, 0x01, 0x00, 0xe0, 0xe7, - 0x7f, 0xa9, 0x60, 0xa8, 0x0f, 0xf0, 0xd8, 0xff, 0x00, 0x28, 0x88, 0xd1, - 0x20, 0x22, 0x1f, 0xa9, 0x8b, 0xa8, 0x0e, 0xf0, 0x77, 0xff, 0x8e, 0xa8, - 0x0e, 0xf0, 0x24, 0xfc, 0x8b, 0xa9, 0x60, 0xa8, 0x0e, 0xf0, 0xce, 0xfd, - 0x04, 0x46, 0xb8, 0xb9, 0x7f, 0xa9, 0x60, 0xa8, 0x0f, 0xf0, 0xc4, 0xff, - 0x04, 0x46, 0x88, 0xb9, 0x7f, 0xab, 0x8b, 0xaa, 0x8e, 0xa9, 0x60, 0xa8, - 0xfe, 0xf7, 0x88, 0xfa, 0x04, 0x46, 0x48, 0xb9, 0x01, 0x46, 0x94, 0xa8, - 0x0e, 0xf0, 0x83, 0xfc, 0x68, 0xb1, 0x8e, 0xa9, 0x88, 0xa8, 0x0f, 0xf0, - 0x33, 0xf8, 0x04, 0x46, 0x8e, 0xa8, 0x0e, 0xf0, 0xda, 0xfe, 0x20, 0x22, - 0x17, 0xa9, 0x88, 0xa8, 0x0e, 0xf0, 0x8a, 0xfc, 0x61, 0xe7, 0x08, 0x4c, - 0xf4, 0xe7, 0x20, 0x22, 0x8e, 0xa9, 0x0d, 0xa8, 0x0e, 0xf0, 0xb4, 0xfa, - 0x00, 0x28, 0x95, 0xd0, 0x9b, 0xe7, 0x00, 0xbf, 0x00, 0x04, 0x00, 0x08, - 0xa6, 0xde, 0x01, 0x08, 0xb6, 0xde, 0x01, 0x08, 0x80, 0xb0, 0xff, 0xff, - 0x4e, 0xd5, 0x01, 0x08, 0x01, 0x22, 0x0a, 0xa9, 0x0d, 0xa8, 0x0e, 0xf0, - 0xa1, 0xfa, 0x00, 0x28, 0x89, 0xd1, 0x8e, 0xa9, 0x0d, 0xa8, 0x0e, 0xf0, - 0x71, 0xfa, 0x03, 0x46, 0x00, 0x28, 0x82, 0xd1, 0x37, 0xaa, 0x20, 0x2d, - 0x02, 0xeb, 0x04, 0x00, 0x28, 0xd9, 0x0d, 0xf5, 0x0e, 0x7c, 0x03, 0x46, - 0x0d, 0xf5, 0x16, 0x7e, 0x62, 0x46, 0x08, 0x33, 0x03, 0xca, 0x72, 0x45, - 0x43, 0xf8, 0x08, 0x0c, 0x43, 0xf8, 0x04, 0x1c, 0x94, 0x46, 0xf5, 0xd1, - 0x20, 0x3d, 0xad, 0xb2, 0x9d, 0xf8, 0x28, 0x30, 0x20, 0x34, 0x01, 0x33, - 0xa4, 0xb2, 0x8d, 0xf8, 0x28, 0x30, 0x00, 0x23, 0x00, 0x2d, 0x7f, 0xf4, - 0x4e, 0xaf, 0x0d, 0xa8, 0x0e, 0xf0, 0xe4, 0xfa, 0x3b, 0xa9, 0x0a, 0xa8, - 0x0c, 0x95, 0xcd, 0xe9, 0x0a, 0x55, 0xff, 0xf7, 0x23, 0xfe, 0x48, 0xb1, - 0x0a, 0xa8, 0x55, 0xe7, 0x2a, 0x46, 0x8e, 0xa9, 0x05, 0x93, 0x18, 0xf0, - 0xbb, 0xf8, 0x05, 0x9b, 0x1d, 0x46, 0xdf, 0xe7, 0x0d, 0xf2, 0x6d, 0x14, - 0x10, 0x22, 0x0a, 0xa8, 0x21, 0x46, 0x0e, 0xf0, 0x5b, 0xfa, 0x00, 0x28, - 0xec, 0xd1, 0x2f, 0xa9, 0x0a, 0xa8, 0x0e, 0xf0, 0x2b, 0xfa, 0x00, 0x28, - 0xe6, 0xd1, 0x2f, 0xab, 0x53, 0xa9, 0x13, 0xf8, 0x01, 0x2b, 0xb8, 0xf1, - 0x01, 0x08, 0x11, 0xf8, 0x01, 0x0f, 0x82, 0xea, 0x00, 0x02, 0x46, 0xea, - 0x02, 0x06, 0xf4, 0xd1, 0x00, 0x2e, 0xd7, 0xd1, 0x0a, 0xa8, 0x0e, 0xf0, - 0xb1, 0xfa, 0x31, 0x46, 0x4f, 0xf4, 0x8c, 0x72, 0x8e, 0xa8, 0x18, 0xf0, - 0x9f, 0xf8, 0x37, 0xa9, 0x8e, 0xa8, 0xfe, 0xf7, 0x4d, 0xfc, 0x00, 0x28, - 0x7f, 0xf4, 0x1b, 0xae, 0x10, 0x25, 0x31, 0x46, 0x0d, 0xa8, 0x2a, 0x46, - 0x18, 0xf0, 0x92, 0xf8, 0x04, 0x9b, 0x09, 0xaa, 0x29, 0x46, 0x05, 0xfb, - 0x07, 0x37, 0x8e, 0xa8, 0x0d, 0xab, 0xcd, 0xf8, 0x00, 0x90, 0x0c, 0x37, - 0x09, 0x96, 0xcd, 0xe9, 0x01, 0x47, 0x10, 0xf0, 0x49, 0xfe, 0x00, 0x38, - 0x18, 0xbf, 0x01, 0x20, 0x40, 0x42, 0x0a, 0xe7, 0x01, 0x20, 0x08, 0xe7, - 0x70, 0xb5, 0x05, 0x6b, 0xe0, 0xb0, 0x04, 0x46, 0xb5, 0xf5, 0xc0, 0x7f, - 0x1d, 0xd8, 0x4f, 0xf4, 0xc0, 0x72, 0x00, 0x21, 0x68, 0x46, 0x18, 0xf0, - 0x6f, 0xf8, 0xe3, 0x6b, 0x2a, 0x46, 0x69, 0x46, 0x20, 0x6c, 0x98, 0x47, - 0xa0, 0xb9, 0x26, 0x6b, 0x69, 0x46, 0x20, 0x46, 0x32, 0x46, 0x0e, 0xf0, - 0x92, 0xfa, 0x05, 0x46, 0x08, 0xb9, 0x01, 0x23, 0xe3, 0x62, 0x1e, 0xb1, - 0x31, 0x46, 0x68, 0x46, 0x0d, 0xf0, 0xec, 0xfc, 0x28, 0x46, 0x60, 0xb0, - 0x70, 0xbd, 0x6f, 0xf0, 0x04, 0x05, 0xf9, 0xe7, 0x6f, 0xf0, 0x08, 0x05, - 0xf6, 0xe7, 0x00, 0x00, 0x07, 0x4b, 0x5a, 0x68, 0x90, 0x23, 0x53, 0x43, - 0x06, 0x4a, 0xd3, 0x58, 0xda, 0x69, 0x12, 0x07, 0x01, 0xd5, 0x08, 0x22, - 0x1a, 0x62, 0xd8, 0x69, 0xc0, 0xf3, 0x40, 0x10, 0x70, 0x47, 0x00, 0xbf, - 0xa0, 0x6a, 0x00, 0x24, 0x80, 0x6c, 0x00, 0x24, 0x70, 0xb5, 0x00, 0x23, - 0x85, 0x68, 0x04, 0x46, 0x06, 0x68, 0x03, 0x61, 0x9d, 0xb9, 0x33, 0x78, - 0x02, 0x2b, 0x01, 0xd9, 0xb3, 0x6a, 0x6b, 0xb9, 0x33, 0x89, 0x0b, 0xb9, - 0x02, 0x20, 0x70, 0xbd, 0xb3, 0x6a, 0xa3, 0x61, 0xa3, 0x69, 0x65, 0x61, - 0x00, 0x2b, 0xf7, 0xd0, 0x73, 0x6b, 0x00, 0x20, 0xe3, 0x61, 0xf4, 0xe7, - 0x1d, 0x46, 0x73, 0x89, 0xb2, 0x89, 0x5a, 0x43, 0x0c, 0xd1, 0x29, 0x46, - 0x20, 0x68, 0x07, 0xf0, 0x4b, 0xfa, 0x43, 0x1c, 0x05, 0x46, 0x0b, 0xd0, - 0x01, 0x28, 0xe5, 0xd9, 0xb3, 0x69, 0x98, 0x42, 0xf3, 0xd3, 0xe1, 0xe7, - 0x29, 0x46, 0x30, 0x46, 0x07, 0xf0, 0x1b, 0xfa, 0xa0, 0x61, 0xdf, 0xe7, - 0x01, 0x20, 0xda, 0xe7, 0x38, 0xb5, 0x04, 0x46, 0x05, 0x68, 0x04, 0x20, - 0xa1, 0x69, 0xf9, 0xb1, 0x28, 0x46, 0x07, 0xf0, 0x19, 0xfa, 0xc0, 0xb9, - 0xe3, 0x69, 0x1a, 0x78, 0xda, 0xb1, 0xdb, 0x7a, 0xe5, 0x2a, 0x03, 0xf0, - 0x3f, 0x03, 0xa3, 0x71, 0x09, 0xd0, 0x2e, 0x2a, 0x07, 0xd0, 0x0f, 0x2b, - 0x05, 0xd0, 0x23, 0xf0, 0x20, 0x03, 0x08, 0x2b, 0x01, 0xd0, 0x00, 0x20, - 0x38, 0xbd, 0x00, 0x21, 0x20, 0x46, 0x08, 0xf0, 0x2b, 0xf8, 0x00, 0x28, - 0xe0, 0xd0, 0x00, 0x23, 0xa3, 0x61, 0xf5, 0xe7, 0x00, 0x28, 0xf2, 0xd0, - 0xf9, 0xe7, 0x04, 0x20, 0xf7, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x87, 0xb0, - 0x06, 0x46, 0x8b, 0x46, 0x17, 0x46, 0x4f, 0xf0, 0x01, 0x09, 0x0d, 0xf1, - 0x17, 0x0a, 0xdd, 0xe9, 0x10, 0x45, 0x25, 0x44, 0xa3, 0xeb, 0x04, 0x08, - 0xac, 0x42, 0x01, 0xd1, 0x01, 0x20, 0x11, 0xe0, 0x08, 0xeb, 0x04, 0x03, - 0x00, 0x22, 0x59, 0x46, 0x30, 0x46, 0x00, 0x93, 0x3b, 0x46, 0xcd, 0xe9, - 0x01, 0xa9, 0x06, 0xf0, 0x86, 0xf8, 0x28, 0xb9, 0x14, 0xf8, 0x01, 0x3b, - 0x9d, 0xf8, 0x17, 0x20, 0x9a, 0x42, 0xe9, 0xd0, 0x07, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x2d, 0xe9, 0xf0, 0x4f, 0x89, 0xb0, 0x06, 0x46, 0x88, 0x46, - 0xdd, 0xf8, 0x4c, 0x90, 0x05, 0x92, 0x4b, 0xb9, 0x4f, 0xf0, 0xff, 0x32, - 0xc9, 0xf8, 0x00, 0x20, 0x14, 0x9a, 0x00, 0x20, 0x13, 0x60, 0x09, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x3b, 0x07, 0xa9, 0x00, 0x68, 0x4f, 0xf0, - 0x04, 0x0a, 0x07, 0x93, 0x06, 0xf0, 0x44, 0xf8, 0x12, 0xa9, 0x05, 0x46, - 0x30, 0x68, 0x0d, 0xf1, 0x14, 0x0b, 0x06, 0xf0, 0x3d, 0xf8, 0x07, 0x46, - 0xaf, 0x42, 0x05, 0x9b, 0x03, 0xd3, 0xc9, 0xf8, 0x00, 0x30, 0x12, 0x9b, - 0xe2, 0xe7, 0xec, 0x1b, 0x95, 0xfa, 0xa5, 0xf2, 0x41, 0x46, 0x30, 0x46, - 0xb4, 0xfa, 0x84, 0xf4, 0xb2, 0xfa, 0x82, 0xf2, 0xc4, 0xf1, 0x1f, 0x04, - 0x94, 0x42, 0x28, 0xbf, 0x14, 0x46, 0xa2, 0x00, 0xcd, 0xe9, 0x01, 0xba, - 0x00, 0x92, 0x00, 0x22, 0x06, 0xf0, 0x3d, 0xf8, 0x00, 0x28, 0xce, 0xd1, - 0x01, 0x23, 0x03, 0xfa, 0x04, 0xf4, 0x2d, 0x1b, 0xdc, 0xe7, 0x00, 0x00, - 0x13, 0xb5, 0x06, 0x4b, 0x00, 0x78, 0x53, 0xf8, 0x20, 0x00, 0x00, 0x23, - 0x04, 0x68, 0xcd, 0xe9, 0x00, 0x23, 0x0a, 0x46, 0xe4, 0x69, 0xa0, 0x47, - 0x02, 0xb0, 0x10, 0xbd, 0x04, 0x00, 0x00, 0x24, 0x2d, 0xe9, 0xf8, 0x43, - 0x03, 0x78, 0x07, 0x46, 0x0b, 0xb1, 0x01, 0x2b, 0x20, 0xd1, 0x11, 0x4a, - 0x2c, 0x21, 0x4f, 0xf4, 0x34, 0x66, 0x4f, 0xf0, 0x00, 0x08, 0x01, 0xfb, - 0x03, 0x23, 0x92, 0x6e, 0x9d, 0x6a, 0x56, 0x43, 0x1c, 0x46, 0x01, 0x3d, - 0xe0, 0x36, 0x63, 0x6a, 0x38, 0x46, 0x03, 0xeb, 0xc5, 0x02, 0x53, 0xf8, - 0x35, 0x10, 0x1b, 0x68, 0x01, 0x3d, 0xd2, 0xf8, 0x04, 0x90, 0xc9, 0x1a, - 0xc8, 0x44, 0x4a, 0x46, 0xff, 0xf7, 0xcc, 0xff, 0xb0, 0x45, 0xee, 0xd3, - 0xbd, 0xe8, 0xf8, 0x83, 0x01, 0x20, 0xfb, 0xe7, 0x14, 0x07, 0x00, 0x24, - 0x02, 0x78, 0x07, 0x49, 0x51, 0xf8, 0x22, 0x30, 0x4b, 0xb1, 0x01, 0x3b, - 0x41, 0xf8, 0x22, 0x30, 0x2b, 0xb9, 0x04, 0x4b, 0x53, 0xf8, 0x22, 0x00, - 0x03, 0x68, 0xdb, 0x68, 0x18, 0x47, 0x70, 0x47, 0xf4, 0x05, 0x00, 0x24, - 0x04, 0x00, 0x00, 0x24, 0x22, 0x4b, 0x00, 0xeb, 0x40, 0x02, 0x01, 0x28, - 0x03, 0xeb, 0x82, 0x02, 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, 0x0a, 0x60, - 0x25, 0xd0, 0x02, 0x28, 0x26, 0xd0, 0x48, 0xbb, 0x1c, 0x4a, 0x5a, 0x60, - 0x1c, 0x4f, 0x00, 0x25, 0x57, 0xf8, 0x24, 0x20, 0x01, 0x32, 0x47, 0xf8, - 0x24, 0x20, 0x0c, 0x22, 0x62, 0x43, 0x03, 0xeb, 0x02, 0x08, 0x9c, 0x54, - 0x17, 0x4b, 0x88, 0xf8, 0x01, 0x50, 0x53, 0xf8, 0x24, 0x60, 0x33, 0x68, - 0x30, 0x46, 0x9b, 0x6b, 0x98, 0x47, 0x57, 0xf8, 0x24, 0x30, 0xc8, 0xf8, - 0x08, 0x00, 0x01, 0x2b, 0x17, 0xd1, 0x33, 0x68, 0x30, 0x46, 0x9b, 0x68, - 0xbd, 0xe8, 0xf0, 0x41, 0x18, 0x47, 0x00, 0x22, 0x1a, 0x61, 0xdb, 0xe7, - 0x4f, 0xf0, 0x10, 0x62, 0xda, 0x61, 0xd7, 0xe7, 0x0a, 0x4b, 0x1b, 0x78, - 0x1b, 0xb1, 0x01, 0x46, 0x09, 0x48, 0x0b, 0xf0, 0xed, 0xfd, 0x4f, 0xf0, - 0xff, 0x30, 0xbd, 0xe8, 0xf0, 0x81, 0x28, 0x46, 0xfb, 0xe7, 0x00, 0xbf, - 0x00, 0x06, 0x00, 0x24, 0x00, 0x00, 0x02, 0x08, 0xf4, 0x05, 0x00, 0x24, - 0x04, 0x00, 0x00, 0x24, 0xd8, 0x0d, 0x00, 0x24, 0x5f, 0xd5, 0x01, 0x08, - 0x73, 0xb5, 0x04, 0x46, 0x01, 0xa9, 0xc0, 0xb2, 0xff, 0xf7, 0xa8, 0xff, - 0x05, 0x46, 0x20, 0xb1, 0x4f, 0xf0, 0xff, 0x35, 0x28, 0x46, 0x02, 0xb0, - 0x70, 0xbd, 0x01, 0x98, 0xfd, 0xf7, 0xb6, 0xf8, 0x06, 0x46, 0x01, 0x98, - 0xff, 0xf7, 0x86, 0xff, 0x2c, 0x23, 0x06, 0x48, 0x03, 0xfb, 0x04, 0x04, - 0x63, 0x1e, 0x03, 0x34, 0xa3, 0x42, 0xed, 0xd0, 0x13, 0xf8, 0x01, 0x2f, - 0xb2, 0x42, 0xf9, 0xd0, 0xe6, 0xe7, 0x00, 0xbf, 0x14, 0x07, 0x00, 0x24, - 0x2d, 0xe9, 0xf7, 0x43, 0x04, 0x46, 0x0f, 0x46, 0xc0, 0xb2, 0x01, 0xa9, - 0xff, 0xf7, 0x82, 0xff, 0x00, 0x28, 0x63, 0xd1, 0x20, 0x46, 0xff, 0xf7, - 0xcf, 0xff, 0x30, 0xb1, 0x31, 0x4e, 0x2c, 0x25, 0x05, 0xfb, 0x04, 0x65, - 0x6b, 0x69, 0xda, 0x06, 0x0d, 0xd5, 0x0c, 0xb9, 0x01, 0x25, 0x03, 0xe0, - 0x25, 0x46, 0x01, 0x98, 0xff, 0xf7, 0x2e, 0xff, 0x01, 0x98, 0xff, 0xf7, - 0x57, 0xff, 0x28, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0xdd, 0xf8, - 0x04, 0x80, 0x98, 0xf8, 0x00, 0x90, 0xb9, 0xf1, 0x01, 0x0f, 0x2a, 0xd0, - 0x24, 0x48, 0x29, 0x46, 0x42, 0x46, 0xfe, 0xf7, 0x9f, 0xfc, 0x05, 0x46, - 0x2c, 0x23, 0x01, 0x98, 0x63, 0x43, 0xf1, 0x58, 0xf2, 0x18, 0x20, 0x4b, - 0x99, 0x42, 0x0a, 0xd1, 0x13, 0x69, 0x92, 0x68, 0xd1, 0x43, 0x8b, 0x42, - 0x05, 0xd8, 0x13, 0x44, 0x82, 0x68, 0x93, 0x42, 0x01, 0xd2, 0x00, 0x2d, - 0xd8, 0xd0, 0x1c, 0xb1, 0x82, 0x68, 0x00, 0x21, 0xff, 0xf7, 0xf2, 0xfe, - 0x17, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0xc9, 0xd0, 0x16, 0x4b, 0x17, 0x49, - 0x17, 0x48, 0x00, 0x2c, 0x18, 0xbf, 0x19, 0x46, 0x0b, 0xf0, 0x62, 0xfd, - 0xc0, 0xe7, 0x13, 0xf0, 0x0c, 0x0f, 0xd1, 0xd0, 0x3b, 0x46, 0x42, 0x46, - 0x29, 0x46, 0x06, 0xf1, 0x6c, 0x00, 0xff, 0xf7, 0xad, 0xfb, 0x00, 0x28, - 0x02, 0xda, 0x4f, 0xf0, 0xff, 0x35, 0xcb, 0xe7, 0xc4, 0xd1, 0x3a, 0x46, - 0x49, 0x46, 0x06, 0xf1, 0x6c, 0x00, 0xfe, 0xf7, 0xc9, 0xfa, 0x00, 0x28, - 0xbc, 0xd0, 0xf2, 0xe7, 0x4f, 0xf0, 0xff, 0x35, 0xad, 0xe7, 0x00, 0xbf, - 0x14, 0x07, 0x00, 0x24, 0x80, 0x07, 0x00, 0x24, 0x3d, 0xb8, 0xf3, 0x96, - 0xd8, 0x0d, 0x00, 0x24, 0x89, 0xd5, 0x01, 0x08, 0x81, 0xd5, 0x01, 0x08, - 0x93, 0xd5, 0x01, 0x08, 0x13, 0xb5, 0x00, 0x20, 0x01, 0xa9, 0xff, 0xf7, - 0x05, 0xff, 0x01, 0x46, 0x10, 0xbb, 0x20, 0x23, 0x13, 0x4a, 0x01, 0x98, - 0xfe, 0xf7, 0xfa, 0xfa, 0x04, 0x1e, 0x18, 0xbf, 0x01, 0x24, 0x01, 0x98, - 0xff, 0xf7, 0xe4, 0xfe, 0xd4, 0xb9, 0x01, 0xa9, 0x01, 0x20, 0xff, 0xf7, - 0xf3, 0xfe, 0x98, 0xb9, 0x21, 0x46, 0x20, 0x23, 0x0b, 0x4a, 0x01, 0x98, - 0xfe, 0xf7, 0xe8, 0xfa, 0x04, 0x1e, 0x18, 0xbf, 0x01, 0x24, 0x01, 0x98, - 0xff, 0xf7, 0xd2, 0xfe, 0x0c, 0xb1, 0x84, 0xf0, 0x01, 0x04, 0x20, 0x46, - 0x02, 0xb0, 0x10, 0xbd, 0x01, 0x24, 0xe2, 0xe7, 0x01, 0x24, 0xf2, 0xe7, - 0x00, 0x24, 0xf4, 0xe7, 0x14, 0x07, 0x00, 0x24, 0x40, 0x07, 0x00, 0x24, - 0x13, 0xb5, 0x00, 0x20, 0x01, 0xa9, 0xff, 0xf7, 0xd1, 0xfe, 0x90, 0xb9, - 0x01, 0x98, 0x01, 0x23, 0x6a, 0x46, 0x81, 0x68, 0x8d, 0xf8, 0x00, 0x30, - 0x40, 0x39, 0x21, 0xf0, 0x1f, 0x01, 0x20, 0x39, 0xfe, 0xf7, 0x85, 0xfa, - 0x04, 0x46, 0x01, 0x98, 0xff, 0xf7, 0xac, 0xfe, 0x20, 0x46, 0x02, 0xb0, - 0x10, 0xbd, 0x01, 0x24, 0xfa, 0xe7, 0x00, 0x00, 0x30, 0xb5, 0x83, 0x79, - 0x8d, 0xb0, 0x05, 0x46, 0x00, 0x2b, 0x03, 0xa9, 0x14, 0xbf, 0x02, 0x20, - 0x00, 0x20, 0xff, 0xf7, 0xaf, 0xfe, 0x60, 0xbb, 0x03, 0x98, 0xfd, 0xf7, - 0x1e, 0xf8, 0x16, 0x4b, 0x29, 0x79, 0x9a, 0x6e, 0x01, 0x39, 0x2b, 0x68, - 0x02, 0xeb, 0x42, 0x04, 0x01, 0x3b, 0x4a, 0x43, 0x04, 0xfb, 0x03, 0x23, - 0x1c, 0x18, 0x03, 0x98, 0xfc, 0xf7, 0xc0, 0xff, 0x01, 0x90, 0x03, 0x98, - 0xfc, 0xf7, 0xb0, 0xff, 0x20, 0x22, 0x01, 0x46, 0x04, 0xa8, 0x17, 0xf0, - 0xb1, 0xfd, 0x2a, 0x79, 0x21, 0x46, 0x01, 0x9b, 0x8d, 0xf8, 0x10, 0x20, - 0x04, 0xaa, 0x03, 0x98, 0xfc, 0xf7, 0xba, 0xff, 0x04, 0x1e, 0x18, 0xbf, - 0x01, 0x24, 0x03, 0x98, 0xff, 0xf7, 0x70, 0xfe, 0x20, 0x46, 0x0d, 0xb0, - 0x30, 0xbd, 0x01, 0x24, 0xf7, 0xe7, 0x00, 0xbf, 0x14, 0x07, 0x00, 0x24, - 0xf7, 0xb5, 0x04, 0x46, 0x0f, 0x46, 0xc0, 0xb2, 0x69, 0x46, 0xff, 0xf7, - 0x75, 0xfe, 0x30, 0xb1, 0x01, 0x25, 0x00, 0x98, 0xff, 0xf7, 0x5c, 0xfe, - 0x28, 0x46, 0x03, 0xb0, 0xf0, 0xbd, 0x1b, 0x48, 0x2c, 0x23, 0x03, 0xfb, - 0x04, 0x04, 0x00, 0x98, 0x23, 0x69, 0xa6, 0x68, 0x1e, 0x44, 0x04, 0x23, - 0x31, 0x46, 0x0d, 0xeb, 0x03, 0x02, 0xfe, 0xf7, 0x5b, 0xfa, 0x05, 0x46, - 0x00, 0x28, 0xe7, 0xd1, 0xbd, 0xf8, 0x04, 0x20, 0x46, 0xf6, 0x08, 0x13, - 0xe4, 0x68, 0x9a, 0x42, 0x1a, 0xd1, 0xbd, 0xf8, 0x06, 0x30, 0x9c, 0x42, - 0x01, 0xd0, 0x03, 0x25, 0xdb, 0xe7, 0x04, 0x23, 0x31, 0x19, 0x00, 0x98, - 0x0d, 0xeb, 0x03, 0x02, 0xfe, 0xf7, 0x44, 0xfa, 0x00, 0x28, 0xd1, 0xd1, - 0xbd, 0xf8, 0x04, 0x20, 0x46, 0xf6, 0x07, 0x13, 0x9a, 0x42, 0xee, 0xd1, - 0xbd, 0xf8, 0x06, 0x30, 0x23, 0x44, 0x33, 0x44, 0x3b, 0x60, 0xc6, 0xe7, - 0x00, 0x2c, 0xf1, 0xd0, 0xe5, 0xe7, 0x00, 0xbf, 0x14, 0x07, 0x00, 0x24, - 0x2d, 0xe9, 0xf0, 0x41, 0x86, 0xb0, 0x02, 0x23, 0x05, 0x46, 0x00, 0x26, - 0x01, 0xaf, 0xdf, 0xf8, 0x58, 0x80, 0xad, 0xf8, 0x04, 0x30, 0x29, 0x46, - 0x17, 0xf8, 0x01, 0x0b, 0xff, 0xf7, 0x24, 0xfe, 0x04, 0x46, 0x58, 0xb9, - 0x28, 0x68, 0x10, 0x23, 0x02, 0xaa, 0x81, 0x68, 0x20, 0x39, 0xfe, 0xf7, - 0x17, 0xfa, 0x04, 0x46, 0x40, 0xb1, 0x28, 0x68, 0xff, 0xf7, 0x02, 0xfe, - 0x20, 0x46, 0x06, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x01, 0x26, 0xe6, 0xe7, - 0x10, 0x22, 0x41, 0x46, 0x02, 0xa8, 0x19, 0xf0, 0x83, 0xf8, 0x04, 0x46, - 0x00, 0x28, 0xf1, 0xd0, 0x28, 0x68, 0xff, 0xf7, 0xf1, 0xfd, 0x00, 0x2e, - 0xf0, 0xd0, 0x4f, 0xf0, 0xff, 0x34, 0xe9, 0xe7, 0x74, 0xde, 0x01, 0x08, - 0x81, 0x68, 0xf0, 0xb5, 0x89, 0xb0, 0xa1, 0xf1, 0x20, 0x06, 0x05, 0x46, - 0xfc, 0xf7, 0x0e, 0xff, 0x0b, 0x4b, 0x07, 0x46, 0x6c, 0x46, 0x0f, 0xcb, - 0x84, 0xe8, 0x0f, 0x00, 0x10, 0x22, 0x39, 0x46, 0x0d, 0xeb, 0x02, 0x00, - 0x17, 0xf0, 0x08, 0xfd, 0x20, 0x23, 0x22, 0x46, 0x31, 0x46, 0x28, 0x46, - 0xfc, 0xf7, 0x14, 0xff, 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x09, 0xb0, - 0xf0, 0xbd, 0x00, 0xbf, 0x74, 0xde, 0x01, 0x08, 0x30, 0xb5, 0x00, 0x23, - 0x87, 0xb0, 0x0d, 0x46, 0x81, 0x68, 0x05, 0x93, 0x02, 0xaa, 0x20, 0x39, - 0x04, 0x46, 0xcd, 0xe9, 0x03, 0x33, 0xff, 0x23, 0x02, 0x93, 0x10, 0x23, - 0xfe, 0xf7, 0xc8, 0xf9, 0x00, 0x28, 0x11, 0xdb, 0x10, 0x22, 0x02, 0xa9, - 0x20, 0x46, 0xfc, 0xf7, 0x09, 0xff, 0x68, 0xb1, 0x03, 0x23, 0x2b, 0x70, - 0x0d, 0xf1, 0x07, 0x02, 0xa1, 0x68, 0x01, 0x23, 0x20, 0x46, 0x80, 0x39, - 0xfe, 0xf7, 0xb6, 0xf9, 0x00, 0x28, 0x0b, 0xda, 0x01, 0x20, 0x2c, 0xe0, - 0x10, 0x22, 0x17, 0x49, 0x02, 0xa8, 0x19, 0xf0, 0x29, 0xf8, 0x00, 0x28, - 0x14, 0xbf, 0x02, 0x23, 0x01, 0x23, 0xe8, 0xe7, 0x9d, 0xf8, 0x07, 0x30, - 0x0d, 0xf1, 0x07, 0x01, 0x20, 0x46, 0x03, 0xf0, 0x0f, 0x02, 0x1b, 0x09, - 0x6a, 0x70, 0x01, 0x22, 0x2b, 0x71, 0xfc, 0xf7, 0xe3, 0xfe, 0x10, 0xb9, - 0x6b, 0x78, 0x04, 0x2b, 0x03, 0xd9, 0x01, 0x23, 0x6b, 0x70, 0x00, 0x23, - 0x2b, 0x71, 0xa2, 0x68, 0xa9, 0x1c, 0x20, 0x46, 0x60, 0x3a, 0xfe, 0xf7, - 0xa9, 0xfd, 0x00, 0x28, 0xd6, 0xd1, 0xa2, 0x68, 0xe9, 0x1c, 0x20, 0x46, - 0x40, 0x3a, 0xfe, 0xf7, 0xa1, 0xfd, 0x07, 0xb0, 0x30, 0xbd, 0x00, 0xbf, - 0x74, 0xde, 0x01, 0x08, 0x1f, 0xb5, 0x00, 0x20, 0x01, 0xa9, 0xff, 0xf7, - 0x7f, 0xfd, 0xa8, 0xb9, 0x02, 0xa9, 0x01, 0x98, 0xff, 0xf7, 0x9e, 0xff, - 0x04, 0x46, 0x68, 0xb9, 0x9d, 0xf8, 0x0b, 0x30, 0x03, 0x2b, 0x03, 0xd1, - 0x01, 0x98, 0xfe, 0xf7, 0x60, 0xf9, 0x04, 0x46, 0x01, 0x98, 0xff, 0xf7, - 0x59, 0xfd, 0x20, 0x46, 0x04, 0xb0, 0x10, 0xbd, 0x01, 0x24, 0xf7, 0xe7, - 0x01, 0x24, 0xf8, 0xe7, 0x13, 0xb5, 0x0c, 0x46, 0xc0, 0xb2, 0x01, 0xa9, - 0xff, 0xf7, 0x60, 0xfd, 0x50, 0xb9, 0x21, 0x46, 0x01, 0x98, 0xff, 0xf7, - 0x7f, 0xff, 0x04, 0x46, 0x01, 0x98, 0xff, 0xf7, 0x43, 0xfd, 0x20, 0x46, - 0x02, 0xb0, 0x10, 0xbd, 0x01, 0x24, 0xfa, 0xe7, 0x30, 0xb5, 0x85, 0xb0, - 0x0d, 0x46, 0x04, 0x46, 0x01, 0x20, 0x02, 0xa9, 0xff, 0xf7, 0xe4, 0xff, - 0xe9, 0x79, 0x01, 0x29, 0x02, 0xd0, 0x20, 0x46, 0xfe, 0xf7, 0x3c, 0xff, - 0x9d, 0xf8, 0x0b, 0x30, 0x01, 0x2b, 0x02, 0xd1, 0x20, 0x46, 0xfe, 0xf7, - 0x2c, 0xf9, 0xab, 0x68, 0x20, 0x46, 0xa1, 0x68, 0x01, 0x93, 0x04, 0x23, - 0xa0, 0x39, 0x0d, 0xeb, 0x03, 0x02, 0xfe, 0xf7, 0xf4, 0xf8, 0x2a, 0x46, - 0x00, 0x21, 0x20, 0x46, 0xfc, 0xf7, 0x91, 0xfe, 0x2a, 0x46, 0x01, 0x21, - 0x20, 0x46, 0xfc, 0xf7, 0x8c, 0xfe, 0x20, 0x46, 0xff, 0xf7, 0x28, 0xff, - 0x00, 0x20, 0x05, 0xb0, 0x30, 0xbd, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4f, - 0x04, 0x46, 0x8d, 0xb0, 0x00, 0x20, 0x63, 0x79, 0x01, 0x2b, 0xcd, 0xe9, - 0x04, 0x00, 0x40, 0xf0, 0x77, 0x81, 0x23, 0x68, 0x01, 0x2b, 0x40, 0xf0, - 0x73, 0x81, 0x23, 0x79, 0x01, 0x2b, 0x40, 0xf0, 0x6f, 0x81, 0xb0, 0x4d, - 0xb0, 0x4e, 0x2a, 0x68, 0xb2, 0x42, 0x02, 0xd1, 0x05, 0xa9, 0xff, 0xf7, - 0x8b, 0xfe, 0x6b, 0x69, 0x13, 0xf0, 0x0c, 0x0f, 0x00, 0xf0, 0x9b, 0x81, - 0xa9, 0x49, 0x23, 0x46, 0x2a, 0x6a, 0x01, 0xf1, 0x6c, 0x00, 0xff, 0xf7, - 0x7d, 0xf9, 0x01, 0x46, 0x18, 0xb9, 0x22, 0x46, 0xa6, 0x48, 0xfe, 0xf7, - 0x9f, 0xf8, 0xeb, 0x6a, 0xb3, 0x42, 0x03, 0xd1, 0x04, 0xa9, 0x01, 0x20, - 0xff, 0xf7, 0x72, 0xfe, 0x2b, 0x6c, 0x13, 0xf0, 0x0c, 0x0f, 0x00, 0xf0, - 0x89, 0x81, 0xa0, 0x49, 0x23, 0x46, 0xea, 0x6c, 0x01, 0xf1, 0x40, 0x00, - 0xff, 0xf7, 0x64, 0xf9, 0x20, 0xb9, 0x22, 0x46, 0x01, 0x21, 0x9a, 0x48, - 0xfe, 0xf7, 0x86, 0xf8, 0xdd, 0xe9, 0x04, 0x32, 0x93, 0x42, 0x88, 0xbf, - 0x05, 0x93, 0x05, 0x9b, 0xa3, 0x60, 0x93, 0x4d, 0x00, 0x23, 0x05, 0x99, - 0x6e, 0x6a, 0x1a, 0x46, 0x2f, 0x6d, 0x18, 0x46, 0x9a, 0x46, 0xa8, 0x46, - 0x91, 0x42, 0x01, 0xd8, 0x9a, 0x42, 0x05, 0xd2, 0x06, 0xeb, 0xca, 0x05, - 0x0a, 0xf1, 0x01, 0x0a, 0x6d, 0x68, 0x2a, 0x44, 0x99, 0x42, 0x02, 0xd8, - 0x93, 0x42, 0x80, 0xf0, 0x88, 0x81, 0x07, 0xeb, 0xc0, 0x05, 0x91, 0x42, - 0x00, 0xf1, 0x01, 0x00, 0x6d, 0x68, 0x2b, 0x44, 0xec, 0xd8, 0x99, 0x42, - 0xe6, 0xd8, 0x9a, 0x42, 0xe4, 0xd1, 0xd1, 0x46, 0x4f, 0xf0, 0x00, 0x0b, - 0x83, 0x4b, 0x5d, 0x46, 0x0b, 0xf1, 0x01, 0x0b, 0x1b, 0x78, 0x2b, 0xb1, - 0x0a, 0xf1, 0x01, 0x02, 0x59, 0x46, 0x80, 0x48, 0x0b, 0xf0, 0xce, 0xfa, - 0xd8, 0xf8, 0x58, 0x30, 0xd8, 0xf8, 0x24, 0x20, 0x99, 0x68, 0x00, 0x23, - 0x10, 0x1d, 0x1f, 0x46, 0x50, 0xf8, 0x39, 0x30, 0x3b, 0x44, 0x99, 0x42, - 0x03, 0xd3, 0xb9, 0xf1, 0x01, 0x09, 0xf6, 0xd2, 0x1f, 0x46, 0x21, 0x68, - 0x4b, 0x1e, 0xab, 0x42, 0x00, 0xf2, 0x45, 0x81, 0x09, 0xf1, 0x01, 0x00, - 0x13, 0x68, 0xd8, 0xf8, 0x68, 0x50, 0x52, 0xf8, 0x30, 0x60, 0xd8, 0xf8, - 0x28, 0x00, 0xf6, 0x1a, 0x01, 0x38, 0x06, 0xeb, 0x07, 0x0c, 0x52, 0xf8, - 0x30, 0x20, 0xd3, 0x1a, 0x9c, 0x45, 0x40, 0xf2, 0x20, 0x81, 0x4f, 0xf4, - 0x34, 0x63, 0x6f, 0xf0, 0xdf, 0x02, 0x01, 0x29, 0x03, 0xfb, 0x15, 0x25, - 0x3d, 0x44, 0x40, 0xf0, 0x17, 0x81, 0xeb, 0x1b, 0x18, 0xbf, 0x01, 0x23, - 0xa3, 0x71, 0x06, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0x67, 0xfc, 0x07, 0xa9, - 0x01, 0x20, 0xff, 0xf7, 0x63, 0xfc, 0x08, 0xa9, 0x02, 0x20, 0xff, 0xf7, - 0x5f, 0xfc, 0x23, 0x79, 0x01, 0x2b, 0x40, 0xf0, 0x05, 0x81, 0x08, 0x98, - 0x00, 0x21, 0x82, 0x68, 0xff, 0xf7, 0x06, 0xfc, 0x23, 0x68, 0x01, 0x2b, - 0x13, 0xd1, 0x21, 0x46, 0x08, 0x98, 0xff, 0xf7, 0xfd, 0xfe, 0xa3, 0x79, - 0x6b, 0xb9, 0x06, 0x98, 0x03, 0x93, 0xff, 0xf7, 0x09, 0xfc, 0x21, 0x46, - 0x06, 0x98, 0xff, 0xf7, 0xf3, 0xfe, 0x08, 0x98, 0x03, 0x9b, 0x82, 0x68, - 0x19, 0x46, 0xff, 0xf7, 0xef, 0xfb, 0x00, 0x23, 0x32, 0x46, 0x00, 0x95, - 0xdd, 0xe9, 0x07, 0x01, 0xfe, 0xf7, 0xc2, 0xf8, 0x20, 0x46, 0xff, 0xf7, - 0x7b, 0xfd, 0x02, 0x23, 0x23, 0x71, 0x18, 0xb1, 0x47, 0x4a, 0x13, 0x68, - 0x01, 0x33, 0x13, 0x60, 0x3a, 0x46, 0x31, 0x46, 0x07, 0x98, 0xff, 0xf7, - 0xd9, 0xfb, 0x33, 0x46, 0x32, 0x46, 0x00, 0x95, 0xdd, 0xe9, 0x06, 0x01, - 0xfe, 0xf7, 0xac, 0xf8, 0x23, 0x68, 0x01, 0x2b, 0x04, 0xd1, 0xa3, 0x79, - 0x13, 0xb9, 0x07, 0x98, 0xff, 0xf7, 0xda, 0xfb, 0x20, 0x46, 0xff, 0xf7, - 0x5d, 0xfd, 0x03, 0x23, 0x23, 0x71, 0x18, 0xb1, 0x38, 0x4a, 0x13, 0x68, - 0x01, 0x33, 0x13, 0x60, 0x3a, 0x46, 0x31, 0x46, 0x06, 0x98, 0xff, 0xf7, - 0xbb, 0xfb, 0x33, 0x46, 0x00, 0x22, 0x06, 0x99, 0x08, 0x98, 0x00, 0x95, - 0xfe, 0xf7, 0x8e, 0xf8, 0xa3, 0x79, 0x00, 0x2b, 0x39, 0xd0, 0x08, 0x98, - 0xfc, 0xf7, 0x71, 0xfd, 0xd8, 0xf8, 0x68, 0x30, 0x02, 0x46, 0x06, 0x99, - 0x5b, 0x00, 0x08, 0x98, 0x00, 0x93, 0x73, 0x19, 0xfe, 0xf7, 0x7e, 0xf8, - 0x18, 0xb1, 0x28, 0x4a, 0x13, 0x68, 0x01, 0x33, 0x13, 0x60, 0x0a, 0xa9, - 0x08, 0x98, 0xff, 0xf7, 0x0f, 0xfe, 0x9d, 0xf8, 0x2b, 0x30, 0x01, 0x2b, - 0x02, 0xd1, 0x06, 0x98, 0xfd, 0xf7, 0xd3, 0xff, 0x9d, 0xf8, 0x29, 0x10, - 0x01, 0x29, 0x02, 0xd0, 0x06, 0x98, 0xfe, 0xf7, 0xd5, 0xfd, 0x06, 0x98, - 0x09, 0xaa, 0xa3, 0x68, 0x81, 0x68, 0x09, 0x93, 0x04, 0x23, 0xa0, 0x39, - 0xfd, 0xf7, 0x95, 0xff, 0x22, 0x46, 0x00, 0x21, 0x06, 0x98, 0xfc, 0xf7, - 0x32, 0xfd, 0x22, 0x46, 0x01, 0x21, 0x06, 0x98, 0xfc, 0xf7, 0x2d, 0xfd, - 0x06, 0x98, 0xff, 0xf7, 0xc9, 0xfd, 0x00, 0x23, 0xa5, 0x79, 0x20, 0x46, - 0xa3, 0x71, 0xff, 0xf7, 0x07, 0xfd, 0x23, 0x68, 0x01, 0x33, 0x23, 0x60, - 0x01, 0x23, 0x23, 0x71, 0x18, 0xb1, 0x0c, 0x4a, 0x13, 0x68, 0x01, 0x33, - 0x13, 0x60, 0x00, 0x2d, 0x64, 0xd0, 0x3a, 0x46, 0x00, 0x21, 0x08, 0x98, - 0xff, 0xf7, 0x60, 0xfb, 0x5e, 0xe0, 0x00, 0xbf, 0x14, 0x07, 0x00, 0x24, - 0x3d, 0xb8, 0xf3, 0x96, 0x80, 0x07, 0x00, 0x24, 0x40, 0x07, 0x00, 0x24, - 0xd8, 0x0d, 0x00, 0x24, 0xb9, 0xd5, 0x01, 0x08, 0xd4, 0x09, 0x00, 0x24, - 0x0a, 0xa8, 0xff, 0xf7, 0x69, 0xfd, 0x50, 0xb9, 0x0a, 0x98, 0x04, 0x23, - 0x04, 0xf1, 0x08, 0x02, 0x81, 0x68, 0xa0, 0x39, 0xfd, 0xf7, 0x90, 0xff, - 0x0a, 0x98, 0xff, 0xf7, 0x7d, 0xfb, 0xa3, 0x68, 0x04, 0xf1, 0x1c, 0x06, - 0x00, 0x27, 0xdf, 0xf8, 0xd0, 0x80, 0x05, 0x93, 0x0a, 0xa8, 0x5f, 0xfa, - 0x87, 0xf9, 0xa6, 0xf1, 0x10, 0x05, 0xff, 0xf7, 0x4f, 0xfd, 0x68, 0xb9, - 0x0a, 0x98, 0x10, 0x23, 0x2a, 0x46, 0x81, 0x68, 0xa1, 0xf1, 0xa0, 0x0c, - 0x79, 0x1c, 0xac, 0xeb, 0x41, 0x11, 0xfd, 0xf7, 0x73, 0xff, 0x0a, 0x98, - 0xff, 0xf7, 0x60, 0xfb, 0x2a, 0x46, 0x12, 0xf8, 0x01, 0x3b, 0xff, 0x2b, - 0x3d, 0xd1, 0x96, 0x42, 0xf9, 0xd1, 0x10, 0x36, 0x00, 0x2f, 0x7f, 0xf4, - 0x94, 0xae, 0x01, 0x27, 0xdc, 0xe7, 0x10, 0x22, 0xff, 0x21, 0x04, 0xf1, - 0x0c, 0x00, 0x17, 0xf0, 0x7f, 0xfa, 0x6a, 0xe6, 0x10, 0x22, 0xff, 0x21, - 0x04, 0xf1, 0x1c, 0x00, 0x17, 0xf0, 0x78, 0xfa, 0x7c, 0xe6, 0x3d, 0x46, - 0x00, 0x23, 0xe9, 0xe6, 0x02, 0x2b, 0x3f, 0xf4, 0x25, 0xaf, 0x03, 0x2b, - 0x3f, 0xf4, 0x40, 0xaf, 0x06, 0x98, 0xff, 0xf7, 0x39, 0xfb, 0x07, 0x98, - 0xff, 0xf7, 0x36, 0xfb, 0x08, 0x98, 0xff, 0xf7, 0x33, 0xfb, 0xb9, 0xf1, - 0xff, 0x3f, 0x7f, 0xf4, 0x95, 0xae, 0x0c, 0x4b, 0x19, 0x68, 0x00, 0x29, - 0x05, 0xdd, 0x0b, 0x4b, 0x1b, 0x78, 0x13, 0xb1, 0x0a, 0x48, 0x0b, 0xf0, - 0x65, 0xf9, 0x00, 0x20, 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x91, 0x42, - 0x7f, 0xf6, 0x7f, 0xae, 0x68, 0xe6, 0x22, 0x46, 0x49, 0x46, 0x40, 0x46, - 0xfd, 0xf7, 0xd6, 0xfe, 0xbd, 0xe7, 0x00, 0xbf, 0xd4, 0x09, 0x00, 0x24, - 0xd8, 0x0d, 0x00, 0x24, 0xd1, 0xd5, 0x01, 0x08, 0x80, 0x07, 0x00, 0x24, - 0x2d, 0xe9, 0xf0, 0x4f, 0x97, 0xb0, 0x82, 0x4d, 0x14, 0xf0, 0x22, 0xfd, - 0x07, 0x20, 0x14, 0xf0, 0x89, 0xfa, 0x10, 0xf0, 0x01, 0x0f, 0x10, 0xd0, - 0x01, 0x23, 0x7e, 0x48, 0x2b, 0x70, 0x18, 0xf0, 0x4d, 0xfe, 0x14, 0xf0, - 0x9b, 0xfa, 0x06, 0x46, 0x70, 0xb1, 0x2b, 0x78, 0x1b, 0xb1, 0x7a, 0x49, - 0x7a, 0x48, 0x0b, 0xf0, 0x33, 0xf9, 0x14, 0xf0, 0x53, 0xfe, 0x79, 0x48, - 0x0c, 0xf0, 0xc2, 0xf9, 0x00, 0x28, 0xe9, 0xd1, 0x28, 0x70, 0xec, 0xe7, - 0x76, 0x4c, 0x4f, 0xf4, 0x29, 0x72, 0x01, 0x46, 0x4f, 0xf4, 0x70, 0x77, - 0x20, 0x46, 0x17, 0xf0, 0x13, 0xfa, 0x73, 0x4b, 0x04, 0xf1, 0x20, 0x01, - 0x30, 0x46, 0x63, 0x62, 0x71, 0x4b, 0x23, 0x65, 0x71, 0x4b, 0xe3, 0x65, - 0xff, 0xf7, 0xea, 0xfa, 0x04, 0xf1, 0x4c, 0x01, 0x01, 0x20, 0xff, 0xf7, - 0xe5, 0xfa, 0x04, 0xf1, 0x58, 0x01, 0x02, 0x20, 0xff, 0xf7, 0xe0, 0xfa, - 0x62, 0x6a, 0x81, 0x46, 0x0a, 0xa9, 0x30, 0x46, 0x0a, 0x97, 0xfc, 0xf7, - 0xbd, 0xfb, 0x80, 0xbb, 0x0a, 0x9b, 0x0a, 0xa9, 0x22, 0x6d, 0x01, 0x20, - 0xa3, 0x62, 0x0a, 0x97, 0xfc, 0xf7, 0xb4, 0xfb, 0xf0, 0xb1, 0x09, 0x26, - 0x2b, 0x78, 0x23, 0xb1, 0x4f, 0xf4, 0x70, 0x71, 0x60, 0x48, 0x0b, 0xf0, - 0xf3, 0xf8, 0x01, 0x23, 0x9e, 0x42, 0x84, 0xf8, 0x64, 0x30, 0x29, 0xd1, - 0x58, 0x4d, 0x53, 0x4f, 0x95, 0xf8, 0x64, 0x30, 0x04, 0x2b, 0x8d, 0xf8, - 0x2f, 0x30, 0x00, 0xf2, 0xee, 0x82, 0x01, 0x2b, 0x00, 0xf2, 0xf1, 0x82, - 0x00, 0xf0, 0x78, 0x83, 0xff, 0x23, 0x85, 0xf8, 0x64, 0x30, 0x73, 0xe3, - 0x0a, 0x9b, 0x0a, 0xa9, 0xe2, 0x6d, 0x02, 0x20, 0x63, 0x65, 0x0a, 0x97, - 0xfc, 0xf7, 0x8c, 0xfb, 0x08, 0xb1, 0x01, 0x26, 0xd6, 0xe7, 0x0a, 0x9b, - 0x20, 0x6a, 0x23, 0x66, 0xfc, 0xf7, 0xc4, 0xfb, 0x06, 0x46, 0xa0, 0x6d, - 0xfc, 0xf7, 0xc0, 0xfb, 0xb0, 0x42, 0x2c, 0xbf, 0xa0, 0x66, 0xa6, 0x66, - 0x00, 0x20, 0xff, 0xf7, 0x8b, 0xfb, 0x06, 0x46, 0x50, 0xb1, 0x2b, 0x78, - 0x1b, 0xb1, 0x00, 0x21, 0x44, 0x48, 0x0b, 0xf0, 0xb9, 0xf8, 0x3e, 0x4b, - 0x01, 0x22, 0x83, 0xf8, 0x64, 0x20, 0xc5, 0xe7, 0xd4, 0xf8, 0x28, 0x80, - 0xb8, 0xf5, 0x70, 0x7f, 0x04, 0xd8, 0xd4, 0xf8, 0x54, 0xe0, 0xbe, 0xf5, - 0x70, 0x7f, 0x06, 0xd9, 0x2b, 0x78, 0x00, 0x2b, 0xed, 0xd0, 0x3b, 0x48, - 0x18, 0xf0, 0xb4, 0xfd, 0xe9, 0xe7, 0xa3, 0x6d, 0x05, 0x46, 0xd4, 0xf8, - 0x24, 0xb0, 0x02, 0x46, 0x9b, 0x68, 0x01, 0x46, 0x84, 0x46, 0x02, 0x90, - 0x05, 0x93, 0x23, 0x6d, 0x03, 0x93, 0x03, 0x46, 0x88, 0x45, 0x0e, 0xd8, - 0x96, 0x45, 0x0c, 0xd8, 0x88, 0x45, 0x25, 0x4d, 0x04, 0xd1, 0x96, 0x45, - 0x02, 0xd1, 0x02, 0x9b, 0x9c, 0x45, 0x61, 0xd0, 0x2b, 0x78, 0x00, 0x2b, - 0xcd, 0xd0, 0x2c, 0x48, 0xde, 0xe7, 0x83, 0x42, 0x1b, 0xd1, 0x0b, 0xeb, - 0xc1, 0x0a, 0x03, 0x9f, 0x01, 0x31, 0xda, 0xf8, 0x04, 0xa0, 0x53, 0x44, - 0x07, 0xeb, 0xc2, 0x0a, 0x01, 0x32, 0xda, 0xf8, 0x04, 0xa0, 0x50, 0x44, - 0x83, 0x42, 0xdd, 0xd1, 0x02, 0x98, 0x9c, 0x44, 0x18, 0x44, 0x02, 0x90, - 0x05, 0x98, 0x98, 0x42, 0x21, 0xd2, 0x13, 0x4b, 0x1b, 0x78, 0x00, 0x2b, - 0xaf, 0xd0, 0x1e, 0x48, 0xc0, 0xe7, 0x0f, 0xd2, 0x0b, 0xeb, 0xc1, 0x0a, - 0x02, 0x2d, 0xda, 0xf8, 0x04, 0xa0, 0x53, 0x44, 0x05, 0xd1, 0x0c, 0x4b, - 0x1b, 0x78, 0x00, 0x2b, 0xa1, 0xd0, 0x18, 0x48, 0xb2, 0xe7, 0x01, 0x31, - 0x01, 0x25, 0xdf, 0xe7, 0x03, 0x9f, 0x01, 0x2d, 0x07, 0xeb, 0xc2, 0x0a, - 0xda, 0xf8, 0x04, 0xa0, 0x50, 0x44, 0xee, 0xd0, 0x01, 0x32, 0x02, 0x25, - 0xd4, 0xe7, 0x00, 0x25, 0x28, 0x46, 0x2b, 0x46, 0xb0, 0xe7, 0x00, 0xbf, - 0xd8, 0x0d, 0x00, 0x24, 0x30, 0xd6, 0x01, 0x08, 0x43, 0xd6, 0x01, 0x08, - 0x59, 0xd6, 0x01, 0x08, 0xb8, 0x09, 0x00, 0x24, 0x14, 0x07, 0x00, 0x24, - 0x74, 0x0e, 0x00, 0x24, 0xa0, 0x4c, 0x00, 0x24, 0xa0, 0x2e, 0x00, 0x24, - 0x5f, 0xd6, 0x01, 0x08, 0x9f, 0xd6, 0x01, 0x08, 0xc9, 0xd6, 0x01, 0x08, - 0x5e, 0xd7, 0x01, 0x08, 0x29, 0xd7, 0x01, 0x08, 0xf5, 0xd6, 0x01, 0x08, - 0x20, 0x22, 0xff, 0x21, 0x0d, 0xa8, 0x17, 0xf0, 0x15, 0xf9, 0x01, 0x23, - 0x00, 0x20, 0x08, 0xa9, 0x0a, 0x93, 0x03, 0xf1, 0x01, 0x23, 0x15, 0x90, - 0xcd, 0xe9, 0x0b, 0x30, 0xff, 0xf7, 0x86, 0xfc, 0x06, 0xa9, 0x02, 0x20, - 0xff, 0xf7, 0x82, 0xfc, 0x2b, 0x78, 0x6b, 0xb3, 0x9d, 0xf8, 0x20, 0x30, - 0x01, 0x2b, 0x00, 0xf0, 0xed, 0x80, 0xa5, 0x4a, 0xa5, 0x49, 0x03, 0x2b, - 0x18, 0xbf, 0x0a, 0x46, 0x9d, 0xf8, 0x23, 0x30, 0xa3, 0x49, 0x01, 0x93, - 0x9d, 0xf8, 0x22, 0x30, 0xa2, 0x48, 0x00, 0x93, 0x9d, 0xf8, 0x21, 0x30, - 0x0a, 0xf0, 0xfc, 0xff, 0x2b, 0x78, 0xab, 0xb1, 0x9d, 0xf8, 0x18, 0x30, - 0x01, 0x2b, 0x00, 0xf0, 0xd7, 0x80, 0x99, 0x4a, 0x99, 0x49, 0x03, 0x2b, - 0x18, 0xbf, 0x0a, 0x46, 0x9d, 0xf8, 0x1b, 0x30, 0x99, 0x49, 0x01, 0x93, - 0x9d, 0xf8, 0x1a, 0x30, 0x96, 0x48, 0x00, 0x93, 0x9d, 0xf8, 0x19, 0x30, - 0x0a, 0xf0, 0xe4, 0xff, 0xdf, 0xf8, 0x88, 0xb2, 0x00, 0x22, 0x9d, 0xf8, - 0x22, 0x30, 0x9d, 0xf8, 0x20, 0x70, 0xda, 0x46, 0x9d, 0xf8, 0x18, 0x80, - 0x02, 0x93, 0x39, 0x46, 0x9b, 0xf8, 0x00, 0x00, 0xfc, 0xf7, 0xfd, 0xfa, - 0x00, 0x28, 0x00, 0xf0, 0xb9, 0x80, 0x41, 0x46, 0x9b, 0xf8, 0x01, 0x00, - 0xfc, 0xf7, 0xf5, 0xfa, 0x00, 0x28, 0x00, 0xf0, 0xb1, 0x80, 0x9b, 0xf8, - 0x02, 0x30, 0x04, 0x2b, 0x03, 0xd0, 0x02, 0x99, 0x8b, 0x42, 0x40, 0xf0, - 0xa9, 0x80, 0x0a, 0xeb, 0x82, 0x02, 0x2b, 0x78, 0xd7, 0x78, 0x6b, 0xb1, - 0x00, 0x2f, 0x00, 0xf0, 0x9d, 0x80, 0x01, 0x2f, 0x00, 0xf0, 0x9c, 0x80, - 0x7e, 0x49, 0x7f, 0x4b, 0x02, 0x2f, 0x18, 0xbf, 0x19, 0x46, 0x7e, 0x48, - 0x0a, 0xf0, 0xae, 0xff, 0x01, 0x2f, 0x15, 0x97, 0x00, 0xf0, 0xa0, 0x80, - 0x02, 0x2f, 0x00, 0xf0, 0x9e, 0x80, 0x00, 0x2f, 0x40, 0xf0, 0xb4, 0x80, - 0x9d, 0xf8, 0x2d, 0x30, 0x01, 0x2b, 0x40, 0xf0, 0x34, 0x81, 0x0a, 0x9b, - 0x01, 0x2b, 0x40, 0xf0, 0x30, 0x81, 0x9d, 0xf8, 0x2c, 0x00, 0x01, 0x28, - 0x40, 0xf0, 0x2b, 0x81, 0x9d, 0xf8, 0x2f, 0x70, 0x01, 0x2f, 0x40, 0xf0, - 0x8e, 0x81, 0x06, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0xfb, 0xfb, 0x06, 0x46, - 0x00, 0x28, 0x40, 0xf0, 0x4e, 0x81, 0x08, 0xa9, 0x38, 0x46, 0xff, 0xf7, - 0xf3, 0xfb, 0x01, 0x28, 0x40, 0xf0, 0x44, 0x81, 0x2b, 0x78, 0x1b, 0xb1, - 0x31, 0x46, 0x66, 0x48, 0x0a, 0xf0, 0x7c, 0xff, 0x65, 0x4b, 0x08, 0x93, - 0x00, 0x23, 0x8d, 0xf8, 0x24, 0x30, 0x9d, 0xf8, 0x23, 0x30, 0x4f, 0xf0, - 0x00, 0x0b, 0x9d, 0xf8, 0x18, 0x20, 0x9d, 0xf8, 0x20, 0x70, 0x9d, 0xf8, - 0x1b, 0x80, 0x9d, 0xf8, 0x1a, 0xa0, 0x5e, 0x4e, 0x02, 0x93, 0x11, 0x46, - 0x30, 0x78, 0xfc, 0xf7, 0x8e, 0xfa, 0x00, 0x28, 0x00, 0xf0, 0x2d, 0x81, - 0x39, 0x46, 0x70, 0x78, 0xfc, 0xf7, 0x87, 0xfa, 0x00, 0x28, 0x00, 0xf0, - 0x26, 0x81, 0xb3, 0x78, 0x04, 0x2b, 0x02, 0xd0, 0x43, 0x45, 0x40, 0xf0, - 0x20, 0x81, 0xf3, 0x78, 0x04, 0x2b, 0x03, 0xd0, 0x02, 0x99, 0x8b, 0x42, - 0x40, 0xf0, 0x19, 0x81, 0x33, 0x79, 0x04, 0x2b, 0x02, 0xd0, 0x53, 0x45, - 0x40, 0xf0, 0x13, 0x81, 0x2b, 0x78, 0x73, 0xb1, 0x73, 0x79, 0x02, 0x2b, - 0x00, 0xf0, 0x09, 0x81, 0x03, 0x2b, 0x00, 0xf0, 0x08, 0x81, 0x49, 0x49, - 0x43, 0x4a, 0x04, 0x2b, 0x18, 0xbf, 0x11, 0x46, 0x47, 0x48, 0x0a, 0xf0, - 0x37, 0xff, 0x75, 0x79, 0xab, 0x1e, 0x02, 0x2b, 0x00, 0xf2, 0xf7, 0x80, - 0x02, 0x2d, 0x03, 0xd0, 0x04, 0x2d, 0x0c, 0xbf, 0x04, 0x25, 0x03, 0x25, - 0x01, 0x20, 0x0a, 0xa9, 0xff, 0xf7, 0x72, 0xf9, 0x00, 0x28, 0x00, 0xf0, - 0xfd, 0x80, 0x01, 0x28, 0x0c, 0xbf, 0x01, 0x25, 0x05, 0x25, 0xf7, 0xe0, - 0x3b, 0x4a, 0x15, 0xe7, 0x3a, 0x4a, 0x2b, 0xe7, 0x3a, 0x49, 0x68, 0xe7, - 0x3a, 0x49, 0x66, 0xe7, 0x01, 0x32, 0x0b, 0xf1, 0x04, 0x0b, 0x04, 0x2a, - 0x7f, 0xf4, 0x39, 0xaf, 0x2b, 0x78, 0x1b, 0xb1, 0x36, 0x48, 0x18, 0xf0, - 0x1d, 0xfc, 0x00, 0x23, 0x15, 0x93, 0x65, 0xe7, 0x02, 0x26, 0x08, 0xa9, - 0xf0, 0xb2, 0xff, 0xf7, 0xd9, 0xf8, 0x07, 0x46, 0x90, 0xb9, 0xdd, 0xf8, - 0x20, 0xa0, 0x50, 0x46, 0xfc, 0xf7, 0x45, 0xfa, 0x9a, 0xf8, 0x00, 0x30, - 0x02, 0x90, 0x02, 0x2b, 0x0f, 0xd0, 0x01, 0x2b, 0x31, 0xd9, 0x07, 0x26, - 0x08, 0x98, 0xff, 0xf7, 0xb3, 0xf8, 0x00, 0x2e, 0x3f, 0xf4, 0x4c, 0xaf, - 0x2b, 0x78, 0x00, 0x2b, 0x3f, 0xf4, 0x33, 0xae, 0x00, 0x21, 0x25, 0x48, - 0x2d, 0xe6, 0x4f, 0xf0, 0x03, 0x0b, 0x00, 0x26, 0xb0, 0x46, 0x02, 0x98, - 0x01, 0x23, 0xa1, 0x6e, 0x06, 0xaa, 0x01, 0xfb, 0x08, 0x01, 0x50, 0x46, - 0xfd, 0xf7, 0xac, 0xfc, 0x00, 0x28, 0x6c, 0xdb, 0x01, 0x22, 0x06, 0xa9, - 0x50, 0x46, 0xfc, 0xf7, 0xed, 0xf9, 0x00, 0x28, 0x36, 0xd0, 0x17, 0xb1, - 0x00, 0x2e, 0x08, 0xbf, 0x46, 0x46, 0x08, 0xf1, 0x01, 0x08, 0xd8, 0x45, - 0xe5, 0xd1, 0x00, 0x2f, 0x3f, 0xd0, 0x00, 0x2e, 0x08, 0xbf, 0x46, 0x46, - 0x30, 0xe0, 0x4f, 0xf4, 0x34, 0x6b, 0xda, 0xe7, 0x03, 0xd6, 0x01, 0x08, - 0x09, 0xd6, 0x01, 0x08, 0x89, 0xd7, 0x01, 0x08, 0x97, 0xd7, 0x01, 0x08, - 0xd6, 0xd7, 0x01, 0x08, 0xe4, 0xd8, 0x01, 0x08, 0x0d, 0xd6, 0x01, 0x08, - 0xde, 0xd7, 0x01, 0x08, 0x56, 0xd8, 0x01, 0x08, 0x03, 0x01, 0x03, 0x03, - 0x94, 0xde, 0x01, 0x08, 0x1f, 0xd6, 0x01, 0x08, 0x9f, 0xd8, 0x01, 0x08, - 0xfe, 0xd5, 0x01, 0x08, 0x00, 0xd8, 0x01, 0x08, 0x56, 0xd7, 0x01, 0x08, - 0xf1, 0xd7, 0x01, 0x08, 0x25, 0xd8, 0x01, 0x08, 0x84, 0xde, 0x01, 0x08, - 0x5f, 0xb3, 0x00, 0x2e, 0xc9, 0xd0, 0x2b, 0x78, 0x13, 0xb1, 0x9e, 0x48, - 0x18, 0xf0, 0xa4, 0xfb, 0x03, 0x23, 0xb6, 0xfb, 0xf3, 0xf3, 0x5a, 0x1c, - 0x03, 0xeb, 0x43, 0x03, 0xf6, 0x1a, 0x0a, 0x92, 0x01, 0x36, 0x8d, 0xf8, - 0x2c, 0x60, 0x08, 0x98, 0x01, 0x23, 0x06, 0xaa, 0x81, 0x68, 0x80, 0x39, - 0xfd, 0xf7, 0x52, 0xfc, 0x06, 0x46, 0x00, 0x28, 0x8e, 0xd1, 0x01, 0x22, - 0x06, 0xa9, 0x08, 0x98, 0xfc, 0xf7, 0x92, 0xf9, 0x10, 0xb1, 0x01, 0x23, - 0x8d, 0xf8, 0x18, 0x30, 0x9d, 0xf8, 0x18, 0x30, 0x03, 0xf0, 0x0f, 0x03, - 0x8d, 0xf8, 0x2f, 0x30, 0x78, 0xe7, 0x01, 0x27, 0x9d, 0xe7, 0x01, 0x26, - 0x74, 0xe7, 0x0a, 0xa8, 0x88, 0x4e, 0xff, 0xf7, 0x19, 0xfb, 0x9d, 0xf8, - 0x2f, 0x30, 0x86, 0xf8, 0x64, 0x30, 0x03, 0x3b, 0x01, 0x2b, 0x05, 0xd8, - 0xff, 0xf7, 0xae, 0xfa, 0x10, 0xb1, 0xff, 0x23, 0x86, 0xf8, 0x64, 0x30, - 0x9d, 0xf8, 0x2f, 0x30, 0x02, 0x3b, 0x02, 0x2b, 0x0b, 0xd8, 0xff, 0xf7, - 0x51, 0xf9, 0x40, 0xb1, 0xff, 0x23, 0x86, 0xf8, 0x64, 0x30, 0x2b, 0x78, - 0x3b, 0xb1, 0x7b, 0x48, 0x18, 0xf0, 0x5a, 0xfb, 0x03, 0xe0, 0x96, 0xf8, - 0x64, 0x30, 0xff, 0x2b, 0xf5, 0xd0, 0x0a, 0xa8, 0xff, 0xf7, 0x0c, 0xf9, - 0x01, 0x23, 0x86, 0xf8, 0x64, 0x30, 0x4f, 0xe5, 0x00, 0x28, 0x3f, 0xf4, - 0xc4, 0xae, 0xff, 0x25, 0x10, 0xe0, 0x72, 0x49, 0xfc, 0xe6, 0x72, 0x49, - 0xfa, 0xe6, 0x0b, 0xf1, 0x01, 0x0b, 0x06, 0x36, 0xbb, 0xf1, 0x03, 0x0f, - 0x7f, 0xf4, 0xc5, 0xae, 0x2b, 0x78, 0x13, 0xb1, 0x6d, 0x48, 0x18, 0xf0, - 0x39, 0xfb, 0x01, 0x25, 0x67, 0x4b, 0x83, 0xf8, 0x64, 0x50, 0x66, 0x4b, - 0x93, 0xf8, 0x64, 0x30, 0x01, 0x2b, 0x7f, 0xf4, 0x31, 0xad, 0x00, 0x20, - 0xff, 0xf7, 0x42, 0xf8, 0x05, 0x46, 0x00, 0x20, 0x0a, 0xa9, 0xff, 0xf7, - 0x61, 0xf8, 0x15, 0xb1, 0x00, 0x28, 0x3f, 0xf4, 0x25, 0xad, 0xe5, 0x6a, - 0x01, 0x20, 0x0a, 0xa9, 0xff, 0xf7, 0x58, 0xf8, 0x5f, 0x4b, 0x9d, 0x42, - 0x7f, 0xf4, 0x1c, 0xad, 0x00, 0x28, 0x7f, 0xf4, 0x19, 0xad, 0x04, 0x23, - 0x84, 0xf8, 0x64, 0x30, 0x14, 0xe5, 0x0a, 0xa9, 0xff, 0xf7, 0x4a, 0xf8, - 0x53, 0x4b, 0x08, 0xb1, 0x05, 0x22, 0x44, 0xe5, 0x9d, 0xf8, 0x2f, 0x20, - 0x83, 0xf8, 0x64, 0x20, 0xd1, 0xe7, 0x05, 0x2b, 0x7f, 0xf4, 0x14, 0xad, - 0xff, 0xf7, 0x42, 0xfa, 0x75, 0xe0, 0x00, 0x20, 0xff, 0xf7, 0x14, 0xf8, - 0x06, 0x46, 0x00, 0x20, 0x0a, 0xa9, 0xff, 0xf7, 0x33, 0xf8, 0x0e, 0xb1, - 0x00, 0x28, 0x76, 0xd0, 0x3b, 0x78, 0x3b, 0xb1, 0x4b, 0x48, 0x18, 0xf0, - 0xf1, 0xfa, 0x3b, 0x78, 0x13, 0xb1, 0x4a, 0x48, 0x18, 0xf0, 0xec, 0xfa, - 0x06, 0xa9, 0x00, 0x20, 0x00, 0x26, 0xfe, 0xf7, 0xab, 0xff, 0x08, 0xa9, - 0x01, 0x20, 0xfe, 0xf7, 0xa7, 0xff, 0xb0, 0x46, 0xd5, 0xf8, 0x28, 0x90, - 0xc1, 0x45, 0x2c, 0xd1, 0x2b, 0x6c, 0x13, 0xf0, 0x0c, 0x0f, 0x36, 0xd1, - 0x3b, 0x78, 0x1b, 0xb1, 0x31, 0x46, 0x3f, 0x48, 0x0a, 0xf0, 0xc4, 0xfd, - 0x00, 0x23, 0x06, 0x99, 0x08, 0x98, 0x1a, 0x46, 0x00, 0x96, 0xfd, 0xf7, - 0x1b, 0xfc, 0x81, 0x46, 0x90, 0xbb, 0x23, 0x6d, 0x01, 0x46, 0x08, 0x98, - 0x5a, 0x68, 0xfe, 0xf7, 0x39, 0xff, 0xd4, 0xe9, 0x14, 0x23, 0x01, 0x3b, - 0x52, 0xf8, 0x33, 0x10, 0x02, 0xeb, 0xc3, 0x00, 0x13, 0x68, 0x42, 0x68, - 0xc9, 0x1a, 0x08, 0x98, 0xfe, 0xf7, 0x2c, 0xff, 0x06, 0x98, 0xfe, 0xf7, - 0x65, 0xff, 0x08, 0x98, 0xfe, 0xf7, 0x62, 0xff, 0x18, 0xe0, 0x63, 0x6a, - 0x31, 0x46, 0x06, 0x98, 0x03, 0xeb, 0xc8, 0x03, 0x08, 0xf1, 0x01, 0x08, - 0xd3, 0xf8, 0x04, 0xa0, 0x52, 0x46, 0x56, 0x44, 0xfe, 0xf7, 0x18, 0xff, - 0xc2, 0xe7, 0x26, 0x49, 0x0a, 0xab, 0x08, 0x9a, 0x01, 0xf1, 0x40, 0x00, - 0xfe, 0xf7, 0xe2, 0xfb, 0x00, 0x28, 0x11, 0xda, 0x4f, 0xf0, 0x03, 0x09, - 0x95, 0xf8, 0x64, 0x30, 0xda, 0x1e, 0x01, 0x2a, 0x18, 0xd8, 0xff, 0xf7, - 0xd1, 0xf9, 0x81, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x9d, 0xac, 0xff, 0xf7, - 0x79, 0xf8, 0x81, 0x46, 0x80, 0xb1, 0x97, 0xe4, 0xac, 0xd1, 0x0a, 0xaa, - 0x01, 0x21, 0x18, 0x48, 0xfd, 0xf7, 0xf0, 0xfa, 0x00, 0x28, 0xa5, 0xd0, - 0xe4, 0xe7, 0x0a, 0xa8, 0xff, 0xf7, 0x1e, 0xfa, 0x81, 0x46, 0xe1, 0xe7, - 0x02, 0x2b, 0xea, 0xd0, 0x95, 0xf8, 0x64, 0x30, 0xff, 0x2b, 0x24, 0xd1, - 0x3b, 0x78, 0xfb, 0xb9, 0x0a, 0xa8, 0xff, 0xf7, 0x29, 0xf8, 0x81, 0x46, - 0x08, 0xb3, 0x4f, 0xf0, 0xff, 0x34, 0x2d, 0xe0, 0x05, 0xd8, 0x01, 0x08, - 0x14, 0x07, 0x00, 0x24, 0x4d, 0xd8, 0x01, 0x08, 0x26, 0xd6, 0x01, 0x08, - 0x2b, 0xd6, 0x01, 0x08, 0xb0, 0xd8, 0x01, 0x08, 0x3d, 0xb8, 0xf3, 0x96, - 0xc2, 0xd8, 0x01, 0x08, 0xf1, 0xd8, 0x01, 0x08, 0x0c, 0xd9, 0x01, 0x08, - 0x40, 0x07, 0x00, 0x24, 0x80, 0x07, 0x00, 0x24, 0x1e, 0x48, 0x18, 0xf0, - 0x4f, 0xfa, 0x95, 0xf8, 0x64, 0x30, 0x01, 0x2b, 0xd8, 0xd1, 0x00, 0x21, - 0x08, 0x46, 0xfe, 0xf7, 0x81, 0xff, 0x04, 0x46, 0x40, 0xb9, 0x01, 0x46, - 0x30, 0x22, 0x0a, 0xa8, 0xa1, 0x46, 0x16, 0xf0, 0x21, 0xfe, 0x2b, 0x6a, - 0x5b, 0x68, 0x04, 0x93, 0xa8, 0x6d, 0xb9, 0xf1, 0x00, 0x0f, 0x18, 0xbf, - 0x4c, 0x46, 0xfe, 0xf7, 0xe5, 0xfe, 0xe8, 0x6c, 0xfe, 0xf7, 0xe2, 0xfe, - 0x28, 0x6a, 0xfe, 0xf7, 0xdf, 0xfe, 0x3b, 0x78, 0x34, 0xb1, 0x00, 0x2b, - 0x3f, 0xf4, 0xe7, 0xab, 0x21, 0x46, 0x0b, 0x48, 0xff, 0xf7, 0xe1, 0xbb, - 0xac, 0x68, 0x04, 0x9a, 0x22, 0x44, 0x14, 0x46, 0x1b, 0xb1, 0x11, 0x46, - 0x07, 0x48, 0x0a, 0xf0, 0x0d, 0xfd, 0x13, 0xf0, 0x49, 0xfd, 0x20, 0x46, - 0x0a, 0xf0, 0xea, 0xfe, 0x00, 0x20, 0x17, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, - 0x4d, 0xd8, 0x01, 0x08, 0x4b, 0xd9, 0x01, 0x08, 0x7a, 0xd9, 0x01, 0x08, - 0x38, 0xb5, 0x43, 0x1c, 0x0c, 0x46, 0x29, 0xd0, 0x00, 0xf0, 0x0f, 0x02, - 0x1d, 0x4b, 0xc0, 0xf3, 0x03, 0x10, 0x53, 0xf8, 0x22, 0x50, 0xfc, 0xf7, - 0x31, 0xfc, 0x1b, 0x49, 0x1b, 0x4b, 0xd1, 0xf8, 0x94, 0x20, 0x9a, 0x42, - 0xfb, 0xd1, 0x05, 0xfb, 0x05, 0xf2, 0x01, 0x68, 0x02, 0xeb, 0x42, 0x03, - 0x0b, 0x40, 0xb3, 0xfb, 0xf2, 0xf3, 0x01, 0x3b, 0x01, 0x2b, 0x19, 0xd8, - 0xe3, 0x1e, 0x02, 0x2b, 0x43, 0x68, 0x0c, 0xd8, 0x2b, 0x43, 0x03, 0x2c, - 0x43, 0x60, 0x19, 0xd1, 0x01, 0x22, 0x29, 0x46, 0xfc, 0xf7, 0x9a, 0xf8, - 0x0c, 0x4b, 0x4f, 0xf4, 0x40, 0x72, 0x5a, 0x61, 0x38, 0xbd, 0x23, 0xea, - 0x05, 0x03, 0x01, 0x2c, 0x43, 0x60, 0xf1, 0xd0, 0x02, 0x2c, 0x07, 0xd0, - 0x00, 0x22, 0xee, 0xe7, 0x04, 0xf0, 0xfd, 0x03, 0x01, 0x2b, 0xe9, 0xd0, - 0x05, 0x2c, 0xf5, 0xd1, 0x02, 0x22, 0xe6, 0xe7, 0x05, 0x2c, 0xf2, 0xe7, - 0xd0, 0xde, 0x01, 0x08, 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, - 0x2d, 0xe9, 0xf8, 0x43, 0x46, 0x1c, 0x05, 0x46, 0x0c, 0x46, 0x00, 0xf0, - 0x9c, 0x80, 0x1f, 0xfa, 0x80, 0xf9, 0x55, 0x4a, 0x40, 0xf4, 0x70, 0x61, - 0xb2, 0xf9, 0x00, 0x30, 0x58, 0x1c, 0x4b, 0xd1, 0x00, 0x26, 0x52, 0x4b, - 0x09, 0xf0, 0x0f, 0x02, 0xc5, 0xf3, 0x03, 0x10, 0x53, 0xf8, 0x22, 0x70, - 0xfc, 0xf7, 0xdc, 0xfb, 0x4e, 0x49, 0x4f, 0x4b, 0xd1, 0xf8, 0x94, 0x20, - 0x9a, 0x42, 0xfb, 0xd1, 0x07, 0xfb, 0x07, 0xfc, 0xc4, 0xf3, 0x83, 0x12, - 0x83, 0x68, 0x0c, 0xeb, 0x4c, 0x0e, 0x0f, 0x2a, 0x6f, 0xea, 0x0e, 0x01, - 0x14, 0xbf, 0x02, 0xfb, 0x0c, 0xf2, 0x43, 0xea, 0x0e, 0x03, 0x4f, 0xf4, - 0x40, 0x7e, 0x1c, 0xbf, 0x0b, 0x40, 0x13, 0x43, 0x04, 0xf0, 0x07, 0x02, - 0x83, 0x60, 0x02, 0x2a, 0x3f, 0x4b, 0xc3, 0xf8, 0x14, 0xe0, 0x36, 0xd1, - 0x0e, 0xf1, 0x00, 0x4e, 0xd3, 0xf8, 0x94, 0x80, 0xf0, 0x45, 0xfb, 0xd1, - 0x19, 0xf0, 0x08, 0x0f, 0xc4, 0xf3, 0x83, 0x28, 0x5d, 0xd0, 0x3b, 0x0a, - 0xd0, 0xf8, 0x24, 0xe0, 0x5b, 0x43, 0x5b, 0x43, 0xc3, 0xeb, 0x03, 0x19, - 0x03, 0xfb, 0x08, 0xf3, 0x2e, 0xea, 0x09, 0x0e, 0x4e, 0xea, 0x03, 0x03, - 0x43, 0x62, 0x31, 0x4b, 0x4f, 0xf4, 0x40, 0x7e, 0xc3, 0xf8, 0x14, 0xe0, - 0x02, 0x23, 0x1e, 0xe0, 0x43, 0xf4, 0x70, 0x63, 0x8b, 0x42, 0x10, 0xd1, - 0x04, 0xf0, 0x03, 0x03, 0x56, 0x68, 0x03, 0x2b, 0xab, 0xd1, 0x09, 0xf4, - 0x70, 0x63, 0xb3, 0xf5, 0x70, 0x6f, 0xa6, 0xd1, 0x32, 0x46, 0x21, 0x46, - 0x28, 0x46, 0xbd, 0xe8, 0xf8, 0x43, 0xfb, 0xf7, 0xf7, 0xbf, 0x08, 0x32, - 0x98, 0xe7, 0x03, 0x2a, 0x3c, 0xd0, 0x02, 0xf1, 0xff, 0x3e, 0xde, 0xf1, - 0x00, 0x03, 0x43, 0xeb, 0x0e, 0x03, 0xdf, 0xf8, 0x78, 0x90, 0xdf, 0xf8, - 0x78, 0xe0, 0xd9, 0xf8, 0x94, 0x80, 0xf0, 0x45, 0xfb, 0xd1, 0xd0, 0xf8, - 0x00, 0xe0, 0x03, 0xfb, 0x0c, 0xfc, 0x01, 0x3a, 0x01, 0xea, 0x0e, 0x01, - 0x01, 0x2a, 0x41, 0xea, 0x0c, 0x01, 0x01, 0x60, 0x05, 0xd8, 0x43, 0x68, - 0x22, 0x07, 0x4c, 0xbf, 0x3b, 0x43, 0xbb, 0x43, 0x43, 0x60, 0xc4, 0xf3, - 0x01, 0x12, 0x39, 0x46, 0xfb, 0xf7, 0xe2, 0xff, 0x32, 0x46, 0x21, 0x46, - 0x28, 0x46, 0xfb, 0xf7, 0xc9, 0xff, 0x0c, 0x4b, 0x4f, 0xf4, 0x40, 0x72, - 0x5a, 0x61, 0xbd, 0xe8, 0xf8, 0x83, 0x0c, 0xfb, 0x0c, 0xf9, 0x03, 0x6a, - 0xc9, 0xeb, 0x09, 0x1e, 0x23, 0xea, 0x0e, 0x0e, 0x09, 0xfb, 0x08, 0xf3, - 0x4e, 0xea, 0x03, 0x03, 0x03, 0x62, 0xa2, 0xe7, 0x13, 0x46, 0xc6, 0xe7, - 0x64, 0xda, 0x01, 0x08, 0xd0, 0xde, 0x01, 0x08, 0x00, 0x64, 0x02, 0x58, - 0x00, 0x03, 0x00, 0x80, 0x10, 0xb5, 0x0a, 0xf0, 0x89, 0xfc, 0x13, 0x4b, - 0x13, 0x48, 0x14, 0x4a, 0x59, 0x6a, 0x14, 0x68, 0x03, 0x88, 0x11, 0x60, - 0x1b, 0x1b, 0x0b, 0x44, 0x01, 0x46, 0xb3, 0xf5, 0x80, 0x3f, 0x16, 0xd3, - 0x4f, 0xf4, 0x7a, 0x71, 0xb3, 0xfb, 0xf1, 0xf2, 0x01, 0xfb, 0x12, 0x33, - 0x03, 0x80, 0x06, 0xe0, 0x01, 0x32, 0xa3, 0xf5, 0x7a, 0x73, 0xb3, 0xf5, - 0x7a, 0x7f, 0xf9, 0xd2, 0x0b, 0x80, 0x08, 0x4c, 0x23, 0x68, 0x1a, 0x44, - 0x22, 0x60, 0x0a, 0xf0, 0x53, 0xfc, 0x20, 0x68, 0x10, 0xbd, 0x00, 0x22, - 0xf1, 0xe7, 0x00, 0xbf, 0x00, 0x0c, 0x00, 0x40, 0x6c, 0x0e, 0x00, 0x24, - 0x70, 0x0e, 0x00, 0x24, 0x00, 0x6c, 0x00, 0x24, 0x2d, 0xe9, 0xf8, 0x43, - 0x05, 0x46, 0x29, 0x4f, 0x3c, 0x69, 0xff, 0xf7, 0xc7, 0xff, 0x02, 0x2d, - 0x06, 0x46, 0x27, 0x4b, 0x26, 0xd1, 0xd7, 0xf8, 0x10, 0x41, 0x26, 0x4f, - 0x1c, 0x40, 0x44, 0xf0, 0x00, 0x44, 0xdf, 0xf8, 0x88, 0x80, 0x4c, 0xf2, - 0x50, 0x39, 0x04, 0x2f, 0x1d, 0xd1, 0xd8, 0xf8, 0x10, 0x00, 0xc0, 0xf3, - 0x80, 0x00, 0x70, 0xb9, 0x34, 0xf0, 0x00, 0x41, 0x22, 0xd0, 0x1e, 0x4a, - 0x00, 0x2c, 0x93, 0x69, 0x43, 0xea, 0x04, 0x03, 0x93, 0x61, 0x18, 0x4b, - 0x17, 0xdb, 0x5c, 0x61, 0x01, 0x20, 0xbd, 0xe8, 0xf8, 0x83, 0xff, 0xf7, - 0xa1, 0xff, 0x80, 0x1b, 0x48, 0x45, 0xe4, 0xd9, 0x03, 0x20, 0xf6, 0xe7, - 0x1c, 0x40, 0x04, 0x27, 0xdb, 0xe7, 0xd8, 0xf8, 0x10, 0x31, 0x27, 0xea, - 0x03, 0x03, 0x13, 0xf0, 0x04, 0x0f, 0x0c, 0xbf, 0x01, 0x20, 0x00, 0x20, - 0xdb, 0xe7, 0xc3, 0xf8, 0x14, 0x11, 0xe5, 0xe7, 0x01, 0x2d, 0x09, 0x4b, - 0x06, 0xd1, 0x1a, 0x69, 0xd1, 0x03, 0xe0, 0xd5, 0x4f, 0xf4, 0x80, 0x32, - 0x5a, 0x61, 0xdc, 0xe7, 0xd3, 0xf8, 0x10, 0x21, 0xd2, 0x03, 0xd8, 0xd5, - 0x4f, 0xf4, 0x80, 0x32, 0xc3, 0xf8, 0x14, 0x21, 0xd3, 0xe7, 0x00, 0xbf, - 0x00, 0x20, 0x00, 0x52, 0x00, 0x00, 0xee, 0x17, 0x04, 0x00, 0x00, 0x80, - 0x50, 0x0e, 0x00, 0x24, 0x38, 0xb5, 0x0b, 0x4c, 0x22, 0x68, 0xd3, 0x68, - 0x23, 0xf0, 0xa0, 0x03, 0xd3, 0x60, 0xff, 0xf7, 0x67, 0xff, 0x05, 0x46, - 0x23, 0x68, 0xdb, 0x68, 0x9b, 0x06, 0x01, 0xd5, 0x00, 0x20, 0x38, 0xbd, - 0xff, 0xf7, 0x5e, 0xff, 0x40, 0x1b, 0xb0, 0xf5, 0x7a, 0x7f, 0xf3, 0xd9, - 0x03, 0x20, 0xf6, 0xe7, 0x44, 0x05, 0x00, 0x24, 0x38, 0xb5, 0x11, 0x4c, - 0xe3, 0x68, 0x03, 0xf0, 0x07, 0x03, 0x06, 0x2b, 0x06, 0xd0, 0xe0, 0x68, - 0x00, 0xf0, 0x3f, 0x00, 0x16, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x38, 0xbd, - 0xe3, 0x68, 0x23, 0xf0, 0x3f, 0x03, 0x43, 0xf0, 0x16, 0x03, 0xe3, 0x60, - 0xff, 0xf7, 0x40, 0xff, 0x05, 0x46, 0x63, 0x68, 0x9b, 0x04, 0x01, 0xd5, - 0x00, 0x20, 0xf0, 0xe7, 0xff, 0xf7, 0x38, 0xff, 0x40, 0x1b, 0xb0, 0xf5, - 0x7a, 0x7f, 0xf4, 0xd9, 0x01, 0x20, 0xe8, 0xe7, 0x00, 0x48, 0x02, 0x58, - 0x70, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0x16, 0x46, 0x23, 0x68, 0xdb, 0x69, - 0x35, 0xea, 0x03, 0x03, 0x01, 0xd1, 0x00, 0x20, 0x17, 0xe0, 0xff, 0xf7, - 0x23, 0xff, 0x80, 0x1b, 0x23, 0x68, 0xb0, 0xf1, 0x00, 0x7f, 0x1a, 0x68, - 0x10, 0xd3, 0x22, 0xf4, 0xd0, 0x72, 0x1a, 0x60, 0x9a, 0x68, 0x22, 0xf0, - 0x01, 0x02, 0x9a, 0x60, 0x20, 0x23, 0xc4, 0xf8, 0x84, 0x30, 0xc4, 0xf8, - 0x88, 0x30, 0x00, 0x23, 0x03, 0x20, 0x84, 0xf8, 0x80, 0x30, 0x70, 0xbd, - 0x51, 0x07, 0xdd, 0xd5, 0xda, 0x69, 0x12, 0x05, 0xda, 0xd5, 0x4f, 0xf4, - 0x00, 0x62, 0x1a, 0x62, 0x1a, 0x68, 0x22, 0xf4, 0xd0, 0x72, 0x1a, 0x60, - 0x9a, 0x68, 0x22, 0xf0, 0x01, 0x02, 0x9a, 0x60, 0x20, 0x23, 0xc4, 0xf8, - 0x84, 0x30, 0xc4, 0xf8, 0x88, 0x30, 0xc4, 0xf8, 0x8c, 0x30, 0xe2, 0xe7, - 0xf8, 0xb5, 0x3e, 0x4c, 0x06, 0x46, 0x0d, 0x46, 0xa3, 0x6a, 0x03, 0xf0, - 0x03, 0x03, 0x03, 0x2b, 0x71, 0xd0, 0x23, 0x68, 0x23, 0xf0, 0x80, 0x53, - 0x23, 0x60, 0xff, 0xf7, 0xe5, 0xfe, 0x07, 0x46, 0x23, 0x68, 0x9a, 0x00, - 0x5a, 0xd4, 0xa3, 0x6a, 0x01, 0x2d, 0x32, 0x68, 0x23, 0xf0, 0x7c, 0x73, - 0x43, 0xea, 0x02, 0x53, 0xa3, 0x62, 0xb3, 0x68, 0xf2, 0x68, 0x03, 0xf1, - 0xff, 0x33, 0x02, 0xf1, 0xff, 0x32, 0x4f, 0xea, 0x43, 0x23, 0x4f, 0xea, - 0x02, 0x42, 0x9b, 0xb2, 0x02, 0xf4, 0xfe, 0x02, 0x43, 0xea, 0x02, 0x03, - 0x72, 0x68, 0x02, 0xf1, 0xff, 0x32, 0xc2, 0xf3, 0x08, 0x02, 0x43, 0xea, - 0x02, 0x03, 0x32, 0x69, 0x02, 0xf1, 0xff, 0x32, 0x4f, 0xea, 0x02, 0x62, - 0x02, 0xf0, 0xfe, 0x42, 0x43, 0xea, 0x02, 0x03, 0x23, 0x64, 0xe3, 0x6a, - 0x72, 0x69, 0x23, 0xf4, 0x40, 0x63, 0x43, 0xea, 0x02, 0x03, 0xe3, 0x62, - 0xe3, 0x6a, 0xb2, 0x69, 0x23, 0xf4, 0x00, 0x73, 0x43, 0xea, 0x02, 0x03, - 0xe3, 0x62, 0xe3, 0x6a, 0x23, 0xf4, 0x80, 0x73, 0xe3, 0x62, 0x63, 0x6c, - 0xf2, 0x69, 0x23, 0xf4, 0x7f, 0x43, 0x23, 0xf0, 0xf8, 0x03, 0x43, 0xea, - 0xc2, 0x03, 0x63, 0x64, 0xe3, 0x6a, 0x43, 0xf4, 0x80, 0x73, 0xe3, 0x62, - 0xe3, 0x6a, 0x0c, 0xbf, 0x43, 0xf4, 0x00, 0x03, 0x43, 0xf0, 0x80, 0x73, - 0xe3, 0x62, 0x0e, 0x4c, 0x23, 0x68, 0x43, 0xf0, 0x80, 0x53, 0x23, 0x60, - 0xff, 0xf7, 0x8c, 0xfe, 0x05, 0x46, 0x23, 0x68, 0x9b, 0x00, 0x08, 0xd5, - 0x00, 0x20, 0x05, 0xe0, 0xff, 0xf7, 0x84, 0xfe, 0xc0, 0x1b, 0x02, 0x28, - 0x9c, 0xd9, 0x03, 0x20, 0xf8, 0xbd, 0xff, 0xf7, 0x7d, 0xfe, 0x40, 0x1b, - 0x02, 0x28, 0xee, 0xd9, 0xf7, 0xe7, 0x01, 0x20, 0xf6, 0xe7, 0x00, 0xbf, - 0x00, 0x44, 0x02, 0x58, 0xf8, 0xb5, 0x3e, 0x4c, 0x06, 0x46, 0x0d, 0x46, - 0xa3, 0x6a, 0x03, 0xf0, 0x03, 0x03, 0x03, 0x2b, 0x71, 0xd0, 0x23, 0x68, - 0x23, 0xf0, 0x80, 0x63, 0x23, 0x60, 0xff, 0xf7, 0x65, 0xfe, 0x07, 0x46, - 0x23, 0x68, 0x1a, 0x01, 0x5a, 0xd4, 0xa3, 0x6a, 0x01, 0x2d, 0x32, 0x68, - 0x23, 0xf4, 0x7c, 0x33, 0x43, 0xea, 0x02, 0x33, 0xa3, 0x62, 0xb3, 0x68, - 0xf2, 0x68, 0x03, 0xf1, 0xff, 0x33, 0x02, 0xf1, 0xff, 0x32, 0x4f, 0xea, - 0x43, 0x23, 0x4f, 0xea, 0x02, 0x42, 0x9b, 0xb2, 0x02, 0xf4, 0xfe, 0x02, - 0x43, 0xea, 0x02, 0x03, 0x72, 0x68, 0x02, 0xf1, 0xff, 0x32, 0xc2, 0xf3, - 0x08, 0x02, 0x43, 0xea, 0x02, 0x03, 0x32, 0x69, 0x02, 0xf1, 0xff, 0x32, - 0x4f, 0xea, 0x02, 0x62, 0x02, 0xf0, 0xfe, 0x42, 0x43, 0xea, 0x02, 0x03, - 0xa3, 0x63, 0xe3, 0x6a, 0x72, 0x69, 0x23, 0xf0, 0xc0, 0x03, 0x43, 0xea, - 0x02, 0x03, 0xe3, 0x62, 0xe3, 0x6a, 0xb2, 0x69, 0x23, 0xf0, 0x20, 0x03, - 0x43, 0xea, 0x02, 0x03, 0xe3, 0x62, 0xe3, 0x6a, 0x23, 0xf0, 0x10, 0x03, - 0xe3, 0x62, 0xe3, 0x6b, 0xf2, 0x69, 0x23, 0xf4, 0x7f, 0x43, 0x23, 0xf0, - 0xf8, 0x03, 0x43, 0xea, 0xc2, 0x03, 0xe3, 0x63, 0xe3, 0x6a, 0x43, 0xf0, - 0x10, 0x03, 0xe3, 0x62, 0xe3, 0x6a, 0x0c, 0xbf, 0x43, 0xf4, 0x80, 0x13, - 0x43, 0xf4, 0x00, 0x13, 0xe3, 0x62, 0x0e, 0x4c, 0x23, 0x68, 0x43, 0xf0, - 0x80, 0x63, 0x23, 0x60, 0xff, 0xf7, 0x0c, 0xfe, 0x05, 0x46, 0x23, 0x68, - 0x1b, 0x01, 0x08, 0xd5, 0x00, 0x20, 0x05, 0xe0, 0xff, 0xf7, 0x04, 0xfe, - 0xc0, 0x1b, 0x02, 0x28, 0x9c, 0xd9, 0x03, 0x20, 0xf8, 0xbd, 0xff, 0xf7, - 0xfd, 0xfd, 0x40, 0x1b, 0x02, 0x28, 0xee, 0xd9, 0xf7, 0xe7, 0x01, 0x20, - 0xf6, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0xf8, 0xb5, 0x03, 0x68, - 0x05, 0x46, 0xdf, 0x07, 0x25, 0xd4, 0x2b, 0x68, 0x5e, 0x07, 0x1c, 0xd5, - 0xab, 0x4c, 0x23, 0x68, 0x43, 0xf4, 0x80, 0x73, 0x23, 0x60, 0xff, 0xf7, - 0xe5, 0xfd, 0x06, 0x46, 0x23, 0x68, 0xda, 0x05, 0x6a, 0xd5, 0xab, 0x68, - 0xa6, 0x4c, 0x01, 0x2b, 0x6c, 0xd1, 0x23, 0x6f, 0x43, 0xf0, 0x01, 0x03, - 0x23, 0x67, 0x41, 0xf2, 0x88, 0x37, 0xff, 0xf7, 0xd5, 0xfd, 0xa1, 0x4e, - 0x04, 0x46, 0x33, 0x6f, 0x9b, 0x07, 0x40, 0xf1, 0x84, 0x80, 0x69, 0x6a, - 0x00, 0x29, 0x40, 0xf0, 0x87, 0x80, 0x00, 0x20, 0x29, 0xe0, 0x9b, 0x4b, - 0x1a, 0x69, 0x99, 0x6a, 0x02, 0xf0, 0x38, 0x02, 0x10, 0x2a, 0x05, 0xd0, - 0x18, 0x2a, 0x0b, 0xd1, 0x01, 0xf0, 0x03, 0x02, 0x02, 0x2a, 0x07, 0xd1, - 0x1b, 0x68, 0x9c, 0x03, 0xc9, 0xd5, 0x6b, 0x68, 0x00, 0x2b, 0xc6, 0xd1, - 0x01, 0x20, 0x14, 0xe0, 0x6a, 0x68, 0xb2, 0xf5, 0x80, 0x3f, 0x11, 0xd1, - 0x1a, 0x68, 0x42, 0xf4, 0x80, 0x32, 0x1a, 0x60, 0xff, 0xf7, 0xaa, 0xfd, - 0x8b, 0x4e, 0x04, 0x46, 0x33, 0x68, 0x98, 0x03, 0xb5, 0xd4, 0xff, 0xf7, - 0xa3, 0xfd, 0x00, 0x1b, 0x64, 0x28, 0xf7, 0xd9, 0x03, 0x20, 0xf8, 0xbd, - 0x85, 0x4c, 0x23, 0x68, 0x92, 0xb9, 0x23, 0xf4, 0x80, 0x33, 0x23, 0x60, - 0x23, 0x68, 0x23, 0xf4, 0x80, 0x23, 0x23, 0x60, 0xff, 0xf7, 0x92, 0xfd, - 0x06, 0x46, 0x23, 0x68, 0x99, 0x03, 0x9e, 0xd5, 0xff, 0xf7, 0x8c, 0xfd, - 0x80, 0x1b, 0x64, 0x28, 0xf7, 0xd9, 0xe7, 0xe7, 0xb2, 0xf5, 0xa0, 0x2f, - 0x07, 0xd1, 0x43, 0xf4, 0x80, 0x23, 0x23, 0x60, 0x23, 0x68, 0x43, 0xf4, - 0x80, 0x33, 0x23, 0x60, 0xd0, 0xe7, 0x23, 0xf4, 0x80, 0x33, 0x23, 0x60, - 0x23, 0x68, 0x23, 0xf4, 0x80, 0x23, 0xf6, 0xe7, 0xff, 0xf7, 0x74, 0xfd, - 0x80, 0x1b, 0x64, 0x28, 0x8c, 0xd9, 0xcf, 0xe7, 0xab, 0xb9, 0x23, 0x6f, - 0x41, 0xf2, 0x88, 0x37, 0x23, 0xf0, 0x01, 0x03, 0x23, 0x67, 0x23, 0x6f, - 0x23, 0xf0, 0x04, 0x03, 0x23, 0x67, 0xff, 0xf7, 0x63, 0xfd, 0x06, 0x46, - 0x23, 0x6f, 0x98, 0x07, 0x8f, 0xd5, 0xff, 0xf7, 0x5d, 0xfd, 0x80, 0x1b, - 0xb8, 0x42, 0xf7, 0xd9, 0xb8, 0xe7, 0x05, 0x2b, 0x23, 0x6f, 0x03, 0xd1, - 0x43, 0xf0, 0x04, 0x03, 0x23, 0x67, 0x74, 0xe7, 0x23, 0xf0, 0x01, 0x03, - 0x23, 0x67, 0x23, 0x6f, 0x23, 0xf0, 0x04, 0x03, 0x70, 0xe7, 0xff, 0xf7, - 0x49, 0xfd, 0x00, 0x1b, 0xb8, 0x42, 0x7f, 0xf6, 0x72, 0xaf, 0xa3, 0xe7, - 0x58, 0x4c, 0x23, 0x69, 0x03, 0xf0, 0x38, 0x03, 0x18, 0x2b, 0x7a, 0xd0, - 0x23, 0x68, 0x02, 0x29, 0x23, 0xf0, 0x80, 0x73, 0x23, 0x60, 0x67, 0xd1, - 0xff, 0xf7, 0x36, 0xfd, 0x06, 0x46, 0x23, 0x68, 0x99, 0x01, 0x5b, 0xd4, - 0xa3, 0x6a, 0xaa, 0x6a, 0x23, 0xf4, 0x7c, 0x73, 0x23, 0xf0, 0x03, 0x03, - 0x13, 0x43, 0xea, 0x6a, 0x43, 0xea, 0x02, 0x13, 0xa3, 0x62, 0x6b, 0x6b, - 0xaa, 0x6b, 0x01, 0x3b, 0x01, 0x3a, 0x5b, 0x02, 0x12, 0x04, 0x9b, 0xb2, - 0x02, 0xf4, 0xfe, 0x02, 0x13, 0x43, 0x2a, 0x6b, 0x01, 0x3a, 0xc2, 0xf3, - 0x08, 0x02, 0x13, 0x43, 0xea, 0x6b, 0x01, 0x3a, 0x12, 0x06, 0x02, 0xf0, - 0xfe, 0x42, 0x13, 0x43, 0x23, 0x63, 0xe3, 0x6a, 0x23, 0xf0, 0x01, 0x03, - 0xe3, 0x62, 0x63, 0x6b, 0xaa, 0x6c, 0x23, 0xf4, 0x7f, 0x43, 0x23, 0xf0, - 0xf8, 0x03, 0x43, 0xea, 0xc2, 0x03, 0x63, 0x63, 0xe3, 0x6a, 0x2a, 0x6c, - 0x23, 0xf0, 0x0c, 0x03, 0x13, 0x43, 0xe3, 0x62, 0xe3, 0x6a, 0x6a, 0x6c, - 0x23, 0xf0, 0x02, 0x03, 0x33, 0x4d, 0x13, 0x43, 0xe3, 0x62, 0xe3, 0x6a, - 0x43, 0xf4, 0x80, 0x33, 0xe3, 0x62, 0xe3, 0x6a, 0x43, 0xf4, 0x00, 0x33, - 0xe3, 0x62, 0xe3, 0x6a, 0x43, 0xf4, 0x80, 0x23, 0xe3, 0x62, 0xe3, 0x6a, - 0x43, 0xf0, 0x01, 0x03, 0xe3, 0x62, 0x23, 0x68, 0x43, 0xf0, 0x80, 0x73, - 0x23, 0x60, 0xff, 0xf7, 0xe1, 0xfc, 0x04, 0x46, 0x2b, 0x68, 0x9a, 0x01, - 0x3f, 0xf5, 0x11, 0xaf, 0xff, 0xf7, 0xda, 0xfc, 0x00, 0x1b, 0x02, 0x28, - 0xf6, 0xd9, 0x35, 0xe7, 0xff, 0xf7, 0xd4, 0xfc, 0x80, 0x1b, 0x02, 0x28, - 0x9b, 0xd9, 0x2f, 0xe7, 0xff, 0xf7, 0xce, 0xfc, 0x05, 0x46, 0x23, 0x68, - 0x9b, 0x01, 0x7f, 0xf5, 0xfe, 0xae, 0xff, 0xf7, 0xc7, 0xfc, 0x40, 0x1b, - 0x02, 0x28, 0xf6, 0xd9, 0x22, 0xe7, 0x01, 0x29, 0xa2, 0x6a, 0x23, 0x6b, - 0x3f, 0xf4, 0x08, 0xaf, 0x02, 0xf0, 0x03, 0x01, 0xa8, 0x6a, 0x81, 0x42, - 0x7f, 0xf4, 0x02, 0xaf, 0xc2, 0xf3, 0x05, 0x12, 0xe9, 0x6a, 0x8a, 0x42, - 0x7f, 0xf4, 0xfc, 0xae, 0x2a, 0x6b, 0xc3, 0xf3, 0x08, 0x01, 0x01, 0x3a, - 0x91, 0x42, 0x7f, 0xf4, 0xf5, 0xae, 0x6a, 0x6b, 0xc3, 0xf3, 0x46, 0x21, - 0x01, 0x3a, 0x91, 0x42, 0x7f, 0xf4, 0xee, 0xae, 0xaa, 0x6b, 0xc3, 0xf3, - 0x06, 0x41, 0x01, 0x3a, 0x91, 0x42, 0x7f, 0xf4, 0xe7, 0xae, 0xea, 0x6b, - 0xc3, 0xf3, 0x06, 0x63, 0x01, 0x3a, 0x93, 0x42, 0x3f, 0xf4, 0xcb, 0xae, - 0xde, 0xe6, 0x00, 0xbf, 0x00, 0x48, 0x02, 0x58, 0x00, 0x44, 0x02, 0x58, - 0x2d, 0xe9, 0xf0, 0x41, 0xdd, 0xf8, 0x18, 0x80, 0x04, 0x46, 0x0e, 0x46, - 0x15, 0x46, 0x1f, 0x46, 0x22, 0x68, 0x93, 0x68, 0x33, 0x42, 0x14, 0xbf, - 0x01, 0x23, 0x00, 0x23, 0xab, 0x42, 0x01, 0xd1, 0x00, 0x20, 0x12, 0xe0, - 0xb8, 0xf1, 0xff, 0x3f, 0xf3, 0xd0, 0xff, 0xf7, 0x79, 0xfc, 0xc0, 0x1b, - 0x40, 0x45, 0x02, 0xd8, 0xb8, 0xf1, 0x00, 0x0f, 0xea, 0xd1, 0x04, 0x23, - 0x01, 0x20, 0x84, 0xf8, 0x41, 0x30, 0x63, 0x6c, 0x43, 0xf0, 0x01, 0x03, - 0x63, 0x64, 0xbd, 0xe8, 0xf0, 0x81, 0x2d, 0xe9, 0xf0, 0x4f, 0x05, 0x46, - 0x85, 0xb0, 0x0c, 0x46, 0xff, 0xf7, 0x62, 0xfc, 0x95, 0xf8, 0x40, 0x20, - 0x07, 0xee, 0x90, 0x0a, 0x01, 0x2a, 0x00, 0xf0, 0xe1, 0x80, 0x01, 0x22, - 0x02, 0x20, 0x85, 0xf8, 0x40, 0x20, 0x95, 0xf8, 0x41, 0x20, 0x01, 0x2a, - 0x40, 0xf0, 0xbe, 0x80, 0x00, 0x22, 0x41, 0xf2, 0x88, 0x31, 0x17, 0xee, - 0x90, 0x3a, 0xcd, 0xed, 0x03, 0x7a, 0x6a, 0x64, 0x00, 0x91, 0x20, 0x21, - 0x85, 0xf8, 0x41, 0x00, 0x28, 0x46, 0xff, 0xf7, 0xb3, 0xff, 0xdd, 0xed, - 0x03, 0x7a, 0x00, 0x28, 0x40, 0xf0, 0xaa, 0x80, 0xd4, 0xf8, 0x24, 0xc0, - 0xbc, 0xf1, 0x00, 0x0f, 0x03, 0xd0, 0xa2, 0x6a, 0x29, 0x68, 0x01, 0x3a, - 0x0a, 0x61, 0xd4, 0xf8, 0x18, 0xa0, 0xd4, 0xe9, 0x07, 0x27, 0xba, 0xf1, - 0x00, 0x0f, 0x50, 0xd0, 0x63, 0x69, 0x4c, 0xea, 0x0a, 0x0a, 0xd5, 0xf8, - 0x00, 0xe0, 0x26, 0x68, 0x4f, 0xea, 0x83, 0x4b, 0xd4, 0xf8, 0x34, 0x80, - 0xd4, 0xe9, 0x0b, 0x19, 0x67, 0xb3, 0xa3, 0x68, 0x47, 0xea, 0x0a, 0x0a, - 0x27, 0x69, 0xce, 0xf8, 0x1c, 0x30, 0xba, 0xb1, 0x32, 0x43, 0x11, 0x43, - 0xe2, 0x68, 0x41, 0xea, 0x09, 0x09, 0x49, 0xea, 0x08, 0x08, 0x48, 0xea, - 0x07, 0x07, 0x17, 0x43, 0x47, 0xea, 0x0b, 0x07, 0x47, 0xea, 0x0a, 0x07, - 0xce, 0xf8, 0x14, 0x70, 0x62, 0x68, 0xce, 0xf8, 0x18, 0x20, 0xbc, 0xf1, - 0x00, 0x0f, 0x40, 0xf0, 0x81, 0x80, 0x62, 0xe0, 0x31, 0x43, 0x41, 0xea, - 0x09, 0x09, 0x49, 0xea, 0x08, 0x08, 0x48, 0xea, 0x07, 0x07, 0x47, 0xea, - 0x0b, 0x07, 0x47, 0xea, 0x0a, 0x07, 0xce, 0xf8, 0x14, 0x70, 0xec, 0xe7, - 0x52, 0xb1, 0x42, 0xea, 0x06, 0x07, 0x0f, 0x43, 0x47, 0xea, 0x09, 0x07, - 0x47, 0xea, 0x08, 0x08, 0xe7, 0x68, 0x48, 0xea, 0x07, 0x07, 0xd7, 0xe7, - 0x46, 0xea, 0x01, 0x07, 0x47, 0xea, 0x09, 0x07, 0x47, 0xea, 0x08, 0x07, - 0x47, 0xea, 0x0b, 0x0b, 0x4b, 0xea, 0x0a, 0x07, 0xe5, 0xe7, 0x37, 0xb3, - 0xa1, 0x68, 0x4c, 0xea, 0x07, 0x07, 0xd5, 0xf8, 0x00, 0xe0, 0x26, 0x69, - 0xce, 0xf8, 0x1c, 0x10, 0x61, 0x69, 0xd4, 0xf8, 0x34, 0x80, 0x89, 0x04, - 0xd4, 0xe9, 0x0b, 0xa9, 0x6a, 0xb1, 0x32, 0x43, 0xe3, 0x68, 0x42, 0xea, - 0x0a, 0x0a, 0x4a, 0xea, 0x09, 0x09, 0x49, 0xea, 0x08, 0x08, 0x48, 0xea, - 0x03, 0x08, 0x48, 0xea, 0x01, 0x01, 0x0f, 0x43, 0xb2, 0xe7, 0x46, 0xea, - 0x0a, 0x06, 0x46, 0xea, 0x09, 0x09, 0x49, 0xea, 0x08, 0x08, 0x48, 0xea, - 0x01, 0x01, 0x0f, 0x43, 0xbd, 0xe7, 0x8a, 0xb1, 0xe1, 0x6a, 0x4c, 0xea, - 0x02, 0x02, 0x0a, 0x43, 0x21, 0x6b, 0x0a, 0x43, 0x61, 0x6b, 0x0a, 0x43, - 0xe1, 0x68, 0x0a, 0x43, 0x61, 0x69, 0x42, 0xea, 0x81, 0x42, 0x29, 0x68, - 0x4a, 0x61, 0x62, 0x68, 0x8a, 0x61, 0x9a, 0xe7, 0xbc, 0xf1, 0x00, 0x0f, - 0x10, 0xd1, 0x41, 0xf2, 0x88, 0x32, 0x17, 0xee, 0x90, 0x3a, 0x02, 0x21, - 0x28, 0x46, 0x00, 0x92, 0x01, 0x22, 0xff, 0xf7, 0x05, 0xff, 0xa8, 0xb1, - 0x00, 0x23, 0x85, 0xf8, 0x40, 0x30, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, - 0xe3, 0x6a, 0x22, 0x6b, 0x4c, 0xea, 0x03, 0x03, 0x13, 0x43, 0x62, 0x6b, - 0x13, 0x43, 0x62, 0x69, 0x43, 0xea, 0x82, 0x43, 0x2a, 0x68, 0x53, 0x61, - 0x01, 0x23, 0x85, 0xf8, 0x41, 0x30, 0xe9, 0xe7, 0x2b, 0x68, 0x02, 0x22, - 0xda, 0x60, 0xf7, 0xe7, 0x02, 0x20, 0xe6, 0xe7, 0xf0, 0xb5, 0x93, 0xb0, - 0x04, 0x46, 0x08, 0x46, 0x16, 0x46, 0x04, 0xa9, 0x1d, 0x46, 0xfb, 0xf7, - 0xff, 0xfd, 0x48, 0xb9, 0x2b, 0x68, 0x04, 0xa9, 0x20, 0x46, 0x0e, 0x93, - 0xff, 0xf7, 0xff, 0xfe, 0x07, 0x46, 0x18, 0xb1, 0x4f, 0xf0, 0xff, 0x30, - 0x13, 0xb0, 0xf0, 0xbd, 0xff, 0xf7, 0x60, 0xfb, 0x25, 0x68, 0x03, 0x46, - 0xa9, 0x69, 0x94, 0xf8, 0x40, 0x20, 0x01, 0x2a, 0xf2, 0xd0, 0x01, 0x22, - 0x84, 0xf8, 0x40, 0x20, 0x94, 0xf8, 0x41, 0x20, 0x01, 0x2a, 0xd0, 0xb2, - 0x46, 0xd1, 0x67, 0x64, 0x00, 0x2e, 0x3e, 0xd0, 0x22, 0x22, 0x84, 0xf8, - 0x41, 0x20, 0x2a, 0x69, 0x01, 0x32, 0xa2, 0x63, 0x2a, 0x69, 0x26, 0x63, - 0x41, 0xf2, 0x88, 0x36, 0x01, 0x32, 0x62, 0x63, 0x6a, 0x69, 0x22, 0xf0, - 0x40, 0x62, 0x42, 0xf0, 0x80, 0x62, 0x6a, 0x61, 0xa9, 0x61, 0xa2, 0x6b, - 0xa2, 0xb9, 0x01, 0x22, 0x02, 0x21, 0x20, 0x46, 0x00, 0x96, 0xff, 0xf7, - 0xa3, 0xfe, 0x10, 0xb9, 0x23, 0x68, 0x02, 0x22, 0xda, 0x60, 0x01, 0x23, - 0x84, 0xf8, 0x41, 0x30, 0x00, 0x23, 0xc0, 0x1a, 0x84, 0xf8, 0x40, 0x30, - 0x18, 0xbf, 0x01, 0x20, 0x40, 0x42, 0xbf, 0xe7, 0x01, 0x22, 0x06, 0x21, - 0x20, 0x46, 0x00, 0x96, 0x03, 0x93, 0xff, 0xf7, 0x8d, 0xfe, 0x00, 0x28, - 0xeb, 0xd1, 0x95, 0xf8, 0x20, 0x10, 0x22, 0x6b, 0x03, 0x9b, 0x11, 0x70, - 0x22, 0x6b, 0x01, 0x32, 0x22, 0x63, 0xa2, 0x6b, 0x01, 0x3a, 0xa2, 0x63, - 0xd3, 0xe7, 0x63, 0x6c, 0x43, 0xf0, 0x08, 0x03, 0x63, 0x64, 0xdd, 0xe7, - 0x02, 0x20, 0xdb, 0xe7, 0xf7, 0xb5, 0x00, 0x93, 0x05, 0x46, 0x90, 0xf8, - 0x94, 0x30, 0x14, 0x46, 0x01, 0x91, 0xdd, 0xe9, 0x08, 0x67, 0xf3, 0xb1, - 0xd6, 0xb1, 0x3b, 0x68, 0xdb, 0xb1, 0x0b, 0xf0, 0xeb, 0xf8, 0x23, 0x46, - 0x28, 0x46, 0xdd, 0xe9, 0x00, 0x21, 0x0a, 0xf0, 0x44, 0xff, 0x3b, 0x46, - 0x32, 0x46, 0x05, 0xf1, 0x68, 0x01, 0x28, 0x1d, 0xff, 0xf7, 0x74, 0xff, - 0x04, 0x1e, 0x28, 0x46, 0x18, 0xbf, 0x01, 0x24, 0x64, 0x42, 0x0b, 0xf0, - 0xcd, 0xf8, 0x20, 0x46, 0x03, 0xb0, 0xf0, 0xbd, 0x6f, 0xf0, 0x01, 0x04, - 0xf9, 0xe7, 0x4f, 0xf0, 0xff, 0x34, 0xf6, 0xe7, 0xf0, 0xb5, 0x93, 0xb0, - 0x04, 0x46, 0x08, 0x46, 0x16, 0x46, 0x04, 0xa9, 0x1d, 0x46, 0xfb, 0xf7, - 0x63, 0xfd, 0x48, 0xb9, 0x2b, 0x68, 0x04, 0xa9, 0x20, 0x46, 0x0e, 0x93, - 0xff, 0xf7, 0x63, 0xfe, 0x07, 0x46, 0x18, 0xb1, 0x4f, 0xf0, 0xff, 0x30, - 0x13, 0xb0, 0xf0, 0xbd, 0xff, 0xf7, 0xc4, 0xfa, 0x94, 0xf8, 0x40, 0x20, - 0x03, 0x46, 0x25, 0x68, 0x01, 0x2a, 0xf3, 0xd0, 0x01, 0x22, 0x84, 0xf8, - 0x40, 0x20, 0x94, 0xf8, 0x41, 0x20, 0x01, 0x2a, 0xd0, 0xb2, 0x43, 0xd1, - 0x67, 0x64, 0x00, 0x2e, 0x3b, 0xd0, 0x12, 0x22, 0x84, 0xf8, 0x41, 0x20, - 0x2a, 0x69, 0x01, 0x32, 0xe2, 0x62, 0x2a, 0x69, 0x66, 0x62, 0x41, 0xf2, - 0x88, 0x36, 0x01, 0x32, 0xa2, 0x62, 0x6a, 0x69, 0x22, 0xf0, 0x40, 0x62, - 0x6a, 0x61, 0xe2, 0x6a, 0xa2, 0xb9, 0x01, 0x22, 0x02, 0x21, 0x20, 0x46, - 0x00, 0x96, 0xff, 0xf7, 0x0b, 0xfe, 0x10, 0xb9, 0x23, 0x68, 0x02, 0x22, - 0xda, 0x60, 0x01, 0x23, 0x84, 0xf8, 0x41, 0x30, 0x00, 0x23, 0xc0, 0x1a, - 0x84, 0xf8, 0x40, 0x30, 0x18, 0xbf, 0x01, 0x20, 0x40, 0x42, 0xc3, 0xe7, - 0x01, 0x22, 0x04, 0x21, 0x20, 0x46, 0x00, 0x96, 0x03, 0x93, 0xff, 0xf7, - 0xf5, 0xfd, 0x00, 0x28, 0xeb, 0xd1, 0x62, 0x6a, 0x03, 0x9b, 0x12, 0x78, - 0x85, 0xf8, 0x20, 0x20, 0x62, 0x6a, 0x01, 0x32, 0x62, 0x62, 0xe2, 0x6a, - 0x01, 0x3a, 0xe2, 0x62, 0xd3, 0xe7, 0x63, 0x6c, 0x43, 0xf0, 0x08, 0x03, - 0x63, 0x64, 0xdd, 0xe7, 0x02, 0x20, 0xdb, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, - 0x1c, 0x46, 0x90, 0xb0, 0x90, 0xf8, 0x94, 0x30, 0x05, 0x46, 0xdd, 0xf8, - 0x68, 0x90, 0xdd, 0xe9, 0x18, 0xa8, 0xcd, 0xe9, 0x00, 0x21, 0x63, 0xb3, - 0x0b, 0xf0, 0x52, 0xf8, 0x4f, 0xf0, 0xff, 0x33, 0x28, 0x46, 0x2e, 0x1d, - 0x05, 0xf1, 0x68, 0x07, 0xdd, 0xe9, 0x00, 0x21, 0x0a, 0xf0, 0xa7, 0xfe, - 0x14, 0xb1, 0xba, 0xf1, 0x00, 0x0f, 0x23, 0xd1, 0xb8, 0xf1, 0x00, 0x0f, - 0x02, 0xd0, 0xb9, 0xf1, 0x00, 0x0f, 0x19, 0xd1, 0x02, 0xa9, 0x38, 0x46, - 0xfb, 0xf7, 0xd8, 0xfc, 0x04, 0x46, 0x38, 0xb9, 0x01, 0x23, 0x02, 0xa9, - 0xcd, 0xe9, 0x0b, 0x03, 0x30, 0x46, 0xff, 0xf7, 0xd6, 0xfd, 0x08, 0xb1, - 0x4f, 0xf0, 0xff, 0x34, 0x28, 0x46, 0x0b, 0xf0, 0x21, 0xf8, 0x20, 0x46, - 0x10, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x4f, 0xf0, 0xff, 0x34, 0xf8, 0xe7, - 0x9c, 0xb1, 0xba, 0xf1, 0x00, 0x0f, 0x10, 0xd0, 0x22, 0x46, 0x02, 0xab, - 0x39, 0x46, 0x30, 0x46, 0xcd, 0xf8, 0x08, 0xa0, 0xff, 0xf7, 0x4a, 0xff, - 0x04, 0x46, 0x00, 0x28, 0xe4, 0xd1, 0xb8, 0xf1, 0x00, 0x0f, 0xe3, 0xd0, - 0xb9, 0xf1, 0x00, 0x0f, 0xe0, 0xd0, 0x02, 0xab, 0x42, 0x46, 0x39, 0x46, - 0x30, 0x46, 0xcd, 0xf8, 0x08, 0x90, 0xff, 0xf7, 0x9d, 0xfe, 0x04, 0x1e, - 0x18, 0xbf, 0x01, 0x24, 0x64, 0x42, 0xd3, 0xe7, 0x70, 0xb5, 0x0e, 0x46, - 0x04, 0x46, 0x08, 0x09, 0xfb, 0xf7, 0x44, 0xfd, 0x4f, 0xf4, 0x70, 0x71, - 0x05, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x48, 0xf9, 0x23, 0x8a, 0x0a, 0x4a, - 0x06, 0xf0, 0x0f, 0x06, 0x03, 0xf0, 0x0f, 0x03, 0x01, 0x21, 0x65, 0x61, - 0x52, 0xf8, 0x23, 0x30, 0x01, 0xfa, 0x06, 0xf6, 0xa3, 0x61, 0x05, 0xf1, - 0x10, 0x03, 0x18, 0x35, 0x26, 0x60, 0x63, 0x60, 0xc4, 0xe9, 0x02, 0x55, - 0x70, 0xbd, 0x00, 0xbf, 0xd0, 0xde, 0x01, 0x08, 0x10, 0xb5, 0x0c, 0x4b, - 0x0c, 0x4c, 0xd4, 0xf8, 0x94, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0xd0, 0xe9, - 0x05, 0x42, 0x52, 0x43, 0x02, 0xeb, 0x42, 0x03, 0xdb, 0x43, 0x39, 0xb9, - 0x22, 0x68, 0x13, 0x40, 0x23, 0x60, 0x4f, 0xf4, 0x40, 0x72, 0x04, 0x4b, - 0x5a, 0x61, 0x10, 0xbd, 0x21, 0x68, 0x0b, 0x40, 0x13, 0x43, 0xf5, 0xe7, - 0x00, 0x03, 0x00, 0x80, 0x00, 0x64, 0x02, 0x58, 0x03, 0x4b, 0xd9, 0x68, - 0x1a, 0x68, 0x22, 0xea, 0x01, 0x02, 0x1a, 0x60, 0x59, 0x60, 0x70, 0x47, - 0x00, 0x65, 0x02, 0x58, 0x44, 0x4a, 0x13, 0x69, 0x11, 0x46, 0x03, 0xf0, - 0x38, 0x03, 0x10, 0x2b, 0x30, 0xb5, 0x7c, 0xd0, 0x05, 0xd8, 0x00, 0x2b, - 0x55, 0xd0, 0x08, 0x2b, 0x79, 0xd0, 0x0a, 0x68, 0x52, 0xe0, 0x18, 0x2b, - 0xfb, 0xd1, 0x90, 0x6a, 0x95, 0x6a, 0xd1, 0x6a, 0x15, 0xf4, 0x7c, 0x7f, - 0xc5, 0xf3, 0x05, 0x13, 0x54, 0x6b, 0x3b, 0xd0, 0x07, 0xee, 0x90, 0x3a, - 0xc4, 0xf3, 0xcc, 0x04, 0x01, 0xf0, 0x01, 0x03, 0x00, 0xf0, 0x03, 0x00, - 0xf8, 0xee, 0xe7, 0x6a, 0x63, 0x43, 0x01, 0x28, 0xf7, 0xee, 0x00, 0x5a, - 0x07, 0xee, 0x90, 0x3a, 0xfa, 0xee, 0xe9, 0x7a, 0x39, 0xd0, 0x02, 0x28, - 0x47, 0xd0, 0x11, 0x68, 0x2d, 0x4b, 0xc1, 0xf3, 0xc1, 0x01, 0x12, 0x6b, - 0xcb, 0x40, 0xc2, 0xf3, 0x08, 0x02, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, - 0xc7, 0x6a, 0x86, 0xee, 0x26, 0x7a, 0x06, 0xee, 0x90, 0x2a, 0xf8, 0xee, - 0xe6, 0x6a, 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, 0xa5, 0x7a, 0x22, 0x4b, - 0x67, 0xee, 0x87, 0x7a, 0x1b, 0x6b, 0xc3, 0xf3, 0x46, 0x23, 0x01, 0x33, - 0x07, 0xee, 0x10, 0x3a, 0xf8, 0xee, 0xc7, 0x6a, 0x87, 0xee, 0xa6, 0x7a, - 0xfc, 0xee, 0xc7, 0x7a, 0x17, 0xee, 0x90, 0x3a, 0x19, 0x49, 0x8a, 0x69, - 0x89, 0x69, 0xc2, 0xf3, 0x03, 0x22, 0x19, 0x49, 0x8a, 0x5c, 0xd3, 0x40, - 0x18, 0x4a, 0x13, 0x60, 0x30, 0xbd, 0x12, 0x68, 0xc2, 0xf3, 0xc1, 0x02, - 0x13, 0x4b, 0xd3, 0x40, 0xee, 0xe7, 0x13, 0x6b, 0x9f, 0xed, 0x14, 0x6a, - 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, - 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, 0xa5, 0x7a, 0x86, 0xee, 0x26, 0x7a, - 0xcd, 0xe7, 0x13, 0x6b, 0x9f, 0xed, 0x0d, 0x6a, 0xc3, 0xf3, 0x08, 0x03, - 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, - 0x77, 0xee, 0xa5, 0x7a, 0xee, 0xe7, 0x08, 0x4b, 0xce, 0xe7, 0x08, 0x4b, - 0xcc, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0x00, 0x90, 0xd0, 0x03, - 0x54, 0xda, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00, 0x24, 0x74, 0x4a, - 0x20, 0xbc, 0xbe, 0x4b, 0x40, 0x78, 0x7d, 0x01, 0x00, 0x09, 0x3d, 0x00, - 0x2b, 0x4b, 0xd3, 0xf8, 0x88, 0x20, 0x42, 0xf4, 0x70, 0x02, 0xc3, 0xf8, - 0x88, 0x20, 0x1a, 0x69, 0x42, 0xf0, 0x10, 0x02, 0x1a, 0x61, 0x27, 0x4a, - 0x13, 0x68, 0x03, 0xf0, 0x0f, 0x03, 0x06, 0x2b, 0x05, 0xd8, 0x13, 0x68, - 0x23, 0xf0, 0x0f, 0x03, 0x43, 0xf0, 0x07, 0x03, 0x13, 0x60, 0x22, 0x4b, - 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x00, 0x22, 0x1a, 0x61, - 0x1f, 0x4a, 0x19, 0x68, 0x0a, 0x40, 0x1c, 0x49, 0x1a, 0x60, 0x0a, 0x68, - 0x12, 0x07, 0x05, 0xd5, 0x0a, 0x68, 0x22, 0xf0, 0x0f, 0x02, 0x42, 0xf0, - 0x07, 0x02, 0x0a, 0x60, 0x00, 0x22, 0x19, 0x49, 0x9a, 0x61, 0xda, 0x61, - 0x1a, 0x62, 0x99, 0x62, 0x17, 0x49, 0xd9, 0x62, 0x17, 0x49, 0x19, 0x63, - 0x5a, 0x63, 0x99, 0x63, 0xda, 0x63, 0x19, 0x64, 0x5a, 0x64, 0x19, 0x68, - 0x21, 0xf4, 0x80, 0x21, 0x19, 0x60, 0x1a, 0x66, 0x12, 0x4a, 0x53, 0x6a, - 0x43, 0xf4, 0x80, 0x43, 0x53, 0x62, 0x11, 0x4b, 0x1b, 0x68, 0x1b, 0x0c, - 0x1b, 0x04, 0xb3, 0xf1, 0x00, 0x5f, 0x02, 0xd2, 0x0e, 0x4b, 0x01, 0x22, - 0x1a, 0x60, 0x0e, 0x4b, 0x43, 0xf2, 0xd2, 0x02, 0x1a, 0x60, 0x0d, 0x4a, - 0x01, 0x4b, 0x9a, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x00, 0xed, 0x00, 0xe0, - 0x00, 0x20, 0x00, 0x52, 0x00, 0x44, 0x02, 0x58, 0x7f, 0xed, 0xf6, 0xea, - 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0xff, 0x01, 0x80, 0x02, 0x01, 0x01, - 0xc0, 0x00, 0x00, 0x58, 0x00, 0x10, 0x00, 0x5c, 0x08, 0x81, 0x00, 0x51, - 0x00, 0x40, 0x00, 0x52, 0x00, 0x00, 0x00, 0x08, 0x0a, 0x4b, 0x01, 0x3b, - 0x0f, 0xd0, 0x02, 0x69, 0x00, 0x2a, 0xfa, 0xda, 0x03, 0x69, 0x07, 0x4a, - 0x43, 0xf0, 0x01, 0x03, 0x03, 0x61, 0x01, 0x3a, 0x05, 0xd0, 0x03, 0x69, - 0x13, 0xf0, 0x01, 0x03, 0xf9, 0xd1, 0x18, 0x46, 0x70, 0x47, 0x03, 0x20, - 0x70, 0x47, 0x00, 0xbf, 0x41, 0x0d, 0x03, 0x00, 0x30, 0xb5, 0x05, 0x6c, - 0x00, 0xf5, 0x30, 0x63, 0x0f, 0x4c, 0xa5, 0x42, 0x03, 0xd9, 0xd0, 0xf8, - 0x00, 0x4b, 0x00, 0x2c, 0x16, 0xdb, 0x00, 0x24, 0x01, 0x29, 0x1c, 0x61, - 0x1c, 0x69, 0x44, 0xf4, 0x00, 0x24, 0x1c, 0x61, 0x1c, 0x69, 0x44, 0xf0, - 0x18, 0x04, 0x1c, 0x61, 0x1c, 0x69, 0x44, 0xf0, 0xc0, 0x44, 0x1c, 0x61, - 0x06, 0xd1, 0x5a, 0x61, 0xd0, 0xf8, 0x00, 0x3b, 0x43, 0xf0, 0x80, 0x23, - 0xc0, 0xf8, 0x00, 0x3b, 0x00, 0x20, 0x30, 0xbd, 0x0a, 0x30, 0x54, 0x4f, - 0xd0, 0xf8, 0x00, 0x3e, 0x23, 0xf0, 0x03, 0x03, 0xc0, 0xf8, 0x00, 0x3e, - 0xd0, 0xf8, 0x04, 0x38, 0x43, 0xf0, 0x02, 0x03, 0xc0, 0xf8, 0x04, 0x38, - 0x00, 0x20, 0x70, 0x47, 0x70, 0xb5, 0x00, 0x23, 0x94, 0x08, 0x00, 0xf5, - 0x80, 0x55, 0x02, 0xf0, 0x03, 0x02, 0xa3, 0x42, 0x14, 0xd3, 0x01, 0xeb, - 0x84, 0x01, 0x7a, 0xb1, 0x00, 0xf5, 0x80, 0x50, 0x00, 0x23, 0x04, 0x68, - 0xd8, 0x00, 0x24, 0xfa, 0x00, 0xf0, 0xc8, 0x54, 0x01, 0x33, 0x98, 0xb2, - 0x82, 0x42, 0xf7, 0xd1, 0x01, 0x3a, 0x92, 0xb2, 0x01, 0x32, 0x11, 0x44, - 0x08, 0x46, 0x70, 0xbd, 0x2e, 0x68, 0x41, 0xf8, 0x23, 0x60, 0x01, 0x33, - 0xe3, 0xe7, 0x70, 0xb5, 0x0e, 0x78, 0x01, 0x25, 0x00, 0xf5, 0x00, 0x62, - 0x06, 0xf0, 0x0f, 0x03, 0x74, 0x01, 0x9d, 0x40, 0x4b, 0x78, 0x01, 0x2b, - 0xd3, 0x69, 0x17, 0xd1, 0x1d, 0x43, 0x00, 0xf5, 0x10, 0x60, 0xd5, 0x61, - 0x03, 0x59, 0x1a, 0x04, 0x0e, 0xd4, 0x8a, 0x68, 0x05, 0x59, 0xc2, 0xf3, - 0x0a, 0x03, 0xca, 0x78, 0x2b, 0x43, 0x43, 0xea, 0x82, 0x43, 0x43, 0xea, - 0x86, 0x53, 0x43, 0xf0, 0x80, 0x53, 0x43, 0xf4, 0x00, 0x43, 0x03, 0x51, - 0x00, 0x20, 0x70, 0xbd, 0x43, 0xea, 0x05, 0x45, 0x00, 0xf5, 0x30, 0x60, - 0xd5, 0x61, 0x03, 0x59, 0x1b, 0x04, 0xf5, 0xd4, 0x8b, 0x68, 0x02, 0x59, - 0xc3, 0xf3, 0x0a, 0x03, 0x13, 0x43, 0xca, 0x78, 0x43, 0xea, 0x82, 0x43, - 0xe7, 0xe7, 0x00, 0x00, 0x11, 0x4b, 0x4f, 0xf4, 0xfa, 0x51, 0x02, 0x46, - 0x1b, 0x68, 0xb3, 0xfb, 0xf1, 0xf1, 0x41, 0xf2, 0x88, 0x33, 0x4b, 0x43, - 0x01, 0x3b, 0x13, 0xd3, 0x51, 0x6b, 0x11, 0xf0, 0x45, 0x0f, 0xf9, 0xd0, - 0x89, 0x04, 0xf7, 0xd4, 0x53, 0x6b, 0x5b, 0x07, 0x02, 0xd5, 0x04, 0x20, - 0x90, 0x63, 0x70, 0x47, 0x50, 0x6b, 0x10, 0xf0, 0x01, 0x00, 0x14, 0xbf, - 0x01, 0x23, 0x04, 0x4b, 0x93, 0x63, 0x70, 0x47, 0x4f, 0xf0, 0x00, 0x40, - 0x70, 0x47, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x24, 0xc5, 0x00, 0x20, 0x00, - 0x45, 0x4b, 0x10, 0xb5, 0x1b, 0x68, 0x04, 0x46, 0x4f, 0xf4, 0xfa, 0x50, - 0xb3, 0xfb, 0xf0, 0xf3, 0x42, 0x48, 0x5a, 0x43, 0x00, 0x2a, 0x48, 0xd0, - 0x63, 0x6b, 0x03, 0x42, 0x07, 0xd0, 0x9b, 0x04, 0x05, 0xd4, 0x63, 0x6b, - 0x58, 0x07, 0x04, 0xd5, 0x04, 0x20, 0xa0, 0x63, 0x10, 0xbd, 0x01, 0x3a, - 0xf0, 0xe7, 0x60, 0x6b, 0x10, 0xf0, 0x01, 0x00, 0x02, 0xd0, 0x01, 0x23, - 0xa3, 0x63, 0xf5, 0xe7, 0x37, 0x4b, 0xa3, 0x63, 0x23, 0x69, 0xdb, 0xb2, - 0x99, 0x42, 0x31, 0xd1, 0x63, 0x69, 0x35, 0x48, 0x18, 0x40, 0x00, 0x28, - 0xea, 0xd0, 0x00, 0x2b, 0x2c, 0xdb, 0x5a, 0x00, 0x2d, 0xd4, 0x9c, 0x00, - 0x2d, 0xd4, 0xd9, 0x00, 0x2d, 0xd4, 0x1a, 0x01, 0x2e, 0xd4, 0x5c, 0x01, - 0x2f, 0xd4, 0xd9, 0x01, 0x30, 0xd4, 0x1a, 0x02, 0x31, 0xd4, 0x5c, 0x02, - 0x32, 0xd4, 0x99, 0x02, 0x33, 0xd4, 0xda, 0x02, 0x34, 0xd4, 0x5c, 0x03, - 0x35, 0xd4, 0x99, 0x03, 0x36, 0xd4, 0xda, 0x03, 0x37, 0xd4, 0x1c, 0x04, - 0x38, 0xd4, 0x59, 0x04, 0x39, 0xd4, 0x9a, 0x04, 0x3a, 0xd4, 0x13, 0xf0, - 0x08, 0x0f, 0x14, 0xbf, 0x4f, 0xf4, 0x00, 0x00, 0x4f, 0xf4, 0x80, 0x30, - 0xc0, 0xe7, 0x4f, 0xf0, 0x00, 0x40, 0xbd, 0xe7, 0x01, 0x20, 0xbb, 0xe7, - 0x4f, 0xf0, 0x00, 0x70, 0xb8, 0xe7, 0x40, 0x20, 0xb6, 0xe7, 0x80, 0x20, - 0xb4, 0xe7, 0x4f, 0xf4, 0x80, 0x70, 0xb1, 0xe7, 0x4f, 0xf4, 0x00, 0x70, - 0xae, 0xe7, 0x4f, 0xf4, 0x80, 0x60, 0xab, 0xe7, 0x4f, 0xf4, 0x00, 0x60, - 0xa8, 0xe7, 0x4f, 0xf4, 0x80, 0x50, 0xa5, 0xe7, 0x4f, 0xf4, 0x00, 0x50, - 0xa2, 0xe7, 0x4f, 0xf4, 0x80, 0x40, 0x9f, 0xe7, 0x4f, 0xf4, 0x00, 0x40, - 0x9c, 0xe7, 0x4f, 0xf4, 0x00, 0x30, 0x99, 0xe7, 0x4f, 0xf4, 0x80, 0x20, - 0x96, 0xe7, 0x4f, 0xf4, 0x00, 0x20, 0x93, 0xe7, 0x4f, 0xf4, 0x80, 0x10, - 0x90, 0xe7, 0x4f, 0xf4, 0x00, 0x10, 0x8d, 0xe7, 0x4f, 0xf4, 0x80, 0x00, - 0x8a, 0xe7, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x24, 0x45, 0x00, 0x20, 0x00, - 0xc5, 0x00, 0x20, 0x00, 0x08, 0xe0, 0xff, 0xfd, 0xf0, 0xb5, 0x12, 0x4d, - 0x87, 0xb0, 0x0d, 0x27, 0x00, 0x24, 0x6b, 0x6c, 0x01, 0xa9, 0x2e, 0x68, - 0x1b, 0x04, 0x30, 0x46, 0x01, 0x93, 0x4f, 0xf4, 0x80, 0x73, 0xcd, 0xe9, - 0x02, 0x73, 0x4f, 0xf4, 0x80, 0x53, 0xcd, 0xe9, 0x04, 0x43, 0xfd, 0xf7, - 0x95, 0xf8, 0x41, 0xf2, 0x88, 0x32, 0x39, 0x46, 0x30, 0x46, 0xff, 0xf7, - 0x51, 0xff, 0x28, 0xb9, 0x2b, 0x68, 0x5c, 0x69, 0xc4, 0xf3, 0x43, 0x20, - 0x07, 0xb0, 0xf0, 0xbd, 0x6b, 0x6b, 0x18, 0x43, 0x68, 0x63, 0xf7, 0xe7, - 0x04, 0x6c, 0x00, 0x24, 0x30, 0xb5, 0x4f, 0xf4, 0x80, 0x73, 0x87, 0xb0, - 0x06, 0x25, 0x00, 0x22, 0x04, 0x46, 0x01, 0x91, 0x01, 0xa9, 0xcd, 0xe9, - 0x02, 0x53, 0x4f, 0xf4, 0x80, 0x53, 0xcd, 0xe9, 0x04, 0x23, 0xfd, 0xf7, - 0x71, 0xf8, 0x41, 0xf2, 0x88, 0x32, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, - 0x2d, 0xff, 0x07, 0xb0, 0x30, 0xbd, 0x30, 0xb5, 0x4f, 0xf4, 0x80, 0x73, - 0x87, 0xb0, 0x37, 0x25, 0x00, 0x22, 0x04, 0x46, 0x01, 0x91, 0x01, 0xa9, - 0xcd, 0xe9, 0x02, 0x53, 0x4f, 0xf4, 0x80, 0x53, 0xcd, 0xe9, 0x04, 0x23, - 0xfd, 0xf7, 0x58, 0xf8, 0x41, 0xf2, 0x88, 0x32, 0x29, 0x46, 0x20, 0x46, - 0xff, 0xf7, 0x14, 0xff, 0x07, 0xb0, 0x30, 0xbd, 0x10, 0xb5, 0x00, 0x23, - 0x86, 0xb0, 0x04, 0x46, 0x01, 0xa9, 0xcd, 0xe9, 0x01, 0x33, 0xcd, 0xe9, - 0x03, 0x33, 0x4f, 0xf4, 0x80, 0x53, 0x05, 0x93, 0xfd, 0xf7, 0x42, 0xf8, - 0x0a, 0x4b, 0x4f, 0xf4, 0xfa, 0x52, 0x1b, 0x68, 0xb3, 0xfb, 0xf2, 0xf2, - 0x41, 0xf2, 0x88, 0x33, 0x53, 0x43, 0x01, 0x3b, 0x07, 0xd3, 0x62, 0x6b, - 0x12, 0x06, 0xfa, 0xd5, 0x04, 0x4b, 0x00, 0x20, 0xa3, 0x63, 0x06, 0xb0, - 0x10, 0xbd, 0x4f, 0xf0, 0x00, 0x40, 0xfa, 0xe7, 0x00, 0x00, 0x00, 0x24, - 0xc5, 0x00, 0x20, 0x00, 0x30, 0xb5, 0x00, 0x23, 0x87, 0xb0, 0x0c, 0x25, - 0x4f, 0xf4, 0x80, 0x72, 0x04, 0x46, 0x01, 0xa9, 0xcd, 0xe9, 0x03, 0x23, - 0xcd, 0xe9, 0x01, 0x35, 0x4f, 0xf4, 0x80, 0x53, 0x05, 0x93, 0xc3, 0x68, - 0x43, 0xf0, 0x80, 0x03, 0xc3, 0x60, 0xc3, 0x68, 0x23, 0xf0, 0x40, 0x03, - 0xc3, 0x60, 0xfd, 0xf7, 0x0f, 0xf8, 0x07, 0x4a, 0x29, 0x46, 0x20, 0x46, - 0xff, 0xf7, 0xcc, 0xfe, 0xe3, 0x68, 0xb0, 0xf1, 0x00, 0x7f, 0x08, 0xbf, - 0x00, 0x20, 0x23, 0xf0, 0x80, 0x03, 0xe3, 0x60, 0x07, 0xb0, 0x30, 0xbd, - 0x00, 0xe1, 0xf5, 0x05, 0x30, 0xb5, 0x4f, 0xf4, 0x80, 0x73, 0x87, 0xb0, - 0x10, 0x25, 0x00, 0x22, 0x04, 0x46, 0x01, 0x91, 0x01, 0xa9, 0xcd, 0xe9, - 0x02, 0x53, 0x4f, 0xf4, 0x80, 0x53, 0xcd, 0xe9, 0x04, 0x23, 0xfc, 0xf7, - 0xed, 0xff, 0x41, 0xf2, 0x88, 0x32, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, - 0xa9, 0xfe, 0x07, 0xb0, 0x30, 0xbd, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x47, - 0x36, 0x4d, 0x86, 0xb0, 0x07, 0x46, 0xfe, 0xf7, 0x8b, 0xfe, 0x08, 0x21, - 0x80, 0x46, 0x28, 0x68, 0xff, 0xf7, 0xda, 0xff, 0x04, 0x46, 0x00, 0x28, - 0x37, 0xd1, 0x69, 0x6c, 0x28, 0x68, 0x09, 0x04, 0xff, 0xf7, 0x67, 0xff, - 0x04, 0x46, 0x80, 0xbb, 0x2e, 0x68, 0x4f, 0xf0, 0xff, 0x33, 0x4f, 0xf0, - 0x33, 0x09, 0x01, 0xa9, 0x73, 0x62, 0x08, 0x23, 0x01, 0x90, 0xb3, 0x62, - 0xf3, 0x6a, 0x04, 0x90, 0x30, 0x46, 0x23, 0xf0, 0xff, 0x03, 0x43, 0xf0, - 0x33, 0x03, 0xf3, 0x62, 0x4f, 0xf4, 0x80, 0x73, 0xcd, 0xe9, 0x02, 0x93, - 0x4f, 0xf4, 0x80, 0x53, 0x05, 0x93, 0xfc, 0xf7, 0xb3, 0xff, 0x41, 0xf2, - 0x88, 0x32, 0x49, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x6f, 0xfe, 0x04, 0x46, - 0x68, 0xb9, 0x81, 0x46, 0x06, 0x46, 0x40, 0xf2, 0x2a, 0x5a, 0x2b, 0x68, - 0x5a, 0x6b, 0x12, 0xea, 0x0a, 0x0f, 0x5a, 0x6b, 0x07, 0xd0, 0x11, 0x07, - 0x16, 0xd5, 0x08, 0x24, 0x9c, 0x63, 0x20, 0x46, 0x06, 0xb0, 0xbd, 0xe8, - 0xf0, 0x87, 0x10, 0x03, 0x05, 0xd4, 0x24, 0xb9, 0xd3, 0xf8, 0x80, 0x60, - 0x01, 0x24, 0xd3, 0xf8, 0x80, 0x90, 0xfe, 0xf7, 0x3d, 0xfe, 0xa0, 0xeb, - 0x08, 0x00, 0x01, 0x30, 0xe3, 0xd1, 0x4f, 0xf0, 0x00, 0x44, 0xea, 0xe7, - 0x5a, 0x6b, 0x92, 0x07, 0x01, 0xd5, 0x02, 0x24, 0xe4, 0xe7, 0x5c, 0x6b, - 0x14, 0xf0, 0x20, 0x04, 0x01, 0xd0, 0x20, 0x24, 0xde, 0xe7, 0x05, 0x4a, - 0x36, 0xba, 0x9a, 0x63, 0x99, 0xfa, 0x89, 0xf3, 0x7e, 0x60, 0x3b, 0x60, - 0xd7, 0xe7, 0x00, 0xbf, 0x04, 0x6c, 0x00, 0x24, 0x3a, 0x0f, 0x00, 0x18, - 0x2d, 0xe9, 0xf8, 0x43, 0x06, 0x68, 0x05, 0x46, 0x16, 0xf0, 0x00, 0x76, - 0x07, 0xd0, 0x83, 0x6c, 0x20, 0x2b, 0x1f, 0xd0, 0x0d, 0xd8, 0x73, 0xb1, - 0x10, 0x2b, 0x15, 0xd0, 0x01, 0x26, 0x2b, 0x68, 0xd9, 0x01, 0x73, 0xd5, - 0x6b, 0x6c, 0x03, 0x2b, 0x6f, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, 0x20, 0x1b, - 0x22, 0x20, 0x30, 0x2b, 0xf2, 0xd1, 0x73, 0x4a, 0x00, 0x26, 0xa9, 0x6c, - 0xd3, 0x6c, 0x23, 0xf0, 0x30, 0x03, 0x0b, 0x43, 0xd3, 0x64, 0xea, 0xe7, - 0x6e, 0x4a, 0xd3, 0x6a, 0x43, 0xf4, 0x00, 0x33, 0xd3, 0x62, 0xf0, 0xe7, - 0x02, 0x21, 0x04, 0x30, 0xfe, 0xf7, 0x7c, 0xff, 0x06, 0x46, 0x00, 0x28, - 0xdd, 0xd1, 0xe8, 0xe7, 0x67, 0x4a, 0xd3, 0x6a, 0x43, 0xf4, 0x00, 0x33, - 0xd3, 0x62, 0x34, 0x46, 0x04, 0xe0, 0x02, 0x21, 0x28, 0x1d, 0xfe, 0xf7, - 0x6d, 0xff, 0x04, 0x46, 0x00, 0x2c, 0x47, 0xd1, 0x60, 0x4a, 0x69, 0x6c, - 0xd3, 0x6c, 0x23, 0xf0, 0x03, 0x03, 0x0b, 0x43, 0xd3, 0x64, 0x2b, 0x68, - 0x5a, 0x02, 0x47, 0xd5, 0x5c, 0x4f, 0x3b, 0x68, 0x43, 0xf4, 0x80, 0x73, - 0x3b, 0x60, 0xfe, 0xf7, 0xcd, 0xfd, 0x80, 0x46, 0x3b, 0x68, 0xdb, 0x05, - 0x34, 0xd5, 0x00, 0x2c, 0x66, 0xd1, 0x55, 0x4b, 0xd5, 0xf8, 0xb4, 0x00, - 0x1a, 0x6f, 0x42, 0x40, 0x12, 0xf4, 0x40, 0x7f, 0x0b, 0xd0, 0x1a, 0x6f, - 0x19, 0x6f, 0x22, 0xf4, 0x40, 0x72, 0x41, 0xf4, 0x80, 0x31, 0x19, 0x67, - 0x19, 0x6f, 0x21, 0xf4, 0x80, 0x31, 0x19, 0x67, 0x1a, 0x67, 0xb0, 0xf5, - 0x80, 0x7f, 0x3a, 0xd0, 0xd5, 0xf8, 0xb4, 0x30, 0x48, 0x49, 0x03, 0xf4, - 0x40, 0x72, 0xb2, 0xf5, 0x40, 0x7f, 0x43, 0xd1, 0x08, 0x69, 0x47, 0x4a, - 0x20, 0xf4, 0x7c, 0x50, 0x02, 0xea, 0x13, 0x12, 0x02, 0x43, 0x0a, 0x61, - 0xc3, 0xf3, 0x0b, 0x03, 0x40, 0x4a, 0x11, 0x6f, 0x0b, 0x43, 0x13, 0x67, - 0x0c, 0xe0, 0x01, 0x26, 0x34, 0x46, 0xbe, 0xe7, 0x26, 0x46, 0xbc, 0xe7, - 0xfe, 0xf7, 0x92, 0xfd, 0xa0, 0xeb, 0x08, 0x00, 0x64, 0x28, 0xc1, 0xd9, - 0x03, 0x26, 0x34, 0x46, 0x2b, 0x68, 0xd9, 0x07, 0x08, 0xd5, 0xeb, 0x6f, - 0x10, 0x2b, 0x3c, 0xd0, 0x26, 0xd8, 0x5b, 0xb3, 0x08, 0x2b, 0x32, 0xd0, - 0x01, 0x26, 0x34, 0x46, 0x2b, 0x68, 0x9a, 0x07, 0x48, 0xd5, 0xab, 0x6f, - 0x05, 0x2b, 0x58, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, 0x3c, 0x37, 0x51, 0x3c, - 0x3c, 0x3c, 0xfe, 0xf7, 0x73, 0xfd, 0xdf, 0xf8, 0xac, 0x80, 0x07, 0x46, - 0x41, 0xf2, 0x88, 0x39, 0xd8, 0xf8, 0x70, 0x30, 0x98, 0x07, 0xb9, 0xd4, - 0xfe, 0xf7, 0x68, 0xfd, 0xc0, 0x1b, 0x48, 0x45, 0xf6, 0xd9, 0xd5, 0xe7, - 0x0a, 0x69, 0x22, 0xf4, 0x7c, 0x52, 0xbe, 0xe7, 0x26, 0x46, 0xd1, 0xe7, - 0x23, 0xf0, 0x08, 0x02, 0x20, 0x2a, 0x01, 0xd0, 0x18, 0x2b, 0xd5, 0xd1, - 0x9c, 0xb9, 0x1d, 0x4a, 0xe9, 0x6f, 0x53, 0x6d, 0x23, 0xf0, 0x38, 0x03, - 0x0b, 0x43, 0x53, 0x65, 0xce, 0xe7, 0x01, 0x21, 0x28, 0x1d, 0xfe, 0xf7, - 0xd7, 0xfe, 0x04, 0x46, 0xf0, 0xe7, 0x01, 0x21, 0x05, 0xf1, 0x24, 0x00, - 0xfe, 0xf7, 0x50, 0xfe, 0xf7, 0xe7, 0x26, 0x46, 0xc0, 0xe7, 0x01, 0x21, - 0x28, 0x1d, 0xfe, 0xf7, 0xc9, 0xfe, 0x04, 0x46, 0xe4, 0xb9, 0x0f, 0x4a, - 0xa9, 0x6f, 0x53, 0x6d, 0x23, 0xf0, 0x07, 0x03, 0x0b, 0x43, 0x53, 0x65, - 0x2b, 0x68, 0x5b, 0x07, 0x2a, 0xd5, 0xd5, 0xf8, 0x94, 0x30, 0x05, 0x2b, - 0x00, 0xf2, 0x9e, 0x80, 0xdf, 0xe8, 0x03, 0xf0, 0x19, 0x14, 0x96, 0x19, - 0x19, 0x19, 0x01, 0x21, 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, 0x2e, 0xfe, - 0xe3, 0xe7, 0x01, 0x26, 0x34, 0x46, 0xe9, 0xe7, 0x26, 0x46, 0xe7, 0xe7, - 0x00, 0x44, 0x02, 0x58, 0x00, 0x48, 0x02, 0x58, 0xcf, 0xff, 0xff, 0x00, - 0x01, 0x21, 0x28, 0x1d, 0xfe, 0xf7, 0x9e, 0xfe, 0x04, 0x46, 0x00, 0x2c, - 0x40, 0xf0, 0x83, 0x80, 0x53, 0x4a, 0xd5, 0xf8, 0x94, 0x10, 0x93, 0x6d, - 0x23, 0xf0, 0x07, 0x03, 0x0b, 0x43, 0x93, 0x65, 0x2b, 0x68, 0x1f, 0x07, - 0x14, 0xd5, 0xd5, 0xf8, 0x84, 0x30, 0xb3, 0xf5, 0x80, 0x5f, 0x07, 0xd1, - 0x02, 0x21, 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, 0x05, 0xfe, 0x00, 0x28, - 0x18, 0xbf, 0x01, 0x26, 0x47, 0x4a, 0xd5, 0xf8, 0x84, 0x10, 0x53, 0x6d, - 0x23, 0xf4, 0x40, 0x53, 0x0b, 0x43, 0x53, 0x65, 0x2b, 0x68, 0xd8, 0x06, - 0x14, 0xd5, 0xd5, 0xf8, 0x98, 0x30, 0xb3, 0xf5, 0x80, 0x7f, 0x07, 0xd1, - 0x02, 0x21, 0x05, 0xf1, 0x24, 0x00, 0xfe, 0xf7, 0xed, 0xfd, 0x00, 0x28, - 0x18, 0xbf, 0x01, 0x26, 0x3b, 0x4a, 0xd5, 0xf8, 0x98, 0x10, 0x93, 0x6d, - 0x23, 0xf4, 0x40, 0x73, 0x0b, 0x43, 0x93, 0x65, 0x2b, 0x68, 0x59, 0x03, - 0x19, 0xd5, 0xd5, 0xf8, 0x88, 0x30, 0xb3, 0xf5, 0x00, 0x1f, 0x44, 0xd0, - 0xb3, 0xf5, 0x40, 0x1f, 0x07, 0xd0, 0xb3, 0xf5, 0x80, 0x1f, 0x45, 0xd1, - 0x30, 0x4a, 0xd3, 0x6a, 0x43, 0xf4, 0x00, 0x33, 0xd3, 0x62, 0x00, 0x2c, - 0x41, 0xd1, 0x2d, 0x4a, 0xd5, 0xf8, 0x88, 0x10, 0x53, 0x6d, 0x23, 0xf4, - 0x40, 0x13, 0x0b, 0x43, 0x53, 0x65, 0x2b, 0x68, 0xda, 0x03, 0x06, 0xd5, - 0x2b, 0x6d, 0x00, 0x2b, 0x35, 0xd0, 0xb3, 0xf5, 0x80, 0x3f, 0x40, 0xd0, - 0x01, 0x26, 0x29, 0x68, 0x4b, 0x00, 0x09, 0xd5, 0x22, 0x4b, 0x1a, 0x69, - 0x22, 0xf4, 0x00, 0x42, 0x1a, 0x61, 0x1a, 0x69, 0xd5, 0xf8, 0xbc, 0x00, - 0x02, 0x43, 0x1a, 0x61, 0x00, 0x29, 0x06, 0xda, 0x1c, 0x4a, 0x69, 0x6d, - 0xd3, 0x6c, 0x23, 0xf0, 0x40, 0x53, 0x0b, 0x43, 0xd3, 0x64, 0x30, 0x1e, - 0x18, 0xbf, 0x01, 0x20, 0xbd, 0xe8, 0xf8, 0x83, 0x01, 0x21, 0x05, 0xf1, - 0x24, 0x00, 0xfe, 0xf7, 0x9b, 0xfd, 0x7b, 0xe7, 0x01, 0x26, 0x34, 0x46, - 0x84, 0xe7, 0x26, 0x46, 0x82, 0xe7, 0x01, 0x21, 0x05, 0xf1, 0x24, 0x00, - 0xfe, 0xf7, 0x90, 0xfd, 0x04, 0x46, 0xbe, 0xe7, 0x01, 0x26, 0x34, 0x46, - 0xc5, 0xe7, 0x26, 0x46, 0xc3, 0xe7, 0x0b, 0x4a, 0xd3, 0x6a, 0x43, 0xf4, - 0x00, 0x33, 0xd3, 0x62, 0x6c, 0xb9, 0x08, 0x4a, 0x29, 0x6d, 0xd3, 0x6c, - 0x23, 0xf4, 0x80, 0x33, 0x0b, 0x43, 0xd3, 0x64, 0xbf, 0xe7, 0x02, 0x21, - 0x28, 0x1d, 0xfe, 0xf7, 0xf7, 0xfd, 0x04, 0x46, 0xf0, 0xe7, 0x26, 0x46, - 0xb7, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, 0x00, 0xb5, 0x0c, 0x23, - 0xc5, 0xb0, 0x01, 0x93, 0x00, 0x23, 0x01, 0xa8, 0x0a, 0x93, 0x03, 0x93, - 0x01, 0x23, 0x06, 0x93, 0xfe, 0xf7, 0x64, 0xfe, 0x70, 0xb9, 0x4f, 0xf4, - 0x80, 0x03, 0x14, 0xa8, 0x14, 0x93, 0x4f, 0xf4, 0x00, 0x73, 0x41, 0x93, - 0xff, 0xf7, 0x30, 0xfe, 0x20, 0xb9, 0x04, 0x4a, 0x13, 0x6f, 0x43, 0xf4, - 0x00, 0x43, 0x13, 0x67, 0x45, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0xbf, - 0x00, 0x44, 0x02, 0x58, 0x48, 0x4b, 0x1a, 0x69, 0x02, 0xf0, 0x38, 0x02, - 0x10, 0x2a, 0x30, 0xb5, 0x00, 0xf0, 0x86, 0x80, 0x18, 0x2a, 0x0c, 0xd0, - 0x00, 0x2a, 0x40, 0xf0, 0x83, 0x80, 0x1a, 0x68, 0x42, 0x48, 0x12, 0xf0, - 0x20, 0x0f, 0x03, 0xd0, 0x1b, 0x68, 0xc3, 0xf3, 0xc1, 0x03, 0xd8, 0x40, - 0x30, 0xbd, 0x99, 0x6a, 0x9d, 0x6a, 0xda, 0x6a, 0x15, 0xf4, 0x7c, 0x7f, - 0xc5, 0xf3, 0x05, 0x10, 0x5c, 0x6b, 0xf5, 0xd0, 0xc4, 0xf3, 0xcc, 0x04, - 0x02, 0xf0, 0x01, 0x02, 0x07, 0xee, 0x90, 0x0a, 0x01, 0xf0, 0x03, 0x01, - 0x62, 0x43, 0xb7, 0xee, 0x00, 0x6a, 0xf8, 0xee, 0xe7, 0x6a, 0x01, 0x29, - 0x07, 0xee, 0x90, 0x2a, 0xfa, 0xee, 0xe9, 0x7a, 0x4c, 0xd0, 0x02, 0x29, - 0x3c, 0xd0, 0x00, 0x29, 0x48, 0xd1, 0x1a, 0x68, 0x92, 0x06, 0x27, 0xd5, - 0x19, 0x68, 0x2c, 0x4a, 0xc1, 0xf3, 0xc1, 0x01, 0x1b, 0x6b, 0xca, 0x40, - 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, 0x10, 0x2a, 0xf8, 0xee, 0xc7, 0x5a, - 0x85, 0xee, 0xa6, 0x7a, 0x06, 0xee, 0x90, 0x3a, 0xf8, 0xee, 0xe6, 0x6a, - 0x76, 0xee, 0xa7, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x20, 0x4b, 0x67, 0xee, - 0x87, 0x7a, 0x1b, 0x6b, 0xc3, 0xf3, 0x46, 0x23, 0x01, 0x33, 0x07, 0xee, - 0x10, 0x3a, 0xf8, 0xee, 0xc7, 0x6a, 0x87, 0xee, 0xa6, 0x7a, 0xfc, 0xee, - 0xc7, 0x7a, 0x17, 0xee, 0x90, 0x0a, 0xb3, 0xe7, 0x1b, 0x6b, 0xc3, 0xf3, - 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, - 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x9f, 0xed, 0x14, 0x6a, 0x86, 0xee, - 0x26, 0x7a, 0xdd, 0xe7, 0x1b, 0x6b, 0xc3, 0xf3, 0x08, 0x03, 0x07, 0xee, - 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, 0x27, 0x7a, 0x77, 0xee, - 0x86, 0x7a, 0x9f, 0xed, 0x0d, 0x6a, 0xee, 0xe7, 0x1b, 0x6b, 0xc3, 0xf3, - 0x08, 0x03, 0x07, 0xee, 0x10, 0x3a, 0xb8, 0xee, 0xc7, 0x7a, 0x77, 0xee, - 0x27, 0x7a, 0x77, 0xee, 0x86, 0x7a, 0x9f, 0xed, 0x07, 0x6a, 0xe0, 0xe7, - 0x06, 0x48, 0x85, 0xe7, 0x06, 0x48, 0x83, 0xe7, 0x00, 0x44, 0x02, 0x58, - 0x00, 0x90, 0xd0, 0x03, 0x00, 0x24, 0x74, 0x4c, 0x20, 0xbc, 0xbe, 0x4b, - 0x00, 0x24, 0x74, 0x4a, 0x40, 0x78, 0x7d, 0x01, 0x00, 0x09, 0x3d, 0x00, - 0x08, 0xb5, 0xff, 0xf7, 0x5d, 0xff, 0x09, 0x49, 0x09, 0x4a, 0x8b, 0x69, - 0xc3, 0xf3, 0x03, 0x23, 0xd3, 0x5c, 0x03, 0xf0, 0x1f, 0x03, 0xd8, 0x40, - 0x8b, 0x69, 0x03, 0xf0, 0x0f, 0x03, 0xd3, 0x5c, 0x04, 0x4a, 0x03, 0xf0, - 0x1f, 0x03, 0x10, 0x60, 0xd8, 0x40, 0x08, 0xbd, 0x00, 0x44, 0x02, 0x58, - 0x54, 0xda, 0x01, 0x08, 0x00, 0x00, 0x00, 0x24, 0x73, 0xb5, 0x0e, 0x46, - 0x04, 0x46, 0xff, 0xf7, 0xdf, 0xff, 0xb0, 0xfb, 0xf6, 0xf5, 0xff, 0x2d, - 0x47, 0xdc, 0xff, 0xf7, 0xd9, 0xff, 0xb0, 0xfb, 0xf6, 0xf1, 0x01, 0xfb, - 0x16, 0x06, 0x06, 0xb9, 0x01, 0x3d, 0x65, 0x60, 0xfe, 0xf7, 0x72, 0xfb, - 0x94, 0xf8, 0x41, 0x20, 0x03, 0x46, 0x12, 0xb9, 0x41, 0xf2, 0x88, 0x32, - 0xa2, 0x64, 0x20, 0x68, 0xa1, 0x68, 0x02, 0x68, 0x01, 0x39, 0x22, 0xf4, - 0x70, 0x62, 0x42, 0xea, 0x01, 0x22, 0x20, 0x21, 0x02, 0x60, 0x20, 0x46, - 0xa2, 0x6c, 0x00, 0x92, 0x00, 0x22, 0xfe, 0xf7, 0xcb, 0xfe, 0x30, 0xbb, - 0x22, 0x68, 0xe5, 0x69, 0xe3, 0x68, 0x11, 0x68, 0x2b, 0x43, 0x25, 0x6a, - 0x21, 0xf0, 0x7f, 0x41, 0x2b, 0x43, 0x65, 0x68, 0x21, 0xf0, 0xd0, 0x01, - 0x43, 0xea, 0x05, 0x63, 0x0b, 0x43, 0x13, 0x60, 0x55, 0x68, 0xd4, 0xe9, - 0x05, 0x31, 0x0b, 0x43, 0x21, 0x69, 0x43, 0xea, 0x01, 0x43, 0x09, 0x49, - 0x29, 0x40, 0x0b, 0x43, 0x53, 0x60, 0x13, 0x68, 0x43, 0xf0, 0x01, 0x03, - 0x13, 0x60, 0x01, 0x23, 0x60, 0x64, 0x84, 0xf8, 0x41, 0x30, 0x02, 0xb0, - 0x70, 0xbd, 0xff, 0x25, 0xbd, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0xf8, 0xe7, - 0xfe, 0xf8, 0xe0, 0xff, 0x08, 0xb5, 0xff, 0xf7, 0x89, 0xff, 0x05, 0x4b, - 0x05, 0x4a, 0x1b, 0x6a, 0xc3, 0xf3, 0x02, 0x13, 0xd3, 0x5c, 0x03, 0xf0, - 0x1f, 0x03, 0xd8, 0x40, 0x08, 0xbd, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, - 0x54, 0xda, 0x01, 0x08, 0x08, 0xb5, 0xff, 0xf7, 0x77, 0xff, 0x05, 0x4b, - 0x05, 0x4a, 0xdb, 0x69, 0xc3, 0xf3, 0x02, 0x23, 0xd3, 0x5c, 0x03, 0xf0, - 0x1f, 0x03, 0xd8, 0x40, 0x08, 0xbd, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, - 0x54, 0xda, 0x01, 0x08, 0x08, 0xb5, 0xff, 0xf7, 0x65, 0xff, 0x05, 0x4b, - 0x05, 0x4a, 0xdb, 0x69, 0xc3, 0xf3, 0x02, 0x13, 0xd3, 0x5c, 0x03, 0xf0, - 0x1f, 0x03, 0xd8, 0x40, 0x08, 0xbd, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, - 0x54, 0xda, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x43, 0x7f, 0x4e, 0x90, 0x21, - 0x7f, 0x4c, 0x89, 0xb0, 0xd6, 0xf8, 0x08, 0xe0, 0xf0, 0x68, 0x37, 0x69, - 0xd6, 0xf8, 0x14, 0xc0, 0xd6, 0xe9, 0x00, 0x35, 0x69, 0x43, 0x62, 0x18, - 0x63, 0x50, 0x00, 0x21, 0xc2, 0xf8, 0x04, 0xe0, 0xa2, 0xf8, 0x56, 0x10, - 0xa2, 0xf8, 0x54, 0x10, 0xa2, 0xf8, 0x5e, 0x10, 0xa2, 0xf8, 0x5c, 0x10, - 0x91, 0x62, 0x51, 0x66, 0x90, 0x60, 0xd7, 0x60, 0xc2, 0xf8, 0x10, 0xc0, - 0xc2, 0xe9, 0x06, 0x11, 0xc2, 0xe9, 0x08, 0x11, 0xb6, 0xf9, 0x1a, 0x10, - 0x01, 0x31, 0x5a, 0xd1, 0x08, 0x21, 0x51, 0x61, 0x6c, 0x4a, 0x93, 0x42, - 0x10, 0xd1, 0x90, 0x22, 0xbe, 0xf5, 0x16, 0x5f, 0x02, 0xfb, 0x05, 0x42, - 0x92, 0xf8, 0x80, 0x10, 0x54, 0xd8, 0x01, 0x29, 0x06, 0xd0, 0x19, 0x68, - 0x41, 0xf0, 0x02, 0x01, 0x19, 0x60, 0x00, 0x21, 0x82, 0xf8, 0x80, 0x10, - 0x90, 0x22, 0x02, 0xfb, 0x05, 0x41, 0xd1, 0xf8, 0x84, 0x60, 0x0e, 0xb9, - 0x81, 0xf8, 0x80, 0x60, 0x02, 0xfb, 0x05, 0x42, 0x24, 0x21, 0x40, 0xea, - 0x0c, 0x00, 0xc2, 0xf8, 0x84, 0x10, 0x19, 0x68, 0x52, 0x69, 0x21, 0xf0, - 0x01, 0x01, 0x10, 0x43, 0x59, 0x4a, 0x19, 0x60, 0x19, 0x68, 0x0a, 0x40, - 0x10, 0x43, 0x18, 0x60, 0x5a, 0x68, 0x22, 0xf4, 0x40, 0x52, 0x17, 0x43, - 0x5f, 0x60, 0x9a, 0x68, 0x22, 0xf0, 0x6e, 0x42, 0x22, 0xf4, 0x30, 0x62, - 0x9a, 0x60, 0xda, 0x6a, 0x22, 0xf0, 0x0f, 0x02, 0xda, 0x62, 0x50, 0x4a, - 0x93, 0x42, 0x25, 0xd1, 0x4f, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x38, 0x03, - 0x28, 0x2b, 0x00, 0xf2, 0x84, 0x80, 0x4d, 0x4a, 0xd3, 0x5c, 0x08, 0x2b, - 0x00, 0xf2, 0xb3, 0x81, 0x08, 0x2b, 0x7c, 0xd8, 0xdf, 0xe8, 0x13, 0xf0, - 0xd8, 0x01, 0xde, 0x01, 0x7b, 0x00, 0x7b, 0x00, 0xe1, 0x01, 0x7b, 0x00, - 0x7b, 0x00, 0x7b, 0x00, 0xe6, 0x01, 0xb6, 0xf9, 0x18, 0x10, 0x01, 0x31, - 0x0c, 0xbf, 0x04, 0x21, 0x0c, 0x21, 0x9e, 0xe7, 0x01, 0x29, 0xb1, 0xd0, - 0x19, 0x68, 0x21, 0xf0, 0x02, 0x01, 0xa9, 0xe7, 0x3e, 0x4a, 0x93, 0x42, - 0x07, 0xd1, 0x3b, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, - 0x5b, 0xd8, 0x3b, 0x4a, 0xd6, 0xe7, 0x3b, 0x4a, 0x93, 0x42, 0x07, 0xd1, - 0x35, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, 0x50, 0xd8, - 0x37, 0x4a, 0xcb, 0xe7, 0x37, 0x4a, 0x93, 0x42, 0x07, 0xd1, 0x30, 0x4b, - 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, 0x45, 0xd8, 0x34, 0x4a, - 0xc0, 0xe7, 0x34, 0x4a, 0x93, 0x42, 0x07, 0xd1, 0x2a, 0x4b, 0x5b, 0x6d, - 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, 0x3a, 0xd8, 0x30, 0x4a, 0xb5, 0xe7, - 0x30, 0x4a, 0x93, 0x42, 0x07, 0xd1, 0x25, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, - 0x38, 0x03, 0x28, 0x2b, 0x2f, 0xd8, 0x2d, 0x4a, 0xaa, 0xe7, 0x2d, 0x4a, - 0x93, 0x42, 0x07, 0xd1, 0x1f, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, - 0x05, 0x2b, 0x24, 0xd8, 0x29, 0x4a, 0x9f, 0xe7, 0x29, 0x4a, 0x93, 0x42, - 0x07, 0xd1, 0x1a, 0x4b, 0x5b, 0x6d, 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, - 0x19, 0xd8, 0x26, 0x4a, 0x94, 0xe7, 0x13, 0x4a, 0x93, 0x42, 0x14, 0xd1, - 0x02, 0xf5, 0x0e, 0x32, 0x93, 0x6d, 0x03, 0xf0, 0x07, 0x03, 0x05, 0x2b, - 0x0d, 0xd8, 0x21, 0x49, 0xcb, 0x5c, 0x10, 0x2b, 0x00, 0xf0, 0x00, 0x81, - 0x09, 0xd8, 0x04, 0x2b, 0x00, 0xf0, 0xf2, 0x80, 0x08, 0x2b, 0x00, 0xf0, - 0xf4, 0x80, 0x02, 0x2b, 0x36, 0xd0, 0x01, 0x26, 0x3a, 0xe0, 0x20, 0x2b, - 0x00, 0xf0, 0x2d, 0x81, 0x40, 0x2b, 0xf8, 0xd1, 0x4f, 0xf4, 0x00, 0x40, - 0xf5, 0xe0, 0x00, 0xbf, 0xa0, 0x6a, 0x00, 0x24, 0x80, 0x6c, 0x00, 0x24, - 0x00, 0x0c, 0x00, 0x58, 0xf3, 0x69, 0xff, 0xcf, 0x00, 0x10, 0x01, 0x40, - 0x00, 0x44, 0x02, 0x58, 0x1f, 0xda, 0x01, 0x08, 0x00, 0x44, 0x00, 0x40, - 0x48, 0xda, 0x01, 0x08, 0x00, 0x48, 0x00, 0x40, 0x48, 0xda, 0x01, 0x08, - 0x00, 0x4c, 0x00, 0x40, 0x48, 0xda, 0x01, 0x08, 0x00, 0x50, 0x00, 0x40, - 0x48, 0xda, 0x01, 0x08, 0x00, 0x14, 0x01, 0x40, 0x1f, 0xda, 0x01, 0x08, - 0x00, 0x78, 0x00, 0x40, 0x48, 0xda, 0x01, 0x08, 0x00, 0x7c, 0x00, 0x40, - 0x48, 0xda, 0x01, 0x08, 0x4e, 0xda, 0x01, 0x08, 0xff, 0xf7, 0x9a, 0xfe, - 0x00, 0x28, 0x40, 0xf0, 0xc4, 0x80, 0x00, 0x26, 0x90, 0x22, 0x4f, 0xf0, - 0x01, 0x13, 0x01, 0x2e, 0x02, 0xfb, 0x05, 0xf2, 0x04, 0xeb, 0x02, 0x01, - 0x8b, 0x66, 0x4f, 0xf0, 0x00, 0x03, 0xc1, 0xe9, 0x1c, 0x33, 0x00, 0xf0, - 0x34, 0x81, 0x8b, 0x6a, 0x00, 0x2b, 0x66, 0xd0, 0xd8, 0x07, 0x06, 0xd5, - 0xa0, 0x58, 0xc9, 0x6a, 0x42, 0x68, 0x22, 0xf4, 0x00, 0x32, 0x0a, 0x43, - 0x42, 0x60, 0x9a, 0x07, 0x09, 0xd5, 0x90, 0x22, 0x6a, 0x43, 0xa1, 0x58, - 0xa0, 0x18, 0x4a, 0x68, 0x00, 0x6b, 0x22, 0xf4, 0x80, 0x32, 0x02, 0x43, - 0x4a, 0x60, 0x5f, 0x07, 0x09, 0xd5, 0x90, 0x22, 0x6a, 0x43, 0xa1, 0x58, - 0xa0, 0x18, 0x4a, 0x68, 0x40, 0x6b, 0x22, 0xf4, 0x80, 0x22, 0x02, 0x43, - 0x4a, 0x60, 0x18, 0x07, 0x09, 0xd5, 0x90, 0x22, 0x6a, 0x43, 0xa1, 0x58, - 0xa0, 0x18, 0x4a, 0x68, 0x80, 0x6b, 0x22, 0xf4, 0x00, 0x42, 0x02, 0x43, - 0x4a, 0x60, 0xd9, 0x06, 0x09, 0xd5, 0x90, 0x22, 0x6a, 0x43, 0xa1, 0x58, - 0xa0, 0x18, 0x8a, 0x68, 0xc0, 0x6b, 0x22, 0xf4, 0x80, 0x52, 0x02, 0x43, - 0x8a, 0x60, 0x9a, 0x06, 0x09, 0xd5, 0x90, 0x22, 0x6a, 0x43, 0xa1, 0x58, - 0xa0, 0x18, 0x8a, 0x68, 0x00, 0x6c, 0x22, 0xf4, 0x00, 0x52, 0x02, 0x43, - 0x8a, 0x60, 0x5f, 0x06, 0x13, 0xd5, 0x90, 0x22, 0x6a, 0x43, 0xa1, 0x58, - 0xa0, 0x18, 0x4a, 0x68, 0x47, 0x6c, 0x22, 0xf4, 0x80, 0x12, 0xb7, 0xf5, - 0x80, 0x1f, 0x42, 0xea, 0x07, 0x02, 0x4a, 0x60, 0x05, 0xd1, 0x4a, 0x68, - 0x80, 0x6c, 0x22, 0xf4, 0xc0, 0x02, 0x02, 0x43, 0x4a, 0x60, 0x18, 0x06, - 0x09, 0xd5, 0x90, 0x23, 0x6b, 0x43, 0xe2, 0x58, 0xe1, 0x18, 0x53, 0x68, - 0xc9, 0x6c, 0x23, 0xf4, 0x00, 0x23, 0x0b, 0x43, 0x53, 0x60, 0x90, 0x27, - 0x6f, 0x43, 0xe3, 0x59, 0x04, 0xeb, 0x07, 0x08, 0x5a, 0x68, 0x22, 0xf4, - 0x90, 0x42, 0x5a, 0x60, 0x9a, 0x68, 0x22, 0xf0, 0x2a, 0x02, 0x9a, 0x60, - 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x00, 0x23, 0xc8, 0xf8, - 0x8c, 0x30, 0xfe, 0xf7, 0x35, 0xf9, 0xe3, 0x59, 0x02, 0x46, 0x1b, 0x68, - 0x19, 0x07, 0x00, 0xf1, 0xa3, 0x80, 0x90, 0x23, 0x6b, 0x43, 0xe3, 0x58, - 0x1b, 0x68, 0x5b, 0x07, 0x07, 0xd5, 0x4f, 0xf4, 0x80, 0x01, 0x40, 0x46, - 0xfe, 0xf7, 0xf4, 0xf9, 0x00, 0x28, 0x40, 0xf0, 0x9f, 0x80, 0x90, 0x23, - 0x03, 0xfb, 0x05, 0x44, 0x20, 0x23, 0xc4, 0xf8, 0x84, 0x30, 0xc4, 0xf8, - 0x88, 0x30, 0x00, 0x23, 0xe3, 0x66, 0x84, 0xf8, 0x80, 0x30, 0x92, 0xe0, - 0x02, 0xa8, 0xfa, 0xf7, 0x19, 0xfa, 0x03, 0x98, 0x46, 0xe7, 0x05, 0xa8, - 0xfa, 0xf7, 0x6c, 0xf9, 0x06, 0x98, 0x41, 0xe7, 0x13, 0x68, 0x46, 0x48, - 0x13, 0xf0, 0x20, 0x0f, 0x03, 0xd0, 0x13, 0x68, 0xc3, 0xf3, 0xc1, 0x03, - 0xd8, 0x40, 0x4f, 0xf0, 0x90, 0x09, 0x42, 0x4b, 0x09, 0xfb, 0x05, 0xf9, - 0x04, 0xeb, 0x09, 0x01, 0x4a, 0x6a, 0xd1, 0xf8, 0x04, 0x80, 0x33, 0xf8, - 0x12, 0x20, 0x08, 0xeb, 0x48, 0x01, 0xb0, 0xfb, 0xf2, 0xf3, 0x8b, 0x42, - 0xff, 0xf4, 0xed, 0xae, 0xb3, 0xeb, 0x08, 0x3f, 0x3f, 0xf6, 0xe9, 0xae, - 0x00, 0x23, 0x00, 0x21, 0x16, 0xf0, 0xae, 0xfc, 0x42, 0x46, 0x0f, 0x02, - 0x00, 0x23, 0x06, 0x02, 0x47, 0xea, 0x10, 0x67, 0x4f, 0xea, 0x58, 0x00, - 0x30, 0x18, 0x47, 0xf1, 0x00, 0x01, 0x16, 0xf0, 0xa1, 0xfc, 0x30, 0x4b, - 0xa0, 0xf5, 0x40, 0x72, 0x9a, 0x42, 0x3f, 0xf6, 0xd2, 0xae, 0x54, 0xf8, - 0x09, 0x30, 0xd8, 0x60, 0x09, 0xe7, 0x2c, 0x48, 0xcb, 0xe7, 0x20, 0x2b, - 0x39, 0xd0, 0x40, 0x2b, 0x39, 0xd0, 0x10, 0x2b, 0x7f, 0xf4, 0xc5, 0xae, - 0x28, 0x4b, 0x24, 0x48, 0x1a, 0x68, 0x12, 0xf0, 0x20, 0x0f, 0x03, 0xd0, - 0x1b, 0x68, 0xc3, 0xf3, 0xc1, 0x03, 0xd8, 0x40, 0x90, 0x23, 0x6b, 0x43, - 0xe1, 0x18, 0x4a, 0x68, 0x4e, 0x6a, 0x1e, 0x49, 0x31, 0xf8, 0x16, 0x10, - 0xb0, 0xfb, 0xf1, 0xf0, 0x00, 0xeb, 0x52, 0x00, 0xb0, 0xfb, 0xf2, 0xf0, - 0x80, 0xb2, 0x4f, 0xf6, 0xef, 0x72, 0xa0, 0xf1, 0x10, 0x01, 0x91, 0x42, - 0x3f, 0xf6, 0xa5, 0xae, 0xe3, 0x58, 0xd2, 0xe7, 0xff, 0xf7, 0x98, 0xfd, - 0x00, 0x28, 0x3f, 0xf4, 0xda, 0xae, 0xe1, 0xe7, 0xff, 0xf7, 0x80, 0xfd, - 0xf8, 0xe7, 0x02, 0xa8, 0xfa, 0xf7, 0xa0, 0xf9, 0x03, 0x98, 0xf3, 0xe7, - 0x05, 0xa8, 0xfa, 0xf7, 0xf3, 0xf8, 0x06, 0x98, 0xee, 0xe7, 0x0d, 0x48, - 0xd2, 0xe7, 0x4f, 0xf4, 0x00, 0x40, 0xcf, 0xe7, 0x01, 0x90, 0x4f, 0xf4, - 0x00, 0x11, 0x40, 0x46, 0xfe, 0xf7, 0x56, 0xf9, 0x01, 0x9a, 0x00, 0x28, - 0x3f, 0xf4, 0x53, 0xaf, 0x03, 0x26, 0x30, 0x46, 0x09, 0xb0, 0xbd, 0xe8, - 0xf0, 0x83, 0x00, 0xbf, 0x00, 0x90, 0xd0, 0x03, 0xc4, 0xdb, 0x01, 0x08, - 0xff, 0xfc, 0x0f, 0x00, 0x00, 0x09, 0x3d, 0x00, 0x00, 0x44, 0x02, 0x58, - 0x15, 0x4b, 0x4f, 0xf4, 0xe1, 0x32, 0x10, 0xb5, 0x9a, 0x60, 0xb0, 0xb0, - 0x1a, 0x68, 0x13, 0x4b, 0x9a, 0x42, 0x1c, 0xd1, 0xbc, 0x22, 0x00, 0x21, - 0x01, 0xa8, 0x14, 0xf0, 0x4f, 0xfd, 0x04, 0x23, 0x68, 0x46, 0x00, 0x93, - 0x01, 0x23, 0x25, 0x93, 0xff, 0xf7, 0x3e, 0xfa, 0xff, 0xf7, 0x62, 0xfd, - 0x78, 0xb1, 0x00, 0x23, 0x0a, 0x4c, 0x25, 0x93, 0x0a, 0x4b, 0xd4, 0xf8, - 0x8c, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0x68, 0x46, 0xff, 0xf7, 0x30, 0xfa, - 0x4f, 0xf4, 0x40, 0x73, 0xe3, 0x60, 0xff, 0xf7, 0x51, 0xfd, 0x30, 0xb0, - 0x10, 0xbd, 0x00, 0xbf, 0xa0, 0x6a, 0x00, 0x24, 0x00, 0x0c, 0x00, 0x58, - 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x37, 0xb5, 0x44, 0x4c, - 0x23, 0x69, 0xa3, 0x69, 0xa3, 0x69, 0xa3, 0x69, 0xe5, 0x69, 0xe3, 0x69, - 0x23, 0x6a, 0x05, 0xf0, 0x70, 0x05, 0x40, 0x4b, 0x1b, 0x68, 0xff, 0xf7, - 0x25, 0xfd, 0xd4, 0xf8, 0xe8, 0x30, 0x3e, 0x4a, 0x43, 0xf0, 0x08, 0x03, - 0xc4, 0xf8, 0xe8, 0x30, 0xd4, 0xf8, 0xe8, 0x30, 0x03, 0xf0, 0x08, 0x03, - 0x01, 0x93, 0x01, 0x9b, 0x39, 0x4b, 0xd2, 0xf8, 0x8c, 0x10, 0x99, 0x42, - 0xfb, 0xd1, 0xd4, 0xf8, 0x90, 0x30, 0x43, 0xf0, 0x08, 0x03, 0xc4, 0xf8, - 0x90, 0x30, 0xd4, 0xf8, 0x90, 0x30, 0x23, 0xf0, 0x08, 0x03, 0xc4, 0xf8, - 0x90, 0x30, 0x4f, 0xf4, 0x40, 0x73, 0x31, 0x4c, 0xd3, 0x60, 0x31, 0x4b, - 0x23, 0x60, 0x4f, 0xf0, 0xff, 0x33, 0xe3, 0x60, 0x2f, 0x4b, 0x00, 0x2d, - 0x4d, 0xd1, 0xb0, 0xfb, 0xf3, 0xf0, 0x00, 0x23, 0x01, 0x38, 0x23, 0x61, - 0xa3, 0x60, 0x60, 0x60, 0xc4, 0xe9, 0x05, 0x33, 0x94, 0xf8, 0x3d, 0x30, - 0x03, 0xf0, 0xff, 0x02, 0x0b, 0xb9, 0x84, 0xf8, 0x3c, 0x20, 0x25, 0x4a, - 0x02, 0x23, 0x84, 0xf8, 0x3d, 0x30, 0x13, 0x68, 0x23, 0xf4, 0x7c, 0x73, - 0x13, 0x60, 0x4f, 0xf0, 0xff, 0x33, 0xd3, 0x62, 0x01, 0x23, 0x90, 0x62, - 0x53, 0x61, 0x84, 0xf8, 0x48, 0x30, 0x84, 0xf8, 0x3e, 0x30, 0x84, 0xf8, - 0x3f, 0x30, 0x84, 0xf8, 0x40, 0x30, 0x84, 0xf8, 0x41, 0x30, 0x84, 0xf8, - 0x42, 0x30, 0x84, 0xf8, 0x43, 0x30, 0x84, 0xf8, 0x44, 0x30, 0x84, 0xf8, - 0x45, 0x30, 0x84, 0xf8, 0x46, 0x30, 0x84, 0xf8, 0x47, 0x30, 0x84, 0xf8, - 0x3d, 0x30, 0x14, 0x4b, 0x14, 0x4a, 0x9b, 0x68, 0xc3, 0xf8, 0x08, 0x21, - 0xbf, 0xf3, 0x4f, 0x8f, 0x12, 0x4b, 0x4f, 0xf4, 0x80, 0x22, 0x5a, 0x60, - 0x94, 0xf8, 0x3e, 0x30, 0x01, 0x2b, 0x01, 0xd1, 0xf9, 0xf7, 0x1a, 0xfe, - 0x22, 0x68, 0xd3, 0x68, 0x23, 0xf0, 0x02, 0x03, 0xd3, 0x60, 0x03, 0xb0, - 0x30, 0xbd, 0x40, 0x00, 0xaf, 0xe7, 0x00, 0xbf, 0x00, 0x44, 0x02, 0x58, - 0x00, 0x20, 0x00, 0x52, 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, - 0x68, 0x05, 0x00, 0x24, 0x00, 0x0c, 0x00, 0x40, 0x40, 0x42, 0x0f, 0x00, - 0x00, 0xed, 0x00, 0xe0, 0x39, 0x09, 0x00, 0x08, 0x00, 0xe1, 0x00, 0xe0, - 0x00, 0x23, 0xf0, 0xb5, 0x04, 0x46, 0x89, 0xb0, 0xc3, 0x66, 0x83, 0x60, - 0x39, 0xb1, 0x8b, 0x88, 0xa0, 0xf8, 0x58, 0x30, 0x8b, 0x89, 0xa0, 0xf8, - 0x5a, 0x30, 0x0b, 0x68, 0x03, 0x60, 0x23, 0x68, 0xa8, 0x4a, 0x93, 0x42, - 0x12, 0xd1, 0x00, 0x23, 0x84, 0xf8, 0x50, 0x30, 0xa6, 0x4b, 0xd3, 0xf8, - 0xe8, 0x20, 0x42, 0xf4, 0x00, 0x12, 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, - 0xe8, 0x30, 0x03, 0xf4, 0x00, 0x13, 0x01, 0x93, 0x01, 0x9b, 0xa1, 0x4b, - 0xe3, 0x65, 0x0b, 0xe0, 0xa0, 0x4a, 0x93, 0x42, 0x7c, 0xd0, 0x02, 0xf5, - 0x80, 0x62, 0x93, 0x42, 0x00, 0xf0, 0x8a, 0x80, 0x9d, 0x4a, 0x93, 0x42, - 0x00, 0xf0, 0x98, 0x80, 0x9c, 0x49, 0xb4, 0xf9, 0x58, 0x00, 0x09, 0xf0, - 0x07, 0xf8, 0x9b, 0x49, 0xb4, 0xf9, 0x5a, 0x00, 0x09, 0xf0, 0x02, 0xf8, - 0x04, 0x21, 0xb4, 0xf9, 0x58, 0x00, 0xfd, 0xf7, 0x5b, 0xfe, 0x04, 0x21, - 0xb4, 0xf9, 0x5a, 0x00, 0xfd, 0xf7, 0x56, 0xfe, 0x63, 0x6d, 0x0b, 0xb9, - 0x93, 0x4b, 0x63, 0x65, 0x93, 0x4a, 0x14, 0x21, 0x66, 0x6d, 0x12, 0x68, - 0x23, 0x68, 0xb2, 0xfb, 0xf6, 0xf2, 0x4a, 0x43, 0x63, 0x60, 0x11, 0x46, - 0x98, 0x69, 0x00, 0x04, 0x01, 0xd5, 0x01, 0x39, 0xfa, 0xd1, 0x8d, 0x4d, - 0x8d, 0x49, 0xd5, 0xf8, 0x8c, 0x00, 0x88, 0x42, 0xfb, 0xd1, 0x81, 0x49, - 0x8b, 0x42, 0x79, 0xd1, 0x80, 0x49, 0xd1, 0xf8, 0x90, 0x00, 0x40, 0xf4, - 0x00, 0x10, 0xc1, 0xf8, 0x90, 0x00, 0xd1, 0xf8, 0x90, 0x00, 0x20, 0xf4, - 0x00, 0x10, 0xc1, 0xf8, 0x90, 0x00, 0x82, 0x49, 0x4f, 0xf4, 0x40, 0x70, - 0xc8, 0x60, 0x99, 0x69, 0x09, 0x04, 0x01, 0xd5, 0x01, 0x3a, 0xfa, 0xd1, - 0x7f, 0x4a, 0x96, 0x42, 0x1a, 0xd1, 0x73, 0x4a, 0x93, 0x42, 0x02, 0xd1, - 0x01, 0x20, 0xfa, 0xf7, 0xcf, 0xf8, 0x22, 0x68, 0x72, 0x4b, 0x9a, 0x42, - 0x02, 0xd1, 0x02, 0x20, 0xfa, 0xf7, 0xc8, 0xf8, 0x22, 0x68, 0x78, 0x4b, - 0x9a, 0x42, 0x02, 0xd1, 0x04, 0x20, 0xfa, 0xf7, 0xc1, 0xf8, 0x22, 0x68, - 0x6c, 0x4b, 0x9a, 0x42, 0x02, 0xd1, 0x08, 0x20, 0xfa, 0xf7, 0xba, 0xf8, - 0x6e, 0x49, 0x6f, 0x4b, 0xd1, 0xf8, 0x8c, 0x20, 0x9a, 0x42, 0xfb, 0xd1, - 0x62, 0x4b, 0x22, 0x68, 0x9a, 0x42, 0x62, 0x4b, 0x6a, 0xd1, 0x59, 0x6d, - 0x21, 0xf4, 0x40, 0x51, 0x59, 0x65, 0x6f, 0xe0, 0x01, 0x23, 0x84, 0xf8, - 0x50, 0x30, 0x5d, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, 0x42, 0xf4, 0x80, 0x02, - 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, 0x03, 0xf4, 0x80, 0x03, - 0x02, 0x93, 0x02, 0x9b, 0x62, 0x4b, 0x6b, 0xe7, 0x02, 0x23, 0x84, 0xf8, - 0x50, 0x30, 0x54, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, 0x42, 0xf4, 0x00, 0x02, - 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, 0x03, 0xf4, 0x00, 0x03, - 0x03, 0x93, 0x03, 0x9b, 0x5a, 0x4b, 0x59, 0xe7, 0x03, 0x23, 0x84, 0xf8, - 0x50, 0x30, 0x4b, 0x4b, 0xd3, 0xf8, 0xf4, 0x20, 0x42, 0xf0, 0x80, 0x02, - 0xc3, 0xf8, 0xf4, 0x20, 0xd3, 0xf8, 0xf4, 0x30, 0x03, 0xf0, 0x80, 0x03, - 0x04, 0x93, 0x04, 0x9b, 0x52, 0x4b, 0x47, 0xe7, 0x45, 0x49, 0x8b, 0x42, - 0x14, 0xd0, 0x01, 0xf5, 0x80, 0x61, 0x8b, 0x42, 0x1c, 0xd0, 0x43, 0x49, - 0x8b, 0x42, 0x88, 0xd1, 0x3e, 0x49, 0xd1, 0xf8, 0x9c, 0x00, 0x40, 0xf0, - 0x80, 0x00, 0xc1, 0xf8, 0x9c, 0x00, 0xd1, 0xf8, 0x9c, 0x00, 0x20, 0xf0, - 0x80, 0x00, 0xc1, 0xf8, 0x9c, 0x00, 0x7a, 0xe7, 0x37, 0x49, 0xd1, 0xf8, - 0x90, 0x00, 0x40, 0xf4, 0x80, 0x00, 0xc1, 0xf8, 0x90, 0x00, 0xd1, 0xf8, - 0x90, 0x00, 0x20, 0xf4, 0x80, 0x00, 0x6c, 0xe7, 0x31, 0x49, 0xd1, 0xf8, - 0x90, 0x00, 0x40, 0xf4, 0x00, 0x00, 0xc1, 0xf8, 0x90, 0x00, 0xd1, 0xf8, - 0x90, 0x00, 0x20, 0xf4, 0x00, 0x00, 0x60, 0xe7, 0x2d, 0x49, 0x8a, 0x42, - 0x91, 0xd0, 0x01, 0xf5, 0x80, 0x61, 0x8a, 0x42, 0x8d, 0xd0, 0x2b, 0x49, - 0x8a, 0x42, 0x3f, 0xd0, 0x2e, 0x4b, 0x4f, 0xf4, 0x40, 0x71, 0xd9, 0x60, - 0x94, 0xf8, 0x45, 0x30, 0x20, 0x2b, 0xd8, 0xb2, 0x1a, 0xd1, 0x94, 0xf8, - 0x44, 0x30, 0x01, 0x2b, 0x16, 0xd0, 0x24, 0x23, 0x84, 0xf8, 0x45, 0x30, - 0x63, 0x68, 0x19, 0x68, 0x21, 0xf0, 0x01, 0x01, 0x19, 0x60, 0x19, 0x68, - 0x21, 0xf4, 0x80, 0x51, 0x19, 0x60, 0x19, 0x68, 0x19, 0x60, 0x19, 0x68, - 0x41, 0xf0, 0x01, 0x01, 0x19, 0x60, 0x00, 0x23, 0x84, 0xf8, 0x45, 0x00, - 0x84, 0xf8, 0x44, 0x30, 0x13, 0x4b, 0x22, 0xf4, 0x00, 0x61, 0xa5, 0x68, - 0x99, 0x42, 0xe7, 0x6e, 0x11, 0x4b, 0x03, 0xd0, 0x12, 0x49, 0x8a, 0x42, - 0x40, 0xf0, 0x8c, 0x80, 0x5b, 0x6d, 0x03, 0xf4, 0x40, 0x53, 0xb3, 0xf5, - 0x00, 0x5f, 0x00, 0xf0, 0xb6, 0x80, 0x0c, 0xd8, 0xa3, 0xb3, 0xb3, 0xf5, - 0x80, 0x5f, 0x00, 0xf0, 0x97, 0x80, 0x17, 0x48, 0x08, 0xf0, 0x72, 0xff, - 0x99, 0x6d, 0x21, 0xf4, 0x40, 0x71, 0x99, 0x65, 0xba, 0xe7, 0xb3, 0xf5, - 0x40, 0x5f, 0xf4, 0xd1, 0x65, 0xb3, 0xb7, 0x42, 0x2a, 0xd1, 0x2a, 0xe0, - 0x00, 0x54, 0x00, 0x40, 0x00, 0x44, 0x02, 0x58, 0x1f, 0x00, 0x20, 0x00, - 0x00, 0x58, 0x00, 0x40, 0x00, 0x1c, 0x00, 0x58, 0x28, 0xdb, 0x01, 0x08, - 0x8c, 0xda, 0x01, 0x08, 0xa0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, - 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x40, 0x42, 0x0f, 0x00, - 0x00, 0x5c, 0x00, 0x40, 0x21, 0x00, 0x22, 0x00, 0x48, 0x00, 0x49, 0x00, - 0x5f, 0x00, 0x60, 0x00, 0x9d, 0xd9, 0x01, 0x08, 0xff, 0xf7, 0x10, 0xfb, - 0x0d, 0xb1, 0xb7, 0x42, 0x03, 0xd0, 0x3f, 0x4b, 0x98, 0x42, 0x66, 0xd0, - 0x00, 0x25, 0x00, 0x23, 0x01, 0x22, 0xa5, 0x60, 0xe3, 0x60, 0xc4, 0xe9, - 0x04, 0x23, 0xc4, 0xe9, 0x08, 0x33, 0xc4, 0xe9, 0x06, 0x33, 0x94, 0xf8, - 0x45, 0x30, 0x03, 0xf0, 0xff, 0x02, 0x0b, 0xb9, 0x84, 0xf8, 0x44, 0x20, - 0x24, 0x23, 0x25, 0xf0, 0x70, 0x65, 0x84, 0xf8, 0x45, 0x30, 0x63, 0x68, - 0x1a, 0x68, 0x22, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x1d, 0x61, 0x9a, 0x68, - 0x22, 0xf4, 0x00, 0x42, 0x9a, 0x60, 0x4f, 0xf4, 0x00, 0x42, 0x9a, 0x60, - 0x5a, 0x68, 0x42, 0xf0, 0x00, 0x72, 0x42, 0xf4, 0x00, 0x42, 0x5a, 0x60, - 0xda, 0x68, 0x22, 0xf4, 0x00, 0x42, 0xda, 0x60, 0x00, 0x22, 0xda, 0x60, - 0x1a, 0x60, 0x19, 0x68, 0x41, 0xf0, 0x01, 0x01, 0x19, 0x60, 0x20, 0x23, - 0xa2, 0x64, 0x84, 0xf8, 0x45, 0x30, 0x4f, 0xf0, 0x00, 0x73, 0x62, 0x63, - 0x66, 0x65, 0x84, 0xf8, 0x46, 0x20, 0xe6, 0x66, 0x84, 0xf8, 0x64, 0x20, - 0x23, 0x66, 0xa2, 0x66, 0x09, 0xb0, 0xf0, 0xbd, 0x1b, 0x49, 0x8a, 0x42, - 0x1b, 0xd1, 0x9b, 0x6d, 0x03, 0xf4, 0x40, 0x73, 0xb3, 0xf5, 0x00, 0x7f, - 0x13, 0xd0, 0x05, 0xd8, 0x4b, 0xb1, 0xb3, 0xf5, 0x80, 0x7f, 0x09, 0xd0, - 0x15, 0x48, 0x71, 0xe7, 0xb3, 0xf5, 0x40, 0x7f, 0xfa, 0xd1, 0x14, 0x48, - 0x9e, 0xe7, 0xff, 0xf7, 0x89, 0xfa, 0x9b, 0xe7, 0x05, 0xa8, 0xf9, 0xf7, - 0x13, 0xfe, 0x07, 0x98, 0x96, 0xe7, 0x10, 0x48, 0x94, 0xe7, 0x10, 0x48, - 0x60, 0xe7, 0x10, 0x4b, 0x9e, 0x42, 0x08, 0xd0, 0x0f, 0x4b, 0x9e, 0x42, - 0x07, 0xd0, 0x0f, 0x4b, 0x0f, 0x4d, 0x9e, 0x42, 0x18, 0xbf, 0x00, 0x25, - 0x8d, 0xe7, 0x0e, 0x4d, 0x8b, 0xe7, 0x0e, 0x4d, 0x89, 0xe7, 0x00, 0x2d, - 0x86, 0xd0, 0x05, 0x48, 0x7f, 0xe7, 0x00, 0xbf, 0x00, 0x0e, 0x27, 0x07, - 0x00, 0x1c, 0x00, 0x58, 0xba, 0xd9, 0x01, 0x08, 0x00, 0x09, 0x3d, 0x00, - 0x00, 0x90, 0xd0, 0x03, 0xd5, 0xd9, 0x01, 0x08, 0x80, 0x1a, 0x06, 0x00, - 0x40, 0x42, 0x0f, 0x00, 0xa0, 0x86, 0x01, 0x00, 0x76, 0x56, 0xe1, 0x40, - 0x34, 0x14, 0xc1, 0x20, 0x36, 0x15, 0xc3, 0x00, 0x38, 0xb5, 0x90, 0xf8, - 0x41, 0x30, 0x04, 0x46, 0x00, 0x21, 0x60, 0x2b, 0x17, 0xd1, 0x02, 0x68, - 0x20, 0x23, 0x80, 0xf8, 0x40, 0x10, 0x80, 0xf8, 0x41, 0x30, 0x01, 0x63, - 0x13, 0x68, 0xb0, 0xf9, 0x5a, 0x50, 0x23, 0xf0, 0xfe, 0x03, 0xb0, 0xf9, - 0x58, 0x00, 0x13, 0x60, 0x02, 0xf0, 0xde, 0xfa, 0x28, 0x46, 0x02, 0xf0, - 0xdb, 0xfa, 0x02, 0x23, 0x84, 0xf8, 0x60, 0x30, 0x38, 0xbd, 0x01, 0x63, - 0x04, 0x38, 0x85, 0x6c, 0x80, 0xf8, 0x44, 0x10, 0x15, 0xf0, 0x04, 0x05, - 0x18, 0xbf, 0x14, 0x25, 0xff, 0xf7, 0xb6, 0xfd, 0x45, 0xf0, 0x02, 0x05, - 0x84, 0xf8, 0x60, 0x50, 0xee, 0xe7, 0x80, 0x6b, 0x83, 0x6b, 0x0b, 0xb1, - 0x00, 0x22, 0x1a, 0x65, 0xc3, 0x6b, 0x0b, 0xb1, 0x00, 0x22, 0x1a, 0x65, - 0xff, 0xf7, 0xc6, 0xbf, 0x85, 0x4a, 0x13, 0x68, 0x03, 0xf0, 0x0f, 0x03, - 0x8b, 0x42, 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, 0x0d, 0x46, 0xc0, 0xf0, - 0x88, 0x80, 0x23, 0x68, 0x5f, 0x07, 0x00, 0xf1, 0x92, 0x80, 0x1e, 0x07, - 0x0b, 0xd5, 0x7e, 0x49, 0x66, 0x69, 0xc8, 0x69, 0x00, 0xf0, 0x70, 0x00, - 0x86, 0x42, 0x04, 0xd9, 0xca, 0x69, 0x22, 0xf0, 0x70, 0x02, 0x32, 0x43, - 0xca, 0x61, 0xd8, 0x06, 0x0b, 0xd5, 0x77, 0x49, 0xa6, 0x69, 0xc8, 0x69, - 0x00, 0xf4, 0xe0, 0x60, 0x86, 0x42, 0x04, 0xd9, 0xca, 0x69, 0x22, 0xf4, - 0xe0, 0x62, 0x32, 0x43, 0xca, 0x61, 0x99, 0x06, 0x0b, 0xd5, 0x70, 0x49, - 0xe6, 0x69, 0x08, 0x6a, 0x00, 0xf0, 0x70, 0x00, 0x86, 0x42, 0x04, 0xd9, - 0x0a, 0x6a, 0x22, 0xf0, 0x70, 0x02, 0x32, 0x43, 0x0a, 0x62, 0x9a, 0x07, - 0x0b, 0xd5, 0x69, 0x49, 0xe6, 0x68, 0x88, 0x69, 0x00, 0xf0, 0x0f, 0x00, - 0x86, 0x42, 0x04, 0xd9, 0x8a, 0x69, 0x22, 0xf0, 0x0f, 0x02, 0x32, 0x43, - 0x8a, 0x61, 0xdf, 0x07, 0x65, 0xd4, 0x23, 0x68, 0x9e, 0x07, 0x00, 0xf1, - 0x97, 0x80, 0x5f, 0x49, 0x0a, 0x68, 0x02, 0xf0, 0x0f, 0x02, 0x95, 0x42, - 0xc0, 0xf0, 0x9e, 0x80, 0x58, 0x07, 0x00, 0xf1, 0xa6, 0x80, 0x19, 0x07, - 0x0b, 0xd5, 0x5a, 0x49, 0x65, 0x69, 0xc8, 0x69, 0x00, 0xf0, 0x70, 0x00, - 0x85, 0x42, 0x04, 0xd2, 0xca, 0x69, 0x22, 0xf0, 0x70, 0x02, 0x2a, 0x43, - 0xca, 0x61, 0xda, 0x06, 0x0b, 0xd5, 0x53, 0x49, 0xa5, 0x69, 0xc8, 0x69, - 0x00, 0xf4, 0xe0, 0x60, 0x85, 0x42, 0x04, 0xd2, 0xca, 0x69, 0x22, 0xf4, - 0xe0, 0x62, 0x2a, 0x43, 0xca, 0x61, 0x9b, 0x06, 0x0b, 0xd5, 0x4c, 0x4a, - 0xe0, 0x69, 0x11, 0x6a, 0x01, 0xf0, 0x70, 0x01, 0x88, 0x42, 0x04, 0xd2, - 0x13, 0x6a, 0x23, 0xf0, 0x70, 0x03, 0x03, 0x43, 0x13, 0x62, 0xff, 0xf7, - 0x81, 0xf8, 0x45, 0x4a, 0x93, 0x69, 0x92, 0x69, 0xc3, 0xf3, 0x03, 0x23, - 0x43, 0x4a, 0xd3, 0x5c, 0x03, 0xf0, 0x1f, 0x03, 0xd8, 0x40, 0x42, 0x4b, - 0x18, 0x60, 0xff, 0xf7, 0x77, 0xfc, 0x00, 0x20, 0x0b, 0xe0, 0x13, 0x68, - 0x23, 0xf0, 0x0f, 0x03, 0x0b, 0x43, 0x13, 0x60, 0x13, 0x68, 0x03, 0xf0, - 0x0f, 0x03, 0x8b, 0x42, 0x3f, 0xf4, 0x6d, 0xaf, 0x01, 0x20, 0xbd, 0xe8, - 0xf0, 0x81, 0x36, 0x49, 0x26, 0x69, 0x88, 0x69, 0x00, 0xf0, 0x70, 0x00, - 0x86, 0x42, 0x7f, 0xf6, 0x66, 0xaf, 0x8a, 0x69, 0x22, 0xf0, 0x70, 0x02, - 0x32, 0x43, 0x8a, 0x61, 0x5f, 0xe7, 0x2f, 0x4b, 0xa1, 0x68, 0x9a, 0x69, - 0x22, 0xf4, 0x70, 0x62, 0x0a, 0x43, 0x9a, 0x61, 0x62, 0x68, 0x1b, 0x68, - 0x02, 0x2a, 0x1c, 0xd1, 0x13, 0xf4, 0x00, 0x3f, 0xe0, 0xd0, 0x28, 0x4e, - 0x41, 0xf2, 0x88, 0x38, 0x33, 0x69, 0x23, 0xf0, 0x07, 0x03, 0x13, 0x43, - 0x33, 0x61, 0xfd, 0xf7, 0x7f, 0xfc, 0x07, 0x46, 0x33, 0x69, 0x62, 0x68, - 0x03, 0xf0, 0x38, 0x03, 0xb3, 0xeb, 0xc2, 0x0f, 0x3f, 0xf4, 0x79, 0xaf, - 0xfd, 0xf7, 0x74, 0xfc, 0xc0, 0x1b, 0x40, 0x45, 0xf2, 0xd9, 0x03, 0x20, - 0xc7, 0xe7, 0x03, 0x2a, 0x02, 0xd1, 0x13, 0xf0, 0x00, 0x7f, 0xdf, 0xe7, - 0x01, 0x2a, 0x02, 0xd1, 0x13, 0xf4, 0x80, 0x7f, 0xda, 0xe7, 0x13, 0xf0, - 0x04, 0x0f, 0xd7, 0xe7, 0x14, 0x49, 0xe6, 0x68, 0x88, 0x69, 0x00, 0xf0, - 0x0f, 0x00, 0x86, 0x42, 0xbf, 0xf4, 0x61, 0xaf, 0x8a, 0x69, 0x22, 0xf0, - 0x0f, 0x02, 0x32, 0x43, 0x8a, 0x61, 0x5a, 0xe7, 0x0a, 0x68, 0x22, 0xf0, - 0x0f, 0x02, 0x2a, 0x43, 0x0a, 0x60, 0x0a, 0x68, 0x02, 0xf0, 0x0f, 0x02, - 0x95, 0x42, 0xa1, 0xd1, 0x56, 0xe7, 0x08, 0x49, 0x25, 0x69, 0x88, 0x69, - 0x00, 0xf0, 0x70, 0x00, 0x85, 0x42, 0xbf, 0xf4, 0x52, 0xaf, 0x8a, 0x69, - 0x22, 0xf0, 0x70, 0x02, 0x2a, 0x43, 0x8a, 0x61, 0x4b, 0xe7, 0x00, 0xbf, - 0x00, 0x20, 0x00, 0x52, 0x00, 0x44, 0x02, 0x58, 0x54, 0xda, 0x01, 0x08, - 0x00, 0x00, 0x00, 0x24, 0xf0, 0xb5, 0xa5, 0xb0, 0x20, 0x22, 0x00, 0x21, - 0x04, 0x46, 0x09, 0xa8, 0x14, 0xf0, 0x16, 0xf9, 0x4c, 0x22, 0x00, 0x21, - 0x11, 0xa8, 0x14, 0xf0, 0x11, 0xf9, 0x56, 0x4b, 0x9b, 0x6a, 0x03, 0xf0, - 0x03, 0x03, 0x02, 0x2b, 0x34, 0xd0, 0x53, 0x4b, 0x02, 0x27, 0x53, 0x4e, - 0x00, 0x25, 0xd3, 0xf8, 0xe0, 0x20, 0x04, 0xa9, 0x30, 0x46, 0x42, 0xf0, - 0x80, 0x02, 0xc3, 0xf8, 0xe0, 0x20, 0xd3, 0xf8, 0xe0, 0x30, 0x07, 0x95, - 0x03, 0xf0, 0x80, 0x03, 0x03, 0x93, 0x03, 0x9b, 0x01, 0x23, 0xcd, 0xe9, - 0x04, 0x73, 0x06, 0x93, 0x01, 0xf0, 0xae, 0xff, 0x0a, 0x20, 0x02, 0xf0, - 0x8d, 0xf9, 0xb7, 0x61, 0xfd, 0xf7, 0xaa, 0xfc, 0x45, 0x4b, 0xf4, 0xb9, - 0x01, 0x94, 0xda, 0x6a, 0x22, 0xf0, 0x01, 0x02, 0xda, 0x62, 0xdb, 0x6a, - 0x03, 0xf0, 0x01, 0x03, 0x01, 0x93, 0x41, 0x4b, 0x9a, 0x69, 0x42, 0xf4, - 0x40, 0x42, 0x9a, 0x61, 0x9b, 0x69, 0x03, 0xf4, 0x40, 0x43, 0x01, 0x93, - 0x01, 0x9b, 0x1f, 0xe0, 0x01, 0x21, 0x09, 0xa8, 0xcd, 0xe9, 0x09, 0x11, - 0xff, 0xf7, 0x9e, 0xfe, 0x00, 0x28, 0xc2, 0xd0, 0x00, 0x20, 0x25, 0xb0, - 0xf0, 0xbd, 0x02, 0x95, 0xda, 0x6a, 0x22, 0xf0, 0x01, 0x02, 0xda, 0x62, - 0xdb, 0x6a, 0x33, 0x4a, 0x03, 0xf0, 0x01, 0x03, 0x02, 0x93, 0x93, 0x69, - 0x23, 0xf4, 0x40, 0x43, 0x43, 0xf4, 0x80, 0x43, 0x93, 0x61, 0x93, 0x69, - 0x03, 0xf4, 0x40, 0x43, 0x02, 0x93, 0x02, 0x9b, 0x2b, 0x4a, 0x93, 0x69, - 0x9d, 0x04, 0xfc, 0xd5, 0x21, 0x21, 0x4f, 0xf4, 0xa0, 0x23, 0x05, 0x22, - 0x00, 0x2c, 0x4f, 0xf0, 0x08, 0x05, 0x11, 0xa8, 0x1c, 0x92, 0x0c, 0xbf, - 0xa0, 0x22, 0x28, 0x22, 0x21, 0x95, 0xcd, 0xe9, 0x11, 0x13, 0x01, 0x23, - 0x1d, 0x92, 0x00, 0x22, 0x17, 0x93, 0x02, 0x23, 0x23, 0x92, 0x1e, 0x93, - 0x20, 0x93, 0x22, 0x92, 0xcd, 0xe9, 0x1a, 0x33, 0x0a, 0x23, 0x1f, 0x93, - 0xfd, 0xf7, 0xb4, 0xfd, 0x01, 0x46, 0x00, 0x28, 0xc2, 0xd1, 0x3f, 0x22, - 0x03, 0x23, 0xcd, 0xe9, 0x09, 0x23, 0x40, 0x23, 0x4f, 0xf4, 0x80, 0x62, - 0xcd, 0xe9, 0x0b, 0x05, 0xcd, 0xe9, 0x0e, 0x32, 0x0d, 0x93, 0x10, 0x93, - 0xe4, 0xb1, 0x09, 0xa8, 0xff, 0xf7, 0x4e, 0xfe, 0x00, 0x28, 0xaf, 0xd1, - 0x0c, 0x4b, 0x01, 0x20, 0x1a, 0x68, 0x42, 0xf0, 0x80, 0x02, 0x1a, 0x60, - 0xd3, 0xf8, 0xf4, 0x20, 0x42, 0xf0, 0x02, 0x02, 0xc3, 0xf8, 0xf4, 0x20, - 0xd3, 0xf8, 0xf4, 0x30, 0x07, 0x4a, 0x03, 0xf0, 0x02, 0x03, 0x00, 0x93, - 0x00, 0x9b, 0x13, 0x6a, 0x43, 0xf0, 0x01, 0x03, 0x13, 0x62, 0x98, 0xe7, - 0x04, 0x21, 0xe0, 0xe7, 0x00, 0x44, 0x02, 0x58, 0x00, 0x1c, 0x02, 0x58, - 0x00, 0x04, 0x00, 0x58, 0x00, 0x48, 0x02, 0x58, 0x90, 0xf8, 0xbc, 0x23, - 0x03, 0x68, 0x01, 0x2a, 0x21, 0xd0, 0x01, 0x22, 0x80, 0xf8, 0xbc, 0x23, - 0x82, 0x6a, 0x01, 0x2a, 0x06, 0xd1, 0x82, 0x69, 0x01, 0x2a, 0x03, 0xd0, - 0x9a, 0x6b, 0x42, 0xf4, 0x80, 0x32, 0x9a, 0x63, 0x9a, 0x68, 0x42, 0xf0, - 0x01, 0x02, 0x9a, 0x60, 0xd3, 0xf8, 0x00, 0x2e, 0x22, 0xf0, 0x03, 0x02, - 0xc3, 0xf8, 0x00, 0x2e, 0xd3, 0xf8, 0x04, 0x28, 0x22, 0xf0, 0x02, 0x02, - 0xc3, 0xf8, 0x04, 0x28, 0x00, 0x23, 0x80, 0xf8, 0xbc, 0x33, 0x18, 0x46, - 0x70, 0x47, 0x02, 0x20, 0x70, 0x47, 0x00, 0x00, 0x30, 0xb5, 0x03, 0x9d, - 0xc1, 0xf3, 0x09, 0x01, 0x04, 0x68, 0x45, 0xea, 0x02, 0x42, 0x60, 0x68, - 0x1a, 0x43, 0x04, 0x4b, 0x43, 0xea, 0x55, 0x53, 0x0a, 0x43, 0x20, 0xea, - 0x03, 0x00, 0x02, 0x43, 0x62, 0x60, 0x30, 0xbd, 0xff, 0x63, 0xff, 0x03, - 0x2d, 0xe9, 0xf3, 0x41, 0x04, 0x46, 0x88, 0x46, 0x09, 0xf0, 0xc5, 0xf9, - 0xd4, 0xf8, 0x90, 0x50, 0x04, 0xf1, 0x34, 0x00, 0x35, 0xf0, 0x00, 0x75, - 0x0d, 0xd1, 0x4f, 0xf0, 0x00, 0x73, 0x84, 0xf8, 0x94, 0x50, 0xc4, 0xf8, - 0x90, 0x30, 0x94, 0xf8, 0x80, 0x30, 0x03, 0x2b, 0x7e, 0xd8, 0xdf, 0xe8, - 0x03, 0xf0, 0x05, 0x77, 0x79, 0x7b, 0x77, 0x48, 0x08, 0xf0, 0x3c, 0xfc, - 0x76, 0x4e, 0x77, 0x4a, 0x77, 0x4f, 0x42, 0xf8, 0x23, 0x00, 0xb4, 0xf9, - 0x8c, 0x30, 0xb9, 0x68, 0x03, 0xf1, 0x10, 0x0c, 0xb4, 0xf9, 0x8e, 0x20, - 0x41, 0xf8, 0x2c, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xb9, 0x68, 0x02, 0xf1, - 0x10, 0x0c, 0x41, 0xf8, 0x2c, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0x00, 0x2b, - 0x60, 0xdb, 0x03, 0xf1, 0x60, 0x41, 0x20, 0x26, 0x01, 0xf5, 0x61, 0x41, - 0x81, 0xf8, 0x00, 0x63, 0x00, 0x2a, 0x5e, 0xdb, 0x02, 0xf1, 0x60, 0x41, - 0x20, 0x26, 0x00, 0x2b, 0x01, 0xf5, 0x61, 0x41, 0x81, 0xf8, 0x00, 0x63, - 0x5e, 0xda, 0x01, 0x23, 0x51, 0x09, 0x02, 0xf0, 0x1f, 0x02, 0x03, 0xfa, - 0x02, 0xf2, 0x61, 0x4b, 0x43, 0xf8, 0x21, 0x20, 0x94, 0xf8, 0x75, 0x30, - 0x20, 0x2b, 0x40, 0xf0, 0xa1, 0x80, 0x94, 0xf8, 0x74, 0x30, 0x01, 0x2b, - 0x00, 0xf0, 0x9c, 0x80, 0x01, 0x23, 0xd4, 0xf8, 0x90, 0x20, 0xc4, 0xf8, - 0x58, 0x80, 0x84, 0xf8, 0x74, 0x30, 0x21, 0x23, 0x84, 0xf8, 0x75, 0x30, - 0x10, 0x23, 0x84, 0xf8, 0x76, 0x30, 0x00, 0x23, 0xa3, 0x67, 0x02, 0x23, - 0xa4, 0xf8, 0x5e, 0x30, 0x52, 0x4b, 0x22, 0x66, 0xa3, 0x66, 0xb4, 0xf8, - 0x5e, 0x30, 0x9b, 0xb2, 0xff, 0x2b, 0x3c, 0xd9, 0xff, 0x23, 0xa4, 0xf8, - 0x5c, 0x30, 0x4f, 0xf0, 0x80, 0x73, 0x61, 0x6e, 0x11, 0x29, 0x04, 0xd1, - 0xaa, 0x2a, 0x02, 0xd0, 0xb2, 0xf5, 0x2a, 0x4f, 0x3c, 0xd1, 0x22, 0x6e, - 0xaa, 0x2a, 0x32, 0xd1, 0x00, 0x22, 0x22, 0x66, 0xb4, 0xf8, 0x5e, 0x20, - 0x92, 0xb2, 0xff, 0x2a, 0x00, 0xd8, 0x23, 0x6e, 0x43, 0x4a, 0x30, 0xe0, - 0x43, 0x4e, 0x8c, 0xe7, 0x43, 0x4e, 0x8a, 0xe7, 0x43, 0x4e, 0x88, 0xe7, - 0x00, 0x26, 0x86, 0xe7, 0x03, 0xf0, 0x0f, 0x01, 0x04, 0x39, 0x0f, 0x44, - 0x20, 0x21, 0x39, 0x76, 0x9e, 0xe7, 0x02, 0xf0, 0x0f, 0x06, 0x3e, 0x49, - 0x00, 0x2b, 0x31, 0x44, 0x4f, 0xf0, 0x20, 0x06, 0x0e, 0x76, 0xa9, 0xdb, - 0x5e, 0x09, 0x03, 0xf0, 0x1f, 0x01, 0x01, 0x23, 0x8b, 0x40, 0x32, 0x49, - 0x41, 0xf8, 0x26, 0x30, 0x00, 0x2a, 0x96, 0xda, 0x9e, 0xe7, 0xb4, 0xf8, - 0x5e, 0x30, 0xa4, 0xf8, 0x5c, 0x30, 0x23, 0x6e, 0xc1, 0xe7, 0x22, 0x6e, - 0xb2, 0xf5, 0x2a, 0x4f, 0xca, 0xd1, 0x4f, 0xf0, 0x00, 0x72, 0xc6, 0xe7, - 0x00, 0x22, 0x00, 0x92, 0x10, 0x21, 0x94, 0xf8, 0x5c, 0x20, 0xff, 0xf7, - 0x25, 0xff, 0x00, 0x23, 0x2b, 0x4a, 0x84, 0xf8, 0x74, 0x30, 0xa3, 0x6e, - 0x93, 0x42, 0x03, 0xd0, 0x29, 0x4a, 0x93, 0x42, 0x18, 0xbf, 0xf2, 0x25, - 0x62, 0x6b, 0x13, 0x68, 0x1d, 0x43, 0x27, 0x4b, 0x15, 0x60, 0x1d, 0x68, - 0xd4, 0xf8, 0x84, 0x30, 0xb5, 0xfb, 0xf3, 0xf3, 0x5a, 0x25, 0x5d, 0x43, - 0x94, 0xf8, 0x94, 0x30, 0x13, 0xf0, 0x1e, 0x0f, 0x01, 0xd1, 0x01, 0x3d, - 0x1d, 0xd1, 0xb4, 0xf9, 0x8e, 0x60, 0xb4, 0xf9, 0x8c, 0x00, 0x01, 0xf0, - 0xbd, 0xff, 0x30, 0x46, 0x01, 0xf0, 0xba, 0xff, 0x1d, 0xb1, 0x94, 0xf8, - 0x94, 0x30, 0x08, 0x2b, 0x13, 0xd0, 0x00, 0x21, 0x04, 0xf1, 0x30, 0x00, - 0xff, 0xf7, 0x9a, 0xfa, 0x6f, 0xf0, 0x01, 0x05, 0x20, 0x46, 0x09, 0xf0, - 0xc6, 0xf8, 0xa8, 0x1e, 0x18, 0xbf, 0x01, 0x20, 0x02, 0xb0, 0xbd, 0xe8, - 0xf0, 0x81, 0x01, 0x20, 0x07, 0xf0, 0x3c, 0xfe, 0xd6, 0xe7, 0x02, 0x25, - 0xf0, 0xe7, 0x00, 0xbf, 0xeb, 0xd9, 0x01, 0x08, 0x19, 0x12, 0x00, 0x08, - 0x34, 0x0e, 0x00, 0x24, 0x00, 0xed, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe0, - 0x07, 0x8a, 0x00, 0x08, 0x00, 0x20, 0x00, 0x80, 0x35, 0x12, 0x00, 0x08, - 0x51, 0x12, 0x00, 0x08, 0x6d, 0x12, 0x00, 0x08, 0xfc, 0xec, 0x00, 0xe0, - 0x1d, 0x7d, 0x00, 0x08, 0x49, 0x79, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, - 0x83, 0x6f, 0x37, 0xb5, 0x04, 0x46, 0x00, 0x2b, 0x62, 0xd0, 0xd0, 0xf8, - 0x88, 0x30, 0x00, 0x2b, 0x5e, 0xd0, 0x90, 0xf8, 0x70, 0x20, 0x90, 0xf8, - 0x41, 0x10, 0x00, 0x2a, 0x14, 0xbf, 0x4f, 0xf0, 0x00, 0x72, 0x00, 0x22, - 0x20, 0x29, 0xc2, 0x65, 0x45, 0xd1, 0x90, 0xf8, 0x40, 0x10, 0x01, 0x29, - 0x41, 0xd0, 0x01, 0x25, 0xc1, 0x6e, 0xd0, 0xf8, 0x84, 0x00, 0x9b, 0xb2, - 0x84, 0xf8, 0x40, 0x50, 0x22, 0x25, 0x60, 0x62, 0x84, 0xf8, 0x41, 0x50, - 0x10, 0x25, 0x84, 0xf8, 0x42, 0x50, 0x00, 0x25, 0x65, 0x64, 0x63, 0x85, - 0x20, 0x4b, 0xe2, 0x62, 0x63, 0x63, 0x63, 0x8d, 0x9b, 0xb2, 0xff, 0x2b, - 0x2b, 0xd9, 0xff, 0x23, 0x23, 0x85, 0x4f, 0xf0, 0x80, 0x73, 0x22, 0x6b, - 0x12, 0x2a, 0x4f, 0xf0, 0x00, 0x02, 0x09, 0xd0, 0xe0, 0x6a, 0xaa, 0x28, - 0x23, 0xd1, 0xe2, 0x62, 0x62, 0x8d, 0x92, 0xb2, 0xff, 0x2a, 0x00, 0xd8, - 0xe3, 0x6a, 0x15, 0x4a, 0x89, 0xb2, 0x00, 0x92, 0x20, 0x46, 0x94, 0xf8, - 0x28, 0x20, 0xff, 0xf7, 0x7b, 0xfe, 0x62, 0x6b, 0x11, 0x49, 0x00, 0x23, - 0x8a, 0x42, 0x84, 0xf8, 0x40, 0x30, 0x04, 0xd0, 0x0f, 0x4b, 0x9a, 0x42, - 0x14, 0xbf, 0xf4, 0x23, 0x00, 0x23, 0x21, 0x68, 0x0a, 0x68, 0x13, 0x43, - 0x0b, 0x60, 0x03, 0xb0, 0x30, 0xbd, 0x63, 0x8d, 0x23, 0x85, 0xe3, 0x6a, - 0xd3, 0xe7, 0xe2, 0x6a, 0xb2, 0xf5, 0x2a, 0x4f, 0xd8, 0xd1, 0x4f, 0xf0, - 0x00, 0x72, 0xd4, 0xe7, 0x08, 0x23, 0x84, 0xf8, 0x60, 0x30, 0xee, 0xe7, - 0x07, 0x8a, 0x00, 0x08, 0x00, 0x24, 0x00, 0x80, 0x1d, 0x7d, 0x00, 0x08, - 0x49, 0x79, 0x00, 0x08, 0x03, 0x68, 0x9a, 0x69, 0x91, 0x07, 0x01, 0xd5, - 0x00, 0x22, 0x9a, 0x62, 0x9a, 0x69, 0xd2, 0x07, 0x03, 0xd4, 0x9a, 0x69, - 0x42, 0xf0, 0x01, 0x02, 0x9a, 0x61, 0x70, 0x47, 0x70, 0xb5, 0x3c, 0x4a, - 0x00, 0x25, 0x90, 0xf8, 0x41, 0x30, 0x04, 0x46, 0x80, 0xf8, 0x42, 0x50, - 0x28, 0x3b, 0xc2, 0x62, 0x45, 0x85, 0x42, 0x6c, 0x02, 0x2b, 0x41, 0xea, - 0x02, 0x01, 0x41, 0x64, 0x2b, 0xd8, 0x03, 0x21, 0xf9, 0xf7, 0x3e, 0xfb, - 0x28, 0x23, 0x80, 0xf8, 0x41, 0x30, 0x32, 0x4b, 0xa0, 0x6b, 0x63, 0x63, - 0x23, 0x6b, 0x00, 0x28, 0x36, 0xd0, 0x11, 0x2b, 0x01, 0xd0, 0x21, 0x2b, - 0x32, 0xd1, 0x23, 0x68, 0x1a, 0x68, 0x51, 0x04, 0x03, 0xd5, 0x1a, 0x68, - 0x22, 0xf4, 0x80, 0x42, 0x1a, 0x60, 0x90, 0xf8, 0x35, 0x30, 0x01, 0x2b, - 0x21, 0xd0, 0x28, 0x4b, 0x03, 0x65, 0x00, 0x23, 0x84, 0xf8, 0x40, 0x30, - 0x90, 0xf8, 0x35, 0x30, 0x02, 0x2b, 0x13, 0xd0, 0x80, 0x23, 0x43, 0x65, - 0xa0, 0x6b, 0x03, 0x6d, 0xbd, 0xe8, 0x70, 0x40, 0x18, 0x47, 0x48, 0xf2, - 0x03, 0x01, 0xf9, 0xf7, 0x11, 0xfb, 0x90, 0xf8, 0x41, 0x30, 0x60, 0x2b, - 0x02, 0xd0, 0x20, 0x23, 0x80, 0xf8, 0x41, 0x30, 0x00, 0x23, 0xcd, 0xe7, - 0x01, 0xf0, 0x0a, 0xfe, 0x00, 0x28, 0xe9, 0xd1, 0x70, 0xbd, 0x20, 0x46, - 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0xb6, 0xbb, 0xe0, 0x6b, 0x00, 0x28, - 0xf7, 0xd0, 0x12, 0x2b, 0x01, 0xd0, 0x22, 0x2b, 0xf3, 0xd1, 0x23, 0x68, - 0x1a, 0x68, 0x12, 0x04, 0x03, 0xd5, 0x1a, 0x68, 0x22, 0xf4, 0x00, 0x42, - 0x1a, 0x60, 0x90, 0xf8, 0x35, 0x30, 0x01, 0x2b, 0xe7, 0xd0, 0x0b, 0x4b, - 0x03, 0x65, 0x00, 0x23, 0x84, 0xf8, 0x40, 0x30, 0x90, 0xf8, 0x35, 0x30, - 0x02, 0x2b, 0x03, 0xd0, 0x80, 0x23, 0x43, 0x65, 0xe0, 0x6b, 0xc4, 0xe7, - 0x01, 0xf0, 0xe0, 0xfd, 0x00, 0x28, 0xd5, 0xd0, 0xf8, 0xe7, 0x00, 0xbf, - 0x00, 0x00, 0xff, 0xff, 0xd5, 0x7a, 0x00, 0x08, 0x73, 0x6f, 0x00, 0x08, - 0xf8, 0xb5, 0x03, 0x68, 0x20, 0x22, 0x04, 0x46, 0x0e, 0x46, 0x1f, 0x68, - 0x90, 0xf8, 0x41, 0x50, 0xda, 0x61, 0x05, 0xf0, 0xf7, 0x05, 0x21, 0x2d, - 0x70, 0xd1, 0x48, 0xf2, 0x01, 0x01, 0xf9, 0xf7, 0xc1, 0xfa, 0x25, 0x63, - 0x23, 0x68, 0x20, 0x46, 0x5a, 0x68, 0x42, 0xf4, 0x00, 0x42, 0x5a, 0x60, - 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x72, 0x22, 0xf4, 0x8b, 0x32, 0x22, 0xf4, - 0xff, 0x72, 0x22, 0xf0, 0x01, 0x02, 0x5a, 0x60, 0xff, 0xf7, 0x4e, 0xff, - 0x79, 0x04, 0x5c, 0xd5, 0x22, 0x68, 0x13, 0x68, 0x23, 0xf4, 0x80, 0x43, - 0x13, 0x60, 0xa3, 0x6b, 0x13, 0xb3, 0x1b, 0x68, 0x38, 0x4a, 0x93, 0x42, - 0x1b, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x18, 0xd0, 0x18, 0x32, 0x93, 0x42, - 0x15, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x12, 0xd0, 0x18, 0x32, 0x93, 0x42, - 0x0f, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x0c, 0xd0, 0x18, 0x32, 0x93, 0x42, - 0x09, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x06, 0xd0, 0x02, 0xf5, 0x56, 0x72, - 0x93, 0x42, 0x02, 0xd0, 0x18, 0x32, 0x93, 0x42, 0xff, 0xd0, 0x5b, 0x68, - 0x9b, 0xb2, 0x63, 0x85, 0x73, 0x07, 0x10, 0xd5, 0x23, 0x68, 0x26, 0xf0, - 0x04, 0x06, 0x5a, 0x6a, 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, - 0x63, 0x62, 0x23, 0x8d, 0x2b, 0xb1, 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, - 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x63, 0x8d, 0x9b, 0xb2, 0x1b, 0xb1, - 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x63, 0x64, 0x00, 0x23, 0x84, 0xf8, - 0x42, 0x30, 0x65, 0x6c, 0x63, 0x63, 0xdd, 0xb1, 0x61, 0x6c, 0x20, 0x46, - 0xff, 0xf7, 0x0c, 0xff, 0x94, 0xf8, 0x41, 0x30, 0x28, 0x2b, 0x22, 0xd1, - 0x31, 0x46, 0x20, 0x46, 0xbd, 0xe8, 0xf8, 0x40, 0xf9, 0xf7, 0xa0, 0xba, - 0x22, 0x2d, 0x91, 0xd1, 0x48, 0xf2, 0x02, 0x01, 0x8b, 0xe7, 0x3a, 0x04, - 0xca, 0xd5, 0x22, 0x68, 0x13, 0x68, 0x23, 0xf4, 0x00, 0x43, 0x13, 0x60, - 0xe3, 0x6b, 0x9f, 0xe7, 0xe3, 0x6a, 0x13, 0xf5, 0x80, 0x3f, 0x0b, 0xd0, - 0x20, 0x46, 0xf9, 0xf7, 0xb9, 0xfa, 0x07, 0x4b, 0xe3, 0x62, 0x20, 0x23, - 0x84, 0xf8, 0x40, 0x50, 0x84, 0xf8, 0x41, 0x30, 0x25, 0x63, 0xf8, 0xbd, - 0x94, 0xf8, 0x41, 0x30, 0xf5, 0xe7, 0x00, 0xbf, 0x10, 0x00, 0x02, 0x40, - 0x00, 0x00, 0xff, 0xff, 0xf8, 0xb5, 0x90, 0xf8, 0x40, 0x30, 0x04, 0x46, - 0x0e, 0x46, 0x15, 0x46, 0x01, 0x2b, 0xc7, 0x6a, 0x00, 0xf0, 0xb7, 0x80, - 0x01, 0x23, 0x8a, 0x06, 0x80, 0xf8, 0x40, 0x30, 0x03, 0xd5, 0xab, 0x06, - 0x01, 0xd5, 0xff, 0xf7, 0x49, 0xff, 0xf2, 0x06, 0x40, 0xf1, 0xa3, 0x80, - 0xeb, 0x06, 0x40, 0xf1, 0xa0, 0x80, 0xe9, 0x0b, 0xa8, 0x0b, 0x41, 0xea, - 0x95, 0x35, 0xed, 0x07, 0x40, 0xf1, 0x95, 0x80, 0xe2, 0x6b, 0x52, 0xb3, - 0x11, 0xf0, 0x01, 0x03, 0x26, 0xd0, 0x13, 0x68, 0x4e, 0x4a, 0x93, 0x42, - 0x1e, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x1b, 0xd0, 0x18, 0x32, 0x93, 0x42, - 0x18, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x15, 0xd0, 0x18, 0x32, 0x93, 0x42, - 0x12, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x0f, 0xd0, 0x18, 0x32, 0x93, 0x42, - 0x0c, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x09, 0xd0, 0x02, 0xf5, 0x56, 0x72, - 0x93, 0x42, 0x05, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x02, 0xd0, 0x18, 0x32, - 0x93, 0x42, 0xff, 0xd0, 0x5b, 0x68, 0xb3, 0xfa, 0x83, 0xf3, 0x5b, 0x09, - 0x1a, 0x46, 0xa3, 0x6b, 0x4b, 0xb3, 0xc1, 0x07, 0x27, 0xd5, 0x1b, 0x68, - 0x38, 0x49, 0x8b, 0x42, 0x1e, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x1b, 0xd0, - 0x18, 0x31, 0x8b, 0x42, 0x18, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x15, 0xd0, - 0x18, 0x31, 0x8b, 0x42, 0x12, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x0f, 0xd0, - 0x18, 0x31, 0x8b, 0x42, 0x0c, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x09, 0xd0, - 0x01, 0xf5, 0x56, 0x71, 0x8b, 0x42, 0x05, 0xd0, 0x18, 0x31, 0x8b, 0x42, - 0x02, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0xff, 0xd0, 0x5b, 0x68, 0xb3, 0xfa, - 0x83, 0xf3, 0x5b, 0x09, 0x0b, 0xb9, 0x01, 0x2a, 0x1f, 0xd1, 0x94, 0xf8, - 0x41, 0x30, 0x28, 0x2b, 0x0a, 0xd1, 0xb7, 0xf1, 0x00, 0x7f, 0x07, 0xd1, - 0x31, 0x46, 0x20, 0x46, 0xf9, 0xf7, 0xf4, 0xf9, 0x00, 0x20, 0x84, 0xf8, - 0x40, 0x00, 0xf8, 0xbd, 0x94, 0xf8, 0x41, 0x20, 0x23, 0x68, 0x29, 0x2a, - 0x4f, 0xf0, 0x10, 0x02, 0xda, 0x61, 0xf3, 0xd1, 0x17, 0xf5, 0x80, 0x3f, - 0xf0, 0xd0, 0x20, 0x46, 0xff, 0xf7, 0x36, 0xfe, 0xf9, 0xf7, 0x0e, 0xfa, - 0xea, 0xe7, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x37, 0xf0, 0x80, 0x72, - 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x63, 0x64, 0x94, 0xf8, 0x41, 0x30, - 0xdb, 0xb2, 0xdd, 0xd1, 0x03, 0xf0, 0xf7, 0x03, 0x21, 0x2b, 0x01, 0xd1, - 0x23, 0x63, 0x01, 0xe0, 0x22, 0x2b, 0xfb, 0xd0, 0x61, 0x6c, 0x20, 0x46, - 0xff, 0xf7, 0x28, 0xfe, 0xd0, 0xe7, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, - 0xcc, 0xe7, 0x32, 0x07, 0xca, 0xd5, 0x2b, 0x07, 0xc8, 0xd5, 0x20, 0x46, - 0xf9, 0xf7, 0x8f, 0xf9, 0xc4, 0xe7, 0x02, 0x20, 0xc5, 0xe7, 0x00, 0xbf, - 0x10, 0x00, 0x02, 0x40, 0xf8, 0xb5, 0x90, 0xf8, 0x40, 0x30, 0x04, 0x46, - 0x0d, 0x46, 0x16, 0x46, 0x01, 0x2b, 0xc7, 0x6a, 0x7d, 0xd0, 0x01, 0x23, - 0x8a, 0x06, 0x80, 0xf8, 0x40, 0x30, 0x03, 0xd5, 0xb3, 0x06, 0x01, 0xd5, - 0xff, 0xf7, 0x84, 0xfe, 0xe8, 0x06, 0x34, 0xd5, 0xf1, 0x06, 0x32, 0xd5, - 0x63, 0x8d, 0x9b, 0xb2, 0x03, 0xbb, 0x94, 0xf8, 0x41, 0x30, 0x28, 0x2b, - 0x0a, 0xd1, 0xb7, 0xf1, 0x00, 0x7f, 0x07, 0xd1, 0x29, 0x46, 0x20, 0x46, - 0xf9, 0xf7, 0x90, 0xf9, 0x00, 0x20, 0x84, 0xf8, 0x40, 0x00, 0xf8, 0xbd, - 0x94, 0xf8, 0x41, 0x20, 0x23, 0x68, 0x29, 0x2a, 0x4f, 0xf0, 0x10, 0x02, - 0xda, 0x61, 0xf3, 0xd1, 0x17, 0xf5, 0x80, 0x3f, 0xf0, 0xd0, 0x20, 0x46, - 0xff, 0xf7, 0xd2, 0xfd, 0x20, 0x46, 0xf9, 0xf7, 0xa9, 0xf9, 0xe9, 0xe7, - 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, - 0x63, 0x64, 0x37, 0xf0, 0x80, 0x73, 0xdf, 0xd1, 0x61, 0x6c, 0x20, 0x46, - 0xff, 0xf7, 0xce, 0xfd, 0xda, 0xe7, 0x6a, 0x07, 0x1a, 0xd5, 0x73, 0x07, - 0x18, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x6b, 0xb1, 0x23, 0x68, 0x5a, 0x6a, - 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, - 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, - 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, 0xc1, 0xd1, 0x17, 0xf5, 0x80, 0x3f, - 0xbe, 0xd0, 0xcf, 0xe7, 0x28, 0x07, 0x05, 0xd5, 0x31, 0x07, 0x03, 0xd5, - 0x20, 0x46, 0xf9, 0xf7, 0x1c, 0xf9, 0xb5, 0xe7, 0xaa, 0x07, 0xb3, 0xd5, - 0xb3, 0x07, 0xb1, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x6b, 0xb1, 0x63, 0x6a, - 0x22, 0x68, 0x13, 0xf8, 0x01, 0x1b, 0x91, 0x62, 0x63, 0x62, 0x63, 0x8d, - 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x23, 0x8d, 0x01, 0x3b, 0x23, 0x85, - 0xa0, 0xe7, 0x37, 0xf0, 0x80, 0x73, 0xaf, 0xd0, 0x9c, 0xe7, 0x02, 0x20, - 0x9d, 0xe7, 0x37, 0xb5, 0x03, 0x68, 0x20, 0x22, 0x04, 0x46, 0x0d, 0x46, - 0xda, 0x61, 0x90, 0xf8, 0x41, 0x30, 0x21, 0x2b, 0x37, 0xd1, 0x01, 0x21, - 0xf9, 0xf7, 0xd2, 0xf8, 0x11, 0x23, 0x23, 0x63, 0x23, 0x68, 0xe9, 0x06, - 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x72, 0x22, 0xf4, 0x8b, 0x32, 0x22, 0xf4, - 0xff, 0x72, 0x22, 0xf0, 0x01, 0x02, 0x5a, 0x60, 0x4f, 0xf0, 0x00, 0x02, - 0x62, 0x63, 0xa2, 0xf5, 0x80, 0x32, 0xe2, 0x62, 0x05, 0xd5, 0x10, 0x22, - 0xda, 0x61, 0x62, 0x6c, 0x42, 0xf0, 0x04, 0x02, 0x62, 0x64, 0x94, 0xf8, - 0x41, 0x20, 0x60, 0x2a, 0x05, 0xd1, 0x6a, 0x07, 0x03, 0xd5, 0x5b, 0x6a, - 0xdb, 0xb2, 0x01, 0x93, 0x01, 0x9b, 0x20, 0x46, 0xff, 0xf7, 0x4a, 0xfd, - 0x63, 0x6c, 0x94, 0xf8, 0x41, 0x20, 0x60, 0x2a, 0x00, 0xd0, 0x7b, 0xb1, - 0x61, 0x6c, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, 0xff, 0xf7, - 0x4b, 0xbd, 0x90, 0xf8, 0x41, 0x30, 0x22, 0x2b, 0xc8, 0xd1, 0x02, 0x21, - 0xf9, 0xf7, 0x96, 0xf8, 0x12, 0x23, 0xc2, 0xe7, 0x94, 0xf8, 0x41, 0x20, - 0x21, 0x2a, 0x12, 0xd1, 0x20, 0x22, 0x84, 0xf8, 0x40, 0x30, 0x84, 0xf8, - 0x41, 0x20, 0x23, 0x63, 0x94, 0xf8, 0x42, 0x20, 0x84, 0xf8, 0x42, 0x30, - 0x40, 0x2a, 0x01, 0xd1, 0x03, 0xb0, 0x30, 0xbd, 0x03, 0xb0, 0xbd, 0xe8, - 0x30, 0x40, 0xff, 0xf7, 0xa9, 0xbc, 0x94, 0xf8, 0x41, 0x20, 0x22, 0x2a, - 0xf4, 0xd1, 0x20, 0x22, 0x84, 0xf8, 0x40, 0x30, 0x84, 0xf8, 0x41, 0x20, - 0x23, 0x63, 0x94, 0xf8, 0x42, 0x20, 0x84, 0xf8, 0x42, 0x30, 0x40, 0x2a, - 0xe8, 0xd0, 0x08, 0x23, 0x84, 0xf8, 0x60, 0x30, 0xe4, 0xe7, 0x38, 0xb5, - 0x00, 0x25, 0x80, 0xf8, 0x42, 0x50, 0x90, 0xf8, 0x41, 0x30, 0x21, 0x2b, - 0x4f, 0xf0, 0x20, 0x03, 0x80, 0xf8, 0x41, 0x30, 0x0b, 0xd1, 0x11, 0x23, - 0x45, 0x63, 0x01, 0x21, 0x03, 0x63, 0xf9, 0xf7, 0x57, 0xf8, 0x80, 0xf8, - 0x40, 0x50, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0x7d, 0xbc, 0x12, 0x23, - 0x02, 0x21, 0x45, 0x63, 0x03, 0x63, 0xf9, 0xf7, 0x4b, 0xf8, 0x08, 0x23, - 0x80, 0xf8, 0x40, 0x50, 0x80, 0xf8, 0x60, 0x30, 0x38, 0xbd, 0x00, 0x00, - 0x13, 0xb5, 0x90, 0xf8, 0x40, 0x30, 0x04, 0x46, 0x01, 0x2b, 0x00, 0xf0, - 0x87, 0x80, 0x01, 0x23, 0x80, 0xf8, 0x40, 0x30, 0xcb, 0x06, 0x1e, 0xd5, - 0xd0, 0x06, 0x1c, 0xd5, 0x10, 0x23, 0x22, 0x68, 0x3f, 0x49, 0xd3, 0x61, - 0x63, 0x6c, 0x43, 0xf0, 0x04, 0x03, 0x63, 0x64, 0x63, 0x6b, 0x8b, 0x42, - 0x0f, 0xd0, 0x3c, 0x49, 0x8b, 0x42, 0x0c, 0xbf, 0x60, 0x23, 0x20, 0x23, - 0x11, 0x68, 0x20, 0x46, 0x0b, 0x43, 0x13, 0x60, 0xff, 0xf7, 0xc0, 0xfc, - 0x00, 0x20, 0x84, 0xf8, 0x40, 0x00, 0x02, 0xb0, 0x10, 0xbd, 0x60, 0x23, - 0xf2, 0xe7, 0x0b, 0x06, 0x43, 0xd5, 0x50, 0x06, 0x41, 0xd5, 0x23, 0x68, - 0x1a, 0x68, 0x22, 0xf0, 0x40, 0x02, 0x1a, 0x60, 0x62, 0x8d, 0x92, 0xb2, - 0x6a, 0xb3, 0x59, 0x68, 0x63, 0x8d, 0xc1, 0xf3, 0x09, 0x01, 0x9b, 0xb2, - 0xff, 0x2b, 0x1b, 0xd9, 0xff, 0x23, 0x23, 0x85, 0x4f, 0xf0, 0x80, 0x73, - 0x00, 0x22, 0x20, 0x46, 0x00, 0x92, 0x94, 0xf8, 0x28, 0x20, 0xff, 0xf7, - 0xed, 0xfa, 0x63, 0x8d, 0x22, 0x8d, 0x9b, 0x1a, 0x9b, 0xb2, 0x63, 0x85, - 0x94, 0xf8, 0x41, 0x30, 0x22, 0x2b, 0x23, 0x68, 0x1a, 0x68, 0x0c, 0xbf, - 0x42, 0xf4, 0x00, 0x42, 0x42, 0xf4, 0x80, 0x42, 0x1a, 0x60, 0xc9, 0xe7, - 0x63, 0x8d, 0x23, 0x85, 0xe3, 0x6a, 0x13, 0xf5, 0x80, 0x3f, 0x01, 0xd0, - 0xe3, 0x6a, 0xdf, 0xe7, 0x4f, 0xf0, 0x00, 0x73, 0xdc, 0xe7, 0x5b, 0x68, - 0x9a, 0x01, 0x03, 0xd4, 0x20, 0x46, 0xff, 0xf7, 0x70, 0xff, 0xb7, 0xe7, - 0x40, 0x21, 0x20, 0x46, 0xff, 0xf7, 0x82, 0xfc, 0xb2, 0xe7, 0x4b, 0x06, - 0x12, 0xd5, 0x50, 0x06, 0x10, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, - 0xf2, 0xd1, 0x23, 0x68, 0x5a, 0x68, 0x92, 0x01, 0xa6, 0xd4, 0xe2, 0x6a, - 0x12, 0xf5, 0x80, 0x3f, 0xe6, 0xd1, 0x5a, 0x68, 0x42, 0xf4, 0x80, 0x42, - 0x5a, 0x60, 0x9d, 0xe7, 0x88, 0x06, 0x9b, 0xd5, 0x93, 0x06, 0x99, 0xd5, - 0x20, 0x46, 0xff, 0xf7, 0xd8, 0xfe, 0x95, 0xe7, 0x02, 0x20, 0x96, 0xe7, - 0x1d, 0x7d, 0x00, 0x08, 0x49, 0x79, 0x00, 0x08, 0x10, 0xb5, 0x04, 0x46, - 0xef, 0xf3, 0x05, 0x83, 0x13, 0xb1, 0x6f, 0xf0, 0x05, 0x00, 0x10, 0xbd, - 0x0f, 0xf0, 0x30, 0xfd, 0x00, 0x28, 0xf8, 0xd1, 0x20, 0x46, 0x4f, 0xf0, - 0xff, 0x31, 0xdf, 0xf8, 0x08, 0xc0, 0x00, 0xdf, 0xf3, 0xe7, 0x00, 0xbf, - 0x0d, 0x4d, 0x01, 0x08, 0x00, 0x20, 0x70, 0x47, 0x6f, 0xf0, 0x57, 0x00, - 0x70, 0x47, 0x6f, 0xf0, 0x57, 0x00, 0x70, 0x47, 0x03, 0x68, 0x10, 0xb4, - 0x9c, 0x6c, 0x00, 0x23, 0xa4, 0x46, 0x1a, 0x46, 0x5d, 0xf8, 0x04, 0x4b, - 0x60, 0x47, 0x6f, 0xf0, 0x57, 0x00, 0x70, 0x47, 0x43, 0x68, 0x0a, 0x46, - 0x19, 0x68, 0x10, 0xb4, 0x8c, 0x6d, 0x81, 0x68, 0x18, 0x46, 0x23, 0x46, - 0x5d, 0xf8, 0x04, 0x4b, 0x18, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, - 0x18, 0x46, 0x52, 0x6d, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, - 0x18, 0x46, 0x12, 0x6d, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, - 0x18, 0x46, 0xd2, 0x6c, 0x10, 0x47, 0x30, 0xb4, 0x44, 0x68, 0x13, 0x46, - 0x22, 0x68, 0x95, 0x6c, 0x0a, 0x46, 0x81, 0x68, 0x20, 0x46, 0xac, 0x46, - 0x30, 0xbc, 0x60, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, 0x18, 0x46, - 0x52, 0x6c, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, 0x1a, 0x68, 0x18, 0x46, - 0x12, 0x6c, 0x10, 0x47, 0x30, 0xb4, 0x44, 0x68, 0x13, 0x46, 0x22, 0x68, - 0xd5, 0x6b, 0x0a, 0x46, 0x81, 0x68, 0x20, 0x46, 0xac, 0x46, 0x30, 0xbc, - 0x60, 0x47, 0x30, 0xb4, 0x44, 0x68, 0x13, 0x46, 0x22, 0x68, 0x95, 0x6b, - 0x0a, 0x46, 0x81, 0x68, 0x20, 0x46, 0xac, 0x46, 0x30, 0xbc, 0x60, 0x47, - 0x10, 0xb5, 0x04, 0x46, 0x40, 0x68, 0x30, 0xb1, 0x03, 0x68, 0xa1, 0x68, - 0x5b, 0x6b, 0x98, 0x47, 0x00, 0x23, 0x63, 0x60, 0x10, 0xbd, 0x6f, 0xf0, - 0x15, 0x00, 0xfb, 0xe7, 0x38, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xee, 0xff, - 0x05, 0x46, 0x23, 0x68, 0x20, 0x46, 0x5b, 0x68, 0x98, 0x47, 0x28, 0x46, - 0x38, 0xbd, 0x70, 0xb5, 0x0d, 0x46, 0x41, 0x68, 0x04, 0x46, 0x41, 0xb9, - 0x29, 0x68, 0x0e, 0x6b, 0x00, 0xf1, 0x08, 0x01, 0x28, 0x46, 0xb0, 0x47, - 0x00, 0xb9, 0x65, 0x60, 0x70, 0xbd, 0x6f, 0xf0, 0x15, 0x00, 0xfb, 0xe7, - 0x04, 0x4b, 0x10, 0xb5, 0x03, 0x60, 0x04, 0x46, 0x43, 0x68, 0x0b, 0xb1, - 0xff, 0xf7, 0xce, 0xff, 0x20, 0x46, 0x10, 0xbd, 0xe0, 0xe0, 0x01, 0x08, - 0x03, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x60, 0xff, 0xf7, 0xee, 0xff, - 0x20, 0x46, 0x10, 0xbd, 0x60, 0xe1, 0x01, 0x08, 0x43, 0x68, 0x81, 0x68, - 0x1a, 0x68, 0x18, 0x46, 0x52, 0x6f, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, - 0x1a, 0x68, 0x18, 0x46, 0x12, 0x6f, 0x10, 0x47, 0x43, 0x68, 0x81, 0x68, - 0x1a, 0x68, 0x18, 0x46, 0xd2, 0x6e, 0x10, 0x47, 0x43, 0x68, 0x0a, 0x46, - 0x19, 0x68, 0x10, 0xb4, 0x8c, 0x6e, 0x81, 0x68, 0x18, 0x46, 0x23, 0x46, - 0x5d, 0xf8, 0x04, 0x4b, 0x18, 0x47, 0x10, 0xb5, 0x04, 0x46, 0x40, 0x68, - 0x30, 0xb1, 0x03, 0x68, 0xa1, 0x68, 0x1b, 0x6e, 0x98, 0x47, 0x00, 0x23, - 0x63, 0x60, 0x10, 0xbd, 0x6f, 0xf0, 0x15, 0x00, 0xfb, 0xe7, 0x38, 0xb5, - 0x04, 0x46, 0xff, 0xf7, 0xee, 0xff, 0x05, 0x46, 0x23, 0x68, 0x20, 0x46, - 0x5b, 0x68, 0x98, 0x47, 0x28, 0x46, 0x38, 0xbd, 0x38, 0xb5, 0x43, 0x68, - 0x04, 0x46, 0x0d, 0x46, 0x43, 0xb9, 0x0b, 0x68, 0x00, 0xf1, 0x08, 0x01, - 0x28, 0x46, 0xdb, 0x6d, 0x98, 0x47, 0x00, 0xb9, 0x65, 0x60, 0x38, 0xbd, - 0x6f, 0xf0, 0x15, 0x00, 0xfb, 0xe7, 0x00, 0x00, 0x04, 0x4b, 0x10, 0xb5, - 0x03, 0x60, 0x04, 0x46, 0x43, 0x68, 0x0b, 0xb1, 0xff, 0xf7, 0xcd, 0xff, - 0x20, 0x46, 0x10, 0xbd, 0xb4, 0xe0, 0x01, 0x08, 0x03, 0x4b, 0x10, 0xb5, - 0x04, 0x46, 0x03, 0x60, 0xff, 0xf7, 0xee, 0xff, 0x20, 0x46, 0x10, 0xbd, - 0x34, 0xe1, 0x01, 0x08, 0x03, 0x68, 0x01, 0x33, 0x03, 0x60, 0x00, 0x20, - 0x70, 0x47, 0xf7, 0xb5, 0x08, 0x9f, 0x0e, 0x46, 0x04, 0x68, 0x19, 0x46, - 0xc0, 0x69, 0x00, 0x23, 0x25, 0x68, 0x00, 0x97, 0x00, 0x27, 0xe0, 0xfb, - 0x06, 0x23, 0x20, 0x46, 0x01, 0x97, 0x6d, 0x69, 0xa8, 0x47, 0x03, 0xb0, - 0xf0, 0xbd, 0xf7, 0xb5, 0x08, 0x9f, 0x0e, 0x46, 0x04, 0x68, 0x19, 0x46, - 0xc0, 0x69, 0x00, 0x23, 0x25, 0x68, 0x00, 0x97, 0x00, 0x27, 0xe0, 0xfb, - 0x06, 0x23, 0x20, 0x46, 0x01, 0x97, 0xad, 0x69, 0xa8, 0x47, 0x03, 0xb0, - 0xf0, 0xbd, 0x37, 0xb5, 0x04, 0x68, 0xc3, 0x69, 0x00, 0x20, 0x22, 0x68, - 0x00, 0x93, 0x01, 0x90, 0x20, 0x46, 0xd5, 0x69, 0xa1, 0xfb, 0x03, 0x23, - 0xa8, 0x47, 0x03, 0xb0, 0x30, 0xbd, 0x00, 0x68, 0x03, 0x68, 0x1b, 0x69, - 0x18, 0x47, 0x00, 0x28, 0x07, 0xdc, 0x10, 0xf1, 0x16, 0x0f, 0x04, 0xda, - 0x10, 0xf1, 0x34, 0x0f, 0x08, 0xbf, 0x6f, 0xf0, 0x89, 0x00, 0x70, 0x47, - 0x70, 0xb5, 0x0a, 0x44, 0x0e, 0x4e, 0x03, 0x68, 0x93, 0xfa, 0xa3, 0xf3, - 0x93, 0xfa, 0xa3, 0xf3, 0x03, 0x60, 0x91, 0x42, 0x12, 0xd0, 0x11, 0xf8, - 0x01, 0x4b, 0x84, 0xea, 0x03, 0x05, 0x05, 0xf0, 0x0f, 0x05, 0x56, 0xf8, - 0x25, 0x50, 0x85, 0xea, 0x13, 0x13, 0x83, 0xea, 0x14, 0x14, 0x04, 0xf0, - 0x0f, 0x04, 0x56, 0xf8, 0x24, 0x40, 0x84, 0xea, 0x13, 0x13, 0xea, 0xe7, - 0x03, 0x60, 0x70, 0xbd, 0x18, 0xe0, 0x01, 0x08, 0x43, 0x79, 0x82, 0x79, - 0x04, 0x33, 0xc0, 0x79, 0x13, 0x44, 0x18, 0x44, 0x70, 0x47, 0x0b, 0x68, - 0x10, 0xb5, 0x04, 0x68, 0x9c, 0x42, 0x09, 0xd0, 0x40, 0x68, 0x4a, 0x68, - 0x90, 0x42, 0x05, 0xd0, 0x94, 0x42, 0x03, 0xd0, 0x18, 0x1a, 0x18, 0xbf, - 0x01, 0x20, 0x10, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x03, 0x68, 0x01, 0x33, - 0x04, 0xd0, 0x40, 0x68, 0x43, 0x1c, 0x58, 0x42, 0x58, 0x41, 0x70, 0x47, - 0x01, 0x20, 0x70, 0x47, 0x03, 0x68, 0x1a, 0x6a, 0xc3, 0x6a, 0xd3, 0x1a, - 0x19, 0x44, 0xb1, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x11, 0x03, 0x6b, - 0x8b, 0x42, 0x10, 0xb5, 0x0b, 0xd9, 0x4c, 0x09, 0xc2, 0x6b, 0x01, 0x23, - 0x01, 0xf0, 0x1f, 0x01, 0x03, 0xfa, 0x01, 0xf1, 0x52, 0xf8, 0x24, 0x30, - 0x0b, 0x43, 0x42, 0xf8, 0x24, 0x30, 0x00, 0x20, 0x10, 0xbd, 0x03, 0x68, - 0x08, 0x46, 0x18, 0x47, 0x03, 0x69, 0x10, 0xb5, 0x04, 0x46, 0x13, 0xb1, - 0x50, 0xf8, 0x04, 0x1b, 0x98, 0x47, 0x20, 0x46, 0x10, 0xbd, 0x38, 0xb5, - 0x03, 0x68, 0x04, 0x46, 0x0d, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x23, 0x68, - 0x2d, 0x69, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, 0x38, 0xbd, - 0x38, 0xb5, 0x03, 0x68, 0x04, 0x46, 0x0d, 0x46, 0x9b, 0x6f, 0x98, 0x47, - 0x23, 0x68, 0xed, 0x68, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, - 0x38, 0xbd, 0x38, 0xb5, 0x03, 0x68, 0x04, 0x46, 0x0d, 0x46, 0x9b, 0x6f, - 0x98, 0x47, 0x23, 0x68, 0x6d, 0x69, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, - 0x28, 0x46, 0x38, 0xbd, 0x03, 0x68, 0x01, 0x22, 0xd3, 0xf8, 0x80, 0x30, - 0x18, 0x47, 0x00, 0x00, 0x08, 0xb5, 0x06, 0x4b, 0x53, 0xf8, 0x20, 0x00, - 0x03, 0x68, 0xdb, 0x6a, 0x98, 0x47, 0x80, 0xb2, 0xb0, 0xf5, 0x00, 0x7f, - 0x38, 0xbf, 0x4f, 0xf4, 0x00, 0x70, 0x08, 0xbd, 0x54, 0x74, 0x00, 0x24, - 0x2d, 0xe9, 0xff, 0x47, 0x16, 0x46, 0x1c, 0x46, 0x80, 0x46, 0xdf, 0xf8, - 0x44, 0x90, 0x03, 0x91, 0xff, 0xf7, 0xe6, 0xff, 0xa0, 0xfb, 0x06, 0x67, - 0xa0, 0xfb, 0x04, 0x45, 0x59, 0xf8, 0x28, 0x00, 0x32, 0x46, 0x03, 0x68, - 0xcd, 0xe9, 0x00, 0x45, 0xd3, 0xf8, 0x1c, 0xa0, 0x3b, 0x46, 0xd0, 0x47, - 0x50, 0xb9, 0x59, 0xf8, 0x28, 0x00, 0x32, 0x46, 0x03, 0x99, 0x03, 0x68, - 0xcd, 0xe9, 0x00, 0x45, 0x9c, 0x69, 0x3b, 0x46, 0xa0, 0x47, 0x00, 0xb1, - 0x04, 0x20, 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x54, 0x74, 0x00, 0x24, - 0x7f, 0xb5, 0x16, 0x46, 0x05, 0x46, 0x1c, 0x46, 0x03, 0x91, 0xff, 0xf7, - 0xbf, 0xff, 0x0a, 0x4a, 0x03, 0x46, 0x03, 0x99, 0x52, 0xf8, 0x25, 0x00, - 0xa3, 0xfb, 0x04, 0x45, 0x02, 0x68, 0xcd, 0xe9, 0x00, 0x45, 0x54, 0x69, - 0xa3, 0xfb, 0x06, 0x23, 0xa0, 0x47, 0x00, 0x28, 0x14, 0xbf, 0x04, 0x20, - 0x00, 0x20, 0x04, 0xb0, 0x70, 0xbd, 0x00, 0xbf, 0x54, 0x74, 0x00, 0x24, - 0x13, 0x28, 0x9a, 0xbf, 0x01, 0x4b, 0x18, 0x56, 0x40, 0x42, 0x70, 0x47, - 0x81, 0xdf, 0x01, 0x08, 0x03, 0x28, 0xca, 0x7e, 0x8b, 0x7e, 0x08, 0xbf, - 0x48, 0x7d, 0x43, 0xea, 0x02, 0x23, 0x02, 0xbf, 0x0a, 0x7d, 0x42, 0xea, - 0x00, 0x22, 0x43, 0xea, 0x02, 0x43, 0x18, 0x46, 0x70, 0x47, 0x60, 0xb1, - 0x03, 0x68, 0x5b, 0xb1, 0x1a, 0x78, 0x5a, 0xb1, 0x80, 0x88, 0xda, 0x88, - 0x90, 0x42, 0x16, 0xbf, 0x09, 0x20, 0x00, 0x20, 0x00, 0x23, 0x0b, 0x60, - 0x70, 0x47, 0x03, 0x46, 0x09, 0x20, 0xfa, 0xe7, 0x09, 0x20, 0x13, 0x46, - 0xf7, 0xe7, 0x02, 0x68, 0x10, 0xb5, 0x04, 0x46, 0x5a, 0xb1, 0x11, 0x46, - 0x11, 0xf8, 0x01, 0x3b, 0x20, 0x2b, 0x11, 0xd9, 0x3a, 0x2b, 0xf9, 0xd1, - 0x13, 0x78, 0x30, 0x3b, 0xd8, 0xb2, 0x09, 0x28, 0x02, 0xd9, 0x4f, 0xf0, - 0xff, 0x30, 0x06, 0xe0, 0x02, 0x32, 0x91, 0x42, 0xf9, 0xd1, 0x03, 0x2b, - 0x18, 0x46, 0xf6, 0xdc, 0x21, 0x60, 0x10, 0xbd, 0x00, 0x20, 0xfc, 0xe7, - 0x38, 0xb5, 0xc3, 0x78, 0x04, 0x46, 0x13, 0xb9, 0x00, 0x25, 0x28, 0x46, - 0x38, 0xbd, 0xd0, 0xe9, 0x0c, 0x21, 0x01, 0x23, 0x40, 0x78, 0xff, 0xf7, - 0x63, 0xff, 0x05, 0x46, 0x80, 0xb9, 0x21, 0x6b, 0x63, 0x6a, 0xe2, 0x69, - 0xcb, 0x1a, 0xe0, 0x70, 0x93, 0x42, 0xed, 0xd2, 0xa3, 0x78, 0x02, 0x2b, - 0xea, 0xd1, 0x0a, 0x44, 0x01, 0x23, 0x61, 0x6b, 0x60, 0x78, 0xff, 0xf7, - 0x51, 0xff, 0xe4, 0xe7, 0x01, 0x25, 0xe2, 0xe7, 0x0b, 0x0a, 0x01, 0x70, - 0x43, 0x70, 0x0b, 0x0c, 0x09, 0x0e, 0x83, 0x70, 0xc1, 0x70, 0x70, 0x47, - 0x42, 0x88, 0x43, 0x78, 0x00, 0x78, 0x43, 0xea, 0x02, 0x23, 0x40, 0xea, - 0x03, 0x20, 0x70, 0x47, 0x00, 0x23, 0x70, 0xb5, 0x1c, 0x46, 0x2e, 0x26, - 0xc5, 0x69, 0x2a, 0x5d, 0x01, 0x34, 0x20, 0x2a, 0x0a, 0xd0, 0x05, 0x2a, - 0x08, 0xbf, 0xe5, 0x22, 0x09, 0x2c, 0x02, 0xbf, 0xcd, 0x18, 0x01, 0x33, - 0x6e, 0x72, 0xcd, 0x18, 0x01, 0x33, 0x6a, 0x72, 0x0b, 0x2c, 0xed, 0xd1, - 0x0b, 0x44, 0x00, 0x22, 0x5a, 0x72, 0xc3, 0x69, 0xdb, 0x7a, 0x03, 0xf0, - 0x3f, 0x03, 0x0b, 0x72, 0xc4, 0x69, 0x04, 0xf1, 0x1c, 0x00, 0xff, 0xf7, - 0xd5, 0xff, 0x08, 0x60, 0xe2, 0x7d, 0xa3, 0x7d, 0x43, 0xea, 0x02, 0x23, - 0xcb, 0x80, 0x62, 0x7e, 0x23, 0x7e, 0x43, 0xea, 0x02, 0x23, 0x8b, 0x80, - 0x70, 0xbd, 0x40, 0x68, 0x03, 0x68, 0x9b, 0x6c, 0x18, 0x47, 0xd0, 0xe9, - 0x04, 0x31, 0x10, 0xb5, 0xd0, 0xe9, 0x08, 0x24, 0xd0, 0x1a, 0x64, 0xeb, - 0x01, 0x01, 0x10, 0xbd, 0x40, 0x68, 0x03, 0x68, 0x5b, 0x6b, 0x18, 0x47, - 0x41, 0x68, 0x30, 0xb4, 0xd0, 0xe9, 0x04, 0x40, 0x0d, 0x68, 0x12, 0x19, - 0x2d, 0x6b, 0x40, 0xeb, 0x03, 0x03, 0x08, 0x46, 0x29, 0x46, 0x30, 0xbc, - 0x08, 0x47, 0x41, 0x68, 0x0b, 0x68, 0x10, 0xb4, 0x1c, 0x6b, 0xd0, 0xe9, - 0x04, 0x23, 0x08, 0x46, 0x21, 0x46, 0x5d, 0xf8, 0x04, 0x4b, 0x08, 0x47, - 0x40, 0x68, 0x03, 0x68, 0x9b, 0x6a, 0x18, 0x47, 0x40, 0x68, 0x03, 0x68, - 0x5b, 0x6a, 0x18, 0x47, 0x2d, 0xe9, 0xf3, 0x47, 0x05, 0x46, 0x14, 0x46, - 0x98, 0x46, 0x40, 0x68, 0xd5, 0xe9, 0x04, 0x23, 0x01, 0x68, 0xa2, 0x18, - 0xdd, 0xe9, 0x0a, 0xa9, 0x48, 0xeb, 0x03, 0x03, 0xcd, 0xe9, 0x00, 0xa9, - 0x49, 0x6c, 0x88, 0x47, 0x80, 0xb1, 0x14, 0xeb, 0x0a, 0x04, 0xd5, 0xe9, - 0x04, 0x32, 0x48, 0xeb, 0x09, 0x08, 0xe6, 0x18, 0x48, 0xeb, 0x02, 0x07, - 0xd5, 0xe9, 0x08, 0x23, 0xbb, 0x42, 0x08, 0xbf, 0xb2, 0x42, 0x2c, 0xbf, - 0x01, 0x20, 0x00, 0x20, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x2d, 0xe9, - 0xf3, 0x47, 0x05, 0x46, 0x14, 0x46, 0x98, 0x46, 0x40, 0x68, 0xd5, 0xe9, - 0x04, 0x23, 0x01, 0x68, 0xa2, 0x18, 0xdd, 0xe9, 0x0a, 0xa9, 0x48, 0xeb, - 0x03, 0x03, 0xcd, 0xe9, 0x00, 0xa9, 0x09, 0x6c, 0x88, 0x47, 0x80, 0xb1, - 0x14, 0xeb, 0x0a, 0x04, 0xd5, 0xe9, 0x04, 0x32, 0x48, 0xeb, 0x09, 0x08, - 0xe6, 0x18, 0x48, 0xeb, 0x02, 0x07, 0xd5, 0xe9, 0x08, 0x23, 0xbb, 0x42, - 0x08, 0xbf, 0xb2, 0x42, 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, 0x02, 0xb0, - 0xbd, 0xe8, 0xf0, 0x87, 0x2d, 0xe9, 0xf3, 0x47, 0x05, 0x46, 0x14, 0x46, - 0x98, 0x46, 0x40, 0x68, 0xd5, 0xe9, 0x04, 0x23, 0x01, 0x68, 0xa2, 0x18, - 0xdd, 0xe9, 0x0a, 0xa9, 0x48, 0xeb, 0x03, 0x03, 0xcd, 0xe9, 0x00, 0xa9, - 0xc9, 0x6b, 0x88, 0x47, 0x80, 0xb1, 0x14, 0xeb, 0x0a, 0x04, 0xd5, 0xe9, - 0x04, 0x32, 0x48, 0xeb, 0x09, 0x08, 0xe6, 0x18, 0x48, 0xeb, 0x02, 0x07, - 0xd5, 0xe9, 0x08, 0x23, 0xbb, 0x42, 0x08, 0xbf, 0xb2, 0x42, 0x2c, 0xbf, - 0x01, 0x20, 0x00, 0x20, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x2d, 0xe9, - 0xf3, 0x41, 0xdd, 0xe9, 0x08, 0x67, 0x01, 0x68, 0x04, 0x46, 0x15, 0x46, - 0x98, 0x46, 0xcd, 0xe9, 0x00, 0x67, 0x49, 0x6c, 0x88, 0x47, 0x68, 0xb1, - 0x60, 0x68, 0xd4, 0xe9, 0x04, 0x23, 0x01, 0x68, 0xaa, 0x18, 0xcd, 0xe9, - 0x08, 0x67, 0x48, 0xeb, 0x03, 0x03, 0xc9, 0x69, 0x02, 0xb0, 0xbd, 0xe8, - 0xf0, 0x41, 0x08, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x02, 0xb0, 0xbd, 0xe8, - 0xf0, 0x81, 0x2d, 0xe9, 0xf0, 0x43, 0x85, 0xb0, 0x04, 0x46, 0x15, 0x46, - 0x98, 0x46, 0x03, 0x91, 0xdd, 0xe9, 0x0c, 0x67, 0xcd, 0xe9, 0x00, 0x67, - 0x01, 0x68, 0xd1, 0xf8, 0x40, 0x90, 0xc8, 0x47, 0x78, 0xb1, 0x60, 0x68, - 0x03, 0x99, 0xd4, 0xe9, 0x04, 0x23, 0x04, 0x68, 0xaa, 0x18, 0xcd, 0xe9, - 0x0c, 0x67, 0xa4, 0x69, 0x48, 0xeb, 0x03, 0x03, 0xa4, 0x46, 0x05, 0xb0, - 0xbd, 0xe8, 0xf0, 0x43, 0x60, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, - 0xbd, 0xe8, 0xf0, 0x83, 0x2d, 0xe9, 0xf0, 0x43, 0x85, 0xb0, 0x04, 0x46, - 0x15, 0x46, 0x98, 0x46, 0x03, 0x91, 0xdd, 0xe9, 0x0c, 0x67, 0xcd, 0xe9, - 0x00, 0x67, 0x01, 0x68, 0xd1, 0xf8, 0x3c, 0x90, 0xc8, 0x47, 0x78, 0xb1, - 0x60, 0x68, 0x03, 0x99, 0xd4, 0xe9, 0x04, 0x23, 0x04, 0x68, 0xaa, 0x18, - 0xcd, 0xe9, 0x0c, 0x67, 0x64, 0x69, 0x48, 0xeb, 0x03, 0x03, 0xa4, 0x46, - 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, 0x60, 0x47, 0x6f, 0xf4, 0x7a, 0x60, - 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x40, 0x68, 0x03, 0x68, 0x1b, 0x69, - 0x18, 0x47, 0x40, 0x68, 0x03, 0x68, 0xdb, 0x68, 0x18, 0x47, 0x73, 0xb5, - 0x04, 0x46, 0x40, 0x68, 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x05, 0x46, - 0x58, 0xbb, 0x60, 0x68, 0x03, 0x68, 0x9b, 0x6b, 0x98, 0x47, 0x23, 0x7a, - 0x3b, 0xb1, 0x25, 0x72, 0xd4, 0xe9, 0x04, 0x32, 0xc3, 0x1a, 0x61, 0xeb, - 0x02, 0x02, 0xc4, 0xe9, 0x04, 0x32, 0x23, 0x7e, 0x43, 0xb1, 0x00, 0x26, - 0xd4, 0xe9, 0x08, 0x32, 0x26, 0x76, 0xc3, 0x1a, 0x61, 0xeb, 0x02, 0x01, - 0xc4, 0xe9, 0x08, 0x31, 0xd4, 0xe9, 0x04, 0x16, 0xd4, 0xe9, 0x08, 0x32, - 0x20, 0x68, 0x5b, 0x1a, 0x62, 0xeb, 0x06, 0x02, 0xcd, 0xe9, 0x00, 0x32, - 0x00, 0x22, 0x41, 0x6c, 0x00, 0x23, 0x20, 0x46, 0x88, 0x47, 0x00, 0x28, - 0x08, 0xbf, 0x6f, 0xf4, 0x7a, 0x65, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, - 0x70, 0x47, 0x40, 0x68, 0x10, 0xb1, 0x03, 0x68, 0x9b, 0x6c, 0x18, 0x47, - 0x70, 0x47, 0x40, 0x7e, 0x70, 0x47, 0x00, 0x7e, 0x70, 0x47, 0xd0, 0xe9, - 0x04, 0x21, 0x10, 0xb5, 0xd0, 0xe9, 0x02, 0x34, 0x98, 0x18, 0x44, 0xeb, - 0x01, 0x01, 0x10, 0xbd, 0xd0, 0xe9, 0x02, 0x01, 0x70, 0x47, 0xd0, 0xe9, - 0x04, 0x01, 0x70, 0x47, 0x90, 0xf8, 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, - 0x03, 0x68, 0x5b, 0x6b, 0x18, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x70, 0x47, - 0x90, 0xf8, 0x20, 0x10, 0x30, 0xb4, 0x59, 0xb1, 0xd0, 0xe9, 0x01, 0x14, - 0xc0, 0x68, 0x0d, 0x68, 0x12, 0x19, 0x2d, 0x6b, 0x40, 0xeb, 0x03, 0x03, - 0x08, 0x46, 0x29, 0x46, 0x30, 0xbc, 0x08, 0x47, 0x00, 0x20, 0x00, 0x21, - 0x30, 0xbc, 0x70, 0x47, 0x90, 0xf8, 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, - 0x03, 0x68, 0xdb, 0x6a, 0x18, 0x47, 0x00, 0x20, 0x00, 0x21, 0x70, 0x47, - 0x90, 0xf8, 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, 0x03, 0x68, 0x9b, 0x6a, - 0x18, 0x47, 0x00, 0x20, 0x00, 0x21, 0x70, 0x47, 0x90, 0xf8, 0x20, 0x30, - 0x1b, 0xb1, 0x40, 0x68, 0x03, 0x68, 0x5b, 0x6a, 0x18, 0x47, 0x00, 0x20, - 0x00, 0x21, 0x70, 0x47, 0x2d, 0xe9, 0xf3, 0x41, 0x90, 0xf8, 0x20, 0x10, - 0x04, 0x46, 0x15, 0x46, 0x98, 0x46, 0xdd, 0xe9, 0x08, 0x67, 0x99, 0xb1, - 0x01, 0x68, 0xcd, 0xe9, 0x00, 0x67, 0x49, 0x6c, 0x88, 0x47, 0x68, 0xb1, - 0xe3, 0x68, 0xd4, 0xe9, 0x01, 0x02, 0x01, 0x68, 0xaa, 0x18, 0xcd, 0xe9, - 0x08, 0x67, 0x48, 0xeb, 0x03, 0x03, 0xc9, 0x69, 0x02, 0xb0, 0xbd, 0xe8, - 0xf0, 0x41, 0x08, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x02, 0xb0, 0xbd, 0xe8, - 0xf0, 0x81, 0x2d, 0xe9, 0xf0, 0x43, 0x90, 0xf8, 0x20, 0xc0, 0x85, 0xb0, - 0x04, 0x46, 0x15, 0x46, 0x98, 0x46, 0x03, 0x91, 0xdd, 0xe9, 0x0c, 0x67, - 0xbc, 0xf1, 0x00, 0x0f, 0x16, 0xd0, 0xcd, 0xe9, 0x00, 0x67, 0x01, 0x68, - 0xd1, 0xf8, 0x40, 0x90, 0xc8, 0x47, 0x78, 0xb1, 0xe3, 0x68, 0x03, 0x99, - 0xd4, 0xe9, 0x01, 0x02, 0x04, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x0c, 0x67, - 0xa4, 0x69, 0x48, 0xeb, 0x03, 0x03, 0xa4, 0x46, 0x05, 0xb0, 0xbd, 0xe8, - 0xf0, 0x43, 0x60, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xbd, 0xe8, - 0xf0, 0x83, 0x2d, 0xe9, 0xf0, 0x43, 0x90, 0xf8, 0x20, 0xc0, 0x85, 0xb0, - 0x04, 0x46, 0x15, 0x46, 0x98, 0x46, 0x03, 0x91, 0xdd, 0xe9, 0x0c, 0x67, - 0xbc, 0xf1, 0x00, 0x0f, 0x16, 0xd0, 0xcd, 0xe9, 0x00, 0x67, 0x01, 0x68, - 0xd1, 0xf8, 0x3c, 0x90, 0xc8, 0x47, 0x78, 0xb1, 0xe3, 0x68, 0x03, 0x99, - 0xd4, 0xe9, 0x01, 0x02, 0x04, 0x68, 0xaa, 0x18, 0xcd, 0xe9, 0x0c, 0x67, - 0x64, 0x69, 0x48, 0xeb, 0x03, 0x03, 0xa4, 0x46, 0x05, 0xb0, 0xbd, 0xe8, - 0xf0, 0x43, 0x60, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xbd, 0xe8, - 0xf0, 0x83, 0x90, 0xf8, 0x20, 0x30, 0x1b, 0xb1, 0x40, 0x68, 0x03, 0x68, - 0x1b, 0x69, 0x18, 0x47, 0x6f, 0xf4, 0x7a, 0x60, 0x70, 0x47, 0x2d, 0xe9, - 0xf0, 0x47, 0xd0, 0xe9, 0x01, 0x14, 0x05, 0x68, 0x4f, 0xea, 0x64, 0x0a, - 0x9d, 0xf8, 0x20, 0xc0, 0x05, 0xeb, 0x64, 0x00, 0xe4, 0x07, 0x9d, 0xf8, - 0x24, 0xe0, 0x48, 0xbf, 0x55, 0xf8, 0x0a, 0x40, 0x9d, 0xf8, 0x28, 0x80, - 0xdd, 0xf8, 0x2c, 0x90, 0x48, 0xbf, 0x61, 0x58, 0xdd, 0xe9, 0x0c, 0x67, - 0xcd, 0xe9, 0x0a, 0x89, 0xcd, 0xe9, 0x0c, 0x67, 0xcd, 0xe9, 0x08, 0xce, - 0xbd, 0xe8, 0xf0, 0x47, 0x08, 0x47, 0xff, 0x20, 0x70, 0x47, 0xd0, 0xe9, - 0x44, 0x01, 0x70, 0x47, 0xf0, 0xb5, 0x1f, 0x46, 0xd0, 0xf8, 0x18, 0x31, - 0x16, 0x46, 0x01, 0x33, 0x2d, 0xd1, 0xd0, 0xf8, 0x60, 0x21, 0xd0, 0xe9, - 0x44, 0x45, 0xaf, 0x42, 0x08, 0xbf, 0xa6, 0x42, 0x1c, 0xd2, 0xd0, 0xf8, - 0x28, 0x11, 0xc9, 0xb1, 0x01, 0x29, 0x0c, 0xd0, 0x00, 0xf5, 0xb4, 0x7c, - 0x00, 0x23, 0x99, 0x42, 0x12, 0xdd, 0xfc, 0xe8, 0x02, 0x45, 0xbd, 0x42, - 0x08, 0xbf, 0xb4, 0x42, 0x02, 0xd2, 0x01, 0x33, 0xf5, 0xe7, 0x00, 0x23, - 0x03, 0x44, 0x01, 0x21, 0x93, 0xf8, 0x54, 0x41, 0x00, 0x23, 0x0c, 0x42, - 0x05, 0xd0, 0x72, 0x33, 0x50, 0xf8, 0x23, 0x20, 0x10, 0x46, 0xd1, 0x17, - 0xf0, 0xbd, 0x01, 0x33, 0x49, 0x00, 0x04, 0x2b, 0x49, 0xb2, 0xf2, 0xd1, - 0xf6, 0xe7, 0x4f, 0xf4, 0x80, 0x50, 0x00, 0x21, 0xf4, 0xe7, 0x00, 0x00, - 0x00, 0x48, 0x70, 0x47, 0x44, 0xdf, 0x01, 0x08, 0xd0, 0xf8, 0x60, 0x01, - 0x00, 0x21, 0x70, 0x47, 0x01, 0x20, 0x00, 0x21, 0x70, 0x47, 0x2d, 0xe9, - 0xf7, 0x4f, 0x16, 0x46, 0x01, 0x68, 0x02, 0x69, 0x05, 0x46, 0x00, 0x93, - 0x01, 0x92, 0x89, 0x6b, 0x47, 0x69, 0xdd, 0xe9, 0x0c, 0xab, 0x16, 0xeb, - 0x0a, 0x08, 0x43, 0xeb, 0x0b, 0x09, 0x88, 0x47, 0x49, 0x45, 0x08, 0xbf, - 0x40, 0x45, 0xdd, 0xe9, 0x00, 0x32, 0x03, 0xd2, 0x00, 0x20, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x16, 0xf1, 0x78, 0x44, 0x28, 0x46, 0x43, 0xf1, - 0xff, 0x31, 0xa4, 0x18, 0x2a, 0x68, 0x41, 0xeb, 0x07, 0x07, 0x11, 0x6b, - 0x32, 0x46, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x20, 0x46, 0x39, 0x46, - 0x14, 0xf0, 0x00, 0xfc, 0x13, 0x43, 0xe7, 0xd1, 0x14, 0xeb, 0x0a, 0x04, - 0x2b, 0x68, 0x28, 0x46, 0x47, 0xeb, 0x0b, 0x07, 0x18, 0xf1, 0xff, 0x32, - 0x19, 0x6b, 0x49, 0xf1, 0xff, 0x33, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, - 0x20, 0x46, 0x39, 0x46, 0x14, 0xf0, 0xec, 0xfb, 0x13, 0x43, 0x0c, 0xbf, - 0x01, 0x20, 0x00, 0x20, 0xd1, 0xe7, 0x00, 0x00, 0x00, 0x48, 0x70, 0x47, - 0x4a, 0xdf, 0x01, 0x08, 0xd0, 0xe9, 0x06, 0x01, 0x70, 0x47, 0x90, 0xf8, - 0x20, 0x30, 0x00, 0x2b, 0x0c, 0xbf, 0x4f, 0xf0, 0xff, 0x30, 0xff, 0x20, - 0x70, 0x47, 0x90, 0xf8, 0x20, 0x30, 0x13, 0xb1, 0x20, 0x20, 0x00, 0x21, - 0x70, 0x47, 0x00, 0x20, 0xfb, 0xe7, 0x73, 0xb5, 0x90, 0xf8, 0x40, 0x30, - 0x04, 0x46, 0x0d, 0x46, 0x16, 0x46, 0x01, 0x2b, 0x00, 0xf0, 0x86, 0x80, - 0x01, 0x23, 0xca, 0x06, 0x80, 0xf8, 0x40, 0x30, 0x17, 0xd5, 0xf3, 0x06, - 0x15, 0xd5, 0x03, 0x68, 0x10, 0x22, 0xda, 0x61, 0x43, 0x6c, 0x43, 0xf0, - 0x04, 0x03, 0x43, 0x64, 0xfe, 0xf7, 0x56, 0xfe, 0xaa, 0x06, 0x05, 0xd5, - 0xb3, 0x06, 0x03, 0xd5, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xcf, 0xf8, - 0x00, 0x20, 0x84, 0xf8, 0x40, 0x00, 0x02, 0xb0, 0x70, 0xbd, 0x68, 0x07, - 0x12, 0xd5, 0x71, 0x07, 0x10, 0xd5, 0x23, 0x68, 0x25, 0xf0, 0x04, 0x05, - 0x5a, 0x6a, 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, - 0x23, 0x8d, 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, - 0x63, 0x85, 0xdd, 0xe7, 0xaa, 0x07, 0x07, 0xd5, 0xb3, 0x07, 0x05, 0xd5, - 0x63, 0x6a, 0x22, 0x68, 0x13, 0xf8, 0x01, 0x1b, 0x91, 0x62, 0xec, 0xe7, - 0x28, 0x06, 0x32, 0xd5, 0x71, 0x06, 0x30, 0xd5, 0x63, 0x8d, 0x22, 0x68, - 0x9b, 0xb2, 0x03, 0xb3, 0x20, 0x8d, 0xf0, 0xb9, 0x51, 0x68, 0x63, 0x8d, - 0xc1, 0xf3, 0x09, 0x01, 0x9b, 0xb2, 0xff, 0x2b, 0x08, 0xd9, 0xff, 0x22, - 0x4f, 0xf0, 0x80, 0x73, 0x00, 0x90, 0x22, 0x85, 0x20, 0x46, 0xfe, 0xf7, - 0x63, 0xfc, 0xb9, 0xe7, 0x62, 0x8d, 0xe3, 0x6a, 0x92, 0xb2, 0x13, 0xf5, - 0x80, 0x3f, 0x22, 0x85, 0xd2, 0xb2, 0x02, 0xd0, 0xe3, 0x6a, 0x00, 0x90, - 0xf0, 0xe7, 0x4f, 0xf0, 0x00, 0x73, 0x00, 0x90, 0xec, 0xe7, 0x53, 0x68, - 0x9a, 0x01, 0x03, 0xd4, 0x20, 0x46, 0xff, 0xf7, 0xf2, 0xf8, 0xa3, 0xe7, - 0x40, 0x21, 0x20, 0x46, 0xfe, 0xf7, 0x04, 0xfe, 0x9e, 0xe7, 0x6b, 0x06, - 0x9c, 0xd5, 0x70, 0x06, 0x9a, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, - 0xf2, 0xd1, 0x23, 0x68, 0x5a, 0x68, 0x91, 0x01, 0x92, 0xd4, 0xe2, 0x6a, - 0x12, 0xf5, 0x80, 0x3f, 0xe6, 0xd1, 0x5a, 0x68, 0x42, 0xf4, 0x80, 0x42, - 0x5a, 0x60, 0x89, 0xe7, 0x02, 0x20, 0x92, 0xe7, 0x10, 0xb5, 0x04, 0x46, - 0xff, 0xf7, 0x34, 0xfa, 0x20, 0x46, 0x12, 0xf0, 0xf3, 0xfb, 0x20, 0x46, - 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x89, 0xfa, 0x20, 0x46, - 0x12, 0xf0, 0xea, 0xfb, 0x20, 0x46, 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, - 0xff, 0xf7, 0x16, 0xfa, 0x20, 0x46, 0x12, 0xf0, 0xe1, 0xfb, 0x20, 0x46, - 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x6b, 0xfa, 0x20, 0x46, - 0x12, 0xf0, 0xd8, 0xfb, 0x20, 0x46, 0x10, 0xbd, 0x03, 0x68, 0x9b, 0x6a, - 0x10, 0xb5, 0x04, 0x46, 0x13, 0xb9, 0xc0, 0x69, 0x12, 0xf0, 0xce, 0xfb, - 0x23, 0x68, 0xdb, 0x6a, 0x13, 0xb9, 0xa0, 0x6a, 0x12, 0xf0, 0xc8, 0xfb, - 0x23, 0x68, 0x1b, 0x6b, 0x23, 0xb9, 0xe0, 0x6b, 0xbd, 0xe8, 0x10, 0x40, - 0x12, 0xf0, 0xc0, 0xbb, 0x10, 0xbd, 0x03, 0x68, 0x73, 0xb5, 0x0c, 0x46, - 0x9b, 0x6f, 0x06, 0x46, 0x98, 0x47, 0x01, 0xa9, 0x20, 0x46, 0xff, 0xf7, - 0xa8, 0xfb, 0x05, 0x46, 0x00, 0xb9, 0x20, 0x60, 0x33, 0x68, 0x30, 0x46, - 0xdb, 0x6f, 0x98, 0x47, 0x14, 0xb1, 0x20, 0x46, 0x12, 0xf0, 0xaa, 0xfb, - 0x28, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0x80, 0xbb, - 0x08, 0xb1, 0x12, 0xf0, 0xa1, 0xbb, 0x70, 0x47, 0x10, 0xb5, 0x04, 0x46, - 0x12, 0xf0, 0x9c, 0xfb, 0x20, 0x46, 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, - 0x12, 0xf0, 0x96, 0xfb, 0x20, 0x46, 0x10, 0xbd, 0x0b, 0x46, 0x40, 0xf2, - 0x01, 0x12, 0x00, 0x21, 0x70, 0xb5, 0x04, 0x46, 0x18, 0x46, 0x12, 0xf0, - 0xf3, 0xfb, 0x03, 0x46, 0x60, 0x68, 0xa1, 0x68, 0x02, 0x68, 0x55, 0x6e, - 0x1a, 0x46, 0x2b, 0x46, 0xbd, 0xe8, 0x70, 0x40, 0x18, 0x47, 0x10, 0xb5, - 0x0c, 0x46, 0x82, 0x69, 0xff, 0x21, 0xa0, 0x68, 0x12, 0xf0, 0xe2, 0xfb, - 0x4f, 0xf0, 0xff, 0x33, 0x23, 0x60, 0x10, 0xbd, 0x38, 0xb5, 0x8b, 0x6a, - 0x04, 0x46, 0x0d, 0x46, 0x01, 0x60, 0xcb, 0xb1, 0xc3, 0x61, 0xeb, 0x6a, - 0x13, 0xb3, 0xa3, 0x62, 0x04, 0xf1, 0x20, 0x01, 0x28, 0x46, 0xff, 0xf7, - 0xe6, 0xff, 0x4f, 0xf0, 0xff, 0x33, 0x63, 0x61, 0x23, 0x68, 0x1a, 0x6b, - 0xea, 0xb1, 0xe2, 0x63, 0x00, 0x20, 0x4f, 0xf0, 0xff, 0x33, 0xc4, 0xe9, - 0x03, 0x00, 0xc4, 0xe9, 0x01, 0x33, 0xa4, 0xf8, 0x40, 0x00, 0x38, 0xbd, - 0x48, 0x69, 0x12, 0xf0, 0x4b, 0xfb, 0xe0, 0x61, 0x00, 0x28, 0xe0, 0xd1, - 0x20, 0x46, 0xff, 0xf7, 0x77, 0xff, 0x6f, 0xf0, 0x0b, 0x00, 0xf2, 0xe7, - 0xa8, 0x69, 0x12, 0xf0, 0x3f, 0xfb, 0xa0, 0x62, 0x00, 0x28, 0xd7, 0xd1, - 0xf2, 0xe7, 0x58, 0x6a, 0xc0, 0x08, 0x12, 0xf0, 0x37, 0xfb, 0xe0, 0x63, - 0x00, 0x28, 0xdb, 0xd1, 0xea, 0xe7, 0xf7, 0xb5, 0x0c, 0x46, 0x09, 0x68, - 0x06, 0x46, 0x17, 0x46, 0x4b, 0x1c, 0x21, 0xd0, 0x00, 0x68, 0x83, 0x69, - 0x00, 0x93, 0x85, 0x68, 0xd4, 0xe9, 0x01, 0x23, 0xa8, 0x47, 0x05, 0x46, - 0x20, 0xb9, 0x37, 0xb9, 0x21, 0x46, 0x30, 0x68, 0xff, 0xf7, 0xa5, 0xff, - 0x28, 0x46, 0x03, 0xb0, 0xf0, 0xbd, 0x33, 0x68, 0x39, 0x46, 0x30, 0x46, - 0x9b, 0x69, 0x01, 0x93, 0xa3, 0x68, 0x00, 0x93, 0xd4, 0xe9, 0x00, 0x23, - 0xfa, 0xf7, 0xa3, 0xfb, 0x00, 0x28, 0x05, 0xdb, 0xea, 0xd1, 0x6f, 0xf0, - 0x33, 0x05, 0xeb, 0xe7, 0x00, 0x25, 0xe9, 0xe7, 0x05, 0x46, 0xe7, 0xe7, - 0x2d, 0xe9, 0xf7, 0x4f, 0x0c, 0x9c, 0x07, 0x46, 0x0d, 0x46, 0x91, 0x46, - 0x98, 0x46, 0xdd, 0xf8, 0x38, 0xa0, 0xba, 0xf1, 0x00, 0x0f, 0x03, 0xd1, - 0x50, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x2b, 0x68, 0x38, 0x68, - 0x43, 0x45, 0x82, 0x69, 0x28, 0xd1, 0x6b, 0x68, 0xa3, 0x42, 0x25, 0xd8, - 0x03, 0xeb, 0x02, 0x0b, 0xa3, 0x45, 0x21, 0xd9, 0xab, 0xeb, 0x04, 0x0b, - 0xe0, 0x1a, 0xab, 0x68, 0xd3, 0x45, 0x0d, 0x99, 0x18, 0x44, 0x28, 0xbf, - 0xd3, 0x46, 0x5a, 0x46, 0x5c, 0x44, 0x12, 0xf0, 0x3f, 0xfb, 0x0d, 0x9b, - 0x5b, 0x44, 0xaa, 0xeb, 0x0b, 0x0b, 0x0d, 0x93, 0x3b, 0x68, 0x9a, 0x69, - 0xb4, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x43, 0x33, 0xb9, 0x4a, 0x46, - 0x29, 0x46, 0x38, 0x46, 0xff, 0xf7, 0x99, 0xff, 0x00, 0x28, 0xd0, 0xd1, - 0xda, 0x46, 0xca, 0xe7, 0xb4, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x43, - 0x4b, 0xbb, 0x92, 0x45, 0x27, 0xd3, 0x41, 0x46, 0xba, 0xfb, 0xf2, 0xf3, - 0x02, 0xfb, 0x13, 0xab, 0x22, 0x46, 0xaa, 0xeb, 0x0b, 0x0a, 0xcd, 0xf8, - 0x00, 0xa0, 0x83, 0x68, 0x1e, 0x46, 0x0d, 0x9b, 0xb0, 0x47, 0x00, 0x28, - 0xb7, 0xd1, 0xb9, 0xf1, 0x00, 0x0f, 0x04, 0xd1, 0x0d, 0x9b, 0x54, 0x44, - 0x53, 0x44, 0x0d, 0x93, 0xde, 0xe7, 0x0d, 0x9b, 0x42, 0x46, 0x49, 0x46, - 0x38, 0x46, 0x00, 0x93, 0x23, 0x46, 0xcd, 0xf8, 0x04, 0xa0, 0xfa, 0xf7, - 0x32, 0xfb, 0x00, 0x28, 0xa3, 0xdb, 0xed, 0xd1, 0x6f, 0xf0, 0x33, 0x00, - 0x9f, 0xe7, 0xe3, 0x1a, 0xd3, 0x46, 0xc5, 0xf8, 0x00, 0x80, 0x6b, 0x60, - 0xc8, 0xe7, 0x00, 0x00, 0x70, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xba, 0xfa, - 0x05, 0x46, 0x00, 0x28, 0x3f, 0xd1, 0x23, 0x78, 0x03, 0x2b, 0x35, 0xd1, - 0x26, 0x79, 0x01, 0x2e, 0x32, 0xd1, 0x01, 0x46, 0xa2, 0x89, 0x60, 0x6b, - 0x12, 0xf0, 0xf0, 0xfa, 0x63, 0x6b, 0x55, 0x22, 0x41, 0x21, 0x72, 0x20, - 0x83, 0xf8, 0xfe, 0x21, 0xaa, 0x22, 0x83, 0xf8, 0xff, 0x21, 0x52, 0x23, - 0x62, 0x6b, 0x13, 0x70, 0x53, 0x70, 0x61, 0x23, 0xd1, 0x70, 0x93, 0x70, - 0x62, 0x6b, 0x82, 0xf8, 0xe7, 0x31, 0x82, 0xf8, 0xe4, 0x01, 0x82, 0xf8, - 0xe5, 0x01, 0x82, 0xf8, 0xe6, 0x11, 0x60, 0x6b, 0x61, 0x69, 0x00, 0xf5, - 0xf4, 0x70, 0xff, 0xf7, 0xaf, 0xfa, 0x60, 0x6b, 0x21, 0x69, 0x00, 0xf5, - 0xf6, 0x70, 0xff, 0xf7, 0xa9, 0xfa, 0x22, 0x6a, 0x33, 0x46, 0x61, 0x6b, - 0x01, 0x32, 0x60, 0x78, 0x22, 0x63, 0xff, 0xf7, 0xef, 0xf9, 0x25, 0x71, - 0x62, 0x78, 0x03, 0x4b, 0x53, 0xf8, 0x22, 0x00, 0xb0, 0xfa, 0x80, 0xf0, - 0x40, 0x09, 0x70, 0xbd, 0x54, 0x74, 0x00, 0x24, 0x90, 0xf8, 0x20, 0x30, - 0x10, 0xb5, 0x04, 0x46, 0x5b, 0xb1, 0x1c, 0x30, 0xf9, 0xf7, 0xbe, 0xff, - 0x38, 0xb9, 0x84, 0xf8, 0x20, 0x00, 0x60, 0x68, 0x03, 0x68, 0xbd, 0xe8, - 0x10, 0x40, 0xdb, 0x68, 0x18, 0x47, 0x00, 0x20, 0x10, 0xbd, 0x2d, 0xe9, - 0xf0, 0x4f, 0x89, 0xb0, 0x90, 0x46, 0x99, 0x46, 0x05, 0x46, 0x9d, 0xf8, - 0x48, 0x20, 0xc3, 0x46, 0x9d, 0xf8, 0x50, 0x30, 0x90, 0xf8, 0xfa, 0x71, - 0xdd, 0xe9, 0x15, 0x61, 0x05, 0x91, 0x03, 0x2a, 0x57, 0xd8, 0xdf, 0xe8, - 0x02, 0xf0, 0x1b, 0x02, 0x19, 0x03, 0x02, 0x27, 0x0f, 0x2b, 0x4f, 0xf0, - 0x00, 0x02, 0x05, 0xf1, 0x04, 0x0a, 0x08, 0xbf, 0x95, 0xf8, 0xfd, 0x31, - 0x11, 0x46, 0x50, 0x46, 0x00, 0x92, 0x03, 0x93, 0x3b, 0x46, 0xcd, 0xe9, - 0x01, 0x22, 0x07, 0xf0, 0x8d, 0xfb, 0x04, 0x46, 0x38, 0xb1, 0x09, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x03, 0x27, 0xe7, 0xe7, 0x4f, 0xf0, 0xff, 0x3b, - 0xe4, 0xe7, 0x05, 0x9b, 0x4f, 0xf0, 0xff, 0x32, 0x9d, 0xf8, 0x4c, 0x10, - 0x50, 0x46, 0x07, 0x93, 0x07, 0xab, 0xcd, 0xe9, 0x00, 0x63, 0x5b, 0x46, - 0xfc, 0xf7, 0x72, 0xfa, 0x3b, 0x46, 0x83, 0x46, 0x22, 0x46, 0x21, 0x46, - 0x50, 0x46, 0xcd, 0xe9, 0x02, 0x44, 0xcd, 0xe9, 0x00, 0x44, 0x07, 0xf0, - 0x6b, 0xfb, 0x00, 0x28, 0xdd, 0xd1, 0xbb, 0xf1, 0x00, 0x0f, 0x01, 0xd0, - 0x58, 0x46, 0xd8, 0xe7, 0x95, 0xf8, 0x01, 0x01, 0x00, 0x28, 0xd4, 0xd0, - 0xb9, 0xf1, 0x00, 0x0f, 0x08, 0xbf, 0xb8, 0xf1, 0x04, 0x0f, 0x04, 0xd1, - 0x33, 0x78, 0x43, 0xf0, 0x0a, 0x03, 0x33, 0x70, 0xee, 0xe7, 0xb9, 0xf1, - 0x00, 0x0f, 0x08, 0xbf, 0xb8, 0xf1, 0x02, 0x0f, 0xe8, 0xd1, 0x33, 0x78, - 0x23, 0xf0, 0x04, 0x03, 0xf3, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0xbc, 0xe7, - 0x08, 0xb5, 0x90, 0xf8, 0x20, 0x30, 0x23, 0xb1, 0x00, 0x69, 0xf9, 0xf7, - 0x3f, 0xfd, 0x00, 0x21, 0x08, 0xbd, 0x18, 0x46, 0xfb, 0xe7, 0x08, 0xb5, - 0x90, 0xf8, 0x20, 0x30, 0x2b, 0xb1, 0x00, 0x69, 0x10, 0x44, 0xf9, 0xf7, - 0x33, 0xfd, 0x00, 0x21, 0x08, 0xbd, 0x18, 0x46, 0xfb, 0xe7, 0xf7, 0xb5, - 0x90, 0xf8, 0x20, 0x10, 0x04, 0x46, 0x15, 0x46, 0xdd, 0xe9, 0x08, 0x67, - 0x71, 0xb1, 0x01, 0x68, 0xcd, 0xe9, 0x00, 0x67, 0x49, 0x6c, 0x88, 0x47, - 0x40, 0xb1, 0x21, 0x69, 0x32, 0x46, 0x20, 0x1d, 0x29, 0x44, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x40, 0x07, 0xf0, 0xc0, 0xbb, 0x6f, 0xf4, 0x7a, 0x60, - 0x03, 0xb0, 0xf0, 0xbd, 0xf0, 0xb5, 0x90, 0xf8, 0x20, 0x70, 0x85, 0xb0, - 0x04, 0x46, 0x15, 0x46, 0x03, 0x91, 0xdd, 0xe9, 0x0a, 0x6c, 0x7f, 0xb1, - 0x07, 0x68, 0xcd, 0xe9, 0x00, 0x6c, 0x3f, 0x6c, 0xb8, 0x47, 0x48, 0xb1, - 0x22, 0x69, 0x33, 0x46, 0x03, 0x99, 0x20, 0x1d, 0x2a, 0x44, 0x05, 0xb0, - 0xbd, 0xe8, 0xf0, 0x40, 0x07, 0xf0, 0xee, 0xbc, 0x6f, 0xf4, 0x7a, 0x60, - 0x05, 0xb0, 0xf0, 0xbd, 0x90, 0xf8, 0x20, 0x30, 0x10, 0xb5, 0x04, 0x46, - 0x13, 0xb9, 0x43, 0x62, 0x00, 0x20, 0x10, 0xbd, 0x24, 0x30, 0xf9, 0xf7, - 0xeb, 0xfe, 0x00, 0x28, 0xf8, 0xd1, 0x84, 0xf8, 0x20, 0x00, 0x20, 0x1d, - 0xbd, 0xe8, 0x10, 0x40, 0x07, 0xf0, 0x1a, 0xbe, 0x90, 0xf8, 0x20, 0x30, - 0x2d, 0xe9, 0xf0, 0x4f, 0x81, 0x46, 0x85, 0xb0, 0x03, 0xb9, 0x43, 0x62, - 0x09, 0xf1, 0x24, 0x06, 0x56, 0xe8, 0x00, 0x0f, 0x01, 0x30, 0x46, 0xe8, - 0x00, 0x03, 0x00, 0x2b, 0xf8, 0xd1, 0x01, 0x28, 0x43, 0xd1, 0x09, 0xf1, - 0x04, 0x00, 0x07, 0xf0, 0x1f, 0xfe, 0x80, 0x46, 0x30, 0xb1, 0x30, 0x46, - 0xf9, 0xf7, 0xc6, 0xfe, 0x40, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, - 0xd9, 0xe9, 0x06, 0xab, 0xd9, 0xe9, 0x04, 0x45, 0x1a, 0xeb, 0x04, 0x03, - 0x00, 0x93, 0x4b, 0xeb, 0x05, 0x03, 0x01, 0x93, 0xf9, 0xf7, 0xd6, 0xfc, - 0x00, 0x23, 0x00, 0xf1, 0x00, 0x6c, 0x86, 0x46, 0xdd, 0xe9, 0x00, 0x01, - 0x8b, 0x42, 0x08, 0xbf, 0x84, 0x45, 0x05, 0xd2, 0x30, 0x46, 0x6f, 0xf4, - 0x7a, 0x68, 0xf9, 0xf7, 0xa7, 0xfe, 0xdf, 0xe7, 0x00, 0x2d, 0x08, 0xbf, - 0xb4, 0xf1, 0x00, 0x6f, 0xf4, 0xd3, 0x5a, 0xea, 0x0b, 0x03, 0x0e, 0xd1, - 0x4f, 0xf0, 0x00, 0x61, 0x0b, 0x1b, 0x02, 0x93, 0x65, 0xeb, 0x45, 0x03, - 0x03, 0x93, 0xdd, 0xe9, 0x02, 0x67, 0x16, 0xeb, 0x0e, 0x06, 0x47, 0xf1, - 0x00, 0x07, 0xc9, 0xe9, 0x06, 0x67, 0x01, 0x21, 0x89, 0xf8, 0x20, 0x10, - 0xc4, 0xe7, 0x98, 0x46, 0xc2, 0xe7, 0x03, 0x68, 0x99, 0x69, 0x1a, 0x68, - 0x10, 0xb4, 0xcc, 0x05, 0x08, 0xd5, 0x14, 0x06, 0x06, 0xd5, 0x44, 0x6c, - 0x44, 0xf0, 0x01, 0x04, 0x44, 0x64, 0x4f, 0xf4, 0x80, 0x74, 0xdc, 0x61, - 0x4c, 0x05, 0x08, 0xd5, 0x14, 0x06, 0x06, 0xd5, 0x44, 0x6c, 0x44, 0xf0, - 0x08, 0x04, 0x44, 0x64, 0x4f, 0xf4, 0x80, 0x64, 0xdc, 0x61, 0x89, 0x05, - 0x08, 0xd5, 0x12, 0x06, 0x06, 0xd5, 0x42, 0x6c, 0x42, 0xf0, 0x02, 0x02, - 0x42, 0x64, 0x4f, 0xf4, 0x00, 0x72, 0xda, 0x61, 0x41, 0x6c, 0x11, 0xf0, - 0x0b, 0x0f, 0x03, 0xd0, 0x5d, 0xf8, 0x04, 0x4b, 0xfe, 0xf7, 0xd8, 0xba, - 0x5d, 0xf8, 0x04, 0x4b, 0x70, 0x47, 0x02, 0x68, 0x43, 0x6b, 0x91, 0x69, - 0x12, 0x68, 0x03, 0xb1, 0x18, 0x47, 0x70, 0x47, 0x2d, 0xe9, 0xf7, 0x4f, - 0x00, 0x23, 0xdf, 0xf8, 0xbc, 0x81, 0xdf, 0xf8, 0xbc, 0xc1, 0x4f, 0xf0, - 0xb0, 0x49, 0x0a, 0x68, 0x32, 0xfa, 0x03, 0xf4, 0x02, 0xd1, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x27, 0x9f, 0x40, 0x3a, 0x40, 0x00, 0xf0, - 0xb6, 0x80, 0x4c, 0x68, 0x4f, 0xea, 0x43, 0x0e, 0x03, 0x25, 0x24, 0xf0, - 0x10, 0x0a, 0x05, 0xfa, 0x0e, 0xf5, 0x0a, 0xf1, 0xff, 0x36, 0xed, 0x43, - 0x01, 0x2e, 0x10, 0xd8, 0x86, 0x68, 0x06, 0xea, 0x05, 0x0b, 0xce, 0x68, - 0x06, 0xfa, 0x0e, 0xf6, 0x46, 0xea, 0x0b, 0x06, 0x86, 0x60, 0x46, 0x68, - 0x26, 0xea, 0x07, 0x07, 0xc4, 0xf3, 0x00, 0x16, 0x9e, 0x40, 0x37, 0x43, - 0x47, 0x60, 0xc7, 0x68, 0xba, 0xf1, 0x02, 0x0f, 0x8e, 0x68, 0x07, 0xea, - 0x05, 0x07, 0x06, 0xfa, 0x0e, 0xf6, 0x46, 0xea, 0x07, 0x06, 0xc6, 0x60, - 0x14, 0xd1, 0x4f, 0xea, 0xd3, 0x0a, 0x03, 0xf0, 0x07, 0x0b, 0x0f, 0x27, - 0x00, 0xeb, 0x8a, 0x0a, 0x4f, 0xea, 0x8b, 0x0b, 0xda, 0xf8, 0x20, 0x60, - 0x07, 0xfa, 0x0b, 0xf7, 0x26, 0xea, 0x07, 0x07, 0x0e, 0x69, 0x06, 0xfa, - 0x0b, 0xf6, 0x3e, 0x43, 0xca, 0xf8, 0x20, 0x60, 0x06, 0x68, 0x35, 0x40, - 0x04, 0xf0, 0x03, 0x06, 0x06, 0xfa, 0x0e, 0xfe, 0x4e, 0xea, 0x05, 0x05, - 0x05, 0x60, 0xe5, 0x00, 0x6b, 0xd5, 0xd8, 0xf8, 0xf4, 0x50, 0x23, 0xf0, - 0x03, 0x06, 0x03, 0xf0, 0x03, 0x07, 0x4f, 0xf0, 0x0f, 0x0e, 0x45, 0xf0, - 0x02, 0x05, 0x06, 0xf1, 0xb0, 0x46, 0xbf, 0x00, 0xc8, 0xf8, 0xf4, 0x50, - 0x06, 0xf5, 0x80, 0x66, 0xd8, 0xf8, 0xf4, 0x50, 0x05, 0xf0, 0x02, 0x05, - 0x01, 0x95, 0x01, 0x9d, 0x0e, 0xfa, 0x07, 0xf5, 0xd6, 0xf8, 0x08, 0xa0, - 0x2a, 0xea, 0x05, 0x0e, 0x31, 0x4d, 0xa8, 0x42, 0x4d, 0xd0, 0x05, 0xf5, - 0x80, 0x65, 0xa8, 0x42, 0x4b, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, - 0x49, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, 0x47, 0xd0, 0x05, 0xf5, - 0x80, 0x65, 0xa8, 0x42, 0x45, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, - 0x43, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, 0x41, 0xd0, 0x05, 0xf5, - 0x80, 0x65, 0xa8, 0x42, 0x3f, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, - 0x3d, 0xd0, 0x05, 0xf5, 0x80, 0x65, 0xa8, 0x42, 0x0c, 0xbf, 0x09, 0x25, - 0x0a, 0x25, 0xbd, 0x40, 0xe7, 0x03, 0x45, 0xea, 0x0e, 0x05, 0xb5, 0x60, - 0x6f, 0xea, 0x02, 0x06, 0xdc, 0xf8, 0x00, 0x50, 0x54, 0xbf, 0x35, 0x40, - 0x15, 0x43, 0xa7, 0x03, 0xcc, 0xf8, 0x00, 0x50, 0xdc, 0xf8, 0x04, 0x50, - 0x54, 0xbf, 0x35, 0x40, 0x15, 0x43, 0xe7, 0x02, 0x4f, 0xf0, 0xb0, 0x47, - 0xcc, 0xf8, 0x04, 0x50, 0xd9, 0xf8, 0x00, 0x50, 0x54, 0xbf, 0x35, 0x40, - 0x15, 0x43, 0xa4, 0x02, 0x3d, 0x60, 0x7d, 0x68, 0x54, 0xbf, 0x35, 0x40, - 0x15, 0x43, 0xc9, 0xf8, 0x04, 0x50, 0x01, 0x33, 0x3b, 0xe7, 0x00, 0x25, - 0xd5, 0xe7, 0x01, 0x25, 0xd3, 0xe7, 0x02, 0x25, 0xd1, 0xe7, 0x03, 0x25, - 0xcf, 0xe7, 0x04, 0x25, 0xcd, 0xe7, 0x05, 0x25, 0xcb, 0xe7, 0x06, 0x25, - 0xc9, 0xe7, 0x07, 0x25, 0xc7, 0xe7, 0x08, 0x25, 0xc5, 0xe7, 0x00, 0xbf, - 0x00, 0x00, 0x02, 0x58, 0x00, 0x44, 0x02, 0x58, 0x80, 0x00, 0x00, 0x58, - 0x0a, 0x4b, 0xda, 0x68, 0x42, 0xf0, 0x01, 0x02, 0xda, 0x60, 0xda, 0x68, - 0xd2, 0x07, 0x0b, 0xd5, 0xd3, 0xf8, 0x0c, 0x21, 0x42, 0xf0, 0x01, 0x02, - 0xc3, 0xf8, 0x0c, 0x21, 0xd3, 0xf8, 0x0c, 0x01, 0xc0, 0x43, 0x00, 0xf0, - 0x01, 0x00, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x00, 0x52, - 0x10, 0x4b, 0xda, 0x68, 0xd2, 0x07, 0x06, 0xd4, 0x0e, 0x4b, 0xd3, 0xf8, - 0x0c, 0x01, 0x10, 0xf0, 0x01, 0x00, 0x0a, 0xd1, 0x70, 0x47, 0x0c, 0x4a, - 0x5a, 0x60, 0x02, 0xf1, 0x88, 0x32, 0x5a, 0x60, 0xdb, 0x68, 0xdb, 0x07, - 0xf0, 0xd5, 0x01, 0x20, 0x70, 0x47, 0x07, 0x4a, 0xc3, 0xf8, 0x04, 0x21, - 0x02, 0xf1, 0x88, 0x32, 0xc3, 0xf8, 0x04, 0x21, 0xd3, 0xf8, 0x0c, 0x01, - 0x00, 0xf0, 0x01, 0x00, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x20, 0x00, 0x52, - 0x23, 0x01, 0x67, 0x45, 0x50, 0x4a, 0x08, 0xb5, 0x03, 0x68, 0x93, 0x42, - 0x52, 0xd0, 0x4f, 0x49, 0x8b, 0x42, 0x4f, 0xd0, 0x18, 0x31, 0x8b, 0x42, - 0x4c, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x49, 0xd0, 0x18, 0x31, 0x8b, 0x42, - 0x46, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x43, 0xd0, 0x18, 0x31, 0x8b, 0x42, - 0x40, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x3d, 0xd0, 0x01, 0xf5, 0x56, 0x71, - 0x8b, 0x42, 0x39, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x36, 0xd0, 0x18, 0x31, - 0x8b, 0x42, 0x33, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x30, 0xd0, 0x18, 0x31, - 0x8b, 0x42, 0x2d, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x2a, 0xd0, 0x18, 0x31, - 0x8b, 0x42, 0x27, 0xd0, 0x18, 0x31, 0x8b, 0x42, 0x24, 0xd0, 0x1a, 0x68, - 0x22, 0xf0, 0x0e, 0x02, 0x1a, 0x60, 0x1a, 0x68, 0x22, 0xf0, 0x01, 0x02, - 0x1a, 0x60, 0x35, 0x4a, 0x93, 0x42, 0x43, 0xd1, 0x02, 0x6e, 0x13, 0x68, - 0x23, 0xf4, 0x80, 0x73, 0x13, 0x60, 0xd0, 0xe9, 0x16, 0x13, 0x03, 0xf0, - 0x1f, 0x02, 0x01, 0x23, 0x93, 0x40, 0x4b, 0x60, 0xd0, 0xe9, 0x19, 0x32, - 0x5a, 0x60, 0xc3, 0x6e, 0x00, 0x2b, 0x46, 0xd0, 0x1a, 0x68, 0x22, 0xf4, - 0x80, 0x72, 0x1a, 0x60, 0xd0, 0xe9, 0x1c, 0x32, 0x5a, 0x60, 0x3e, 0xe0, - 0x04, 0x21, 0x93, 0x42, 0x80, 0xf8, 0x35, 0x10, 0x1e, 0xd0, 0x23, 0x4a, - 0x93, 0x42, 0x1b, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x18, 0xd0, 0x18, 0x32, - 0x93, 0x42, 0x15, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x12, 0xd0, 0x18, 0x32, - 0x93, 0x42, 0x0f, 0xd0, 0x18, 0x32, 0x93, 0x42, 0x0c, 0xd0, 0x18, 0x32, - 0x93, 0x42, 0x09, 0xd0, 0x02, 0xf5, 0x56, 0x72, 0x93, 0x42, 0x05, 0xd0, - 0x18, 0x32, 0x93, 0x42, 0x02, 0xd0, 0x18, 0x32, 0x93, 0x42, 0xff, 0xd0, - 0x1a, 0x68, 0x22, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x00, 0x20, 0x08, 0xbd, - 0x12, 0x4a, 0x93, 0x42, 0xb8, 0xd0, 0x14, 0x32, 0x93, 0x42, 0xb5, 0xd0, - 0x14, 0x32, 0x93, 0x42, 0xb2, 0xd0, 0x14, 0x32, 0x93, 0x42, 0xaf, 0xd0, - 0x14, 0x32, 0x93, 0x42, 0xac, 0xd0, 0x14, 0x32, 0x93, 0x42, 0xa9, 0xd0, - 0x14, 0x32, 0x93, 0x42, 0xa6, 0xd0, 0x00, 0x23, 0x80, 0xf8, 0x34, 0x30, - 0x01, 0x23, 0x80, 0xf8, 0x35, 0x30, 0x03, 0x6d, 0x00, 0x2b, 0xdf, 0xd0, - 0x98, 0x47, 0xdd, 0xe7, 0x10, 0x00, 0x02, 0x40, 0x28, 0x00, 0x02, 0x40, - 0x08, 0x54, 0x02, 0x58, 0x1c, 0x54, 0x02, 0x58, 0x00, 0x28, 0x0d, 0xdb, - 0x43, 0x09, 0x01, 0x22, 0x00, 0xf0, 0x1f, 0x00, 0x20, 0x33, 0x02, 0xfa, - 0x00, 0xf0, 0x04, 0x4a, 0x42, 0xf8, 0x23, 0x00, 0xbf, 0xf3, 0x4f, 0x8f, - 0xbf, 0xf3, 0x6f, 0x8f, 0x70, 0x47, 0x00, 0xbf, 0x00, 0xe1, 0x00, 0xe0, - 0x38, 0xb5, 0x04, 0x46, 0xfb, 0xf7, 0x72, 0xfa, 0x05, 0x46, 0x01, 0x34, - 0xfb, 0xf7, 0x6e, 0xfa, 0x43, 0x1b, 0xa3, 0x42, 0xfa, 0xd3, 0x38, 0xbd, - 0xf8, 0xb5, 0xc5, 0x69, 0x0f, 0x46, 0x0e, 0x68, 0x08, 0x3d, 0xae, 0x42, - 0x13, 0xd3, 0xb6, 0xfb, 0xf5, 0xf0, 0x01, 0x38, 0x13, 0xf0, 0x3e, 0xfe, - 0x84, 0x1c, 0xa6, 0xeb, 0x84, 0x04, 0xb4, 0xfb, 0xf5, 0xf4, 0x20, 0x46, - 0x13, 0xf0, 0x36, 0xfe, 0xa6, 0xeb, 0x80, 0x00, 0x04, 0xfb, 0x15, 0x05, - 0x20, 0x46, 0x3d, 0x60, 0xf8, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x2d, 0xe9, - 0xf0, 0x4f, 0x85, 0xb0, 0x0f, 0x46, 0x91, 0x46, 0x98, 0x46, 0x10, 0x9d, - 0x03, 0x90, 0xdd, 0xe9, 0x0e, 0x46, 0x0d, 0xb9, 0x28, 0x46, 0x59, 0xe0, - 0x03, 0x9b, 0x18, 0x68, 0xb9, 0xf1, 0x00, 0x0f, 0x1e, 0xd0, 0xd9, 0xf8, - 0x00, 0x30, 0x43, 0x45, 0x1a, 0xd1, 0xd9, 0xf8, 0x04, 0x10, 0xa1, 0x42, - 0x16, 0xd8, 0x82, 0x69, 0x01, 0xeb, 0x02, 0x0a, 0x54, 0x45, 0x11, 0xd2, - 0xaa, 0xeb, 0x04, 0x0a, 0x61, 0x1a, 0xd9, 0xf8, 0x08, 0x30, 0xaa, 0x45, - 0x28, 0xbf, 0xaa, 0x46, 0x30, 0x46, 0x52, 0x46, 0x19, 0x44, 0x56, 0x44, - 0x54, 0x44, 0xa5, 0xeb, 0x0a, 0x05, 0x11, 0xf0, 0xfb, 0xfe, 0xd8, 0xe7, - 0x3a, 0x68, 0x43, 0x69, 0x90, 0x45, 0x0e, 0xd1, 0x79, 0x68, 0x8c, 0x42, - 0x0b, 0xd3, 0x01, 0xeb, 0x03, 0x0a, 0x54, 0x45, 0x07, 0xd2, 0xaa, 0xeb, - 0x04, 0x0a, 0x61, 0x1a, 0xbb, 0x68, 0xaa, 0x45, 0x28, 0xbf, 0xaa, 0x46, - 0xe2, 0xe7, 0xb4, 0xfb, 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x42, 0xd0, 0xf8, - 0x04, 0xb0, 0x8a, 0xb9, 0x9d, 0x42, 0x0f, 0xd3, 0x22, 0x46, 0x41, 0x46, - 0xb5, 0xfb, 0xf3, 0xfa, 0x03, 0xfb, 0x1a, 0x5a, 0x33, 0x46, 0xa5, 0xeb, - 0x0a, 0x05, 0x00, 0x95, 0xd8, 0x47, 0x68, 0xb9, 0x2e, 0x44, 0x2c, 0x44, - 0x55, 0x46, 0xac, 0xe7, 0xa2, 0x1a, 0x00, 0x93, 0x41, 0x46, 0xbb, 0x68, - 0xc7, 0xf8, 0x00, 0x80, 0x7a, 0x60, 0xd8, 0x47, 0x00, 0x28, 0xa2, 0xd0, - 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x2d, 0xe9, 0xf0, 0x4f, 0x8b, 0xb0, - 0x91, 0x46, 0x07, 0x46, 0x88, 0x46, 0x14, 0x9a, 0x07, 0xa9, 0x00, 0x68, - 0x0d, 0xf1, 0x20, 0x0b, 0x01, 0x3a, 0x05, 0x93, 0xdd, 0xf8, 0x58, 0xa0, - 0x07, 0x92, 0xff, 0xf7, 0x67, 0xff, 0x05, 0x9b, 0x05, 0x46, 0x19, 0x46, - 0x05, 0x93, 0x50, 0x46, 0x15, 0x9b, 0x98, 0x47, 0x02, 0x46, 0x18, 0xbb, - 0x15, 0xb3, 0x05, 0xf0, 0x01, 0x06, 0x4a, 0x46, 0x00, 0x90, 0x38, 0x46, - 0xc6, 0xf1, 0x02, 0x04, 0x05, 0x9b, 0xa1, 0x00, 0xcd, 0xe9, 0x01, 0xb1, - 0x41, 0x46, 0xff, 0xf7, 0x6c, 0xff, 0x02, 0x46, 0x90, 0xb9, 0x01, 0x3c, - 0x94, 0x42, 0x07, 0xdc, 0x0a, 0xab, 0x02, 0x3e, 0x03, 0xeb, 0x84, 0x04, - 0x35, 0x44, 0x54, 0xf8, 0x08, 0x3c, 0xdc, 0xe7, 0x08, 0x99, 0x50, 0x46, - 0x15, 0x9b, 0x98, 0x47, 0x01, 0x22, 0x00, 0x28, 0xee, 0xd0, 0x02, 0x46, - 0x10, 0x46, 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x2d, 0xe9, 0xf0, 0x47, - 0x86, 0xb0, 0x05, 0x46, 0x0f, 0x46, 0x14, 0x46, 0x00, 0xf1, 0x14, 0x09, - 0xd6, 0x18, 0x4f, 0xf0, 0x01, 0x0a, 0x0d, 0xf1, 0x17, 0x08, 0xb4, 0x42, - 0x03, 0xd1, 0x00, 0x20, 0x06, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x00, 0x94, - 0x3b, 0x46, 0x00, 0x22, 0x49, 0x46, 0x28, 0x46, 0x01, 0x34, 0xcd, 0xe9, - 0x01, 0x8a, 0xff, 0xf7, 0x36, 0xff, 0x00, 0x28, 0xf0, 0xd1, 0x01, 0x22, - 0x41, 0x46, 0x0e, 0x98, 0xfe, 0xf7, 0xec, 0xfc, 0xe7, 0xe7, 0x1f, 0xb5, - 0x06, 0x9c, 0x00, 0x92, 0x00, 0x22, 0xcd, 0xe9, 0x01, 0x34, 0x0b, 0x46, - 0x00, 0xf1, 0x14, 0x01, 0xff, 0xf7, 0x23, 0xff, 0x04, 0xb0, 0x10, 0xbd, - 0x2d, 0xe9, 0xf0, 0x4f, 0x13, 0x68, 0x8b, 0xb0, 0x00, 0x26, 0x07, 0x46, - 0x04, 0x93, 0x0c, 0x46, 0x53, 0x68, 0xb0, 0x46, 0x0d, 0xf1, 0x10, 0x0b, - 0x06, 0xad, 0x4f, 0xf0, 0x10, 0x0a, 0x05, 0x93, 0x5b, 0xf8, 0x26, 0x90, - 0x2b, 0x46, 0x00, 0x22, 0x38, 0x46, 0x49, 0x46, 0xcd, 0xf8, 0x00, 0xa0, - 0xff, 0xf7, 0xd9, 0xff, 0x70, 0xb1, 0x10, 0xf1, 0x34, 0x0f, 0x06, 0xd1, - 0x46, 0xb1, 0xb8, 0xf1, 0x00, 0x0f, 0x14, 0xbf, 0x00, 0x20, 0x6f, 0xf0, - 0x33, 0x00, 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x26, 0xe5, 0xe7, - 0xb8, 0xf1, 0x00, 0x0f, 0x04, 0xd0, 0xe2, 0x69, 0x06, 0x9b, 0x9b, 0x1a, - 0x00, 0x2b, 0xeb, 0xdb, 0x07, 0x9b, 0x23, 0xf0, 0x00, 0x43, 0x13, 0x2b, - 0xe6, 0xd9, 0x3a, 0x68, 0xd2, 0x69, 0x93, 0x42, 0xe2, 0xd8, 0x4f, 0xf0, - 0xff, 0x33, 0x03, 0xa8, 0x10, 0x22, 0x29, 0x46, 0x03, 0x93, 0xfe, 0xf7, - 0x9b, 0xfc, 0x07, 0x9b, 0x10, 0x22, 0x00, 0x90, 0x49, 0x46, 0x23, 0xf0, - 0x00, 0x43, 0x38, 0x46, 0x10, 0x3b, 0xff, 0xf7, 0x81, 0xff, 0x00, 0x28, - 0xcb, 0xd1, 0x03, 0x9b, 0x00, 0x2b, 0xcb, 0xd1, 0x0a, 0xaa, 0x86, 0xf0, - 0x01, 0x03, 0x04, 0xf1, 0x1c, 0x0c, 0xc4, 0xf8, 0x04, 0x90, 0x02, 0xeb, - 0x83, 0x03, 0x4f, 0xf0, 0x01, 0x08, 0x53, 0xf8, 0x18, 0x3c, 0xc4, 0xe9, - 0x02, 0x3a, 0x95, 0xe8, 0x0f, 0x00, 0x8c, 0xe8, 0x0f, 0x00, 0xb7, 0xe7, - 0x2d, 0xe9, 0xf0, 0x43, 0x01, 0x23, 0x97, 0xb0, 0x0f, 0x46, 0x06, 0x46, - 0x00, 0x21, 0x90, 0x46, 0xcd, 0xe9, 0x05, 0x13, 0x05, 0x99, 0x40, 0x46, - 0xb8, 0x47, 0x04, 0x46, 0x10, 0xbb, 0x06, 0x99, 0x40, 0x46, 0xb8, 0x47, - 0x04, 0x46, 0xe8, 0xb9, 0x05, 0xaa, 0x0b, 0xa9, 0x30, 0x46, 0xff, 0xf7, - 0x81, 0xff, 0x04, 0x46, 0xb0, 0xb9, 0x0c, 0x25, 0x13, 0x9b, 0x0e, 0x9a, - 0x23, 0xf0, 0x00, 0x43, 0x02, 0xf1, 0x0c, 0x01, 0x04, 0x3b, 0x99, 0x42, - 0x10, 0xd9, 0x14, 0x9b, 0x05, 0xa8, 0x05, 0x93, 0x15, 0x9b, 0x06, 0x93, - 0xfe, 0xf7, 0x86, 0xfc, 0x00, 0x28, 0xdb, 0xd0, 0xf5, 0x68, 0x06, 0xf1, - 0x14, 0x09, 0x4d, 0xbb, 0x20, 0x46, 0x17, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, - 0x0c, 0x99, 0x08, 0xab, 0x30, 0x46, 0x00, 0x95, 0xff, 0xf7, 0x51, 0xff, - 0x01, 0x46, 0x00, 0x28, 0x42, 0xd1, 0x07, 0xa8, 0xfe, 0xf7, 0x58, 0xfc, - 0x0e, 0x9b, 0x18, 0x44, 0x9d, 0xf8, 0x20, 0x30, 0x03, 0xf0, 0x70, 0x03, - 0x0e, 0x90, 0x10, 0x2b, 0xd0, 0xd1, 0x0a, 0x9b, 0x00, 0x2b, 0xcc, 0xd0, - 0x0a, 0x46, 0x00, 0x93, 0x06, 0xf1, 0x14, 0x01, 0x09, 0x9b, 0x30, 0x46, - 0xcd, 0xe9, 0x01, 0x78, 0xff, 0xf7, 0xcd, 0xfe, 0x00, 0x28, 0xc0, 0xd0, - 0x04, 0x46, 0xd5, 0xe7, 0xeb, 0x69, 0xda, 0x03, 0x12, 0xd4, 0xeb, 0x69, - 0x9b, 0x03, 0x0d, 0xd5, 0x2b, 0x6a, 0x5b, 0xb1, 0x00, 0x93, 0x05, 0xf1, - 0x2c, 0x02, 0x49, 0x46, 0x30, 0x46, 0xcd, 0xe9, 0x01, 0x78, 0x6b, 0x6a, - 0xff, 0xf7, 0xb7, 0xfe, 0x00, 0x28, 0xe9, 0xd1, 0x2d, 0x68, 0xbe, 0xe7, - 0x6b, 0x69, 0x00, 0x2b, 0xe9, 0xd0, 0x00, 0x93, 0x05, 0xf1, 0x2c, 0x02, - 0x49, 0x46, 0x30, 0x46, 0xcd, 0xe9, 0x01, 0x78, 0x2b, 0x69, 0xff, 0xf7, - 0xa6, 0xfe, 0x00, 0x28, 0xdd, 0xd0, 0xd7, 0xe7, 0x04, 0x46, 0xad, 0xe7, - 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, 0x0d, 0x46, 0x01, 0x27, 0x30, 0x4e, - 0x4f, 0xf0, 0x00, 0x08, 0x22, 0x6b, 0xd4, 0xe9, 0x0d, 0x13, 0x91, 0x42, - 0x24, 0xd1, 0x00, 0x2b, 0x52, 0xd0, 0x20, 0x68, 0xe1, 0x6a, 0xd0, 0xf8, - 0x20, 0xc0, 0x0a, 0x44, 0xb2, 0xfb, 0xfc, 0xf1, 0x0c, 0xfb, 0x11, 0x22, - 0x00, 0x21, 0xe2, 0x62, 0x42, 0x6a, 0xe0, 0x6b, 0x93, 0x42, 0x94, 0xbf, - 0x23, 0x63, 0x22, 0x63, 0xd2, 0x08, 0xc4, 0xf8, 0x34, 0x80, 0x11, 0xf0, - 0x4b, 0xfd, 0x20, 0x1d, 0xfe, 0xf7, 0x06, 0xfc, 0x00, 0x28, 0xdd, 0xd1, - 0x22, 0x46, 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x4d, 0xff, 0x00, 0x28, - 0xd4, 0xd0, 0x25, 0xe0, 0x48, 0x1c, 0x01, 0x3b, 0xd4, 0xf8, 0x3c, 0xc0, - 0x60, 0x63, 0x48, 0x09, 0xa3, 0x63, 0x01, 0xf0, 0x1f, 0x03, 0x5c, 0xf8, - 0x20, 0x00, 0x07, 0xfa, 0x03, 0xf3, 0x03, 0x42, 0xc7, 0xd1, 0xe3, 0x6a, - 0x19, 0x44, 0x23, 0x68, 0x1a, 0x6a, 0xb1, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, - 0x13, 0x11, 0x29, 0x60, 0x01, 0x21, 0x25, 0x6b, 0x63, 0x6b, 0xab, 0x42, - 0x10, 0xd0, 0x5a, 0x09, 0x03, 0xf0, 0x1f, 0x00, 0x5c, 0xf8, 0x22, 0x20, - 0x01, 0xfa, 0x00, 0xf0, 0x10, 0x40, 0x01, 0xd1, 0xbd, 0xe8, 0xf0, 0x81, - 0x01, 0x33, 0x63, 0x63, 0xa3, 0x6b, 0x01, 0x3b, 0xa3, 0x63, 0xeb, 0xe7, - 0x00, 0x20, 0xf5, 0xe7, 0x6f, 0xf0, 0x1b, 0x00, 0xf2, 0xe7, 0x00, 0xbf, - 0x7d, 0x81, 0x00, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, 0x04, 0x46, 0x87, 0xb0, - 0x0e, 0x46, 0x00, 0xf1, 0x14, 0x0a, 0x05, 0xa9, 0x20, 0x46, 0xff, 0xf7, - 0x8d, 0xff, 0x05, 0x46, 0x48, 0xb9, 0x20, 0x68, 0x05, 0x99, 0xc3, 0x68, - 0x98, 0x47, 0x05, 0x46, 0x00, 0x28, 0x3b, 0xd0, 0x10, 0xf1, 0x34, 0x0f, - 0xef, 0xd0, 0x28, 0x46, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x0d, 0xf1, - 0x13, 0x07, 0x73, 0x6a, 0x5a, 0x46, 0x51, 0x46, 0x20, 0x46, 0xcd, 0xf8, - 0x08, 0x90, 0xcd, 0xe9, 0x00, 0x87, 0xff, 0xf7, 0xa8, 0xfd, 0x70, 0xb9, - 0x05, 0x9b, 0x52, 0x46, 0x04, 0xf1, 0x20, 0x01, 0x20, 0x46, 0xcd, 0xf8, - 0x00, 0x80, 0xcd, 0xe9, 0x01, 0x79, 0xff, 0xf7, 0x5f, 0xf9, 0x20, 0xb1, - 0x10, 0xf1, 0x34, 0x0f, 0xcf, 0xd0, 0x05, 0x46, 0xdd, 0xe7, 0x08, 0xf1, - 0x01, 0x08, 0xb3, 0x6a, 0x43, 0x45, 0xdc, 0xd8, 0x23, 0x68, 0xa1, 0x6a, - 0x9a, 0x69, 0x70, 0x6b, 0x11, 0xf0, 0xb6, 0xfc, 0x23, 0x6a, 0x04, 0xf1, - 0x20, 0x01, 0x20, 0x68, 0xf3, 0x62, 0x63, 0x6a, 0x33, 0x63, 0xff, 0xf7, - 0xd2, 0xf8, 0x05, 0x9b, 0x73, 0x62, 0xc6, 0xe7, 0x80, 0x46, 0x06, 0xf1, - 0x2c, 0x0b, 0x4f, 0xf0, 0x01, 0x09, 0xe4, 0xe7, 0xcb, 0x69, 0x5a, 0x03, - 0x44, 0xbf, 0x23, 0xf4, 0x80, 0x23, 0x4f, 0xf0, 0xff, 0x32, 0x2d, 0xe9, - 0xf0, 0x41, 0x48, 0xbf, 0xcb, 0x61, 0x05, 0x46, 0xcb, 0x69, 0x90, 0xb0, - 0x48, 0xbf, 0xca, 0x62, 0x0c, 0x46, 0x13, 0xf4, 0x00, 0x30, 0x2c, 0xd0, - 0x0f, 0x6a, 0x2c, 0x22, 0x00, 0x21, 0x02, 0xa8, 0x11, 0xf0, 0x98, 0xfc, - 0x23, 0x69, 0x05, 0xf1, 0x14, 0x06, 0x06, 0x93, 0x63, 0x69, 0x07, 0x93, - 0x01, 0x23, 0x96, 0xe8, 0x07, 0x00, 0xcd, 0xe9, 0x09, 0x37, 0x10, 0xab, - 0x03, 0xe9, 0x07, 0x00, 0x4f, 0xf0, 0xff, 0x33, 0x98, 0x46, 0x6b, 0x61, - 0x22, 0x6a, 0x63, 0x69, 0x9a, 0x42, 0x13, 0xd3, 0x04, 0xf1, 0x2c, 0x08, - 0x32, 0x46, 0x41, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xd8, 0xf8, 0x28, 0xb3, - 0x10, 0xf1, 0x34, 0x0f, 0x05, 0xd1, 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, - 0x6b, 0xff, 0x00, 0x28, 0xf0, 0xd0, 0x10, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, - 0x01, 0x23, 0x0d, 0xf1, 0x07, 0x02, 0x02, 0xa9, 0x28, 0x46, 0x00, 0xf0, - 0x52, 0xf9, 0x00, 0x28, 0xf3, 0xdb, 0x01, 0x23, 0x0d, 0xf1, 0x07, 0x02, - 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x16, 0xf8, 0x00, 0x28, 0xea, 0xdb, - 0x6b, 0x69, 0x01, 0x33, 0x1c, 0xbf, 0xcd, 0xf8, 0x34, 0x80, 0xc5, 0xf8, - 0x14, 0x80, 0xcd, 0xe7, 0x63, 0x6a, 0x23, 0x61, 0x23, 0x6a, 0x63, 0x61, - 0xe3, 0x69, 0x23, 0xf4, 0x00, 0x33, 0x43, 0xf4, 0x80, 0x33, 0xc4, 0xe9, - 0x07, 0x37, 0xd6, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x9b, 0x46, 0x8d, 0xb0, - 0xcb, 0x69, 0x05, 0x46, 0x04, 0x92, 0x0c, 0x46, 0x03, 0xf0, 0x03, 0x02, - 0x01, 0x2a, 0x00, 0xf0, 0x20, 0x81, 0x5e, 0x03, 0x14, 0xd4, 0xe6, 0x69, - 0x32, 0x05, 0x1a, 0xd4, 0x27, 0x6a, 0x17, 0xeb, 0x0b, 0x0f, 0x00, 0xf1, - 0x19, 0x81, 0x16, 0xf4, 0x00, 0x36, 0x18, 0xd0, 0xd9, 0x46, 0xe3, 0x69, - 0xb9, 0xf1, 0x00, 0x0f, 0x25, 0xd1, 0x23, 0xf4, 0x00, 0x23, 0x5a, 0x46, - 0xe3, 0x61, 0x04, 0xe0, 0xff, 0xf7, 0x70, 0xff, 0x02, 0x46, 0x00, 0x28, - 0xe5, 0xd0, 0x10, 0x46, 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x62, 0x69, - 0x21, 0x6a, 0x8a, 0x42, 0x88, 0xbf, 0x22, 0x62, 0xde, 0xe7, 0x63, 0x69, - 0x9f, 0x42, 0xe3, 0xd9, 0x23, 0x62, 0x0b, 0xaa, 0x01, 0x23, 0x21, 0x46, - 0x28, 0x46, 0x8d, 0xf8, 0x2c, 0x60, 0xff, 0xf7, 0xc1, 0xff, 0x02, 0x1e, - 0xe7, 0xdb, 0x23, 0x6a, 0x9f, 0x42, 0xf2, 0xd8, 0xd4, 0xe7, 0x9b, 0x03, - 0x04, 0xf1, 0x2c, 0x06, 0x20, 0xd5, 0x2b, 0x68, 0xa2, 0x6a, 0xdb, 0x69, - 0x9a, 0x42, 0x42, 0xd1, 0x2b, 0x68, 0x05, 0xf1, 0x14, 0x0a, 0x1b, 0x6a, - 0xab, 0x63, 0xd4, 0xe9, 0x08, 0x32, 0xcd, 0xe9, 0x09, 0x23, 0x0b, 0xa9, - 0x28, 0x46, 0xff, 0xf7, 0x7d, 0xfe, 0x02, 0x46, 0xf8, 0xb9, 0x28, 0x68, - 0x0b, 0x99, 0xc3, 0x68, 0x98, 0x47, 0x02, 0x46, 0x18, 0xb3, 0x12, 0xf1, - 0x34, 0x0f, 0x16, 0xd1, 0x4f, 0xf0, 0xff, 0x33, 0x2b, 0x62, 0xec, 0xe7, - 0x23, 0x6a, 0x00, 0x2b, 0xe0, 0xd0, 0x04, 0xf1, 0x28, 0x02, 0x01, 0x3b, - 0x31, 0x46, 0x28, 0x46, 0x02, 0x92, 0x04, 0xf1, 0x24, 0x02, 0x00, 0x93, - 0x01, 0x92, 0xd4, 0xe9, 0x04, 0x23, 0xf9, 0xf7, 0x18, 0xfc, 0x02, 0x46, - 0x20, 0xb1, 0xe3, 0x69, 0x43, 0xf4, 0x00, 0x23, 0xe3, 0x61, 0xa6, 0xe7, - 0x31, 0x46, 0x28, 0x68, 0xfe, 0xf7, 0xd9, 0xff, 0xc6, 0xe7, 0x0a, 0x9b, - 0x28, 0x68, 0x43, 0xbb, 0x0b, 0x9a, 0x62, 0x62, 0xa3, 0x62, 0xe3, 0x69, - 0x43, 0xf4, 0x00, 0x33, 0xe3, 0x61, 0xa8, 0x46, 0x58, 0xf8, 0x14, 0x3b, - 0xdf, 0x69, 0xa3, 0x6a, 0xff, 0x1a, 0x4f, 0x45, 0x28, 0xbf, 0x4f, 0x46, - 0x04, 0x9b, 0x42, 0x46, 0x31, 0x46, 0x28, 0x46, 0x01, 0x93, 0xa3, 0x6a, - 0x02, 0x97, 0x00, 0x93, 0x63, 0x6a, 0xff, 0xf7, 0x2d, 0xf8, 0x02, 0x46, - 0x00, 0x28, 0x75, 0xd0, 0x10, 0xf1, 0x34, 0x0f, 0xd1, 0xd1, 0x21, 0x46, - 0x28, 0x46, 0xff, 0xf7, 0x91, 0xfe, 0x02, 0x46, 0x00, 0x28, 0xe7, 0xd0, - 0xc9, 0xe7, 0x01, 0x3b, 0x0a, 0xa9, 0x05, 0x92, 0x0a, 0x93, 0xff, 0xf7, - 0x39, 0xfc, 0x0a, 0x9b, 0x29, 0x68, 0x01, 0x33, 0x05, 0x9a, 0xc9, 0x69, - 0x0a, 0x93, 0x8b, 0x42, 0x4a, 0xd1, 0x01, 0x30, 0x90, 0x46, 0x09, 0xaf, - 0x90, 0xfa, 0xa0, 0xf3, 0xb3, 0xfa, 0x83, 0xf3, 0x05, 0x93, 0x01, 0x33, - 0x06, 0x93, 0x4f, 0xea, 0x88, 0x03, 0x52, 0x46, 0x31, 0x46, 0x28, 0x46, - 0x07, 0x93, 0x04, 0x23, 0xcd, 0xe9, 0x01, 0x73, 0x07, 0x9b, 0x00, 0x93, - 0x0b, 0x9b, 0xfe, 0xf7, 0xf9, 0xff, 0x02, 0x46, 0x00, 0x28, 0x86, 0xd1, - 0x05, 0x9b, 0x43, 0x45, 0x30, 0xd1, 0x08, 0xf1, 0x01, 0x08, 0x06, 0x9b, - 0x43, 0x45, 0xe6, 0xd8, 0x0b, 0x9b, 0x63, 0x62, 0x06, 0x9b, 0x9b, 0x00, - 0xa2, 0xe7, 0x01, 0x23, 0x00, 0x22, 0x51, 0x46, 0x28, 0x46, 0xcd, 0xf8, - 0x00, 0x80, 0xcd, 0xe9, 0x01, 0x73, 0x09, 0x9b, 0xff, 0xf7, 0x1b, 0xfc, - 0x02, 0x46, 0x00, 0x28, 0x85, 0xd1, 0x01, 0x23, 0x52, 0x46, 0x31, 0x46, - 0x28, 0x46, 0xcd, 0xf8, 0x00, 0x80, 0xcd, 0xe9, 0x01, 0x73, 0x0b, 0x9b, - 0xfe, 0xf7, 0xd0, 0xff, 0x02, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x5d, 0xaf, - 0x08, 0xf1, 0x01, 0x08, 0x0a, 0x9b, 0x98, 0x45, 0xdd, 0xd3, 0x7d, 0xe7, - 0x90, 0x46, 0x0d, 0xf1, 0x23, 0x07, 0xf7, 0xe7, 0x04, 0x23, 0x51, 0x46, - 0x28, 0x46, 0xcd, 0xe9, 0x01, 0x73, 0x07, 0x9b, 0x00, 0x93, 0x09, 0x9b, - 0xff, 0xf7, 0xf5, 0xfb, 0x02, 0x46, 0x00, 0x28, 0xc1, 0xd0, 0x5e, 0xe7, - 0x23, 0x6a, 0xa9, 0xeb, 0x07, 0x09, 0x3b, 0x44, 0x23, 0x62, 0xa3, 0x6a, - 0x3b, 0x44, 0xa3, 0x62, 0x04, 0x9b, 0x3b, 0x44, 0x04, 0x93, 0x2b, 0x68, - 0x1b, 0x6a, 0xab, 0x63, 0xed, 0xe6, 0x6f, 0xf0, 0x08, 0x02, 0xf8, 0xe6, - 0x6f, 0xf0, 0x1a, 0x02, 0xf5, 0xe6, 0x2d, 0xe9, 0xf0, 0x4f, 0x1d, 0x46, - 0xcb, 0x69, 0x90, 0x46, 0x87, 0xb0, 0x03, 0xf0, 0x03, 0x02, 0x07, 0x46, - 0x0c, 0x46, 0x02, 0x2a, 0x54, 0xd0, 0x9a, 0x03, 0x05, 0xd4, 0x26, 0x6a, - 0x62, 0x69, 0x96, 0x42, 0x08, 0xd3, 0x00, 0x20, 0x03, 0xe0, 0xff, 0xf7, - 0x4d, 0xfe, 0x00, 0x28, 0xf5, 0xd0, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, - 0x96, 0x1b, 0x04, 0xf1, 0x2c, 0x01, 0x04, 0xf1, 0x28, 0x0a, 0x04, 0xf1, - 0x24, 0x0b, 0xae, 0x42, 0x28, 0xbf, 0x2e, 0x46, 0xb1, 0x46, 0xb9, 0xf1, - 0x00, 0x0f, 0x01, 0xd1, 0x30, 0x46, 0xec, 0xe7, 0xe3, 0x69, 0x5b, 0x03, - 0x04, 0xd5, 0x3b, 0x68, 0xa2, 0x6a, 0xdb, 0x69, 0x9a, 0x42, 0x10, 0xd1, - 0x23, 0x6a, 0x38, 0x46, 0x05, 0x91, 0x00, 0x93, 0xcd, 0xe9, 0x01, 0xba, - 0xd4, 0xe9, 0x04, 0x23, 0xf9, 0xf7, 0x23, 0xfb, 0x00, 0x28, 0xd8, 0xd1, - 0xe3, 0x69, 0x05, 0x99, 0x43, 0xf4, 0x80, 0x23, 0xe3, 0x61, 0x3a, 0x68, - 0x38, 0x46, 0xa3, 0x6a, 0xd5, 0x69, 0x00, 0x22, 0x00, 0x93, 0xed, 0x1a, - 0x63, 0x6a, 0x05, 0x91, 0x4d, 0x45, 0x28, 0xbf, 0x4d, 0x46, 0xcd, 0xe9, - 0x01, 0x85, 0xff, 0xf7, 0x88, 0xfb, 0x00, 0x28, 0xc1, 0xd1, 0x23, 0x6a, - 0xa8, 0x44, 0xa9, 0xeb, 0x05, 0x09, 0x05, 0x99, 0x2b, 0x44, 0x23, 0x62, - 0xa3, 0x6a, 0x2b, 0x44, 0xa3, 0x62, 0xc4, 0xe7, 0x6f, 0xf0, 0x08, 0x00, - 0xb3, 0xe7, 0xf7, 0xb5, 0x04, 0x46, 0x04, 0x30, 0x0e, 0x46, 0x15, 0x46, - 0xfe, 0xf7, 0x68, 0xf9, 0x10, 0xb1, 0x00, 0x20, 0x03, 0xb0, 0xf0, 0xbd, - 0x01, 0x23, 0x00, 0x90, 0x6a, 0x46, 0x29, 0x46, 0x20, 0x46, 0x01, 0x93, - 0xff, 0xf7, 0x44, 0xfc, 0x00, 0x28, 0xf3, 0xd1, 0x05, 0xf1, 0x24, 0x07, - 0x38, 0x46, 0xfe, 0xf7, 0x55, 0xf9, 0x00, 0x28, 0xeb, 0xd1, 0x31, 0x46, - 0x38, 0x46, 0xfe, 0xf7, 0x3e, 0xf9, 0x38, 0xb1, 0x3a, 0x46, 0x29, 0x46, - 0x20, 0x46, 0xff, 0xf7, 0x31, 0xfc, 0x00, 0x28, 0xee, 0xd0, 0xdf, 0xe7, - 0x01, 0x20, 0xdd, 0xe7, 0x2d, 0xe9, 0xf3, 0x41, 0x06, 0x46, 0x0c, 0x46, - 0x15, 0x46, 0x01, 0xf1, 0x24, 0x08, 0x10, 0x27, 0x22, 0x6a, 0xe1, 0x68, - 0x22, 0xf0, 0x00, 0x43, 0x01, 0xf1, 0x0c, 0x00, 0x04, 0x3b, 0x98, 0x42, - 0x17, 0xd8, 0x0c, 0x23, 0x0a, 0x46, 0x30, 0x46, 0x61, 0x68, 0x00, 0x93, - 0x2b, 0x1d, 0xff, 0xf7, 0x06, 0xfc, 0x01, 0x46, 0x90, 0xb9, 0xe6, 0x68, - 0x28, 0x46, 0x2e, 0x60, 0xfe, 0xf7, 0x0c, 0xf9, 0x30, 0x44, 0xe0, 0x60, - 0x28, 0x46, 0xfe, 0xf7, 0x07, 0xf9, 0xa3, 0x69, 0x18, 0x44, 0xa0, 0x61, - 0x04, 0xe0, 0x00, 0x2a, 0x06, 0xdb, 0x29, 0x60, 0x6f, 0xf0, 0x01, 0x01, - 0x08, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x21, 0x46, 0x42, 0x46, - 0x30, 0x46, 0xff, 0xf7, 0xf5, 0xfb, 0x01, 0x46, 0x00, 0x28, 0xf3, 0xd1, - 0xa3, 0x69, 0xe7, 0x60, 0x14, 0x33, 0xa3, 0x61, 0xc8, 0xe7, 0x2d, 0xe9, - 0xf8, 0x43, 0x14, 0x46, 0x1d, 0x46, 0x00, 0x22, 0x01, 0x23, 0x06, 0x46, - 0x0f, 0x46, 0x04, 0xf1, 0x24, 0x08, 0x05, 0xf1, 0x08, 0x09, 0xc4, 0xe9, - 0x09, 0x23, 0x40, 0x46, 0xfe, 0xf7, 0xf4, 0xf8, 0x08, 0xb1, 0x00, 0x20, - 0x0d, 0xe0, 0x42, 0x46, 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xd4, 0xfb, - 0x38, 0xb9, 0x2a, 0x46, 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xa2, 0xff, - 0x18, 0xb1, 0x83, 0x1c, 0xeb, 0xd0, 0xbd, 0xe8, 0xf8, 0x83, 0x2b, 0x79, - 0x03, 0xf0, 0x70, 0x03, 0x20, 0x2b, 0xf0, 0xd1, 0x39, 0x46, 0x48, 0x46, - 0xfe, 0xf7, 0xc7, 0xf8, 0x00, 0x28, 0xea, 0xd1, 0x01, 0x20, 0xf0, 0xe7, - 0x70, 0xb5, 0x05, 0x46, 0x92, 0xb0, 0x04, 0x30, 0x0e, 0x46, 0xfe, 0xf7, - 0xcd, 0xf8, 0x68, 0xbb, 0x01, 0x23, 0x01, 0x90, 0x01, 0xaa, 0x07, 0xa9, - 0x28, 0x46, 0x02, 0x93, 0xff, 0xf7, 0xac, 0xfb, 0x04, 0x46, 0x18, 0xb9, - 0x10, 0xa8, 0xfe, 0xf7, 0xbf, 0xf8, 0x10, 0xb1, 0x20, 0x46, 0x12, 0xb0, - 0x70, 0xbd, 0x10, 0xaa, 0x07, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x9e, 0xfb, - 0x38, 0xb9, 0x03, 0xaa, 0x07, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x6c, 0xff, - 0x18, 0xb1, 0x83, 0x1c, 0xea, 0xd0, 0x04, 0x46, 0xec, 0xe7, 0x9d, 0xf9, - 0x10, 0x30, 0x00, 0x2b, 0xf1, 0xdb, 0x08, 0x22, 0x31, 0x46, 0x05, 0xa8, - 0x12, 0xf0, 0x3e, 0xfd, 0x00, 0x28, 0xea, 0xd1, 0x01, 0x24, 0xdf, 0xe7, - 0x00, 0x24, 0xdd, 0xe7, 0xf0, 0xb5, 0x01, 0x27, 0x06, 0x1d, 0xa7, 0xb0, - 0x04, 0x46, 0x80, 0xf8, 0x40, 0x70, 0x30, 0x46, 0xfe, 0xf7, 0x92, 0xf8, - 0x05, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x81, 0x80, 0x01, 0x46, 0x2c, 0x22, - 0x05, 0xa8, 0x11, 0xf0, 0xcb, 0xf9, 0x4f, 0xf0, 0x00, 0x43, 0x28, 0x22, - 0x29, 0x46, 0x10, 0xa8, 0x0d, 0x93, 0x11, 0xf0, 0xc3, 0xf9, 0x1a, 0x97, - 0x23, 0x68, 0x1b, 0x6a, 0x9d, 0x42, 0x02, 0xd3, 0x6f, 0xf0, 0x33, 0x00, - 0x1b, 0xe0, 0x19, 0xa8, 0xfe, 0xf7, 0x76, 0xf8, 0x00, 0x28, 0x66, 0xd1, - 0x19, 0xaa, 0x10, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0x57, 0xfb, 0x80, 0xb9, - 0x0d, 0x9b, 0x00, 0x2b, 0x38, 0xdb, 0x30, 0x46, 0xfe, 0xf7, 0x68, 0xf8, - 0x58, 0xb1, 0x19, 0x9b, 0x0e, 0x93, 0x1a, 0x9b, 0x0f, 0x93, 0x00, 0x23, - 0x05, 0xa9, 0x20, 0x46, 0x1a, 0x46, 0x00, 0xf0, 0x52, 0xf8, 0x27, 0xb0, - 0xf0, 0xbd, 0x01, 0xab, 0x1b, 0xaa, 0x0e, 0xa9, 0x20, 0x46, 0xff, 0xf7, - 0x50, 0xff, 0x00, 0x28, 0xf5, 0xdb, 0xea, 0xd0, 0x03, 0x9a, 0x0e, 0x99, - 0x04, 0x9b, 0x8a, 0x42, 0x0f, 0x98, 0x01, 0xd1, 0x98, 0x42, 0x17, 0xd0, - 0x82, 0x42, 0x01, 0xd1, 0x99, 0x42, 0x13, 0xd0, 0x0e, 0x92, 0xdf, 0xe7, - 0x9d, 0xf9, 0x70, 0x30, 0x00, 0x2b, 0x0d, 0xda, 0x1d, 0xa9, 0x20, 0x46, - 0xff, 0xf7, 0x68, 0xff, 0x00, 0x28, 0xdc, 0xdb, 0x1e, 0xd0, 0x1b, 0xaa, - 0x10, 0xa9, 0x20, 0x46, 0x00, 0xf0, 0x75, 0xf9, 0x00, 0x28, 0xd4, 0xd1, - 0x1b, 0xaa, 0x10, 0xa9, 0x20, 0x46, 0xff, 0xf7, 0xe9, 0xfe, 0x00, 0x28, - 0xe6, 0xd0, 0x83, 0x1c, 0xcb, 0xd1, 0x0d, 0xf1, 0x40, 0x0c, 0x05, 0xaf, - 0x01, 0x35, 0xbc, 0xe8, 0x0f, 0x00, 0x0f, 0xc7, 0xbc, 0xe8, 0x0f, 0x00, - 0x0f, 0xc7, 0x9c, 0xe8, 0x07, 0x00, 0x87, 0xe8, 0x07, 0x00, 0x99, 0xe7, - 0x9d, 0xf8, 0x70, 0x30, 0x1b, 0xaa, 0x10, 0xa9, 0x03, 0xf0, 0x7f, 0x03, - 0x8d, 0xf8, 0x70, 0x30, 0x03, 0x46, 0x20, 0x46, 0x00, 0xf0, 0xc3, 0xf9, - 0xd8, 0xe7, 0x00, 0x20, 0xad, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x2d, 0xed, - 0x02, 0x8b, 0x9b, 0xb0, 0x06, 0x46, 0x0d, 0x46, 0x07, 0x93, 0xcb, 0x69, - 0x07, 0x98, 0x01, 0x33, 0x05, 0x92, 0x02, 0xeb, 0x00, 0x17, 0xcb, 0x61, - 0x0b, 0x1d, 0xd1, 0xe9, 0x01, 0x14, 0x08, 0xee, 0x10, 0x3a, 0x13, 0x46, - 0xc5, 0xe9, 0x01, 0x41, 0x9f, 0x42, 0x0f, 0xd1, 0x00, 0x23, 0xcd, 0xe9, - 0x09, 0x41, 0x06, 0x93, 0x30, 0x68, 0x69, 0x68, 0xc3, 0x68, 0x98, 0x47, - 0x04, 0x46, 0x70, 0xb1, 0x14, 0xf1, 0x34, 0x0f, 0x00, 0xf0, 0xf4, 0x80, - 0x20, 0x46, 0xff, 0xe0, 0xd8, 0x68, 0x10, 0x33, 0x2a, 0x6a, 0x02, 0x44, - 0x53, 0xf8, 0x0c, 0x0c, 0x12, 0x1a, 0x2a, 0x62, 0xe4, 0xe7, 0x05, 0xf1, - 0x1c, 0x08, 0x0d, 0xf1, 0x2c, 0x09, 0x4f, 0xf0, 0xff, 0x33, 0x06, 0xf1, - 0x20, 0x0a, 0x10, 0x27, 0x10, 0x22, 0x41, 0x46, 0x48, 0x46, 0x0b, 0x93, - 0xfd, 0xf7, 0x90, 0xff, 0x22, 0x46, 0x00, 0x94, 0x6b, 0x68, 0x51, 0x46, - 0x30, 0x46, 0xcd, 0xe9, 0x01, 0x87, 0xfe, 0xf7, 0x8d, 0xfd, 0x04, 0x46, - 0x00, 0x28, 0xd5, 0xd1, 0x83, 0x46, 0xb8, 0x46, 0x08, 0xee, 0x90, 0x9a, - 0x2a, 0xe0, 0x07, 0x9b, 0x9b, 0x45, 0x80, 0xf2, 0xa0, 0x80, 0x05, 0x9a, - 0x4f, 0xea, 0x0b, 0x13, 0xd3, 0x58, 0x02, 0xeb, 0x0b, 0x19, 0x43, 0x45, - 0x40, 0xf0, 0x97, 0x80, 0x18, 0xee, 0x90, 0x0a, 0xd9, 0xe9, 0x02, 0x12, - 0xfd, 0xf7, 0x6c, 0xff, 0xd9, 0xf8, 0x0c, 0x30, 0x00, 0x22, 0x51, 0x46, - 0x02, 0x93, 0x30, 0x46, 0xd9, 0xf8, 0x08, 0x30, 0xcd, 0xe9, 0x00, 0x73, - 0x6b, 0x68, 0xfe, 0xf7, 0x65, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xad, 0xd1, - 0xd9, 0xf8, 0x04, 0x30, 0x0b, 0xf1, 0x01, 0x0b, 0x98, 0x44, 0xd9, 0xf8, - 0x0c, 0x30, 0x1f, 0x44, 0x2b, 0x6a, 0x23, 0xf0, 0x00, 0x43, 0x04, 0x3b, - 0xbb, 0x42, 0xce, 0xd8, 0x04, 0x23, 0x0d, 0xf1, 0x2c, 0x08, 0x00, 0x22, - 0x51, 0x46, 0x02, 0x93, 0x30, 0x46, 0x6b, 0x68, 0xcd, 0xe9, 0x00, 0x78, - 0xfe, 0xf7, 0x48, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x90, 0xd1, 0x4f, 0xf0, - 0xff, 0x33, 0x02, 0x46, 0x51, 0x46, 0x30, 0x46, 0x73, 0x61, 0xfe, 0xf7, - 0x10, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x85, 0xd1, 0x30, 0x68, 0x03, 0x69, - 0x98, 0x47, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x7f, 0xaf, 0x4f, 0xf0, - 0xff, 0x33, 0x0f, 0xaf, 0x02, 0x46, 0x69, 0x68, 0x0f, 0x93, 0x30, 0x46, - 0x2b, 0x6a, 0x00, 0x97, 0x23, 0xf0, 0x00, 0x43, 0x04, 0x3b, 0xff, 0xf7, - 0x0f, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x71, 0xaf, 0x0f, 0x9a, - 0x0b, 0x9b, 0x9a, 0x42, 0x60, 0xd1, 0x06, 0x9b, 0x4b, 0xb3, 0x06, 0xf1, - 0x04, 0x09, 0x48, 0x46, 0xfd, 0xf7, 0x4a, 0xff, 0x00, 0x28, 0x75, 0xd1, - 0x43, 0x46, 0x3a, 0x46, 0x09, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x3d, 0xfe, - 0x00, 0x28, 0x5d, 0xdb, 0x6c, 0xd0, 0x6b, 0x68, 0x42, 0x46, 0x39, 0x46, - 0x30, 0x46, 0x0d, 0x93, 0xab, 0x68, 0x0e, 0x93, 0x00, 0x23, 0x00, 0xf0, - 0xea, 0xf8, 0x00, 0x28, 0x50, 0xd1, 0x49, 0x46, 0x09, 0xa8, 0xfd, 0xf7, - 0x1e, 0xff, 0x18, 0xb9, 0x6b, 0x68, 0x73, 0x60, 0xab, 0x68, 0xb3, 0x60, - 0x30, 0x46, 0xff, 0xf7, 0x8b, 0xfe, 0x00, 0x28, 0x42, 0xd1, 0x34, 0x69, - 0x00, 0x2c, 0x3f, 0xf4, 0x3d, 0xaf, 0x18, 0xee, 0x10, 0x1a, 0x20, 0x1d, - 0xfd, 0xf7, 0x0b, 0xff, 0x18, 0xb9, 0x6b, 0x68, 0x63, 0x60, 0xab, 0x68, - 0xa3, 0x60, 0x24, 0x68, 0xf0, 0xe7, 0x01, 0x23, 0x42, 0x46, 0x0a, 0x99, - 0x30, 0x46, 0x00, 0x93, 0x0f, 0xab, 0xff, 0xf7, 0xe8, 0xf9, 0x04, 0x46, - 0x00, 0x28, 0x7f, 0xf4, 0x25, 0xaf, 0x01, 0x22, 0x0f, 0xa9, 0x18, 0xee, - 0x90, 0x0a, 0xfd, 0xf7, 0xc9, 0xfe, 0x01, 0x23, 0x22, 0x46, 0x51, 0x46, - 0x02, 0x93, 0x0f, 0xab, 0x30, 0x46, 0xcd, 0xe9, 0x00, 0x73, 0x6b, 0x68, - 0xfe, 0xf7, 0xc4, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x0c, 0xaf, - 0x08, 0xf1, 0x01, 0x08, 0x01, 0x37, 0x61, 0xe7, 0x4f, 0xf0, 0xff, 0x33, - 0x00, 0x22, 0x0f, 0xa9, 0x09, 0xa8, 0x33, 0x62, 0x01, 0x23, 0xcd, 0xe9, - 0x0f, 0x23, 0xfd, 0xf7, 0xd4, 0xfe, 0x30, 0xb9, 0x6f, 0xf0, 0x33, 0x00, - 0x1b, 0xb0, 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x18, 0xee, - 0x10, 0x1a, 0x30, 0x46, 0xff, 0xf7, 0xaa, 0xfa, 0x01, 0x23, 0x06, 0x93, - 0x00, 0x28, 0x3f, 0xf4, 0xe5, 0xae, 0xef, 0xe7, 0x3a, 0x46, 0x09, 0xa9, - 0x30, 0x46, 0xff, 0xf7, 0x5e, 0xfd, 0x00, 0x28, 0xe8, 0xdb, 0xa4, 0xd0, - 0x6b, 0x68, 0x39, 0x46, 0x30, 0x46, 0x18, 0x93, 0xab, 0x68, 0x19, 0x93, - 0x00, 0x23, 0x1a, 0x46, 0xff, 0xf7, 0xb5, 0xfe, 0x97, 0xe7, 0x2d, 0xe9, - 0xf0, 0x47, 0x80, 0x46, 0x8c, 0xb0, 0x10, 0x46, 0x0c, 0x46, 0x16, 0x46, - 0xfd, 0xf7, 0x9e, 0xfe, 0x0b, 0x6a, 0x14, 0x30, 0x23, 0xf0, 0x00, 0x43, - 0x83, 0x42, 0x1d, 0xd1, 0x01, 0xaa, 0x04, 0x31, 0x40, 0x46, 0xff, 0xf7, - 0x3c, 0xfd, 0x05, 0x1e, 0x12, 0xdb, 0x09, 0x9a, 0x00, 0x2a, 0x13, 0xda, - 0x23, 0x6a, 0x01, 0xa9, 0x40, 0x46, 0x63, 0xf0, 0x00, 0x43, 0x13, 0x40, - 0x09, 0x93, 0x63, 0x6a, 0x0a, 0x93, 0xa3, 0x6a, 0x0b, 0x93, 0x00, 0x23, - 0x1a, 0x46, 0xff, 0xf7, 0x8c, 0xfe, 0x05, 0x46, 0x28, 0x46, 0x0c, 0xb0, - 0xbd, 0xe8, 0xf0, 0x87, 0x33, 0x68, 0x30, 0x46, 0x01, 0x93, 0xfd, 0xf7, - 0x75, 0xfe, 0x00, 0x23, 0x02, 0x90, 0x01, 0xaa, 0x21, 0x46, 0x40, 0x46, - 0xcd, 0xe9, 0x03, 0x33, 0x01, 0x23, 0xff, 0xf7, 0x78, 0xfe, 0x05, 0x46, - 0x00, 0x28, 0xe9, 0xd1, 0xd8, 0xf8, 0x0c, 0x70, 0x21, 0x1d, 0x4f, 0xf0, - 0xff, 0x3a, 0xcf, 0xb9, 0xd8, 0xf8, 0x10, 0x70, 0x21, 0x1d, 0x00, 0x2f, - 0xde, 0xd0, 0x38, 0x1d, 0xfd, 0xf7, 0x61, 0xfe, 0x70, 0xb9, 0xfc, 0x68, - 0x33, 0x68, 0x9c, 0x42, 0x0a, 0xd9, 0x30, 0x46, 0xfd, 0xf7, 0x52, 0xfe, - 0x20, 0x1a, 0xf8, 0x60, 0x30, 0x46, 0xfd, 0xf7, 0x4d, 0xfe, 0xbb, 0x69, - 0x18, 0x1a, 0xb8, 0x61, 0x3f, 0x68, 0xe8, 0xe7, 0x38, 0x1d, 0xfd, 0xf7, - 0x4c, 0xfe, 0x30, 0xb9, 0xd7, 0xf8, 0x0c, 0x90, 0x33, 0x68, 0x99, 0x45, - 0x03, 0xd1, 0xc7, 0xe9, 0x01, 0xaa, 0x3f, 0x68, 0xd7, 0xe7, 0xfc, 0xd9, - 0x30, 0x46, 0xfd, 0xf7, 0x37, 0xfe, 0xa9, 0xeb, 0x00, 0x00, 0xf8, 0x60, - 0xf5, 0xe7, 0x70, 0xb5, 0x15, 0x46, 0x88, 0xb0, 0x0c, 0x26, 0xd2, 0x79, - 0x55, 0xf8, 0x04, 0x4b, 0x00, 0x2b, 0x07, 0x92, 0x00, 0x94, 0x34, 0x44, - 0x03, 0x96, 0x04, 0x94, 0xcd, 0xe9, 0x05, 0x23, 0x14, 0xbf, 0x02, 0x23, - 0x01, 0x23, 0x6a, 0x46, 0xcd, 0xe9, 0x01, 0x65, 0xff, 0xf7, 0x29, 0xfe, - 0x08, 0xb0, 0x70, 0xbd, 0x70, 0xb5, 0x92, 0xb0, 0x06, 0x46, 0x0d, 0x46, - 0xff, 0xf7, 0xbc, 0xfa, 0x04, 0x46, 0x70, 0xbb, 0xeb, 0x69, 0x03, 0xf4, - 0x10, 0x23, 0xb3, 0xf5, 0x80, 0x3f, 0x28, 0xd1, 0x2a, 0x1d, 0x10, 0x46, - 0xfd, 0xf7, 0x20, 0xfe, 0x18, 0xbb, 0x07, 0xa9, 0x30, 0x46, 0xff, 0xf7, - 0x03, 0xf9, 0x04, 0x46, 0xe8, 0xb9, 0x0c, 0x23, 0xea, 0x68, 0x06, 0x90, - 0x00, 0x93, 0x04, 0xab, 0x08, 0x99, 0x03, 0x92, 0xcd, 0xe9, 0x04, 0x00, - 0x30, 0x46, 0xff, 0xf7, 0xe8, 0xf8, 0x04, 0x46, 0x78, 0xb9, 0x2b, 0x69, - 0x03, 0xaa, 0x07, 0xa9, 0x05, 0x93, 0x6b, 0x69, 0x06, 0x93, 0x03, 0x46, - 0x30, 0x46, 0xff, 0xf7, 0xb6, 0xff, 0x04, 0x46, 0x18, 0xb9, 0xeb, 0x69, - 0x23, 0xf4, 0x80, 0x33, 0xeb, 0x61, 0x20, 0x46, 0x12, 0xb0, 0x70, 0xbd, - 0x2d, 0xe9, 0xf0, 0x4f, 0x2d, 0xed, 0x02, 0x8b, 0x85, 0xb0, 0x1f, 0x68, - 0x05, 0x46, 0x08, 0xee, 0x10, 0x1a, 0x02, 0x93, 0x40, 0xf6, 0x22, 0x03, - 0x14, 0x46, 0xdf, 0xf8, 0x40, 0x91, 0x53, 0x60, 0x43, 0x68, 0x93, 0x60, - 0x83, 0x68, 0xd3, 0x60, 0x49, 0x46, 0x38, 0x46, 0x12, 0xf0, 0x79, 0xfb, - 0x07, 0xeb, 0x00, 0x08, 0x83, 0x46, 0x49, 0x46, 0x40, 0x46, 0x12, 0xf0, - 0x4e, 0xfb, 0x01, 0x28, 0x06, 0x46, 0x08, 0xeb, 0x00, 0x0a, 0x05, 0xd1, - 0x17, 0xf8, 0x0b, 0x30, 0x2e, 0x2b, 0x0a, 0xd1, 0x57, 0x46, 0xe9, 0xe7, - 0x02, 0x28, 0x06, 0xd1, 0x02, 0x46, 0x3f, 0x49, 0x40, 0x46, 0x12, 0xf0, - 0x63, 0xfa, 0x00, 0x28, 0xf4, 0xd0, 0x57, 0x46, 0x4f, 0xf0, 0x01, 0x0b, - 0x49, 0x46, 0x50, 0x46, 0x12, 0xf0, 0x57, 0xfb, 0x82, 0x44, 0x49, 0x46, - 0x50, 0x46, 0x12, 0xf0, 0x2e, 0xfb, 0x02, 0x46, 0x90, 0xb1, 0x02, 0x28, - 0x0c, 0xd1, 0x03, 0x90, 0x50, 0x46, 0x33, 0x49, 0x12, 0xf0, 0x4c, 0xfa, - 0x03, 0x9a, 0x28, 0xb9, 0xbb, 0xf1, 0x01, 0x0b, 0x04, 0xd1, 0x0a, 0xf1, - 0x02, 0x07, 0xc3, 0xe7, 0x0b, 0xf1, 0x01, 0x0b, 0x92, 0x44, 0xe1, 0xe7, - 0x98, 0xf8, 0x00, 0x00, 0x00, 0x28, 0x46, 0xd0, 0x02, 0x9b, 0xc3, 0xf8, - 0x00, 0x80, 0x23, 0x79, 0x22, 0x2b, 0x4a, 0xd1, 0x04, 0xf1, 0x08, 0x0a, - 0x18, 0xee, 0x10, 0x1a, 0x28, 0x46, 0x52, 0x46, 0xff, 0xf7, 0x7a, 0xf8, - 0x00, 0x28, 0x36, 0xd1, 0x05, 0xf1, 0x14, 0x0b, 0x22, 0x46, 0x18, 0xee, - 0x10, 0x1a, 0x28, 0x46, 0xff, 0xf7, 0x44, 0xfc, 0x68, 0xbb, 0x23, 0x79, - 0x03, 0xf0, 0x7f, 0x03, 0x11, 0x2b, 0x01, 0xd0, 0x22, 0x2b, 0xf1, 0xd1, - 0xe3, 0x79, 0xb3, 0x42, 0xee, 0xd1, 0x23, 0x68, 0x59, 0x46, 0x62, 0x79, - 0x28, 0x46, 0x04, 0x33, 0x13, 0x44, 0xa2, 0x79, 0x13, 0x44, 0x18, 0xee, - 0x10, 0x2a, 0xcd, 0xe9, 0x00, 0x86, 0x52, 0x68, 0xf8, 0xf7, 0xd3, 0xfe, - 0x00, 0x28, 0x12, 0xdb, 0xdc, 0xd0, 0x95, 0xf8, 0x41, 0x30, 0x00, 0x2b, - 0x82, 0xd1, 0x94, 0xf9, 0x04, 0x30, 0x00, 0x2b, 0xbf, 0xf6, 0x7e, 0xaf, - 0x51, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x8a, 0xfc, 0x00, 0x28, 0x07, 0xd0, - 0x01, 0xdb, 0x6f, 0xf0, 0x01, 0x00, 0x05, 0xb0, 0xbd, 0xec, 0x02, 0x8b, - 0xbd, 0xe8, 0xf0, 0x8f, 0x23, 0x79, 0x03, 0xf0, 0x7f, 0x03, 0x23, 0x71, - 0x6a, 0xe7, 0x6f, 0xf0, 0x13, 0x00, 0xf2, 0xe7, 0x55, 0xdf, 0x01, 0x08, - 0x53, 0xdf, 0x01, 0x08, 0x73, 0xb5, 0x0c, 0x46, 0x04, 0x31, 0x06, 0x46, - 0xff, 0xf7, 0x14, 0xf9, 0x05, 0x46, 0xf0, 0xb9, 0x04, 0xf1, 0x08, 0x01, - 0x30, 0x46, 0xff, 0xf7, 0x0d, 0xf9, 0x05, 0x46, 0xb8, 0xb9, 0x04, 0x23, - 0x02, 0x46, 0x61, 0x68, 0x30, 0x46, 0x00, 0x93, 0x04, 0xf1, 0x1c, 0x03, - 0xff, 0xf7, 0x0b, 0xf8, 0x10, 0xb1, 0x10, 0xf1, 0x34, 0x0f, 0x0d, 0xd1, - 0xe3, 0x69, 0x14, 0x22, 0x01, 0x33, 0xe3, 0x61, 0x4f, 0xf0, 0xff, 0x33, - 0xc4, 0xe9, 0x08, 0x23, 0xa3, 0x62, 0x10, 0x23, 0xe3, 0x60, 0x28, 0x46, - 0x02, 0xb0, 0x70, 0xbd, 0x05, 0x46, 0xfa, 0xe7, 0x2d, 0xe9, 0xf0, 0x43, - 0x07, 0x46, 0x95, 0xb0, 0x0e, 0x46, 0x90, 0x46, 0x99, 0x46, 0x01, 0xf1, - 0x24, 0x04, 0x40, 0x46, 0x31, 0x6a, 0xfd, 0xf7, 0xf7, 0xfc, 0x3b, 0x68, - 0x08, 0x44, 0xdb, 0x69, 0x98, 0x42, 0x18, 0xd8, 0x04, 0x39, 0x43, 0x46, - 0x00, 0x22, 0x43, 0xf8, 0x04, 0x1b, 0x09, 0x91, 0xcd, 0xe9, 0x0a, 0x23, - 0x0c, 0x23, 0xcd, 0xe9, 0x0c, 0x31, 0x98, 0xf8, 0x07, 0x30, 0x31, 0x46, - 0xcd, 0xe9, 0x0e, 0x29, 0x10, 0x93, 0x09, 0xaa, 0x02, 0x23, 0x38, 0x46, - 0xff, 0xf7, 0xe9, 0xfc, 0x15, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x00, 0x29, - 0x37, 0xdb, 0x35, 0x46, 0x09, 0xac, 0x0f, 0xcd, 0x0f, 0xc4, 0x0f, 0xcd, - 0x0f, 0xc4, 0x95, 0xe8, 0x07, 0x00, 0x84, 0xe8, 0x07, 0x00, 0x31, 0x46, - 0x38, 0x46, 0xff, 0xf7, 0x99, 0xff, 0x00, 0x28, 0xea, 0xd1, 0x12, 0x9b, - 0x42, 0x46, 0x31, 0x46, 0x73, 0x62, 0x13, 0x9b, 0xb3, 0x62, 0x33, 0x6a, - 0x04, 0x3b, 0x42, 0xf8, 0x04, 0x3b, 0x03, 0x92, 0x0c, 0x22, 0xcd, 0xe9, - 0x01, 0x30, 0xcd, 0xe9, 0x04, 0x23, 0x98, 0xf8, 0x07, 0x30, 0x01, 0xaa, - 0xcd, 0xe9, 0x06, 0x09, 0x08, 0x93, 0x38, 0x46, 0x02, 0x23, 0xff, 0xf7, - 0xba, 0xfc, 0x00, 0x28, 0xce, 0xd1, 0x11, 0x9b, 0x02, 0x46, 0x09, 0xa9, - 0x43, 0xf0, 0x00, 0x43, 0x11, 0x93, 0x73, 0x68, 0x12, 0x93, 0xb3, 0x68, - 0x13, 0x93, 0x03, 0x46, 0xbf, 0xe7, 0x22, 0x46, 0x31, 0x46, 0x38, 0x46, - 0xfe, 0xf7, 0x9a, 0xff, 0x00, 0x28, 0x9c, 0xd0, 0xba, 0xe7, 0x83, 0x69, - 0x02, 0x39, 0x02, 0x3b, 0x8b, 0x42, 0x83, 0xbf, 0x43, 0x89, 0xc0, 0x6a, - 0x01, 0xfb, 0x03, 0x00, 0x00, 0x20, 0x70, 0x47, 0x38, 0xb5, 0x03, 0x6b, - 0x05, 0x46, 0x0c, 0x46, 0x8b, 0x42, 0x0f, 0xd0, 0xfd, 0xf7, 0x9a, 0xfd, - 0x58, 0xb9, 0x22, 0x46, 0x01, 0x23, 0x69, 0x6b, 0x68, 0x78, 0xfd, 0xf7, - 0x2d, 0xfd, 0x00, 0x28, 0x1c, 0xbf, 0x4f, 0xf0, 0xff, 0x34, 0x01, 0x20, - 0x2c, 0x63, 0x38, 0xbd, 0x00, 0x20, 0xfc, 0xe7, 0x01, 0x29, 0xf8, 0xb5, - 0x04, 0x46, 0x0e, 0x46, 0x64, 0xd9, 0x83, 0x69, 0x99, 0x42, 0x61, 0xd2, - 0x03, 0x78, 0x02, 0x2b, 0x30, 0xd0, 0x03, 0x2b, 0x45, 0xd0, 0x01, 0x2b, - 0x5a, 0xd1, 0x01, 0xeb, 0x51, 0x05, 0x83, 0x89, 0x41, 0x6a, 0xb5, 0xfb, - 0xf3, 0xf3, 0x19, 0x44, 0xff, 0xf7, 0xd0, 0xff, 0x10, 0xb1, 0x4f, 0xf0, - 0xff, 0x30, 0xf8, 0xbd, 0xa1, 0x89, 0x6f, 0x1c, 0x20, 0x46, 0xb5, 0xfb, - 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x55, 0x63, 0x6b, 0xb7, 0xfb, 0xf1, 0xf1, - 0x5d, 0x5d, 0x63, 0x6a, 0x19, 0x44, 0xff, 0xf7, 0xbd, 0xff, 0x00, 0x28, - 0xeb, 0xd1, 0xa2, 0x89, 0xb7, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x73, - 0x62, 0x6b, 0xd0, 0x5c, 0xf3, 0x07, 0x45, 0xea, 0x00, 0x20, 0x4c, 0xbf, - 0x00, 0x09, 0xc0, 0xf3, 0x0b, 0x00, 0xde, 0xe7, 0x83, 0x89, 0x5b, 0x08, - 0xb1, 0xfb, 0xf3, 0xf3, 0x41, 0x6a, 0x19, 0x44, 0xff, 0xf7, 0xa4, 0xff, - 0x00, 0x28, 0xd2, 0xd1, 0xa2, 0x89, 0x76, 0x00, 0xb6, 0xfb, 0xf2, 0xf3, - 0x02, 0xfb, 0x13, 0x66, 0x63, 0x6b, 0x9a, 0x19, 0x98, 0x5d, 0x52, 0x78, - 0x40, 0xea, 0x02, 0x20, 0xc7, 0xe7, 0x83, 0x89, 0x9b, 0x08, 0xb1, 0xfb, - 0xf3, 0xf3, 0x41, 0x6a, 0x19, 0x44, 0xff, 0xf7, 0x8d, 0xff, 0x00, 0x28, - 0xbb, 0xd1, 0xa1, 0x89, 0xb6, 0x00, 0xb6, 0xfb, 0xf1, 0xf0, 0x01, 0xfb, - 0x10, 0x66, 0x60, 0x6b, 0x30, 0x44, 0xfd, 0xf7, 0x4d, 0xfd, 0x20, 0xf0, - 0x70, 0x40, 0xb0, 0xe7, 0x01, 0x20, 0xae, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, - 0x1e, 0x46, 0x03, 0x68, 0x85, 0xb0, 0x0c, 0x46, 0x9b, 0x6f, 0x82, 0x46, - 0x91, 0x46, 0x98, 0x47, 0x03, 0xa9, 0x20, 0x46, 0xfd, 0xf7, 0xdf, 0xfc, - 0x05, 0x46, 0x07, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xa3, 0x80, 0x65, 0x7c, - 0x0d, 0xbb, 0x23, 0x7c, 0x13, 0xf0, 0x01, 0x03, 0x00, 0x93, 0x00, 0xf0, - 0x9d, 0x80, 0xe3, 0x68, 0x2f, 0x46, 0x62, 0x69, 0x9b, 0x1a, 0x9e, 0x42, - 0x28, 0xbf, 0x1e, 0x46, 0x9e, 0xb1, 0x03, 0x98, 0x62, 0x69, 0x83, 0x89, - 0xb2, 0xfb, 0xf3, 0xf1, 0x03, 0xfb, 0x11, 0x23, 0x00, 0x2b, 0x69, 0xd1, - 0x43, 0x89, 0x01, 0x3b, 0x0b, 0x40, 0x01, 0x93, 0x1e, 0xd1, 0x8a, 0xb9, - 0xa0, 0x68, 0x01, 0x28, 0x13, 0xd8, 0x02, 0x25, 0x65, 0x74, 0xda, 0xf8, - 0x00, 0x30, 0x50, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x00, 0x2d, 0x7c, 0xd0, - 0x28, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, 0xfd, 0xf7, 0x92, 0xbc, - 0xa1, 0x69, 0x20, 0x68, 0xff, 0xf7, 0x4c, 0xff, 0xe9, 0xe7, 0x43, 0x1c, - 0x03, 0xd1, 0x01, 0x23, 0x00, 0x9d, 0x63, 0x74, 0xe7, 0xe7, 0xa0, 0x61, - 0xdd, 0xf8, 0x0c, 0xb0, 0xa1, 0x69, 0x58, 0x46, 0xff, 0xf7, 0x1b, 0xff, - 0x00, 0x28, 0xdc, 0xd0, 0x01, 0x9b, 0x03, 0xeb, 0x00, 0x08, 0xbb, 0xf8, - 0x0c, 0x30, 0x9e, 0x42, 0x34, 0xd3, 0x01, 0x99, 0xbb, 0xf8, 0x0a, 0x20, - 0x9b, 0xf8, 0x01, 0x00, 0xb6, 0xfb, 0xf3, 0xf3, 0x19, 0x44, 0x91, 0x42, - 0x49, 0x46, 0x84, 0xbf, 0x01, 0x9b, 0xd3, 0x1a, 0x42, 0x46, 0x01, 0x93, - 0xfd, 0xf7, 0x48, 0xfc, 0x01, 0x9b, 0x00, 0x28, 0xd7, 0xd1, 0xdd, 0xf8, - 0x0c, 0xb0, 0x9b, 0xf8, 0x03, 0x20, 0x7a, 0xb1, 0xdb, 0xf8, 0x30, 0x00, - 0xa0, 0xeb, 0x08, 0x00, 0x83, 0x42, 0x09, 0xd9, 0xbb, 0xf8, 0x0c, 0x20, - 0xdb, 0xf8, 0x34, 0x10, 0x00, 0xfb, 0x02, 0x90, 0x01, 0x93, 0x10, 0xf0, - 0xcd, 0xfc, 0x01, 0x9b, 0xbb, 0xf8, 0x0c, 0x80, 0x03, 0xfb, 0x08, 0xf8, - 0x63, 0x69, 0xa6, 0xeb, 0x08, 0x06, 0x47, 0x44, 0xc1, 0x44, 0x43, 0x44, - 0x63, 0x61, 0x8d, 0xe7, 0xc4, 0xf8, 0x1c, 0x80, 0x03, 0x98, 0x62, 0x69, - 0x83, 0x89, 0xe1, 0x69, 0xb2, 0xfb, 0xf3, 0xf8, 0x03, 0xfb, 0x18, 0x28, - 0xa3, 0xeb, 0x08, 0x03, 0xb3, 0x42, 0x28, 0xbf, 0x33, 0x46, 0x98, 0x46, - 0xff, 0xf7, 0xd6, 0xfe, 0x00, 0x28, 0xa2, 0xd1, 0x03, 0x9a, 0x60, 0x69, - 0x91, 0x89, 0xb0, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x03, 0x51, 0x6b, - 0x48, 0x46, 0x42, 0x46, 0x19, 0x44, 0x10, 0xf0, 0x9f, 0xfc, 0xd5, 0xe7, - 0x00, 0x27, 0x7e, 0xe7, 0x2f, 0x46, 0x07, 0x25, 0x7b, 0xe7, 0x38, 0x46, - 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0x00, 0x38, 0xb5, 0x00, 0x23, - 0x04, 0x46, 0xc3, 0x70, 0x4f, 0xf0, 0xff, 0x33, 0x03, 0x63, 0xff, 0xf7, - 0xb3, 0xfe, 0x00, 0x28, 0x51, 0xd1, 0x64, 0x6b, 0x23, 0x78, 0x94, 0xf8, - 0xff, 0x51, 0x94, 0xf8, 0xfe, 0x01, 0xeb, 0x2b, 0x40, 0xea, 0x05, 0x25, - 0x03, 0xd0, 0x18, 0x33, 0xdb, 0xb2, 0x01, 0x2b, 0x3c, 0xd8, 0x4a, 0xf6, - 0x55, 0x23, 0x9d, 0x42, 0x07, 0xd1, 0x08, 0x22, 0x21, 0x49, 0x04, 0xf1, - 0x52, 0x00, 0x11, 0xf0, 0xd9, 0xff, 0x00, 0x28, 0x36, 0xd0, 0x22, 0x7b, - 0xe3, 0x7a, 0x43, 0xea, 0x02, 0x23, 0xa3, 0xf5, 0x00, 0x72, 0xb2, 0xf5, - 0x60, 0x6f, 0x27, 0xd8, 0x60, 0x7b, 0x28, 0xb3, 0x59, 0x1e, 0x42, 0x1e, - 0x0b, 0x40, 0x02, 0x40, 0x13, 0x43, 0x1f, 0xd1, 0xe2, 0x7b, 0xa3, 0x7b, - 0x53, 0xea, 0x02, 0x23, 0x1a, 0xd0, 0x23, 0x7c, 0x01, 0x3b, 0x01, 0x2b, - 0x16, 0xd8, 0xa2, 0x7c, 0x63, 0x7c, 0x53, 0xea, 0x02, 0x23, 0x11, 0xd0, - 0x22, 0x7d, 0xe3, 0x7c, 0x43, 0xea, 0x02, 0x23, 0x7f, 0x2b, 0x06, 0xd8, - 0x04, 0xf1, 0x20, 0x00, 0xfd, 0xf7, 0x3a, 0xfc, 0xb0, 0xf5, 0x80, 0x3f, - 0x04, 0xd3, 0xe2, 0x7d, 0xa3, 0x7d, 0x53, 0xea, 0x02, 0x23, 0x08, 0xd1, - 0x4a, 0xf6, 0x55, 0x20, 0x85, 0x42, 0x0c, 0xbf, 0x02, 0x20, 0x03, 0x20, - 0x38, 0xbd, 0x04, 0x20, 0xfc, 0xe7, 0x00, 0x20, 0xfa, 0xe7, 0x00, 0xbf, - 0x58, 0xdf, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, 0x00, 0x26, 0x87, 0xb0, - 0x0d, 0x46, 0x17, 0x46, 0x0e, 0x60, 0xfd, 0xf7, 0xd4, 0xfb, 0x00, 0x28, - 0xc0, 0xf2, 0x51, 0x81, 0xb0, 0x4b, 0x53, 0xf8, 0x20, 0x40, 0x00, 0x2c, - 0x00, 0xf0, 0x4d, 0x81, 0x2c, 0x60, 0x23, 0x78, 0xbb, 0xb9, 0x60, 0x70, - 0xc0, 0xb2, 0xac, 0x4d, 0x55, 0xf8, 0x20, 0x00, 0x03, 0x68, 0x9b, 0x68, - 0x98, 0x47, 0x10, 0xf0, 0x01, 0x06, 0xc3, 0xb2, 0x40, 0xf0, 0x3f, 0x81, - 0x17, 0xf0, 0xfe, 0x0f, 0x02, 0xd0, 0x5b, 0x07, 0x00, 0xf1, 0x3b, 0x81, - 0x60, 0x78, 0x55, 0xf8, 0x20, 0x30, 0x23, 0xb9, 0x01, 0x26, 0x30, 0x46, - 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xfd, 0xf7, 0x27, 0xfb, 0xa0, 0xf5, - 0x00, 0x72, 0xa0, 0x81, 0xb2, 0xf5, 0x60, 0x6f, 0xf2, 0xd8, 0x42, 0x1e, - 0x02, 0x42, 0xef, 0xd1, 0x63, 0x6b, 0x00, 0x2b, 0x00, 0xf0, 0xf2, 0x80, - 0x00, 0x21, 0x20, 0x46, 0xff, 0xf7, 0x58, 0xff, 0x02, 0x28, 0x40, 0xf0, - 0xfd, 0x80, 0x65, 0x6b, 0x02, 0xaf, 0x05, 0xf5, 0xe3, 0x71, 0xb8, 0x46, - 0x05, 0xf2, 0x06, 0x25, 0x08, 0x46, 0xfd, 0xf7, 0xd3, 0xfb, 0x10, 0x31, - 0x48, 0xf8, 0x04, 0x0b, 0x8d, 0x42, 0xf7, 0xd1, 0x00, 0x25, 0x57, 0xf8, - 0x04, 0x1b, 0x00, 0x29, 0x00, 0xf0, 0xde, 0x80, 0x20, 0x46, 0xff, 0xf7, - 0x3d, 0xff, 0x01, 0x28, 0x00, 0xf2, 0xd9, 0x80, 0x65, 0x6b, 0xb4, 0xf8, - 0x0c, 0x90, 0x2a, 0x7b, 0xeb, 0x7a, 0x43, 0xea, 0x02, 0x23, 0x99, 0x45, - 0x40, 0xf0, 0xd6, 0x80, 0xe8, 0x7d, 0xa9, 0x7d, 0x51, 0xea, 0x00, 0x21, - 0x04, 0xd1, 0x05, 0xf1, 0x24, 0x00, 0xfd, 0xf7, 0xaf, 0xfb, 0x01, 0x46, - 0xe1, 0x61, 0x95, 0xf8, 0x10, 0xa0, 0xd4, 0xf8, 0x30, 0xb0, 0x0a, 0xf1, - 0xff, 0x33, 0x84, 0xf8, 0x02, 0xa0, 0x01, 0x2b, 0x00, 0xf2, 0xc0, 0x80, - 0x6b, 0x7b, 0x63, 0x81, 0x00, 0x2b, 0x00, 0xf0, 0xbb, 0x80, 0x5a, 0x1e, - 0x1a, 0x42, 0x40, 0xf0, 0xb7, 0x80, 0xaa, 0x7c, 0x95, 0xf8, 0x11, 0x80, - 0x48, 0xea, 0x02, 0x28, 0x0f, 0xfa, 0x88, 0xf2, 0xa4, 0xf8, 0x08, 0x80, - 0x00, 0x92, 0x4f, 0xea, 0x59, 0x12, 0xb8, 0xfb, 0xf2, 0xf7, 0x02, 0xfb, - 0x17, 0x82, 0x92, 0xb2, 0x00, 0x2a, 0x40, 0xf0, 0xa3, 0x80, 0x2a, 0x7d, - 0xe8, 0x7c, 0x50, 0xea, 0x02, 0x20, 0x05, 0xd1, 0x05, 0xf1, 0x20, 0x00, - 0x01, 0x93, 0xfd, 0xf7, 0x7b, 0xfb, 0x01, 0x9b, 0x95, 0xf8, 0x0f, 0xc0, - 0xaa, 0x7b, 0x52, 0xea, 0x0c, 0x22, 0x00, 0xf0, 0x91, 0x80, 0x01, 0xfb, - 0x0a, 0xfc, 0x17, 0x44, 0x07, 0xeb, 0x0c, 0x0e, 0x70, 0x45, 0xc0, 0xf0, - 0x89, 0x80, 0xa0, 0xeb, 0x0e, 0x00, 0x98, 0x42, 0xb0, 0xfb, 0xf3, 0xf7, - 0xc0, 0xf0, 0x82, 0x80, 0x58, 0x4b, 0x9f, 0x42, 0x7e, 0xd8, 0x4f, 0xf6, - 0xf5, 0x73, 0x9f, 0x42, 0x40, 0xf2, 0x9d, 0x80, 0x4f, 0xf0, 0x03, 0x0a, - 0x02, 0x37, 0x5a, 0x44, 0x0b, 0xeb, 0x0e, 0x03, 0xba, 0xf1, 0x03, 0x0f, - 0xa7, 0x61, 0xc4, 0xf8, 0x20, 0xb0, 0x62, 0x62, 0xe3, 0x62, 0x74, 0xd1, - 0x95, 0xf8, 0x2b, 0x20, 0x95, 0xf8, 0x2a, 0x30, 0x43, 0xea, 0x02, 0x23, - 0x00, 0x9a, 0x1a, 0x43, 0x13, 0xb2, 0x00, 0x2b, 0x60, 0xd1, 0xbf, 0x00, - 0x05, 0xf1, 0x2c, 0x00, 0xfd, 0xf7, 0x3e, 0xfb, 0xa0, 0x62, 0x09, 0xf1, - 0xff, 0x33, 0x1f, 0x44, 0xb7, 0xfb, 0xf9, 0xf9, 0x89, 0x45, 0x53, 0xd8, - 0x4f, 0xf0, 0xff, 0x33, 0xba, 0xf1, 0x03, 0x0f, 0xc4, 0xe9, 0x04, 0x33, - 0x4f, 0xf0, 0x80, 0x03, 0x23, 0x71, 0x30, 0xd1, 0x95, 0xf8, 0x31, 0x20, - 0x95, 0xf8, 0x30, 0x30, 0x43, 0xea, 0x02, 0x23, 0x01, 0x2b, 0x28, 0xd1, - 0x0b, 0xf1, 0x01, 0x01, 0x20, 0x46, 0xff, 0xf7, 0x53, 0xfd, 0x10, 0xbb, - 0x61, 0x6b, 0x20, 0x71, 0x91, 0xf8, 0xff, 0x21, 0x91, 0xf8, 0xfe, 0x31, - 0x43, 0xea, 0x02, 0x23, 0x4a, 0xf6, 0x55, 0x22, 0x93, 0x42, 0x16, 0xd1, - 0x08, 0x46, 0xfd, 0xf7, 0x0f, 0xfb, 0x2f, 0x4b, 0x98, 0x42, 0x10, 0xd1, - 0x01, 0xf5, 0xf2, 0x70, 0xfd, 0xf7, 0x08, 0xfb, 0x2c, 0x4b, 0x98, 0x42, - 0x09, 0xd1, 0x01, 0xf5, 0xf4, 0x70, 0xfd, 0xf7, 0x01, 0xfb, 0x60, 0x61, - 0x01, 0xf5, 0xf6, 0x70, 0xfd, 0xf7, 0xfc, 0xfa, 0x20, 0x61, 0x27, 0x4a, - 0x84, 0xf8, 0x00, 0xa0, 0x13, 0x88, 0x01, 0x33, 0x9b, 0xb2, 0x13, 0x80, - 0xe3, 0x80, 0xfa, 0xe6, 0x10, 0xf0, 0x9a, 0xfa, 0x60, 0x63, 0x00, 0x28, - 0x7f, 0xf4, 0x08, 0xaf, 0x11, 0x26, 0xf2, 0xe6, 0x03, 0x20, 0x01, 0x35, - 0x04, 0x2d, 0x7f, 0xf4, 0x18, 0xaf, 0x04, 0x28, 0x3f, 0xf4, 0xea, 0xae, - 0x0d, 0x26, 0xe8, 0xe6, 0x04, 0x28, 0x3f, 0xf4, 0xe5, 0xae, 0x01, 0x28, - 0x7f, 0xf6, 0x18, 0xaf, 0xf6, 0xe7, 0xb8, 0xf1, 0x00, 0x0f, 0xf3, 0xd0, - 0xba, 0xf1, 0x02, 0x0f, 0x4f, 0xea, 0x47, 0x03, 0x62, 0x44, 0x1a, 0xbf, - 0xdb, 0x19, 0x07, 0xf0, 0x01, 0x07, 0x1f, 0x46, 0xa2, 0x62, 0x18, 0xbf, - 0x07, 0xeb, 0x53, 0x07, 0x89, 0xe7, 0x0b, 0x26, 0xcd, 0xe6, 0x0c, 0x26, - 0xcb, 0xe6, 0x03, 0x26, 0xc9, 0xe6, 0x0a, 0x26, 0xc7, 0xe6, 0x40, 0xf6, - 0xf5, 0x7a, 0x57, 0x45, 0x8c, 0xbf, 0x4f, 0xf0, 0x02, 0x0a, 0x4f, 0xf0, - 0x01, 0x0a, 0x5b, 0xe7, 0xcc, 0x73, 0x00, 0x24, 0x54, 0x74, 0x00, 0x24, - 0xf5, 0xff, 0xff, 0x0f, 0x52, 0x52, 0x61, 0x41, 0x72, 0x72, 0x41, 0x61, - 0xc8, 0x73, 0x00, 0x24, 0x2d, 0xe9, 0xf7, 0x4f, 0x15, 0x46, 0x80, 0x46, - 0x28, 0x22, 0x00, 0x21, 0x28, 0x46, 0x10, 0xf0, 0xbb, 0xfa, 0xd8, 0xf8, - 0x00, 0x30, 0x40, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x08, 0xf1, 0x4c, 0x03, - 0x00, 0x22, 0x01, 0xa9, 0x68, 0x46, 0x00, 0x93, 0xff, 0xf7, 0x70, 0xfe, - 0x06, 0x46, 0x04, 0x46, 0x00, 0x28, 0x6e, 0xd1, 0xdd, 0xf8, 0x04, 0x90, - 0xd9, 0xe9, 0x05, 0x7a, 0xaa, 0xf1, 0x02, 0x03, 0x9f, 0x42, 0x1c, 0xd9, - 0x99, 0xf8, 0x00, 0x60, 0x01, 0x2e, 0x35, 0xd1, 0x4f, 0xf0, 0x02, 0x0a, - 0x07, 0x46, 0x51, 0x46, 0x48, 0x46, 0xff, 0xf7, 0xc9, 0xfc, 0x43, 0x1c, - 0x59, 0xd0, 0x01, 0x28, 0x56, 0xd0, 0x00, 0xb9, 0x01, 0x37, 0x01, 0x9b, - 0x0a, 0xf1, 0x01, 0x0a, 0x9b, 0x69, 0x9a, 0x45, 0xef, 0xd3, 0x01, 0x9b, - 0x1a, 0x79, 0x5f, 0x61, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x71, 0xb9, 0xf8, - 0x0c, 0x30, 0x00, 0x24, 0xd9, 0xf8, 0x18, 0x20, 0x40, 0x46, 0xc5, 0xe9, - 0x00, 0x33, 0x02, 0x3a, 0xb9, 0xf8, 0x0a, 0x30, 0x5a, 0x43, 0x5f, 0x43, - 0x0c, 0x23, 0x6b, 0x62, 0xd8, 0xf8, 0x00, 0x30, 0xc5, 0xe9, 0x02, 0x24, - 0xdb, 0x6f, 0xc5, 0xe9, 0x04, 0x74, 0xc5, 0xe9, 0x06, 0x74, 0x98, 0x47, - 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xd9, 0xf8, 0x24, 0x10, - 0x07, 0x46, 0x3c, 0xb9, 0x01, 0x98, 0x01, 0xf1, 0x01, 0x0b, 0xff, 0xf7, - 0x79, 0xfc, 0x06, 0x46, 0x08, 0xbb, 0x59, 0x46, 0x01, 0x9e, 0x32, 0x78, - 0x73, 0x6b, 0x02, 0x2a, 0x03, 0xeb, 0x04, 0x00, 0x0f, 0xd1, 0x1b, 0x5d, - 0x02, 0x34, 0x42, 0x78, 0x53, 0xea, 0x02, 0x23, 0x08, 0xbf, 0x01, 0x37, - 0xb3, 0x89, 0xba, 0xf1, 0x01, 0x0a, 0xb4, 0xfb, 0xf3, 0xf2, 0x03, 0xfb, - 0x12, 0x44, 0xe0, 0xd1, 0xb9, 0xe7, 0xfd, 0xf7, 0x29, 0xfa, 0x30, 0xf0, - 0x70, 0x43, 0x04, 0xf1, 0x04, 0x04, 0x08, 0xbf, 0x01, 0x37, 0xed, 0xe7, - 0x02, 0x26, 0xd8, 0xf8, 0x00, 0x30, 0x40, 0x46, 0xdb, 0x6f, 0x98, 0x47, - 0x30, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, 0xfd, 0xf7, 0xa4, 0xb9, - 0x7f, 0xb5, 0xcd, 0xe9, 0x00, 0x10, 0x03, 0xa8, 0x14, 0x46, 0x03, 0x91, - 0xfd, 0xf7, 0xc7, 0xf9, 0x05, 0x1e, 0x19, 0xdb, 0x0d, 0x4e, 0x56, 0xf8, - 0x25, 0x20, 0x22, 0xb1, 0x00, 0x23, 0x50, 0x6b, 0x13, 0x70, 0x10, 0xf0, - 0xb5, 0xf9, 0x01, 0x9b, 0x13, 0xb1, 0x00, 0x22, 0x1a, 0x70, 0x5a, 0x63, - 0x46, 0xf8, 0x25, 0x30, 0x2c, 0xb1, 0x00, 0x22, 0x01, 0xa9, 0x68, 0x46, - 0xff, 0xf7, 0xd2, 0xfd, 0x04, 0x46, 0x20, 0x46, 0x04, 0xb0, 0x70, 0xbd, - 0x0b, 0x24, 0xfa, 0xe7, 0xcc, 0x73, 0x00, 0x24, 0xf8, 0xb5, 0x03, 0x68, - 0x04, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x23, 0x6d, 0x01, 0x33, 0x07, 0xd1, - 0x23, 0x68, 0x6f, 0xf0, 0x15, 0x05, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, - 0x28, 0x46, 0xf8, 0xbd, 0x00, 0x22, 0x04, 0xf1, 0x4c, 0x01, 0x10, 0x4f, - 0x10, 0x46, 0xff, 0xf7, 0xc1, 0xff, 0x23, 0x6d, 0x06, 0x46, 0x57, 0xf8, - 0x23, 0x00, 0x03, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x23, 0x68, 0x05, 0x46, - 0x18, 0xb1, 0xdb, 0x6f, 0x20, 0x46, 0x98, 0x47, 0xe8, 0xe7, 0x22, 0x6d, - 0xdb, 0x6f, 0x47, 0xf8, 0x22, 0x00, 0x4f, 0xf0, 0xff, 0x32, 0x20, 0x46, - 0x22, 0x65, 0x98, 0x47, 0x30, 0x46, 0xbd, 0xe8, 0xf8, 0x40, 0xfd, 0xf7, - 0x49, 0xb9, 0x00, 0xbf, 0x54, 0x74, 0x00, 0x24, 0x08, 0x4b, 0x10, 0xb5, - 0x03, 0x60, 0x8c, 0x33, 0x04, 0x46, 0x43, 0x60, 0xff, 0xf7, 0xc2, 0xff, - 0x05, 0x4b, 0x20, 0x46, 0x23, 0x60, 0x2c, 0x33, 0x40, 0xf8, 0x04, 0x3f, - 0x05, 0xf0, 0x6c, 0xfa, 0x20, 0x46, 0x10, 0xbd, 0x98, 0xdc, 0x01, 0x08, - 0x34, 0xdd, 0x01, 0x08, 0xa0, 0xf1, 0x04, 0x00, 0xff, 0xf7, 0xe6, 0xbf, - 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xe2, 0xff, 0x20, 0x46, 0x10, 0xf0, - 0x49, 0xf9, 0x20, 0x46, 0x10, 0xbd, 0xa0, 0xf1, 0x04, 0x00, 0xff, 0xf7, - 0xf3, 0xbf, 0x00, 0x00, 0x03, 0x68, 0x73, 0xb5, 0x04, 0x46, 0x9b, 0x6f, - 0x01, 0x92, 0x0d, 0x46, 0x98, 0x47, 0x23, 0x6d, 0x01, 0x9a, 0x01, 0x33, - 0x07, 0xd0, 0x23, 0x68, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x6f, 0xf0, - 0x15, 0x00, 0x02, 0xb0, 0x70, 0xbd, 0x16, 0x48, 0x00, 0x23, 0x06, 0x46, - 0x50, 0xf8, 0x04, 0x1b, 0xd9, 0xb9, 0x46, 0xf8, 0x23, 0x50, 0x04, 0xf1, - 0x14, 0x00, 0x23, 0x65, 0x30, 0x33, 0x84, 0xf8, 0x4e, 0x10, 0x04, 0xf1, - 0x4c, 0x01, 0x84, 0xf8, 0x4c, 0x30, 0x3a, 0x23, 0x84, 0xf8, 0x4d, 0x30, - 0xff, 0xf7, 0x50, 0xff, 0x23, 0x68, 0x05, 0x46, 0x20, 0x46, 0xdb, 0x6f, - 0x98, 0x47, 0x28, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfd, 0xf7, - 0xe9, 0xb8, 0x01, 0x33, 0x04, 0x2b, 0xdd, 0xd1, 0x23, 0x68, 0x20, 0x46, - 0xdb, 0x6f, 0x98, 0x47, 0x6f, 0xf0, 0x0b, 0x00, 0xd1, 0xe7, 0x00, 0xbf, - 0x54, 0x74, 0x00, 0x24, 0x01, 0x29, 0x2d, 0xe9, 0xf8, 0x43, 0x04, 0x46, - 0x0e, 0x46, 0x17, 0x46, 0x40, 0xf2, 0x83, 0x80, 0x83, 0x69, 0x8b, 0x42, - 0x7f, 0xd9, 0x03, 0x78, 0x02, 0x2b, 0x45, 0xd0, 0x03, 0x2b, 0x5a, 0xd0, - 0x01, 0x2b, 0x78, 0xd1, 0x01, 0xeb, 0x51, 0x09, 0x83, 0x89, 0x41, 0x6a, - 0xb9, 0xfb, 0xf3, 0xf3, 0x19, 0x44, 0xff, 0xf7, 0x67, 0xfb, 0x05, 0x46, - 0x60, 0xbb, 0xa3, 0x89, 0x16, 0xf0, 0x01, 0x06, 0x60, 0x6b, 0x09, 0xf1, - 0x01, 0x08, 0xb9, 0xfb, 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x92, 0x0f, 0xbf, - 0xfb, 0xb2, 0x83, 0x5c, 0x03, 0xf0, 0x0f, 0x01, 0x3b, 0x01, 0x1c, 0xbf, - 0x03, 0xf0, 0xf0, 0x03, 0x0b, 0x43, 0x83, 0x54, 0x01, 0x23, 0x61, 0x6a, - 0x20, 0x46, 0xe3, 0x70, 0xa3, 0x89, 0xb8, 0xfb, 0xf3, 0xf3, 0x19, 0x44, - 0xff, 0xf7, 0x46, 0xfb, 0x05, 0x46, 0x58, 0xb9, 0xa3, 0x89, 0x61, 0x6b, - 0xb8, 0xfb, 0xf3, 0xf0, 0x03, 0xfb, 0x10, 0x80, 0x3e, 0xb1, 0xc7, 0xf3, - 0x07, 0x17, 0x0f, 0x54, 0x01, 0x23, 0xe3, 0x70, 0x28, 0x46, 0xbd, 0xe8, - 0xf8, 0x83, 0x0b, 0x5c, 0xc7, 0xf3, 0x03, 0x27, 0x23, 0xf0, 0x0f, 0x03, - 0x1f, 0x43, 0xf2, 0xe7, 0x83, 0x89, 0x5b, 0x08, 0xb1, 0xfb, 0xf3, 0xf3, - 0x41, 0x6a, 0x19, 0x44, 0xff, 0xf7, 0x26, 0xfb, 0x05, 0x46, 0x00, 0x28, - 0xea, 0xd1, 0xa2, 0x89, 0x76, 0x00, 0xb6, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, - 0x13, 0x66, 0x63, 0x6b, 0x9f, 0x55, 0x98, 0x19, 0x3f, 0x12, 0x47, 0x70, - 0xdc, 0xe7, 0x83, 0x89, 0x9b, 0x08, 0xb1, 0xfb, 0xf3, 0xf3, 0x41, 0x6a, - 0x19, 0x44, 0xff, 0xf7, 0x0f, 0xfb, 0x05, 0x46, 0x00, 0x28, 0xd3, 0xd1, - 0xa3, 0x89, 0xb6, 0x00, 0x27, 0xf0, 0x70, 0x47, 0xb6, 0xfb, 0xf3, 0xf1, - 0x03, 0xfb, 0x11, 0x61, 0x66, 0x6b, 0x0e, 0x44, 0x30, 0x46, 0xfd, 0xf7, - 0xcb, 0xf8, 0x00, 0xf0, 0x70, 0x40, 0x47, 0xea, 0x00, 0x01, 0x30, 0x46, - 0xfd, 0xf7, 0xbc, 0xf8, 0xbc, 0xe7, 0x02, 0x25, 0xbc, 0xe7, 0x2d, 0xe9, - 0xf0, 0x41, 0x80, 0x46, 0x05, 0x68, 0x0f, 0x46, 0x49, 0xb9, 0x2e, 0x69, - 0xc6, 0xb1, 0xab, 0x69, 0xb3, 0x42, 0x98, 0xbf, 0x01, 0x26, 0x6b, 0x69, - 0xa3, 0xb9, 0x00, 0x24, 0x06, 0xe0, 0x28, 0x46, 0xff, 0xf7, 0xfa, 0xfa, - 0x01, 0x28, 0x04, 0x46, 0x03, 0xd8, 0x01, 0x24, 0x20, 0x46, 0xbd, 0xe8, - 0xf0, 0x81, 0x42, 0x1c, 0x51, 0xd0, 0xab, 0x69, 0x83, 0x42, 0xf7, 0xd8, - 0x3e, 0x46, 0xea, 0xe7, 0x01, 0x26, 0xe8, 0xe7, 0xbe, 0x42, 0x15, 0xd1, - 0xab, 0x69, 0x74, 0x1c, 0xd8, 0xf8, 0x00, 0x00, 0xa3, 0x42, 0x98, 0xbf, - 0x02, 0x24, 0x21, 0x46, 0xff, 0xf7, 0xde, 0xfa, 0x01, 0x28, 0xe4, 0xd0, - 0x43, 0x1c, 0x3a, 0xd0, 0xd8, 0xb1, 0x2b, 0x69, 0x01, 0x2b, 0x03, 0xd9, - 0xaa, 0x69, 0x93, 0x42, 0x38, 0xbf, 0x1e, 0x46, 0x34, 0x46, 0x01, 0x34, - 0xab, 0x69, 0xa3, 0x42, 0x02, 0xd8, 0x01, 0x2e, 0xcb, 0xd9, 0x02, 0x24, - 0x21, 0x46, 0xd8, 0xf8, 0x00, 0x00, 0xff, 0xf7, 0xc5, 0xfa, 0x40, 0xb1, - 0x01, 0x28, 0xca, 0xd0, 0x01, 0x30, 0x20, 0xd0, 0xb4, 0x42, 0xec, 0xd1, - 0xbd, 0xe7, 0x00, 0x2c, 0xe8, 0xd0, 0x4f, 0xf0, 0xff, 0x32, 0x21, 0x46, - 0x28, 0x46, 0xff, 0xf7, 0x1b, 0xff, 0x90, 0xb9, 0x57, 0xb9, 0x2c, 0x61, - 0xd5, 0xe9, 0x05, 0x32, 0x02, 0x3a, 0x93, 0x42, 0x10, 0xd9, 0x2b, 0x79, - 0x43, 0xf0, 0x01, 0x03, 0x2b, 0x71, 0xb1, 0xe7, 0x22, 0x46, 0x39, 0x46, - 0x28, 0x46, 0xff, 0xf7, 0x09, 0xff, 0x00, 0x28, 0xed, 0xd0, 0x01, 0x28, - 0xa7, 0xd1, 0x4f, 0xf0, 0xff, 0x34, 0xa5, 0xe7, 0x01, 0x3b, 0x6b, 0x61, - 0xeb, 0xe7, 0x2d, 0xe9, 0xf3, 0x41, 0x0d, 0x46, 0x01, 0xa9, 0x04, 0x46, - 0xfc, 0xf7, 0xeb, 0xff, 0x06, 0x46, 0x00, 0x28, 0x63, 0xd1, 0x66, 0x7c, - 0x00, 0x2e, 0x60, 0xd1, 0xe3, 0x68, 0xab, 0x42, 0x04, 0xd2, 0x22, 0x7c, - 0x12, 0xf0, 0x02, 0x0f, 0x08, 0xbf, 0x1d, 0x46, 0x00, 0x22, 0x63, 0x69, - 0x62, 0x61, 0xb5, 0xb9, 0x00, 0x20, 0xe2, 0x68, 0x63, 0x69, 0x93, 0x42, - 0x81, 0xbf, 0x22, 0x7c, 0xe3, 0x60, 0x42, 0xf0, 0x40, 0x02, 0x22, 0x74, - 0x01, 0x9a, 0x91, 0x89, 0xb3, 0xfb, 0xf1, 0xf2, 0x01, 0xfb, 0x12, 0x33, - 0x00, 0x2b, 0x42, 0xd0, 0xe3, 0x69, 0x83, 0x42, 0x18, 0xbf, 0xe0, 0x61, - 0x3d, 0xe0, 0x01, 0x9a, 0x51, 0x89, 0x97, 0x89, 0x4f, 0x43, 0x73, 0xb3, - 0x01, 0x3b, 0x6a, 0x1e, 0xb3, 0xfb, 0xf7, 0xf1, 0xb2, 0xfb, 0xf7, 0xf2, - 0x8a, 0x42, 0x26, 0xd3, 0x7a, 0x42, 0xa1, 0x69, 0x13, 0x40, 0xed, 0x1a, - 0x63, 0x61, 0x00, 0x29, 0xd4, 0xd0, 0xbd, 0x42, 0x63, 0x69, 0x0c, 0xd9, - 0x3b, 0x44, 0xa5, 0xeb, 0x07, 0x08, 0x63, 0x61, 0x23, 0x7c, 0x9a, 0x07, - 0x2a, 0xd5, 0x20, 0x46, 0xff, 0xf7, 0x3b, 0xff, 0x05, 0x46, 0x48, 0xbb, - 0x01, 0x46, 0x63, 0x69, 0x01, 0x98, 0x2b, 0x44, 0x63, 0x61, 0x83, 0x89, - 0xb5, 0xfb, 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x55, 0x00, 0x2d, 0xb9, 0xd0, - 0xff, 0xf7, 0x15, 0xfa, 0x48, 0xb1, 0x10, 0x44, 0xb5, 0xe7, 0xa1, 0x68, - 0x81, 0xb9, 0x20, 0x46, 0xff, 0xf7, 0x23, 0xff, 0x01, 0x28, 0x01, 0x46, - 0x05, 0xd1, 0x02, 0x26, 0x66, 0x74, 0x30, 0x46, 0x02, 0xb0, 0xbd, 0xe8, - 0xf0, 0x81, 0x48, 0x1c, 0x01, 0xd1, 0x01, 0x26, 0xf6, 0xe7, 0xa1, 0x60, - 0xa1, 0x61, 0xc8, 0xe7, 0x20, 0x68, 0xff, 0xf7, 0x1d, 0xfa, 0x05, 0x46, - 0x6b, 0x1c, 0xf4, 0xd0, 0x01, 0x2d, 0xea, 0xd9, 0x01, 0x9b, 0x9b, 0x69, - 0xab, 0x42, 0xe6, 0xd9, 0x29, 0x46, 0xa5, 0x61, 0x45, 0x46, 0xba, 0xe7, - 0xf8, 0xb5, 0x1f, 0x46, 0x03, 0x68, 0x06, 0x46, 0x0d, 0x46, 0x9b, 0x6f, - 0x14, 0x46, 0x98, 0x47, 0x02, 0x2f, 0x11, 0xd1, 0xeb, 0x68, 0x1c, 0x44, - 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x67, 0xff, 0x33, 0x68, 0x04, 0x46, - 0x30, 0x46, 0xdb, 0x6f, 0x6d, 0x69, 0x98, 0x47, 0x44, 0xb1, 0x20, 0x46, - 0xbd, 0xe8, 0xf8, 0x40, 0xfc, 0xf7, 0x36, 0xbf, 0x01, 0x2f, 0xed, 0xd1, - 0x6b, 0x69, 0xea, 0xe7, 0x28, 0x46, 0xf8, 0xbd, 0x03, 0x69, 0x2d, 0xe9, - 0xf0, 0x47, 0x03, 0xf1, 0x20, 0x08, 0x05, 0x46, 0x89, 0x46, 0x04, 0x68, - 0xb8, 0xf5, 0x00, 0x1f, 0x24, 0xbf, 0x00, 0x23, 0x83, 0x61, 0x83, 0x69, - 0x83, 0xb1, 0xa2, 0x89, 0xb8, 0xfb, 0xf2, 0xf0, 0x02, 0xfb, 0x10, 0x82, - 0x00, 0x2a, 0x56, 0xd1, 0x01, 0x33, 0x69, 0x69, 0xab, 0x61, 0x39, 0xb9, - 0x23, 0x89, 0xb3, 0xeb, 0x58, 0x1f, 0x4e, 0xd8, 0x00, 0x23, 0xab, 0x61, - 0x04, 0x20, 0x0a, 0xe0, 0x67, 0x89, 0x01, 0x3f, 0x07, 0x40, 0x46, 0xd1, - 0x20, 0x46, 0xff, 0xf7, 0xc5, 0xf9, 0x01, 0x28, 0x06, 0x46, 0x02, 0xd8, - 0x02, 0x20, 0xbd, 0xe8, 0xf0, 0x87, 0x42, 0x1c, 0x01, 0xd1, 0x01, 0x20, - 0xf9, 0xe7, 0xa3, 0x69, 0x83, 0x42, 0x30, 0xd8, 0xb9, 0xf1, 0x00, 0x0f, - 0xe4, 0xd0, 0x69, 0x69, 0x28, 0x46, 0xff, 0xf7, 0xa4, 0xfe, 0x06, 0x46, - 0x00, 0x28, 0x38, 0xd0, 0x01, 0x28, 0xe9, 0xd0, 0x43, 0x1c, 0xec, 0xd0, - 0x20, 0x46, 0xfc, 0xf7, 0x31, 0xff, 0x82, 0x46, 0x00, 0x28, 0xe6, 0xd1, - 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x7d, 0xf9, 0x51, 0x46, 0x20, 0x63, - 0x81, 0x46, 0xa2, 0x89, 0x60, 0x6b, 0x0f, 0xf0, 0x67, 0xff, 0xd4, 0xf8, - 0x34, 0xa0, 0x63, 0x89, 0xbb, 0x42, 0x09, 0xd9, 0x01, 0x23, 0x09, 0xeb, - 0x07, 0x02, 0x51, 0x46, 0x60, 0x78, 0xfc, 0xf7, 0x87, 0xfe, 0x08, 0xb9, - 0x01, 0x37, 0xf2, 0xe7, 0x63, 0x89, 0x9f, 0x42, 0xc9, 0xd1, 0x31, 0x46, - 0x20, 0x46, 0x6e, 0x61, 0xff, 0xf7, 0x5f, 0xf9, 0xa8, 0x61, 0xa2, 0x89, - 0x00, 0x20, 0xc5, 0xf8, 0x10, 0x80, 0xb8, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, - 0x13, 0x88, 0x63, 0x6b, 0x43, 0x44, 0xeb, 0x61, 0xb3, 0xe7, 0x07, 0x20, - 0xb1, 0xe7, 0x37, 0xb5, 0x0d, 0x46, 0x01, 0xa9, 0x04, 0x46, 0xfc, 0xf7, - 0xc6, 0xfe, 0x18, 0xb9, 0x20, 0x46, 0x1d, 0xb9, 0xf7, 0xf7, 0xfa, 0xfe, - 0x03, 0xb0, 0x30, 0xbd, 0xf7, 0xf7, 0x2a, 0xff, 0x10, 0xf0, 0xfb, 0x03, - 0xf8, 0xd1, 0x6b, 0x72, 0xa3, 0x69, 0x1b, 0xb1, 0x29, 0x46, 0x20, 0x46, - 0xfc, 0xf7, 0x16, 0xff, 0x00, 0x21, 0x20, 0x46, 0xff, 0xf7, 0x68, 0xff, - 0x04, 0x28, 0x08, 0xbf, 0x00, 0x20, 0xe9, 0xe7, 0x03, 0x68, 0x70, 0xb5, - 0x0d, 0x46, 0x04, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x28, 0x46, 0x00, 0x21, - 0xff, 0xf7, 0xd5, 0xff, 0x23, 0x68, 0x20, 0x46, 0xdb, 0x6f, 0xbd, 0xe8, - 0x70, 0x40, 0x18, 0x47, 0x03, 0x68, 0xf0, 0xb5, 0x16, 0x46, 0x0f, 0x69, - 0x87, 0xb0, 0x9b, 0x6f, 0x05, 0x46, 0x0c, 0x46, 0x98, 0x47, 0xb7, 0x42, - 0x09, 0xdd, 0x00, 0x21, 0x20, 0x46, 0xff, 0xf7, 0xc0, 0xff, 0x2b, 0x68, - 0x28, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x07, 0xb0, 0xf0, 0xbd, 0xb7, 0x42, - 0xf7, 0xda, 0x69, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xb4, 0xff, 0x27, 0x69, - 0x00, 0x28, 0xf0, 0xd1, 0x9d, 0xf8, 0x09, 0x30, 0x00, 0x2b, 0xf2, 0xd1, - 0xeb, 0xe7, 0x03, 0x68, 0x70, 0xb5, 0x0e, 0x46, 0x86, 0xb0, 0x04, 0x46, - 0x9b, 0x6f, 0x15, 0x46, 0x98, 0x47, 0x30, 0x46, 0x69, 0x46, 0xff, 0xf7, - 0xa0, 0xff, 0x23, 0x68, 0x06, 0x46, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, - 0x2e, 0xb1, 0x30, 0x46, 0x06, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfc, 0xf7, - 0x49, 0xbe, 0x9d, 0xf8, 0x09, 0x00, 0x78, 0xb1, 0x9d, 0xf8, 0x08, 0x30, - 0x0c, 0x22, 0x0d, 0xf1, 0x09, 0x01, 0x28, 0x46, 0x13, 0xf0, 0x10, 0x0f, - 0x14, 0xbf, 0x03, 0x23, 0x05, 0x23, 0x85, 0xf8, 0x00, 0x31, 0x11, 0xf0, - 0x07, 0xfb, 0x01, 0x20, 0x06, 0xb0, 0x70, 0xbd, 0x2d, 0xe9, 0xf7, 0x4f, - 0x04, 0x46, 0xd0, 0xf8, 0x00, 0x90, 0x0d, 0x46, 0x11, 0xf8, 0x01, 0x3b, - 0x2f, 0x2b, 0xfa, 0xd0, 0x5c, 0x2b, 0xf8, 0xd0, 0x00, 0x23, 0xa3, 0x60, - 0x2b, 0x78, 0x1f, 0x2b, 0x25, 0xd9, 0x04, 0xf1, 0x20, 0x07, 0x4f, 0xf0, - 0x20, 0x3b, 0xc5, 0xf1, 0x02, 0x03, 0x05, 0xf1, 0xff, 0x3a, 0x00, 0x26, - 0x4f, 0xf0, 0x08, 0x08, 0x00, 0x93, 0x51, 0x4a, 0x51, 0x4b, 0xc7, 0xf8, - 0x04, 0xb0, 0xc7, 0xf8, 0x00, 0xb0, 0xc7, 0xf8, 0x07, 0xb0, 0x00, 0x99, - 0x01, 0xeb, 0x0a, 0x00, 0x1a, 0xf8, 0x01, 0x1f, 0x20, 0x29, 0x2e, 0xd9, - 0x2f, 0x29, 0x01, 0xd0, 0x5c, 0x29, 0x0f, 0xd1, 0x2b, 0x5c, 0x2f, 0x2b, - 0x01, 0xd0, 0x5c, 0x2b, 0x25, 0xd1, 0x01, 0x30, 0xf8, 0xe7, 0x80, 0x23, - 0x20, 0x46, 0x84, 0xf8, 0x2b, 0x30, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, - 0xf7, 0xf7, 0x44, 0xbe, 0x2e, 0x29, 0x76, 0xd0, 0xb0, 0x45, 0x72, 0xd9, - 0x08, 0x06, 0x18, 0x46, 0x44, 0xbf, 0x01, 0xf0, 0x7f, 0x01, 0x51, 0x5c, - 0x01, 0x91, 0x11, 0xf0, 0x99, 0xfa, 0x00, 0x28, 0x67, 0xd1, 0x01, 0x99, - 0x38, 0x4b, 0xa1, 0xf1, 0x61, 0x00, 0x36, 0x4a, 0x19, 0x28, 0x9c, 0xbf, - 0x20, 0x39, 0xc9, 0xb2, 0xb9, 0x55, 0x01, 0x36, 0xc9, 0xe7, 0x05, 0x44, - 0x00, 0x2e, 0x58, 0xd0, 0x94, 0xf8, 0x20, 0x30, 0xe5, 0x2b, 0x04, 0xbf, - 0x05, 0x23, 0x84, 0xf8, 0x20, 0x30, 0x20, 0x29, 0x28, 0xd9, 0x2b, 0x78, - 0x21, 0x2b, 0x34, 0xbf, 0x04, 0x23, 0x00, 0x23, 0x20, 0x46, 0x84, 0xf8, - 0x2b, 0x30, 0xd4, 0xf8, 0x00, 0x80, 0xf7, 0xf7, 0x11, 0xfe, 0x06, 0x46, - 0xe8, 0xb9, 0xa1, 0x69, 0x40, 0x46, 0xff, 0xf7, 0x61, 0xf8, 0x06, 0x46, - 0xb8, 0xb9, 0xe0, 0x69, 0x03, 0x78, 0x9b, 0xb1, 0xc3, 0x7a, 0x03, 0xf0, - 0x3f, 0x03, 0xa3, 0x71, 0xc6, 0x7a, 0x16, 0xf0, 0x08, 0x06, 0x04, 0xd1, - 0x0b, 0x22, 0x39, 0x46, 0x11, 0xf0, 0x90, 0xf9, 0x38, 0xb1, 0x00, 0x21, - 0x20, 0x46, 0xff, 0xf7, 0x75, 0xfe, 0xe2, 0xe7, 0x04, 0x23, 0xd9, 0xe7, - 0x04, 0x26, 0x94, 0xf8, 0x2b, 0x30, 0x4e, 0xb1, 0x04, 0x2e, 0x03, 0xd1, - 0x13, 0xf0, 0x04, 0x0f, 0x08, 0xbf, 0x05, 0x26, 0x30, 0x46, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x5a, 0x07, 0xf9, 0xd4, 0xa3, 0x79, 0xdb, 0x06, - 0x0f, 0xd5, 0xb9, 0xf8, 0x0c, 0x10, 0x22, 0x69, 0x99, 0xf8, 0x00, 0x00, - 0xb2, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x23, 0xd9, 0xf8, 0x34, 0x10, - 0x19, 0x44, 0xfc, 0xf7, 0x89, 0xfd, 0xa0, 0x60, 0x5f, 0xe7, 0x05, 0x26, - 0xe4, 0xe7, 0x06, 0x26, 0xe2, 0xe7, 0xb8, 0xf1, 0x0b, 0x0f, 0xfa, 0xd0, - 0x08, 0x26, 0x4f, 0xf0, 0x0b, 0x08, 0x64, 0xe7, 0x95, 0xdf, 0x01, 0x08, - 0x61, 0xdf, 0x01, 0x08, 0x2d, 0xe9, 0xf7, 0x4f, 0x0c, 0x46, 0x80, 0x46, - 0x11, 0x46, 0x05, 0x68, 0x01, 0x2c, 0x5a, 0xd9, 0xab, 0x69, 0xa3, 0x42, - 0x57, 0xd9, 0x62, 0xb9, 0x27, 0x46, 0xdf, 0xf8, 0xb4, 0x90, 0x21, 0x46, - 0xd8, 0xf8, 0x00, 0x00, 0x26, 0x46, 0xff, 0xf7, 0x19, 0xf8, 0x04, 0x46, - 0x58, 0xb9, 0x00, 0x20, 0x06, 0xe0, 0x4f, 0xf0, 0xff, 0x32, 0x28, 0x46, - 0xff, 0xf7, 0x76, 0xfc, 0x00, 0x28, 0xeb, 0xd0, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x01, 0x28, 0x3d, 0xd0, 0x43, 0x1c, 0x3d, 0xd0, 0x00, 0x22, - 0x31, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x68, 0xfc, 0x00, 0x28, 0xf1, 0xd1, - 0xd5, 0xe9, 0x05, 0x32, 0x02, 0x3a, 0x93, 0x42, 0x05, 0xd2, 0x01, 0x33, - 0x6b, 0x61, 0x2b, 0x79, 0x43, 0xf0, 0x01, 0x03, 0x2b, 0x71, 0x73, 0x1c, - 0xa3, 0x42, 0x22, 0xd0, 0x95, 0xf8, 0x01, 0xb0, 0x59, 0xf8, 0x2b, 0x30, - 0xe3, 0xb1, 0x39, 0x46, 0x28, 0x46, 0xfe, 0xf7, 0xc6, 0xff, 0x31, 0x46, - 0x82, 0x46, 0x28, 0x46, 0xfe, 0xf7, 0xc1, 0xff, 0x6f, 0x89, 0x06, 0x46, - 0x58, 0x46, 0xfc, 0xf7, 0xc9, 0xfc, 0x02, 0x46, 0x3e, 0x44, 0x59, 0xf8, - 0x2b, 0x00, 0xa6, 0xeb, 0x0a, 0x06, 0x03, 0x68, 0xa6, 0xfb, 0x02, 0x67, - 0xcd, 0xe9, 0x00, 0x67, 0x19, 0x6a, 0xa2, 0xfb, 0x0a, 0x23, 0x88, 0x47, - 0x27, 0x46, 0xab, 0x69, 0xa3, 0x42, 0xac, 0xd8, 0xb3, 0xe7, 0x02, 0x20, - 0xba, 0xe7, 0x01, 0x20, 0xb8, 0xe7, 0x00, 0xbf, 0x54, 0x74, 0x00, 0x24, - 0x2d, 0xe9, 0xff, 0x41, 0x03, 0x68, 0x0c, 0x46, 0x01, 0x92, 0x06, 0x46, - 0x9b, 0x6f, 0x98, 0x47, 0x01, 0x99, 0x20, 0x46, 0x67, 0x69, 0xff, 0xf7, - 0x1e, 0xfd, 0x05, 0x46, 0x48, 0xb1, 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6f, - 0x98, 0x47, 0x28, 0x46, 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x41, 0xfc, 0xf7, - 0xed, 0xbc, 0x03, 0xa9, 0x20, 0x46, 0xfc, 0xf7, 0x00, 0xfd, 0x05, 0x46, - 0x00, 0x28, 0xee, 0xd1, 0x65, 0x7c, 0x00, 0x2d, 0xeb, 0xd1, 0x23, 0x7c, - 0x9a, 0x07, 0x01, 0xd4, 0x07, 0x25, 0xe6, 0xe7, 0xd4, 0xf8, 0x14, 0x80, - 0xe3, 0x68, 0x98, 0x45, 0x08, 0xd3, 0x20, 0x46, 0x39, 0x46, 0xff, 0xf7, - 0xfa, 0xfc, 0x04, 0x46, 0x70, 0xbb, 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, - 0xb8, 0xf1, 0x00, 0x0f, 0x11, 0xd1, 0x2a, 0x46, 0xa1, 0x68, 0x20, 0x46, - 0xff, 0xf7, 0x58, 0xff, 0x05, 0x46, 0xc4, 0xf8, 0x08, 0x80, 0x63, 0x69, - 0xe3, 0x60, 0x23, 0x7c, 0x43, 0xf0, 0x40, 0x03, 0x23, 0x74, 0x00, 0x2d, - 0xe3, 0xd0, 0x65, 0x74, 0xc3, 0xe7, 0xa1, 0x69, 0x20, 0x68, 0xfe, 0xf7, - 0x75, 0xff, 0x43, 0x1c, 0x01, 0x46, 0x0b, 0xd0, 0x01, 0x28, 0x0b, 0xd0, - 0x03, 0x9b, 0x9b, 0x69, 0x98, 0x42, 0xe8, 0xd2, 0xa2, 0x69, 0x20, 0x46, - 0xff, 0xf7, 0x3a, 0xff, 0x05, 0x46, 0xe2, 0xe7, 0x01, 0x25, 0xe0, 0xe7, - 0x02, 0x25, 0xde, 0xe7, 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, - 0x20, 0x46, 0xab, 0xe7, 0xf0, 0xb5, 0x1f, 0x46, 0x09, 0x4b, 0x16, 0x46, - 0xdd, 0xe9, 0x05, 0x45, 0xc0, 0xe9, 0x00, 0x31, 0x00, 0x23, 0x03, 0x76, - 0x03, 0x72, 0x54, 0xea, 0x05, 0x03, 0x08, 0xbf, 0x01, 0x23, 0xc0, 0xe9, - 0x04, 0x67, 0xc0, 0xe9, 0x08, 0x45, 0x08, 0xbf, 0x03, 0x76, 0xf0, 0xbd, - 0x60, 0xe0, 0x01, 0x08, 0x70, 0x47, 0x00, 0x00, 0x03, 0x4b, 0x10, 0xb5, - 0x04, 0x46, 0x03, 0x60, 0xfd, 0xf7, 0x22, 0xfb, 0x20, 0x46, 0x10, 0xbd, - 0x38, 0xdc, 0x01, 0x08, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xf2, 0xff, - 0x20, 0x46, 0x0f, 0xf0, 0x97, 0xfc, 0x20, 0x46, 0x10, 0xbd, 0x00, 0x00, - 0x08, 0xb5, 0x03, 0x6a, 0x01, 0x3b, 0x03, 0x62, 0x00, 0x68, 0x0c, 0xf0, - 0x89, 0xfb, 0x01, 0x46, 0x30, 0xb1, 0x04, 0x4b, 0x1b, 0x78, 0xdb, 0xb2, - 0x13, 0xb9, 0x03, 0x48, 0xf6, 0xf7, 0xd4, 0xff, 0x08, 0xbd, 0x00, 0xbf, - 0x48, 0x0e, 0x00, 0x24, 0x17, 0x01, 0x02, 0x80, 0x08, 0xb5, 0x03, 0x48, - 0x04, 0xf0, 0xa4, 0xfc, 0xbd, 0xe8, 0x08, 0x40, 0xff, 0xf7, 0xe2, 0xbf, - 0x2c, 0x74, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, 0x00, 0x68, 0xfc, 0xf7, - 0x03, 0xfa, 0x01, 0x46, 0x18, 0xb9, 0x23, 0x6a, 0x01, 0x33, 0x23, 0x62, - 0x10, 0xbd, 0x04, 0x4b, 0x1b, 0x78, 0xdb, 0xb2, 0x00, 0x2b, 0xf9, 0xd1, - 0x02, 0x48, 0xf6, 0xf7, 0xb1, 0xff, 0x00, 0xbf, 0x48, 0x0e, 0x00, 0x24, - 0x15, 0x01, 0x02, 0x80, 0x70, 0xb5, 0x00, 0xf1, 0xa4, 0x06, 0x0c, 0x46, - 0x05, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xe0, 0xff, 0x04, 0xf1, 0x10, 0x02, - 0x21, 0x46, 0x05, 0xf1, 0x14, 0x00, 0xfd, 0xf7, 0x5b, 0xfe, 0x38, 0xb9, - 0x23, 0x69, 0x63, 0x60, 0x63, 0x69, 0xa3, 0x60, 0x0e, 0x23, 0xa3, 0x61, - 0x10, 0x23, 0xe3, 0x60, 0x30, 0x46, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, - 0xab, 0xbf, 0x13, 0xb5, 0x0c, 0x46, 0xa4, 0x30, 0x01, 0x90, 0xff, 0xf7, - 0xc5, 0xff, 0xa4, 0x69, 0x01, 0x98, 0xff, 0xf7, 0xa1, 0xff, 0x20, 0x46, - 0x02, 0xb0, 0xbd, 0xe8, 0x10, 0x40, 0xfc, 0xf7, 0x10, 0xbb, 0x2d, 0xe9, - 0xf0, 0x41, 0x06, 0x46, 0x00, 0xf1, 0xa4, 0x07, 0x0c, 0x46, 0x15, 0x46, - 0x14, 0x36, 0x38, 0x46, 0xff, 0xf7, 0xb0, 0xff, 0x04, 0xf1, 0x10, 0x02, - 0x21, 0x46, 0x30, 0x46, 0xfd, 0xf7, 0x2c, 0xfe, 0xd0, 0xb9, 0x23, 0x69, - 0x04, 0xf1, 0x24, 0x08, 0xa5, 0x61, 0x63, 0x60, 0x63, 0x69, 0xa3, 0x60, - 0x10, 0x23, 0xe3, 0x60, 0x21, 0x6a, 0x21, 0xf0, 0x00, 0x43, 0x9d, 0x42, - 0x01, 0xd8, 0xe5, 0x60, 0x0a, 0xe0, 0x00, 0x29, 0xa5, 0xeb, 0x03, 0x05, - 0x06, 0xda, 0x42, 0x46, 0x21, 0x46, 0x30, 0x46, 0xfd, 0xf7, 0x12, 0xfe, - 0x00, 0x28, 0xed, 0xd0, 0x38, 0x46, 0xbd, 0xe8, 0xf0, 0x41, 0xff, 0xf7, - 0x69, 0xbf, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x41, 0x00, 0xf1, 0xa4, 0x08, - 0xc8, 0xb0, 0x0e, 0x46, 0x05, 0x46, 0x40, 0x46, 0x17, 0x46, 0xff, 0xf7, - 0x7d, 0xff, 0x4f, 0xf4, 0x84, 0x72, 0x00, 0x21, 0x06, 0xa8, 0x0f, 0xf0, - 0x53, 0xfc, 0xb3, 0x69, 0x14, 0x35, 0x0e, 0x2b, 0x22, 0xd1, 0x22, 0x23, - 0x36, 0x49, 0x08, 0xa8, 0x8d, 0xf8, 0x18, 0x30, 0x10, 0xf0, 0x34, 0xfa, - 0x0f, 0x23, 0x01, 0x24, 0xb3, 0x61, 0x40, 0x46, 0xff, 0xf7, 0x46, 0xff, - 0x01, 0x2c, 0x0d, 0xd1, 0x9d, 0xf8, 0x18, 0x30, 0x11, 0x2b, 0x59, 0xd0, - 0x22, 0x2b, 0x14, 0xbf, 0x00, 0x23, 0x03, 0x23, 0x08, 0xa9, 0x38, 0x46, - 0x87, 0xf8, 0x00, 0x31, 0x10, 0xf0, 0x1e, 0xfa, 0x20, 0x46, 0x48, 0xb0, - 0xbd, 0xe8, 0xf0, 0x41, 0xfc, 0xf7, 0xa5, 0xba, 0x0f, 0x2b, 0x08, 0xd1, - 0x22, 0x23, 0x25, 0x49, 0x08, 0xa8, 0x8d, 0xf8, 0x18, 0x30, 0x10, 0xf0, - 0x0f, 0xfa, 0x10, 0x23, 0xd9, 0xe7, 0x02, 0xaa, 0x31, 0x46, 0x28, 0x46, - 0xfe, 0xf7, 0x96, 0xf9, 0x04, 0x46, 0x18, 0xb1, 0x82, 0x1c, 0x08, 0xbf, - 0x00, 0x24, 0xd0, 0xe7, 0x9d, 0xf8, 0x0c, 0x30, 0x03, 0xf0, 0x7f, 0x02, - 0x11, 0x2a, 0x01, 0xd0, 0x22, 0x2a, 0xec, 0xd1, 0x1b, 0x06, 0x0c, 0xd5, - 0x04, 0xa9, 0x28, 0x46, 0xfe, 0xf7, 0xf2, 0xf9, 0x04, 0x1e, 0xc0, 0xdb, - 0xe3, 0xd1, 0x9d, 0xf8, 0x0c, 0x30, 0x03, 0xf0, 0x7f, 0x03, 0x8d, 0xf8, - 0x0c, 0x30, 0x9d, 0xf8, 0x0c, 0x30, 0x28, 0x46, 0x02, 0x9a, 0x11, 0x2b, - 0x8d, 0xf8, 0x18, 0x30, 0x02, 0xf1, 0x04, 0x02, 0x9d, 0xf8, 0x0e, 0x10, - 0x04, 0xbf, 0x05, 0x9b, 0x07, 0x93, 0x9d, 0xf8, 0x0d, 0x30, 0x1a, 0x44, - 0x9d, 0xf8, 0x0f, 0x30, 0x0a, 0x44, 0x00, 0x93, 0x71, 0x68, 0x08, 0xab, - 0xfd, 0xf7, 0x7f, 0xfd, 0x04, 0x1e, 0x08, 0xbf, 0x01, 0x24, 0x9c, 0xe7, - 0x05, 0x23, 0xa7, 0xe7, 0x56, 0xdf, 0x01, 0x08, 0x55, 0xdf, 0x01, 0x08, - 0x37, 0xb5, 0x05, 0x46, 0xa4, 0x30, 0x0c, 0x46, 0x01, 0x90, 0xff, 0xf7, - 0xf9, 0xfe, 0x05, 0xf1, 0x24, 0x02, 0x6b, 0x6a, 0x01, 0x98, 0x1b, 0xb1, - 0x9c, 0x42, 0x0d, 0xd1, 0x23, 0x68, 0x13, 0x60, 0xff, 0xf7, 0xce, 0xfe, - 0x14, 0xb1, 0x20, 0x46, 0x0f, 0xf0, 0x5e, 0xfb, 0x00, 0x20, 0x03, 0xb0, - 0xbd, 0xe8, 0x30, 0x40, 0xfc, 0xf7, 0x39, 0xba, 0x1a, 0x46, 0x1b, 0x68, - 0xeb, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, 0x00, 0xf1, 0xa4, 0x06, 0x0d, 0x46, - 0x81, 0x46, 0x86, 0xb0, 0x30, 0x46, 0x90, 0x46, 0xff, 0xf7, 0xd6, 0xfe, - 0xea, 0x69, 0x09, 0xf1, 0x14, 0x09, 0x02, 0xf0, 0x03, 0x03, 0x01, 0x2b, - 0x5a, 0xd0, 0x92, 0x03, 0x6b, 0x69, 0x03, 0xd5, 0x2a, 0x6a, 0x93, 0x42, - 0x38, 0xbf, 0x13, 0x46, 0x98, 0x45, 0x24, 0xd2, 0x29, 0x46, 0x48, 0x46, - 0xfd, 0xf7, 0xec, 0xfe, 0x04, 0x46, 0xa8, 0xb9, 0x05, 0xab, 0x05, 0x90, - 0x05, 0xf1, 0x2c, 0x01, 0x48, 0x46, 0x02, 0x93, 0x05, 0xf1, 0x10, 0x03, - 0xcd, 0xe9, 0x00, 0x83, 0xd5, 0xe9, 0x04, 0x23, 0xf7, 0xf7, 0xd9, 0xfb, - 0x04, 0x46, 0x28, 0xb9, 0xeb, 0x69, 0xc5, 0xf8, 0x14, 0x80, 0x43, 0xf4, - 0x80, 0x33, 0xeb, 0x61, 0x30, 0x46, 0xff, 0xf7, 0x87, 0xfe, 0x20, 0x46, - 0x06, 0xb0, 0xbd, 0xe8, 0xf0, 0x47, 0xfc, 0xf7, 0xf6, 0xb9, 0x2e, 0xd9, - 0x2f, 0x6a, 0xbb, 0x42, 0x09, 0xd0, 0x29, 0x46, 0x48, 0x46, 0xfd, 0xf7, - 0xc3, 0xfe, 0x04, 0x1e, 0x15, 0xd1, 0x6b, 0x69, 0x00, 0x2b, 0x24, 0xdb, - 0x2b, 0x62, 0x4f, 0xf0, 0x00, 0x0a, 0x2b, 0x6a, 0x98, 0x45, 0x0e, 0xd8, - 0x29, 0x46, 0x48, 0x46, 0xfd, 0xf7, 0xb4, 0xfe, 0x20, 0xb9, 0x38, 0x1e, - 0xb4, 0xbf, 0x6f, 0xf0, 0x15, 0x00, 0x28, 0x62, 0x00, 0xea, 0xe0, 0x74, - 0xd6, 0xe7, 0xd5, 0xdb, 0xeb, 0xe7, 0x01, 0x23, 0x05, 0xaa, 0x29, 0x46, - 0x48, 0x46, 0x8d, 0xf8, 0x14, 0xa0, 0xfd, 0xf7, 0x0b, 0xff, 0x04, 0x1e, - 0xe3, 0xda, 0xc9, 0xe7, 0x6f, 0xf0, 0x08, 0x04, 0xc6, 0xe7, 0x00, 0x24, - 0xc4, 0xe7, 0x6f, 0xf0, 0x15, 0x04, 0xc1, 0xe7, 0x37, 0xb5, 0x0d, 0x46, - 0xa4, 0x30, 0x01, 0x90, 0xff, 0xf7, 0x66, 0xfe, 0xeb, 0x69, 0x6c, 0x69, - 0x13, 0xf4, 0x00, 0x3f, 0x01, 0x98, 0x03, 0xd0, 0x2b, 0x6a, 0x9c, 0x42, - 0x38, 0xbf, 0x1c, 0x46, 0xff, 0xf7, 0x3a, 0xfe, 0x20, 0x46, 0x03, 0xb0, - 0xbd, 0xe8, 0x30, 0x40, 0xfc, 0xf7, 0xa9, 0xb9, 0x13, 0xb5, 0x0c, 0x46, - 0xa4, 0x30, 0x01, 0x90, 0xff, 0xf7, 0x4e, 0xfe, 0x24, 0x6a, 0x01, 0x98, - 0xff, 0xf7, 0x2a, 0xfe, 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0x10, 0x40, - 0xfc, 0xf7, 0x99, 0xb9, 0x2d, 0xe9, 0xf0, 0x41, 0x00, 0xf1, 0xa4, 0x08, - 0x05, 0x46, 0x0e, 0x46, 0x14, 0x46, 0x40, 0x46, 0x1f, 0x46, 0xff, 0xf7, - 0x39, 0xfe, 0x05, 0xf1, 0x14, 0x00, 0x31, 0x46, 0xfd, 0xf7, 0x5e, 0xfe, - 0x05, 0x46, 0x70, 0xb9, 0x3f, 0xb1, 0x01, 0x2f, 0x33, 0x6a, 0x01, 0xd1, - 0x1c, 0x44, 0x02, 0xe0, 0x02, 0x2f, 0x0e, 0xd0, 0x1c, 0x46, 0x00, 0x2c, - 0xaa, 0xbf, 0x25, 0x46, 0x6f, 0xf0, 0x15, 0x05, 0x34, 0x62, 0x40, 0x46, - 0xff, 0xf7, 0x00, 0xfe, 0x28, 0x46, 0xbd, 0xe8, 0xf0, 0x41, 0xfc, 0xf7, - 0x70, 0xb9, 0x73, 0x69, 0xea, 0xe7, 0x37, 0xb5, 0x00, 0xf1, 0xa4, 0x05, - 0x04, 0x46, 0x01, 0x91, 0x28, 0x46, 0xff, 0xf7, 0x11, 0xfe, 0x01, 0x99, - 0x04, 0xf1, 0x14, 0x00, 0xfe, 0xf7, 0x74, 0xfb, 0x04, 0x46, 0x28, 0x46, - 0xff, 0xf7, 0xe8, 0xfd, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, - 0xfc, 0xf7, 0x57, 0xb9, 0x30, 0xb5, 0x00, 0xf1, 0xa4, 0x05, 0x85, 0xb0, - 0x04, 0x46, 0x28, 0x46, 0x01, 0x93, 0xcd, 0xe9, 0x02, 0x21, 0xff, 0xf7, - 0xf7, 0xfd, 0x03, 0x99, 0x04, 0xf1, 0x14, 0x00, 0xdd, 0xe9, 0x01, 0x32, - 0xfd, 0xf7, 0x84, 0xfe, 0x04, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xcc, 0xfd, - 0x20, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0x30, 0x40, 0xfc, 0xf7, 0x3b, 0xb9, - 0x30, 0xb5, 0x00, 0xf1, 0xa4, 0x05, 0x85, 0xb0, 0x04, 0x46, 0x28, 0x46, - 0x01, 0x93, 0xcd, 0xe9, 0x02, 0x21, 0xff, 0xf7, 0xdb, 0xfd, 0x03, 0x99, - 0x04, 0xf1, 0x14, 0x00, 0xdd, 0xe9, 0x01, 0x32, 0xfd, 0xf7, 0x9b, 0xff, - 0x04, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xb0, 0xfd, 0x20, 0x46, 0x05, 0xb0, - 0xbd, 0xe8, 0x30, 0x40, 0xfc, 0xf7, 0x1f, 0xb9, 0xf8, 0xb5, 0x00, 0xf1, - 0xa4, 0x07, 0x05, 0x46, 0x0c, 0x46, 0x38, 0x46, 0xff, 0xf7, 0xc2, 0xfd, - 0x21, 0x46, 0x05, 0xf1, 0x14, 0x00, 0xfe, 0xf7, 0x25, 0xfb, 0x05, 0xf1, - 0x20, 0x02, 0x06, 0x46, 0x2b, 0x6a, 0x1b, 0xb1, 0x9c, 0x42, 0x16, 0xd1, - 0x23, 0x68, 0x13, 0x60, 0xa3, 0x69, 0x0b, 0xb1, 0x1b, 0x68, 0x2b, 0xb9, - 0x6b, 0x69, 0x5b, 0x6b, 0x13, 0xb9, 0x60, 0x6b, 0x0f, 0xf0, 0x1e, 0xfa, - 0x38, 0x46, 0xff, 0xf7, 0x87, 0xfd, 0x20, 0x46, 0x0f, 0xf0, 0x18, 0xfa, - 0x30, 0x46, 0xbd, 0xe8, 0xf8, 0x40, 0xfc, 0xf7, 0xf4, 0xb8, 0x1a, 0x46, - 0x1b, 0x68, 0xe2, 0xe7, 0x2d, 0xe9, 0xf3, 0x41, 0x06, 0x46, 0x14, 0x46, - 0x00, 0x21, 0x28, 0x22, 0x06, 0xf1, 0xa4, 0x07, 0x20, 0x46, 0x00, 0x25, - 0x0f, 0xf0, 0x6c, 0xfa, 0x38, 0x46, 0x06, 0xf1, 0x14, 0x08, 0x01, 0x95, - 0xff, 0xf7, 0x8a, 0xfd, 0x06, 0xf1, 0x18, 0x00, 0xfc, 0xf7, 0x20, 0xf9, - 0x28, 0xb9, 0x01, 0xaa, 0x0d, 0x49, 0x40, 0x46, 0xfd, 0xf7, 0x68, 0xfc, - 0x05, 0x46, 0x38, 0x46, 0xff, 0xf7, 0x5c, 0xfd, 0x6d, 0xb9, 0x73, 0x6f, - 0x01, 0x9a, 0xc4, 0xe9, 0x00, 0x33, 0xb3, 0x6f, 0xc4, 0xe9, 0x02, 0x35, - 0x9b, 0x1a, 0xc4, 0xe9, 0x04, 0x35, 0xc4, 0xe9, 0x06, 0x35, 0xff, 0x23, - 0x63, 0x62, 0x28, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0xbf, - 0x69, 0x80, 0x00, 0x08, 0x2d, 0xe9, 0xf0, 0x41, 0x80, 0x46, 0x00, 0xf1, - 0xa4, 0x06, 0xd4, 0xb0, 0x0c, 0x46, 0x08, 0xf1, 0x14, 0x07, 0x30, 0x46, - 0x15, 0x46, 0xff, 0xf7, 0x59, 0xfd, 0x02, 0xab, 0x03, 0xaa, 0x07, 0xa9, - 0x38, 0x46, 0x02, 0x94, 0xfe, 0xf7, 0xf4, 0xfa, 0x04, 0x46, 0xc0, 0xb9, - 0x01, 0x46, 0x4f, 0xf4, 0x84, 0x72, 0x12, 0xa8, 0x0f, 0xf0, 0x26, 0xfa, - 0x9d, 0xf8, 0x10, 0x30, 0x08, 0xf1, 0x18, 0x01, 0x05, 0xa8, 0x11, 0x2b, - 0x8d, 0xf8, 0x48, 0x30, 0x04, 0xbf, 0x06, 0x9b, 0x13, 0x93, 0xfc, 0xf7, - 0xc6, 0xf8, 0x04, 0x46, 0xc0, 0xb9, 0x17, 0x49, 0x14, 0xa8, 0x0f, 0xf0, - 0xff, 0xff, 0x30, 0x46, 0xff, 0xf7, 0x14, 0xfd, 0x13, 0x9b, 0x2b, 0x61, - 0x9d, 0xf8, 0x48, 0x30, 0x11, 0x2b, 0x1d, 0xd0, 0x22, 0x2b, 0x44, 0xf2, - 0xff, 0x13, 0x18, 0xbf, 0x00, 0x23, 0x20, 0x46, 0x6b, 0x60, 0x54, 0xb0, - 0xbd, 0xe8, 0xf0, 0x41, 0xfc, 0xf7, 0x77, 0xb8, 0x03, 0x9b, 0x38, 0x46, - 0x9d, 0xf8, 0x11, 0x10, 0x04, 0x33, 0x9d, 0xf8, 0x12, 0x20, 0x19, 0x44, - 0x9d, 0xf8, 0x13, 0x30, 0x0a, 0x44, 0x00, 0x93, 0x08, 0x99, 0x14, 0xab, - 0xfd, 0xf7, 0x87, 0xfb, 0x04, 0x46, 0xd8, 0xe7, 0x48, 0xf2, 0xff, 0x13, - 0xe3, 0xe7, 0x00, 0xbf, 0x53, 0xdf, 0x01, 0x08, 0xf0, 0xb5, 0x00, 0xf1, - 0xa4, 0x06, 0x05, 0x46, 0x9f, 0xb0, 0x0c, 0x46, 0x30, 0x46, 0x05, 0xf1, - 0x14, 0x07, 0xff, 0xf7, 0xff, 0xfc, 0x95, 0xf8, 0x54, 0x30, 0x03, 0x94, - 0x00, 0x2b, 0x43, 0xd0, 0x03, 0xab, 0x04, 0xaa, 0x08, 0xa9, 0x38, 0x46, - 0xfe, 0xf7, 0x96, 0xfa, 0x83, 0x1c, 0x04, 0x46, 0x49, 0xd1, 0x2f, 0x21, - 0x03, 0x98, 0x10, 0xf0, 0xef, 0xfd, 0x00, 0x28, 0x3a, 0xd1, 0x6b, 0x69, - 0x13, 0xa9, 0x38, 0x46, 0x1b, 0x6a, 0xeb, 0x64, 0xfe, 0xf7, 0x36, 0xfb, - 0x04, 0x46, 0x00, 0x28, 0x30, 0xd1, 0x11, 0x9b, 0x02, 0x46, 0x13, 0xa9, - 0x1c, 0x93, 0x12, 0x9b, 0x1d, 0x93, 0x03, 0x46, 0x38, 0x46, 0xfe, 0xf7, - 0x66, 0xf8, 0x04, 0x46, 0x20, 0xbb, 0x40, 0xf6, 0x22, 0x03, 0x8d, 0xf8, - 0x16, 0x00, 0xad, 0xf8, 0x14, 0x30, 0x03, 0x9b, 0x18, 0x46, 0x01, 0x93, - 0x0f, 0xf0, 0x9a, 0xff, 0x14, 0x99, 0x15, 0x9a, 0x8d, 0xf8, 0x17, 0x00, - 0x38, 0x46, 0x06, 0x91, 0x07, 0x92, 0x01, 0x9b, 0xcd, 0xe9, 0x11, 0x12, - 0x04, 0xaa, 0x08, 0xa9, 0xfe, 0xf7, 0x3a, 0xfb, 0x04, 0x46, 0x48, 0xb9, - 0x6b, 0x69, 0x1b, 0x6a, 0xeb, 0x64, 0x05, 0xe0, 0x38, 0x46, 0xfd, 0xf7, - 0xb1, 0xff, 0x04, 0x46, 0x00, 0x28, 0xb5, 0xd0, 0x30, 0x46, 0xff, 0xf7, - 0x8d, 0xfc, 0x20, 0x46, 0x1f, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, 0xfb, 0xf7, - 0xfc, 0xbf, 0x00, 0x28, 0x08, 0xbf, 0x6f, 0xf0, 0x10, 0x04, 0xf1, 0xe7, - 0x2d, 0xe9, 0xf0, 0x43, 0x00, 0xf1, 0xa4, 0x05, 0x80, 0x46, 0xb3, 0xb0, - 0x0f, 0x46, 0x28, 0x46, 0x14, 0x46, 0xff, 0xf7, 0x97, 0xfc, 0x98, 0xf8, - 0x54, 0x30, 0x08, 0xf1, 0x14, 0x06, 0xcd, 0xe9, 0x02, 0x74, 0x00, 0x2b, - 0x4d, 0xd0, 0x02, 0x9b, 0x05, 0xaa, 0x11, 0xa9, 0x30, 0x46, 0x04, 0x93, - 0x04, 0xab, 0xfe, 0xf7, 0x29, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x48, 0xd1, - 0x9d, 0xf8, 0x18, 0x30, 0x05, 0xaa, 0x11, 0xa9, 0x63, 0xf0, 0x7f, 0x03, - 0x8d, 0xf8, 0x18, 0x30, 0x03, 0x46, 0x30, 0x46, 0xfe, 0xf7, 0xc7, 0xf9, - 0x04, 0x46, 0x00, 0x28, 0x39, 0xd1, 0x0d, 0xf1, 0x24, 0x09, 0x03, 0xab, - 0x1c, 0xa9, 0x30, 0x46, 0x4a, 0x46, 0xfe, 0xf7, 0x0f, 0xfa, 0x07, 0x46, - 0x00, 0x28, 0x37, 0xd0, 0x82, 0x1c, 0x40, 0xf0, 0x85, 0x80, 0x2f, 0x21, - 0x03, 0x98, 0x10, 0xf0, 0x65, 0xfd, 0x00, 0x28, 0x7e, 0xd1, 0x0d, 0xac, - 0x99, 0xe8, 0x0f, 0x00, 0x84, 0xe8, 0x0f, 0x00, 0x06, 0xaa, 0x0e, 0xab, - 0x07, 0xca, 0x83, 0xe8, 0x07, 0x00, 0x9d, 0xf8, 0x38, 0x30, 0x03, 0xf0, - 0x7f, 0x03, 0x8d, 0xf8, 0x38, 0x30, 0x03, 0x9b, 0x18, 0x46, 0x01, 0x93, - 0x0f, 0xf0, 0x1c, 0xff, 0xbb, 0x1c, 0x8d, 0xf8, 0x3b, 0x00, 0x01, 0x9b, - 0x2c, 0xd1, 0x22, 0x46, 0x1c, 0xa9, 0x30, 0x46, 0xfe, 0xf7, 0xc0, 0xfa, - 0x2b, 0xe0, 0x30, 0x46, 0xfd, 0xf7, 0x3c, 0xff, 0x04, 0x46, 0x00, 0x28, - 0xab, 0xd0, 0x28, 0x46, 0xff, 0xf7, 0x18, 0xfc, 0x20, 0x46, 0x33, 0xb0, - 0xbd, 0xe8, 0xf0, 0x43, 0xfb, 0xf7, 0x87, 0xbf, 0x9d, 0xf8, 0x18, 0x30, - 0x9d, 0xf8, 0x28, 0x20, 0x03, 0xf0, 0x7f, 0x03, 0x9a, 0x42, 0x49, 0xd1, - 0x22, 0x2a, 0xc6, 0xd1, 0x0b, 0xaa, 0x27, 0xa9, 0x30, 0x46, 0xfd, 0xf7, - 0xa5, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xe4, 0xd1, 0x2f, 0x9b, 0x14, 0x2b, - 0xbb, 0xd0, 0x6f, 0xf0, 0x26, 0x04, 0xde, 0xe7, 0x22, 0x46, 0x1c, 0xa9, - 0x30, 0x46, 0xfe, 0xf7, 0x64, 0xf9, 0x04, 0x46, 0x00, 0x28, 0xd6, 0xd1, - 0x01, 0x23, 0x05, 0xaa, 0x11, 0xa9, 0x30, 0x46, 0x88, 0xf8, 0x55, 0x30, - 0x02, 0xab, 0xfe, 0xf7, 0xab, 0xf9, 0x04, 0x46, 0x00, 0x28, 0xca, 0xd1, - 0x88, 0xf8, 0x55, 0x00, 0x81, 0x46, 0x05, 0xaa, 0x11, 0xa9, 0x30, 0x46, - 0xfe, 0xf7, 0xd9, 0xf8, 0x04, 0x46, 0x00, 0x28, 0xbf, 0xd1, 0x02, 0x37, - 0xbd, 0xd0, 0x9d, 0xf8, 0x28, 0x30, 0x22, 0x2b, 0xb9, 0xd1, 0x1c, 0xaa, - 0x28, 0xa9, 0x30, 0x46, 0xfd, 0xf7, 0x1b, 0xfe, 0x04, 0x1e, 0xb2, 0xdb, - 0x30, 0x9b, 0x4a, 0x46, 0x1c, 0xa9, 0x30, 0x46, 0x25, 0x93, 0x31, 0x9b, - 0x26, 0x93, 0x4b, 0x46, 0xfd, 0xf7, 0x73, 0xff, 0x04, 0x46, 0xa6, 0xe7, - 0x3c, 0x46, 0xa4, 0xe7, 0x6f, 0xf0, 0x14, 0x04, 0xa1, 0xe7, 0xf0, 0xb5, - 0x00, 0xf1, 0xa4, 0x05, 0x04, 0x46, 0x9d, 0xb0, 0x0f, 0x46, 0x28, 0x46, - 0x04, 0xf1, 0x14, 0x06, 0xff, 0xf7, 0xd2, 0xfb, 0x94, 0xf8, 0x54, 0x30, - 0x01, 0x97, 0x83, 0xb1, 0x01, 0xab, 0x02, 0xaa, 0x06, 0xa9, 0x30, 0x46, - 0xfe, 0xf7, 0x6a, 0xf9, 0x04, 0x46, 0x78, 0xb1, 0x28, 0x46, 0xff, 0xf7, - 0xa3, 0xfb, 0x20, 0x46, 0x1d, 0xb0, 0xbd, 0xe8, 0xf0, 0x40, 0xfb, 0xf7, - 0x12, 0xbf, 0x30, 0x46, 0xfd, 0xf7, 0xb8, 0xfe, 0x04, 0x46, 0x00, 0x28, - 0xe8, 0xd0, 0xef, 0xe7, 0x9d, 0xf8, 0x0c, 0x30, 0x22, 0x2b, 0x1e, 0xd0, - 0x02, 0xaa, 0x06, 0xa9, 0x30, 0x46, 0xfe, 0xf7, 0x88, 0xf8, 0x04, 0x46, - 0x00, 0x28, 0xe3, 0xd1, 0x9d, 0xf8, 0x0c, 0x30, 0x22, 0x2b, 0xdf, 0xd1, - 0x06, 0xaa, 0x12, 0xa9, 0x30, 0x46, 0xfd, 0xf7, 0xcc, 0xfd, 0x04, 0x1e, - 0xd8, 0xdb, 0x1a, 0x9b, 0x06, 0xa9, 0x30, 0x46, 0x0f, 0x93, 0x1b, 0x9b, - 0x10, 0x93, 0x00, 0x23, 0x1a, 0x46, 0xfd, 0xf7, 0x24, 0xff, 0x04, 0x46, - 0xcc, 0xe7, 0x04, 0xaa, 0x11, 0xa9, 0x30, 0x46, 0xfd, 0xf7, 0x10, 0xfa, - 0x04, 0x46, 0x00, 0x28, 0xc4, 0xd1, 0x19, 0x9b, 0x14, 0x2b, 0xd5, 0xd0, - 0x6f, 0xf0, 0x26, 0x04, 0xbe, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x4f, - 0x00, 0xf1, 0xa4, 0x08, 0x06, 0x46, 0xc3, 0xb0, 0x0d, 0x46, 0x40, 0x46, - 0xff, 0xf7, 0x7a, 0xfb, 0xd6, 0xf8, 0x90, 0x30, 0x63, 0xb1, 0x00, 0x2d, - 0x08, 0xbf, 0x1d, 0x46, 0x33, 0x68, 0x30, 0x46, 0x9b, 0x6a, 0x98, 0x47, - 0x04, 0x46, 0x68, 0xb1, 0x40, 0x46, 0xff, 0xf7, 0x4b, 0xfb, 0x05, 0xe0, - 0x45, 0xb9, 0x6f, 0xf0, 0x12, 0x04, 0x40, 0x46, 0xff, 0xf7, 0x44, 0xfb, - 0x20, 0x46, 0x43, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x2b, 0x68, 0x28, 0x46, - 0x9b, 0x68, 0xd6, 0xe9, 0x25, 0xba, 0xd6, 0xe9, 0x27, 0x97, 0x98, 0x47, - 0x04, 0x46, 0x00, 0x28, 0xe6, 0xd1, 0x24, 0x22, 0x01, 0x46, 0x28, 0xa8, - 0x0f, 0xf0, 0x2c, 0xf8, 0x6a, 0x4b, 0x28, 0x46, 0x23, 0x95, 0x24, 0x93, - 0x69, 0x4b, 0x25, 0x93, 0x69, 0x4b, 0x26, 0x93, 0x69, 0x4b, 0x27, 0x93, - 0x2b, 0x68, 0x5b, 0x6a, 0x98, 0x47, 0x2b, 0x68, 0x58, 0x45, 0x2c, 0xbf, - 0x28, 0x90, 0xcd, 0xf8, 0xa0, 0xb0, 0x28, 0x46, 0x9b, 0x6a, 0x98, 0x47, - 0x2b, 0x68, 0x50, 0x45, 0x2c, 0xbf, 0x29, 0x90, 0xcd, 0xf8, 0xa4, 0xa0, - 0x28, 0x46, 0xdb, 0x6a, 0x98, 0x47, 0x2b, 0x68, 0x48, 0x45, 0x2c, 0xbf, - 0x2a, 0x90, 0xcd, 0xf8, 0xa8, 0x90, 0x28, 0x46, 0x9b, 0x6b, 0x98, 0x47, - 0x23, 0x46, 0x2a, 0x9a, 0x10, 0xf0, 0xdc, 0xfe, 0x2b, 0x90, 0x1f, 0x30, - 0x23, 0xa9, 0x20, 0xf0, 0x1f, 0x00, 0xb8, 0x42, 0x94, 0xbf, 0x2c, 0x90, - 0x2c, 0x97, 0x31, 0xa8, 0xfc, 0xf7, 0x16, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0x86, 0x80, 0x31, 0x9b, 0x01, 0x46, 0x40, 0x98, 0x5a, 0x6a, - 0xd2, 0x08, 0x0e, 0xf0, 0xe9, 0xff, 0x31, 0x9a, 0x0d, 0xa9, 0x31, 0xa8, - 0x3c, 0x94, 0xd2, 0xe9, 0x08, 0x32, 0xcd, 0xe9, 0x3e, 0x43, 0x9a, 0x42, - 0x94, 0xbf, 0x3d, 0x92, 0x3d, 0x93, 0xfe, 0xf7, 0x51, 0xf9, 0x04, 0x46, - 0x00, 0x28, 0x69, 0xd1, 0x18, 0xa9, 0x31, 0xa8, 0xfe, 0xf7, 0x4a, 0xf9, - 0x04, 0x46, 0x00, 0x28, 0x62, 0xd1, 0x03, 0x46, 0x02, 0x46, 0x18, 0xa9, - 0x31, 0xa8, 0xfd, 0xf7, 0x7e, 0xfe, 0x04, 0x46, 0x00, 0x28, 0x59, 0xd1, - 0x41, 0xf2, 0x2e, 0x43, 0x8d, 0xf8, 0x16, 0x00, 0x1a, 0x9f, 0x4f, 0xf0, - 0x10, 0x09, 0xad, 0xf8, 0x14, 0x30, 0x08, 0x23, 0xdd, 0xf8, 0x64, 0xc0, - 0x8d, 0xf8, 0x17, 0x30, 0x31, 0x9b, 0x33, 0x97, 0xda, 0x69, 0x1b, 0x6a, - 0x08, 0x92, 0x09, 0x93, 0x4f, 0xf0, 0x01, 0x13, 0x31, 0x4a, 0x0a, 0x93, - 0x0b, 0xab, 0x10, 0x68, 0x51, 0x68, 0x6a, 0x46, 0xcd, 0xf8, 0xc8, 0xc0, - 0xcd, 0xf8, 0x10, 0x90, 0xcd, 0xf8, 0x00, 0x90, 0x03, 0xc3, 0x34, 0x23, - 0x0d, 0xa9, 0x31, 0xa8, 0x15, 0x93, 0x20, 0x23, 0xcd, 0xe9, 0x06, 0xc7, - 0xcd, 0xe9, 0x16, 0xc7, 0x05, 0xaf, 0x01, 0x93, 0xcd, 0xe9, 0x02, 0x73, - 0x01, 0x23, 0xfd, 0xf7, 0x48, 0xfe, 0x4b, 0x46, 0x20, 0xb1, 0x10, 0xf1, - 0x34, 0x0f, 0x02, 0xd0, 0x04, 0x46, 0x1f, 0xe0, 0x01, 0x24, 0x00, 0x93, - 0x20, 0x23, 0x6a, 0x46, 0x0d, 0xa9, 0x03, 0x93, 0x31, 0xa8, 0xcd, 0xe9, - 0x01, 0x37, 0x01, 0x23, 0xfd, 0xf7, 0x35, 0xfe, 0x20, 0xb1, 0x10, 0xf1, - 0x34, 0x0f, 0xed, 0xd1, 0x00, 0x2c, 0xeb, 0xd0, 0x00, 0x22, 0x01, 0x23, - 0x0d, 0xa9, 0x31, 0xa8, 0xcd, 0xe9, 0x00, 0x23, 0x6a, 0x46, 0xfd, 0xf7, - 0x19, 0xf9, 0x04, 0x46, 0x10, 0xb9, 0x31, 0x9b, 0x1b, 0x6a, 0x3f, 0x93, - 0x31, 0xa8, 0xfc, 0xf7, 0x2d, 0xfb, 0x6c, 0xb1, 0x20, 0x46, 0xfb, 0xf7, - 0xe0, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x19, 0xaf, 0x33, 0x68, - 0x29, 0x46, 0x30, 0x46, 0x5b, 0x6a, 0x98, 0x47, 0x04, 0x46, 0x11, 0xe7, - 0x2b, 0x68, 0x28, 0x46, 0xdb, 0x68, 0x98, 0x47, 0xef, 0xe7, 0x00, 0xbf, - 0x73, 0x80, 0x00, 0x08, 0x97, 0x80, 0x00, 0x08, 0xbb, 0x80, 0x00, 0x08, - 0xd7, 0x80, 0x00, 0x08, 0x70, 0xdf, 0x01, 0x08, 0x70, 0xb5, 0x00, 0xf1, - 0xa4, 0x06, 0x05, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x69, 0xfa, 0xd5, 0xf8, - 0x90, 0x40, 0x64, 0xb1, 0x05, 0xf1, 0x14, 0x00, 0xfc, 0xf7, 0x00, 0xfb, - 0xd5, 0xf8, 0x90, 0x00, 0x03, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x00, 0x23, - 0x04, 0x46, 0xc5, 0xf8, 0x90, 0x30, 0x30, 0x46, 0xff, 0xf7, 0x36, 0xfa, - 0x20, 0x46, 0x70, 0xbd, 0x0a, 0x4b, 0x10, 0xb5, 0x03, 0x60, 0x80, 0x33, - 0x04, 0x46, 0x43, 0x60, 0xff, 0xf7, 0xdc, 0xff, 0xd4, 0xf8, 0xa4, 0x00, - 0x0b, 0xf0, 0x8a, 0xfd, 0x05, 0x4b, 0x20, 0x46, 0x23, 0x60, 0x2c, 0x33, - 0x40, 0xf8, 0x04, 0x3f, 0x03, 0xf0, 0xc6, 0xff, 0x20, 0x46, 0x10, 0xbd, - 0x9c, 0xdd, 0x01, 0x08, 0x34, 0xdd, 0x01, 0x08, 0xa0, 0xf1, 0x04, 0x00, - 0xff, 0xf7, 0xe2, 0xbf, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xde, 0xff, - 0x20, 0x46, 0x0e, 0xf0, 0xa3, 0xfe, 0x20, 0x46, 0x10, 0xbd, 0xa0, 0xf1, - 0x04, 0x00, 0xff, 0xf7, 0xf3, 0xbf, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x43, - 0x00, 0xf1, 0xa4, 0x07, 0x0d, 0x46, 0x04, 0x46, 0x99, 0xb0, 0x38, 0x46, - 0xff, 0xf7, 0x1e, 0xfa, 0xc4, 0xf8, 0x90, 0x50, 0x2b, 0x68, 0x28, 0x46, - 0x9b, 0x68, 0x98, 0x47, 0x06, 0x46, 0x48, 0xb1, 0x00, 0x23, 0xc4, 0xf8, - 0x90, 0x30, 0x38, 0x46, 0xff, 0xf7, 0xf0, 0xf9, 0x30, 0x46, 0x19, 0xb0, - 0xbd, 0xe8, 0xf0, 0x83, 0x24, 0x22, 0x01, 0x46, 0x04, 0xf1, 0x6c, 0x00, - 0x04, 0xf1, 0x58, 0x09, 0x0e, 0xf0, 0xe0, 0xfe, 0x40, 0x4b, 0xa5, 0x65, - 0x28, 0x46, 0xe3, 0x65, 0x04, 0xf1, 0x14, 0x08, 0x3e, 0x4b, 0x23, 0x66, - 0x3e, 0x4b, 0x63, 0x66, 0x3e, 0x4b, 0xa3, 0x66, 0x2b, 0x68, 0x5b, 0x6a, - 0x98, 0x47, 0xd4, 0xf8, 0x94, 0x30, 0x83, 0x42, 0x2c, 0xbf, 0xe3, 0x66, - 0xe0, 0x66, 0x28, 0x46, 0x2b, 0x68, 0x9b, 0x6a, 0x98, 0x47, 0xd4, 0xf8, - 0x98, 0x30, 0x83, 0x42, 0x2c, 0xbf, 0x23, 0x67, 0x20, 0x67, 0x28, 0x46, - 0x2b, 0x68, 0xdb, 0x6a, 0x98, 0x47, 0xd4, 0xf8, 0x9c, 0x30, 0x83, 0x42, - 0x2c, 0xbf, 0x63, 0x67, 0x60, 0x67, 0x28, 0x46, 0x2b, 0x68, 0x9b, 0x6b, - 0x98, 0x47, 0x62, 0x6f, 0x33, 0x46, 0x10, 0xf0, 0x8b, 0xfd, 0xa0, 0x67, - 0x1f, 0x30, 0xd4, 0xf8, 0xa0, 0x30, 0x49, 0x46, 0x20, 0xf0, 0x1f, 0x00, - 0x83, 0x42, 0x94, 0xbf, 0xe3, 0x67, 0xe0, 0x67, 0x40, 0x46, 0xfc, 0xf7, - 0xc3, 0xfa, 0x05, 0x46, 0x00, 0x28, 0x33, 0xd1, 0x63, 0x69, 0x02, 0xaa, - 0x0d, 0xa9, 0x40, 0x46, 0x1b, 0x6a, 0xa6, 0x64, 0xe3, 0x64, 0x01, 0x23, - 0x02, 0x96, 0x03, 0x93, 0xc4, 0xe9, 0x10, 0x66, 0xfd, 0xf7, 0x36, 0xf8, - 0x05, 0x46, 0x00, 0xbb, 0x20, 0x23, 0x10, 0x22, 0x0e, 0x99, 0x40, 0x46, - 0x00, 0x93, 0x05, 0xab, 0xfd, 0xf7, 0x1f, 0xf8, 0x05, 0x46, 0xb0, 0xb9, - 0x06, 0x9b, 0x08, 0x22, 0x15, 0x49, 0x0b, 0xa8, 0xa3, 0x61, 0x07, 0x9b, - 0xe3, 0x61, 0x10, 0xf0, 0xd5, 0xf9, 0x06, 0x46, 0x48, 0xb9, 0x0a, 0x9b, - 0x1a, 0x0c, 0x01, 0x2a, 0x02, 0xd1, 0x9b, 0xb2, 0x01, 0x2b, 0x82, 0xd9, - 0x6f, 0xf0, 0x15, 0x05, 0x01, 0xe0, 0x6f, 0xf0, 0x33, 0x05, 0x40, 0x46, - 0xfc, 0xf7, 0x2c, 0xfa, 0x00, 0x23, 0x38, 0x46, 0xc4, 0xf8, 0x90, 0x30, - 0xff, 0xf7, 0x68, 0xf9, 0x28, 0x46, 0x19, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, - 0xfb, 0xf7, 0xd7, 0xbc, 0x73, 0x80, 0x00, 0x08, 0x97, 0x80, 0x00, 0x08, - 0xbb, 0x80, 0x00, 0x08, 0xd7, 0x80, 0x00, 0x08, 0x70, 0xdf, 0x01, 0x08, - 0x08, 0xb5, 0x03, 0x48, 0x03, 0xf0, 0x12, 0xfe, 0xbd, 0xe8, 0x08, 0x40, - 0xff, 0xf7, 0x70, 0xb9, 0x2c, 0x74, 0x00, 0x24, 0x13, 0xb5, 0x15, 0x4c, - 0x20, 0x46, 0x03, 0xf0, 0x07, 0xfe, 0xff, 0xf7, 0x67, 0xf9, 0x20, 0x46, - 0x03, 0xf0, 0x02, 0xfe, 0xff, 0xf7, 0x42, 0xf9, 0x4f, 0xf0, 0xff, 0x32, - 0x4f, 0xf0, 0xff, 0x33, 0x68, 0x46, 0xcd, 0xe9, 0x00, 0x23, 0x0e, 0xf0, - 0x53, 0xfc, 0xd0, 0xe9, 0x02, 0x32, 0xdb, 0x02, 0x43, 0xea, 0x02, 0x43, - 0x42, 0x68, 0x43, 0xea, 0x42, 0x13, 0x02, 0x68, 0x02, 0xeb, 0xd2, 0x72, - 0x43, 0xea, 0x62, 0x03, 0x42, 0x69, 0x00, 0x69, 0x50, 0x3a, 0x01, 0x30, - 0x43, 0xea, 0x42, 0x63, 0x43, 0xea, 0x40, 0x50, 0x02, 0xb0, 0x10, 0xbd, - 0xdc, 0x73, 0x00, 0x24, 0x37, 0xb5, 0x01, 0xa9, 0x04, 0x46, 0xfb, 0xf7, - 0xa2, 0xfd, 0x00, 0x28, 0x32, 0xd1, 0x23, 0x7c, 0x13, 0xf0, 0x40, 0x00, - 0x2e, 0xd0, 0xff, 0xf7, 0xc5, 0xff, 0x21, 0x6a, 0x05, 0x46, 0x01, 0x98, - 0xfe, 0xf7, 0x24, 0xf8, 0x30, 0xbb, 0x62, 0x6a, 0xd3, 0x7a, 0x43, 0xf0, - 0x20, 0x03, 0xd3, 0x72, 0xa3, 0x68, 0x21, 0x68, 0x18, 0x12, 0x93, 0x76, - 0xd0, 0x76, 0x02, 0xf1, 0x1c, 0x00, 0x09, 0x78, 0x03, 0x29, 0x01, 0xbf, - 0x1b, 0x0c, 0x13, 0x75, 0x1b, 0x12, 0x53, 0x75, 0xe1, 0x68, 0xfb, 0xf7, - 0xd1, 0xfd, 0x29, 0x46, 0x02, 0xf1, 0x16, 0x00, 0xfb, 0xf7, 0xcc, 0xfd, - 0x00, 0x23, 0x01, 0x98, 0x93, 0x74, 0xd3, 0x74, 0x01, 0x23, 0xc3, 0x70, - 0xfc, 0xf7, 0xe4, 0xfa, 0x23, 0x7c, 0x23, 0xf0, 0x40, 0x03, 0x23, 0x74, - 0x03, 0xb0, 0x30, 0xbd, 0x38, 0xb5, 0x03, 0x68, 0x0d, 0x46, 0x04, 0x46, - 0x9b, 0x6f, 0x98, 0x47, 0x28, 0x46, 0xff, 0xf7, 0xbb, 0xff, 0x23, 0x68, - 0x05, 0x46, 0x20, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x28, 0x46, 0xbd, 0xe8, - 0x38, 0x40, 0xfb, 0xf7, 0x41, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, 0x1e, 0x46, - 0x03, 0x68, 0x85, 0xb0, 0x0d, 0x46, 0x9b, 0x6f, 0x82, 0x46, 0x91, 0x46, - 0x98, 0x47, 0x03, 0xa9, 0x28, 0x46, 0xfb, 0xf7, 0x4a, 0xfd, 0x04, 0x46, - 0x07, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xd6, 0x80, 0x6c, 0x7c, 0x5c, 0xbb, - 0x2b, 0x7c, 0x9a, 0x07, 0x40, 0xf1, 0xd2, 0x80, 0x6b, 0x69, 0x00, 0x27, - 0xde, 0x42, 0x00, 0x97, 0x28, 0xbf, 0xde, 0x43, 0x00, 0x2e, 0x00, 0xf0, - 0xbb, 0x80, 0x03, 0x98, 0x6a, 0x69, 0x83, 0x89, 0xb2, 0xfb, 0xf3, 0xf1, - 0x03, 0xfb, 0x11, 0x23, 0x00, 0x2b, 0x40, 0xf0, 0x8d, 0x80, 0xb0, 0xf8, - 0x0a, 0x80, 0x08, 0xf1, 0xff, 0x38, 0x18, 0xea, 0x01, 0x08, 0x25, 0xd1, - 0xd2, 0xb9, 0xa8, 0x68, 0x30, 0xb9, 0x01, 0x46, 0x28, 0x46, 0xfe, 0xf7, - 0xb8, 0xfc, 0x00, 0x28, 0x00, 0xf0, 0xa0, 0x80, 0x01, 0x28, 0x11, 0xd1, - 0x02, 0x24, 0x6c, 0x74, 0xda, 0xf8, 0x00, 0x30, 0x50, 0x46, 0xdb, 0x6f, - 0x98, 0x47, 0x00, 0x2c, 0x00, 0xf0, 0xa5, 0x80, 0x20, 0x46, 0x05, 0xb0, - 0xbd, 0xe8, 0xf0, 0x4f, 0xfb, 0xf7, 0xf2, 0xbc, 0xa9, 0x69, 0xe5, 0xe7, - 0x43, 0x1c, 0x01, 0xd1, 0x01, 0x24, 0xea, 0xe7, 0xab, 0x68, 0xa8, 0x61, - 0x03, 0xb9, 0xa8, 0x60, 0x03, 0x98, 0xeb, 0x69, 0x02, 0x6b, 0x9a, 0x42, - 0x47, 0xd0, 0xdd, 0xf8, 0x0c, 0xb0, 0xa9, 0x69, 0x58, 0x46, 0xfd, 0xf7, - 0x78, 0xff, 0x00, 0x28, 0xd8, 0xd0, 0xbb, 0xf8, 0x0c, 0x30, 0x08, 0xeb, - 0x00, 0x02, 0x9e, 0x42, 0x3e, 0xd3, 0xbb, 0xf8, 0x0a, 0x10, 0xb6, 0xfb, - 0xf3, 0xf3, 0x08, 0xeb, 0x03, 0x00, 0x88, 0x42, 0x9b, 0xf8, 0x01, 0x00, - 0x88, 0xbf, 0xa1, 0xeb, 0x08, 0x03, 0x49, 0x46, 0xcd, 0xe9, 0x00, 0x23, - 0xfb, 0xf7, 0x7c, 0xfc, 0x80, 0x46, 0xdd, 0xe9, 0x00, 0x23, 0x00, 0x28, - 0xd0, 0xd1, 0x03, 0x98, 0x01, 0x6b, 0x89, 0x1a, 0x8b, 0x42, 0x0a, 0xd9, - 0x82, 0x89, 0x40, 0x6b, 0x02, 0xfb, 0x01, 0x91, 0x00, 0x93, 0x0e, 0xf0, - 0x31, 0xfd, 0x03, 0x9a, 0x00, 0x9b, 0x82, 0xf8, 0x03, 0x80, 0x03, 0x9a, - 0xb2, 0xf8, 0x0c, 0x80, 0x03, 0xfb, 0x08, 0xf8, 0x01, 0x23, 0x00, 0x93, - 0x6b, 0x69, 0xa6, 0xeb, 0x08, 0x06, 0xea, 0x68, 0x47, 0x44, 0x43, 0x44, - 0xc1, 0x44, 0x6b, 0x61, 0x9a, 0x42, 0x2c, 0xbf, 0xea, 0x60, 0xeb, 0x60, - 0x78, 0xe7, 0xfb, 0xf7, 0xe1, 0xfc, 0x00, 0x28, 0xb3, 0xd0, 0xa7, 0xe7, - 0x69, 0x69, 0xeb, 0x68, 0x99, 0x42, 0x08, 0xd3, 0x58, 0x46, 0x01, 0x92, - 0xfb, 0xf7, 0xd6, 0xfc, 0x01, 0x9a, 0x00, 0x28, 0x9c, 0xd1, 0x03, 0x9b, - 0x1a, 0x63, 0xea, 0x61, 0x03, 0x98, 0x6b, 0x69, 0xb0, 0xf8, 0x0c, 0x80, - 0xe9, 0x69, 0xb3, 0xfb, 0xf8, 0xf2, 0x08, 0xfb, 0x12, 0x32, 0xa8, 0xeb, - 0x02, 0x08, 0xb0, 0x45, 0x28, 0xbf, 0xb0, 0x46, 0xfd, 0xf7, 0x1e, 0xff, - 0x00, 0x28, 0x87, 0xd1, 0x03, 0x9a, 0x69, 0x69, 0x90, 0x89, 0xb1, 0xfb, - 0xf0, 0xf3, 0x00, 0xfb, 0x13, 0x13, 0x50, 0x6b, 0x49, 0x46, 0x42, 0x46, - 0x18, 0x44, 0x0e, 0xf0, 0xe7, 0xfc, 0x03, 0x9b, 0x4f, 0xf0, 0x01, 0x02, - 0xda, 0x70, 0xbb, 0xe7, 0x2b, 0x7c, 0x43, 0xf0, 0x40, 0x03, 0x2b, 0x74, - 0x00, 0x9b, 0x00, 0x2b, 0x3f, 0xf4, 0x5c, 0xaf, 0x28, 0x46, 0xff, 0xf7, - 0xc9, 0xfe, 0x57, 0xe7, 0x00, 0x27, 0x55, 0xe7, 0x27, 0x46, 0x07, 0x24, - 0x52, 0xe7, 0x38, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x03, 0x68, - 0x73, 0xb5, 0x0d, 0x46, 0x9b, 0x6f, 0x06, 0x46, 0x98, 0x47, 0x28, 0x46, - 0xff, 0xf7, 0xb6, 0xfe, 0x04, 0x46, 0x30, 0xb9, 0x01, 0xa9, 0x28, 0x46, - 0xfb, 0xf7, 0x57, 0xfc, 0x04, 0x46, 0x00, 0xb9, 0x28, 0x60, 0x33, 0x68, - 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x15, 0xb1, 0x28, 0x46, 0x0e, 0xf0, - 0x59, 0xfc, 0x20, 0x46, 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfb, 0xf7, - 0x2f, 0xbc, 0x00, 0x00, 0xf0, 0xb5, 0x0e, 0x46, 0x85, 0xb0, 0x90, 0xf8, - 0x20, 0x10, 0x05, 0x46, 0x14, 0x46, 0xdd, 0xe9, 0x0a, 0x7c, 0x19, 0xb9, - 0x6f, 0xf4, 0x7a, 0x60, 0x05, 0xb0, 0xf0, 0xbd, 0x01, 0x68, 0xcd, 0xe9, - 0x00, 0x7c, 0xc9, 0x6b, 0x88, 0x47, 0x00, 0x28, 0xf4, 0xd0, 0x29, 0x69, - 0x0d, 0x48, 0x61, 0x18, 0x03, 0x91, 0x03, 0xf0, 0x61, 0xfc, 0xfe, 0xf7, - 0xc1, 0xff, 0x02, 0xf0, 0x89, 0xfc, 0x02, 0xf0, 0x63, 0xfc, 0x3a, 0x46, - 0x03, 0x99, 0x30, 0x46, 0x0e, 0xf0, 0x86, 0xfc, 0x02, 0xf0, 0x4a, 0xfc, - 0x02, 0xf0, 0x6c, 0xfc, 0x03, 0x48, 0x03, 0xf0, 0x4f, 0xfc, 0xfe, 0xf7, - 0x8f, 0xff, 0x00, 0x20, 0xda, 0xe7, 0x00, 0xbf, 0x04, 0x74, 0x00, 0x24, - 0x10, 0xb5, 0x04, 0x46, 0x04, 0x30, 0x0c, 0xf0, 0x09, 0xf8, 0x04, 0xf1, - 0x54, 0x00, 0xfe, 0xf7, 0xa1, 0xff, 0x00, 0x23, 0x20, 0x6c, 0x63, 0x61, - 0x01, 0x23, 0x84, 0xf8, 0x3d, 0x30, 0xbd, 0xe8, 0x10, 0x40, 0x0b, 0xf0, - 0x43, 0xba, 0x00, 0x00, 0x73, 0xb5, 0x05, 0x46, 0x0c, 0x20, 0x0e, 0x46, - 0x01, 0x92, 0x02, 0xf0, 0x99, 0xfb, 0x00, 0x23, 0x29, 0x46, 0x01, 0x9a, - 0x04, 0x46, 0xc0, 0xe9, 0x01, 0x33, 0x07, 0x4b, 0x03, 0x60, 0xfb, 0xf7, - 0x77, 0xfa, 0x05, 0x46, 0x30, 0xb1, 0x23, 0x68, 0x20, 0x46, 0x5b, 0x68, - 0x98, 0x47, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, 0x34, 0x60, 0xfa, 0xe7, - 0x34, 0xe1, 0x01, 0x08, 0x73, 0xb5, 0x05, 0x46, 0x0c, 0x20, 0x0e, 0x46, - 0xcd, 0xe9, 0x00, 0x32, 0x02, 0xf0, 0x7a, 0xfb, 0x00, 0x21, 0x04, 0x46, - 0xc0, 0xe9, 0x01, 0x11, 0x08, 0x49, 0xdd, 0xe9, 0x00, 0x32, 0x01, 0x60, - 0x29, 0x46, 0xfb, 0xf7, 0xfa, 0xf9, 0x05, 0x46, 0x30, 0xb1, 0x23, 0x68, - 0x20, 0x46, 0x5b, 0x68, 0x98, 0x47, 0x28, 0x46, 0x02, 0xb0, 0x70, 0xbd, - 0x34, 0x60, 0xfa, 0xe7, 0x60, 0xe1, 0x01, 0x08, 0x03, 0x68, 0x2d, 0xe9, - 0xf0, 0x41, 0xdb, 0x6e, 0x04, 0x46, 0x0d, 0x46, 0x98, 0x47, 0x80, 0x46, - 0x40, 0xf2, 0x01, 0x10, 0x02, 0xf0, 0x56, 0xfb, 0x23, 0x68, 0x00, 0x27, - 0x06, 0x46, 0x1b, 0x6f, 0x29, 0x46, 0x20, 0x46, 0x98, 0x47, 0x23, 0x68, - 0x32, 0x46, 0x29, 0x46, 0x20, 0x46, 0x5b, 0x6e, 0x98, 0x47, 0x00, 0x28, - 0x01, 0xdd, 0x01, 0x37, 0xf5, 0xe7, 0x23, 0x68, 0x42, 0x46, 0x29, 0x46, - 0x20, 0x46, 0x9b, 0x6e, 0x98, 0x47, 0x30, 0x46, 0x0e, 0xf0, 0xa6, 0xfb, - 0x38, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x2d, 0xe9, 0xf0, 0x43, 0x06, 0x46, - 0x87, 0xb0, 0x2c, 0x20, 0x15, 0x46, 0x06, 0xf1, 0xa4, 0x08, 0x0f, 0x46, - 0x02, 0xf0, 0x2e, 0xfb, 0x04, 0x46, 0x40, 0x46, 0x06, 0xf1, 0x14, 0x09, - 0xfe, 0xf7, 0x1e, 0xff, 0xb3, 0x69, 0x02, 0xaa, 0x21, 0x46, 0x63, 0x60, - 0x48, 0x46, 0xf3, 0x69, 0x01, 0x95, 0xa3, 0x60, 0x01, 0xab, 0xfd, 0xf7, - 0xb5, 0xfc, 0x05, 0x46, 0xa8, 0xb9, 0x9d, 0xf8, 0x0c, 0x30, 0x22, 0x2b, - 0x1c, 0xd1, 0x04, 0xaa, 0x21, 0x46, 0x48, 0x46, 0xfc, 0xf7, 0x8a, 0xfd, - 0x05, 0x46, 0x50, 0xb9, 0x63, 0x68, 0x23, 0x61, 0xa3, 0x68, 0x63, 0x61, - 0x0e, 0x23, 0xa3, 0x61, 0x10, 0x23, 0xe3, 0x60, 0x73, 0x6a, 0x74, 0x62, - 0x23, 0x60, 0x40, 0x46, 0xfe, 0xf7, 0xd8, 0xfe, 0x4d, 0xb9, 0x3c, 0x60, - 0x28, 0x46, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, 0xfb, 0xf7, 0x45, 0xba, - 0x6f, 0xf0, 0x13, 0x05, 0xf1, 0xe7, 0x20, 0x46, 0x0e, 0xf0, 0x5e, 0xfb, - 0xf2, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x07, 0x46, 0x9b, 0x46, 0x93, 0xb0, - 0x38, 0x20, 0x07, 0xf1, 0xa4, 0x09, 0x88, 0x46, 0x16, 0x46, 0x02, 0xf0, - 0xe7, 0xfa, 0x04, 0x46, 0x48, 0x46, 0xfe, 0xf7, 0xd9, 0xfe, 0x1b, 0xf0, - 0x03, 0x0c, 0x07, 0xf1, 0x14, 0x0a, 0x00, 0xf0, 0xc5, 0x80, 0xbc, 0xf1, - 0x01, 0x0f, 0x4f, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0xc1, 0x80, 0xbc, 0xf1, - 0x02, 0x0f, 0x84, 0x46, 0x01, 0xd0, 0x00, 0x21, 0x00, 0xe0, 0x03, 0x21, - 0x4f, 0xea, 0x6b, 0x02, 0x02, 0x96, 0x4f, 0xea, 0xab, 0x05, 0x02, 0xf4, - 0x80, 0x72, 0x05, 0xf4, 0x00, 0x75, 0x2a, 0x43, 0x0b, 0xf4, 0x80, 0x65, - 0x2a, 0x43, 0x4f, 0xea, 0x0b, 0x25, 0x05, 0xf4, 0x00, 0x65, 0x15, 0x43, - 0x45, 0xea, 0x0c, 0x05, 0x05, 0x43, 0x0d, 0x43, 0x05, 0xf0, 0x03, 0x03, - 0x01, 0x2b, 0x11, 0xd1, 0x02, 0xab, 0x03, 0xaa, 0x07, 0xa9, 0x50, 0x46, - 0xfd, 0xf7, 0x48, 0xfc, 0x06, 0x46, 0x00, 0xbb, 0x9d, 0xf8, 0x10, 0x30, - 0x22, 0x2b, 0x00, 0xf0, 0x8a, 0x80, 0xa9, 0x05, 0x3f, 0xd5, 0x6f, 0xf0, - 0x10, 0x06, 0x09, 0xe0, 0x97, 0xf8, 0x54, 0x30, 0x00, 0x2b, 0xe9, 0xd1, - 0x50, 0x46, 0xfd, 0xf7, 0x91, 0xf9, 0x06, 0x46, 0x00, 0x28, 0xe3, 0xd0, - 0x48, 0x46, 0xfe, 0xf7, 0x6d, 0xfe, 0x00, 0x2e, 0x78, 0xd1, 0xc8, 0xf8, - 0x00, 0x40, 0x30, 0x46, 0x13, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, 0xfb, 0xf7, - 0xd8, 0xb9, 0x82, 0x1c, 0xf0, 0xd1, 0x02, 0x9b, 0x2f, 0x21, 0x18, 0x46, - 0x01, 0x93, 0x0f, 0xf0, 0x7d, 0xff, 0x83, 0x46, 0x00, 0x28, 0xe7, 0xd1, - 0xeb, 0x05, 0xe5, 0xd5, 0x01, 0x9b, 0x40, 0xf6, 0x11, 0x02, 0x8d, 0xf8, - 0x12, 0x00, 0x18, 0x46, 0xad, 0xf8, 0x10, 0x20, 0x0f, 0xf0, 0x3c, 0xf9, - 0x4f, 0xf0, 0xff, 0x32, 0x8d, 0xf8, 0x13, 0x00, 0x07, 0xa9, 0x01, 0x9b, - 0x50, 0x46, 0xcd, 0xe9, 0x05, 0x2b, 0x03, 0xaa, 0xfd, 0xf7, 0xde, 0xfc, - 0x06, 0x46, 0x00, 0x28, 0xcc, 0xd1, 0x08, 0x9b, 0x00, 0x22, 0x68, 0x05, - 0x63, 0x60, 0x09, 0x9b, 0xa2, 0x61, 0xa3, 0x60, 0x03, 0x9b, 0xe3, 0x60, - 0x05, 0x9b, 0x23, 0x61, 0x06, 0x9b, 0xc4, 0xe9, 0x07, 0x52, 0x63, 0x61, - 0x0a, 0xd4, 0x4f, 0xf0, 0xff, 0x33, 0x7d, 0x69, 0xe3, 0x62, 0x6b, 0x6b, - 0xf3, 0xb1, 0x3a, 0x6a, 0x62, 0xb1, 0x6f, 0xf0, 0x0b, 0x06, 0xb1, 0xe7, - 0x13, 0xb1, 0x45, 0xf4, 0x80, 0x35, 0xe5, 0x61, 0x4f, 0xf0, 0xff, 0x32, - 0x00, 0x23, 0xc4, 0xe9, 0x04, 0x23, 0xea, 0xe7, 0x63, 0x63, 0xe3, 0x69, - 0x03, 0xf0, 0x03, 0x03, 0x01, 0x2b, 0x04, 0xd0, 0x04, 0xf1, 0x2c, 0x01, - 0x28, 0x46, 0xfb, 0xf7, 0x20, 0xff, 0x3b, 0x6a, 0x00, 0x26, 0x3c, 0x62, - 0x23, 0x60, 0x97, 0xe7, 0xe3, 0x69, 0x03, 0xf0, 0x03, 0x03, 0x01, 0x2b, - 0x06, 0xd1, 0x68, 0x69, 0x0e, 0xf0, 0x8c, 0xfa, 0x60, 0x63, 0x00, 0x28, - 0xef, 0xd1, 0xd6, 0xe7, 0xa8, 0x69, 0x0e, 0xf0, 0x85, 0xfa, 0x60, 0x63, - 0x00, 0x28, 0xe3, 0xd1, 0xcf, 0xe7, 0x6f, 0xf0, 0x14, 0x06, 0x81, 0xe7, - 0x20, 0x46, 0x0e, 0xf0, 0x83, 0xfa, 0x84, 0xe7, 0x01, 0x20, 0x42, 0xe7, - 0x4f, 0xf0, 0x02, 0x0c, 0x3f, 0xe7, 0x00, 0x00, 0xf0, 0xb5, 0x0c, 0x46, - 0x8b, 0xb0, 0x06, 0x46, 0x24, 0xb9, 0x32, 0x60, 0x04, 0x61, 0x30, 0x46, - 0x0b, 0xb0, 0xf0, 0xbd, 0x10, 0x46, 0x01, 0x92, 0x0f, 0xf0, 0xca, 0xf8, - 0x04, 0x30, 0x02, 0xf0, 0x01, 0xfa, 0x3a, 0x23, 0x30, 0x34, 0x05, 0x46, - 0x43, 0x70, 0x2f, 0x23, 0x04, 0x70, 0x03, 0x30, 0x00, 0xf8, 0x01, 0x3c, - 0x37, 0x46, 0x01, 0x99, 0x06, 0xac, 0x0f, 0xf0, 0xb1, 0xf8, 0x08, 0x4b, - 0x00, 0x22, 0x47, 0xf8, 0x04, 0x5b, 0x05, 0x93, 0x06, 0x4b, 0x02, 0x93, - 0x02, 0xab, 0xcd, 0xe9, 0x03, 0x22, 0x0f, 0xcb, 0x84, 0xe8, 0x0f, 0x00, - 0x87, 0xe8, 0x0f, 0x00, 0xd7, 0xe7, 0x00, 0xbf, 0xb3, 0x81, 0x00, 0x08, - 0xd5, 0x8b, 0x00, 0x08, 0xf0, 0xb5, 0x06, 0x46, 0x8b, 0xb0, 0x2c, 0x20, - 0x0f, 0x46, 0x01, 0x92, 0x02, 0xf0, 0xd6, 0xf9, 0x01, 0x9a, 0x05, 0x46, - 0x31, 0x6d, 0x05, 0xa8, 0xff, 0xf7, 0xbe, 0xff, 0x33, 0x68, 0x30, 0x46, - 0x9b, 0x6f, 0x98, 0x47, 0x05, 0x9b, 0x03, 0x93, 0x00, 0x2d, 0x3d, 0xd0, - 0x00, 0x22, 0x04, 0xa9, 0x03, 0xa8, 0xfd, 0xf7, 0x57, 0xfe, 0x04, 0x46, - 0x80, 0xb9, 0x04, 0x9b, 0x28, 0x46, 0x03, 0x99, 0x2b, 0x60, 0xfe, 0xf7, - 0xcd, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x31, 0xd1, 0x95, 0xf9, 0x2b, 0x30, - 0x00, 0x2b, 0x0c, 0xdb, 0xab, 0x79, 0xdb, 0x06, 0x03, 0xd4, 0x05, 0x24, - 0x00, 0x23, 0x2b, 0x60, 0x10, 0xe0, 0x04, 0x9b, 0xe9, 0x69, 0x18, 0x78, - 0xfb, 0xf7, 0xf6, 0xf9, 0xa8, 0x60, 0x04, 0x9b, 0x28, 0x46, 0xdb, 0x88, - 0xab, 0x80, 0xf6, 0xf7, 0x37, 0xfa, 0x04, 0x28, 0x04, 0x46, 0xec, 0xd0, - 0x00, 0x28, 0xeb, 0xd1, 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6f, 0x98, 0x47, - 0x74, 0xb1, 0x28, 0x46, 0x0e, 0xf0, 0xfe, 0xf9, 0x20, 0x46, 0xfb, 0xf7, - 0xd7, 0xf9, 0x04, 0x46, 0x05, 0xa8, 0xfb, 0xf7, 0x45, 0xf9, 0x20, 0x46, - 0x0b, 0xb0, 0xf0, 0xbd, 0x09, 0x24, 0xeb, 0xe7, 0x3d, 0x60, 0xf5, 0xe7, - 0x04, 0x28, 0xd2, 0xd0, 0xd2, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, 0x07, 0x46, - 0x94, 0xb0, 0x1c, 0x46, 0x28, 0x20, 0x88, 0x46, 0x01, 0x92, 0x02, 0xf0, - 0x79, 0xf9, 0x01, 0x9a, 0x39, 0x6d, 0x05, 0x46, 0x04, 0xa8, 0xff, 0xf7, - 0x61, 0xff, 0xa1, 0x07, 0x56, 0xbf, 0x04, 0xf0, 0x01, 0x06, 0x03, 0x26, - 0x01, 0x36, 0xa2, 0x05, 0x05, 0xd5, 0x63, 0x05, 0x4c, 0xbf, 0x46, 0xf0, - 0x08, 0x06, 0x46, 0xf0, 0x10, 0x06, 0x3b, 0x68, 0x20, 0x07, 0x38, 0x46, - 0x9b, 0x6f, 0x48, 0xbf, 0x46, 0xf0, 0x30, 0x06, 0x98, 0x47, 0x04, 0x9b, - 0x02, 0x93, 0x95, 0xb9, 0x09, 0x24, 0x3b, 0x68, 0x38, 0x46, 0xdb, 0x6f, - 0x98, 0x47, 0x28, 0x46, 0x0e, 0xf0, 0xbc, 0xf9, 0x20, 0x46, 0xfb, 0xf7, - 0x95, 0xf9, 0x04, 0x46, 0x04, 0xa8, 0xfb, 0xf7, 0x03, 0xf9, 0x20, 0x46, - 0x14, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x32, 0x46, 0x03, 0xa9, 0x02, 0xa8, - 0xfd, 0xf7, 0xd6, 0xfd, 0x00, 0x28, 0x40, 0xf0, 0xeb, 0x80, 0x03, 0x9b, - 0x09, 0xa8, 0x02, 0x99, 0x09, 0x93, 0xfe, 0xf7, 0x4b, 0xfb, 0x04, 0x46, - 0x20, 0xb9, 0x9d, 0xf9, 0x4f, 0x30, 0x00, 0x2b, 0xb8, 0xbf, 0x06, 0x24, - 0x16, 0xf0, 0x1c, 0x0f, 0x00, 0xf0, 0xc9, 0x80, 0x00, 0x2c, 0x79, 0xd0, - 0x04, 0x2c, 0x40, 0xf0, 0xce, 0x80, 0x09, 0xa8, 0xdd, 0xf8, 0x24, 0x90, - 0xf6, 0xf7, 0xba, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xd2, 0x80, - 0x0f, 0x99, 0x48, 0x46, 0xfd, 0xf7, 0x08, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0xca, 0x80, 0x10, 0x9b, 0x1b, 0x78, 0xe5, 0x2b, 0x5a, 0xd1, - 0x0f, 0x99, 0x48, 0x46, 0xfd, 0xf7, 0xfc, 0xfb, 0x04, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0xb1, 0x80, 0x01, 0x46, 0x20, 0x22, 0x10, 0x98, 0x46, 0xf0, - 0x08, 0x06, 0x0e, 0xf0, 0xd7, 0xf9, 0x11, 0xab, 0x10, 0x9a, 0x03, 0xcb, - 0x10, 0x60, 0x51, 0x60, 0x19, 0x88, 0x9b, 0x78, 0x11, 0x81, 0x93, 0x72, - 0x01, 0x23, 0x89, 0xf8, 0x03, 0x30, 0xff, 0xf7, 0x7f, 0xfb, 0x01, 0x46, - 0x01, 0x90, 0x10, 0x98, 0x0e, 0x30, 0xfb, 0xf7, 0xa1, 0xf9, 0x10, 0x98, - 0x01, 0x99, 0x16, 0x30, 0xfb, 0xf7, 0x9c, 0xf9, 0x03, 0x9c, 0x10, 0x99, - 0x20, 0x78, 0xfb, 0xf7, 0x35, 0xf9, 0x20, 0x23, 0x81, 0x46, 0xcb, 0x72, - 0x00, 0x23, 0x10, 0x9a, 0x93, 0x76, 0xd3, 0x76, 0x21, 0x78, 0x03, 0x29, - 0x04, 0xbf, 0x13, 0x75, 0x53, 0x75, 0x10, 0x9a, 0x13, 0x77, 0x53, 0x77, - 0x93, 0x77, 0xd3, 0x77, 0x01, 0x23, 0xe3, 0x70, 0xa0, 0xb1, 0x01, 0x46, - 0x00, 0x22, 0x09, 0xa8, 0xd4, 0xf8, 0x30, 0xa0, 0xfe, 0xf7, 0xa2, 0xfb, - 0x04, 0x46, 0x00, 0x28, 0x6d, 0xd1, 0x51, 0x46, 0x03, 0x98, 0xfd, 0xf7, - 0xb1, 0xfb, 0x09, 0xf1, 0xff, 0x33, 0x03, 0x9a, 0x04, 0x46, 0x13, 0x61, - 0x00, 0x28, 0x62, 0xd1, 0x31, 0x07, 0x48, 0xbf, 0x46, 0xf0, 0x40, 0x06, - 0x0d, 0xe0, 0x00, 0x2b, 0xa2, 0xd0, 0x01, 0x21, 0x09, 0xa8, 0xfe, 0xf7, - 0xc9, 0xf9, 0x8d, 0xe7, 0x9d, 0xf8, 0x2a, 0x30, 0x13, 0xf0, 0x11, 0x0f, - 0x50, 0xd1, 0x31, 0x07, 0xb1, 0xd4, 0x03, 0x9c, 0xdd, 0xf8, 0x40, 0x90, - 0x23, 0x6b, 0x49, 0x46, 0xc5, 0xf8, 0x24, 0x90, 0x2b, 0x62, 0x20, 0x78, - 0xfb, 0xf7, 0xee, 0xf8, 0x01, 0x46, 0xa8, 0x60, 0x09, 0xf1, 0x1c, 0x00, - 0xfb, 0xf7, 0x52, 0xf9, 0xe3, 0x88, 0xb2, 0x06, 0x81, 0x46, 0xab, 0x80, - 0x4f, 0xf0, 0x00, 0x03, 0xe8, 0x60, 0x2c, 0x60, 0x2e, 0x74, 0x6b, 0x74, - 0xeb, 0x61, 0x6b, 0x61, 0x1f, 0xd5, 0xf0, 0xb1, 0x63, 0x89, 0xa4, 0x89, - 0x68, 0x61, 0x5c, 0x43, 0x4c, 0x45, 0x2d, 0xd2, 0x28, 0x68, 0xa9, 0xeb, - 0x04, 0x09, 0xfd, 0xf7, 0x85, 0xfb, 0x01, 0x28, 0x01, 0x46, 0x27, 0xd9, - 0x43, 0x1c, 0xf3, 0xd1, 0x01, 0x24, 0xa9, 0x61, 0xec, 0xb9, 0x03, 0x98, - 0x83, 0x89, 0xb9, 0xfb, 0xf3, 0xf2, 0x03, 0xfb, 0x12, 0x93, 0x23, 0xb1, - 0xfd, 0xf7, 0x51, 0xfb, 0xf0, 0xb1, 0x10, 0x44, 0xe8, 0x61, 0x3b, 0x68, - 0x38, 0x46, 0x00, 0x24, 0xdb, 0x6f, 0x98, 0x47, 0xc8, 0xf8, 0x00, 0x50, - 0x16, 0xe7, 0x44, 0xb9, 0x9d, 0xf8, 0x2a, 0x30, 0xda, 0x06, 0x0d, 0xd4, - 0xb4, 0x07, 0x9f, 0xd5, 0xd8, 0x07, 0x9d, 0xd5, 0x07, 0x24, 0x00, 0x23, - 0x2b, 0x60, 0xfe, 0xe6, 0x00, 0x24, 0xda, 0xe7, 0x02, 0x24, 0xd8, 0xe7, - 0x04, 0x46, 0xf6, 0xe7, 0x04, 0x24, 0xf4, 0xe7, 0x02, 0x24, 0xf2, 0xe7, - 0x04, 0x2c, 0xef, 0xd0, 0xef, 0xe7, 0x70, 0xb5, 0x98, 0xb0, 0x05, 0x46, - 0x16, 0x46, 0x0a, 0x46, 0x01, 0x6d, 0x02, 0xa8, 0xff, 0xf7, 0x30, 0xfe, - 0x2b, 0x68, 0x28, 0x46, 0x9b, 0x6f, 0x98, 0x47, 0x18, 0x22, 0x00, 0x21, - 0x07, 0xa8, 0x0e, 0xf0, 0x0b, 0xf9, 0x02, 0x9b, 0x00, 0x22, 0x0d, 0xa9, - 0x01, 0xa8, 0x01, 0x93, 0xfd, 0xf7, 0xc6, 0xfc, 0x04, 0x46, 0x50, 0xb9, - 0x01, 0x99, 0x0d, 0xa8, 0xfe, 0xf7, 0x3e, 0xfa, 0x04, 0x46, 0x20, 0xb9, - 0x9d, 0xf9, 0x5f, 0x30, 0x00, 0x2b, 0x0e, 0xda, 0x06, 0x24, 0x2b, 0x68, - 0x28, 0x46, 0xdb, 0x6f, 0x98, 0x47, 0x20, 0x46, 0xfb, 0xf7, 0x64, 0xf8, - 0x04, 0x46, 0x02, 0xa8, 0xfa, 0xf7, 0xd2, 0xff, 0x20, 0x46, 0x18, 0xb0, - 0x70, 0xbd, 0x13, 0x9b, 0x8d, 0xf8, 0x25, 0x00, 0x1b, 0xb1, 0x07, 0xa9, - 0x0d, 0xa8, 0xfb, 0xf7, 0xcf, 0xf8, 0x9d, 0xf8, 0x24, 0x20, 0x40, 0xf2, - 0xff, 0x11, 0x07, 0x9b, 0x28, 0x46, 0x12, 0xf0, 0x10, 0x0f, 0x4f, 0xf0, - 0x00, 0x04, 0x33, 0x61, 0x14, 0xbf, 0x4f, 0xf4, 0x80, 0x43, 0x4f, 0xf4, - 0x00, 0x43, 0x12, 0xf0, 0x01, 0x0f, 0x40, 0xf2, 0x6d, 0x12, 0x08, 0xbf, - 0x0a, 0x46, 0x13, 0x43, 0x73, 0x60, 0x2b, 0x68, 0xdb, 0x6f, 0x98, 0x47, - 0xd5, 0xe7, 0xf0, 0xb5, 0x9f, 0xb0, 0x05, 0x46, 0x0a, 0x46, 0x01, 0x6d, - 0x03, 0xa8, 0xff, 0xf7, 0xd9, 0xfd, 0x2b, 0x68, 0x28, 0x46, 0x9b, 0x6f, - 0x98, 0x47, 0x03, 0x9b, 0x02, 0x22, 0x02, 0xa9, 0x01, 0xa8, 0x01, 0x93, - 0xfd, 0xf7, 0x74, 0xfc, 0x04, 0x46, 0x80, 0xb9, 0x02, 0x9b, 0x08, 0xa8, - 0x01, 0x99, 0x08, 0x93, 0xfe, 0xf7, 0xea, 0xf9, 0x04, 0x46, 0x40, 0xb9, - 0x9d, 0xf9, 0x4b, 0x30, 0x00, 0x2b, 0x49, 0xdb, 0x9d, 0xf8, 0x26, 0x70, - 0xfa, 0x07, 0x10, 0xd5, 0x07, 0x24, 0x2b, 0x68, 0x28, 0x46, 0xdb, 0x6f, - 0x98, 0x47, 0x07, 0x2c, 0x40, 0xd0, 0x20, 0x46, 0xfb, 0xf7, 0x0a, 0xf8, - 0x04, 0x46, 0x03, 0xa8, 0xfa, 0xf7, 0x78, 0xff, 0x20, 0x46, 0x1f, 0xb0, - 0xf0, 0xbd, 0x02, 0x9c, 0x0f, 0x99, 0x20, 0x78, 0xfb, 0xf7, 0x06, 0xf8, - 0xfb, 0x06, 0x06, 0x46, 0x12, 0xd4, 0x08, 0x9f, 0x0e, 0x99, 0x38, 0x46, - 0xfd, 0xf7, 0x9c, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xdf, 0xd1, 0x0f, 0x9b, - 0xe5, 0x22, 0x1a, 0x70, 0x01, 0x23, 0xfb, 0x70, 0xae, 0xb9, 0x02, 0x98, - 0xfb, 0xf7, 0x74, 0xfd, 0x04, 0x46, 0xd4, 0xe7, 0x15, 0x90, 0x13, 0xa8, - 0x13, 0x94, 0xf6, 0xf7, 0x33, 0xf8, 0x04, 0x46, 0x00, 0x28, 0xcc, 0xd1, - 0x13, 0xa8, 0xf6, 0xf7, 0x61, 0xf8, 0x04, 0x46, 0x00, 0x28, 0xc5, 0xd0, - 0x04, 0x28, 0xc4, 0xd1, 0xdb, 0xe7, 0x02, 0x46, 0x31, 0x46, 0x08, 0xa8, - 0xfe, 0xf7, 0x62, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xbb, 0xd1, 0xe0, 0xe7, - 0x06, 0x24, 0xb8, 0xe7, 0x6f, 0xf0, 0x59, 0x04, 0xbf, 0xe7, 0x00, 0x00, - 0x2d, 0xe9, 0xf3, 0x4d, 0x00, 0xf1, 0x1c, 0x03, 0x07, 0x46, 0x53, 0xe8, - 0x00, 0x2f, 0x01, 0x32, 0x43, 0xe8, 0x00, 0x26, 0x00, 0x2e, 0xf8, 0xd1, - 0x01, 0x2a, 0x40, 0xf0, 0x86, 0x80, 0x78, 0x68, 0x03, 0x68, 0x9b, 0x68, - 0x98, 0x47, 0x06, 0x46, 0x68, 0xbb, 0x78, 0x68, 0x03, 0x68, 0x5b, 0x6a, - 0x98, 0x47, 0x42, 0x28, 0x38, 0xbf, 0x42, 0x20, 0x04, 0x46, 0x01, 0xf0, - 0x63, 0xff, 0x80, 0x46, 0x78, 0x68, 0xc4, 0xf5, 0x00, 0x72, 0x03, 0x68, - 0x41, 0x46, 0xcd, 0xe9, 0x00, 0x46, 0x5d, 0x69, 0x33, 0x46, 0xa8, 0x47, - 0x06, 0x46, 0x98, 0xb9, 0xa4, 0xf1, 0x42, 0x03, 0x08, 0xeb, 0x03, 0x05, - 0x95, 0xf8, 0x40, 0x30, 0x55, 0x2b, 0x64, 0xd1, 0x95, 0xf8, 0x41, 0x30, - 0xaa, 0x2b, 0x60, 0xd1, 0x7b, 0x7e, 0x05, 0xeb, 0x03, 0x13, 0x13, 0xf8, - 0x10, 0x2c, 0x52, 0x06, 0x08, 0xd0, 0x2e, 0x4e, 0x40, 0x46, 0x0d, 0xf0, - 0xa9, 0xff, 0x00, 0x23, 0x87, 0xf8, 0x20, 0x30, 0xfb, 0x61, 0x4c, 0xe0, - 0x13, 0xf8, 0x0c, 0x2c, 0x0f, 0x2a, 0x04, 0xd8, 0x48, 0xf2, 0x21, 0x03, - 0xd3, 0x40, 0xdb, 0x07, 0xed, 0xd4, 0x78, 0x68, 0x4f, 0xf0, 0x00, 0x0a, - 0x03, 0x68, 0xdb, 0x6a, 0x98, 0x47, 0x7b, 0x7e, 0xb0, 0xf5, 0x00, 0x7f, - 0x03, 0xf1, 0xff, 0x33, 0x38, 0xbf, 0x4f, 0xf4, 0x00, 0x70, 0x05, 0xeb, - 0x03, 0x13, 0x1a, 0x79, 0x3a, 0x76, 0x53, 0xf8, 0x08, 0x1f, 0x0a, 0x0a, - 0x61, 0xf3, 0x07, 0x0a, 0x62, 0xf3, 0x0f, 0x2a, 0x0a, 0x0c, 0x09, 0x0e, - 0x62, 0xf3, 0x17, 0x4a, 0x00, 0x22, 0x61, 0xf3, 0x1f, 0x6a, 0xa0, 0xfb, - 0x0a, 0xab, 0xc7, 0xe9, 0x02, 0xab, 0x5b, 0x68, 0x19, 0x0a, 0x63, 0xf3, - 0x07, 0x02, 0x61, 0xf3, 0x0f, 0x22, 0x19, 0x0c, 0x1b, 0x0e, 0x61, 0xf3, - 0x17, 0x42, 0x63, 0xf3, 0x1f, 0x62, 0xa0, 0xfb, 0x02, 0x45, 0x78, 0x68, - 0x52, 0x46, 0x03, 0x68, 0xc7, 0xe9, 0x04, 0x45, 0xcd, 0xe9, 0x00, 0x45, - 0x59, 0x6c, 0x5b, 0x46, 0x88, 0x47, 0x00, 0x28, 0xaf, 0xd0, 0x01, 0x23, - 0x40, 0x46, 0x87, 0xf8, 0x20, 0x30, 0x0d, 0xf0, 0x57, 0xff, 0x30, 0x46, - 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x8d, 0x02, 0x4e, 0xa4, 0xe7, 0x00, 0xbf, - 0xe2, 0xf3, 0xff, 0xff, 0xe3, 0xf3, 0xff, 0xff, 0x70, 0xb5, 0x1d, 0x4b, - 0x05, 0x46, 0x04, 0x46, 0x45, 0xf8, 0x54, 0x3b, 0x28, 0x46, 0xfe, 0xf7, - 0xcf, 0xfa, 0x20, 0x6c, 0x66, 0x69, 0x0a, 0xf0, 0x77, 0xfd, 0x00, 0x23, - 0x63, 0x61, 0x94, 0xf8, 0x3d, 0x30, 0x6b, 0xb9, 0x01, 0x23, 0x84, 0xf8, - 0x3d, 0x30, 0x4e, 0xb1, 0xef, 0xf3, 0x05, 0x83, 0x33, 0xb9, 0x0a, 0xf0, - 0xff, 0xf9, 0x18, 0xb9, 0x30, 0x46, 0xdf, 0xf8, 0x40, 0xc0, 0x00, 0xdf, - 0x28, 0x46, 0xfe, 0xf7, 0x95, 0xfa, 0x94, 0xf8, 0x3c, 0x30, 0x2b, 0xb1, - 0xa0, 0x6a, 0x08, 0xb1, 0x0d, 0xf0, 0x22, 0xff, 0x00, 0x23, 0xa3, 0x62, - 0x60, 0x6d, 0x0a, 0xf0, 0xeb, 0xfd, 0x25, 0x6c, 0xef, 0xf3, 0x05, 0x83, - 0x33, 0xb9, 0x0a, 0xf0, 0xe5, 0xf9, 0x18, 0xb9, 0x28, 0x46, 0xdf, 0xf8, - 0x10, 0xc0, 0x00, 0xdf, 0x20, 0x46, 0x70, 0xbd, 0x6c, 0xde, 0x01, 0x08, - 0x99, 0x4f, 0x01, 0x08, 0x69, 0x50, 0x01, 0x08, 0x10, 0xb5, 0x04, 0x46, - 0xff, 0xf7, 0xba, 0xff, 0x20, 0x46, 0x0d, 0xf0, 0x03, 0xff, 0x20, 0x46, - 0x10, 0xbd, 0x00, 0x00, 0x2d, 0xe9, 0xf0, 0x47, 0x00, 0x23, 0x8a, 0xb0, - 0x81, 0x46, 0x42, 0xf2, 0x10, 0x78, 0xdf, 0xf8, 0x5c, 0xa0, 0x01, 0x24, - 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x8d, 0xf8, 0x27, 0x30, 0xef, 0xf3, - 0x05, 0x83, 0x2b, 0xb9, 0x0a, 0xf0, 0xba, 0xf9, 0x10, 0xb9, 0x01, 0x20, - 0xd4, 0x46, 0x00, 0xdf, 0x0d, 0xf1, 0x27, 0x03, 0x4f, 0xf0, 0xff, 0x32, - 0x05, 0x21, 0x48, 0x46, 0x04, 0x93, 0x00, 0x23, 0xcd, 0xe9, 0x06, 0x45, - 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x02, 0x67, 0x00, 0xf0, - 0x7f, 0xf8, 0x9d, 0xf8, 0x27, 0x30, 0x13, 0xf0, 0x01, 0x00, 0x02, 0xd0, - 0xb8, 0xf1, 0x01, 0x08, 0xdd, 0xd1, 0x80, 0xf0, 0x01, 0x00, 0x0a, 0xb0, - 0xbd, 0xe8, 0xf0, 0x87, 0xb9, 0x55, 0x01, 0x08, 0xf0, 0xb5, 0x00, 0x23, - 0x8b, 0xb0, 0x00, 0x26, 0x00, 0x27, 0x8d, 0xf8, 0x27, 0x30, 0x4f, 0xf0, - 0xff, 0x32, 0x04, 0x93, 0x06, 0x21, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, - 0x04, 0x46, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x67, 0x00, 0xf0, - 0x5b, 0xf8, 0x05, 0x46, 0x18, 0xb1, 0x4f, 0xf0, 0xff, 0x30, 0x0b, 0xb0, - 0xf0, 0xbd, 0x20, 0x46, 0xff, 0xf7, 0xaa, 0xff, 0x00, 0x28, 0xf6, 0xd0, - 0x01, 0x22, 0x00, 0x23, 0x05, 0x21, 0x20, 0x46, 0x00, 0x95, 0xcd, 0xe9, - 0x06, 0x23, 0x0d, 0xf1, 0x27, 0x03, 0x4f, 0xf0, 0xff, 0x32, 0x04, 0x93, - 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x02, 0x67, 0x00, 0xf0, 0x3e, 0xf8, - 0x00, 0x28, 0xe2, 0xd1, 0x9d, 0xf8, 0x27, 0x00, 0x80, 0xf0, 0x02, 0x00, - 0x40, 0xf3, 0x40, 0x00, 0xdd, 0xe7, 0x70, 0xb5, 0x1d, 0x46, 0xd0, 0xf8, - 0xf4, 0x30, 0x86, 0xb0, 0x06, 0x46, 0x01, 0x33, 0x17, 0xd0, 0x14, 0x0e, - 0x8d, 0xf8, 0x17, 0x40, 0xff, 0xf7, 0xb8, 0xff, 0x70, 0xb9, 0x01, 0x23, - 0x4f, 0xf0, 0xff, 0x32, 0xd6, 0xf8, 0xf4, 0x10, 0x00, 0x93, 0x0d, 0xf1, - 0x17, 0x03, 0xcd, 0xe9, 0x01, 0x00, 0x30, 0x1d, 0xf7, 0xf7, 0x7e, 0xff, - 0x06, 0xb0, 0x70, 0xbd, 0x4f, 0xf0, 0xff, 0x30, 0xfa, 0xe7, 0x90, 0xf8, - 0xfa, 0x31, 0x03, 0x2b, 0x0e, 0xd0, 0x6b, 0x1c, 0x08, 0xbf, 0xb2, 0xf1, - 0xff, 0x3f, 0x09, 0xd0, 0x00, 0x2d, 0x08, 0xbf, 0xb2, 0xf1, 0x80, 0x7f, - 0x2c, 0xbf, 0x4f, 0xf0, 0xff, 0x30, 0x00, 0x20, 0x40, 0xb2, 0xe7, 0xe7, - 0x00, 0x20, 0xe5, 0xe7, 0x2d, 0xe9, 0xf7, 0x43, 0x0a, 0x9e, 0x04, 0x46, - 0x15, 0x46, 0x0c, 0x9f, 0xdd, 0xf8, 0x38, 0x80, 0xdd, 0xf8, 0x40, 0x90, - 0x01, 0x91, 0xff, 0xf7, 0xbe, 0xff, 0x58, 0xb9, 0x33, 0x46, 0x2a, 0x46, - 0x01, 0x99, 0x20, 0x1d, 0x0a, 0x97, 0xcd, 0xe9, 0x0b, 0x89, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x43, 0xf7, 0xf7, 0x4a, 0xbf, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x83, 0xd0, 0xf8, 0xe8, 0x30, 0x01, 0x33, 0x2d, 0xe9, 0xf0, 0x47, - 0x05, 0x46, 0x88, 0xb0, 0x8a, 0x46, 0x1d, 0xd1, 0xff, 0xf7, 0x68, 0xff, - 0x28, 0xb1, 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, 0x08, 0xb0, 0xbd, 0xe8, - 0xf0, 0x87, 0x00, 0x22, 0x00, 0x23, 0x01, 0x21, 0x04, 0x90, 0xcd, 0xf8, - 0x00, 0xa0, 0xcd, 0xe9, 0x06, 0x23, 0xd5, 0xf8, 0xe4, 0x30, 0x4f, 0xf0, - 0xff, 0x32, 0xcd, 0xe9, 0x02, 0x30, 0x4f, 0xf0, 0xff, 0x33, 0x28, 0x46, - 0xff, 0xf7, 0xbe, 0xff, 0x04, 0x46, 0xe6, 0xe7, 0xff, 0xf7, 0x4a, 0xff, - 0x00, 0x28, 0xe0, 0xd1, 0x4f, 0xf0, 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, - 0x01, 0x26, 0x00, 0x27, 0x04, 0x90, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, - 0xff, 0x33, 0x01, 0x21, 0x28, 0x46, 0xcd, 0xf8, 0x00, 0xa0, 0xcd, 0xe9, - 0x06, 0x89, 0xcd, 0xe9, 0x02, 0x67, 0xff, 0xf7, 0xa3, 0xff, 0x04, 0x46, - 0x00, 0x28, 0xca, 0xd1, 0x28, 0x46, 0xff, 0xf7, 0x2d, 0xff, 0x00, 0x28, - 0xc3, 0xd1, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0xd5, 0xf8, - 0xe8, 0x10, 0x04, 0x94, 0xcd, 0xf8, 0x00, 0xa0, 0xcd, 0xe9, 0x06, 0x89, - 0xcd, 0xe9, 0x02, 0x67, 0xcb, 0xe7, 0xf0, 0xb5, 0x01, 0x22, 0x89, 0xb0, - 0x00, 0x23, 0x00, 0x26, 0x00, 0x27, 0x0c, 0x46, 0x04, 0x91, 0x05, 0x21, - 0x05, 0x46, 0xcd, 0xe9, 0x06, 0x23, 0x00, 0x23, 0x4f, 0xf0, 0xff, 0x32, - 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x02, 0x67, 0xff, 0xf7, - 0x77, 0xff, 0x98, 0xb9, 0xd5, 0xf8, 0xe4, 0x30, 0x01, 0x3b, 0x0f, 0xd0, - 0x01, 0x34, 0x00, 0x90, 0x4f, 0xf0, 0xff, 0x32, 0xd5, 0xf8, 0xec, 0x10, - 0x04, 0x94, 0xcd, 0xe9, 0x06, 0x30, 0xcd, 0xe9, 0x02, 0x67, 0x4f, 0xf0, - 0xff, 0x33, 0x28, 0x46, 0xff, 0xf7, 0x62, 0xff, 0x09, 0xb0, 0xf0, 0xbd, - 0xf0, 0xb5, 0x00, 0xf1, 0xbc, 0x07, 0x04, 0x46, 0x89, 0xb0, 0x38, 0x46, - 0xfe, 0xf7, 0x3c, 0xf9, 0x94, 0xf8, 0x04, 0x52, 0x2d, 0xb9, 0x38, 0x46, - 0xc4, 0xf8, 0x00, 0x52, 0xfe, 0xf7, 0x14, 0xf9, 0x09, 0xe0, 0xd4, 0xf8, - 0x00, 0x62, 0x01, 0x3e, 0xc4, 0xf8, 0x00, 0x62, 0x36, 0xb1, 0x00, 0x25, - 0x38, 0x46, 0xfe, 0xf7, 0x09, 0xf9, 0x28, 0x46, 0x09, 0xb0, 0xf0, 0xbd, - 0x00, 0x22, 0x00, 0x23, 0x04, 0x21, 0x20, 0x46, 0x04, 0x96, 0x00, 0x96, - 0xcd, 0xe9, 0x06, 0x23, 0xcd, 0xe9, 0x02, 0x23, 0x4f, 0xf0, 0xff, 0x33, - 0x4f, 0xf0, 0xff, 0x32, 0xff, 0xf7, 0x32, 0xff, 0x00, 0x28, 0x84, 0xf8, - 0x04, 0x62, 0x38, 0x46, 0x0c, 0xbf, 0x00, 0x25, 0x6f, 0xf4, 0x7a, 0x65, - 0xfe, 0xf7, 0xec, 0xf8, 0xd4, 0xf8, 0xb4, 0x30, 0x00, 0x2b, 0xde, 0xd1, - 0x10, 0x48, 0xb4, 0xf9, 0xb8, 0x40, 0x02, 0xf0, 0xa1, 0xfd, 0xfe, 0xf7, - 0x01, 0xf9, 0x0e, 0x4b, 0x1b, 0x68, 0x03, 0xf1, 0x14, 0x01, 0x1a, 0x46, - 0x02, 0x33, 0xb2, 0xf9, 0x00, 0x00, 0xa0, 0x42, 0x0c, 0xd1, 0x4f, 0xf6, - 0xff, 0x73, 0x13, 0x80, 0x08, 0x4a, 0x13, 0x68, 0x00, 0x2b, 0x01, 0xdd, - 0x01, 0x3b, 0x13, 0x60, 0x03, 0x48, 0x02, 0xf0, 0x89, 0xfd, 0xb3, 0xe7, - 0x8b, 0x42, 0xea, 0xd1, 0xf8, 0xe7, 0x00, 0xbf, 0x98, 0x06, 0x00, 0x24, - 0xc0, 0x06, 0x00, 0x24, 0xc4, 0x06, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x47, - 0x00, 0xf1, 0xbc, 0x07, 0x88, 0xb0, 0x04, 0x46, 0x15, 0x46, 0x10, 0x9e, - 0x38, 0x46, 0x05, 0x93, 0x89, 0x46, 0xfe, 0xf7, 0xd3, 0xf8, 0x2a, 0x46, - 0x05, 0x9b, 0x20, 0x46, 0xd4, 0xf8, 0xe0, 0xa0, 0x07, 0x96, 0xff, 0xf7, - 0xb2, 0xfe, 0xa0, 0xbb, 0x94, 0xf8, 0xfd, 0x31, 0x04, 0xf1, 0x04, 0x08, - 0x94, 0xf8, 0xf9, 0x21, 0x03, 0x93, 0x40, 0x46, 0x94, 0xf8, 0xfe, 0x31, - 0x02, 0x93, 0x94, 0xf8, 0xfb, 0x31, 0xcd, 0xe9, 0x00, 0x23, 0x94, 0xf8, - 0xfa, 0x31, 0x94, 0xf8, 0xf8, 0x11, 0x02, 0xf0, 0xa1, 0xfe, 0x06, 0x46, - 0xe8, 0xb9, 0x94, 0xf8, 0xfb, 0x01, 0x07, 0xab, 0x51, 0x46, 0xb0, 0xfa, - 0x80, 0xf0, 0x40, 0x09, 0xcd, 0xe9, 0x00, 0x93, 0x42, 0x42, 0x2b, 0x46, - 0x40, 0x46, 0xf7, 0xf7, 0x8d, 0xfd, 0x05, 0x46, 0x32, 0x46, 0x31, 0x46, - 0x40, 0x46, 0xcd, 0xe9, 0x02, 0x66, 0xcd, 0xe9, 0x00, 0x66, 0x94, 0xf8, - 0xfa, 0x31, 0x02, 0xf0, 0x85, 0xfe, 0x45, 0xea, 0x00, 0x04, 0x64, 0xb2, - 0x0c, 0xb1, 0x6f, 0xf4, 0x7a, 0x64, 0x38, 0x46, 0xfe, 0xf7, 0x70, 0xf8, - 0x20, 0x46, 0x08, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, 0x2d, 0xe9, 0xf0, 0x4f, - 0x92, 0x46, 0x9b, 0x46, 0x8d, 0xb0, 0x04, 0x46, 0xd0, 0xe9, 0x44, 0x23, - 0x9b, 0x45, 0x08, 0xbf, 0x92, 0x45, 0x28, 0xd2, 0xd0, 0xf8, 0x28, 0xc1, - 0xbc, 0xf1, 0x00, 0x0f, 0x23, 0xd0, 0xbc, 0xf1, 0x01, 0x0f, 0x0c, 0xd0, - 0x00, 0xf5, 0xb4, 0x7e, 0x00, 0x25, 0xac, 0x45, 0x1b, 0xdd, 0xfe, 0xe8, - 0x02, 0x01, 0x59, 0x45, 0x08, 0xbf, 0x50, 0x45, 0x02, 0xd2, 0x01, 0x35, - 0xf5, 0xe7, 0x00, 0x25, 0x61, 0x19, 0x91, 0xf8, 0x54, 0x11, 0x05, 0x91, - 0x16, 0x99, 0x1a, 0xeb, 0x01, 0x06, 0x17, 0x99, 0x4b, 0xeb, 0x01, 0x07, - 0xbb, 0x42, 0x08, 0xbf, 0xb2, 0x42, 0x07, 0xd2, 0x61, 0x4c, 0x20, 0x46, - 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x4f, 0xf0, 0xff, 0x35, 0xe9, 0xe7, - 0x23, 0x68, 0x52, 0x46, 0x20, 0x46, 0x19, 0x6b, 0x5b, 0x46, 0x88, 0x47, - 0x02, 0x46, 0x0b, 0x46, 0x50, 0x46, 0x59, 0x46, 0x0f, 0xf0, 0x00, 0xfc, - 0x13, 0x43, 0xe9, 0xd1, 0x16, 0xf1, 0xff, 0x32, 0x23, 0x68, 0x20, 0x46, - 0x19, 0x6b, 0x47, 0xf1, 0xff, 0x33, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, - 0x30, 0x46, 0x39, 0x46, 0x0f, 0xf0, 0xf0, 0xfb, 0x13, 0x43, 0xd9, 0xd1, - 0x04, 0xf5, 0xe4, 0x73, 0x09, 0x93, 0xdd, 0xe9, 0x16, 0x23, 0x13, 0x43, - 0x00, 0xf0, 0x94, 0x80, 0xd4, 0xf8, 0x18, 0x91, 0xb9, 0xf1, 0xff, 0x3f, - 0x59, 0xd1, 0x1a, 0xf1, 0xff, 0x33, 0x4f, 0xf0, 0x08, 0x07, 0x4f, 0xf0, - 0x03, 0x06, 0x0a, 0x93, 0x4b, 0xf1, 0xff, 0x33, 0x0b, 0x93, 0x05, 0xf1, - 0x09, 0x03, 0x04, 0xeb, 0xc3, 0x03, 0x08, 0x93, 0x05, 0x9b, 0x3b, 0x42, - 0x24, 0xd0, 0x09, 0x9b, 0x4f, 0xf0, 0x00, 0x09, 0x50, 0x46, 0x59, 0x46, - 0x53, 0xf8, 0x26, 0x30, 0x1a, 0x46, 0x98, 0x46, 0x4b, 0x46, 0x0f, 0xf0, - 0xc3, 0xfb, 0x13, 0x43, 0x16, 0xd1, 0xdd, 0xe9, 0x16, 0x23, 0x4b, 0x45, - 0x08, 0xbf, 0x42, 0x45, 0x10, 0xd3, 0x0a, 0x9b, 0x13, 0xeb, 0x08, 0x03, - 0x06, 0x93, 0x0b, 0x9b, 0x43, 0xeb, 0x09, 0x03, 0x07, 0x93, 0x08, 0x9b, - 0xdd, 0xe9, 0x06, 0x01, 0xd3, 0xe9, 0x48, 0x23, 0x8b, 0x42, 0x08, 0xbf, - 0x82, 0x42, 0x03, 0xd2, 0x01, 0x3e, 0x4f, 0xea, 0x57, 0x07, 0xd3, 0xd2, - 0x04, 0xeb, 0x86, 0x06, 0xd6, 0xf8, 0xb8, 0x91, 0xd6, 0xf8, 0xc8, 0x61, - 0x04, 0xf1, 0xbc, 0x07, 0x4f, 0xf0, 0x00, 0x08, 0x38, 0x46, 0xfd, 0xf7, - 0xe1, 0xff, 0x20, 0x46, 0xff, 0xf7, 0x8a, 0xfd, 0x00, 0x28, 0x3d, 0xd1, - 0x5b, 0x46, 0x52, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xbe, 0xfd, 0x03, 0x46, - 0x40, 0xb1, 0x6f, 0xf4, 0x7a, 0x64, 0x38, 0x46, 0xfd, 0xf7, 0xb0, 0xff, - 0x73, 0xe7, 0x4f, 0xf4, 0x80, 0x56, 0xe3, 0xe7, 0xcd, 0xe9, 0x01, 0x00, - 0x00, 0x90, 0x52, 0x46, 0x49, 0x46, 0x20, 0x1d, 0xf7, 0xf7, 0x44, 0xfd, - 0x00, 0x28, 0xec, 0xd1, 0x1a, 0xeb, 0x06, 0x0a, 0x16, 0x9b, 0x4b, 0xeb, - 0x08, 0x0b, 0x9b, 0x1b, 0x16, 0x93, 0x17, 0x9b, 0x63, 0xeb, 0x08, 0x03, - 0x17, 0x93, 0xdd, 0xe9, 0x16, 0x23, 0x13, 0x43, 0x0c, 0xd0, 0x04, 0xeb, - 0xc5, 0x03, 0xd3, 0xe9, 0x5a, 0x23, 0x5b, 0x45, 0x08, 0xbf, 0x52, 0x45, - 0x3f, 0xbf, 0x01, 0x35, 0x63, 0x19, 0x93, 0xf8, 0x54, 0x31, 0x05, 0x93, - 0x20, 0x46, 0xff, 0xf7, 0x17, 0xfd, 0x28, 0xb1, 0x38, 0x46, 0xfd, 0xf7, - 0x7f, 0xff, 0x6a, 0xe7, 0x03, 0x4c, 0xc8, 0xe7, 0x03, 0x4c, 0xc6, 0xe7, - 0x00, 0x24, 0x3c, 0xe7, 0x5b, 0xf0, 0xff, 0xff, 0x5c, 0xf0, 0xff, 0xff, - 0x5d, 0xf0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, 0x1f, 0x46, 0x00, 0xf1, - 0x08, 0x03, 0x04, 0x46, 0x0e, 0x46, 0x15, 0x46, 0x00, 0xf1, 0xbc, 0x08, - 0x00, 0xf1, 0x04, 0x09, 0x2d, 0xed, 0x02, 0x8b, 0x08, 0xee, 0x10, 0x3a, - 0x87, 0xb0, 0xdd, 0xe9, 0x12, 0x23, 0x13, 0x43, 0x7c, 0xd0, 0xd4, 0xf8, - 0xf0, 0x31, 0x4f, 0xf0, 0x00, 0x0b, 0x28, 0x46, 0x39, 0x46, 0x9a, 0x46, - 0x1a, 0x46, 0x02, 0x93, 0x5b, 0x46, 0x0f, 0xf0, 0x29, 0xfb, 0x12, 0x99, - 0x51, 0x18, 0x00, 0x91, 0x13, 0x99, 0x4b, 0x41, 0x01, 0x93, 0xdd, 0xe9, - 0x00, 0x01, 0x59, 0x45, 0x4f, 0xf0, 0x00, 0x0b, 0x08, 0xbf, 0x50, 0x45, - 0x40, 0x46, 0x2a, 0xbf, 0x02, 0x9b, 0x12, 0x9b, 0x9b, 0x1a, 0x02, 0x93, - 0x02, 0x9b, 0x9a, 0x46, 0xcd, 0xe9, 0x04, 0xab, 0xfd, 0xf7, 0x58, 0xff, - 0x20, 0x46, 0xff, 0xf7, 0x01, 0xfd, 0x00, 0x28, 0x4e, 0xd1, 0x2a, 0x46, - 0x3b, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x35, 0xfd, 0x50, 0xb1, 0x6f, 0xf4, - 0x7a, 0x64, 0x40, 0x46, 0xfd, 0xf7, 0x28, 0xff, 0x20, 0x46, 0x07, 0xb0, - 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x94, 0xf8, 0x98, 0x30, - 0x00, 0x2b, 0xf0, 0xd0, 0x00, 0x2e, 0xee, 0xd0, 0x04, 0x9b, 0x00, 0x2b, - 0xeb, 0xd0, 0x48, 0x46, 0x02, 0xf0, 0x18, 0xfd, 0x4f, 0xf0, 0xff, 0x33, - 0x2a, 0x46, 0x02, 0x21, 0x48, 0x46, 0x02, 0xf0, 0x70, 0xfb, 0x04, 0xab, - 0x32, 0x46, 0x04, 0xf1, 0x6c, 0x01, 0x18, 0xee, 0x10, 0x0a, 0xf7, 0xf7, - 0x3b, 0xfc, 0x03, 0x90, 0x48, 0x46, 0x02, 0xf0, 0xfb, 0xfc, 0x03, 0x9b, - 0x00, 0x2b, 0xd2, 0xd1, 0xdd, 0xe9, 0x04, 0x23, 0x9b, 0x45, 0x08, 0xbf, - 0x92, 0x45, 0xcc, 0xd1, 0x02, 0x9b, 0x15, 0xeb, 0x0a, 0x05, 0x20, 0x46, - 0x1e, 0x44, 0x12, 0x9b, 0x47, 0xeb, 0x0b, 0x07, 0xb3, 0xeb, 0x0a, 0x03, - 0x12, 0x93, 0x13, 0x9b, 0x63, 0xeb, 0x0b, 0x03, 0x13, 0x93, 0xff, 0xf7, - 0x7d, 0xfc, 0x28, 0xb1, 0x40, 0x46, 0xfd, 0xf7, 0xe5, 0xfe, 0x82, 0xe7, - 0x02, 0x4c, 0xb6, 0xe7, 0x02, 0x4c, 0xb4, 0xe7, 0x00, 0x24, 0xb5, 0xe7, - 0x5c, 0xf0, 0xff, 0xff, 0x5d, 0xf0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, - 0xd0, 0xf8, 0xb4, 0xa0, 0x05, 0x46, 0x2d, 0xed, 0x02, 0x8b, 0xb5, 0xb0, - 0xba, 0xf1, 0x00, 0x0f, 0x0c, 0xd0, 0xae, 0x4a, 0xae, 0x4b, 0xba, 0xf1, - 0xff, 0x3f, 0x0c, 0xbf, 0x92, 0x46, 0x9a, 0x46, 0x50, 0x46, 0x35, 0xb0, - 0xbd, 0xec, 0x02, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0xf1, 0xbc, 0x03, - 0x18, 0x46, 0x08, 0xee, 0x90, 0x3a, 0xfd, 0xf7, 0xdb, 0xfe, 0x2b, 0x1d, - 0x52, 0x46, 0x51, 0x46, 0x08, 0xee, 0x10, 0x3a, 0x95, 0xf8, 0xfa, 0x31, - 0x18, 0xee, 0x10, 0x0a, 0xcd, 0xe9, 0x02, 0xaa, 0xcd, 0xe9, 0x00, 0xaa, - 0x02, 0xf0, 0xb8, 0xfc, 0x30, 0xb1, 0x6f, 0xf4, 0x7a, 0x6a, 0x18, 0xee, - 0x90, 0x0a, 0xfd, 0xf7, 0xa5, 0xfe, 0xdb, 0xe7, 0x95, 0xf8, 0x04, 0x32, - 0x0b, 0xb9, 0xc5, 0xf8, 0x00, 0xa2, 0xd5, 0xf8, 0x00, 0x62, 0x01, 0x36, - 0x01, 0x2e, 0xc5, 0xf8, 0x00, 0x62, 0xee, 0xd1, 0x00, 0x23, 0xd5, 0xf8, - 0xf4, 0x41, 0x85, 0xf8, 0xfb, 0x31, 0x85, 0xf8, 0xfd, 0x31, 0x95, 0xf8, - 0x98, 0x30, 0x00, 0x2b, 0xe1, 0xd0, 0x18, 0xee, 0x10, 0x0a, 0x02, 0xf0, - 0x8b, 0xfc, 0x18, 0xee, 0x10, 0x3a, 0x21, 0x46, 0xc5, 0xf8, 0x90, 0x40, - 0x18, 0x1d, 0xf8, 0xf7, 0x0b, 0xfb, 0x80, 0x46, 0x18, 0xee, 0x10, 0x0a, - 0x02, 0xf0, 0x74, 0xfc, 0xb8, 0xf1, 0x00, 0x0f, 0xcd, 0xd1, 0x28, 0x46, - 0xff, 0xf7, 0x0a, 0xfc, 0x00, 0x28, 0x00, 0xf0, 0xd5, 0x84, 0x82, 0x4f, - 0x03, 0x22, 0x20, 0xac, 0x9f, 0x21, 0x3b, 0x78, 0x28, 0x46, 0x04, 0x94, - 0xbb, 0x46, 0x8d, 0xf8, 0x80, 0x30, 0x00, 0x23, 0xcd, 0xf8, 0x00, 0x80, - 0xad, 0xf8, 0x81, 0x80, 0xcd, 0xe9, 0x06, 0x23, 0x00, 0x22, 0x00, 0x23, - 0xcd, 0xe9, 0x02, 0x23, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, - 0xff, 0xf7, 0x94, 0xfc, 0x00, 0x28, 0xaa, 0xd1, 0x9d, 0xf8, 0x80, 0x30, - 0xbf, 0x2b, 0x00, 0xf0, 0xb5, 0x80, 0x00, 0xf2, 0xa5, 0x80, 0x01, 0x2b, - 0x00, 0xf0, 0xb6, 0x80, 0x9d, 0x2b, 0x00, 0xf0, 0xb0, 0x80, 0x00, 0x23, - 0x10, 0xae, 0xdf, 0xf8, 0xb8, 0x81, 0x29, 0x46, 0x30, 0x46, 0x00, 0x27, - 0x0d, 0xf1, 0x70, 0x09, 0xc5, 0xe9, 0x42, 0x33, 0xc5, 0xe9, 0x48, 0x33, - 0xcd, 0xe9, 0x20, 0x83, 0x94, 0xe8, 0x0c, 0x00, 0xf4, 0xf7, 0x68, 0xff, - 0x4f, 0xf0, 0x5a, 0x0c, 0x96, 0xe8, 0x0f, 0x00, 0x08, 0x26, 0x84, 0xe8, - 0x0f, 0x00, 0x01, 0x23, 0x00, 0x22, 0x20, 0x46, 0x23, 0x99, 0xcd, 0xf8, - 0x0c, 0x90, 0xb2, 0x46, 0x02, 0x96, 0xcd, 0xe9, 0x00, 0x3c, 0xcd, 0xe9, - 0x04, 0x67, 0x00, 0x23, 0x88, 0x47, 0xb8, 0x42, 0xcd, 0xf8, 0x28, 0x80, - 0x6f, 0xdb, 0x04, 0x22, 0x57, 0x49, 0x48, 0x46, 0x0e, 0xf0, 0x6e, 0xfe, - 0x80, 0x46, 0x00, 0x28, 0x67, 0xd1, 0x9d, 0xf8, 0x75, 0x30, 0x01, 0x2b, - 0x63, 0xd1, 0x9d, 0xf8, 0x76, 0x30, 0x32, 0x46, 0x0b, 0x93, 0x3b, 0x46, - 0x37, 0x46, 0x1e, 0x46, 0x01, 0x21, 0x5a, 0x20, 0xcd, 0xe9, 0x04, 0x76, - 0xcd, 0xe9, 0x00, 0x10, 0xcd, 0xe9, 0x02, 0xa9, 0x20, 0x46, 0x23, 0x99, - 0xcd, 0xe9, 0x0c, 0x32, 0x88, 0x47, 0x00, 0x28, 0x4d, 0xdb, 0x9d, 0xf8, - 0x72, 0x30, 0x01, 0x2b, 0x09, 0x93, 0x48, 0xd1, 0x1d, 0x99, 0x08, 0x0e, - 0xff, 0x28, 0xdd, 0xe9, 0x0c, 0x32, 0x12, 0xd1, 0x9d, 0xf8, 0x70, 0x00, - 0x81, 0x28, 0x65, 0xd0, 0x84, 0x28, 0x6d, 0xd0, 0x58, 0xb9, 0x21, 0xf0, - 0x7f, 0x41, 0xc5, 0xf8, 0x08, 0x11, 0x9d, 0xf8, 0x73, 0x10, 0x89, 0x00, - 0x50, 0x29, 0xa8, 0xbf, 0x50, 0x21, 0xc5, 0xf8, 0x0c, 0x11, 0x08, 0x32, - 0x0b, 0x98, 0x08, 0xf1, 0x01, 0x01, 0x43, 0xf1, 0x00, 0x03, 0x40, 0x45, - 0x4c, 0xdc, 0x0a, 0x9b, 0x00, 0x27, 0x14, 0xae, 0x29, 0x46, 0x20, 0x93, - 0x30, 0x46, 0x21, 0x97, 0x94, 0xe8, 0x0c, 0x00, 0xf4, 0xf7, 0xfc, 0xfe, - 0x0d, 0xf1, 0x70, 0x0c, 0x96, 0xe8, 0x0f, 0x00, 0x8c, 0xe8, 0x0f, 0x00, - 0xd5, 0xf8, 0x0c, 0x31, 0x08, 0x22, 0x01, 0x26, 0x60, 0x46, 0x1f, 0x99, - 0x03, 0x94, 0x00, 0x96, 0xcd, 0xe9, 0x04, 0x37, 0x5a, 0x23, 0xcd, 0xe9, - 0x01, 0x32, 0xd5, 0xf8, 0x08, 0x21, 0x3b, 0x46, 0x88, 0x47, 0x82, 0x46, - 0x18, 0xb9, 0x9d, 0xf9, 0x87, 0x30, 0xbb, 0x42, 0x46, 0xda, 0xdf, 0xf8, - 0x88, 0xa0, 0x00, 0xe7, 0xc2, 0x2b, 0x7f, 0xf4, 0x5e, 0xaf, 0x03, 0x23, - 0x85, 0xf8, 0x00, 0x61, 0x85, 0xf8, 0xf0, 0x00, 0xc5, 0xf8, 0xe4, 0x30, - 0x15, 0x23, 0xc5, 0xf8, 0xec, 0x30, 0x52, 0xe7, 0x85, 0xf8, 0x02, 0x01, - 0x4f, 0xe7, 0xc5, 0xf8, 0xe4, 0x60, 0x4c, 0xe7, 0x9d, 0xf8, 0x81, 0x30, - 0x02, 0x2b, 0x7f, 0xf4, 0x48, 0xaf, 0x9d, 0xf8, 0x82, 0x30, 0x20, 0x2b, - 0x7f, 0xf4, 0x43, 0xaf, 0x01, 0x23, 0x85, 0xf8, 0x01, 0x31, 0x3e, 0xe7, - 0x88, 0x46, 0x7b, 0xe7, 0x21, 0xf0, 0x7f, 0x41, 0xc5, 0xf8, 0x20, 0x11, - 0x9d, 0xf8, 0x73, 0x10, 0x89, 0x00, 0xc5, 0xf8, 0x24, 0x11, 0x9e, 0xe7, - 0x21, 0xf0, 0x7f, 0x41, 0xc5, 0xf8, 0xd8, 0x11, 0x9d, 0xf8, 0x73, 0x10, - 0x89, 0x00, 0xc5, 0xf8, 0xdc, 0x11, 0x94, 0xe7, 0x5a, 0xf0, 0xff, 0xff, - 0x59, 0xf0, 0xff, 0xff, 0x7e, 0xdf, 0x01, 0x08, 0x79, 0xdf, 0x01, 0x08, - 0xa3, 0x8e, 0x00, 0x08, 0x5e, 0xf0, 0xff, 0xff, 0x21, 0x9b, 0x01, 0x33, - 0xdb, 0x08, 0xc5, 0xe9, 0x44, 0x30, 0xd5, 0xf8, 0x0c, 0x31, 0x28, 0x2b, - 0x89, 0xbf, 0x9d, 0xf8, 0xa8, 0x30, 0x4f, 0xf4, 0x80, 0x76, 0x1b, 0x11, - 0x9e, 0x40, 0x9d, 0xf8, 0xbd, 0x30, 0x13, 0xf0, 0x08, 0x02, 0xc5, 0xf8, - 0xf0, 0x61, 0x5a, 0xd0, 0x00, 0x21, 0x00, 0x23, 0x00, 0x20, 0x4f, 0xf0, - 0xff, 0x32, 0x04, 0x93, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, - 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0xf0, 0x21, 0x28, 0x46, 0xff, 0xf7, - 0x7b, 0xfb, 0x00, 0x28, 0x8f, 0xd1, 0x28, 0x46, 0xff, 0xf7, 0xce, 0xfa, - 0x06, 0x46, 0x00, 0x28, 0x89, 0xd0, 0xd5, 0xf8, 0x0c, 0x01, 0x1c, 0x28, - 0x5f, 0xd9, 0x01, 0x23, 0x05, 0xf5, 0xdc, 0x71, 0x05, 0xf5, 0xe4, 0x7c, - 0x4f, 0xf0, 0xff, 0x3e, 0x98, 0x46, 0x22, 0x7f, 0x41, 0xf8, 0x04, 0xeb, - 0x08, 0xfa, 0x02, 0xf2, 0x01, 0x2a, 0xca, 0x60, 0x0e, 0xd9, 0x67, 0x7f, - 0x41, 0xf8, 0x04, 0x7c, 0xd5, 0xf8, 0x60, 0x71, 0xba, 0x42, 0x00, 0xd3, - 0x0f, 0xb9, 0xc5, 0xf8, 0x60, 0x21, 0x95, 0xf8, 0x54, 0x21, 0x1a, 0x43, - 0x85, 0xf8, 0x54, 0x21, 0x5b, 0x00, 0x8c, 0x45, 0x04, 0xf1, 0x02, 0x04, - 0xdb, 0xb2, 0xe2, 0xd1, 0x9d, 0xf8, 0x82, 0x30, 0x9f, 0x06, 0x3d, 0xd5, - 0x9d, 0xf8, 0x89, 0x30, 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, 0x88, 0x30, - 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x9b, 0x00, 0x85, 0xf8, 0xfd, 0x21, - 0x85, 0xf8, 0xfb, 0x31, 0x02, 0x23, 0x85, 0xf8, 0xf9, 0x31, 0x00, 0x26, - 0x85, 0xf8, 0xfe, 0x31, 0x41, 0xe0, 0xdb, 0x06, 0x7f, 0xf5, 0x45, 0xaf, - 0x00, 0x26, 0x00, 0x27, 0x04, 0x92, 0x4f, 0xf0, 0xff, 0x33, 0x00, 0x92, - 0x66, 0x21, 0x4f, 0xf0, 0xff, 0x32, 0x28, 0x46, 0xcd, 0xe9, 0x06, 0x67, - 0xcd, 0xe9, 0x02, 0x67, 0xff, 0xf7, 0x1e, 0xfb, 0x00, 0x28, 0x7f, 0xf4, - 0x32, 0xaf, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0x99, 0x21, - 0x04, 0x90, 0x00, 0x90, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x67, - 0x90, 0xe7, 0x9d, 0xf8, 0x81, 0x30, 0xff, 0x2b, 0xc5, 0xf8, 0x18, 0x31, - 0xbe, 0xd1, 0x1e, 0xe7, 0x10, 0x28, 0x66, 0xdd, 0x9d, 0xf8, 0x90, 0x20, - 0xd4, 0x06, 0x62, 0xd5, 0x9d, 0xf8, 0x9b, 0x30, 0xc5, 0xf8, 0xe0, 0x30, - 0x9d, 0xf8, 0x9a, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x9b, 0x00, - 0x85, 0xf8, 0xfd, 0x21, 0x85, 0xf8, 0xfb, 0x31, 0x02, 0x23, 0x85, 0xf8, - 0xf9, 0x31, 0x85, 0xf8, 0xfe, 0x31, 0x95, 0xf8, 0x00, 0x31, 0x93, 0xb3, - 0x00, 0x22, 0x9b, 0xf8, 0x00, 0x30, 0x18, 0xee, 0x10, 0x0a, 0x8d, 0xf8, - 0x60, 0x30, 0x11, 0x46, 0x02, 0x23, 0xad, 0xf8, 0x61, 0x20, 0xcd, 0xe9, - 0x02, 0x22, 0xcd, 0xe9, 0x00, 0x22, 0x02, 0xf0, 0xab, 0xfa, 0x00, 0xbb, - 0x18, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x49, 0xfb, 0xd8, 0xb9, 0x9d, 0xf8, - 0x62, 0x30, 0x28, 0x46, 0x43, 0xf0, 0x02, 0x03, 0x8d, 0xf8, 0x62, 0x30, - 0xff, 0xf7, 0x5c, 0xfa, 0x88, 0xb9, 0x18, 0xa9, 0x28, 0x46, 0xff, 0xf7, - 0xe4, 0xfa, 0x04, 0x46, 0x58, 0xb9, 0x28, 0x46, 0xff, 0xf7, 0x1a, 0xfa, - 0x38, 0xb1, 0x18, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x60, 0x40, 0x8d, 0xf8, - 0x62, 0x40, 0xff, 0xf7, 0x2c, 0xfb, 0x9b, 0xf8, 0x00, 0x20, 0x00, 0x23, - 0x8d, 0xf8, 0x3c, 0x20, 0x8d, 0xf8, 0x60, 0x20, 0x9d, 0xf8, 0xba, 0x20, - 0xad, 0xf8, 0x3d, 0x30, 0xc2, 0xf3, 0x02, 0x12, 0xad, 0xf8, 0x61, 0x30, - 0x01, 0x3a, 0x04, 0x2a, 0x00, 0xf2, 0xfe, 0x80, 0xdf, 0xe8, 0x12, 0xf0, - 0xb6, 0x00, 0x22, 0x01, 0x26, 0x01, 0xb6, 0x00, 0xb6, 0x00, 0x58, 0x06, - 0x0e, 0xd5, 0x9d, 0xf8, 0x8b, 0x30, 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, - 0x8a, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x85, 0xf8, 0xfd, 0x21, - 0x85, 0xf8, 0xfb, 0x31, 0x02, 0x23, 0x58, 0xe7, 0x9d, 0xf8, 0x90, 0x20, - 0xd1, 0x07, 0x7d, 0xd5, 0x9d, 0xf8, 0x97, 0x30, 0xc5, 0xf8, 0xe0, 0x30, - 0x9d, 0xf8, 0x96, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x5b, 0x00, - 0x85, 0xf8, 0xfd, 0x21, 0x85, 0xf8, 0xfb, 0x31, 0x01, 0x23, 0x85, 0xf8, - 0xf9, 0x31, 0x85, 0xf8, 0xfe, 0x31, 0x95, 0xf8, 0xf0, 0x30, 0xbb, 0xb1, - 0xd5, 0xf8, 0x0c, 0x31, 0x3f, 0x2b, 0x13, 0xdd, 0x9d, 0xf8, 0xbf, 0x30, - 0x13, 0xf0, 0x40, 0x02, 0x00, 0xf0, 0x5e, 0x81, 0x03, 0x23, 0x4f, 0xf0, - 0x00, 0x0b, 0x85, 0xf8, 0xfa, 0x31, 0x95, 0xf8, 0xfa, 0x31, 0x03, 0x2b, - 0x00, 0xf0, 0xe2, 0x81, 0xbb, 0xf1, 0x00, 0x0f, 0x7f, 0xf4, 0x73, 0xae, - 0x28, 0x46, 0xff, 0xf7, 0xb1, 0xf9, 0x00, 0x28, 0x3f, 0xf4, 0x6d, 0xae, - 0x0a, 0x9b, 0x18, 0xae, 0x4f, 0xf0, 0x00, 0x09, 0x0d, 0xf1, 0x80, 0x08, - 0x29, 0x46, 0x20, 0x93, 0xcd, 0xf8, 0x84, 0x90, 0x30, 0x46, 0x1c, 0xac, - 0x98, 0xe8, 0x0c, 0x00, 0xf4, 0xf7, 0x3c, 0xfd, 0xd5, 0xf8, 0x20, 0xb1, - 0x96, 0xe8, 0x0f, 0x00, 0x84, 0xe8, 0x0f, 0x00, 0xbb, 0xf1, 0x00, 0x0f, - 0x04, 0xd0, 0xd5, 0xf8, 0x24, 0x61, 0x00, 0x2e, 0x40, 0xf0, 0xc8, 0x81, - 0x01, 0x23, 0xc5, 0xf8, 0x28, 0x31, 0xd5, 0xe9, 0x44, 0x32, 0xc5, 0xf8, - 0x2c, 0x31, 0x13, 0xf1, 0xff, 0x33, 0x42, 0xf1, 0xff, 0x32, 0xc5, 0xe9, - 0x5a, 0x32, 0xd2, 0x4b, 0x28, 0x46, 0x1b, 0x78, 0x8d, 0xf8, 0x80, 0x30, - 0x00, 0x23, 0xad, 0xf8, 0x81, 0x30, 0xff, 0xf7, 0x79, 0xf9, 0x00, 0x28, - 0x3f, 0xf4, 0x35, 0xae, 0x95, 0xf8, 0x02, 0x41, 0x00, 0x2c, 0x00, 0xf0, - 0x09, 0x82, 0x01, 0x2c, 0x00, 0xf0, 0x20, 0x82, 0x28, 0x46, 0xff, 0xf7, - 0x6b, 0xf9, 0x00, 0x28, 0x3f, 0xf4, 0x27, 0xae, 0x01, 0x23, 0x85, 0xf8, - 0x04, 0x32, 0x26, 0xe5, 0xda, 0x06, 0x06, 0xd5, 0x9d, 0xf8, 0x8f, 0x30, - 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, 0x8e, 0x30, 0x7e, 0xe7, 0xdb, 0x07, - 0x0e, 0xd5, 0x9d, 0xf8, 0x8d, 0x30, 0xc5, 0xf8, 0xe0, 0x30, 0x9d, 0xf8, - 0x8c, 0x30, 0x03, 0xf0, 0x1f, 0x02, 0x5b, 0x11, 0x85, 0xf8, 0xfd, 0x21, - 0x85, 0xf8, 0xfb, 0x31, 0x01, 0x23, 0x78, 0xe7, 0x03, 0x23, 0xc5, 0xf8, - 0xe0, 0x30, 0x76, 0xe7, 0x01, 0x23, 0xc5, 0xf8, 0xf8, 0x30, 0xc5, 0xf8, - 0xfc, 0x30, 0xd5, 0xf8, 0xf8, 0x30, 0x5f, 0x1c, 0x09, 0xd0, 0xd5, 0xf8, - 0xfc, 0x10, 0x4c, 0x1c, 0x05, 0xd0, 0x34, 0xaa, 0x13, 0x44, 0x01, 0x22, - 0x8a, 0x40, 0x03, 0xf8, 0x94, 0x2c, 0x18, 0xa9, 0x28, 0x46, 0xff, 0xf7, - 0x4a, 0xfa, 0x9d, 0xf8, 0x62, 0x30, 0x9d, 0xf8, 0x3e, 0x20, 0x28, 0x46, - 0xbd, 0xf8, 0x3c, 0x10, 0x13, 0x43, 0xbd, 0xf8, 0x60, 0x20, 0x9d, 0xf8, - 0x3c, 0x70, 0x0a, 0x43, 0x18, 0xa9, 0x9d, 0xf8, 0x3d, 0x40, 0xad, 0xf8, - 0x60, 0x20, 0x8d, 0xf8, 0x62, 0x30, 0xff, 0xf7, 0xde, 0xf9, 0x28, 0x46, - 0xff, 0xf7, 0x16, 0xf9, 0x00, 0x28, 0x3f, 0xf4, 0xd2, 0xad, 0x00, 0x23, - 0x18, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x60, 0x30, 0x8d, 0xf8, 0x62, 0x30, - 0xff, 0xf7, 0x25, 0xfa, 0x9d, 0xf8, 0x60, 0x30, 0x1f, 0x40, 0x9d, 0xf8, - 0x61, 0x30, 0x1c, 0x40, 0x57, 0xea, 0x04, 0x03, 0x3f, 0xf4, 0xbf, 0xad, - 0x00, 0x2e, 0x3f, 0xf4, 0x2e, 0xaf, 0x9d, 0xf8, 0xb9, 0x30, 0x9d, 0xf8, - 0xb8, 0x20, 0x1b, 0x01, 0x03, 0xf0, 0x10, 0x03, 0x43, 0xea, 0x12, 0x13, - 0x08, 0x2b, 0x66, 0xd0, 0x37, 0xdc, 0x02, 0x2b, 0x23, 0xdc, 0x00, 0x2b, - 0x3f, 0xf4, 0x1d, 0xaf, 0x00, 0x21, 0x00, 0x23, 0x00, 0x20, 0x4f, 0xf0, - 0xff, 0x32, 0x04, 0x93, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, - 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0x38, 0x21, 0x28, 0x46, 0xff, 0xf7, - 0x83, 0xf9, 0x0a, 0xe7, 0xc5, 0xf8, 0xf8, 0x30, 0x06, 0x23, 0x92, 0xe7, - 0xc5, 0xf8, 0xf8, 0x30, 0x07, 0x23, 0x4f, 0xf0, 0x3e, 0x0e, 0xc5, 0xf8, - 0xfc, 0x30, 0x3f, 0x23, 0xc5, 0xe9, 0x3a, 0xe3, 0x89, 0xe7, 0x04, 0x2b, - 0x7f, 0xf4, 0xf9, 0xae, 0x00, 0x21, 0x00, 0x23, 0x00, 0x20, 0x4f, 0xf0, - 0xff, 0x32, 0x04, 0x93, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, - 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0x35, 0x21, 0xda, 0xe7, 0x10, 0x2b, - 0x7f, 0xf4, 0xe7, 0xae, 0x01, 0x26, 0x00, 0x27, 0x18, 0xac, 0x4f, 0xf0, - 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, 0x4f, 0xf0, 0x00, 0x0b, 0x4f, 0xf0, - 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0x65, 0x21, 0x28, 0x46, 0x04, 0x94, - 0xcd, 0xf8, 0x00, 0xb0, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x89, - 0xff, 0xf7, 0x46, 0xf9, 0x9d, 0xf8, 0x60, 0x30, 0x4f, 0xf0, 0xff, 0x32, - 0x61, 0x21, 0x03, 0xf0, 0x7f, 0x03, 0x04, 0x94, 0xcd, 0xf8, 0x00, 0xb0, - 0x8d, 0xf8, 0x60, 0x30, 0x4f, 0xf0, 0xff, 0x33, 0xcd, 0xe9, 0x06, 0x67, - 0xcd, 0xe9, 0x02, 0x89, 0xac, 0xe7, 0x01, 0x26, 0x00, 0x27, 0x18, 0xac, - 0x4f, 0xf0, 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, 0x4f, 0xf0, 0x00, 0x0b, - 0x52, 0x4a, 0x00, 0x23, 0x65, 0x21, 0x28, 0x46, 0x04, 0x94, 0xcd, 0xf8, - 0x00, 0xb0, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x89, 0xff, 0xf7, - 0x1d, 0xf9, 0x9d, 0xf8, 0x60, 0x30, 0x4b, 0x4a, 0x71, 0x21, 0x43, 0xf0, - 0x40, 0x03, 0x04, 0x94, 0xcd, 0xf8, 0x00, 0xb0, 0x8d, 0xf8, 0x60, 0x30, - 0x00, 0x23, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, 0x02, 0x89, 0x85, 0xe7, - 0xd8, 0x07, 0x11, 0xd5, 0x00, 0x20, 0x00, 0x21, 0x04, 0x92, 0x00, 0x92, - 0xcd, 0xe9, 0x06, 0x01, 0xcd, 0xe9, 0x02, 0x01, 0x4f, 0xf0, 0xff, 0x32, - 0x4f, 0xf0, 0xff, 0x33, 0xb7, 0x21, 0x28, 0x46, 0xff, 0xf7, 0xfa, 0xf8, - 0x60, 0xbb, 0x8d, 0xe6, 0x13, 0xf0, 0x02, 0x02, 0x0d, 0xd0, 0x28, 0x46, - 0xff, 0xf7, 0x82, 0xf8, 0x00, 0x28, 0x65, 0xd1, 0x00, 0x22, 0x00, 0x23, - 0x04, 0x90, 0x00, 0x90, 0xcd, 0xe9, 0x06, 0x23, 0xcd, 0xe9, 0x02, 0x23, - 0xe4, 0xe7, 0x13, 0xf0, 0x10, 0x01, 0x39, 0xd0, 0x01, 0x26, 0x00, 0x27, - 0x18, 0xac, 0x4f, 0xf0, 0x00, 0x08, 0x4f, 0xf0, 0x00, 0x09, 0x8d, 0xf8, - 0x60, 0x20, 0x00, 0x92, 0x4f, 0xf0, 0xff, 0x33, 0x4f, 0xf0, 0xff, 0x32, - 0xb5, 0x21, 0x28, 0x46, 0x04, 0x94, 0xcd, 0xe9, 0x06, 0x67, 0xcd, 0xe9, - 0x02, 0x89, 0xff, 0xf7, 0xcd, 0xf8, 0x10, 0xb1, 0xdf, 0xf8, 0x90, 0xb0, - 0x63, 0xe6, 0x9d, 0xf8, 0x60, 0x30, 0x28, 0x46, 0x43, 0xf0, 0x01, 0x03, - 0x8d, 0xf8, 0x60, 0x30, 0xff, 0xf7, 0x50, 0xf8, 0x83, 0x46, 0x98, 0xbb, - 0x04, 0x90, 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0xff, 0x33, 0xb1, 0x21, - 0x28, 0x46, 0x00, 0x94, 0xcd, 0xe9, 0x06, 0x89, 0xcd, 0xe9, 0x02, 0x67, - 0xff, 0xf7, 0xb0, 0xf8, 0x00, 0x28, 0xe1, 0xd1, 0x03, 0x23, 0x85, 0xf8, - 0xfa, 0x31, 0x44, 0xe6, 0x13, 0xf0, 0x08, 0x00, 0x13, 0xd0, 0x80, 0x23, - 0x00, 0x22, 0x04, 0x91, 0x17, 0x21, 0x8d, 0xf8, 0x60, 0x30, 0x00, 0x23, - 0xcd, 0xe9, 0x06, 0x23, 0x01, 0x22, 0x00, 0x23, 0xcd, 0xe9, 0x02, 0x23, - 0x18, 0xab, 0x4f, 0xf0, 0xff, 0x32, 0x00, 0x93, 0x4f, 0xf0, 0xff, 0x33, - 0x95, 0xe7, 0x13, 0xf0, 0x04, 0x0b, 0x4f, 0xf0, 0x02, 0x03, 0xe0, 0xd0, - 0xc5, 0x22, 0xc5, 0xf8, 0xf4, 0x20, 0x20, 0xe6, 0xdf, 0xf8, 0x10, 0xb0, - 0x21, 0xe6, 0x00, 0xbf, 0x7e, 0xdf, 0x01, 0x08, 0x03, 0x00, 0x80, 0x00, - 0x5e, 0xf0, 0xff, 0xff, 0x5c, 0xf0, 0xff, 0xff, 0x00, 0x22, 0x18, 0xee, - 0x10, 0x0a, 0x11, 0x46, 0xcd, 0xe9, 0x02, 0x22, 0xcd, 0xe9, 0x00, 0x22, - 0x02, 0xf0, 0x44, 0xf8, 0x00, 0x28, 0x3f, 0xf4, 0x11, 0xae, 0x86, 0xe4, - 0x30, 0x46, 0x0c, 0xf0, 0xbd, 0xfe, 0x07, 0x46, 0x00, 0x28, 0x3f, 0xf4, - 0x80, 0xac, 0x5a, 0x23, 0x08, 0x21, 0x03, 0x90, 0x5a, 0x46, 0x20, 0x46, - 0xcd, 0xe9, 0x01, 0x31, 0x01, 0x23, 0x1f, 0x99, 0x00, 0x93, 0x4b, 0x46, - 0xcd, 0xe9, 0x04, 0x69, 0x88, 0x47, 0x00, 0x28, 0x3d, 0xdb, 0x3e, 0x78, - 0xd5, 0xf8, 0x24, 0xc1, 0x16, 0xf0, 0x02, 0x06, 0x94, 0xe8, 0x0f, 0x00, - 0x88, 0xe8, 0x0f, 0x00, 0x40, 0xf0, 0xb9, 0x80, 0x07, 0xeb, 0x0c, 0x09, - 0x3c, 0x46, 0x08, 0x34, 0xa1, 0x45, 0x2c, 0xd3, 0x01, 0x20, 0x00, 0x21, - 0x14, 0xf8, 0x06, 0x3c, 0x14, 0xf8, 0x05, 0xbc, 0x54, 0xf8, 0x04, 0x2c, - 0xcd, 0xe9, 0x04, 0x01, 0x0f, 0xa9, 0x40, 0x46, 0x03, 0x91, 0x03, 0xf0, - 0x0f, 0x01, 0x9b, 0x09, 0x02, 0x91, 0x14, 0xf8, 0x07, 0x1c, 0x00, 0x93, - 0x00, 0x23, 0x01, 0x91, 0x23, 0x99, 0x88, 0x47, 0x00, 0x28, 0x12, 0xdb, - 0x9d, 0xf8, 0x3c, 0x30, 0x76, 0x00, 0x14, 0xf8, 0x08, 0x2c, 0x1b, 0xea, - 0x03, 0x0f, 0xf6, 0xb2, 0x23, 0x78, 0x18, 0xbf, 0x46, 0xf0, 0x01, 0x06, - 0xd2, 0x07, 0x03, 0xf0, 0x02, 0x03, 0x00, 0xf1, 0x8a, 0x80, 0x00, 0x2b, - 0xcf, 0xd0, 0x4f, 0xf0, 0xff, 0x34, 0x7b, 0xe0, 0x09, 0x99, 0x01, 0x33, - 0x49, 0x00, 0x04, 0x2b, 0xc9, 0xb2, 0x09, 0x91, 0x69, 0xd1, 0x73, 0xe0, - 0x28, 0x46, 0xfe, 0xf7, 0x9d, 0xff, 0x00, 0x28, 0x7f, 0xf4, 0x21, 0xac, - 0x00, 0x22, 0x00, 0x23, 0x04, 0x90, 0x98, 0x21, 0x00, 0x90, 0x28, 0x46, - 0xcd, 0xe9, 0x06, 0x23, 0xcd, 0xe9, 0x02, 0x23, 0x4f, 0xf0, 0xff, 0x32, - 0x4f, 0xf0, 0xff, 0x33, 0xfe, 0xf7, 0xfa, 0xff, 0x00, 0x28, 0x3f, 0xf4, - 0xe1, 0xad, 0x0c, 0xe4, 0x20, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x65, 0xf8, - 0x00, 0x28, 0x7f, 0xf4, 0x06, 0xac, 0xd5, 0xf8, 0xf8, 0x30, 0x7b, 0xb9, - 0xd5, 0xf8, 0xfc, 0x30, 0x9c, 0x40, 0x44, 0xf0, 0x03, 0x04, 0xe4, 0xb2, - 0x9d, 0xf8, 0x80, 0x30, 0x20, 0xa9, 0x28, 0x46, 0x1c, 0x40, 0x8d, 0xf8, - 0x80, 0x40, 0xfe, 0xf7, 0xfa, 0xff, 0xe1, 0xe7, 0x03, 0x24, 0xf3, 0xe7, - 0xdf, 0xf8, 0xc4, 0xa0, 0xff, 0xf7, 0xf1, 0xba, 0x0c, 0xf1, 0x01, 0x03, - 0x0a, 0x2b, 0xc5, 0xf8, 0x28, 0x31, 0xb4, 0xdc, 0x6f, 0xf4, 0xaa, 0x79, - 0x04, 0x34, 0x05, 0xf5, 0x96, 0x78, 0x05, 0xf5, 0xaa, 0x76, 0x05, 0xf5, - 0xb4, 0x7e, 0x00, 0x21, 0x0f, 0x22, 0xa9, 0xeb, 0x05, 0x09, 0x23, 0x68, - 0x14, 0xf8, 0x04, 0x0b, 0x23, 0xf0, 0xff, 0x03, 0x00, 0xf0, 0x0f, 0x00, - 0x03, 0xf5, 0x80, 0x73, 0x02, 0x40, 0x48, 0xf8, 0x04, 0x3b, 0x01, 0x3b, - 0x06, 0xf8, 0x01, 0x0b, 0x0b, 0x44, 0xd9, 0x17, 0x18, 0x46, 0xee, 0xe8, - 0x02, 0x01, 0x59, 0x1c, 0x09, 0xeb, 0x06, 0x03, 0x9c, 0x45, 0xe6, 0xdc, - 0x00, 0x23, 0xc5, 0xf8, 0x60, 0x31, 0x09, 0x99, 0x11, 0xea, 0x02, 0x04, - 0x8a, 0xd0, 0x05, 0xeb, 0x83, 0x03, 0x00, 0x24, 0xd3, 0xf8, 0xc8, 0x31, - 0xc5, 0xf8, 0x60, 0x31, 0x38, 0x46, 0x0c, 0xf0, 0xf1, 0xfd, 0x01, 0x34, - 0x3f, 0xf4, 0xad, 0xab, 0x69, 0xe5, 0x3c, 0x46, 0x4e, 0x46, 0xd5, 0xf8, - 0x24, 0x21, 0x3a, 0x44, 0x21, 0x78, 0x88, 0x07, 0x7f, 0xf5, 0x71, 0xaf, - 0x04, 0xf1, 0x08, 0x03, 0x9a, 0x42, 0xff, 0xf4, 0x6c, 0xaf, 0x94, 0xf8, - 0x02, 0xc0, 0x0c, 0xf1, 0x02, 0x03, 0x04, 0xeb, 0x83, 0x03, 0x9a, 0x42, - 0xff, 0xf4, 0x63, 0xaf, 0x60, 0x78, 0xb0, 0x42, 0xa4, 0xd0, 0xc9, 0x07, - 0x3f, 0xf5, 0x5d, 0xaf, 0x1c, 0x46, 0xe5, 0xe7, 0x5d, 0xf0, 0xff, 0xff, - 0x70, 0x47, 0x00, 0x00, 0x09, 0x4b, 0x0a, 0x48, 0x5b, 0x68, 0x70, 0xb5, - 0x90, 0x24, 0x8d, 0x18, 0x04, 0xfb, 0x03, 0x03, 0x8d, 0x42, 0x07, 0xd0, - 0x11, 0xf8, 0x01, 0x4b, 0x18, 0x68, 0xc6, 0x69, 0x36, 0x06, 0xfc, 0xd5, - 0x84, 0x62, 0xf5, 0xe7, 0x10, 0x46, 0x70, 0xbd, 0xa0, 0x6a, 0x00, 0x24, - 0x80, 0x6c, 0x00, 0x24, 0x00, 0x20, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, - 0x6f, 0xf0, 0x15, 0x00, 0x70, 0x47, 0x6f, 0xf0, 0x1c, 0x00, 0x70, 0x47, - 0x03, 0x68, 0x1b, 0x68, 0x18, 0x47, 0x6f, 0xf0, 0x15, 0x00, 0x70, 0x47, - 0x11, 0x20, 0x70, 0x47, 0xbf, 0xf3, 0x5f, 0x8f, 0x01, 0x22, 0x08, 0x49, - 0x8a, 0x60, 0x01, 0x32, 0x0b, 0x69, 0x04, 0x2a, 0x23, 0xf0, 0x01, 0x03, - 0x43, 0xea, 0x00, 0x03, 0x0b, 0x61, 0xf5, 0xd1, 0xbf, 0xf3, 0x4f, 0x8f, - 0xbf, 0xf3, 0x6f, 0x8f, 0x70, 0x47, 0x00, 0xbf, 0x90, 0xed, 0x00, 0xe0, - 0xbf, 0xf3, 0x5f, 0x8f, 0x06, 0x4a, 0x00, 0x23, 0x93, 0x60, 0x13, 0x69, - 0x23, 0xf0, 0x01, 0x03, 0x18, 0x43, 0x10, 0x61, 0xbf, 0xf3, 0x4f, 0x8f, - 0xbf, 0xf3, 0x6f, 0x8f, 0x70, 0x47, 0x00, 0xbf, 0x90, 0xed, 0x00, 0xe0, - 0x70, 0x47, 0x2d, 0xe9, 0xf0, 0x47, 0x46, 0x68, 0x96, 0xf8, 0x32, 0x70, - 0x87, 0xbb, 0x03, 0x68, 0x5b, 0x68, 0x98, 0x47, 0x34, 0x6a, 0x84, 0x42, - 0x2a, 0xd0, 0x33, 0x69, 0x04, 0x1b, 0x96, 0xf9, 0x34, 0x20, 0x1c, 0x40, - 0xb3, 0x68, 0x30, 0x62, 0xa4, 0xfb, 0x03, 0x45, 0xca, 0xb1, 0x73, 0x6a, - 0x14, 0xeb, 0x03, 0x08, 0x45, 0xf1, 0x00, 0x09, 0x00, 0x2a, 0x1b, 0xdb, - 0xc2, 0xf1, 0x20, 0x01, 0xa2, 0xf1, 0x20, 0x03, 0x28, 0xfa, 0x02, 0xf4, - 0x29, 0xfa, 0x02, 0xf5, 0x09, 0xfa, 0x01, 0xf1, 0x29, 0xfa, 0x03, 0xf3, - 0x0c, 0x43, 0x1c, 0x43, 0x04, 0xfa, 0x02, 0xf2, 0xa8, 0xeb, 0x02, 0x02, - 0x72, 0x62, 0xd6, 0xe9, 0x0a, 0x32, 0x1b, 0x19, 0x45, 0xeb, 0x02, 0x02, - 0xc6, 0xe9, 0x0a, 0x32, 0xbd, 0xe8, 0xf0, 0x87, 0xd6, 0xf8, 0x0c, 0xa0, - 0x3b, 0x46, 0x40, 0x46, 0x49, 0x46, 0x52, 0x46, 0x0e, 0xf0, 0x7a, 0xfc, - 0x04, 0x46, 0x0d, 0x46, 0x0a, 0xfb, 0x10, 0x82, 0xe8, 0xe7, 0x2d, 0xe9, - 0xf1, 0x4f, 0x46, 0x68, 0x05, 0x46, 0x37, 0x6b, 0x27, 0xf0, 0x7f, 0x47, - 0x27, 0xf0, 0xff, 0x07, 0x00, 0x2f, 0x57, 0xd1, 0xff, 0xf7, 0xad, 0xff, - 0x73, 0x68, 0x00, 0x2b, 0x60, 0xd0, 0xd5, 0xf8, 0x00, 0xa0, 0xd3, 0xe9, - 0x00, 0x01, 0xd6, 0xe9, 0x0a, 0x23, 0x8b, 0x42, 0x08, 0xbf, 0x82, 0x42, - 0x05, 0xd3, 0xda, 0xf8, 0x14, 0x30, 0x01, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, - 0x18, 0x47, 0x6c, 0x68, 0xd4, 0xe9, 0x0a, 0x32, 0xd4, 0xf8, 0x14, 0xb0, - 0xb0, 0xeb, 0x03, 0x08, 0x61, 0xeb, 0x02, 0x09, 0xd4, 0xe9, 0x06, 0x23, - 0x4b, 0x45, 0x08, 0xbf, 0x42, 0x45, 0x20, 0xd3, 0xe3, 0x68, 0x94, 0xf9, - 0x33, 0xc0, 0xa3, 0xfb, 0x08, 0x01, 0x03, 0xfb, 0x09, 0x11, 0xbc, 0xf1, - 0x00, 0x0f, 0x13, 0xd0, 0xa2, 0x68, 0x53, 0x1e, 0xc0, 0x18, 0x41, 0xf1, - 0x00, 0x01, 0xbc, 0xf1, 0x00, 0x0f, 0x24, 0xdb, 0xcc, 0xf1, 0x20, 0x02, - 0xac, 0xf1, 0x20, 0x03, 0x20, 0xfa, 0x0c, 0xf0, 0x01, 0xfa, 0x02, 0xf2, - 0x21, 0xfa, 0x03, 0xf3, 0x10, 0x43, 0x18, 0x43, 0x83, 0x45, 0x28, 0xbf, - 0x83, 0x46, 0x23, 0x6a, 0x9b, 0x44, 0x23, 0x69, 0x0b, 0xea, 0x03, 0x0b, - 0xda, 0xf8, 0x10, 0x30, 0x58, 0x46, 0x98, 0x47, 0x2b, 0x68, 0x5b, 0x68, - 0x98, 0x47, 0x33, 0x6a, 0x5b, 0x45, 0x0a, 0xd2, 0x58, 0x45, 0x0c, 0xd2, - 0x83, 0x42, 0x0a, 0xd8, 0x01, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x3b, 0x46, - 0x0e, 0xf0, 0x0c, 0xfc, 0xe2, 0xe7, 0x83, 0x42, 0xf6, 0xd9, 0x58, 0x45, - 0xf4, 0xd3, 0x2b, 0x68, 0x5b, 0x69, 0xaa, 0xe7, 0x73, 0x69, 0x30, 0x6a, - 0x32, 0x69, 0x18, 0x44, 0x2b, 0x68, 0x10, 0x40, 0x1b, 0x69, 0x01, 0xb0, - 0xbd, 0xe8, 0xf0, 0x4f, 0x18, 0x47, 0x84, 0xb0, 0x01, 0xa8, 0x04, 0xb0, - 0x80, 0xe8, 0x0e, 0x00, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, 0x00, 0x29, - 0x0c, 0xbf, 0x6f, 0xf0, 0x18, 0x00, 0x00, 0x20, 0x70, 0x47, 0x41, 0x68, - 0x03, 0x46, 0x30, 0xb4, 0x71, 0xb1, 0xd0, 0xe9, 0x03, 0x20, 0x00, 0xf0, - 0x01, 0x04, 0x02, 0xb9, 0x44, 0xb1, 0x45, 0x10, 0x01, 0xeb, 0x60, 0x00, - 0x0c, 0xb1, 0x49, 0x59, 0x8a, 0x58, 0x99, 0x68, 0x30, 0xbc, 0x10, 0x47, - 0x30, 0xbc, 0x70, 0x47, 0x6f, 0xf0, 0x15, 0x00, 0x70, 0x47, 0x03, 0x68, - 0x00, 0x22, 0x1b, 0x69, 0x11, 0x46, 0x18, 0x47, 0x03, 0x68, 0x01, 0x22, - 0x00, 0x21, 0x1b, 0x69, 0x18, 0x47, 0x00, 0x00, 0x30, 0xb1, 0x03, 0x68, - 0x23, 0xb1, 0x1b, 0x79, 0x05, 0x2b, 0x03, 0xd0, 0x06, 0x2b, 0x24, 0xd0, - 0x20, 0x48, 0x70, 0x47, 0x43, 0x68, 0x00, 0x20, 0xdf, 0xf8, 0xa4, 0xc0, - 0x1e, 0x4a, 0x1f, 0x49, 0xc3, 0xe9, 0x02, 0xc2, 0x02, 0xf1, 0x79, 0x42, - 0xdf, 0xf8, 0x98, 0xc0, 0x02, 0xf5, 0x74, 0x02, 0x02, 0xf5, 0x01, 0x62, - 0x1a, 0x61, 0x1a, 0x4a, 0xc3, 0xe9, 0x05, 0x12, 0x02, 0xf1, 0xd1, 0x42, - 0x02, 0xf5, 0xc0, 0x12, 0x02, 0xf5, 0x1e, 0x62, 0xda, 0x61, 0x16, 0x4a, - 0xc3, 0xe9, 0x08, 0xc2, 0x01, 0x22, 0xc3, 0xe9, 0x00, 0x00, 0x9a, 0x66, - 0x70, 0x47, 0x43, 0x68, 0x00, 0x20, 0x12, 0x49, 0x12, 0x4a, 0xdf, 0xf8, - 0x64, 0xc0, 0x98, 0x66, 0xc3, 0xe9, 0x02, 0x12, 0x10, 0x4a, 0x11, 0x49, - 0xc3, 0xe9, 0x04, 0xc2, 0x10, 0x4a, 0xc3, 0xe9, 0x06, 0x12, 0x10, 0x4a, - 0x1a, 0x62, 0x02, 0xf1, 0x74, 0x52, 0xa2, 0xf5, 0x23, 0x02, 0xa2, 0xf6, - 0x92, 0x42, 0xc3, 0xe9, 0x00, 0x00, 0x5a, 0x62, 0x70, 0x47, 0x00, 0xbf, - 0x00, 0xaf, 0xff, 0xff, 0x07, 0xd5, 0x7c, 0x36, 0x39, 0x59, 0x0e, 0xf7, - 0x31, 0x0b, 0xc0, 0xff, 0xa4, 0x4f, 0xfa, 0xbe, 0x67, 0xe6, 0x09, 0x6a, - 0x85, 0xae, 0x67, 0xbb, 0x3a, 0xf5, 0x4f, 0xa5, 0x7f, 0x52, 0x0e, 0x51, - 0x8c, 0x68, 0x05, 0x9b, 0xab, 0xd9, 0x83, 0x1f, 0xd8, 0x9e, 0x05, 0xc1, - 0xa7, 0x8f, 0xf9, 0x64, 0x72, 0xf3, 0x6e, 0x3c, 0x13, 0x78, 0x10, 0xb5, - 0x04, 0x68, 0x8c, 0x42, 0x38, 0xbf, 0x01, 0x3b, 0x13, 0x70, 0x03, 0x68, - 0x59, 0x1a, 0x01, 0x60, 0x10, 0xbd, 0x03, 0x68, 0x59, 0x18, 0x01, 0x60, - 0x28, 0xbf, 0x01, 0x23, 0x11, 0x78, 0x38, 0xbf, 0x00, 0x23, 0x0b, 0x44, - 0x13, 0x70, 0x70, 0x47, 0x43, 0x68, 0x30, 0xb5, 0x2b, 0xb9, 0x4a, 0x68, - 0x62, 0xb9, 0x18, 0x1e, 0x18, 0xbf, 0x01, 0x20, 0x28, 0xe0, 0x82, 0x68, - 0x02, 0xeb, 0x83, 0x02, 0x52, 0xf8, 0x04, 0x2c, 0x00, 0x2a, 0xf2, 0xd1, - 0x01, 0x3b, 0xef, 0xe7, 0x8c, 0x68, 0x04, 0xeb, 0x82, 0x05, 0x55, 0xf8, - 0x04, 0x5c, 0x85, 0xb9, 0x01, 0x3a, 0xe9, 0xe7, 0x82, 0x68, 0x52, 0xf8, - 0x23, 0x10, 0x54, 0xf8, 0x23, 0x20, 0x91, 0x42, 0x05, 0xd8, 0x03, 0xf1, - 0xff, 0x33, 0x0a, 0xd2, 0x4f, 0xf0, 0xff, 0x30, 0x0a, 0xe0, 0x01, 0x20, - 0x08, 0xe0, 0x0b, 0xb1, 0x93, 0x42, 0xfa, 0xd8, 0x93, 0x42, 0xf5, 0xd3, - 0x01, 0x3b, 0x5a, 0x1c, 0xe8, 0xd1, 0x00, 0x20, 0x30, 0xbd, 0x00, 0x21, - 0xf0, 0xb5, 0x0a, 0x46, 0x45, 0x68, 0x95, 0x42, 0x02, 0xd1, 0x00, 0x24, - 0x20, 0x46, 0xf0, 0xbd, 0x83, 0x68, 0x53, 0xf8, 0x22, 0x60, 0x00, 0x23, - 0x26, 0xfa, 0x03, 0xf7, 0xcc, 0x18, 0xff, 0x07, 0xf4, 0xd4, 0x01, 0x33, - 0x20, 0x2b, 0x01, 0xeb, 0x03, 0x04, 0xf5, 0xd1, 0x01, 0x32, 0x21, 0x46, - 0xe9, 0xe7, 0x03, 0x68, 0x70, 0xb5, 0xcd, 0x1a, 0x00, 0x2d, 0x0d, 0xdd, - 0x93, 0xf9, 0x00, 0x60, 0x1c, 0x78, 0x00, 0x2e, 0x0b, 0xdb, 0x5c, 0x1c, - 0x04, 0x60, 0x1b, 0x78, 0x13, 0x60, 0x03, 0x68, 0xc9, 0x1a, 0x13, 0x68, - 0x8b, 0x42, 0x34, 0xd9, 0x6f, 0xf0, 0x5f, 0x00, 0x70, 0xbd, 0x04, 0xf0, - 0x7f, 0x04, 0x01, 0x3c, 0x03, 0x2c, 0x29, 0xd8, 0xdf, 0xe8, 0x04, 0xf0, - 0x02, 0x09, 0x12, 0x20, 0x01, 0x2d, 0xf1, 0xd0, 0x5c, 0x78, 0x02, 0x33, - 0x14, 0x60, 0x03, 0x60, 0xe7, 0xe7, 0x02, 0x2d, 0xea, 0xdd, 0xb3, 0xf8, - 0x01, 0x40, 0x03, 0x33, 0x64, 0xba, 0xa4, 0xb2, 0x14, 0x60, 0xf4, 0xe7, - 0x03, 0x2d, 0xe1, 0xdd, 0x9c, 0x78, 0x04, 0x33, 0x13, 0xf8, 0x03, 0x5c, - 0x24, 0x02, 0x44, 0xea, 0x05, 0x44, 0x13, 0xf8, 0x01, 0x5c, 0x2c, 0x43, - 0x14, 0x60, 0xe6, 0xe7, 0x04, 0x2d, 0xd3, 0xdd, 0xd3, 0xf8, 0x01, 0x40, - 0x05, 0x33, 0x24, 0xba, 0x14, 0x60, 0xde, 0xe7, 0x6f, 0xf0, 0x63, 0x00, - 0xcc, 0xe7, 0x00, 0x20, 0xca, 0xe7, 0x00, 0x00, 0x02, 0x4b, 0x98, 0x7a, - 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, 0x70, 0x47, 0x1c, 0x01, 0x00, 0x24, - 0x08, 0xb5, 0x05, 0xf0, 0x75, 0xfc, 0xfc, 0xe7, 0x70, 0xb5, 0x14, 0x46, - 0x6f, 0xf0, 0x00, 0x46, 0x12, 0x68, 0x05, 0x46, 0x04, 0x98, 0xb2, 0x42, - 0x07, 0xd2, 0x38, 0xb1, 0x01, 0x46, 0x18, 0x46, 0x0d, 0xf0, 0xa2, 0xfe, - 0x43, 0x1c, 0x05, 0xd1, 0x20, 0x60, 0x70, 0xbd, 0x15, 0xb1, 0x8a, 0x42, - 0x38, 0xbf, 0xab, 0x54, 0x23, 0x68, 0x01, 0x33, 0x23, 0x60, 0xf6, 0xe7, - 0x2d, 0xe9, 0xf0, 0x4f, 0x89, 0xb0, 0x00, 0x24, 0x05, 0x46, 0x9d, 0xf8, - 0x50, 0xa0, 0x9d, 0xf8, 0x48, 0x00, 0xa2, 0x45, 0xdd, 0xf8, 0x54, 0x80, - 0x07, 0x94, 0x14, 0xbf, 0x4f, 0xf0, 0x30, 0x0b, 0x4f, 0xf0, 0x20, 0x0b, - 0x01, 0x28, 0xcd, 0xe9, 0x05, 0x44, 0x3f, 0xd1, 0xa3, 0x42, 0x3d, 0xda, - 0x5b, 0x42, 0x81, 0x46, 0x84, 0x1e, 0x00, 0x27, 0x0d, 0xf1, 0x14, 0x0c, - 0x4f, 0xf0, 0x0a, 0x0e, 0xe4, 0xb2, 0x02, 0x94, 0x02, 0x9c, 0x01, 0x2c, - 0x56, 0xd8, 0x02, 0x28, 0x03, 0xf0, 0x0f, 0x04, 0x4f, 0xea, 0x13, 0x13, - 0x0c, 0xbf, 0x33, 0x4e, 0x33, 0x4e, 0x34, 0x5d, 0x0c, 0xf8, 0x07, 0x40, - 0x7c, 0x1c, 0x00, 0x2b, 0x46, 0xd1, 0xb9, 0xf1, 0x00, 0x0f, 0x27, 0xd0, - 0xba, 0xf1, 0x00, 0x0f, 0x09, 0xd0, 0x2d, 0x23, 0x28, 0x46, 0xcd, 0xf8, - 0x00, 0x80, 0xcd, 0xe9, 0x02, 0x12, 0xff, 0xf7, 0xa5, 0xff, 0xdd, 0xe9, - 0x02, 0x12, 0xbc, 0x1c, 0x13, 0x9b, 0x9c, 0x42, 0x1b, 0xdb, 0xba, 0xf1, - 0x00, 0x0f, 0x09, 0xd1, 0x2d, 0x23, 0x28, 0x46, 0xcd, 0xf8, 0x00, 0x80, - 0xcd, 0xe9, 0x02, 0x12, 0xff, 0xf7, 0x94, 0xff, 0xdd, 0xe9, 0x02, 0x12, - 0x01, 0x3c, 0x1e, 0xe0, 0x13, 0xb1, 0x4f, 0xf0, 0x00, 0x09, 0xbf, 0xe7, - 0x30, 0x23, 0x01, 0x24, 0x8d, 0xf8, 0x14, 0x30, 0x13, 0x9b, 0x9c, 0x42, - 0x13, 0xda, 0x4f, 0xf0, 0x00, 0x09, 0x5b, 0x46, 0x28, 0x46, 0xcd, 0xf8, - 0x00, 0x80, 0xcd, 0xe9, 0x02, 0x12, 0xff, 0xf7, 0x7b, 0xff, 0x13, 0x9b, - 0x01, 0x3b, 0xa3, 0x42, 0x13, 0x93, 0xdd, 0xe9, 0x02, 0x12, 0xf0, 0xdc, - 0xb9, 0xf1, 0x00, 0x0f, 0xd1, 0xd1, 0x05, 0xae, 0x6c, 0xb9, 0x09, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x27, 0x46, 0xa5, 0xe7, 0xb3, 0xfb, 0xfe, 0xf4, - 0x0e, 0xfb, 0x14, 0x33, 0x30, 0x33, 0x0c, 0xf8, 0x07, 0x30, 0x23, 0x46, - 0xaa, 0xe7, 0x01, 0x3c, 0xcd, 0xf8, 0x00, 0x80, 0x28, 0x46, 0x33, 0x5d, - 0xcd, 0xe9, 0x02, 0x12, 0xff, 0xf7, 0x58, 0xff, 0xdd, 0xe9, 0x02, 0x12, - 0xe4, 0xe7, 0x00, 0xbf, 0xef, 0xe6, 0x01, 0x08, 0xff, 0xe6, 0x01, 0x08, - 0x2d, 0xe9, 0xf0, 0x4f, 0x1c, 0x46, 0x89, 0xb0, 0x00, 0x23, 0x89, 0x46, - 0x12, 0x9e, 0x15, 0x46, 0x07, 0x93, 0xb2, 0xb1, 0x99, 0x42, 0x14, 0xdb, - 0x0c, 0xbf, 0x01, 0x23, 0x01, 0xf1, 0xff, 0x39, 0x4f, 0xf0, 0x00, 0x0b, - 0x04, 0x93, 0x15, 0xf8, 0x0b, 0x30, 0x73, 0xb9, 0x48, 0xb1, 0x04, 0x9b, - 0x3b, 0xb9, 0x07, 0x9b, 0x4b, 0x45, 0x95, 0xbf, 0x04, 0x9a, 0x04, 0x9b, - 0xc2, 0x54, 0x00, 0xf8, 0x09, 0x30, 0x07, 0x98, 0x09, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x25, 0x2b, 0x40, 0xf0, 0x02, 0x81, 0x0b, 0xf1, 0x01, 0x08, - 0x15, 0xf8, 0x08, 0x30, 0x20, 0x3b, 0xdb, 0xb2, 0x0d, 0x2b, 0x07, 0xd8, - 0x42, 0xf6, 0x09, 0x02, 0x22, 0xfa, 0x03, 0xf3, 0xdb, 0x07, 0x48, 0xbf, - 0x0b, 0xf1, 0x02, 0x08, 0x15, 0xf8, 0x08, 0x30, 0x2a, 0x2b, 0x1d, 0xd1, - 0x00, 0x21, 0x08, 0xf1, 0x01, 0x02, 0x04, 0x34, 0x8e, 0x46, 0xaf, 0x5c, - 0xab, 0x18, 0x2e, 0x2f, 0x51, 0xd1, 0x5f, 0x78, 0x2a, 0x2f, 0x2c, 0xd0, - 0x4f, 0xf0, 0x00, 0x0a, 0xc5, 0xf1, 0x01, 0x0c, 0x0c, 0xeb, 0x03, 0x02, - 0x13, 0xf8, 0x01, 0x7f, 0x30, 0x3f, 0x5f, 0xfa, 0x87, 0xf8, 0xb8, 0xf1, - 0x09, 0x0f, 0x21, 0xd8, 0x0a, 0x22, 0x02, 0xfb, 0x0a, 0x7a, 0xf1, 0xe7, - 0x30, 0x2b, 0x15, 0xd1, 0x08, 0xf1, 0x01, 0x08, 0x15, 0xf8, 0x08, 0x30, - 0x30, 0x2b, 0xf9, 0xd0, 0x4f, 0xf0, 0x01, 0x0e, 0xa8, 0x44, 0x00, 0x21, - 0xa8, 0xeb, 0x05, 0x02, 0x18, 0xf8, 0x01, 0x3b, 0x30, 0x3b, 0xdf, 0xb2, - 0x09, 0x2f, 0xd2, 0xd8, 0x0a, 0x22, 0x02, 0xfb, 0x01, 0x31, 0xf3, 0xe7, - 0x4f, 0xf0, 0x00, 0x0e, 0xee, 0xe7, 0x02, 0x32, 0x54, 0xf8, 0x04, 0xab, - 0xab, 0x5c, 0x68, 0x2b, 0x1e, 0xd1, 0xab, 0x18, 0x5b, 0x78, 0x68, 0x2b, - 0x0c, 0xbf, 0x72, 0x23, 0x11, 0x23, 0x03, 0xf0, 0x03, 0x08, 0x90, 0x44, - 0x15, 0xf8, 0x08, 0x70, 0x64, 0x2f, 0x01, 0xd0, 0x69, 0x2f, 0x3f, 0xd1, - 0x82, 0x2b, 0x27, 0xd1, 0x25, 0x23, 0x07, 0xaa, 0x49, 0x46, 0x00, 0x96, - 0x05, 0x90, 0x25, 0x2f, 0x18, 0xbf, 0xd8, 0x46, 0xff, 0xf7, 0xba, 0xfe, - 0x2e, 0xe0, 0x6f, 0xf0, 0x00, 0x4a, 0xdd, 0xe7, 0x6c, 0x2b, 0x06, 0xd1, - 0xab, 0x18, 0x5b, 0x78, 0x6c, 0x2b, 0x0c, 0xbf, 0x82, 0x23, 0x21, 0x23, - 0xdd, 0xe7, 0x6a, 0x2b, 0x08, 0xd0, 0x7a, 0x2b, 0x08, 0xd0, 0x74, 0x2b, - 0x08, 0xd0, 0x4c, 0x2b, 0x14, 0xbf, 0x00, 0x23, 0x61, 0x23, 0xd2, 0xe7, - 0x31, 0x23, 0xd0, 0xe7, 0x41, 0x23, 0xce, 0xe7, 0x51, 0x23, 0xcc, 0xe7, - 0x11, 0x2b, 0x54, 0xf8, 0x04, 0x2b, 0x0f, 0xd0, 0x72, 0x2b, 0x00, 0xd1, - 0x52, 0xb2, 0x01, 0x23, 0x01, 0x91, 0xcd, 0xe9, 0x02, 0xe6, 0x00, 0x93, - 0x49, 0x46, 0x13, 0x46, 0x07, 0xaa, 0x05, 0x90, 0xff, 0xf7, 0xa4, 0xfe, - 0x05, 0x98, 0x38, 0xe0, 0x12, 0xb2, 0xf0, 0xe7, 0x75, 0x2f, 0x03, 0xd0, - 0x07, 0xf0, 0xdf, 0x02, 0x58, 0x2a, 0x16, 0xd1, 0x82, 0x2b, 0xb9, 0xd0, - 0x11, 0x2b, 0x54, 0xf8, 0x04, 0x2b, 0x09, 0xd0, 0x72, 0x2b, 0x00, 0xd1, - 0xd2, 0xb2, 0x75, 0x2f, 0x01, 0x91, 0xcd, 0xe9, 0x02, 0xe6, 0x03, 0xd1, - 0x00, 0x23, 0xde, 0xe7, 0x92, 0xb2, 0xf6, 0xe7, 0x58, 0x2f, 0x0c, 0xbf, - 0x03, 0x23, 0x02, 0x23, 0xd7, 0xe7, 0x63, 0x2f, 0x09, 0xd1, 0x54, 0xf8, - 0x04, 0x3b, 0x07, 0xaa, 0x49, 0x46, 0x00, 0x96, 0xdb, 0xb2, 0x05, 0x90, - 0xff, 0xf7, 0x5e, 0xfe, 0xd2, 0xe7, 0x73, 0x2f, 0x16, 0xd1, 0x54, 0xf8, - 0x04, 0xbb, 0x0b, 0xf1, 0xff, 0x37, 0x17, 0xf8, 0x01, 0x3f, 0x23, 0xb1, - 0xaa, 0xeb, 0x07, 0x02, 0x1b, 0xeb, 0x02, 0x0f, 0x02, 0xd1, 0x08, 0xf1, - 0x01, 0x0b, 0x0e, 0xe7, 0x07, 0xaa, 0x49, 0x46, 0x00, 0x96, 0x05, 0x90, - 0xff, 0xf7, 0x46, 0xfe, 0x05, 0x98, 0xec, 0xe7, 0x70, 0x2f, 0x7f, 0xf4, - 0x7d, 0xaf, 0x54, 0xf8, 0x04, 0x7b, 0x30, 0x23, 0x07, 0xaa, 0x49, 0x46, - 0x00, 0x96, 0x05, 0x90, 0xff, 0xf7, 0x38, 0xfe, 0x78, 0x23, 0x07, 0xaa, - 0x49, 0x46, 0x05, 0x98, 0x00, 0x96, 0xff, 0xf7, 0x31, 0xfe, 0x00, 0x23, - 0x07, 0xaa, 0x49, 0x46, 0x05, 0x98, 0x03, 0x96, 0xcd, 0xe9, 0x01, 0x33, - 0x03, 0x23, 0x00, 0x93, 0x3b, 0x46, 0x99, 0xe7, 0x07, 0xaa, 0x49, 0x46, - 0x00, 0x96, 0xd8, 0x46, 0x05, 0x90, 0xff, 0xf7, 0x1f, 0xfe, 0x93, 0xe7, - 0x10, 0xb5, 0x04, 0x46, 0x0c, 0xf0, 0x7e, 0xf9, 0x20, 0x46, 0x10, 0xbd, - 0x02, 0x4b, 0x18, 0x68, 0x08, 0xb1, 0x09, 0xf0, 0x73, 0xb8, 0x70, 0x47, - 0xe8, 0x86, 0x00, 0x24, 0x02, 0x4b, 0x18, 0x68, 0x08, 0xb1, 0xf8, 0xf7, - 0x03, 0xbf, 0x70, 0x47, 0xe8, 0x86, 0x00, 0x24, 0x01, 0x20, 0x08, 0xb5, - 0x00, 0xf0, 0xe6, 0xfd, 0x11, 0xf0, 0x01, 0x00, 0x10, 0xb5, 0x8c, 0xb2, - 0x04, 0xd0, 0xf4, 0xf7, 0x79, 0xf9, 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, - 0xe2, 0x06, 0x0a, 0xd5, 0x05, 0x4b, 0x5a, 0x68, 0x90, 0x23, 0x53, 0x43, - 0x04, 0x4a, 0xd3, 0x58, 0xdb, 0x69, 0x1b, 0x06, 0x48, 0xbf, 0x40, 0xf0, - 0x10, 0x00, 0x10, 0xbd, 0xa0, 0x6a, 0x00, 0x24, 0x80, 0x6c, 0x00, 0x24, - 0xf8, 0xb5, 0x0d, 0x46, 0x82, 0xb3, 0x19, 0x4b, 0x19, 0x4c, 0x5f, 0x68, - 0x90, 0x23, 0x03, 0xfb, 0x07, 0x43, 0x9a, 0x68, 0xb2, 0xf5, 0x80, 0x5f, - 0x16, 0xd1, 0x1a, 0x69, 0xba, 0xb9, 0x40, 0xf2, 0xff, 0x12, 0xa3, 0xf8, - 0x60, 0x20, 0x90, 0x22, 0x02, 0xfb, 0x07, 0x42, 0xb2, 0xf8, 0x60, 0x60, - 0xf4, 0xf7, 0x4a, 0xf9, 0x00, 0x28, 0xfb, 0xd0, 0x90, 0x23, 0x01, 0x20, - 0x7b, 0x43, 0xe3, 0x58, 0x5b, 0x6a, 0x1e, 0x40, 0x2e, 0x70, 0xf8, 0xbd, - 0x1a, 0xb9, 0x1a, 0x69, 0x32, 0xb9, 0xff, 0x22, 0xe7, 0xe7, 0xb2, 0xf1, - 0x80, 0x5f, 0x05, 0xd1, 0x1a, 0x69, 0x0a, 0xb9, 0x7f, 0x22, 0xe0, 0xe7, - 0x3f, 0x22, 0xde, 0xe7, 0x00, 0x22, 0xdc, 0xe7, 0x10, 0x46, 0xec, 0xe7, - 0xa0, 0x6a, 0x00, 0x24, 0x80, 0x6c, 0x00, 0x24, 0x43, 0x6b, 0x30, 0xb5, - 0x05, 0x46, 0x85, 0xb0, 0x53, 0xb1, 0x00, 0xf1, 0x28, 0x03, 0x6c, 0x46, - 0x0f, 0xcb, 0x84, 0xe8, 0x0f, 0x00, 0x00, 0x23, 0x20, 0x46, 0x6b, 0x63, - 0x09, 0xf0, 0xf2, 0xfc, 0x05, 0xb0, 0x30, 0xbd, 0x39, 0xb1, 0x01, 0xf1, - 0x80, 0x41, 0x01, 0x39, 0x00, 0xeb, 0x81, 0x01, 0x81, 0x42, 0x03, 0x46, - 0x00, 0xd2, 0x70, 0x47, 0x1b, 0x68, 0x0a, 0x68, 0x1b, 0xba, 0x12, 0xba, - 0x40, 0xf8, 0x04, 0x2b, 0x41, 0xf8, 0x04, 0x39, 0xf2, 0xe7, 0x07, 0xb5, - 0x13, 0x46, 0x0a, 0x46, 0x6f, 0xf0, 0x00, 0x41, 0x00, 0x90, 0x00, 0x20, - 0xff, 0xf7, 0x30, 0xfe, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x0e, 0xb4, - 0x0f, 0xb5, 0x05, 0xab, 0x6f, 0xf0, 0x00, 0x41, 0x53, 0xf8, 0x04, 0x2b, - 0x00, 0x90, 0x00, 0x20, 0x03, 0x93, 0xff, 0xf7, 0x21, 0xfe, 0x04, 0xb0, - 0x5d, 0xf8, 0x04, 0xeb, 0x03, 0xb0, 0x70, 0x47, 0x13, 0xb5, 0x00, 0x24, - 0x00, 0x94, 0xff, 0xf7, 0x17, 0xfe, 0x02, 0xb0, 0x10, 0xbd, 0x07, 0xb5, - 0x13, 0x46, 0x00, 0x22, 0x00, 0x92, 0x0a, 0x46, 0x6f, 0xf0, 0x00, 0x41, - 0xff, 0xf7, 0x0c, 0xfe, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0x00, - 0x07, 0xb5, 0x0b, 0x46, 0x06, 0x49, 0x02, 0x46, 0x00, 0x20, 0x09, 0x68, - 0x89, 0x68, 0x00, 0x91, 0x6f, 0xf0, 0x00, 0x41, 0xff, 0xf7, 0xfc, 0xfd, - 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, - 0x0c, 0xb4, 0x1f, 0xb5, 0x06, 0xab, 0x00, 0x24, 0x53, 0xf8, 0x04, 0x2b, - 0x00, 0x94, 0x03, 0x93, 0xff, 0xf7, 0xec, 0xfd, 0x04, 0xb0, 0xbd, 0xe8, - 0x10, 0x40, 0x02, 0xb0, 0x70, 0x47, 0x0e, 0xb4, 0x0f, 0xb5, 0x00, 0x21, - 0x05, 0xab, 0x53, 0xf8, 0x04, 0x2b, 0x00, 0x91, 0x6f, 0xf0, 0x00, 0x41, - 0x03, 0x93, 0xff, 0xf7, 0xdb, 0xfd, 0x04, 0xb0, 0x5d, 0xf8, 0x04, 0xeb, - 0x03, 0xb0, 0x70, 0x47, 0x0f, 0xb4, 0x1f, 0xb5, 0x08, 0x49, 0x06, 0xab, - 0x00, 0x20, 0x09, 0x68, 0x53, 0xf8, 0x04, 0x2b, 0x89, 0x68, 0x03, 0x93, - 0x00, 0x91, 0x6f, 0xf0, 0x00, 0x41, 0xff, 0xf7, 0xc7, 0xfd, 0x05, 0xb0, - 0x5d, 0xf8, 0x04, 0xeb, 0x04, 0xb0, 0x70, 0x47, 0x10, 0x03, 0x00, 0x24, - 0x03, 0x4b, 0x59, 0x6a, 0x5a, 0x6a, 0x52, 0x1a, 0x82, 0x42, 0xfb, 0xd3, - 0x70, 0x47, 0x00, 0xbf, 0x00, 0x0c, 0x00, 0x40, 0x07, 0xb5, 0x01, 0x90, - 0x0c, 0xf0, 0x5e, 0xf8, 0x01, 0x99, 0x10, 0xb9, 0x02, 0x48, 0xf3, 0xf7, - 0xb1, 0xfb, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x1f, 0x01, 0x01, 0x80, - 0x03, 0x78, 0x23, 0xf0, 0x03, 0x03, 0x43, 0xf0, 0x01, 0x03, 0x03, 0x70, - 0xff, 0xf7, 0xd8, 0xbe, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x78, 0x03, 0xf0, - 0x03, 0x03, 0x01, 0x2b, 0x08, 0xd0, 0xff, 0xf7, 0xd7, 0xfe, 0x23, 0x78, - 0x03, 0xf0, 0x03, 0x02, 0x01, 0x2a, 0x03, 0xd1, 0xff, 0xf7, 0xc8, 0xfe, - 0x00, 0x20, 0x03, 0xe0, 0x43, 0xf0, 0x02, 0x03, 0x23, 0x70, 0x01, 0x20, - 0x10, 0xbd, 0x00, 0x00, 0x01, 0x4b, 0x18, 0x68, 0x08, 0xf0, 0x34, 0xbf, - 0xa0, 0x86, 0x00, 0x24, 0x01, 0x4b, 0x18, 0x68, 0xf8, 0xf7, 0xc6, 0xbd, - 0xa0, 0x86, 0x00, 0x24, 0x01, 0x4b, 0x18, 0x68, 0x08, 0xf0, 0x28, 0xbf, - 0xe0, 0x86, 0x00, 0x24, 0x01, 0x4b, 0x18, 0x68, 0xf8, 0xf7, 0xba, 0xbd, - 0xe0, 0x86, 0x00, 0x24, 0x01, 0x20, 0x70, 0x47, 0x07, 0x4a, 0x08, 0x49, - 0x13, 0x68, 0x18, 0x44, 0x88, 0x42, 0x83, 0xbf, 0x06, 0x4b, 0x0c, 0x22, - 0x4f, 0xf0, 0xff, 0x30, 0x10, 0x60, 0x8c, 0xbf, 0x1a, 0x60, 0x18, 0x46, - 0x70, 0x47, 0x00, 0xbf, 0x10, 0x01, 0x00, 0x24, 0x00, 0xfc, 0x07, 0x24, - 0x78, 0xa8, 0x00, 0x24, 0x06, 0x4a, 0x13, 0x68, 0x43, 0xb1, 0x01, 0x3b, - 0x13, 0x60, 0x2b, 0xb9, 0x04, 0x4a, 0x13, 0x70, 0x04, 0x4b, 0x1b, 0x78, - 0x03, 0xb1, 0x62, 0xb6, 0x70, 0x47, 0x00, 0xbf, 0x9c, 0x86, 0x00, 0x24, - 0xec, 0x86, 0x00, 0x24, 0x98, 0x86, 0x00, 0x24, 0xef, 0xf3, 0x10, 0x83, - 0x72, 0xb6, 0x07, 0x4a, 0x11, 0x78, 0x31, 0xb9, 0xdb, 0x43, 0x06, 0x49, - 0x03, 0xf0, 0x01, 0x03, 0x0b, 0x70, 0x01, 0x23, 0x13, 0x70, 0x04, 0x4a, - 0x13, 0x68, 0x01, 0x33, 0x13, 0x60, 0x70, 0x47, 0xec, 0x86, 0x00, 0x24, - 0x98, 0x86, 0x00, 0x24, 0x9c, 0x86, 0x00, 0x24, 0x08, 0xb5, 0xff, 0xf7, - 0xe5, 0xff, 0x06, 0x4a, 0x13, 0x88, 0x01, 0x3b, 0x9b, 0xb2, 0x13, 0x80, - 0x13, 0xb9, 0x01, 0x20, 0xff, 0xf7, 0x4a, 0xfa, 0xbd, 0xe8, 0x08, 0x40, - 0xff, 0xf7, 0xc4, 0xbf, 0xe4, 0x86, 0x00, 0x24, 0x10, 0xb5, 0x07, 0x4c, - 0xff, 0xf7, 0xd2, 0xff, 0x21, 0x88, 0x11, 0xb9, 0x08, 0x46, 0xff, 0xf7, - 0x3b, 0xfa, 0x01, 0x31, 0x21, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, - 0xb3, 0xbf, 0x00, 0xbf, 0xe4, 0x86, 0x00, 0x24, 0x08, 0xb5, 0xff, 0xf7, - 0xc1, 0xff, 0x06, 0x4a, 0x13, 0x88, 0x01, 0x3b, 0x9b, 0xb2, 0x13, 0x80, - 0x13, 0xb9, 0x01, 0x20, 0xff, 0xf7, 0x10, 0xfa, 0xbd, 0xe8, 0x08, 0x40, - 0xff, 0xf7, 0xa0, 0xbf, 0xe6, 0x86, 0x00, 0x24, 0x10, 0xb5, 0x06, 0x4c, - 0xff, 0xf7, 0xae, 0xff, 0x20, 0x88, 0x08, 0xb9, 0xff, 0xf7, 0x02, 0xfa, - 0x01, 0x30, 0x20, 0x80, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x90, 0xbf, - 0xe6, 0x86, 0x00, 0x24, 0xf0, 0xb5, 0x8f, 0xb0, 0x07, 0x46, 0x0e, 0x46, - 0x15, 0x46, 0x00, 0x21, 0x14, 0x22, 0x09, 0xa8, 0x01, 0xac, 0x0b, 0xf0, - 0xf7, 0xff, 0x10, 0x4b, 0x08, 0x94, 0x5b, 0x69, 0x01, 0x97, 0xda, 0x6b, - 0x04, 0x93, 0x05, 0x92, 0x5a, 0x6b, 0x1b, 0x6b, 0x06, 0x92, 0x07, 0x93, - 0xcd, 0xe9, 0x02, 0x56, 0xff, 0xf7, 0x88, 0xff, 0x09, 0x4a, 0x0a, 0x4d, - 0x13, 0x68, 0x01, 0x33, 0x13, 0x60, 0x0f, 0xcc, 0x0f, 0xc5, 0x0f, 0xcc, - 0x0f, 0xc5, 0x0f, 0xcc, 0x0f, 0xc5, 0x23, 0x68, 0x2b, 0x60, 0xff, 0xf7, - 0x65, 0xff, 0x00, 0x20, 0x0f, 0xb0, 0xf0, 0xbd, 0x1c, 0x01, 0x00, 0x24, - 0xa4, 0x86, 0x00, 0x24, 0xac, 0x86, 0x00, 0x24, 0xf8, 0xb5, 0x05, 0x46, - 0xff, 0xf7, 0x6c, 0xff, 0xd0, 0xe9, 0x00, 0x34, 0xdb, 0x68, 0x98, 0x47, - 0x94, 0xf8, 0x32, 0x30, 0x1b, 0xb1, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, - 0x4d, 0xbf, 0x01, 0x23, 0x84, 0xf8, 0x31, 0x30, 0x63, 0x68, 0xab, 0xb1, - 0x28, 0x46, 0xff, 0xf7, 0xda, 0xf9, 0x61, 0x68, 0xd4, 0xe9, 0x0a, 0x67, - 0xd1, 0xe9, 0x00, 0x23, 0x9f, 0x42, 0x08, 0xbf, 0x96, 0x42, 0x09, 0xd3, - 0x6b, 0x68, 0x5a, 0x68, 0xcb, 0x68, 0x63, 0x60, 0x23, 0x68, 0x00, 0x2b, - 0xea, 0xd0, 0x90, 0x68, 0x98, 0x47, 0xe7, 0xe7, 0x00, 0x23, 0x28, 0x46, - 0x84, 0xf8, 0x31, 0x30, 0xff, 0xf7, 0x07, 0xfa, 0xd9, 0xe7, 0x2d, 0xe9, - 0xf7, 0x43, 0x04, 0x46, 0x00, 0xf1, 0x08, 0x05, 0x80, 0x69, 0x90, 0x46, - 0x99, 0x46, 0x01, 0x90, 0xff, 0xf7, 0x34, 0xff, 0x01, 0x98, 0xff, 0xf7, - 0xb2, 0xf9, 0x01, 0x98, 0x00, 0x21, 0x42, 0x68, 0x24, 0x61, 0x53, 0x68, - 0xc4, 0xe9, 0x02, 0x89, 0x2b, 0xb9, 0x63, 0x61, 0x61, 0xb9, 0x55, 0x60, - 0xff, 0xf7, 0xeb, 0xf9, 0x0f, 0xe0, 0xd3, 0xe9, 0x00, 0x67, 0xb9, 0x45, - 0x08, 0xbf, 0xb0, 0x45, 0xf3, 0xd3, 0x19, 0x46, 0xdb, 0x68, 0xef, 0xe7, - 0xd2, 0xe9, 0x0a, 0x23, 0xcd, 0x60, 0x4b, 0x45, 0x08, 0xbf, 0x42, 0x45, - 0xec, 0xd2, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x43, 0xff, 0xf7, 0xfa, 0xbe, - 0x90, 0xf8, 0x3c, 0x30, 0x30, 0xb4, 0x53, 0xb1, 0x00, 0x23, 0x80, 0xf8, - 0x3c, 0x30, 0x90, 0xf8, 0x3e, 0x30, 0x13, 0xb9, 0x01, 0x23, 0x80, 0xf8, - 0x3d, 0x30, 0x30, 0xbc, 0x70, 0x47, 0x90, 0xf8, 0x3f, 0x30, 0x00, 0x2b, - 0xf9, 0xd0, 0x83, 0x6b, 0x4f, 0xf0, 0x80, 0x62, 0x01, 0x33, 0x83, 0x63, - 0x0b, 0x4b, 0x5a, 0x60, 0xd0, 0xe9, 0x0c, 0x32, 0x01, 0x33, 0x42, 0xf1, - 0x00, 0x02, 0xc0, 0xe9, 0x0c, 0x32, 0xd0, 0xe9, 0x0a, 0x23, 0x12, 0xf5, - 0x7a, 0x75, 0x43, 0xf1, 0x00, 0x04, 0x12, 0xf5, 0xfa, 0x62, 0xc0, 0xe9, - 0x0a, 0x54, 0x43, 0xf1, 0x00, 0x03, 0x30, 0xbc, 0xff, 0xf7, 0x9f, 0xbf, - 0x00, 0xed, 0x00, 0xe0, 0x38, 0xb5, 0xd0, 0xe9, 0x08, 0x25, 0xd0, 0xe9, - 0x02, 0x13, 0x04, 0x46, 0x52, 0x18, 0x45, 0xeb, 0x03, 0x03, 0xff, 0xf7, - 0x92, 0xff, 0x63, 0x6b, 0x2b, 0xb1, 0x04, 0xf1, 0x28, 0x00, 0xbd, 0xe8, - 0x38, 0x40, 0x09, 0xf0, 0xb1, 0xba, 0x38, 0xbd, 0x09, 0x4b, 0x30, 0xb5, - 0x1a, 0x46, 0x09, 0x4c, 0xd3, 0xf8, 0x94, 0x50, 0xa5, 0x42, 0xfb, 0xd1, - 0x03, 0x68, 0x29, 0xb1, 0x81, 0x68, 0x0b, 0x60, 0x4f, 0xf4, 0x40, 0x73, - 0x53, 0x61, 0x30, 0xbd, 0xc1, 0x68, 0x1b, 0x04, 0xf7, 0xe7, 0x00, 0xbf, - 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0xf0, 0xb5, 0x72, 0xb6, - 0x00, 0x23, 0x26, 0x4a, 0x4f, 0xf0, 0xff, 0x36, 0x25, 0x4f, 0x13, 0x60, - 0x4f, 0xf0, 0xe0, 0x22, 0x1d, 0x46, 0x51, 0x68, 0x01, 0xf0, 0x0f, 0x01, - 0x01, 0x31, 0x9a, 0x00, 0x4f, 0xea, 0xc3, 0x0c, 0x02, 0xf1, 0x60, 0x42, - 0x02, 0xf5, 0x61, 0x42, 0xc2, 0xf8, 0x80, 0x60, 0xc2, 0xf8, 0x80, 0x61, - 0x00, 0x22, 0x02, 0xeb, 0x0c, 0x04, 0x01, 0x32, 0x3c, 0x44, 0x08, 0x2a, - 0x84, 0xf8, 0x00, 0x53, 0xf7, 0xd1, 0x01, 0x33, 0x99, 0x42, 0xe8, 0xdc, - 0x16, 0x4b, 0x4f, 0xf0, 0x20, 0x62, 0x5a, 0x60, 0x40, 0xf2, 0xfa, 0x52, - 0x98, 0x60, 0xda, 0x60, 0x00, 0x22, 0x1d, 0x61, 0x11, 0x46, 0x9c, 0x18, - 0x01, 0x32, 0x0c, 0x2a, 0x21, 0x76, 0xfa, 0xd1, 0x4f, 0xf0, 0xff, 0x32, - 0x59, 0x62, 0x9a, 0x62, 0x0d, 0x4a, 0xda, 0x62, 0x1f, 0x22, 0x1a, 0x63, - 0xbf, 0xf3, 0x5f, 0x8f, 0x0b, 0x4b, 0x59, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, - 0xbf, 0xf3, 0x6f, 0x8f, 0xd0, 0xe9, 0x00, 0x31, 0x00, 0x22, 0x82, 0xf3, - 0x14, 0x88, 0x9d, 0x46, 0x82, 0xf3, 0x10, 0x88, 0x08, 0x47, 0xf0, 0xbd, - 0x10, 0xe0, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe0, 0x00, 0xed, 0x00, 0xe0, - 0x02, 0x00, 0x00, 0xc0, 0x90, 0xed, 0x00, 0xe0, 0x0b, 0xf0, 0xbc, 0xbe, - 0x0b, 0xf0, 0xca, 0xbe, 0x0b, 0xf0, 0x72, 0xbf, 0x0b, 0xf0, 0x16, 0xbf, - 0x43, 0x68, 0x93, 0xf8, 0x30, 0x20, 0x2d, 0xe9, 0xf0, 0x47, 0x06, 0x46, - 0x00, 0x2a, 0x74, 0xd1, 0x93, 0xf8, 0x32, 0x30, 0x00, 0x2b, 0x70, 0xd1, - 0x03, 0x68, 0x1b, 0x68, 0x98, 0x47, 0x33, 0x68, 0xdb, 0x69, 0x98, 0x47, - 0x36, 0x4b, 0x02, 0x68, 0x00, 0x2a, 0x08, 0xbf, 0x1a, 0x46, 0x11, 0x46, - 0x1c, 0x46, 0xb1, 0xfb, 0xf3, 0xf3, 0x04, 0xfb, 0x13, 0x13, 0x21, 0x46, - 0x00, 0x2b, 0xf7, 0xd1, 0x2f, 0x4b, 0x01, 0x25, 0x77, 0x68, 0xb3, 0xfb, - 0xf4, 0xf1, 0x1f, 0x23, 0xb9, 0x60, 0x01, 0x3b, 0x03, 0xd3, 0x05, 0xfa, - 0x03, 0xfc, 0x61, 0x45, 0xf9, 0xd1, 0xb2, 0xfb, 0xf4, 0xf2, 0x87, 0xf8, - 0x33, 0x30, 0x01, 0x24, 0x1f, 0x23, 0xfa, 0x60, 0x04, 0xfa, 0x03, 0xf5, - 0xaa, 0x42, 0x01, 0xd0, 0x01, 0x3b, 0xf9, 0xd2, 0x87, 0xf8, 0x34, 0x30, - 0x44, 0x68, 0x23, 0x1f, 0x1b, 0x2b, 0x93, 0xbf, 0x01, 0x23, 0x4f, 0xf0, - 0xff, 0x33, 0x20, 0x24, 0xa3, 0x40, 0xa4, 0xf1, 0x04, 0x04, 0x98, 0xbf, - 0x03, 0xf1, 0xff, 0x33, 0x12, 0xf1, 0xff, 0x30, 0x3b, 0x61, 0x4f, 0xf0, - 0x07, 0x03, 0x03, 0xfa, 0x04, 0xf4, 0x4f, 0xf0, 0x00, 0x03, 0x4f, 0xea, - 0xe4, 0x79, 0x7c, 0x61, 0xa4, 0xfb, 0x01, 0x45, 0x9a, 0x46, 0x01, 0xfb, - 0x09, 0x55, 0x43, 0xf1, 0xff, 0x31, 0x20, 0x18, 0x45, 0xeb, 0x01, 0x01, - 0x0d, 0xf0, 0x28, 0xfd, 0x33, 0x68, 0xc7, 0xe9, 0x06, 0x01, 0x5b, 0x68, - 0xc7, 0xe9, 0x00, 0xaa, 0x98, 0x47, 0x73, 0x68, 0x38, 0x62, 0x00, 0x21, - 0x00, 0x20, 0x01, 0x22, 0xc3, 0xf8, 0x24, 0xa0, 0x83, 0xf8, 0x32, 0xa0, - 0x1a, 0x86, 0xc3, 0xe9, 0x0a, 0x01, 0x30, 0x46, 0xff, 0xf7, 0x57, 0xf8, - 0x30, 0x46, 0xbd, 0xe8, 0xf0, 0x47, 0xff, 0xf7, 0x98, 0xb8, 0xbd, 0xe8, - 0xf0, 0x87, 0x00, 0xbf, 0x40, 0x42, 0x0f, 0x00, 0x10, 0xb5, 0x04, 0x46, - 0xff, 0xf7, 0x7a, 0xff, 0xff, 0xf7, 0xc6, 0xfd, 0x20, 0x46, 0xff, 0xf7, - 0x44, 0xf8, 0x63, 0x68, 0xd3, 0xe9, 0x0a, 0x01, 0xff, 0xf7, 0xaa, 0xfd, - 0x10, 0xbd, 0x2d, 0xe9, 0xf8, 0x43, 0x0c, 0x46, 0x80, 0x46, 0x88, 0x69, - 0xff, 0xf7, 0xea, 0xff, 0xd4, 0xe9, 0x0a, 0x59, 0x46, 0x1b, 0x61, 0xeb, - 0x09, 0x07, 0x00, 0x2f, 0x08, 0xbf, 0xb6, 0xf5, 0x7a, 0x7f, 0x2a, 0xd3, - 0x00, 0x2f, 0x08, 0xbf, 0xb6, 0xf5, 0xfa, 0x6f, 0x28, 0xd3, 0x00, 0x2e, - 0x4f, 0xf4, 0x7a, 0x72, 0x30, 0x46, 0x77, 0xf1, 0x01, 0x03, 0x4f, 0xf0, - 0x00, 0x03, 0xb4, 0xbf, 0x00, 0x21, 0x39, 0x46, 0x0d, 0xf0, 0xd6, 0xfc, - 0x4f, 0xf4, 0x7a, 0x76, 0x00, 0x23, 0xa3, 0x63, 0xa0, 0xfb, 0x06, 0x23, - 0x55, 0x19, 0x06, 0xfb, 0x01, 0x33, 0x43, 0xeb, 0x09, 0x03, 0xc4, 0xe9, - 0x0a, 0x53, 0xd4, 0xe9, 0x0c, 0x32, 0xc3, 0x18, 0x40, 0x46, 0x42, 0xeb, - 0x01, 0x01, 0xc4, 0xe9, 0x0c, 0x31, 0xc8, 0xe9, 0x00, 0x31, 0xbd, 0xe8, - 0xf8, 0x83, 0x00, 0x20, 0x01, 0x46, 0xe3, 0xe7, 0x01, 0x20, 0x00, 0x21, - 0xe0, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0x70, 0x43, 0x15, 0x4e, 0x35, 0x68, - 0x2d, 0xbb, 0x15, 0x4c, 0x4f, 0xf0, 0x00, 0x08, 0x14, 0x48, 0x4f, 0xf0, - 0x00, 0x09, 0x14, 0x4b, 0xa0, 0x61, 0x23, 0x60, 0xc4, 0xe9, 0x02, 0x89, - 0xc4, 0xe9, 0x04, 0x55, 0xff, 0xf7, 0x18, 0xff, 0xff, 0xf7, 0x64, 0xfd, - 0x0f, 0x4b, 0x10, 0x4a, 0x1a, 0x60, 0xff, 0xf7, 0x4b, 0xfd, 0x0f, 0x4b, - 0xa0, 0x69, 0x23, 0x60, 0xff, 0xf7, 0x8e, 0xff, 0x84, 0xf8, 0x40, 0x50, - 0x34, 0x60, 0xc4, 0xe9, 0x08, 0x01, 0xc4, 0xe9, 0x0a, 0x01, 0xc4, 0xe9, - 0x0c, 0x89, 0xc4, 0xe9, 0x0e, 0x55, 0x30, 0x68, 0xbd, 0xe8, 0x70, 0x83, - 0x88, 0x86, 0x00, 0x24, 0x40, 0x86, 0x00, 0x24, 0x18, 0xdf, 0x01, 0x08, - 0x8c, 0xdc, 0x01, 0x08, 0xe0, 0x0d, 0x00, 0x24, 0xcd, 0xe7, 0x00, 0x08, - 0xd4, 0xe6, 0x01, 0x08, 0xb1, 0xf9, 0x00, 0x30, 0x5a, 0x1c, 0x01, 0xd1, - 0x18, 0x46, 0x70, 0x47, 0x83, 0x42, 0x01, 0xd1, 0x88, 0x68, 0x70, 0x47, - 0x0c, 0x31, 0xf3, 0xe7, 0x08, 0xb5, 0x43, 0x1c, 0x03, 0xd1, 0x03, 0x46, - 0x18, 0x46, 0x08, 0xbd, 0x0c, 0x31, 0xb1, 0xf9, 0x00, 0x30, 0x5a, 0x1c, - 0x04, 0xd0, 0x98, 0x42, 0xf8, 0xd1, 0x4b, 0x68, 0x59, 0x1c, 0xf3, 0xd1, - 0x01, 0x46, 0x01, 0x48, 0xf3, 0xf7, 0x66, 0xf8, 0x30, 0x01, 0x01, 0x80, - 0x88, 0x42, 0x08, 0xb5, 0x07, 0xd0, 0x43, 0x1c, 0x05, 0xd0, 0x01, 0x31, - 0x01, 0x46, 0x02, 0xd0, 0x02, 0x48, 0xf3, 0xf7, 0x59, 0xf8, 0x08, 0x46, - 0x08, 0xbd, 0x00, 0xbf, 0x30, 0x01, 0x01, 0x80, 0xd0, 0xf8, 0x90, 0x30, - 0x2d, 0xe9, 0xf0, 0x4f, 0x01, 0x2b, 0x04, 0x46, 0x2d, 0xed, 0x08, 0x8b, - 0x87, 0xb0, 0x02, 0x93, 0x07, 0xd9, 0x00, 0x20, 0x84, 0xf8, 0x94, 0x00, - 0x07, 0xb0, 0xbd, 0xec, 0x08, 0x8b, 0xbd, 0xe8, 0xf0, 0x8f, 0x03, 0x1d, - 0xb0, 0xf9, 0x96, 0x70, 0xb0, 0xf9, 0x98, 0x60, 0x08, 0xee, 0x10, 0x3a, - 0xd0, 0xf8, 0x8c, 0x30, 0xb0, 0xf9, 0x9a, 0x50, 0xb0, 0xf9, 0x9c, 0xa0, - 0x08, 0xee, 0x90, 0x3a, 0xb0, 0xf9, 0x9e, 0xb0, 0xb0, 0xf9, 0xa0, 0x80, - 0x38, 0x46, 0x72, 0x49, 0xff, 0xf7, 0xb0, 0xff, 0x71, 0x49, 0x03, 0x90, - 0x30, 0x46, 0xff, 0xf7, 0xab, 0xff, 0x70, 0x49, 0x01, 0x90, 0x28, 0x46, - 0xff, 0xf7, 0xa6, 0xff, 0x6e, 0x49, 0x09, 0xee, 0x10, 0x0a, 0x50, 0x46, - 0xff, 0xf7, 0xa0, 0xff, 0x6c, 0x49, 0x09, 0xee, 0x90, 0x0a, 0x58, 0x46, - 0xff, 0xf7, 0x9a, 0xff, 0x6a, 0x49, 0x0a, 0xee, 0x10, 0x0a, 0x40, 0x46, - 0xff, 0xf7, 0x94, 0xff, 0x01, 0x9a, 0x03, 0x9b, 0x81, 0x46, 0x11, 0x46, - 0x18, 0x46, 0xff, 0xf7, 0xa3, 0xff, 0x19, 0xee, 0x90, 0x1a, 0x01, 0x90, - 0x19, 0xee, 0x10, 0x0a, 0xff, 0xf7, 0x9c, 0xff, 0x49, 0x46, 0x03, 0x90, - 0x1a, 0xee, 0x10, 0x0a, 0xff, 0xf7, 0x96, 0xff, 0x01, 0x9b, 0x1a, 0x46, - 0x03, 0x9b, 0x9a, 0x42, 0xab, 0xd1, 0x01, 0x9b, 0x83, 0x42, 0xa8, 0xd1, - 0x54, 0x49, 0x38, 0x46, 0xff, 0xf7, 0x68, 0xff, 0x53, 0x49, 0x03, 0x90, - 0x30, 0x46, 0xff, 0xf7, 0x63, 0xff, 0x52, 0x49, 0x09, 0xee, 0x10, 0x0a, - 0x28, 0x46, 0xff, 0xf7, 0x5d, 0xff, 0x50, 0x49, 0x09, 0xee, 0x90, 0x0a, - 0x50, 0x46, 0xff, 0xf7, 0x57, 0xff, 0x4e, 0x49, 0x0a, 0xee, 0x10, 0x0a, - 0x58, 0x46, 0xff, 0xf7, 0x51, 0xff, 0x4c, 0x49, 0x0a, 0xee, 0x90, 0x0a, - 0x40, 0x46, 0xff, 0xf7, 0x4b, 0xff, 0x4a, 0x4a, 0x0b, 0xee, 0x10, 0x0a, - 0x03, 0x9b, 0xd2, 0xf8, 0xd4, 0x10, 0x48, 0x48, 0x41, 0xf4, 0x80, 0x41, - 0xc2, 0xf8, 0xd4, 0x10, 0xd2, 0xf8, 0xd4, 0x10, 0x01, 0xf4, 0x80, 0x41, - 0x05, 0x91, 0x05, 0x99, 0x43, 0x49, 0xd0, 0xf8, 0x8c, 0xc0, 0x8c, 0x45, - 0xfb, 0xd1, 0xd1, 0x6f, 0x4f, 0xf0, 0x00, 0x09, 0x41, 0xf4, 0x80, 0x41, - 0xd1, 0x67, 0xd1, 0x6f, 0x21, 0xf4, 0x80, 0x41, 0xd1, 0x67, 0x4f, 0xf4, - 0x40, 0x72, 0x01, 0x21, 0xc2, 0x60, 0x00, 0x22, 0x38, 0x46, 0xa4, 0xf8, - 0x54, 0x70, 0x84, 0xf8, 0x45, 0x20, 0x22, 0x61, 0x84, 0xf8, 0x44, 0x20, - 0x4f, 0xf0, 0x00, 0x42, 0x92, 0xfa, 0xa2, 0xf2, 0xb2, 0xfa, 0x82, 0xf2, - 0x01, 0x3a, 0x62, 0x61, 0x4f, 0xf4, 0x80, 0x62, 0xa2, 0x61, 0x02, 0x9a, - 0xe2, 0x61, 0x01, 0x9a, 0xc4, 0xe9, 0x02, 0x11, 0x62, 0x60, 0x19, 0x46, - 0xc4, 0xe9, 0x08, 0x99, 0xf4, 0xf7, 0xfe, 0xfe, 0x49, 0x46, 0x38, 0x46, - 0xf4, 0xf7, 0xb2, 0xfe, 0x19, 0xee, 0x10, 0x1a, 0x30, 0x46, 0xa4, 0xf8, - 0x56, 0x60, 0xf4, 0xf7, 0xf3, 0xfe, 0x49, 0x46, 0x30, 0x46, 0xf4, 0xf7, - 0xa7, 0xfe, 0x19, 0xee, 0x90, 0x1a, 0x28, 0x46, 0xa4, 0xf8, 0x58, 0x50, - 0xf4, 0xf7, 0xe8, 0xfe, 0x49, 0x46, 0x28, 0x46, 0xf4, 0xf7, 0x9c, 0xfe, - 0x1a, 0xee, 0x10, 0x1a, 0x50, 0x46, 0xa4, 0xf8, 0x5a, 0xa0, 0xf4, 0xf7, - 0xdd, 0xfe, 0x49, 0x46, 0x50, 0x46, 0xf4, 0xf7, 0x91, 0xfe, 0x1a, 0xee, - 0x90, 0x1a, 0x58, 0x46, 0xa4, 0xf8, 0x5c, 0xb0, 0xf4, 0xf7, 0xd2, 0xfe, - 0x49, 0x46, 0x58, 0x46, 0xf4, 0xf7, 0x86, 0xfe, 0x1b, 0xee, 0x10, 0x1a, - 0x40, 0x46, 0xa4, 0xf8, 0x5e, 0x80, 0xf4, 0xf7, 0xc7, 0xfe, 0x49, 0x46, - 0x40, 0x46, 0xf4, 0xf7, 0x7b, 0xfe, 0x18, 0xee, 0x90, 0x1a, 0x18, 0xee, - 0x10, 0x0a, 0xf6, 0xf7, 0xf3, 0xfb, 0xb0, 0xfa, 0x80, 0xf0, 0x40, 0x09, - 0x00, 0xe7, 0x00, 0xbf, 0xc8, 0xe2, 0x01, 0x08, 0xf8, 0xe2, 0x01, 0x08, - 0x28, 0xe3, 0x01, 0x08, 0x4c, 0xe3, 0x01, 0x08, 0x7c, 0xe3, 0x01, 0x08, - 0xa0, 0xe3, 0x01, 0x08, 0x00, 0x44, 0x02, 0x58, 0x00, 0x64, 0x02, 0x58, - 0x00, 0x03, 0x00, 0x80, 0x43, 0x1c, 0x07, 0xb5, 0x10, 0xd1, 0x03, 0xb0, - 0x5d, 0xf8, 0x04, 0xfb, 0x83, 0x42, 0x0a, 0xd1, 0x89, 0x68, 0x01, 0x90, - 0xf4, 0xf7, 0x9a, 0xfe, 0x00, 0x21, 0x01, 0x98, 0x03, 0xb0, 0x5d, 0xf8, - 0x04, 0xeb, 0xf4, 0xf7, 0x4b, 0xbe, 0x0c, 0x31, 0xb1, 0xf9, 0x00, 0x30, - 0x5a, 0x1c, 0xed, 0xd1, 0x01, 0x46, 0x01, 0x48, 0xf2, 0xf7, 0x1a, 0xff, - 0x30, 0x01, 0x01, 0x80, 0x38, 0xb5, 0x15, 0x46, 0x04, 0x46, 0x01, 0x82, - 0xf5, 0xf7, 0x2e, 0xfd, 0x20, 0x46, 0x29, 0x46, 0xff, 0xf7, 0xfe, 0xfc, - 0x01, 0x21, 0xf5, 0xf7, 0x4b, 0xfd, 0xb4, 0xf9, 0x10, 0x00, 0x00, 0x21, - 0xbd, 0xe8, 0x38, 0x40, 0xf4, 0xf7, 0x2c, 0xbe, 0x00, 0xb5, 0x89, 0xb0, - 0x15, 0x4d, 0xff, 0xf7, 0xb7, 0xfb, 0x00, 0x22, 0xa5, 0x21, 0x01, 0xa8, - 0xff, 0xf7, 0xe2, 0xff, 0x04, 0x24, 0x01, 0x21, 0x01, 0xa8, 0xff, 0xf7, - 0xe5, 0xfc, 0x28, 0x46, 0xff, 0xf7, 0x2e, 0xfb, 0x00, 0x21, 0x01, 0xa8, - 0xff, 0xf7, 0xde, 0xfc, 0x28, 0x46, 0xff, 0xf7, 0x27, 0xfb, 0x01, 0x3c, - 0xef, 0xd1, 0x04, 0x24, 0x09, 0x4e, 0x01, 0x21, 0x01, 0xa8, 0xff, 0xf7, - 0xd3, 0xfc, 0x30, 0x46, 0xff, 0xf7, 0x1c, 0xfb, 0x00, 0x21, 0x01, 0xa8, - 0xff, 0xf7, 0xcc, 0xfc, 0x30, 0x46, 0xff, 0xf7, 0x15, 0xfb, 0x01, 0x3c, - 0xef, 0xd1, 0xdb, 0xe7, 0xf0, 0x49, 0x02, 0x00, 0x80, 0x1a, 0x06, 0x00, - 0x08, 0xb5, 0x08, 0xb1, 0xff, 0xf7, 0xca, 0xff, 0xfe, 0xe7, 0x00, 0x00, - 0x08, 0xb5, 0x0e, 0x4b, 0x01, 0x21, 0xd3, 0xe8, 0x4f, 0x2f, 0xc3, 0xe8, - 0x40, 0x1f, 0xd2, 0xb2, 0x00, 0x28, 0xf8, 0xd1, 0x2a, 0xb1, 0xff, 0xf7, - 0x77, 0xfb, 0xbf, 0xf3, 0x4f, 0x8f, 0x20, 0xbf, 0xfd, 0xe7, 0xef, 0xf3, - 0x05, 0x83, 0x1b, 0xb9, 0xef, 0xf3, 0x10, 0x83, 0xdb, 0x07, 0x01, 0xd5, - 0xff, 0xf7, 0xae, 0xff, 0x01, 0x20, 0xff, 0xf7, 0xdd, 0xff, 0x00, 0xbf, - 0xa8, 0x86, 0x00, 0x24, 0x0f, 0xb4, 0x72, 0x46, 0x08, 0xb5, 0x07, 0x4b, - 0x01, 0x20, 0xd3, 0xe8, 0x4f, 0x1f, 0xc3, 0xe8, 0x44, 0x0f, 0xc9, 0xb2, - 0x00, 0x2c, 0xf8, 0xd1, 0x11, 0xb9, 0x03, 0x48, 0xff, 0xf7, 0xb2, 0xfb, - 0xff, 0xf7, 0xce, 0xff, 0x48, 0x0e, 0x00, 0x24, 0x00, 0x01, 0xff, 0x80, - 0x3f, 0x28, 0x2d, 0xe9, 0xf0, 0x4f, 0x06, 0x46, 0x8b, 0xb0, 0x00, 0xf3, - 0x2b, 0x81, 0x96, 0x4f, 0x57, 0xf8, 0x20, 0x00, 0x41, 0x1c, 0x40, 0xf0, - 0x09, 0x81, 0x02, 0x2e, 0x00, 0xf3, 0x06, 0x81, 0x92, 0x48, 0xdf, 0xf8, - 0x8c, 0x92, 0x03, 0x78, 0xbf, 0xf3, 0x5b, 0x8f, 0x13, 0xf0, 0x01, 0x0f, - 0x40, 0xf0, 0xf9, 0x80, 0xff, 0xf7, 0xd6, 0xfa, 0x00, 0x28, 0x00, 0xf0, - 0xf4, 0x80, 0x8c, 0x4b, 0xc9, 0xf8, 0x00, 0x30, 0x8b, 0x4b, 0x1a, 0x68, - 0x98, 0x46, 0x00, 0x2a, 0x40, 0xf0, 0xe8, 0x80, 0x89, 0x49, 0x09, 0x20, - 0xff, 0xf7, 0xf0, 0xfd, 0x04, 0x46, 0x88, 0x49, 0x0a, 0x20, 0xff, 0xf7, - 0xeb, 0xfd, 0x01, 0x46, 0x20, 0x46, 0x86, 0x4d, 0xff, 0xf7, 0xfc, 0xfd, - 0x82, 0x49, 0x04, 0x46, 0x09, 0x20, 0xff, 0xf7, 0xd5, 0xfd, 0x81, 0x49, - 0x83, 0x46, 0x0a, 0x20, 0xff, 0xf7, 0xd0, 0xfd, 0x80, 0x4b, 0x82, 0x46, - 0x2c, 0x60, 0x9c, 0x42, 0x21, 0xd1, 0x7f, 0x4a, 0xd2, 0xf8, 0xf0, 0x10, - 0x41, 0xf0, 0x10, 0x01, 0xc2, 0xf8, 0xf0, 0x10, 0xd2, 0xf8, 0xf0, 0x20, - 0x02, 0xf0, 0x10, 0x02, 0x09, 0x92, 0x09, 0x9a, 0x79, 0x4a, 0x94, 0x42, - 0x4a, 0xd1, 0x77, 0x4b, 0xd3, 0xf8, 0xf0, 0x20, 0x42, 0xf0, 0x20, 0x02, - 0xc3, 0xf8, 0xf0, 0x20, 0xd3, 0xf8, 0xf0, 0x30, 0x03, 0xf0, 0x20, 0x03, - 0x04, 0x93, 0x04, 0x9b, 0x72, 0x4b, 0x9c, 0x42, 0x4a, 0xd1, 0x01, 0x24, - 0x87, 0xe0, 0x70, 0x4a, 0x94, 0x42, 0x1a, 0xd0, 0x02, 0xf5, 0x80, 0x62, - 0x94, 0x42, 0x24, 0xd0, 0x6d, 0x4a, 0x94, 0x42, 0x5c, 0xd0, 0x6d, 0x4a, - 0x94, 0x42, 0xdd, 0xd1, 0x67, 0x4a, 0xd2, 0xf8, 0xe8, 0x10, 0x41, 0xf4, - 0x80, 0x11, 0xc2, 0xf8, 0xe8, 0x10, 0xd2, 0xf8, 0xe8, 0x20, 0x02, 0xf4, - 0x80, 0x12, 0x05, 0x92, 0x05, 0x9a, 0x9c, 0x42, 0xde, 0xd1, 0x00, 0x24, - 0x69, 0xe0, 0x5f, 0x4a, 0xd2, 0xf8, 0xe8, 0x10, 0x41, 0xf4, 0x00, 0x31, - 0xc2, 0xf8, 0xe8, 0x10, 0xd2, 0xf8, 0xe8, 0x20, 0x02, 0xf4, 0x00, 0x32, - 0x08, 0x92, 0x08, 0x9a, 0xbe, 0xe7, 0x58, 0x4a, 0xd2, 0xf8, 0xe8, 0x10, - 0x41, 0xf4, 0x80, 0x21, 0xc2, 0xf8, 0xe8, 0x10, 0xd2, 0xf8, 0xe8, 0x20, - 0x02, 0xf4, 0x80, 0x22, 0x07, 0x92, 0x07, 0x9a, 0x56, 0x4a, 0x94, 0x42, - 0x37, 0xd1, 0x50, 0x4b, 0xd3, 0xf8, 0xe8, 0x20, 0x42, 0xf0, 0x80, 0x42, - 0xc3, 0xf8, 0xe8, 0x20, 0xd3, 0xf8, 0xe8, 0x30, 0x03, 0xf0, 0x80, 0x43, - 0x03, 0x93, 0x03, 0x9b, 0x4f, 0x4b, 0x9c, 0x42, 0x74, 0xd0, 0x03, 0xf5, - 0x80, 0x63, 0x9c, 0x42, 0x72, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x9c, 0x42, - 0x70, 0xd0, 0x03, 0xf5, 0x44, 0x43, 0x9c, 0x42, 0x6e, 0xd0, 0xa3, 0xf5, - 0x1c, 0x43, 0x9c, 0x42, 0x6c, 0xd0, 0x03, 0xf5, 0x80, 0x63, 0x9c, 0x42, - 0x5e, 0xd0, 0x45, 0x48, 0x84, 0x42, 0x14, 0xbf, 0x4f, 0xf0, 0xff, 0x34, - 0x08, 0x24, 0x20, 0xe0, 0x3a, 0x4a, 0xd2, 0xf8, 0xe8, 0x10, 0x41, 0xf4, - 0x00, 0x21, 0xc2, 0xf8, 0xe8, 0x10, 0xd2, 0xf8, 0xe8, 0x20, 0x02, 0xf4, - 0x00, 0x22, 0x06, 0x92, 0x06, 0x9a, 0x3c, 0x4a, 0x94, 0x42, 0x3a, 0xd0, - 0x39, 0x4a, 0x94, 0x42, 0x9f, 0xd1, 0x31, 0x4b, 0x08, 0x24, 0xd3, 0xf8, - 0xf4, 0x20, 0x42, 0xf0, 0x08, 0x02, 0xc3, 0xf8, 0xf4, 0x20, 0xd3, 0xf8, - 0xf4, 0x30, 0x03, 0xf0, 0x08, 0x03, 0x01, 0x93, 0x01, 0x9b, 0x59, 0x46, - 0x09, 0x20, 0x6c, 0x60, 0xf4, 0xf7, 0x12, 0xfd, 0x01, 0x21, 0x09, 0x20, - 0xf4, 0xf7, 0xc6, 0xfc, 0x51, 0x46, 0x0a, 0x20, 0xf4, 0xf7, 0x0a, 0xfd, - 0x01, 0x21, 0x0a, 0x20, 0xf4, 0xf7, 0xbe, 0xfc, 0x00, 0x23, 0x4f, 0xf4, - 0xe1, 0x32, 0xc5, 0xe9, 0x04, 0x33, 0xc5, 0xe9, 0x02, 0x23, 0x27, 0x4b, - 0xab, 0x61, 0xf6, 0xf7, 0xbf, 0xfa, 0x01, 0x23, 0xc8, 0xf8, 0x00, 0x30, - 0xf6, 0xf7, 0x40, 0xfd, 0x12, 0x48, 0xff, 0xf7, 0xd7, 0xf9, 0x22, 0x48, - 0x47, 0xf8, 0x26, 0x90, 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x15, 0x4b, - 0xd3, 0xf8, 0xe8, 0x20, 0x42, 0xf0, 0x00, 0x42, 0xc3, 0xf8, 0xe8, 0x20, - 0xd3, 0xf8, 0xe8, 0x30, 0x03, 0xf0, 0x00, 0x43, 0x02, 0x93, 0x02, 0x9b, - 0x07, 0x24, 0xc6, 0xe7, 0x02, 0x24, 0xc4, 0xe7, 0x03, 0x24, 0xc2, 0xe7, - 0x04, 0x24, 0xc0, 0xe7, 0x05, 0x24, 0xbe, 0xe7, 0x06, 0x24, 0xbc, 0xe7, - 0x00, 0x20, 0xe1, 0xe7, 0x10, 0x00, 0x00, 0x24, 0x64, 0x85, 0x00, 0x24, - 0x84, 0xe6, 0x01, 0x08, 0xf0, 0x86, 0x00, 0x24, 0x2c, 0xe5, 0x01, 0x08, - 0xd0, 0xe3, 0x01, 0x08, 0xa0, 0x6a, 0x00, 0x24, 0x00, 0x10, 0x01, 0x40, - 0x00, 0x44, 0x02, 0x58, 0x00, 0x14, 0x01, 0x40, 0x00, 0x44, 0x00, 0x40, - 0x00, 0x4c, 0x00, 0x40, 0x00, 0x50, 0x00, 0x40, 0x00, 0x78, 0x00, 0x40, - 0x00, 0x48, 0x00, 0x40, 0x00, 0x0c, 0x00, 0x58, 0x00, 0x7c, 0x00, 0x40, - 0x09, 0x00, 0x0a, 0x00, 0x8c, 0x86, 0x00, 0x24, 0x38, 0xb5, 0x0d, 0x46, - 0xff, 0xf7, 0xa2, 0xfe, 0x04, 0x46, 0x30, 0xb9, 0x0a, 0xf0, 0xcc, 0xfb, - 0x09, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x30, 0x38, 0xbd, 0x03, 0x68, - 0xdb, 0x69, 0x98, 0x47, 0x00, 0x28, 0x20, 0x46, 0x14, 0xbf, 0x4f, 0xf4, - 0x00, 0x53, 0x4f, 0xf4, 0x00, 0x43, 0x6b, 0x60, 0x23, 0x68, 0x9b, 0x6a, - 0x98, 0x47, 0x28, 0x61, 0x00, 0x20, 0xed, 0xe7, 0x13, 0xb5, 0xcd, 0xe9, - 0x00, 0x21, 0xff, 0xf7, 0x83, 0xfe, 0xdd, 0xe9, 0x00, 0x21, 0x40, 0xb9, - 0x0a, 0xf0, 0xac, 0xfb, 0x09, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x34, - 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, 0x03, 0x68, 0x1b, 0x69, 0x98, 0x47, - 0x04, 0x1e, 0xf7, 0xda, 0x64, 0x42, 0x0a, 0xf0, 0x9d, 0xfb, 0x04, 0x60, - 0xf0, 0xe7, 0x10, 0xb5, 0xff, 0xf7, 0x6a, 0xfe, 0x04, 0x46, 0x28, 0xb9, - 0x0a, 0xf0, 0x94, 0xfb, 0x09, 0x23, 0x03, 0x60, 0x20, 0x46, 0x10, 0xbd, - 0x03, 0x68, 0xdb, 0x69, 0x98, 0x47, 0x04, 0x1e, 0xf8, 0xda, 0x64, 0x42, - 0x0a, 0xf0, 0x88, 0xfb, 0x04, 0x60, 0x00, 0x24, 0xf2, 0xe7, 0xff, 0xf7, - 0xe8, 0xbf, 0x13, 0xb5, 0xcd, 0xe9, 0x00, 0x21, 0xff, 0xf7, 0x50, 0xfe, - 0xdd, 0xe9, 0x00, 0x21, 0x40, 0xb9, 0x0a, 0xf0, 0x79, 0xfb, 0x09, 0x23, - 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, - 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x04, 0x1e, 0xf7, 0xda, 0x64, 0x42, - 0x0a, 0xf0, 0x6a, 0xfb, 0x04, 0x60, 0xf0, 0xe7, 0x7f, 0xb5, 0x00, 0x2a, - 0x04, 0x46, 0x0d, 0x46, 0x06, 0xda, 0x0a, 0xf0, 0x61, 0xfb, 0x16, 0x23, - 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x30, 0x19, 0xe0, 0x01, 0x92, 0xff, 0xf7, - 0xbe, 0xff, 0x01, 0x9a, 0xe8, 0xb1, 0x11, 0x4e, 0x01, 0x22, 0x0d, 0xf1, - 0x0f, 0x01, 0x20, 0x46, 0xff, 0xf7, 0xcd, 0xff, 0x00, 0x28, 0xee, 0xdb, - 0x0a, 0xd0, 0x9d, 0xf8, 0x0f, 0x30, 0x0d, 0x2b, 0x08, 0xd1, 0x32, 0x5d, - 0x0a, 0x2a, 0x33, 0x55, 0xee, 0xd0, 0x0a, 0x23, 0x01, 0x20, 0x2b, 0x70, - 0x04, 0xb0, 0x70, 0xbd, 0x0a, 0x2b, 0x02, 0xd1, 0x32, 0x5d, 0x0d, 0x2a, - 0xf3, 0xe7, 0x33, 0x55, 0xf4, 0xe7, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, - 0xb2, 0xff, 0xf1, 0xe7, 0x68, 0x85, 0x00, 0x24, 0x13, 0xb5, 0xcd, 0xe9, - 0x00, 0x21, 0xff, 0xf7, 0xff, 0xfd, 0xdd, 0xe9, 0x00, 0x21, 0x40, 0xb9, - 0x0a, 0xf0, 0x28, 0xfb, 0x09, 0x23, 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x34, - 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, 0x03, 0x68, 0xdb, 0x68, 0x98, 0x47, - 0x04, 0x1e, 0xf7, 0xda, 0x64, 0x42, 0x0a, 0xf0, 0x19, 0xfb, 0x04, 0x60, - 0xf0, 0xe7, 0x00, 0x00, 0x2d, 0xe9, 0xf7, 0x4f, 0xb2, 0xf1, 0x00, 0x08, - 0x05, 0x46, 0x0e, 0x46, 0x09, 0xda, 0x0a, 0xf0, 0x0d, 0xfb, 0x16, 0x23, - 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x34, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0xff, 0xf7, 0x68, 0xff, 0x04, 0x46, 0x60, 0xb3, 0x1f, 0x4a, - 0x00, 0x27, 0xdf, 0xf8, 0x7c, 0xa0, 0x4f, 0xf0, 0x0d, 0x0b, 0x53, 0x5d, - 0x3c, 0x46, 0x91, 0x46, 0xb8, 0x45, 0x21, 0xdd, 0xf2, 0x5d, 0x0a, 0x2a, - 0x1b, 0xd1, 0x0d, 0x2b, 0x01, 0x93, 0x18, 0xd0, 0xbc, 0x42, 0x0c, 0xda, - 0x3a, 0x1b, 0x31, 0x19, 0x28, 0x46, 0xff, 0xf7, 0xb7, 0xff, 0x00, 0x28, - 0x01, 0x9b, 0xda, 0xdb, 0x04, 0x44, 0xa7, 0x42, 0xd9, 0xdc, 0x09, 0xf8, - 0x05, 0x30, 0x01, 0x22, 0x51, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xaa, 0xff, - 0x00, 0x28, 0xce, 0xdb, 0xcf, 0xd0, 0x09, 0xf8, 0x05, 0xb0, 0xf3, 0x5d, - 0x01, 0x37, 0xdb, 0xe7, 0xa0, 0x45, 0xc8, 0xdd, 0xa8, 0xeb, 0x04, 0x02, - 0x31, 0x19, 0x28, 0x46, 0xff, 0xf7, 0x9a, 0xff, 0x00, 0x28, 0xbe, 0xdb, - 0x24, 0x18, 0x1f, 0xbf, 0x36, 0x19, 0x02, 0x4b, 0x16, 0xf8, 0x01, 0x2c, - 0x5a, 0x55, 0xb8, 0xe7, 0xa8, 0x85, 0x00, 0x24, 0xb0, 0xe1, 0x01, 0x08, - 0x38, 0xb5, 0x05, 0x46, 0x00, 0x24, 0xff, 0xf7, 0x8b, 0xfd, 0x0b, 0x4b, - 0x43, 0xf8, 0x25, 0x40, 0x30, 0xb9, 0x0a, 0xf0, 0xb3, 0xfa, 0x09, 0x23, - 0x03, 0x60, 0x4f, 0xf0, 0xff, 0x30, 0x38, 0xbd, 0x03, 0x68, 0x5b, 0x69, - 0x98, 0x47, 0x05, 0x1e, 0x04, 0xda, 0x6d, 0x42, 0x0a, 0xf0, 0xa6, 0xfa, - 0x05, 0x60, 0xf2, 0xe7, 0x20, 0x46, 0xf2, 0xe7, 0x10, 0x00, 0x00, 0x24, - 0xf8, 0xb5, 0x4b, 0x69, 0x15, 0x46, 0x0c, 0x46, 0x9b, 0x1a, 0x00, 0x2b, - 0xac, 0xbf, 0xd3, 0x18, 0x13, 0x1c, 0x4b, 0x61, 0x03, 0x89, 0x8b, 0x80, - 0xff, 0xf7, 0xb2, 0xf8, 0x02, 0x46, 0x03, 0x68, 0x6b, 0xb3, 0x5e, 0x69, - 0x61, 0x69, 0x77, 0x1a, 0x00, 0x2f, 0x24, 0xdb, 0x8e, 0x42, 0x26, 0xd1, - 0x9b, 0x68, 0xa3, 0x60, 0x13, 0xb1, 0x04, 0xf1, 0x08, 0x01, 0x19, 0x61, - 0x13, 0x68, 0x21, 0x46, 0x00, 0x26, 0x41, 0xf8, 0x0c, 0x3f, 0x9e, 0x60, - 0x19, 0x61, 0x14, 0x60, 0x83, 0x6a, 0x22, 0x61, 0x6b, 0xb1, 0x90, 0xf8, - 0x24, 0x20, 0x52, 0xb1, 0x02, 0x68, 0xa2, 0x42, 0x07, 0xd1, 0xe2, 0x68, - 0x2a, 0xb9, 0x61, 0x69, 0xc0, 0x6a, 0x49, 0x1b, 0x21, 0xea, 0xe1, 0x71, - 0x98, 0x47, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, 0x71, 0xb8, 0x03, 0xf1, - 0x08, 0x02, 0x9b, 0x68, 0xd0, 0xe7, 0xa3, 0x60, 0x13, 0xb1, 0x04, 0xf1, - 0x08, 0x01, 0x19, 0x61, 0x00, 0x23, 0xe3, 0x60, 0xdd, 0xe7, 0x38, 0xb5, - 0x85, 0x69, 0x00, 0xf1, 0x08, 0x04, 0xff, 0xf7, 0x73, 0xf8, 0x6a, 0x68, - 0x53, 0x68, 0x9c, 0x42, 0x09, 0xd1, 0x43, 0x69, 0x28, 0x46, 0x53, 0x60, - 0xfe, 0xf7, 0x31, 0xfb, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0x52, 0xb8, - 0x13, 0x46, 0x00, 0x2b, 0xf8, 0xd0, 0xda, 0x68, 0x94, 0x42, 0xf9, 0xd1, - 0x42, 0x69, 0xda, 0x60, 0xf2, 0xe7, 0x84, 0xb0, 0xf8, 0xb5, 0x04, 0x46, - 0x07, 0xa8, 0xdd, 0xe9, 0x0c, 0x67, 0x04, 0xf1, 0x28, 0x05, 0x80, 0xe8, - 0x0e, 0x00, 0xff, 0xf7, 0x51, 0xf8, 0x0f, 0xc8, 0x85, 0xe8, 0x0f, 0x00, - 0x20, 0x46, 0xff, 0xf7, 0xd2, 0xff, 0xa0, 0x69, 0xc4, 0xe9, 0x08, 0x67, - 0xff, 0xf7, 0x7a, 0xfa, 0x82, 0x19, 0x20, 0x46, 0x41, 0xeb, 0x07, 0x03, - 0xff, 0xf7, 0x01, 0xf9, 0xbd, 0xe8, 0xf8, 0x40, 0x04, 0xb0, 0xff, 0xf7, - 0x27, 0xb8, 0xf8, 0xb5, 0x04, 0x46, 0x0e, 0x46, 0x15, 0x46, 0x00, 0x21, - 0x20, 0x22, 0x68, 0x30, 0x1f, 0x46, 0x0b, 0xf0, 0x91, 0xf8, 0x94, 0xf8, - 0x60, 0x30, 0x72, 0x1c, 0x84, 0xf8, 0x68, 0x30, 0x16, 0xbf, 0x00, 0x23, - 0x01, 0x23, 0x84, 0xf8, 0x69, 0x60, 0x84, 0xf8, 0x6a, 0x30, 0x94, 0xf8, - 0x61, 0x30, 0x84, 0xf8, 0x6c, 0x30, 0x94, 0xf8, 0x62, 0x30, 0x84, 0xf8, - 0x6d, 0x30, 0x6b, 0x1c, 0x16, 0xbf, 0x00, 0x23, 0x01, 0x23, 0x25, 0x67, - 0x01, 0x37, 0x84, 0xf8, 0x74, 0x30, 0x94, 0xf8, 0x63, 0x30, 0x84, 0xf8, - 0x78, 0x30, 0x94, 0xf8, 0x64, 0x30, 0x84, 0xf8, 0x79, 0x30, 0x16, 0xbf, - 0x00, 0x23, 0x01, 0x23, 0xe3, 0x67, 0x84, 0xf8, 0x80, 0x30, 0xd4, 0xf8, - 0x88, 0x30, 0x84, 0xf8, 0x84, 0x30, 0x94, 0xf8, 0x65, 0x30, 0x84, 0xf8, - 0x85, 0x30, 0xf8, 0xbd, 0x43, 0x68, 0x1a, 0x68, 0x03, 0x68, 0x1a, 0x42, - 0x14, 0xbf, 0x01, 0x20, 0x00, 0x20, 0x70, 0x47, 0x09, 0x4b, 0x30, 0xb5, - 0x1a, 0x46, 0x09, 0x4c, 0xd3, 0xf8, 0x94, 0x50, 0xa5, 0x42, 0xfb, 0xd1, - 0x03, 0x68, 0x29, 0xb1, 0x81, 0x68, 0x0b, 0x60, 0x4f, 0xf4, 0x40, 0x73, - 0x53, 0x61, 0x30, 0xbd, 0xc1, 0x68, 0x1b, 0x04, 0xf7, 0xe7, 0x00, 0xbf, - 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x38, 0xb5, 0x05, 0x46, - 0x04, 0x68, 0x54, 0xb9, 0xfe, 0xf7, 0x5c, 0xfe, 0x2c, 0x68, 0x24, 0xb9, - 0x2c, 0x1d, 0x20, 0x46, 0xf2, 0xf7, 0x2c, 0xfb, 0x2c, 0x60, 0xfe, 0xf7, - 0x4b, 0xfe, 0x20, 0x46, 0x38, 0xbd, 0x00, 0x00, 0x2d, 0xe9, 0xf7, 0x4f, - 0x89, 0x46, 0x5d, 0x49, 0x05, 0x46, 0x0b, 0xf0, 0x07, 0xfe, 0x04, 0x46, - 0x28, 0xb9, 0xff, 0xf7, 0x73, 0xfc, 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x58, 0x49, 0x28, 0x46, 0x0b, 0xf0, 0xfb, 0xfd, 0x20, 0xb9, - 0x01, 0x20, 0x01, 0x24, 0xff, 0xf7, 0x66, 0xfc, 0xf1, 0xe7, 0x54, 0x49, - 0x28, 0x46, 0x0b, 0xf0, 0xf1, 0xfd, 0x20, 0xb9, 0x02, 0x20, 0x02, 0x24, - 0xff, 0xf7, 0x5c, 0xfc, 0xe7, 0xe7, 0x2b, 0x78, 0x40, 0x2b, 0x02, 0xd1, - 0xd5, 0xf8, 0x01, 0x40, 0xe1, 0xe7, 0x4d, 0x48, 0x03, 0x24, 0xff, 0xf7, - 0xc1, 0xff, 0xfb, 0xf7, 0x21, 0xfb, 0x4b, 0x4b, 0x1f, 0x46, 0x53, 0xf8, - 0x24, 0x60, 0x00, 0x2e, 0x76, 0xd0, 0x01, 0x34, 0x40, 0x2c, 0xf8, 0xd1, - 0x0a, 0xf0, 0x72, 0xf9, 0x18, 0x23, 0x03, 0x60, 0x43, 0x48, 0xff, 0xf7, - 0xaf, 0xff, 0xfb, 0xf7, 0xef, 0xfa, 0x4d, 0xe0, 0x3a, 0xb1, 0x1a, 0x78, - 0xa3, 0xeb, 0x05, 0x0a, 0x98, 0x46, 0x01, 0x33, 0x2f, 0x2a, 0xf7, 0xd1, - 0x98, 0x46, 0x3e, 0x48, 0xff, 0xf7, 0xa0, 0xff, 0xfb, 0xf7, 0x00, 0xfb, - 0x3c, 0x4b, 0x1e, 0x68, 0x1e, 0xb3, 0xd6, 0xf8, 0x08, 0xb0, 0xbb, 0xf1, - 0x00, 0x0f, 0x1c, 0xd0, 0x58, 0x46, 0x0b, 0xf0, 0xc5, 0xfd, 0x50, 0x45, - 0x17, 0xd1, 0x52, 0x46, 0x29, 0x46, 0x58, 0x46, 0x0c, 0xf0, 0x24, 0xfb, - 0x88, 0xb9, 0x32, 0x48, 0xff, 0xf7, 0x88, 0xff, 0xfb, 0xf7, 0xc8, 0xfa, - 0x33, 0x7b, 0x73, 0xbb, 0x04, 0x3e, 0x01, 0x96, 0x01, 0x9b, 0x2f, 0x4a, - 0x47, 0xf8, 0x24, 0x30, 0x00, 0x23, 0x13, 0x55, 0x2d, 0x4a, 0x13, 0x55, - 0x95, 0xe7, 0x76, 0x68, 0xda, 0xe7, 0xba, 0xf1, 0x07, 0x0f, 0x18, 0xd1, - 0x52, 0x46, 0x29, 0x46, 0x29, 0x48, 0x0c, 0xf0, 0x07, 0xfb, 0x90, 0xb9, - 0x23, 0x48, 0xff, 0xf7, 0x6b, 0xff, 0xfb, 0xf7, 0xab, 0xfa, 0x26, 0x4b, - 0x1e, 0x68, 0x00, 0x2e, 0xde, 0xd1, 0x0a, 0xf0, 0x21, 0xf9, 0x13, 0x23, - 0x03, 0x60, 0x00, 0x23, 0x47, 0xf8, 0x24, 0x30, 0x4f, 0xf0, 0xff, 0x34, - 0x77, 0xe7, 0x1a, 0x48, 0xff, 0xf7, 0x58, 0xff, 0xfb, 0xf7, 0x98, 0xfa, - 0xef, 0xe7, 0x01, 0x2b, 0xed, 0xd1, 0x56, 0xf8, 0x04, 0x3c, 0x42, 0x46, - 0x01, 0xa9, 0x30, 0x1f, 0x9d, 0x68, 0x29, 0xf4, 0x80, 0x33, 0xa8, 0x47, - 0x05, 0x46, 0x00, 0x28, 0xc4, 0xd0, 0x6d, 0x42, 0x0a, 0xf0, 0x02, 0xf9, - 0x05, 0x60, 0xe0, 0xe7, 0x4f, 0xf0, 0xff, 0x32, 0x0a, 0x48, 0x43, 0xf8, - 0x24, 0x20, 0xff, 0xf7, 0x3b, 0xff, 0xfb, 0xf7, 0x7b, 0xfa, 0x28, 0x46, - 0x0e, 0x49, 0x01, 0x96, 0x0c, 0xf0, 0xc9, 0xfb, 0x05, 0x44, 0x2b, 0x46, - 0x85, 0xe7, 0x00, 0xbf, 0xe0, 0xe6, 0x01, 0x08, 0xe7, 0xe6, 0x01, 0x08, - 0xd8, 0xe6, 0x01, 0x08, 0xe8, 0x85, 0x00, 0x24, 0x10, 0x00, 0x00, 0x24, - 0xcc, 0x06, 0x00, 0x24, 0xc8, 0x06, 0x00, 0x24, 0x68, 0x85, 0x00, 0x24, - 0xa8, 0x85, 0x00, 0x24, 0xb2, 0xe1, 0x01, 0x08, 0x38, 0x86, 0x00, 0x24, - 0x53, 0xdf, 0x01, 0x08, 0x1d, 0x4b, 0x70, 0xb5, 0x03, 0x60, 0x04, 0x46, - 0x1c, 0x48, 0xff, 0xf7, 0x11, 0xff, 0xfb, 0xf7, 0x71, 0xfa, 0xa3, 0x68, - 0x2b, 0xb1, 0x1a, 0x49, 0x62, 0x68, 0x0b, 0x68, 0xa3, 0x42, 0x24, 0xd1, - 0x0a, 0x60, 0x18, 0x4b, 0x15, 0x48, 0x1a, 0x68, 0xa2, 0x42, 0x04, 0xbf, - 0x00, 0x22, 0x1a, 0x60, 0xff, 0xf7, 0xfe, 0xfe, 0xfb, 0xf7, 0x3e, 0xfa, - 0x25, 0x7b, 0xa5, 0xb9, 0x12, 0x48, 0x26, 0x1f, 0xff, 0xf7, 0xf6, 0xfe, - 0xfb, 0xf7, 0x56, 0xfa, 0x10, 0x4a, 0x40, 0x23, 0x52, 0xf8, 0x04, 0x1b, - 0x8e, 0x42, 0x08, 0xbf, 0x42, 0xf8, 0x04, 0x5c, 0x01, 0x3b, 0xf7, 0xd1, - 0x0a, 0x48, 0xff, 0xf7, 0xe7, 0xfe, 0xfb, 0xf7, 0x27, 0xfa, 0x20, 0x46, - 0x70, 0xbd, 0x19, 0x46, 0x5b, 0x68, 0xa3, 0x42, 0xfb, 0xd1, 0x4a, 0x60, - 0xd5, 0xe7, 0x00, 0xbf, 0x5c, 0xde, 0x01, 0x08, 0xcc, 0x06, 0x00, 0x24, - 0xc8, 0x06, 0x00, 0x24, 0x38, 0x86, 0x00, 0x24, 0xe8, 0x85, 0x00, 0x24, - 0x10, 0x00, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xb4, 0xff, - 0x20, 0x46, 0x0a, 0xf0, 0x9f, 0xfe, 0x20, 0x46, 0x10, 0xbd, 0x00, 0x00, - 0x08, 0xb5, 0x03, 0x48, 0xff, 0xf7, 0xc2, 0xfe, 0xbd, 0xe8, 0x08, 0x40, - 0xfb, 0xf7, 0x00, 0xba, 0x10, 0x86, 0x00, 0x24, 0x08, 0xb5, 0x03, 0x48, - 0xff, 0xf7, 0xb8, 0xfe, 0xbd, 0xe8, 0x08, 0x40, 0xfb, 0xf7, 0x16, 0xba, - 0x10, 0x86, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x47, 0x9d, 0xf8, 0x20, 0x70, - 0x05, 0x46, 0x89, 0x46, 0x92, 0x46, 0x02, 0x2f, 0x98, 0x46, 0x9d, 0xf8, - 0x24, 0x60, 0x22, 0xd8, 0x12, 0x4b, 0xdb, 0x5d, 0xfb, 0xb1, 0xb6, 0xfb, - 0xf3, 0xf4, 0x03, 0xfb, 0x14, 0x64, 0x14, 0xf0, 0xff, 0x04, 0x18, 0xd1, - 0xff, 0xf7, 0xde, 0xff, 0x9d, 0xf8, 0x28, 0x30, 0x28, 0x46, 0x85, 0xf8, - 0x60, 0x90, 0x85, 0xf8, 0x65, 0x30, 0x0b, 0x9b, 0x85, 0xf8, 0x61, 0xa0, - 0x85, 0xf8, 0x62, 0x80, 0x85, 0xf8, 0x63, 0x70, 0x85, 0xf8, 0x64, 0x60, - 0xc5, 0xf8, 0x88, 0x30, 0xff, 0xf7, 0xc0, 0xff, 0x20, 0x46, 0xbd, 0xe8, - 0xf0, 0x87, 0x4f, 0xf0, 0xff, 0x30, 0xfa, 0xe7, 0xc5, 0xe1, 0x01, 0x08, - 0x27, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x60, 0xff, 0xf7, 0xbc, 0xff, - 0x25, 0x49, 0x62, 0x68, 0x13, 0x68, 0x23, 0xf0, 0x01, 0x03, 0x13, 0x60, - 0x00, 0x23, 0xa3, 0x64, 0x84, 0xf8, 0x45, 0x30, 0x21, 0x4b, 0xd1, 0xf8, - 0x8c, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0x20, 0x4b, 0xb4, 0xf9, 0x54, 0x00, - 0xda, 0x6f, 0x42, 0xf4, 0x80, 0x42, 0xda, 0x67, 0xda, 0x6f, 0x22, 0xf4, - 0x80, 0x42, 0xda, 0x67, 0x4f, 0xf4, 0x40, 0x72, 0xca, 0x60, 0x40, 0xf2, - 0xc3, 0x31, 0xd3, 0xf8, 0xd4, 0x20, 0x22, 0xf4, 0x80, 0x42, 0xc3, 0xf8, - 0xd4, 0x20, 0xf4, 0xf7, 0xe7, 0xf8, 0xb4, 0xf9, 0x56, 0x00, 0x40, 0xf2, - 0xc3, 0x31, 0xf4, 0xf7, 0xe1, 0xf8, 0xb4, 0xf9, 0x58, 0x00, 0x40, 0xf2, - 0xc3, 0x31, 0xf4, 0xf7, 0xdb, 0xf8, 0xb4, 0xf9, 0x5a, 0x00, 0x40, 0xf2, - 0xc3, 0x31, 0xf4, 0xf7, 0xd5, 0xf8, 0xb4, 0xf9, 0x5c, 0x00, 0x40, 0xf2, - 0xc3, 0x31, 0xf4, 0xf7, 0xcf, 0xf8, 0x40, 0xf2, 0xc3, 0x31, 0xb4, 0xf9, - 0x5e, 0x00, 0xf4, 0xf7, 0xc9, 0xf8, 0x20, 0x46, 0xff, 0xf7, 0x6a, 0xff, - 0x20, 0x46, 0x10, 0xbd, 0x2c, 0xde, 0x01, 0x08, 0x00, 0x64, 0x02, 0x58, - 0x00, 0x03, 0x00, 0x80, 0x00, 0x44, 0x02, 0x58, 0x10, 0xb5, 0x04, 0x46, - 0xff, 0xf7, 0xa4, 0xff, 0x20, 0x46, 0x0a, 0xf0, 0xf5, 0xfd, 0x20, 0x46, - 0x10, 0xbd, 0x08, 0xb5, 0xcc, 0x30, 0xff, 0xf7, 0x19, 0xfe, 0xbd, 0xe8, - 0x08, 0x40, 0xfb, 0xf7, 0x57, 0xb9, 0x08, 0xb5, 0xcc, 0x30, 0xff, 0xf7, - 0x11, 0xfe, 0xbd, 0xe8, 0x08, 0x40, 0xfb, 0xf7, 0x6f, 0xb9, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x4f, 0x0d, 0x46, 0x16, 0x46, 0x85, 0xb0, 0xf2, 0xf7, - 0x71, 0xf9, 0xac, 0x19, 0x00, 0xf1, 0x00, 0x60, 0xa0, 0x42, 0xc0, 0xf0, - 0x1e, 0x81, 0x09, 0xd9, 0x20, 0x46, 0xf2, 0xf7, 0x47, 0xf9, 0xb4, 0xfb, - 0xf0, 0xf3, 0x03, 0xfb, 0x10, 0x40, 0x00, 0x28, 0x40, 0xf0, 0x13, 0x81, - 0x90, 0x48, 0x4f, 0xf0, 0x00, 0x09, 0xdf, 0xf8, 0x58, 0xb2, 0xff, 0xf7, - 0xed, 0xfd, 0xfb, 0xf7, 0x4d, 0xf9, 0x00, 0x2e, 0x00, 0xf0, 0xfe, 0x80, - 0xb9, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0xf8, 0x80, 0x05, 0xf1, 0x78, 0x43, - 0xb5, 0xf1, 0x01, 0x6f, 0x4f, 0xf0, 0x10, 0x0a, 0x4f, 0xea, 0x53, 0x43, - 0x01, 0x93, 0x34, 0xbf, 0x01, 0x23, 0x02, 0x23, 0x01, 0x2b, 0x03, 0xf0, - 0x01, 0x08, 0x03, 0xf0, 0x02, 0x07, 0x0c, 0xbf, 0x4f, 0xf0, 0x00, 0x63, - 0x4f, 0xf0, 0x01, 0x63, 0x02, 0x93, 0xfe, 0xf7, 0xf7, 0xfd, 0xfe, 0xf7, - 0xd1, 0xfd, 0xbb, 0xf8, 0x00, 0x30, 0x4f, 0xf6, 0xfd, 0x71, 0x5a, 0x1e, - 0x92, 0xb2, 0x8a, 0x42, 0x97, 0xbf, 0x78, 0x4a, 0x4f, 0xf0, 0x02, 0x63, - 0x02, 0xea, 0x83, 0x23, 0x03, 0xf1, 0x00, 0x63, 0x9d, 0x42, 0x0e, 0xd2, - 0xb5, 0xf1, 0x00, 0x6f, 0x0b, 0xd3, 0x73, 0x4c, 0x73, 0x4b, 0xd4, 0xf8, - 0x88, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0xf8, 0xf7, 0xa5, 0xfd, 0x60, 0xb1, - 0x4f, 0xf4, 0x40, 0x73, 0xa3, 0x60, 0xfe, 0xf7, 0x9d, 0xfd, 0xfe, 0xf7, - 0xbf, 0xfd, 0xba, 0xf1, 0x01, 0x0a, 0xd4, 0xd1, 0x4f, 0xf0, 0xff, 0x39, - 0x6b, 0xe0, 0xfe, 0xf7, 0x7b, 0xfd, 0xbb, 0xf8, 0x00, 0x20, 0x4f, 0xf6, - 0xfd, 0x71, 0xdf, 0xf8, 0xac, 0x91, 0x53, 0x1e, 0x9b, 0xb2, 0x8b, 0x42, - 0x99, 0xf8, 0x14, 0x30, 0x97, 0xbf, 0x63, 0x4c, 0x4f, 0xf0, 0x01, 0x64, - 0x04, 0xea, 0x42, 0x24, 0x04, 0xf1, 0x00, 0x64, 0xa5, 0x42, 0x2a, 0xbf, - 0x2c, 0x1b, 0x01, 0x9c, 0x64, 0x0c, 0x01, 0x2b, 0x00, 0xf0, 0x93, 0x80, - 0x01, 0x20, 0x00, 0x23, 0x89, 0xf8, 0x14, 0x00, 0xc9, 0xf8, 0x18, 0x30, - 0xb8, 0xf1, 0x00, 0x0f, 0x00, 0xf0, 0x9d, 0x80, 0xf4, 0xf7, 0xfa, 0xf8, - 0x03, 0x1e, 0x18, 0xbf, 0x01, 0x23, 0x00, 0x2f, 0x00, 0xf0, 0x99, 0x80, - 0x02, 0x20, 0x03, 0x93, 0xf4, 0xf7, 0xf0, 0xf8, 0x03, 0x9b, 0x00, 0x28, - 0x3b, 0xd0, 0x01, 0x20, 0x00, 0x23, 0xc0, 0x1a, 0x89, 0xf8, 0x14, 0x30, - 0x18, 0xbf, 0x01, 0x20, 0xc0, 0xf1, 0x00, 0x09, 0x02, 0x9b, 0x03, 0xeb, - 0x44, 0x44, 0xbf, 0xf3, 0x4f, 0x8f, 0x49, 0x4b, 0x04, 0xf5, 0x00, 0x32, - 0xc3, 0xf8, 0x70, 0x42, 0x20, 0x34, 0x94, 0x42, 0xfa, 0xd1, 0xbf, 0xf3, - 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, - 0x6f, 0x8f, 0x00, 0x22, 0xc3, 0xf8, 0x50, 0x22, 0xbf, 0xf3, 0x4f, 0x8f, - 0xbf, 0xf3, 0x6f, 0x8f, 0xfe, 0xf7, 0x0c, 0xfd, 0xf8, 0xf7, 0x20, 0xfd, - 0x00, 0x28, 0x94, 0xd1, 0x37, 0x4b, 0x4f, 0xf4, 0x40, 0x72, 0x9a, 0x60, - 0xb9, 0xf1, 0x00, 0x0f, 0x8d, 0xd1, 0xfe, 0xf7, 0x2b, 0xfd, 0xfe, 0xf7, - 0x4d, 0xfd, 0x28, 0x46, 0xf2, 0xf7, 0x7c, 0xf8, 0x36, 0x1a, 0x05, 0x44, - 0x41, 0xe7, 0x00, 0x2b, 0xc1, 0xd1, 0xb8, 0xf1, 0x00, 0x0f, 0x0a, 0xd0, - 0x30, 0x4a, 0xd3, 0x68, 0x23, 0xf4, 0xe6, 0x63, 0xd3, 0x60, 0xd3, 0x68, - 0x43, 0xea, 0x04, 0x23, 0x43, 0xf0, 0xa4, 0x03, 0xd3, 0x60, 0x77, 0xb1, - 0x2a, 0x4a, 0xd2, 0xf8, 0x0c, 0x31, 0x23, 0xf4, 0xe6, 0x63, 0xc2, 0xf8, - 0x0c, 0x31, 0xd2, 0xf8, 0x0c, 0x31, 0x43, 0xea, 0x04, 0x23, 0x43, 0xf0, - 0xa4, 0x03, 0xc2, 0xf8, 0x0c, 0x31, 0xb8, 0xf1, 0x00, 0x0f, 0x2b, 0xd0, - 0x01, 0x20, 0xf4, 0xf7, 0x8b, 0xf8, 0x20, 0x4a, 0xd3, 0x68, 0x23, 0xf4, - 0xe0, 0x63, 0x23, 0xf0, 0x04, 0x03, 0xd3, 0x60, 0x5f, 0xb1, 0x02, 0x20, - 0xf4, 0xf7, 0x80, 0xf8, 0x1a, 0x4a, 0xd2, 0xf8, 0x0c, 0x31, 0x23, 0xf4, - 0xe0, 0x63, 0x23, 0xf0, 0x04, 0x03, 0xc2, 0xf8, 0x0c, 0x31, 0x00, 0x28, - 0x88, 0xd1, 0x00, 0x20, 0x86, 0xe7, 0x4f, 0xf0, 0xff, 0x39, 0x8b, 0xe7, - 0x4f, 0xf0, 0xff, 0x39, 0x0b, 0x48, 0xff, 0xf7, 0xe7, 0xfc, 0xfb, 0xf7, - 0x27, 0xf8, 0x48, 0x46, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x4f, 0xf0, - 0xff, 0x39, 0xf8, 0xe7, 0x00, 0x2f, 0xea, 0xd0, 0xdb, 0xe7, 0x00, 0x2f, - 0xe7, 0xd0, 0x43, 0x46, 0x66, 0xe7, 0x00, 0x28, 0x7f, 0xf4, 0x6b, 0xaf, - 0xaa, 0xe7, 0x00, 0xbf, 0x04, 0x74, 0x00, 0x24, 0x00, 0xfc, 0x3f, 0x00, - 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x00, 0xfe, 0x1f, 0x00, - 0x00, 0xed, 0x00, 0xe0, 0x00, 0x20, 0x00, 0x52, 0x80, 0xe8, 0xf1, 0x1f, - 0x50, 0x0e, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, 0x12, 0xf0, 0x1f, 0x04, - 0x87, 0xb0, 0x82, 0x46, 0x0f, 0x46, 0x16, 0x46, 0x99, 0x46, 0x40, 0xf0, - 0x26, 0x81, 0x00, 0x29, 0x00, 0xf0, 0x23, 0x81, 0xf2, 0xf7, 0x1c, 0xf8, - 0x09, 0xeb, 0x06, 0x03, 0x00, 0xf1, 0x00, 0x60, 0x83, 0x42, 0x00, 0xf2, - 0x1a, 0x81, 0x8e, 0x48, 0xdf, 0xf8, 0x50, 0xb2, 0xff, 0xf7, 0xa4, 0xfc, - 0xfb, 0xf7, 0x04, 0xf8, 0xb9, 0xf1, 0x00, 0x0f, 0x00, 0xf0, 0x06, 0x81, - 0x00, 0x2c, 0x40, 0xf0, 0x01, 0x81, 0x30, 0x46, 0xf1, 0xf7, 0xe4, 0xff, - 0xb6, 0xfb, 0xf0, 0xf5, 0x00, 0xfb, 0x15, 0x65, 0x45, 0x1b, 0x4d, 0x45, - 0x28, 0xbf, 0x4d, 0x46, 0xbb, 0x07, 0x01, 0xd1, 0x1f, 0x2d, 0x4b, 0xd8, - 0x20, 0x2d, 0xa8, 0x46, 0x39, 0x46, 0xda, 0xf8, 0x04, 0x00, 0x28, 0xbf, - 0x4f, 0xf0, 0x20, 0x08, 0x42, 0x46, 0x0a, 0xf0, 0xb1, 0xfc, 0x1f, 0x2d, - 0x07, 0xd8, 0xda, 0xf8, 0x04, 0x00, 0xc8, 0xf1, 0x20, 0x02, 0xff, 0x21, - 0x40, 0x44, 0x0a, 0xf0, 0xb5, 0xfc, 0xda, 0xf8, 0x04, 0x30, 0x20, 0x25, - 0x03, 0x93, 0x10, 0x23, 0x02, 0x93, 0xfe, 0xf7, 0x9b, 0xfc, 0xfe, 0xf7, - 0x75, 0xfc, 0x71, 0x4b, 0x19, 0x88, 0x4f, 0xf6, 0xfd, 0x73, 0x4a, 0x1e, - 0x92, 0xb2, 0x9a, 0x42, 0x97, 0xbf, 0x6e, 0x4b, 0x4f, 0xf0, 0x02, 0x63, - 0x03, 0xea, 0x81, 0x23, 0x03, 0xf1, 0x00, 0x63, 0x9e, 0x42, 0x10, 0xd2, - 0xb6, 0xf1, 0x00, 0x6f, 0x0d, 0xd3, 0x69, 0x4c, 0x69, 0x4b, 0xd4, 0xf8, - 0x88, 0x20, 0x9a, 0x42, 0xfb, 0xd1, 0xf8, 0xf7, 0x49, 0xfc, 0x00, 0x28, - 0x00, 0xf0, 0xac, 0x80, 0x4f, 0xf4, 0x40, 0x73, 0xa3, 0x60, 0xfe, 0xf7, - 0x3f, 0xfc, 0xfe, 0xf7, 0x61, 0xfc, 0x02, 0x9b, 0x01, 0x3b, 0x02, 0x93, - 0xd1, 0xd1, 0x4f, 0xf0, 0xff, 0x34, 0x87, 0xe0, 0x25, 0xf0, 0x1f, 0x05, - 0x03, 0x97, 0xa8, 0x46, 0xc7, 0xe7, 0x01, 0x2b, 0x00, 0xf0, 0x9b, 0x80, - 0x02, 0xf1, 0x78, 0x40, 0x01, 0x23, 0xb0, 0xf5, 0x80, 0x1f, 0x8b, 0xf8, - 0x14, 0x30, 0x06, 0xd3, 0xa2, 0xf1, 0x01, 0x63, 0xb3, 0xf5, 0x80, 0x1f, - 0x80, 0xf0, 0x85, 0x80, 0x02, 0x23, 0x00, 0x20, 0x05, 0x92, 0x04, 0x93, - 0xcb, 0xf8, 0x18, 0x00, 0x18, 0x46, 0xf3, 0xf7, 0xa5, 0xff, 0x05, 0x9a, - 0x20, 0xbb, 0x04, 0x9b, 0x4d, 0x48, 0x01, 0x2b, 0x67, 0xd1, 0xc1, 0x68, - 0x41, 0xf0, 0x02, 0x01, 0xc1, 0x60, 0xbf, 0xf3, 0x6f, 0x8f, 0xbf, 0xf3, - 0x4f, 0x8f, 0x00, 0x20, 0x01, 0x99, 0x09, 0x58, 0x11, 0x50, 0x04, 0x30, - 0x20, 0x28, 0xf9, 0xd1, 0x05, 0x92, 0xbf, 0xf3, 0x6f, 0x8f, 0xbf, 0xf3, - 0x4f, 0x8f, 0x18, 0x46, 0x04, 0x93, 0xf3, 0xf7, 0x87, 0xff, 0x04, 0x9b, - 0x05, 0x9a, 0x01, 0x2b, 0x3e, 0x4b, 0x51, 0xd1, 0xd9, 0x68, 0x21, 0xf0, - 0x02, 0x01, 0xd9, 0x60, 0x00, 0x23, 0x8b, 0xf8, 0x14, 0x30, 0x00, 0x28, - 0x4f, 0xd1, 0x01, 0x9b, 0x20, 0x32, 0x20, 0x33, 0x01, 0x93, 0x9b, 0xf8, - 0x14, 0x30, 0x70, 0x19, 0x82, 0x42, 0x03, 0xd2, 0x00, 0x2c, 0xae, 0xd0, - 0x4f, 0xf0, 0xff, 0x34, 0x00, 0x2d, 0x11, 0xdd, 0x06, 0xf0, 0x1f, 0x03, - 0x2b, 0x44, 0xbf, 0xf3, 0x4f, 0x8f, 0x30, 0x48, 0x32, 0x46, 0x33, 0x44, - 0xc0, 0xf8, 0x70, 0x22, 0x20, 0x32, 0x99, 0x1a, 0x00, 0x29, 0xf9, 0xdc, - 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0xbf, 0xf3, 0x4f, 0x8f, - 0xbf, 0xf3, 0x6f, 0x8f, 0x27, 0x4b, 0x00, 0x22, 0xc3, 0xf8, 0x50, 0x22, - 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0xf8, 0xf7, 0xa6, 0xfb, - 0x00, 0x28, 0x7f, 0xf4, 0x78, 0xaf, 0x1e, 0x4b, 0x4f, 0xf4, 0x40, 0x72, - 0x9a, 0x60, 0x00, 0x2c, 0x7f, 0xf4, 0x71, 0xaf, 0xfe, 0xf7, 0xb0, 0xfb, - 0xfe, 0xf7, 0xd2, 0xfb, 0xa9, 0xeb, 0x08, 0x09, 0x46, 0x44, 0x47, 0x44, - 0x10, 0xe7, 0xd0, 0xf8, 0x0c, 0x11, 0x41, 0xf0, 0x02, 0x01, 0xc0, 0xf8, - 0x0c, 0x11, 0x94, 0xe7, 0xd3, 0xf8, 0x0c, 0x11, 0x21, 0xf0, 0x02, 0x01, - 0xc3, 0xf8, 0x0c, 0x11, 0xaa, 0xe7, 0x4f, 0xf0, 0xff, 0x34, 0xb0, 0xe7, - 0x03, 0x9b, 0x04, 0x46, 0x32, 0x46, 0x01, 0x93, 0xab, 0xe7, 0x4f, 0xf0, - 0xff, 0x34, 0xab, 0xe7, 0x4f, 0xf0, 0xff, 0x34, 0x05, 0x48, 0xff, 0xf7, - 0x95, 0xfb, 0xfa, 0xf7, 0xd5, 0xfe, 0x20, 0x46, 0x07, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x4f, 0xf0, 0xff, 0x34, 0xf8, 0xe7, 0x04, 0x74, 0x00, 0x24, - 0x80, 0xe8, 0xf1, 0x1f, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x64, 0x02, 0x58, - 0x00, 0x03, 0x00, 0x80, 0x00, 0x20, 0x00, 0x52, 0x00, 0xed, 0x00, 0xe0, - 0x50, 0x0e, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, 0x0b, 0x48, 0xff, 0xf7, - 0x77, 0xfb, 0xfa, 0xf7, 0xd7, 0xfe, 0xfe, 0xf7, 0x9f, 0xfb, 0xfe, 0xf7, - 0x79, 0xfb, 0xfe, 0xf7, 0x65, 0xfb, 0xfe, 0xf7, 0x87, 0xfb, 0x60, 0x68, - 0x08, 0xb1, 0x0a, 0xf0, 0x3f, 0xfb, 0x03, 0x48, 0xff, 0xf7, 0x66, 0xfb, - 0xfa, 0xf7, 0xa6, 0xfe, 0x00, 0x20, 0x10, 0xbd, 0x04, 0x74, 0x00, 0x24, - 0x10, 0xb5, 0x04, 0x46, 0x12, 0x48, 0xff, 0xf7, 0x5b, 0xfb, 0xfa, 0xf7, - 0xbb, 0xfe, 0xfe, 0xf7, 0x83, 0xfb, 0xfe, 0xf7, 0x5d, 0xfb, 0x0f, 0x4b, - 0x0f, 0x4a, 0xd3, 0xf8, 0x88, 0x10, 0x91, 0x42, 0xfb, 0xd1, 0x4f, 0xf4, - 0x8e, 0x01, 0x0d, 0x4a, 0x51, 0x61, 0x4f, 0xf4, 0x40, 0x72, 0x9a, 0x60, - 0xfe, 0xf7, 0x3c, 0xfb, 0xfe, 0xf7, 0x5e, 0xfb, 0x20, 0x20, 0xfe, 0xf7, - 0xad, 0xfa, 0x60, 0x60, 0x03, 0x48, 0xff, 0xf7, 0x3d, 0xfb, 0xfa, 0xf7, - 0x7d, 0xfe, 0x00, 0x20, 0x10, 0xbd, 0x00, 0xbf, 0x04, 0x74, 0x00, 0x24, - 0x00, 0x64, 0x02, 0x58, 0x00, 0x03, 0x00, 0x80, 0x00, 0x20, 0x00, 0x52, - 0x02, 0x4b, 0x0a, 0x46, 0x00, 0x21, 0x1b, 0x68, 0x18, 0x47, 0x00, 0xbf, - 0x14, 0x01, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, 0x00, 0xf1, 0x08, 0x03, - 0xd3, 0xb0, 0x04, 0x93, 0x4a, 0xab, 0x05, 0x93, 0x00, 0xf1, 0x28, 0x03, - 0x06, 0x93, 0xdd, 0xe9, 0x04, 0x32, 0x53, 0xf8, 0x04, 0x0b, 0x42, 0xf8, - 0x04, 0x0b, 0x06, 0x98, 0x98, 0x42, 0xf8, 0xd1, 0x0a, 0xaa, 0x01, 0xf1, - 0x40, 0x00, 0x4b, 0x78, 0x04, 0x31, 0x11, 0xf8, 0x04, 0x4c, 0x1b, 0x04, - 0x43, 0xea, 0x04, 0x63, 0x11, 0xf8, 0x01, 0x4c, 0x23, 0x43, 0x11, 0xf8, - 0x02, 0x4c, 0x88, 0x42, 0x43, 0xea, 0x04, 0x23, 0x42, 0xf8, 0x04, 0x3b, - 0xed, 0xd1, 0x50, 0x9b, 0x0d, 0xf1, 0x20, 0x0b, 0xa2, 0x48, 0x00, 0x93, - 0xde, 0x46, 0xdd, 0xf8, 0x44, 0xc1, 0x81, 0x46, 0xdd, 0xf8, 0x38, 0xa1, - 0x4f, 0x9e, 0x01, 0x90, 0xdd, 0xe9, 0x4a, 0x72, 0xdd, 0xe9, 0x4c, 0x31, - 0x4f, 0xea, 0xfa, 0x25, 0xde, 0xf8, 0x08, 0x40, 0xd9, 0xf8, 0x00, 0x00, - 0x0e, 0xf1, 0x20, 0x0e, 0x85, 0xea, 0xba, 0x15, 0x09, 0xf1, 0x20, 0x09, - 0x20, 0x44, 0x00, 0x9c, 0x85, 0xea, 0x7a, 0x65, 0x05, 0x44, 0x00, 0x98, - 0x70, 0x40, 0x00, 0xea, 0x0a, 0x00, 0x60, 0x40, 0x47, 0xea, 0x02, 0x04, - 0x05, 0x44, 0x4f, 0xea, 0x77, 0x30, 0x1c, 0x40, 0xac, 0x44, 0x80, 0xea, - 0xb7, 0x00, 0x07, 0xea, 0x02, 0x05, 0x80, 0xea, 0xb7, 0x50, 0x61, 0x44, - 0x2c, 0x43, 0x59, 0xf8, 0x1c, 0x5c, 0x04, 0x44, 0x5e, 0xf8, 0x14, 0x0c, - 0xa4, 0x44, 0x05, 0x44, 0x8a, 0xea, 0x06, 0x04, 0x00, 0x98, 0x0c, 0xea, - 0x07, 0x08, 0x05, 0x44, 0x0c, 0x40, 0x4f, 0xea, 0xf1, 0x20, 0x74, 0x40, - 0x80, 0xea, 0xb1, 0x10, 0x25, 0x44, 0x4c, 0xea, 0x07, 0x04, 0x80, 0xea, - 0x71, 0x60, 0x14, 0x40, 0x28, 0x44, 0x4f, 0xea, 0x7c, 0x35, 0x44, 0xea, - 0x08, 0x04, 0x85, 0xea, 0xbc, 0x05, 0x03, 0x44, 0x85, 0xea, 0xbc, 0x55, - 0x25, 0x44, 0x59, 0xf8, 0x18, 0x4c, 0x05, 0x44, 0x5e, 0xf8, 0x10, 0x0c, - 0x04, 0x44, 0x4c, 0xea, 0x05, 0x00, 0x26, 0x44, 0x81, 0xea, 0x0a, 0x04, - 0x38, 0x40, 0x1c, 0x40, 0x84, 0xea, 0x0a, 0x08, 0x06, 0xeb, 0x08, 0x04, - 0x4f, 0xea, 0xf3, 0x26, 0x0c, 0xea, 0x05, 0x08, 0x86, 0xea, 0xb3, 0x16, - 0x40, 0xea, 0x08, 0x00, 0x86, 0xea, 0x73, 0x66, 0x26, 0x44, 0x4f, 0xea, - 0x75, 0x34, 0x84, 0xea, 0xb5, 0x04, 0x32, 0x44, 0x84, 0xea, 0xb5, 0x54, - 0x04, 0x44, 0x59, 0xf8, 0x14, 0x0c, 0x34, 0x44, 0x5e, 0xf8, 0x0c, 0x6c, - 0x30, 0x44, 0x45, 0xea, 0x04, 0x06, 0x82, 0x44, 0x81, 0xea, 0x03, 0x00, - 0x06, 0xea, 0x0c, 0x06, 0x10, 0x40, 0x80, 0xea, 0x01, 0x08, 0x0a, 0xeb, - 0x08, 0x00, 0x4f, 0xea, 0xf2, 0x2a, 0x8a, 0xea, 0xb2, 0x1a, 0x8a, 0xea, - 0x72, 0x6a, 0x82, 0x44, 0x4f, 0xea, 0x74, 0x30, 0x0a, 0xeb, 0x07, 0x08, - 0x80, 0xea, 0xb4, 0x00, 0x05, 0xea, 0x04, 0x07, 0x80, 0xea, 0xb4, 0x50, - 0x3e, 0x43, 0x5e, 0xf8, 0x08, 0x7c, 0x30, 0x44, 0x59, 0xf8, 0x10, 0x6c, - 0x50, 0x44, 0x3e, 0x44, 0x83, 0xea, 0x02, 0x0a, 0x31, 0x44, 0x4f, 0xea, - 0xf8, 0x26, 0x0a, 0xea, 0x08, 0x0a, 0x44, 0xea, 0x00, 0x07, 0x86, 0xea, - 0xb8, 0x16, 0x8a, 0xea, 0x03, 0x0a, 0x2f, 0x40, 0x86, 0xea, 0x78, 0x66, - 0x51, 0x44, 0x04, 0xea, 0x00, 0x0a, 0x0e, 0x44, 0x4f, 0xea, 0x70, 0x31, - 0x47, 0xea, 0x0a, 0x07, 0x82, 0xea, 0x08, 0x0a, 0x81, 0xea, 0xb0, 0x01, - 0xb4, 0x44, 0x81, 0xea, 0xb0, 0x51, 0x0a, 0xea, 0x0c, 0x0a, 0x39, 0x44, - 0x5e, 0xf8, 0x04, 0x7c, 0x8a, 0xea, 0x02, 0x0a, 0x31, 0x44, 0x59, 0xf8, - 0x0c, 0x6c, 0x3e, 0x44, 0x00, 0xea, 0x01, 0x07, 0x33, 0x44, 0x4f, 0xea, - 0xfc, 0x26, 0x86, 0xea, 0xbc, 0x16, 0x53, 0x44, 0x86, 0xea, 0x7c, 0x66, - 0x1e, 0x44, 0xab, 0x19, 0x40, 0xea, 0x01, 0x05, 0x00, 0x93, 0x4f, 0xea, - 0x71, 0x33, 0x25, 0x40, 0x83, 0xea, 0xb1, 0x03, 0x3d, 0x43, 0x83, 0xea, - 0xb1, 0x53, 0x2b, 0x44, 0x59, 0xf8, 0x08, 0x5c, 0x33, 0x44, 0xde, 0xf8, - 0x00, 0x60, 0x35, 0x44, 0x00, 0x9e, 0x15, 0x44, 0x88, 0xea, 0x0c, 0x02, - 0x32, 0x40, 0x82, 0xea, 0x08, 0x07, 0xea, 0x19, 0x4f, 0xea, 0xf6, 0x25, - 0x01, 0xea, 0x03, 0x07, 0x85, 0xea, 0xb6, 0x15, 0x85, 0xea, 0x76, 0x65, - 0x15, 0x44, 0x4f, 0xea, 0x73, 0x32, 0x66, 0x19, 0x41, 0xea, 0x03, 0x04, - 0x82, 0xea, 0xb3, 0x02, 0x04, 0x40, 0x82, 0xea, 0xb3, 0x52, 0x3c, 0x43, - 0x22, 0x44, 0x59, 0xf8, 0x04, 0x4c, 0x2a, 0x44, 0xde, 0xf8, 0x04, 0x50, - 0x2c, 0x44, 0x4f, 0xea, 0x72, 0x35, 0xa0, 0x44, 0x00, 0x9c, 0x85, 0xea, - 0xb2, 0x05, 0x8c, 0xea, 0x04, 0x04, 0x34, 0x40, 0x84, 0xea, 0x0c, 0x07, - 0x08, 0xeb, 0x07, 0x04, 0x4f, 0xea, 0xf6, 0x28, 0x43, 0xea, 0x02, 0x07, - 0x88, 0xea, 0xb6, 0x18, 0x0f, 0x40, 0x88, 0xea, 0x76, 0x68, 0x44, 0x44, - 0x85, 0xea, 0xb2, 0x58, 0x03, 0xea, 0x02, 0x05, 0x00, 0xeb, 0x04, 0x0a, - 0x18, 0xa8, 0x3d, 0x43, 0x70, 0x45, 0x45, 0x44, 0x04, 0xeb, 0x05, 0x07, - 0x7f, 0xf4, 0xd8, 0xae, 0x00, 0x98, 0xcd, 0xf8, 0x44, 0xc1, 0xcd, 0xf8, - 0x38, 0xa1, 0xcd, 0xe9, 0x4f, 0x60, 0x38, 0xa8, 0xcd, 0xe9, 0x4a, 0x72, - 0xcd, 0xe9, 0x4c, 0x31, 0xcd, 0xe9, 0x08, 0x45, 0x07, 0x90, 0x01, 0xe0, - 0xc8, 0xe1, 0x01, 0x08, 0xdb, 0xf8, 0x40, 0x00, 0x0b, 0xf1, 0x20, 0x0b, - 0x5b, 0xf8, 0x14, 0x5c, 0x4f, 0xea, 0xf0, 0x4e, 0x5b, 0xf8, 0x18, 0x4c, - 0x4f, 0xea, 0xb5, 0x48, 0x8e, 0xea, 0x70, 0x4e, 0x88, 0xea, 0xf5, 0x18, - 0x8e, 0xea, 0x90, 0x2e, 0xdb, 0xf8, 0x0c, 0x00, 0x88, 0xea, 0xd5, 0x08, - 0x20, 0x44, 0x4f, 0xea, 0xfa, 0x24, 0x86, 0x44, 0x84, 0xea, 0xba, 0x14, - 0x0e, 0xeb, 0x08, 0x00, 0x84, 0xea, 0x7a, 0x6e, 0x00, 0x9c, 0x03, 0x90, - 0x74, 0x40, 0x00, 0x98, 0x04, 0xea, 0x0a, 0x04, 0x44, 0x40, 0x01, 0x98, - 0x74, 0x44, 0x00, 0x6c, 0x8a, 0xea, 0x06, 0x0e, 0x20, 0x44, 0x03, 0x9c, - 0x20, 0x44, 0xcb, 0xf8, 0x28, 0x40, 0x07, 0xea, 0x02, 0x04, 0x84, 0x44, - 0x47, 0xea, 0x02, 0x00, 0x01, 0xeb, 0x0c, 0x08, 0x4f, 0xea, 0x77, 0x31, - 0x18, 0x40, 0x81, 0xea, 0xb7, 0x01, 0x0e, 0xea, 0x08, 0x0e, 0x20, 0x43, - 0x5b, 0xf8, 0x10, 0x4c, 0x81, 0xea, 0xb7, 0x51, 0x8e, 0xea, 0x06, 0x0e, - 0x8a, 0xea, 0x08, 0x09, 0x08, 0x44, 0xdb, 0xf8, 0x24, 0x10, 0x84, 0x44, - 0x4f, 0xea, 0xf1, 0x40, 0x80, 0xea, 0x71, 0x40, 0x80, 0xea, 0x91, 0x20, - 0xdb, 0xf8, 0x10, 0x10, 0x29, 0x44, 0x4f, 0xea, 0xb4, 0x45, 0x85, 0xea, - 0xf4, 0x15, 0x01, 0x44, 0x01, 0x98, 0x85, 0xea, 0xd4, 0x05, 0x40, 0x6c, - 0x29, 0x44, 0x00, 0x9d, 0x28, 0x44, 0x4f, 0xea, 0xf8, 0x25, 0xcb, 0xf8, - 0x2c, 0x10, 0x08, 0x44, 0x85, 0xea, 0xb8, 0x15, 0x86, 0x44, 0x85, 0xea, - 0x78, 0x65, 0x05, 0xeb, 0x0e, 0x00, 0x4f, 0xea, 0x7c, 0x35, 0x07, 0xea, - 0x0c, 0x0e, 0x03, 0x44, 0x85, 0xea, 0xbc, 0x05, 0x00, 0x93, 0x47, 0xea, - 0x0c, 0x03, 0x85, 0xea, 0xbc, 0x55, 0x13, 0x40, 0x43, 0xea, 0x0e, 0x03, - 0x5b, 0xf8, 0x0c, 0xec, 0x1d, 0x44, 0x03, 0x9b, 0x05, 0x44, 0x4f, 0xea, - 0xf3, 0x40, 0x80, 0xea, 0x73, 0x40, 0x80, 0xea, 0x93, 0x20, 0xdb, 0xf8, - 0x14, 0x30, 0x23, 0x44, 0x4f, 0xea, 0xbe, 0x44, 0x03, 0x44, 0x00, 0x98, - 0x84, 0xea, 0xfe, 0x14, 0x09, 0xea, 0x00, 0x09, 0x01, 0x98, 0x84, 0xea, - 0xde, 0x04, 0x80, 0x6c, 0x89, 0xea, 0x0a, 0x09, 0x23, 0x44, 0x30, 0x44, - 0x4f, 0xea, 0x75, 0x36, 0xcb, 0xf8, 0x30, 0x30, 0x18, 0x44, 0x86, 0xea, - 0xb5, 0x06, 0x81, 0x44, 0x00, 0x98, 0x86, 0xea, 0xb5, 0x56, 0x4f, 0xea, - 0xf0, 0x24, 0x84, 0xea, 0xb0, 0x14, 0x84, 0xea, 0x70, 0x64, 0x04, 0xeb, - 0x09, 0x00, 0x4c, 0xea, 0x05, 0x04, 0x02, 0x44, 0x3c, 0x40, 0x02, 0x92, - 0x0c, 0xea, 0x05, 0x02, 0x14, 0x43, 0x5b, 0xf8, 0x08, 0x2c, 0x34, 0x44, - 0x04, 0x44, 0x4f, 0xea, 0xf1, 0x40, 0x80, 0xea, 0x71, 0x40, 0x80, 0xea, - 0x91, 0x21, 0xdb, 0xf8, 0x18, 0x00, 0x86, 0x44, 0x02, 0x98, 0x71, 0x44, - 0x4f, 0xea, 0xb2, 0x4e, 0x8e, 0xea, 0xf2, 0x1e, 0x8e, 0xea, 0xd2, 0x0e, - 0x8e, 0x44, 0x00, 0x99, 0x88, 0xea, 0x01, 0x01, 0x01, 0x40, 0x01, 0x98, - 0xcb, 0xf8, 0x34, 0xe0, 0xc6, 0x6c, 0x81, 0xea, 0x08, 0x01, 0x02, 0x98, - 0x56, 0x44, 0x4f, 0xea, 0x74, 0x3a, 0x4f, 0xea, 0xf0, 0x20, 0x76, 0x44, - 0x8a, 0xea, 0xb4, 0x0a, 0x31, 0x44, 0x02, 0x9e, 0x8a, 0xea, 0xb4, 0x5a, - 0x80, 0xea, 0xb6, 0x10, 0x80, 0xea, 0x76, 0x60, 0x46, 0x18, 0x45, 0xea, - 0x04, 0x00, 0x05, 0xea, 0x04, 0x01, 0x00, 0xea, 0x0c, 0x00, 0x07, 0xeb, - 0x06, 0x09, 0x08, 0x43, 0x4f, 0xea, 0xf3, 0x41, 0x81, 0xea, 0x73, 0x41, - 0x50, 0x44, 0x81, 0xea, 0x93, 0x23, 0xdb, 0xf8, 0x1c, 0x10, 0x30, 0x44, - 0x5b, 0xf8, 0x04, 0x6c, 0x0a, 0x44, 0x02, 0x99, 0x13, 0x44, 0x4f, 0xea, - 0xb6, 0x42, 0x82, 0xea, 0xf6, 0x12, 0x82, 0xea, 0xd6, 0x02, 0x1a, 0x44, - 0x00, 0x9b, 0x83, 0xea, 0x01, 0x07, 0x4f, 0xea, 0xf9, 0x21, 0xcb, 0xf8, - 0x38, 0x20, 0x07, 0xea, 0x09, 0x07, 0x81, 0xea, 0xb9, 0x11, 0x5f, 0x40, - 0x01, 0x9b, 0x81, 0xea, 0x79, 0x61, 0x1b, 0x6d, 0x13, 0x44, 0x43, 0x44, - 0x04, 0xea, 0x00, 0x08, 0x1f, 0x44, 0xcb, 0x19, 0x44, 0xea, 0x00, 0x07, - 0x4f, 0xea, 0x70, 0x31, 0x2f, 0x40, 0x9c, 0x44, 0x81, 0xea, 0xb0, 0x01, - 0x47, 0xea, 0x08, 0x07, 0xdb, 0xf8, 0x00, 0x80, 0x81, 0xea, 0xb0, 0x51, - 0x39, 0x44, 0x4f, 0xea, 0xfe, 0x47, 0x19, 0x44, 0x87, 0xea, 0x7e, 0x47, - 0xdb, 0xf8, 0x20, 0x30, 0x87, 0xea, 0x9e, 0x2e, 0x9f, 0x19, 0x4f, 0xea, - 0xb8, 0x43, 0x00, 0x9e, 0x83, 0xea, 0xf8, 0x13, 0x77, 0x44, 0x83, 0xea, - 0xd8, 0x03, 0x1f, 0x44, 0x02, 0x9b, 0x83, 0xea, 0x09, 0x0e, 0xcb, 0xf8, - 0x3c, 0x70, 0x0e, 0xea, 0x0c, 0x0e, 0x8e, 0xea, 0x03, 0x0e, 0x01, 0x9b, - 0x5b, 0x6d, 0x3b, 0x44, 0x33, 0x44, 0x9e, 0x44, 0x4f, 0xea, 0xfc, 0x23, - 0x83, 0xea, 0xbc, 0x13, 0x83, 0xea, 0x7c, 0x63, 0x03, 0xeb, 0x0e, 0x06, - 0x00, 0xea, 0x01, 0x0e, 0xab, 0x19, 0x40, 0xea, 0x01, 0x05, 0x00, 0x93, - 0x4f, 0xea, 0x71, 0x33, 0x25, 0x40, 0x83, 0xea, 0xb1, 0x03, 0x45, 0xea, - 0x0e, 0x05, 0xdb, 0xf8, 0x04, 0xe0, 0x83, 0xea, 0xb1, 0x53, 0x2b, 0x44, - 0xdb, 0xf8, 0x24, 0x50, 0x33, 0x44, 0x4f, 0xea, 0xf2, 0x46, 0x86, 0xea, - 0x72, 0x46, 0x86, 0xea, 0x92, 0x22, 0x05, 0xeb, 0x08, 0x06, 0x89, 0xea, - 0x0c, 0x08, 0x16, 0x44, 0x4f, 0xea, 0xbe, 0x42, 0x82, 0xea, 0xfe, 0x12, - 0x82, 0xea, 0xde, 0x02, 0x16, 0x44, 0x00, 0x9a, 0x08, 0xea, 0x02, 0x08, - 0x01, 0x9a, 0xcb, 0xf8, 0x40, 0x60, 0x95, 0x6d, 0x88, 0xea, 0x09, 0x08, - 0x02, 0x9a, 0x35, 0x44, 0x00, 0x9e, 0x15, 0x44, 0x00, 0x9a, 0x4f, 0xea, - 0xf2, 0x22, 0x45, 0x44, 0x01, 0xea, 0x03, 0x08, 0x82, 0xea, 0xb6, 0x12, - 0x82, 0xea, 0x76, 0x62, 0x15, 0x44, 0x4f, 0xea, 0x73, 0x32, 0x66, 0x19, - 0x41, 0xea, 0x03, 0x04, 0x82, 0xea, 0xb3, 0x02, 0x04, 0x40, 0x82, 0xea, - 0xb3, 0x52, 0x44, 0xea, 0x08, 0x04, 0x22, 0x44, 0x4f, 0xea, 0xf7, 0x44, - 0x84, 0xea, 0x77, 0x44, 0x2a, 0x44, 0xdb, 0xf8, 0x08, 0x50, 0x84, 0xea, - 0x97, 0x27, 0x03, 0x9c, 0xa6, 0x44, 0x4f, 0xea, 0xb5, 0x44, 0x84, 0xea, - 0xf5, 0x14, 0x77, 0x44, 0x84, 0xea, 0xd5, 0x05, 0x00, 0x9c, 0x8c, 0xea, - 0x04, 0x0e, 0x01, 0x9c, 0x3d, 0x44, 0xe7, 0x6d, 0x0e, 0xea, 0x06, 0x0e, - 0x4f, 0xea, 0xf6, 0x24, 0xcb, 0xf8, 0x44, 0x50, 0x2f, 0x44, 0x8e, 0xea, - 0x0c, 0x0e, 0x84, 0xea, 0xb6, 0x14, 0x4f, 0x44, 0x4f, 0xea, 0x72, 0x35, - 0x84, 0xea, 0x76, 0x64, 0x77, 0x44, 0x85, 0xea, 0xb2, 0x05, 0x3c, 0x44, - 0x43, 0xea, 0x02, 0x07, 0x85, 0xea, 0xb2, 0x5e, 0x03, 0xea, 0x02, 0x05, - 0x00, 0xeb, 0x04, 0x0a, 0x01, 0x98, 0x0f, 0x40, 0x20, 0x30, 0x3d, 0x43, - 0x01, 0x90, 0x07, 0x98, 0x75, 0x44, 0x58, 0x45, 0x04, 0xeb, 0x05, 0x07, - 0x7f, 0xf4, 0x20, 0xae, 0x00, 0x98, 0xcd, 0xf8, 0x44, 0xc1, 0xcd, 0xf8, - 0x38, 0xa1, 0xcd, 0xe9, 0x4f, 0x60, 0xcd, 0xe9, 0x4a, 0x72, 0xcd, 0xe9, - 0x4c, 0x31, 0xcd, 0xe9, 0x08, 0x45, 0x04, 0x9b, 0x05, 0x99, 0x1b, 0x68, - 0x51, 0xf8, 0x04, 0x2b, 0x13, 0x44, 0x04, 0x9a, 0x05, 0x91, 0x42, 0xf8, - 0x04, 0x3b, 0x06, 0x9b, 0x04, 0x92, 0x93, 0x42, 0xf1, 0xd1, 0x08, 0xa8, - 0x4f, 0xf4, 0x94, 0x71, 0xff, 0xf7, 0x84, 0xfc, 0x00, 0x20, 0x53, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x2d, 0xe9, 0xf8, 0x43, 0x03, 0x68, 0x05, 0x46, - 0x0e, 0x46, 0x14, 0x46, 0x03, 0xf0, 0x3f, 0x07, 0x9b, 0x18, 0x03, 0x60, - 0x22, 0xbf, 0x43, 0x68, 0x01, 0x33, 0x43, 0x60, 0x9f, 0xb1, 0xc7, 0xf1, - 0x40, 0x09, 0x91, 0x45, 0x0f, 0xd8, 0x00, 0xf1, 0x28, 0x08, 0x4a, 0x46, - 0x08, 0xeb, 0x07, 0x00, 0x09, 0xf0, 0xc6, 0xff, 0x41, 0x46, 0x28, 0x46, - 0xff, 0xf7, 0x6a, 0xfc, 0xb0, 0xb9, 0x40, 0x3c, 0x4e, 0x44, 0x3c, 0x44, - 0x07, 0x46, 0x26, 0x44, 0x04, 0xe0, 0x28, 0x46, 0xff, 0xf7, 0x60, 0xfc, - 0x60, 0xb9, 0x40, 0x3c, 0x3f, 0x2c, 0xa6, 0xeb, 0x04, 0x01, 0xf6, 0xd8, - 0x44, 0xb1, 0x05, 0xf1, 0x28, 0x00, 0x22, 0x46, 0x38, 0x44, 0x09, 0xf0, - 0xab, 0xff, 0x00, 0x20, 0xbd, 0xe8, 0xf8, 0x83, 0x20, 0x46, 0xfb, 0xe7, - 0x10, 0xb4, 0x58, 0xb1, 0x04, 0x68, 0x4c, 0xb1, 0x24, 0x79, 0x05, 0x3c, - 0x01, 0x2c, 0x05, 0xd8, 0x42, 0xb1, 0x40, 0x68, 0x5d, 0xf8, 0x04, 0x4b, - 0xff, 0xf7, 0xb8, 0xbf, 0x02, 0x48, 0x5d, 0xf8, 0x04, 0x4b, 0x70, 0x47, - 0x10, 0x46, 0xfa, 0xe7, 0x00, 0xaf, 0xff, 0xff, 0x38, 0xb5, 0x03, 0x68, - 0x04, 0x46, 0x63, 0xb1, 0x85, 0x68, 0x55, 0xb1, 0xfd, 0xf7, 0xaa, 0xfa, - 0x40, 0xb9, 0x23, 0x68, 0x29, 0x46, 0x20, 0x46, 0x9a, 0x79, 0xbd, 0xe8, - 0x38, 0x40, 0xff, 0xf7, 0xd9, 0xbf, 0x01, 0x48, 0x38, 0xbd, 0x00, 0xbf, - 0x00, 0xaf, 0xff, 0xff, 0x03, 0x68, 0x03, 0xf0, 0x3f, 0x03, 0x5a, 0x1c, - 0x03, 0x44, 0x70, 0xb5, 0x38, 0x2a, 0x0d, 0x46, 0x00, 0xf1, 0x28, 0x06, - 0x4f, 0xf0, 0x80, 0x01, 0x04, 0x46, 0x83, 0xf8, 0x28, 0x10, 0x06, 0xeb, - 0x02, 0x00, 0x61, 0xd8, 0xc2, 0xf1, 0x38, 0x02, 0x00, 0x21, 0x09, 0xf0, - 0x71, 0xff, 0x20, 0x46, 0xd4, 0xe9, 0x00, 0x31, 0x5a, 0x0f, 0xdb, 0x00, - 0x42, 0xea, 0xc1, 0x02, 0x31, 0x46, 0x1b, 0xba, 0x12, 0xba, 0x63, 0x66, - 0x22, 0x66, 0xff, 0xf7, 0xfd, 0xfb, 0x00, 0x28, 0x4b, 0xd1, 0xe3, 0x7a, - 0x2b, 0x70, 0x63, 0x89, 0x6b, 0x70, 0xa3, 0x68, 0x1b, 0x0a, 0xab, 0x70, - 0xa3, 0x68, 0xeb, 0x70, 0xe3, 0x7b, 0x2b, 0x71, 0xe3, 0x89, 0x6b, 0x71, - 0xe3, 0x68, 0x1b, 0x0a, 0xab, 0x71, 0xe3, 0x68, 0xeb, 0x71, 0xe3, 0x7c, - 0x2b, 0x72, 0x63, 0x8a, 0x6b, 0x72, 0x23, 0x69, 0x1b, 0x0a, 0xab, 0x72, - 0x23, 0x69, 0xeb, 0x72, 0xe3, 0x7d, 0x2b, 0x73, 0xe3, 0x8a, 0x6b, 0x73, - 0x63, 0x69, 0x1b, 0x0a, 0xab, 0x73, 0x63, 0x69, 0xeb, 0x73, 0xe3, 0x7e, - 0x2b, 0x74, 0x63, 0x8b, 0x6b, 0x74, 0xa3, 0x69, 0x1b, 0x0a, 0xab, 0x74, - 0xa3, 0x69, 0xeb, 0x74, 0xe3, 0x7f, 0x2b, 0x75, 0xe3, 0x8b, 0x6b, 0x75, - 0xe3, 0x69, 0x1b, 0x0a, 0xab, 0x75, 0xe3, 0x69, 0xeb, 0x75, 0x94, 0xf8, - 0x23, 0x30, 0x2b, 0x76, 0x63, 0x8c, 0x6b, 0x76, 0x23, 0x6a, 0x1b, 0x0a, - 0xab, 0x76, 0x23, 0x6a, 0xeb, 0x76, 0xa3, 0x6e, 0x4b, 0xb9, 0x94, 0xf8, - 0x27, 0x30, 0x2b, 0x77, 0xe3, 0x8c, 0x6b, 0x77, 0x63, 0x6a, 0x1b, 0x0a, - 0xab, 0x77, 0x63, 0x6a, 0xeb, 0x77, 0x70, 0xbd, 0x00, 0x21, 0xc2, 0xf1, - 0x40, 0x02, 0x09, 0xf0, 0x0f, 0xff, 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, - 0xa5, 0xfb, 0x00, 0x28, 0xf3, 0xd1, 0x01, 0x46, 0x38, 0x22, 0x30, 0x46, - 0x91, 0xe7, 0x00, 0x00, 0x40, 0xb1, 0x03, 0x68, 0x33, 0xb1, 0x1b, 0x79, - 0x05, 0x3b, 0x01, 0x2b, 0x02, 0xd8, 0x40, 0x68, 0xff, 0xf7, 0x72, 0xbf, - 0x00, 0x48, 0x70, 0x47, 0x00, 0xaf, 0xff, 0xff, 0x42, 0xf2, 0x10, 0x73, - 0x99, 0x42, 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, 0x0d, 0x46, 0x03, 0xd9, - 0x6f, 0xf0, 0x0f, 0x00, 0xbd, 0xe8, 0xf0, 0x81, 0x46, 0x68, 0x8e, 0x42, - 0x1a, 0xd2, 0x04, 0x21, 0x28, 0x46, 0x0b, 0xf0, 0x87, 0xf9, 0x07, 0x46, - 0x00, 0x28, 0xf1, 0xd0, 0xd4, 0xf8, 0x08, 0x80, 0xb8, 0xf1, 0x00, 0x0f, - 0x0c, 0xd0, 0xb6, 0x00, 0x41, 0x46, 0x32, 0x46, 0x09, 0xf0, 0xc8, 0xfe, - 0x1e, 0xb1, 0x31, 0x46, 0x40, 0x46, 0xff, 0xf7, 0x63, 0xfb, 0xa0, 0x68, - 0x09, 0xf0, 0x66, 0xfe, 0xc4, 0xe9, 0x01, 0x57, 0x00, 0x20, 0xdd, 0xe7, - 0x42, 0xf2, 0x10, 0x73, 0x99, 0x42, 0x2d, 0xe9, 0xf0, 0x41, 0x05, 0x46, - 0x0c, 0x46, 0x03, 0xd9, 0x6f, 0xf0, 0x0f, 0x00, 0xbd, 0xe8, 0xf0, 0x81, - 0x46, 0x68, 0x8e, 0x42, 0x03, 0xd8, 0xbd, 0xe8, 0xf0, 0x41, 0xff, 0xf7, - 0xc1, 0xbf, 0x73, 0x1e, 0xfb, 0xb9, 0x01, 0x33, 0x04, 0x21, 0x9c, 0x42, - 0x38, 0xbf, 0x1c, 0x46, 0x20, 0x46, 0x0b, 0xf0, 0x51, 0xf9, 0x07, 0x46, - 0x00, 0x28, 0xe7, 0xd0, 0xd5, 0xf8, 0x08, 0x80, 0xb8, 0xf1, 0x00, 0x0f, - 0x0b, 0xd0, 0x41, 0x46, 0xa2, 0x00, 0x09, 0xf0, 0x93, 0xfe, 0xb1, 0x00, - 0x02, 0xd0, 0x40, 0x46, 0xff, 0xf7, 0x2e, 0xfb, 0xa8, 0x68, 0x09, 0xf0, - 0x31, 0xfe, 0x00, 0x20, 0xc5, 0xe9, 0x01, 0x47, 0xd4, 0xe7, 0xaa, 0x68, - 0x52, 0xf8, 0x23, 0x20, 0x00, 0x2a, 0xda, 0xd1, 0x01, 0x3b, 0xd7, 0xe7, - 0x03, 0x68, 0xf0, 0xb5, 0x04, 0x46, 0x89, 0xb0, 0x0d, 0x46, 0xf3, 0xb1, - 0x86, 0x68, 0xe6, 0xb1, 0x69, 0x46, 0x9f, 0x79, 0xff, 0xf7, 0x7e, 0xff, - 0xa8, 0xb9, 0x20, 0x46, 0xfd, 0xf7, 0x92, 0xf9, 0x88, 0xb9, 0x23, 0x68, - 0xf1, 0x19, 0x20, 0x46, 0x9a, 0x79, 0xff, 0xf7, 0xc3, 0xfe, 0x50, 0xb9, - 0x23, 0x68, 0x69, 0x46, 0x20, 0x46, 0x5a, 0x79, 0xff, 0xf7, 0xbc, 0xfe, - 0x18, 0xb9, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x67, 0xff, 0x09, 0xb0, - 0xf0, 0xbd, 0x01, 0x48, 0xfb, 0xe7, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, - 0x10, 0xb4, 0x04, 0x68, 0x2c, 0xb1, 0x83, 0x68, 0x1b, 0xb1, 0x5d, 0xf8, - 0x04, 0x4b, 0xff, 0xf7, 0xa7, 0xbe, 0x02, 0x48, 0x5d, 0xf8, 0x04, 0x4b, - 0x70, 0x47, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x41, - 0x0e, 0x46, 0x88, 0xb0, 0x17, 0x46, 0x05, 0x46, 0x00, 0x28, 0x52, 0xd0, - 0x03, 0x68, 0x00, 0x2b, 0x4f, 0xd0, 0x82, 0x68, 0x00, 0x2a, 0x4c, 0xd0, - 0x9b, 0x79, 0xbb, 0x42, 0x13, 0xd2, 0xfd, 0xf7, 0x55, 0xf9, 0x04, 0x46, - 0x88, 0xbb, 0x3a, 0x46, 0x31, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x86, 0xfe, - 0x04, 0x46, 0x50, 0xbb, 0x69, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x30, 0xff, - 0x04, 0x46, 0x20, 0xbb, 0x2b, 0x68, 0x6e, 0x46, 0x5f, 0x79, 0x2b, 0x68, - 0x36, 0x21, 0xd5, 0xf8, 0x08, 0x80, 0x01, 0x3e, 0x9a, 0x79, 0x40, 0x46, - 0x47, 0x44, 0x08, 0xeb, 0x02, 0x04, 0x09, 0xf0, 0x23, 0xfe, 0x2b, 0x68, - 0x5c, 0x21, 0x20, 0x46, 0x9a, 0x79, 0x09, 0xf0, 0x1d, 0xfe, 0x43, 0x46, - 0x60, 0x1e, 0x9f, 0x42, 0x13, 0xd1, 0x28, 0x46, 0xfd, 0xf7, 0x2a, 0xf9, - 0x04, 0x46, 0x30, 0xb9, 0x2b, 0x68, 0x41, 0x46, 0x28, 0x46, 0x9a, 0x79, - 0xff, 0xf7, 0x5a, 0xfe, 0x04, 0x46, 0x20, 0x21, 0x68, 0x46, 0xff, 0xf7, - 0x9b, 0xfa, 0x20, 0x46, 0x08, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x16, 0xf8, - 0x01, 0x1f, 0x1a, 0x78, 0x4a, 0x40, 0x03, 0xf8, 0x01, 0x2b, 0x10, 0xf8, - 0x01, 0x2f, 0x31, 0x78, 0x4a, 0x40, 0x02, 0x70, 0xdd, 0xe7, 0x01, 0x4c, - 0xed, 0xe7, 0x00, 0xbf, 0x00, 0xaf, 0xff, 0xff, 0x10, 0xb5, 0x04, 0x46, - 0xf0, 0xb1, 0x03, 0x68, 0xe3, 0xb1, 0x40, 0x68, 0x48, 0xb1, 0x1b, 0x79, - 0x05, 0x3b, 0x01, 0x2b, 0x02, 0xd8, 0x6c, 0x21, 0xff, 0xf7, 0x78, 0xfa, - 0x60, 0x68, 0x09, 0xf0, 0x7b, 0xfd, 0xa0, 0x68, 0x40, 0xb1, 0x23, 0x68, - 0x9b, 0x79, 0x59, 0x00, 0x0b, 0xb1, 0xff, 0xf7, 0x6d, 0xfa, 0xa0, 0x68, - 0x09, 0xf0, 0x70, 0xfd, 0x20, 0x46, 0x0c, 0x21, 0xbd, 0xe8, 0x10, 0x40, - 0xff, 0xf7, 0x64, 0xba, 0x10, 0xbd, 0x2d, 0xe9, 0xf0, 0x47, 0x05, 0x68, - 0x8a, 0xb0, 0x82, 0x46, 0x0e, 0x46, 0x17, 0x46, 0x05, 0xb1, 0x6d, 0x79, - 0x76, 0xb3, 0x00, 0x2f, 0x14, 0xbf, 0x4f, 0xf0, 0x02, 0x08, 0x4f, 0xf0, - 0x01, 0x08, 0x00, 0x23, 0x0a, 0xf1, 0x0c, 0x09, 0x8d, 0xf8, 0x04, 0x30, - 0x50, 0x46, 0xff, 0xf7, 0x1b, 0xfe, 0x04, 0x46, 0xb0, 0xb9, 0x2a, 0x46, - 0x49, 0x46, 0x50, 0x46, 0xff, 0xf7, 0x4e, 0xff, 0x04, 0x46, 0x78, 0xb9, - 0x01, 0x22, 0x01, 0xa9, 0x50, 0x46, 0xff, 0xf7, 0x47, 0xff, 0x04, 0x46, - 0x40, 0xb9, 0xb8, 0xf1, 0x02, 0x0f, 0x10, 0xd0, 0x02, 0xa9, 0x50, 0x46, - 0xff, 0xf7, 0x14, 0xff, 0x04, 0x46, 0x98, 0xb1, 0x02, 0xa8, 0x20, 0x21, - 0xff, 0xf7, 0x2e, 0xfa, 0x20, 0x46, 0x0a, 0xb0, 0xbd, 0xe8, 0xf0, 0x87, - 0x4f, 0xf0, 0x01, 0x08, 0xd3, 0xe7, 0x3a, 0x46, 0x31, 0x46, 0x50, 0x46, - 0xff, 0xf7, 0x2c, 0xff, 0x04, 0x46, 0x00, 0x28, 0xe6, 0xd0, 0xeb, 0xe7, - 0x2a, 0x46, 0x02, 0xa9, 0x50, 0x46, 0xff, 0xf7, 0x33, 0xff, 0x04, 0x46, - 0x00, 0x28, 0xe3, 0xd1, 0x2a, 0x46, 0x49, 0x46, 0x50, 0x46, 0xff, 0xf7, - 0x1b, 0xff, 0x04, 0x46, 0x00, 0x28, 0xdb, 0xd1, 0x49, 0x46, 0x50, 0x46, - 0xff, 0xf7, 0xea, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xd4, 0xd1, 0x9d, 0xf8, - 0x04, 0x30, 0x01, 0x33, 0xdb, 0xb2, 0x43, 0x45, 0x8d, 0xf8, 0x04, 0x30, - 0xb0, 0xd3, 0xcb, 0xe7, 0x2d, 0xe9, 0xf8, 0x43, 0x06, 0x68, 0x04, 0x46, - 0x0f, 0x46, 0x15, 0x46, 0x06, 0xb1, 0x76, 0x79, 0xb5, 0xf5, 0x80, 0x6f, - 0x3b, 0xd8, 0xe3, 0x6b, 0x63, 0xb9, 0x04, 0xf1, 0x0c, 0x09, 0xbd, 0xb9, - 0x2a, 0x46, 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x86, 0xff, 0x78, 0xb9, - 0xe3, 0x6a, 0x01, 0x33, 0xe3, 0x62, 0x0b, 0xe0, 0x63, 0x6b, 0x01, 0x2b, - 0x03, 0xd0, 0xe2, 0x6a, 0xa3, 0x6b, 0x9a, 0x42, 0xeb, 0xdd, 0x20, 0x46, - 0xf1, 0xf7, 0xcc, 0xfc, 0x00, 0x28, 0xe6, 0xd0, 0xbd, 0xe8, 0xf8, 0x83, - 0xae, 0x42, 0x20, 0x46, 0xb0, 0x46, 0x28, 0xbf, 0xa8, 0x46, 0xff, 0xf7, - 0x9f, 0xfd, 0x00, 0x28, 0xf4, 0xd1, 0x32, 0x46, 0x49, 0x46, 0x20, 0x46, - 0xff, 0xf7, 0xd2, 0xfe, 0x00, 0x28, 0xed, 0xd1, 0x49, 0x46, 0x20, 0x46, - 0xff, 0xf7, 0xa2, 0xfe, 0x00, 0x28, 0xe7, 0xd1, 0x38, 0x46, 0x42, 0x46, - 0x49, 0x46, 0x47, 0x44, 0xa5, 0xeb, 0x08, 0x05, 0x09, 0xf0, 0x18, 0xfd, - 0xc7, 0xe7, 0x6f, 0xf0, 0x02, 0x00, 0xdb, 0xe7, 0x00, 0x23, 0x01, 0x22, - 0xc0, 0xe9, 0x04, 0x33, 0xc0, 0xe9, 0x00, 0x23, 0xc0, 0xe9, 0x02, 0x32, - 0xc0, 0xe9, 0x06, 0x23, 0x03, 0x62, 0x70, 0x47, 0x38, 0xb5, 0x00, 0x24, - 0x01, 0x25, 0x01, 0x46, 0x04, 0x70, 0x44, 0x62, 0xc0, 0xe9, 0x01, 0x54, - 0xc0, 0xe9, 0x03, 0x45, 0xc0, 0xe9, 0x05, 0x44, 0xc0, 0xe9, 0x07, 0x54, - 0x28, 0x30, 0xff, 0xf7, 0xe3, 0xff, 0xc1, 0xe9, 0x13, 0x54, 0xc1, 0xe9, - 0x15, 0x44, 0xc1, 0xe9, 0x17, 0x44, 0xc1, 0xe9, 0x19, 0x44, 0xc1, 0xe9, - 0x1b, 0x44, 0xc1, 0xe9, 0x1d, 0x44, 0x38, 0xbd, 0x03, 0x6b, 0x2b, 0xb1, - 0xc3, 0x6b, 0x00, 0x2b, 0x0c, 0xbf, 0x02, 0x20, 0x01, 0x20, 0x70, 0x47, - 0x18, 0x46, 0x70, 0x47, 0x02, 0x46, 0x43, 0x68, 0x30, 0xb5, 0x23, 0xb9, - 0x48, 0x68, 0x58, 0xb9, 0x00, 0x2b, 0x38, 0xd1, 0x31, 0xe0, 0x90, 0x68, - 0x00, 0xeb, 0x83, 0x00, 0x50, 0xf8, 0x04, 0x0c, 0x00, 0x28, 0xf3, 0xd1, - 0x01, 0x3b, 0xf0, 0xe7, 0x8c, 0x68, 0x04, 0xeb, 0x80, 0x05, 0x55, 0xf8, - 0x04, 0x5c, 0x25, 0xbb, 0x01, 0x38, 0xea, 0xe7, 0x83, 0x42, 0x09, 0x68, - 0x01, 0xd2, 0x48, 0x42, 0x22, 0xe0, 0x10, 0x68, 0x00, 0x28, 0x03, 0xdd, - 0x00, 0x29, 0x13, 0xda, 0x01, 0x20, 0x1b, 0xe0, 0x00, 0x29, 0x0f, 0xdd, - 0x70, 0xb1, 0x4f, 0xf0, 0xff, 0x30, 0x15, 0xe0, 0x91, 0x68, 0x51, 0xf8, - 0x23, 0x50, 0x54, 0xf8, 0x23, 0x10, 0x8d, 0x42, 0x0e, 0xd8, 0x03, 0xf1, - 0xff, 0x33, 0x02, 0xd2, 0x40, 0x42, 0x09, 0xe0, 0x01, 0x3b, 0x59, 0x1c, - 0xf0, 0xd1, 0x00, 0x20, 0x04, 0xe0, 0x00, 0x2b, 0xda, 0xd0, 0x83, 0x42, - 0xd8, 0xd9, 0x10, 0x68, 0x30, 0xbd, 0x1f, 0xb5, 0x81, 0xea, 0xe1, 0x73, - 0xcd, 0xf8, 0x0c, 0xd0, 0xa3, 0xeb, 0xe1, 0x73, 0x00, 0x93, 0x4b, 0x1c, - 0x4f, 0xf0, 0x01, 0x03, 0x18, 0xbf, 0x01, 0x21, 0x02, 0x93, 0x01, 0x91, - 0x01, 0xa9, 0xff, 0xf7, 0xab, 0xff, 0x05, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, - 0xf8, 0xb5, 0x04, 0x46, 0x08, 0x46, 0x63, 0x68, 0xb2, 0xeb, 0x83, 0x0f, - 0x4f, 0xea, 0x83, 0x05, 0x1c, 0xd9, 0x52, 0x1b, 0x8e, 0x18, 0x00, 0x21, - 0x09, 0xf0, 0x88, 0xfc, 0x2a, 0x46, 0x30, 0x46, 0x81, 0x18, 0x00, 0x23, - 0x9a, 0x42, 0x13, 0xd1, 0x00, 0x20, 0xf8, 0xbd, 0x03, 0xf0, 0x03, 0x01, - 0x23, 0xf0, 0x03, 0x0c, 0xa7, 0x68, 0xce, 0x00, 0x57, 0xf8, 0x0c, 0x10, - 0xf1, 0x40, 0x11, 0xf0, 0xff, 0x0f, 0x11, 0xd1, 0x01, 0x33, 0xab, 0x42, - 0xf0, 0xd1, 0xe9, 0xe7, 0x13, 0x46, 0xfa, 0xe7, 0x03, 0xf0, 0x03, 0x00, - 0x23, 0xf0, 0x03, 0x06, 0xa7, 0x68, 0x01, 0x33, 0xc5, 0x00, 0xb8, 0x59, - 0xe8, 0x40, 0x01, 0xf8, 0x01, 0x0d, 0xdd, 0xe7, 0x6f, 0xf0, 0x07, 0x00, - 0xdd, 0xe7, 0x00, 0x00, 0x42, 0x2a, 0xf0, 0xb5, 0x06, 0x46, 0x93, 0xb0, - 0x08, 0x46, 0x15, 0x46, 0x26, 0xd8, 0x01, 0xa9, 0xff, 0xf7, 0xbe, 0xff, - 0x04, 0x46, 0xc8, 0xb9, 0x11, 0x49, 0x30, 0x46, 0xf1, 0xf7, 0x74, 0xf9, - 0x04, 0x46, 0x98, 0xb9, 0x06, 0xf1, 0x0c, 0x07, 0x20, 0x22, 0x30, 0x46, - 0x39, 0x46, 0xff, 0xf7, 0xf1, 0xfd, 0x04, 0x46, 0x50, 0xb9, 0x20, 0x22, - 0x01, 0x21, 0x38, 0x46, 0x09, 0xf0, 0x3e, 0xfc, 0x2a, 0x46, 0x01, 0xa9, - 0x30, 0x46, 0xff, 0xf7, 0x68, 0xfe, 0x04, 0x46, 0x1d, 0xb1, 0x29, 0x46, - 0x01, 0xa8, 0xff, 0xf7, 0xc5, 0xf8, 0x20, 0x46, 0x13, 0xb0, 0xf0, 0xbd, - 0x01, 0x4c, 0xf6, 0xe7, 0x10, 0xdf, 0x01, 0x08, 0x00, 0xb3, 0xff, 0xff, - 0x02, 0x46, 0x40, 0x68, 0x80, 0xb1, 0x43, 0x1e, 0x92, 0x68, 0x73, 0xb9, - 0x52, 0xf8, 0x23, 0x10, 0x00, 0x20, 0x4f, 0xf0, 0x00, 0x42, 0x11, 0x42, - 0x03, 0xd1, 0x01, 0x30, 0x52, 0x08, 0x20, 0x28, 0xf9, 0xd1, 0x01, 0x33, - 0xc0, 0xeb, 0x43, 0x10, 0x70, 0x47, 0x52, 0xf8, 0x23, 0x10, 0x00, 0x29, - 0xec, 0xd1, 0x01, 0x3b, 0xe9, 0xe7, 0x00, 0x00, 0x38, 0xb5, 0x14, 0x4a, - 0x01, 0x25, 0x14, 0x4b, 0x04, 0x46, 0xc2, 0x60, 0x43, 0x66, 0x08, 0x23, - 0x12, 0x4a, 0x83, 0x63, 0x42, 0x62, 0x12, 0x4a, 0x45, 0x64, 0x42, 0x65, - 0x11, 0x4a, 0xc0, 0xe9, 0x01, 0x53, 0xc0, 0xe9, 0x07, 0x53, 0xc0, 0xe9, - 0x13, 0x53, 0xc0, 0xe9, 0x0a, 0x53, 0x0e, 0x4b, 0xc0, 0xe9, 0x0f, 0x35, - 0x0d, 0x4b, 0xc0, 0xe9, 0x0c, 0x25, 0x83, 0x64, 0x04, 0x30, 0xff, 0xf7, - 0xc3, 0xff, 0xa0, 0x65, 0x04, 0xf1, 0x4c, 0x00, 0xff, 0xf7, 0xbe, 0xff, - 0xc4, 0xe9, 0x17, 0x05, 0x00, 0x20, 0x38, 0xbd, 0x90, 0xe7, 0x01, 0x08, - 0xdd, 0x25, 0x01, 0x08, 0x10, 0xe7, 0x01, 0x08, 0x70, 0xe7, 0x01, 0x08, - 0x30, 0xe7, 0x01, 0x08, 0x50, 0xe7, 0x01, 0x08, 0x18, 0x01, 0x00, 0x24, - 0xf8, 0xb5, 0x04, 0x46, 0x0e, 0x46, 0x4d, 0x09, 0x01, 0xf0, 0x1f, 0x07, - 0xff, 0xf7, 0xa4, 0xff, 0x63, 0x68, 0x30, 0x44, 0xb0, 0xeb, 0x43, 0x1f, - 0x05, 0xd8, 0x1f, 0x2e, 0x0f, 0xd8, 0x00, 0x2f, 0x3b, 0xd1, 0x00, 0x20, - 0x0a, 0xe0, 0x10, 0xf0, 0x1f, 0x01, 0x18, 0xbf, 0x01, 0x21, 0x01, 0xeb, - 0x50, 0x11, 0x20, 0x46, 0xff, 0xf7, 0xc4, 0xfc, 0x00, 0x28, 0xee, 0xd0, - 0xf8, 0xbd, 0x63, 0x68, 0x6f, 0xf0, 0x03, 0x00, 0x9a, 0x00, 0x68, 0x43, - 0x19, 0x46, 0xa9, 0x42, 0xa2, 0xf1, 0x04, 0x02, 0x0b, 0xd8, 0xab, 0x42, - 0x4f, 0xf0, 0x00, 0x02, 0x28, 0xbf, 0x2b, 0x46, 0x9b, 0x00, 0x04, 0x3b, - 0x19, 0x1d, 0xdc, 0xd0, 0xa1, 0x68, 0xca, 0x50, 0xf9, 0xe7, 0xa6, 0x68, - 0x01, 0x39, 0x06, 0xeb, 0x02, 0x0c, 0x5c, 0xf8, 0x00, 0xc0, 0x46, 0xf8, - 0x02, 0xc0, 0xe6, 0xe7, 0xa0, 0x68, 0x50, 0xf8, 0x25, 0x10, 0x01, 0xfa, - 0x07, 0xf3, 0x13, 0x43, 0x21, 0xfa, 0x06, 0xf2, 0x40, 0xf8, 0x25, 0x30, - 0x01, 0x35, 0x63, 0x68, 0xab, 0x42, 0xf1, 0xd8, 0xc3, 0xe7, 0x00, 0x22, - 0xc7, 0xf1, 0x20, 0x06, 0xf7, 0xe7, 0x43, 0x68, 0xb1, 0xeb, 0x43, 0x1f, - 0x3f, 0xbf, 0x4a, 0x09, 0x83, 0x68, 0x01, 0xf0, 0x1f, 0x01, 0x53, 0xf8, - 0x22, 0x00, 0x3a, 0xbf, 0x20, 0xfa, 0x01, 0xf1, 0x01, 0xf0, 0x01, 0x00, - 0x00, 0x20, 0x70, 0x47, 0xf8, 0xb5, 0x07, 0x46, 0x0d, 0x46, 0xff, 0xf7, - 0x77, 0xfe, 0x02, 0x28, 0x06, 0x46, 0x1d, 0xd1, 0x00, 0x21, 0x28, 0x46, - 0xff, 0xf7, 0xe3, 0xff, 0x60, 0xbb, 0x01, 0x21, 0x28, 0x46, 0xff, 0xf7, - 0xde, 0xff, 0x04, 0x46, 0x30, 0xbb, 0x28, 0x46, 0xff, 0xf7, 0x34, 0xff, - 0xfb, 0x6d, 0x01, 0x38, 0x98, 0x42, 0x1f, 0xd1, 0xfe, 0x28, 0x07, 0xd1, - 0x31, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xcf, 0xff, 0x0d, 0x4b, 0x04, 0x1e, - 0x18, 0xbf, 0x1c, 0x46, 0x20, 0x46, 0xf8, 0xbd, 0x01, 0x28, 0x0f, 0xd1, - 0x01, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x9d, 0xfe, 0x00, 0x28, 0x0b, 0xdb, - 0x07, 0xf1, 0x4c, 0x01, 0x28, 0x46, 0xff, 0xf7, 0x53, 0xfe, 0x00, 0x28, - 0x03, 0x4c, 0xb8, 0xbf, 0x00, 0x24, 0xeb, 0xe7, 0x02, 0x4c, 0xe9, 0xe7, - 0x00, 0x4c, 0xe7, 0xe7, 0x80, 0xb3, 0xff, 0xff, 0x80, 0xb0, 0xff, 0xff, - 0x70, 0xb5, 0x0e, 0x46, 0x01, 0x21, 0x04, 0x46, 0xff, 0xf7, 0x38, 0xfc, - 0x05, 0x46, 0x48, 0xb9, 0x62, 0x68, 0x01, 0x46, 0xa0, 0x68, 0x92, 0x00, - 0x09, 0xf0, 0x26, 0xfb, 0xa3, 0x68, 0x1e, 0x60, 0x01, 0x23, 0x23, 0x60, - 0x28, 0x46, 0x70, 0xbd, 0x10, 0xb5, 0x01, 0x21, 0x04, 0x46, 0xff, 0xf7, - 0xe7, 0xff, 0x60, 0xb9, 0x01, 0x21, 0x04, 0xf1, 0x0c, 0x00, 0xff, 0xf7, - 0xe1, 0xff, 0x30, 0xb9, 0x01, 0x46, 0x04, 0xf1, 0x18, 0x00, 0xbd, 0xe8, - 0x10, 0x40, 0xff, 0xf7, 0xd9, 0xbf, 0x10, 0xbd, 0xf0, 0xb4, 0x43, 0x68, - 0x4e, 0x09, 0x01, 0xf0, 0x1f, 0x04, 0xb3, 0x42, 0x01, 0xd3, 0x04, 0xd1, - 0x5c, 0xb3, 0x00, 0x21, 0xf0, 0xbc, 0xff, 0xf7, 0xcb, 0xbf, 0x1f, 0x29, - 0x27, 0xd8, 0x04, 0xbb, 0x00, 0x20, 0xf0, 0xbc, 0x70, 0x47, 0x82, 0x68, - 0x57, 0x59, 0x04, 0x35, 0x42, 0xf8, 0x21, 0x70, 0x01, 0x31, 0x9a, 0x1b, - 0x8a, 0x42, 0xf6, 0xd8, 0x00, 0x21, 0x93, 0x42, 0xef, 0xd9, 0x85, 0x68, - 0x45, 0xf8, 0x22, 0x10, 0x01, 0x32, 0xf8, 0xe7, 0x86, 0x68, 0x56, 0xf8, - 0x23, 0x50, 0x25, 0xfa, 0x04, 0xf2, 0x0a, 0x43, 0x05, 0xfa, 0x07, 0xf1, - 0x46, 0xf8, 0x23, 0x20, 0x01, 0x3b, 0xf3, 0xd2, 0xde, 0xe7, 0x00, 0x21, - 0xc4, 0xf1, 0x20, 0x07, 0xf8, 0xe7, 0x1f, 0x29, 0xd8, 0xd9, 0xb5, 0x00, - 0x00, 0x21, 0xde, 0xe7, 0x88, 0x42, 0xf8, 0xb5, 0x06, 0x46, 0x0d, 0x46, - 0x14, 0x46, 0x01, 0xd1, 0x00, 0x20, 0xf8, 0xbd, 0x49, 0x68, 0xff, 0xf7, - 0xd1, 0xfb, 0x00, 0x28, 0xf9, 0xd1, 0x71, 0x68, 0x28, 0x46, 0xff, 0xf7, - 0xcb, 0xfb, 0x00, 0x28, 0xf3, 0xd1, 0x62, 0x42, 0x31, 0x68, 0x22, 0x43, - 0x2c, 0x68, 0xc2, 0xf3, 0xc0, 0x12, 0xc2, 0xf1, 0x01, 0x03, 0x03, 0xfb, - 0x01, 0xf7, 0x51, 0x43, 0x04, 0xfb, 0x02, 0x74, 0x34, 0x60, 0x2c, 0x68, - 0x04, 0xfb, 0x03, 0x11, 0x29, 0x60, 0x71, 0x68, 0x88, 0x42, 0xdd, 0xd2, - 0xd6, 0xf8, 0x08, 0xc0, 0xaf, 0x68, 0x5c, 0xf8, 0x20, 0x10, 0x57, 0xf8, - 0x20, 0x40, 0x03, 0xfb, 0x01, 0xfe, 0x51, 0x43, 0x04, 0xfb, 0x02, 0xe4, - 0x4c, 0xf8, 0x20, 0x40, 0x57, 0xf8, 0x20, 0x40, 0x04, 0xfb, 0x03, 0x11, - 0x47, 0xf8, 0x20, 0x10, 0x01, 0x30, 0xe6, 0xe7, 0x2d, 0xe9, 0xf0, 0x41, - 0x0d, 0x46, 0x49, 0x68, 0x06, 0x46, 0x14, 0x46, 0xff, 0xf7, 0x96, 0xfb, - 0xb8, 0xb9, 0x62, 0x42, 0x29, 0x68, 0x33, 0x68, 0x22, 0x43, 0xd5, 0xf8, - 0x04, 0xe0, 0xd5, 0xf8, 0x08, 0x80, 0xc2, 0xf3, 0xc0, 0x12, 0x51, 0x43, - 0xc2, 0xf1, 0x01, 0x0c, 0x03, 0xfb, 0x0c, 0x13, 0xb1, 0x68, 0x33, 0x60, - 0x03, 0x46, 0x9e, 0x45, 0x05, 0xd1, 0x6b, 0x68, 0x72, 0x68, 0x9a, 0x42, - 0x0c, 0xd8, 0xbd, 0xe8, 0xf0, 0x81, 0x58, 0xf8, 0x23, 0x70, 0x51, 0xf8, - 0x23, 0x40, 0x57, 0x43, 0x04, 0xfb, 0x0c, 0x74, 0x41, 0xf8, 0x23, 0x40, - 0x01, 0x33, 0xec, 0xe7, 0x51, 0xf8, 0x23, 0x20, 0x0c, 0xfb, 0x02, 0xf2, - 0x41, 0xf8, 0x23, 0x20, 0x01, 0x33, 0xe7, 0xe7, 0x10, 0xb5, 0x04, 0x46, - 0x70, 0xb1, 0x80, 0x68, 0x38, 0xb1, 0x61, 0x68, 0x89, 0x00, 0x01, 0xd0, - 0xfe, 0xf7, 0xe6, 0xfe, 0xa0, 0x68, 0x09, 0xf0, 0xe9, 0xf9, 0x00, 0x23, - 0x01, 0x22, 0xa3, 0x60, 0xc4, 0xe9, 0x00, 0x23, 0x10, 0xbd, 0x10, 0xb5, - 0x04, 0x46, 0xff, 0xf7, 0xe9, 0xff, 0x04, 0xf1, 0x0c, 0x00, 0xff, 0xf7, - 0xe5, 0xff, 0x04, 0xf1, 0x18, 0x00, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, - 0xdf, 0xbf, 0x08, 0xb1, 0xff, 0xf7, 0xef, 0xbf, 0x70, 0x47, 0x70, 0xb5, - 0x04, 0x46, 0x60, 0xb3, 0x03, 0x6e, 0x01, 0x2b, 0x12, 0xd0, 0x04, 0x30, - 0xff, 0xf7, 0xd2, 0xff, 0x04, 0xf1, 0x10, 0x00, 0xff, 0xf7, 0xce, 0xff, - 0x04, 0xf1, 0x1c, 0x00, 0xff, 0xf7, 0xca, 0xff, 0x04, 0xf1, 0x28, 0x00, - 0xff, 0xf7, 0xe7, 0xff, 0x04, 0xf1, 0x4c, 0x00, 0xff, 0xf7, 0xc2, 0xff, - 0x63, 0x6f, 0x8b, 0xb9, 0x20, 0x46, 0x7c, 0x21, 0xbd, 0xe8, 0x70, 0x40, - 0xfe, 0xf7, 0xaa, 0xbe, 0x06, 0xfb, 0x05, 0x00, 0x01, 0x35, 0xff, 0xf7, - 0xd6, 0xff, 0xd4, 0xe9, 0x1d, 0x03, 0xab, 0x42, 0xf6, 0xd8, 0x09, 0xf0, - 0xa5, 0xf9, 0xed, 0xe7, 0x00, 0x25, 0x24, 0x26, 0xf5, 0xe7, 0x70, 0xbd, - 0x2d, 0xe9, 0xf8, 0x43, 0x11, 0xf0, 0x03, 0x06, 0x99, 0x46, 0x43, 0x68, - 0x05, 0x46, 0x18, 0xbf, 0x01, 0x26, 0x0f, 0x46, 0x90, 0x46, 0x06, 0xeb, - 0x91, 0x06, 0xb3, 0x42, 0x08, 0xd1, 0x00, 0x21, 0x28, 0x46, 0xff, 0xf7, - 0xc1, 0xfe, 0x04, 0x46, 0x88, 0xb1, 0x20, 0x46, 0xbd, 0xe8, 0xf8, 0x83, - 0xff, 0xf7, 0x90, 0xff, 0x00, 0x23, 0x01, 0x22, 0x31, 0x46, 0x28, 0x46, - 0xab, 0x60, 0xc5, 0xe9, 0x00, 0x23, 0xff, 0xf7, 0xef, 0xfa, 0x04, 0x46, - 0x00, 0x28, 0xe8, 0xd0, 0xed, 0xe7, 0xc7, 0xeb, 0x86, 0x03, 0xa9, 0x68, - 0x3a, 0x46, 0x48, 0x46, 0x19, 0x44, 0xc0, 0x47, 0x04, 0x46, 0x00, 0x28, - 0xe3, 0xd1, 0x31, 0x46, 0xa8, 0x68, 0xfd, 0xf7, 0x6b, 0xf8, 0xde, 0xe7, - 0x2d, 0xe9, 0xf0, 0x41, 0x12, 0xf0, 0x03, 0x06, 0x43, 0x68, 0x04, 0x46, - 0x88, 0x46, 0x18, 0xbf, 0x01, 0x26, 0x17, 0x46, 0x06, 0xeb, 0x92, 0x06, - 0xb3, 0x42, 0x08, 0xd1, 0x00, 0x21, 0x20, 0x46, 0xff, 0xf7, 0x8c, 0xfe, - 0x05, 0x46, 0x88, 0xb1, 0x28, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0xff, 0xf7, - 0x5b, 0xff, 0x00, 0x23, 0x01, 0x22, 0x31, 0x46, 0x20, 0x46, 0xa3, 0x60, - 0xc4, 0xe9, 0x00, 0x23, 0xff, 0xf7, 0xba, 0xfa, 0x05, 0x46, 0x00, 0x28, - 0xe8, 0xd0, 0xed, 0xe7, 0xb8, 0xf1, 0x00, 0x0f, 0xea, 0xd0, 0xa3, 0x68, - 0xc7, 0xeb, 0x86, 0x00, 0x41, 0x46, 0x3a, 0x46, 0x18, 0x44, 0x09, 0xf0, - 0x93, 0xf9, 0x31, 0x46, 0xa0, 0x68, 0xfd, 0xf7, 0x35, 0xf8, 0xdd, 0xe7, - 0x2d, 0xe9, 0xf8, 0x43, 0x81, 0x46, 0x0d, 0x46, 0x90, 0x46, 0x1e, 0x46, - 0x1b, 0xb9, 0x4d, 0x4c, 0x20, 0x46, 0xbd, 0xe8, 0xf8, 0x83, 0x04, 0x30, - 0xff, 0xf7, 0x64, 0xfd, 0xc4, 0x1d, 0x48, 0x46, 0xff, 0xf7, 0x92, 0xfc, - 0x02, 0x28, 0x4f, 0xea, 0xd4, 0x07, 0x65, 0xd1, 0xbe, 0x42, 0xee, 0xd1, - 0x16, 0xf0, 0x03, 0x01, 0x6b, 0x68, 0x18, 0xbf, 0x01, 0x21, 0x01, 0xeb, - 0x54, 0x14, 0x9c, 0x42, 0x4a, 0xd1, 0x00, 0x21, 0x28, 0x46, 0xff, 0xf7, - 0x43, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xdf, 0xd1, 0xa9, 0x68, 0xe2, 0x00, - 0x18, 0xf8, 0x04, 0x30, 0x24, 0xf0, 0x03, 0x00, 0x01, 0x34, 0x02, 0xf0, - 0x18, 0x02, 0xa7, 0x42, 0x03, 0xfa, 0x02, 0xf2, 0x0b, 0x58, 0x43, 0xea, - 0x02, 0x03, 0x0b, 0x50, 0xef, 0xd8, 0x05, 0xf1, 0x0c, 0x00, 0xff, 0xf7, - 0x01, 0xff, 0x99, 0xf8, 0x00, 0x30, 0x09, 0x2b, 0x12, 0xd1, 0xfb, 0x00, - 0x6a, 0x68, 0x01, 0x3b, 0xb3, 0xeb, 0x42, 0x1f, 0x0c, 0xd2, 0x58, 0x09, - 0xa9, 0x68, 0x01, 0x22, 0x03, 0xf0, 0x1f, 0x03, 0x02, 0xfa, 0x03, 0xf3, - 0x51, 0xf8, 0x20, 0x20, 0x22, 0xea, 0x03, 0x02, 0x41, 0xf8, 0x20, 0x20, - 0x01, 0x21, 0x05, 0xf1, 0x18, 0x00, 0xff, 0xf7, 0x0f, 0xfe, 0x04, 0x46, - 0x00, 0x28, 0xab, 0xd1, 0x48, 0x46, 0xff, 0xf7, 0x45, 0xfc, 0x01, 0x28, - 0x81, 0x46, 0xa5, 0xd1, 0x98, 0xf8, 0x00, 0x30, 0xc3, 0xb9, 0x01, 0x2e, - 0x9f, 0xd1, 0x28, 0x46, 0xbd, 0xe8, 0xf8, 0x43, 0xff, 0xf7, 0x10, 0xbe, - 0x28, 0x46, 0xff, 0xf7, 0xcf, 0xfe, 0x00, 0x23, 0x01, 0x22, 0x21, 0x46, - 0x28, 0x46, 0xab, 0x60, 0xc5, 0xe9, 0x00, 0x23, 0xff, 0xf7, 0x2e, 0xfa, - 0x04, 0x46, 0x00, 0x28, 0xa5, 0xd0, 0x8b, 0xe7, 0x13, 0x4c, 0xdd, 0xe7, - 0x04, 0x2b, 0x1f, 0xd1, 0x7b, 0x00, 0x01, 0x33, 0xb3, 0x42, 0x82, 0xd1, - 0x3a, 0x46, 0x08, 0xf1, 0x01, 0x01, 0x28, 0x46, 0xff, 0xf7, 0x40, 0xff, - 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x7a, 0xaf, 0x79, 0x1c, 0x3a, 0x46, - 0x05, 0xf1, 0x0c, 0x00, 0x41, 0x44, 0xff, 0xf7, 0x35, 0xff, 0x04, 0x46, - 0x00, 0x28, 0x7f, 0xf4, 0x6f, 0xaf, 0x49, 0x46, 0x05, 0xf1, 0x18, 0x00, - 0xbd, 0xe8, 0xf8, 0x43, 0xff, 0xf7, 0xc8, 0xbd, 0x01, 0x4c, 0x65, 0xe7, - 0x80, 0xb0, 0xff, 0xff, 0x80, 0xb1, 0xff, 0xff, 0x88, 0x42, 0x70, 0xb5, - 0x05, 0x46, 0x0e, 0x46, 0x03, 0xd0, 0x4c, 0x68, 0x3c, 0xb9, 0xff, 0xf7, - 0x8f, 0xfe, 0x00, 0x20, 0x11, 0xe0, 0xb3, 0x68, 0x53, 0xf8, 0x24, 0x30, - 0x13, 0xb9, 0x01, 0x3c, 0x00, 0x2c, 0xf8, 0xd1, 0x01, 0x34, 0x6a, 0x68, - 0x33, 0x68, 0xa2, 0x42, 0x2b, 0x60, 0x05, 0xd2, 0x21, 0x46, 0x28, 0x46, - 0xff, 0xf7, 0xe4, 0xf9, 0x40, 0xb1, 0x70, 0xbd, 0x12, 0x1b, 0xa8, 0x68, - 0x00, 0x21, 0x92, 0x00, 0x00, 0xeb, 0x84, 0x00, 0x09, 0xf0, 0xd0, 0xf8, - 0xa2, 0x00, 0xb1, 0x68, 0xa8, 0x68, 0x09, 0xf0, 0xbd, 0xf8, 0xdc, 0xe7, - 0x38, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0xff, 0xf7, 0xcf, 0xff, 0x70, 0xb9, - 0x05, 0xf1, 0x0c, 0x01, 0x04, 0xf1, 0x0c, 0x00, 0xff, 0xf7, 0xc8, 0xff, - 0x38, 0xb9, 0x05, 0xf1, 0x18, 0x01, 0x04, 0xf1, 0x18, 0x00, 0xbd, 0xe8, - 0x38, 0x40, 0xff, 0xf7, 0xbf, 0xbf, 0x38, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, - 0x00, 0x23, 0x89, 0xb0, 0x17, 0x46, 0x88, 0x42, 0x4f, 0xf0, 0x01, 0x02, - 0x81, 0x46, 0x88, 0x46, 0x07, 0x93, 0x04, 0x93, 0xcd, 0xe9, 0x05, 0x23, - 0xcd, 0xe9, 0x02, 0x23, 0x06, 0xd1, 0x05, 0xa8, 0xff, 0xf7, 0xaa, 0xff, - 0x06, 0x46, 0x90, 0xbb, 0x0d, 0xf1, 0x14, 0x08, 0xb9, 0x45, 0x06, 0xd1, - 0x49, 0x46, 0x02, 0xa8, 0xff, 0xf7, 0xa0, 0xff, 0x06, 0x46, 0x40, 0xbb, - 0x02, 0xaf, 0xd8, 0xf8, 0x04, 0xa0, 0xba, 0xf1, 0x00, 0x0f, 0x2c, 0xd1, - 0x7c, 0x68, 0xac, 0xbb, 0x0a, 0xeb, 0x04, 0x01, 0x48, 0x46, 0xff, 0xf7, - 0x91, 0xf9, 0x06, 0x46, 0xc8, 0xb9, 0x01, 0x46, 0x48, 0x46, 0xff, 0xf7, - 0x4d, 0xfd, 0x06, 0x46, 0x98, 0xb9, 0x6f, 0xf0, 0x0f, 0x03, 0x4f, 0xea, - 0x1a, 0x1b, 0x04, 0xf1, 0xff, 0x3c, 0x03, 0xfb, 0x0b, 0xab, 0xab, 0xf1, - 0x08, 0x03, 0x01, 0x93, 0xbc, 0xf1, 0xff, 0x3f, 0x23, 0xd1, 0xd8, 0xf8, - 0x00, 0x20, 0x3b, 0x68, 0x53, 0x43, 0xc9, 0xf8, 0x00, 0x30, 0x02, 0xa8, - 0xff, 0xf7, 0x0a, 0xfe, 0x05, 0xa8, 0xff, 0xf7, 0x07, 0xfe, 0x30, 0x46, - 0x09, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xd8, 0xf8, 0x08, 0x30, 0x03, 0xeb, - 0x8a, 0x03, 0x53, 0xf8, 0x04, 0x3c, 0x00, 0x2b, 0xca, 0xd1, 0x0a, 0xf1, - 0xff, 0x3a, 0xc4, 0xe7, 0xbb, 0x68, 0x03, 0xeb, 0x84, 0x03, 0x53, 0xf8, - 0x04, 0x3c, 0x00, 0x2b, 0xc2, 0xd1, 0x01, 0x3c, 0xbf, 0xe7, 0xba, 0x68, - 0x00, 0x24, 0xd9, 0xf8, 0x08, 0x30, 0x52, 0xf8, 0x2c, 0xe0, 0x52, 0x46, - 0xd8, 0xf8, 0x08, 0x50, 0x03, 0xeb, 0x8c, 0x03, 0x0f, 0x2a, 0x48, 0xd8, - 0xbb, 0xf1, 0x07, 0x0f, 0x40, 0xf2, 0xb7, 0x80, 0x55, 0xf8, 0x04, 0x0b, - 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, - 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, - 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, - 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, - 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, - 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, - 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, - 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, - 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, - 0x01, 0x9a, 0x00, 0x2a, 0x7d, 0xd1, 0x1a, 0x68, 0x14, 0x19, 0x43, 0xf8, - 0x04, 0x4b, 0x4f, 0xf0, 0x01, 0x04, 0xf8, 0xd2, 0x0c, 0xf1, 0xff, 0x3c, - 0x82, 0xe7, 0x10, 0x3a, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, - 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, - 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, - 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, - 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, - 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, - 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, - 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, - 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, - 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, - 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, - 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, - 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, - 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, - 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, - 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, 0x19, 0x68, - 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, 0x04, 0x0b, - 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x55, 0xf8, - 0x04, 0x0b, 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, - 0x42, 0xe7, 0x5a, 0x46, 0x7f, 0xe7, 0x01, 0x3a, 0x55, 0xf8, 0x04, 0x0b, - 0x19, 0x68, 0xee, 0xfb, 0x60, 0x14, 0x43, 0xf8, 0x04, 0x1b, 0x76, 0xe7, - 0x1f, 0xb5, 0x01, 0x23, 0x00, 0x92, 0x01, 0xaa, 0xcd, 0xf8, 0x0c, 0xd0, - 0xcd, 0xe9, 0x01, 0x33, 0xff, 0xf7, 0xbc, 0xfe, 0x05, 0xb0, 0x5d, 0xf8, - 0x04, 0xfb, 0x2d, 0xe9, 0xff, 0x41, 0x16, 0x46, 0x00, 0x23, 0x01, 0x22, - 0x05, 0x46, 0xb0, 0x42, 0x0f, 0x46, 0x03, 0x93, 0xcd, 0xe9, 0x01, 0x23, - 0x06, 0xd1, 0x01, 0x46, 0x01, 0xa8, 0xff, 0xf7, 0x67, 0xfe, 0x04, 0x46, - 0x20, 0xbb, 0x01, 0xae, 0xbd, 0x42, 0x1a, 0xd1, 0x01, 0x23, 0x2b, 0x60, - 0xd6, 0xe9, 0x01, 0x37, 0x1b, 0xbb, 0xaa, 0x68, 0x00, 0x24, 0x16, 0x1f, - 0x20, 0x46, 0x98, 0x42, 0x25, 0xd1, 0xac, 0xb1, 0x4f, 0xf0, 0xff, 0x30, - 0x69, 0x68, 0x99, 0x42, 0x3a, 0xd9, 0x52, 0xf8, 0x23, 0x10, 0x99, 0xb3, - 0x52, 0xf8, 0x23, 0x10, 0x00, 0x24, 0x01, 0x39, 0x42, 0xf8, 0x23, 0x10, - 0x06, 0xe0, 0x39, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x43, 0xfe, 0x04, 0x46, - 0x00, 0x28, 0xdd, 0xd0, 0x01, 0xa8, 0xff, 0xf7, 0xd5, 0xfc, 0x20, 0x46, - 0x04, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x07, 0xeb, 0x83, 0x02, 0x52, 0xf8, - 0x04, 0x2c, 0x00, 0x2a, 0xd5, 0xd1, 0x01, 0x3b, 0xd2, 0xe7, 0x56, 0xf8, - 0x04, 0xef, 0xae, 0xeb, 0x04, 0x01, 0x31, 0x60, 0x57, 0xf8, 0x20, 0xc0, - 0x01, 0x30, 0x61, 0x45, 0xa1, 0xeb, 0x0c, 0x01, 0x2c, 0xbf, 0x4f, 0xf0, - 0x00, 0x08, 0x4f, 0xf0, 0x01, 0x08, 0x31, 0x60, 0xa6, 0x45, 0x2c, 0xbf, - 0x44, 0x46, 0x08, 0xf1, 0x01, 0x04, 0xc0, 0xe7, 0x42, 0xf8, 0x23, 0x00, - 0x01, 0x33, 0xc1, 0xe7, 0xc6, 0xd1, 0x6f, 0xf0, 0x09, 0x04, 0xd1, 0xe7, - 0x30, 0xb5, 0x8f, 0xb0, 0x09, 0x23, 0x01, 0x22, 0x00, 0x21, 0x04, 0x46, - 0x05, 0xa8, 0x8d, 0xf8, 0x03, 0x10, 0x04, 0x90, 0xcd, 0xe9, 0x02, 0x23, - 0x24, 0x22, 0x08, 0xf0, 0xf9, 0xfe, 0x10, 0x21, 0x20, 0x46, 0xfe, 0xf7, - 0xff, 0xff, 0x05, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x29, 0x82, 0xa3, 0x68, - 0x01, 0xa8, 0x1a, 0x68, 0x19, 0x6a, 0x01, 0x92, 0x0d, 0xf1, 0x03, 0x02, - 0xfc, 0xf7, 0x6d, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x59, 0x6a, 0xfc, 0xf7, 0x66, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0x54, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, 0x4d, 0xfa, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0x46, 0xfa, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, - 0x3f, 0xfa, 0x01, 0x9a, 0xa3, 0x68, 0x1a, 0x60, 0x0d, 0xf1, 0x03, 0x02, - 0x9d, 0xf9, 0x03, 0x10, 0x5b, 0x68, 0x00, 0x29, 0x8d, 0xf8, 0x03, 0x50, - 0x01, 0x93, 0x80, 0xf2, 0xf2, 0x81, 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, - 0x2d, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6a, - 0xfc, 0xf7, 0x31, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x99, 0x6a, 0xfc, 0xf7, 0x2a, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, 0x18, 0xfa, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0x11, 0xfa, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0x0a, 0xfa, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, - 0x03, 0xfa, 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, 0x5a, 0x60, - 0x0d, 0xf1, 0x03, 0x02, 0x9b, 0x68, 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, - 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, 0xb9, 0x81, 0x49, 0x42, 0x01, 0xa8, - 0xfc, 0xf7, 0xf0, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x99, 0x6a, 0xfc, 0xf7, 0xf4, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0xed, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, 0xdb, 0xf9, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0xd4, 0xf9, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, - 0xcd, 0xf9, 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, 0x9a, 0x60, - 0x0d, 0xf1, 0x03, 0x02, 0xdb, 0x68, 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, - 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, 0x87, 0x81, 0x49, 0x42, 0x01, 0xa8, - 0xfc, 0xf7, 0xba, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0xd9, 0x6a, 0xfc, 0xf7, 0xbe, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0xb7, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, 0xb0, 0xf9, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, 0xa9, 0xf9, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, - 0xa2, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, - 0xfc, 0xf7, 0x90, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x19, 0x6a, 0xfc, 0xf7, 0x89, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, 0x82, 0xf9, 0x01, 0x9a, 0xa3, 0x68, - 0x9d, 0xf9, 0x03, 0x10, 0xda, 0x60, 0x0d, 0xf1, 0x03, 0x02, 0x1b, 0x69, - 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, - 0x40, 0x81, 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, 0x6f, 0xf9, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, 0x73, 0xf9, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, - 0x6c, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, - 0xfc, 0xf7, 0x65, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x59, 0x6b, 0xfc, 0xf7, 0x5e, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0x57, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, 0x45, 0xf9, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6a, 0xfc, 0xf7, 0x3e, 0xf9, - 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, 0x1a, 0x61, 0x0d, 0xf1, - 0x03, 0x02, 0x5b, 0x69, 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, 0x8d, 0xf8, - 0x03, 0x30, 0x80, 0xf2, 0x00, 0x81, 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, - 0x2b, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, - 0xfc, 0xf7, 0x2f, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x59, 0x6b, 0xfc, 0xf7, 0x28, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0x21, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0x1a, 0xf9, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, 0x13, 0xf9, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6a, 0xfc, 0xf7, - 0x01, 0xf9, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6a, - 0xfc, 0xf7, 0xfa, 0xf8, 0x01, 0x9a, 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, - 0x5a, 0x61, 0x0d, 0xf1, 0x03, 0x02, 0x9b, 0x69, 0x01, 0x93, 0x00, 0x23, - 0x99, 0x42, 0x8d, 0xf8, 0x03, 0x30, 0x80, 0xf2, 0xc0, 0x80, 0x49, 0x42, - 0x01, 0xa8, 0xfc, 0xf7, 0xe7, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0xeb, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, 0xfc, 0xf7, 0xe4, 0xf8, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, 0xdd, 0xf8, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, - 0xd6, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x99, 0x6b, - 0xfc, 0xf7, 0xcf, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x59, 0x6b, 0xfc, 0xf7, 0xc8, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0x19, 0x6a, 0xfc, 0xf7, 0xb6, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6a, 0xfc, 0xf7, 0xaf, 0xf8, 0x01, 0x9a, - 0xa3, 0x68, 0x9d, 0xf9, 0x03, 0x10, 0x9a, 0x61, 0x0d, 0xf1, 0x03, 0x02, - 0xdb, 0x69, 0x01, 0x93, 0x00, 0x23, 0x99, 0x42, 0x8d, 0xf8, 0x03, 0x30, - 0x79, 0xda, 0x49, 0x42, 0x01, 0xa8, 0xfc, 0xf7, 0x9d, 0xf8, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, 0xa1, 0xf8, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, 0xfc, 0xf7, - 0x9a, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6b, - 0xfc, 0xf7, 0x93, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, - 0x19, 0x6a, 0xfc, 0xf7, 0x8c, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, - 0x01, 0xa8, 0x99, 0x6a, 0xfc, 0xf7, 0x7a, 0xf8, 0xa3, 0x68, 0x0d, 0xf1, - 0x03, 0x02, 0x01, 0xa8, 0xd9, 0x6a, 0xfc, 0xf7, 0x73, 0xf8, 0xa3, 0x68, - 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x19, 0x6b, 0xfc, 0xf7, 0x6c, 0xf8, - 0xa3, 0x68, 0x0d, 0xf1, 0x03, 0x02, 0x01, 0xa8, 0x59, 0x6b, 0xfc, 0xf7, - 0x65, 0xf8, 0x01, 0x9b, 0xa1, 0x68, 0x9d, 0xf9, 0x03, 0x20, 0xcb, 0x61, - 0x22, 0xea, 0xe2, 0x73, 0x0b, 0x62, 0x00, 0x23, 0x01, 0x93, 0x08, 0x23, - 0x01, 0x33, 0x60, 0x68, 0x98, 0x42, 0x32, 0xd8, 0x00, 0x2a, 0x11, 0xda, - 0x03, 0x9b, 0x52, 0x42, 0x04, 0x99, 0x20, 0x46, 0x03, 0xf1, 0x80, 0x43, - 0x01, 0x3b, 0x41, 0xf8, 0x23, 0x20, 0x22, 0x46, 0x02, 0xa9, 0xff, 0xf7, - 0x60, 0xfd, 0x05, 0x46, 0x10, 0xb9, 0x4f, 0xf0, 0xff, 0x33, 0x23, 0x60, - 0x28, 0x46, 0x0f, 0xb0, 0x30, 0xbd, 0x01, 0xa8, 0xfc, 0xf7, 0x47, 0xf8, - 0x0d, 0xe6, 0x01, 0xa8, 0xfc, 0xf7, 0x43, 0xf8, 0x46, 0xe6, 0x01, 0xa8, - 0xfc, 0xf7, 0x3f, 0xf8, 0x78, 0xe6, 0x01, 0xa8, 0xfc, 0xf7, 0x3b, 0xf8, - 0xbf, 0xe6, 0x01, 0xa8, 0xfc, 0xf7, 0x37, 0xf8, 0xff, 0xe6, 0x01, 0xa8, - 0xfc, 0xf7, 0x33, 0xf8, 0x3f, 0xe7, 0x01, 0xa8, 0xfc, 0xf7, 0x2f, 0xf8, - 0x85, 0xe7, 0x01, 0x98, 0x41, 0xf8, 0x23, 0x00, 0xc4, 0xe7, 0x38, 0xb5, - 0x0c, 0x46, 0x05, 0x1d, 0x29, 0x46, 0x20, 0x46, 0xfe, 0xf7, 0xb0, 0xff, - 0x00, 0x28, 0x01, 0xda, 0x00, 0x20, 0x06, 0xe0, 0x2a, 0x46, 0x21, 0x46, - 0x20, 0x46, 0xff, 0xf7, 0x28, 0xfd, 0x00, 0x28, 0xf0, 0xd0, 0x38, 0xbd, - 0x90, 0x42, 0x2d, 0xe9, 0xf0, 0x41, 0x07, 0x46, 0x0d, 0x46, 0x16, 0x46, - 0x02, 0xd0, 0x88, 0x42, 0x29, 0xd1, 0x35, 0x46, 0x01, 0x23, 0x6e, 0x68, - 0x3b, 0x60, 0x66, 0xbb, 0x31, 0x46, 0x38, 0x46, 0xfe, 0xf7, 0x8a, 0xfd, - 0x04, 0x46, 0x18, 0xbb, 0xa9, 0x68, 0x05, 0x46, 0xbb, 0x68, 0x86, 0x42, - 0x2a, 0xd1, 0x03, 0xeb, 0x86, 0x03, 0xdd, 0xb1, 0x7a, 0x68, 0x06, 0xf1, - 0x01, 0x08, 0xb2, 0x42, 0x08, 0xd8, 0x41, 0x46, 0x38, 0x46, 0xfe, 0xf7, - 0x77, 0xfd, 0x00, 0x28, 0x2f, 0xd1, 0xbb, 0x68, 0x03, 0xeb, 0x86, 0x03, - 0x1a, 0x68, 0x46, 0x46, 0x55, 0x19, 0x43, 0xf8, 0x04, 0x5b, 0x2c, 0xbf, - 0x01, 0x25, 0x00, 0x25, 0xe7, 0xe7, 0xff, 0xf7, 0x67, 0xfb, 0x04, 0x46, - 0x00, 0x28, 0xd0, 0xd0, 0x20, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0xab, 0x68, - 0x03, 0xeb, 0x86, 0x03, 0x53, 0xf8, 0x04, 0x3c, 0x00, 0x2b, 0xcb, 0xd1, - 0x01, 0x3e, 0xc8, 0xe7, 0x53, 0xf8, 0x20, 0x20, 0x12, 0xeb, 0x05, 0x0c, - 0x51, 0xf8, 0x20, 0x20, 0x2c, 0xbf, 0x01, 0x25, 0x00, 0x25, 0x1c, 0xeb, - 0x02, 0x02, 0x43, 0xf8, 0x20, 0x20, 0x2c, 0xbf, 0x01, 0x22, 0x00, 0x22, - 0x01, 0x30, 0x15, 0x44, 0xbf, 0xe7, 0x04, 0x46, 0xde, 0xe7, 0xf8, 0xb5, - 0x0d, 0x68, 0x04, 0x46, 0x13, 0x68, 0x0f, 0x46, 0x16, 0x46, 0x6b, 0x43, - 0x00, 0x2b, 0x16, 0xdd, 0x11, 0x46, 0x38, 0x46, 0xfb, 0xf7, 0xbc, 0xff, - 0x00, 0x28, 0x06, 0xdb, 0x32, 0x46, 0x39, 0x46, 0x20, 0x46, 0xff, 0xf7, - 0xb8, 0xfc, 0x40, 0xb1, 0xf8, 0xbd, 0x3a, 0x46, 0x31, 0x46, 0x20, 0x46, - 0xff, 0xf7, 0xb1, 0xfc, 0x00, 0x28, 0xf7, 0xd1, 0x6d, 0x42, 0x25, 0x60, - 0xf4, 0xe7, 0xff, 0xf7, 0x85, 0xff, 0xf0, 0xe7, 0x7f, 0xb5, 0x00, 0x23, - 0x01, 0xf1, 0x0c, 0x05, 0x16, 0x46, 0x01, 0x22, 0x01, 0x1d, 0x01, 0xa8, - 0x03, 0x93, 0xcd, 0xe9, 0x01, 0x23, 0x2a, 0x46, 0xff, 0xf7, 0xcf, 0xff, - 0x04, 0x46, 0x68, 0xb9, 0x01, 0x46, 0x28, 0x46, 0xfe, 0xf7, 0x57, 0xff, - 0x01, 0xa9, 0x00, 0x28, 0x0c, 0xbf, 0x00, 0x22, 0x06, 0xf0, 0x01, 0x02, - 0x28, 0x46, 0xff, 0xf7, 0x65, 0xf9, 0x04, 0x46, 0x01, 0xa8, 0xff, 0xf7, - 0x97, 0xf9, 0x20, 0x46, 0x04, 0xb0, 0x70, 0xbd, 0x2d, 0xe9, 0xf7, 0x4f, - 0x9d, 0xf8, 0x30, 0x80, 0x06, 0x46, 0x0d, 0x46, 0x1f, 0x46, 0xc8, 0xf3, - 0x45, 0x09, 0x02, 0xf1, 0x0c, 0x04, 0x4f, 0xf0, 0x00, 0x0b, 0x01, 0xf1, - 0x0c, 0x0a, 0xbb, 0x45, 0x08, 0xd1, 0x4f, 0xea, 0xd8, 0x12, 0x29, 0x46, - 0x30, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x4f, 0xff, 0xf7, 0xc2, 0xbf, - 0x5f, 0xfa, 0x8b, 0xf2, 0xa4, 0xf1, 0x0c, 0x01, 0x28, 0x46, 0xa2, 0xeb, - 0x09, 0x03, 0x5a, 0x42, 0x5a, 0x41, 0x01, 0x92, 0xff, 0xf7, 0x38, 0xf9, - 0x48, 0xb9, 0x21, 0x46, 0x01, 0x9a, 0x50, 0x46, 0x0b, 0xf1, 0x01, 0x0b, - 0x24, 0x34, 0xff, 0xf7, 0x2f, 0xf9, 0x00, 0x28, 0xdd, 0xd0, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0xf8, 0xb5, 0x0d, 0x68, 0x04, 0x46, 0x13, 0x68, - 0x0f, 0x46, 0x16, 0x46, 0x6b, 0x43, 0x16, 0xd5, 0x11, 0x46, 0x38, 0x46, - 0xfb, 0xf7, 0x42, 0xff, 0x00, 0x28, 0x06, 0xdb, 0x32, 0x46, 0x39, 0x46, - 0x20, 0x46, 0xff, 0xf7, 0x3e, 0xfc, 0x40, 0xb1, 0xf8, 0xbd, 0x3a, 0x46, - 0x31, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x37, 0xfc, 0x00, 0x28, 0xf7, 0xd1, - 0x6d, 0x42, 0x25, 0x60, 0xf4, 0xe7, 0xff, 0xf7, 0x0b, 0xff, 0xf0, 0xe7, - 0x38, 0xb5, 0x0c, 0x46, 0x05, 0x46, 0x11, 0x46, 0x1a, 0x46, 0x20, 0x46, - 0xff, 0xf7, 0xd6, 0xff, 0x28, 0xb9, 0x21, 0x46, 0x28, 0x46, 0xbd, 0xe8, - 0x38, 0x40, 0xff, 0xf7, 0xe8, 0xbe, 0x38, 0xbd, 0x70, 0xb5, 0x0c, 0x46, - 0x06, 0x46, 0x11, 0x46, 0x1a, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x4b, 0xff, - 0x05, 0x46, 0x80, 0xb9, 0x04, 0x36, 0x23, 0x68, 0x00, 0x2b, 0x0c, 0xda, - 0x00, 0x21, 0x20, 0x46, 0xfe, 0xf7, 0xcf, 0xfe, 0x30, 0xb1, 0x32, 0x46, - 0x21, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xb6, 0xff, 0x00, 0x28, 0xf0, 0xd0, - 0x05, 0x46, 0x28, 0x46, 0x70, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, 0x06, 0x46, - 0x9b, 0xb0, 0x89, 0x46, 0x10, 0x46, 0x00, 0x21, 0x90, 0x46, 0xfe, 0xf7, - 0xba, 0xfe, 0x00, 0x28, 0xc0, 0xf2, 0x9b, 0x81, 0x05, 0xd1, 0x6f, 0xf0, - 0x0b, 0x04, 0x20, 0x46, 0x1b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x00, 0x23, - 0x01, 0x25, 0x41, 0x46, 0x48, 0x46, 0x14, 0x95, 0xcd, 0xe9, 0x08, 0x53, - 0xcd, 0xe9, 0x0a, 0x35, 0xcd, 0xe9, 0x0c, 0x33, 0xcd, 0xe9, 0x0e, 0x53, - 0xcd, 0xe9, 0x10, 0x35, 0xcd, 0xe9, 0x12, 0x33, 0x03, 0x23, 0x15, 0x93, - 0x17, 0xab, 0x16, 0x93, 0xfb, 0xf7, 0xd4, 0xfe, 0x00, 0x28, 0x17, 0xda, - 0x36, 0xb1, 0x49, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x47, 0xfa, 0x04, 0x46, - 0x00, 0x28, 0x46, 0xd1, 0x00, 0x21, 0x30, 0x46, 0xfe, 0xf7, 0x8b, 0xfe, - 0x00, 0x28, 0xc0, 0xf2, 0x5b, 0x81, 0x41, 0x46, 0x30, 0x46, 0xfe, 0xf7, - 0x41, 0xfe, 0x00, 0x28, 0x80, 0xf2, 0x5b, 0x81, 0x00, 0x24, 0xca, 0xe7, - 0x49, 0x46, 0x08, 0xa8, 0xff, 0xf7, 0x30, 0xfa, 0x04, 0x46, 0x80, 0xbb, - 0x41, 0x46, 0x0b, 0xa8, 0xff, 0xf7, 0x2a, 0xfa, 0x04, 0x46, 0x50, 0xbb, - 0xd9, 0xf8, 0x04, 0x10, 0x0e, 0xa8, 0x0b, 0x95, 0x02, 0x31, 0x08, 0x95, - 0xfe, 0xf7, 0x20, 0xfc, 0x04, 0x46, 0x00, 0xbb, 0x01, 0x46, 0x0e, 0xa8, - 0xfe, 0xf7, 0xdc, 0xff, 0x04, 0x46, 0xd0, 0xb9, 0x02, 0x21, 0x11, 0xa8, - 0xfe, 0xf7, 0x14, 0xfc, 0x04, 0x46, 0xa0, 0xb9, 0x0b, 0xa8, 0xfe, 0xf7, - 0xdb, 0xfe, 0x00, 0xf0, 0x1f, 0x00, 0x1f, 0x28, 0x20, 0xd0, 0xc0, 0xf1, - 0x1f, 0x07, 0x08, 0xa8, 0x39, 0x46, 0xfe, 0xf7, 0x25, 0xff, 0x04, 0x46, - 0x28, 0xb9, 0x39, 0x46, 0x0b, 0xa8, 0xfe, 0xf7, 0x1f, 0xff, 0x04, 0x46, - 0x98, 0xb1, 0x08, 0xa8, 0xff, 0xf7, 0x92, 0xf8, 0x0b, 0xa8, 0xff, 0xf7, - 0x8f, 0xf8, 0x0e, 0xa8, 0xff, 0xf7, 0x8c, 0xf8, 0x11, 0xa8, 0xff, 0xf7, - 0x89, 0xf8, 0x0c, 0x21, 0x17, 0xa8, 0xfd, 0xf7, 0x75, 0xff, 0x00, 0x2c, - 0xa6, 0xd0, 0x80, 0xe7, 0x27, 0x46, 0x09, 0x9d, 0x0b, 0xa8, 0xdd, 0xf8, - 0x30, 0xb0, 0xa5, 0xeb, 0x0b, 0x03, 0x4f, 0xea, 0x43, 0x1a, 0x01, 0x93, - 0x51, 0x46, 0xfe, 0xf7, 0xfd, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xdc, 0xd1, - 0x01, 0x9b, 0x9b, 0x00, 0x0b, 0xa9, 0x08, 0xa8, 0x01, 0x93, 0xfe, 0xf7, - 0xdb, 0xfd, 0x00, 0x28, 0x01, 0x9b, 0x36, 0xda, 0x51, 0x46, 0x0b, 0xa8, - 0xfe, 0xf7, 0xb6, 0xff, 0x04, 0x46, 0x00, 0x28, 0xcb, 0xd1, 0x0b, 0xf1, - 0xff, 0x33, 0x05, 0xf1, 0xff, 0x3a, 0x05, 0xf1, 0x80, 0x45, 0x01, 0x93, - 0x9b, 0x00, 0x01, 0x3d, 0x03, 0x93, 0x0b, 0xf1, 0x80, 0x43, 0xa5, 0xeb, - 0x0b, 0x05, 0x02, 0x3b, 0xad, 0x00, 0x9b, 0x00, 0x07, 0x93, 0x01, 0x9b, - 0x53, 0x45, 0x29, 0xd3, 0x00, 0x2e, 0xb4, 0xd0, 0x39, 0x46, 0x08, 0xa8, - 0xfe, 0xf7, 0x98, 0xff, 0x88, 0xb9, 0xd9, 0xf8, 0x00, 0x30, 0x08, 0xa9, - 0x30, 0x46, 0x08, 0x93, 0xff, 0xf7, 0xa6, 0xf9, 0x01, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0xbe, 0x80, 0x30, 0x46, 0xfe, 0xf7, 0xea, 0xfd, 0x00, 0x28, - 0x9f, 0xd1, 0x01, 0x23, 0x33, 0x60, 0x04, 0x46, 0x9b, 0xe7, 0x10, 0x99, - 0x01, 0x93, 0xca, 0x58, 0x01, 0x32, 0xca, 0x50, 0x08, 0xa9, 0x0b, 0xaa, - 0x08, 0x46, 0xff, 0xf7, 0x4c, 0xfe, 0x01, 0x9b, 0x04, 0x46, 0x00, 0x28, - 0xb2, 0xd0, 0x8c, 0xe7, 0xdd, 0xf8, 0x28, 0xb0, 0x4f, 0xea, 0x8a, 0x03, - 0x03, 0x9a, 0x04, 0x93, 0x0b, 0xeb, 0x8a, 0x03, 0x5b, 0xf8, 0x2a, 0x10, - 0x06, 0x93, 0x0d, 0x9b, 0x9a, 0x58, 0x04, 0x9b, 0x91, 0x42, 0xa3, 0xf1, - 0x04, 0x03, 0x05, 0x93, 0x10, 0x9b, 0x03, 0xeb, 0x05, 0x00, 0x02, 0x90, - 0x75, 0xd3, 0x4f, 0xf0, 0xff, 0x32, 0x5a, 0x51, 0xba, 0xf1, 0x01, 0x0f, - 0x02, 0x9a, 0x16, 0xbf, 0x06, 0x9b, 0x00, 0x23, 0x53, 0xf8, 0x08, 0x3c, - 0x17, 0x93, 0x05, 0x9b, 0x5b, 0xf8, 0x03, 0x30, 0x18, 0x93, 0x04, 0x9b, - 0x5b, 0xf8, 0x03, 0x30, 0x19, 0x93, 0x02, 0x9b, 0x1b, 0x68, 0x01, 0x33, - 0x13, 0x60, 0x10, 0x9a, 0x00, 0x21, 0x11, 0xa8, 0x53, 0x59, 0x01, 0x3b, - 0x53, 0x51, 0xfe, 0xf7, 0x15, 0xff, 0x00, 0x28, 0xb5, 0xd1, 0x01, 0x9b, - 0x0d, 0x9a, 0x00, 0x2b, 0x66, 0xd0, 0x07, 0x9b, 0xd1, 0x58, 0x13, 0x9b, - 0x19, 0x60, 0x03, 0x99, 0x52, 0x58, 0x11, 0xa9, 0x5a, 0x60, 0x08, 0x46, - 0x10, 0x9b, 0x5a, 0x59, 0xff, 0xf7, 0xbc, 0xfa, 0x00, 0x28, 0xa2, 0xd1, - 0x14, 0xa9, 0x11, 0xa8, 0xfe, 0xf7, 0x42, 0xfd, 0x00, 0x28, 0xdc, 0xdc, - 0x10, 0x9b, 0x0b, 0xa9, 0x11, 0xa8, 0x5a, 0x59, 0xff, 0xf7, 0xae, 0xfa, - 0x00, 0x28, 0x94, 0xd1, 0x4f, 0xea, 0xc5, 0x0b, 0x11, 0xa8, 0x59, 0x46, - 0xfe, 0xf7, 0x4a, 0xfe, 0x00, 0x28, 0x8c, 0xd1, 0x08, 0xa9, 0x11, 0xaa, - 0x08, 0x46, 0xff, 0xf7, 0xe0, 0xfd, 0x01, 0x46, 0x00, 0x28, 0x3b, 0xd1, - 0x08, 0xa8, 0xfe, 0xf7, 0x68, 0xfd, 0x00, 0x28, 0x19, 0xda, 0x0b, 0xa9, - 0x11, 0xa8, 0xff, 0xf7, 0x17, 0xf9, 0x00, 0x28, 0x7f, 0xf4, 0x79, 0xaf, - 0x59, 0x46, 0x11, 0xa8, 0xfe, 0xf7, 0x30, 0xfe, 0x00, 0x28, 0x7f, 0xf4, - 0x72, 0xaf, 0x08, 0xa9, 0x11, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x40, 0xfe, - 0x00, 0x28, 0x7f, 0xf4, 0x6a, 0xaf, 0x10, 0x9a, 0x53, 0x59, 0x01, 0x3b, - 0x53, 0x51, 0x0a, 0xf1, 0xff, 0x3a, 0x04, 0x3d, 0x45, 0xe7, 0x05, 0x9b, - 0x5b, 0xf8, 0x03, 0x00, 0x7a, 0xb1, 0x00, 0x23, 0x0a, 0xf0, 0xc8, 0xf8, - 0x0b, 0x46, 0x00, 0x21, 0x02, 0x46, 0x4f, 0xf0, 0xff, 0x30, 0x99, 0x42, - 0x08, 0xbf, 0x90, 0x42, 0x00, 0xd2, 0x02, 0x46, 0x02, 0x9b, 0x1a, 0x60, - 0x78, 0xe7, 0x4f, 0xf0, 0xff, 0x32, 0xf9, 0xe7, 0x01, 0x99, 0x98, 0xe7, - 0x0c, 0x46, 0xe4, 0xe6, 0x42, 0x46, 0x31, 0x46, 0x30, 0x46, 0xff, 0xf7, - 0x15, 0xfe, 0x04, 0x46, 0xed, 0xe6, 0x42, 0x46, 0x31, 0x46, 0x30, 0x46, - 0xff, 0xf7, 0x93, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, 0x95, 0xae, - 0x67, 0xe6, 0x6f, 0xf0, 0x09, 0x04, 0x64, 0xe6, 0xf8, 0xb5, 0x0c, 0x46, - 0x06, 0x46, 0x11, 0x46, 0x1a, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x08, 0xf9, - 0x05, 0x46, 0x50, 0xbb, 0x77, 0x6e, 0x37, 0xb9, 0x32, 0x1d, 0x21, 0x46, - 0x20, 0x46, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, 0x42, 0xbe, 0x23, 0x68, - 0x00, 0x2b, 0x04, 0xda, 0x01, 0x46, 0x20, 0x46, 0xfe, 0xf7, 0xff, 0xfc, - 0x60, 0xbb, 0x20, 0x46, 0xfe, 0xf7, 0x7c, 0xfd, 0xb3, 0x6d, 0xb0, 0xeb, - 0x43, 0x0f, 0x25, 0xd8, 0x20, 0x46, 0xb8, 0x47, 0x05, 0x46, 0x70, 0xb9, - 0x04, 0x36, 0x23, 0x68, 0x00, 0x2b, 0x04, 0xda, 0x00, 0x21, 0x20, 0x46, - 0xfe, 0xf7, 0xeb, 0xfc, 0x38, 0xb9, 0x31, 0x46, 0x20, 0x46, 0xfe, 0xf7, - 0xa3, 0xfc, 0x00, 0x28, 0x0a, 0xda, 0x28, 0x46, 0xf8, 0xbd, 0x32, 0x46, - 0x21, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xca, 0xfd, 0x00, 0x28, 0xe8, 0xd0, - 0x05, 0x46, 0xf4, 0xe7, 0x32, 0x46, 0x21, 0x46, 0x20, 0x46, 0xff, 0xf7, - 0x12, 0xfa, 0x00, 0x28, 0xe7, 0xd0, 0xf5, 0xe7, 0x00, 0x4d, 0xea, 0xe7, - 0x80, 0xb0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x43, 0x0e, 0x46, 0x8b, 0xb0, - 0x05, 0x46, 0x01, 0x21, 0x06, 0xf1, 0x18, 0x00, 0xfe, 0xf7, 0xc3, 0xfc, - 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x99, 0x80, 0x28, 0x46, 0xfe, 0xf7, - 0x6f, 0xfc, 0x02, 0x28, 0x07, 0x46, 0x0f, 0xd1, 0x30, 0x46, 0xfe, 0xf7, - 0x37, 0xfd, 0xeb, 0x6d, 0x07, 0x30, 0x07, 0x33, 0xc0, 0x08, 0xb0, 0xeb, - 0xd3, 0x0f, 0x47, 0x4b, 0x88, 0xbf, 0x1c, 0x46, 0x20, 0x46, 0x0b, 0xb0, - 0xbd, 0xe8, 0xf0, 0x83, 0x01, 0x28, 0x40, 0xf0, 0x82, 0x80, 0x21, 0x46, - 0x30, 0x46, 0xfe, 0xf7, 0xa2, 0xfc, 0x00, 0x28, 0x79, 0xdb, 0x06, 0xf1, - 0x0c, 0x09, 0x21, 0x46, 0x48, 0x46, 0xfe, 0xf7, 0x9a, 0xfc, 0x00, 0x28, - 0x71, 0xdb, 0x05, 0xf1, 0x04, 0x08, 0x30, 0x46, 0x41, 0x46, 0xfe, 0xf7, - 0x4f, 0xfc, 0x00, 0x28, 0x69, 0xda, 0x41, 0x46, 0x48, 0x46, 0xfe, 0xf7, - 0x49, 0xfc, 0x00, 0x28, 0x63, 0xda, 0x4b, 0x46, 0x4a, 0x46, 0x01, 0xa9, - 0x28, 0x46, 0xcd, 0xe9, 0x01, 0x74, 0xcd, 0xe9, 0x03, 0x47, 0xcd, 0xe9, - 0x05, 0x44, 0xff, 0xf7, 0x65, 0xff, 0x04, 0x46, 0x00, 0x28, 0x4d, 0xd1, - 0x33, 0x46, 0x32, 0x46, 0x04, 0xa9, 0x28, 0x46, 0xff, 0xf7, 0x5c, 0xff, - 0x04, 0x46, 0x00, 0x28, 0x44, 0xd1, 0xab, 0x69, 0x00, 0x2b, 0x37, 0xd1, - 0x03, 0x23, 0x04, 0xa9, 0x07, 0xaa, 0xcd, 0xf8, 0x24, 0xd0, 0x00, 0x93, - 0x01, 0x23, 0x08, 0x46, 0xcd, 0xe9, 0x07, 0x33, 0xff, 0xf7, 0xd5, 0xfc, - 0x04, 0x46, 0x00, 0x28, 0x32, 0xd1, 0x04, 0x9b, 0x00, 0x2b, 0x19, 0xdb, - 0x04, 0xaa, 0x33, 0x46, 0x28, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x3e, 0xff, - 0x04, 0x46, 0x38, 0xbb, 0x04, 0xaa, 0x05, 0xf1, 0x1c, 0x03, 0x28, 0x46, - 0x11, 0x46, 0xff, 0xf7, 0x5d, 0xfd, 0x04, 0x46, 0xf0, 0xb9, 0x04, 0xa9, - 0x01, 0xa8, 0xfe, 0xf7, 0x05, 0xfc, 0x13, 0x4b, 0x04, 0x1e, 0x18, 0xbf, - 0x1c, 0x46, 0x15, 0xe0, 0x00, 0x21, 0x04, 0xa8, 0xfe, 0xf7, 0x3f, 0xfc, - 0x00, 0x28, 0xdf, 0xd0, 0x04, 0xa9, 0x42, 0x46, 0x08, 0x46, 0xff, 0xf7, - 0x25, 0xfd, 0xd3, 0xe7, 0x04, 0xaa, 0x05, 0xf1, 0x10, 0x03, 0x28, 0x46, - 0x11, 0x46, 0xff, 0xf7, 0x3f, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xcf, 0xd0, - 0x01, 0xa8, 0xfe, 0xf7, 0x77, 0xfe, 0x04, 0xa8, 0xfe, 0xf7, 0x74, 0xfe, - 0x78, 0xe7, 0x02, 0x4c, 0x76, 0xe7, 0x02, 0x4c, 0x74, 0xe7, 0x00, 0xbf, - 0x80, 0xb3, 0xff, 0xff, 0x80, 0xb0, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, - 0x87, 0x6d, 0x85, 0xb0, 0x91, 0x46, 0x9a, 0x46, 0x07, 0x37, 0x00, 0x23, - 0x01, 0x22, 0x06, 0x46, 0x0d, 0x46, 0xff, 0x08, 0x4f, 0xf0, 0x0c, 0x08, - 0x00, 0xf1, 0x04, 0x0b, 0x03, 0x93, 0xcd, 0xe9, 0x01, 0x23, 0x53, 0x46, - 0x4a, 0x46, 0x39, 0x46, 0x01, 0xa8, 0xfe, 0xf7, 0xa7, 0xfe, 0x04, 0x46, - 0xf0, 0xb9, 0x59, 0x46, 0x01, 0xa8, 0xfe, 0xf7, 0xbb, 0xfb, 0x00, 0x28, - 0x1f, 0xda, 0xb8, 0xf1, 0x01, 0x08, 0x21, 0xd0, 0x01, 0x21, 0x01, 0xa8, - 0xfe, 0xf7, 0xf5, 0xfb, 0x00, 0x28, 0xe8, 0xdd, 0x01, 0xab, 0x2a, 0x46, - 0x29, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xd4, 0xfe, 0x04, 0x46, 0x38, 0xb9, - 0x05, 0xf1, 0x18, 0x02, 0x01, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, - 0xcb, 0xfe, 0x04, 0x46, 0x01, 0xa8, 0xfe, 0xf7, 0x2d, 0xfe, 0x20, 0x46, - 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x21, 0x01, 0xa8, 0xfe, 0xf7, - 0x77, 0xfd, 0xd2, 0xe7, 0x00, 0x4c, 0xf1, 0xe7, 0x00, 0xb3, 0xff, 0xff, - 0x2d, 0xe9, 0xf0, 0x4f, 0x87, 0x6d, 0x87, 0xb0, 0x91, 0x46, 0x9a, 0x46, - 0x07, 0x37, 0x00, 0x23, 0x01, 0x22, 0x05, 0x46, 0x0e, 0x46, 0xff, 0x08, - 0x4f, 0xf0, 0x0c, 0x08, 0x00, 0xf1, 0x04, 0x0b, 0x05, 0x93, 0x02, 0x93, - 0xcd, 0xe9, 0x03, 0x23, 0xcd, 0xe9, 0x00, 0x23, 0x53, 0x46, 0x4a, 0x46, - 0x39, 0x46, 0x03, 0xa8, 0xfe, 0xf7, 0x5a, 0xfe, 0x04, 0x46, 0xb8, 0xbb, - 0x59, 0x46, 0x03, 0xa8, 0xfe, 0xf7, 0x6e, 0xfb, 0x00, 0x28, 0x3b, 0xda, - 0xb8, 0xf1, 0x01, 0x08, 0x3d, 0xd0, 0x01, 0x21, 0x03, 0xa8, 0xfe, 0xf7, - 0xa8, 0xfb, 0x00, 0x28, 0xe8, 0xdd, 0x06, 0xf1, 0x18, 0x02, 0x03, 0xab, - 0x28, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x86, 0xfe, 0x04, 0x46, 0xf8, 0xb9, - 0x03, 0xab, 0x69, 0x46, 0x28, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0x7e, 0xfe, - 0x04, 0x46, 0xb8, 0xb9, 0x6b, 0x46, 0x32, 0x46, 0x31, 0x46, 0x28, 0x46, - 0xff, 0xf7, 0x76, 0xfe, 0x04, 0x46, 0x78, 0xb9, 0x03, 0xab, 0x6a, 0x46, - 0x69, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x6e, 0xfe, 0x04, 0x46, 0x38, 0xb9, - 0x06, 0xf1, 0x0c, 0x02, 0x6b, 0x46, 0x28, 0x46, 0x11, 0x46, 0xff, 0xf7, - 0x65, 0xfe, 0x04, 0x46, 0x03, 0xa8, 0xfe, 0xf7, 0xc7, 0xfd, 0x68, 0x46, - 0xfe, 0xf7, 0xc4, 0xfd, 0x20, 0x46, 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, - 0x01, 0x21, 0x03, 0xa8, 0xfe, 0xf7, 0x0e, 0xfd, 0xb6, 0xe7, 0x01, 0x4c, - 0xee, 0xe7, 0x00, 0xbf, 0x00, 0xb3, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x41, - 0x00, 0x23, 0x8c, 0xb0, 0x0d, 0x46, 0x01, 0x21, 0x0b, 0x93, 0x06, 0x46, - 0x08, 0x93, 0x17, 0x46, 0x05, 0x93, 0x02, 0x93, 0xcd, 0xe9, 0x09, 0x13, - 0xcd, 0xe9, 0x06, 0x13, 0xcd, 0xe9, 0x03, 0x13, 0xcd, 0xe9, 0x00, 0x13, - 0x83, 0x69, 0x00, 0x2b, 0x40, 0xf0, 0xdd, 0x80, 0x02, 0xf1, 0x18, 0x03, - 0x06, 0xa9, 0x1a, 0x46, 0xff, 0xf7, 0x32, 0xfe, 0x04, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0xc3, 0x80, 0x06, 0xab, 0x3a, 0x46, 0x03, 0xa9, 0x30, 0x46, - 0xff, 0xf7, 0x50, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xb9, 0x80, - 0x06, 0xab, 0x3a, 0x46, 0x69, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x56, 0xfc, - 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0xaf, 0x80, 0x6b, 0x46, 0x03, 0xaa, - 0x06, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x14, 0xfe, 0x04, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0xa5, 0x80, 0x03, 0x22, 0x06, 0xa9, 0x09, 0xa8, 0xff, 0xf7, - 0x55, 0xf8, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x9c, 0x80, 0x06, 0xf1, - 0x04, 0x08, 0x41, 0x46, 0x09, 0xa8, 0xfe, 0xf7, 0xd7, 0xfa, 0x00, 0x28, - 0x80, 0xf2, 0x8a, 0x80, 0x07, 0xf1, 0x0c, 0x08, 0x03, 0xa9, 0x30, 0x46, - 0x43, 0x46, 0x42, 0x46, 0xff, 0xf7, 0xf6, 0xfd, 0x04, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0x87, 0x80, 0x03, 0xa9, 0x30, 0x46, 0xef, 0xf7, 0xc9, 0xfc, - 0x04, 0x46, 0x00, 0x28, 0x7f, 0xd1, 0x03, 0xab, 0x3a, 0x46, 0x06, 0xa9, - 0x30, 0x46, 0xff, 0xf7, 0xe5, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x76, 0xd1, - 0x06, 0xa9, 0x30, 0x46, 0xef, 0xf7, 0xb9, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0x6f, 0xd1, 0x03, 0xab, 0x69, 0x46, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, - 0xd5, 0xfd, 0x04, 0x46, 0x00, 0x28, 0x66, 0xd1, 0x69, 0x46, 0x30, 0x46, - 0xef, 0xf7, 0xa9, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x5f, 0xd1, 0x09, 0xab, - 0x03, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0xc5, 0xfd, 0x04, 0x46, - 0x00, 0x28, 0x56, 0xd1, 0x03, 0xaa, 0x06, 0xab, 0x30, 0x46, 0x11, 0x46, - 0xff, 0xf7, 0xf4, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x4d, 0xd1, 0x03, 0xaa, - 0x06, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xeb, 0xfb, 0x04, 0x46, - 0x00, 0x28, 0x44, 0xd1, 0x06, 0xaa, 0x03, 0xab, 0x30, 0x46, 0x11, 0x46, - 0xff, 0xf7, 0xe2, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x3b, 0xd1, 0x06, 0xaa, - 0x09, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xa1, 0xfd, 0x04, 0x46, - 0x98, 0xbb, 0x06, 0xaa, 0x6b, 0x46, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, - 0xd1, 0xfb, 0x04, 0x46, 0x58, 0xbb, 0x07, 0xf1, 0x18, 0x03, 0x42, 0x46, - 0x69, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x90, 0xfd, 0x04, 0x46, 0x10, 0xbb, - 0x69, 0x46, 0x30, 0x46, 0xef, 0xf7, 0x65, 0xfc, 0x04, 0x46, 0xe0, 0xb9, - 0x03, 0xa9, 0x28, 0x46, 0xfe, 0xf7, 0x52, 0xfe, 0x04, 0x46, 0xb0, 0xb9, - 0x06, 0xa9, 0x05, 0xf1, 0x0c, 0x00, 0xfe, 0xf7, 0x4b, 0xfe, 0x04, 0x46, - 0x78, 0xb9, 0x69, 0x46, 0x05, 0xf1, 0x18, 0x00, 0xfe, 0xf7, 0x44, 0xfe, - 0x04, 0x46, 0x08, 0xe0, 0x09, 0xa9, 0x42, 0x46, 0x08, 0x46, 0xfe, 0xf7, - 0xc6, 0xff, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, 0x66, 0xaf, 0x09, 0xa8, - 0xfe, 0xf7, 0xce, 0xfc, 0x06, 0xa8, 0xfe, 0xf7, 0xcb, 0xfc, 0x03, 0xa8, - 0xfe, 0xf7, 0xc8, 0xfc, 0x68, 0x46, 0xfe, 0xf7, 0xc5, 0xfc, 0x20, 0x46, - 0x0c, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, 0x13, 0x46, 0x06, 0xa9, 0xff, 0xf7, - 0x57, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xe8, 0xd1, 0x03, 0x22, 0x06, 0xa9, - 0x09, 0xa8, 0xfe, 0xf7, 0x99, 0xff, 0x04, 0x46, 0x00, 0x28, 0xe0, 0xd1, - 0x06, 0xf1, 0x04, 0x08, 0x41, 0x46, 0x09, 0xa8, 0xfe, 0xf7, 0x1c, 0xfa, - 0x00, 0x28, 0x2f, 0xda, 0x06, 0xf1, 0x10, 0x08, 0x00, 0x21, 0x40, 0x46, - 0xfe, 0xf7, 0x57, 0xfa, 0x00, 0x28, 0x3f, 0xf4, 0x3d, 0xaf, 0x07, 0xf1, - 0x18, 0x03, 0x06, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0x34, 0xfd, - 0x04, 0x46, 0x00, 0x28, 0xc5, 0xd1, 0x06, 0xab, 0x03, 0xa9, 0x30, 0x46, - 0x1a, 0x46, 0xff, 0xf7, 0x2b, 0xfd, 0x04, 0x46, 0x00, 0x28, 0xbc, 0xd1, - 0x43, 0x46, 0x03, 0xaa, 0x06, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x22, 0xfd, - 0x04, 0x46, 0x00, 0x28, 0xb3, 0xd1, 0x09, 0xaa, 0x06, 0xab, 0x30, 0x46, - 0x11, 0x46, 0xff, 0xf7, 0x41, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, - 0x17, 0xaf, 0xa8, 0xe7, 0x09, 0xa9, 0x42, 0x46, 0x08, 0x46, 0xfe, 0xf7, - 0x66, 0xff, 0x04, 0x46, 0x00, 0x28, 0xc1, 0xd0, 0x9f, 0xe7, 0x00, 0x00, - 0x2d, 0xe9, 0xf0, 0x43, 0x02, 0xf1, 0x18, 0x09, 0x97, 0xb0, 0x06, 0x46, - 0x0d, 0x46, 0x48, 0x46, 0x00, 0x21, 0x90, 0x46, 0x1f, 0x46, 0xfe, 0xf7, - 0x16, 0xfa, 0x40, 0xb9, 0x39, 0x46, 0x28, 0x46, 0xfe, 0xf7, 0xf2, 0xfd, - 0x04, 0x46, 0x20, 0x46, 0x17, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x3b, 0x6a, - 0x7b, 0xb1, 0x07, 0xf1, 0x18, 0x04, 0x00, 0x21, 0x20, 0x46, 0xfe, 0xf7, - 0x04, 0xfa, 0x08, 0xb9, 0x41, 0x46, 0xec, 0xe7, 0x01, 0x21, 0x20, 0x46, - 0xfe, 0xf7, 0xfd, 0xf9, 0x00, 0x28, 0x40, 0xf0, 0xff, 0x80, 0x00, 0x23, - 0x01, 0x22, 0x13, 0xa9, 0x30, 0x46, 0x15, 0x93, 0x12, 0x93, 0x0f, 0x93, - 0x0c, 0x93, 0x09, 0x93, 0x06, 0x93, 0x03, 0x93, 0xcd, 0xe9, 0x13, 0x23, - 0xcd, 0xe9, 0x10, 0x23, 0xcd, 0xe9, 0x0d, 0x23, 0xcd, 0xe9, 0x0a, 0x23, - 0xcd, 0xe9, 0x07, 0x23, 0xcd, 0xe9, 0x04, 0x23, 0xcd, 0xe9, 0x01, 0x23, - 0x4b, 0x46, 0x4a, 0x46, 0xff, 0xf7, 0xc4, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0x3a, 0xd1, 0x4b, 0x46, 0x13, 0xaa, 0x10, 0xa9, 0x30, 0x46, 0xff, 0xf7, - 0xbb, 0xfc, 0x04, 0x46, 0x90, 0xbb, 0x13, 0xaa, 0x3b, 0x46, 0x30, 0x46, - 0x11, 0x46, 0xff, 0xf7, 0xb3, 0xfc, 0x04, 0x46, 0x50, 0xbb, 0x10, 0xaa, - 0x07, 0xf1, 0x0c, 0x03, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xaa, 0xfc, - 0x04, 0x46, 0x08, 0xbb, 0x13, 0xaa, 0x43, 0x46, 0x30, 0x46, 0x11, 0x46, - 0xff, 0xf7, 0xda, 0xfa, 0x04, 0x46, 0xc8, 0xb9, 0x10, 0xaa, 0x08, 0xf1, - 0x0c, 0x07, 0x30, 0x46, 0x3b, 0x46, 0x11, 0x46, 0xff, 0xf7, 0xd0, 0xfa, - 0x04, 0x46, 0x78, 0xb9, 0x01, 0x46, 0x13, 0xa8, 0xfe, 0xf7, 0xab, 0xf9, - 0x20, 0xbb, 0x21, 0x46, 0x10, 0xa8, 0xfe, 0xf7, 0xa6, 0xf9, 0xd8, 0xb9, - 0x42, 0x46, 0x29, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x37, 0xfe, 0x04, 0x46, - 0x13, 0xa8, 0xfe, 0xf7, 0xe9, 0xfb, 0x10, 0xa8, 0xfe, 0xf7, 0xe6, 0xfb, - 0x0d, 0xa8, 0xfe, 0xf7, 0xe3, 0xfb, 0x0a, 0xa8, 0xfe, 0xf7, 0xe0, 0xfb, - 0x07, 0xa8, 0xfe, 0xf7, 0xdd, 0xfb, 0x04, 0xa8, 0xfe, 0xf7, 0xda, 0xfb, - 0x01, 0xa8, 0xfe, 0xf7, 0xd7, 0xfb, 0x78, 0xe7, 0x28, 0x46, 0xfe, 0xf7, - 0x11, 0xfb, 0xe4, 0xe7, 0x13, 0xab, 0x4a, 0x46, 0x01, 0xa9, 0x30, 0x46, - 0xff, 0xf7, 0x66, 0xfc, 0x04, 0x46, 0x00, 0x28, 0xdc, 0xd1, 0x13, 0xab, - 0x0d, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0x5d, 0xfc, 0x04, 0x46, - 0x00, 0x28, 0xd3, 0xd1, 0x13, 0xab, 0x0d, 0xaa, 0x0a, 0xa9, 0x30, 0x46, - 0xff, 0xf7, 0x54, 0xfc, 0x04, 0x46, 0x00, 0x28, 0xca, 0xd1, 0x0d, 0xaa, - 0x43, 0x46, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x4b, 0xfc, 0x04, 0x46, - 0x00, 0x28, 0xc1, 0xd1, 0x0d, 0xa9, 0x13, 0xa8, 0xfe, 0xf7, 0x12, 0xfd, - 0x04, 0x46, 0x00, 0x28, 0xba, 0xd1, 0x13, 0xa9, 0x30, 0x46, 0xef, 0xf7, - 0x18, 0xfb, 0x04, 0x46, 0x00, 0x28, 0xb3, 0xd1, 0x10, 0xab, 0x07, 0xa9, - 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0x34, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0xaa, 0xd1, 0x07, 0xaa, 0x13, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, - 0x63, 0xfa, 0x04, 0x46, 0x00, 0x28, 0xa1, 0xd1, 0x07, 0xaa, 0x0a, 0xab, - 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x5a, 0xfa, 0x04, 0x46, 0x00, 0x28, - 0x98, 0xd1, 0x0d, 0xaa, 0x07, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, - 0x51, 0xfa, 0x04, 0x46, 0x00, 0x28, 0x8f, 0xd1, 0x0d, 0xaa, 0x10, 0xab, - 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x10, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0x86, 0xd1, 0x0a, 0xaa, 0x3b, 0x46, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, - 0x07, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x7d, 0xaf, 0x0a, 0xab, - 0x0d, 0xaa, 0x04, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x35, 0xfa, 0x04, 0x46, - 0x00, 0x28, 0x7f, 0xf4, 0x73, 0xaf, 0x07, 0xa9, 0x28, 0x46, 0xfe, 0xf7, - 0xc3, 0xfc, 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x6b, 0xaf, 0x04, 0xa9, - 0x05, 0xf1, 0x0c, 0x00, 0xfe, 0xf7, 0xba, 0xfc, 0x04, 0x46, 0x00, 0x28, - 0x7f, 0xf4, 0x62, 0xaf, 0x01, 0xa9, 0x05, 0xf1, 0x18, 0x00, 0xfe, 0xf7, - 0xb1, 0xfc, 0x5a, 0xe7, 0x00, 0x4c, 0xe8, 0xe6, 0x80, 0xb0, 0xff, 0xff, - 0x2d, 0xe9, 0xf0, 0x43, 0x06, 0x46, 0xa3, 0xb0, 0x0f, 0x46, 0x10, 0x46, - 0x01, 0x21, 0x15, 0x46, 0xfe, 0xf7, 0xed, 0xf8, 0x00, 0x28, 0x40, 0xf3, - 0xc4, 0x81, 0x00, 0x23, 0x4f, 0xf0, 0x01, 0x09, 0x39, 0x46, 0x1c, 0xa8, - 0x18, 0x93, 0x15, 0x93, 0x12, 0x93, 0x0f, 0x93, 0x1b, 0x93, 0x0c, 0x93, - 0x09, 0x93, 0x06, 0x93, 0x03, 0x93, 0xcd, 0xe9, 0x16, 0x93, 0xcd, 0xe9, - 0x13, 0x93, 0xcd, 0xe9, 0x10, 0x93, 0xcd, 0xe9, 0x0d, 0x93, 0xcd, 0xe9, - 0x19, 0x93, 0xcd, 0xe9, 0x0a, 0x93, 0xcd, 0xe9, 0x07, 0x93, 0xcd, 0xe9, - 0x04, 0x93, 0xcd, 0xe9, 0x01, 0x93, 0xcd, 0xe9, 0x1c, 0x93, 0xcd, 0xe9, - 0x1e, 0x39, 0xcd, 0xe9, 0x20, 0x33, 0xfe, 0xf7, 0x77, 0xfc, 0x04, 0x46, - 0x00, 0x28, 0x5a, 0xd1, 0x29, 0x46, 0x1f, 0xa8, 0xfe, 0xf7, 0x70, 0xfc, - 0x04, 0x46, 0x00, 0x28, 0x53, 0xd1, 0x1c, 0xa8, 0xfb, 0xf7, 0x23, 0xf9, - 0x80, 0x46, 0x1f, 0xa8, 0xfb, 0xf7, 0x1f, 0xf9, 0x80, 0x45, 0x28, 0xbf, - 0x80, 0x46, 0x1c, 0xa8, 0x41, 0x46, 0xfe, 0xf7, 0x49, 0xfa, 0x04, 0x46, - 0x00, 0x28, 0x42, 0xd1, 0x41, 0x46, 0x1f, 0xa8, 0xfe, 0xf7, 0x42, 0xfa, - 0x04, 0x46, 0x00, 0x28, 0x3b, 0xd1, 0xcd, 0xf8, 0x7c, 0x90, 0xcd, 0xf8, - 0x70, 0x90, 0x00, 0x21, 0x1c, 0xa8, 0xfe, 0xf7, 0x98, 0xf8, 0x58, 0xb9, - 0x41, 0x46, 0x1f, 0xa8, 0xfe, 0xf7, 0x68, 0xf9, 0x04, 0x46, 0x60, 0xbb, - 0x1f, 0xa9, 0x19, 0xa8, 0xfe, 0xf7, 0x42, 0xfc, 0x04, 0x46, 0x26, 0xe0, - 0x1c, 0xa8, 0xfb, 0xf7, 0xf6, 0xf8, 0x01, 0x46, 0x1c, 0xa8, 0xfe, 0xf7, - 0x23, 0xfa, 0x04, 0x46, 0xe8, 0xb9, 0x1f, 0xa8, 0xfb, 0xf7, 0xed, 0xf8, - 0x01, 0x46, 0x1f, 0xa8, 0xfe, 0xf7, 0x1a, 0xfa, 0x04, 0x46, 0xa0, 0xb9, - 0x1f, 0xa9, 0x1c, 0xa8, 0xfe, 0xf7, 0x32, 0xf8, 0x00, 0x28, 0xc0, 0xf2, - 0x9c, 0x80, 0x1c, 0xa9, 0x1f, 0xaa, 0x08, 0x46, 0xfe, 0xf7, 0xab, 0xfd, - 0x04, 0x46, 0x30, 0xb9, 0x01, 0x21, 0x1c, 0xa8, 0xfe, 0xf7, 0x06, 0xfa, - 0x04, 0x46, 0x00, 0x28, 0xc7, 0xd0, 0x1c, 0xa8, 0xfe, 0xf7, 0xae, 0xfa, - 0x1f, 0xa8, 0xfe, 0xf7, 0xab, 0xfa, 0x00, 0x2c, 0x40, 0xf0, 0xa6, 0x80, - 0x01, 0x21, 0x19, 0xa8, 0xfe, 0xf7, 0x57, 0xf8, 0x00, 0x28, 0x40, 0xf0, - 0x2b, 0x81, 0x2a, 0x46, 0x39, 0x46, 0x16, 0xa8, 0xff, 0xf7, 0x8b, 0xf9, - 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x96, 0x80, 0x16, 0xa9, 0x13, 0xa8, - 0xfe, 0xf7, 0xfc, 0xfb, 0x04, 0x46, 0x00, 0x28, 0x40, 0xf0, 0x8e, 0x80, - 0x29, 0x46, 0x0a, 0xa8, 0xfe, 0xf7, 0xf4, 0xfb, 0x04, 0x46, 0x00, 0x28, - 0x40, 0xf0, 0x86, 0x80, 0x29, 0x46, 0x07, 0xa8, 0xfe, 0xf7, 0xec, 0xfb, - 0x04, 0x46, 0x00, 0x28, 0x7e, 0xd1, 0x01, 0x21, 0x10, 0xa8, 0xfe, 0xf7, - 0xa7, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x77, 0xd1, 0x01, 0x46, 0x0d, 0xa8, - 0xfe, 0xf7, 0xa0, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x70, 0xd1, 0x01, 0x46, - 0x04, 0xa8, 0xfe, 0xf7, 0x99, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x69, 0xd1, - 0x01, 0x21, 0x01, 0xa8, 0xfe, 0xf7, 0x92, 0xf9, 0x04, 0x46, 0x00, 0x28, - 0x62, 0xd1, 0x15, 0x9b, 0x1b, 0x68, 0xd8, 0x07, 0x49, 0xd5, 0x09, 0x9b, - 0x1b, 0x68, 0xdb, 0x07, 0x40, 0xf1, 0x8f, 0x80, 0x07, 0xa9, 0x13, 0xa8, - 0xfd, 0xf7, 0xc8, 0xff, 0x00, 0x28, 0xc0, 0xf2, 0xb8, 0x80, 0x13, 0xa9, - 0x07, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x75, 0xf8, 0x04, 0x46, 0x00, 0x28, - 0x4a, 0xd1, 0x10, 0xa9, 0x04, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x6d, 0xf8, - 0x04, 0x46, 0x00, 0x28, 0x42, 0xd1, 0x01, 0xaa, 0x0d, 0xa9, 0x08, 0x46, - 0xff, 0xf7, 0x65, 0xf8, 0x04, 0x46, 0x00, 0x28, 0x3a, 0xd1, 0x00, 0x21, - 0x13, 0xa8, 0xfd, 0xf7, 0xec, 0xff, 0x00, 0x28, 0xd1, 0xd1, 0x00, 0x21, - 0x04, 0xa8, 0xfd, 0xf7, 0xe6, 0xff, 0x00, 0x28, 0xc0, 0xf2, 0xa6, 0x80, - 0x29, 0x46, 0x04, 0xa8, 0xfd, 0xf7, 0x9c, 0xff, 0x00, 0x28, 0x80, 0xf2, - 0xa9, 0x80, 0x04, 0xa9, 0x30, 0x46, 0xfe, 0xf7, 0x8d, 0xfb, 0x04, 0x46, - 0x20, 0xe0, 0x1f, 0xa9, 0x1c, 0xaa, 0x08, 0x46, 0xfe, 0xf7, 0x0f, 0xfd, - 0x04, 0x46, 0x00, 0x28, 0x7f, 0xf4, 0x69, 0xaf, 0x01, 0x21, 0x1f, 0xa8, - 0x60, 0xe7, 0x01, 0x21, 0x13, 0xa8, 0xfe, 0xf7, 0x65, 0xf9, 0x04, 0x46, - 0x70, 0xb9, 0x12, 0x9b, 0x1b, 0x68, 0xdf, 0x07, 0x29, 0xd4, 0x0f, 0x9b, - 0x1b, 0x68, 0xdc, 0x07, 0x25, 0xd4, 0x01, 0x21, 0x10, 0xa8, 0xfe, 0xf7, - 0x57, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x2f, 0xd0, 0x16, 0xa8, 0xfe, 0xf7, - 0xff, 0xf9, 0x13, 0xa8, 0xfe, 0xf7, 0xfc, 0xf9, 0x10, 0xa8, 0xfe, 0xf7, - 0xf9, 0xf9, 0x0d, 0xa8, 0xfe, 0xf7, 0xf6, 0xf9, 0x19, 0xa8, 0xfe, 0xf7, - 0xf3, 0xf9, 0x0a, 0xa8, 0xfe, 0xf7, 0xf0, 0xf9, 0x07, 0xa8, 0xfe, 0xf7, - 0xed, 0xf9, 0x04, 0xa8, 0xfe, 0xf7, 0xea, 0xf9, 0x01, 0xa8, 0xfe, 0xf7, - 0xe7, 0xf9, 0x20, 0x46, 0x23, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x10, 0xa9, - 0x0a, 0xaa, 0x08, 0x46, 0xff, 0xf7, 0x7e, 0xf8, 0x04, 0x46, 0x00, 0x28, - 0xd8, 0xd1, 0x0d, 0xa9, 0x16, 0xaa, 0x08, 0x46, 0xfe, 0xf7, 0xfb, 0xff, - 0x04, 0x46, 0x00, 0x28, 0xc9, 0xd0, 0xcf, 0xe7, 0x01, 0x21, 0x0d, 0xa8, - 0xfe, 0xf7, 0x20, 0xf9, 0x64, 0xe7, 0x01, 0x21, 0x07, 0xa8, 0xfe, 0xf7, - 0x1b, 0xf9, 0x04, 0x46, 0x00, 0x28, 0xc3, 0xd1, 0x06, 0x9b, 0x1b, 0x68, - 0xd9, 0x07, 0x13, 0xd4, 0x03, 0x9b, 0x1b, 0x68, 0xda, 0x07, 0x0f, 0xd4, - 0x01, 0x21, 0x04, 0xa8, 0xfe, 0xf7, 0x0c, 0xf9, 0x04, 0x46, 0x00, 0x28, - 0xb4, 0xd1, 0x01, 0x21, 0x01, 0xa8, 0xfe, 0xf7, 0x05, 0xf9, 0x04, 0x46, - 0x00, 0x28, 0x3f, 0xf4, 0x4e, 0xaf, 0xab, 0xe7, 0x04, 0xa9, 0x0a, 0xaa, - 0x08, 0x46, 0xff, 0xf7, 0x49, 0xf8, 0x04, 0x46, 0x00, 0x28, 0xa3, 0xd1, - 0x01, 0xa9, 0x16, 0xaa, 0x08, 0x46, 0xfe, 0xf7, 0xc6, 0xff, 0x04, 0x46, - 0x00, 0x28, 0xdf, 0xd0, 0x9a, 0xe7, 0x07, 0xa9, 0x13, 0xaa, 0x08, 0x46, - 0xfe, 0xf7, 0xbd, 0xff, 0x04, 0x46, 0x00, 0x28, 0x92, 0xd1, 0x04, 0xa9, - 0x10, 0xaa, 0x08, 0x46, 0xfe, 0xf7, 0xb5, 0xff, 0x04, 0x46, 0x00, 0x28, - 0x8a, 0xd1, 0x0d, 0xaa, 0x01, 0xa9, 0x46, 0xe7, 0x04, 0xa9, 0x2a, 0x46, - 0x08, 0x46, 0xff, 0xf7, 0x25, 0xf8, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, - 0x4a, 0xaf, 0x7d, 0xe7, 0x04, 0xa9, 0x2a, 0x46, 0x08, 0x46, 0xfe, 0xf7, - 0xa0, 0xff, 0x04, 0x46, 0x00, 0x28, 0x3f, 0xf4, 0x47, 0xaf, 0x73, 0xe7, - 0x6f, 0xf0, 0x0d, 0x04, 0x70, 0xe7, 0x6f, 0xf0, 0x03, 0x04, 0x88, 0xe7, - 0x2d, 0xe9, 0xf0, 0x41, 0x01, 0xf1, 0x18, 0x05, 0x88, 0xb0, 0x07, 0x46, - 0x88, 0x46, 0x28, 0x46, 0x00, 0x21, 0xfd, 0xf7, 0x18, 0xff, 0x04, 0x46, - 0x00, 0x28, 0x3b, 0xd0, 0x00, 0x23, 0x01, 0x26, 0x3a, 0x1d, 0x29, 0x46, - 0x05, 0xa8, 0x07, 0x93, 0x04, 0x93, 0xcd, 0xe9, 0x05, 0x63, 0xcd, 0xe9, - 0x02, 0x63, 0xff, 0xf7, 0x11, 0xfe, 0x04, 0x46, 0x30, 0xbb, 0x05, 0xab, - 0x02, 0xa9, 0x38, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0xe7, 0xf9, 0x04, 0x46, - 0xf0, 0xb9, 0x02, 0xab, 0x42, 0x46, 0x41, 0x46, 0x38, 0x46, 0xff, 0xf7, - 0xdf, 0xf9, 0x04, 0x46, 0xb0, 0xb9, 0x08, 0xf1, 0x0c, 0x02, 0x02, 0xab, - 0x38, 0x46, 0x11, 0x46, 0x01, 0x92, 0xff, 0xf7, 0xd5, 0xf9, 0x04, 0x46, - 0x60, 0xb9, 0x01, 0x9a, 0x05, 0xab, 0x38, 0x46, 0x11, 0x46, 0xff, 0xf7, - 0xcd, 0xf9, 0x04, 0x46, 0x20, 0xb9, 0x31, 0x46, 0x28, 0x46, 0xfe, 0xf7, - 0x57, 0xf8, 0x04, 0x46, 0x05, 0xa8, 0xfe, 0xf7, 0x29, 0xf9, 0x02, 0xa8, - 0xfe, 0xf7, 0x26, 0xf9, 0x20, 0x46, 0x08, 0xb0, 0xbd, 0xe8, 0xf0, 0x81, - 0x01, 0x2a, 0x2d, 0xe9, 0xf0, 0x4f, 0x06, 0x46, 0x8d, 0xb0, 0x0c, 0x46, - 0x15, 0x46, 0x07, 0xd8, 0x09, 0x68, 0xff, 0xf7, 0xa7, 0xff, 0x82, 0x46, - 0x50, 0x46, 0x0d, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x0c, 0x21, 0x10, 0x46, - 0x08, 0xf0, 0x10, 0xfe, 0x07, 0x46, 0x00, 0x28, 0x00, 0xf0, 0xb7, 0x80, - 0x4f, 0xf0, 0x0c, 0x08, 0x81, 0x46, 0x02, 0x46, 0x01, 0x21, 0x08, 0xfb, - 0x05, 0xf8, 0x00, 0xeb, 0x08, 0x03, 0x00, 0x93, 0x00, 0x23, 0x93, 0x60, - 0x00, 0x98, 0xc2, 0xe9, 0x00, 0x13, 0x0c, 0x32, 0x90, 0x42, 0xf8, 0xd1, - 0x38, 0x46, 0x0b, 0x93, 0x08, 0x93, 0x05, 0x93, 0xcd, 0xe9, 0x09, 0x13, - 0xcd, 0xe9, 0x06, 0x13, 0xcd, 0xe9, 0x03, 0x13, 0x21, 0x68, 0x18, 0x31, - 0xfe, 0xf7, 0x52, 0xfa, 0x82, 0x46, 0x90, 0xbb, 0x04, 0xf1, 0x04, 0x0b, - 0x07, 0xf1, 0x0c, 0x01, 0x04, 0xeb, 0x85, 0x04, 0x5b, 0xf8, 0x04, 0x3b, - 0xa1, 0xf1, 0x0c, 0x02, 0x30, 0x46, 0x01, 0x91, 0x18, 0x33, 0xff, 0xf7, - 0x73, 0xf9, 0x82, 0x46, 0x08, 0xbb, 0x01, 0x99, 0x5c, 0x45, 0x01, 0xf1, - 0x0c, 0x01, 0xef, 0xd1, 0xa8, 0xf1, 0x0c, 0x01, 0x32, 0x1d, 0x09, 0xa8, - 0x39, 0x44, 0xff, 0xf7, 0x87, 0xfd, 0x82, 0x46, 0x98, 0xb9, 0x01, 0x3d, - 0x4f, 0xf0, 0x0c, 0x08, 0xa7, 0xf1, 0x0c, 0x0b, 0x15, 0xbb, 0x09, 0xa9, - 0x06, 0xa8, 0xfe, 0xf7, 0x27, 0xfa, 0x82, 0x46, 0x38, 0xb9, 0x06, 0xab, - 0x03, 0xa9, 0x30, 0x46, 0x1a, 0x46, 0xff, 0xf7, 0x51, 0xf9, 0x82, 0x46, - 0x38, 0xb3, 0x09, 0xa8, 0xfe, 0xf7, 0xb2, 0xf8, 0x06, 0xa8, 0xfe, 0xf7, - 0xaf, 0xf8, 0x03, 0xa8, 0xfe, 0xf7, 0xac, 0xf8, 0x48, 0x46, 0x09, 0xf1, - 0x0c, 0x09, 0xfe, 0xf7, 0xa7, 0xf8, 0x00, 0x9b, 0x4b, 0x45, 0xf7, 0xd1, - 0x38, 0x46, 0x07, 0xf0, 0x97, 0xfa, 0x89, 0xe7, 0x08, 0xfb, 0x05, 0xb3, - 0x09, 0xaa, 0x06, 0xa9, 0x30, 0x46, 0xff, 0xf7, 0x33, 0xf9, 0x82, 0x46, - 0x00, 0x28, 0xe0, 0xd1, 0x54, 0xf8, 0x04, 0x3c, 0x09, 0xaa, 0x30, 0x46, - 0x18, 0x33, 0x11, 0x46, 0xff, 0xf7, 0x28, 0xf9, 0xcd, 0xe7, 0x54, 0xf8, - 0x04, 0x2c, 0x03, 0xab, 0x30, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x20, 0xf9, - 0x82, 0x46, 0x00, 0x28, 0xcd, 0xd1, 0x54, 0xf8, 0x04, 0x2c, 0x03, 0xab, - 0x30, 0x46, 0x0c, 0x32, 0x11, 0x46, 0xff, 0xf7, 0x15, 0xf9, 0x82, 0x46, - 0x00, 0x28, 0xc2, 0xd1, 0x54, 0xf8, 0x04, 0x2c, 0x06, 0xab, 0x30, 0x46, - 0x0c, 0x32, 0x11, 0x46, 0xff, 0xf7, 0x0a, 0xf9, 0x82, 0x46, 0x00, 0x28, - 0xb7, 0xd1, 0xb1, 0x68, 0x54, 0xf8, 0x04, 0x0c, 0xfd, 0xf7, 0xfc, 0xfb, - 0x82, 0x46, 0x00, 0x28, 0xaf, 0xd1, 0x54, 0xf8, 0x04, 0x0c, 0xb1, 0x68, - 0x0c, 0x30, 0xfd, 0xf7, 0xf3, 0xfb, 0x82, 0x46, 0x00, 0x28, 0xa6, 0xd1, - 0x54, 0xf8, 0x04, 0x0d, 0x18, 0x30, 0xfe, 0xf7, 0x57, 0xf8, 0x00, 0x2d, - 0x9f, 0xd0, 0x01, 0x3d, 0x8e, 0xe7, 0xdf, 0xf8, 0x04, 0xa0, 0x39, 0xe7, - 0x80, 0xb2, 0xff, 0xff, 0x70, 0xb4, 0x04, 0x68, 0x0e, 0x1b, 0x00, 0x2e, - 0x07, 0xdd, 0x26, 0x78, 0x9e, 0x42, 0x08, 0xd1, 0x01, 0x34, 0x04, 0x60, - 0x70, 0xbc, 0xfa, 0xf7, 0x7c, 0xbe, 0x6f, 0xf0, 0x5f, 0x00, 0x70, 0xbc, - 0x70, 0x47, 0x6f, 0xf0, 0x61, 0x00, 0xfa, 0xe7, 0x2d, 0xe9, 0xf7, 0x43, - 0x90, 0x46, 0x1f, 0x46, 0x01, 0xaa, 0x30, 0x23, 0x05, 0x46, 0x89, 0x46, - 0xff, 0xf7, 0xe2, 0xff, 0x04, 0x46, 0xf8, 0xb9, 0x2e, 0x68, 0xa9, 0xeb, - 0x06, 0x09, 0xb9, 0xf1, 0x00, 0x0f, 0x35, 0xdd, 0x01, 0x99, 0x42, 0x46, - 0x33, 0x78, 0x28, 0x46, 0x0e, 0x44, 0x42, 0xf8, 0x04, 0x3b, 0x06, 0x23, - 0x31, 0x46, 0xff, 0xf7, 0xcf, 0xff, 0x04, 0x46, 0x60, 0xb9, 0x2a, 0x68, - 0xd8, 0xf8, 0x04, 0x10, 0xc8, 0xf8, 0x08, 0x20, 0x53, 0x18, 0xb3, 0x42, - 0x2b, 0x60, 0x07, 0xd1, 0x0c, 0x21, 0x38, 0x46, 0xfc, 0xf7, 0xfe, 0xfe, - 0x20, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0x51, 0x5c, 0x01, 0x33, - 0x3a, 0x46, 0x28, 0x46, 0x42, 0xf8, 0x04, 0x1b, 0x31, 0x46, 0x2b, 0x60, - 0xfa, 0xf7, 0x3b, 0xfe, 0x04, 0x46, 0x00, 0x28, 0xee, 0xd1, 0x2b, 0x68, - 0x7a, 0x68, 0xbb, 0x60, 0x13, 0x44, 0xb3, 0x42, 0x2b, 0x60, 0x0c, 0xbf, - 0x04, 0x46, 0x6f, 0xf0, 0x65, 0x04, 0xe3, 0xe7, 0x6f, 0xf0, 0x5f, 0x04, - 0xe0, 0xe7, 0x37, 0xb5, 0x02, 0x23, 0x15, 0x46, 0x01, 0xaa, 0x04, 0x46, - 0xff, 0xf7, 0x9a, 0xff, 0x40, 0xb9, 0x01, 0x9a, 0x28, 0x46, 0x21, 0x68, - 0xfe, 0xf7, 0x6e, 0xf8, 0x23, 0x68, 0x01, 0x9a, 0x13, 0x44, 0x23, 0x60, - 0x03, 0xb0, 0x30, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, 0x97, 0xb0, 0x02, 0x93, - 0x13, 0x68, 0x20, 0x9c, 0x0f, 0x2b, 0x01, 0x93, 0xcd, 0xe9, 0x0a, 0x02, - 0x00, 0xf2, 0xf1, 0x81, 0x21, 0x9b, 0xb5, 0x4d, 0x0b, 0x44, 0xb5, 0x4e, - 0xb5, 0x4f, 0x0c, 0x93, 0x21, 0x9b, 0x0c, 0x9a, 0x93, 0x42, 0x07, 0xd1, - 0x0b, 0x9b, 0x00, 0x20, 0x1a, 0x46, 0x01, 0x9b, 0x13, 0x60, 0x17, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x01, 0x9b, 0x83, 0xb1, 0x01, 0x9b, 0x21, 0x99, - 0xe3, 0x5c, 0x11, 0xf8, 0x01, 0x2b, 0x53, 0x40, 0x22, 0x9a, 0x21, 0x91, - 0x02, 0xf8, 0x01, 0x3b, 0x01, 0x9b, 0x22, 0x92, 0x01, 0x33, 0x03, 0xf0, - 0x0f, 0x03, 0x01, 0x93, 0xe0, 0xe7, 0x0a, 0x9b, 0xdf, 0xf8, 0x98, 0xc2, - 0x5a, 0x68, 0x02, 0x9b, 0x19, 0x68, 0x0e, 0x91, 0x13, 0x68, 0x4b, 0x40, - 0x0e, 0x93, 0x02, 0x9b, 0x59, 0x68, 0x0f, 0x91, 0x53, 0x68, 0x4b, 0x40, - 0x0f, 0x93, 0x02, 0x9b, 0x99, 0x68, 0x10, 0x91, 0x93, 0x68, 0x4b, 0x40, - 0x10, 0x93, 0x02, 0x9b, 0xd9, 0x68, 0x02, 0xf1, 0x10, 0x03, 0x30, 0x32, - 0x11, 0x91, 0x0d, 0x93, 0x52, 0xf8, 0x24, 0x3c, 0x4b, 0x40, 0x11, 0x93, - 0x0a, 0x9b, 0x1b, 0x68, 0x5b, 0x10, 0x04, 0x93, 0x01, 0x3b, 0x05, 0x93, - 0x03, 0x93, 0x20, 0x32, 0xdd, 0xe9, 0x0e, 0x9a, 0xdd, 0xe9, 0x10, 0x83, - 0x5f, 0xfa, 0x89, 0xf0, 0x19, 0x0e, 0x55, 0xf8, 0x20, 0x00, 0x5f, 0xfa, - 0x83, 0xfe, 0x56, 0xf8, 0x21, 0x10, 0x5f, 0xfa, 0x88, 0xfb, 0x55, 0xf8, - 0x2e, 0xe0, 0x48, 0x40, 0xca, 0xf3, 0x07, 0x21, 0x55, 0xf8, 0x2b, 0xb0, - 0x57, 0xf8, 0x21, 0x10, 0x48, 0x40, 0xc8, 0xf3, 0x07, 0x41, 0x5c, 0xf8, - 0x21, 0x10, 0x48, 0x40, 0x52, 0xf8, 0x40, 0x1c, 0x41, 0x40, 0xc8, 0xb2, - 0x06, 0x90, 0x08, 0x0e, 0x07, 0x90, 0xc1, 0xf3, 0x07, 0x40, 0x08, 0x90, - 0xc1, 0xf3, 0x07, 0x20, 0x09, 0x90, 0x4f, 0xea, 0x18, 0x60, 0xc8, 0xf3, - 0x07, 0x28, 0x56, 0xf8, 0x20, 0x00, 0x8e, 0xea, 0x00, 0x0e, 0xc9, 0xf3, - 0x07, 0x20, 0x57, 0xf8, 0x20, 0x00, 0x8e, 0xea, 0x00, 0x0e, 0xca, 0xf3, - 0x07, 0x40, 0x5c, 0xf8, 0x20, 0x00, 0x8e, 0xea, 0x00, 0x0e, 0x4f, 0xea, - 0x1a, 0x60, 0x5f, 0xfa, 0x8a, 0xfa, 0x56, 0xf8, 0x20, 0x00, 0x55, 0xf8, - 0x2a, 0xa0, 0x8b, 0xea, 0x00, 0x00, 0xc3, 0xf3, 0x07, 0x2b, 0xc3, 0xf3, - 0x07, 0x43, 0x57, 0xf8, 0x2b, 0xb0, 0x5c, 0xf8, 0x23, 0x30, 0x80, 0xea, - 0x0b, 0x00, 0xc9, 0xf3, 0x07, 0x4b, 0x4f, 0xea, 0x19, 0x69, 0x5c, 0xf8, - 0x2b, 0xb0, 0x56, 0xf8, 0x29, 0x90, 0x80, 0xea, 0x0b, 0x00, 0x8a, 0xea, - 0x09, 0x0a, 0x57, 0xf8, 0x28, 0x90, 0x8a, 0xea, 0x09, 0x0a, 0x8a, 0xea, - 0x03, 0x0a, 0x03, 0x9b, 0x00, 0x2b, 0x00, 0xf3, 0xbf, 0x80, 0x05, 0x9b, - 0x12, 0x91, 0x4f, 0xea, 0x43, 0x1c, 0x04, 0x9b, 0x00, 0x2b, 0x0d, 0x9b, - 0xd8, 0xbf, 0x4f, 0xf0, 0x00, 0x0c, 0x63, 0x44, 0x5a, 0x68, 0x9c, 0x46, - 0x8a, 0xea, 0x02, 0x0a, 0xcd, 0xf8, 0x4c, 0xa0, 0x99, 0x68, 0x41, 0x40, - 0x53, 0x48, 0x14, 0x91, 0xda, 0x68, 0x8e, 0xea, 0x02, 0x0e, 0x4f, 0xea, - 0x1e, 0x62, 0xcd, 0xf8, 0x54, 0xe0, 0x10, 0xf8, 0x02, 0x90, 0x06, 0x9a, - 0x10, 0xf8, 0x02, 0x80, 0x1a, 0x69, 0x88, 0xea, 0x02, 0x02, 0x82, 0xea, - 0x09, 0x68, 0xca, 0xf3, 0x07, 0x22, 0x82, 0x5c, 0x88, 0xea, 0x02, 0x28, - 0xc1, 0xf3, 0x07, 0x42, 0x82, 0x5c, 0x88, 0xea, 0x02, 0x48, 0x07, 0x9a, - 0x10, 0xf8, 0x02, 0xb0, 0x5a, 0x69, 0xcd, 0xf8, 0x38, 0x80, 0x82, 0xea, - 0x0b, 0x6b, 0x5f, 0xfa, 0x8a, 0xf2, 0x82, 0x5c, 0x8b, 0xea, 0x02, 0x0b, - 0xc1, 0xf3, 0x07, 0x22, 0x82, 0x5c, 0x8b, 0xea, 0x02, 0x2b, 0xce, 0xf3, - 0x07, 0x42, 0x82, 0x5c, 0x8b, 0xea, 0x02, 0x4b, 0x08, 0x9a, 0x10, 0xf8, - 0x02, 0x90, 0x9a, 0x69, 0x09, 0x9b, 0x82, 0xea, 0x09, 0x42, 0xcd, 0xf8, - 0x3c, 0xb0, 0x5f, 0xfa, 0x81, 0xf9, 0x09, 0x0e, 0x10, 0xf8, 0x09, 0x90, - 0x82, 0xea, 0x09, 0x02, 0x4f, 0xea, 0x1a, 0x69, 0x10, 0xf8, 0x09, 0x90, - 0x82, 0xea, 0x09, 0x62, 0xce, 0xf3, 0x07, 0x29, 0x5f, 0xfa, 0x8e, 0xfe, - 0x10, 0xf8, 0x09, 0x90, 0x82, 0xea, 0x09, 0x22, 0x10, 0x92, 0x10, 0xf8, - 0x03, 0x90, 0xca, 0xf3, 0x07, 0x43, 0xdc, 0xf8, 0x1c, 0xc0, 0xc3, 0x5c, - 0x8c, 0xea, 0x09, 0x29, 0x10, 0xf8, 0x0e, 0xc0, 0x89, 0xea, 0x0c, 0x09, - 0x10, 0xf8, 0x01, 0xc0, 0x4f, 0xea, 0x18, 0x21, 0x22, 0x72, 0x89, 0xea, - 0x0c, 0x69, 0x84, 0xf8, 0x00, 0x80, 0x61, 0x70, 0x4f, 0xea, 0x18, 0x41, - 0x89, 0xea, 0x03, 0x43, 0x84, 0xf8, 0x04, 0xb0, 0xa1, 0x70, 0x4f, 0xea, - 0x1b, 0x21, 0x4f, 0xea, 0x13, 0x69, 0x23, 0x73, 0x61, 0x71, 0x4f, 0xea, - 0x1b, 0x41, 0x4f, 0xea, 0x18, 0x68, 0x0e, 0xa8, 0xa1, 0x71, 0x11, 0x0a, - 0x4f, 0xea, 0x1b, 0x6b, 0x84, 0xf8, 0x03, 0x80, 0x61, 0x72, 0x11, 0x0c, - 0x12, 0x0e, 0x84, 0xf8, 0x07, 0xb0, 0xa1, 0x72, 0x20, 0x21, 0xe2, 0x72, - 0x1a, 0x0a, 0x84, 0xf8, 0x0f, 0x90, 0x62, 0x73, 0x1a, 0x0c, 0x11, 0x93, - 0xa2, 0x73, 0xfc, 0xf7, 0x63, 0xfd, 0x02, 0x9b, 0x03, 0xf1, 0x10, 0x02, - 0x12, 0xf8, 0x01, 0x3d, 0x01, 0x33, 0xdb, 0xb2, 0x13, 0x70, 0x00, 0x2b, - 0x7f, 0xf4, 0xac, 0xae, 0x02, 0x9b, 0x9a, 0x42, 0xf4, 0xd1, 0xa7, 0xe6, - 0x64, 0x74, 0x00, 0x24, 0x64, 0x80, 0x00, 0x24, 0x64, 0x78, 0x00, 0x24, - 0x1c, 0x04, 0x00, 0x24, 0x64, 0x7c, 0x00, 0x24, 0x12, 0x91, 0x52, 0xf8, - 0x3c, 0x3c, 0x8a, 0xea, 0x03, 0x09, 0x06, 0x9b, 0xcd, 0xf8, 0x4c, 0x90, - 0x52, 0xf8, 0x38, 0x1c, 0x41, 0x40, 0x14, 0x91, 0x52, 0xf8, 0x34, 0x0c, - 0x8e, 0xea, 0x00, 0x00, 0x55, 0xf8, 0x23, 0xe0, 0x15, 0x90, 0x4f, 0xea, - 0x10, 0x68, 0x52, 0xf8, 0x30, 0x3c, 0x56, 0xf8, 0x28, 0x80, 0x83, 0xea, - 0x0e, 0x0e, 0x07, 0x9b, 0x8e, 0xea, 0x08, 0x0e, 0xc9, 0xf3, 0x07, 0x28, - 0x57, 0xf8, 0x28, 0x80, 0x8e, 0xea, 0x08, 0x0e, 0xc1, 0xf3, 0x07, 0x48, - 0x5c, 0xf8, 0x28, 0x80, 0x8e, 0xea, 0x08, 0x0e, 0x5f, 0xfa, 0x89, 0xf8, - 0xcd, 0xf8, 0x38, 0xe0, 0x56, 0xf8, 0x23, 0xe0, 0x52, 0xf8, 0x2c, 0x3c, - 0x55, 0xf8, 0x28, 0x80, 0x83, 0xea, 0x0e, 0x0e, 0x08, 0x9b, 0x8e, 0xea, - 0x08, 0x0e, 0xc1, 0xf3, 0x07, 0x28, 0x57, 0xf8, 0x28, 0x80, 0x8e, 0xea, - 0x08, 0x0e, 0xc0, 0xf3, 0x07, 0x48, 0x5c, 0xf8, 0x28, 0x80, 0x8e, 0xea, - 0x08, 0x0e, 0x5c, 0xf8, 0x23, 0x80, 0xcd, 0xf8, 0x3c, 0xe0, 0x5f, 0xfa, - 0x81, 0xfe, 0x52, 0xf8, 0x28, 0x3c, 0x09, 0x0e, 0x55, 0xf8, 0x2e, 0xe0, - 0x8e, 0xea, 0x08, 0x0e, 0x4f, 0xea, 0x19, 0x68, 0x8e, 0xea, 0x03, 0x0e, - 0x56, 0xf8, 0x28, 0x80, 0x09, 0x9b, 0x8e, 0xea, 0x08, 0x0e, 0xc0, 0xf3, - 0x07, 0x28, 0xc0, 0xb2, 0x57, 0xf8, 0x28, 0x80, 0x8e, 0xea, 0x08, 0x0e, - 0xcd, 0xf8, 0x40, 0xe0, 0x55, 0xf8, 0x20, 0xe0, 0x57, 0xf8, 0x23, 0x00, - 0xc9, 0xf3, 0x07, 0x43, 0x8e, 0xea, 0x00, 0x0e, 0x52, 0xf8, 0x24, 0x0c, - 0x56, 0xf8, 0x21, 0x10, 0x8e, 0xea, 0x00, 0x00, 0x48, 0x40, 0x5c, 0xf8, - 0x23, 0x10, 0x03, 0x9b, 0x48, 0x40, 0x01, 0x3b, 0x11, 0x90, 0x03, 0x93, - 0x5b, 0xe6, 0x6f, 0xf0, 0x20, 0x00, 0x1a, 0xe6, 0xf0, 0xb5, 0xad, 0xf6, - 0x04, 0x0d, 0x01, 0x23, 0x00, 0x22, 0x0d, 0xf5, 0x80, 0x60, 0x05, 0x46, - 0x13, 0xf0, 0x80, 0x01, 0x4d, 0xf8, 0x23, 0x20, 0x40, 0xf8, 0x04, 0x3b, - 0x02, 0xf1, 0x01, 0x02, 0x18, 0xbf, 0x1b, 0x21, 0x83, 0xea, 0x43, 0x03, - 0xb2, 0xf5, 0x80, 0x7f, 0x83, 0xea, 0x01, 0x03, 0xdb, 0xb2, 0xed, 0xd1, - 0x36, 0x48, 0x01, 0x23, 0x00, 0x22, 0x13, 0xf0, 0x80, 0x01, 0x02, 0xf1, - 0x01, 0x02, 0x40, 0xf8, 0x04, 0x3b, 0x18, 0xbf, 0x1b, 0x21, 0x0a, 0x2a, - 0x81, 0xea, 0x43, 0x03, 0xdb, 0xb2, 0xf2, 0xd1, 0x63, 0x23, 0x2f, 0x4c, - 0x2f, 0x48, 0x01, 0x21, 0x23, 0x70, 0x00, 0x23, 0x80, 0xf8, 0x63, 0x30, - 0x5d, 0xf8, 0x21, 0x30, 0xc3, 0xf1, 0xff, 0x03, 0x55, 0xf8, 0x23, 0xe0, - 0x4f, 0xea, 0xee, 0x12, 0x42, 0xea, 0x4e, 0x02, 0x5f, 0xfa, 0x82, 0xfc, - 0xc2, 0xf3, 0xc0, 0x12, 0x42, 0xea, 0x4c, 0x02, 0xd7, 0xb2, 0xc2, 0xf3, - 0xc0, 0x12, 0x42, 0xea, 0x47, 0x02, 0xd6, 0xb2, 0xc2, 0xf3, 0xc0, 0x12, - 0x42, 0xea, 0x46, 0x02, 0xd3, 0xb2, 0x83, 0xea, 0x0e, 0x03, 0x83, 0xea, - 0x0c, 0x03, 0x7b, 0x40, 0x73, 0x40, 0x83, 0xf0, 0x63, 0x03, 0x63, 0x54, - 0xc1, 0x54, 0x01, 0x31, 0xb1, 0xf5, 0x80, 0x7f, 0xd6, 0xd1, 0xdf, 0xf8, - 0x5c, 0xc0, 0x18, 0x4f, 0x18, 0x4e, 0x19, 0x4d, 0x19, 0x4c, 0x1c, 0xf8, - 0x01, 0x2b, 0x12, 0xf0, 0x80, 0x0f, 0x4f, 0xea, 0x02, 0x43, 0x14, 0xbf, - 0x1b, 0x20, 0x00, 0x20, 0x43, 0xea, 0x02, 0x23, 0x01, 0x39, 0x80, 0xea, - 0x42, 0x00, 0xc0, 0xb2, 0x82, 0xea, 0x00, 0x02, 0x83, 0xea, 0x00, 0x03, - 0x43, 0xea, 0x02, 0x63, 0x4f, 0xea, 0x33, 0x62, 0x47, 0xf8, 0x04, 0x3b, - 0x46, 0xf8, 0x04, 0x2b, 0x4f, 0xea, 0x33, 0x42, 0x4f, 0xea, 0x33, 0x23, - 0x45, 0xf8, 0x04, 0x2b, 0x44, 0xf8, 0x04, 0x3b, 0xdb, 0xd1, 0x0d, 0xf6, - 0x04, 0x0d, 0xf0, 0xbd, 0x1c, 0x05, 0x00, 0x24, 0x1c, 0x04, 0x00, 0x24, - 0x64, 0x84, 0x00, 0x24, 0x64, 0x74, 0x00, 0x24, 0x64, 0x78, 0x00, 0x24, - 0x64, 0x7c, 0x00, 0x24, 0x64, 0x80, 0x00, 0x24, 0x10, 0xb5, 0xfb, 0xf7, - 0xc7, 0xf9, 0x01, 0x23, 0x80, 0xf8, 0x3f, 0x30, 0x83, 0x6b, 0x1b, 0xb1, - 0x06, 0x4b, 0x4f, 0xf0, 0x80, 0x62, 0x5a, 0x60, 0xd0, 0xe9, 0x0a, 0x23, - 0xbd, 0xe8, 0x10, 0x40, 0x12, 0xf5, 0x7a, 0x72, 0x43, 0xf1, 0x00, 0x03, - 0xfa, 0xf7, 0xef, 0xbf, 0x00, 0xed, 0x00, 0xe0, 0x08, 0xb5, 0xef, 0xf3, - 0x05, 0x83, 0x53, 0xb1, 0x12, 0x4b, 0x1b, 0x68, 0x98, 0x69, 0xfb, 0xf7, - 0x57, 0xf9, 0x4f, 0xf4, 0x7a, 0x72, 0x00, 0x23, 0x08, 0xf0, 0xa6, 0xfc, - 0x08, 0xbd, 0xfa, 0xf7, 0x1b, 0xff, 0xef, 0xf3, 0x05, 0x83, 0x6b, 0xb1, - 0x0b, 0x4b, 0xd8, 0x68, 0x0b, 0x4b, 0x1a, 0x68, 0x18, 0x60, 0x82, 0x42, - 0x81, 0xbf, 0x0a, 0x49, 0x0a, 0x68, 0x01, 0x32, 0x0a, 0x60, 0xfa, 0xf7, - 0xf7, 0xfe, 0xeb, 0xe7, 0x03, 0xf0, 0xce, 0xf9, 0x00, 0x28, 0xed, 0xd1, - 0xdf, 0xf8, 0x14, 0xc0, 0x00, 0xdf, 0xeb, 0xe7, 0x88, 0x86, 0x00, 0x24, - 0x1c, 0x01, 0x00, 0x24, 0x94, 0x86, 0x00, 0x24, 0x90, 0x86, 0x00, 0x24, - 0x25, 0x55, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, 0x85, 0xb0, 0xef, 0xf3, - 0x05, 0x83, 0x00, 0x2b, 0x42, 0xd0, 0x00, 0x20, 0xdf, 0xf8, 0x48, 0xa1, - 0xda, 0xf8, 0x00, 0x40, 0xfa, 0xf7, 0xea, 0xfe, 0xd4, 0xe9, 0x0c, 0x89, - 0xfa, 0xf7, 0xd2, 0xfe, 0xa3, 0x6b, 0xb8, 0xeb, 0x03, 0x08, 0x69, 0xeb, - 0xe3, 0x79, 0x18, 0xeb, 0x00, 0x04, 0x49, 0xf1, 0x00, 0x05, 0xfb, 0xf7, - 0x61, 0xf9, 0x4f, 0xf4, 0x7a, 0x73, 0xa4, 0xfb, 0x03, 0x67, 0x03, 0xfb, - 0x05, 0x77, 0x00, 0x20, 0xfa, 0xf7, 0x5a, 0xfb, 0x00, 0x28, 0x55, 0xd1, - 0xda, 0xf8, 0x00, 0x30, 0x93, 0xf8, 0x3d, 0x30, 0x00, 0x2b, 0x4f, 0xd1, - 0x6f, 0xf0, 0x00, 0x43, 0x4f, 0xf0, 0xff, 0x32, 0x9d, 0x42, 0x08, 0xbf, - 0x94, 0x42, 0xec, 0xd0, 0xda, 0xf8, 0x00, 0xb0, 0x9b, 0xf8, 0x3c, 0x30, - 0x00, 0x2b, 0xe6, 0xd1, 0x59, 0x46, 0x02, 0xa8, 0xfb, 0xf7, 0xfb, 0xf8, - 0xdd, 0xe9, 0x02, 0x23, 0xab, 0x42, 0x08, 0xbf, 0xa2, 0x42, 0x0b, 0xd3, - 0x01, 0x23, 0x8b, 0xf8, 0x3d, 0x30, 0xd8, 0xe7, 0x03, 0xf0, 0x72, 0xf9, - 0x00, 0x28, 0xb8, 0xd1, 0xdf, 0xf8, 0xc0, 0xc0, 0x00, 0xdf, 0xb5, 0xe7, - 0xfa, 0xf7, 0xa4, 0xfe, 0xdb, 0xe9, 0x0c, 0x01, 0xfa, 0xf7, 0x8c, 0xfe, - 0x23, 0x1a, 0x4f, 0xf0, 0x01, 0x00, 0x00, 0x93, 0x65, 0xeb, 0x01, 0x03, - 0x9b, 0xf8, 0x40, 0x10, 0x01, 0x93, 0xab, 0xf8, 0x3c, 0x00, 0xdb, 0xe9, - 0x08, 0x23, 0x16, 0xeb, 0x02, 0x0c, 0x47, 0xeb, 0x03, 0x03, 0x39, 0xb9, - 0xdb, 0xf8, 0x18, 0x20, 0x11, 0x68, 0x91, 0xf8, 0x20, 0x10, 0x69, 0xbb, - 0x8b, 0xf8, 0x40, 0x00, 0x4f, 0xf0, 0x00, 0x02, 0x9b, 0xf8, 0x40, 0x00, - 0x8b, 0xf8, 0x3e, 0x20, 0x10, 0xb9, 0x01, 0x20, 0x8b, 0xf8, 0x40, 0x00, - 0x62, 0x46, 0x2b, 0xe0, 0xda, 0xf8, 0x00, 0x40, 0x20, 0x46, 0xfb, 0xf7, - 0xfc, 0xfd, 0x00, 0x23, 0x94, 0xf8, 0x40, 0x20, 0xa3, 0x87, 0x0a, 0xb1, - 0x84, 0xf8, 0x40, 0x30, 0xda, 0xf8, 0x00, 0x10, 0x02, 0xa8, 0xfb, 0xf7, - 0xac, 0xf8, 0x02, 0x9c, 0xef, 0xf3, 0x05, 0x83, 0x3b, 0xb9, 0x03, 0xf0, - 0x29, 0xf9, 0x20, 0xb9, 0xa4, 0xeb, 0x08, 0x00, 0xdf, 0xf8, 0x30, 0xc0, - 0x00, 0xdf, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xdd, 0xe9, 0x00, 0x12, - 0x00, 0x2a, 0x08, 0xbf, 0x05, 0x29, 0xcd, 0xd3, 0xbc, 0xf5, 0x7a, 0x62, - 0x8b, 0xf8, 0x3e, 0x00, 0x43, 0xf1, 0xff, 0x33, 0x58, 0x46, 0xfa, 0xf7, - 0x0c, 0xff, 0x74, 0xe7, 0x88, 0x86, 0x00, 0x24, 0xc1, 0x5d, 0x01, 0x08, - 0x55, 0x59, 0x01, 0x08, 0x2d, 0xe9, 0xf3, 0x47, 0x05, 0x46, 0x00, 0x26, - 0x67, 0x4f, 0xff, 0xf7, 0x11, 0xff, 0x85, 0xf8, 0x24, 0x60, 0xfa, 0xf7, - 0x39, 0xfe, 0x6b, 0x68, 0x01, 0xa9, 0x1b, 0x1a, 0x00, 0x2b, 0x2b, 0x68, - 0xd8, 0xbf, 0x68, 0x60, 0x01, 0x93, 0x1b, 0xb1, 0x5a, 0x69, 0x12, 0x1a, - 0x00, 0x2a, 0x3b, 0xdd, 0x2b, 0x60, 0x03, 0xb1, 0x1d, 0x61, 0x0e, 0x60, - 0x01, 0x99, 0x11, 0xb1, 0x2b, 0x89, 0x01, 0x33, 0x2b, 0x81, 0xfa, 0xf7, - 0x0d, 0xfe, 0x01, 0xa8, 0x00, 0x29, 0x31, 0xd1, 0x01, 0x9c, 0x05, 0xf1, - 0x18, 0x09, 0x4f, 0xf0, 0x01, 0x0a, 0x00, 0x2c, 0x37, 0xd1, 0xff, 0xf7, - 0xe9, 0xfe, 0xfa, 0xf7, 0x13, 0xfe, 0x2b, 0x68, 0x00, 0x2b, 0x7e, 0xd0, - 0x5c, 0x69, 0x24, 0x1a, 0x24, 0xea, 0xe4, 0x74, 0xfa, 0xf7, 0xf6, 0xfd, - 0xd5, 0xf8, 0x30, 0x80, 0xef, 0xf3, 0x05, 0x83, 0x00, 0x2b, 0x75, 0xd0, - 0xb8, 0xf1, 0x00, 0x0f, 0x7d, 0xd1, 0xab, 0x7a, 0x00, 0x2b, 0x00, 0xf0, - 0x8a, 0x80, 0xfa, 0xf7, 0xfb, 0xfd, 0xab, 0x7a, 0x00, 0x2b, 0x00, 0xf0, - 0x82, 0x80, 0x00, 0x23, 0xab, 0x72, 0x02, 0xb0, 0xbd, 0xe8, 0xf0, 0x47, - 0xfa, 0xf7, 0xdc, 0xbd, 0x03, 0xf1, 0x08, 0x01, 0x9b, 0x68, 0xba, 0xe7, - 0x8c, 0x68, 0x0b, 0x46, 0x00, 0x22, 0x9a, 0x60, 0x1a, 0x46, 0xdb, 0x68, - 0x00, 0x2b, 0xfa, 0xd1, 0x02, 0x60, 0x01, 0xf1, 0x08, 0x00, 0x21, 0x46, - 0xbe, 0xe7, 0x23, 0x6a, 0xd4, 0xf8, 0x08, 0x80, 0x13, 0xb1, 0x04, 0xf1, - 0x24, 0x00, 0x98, 0x47, 0xa2, 0x69, 0x00, 0x2a, 0x0b, 0xdb, 0x63, 0x69, - 0x13, 0x44, 0x63, 0x61, 0xff, 0xf7, 0xa4, 0xfe, 0x21, 0x46, 0x02, 0x46, - 0x28, 0x46, 0xfb, 0xf7, 0x0b, 0xfd, 0x44, 0x46, 0xaf, 0xe7, 0xeb, 0x68, - 0x73, 0xb1, 0xa3, 0x42, 0x0c, 0xd8, 0x2b, 0x6a, 0xa3, 0x42, 0x09, 0xd3, - 0xa3, 0x79, 0x2a, 0x69, 0x01, 0x33, 0xdb, 0xb2, 0x13, 0xfa, 0x02, 0xf2, - 0x14, 0xbf, 0xa3, 0x71, 0x84, 0xf8, 0x06, 0xa0, 0xe3, 0x69, 0x13, 0xb1, - 0x04, 0xf1, 0x24, 0x00, 0x98, 0x47, 0xeb, 0x68, 0x23, 0xb1, 0xa3, 0x42, - 0x02, 0xd8, 0x2b, 0x6a, 0xa3, 0x42, 0x01, 0xd2, 0xa6, 0x71, 0xde, 0xe7, - 0xfa, 0xf7, 0xa8, 0xfd, 0x48, 0x46, 0xab, 0x69, 0x83, 0xb1, 0x19, 0x68, - 0x22, 0x68, 0x91, 0x42, 0x08, 0xd3, 0x0b, 0xd1, 0xe3, 0x60, 0x03, 0x68, - 0x9b, 0x68, 0xa3, 0x60, 0x04, 0x60, 0xfa, 0xf7, 0x85, 0xfd, 0xcc, 0xe7, - 0x03, 0xf1, 0x08, 0x00, 0x9b, 0x68, 0xed, 0xe7, 0xe6, 0x60, 0x03, 0x68, - 0xf3, 0xe7, 0x4f, 0xf0, 0xff, 0x34, 0x81, 0xe7, 0x03, 0xf0, 0x52, 0xf8, - 0x02, 0x46, 0x00, 0x28, 0x84, 0xd1, 0x40, 0x46, 0x01, 0x21, 0x23, 0x46, - 0xbc, 0x46, 0x00, 0xdf, 0x81, 0xe7, 0x98, 0xf8, 0x00, 0x30, 0xf3, 0x2b, - 0x7f, 0xf4, 0x7d, 0xaf, 0x00, 0x2c, 0x7f, 0xf4, 0x7a, 0xaf, 0x22, 0x46, - 0x01, 0x21, 0x40, 0x46, 0x03, 0xf0, 0x90, 0xfc, 0x73, 0xe7, 0xfa, 0xf7, - 0x5f, 0xfd, 0xff, 0xf7, 0x45, 0xfe, 0x34, 0xe7, 0x9d, 0x81, 0x01, 0x08, - 0x01, 0x4b, 0x58, 0x69, 0x70, 0x47, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, - 0x01, 0x23, 0x0a, 0x4a, 0x90, 0xf9, 0x20, 0x10, 0x43, 0x70, 0x1c, 0x32, - 0x93, 0x68, 0x10, 0xb5, 0x1b, 0xb1, 0x93, 0xf9, 0x20, 0x40, 0x8c, 0x42, - 0x05, 0xdc, 0xc0, 0xe9, 0x02, 0x32, 0x90, 0x60, 0x03, 0xb1, 0xd8, 0x60, - 0x10, 0xbd, 0x1a, 0x46, 0x9b, 0x68, 0xf1, 0xe7, 0x1c, 0x01, 0x00, 0x24, - 0x90, 0xf8, 0x22, 0x30, 0x82, 0x6b, 0x13, 0xf0, 0x10, 0x0f, 0x0c, 0xbf, - 0x60, 0x20, 0x20, 0x20, 0x10, 0x44, 0x70, 0x47, 0x10, 0xb5, 0xc4, 0x69, - 0x62, 0x1c, 0xd0, 0xe9, 0x04, 0x31, 0x0c, 0xd1, 0x03, 0xb1, 0x59, 0x61, - 0x42, 0x69, 0x1a, 0xb1, 0x13, 0x61, 0x00, 0x23, 0x43, 0x61, 0x01, 0xe0, - 0x07, 0x4a, 0x13, 0x63, 0x00, 0x23, 0xc3, 0x61, 0x10, 0xbd, 0x1b, 0xb1, - 0xda, 0x69, 0x59, 0x61, 0x22, 0x44, 0xda, 0x61, 0x42, 0x69, 0x00, 0x2a, - 0xee, 0xd1, 0x01, 0x4a, 0xd3, 0x62, 0xf1, 0xe7, 0x1c, 0x01, 0x00, 0x24, - 0xc2, 0x68, 0x2a, 0xb1, 0x83, 0x68, 0x93, 0x60, 0x03, 0xb1, 0xda, 0x60, - 0x00, 0x23, 0xc3, 0x60, 0x70, 0x47, 0x03, 0x78, 0xf1, 0x2b, 0x00, 0xd0, - 0x70, 0x47, 0xc0, 0x68, 0xf9, 0xe7, 0x83, 0x68, 0x9a, 0x68, 0x82, 0x60, - 0x02, 0xb1, 0xd0, 0x60, 0x00, 0x22, 0x18, 0x46, 0xda, 0x60, 0x70, 0x47, - 0x38, 0xb5, 0x1f, 0x4c, 0x23, 0x7a, 0x02, 0x2b, 0x35, 0xd1, 0x63, 0x6a, - 0x00, 0x2b, 0x34, 0xd0, 0x63, 0x69, 0x4a, 0x1c, 0x58, 0x70, 0x16, 0xd1, - 0x22, 0x6b, 0x00, 0x21, 0x72, 0xb9, 0x4f, 0xf0, 0xff, 0x30, 0xc3, 0xe9, - 0x04, 0x21, 0xd8, 0x61, 0x59, 0xb1, 0x0b, 0x61, 0x15, 0x48, 0xff, 0xf7, - 0xde, 0xff, 0x02, 0x23, 0x43, 0x70, 0xa0, 0x61, 0x01, 0x20, 0x38, 0xbd, - 0x11, 0x46, 0x12, 0x69, 0xec, 0xe7, 0x23, 0x63, 0xf2, 0xe7, 0xe2, 0x6a, - 0x00, 0x20, 0x12, 0xb1, 0xd5, 0x69, 0xa9, 0x42, 0x0b, 0xd2, 0xd9, 0x61, - 0xc3, 0xe9, 0x04, 0x20, 0x58, 0xb1, 0x03, 0x61, 0x00, 0x2a, 0xe5, 0xd0, - 0xd0, 0x69, 0x53, 0x61, 0x41, 0x1a, 0xd1, 0x61, 0xe0, 0xe7, 0x10, 0x46, - 0x49, 0x1b, 0x12, 0x69, 0xeb, 0xe7, 0xe3, 0x62, 0xf2, 0xe7, 0x00, 0x20, - 0xdf, 0xe7, 0x18, 0x46, 0xdd, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, - 0x38, 0x01, 0x00, 0x24, 0x91, 0xf9, 0x20, 0x20, 0x83, 0x68, 0x10, 0xb5, - 0x1b, 0xb1, 0x93, 0xf9, 0x20, 0x40, 0x94, 0x42, 0x05, 0xda, 0xc1, 0xe9, - 0x02, 0x30, 0x81, 0x60, 0x03, 0xb1, 0xd9, 0x60, 0x10, 0xbd, 0x18, 0x46, - 0x9b, 0x68, 0xf1, 0xe7, 0x01, 0x23, 0x01, 0x46, 0x43, 0x70, 0x01, 0x48, - 0xff, 0xf7, 0xe8, 0xbf, 0x38, 0x01, 0x00, 0x24, 0x70, 0xb5, 0x12, 0x4d, - 0x04, 0x46, 0x2e, 0x7a, 0x69, 0x69, 0x90, 0xb9, 0x02, 0x2e, 0x0f, 0xd1, - 0x6c, 0x6a, 0x6c, 0xb1, 0x94, 0xf9, 0x20, 0x20, 0x91, 0xf9, 0x20, 0x30, - 0x9a, 0x42, 0x07, 0xdd, 0x20, 0x46, 0xff, 0xf7, 0x77, 0xff, 0x08, 0x46, - 0xff, 0xf7, 0x32, 0xff, 0x66, 0x70, 0xac, 0x61, 0x70, 0xbd, 0x02, 0x2e, - 0x05, 0xd1, 0x90, 0xf9, 0x20, 0x20, 0x91, 0xf9, 0x20, 0x30, 0x9a, 0x42, - 0xf1, 0xdc, 0x20, 0x46, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0xd2, 0xbf, - 0x1c, 0x01, 0x00, 0x24, 0x38, 0xb5, 0x04, 0x46, 0x15, 0x46, 0xff, 0xf7, - 0x33, 0xff, 0x01, 0x60, 0x20, 0x46, 0xff, 0xf7, 0x39, 0xff, 0x1d, 0xb1, - 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0xca, 0xbf, 0xbd, 0xe8, 0x38, 0x40, - 0xff, 0xf7, 0xbe, 0xbf, 0x10, 0xb5, 0x04, 0x46, 0x80, 0x69, 0x18, 0xb1, - 0x00, 0x22, 0x11, 0x46, 0xff, 0xf7, 0xe6, 0xff, 0x63, 0x78, 0x23, 0x2b, - 0x02, 0xbf, 0xa3, 0x68, 0x00, 0x22, 0x9a, 0x61, 0x10, 0xbd, 0x10, 0xb5, - 0x01, 0x46, 0x04, 0x46, 0x64, 0xb1, 0x23, 0x78, 0xf1, 0x2b, 0x07, 0xd0, - 0x08, 0x46, 0xff, 0xf7, 0x37, 0xff, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, - 0xff, 0xf7, 0x8e, 0xbf, 0xe4, 0x68, 0xf1, 0xe7, 0x10, 0xbd, 0x00, 0x00, - 0x38, 0xb5, 0x25, 0x4d, 0xec, 0x6a, 0x00, 0x2c, 0x45, 0xd0, 0xe3, 0x69, - 0x01, 0x3b, 0xe3, 0x61, 0x00, 0x2b, 0x40, 0xd1, 0x63, 0x78, 0x73, 0x2b, - 0x06, 0xd0, 0x09, 0xd8, 0x53, 0x2b, 0x0b, 0xd0, 0x03, 0xf0, 0xdf, 0x03, - 0x43, 0x2b, 0x29, 0xd1, 0x20, 0x46, 0xff, 0xf7, 0x20, 0xff, 0x25, 0xe0, - 0x03, 0xf0, 0xef, 0x03, 0x83, 0x2b, 0xf6, 0xe7, 0x20, 0x46, 0xff, 0xf7, - 0x18, 0xff, 0xc3, 0x78, 0x9b, 0x07, 0x1b, 0xd5, 0xc0, 0x68, 0x90, 0xf9, - 0x21, 0x20, 0xc3, 0x6a, 0xd9, 0x78, 0x89, 0x07, 0x09, 0xd5, 0x99, 0x68, - 0x8c, 0x42, 0x08, 0xbf, 0xa1, 0x68, 0x21, 0xb1, 0x91, 0xf9, 0x20, 0x10, - 0x8a, 0x42, 0xb8, 0xbf, 0x0a, 0x46, 0x5b, 0x69, 0x00, 0x2b, 0xef, 0xd1, - 0x90, 0xf9, 0x20, 0x30, 0x93, 0x42, 0x03, 0xd0, 0x80, 0xf8, 0x20, 0x20, - 0xff, 0xf7, 0xaf, 0xff, 0x20, 0x46, 0xff, 0xf7, 0xed, 0xfe, 0xff, 0xf7, - 0x59, 0xff, 0x24, 0x69, 0x24, 0xb1, 0xe3, 0x69, 0x00, 0x2b, 0xc1, 0xd0, - 0x00, 0x23, 0x63, 0x61, 0xec, 0x62, 0x38, 0xbd, 0x1c, 0x01, 0x00, 0x24, - 0x10, 0xb5, 0x03, 0x46, 0x53, 0xe8, 0x00, 0x0f, 0x08, 0x42, 0x03, 0xd1, - 0xbf, 0xf3, 0x2f, 0x8f, 0x00, 0x20, 0x05, 0xe0, 0x20, 0xea, 0x01, 0x02, - 0x43, 0xe8, 0x00, 0x24, 0x04, 0xb1, 0xf1, 0xe7, 0x10, 0xbd, 0x10, 0xb5, - 0x03, 0x46, 0x53, 0xe8, 0x00, 0x0f, 0x00, 0xea, 0x01, 0x02, 0x8a, 0x42, - 0x03, 0xd0, 0xbf, 0xf3, 0x2f, 0x8f, 0x00, 0x20, 0x05, 0xe0, 0x20, 0xea, - 0x01, 0x02, 0x43, 0xe8, 0x00, 0x24, 0x04, 0xb1, 0xef, 0xe7, 0x10, 0xbd, - 0x10, 0xb5, 0x43, 0x78, 0x04, 0x46, 0x33, 0x2b, 0x15, 0xd1, 0x90, 0xf8, - 0x23, 0x30, 0x41, 0x6a, 0x03, 0xf0, 0x01, 0x02, 0x9b, 0x07, 0x08, 0xd4, - 0x28, 0x30, 0x1a, 0xb1, 0xff, 0xf7, 0xdd, 0xff, 0x48, 0xb1, 0x0b, 0xe0, - 0xff, 0xf7, 0xc8, 0xff, 0xfa, 0xe7, 0x80, 0x6a, 0x01, 0xea, 0x00, 0x03, - 0x12, 0xb1, 0x99, 0x42, 0xf4, 0xd0, 0x10, 0xbd, 0x00, 0x2b, 0xfc, 0xd0, - 0x01, 0x46, 0x00, 0x22, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, - 0x35, 0xbf, 0xd0, 0xe8, 0x5f, 0x3f, 0x13, 0xb9, 0xbf, 0xf3, 0x2f, 0x8f, - 0x04, 0xe0, 0x5a, 0x1e, 0xc0, 0xe8, 0x51, 0x2f, 0x01, 0xb1, 0xf4, 0xe7, - 0x98, 0xb2, 0x70, 0x47, 0x10, 0xb5, 0xd0, 0xe8, 0x5f, 0x3f, 0x5a, 0x1c, - 0x91, 0x42, 0x00, 0xd8, 0x00, 0x22, 0xc0, 0xe8, 0x54, 0x2f, 0x04, 0xb1, - 0xf5, 0xe7, 0x98, 0xb2, 0x10, 0xbd, 0x10, 0xb5, 0xd0, 0xe8, 0x5f, 0x3f, - 0x99, 0x42, 0x02, 0xd8, 0xbf, 0xf3, 0x2f, 0x8f, 0x04, 0xe0, 0x5a, 0x1c, - 0xc0, 0xe8, 0x54, 0x2f, 0x04, 0xb1, 0xf3, 0xe7, 0x98, 0xb2, 0x10, 0xbd, - 0x10, 0xb5, 0x04, 0x46, 0xb8, 0xb1, 0x03, 0x78, 0xf6, 0x2b, 0x14, 0xd1, - 0x83, 0x68, 0x3b, 0xb1, 0xff, 0xf7, 0x73, 0xfe, 0x01, 0x22, 0x00, 0x21, - 0xff, 0xf7, 0xfe, 0xfe, 0x00, 0x20, 0x10, 0xbd, 0xc1, 0x89, 0x0c, 0x30, - 0xff, 0xf7, 0xdd, 0xff, 0xe3, 0x89, 0x83, 0x42, 0x8c, 0xbf, 0x00, 0x20, - 0x6f, 0xf0, 0x02, 0x00, 0xf3, 0xe7, 0x6f, 0xf0, 0x03, 0x00, 0xf0, 0xe7, - 0x83, 0x68, 0x10, 0xb5, 0x04, 0x46, 0x63, 0xb1, 0x0c, 0x30, 0xff, 0xf7, - 0xb2, 0xff, 0x40, 0xb1, 0x20, 0x46, 0xff, 0xf7, 0x54, 0xfe, 0x00, 0x22, - 0xbd, 0xe8, 0x10, 0x40, 0x11, 0x46, 0xff, 0xf7, 0xdd, 0xbe, 0x10, 0xbd, - 0x28, 0x4b, 0x5a, 0x69, 0x70, 0xb5, 0x04, 0x46, 0x00, 0x2a, 0x41, 0xd0, - 0x00, 0x28, 0x42, 0xd0, 0x03, 0x78, 0xf5, 0x2b, 0x3f, 0xd1, 0x03, 0x7e, - 0x00, 0x2b, 0x3f, 0xd0, 0xc1, 0x68, 0x91, 0x42, 0x3c, 0xd1, 0x01, 0x3b, - 0xdb, 0xb2, 0x03, 0x76, 0x13, 0xbb, 0x43, 0x69, 0x0b, 0xb1, 0x01, 0x69, - 0x19, 0x61, 0x21, 0x69, 0xf1, 0xb1, 0x4b, 0x61, 0x92, 0xf9, 0x21, 0x30, - 0xd5, 0x6a, 0xdd, 0xb9, 0x82, 0xf8, 0x20, 0x30, 0xa3, 0x68, 0x83, 0xb1, - 0x20, 0x46, 0xff, 0xf7, 0x26, 0xfe, 0x06, 0x46, 0x2a, 0x46, 0x29, 0x46, - 0xff, 0xf7, 0xb0, 0xfe, 0xf3, 0x6a, 0xc4, 0xe9, 0x03, 0x65, 0x63, 0x61, - 0x03, 0xb1, 0x1c, 0x61, 0x01, 0x23, 0xf4, 0x62, 0x23, 0x76, 0x00, 0x20, - 0xff, 0xf7, 0x7c, 0xfe, 0x00, 0x20, 0x0f, 0xe0, 0xd3, 0x62, 0xdf, 0xe7, - 0xe9, 0x78, 0x89, 0x07, 0x06, 0xd5, 0xa9, 0x68, 0x21, 0xb1, 0x91, 0xf9, - 0x20, 0x10, 0x8b, 0x42, 0xb8, 0xbf, 0x0b, 0x46, 0x6d, 0x69, 0xd6, 0xe7, - 0x4f, 0xf0, 0xff, 0x30, 0x70, 0xbd, 0x6f, 0xf0, 0x03, 0x00, 0xfb, 0xe7, - 0x6f, 0xf0, 0x02, 0x00, 0xf8, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, - 0x22, 0x4b, 0x70, 0xb5, 0x5d, 0x69, 0x04, 0x46, 0x0e, 0x46, 0x00, 0x2d, - 0x35, 0xd0, 0x00, 0x28, 0x36, 0xd0, 0x03, 0x78, 0xf5, 0x2b, 0x33, 0xd1, - 0x03, 0x7e, 0x53, 0xb9, 0xc0, 0xe9, 0x03, 0x53, 0xeb, 0x6a, 0x43, 0x61, - 0x03, 0xb1, 0x18, 0x61, 0x01, 0x23, 0xec, 0x62, 0x00, 0x20, 0x23, 0x76, - 0x70, 0xbd, 0xc2, 0x78, 0xd1, 0x07, 0x06, 0xd5, 0xc1, 0x68, 0xa9, 0x42, - 0x03, 0xd1, 0xff, 0x2b, 0x21, 0xd0, 0x01, 0x33, 0xf2, 0xe7, 0xf6, 0xb1, - 0x93, 0x07, 0x0a, 0xd5, 0xe0, 0x68, 0x95, 0xf9, 0x20, 0x30, 0x90, 0xf9, - 0x20, 0x20, 0x9a, 0x42, 0x03, 0xda, 0x80, 0xf8, 0x20, 0x30, 0xff, 0xf7, - 0x78, 0xfe, 0x31, 0x46, 0x53, 0x20, 0xff, 0xf7, 0xcd, 0xfd, 0x18, 0xb1, - 0x29, 0x46, 0x20, 0x46, 0xff, 0xf7, 0x0c, 0xfe, 0x6f, 0xf0, 0x01, 0x00, - 0xda, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0xd7, 0xe7, 0x6f, 0xf0, 0x03, 0x00, - 0xd4, 0xe7, 0x6f, 0xf0, 0x02, 0x00, 0xd1, 0xe7, 0x1c, 0x01, 0x00, 0x24, - 0x2d, 0xe9, 0xf0, 0x41, 0x04, 0x46, 0x00, 0x26, 0x01, 0x27, 0x0c, 0xb9, - 0xbd, 0xe8, 0xf0, 0x81, 0xe3, 0x78, 0xd4, 0xf8, 0x14, 0x80, 0x1b, 0x07, - 0x12, 0xd5, 0xa3, 0x68, 0x26, 0x76, 0x7b, 0xb1, 0x20, 0x46, 0xff, 0xf7, - 0x9e, 0xfd, 0x00, 0x22, 0x05, 0x46, 0x11, 0x46, 0xff, 0xf7, 0x28, 0xfe, - 0xeb, 0x6a, 0xc4, 0xe9, 0x03, 0x56, 0x63, 0x61, 0x03, 0xb1, 0x1c, 0x61, - 0xec, 0x62, 0x27, 0x76, 0x44, 0x46, 0xe2, 0xe7, 0x03, 0x46, 0x53, 0xe8, - 0x00, 0x0f, 0x42, 0x1c, 0x43, 0xe8, 0x00, 0x21, 0x01, 0xb1, 0xf8, 0xe7, - 0x70, 0x47, 0x03, 0x6b, 0x30, 0xb4, 0xbb, 0xb1, 0xcd, 0x78, 0x00, 0x24, - 0xda, 0x78, 0xaa, 0x42, 0x0a, 0xd3, 0x1a, 0x46, 0xc1, 0xe9, 0x01, 0x24, - 0x62, 0xb1, 0x91, 0x60, 0x7c, 0xb1, 0x61, 0x60, 0x28, 0x30, 0x30, 0xbc, - 0xff, 0xf7, 0xe4, 0xbf, 0x5a, 0x68, 0x1c, 0x46, 0x00, 0x2a, 0xf1, 0xd0, - 0x13, 0x46, 0xeb, 0xe7, 0xc1, 0x62, 0xf1, 0xe7, 0xc1, 0xe9, 0x01, 0x33, - 0xc1, 0x62, 0x01, 0x63, 0xee, 0xe7, 0x30, 0xb5, 0xf0, 0xb1, 0xc3, 0x68, - 0x8b, 0x42, 0x1b, 0xd8, 0x03, 0x69, 0x8b, 0x42, 0x18, 0xd9, 0x00, 0xf1, - 0x14, 0x03, 0x1a, 0x68, 0x0a, 0x60, 0xbf, 0xf3, 0x5f, 0x8f, 0x53, 0xe8, - 0x00, 0x2f, 0x0c, 0x68, 0x94, 0x42, 0xf6, 0xd1, 0x43, 0xe8, 0x00, 0x15, - 0x05, 0xb1, 0xf2, 0xe7, 0x04, 0x30, 0x50, 0xe8, 0x00, 0x3f, 0x5a, 0x1e, - 0x40, 0xe8, 0x00, 0x21, 0x01, 0xb1, 0xf8, 0xe7, 0x00, 0x20, 0x30, 0xbd, - 0x6f, 0xf0, 0x03, 0x00, 0xfb, 0xe7, 0x10, 0xb5, 0x90, 0xb1, 0x00, 0xf1, - 0x14, 0x03, 0x53, 0xe8, 0x00, 0x4f, 0x14, 0xb9, 0xbf, 0xf3, 0x2f, 0x8f, - 0x04, 0xe0, 0x22, 0x68, 0x43, 0xe8, 0x00, 0x21, 0x01, 0xb1, 0xf4, 0xe7, - 0x14, 0xb1, 0x04, 0x30, 0xff, 0xf7, 0xa0, 0xff, 0x20, 0x46, 0x10, 0xbd, - 0x04, 0x46, 0xfb, 0xe7, 0x30, 0xb5, 0xc0, 0xb1, 0x89, 0xb1, 0xc2, 0xb1, - 0xcb, 0xb1, 0x00, 0x24, 0x01, 0x60, 0xc3, 0x60, 0x43, 0x61, 0xc0, 0xe9, - 0x01, 0x42, 0x02, 0xfb, 0x01, 0xf4, 0x1d, 0x19, 0x05, 0x61, 0x18, 0x46, - 0x01, 0x39, 0x04, 0xd1, 0xa2, 0x1a, 0x99, 0x50, 0x01, 0x21, 0x08, 0x46, - 0x30, 0xbd, 0x85, 0x18, 0x05, 0x60, 0x28, 0x46, 0xf4, 0xe7, 0x01, 0x46, - 0xf7, 0xe7, 0x11, 0x46, 0xf5, 0xe7, 0x19, 0x46, 0xf3, 0xe7, 0x30, 0xb5, - 0x80, 0xb1, 0xc9, 0xb1, 0xa1, 0xf1, 0x08, 0x05, 0x00, 0xf1, 0x08, 0x04, - 0x00, 0x22, 0xa5, 0x42, 0x09, 0xd1, 0x6b, 0x68, 0x23, 0xf0, 0x03, 0x04, - 0x43, 0x68, 0x1b, 0x1b, 0x43, 0x60, 0x3a, 0xb9, 0x6a, 0x60, 0x01, 0x20, - 0x30, 0xbd, 0x23, 0x68, 0x22, 0x46, 0x3b, 0xb1, 0x1c, 0x46, 0xee, 0xe7, - 0x51, 0xf8, 0x08, 0x3c, 0x13, 0x60, 0xf4, 0xe7, 0x08, 0x46, 0xf3, 0xe7, - 0x18, 0x46, 0xf1, 0xe7, 0x10, 0xb5, 0xc3, 0x78, 0x04, 0x46, 0x13, 0xf0, - 0x01, 0x03, 0x22, 0xd1, 0x03, 0x80, 0x83, 0x78, 0x9a, 0x07, 0x08, 0xd5, - 0x13, 0xf0, 0x10, 0x0f, 0x01, 0x6b, 0x13, 0x4b, 0x0f, 0xd0, 0xd3, 0xf8, - 0x84, 0x00, 0xff, 0xf7, 0x70, 0xff, 0xa3, 0x78, 0xdb, 0x07, 0x1c, 0xd5, - 0x0e, 0x4b, 0x21, 0x46, 0xd3, 0xf8, 0x88, 0x00, 0x38, 0xb1, 0xbd, 0xe8, - 0x10, 0x40, 0xff, 0xf7, 0x64, 0xbf, 0x58, 0x6f, 0xff, 0xf7, 0xbd, 0xff, - 0xef, 0xe7, 0xd3, 0xf8, 0x80, 0x00, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, - 0xb6, 0xbf, 0x04, 0x23, 0x43, 0x70, 0x00, 0x23, 0xc3, 0x60, 0x03, 0x4b, - 0x5a, 0x6b, 0x82, 0x60, 0x02, 0xb1, 0xd0, 0x60, 0x5c, 0x63, 0x10, 0xbd, - 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, 0x00, 0x28, 0x3a, 0xd0, - 0x03, 0x78, 0xf1, 0x2b, 0x37, 0xd1, 0x43, 0x78, 0x03, 0xf0, 0x0f, 0x03, - 0x02, 0x2b, 0x06, 0xd0, 0x03, 0x2b, 0x27, 0xd0, 0x01, 0x2b, 0x22, 0xd0, - 0x6f, 0xf0, 0x02, 0x00, 0x1e, 0xe0, 0x17, 0x4b, 0x1a, 0x7a, 0x02, 0x2a, - 0xf8, 0xd1, 0x5b, 0x6a, 0x00, 0x2b, 0xf5, 0xd0, 0xe0, 0x6a, 0xff, 0xf7, - 0xe5, 0xfe, 0x20, 0x46, 0xff, 0xf7, 0x34, 0xfd, 0x61, 0x78, 0x02, 0x29, - 0x17, 0xd1, 0x10, 0x48, 0xff, 0xf7, 0x8d, 0xfc, 0x0d, 0x4b, 0x41, 0x70, - 0x98, 0x61, 0xef, 0xf3, 0x09, 0x82, 0xa2, 0x63, 0x00, 0x22, 0x5a, 0x61, - 0x20, 0x46, 0xff, 0xf7, 0x99, 0xff, 0x00, 0x20, 0x10, 0xbd, 0xff, 0xf7, - 0x6f, 0xfc, 0xe3, 0xe7, 0xff, 0xf7, 0x6c, 0xfc, 0xff, 0xf7, 0x4a, 0xfc, - 0xde, 0xe7, 0x00, 0x20, 0xff, 0xf7, 0xdc, 0xfc, 0xee, 0xe7, 0x6f, 0xf0, - 0x03, 0x00, 0xef, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0x38, 0x01, 0x00, 0x24, - 0x70, 0xb5, 0x0f, 0x4c, 0x26, 0x7a, 0x02, 0x2e, 0x18, 0xd1, 0x63, 0x6a, - 0xb3, 0xb1, 0x65, 0x69, 0xe8, 0x6a, 0xff, 0xf7, 0xb1, 0xfe, 0x28, 0x46, - 0xff, 0xf7, 0x00, 0xfd, 0x04, 0xf1, 0x1c, 0x00, 0xff, 0xf7, 0x5b, 0xfc, - 0x46, 0x70, 0xa0, 0x61, 0xef, 0xf3, 0x09, 0x83, 0xab, 0x63, 0x00, 0x23, - 0x28, 0x46, 0x63, 0x61, 0xbd, 0xe8, 0x70, 0x40, 0xff, 0xf7, 0x66, 0xbf, - 0x70, 0xbd, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x70, 0xb5, 0x05, 0x46, - 0x38, 0xb3, 0x03, 0x78, 0xf6, 0x2b, 0x24, 0xd1, 0x83, 0x68, 0x63, 0xb1, - 0x28, 0x46, 0xff, 0xf7, 0x40, 0xfc, 0x00, 0x22, 0x6f, 0xf0, 0x02, 0x01, - 0xff, 0xf7, 0xca, 0xfc, 0xa8, 0x68, 0x00, 0x28, 0xf4, 0xd1, 0xff, 0xf7, - 0x9d, 0xfc, 0xab, 0x78, 0x00, 0x26, 0x13, 0xf0, 0x01, 0x03, 0x2e, 0x70, - 0x12, 0xd0, 0x0a, 0x4b, 0x29, 0x46, 0xd3, 0xf8, 0x98, 0x40, 0x24, 0xb1, - 0x20, 0x46, 0xff, 0xf7, 0xc2, 0xfe, 0x30, 0x46, 0x70, 0xbd, 0xd3, 0xf8, - 0x80, 0x00, 0xff, 0xf7, 0x18, 0xff, 0x20, 0x46, 0xf8, 0xe7, 0x6f, 0xf0, - 0x03, 0x00, 0xf5, 0xe7, 0x18, 0x46, 0xf3, 0xe7, 0x1c, 0x01, 0x00, 0x24, - 0x70, 0xb5, 0x04, 0x46, 0x00, 0x28, 0x49, 0xd0, 0x03, 0x78, 0xf5, 0x2b, - 0x46, 0xd1, 0x03, 0x7e, 0xbb, 0xb1, 0x63, 0x69, 0xc0, 0x68, 0x0b, 0xb1, - 0x22, 0x69, 0x1a, 0x61, 0x22, 0x69, 0x02, 0xb3, 0x53, 0x61, 0x90, 0xf9, - 0x21, 0x20, 0xc3, 0x6a, 0xeb, 0xb9, 0x90, 0xf9, 0x20, 0x30, 0x93, 0x42, - 0x03, 0xd0, 0x80, 0xf8, 0x20, 0x20, 0xff, 0xf7, 0xac, 0xfc, 0xa0, 0x68, - 0xf8, 0xb9, 0xff, 0xf7, 0x5f, 0xfc, 0xa0, 0x78, 0x00, 0x26, 0x10, 0xf0, - 0x01, 0x00, 0x26, 0x70, 0x08, 0xd0, 0x15, 0x4b, 0x21, 0x46, 0xd3, 0xf8, - 0x94, 0x50, 0xdd, 0xb1, 0x28, 0x46, 0xff, 0xf7, 0x84, 0xfe, 0x30, 0x46, - 0x70, 0xbd, 0xc3, 0x62, 0xdd, 0xe7, 0xd9, 0x78, 0x89, 0x07, 0x06, 0xd5, - 0x99, 0x68, 0x21, 0xb1, 0x91, 0xf9, 0x20, 0x10, 0x8a, 0x42, 0xb8, 0xbf, - 0x0a, 0x46, 0x5b, 0x69, 0xd4, 0xe7, 0x20, 0x46, 0xff, 0xf7, 0xd7, 0xfb, - 0x00, 0x22, 0x6f, 0xf0, 0x02, 0x01, 0xff, 0xf7, 0x61, 0xfc, 0xd4, 0xe7, - 0xd3, 0xf8, 0x80, 0x00, 0xff, 0xf7, 0xc3, 0xfe, 0x28, 0x46, 0xe1, 0xe7, - 0x6f, 0xf0, 0x03, 0x00, 0xde, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, - 0xf0, 0xb5, 0x68, 0xb3, 0x81, 0xb1, 0x0f, 0x31, 0x00, 0xf1, 0x08, 0x06, - 0x21, 0xf0, 0x07, 0x07, 0x33, 0x46, 0x36, 0x68, 0x5c, 0x68, 0xf1, 0x1a, - 0x24, 0xf0, 0x03, 0x04, 0x09, 0x1b, 0x8f, 0x42, 0x04, 0xd9, 0x31, 0x68, - 0x00, 0x29, 0xf3, 0xd1, 0x08, 0x46, 0xf0, 0xbd, 0x45, 0x68, 0x3a, 0x43, - 0x04, 0x68, 0x3d, 0x44, 0x45, 0x60, 0x20, 0x44, 0x50, 0xf8, 0x04, 0x1c, - 0x08, 0x38, 0x8d, 0x42, 0x88, 0xbf, 0x45, 0x60, 0x58, 0x68, 0x18, 0xb9, - 0x03, 0xf1, 0x08, 0x01, 0x5a, 0x60, 0xeb, 0xe7, 0x20, 0xf0, 0x03, 0x00, - 0x19, 0x18, 0x1e, 0x50, 0x4a, 0x60, 0x19, 0x60, 0x08, 0x31, 0xe3, 0xe7, - 0x01, 0x46, 0xe1, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, 0x85, 0xb0, 0x81, 0x46, - 0x02, 0x91, 0x20, 0xb9, 0x00, 0x24, 0x20, 0x46, 0x05, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x00, 0x2a, 0x00, 0xf0, 0x86, 0x80, 0x94, 0x68, 0xb4, 0xb1, - 0xa0, 0x07, 0xf3, 0xd1, 0xd3, 0x68, 0x43, 0x2b, 0xf0, 0xd9, 0x97, 0x69, - 0xd2, 0xe9, 0x04, 0x65, 0x8e, 0xb1, 0x71, 0x07, 0xea, 0xd1, 0x00, 0x2d, - 0xe8, 0xd0, 0x77, 0xb9, 0x18, 0x27, 0x6b, 0x07, 0xe4, 0xd1, 0xa5, 0xf1, - 0x48, 0x01, 0x57, 0x4b, 0x99, 0x42, 0x0b, 0xd9, 0xde, 0xe7, 0xd3, 0x68, - 0x00, 0x2b, 0xea, 0xd0, 0xda, 0xe7, 0x00, 0x2f, 0x64, 0xd0, 0x7b, 0x1e, - 0x37, 0x2b, 0xd5, 0xd8, 0x00, 0x2d, 0xec, 0xd1, 0xd2, 0xe9, 0x00, 0xa3, - 0x01, 0x93, 0x00, 0x2c, 0x69, 0xd1, 0x4e, 0x4b, 0xd3, 0xf8, 0x88, 0x00, - 0x00, 0x28, 0x5d, 0xd0, 0xff, 0xf7, 0x13, 0xfe, 0x04, 0x46, 0x00, 0x28, - 0xc4, 0xd0, 0x4f, 0xf0, 0x01, 0x08, 0xa6, 0xb9, 0xdf, 0xf8, 0x1c, 0xb1, - 0x00, 0x2d, 0x71, 0xd1, 0xdb, 0xf8, 0x84, 0x00, 0x00, 0x28, 0x57, 0xd0, - 0xff, 0xf7, 0x03, 0xfe, 0x00, 0x28, 0x70, 0xd0, 0x48, 0xf0, 0x10, 0x08, - 0x06, 0x46, 0x4f, 0xf4, 0x80, 0x55, 0x48, 0xf0, 0x02, 0x08, 0x00, 0x2c, - 0xac, 0xd0, 0x40, 0xf2, 0xf1, 0x13, 0xfd, 0x22, 0x65, 0x63, 0x40, 0x3d, - 0x23, 0x80, 0x7f, 0xb2, 0x01, 0x9b, 0x35, 0x44, 0x62, 0x84, 0xe3, 0x70, - 0x00, 0x23, 0x38, 0x4a, 0x84, 0xf8, 0x02, 0x80, 0xc4, 0xf8, 0x04, 0xa0, - 0x84, 0xf8, 0x20, 0x70, 0x84, 0xf8, 0x21, 0x70, 0xc4, 0xe9, 0x0e, 0x59, - 0xc4, 0xe9, 0x02, 0x33, 0xc4, 0xe9, 0x04, 0x33, 0xc4, 0xe9, 0x06, 0x33, - 0xc4, 0xe9, 0x09, 0x33, 0xc4, 0xe9, 0x0b, 0x36, 0x32, 0x60, 0xa2, 0x6b, - 0x11, 0x46, 0x02, 0xf1, 0x34, 0x00, 0x42, 0xf8, 0x04, 0x3b, 0x82, 0x42, - 0xfb, 0xd1, 0x2a, 0x4b, 0x20, 0x46, 0x2a, 0x4a, 0xc1, 0xe9, 0x0d, 0x39, - 0x4f, 0xf0, 0x80, 0x73, 0xcb, 0x63, 0x02, 0x9b, 0x0b, 0x62, 0x23, 0x4b, - 0x1a, 0x66, 0xff, 0xf7, 0x69, 0xfb, 0x74, 0xe7, 0x18, 0x27, 0x9b, 0xe7, - 0x92, 0x46, 0x16, 0x46, 0x18, 0x27, 0x15, 0x46, 0x01, 0x92, 0x9c, 0xe7, - 0x01, 0x22, 0x44, 0x21, 0xd3, 0xf8, 0x80, 0x00, 0xff, 0xf7, 0x2e, 0xff, - 0x9c, 0xe7, 0x4f, 0xf0, 0x00, 0x08, 0x9e, 0xe7, 0x2a, 0x46, 0x4f, 0xf4, - 0x80, 0x55, 0x4f, 0xf4, 0x80, 0x51, 0xdb, 0xf8, 0x74, 0x00, 0xff, 0xf7, - 0x21, 0xff, 0xf8, 0xb9, 0xb8, 0xf1, 0x00, 0x0f, 0x1e, 0xd0, 0xdb, 0xf8, - 0x88, 0x20, 0x7a, 0xb1, 0x21, 0x46, 0x10, 0x46, 0x00, 0x24, 0xff, 0xf7, - 0x74, 0xfd, 0x9a, 0xe7, 0x32, 0x46, 0x29, 0x46, 0xdb, 0xf8, 0x74, 0x00, - 0xff, 0xf7, 0x0e, 0xff, 0xeb, 0xe7, 0x4f, 0xf4, 0x80, 0x55, 0xe9, 0xe7, - 0x21, 0x46, 0xdb, 0xf8, 0x80, 0x00, 0x03, 0x92, 0xff, 0xf7, 0xbf, 0xfd, - 0x03, 0x9a, 0x14, 0x46, 0x16, 0x46, 0x86, 0xe7, 0x06, 0x46, 0x84, 0xe7, - 0x44, 0x46, 0x82, 0xe7, 0xb7, 0xff, 0xff, 0x7f, 0x1c, 0x01, 0x00, 0x24, - 0xa5, 0x2e, 0x5a, 0xe2, 0xd1, 0x78, 0x01, 0x08, 0x69, 0x4b, 0x01, 0x08, - 0x70, 0xb5, 0x4f, 0xf6, 0xfe, 0x73, 0x14, 0x46, 0x42, 0x1e, 0x05, 0x46, - 0x0e, 0x46, 0x9a, 0x42, 0x01, 0xd9, 0x00, 0x20, 0x70, 0xbd, 0x88, 0x42, - 0xfb, 0xd3, 0xcc, 0xb1, 0xa0, 0x68, 0x22, 0x68, 0x90, 0xb1, 0x10, 0xf0, - 0x03, 0x03, 0xf4, 0xd1, 0xe1, 0x68, 0x0f, 0x29, 0xf1, 0xd9, 0x14, 0x46, - 0xf6, 0x22, 0x83, 0x70, 0x00, 0x23, 0x44, 0x60, 0x02, 0x70, 0x83, 0x60, - 0x0d, 0x4a, 0x0e, 0x4b, 0x86, 0x81, 0xc5, 0x81, 0x9a, 0x66, 0xe5, 0xe7, - 0xe3, 0x68, 0x00, 0x2b, 0xe1, 0xd1, 0x14, 0x46, 0x09, 0x4b, 0xd3, 0xf8, - 0x98, 0x00, 0x28, 0xb1, 0xff, 0xf7, 0x47, 0xfd, 0x00, 0x28, 0xd8, 0xd0, - 0x01, 0x23, 0xe5, 0xe7, 0x01, 0x22, 0x10, 0x21, 0xd3, 0xf8, 0x80, 0x00, - 0xff, 0xf7, 0xba, 0xfe, 0xf4, 0xe7, 0x00, 0xbf, 0x41, 0x4c, 0x01, 0x08, - 0x1c, 0x01, 0x00, 0x24, 0x38, 0xb5, 0x03, 0x46, 0x60, 0xb3, 0xd0, 0xe9, - 0x00, 0x45, 0x80, 0x68, 0xa0, 0xb1, 0x10, 0xf0, 0x03, 0x02, 0x01, 0xd0, - 0x00, 0x20, 0x38, 0xbd, 0xdb, 0x68, 0x1b, 0x2b, 0xfa, 0xd9, 0x13, 0x46, - 0xf5, 0x22, 0x83, 0x70, 0x00, 0x23, 0xc5, 0x70, 0x02, 0x70, 0x44, 0x60, - 0x03, 0x76, 0xc0, 0xe9, 0x02, 0x33, 0xc0, 0xe9, 0x04, 0x33, 0xee, 0xe7, - 0xdb, 0x68, 0x00, 0x2b, 0xea, 0xd1, 0x0a, 0x4b, 0xd3, 0xf8, 0x94, 0x00, - 0x30, 0xb9, 0x01, 0x22, 0x1c, 0x21, 0xd3, 0xf8, 0x80, 0x00, 0xff, 0xf7, - 0x8b, 0xfe, 0x01, 0xe0, 0xff, 0xf7, 0x0b, 0xfd, 0x00, 0x28, 0xdb, 0xd0, - 0x01, 0x23, 0xdf, 0xe7, 0x04, 0x46, 0x05, 0x46, 0xeb, 0xe7, 0x00, 0xbf, - 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x98, 0xb1, 0x40, 0xea, 0x01, 0x03, - 0x13, 0xf0, 0x07, 0x03, 0x0e, 0xd1, 0x17, 0x29, 0x0a, 0xd9, 0x01, 0x60, - 0x08, 0x39, 0x10, 0x22, 0x0c, 0x18, 0x42, 0x60, 0x84, 0x60, 0x0b, 0x50, - 0x81, 0x68, 0x4a, 0x60, 0xc3, 0x60, 0x01, 0x23, 0x18, 0x46, 0x10, 0xbd, - 0x00, 0x23, 0xfb, 0xe7, 0x38, 0xb5, 0x1c, 0x4c, 0x25, 0x7a, 0x01, 0x2d, - 0x28, 0xd0, 0x7d, 0xbb, 0x1a, 0x4b, 0x29, 0x46, 0x28, 0x46, 0xe3, 0x65, - 0x10, 0x23, 0xa4, 0xf8, 0x54, 0x30, 0x05, 0x23, 0x23, 0x64, 0xff, 0xf7, - 0xd7, 0xff, 0x08, 0xb1, 0xc4, 0xf8, 0x80, 0x50, 0x00, 0x21, 0x08, 0x46, - 0xff, 0xf7, 0xd0, 0xff, 0xb0, 0xb9, 0xd4, 0xf8, 0x80, 0x30, 0x00, 0x21, - 0x63, 0x67, 0x08, 0x46, 0xff, 0xf7, 0xc8, 0xff, 0x80, 0xb9, 0xd4, 0xf8, - 0x80, 0x30, 0x00, 0x21, 0xa3, 0x67, 0x08, 0x46, 0xff, 0xf7, 0xc0, 0xff, - 0x50, 0xb9, 0xd4, 0xf8, 0x80, 0x30, 0xe3, 0x67, 0x01, 0x23, 0x23, 0x72, - 0x00, 0x20, 0x38, 0xbd, 0x00, 0x23, 0xe8, 0xe7, 0x00, 0x23, 0xee, 0xe7, - 0x00, 0x23, 0xf4, 0xe7, 0x4f, 0xf0, 0xff, 0x30, 0xf5, 0xe7, 0x00, 0xbf, - 0x1c, 0x01, 0x00, 0x24, 0x90, 0xa0, 0x00, 0x24, 0x01, 0x4b, 0xd8, 0x68, - 0x70, 0x47, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x06, 0x4b, 0xda, 0x6a, - 0x3a, 0xb1, 0xd0, 0x69, 0x5b, 0x6c, 0x1b, 0xb1, 0x1b, 0x69, 0x98, 0x42, - 0x28, 0xbf, 0x18, 0x46, 0x70, 0x47, 0x4f, 0xf0, 0xff, 0x30, 0xf5, 0xe7, - 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, 0xd0, 0xb1, 0x02, 0x68, - 0x80, 0x68, 0x98, 0xb1, 0x10, 0xf0, 0x03, 0x03, 0x01, 0xd0, 0x00, 0x20, - 0x10, 0xbd, 0xe1, 0x68, 0x0f, 0x29, 0xfa, 0xd9, 0x14, 0x46, 0xf3, 0x22, - 0x83, 0x70, 0x00, 0x23, 0x44, 0x60, 0x02, 0x70, 0x0d, 0x4a, 0xc0, 0xe9, - 0x02, 0x33, 0x0d, 0x4b, 0x5a, 0x66, 0xef, 0xe7, 0xe3, 0x68, 0x00, 0x2b, - 0xeb, 0xd1, 0x14, 0x46, 0x09, 0x4b, 0xd3, 0xf8, 0x90, 0x00, 0x28, 0xb1, - 0xff, 0xf7, 0x71, 0xfc, 0x00, 0x28, 0xe2, 0xd0, 0x01, 0x23, 0xe6, 0xe7, - 0x01, 0x22, 0x10, 0x21, 0xd3, 0xf8, 0x80, 0x00, 0xff, 0xf7, 0xe4, 0xfd, - 0xf4, 0xe7, 0x00, 0xbf, 0x57, 0x82, 0x01, 0x08, 0x1c, 0x01, 0x00, 0x24, - 0x01, 0x46, 0x08, 0xb5, 0x38, 0xb1, 0x13, 0x20, 0xff, 0xf7, 0xa6, 0xf9, - 0x80, 0xf0, 0x01, 0x00, 0xc0, 0xb2, 0x40, 0x42, 0x08, 0xbd, 0x6f, 0xf0, - 0x03, 0x00, 0xfb, 0xe7, 0x03, 0x68, 0x18, 0x47, 0x70, 0x47, 0x00, 0x00, - 0x00, 0x48, 0x70, 0x47, 0xb0, 0xe7, 0x01, 0x08, 0xd0, 0xe9, 0x09, 0x31, - 0xc2, 0x6a, 0x00, 0x6a, 0x42, 0x43, 0x01, 0xfb, 0x03, 0x23, 0xa0, 0xfb, - 0x01, 0x01, 0x19, 0x44, 0x70, 0x47, 0xd0, 0xe9, 0x06, 0x01, 0x70, 0x47, - 0xd0, 0xe9, 0x04, 0x01, 0x70, 0x47, 0xd0, 0xe9, 0x02, 0x01, 0x70, 0x47, - 0x01, 0x68, 0x2d, 0xe9, 0xf0, 0x47, 0x17, 0x46, 0x98, 0x46, 0x09, 0x6b, - 0x06, 0x46, 0xdd, 0xe9, 0x08, 0x9a, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, - 0x38, 0x46, 0x41, 0x46, 0x07, 0xf0, 0xbc, 0xfd, 0x13, 0x43, 0x02, 0xd0, - 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x87, 0x17, 0xeb, 0x09, 0x04, 0x33, 0x68, - 0x30, 0x46, 0x48, 0xeb, 0x0a, 0x05, 0x14, 0xf1, 0xff, 0x32, 0x19, 0x6b, - 0x45, 0xf1, 0xff, 0x33, 0x88, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x20, 0x46, - 0x29, 0x46, 0x07, 0xf0, 0xa5, 0xfd, 0x13, 0x43, 0xe8, 0xd1, 0x33, 0x68, - 0x30, 0x46, 0x9b, 0x6b, 0x98, 0x47, 0xa9, 0x42, 0x08, 0xbf, 0xa0, 0x42, - 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, 0xde, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, - 0x1e, 0x46, 0x03, 0x68, 0x15, 0x46, 0x04, 0x46, 0x9b, 0x6a, 0xdd, 0xe9, - 0x08, 0x7a, 0x98, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x28, 0x46, 0x31, 0x46, - 0x07, 0xf0, 0x88, 0xfd, 0x13, 0x43, 0x02, 0xd0, 0x00, 0x20, 0xbd, 0xe8, - 0xf0, 0x87, 0x23, 0x68, 0x20, 0x46, 0x9b, 0x6a, 0x98, 0x47, 0x02, 0x46, - 0x0b, 0x46, 0x38, 0x46, 0x51, 0x46, 0x07, 0xf0, 0x79, 0xfd, 0x13, 0x43, - 0xf0, 0xd1, 0x15, 0xeb, 0x07, 0x08, 0x23, 0x68, 0x20, 0x46, 0x46, 0xeb, - 0x0a, 0x09, 0x9b, 0x6b, 0x98, 0x47, 0x49, 0x45, 0x08, 0xbf, 0x40, 0x45, - 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, 0xe2, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, - 0x1e, 0x46, 0x03, 0x68, 0x15, 0x46, 0x04, 0x46, 0x5b, 0x6a, 0xdd, 0xe9, - 0x08, 0x7a, 0x98, 0x47, 0x02, 0x46, 0x0b, 0x46, 0x28, 0x46, 0x31, 0x46, - 0x07, 0xf0, 0x58, 0xfd, 0x13, 0x43, 0x02, 0xd0, 0x00, 0x20, 0xbd, 0xe8, - 0xf0, 0x87, 0x23, 0x68, 0x20, 0x46, 0x5b, 0x6a, 0x98, 0x47, 0x02, 0x46, - 0x0b, 0x46, 0x38, 0x46, 0x51, 0x46, 0x07, 0xf0, 0x49, 0xfd, 0x13, 0x43, - 0xf0, 0xd1, 0x15, 0xeb, 0x07, 0x08, 0x23, 0x68, 0x20, 0x46, 0x46, 0xeb, - 0x0a, 0x09, 0x9b, 0x6b, 0x98, 0x47, 0x49, 0x45, 0x08, 0xbf, 0x40, 0x45, - 0x2c, 0xbf, 0x01, 0x20, 0x00, 0x20, 0xe2, 0xe7, 0x00, 0x48, 0x70, 0x47, - 0xb7, 0xe7, 0x01, 0x08, 0xd0, 0xe9, 0x04, 0x01, 0x70, 0x47, 0xd0, 0xe9, - 0x0a, 0x01, 0x70, 0x47, 0xd0, 0xe9, 0x0a, 0x01, 0x70, 0x47, 0xd0, 0xe9, - 0x08, 0x01, 0x70, 0x47, 0xd0, 0xe9, 0x06, 0x01, 0x70, 0x47, 0x30, 0xb5, - 0x03, 0x99, 0x54, 0x18, 0x04, 0x9a, 0x43, 0xeb, 0x02, 0x05, 0xd0, 0xe9, - 0x04, 0x23, 0xab, 0x42, 0x08, 0xbf, 0xa2, 0x42, 0x2c, 0xbf, 0x01, 0x20, - 0x00, 0x20, 0x30, 0xbd, 0x00, 0x20, 0x70, 0x47, 0x70, 0x47, 0x00, 0x20, - 0x70, 0x47, 0xd0, 0xe9, 0x00, 0x30, 0x18, 0x47, 0xd0, 0xe9, 0x01, 0x32, - 0x01, 0x68, 0x10, 0xb4, 0x01, 0xeb, 0x62, 0x00, 0x54, 0x10, 0xd2, 0x07, - 0x48, 0xbf, 0x0a, 0x59, 0x5d, 0xf8, 0x04, 0x4b, 0x48, 0xbf, 0xd3, 0x58, - 0x18, 0x47, 0x70, 0x47, 0x00, 0x20, 0x50, 0x70, 0x90, 0x70, 0xd0, 0x70, - 0x70, 0x47, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0x47, 0x03, 0x68, 0xdb, 0x6a, - 0x18, 0x47, 0x30, 0xb5, 0xa1, 0xf1, 0x10, 0x04, 0x00, 0x25, 0x00, 0xf0, - 0x0f, 0x02, 0xcd, 0x73, 0x02, 0x39, 0x00, 0x09, 0xd3, 0xb2, 0x09, 0x2a, - 0xcc, 0xbf, 0x37, 0x33, 0x30, 0x33, 0x0b, 0x74, 0x8c, 0x42, 0xf2, 0xd1, - 0x30, 0xbd, 0x00, 0x00, 0x32, 0x23, 0x10, 0xb5, 0x0a, 0x4c, 0x0b, 0x80, - 0x0a, 0x4b, 0xa1, 0x1c, 0x18, 0x68, 0xff, 0xf7, 0xe4, 0xff, 0x09, 0x4b, - 0x04, 0xf1, 0x12, 0x01, 0x18, 0x68, 0xff, 0xf7, 0xde, 0xff, 0x07, 0x4b, - 0x04, 0xf1, 0x22, 0x01, 0x18, 0x68, 0xff, 0xf7, 0xd8, 0xff, 0x20, 0x46, - 0x10, 0xbd, 0x00, 0xbf, 0x58, 0x02, 0x00, 0x24, 0x00, 0xe8, 0xf1, 0x1f, - 0x04, 0xe8, 0xf1, 0x1f, 0x08, 0xe8, 0xf1, 0x1f, 0x04, 0x23, 0x01, 0x48, - 0x0b, 0x80, 0x70, 0x47, 0x54, 0x02, 0x00, 0x24, 0x12, 0x23, 0x01, 0x48, - 0x0b, 0x80, 0x70, 0x47, 0x40, 0x02, 0x00, 0x24, 0x30, 0xb5, 0x01, 0x38, - 0x00, 0x25, 0x2b, 0x46, 0x01, 0x35, 0x44, 0x5d, 0x00, 0x2c, 0xfa, 0xd1, - 0xdb, 0xb2, 0x01, 0x33, 0x5b, 0x00, 0x13, 0x80, 0x0b, 0x70, 0x03, 0x23, - 0x4b, 0x70, 0x02, 0x23, 0x10, 0xf8, 0x01, 0x5f, 0x05, 0xb9, 0x30, 0xbd, - 0x5a, 0x1c, 0xcd, 0x54, 0x02, 0x33, 0xd2, 0xb2, 0xdb, 0xb2, 0x8c, 0x54, - 0xf4, 0xe7, 0x00, 0x00, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, - 0xff, 0xf7, 0xde, 0xff, 0x08, 0x46, 0x08, 0xbd, 0xe8, 0x89, 0x00, 0x24, - 0xbe, 0xe7, 0x01, 0x08, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, - 0xff, 0xf7, 0xd2, 0xff, 0x08, 0x46, 0x08, 0xbd, 0xe8, 0x89, 0x00, 0x24, - 0xcc, 0xe7, 0x01, 0x08, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, - 0xff, 0xf7, 0xc6, 0xff, 0x08, 0x46, 0x08, 0xbd, 0xe8, 0x89, 0x00, 0x24, - 0xd7, 0xe7, 0x01, 0x08, 0x0a, 0x46, 0x03, 0x49, 0x03, 0x48, 0x08, 0xb5, - 0xff, 0xf7, 0xba, 0xff, 0x08, 0x46, 0x08, 0xbd, 0xe8, 0x89, 0x00, 0x24, - 0xe2, 0xe7, 0x01, 0x08, 0x08, 0xb5, 0xd0, 0xf8, 0xb4, 0x32, 0x5b, 0x68, - 0x98, 0x47, 0x00, 0x20, 0x08, 0xbd, 0x08, 0xb5, 0xd0, 0xf8, 0xb4, 0x32, - 0x0b, 0xb9, 0x02, 0x20, 0x08, 0xbd, 0x1b, 0x68, 0x98, 0x47, 0x00, 0x28, - 0xfa, 0xd0, 0xf8, 0xe7, 0xd0, 0xe9, 0x00, 0x30, 0x18, 0x47, 0x00, 0x00, - 0x09, 0x29, 0x08, 0xb5, 0x0a, 0xd8, 0xd0, 0xf8, 0xbc, 0x32, 0x06, 0x39, - 0x53, 0xf8, 0x21, 0x00, 0x10, 0xb1, 0x03, 0x49, 0xff, 0xf7, 0x92, 0xff, - 0x01, 0x48, 0x00, 0xe0, 0x00, 0x20, 0x08, 0xbd, 0xf0, 0x8a, 0x00, 0x24, - 0x0a, 0x23, 0x03, 0x80, 0x00, 0x48, 0x70, 0x47, 0x04, 0x03, 0x00, 0x24, - 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, - 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, - 0x78, 0x23, 0x03, 0x80, 0x00, 0x48, 0x70, 0x47, 0x8c, 0x02, 0x00, 0x24, - 0x38, 0xb5, 0x1e, 0x4c, 0x05, 0x46, 0x23, 0x7a, 0x04, 0x2b, 0x35, 0xd1, - 0xff, 0xf7, 0xe6, 0xfd, 0xe2, 0x6a, 0xa8, 0x42, 0x03, 0x46, 0x94, 0xbf, - 0x00, 0xf1, 0xff, 0x33, 0x2b, 0x46, 0x12, 0xb1, 0xd0, 0x69, 0xc0, 0x1a, - 0xd0, 0x61, 0x62, 0x6c, 0x12, 0xb1, 0x10, 0x69, 0xc0, 0x1a, 0x10, 0x61, - 0xe0, 0x68, 0x03, 0x44, 0x05, 0x44, 0xe3, 0x60, 0xe3, 0x68, 0xab, 0x42, - 0x13, 0xd1, 0x02, 0x23, 0x00, 0x20, 0x23, 0x72, 0xff, 0xf7, 0x18, 0xf8, - 0x00, 0x23, 0x63, 0x72, 0xbf, 0xf3, 0x4f, 0x8f, 0xa2, 0x7a, 0x22, 0xb1, - 0xa3, 0x72, 0x4f, 0xf0, 0x80, 0x52, 0x09, 0x4b, 0x5a, 0x60, 0xbd, 0xe8, - 0x38, 0x40, 0xfe, 0xf7, 0x75, 0xbd, 0x01, 0x33, 0xe3, 0x60, 0xff, 0xf7, - 0x61, 0xf8, 0x23, 0x6d, 0x00, 0x2b, 0xe1, 0xd0, 0x98, 0x47, 0xdf, 0xe7, - 0x38, 0xbd, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x00, 0xed, 0x00, 0xe0, - 0x38, 0xb5, 0x0f, 0x4c, 0x05, 0x46, 0xb4, 0xf8, 0x54, 0x10, 0x04, 0xf1, - 0x56, 0x00, 0xff, 0xf7, 0xfe, 0xf8, 0x81, 0x42, 0x03, 0xd8, 0x02, 0x21, - 0x0a, 0x48, 0xec, 0xf7, 0xe3, 0xff, 0x04, 0xf1, 0x58, 0x00, 0xff, 0xf7, - 0xe7, 0xf8, 0xe3, 0x6d, 0x43, 0xf8, 0x20, 0x50, 0x63, 0x7a, 0x23, 0xb9, - 0x05, 0x4b, 0x4f, 0xf0, 0x80, 0x52, 0x5a, 0x60, 0x38, 0xbd, 0x01, 0x23, - 0xa3, 0x72, 0xfb, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0x26, 0x01, 0x02, 0x80, - 0x00, 0xed, 0x00, 0xe0, 0xf8, 0xb5, 0x9c, 0x46, 0x0d, 0x46, 0x17, 0x46, - 0x04, 0x46, 0x00, 0x28, 0x72, 0xd0, 0x02, 0x78, 0xfa, 0x2a, 0x6f, 0xd1, - 0x00, 0x29, 0x6d, 0xd0, 0x00, 0xf1, 0x28, 0x02, 0x52, 0xe8, 0x00, 0x1f, - 0x11, 0xb9, 0xbf, 0xf3, 0x2f, 0x8f, 0x04, 0xe0, 0x48, 0x1e, 0x42, 0xe8, - 0x00, 0x06, 0x06, 0xb1, 0xf4, 0xe7, 0x11, 0xb1, 0xe6, 0x6a, 0x01, 0x22, - 0x9e, 0xb9, 0xbc, 0xf1, 0x00, 0x0f, 0x5c, 0xd0, 0x61, 0x46, 0x83, 0x20, - 0xfe, 0xf7, 0x52, 0xff, 0x40, 0xb1, 0x30, 0x4b, 0x20, 0x46, 0x59, 0x69, - 0xfe, 0xf7, 0x90, 0xff, 0xef, 0xf3, 0x09, 0x83, 0xc3, 0xe9, 0x02, 0x57, - 0x6f, 0xf0, 0x01, 0x00, 0x23, 0xe0, 0xb1, 0x1c, 0xd1, 0xe8, 0x4f, 0x0f, - 0xc1, 0xe8, 0x43, 0x2f, 0x03, 0xb1, 0xf9, 0xe7, 0x10, 0xf0, 0xff, 0x0f, - 0x44, 0xd0, 0xb6, 0x68, 0xde, 0xe7, 0x9a, 0x60, 0xb2, 0x68, 0xaa, 0xb1, - 0x53, 0x60, 0x62, 0x6a, 0x06, 0xf1, 0x0c, 0x01, 0x28, 0x46, 0x05, 0xf0, - 0x8f, 0xfc, 0x0f, 0xb1, 0xf3, 0x78, 0x3b, 0x70, 0x00, 0x25, 0x04, 0xf1, - 0x0c, 0x07, 0x31, 0x46, 0x38, 0x46, 0x35, 0x70, 0xff, 0xf7, 0xb5, 0xf9, - 0xa3, 0x68, 0x1b, 0xb9, 0x00, 0x20, 0xf8, 0xbd, 0x23, 0x63, 0xe8, 0xe7, - 0x38, 0x46, 0xff, 0xf7, 0xd0, 0xf9, 0x06, 0x46, 0x00, 0x28, 0xf5, 0xd0, - 0x20, 0x46, 0xfe, 0xf7, 0x0c, 0xff, 0x07, 0x46, 0x29, 0x46, 0x01, 0x22, - 0xfe, 0xf7, 0x96, 0xff, 0x38, 0x46, 0xfe, 0xf7, 0xcb, 0xfe, 0x62, 0x6a, - 0x07, 0x46, 0x81, 0x68, 0x06, 0xf1, 0x0c, 0x00, 0x05, 0xf0, 0x66, 0xfc, - 0xf9, 0x23, 0xb5, 0x70, 0x31, 0x46, 0x33, 0x70, 0x20, 0x46, 0xfb, 0x68, - 0xf3, 0x70, 0xff, 0xf7, 0x6e, 0xf9, 0xd9, 0xe7, 0x6f, 0xf0, 0x03, 0x00, - 0xd7, 0xe7, 0x6f, 0xf0, 0x02, 0x00, 0xd4, 0xe7, 0xd6, 0xe9, 0x01, 0x32, - 0x00, 0x2b, 0xb8, 0xd1, 0xe2, 0x62, 0xb7, 0xe7, 0x1c, 0x01, 0x00, 0x24, - 0xf8, 0xb5, 0x81, 0x78, 0x04, 0x46, 0x85, 0x68, 0x00, 0x29, 0x38, 0xd0, - 0x43, 0x68, 0xc6, 0x68, 0x8b, 0xb3, 0x9d, 0x60, 0xa2, 0x68, 0x82, 0xb3, - 0x53, 0x60, 0x00, 0x27, 0x06, 0xf1, 0x0c, 0x05, 0x21, 0x46, 0x28, 0x46, - 0x27, 0x70, 0xff, 0xf7, 0x6a, 0xf9, 0xb3, 0x68, 0x00, 0x2b, 0x4c, 0xd0, - 0x28, 0x46, 0xff, 0xf7, 0x88, 0xf9, 0x04, 0x46, 0x00, 0x28, 0x46, 0xd0, - 0x30, 0x46, 0xfe, 0xf7, 0xc4, 0xfe, 0x05, 0x46, 0x3a, 0x46, 0x39, 0x46, - 0xfe, 0xf7, 0x4e, 0xff, 0x28, 0x46, 0xfe, 0xf7, 0x83, 0xfe, 0x72, 0x6a, - 0x81, 0x68, 0x05, 0x46, 0x04, 0xf1, 0x0c, 0x00, 0x05, 0xf0, 0x1e, 0xfc, - 0xf9, 0x23, 0xa7, 0x70, 0x21, 0x46, 0x23, 0x70, 0x30, 0x46, 0xeb, 0x68, - 0xe3, 0x70, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, 0x24, 0xb9, 0xf5, 0x62, - 0xcc, 0xe7, 0x33, 0x63, 0xcd, 0xe7, 0xab, 0x68, 0x03, 0xb3, 0x5b, 0x78, - 0x83, 0x2b, 0x1d, 0xd1, 0x28, 0x46, 0xfe, 0xf7, 0x9e, 0xfe, 0x06, 0x46, - 0x0a, 0x46, 0xfe, 0xf7, 0x29, 0xff, 0x30, 0x46, 0xfe, 0xf7, 0x5e, 0xfe, - 0x06, 0x46, 0x6a, 0x6a, 0x04, 0xf1, 0x0c, 0x01, 0x80, 0x68, 0x05, 0xf0, - 0xf9, 0xfb, 0xf3, 0x68, 0x0b, 0xb1, 0xe2, 0x78, 0x1a, 0x70, 0x00, 0x23, - 0x21, 0x46, 0x05, 0xf1, 0x0c, 0x00, 0x23, 0x70, 0xbd, 0xe8, 0xf8, 0x40, - 0xff, 0xf7, 0x1d, 0xb9, 0x21, 0x46, 0x28, 0x46, 0xd1, 0xe7, 0xf8, 0xbd, - 0x2d, 0xe9, 0xf0, 0x41, 0x0c, 0x46, 0x17, 0x46, 0x98, 0x46, 0x05, 0x46, - 0x00, 0x28, 0x48, 0xd0, 0x03, 0x78, 0xfa, 0x2b, 0x45, 0xd1, 0x00, 0x29, - 0x43, 0xd0, 0x83, 0x68, 0xc3, 0xb1, 0x5b, 0x78, 0x83, 0x2b, 0x15, 0xd1, - 0xfe, 0xf7, 0x6b, 0xfe, 0x06, 0x46, 0x01, 0x22, 0x00, 0x21, 0xfe, 0xf7, - 0xf5, 0xfe, 0x30, 0x46, 0xfe, 0xf7, 0x2a, 0xfe, 0x06, 0x46, 0x6a, 0x6a, - 0x21, 0x46, 0x80, 0x68, 0x05, 0xf0, 0xc6, 0xfb, 0xf0, 0x68, 0x08, 0xb1, - 0x07, 0x70, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x81, 0x05, 0xf1, 0x0c, 0x00, - 0xff, 0xf7, 0x11, 0xf9, 0x06, 0x46, 0x70, 0xb1, 0x21, 0x46, 0x6a, 0x6a, - 0x0c, 0x30, 0x00, 0x24, 0x05, 0xf0, 0xb4, 0xfb, 0xf9, 0x23, 0x31, 0x46, - 0x28, 0x46, 0x33, 0x70, 0xb4, 0x70, 0xf7, 0x70, 0xff, 0xf7, 0xbd, 0xf8, - 0xe7, 0xe7, 0xb8, 0xf1, 0x00, 0x0f, 0x13, 0xd0, 0x41, 0x46, 0x93, 0x20, - 0xfe, 0xf7, 0x44, 0xfe, 0x40, 0xb1, 0x09, 0x4b, 0x28, 0x46, 0x59, 0x69, - 0xfe, 0xf7, 0x82, 0xfe, 0xef, 0xf3, 0x09, 0x83, 0xc3, 0xe9, 0x02, 0x47, - 0x6f, 0xf0, 0x01, 0x00, 0xd4, 0xe7, 0x6f, 0xf0, 0x03, 0x00, 0xd1, 0xe7, - 0x6f, 0xf0, 0x02, 0x00, 0xce, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, - 0x38, 0xb5, 0x27, 0x4c, 0x23, 0x7a, 0x01, 0x2b, 0x03, 0xd0, 0x4f, 0xf0, - 0xff, 0x35, 0x28, 0x46, 0x38, 0xbd, 0x24, 0x4a, 0x00, 0x21, 0x24, 0x48, - 0xff, 0xf7, 0x84, 0xfa, 0xa0, 0x62, 0x00, 0xf0, 0x4f, 0xf8, 0x05, 0x46, - 0x00, 0x28, 0xf0, 0xd1, 0x20, 0x4a, 0xe1, 0x6c, 0x20, 0x48, 0xff, 0xf7, - 0x79, 0xfa, 0xa0, 0x64, 0x00, 0x28, 0xe8, 0xd0, 0x1e, 0x4a, 0xff, 0x23, - 0x82, 0xf8, 0x22, 0x30, 0x92, 0xf8, 0x22, 0x30, 0xd2, 0x68, 0x63, 0xf0, - 0xff, 0x03, 0xc2, 0xf3, 0x02, 0x22, 0xdb, 0x43, 0x14, 0xbf, 0xb3, 0xfa, - 0x83, 0xf3, 0x20, 0x23, 0xc3, 0xf1, 0x20, 0x03, 0x93, 0x42, 0x98, 0xbf, - 0x53, 0x1c, 0xfe, 0x22, 0x02, 0xfa, 0x03, 0xf3, 0x12, 0x4a, 0xdb, 0xb2, - 0xd3, 0x77, 0xf0, 0x23, 0x82, 0xf8, 0x23, 0x30, 0x93, 0x68, 0x10, 0x4a, - 0xda, 0x63, 0xbf, 0xf3, 0x4f, 0x8f, 0x4f, 0xf0, 0xff, 0x33, 0x23, 0x61, - 0xfe, 0xf7, 0xb4, 0xfb, 0x0c, 0x48, 0xfe, 0xf7, 0xde, 0xfd, 0x02, 0x23, - 0x43, 0x70, 0xa0, 0x61, 0x83, 0xf3, 0x14, 0x88, 0xbf, 0xf3, 0x6f, 0x8f, - 0x23, 0x72, 0xb6, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0xb8, 0xed, 0x01, 0x08, - 0x4d, 0xec, 0x00, 0x08, 0xf4, 0xed, 0x01, 0x08, 0x0d, 0x79, 0x01, 0x08, - 0x00, 0xed, 0x00, 0xe0, 0x5f, 0x06, 0x00, 0x08, 0x38, 0x01, 0x00, 0x24, - 0x38, 0xb5, 0x0d, 0x4c, 0xfa, 0x23, 0x00, 0x25, 0x14, 0x22, 0x23, 0x70, - 0x08, 0x23, 0x04, 0x21, 0x04, 0xf1, 0x0c, 0x00, 0xa5, 0x70, 0xc4, 0xe9, - 0x09, 0x35, 0x08, 0x4b, 0xc4, 0xe9, 0x01, 0x55, 0xc4, 0xe9, 0x0b, 0x55, - 0xff, 0xf7, 0x86, 0xf8, 0x05, 0x4b, 0x06, 0x4a, 0x28, 0x46, 0xdc, 0x64, - 0x1a, 0x67, 0x05, 0x4a, 0x1a, 0x65, 0x38, 0xbd, 0xd0, 0xa0, 0x00, 0x24, - 0x04, 0xa1, 0x00, 0x24, 0x1c, 0x01, 0x00, 0x24, 0x35, 0x5b, 0x01, 0x08, - 0x41, 0x79, 0x01, 0x08, 0x38, 0xb5, 0x11, 0x4c, 0x23, 0x7a, 0x02, 0x2b, - 0x1c, 0xd1, 0x10, 0x4b, 0x1d, 0x68, 0x28, 0x46, 0xfa, 0xf7, 0x33, 0xfa, - 0x00, 0x23, 0x4f, 0xf0, 0x00, 0x72, 0x85, 0xf8, 0x3f, 0x30, 0x0c, 0x4b, - 0x5a, 0x60, 0x01, 0x22, 0x62, 0x72, 0xbf, 0xf3, 0x4f, 0x8f, 0x59, 0x68, - 0xc9, 0x00, 0x03, 0xd5, 0x4f, 0xf0, 0x00, 0x61, 0x59, 0x60, 0xa2, 0x72, - 0x04, 0x23, 0x23, 0x72, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0x96, 0xbb, - 0x00, 0x20, 0x38, 0xbd, 0x1c, 0x01, 0x00, 0x24, 0x88, 0x86, 0x00, 0x24, - 0x00, 0xed, 0x00, 0xe0, 0x10, 0xb5, 0x0b, 0x4c, 0x20, 0x46, 0xfa, 0xf7, - 0x89, 0xfa, 0xb0, 0xfa, 0x80, 0xf1, 0x20, 0x46, 0x08, 0x4c, 0x49, 0x09, - 0xfa, 0xf7, 0x8a, 0xfa, 0x20, 0x46, 0xfa, 0xf7, 0x7f, 0xfa, 0xb0, 0xfa, - 0x80, 0xf1, 0x20, 0x46, 0x49, 0x09, 0xbd, 0xe8, 0x10, 0x40, 0xfa, 0xf7, - 0x7f, 0xba, 0x00, 0xbf, 0xf8, 0x06, 0x00, 0x24, 0x80, 0x2e, 0x00, 0x24, - 0x10, 0xb5, 0x02, 0x24, 0xc0, 0xe9, 0x07, 0x22, 0xc0, 0xf8, 0x94, 0x42, - 0xd0, 0xf8, 0xc0, 0x02, 0xec, 0xf7, 0x51, 0xfd, 0x00, 0x20, 0x10, 0xbd, - 0x08, 0xb5, 0x00, 0x22, 0x04, 0x23, 0x11, 0x46, 0xc0, 0xf8, 0x94, 0x32, - 0xd0, 0xf8, 0xc0, 0x02, 0xec, 0xf7, 0x45, 0xfd, 0x00, 0x20, 0x08, 0xbd, - 0x38, 0xb5, 0x03, 0x68, 0x04, 0x46, 0x00, 0x25, 0xdb, 0x6c, 0x98, 0x47, - 0x10, 0x4b, 0x03, 0x22, 0x7c, 0x20, 0x83, 0xf8, 0x30, 0x20, 0x0f, 0x4a, - 0x11, 0x68, 0x21, 0xf0, 0x03, 0x01, 0x11, 0x60, 0x5d, 0x63, 0x1a, 0x60, - 0x83, 0xf8, 0x30, 0x50, 0xf3, 0xf7, 0x2c, 0xfb, 0x0a, 0x4a, 0x20, 0x46, - 0xd2, 0xf8, 0xdc, 0x30, 0x23, 0xf4, 0x00, 0x73, 0xc2, 0xf8, 0xdc, 0x30, - 0x23, 0x68, 0x84, 0xf8, 0x54, 0x50, 0x84, 0xf8, 0x80, 0x50, 0x1b, 0x6d, - 0x98, 0x47, 0x28, 0x46, 0x38, 0xbd, 0x00, 0xbf, 0x04, 0x6c, 0x00, 0x24, - 0x00, 0x24, 0x02, 0x48, 0x00, 0x44, 0x02, 0x58, 0x38, 0xb5, 0xd0, 0xf8, - 0xb4, 0x32, 0x04, 0x46, 0x01, 0x79, 0x5b, 0x68, 0x98, 0x47, 0xd4, 0xf8, - 0xc0, 0x42, 0x94, 0xf8, 0xbc, 0x33, 0x01, 0x2b, 0x21, 0xd0, 0x25, 0x68, - 0x01, 0x23, 0x84, 0xf8, 0xbc, 0x33, 0x28, 0x46, 0xab, 0x68, 0x23, 0xf0, - 0x01, 0x03, 0xab, 0x60, 0xef, 0xf7, 0x0a, 0xfd, 0x4f, 0xf4, 0x84, 0x63, - 0x22, 0x68, 0x13, 0x61, 0x0a, 0x4b, 0x01, 0x3b, 0x02, 0xd0, 0x11, 0x69, - 0x89, 0x06, 0xfa, 0xd4, 0xa3, 0x6a, 0x01, 0x2b, 0x06, 0xd1, 0xa3, 0x69, - 0x01, 0x2b, 0x03, 0xd0, 0xab, 0x6b, 0x23, 0xf4, 0x80, 0x33, 0xab, 0x63, - 0x00, 0x23, 0x84, 0xf8, 0xbc, 0x33, 0x00, 0x20, 0x38, 0xbd, 0x00, 0xbf, - 0x41, 0x0d, 0x03, 0x00, 0x08, 0xb5, 0xff, 0xf7, 0xc9, 0xff, 0xbf, 0xf3, - 0x4f, 0x8f, 0x05, 0x49, 0x05, 0x4b, 0xca, 0x68, 0x02, 0xf4, 0xe0, 0x62, - 0x13, 0x43, 0xcb, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0x00, 0xbf, 0xfd, 0xe7, - 0x00, 0xed, 0x00, 0xe0, 0x04, 0x00, 0xfa, 0x05, 0x2d, 0xe9, 0xf7, 0x43, - 0x0d, 0x78, 0x00, 0x23, 0x06, 0x46, 0xd0, 0xf8, 0xb8, 0x42, 0x15, 0xf0, - 0x60, 0x05, 0xad, 0xf8, 0x06, 0x30, 0x00, 0xf0, 0x7c, 0x81, 0x20, 0x2d, - 0x40, 0xf0, 0x8f, 0x81, 0x91, 0xf8, 0x01, 0x80, 0xb8, 0xf1, 0x06, 0x0f, - 0x00, 0xf2, 0x89, 0x81, 0xdf, 0xe8, 0x18, 0xf0, 0x44, 0x01, 0x07, 0x00, - 0x43, 0x00, 0xb4, 0x00, 0x0b, 0x01, 0x22, 0x01, 0x27, 0x01, 0x41, 0xf2, - 0x18, 0x03, 0xca, 0x88, 0xe0, 0x5c, 0x02, 0xb3, 0x02, 0x28, 0x01, 0xd0, - 0x05, 0x28, 0x18, 0xd1, 0x49, 0x88, 0x04, 0xf5, 0x80, 0x53, 0x19, 0x60, - 0x41, 0xf2, 0x04, 0x03, 0x41, 0xf2, 0x18, 0x01, 0xe2, 0x50, 0x03, 0x23, - 0x63, 0x54, 0x41, 0xf2, 0x14, 0x01, 0x63, 0x54, 0x21, 0x46, 0xd6, 0xf8, - 0xc0, 0x02, 0xc6, 0xf8, 0x94, 0x32, 0xc6, 0xe9, 0x57, 0x22, 0xec, 0xf7, - 0xa3, 0xfc, 0x00, 0x25, 0x15, 0xe0, 0x30, 0x46, 0xec, 0xf7, 0x7e, 0xfc, - 0xf9, 0xe7, 0x05, 0x28, 0x01, 0xd0, 0x02, 0x28, 0xf7, 0xd1, 0x4f, 0xf4, - 0x83, 0x72, 0x00, 0x25, 0xe2, 0x52, 0x41, 0xf2, 0x11, 0x03, 0x06, 0x22, - 0xe5, 0x54, 0x41, 0xf2, 0x12, 0x03, 0xe5, 0x52, 0x41, 0xf2, 0x14, 0x03, - 0xe2, 0x54, 0x28, 0x46, 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0xca, 0x88, - 0x41, 0xf2, 0x18, 0x00, 0x00, 0x2a, 0x5f, 0xd0, 0x20, 0x5c, 0x04, 0xf5, - 0x80, 0x53, 0x02, 0x28, 0x01, 0xd0, 0x09, 0x28, 0x52, 0xd1, 0x4f, 0x88, - 0x41, 0xf2, 0x04, 0x09, 0x1f, 0x60, 0x41, 0xf2, 0x18, 0x03, 0x44, 0xf8, - 0x09, 0x20, 0xdf, 0xb9, 0x03, 0x2a, 0x21, 0x46, 0x4f, 0xf0, 0x03, 0x02, - 0x98, 0xbf, 0x4f, 0xf0, 0x09, 0x08, 0x04, 0xf8, 0x03, 0x80, 0x41, 0xf2, - 0x11, 0x03, 0xe7, 0x54, 0x41, 0xf2, 0x12, 0x03, 0xe7, 0x52, 0x41, 0xf2, - 0x14, 0x03, 0x04, 0xf8, 0x03, 0x80, 0x4f, 0xf4, 0x04, 0x53, 0x23, 0x80, - 0x41, 0x23, 0xa3, 0x70, 0x30, 0x46, 0xff, 0xf7, 0xe7, 0xfe, 0xb2, 0xe7, - 0x01, 0x2f, 0x41, 0xf2, 0x11, 0x01, 0x1b, 0xd0, 0x09, 0x20, 0x00, 0x25, - 0x02, 0x3f, 0xe0, 0x54, 0x41, 0xf2, 0x12, 0x03, 0x65, 0x54, 0x21, 0x46, - 0xe5, 0x52, 0x41, 0xf2, 0x14, 0x03, 0xe0, 0x54, 0x41, 0xf2, 0x08, 0x03, - 0xe0, 0x58, 0xd6, 0xf8, 0xbc, 0x32, 0x00, 0xeb, 0x07, 0x30, 0x1b, 0x6a, - 0x98, 0x47, 0x34, 0xf8, 0x09, 0x20, 0x01, 0x46, 0x30, 0x46, 0xff, 0xf7, - 0xc7, 0xfe, 0xaa, 0xe7, 0x0f, 0x22, 0x00, 0x25, 0xe2, 0x54, 0x41, 0xf2, - 0x12, 0x03, 0x65, 0x54, 0xe5, 0x52, 0x41, 0xf2, 0x14, 0x03, 0xe2, 0x54, - 0x30, 0x46, 0xec, 0xf7, 0x09, 0xfc, 0x9c, 0xe7, 0x00, 0x25, 0x41, 0xf2, - 0x04, 0x02, 0xa5, 0x50, 0x1d, 0x60, 0xf5, 0xe7, 0x02, 0x23, 0x41, 0xf2, - 0x11, 0x01, 0x23, 0x54, 0x62, 0x54, 0x41, 0xf2, 0x12, 0x01, 0x62, 0x52, - 0x41, 0xf2, 0x14, 0x01, 0x63, 0x54, 0x72, 0xe7, 0x41, 0xf2, 0x18, 0x02, - 0x04, 0xf5, 0x80, 0x55, 0xa3, 0x5c, 0x10, 0x35, 0x03, 0x2b, 0x04, 0xd0, - 0x06, 0x2b, 0x2d, 0xd0, 0x06, 0x22, 0x29, 0x46, 0xae, 0xe7, 0x41, 0xf2, - 0x04, 0x03, 0x41, 0xf2, 0x11, 0x00, 0xe3, 0x58, 0xeb, 0xb1, 0x04, 0x23, - 0x41, 0xf2, 0x12, 0x01, 0xa3, 0x54, 0x00, 0x22, 0x22, 0x54, 0x62, 0x52, - 0x41, 0xf2, 0x14, 0x02, 0xa3, 0x54, 0x41, 0xf2, 0x08, 0x03, 0xe0, 0x58, - 0x04, 0xf5, 0x80, 0x53, 0x19, 0x68, 0xd6, 0xf8, 0xbc, 0x32, 0x31, 0xb9, - 0x22, 0x78, 0x41, 0x2a, 0x03, 0xd1, 0x5b, 0x6a, 0x2a, 0x46, 0x98, 0x47, - 0xdc, 0xe7, 0x5b, 0x6a, 0x2a, 0x46, 0x01, 0x21, 0xf9, 0xe7, 0x05, 0x21, - 0xa1, 0x54, 0x23, 0x54, 0x41, 0xf2, 0x12, 0x02, 0xa3, 0x52, 0x0d, 0xe0, - 0x41, 0xf2, 0x19, 0x03, 0xe3, 0x5c, 0x01, 0x2b, 0x0c, 0xd1, 0x07, 0x21, - 0xa1, 0x54, 0x41, 0xf2, 0x11, 0x02, 0xa3, 0x54, 0x41, 0xf2, 0x12, 0x03, - 0x00, 0x22, 0xe2, 0x52, 0x41, 0xf2, 0x14, 0x03, 0xe1, 0x54, 0xbf, 0xe7, - 0x00, 0x2b, 0xbd, 0xd1, 0x56, 0x49, 0x91, 0xf8, 0x2f, 0x10, 0x49, 0x07, - 0xb8, 0xd5, 0x02, 0x21, 0xa1, 0x54, 0x41, 0xf2, 0x11, 0x02, 0xa3, 0x54, - 0xdc, 0xe7, 0x41, 0xf2, 0x18, 0x03, 0x41, 0xf2, 0x10, 0x01, 0xe2, 0x5c, - 0x0a, 0x2a, 0x07, 0xd1, 0x02, 0x22, 0x00, 0x25, 0xe2, 0x54, 0x41, 0xf2, - 0x14, 0x03, 0x65, 0x50, 0xe2, 0x52, 0x24, 0xe7, 0x0a, 0x22, 0xe2, 0x54, - 0x0e, 0x23, 0x63, 0x50, 0x41, 0xf2, 0x14, 0x03, 0xe2, 0x52, 0x04, 0xe7, - 0x04, 0xf5, 0x80, 0x51, 0x01, 0x22, 0x18, 0x31, 0x48, 0xe7, 0x41, 0xf2, - 0x18, 0x02, 0xa3, 0x5c, 0x09, 0x2b, 0x3f, 0xf6, 0xfa, 0xae, 0x4f, 0xf4, - 0x1b, 0x75, 0xdd, 0x40, 0xed, 0x43, 0x15, 0xf0, 0x01, 0x05, 0x7f, 0xf4, - 0xf2, 0xae, 0x02, 0x23, 0xa3, 0x54, 0x41, 0xf2, 0x10, 0x02, 0xa5, 0x50, - 0x41, 0xf2, 0x14, 0x02, 0xa3, 0x52, 0x04, 0xf5, 0x80, 0x53, 0x1d, 0x60, - 0x41, 0xf2, 0x04, 0x03, 0xe5, 0x50, 0xfa, 0xe6, 0x41, 0xf2, 0x18, 0x00, - 0x22, 0x5c, 0x09, 0x2a, 0x14, 0xd8, 0x4f, 0xf4, 0x1b, 0x73, 0xd3, 0x40, - 0xdb, 0x43, 0x13, 0xf0, 0x01, 0x03, 0x0d, 0xd1, 0x02, 0x22, 0x22, 0x54, - 0x41, 0xf2, 0x10, 0x00, 0x23, 0x50, 0x41, 0xf2, 0x14, 0x00, 0x22, 0x52, - 0x04, 0xf5, 0x80, 0x52, 0x13, 0x60, 0x41, 0xf2, 0x04, 0x02, 0xa3, 0x50, - 0x27, 0x4b, 0x93, 0xf8, 0x30, 0x50, 0x15, 0xf0, 0x10, 0x05, 0x08, 0xd0, - 0x30, 0x46, 0x45, 0x46, 0xff, 0xf7, 0x38, 0xfe, 0xd6, 0xf8, 0xc0, 0x02, - 0xf1, 0xf7, 0x62, 0xf8, 0xd1, 0xe6, 0x48, 0x88, 0xf3, 0xf7, 0x58, 0xf9, - 0xcd, 0xe6, 0x4f, 0x78, 0x0b, 0x2f, 0x12, 0xd8, 0xdf, 0xe8, 0x07, 0xf0, - 0x06, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x11, 0x11, 0x11, 0x23, 0x2c, - 0x90, 0xf8, 0x9c, 0x32, 0x03, 0x2b, 0x06, 0xd1, 0x02, 0x22, 0x0d, 0xf1, - 0x06, 0x01, 0x3d, 0x46, 0xff, 0xf7, 0xd4, 0xfd, 0xb7, 0xe6, 0x30, 0x46, - 0x02, 0x25, 0xec, 0xf7, 0x1f, 0xfb, 0xb2, 0xe6, 0x4b, 0x88, 0x1b, 0x12, - 0x21, 0x2b, 0x05, 0xd1, 0xca, 0x88, 0x0f, 0x49, 0x09, 0x2a, 0x28, 0xbf, - 0x09, 0x22, 0xf9, 0xe6, 0x00, 0x22, 0x11, 0x46, 0xf6, 0xe6, 0x90, 0xf8, - 0x9c, 0x32, 0x03, 0x2b, 0xe9, 0xd1, 0x04, 0xf5, 0x80, 0x51, 0x01, 0x22, - 0x0c, 0x31, 0xed, 0xe6, 0x8b, 0x78, 0x03, 0x2b, 0xe1, 0xd8, 0x90, 0xf8, - 0x9c, 0x22, 0x03, 0x2a, 0xdd, 0xd1, 0x41, 0xf2, 0x0c, 0x02, 0xa3, 0x50, - 0x91, 0xe6, 0x00, 0xbf, 0x8c, 0x02, 0x00, 0x24, 0xb9, 0x02, 0x00, 0x24, - 0xf0, 0xb5, 0x41, 0xf2, 0x18, 0x02, 0xd0, 0xf8, 0xb8, 0x42, 0x89, 0xb0, - 0x07, 0x46, 0xa3, 0x5c, 0x04, 0x2b, 0x65, 0xd1, 0x04, 0xf5, 0x80, 0x56, - 0x41, 0xf2, 0x04, 0x03, 0x31, 0x68, 0x00, 0x29, 0x4f, 0xd1, 0x22, 0x78, - 0xaa, 0xb9, 0xe3, 0x58, 0x01, 0x2b, 0x41, 0xd1, 0x00, 0x25, 0x41, 0xf2, - 0x04, 0x03, 0x41, 0xf2, 0x18, 0x02, 0xe5, 0x50, 0x03, 0x23, 0x35, 0x60, - 0xa3, 0x54, 0x41, 0xf2, 0x11, 0x02, 0xa5, 0x54, 0x41, 0xf2, 0x12, 0x02, - 0xa5, 0x52, 0x41, 0xf2, 0x14, 0x02, 0xa3, 0x54, 0x2b, 0xe0, 0x21, 0x2a, - 0x10, 0xd1, 0xe3, 0x58, 0x05, 0x2b, 0x29, 0xd1, 0xe3, 0x78, 0xa2, 0x78, - 0x1b, 0x04, 0x03, 0xeb, 0x02, 0x23, 0x62, 0x78, 0x13, 0x44, 0x22, 0x79, - 0x03, 0xeb, 0x02, 0x63, 0x41, 0xf2, 0x08, 0x02, 0xa3, 0x50, 0xd9, 0xe7, - 0x41, 0x2a, 0x19, 0xd1, 0xe3, 0x58, 0x05, 0x2b, 0x16, 0xd1, 0xe3, 0x78, - 0xa0, 0x78, 0x1b, 0x04, 0x03, 0xeb, 0x00, 0x23, 0x60, 0x78, 0x03, 0x44, - 0x20, 0x79, 0x03, 0xeb, 0x00, 0x60, 0x41, 0xf2, 0x08, 0x03, 0xe0, 0x50, - 0xd7, 0xf8, 0xbc, 0x32, 0x9b, 0x69, 0x98, 0x47, 0x00, 0x28, 0xc1, 0xd0, - 0x02, 0x25, 0x28, 0x46, 0x09, 0xb0, 0xf0, 0xbd, 0x00, 0x23, 0x41, 0xf2, - 0x04, 0x02, 0x38, 0x46, 0xa3, 0x50, 0x33, 0x60, 0xec, 0xf7, 0x98, 0xfa, - 0xb4, 0xe7, 0x01, 0x29, 0xb2, 0xd9, 0x41, 0xf2, 0x08, 0x02, 0x02, 0x39, - 0xa0, 0x58, 0xd7, 0xf8, 0xbc, 0x22, 0x00, 0xeb, 0x01, 0x31, 0x20, 0x46, - 0xd5, 0x69, 0xe2, 0x58, 0xa8, 0x47, 0xe1, 0xe7, 0x07, 0x2b, 0x4f, 0xf0, - 0x00, 0x03, 0x13, 0xd1, 0x41, 0xf2, 0x19, 0x01, 0x63, 0x54, 0x18, 0x49, - 0x91, 0xf8, 0x2f, 0x50, 0x41, 0xf2, 0x11, 0x01, 0x15, 0xf0, 0x04, 0x05, - 0x0a, 0xd0, 0x06, 0x20, 0xa0, 0x54, 0x41, 0xf2, 0x12, 0x02, 0x63, 0x54, - 0xa3, 0x52, 0x41, 0xf2, 0x14, 0x02, 0xa0, 0x54, 0x1d, 0x46, 0xca, 0xe7, - 0x08, 0x23, 0xa3, 0x54, 0x41, 0xf2, 0x12, 0x02, 0x65, 0x54, 0xa5, 0x52, - 0x41, 0xf2, 0x14, 0x02, 0xa3, 0x54, 0xd0, 0xf8, 0xbc, 0x32, 0x5b, 0x69, - 0x98, 0x47, 0x09, 0x4b, 0x09, 0x4a, 0x00, 0x21, 0x09, 0x48, 0x07, 0x92, - 0x06, 0x95, 0x00, 0x92, 0xcd, 0xe9, 0x04, 0x37, 0x04, 0xab, 0xcd, 0xe9, - 0x02, 0x01, 0x06, 0x48, 0x0e, 0xcb, 0xf9, 0xf7, 0x14, 0xff, 0xac, 0xe7, - 0x8c, 0x02, 0x00, 0x24, 0x41, 0x5f, 0x01, 0x08, 0xf9, 0x58, 0x01, 0x08, - 0x40, 0x0d, 0x03, 0x00, 0x28, 0x06, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, - 0x04, 0xf0, 0x5a, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x10, 0xb5, 0x04, 0x46, - 0x04, 0xf0, 0x54, 0xff, 0x20, 0x46, 0x10, 0xbd, 0x38, 0xb5, 0xd0, 0xf8, - 0xb8, 0x32, 0x00, 0x25, 0x41, 0xf2, 0x18, 0x01, 0x04, 0x46, 0x03, 0xf5, - 0x80, 0x52, 0x15, 0x60, 0x41, 0xf2, 0x04, 0x02, 0x9d, 0x50, 0x02, 0x22, - 0x5a, 0x54, 0x41, 0xf2, 0x10, 0x01, 0x5d, 0x54, 0x41, 0xf2, 0x14, 0x01, - 0x5a, 0x54, 0xd0, 0xf8, 0xb8, 0x02, 0x18, 0xb1, 0x04, 0xf0, 0x38, 0xff, - 0xc4, 0xf8, 0xb8, 0x52, 0x00, 0x20, 0x38, 0xbd, 0x2d, 0xe9, 0xf0, 0x4f, - 0x8b, 0xb0, 0x01, 0x68, 0x06, 0x46, 0x93, 0x46, 0x14, 0x9f, 0x15, 0x9c, - 0x00, 0x97, 0x01, 0x94, 0x49, 0x6c, 0x88, 0x47, 0x00, 0x28, 0x00, 0xf0, - 0xbf, 0x80, 0x33, 0x68, 0x30, 0x46, 0xdb, 0x6c, 0x98, 0x47, 0x96, 0xf8, - 0x80, 0x30, 0x43, 0xb9, 0x33, 0x68, 0x30, 0x46, 0x5b, 0x4c, 0x1b, 0x6d, - 0x98, 0x47, 0x20, 0x46, 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x59, 0x4c, - 0x94, 0xf8, 0x30, 0x30, 0x25, 0x46, 0x01, 0x2b, 0x5f, 0xfa, 0x83, 0xfa, - 0x1a, 0xd1, 0x4f, 0xf0, 0x00, 0x09, 0x58, 0x46, 0xd6, 0xe9, 0x08, 0x23, - 0x49, 0x46, 0xcd, 0xe9, 0x02, 0x32, 0x06, 0xf0, 0x47, 0xfe, 0x03, 0x9a, - 0x80, 0x46, 0x02, 0x9b, 0xb8, 0x1a, 0x49, 0x46, 0x58, 0x44, 0x06, 0xf0, - 0x3f, 0xfe, 0x80, 0x45, 0x07, 0x46, 0xc4, 0xf8, 0x34, 0x90, 0x05, 0xd9, - 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x63, 0x63, 0x63, 0x48, 0x4c, 0x80, 0xe0, - 0x23, 0x6d, 0x98, 0x42, 0x03, 0xd9, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x73, - 0xf5, 0xe7, 0x03, 0x23, 0xd4, 0xf8, 0x00, 0x90, 0x84, 0xf8, 0x30, 0x30, - 0x23, 0x6c, 0x9a, 0x06, 0x09, 0xd4, 0x41, 0x4b, 0xc9, 0xf8, 0x38, 0x30, - 0x63, 0x6b, 0x43, 0xf0, 0x80, 0x63, 0x63, 0x63, 0x84, 0xf8, 0x30, 0xa0, - 0xe4, 0xe7, 0xd9, 0xf8, 0x14, 0x30, 0x9b, 0x01, 0x06, 0xd5, 0x3a, 0x4b, - 0xc9, 0xf8, 0x38, 0x30, 0x63, 0x6b, 0x43, 0xf4, 0x00, 0x63, 0xf0, 0xe7, - 0xa3, 0x6b, 0x01, 0x2b, 0x04, 0xd0, 0x03, 0x2b, 0x36, 0xd0, 0x4f, 0xea, - 0x48, 0x28, 0x47, 0x02, 0x20, 0x24, 0x00, 0x23, 0xcd, 0xf8, 0x14, 0x80, - 0x4f, 0xf4, 0x80, 0x7a, 0x4f, 0xf4, 0x80, 0x58, 0x05, 0xa9, 0x48, 0x46, - 0xcd, 0xe9, 0x06, 0x4a, 0xcd, 0xe9, 0x08, 0x38, 0xec, 0xf7, 0x82, 0xfb, - 0x41, 0xf2, 0x88, 0x32, 0x21, 0x46, 0x48, 0x46, 0xef, 0xf7, 0x3e, 0xfa, - 0x48, 0xb1, 0x2b, 0x68, 0x26, 0x4a, 0x9a, 0x63, 0x6b, 0x6b, 0x18, 0x43, - 0x01, 0x23, 0x68, 0x63, 0x85, 0xf8, 0x30, 0x30, 0xb0, 0xe7, 0x2c, 0x68, - 0x05, 0xa9, 0x05, 0x97, 0x21, 0x27, 0xcd, 0xe9, 0x08, 0x08, 0x20, 0x46, - 0xcd, 0xe9, 0x06, 0x7a, 0xec, 0xf7, 0x66, 0xfb, 0x41, 0xf2, 0x88, 0x32, - 0x39, 0x46, 0x20, 0x46, 0xef, 0xf7, 0x22, 0xfa, 0x00, 0x28, 0xe2, 0xd1, - 0x00, 0x23, 0x4f, 0xf4, 0x80, 0x72, 0x26, 0x27, 0x2c, 0x68, 0x05, 0xa9, - 0x20, 0x46, 0xcd, 0xe9, 0x07, 0x23, 0xcd, 0xe9, 0x05, 0x37, 0x4f, 0xf4, - 0x80, 0x53, 0x09, 0x93, 0xec, 0xf7, 0x4e, 0xfb, 0x4f, 0xf2, 0x18, 0x62, - 0x39, 0x46, 0x20, 0x46, 0xef, 0xf7, 0x0a, 0xfa, 0x28, 0xb1, 0x2b, 0x68, - 0x0c, 0x4a, 0x9a, 0x63, 0x6c, 0x6b, 0x20, 0x43, 0xca, 0xe7, 0x01, 0x23, - 0x04, 0x46, 0x85, 0xf8, 0x30, 0x30, 0xef, 0xf7, 0x91, 0xfa, 0x04, 0x28, - 0xfb, 0xd1, 0x33, 0x68, 0x30, 0x46, 0x1b, 0x6d, 0x98, 0x47, 0x4c, 0xe7, - 0x04, 0x4c, 0x4a, 0xe7, 0x74, 0xec, 0xff, 0xff, 0x04, 0x6c, 0x00, 0x24, - 0x6e, 0xec, 0xff, 0xff, 0xff, 0x0f, 0xe0, 0x1f, 0x75, 0xec, 0xff, 0xff, - 0x2d, 0xe9, 0xf0, 0x4f, 0x8b, 0xb0, 0x0e, 0x46, 0x01, 0x68, 0x05, 0x46, - 0x93, 0x46, 0x9a, 0x46, 0xdd, 0xe9, 0x14, 0x78, 0xcd, 0xe9, 0x00, 0x78, - 0x09, 0x6c, 0x88, 0x47, 0x00, 0x28, 0x00, 0xf0, 0xfe, 0x80, 0x2b, 0x68, - 0x28, 0x46, 0xdb, 0x6c, 0x98, 0x47, 0x95, 0xf8, 0x80, 0x30, 0x43, 0xb9, - 0x2b, 0x68, 0x28, 0x46, 0x7b, 0x4c, 0x1b, 0x6d, 0x98, 0x47, 0x20, 0x46, - 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xab, 0x6d, 0x78, 0x4c, 0x03, 0x93, - 0xd5, 0xe9, 0x08, 0x89, 0xee, 0xf7, 0xae, 0xf9, 0x07, 0x46, 0x26, 0xb9, - 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x63, 0x63, 0x63, 0x68, 0xe0, 0x94, 0xf8, - 0x30, 0x30, 0x01, 0x2b, 0x40, 0xf0, 0xd7, 0x80, 0x42, 0x46, 0x4b, 0x46, - 0x51, 0x46, 0x58, 0x46, 0x06, 0xf0, 0x64, 0xfd, 0x82, 0x46, 0x42, 0x46, - 0x4b, 0x46, 0xdd, 0xe9, 0x14, 0x01, 0x06, 0xf0, 0x5d, 0xfd, 0x22, 0x6d, - 0x0a, 0xeb, 0x00, 0x01, 0x00, 0x23, 0x80, 0x46, 0x91, 0x42, 0x63, 0x63, - 0x03, 0xd9, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x73, 0xdf, 0xe7, 0xd4, 0xf8, - 0x00, 0xb0, 0x03, 0x22, 0x4f, 0xea, 0x48, 0x29, 0x84, 0xf8, 0x30, 0x20, - 0xcb, 0xf8, 0x2c, 0x30, 0xa3, 0x6b, 0x01, 0x2b, 0x4f, 0xf0, 0xff, 0x33, - 0xcb, 0xf8, 0x24, 0x30, 0x18, 0xbf, 0x4f, 0xea, 0x4a, 0x2a, 0xcb, 0xf8, - 0x28, 0x90, 0xb8, 0xf1, 0x01, 0x0f, 0xdb, 0xf8, 0x2c, 0x30, 0x23, 0xf0, - 0xff, 0x03, 0x43, 0xf0, 0x90, 0x03, 0xcb, 0xf8, 0x2c, 0x30, 0xdb, 0xf8, - 0x0c, 0x30, 0x43, 0xf0, 0x40, 0x03, 0xcb, 0xf8, 0x0c, 0x30, 0x27, 0xd9, - 0x20, 0x23, 0xcd, 0xf8, 0x14, 0xa0, 0x4f, 0xf0, 0x19, 0x0a, 0xe3, 0x62, - 0x4f, 0xf4, 0x80, 0x71, 0x00, 0x23, 0x58, 0x46, 0xcd, 0xf8, 0x18, 0xa0, - 0xcd, 0xe9, 0x07, 0x13, 0x4f, 0xf4, 0x80, 0x53, 0x05, 0xa9, 0x09, 0x93, - 0xec, 0xf7, 0xa2, 0xfa, 0x41, 0xf2, 0x88, 0x32, 0x51, 0x46, 0x58, 0x46, - 0xef, 0xf7, 0x5e, 0xf9, 0x78, 0xb3, 0x23, 0x68, 0x43, 0x4a, 0x9a, 0x63, - 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, - 0x00, 0x23, 0xe3, 0x62, 0x3f, 0x4c, 0x67, 0xe0, 0x10, 0x23, 0xcd, 0xf8, - 0x14, 0xa0, 0x4f, 0xf0, 0x18, 0x0a, 0xe3, 0x62, 0xd6, 0xe7, 0x43, 0x6b, - 0x5a, 0x04, 0x0c, 0xd5, 0xb9, 0xf1, 0x1f, 0x0f, 0x09, 0xd9, 0x06, 0xf1, - 0x20, 0x03, 0x56, 0xf8, 0x04, 0x2b, 0xb3, 0x42, 0xc0, 0xf8, 0x80, 0x20, - 0xf9, 0xd1, 0xa9, 0xf1, 0x20, 0x09, 0xee, 0xf7, 0x23, 0xf9, 0x03, 0x9b, - 0xc0, 0x1b, 0x83, 0x42, 0x05, 0xd8, 0x23, 0x68, 0x2e, 0x4a, 0x9a, 0x63, - 0x63, 0x6b, 0x63, 0x63, 0xd5, 0xe7, 0x20, 0x68, 0x43, 0x6b, 0x13, 0xf4, - 0x8d, 0x7f, 0xde, 0xd0, 0xc3, 0x68, 0x23, 0xf0, 0x40, 0x03, 0xc3, 0x60, - 0x43, 0x6b, 0xdb, 0x05, 0x09, 0xd5, 0xb8, 0xf1, 0x01, 0x0f, 0x06, 0xd9, - 0xa3, 0x6b, 0x03, 0x2b, 0x03, 0xd0, 0xef, 0xf7, 0x2f, 0xfa, 0x00, 0x28, - 0xb9, 0xd1, 0x22, 0x68, 0x50, 0x6b, 0x10, 0xf0, 0x08, 0x00, 0x05, 0xd0, - 0x1e, 0x4b, 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, 0x08, 0x03, 0xdc, 0xe7, - 0x51, 0x6b, 0x11, 0xf0, 0x02, 0x01, 0x0a, 0xd0, 0x19, 0x4b, 0x93, 0x63, - 0x63, 0x6b, 0x43, 0xf0, 0x02, 0x03, 0x63, 0x63, 0x01, 0x23, 0x84, 0xf8, - 0x30, 0x30, 0xe0, 0x62, 0xaa, 0xe7, 0x53, 0x6b, 0x13, 0xf0, 0x10, 0x03, - 0x0a, 0xd0, 0x12, 0x4b, 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, 0x10, 0x03, - 0x63, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xe1, 0x62, 0x9b, 0xe7, - 0x0e, 0x49, 0x91, 0x63, 0x01, 0x22, 0x84, 0xf8, 0x30, 0x20, 0x1c, 0x46, - 0xef, 0xf7, 0x7a, 0xf9, 0x04, 0x28, 0xfb, 0xd1, 0x2b, 0x68, 0x28, 0x46, - 0x1b, 0x6d, 0x98, 0x47, 0x11, 0xe7, 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x53, - 0x1d, 0xe7, 0x06, 0x4c, 0x0b, 0xe7, 0x00, 0xbf, 0x74, 0xec, 0xff, 0xff, - 0x04, 0x6c, 0x00, 0x24, 0xff, 0x0f, 0xe0, 0x1f, 0x6c, 0xec, 0xff, 0xff, - 0x3a, 0x0f, 0x00, 0x18, 0x75, 0xec, 0xff, 0xff, 0x2d, 0xe9, 0xf0, 0x4f, - 0x8b, 0xb0, 0x0e, 0x46, 0x01, 0x68, 0x05, 0x46, 0x93, 0x46, 0x9a, 0x46, - 0xdd, 0xe9, 0x14, 0x78, 0xcd, 0xe9, 0x00, 0x78, 0xc9, 0x6b, 0x88, 0x47, - 0x00, 0x28, 0x00, 0xf0, 0x0e, 0x81, 0x2b, 0x68, 0x28, 0x46, 0xdb, 0x6c, - 0x98, 0x47, 0x95, 0xf8, 0x80, 0x30, 0x43, 0xb9, 0x2b, 0x68, 0x28, 0x46, - 0x83, 0x4c, 0x1b, 0x6d, 0x98, 0x47, 0x20, 0x46, 0x0b, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0xab, 0x6d, 0x80, 0x4c, 0x03, 0x93, 0xd5, 0xe9, 0x08, 0x89, - 0xee, 0xf7, 0x90, 0xf8, 0x07, 0x46, 0x26, 0xb9, 0x63, 0x6b, 0x43, 0xf0, - 0x00, 0x63, 0x63, 0x63, 0x69, 0xe0, 0x94, 0xf8, 0x30, 0x30, 0x01, 0x2b, - 0x40, 0xf0, 0xe7, 0x80, 0x42, 0x46, 0x4b, 0x46, 0x51, 0x46, 0x58, 0x46, - 0x06, 0xf0, 0x46, 0xfc, 0x82, 0x46, 0x42, 0x46, 0x4b, 0x46, 0xdd, 0xe9, - 0x14, 0x01, 0x06, 0xf0, 0x3f, 0xfc, 0x22, 0x6d, 0x0a, 0xeb, 0x00, 0x01, - 0x00, 0x23, 0x80, 0x46, 0x91, 0x42, 0x63, 0x63, 0x03, 0xd9, 0x63, 0x6b, - 0x43, 0xf0, 0x00, 0x73, 0xdf, 0xe7, 0xd4, 0xf8, 0x00, 0xb0, 0x03, 0x22, - 0x4f, 0xea, 0x48, 0x29, 0x84, 0xf8, 0x30, 0x20, 0xcb, 0xf8, 0x2c, 0x30, - 0xa3, 0x6b, 0x01, 0x2b, 0x4f, 0xf0, 0xff, 0x33, 0xcb, 0xf8, 0x24, 0x30, - 0x18, 0xbf, 0x4f, 0xea, 0x4a, 0x2a, 0xcb, 0xf8, 0x28, 0x90, 0xb8, 0xf1, - 0x01, 0x0f, 0xdb, 0xf8, 0x2c, 0x30, 0x23, 0xf0, 0xff, 0x03, 0x43, 0xf0, - 0x92, 0x03, 0xcb, 0xf8, 0x2c, 0x30, 0xdb, 0xf8, 0x0c, 0x30, 0x43, 0xf0, - 0x40, 0x03, 0xcb, 0xf8, 0x0c, 0x30, 0x28, 0xd9, 0x02, 0x23, 0xcd, 0xf8, - 0x14, 0xa0, 0x4f, 0xf0, 0x12, 0x0a, 0xe3, 0x62, 0x4f, 0xf4, 0x80, 0x71, - 0x00, 0x23, 0x58, 0x46, 0xcd, 0xf8, 0x18, 0xa0, 0xcd, 0xe9, 0x07, 0x13, - 0x4f, 0xf4, 0x80, 0x53, 0x05, 0xa9, 0x09, 0x93, 0xec, 0xf7, 0x84, 0xf9, - 0x41, 0xf2, 0x88, 0x32, 0x51, 0x46, 0x58, 0x46, 0xef, 0xf7, 0x40, 0xf8, - 0x00, 0x28, 0x3e, 0xd0, 0x23, 0x68, 0x4b, 0x4a, 0x9a, 0x63, 0x63, 0x6b, - 0x18, 0x43, 0x60, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0x00, 0x23, - 0xe3, 0x62, 0x47, 0x4c, 0x76, 0xe0, 0x01, 0x23, 0xcd, 0xf8, 0x14, 0xa0, - 0x4f, 0xf0, 0x11, 0x0a, 0xe3, 0x62, 0xd5, 0xe7, 0x43, 0x6b, 0x1a, 0x04, - 0x19, 0xd5, 0xb9, 0xf1, 0x1f, 0x0f, 0x16, 0xd9, 0x33, 0x1d, 0x06, 0xf1, - 0x24, 0x01, 0x22, 0x68, 0x04, 0x33, 0xd2, 0xf8, 0x80, 0x20, 0x10, 0x0a, - 0x03, 0xf8, 0x08, 0x2c, 0x03, 0xf8, 0x07, 0x0c, 0x10, 0x0c, 0x12, 0x0e, - 0x03, 0xf8, 0x06, 0x0c, 0x03, 0xf8, 0x05, 0x2c, 0x8b, 0x42, 0xee, 0xd1, - 0x20, 0x36, 0xa9, 0xf1, 0x20, 0x09, 0xed, 0xf7, 0xf7, 0xff, 0x03, 0x9b, - 0xc0, 0x1b, 0x83, 0x42, 0x07, 0xd8, 0x23, 0x68, 0x2f, 0x4a, 0x9a, 0x63, - 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x43, 0x63, 0x63, 0xc6, 0xe7, 0x20, 0x68, - 0x43, 0x6b, 0x13, 0xf4, 0x95, 0x7f, 0xcf, 0xd0, 0xc3, 0x68, 0x23, 0xf0, - 0x40, 0x03, 0xc3, 0x60, 0x43, 0x6b, 0xdb, 0x05, 0x09, 0xd5, 0xb8, 0xf1, - 0x01, 0x0f, 0x06, 0xd9, 0xa3, 0x6b, 0x03, 0x2b, 0x03, 0xd0, 0xef, 0xf7, - 0x01, 0xf9, 0x00, 0x28, 0xaa, 0xd1, 0x22, 0x68, 0x50, 0x6b, 0x10, 0xf0, - 0x08, 0x00, 0x05, 0xd0, 0x1e, 0x4b, 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, - 0x08, 0x03, 0xdc, 0xe7, 0x51, 0x6b, 0x11, 0xf0, 0x02, 0x01, 0x0a, 0xd0, - 0x19, 0x4b, 0x93, 0x63, 0x63, 0x6b, 0x43, 0xf0, 0x02, 0x03, 0x63, 0x63, - 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xe0, 0x62, 0x9b, 0xe7, 0x53, 0x6b, - 0x13, 0xf0, 0x20, 0x03, 0x0a, 0xd0, 0x12, 0x4b, 0x93, 0x63, 0x63, 0x6b, - 0x43, 0xf0, 0x20, 0x03, 0x63, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, - 0xe1, 0x62, 0x8c, 0xe7, 0x0e, 0x49, 0x91, 0x63, 0x01, 0x22, 0x84, 0xf8, - 0x30, 0x20, 0x1c, 0x46, 0xef, 0xf7, 0x4c, 0xf8, 0x04, 0x28, 0xfb, 0xd1, - 0x2b, 0x68, 0x28, 0x46, 0x1b, 0x6d, 0x98, 0x47, 0x01, 0xe7, 0x63, 0x6b, - 0x43, 0xf0, 0x00, 0x53, 0x0d, 0xe7, 0x06, 0x4c, 0xfb, 0xe6, 0x00, 0xbf, - 0x74, 0xec, 0xff, 0xff, 0x04, 0x6c, 0x00, 0x24, 0xff, 0x0f, 0xe0, 0x1f, - 0x6d, 0xec, 0xff, 0xff, 0x3a, 0x0f, 0x00, 0x18, 0x75, 0xec, 0xff, 0xff, - 0x03, 0x68, 0x2d, 0xe9, 0xf0, 0x4f, 0xdb, 0x6c, 0x9f, 0xb0, 0xb8, 0x4c, - 0x05, 0x46, 0x98, 0x47, 0xb7, 0x4b, 0xb8, 0x4e, 0x4f, 0xf4, 0x80, 0x42, - 0x23, 0x60, 0x04, 0x23, 0xe2, 0x60, 0x4f, 0xf0, 0x01, 0x08, 0x63, 0x61, - 0x00, 0x23, 0xb4, 0x4f, 0x4f, 0xf0, 0x03, 0x09, 0x23, 0x61, 0x0e, 0xa9, - 0x38, 0x46, 0xc4, 0xe9, 0x01, 0x33, 0xd6, 0xf8, 0xe0, 0x20, 0x42, 0xf0, - 0x40, 0x02, 0xc6, 0xf8, 0xe0, 0x20, 0xd6, 0xf8, 0xe0, 0x20, 0x10, 0x93, - 0x02, 0xf0, 0x40, 0x02, 0xcd, 0xf8, 0x44, 0x90, 0x07, 0x92, 0x07, 0x9a, - 0x08, 0x22, 0xcd, 0xe9, 0x0e, 0x28, 0xf2, 0xf7, 0x03, 0xfb, 0x4f, 0xf4, - 0x00, 0x23, 0x0e, 0xa9, 0xa5, 0x48, 0xbb, 0x61, 0x02, 0x27, 0xd6, 0xf8, - 0xdc, 0x30, 0x43, 0xf4, 0x00, 0x73, 0xc6, 0xf8, 0xdc, 0x30, 0xd6, 0xf8, - 0xdc, 0x30, 0x03, 0xf4, 0x00, 0x73, 0x06, 0x93, 0x06, 0x9b, 0xd6, 0xf8, - 0xe0, 0x30, 0x43, 0xf0, 0x02, 0x03, 0xc6, 0xf8, 0xe0, 0x30, 0xd6, 0xf8, - 0xe0, 0x30, 0x03, 0xf0, 0x02, 0x03, 0x05, 0x93, 0x05, 0x9b, 0xd6, 0xf8, - 0xe0, 0x30, 0x43, 0xf0, 0x08, 0x03, 0xc6, 0xf8, 0xe0, 0x30, 0xd6, 0xf8, - 0xe0, 0x30, 0xcd, 0xf8, 0x44, 0x90, 0x03, 0xf0, 0x08, 0x03, 0x04, 0x93, - 0x04, 0x9b, 0x09, 0x23, 0x12, 0x93, 0x4c, 0xf2, 0x18, 0x03, 0xcd, 0xe9, - 0x0f, 0x78, 0x0e, 0x93, 0xf2, 0xf7, 0xce, 0xfa, 0xc0, 0x23, 0x0e, 0xa9, - 0x8c, 0x48, 0x0e, 0x93, 0x0b, 0x23, 0x12, 0x93, 0xf2, 0xf7, 0xc6, 0xfa, - 0x05, 0x21, 0x7c, 0x20, 0xeb, 0xf7, 0xbe, 0xfe, 0x88, 0x4b, 0x4f, 0xf0, - 0x80, 0x52, 0xda, 0x60, 0x8d, 0xf8, 0x0f, 0x80, 0x9d, 0xf8, 0x0f, 0x30, - 0x01, 0x2b, 0x5f, 0xfa, 0x83, 0xf8, 0x12, 0xd0, 0x7c, 0x20, 0xf2, 0xf7, - 0x81, 0xfc, 0xd6, 0xf8, 0xdc, 0x30, 0x28, 0x46, 0x23, 0xf4, 0x00, 0x73, - 0xc6, 0xf8, 0xdc, 0x30, 0x2b, 0x68, 0x85, 0xf8, 0x54, 0x70, 0x1b, 0x6d, - 0x98, 0x47, 0x7c, 0x48, 0x1f, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x94, 0xf8, - 0x30, 0x30, 0x03, 0xf0, 0xff, 0x02, 0x03, 0xb9, 0x22, 0x76, 0x03, 0x23, - 0x84, 0xf8, 0x30, 0x30, 0xec, 0xf7, 0x52, 0xf8, 0x70, 0xb9, 0x01, 0x23, - 0x84, 0xf8, 0x30, 0x30, 0x4f, 0xf0, 0x00, 0x63, 0x63, 0x63, 0x01, 0x23, - 0x28, 0x46, 0x85, 0xf8, 0x54, 0x30, 0x2b, 0x68, 0x1b, 0x6d, 0x98, 0x47, - 0x6e, 0x48, 0xe1, 0xe7, 0x21, 0x68, 0x6e, 0x4b, 0x4a, 0x68, 0x6e, 0x4f, - 0xb0, 0xfb, 0xf3, 0xf3, 0x3a, 0x40, 0x1a, 0x43, 0x5b, 0x00, 0xb0, 0xfb, - 0xf3, 0xf0, 0x6b, 0x4b, 0x4a, 0x60, 0x0a, 0x68, 0xb3, 0xfb, 0xf0, 0xf0, - 0x42, 0xf0, 0x03, 0x02, 0x01, 0x30, 0x0a, 0x60, 0xf2, 0xf7, 0x54, 0xfc, - 0x00, 0x23, 0x20, 0x68, 0x08, 0x93, 0xee, 0xf7, 0xc7, 0xff, 0x83, 0x46, - 0x88, 0xbb, 0x4f, 0xf4, 0xd5, 0x70, 0x08, 0x22, 0xd4, 0xf8, 0x00, 0x90, - 0x0e, 0xa9, 0x60, 0x4e, 0xcd, 0xe9, 0x0e, 0x02, 0x4f, 0xf4, 0x80, 0x72, - 0x48, 0x46, 0xcd, 0xe9, 0x10, 0x2b, 0x4f, 0xf4, 0x80, 0x52, 0x12, 0x92, - 0xec, 0xf7, 0x02, 0xf8, 0x32, 0x68, 0x4f, 0xf4, 0xfa, 0x51, 0xb2, 0xfb, - 0xf1, 0xf1, 0x41, 0xf2, 0x88, 0x32, 0x4a, 0x43, 0x01, 0x3a, 0x0d, 0xd3, - 0xd9, 0xf8, 0x34, 0x10, 0x11, 0xf0, 0x45, 0x0f, 0xf8, 0xd0, 0x89, 0x04, - 0xf6, 0xd4, 0xd9, 0xf8, 0x34, 0x20, 0x52, 0x07, 0x10, 0xd5, 0x04, 0x22, - 0xc9, 0xf8, 0x38, 0x20, 0x00, 0x22, 0x20, 0x68, 0xe2, 0x63, 0xee, 0xf7, - 0x95, 0xff, 0xf0, 0xb1, 0x83, 0x46, 0x01, 0x22, 0x84, 0xf8, 0x30, 0x20, - 0x63, 0x6b, 0x43, 0xea, 0x0b, 0x03, 0x9f, 0xe7, 0xd9, 0xf8, 0x34, 0x20, - 0xd3, 0x07, 0x01, 0xd5, 0x01, 0x22, 0xe9, 0xe7, 0xd9, 0xf8, 0x34, 0x20, - 0x50, 0x06, 0x02, 0xd5, 0x40, 0x22, 0xc9, 0xf8, 0x38, 0x20, 0x01, 0x22, - 0xe2, 0x63, 0x00, 0x21, 0x20, 0x68, 0xee, 0xf7, 0x60, 0xff, 0x28, 0xb1, - 0x4f, 0xf0, 0x80, 0x5b, 0xe1, 0xe7, 0xe2, 0x6b, 0x01, 0x2a, 0xf4, 0xd0, - 0x4f, 0xf6, 0xfe, 0x79, 0x00, 0x21, 0xca, 0x46, 0x37, 0xe0, 0x20, 0x68, - 0xee, 0xf7, 0x51, 0xff, 0x83, 0x46, 0x00, 0x28, 0xd3, 0xd1, 0x35, 0x4b, - 0x29, 0x21, 0x22, 0x68, 0xcd, 0xe9, 0x0e, 0x31, 0x4f, 0xf4, 0x80, 0x71, - 0x4f, 0xf4, 0x80, 0x53, 0x01, 0x92, 0x12, 0x93, 0xcd, 0xe9, 0x10, 0x10, - 0x0e, 0xa9, 0x10, 0x46, 0xeb, 0xf7, 0xa6, 0xff, 0x33, 0x68, 0x4f, 0xf4, - 0xfa, 0x51, 0x01, 0x9a, 0xb3, 0xfb, 0xf1, 0xf1, 0x41, 0xf2, 0x88, 0x33, - 0x4b, 0x43, 0x01, 0x3b, 0xd2, 0xd3, 0x51, 0x6b, 0x11, 0xf0, 0x45, 0x0f, - 0xf9, 0xd0, 0x89, 0x04, 0xf7, 0xd4, 0x53, 0x6b, 0x5b, 0x07, 0x02, 0xd5, - 0x04, 0x23, 0x93, 0x63, 0xc6, 0xe7, 0x22, 0x4b, 0x93, 0x63, 0x23, 0x68, - 0xd3, 0xf8, 0x14, 0xb0, 0x08, 0x9a, 0x4f, 0xea, 0xdb, 0x71, 0x01, 0x32, - 0x08, 0x92, 0x08, 0x9a, 0x4a, 0x45, 0x01, 0xd8, 0x00, 0x29, 0xc2, 0xd0, - 0x08, 0x9a, 0x52, 0x45, 0x13, 0xd8, 0x1b, 0xf0, 0x80, 0x4f, 0x01, 0xd0, - 0x01, 0x23, 0xa3, 0x63, 0xd4, 0xf8, 0x00, 0x90, 0xd9, 0xf8, 0x00, 0x30, - 0x98, 0x07, 0x29, 0xd1, 0x4f, 0xf0, 0x80, 0x60, 0x01, 0x23, 0x84, 0xf8, - 0x30, 0x30, 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, 0x2d, 0xe7, 0x4f, 0xf0, - 0x80, 0x7b, 0x82, 0xe7, 0x04, 0x6c, 0x00, 0x24, 0x00, 0x24, 0x02, 0x48, - 0x00, 0x44, 0x02, 0x58, 0x00, 0x18, 0x02, 0x58, 0x00, 0x04, 0x02, 0x58, - 0x00, 0x0c, 0x02, 0x58, 0x00, 0xe1, 0x00, 0xe0, 0x73, 0xec, 0xff, 0xff, - 0x74, 0xec, 0xff, 0xff, 0x00, 0x35, 0x0c, 0x00, 0x00, 0x2c, 0xc0, 0xff, - 0x10, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x10, 0xc1, - 0xc5, 0x00, 0x20, 0x00, 0xa3, 0x6b, 0x03, 0x2b, 0x69, 0xd0, 0x00, 0x23, - 0x02, 0x22, 0x4f, 0xf4, 0x80, 0x5a, 0x0e, 0xa9, 0x48, 0x46, 0xcd, 0xf8, - 0x48, 0xa0, 0xcd, 0xe9, 0x0e, 0x32, 0x4f, 0xf4, 0x40, 0x72, 0xcd, 0xe9, - 0x10, 0x23, 0xeb, 0xf7, 0x35, 0xff, 0x48, 0x46, 0xee, 0xf7, 0xcc, 0xfd, - 0x00, 0x28, 0xbf, 0xd1, 0xd4, 0xf8, 0x00, 0x90, 0xd9, 0xf8, 0x14, 0x30, - 0xe3, 0x66, 0xd9, 0xf8, 0x18, 0x30, 0x23, 0x67, 0xd9, 0xf8, 0x1c, 0x30, - 0x63, 0x67, 0xd9, 0xf8, 0x20, 0x30, 0xa3, 0x67, 0xa3, 0x6b, 0x03, 0x2b, - 0x43, 0xd0, 0x4f, 0xf4, 0x80, 0x73, 0x03, 0x21, 0x0e, 0x90, 0xcd, 0xe9, - 0x0f, 0x13, 0xcd, 0xe9, 0x11, 0x0a, 0x0e, 0xa9, 0x48, 0x46, 0xeb, 0xf7, - 0x13, 0xff, 0x33, 0x68, 0x4f, 0xf4, 0xfa, 0x52, 0xb3, 0xfb, 0xf2, 0xf2, - 0x41, 0xf2, 0x88, 0x33, 0x53, 0x43, 0x01, 0x3b, 0xc0, 0xf0, 0x1c, 0x81, - 0xd9, 0xf8, 0x34, 0x20, 0x12, 0xf0, 0x45, 0x0f, 0xf7, 0xd0, 0x92, 0x04, - 0xf5, 0xd4, 0xd9, 0xf8, 0x34, 0x30, 0x5b, 0x07, 0x03, 0xd5, 0x04, 0x20, - 0xc9, 0xf8, 0x38, 0x00, 0x88, 0xe7, 0xd9, 0xf8, 0x34, 0x00, 0x10, 0xf0, - 0x01, 0x00, 0x03, 0xd0, 0x01, 0x23, 0xc9, 0xf8, 0x38, 0x30, 0x7f, 0xe7, - 0xd9, 0xf8, 0x10, 0x30, 0xdb, 0xb2, 0x03, 0x2b, 0x40, 0xf0, 0xfc, 0x80, - 0xc9, 0x4b, 0xc9, 0xf8, 0x38, 0x30, 0xd9, 0xf8, 0x14, 0x30, 0x13, 0xf4, - 0x60, 0x42, 0x40, 0xf0, 0xe6, 0x80, 0xa1, 0x6b, 0x1b, 0x0c, 0x26, 0x68, - 0x03, 0x29, 0x40, 0xf0, 0xf2, 0x80, 0xd4, 0xf8, 0x00, 0xb0, 0xdb, 0xf8, - 0x18, 0x30, 0x1b, 0x0d, 0x23, 0x64, 0xe3, 0x6d, 0x9a, 0x0f, 0x8d, 0xf8, - 0x38, 0x20, 0xc3, 0xf3, 0x83, 0x62, 0x8d, 0xf8, 0x39, 0x20, 0xc3, 0xf3, - 0x01, 0x62, 0x8d, 0xf8, 0x3a, 0x20, 0xc3, 0xf3, 0x07, 0x42, 0x8d, 0xf8, - 0x3b, 0x20, 0xc3, 0xf3, 0x07, 0x22, 0xdb, 0xb2, 0x8d, 0xf8, 0x3c, 0x20, - 0x8d, 0xf8, 0x3d, 0x30, 0x23, 0x6e, 0x1a, 0x0d, 0xad, 0xf8, 0x3e, 0x20, - 0xc3, 0xf3, 0x03, 0x42, 0x8d, 0xf8, 0x40, 0x20, 0xc3, 0xf3, 0xc0, 0x32, - 0x8d, 0xf8, 0x41, 0x20, 0xc3, 0xf3, 0x80, 0x32, 0x8d, 0xf8, 0x42, 0x20, - 0xc3, 0xf3, 0x40, 0x32, 0x8d, 0xf8, 0x43, 0x20, 0xc3, 0xf3, 0x00, 0x32, - 0x8d, 0xf8, 0x44, 0x20, 0x00, 0x22, 0x8d, 0xf8, 0x45, 0x20, 0xa2, 0x6b, - 0x00, 0x2a, 0x40, 0xf0, 0xd6, 0x80, 0x40, 0xf6, 0xfc, 0x71, 0x62, 0x6e, - 0x01, 0xea, 0x83, 0x03, 0x43, 0xea, 0x92, 0x73, 0x12, 0x93, 0xc2, 0xf3, - 0xc2, 0x63, 0x8d, 0xf8, 0x4c, 0x30, 0xc2, 0xf3, 0x02, 0x63, 0x8d, 0xf8, - 0x4d, 0x30, 0xc2, 0xf3, 0x42, 0x53, 0x8d, 0xf8, 0x4e, 0x30, 0xc2, 0xf3, - 0x82, 0x43, 0xc2, 0xf3, 0xc2, 0x32, 0x8d, 0xf8, 0x4f, 0x30, 0x8d, 0xf8, - 0x50, 0x20, 0x12, 0x9b, 0x9d, 0xf8, 0x50, 0x20, 0x01, 0x33, 0x02, 0xf0, - 0x07, 0x02, 0x02, 0x32, 0x93, 0x40, 0x9d, 0xf8, 0x40, 0x20, 0x02, 0xf0, - 0x0f, 0x01, 0x01, 0x22, 0xa3, 0x64, 0x8a, 0x40, 0xe2, 0x64, 0x52, 0x0a, - 0x53, 0x43, 0x23, 0x65, 0x4f, 0xf4, 0x00, 0x73, 0x63, 0x65, 0x4f, 0xf0, - 0x01, 0x0a, 0x63, 0x6e, 0x4f, 0xf4, 0x80, 0x79, 0x4f, 0xf4, 0x80, 0x56, - 0x58, 0x46, 0xc3, 0xf3, 0x80, 0x32, 0x0d, 0x96, 0x8d, 0xf8, 0x51, 0x20, - 0xc3, 0xf3, 0xc6, 0x12, 0x03, 0xf0, 0x7f, 0x03, 0x8d, 0xf8, 0x52, 0x20, - 0x8d, 0xf8, 0x53, 0x30, 0xa3, 0x6e, 0xda, 0x0f, 0xc3, 0xf3, 0x00, 0x41, - 0x8d, 0xf8, 0x54, 0x20, 0xc3, 0xf3, 0x41, 0x72, 0x8d, 0xf8, 0x55, 0x20, - 0xc3, 0xf3, 0x82, 0x62, 0x8d, 0xf8, 0x56, 0x20, 0xc3, 0xf3, 0x83, 0x52, - 0x8d, 0xf8, 0x57, 0x20, 0xc3, 0xf3, 0x40, 0x52, 0x8d, 0xf8, 0x58, 0x20, - 0x00, 0x22, 0x8d, 0xf8, 0x59, 0x20, 0x8d, 0xf8, 0x5a, 0x10, 0xc3, 0xf3, - 0xc0, 0x31, 0x0c, 0x92, 0x8d, 0xf8, 0x5b, 0x10, 0xc3, 0xf3, 0x80, 0x31, - 0x8d, 0xf8, 0x5c, 0x10, 0xc3, 0xf3, 0x40, 0x31, 0x8d, 0xf8, 0x5d, 0x10, - 0xc3, 0xf3, 0x00, 0x31, 0x8d, 0xf8, 0x5e, 0x10, 0xc3, 0xf3, 0x81, 0x21, - 0x8d, 0xf8, 0x5f, 0x10, 0xc3, 0xf3, 0x01, 0x21, 0xc3, 0xf3, 0x46, 0x03, - 0x8d, 0xf8, 0x60, 0x10, 0x09, 0xa9, 0x8d, 0xf8, 0x61, 0x30, 0x63, 0x6c, - 0x8d, 0xf8, 0x62, 0xa0, 0x1b, 0x04, 0x09, 0x93, 0x07, 0x23, 0xcd, 0xe9, - 0x0a, 0x39, 0xeb, 0xf7, 0x15, 0xfe, 0x07, 0x23, 0x41, 0xf2, 0x88, 0x32, - 0x58, 0x46, 0x19, 0x46, 0xee, 0xf7, 0xd0, 0xfc, 0x00, 0x28, 0x7f, 0xf4, - 0x9b, 0xae, 0x4f, 0xf4, 0x00, 0x71, 0x20, 0x68, 0xee, 0xf7, 0x08, 0xfe, - 0x00, 0x28, 0x59, 0xd0, 0x23, 0x68, 0x57, 0x4a, 0x9a, 0x63, 0x63, 0x6b, - 0x18, 0x43, 0x60, 0x63, 0x84, 0xf8, 0x30, 0xa0, 0xbf, 0xe5, 0x5e, 0x04, - 0x07, 0xd4, 0x13, 0xf4, 0x00, 0x4f, 0x0c, 0xbf, 0x4f, 0xf4, 0x80, 0x30, - 0x4f, 0xf4, 0x80, 0x50, 0x80, 0xe6, 0x4f, 0xf4, 0x00, 0x50, 0x7d, 0xe6, - 0x01, 0x20, 0x7b, 0xe6, 0x4f, 0xf0, 0x00, 0x40, 0x78, 0xe6, 0x63, 0x64, - 0x1b, 0x04, 0x09, 0x21, 0x30, 0x46, 0x0e, 0x93, 0x4f, 0xf4, 0x40, 0x73, - 0x11, 0x92, 0xcd, 0xe9, 0x0f, 0x13, 0x4f, 0xf4, 0x80, 0x53, 0x0e, 0xa9, - 0x12, 0x93, 0xeb, 0xf7, 0xd9, 0xfd, 0x30, 0x46, 0xee, 0xf7, 0x70, 0xfc, - 0x00, 0x28, 0x7f, 0xf4, 0x63, 0xae, 0x23, 0x68, 0x5a, 0x69, 0xe2, 0x65, - 0x9a, 0x69, 0x22, 0x66, 0xda, 0x69, 0x62, 0x66, 0x1b, 0x6a, 0xa3, 0x66, - 0xed, 0xe6, 0x01, 0x2a, 0x0f, 0xd1, 0x1b, 0x04, 0xb4, 0xf8, 0x66, 0x20, - 0x03, 0xf4, 0x7c, 0x13, 0x13, 0x43, 0x12, 0x93, 0x12, 0x9b, 0x01, 0x33, - 0x9b, 0x02, 0xa3, 0x64, 0x23, 0x65, 0x4f, 0xf4, 0x00, 0x73, 0xe3, 0x64, - 0x48, 0xe7, 0x31, 0x4b, 0x4f, 0xf0, 0x80, 0x50, 0xcb, 0xf8, 0x38, 0x30, - 0x63, 0x6b, 0x43, 0xf0, 0x80, 0x53, 0x63, 0x63, 0x01, 0x23, 0x84, 0xf8, - 0x30, 0x30, 0x39, 0xe6, 0xed, 0xf7, 0x56, 0xfc, 0x82, 0x46, 0x20, 0x68, - 0x43, 0x69, 0x9b, 0x01, 0x00, 0xf1, 0xc3, 0x80, 0x40, 0x21, 0xee, 0xf7, - 0xa1, 0xfd, 0x58, 0xb1, 0x63, 0x6b, 0x63, 0x63, 0x23, 0x68, 0x23, 0x4a, - 0x9a, 0x63, 0x63, 0x6b, 0x18, 0x43, 0x01, 0x23, 0x60, 0x63, 0x84, 0xf8, - 0x30, 0x30, 0x9f, 0xe0, 0x61, 0x6c, 0x20, 0x68, 0x09, 0x04, 0xee, 0xf7, - 0x24, 0xfd, 0x00, 0x28, 0xec, 0xd1, 0xd4, 0xf8, 0x00, 0xb0, 0x4f, 0xf0, - 0xff, 0x33, 0x0e, 0xa9, 0xcb, 0xf8, 0x24, 0x30, 0x40, 0x23, 0xcb, 0xf8, - 0x28, 0x30, 0xdb, 0xf8, 0x2c, 0x30, 0x23, 0xf0, 0xff, 0x03, 0x43, 0xf0, - 0x63, 0x03, 0xcb, 0xf8, 0x2c, 0x30, 0x0d, 0x23, 0x0e, 0x90, 0xcd, 0xe9, - 0x11, 0x06, 0x58, 0x46, 0xcd, 0xe9, 0x0f, 0x39, 0xeb, 0xf7, 0x70, 0xfd, - 0x0d, 0x23, 0x41, 0xf2, 0x88, 0x32, 0x58, 0x46, 0x19, 0x46, 0xee, 0xf7, - 0x2b, 0xfc, 0x00, 0x28, 0xc8, 0xd1, 0x0e, 0xae, 0x23, 0x68, 0x5a, 0x6b, - 0x12, 0xf4, 0x95, 0x7f, 0x5a, 0x6b, 0x0d, 0xd0, 0x11, 0x07, 0x7c, 0xd4, - 0x5a, 0x6b, 0x92, 0x07, 0x77, 0xd4, 0x5b, 0x6b, 0x9b, 0x06, 0x22, 0xd5, - 0x20, 0x20, 0xb9, 0xe7, 0xc5, 0x00, 0x20, 0x00, 0xff, 0x0f, 0xe0, 0x1f, - 0x10, 0x04, 0x07, 0xd5, 0x06, 0xf1, 0x20, 0x02, 0xd3, 0xf8, 0x80, 0x10, - 0x46, 0xf8, 0x04, 0x1b, 0x96, 0x42, 0xf9, 0xd1, 0xed, 0xf7, 0xf4, 0xfb, - 0xa0, 0xeb, 0x0a, 0x00, 0x01, 0x30, 0xdb, 0xd1, 0x4f, 0xf0, 0x00, 0x40, - 0xa2, 0xe7, 0xd2, 0xf8, 0x80, 0x30, 0x46, 0xf8, 0x04, 0x3b, 0xed, 0xf7, - 0xe7, 0xfb, 0xa0, 0xeb, 0x0a, 0x00, 0x01, 0x30, 0xf2, 0xd0, 0x22, 0x68, - 0x53, 0x6b, 0x13, 0xf4, 0x80, 0x53, 0xf0, 0xd1, 0xa8, 0x49, 0x91, 0x63, - 0x0e, 0x99, 0xc1, 0xf3, 0x81, 0x12, 0x8d, 0xf8, 0x24, 0x20, 0xc1, 0xf3, - 0x40, 0x12, 0x8d, 0xf8, 0x25, 0x20, 0x0a, 0x0a, 0x22, 0xf0, 0xff, 0x02, - 0x42, 0xea, 0x11, 0x62, 0x92, 0xb2, 0xad, 0xf8, 0x26, 0x20, 0x0f, 0x9a, - 0x12, 0xba, 0x0a, 0x92, 0x10, 0x9a, 0xd1, 0xb2, 0x8d, 0xf8, 0x2c, 0x10, - 0xc2, 0xf3, 0x07, 0x21, 0x8d, 0xf8, 0x2d, 0x10, 0xc2, 0xf3, 0x03, 0x51, - 0x12, 0x0c, 0x8d, 0xf8, 0x2e, 0x10, 0x11, 0x99, 0x22, 0xf0, 0xff, 0x02, - 0xc8, 0xb2, 0x02, 0x43, 0xad, 0xf8, 0x30, 0x20, 0xc1, 0xf3, 0x85, 0x22, - 0x8d, 0xf8, 0x32, 0x20, 0xc1, 0xf3, 0x01, 0x22, 0x8d, 0xf8, 0x33, 0x20, - 0xc1, 0xf3, 0x03, 0x12, 0x01, 0xf0, 0x0f, 0x01, 0x8d, 0xf8, 0x34, 0x20, - 0x9d, 0xf8, 0x4b, 0x20, 0x8d, 0xf8, 0x35, 0x10, 0x8d, 0xf8, 0x36, 0x20, - 0x4f, 0xf4, 0x00, 0x71, 0x20, 0x68, 0x1e, 0x46, 0xee, 0xf7, 0xee, 0xfc, - 0x70, 0xb1, 0x23, 0x68, 0x86, 0x4a, 0x9a, 0x63, 0x60, 0x63, 0x01, 0x23, - 0x84, 0xf8, 0x30, 0x30, 0xa7, 0xe4, 0x02, 0x20, 0x44, 0xe7, 0x08, 0x20, - 0x42, 0xe7, 0x4f, 0xf4, 0x00, 0x60, 0x3f, 0xe7, 0x00, 0x2e, 0x7f, 0xf4, - 0x9e, 0xac, 0xa1, 0x6b, 0x9d, 0xf8, 0x34, 0x20, 0x01, 0x29, 0x9d, 0xf8, - 0x35, 0x30, 0xd2, 0xb2, 0xdb, 0xb2, 0x13, 0xd1, 0x13, 0x43, 0x14, 0xbf, - 0x4f, 0xf4, 0x00, 0x73, 0x4f, 0xf4, 0x80, 0x73, 0xa3, 0x65, 0x03, 0x23, - 0xe6, 0x68, 0x99, 0x42, 0x84, 0xf8, 0x30, 0x30, 0x02, 0xd0, 0xb6, 0xf5, - 0x00, 0x4f, 0x05, 0xd1, 0x63, 0x6b, 0x43, 0xf0, 0x80, 0x53, 0x5c, 0xe0, - 0xa6, 0x65, 0xf0, 0xe7, 0xb6, 0xf5, 0x80, 0x4f, 0x33, 0xd1, 0x00, 0x23, - 0xcd, 0xe9, 0x0e, 0x33, 0x23, 0x68, 0x5b, 0x69, 0x98, 0x01, 0x26, 0xd4, - 0x0e, 0xa8, 0xee, 0xf7, 0xc9, 0xfc, 0x60, 0xb9, 0x0f, 0x9b, 0x59, 0x03, - 0x22, 0xd5, 0x61, 0x6c, 0x20, 0x68, 0x09, 0x04, 0xee, 0xf7, 0x3b, 0xfc, - 0x18, 0xb9, 0x02, 0x21, 0x20, 0x68, 0xee, 0xf7, 0x1d, 0xfc, 0x63, 0x6b, - 0x18, 0x43, 0x60, 0x63, 0x63, 0x6b, 0x00, 0x2b, 0x3b, 0xd0, 0x23, 0x68, - 0x5d, 0x4a, 0x9a, 0x63, 0x4f, 0xf4, 0x00, 0x71, 0x20, 0x68, 0xee, 0xf7, - 0x93, 0xfc, 0x00, 0x28, 0x6d, 0xd0, 0x23, 0x68, 0x58, 0x4a, 0x9a, 0x63, - 0x63, 0x6b, 0x18, 0x43, 0xa0, 0xe7, 0x4f, 0xf4, 0x00, 0x60, 0xe6, 0xe7, - 0x4f, 0xf0, 0x80, 0x60, 0xe3, 0xe7, 0xfe, 0xb9, 0x23, 0x68, 0xcd, 0xe9, - 0x0e, 0x66, 0x5b, 0x69, 0x9a, 0x01, 0x13, 0xd4, 0x0e, 0xa8, 0xee, 0xf7, - 0x95, 0xfc, 0x60, 0xb9, 0x0f, 0x9b, 0xdb, 0x03, 0x0f, 0xd5, 0x61, 0x6c, - 0x20, 0x68, 0x09, 0x04, 0xee, 0xf7, 0x07, 0xfc, 0x18, 0xb9, 0x01, 0x46, - 0x20, 0x68, 0xee, 0xf7, 0xe9, 0xfb, 0x61, 0x6b, 0x08, 0x43, 0xca, 0xe7, - 0x4f, 0xf4, 0x00, 0x60, 0xf9, 0xe7, 0x4f, 0xf0, 0x80, 0x60, 0xf6, 0xe7, - 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x63, 0x63, 0x63, 0xc0, 0xe7, 0xeb, 0xf7, - 0x6b, 0xfc, 0x98, 0xb3, 0x3f, 0x4a, 0xb0, 0xfb, 0xf2, 0xf9, 0xd4, 0xe9, - 0x04, 0xc3, 0xd4, 0xe9, 0x01, 0x8e, 0x4b, 0x45, 0x0c, 0xd2, 0xa1, 0x6d, - 0xb1, 0xf5, 0x00, 0x7f, 0x08, 0xd0, 0xb1, 0xf5, 0x80, 0x7f, 0x19, 0xd1, - 0x9b, 0xb9, 0x90, 0x42, 0x02, 0xd9, 0x37, 0x4b, 0xb0, 0xfb, 0xf3, 0xf3, - 0x21, 0x68, 0x46, 0xea, 0x08, 0x06, 0x4f, 0xf0, 0x00, 0x08, 0x4a, 0x68, - 0x46, 0xea, 0x0e, 0x06, 0x17, 0x40, 0x46, 0xea, 0x0c, 0x06, 0x37, 0x43, - 0x1f, 0x43, 0x4f, 0x60, 0x9e, 0xe7, 0x59, 0x00, 0xb0, 0xfb, 0xf1, 0xf1, - 0x91, 0x42, 0xe7, 0xe7, 0x2c, 0x4a, 0x1b, 0xb9, 0x90, 0x42, 0x88, 0xbf, - 0x4b, 0x46, 0xe5, 0xe7, 0x59, 0x00, 0xb0, 0xfb, 0xf1, 0xf0, 0xf7, 0xe7, - 0x63, 0x6b, 0x43, 0xf0, 0x00, 0x63, 0x63, 0x63, 0x8a, 0xe7, 0x01, 0x23, - 0x84, 0xf8, 0x30, 0x30, 0xb8, 0xf1, 0x00, 0x0f, 0x7f, 0xf4, 0xdf, 0xab, - 0xed, 0xf7, 0xc6, 0xfa, 0x06, 0x46, 0xee, 0xf7, 0x6b, 0xfb, 0x04, 0x28, - 0x2b, 0xd1, 0xe3, 0x6b, 0x00, 0x26, 0xa0, 0x6b, 0x01, 0x22, 0x66, 0x63, - 0x6b, 0x63, 0x23, 0x6c, 0xa1, 0x6c, 0xab, 0x63, 0x63, 0x6c, 0x27, 0x6d, - 0xe6, 0x62, 0x85, 0xf8, 0x54, 0x60, 0x84, 0xf8, 0x30, 0x20, 0xeb, 0x63, - 0xe3, 0x6c, 0x64, 0x6d, 0x28, 0x63, 0x29, 0x64, 0x28, 0x71, 0x28, 0x46, - 0x85, 0xf8, 0x80, 0x20, 0x6b, 0x64, 0xaf, 0x64, 0xec, 0x64, 0xc5, 0xe9, - 0x0a, 0x16, 0xc5, 0xe9, 0x02, 0x36, 0xc5, 0xe9, 0x04, 0x36, 0xc5, 0xe9, - 0x06, 0x36, 0xc5, 0xe9, 0x08, 0x36, 0x2b, 0x68, 0x1b, 0x6d, 0x98, 0x47, - 0x30, 0x46, 0xff, 0xf7, 0x97, 0xbb, 0xed, 0xf7, 0x93, 0xfa, 0x80, 0x1b, - 0x01, 0x30, 0xca, 0xd1, 0x4f, 0xf0, 0x00, 0x43, 0x63, 0x63, 0xf6, 0xe6, - 0x3a, 0x0f, 0x00, 0x18, 0xff, 0x0f, 0xe0, 0x1f, 0x80, 0xf0, 0xfa, 0x02, - 0x00, 0xe1, 0xf5, 0x05, 0x40, 0x78, 0x7d, 0x01, 0x0d, 0x4b, 0x4f, 0xf4, - 0x00, 0x72, 0x10, 0xb5, 0x03, 0x60, 0x00, 0x23, 0x04, 0x46, 0x5c, 0x30, - 0x40, 0xe9, 0x15, 0x23, 0x40, 0xe9, 0x13, 0x23, 0x40, 0xe9, 0x11, 0x23, - 0x40, 0xe9, 0x0f, 0x23, 0x00, 0x22, 0x00, 0x23, 0x40, 0xe9, 0x0d, 0x23, - 0xeb, 0xf7, 0x52, 0xfa, 0x4f, 0xf4, 0x7a, 0x73, 0x20, 0x46, 0xa3, 0x65, - 0x10, 0xbd, 0x00, 0xbf, 0x90, 0xec, 0x01, 0x08, 0x5c, 0x30, 0xf4, 0xf7, - 0x51, 0xba, 0x5c, 0x30, 0xf4, 0xf7, 0x6e, 0xba, 0x43, 0x68, 0x2d, 0xe9, - 0xf3, 0x47, 0xdd, 0xe9, 0x0a, 0x45, 0x80, 0x46, 0x91, 0x46, 0x3b, 0xb9, - 0x19, 0x48, 0x05, 0xf0, 0x5d, 0xfb, 0x6f, 0xf4, 0x7a, 0x60, 0x02, 0xb0, - 0xbd, 0xe8, 0xf0, 0x87, 0x00, 0x26, 0x00, 0x27, 0x4f, 0xf0, 0xff, 0x0a, - 0xbd, 0x42, 0x08, 0xbf, 0xb4, 0x42, 0x20, 0xd0, 0x00, 0x22, 0x09, 0xeb, - 0x06, 0x01, 0xd8, 0xf8, 0x04, 0x00, 0x03, 0xf0, 0xaf, 0xfb, 0x08, 0xb1, - 0x0e, 0x48, 0xe6, 0xe7, 0x01, 0x22, 0xd8, 0xf8, 0x04, 0x30, 0x0d, 0xf1, - 0x07, 0x00, 0x8d, 0xf8, 0x07, 0xa0, 0x11, 0x46, 0x05, 0xf0, 0x6a, 0xfa, - 0x01, 0x28, 0x02, 0x46, 0x05, 0xd0, 0xd8, 0xf8, 0x04, 0x10, 0x07, 0x48, - 0xf7, 0xf7, 0x24, 0xfe, 0xd5, 0xe7, 0x01, 0x36, 0x47, 0xf1, 0x00, 0x07, - 0xda, 0xe7, 0x00, 0x20, 0xd1, 0xe7, 0x00, 0xbf, 0xf3, 0xe7, 0x01, 0x08, - 0x0a, 0xe8, 0x01, 0x08, 0x18, 0xe8, 0x01, 0x08, 0xf8, 0xb5, 0x05, 0x46, - 0x40, 0x68, 0x0e, 0x46, 0x06, 0x9f, 0x11, 0x46, 0x30, 0xb9, 0x0e, 0x48, - 0x05, 0xf0, 0x1c, 0xfb, 0x6f, 0xf4, 0x7a, 0x64, 0x20, 0x46, 0xf8, 0xbd, - 0x00, 0x22, 0x03, 0xf0, 0x7b, 0xfb, 0x04, 0x46, 0x08, 0xb1, 0x09, 0x48, - 0xf2, 0xe7, 0x01, 0x22, 0x6b, 0x68, 0x39, 0x46, 0x30, 0x46, 0x05, 0xf0, - 0x39, 0xfa, 0x01, 0x28, 0x02, 0x46, 0xed, 0xd0, 0x69, 0x68, 0x04, 0x48, - 0xf7, 0xf7, 0xf4, 0xfd, 0xe6, 0xe7, 0x00, 0xbf, 0x37, 0xe8, 0x01, 0x08, - 0x50, 0xe8, 0x01, 0x08, 0x60, 0xe8, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x41, - 0x05, 0x46, 0x40, 0x68, 0x88, 0x46, 0x11, 0x46, 0xdd, 0xe9, 0x06, 0x67, - 0x38, 0xb9, 0x10, 0x48, 0x05, 0xf0, 0xf0, 0xfa, 0x6f, 0xf4, 0x7a, 0x64, - 0x20, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0x22, 0x03, 0xf0, 0x4e, 0xfb, - 0x04, 0x46, 0x08, 0xb1, 0x0a, 0x48, 0xf1, 0xe7, 0x6b, 0x68, 0x32, 0x46, - 0x01, 0x21, 0x40, 0x46, 0x03, 0xf0, 0x34, 0xfb, 0x00, 0x23, 0x02, 0x46, - 0xbb, 0x42, 0x08, 0xbf, 0xb0, 0x42, 0xe9, 0xd0, 0x69, 0x68, 0x04, 0x48, - 0xf7, 0xf7, 0xc4, 0xfd, 0xe2, 0xe7, 0x00, 0xbf, 0x81, 0xe8, 0x01, 0x08, - 0x97, 0xe8, 0x01, 0x08, 0xa4, 0xe8, 0x01, 0x08, 0x08, 0xb5, 0x40, 0x68, - 0x03, 0xf0, 0x9c, 0xf8, 0x00, 0x20, 0x08, 0xbd, 0xf7, 0xb5, 0x04, 0x46, - 0xd0, 0xe9, 0x02, 0x01, 0x03, 0xf0, 0x9a, 0xfa, 0x60, 0x60, 0x48, 0xb9, - 0xd4, 0xe9, 0x02, 0x12, 0x13, 0x48, 0xf7, 0xf7, 0xa9, 0xfd, 0x6f, 0xf4, - 0x7a, 0x65, 0x28, 0x46, 0x03, 0xb0, 0xf0, 0xbd, 0x02, 0x22, 0x00, 0x21, - 0x03, 0xf0, 0x16, 0xfb, 0x05, 0x46, 0x18, 0xb1, 0x0d, 0x48, 0x05, 0xf0, - 0xab, 0xfa, 0xf0, 0xe7, 0x60, 0x68, 0x00, 0x27, 0x03, 0xf0, 0xca, 0xfb, - 0xd4, 0xe9, 0x04, 0x23, 0x9f, 0x42, 0x08, 0xbf, 0x90, 0x42, 0x06, 0xd0, - 0xa1, 0x68, 0xcd, 0xe9, 0x00, 0x23, 0x02, 0x46, 0x05, 0x48, 0xf7, 0xf7, - 0x89, 0xfd, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0xdd, 0xe7, 0x00, 0xbf, - 0xc2, 0xe8, 0x01, 0x08, 0xe9, 0xe8, 0x01, 0x08, 0xf6, 0xe8, 0x01, 0x08, - 0xb0, 0xf1, 0x20, 0x4f, 0x73, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0x0c, 0xd3, - 0x10, 0x4b, 0x18, 0x68, 0x00, 0x23, 0x06, 0x68, 0xcd, 0xe9, 0x00, 0x23, - 0x04, 0xf1, 0xc0, 0x42, 0x76, 0x69, 0xb0, 0x47, 0x28, 0x46, 0x02, 0xb0, - 0x70, 0xbd, 0xb0, 0xf1, 0x10, 0x4f, 0x08, 0xd2, 0x4b, 0x1e, 0x02, 0x44, - 0x94, 0x42, 0xf5, 0xd0, 0x14, 0xf8, 0x01, 0x1b, 0x03, 0xf8, 0x01, 0x1f, - 0xf8, 0xe7, 0x00, 0x23, 0xcd, 0xe9, 0x00, 0x23, 0x00, 0xf1, 0xe0, 0x42, - 0x02, 0x48, 0xf6, 0xf7, 0x8d, 0xf8, 0xe7, 0xe7, 0xdc, 0x0d, 0x00, 0x24, - 0x78, 0x2c, 0x00, 0x24, 0x38, 0xb5, 0x04, 0x46, 0x41, 0xf2, 0x1c, 0x00, - 0x03, 0xf0, 0xce, 0xfd, 0xc4, 0xf8, 0xb8, 0x02, 0xe0, 0xb1, 0x02, 0x22, - 0x41, 0xf2, 0x18, 0x03, 0x00, 0xf5, 0x80, 0x51, 0x0c, 0x4d, 0xc2, 0x52, - 0x00, 0x23, 0x0b, 0x60, 0x41, 0xf2, 0x04, 0x01, 0x43, 0x50, 0x41, 0xf2, - 0x08, 0x01, 0x45, 0x50, 0x41, 0xf2, 0x0c, 0x01, 0x43, 0x50, 0x41, 0xf2, - 0x10, 0x01, 0x43, 0x50, 0x41, 0xf2, 0x14, 0x03, 0xc2, 0x52, 0xd4, 0xf8, - 0xbc, 0x32, 0x1b, 0x69, 0x98, 0x47, 0x00, 0xb1, 0x02, 0x20, 0x38, 0xbd, - 0x00, 0x00, 0x04, 0x08, 0x10, 0xb5, 0x04, 0x46, 0x01, 0x68, 0xd0, 0xe9, - 0x01, 0x23, 0x05, 0x48, 0xf9, 0xf7, 0x14, 0xf9, 0x20, 0x68, 0x03, 0xf0, - 0xa7, 0xfd, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, 0x03, 0xf0, 0xa2, 0xbd, - 0x50, 0x9c, 0x00, 0x24, 0xb0, 0xf1, 0x20, 0x4f, 0x7f, 0xb5, 0x04, 0x46, - 0x13, 0xd3, 0x17, 0x4b, 0x00, 0xf1, 0xc0, 0x42, 0x1d, 0x68, 0x03, 0x92, - 0x2b, 0x68, 0x28, 0x46, 0xde, 0x69, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, - 0x03, 0x9a, 0x00, 0x23, 0xcd, 0xe9, 0x00, 0x01, 0x28, 0x46, 0xb0, 0x47, - 0x80, 0xb2, 0x04, 0xb0, 0x70, 0xbd, 0xb0, 0xf1, 0x10, 0x4f, 0x0e, 0xd3, - 0x00, 0xf1, 0xe0, 0x42, 0x00, 0x23, 0x0b, 0x48, 0x03, 0x92, 0xf1, 0xf7, - 0x4f, 0xf8, 0x03, 0x9a, 0x00, 0x23, 0xcd, 0xe9, 0x00, 0x01, 0x07, 0x48, - 0xf6, 0xf7, 0x76, 0xf8, 0xea, 0xe7, 0xeb, 0xf7, 0xe9, 0xf8, 0x21, 0x46, - 0x02, 0x46, 0x04, 0x48, 0xf8, 0xf7, 0x8c, 0xff, 0xe2, 0xe7, 0x00, 0xbf, - 0xdc, 0x0d, 0x00, 0x24, 0x78, 0x2c, 0x00, 0x24, 0x50, 0x9c, 0x00, 0x24, - 0x1f, 0xb5, 0x16, 0x48, 0xf9, 0xf7, 0x10, 0xfa, 0x15, 0x4b, 0x18, 0x68, - 0x03, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x01, 0xa9, 0x01, 0x20, 0xeb, 0xf7, - 0xa3, 0xfe, 0xb0, 0xb9, 0x02, 0xa9, 0x01, 0x98, 0xec, 0xf7, 0xc2, 0xf8, - 0x01, 0x46, 0x68, 0xb9, 0x9d, 0xf8, 0x08, 0x30, 0x01, 0x98, 0x02, 0x2b, - 0x0f, 0xd0, 0x03, 0x2b, 0x06, 0xd1, 0xec, 0xf7, 0x95, 0xf8, 0x18, 0xb9, - 0x02, 0x21, 0x01, 0x98, 0xeb, 0xf7, 0x86, 0xf8, 0x01, 0x98, 0xeb, 0xf7, - 0x77, 0xfe, 0x00, 0x20, 0x05, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x82, 0x68, - 0xeb, 0xf7, 0x34, 0xfe, 0xf4, 0xe7, 0x00, 0xbf, 0x50, 0x9c, 0x00, 0x24, - 0xdc, 0x0d, 0x00, 0x24, 0xec, 0xf7, 0x5a, 0xbb, 0xef, 0xf3, 0x10, 0x83, - 0x2b, 0xb9, 0xef, 0xf3, 0x11, 0x80, 0x00, 0x38, 0x18, 0xbf, 0x01, 0x20, - 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, 0x00, 0x00, 0x08, 0xb5, 0xef, 0xf3, - 0x05, 0x83, 0x4b, 0xb1, 0x08, 0x4b, 0x58, 0x69, 0x08, 0x4b, 0x1b, 0x68, - 0x03, 0xb1, 0x98, 0x47, 0xdf, 0xf8, 0x1c, 0xc0, 0x00, 0xdf, 0xfe, 0xe7, - 0xff, 0xf7, 0xe4, 0xff, 0x00, 0x28, 0xf1, 0xd1, 0xdf, 0xf8, 0x10, 0xc0, - 0x00, 0xdf, 0xef, 0xe7, 0x1c, 0x01, 0x00, 0x24, 0xac, 0xe1, 0x01, 0x08, - 0x25, 0x50, 0x01, 0x08, 0x51, 0x48, 0x01, 0x08, 0x04, 0x46, 0x0b, 0x4d, - 0x07, 0xb5, 0xef, 0xf3, 0x05, 0x83, 0x00, 0x2b, 0xfb, 0xd1, 0xff, 0xf7, - 0xcd, 0xff, 0x02, 0x46, 0x00, 0x28, 0xf6, 0xd1, 0x20, 0x46, 0x69, 0x46, - 0x4f, 0xf0, 0xff, 0x33, 0xac, 0x46, 0x00, 0xdf, 0x00, 0x28, 0xee, 0xd1, - 0xdd, 0xe9, 0x00, 0x30, 0x98, 0x47, 0xea, 0xe7, 0x25, 0x5a, 0x01, 0x08, - 0x2d, 0xe9, 0xf7, 0x4f, 0x39, 0x4d, 0x6c, 0x6c, 0x00, 0x2c, 0x63, 0xd0, - 0x23, 0x69, 0x4f, 0xf0, 0x00, 0x08, 0xdf, 0xf8, 0xe0, 0x90, 0x4f, 0xf0, - 0xf9, 0x0a, 0x01, 0x3b, 0x6f, 0x69, 0x23, 0x61, 0x23, 0x69, 0x00, 0x2b, - 0x55, 0xd1, 0xe3, 0x68, 0x0b, 0xb1, 0xa2, 0x68, 0x9a, 0x60, 0xd5, 0xf8, - 0x4c, 0xb0, 0x04, 0xf1, 0x18, 0x01, 0x6b, 0x64, 0xef, 0xf3, 0x05, 0x83, - 0x43, 0xb1, 0xbb, 0xf1, 0x00, 0x0f, 0x13, 0xd1, 0xab, 0x69, 0x03, 0x21, - 0x29, 0x48, 0x6b, 0x61, 0xeb, 0xf7, 0x16, 0xf8, 0x01, 0x91, 0xff, 0xf7, - 0x91, 0xff, 0x01, 0x99, 0x02, 0x46, 0x00, 0x28, 0xef, 0xd1, 0x58, 0x46, - 0x13, 0x46, 0xcc, 0x46, 0x00, 0xdf, 0x00, 0x28, 0xec, 0xd1, 0x1b, 0xe0, - 0x9b, 0xf8, 0x00, 0x30, 0x01, 0x91, 0xfa, 0x2b, 0xe6, 0xd1, 0x0b, 0xf1, - 0x0c, 0x00, 0xfd, 0xf7, 0x5e, 0xfa, 0x06, 0x46, 0x00, 0x28, 0xdf, 0xd0, - 0x01, 0x99, 0x0c, 0x30, 0xdb, 0xf8, 0x24, 0x20, 0x03, 0xf0, 0x00, 0xfd, - 0x01, 0x99, 0x30, 0x46, 0x86, 0xf8, 0x00, 0xa0, 0xa6, 0xf8, 0x02, 0x80, - 0xc6, 0xe9, 0x01, 0x1b, 0xfd, 0xf7, 0xfa, 0xff, 0xe3, 0x78, 0x01, 0x2b, - 0x1d, 0xd1, 0x6b, 0x6c, 0x00, 0x21, 0x62, 0x69, 0x13, 0xb1, 0x18, 0x69, - 0x82, 0x42, 0x10, 0xd2, 0x22, 0x61, 0xc4, 0xe9, 0x02, 0x13, 0x1b, 0xb1, - 0x18, 0x69, 0x9c, 0x60, 0x82, 0x1a, 0x1a, 0x61, 0x59, 0xb1, 0xcc, 0x60, - 0x6c, 0x6c, 0x00, 0x2c, 0xa6, 0xd1, 0x6f, 0x61, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x19, 0x46, 0x12, 0x1a, 0xdb, 0x68, 0xe6, 0xe7, 0x6c, 0x64, - 0xf2, 0xe7, 0x01, 0x23, 0x63, 0x70, 0xef, 0xe7, 0x1c, 0x01, 0x00, 0x24, - 0x27, 0x01, 0x02, 0x80, 0x01, 0x5c, 0x01, 0x08, 0x07, 0xb5, 0xbf, 0xf3, - 0x5f, 0x8f, 0x78, 0x4b, 0x00, 0x22, 0x19, 0x68, 0x10, 0x46, 0x5a, 0x60, - 0xc1, 0xf3, 0x07, 0x21, 0x91, 0x42, 0x40, 0xf0, 0xaa, 0x80, 0x10, 0x22, - 0xda, 0x60, 0x73, 0x4a, 0x1a, 0x61, 0x13, 0x22, 0xda, 0x60, 0x72, 0x4a, - 0x1a, 0x61, 0x11, 0x22, 0xda, 0x60, 0x71, 0x4a, 0x1a, 0x61, 0x71, 0x4a, - 0xda, 0x60, 0x71, 0x4a, 0x1a, 0x61, 0x07, 0x22, 0x5a, 0x60, 0xbf, 0xf3, - 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x6e, 0x4b, 0x6e, 0x49, 0x98, 0x68, - 0x4f, 0xf0, 0x00, 0x53, 0x1a, 0x18, 0x02, 0xf1, 0x60, 0x42, 0x12, 0x68, - 0x43, 0xf8, 0x04, 0x2b, 0x8b, 0x42, 0xf7, 0xd1, 0x67, 0x4b, 0x4f, 0xf0, - 0x00, 0x52, 0x9a, 0x60, 0x5a, 0x69, 0x95, 0x03, 0x15, 0xd4, 0x5a, 0x69, - 0x12, 0xf4, 0x00, 0x32, 0x11, 0xd1, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, - 0x6f, 0x8f, 0xc3, 0xf8, 0x50, 0x22, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, - 0x6f, 0x8f, 0x5a, 0x69, 0x42, 0xf4, 0x00, 0x32, 0x5a, 0x61, 0xbf, 0xf3, - 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x59, 0x4b, 0x5a, 0x69, 0xd4, 0x03, - 0x27, 0xd4, 0x5a, 0x69, 0x12, 0xf4, 0x80, 0x32, 0x23, 0xd1, 0xc3, 0xf8, - 0x84, 0x20, 0xbf, 0xf3, 0x4f, 0x8f, 0xd3, 0xf8, 0x80, 0x20, 0x43, 0xf6, - 0xe0, 0x74, 0xc2, 0xf3, 0xc9, 0x00, 0xc2, 0xf3, 0x4e, 0x32, 0x52, 0x01, - 0x02, 0xea, 0x04, 0x06, 0x01, 0x46, 0x46, 0xea, 0x81, 0x75, 0x01, 0x39, - 0xc3, 0xf8, 0x60, 0x52, 0xf9, 0xd2, 0x20, 0x3a, 0x12, 0xf1, 0x20, 0x0f, - 0xf2, 0xd1, 0xbf, 0xf3, 0x4f, 0x8f, 0x5a, 0x69, 0x42, 0xf4, 0x80, 0x32, - 0x5a, 0x61, 0xbf, 0xf3, 0x4f, 0x8f, 0xbf, 0xf3, 0x6f, 0x8f, 0x45, 0x4c, - 0xd4, 0xf8, 0xe0, 0x30, 0x43, 0xf0, 0x00, 0x73, 0xc4, 0xf8, 0xe0, 0x30, - 0xd4, 0xf8, 0xe0, 0x30, 0x03, 0xf0, 0x00, 0x73, 0x01, 0x93, 0x01, 0x9b, - 0xed, 0xf7, 0xa2, 0xfd, 0x3b, 0x49, 0x3e, 0x4b, 0xca, 0x68, 0x22, 0xf4, - 0xe0, 0x62, 0x12, 0x04, 0x12, 0x0c, 0x13, 0x43, 0xcb, 0x60, 0xee, 0xf7, - 0x19, 0xfb, 0xa3, 0x69, 0xa2, 0x69, 0xc3, 0xf3, 0x03, 0x23, 0x38, 0x4a, - 0xd3, 0x5c, 0x03, 0xf0, 0x1f, 0x03, 0xd8, 0x40, 0x36, 0x4b, 0x18, 0x60, - 0xee, 0xf7, 0x10, 0xff, 0x23, 0x6f, 0x98, 0x07, 0x0a, 0xd4, 0x34, 0x4a, - 0x13, 0x68, 0x43, 0xf4, 0x80, 0x73, 0x13, 0x60, 0x32, 0x4b, 0x1b, 0x68, - 0x23, 0x6f, 0x23, 0xf0, 0x18, 0x03, 0x23, 0x67, 0xec, 0xf7, 0xe8, 0xff, - 0x01, 0x20, 0xef, 0xf7, 0x09, 0xfb, 0x30, 0xb9, 0x2d, 0x48, 0xf8, 0xf7, - 0x5f, 0xf8, 0x9a, 0x60, 0x01, 0x32, 0x18, 0x61, 0x4e, 0xe7, 0xed, 0xf7, - 0x6d, 0xfd, 0xe8, 0xf7, 0xb1, 0xfe, 0xef, 0xf3, 0x05, 0x83, 0x2b, 0xb9, - 0xff, 0xf7, 0x7c, 0xfe, 0x10, 0xb9, 0xdf, 0xf8, 0xb0, 0xc0, 0x00, 0xdf, - 0x24, 0x4a, 0x25, 0x4b, 0x13, 0x61, 0x4f, 0xf4, 0x80, 0x53, 0x53, 0x61, - 0x44, 0x23, 0xd3, 0x60, 0x22, 0x4b, 0x93, 0x60, 0x18, 0x23, 0x93, 0x61, - 0x21, 0x4b, 0x13, 0x60, 0xef, 0xf3, 0x05, 0x83, 0x1b, 0xb1, 0x1c, 0x49, - 0x1f, 0x48, 0xea, 0xf7, 0xe5, 0xfe, 0xff, 0xf7, 0x61, 0xfe, 0x01, 0x46, - 0x00, 0x28, 0xf6, 0xd1, 0x1c, 0x48, 0xdf, 0xf8, 0x78, 0xc0, 0x00, 0xdf, - 0x00, 0x28, 0xf0, 0xd0, 0xef, 0xf3, 0x05, 0x83, 0x2b, 0xb9, 0xff, 0xf7, - 0x53, 0xfe, 0x10, 0xb9, 0xdf, 0xf8, 0x64, 0xc0, 0x00, 0xdf, 0x00, 0x21, - 0xe6, 0xe7, 0x00, 0xbf, 0x90, 0xed, 0x00, 0xe0, 0x39, 0xf0, 0x02, 0x06, - 0x39, 0x07, 0x02, 0x13, 0x3f, 0xf5, 0x0b, 0x13, 0x12, 0x00, 0x00, 0x80, - 0x39, 0x00, 0x02, 0x13, 0x00, 0xed, 0x00, 0xe0, 0x98, 0x02, 0x00, 0x20, - 0x00, 0x44, 0x02, 0x58, 0x00, 0x03, 0xfa, 0x05, 0x54, 0xda, 0x01, 0x08, - 0x00, 0x00, 0x00, 0x24, 0x00, 0x48, 0x02, 0x58, 0x00, 0x10, 0x00, 0x5c, - 0x44, 0xe9, 0x01, 0x08, 0xf8, 0x9b, 0x00, 0x24, 0xf8, 0x8b, 0x00, 0x24, - 0x54, 0xa1, 0x00, 0x24, 0x58, 0xe9, 0x01, 0x08, 0x1d, 0x01, 0x01, 0x80, - 0x31, 0xa0, 0x01, 0x08, 0xa9, 0x54, 0x01, 0x08, 0xd9, 0x51, 0x01, 0x08, - 0xb5, 0x5c, 0x01, 0x08, 0xb1, 0xf1, 0x20, 0x4f, 0x2d, 0xe9, 0xf0, 0x43, - 0x06, 0x46, 0x8b, 0xb0, 0x0d, 0x46, 0x14, 0x46, 0x49, 0xd3, 0x72, 0x4f, - 0x4f, 0xf0, 0x00, 0x09, 0x90, 0x46, 0x00, 0x22, 0x38, 0x68, 0x05, 0xf1, - 0xc0, 0x45, 0x03, 0x68, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, 0x89, 0x45, - 0x08, 0xbf, 0x84, 0x42, 0x38, 0x68, 0x03, 0x68, 0x2f, 0xd2, 0x00, 0x22, - 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, 0x03, 0xf0, 0x25, 0xfb, 0x22, 0x46, - 0x31, 0x46, 0x80, 0x46, 0x03, 0xf0, 0x82, 0xfb, 0x38, 0x68, 0x08, 0xeb, - 0x04, 0x09, 0x03, 0x68, 0x5b, 0x6b, 0x98, 0x47, 0x06, 0x46, 0x38, 0x68, - 0x00, 0x22, 0x03, 0x68, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, 0x31, 0x46, - 0x02, 0x1b, 0x48, 0x46, 0x03, 0xf0, 0x7e, 0xfb, 0x3c, 0x68, 0x00, 0x22, - 0x23, 0x68, 0x20, 0x46, 0x9e, 0x69, 0x19, 0x6b, 0x00, 0x23, 0x88, 0x47, - 0x2a, 0x46, 0x00, 0x23, 0xcd, 0xe9, 0x00, 0x01, 0x41, 0x46, 0x20, 0x46, - 0xb0, 0x47, 0x80, 0xb2, 0x0b, 0xb0, 0xbd, 0xe8, 0xf0, 0x83, 0xcd, 0xe9, - 0x00, 0x89, 0x2a, 0x46, 0x9c, 0x69, 0x31, 0x46, 0x00, 0x23, 0xa0, 0x47, - 0xf3, 0xe7, 0xb1, 0xf1, 0x10, 0x4f, 0x18, 0xd3, 0x00, 0x22, 0x00, 0x23, - 0x4b, 0x48, 0x01, 0xf1, 0xe0, 0x45, 0xf0, 0xf7, 0xc3, 0xfd, 0x0b, 0x46, - 0x00, 0x21, 0x02, 0x46, 0x47, 0x48, 0x99, 0x42, 0x4f, 0xf0, 0x00, 0x03, - 0x31, 0x46, 0x08, 0xbf, 0x94, 0x42, 0x38, 0xbf, 0x14, 0x46, 0x2a, 0x46, - 0xcd, 0xe9, 0x00, 0x43, 0xf5, 0xf7, 0xda, 0xfe, 0xd7, 0xe7, 0x10, 0x46, - 0x03, 0xf0, 0xd4, 0xfa, 0x22, 0x46, 0x31, 0x46, 0x07, 0x46, 0x03, 0xf0, - 0x31, 0xfb, 0x0c, 0x20, 0x03, 0xf0, 0xcc, 0xfa, 0x3b, 0x4b, 0x00, 0x22, - 0x84, 0x60, 0x05, 0x93, 0x06, 0xae, 0x3a, 0x4b, 0x04, 0x92, 0xcd, 0xe9, - 0x02, 0x30, 0x02, 0xab, 0xc0, 0xe9, 0x00, 0x75, 0x0f, 0xcb, 0x37, 0x4d, - 0x86, 0xe8, 0x0f, 0x00, 0xf7, 0xf7, 0xca, 0xfa, 0x2b, 0x46, 0x53, 0xf8, - 0x18, 0x4f, 0x6c, 0xb9, 0xeb, 0x69, 0x33, 0x2b, 0x4f, 0xd9, 0x2c, 0x6a, - 0x34, 0x3b, 0x04, 0xf1, 0x34, 0x02, 0xeb, 0x61, 0x34, 0x23, 0x2a, 0x62, - 0x23, 0x60, 0x01, 0x23, 0xa3, 0x71, 0x08, 0xe0, 0x22, 0x68, 0x33, 0x2a, - 0x3d, 0xd9, 0xe2, 0x68, 0x00, 0x2a, 0x37, 0xd0, 0x1a, 0x60, 0xa3, 0x68, - 0x93, 0x60, 0xf7, 0xf7, 0x99, 0xfa, 0x00, 0x22, 0x4f, 0xf0, 0xff, 0x33, - 0x04, 0xf1, 0x24, 0x07, 0xc4, 0xe9, 0x05, 0x23, 0x96, 0xe8, 0x0f, 0x00, - 0x87, 0xe8, 0x0f, 0x00, 0x21, 0x4b, 0xe3, 0x61, 0xfc, 0xf7, 0x72, 0xfb, - 0x20, 0x4b, 0x02, 0x46, 0x21, 0x46, 0x23, 0x62, 0x63, 0x69, 0x03, 0x44, - 0x1b, 0x48, 0x63, 0x61, 0xf8, 0xf7, 0xd4, 0xf9, 0x2a, 0x6b, 0xef, 0xf3, - 0x05, 0x83, 0x13, 0xb9, 0xff, 0xf7, 0x54, 0xfd, 0xe8, 0xb1, 0xd2, 0xb1, - 0x13, 0x78, 0xf3, 0x2b, 0x17, 0xd1, 0x02, 0xf1, 0x0c, 0x03, 0x01, 0x21, - 0x53, 0xe8, 0x00, 0x4f, 0x44, 0xea, 0x01, 0x00, 0x43, 0xe8, 0x00, 0x05, - 0x05, 0xb1, 0xf7, 0xe7, 0x10, 0x46, 0xfd, 0xf7, 0xd1, 0xfd, 0x08, 0xe0, - 0xa2, 0x68, 0x1a, 0x60, 0xc7, 0xe7, 0x04, 0xf1, 0x08, 0x03, 0xa4, 0x68, - 0xab, 0xe7, 0xf7, 0xf7, 0x5d, 0xfa, 0x00, 0x20, 0x60, 0xe7, 0x10, 0x46, - 0x01, 0x21, 0xdf, 0xf8, 0x24, 0xc0, 0x00, 0xdf, 0xf7, 0xe7, 0x00, 0xbf, - 0xdc, 0x0d, 0x00, 0x24, 0x78, 0x2c, 0x00, 0x24, 0x83, 0x57, 0x01, 0x08, - 0xb9, 0x77, 0x01, 0x08, 0xb0, 0x72, 0x00, 0x24, 0xa7, 0x57, 0x01, 0x08, - 0x01, 0x8b, 0x01, 0x08, 0xed, 0x81, 0x01, 0x08, 0x73, 0xb5, 0x1f, 0x4c, - 0x04, 0xf1, 0x56, 0x05, 0x04, 0xf1, 0x5a, 0x06, 0xb4, 0xf8, 0x54, 0x10, - 0x28, 0x46, 0x01, 0x91, 0xfc, 0xf7, 0x8f, 0xfe, 0x58, 0xb3, 0x01, 0x99, - 0x30, 0x46, 0xfc, 0xf7, 0x97, 0xfe, 0xe3, 0x6d, 0x53, 0xf8, 0x20, 0x00, - 0x18, 0xb3, 0x03, 0x78, 0xf1, 0x3b, 0x08, 0x2b, 0xec, 0xd8, 0x01, 0xa2, - 0x52, 0xf8, 0x23, 0xf0, 0xd9, 0x7e, 0x01, 0x08, 0x89, 0x7e, 0x01, 0x08, - 0xdf, 0x7e, 0x01, 0x08, 0x89, 0x7e, 0x01, 0x08, 0x89, 0x7e, 0x01, 0x08, - 0xe3, 0x7e, 0x01, 0x08, 0xe7, 0x7e, 0x01, 0x08, 0x89, 0x7e, 0x01, 0x08, - 0xeb, 0x7e, 0x01, 0x08, 0x23, 0x6e, 0x98, 0x47, 0xd4, 0xe7, 0x63, 0x6e, - 0xfb, 0xe7, 0xa3, 0x6e, 0xf9, 0xe7, 0xe3, 0x6e, 0xf7, 0xe7, 0x23, 0x6f, - 0xf5, 0xe7, 0x00, 0x20, 0x02, 0xb0, 0xbd, 0xe8, 0x70, 0x40, 0xfc, 0xf7, - 0x69, 0xbd, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, 0x1f, 0x4b, 0x18, 0x68, - 0x70, 0xb5, 0x38, 0x30, 0xea, 0xf7, 0x7e, 0xff, 0x18, 0xb1, 0x1d, 0x4b, - 0x4f, 0xf0, 0x80, 0x62, 0x5a, 0x60, 0x1c, 0x4c, 0xe3, 0x68, 0x01, 0x33, - 0xe3, 0x60, 0xfc, 0xf7, 0xb1, 0xfd, 0x00, 0x20, 0xfc, 0xf7, 0x52, 0xfd, - 0x23, 0x6d, 0x03, 0xb1, 0x98, 0x47, 0x22, 0x6c, 0x2a, 0xb3, 0xa3, 0x69, - 0xe1, 0x6b, 0x99, 0x42, 0x03, 0xd0, 0xd9, 0x69, 0xe3, 0x63, 0x01, 0xb9, - 0xda, 0x61, 0xda, 0x69, 0xba, 0xb9, 0x26, 0x7a, 0x02, 0x2e, 0x18, 0xd1, - 0x65, 0x6a, 0xb5, 0xb1, 0xe3, 0x6b, 0x95, 0xf9, 0x20, 0x20, 0x93, 0xf9, - 0x20, 0x30, 0x9a, 0x42, 0x0f, 0xd1, 0x28, 0x46, 0xfc, 0xf7, 0xbe, 0xfc, - 0xe0, 0x6b, 0xfc, 0xf7, 0x29, 0xfd, 0x6e, 0x70, 0x23, 0x6c, 0xe5, 0x63, - 0xa5, 0x61, 0xeb, 0x61, 0x03, 0xe0, 0x01, 0x3a, 0xda, 0x61, 0x00, 0x2a, - 0xe3, 0xd0, 0x70, 0xbd, 0x88, 0x86, 0x00, 0x24, 0x00, 0xed, 0x00, 0xe0, - 0x1c, 0x01, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, 0xef, 0xf3, 0x05, 0x83, - 0x1b, 0xb1, 0x5c, 0xb9, 0x6f, 0xf0, 0x03, 0x00, 0x17, 0xe0, 0xff, 0xf7, - 0x8b, 0xfc, 0x00, 0x28, 0xf7, 0xd1, 0x20, 0x46, 0xdf, 0xf8, 0x2c, 0xc0, - 0x00, 0xdf, 0x0e, 0xe0, 0x23, 0x78, 0xf6, 0x2b, 0xf0, 0xd1, 0xe1, 0x89, - 0x04, 0xf1, 0x0c, 0x00, 0xfc, 0xf7, 0x13, 0xfe, 0xe3, 0x89, 0x83, 0x42, - 0x04, 0xd9, 0x20, 0x46, 0xfd, 0xf7, 0x06, 0xfd, 0x00, 0x20, 0x10, 0xbd, - 0x6f, 0xf0, 0x02, 0x00, 0xfb, 0xe7, 0x00, 0xbf, 0x05, 0x4c, 0x01, 0x08, - 0x10, 0xb5, 0x2c, 0x4c, 0x2c, 0x48, 0xf3, 0xf7, 0x27, 0xfd, 0x63, 0x69, - 0x13, 0xb9, 0x94, 0xf8, 0x3d, 0x30, 0x23, 0xb1, 0x28, 0x48, 0xf3, 0xf7, - 0xff, 0xfc, 0x00, 0x20, 0x10, 0xbd, 0xa3, 0x6a, 0x53, 0xb1, 0xa2, 0x6a, - 0x00, 0x23, 0x25, 0x49, 0xe0, 0x6a, 0xb3, 0xeb, 0x90, 0x0f, 0x11, 0xd2, - 0x42, 0xf8, 0x23, 0x10, 0x01, 0x33, 0xf7, 0xe7, 0xe0, 0x6a, 0x21, 0x4b, - 0x98, 0x42, 0x94, 0xbf, 0x20, 0xf0, 0x03, 0x00, 0x4f, 0xf0, 0xff, 0x30, - 0x03, 0xf0, 0x72, 0xf9, 0xa0, 0x62, 0x00, 0x28, 0xe7, 0xd1, 0xdf, 0xe7, - 0x44, 0x23, 0x1b, 0x4a, 0x63, 0x62, 0x1b, 0x4b, 0x22, 0x62, 0x63, 0x60, - 0x1a, 0x4b, 0xa3, 0x60, 0x00, 0x23, 0xe3, 0x60, 0x19, 0x4b, 0x23, 0x61, - 0xef, 0xf3, 0x05, 0x83, 0x8b, 0xb1, 0x00, 0x23, 0x63, 0x61, 0x94, 0xf8, - 0x3c, 0x30, 0x2b, 0xb1, 0xa0, 0x6a, 0x08, 0xb1, 0x03, 0xf0, 0x5e, 0xf9, - 0x00, 0x23, 0xa3, 0x62, 0x0b, 0x48, 0xf3, 0xf7, 0xc5, 0xfc, 0x20, 0x6c, - 0xff, 0xf7, 0x8e, 0xff, 0xc1, 0xe7, 0xff, 0xf7, 0x21, 0xfc, 0x00, 0x28, - 0xe9, 0xd1, 0xa2, 0xf1, 0x78, 0x01, 0x0c, 0x48, 0x60, 0x3a, 0xdf, 0xf8, - 0x30, 0xc0, 0x00, 0xdf, 0x60, 0x61, 0x00, 0x28, 0xb0, 0xd1, 0xe0, 0xe7, - 0x0c, 0x73, 0x00, 0x24, 0x60, 0x73, 0x00, 0x24, 0xa5, 0x2e, 0x5a, 0xe2, - 0xfb, 0xff, 0xff, 0x7f, 0x84, 0x73, 0x00, 0x24, 0xb0, 0x72, 0x00, 0x24, - 0xa5, 0x46, 0x01, 0x08, 0x89, 0x57, 0x01, 0x08, 0xe1, 0xca, 0x00, 0x08, - 0xd9, 0x51, 0x01, 0x08, 0x02, 0x46, 0x08, 0xb5, 0xef, 0xf3, 0x05, 0x83, - 0x13, 0xb1, 0x6f, 0xf0, 0x05, 0x00, 0x08, 0xbd, 0xff, 0xf7, 0xf6, 0xfb, - 0x00, 0x28, 0xf8, 0xd1, 0x10, 0x46, 0xdf, 0xf8, 0x08, 0xc0, 0x00, 0xdf, - 0xf5, 0xe7, 0x00, 0xbf, 0xcd, 0x50, 0x01, 0x08, 0x06, 0x4b, 0x10, 0xb5, - 0x03, 0x60, 0x04, 0x46, 0x90, 0xf8, 0x80, 0x30, 0x0b, 0xb1, 0xfd, 0xf7, - 0xc5, 0xfe, 0xe0, 0x6d, 0xff, 0xf7, 0xe0, 0xff, 0x20, 0x46, 0x10, 0xbd, - 0x90, 0xec, 0x01, 0x08, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xec, 0xff, - 0x20, 0x46, 0x03, 0xf0, 0x07, 0xf9, 0x20, 0x46, 0x10, 0xbd, 0x00, 0x00, - 0x02, 0x46, 0x08, 0xb5, 0xef, 0xf3, 0x05, 0x83, 0x13, 0xb1, 0x6f, 0xf0, - 0x05, 0x00, 0x08, 0xbd, 0xff, 0xf7, 0xc8, 0xfb, 0x00, 0x28, 0xf8, 0xd1, - 0x10, 0x46, 0xdf, 0xf8, 0x08, 0xc0, 0x00, 0xdf, 0xf5, 0xe7, 0x00, 0xbf, - 0x65, 0x4c, 0x01, 0x08, 0x02, 0x46, 0x08, 0xb5, 0xef, 0xf3, 0x05, 0x83, - 0x0b, 0xb1, 0x00, 0x20, 0x08, 0xbd, 0xff, 0xf7, 0xb5, 0xfb, 0x00, 0x28, - 0xf9, 0xd1, 0x10, 0x46, 0xdf, 0xf8, 0x04, 0xc0, 0x00, 0xdf, 0xf5, 0xe7, - 0x0d, 0x54, 0x01, 0x08, 0x10, 0xb4, 0x02, 0xf0, 0x01, 0x04, 0x92, 0x07, - 0x09, 0xd4, 0x0c, 0x30, 0x1c, 0xb1, 0x5d, 0xf8, 0x04, 0x4b, 0xfc, 0xf7, - 0xe6, 0xbc, 0x5d, 0xf8, 0x04, 0x4b, 0xfc, 0xf7, 0xd1, 0xbc, 0xc0, 0x68, - 0x01, 0xea, 0x00, 0x02, 0x2c, 0xb1, 0x91, 0x42, 0x18, 0xbf, 0x00, 0x20, - 0x5d, 0xf8, 0x04, 0x4b, 0x70, 0x47, 0x00, 0x2a, 0x08, 0xbf, 0x00, 0x20, - 0xf8, 0xe7, 0x00, 0x00, 0xf8, 0xb5, 0x0d, 0x46, 0x17, 0x46, 0x1e, 0x46, - 0x04, 0x46, 0xc0, 0xb1, 0x03, 0x78, 0xf3, 0x2b, 0x15, 0xd1, 0x00, 0x29, - 0x13, 0xdb, 0xff, 0xf7, 0xd5, 0xff, 0x90, 0xb9, 0x96, 0xb1, 0x31, 0x46, - 0x43, 0x20, 0xfc, 0xf7, 0xa7, 0xfb, 0x38, 0xb1, 0x08, 0x4b, 0x20, 0x46, - 0x59, 0x69, 0xfc, 0xf7, 0xe5, 0xfb, 0x4d, 0x62, 0x81, 0xf8, 0x23, 0x70, - 0x6f, 0xf0, 0x01, 0x00, 0x01, 0xe0, 0x6f, 0xf0, 0x03, 0x00, 0xf8, 0xbd, - 0x6f, 0xf0, 0x02, 0x00, 0xfb, 0xe7, 0x00, 0xbf, 0x1c, 0x01, 0x00, 0x24, - 0xf8, 0xb5, 0x06, 0x46, 0x70, 0xb3, 0x03, 0x78, 0xf3, 0x2b, 0x2b, 0xd1, - 0x00, 0x29, 0x29, 0xdb, 0x00, 0xf1, 0x0c, 0x03, 0x53, 0xe8, 0x00, 0x2f, - 0x42, 0xea, 0x01, 0x04, 0x43, 0xe8, 0x00, 0x40, 0x00, 0xb1, 0xf7, 0xe7, - 0xb5, 0x68, 0x25, 0xb9, 0x28, 0x46, 0xfc, 0xf7, 0xd9, 0xfb, 0x20, 0x46, - 0xf8, 0xbd, 0x69, 0x6a, 0x30, 0x46, 0x95, 0xf8, 0x23, 0x20, 0xaf, 0x68, - 0xff, 0xf7, 0x9a, 0xff, 0x01, 0x46, 0x68, 0xb1, 0x95, 0xf8, 0x23, 0x30, - 0x9b, 0x07, 0x56, 0xbf, 0x6c, 0x6a, 0x04, 0x46, 0x20, 0xea, 0x04, 0x04, - 0x28, 0x46, 0xfc, 0xf7, 0x4d, 0xfb, 0x00, 0x22, 0xfc, 0xf7, 0xe8, 0xfb, - 0x3d, 0x46, 0xe0, 0xe7, 0x6f, 0xf0, 0x03, 0x04, 0xe1, 0xe7, 0x70, 0xb5, - 0x05, 0x46, 0x84, 0x68, 0x04, 0xb9, 0x70, 0xbd, 0x61, 0x6a, 0x28, 0x46, - 0x94, 0xf8, 0x23, 0x20, 0xa6, 0x68, 0xff, 0xf7, 0x79, 0xff, 0x01, 0x46, - 0x28, 0xb1, 0x20, 0x46, 0xfc, 0xf7, 0x34, 0xfb, 0x00, 0x22, 0xfc, 0xf7, - 0xcf, 0xfb, 0x34, 0x46, 0xec, 0xe7, 0x00, 0x00, 0x38, 0xb5, 0x0c, 0x4d, - 0x00, 0x24, 0xf7, 0xf7, 0x4f, 0xf8, 0x28, 0x46, 0xf7, 0xf7, 0xd3, 0xff, - 0x6c, 0x63, 0xf7, 0xf7, 0x35, 0xf8, 0x01, 0x21, 0x07, 0x48, 0xf8, 0xf7, - 0x4f, 0xf8, 0x01, 0x21, 0x06, 0x48, 0xf8, 0xf7, 0x4b, 0xf8, 0x01, 0x21, - 0x05, 0x48, 0xf8, 0xf7, 0x47, 0xf8, 0x20, 0x46, 0x38, 0xbd, 0x00, 0xbf, - 0xc0, 0x6a, 0x00, 0x24, 0x80, 0x2e, 0x00, 0x24, 0x18, 0x0e, 0x00, 0x24, - 0xf8, 0x06, 0x00, 0x24, 0x70, 0xb5, 0x04, 0x46, 0x0d, 0x46, 0x16, 0x46, - 0x00, 0x21, 0x1c, 0x22, 0x03, 0xf0, 0x8a, 0xf8, 0x20, 0x46, 0x32, 0x46, - 0x29, 0x46, 0xf7, 0xf7, 0x55, 0xfc, 0x20, 0x46, 0x70, 0xbd, 0x00, 0x00, - 0x38, 0xb5, 0x67, 0x4c, 0x20, 0x68, 0xe5, 0x6a, 0x43, 0x6b, 0x19, 0x04, - 0x1f, 0xd5, 0x2a, 0x07, 0x1d, 0xd5, 0xa3, 0x6a, 0x1f, 0x2b, 0x19, 0xd9, - 0x61, 0x6a, 0x0b, 0x1d, 0x01, 0xf1, 0x24, 0x00, 0x22, 0x68, 0x04, 0x33, - 0xd2, 0xf8, 0x80, 0x20, 0x15, 0x0a, 0x03, 0xf8, 0x08, 0x2c, 0x03, 0xf8, - 0x07, 0x5c, 0x15, 0x0c, 0x12, 0x0e, 0x03, 0xf8, 0x06, 0x5c, 0x03, 0xf8, - 0x05, 0x2c, 0x83, 0x42, 0xee, 0xd1, 0xa3, 0x6a, 0x20, 0x31, 0x20, 0x3b, - 0x61, 0x62, 0xa3, 0x62, 0x38, 0xbd, 0x43, 0x6b, 0xdb, 0x05, 0x35, 0xd5, - 0x4f, 0xf4, 0x80, 0x73, 0x83, 0x63, 0xc3, 0x6b, 0x23, 0xf4, 0x41, 0x43, - 0x23, 0xf0, 0x3a, 0x03, 0xc3, 0x63, 0xc3, 0x6b, 0x23, 0xf0, 0x80, 0x53, - 0xc3, 0x63, 0xc3, 0x68, 0x23, 0xf0, 0x40, 0x03, 0xc3, 0x60, 0x15, 0xf0, - 0x08, 0x03, 0x11, 0xd0, 0x15, 0xf0, 0x22, 0x0f, 0x05, 0xd0, 0xed, 0xf7, - 0x7d, 0xfc, 0x10, 0xb1, 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, 0x23, 0x68, - 0x44, 0x4a, 0x9a, 0x63, 0x01, 0x23, 0x84, 0xf8, 0x30, 0x30, 0x00, 0x23, - 0xe3, 0x62, 0xd5, 0xe7, 0x29, 0x06, 0xd3, 0xd5, 0x15, 0xf0, 0x22, 0x0f, - 0x83, 0x62, 0xc3, 0x62, 0x03, 0x65, 0xf1, 0xd0, 0xed, 0xf7, 0x66, 0xfc, - 0x00, 0x28, 0xed, 0xd0, 0x63, 0x6b, 0x18, 0x43, 0x60, 0x63, 0xe9, 0xe7, - 0x43, 0x6b, 0x5a, 0x04, 0x11, 0xd5, 0x2b, 0x07, 0x0f, 0xd5, 0x22, 0x6a, - 0x1f, 0x2a, 0xbd, 0xd9, 0xe3, 0x69, 0x03, 0xf1, 0x20, 0x01, 0x53, 0xf8, - 0x04, 0x5b, 0x8b, 0x42, 0xc0, 0xf8, 0x80, 0x50, 0xf9, 0xd1, 0x20, 0x3a, - 0xe3, 0x61, 0x22, 0x62, 0xb0, 0xe7, 0x43, 0x6b, 0x13, 0xf0, 0x3a, 0x0f, - 0x43, 0x6b, 0x4d, 0xd0, 0x99, 0x07, 0x03, 0xd5, 0x63, 0x6b, 0x43, 0xf0, - 0x02, 0x03, 0x63, 0x63, 0x43, 0x6b, 0x1a, 0x07, 0x03, 0xd5, 0x63, 0x6b, - 0x43, 0xf0, 0x08, 0x03, 0x63, 0x63, 0x43, 0x6b, 0x9b, 0x06, 0x03, 0xd5, - 0x63, 0x6b, 0x43, 0xf0, 0x20, 0x03, 0x63, 0x63, 0x43, 0x6b, 0xd9, 0x06, - 0x03, 0xd5, 0x63, 0x6b, 0x43, 0xf0, 0x10, 0x03, 0x63, 0x63, 0x1e, 0x4b, - 0x83, 0x63, 0xc3, 0x6b, 0x23, 0xf4, 0x9d, 0x73, 0xc3, 0x63, 0xc3, 0x68, - 0x23, 0xf0, 0x40, 0x03, 0xc3, 0x60, 0xc3, 0x6a, 0x43, 0xf4, 0x00, 0x53, - 0xc3, 0x62, 0xc3, 0x68, 0x43, 0xf0, 0x80, 0x03, 0xc3, 0x60, 0xed, 0xf7, - 0x17, 0xfc, 0x63, 0x6b, 0x15, 0xf0, 0x08, 0x01, 0x40, 0xea, 0x03, 0x00, - 0x23, 0x68, 0x60, 0x63, 0xda, 0x68, 0x22, 0xf0, 0x80, 0x02, 0xda, 0x60, - 0x4f, 0xf4, 0x00, 0x62, 0x9a, 0x63, 0x91, 0xd1, 0x2a, 0x06, 0x7f, 0xf5, - 0x6b, 0xaf, 0x62, 0x6b, 0x00, 0x2a, 0x3f, 0xf4, 0x67, 0xaf, 0xda, 0x6b, - 0x22, 0xf0, 0x80, 0x52, 0xda, 0x63, 0x19, 0x65, 0x01, 0x23, 0x84, 0xf8, - 0x30, 0x30, 0x5d, 0xe7, 0xdb, 0x00, 0x7f, 0xf5, 0x5b, 0xaf, 0x4f, 0xf0, - 0x80, 0x53, 0x83, 0x63, 0x03, 0x6d, 0x55, 0xe7, 0x04, 0x6c, 0x00, 0x24, - 0x3a, 0x0f, 0x00, 0x18, 0x08, 0xb5, 0x09, 0x4b, 0x1b, 0x68, 0x2b, 0xb1, - 0x08, 0x4b, 0x1b, 0x68, 0x50, 0x33, 0x53, 0xf8, 0x20, 0x00, 0x08, 0xbd, - 0x06, 0x4b, 0x1b, 0x78, 0x13, 0xb1, 0x06, 0x48, 0x04, 0xf0, 0xbc, 0xfb, - 0x4f, 0xf0, 0xff, 0x30, 0xf5, 0xe7, 0x00, 0xbf, 0x9c, 0x2e, 0x00, 0x24, - 0x44, 0x05, 0x00, 0x24, 0xd8, 0x0d, 0x00, 0x24, 0x5d, 0xe9, 0x01, 0x08, - 0x2d, 0xe9, 0xf0, 0x4f, 0x00, 0x20, 0xe7, 0xb0, 0xff, 0xf7, 0xde, 0xff, - 0x07, 0x46, 0xd5, 0x48, 0xd5, 0x4d, 0x04, 0x78, 0xbf, 0xf3, 0x5b, 0x8f, - 0x14, 0xf0, 0x01, 0x04, 0x30, 0xd1, 0xf6, 0xf7, 0xc5, 0xfe, 0x68, 0xb3, - 0xd1, 0x4b, 0xd3, 0xf8, 0xd0, 0x20, 0x51, 0x00, 0x00, 0xf1, 0x44, 0x82, - 0xd3, 0xf8, 0xd0, 0x20, 0x00, 0x2a, 0xc0, 0xf2, 0x3f, 0x82, 0xd3, 0xf8, - 0xd0, 0x20, 0xd2, 0x00, 0x00, 0xf1, 0x3c, 0x82, 0xd3, 0xf8, 0xd0, 0x20, - 0x56, 0x01, 0x00, 0xf1, 0x37, 0x82, 0xd3, 0xf8, 0xd0, 0x20, 0xd0, 0x01, - 0x00, 0xf1, 0x34, 0x82, 0xd3, 0xf8, 0xd0, 0x20, 0x11, 0x02, 0x0b, 0xd4, - 0xd3, 0xf8, 0xd0, 0x20, 0x92, 0x02, 0x00, 0xf1, 0x2d, 0x82, 0xd3, 0xf8, - 0xd0, 0x30, 0x13, 0xf4, 0x80, 0x0f, 0x0c, 0xbf, 0x0b, 0x24, 0x01, 0x24, - 0xba, 0x48, 0x2c, 0x70, 0xf6, 0xf7, 0x8e, 0xfe, 0xbb, 0x4c, 0x23, 0x78, - 0xbf, 0xf3, 0x5b, 0x8f, 0xdb, 0x07, 0x0b, 0xd4, 0x20, 0x46, 0xf6, 0xf7, - 0x8d, 0xfe, 0x38, 0xb1, 0xb5, 0x4b, 0x20, 0x46, 0xd3, 0xf8, 0xd0, 0x20, - 0xb5, 0x4b, 0x1a, 0x60, 0xf6, 0xf7, 0x7c, 0xfe, 0xb1, 0x4a, 0xd2, 0xf8, - 0xd0, 0x30, 0x43, 0xf4, 0x80, 0x33, 0xc2, 0xf8, 0xd0, 0x30, 0x2b, 0x78, - 0x01, 0x2b, 0x07, 0xd1, 0x4d, 0xf6, 0x59, 0x70, 0xea, 0xf7, 0x7e, 0xfb, - 0x4f, 0xf4, 0xfa, 0x70, 0xf0, 0xf7, 0xcc, 0xff, 0x00, 0x22, 0x94, 0x21, - 0x13, 0xa8, 0x00, 0x24, 0xff, 0xf7, 0x96, 0xfe, 0x00, 0x22, 0x92, 0x21, - 0x0c, 0xa8, 0xff, 0xf7, 0x91, 0xfe, 0x00, 0x22, 0x93, 0x21, 0x05, 0xa8, - 0xff, 0xf7, 0x8c, 0xfe, 0x28, 0xad, 0xf0, 0xf7, 0xd5, 0xfe, 0xa2, 0x4b, - 0x98, 0x22, 0x21, 0x46, 0x28, 0x93, 0x34, 0xa8, 0xa0, 0x4b, 0x24, 0x26, - 0x2c, 0x94, 0x2d, 0x93, 0x2e, 0x95, 0xad, 0xf8, 0xcc, 0x40, 0xcd, 0xe9, - 0x2f, 0x44, 0xcd, 0xe9, 0x31, 0x44, 0x02, 0xf0, 0x09, 0xff, 0x9b, 0x4b, - 0xcd, 0xe9, 0x5a, 0x34, 0x5c, 0xab, 0x01, 0x3e, 0x03, 0xf8, 0x01, 0x4b, - 0xfb, 0xd1, 0x28, 0x46, 0x21, 0xac, 0xf8, 0xf7, 0xaa, 0xf8, 0x96, 0x4b, - 0x1c, 0x22, 0x31, 0x46, 0x1a, 0xa8, 0x65, 0x93, 0x02, 0xf0, 0xf6, 0xfe, - 0x17, 0x21, 0x1a, 0xa8, 0xad, 0xf8, 0x78, 0x10, 0xec, 0xf7, 0xf4, 0xff, - 0x31, 0x46, 0x1a, 0xa8, 0xed, 0xf7, 0x14, 0xf8, 0x31, 0x46, 0xbd, 0xf9, - 0x78, 0x00, 0xec, 0xf7, 0xf7, 0xf8, 0x01, 0x21, 0x1a, 0xa8, 0xf6, 0xf7, - 0xbb, 0xff, 0x1c, 0x22, 0x31, 0x46, 0x20, 0x46, 0x02, 0xf0, 0xde, 0xfe, - 0x16, 0x21, 0x20, 0x46, 0x21, 0x82, 0xec, 0xf7, 0xdd, 0xff, 0x31, 0x46, - 0x20, 0x46, 0xec, 0xf7, 0xfd, 0xff, 0x31, 0x46, 0xb4, 0xf9, 0x10, 0x00, - 0xec, 0xf7, 0xe0, 0xf8, 0x20, 0x46, 0x01, 0x21, 0xf6, 0xf7, 0xa4, 0xff, - 0x20, 0x46, 0xf7, 0xf7, 0x6b, 0xfe, 0x00, 0x28, 0x6e, 0xd0, 0x1a, 0xa8, - 0xf7, 0xf7, 0x66, 0xfe, 0x01, 0x28, 0x69, 0xd0, 0xf6, 0xf7, 0x60, 0xfe, - 0x4f, 0xf0, 0x0a, 0x08, 0x31, 0x46, 0xb4, 0xf9, 0x10, 0x00, 0xec, 0xf7, - 0xc9, 0xf8, 0xf6, 0xf7, 0x43, 0xfe, 0xf6, 0xf7, 0x55, 0xfe, 0x01, 0x21, - 0x20, 0x46, 0xec, 0xf7, 0xd9, 0xff, 0xf6, 0xf7, 0x3b, 0xfe, 0xf6, 0xf7, - 0x4d, 0xfe, 0x00, 0x21, 0xb4, 0xf9, 0x10, 0x00, 0xec, 0xf7, 0xb8, 0xf8, - 0xf6, 0xf7, 0x32, 0xfe, 0x00, 0x21, 0x20, 0x46, 0xf7, 0xf7, 0x4c, 0xfe, - 0x05, 0x20, 0xf6, 0xf7, 0xc3, 0xfd, 0xf6, 0xf7, 0x3d, 0xfe, 0x01, 0x21, - 0xb4, 0xf9, 0x10, 0x00, 0xec, 0xf7, 0xa8, 0xf8, 0xf6, 0xf7, 0x22, 0xfe, - 0x01, 0x21, 0x20, 0x46, 0xf7, 0xf7, 0x3c, 0xfe, 0x05, 0x20, 0xf6, 0xf7, - 0xb3, 0xfd, 0xb8, 0xf1, 0x01, 0x08, 0xdc, 0xd1, 0xf6, 0xf7, 0x2a, 0xfe, - 0x01, 0x21, 0x1a, 0xa8, 0xec, 0xf7, 0xae, 0xff, 0xf6, 0xf7, 0x10, 0xfe, - 0x41, 0x46, 0x1a, 0xa8, 0xf7, 0xf7, 0x2a, 0xfe, 0x05, 0x20, 0xf6, 0xf7, - 0xa1, 0xfd, 0x01, 0x21, 0x20, 0x46, 0xf7, 0xf7, 0x23, 0xfe, 0x05, 0x20, - 0xf6, 0xf7, 0x9a, 0xfd, 0x01, 0x21, 0x1a, 0xa8, 0xf7, 0xf7, 0x1c, 0xfe, - 0x05, 0x20, 0xf6, 0xf7, 0x93, 0xfd, 0xf6, 0xf7, 0x0d, 0xfe, 0x41, 0x46, - 0x1a, 0xa8, 0xec, 0xf7, 0x91, 0xff, 0xf6, 0xf7, 0xf3, 0xfd, 0xf6, 0xf7, - 0x05, 0xfe, 0x20, 0x46, 0x41, 0x46, 0xec, 0xf7, 0x89, 0xff, 0xf6, 0xf7, - 0xeb, 0xfd, 0x20, 0x46, 0xf7, 0xf7, 0xfe, 0xfd, 0x10, 0xb1, 0x1a, 0xa8, - 0xf7, 0xf7, 0xfa, 0xfd, 0xbd, 0xf9, 0x94, 0xa1, 0xbd, 0xf9, 0x96, 0x81, - 0x42, 0x49, 0x50, 0x46, 0xf7, 0xf7, 0xbe, 0xf8, 0x81, 0x46, 0x41, 0x49, - 0x40, 0x46, 0xf7, 0xf7, 0xb9, 0xf8, 0x01, 0x46, 0x48, 0x46, 0xf7, 0xf7, - 0xcb, 0xf8, 0x3c, 0x49, 0x83, 0x46, 0x50, 0x46, 0xf7, 0xf7, 0xa4, 0xf8, - 0x3a, 0x49, 0x81, 0x46, 0x40, 0x46, 0xf7, 0xf7, 0x9f, 0xf8, 0x98, 0x22, - 0x00, 0x21, 0x20, 0x61, 0x34, 0xa8, 0xc4, 0xf8, 0x00, 0xb0, 0xa4, 0xf8, - 0x04, 0xa0, 0xc4, 0xf8, 0x08, 0x90, 0xa4, 0xf8, 0x0c, 0x80, 0x02, 0xf0, - 0x2f, 0xfe, 0x21, 0x46, 0x34, 0xa8, 0xee, 0xf7, 0x9f, 0xf9, 0x28, 0x46, - 0xf7, 0xf7, 0xcd, 0xff, 0x4f, 0x23, 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, - 0x68, 0x30, 0xee, 0xf7, 0x03, 0xfe, 0x4f, 0xf4, 0x75, 0x63, 0x1a, 0xa9, - 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, 0xfb, 0xfd, 0x40, 0xf2, - 0x4c, 0x53, 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, - 0xf3, 0xfd, 0x40, 0xf2, 0x4d, 0x33, 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, - 0x68, 0x30, 0xee, 0xf7, 0xeb, 0xfd, 0x40, 0xf6, 0x52, 0x13, 0x1a, 0xa9, - 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, 0xe3, 0xfd, 0x40, 0xf6, - 0x53, 0x73, 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, - 0xdb, 0xfd, 0x0a, 0x20, 0xf0, 0xf7, 0x94, 0xfe, 0x48, 0xf2, 0x9c, 0x03, - 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, 0xd0, 0xfd, - 0x42, 0xf2, 0x9e, 0x03, 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, - 0xee, 0xf7, 0xc8, 0xfd, 0x0a, 0x20, 0xf0, 0xf7, 0x81, 0xfe, 0x40, 0xf2, - 0x42, 0x23, 0x15, 0xe0, 0xe8, 0x8a, 0x00, 0x24, 0xef, 0x8b, 0x00, 0x24, - 0x00, 0x44, 0x02, 0x58, 0xec, 0x8a, 0x00, 0x24, 0xf0, 0x8b, 0x00, 0x24, - 0xa4, 0xed, 0x01, 0x08, 0xcf, 0xe9, 0x00, 0x08, 0xa0, 0x86, 0x01, 0x00, - 0x17, 0x00, 0x16, 0x00, 0x28, 0xdb, 0x01, 0x08, 0x8c, 0xda, 0x01, 0x08, - 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, 0xa6, 0xfd, - 0x0a, 0x20, 0xf0, 0xf7, 0x5f, 0xfe, 0x4a, 0xf2, 0x94, 0x03, 0x1a, 0xa9, - 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, 0x9b, 0xfd, 0x40, 0xf6, - 0x3b, 0x73, 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, 0x68, 0x30, 0xee, 0xf7, - 0x93, 0xfd, 0x40, 0xf6, 0x35, 0x73, 0x1a, 0xa9, 0x28, 0x46, 0xad, 0xf8, - 0x68, 0x30, 0xee, 0xf7, 0x8b, 0xfd, 0x0a, 0x20, 0xf0, 0xf7, 0x44, 0xfe, - 0x01, 0x21, 0x13, 0xa8, 0xf7, 0xf7, 0x4c, 0xfd, 0x0a, 0x20, 0xf0, 0xf7, - 0x3d, 0xfe, 0x00, 0x21, 0x13, 0xa8, 0xf7, 0xf7, 0x45, 0xfd, 0x0a, 0x20, - 0xf0, 0xf7, 0x36, 0xfe, 0x01, 0x21, 0x13, 0xa8, 0xf7, 0xf7, 0x3e, 0xfd, - 0x0a, 0x20, 0xf0, 0xf7, 0x2f, 0xfe, 0x4d, 0xf6, 0x59, 0x73, 0x9f, 0x42, - 0x5e, 0xd0, 0x40, 0xf2, 0xaa, 0x73, 0x9f, 0x42, 0x5a, 0xd0, 0x00, 0x20, - 0xea, 0xf7, 0xd2, 0xf9, 0xf0, 0xf7, 0x26, 0xfd, 0x2b, 0x4b, 0x1a, 0x68, - 0x02, 0xf0, 0x7f, 0x42, 0xb2, 0xf1, 0x00, 0x5f, 0x11, 0xd0, 0x1a, 0x68, - 0x02, 0xf0, 0x7f, 0x42, 0xb2, 0xf1, 0x10, 0x5f, 0x0b, 0xd0, 0x1a, 0x68, - 0x02, 0xf0, 0x7f, 0x42, 0xb2, 0xf1, 0x40, 0x5f, 0x05, 0xd0, 0x1b, 0x68, - 0x03, 0xf0, 0x7f, 0x43, 0xb3, 0xf1, 0x60, 0x5f, 0x1f, 0xd1, 0x20, 0x4a, - 0x00, 0x23, 0x12, 0xf8, 0x01, 0x1b, 0xff, 0x29, 0x19, 0xd1, 0x01, 0x33, - 0x8a, 0x2b, 0xf8, 0xd1, 0x1c, 0x4b, 0x13, 0xf8, 0x01, 0x2b, 0xff, 0x2a, - 0x11, 0xd1, 0x01, 0x36, 0x5b, 0x2e, 0xf8, 0xd1, 0x19, 0x4d, 0x2b, 0x78, - 0x43, 0xb1, 0x19, 0x48, 0x04, 0xf0, 0x72, 0xf9, 0x2b, 0x78, 0x1b, 0xb1, - 0x12, 0x49, 0x17, 0x48, 0xf6, 0xf7, 0x5c, 0xfc, 0x10, 0x48, 0xf6, 0xf7, - 0x3b, 0xfe, 0x15, 0x4b, 0x00, 0x25, 0x15, 0x4a, 0x00, 0x21, 0x15, 0x48, - 0xe3, 0x60, 0x22, 0x60, 0x00, 0x93, 0xcd, 0xe9, 0x02, 0x01, 0xcd, 0xe9, - 0x22, 0x55, 0x12, 0x48, 0x94, 0xe8, 0x0e, 0x00, 0xf7, 0xf7, 0x7d, 0xfc, - 0x28, 0x46, 0x67, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x06, 0x24, 0xdd, 0xe5, - 0x04, 0x24, 0xdb, 0xe5, 0x03, 0x24, 0xd9, 0xe5, 0x02, 0x24, 0xd7, 0xe5, - 0x01, 0x20, 0xf2, 0xe7, 0x00, 0x00, 0x04, 0x08, 0x00, 0x04, 0x00, 0x08, - 0x00, 0x03, 0x00, 0x08, 0xd8, 0x0d, 0x00, 0x24, 0x71, 0xe9, 0x01, 0x08, - 0x7a, 0xd9, 0x01, 0x08, 0xd5, 0x55, 0x01, 0x08, 0x15, 0x5e, 0x01, 0x08, - 0x90, 0xd0, 0x03, 0x00, 0xc0, 0x6a, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x41, - 0x49, 0x4e, 0x35, 0x68, 0x00, 0x2d, 0x65, 0xd1, 0xed, 0xf7, 0xc0, 0xfb, - 0x47, 0x4c, 0x48, 0x4b, 0x7f, 0x21, 0x25, 0x61, 0xc4, 0xe9, 0x00, 0x35, - 0xff, 0x23, 0xc4, 0xe9, 0x02, 0x13, 0x94, 0xf8, 0x21, 0x30, 0xc4, 0xe9, - 0x06, 0x55, 0x03, 0xf0, 0xff, 0x02, 0x1b, 0xb9, 0x84, 0xf8, 0x20, 0x20, - 0xed, 0xf7, 0xac, 0xfb, 0x02, 0x23, 0xca, 0x22, 0x84, 0xf8, 0x21, 0x30, - 0x23, 0x68, 0x5a, 0x62, 0x53, 0x22, 0x5a, 0x62, 0xdd, 0x68, 0x15, 0xf0, - 0x40, 0x05, 0x2d, 0xd0, 0x22, 0x68, 0x20, 0x69, 0x93, 0x68, 0x23, 0xf4, - 0xe0, 0x03, 0x23, 0xf0, 0x40, 0x03, 0x93, 0x60, 0x63, 0x68, 0x91, 0x68, - 0x03, 0x43, 0xa0, 0x69, 0x03, 0x43, 0x0b, 0x43, 0x93, 0x60, 0xd4, 0xe9, - 0x02, 0x13, 0x43, 0xea, 0x01, 0x43, 0x13, 0x61, 0x2e, 0x4b, 0xda, 0x68, - 0x22, 0xf0, 0x40, 0x02, 0xda, 0x60, 0x9a, 0x68, 0x92, 0x06, 0x33, 0xd5, - 0x9a, 0x68, 0x22, 0xf0, 0x20, 0x02, 0x9a, 0x60, 0xec, 0xf7, 0x72, 0xf8, - 0x05, 0x46, 0x10, 0xb1, 0x03, 0x25, 0x84, 0xf8, 0x21, 0x50, 0x25, 0x4a, - 0x93, 0x68, 0x43, 0xf0, 0x20, 0x03, 0x93, 0x60, 0x75, 0xb9, 0x24, 0xe0, - 0x4f, 0xf0, 0xff, 0x32, 0x4f, 0xf0, 0x03, 0x08, 0xda, 0x60, 0xeb, 0xf7, - 0xcf, 0xff, 0x07, 0x46, 0x23, 0x68, 0xdb, 0x68, 0x5b, 0x06, 0x0b, 0xd5, - 0x00, 0x2d, 0xc3, 0xd0, 0x23, 0x68, 0xff, 0x22, 0x5a, 0x62, 0x1d, 0xbb, - 0x01, 0x23, 0x84, 0xf8, 0x21, 0x30, 0x33, 0x60, 0xbd, 0xe8, 0xf0, 0x81, - 0xeb, 0xf7, 0xbc, 0xff, 0xc0, 0x1b, 0xb0, 0xf5, 0x7a, 0x7f, 0xe9, 0xd9, - 0x03, 0x25, 0x84, 0xf8, 0x21, 0x80, 0xe5, 0xe7, 0xec, 0xf7, 0x42, 0xf8, - 0x60, 0xb9, 0x22, 0x68, 0x00, 0x25, 0x60, 0x69, 0xd3, 0x6c, 0x23, 0xf0, - 0x03, 0x03, 0xd3, 0x64, 0xe3, 0x69, 0xd1, 0x6c, 0x03, 0x43, 0x0b, 0x43, - 0xd3, 0x64, 0xdb, 0xe7, 0x03, 0x25, 0x84, 0xf8, 0x21, 0x50, 0xd7, 0xe7, - 0x07, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0xdb, 0xd0, 0x06, 0x48, 0xbd, 0xe8, - 0xf0, 0x41, 0x04, 0xf0, 0xa1, 0xb8, 0x00, 0xbf, 0x9c, 0x2e, 0x00, 0x24, - 0x44, 0x05, 0x00, 0x24, 0x00, 0x40, 0x00, 0x58, 0xd8, 0x0d, 0x00, 0x24, - 0xa2, 0xe9, 0x01, 0x08, 0xc3, 0x68, 0x18, 0x47, 0xff, 0xf7, 0xfc, 0xbf, - 0x07, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x03, 0x60, 0xf4, 0xf7, 0x4e, 0xfe, - 0xd4, 0xf8, 0xbc, 0x00, 0xff, 0xf7, 0xd0, 0xfa, 0x20, 0x1d, 0xf7, 0xf7, - 0xab, 0xfd, 0x20, 0x46, 0x10, 0xbd, 0x00, 0xbf, 0xe4, 0xdb, 0x01, 0x08, - 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xea, 0xff, 0x20, 0x46, 0x02, 0xf0, - 0xf3, 0xfb, 0x20, 0x46, 0x10, 0xbd, 0x38, 0xb5, 0xd0, 0xf8, 0xc0, 0x42, - 0x01, 0xf0, 0x0f, 0x05, 0x63, 0x68, 0x9d, 0x42, 0x37, 0xd8, 0x11, 0xf0, - 0x80, 0x0f, 0x4f, 0xf0, 0x1c, 0x02, 0x34, 0xd0, 0x02, 0xfb, 0x05, 0x43, - 0x02, 0xfb, 0x05, 0x41, 0x01, 0x22, 0x3c, 0x33, 0x81, 0xf8, 0x3d, 0x20, - 0x01, 0x22, 0x1d, 0x70, 0x9a, 0x70, 0x94, 0xf8, 0xbc, 0x13, 0x91, 0x42, - 0x23, 0xd0, 0x84, 0xf8, 0xbc, 0x23, 0x1a, 0x78, 0x5b, 0x78, 0x20, 0x68, - 0x01, 0x2b, 0x4f, 0xf0, 0x20, 0x03, 0x0c, 0xbf, 0x00, 0xf5, 0x10, 0x61, - 0x00, 0xf5, 0x30, 0x61, 0x13, 0xfb, 0x02, 0x13, 0x19, 0x68, 0x00, 0x29, - 0x04, 0xdb, 0x1a, 0xb1, 0x1a, 0x68, 0x22, 0xf0, 0x80, 0x42, 0x1a, 0x60, - 0x1a, 0x68, 0x42, 0xf4, 0x00, 0x12, 0x1a, 0x60, 0x25, 0xb9, 0x04, 0xf5, - 0x71, 0x72, 0x21, 0x7c, 0xec, 0xf7, 0x8e, 0xfe, 0x00, 0x23, 0x84, 0xf8, - 0xbc, 0x33, 0x00, 0x20, 0x38, 0xbd, 0x02, 0xfb, 0x01, 0x43, 0x02, 0xfb, - 0x01, 0x41, 0x00, 0x22, 0x03, 0xf5, 0xfe, 0x73, 0x81, 0xf8, 0xfd, 0x21, - 0xc8, 0xe7, 0x70, 0xb5, 0x04, 0x46, 0x16, 0x46, 0x0d, 0x46, 0x51, 0xbb, - 0xd0, 0xf8, 0x94, 0x32, 0x03, 0x2b, 0x1f, 0xd1, 0xd0, 0xe9, 0x58, 0x12, - 0x91, 0x42, 0x0e, 0xd9, 0x89, 0x1a, 0x8a, 0x42, 0xc0, 0xf8, 0x60, 0x11, - 0xd0, 0xf8, 0xc0, 0x02, 0x88, 0xbf, 0x8a, 0xb2, 0x31, 0x46, 0x98, 0xbf, - 0x92, 0xb2, 0xe9, 0xf7, 0x93, 0xfe, 0x28, 0x46, 0x70, 0xbd, 0xd0, 0xf8, - 0xb4, 0x32, 0x1b, 0x69, 0x23, 0xb1, 0x90, 0xf8, 0x9c, 0x22, 0x03, 0x2a, - 0x00, 0xd1, 0x98, 0x47, 0x20, 0x46, 0xfd, 0xf7, 0x21, 0xf9, 0xf0, 0xe7, - 0x05, 0x2b, 0xee, 0xd1, 0xc4, 0xf8, 0x94, 0x12, 0xff, 0xf7, 0x85, 0xff, - 0xe9, 0xe7, 0xd0, 0xf8, 0xb4, 0x32, 0x9b, 0x69, 0x33, 0xb1, 0x90, 0xf8, - 0x9c, 0x22, 0x03, 0x2a, 0x02, 0xd1, 0x00, 0x25, 0x98, 0x47, 0xde, 0xe7, - 0x02, 0x25, 0xdc, 0xe7, 0x2d, 0xe9, 0x80, 0x48, 0x00, 0x20, 0x91, 0xb0, - 0xea, 0xf7, 0x16, 0xf8, 0x00, 0x20, 0xee, 0xf7, 0xa9, 0xfa, 0xc3, 0x4e, - 0xec, 0xf7, 0x14, 0xfd, 0xff, 0xf7, 0x0e, 0xfb, 0xc1, 0x48, 0xf8, 0xf7, - 0x21, 0xf8, 0xc1, 0x48, 0xf4, 0xf7, 0xe6, 0xff, 0xc0, 0x4b, 0x18, 0x68, - 0x03, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x04, 0x23, 0xbe, 0x4a, 0x30, 0x21, - 0xbe, 0x48, 0xf6, 0xf7, 0x9f, 0xfa, 0xd6, 0xf8, 0xb4, 0x32, 0x13, 0xb1, - 0x00, 0x23, 0xc6, 0xf8, 0xb4, 0x32, 0xbb, 0x4b, 0x4f, 0xf0, 0x01, 0x0a, - 0xba, 0x4c, 0x06, 0x22, 0xc6, 0xf8, 0xb0, 0x32, 0x00, 0x23, 0xb9, 0x48, - 0x33, 0x70, 0x23, 0x63, 0x23, 0x61, 0xe3, 0x60, 0xe3, 0x62, 0x86, 0xf8, - 0x9c, 0xa2, 0xc4, 0xf8, 0x04, 0x64, 0xc6, 0xf8, 0xc0, 0x42, 0xc4, 0xe9, - 0x08, 0x33, 0xc4, 0xe9, 0x06, 0xa3, 0x94, 0xf8, 0xbd, 0x33, 0xc4, 0xe9, - 0x00, 0x02, 0x03, 0xf0, 0xff, 0x07, 0x00, 0x2b, 0x40, 0xf0, 0xa3, 0x80, - 0xad, 0x4d, 0x4f, 0xf0, 0x02, 0x09, 0x84, 0xf8, 0xbc, 0x73, 0x4f, 0xf0, - 0x0a, 0x08, 0xd5, 0xf8, 0xe0, 0x30, 0x4f, 0xf0, 0x03, 0x0b, 0x0b, 0xa9, - 0xa8, 0x48, 0x43, 0xea, 0x0a, 0x03, 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, - 0xe0, 0x30, 0x03, 0xea, 0x0a, 0x03, 0x0a, 0x93, 0x0a, 0x9b, 0xd5, 0xf8, - 0xe0, 0x30, 0x43, 0xf0, 0x02, 0x03, 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, - 0xe0, 0x30, 0x03, 0xf0, 0x02, 0x03, 0x09, 0x93, 0x09, 0x9b, 0xd5, 0xf8, - 0xe0, 0x30, 0x43, 0xf0, 0x04, 0x03, 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, - 0xe0, 0x30, 0x03, 0xf0, 0x04, 0x03, 0x08, 0x93, 0x08, 0x9b, 0xd5, 0xf8, - 0xe0, 0x30, 0x43, 0xf0, 0x80, 0x03, 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, - 0xe0, 0x30, 0x03, 0xf0, 0x80, 0x03, 0x07, 0x93, 0x07, 0x9b, 0xd5, 0xf8, - 0xe0, 0x30, 0x43, 0xf4, 0x80, 0x73, 0xc5, 0xf8, 0xe0, 0x30, 0xd5, 0xf8, - 0xe0, 0x30, 0x0d, 0x97, 0x03, 0xf4, 0x80, 0x73, 0x06, 0x93, 0x06, 0x9b, - 0x20, 0x23, 0xcd, 0xe9, 0x0e, 0xb8, 0xcd, 0xe9, 0x0b, 0x39, 0xf0, 0xf7, - 0xf7, 0xf9, 0x08, 0x23, 0x0b, 0xa9, 0x86, 0x48, 0xcd, 0xf8, 0x3c, 0x80, - 0xcd, 0xe9, 0x0b, 0x39, 0xcd, 0xe9, 0x0d, 0x7b, 0xf0, 0xf7, 0xec, 0xf9, - 0x43, 0xf6, 0x23, 0x43, 0x0b, 0xa9, 0x81, 0x48, 0x0d, 0x97, 0xcd, 0xf8, - 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0x39, 0xf0, 0xf7, 0xe1, 0xf9, 0x0b, 0xa9, - 0x7d, 0x48, 0x0d, 0x97, 0xcd, 0xf8, 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0xa9, - 0xf0, 0xf7, 0xd8, 0xf9, 0x10, 0x23, 0x0b, 0xa9, 0x79, 0x48, 0x0d, 0x97, - 0xcd, 0xf8, 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0x39, 0xf0, 0xf7, 0xce, 0xf9, - 0x4f, 0xf4, 0x00, 0x63, 0x0b, 0xa9, 0x75, 0x48, 0x0d, 0x97, 0xcd, 0xf8, - 0x3c, 0x80, 0xcd, 0xe9, 0x0b, 0x39, 0xf0, 0xf7, 0xc3, 0xf9, 0xd5, 0xf8, - 0xd8, 0x30, 0x51, 0x46, 0x4d, 0x20, 0x43, 0xf0, 0x80, 0x63, 0xc5, 0xf8, - 0xd8, 0x30, 0xd5, 0xf8, 0xd8, 0x30, 0x03, 0xf0, 0x80, 0x63, 0x05, 0x93, - 0x05, 0x9b, 0xd5, 0xf8, 0xd8, 0x30, 0x43, 0xf0, 0x00, 0x73, 0xc5, 0xf8, - 0xd8, 0x30, 0xd5, 0xf8, 0xd8, 0x30, 0x03, 0xf0, 0x00, 0x73, 0x04, 0x93, - 0x04, 0x9b, 0xe9, 0xf7, 0xa3, 0xfd, 0x64, 0x4b, 0x4f, 0xf4, 0x00, 0x52, - 0x9a, 0x60, 0x03, 0x23, 0x27, 0x68, 0x84, 0xf8, 0xbd, 0x33, 0x59, 0x4b, - 0xdb, 0x6b, 0x13, 0xf4, 0x80, 0x73, 0x08, 0xbf, 0x23, 0x61, 0xbb, 0x68, - 0xd4, 0xf8, 0x10, 0x80, 0x23, 0xf0, 0x01, 0x03, 0xbb, 0x60, 0xa3, 0x69, - 0x01, 0x2b, 0x40, 0xf0, 0xee, 0x82, 0xbb, 0x6b, 0x62, 0x6b, 0x23, 0xf4, - 0x80, 0x33, 0x01, 0x2a, 0xbb, 0x63, 0xfb, 0x68, 0x23, 0xf4, 0x84, 0x03, - 0x23, 0xf0, 0x40, 0x03, 0xfb, 0x60, 0xfb, 0x68, 0x23, 0xf4, 0x40, 0x13, - 0xfb, 0x60, 0x03, 0xd1, 0xfb, 0x68, 0x43, 0xf4, 0x80, 0x13, 0xfb, 0x60, - 0x38, 0x46, 0xec, 0xf7, 0x15, 0xfd, 0x05, 0x46, 0xb8, 0xf1, 0x01, 0x0f, - 0x10, 0xd1, 0xfb, 0x6d, 0x9b, 0xb2, 0xfb, 0x65, 0xfb, 0x6d, 0x43, 0xf0, - 0x7b, 0x73, 0x43, 0xf4, 0x00, 0x33, 0xfb, 0x65, 0xbb, 0x68, 0x43, 0xf0, - 0x06, 0x03, 0xbb, 0x60, 0xbb, 0x68, 0x43, 0xf0, 0x20, 0x03, 0xbb, 0x60, - 0x00, 0x2d, 0x00, 0xf0, 0xd3, 0x82, 0x02, 0x23, 0x84, 0xf8, 0xbd, 0x33, - 0x23, 0x68, 0x4f, 0xf4, 0x00, 0x72, 0xd6, 0xf8, 0xc0, 0x02, 0x5a, 0x62, - 0x5a, 0x6a, 0x42, 0xf0, 0x00, 0x72, 0x9a, 0x62, 0x3a, 0x4b, 0xc6, 0xf8, - 0xb4, 0x32, 0x3a, 0x4b, 0xc6, 0xf8, 0xbc, 0x32, 0xee, 0xf7, 0x32, 0xfa, - 0x4d, 0x20, 0xf0, 0xf7, 0x15, 0xfb, 0x65, 0x20, 0xf0, 0xf7, 0x12, 0xfb, - 0x2b, 0x4b, 0x5a, 0x69, 0x9b, 0x69, 0x1a, 0x42, 0x00, 0xf0, 0x46, 0x82, - 0x27, 0x4f, 0x3c, 0x68, 0xb9, 0x46, 0x63, 0x69, 0x13, 0xf0, 0x01, 0x03, - 0x03, 0x93, 0x40, 0xf0, 0x3d, 0x82, 0x62, 0x69, 0xa3, 0x69, 0x1a, 0x42, - 0x00, 0xf0, 0x38, 0x82, 0x63, 0x69, 0xa2, 0x69, 0x13, 0x40, 0x9b, 0x07, - 0x03, 0xd5, 0x63, 0x69, 0x03, 0xf0, 0x02, 0x03, 0x63, 0x61, 0x63, 0x69, - 0xa2, 0x69, 0x13, 0x40, 0xde, 0x06, 0x4e, 0xd5, 0xa3, 0x69, 0x23, 0xf0, - 0x10, 0x03, 0xa3, 0x61, 0x26, 0x6a, 0xc6, 0xf3, 0x43, 0x43, 0x06, 0xf0, - 0x0f, 0x05, 0x02, 0x2b, 0x40, 0xf0, 0xbb, 0x83, 0x47, 0xf6, 0xf0, 0x73, - 0x1e, 0x42, 0x39, 0xd0, 0x1c, 0x23, 0xc6, 0xf3, 0x0a, 0x18, 0x20, 0x46, - 0x03, 0xfb, 0x05, 0x95, 0x42, 0x46, 0xd5, 0xf8, 0x08, 0x12, 0xec, 0xf7, - 0xf1, 0xfc, 0xd5, 0xf8, 0x08, 0x32, 0x43, 0x44, 0xc5, 0xf8, 0x08, 0x32, - 0xd5, 0xf8, 0x14, 0x32, 0x43, 0x44, 0xc5, 0xf8, 0x14, 0x32, 0x23, 0xe0, - 0x24, 0x87, 0x00, 0x24, 0x50, 0x9c, 0x00, 0x24, 0x78, 0x2c, 0x00, 0x24, - 0xdc, 0x0d, 0x00, 0x24, 0xb1, 0xe9, 0x01, 0x08, 0xf4, 0x86, 0x00, 0x24, - 0xc0, 0x01, 0x00, 0x24, 0x58, 0x9c, 0x00, 0x24, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x44, 0x02, 0x58, 0x00, 0x00, 0x02, 0x58, 0x00, 0x04, 0x02, 0x58, - 0x00, 0x08, 0x02, 0x58, 0x00, 0x1c, 0x02, 0x58, 0x00, 0x20, 0x02, 0x58, - 0x00, 0xe1, 0x00, 0xe0, 0xdc, 0x01, 0x00, 0x24, 0x18, 0x02, 0x00, 0x24, - 0x3a, 0x68, 0x93, 0x69, 0x43, 0xf0, 0x10, 0x03, 0x93, 0x61, 0x3b, 0x68, - 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, 0x15, 0x03, 0x00, 0xf1, 0x84, 0x83, - 0xbe, 0x4e, 0x33, 0x68, 0xb1, 0x46, 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, - 0x12, 0xf4, 0x80, 0x2f, 0x10, 0xd0, 0xd3, 0xf8, 0x18, 0x28, 0x03, 0xf5, - 0x00, 0x63, 0x37, 0x46, 0x04, 0xf5, 0x10, 0x6b, 0xdb, 0x69, 0x13, 0x40, - 0x9b, 0xb2, 0x02, 0x93, 0x00, 0x23, 0x01, 0x93, 0x02, 0x9b, 0x00, 0x2b, - 0x40, 0xf0, 0xa8, 0x86, 0x30, 0x68, 0x42, 0x69, 0x83, 0x69, 0x1a, 0x42, - 0x10, 0xd5, 0xd4, 0xf8, 0x04, 0x38, 0x23, 0xf0, 0x01, 0x03, 0xc4, 0xf8, - 0x04, 0x38, 0x96, 0xf8, 0xf4, 0x33, 0x01, 0x2b, 0x04, 0xbf, 0x00, 0x23, - 0x86, 0xf8, 0xf4, 0x33, 0x43, 0x69, 0x03, 0xf0, 0x00, 0x43, 0x43, 0x61, - 0x43, 0x69, 0x82, 0x69, 0x13, 0x40, 0x1a, 0x05, 0x10, 0xd5, 0xd4, 0xf8, - 0x08, 0x38, 0xdb, 0x07, 0x08, 0xd5, 0xd6, 0xf8, 0x04, 0x34, 0x93, 0xf8, - 0x9c, 0x22, 0x83, 0xf8, 0x9d, 0x22, 0x04, 0x22, 0x83, 0xf8, 0x9c, 0x22, - 0x43, 0x69, 0x03, 0xf4, 0x00, 0x63, 0x43, 0x61, 0x43, 0x69, 0x82, 0x69, - 0x13, 0x40, 0x1f, 0x01, 0x11, 0xd5, 0x43, 0x69, 0x03, 0xf0, 0x00, 0x63, - 0x43, 0x61, 0x97, 0x4b, 0x93, 0xf8, 0xf4, 0x23, 0x00, 0x2a, 0x40, 0xf0, - 0x88, 0x87, 0x01, 0x22, 0x83, 0xf8, 0xf4, 0x23, 0x42, 0x6d, 0xc2, 0xf3, - 0x83, 0x02, 0xc3, 0xf8, 0xf8, 0x23, 0x43, 0x69, 0x82, 0x69, 0x13, 0x40, - 0xdd, 0x04, 0x3e, 0xd5, 0xd4, 0xf8, 0x04, 0x38, 0x04, 0xf5, 0x00, 0x62, - 0x23, 0xf0, 0x01, 0x03, 0x53, 0x60, 0x4f, 0xf4, 0x84, 0x63, 0x03, 0x61, - 0x89, 0x4b, 0x01, 0x3b, 0x02, 0xd0, 0x01, 0x69, 0x89, 0x06, 0xfa, 0xd4, - 0x04, 0xf5, 0x10, 0x63, 0xdf, 0xf8, 0x10, 0xc2, 0x4f, 0xf6, 0x7f, 0x37, - 0xdc, 0xf8, 0x04, 0x10, 0x0d, 0x46, 0x03, 0x99, 0xa9, 0x42, 0xc0, 0xf0, - 0x69, 0x87, 0xd3, 0x69, 0x43, 0xf0, 0x01, 0x13, 0xd3, 0x61, 0xdc, 0xf8, - 0x30, 0x30, 0x00, 0x2b, 0x00, 0xf0, 0x81, 0x87, 0xd2, 0xf8, 0x84, 0x30, - 0x43, 0xf0, 0x0b, 0x03, 0xc2, 0xf8, 0x84, 0x30, 0x53, 0x6c, 0x43, 0xf0, - 0x0b, 0x03, 0x53, 0x64, 0xd4, 0xf8, 0x00, 0x38, 0x76, 0x4a, 0x23, 0xf4, - 0xfe, 0x63, 0x31, 0x7c, 0xc4, 0xf8, 0x00, 0x38, 0xec, 0xf7, 0xe6, 0xfb, - 0x32, 0x68, 0x53, 0x69, 0x03, 0xf4, 0x80, 0x53, 0x53, 0x61, 0x34, 0x68, - 0x63, 0x69, 0xa2, 0x69, 0x13, 0x40, 0x9f, 0x04, 0x40, 0xf1, 0xbe, 0x80, - 0xd4, 0xf8, 0x00, 0x39, 0x23, 0xf4, 0xff, 0x63, 0x23, 0xf0, 0x07, 0x03, - 0xc4, 0xf8, 0x00, 0x39, 0xd4, 0xf8, 0x04, 0x28, 0x42, 0xf4, 0x80, 0x72, - 0xc4, 0xf8, 0x04, 0x28, 0xd4, 0xf8, 0x08, 0x28, 0x12, 0xf0, 0x06, 0x03, - 0x04, 0xd0, 0x12, 0xf0, 0x02, 0x0f, 0x14, 0xbf, 0x02, 0x23, 0x0f, 0x23, - 0xf3, 0x60, 0xed, 0xf7, 0xbf, 0xf8, 0xf7, 0x68, 0xfb, 0xb2, 0x02, 0x2b, - 0x40, 0xf0, 0x5f, 0x87, 0x5d, 0x4b, 0x5e, 0x4a, 0x03, 0x44, 0x93, 0x42, - 0x40, 0xf2, 0x47, 0x87, 0x5c, 0x4b, 0x5d, 0x4a, 0x03, 0x44, 0x93, 0x42, - 0x40, 0xf2, 0x44, 0x87, 0xa0, 0xf5, 0x74, 0x03, 0x5a, 0x4a, 0xa3, 0xf5, - 0x10, 0x53, 0x93, 0x42, 0x40, 0xf2, 0x3f, 0x87, 0xa0, 0xf1, 0x83, 0x73, - 0x57, 0x4a, 0xa3, 0xf5, 0xe7, 0x43, 0x93, 0x42, 0xc0, 0xf0, 0x3a, 0x87, - 0x55, 0x4b, 0x56, 0x4a, 0x03, 0x44, 0x93, 0x42, 0x40, 0xf2, 0x37, 0x87, - 0x54, 0x4b, 0x55, 0x4a, 0x03, 0x44, 0x93, 0x42, 0xc0, 0xf0, 0x34, 0x87, - 0x53, 0x4b, 0x54, 0x4a, 0x03, 0x44, 0x93, 0x42, 0xc0, 0xf0, 0x31, 0x87, - 0xa0, 0xf1, 0xb7, 0x73, 0x51, 0x4a, 0xa3, 0xf5, 0x58, 0x53, 0x93, 0x42, - 0xc0, 0xf0, 0x2c, 0x87, 0x4f, 0x4b, 0x50, 0x4a, 0x03, 0x44, 0x93, 0x42, - 0x34, 0xbf, 0x07, 0x23, 0x06, 0x23, 0xe2, 0x68, 0x00, 0x3f, 0x4f, 0xf0, - 0x00, 0x08, 0x22, 0xf4, 0x70, 0x52, 0x18, 0xbf, 0x01, 0x27, 0xe2, 0x60, - 0xe2, 0x68, 0x42, 0xea, 0x83, 0x23, 0xe3, 0x60, 0x40, 0x23, 0xd6, 0xf8, - 0x04, 0x44, 0xd4, 0xf8, 0xc0, 0x52, 0xc5, 0xf8, 0x04, 0x32, 0x05, 0xf5, - 0xfe, 0x71, 0x95, 0xf8, 0xbc, 0x33, 0xa5, 0xf8, 0xfc, 0x81, 0x01, 0x2b, - 0x85, 0xf8, 0xff, 0x81, 0x07, 0xd0, 0x01, 0x23, 0x28, 0x68, 0x85, 0xf8, - 0xbc, 0x33, 0xec, 0xf7, 0xb0, 0xfb, 0x85, 0xf8, 0xbc, 0x83, 0xd4, 0xf8, - 0xc0, 0x52, 0x40, 0x22, 0x01, 0x23, 0x4f, 0xf0, 0x00, 0x08, 0xc4, 0xf8, - 0x64, 0x21, 0x4f, 0xf4, 0x80, 0x70, 0xc4, 0xf8, 0x58, 0x31, 0x05, 0xf1, - 0x3c, 0x01, 0x6a, 0x64, 0x95, 0xf8, 0xbc, 0x23, 0xa8, 0x87, 0x9a, 0x42, - 0x85, 0xf8, 0x3f, 0x80, 0xa5, 0xf8, 0x42, 0x80, 0x06, 0xd0, 0x28, 0x68, - 0x85, 0xf8, 0xbc, 0x33, 0xec, 0xf7, 0x91, 0xfb, 0x85, 0xf8, 0xbc, 0x83, - 0x01, 0x23, 0x00, 0x21, 0x40, 0x22, 0xa3, 0x61, 0x84, 0xf8, 0x9c, 0x32, - 0xd4, 0xf8, 0xb8, 0x32, 0x62, 0x62, 0xc4, 0xf8, 0x94, 0x12, 0x61, 0x60, - 0xc4, 0xf8, 0xa4, 0x12, 0x23, 0xb1, 0xd4, 0xf8, 0xb4, 0x32, 0x20, 0x46, - 0x5b, 0x68, 0x98, 0x47, 0xd6, 0xf8, 0x04, 0x34, 0x32, 0x68, 0x1f, 0x74, - 0x53, 0x69, 0x03, 0xf4, 0x00, 0x53, 0x53, 0x61, 0x32, 0x68, 0x53, 0x69, - 0x92, 0x69, 0x13, 0x40, 0x1d, 0x07, 0x35, 0xd5, 0xd6, 0xf8, 0x04, 0x04, - 0x90, 0xf8, 0x9c, 0x32, 0x03, 0x2b, 0x04, 0xd1, 0xd0, 0xf8, 0xb4, 0x32, - 0xdb, 0x69, 0x03, 0xb1, 0x98, 0x47, 0x32, 0x68, 0x53, 0x69, 0x03, 0xf0, - 0x08, 0x03, 0x53, 0x61, 0x24, 0xe0, 0x00, 0xbf, 0x58, 0x9c, 0x00, 0x24, - 0x41, 0x0d, 0x03, 0x00, 0x1c, 0xa0, 0x00, 0x24, 0x40, 0x53, 0x27, 0xff, - 0xff, 0x34, 0x0c, 0x00, 0x40, 0x1e, 0x1b, 0xff, 0x3f, 0x42, 0x0f, 0x00, - 0x7f, 0x4f, 0x12, 0x00, 0x20, 0xd6, 0x13, 0x00, 0x60, 0xb6, 0xe5, 0xfe, - 0x5f, 0xe3, 0x16, 0x00, 0x00, 0xd3, 0xce, 0xfe, 0x40, 0x77, 0x1b, 0x00, - 0xc0, 0x5b, 0xb3, 0xfe, 0xc0, 0x91, 0x21, 0x00, 0x20, 0x75, 0x38, 0x00, - 0xe0, 0x54, 0x59, 0xfe, 0xe0, 0x9c, 0x41, 0x00, 0x33, 0x68, 0x5a, 0x69, - 0x99, 0x69, 0x0a, 0x40, 0xd4, 0x02, 0x03, 0xd5, 0x5a, 0x69, 0x02, 0xf4, - 0x80, 0x12, 0x5a, 0x61, 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, 0x90, 0x02, - 0x03, 0xd5, 0x5a, 0x69, 0x02, 0xf4, 0x00, 0x12, 0x5a, 0x61, 0x5a, 0x69, - 0x99, 0x69, 0x0a, 0x40, 0x51, 0x00, 0x03, 0xd5, 0x5a, 0x69, 0x02, 0xf0, - 0x80, 0x42, 0x5a, 0x61, 0x5a, 0x69, 0x99, 0x69, 0x0a, 0x40, 0x52, 0x07, - 0x10, 0xd5, 0x5c, 0x68, 0x63, 0x07, 0x09, 0xd5, 0xd6, 0xf8, 0x04, 0x04, - 0x01, 0x23, 0x80, 0xf8, 0x9c, 0x32, 0xd0, 0xf8, 0xb4, 0x32, 0x01, 0x79, - 0x5b, 0x68, 0x98, 0x47, 0x33, 0x68, 0x5a, 0x68, 0x14, 0x43, 0x5c, 0x60, - 0xbb, 0x4a, 0x13, 0x68, 0x59, 0x1c, 0x11, 0x60, 0x28, 0x22, 0x93, 0xfb, - 0xf2, 0xf4, 0x02, 0xfb, 0x14, 0x34, 0x00, 0x2c, 0x7f, 0xf4, 0xa8, 0xad, - 0xeb, 0xf7, 0x42, 0xfb, 0xb0, 0xf5, 0xfa, 0x7f, 0x0d, 0xd9, 0xb4, 0x4d, - 0x2b, 0x78, 0x53, 0xb1, 0x20, 0x46, 0xff, 0xf7, 0x77, 0xf8, 0x4d, 0xf6, - 0x59, 0x73, 0x98, 0x42, 0x03, 0xd1, 0x20, 0x46, 0xe9, 0xf7, 0x6a, 0xfc, - 0x2c, 0x70, 0xae, 0x4d, 0xae, 0x4c, 0x2b, 0x78, 0x7b, 0xb9, 0xae, 0x4b, - 0xae, 0x48, 0x1b, 0x78, 0x22, 0x78, 0x42, 0xfa, 0x83, 0xf3, 0xdb, 0xb2, - 0x23, 0x70, 0xf6, 0xf7, 0xb1, 0xff, 0xb0, 0xfa, 0x80, 0xf1, 0xa9, 0x48, - 0x49, 0x09, 0xf6, 0xf7, 0xb3, 0xff, 0x2b, 0x78, 0x01, 0x33, 0xdb, 0xb2, - 0x2b, 0x70, 0x23, 0x78, 0xfa, 0x2b, 0x02, 0xd8, 0x23, 0x78, 0x09, 0x2b, - 0x0a, 0xd8, 0xa1, 0x4a, 0x13, 0x78, 0x5b, 0x42, 0x5b, 0xb2, 0x13, 0x70, - 0x13, 0x78, 0x22, 0x78, 0x42, 0xfa, 0x83, 0xf3, 0xdb, 0xb2, 0x23, 0x70, - 0x2a, 0x78, 0x23, 0x78, 0x9a, 0x42, 0x7f, 0xf4, 0x67, 0xad, 0x9a, 0x48, - 0xf6, 0xf7, 0x8e, 0xff, 0xb0, 0xfa, 0x80, 0xf1, 0x97, 0x48, 0x49, 0x09, - 0xf6, 0xf7, 0x90, 0xff, 0x5c, 0xe5, 0xfb, 0x68, 0x38, 0x46, 0xd4, 0xf8, - 0x28, 0x90, 0x43, 0xf0, 0x40, 0x03, 0xfb, 0x60, 0xec, 0xf7, 0x36, 0xfa, - 0xbb, 0x6b, 0x05, 0x46, 0xb9, 0xf1, 0x00, 0x0f, 0x03, 0xd1, 0x43, 0xf4, - 0x80, 0x33, 0xbb, 0x63, 0x18, 0xe5, 0x23, 0xf4, 0x80, 0x33, 0xfa, 0xe7, - 0x23, 0x68, 0x32, 0x20, 0xda, 0x68, 0x22, 0xf0, 0xc0, 0x42, 0xda, 0x60, - 0xda, 0x68, 0x42, 0xf0, 0x80, 0x42, 0xda, 0x60, 0xf0, 0xf7, 0x62, 0xf8, - 0x67, 0x68, 0x2b, 0x46, 0x4f, 0xf0, 0x1c, 0x0c, 0x4f, 0xf0, 0x01, 0x0e, - 0x28, 0x46, 0xd9, 0xb2, 0x5a, 0x1c, 0x8f, 0x42, 0x00, 0xf2, 0xb3, 0x80, - 0x00, 0x23, 0x4f, 0xf0, 0x1c, 0x0c, 0x19, 0x46, 0xd8, 0xb2, 0x01, 0x33, - 0x87, 0x42, 0x00, 0xf2, 0xb9, 0x80, 0x23, 0x68, 0xd4, 0xf8, 0x2c, 0xc0, - 0xd4, 0xe9, 0x03, 0x12, 0x02, 0x92, 0xd4, 0xe9, 0x06, 0xe2, 0x01, 0x92, - 0x00, 0x22, 0x90, 0x46, 0x02, 0xf1, 0x40, 0x00, 0x01, 0x32, 0x03, 0xeb, - 0x80, 0x00, 0x0f, 0x2a, 0xc0, 0xf8, 0x04, 0x80, 0xf6, 0xd1, 0x03, 0xf5, - 0x00, 0x60, 0xbc, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0xac, 0x80, 0x42, 0x68, - 0x42, 0xf0, 0x02, 0x02, 0x42, 0x60, 0x9a, 0x6b, 0x22, 0xf4, 0x00, 0x12, - 0x9a, 0x63, 0x1a, 0x68, 0x42, 0xf0, 0x40, 0x02, 0x1a, 0x60, 0x1a, 0x68, - 0x42, 0xf0, 0x80, 0x02, 0x1a, 0x60, 0x00, 0x22, 0xbe, 0xf1, 0x01, 0x0f, - 0xc3, 0xf8, 0x00, 0x2e, 0xd3, 0xf8, 0x00, 0x28, 0xc3, 0xf8, 0x00, 0x28, - 0xd3, 0xf8, 0x00, 0x28, 0x40, 0xf0, 0x97, 0x80, 0x00, 0x29, 0x40, 0xf0, - 0x91, 0x80, 0xc3, 0xf8, 0x00, 0x28, 0x4f, 0xf4, 0x84, 0x62, 0x1a, 0x61, - 0x5b, 0x4a, 0x01, 0x3a, 0x00, 0xf0, 0x8e, 0x80, 0x19, 0x69, 0x89, 0x06, - 0xf9, 0xd4, 0x10, 0x22, 0x1a, 0x61, 0x57, 0x4a, 0x01, 0x3a, 0x00, 0xf0, - 0x87, 0x80, 0x19, 0x69, 0xc9, 0x06, 0xf9, 0xd4, 0x00, 0x22, 0x03, 0xf5, - 0x10, 0x61, 0x4f, 0xf0, 0x90, 0x48, 0x4f, 0xf0, 0x00, 0x69, 0x96, 0x46, - 0x4f, 0xf6, 0x7f, 0x3a, 0x02, 0x61, 0x42, 0x61, 0xc2, 0x61, 0x97, 0x42, - 0x76, 0xd1, 0x00, 0x27, 0x03, 0xf5, 0x30, 0x61, 0x4f, 0xf0, 0x90, 0x48, - 0x4f, 0xf0, 0x00, 0x69, 0xbe, 0x46, 0x4f, 0xf6, 0x7f, 0x3a, 0xba, 0x42, - 0x40, 0xf0, 0x90, 0x80, 0x02, 0x69, 0x22, 0xf4, 0x80, 0x72, 0x02, 0x61, - 0x00, 0x22, 0x9a, 0x61, 0x6f, 0xf0, 0x80, 0x42, 0x5a, 0x61, 0x02, 0x9a, - 0x1a, 0xb9, 0x9a, 0x69, 0x42, 0xf0, 0x10, 0x02, 0x9a, 0x61, 0x99, 0x69, - 0x3e, 0x4a, 0x0a, 0x43, 0x9a, 0x61, 0x01, 0x9a, 0x1a, 0xb1, 0x9a, 0x69, - 0x42, 0xf0, 0x08, 0x02, 0x9a, 0x61, 0xbc, 0xf1, 0x01, 0x0f, 0x05, 0xd1, - 0x9a, 0x69, 0x42, 0xf0, 0x80, 0x42, 0x42, 0xf0, 0x04, 0x02, 0x9a, 0x61, - 0x00, 0x2d, 0x7f, 0xf4, 0x7c, 0xac, 0x01, 0x22, 0x84, 0xf8, 0x38, 0x50, - 0x84, 0xf8, 0xbd, 0x23, 0x62, 0x6a, 0x01, 0x2a, 0x0d, 0xd1, 0x84, 0xf8, - 0xf4, 0x53, 0xc4, 0xf8, 0xfc, 0x23, 0x9a, 0x69, 0x42, 0xf0, 0x00, 0x62, - 0x9a, 0x61, 0x5a, 0x6d, 0x42, 0xf0, 0x80, 0x52, 0x42, 0xf0, 0x03, 0x02, - 0x5a, 0x65, 0x18, 0x46, 0xec, 0xf7, 0x9e, 0xf9, 0x64, 0xe4, 0x0c, 0xfb, - 0x01, 0x43, 0x83, 0xf8, 0x3d, 0xe0, 0x83, 0xf8, 0x3c, 0x10, 0xa3, 0xf8, - 0x42, 0x10, 0x83, 0xf8, 0x3f, 0x00, 0x18, 0x65, 0xc3, 0xe9, 0x11, 0x00, - 0x13, 0x46, 0x38, 0xe7, 0x0c, 0xfb, 0x00, 0x42, 0x82, 0xf8, 0xfd, 0x11, - 0x82, 0xf8, 0xfc, 0x01, 0x82, 0xf8, 0xff, 0x11, 0xc2, 0xf8, 0x10, 0x12, - 0xc2, 0xe9, 0x81, 0x11, 0x34, 0xe7, 0x9a, 0x6b, 0x42, 0xf4, 0x00, 0x12, - 0x9a, 0x63, 0x5e, 0xe7, 0x42, 0xf0, 0x01, 0x02, 0x6b, 0xe7, 0x42, 0xf0, - 0x03, 0x02, 0x68, 0xe7, 0x01, 0x25, 0x72, 0xe7, 0x01, 0x25, 0x79, 0xe7, - 0xd1, 0xf8, 0x00, 0xb0, 0xbb, 0xf1, 0x00, 0x0f, 0x0c, 0xda, 0x42, 0xb9, - 0xc1, 0xf8, 0x00, 0x90, 0xc1, 0xf8, 0x10, 0xe0, 0x01, 0x32, 0xc1, 0xf8, - 0x08, 0xa0, 0x20, 0x31, 0x77, 0xe7, 0xc1, 0xf8, 0x00, 0x80, 0xf5, 0xe7, - 0xc1, 0xf8, 0x00, 0xe0, 0xf2, 0xe7, 0x00, 0xbf, 0x20, 0x9c, 0x00, 0x24, - 0x8a, 0x02, 0x00, 0x24, 0x60, 0xa0, 0x00, 0x24, 0x0f, 0x03, 0x00, 0x24, - 0x0e, 0x03, 0x00, 0x24, 0x18, 0x0e, 0x00, 0x24, 0x41, 0x0d, 0x03, 0x00, - 0x00, 0x38, 0x3c, 0x80, 0xd1, 0xf8, 0x00, 0xb0, 0xbb, 0xf1, 0x00, 0x0f, - 0x0c, 0xda, 0x47, 0xb9, 0xc1, 0xf8, 0x00, 0x90, 0xc1, 0xf8, 0x10, 0xe0, - 0x01, 0x37, 0xc1, 0xf8, 0x08, 0xa0, 0x20, 0x31, 0x5d, 0xe7, 0xc1, 0xf8, - 0x00, 0x80, 0xf5, 0xe7, 0xc1, 0xf8, 0x00, 0xe0, 0xf2, 0xe7, 0x06, 0x2b, - 0x7f, 0xf4, 0x80, 0xac, 0x08, 0x22, 0xb3, 0x49, 0x20, 0x46, 0xc6, 0xf3, - 0x0a, 0x16, 0xec, 0xf7, 0x3b, 0xf9, 0x1c, 0x23, 0x03, 0xfb, 0x05, 0x95, - 0xd5, 0xf8, 0x14, 0x32, 0x1e, 0x44, 0xc5, 0xf8, 0x14, 0x62, 0x6f, 0xe4, - 0xd3, 0xf8, 0x18, 0x78, 0x03, 0xf5, 0x00, 0x63, 0x04, 0xf5, 0x30, 0x69, - 0xdf, 0xf8, 0xa4, 0xb2, 0xdb, 0x69, 0x4f, 0xf0, 0x00, 0x08, 0x1f, 0x40, - 0x3f, 0x0c, 0x00, 0x2f, 0x3f, 0xf4, 0x6c, 0xac, 0xf8, 0x07, 0x40, 0xf1, - 0x7b, 0x81, 0xa3, 0x4d, 0x5f, 0xfa, 0x88, 0xf6, 0x28, 0x68, 0x00, 0xf5, - 0x30, 0x6c, 0x0c, 0xeb, 0x46, 0x13, 0x9a, 0x68, 0xd0, 0xf8, 0x14, 0x38, - 0x02, 0xea, 0x03, 0x0a, 0x2b, 0x46, 0x1a, 0xf0, 0x01, 0x0f, 0x1b, 0xd0, - 0x29, 0x69, 0x01, 0x22, 0x0c, 0xeb, 0x48, 0x1c, 0x01, 0x29, 0xc9, 0xf8, - 0x08, 0x20, 0xd0, 0xf8, 0x40, 0xe0, 0xdc, 0xf8, 0x08, 0x20, 0x40, 0xf0, - 0x9e, 0x80, 0x11, 0x07, 0x07, 0xd5, 0x94, 0x4b, 0x9e, 0x45, 0x09, 0xd9, - 0x10, 0x04, 0x07, 0xd5, 0x4f, 0xf4, 0x00, 0x43, 0x02, 0xe0, 0x91, 0x06, - 0x70, 0xd5, 0x20, 0x23, 0xcc, 0xf8, 0x08, 0x30, 0x1a, 0xf0, 0x08, 0x0f, - 0x00, 0xf0, 0x37, 0x81, 0x2b, 0x68, 0x08, 0x22, 0xc9, 0xf8, 0x08, 0x20, - 0x1a, 0x6c, 0x03, 0xf5, 0x30, 0x63, 0x01, 0x92, 0x03, 0xeb, 0x48, 0x13, - 0x01, 0x99, 0x9a, 0x68, 0x08, 0x46, 0x85, 0x49, 0x88, 0x42, 0x04, 0xd9, - 0x11, 0x04, 0x02, 0xd5, 0x4f, 0xf4, 0x00, 0x42, 0x9a, 0x60, 0x80, 0x4a, - 0xd2, 0xf8, 0x04, 0x54, 0x92, 0xf8, 0xc4, 0x03, 0x05, 0xf5, 0x2a, 0x71, - 0x85, 0xf8, 0xa8, 0x02, 0x92, 0xf8, 0xc5, 0xc3, 0x85, 0xf8, 0xa9, 0xc2, - 0x92, 0xf8, 0xc7, 0x33, 0x92, 0xf8, 0xc6, 0x63, 0x06, 0xeb, 0x03, 0x26, - 0xb6, 0xb2, 0xa5, 0xf8, 0xaa, 0x62, 0x92, 0xf8, 0xc9, 0xe3, 0x92, 0xf8, - 0xc8, 0x33, 0x03, 0xeb, 0x0e, 0x23, 0x9b, 0xb2, 0xa5, 0xf8, 0xac, 0x32, - 0x92, 0xf8, 0xcb, 0xe3, 0x92, 0xf8, 0xca, 0x23, 0x02, 0xeb, 0x0e, 0x22, - 0x4f, 0xf0, 0x01, 0x0e, 0x92, 0xb2, 0xc5, 0xe9, 0xa5, 0xe2, 0x00, 0xf0, - 0x1f, 0x0e, 0xa5, 0xf8, 0xae, 0x22, 0xbe, 0xf1, 0x01, 0x0f, 0x00, 0xf0, - 0xaf, 0x81, 0xbe, 0xf1, 0x02, 0x0f, 0x00, 0xf0, 0xca, 0x81, 0xbe, 0xf1, - 0x00, 0x0f, 0x40, 0xf0, 0xa8, 0x82, 0x00, 0xf0, 0x60, 0x00, 0x20, 0x28, - 0x00, 0xf0, 0xf7, 0x81, 0x40, 0x28, 0x00, 0xf0, 0xf4, 0x81, 0x00, 0x28, - 0x40, 0xf0, 0x87, 0x80, 0xbc, 0xf1, 0x09, 0x0f, 0x00, 0xf2, 0x83, 0x80, - 0xdf, 0xe8, 0x1c, 0xf0, 0x6f, 0x01, 0x89, 0x01, 0x81, 0x00, 0x83, 0x01, - 0x81, 0x00, 0xf2, 0x00, 0x49, 0x00, 0x81, 0x00, 0x58, 0x01, 0x1e, 0x01, - 0x12, 0xf0, 0x28, 0x0f, 0x8e, 0xd1, 0x55, 0x49, 0x8e, 0x45, 0x01, 0xd9, - 0x12, 0x04, 0x81, 0xd4, 0xdc, 0xf8, 0x10, 0x20, 0xdb, 0xf8, 0x04, 0x12, - 0xc2, 0xf3, 0x12, 0x02, 0x8a, 0x1a, 0xcb, 0xf8, 0x14, 0x22, 0xdb, 0xf8, - 0x08, 0x22, 0x11, 0x44, 0xd5, 0xf8, 0x10, 0x22, 0x58, 0xea, 0x02, 0x02, - 0xcb, 0xf8, 0x08, 0x12, 0x10, 0xd1, 0x47, 0x4a, 0x01, 0x21, 0xec, 0xf7, - 0x31, 0xf8, 0x46, 0x4b, 0x0a, 0xe0, 0x47, 0x49, 0x8e, 0x45, 0x12, 0xd1, - 0x11, 0x04, 0x3f, 0xf5, 0x63, 0xaf, 0x90, 0x06, 0x02, 0xd5, 0x20, 0x22, - 0xcc, 0xf8, 0x08, 0x20, 0x1c, 0x22, 0x31, 0x46, 0xd5, 0xf8, 0x04, 0x04, - 0x02, 0xfb, 0x06, 0x33, 0xd3, 0xf8, 0x08, 0x22, 0xff, 0xf7, 0x9b, 0xf9, - 0x5a, 0xe7, 0xd5, 0xf8, 0x10, 0x12, 0x58, 0xea, 0x01, 0x01, 0xef, 0xd1, - 0x05, 0xf5, 0x71, 0x72, 0xdd, 0xe7, 0x00, 0x23, 0xad, 0xf8, 0x2c, 0x30, - 0x33, 0x0a, 0x01, 0x3b, 0x06, 0x2b, 0x30, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, - 0x04, 0x16, 0x22, 0x2f, 0x2f, 0x4e, 0x57, 0x00, 0xd5, 0xf8, 0xb0, 0x32, - 0x1b, 0x68, 0x0b, 0xa9, 0x28, 0x7c, 0x98, 0x47, 0xbd, 0xf8, 0x2c, 0x20, - 0x00, 0x2a, 0x64, 0xd0, 0xb5, 0xf8, 0xae, 0x32, 0x00, 0x2b, 0x57, 0xd1, - 0x28, 0x46, 0xfc, 0xf7, 0xbd, 0xfa, 0x60, 0xe0, 0x2a, 0x7c, 0xd5, 0xf8, - 0xb4, 0x32, 0x2a, 0xb9, 0x9b, 0x6a, 0x0b, 0xa8, 0x98, 0x47, 0x02, 0x23, - 0x43, 0x70, 0xe9, 0xe7, 0xdb, 0x6a, 0xf8, 0xe7, 0xf1, 0xb2, 0x05, 0x29, - 0x1f, 0xd8, 0xdf, 0xe8, 0x01, 0xf0, 0x03, 0x0a, 0x0e, 0x12, 0x16, 0x1a, - 0xd5, 0xf8, 0xb0, 0x32, 0x5b, 0x68, 0x00, 0x2b, 0xd7, 0xd1, 0x28, 0x46, - 0xbd, 0xe0, 0xd5, 0xf8, 0xb0, 0x32, 0x9b, 0x68, 0xf7, 0xe7, 0xd5, 0xf8, - 0xb0, 0x32, 0xdb, 0x68, 0xf3, 0xe7, 0xd5, 0xf8, 0xb0, 0x32, 0x1b, 0x69, - 0xef, 0xe7, 0xd5, 0xf8, 0xb0, 0x32, 0x5b, 0x69, 0xeb, 0xe7, 0xd5, 0xf8, - 0xb0, 0x32, 0x9b, 0x69, 0xe7, 0xe7, 0xd5, 0xf8, 0xb4, 0x32, 0x9b, 0x6b, - 0x00, 0x2b, 0xe4, 0xd0, 0x0b, 0xaa, 0x28, 0x46, 0x98, 0x47, 0xbb, 0xe7, - 0x2b, 0x7c, 0x00, 0x2b, 0xdd, 0xd1, 0xd5, 0xf8, 0xb4, 0x32, 0x0b, 0xa8, - 0x5b, 0x6b, 0x98, 0x47, 0xb2, 0xe7, 0x2b, 0x7c, 0x00, 0x2b, 0xd4, 0xd1, - 0xd5, 0xf8, 0xb4, 0x32, 0x0b, 0xa8, 0x1b, 0x6b, 0x98, 0x47, 0x07, 0x23, - 0xbc, 0xe7, 0x00, 0xbf, 0x1c, 0xa0, 0x00, 0x24, 0x58, 0x9c, 0x00, 0x24, - 0x0a, 0x30, 0x54, 0x4f, 0x0a, 0x31, 0x54, 0x4f, 0x9a, 0x42, 0x01, 0x46, - 0x28, 0x46, 0x28, 0xbf, 0x1a, 0x46, 0xad, 0xf8, 0x2c, 0x20, 0xfc, 0xf7, - 0x53, 0xfa, 0xb5, 0xf8, 0xae, 0x32, 0x00, 0x2b, 0x9a, 0xd0, 0x01, 0x9b, - 0x1a, 0x46, 0xcc, 0x4b, 0x9a, 0x42, 0x08, 0xd9, 0xcb, 0x4b, 0x19, 0x69, - 0x01, 0x29, 0x04, 0xd1, 0x03, 0xf5, 0x71, 0x72, 0x18, 0x68, 0xeb, 0xf7, - 0x83, 0xff, 0x1a, 0xf0, 0x10, 0x0f, 0x02, 0xd0, 0x10, 0x23, 0xc9, 0xf8, - 0x08, 0x30, 0x1a, 0xf0, 0x20, 0x0f, 0x02, 0xd0, 0x20, 0x23, 0xc9, 0xf8, - 0x08, 0x30, 0x1a, 0xf4, 0x00, 0x5f, 0x03, 0xd0, 0x4f, 0xf4, 0x00, 0x53, - 0xc9, 0xf8, 0x08, 0x30, 0x08, 0xf1, 0x01, 0x08, 0x7f, 0x08, 0x09, 0xf1, - 0x20, 0x09, 0x0b, 0xf1, 0x1c, 0x0b, 0x76, 0xe6, 0x1a, 0x43, 0x8c, 0xd1, - 0x7f, 0x2e, 0x8a, 0xd8, 0x95, 0xf8, 0x9c, 0x32, 0x03, 0x2b, 0x86, 0xd0, - 0xf3, 0xb2, 0xd5, 0xf8, 0xc0, 0x12, 0x85, 0xf8, 0x9e, 0x32, 0x91, 0xf8, - 0xbc, 0x03, 0x01, 0x28, 0x10, 0xd0, 0x08, 0x68, 0x81, 0xf8, 0x38, 0x30, - 0xd0, 0xf8, 0x00, 0x38, 0x23, 0xf4, 0xfe, 0x63, 0xc0, 0xf8, 0x00, 0x38, - 0xd0, 0xf8, 0x00, 0x38, 0x43, 0xea, 0x06, 0x13, 0xc0, 0xf8, 0x00, 0x38, - 0x81, 0xf8, 0xbc, 0x23, 0x28, 0x46, 0xfc, 0xf7, 0x0d, 0xfa, 0x1e, 0xb1, - 0x02, 0x23, 0x85, 0xf8, 0x9c, 0x32, 0xac, 0xe7, 0x01, 0x23, 0xfa, 0xe7, - 0xf1, 0xb2, 0xa4, 0x4e, 0x01, 0x29, 0x31, 0x70, 0x3f, 0xf6, 0x5d, 0xaf, - 0x95, 0xf8, 0x9c, 0x32, 0x02, 0x2b, 0x09, 0xd0, 0x03, 0x2b, 0x19, 0xd0, - 0x28, 0x46, 0xe8, 0xf7, 0x3b, 0xff, 0x31, 0x78, 0x28, 0x46, 0xfb, 0xf7, - 0x2b, 0xff, 0x96, 0xe7, 0x00, 0x29, 0x3f, 0xf4, 0x2f, 0xaf, 0x01, 0x21, - 0x03, 0x23, 0x69, 0x60, 0x85, 0xf8, 0x9c, 0x32, 0x28, 0x46, 0xfb, 0xf7, - 0x26, 0xff, 0x02, 0x28, 0x28, 0x46, 0x7f, 0xf4, 0x24, 0xaf, 0xe8, 0xf7, - 0x25, 0xff, 0x84, 0xe7, 0x39, 0xb9, 0x02, 0x23, 0x28, 0x46, 0x69, 0x60, - 0x85, 0xf8, 0x9c, 0x32, 0xfb, 0xf7, 0x10, 0xff, 0x16, 0xe7, 0x69, 0x68, - 0x01, 0x29, 0x3f, 0xf4, 0x13, 0xaf, 0xc9, 0xb2, 0x28, 0x46, 0xfb, 0xf7, - 0x07, 0xff, 0x31, 0x78, 0x69, 0x60, 0xe1, 0xe7, 0x01, 0x2a, 0x7f, 0xf4, - 0x26, 0xaf, 0x95, 0xf8, 0x9c, 0x32, 0x02, 0x2b, 0x0a, 0xd8, 0x00, 0x2b, - 0x3f, 0xf4, 0x1f, 0xaf, 0x29, 0x46, 0x00, 0x23, 0x41, 0xf8, 0x08, 0x3f, - 0x28, 0x46, 0xfc, 0xf7, 0xaf, 0xf9, 0x5e, 0xe7, 0x03, 0x2b, 0x7f, 0xf4, - 0x14, 0xaf, 0x29, 0x1d, 0xf6, 0xe7, 0x95, 0xf8, 0x9c, 0x32, 0x01, 0x3b, - 0x02, 0x2b, 0x3f, 0xf6, 0x0c, 0xaf, 0x02, 0x2a, 0x7f, 0xf4, 0x09, 0xaf, - 0x01, 0x23, 0xeb, 0x60, 0xd5, 0xf8, 0xa4, 0x32, 0x0b, 0xb1, 0x03, 0x23, - 0xeb, 0x60, 0x02, 0x22, 0x05, 0xf1, 0x0c, 0x01, 0xe2, 0xe7, 0x01, 0x2e, - 0x7f, 0xf4, 0x43, 0xaf, 0xc5, 0xf8, 0xa4, 0x62, 0xda, 0xe6, 0x95, 0xf8, - 0x9c, 0x32, 0x01, 0x3b, 0x02, 0x2b, 0x3f, 0xf6, 0xf2, 0xae, 0x01, 0x2e, - 0x7f, 0xf4, 0x37, 0xaf, 0x00, 0x23, 0xc5, 0xf8, 0xa4, 0x32, 0xcd, 0xe6, - 0x00, 0xf0, 0x60, 0x02, 0x40, 0x2a, 0x02, 0xd0, 0x42, 0x06, 0x3f, 0xf5, - 0xe4, 0xae, 0x95, 0xf8, 0x9c, 0x22, 0x01, 0x3a, 0x02, 0x2a, 0x3f, 0xf6, - 0xde, 0xae, 0xdb, 0xb2, 0x02, 0x2b, 0x3f, 0xf6, 0xda, 0xae, 0xd5, 0xf8, - 0xb4, 0x32, 0x28, 0x46, 0x9b, 0x68, 0x98, 0x47, 0xb5, 0xf8, 0xae, 0x32, - 0x00, 0x2b, 0x7f, 0xf4, 0x18, 0xaf, 0x00, 0x28, 0x7f, 0xf4, 0x15, 0xaf, - 0xae, 0xe6, 0x00, 0xf0, 0x60, 0x00, 0x20, 0x28, 0x31, 0xd0, 0x40, 0x28, - 0x2f, 0xd0, 0x00, 0x28, 0x7f, 0xf4, 0xc3, 0xae, 0xbc, 0xf1, 0x01, 0x0f, - 0xd9, 0xb2, 0x40, 0xd0, 0xbc, 0xf1, 0x03, 0x0f, 0x2b, 0xd0, 0xbc, 0xf1, - 0x00, 0x0f, 0x7f, 0xf4, 0xb8, 0xae, 0x95, 0xf8, 0x9c, 0x22, 0x02, 0x2a, - 0x00, 0xf0, 0x9c, 0x80, 0x03, 0x2a, 0x7f, 0xf4, 0xb0, 0xae, 0x5b, 0xb2, - 0x01, 0xf0, 0x0f, 0x00, 0x14, 0x26, 0x00, 0x2b, 0x06, 0xfb, 0x00, 0x50, - 0x80, 0xf2, 0x9f, 0x80, 0x82, 0x69, 0x00, 0x2a, 0x3f, 0xf4, 0xa3, 0xae, - 0x01, 0xf0, 0x7f, 0x02, 0x02, 0xfb, 0x06, 0x66, 0x2e, 0x44, 0x11, 0xf0, - 0x7f, 0x02, 0x40, 0xf0, 0x9e, 0x80, 0x32, 0x60, 0x02, 0x22, 0x31, 0x46, - 0x7a, 0xe7, 0xd5, 0xf8, 0xb4, 0x32, 0x28, 0x46, 0x9b, 0x68, 0x98, 0x47, - 0xd7, 0xe6, 0x95, 0xf8, 0x9c, 0x32, 0x02, 0x2b, 0x5a, 0xd0, 0x03, 0x2b, - 0x7f, 0xf4, 0x89, 0xae, 0x4b, 0x06, 0x3f, 0xf4, 0x69, 0xae, 0x56, 0xea, - 0x02, 0x03, 0x7f, 0xf4, 0x65, 0xae, 0x28, 0x46, 0xfe, 0xf7, 0x8d, 0xff, - 0x60, 0xe6, 0x95, 0xf8, 0x9c, 0x22, 0x02, 0x2a, 0x48, 0xd0, 0x03, 0x2a, - 0x7f, 0xf4, 0x77, 0xae, 0x00, 0x2e, 0x7f, 0xf4, 0xbc, 0xae, 0x4a, 0x06, - 0x3f, 0xf4, 0x54, 0xae, 0xd5, 0xf8, 0xc0, 0x22, 0x01, 0xf0, 0x0f, 0x01, - 0x50, 0x68, 0x81, 0x42, 0x3f, 0xf6, 0x4c, 0xae, 0xc1, 0xeb, 0xc1, 0x00, - 0x13, 0xf0, 0x80, 0x0f, 0x4f, 0xf0, 0x1c, 0x03, 0x4f, 0xea, 0x80, 0x00, - 0x39, 0xd0, 0x3c, 0x30, 0x03, 0xfb, 0x01, 0x23, 0x01, 0x26, 0x10, 0x44, - 0x83, 0xf8, 0x3d, 0x60, 0x00, 0x23, 0x01, 0x70, 0x83, 0x70, 0x92, 0xf8, - 0xbc, 0x33, 0x01, 0x2b, 0x3f, 0xf4, 0x34, 0xae, 0x01, 0x23, 0x11, 0x68, - 0x4f, 0xf0, 0x20, 0x0c, 0x82, 0xf8, 0xbc, 0x33, 0x43, 0x78, 0x06, 0x78, - 0x01, 0x2b, 0x0c, 0xbf, 0x01, 0xf5, 0x10, 0x63, 0x01, 0xf5, 0x30, 0x63, - 0x1c, 0xfb, 0x06, 0x33, 0x19, 0x68, 0x21, 0xf4, 0x00, 0x11, 0x19, 0x60, - 0xc1, 0x78, 0x02, 0x39, 0x01, 0x29, 0x03, 0xd8, 0x19, 0x68, 0x41, 0xf0, - 0x80, 0x51, 0x19, 0x60, 0x00, 0x23, 0x82, 0xf8, 0xbc, 0x33, 0x13, 0xe6, - 0x4e, 0x06, 0x28, 0x46, 0x3f, 0xf4, 0xed, 0xae, 0xfe, 0xf7, 0x39, 0xff, - 0x80, 0x21, 0x28, 0x46, 0xfe, 0xf7, 0x35, 0xff, 0x6d, 0xe6, 0x00, 0xf5, - 0xfe, 0x70, 0x03, 0xfb, 0x01, 0x23, 0x00, 0x26, 0x10, 0x44, 0x83, 0xf8, - 0xfd, 0x61, 0xc3, 0xe7, 0x0a, 0x30, 0x54, 0x4f, 0x58, 0x9c, 0x00, 0x24, - 0x1c, 0x9c, 0x00, 0x24, 0x4e, 0x06, 0x7f, 0xf4, 0x14, 0xae, 0x18, 0x06, - 0x4f, 0xf0, 0x00, 0x03, 0x4f, 0xf0, 0x02, 0x02, 0x4c, 0xbf, 0x05, 0xf1, - 0x14, 0x01, 0x05, 0xf5, 0xaa, 0x71, 0x0b, 0x60, 0xec, 0xe6, 0xd0, 0xf8, - 0x58, 0x21, 0x00, 0x2a, 0x3f, 0xf4, 0x03, 0xae, 0x01, 0xf0, 0x7f, 0x02, - 0x06, 0xfb, 0x02, 0x56, 0x06, 0xf5, 0xaa, 0x76, 0x5d, 0xe7, 0x00, 0x2b, - 0xd5, 0xf8, 0xc0, 0x02, 0x4f, 0xf0, 0x1c, 0x03, 0xb5, 0xbf, 0x03, 0xfb, - 0x02, 0x01, 0x03, 0xfb, 0x01, 0x03, 0x91, 0xf8, 0x3e, 0x30, 0x93, 0xf8, - 0xfe, 0x31, 0x03, 0xb1, 0x01, 0x23, 0x33, 0x60, 0x50, 0xe7, 0x00, 0xf0, - 0x80, 0x01, 0xbc, 0xe7, 0x02, 0x9b, 0xd9, 0x07, 0x40, 0xf1, 0x0c, 0x81, - 0xd9, 0xf8, 0x00, 0x00, 0x9d, 0xf8, 0x04, 0xa0, 0xd0, 0xf8, 0x10, 0x18, - 0x00, 0xf5, 0x10, 0x62, 0xd0, 0xf8, 0x34, 0x58, 0x0a, 0xf0, 0x0f, 0x08, - 0x02, 0xeb, 0x4a, 0x12, 0x25, 0xfa, 0x08, 0xf8, 0x92, 0x68, 0x4f, 0xea, - 0xc8, 0x18, 0x5f, 0xfa, 0x88, 0xf8, 0x48, 0xea, 0x01, 0x08, 0x08, 0xea, - 0x02, 0x08, 0x18, 0xf0, 0x01, 0x0f, 0x42, 0xd0, 0x01, 0x9b, 0xd4, 0xf8, - 0x34, 0x28, 0x03, 0xf0, 0x0f, 0x01, 0x01, 0x23, 0x03, 0xfa, 0x01, 0xf1, - 0x22, 0xea, 0x01, 0x02, 0xd9, 0xf8, 0x10, 0x10, 0x99, 0x42, 0xc4, 0xf8, - 0x34, 0x28, 0xcb, 0xf8, 0x08, 0x30, 0x0b, 0xd1, 0x01, 0x9b, 0xd7, 0xe9, - 0x11, 0x52, 0x2a, 0x44, 0xba, 0x64, 0xd9, 0xf8, 0x50, 0x20, 0x13, 0x43, - 0x02, 0xd1, 0x98, 0x4a, 0xeb, 0xf7, 0x82, 0xfd, 0x97, 0x4b, 0xd3, 0xf8, - 0x04, 0x54, 0xba, 0xf1, 0x00, 0x0f, 0x40, 0xf0, 0x9b, 0x80, 0xd5, 0xf8, - 0x94, 0x22, 0x02, 0x2a, 0x40, 0xf0, 0x8e, 0x80, 0xd5, 0xe9, 0x08, 0x20, - 0x82, 0x42, 0x60, 0xd9, 0x12, 0x1a, 0x99, 0x6c, 0xd5, 0xf8, 0xc0, 0x02, - 0x2a, 0x62, 0x92, 0xb2, 0xe8, 0xf7, 0x83, 0xfd, 0x52, 0x46, 0x51, 0x46, - 0xd5, 0xf8, 0xc0, 0x02, 0xe8, 0xf7, 0x92, 0xfd, 0x95, 0xf8, 0xa0, 0x22, - 0x01, 0x2a, 0x02, 0xd1, 0x00, 0x22, 0x85, 0xf8, 0xa0, 0x22, 0x18, 0xf0, - 0x08, 0x0f, 0x02, 0xd0, 0x08, 0x22, 0xcb, 0xf8, 0x08, 0x20, 0x18, 0xf0, - 0x10, 0x0f, 0x02, 0xd0, 0x10, 0x22, 0xcb, 0xf8, 0x08, 0x20, 0x18, 0xf0, - 0x40, 0x0f, 0x02, 0xd0, 0x40, 0x22, 0xcb, 0xf8, 0x08, 0x20, 0x18, 0xf0, - 0x02, 0x0f, 0x02, 0xd0, 0x02, 0x22, 0xcb, 0xf8, 0x08, 0x20, 0x18, 0xf0, - 0x80, 0x0f, 0x00, 0xf0, 0x91, 0x80, 0xd7, 0xe9, 0x14, 0x21, 0x91, 0x42, - 0x00, 0xf2, 0x8c, 0x80, 0x52, 0x1a, 0x79, 0x6c, 0xd9, 0xf8, 0x00, 0x50, - 0x8a, 0x42, 0x01, 0x9b, 0x05, 0xf5, 0x10, 0x6c, 0x28, 0xbf, 0x0a, 0x46, - 0x05, 0xf5, 0x80, 0x51, 0x0c, 0xeb, 0x43, 0x1c, 0x03, 0x32, 0x01, 0xeb, - 0x0a, 0x33, 0x92, 0x08, 0xdc, 0xf8, 0x18, 0xe0, 0x1f, 0xfa, 0x8e, 0xfe, - 0x96, 0x45, 0xd7, 0xe9, 0x14, 0x01, 0x6f, 0xd3, 0x88, 0x42, 0x01, 0xd9, - 0x00, 0x28, 0x4c, 0xd1, 0x01, 0x9a, 0x01, 0x21, 0xd5, 0xf8, 0x34, 0x38, - 0x02, 0xf0, 0x0f, 0x02, 0x01, 0xfa, 0x02, 0xf2, 0x23, 0xea, 0x02, 0x03, - 0xc5, 0xf8, 0x34, 0x38, 0x60, 0xe0, 0xe9, 0x69, 0xb1, 0xfb, 0xf0, 0xf2, - 0x00, 0xfb, 0x12, 0x12, 0x72, 0xb9, 0x88, 0x42, 0x0c, 0xd8, 0xd5, 0xf8, - 0x98, 0x22, 0x91, 0x42, 0x08, 0xd2, 0x52, 0x46, 0x51, 0x46, 0xd5, 0xf8, - 0xc0, 0x02, 0xe8, 0xf7, 0x18, 0xfd, 0xc5, 0xf8, 0x98, 0xa2, 0x91, 0xe7, - 0xd5, 0xf8, 0xb4, 0x22, 0xd2, 0x68, 0x2a, 0xb1, 0x95, 0xf8, 0x9c, 0x12, - 0x03, 0x29, 0x01, 0xd1, 0x28, 0x46, 0x90, 0x47, 0x80, 0x21, 0x28, 0x46, - 0xfe, 0xf7, 0x23, 0xfe, 0x05, 0x22, 0xc5, 0xf8, 0x94, 0x22, 0x00, 0x22, - 0x11, 0x46, 0x7f, 0xe7, 0x32, 0xf0, 0x04, 0x03, 0x80, 0xd1, 0x80, 0x21, - 0x28, 0x46, 0xfe, 0xf7, 0x16, 0xfe, 0x7b, 0xe7, 0xd5, 0xf8, 0xb4, 0x22, - 0x52, 0x69, 0x00, 0x2a, 0x3f, 0xf4, 0x7d, 0xaf, 0x95, 0xf8, 0x9c, 0x12, - 0x03, 0x29, 0x7f, 0xf4, 0x78, 0xaf, 0x51, 0x46, 0x28, 0x46, 0x90, 0x47, - 0x73, 0xe7, 0x41, 0x1a, 0x7a, 0x6c, 0x99, 0xf8, 0x10, 0x00, 0x91, 0x42, - 0x28, 0xbf, 0x11, 0x46, 0xca, 0x1c, 0x92, 0x08, 0x30, 0xb1, 0xb8, 0x6c, - 0x08, 0x44, 0xb8, 0x64, 0x78, 0x6d, 0x01, 0x44, 0x79, 0x65, 0x95, 0xe7, - 0x88, 0xb2, 0xd7, 0xf8, 0x48, 0xe0, 0x03, 0x30, 0x80, 0x08, 0x0e, 0xeb, - 0x80, 0x00, 0x70, 0x45, 0xef, 0xd0, 0x5e, 0xf8, 0x04, 0x8b, 0xc3, 0xf8, - 0x00, 0x80, 0xf8, 0xe7, 0x88, 0x42, 0x91, 0xd9, 0x01, 0x9b, 0x1c, 0x37, - 0x0b, 0xf1, 0x20, 0x0b, 0x01, 0x33, 0x01, 0x93, 0x02, 0x9b, 0x5b, 0x08, - 0x02, 0x93, 0xff, 0xf7, 0x39, 0xb8, 0xd3, 0xf8, 0x04, 0x34, 0x93, 0xf8, - 0x9c, 0x22, 0x83, 0xf8, 0x9d, 0x22, 0x04, 0x22, 0x83, 0xf8, 0x9c, 0x22, - 0xff, 0xf7, 0x75, 0xb8, 0x9f, 0x60, 0x20, 0x33, 0x53, 0xf8, 0x20, 0x1c, - 0x21, 0xf4, 0x00, 0x11, 0x43, 0xf8, 0x20, 0x1c, 0x53, 0xf8, 0x20, 0x1c, - 0x41, 0xf0, 0x00, 0x61, 0x43, 0xf8, 0x20, 0x1c, 0xc3, 0xf8, 0xe8, 0x71, - 0xd3, 0xf8, 0xe0, 0x11, 0x21, 0xf4, 0x00, 0x11, 0xc3, 0xf8, 0xe0, 0x11, - 0xd3, 0xf8, 0xe0, 0x11, 0x41, 0xf0, 0x00, 0x61, 0xc3, 0xf8, 0xe0, 0x11, - 0x03, 0x99, 0x01, 0x31, 0x03, 0x91, 0xff, 0xf7, 0x6f, 0xb8, 0x53, 0x69, - 0x43, 0xf4, 0x00, 0x53, 0x43, 0xf0, 0x2b, 0x03, 0x53, 0x61, 0x13, 0x69, - 0x43, 0xf0, 0x0b, 0x03, 0x13, 0x61, 0xff, 0xf7, 0x7d, 0xb8, 0x0f, 0x23, - 0xff, 0xf7, 0xed, 0xb8, 0x0e, 0x23, 0xff, 0xf7, 0xea, 0xb8, 0x0d, 0x23, - 0xff, 0xf7, 0xe7, 0xb8, 0x0c, 0x23, 0xff, 0xf7, 0xe4, 0xb8, 0x0b, 0x23, - 0xff, 0xf7, 0xe1, 0xb8, 0x0a, 0x23, 0xff, 0xf7, 0xde, 0xb8, 0x09, 0x23, - 0xff, 0xf7, 0xdb, 0xb8, 0x08, 0x23, 0xff, 0xf7, 0xd8, 0xb8, 0x00, 0xbf, - 0x1c, 0xa0, 0x00, 0x24, 0x58, 0x9c, 0x00, 0x24, 0x30, 0xb5, 0x14, 0x4b, - 0x85, 0xb0, 0x0b, 0x25, 0x6c, 0x46, 0x0f, 0xcb, 0x84, 0xe8, 0x0f, 0x00, - 0x20, 0x46, 0x1c, 0x24, 0xfe, 0xf7, 0x7a, 0xf8, 0x0f, 0x4b, 0x18, 0x60, - 0x0f, 0x48, 0x10, 0x4b, 0x45, 0x60, 0x03, 0x60, 0x0f, 0x4b, 0xc4, 0x60, - 0x83, 0x60, 0xfe, 0xf7, 0x6f, 0xf8, 0x0e, 0x4b, 0x18, 0x60, 0x0e, 0x48, - 0x0e, 0x4b, 0xc4, 0x60, 0xc0, 0xe9, 0x00, 0x35, 0x0d, 0x4b, 0x83, 0x60, - 0xfe, 0xf7, 0x64, 0xf8, 0x0c, 0x4b, 0x18, 0x60, 0x00, 0xf0, 0xb2, 0xff, - 0xfd, 0xf7, 0x1a, 0xfc, 0x05, 0xb0, 0x30, 0xbd, 0xd0, 0xeb, 0x01, 0x08, - 0xe8, 0x86, 0x00, 0x24, 0x64, 0xa0, 0x00, 0x24, 0xe7, 0xe9, 0x01, 0x08, - 0x74, 0xa0, 0x00, 0x24, 0xe0, 0x86, 0x00, 0x24, 0x24, 0x9c, 0x00, 0x24, - 0xf4, 0xe9, 0x01, 0x08, 0x34, 0x9c, 0x00, 0x24, 0xa0, 0x86, 0x00, 0x24, - 0x2d, 0xe9, 0xf7, 0x4f, 0xfe, 0xf7, 0x84, 0xfc, 0x00, 0x20, 0xfe, 0xf7, - 0xeb, 0xf9, 0x40, 0xf2, 0xaa, 0x73, 0xab, 0x4c, 0x98, 0x42, 0xab, 0x4d, - 0x63, 0xd1, 0x01, 0x20, 0xfe, 0xf7, 0xe2, 0xf9, 0xc0, 0xb2, 0x20, 0x60, - 0x01, 0x20, 0xfe, 0xf7, 0xdd, 0xf9, 0x00, 0xf0, 0x07, 0x00, 0x20, 0x71, - 0x01, 0x20, 0xfe, 0xf7, 0xd7, 0xf9, 0xc0, 0xf3, 0x00, 0x10, 0x60, 0x71, - 0x01, 0x20, 0xfe, 0xf7, 0xd1, 0xf9, 0xc0, 0xf3, 0xc0, 0x10, 0xa0, 0x71, - 0x02, 0x20, 0xfe, 0xf7, 0xcb, 0xf9, 0xa0, 0x60, 0x03, 0x20, 0xfe, 0xf7, - 0xc7, 0xf9, 0xe0, 0x60, 0x04, 0x20, 0xfe, 0xf7, 0xc3, 0xf9, 0xc0, 0xb2, - 0x20, 0x62, 0x04, 0x20, 0xfe, 0xf7, 0xbe, 0xf9, 0x00, 0xf0, 0x07, 0x00, - 0x84, 0xf8, 0x24, 0x00, 0x04, 0x20, 0xfe, 0xf7, 0xb7, 0xf9, 0xc0, 0xf3, - 0x00, 0x10, 0x84, 0xf8, 0x25, 0x00, 0x04, 0x20, 0xfe, 0xf7, 0xb0, 0xf9, - 0xc0, 0xf3, 0xc0, 0x10, 0x84, 0xf8, 0x26, 0x00, 0x05, 0x20, 0xfe, 0xf7, - 0xa9, 0xf9, 0xa0, 0x62, 0x06, 0x20, 0xfe, 0xf7, 0xa5, 0xf9, 0x2b, 0x78, - 0xe0, 0x62, 0x8b, 0xb1, 0x89, 0x48, 0x02, 0xf0, 0x6b, 0xfd, 0x2b, 0x78, - 0x63, 0xb1, 0x22, 0x79, 0x21, 0x68, 0x87, 0x48, 0xf5, 0xf7, 0x54, 0xf8, - 0x2b, 0x78, 0x2b, 0xb1, 0x94, 0xf8, 0x24, 0x20, 0x21, 0x6a, 0x84, 0x48, - 0xf5, 0xf7, 0x4c, 0xf8, 0x23, 0x79, 0x94, 0xf8, 0x24, 0x20, 0x03, 0xf0, - 0x02, 0x01, 0x9a, 0x42, 0x40, 0xf0, 0x1a, 0x81, 0xf9, 0xb1, 0x2b, 0x78, - 0x3b, 0xb3, 0x7e, 0x48, 0x02, 0xf0, 0x4e, 0xfd, 0x23, 0xe0, 0x02, 0x20, - 0x4f, 0xf4, 0xf0, 0x13, 0xa4, 0x21, 0x04, 0x22, 0xa0, 0x62, 0x21, 0x60, - 0xa2, 0x80, 0x21, 0x62, 0xa2, 0x84, 0xc4, 0xe9, 0x02, 0x03, 0x01, 0x23, - 0x4f, 0xf4, 0x00, 0x30, 0xa3, 0x71, 0x84, 0xf8, 0x26, 0x30, 0x2b, 0x78, - 0xe0, 0x62, 0x00, 0x2b, 0xda, 0xd0, 0x72, 0x48, 0x02, 0xf0, 0x34, 0xfd, - 0xd6, 0xe7, 0x11, 0x07, 0x14, 0xd5, 0x88, 0x20, 0xf5, 0xf7, 0x3e, 0xf8, - 0x06, 0x46, 0xfd, 0xf7, 0x9f, 0xf9, 0x26, 0x61, 0x26, 0x63, 0x63, 0x79, - 0x00, 0x2b, 0x40, 0xd0, 0x22, 0x79, 0x12, 0xf0, 0x02, 0x08, 0x14, 0xd0, - 0x2b, 0x78, 0x33, 0xb3, 0x65, 0x48, 0x02, 0xf0, 0x1d, 0xfd, 0x1f, 0xe0, - 0x52, 0x07, 0x07, 0xd5, 0x4f, 0xf4, 0x02, 0x70, 0xf5, 0xf7, 0x26, 0xf8, - 0x06, 0x46, 0xe8, 0xf7, 0x7f, 0xfc, 0xe6, 0xe7, 0x2b, 0x78, 0x00, 0x2b, - 0xe5, 0xd0, 0x5f, 0x48, 0xbc, 0xe7, 0x12, 0xf0, 0x08, 0x07, 0x13, 0xd0, - 0x28, 0x20, 0xf5, 0xf7, 0x17, 0xf8, 0xe3, 0x68, 0x06, 0x46, 0xa2, 0x68, - 0xcd, 0xe9, 0x00, 0x38, 0x43, 0x46, 0x21, 0x69, 0xf1, 0xf7, 0xb6, 0xfb, - 0x66, 0x61, 0x66, 0x63, 0x63, 0x79, 0x00, 0x2b, 0x4a, 0xd0, 0x03, 0xb0, - 0xbd, 0xe8, 0xf0, 0x8f, 0x53, 0x07, 0x09, 0xd5, 0x28, 0x20, 0xf5, 0xf7, - 0x01, 0xf8, 0xe3, 0x68, 0x06, 0x46, 0xa2, 0x68, 0xcd, 0xe9, 0x00, 0x37, - 0x3b, 0x46, 0xe8, 0xe7, 0x2b, 0x78, 0x00, 0x2b, 0xed, 0xd0, 0x4b, 0x48, - 0xc5, 0xe7, 0xa3, 0x79, 0x00, 0x2b, 0x30, 0xd0, 0x22, 0x6a, 0x23, 0x68, - 0x9a, 0x42, 0x04, 0xd0, 0x2b, 0x78, 0x13, 0xb1, 0x46, 0x48, 0x02, 0xf0, - 0xd9, 0xfc, 0xa2, 0x68, 0xa3, 0x6a, 0x9a, 0x42, 0x04, 0xd0, 0x2b, 0x78, - 0x13, 0xb1, 0x43, 0x48, 0x02, 0xf0, 0xd0, 0xfc, 0x28, 0x20, 0x42, 0x4e, - 0xf4, 0xf7, 0xdc, 0xff, 0x22, 0x69, 0x00, 0x27, 0xa1, 0x68, 0x60, 0x61, - 0x41, 0x76, 0x60, 0x63, 0xc0, 0xe9, 0x00, 0x62, 0x00, 0x22, 0x00, 0x26, - 0x02, 0x76, 0xc2, 0x61, 0x80, 0xf8, 0x20, 0x20, 0xc0, 0xe9, 0x02, 0x67, - 0xc0, 0xe9, 0x04, 0x67, 0xf3, 0xf7, 0x46, 0xf8, 0x00, 0x28, 0xb9, 0xd0, - 0x2b, 0x78, 0x00, 0x2b, 0xb6, 0xd0, 0x35, 0x48, 0x91, 0xe7, 0x23, 0x69, - 0x63, 0x61, 0x63, 0x63, 0x23, 0x68, 0x5e, 0x06, 0x43, 0xd5, 0xc8, 0x20, - 0xf4, 0xf7, 0xb8, 0xff, 0x30, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0xe2, 0xfb, - 0xe6, 0x61, 0xe0, 0x69, 0x61, 0x69, 0x03, 0x68, 0xe0, 0x63, 0x5b, 0x6a, - 0x98, 0x47, 0x20, 0xb1, 0x2b, 0x78, 0x13, 0xb1, 0x2a, 0x48, 0x02, 0xf0, - 0x97, 0xfc, 0x38, 0x20, 0x01, 0x26, 0xf4, 0xf7, 0xa3, 0xff, 0x00, 0x27, - 0xe3, 0x68, 0x00, 0x25, 0x26, 0x4a, 0x4f, 0xf4, 0x80, 0x58, 0xdf, 0xf8, - 0x9c, 0xb0, 0x4f, 0xf0, 0x00, 0x09, 0xdf, 0xf8, 0x98, 0xa0, 0x82, 0x60, - 0xc0, 0xf8, 0x00, 0xb0, 0x45, 0x61, 0xa0, 0x61, 0xc0, 0xe9, 0x03, 0xa3, - 0xc0, 0xe9, 0x06, 0x67, 0xc0, 0xe9, 0x08, 0x67, 0xc0, 0xe9, 0x0a, 0x89, - 0x38, 0x20, 0xf4, 0xf7, 0x87, 0xff, 0xe3, 0x6a, 0x1a, 0x4a, 0xc0, 0xf8, - 0x00, 0xb0, 0xc0, 0xe9, 0x02, 0x2a, 0xc0, 0xe9, 0x04, 0x35, 0xc0, 0xe9, - 0x06, 0x67, 0xc0, 0xe9, 0x08, 0x67, 0xc0, 0xe9, 0x0a, 0x89, 0xa0, 0x63, - 0x6d, 0xe7, 0x54, 0x20, 0xf4, 0xf7, 0x74, 0xff, 0x0e, 0x49, 0x06, 0x46, - 0xe8, 0xf7, 0x82, 0xfb, 0xba, 0xe7, 0x00, 0xbf, 0xb4, 0x05, 0x00, 0x24, - 0xd8, 0x0d, 0x00, 0x24, 0xfe, 0xe9, 0x01, 0x08, 0x10, 0xea, 0x01, 0x08, - 0x27, 0xea, 0x01, 0x08, 0x4f, 0xea, 0x01, 0x08, 0x3c, 0xea, 0x01, 0x08, - 0x5a, 0xea, 0x01, 0x08, 0x63, 0xea, 0x01, 0x08, 0x6c, 0xea, 0x01, 0x08, - 0xec, 0xec, 0x01, 0x08, 0x76, 0xea, 0x01, 0x08, 0x76, 0xdf, 0x01, 0x08, - 0x7d, 0xea, 0x01, 0x08, 0x85, 0xea, 0x01, 0x08, 0x98, 0xea, 0x01, 0x08, - 0x50, 0xed, 0x01, 0x08, 0x94, 0xea, 0x01, 0x08, 0x29, 0xb1, 0x2b, 0x78, - 0x63, 0xb1, 0xa8, 0x48, 0x02, 0xf0, 0x34, 0xfc, 0x08, 0xe0, 0x18, 0x07, - 0x10, 0xd5, 0x88, 0x20, 0xf4, 0xf7, 0x3e, 0xff, 0x06, 0x46, 0xfd, 0xf7, - 0x9f, 0xf8, 0x26, 0x61, 0x94, 0xf8, 0x24, 0x30, 0x9a, 0x07, 0x14, 0xd5, - 0x2b, 0x78, 0xdb, 0xb1, 0x9f, 0x48, 0x02, 0xf0, 0x21, 0xfc, 0x17, 0xe0, - 0x59, 0x07, 0x07, 0xd5, 0x4f, 0xf4, 0x02, 0x70, 0xf4, 0xf7, 0x2a, 0xff, - 0x06, 0x46, 0xe8, 0xf7, 0x83, 0xfb, 0xea, 0xe7, 0x2b, 0x78, 0x00, 0x2b, - 0xe8, 0xd0, 0x98, 0x48, 0xda, 0xe7, 0x1f, 0x07, 0x13, 0xd5, 0x88, 0x20, - 0xf4, 0xf7, 0x1c, 0xff, 0x06, 0x46, 0xfd, 0xf7, 0x7d, 0xf8, 0x26, 0x63, - 0x66, 0x79, 0x00, 0x2e, 0x4a, 0xd0, 0x22, 0x79, 0x12, 0xf0, 0x02, 0x08, - 0x14, 0xd0, 0x2b, 0x78, 0x13, 0xb3, 0x8c, 0x48, 0x02, 0xf0, 0xfc, 0xfb, - 0x1e, 0xe0, 0x5e, 0x07, 0x07, 0xd5, 0x4f, 0xf4, 0x02, 0x70, 0xf4, 0xf7, - 0x05, 0xff, 0x06, 0x46, 0xe8, 0xf7, 0x5e, 0xfb, 0xe7, 0xe7, 0x2b, 0x78, - 0x00, 0x2b, 0xe5, 0xd0, 0x86, 0x48, 0xc8, 0xe7, 0x12, 0xf0, 0x08, 0x07, - 0x1d, 0xd0, 0x28, 0x20, 0xf4, 0xf7, 0xf6, 0xfe, 0xe3, 0x68, 0x06, 0x46, - 0xa2, 0x68, 0xcd, 0xe9, 0x00, 0x38, 0x43, 0x46, 0x21, 0x69, 0xf1, 0xf7, - 0x95, 0xfa, 0x66, 0x61, 0x94, 0xf8, 0x25, 0x60, 0x00, 0x2e, 0x00, 0xf0, - 0xca, 0x80, 0x94, 0xf8, 0x24, 0x20, 0x12, 0xf0, 0x02, 0x08, 0x3b, 0xd0, - 0x2b, 0x78, 0x00, 0x2b, 0x48, 0xd0, 0x75, 0x48, 0x02, 0xf0, 0xcc, 0xfb, - 0x44, 0xe0, 0x50, 0x07, 0x09, 0xd5, 0x28, 0x20, 0xf4, 0xf7, 0xd6, 0xfe, - 0xe3, 0x68, 0x06, 0x46, 0xa2, 0x68, 0xcd, 0xe9, 0x00, 0x37, 0x3b, 0x46, - 0xde, 0xe7, 0x2b, 0x78, 0x00, 0x2b, 0xdf, 0xd0, 0x6c, 0x48, 0xbb, 0xe7, - 0xa3, 0x79, 0xf3, 0xb1, 0x28, 0x20, 0x4f, 0xf0, 0x00, 0x08, 0xf4, 0xf7, - 0xc3, 0xfe, 0x4f, 0xf0, 0x00, 0x09, 0x21, 0x69, 0xa2, 0x68, 0x68, 0x4f, - 0x06, 0x76, 0x42, 0x76, 0xc6, 0x61, 0x80, 0xf8, 0x20, 0x60, 0x60, 0x61, - 0xc0, 0xe9, 0x00, 0x71, 0xc0, 0xe9, 0x02, 0x89, 0xc0, 0xe9, 0x04, 0x89, - 0xf2, 0xf7, 0x2e, 0xff, 0x00, 0x28, 0xc1, 0xd0, 0x2b, 0x78, 0x00, 0x2b, - 0xbe, 0xd0, 0x5f, 0x48, 0x9a, 0xe7, 0x23, 0x69, 0x63, 0x61, 0xb9, 0xe7, - 0x12, 0xf0, 0x08, 0x07, 0x74, 0xd0, 0x28, 0x20, 0xf4, 0xf7, 0xa0, 0xfe, - 0xe3, 0x6a, 0x06, 0x46, 0xa2, 0x6a, 0xcd, 0xe9, 0x00, 0x38, 0x43, 0x46, - 0x21, 0x6b, 0xf1, 0xf7, 0x3f, 0xfa, 0x66, 0x63, 0x63, 0x79, 0x00, 0x2b, - 0x2f, 0xd1, 0x23, 0x68, 0x5a, 0x06, 0x40, 0xf1, 0xb7, 0x80, 0xc8, 0x20, - 0xf4, 0xf7, 0x8c, 0xfe, 0x50, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0xb6, 0xfa, - 0xe6, 0x61, 0xe0, 0x69, 0x61, 0x69, 0x03, 0x68, 0x5b, 0x6a, 0x98, 0x47, - 0x20, 0xb1, 0x2b, 0x78, 0x13, 0xb1, 0x4b, 0x48, 0x02, 0xf0, 0x6c, 0xfb, - 0x38, 0x20, 0xf4, 0xf7, 0x79, 0xfe, 0x49, 0x4a, 0xe3, 0x68, 0x02, 0x60, - 0x48, 0x4a, 0xa0, 0x61, 0x82, 0x60, 0x48, 0x4a, 0xc0, 0xe9, 0x03, 0x23, - 0x00, 0x23, 0x01, 0x22, 0x43, 0x61, 0x00, 0x23, 0xc0, 0xe9, 0x06, 0x23, - 0xc0, 0xe9, 0x08, 0x23, 0x4f, 0xf4, 0x80, 0x52, 0x00, 0x23, 0xc0, 0xe9, - 0x0a, 0x23, 0x94, 0xf8, 0x25, 0x30, 0x00, 0x2b, 0x7f, 0xf4, 0x55, 0xae, - 0x23, 0x6a, 0x5b, 0x06, 0x40, 0xf1, 0x8a, 0x80, 0xc8, 0x20, 0xf4, 0xf7, - 0x57, 0xfe, 0x3b, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0x81, 0xfa, 0xe6, 0x63, - 0xe0, 0x6b, 0x61, 0x6b, 0x03, 0x68, 0x5b, 0x6a, 0x98, 0x47, 0x20, 0xb1, - 0x2b, 0x78, 0x13, 0xb1, 0x35, 0x48, 0x02, 0xf0, 0x37, 0xfb, 0x38, 0x20, - 0xf4, 0xf7, 0x44, 0xfe, 0x2e, 0x4a, 0xe3, 0x6a, 0x02, 0x60, 0x32, 0x4a, - 0x82, 0x60, 0x2e, 0x4a, 0xc0, 0xe9, 0x03, 0x23, 0x00, 0x23, 0x01, 0x22, - 0x43, 0x61, 0x00, 0x23, 0xc0, 0xe9, 0x06, 0x23, 0xc0, 0xe9, 0x08, 0x23, - 0x4f, 0xf4, 0x80, 0x52, 0x00, 0x23, 0xc0, 0xe9, 0x0a, 0x23, 0xb4, 0xe6, - 0x51, 0x07, 0x09, 0xd5, 0x28, 0x20, 0xf4, 0xf7, 0x29, 0xfe, 0xe3, 0x6a, - 0x06, 0x46, 0xa2, 0x6a, 0xcd, 0xe9, 0x00, 0x37, 0x3b, 0x46, 0x87, 0xe7, - 0x2b, 0x78, 0x00, 0x2b, 0x88, 0xd0, 0x17, 0x48, 0x3e, 0xe7, 0x94, 0xf8, - 0x26, 0x30, 0x03, 0xb3, 0x28, 0x20, 0x4f, 0xf0, 0x00, 0x08, 0xf4, 0xf7, - 0x15, 0xfe, 0x4f, 0xf0, 0x00, 0x09, 0x21, 0x6b, 0xa2, 0x6a, 0x11, 0x4f, - 0x06, 0x76, 0x42, 0x76, 0xc6, 0x61, 0x80, 0xf8, 0x20, 0x60, 0x60, 0x63, - 0xc0, 0xe9, 0x00, 0x71, 0xc0, 0xe9, 0x02, 0x89, 0xc0, 0xe9, 0x04, 0x89, - 0xf2, 0xf7, 0x80, 0xfe, 0x00, 0x28, 0x3f, 0xf4, 0x69, 0xaf, 0x2b, 0x78, - 0x00, 0x2b, 0x3f, 0xf4, 0x65, 0xaf, 0x10, 0x48, 0x1a, 0xe7, 0x23, 0x6b, - 0x63, 0x63, 0x5f, 0xe7, 0x4f, 0xea, 0x01, 0x08, 0xb3, 0xea, 0x01, 0x08, - 0xa8, 0xea, 0x01, 0x08, 0xbe, 0xea, 0x01, 0x08, 0xec, 0xec, 0x01, 0x08, - 0xc9, 0xea, 0x01, 0x08, 0xe3, 0xea, 0x01, 0x08, 0xe7, 0xea, 0x01, 0x08, - 0x50, 0xed, 0x01, 0x08, 0xf8, 0xea, 0x01, 0x08, 0x94, 0xea, 0x01, 0x08, - 0x08, 0xeb, 0x01, 0x08, 0x0c, 0xeb, 0x01, 0x08, 0x1d, 0xeb, 0x01, 0x08, - 0xd6, 0xea, 0x01, 0x08, 0x54, 0x20, 0xf4, 0xf7, 0xd5, 0xfd, 0x06, 0x49, - 0x06, 0x46, 0xe8, 0xf7, 0xe3, 0xf9, 0x47, 0xe7, 0x54, 0x20, 0xf4, 0xf7, - 0xcd, 0xfd, 0x03, 0x49, 0x06, 0x46, 0xe8, 0xf7, 0xdb, 0xf9, 0x74, 0xe7, - 0xe3, 0xea, 0x01, 0x08, 0x08, 0xeb, 0x01, 0x08, 0x10, 0xb5, 0x08, 0x4c, - 0x23, 0x78, 0x1b, 0xb9, 0xff, 0xf7, 0xf0, 0xfc, 0x01, 0x23, 0x23, 0x70, - 0x05, 0x4b, 0xd3, 0xe9, 0x05, 0x12, 0x58, 0x79, 0x00, 0x28, 0x14, 0xbf, - 0x08, 0x46, 0x10, 0x46, 0x10, 0xbd, 0x00, 0xbf, 0x68, 0x06, 0x00, 0x24, - 0xb4, 0x05, 0x00, 0x24, 0x01, 0x4b, 0x18, 0x68, 0x70, 0x47, 0x00, 0xbf, - 0x10, 0x03, 0x00, 0x24, 0x70, 0xb5, 0x05, 0x46, 0x0c, 0x46, 0x11, 0xb9, - 0x00, 0x26, 0x30, 0x46, 0x70, 0xbd, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, - 0x00, 0xf0, 0x94, 0xf9, 0x2c, 0x4b, 0x9c, 0x42, 0x14, 0xd1, 0x6c, 0x68, - 0x63, 0x6e, 0xd8, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x99, 0x05, 0x02, 0xd4, - 0xa0, 0x6d, 0x00, 0xf0, 0x8a, 0xfd, 0xb4, 0xf9, 0x0c, 0x30, 0x8b, 0xb9, - 0x66, 0x6e, 0x16, 0xf0, 0x01, 0x06, 0xe3, 0xd1, 0xa0, 0x6d, 0x00, 0xf0, - 0x82, 0xfd, 0xe0, 0xe7, 0x21, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, - 0xe6, 0xe7, 0x20, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xe1, 0xe7, - 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x42, 0xf8, 0x23, 0x6b, 0x06, 0x46, - 0x33, 0xb1, 0x21, 0x6a, 0x28, 0x46, 0x98, 0x47, 0x00, 0x28, 0xb8, 0xbf, - 0x4f, 0xf0, 0xff, 0x36, 0xa3, 0x89, 0x1a, 0x06, 0x03, 0xd5, 0x21, 0x69, - 0x28, 0x46, 0xf4, 0xf7, 0x83, 0xff, 0x61, 0x6b, 0x41, 0xb1, 0x04, 0xf1, - 0x44, 0x03, 0x99, 0x42, 0x02, 0xd0, 0x28, 0x46, 0xf4, 0xf7, 0x7a, 0xff, - 0x00, 0x23, 0x63, 0x63, 0xa1, 0x6c, 0x21, 0xb1, 0x28, 0x46, 0xf4, 0xf7, - 0x73, 0xff, 0x00, 0x23, 0xa3, 0x64, 0x00, 0xf0, 0x31, 0xf9, 0x00, 0x23, - 0xa3, 0x81, 0x63, 0x6e, 0xdb, 0x07, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, - 0x46, 0xfd, 0xa0, 0x6d, 0x00, 0xf0, 0x3f, 0xfd, 0x00, 0xf0, 0x2a, 0xf9, - 0x9f, 0xe7, 0x00, 0xbf, 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, - 0x14, 0xd2, 0x01, 0x08, 0x02, 0x4b, 0x01, 0x46, 0x18, 0x68, 0xff, 0xf7, - 0x8f, 0xbf, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, 0x8a, 0x89, 0x2d, 0xe9, - 0xf0, 0x41, 0x05, 0x46, 0x10, 0x07, 0x0c, 0x46, 0x58, 0xd4, 0x4b, 0x68, - 0x00, 0x2b, 0x05, 0xdc, 0x0b, 0x6c, 0x00, 0x2b, 0x02, 0xdc, 0x00, 0x20, - 0xbd, 0xe8, 0xf0, 0x81, 0xe6, 0x6a, 0x00, 0x2e, 0xf9, 0xd0, 0x00, 0x23, - 0x12, 0xf4, 0x80, 0x52, 0x2f, 0x68, 0x2b, 0x60, 0x32, 0xd0, 0x60, 0x6d, - 0xa3, 0x89, 0x5a, 0x07, 0x05, 0xd5, 0x63, 0x68, 0xc0, 0x1a, 0x63, 0x6b, - 0x0b, 0xb1, 0x23, 0x6c, 0xc0, 0x1a, 0x00, 0x23, 0x02, 0x46, 0xe6, 0x6a, - 0x21, 0x6a, 0x28, 0x46, 0xb0, 0x47, 0x43, 0x1c, 0xa3, 0x89, 0x06, 0xd1, - 0x29, 0x68, 0x1d, 0x29, 0x2c, 0xd8, 0x2a, 0x4a, 0xca, 0x40, 0xd6, 0x07, - 0x28, 0xd5, 0x00, 0x22, 0x62, 0x60, 0xd9, 0x04, 0x22, 0x69, 0x22, 0x60, - 0x04, 0xd5, 0x42, 0x1c, 0x01, 0xd1, 0x2b, 0x68, 0x03, 0xb9, 0x60, 0x65, - 0x61, 0x6b, 0x2f, 0x60, 0x00, 0x29, 0xca, 0xd0, 0x04, 0xf1, 0x44, 0x03, - 0x99, 0x42, 0x02, 0xd0, 0x28, 0x46, 0xf4, 0xf7, 0x09, 0xff, 0x00, 0x20, - 0x60, 0x63, 0xc1, 0xe7, 0x21, 0x6a, 0x01, 0x23, 0x28, 0x46, 0xb0, 0x47, - 0x41, 0x1c, 0xc7, 0xd1, 0x2b, 0x68, 0x00, 0x2b, 0xc4, 0xd0, 0x1d, 0x2b, - 0x01, 0xd0, 0x16, 0x2b, 0x01, 0xd1, 0x2f, 0x60, 0xb1, 0xe7, 0xa3, 0x89, - 0x43, 0xf0, 0x40, 0x03, 0xa3, 0x81, 0xad, 0xe7, 0x0f, 0x69, 0x00, 0x2f, - 0xa9, 0xd0, 0x93, 0x07, 0x0e, 0x68, 0x08, 0xbf, 0x4b, 0x69, 0x0f, 0x60, - 0x18, 0xbf, 0x00, 0x23, 0xa6, 0xeb, 0x07, 0x08, 0x8b, 0x60, 0xb8, 0xf1, - 0x00, 0x0f, 0x9c, 0xdd, 0x21, 0x6a, 0xa6, 0x6a, 0x43, 0x46, 0x3a, 0x46, - 0x28, 0x46, 0xb0, 0x47, 0x00, 0x28, 0x06, 0xdc, 0xa3, 0x89, 0x43, 0xf0, - 0x40, 0x03, 0xa3, 0x81, 0x4f, 0xf0, 0xff, 0x30, 0x8e, 0xe7, 0x07, 0x44, - 0xa8, 0xeb, 0x00, 0x08, 0xe9, 0xe7, 0x00, 0xbf, 0x01, 0x00, 0x40, 0x20, - 0x38, 0xb5, 0x0b, 0x69, 0x05, 0x46, 0x0c, 0x46, 0x13, 0xb9, 0x00, 0x25, - 0x28, 0x46, 0x38, 0xbd, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0x00, 0xf0, - 0x99, 0xf8, 0x14, 0x4b, 0x9c, 0x42, 0x1b, 0xd1, 0x6c, 0x68, 0xb4, 0xf9, - 0x0c, 0x30, 0x00, 0x2b, 0xef, 0xd0, 0x62, 0x6e, 0xd0, 0x07, 0x04, 0xd4, - 0x99, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x8c, 0xfc, 0x28, 0x46, - 0x21, 0x46, 0xff, 0xf7, 0x59, 0xff, 0x63, 0x6e, 0xda, 0x07, 0x05, 0x46, - 0xe0, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0xdd, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, - 0x80, 0xfc, 0xd9, 0xe7, 0x05, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, - 0xdf, 0xe7, 0x04, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xda, 0xe7, - 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, 0x14, 0xd2, 0x01, 0x08, - 0x01, 0x46, 0x20, 0xb9, 0x04, 0x4b, 0x05, 0x49, 0x18, 0x68, 0x00, 0xf0, - 0x18, 0xbb, 0x04, 0x4b, 0x18, 0x68, 0xff, 0xf7, 0xb9, 0xbf, 0x00, 0xbf, - 0x74, 0xd2, 0x01, 0x08, 0xed, 0xa8, 0x01, 0x08, 0x10, 0x03, 0x00, 0x24, - 0x00, 0x23, 0x10, 0xb5, 0x04, 0x46, 0xc0, 0xe9, 0x00, 0x33, 0xc0, 0xe9, - 0x04, 0x33, 0x83, 0x60, 0x81, 0x81, 0x43, 0x66, 0xc2, 0x81, 0x83, 0x61, - 0x19, 0x46, 0x08, 0x22, 0x5c, 0x30, 0x00, 0xf0, 0x21, 0xfd, 0x05, 0x4b, - 0x63, 0x62, 0x05, 0x4b, 0xa3, 0x62, 0x05, 0x4b, 0xe3, 0x62, 0x05, 0x4b, - 0x24, 0x62, 0x23, 0x63, 0x10, 0xbd, 0x00, 0xbf, 0x29, 0xb7, 0x01, 0x08, - 0x4f, 0xb7, 0x01, 0x08, 0x87, 0xb7, 0x01, 0x08, 0xab, 0xb7, 0x01, 0x08, - 0x01, 0x49, 0x00, 0xf0, 0xe6, 0xba, 0x00, 0xbf, 0xed, 0xa8, 0x01, 0x08, - 0x70, 0xb5, 0x4a, 0x1e, 0x68, 0x25, 0x55, 0x43, 0x0e, 0x46, 0x05, 0xf1, - 0x74, 0x01, 0xf4, 0xf7, 0x4f, 0xfe, 0x04, 0x46, 0x40, 0xb1, 0x00, 0x21, - 0xc0, 0xe9, 0x00, 0x16, 0x0c, 0x30, 0xa0, 0x60, 0x05, 0xf1, 0x68, 0x02, - 0x00, 0xf0, 0xf4, 0xfc, 0x20, 0x46, 0x70, 0xbd, 0x01, 0x48, 0x00, 0xf0, - 0x18, 0xbc, 0x00, 0xbf, 0x70, 0xa8, 0x00, 0x24, 0x01, 0x48, 0x00, 0xf0, - 0x14, 0xbc, 0x00, 0xbf, 0x70, 0xa8, 0x00, 0x24, 0x01, 0x48, 0x00, 0xf0, - 0x0c, 0xbc, 0x00, 0xbf, 0x6f, 0xa8, 0x00, 0x24, 0x01, 0x48, 0x00, 0xf0, - 0x08, 0xbc, 0x00, 0xbf, 0x6f, 0xa8, 0x00, 0x24, 0x10, 0xb5, 0x04, 0x46, - 0xff, 0xf7, 0xf0, 0xff, 0xa3, 0x69, 0x1b, 0xb1, 0xbd, 0xe8, 0x10, 0x40, - 0xff, 0xf7, 0xf0, 0xbf, 0xc4, 0xe9, 0x12, 0x33, 0x23, 0x65, 0x13, 0x4b, - 0x13, 0x4a, 0x1b, 0x68, 0xa2, 0x62, 0xa3, 0x42, 0x04, 0xbf, 0x01, 0x23, - 0xa3, 0x61, 0x20, 0x46, 0x00, 0xf0, 0x20, 0xf8, 0x60, 0x60, 0x20, 0x46, - 0x00, 0xf0, 0x1c, 0xf8, 0xa0, 0x60, 0x20, 0x46, 0x00, 0xf0, 0x18, 0xf8, - 0x00, 0x22, 0xe0, 0x60, 0x04, 0x21, 0x60, 0x68, 0xff, 0xf7, 0x82, 0xff, - 0xa0, 0x68, 0x01, 0x22, 0x09, 0x21, 0xff, 0xf7, 0x7d, 0xff, 0xe0, 0x68, - 0x02, 0x22, 0x12, 0x21, 0xff, 0xf7, 0x78, 0xff, 0x01, 0x23, 0xa3, 0x61, - 0xd2, 0xe7, 0x00, 0xbf, 0x74, 0xd2, 0x01, 0x08, 0xd1, 0xa9, 0x01, 0x08, - 0xf8, 0xb5, 0x07, 0x46, 0xff, 0xf7, 0xac, 0xff, 0x1e, 0x4b, 0x1e, 0x68, - 0xb3, 0x69, 0x13, 0xb9, 0x30, 0x46, 0xff, 0xf7, 0xbd, 0xff, 0x48, 0x36, - 0xd6, 0xe9, 0x01, 0x34, 0x01, 0x3b, 0x03, 0xd5, 0x33, 0x68, 0x0b, 0xb3, - 0x36, 0x68, 0xf7, 0xe7, 0xb4, 0xf9, 0x0c, 0x50, 0xd5, 0xb9, 0x16, 0x4b, - 0xe3, 0x60, 0x04, 0xf1, 0x58, 0x00, 0x65, 0x66, 0x00, 0xf0, 0xaa, 0xfb, - 0xff, 0xf7, 0x96, 0xff, 0xc4, 0xe9, 0x01, 0x55, 0xc4, 0xe9, 0x04, 0x55, - 0x25, 0x60, 0xa5, 0x61, 0x08, 0x22, 0x29, 0x46, 0x04, 0xf1, 0x5c, 0x00, - 0x00, 0xf0, 0x76, 0xfc, 0xc4, 0xe9, 0x0d, 0x55, 0xc4, 0xe9, 0x12, 0x55, - 0x20, 0x46, 0xf8, 0xbd, 0x68, 0x34, 0xd9, 0xe7, 0x04, 0x21, 0x38, 0x46, - 0xff, 0xf7, 0x62, 0xff, 0x04, 0x46, 0x30, 0x60, 0x00, 0x28, 0xd5, 0xd1, - 0xff, 0xf7, 0x78, 0xff, 0x0c, 0x23, 0x3b, 0x60, 0xee, 0xe7, 0x00, 0xbf, - 0x74, 0xd2, 0x01, 0x08, 0x01, 0x00, 0xff, 0xff, 0xf7, 0xb5, 0x0f, 0x46, - 0x11, 0x46, 0x01, 0xaa, 0x05, 0x46, 0x01, 0xf0, 0x91, 0xf8, 0x06, 0x46, - 0x18, 0xb9, 0x00, 0x24, 0x20, 0x46, 0x03, 0xb0, 0xf0, 0xbd, 0x28, 0x46, - 0xff, 0xf7, 0xaa, 0xff, 0x04, 0x46, 0x00, 0x28, 0xf5, 0xd0, 0x39, 0x46, - 0x01, 0x9a, 0x4f, 0xf4, 0xdb, 0x73, 0x28, 0x46, 0x00, 0xf0, 0x2a, 0xfd, - 0x07, 0x1e, 0x09, 0xda, 0x00, 0x25, 0xff, 0xf7, 0x4b, 0xff, 0xa0, 0x6d, - 0xa5, 0x81, 0x00, 0xf0, 0x60, 0xfb, 0xff, 0xf7, 0x4b, 0xff, 0xe2, 0xe7, - 0x63, 0x6e, 0xdb, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x98, 0x05, 0x02, 0xd4, - 0xa0, 0x6d, 0x00, 0xf0, 0x56, 0xfb, 0x0e, 0x4b, 0x63, 0x62, 0x0e, 0x4b, - 0xa3, 0x62, 0x0e, 0x4b, 0xe3, 0x62, 0xf1, 0x05, 0x0d, 0x4b, 0xe7, 0x81, - 0xa6, 0x81, 0x24, 0x62, 0x23, 0x63, 0x05, 0xd5, 0x02, 0x23, 0x00, 0x22, - 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x9c, 0xf8, 0x63, 0x6e, 0xda, 0x07, - 0xc4, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0xc1, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, - 0x3c, 0xfb, 0xbd, 0xe7, 0x29, 0xb7, 0x01, 0x08, 0x4f, 0xb7, 0x01, 0x08, - 0x87, 0xb7, 0x01, 0x08, 0xab, 0xb7, 0x01, 0x08, 0x02, 0x4b, 0x0a, 0x46, - 0x01, 0x46, 0x18, 0x68, 0xff, 0xf7, 0xa6, 0xbf, 0x10, 0x03, 0x00, 0x24, - 0x2d, 0xe9, 0xf7, 0x4f, 0x1f, 0x46, 0x13, 0x46, 0x7b, 0x43, 0x0c, 0x9c, - 0x06, 0x46, 0x8a, 0x46, 0x91, 0x46, 0x9b, 0x46, 0x5f, 0xd0, 0x18, 0xb1, - 0x83, 0x69, 0x0b, 0xb9, 0xff, 0xf7, 0x16, 0xff, 0x2e, 0x4b, 0x9c, 0x42, - 0x28, 0xd1, 0x74, 0x68, 0x63, 0x6e, 0xdb, 0x07, 0x05, 0xd4, 0xa3, 0x89, - 0x9d, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x0c, 0xfb, 0x63, 0x68, - 0x00, 0x2b, 0x01, 0xda, 0x00, 0x23, 0x63, 0x60, 0xd8, 0x46, 0xd4, 0xe9, - 0x00, 0x15, 0x45, 0x45, 0x1e, 0xd3, 0x42, 0x46, 0x50, 0x46, 0x00, 0xf0, - 0xc7, 0xfb, 0x60, 0x68, 0x21, 0x68, 0x63, 0x6e, 0xa0, 0xeb, 0x08, 0x00, - 0x41, 0x44, 0xda, 0x07, 0x60, 0x60, 0x21, 0x60, 0x2f, 0xd4, 0xa3, 0x89, - 0x9b, 0x05, 0x2c, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0xf0, 0xfa, 0x28, 0xe0, - 0x19, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xb4, 0x68, 0xd2, 0xe7, 0x18, 0x4b, - 0x9c, 0x42, 0x08, 0xbf, 0xf4, 0x68, 0xcd, 0xe7, 0x2a, 0x46, 0x50, 0x46, - 0x00, 0xf0, 0xa8, 0xfb, 0x23, 0x68, 0x2b, 0x44, 0x23, 0x60, 0x21, 0x46, - 0xa8, 0xeb, 0x05, 0x03, 0x30, 0x46, 0x01, 0x93, 0x00, 0xf0, 0xb0, 0xfc, - 0xaa, 0x44, 0x01, 0x9b, 0x88, 0xb1, 0x63, 0x6e, 0xd8, 0x07, 0x05, 0xd4, - 0xa3, 0x89, 0x99, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0xcb, 0xfa, - 0x5d, 0x44, 0xa5, 0xeb, 0x08, 0x03, 0xb3, 0xfb, 0xf9, 0xf7, 0x38, 0x46, - 0x03, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x98, 0x46, 0xb7, 0xe7, 0x1f, 0x46, - 0xf7, 0xe7, 0x00, 0xbf, 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, - 0x14, 0xd2, 0x01, 0x08, 0x07, 0xb5, 0x00, 0x93, 0x13, 0x46, 0x0a, 0x46, - 0x01, 0x46, 0x03, 0x48, 0x00, 0x68, 0xff, 0xf7, 0x83, 0xff, 0x03, 0xb0, - 0x5d, 0xf8, 0x04, 0xfb, 0x10, 0x03, 0x00, 0x24, 0x00, 0xf0, 0x0a, 0xb8, - 0x13, 0x46, 0x0a, 0x46, 0x01, 0x46, 0x02, 0x48, 0x00, 0x68, 0x00, 0xf0, - 0x03, 0xb8, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x41, - 0x0c, 0x46, 0x17, 0x46, 0x1d, 0x46, 0x06, 0x46, 0x18, 0xb1, 0x83, 0x69, - 0x0b, 0xb9, 0xff, 0xf7, 0x8d, 0xfe, 0x51, 0x4b, 0x9c, 0x42, 0x22, 0xd1, - 0x74, 0x68, 0x63, 0x6e, 0xd9, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x9a, 0x05, - 0x02, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0x83, 0xfa, 0xa3, 0x89, 0x03, 0xf4, - 0x84, 0x73, 0xb3, 0xf5, 0x84, 0x7f, 0x03, 0xd1, 0x21, 0x46, 0x30, 0x46, - 0xff, 0xf7, 0xd0, 0xfd, 0xd4, 0xf8, 0x2c, 0x80, 0xb8, 0xf1, 0x00, 0x0f, - 0x13, 0xd1, 0x1d, 0x23, 0x33, 0x60, 0x63, 0x6e, 0xd9, 0x07, 0x78, 0xd5, - 0x4f, 0xf0, 0xff, 0x35, 0x28, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x3f, 0x4b, - 0x9c, 0x42, 0x01, 0xd1, 0xb4, 0x68, 0xd8, 0xe7, 0x3d, 0x4b, 0x9c, 0x42, - 0x08, 0xbf, 0xf4, 0x68, 0xd3, 0xe7, 0x01, 0x2d, 0x36, 0xd0, 0x35, 0xf0, - 0x02, 0x03, 0x62, 0xd1, 0x23, 0x69, 0x1b, 0xb9, 0x21, 0x46, 0x30, 0x46, - 0x00, 0xf0, 0x7c, 0xfa, 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0xa8, 0xfd, - 0x00, 0x28, 0xdc, 0xd1, 0x21, 0x6a, 0x2b, 0x46, 0x3a, 0x46, 0x30, 0x46, - 0xc0, 0x47, 0x01, 0x30, 0xd5, 0xd0, 0x61, 0x6b, 0x41, 0xb1, 0x04, 0xf1, - 0x44, 0x03, 0x99, 0x42, 0x02, 0xd0, 0x30, 0x46, 0xf4, 0xf7, 0x62, 0xfc, - 0x00, 0x23, 0x63, 0x63, 0x23, 0x69, 0x23, 0x60, 0xa3, 0x89, 0x00, 0x26, - 0x23, 0xf4, 0x02, 0x63, 0x66, 0x60, 0xa3, 0x81, 0x08, 0x22, 0x31, 0x46, - 0x04, 0xf1, 0x5c, 0x00, 0x00, 0xf0, 0x06, 0xfb, 0x65, 0x6e, 0x15, 0xf0, - 0x01, 0x05, 0x3b, 0xd1, 0xa3, 0x89, 0x9b, 0x05, 0xba, 0xd4, 0x21, 0xe0, - 0x21, 0x46, 0x30, 0x46, 0xff, 0xf7, 0x7a, 0xfd, 0xa2, 0x89, 0x12, 0xf4, - 0x80, 0x52, 0x0c, 0xd0, 0x65, 0x6d, 0xa3, 0x89, 0x5a, 0x07, 0x19, 0xd5, - 0x63, 0x68, 0xed, 0x1a, 0x63, 0x6b, 0x0b, 0xb1, 0x23, 0x6c, 0xed, 0x1a, - 0x2f, 0x44, 0x00, 0x25, 0xb6, 0xe7, 0x2b, 0x46, 0x21, 0x6a, 0x30, 0x46, - 0xc0, 0x47, 0x43, 0x1c, 0x05, 0x46, 0xec, 0xd1, 0x63, 0x6e, 0xd8, 0x07, - 0x98, 0xd4, 0xa3, 0x89, 0x99, 0x05, 0x95, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, - 0x04, 0xfa, 0x93, 0xe7, 0x18, 0x07, 0xe9, 0xd5, 0x23, 0x68, 0x22, 0x69, - 0x00, 0x2b, 0xe5, 0xd0, 0x9b, 0x1a, 0x1d, 0x44, 0xe2, 0xe7, 0x16, 0x23, - 0x82, 0xe7, 0xa3, 0x89, 0x9a, 0x05, 0x83, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, - 0xf2, 0xf9, 0x7f, 0xe7, 0x35, 0x46, 0x7f, 0xe7, 0x34, 0xd2, 0x01, 0x08, - 0x54, 0xd2, 0x01, 0x08, 0x14, 0xd2, 0x01, 0x08, 0x02, 0x4b, 0x01, 0x46, - 0x18, 0x68, 0x00, 0xf0, 0x03, 0xb8, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, - 0x70, 0xb5, 0x0c, 0x46, 0x05, 0x46, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, - 0xff, 0xf7, 0xd4, 0xfd, 0x32, 0x4b, 0x9c, 0x42, 0x14, 0xd1, 0x6c, 0x68, - 0x63, 0x6e, 0xda, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, - 0xa0, 0x6d, 0x00, 0xf0, 0xca, 0xf9, 0xe6, 0x6a, 0xce, 0xb9, 0x1d, 0x23, - 0x2b, 0x60, 0x63, 0x6e, 0xde, 0x07, 0x0d, 0xd5, 0x4f, 0xf0, 0xff, 0x35, - 0x28, 0x46, 0x70, 0xbd, 0x27, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, - 0xe6, 0xe7, 0x26, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xe1, 0xe7, - 0xa3, 0x89, 0x9d, 0x05, 0xee, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, 0xb1, 0xf9, - 0xea, 0xe7, 0xa2, 0x89, 0x02, 0xf0, 0x0c, 0x03, 0x08, 0x2b, 0x19, 0xd1, - 0x23, 0x68, 0xbb, 0xb1, 0x21, 0x69, 0x5b, 0x1a, 0x00, 0x2b, 0x13, 0xdd, - 0xd0, 0x05, 0x11, 0xd5, 0x02, 0x23, 0x00, 0x22, 0x21, 0x6a, 0x28, 0x46, - 0xb0, 0x47, 0x41, 0x1c, 0x05, 0x46, 0x0d, 0xd1, 0x63, 0x6e, 0xda, 0x07, - 0xd2, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0xcf, 0xd4, 0xa0, 0x6d, 0x00, 0xf0, - 0x92, 0xf9, 0xcd, 0xe7, 0x12, 0xf4, 0x80, 0x52, 0x0f, 0xd0, 0x65, 0x6d, - 0xa2, 0x89, 0x56, 0x07, 0x0d, 0xd5, 0x63, 0x68, 0xed, 0x1a, 0x63, 0x6b, - 0x0b, 0xb1, 0x23, 0x6c, 0xed, 0x1a, 0x63, 0x6e, 0xd9, 0x07, 0xbd, 0xd4, - 0x93, 0x05, 0xbb, 0xd4, 0xe8, 0xe7, 0x01, 0x23, 0xda, 0xe7, 0x10, 0x07, - 0xf5, 0xd5, 0x23, 0x68, 0x00, 0x2b, 0xf2, 0xd0, 0x21, 0x69, 0x5b, 0x1a, - 0x1d, 0x44, 0xee, 0xe7, 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, - 0x14, 0xd2, 0x01, 0x08, 0x2d, 0xe9, 0xf0, 0x41, 0x0f, 0x46, 0x00, 0xf1, - 0x48, 0x04, 0x00, 0x26, 0xd4, 0xe9, 0x01, 0x85, 0xb8, 0xf1, 0x01, 0x08, - 0x05, 0xd5, 0x24, 0x68, 0x00, 0x2c, 0xf7, 0xd1, 0x30, 0x46, 0xbd, 0xe8, - 0xf0, 0x81, 0xab, 0x89, 0x01, 0x2b, 0x06, 0xd9, 0xb5, 0xf9, 0x0e, 0x30, - 0x01, 0x33, 0x02, 0xd0, 0x28, 0x46, 0xb8, 0x47, 0x06, 0x43, 0x68, 0x35, - 0xea, 0xe7, 0x2d, 0xe9, 0xf8, 0x43, 0x06, 0x46, 0x88, 0x46, 0x00, 0xf1, - 0x48, 0x04, 0x00, 0x27, 0xd4, 0xe9, 0x01, 0x95, 0xb9, 0xf1, 0x01, 0x09, - 0x05, 0xd5, 0x24, 0x68, 0x00, 0x2c, 0xf7, 0xd1, 0x38, 0x46, 0xbd, 0xe8, - 0xf8, 0x83, 0xab, 0x89, 0x01, 0x2b, 0x07, 0xd9, 0xb5, 0xf9, 0x0e, 0x30, - 0x01, 0x33, 0x03, 0xd0, 0x29, 0x46, 0x30, 0x46, 0xc0, 0x47, 0x07, 0x43, - 0x68, 0x35, 0xe9, 0xe7, 0x70, 0xb5, 0x0d, 0x4d, 0x0d, 0x4c, 0x64, 0x1b, - 0xa4, 0x10, 0x00, 0x26, 0xa6, 0x42, 0x09, 0xd1, 0x0b, 0x4d, 0x0c, 0x4c, - 0x02, 0xf0, 0x02, 0xf9, 0x64, 0x1b, 0xa4, 0x10, 0x00, 0x26, 0xa6, 0x42, - 0x05, 0xd1, 0x70, 0xbd, 0x55, 0xf8, 0x04, 0x3b, 0x98, 0x47, 0x01, 0x36, - 0xee, 0xe7, 0x55, 0xf8, 0x04, 0x3b, 0x98, 0x47, 0x01, 0x36, 0xf2, 0xe7, - 0xe0, 0x03, 0x00, 0x24, 0xe0, 0x03, 0x00, 0x24, 0xe0, 0x03, 0x00, 0x24, - 0xe8, 0x03, 0x00, 0x24, 0x38, 0xb5, 0x07, 0x4b, 0x1d, 0x68, 0xeb, 0x6b, - 0x04, 0x46, 0x1b, 0xb9, 0x24, 0x20, 0x00, 0xf0, 0x69, 0xf9, 0xe8, 0x63, - 0xe9, 0x6b, 0x20, 0x46, 0xbd, 0xe8, 0x38, 0x40, 0x00, 0xf0, 0x02, 0xb8, - 0x10, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf3, 0x41, 0x07, 0x46, 0x01, 0x91, - 0x00, 0xf0, 0x90, 0xfe, 0x01, 0x99, 0x80, 0x46, 0x38, 0x46, 0x00, 0xf0, - 0x8f, 0xfe, 0x43, 0x69, 0x9a, 0x07, 0x04, 0x46, 0x03, 0xf2, 0x6c, 0x76, - 0x05, 0xd1, 0x64, 0x22, 0x96, 0xfb, 0xf2, 0xf3, 0x02, 0xfb, 0x13, 0x63, - 0x7b, 0xbb, 0x4f, 0xf4, 0xc8, 0x73, 0x96, 0xfb, 0xf3, 0xf5, 0x03, 0xfb, - 0x15, 0x65, 0xb5, 0xfa, 0x85, 0xf5, 0x6d, 0x09, 0x68, 0x4b, 0x30, 0x22, - 0x02, 0xfb, 0x05, 0x35, 0x00, 0xf0, 0x36, 0xfc, 0x00, 0xf0, 0x40, 0xfc, - 0x65, 0x4b, 0x1b, 0x68, 0x53, 0xb3, 0xd8, 0xf8, 0x04, 0x30, 0xb3, 0x42, - 0x19, 0xd1, 0xd8, 0xf8, 0x00, 0x10, 0xd7, 0xe9, 0x00, 0x67, 0xd8, 0xe9, - 0x08, 0x23, 0xd1, 0xb9, 0x96, 0x42, 0x77, 0xeb, 0x03, 0x03, 0x23, 0xda, - 0xd8, 0xe9, 0x12, 0x23, 0x96, 0x42, 0x77, 0xeb, 0x03, 0x03, 0xb4, 0xbf, - 0x01, 0x23, 0x00, 0x23, 0x23, 0x62, 0x1b, 0xdb, 0xd8, 0xf8, 0x28, 0x10, - 0x1a, 0xe0, 0x01, 0x25, 0xd6, 0xe7, 0x30, 0x46, 0x00, 0xf0, 0x68, 0xfb, - 0x00, 0x28, 0xe0, 0xd1, 0x4f, 0xf0, 0xff, 0x33, 0x04, 0xe0, 0x96, 0x42, - 0x77, 0xeb, 0x03, 0x03, 0x02, 0xda, 0x00, 0x23, 0x23, 0x62, 0xeb, 0xe7, - 0xd8, 0xe9, 0x12, 0x23, 0x96, 0x42, 0x77, 0xeb, 0x03, 0x03, 0xf6, 0xda, - 0x01, 0x23, 0x23, 0x62, 0xd8, 0xf8, 0x50, 0x10, 0x4f, 0xf4, 0x61, 0x63, - 0x3c, 0x20, 0x91, 0xfb, 0xf3, 0xf6, 0x03, 0xfb, 0x16, 0x13, 0x61, 0x68, - 0x93, 0xfb, 0xf0, 0xf2, 0x00, 0xfb, 0x12, 0x30, 0x23, 0x68, 0x89, 0x1a, - 0xa2, 0x68, 0x61, 0x60, 0x1b, 0x1a, 0x92, 0x1b, 0x3b, 0x2b, 0x23, 0x60, - 0xa2, 0x60, 0x35, 0xdd, 0x01, 0x31, 0x61, 0x60, 0x3c, 0x3b, 0x23, 0x60, - 0x63, 0x68, 0x3b, 0x2b, 0x34, 0xdd, 0x01, 0x32, 0xa2, 0x60, 0x3c, 0x3b, - 0x63, 0x60, 0xa3, 0x68, 0x17, 0x2b, 0x33, 0xdd, 0xe2, 0x69, 0x01, 0x32, - 0xe2, 0x61, 0xa2, 0x69, 0x01, 0x32, 0x06, 0x2a, 0xc8, 0xbf, 0x00, 0x22, - 0xa2, 0x61, 0xe2, 0x68, 0x18, 0x3b, 0x01, 0x32, 0xa3, 0x60, 0x23, 0x69, - 0xe2, 0x60, 0x55, 0xf8, 0x23, 0x10, 0x8a, 0x42, 0x0e, 0xdd, 0x0b, 0x2b, - 0xa2, 0xeb, 0x01, 0x02, 0xe2, 0x60, 0x03, 0xf1, 0x01, 0x02, 0x09, 0xbf, - 0x63, 0x69, 0x22, 0x61, 0x00, 0x22, 0x01, 0x33, 0x02, 0xbf, 0x22, 0x61, - 0x63, 0x61, 0xe2, 0x61, 0x00, 0xf0, 0xb8, 0xfb, 0x20, 0x46, 0x02, 0xb0, - 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0x2b, 0xcb, 0xda, 0x01, 0x39, 0x61, 0x60, - 0x3c, 0x33, 0xc6, 0xe7, 0x00, 0x2b, 0xcc, 0xda, 0x01, 0x3a, 0xa2, 0x60, - 0x3c, 0x33, 0xc7, 0xe7, 0x00, 0x2b, 0xeb, 0xda, 0xe2, 0x69, 0x01, 0x3a, - 0xe2, 0x61, 0xa2, 0x69, 0x01, 0x3a, 0x48, 0xbf, 0x06, 0x22, 0xa2, 0x61, - 0xe2, 0x68, 0x18, 0x33, 0x01, 0x3a, 0xe2, 0x60, 0xa3, 0x60, 0x00, 0x2a, - 0xdc, 0xd1, 0x23, 0x69, 0x01, 0x3b, 0x05, 0xd4, 0x23, 0x61, 0x23, 0x69, - 0x55, 0xf8, 0x23, 0x30, 0xe3, 0x60, 0xd3, 0xe7, 0x0b, 0x23, 0x23, 0x61, - 0x63, 0x69, 0x5a, 0x1e, 0x62, 0x61, 0x03, 0xf2, 0x6b, 0x72, 0x93, 0x07, - 0x05, 0xd1, 0x64, 0x21, 0x92, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, 0x13, 0x23, - 0x63, 0xb9, 0x4f, 0xf4, 0xc8, 0x71, 0x92, 0xfb, 0xf1, 0xf3, 0x01, 0xfb, - 0x13, 0x23, 0xb3, 0xfa, 0x83, 0xf3, 0x5b, 0x09, 0x03, 0xf5, 0xb6, 0x73, - 0xe3, 0x61, 0xde, 0xe7, 0x01, 0x23, 0xf9, 0xe7, 0x78, 0xd2, 0x01, 0x08, - 0x60, 0xa8, 0x00, 0x24, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, - 0x70, 0x47, 0x70, 0x47, 0x70, 0xb5, 0x0e, 0x46, 0xb1, 0xf9, 0x0e, 0x10, - 0x00, 0x29, 0x96, 0xb0, 0x14, 0x46, 0x1d, 0x46, 0x07, 0xda, 0x00, 0x23, - 0x2b, 0x60, 0xb3, 0x89, 0x1a, 0x06, 0x10, 0xd4, 0x4f, 0xf4, 0x80, 0x63, - 0x0e, 0xe0, 0x6a, 0x46, 0x00, 0xf0, 0x32, 0xfd, 0x00, 0x28, 0xf2, 0xdb, - 0x01, 0x9a, 0x02, 0xf4, 0x70, 0x42, 0xa2, 0xf5, 0x00, 0x53, 0x5a, 0x42, - 0x5a, 0x41, 0x2a, 0x60, 0xee, 0xe7, 0x40, 0x23, 0x00, 0x20, 0x23, 0x60, - 0x16, 0xb0, 0x70, 0xbd, 0x8b, 0x89, 0x73, 0xb5, 0x9d, 0x07, 0x06, 0x46, - 0x0c, 0x46, 0x07, 0xd5, 0x04, 0xf1, 0x47, 0x03, 0x23, 0x60, 0x23, 0x61, - 0x01, 0x23, 0x63, 0x61, 0x02, 0xb0, 0x70, 0xbd, 0x01, 0xab, 0x6a, 0x46, - 0xff, 0xf7, 0xca, 0xff, 0x00, 0x99, 0x05, 0x46, 0x30, 0x46, 0xf4, 0xf7, - 0xe9, 0xf9, 0x48, 0xb9, 0xb4, 0xf9, 0x0c, 0x30, 0x9a, 0x05, 0xef, 0xd4, - 0x23, 0xf0, 0x03, 0x03, 0x43, 0xf0, 0x02, 0x03, 0xa3, 0x81, 0xe3, 0xe7, - 0x0d, 0x4b, 0xb3, 0x62, 0xa3, 0x89, 0x20, 0x60, 0x43, 0xf0, 0x80, 0x03, - 0xa3, 0x81, 0x00, 0x9b, 0x63, 0x61, 0x01, 0x9b, 0x20, 0x61, 0x5b, 0xb1, - 0xb4, 0xf9, 0x0e, 0x10, 0x30, 0x46, 0x00, 0xf0, 0xf7, 0xfd, 0x28, 0xb1, - 0xa3, 0x89, 0x23, 0xf0, 0x03, 0x03, 0x43, 0xf0, 0x01, 0x03, 0xa3, 0x81, - 0xa0, 0x89, 0x05, 0x43, 0xa5, 0x81, 0xcd, 0xe7, 0xd1, 0xa9, 0x01, 0x08, - 0x02, 0x4b, 0x01, 0x46, 0x18, 0x68, 0xf4, 0xf7, 0xbb, 0xb9, 0x00, 0xbf, - 0x10, 0x03, 0x00, 0x24, 0x02, 0x4b, 0x01, 0x46, 0x18, 0x68, 0xf4, 0xf7, - 0xaf, 0xb9, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xf0, 0xff, 0x01, 0x10, 0x2a, 0x2b, 0xdb, 0x10, 0xf0, 0x07, 0x0f, - 0x08, 0xd0, 0x10, 0xf8, 0x01, 0x3b, 0x01, 0x3a, 0x8b, 0x42, 0x2d, 0xd0, - 0x10, 0xf0, 0x07, 0x0f, 0x42, 0xb3, 0xf6, 0xd1, 0xf0, 0xb4, 0x41, 0xea, - 0x01, 0x21, 0x41, 0xea, 0x01, 0x41, 0x22, 0xf0, 0x07, 0x04, 0x7f, 0xf0, - 0x00, 0x07, 0x00, 0x23, 0xf0, 0xe8, 0x02, 0x56, 0x08, 0x3c, 0x85, 0xea, - 0x01, 0x05, 0x86, 0xea, 0x01, 0x06, 0x85, 0xfa, 0x47, 0xf5, 0xa3, 0xfa, - 0x87, 0xf5, 0x86, 0xfa, 0x47, 0xf6, 0xa5, 0xfa, 0x87, 0xf6, 0x8e, 0xb9, - 0xee, 0xd1, 0xf0, 0xbc, 0x01, 0xf0, 0xff, 0x01, 0x02, 0xf0, 0x07, 0x02, - 0x32, 0xb1, 0x10, 0xf8, 0x01, 0x3b, 0x01, 0x3a, 0x83, 0xea, 0x01, 0x03, - 0x13, 0xb1, 0xf8, 0xd1, 0x00, 0x20, 0x70, 0x47, 0x01, 0x38, 0x70, 0x47, - 0x00, 0x2d, 0x06, 0xbf, 0x35, 0x46, 0x03, 0x38, 0x07, 0x38, 0x15, 0xf0, - 0x01, 0x0f, 0x07, 0xd1, 0x01, 0x30, 0x15, 0xf4, 0x80, 0x7f, 0x02, 0xbf, - 0x01, 0x30, 0x15, 0xf4, 0xc0, 0x3f, 0x01, 0x30, 0xf0, 0xbc, 0x01, 0x38, - 0x70, 0x47, 0x00, 0xbf, 0x0a, 0x44, 0x91, 0x42, 0x00, 0xf1, 0xff, 0x33, - 0x00, 0xd1, 0x70, 0x47, 0x10, 0xb5, 0x11, 0xf8, 0x01, 0x4b, 0x03, 0xf8, - 0x01, 0x4f, 0x91, 0x42, 0xf9, 0xd1, 0x10, 0xbd, 0x02, 0x44, 0x03, 0x46, - 0x93, 0x42, 0x00, 0xd1, 0x70, 0x47, 0x03, 0xf8, 0x01, 0x1b, 0xf9, 0xe7, - 0x13, 0xb5, 0x4a, 0x43, 0x11, 0x46, 0x01, 0x92, 0xf4, 0xf7, 0x42, 0xf9, - 0x04, 0x46, 0x18, 0xb1, 0x01, 0x9a, 0x00, 0x21, 0xff, 0xf7, 0xec, 0xff, - 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, 0x00, 0x00, 0x37, 0xb5, 0x00, 0x29, - 0x48, 0xd0, 0x51, 0xf8, 0x04, 0x3c, 0x01, 0x90, 0x00, 0x2b, 0xa1, 0xf1, - 0x04, 0x04, 0xb8, 0xbf, 0xe4, 0x18, 0xf3, 0xf7, 0x49, 0xff, 0x20, 0x4a, - 0x01, 0x98, 0x13, 0x68, 0x15, 0x46, 0x33, 0xb9, 0x63, 0x60, 0x14, 0x60, - 0x03, 0xb0, 0xbd, 0xe8, 0x30, 0x40, 0xf3, 0xf7, 0x37, 0xbf, 0xa3, 0x42, - 0x0b, 0xd9, 0x21, 0x68, 0x62, 0x18, 0x93, 0x42, 0x04, 0xbf, 0x1a, 0x68, - 0x5b, 0x68, 0x63, 0x60, 0x04, 0xbf, 0x52, 0x18, 0x22, 0x60, 0x2c, 0x60, - 0xec, 0xe7, 0x1a, 0x46, 0x5b, 0x68, 0x0b, 0xb1, 0xa3, 0x42, 0xfa, 0xd9, - 0x11, 0x68, 0x55, 0x18, 0xa5, 0x42, 0x0b, 0xd1, 0x24, 0x68, 0x21, 0x44, - 0x54, 0x18, 0xa3, 0x42, 0x11, 0x60, 0xdd, 0xd1, 0x1c, 0x68, 0x5b, 0x68, - 0x53, 0x60, 0x21, 0x44, 0x11, 0x60, 0xd7, 0xe7, 0x02, 0xd9, 0x0c, 0x23, - 0x03, 0x60, 0xd3, 0xe7, 0x25, 0x68, 0x61, 0x19, 0x8b, 0x42, 0x04, 0xbf, - 0x19, 0x68, 0x5b, 0x68, 0x63, 0x60, 0x04, 0xbf, 0x49, 0x19, 0x21, 0x60, - 0x54, 0x60, 0xc7, 0xe7, 0x03, 0xb0, 0x30, 0xbd, 0x3c, 0xa8, 0x00, 0x24, - 0xf8, 0xb5, 0xcd, 0x1c, 0x25, 0xf0, 0x03, 0x05, 0x08, 0x35, 0x0c, 0x2d, - 0x38, 0xbf, 0x0c, 0x25, 0x00, 0x2d, 0x06, 0x46, 0x01, 0xdb, 0xa9, 0x42, - 0x03, 0xd9, 0x0c, 0x23, 0x33, 0x60, 0x00, 0x20, 0xf8, 0xbd, 0xf3, 0xf7, - 0xf3, 0xfe, 0x21, 0x49, 0x0a, 0x68, 0x14, 0x46, 0x9c, 0xb9, 0x20, 0x4f, - 0x3b, 0x68, 0x23, 0xb9, 0x21, 0x46, 0x30, 0x46, 0x00, 0xf0, 0x08, 0xf9, - 0x38, 0x60, 0x29, 0x46, 0x30, 0x46, 0x00, 0xf0, 0x03, 0xf9, 0x43, 0x1c, - 0x23, 0xd1, 0x0c, 0x23, 0x33, 0x60, 0x30, 0x46, 0xf3, 0xf7, 0xd6, 0xfe, - 0xe3, 0xe7, 0x23, 0x68, 0x5b, 0x1b, 0x17, 0xd4, 0x0b, 0x2b, 0x03, 0xd9, - 0x23, 0x60, 0x1c, 0x44, 0x25, 0x60, 0x04, 0xe0, 0x63, 0x68, 0xa2, 0x42, - 0x0c, 0xbf, 0x0b, 0x60, 0x53, 0x60, 0x30, 0x46, 0xf3, 0xf7, 0xc4, 0xfe, - 0x04, 0xf1, 0x0b, 0x00, 0x23, 0x1d, 0x20, 0xf0, 0x07, 0x00, 0xc2, 0x1a, - 0xcc, 0xd0, 0x1b, 0x1a, 0xa3, 0x50, 0xc9, 0xe7, 0x22, 0x46, 0x64, 0x68, - 0xcc, 0xe7, 0xc4, 0x1c, 0x24, 0xf0, 0x03, 0x04, 0xa0, 0x42, 0xe3, 0xd0, - 0x21, 0x1a, 0x30, 0x46, 0x00, 0xf0, 0xd4, 0xf8, 0x01, 0x30, 0xdd, 0xd1, - 0xcf, 0xe7, 0x00, 0xbf, 0x3c, 0xa8, 0x00, 0x24, 0x40, 0xa8, 0x00, 0x24, - 0xf8, 0xb5, 0x07, 0x46, 0x14, 0x46, 0x0e, 0x46, 0x21, 0xb9, 0xbd, 0xe8, - 0xf8, 0x40, 0x11, 0x46, 0xf4, 0xf7, 0x84, 0xb8, 0x22, 0xb9, 0xf4, 0xf7, - 0x7d, 0xf8, 0x25, 0x46, 0x28, 0x46, 0xf8, 0xbd, 0x00, 0xf0, 0xc8, 0xfc, - 0xa0, 0x42, 0x0f, 0xd2, 0x21, 0x46, 0x38, 0x46, 0xf4, 0xf7, 0x76, 0xf8, - 0x05, 0x46, 0x00, 0x28, 0xf2, 0xd0, 0x31, 0x46, 0x22, 0x46, 0xff, 0xf7, - 0x11, 0xff, 0x31, 0x46, 0x38, 0x46, 0xf4, 0xf7, 0x67, 0xf8, 0xe9, 0xe7, - 0x35, 0x46, 0xe7, 0xe7, 0x38, 0xb5, 0x07, 0x4d, 0x04, 0x46, 0x08, 0x46, - 0x11, 0x46, 0x00, 0x22, 0x2a, 0x60, 0x1a, 0x46, 0xf4, 0xf7, 0xe2, 0xfe, - 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, - 0x78, 0xa8, 0x00, 0x24, 0x83, 0x89, 0x03, 0xf0, 0x09, 0x03, 0x09, 0x2b, - 0x01, 0xd1, 0xff, 0xf7, 0xbb, 0xb9, 0x00, 0x20, 0x70, 0x47, 0x00, 0x00, - 0xf8, 0xb5, 0x0c, 0x46, 0x05, 0x46, 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, - 0xff, 0xf7, 0x1a, 0xfa, 0x3b, 0x4b, 0x9c, 0x42, 0x0a, 0xd1, 0x6c, 0x68, - 0xb4, 0xf9, 0x0c, 0x20, 0x00, 0x23, 0x63, 0x60, 0xa3, 0x89, 0x9e, 0x06, - 0x0c, 0xd5, 0x4f, 0xf0, 0xff, 0x30, 0x66, 0xe0, 0x35, 0x4b, 0x9c, 0x42, - 0x01, 0xd1, 0xac, 0x68, 0xf0, 0xe7, 0x34, 0x4b, 0x9c, 0x42, 0x08, 0xbf, - 0xec, 0x68, 0xeb, 0xe7, 0x58, 0x07, 0x48, 0xd4, 0xd9, 0x06, 0x05, 0xd4, - 0x09, 0x23, 0x2b, 0x60, 0x42, 0xf0, 0x40, 0x03, 0xa3, 0x81, 0xe8, 0xe7, - 0x1a, 0x07, 0x0b, 0xd5, 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x4c, 0xf9, - 0x00, 0x28, 0xe0, 0xd1, 0xa3, 0x89, 0xa0, 0x60, 0x23, 0xf0, 0x08, 0x03, - 0xa3, 0x81, 0xa0, 0x61, 0xa3, 0x89, 0x43, 0xf0, 0x04, 0x03, 0xa3, 0x81, - 0x23, 0x69, 0x1b, 0xb9, 0x21, 0x46, 0x28, 0x46, 0xff, 0xf7, 0x0a, 0xfe, - 0xa6, 0x89, 0xb4, 0xf9, 0x0c, 0x70, 0xb3, 0x07, 0x0f, 0xd0, 0x01, 0x23, - 0xa3, 0x81, 0x1e, 0x4b, 0x1e, 0x49, 0x18, 0x68, 0x06, 0xf0, 0x09, 0x06, - 0xff, 0xf7, 0x6a, 0xfc, 0x09, 0x2e, 0xa7, 0x81, 0x03, 0xd1, 0x21, 0x46, - 0x28, 0x46, 0xff, 0xf7, 0x9f, 0xf8, 0x22, 0x69, 0x66, 0x6a, 0x63, 0x69, - 0x21, 0x6a, 0x22, 0x60, 0x28, 0x46, 0xb0, 0x47, 0x00, 0x28, 0x60, 0x60, - 0x1c, 0xdc, 0xb4, 0xf9, 0x0c, 0x30, 0x17, 0xbf, 0x00, 0x22, 0x43, 0xf0, - 0x20, 0x03, 0x62, 0x60, 0x43, 0xf0, 0x40, 0x03, 0xbc, 0xe7, 0x61, 0x6b, - 0x00, 0x29, 0xcd, 0xd0, 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, 0x02, 0xd0, - 0x28, 0x46, 0xf3, 0xf7, 0xd3, 0xff, 0x23, 0x6c, 0x63, 0x60, 0x00, 0x20, - 0x60, 0x63, 0x00, 0x2b, 0xc0, 0xd0, 0xe3, 0x6b, 0x23, 0x60, 0xf8, 0xbd, - 0x00, 0x20, 0xfc, 0xe7, 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, - 0x14, 0xd2, 0x01, 0x08, 0x74, 0xd2, 0x01, 0x08, 0xe1, 0xb5, 0x01, 0x08, - 0x38, 0xb5, 0x06, 0x4d, 0x00, 0x23, 0x04, 0x46, 0x08, 0x46, 0x2b, 0x60, - 0xf3, 0xf7, 0xe0, 0xfd, 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, - 0x23, 0x60, 0x38, 0xbd, 0x78, 0xa8, 0x00, 0x24, 0x10, 0xb5, 0x0c, 0x46, - 0xb1, 0xf9, 0x0e, 0x10, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x28, 0xab, 0xbf, - 0x63, 0x6d, 0xa3, 0x89, 0x1b, 0x18, 0x23, 0xf4, 0x80, 0x53, 0xac, 0xbf, - 0x63, 0x65, 0xa3, 0x81, 0x10, 0xbd, 0x00, 0x20, 0x70, 0x47, 0x2d, 0xe9, - 0xf0, 0x41, 0x1f, 0x46, 0x8b, 0x89, 0xdb, 0x05, 0x05, 0x46, 0x0c, 0x46, - 0x16, 0x46, 0x05, 0xd5, 0xb1, 0xf9, 0x0e, 0x10, 0x02, 0x23, 0x00, 0x22, - 0x00, 0xf0, 0xca, 0xfb, 0xa3, 0x89, 0xb4, 0xf9, 0x0e, 0x10, 0x23, 0xf4, - 0x80, 0x53, 0xa3, 0x81, 0x32, 0x46, 0x3b, 0x46, 0x28, 0x46, 0xbd, 0xe8, - 0xf0, 0x41, 0x00, 0xf0, 0x4d, 0xba, 0x10, 0xb5, 0x0c, 0x46, 0xb1, 0xf9, - 0x0e, 0x10, 0x00, 0xf0, 0xb7, 0xfb, 0x43, 0x1c, 0xa3, 0x89, 0x15, 0xbf, - 0x60, 0x65, 0x23, 0xf4, 0x80, 0x53, 0x43, 0xf4, 0x80, 0x53, 0xa3, 0x81, - 0x18, 0xbf, 0xa3, 0x81, 0x10, 0xbd, 0xb1, 0xf9, 0x0e, 0x10, 0x00, 0xf0, - 0x49, 0xba, 0x00, 0x00, 0x2d, 0xe9, 0xf7, 0x4f, 0x80, 0x46, 0x00, 0xf0, - 0xdd, 0xfa, 0x40, 0xf2, 0xb1, 0x73, 0x98, 0x45, 0x40, 0xf3, 0x98, 0x80, - 0x6f, 0xf4, 0xf6, 0x63, 0x43, 0x44, 0x9b, 0x10, 0x40, 0xf2, 0x6d, 0x12, - 0xa8, 0xf2, 0xb2, 0x75, 0x02, 0xfb, 0x05, 0x35, 0x6f, 0xf0, 0x63, 0x02, - 0xa8, 0xf2, 0x6d, 0x73, 0x93, 0xfb, 0xf2, 0xf3, 0x1d, 0x44, 0x4f, 0xf4, - 0xc8, 0x73, 0x6f, 0xf4, 0xc8, 0x62, 0x98, 0xfb, 0xf3, 0xf7, 0x03, 0xfb, - 0x17, 0x87, 0x42, 0x44, 0xb7, 0xfa, 0x87, 0xfc, 0xb2, 0xfb, 0xf3, 0xf2, - 0x08, 0xf0, 0x03, 0x03, 0x15, 0x44, 0x64, 0x22, 0xc0, 0xf8, 0x04, 0x80, - 0x98, 0xfb, 0xf2, 0xf6, 0x4f, 0xea, 0x5c, 0x1c, 0x02, 0xfb, 0x16, 0x86, - 0x04, 0x46, 0x00, 0xf1, 0x50, 0x0b, 0x00, 0x93, 0x4f, 0xf0, 0x07, 0x0e, - 0x22, 0x7a, 0x63, 0x69, 0x4a, 0x2a, 0x28, 0xd1, 0x00, 0x99, 0xea, 0x18, - 0x01, 0xb9, 0x06, 0xb9, 0x0f, 0xbb, 0x3b, 0x2b, 0xd4, 0xbf, 0x00, 0x23, - 0x01, 0x23, 0x13, 0x44, 0x5a, 0x1e, 0xa3, 0x69, 0x2c, 0x49, 0x01, 0xfb, - 0x02, 0x32, 0xa3, 0x6a, 0x13, 0x44, 0x1a, 0x46, 0xdb, 0x17, 0xc4, 0xe9, - 0x08, 0x23, 0x28, 0x34, 0xa3, 0x45, 0xe3, 0xd1, 0xd0, 0xe9, 0x08, 0x45, - 0xd0, 0xe9, 0x12, 0x23, 0x94, 0x42, 0x75, 0xeb, 0x03, 0x03, 0xb4, 0xbf, - 0x01, 0x23, 0x00, 0x23, 0x03, 0x60, 0x01, 0x20, 0x03, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x00, 0x23, 0xdf, 0xe7, 0x44, 0x2a, 0x01, 0xd1, 0xea, 0x18, - 0xdd, 0xe7, 0x00, 0x9a, 0x72, 0xbb, 0x00, 0x2e, 0x0c, 0xbf, 0xe0, 0x46, - 0x4f, 0xf0, 0x01, 0x08, 0x19, 0x49, 0xe2, 0x68, 0x01, 0x92, 0x4f, 0xf0, - 0x30, 0x0a, 0x0a, 0xfb, 0x08, 0x18, 0x2a, 0x46, 0x4f, 0xf0, 0x00, 0x09, - 0xa8, 0xf1, 0x04, 0x08, 0x01, 0x99, 0x09, 0xf1, 0x01, 0x09, 0x49, 0x45, - 0x58, 0xf8, 0x29, 0xa0, 0x18, 0xdc, 0x02, 0xf1, 0x04, 0x08, 0x98, 0xfb, - 0xfe, 0xf9, 0xc9, 0xeb, 0xc9, 0x09, 0xa8, 0xeb, 0x09, 0x09, 0xb3, 0xeb, - 0x09, 0x09, 0x23, 0x69, 0x03, 0xf1, 0xff, 0x33, 0x48, 0xbf, 0x09, 0xf1, - 0x07, 0x09, 0xc3, 0xeb, 0xc3, 0x03, 0x4b, 0x44, 0x53, 0x45, 0x05, 0xda, - 0x1a, 0x44, 0xac, 0xe7, 0xe0, 0x46, 0xd3, 0xe7, 0x52, 0x44, 0xdd, 0xe7, - 0x07, 0x3b, 0xf5, 0xe7, 0x00, 0x20, 0xbd, 0xe7, 0x80, 0x51, 0x01, 0x00, - 0x78, 0xd2, 0x01, 0x08, 0x01, 0x48, 0xff, 0xf7, 0x99, 0xbc, 0x00, 0xbf, - 0x73, 0xa8, 0x00, 0x24, 0x01, 0x48, 0xff, 0xf7, 0x95, 0xbc, 0x00, 0xbf, - 0x73, 0xa8, 0x00, 0x24, 0x01, 0x4b, 0x18, 0x68, 0x00, 0xf0, 0x02, 0xb8, - 0x10, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf0, 0x4f, 0x8d, 0xb0, 0x07, 0x46, - 0x00, 0xf0, 0x22, 0xfa, 0xae, 0x49, 0xaf, 0x4e, 0x05, 0x46, 0x38, 0x46, - 0x00, 0xf0, 0x14, 0xfa, 0x04, 0x46, 0x70, 0xb9, 0xac, 0x4b, 0xad, 0x4a, - 0x18, 0x60, 0xad, 0x4b, 0x18, 0x60, 0xad, 0x4b, 0x30, 0x68, 0xc3, 0xe9, - 0x00, 0x22, 0xff, 0xf7, 0xe1, 0xfc, 0x34, 0x60, 0x0d, 0xb0, 0xbd, 0xe8, - 0xf0, 0x8f, 0x31, 0x68, 0x00, 0x29, 0x5f, 0xd1, 0x30, 0x68, 0xff, 0xf7, - 0xd7, 0xfc, 0x20, 0x46, 0x00, 0xf0, 0x30, 0xfb, 0x41, 0x1c, 0x38, 0x46, - 0xf3, 0xf7, 0x88, 0xfe, 0x30, 0x60, 0x00, 0x28, 0x57, 0xd1, 0x23, 0x78, - 0xa0, 0x4a, 0xa1, 0x49, 0x3a, 0x2b, 0x08, 0xbf, 0x01, 0x34, 0x0a, 0xae, - 0x33, 0x46, 0x20, 0x46, 0x00, 0xf0, 0xe0, 0xfa, 0x00, 0x28, 0xdf, 0xdd, - 0x0a, 0x9b, 0xe7, 0x18, 0xe3, 0x5c, 0x2d, 0x2b, 0x49, 0xd1, 0x01, 0x37, - 0x4f, 0xf0, 0xff, 0x34, 0x0d, 0xf1, 0x20, 0x0a, 0x0d, 0xf1, 0x1e, 0x0b, - 0x4f, 0xf0, 0x00, 0x08, 0xcd, 0xe9, 0x01, 0x6a, 0x94, 0x49, 0x03, 0x96, - 0xcd, 0xf8, 0x00, 0xb0, 0x33, 0x46, 0x07, 0xaa, 0x38, 0x46, 0xad, 0xf8, - 0x1e, 0x80, 0xad, 0xf8, 0x20, 0x80, 0x00, 0xf0, 0xc1, 0xfa, 0x40, 0x45, - 0xc0, 0xdd, 0xbd, 0xf8, 0x1e, 0x30, 0xbd, 0xf8, 0x20, 0x20, 0xdf, 0xf8, - 0x38, 0x92, 0x3c, 0x21, 0x01, 0xfb, 0x03, 0x22, 0xbd, 0xf8, 0x1c, 0x30, - 0x4f, 0xf4, 0x61, 0x61, 0x01, 0xfb, 0x03, 0x23, 0x5c, 0x43, 0xac, 0x62, - 0x81, 0x4c, 0x82, 0x4b, 0x23, 0x60, 0x0a, 0x9b, 0x81, 0x49, 0x1f, 0x44, - 0x4a, 0x46, 0x33, 0x46, 0x38, 0x46, 0x00, 0xf0, 0xa3, 0xfa, 0x40, 0x45, - 0x16, 0xdc, 0x23, 0x68, 0x63, 0x60, 0x77, 0x4b, 0xaa, 0x6a, 0x1a, 0x60, - 0x77, 0x4b, 0xc3, 0xf8, 0x00, 0x80, 0x99, 0xe7, 0x00, 0xf0, 0xc2, 0xfa, - 0x00, 0x28, 0x9b, 0xd1, 0x94, 0xe7, 0x21, 0x46, 0x00, 0xf0, 0xc6, 0xfa, - 0xa3, 0xe7, 0x2b, 0x2b, 0x08, 0xbf, 0x01, 0x37, 0x01, 0x24, 0xb3, 0xe7, - 0x0a, 0x9b, 0xc4, 0xf8, 0x04, 0x90, 0xfc, 0x18, 0xfb, 0x5c, 0x2d, 0x2b, - 0x40, 0xf0, 0x8b, 0x80, 0x01, 0x34, 0x4f, 0xf0, 0xff, 0x37, 0x00, 0x23, - 0xad, 0xf8, 0x1c, 0x30, 0xad, 0xf8, 0x1e, 0x30, 0xad, 0xf8, 0x20, 0x30, - 0x0a, 0x93, 0xcd, 0xe9, 0x02, 0xa6, 0xcd, 0xe9, 0x00, 0xb6, 0x67, 0x49, - 0x33, 0x46, 0x07, 0xaa, 0x20, 0x46, 0x00, 0xf0, 0x6d, 0xfa, 0x00, 0x28, - 0x78, 0xdc, 0xaf, 0x6a, 0xa7, 0xf5, 0x61, 0x67, 0x0a, 0x9b, 0x2f, 0x65, - 0x1c, 0x44, 0x2f, 0x46, 0x4f, 0xf0, 0x00, 0x09, 0x23, 0x78, 0x2c, 0x2b, - 0x08, 0xbf, 0x01, 0x34, 0x94, 0xf8, 0x00, 0x80, 0xb8, 0xf1, 0x4d, 0x0f, - 0x78, 0xd1, 0x0d, 0xf1, 0x26, 0x03, 0xcd, 0xe9, 0x01, 0x63, 0x09, 0xab, - 0x00, 0x93, 0x58, 0x49, 0x03, 0x96, 0x33, 0x46, 0x0d, 0xf1, 0x22, 0x02, - 0x20, 0x46, 0x00, 0xf0, 0x4b, 0xfa, 0x03, 0x28, 0x7f, 0xf4, 0x4a, 0xaf, - 0xbd, 0xf8, 0x22, 0x10, 0x4b, 0x1e, 0x0b, 0x2b, 0x3f, 0xf6, 0x44, 0xaf, - 0xbd, 0xf8, 0x24, 0x20, 0x53, 0x1e, 0x04, 0x2b, 0x3f, 0xf6, 0x3e, 0xaf, - 0xbd, 0xf8, 0x26, 0x30, 0x06, 0x2b, 0x3f, 0xf6, 0x39, 0xaf, 0xc7, 0xe9, - 0x03, 0x12, 0x87, 0xf8, 0x08, 0x80, 0x7b, 0x61, 0x0a, 0x9b, 0x04, 0xeb, - 0x03, 0x08, 0x02, 0x23, 0xad, 0xf8, 0x1c, 0x30, 0x00, 0x23, 0xad, 0xf8, - 0x1e, 0x30, 0xad, 0xf8, 0x20, 0x30, 0x0a, 0x93, 0x98, 0xf8, 0x00, 0x30, - 0x2f, 0x2b, 0x09, 0xd1, 0xcd, 0xe9, 0x02, 0xa6, 0xcd, 0xe9, 0x00, 0xb6, - 0x3e, 0x49, 0x33, 0x46, 0x07, 0xaa, 0x40, 0x46, 0x00, 0xf0, 0x18, 0xfa, - 0xbd, 0xf8, 0x1e, 0x30, 0xbd, 0xf8, 0x20, 0x20, 0x3c, 0x21, 0x01, 0xfb, - 0x03, 0x22, 0xbd, 0xf8, 0x1c, 0x30, 0x4f, 0xf4, 0x61, 0x61, 0x01, 0xfb, - 0x03, 0x23, 0xbb, 0x61, 0x0a, 0x9c, 0x28, 0x37, 0x44, 0x44, 0xb9, 0xf1, - 0x00, 0x0f, 0x20, 0xd0, 0x68, 0x68, 0xff, 0xf7, 0x2f, 0xfe, 0x28, 0x4b, - 0xaa, 0x6a, 0x1a, 0x60, 0x2b, 0x6d, 0x9b, 0x1a, 0x27, 0x4a, 0x18, 0xbf, - 0x01, 0x23, 0x13, 0x60, 0xf8, 0xe6, 0x2b, 0x2b, 0x08, 0xbf, 0x01, 0x34, - 0x01, 0x27, 0x72, 0xe7, 0xbd, 0xf8, 0x1e, 0x30, 0xbd, 0xf8, 0x20, 0x20, - 0x3c, 0x21, 0x01, 0xfb, 0x03, 0x22, 0xbd, 0xf8, 0x1c, 0x30, 0x4f, 0xf4, - 0x61, 0x61, 0x01, 0xfb, 0x03, 0x23, 0x5f, 0x43, 0x7a, 0xe7, 0x4f, 0xf0, - 0x01, 0x09, 0x7d, 0xe7, 0xb8, 0xf1, 0x4a, 0x0f, 0x06, 0xbf, 0x01, 0x34, - 0x43, 0x46, 0x44, 0x23, 0x0a, 0x22, 0x0b, 0xa9, 0x20, 0x46, 0x05, 0x93, - 0x00, 0xf0, 0xaa, 0xfa, 0xdd, 0xf8, 0x2c, 0x80, 0x05, 0x9b, 0xad, 0xf8, - 0x26, 0x00, 0xa0, 0x45, 0x14, 0xd1, 0x4d, 0x23, 0xb9, 0xf1, 0x00, 0x0f, - 0x07, 0xd1, 0x2b, 0x72, 0x03, 0x21, 0x02, 0x23, 0xc5, 0xe9, 0x03, 0x13, - 0xc5, 0xf8, 0x14, 0x90, 0x91, 0xe7, 0x85, 0xf8, 0x30, 0x30, 0x0b, 0x22, - 0x01, 0x23, 0xc5, 0xe9, 0x0d, 0x23, 0x00, 0x23, 0xeb, 0x63, 0x88, 0xe7, - 0x80, 0xb2, 0x3b, 0x72, 0x78, 0x61, 0x84, 0xe7, 0xd8, 0xd2, 0x01, 0x08, - 0x5c, 0xa8, 0x00, 0x24, 0x64, 0xa8, 0x00, 0x24, 0xdb, 0xd2, 0x01, 0x08, - 0x60, 0xa8, 0x00, 0x24, 0x74, 0x03, 0x00, 0x24, 0x4f, 0xa8, 0x00, 0x24, - 0xdf, 0xd2, 0x01, 0x08, 0x02, 0xd3, 0x01, 0x08, 0xee, 0xd2, 0x01, 0x08, - 0x01, 0xd3, 0x01, 0x08, 0x44, 0xa8, 0x00, 0x24, 0x38, 0xb5, 0x07, 0x4d, - 0x04, 0x46, 0x08, 0x46, 0x11, 0x46, 0x00, 0x22, 0x2a, 0x60, 0x1a, 0x46, - 0xf4, 0xf7, 0x46, 0xfa, 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, - 0x23, 0x60, 0x38, 0xbd, 0x78, 0xa8, 0x00, 0x24, 0x38, 0xb5, 0x06, 0x4d, - 0x00, 0x23, 0x04, 0x46, 0x08, 0x46, 0x2b, 0x60, 0xf4, 0xf7, 0x8e, 0xfa, - 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, - 0x78, 0xa8, 0x00, 0x24, 0x0b, 0x78, 0x72, 0x2b, 0x30, 0xb5, 0x22, 0xd0, - 0x77, 0x2b, 0x24, 0xd0, 0x61, 0x2b, 0x27, 0xd0, 0x16, 0x23, 0x03, 0x60, - 0x00, 0x20, 0x30, 0xbd, 0x62, 0x2d, 0x12, 0xd0, 0x78, 0x2d, 0x13, 0xd0, - 0x2b, 0x2d, 0x07, 0xd1, 0x20, 0xf0, 0x1c, 0x00, 0x23, 0xf0, 0x03, 0x03, - 0x40, 0xf0, 0x10, 0x00, 0x43, 0xf0, 0x02, 0x03, 0x11, 0xf8, 0x01, 0x5f, - 0x00, 0x2d, 0xed, 0xd1, 0x23, 0x43, 0x13, 0x60, 0xe9, 0xe7, 0x43, 0xf4, - 0x80, 0x33, 0xf5, 0xe7, 0x43, 0xf4, 0x00, 0x63, 0xf2, 0xe7, 0x00, 0x24, - 0x23, 0x46, 0x04, 0x20, 0xee, 0xe7, 0x4f, 0xf4, 0xc0, 0x64, 0x01, 0x23, - 0x08, 0x20, 0xe9, 0xe7, 0x4f, 0xf4, 0x02, 0x74, 0x01, 0x23, 0x4f, 0xf4, - 0x84, 0x70, 0xe3, 0xe7, 0x38, 0xb5, 0x07, 0x4d, 0x00, 0x23, 0x04, 0x46, - 0x08, 0x46, 0x11, 0x46, 0x2b, 0x60, 0xf4, 0xf7, 0x31, 0xf9, 0x43, 0x1c, - 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, 0x00, 0xbf, - 0x78, 0xa8, 0x00, 0x24, 0x2d, 0xe9, 0xf8, 0x4f, 0x07, 0x46, 0x89, 0x46, - 0x16, 0x46, 0xf3, 0xf7, 0xd7, 0xfa, 0x18, 0x4b, 0x1c, 0x68, 0x9a, 0x46, - 0x34, 0xb1, 0x4b, 0x46, 0x98, 0x46, 0x13, 0xf8, 0x01, 0x1b, 0x39, 0xb1, - 0x3d, 0x29, 0xf9, 0xd1, 0x38, 0x46, 0xf3, 0xf7, 0xc3, 0xfa, 0x00, 0x20, - 0xbd, 0xe8, 0xf8, 0x8f, 0xa8, 0xeb, 0x09, 0x08, 0xa3, 0x46, 0x54, 0xf8, - 0x04, 0x0b, 0x00, 0x28, 0xf2, 0xd0, 0x42, 0x46, 0x49, 0x46, 0x00, 0xf0, - 0x55, 0xf9, 0x00, 0x28, 0xf4, 0xd1, 0x54, 0xf8, 0x04, 0x3c, 0x03, 0xeb, - 0x08, 0x05, 0x13, 0xf8, 0x08, 0x30, 0x3d, 0x2b, 0xec, 0xd1, 0xda, 0xf8, - 0x00, 0x30, 0xab, 0xeb, 0x03, 0x03, 0x9b, 0x10, 0x38, 0x46, 0x33, 0x60, - 0xf3, 0xf7, 0xa2, 0xfa, 0x68, 0x1c, 0xdd, 0xe7, 0xd8, 0x03, 0x00, 0x24, - 0x07, 0xb5, 0x01, 0xaa, 0xff, 0xf7, 0xc2, 0xff, 0x03, 0xb0, 0x5d, 0xf8, - 0x04, 0xfb, 0x00, 0x00, 0x00, 0x48, 0x70, 0x47, 0x80, 0x03, 0x00, 0x24, - 0x2d, 0xe9, 0xf0, 0x41, 0xd0, 0xe9, 0x00, 0x67, 0x0c, 0x46, 0x51, 0x4a, - 0x00, 0x23, 0x30, 0x46, 0x39, 0x46, 0x01, 0xf0, 0x53, 0xf8, 0x39, 0x46, - 0x05, 0x46, 0x4d, 0x4a, 0x30, 0x46, 0x00, 0x23, 0x01, 0xf0, 0x4c, 0xf8, - 0x00, 0x2a, 0xbc, 0xbf, 0x02, 0xf5, 0xa8, 0x32, 0x02, 0xf5, 0xc0, 0x72, - 0x4f, 0xf4, 0x61, 0x61, 0x05, 0xf5, 0x2f, 0x20, 0xb2, 0xfb, 0xf1, 0xf3, - 0x01, 0xfb, 0x13, 0x22, 0x4f, 0xf0, 0x3c, 0x01, 0xac, 0xbf, 0x00, 0xf6, - 0x6c, 0x20, 0x00, 0xf6, 0x6b, 0x20, 0xa3, 0x60, 0xb2, 0xfb, 0xf1, 0xf3, - 0x01, 0xfb, 0x13, 0x22, 0x63, 0x60, 0x22, 0x60, 0xc3, 0x1c, 0x07, 0x22, - 0x93, 0xfb, 0xf2, 0xf2, 0xc2, 0xeb, 0xc2, 0x02, 0x9b, 0x1a, 0x48, 0xbf, - 0x07, 0x33, 0x00, 0x28, 0xa3, 0x61, 0xb8, 0xbf, 0xa0, 0xf5, 0x0e, 0x33, - 0x36, 0x49, 0xae, 0xbf, 0x90, 0xfb, 0xf1, 0xf1, 0xa3, 0xf5, 0x2c, 0x73, - 0x93, 0xfb, 0xf1, 0xf1, 0x33, 0x4b, 0x03, 0xfb, 0x01, 0x00, 0x48, 0xf6, - 0xac, 0x62, 0xb0, 0xfb, 0xf2, 0xf2, 0x02, 0x44, 0x40, 0xf2, 0xb4, 0x5c, - 0xb0, 0xfb, 0xfc, 0xf3, 0xd2, 0x1a, 0x40, 0xf2, 0x6d, 0x17, 0x2d, 0x4b, - 0xb0, 0xfb, 0xf3, 0xf3, 0x64, 0x26, 0xd3, 0x1a, 0xb3, 0xfb, 0xf7, 0xf5, - 0xb3, 0xfb, 0xfc, 0xf3, 0xb5, 0xfb, 0xf6, 0xf2, 0xd3, 0x1a, 0x03, 0x44, - 0x07, 0xfb, 0x15, 0x33, 0x99, 0x20, 0x03, 0xeb, 0x83, 0x0c, 0x0c, 0xf1, - 0x02, 0x0c, 0x03, 0xf1, 0x01, 0x0e, 0xbc, 0xfb, 0xf0, 0xf7, 0x78, 0x43, - 0x02, 0x30, 0x4f, 0xf0, 0x05, 0x08, 0xb0, 0xfb, 0xf8, 0xf0, 0xae, 0xeb, - 0x00, 0x00, 0x40, 0xf2, 0xf9, 0x5e, 0xf4, 0x45, 0x94, 0xbf, 0x4f, 0xf0, - 0x02, 0x0c, 0x6f, 0xf0, 0x09, 0x0c, 0x67, 0x44, 0x4f, 0xf4, 0xc8, 0x7c, - 0x0c, 0xfb, 0x01, 0x51, 0x01, 0x2f, 0x98, 0xbf, 0x01, 0x31, 0xb3, 0xf5, - 0x99, 0x7f, 0x0c, 0xd3, 0xa3, 0xf5, 0x99, 0x73, 0xe3, 0x61, 0xa1, 0xf2, - 0x6c, 0x71, 0x00, 0x23, 0xe0, 0x60, 0xc4, 0xe9, 0x04, 0x71, 0x23, 0x62, - 0x20, 0x46, 0xbd, 0xe8, 0xf0, 0x81, 0x15, 0xf0, 0x03, 0x0f, 0x02, 0xd1, - 0x06, 0xfb, 0x12, 0x52, 0x5a, 0xb9, 0x4f, 0xf4, 0xc8, 0x76, 0xb5, 0xfb, - 0xf6, 0xf2, 0x06, 0xfb, 0x12, 0x52, 0xb2, 0xfa, 0x82, 0xf2, 0x52, 0x09, - 0x3b, 0x33, 0x13, 0x44, 0xe2, 0xe7, 0x01, 0x22, 0xfa, 0xe7, 0x00, 0xbf, - 0x80, 0x51, 0x01, 0x00, 0xb1, 0x3a, 0x02, 0x00, 0x4f, 0xc5, 0xfd, 0xff, - 0xb0, 0x3a, 0x02, 0x00, 0x38, 0xb5, 0x06, 0x4d, 0x00, 0x23, 0x04, 0x46, - 0x08, 0x46, 0x2b, 0x60, 0xf4, 0xf7, 0x79, 0xf8, 0x43, 0x1c, 0x02, 0xd1, - 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, 0x78, 0xa8, 0x00, 0x24, - 0x38, 0xb5, 0x07, 0x4d, 0x04, 0x46, 0x08, 0x46, 0x11, 0x46, 0x00, 0x22, - 0x2a, 0x60, 0x1a, 0x46, 0xf4, 0xf7, 0x36, 0xf8, 0x43, 0x1c, 0x02, 0xd1, - 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, 0x78, 0xa8, 0x00, 0x24, - 0x51, 0xf8, 0x04, 0x3c, 0x18, 0x1f, 0x00, 0x2b, 0xbc, 0xbf, 0x0b, 0x58, - 0xc0, 0x18, 0x70, 0x47, 0x38, 0xb5, 0x07, 0x4d, 0x04, 0x46, 0x08, 0x46, - 0x11, 0x46, 0x00, 0x22, 0x2a, 0x60, 0x1a, 0x46, 0xf4, 0xf7, 0x6a, 0xf8, - 0x43, 0x1c, 0x02, 0xd1, 0x2b, 0x68, 0x03, 0xb1, 0x23, 0x60, 0x38, 0xbd, - 0x78, 0xa8, 0x00, 0x24, 0x0e, 0xb4, 0x10, 0xb5, 0x9f, 0xb0, 0x21, 0xac, - 0x4f, 0xf4, 0x01, 0x71, 0x54, 0xf8, 0x04, 0x2b, 0x01, 0x92, 0xad, 0xf8, - 0x1c, 0x10, 0x04, 0x90, 0x08, 0x90, 0x00, 0xf0, 0x2f, 0xf8, 0x0c, 0x4b, - 0x05, 0x90, 0x09, 0x90, 0x0d, 0x93, 0x0b, 0x48, 0x01, 0x9a, 0x00, 0x68, - 0x03, 0x94, 0x00, 0x23, 0x11, 0x93, 0x16, 0x93, 0x4f, 0xf6, 0xff, 0x73, - 0xad, 0xf8, 0x1e, 0x30, 0x04, 0xa9, 0x23, 0x46, 0x00, 0xf0, 0x18, 0xf9, - 0x1f, 0xb0, 0xbd, 0xe8, 0x10, 0x40, 0x03, 0xb0, 0x70, 0x47, 0x00, 0xbf, - 0x4b, 0xb7, 0x01, 0x08, 0x10, 0x03, 0x00, 0x24, 0x10, 0xf8, 0x01, 0x2b, - 0x11, 0xf8, 0x01, 0x3b, 0x01, 0x2a, 0x28, 0xbf, 0x9a, 0x42, 0xf7, 0xd0, - 0xd0, 0x1a, 0x70, 0x47, 0x03, 0x46, 0x11, 0xf8, 0x01, 0x2b, 0x03, 0xf8, - 0x01, 0x2b, 0x00, 0x2a, 0xf9, 0xd1, 0x70, 0x47, 0x03, 0x46, 0x13, 0xf8, - 0x01, 0x2b, 0x00, 0x2a, 0xfb, 0xd1, 0x18, 0x1a, 0x01, 0x38, 0x70, 0x47, - 0x10, 0xb5, 0x6a, 0xb1, 0x01, 0x39, 0x84, 0x18, 0x10, 0xf8, 0x01, 0x3b, - 0x11, 0xf8, 0x01, 0x2f, 0x93, 0x42, 0x03, 0xd1, 0xa0, 0x42, 0x01, 0xd0, - 0x00, 0x2b, 0xf5, 0xd1, 0x98, 0x1a, 0x10, 0xbd, 0x10, 0x46, 0xfc, 0xe7, - 0x2d, 0xe9, 0xf0, 0x43, 0x3b, 0x4e, 0x86, 0x46, 0x8c, 0x46, 0x60, 0x46, - 0x1c, 0xf8, 0x01, 0x4b, 0xa5, 0x5d, 0x15, 0xf0, 0x08, 0x05, 0xf8, 0xd1, - 0x2d, 0x2c, 0x34, 0xd1, 0x9c, 0xf8, 0x00, 0x40, 0x4f, 0xf0, 0x01, 0x08, - 0x00, 0xf1, 0x02, 0x0c, 0x00, 0x2b, 0x5e, 0xd0, 0x10, 0x2b, 0x0c, 0xd1, - 0x30, 0x2c, 0x0a, 0xd1, 0x9c, 0xf8, 0x00, 0x00, 0x00, 0xf0, 0xdf, 0x00, - 0x58, 0x28, 0x4f, 0xd1, 0x9c, 0xf8, 0x01, 0x40, 0x10, 0x23, 0x0c, 0xf1, - 0x02, 0x0c, 0x4f, 0xf0, 0xff, 0x37, 0x00, 0x25, 0xb7, 0xfb, 0xf3, 0xf7, - 0x03, 0xfb, 0x07, 0xf9, 0x6f, 0xea, 0x09, 0x09, 0x28, 0x46, 0xa4, 0xf1, - 0x30, 0x06, 0x09, 0x2e, 0x18, 0xd8, 0x34, 0x46, 0xa3, 0x42, 0x24, 0xdd, - 0x00, 0x2d, 0x1f, 0xdb, 0x87, 0x42, 0x1d, 0xd3, 0x01, 0xd1, 0xa1, 0x45, - 0x1a, 0xdb, 0x00, 0xfb, 0x03, 0x40, 0x01, 0x25, 0x1c, 0xf8, 0x01, 0x4b, - 0xeb, 0xe7, 0x2b, 0x2c, 0x08, 0xbf, 0x9c, 0xf8, 0x00, 0x40, 0xa8, 0x46, - 0x08, 0xbf, 0x00, 0xf1, 0x02, 0x0c, 0xc7, 0xe7, 0xa4, 0xf1, 0x41, 0x06, - 0x19, 0x2e, 0x01, 0xd8, 0x37, 0x3c, 0xe1, 0xe7, 0xa4, 0xf1, 0x61, 0x06, - 0x19, 0x2e, 0x04, 0xd8, 0x57, 0x3c, 0xdb, 0xe7, 0x4f, 0xf0, 0xff, 0x35, - 0xe4, 0xe7, 0x00, 0x2d, 0x07, 0xda, 0x22, 0x23, 0xce, 0xf8, 0x00, 0x30, - 0x4f, 0xf0, 0xff, 0x30, 0x42, 0xb9, 0xbd, 0xe8, 0xf0, 0x83, 0xb8, 0xf1, - 0x00, 0x0f, 0x00, 0xd0, 0x40, 0x42, 0x00, 0x2a, 0xf7, 0xd0, 0x0d, 0xb1, - 0x0c, 0xf1, 0xff, 0x31, 0x11, 0x60, 0xf2, 0xe7, 0x30, 0x24, 0x00, 0x2b, - 0xb1, 0xd1, 0x08, 0x23, 0xaf, 0xe7, 0x30, 0x2c, 0xa2, 0xd0, 0x0a, 0x23, - 0xab, 0xe7, 0x00, 0xbf, 0x15, 0xd3, 0x01, 0x08, 0xff, 0xf7, 0x82, 0xbf, - 0x13, 0x46, 0x0a, 0x46, 0x01, 0x46, 0x02, 0x48, 0x00, 0x68, 0xff, 0xf7, - 0x7b, 0xbf, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, 0x38, 0xb5, 0x4b, 0x1c, - 0x14, 0x46, 0x03, 0xd1, 0x4f, 0xf0, 0xff, 0x35, 0x28, 0x46, 0x38, 0xbd, - 0x93, 0x89, 0x23, 0xf0, 0x20, 0x03, 0x93, 0x81, 0x63, 0x6b, 0x52, 0x68, - 0xcd, 0xb2, 0x8b, 0xb1, 0xa3, 0x6b, 0x93, 0x42, 0x08, 0xdd, 0x23, 0x68, - 0x5a, 0x1e, 0x22, 0x60, 0x03, 0xf8, 0x01, 0x5c, 0x63, 0x68, 0x01, 0x33, - 0x63, 0x60, 0xe9, 0xe7, 0x21, 0x46, 0x00, 0xf0, 0xb5, 0xfb, 0x00, 0x28, - 0xf1, 0xd0, 0xe1, 0xe7, 0x21, 0x69, 0x23, 0x68, 0x51, 0xb1, 0x99, 0x42, - 0x08, 0xd2, 0x13, 0xf8, 0x01, 0x1c, 0xa9, 0x42, 0x04, 0xd1, 0x01, 0x3b, - 0x01, 0x32, 0x23, 0x60, 0x62, 0x60, 0xd5, 0xe7, 0xc4, 0xe9, 0x0f, 0x32, - 0x04, 0xf1, 0x44, 0x03, 0x63, 0x63, 0x03, 0x23, 0xa3, 0x63, 0x23, 0x46, - 0x03, 0xf8, 0x46, 0x5f, 0x23, 0x60, 0x01, 0x23, 0xdc, 0xe7, 0x10, 0xb5, - 0x0c, 0x46, 0x49, 0x6b, 0x69, 0xb1, 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, - 0x01, 0xd0, 0xf3, 0xf7, 0x6f, 0xfa, 0x23, 0x6c, 0x63, 0x60, 0x00, 0x20, - 0x60, 0x63, 0x13, 0xb1, 0xe3, 0x6b, 0x23, 0x60, 0x10, 0xbd, 0x23, 0x69, - 0x23, 0x60, 0x00, 0x23, 0x63, 0x60, 0xa3, 0x89, 0x43, 0xf0, 0x20, 0x03, - 0xa3, 0x81, 0x4f, 0xf0, 0xff, 0x30, 0xf3, 0xe7, 0x2d, 0xe9, 0xf0, 0x4f, - 0x0c, 0x46, 0xad, 0xf5, 0x23, 0x7d, 0x00, 0x21, 0xcd, 0xe9, 0x44, 0x11, - 0xb2, 0x49, 0xa0, 0x91, 0x0d, 0xf1, 0x04, 0x08, 0xb1, 0x49, 0xb2, 0x4f, - 0xdf, 0xf8, 0xc8, 0x92, 0xcd, 0xf8, 0x18, 0x81, 0x06, 0x46, 0xa1, 0x91, - 0x00, 0x93, 0x92, 0xf8, 0x00, 0xa0, 0xba, 0xf1, 0x00, 0x0f, 0x00, 0xf0, - 0x51, 0x81, 0x1a, 0xf8, 0x07, 0x30, 0x13, 0xf0, 0x08, 0x03, 0x02, 0xf1, - 0x01, 0x05, 0x19, 0xd0, 0x63, 0x68, 0x00, 0x2b, 0x0f, 0xdd, 0x23, 0x68, - 0x1a, 0x78, 0xba, 0x5c, 0x12, 0x07, 0x01, 0xd4, 0x2a, 0x46, 0xe8, 0xe7, - 0x45, 0x9a, 0x01, 0x32, 0x45, 0x92, 0x62, 0x68, 0x01, 0x33, 0x01, 0x3a, - 0x62, 0x60, 0x23, 0x60, 0xec, 0xe7, 0xa1, 0x9b, 0x21, 0x46, 0x30, 0x46, - 0x98, 0x47, 0x00, 0x28, 0xe9, 0xd0, 0xed, 0xe7, 0xba, 0xf1, 0x25, 0x0f, - 0x40, 0xf0, 0x83, 0x80, 0x41, 0x93, 0x43, 0x93, 0x53, 0x78, 0x2a, 0x2b, - 0x02, 0xbf, 0x10, 0x23, 0x95, 0x1c, 0x41, 0x93, 0x0a, 0x22, 0xab, 0x46, - 0x1b, 0xf8, 0x01, 0x1b, 0xa1, 0xf1, 0x30, 0x03, 0x09, 0x2b, 0x1d, 0xd9, - 0x91, 0x48, 0x03, 0x22, 0xff, 0xf7, 0x5e, 0xf8, 0x40, 0xb1, 0x01, 0x23, - 0xa0, 0xeb, 0x09, 0x00, 0x03, 0xfa, 0x00, 0xf0, 0x41, 0x9b, 0x18, 0x43, - 0x41, 0x90, 0x5d, 0x46, 0x15, 0xf8, 0x01, 0x3b, 0x78, 0x2b, 0x06, 0xd8, - 0x57, 0x2b, 0x10, 0xd8, 0x25, 0x2b, 0x5c, 0xd0, 0x56, 0xd8, 0x00, 0x2b, - 0x74, 0xd0, 0x03, 0x23, 0x47, 0x93, 0x0a, 0x23, 0x42, 0x93, 0x81, 0xe0, - 0x43, 0x9b, 0x02, 0xfb, 0x03, 0x13, 0x30, 0x3b, 0x43, 0x93, 0x5d, 0x46, - 0xd3, 0xe7, 0xa3, 0xf1, 0x58, 0x02, 0x20, 0x2a, 0xef, 0xd8, 0x01, 0xa1, - 0x51, 0xf8, 0x22, 0xf0, 0x97, 0xc3, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0x9f, 0xc2, 0x01, 0x08, 0xf5, 0xc3, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0x9f, 0xc2, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0x9f, 0xc2, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0x0b, 0xc4, 0x01, 0x08, 0xe1, 0xc3, 0x01, 0x08, 0x4f, 0xc3, 0x01, 0x08, - 0x4f, 0xc3, 0x01, 0x08, 0x4f, 0xc3, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0xe5, 0xc3, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0x9f, 0xc2, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, 0x1b, 0xc4, 0x01, 0x08, - 0xed, 0xc3, 0x01, 0x08, 0x8f, 0xc3, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0x9f, 0xc2, 0x01, 0x08, 0x17, 0xc4, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0xe1, 0xc3, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, 0x9f, 0xc2, 0x01, 0x08, - 0x97, 0xc3, 0x01, 0x08, 0x45, 0x3b, 0x02, 0x2b, 0xa7, 0xd8, 0x05, 0x23, - 0x2b, 0xe0, 0x63, 0x68, 0x00, 0x2b, 0x0d, 0xdd, 0x23, 0x68, 0x1a, 0x78, - 0x52, 0x45, 0x40, 0xf0, 0xa1, 0x80, 0x01, 0x33, 0x62, 0x68, 0x23, 0x60, - 0x45, 0x9b, 0x01, 0x3a, 0x01, 0x33, 0x62, 0x60, 0x45, 0x93, 0x55, 0xe7, - 0xa1, 0x9b, 0x21, 0x46, 0x30, 0x46, 0x98, 0x47, 0x00, 0x28, 0xeb, 0xd0, - 0x44, 0x98, 0x00, 0x28, 0x40, 0xf0, 0x84, 0x80, 0x4f, 0xf0, 0xff, 0x30, - 0x86, 0xe0, 0x41, 0x9a, 0x42, 0xf0, 0x20, 0x02, 0x41, 0x92, 0x41, 0x9a, - 0x42, 0xf4, 0x00, 0x72, 0x41, 0x92, 0x10, 0x22, 0x6f, 0x2b, 0x42, 0x92, - 0x34, 0xbf, 0x03, 0x23, 0x04, 0x23, 0x47, 0x93, 0x63, 0x68, 0x00, 0x2b, - 0x41, 0xdd, 0x41, 0x9b, 0x59, 0x06, 0x04, 0xd4, 0x23, 0x68, 0x1a, 0x78, - 0xba, 0x5c, 0x12, 0x07, 0x40, 0xd4, 0x47, 0x9b, 0x02, 0x2b, 0x4f, 0xdc, - 0x6b, 0x46, 0x22, 0x46, 0x41, 0xa9, 0x30, 0x46, 0x00, 0xf0, 0x74, 0xf8, - 0x01, 0x28, 0x65, 0xd0, 0x02, 0x28, 0x7f, 0xf4, 0x21, 0xaf, 0xcf, 0xe7, - 0x0a, 0x22, 0xdd, 0xe7, 0x00, 0x23, 0x42, 0x93, 0x03, 0x23, 0xde, 0xe7, - 0x08, 0x23, 0x42, 0x93, 0x04, 0x23, 0xda, 0xe7, 0x29, 0x46, 0x40, 0x46, - 0x00, 0xf0, 0xac, 0xf9, 0x41, 0x9b, 0x43, 0xf0, 0x40, 0x03, 0x41, 0x93, - 0x05, 0x46, 0x01, 0x23, 0xcf, 0xe7, 0x41, 0x9b, 0x43, 0xf0, 0x40, 0x03, - 0x41, 0x93, 0x00, 0x23, 0xc9, 0xe7, 0x02, 0x23, 0xc7, 0xe7, 0x41, 0x98, - 0xc3, 0x06, 0x3f, 0xf5, 0xff, 0xae, 0x00, 0x9b, 0x45, 0x9a, 0x19, 0x1d, - 0x00, 0x91, 0x1b, 0x68, 0xc0, 0x07, 0x4c, 0xbf, 0x1a, 0x80, 0x1a, 0x60, - 0xf4, 0xe6, 0xa1, 0x9b, 0x21, 0x46, 0x30, 0x46, 0x98, 0x47, 0x00, 0x28, - 0xb7, 0xd0, 0x9d, 0xe7, 0x45, 0x9a, 0x01, 0x32, 0x45, 0x92, 0x62, 0x68, - 0x01, 0x3a, 0x00, 0x2a, 0x62, 0x60, 0x02, 0xdd, 0x01, 0x33, 0x23, 0x60, - 0xae, 0xe7, 0xa1, 0x9b, 0x21, 0x46, 0x30, 0x46, 0x98, 0x47, 0x00, 0x28, - 0xa8, 0xd0, 0x8b, 0xe7, 0x04, 0x2b, 0x06, 0xdc, 0x6b, 0x46, 0x22, 0x46, - 0x41, 0xa9, 0x30, 0x46, 0x00, 0xf0, 0x7a, 0xf8, 0xac, 0xe7, 0x0f, 0x4b, - 0x00, 0x2b, 0x3f, 0xf4, 0xcf, 0xae, 0x6b, 0x46, 0x22, 0x46, 0x41, 0xa9, - 0x30, 0x46, 0xaf, 0xf3, 0x00, 0x80, 0xa1, 0xe7, 0xa3, 0x89, 0x13, 0xf0, - 0x40, 0x0f, 0x18, 0xbf, 0x4f, 0xf0, 0xff, 0x30, 0x0d, 0xf5, 0x23, 0x7d, - 0xbd, 0xe8, 0xf0, 0x8f, 0x44, 0x98, 0xf9, 0xe7, 0x19, 0xc1, 0x01, 0x08, - 0x93, 0xc1, 0x01, 0x08, 0x15, 0xd3, 0x01, 0x08, 0x15, 0xd4, 0x01, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x2d, 0xe9, 0xf8, 0x43, 0x15, 0x46, 0x8a, 0x68, - 0x80, 0x46, 0x0c, 0x46, 0x32, 0xb9, 0x8a, 0x69, 0x00, 0x2a, 0x0c, 0xbf, - 0x01, 0x22, 0x4f, 0xf0, 0xff, 0x32, 0x8a, 0x60, 0x22, 0x68, 0xdf, 0xf8, - 0x8c, 0x90, 0xd1, 0x06, 0x5f, 0xbf, 0x1a, 0x68, 0x11, 0x1d, 0x19, 0x60, - 0x16, 0x68, 0x00, 0x27, 0xa0, 0x69, 0x88, 0xb1, 0x01, 0x28, 0x07, 0xd1, - 0x2b, 0x68, 0x1a, 0x78, 0x63, 0x69, 0x9b, 0x5c, 0x53, 0xb9, 0x27, 0xbb, - 0xbd, 0xe8, 0xf8, 0x83, 0x02, 0x28, 0x20, 0xd1, 0x2b, 0x68, 0x1b, 0x78, - 0x13, 0xf8, 0x09, 0x30, 0x1b, 0x07, 0x1a, 0xd4, 0x23, 0x68, 0xda, 0x06, - 0x5e, 0xbf, 0x2b, 0x68, 0x1b, 0x78, 0x06, 0xf8, 0x01, 0x3b, 0x2a, 0x68, - 0x6b, 0x68, 0x01, 0x32, 0x2a, 0x60, 0xa2, 0x68, 0x01, 0x3b, 0x01, 0x3a, - 0x6b, 0x60, 0x01, 0x37, 0xa2, 0x60, 0x42, 0xb1, 0x00, 0x2b, 0xd7, 0xdc, - 0xd4, 0xf8, 0x80, 0x31, 0x29, 0x46, 0x40, 0x46, 0x98, 0x47, 0x00, 0x28, - 0xd0, 0xd0, 0x23, 0x68, 0x13, 0xf0, 0x10, 0x03, 0x05, 0xd1, 0xe2, 0x68, - 0x01, 0x32, 0xe2, 0x60, 0xa2, 0x69, 0x02, 0xb1, 0x33, 0x70, 0x23, 0x69, - 0x1f, 0x44, 0x27, 0x61, 0x00, 0x20, 0xcb, 0xe7, 0x15, 0xd3, 0x01, 0x08, - 0x2d, 0xe9, 0xf0, 0x4f, 0x98, 0x46, 0x74, 0x4b, 0x0c, 0x46, 0x82, 0x46, - 0x16, 0x46, 0x93, 0xe8, 0x07, 0x00, 0x87, 0xb0, 0x03, 0xab, 0x83, 0xe8, - 0x07, 0x00, 0x70, 0x4b, 0xa1, 0x69, 0x70, 0x4a, 0x03, 0x29, 0x18, 0xbf, - 0x1a, 0x46, 0xa3, 0x68, 0x01, 0x92, 0x5a, 0x1e, 0xb2, 0xf5, 0xae, 0x7f, - 0x88, 0xbf, 0x6f, 0xf4, 0xae, 0x75, 0x27, 0x46, 0x82, 0xbf, 0x03, 0xeb, - 0x05, 0x09, 0x40, 0xf2, 0x5d, 0x13, 0xa3, 0x60, 0x57, 0xf8, 0x1c, 0x3b, - 0x43, 0xf4, 0x50, 0x63, 0x98, 0xbf, 0x4f, 0xf0, 0x00, 0x09, 0x23, 0x60, - 0x3d, 0x46, 0x4f, 0xf0, 0x00, 0x0b, 0x31, 0x68, 0x03, 0xab, 0x09, 0x78, - 0x53, 0xf8, 0x2b, 0x00, 0x02, 0x22, 0xfe, 0xf7, 0xad, 0xfe, 0x28, 0xb3, - 0xbb, 0xf1, 0x01, 0x0f, 0x59, 0xd1, 0x62, 0x68, 0x2a, 0xb9, 0x22, 0x68, - 0x08, 0x23, 0x42, 0xf4, 0x00, 0x72, 0x63, 0x60, 0x22, 0x60, 0x22, 0x68, - 0x22, 0xf4, 0xa0, 0x62, 0x22, 0x60, 0xa2, 0x68, 0x51, 0x1e, 0xa1, 0x60, - 0x92, 0xb1, 0x32, 0x68, 0x51, 0x1c, 0x31, 0x60, 0x12, 0x78, 0x05, 0xf8, - 0x01, 0x2b, 0x72, 0x68, 0x01, 0x3a, 0x00, 0x2a, 0x72, 0x60, 0x07, 0xdc, - 0xd4, 0xf8, 0x80, 0x21, 0x31, 0x46, 0x50, 0x46, 0x90, 0x47, 0x00, 0x28, - 0x40, 0xf0, 0x85, 0x80, 0x0b, 0xf1, 0x01, 0x0b, 0xbb, 0xf1, 0x03, 0x0f, - 0xcb, 0xd1, 0x63, 0x68, 0x0b, 0xb9, 0x0a, 0x23, 0x63, 0x60, 0x63, 0x68, - 0x45, 0x49, 0x60, 0x69, 0xc9, 0x1a, 0x00, 0xf0, 0x89, 0xf8, 0x4f, 0xf0, - 0x00, 0x0b, 0xa3, 0x68, 0x22, 0x68, 0x00, 0x2b, 0x3d, 0xd0, 0x31, 0x68, - 0x60, 0x69, 0x91, 0xf8, 0x00, 0xc0, 0x10, 0xf8, 0x0c, 0x00, 0x00, 0x28, - 0x35, 0xd0, 0xbc, 0xf1, 0x30, 0x0f, 0x24, 0xd1, 0x10, 0x05, 0x22, 0xd5, - 0x0b, 0xf1, 0x01, 0x0b, 0xb9, 0xf1, 0x00, 0x0f, 0x03, 0xd0, 0x01, 0x33, - 0x09, 0xf1, 0xff, 0x39, 0xa3, 0x60, 0x73, 0x68, 0x01, 0x3b, 0x00, 0x2b, - 0x73, 0x60, 0x1b, 0xdd, 0x33, 0x68, 0x01, 0x33, 0x33, 0x60, 0xa3, 0x68, - 0x01, 0x3b, 0xa3, 0x60, 0xd9, 0xe7, 0xbb, 0xf1, 0x02, 0x0f, 0xae, 0xd1, - 0x22, 0x68, 0x02, 0xf4, 0xc0, 0x61, 0xb1, 0xf5, 0x00, 0x7f, 0xbf, 0xd1, - 0x10, 0x23, 0x63, 0x60, 0x42, 0xf4, 0x80, 0x72, 0xa2, 0xe7, 0x22, 0xf4, - 0x10, 0x62, 0x22, 0x60, 0x0b, 0x78, 0x05, 0xf8, 0x01, 0x3b, 0xde, 0xe7, - 0xd4, 0xf8, 0x80, 0x31, 0x31, 0x46, 0x50, 0x46, 0x98, 0x47, 0x00, 0x28, - 0xdf, 0xd0, 0x23, 0x68, 0xd9, 0x05, 0x0d, 0xd5, 0xbd, 0x42, 0x09, 0xd9, - 0x15, 0xf8, 0x01, 0x1c, 0xd4, 0xf8, 0x7c, 0x31, 0x32, 0x46, 0x50, 0x46, - 0x98, 0x47, 0x05, 0xf1, 0xff, 0x39, 0x4d, 0x46, 0xbd, 0x42, 0x28, 0xd0, - 0x22, 0x68, 0x12, 0xf0, 0x10, 0x02, 0x13, 0xd1, 0x2a, 0x70, 0x63, 0x68, - 0x01, 0x9e, 0x39, 0x46, 0x50, 0x46, 0xb0, 0x47, 0xd8, 0xf8, 0x00, 0x30, - 0x21, 0x68, 0x1a, 0x1d, 0xc8, 0xf8, 0x00, 0x20, 0x11, 0xf0, 0x20, 0x0f, - 0x1b, 0x68, 0x0f, 0xd0, 0x18, 0x60, 0xe3, 0x68, 0x01, 0x33, 0xe3, 0x60, - 0xed, 0x1b, 0xab, 0x44, 0x25, 0x69, 0x5d, 0x44, 0x25, 0x61, 0x00, 0x20, - 0x07, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0x4f, 0xf0, 0x00, 0x0b, 0xca, 0xe7, - 0xca, 0x07, 0x4c, 0xbf, 0x18, 0x80, 0x18, 0x60, 0xeb, 0xe7, 0x01, 0x20, - 0xf2, 0xe7, 0x00, 0xbf, 0x34, 0xd4, 0x01, 0x08, 0x01, 0xc1, 0x01, 0x08, - 0xbd, 0xc8, 0x01, 0x08, 0x32, 0xd4, 0x01, 0x08, 0x70, 0xb5, 0x0b, 0x78, - 0x04, 0x46, 0x5e, 0x2b, 0x0b, 0xbf, 0x4b, 0x78, 0x48, 0x1c, 0x88, 0x1c, - 0x00, 0x22, 0x08, 0xbf, 0x01, 0x22, 0x61, 0x1e, 0x04, 0xf1, 0xff, 0x05, - 0x01, 0xf8, 0x01, 0x2f, 0xa9, 0x42, 0xfb, 0xd1, 0x0b, 0xb9, 0x01, 0x38, - 0x70, 0xbd, 0x82, 0xf0, 0x01, 0x01, 0xe1, 0x54, 0x42, 0x1c, 0x12, 0xf8, - 0x01, 0x5c, 0x2d, 0x2d, 0x02, 0xf1, 0xff, 0x36, 0x10, 0x46, 0x06, 0xd0, - 0x5d, 0x2d, 0xf1, 0xd0, 0x0d, 0xb9, 0x30, 0x46, 0xee, 0xe7, 0x2b, 0x46, - 0xef, 0xe7, 0x16, 0x78, 0x5d, 0x2e, 0xfa, 0xd0, 0xb3, 0x42, 0xf8, 0xdc, - 0x18, 0x46, 0x01, 0x30, 0x86, 0x42, 0x21, 0x54, 0xfb, 0xdc, 0xd8, 0x43, - 0x30, 0x44, 0x5d, 0x1c, 0xb3, 0x42, 0xa8, 0xbf, 0x00, 0x20, 0x2b, 0x18, - 0x02, 0x32, 0xde, 0xe7, 0x2d, 0xe9, 0xf0, 0x47, 0x3a, 0x4e, 0x86, 0x46, - 0x8c, 0x46, 0x60, 0x46, 0x1c, 0xf8, 0x01, 0x4b, 0xa5, 0x5d, 0x15, 0xf0, - 0x08, 0x05, 0xf8, 0xd1, 0x2d, 0x2c, 0x33, 0xd1, 0x9c, 0xf8, 0x00, 0x40, - 0x4f, 0xf0, 0x01, 0x08, 0x00, 0xf1, 0x02, 0x0c, 0x00, 0x2b, 0x5c, 0xd0, - 0x10, 0x2b, 0x0c, 0xd1, 0x30, 0x2c, 0x0a, 0xd1, 0x9c, 0xf8, 0x00, 0x00, - 0x00, 0xf0, 0xdf, 0x00, 0x58, 0x28, 0x4d, 0xd1, 0x9c, 0xf8, 0x01, 0x40, - 0x10, 0x23, 0x0c, 0xf1, 0x02, 0x0c, 0x08, 0xf1, 0x00, 0x47, 0x01, 0x3f, - 0x00, 0x26, 0xb7, 0xfb, 0xf3, 0xf9, 0x30, 0x46, 0x03, 0xfb, 0x19, 0x7a, - 0xa4, 0xf1, 0x30, 0x05, 0x09, 0x2d, 0x18, 0xd8, 0x2c, 0x46, 0xa3, 0x42, - 0x24, 0xdd, 0x75, 0x1c, 0x07, 0xd0, 0x81, 0x45, 0x1d, 0xd3, 0x01, 0xd1, - 0xa2, 0x45, 0x1a, 0xdb, 0x00, 0xfb, 0x03, 0x40, 0x01, 0x26, 0x1c, 0xf8, - 0x01, 0x4b, 0xeb, 0xe7, 0x2b, 0x2c, 0x08, 0xbf, 0x9c, 0xf8, 0x00, 0x40, - 0xa8, 0x46, 0x08, 0xbf, 0x00, 0xf1, 0x02, 0x0c, 0xc8, 0xe7, 0xa4, 0xf1, - 0x41, 0x05, 0x19, 0x2d, 0x01, 0xd8, 0x37, 0x3c, 0xe1, 0xe7, 0xa4, 0xf1, - 0x61, 0x05, 0x19, 0x2d, 0x04, 0xd8, 0x57, 0x3c, 0xdb, 0xe7, 0x4f, 0xf0, - 0xff, 0x36, 0xe4, 0xe7, 0x73, 0x1c, 0x06, 0xd1, 0x22, 0x23, 0xce, 0xf8, - 0x00, 0x30, 0x38, 0x46, 0x42, 0xb9, 0xbd, 0xe8, 0xf0, 0x87, 0xb8, 0xf1, - 0x00, 0x0f, 0x00, 0xd0, 0x40, 0x42, 0x00, 0x2a, 0xf7, 0xd0, 0x0e, 0xb1, - 0x0c, 0xf1, 0xff, 0x31, 0x11, 0x60, 0xf2, 0xe7, 0x30, 0x24, 0x00, 0x2b, - 0xb3, 0xd1, 0x08, 0x23, 0xb1, 0xe7, 0x30, 0x2c, 0xa4, 0xd0, 0x0a, 0x23, - 0xad, 0xe7, 0x00, 0xbf, 0x15, 0xd3, 0x01, 0x08, 0xff, 0xf7, 0x84, 0xbf, - 0x2d, 0xe9, 0xf0, 0x41, 0x0c, 0x46, 0x49, 0x6b, 0x04, 0xf1, 0x44, 0x03, - 0x99, 0x42, 0x1d, 0xd1, 0x4f, 0xf4, 0x80, 0x61, 0xf2, 0xf7, 0xda, 0xfe, - 0x18, 0xb9, 0x4f, 0xf0, 0xff, 0x30, 0xbd, 0xe8, 0xf0, 0x81, 0x4f, 0xf4, - 0x80, 0x63, 0xa3, 0x63, 0x94, 0xf8, 0x46, 0x30, 0x60, 0x63, 0x80, 0xf8, - 0xff, 0x33, 0x94, 0xf8, 0x45, 0x30, 0x80, 0xf8, 0xfe, 0x33, 0x94, 0xf8, - 0x44, 0x30, 0x80, 0xf8, 0xfd, 0x33, 0x00, 0xf2, 0xfd, 0x30, 0x20, 0x60, - 0x00, 0x20, 0xe8, 0xe7, 0xa6, 0x6b, 0x77, 0x00, 0x3a, 0x46, 0xf2, 0xf7, - 0xb9, 0xfe, 0x05, 0x46, 0x00, 0x28, 0xde, 0xd0, 0x00, 0xeb, 0x06, 0x08, - 0x01, 0x46, 0x32, 0x46, 0x40, 0x46, 0xfe, 0xf7, 0x53, 0xfd, 0xc4, 0xe9, - 0x0d, 0x57, 0xc4, 0xf8, 0x00, 0x80, 0xe9, 0xe7, 0x02, 0x4b, 0x0a, 0x46, - 0x01, 0x46, 0x18, 0x68, 0xf2, 0xf7, 0xa0, 0xbe, 0x10, 0x03, 0x00, 0x24, - 0x70, 0xb5, 0x0e, 0x46, 0x14, 0x46, 0x05, 0x46, 0x18, 0xb1, 0x83, 0x69, - 0x0b, 0xb9, 0xfe, 0xf7, 0x71, 0xf8, 0x14, 0x4b, 0x9c, 0x42, 0x1a, 0xd1, - 0x6c, 0x68, 0x63, 0x6e, 0xd8, 0x07, 0x05, 0xd4, 0xa3, 0x89, 0x99, 0x05, - 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, 0x67, 0xfc, 0x22, 0x46, 0x28, 0x46, - 0x31, 0x46, 0x00, 0xf0, 0xa1, 0xf8, 0x63, 0x6e, 0xda, 0x07, 0x05, 0x46, - 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, - 0x5a, 0xfc, 0x28, 0x46, 0x70, 0xbd, 0x06, 0x4b, 0x9c, 0x42, 0x01, 0xd1, - 0xac, 0x68, 0xe0, 0xe7, 0x04, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, - 0xdb, 0xe7, 0x00, 0xbf, 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, - 0x14, 0xd2, 0x01, 0x08, 0x02, 0x4b, 0x0a, 0x46, 0x01, 0x46, 0x18, 0x68, - 0xff, 0xf7, 0xc2, 0xbf, 0x10, 0x03, 0x00, 0x24, 0x2d, 0xe9, 0xf8, 0x43, - 0x08, 0x9c, 0x89, 0x46, 0x17, 0x46, 0x02, 0xfb, 0x03, 0xf8, 0x05, 0x46, - 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xfe, 0xf7, 0x2d, 0xf8, 0x26, 0x4b, - 0x9c, 0x42, 0x23, 0xd1, 0x6c, 0x68, 0x63, 0x6e, 0xde, 0x07, 0x05, 0xd4, - 0xa3, 0x89, 0x98, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, 0x23, 0xfc, - 0xa3, 0x89, 0x19, 0x07, 0x20, 0xd5, 0x23, 0x69, 0xf3, 0xb1, 0x00, 0x26, - 0x46, 0x45, 0x29, 0xd0, 0xa0, 0x68, 0x19, 0xf8, 0x06, 0x10, 0x01, 0x38, - 0x00, 0x28, 0xa0, 0x60, 0x04, 0xda, 0xa3, 0x69, 0x98, 0x42, 0x19, 0xdb, - 0x0a, 0x29, 0x17, 0xd0, 0x23, 0x68, 0x5a, 0x1c, 0x22, 0x60, 0x19, 0x70, - 0x01, 0x36, 0xeb, 0xe7, 0x13, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, - 0xd7, 0xe7, 0x12, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xd2, 0xe7, - 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x8c, 0xf9, 0x00, 0x28, 0xda, 0xd0, - 0x00, 0x26, 0x05, 0xe0, 0x22, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x32, 0xf9, - 0x01, 0x30, 0xe5, 0xd1, 0x63, 0x6e, 0xda, 0x07, 0x05, 0xd4, 0xa3, 0x89, - 0x9b, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, 0xea, 0xfb, 0xb6, 0xfb, - 0xf7, 0xf0, 0xbd, 0xe8, 0xf8, 0x83, 0x00, 0xbf, 0x34, 0xd2, 0x01, 0x08, - 0x54, 0xd2, 0x01, 0x08, 0x14, 0xd2, 0x01, 0x08, 0x07, 0xb5, 0x00, 0x93, - 0x13, 0x46, 0x0a, 0x46, 0x01, 0x46, 0x03, 0x48, 0x00, 0x68, 0xff, 0xf7, - 0x97, 0xff, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x10, 0x03, 0x00, 0x24, - 0x30, 0xb5, 0x01, 0x39, 0x00, 0x24, 0xa2, 0x42, 0x01, 0xd1, 0x00, 0x20, - 0x05, 0xe0, 0x03, 0x5d, 0x01, 0x34, 0x0d, 0x5d, 0xab, 0x42, 0xf6, 0xd0, - 0x58, 0x1b, 0x30, 0xbd, 0x70, 0xb5, 0x0d, 0x46, 0x14, 0x46, 0x06, 0x46, - 0x18, 0xb1, 0x83, 0x69, 0x0b, 0xb9, 0xfd, 0xf7, 0xb5, 0xff, 0x1c, 0x4b, - 0x9c, 0x42, 0x24, 0xd1, 0x74, 0x68, 0x63, 0x6e, 0xd8, 0x07, 0x05, 0xd4, - 0xa3, 0x89, 0x99, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, 0xab, 0xfb, - 0xa3, 0x68, 0x01, 0x3b, 0x00, 0x2b, 0xa3, 0x60, 0x05, 0xda, 0xa2, 0x69, - 0x93, 0x42, 0x1c, 0xdb, 0xeb, 0xb2, 0x0a, 0x2b, 0x19, 0xd0, 0x23, 0x68, - 0x5a, 0x1c, 0x22, 0x60, 0x1d, 0x70, 0xed, 0xb2, 0x63, 0x6e, 0xda, 0x07, - 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, - 0x94, 0xfb, 0x28, 0x46, 0x70, 0xbd, 0x09, 0x4b, 0x9c, 0x42, 0x01, 0xd1, - 0xb4, 0x68, 0xd6, 0xe7, 0x07, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xf4, 0x68, - 0xd1, 0xe7, 0x29, 0x46, 0x22, 0x46, 0x30, 0x46, 0x00, 0xf0, 0xc0, 0xf8, - 0x05, 0x46, 0xe3, 0xe7, 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, - 0x14, 0xd2, 0x01, 0x08, 0x70, 0xb5, 0x0e, 0x46, 0x05, 0x46, 0x18, 0xb1, - 0x83, 0x69, 0x0b, 0xb9, 0xfd, 0xf7, 0x6e, 0xff, 0xab, 0x69, 0xac, 0x68, - 0x13, 0xb9, 0x28, 0x46, 0xfd, 0xf7, 0x68, 0xff, 0x2c, 0x4b, 0x9c, 0x42, - 0x20, 0xd1, 0x6c, 0x68, 0x63, 0x6e, 0xdb, 0x07, 0x05, 0xd4, 0xa3, 0x89, - 0x98, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, 0x5e, 0xfb, 0xa3, 0x89, - 0x19, 0x07, 0x1d, 0xd5, 0x23, 0x69, 0xdb, 0xb1, 0x01, 0x3e, 0xa3, 0x68, - 0x16, 0xf8, 0x01, 0x1f, 0x01, 0x3b, 0xa3, 0x60, 0x39, 0xbb, 0x00, 0x2b, - 0x38, 0xda, 0x22, 0x46, 0x0a, 0x21, 0x28, 0x46, 0x00, 0xf0, 0x8a, 0xf8, - 0x01, 0x30, 0x11, 0xd0, 0x0a, 0x25, 0x11, 0xe0, 0x1b, 0x4b, 0x9c, 0x42, - 0x01, 0xd1, 0xac, 0x68, 0xda, 0xe7, 0x1a, 0x4b, 0x9c, 0x42, 0x08, 0xbf, - 0xec, 0x68, 0xd5, 0xe7, 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0xca, 0xf8, - 0x00, 0x28, 0xdd, 0xd0, 0x4f, 0xf0, 0xff, 0x35, 0x63, 0x6e, 0xda, 0x07, - 0x05, 0xd4, 0xa3, 0x89, 0x9b, 0x05, 0x02, 0xd4, 0xa0, 0x6d, 0xfe, 0xf7, - 0x2e, 0xfb, 0x28, 0x46, 0x70, 0xbd, 0x00, 0x2b, 0x04, 0xda, 0xa2, 0x69, - 0x9a, 0x42, 0x06, 0xdc, 0x0a, 0x29, 0x04, 0xd0, 0x23, 0x68, 0x5a, 0x1c, - 0x22, 0x60, 0x19, 0x70, 0xc5, 0xe7, 0x22, 0x46, 0x28, 0x46, 0x00, 0xf0, - 0x59, 0xf8, 0x01, 0x30, 0xbf, 0xd1, 0xdf, 0xe7, 0x23, 0x68, 0x0a, 0x25, - 0x5a, 0x1c, 0x22, 0x60, 0x1d, 0x70, 0xdb, 0xe7, 0x34, 0xd2, 0x01, 0x08, - 0x54, 0xd2, 0x01, 0x08, 0x14, 0xd2, 0x01, 0x08, 0x02, 0x4b, 0x01, 0x46, - 0x18, 0x68, 0xff, 0xf7, 0x8d, 0xbf, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, - 0xc9, 0xb2, 0x03, 0x46, 0x10, 0xf8, 0x01, 0x2b, 0x1a, 0xb1, 0x8a, 0x42, - 0xf9, 0xd1, 0x18, 0x46, 0x70, 0x47, 0x00, 0x29, 0x18, 0xbf, 0x00, 0x23, - 0xf9, 0xe7, 0x70, 0xb5, 0x03, 0x46, 0x1e, 0x46, 0x13, 0xf8, 0x01, 0x4b, - 0x44, 0xb1, 0x4a, 0x1e, 0x01, 0xe0, 0xa5, 0x42, 0x04, 0xd0, 0x12, 0xf8, - 0x01, 0x5f, 0x00, 0x2d, 0xf9, 0xd1, 0xf2, 0xe7, 0x30, 0x1a, 0x70, 0xbd, - 0x10, 0xb5, 0x01, 0x39, 0x03, 0x46, 0x32, 0xb1, 0x11, 0xf8, 0x01, 0x4f, - 0x03, 0xf8, 0x01, 0x4b, 0x01, 0x3a, 0x00, 0x2c, 0xf7, 0xd1, 0x1a, 0x44, - 0x00, 0x21, 0x93, 0x42, 0x00, 0xd1, 0x10, 0xbd, 0x03, 0xf8, 0x01, 0x1b, - 0xf9, 0xe7, 0x70, 0xb5, 0x03, 0x46, 0x1e, 0x46, 0x13, 0xf8, 0x01, 0x4b, - 0x3c, 0xb1, 0x4a, 0x1e, 0x01, 0xe0, 0xa5, 0x42, 0xf7, 0xd0, 0x12, 0xf8, - 0x01, 0x5f, 0x00, 0x2d, 0xf9, 0xd1, 0x30, 0x1a, 0x70, 0xbd, 0x00, 0x00, - 0xf8, 0xb5, 0x0e, 0x46, 0x14, 0x46, 0x05, 0x46, 0x18, 0xb1, 0x83, 0x69, - 0x0b, 0xb9, 0xfd, 0xf7, 0xb5, 0xfe, 0x21, 0x4b, 0x9c, 0x42, 0x2b, 0xd1, - 0x6c, 0x68, 0xa3, 0x69, 0xa3, 0x60, 0xa3, 0x89, 0x1a, 0x07, 0x2f, 0xd5, - 0x23, 0x69, 0x6b, 0xb3, 0x23, 0x69, 0x20, 0x68, 0xc0, 0x1a, 0x63, 0x69, - 0xf6, 0xb2, 0x83, 0x42, 0x37, 0x46, 0x04, 0xdc, 0x21, 0x46, 0x28, 0x46, - 0xfd, 0xf7, 0xf8, 0xfd, 0x30, 0xbb, 0xa3, 0x68, 0x01, 0x3b, 0xa3, 0x60, - 0x23, 0x68, 0x5a, 0x1c, 0x22, 0x60, 0x1e, 0x70, 0x63, 0x69, 0x01, 0x30, - 0x83, 0x42, 0x04, 0xd0, 0xa3, 0x89, 0xdb, 0x07, 0x06, 0xd5, 0x0a, 0x2e, - 0x04, 0xd1, 0x21, 0x46, 0x28, 0x46, 0xfd, 0xf7, 0xe3, 0xfd, 0x88, 0xb9, - 0x38, 0x46, 0xf8, 0xbd, 0x0a, 0x4b, 0x9c, 0x42, 0x01, 0xd1, 0xac, 0x68, - 0xcf, 0xe7, 0x09, 0x4b, 0x9c, 0x42, 0x08, 0xbf, 0xec, 0x68, 0xca, 0xe7, - 0x21, 0x46, 0x28, 0x46, 0x00, 0xf0, 0x0c, 0xf8, 0x00, 0x28, 0xcb, 0xd0, - 0x4f, 0xf0, 0xff, 0x37, 0xea, 0xe7, 0x00, 0xbf, 0x34, 0xd2, 0x01, 0x08, - 0x54, 0xd2, 0x01, 0x08, 0x14, 0xd2, 0x01, 0x08, 0x32, 0x4b, 0x70, 0xb5, - 0x1d, 0x68, 0x06, 0x46, 0x0c, 0x46, 0x25, 0xb1, 0xab, 0x69, 0x13, 0xb9, - 0x28, 0x46, 0xfd, 0xf7, 0x61, 0xfe, 0x2e, 0x4b, 0x9c, 0x42, 0x0f, 0xd1, - 0x6c, 0x68, 0xa3, 0x89, 0xb4, 0xf9, 0x0c, 0x20, 0x19, 0x07, 0x2c, 0xd4, - 0xdd, 0x06, 0x11, 0xd4, 0x09, 0x23, 0x33, 0x60, 0x42, 0xf0, 0x40, 0x03, - 0xa3, 0x81, 0x4f, 0xf0, 0xff, 0x30, 0x3e, 0xe0, 0x25, 0x4b, 0x9c, 0x42, - 0x01, 0xd1, 0xac, 0x68, 0xeb, 0xe7, 0x24, 0x4b, 0x9c, 0x42, 0x08, 0xbf, - 0xec, 0x68, 0xe6, 0xe7, 0x58, 0x07, 0x12, 0xd5, 0x61, 0x6b, 0x41, 0xb1, - 0x04, 0xf1, 0x44, 0x03, 0x99, 0x42, 0x02, 0xd0, 0x30, 0x46, 0xf2, 0xf7, - 0x5f, 0xfc, 0x00, 0x23, 0x63, 0x63, 0xa3, 0x89, 0x23, 0xf0, 0x24, 0x03, - 0xa3, 0x81, 0x00, 0x23, 0x63, 0x60, 0x23, 0x69, 0x23, 0x60, 0xa3, 0x89, - 0x43, 0xf0, 0x08, 0x03, 0xa3, 0x81, 0x23, 0x69, 0x4b, 0xb9, 0xa3, 0x89, - 0x03, 0xf4, 0x20, 0x73, 0xb3, 0xf5, 0x00, 0x7f, 0x03, 0xd0, 0x21, 0x46, - 0x30, 0x46, 0xfe, 0xf7, 0x49, 0xfa, 0xa0, 0x89, 0xb4, 0xf9, 0x0c, 0x20, - 0x10, 0xf0, 0x01, 0x03, 0x0a, 0xd0, 0x00, 0x23, 0xa3, 0x60, 0x63, 0x69, - 0x5b, 0x42, 0xa3, 0x61, 0x23, 0x69, 0x43, 0xb9, 0x10, 0xf0, 0x80, 0x00, - 0xba, 0xd1, 0x70, 0xbd, 0x81, 0x07, 0x58, 0xbf, 0x63, 0x69, 0xa3, 0x60, - 0xf4, 0xe7, 0x00, 0x20, 0xf7, 0xe7, 0x00, 0xbf, 0x10, 0x03, 0x00, 0x24, - 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, 0x14, 0xd2, 0x01, 0x08, - 0x7b, 0xb9, 0x72, 0xb9, 0x00, 0x29, 0xbe, 0xbf, 0x00, 0x20, 0x4f, 0xf0, - 0x00, 0x41, 0x06, 0xe0, 0x08, 0xbf, 0x00, 0x28, 0x1c, 0xbf, 0x6f, 0xf0, - 0x00, 0x41, 0x4f, 0xf0, 0xff, 0x30, 0x00, 0xf0, 0xa1, 0xb9, 0xad, 0xf1, - 0x08, 0x0c, 0x6d, 0xe9, 0x04, 0xce, 0x00, 0x29, 0x09, 0xdb, 0x00, 0x2b, - 0x1a, 0xdb, 0x00, 0xf0, 0x35, 0xf8, 0xdd, 0xf8, 0x04, 0xe0, 0xdd, 0xe9, - 0x02, 0x23, 0x04, 0xb0, 0x70, 0x47, 0x40, 0x42, 0x61, 0xeb, 0x41, 0x01, - 0x00, 0x2b, 0x1b, 0xdb, 0x00, 0xf0, 0x28, 0xf8, 0xdd, 0xf8, 0x04, 0xe0, - 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, 0x40, 0x42, 0x61, 0xeb, 0x41, 0x01, - 0x52, 0x42, 0x63, 0xeb, 0x43, 0x03, 0x70, 0x47, 0x52, 0x42, 0x63, 0xeb, - 0x43, 0x03, 0x00, 0xf0, 0x17, 0xf8, 0xdd, 0xf8, 0x04, 0xe0, 0xdd, 0xe9, - 0x02, 0x23, 0x04, 0xb0, 0x40, 0x42, 0x61, 0xeb, 0x41, 0x01, 0x70, 0x47, - 0x52, 0x42, 0x63, 0xeb, 0x43, 0x03, 0x00, 0xf0, 0x09, 0xf8, 0xdd, 0xf8, - 0x04, 0xe0, 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, 0x52, 0x42, 0x63, 0xeb, - 0x43, 0x03, 0x70, 0x47, 0x2d, 0xe9, 0xf0, 0x47, 0x08, 0x9d, 0x04, 0x46, - 0x8c, 0x46, 0x00, 0x2b, 0x40, 0xf0, 0x83, 0x80, 0x8a, 0x42, 0x17, 0x46, - 0x47, 0xd9, 0xb2, 0xfa, 0x82, 0xf2, 0x42, 0xb1, 0xc2, 0xf1, 0x20, 0x00, - 0x24, 0xfa, 0x00, 0xf0, 0x91, 0x40, 0x97, 0x40, 0x40, 0xea, 0x01, 0x0c, - 0x94, 0x40, 0x4f, 0xea, 0x17, 0x48, 0x23, 0x0c, 0xbc, 0xfb, 0xf8, 0xf6, - 0x1f, 0xfa, 0x87, 0xfe, 0x08, 0xfb, 0x16, 0xc1, 0x43, 0xea, 0x01, 0x43, - 0x06, 0xfb, 0x0e, 0xf1, 0x99, 0x42, 0x09, 0xd9, 0xfb, 0x18, 0x06, 0xf1, - 0xff, 0x30, 0x80, 0xf0, 0x19, 0x81, 0x99, 0x42, 0x40, 0xf2, 0x16, 0x81, - 0x02, 0x3e, 0x3b, 0x44, 0x5b, 0x1a, 0xa4, 0xb2, 0xb3, 0xfb, 0xf8, 0xf0, - 0x08, 0xfb, 0x10, 0x33, 0x44, 0xea, 0x03, 0x44, 0x00, 0xfb, 0x0e, 0xfe, - 0xa6, 0x45, 0x09, 0xd9, 0x3c, 0x19, 0x00, 0xf1, 0xff, 0x33, 0x80, 0xf0, - 0x05, 0x81, 0xa6, 0x45, 0x40, 0xf2, 0x02, 0x81, 0x02, 0x38, 0x3c, 0x44, - 0x40, 0xea, 0x06, 0x40, 0xa4, 0xeb, 0x0e, 0x04, 0x00, 0x26, 0x1d, 0xb1, - 0xd4, 0x40, 0x00, 0x23, 0xc5, 0xe9, 0x00, 0x43, 0x31, 0x46, 0xbd, 0xe8, - 0xf0, 0x87, 0x02, 0xb9, 0xff, 0xde, 0xb2, 0xfa, 0x82, 0xf2, 0x00, 0x2a, - 0x50, 0xd1, 0xcb, 0x1b, 0x4f, 0xea, 0x17, 0x4e, 0x1f, 0xfa, 0x87, 0xf8, - 0x01, 0x26, 0xb3, 0xfb, 0xfe, 0xfc, 0x21, 0x0c, 0x0e, 0xfb, 0x1c, 0x33, - 0x41, 0xea, 0x03, 0x41, 0x08, 0xfb, 0x0c, 0xf3, 0x8b, 0x42, 0x07, 0xd9, - 0x79, 0x18, 0x0c, 0xf1, 0xff, 0x30, 0x02, 0xd2, 0x8b, 0x42, 0x00, 0xf2, - 0xe9, 0x80, 0x84, 0x46, 0xc9, 0x1a, 0xa3, 0xb2, 0xb1, 0xfb, 0xfe, 0xf0, - 0x0e, 0xfb, 0x10, 0x11, 0x43, 0xea, 0x01, 0x44, 0x08, 0xfb, 0x00, 0xf8, - 0xa0, 0x45, 0x07, 0xd9, 0x3c, 0x19, 0x00, 0xf1, 0xff, 0x33, 0x02, 0xd2, - 0xa0, 0x45, 0x00, 0xf2, 0xd9, 0x80, 0x18, 0x46, 0xa4, 0xeb, 0x08, 0x04, - 0x40, 0xea, 0x0c, 0x40, 0xbf, 0xe7, 0x8b, 0x42, 0x09, 0xd9, 0x00, 0x2d, - 0x00, 0xf0, 0xb1, 0x80, 0x00, 0x26, 0xc5, 0xe9, 0x00, 0x01, 0x30, 0x46, - 0x31, 0x46, 0xbd, 0xe8, 0xf0, 0x87, 0xb3, 0xfa, 0x83, 0xf6, 0x00, 0x2e, - 0x4a, 0xd1, 0x8b, 0x42, 0x02, 0xd3, 0x82, 0x42, 0x00, 0xf2, 0xb8, 0x80, - 0x84, 0x1a, 0x61, 0xeb, 0x03, 0x01, 0x01, 0x20, 0x8c, 0x46, 0x00, 0x2d, - 0xa8, 0xd0, 0xc5, 0xe9, 0x00, 0x4c, 0xa5, 0xe7, 0xc2, 0xf1, 0x20, 0x03, - 0x20, 0xfa, 0x03, 0xf6, 0x97, 0x40, 0x01, 0xfa, 0x02, 0xf0, 0x4f, 0xea, - 0x17, 0x4e, 0xd9, 0x40, 0x30, 0x43, 0x03, 0x0c, 0xb1, 0xfb, 0xfe, 0xf6, - 0x1f, 0xfa, 0x87, 0xf8, 0x0e, 0xfb, 0x16, 0x11, 0x43, 0xea, 0x01, 0x43, - 0x06, 0xfb, 0x08, 0xf1, 0x99, 0x42, 0x04, 0xfa, 0x02, 0xf4, 0x09, 0xd9, - 0xfb, 0x18, 0x06, 0xf1, 0xff, 0x3c, 0x80, 0xf0, 0x8d, 0x80, 0x99, 0x42, - 0x40, 0xf2, 0x8a, 0x80, 0x02, 0x3e, 0x3b, 0x44, 0x5b, 0x1a, 0x81, 0xb2, - 0xb3, 0xfb, 0xfe, 0xf0, 0x0e, 0xfb, 0x10, 0x33, 0x41, 0xea, 0x03, 0x41, - 0x00, 0xfb, 0x08, 0xf3, 0x8b, 0x42, 0x07, 0xd9, 0x79, 0x18, 0x00, 0xf1, - 0xff, 0x3c, 0x73, 0xd2, 0x8b, 0x42, 0x71, 0xd9, 0x02, 0x38, 0x39, 0x44, - 0xcb, 0x1a, 0x40, 0xea, 0x06, 0x46, 0x78, 0xe7, 0xc6, 0xf1, 0x20, 0x0c, - 0x03, 0xfa, 0x06, 0xf4, 0x22, 0xfa, 0x0c, 0xf3, 0x1c, 0x43, 0x20, 0xfa, - 0x0c, 0xf7, 0x01, 0xfa, 0x06, 0xf3, 0x4f, 0xea, 0x14, 0x4e, 0x21, 0xfa, - 0x0c, 0xf1, 0x1f, 0x43, 0x3b, 0x0c, 0xb1, 0xfb, 0xfe, 0xf9, 0x1f, 0xfa, - 0x84, 0xf8, 0x0e, 0xfb, 0x19, 0x11, 0x43, 0xea, 0x01, 0x41, 0x09, 0xfb, - 0x08, 0xfa, 0x8a, 0x45, 0x02, 0xfa, 0x06, 0xf2, 0x00, 0xfa, 0x06, 0xf3, - 0x08, 0xd9, 0x61, 0x18, 0x09, 0xf1, 0xff, 0x30, 0x48, 0xd2, 0x8a, 0x45, - 0x46, 0xd9, 0xa9, 0xf1, 0x02, 0x09, 0x21, 0x44, 0xa1, 0xeb, 0x0a, 0x01, - 0xbf, 0xb2, 0xb1, 0xfb, 0xfe, 0xf0, 0x0e, 0xfb, 0x10, 0x11, 0x47, 0xea, - 0x01, 0x47, 0x00, 0xfb, 0x08, 0xf8, 0xb8, 0x45, 0x07, 0xd9, 0xe7, 0x19, - 0x00, 0xf1, 0xff, 0x31, 0x2e, 0xd2, 0xb8, 0x45, 0x2c, 0xd9, 0x02, 0x38, - 0x27, 0x44, 0x40, 0xea, 0x09, 0x40, 0xa7, 0xeb, 0x08, 0x07, 0xa0, 0xfb, - 0x02, 0x89, 0x4f, 0x45, 0xc6, 0x46, 0x49, 0x46, 0x1a, 0xd3, 0x17, 0xd0, - 0x5d, 0xb1, 0xb3, 0xeb, 0x0e, 0x02, 0x67, 0xeb, 0x01, 0x07, 0x07, 0xfa, - 0x0c, 0xfc, 0xf2, 0x40, 0x4c, 0xea, 0x02, 0x02, 0xf7, 0x40, 0xc5, 0xe9, - 0x00, 0x27, 0x00, 0x26, 0x31, 0x46, 0xbd, 0xe8, 0xf0, 0x87, 0x2e, 0x46, - 0x28, 0x46, 0x0b, 0xe7, 0x06, 0x46, 0xe9, 0xe6, 0x18, 0x46, 0xfd, 0xe6, - 0x43, 0x45, 0xe5, 0xd2, 0xb8, 0xeb, 0x02, 0x0e, 0x69, 0xeb, 0x04, 0x01, - 0x01, 0x38, 0xdf, 0xe7, 0x08, 0x46, 0xd2, 0xe7, 0x60, 0x46, 0x8d, 0xe7, - 0x81, 0x46, 0xb9, 0xe7, 0x66, 0x46, 0x75, 0xe7, 0x30, 0x46, 0x4a, 0xe7, - 0xac, 0xf1, 0x02, 0x0c, 0x39, 0x44, 0x13, 0xe7, 0x02, 0x38, 0x3c, 0x44, - 0x24, 0xe7, 0x00, 0xbf, 0x70, 0x47, 0x00, 0xbf, 0x53, 0xb9, 0x4a, 0xb9, - 0x00, 0x29, 0x08, 0xbf, 0x00, 0x28, 0x1c, 0xbf, 0x4f, 0xf0, 0xff, 0x31, - 0x4f, 0xf0, 0xff, 0x30, 0xff, 0xf7, 0xf2, 0xbf, 0xad, 0xf1, 0x08, 0x0c, - 0x6d, 0xe9, 0x04, 0xce, 0xff, 0xf7, 0x8a, 0xfe, 0xdd, 0xf8, 0x04, 0xe0, - 0xdd, 0xe9, 0x02, 0x23, 0x04, 0xb0, 0x70, 0x47, 0x43, 0x08, 0x03, 0xf0, - 0x55, 0x33, 0xc0, 0x1a, 0x83, 0x08, 0x03, 0xf0, 0x33, 0x33, 0x00, 0xf0, - 0x33, 0x30, 0x18, 0x44, 0x00, 0xeb, 0x10, 0x10, 0x00, 0xf0, 0x0f, 0x30, - 0x00, 0xeb, 0x00, 0x20, 0x00, 0xeb, 0x00, 0x40, 0x00, 0x0e, 0x70, 0x47, - 0xf8, 0xb5, 0x00, 0xbf, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, - 0xf8, 0xb5, 0x00, 0xbf, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x03, 0x00, 0x24, 0x1f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x54, 0x5a, 0x00, 0x47, 0x4d, 0x54, 0x00, 0x25, - 0x31, 0x30, 0x5b, 0x5e, 0x30, 0x2d, 0x39, 0x2c, 0x2b, 0x2d, 0x5d, 0x25, - 0x6e, 0x00, 0x4d, 0x25, 0x68, 0x75, 0x25, 0x6e, 0x2e, 0x25, 0x68, 0x75, - 0x25, 0x6e, 0x2e, 0x25, 0x68, 0x75, 0x25, 0x6e, 0x00, 0x2f, 0x25, 0x68, - 0x75, 0x25, 0x6e, 0x3a, 0x25, 0x68, 0x75, 0x25, 0x6e, 0x3a, 0x25, 0x68, - 0x75, 0x25, 0x6e, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x88, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x41, 0x41, - 0x41, 0x41, 0x41, 0x41, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10, 0x10, 0x10, 0x10, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x6c, 0x4c, - 0x00, 0x2b, 0x2d, 0x00, 0x30, 0x30, 0x00, 0x78, 0x58, 0x00, 0x41, 0x2d, - 0x46, 0x61, 0x2d, 0x66, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, - 0x36, 0x37, 0x5d, 0x00, 0x19, 0xd4, 0x01, 0x08, 0x1c, 0xd4, 0x01, 0x08, - 0x1f, 0xd4, 0x01, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, - 0x20, 0x77, 0x72, 0x6f, 0x6e, 0x67, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x0a, 0x00, 0x49, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x20, 0x61, 0x6c, 0x74, 0x20, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x00, 0x50, 0x69, 0x6e, 0x6d, - 0x61, 0x70, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x77, 0x72, - 0x6f, 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x2e, 0x00, 0x45, 0x2d, 0x49, 0x6e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, 0x3a, 0x20, 0x66, 0x61, 0x5f, - 0x69, 0x64, 0x20, 0x25, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x20, 0x30, 0x78, 0x25, 0x78, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x30, 0x78, - 0x25, 0x78, 0x0a, 0x00, 0x45, 0x2d, 0x52, 0x65, 0x61, 0x64, 0x20, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x3a, 0x20, 0x66, 0x61, 0x5f, 0x69, 0x64, - 0x20, 0x25, 0x64, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x30, - 0x78, 0x25, 0x78, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x30, 0x78, 0x25, 0x78, - 0x0a, 0x00, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x00, 0x65, 0x71, 0x75, 0x65, 0x75, 0x65, 0x00, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x6d, 0x75, 0x74, 0x65, - 0x78, 0x00, 0x45, 0x2d, 0x52, 0x54, 0x43, 0x53, 0x65, 0x74, 0x42, 0x4b, - 0x50, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x00, 0x4d, 0x43, - 0x55, 0x42, 0x6f, 0x6f, 0x74, 0x5f, 0x45, 0x43, 0x49, 0x45, 0x53, 0x5f, - 0x76, 0x31, 0x00, 0x45, 0x2d, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x61, - 0x72, 0x65, 0x61, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x2c, 0x20, 0x75, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x69, 0x64, 0x20, 0x25, 0x64, 0x0a, - 0x00, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x00, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x00, 0x45, 0x2d, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x25, 0x73, - 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x21, 0x0a, 0x00, 0x49, 0x2d, 0x53, - 0x77, 0x61, 0x70, 0x20, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x20, 0x25, - 0x64, 0x20, 0x6f, 0x66, 0x20, 0x25, 0x64, 0x0a, 0x00, 0x57, 0x2d, 0x25, - 0x64, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x73, 0x20, 0x70, 0x65, 0x72, - 0x66, 0x6f, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x73, 0x77, 0x61, 0x70, 0x0a, 0x00, 0x67, 0x6f, 0x6f, 0x64, 0x00, 0x75, - 0x6e, 0x73, 0x65, 0x74, 0x00, 0x62, 0x61, 0x64, 0x00, 0x42, 0x55, 0x47, - 0x3b, 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, - 0x65, 0x6e, 0x00, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x00, 0x74, 0x65, - 0x73, 0x74, 0x00, 0x70, 0x65, 0x72, 0x6d, 0x00, 0x49, 0x2d, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x4d, 0x43, 0x55, 0x62, 0x6f, - 0x6f, 0x74, 0x00, 0x42, 0x6f, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x0a, - 0x00, 0x49, 0x2d, 0x25, 0x73, 0x0a, 0x00, 0x57, 0x2d, 0x46, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, - 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x3b, 0x20, 0x42, 0x4f, 0x4f, - 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x49, 0x4d, 0x47, 0x5f, 0x53, 0x45, - 0x43, 0x54, 0x4f, 0x52, 0x53, 0x3d, 0x25, 0x64, 0x20, 0x2d, 0x20, 0x74, - 0x6f, 0x6f, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x3f, 0x0a, 0x00, 0x57, - 0x2d, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x3b, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x3d, 0x25, 0x75, 0x0a, 0x00, 0x57, 0x2d, 0x43, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x00, 0x57, 0x2d, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x70, - 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x73, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x73, 0x00, 0x57, 0x2d, 0x43, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x3a, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x73, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x73, 0x20, 0x66, 0x69, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, - 0x65, 0x20, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x00, 0x57, 0x2d, - 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x3a, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x73, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, - 0x69, 0x62, 0x6c, 0x65, 0x00, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x00, 0x49, 0x2d, 0x25, 0x73, 0x3a, - 0x20, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x3d, 0x25, 0x73, 0x2c, 0x20, 0x73, - 0x77, 0x61, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x3d, 0x30, 0x78, 0x25, - 0x78, 0x2c, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x64, 0x6f, 0x6e, 0x65, - 0x3d, 0x30, 0x78, 0x25, 0x78, 0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x5f, 0x6f, 0x6b, 0x3d, 0x30, 0x78, 0x25, 0x78, 0x0a, 0x00, 0x53, 0x63, - 0x72, 0x61, 0x74, 0x63, 0x68, 0x00, 0x49, 0x2d, 0x42, 0x6f, 0x6f, 0x74, - 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x20, 0x25, 0x73, 0x0a, - 0x00, 0x49, 0x2d, 0x42, 0x6f, 0x6f, 0x74, 0x20, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x3a, 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x45, 0x2d, 0x44, - 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6f, - 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x21, 0x00, 0x57, 0x2d, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x6f, - 0x6f, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3b, 0x20, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x3d, 0x25, 0x75, 0x0a, 0x00, 0x45, 0x2d, 0x70, - 0x61, 0x6e, 0x69, 0x63, 0x21, 0x00, 0x49, 0x2d, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, - 0x6f, 0x66, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x70, 0x61, 0x69, - 0x72, 0x20, 0x28, 0x25, 0x64, 0x2e, 0x29, 0x20, 0x69, 0x73, 0x20, 0x75, - 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x20, - 0x54, 0x72, 0x65, 0x61, 0x74, 0x20, 0x69, 0x74, 0x20, 0x61, 0x73, 0x20, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x0a, 0x00, 0x49, 0x2d, 0x53, 0x77, 0x61, - 0x70, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x25, 0x73, 0x0a, 0x00, - 0x49, 0x2d, 0x53, 0x77, 0x61, 0x70, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3a, - 0x20, 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x49, 0x2d, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x20, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x20, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x74, - 0x20, 0x2d, 0x3e, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, - 0x73, 0x6c, 0x6f, 0x74, 0x00, 0x49, 0x2d, 0x45, 0x72, 0x61, 0x73, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, 0x61, - 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x00, 0x49, 0x2d, 0x43, 0x6f, - 0x70, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x74, - 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6d, - 0x61, 0x72, 0x79, 0x20, 0x73, 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x30, 0x78, - 0x25, 0x7a, 0x78, 0x20, 0x62, 0x79, 0x74, 0x65, 0x73, 0x0a, 0x00, 0x45, - 0x2d, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, - 0x72, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2c, 0x20, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x25, 0x64, 0x0a, 0x0a, 0x00, 0x49, 0x2d, - 0x42, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x66, 0x69, 0x72, 0x6d, - 0x77, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x61, - 0x74, 0x20, 0x30, 0x78, 0x25, 0x78, 0x0a, 0x0a, 0x00, 0x49, 0x32, 0x43, - 0x31, 0x32, 0x33, 0x3a, 0x20, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x00, 0x49, 0x32, 0x43, 0x34, 0x3a, 0x20, 0x49, 0x6e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x00, 0x49, 0x32, 0x43, 0x3a, 0x20, 0x75, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x00, 0x49, 0x32, 0x43, 0x3a, 0x20, 0x61, 0x62, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x73, 0x68, - 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x64, 0x00, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x00, - 0x53, 0x48, 0x41, 0x32, 0x32, 0x34, 0x00, 0x01, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x04, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x08, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x10, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x20, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, - 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x01, 0x02, 0x03, 0x04, - 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x04, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x00, 0x54, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, - 0x00, 0x58, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x5c, 0x00, 0x40, 0xca, 0x13, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x58, 0xca, 0x13, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, - 0x04, 0x00, 0x06, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x10, 0x00, - 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x8b, 0x01, 0x08, 0x29, 0x8b, 0x01, 0x08, - 0x41, 0xdc, 0x00, 0x08, 0xad, 0xd7, 0x00, 0x08, 0xb9, 0xe7, 0x00, 0x08, - 0x75, 0xd8, 0x00, 0x08, 0x11, 0xdb, 0x00, 0x08, 0x1d, 0xd9, 0x00, 0x08, - 0x7f, 0x57, 0x01, 0x08, 0x45, 0x89, 0x00, 0x08, 0x45, 0x89, 0x00, 0x08, - 0x3d, 0x89, 0x00, 0x08, 0xc1, 0x88, 0x00, 0x08, 0xb7, 0x88, 0x00, 0x08, - 0xbb, 0x88, 0x00, 0x08, 0xd5, 0x56, 0x01, 0x08, 0x75, 0x56, 0x01, 0x08, - 0x0d, 0x56, 0x01, 0x08, 0x35, 0x89, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xcd, 0xb9, 0x00, 0x08, 0xe1, 0xb9, 0x00, 0x08, - 0x45, 0x90, 0x00, 0x08, 0x1d, 0x90, 0x00, 0x08, 0xb9, 0xe7, 0x00, 0x08, - 0x79, 0xca, 0x00, 0x08, 0xe1, 0x8f, 0x00, 0x08, 0xab, 0x8f, 0x00, 0x08, - 0x7f, 0x57, 0x01, 0x08, 0x45, 0x89, 0x00, 0x08, 0xf7, 0x89, 0x00, 0x08, - 0x7d, 0x8f, 0x00, 0x08, 0x93, 0x8f, 0x00, 0x08, 0xe7, 0x89, 0x00, 0x08, - 0xe1, 0x89, 0x00, 0x08, 0xd5, 0x56, 0x01, 0x08, 0x75, 0x56, 0x01, 0x08, - 0x4b, 0x89, 0x00, 0x08, 0xd9, 0x89, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x45, 0xf0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x49, 0xb0, 0x00, 0x08, 0x7d, 0xb0, 0x00, 0x08, - 0x45, 0xcb, 0x00, 0x08, 0x09, 0xcb, 0x00, 0x08, 0x63, 0xd2, 0x00, 0x08, - 0x75, 0x7e, 0x00, 0x08, 0xb3, 0xd1, 0x00, 0x08, 0x93, 0x7e, 0x00, 0x08, - 0x65, 0xae, 0x00, 0x08, 0x19, 0x82, 0x00, 0x08, 0xdd, 0xaf, 0x00, 0x08, - 0x7b, 0x7e, 0x00, 0x08, 0x43, 0xcf, 0x00, 0x08, 0x37, 0xca, 0x00, 0x08, - 0x29, 0xa9, 0x00, 0x08, 0x53, 0xc8, 0x00, 0x08, 0x2d, 0xc8, 0x00, 0x08, - 0x71, 0x7e, 0x00, 0x08, 0x31, 0xb4, 0x00, 0x08, 0xff, 0x81, 0x00, 0x08, - 0x81, 0x7e, 0x00, 0x08, 0xe5, 0x81, 0x00, 0x08, 0xc9, 0xb8, 0x00, 0x08, - 0x8d, 0xce, 0x00, 0x08, 0x9f, 0x8b, 0x00, 0x08, 0x13, 0xb6, 0x00, 0x08, - 0xcd, 0xb5, 0x00, 0x08, 0xcb, 0x81, 0x00, 0x08, 0xad, 0xb5, 0x00, 0x08, - 0x85, 0xcb, 0x00, 0x08, 0x45, 0xc7, 0x00, 0x08, 0x21, 0xba, 0x00, 0x08, - 0x99, 0xb0, 0x00, 0x08, 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x75, 0xb0, 0x00, 0x08, 0x8f, 0xb0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x45, 0xf0, 0x00, 0x08, 0x75, 0x7e, 0x00, 0x08, 0x7b, 0x7e, 0x00, 0x08, - 0x75, 0x7e, 0x00, 0x08, 0x75, 0x7e, 0x00, 0x08, 0x93, 0x7e, 0x00, 0x08, - 0x75, 0x7e, 0x00, 0x08, 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x45, 0xf0, 0x00, 0x08, 0x75, 0x7e, 0x00, 0x08, 0x7b, 0x7e, 0x00, 0x08, - 0x75, 0x7e, 0x00, 0x08, 0x75, 0x7e, 0x00, 0x08, 0x93, 0x7e, 0x00, 0x08, - 0x75, 0x7e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x8d, 0xc5, 0x00, 0x08, 0xc9, 0xc5, 0x00, 0x08, 0x45, 0xcb, 0x00, 0x08, - 0x09, 0xcb, 0x00, 0x08, 0x7b, 0xc2, 0x00, 0x08, 0xf1, 0xc0, 0x00, 0x08, - 0x69, 0xbf, 0x00, 0x08, 0x21, 0xc0, 0x00, 0x08, 0xfd, 0xbe, 0x00, 0x08, - 0xe5, 0xc5, 0x00, 0x08, 0x55, 0xc5, 0x00, 0x08, 0x2d, 0xc3, 0x00, 0x08, - 0x63, 0xcc, 0x00, 0x08, 0xa1, 0xbe, 0x00, 0x08, 0x69, 0xbe, 0x00, 0x08, - 0x31, 0xbe, 0x00, 0x08, 0x03, 0xbe, 0x00, 0x08, 0x71, 0x7e, 0x00, 0x08, - 0xad, 0xbd, 0x00, 0x08, 0x8d, 0xbd, 0x00, 0x08, 0x81, 0x7e, 0x00, 0x08, - 0x5d, 0xbd, 0x00, 0x08, 0x73, 0xbc, 0x00, 0x08, 0xd7, 0xcb, 0x00, 0x08, - 0x35, 0xbc, 0x00, 0x08, 0x25, 0xbb, 0x00, 0x08, 0xbf, 0xba, 0x00, 0x08, - 0x9f, 0xba, 0x00, 0x08, 0x65, 0xba, 0x00, 0x08, 0x85, 0xcb, 0x00, 0x08, - 0xfc, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc5, 0x00, 0x08, - 0xdb, 0xc5, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x75, 0x06, 0x01, 0x08, 0x25, 0x07, 0x01, 0x08, 0xf9, 0x05, 0x01, 0x08, - 0xe5, 0x05, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x75, 0xf5, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf9, 0xf0, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0x05, 0x01, 0x08, 0xd1, 0x05, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x85, 0xd4, 0x00, 0x08, 0x09, 0xd5, 0x00, 0x08, - 0x77, 0xc2, 0x95, 0xf3, 0x60, 0xd2, 0xef, 0x7f, 0x35, 0x52, 0x50, 0x0f, - 0x2c, 0xb6, 0x79, 0x80, 0x01, 0x05, 0x01, 0x00, 0x01, 0x05, 0x03, 0x02, - 0x04, 0x01, 0x04, 0x01, 0x03, 0x04, 0x03, 0x02, 0x04, 0x01, 0x04, 0x03, - 0x04, 0x02, 0x04, 0x01, 0x04, 0x01, 0x04, 0x03, 0x01, 0x03, 0x03, 0x04, - 0x01, 0x04, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x00, 0x2a, 0x86, - 0x48, 0xce, 0x3d, 0x02, 0x01, 0x00, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, - 0x01, 0x07, 0x00, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x00, - 0x40, 0x42, 0x0f, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x11, 0xda, 0x01, 0x08, 0x06, 0x20, 0x40, 0x00, 0x20, 0xdf, 0x01, 0x08, - 0xe0, 0x0d, 0x00, 0x24, 0x19, 0x09, 0x00, 0x08, 0x0d, 0x09, 0x00, 0x08, - 0xbd, 0x08, 0x00, 0x08, 0xad, 0x08, 0x00, 0x08, 0xf1, 0x08, 0x00, 0x08, - 0xd1, 0x08, 0x00, 0x08, 0x2d, 0xe8, 0x00, 0x08, 0x65, 0x09, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x53, 0x50, 0x49, 0x46, 0x00, 0x46, 0x4c, - 0x41, 0x53, 0x48, 0x49, 0x41, 0x50, 0x00, 0x2f, 0x00, 0x2e, 0x2e, 0x00, - 0x46, 0x41, 0x54, 0x33, 0x32, 0x20, 0x20, 0x20, 0x00, 0x2a, 0x2b, 0x2c, - 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x5b, 0x5d, 0x7c, 0x22, 0x3f, 0x7f, 0x00, - 0x6c, 0x69, 0x74, 0x74, 0x6c, 0x65, 0x66, 0x73, 0x00, 0x53, 0x46, 0x44, - 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xfb, 0xfe, 0xec, 0xea, - 0xf3, 0xef, 0xf7, 0xf3, 0xed, 0xed, 0xea, 0xfb, 0x8c, 0xf0, 0xf4, 0xe9, - 0xea, 0x80, 0x9a, 0x45, 0x41, 0x8e, 0x41, 0x8f, 0x80, 0x45, 0x45, 0x45, - 0x49, 0x49, 0x49, 0x8e, 0x8f, 0x90, 0x92, 0x92, 0x4f, 0x99, 0x4f, 0x55, - 0x55, 0x59, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x41, 0x49, 0x4f, - 0x55, 0xa5, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, - 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, - 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, - 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, - 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, - 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, - 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, - 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x64, 0x10, 0xb7, 0x1d, 0xc8, 0x20, 0x6e, 0x3b, - 0xac, 0x30, 0xd9, 0x26, 0x90, 0x41, 0xdc, 0x76, 0xf4, 0x51, 0x6b, 0x6b, - 0x58, 0x61, 0xb2, 0x4d, 0x3c, 0x71, 0x05, 0x50, 0x20, 0x83, 0xb8, 0xed, - 0x44, 0x93, 0x0f, 0xf0, 0xe8, 0xa3, 0xd6, 0xd6, 0x8c, 0xb3, 0x61, 0xcb, - 0xb0, 0xc2, 0x64, 0x9b, 0xd4, 0xd2, 0xd3, 0x86, 0x78, 0xe2, 0x0a, 0xa0, - 0x1c, 0xf2, 0xbd, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc5, 0x86, 0x00, 0x08, 0xdd, 0x8b, 0x00, 0x08, 0x57, 0x86, 0x00, 0x08, - 0x4f, 0x86, 0x00, 0x08, 0x47, 0x86, 0x00, 0x08, 0xfd, 0x85, 0x00, 0x08, - 0xb3, 0x85, 0x00, 0x08, 0x73, 0x85, 0x00, 0x08, 0x7f, 0x57, 0x01, 0x08, - 0x81, 0x84, 0x00, 0x08, 0x79, 0x84, 0x00, 0x08, 0x63, 0x84, 0x00, 0x08, - 0x49, 0x84, 0x00, 0x08, 0x41, 0x84, 0x00, 0x08, 0x2f, 0x84, 0x00, 0x08, - 0x25, 0x85, 0x00, 0x08, 0xd7, 0x84, 0x00, 0x08, 0x89, 0x84, 0x00, 0x08, - 0x27, 0x84, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3d, 0x80, 0x00, 0x08, 0x5f, 0x8b, 0x00, 0x08, 0xf5, 0x8b, 0x00, 0x08, - 0xe7, 0x7f, 0x00, 0x08, 0xd1, 0x7f, 0x00, 0x08, 0xc5, 0x7f, 0x00, 0x08, - 0xb9, 0x7f, 0x00, 0x08, 0xad, 0x7f, 0x00, 0x08, 0x19, 0x80, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x7f, 0x00, 0x08, - 0x4d, 0x8b, 0x00, 0x08, 0x17, 0x7f, 0x00, 0x08, 0x01, 0x7f, 0x00, 0x08, - 0xd3, 0x7e, 0x00, 0x08, 0x2d, 0x7f, 0x00, 0x08, 0xf5, 0x7e, 0x00, 0x08, - 0xe9, 0x7e, 0x00, 0x08, 0xc7, 0x7e, 0x00, 0x08, 0xbb, 0x7e, 0x00, 0x08, - 0xaf, 0x7e, 0x00, 0x08, 0x99, 0x7e, 0x00, 0x08, 0xc3, 0xe9, 0x00, 0x08, - 0xbf, 0xe9, 0x00, 0x08, 0xd3, 0xe7, 0x00, 0x08, 0xd3, 0xe7, 0x00, 0x08, - 0xd9, 0xe7, 0x00, 0x08, 0xb3, 0xe9, 0x00, 0x08, 0x5f, 0x7f, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x80, 0x00, 0x08, - 0x3b, 0x8b, 0x00, 0x08, 0xf5, 0x8b, 0x00, 0x08, 0x03, 0x80, 0x00, 0x08, - 0xd1, 0x7f, 0x00, 0x08, 0xc5, 0x7f, 0x00, 0x08, 0xb9, 0x7f, 0x00, 0x08, - 0xad, 0x7f, 0x00, 0x08, 0x19, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x99, 0x7f, 0x00, 0x08, 0x29, 0x8b, 0x00, 0x08, - 0x17, 0x7f, 0x00, 0x08, 0x01, 0x7f, 0x00, 0x08, 0xd3, 0x7e, 0x00, 0x08, - 0x49, 0x7f, 0x00, 0x08, 0xf5, 0x7e, 0x00, 0x08, 0xe9, 0x7e, 0x00, 0x08, - 0xc7, 0x7e, 0x00, 0x08, 0xbb, 0x7e, 0x00, 0x08, 0xaf, 0x7e, 0x00, 0x08, - 0x99, 0x7e, 0x00, 0x08, 0xc3, 0xe9, 0x00, 0x08, 0xbf, 0xe9, 0x00, 0x08, - 0xd3, 0xe7, 0x00, 0x08, 0xd3, 0xe7, 0x00, 0x08, 0xd9, 0xe7, 0x00, 0x08, - 0xb3, 0xe9, 0x00, 0x08, 0x5f, 0x7f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, 0x52, 0x54, - 0x58, 0x20, 0x56, 0x35, 0x2e, 0x35, 0x2e, 0x33, 0x00, 0x01, 0x02, 0x04, - 0x98, 0x2f, 0x8a, 0x42, 0x91, 0x44, 0x37, 0x71, 0xcf, 0xfb, 0xc0, 0xb5, - 0xa5, 0xdb, 0xb5, 0xe9, 0x5b, 0xc2, 0x56, 0x39, 0xf1, 0x11, 0xf1, 0x59, - 0xa4, 0x82, 0x3f, 0x92, 0xd5, 0x5e, 0x1c, 0xab, 0x98, 0xaa, 0x07, 0xd8, - 0x01, 0x5b, 0x83, 0x12, 0xbe, 0x85, 0x31, 0x24, 0xc3, 0x7d, 0x0c, 0x55, - 0x74, 0x5d, 0xbe, 0x72, 0xfe, 0xb1, 0xde, 0x80, 0xa7, 0x06, 0xdc, 0x9b, - 0x74, 0xf1, 0x9b, 0xc1, 0xc1, 0x69, 0x9b, 0xe4, 0x86, 0x47, 0xbe, 0xef, - 0xc6, 0x9d, 0xc1, 0x0f, 0xcc, 0xa1, 0x0c, 0x24, 0x6f, 0x2c, 0xe9, 0x2d, - 0xaa, 0x84, 0x74, 0x4a, 0xdc, 0xa9, 0xb0, 0x5c, 0xda, 0x88, 0xf9, 0x76, - 0x52, 0x51, 0x3e, 0x98, 0x6d, 0xc6, 0x31, 0xa8, 0xc8, 0x27, 0x03, 0xb0, - 0xc7, 0x7f, 0x59, 0xbf, 0xf3, 0x0b, 0xe0, 0xc6, 0x47, 0x91, 0xa7, 0xd5, - 0x51, 0x63, 0xca, 0x06, 0x67, 0x29, 0x29, 0x14, 0x85, 0x0a, 0xb7, 0x27, - 0x38, 0x21, 0x1b, 0x2e, 0xfc, 0x6d, 0x2c, 0x4d, 0x13, 0x0d, 0x38, 0x53, - 0x54, 0x73, 0x0a, 0x65, 0xbb, 0x0a, 0x6a, 0x76, 0x2e, 0xc9, 0xc2, 0x81, - 0x85, 0x2c, 0x72, 0x92, 0xa1, 0xe8, 0xbf, 0xa2, 0x4b, 0x66, 0x1a, 0xa8, - 0x70, 0x8b, 0x4b, 0xc2, 0xa3, 0x51, 0x6c, 0xc7, 0x19, 0xe8, 0x92, 0xd1, - 0x24, 0x06, 0x99, 0xd6, 0x85, 0x35, 0x0e, 0xf4, 0x70, 0xa0, 0x6a, 0x10, - 0x16, 0xc1, 0xa4, 0x19, 0x08, 0x6c, 0x37, 0x1e, 0x4c, 0x77, 0x48, 0x27, - 0xb5, 0xbc, 0xb0, 0x34, 0xb3, 0x0c, 0x1c, 0x39, 0x4a, 0xaa, 0xd8, 0x4e, - 0x4f, 0xca, 0x9c, 0x5b, 0xf3, 0x6f, 0x2e, 0x68, 0xee, 0x82, 0x8f, 0x74, - 0x6f, 0x63, 0xa5, 0x78, 0x14, 0x78, 0xc8, 0x84, 0x08, 0x02, 0xc7, 0x8c, - 0xfa, 0xff, 0xbe, 0x90, 0xeb, 0x6c, 0x50, 0xa4, 0xf7, 0xa3, 0xf9, 0xbe, - 0xf2, 0x78, 0x71, 0xc6, 0x29, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x2b, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x27, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x52, - 0xd2, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x2f, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, - 0xd2, 0x0f, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x1b, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x2f, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, - 0xd2, 0x3b, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, - 0xd2, 0x23, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, - 0xd2, 0x3b, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, - 0xd2, 0x13, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, - 0xd2, 0x0f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x1b, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x2f, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x2f, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, - 0xd2, 0x3b, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x58, - 0xd2, 0x23, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, - 0xd2, 0x3b, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, - 0xd2, 0x13, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, - 0xd2, 0x1f, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, - 0xd2, 0x23, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x85, 0xe7, 0x00, 0x08, 0x19, 0xf0, 0x00, 0x08, 0x85, 0xf0, 0x00, 0x08, - 0x89, 0xe7, 0x00, 0x08, 0xc7, 0xe7, 0x00, 0x08, 0xb9, 0xe7, 0x00, 0x08, - 0xb9, 0xe7, 0x00, 0x08, 0xbd, 0xe7, 0x00, 0x08, 0x09, 0xea, 0x00, 0x08, - 0xff, 0xe9, 0x00, 0x08, 0xc1, 0xe7, 0x00, 0x08, 0xf9, 0xe9, 0x00, 0x08, - 0xc3, 0xe9, 0x00, 0x08, 0xbf, 0xe9, 0x00, 0x08, 0xd3, 0xe7, 0x00, 0x08, - 0xd3, 0xe7, 0x00, 0x08, 0x4d, 0xf0, 0x00, 0x08, 0xb3, 0xe9, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xf5, 0x00, 0x08, - 0x2f, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x00, 0x2f, 0x73, 0x74, 0x64, - 0x69, 0x6e, 0x00, 0x2f, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x00, 0x30, - 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, - 0x64, 0x65, 0x66, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x00, 0x4b, 0x60, 0xd2, 0x27, - 0x3e, 0x3c, 0xce, 0x3b, 0xf6, 0xb0, 0x53, 0xcc, 0xb0, 0x06, 0x1d, 0x65, - 0xbc, 0x86, 0x98, 0x76, 0x55, 0xbd, 0xeb, 0xb3, 0xe7, 0x93, 0x3a, 0xaa, - 0xd8, 0x35, 0xc6, 0x5a, 0x96, 0xc2, 0x98, 0xd8, 0x45, 0x39, 0xa1, 0xf4, - 0xa0, 0x33, 0xeb, 0x2d, 0x81, 0x7d, 0x03, 0x77, 0xf2, 0x40, 0xa4, 0x63, - 0xe5, 0xe6, 0xbc, 0xf8, 0x47, 0x42, 0x2c, 0xe1, 0xf2, 0xd1, 0x17, 0x6b, - 0xf5, 0x51, 0xbf, 0x37, 0x68, 0x40, 0xb6, 0xcb, 0xce, 0x5e, 0x31, 0x6b, - 0x57, 0x33, 0xce, 0x2b, 0x16, 0x9e, 0x0f, 0x7c, 0x4a, 0xeb, 0xe7, 0x8e, - 0x9b, 0x7f, 0x1a, 0xfe, 0xe2, 0x42, 0xe3, 0x4f, 0x51, 0x25, 0x63, 0xfc, - 0xc2, 0xca, 0xb9, 0xf3, 0x84, 0x9e, 0x17, 0xa7, 0xad, 0xfa, 0xe6, 0xbc, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x53, 0x44, 0x43, 0x41, 0x52, 0x44, 0x00, 0x46, 0x49, 0x4c, 0x45, 0x42, - 0x44, 0x00, 0x44, 0x46, 0x55, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x00, 0x44, 0x46, 0x55, 0x20, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x00, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x20, 0x53, - 0x41, 0x00, 0x50, 0x6f, 0x72, 0x74, 0x65, 0x6e, 0x74, 0x61, 0x20, 0x4d, - 0x43, 0x55, 0x42, 0x6f, 0x6f, 0x74, 0x00, 0x45, 0x2d, 0x45, 0x72, 0x61, - 0x73, 0x65, 0x3a, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x45, 0x2d, 0x45, 0x72, 0x61, 0x73, - 0x65, 0x3a, 0x66, 0x73, 0x65, 0x65, 0x6b, 0x00, 0x45, 0x2d, 0x45, 0x72, - 0x61, 0x73, 0x65, 0x3a, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x25, - 0x64, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x30, 0x78, 0x25, 0x7a, - 0x78, 0x0a, 0x00, 0x45, 0x2d, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x3a, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x61, 0x6e, - 0x64, 0x6c, 0x65, 0x00, 0x45, 0x2d, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x3a, 0x66, 0x73, 0x65, 0x65, 0x6b, 0x00, 0x45, 0x2d, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x3a, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x20, 0x25, 0x64, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x30, 0x78, - 0x25, 0x7a, 0x78, 0x0a, 0x00, 0x45, 0x2d, 0x52, 0x65, 0x61, 0x64, 0x3a, - 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x61, 0x6e, 0x64, - 0x6c, 0x65, 0x00, 0x45, 0x2d, 0x52, 0x65, 0x61, 0x64, 0x3a, 0x66, 0x73, - 0x65, 0x65, 0x6b, 0x00, 0x45, 0x2d, 0x52, 0x65, 0x61, 0x64, 0x3a, 0x68, - 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x20, 0x25, 0x64, 0x20, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x20, 0x30, 0x78, 0x25, 0x7a, 0x78, 0x0a, 0x00, 0x45, 0x2d, - 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, - 0x66, 0x69, 0x6c, 0x65, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x25, 0x73, 0x20, 0x25, 0x73, 0x0a, - 0x00, 0x45, 0x2d, 0x49, 0x6e, 0x69, 0x74, 0x3a, 0x66, 0x73, 0x65, 0x65, - 0x6b, 0x00, 0x57, 0x2d, 0x46, 0x69, 0x6c, 0x65, 0x20, 0x25, 0x73, 0x20, - 0x73, 0x69, 0x7a, 0x65, 0x20, 0x28, 0x30, 0x78, 0x25, 0x7a, 0x78, 0x29, - 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x75, - 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x28, - 0x30, 0x78, 0x25, 0x7a, 0x78, 0x29, 0x0a, 0x00, 0x53, 0x65, 0x74, 0x53, - 0x79, 0x73, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x66, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x0a, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x45, 0x2d, 0x52, - 0x54, 0x43, 0x47, 0x65, 0x74, 0x42, 0x4b, 0x50, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x00, 0x49, 0x2d, 0x4d, 0x43, 0x55, 0x62, 0x6f, - 0x6f, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x66, - 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x00, 0x45, 0x2d, 0x48, 0x41, 0x4c, 0x5f, - 0x52, 0x54, 0x43, 0x5f, 0x49, 0x6e, 0x69, 0x74, 0x00, 0x40, 0x4d, 0x43, - 0x55, 0x42, 0x6f, 0x6f, 0x74, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x25, 0x64, 0x20, 0x2f, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x2f, 0x30, 0x2a, 0x34, 0x4b, 0x67, 0x00, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x74, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x74, - 0x65, 0x78, 0x00, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x6d, 0x75, - 0x74, 0x65, 0x78, 0x00, 0x65, 0x6e, 0x76, 0x5f, 0x6d, 0x75, 0x74, 0x65, - 0x78, 0x00, 0x49, 0x2d, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x4f, - 0x54, 0x41, 0x20, 0x64, 0x61, 0x74, 0x61, 0x00, 0x49, 0x2d, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x20, 0x5b, 0x25, 0x64, 0x5d, - 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x0a, 0x00, 0x49, 0x2d, 0x53, 0x63, 0x72, - 0x61, 0x74, 0x63, 0x68, 0x20, 0x5b, 0x25, 0x64, 0x5d, 0x20, 0x5b, 0x25, - 0x64, 0x5d, 0x0a, 0x00, 0x49, 0x2d, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x20, 0x4f, 0x54, 0x41, 0x20, 0x64, 0x61, 0x74, 0x61, 0x00, 0x45, - 0x2d, 0x55, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x41, 0x50, 0x00, 0x45, 0x2d, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x00, 0x45, 0x2d, 0x42, 0x44, 0x20, - 0x55, 0x21, 0x53, 0x00, 0x45, 0x2d, 0x4d, 0x42, 0x52, 0x20, 0x55, 0x21, - 0x53, 0x00, 0x45, 0x2d, 0x49, 0x6e, 0x69, 0x74, 0x00, 0x45, 0x2d, 0x4d, - 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x2f, 0x66, 0x73, 0x2f, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x72, 0x62, 0x2b, 0x00, - 0x2f, 0x66, 0x73, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, 0x68, 0x2e, - 0x62, 0x69, 0x6e, 0x00, 0x45, 0x2d, 0x55, 0x20, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x00, 0x45, 0x2d, 0x53, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x41, - 0x50, 0x00, 0x45, 0x2d, 0x53, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x00, 0x45, 0x2d, 0x49, 0x6e, 0x69, 0x74, 0x20, 0x55, 0x20, 0x4d, 0x42, - 0x52, 0x00, 0x45, 0x2d, 0x49, 0x6e, 0x69, 0x74, 0x20, 0x53, 0x20, 0x4d, - 0x42, 0x52, 0x00, 0x73, 0x65, 0x63, 0x00, 0x45, 0x2d, 0x4d, 0x6f, 0x75, - 0x6e, 0x74, 0x20, 0x55, 0x20, 0x6f, 0x6e, 0x20, 0x4c, 0x4f, 0x47, 0x00, - 0x2f, 0x73, 0x65, 0x63, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x62, 0x69, 0x6e, 0x00, 0x73, 0x63, 0x72, 0x00, 0x45, 0x2d, 0x4d, 0x6f, - 0x75, 0x6e, 0x74, 0x20, 0x53, 0x20, 0x6f, 0x6e, 0x20, 0x4c, 0x4f, 0x47, - 0x00, 0x2f, 0x73, 0x63, 0x72, 0x2f, 0x73, 0x63, 0x72, 0x61, 0x74, 0x63, - 0x68, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x72, 0x74, 0x78, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x72, 0x00, 0x72, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x6c, 0x65, - 0x00, 0x40, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x46, - 0x6c, 0x61, 0x73, 0x68, 0x20, 0x20, 0x32, 0x4d, 0x42, 0x20, 0x20, 0x20, - 0x2f, 0x30, 0x78, 0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2f, - 0x30, 0x31, 0x2a, 0x31, 0x32, 0x38, 0x4b, 0x61, 0x2c, 0x31, 0x35, 0x2a, - 0x31, 0x32, 0x38, 0x4b, 0x67, 0x00, 0x40, 0x45, 0x78, 0x74, 0x20, 0x52, - 0x41, 0x57, 0x20, 0x20, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x31, 0x36, - 0x4d, 0x42, 0x20, 0x20, 0x20, 0x2f, 0x30, 0x78, 0x39, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x2f, 0x34, 0x30, 0x39, 0x36, 0x2a, 0x34, 0x4b, - 0x67, 0x00, 0x40, 0x45, 0x78, 0x74, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x20, - 0x46, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x31, 0x36, 0x4d, 0x42, 0x20, 0x20, - 0x20, 0x2f, 0x30, 0x78, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x2f, 0x34, 0x30, 0x39, 0x36, 0x2a, 0x34, 0x4b, 0x67, 0x00, 0x00, 0x00, - 0xd7, 0xe9, 0x01, 0x08, 0x0b, 0x00, 0x00, 0x00, 0x20, 0xa8, 0x00, 0x24, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x90, 0xa0, 0x00, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0xb8, 0xed, 0x01, 0x08, 0xf4, 0xed, 0x01, 0x08, - 0x0d, 0x79, 0x01, 0x08, 0x75, 0x5d, 0x01, 0x08, 0xdc, 0xed, 0x01, 0x08, - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe1, 0x80, 0x01, 0x08, 0x01, 0x81, 0x01, 0x08, 0x01, 0x6b, 0x01, 0x08, - 0x7d, 0x5e, 0x01, 0x08, 0xb9, 0xe7, 0x00, 0x08, 0xa5, 0x68, 0x01, 0x08, - 0x69, 0x66, 0x01, 0x08, 0xb5, 0x64, 0x01, 0x08, 0x7f, 0x57, 0x01, 0x08, - 0x07, 0x56, 0x01, 0x08, 0x01, 0x56, 0x01, 0x08, 0xfb, 0x55, 0x01, 0x08, - 0xb9, 0x57, 0x01, 0x08, 0xb3, 0x57, 0x01, 0x08, 0xe5, 0x55, 0x01, 0x08, - 0xd5, 0x56, 0x01, 0x08, 0x75, 0x56, 0x01, 0x08, 0x0d, 0x56, 0x01, 0x08, - 0xdd, 0x55, 0x01, 0x08, 0x53, 0x75, 0x01, 0x08, 0x4d, 0x75, 0x01, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc9, 0xb9, 0x00, 0x08, - 0xe9, 0x8b, 0x00, 0x08, 0x45, 0xd3, 0x00, 0x08, 0x7d, 0x8e, 0x00, 0x08, - 0x5f, 0x88, 0x00, 0x08, 0x0b, 0x88, 0x00, 0x08, 0xb7, 0x87, 0x00, 0x08, - 0x71, 0x87, 0x00, 0x08, 0x7f, 0x57, 0x01, 0x08, 0x5d, 0x87, 0x00, 0x08, - 0x49, 0x87, 0x00, 0x08, 0x35, 0x87, 0x00, 0x08, 0x0d, 0x87, 0x00, 0x08, - 0xf9, 0x86, 0x00, 0x08, 0xf3, 0x86, 0x00, 0x08, 0xd5, 0x56, 0x01, 0x08, - 0x75, 0x56, 0x01, 0x08, 0x0d, 0x56, 0x01, 0x08, 0xc7, 0x86, 0x00, 0x08, - 0xed, 0x86, 0x00, 0x08, 0xdb, 0x86, 0x00, 0x08, 0xd7, 0x86, 0x00, 0x08, - 0xd3, 0x86, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7d, 0x57, 0x01, 0x08, 0x6d, 0x64, 0x01, 0x08, 0x9d, 0x76, 0x01, 0x08, - 0x91, 0x76, 0x01, 0x08, 0x79, 0x57, 0x01, 0x08, 0x31, 0x76, 0x01, 0x08, - 0xdd, 0x75, 0x01, 0x08, 0x59, 0x75, 0x01, 0x08, 0x7f, 0x57, 0x01, 0x08, - 0x55, 0x57, 0x01, 0x08, 0x4f, 0x57, 0x01, 0x08, 0x49, 0x57, 0x01, 0x08, - 0x43, 0x57, 0x01, 0x08, 0xb7, 0x88, 0x00, 0x08, 0x3d, 0x57, 0x01, 0x08, - 0x5b, 0x57, 0x01, 0x08, 0x5b, 0x57, 0x01, 0x08, 0x5b, 0x57, 0x01, 0x08, - 0x35, 0x57, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x07, 0x01, 0x08, 0x37, 0x07, 0x01, 0x08, 0xd9, 0x55, 0x01, 0x08, - 0x61, 0x64, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x38, 0xeb, 0x01, 0x08, - 0x00, 0x00, 0x00, 0x00, 0xdc, 0xa1, 0x00, 0x24, 0x44, 0x00, 0x00, 0x00, - 0x20, 0xa2, 0x00, 0x24, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xd0, 0xa0, 0x00, 0x24, 0x34, 0x00, 0x00, 0x00, - 0x04, 0xa1, 0x00, 0x24, 0x50, 0x00, 0x00, 0x00, 0x2e, 0xeb, 0x01, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x98, 0xa1, 0x00, 0x24, 0x44, 0x00, 0x00, 0x00, - 0x20, 0xa5, 0x00, 0x24, 0x00, 0x03, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa0, 0x04, 0x08, 0x01, 0x01, 0x01, 0x08, 0x10, - 0x01, 0x01, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x15, 0xfe, 0x7f, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x90, 0xd0, 0x03, 0x70, 0x06, 0x00, 0x24, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xa8, 0x00, 0x24, 0xed, 0xb3, 0x01, 0x08, 0x01, 0x00, 0x00, 0x00, - 0xba, 0xe1, 0x01, 0x08, 0xd3, 0xb3, 0xfb, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x58, 0x01, 0x08, - 0x25, 0x58, 0x01, 0x08, 0xa5, 0x58, 0x01, 0x08, 0xbd, 0x58, 0x01, 0x08, - 0xe5, 0x57, 0x01, 0x08, 0x8d, 0x58, 0x01, 0x08, 0x75, 0x58, 0x01, 0x08, - 0x65, 0x77, 0x01, 0x08, 0x79, 0x64, 0x01, 0x08, 0x69, 0x5f, 0x01, 0x08, - 0xfd, 0x62, 0x01, 0x08, 0x41, 0x59, 0x01, 0x08, 0x31, 0x59, 0x01, 0x08, - 0x35, 0x59, 0x01, 0x08, 0x45, 0x59, 0x01, 0x08, 0x3d, 0x59, 0x01, 0x08, - 0x39, 0x59, 0x01, 0x08, 0x49, 0x59, 0x01, 0x08, 0x49, 0x59, 0x01, 0x08, - 0x49, 0x59, 0x01, 0x08, 0x25, 0x59, 0x01, 0x08, 0x01, 0x59, 0x01, 0x08, - 0x41, 0xeb, 0x01, 0x08, 0x76, 0xeb, 0x01, 0x08, 0xa2, 0xeb, 0x01, 0x08, - 0xf4, 0x86, 0x00, 0x24, 0xdd, 0x7f, 0x01, 0x08, 0x51, 0x78, 0x01, 0x08, - 0xdd, 0x77, 0x01, 0x08, 0x81, 0x7c, 0x01, 0x08, 0x0d, 0x77, 0x01, 0x08, - 0xa9, 0x57, 0x01, 0x08, 0x12, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, - 0x41, 0x23, 0x5b, 0x03, 0x00, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x00, - 0x04, 0x03, 0x09, 0x04, 0x32, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0x02, 0x78, 0x00, - 0x03, 0x01, 0x02, 0xc0, 0xfa, 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, - 0x02, 0x06, 0x09, 0x04, 0x00, 0x01, 0x00, 0xfe, 0x01, 0x02, 0x07, 0x09, - 0x04, 0x00, 0x02, 0x00, 0xfe, 0x01, 0x02, 0x08, 0x09, 0x04, 0x00, 0x03, - 0x00, 0xfe, 0x01, 0x02, 0x09, 0x09, 0x21, 0x0b, 0xff, 0x00, 0x00, 0x10, - 0x1a, 0x01, 0x08, 0x0b, 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x09, 0x04, - 0x01, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00, 0x05, 0x24, 0x00, 0x10, 0x01, - 0x05, 0x24, 0x01, 0x00, 0x02, 0x04, 0x24, 0x02, 0x02, 0x05, 0x24, 0x06, - 0x01, 0x02, 0x07, 0x05, 0x83, 0x03, 0x08, 0x08, 0x09, 0x09, 0x04, 0x02, - 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02, 0x00, 0x02, - 0x00, 0x07, 0x05, 0x82, 0x02, 0x00, 0x02, 0x00, 0x0a, 0x06, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x01, 0x14, 0x14, 0x03, 0x00, 0x24, - 0x00, 0x00, 0x00, 0x00, 0x34, 0xd2, 0x01, 0x08, 0x54, 0xd2, 0x01, 0x08, - 0x14, 0xd2, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdb, 0xd2, 0x01, 0x08, 0xdb, 0xd2, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x68, 0xa8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x25, 0x05, 0x00, 0x08, 0x1d, 0x26, 0x00, 0x08, 0x01, 0x05, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00 -}; -unsigned int mcuboot_bin_len = 128008; diff --git a/libraries/SocketWrapper/src/MbedClient.cpp b/libraries/SocketWrapper/src/MbedClient.cpp index ad1a14cbc..538005799 100644 --- a/libraries/SocketWrapper/src/MbedClient.cpp +++ b/libraries/SocketWrapper/src/MbedClient.cpp @@ -21,7 +21,6 @@ void arduino::MbedClient::readSocket() { do { if (rxBuffer.availableForStore() == 0) { yield(); - delay(100); continue; } mutex->lock(); @@ -34,7 +33,6 @@ void arduino::MbedClient::readSocket() { } if (ret == NSAPI_ERROR_WOULD_BLOCK || ret == 0) { yield(); - delay(100); mutex->unlock(); continue; } @@ -71,7 +69,7 @@ void arduino::MbedClient::configureSocket(Socket *_s) { } mutex->lock(); if (reader_th == nullptr) { - reader_th = new rtos::Thread; + reader_th = new rtos::Thread(osPriorityNormal - 2); reader_th->start(mbed::callback(this, &MbedClient::readSocket)); } mutex->unlock(); @@ -80,6 +78,15 @@ void arduino::MbedClient::configureSocket(Socket *_s) { } int arduino::MbedClient::connect(SocketAddress socketAddress) { + + if (sock && reader_th) { + // trying to reuse a connection, let's call stop() to cleanup the state + char c; + if (sock->recv(&c, 1) < 0) { + stop(); + } + } + if (sock == nullptr) { sock = new TCPSocket(); _own_socket = true; @@ -206,7 +213,7 @@ size_t arduino::MbedClient::write(const uint8_t *buf, size_t size) { int ret = NSAPI_ERROR_WOULD_BLOCK; do { ret = sock->send(buf, size); - } while (ret != size && connected()); + } while ((ret != size && ret == NSAPI_ERROR_WOULD_BLOCK) && connected()); configureSocket(sock); return size; } diff --git a/libraries/SocketWrapper/src/MbedClient.h b/libraries/SocketWrapper/src/MbedClient.h index 07e615cae..a2132ebf3 100644 --- a/libraries/SocketWrapper/src/MbedClient.h +++ b/libraries/SocketWrapper/src/MbedClient.h @@ -73,7 +73,7 @@ class MbedClient : public arduino::Client { int connectSSL(IPAddress ip, uint16_t port); int connectSSL(const char* host, uint16_t port, bool disableSNI = false); size_t write(uint8_t); - size_t write(const uint8_t* buf, size_t size); + size_t write(const uint8_t* buf, size_t size) override; int available(); int read(); int read(uint8_t* buf, size_t size); diff --git a/libraries/openamp_arduino/src/openamp.c b/libraries/openamp_arduino/src/openamp.c index af466faa1..43180dadd 100644 --- a/libraries/openamp_arduino/src/openamp.c +++ b/libraries/openamp_arduino/src/openamp.c @@ -167,12 +167,14 @@ int OPENAMP_check_for_message(void) return MAILBOX_Poll(rvdev.vdev); } -void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t timeout) +unsigned long millis(); + +void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline) { - while(!is_rpmsg_ept_ready(rp_ept) && (HAL_GetTick() < timeout)) { + while(!is_rpmsg_ept_ready(rp_ept) && (millis() < deadline)) { MAILBOX_Poll(rvdev.vdev); } - if (HAL_GetTick() >= timeout) { + if (millis() >= deadline) { printf("OPENAMP_Wait_EndPointready %X timed out\n\r", (unsigned int)rp_ept); } } diff --git a/libraries/openamp_arduino/src/openamp.h b/libraries/openamp_arduino/src/openamp.h index c6f87b456..44ada3b33 100644 --- a/libraries/openamp_arduino/src/openamp.h +++ b/libraries/openamp_arduino/src/openamp.h @@ -49,7 +49,7 @@ int OPENAMP_create_endpoint(struct rpmsg_endpoint *ept, const char *name, int OPENAMP_check_for_message(void); /* Wait loop on endpoint ready ( message dest address is know)*/ -void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t timeout); +void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline); #ifdef __cplusplus } diff --git a/nano.variables b/nano.variables index 96e46ebf5..1cba7139a 100644 --- a/nano.variables +++ b/nano.variables @@ -1,5 +1,5 @@ export FLAVOUR="nano" export VARIANTS=("NANO_RP2040_CONNECT ARDUINO_NANO33BLE") export FQBNS=("nanorp2040connect nano33ble") -export LIBRARIES=("PDM SPI Wire MRI USBHID USBMSD ThreadDebug Scheduler SFU Nano33BLE_System SocketWrapper") +export LIBRARIES=("PDM SPI Wire MRI USBHID USBMSD ThreadDebug Scheduler SFU Nano33BLE_System SocketWrapper MLC") export BOOTLOADERS=("nano33ble") diff --git a/nicla.variables b/nicla.variables index f956d728a..99cb98d22 100644 --- a/nicla.variables +++ b/nicla.variables @@ -1,5 +1,5 @@ export FLAVOUR="nicla" export VARIANTS=("NICLA NICLA_VISION") export FQBNS=("nicla_sense nicla_vision") -export LIBRARIES=("SPI Wire Scheduler Nicla_System WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug GC2145 Himax_HM01B0 PDM KernelDebug RPC USBHID Camera rpclib USBHOST mbed-memory-status USBMSD SocketWrapper MRI SE05X") +export LIBRARIES=("SPI Wire Scheduler Nicla_System WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug GC2145 Himax_HM01B0 PDM KernelDebug RPC USBHID Camera rpclib USBHOST mbed-memory-status USBMSD SocketWrapper MRI SE05X MLC") export BOOTLOADERS=("NICLA NICLA_VISION") diff --git a/package_full.sh b/package_full.sh index 9d5ab3362..f4bc91436 100755 --- a/package_full.sh +++ b/package_full.sh @@ -1,5 +1,5 @@ #Get version from git(hub) tag -export VERSION="3.0.1" +export VERSION="3.1.1" FLAVOURS=`ls *.variables` diff --git a/patches/0001-PACKAGING-remove-gdb-exta-information-to-slim-librar.patch b/patches/0001-PACKAGING-remove-gdb-exta-information-to-slim-librar.patch index 8a16e6ea6..e7d016470 100644 --- a/patches/0001-PACKAGING-remove-gdb-exta-information-to-slim-librar.patch +++ b/patches/0001-PACKAGING-remove-gdb-exta-information-to-slim-librar.patch @@ -1,7 +1,7 @@ From 3d7f8d18abca4e6132611fe544bf94b5d3483af3 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 11 Mar 2021 15:05:20 +0100 -Subject: [PATCH 001/138] PACKAGING: remove gdb exta information to slim +Subject: [PATCH 001/157] PACKAGING: remove gdb exta information to slim library --- @@ -22,5 +22,5 @@ index 21ba5c88d5..5995d276e4 100644 "c": ["-c", "-std=gnu11"], "cxx": ["-c", "-std=gnu++14", "-fno-rtti", "-Wvla"], -- -2.25.1 +2.36.0 diff --git a/patches/0002-Portenta-enable-certificates-in-filesystem.patch b/patches/0002-Portenta-enable-certificates-in-filesystem.patch index d2a0f14b9..892dadaa9 100644 --- a/patches/0002-Portenta-enable-certificates-in-filesystem.patch +++ b/patches/0002-Portenta-enable-certificates-in-filesystem.patch @@ -1,7 +1,7 @@ From cb1899e821138682f821ef80b4d1480c013ad3bd Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 28 Oct 2020 15:26:21 +0100 -Subject: [PATCH 002/138] Portenta: enable certificates in filesystem +Subject: [PATCH 002/157] Portenta: enable certificates in filesystem --- targets/targets.json | 2 ++ @@ -21,5 +21,5 @@ index f4d4055553..8732ee0ba8 100644 "QSPI_NO_SAMPLE_SHIFT", "CYW43XXX_UNBUFFERED_UART" -- -2.25.1 +2.36.0 diff --git a/patches/0003-I2CSlave.read-buf-count-returns-the-number-of-bytes-.patch b/patches/0003-I2CSlave.read-buf-count-returns-the-number-of-bytes-.patch index 9042ca9f8..b3c09aff6 100644 --- a/patches/0003-I2CSlave.read-buf-count-returns-the-number-of-bytes-.patch +++ b/patches/0003-I2CSlave.read-buf-count-returns-the-number-of-bytes-.patch @@ -1,7 +1,7 @@ From 3659582e80ee60cd6f393318f54c51b90ef6703e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 1 Apr 2020 12:21:59 +0200 -Subject: [PATCH 003/138] I2CSlave.read(buf, count) returns the number of bytes +Subject: [PATCH 003/157] I2CSlave.read(buf, count) returns the number of bytes actually read --- @@ -36,5 +36,5 @@ index 4317df9656..e4515820ad 100644 int I2CSlave::read(void) -- -2.25.1 +2.36.0 diff --git a/patches/0004-Add-AnalogIn-configure-function.patch b/patches/0004-Add-AnalogIn-configure-function.patch index 5340553c8..986ce7a45 100644 --- a/patches/0004-Add-AnalogIn-configure-function.patch +++ b/patches/0004-Add-AnalogIn-configure-function.patch @@ -1,7 +1,7 @@ From 7abd4be4ee59e6e96f250f9a79c5d70d365a2417 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Wed, 13 May 2020 11:59:46 +0200 -Subject: [PATCH 004/138] Add AnalogIn configure function +Subject: [PATCH 004/157] Add AnalogIn configure function This adds a weak method to configure AnalogIn objects. Also, a strong implementation of such method for NRF5284 is provided. @@ -169,5 +169,5 @@ index 41b87722ac..4466f680c7 100644 uint32_t ch; }; -- -2.25.1 +2.36.0 diff --git a/patches/0005-HACK-avoid-10862-by-not-firing-the-assert.patch b/patches/0005-HACK-avoid-10862-by-not-firing-the-assert.patch index a62f986de..696fad450 100644 --- a/patches/0005-HACK-avoid-10862-by-not-firing-the-assert.patch +++ b/patches/0005-HACK-avoid-10862-by-not-firing-the-assert.patch @@ -1,7 +1,7 @@ From 5722a9ef477e5a3f4470898c7028633f1f004ff6 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 31 Jul 2019 12:48:04 +0200 -Subject: [PATCH 005/138] HACK: avoid #10862 by not firing the assert +Subject: [PATCH 005/157] HACK: avoid #10862 by not firing the assert --- drivers/usb/source/USBDevice.cpp | 18 ++++++++++-------- @@ -44,5 +44,5 @@ index 6d3cfc87d4..ddeabcfa15 100644 } -- -2.25.1 +2.36.0 diff --git a/patches/0006-portentaH7-Change-BLE-public-address.patch b/patches/0006-portentaH7-Change-BLE-public-address.patch index 69d1dd446..5a7085fb2 100644 --- a/patches/0006-portentaH7-Change-BLE-public-address.patch +++ b/patches/0006-portentaH7-Change-BLE-public-address.patch @@ -1,7 +1,7 @@ From 7670c4f59b63a06fea0fc6dcd96af6976a548317 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Thu, 29 Oct 2020 15:40:32 +0100 -Subject: [PATCH 006/138] portentaH7: Change BLE public address +Subject: [PATCH 006/157] portentaH7: Change BLE public address --- .../ble/FEATURE_BLE/COMPONENT_CYW43XXX/HCIDriver.cpp | 11 +++++++++++ @@ -37,5 +37,5 @@ index 957e37594b..ff389c9f81 100644 } else { } -- -2.25.1 +2.36.0 diff --git a/patches/0007-TLSSocketWrapper-add-method-to-retrieve-certificates.patch b/patches/0007-TLSSocketWrapper-add-method-to-retrieve-certificates.patch index 6dfd7fa47..385548d31 100644 --- a/patches/0007-TLSSocketWrapper-add-method-to-retrieve-certificates.patch +++ b/patches/0007-TLSSocketWrapper-add-method-to-retrieve-certificates.patch @@ -1,7 +1,7 @@ From d1ded30e5559b403dd49378bfaf9e7fab87d4ffa Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 9 Nov 2020 10:00:01 +0100 -Subject: [PATCH 007/138] TLSSocketWrapper: add method to retrieve certificates +Subject: [PATCH 007/157] TLSSocketWrapper: add method to retrieve certificates from filesystem --- @@ -90,5 +90,5 @@ index cebaf04703..8202151eb7 100644 { return set_client_cert_key(client_cert_pem, strlen(client_cert_pem) + 1, client_private_key_pem, strlen(client_private_key_pem) + 1); -- -2.25.1 +2.36.0 diff --git a/patches/0008-TLSSocketWrapper-Add-unit-test-for-set_root_ca_cert_.patch b/patches/0008-TLSSocketWrapper-Add-unit-test-for-set_root_ca_cert_.patch index dd98e2d71..52da07c9e 100644 --- a/patches/0008-TLSSocketWrapper-Add-unit-test-for-set_root_ca_cert_.patch +++ b/patches/0008-TLSSocketWrapper-Add-unit-test-for-set_root_ca_cert_.patch @@ -1,7 +1,7 @@ From ec10b2d3b5671f72ff3be6510f561dcc15712d5e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 9 Nov 2020 13:34:18 +0100 -Subject: [PATCH 008/138] TLSSocketWrapper: Add unit test for +Subject: [PATCH 008/157] TLSSocketWrapper: Add unit test for set_root_ca_cert_path --- @@ -57,5 +57,5 @@ index 4f9ce6b96c..ad2d3d8d44 100644 #endif /* UNITTESTS_FEATURES_NETSOCKET_TLSSOCKET_TLS_TEST_CONFIG_H_ */ -- -2.25.1 +2.36.0 diff --git a/patches/0009-TLSSocketWrapper-add-test-for-certificates-stored-in.patch b/patches/0009-TLSSocketWrapper-add-test-for-certificates-stored-in.patch index 73c0f859c..ebc9120ee 100644 --- a/patches/0009-TLSSocketWrapper-add-test-for-certificates-stored-in.patch +++ b/patches/0009-TLSSocketWrapper-add-test-for-certificates-stored-in.patch @@ -1,7 +1,7 @@ From b61ee5dcb0010d99b8260457ac8286bb1078412b Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 9 Nov 2020 13:52:28 +0100 -Subject: [PATCH 009/138] TLSSocketWrapper: add test for certificates stored in +Subject: [PATCH 009/157] TLSSocketWrapper: add test for certificates stored in filesystem --- @@ -95,5 +95,5 @@ index 0000000000..cf3dff2e93 +} \ No newline at end of file -- -2.25.1 +2.36.0 diff --git a/patches/0010-Initial-support-Portenta-Beta.patch b/patches/0010-Initial-support-Portenta-Beta.patch index 2a55cdbd1..db44239c8 100644 --- a/patches/0010-Initial-support-Portenta-Beta.patch +++ b/patches/0010-Initial-support-Portenta-Beta.patch @@ -1,7 +1,7 @@ From 43be92f77f5c5e4ea6c6b9b3b9f9b1adc08bc2e3 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 10 Dec 2020 19:39:01 +0100 -Subject: [PATCH 010/138] Initial: support Portenta Beta +Subject: [PATCH 010/157] Initial: support Portenta Beta TODO: add 27mhz clock configuration --- @@ -22,5 +22,5 @@ index 8732ee0ba8..f79bc4f63f 100644 "network-default-interface-type": "ETHERNET", "i2c_timing_value_algo": true -- -2.25.1 +2.36.0 diff --git a/patches/0011-STM32-USB-allow-dynamic-USB-speed-configuration-base.patch b/patches/0011-STM32-USB-allow-dynamic-USB-speed-configuration-base.patch index 3913bfb91..4828722f6 100644 --- a/patches/0011-STM32-USB-allow-dynamic-USB-speed-configuration-base.patch +++ b/patches/0011-STM32-USB-allow-dynamic-USB-speed-configuration-base.patch @@ -1,7 +1,7 @@ From 2bdb291a44fd149d38662f70a574b1a06380fca7 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 11 Mar 2021 11:50:18 +0100 -Subject: [PATCH 011/138] STM32: USB: allow dynamic USB speed configuration +Subject: [PATCH 011/157] STM32: USB: allow dynamic USB speed configuration based on bootloader parameters --- @@ -141,5 +141,5 @@ index c45150de4b..40f1044216 100644 instance->events->start_process(); } -- -2.25.1 +2.36.0 diff --git a/patches/0012-Increase-Cordio-memory-pool-for-nRF52832.patch b/patches/0012-Increase-Cordio-memory-pool-for-nRF52832.patch index 748edb82e..5b79f078e 100644 --- a/patches/0012-Increase-Cordio-memory-pool-for-nRF52832.patch +++ b/patches/0012-Increase-Cordio-memory-pool-for-nRF52832.patch @@ -1,7 +1,7 @@ From 66c314a029c7db96c88c9155ec2db93f4f48ab72 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 10 Dec 2020 09:43:14 +0100 -Subject: [PATCH 012/138] Increase Cordio memory pool for nRF52832 +Subject: [PATCH 012/157] Increase Cordio memory pool for nRF52832 completes 9354bc2a958966739adb0b9584c966bc13e675d5 --- @@ -22,5 +22,5 @@ index 05e5a45eee..3a3d85128d 100644 "wsf-pool-buffer-size": { "help": "Defines the memory allocated for the wsf memory pool.", -- -2.25.1 +2.36.0 diff --git a/patches/0013-Cordio-Add-sendCmplt-Callback-for-updating-NumCmplPc.patch b/patches/0013-Cordio-Add-sendCmplt-Callback-for-updating-NumCmplPc.patch index d8422a8bd..71a966bbb 100644 --- a/patches/0013-Cordio-Add-sendCmplt-Callback-for-updating-NumCmplPc.patch +++ b/patches/0013-Cordio-Add-sendCmplt-Callback-for-updating-NumCmplPc.patch @@ -1,7 +1,7 @@ From 7001a3f148125888a91e33c949340b13af855242 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Wed, 26 Aug 2020 17:57:42 +0200 -Subject: [PATCH 013/138] Cordio Add sendCmplt Callback for updating +Subject: [PATCH 013/157] Cordio Add sendCmplt Callback for updating NumCmplPckts on disconnection --- @@ -32,5 +32,5 @@ index 766c5170ec..5bc2190144 100644 if (pLctrVsHdlrs && pLctrVsHdlrs->connCleanup) { -- -2.25.1 +2.36.0 diff --git a/patches/0014-Add-support-for-Arduino-Edge-Control.patch b/patches/0014-Add-support-for-Arduino-Edge-Control.patch index 607bf260f..393dd7c3d 100644 --- a/patches/0014-Add-support-for-Arduino-Edge-Control.patch +++ b/patches/0014-Add-support-for-Arduino-Edge-Control.patch @@ -1,7 +1,7 @@ From d7f2002260d93cbd4424dca524ac0b5ac8855d9e Mon Sep 17 00:00:00 2001 From: Giampaolo Mancini Date: Wed, 8 Jan 2020 16:42:46 +0100 -Subject: [PATCH 014/138] Add support for Arduino Edge Control +Subject: [PATCH 014/157] Add support for Arduino Edge Control --- .../TARGET_EDGE_CONTROL/PinNames.h | 207 ++++++++++++++++++ @@ -293,5 +293,5 @@ index f79bc4f63f..0bc010dbea 100644 "core": "Cortex-M4F", "components_add": [ -- -2.25.1 +2.36.0 diff --git a/patches/0015-RASPBERRYPI-import-pico-sdk.patch b/patches/0015-RASPBERRYPI-import-pico-sdk.patch index 46ed2b2de..57a5729b3 100644 --- a/patches/0015-RASPBERRYPI-import-pico-sdk.patch +++ b/patches/0015-RASPBERRYPI-import-pico-sdk.patch @@ -1,7 +1,7 @@ From d0d987ef31108b9372818f7c728a29986a8b85de Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 3 May 2021 10:45:27 +0200 -Subject: [PATCH 015/138] RASPBERRYPI: import pico-sdk +Subject: [PATCH 015/157] RASPBERRYPI: import pico-sdk --- .../TARGET_RP2040/pico-sdk/CMakeLists.txt | 89 + @@ -122065,5 +122065,5 @@ index 0000000000..6c361e0002 + * \brief TinyUSB Host-mode support for the RP2040 + */ -- -2.25.1 +2.36.0 diff --git a/patches/0016-RP2040-add-NANO_RP2040_CONNECT-target.patch b/patches/0016-RP2040-add-NANO_RP2040_CONNECT-target.patch index 88ae04ceb..d35216f28 100644 --- a/patches/0016-RP2040-add-NANO_RP2040_CONNECT-target.patch +++ b/patches/0016-RP2040-add-NANO_RP2040_CONNECT-target.patch @@ -1,7 +1,7 @@ From da155e47b873ca2844201f68e8733dd7a2f85bf2 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 3 May 2021 10:56:43 +0200 -Subject: [PATCH 016/138] RP2040: add NANO_RP2040_CONNECT target +Subject: [PATCH 016/157] RP2040: add NANO_RP2040_CONNECT target --- targets/CMakeLists.txt | 1 + @@ -1031,5 +1031,5 @@ index 0bc010dbea..5bdddb968d 100644 "version": "1", "public": false -- -2.25.1 +2.36.0 diff --git a/patches/0017-RP2040-add-placeholder-files-for-includes-like-pico-.patch b/patches/0017-RP2040-add-placeholder-files-for-includes-like-pico-.patch index cf6588b35..b640c321d 100644 --- a/patches/0017-RP2040-add-placeholder-files-for-includes-like-pico-.patch +++ b/patches/0017-RP2040-add-placeholder-files-for-includes-like-pico-.patch @@ -1,7 +1,7 @@ From b2beb1cd8085dff199987ae140ea679bd671f62e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 12 Feb 2021 13:29:58 +0100 -Subject: [PATCH 017/138] RP2040: add placeholder files for includes like +Subject: [PATCH 017/157] RP2040: add placeholder files for includes like pico/*.h --- @@ -23,5 +23,5 @@ diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/common/pico_time/ new file mode 100644 index 0000000000..e69de29bb2 -- -2.25.1 +2.36.0 diff --git a/patches/0018-RP2040-implement-serial-api.patch b/patches/0018-RP2040-implement-serial-api.patch index ade9f5d26..51fa49ffa 100644 --- a/patches/0018-RP2040-implement-serial-api.patch +++ b/patches/0018-RP2040-implement-serial-api.patch @@ -1,7 +1,7 @@ From 374ca188ae04f1fc9cd2f2739448e37b290dfd35 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 12 Feb 2021 15:49:55 +0100 -Subject: [PATCH 018/138] RP2040: implement serial api +Subject: [PATCH 018/157] RP2040: implement serial api --- .../TARGET_RP2040/PeripheralPins.c | 85 +++++++ @@ -514,5 +514,5 @@ index 5bdddb968d..596670be3d 100644 }, "__build_tools_metadata__": { -- -2.25.1 +2.36.0 diff --git a/patches/0019-RP2040-add-pinmap-for-i2c-spi-pwm.patch b/patches/0019-RP2040-add-pinmap-for-i2c-spi-pwm.patch index 1a748b5fd..f7f3ed96d 100644 --- a/patches/0019-RP2040-add-pinmap-for-i2c-spi-pwm.patch +++ b/patches/0019-RP2040-add-pinmap-for-i2c-spi-pwm.patch @@ -1,7 +1,7 @@ From d2769007537ff59f08fd97d9c67eee05139bc0f5 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 12 Feb 2021 17:03:32 +0100 -Subject: [PATCH 019/138] RP2040: add pinmap for i2c, spi, pwm +Subject: [PATCH 019/157] RP2040: add pinmap for i2c, spi, pwm --- .../TARGET_RP2040/PeripheralNames.h | 6 +- @@ -179,5 +179,5 @@ index abeaed1d82..482f8f499c 100644 //*** ADC *** -- -2.25.1 +2.36.0 diff --git a/patches/0020-RP2040-Mark-.init-section-as-KEEP.patch b/patches/0020-RP2040-Mark-.init-section-as-KEEP.patch index de8408313..0206f9296 100644 --- a/patches/0020-RP2040-Mark-.init-section-as-KEEP.patch +++ b/patches/0020-RP2040-Mark-.init-section-as-KEEP.patch @@ -1,7 +1,7 @@ From b1f552e3a7735549513bf9806f37bfc16685bee9 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 15 Feb 2021 12:24:50 +0100 -Subject: [PATCH 020/138] RP2040: Mark .init section as KEEP +Subject: [PATCH 020/157] RP2040: Mark .init section as KEEP --- .../TARGET_RP2040/TOOLCHAIN_GCC_ARM/memmap_default.ld | 2 +- @@ -21,5 +21,5 @@ index 07d5812db1..fb2ff6d18a 100644 *(.fini) /* Pull all c'tors into .text */ -- -2.25.1 +2.36.0 diff --git a/patches/0021-RP2040-implement-mbed-api-analogin.patch b/patches/0021-RP2040-implement-mbed-api-analogin.patch index acd1d95c9..a7ba1735a 100644 --- a/patches/0021-RP2040-implement-mbed-api-analogin.patch +++ b/patches/0021-RP2040-implement-mbed-api-analogin.patch @@ -1,7 +1,7 @@ From 1a814e88b4c9077aa5458e9639080429691de2e1 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 15 Feb 2021 13:52:41 +0100 -Subject: [PATCH 021/138] RP2040: implement mbed api analogin. +Subject: [PATCH 021/157] RP2040: implement mbed api analogin. --- .../TARGET_RP2040/PeripheralNames.h | 5 +- @@ -129,5 +129,5 @@ index 7272492f2f..16dab0daaf 100644 }; -- -2.25.1 +2.36.0 diff --git a/patches/0022-RP2040-add-SPI-support.patch b/patches/0022-RP2040-add-SPI-support.patch index 488ec2320..b3dd5e42d 100644 --- a/patches/0022-RP2040-add-SPI-support.patch +++ b/patches/0022-RP2040-add-SPI-support.patch @@ -1,7 +1,7 @@ From 7a040207fa7a36319e1d2e26516210d9cdc44d6c Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 15 Feb 2021 15:51:03 +0100 -Subject: [PATCH 022/138] RP2040: add SPI support +Subject: [PATCH 022/157] RP2040: add SPI support --- .../TARGET_RP2040/PeripheralPins.c | 16 +-- @@ -207,5 +207,5 @@ index 596670be3d..98997cd193 100644 }, "NANO_RP2040_CONNECT": { -- -2.25.1 +2.36.0 diff --git a/patches/0023-RP2040-prefix-pico-sdk-s-i2c_init-function-with-a-_.patch b/patches/0023-RP2040-prefix-pico-sdk-s-i2c_init-function-with-a-_.patch index 259a299af..0d8a4a3f5 100644 --- a/patches/0023-RP2040-prefix-pico-sdk-s-i2c_init-function-with-a-_.patch +++ b/patches/0023-RP2040-prefix-pico-sdk-s-i2c_init-function-with-a-_.patch @@ -1,7 +1,7 @@ From a82090cdeb83df83716f8f9303d17dbf7f85050f Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Tue, 16 Feb 2021 06:30:59 +0100 -Subject: [PATCH 023/138] RP2040: prefix pico-sdk's i2c_init function with a +Subject: [PATCH 023/157] RP2040: prefix pico-sdk's i2c_init function with a '_' to avoid name clashes with mbed I2C API. @@ -37,5 +37,5 @@ index dda598c3e0..ead7bf1b1b 100644 /*! \brief Disable the I2C HW block * \ingroup hardware_i2c -- -2.25.1 +2.36.0 diff --git a/patches/0024-RP2040-add-I2C-peripheral-support.patch b/patches/0024-RP2040-add-I2C-peripheral-support.patch index 37ee96ba6..64bdba22b 100644 --- a/patches/0024-RP2040-add-I2C-peripheral-support.patch +++ b/patches/0024-RP2040-add-I2C-peripheral-support.patch @@ -1,7 +1,7 @@ From d6cbdb2efee07a2ae881023b42522a71d9b54eb9 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Tue, 16 Feb 2021 06:29:59 +0100 -Subject: [PATCH 024/138] RP2040: add I2C peripheral support +Subject: [PATCH 024/157] RP2040: add I2C peripheral support --- .../TARGET_RP2040/i2c_api.c | 88 +++++++++++++++++++ @@ -129,5 +129,5 @@ index 98997cd193..3f8b505fd3 100644 "PORT_OUT", "SERIAL", -- -2.25.1 +2.36.0 diff --git a/patches/0025-RP2040-implement-USBDevice.patch b/patches/0025-RP2040-implement-USBDevice.patch index 6e6bdc6c9..b87e7eb85 100644 --- a/patches/0025-RP2040-implement-USBDevice.patch +++ b/patches/0025-RP2040-implement-USBDevice.patch @@ -1,7 +1,7 @@ From 0c8b279a5eec6de39843ed2f4f346a9ffdb35eab Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 23 Feb 2021 10:41:45 +0100 -Subject: [PATCH 025/138] RP2040: implement USBDevice +Subject: [PATCH 025/157] RP2040: implement USBDevice Code by @ghollingworth --- @@ -633,5 +633,5 @@ index 3f8b505fd3..c9601649d8 100644 "MBED_MPU_CUSTOM", "PICO_TIME_DEFAULT_ALARM_POOL_DISABLED", -- -2.25.1 +2.36.0 diff --git a/patches/0026-RP2040-avoid-float.h-first-level-inclusion.patch b/patches/0026-RP2040-avoid-float.h-first-level-inclusion.patch index 1d0742ebc..4ad5612d3 100644 --- a/patches/0026-RP2040-avoid-float.h-first-level-inclusion.patch +++ b/patches/0026-RP2040-avoid-float.h-first-level-inclusion.patch @@ -1,7 +1,7 @@ From a08a8c9d5e28446843e9e4e8bc5787eb0c91accd Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 23 Feb 2021 16:46:39 +0100 -Subject: [PATCH 026/138] RP2040: avoid float.h first level inclusion +Subject: [PATCH 026/157] RP2040: avoid float.h first level inclusion --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/.mbedignore | 1 + @@ -25,5 +25,5 @@ diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/pico_f new file mode 100644 index 0000000000..e69de29bb2 -- -2.25.1 +2.36.0 diff --git a/patches/0027-RP2040-don-t-initalize-contructors-during-runtime_in.patch b/patches/0027-RP2040-don-t-initalize-contructors-during-runtime_in.patch index a58f359e0..7cf2ea9bd 100644 --- a/patches/0027-RP2040-don-t-initalize-contructors-during-runtime_in.patch +++ b/patches/0027-RP2040-don-t-initalize-contructors-during-runtime_in.patch @@ -1,7 +1,7 @@ From 63ac31755a473f3761f69298c0b52adf185c50b1 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 23 Feb 2021 16:47:27 +0100 -Subject: [PATCH 027/138] RP2040: don't initalize contructors during +Subject: [PATCH 027/157] RP2040: don't initalize contructors during runtime_init() --- @@ -33,5 +33,5 @@ index bd11d8f80b..22ff5208e6 100644 void __exit(int status) { -- -2.25.1 +2.36.0 diff --git a/patches/0028-RP2040-add-pwm-driver.patch b/patches/0028-RP2040-add-pwm-driver.patch index fc77feece..7150fe934 100644 --- a/patches/0028-RP2040-add-pwm-driver.patch +++ b/patches/0028-RP2040-add-pwm-driver.patch @@ -1,7 +1,7 @@ From 074599cf1116d7343e6de80f7fa47fe8d01d38ed Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 23 Feb 2021 16:48:23 +0100 -Subject: [PATCH 028/138] RP2040: add pwm driver +Subject: [PATCH 028/157] RP2040: add pwm driver --- .../TARGET_RP2040/objects.h | 9 + @@ -247,5 +247,5 @@ index c9601649d8..5d7c81b24a 100644 "SPI", "USBDEVICE" -- -2.25.1 +2.36.0 diff --git a/patches/0029-RP2040-add-flow-control-to-SERIAL-object.patch b/patches/0029-RP2040-add-flow-control-to-SERIAL-object.patch index 6b0316b57..9b0d8b404 100644 --- a/patches/0029-RP2040-add-flow-control-to-SERIAL-object.patch +++ b/patches/0029-RP2040-add-flow-control-to-SERIAL-object.patch @@ -1,7 +1,7 @@ From 13b653de264b6dc463062fb82a4af831b6163dcb Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 23 Feb 2021 16:48:58 +0100 -Subject: [PATCH 029/138] RP2040: add flow control to SERIAL object +Subject: [PATCH 029/157] RP2040: add flow control to SERIAL object --- targets/targets.json | 1 + @@ -20,5 +20,5 @@ index 5d7c81b24a..54897ff1bd 100644 "USBDEVICE" ] -- -2.25.1 +2.36.0 diff --git a/patches/0030-RP2040-add-lp-and-us-timer.patch b/patches/0030-RP2040-add-lp-and-us-timer.patch index 61ea22295..3e7c89592 100644 --- a/patches/0030-RP2040-add-lp-and-us-timer.patch +++ b/patches/0030-RP2040-add-lp-and-us-timer.patch @@ -1,7 +1,7 @@ From 94a3f41e7ad63ba27576c1fedc8ab5841434b00d Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 23 Feb 2021 16:52:04 +0100 -Subject: [PATCH 030/138] RP2040: add lp and us timer +Subject: [PATCH 030/157] RP2040: add lp and us timer lptimer is deactivated since it's meant to run at 1hz :| --- @@ -251,5 +251,5 @@ index 54897ff1bd..7859268c9c 100644 ] }, -- -2.25.1 +2.36.0 diff --git a/patches/0031-RP2040-implement-gpio_is_connected.patch b/patches/0031-RP2040-implement-gpio_is_connected.patch index 9e22c3856..71efb92e9 100644 --- a/patches/0031-RP2040-implement-gpio_is_connected.patch +++ b/patches/0031-RP2040-implement-gpio_is_connected.patch @@ -1,7 +1,7 @@ From 6f57c422233c09178179f186e50eefe236991333 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 26 Feb 2021 12:51:25 +0100 -Subject: [PATCH 031/138] RP2040: implement gpio_is_connected() +Subject: [PATCH 031/157] RP2040: implement gpio_is_connected() --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/gpio_api.c | 3 +++ @@ -20,5 +20,5 @@ index 7f6131c972..3d09714881 100644 +} \ No newline at end of file -- -2.25.1 +2.36.0 diff --git a/patches/0032-RP2040-adapt-linker-script-to-mbed.patch b/patches/0032-RP2040-adapt-linker-script-to-mbed.patch index 0032790e6..70ecf05d4 100644 --- a/patches/0032-RP2040-adapt-linker-script-to-mbed.patch +++ b/patches/0032-RP2040-adapt-linker-script-to-mbed.patch @@ -1,7 +1,7 @@ From 84c75cfecf704381769e84c42acb822efd5b6d9a Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 5 Mar 2021 17:01:18 +0100 -Subject: [PATCH 032/138] RP2040: adapt linker script to mbed +Subject: [PATCH 032/157] RP2040: adapt linker script to mbed --- .../TOOLCHAIN_GCC_ARM/memmap_default.ld | 16 ++++++++++++---- @@ -96,5 +96,5 @@ index 7859268c9c..9af3c2335e 100644 "MBED_MPU_CUSTOM", "PICO_TIME_DEFAULT_ALARM_POOL_DISABLED", -- -2.25.1 +2.36.0 diff --git a/patches/0033-RP2040-Start-adding-Flash-support.patch b/patches/0033-RP2040-Start-adding-Flash-support.patch index 18d865343..f0841d9ce 100644 --- a/patches/0033-RP2040-Start-adding-Flash-support.patch +++ b/patches/0033-RP2040-Start-adding-Flash-support.patch @@ -1,7 +1,7 @@ From a2d7d3e38356cae399c08d0aa59be95e118738dd Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 25 Feb 2021 18:44:50 +0100 -Subject: [PATCH 033/138] RP2040: Start adding Flash support +Subject: [PATCH 033/157] RP2040: Start adding Flash support --- .../TARGET_RP2040/flash_api.c | 107 ++++++++++++++++++ @@ -144,5 +144,5 @@ index 9af3c2335e..36f062709a 100644 "INTERRUPTIN", "PORT_IN", -- -2.25.1 +2.36.0 diff --git a/patches/0034-RP2040-Protect-flash-operations-in-critical-sections.patch b/patches/0034-RP2040-Protect-flash-operations-in-critical-sections.patch index 301ef25c9..a571bb511 100644 --- a/patches/0034-RP2040-Protect-flash-operations-in-critical-sections.patch +++ b/patches/0034-RP2040-Protect-flash-operations-in-critical-sections.patch @@ -1,7 +1,7 @@ From a34424eedf45eaf87e2bae704153a35cba21716b Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Wed, 3 Mar 2021 18:58:02 +0100 -Subject: [PATCH 034/138] RP2040: Protect flash operations in critical sections +Subject: [PATCH 034/157] RP2040: Protect flash operations in critical sections + fix addresses --- @@ -99,5 +99,5 @@ index 85e8f5c81f..01f71958c5 100644 +#endif \ No newline at end of file -- -2.25.1 +2.36.0 diff --git a/patches/0035-RP2040-Check-alignment-avoid-passing-const-buf-to-fl.patch b/patches/0035-RP2040-Check-alignment-avoid-passing-const-buf-to-fl.patch index 4d969f4f5..cf66a78a7 100644 --- a/patches/0035-RP2040-Check-alignment-avoid-passing-const-buf-to-fl.patch +++ b/patches/0035-RP2040-Check-alignment-avoid-passing-const-buf-to-fl.patch @@ -1,7 +1,7 @@ From 565b2630241f74b3b98e28c0cdd23edae227fd87 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 4 Mar 2021 11:05:14 +0100 -Subject: [PATCH 035/138] RP2040: Check alignment + avoid passing const buf to +Subject: [PATCH 035/157] RP2040: Check alignment + avoid passing const buf to flash_range_program() --- @@ -50,5 +50,5 @@ index 01f71958c5..fb1a28dd7f 100644 return 0; -- -2.25.1 +2.36.0 diff --git a/patches/0036-RP2040-Rename-pico-sdk-s-gpio_irq_handler-with-a-_-t.patch b/patches/0036-RP2040-Rename-pico-sdk-s-gpio_irq_handler-with-a-_-t.patch index 9a6a1f473..2393330c8 100644 --- a/patches/0036-RP2040-Rename-pico-sdk-s-gpio_irq_handler-with-a-_-t.patch +++ b/patches/0036-RP2040-Rename-pico-sdk-s-gpio_irq_handler-with-a-_-t.patch @@ -1,7 +1,7 @@ From fffd09bf501df71f3c5cabe9079eead9fbb2e0d8 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Fri, 5 Mar 2021 11:38:57 +0100 -Subject: [PATCH 036/138] RP2040: Rename pico-sdk's gpio_irq_handler with a '_' +Subject: [PATCH 036/157] RP2040: Rename pico-sdk's gpio_irq_handler with a '_' to avoid clashes with mbed API --- @@ -31,5 +31,5 @@ index 7051de309a..28a137663b 100644 } -- -2.25.1 +2.36.0 diff --git a/patches/0037-RP2040-Add-gpio-interrupt-support.patch b/patches/0037-RP2040-Add-gpio-interrupt-support.patch index 2e52fdf4b..a49f3f314 100644 --- a/patches/0037-RP2040-Add-gpio-interrupt-support.patch +++ b/patches/0037-RP2040-Add-gpio-interrupt-support.patch @@ -1,7 +1,7 @@ From c314412c1eff85ca90450db92091fea0a20956ca Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Fri, 5 Mar 2021 11:46:46 +0100 -Subject: [PATCH 037/138] RP2040: Add gpio interrupt support +Subject: [PATCH 037/157] RP2040: Add gpio interrupt support --- .../TARGET_RP2040/gpio_api.c | 105 +++++++++++++++++- @@ -148,5 +148,5 @@ index 3d09714881..a10a7d6c89 100644 + +#endif -- -2.25.1 +2.36.0 diff --git a/patches/0038-RP2040-usb-fix-USB_DEVICE_ENUMERATION_FIX-linking.patch b/patches/0038-RP2040-usb-fix-USB_DEVICE_ENUMERATION_FIX-linking.patch index ef46b326c..0e003706a 100644 --- a/patches/0038-RP2040-usb-fix-USB_DEVICE_ENUMERATION_FIX-linking.patch +++ b/patches/0038-RP2040-usb-fix-USB_DEVICE_ENUMERATION_FIX-linking.patch @@ -1,7 +1,7 @@ From c889efed9173dbceb12f565a63a55df21b344a02 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 8 Mar 2021 10:06:58 +0100 -Subject: [PATCH 038/138] RP2040: usb: fix USB_DEVICE_ENUMERATION_FIX linking +Subject: [PATCH 038/157] RP2040: usb: fix USB_DEVICE_ENUMERATION_FIX linking --- .../TARGET_RASPBERRYPI/TARGET_RP2040/USBPhy_RP2040.cpp | 9 +++++++++ @@ -48,5 +48,5 @@ index 36f062709a..05e1580d8b 100644 "MBED_MPU_CUSTOM", "PICO_TIME_DEFAULT_ALARM_POOL_DISABLED", -- -2.25.1 +2.36.0 diff --git a/patches/0039-RP2040-usb-make-all-unhandled-conditions-a-no-op.patch b/patches/0039-RP2040-usb-make-all-unhandled-conditions-a-no-op.patch index ba0077a06..955b636bf 100644 --- a/patches/0039-RP2040-usb-make-all-unhandled-conditions-a-no-op.patch +++ b/patches/0039-RP2040-usb-make-all-unhandled-conditions-a-no-op.patch @@ -1,7 +1,7 @@ From 1aae5c08ce13ee07fb81f60de9d6e3d5f8f0f39f Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 8 Mar 2021 10:07:26 +0100 -Subject: [PATCH 039/138] RP2040: usb: make all unhandled conditions a no-op +Subject: [PATCH 039/157] RP2040: usb: make all unhandled conditions a no-op --- .../TARGET_RP2040/USBPhy_RP2040.cpp | 16 ++++------------ @@ -50,5 +50,5 @@ index c88bdcc573..ff24a6dcd6 100644 void USBPhyHw::process() -- -2.25.1 +2.36.0 diff --git a/patches/0040-RP2040-i2c-fix-addressing-mismatch.patch b/patches/0040-RP2040-i2c-fix-addressing-mismatch.patch index 32fb5399c..eeb54f00d 100644 --- a/patches/0040-RP2040-i2c-fix-addressing-mismatch.patch +++ b/patches/0040-RP2040-i2c-fix-addressing-mismatch.patch @@ -1,7 +1,7 @@ From 693b0de97bce9480895d8fd7e85caaf2856de9c5 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 8 Mar 2021 10:53:48 +0100 -Subject: [PATCH 040/138] RP2040: i2c: fix addressing mismatch +Subject: [PATCH 040/157] RP2040: i2c: fix addressing mismatch --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/i2c_api.c | 13 +++++++++++-- @@ -40,5 +40,5 @@ index 210279b3b0..ae9f0c0fd3 100644 (size_t)length, /* nostop = */(stop == 0)); -- -2.25.1 +2.36.0 diff --git a/patches/0041-RP2040-SPI-check-SS-correctness-only-if-declared.patch b/patches/0041-RP2040-SPI-check-SS-correctness-only-if-declared.patch index a2653aa5e..5b23f28b2 100644 --- a/patches/0041-RP2040-SPI-check-SS-correctness-only-if-declared.patch +++ b/patches/0041-RP2040-SPI-check-SS-correctness-only-if-declared.patch @@ -1,7 +1,7 @@ From 7d824d69a187aa4426d62e47ddd79c5c5ee08302 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 8 Mar 2021 11:17:31 +0100 -Subject: [PATCH 041/138] RP2040: SPI: check SS correctness only if declared +Subject: [PATCH 041/157] RP2040: SPI: check SS correctness only if declared --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/spi_api.c | 5 +++-- @@ -24,5 +24,5 @@ index 1cc6bfa0fb..73129835fa 100644 /* Obtain pointer to the SPI module. */ obj->dev = (spi_inst_t *)pinmap_function(mosi, PinMap_SPI_MOSI); -- -2.25.1 +2.36.0 diff --git a/patches/0042-RP2040-Add-I2C-slave.patch b/patches/0042-RP2040-Add-I2C-slave.patch index 7b72210b4..87fb1761e 100644 --- a/patches/0042-RP2040-Add-I2C-slave.patch +++ b/patches/0042-RP2040-Add-I2C-slave.patch @@ -1,7 +1,7 @@ From 9f83b82d9a12b90a498eda5d1b2f0dc1b97d49d1 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 25 Feb 2021 12:44:31 +0100 -Subject: [PATCH 042/138] RP2040: Add I2C slave +Subject: [PATCH 042/157] RP2040: Add I2C slave --- .../TARGET_RP2040/i2c_api.c | 145 +++++++++++++++++- @@ -269,5 +269,5 @@ index 05e1580d8b..4e02c7ebdc 100644 "PORT_IN", "PORT_OUT", -- -2.25.1 +2.36.0 diff --git a/patches/0043-RP2040-PWM-fix-asserts.patch b/patches/0043-RP2040-PWM-fix-asserts.patch index c7e17a66b..e29187f6f 100644 --- a/patches/0043-RP2040-PWM-fix-asserts.patch +++ b/patches/0043-RP2040-PWM-fix-asserts.patch @@ -1,7 +1,7 @@ From aeb05fced52075f4e30337c9a947b771ecf59497 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 15 Mar 2021 14:53:31 +0100 -Subject: [PATCH 043/138] RP2040: PWM: fix asserts +Subject: [PATCH 043/157] RP2040: PWM: fix asserts --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/pwmout_api.c | 5 +++-- @@ -38,5 +38,5 @@ index 5f5d847995..cc2b935bc7 100644 } -- -2.25.1 +2.36.0 diff --git a/patches/0044-RP2040-nano-connect-fix-pinmap.patch b/patches/0044-RP2040-nano-connect-fix-pinmap.patch index 6f89d7f11..602951c94 100644 --- a/patches/0044-RP2040-nano-connect-fix-pinmap.patch +++ b/patches/0044-RP2040-nano-connect-fix-pinmap.patch @@ -1,7 +1,7 @@ From ca0a1a1715078f67e7bd385d37b8aea001049f0c Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 15 Mar 2021 15:22:43 +0100 -Subject: [PATCH 044/138] RP2040: nano connect: fix pinmap +Subject: [PATCH 044/157] RP2040: nano connect: fix pinmap --- .../TARGET_NANO_RP2040_CONNECT/PinNames.h | 25 ++++++++++++++++--- @@ -52,5 +52,5 @@ index e84e89440c..bad8f487c6 100644 // Not connected NC = (int)0xFFFFFFFF -- -2.25.1 +2.36.0 diff --git a/patches/0045-RP2040-add-Raspberry-Pico-target.patch b/patches/0045-RP2040-add-Raspberry-Pico-target.patch index 1d91e0c8b..d07efe1f8 100644 --- a/patches/0045-RP2040-add-Raspberry-Pico-target.patch +++ b/patches/0045-RP2040-add-Raspberry-Pico-target.patch @@ -1,7 +1,7 @@ From 868131e9898d877b463c698f375e6975b27a0711 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 15 Mar 2021 15:28:08 +0100 -Subject: [PATCH 045/138] RP2040: add Raspberry Pico target +Subject: [PATCH 045/157] RP2040: add Raspberry Pico target --- .../TARGET_RASPBERRY_PI_PICO/PinNames.h | 70 +++++++++++++++++++ @@ -151,5 +151,5 @@ index 4e02c7ebdc..6821974873 100644 "version": "1", "public": false -- -2.25.1 +2.36.0 diff --git a/patches/0046-RP2040-fix-analogin_read_u16-to-report-full-range.patch b/patches/0046-RP2040-fix-analogin_read_u16-to-report-full-range.patch index 629f2db4f..e39040cdb 100644 --- a/patches/0046-RP2040-fix-analogin_read_u16-to-report-full-range.patch +++ b/patches/0046-RP2040-fix-analogin_read_u16-to-report-full-range.patch @@ -1,7 +1,7 @@ From 9a0d8c43633c430586d416dcd36ec10df0dd0b6a Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 15 Mar 2021 15:48:37 +0100 -Subject: [PATCH 046/138] RP2040: fix analogin_read_u16 to report full range +Subject: [PATCH 046/157] RP2040: fix analogin_read_u16 to report full range --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/analogin_api.c | 6 +++--- @@ -39,5 +39,5 @@ index 4e95f4551f..e1773a065c 100644 const PinMap *analogin_pinmap() -- -2.25.1 +2.36.0 diff --git a/patches/0047-RP2040-fix-PwmOut-enable-command.patch b/patches/0047-RP2040-fix-PwmOut-enable-command.patch index 3f8209c3b..0d2a2b59d 100644 --- a/patches/0047-RP2040-fix-PwmOut-enable-command.patch +++ b/patches/0047-RP2040-fix-PwmOut-enable-command.patch @@ -1,7 +1,7 @@ From c2a7e5dde882c1cb31917e282169cc0a8d463348 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 16 Mar 2021 09:54:26 +0100 -Subject: [PATCH 047/138] RP2040: fix PwmOut enable command +Subject: [PATCH 047/157] RP2040: fix PwmOut enable command --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/pwmout_api.c | 1 + @@ -20,5 +20,5 @@ index cc2b935bc7..e4bc4daa80 100644 /** Read the current float-point output duty-cycle -- -2.25.1 +2.36.0 diff --git a/patches/0048-RP2040-Implement-watchdog.patch b/patches/0048-RP2040-Implement-watchdog.patch index 23d4421b8..3166cee7f 100644 --- a/patches/0048-RP2040-Implement-watchdog.patch +++ b/patches/0048-RP2040-Implement-watchdog.patch @@ -1,7 +1,7 @@ From 91ff42a82016c6739e43025adee4efd0072aae77 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 15 Mar 2021 16:33:00 +0100 -Subject: [PATCH 048/138] RP2040: Implement watchdog +Subject: [PATCH 048/157] RP2040: Implement watchdog --- .../TARGET_RP2040/watchdog_api.c | 46 +++++++++++++++++++ @@ -74,5 +74,5 @@ index 6821974873..c9ddc9708f 100644 ] }, -- -2.25.1 +2.36.0 diff --git a/patches/0049-RP2040-Implement-reset-reasons.patch b/patches/0049-RP2040-Implement-reset-reasons.patch index a2e00a220..2aeb9c8fa 100644 --- a/patches/0049-RP2040-Implement-reset-reasons.patch +++ b/patches/0049-RP2040-Implement-reset-reasons.patch @@ -1,7 +1,7 @@ From bab7209459afc3510873637c3ed5eeca6b704930 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 15 Mar 2021 17:52:09 +0100 -Subject: [PATCH 049/138] RP2040: Implement reset reasons +Subject: [PATCH 049/157] RP2040: Implement reset reasons --- .../TARGET_RP2040/reset_reason.c | 33 +++++++++++++++++++ @@ -63,5 +63,5 @@ index c9ddc9708f..ada53ef030 100644 }, "NANO_RP2040_CONNECT": { -- -2.25.1 +2.36.0 diff --git a/patches/0050-RP2040-fix-spi.h-spurious-inclusion-in-case-insensit.patch b/patches/0050-RP2040-fix-spi.h-spurious-inclusion-in-case-insensit.patch index d0fb2327a..ddf2b2609 100644 --- a/patches/0050-RP2040-fix-spi.h-spurious-inclusion-in-case-insensit.patch +++ b/patches/0050-RP2040-fix-spi.h-spurious-inclusion-in-case-insensit.patch @@ -1,7 +1,7 @@ From 52e4cdfd0a4e2017d0718ce4ae360c37d3ef25dc Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 16 Mar 2021 11:07:10 +0100 -Subject: [PATCH 050/138] RP2040: fix spi.h spurious inclusion in case +Subject: [PATCH 050/157] RP2040: fix spi.h spurious inclusion in case insensitive filesystems --- @@ -33,5 +33,5 @@ diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/pico-sdk/rp2_common/hardwa new file mode 100644 index 0000000000..e69de29bb2 -- -2.25.1 +2.36.0 diff --git a/patches/0051-RP2040-UART-baud-can-t-be-changed-at-runtime.patch b/patches/0051-RP2040-UART-baud-can-t-be-changed-at-runtime.patch index 871390255..a2986f9b5 100644 --- a/patches/0051-RP2040-UART-baud-can-t-be-changed-at-runtime.patch +++ b/patches/0051-RP2040-UART-baud-can-t-be-changed-at-runtime.patch @@ -1,7 +1,7 @@ From f8226d1f456502675e11dc757fa589fc9315a565 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 24 Mar 2021 11:55:51 +0100 -Subject: [PATCH 051/138] RP2040: UART: baud can't be changed at runtime +Subject: [PATCH 051/157] RP2040: UART: baud can't be changed at runtime --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/serial_api.c | 3 ++- @@ -22,5 +22,5 @@ index 6a90e64323..8d95f6c2a3 100644 void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) -- -2.25.1 +2.36.0 diff --git a/patches/0052-RP2040-i2c-remove-debug-prints.patch b/patches/0052-RP2040-i2c-remove-debug-prints.patch index 2c1187b7e..73d5873c6 100644 --- a/patches/0052-RP2040-i2c-remove-debug-prints.patch +++ b/patches/0052-RP2040-i2c-remove-debug-prints.patch @@ -1,7 +1,7 @@ From d5606dea31817f591b38873c67a0fd323e02f225 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 16 Mar 2021 17:19:42 +0100 -Subject: [PATCH 052/138] RP2040: i2c: remove debug prints +Subject: [PATCH 052/157] RP2040: i2c: remove debug prints --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/i2c_api.c | 2 +- @@ -21,5 +21,5 @@ index 9d7510bedf..2b776562a1 100644 #else #define DEBUG_PRINTF(...) -- -2.25.1 +2.36.0 diff --git a/patches/0053-RP2040-PICO-Add-CONSOLE_-X-defines.patch b/patches/0053-RP2040-PICO-Add-CONSOLE_-X-defines.patch index dbc16853b..425d71477 100644 --- a/patches/0053-RP2040-PICO-Add-CONSOLE_-X-defines.patch +++ b/patches/0053-RP2040-PICO-Add-CONSOLE_-X-defines.patch @@ -1,7 +1,7 @@ From fd61ad4b39de956dc88a00ad8a37509b95be5291 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 13 Apr 2021 10:03:51 +0200 -Subject: [PATCH 053/138] RP2040 PICO: Add CONSOLE_*X defines +Subject: [PATCH 053/157] RP2040 PICO: Add CONSOLE_*X defines --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/PeripheralNames.h | 6 +++--- @@ -48,5 +48,5 @@ index bad8f487c6..784cfff18f 100644 LED1 = p6, LED2 = p6, -- -2.25.1 +2.36.0 diff --git a/patches/0054-RP2040-FLASH-fix-multipage-write.patch b/patches/0054-RP2040-FLASH-fix-multipage-write.patch index 6ab3e4dad..11cfc94b8 100644 --- a/patches/0054-RP2040-FLASH-fix-multipage-write.patch +++ b/patches/0054-RP2040-FLASH-fix-multipage-write.patch @@ -1,7 +1,7 @@ From aacad0df4aecaec5b6953ee343b5697d776e261a Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 13 Apr 2021 12:20:06 +0200 -Subject: [PATCH 054/138] RP2040: FLASH: fix multipage write +Subject: [PATCH 054/157] RP2040: FLASH: fix multipage write --- .../TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c | 16 ++++++---------- @@ -37,5 +37,5 @@ index fb1a28dd7f..2ebfc40a04 100644 return 0; -- -2.25.1 +2.36.0 diff --git a/patches/0055-RP2040-fix-include-paths.patch b/patches/0055-RP2040-fix-include-paths.patch index e4f2ab79d..1bc1a4b5c 100644 --- a/patches/0055-RP2040-fix-include-paths.patch +++ b/patches/0055-RP2040-fix-include-paths.patch @@ -1,7 +1,7 @@ From e4024c767229fa2006d878df098b23c6380f96cc Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 3 May 2021 14:32:14 +0200 -Subject: [PATCH 055/138] RP2040: fix include paths +Subject: [PATCH 055/157] RP2040: fix include paths --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/analogin_api.c | 2 +- @@ -47,5 +47,5 @@ index 007b79c322..b7abac8917 100644 #if DEVICE_WATCHDOG -- -2.25.1 +2.36.0 diff --git a/patches/0056-RP2040-silence-nasty-warning.patch b/patches/0056-RP2040-silence-nasty-warning.patch index 10f90bfa6..cedd9b72c 100644 --- a/patches/0056-RP2040-silence-nasty-warning.patch +++ b/patches/0056-RP2040-silence-nasty-warning.patch @@ -1,7 +1,7 @@ From 50901e7a854ec5a01fe7b44a4f085191633ee4eb Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 3 May 2021 14:32:33 +0200 -Subject: [PATCH 056/138] RP2040: silence nasty warning +Subject: [PATCH 056/157] RP2040: silence nasty warning --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h | 1 + @@ -20,5 +20,5 @@ index cdbd5655e6..280f166d4d 100644 #ifdef __cplusplus #include -- -2.25.1 +2.36.0 diff --git a/patches/0057-RP2040-start-fixing-CMake-files-for-mbed-cli-2.patch b/patches/0057-RP2040-start-fixing-CMake-files-for-mbed-cli-2.patch index 79ea9f126..9a2795309 100644 --- a/patches/0057-RP2040-start-fixing-CMake-files-for-mbed-cli-2.patch +++ b/patches/0057-RP2040-start-fixing-CMake-files-for-mbed-cli-2.patch @@ -1,7 +1,7 @@ From 01fe140916bb8aecba2d4c7966aa81a1b201b22c Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 3 May 2021 14:33:02 +0200 -Subject: [PATCH 057/138] RP2040: start fixing CMake files for mbed cli 2 +Subject: [PATCH 057/157] RP2040: start fixing CMake files for mbed cli 2 --- targets/TARGET_RASPBERRYPI/CMakeLists.txt | 17 ++-- @@ -189,5 +189,5 @@ index 0000000000..5df188f681 + +target_link_libraries(mbed-raspberrypi-pico INTERFACE mbed-rp2040) -- -2.25.1 +2.36.0 diff --git a/patches/0058-RP2040-fix-and-update-Raspberry-Pi-Pico-target.patch b/patches/0058-RP2040-fix-and-update-Raspberry-Pi-Pico-target.patch index 8a526afa7..286c08711 100644 --- a/patches/0058-RP2040-fix-and-update-Raspberry-Pi-Pico-target.patch +++ b/patches/0058-RP2040-fix-and-update-Raspberry-Pi-Pico-target.patch @@ -1,7 +1,7 @@ From f90c337b6b5dd2c6f5b185f4af1f28543f4ce4d0 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 3 May 2021 15:12:12 +0200 -Subject: [PATCH 058/138] RP2040: fix and update Raspberry Pi Pico target +Subject: [PATCH 058/157] RP2040: fix and update Raspberry Pi Pico target --- .../TARGET_RASPBERRY_PI_PICO/CMakeLists.txt | 10 +++++----- @@ -53,5 +53,5 @@ index 6a47df933a..2b2e9463ef 100644 LED1 = p25, LED2 = p25, -- -2.25.1 +2.36.0 diff --git a/patches/0059-RP2040-USBPhy-implement-stall-and-unstall.patch b/patches/0059-RP2040-USBPhy-implement-stall-and-unstall.patch index a18fa2fd2..42724404f 100644 --- a/patches/0059-RP2040-USBPhy-implement-stall-and-unstall.patch +++ b/patches/0059-RP2040-USBPhy-implement-stall-and-unstall.patch @@ -1,7 +1,7 @@ From 6db6500d74a388ae1b7e39d8fb96097fcbd4423f Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 7 May 2021 16:08:53 +0200 -Subject: [PATCH 059/138] RP2040: USBPhy: implement stall() and unstall() +Subject: [PATCH 059/157] RP2040: USBPhy: implement stall() and unstall() --- .../TARGET_RP2040/USBPhy_RP2040.cpp | 12 +++++++++--- @@ -42,5 +42,5 @@ index ff24a6dcd6..eb387af3c3 100644 bool USBPhyHw::endpoint_read(usb_ep_t endpoint, uint8_t *data, uint32_t size) -- -2.25.1 +2.36.0 diff --git a/patches/0060-RP2040-include-multicore-library-in-build.patch b/patches/0060-RP2040-include-multicore-library-in-build.patch index 42ea3a7d3..eb6658ba7 100644 --- a/patches/0060-RP2040-include-multicore-library-in-build.patch +++ b/patches/0060-RP2040-include-multicore-library-in-build.patch @@ -1,7 +1,7 @@ From 50428cf9f8475d6bbddf1b516a2f3e7cec409c8f Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 11 May 2021 09:41:45 +0200 -Subject: [PATCH 060/138] RP2040: include multicore library in build +Subject: [PATCH 060/157] RP2040: include multicore library in build --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/.mbedignore | 1 - @@ -48,5 +48,5 @@ index 0ceea4def8..6b2321f12f 100644 \ No newline at end of file +} -- -2.25.1 +2.36.0 diff --git a/patches/0061-RP2040-USB-retry-handling-irqs-if-some-went-missing.patch b/patches/0061-RP2040-USB-retry-handling-irqs-if-some-went-missing.patch index 2c7bada3a..42a799d02 100644 --- a/patches/0061-RP2040-USB-retry-handling-irqs-if-some-went-missing.patch +++ b/patches/0061-RP2040-USB-retry-handling-irqs-if-some-went-missing.patch @@ -1,7 +1,7 @@ From ed508d59795c23c6c45c5b9ed42f3370cc8aaf69 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 12 May 2021 16:00:01 +0200 -Subject: [PATCH 061/138] RP2040: USB: retry handling irqs if some went missing +Subject: [PATCH 061/157] RP2040: USB: retry handling irqs if some went missing --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/USBPhy_RP2040.cpp | 6 +++++- @@ -32,5 +32,5 @@ index eb387af3c3..64ae5d3a4c 100644 -- -2.25.1 +2.36.0 diff --git a/patches/0062-Nano-RP2040-Connect-force-flash-size-to-16MB.patch b/patches/0062-Nano-RP2040-Connect-force-flash-size-to-16MB.patch index 8dc20631a..0e2cda878 100644 --- a/patches/0062-Nano-RP2040-Connect-force-flash-size-to-16MB.patch +++ b/patches/0062-Nano-RP2040-Connect-force-flash-size-to-16MB.patch @@ -1,7 +1,7 @@ From 5d86279b3c3895ecb75b45a4e9938d91d0e0166e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 24 May 2021 16:13:09 +0200 -Subject: [PATCH 062/138] Nano RP2040 Connect: force flash size to 16MB +Subject: [PATCH 062/157] Nano RP2040 Connect: force flash size to 16MB --- targets/targets.json | 1 + @@ -20,5 +20,5 @@ index ada53ef030..687c15a05a 100644 "PICO_UART_ENABLE_CRLF_SUPPORT=0" ] -- -2.25.1 +2.36.0 diff --git a/patches/0063-Save-watchdog-timeout-in-a-static-variable-accessibl.patch b/patches/0063-Save-watchdog-timeout-in-a-static-variable-accessibl.patch index 535f4ae5f..eef9d131d 100644 --- a/patches/0063-Save-watchdog-timeout-in-a-static-variable-accessibl.patch +++ b/patches/0063-Save-watchdog-timeout-in-a-static-variable-accessibl.patch @@ -1,7 +1,7 @@ From d6281c2458a4b8dadad5856a27342e0b32a331c0 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Fri, 4 Jun 2021 14:45:38 +0200 -Subject: [PATCH 063/138] Save watchdog timeout in a static variable accessible +Subject: [PATCH 063/157] Save watchdog timeout in a static variable accessible from Arduino APIs --- @@ -38,5 +38,5 @@ index b7abac8917..9263eb48d5 100644 watchdog_features_t hal_watchdog_get_platform_features(void) -- -2.25.1 +2.36.0 diff --git a/patches/0064-RP2040-us_ticker-fix-missing-interrupts-after-32bit-.patch b/patches/0064-RP2040-us_ticker-fix-missing-interrupts-after-32bit-.patch index c0c5a077f..b846a2b61 100644 --- a/patches/0064-RP2040-us_ticker-fix-missing-interrupts-after-32bit-.patch +++ b/patches/0064-RP2040-us_ticker-fix-missing-interrupts-after-32bit-.patch @@ -1,7 +1,7 @@ From b80637a1c74c2bd6a1782fd1f668e1ef13b8dbfe Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Wed, 30 Jun 2021 11:50:21 +0200 -Subject: [PATCH 064/138] RP2040: us_ticker: fix missing interrupts after 32bit +Subject: [PATCH 064/157] RP2040: us_ticker: fix missing interrupts after 32bit wrap --- @@ -67,5 +67,5 @@ index 00edf82830..b3b8497188 100644 + hardware_alarm_unclaim(alarm_num); } -- -2.25.1 +2.36.0 diff --git a/patches/0065-Nano-RP2040-connect-use-standard-W25Q080-2nd-stage.patch b/patches/0065-Nano-RP2040-connect-use-standard-W25Q080-2nd-stage.patch index 3568ce1f0..3253dab00 100644 --- a/patches/0065-Nano-RP2040-connect-use-standard-W25Q080-2nd-stage.patch +++ b/patches/0065-Nano-RP2040-connect-use-standard-W25Q080-2nd-stage.patch @@ -1,7 +1,7 @@ From c63b1f634b2a97cf061c2b09b955114a676447c7 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 18 Jun 2021 17:58:21 +0200 -Subject: [PATCH 065/138] Nano RP2040 connect: use standard W25Q080 2nd stage +Subject: [PATCH 065/157] Nano RP2040 connect: use standard W25Q080 2nd stage Latest boards ship with a different flash chip; QE bit is set during production and should never be set to 0. Since the adesto specific code is not working on the new flash, let's fallback to the standard 2nd stage without PROGRAM_STATUS_REG define @@ -50,5 +50,5 @@ index e9be188191..fc6bea7df6 100644 +.byte 0xf4, 0x00, 0x00, 0x18, 0x22, 0x20, 0x00, 0xa0, 0x00, 0x01, 0x00, 0x10, 0x08, 0xed, 0x00, 0xe0 +.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xb2, 0x4e, 0x7a -- -2.25.1 +2.36.0 diff --git a/patches/0066-RP2040-optimize-flash-ram-occupation.patch b/patches/0066-RP2040-optimize-flash-ram-occupation.patch index 994a9afb3..371361d9b 100644 --- a/patches/0066-RP2040-optimize-flash-ram-occupation.patch +++ b/patches/0066-RP2040-optimize-flash-ram-occupation.patch @@ -1,7 +1,7 @@ From 371bf34f0070753420c9629fd853a7beff992cc2 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 2 Aug 2021 10:23:43 +0200 -Subject: [PATCH 066/138] RP2040: optimize flash/ram occupation +Subject: [PATCH 066/157] RP2040: optimize flash/ram occupation Since we are not using ROM functions here, just keep everything as default as possible --- @@ -61,5 +61,5 @@ index d92bd42107..ec8bac7e40 100644 *(.data*) -- -2.25.1 +2.36.0 diff --git a/patches/0067-RP2040-Add-weak-aliases-for-ISR-handlers.patch b/patches/0067-RP2040-Add-weak-aliases-for-ISR-handlers.patch index ff02decde..3aa57bee0 100644 --- a/patches/0067-RP2040-Add-weak-aliases-for-ISR-handlers.patch +++ b/patches/0067-RP2040-Add-weak-aliases-for-ISR-handlers.patch @@ -1,7 +1,7 @@ From 600aa59949813b2b7ca011009234ad417d340861 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 2 Aug 2021 10:34:57 +0200 -Subject: [PATCH 067/138] RP2040: Add weak aliases for ISR handlers +Subject: [PATCH 067/157] RP2040: Add weak aliases for ISR handlers Fixes baremetal build --- @@ -28,5 +28,5 @@ index 3f90b95ee2..97af458711 100644 .macro decl_isr name .weak \name -- -2.25.1 +2.36.0 diff --git a/patches/0068-RP2040-enable-led-indication-on-mbed_die.patch b/patches/0068-RP2040-enable-led-indication-on-mbed_die.patch index 8befc6928..e289dccda 100644 --- a/patches/0068-RP2040-enable-led-indication-on-mbed_die.patch +++ b/patches/0068-RP2040-enable-led-indication-on-mbed_die.patch @@ -1,7 +1,7 @@ From a369b286fa03ca583f6e82342fd3819fa1c47990 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 10 Aug 2021 12:09:30 +0200 -Subject: [PATCH 068/138] RP2040: enable led indication on mbed_die() +Subject: [PATCH 068/157] RP2040: enable led indication on mbed_die() --- targets/TARGET_RASPBERRYPI/TARGET_RP2040/objects.h | 2 ++ @@ -19,5 +19,5 @@ index 280f166d4d..f5f44a58f4 100644 + #endif -- -2.25.1 +2.36.0 diff --git a/patches/0069-check-MISO-correctness-only-if-it-is-declared.patch b/patches/0069-check-MISO-correctness-only-if-it-is-declared.patch index b2aec93d4..e55286705 100644 --- a/patches/0069-check-MISO-correctness-only-if-it-is-declared.patch +++ b/patches/0069-check-MISO-correctness-only-if-it-is-declared.patch @@ -1,7 +1,7 @@ From 9806b6cf13f2c7ac60335baac8e83601cfdec78e Mon Sep 17 00:00:00 2001 From: Josep Comas Date: Sat, 31 Jul 2021 18:57:41 +0200 -Subject: [PATCH 069/138] check MISO correctness only if it is declared +Subject: [PATCH 069/157] check MISO correctness only if it is declared It is very common to have displays without MISO pin connected to MCU, for example, https://www.waveshare.com/pico-lcd-1.3.htm hangs calling spi_init(&spi, p11, NC, p10, NC); --- @@ -26,5 +26,5 @@ index 73129835fa..271cf58d1c 100644 MBED_ASSERT(spi_sclk == spi_ssel); } -- -2.25.1 +2.36.0 diff --git a/patches/0070-rp2040-Fix-I2CSlave-synchronization-issue-by-adding-.patch b/patches/0070-rp2040-Fix-I2CSlave-synchronization-issue-by-adding-.patch index a1b8a2f78..fab0c6244 100644 --- a/patches/0070-rp2040-Fix-I2CSlave-synchronization-issue-by-adding-.patch +++ b/patches/0070-rp2040-Fix-I2CSlave-synchronization-issue-by-adding-.patch @@ -1,7 +1,7 @@ From 8bbd9dbe99e5be417b55723bed4c054a2f113e43 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 7 Oct 2021 18:11:59 +0200 -Subject: [PATCH 070/138] rp2040: Fix I2CSlave synchronization issue by adding +Subject: [PATCH 070/157] rp2040: Fix I2CSlave synchronization issue by adding a timeout for the read --- @@ -42,5 +42,5 @@ index 2b776562a1..ec52728f63 100644 DEBUG_PRINTF("i2c_slave read %d bytes\r\n", read_len); -- -2.25.1 +2.36.0 diff --git a/patches/0071-STM32-PWM-add-export-HRTIM-capable-pins-to-Periphera.patch b/patches/0071-STM32-PWM-add-export-HRTIM-capable-pins-to-Periphera.patch index 7e5e93d07..d1a5b4836 100644 --- a/patches/0071-STM32-PWM-add-export-HRTIM-capable-pins-to-Periphera.patch +++ b/patches/0071-STM32-PWM-add-export-HRTIM-capable-pins-to-Periphera.patch @@ -1,7 +1,7 @@ From cda8dd2906f3463ee2b368d4622d86291ef0e5ef Mon Sep 17 00:00:00 2001 From: Riccardo Rizzo Date: Mon, 28 Jun 2021 15:03:50 +0200 -Subject: [PATCH 071/138] STM32: PWM: add export HRTIM capable pins to +Subject: [PATCH 071/157] STM32: PWM: add export HRTIM capable pins to PeripheralPins --- @@ -139,5 +139,5 @@ index 63f0e87599..44a95f9c02 100644 store_uart(pin, name, sig) if "SPI" in sig: -- -2.25.1 +2.36.0 diff --git a/patches/0072-STM32H7-add-HRTIM-capable-pins.patch b/patches/0072-STM32H7-add-HRTIM-capable-pins.patch index 4a1ac33a4..3188f08ba 100644 --- a/patches/0072-STM32H7-add-HRTIM-capable-pins.patch +++ b/patches/0072-STM32H7-add-HRTIM-capable-pins.patch @@ -1,7 +1,7 @@ From d15ad9a562ad15948d7e54337f8b57b400e4c70a Mon Sep 17 00:00:00 2001 From: Riccardo Rizzo Date: Mon, 28 Jun 2021 15:05:40 +0200 -Subject: [PATCH 072/138] STM32H7: add HRTIM capable pins +Subject: [PATCH 072/157] STM32H7: add HRTIM capable pins --- targets/TARGET_STM/PeripheralPins.h | 8 ++++++++ @@ -62,5 +62,5 @@ index 26cd944066..9e7339bcdb 100644 //*** SERIAL *** -- -2.25.1 +2.36.0 diff --git a/patches/0073-STM32-PWM-implement-HRTIM-based-PWM-APIs.patch b/patches/0073-STM32-PWM-implement-HRTIM-based-PWM-APIs.patch index fa1acdc81..89210d37f 100644 --- a/patches/0073-STM32-PWM-implement-HRTIM-based-PWM-APIs.patch +++ b/patches/0073-STM32-PWM-implement-HRTIM-based-PWM-APIs.patch @@ -1,7 +1,7 @@ From e101b91b77feb4a8cb7239bb1b58544264c6d86d Mon Sep 17 00:00:00 2001 From: Riccardo Rizzo Date: Mon, 28 Jun 2021 15:25:11 +0200 -Subject: [PATCH 073/138] STM32: PWM: implement HRTIM based PWM APIs +Subject: [PATCH 073/157] STM32: PWM: implement HRTIM based PWM APIs Signed-off-by: Martino Facchin --- @@ -260,5 +260,5 @@ index 8026921c67..1564a1c4d3 100644 RCC_ClkInitTypeDef RCC_ClkInitStruct; uint32_t PclkFreq = 0; -- -2.25.1 +2.36.0 diff --git a/patches/0074-STM32-HRTIM-greatly-simplify-corner-cases.patch b/patches/0074-STM32-HRTIM-greatly-simplify-corner-cases.patch index bd58f37b1..1a097008a 100644 --- a/patches/0074-STM32-HRTIM-greatly-simplify-corner-cases.patch +++ b/patches/0074-STM32-HRTIM-greatly-simplify-corner-cases.patch @@ -1,7 +1,7 @@ From 8daa471aa7d0dc170f6f40ea7927495dd8062b79 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 28 Jun 2021 17:04:01 +0200 -Subject: [PATCH 074/138] STM32: HRTIM: greatly simplify corner cases +Subject: [PATCH 074/157] STM32: HRTIM: greatly simplify corner cases --- targets/TARGET_STM/pwmout_api.c | 57 +++++++++++++++------------------ @@ -129,5 +129,5 @@ index 1564a1c4d3..906dc1dcfd 100644 sConfig_time_base.Period = obj->period; sConfig_time_base.PrescalerRatio = obj->prescaler; -- -2.25.1 +2.36.0 diff --git a/patches/0075-Portenta-PWM-force-PA8-to-use-HRTIM.patch b/patches/0075-Portenta-PWM-force-PA8-to-use-HRTIM.patch index 1e1da7ede..62713d255 100644 --- a/patches/0075-Portenta-PWM-force-PA8-to-use-HRTIM.patch +++ b/patches/0075-Portenta-PWM-force-PA8-to-use-HRTIM.patch @@ -1,7 +1,7 @@ From 9a5191ec01597f64281f5e7e78dc11a88547d296 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Tue, 29 Jun 2021 15:04:33 +0200 -Subject: [PATCH 075/138] Portenta: PWM: force PA8 to use HRTIM +Subject: [PATCH 075/157] Portenta: PWM: force PA8 to use HRTIM Since PA8 and PK1 share the same timer/channel mux, using both result in glitches. PA8 also supports HRTIM, so use it. @@ -23,5 +23,5 @@ index 9e7339bcdb..3b1cf1075b 100644 // {PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 -- -2.25.1 +2.36.0 diff --git a/patches/0076-STM32H7-CM4-avoid-vtor-relocation-via-define.patch b/patches/0076-STM32H7-CM4-avoid-vtor-relocation-via-define.patch index 02505c807..8f42ba55f 100644 --- a/patches/0076-STM32H7-CM4-avoid-vtor-relocation-via-define.patch +++ b/patches/0076-STM32H7-CM4-avoid-vtor-relocation-via-define.patch @@ -1,7 +1,7 @@ From 11b7e751ac1c3b05d81d2a0b428c355e78d9afab Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 16 Aug 2021 17:19:45 +0200 -Subject: [PATCH 076/138] STM32H7: CM4: avoid vtor relocation via define +Subject: [PATCH 076/157] STM32H7: CM4: avoid vtor relocation via define --- .../STM32Cube_FW/system_stm32h7xx_dualcore_boot_cm4_cm7.c | 2 +- @@ -21,5 +21,5 @@ index 8e0017de2a..b4a4cc7826 100644 SCB->VTOR = NVIC_FLASH_VECTOR_ADDRESS; // MBED #endif -- -2.25.1 +2.36.0 diff --git a/patches/0077-STM32-analogin-use-critical-section-to-protect-PLL-c.patch b/patches/0077-STM32-analogin-use-critical-section-to-protect-PLL-c.patch index 598f3d91b..1c5c3a45b 100644 --- a/patches/0077-STM32-analogin-use-critical-section-to-protect-PLL-c.patch +++ b/patches/0077-STM32-analogin-use-critical-section-to-protect-PLL-c.patch @@ -1,7 +1,7 @@ From 171db2502ace376ee4b9326694bc927098b7249e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 11 Aug 2021 12:14:57 +0200 -Subject: [PATCH 077/138] STM32: analogin: use critical section to protect PLL +Subject: [PATCH 077/157] STM32: analogin: use critical section to protect PLL configuration --- @@ -31,5 +31,5 @@ index 3fb41a7997..905e86006e 100644 LL_HSEM_ReleaseLock(HSEM, CFG_HW_RCC_SEMID, HSEM_CR_COREID_CURRENT); #endif /* DUAL_CORE */ -- -2.25.1 +2.36.0 diff --git a/patches/0078-PortentaH7-implement-and-use-get_default_instance-fo.patch b/patches/0078-PortentaH7-implement-and-use-get_default_instance-fo.patch index 6058438fa..801785ff5 100644 --- a/patches/0078-PortentaH7-implement-and-use-get_default_instance-fo.patch +++ b/patches/0078-PortentaH7-implement-and-use-get_default_instance-fo.patch @@ -1,7 +1,7 @@ From 4c5f7b4ddf0f60484e402ad8e3c19beace946e79 Mon Sep 17 00:00:00 2001 From: pennam Date: Thu, 22 Jul 2021 12:04:53 +0200 -Subject: [PATCH 078/138] PortentaH7: implement and use get_default_instance +Subject: [PATCH 078/157] PortentaH7: implement and use get_default_instance for QSPIBD --- @@ -42,5 +42,5 @@ index b6de4ece12..bea07abdef 100644 if (qspi_bd->init() == BD_ERROR_OK) { mbr_bd = new MBRBlockDevice(qspi_bd, WIFI_DEFAULT_PARTITION); -- -2.25.1 +2.36.0 diff --git a/patches/0079-PortentaH7-Disable-WHD-WPRINT_MACRO.patch b/patches/0079-PortentaH7-Disable-WHD-WPRINT_MACRO.patch index 55462e0b6..1f9a094d9 100644 --- a/patches/0079-PortentaH7-Disable-WHD-WPRINT_MACRO.patch +++ b/patches/0079-PortentaH7-Disable-WHD-WPRINT_MACRO.patch @@ -1,7 +1,7 @@ From cdad9d4da99dd48f942443742a0041af79dc09bd Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 23 Jul 2021 11:29:13 +0200 -Subject: [PATCH 079/138] PortentaH7: Disable WHD WPRINT_MACRO +Subject: [PATCH 079/157] PortentaH7: Disable WHD WPRINT_MACRO --- .../COMPONENT_WHD/port/cyhal_hw_types.h | 13 +------------ @@ -48,5 +48,5 @@ index da67e0a036..cc442a6e44 100644 #define CY_WHD_CONFIG_USE_SDIO //#define CY_WHD_CONFIG_USE_SPI -- -2.25.1 +2.36.0 diff --git a/patches/0080-Add-NICLA-target.patch b/patches/0080-Add-NICLA-target.patch index 4ae5eb6de..03e248185 100644 --- a/patches/0080-Add-NICLA-target.patch +++ b/patches/0080-Add-NICLA-target.patch @@ -1,7 +1,7 @@ From 769b6335b99407afc5243f0b0e929bfce008def7 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 27 Nov 2020 10:34:42 +0100 -Subject: [PATCH 080/138] Add NICLA target +Subject: [PATCH 080/157] Add NICLA target --- .../blockdevice/COMPONENT_SD/mbed_lib.json | 8 +- @@ -307,5 +307,5 @@ index 687c15a05a..9b20540219 100644 "inherits": [ "Target" -- -2.25.1 +2.36.0 diff --git a/patches/0081-NICLA-use-nfc-pins-as-GPIOs.patch b/patches/0081-NICLA-use-nfc-pins-as-GPIOs.patch index d1e66ed3a..41103c5d4 100644 --- a/patches/0081-NICLA-use-nfc-pins-as-GPIOs.patch +++ b/patches/0081-NICLA-use-nfc-pins-as-GPIOs.patch @@ -1,7 +1,7 @@ From d7d06b38bfee2852076cc09b8bfe0c2a732a112f Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 26 Aug 2021 11:47:20 +0200 -Subject: [PATCH 081/138] NICLA: use nfc pins as GPIOs +Subject: [PATCH 081/157] NICLA: use nfc pins as GPIOs --- targets/targets.json | 1 + @@ -20,5 +20,5 @@ index 9b20540219..89205a0716 100644 "NRF52_PAN_15", "NRF52_PAN_20", -- -2.25.1 +2.36.0 diff --git a/patches/0082-Fix-cast-error-in-WHD.patch b/patches/0082-Fix-cast-error-in-WHD.patch index 9aaf33d00..3aa598960 100644 --- a/patches/0082-Fix-cast-error-in-WHD.patch +++ b/patches/0082-Fix-cast-error-in-WHD.patch @@ -1,7 +1,7 @@ From f195593a14ef8ef890dfd350dfd689218250c0f4 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Fri, 17 Sep 2021 17:04:41 +0200 -Subject: [PATCH 082/138] Fix cast error in WHD +Subject: [PATCH 082/157] Fix cast error in WHD --- .../wifi-host-driver/src/bus_protocols/whd_bus_common.c | 2 +- @@ -21,5 +21,5 @@ index 4eacf4869a..48c401a0a0 100755 if ( (result == WHD_SUCCESS) && (tmp != reset_instr) ) { -- -2.25.1 +2.36.0 diff --git a/patches/0083-mbed-client-cli-ns_cmdline-make-cmd_class_t-cmd-priv.patch b/patches/0083-mbed-client-cli-ns_cmdline-make-cmd_class_t-cmd-priv.patch index 156123287..72b46eda0 100644 --- a/patches/0083-mbed-client-cli-ns_cmdline-make-cmd_class_t-cmd-priv.patch +++ b/patches/0083-mbed-client-cli-ns_cmdline-make-cmd_class_t-cmd-priv.patch @@ -1,7 +1,7 @@ From a4a5ef9c18e55fc4c4310ce2efd5bde9ca1215bb Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 22 Sep 2021 15:34:24 +0200 -Subject: [PATCH 083/138] mbed-client-cli: ns_cmdline: make cmd_class_t cmd +Subject: [PATCH 083/157] mbed-client-cli: ns_cmdline: make cmd_class_t cmd private --- @@ -22,5 +22,5 @@ index 7e113502b6..1384e278ea 100644 .cmd_ptr = NULL, .mutex_wait_fnc = NULL, -- -2.25.1 +2.36.0 diff --git a/patches/0084-BlockDevice-add-mbed-namespace-to-function-signature.patch b/patches/0084-BlockDevice-add-mbed-namespace-to-function-signature.patch index aba5d4a0c..65593a9fd 100644 --- a/patches/0084-BlockDevice-add-mbed-namespace-to-function-signature.patch +++ b/patches/0084-BlockDevice-add-mbed-namespace-to-function-signature.patch @@ -1,7 +1,7 @@ From e9c4f48ec5636ff31b1a45b629c948e7430d694a Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 23 Sep 2021 15:16:10 +0200 -Subject: [PATCH 084/138] BlockDevice: add mbed namespace to function +Subject: [PATCH 084/157] BlockDevice: add mbed namespace to function signatures --- @@ -50,5 +50,5 @@ index bdbcae9e38..8b7e89b2d4 100644 { uint8_t param_table[SFDP_BASIC_PARAMS_TBL_SIZE]; /* Up To 20 DWORDS = 80 Bytes */ -- -2.25.1 +2.36.0 diff --git a/patches/0085-Use-ADC-clock-synchronous-with-AHB.patch b/patches/0085-Use-ADC-clock-synchronous-with-AHB.patch index 06a69f1df..ffbee2b75 100644 --- a/patches/0085-Use-ADC-clock-synchronous-with-AHB.patch +++ b/patches/0085-Use-ADC-clock-synchronous-with-AHB.patch @@ -1,7 +1,7 @@ From 9c35e854820b7f9771294fadcd2785f0e9bc026b Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Wed, 13 Oct 2021 10:48:44 +0200 -Subject: [PATCH 085/138] Use ADC clock synchronous with AHB +Subject: [PATCH 085/157] Use ADC clock synchronous with AHB --- targets/TARGET_STM/TARGET_STM32H7/analogin_device.c | 2 +- @@ -21,5 +21,5 @@ index 905e86006e..c3ec31c07f 100644 obj->handle.Init.ScanConvMode = ADC_SCAN_DISABLE; obj->handle.Init.EOCSelection = ADC_EOC_SINGLE_CONV; -- -2.25.1 +2.36.0 diff --git a/patches/0086-RP2040-Add-basic-RTC-support.patch b/patches/0086-RP2040-Add-basic-RTC-support.patch index fab2d01cf..864189cab 100644 --- a/patches/0086-RP2040-Add-basic-RTC-support.patch +++ b/patches/0086-RP2040-Add-basic-RTC-support.patch @@ -1,7 +1,7 @@ From b2a9bdcffe701c86842ad701ec8c43a7e5930e04 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 30 Jul 2021 17:22:36 +0200 -Subject: [PATCH 086/138] RP2040: Add basic RTC support +Subject: [PATCH 086/157] RP2040: Add basic RTC support --- .../hardware_rtc/include/hardware/rtc.h | 2 +- @@ -147,5 +147,5 @@ index 89205a0716..7902341c2f 100644 "WATCHDOG", "USBDEVICE", -- -2.25.1 +2.36.0 diff --git a/patches/0087-RP2040-Watchdog-get_reload_value-returns-0-if-wd-is-.patch b/patches/0087-RP2040-Watchdog-get_reload_value-returns-0-if-wd-is-.patch index 3bcc978db..84451b9c3 100644 --- a/patches/0087-RP2040-Watchdog-get_reload_value-returns-0-if-wd-is-.patch +++ b/patches/0087-RP2040-Watchdog-get_reload_value-returns-0-if-wd-is-.patch @@ -1,7 +1,7 @@ From 39818b178814b19fb63fc841edbee18facc0ebd8 Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 9 Nov 2021 09:20:36 +0100 -Subject: [PATCH 087/138] RP2040: Watchdog: get_reload_value returns 0 if wd is +Subject: [PATCH 087/157] RP2040: Watchdog: get_reload_value returns 0 if wd is not properly configured --- @@ -50,5 +50,5 @@ index 9263eb48d5..7526f6b608 100644 return load_value; } -- -2.25.1 +2.36.0 diff --git a/patches/0088-RP2040-backport-p2040_usb_device_enumeration-fix.patch b/patches/0088-RP2040-backport-p2040_usb_device_enumeration-fix.patch index 480f8f3bf..548c04e6b 100644 --- a/patches/0088-RP2040-backport-p2040_usb_device_enumeration-fix.patch +++ b/patches/0088-RP2040-backport-p2040_usb_device_enumeration-fix.patch @@ -1,7 +1,7 @@ From 1400cf779c94747842887919a0f6dfe8230c3db5 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 15 Nov 2021 16:47:42 +0100 -Subject: [PATCH 088/138] RP2040: backport p2040_usb_device_enumeration fix +Subject: [PATCH 088/157] RP2040: backport p2040_usb_device_enumeration fix --- .../rp2040_usb_device_enumeration.c | 42 +++++++++++++++---- @@ -91,5 +91,5 @@ index 8319e36cb7..91583205bb 100644 + padsbank0_hw->io[dp] = pad_ctrl_prev; } -- -2.25.1 +2.36.0 diff --git a/patches/0089-RP2040-correct-system-clock-frequency.patch b/patches/0089-RP2040-correct-system-clock-frequency.patch index cfc0f66db..04194ebb7 100644 --- a/patches/0089-RP2040-correct-system-clock-frequency.patch +++ b/patches/0089-RP2040-correct-system-clock-frequency.patch @@ -1,7 +1,7 @@ From 035027aba76d65f6f82d86495e1fda3b0e99a05e Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 6 Dec 2021 12:02:28 +0100 -Subject: [PATCH 089/138] RP2040: correct system clock frequency +Subject: [PATCH 089/157] RP2040: correct system clock frequency Fixes https://github.com/arduino/ArduinoCore-mbed/issues/271 --- @@ -32,5 +32,5 @@ index 1f775638f9..b9ad1319af 100644 +uint32_t SystemCoreClock = 125000000; \ No newline at end of file -- -2.25.1 +2.36.0 diff --git a/patches/0090-Thales-mbed-library-porting.patch b/patches/0090-Thales-mbed-library-porting.patch index 15c7a2200..e86eb525f 100644 --- a/patches/0090-Thales-mbed-library-porting.patch +++ b/patches/0090-Thales-mbed-library-porting.patch @@ -1,7 +1,7 @@ From afa24e63fb5cb10e60481dc3517bc026ec6e3289 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 10 Dec 2020 19:23:36 +0100 -Subject: [PATCH 090/138] Thales: mbed library porting +Subject: [PATCH 090/157] Thales: mbed library porting Wrap changes for Thales inside a library include check @@ -564,5 +564,5 @@ index 01c5b71c65..22711d2173 100644 } // namespace mbed -- -2.25.1 +2.36.0 diff --git a/patches/0091-Implement-connect-and-get_context-functions-inside-G.patch b/patches/0091-Implement-connect-and-get_context-functions-inside-G.patch index 1d23e12f6..eb52a3dcd 100644 --- a/patches/0091-Implement-connect-and-get_context-functions-inside-G.patch +++ b/patches/0091-Implement-connect-and-get_context-functions-inside-G.patch @@ -1,7 +1,7 @@ From cbb912e27a23f31ed2a13345006346668b9c01ec Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 13 Jul 2021 13:16:06 +0200 -Subject: [PATCH 091/138] Implement connect() and get_context() functions +Subject: [PATCH 091/157] Implement connect() and get_context() functions inside GEMALTO stack --- @@ -177,5 +177,5 @@ index da6e7676d6..0645b2b87c 100644 protected: #if !NSAPI_PPP_AVAILABLE -- -2.25.1 +2.36.0 diff --git a/patches/0092-Make-set_cid-protected-to-call-it-from-GEMALTO-stack.patch b/patches/0092-Make-set_cid-protected-to-call-it-from-GEMALTO-stack.patch index 5a480394b..d8ba459c5 100644 --- a/patches/0092-Make-set_cid-protected-to-call-it-from-GEMALTO-stack.patch +++ b/patches/0092-Make-set_cid-protected-to-call-it-from-GEMALTO-stack.patch @@ -1,7 +1,7 @@ From 330cc7b36d416064f2d8d456b35b7578da3bec42 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 13 Jul 2021 13:16:49 +0200 -Subject: [PATCH 092/138] Make set_cid() protected to call it from GEMALTO +Subject: [PATCH 092/157] Make set_cid() protected to call it from GEMALTO stack --- @@ -29,5 +29,5 @@ index 19099c0e08..0eb83531b0 100644 private: ContextOperation _current_op; -- -2.25.1 +2.36.0 diff --git a/patches/0093-Implement-GEMALTO-subclass-of-CellularNetwork.patch b/patches/0093-Implement-GEMALTO-subclass-of-CellularNetwork.patch index 08f98f363..1b156ab06 100644 --- a/patches/0093-Implement-GEMALTO-subclass-of-CellularNetwork.patch +++ b/patches/0093-Implement-GEMALTO-subclass-of-CellularNetwork.patch @@ -1,7 +1,7 @@ From c891a8f2eb9781002bc5c599f0d6ec362cdc1e4a Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 13 Jul 2021 18:17:13 +0200 -Subject: [PATCH 093/138] Implement GEMALTO subclass of CellularNetwork +Subject: [PATCH 093/157] Implement GEMALTO subclass of CellularNetwork --- .../framework/device/CellularStateMachine.cpp | 6 ---- @@ -149,5 +149,5 @@ index 0000000000..8d5f49cf5a + +#endif // GEMALTO_CINTERION_CELLULARNETWORK_H_ -- -2.25.1 +2.36.0 diff --git a/patches/0094-Handle-missing-IP-address-resolution.patch b/patches/0094-Handle-missing-IP-address-resolution.patch index 566290365..3219bf508 100644 --- a/patches/0094-Handle-missing-IP-address-resolution.patch +++ b/patches/0094-Handle-missing-IP-address-resolution.patch @@ -1,7 +1,7 @@ From 2bd81ee3674c87420c5c571b77cf75cff629f540 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Wed, 14 Jul 2021 10:25:40 +0200 -Subject: [PATCH 094/138] Handle missing IP address resolution +Subject: [PATCH 094/157] Handle missing IP address resolution --- .../GEMALTO_CINTERION_CellularStack.cpp | 18 +++++++++++++----- @@ -37,5 +37,5 @@ index 13c1a0b2fa..9eb3e27b39 100644 } -- -2.25.1 +2.36.0 diff --git a/patches/0095-Check-if-username-and-password-are-empty-strings.patch b/patches/0095-Check-if-username-and-password-are-empty-strings.patch index 6cfed9f5c..5777b598a 100644 --- a/patches/0095-Check-if-username-and-password-are-empty-strings.patch +++ b/patches/0095-Check-if-username-and-password-are-empty-strings.patch @@ -1,7 +1,7 @@ From 79760a8f3231088cb221edc5ddf703c66bcaecc5 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Wed, 14 Jul 2021 12:54:52 +0200 -Subject: [PATCH 095/138] Check if username and password are empty strings +Subject: [PATCH 095/157] Check if username and password are empty strings --- .../GEMALTO/CINTERION/GEMALTO_CINTERION_CellularContext.cpp | 4 +++- @@ -30,5 +30,5 @@ index 8f04e1274a..4aa7f188ea 100644 return NSAPI_ERROR_OK; -- -2.25.1 +2.36.0 diff --git a/patches/0096-Overwrite-old-context-with-new-one-if-they-are-diffe.patch b/patches/0096-Overwrite-old-context-with-new-one-if-they-are-diffe.patch index f7c2a85cf..0e840fdea 100644 --- a/patches/0096-Overwrite-old-context-with-new-one-if-they-are-diffe.patch +++ b/patches/0096-Overwrite-old-context-with-new-one-if-they-are-diffe.patch @@ -1,7 +1,7 @@ From 211be8939026b429e8c790b52692c0f45a84c85a Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 19 Jul 2021 14:42:09 +0200 -Subject: [PATCH 096/138] Overwrite old context with new one if they are +Subject: [PATCH 096/157] Overwrite old context with new one if they are different --- @@ -27,5 +27,5 @@ index 4aa7f188ea..7ee2c8e53c 100644 pdp_type_t pdp_type = string_to_pdp_type(pdp_type_from_context); tr_debug("CID %d APN \"%s\" pdp_type %u", cid, apn, pdp_type); -- -2.25.1 +2.36.0 diff --git a/patches/0097-Fix-recv-implementation.patch b/patches/0097-Fix-recv-implementation.patch index 6126b65b1..6ca2bd38f 100644 --- a/patches/0097-Fix-recv-implementation.patch +++ b/patches/0097-Fix-recv-implementation.patch @@ -1,7 +1,7 @@ From 59b5f95c142ade4bcf24f8336ccddea3faeb1811 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 20 Jul 2021 10:40:12 +0200 -Subject: [PATCH 097/138] Fix recv implementation +Subject: [PATCH 097/157] Fix recv implementation --- .../CINTERION/GEMALTO_CINTERION_CellularStack.cpp | 15 +++++++-------- @@ -58,5 +58,5 @@ index 9eb3e27b39..034011d2d2 100644 return (_at.get_last_error() == NSAPI_ERROR_OK) ? (recv_len ? recv_len : NSAPI_ERROR_WOULD_BLOCK) : NSAPI_ERROR_DEVICE_ERROR; -- -2.25.1 +2.36.0 diff --git a/patches/0098-Add-time-functions-to-Gemalto-stack.patch b/patches/0098-Add-time-functions-to-Gemalto-stack.patch index 1bcf95d61..cff8a1590 100644 --- a/patches/0098-Add-time-functions-to-Gemalto-stack.patch +++ b/patches/0098-Add-time-functions-to-Gemalto-stack.patch @@ -1,7 +1,7 @@ From 9b076fd634a90f5e3da3b8171656881c8d1b7bc3 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Tue, 20 Jul 2021 11:48:06 +0200 -Subject: [PATCH 098/138] Add time functions to Gemalto stack +Subject: [PATCH 098/157] Add time functions to Gemalto stack --- .../cellular/framework/API/CellularDevice.h | 6 + @@ -235,5 +235,5 @@ index f8f892fccd..459bba8eb1 100644 static BufferedSerial serial(MBED_CONF_GEMALTO_CINTERION_TX, MBED_CONF_GEMALTO_CINTERION_RX, MBED_CONF_GEMALTO_CINTERION_BAUDRATE); #if defined(MBED_CONF_GEMALTO_CINTERION_RTS) && defined(MBED_CONF_GEMALTO_CINTERION_CTS) -- -2.25.1 +2.36.0 diff --git a/patches/0099-AT_CellularStack-return-NSAPI_ERROR_NO_CONNECTION-on.patch b/patches/0099-AT_CellularStack-return-NSAPI_ERROR_NO_CONNECTION-on.patch index c946f219c..40f6d7165 100644 --- a/patches/0099-AT_CellularStack-return-NSAPI_ERROR_NO_CONNECTION-on.patch +++ b/patches/0099-AT_CellularStack-return-NSAPI_ERROR_NO_CONNECTION-on.patch @@ -1,7 +1,7 @@ From aac8d3964903304bb15ca97736b8b413b4208a67 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 5 Aug 2021 15:10:54 +0200 -Subject: [PATCH 099/138] AT_CellularStack: return NSAPI_ERROR_NO_CONNECTION on +Subject: [PATCH 099/157] AT_CellularStack: return NSAPI_ERROR_NO_CONNECTION on socket closed --- @@ -31,5 +31,5 @@ index 961d101c9b..ca7d2a786c 100644 if (ret_val >= 0) { -- -2.25.1 +2.36.0 diff --git a/patches/0100-SerialBase-implement-sw-flow-control.patch b/patches/0100-SerialBase-implement-sw-flow-control.patch index fcbe80b05..ccd581107 100644 --- a/patches/0100-SerialBase-implement-sw-flow-control.patch +++ b/patches/0100-SerialBase-implement-sw-flow-control.patch @@ -1,7 +1,7 @@ From e05bd86be38a29b30b43598c9ca6089e5cd66297 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 5 Aug 2021 15:13:58 +0200 -Subject: [PATCH 100/138] SerialBase: implement sw flow control +Subject: [PATCH 100/157] SerialBase: implement sw flow control --- drivers/include/drivers/SerialBase.h | 9 ++++++++- @@ -84,5 +84,5 @@ index 40bf7d0b61..7c21d12e9c 100644 break; } -- -2.25.1 +2.36.0 diff --git a/patches/0101-GEMALTO-fix-some-corner-cases.patch b/patches/0101-GEMALTO-fix-some-corner-cases.patch index 81e1bab14..d4a41926d 100644 --- a/patches/0101-GEMALTO-fix-some-corner-cases.patch +++ b/patches/0101-GEMALTO-fix-some-corner-cases.patch @@ -1,7 +1,7 @@ From d3f3b312f45a11c3bbbd7bee580f04ed9d726e86 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 5 Aug 2021 15:14:13 +0200 -Subject: [PATCH 101/138] GEMALTO: fix some corner cases +Subject: [PATCH 101/157] GEMALTO: fix some corner cases --- .../GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp | 6 ++++-- @@ -53,5 +53,5 @@ index 034011d2d2..06952694e2 100644 len = (nsapi_size_or_error_t)size; } -- -2.25.1 +2.36.0 diff --git a/patches/0102-Gemalto-properly-handle-SYSSTART-URC.patch b/patches/0102-Gemalto-properly-handle-SYSSTART-URC.patch index a8ca72e11..84013216e 100644 --- a/patches/0102-Gemalto-properly-handle-SYSSTART-URC.patch +++ b/patches/0102-Gemalto-properly-handle-SYSSTART-URC.patch @@ -1,7 +1,7 @@ From 0f984f6163c50f322c5ed305723776f5e0a4d1d1 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 6 Aug 2021 10:28:50 +0200 -Subject: [PATCH 102/138] Gemalto: properly handle ^SYSSTART URC +Subject: [PATCH 102/157] Gemalto: properly handle ^SYSSTART URC --- .../CINTERION/GEMALTO_CINTERION_CellularStack.cpp | 14 +++++++++++++- @@ -53,5 +53,5 @@ index 22711d2173..b0ae8d23e1 100644 void urc_sisr(); void sisr_urc_handler(int sock_id, int urc_code); -- -2.25.1 +2.36.0 diff --git a/patches/0103-Gemalto-TX62-handle-oob-before-closing-the-socket.patch b/patches/0103-Gemalto-TX62-handle-oob-before-closing-the-socket.patch index b36109fb1..22219b6d9 100644 --- a/patches/0103-Gemalto-TX62-handle-oob-before-closing-the-socket.patch +++ b/patches/0103-Gemalto-TX62-handle-oob-before-closing-the-socket.patch @@ -1,7 +1,7 @@ From 2689a3d19461b70d35870ca58de9e76c83153fe0 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 6 Aug 2021 10:29:11 +0200 -Subject: [PATCH 103/138] Gemalto: TX62: handle oob before closing the socket +Subject: [PATCH 103/157] Gemalto: TX62: handle oob before closing the socket --- .../GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp | 1 + @@ -20,5 +20,5 @@ index 147f5ffc15..94975e1b66 100644 socket->pending_bytes = 0; return NSAPI_ERROR_OK; -- -2.25.1 +2.36.0 diff --git a/patches/0104-GEMALTO-implement-GNSS.patch b/patches/0104-GEMALTO-implement-GNSS.patch index 181fe5d81..9b8f6e251 100644 --- a/patches/0104-GEMALTO-implement-GNSS.patch +++ b/patches/0104-GEMALTO-implement-GNSS.patch @@ -1,7 +1,7 @@ From 1f912a74751705c0a85538504242f06757f4293c Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 11 Aug 2021 12:15:43 +0200 -Subject: [PATCH 104/138] GEMALTO: implement GNSS +Subject: [PATCH 104/157] GEMALTO: implement GNSS --- .../GEMALTO_CINTERION_CellularStack.cpp | 36 +++++++++++++++++++ @@ -96,5 +96,5 @@ index b0ae8d23e1..163fa3193f 100644 hostbyname_cb_t _dns_callback; nsapi_version_t _dns_version; -- -2.25.1 +2.36.0 diff --git a/patches/0105-GEMALTO-TX62-tune-AT-configuration.patch b/patches/0105-GEMALTO-TX62-tune-AT-configuration.patch index 8f7ed93de..2412a24af 100644 --- a/patches/0105-GEMALTO-TX62-tune-AT-configuration.patch +++ b/patches/0105-GEMALTO-TX62-tune-AT-configuration.patch @@ -1,7 +1,7 @@ From e63f9f22688e6eccc2dc2586c38559a9205429dd Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 11 Aug 2021 17:30:39 +0200 -Subject: [PATCH 105/138] GEMALTO: TX62: tune AT configuration +Subject: [PATCH 105/157] GEMALTO: TX62: tune AT configuration --- .../cellular/GEMALTO/CINTERION/GEMALTO_CINTERION.cpp | 10 +++++----- @@ -39,5 +39,5 @@ index 459bba8eb1..3e3bcd4121 100644 set_cellular_properties(cellular_properties); _module = ModuleTX62; -- -2.25.1 +2.36.0 diff --git a/patches/0106-Add-APIs-to-start-and-stop-gnss-functionality.patch b/patches/0106-Add-APIs-to-start-and-stop-gnss-functionality.patch index c82410dfe..30f04859c 100644 --- a/patches/0106-Add-APIs-to-start-and-stop-gnss-functionality.patch +++ b/patches/0106-Add-APIs-to-start-and-stop-gnss-functionality.patch @@ -1,7 +1,7 @@ From d306af5c6878e9ab76f7b665bd96152d8dccdf42 Mon Sep 17 00:00:00 2001 From: Riccardo Rizzo Date: Tue, 7 Sep 2021 12:33:02 +0200 -Subject: [PATCH 106/138] Add APIs to start and stop gnss functionality +Subject: [PATCH 106/157] Add APIs to start and stop gnss functionality the usage of start and stop should allows for switching the usage of gnss with respect for lte gsm operations --- @@ -97,5 +97,5 @@ index 163fa3193f..ffaed50184 100644 mbed::Callback _gnss_cb; -- -2.25.1 +2.36.0 diff --git a/patches/0107-Added-GNSS-Psm-management-and-bug-fixing.patch b/patches/0107-Added-GNSS-Psm-management-and-bug-fixing.patch index 6ad7a084f..0ceda875d 100644 --- a/patches/0107-Added-GNSS-Psm-management-and-bug-fixing.patch +++ b/patches/0107-Added-GNSS-Psm-management-and-bug-fixing.patch @@ -1,7 +1,7 @@ From ce864aeea51868406b98ab85cc146abafc858b42 Mon Sep 17 00:00:00 2001 From: Riccardo Rizzo Date: Mon, 13 Sep 2021 11:56:44 +0200 -Subject: [PATCH 107/138] Added GNSS/Psm management and bug fixing +Subject: [PATCH 107/157] Added GNSS/Psm management and bug fixing Added GNSS psm management and removed callback pointer bug introduced in previous PR also set CGAUTH to 1in order to allows for context credential settings. @@ -125,5 +125,5 @@ index ffaed50184..37eee5858a 100644 protected: -- -2.25.1 +2.36.0 diff --git a/patches/0108-Implement-LNA_ENABLE-for-Thales-rev3.patch b/patches/0108-Implement-LNA_ENABLE-for-Thales-rev3.patch index b67899de1..cc223cb17 100644 --- a/patches/0108-Implement-LNA_ENABLE-for-Thales-rev3.patch +++ b/patches/0108-Implement-LNA_ENABLE-for-Thales-rev3.patch @@ -1,7 +1,7 @@ From 4343171f71de52614142324c570eae6f8a360ed5 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 25 Nov 2021 14:55:22 +0100 -Subject: [PATCH 108/138] Implement LNA_ENABLE for Thales rev3 +Subject: [PATCH 108/157] Implement LNA_ENABLE for Thales rev3 --- .../GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp | 4 ++++ @@ -36,5 +36,5 @@ index 967d9628b0..9f111d7da0 100644 _at.resp_start("^SGPSC: \"Engine\","); -- -2.25.1 +2.36.0 diff --git a/patches/0109-cmux-support.patch b/patches/0109-cmux-support.patch index ff2319132..28f46afa0 100644 --- a/patches/0109-cmux-support.patch +++ b/patches/0109-cmux-support.patch @@ -1,7 +1,7 @@ From 743cabdb2a85f78d98d06c68c37b96664fc2b9a0 Mon Sep 17 00:00:00 2001 From: Riccardo Rizzo Date: Fri, 26 Nov 2021 14:46:40 +0100 -Subject: [PATCH 109/138] cmux support +Subject: [PATCH 109/157] cmux support - CMUX.h handle ongoig packet from all serial(virtual, real) and route to the correct owner, when also the cmux enable is ready is supposed that this class should also handle and frammentate the packet to be @@ -245,5 +245,5 @@ index 37eee5858a..f89da8c314 100644 int startGNSS(); void stopGNSS(); -- -2.25.1 +2.36.0 diff --git a/patches/0110-Implement-Udp_RemClient-for-TX62.patch b/patches/0110-Implement-Udp_RemClient-for-TX62.patch index e0c5708cb..add10fe21 100644 --- a/patches/0110-Implement-Udp_RemClient-for-TX62.patch +++ b/patches/0110-Implement-Udp_RemClient-for-TX62.patch @@ -1,7 +1,7 @@ From 36cce1ae5736533f43eb5abdef37dd83c585f51a Mon Sep 17 00:00:00 2001 From: Giampaolo Mancini Date: Thu, 3 Feb 2022 09:50:08 +0100 -Subject: [PATCH 110/138] Implement Udp_RemClient for TX62 +Subject: [PATCH 110/157] Implement Udp_RemClient for TX62 --- .../GEMALTO_CINTERION_CellularStack.cpp | 48 +++++++++++++++++-- @@ -68,5 +68,5 @@ index 2993285049..1eca8f54e0 100644 char *ip_start = ip_address; char *ip_stop; -- -2.25.1 +2.36.0 diff --git a/patches/0111-Fix-HostByName-SISX-request.patch b/patches/0111-Fix-HostByName-SISX-request.patch index 523844718..ff34d6c9b 100644 --- a/patches/0111-Fix-HostByName-SISX-request.patch +++ b/patches/0111-Fix-HostByName-SISX-request.patch @@ -1,7 +1,7 @@ From 22f41f4ac363242be58a892c8926cd8008b7c573 Mon Sep 17 00:00:00 2001 From: Giampaolo Mancini Date: Mon, 7 Feb 2022 15:13:41 +0100 -Subject: [PATCH 111/138] Fix HostByName SISX request +Subject: [PATCH 111/157] Fix HostByName SISX request --- .../GEMALTO/CINTERION/GEMALTO_CINTERION_CellularStack.cpp | 7 ++++--- @@ -32,5 +32,5 @@ index 1eca8f54e0..33a73bf9a3 100644 _at.unlock(); return NSAPI_ERROR_DNS_FAILURE; -- -2.25.1 +2.36.0 diff --git a/patches/0112-PwmOut-set-pwm-period-before-duty-cycle.patch b/patches/0112-PwmOut-set-pwm-period-before-duty-cycle.patch index 293bce2dd..8f9430e4c 100644 --- a/patches/0112-PwmOut-set-pwm-period-before-duty-cycle.patch +++ b/patches/0112-PwmOut-set-pwm-period-before-duty-cycle.patch @@ -1,7 +1,7 @@ From 64c32e03c7449d9284bc0e1eae41cb1c73788b5e Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Thu, 3 Feb 2022 14:35:55 +0100 -Subject: [PATCH 112/138] PwmOut: set pwm period before duty cycle +Subject: [PATCH 112/157] PwmOut: set pwm period before duty cycle --- drivers/source/PwmOut.cpp | 2 +- @@ -22,5 +22,5 @@ index ccada968ed..8bbcb23b39 100644 core_util_critical_section_exit(); } -- -2.25.1 +2.36.0 diff --git a/patches/0113-Initial-add-Nicla-Vision-target.patch b/patches/0113-Initial-add-Nicla-Vision-target.patch index f0f689a1c..b42c27eae 100644 --- a/patches/0113-Initial-add-Nicla-Vision-target.patch +++ b/patches/0113-Initial-add-Nicla-Vision-target.patch @@ -1,7 +1,7 @@ From 06c1a6b204b856ef30ab78fdb8b4c5f20f6a6186 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 17 Feb 2021 14:57:44 +0100 -Subject: [PATCH 113/138] Initial: add Nicla Vision target +Subject: [PATCH 113/157] Initial: add Nicla Vision target Add missing repo for BLE --- @@ -35036,5 +35036,5 @@ index 7902341c2f..eb83ff264e 100644 "inherits": ["PORTENTA_H7"], "core": "Cortex-M4F", -- -2.25.1 +2.36.0 diff --git a/patches/0113-Update-COMPONENT_WHD.patch b/patches/0113-Update-COMPONENT_WHD.patch deleted file mode 100644 index 2add0e328..000000000 --- a/patches/0113-Update-COMPONENT_WHD.patch +++ /dev/null @@ -1,66942 +0,0 @@ -From d627a5eda9c31465a83343d6b22f58c2193d922b Mon Sep 17 00:00:00 2001 -From: giulcioffi -Date: Wed, 15 Sep 2021 10:03:13 +0200 -Subject: [PATCH 113/122] Update COMPONENT_WHD - ---- - .../COMPONENT_WHD/CMakeLists.txt | 34 + - .../COMPONENT_WHD/inc/whd.h | 82 - - .../COMPONENT_WHD/inc/whd_events.h | 226 - - .../COMPONENT_WHD/inc/whd_network_types.h | 230 - - .../COMPONENT_WHD/inc/whd_resource_api.h | 128 - - .../COMPONENT_WHD/inc/whd_types.h | 1054 - - .../COMPONENT_WHD/inc/whd_wifi_api.h | 1179 - - .../interface/cy_network_buffer.c | 114 - - .../interface/cy_network_buffer.h | 185 - - .../COMPONENT_WHD/interface/cy_result.h | 239 +- - .../COMPONENT_WHD/interface/cyabs_rtos.h | 285 +- - .../COMPONENT_WHD/interface/cyabs_rtos_impl.h | 8 +- - .../interface/cyabs_rtos_rtxv5.c | 75 +- - .../COMPONENT_WHD/interface/cyhal_gpio.cpp | 83 - - .../COMPONENT_WHD/interface/cyhal_gpio.h | 245 +- - .../COMPONENT_WHD/interface/cyhal_modules.h | 86 - - .../COMPONENT_WHD/interface/cyhal_sdio.c | 799 - - .../COMPONENT_WHD/interface/cyhal_sdio.h | 366 +- - .../COMPONENT_WHD/interface/cyhal_spi.h | 273 +- - .../COMPONENT_WHD/mbed_lib.json | 6 - - .../COMPONENT_WHD/port/cy_hal.c | 85 +- - .../COMPONENT_WHD/port/cy_utils.h | 2 + - .../COMPONENT_WHD/port/cybsp.h | 50 + - .../COMPONENT_WHD/port/cybsp_wifi.c | 219 - - .../COMPONENT_WHD/port/cybsp_wifi.h | 109 - - .../{inc/whd_version.h => port/cycfg.h} | 8 +- - .../COMPONENT_WHD/port/cyhal.h | 52 + - .../COMPONENT_WHD/port/cyhal_gpio.cpp | 104 + - .../{interface => port}/cyhal_hw_types.h | 35 +- - .../COMPONENT_WHD/port/cyhal_sdio.c | 483 + - .../COMPONENT_WHD/port/cyhal_spi.c | 29 + - .../COMPONENT_WHD/port/cyhal_system.h | 20 + - .../include/whd_clm.h => port/wiced_bd.h} | 42 +- - .../COMPONENT_WHD/port/wiced_filesystem.cpp | 220 + - .../COMPONENT_WHD/port/wiced_filesystem.h | 139 + - .../COMPONENT_4343W/4343WA1-mfgtest.bin | Bin 391693 -> 0 bytes - .../COMPONENT_4343W/4343WA1-mfgtest.clm_blob | Bin 7222 -> 0 bytes - .../COMPONENT_4343W/4343WA1-mfgtest_bin.c | 23672 ---------------- - .../4343WA1-mfgtest_clm_blob.c | 400 - - .../firmware/COMPONENT_4343W/4343WA1.bin | Bin 421098 -> 0 bytes - .../firmware/COMPONENT_4343W/4343WA1.clm_blob | Bin 7222 -> 0 bytes - .../4343WA1_bin.c | 4 +- - .../4343WA1_clm_blob.c | 0 - .../resources.h | 7 +- - .../wifi_nvram_image.h | 0 - .../resources/resource_imp/whd_resources.c | 292 - - .../resources/resource_imp/wiced_resource.h | 228 - - .../COMPONENT_WHD/src/bus_protocols/whd_bus.c | 145 - - .../COMPONENT_WHD/src/bus_protocols/whd_bus.h | 123 - - .../src/bus_protocols/whd_bus_common.c | 517 - - .../src/bus_protocols/whd_bus_common.h | 65 - - .../whd_bus_protocol_interface.h | 128 - - .../src/bus_protocols/whd_bus_sdio_protocol.c | 1469 - - .../src/bus_protocols/whd_bus_sdio_protocol.h | 229 - - .../src/bus_protocols/whd_bus_spi_protocol.c | 1038 - - .../src/bus_protocols/whd_bus_spi_protocol.h | 101 - - .../src/bus_protocols/whd_chip_reg.h | 114 - - .../src/bus_protocols/whd_sdio.h | 234 - - .../COMPONENT_WHD/src/bus_protocols/whd_spi.h | 122 - - .../COMPONENT_WHD/src/include/whd_ap.h | 102 - - .../src/include/whd_buffer_api.h | 151 - - .../COMPONENT_WHD/src/include/whd_cdc_bdc.h | 158 - - .../COMPONENT_WHD/src/include/whd_chip.h | 393 - - .../src/include/whd_chip_constants.h | 84 - - .../COMPONENT_WHD/src/include/whd_debug.h | 140 - - .../COMPONENT_WHD/src/include/whd_endian.h | 69 - - .../src/include/whd_events_int.h | 464 - - .../COMPONENT_WHD/src/include/whd_int.h | 113 - - .../src/include/whd_network_if.h | 76 - - .../COMPONENT_WHD/src/include/whd_poll.h | 93 - - .../src/include/whd_resource_if.h | 55 - - .../COMPONENT_WHD/src/include/whd_sdpcm.h | 124 - - .../COMPONENT_WHD/src/include/whd_thread.h | 92 - - .../src/include/whd_thread_internal.h | 55 - - .../COMPONENT_WHD/src/include/whd_types_int.h | 407 - - .../COMPONENT_WHD/src/include/whd_utils.h | 182 - - .../COMPONENT_WHD/src/include/whd_wifi_p2p.h | 49 - - .../COMPONENT_WHD/src/include/whd_wlioctl.h | 3763 --- - .../COMPONENT_WHD/src/whd_ap.c | 772 - - .../COMPONENT_WHD/src/whd_buffer_api.c | 220 - - .../COMPONENT_WHD/src/whd_cdc_bdc.c | 723 - - .../COMPONENT_WHD/src/whd_chip.c | 1456 - - .../COMPONENT_WHD/src/whd_chip_constants.c | 362 - - .../COMPONENT_WHD/src/whd_clm.c | 172 - - .../COMPONENT_WHD/src/whd_debug.c | 62 - - .../COMPONENT_WHD/src/whd_events.c | 475 - - .../COMPONENT_WHD/src/whd_logging.c | 112 - - .../COMPONENT_WHD/src/whd_management.c | 478 - - .../COMPONENT_WHD/src/whd_network_if.c | 85 - - .../COMPONENT_WHD/src/whd_resource_if.c | 103 - - .../COMPONENT_WHD/src/whd_sdpcm.c | 618 - - .../COMPONENT_WHD/src/whd_thread.c | 346 - - .../COMPONENT_WHD/src/whd_utils.c | 877 - - .../COMPONENT_WHD/src/whd_wifi.c | 111 - - .../COMPONENT_WHD/src/whd_wifi_api.c | 4375 --- - .../COMPONENT_WHD/src/whd_wifi_p2p.c | 45 - - .../COMPONENT_WHD/version.txt | 1 - - .../COMPONENT_WHD/whd_config.h | 47 +- - 98 files changed, 2205 insertions(+), 51987 deletions(-) - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/CMakeLists.txt - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_events.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_network_types.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_resource_api.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_types.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_wifi_api.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.cpp - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_modules.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/mbed_lib.json - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.h - rename targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/{inc/whd_version.h => port/cycfg.h} (79%) - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal.h - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_gpio.cpp - rename targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/{interface => port}/cyhal_hw_types.h (78%) - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_sdio.c - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_spi.c - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_system.h - rename targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/{src/include/whd_clm.h => port/wiced_bd.h} (52%) - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.cpp - create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest.bin - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest.clm_blob - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest_bin.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest_clm_blob.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1.bin - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1.clm_blob - rename targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/{COMPONENT_4343W => COMPONENT_4343W_FS}/4343WA1_bin.c (99%) - rename targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/{COMPONENT_4343W => COMPONENT_4343W_FS}/4343WA1_clm_blob.c (100%) - rename targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/{COMPONENT_4343W => COMPONENT_4343W_FS}/resources.h (81%) - rename targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/nvram/{TARGET_STM32H747xI => }/wifi_nvram_image.h (100%) - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/whd_resources.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/wiced_resource.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_protocol_interface.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_chip_reg.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_sdio.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_spi.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_ap.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_buffer_api.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_cdc_bdc.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip_constants.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_debug.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_endian.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_events_int.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_int.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_network_if.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_poll.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_resource_if.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_sdpcm.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread_internal.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_types_int.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_utils.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wifi_p2p.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wlioctl.h - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_ap.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_buffer_api.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_cdc_bdc.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip_constants.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_clm.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_debug.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_events.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_logging.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_management.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_network_if.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_resource_if.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_sdpcm.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_thread.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_utils.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_api.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_p2p.c - delete mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/version.txt - -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/CMakeLists.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/CMakeLists.txt -new file mode 100644 -index 0000000000..55b7e63ecf ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/CMakeLists.txt -@@ -0,0 +1,34 @@ -+# Copyright (c) 2020-2021 ARM Limited. All rights reserved. -+# SPDX-License-Identifier: Apache-2.0 -+ -+add_library(mbed-portenta-whd-4343w-fw INTERFACE) -+target_include_directories(mbed-portenta-whd-4343w-fw -+ INTERFACE -+ resources/firmware/COMPONENT_4343W_FS -+) -+target_sources(mbed-portenta-whd-4343w-fw -+ INTERFACE -+ resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c -+ resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c -+) -+ -+add_library(mbed-portenta-whd-4343w-nvram INTERFACE) -+target_include_directories(mbed-portenta-whd-4343w-nvram INTERFACE resources/nvram) -+ -+add_library(mbed-portenta-whd INTERFACE) -+target_include_directories(mbed-portenta-whd -+ INTERFACE -+ . -+ port -+ interface -+) -+ -+target_sources(mbed-portenta-whd -+ INTERFACE -+ port/cyhal.c -+ port/cyhalgpio.cpp -+ port/cyhalsdio.c -+ port/wiced_filesystem.cpp -+ interface/cyabs_rtos_rtxv5.c -+) -+ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd.h -deleted file mode 100644 -index 3eaff251e2..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd.h -+++ /dev/null -@@ -1,82 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file whd.h -- * Provides abstract pointer type to act as instance for: driver, interface, buffer funcs, network funcs, resource funcs and bus funcs. -- */ -- --#include "whd_types.h" -- --#ifndef INCLUDED_WHD_H --#define INCLUDED_WHD_H -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/** -- * Abstract pointer type that acts as a handle to an instance of the driver -- */ --typedef struct whd_driver *whd_driver_t; -- --/** -- * Abstract pointer type to handle instance of whd interface -- */ --typedef struct whd_interface *whd_interface_t; -- --/** -- * Abstract type that acts as a handle to an instance of a buffer function -- */ --typedef struct whd_buffer_funcs whd_buffer_funcs_t; -- --/** -- * Abstract type that acts as a handle to an instance of a network interface function -- */ --typedef struct whd_netif_funcs whd_netif_funcs_t; -- --/** -- * Abstract type that acts as a handle to an instance of a resource function -- */ --typedef struct whd_resource_source whd_resource_source_t; -- --/** -- * Abstract type that acts as a handle to an instance of a bus function used for SDIO specific functionality -- */ --typedef struct whd_bus_funcs whd_sdio_funcs_t; -- --/** -- * Abstract type that acts as a handle to an instance of a bus function used for SPI specific functionality -- */ --typedef struct whd_bus_funcs whd_spi_funcs_t; -- --/** -- * Structure for storing WHD init configurations -- */ --typedef struct whd_init_config --{ -- void *thread_stack_start; /**< Pointer to the WHD thread stack */ -- uint32_t thread_stack_size; /**< Size of the WHD thread stack */ -- uint32_t thread_priority; /**< Priority to be set to WHD Thread */ -- whd_country_code_t country; /**< Variable to strore country code information */ --} whd_init_config_t; -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* INCLUDED_WHD_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_events.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_events.h -deleted file mode 100644 -index d85bed7054..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_events.h -+++ /dev/null -@@ -1,226 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file whd_events.h -- * Header for Event detection -- * -- * Provides constants and prototypes for functions that allow -- * user applications to receive event callbacks and set event handlers -- */ --#ifndef INCLUDED_WHD_EVENTS_API_H --#define INCLUDED_WHD_EVENTS_API_H -- --#include "whd.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/* List of events */ --#define WLC_E_NONE (0x7FFFFFFE) /**< Indicates the end of the event array list */ -- --#define WLC_E_SET_SSID 0 /**< Indicates status of set SSID. This event occurs when STA tries to join the AP*/ --#define WLC_E_AUTH 3 /**< 802.11 AUTH request event occurs when STA tries to get authenticated with the AP */ --#define WLC_E_DEAUTH 5 /**< 802.11 DEAUTH request event occurs when the the SOFTAP is stopped to deuthenticate the connected stations*/ --#define WLC_E_DEAUTH_IND 6 /**< 802.11 DEAUTH indication event occurs when the STA gets deauthenticated by the AP */ --#define WLC_E_ASSOC 7 /**< 802.11 ASSOC request event occurs when STA joins the AP */ --#define WLC_E_ASSOC_IND 8 /**< 802.11 ASSOC indication occurs when a station joins the SOFTAP that is started */ --#define WLC_E_REASSOC 9 /**< 802.11 REASSOC request event when the STA again gets associated with the AP */ --#define WLC_E_REASSOC_IND 10 /**< 802.11 REASSOC indication occurs when a station again reassociates with the SOFTAP*/ --#define WLC_E_DISASSOC 11 /**< 802.11 DISASSOC request occurs when the STA the tries to leave the AP*/ --#define WLC_E_DISASSOC_IND 12 /**< 802.11 DISASSOC indication occurs when the connected station gets disassociates from SOFTAP, -- also when STA gets diassociated by the AP*/ --#define WLC_E_LINK 16 /**< generic link indication */ --#define WLC_E_PROBREQ_MSG 44 /**< Indicates probe request received for the SOFTAP started*/ --#define WLC_E_PSK_SUP 46 /**< WPA Handshake fail during association*/ --#define WLC_E_ACTION_FRAME 59 /**< Indicates Action frame Rx */ --#define WLC_E_ACTION_FRAME_COMPLETE 60 /**< Indicates Action frame Tx complete */ --#define WLC_E_ESCAN_RESULT 69 /**< escan result event occurs when we scan for the networks */ -- --/* List of status codes - Applicable for any event type */ --#define WLC_E_STATUS_SUCCESS 0 /**< operation was successful */ --#define WLC_E_STATUS_FAIL 1 /**< operation failed */ --#define WLC_E_STATUS_TIMEOUT 2 /**< operation timed out */ --#define WLC_E_STATUS_NO_NETWORKS 3 /**< failed due to no matching network found */ --#define WLC_E_STATUS_ABORT 4 /**< operation was aborted */ --#define WLC_E_STATUS_NO_ACK 5 /**< protocol failure: packet not ack'd */ --#define WLC_E_STATUS_UNSOLICITED 6 /**< AUTH or ASSOC packet was unsolicited */ --#define WLC_E_STATUS_ATTEMPT 7 /**< attempt to assoc to an auto auth configuration */ --#define WLC_E_STATUS_PARTIAL 8 /**< scan results are incomplete */ --#define WLC_E_STATUS_NEWSCAN 9 /**< scan aborted by another scan */ --#define WLC_E_STATUS_NEWASSOC 10 /**< scan aborted due to assoc in progress */ --#define WLC_E_STATUS_11HQUIET 11 /**< 802.11h quiet period started */ --#define WLC_E_STATUS_SUPPRESS 12 /**< user disabled scanning (WLC_SET_SCANSUPPRESS) */ --#define WLC_E_STATUS_NOCHANS 13 /**< no allowable channels to scan */ --#define WLC_E_STATUS_CCXFASTRM 14 /**< scan aborted due to CCX fast roam */ --#define WLC_E_STATUS_CS_ABORT 15 /**< abort channel select */ --#define WLC_E_STATUS_ERROR 16 /**< request failed due to error */ --#define WLC_E_STATUS_INVALID 0xff /**< Invalid status code to init variables. */ -- --#define WLC_SUP_STATUS_OFFSET (256) /**< Status offset added to the status codes to match the values from firmware. */ -- --/** -- * @brief Status code for event WLC_E_PSK_SUP -- * -- * -Basic supplicant authentication states -- * -- + WLC_SUP_DISCONNECTED -- * + WLC_SUP_CONNECTING -- * + WLC_SUP_IDREQUIRED -- * + WLC_SUP_AUTHENTICATING -- * + WLC_SUP_AUTHENTICATED -- * + WLC_SUP_KEYXCHANGE -- * + WLC_SUP_KEYED -- * + WLC_SUP_TIMEOUT -- * + WLC_SUP_LAST_BASIC_STATE -- * -Extended supplicant authentication states -- * + WLC_SUP_KEYXCHANGE_WAIT_M1 -- * + WLC_SUP_KEYXCHANGE_PREP_M2 -- * + WLC_SUP_KEYXCHANGE_WAIT_M3 -- * + WLC_SUP_KEYXCHANGE_PREP_M4 -- * + WLC_SUP_KEYXCHANGE_WAIT_G1 -- * + WLC_SUP_KEYXCHANGE_PREP_G2 -- */ --typedef enum sup_auth_status --{ -- WLC_SUP_DISCONNECTED = 0 + WLC_SUP_STATUS_OFFSET, /**< Disconnected */ -- WLC_SUP_CONNECTING = 1 + WLC_SUP_STATUS_OFFSET, /**< Connecting */ -- WLC_SUP_IDREQUIRED = 2 + WLC_SUP_STATUS_OFFSET, /**< ID Required */ -- WLC_SUP_AUTHENTICATING = 3 + WLC_SUP_STATUS_OFFSET, /**< Authenticating */ -- WLC_SUP_AUTHENTICATED = 4 + WLC_SUP_STATUS_OFFSET, /**< Authenticated */ -- WLC_SUP_KEYXCHANGE = 5 + WLC_SUP_STATUS_OFFSET, /**< Key Exchange */ -- WLC_SUP_KEYED = 6 + WLC_SUP_STATUS_OFFSET, /**< Key Exchanged */ -- WLC_SUP_TIMEOUT = 7 + WLC_SUP_STATUS_OFFSET, /**< Timeout */ -- WLC_SUP_LAST_BASIC_STATE = 8 + WLC_SUP_STATUS_OFFSET, /**< Last Basic State */ -- WLC_SUP_KEYXCHANGE_WAIT_M1 = WLC_SUP_AUTHENTICATED, /**< Waiting to receive handshake msg M1 */ -- WLC_SUP_KEYXCHANGE_PREP_M2 = WLC_SUP_KEYXCHANGE, /**< Preparing to send handshake msg M2 */ -- WLC_SUP_KEYXCHANGE_WAIT_M3 = WLC_SUP_LAST_BASIC_STATE, /**< Waiting to receive handshake msg M3 */ -- WLC_SUP_KEYXCHANGE_PREP_M4 = 9 + WLC_SUP_STATUS_OFFSET, /**< Preparing to send handshake msg M4 */ -- WLC_SUP_KEYXCHANGE_WAIT_G1 = 10 + WLC_SUP_STATUS_OFFSET, /**< Waiting to receive handshake msg G1 */ -- WLC_SUP_KEYXCHANGE_PREP_G2 = 11 + WLC_SUP_STATUS_OFFSET /**< Preparing to send handshake msg G2 */ --} sup_auth_status_t; -- --#define WHD_MSG_IFNAME_MAX 16 /**< Max length of Interface name */ -- --#pragma pack(1) -- --/** -- * Structure to store ethernet header fields in event packets -- */ --typedef struct whd_event_eth_hdr --{ -- uint16_t subtype; /**< Vendor specific..32769 */ -- uint16_t length; /**< Length of ethernet header*/ -- uint8_t version; /**< Version is 0 */ -- uint8_t oui[3]; /**< Organizationally Unique Identifier */ -- uint16_t usr_subtype; /**< User specific data */ --} whd_event_eth_hdr_t; -- --/** -- * Structure to store ethernet destination, source and ethertype in event packets -- */ --typedef struct whd_event_ether_header --{ -- whd_mac_t destination_address; /**< Ethernet destination address */ -- whd_mac_t source_address; /**< Ethernet source address */ -- uint16_t ethertype; /**< Ethertype for identifying event packets */ --} whd_event_ether_header_t; -- --/** -- * Structure to store fields after ethernet header in event message -- */ --struct whd_event_msg --{ -- uint16_t version; /**< Version */ -- uint16_t flags; /**< see flags below */ -- uint32_t event_type; /**< Event type indicating a response from firmware for IOCTLs/IOVARs sent */ -- uint32_t status; /**< Status code corresponding to any event type */ -- uint32_t reason; /**< Reason code associated with the event occurred */ -- uint32_t auth_type; /**< WLC_E_AUTH: 802.11 AUTH request */ -- uint32_t datalen; /**< Length of data in event message */ -- whd_mac_t addr; /**< Station address (if applicable) */ -- char ifname[WHD_MSG_IFNAME_MAX]; /**< name of the incoming packet interface */ -- uint8_t ifidx; /**< destination OS i/f index */ -- uint8_t bsscfgidx; /**< source bsscfg index */ --}; -- --/** -- * Event structure used by driver msgs -- */ --typedef struct whd_event --{ -- whd_event_ether_header_t eth; /**< Variable to store ethernet destination, source and ethertype in event packets */ -- whd_event_eth_hdr_t eth_evt_hdr; /**< Variable to store ethernet header fields in event message */ -- whd_event_header_t whd_event; /**< Variable to store rest of the event packet fields after ethernet header */ -- /* data portion follows */ --} whd_event_t; -- --#pragma pack() -- --/** @addtogroup event WHD Event handling API -- * Functions that allow user applications to receive event callbacks and set event handlers -- * @{ -- */ --/** Event handler prototype definition -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param event_header whd event header -- * @param event_data event data -- * @param handler_user_data semaphore data -- */ --typedef void *(*whd_event_handler_t)(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, void *handler_user_data); -- --/** Registers a handler to receive event callbacks. -- * -- * This function registers a callback handler to be notified when -- * a particular event is received. -- * -- * -- * @note Currently each event may only be registered to one handler and there is a limit to the number of simultaneously -- * registered events. Maximum of 5 event handlers can registered simultaneously, this also includes the internal -- * event handler registration which happens during scan, join and starting an AP. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param event_type Pointer to the event list array -- * @param handler_func A function pointer to the handler callback -- * @param handler_user_data A pointer value which will be passed to the event handler function -- * at the time an event is triggered (NULL is allowed) -- * @param event_index Entry where the event handler is registered in the list -- * -- * @return WHD_SUCCESS or Error code -- */ --uint32_t whd_wifi_set_event_handler(whd_interface_t ifp, const uint32_t *event_type, whd_event_handler_t handler_func, -- void *handler_user_data, uint16_t *event_index); --/* @} */ -- --/** Delete/Deregister the event entry where callback is registered -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param event_index Event index obtained during registration by whd_wifi_set_event_handler -- * -- * @return WHD_SUCCESS or Error code -- */ -- --uint32_t whd_wifi_deregister_event_handler(whd_interface_t ifp, uint16_t event_index); -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_network_types.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_network_types.h -deleted file mode 100644 -index b8b197b554..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_network_types.h -+++ /dev/null -@@ -1,230 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file whd_network_types.h -- * Prototypes of functions corresponding to Buffer and Network Interface -- * -- * This file provides prototypes for functions which allows different functionalities related to: -- * - Buffer Interface: Allocate and release a packet buffer, Retrieve the current pointer and size of a packet buffer, etc. -- * - Network Interface: Called by WHD to pass received data to the network stack, to send an ethernet frame to WHD, etc. -- */ --#include "whd.h" -- --#ifndef INC_WHD_NETWORK_TYPES_H_ --#define INC_WHD_NETWORK_TYPES_H_ -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Constants --******************************************************/ --/** @addtogroup buffif WHD Buffer Interface API -- * Allows WHD to perform buffer related operations like, allocating, releasing, retrieving the current pointer of and size of a packet buffer. -- * @{ -- */ -- --/** -- * Indicates transmit/receive direction that the packet buffer has -- * been used for. This is needed if tx/rx pools are separate. -- */ --typedef enum --{ -- WHD_NETWORK_TX, /**< Transmit direction */ -- WHD_NETWORK_RX /**< Recieve direction */ --} whd_buffer_dir_t; -- --/** -- * Allows WHD to perform buffer related operations like, allocating, releasing, retrieving the current pointer of and size of a packet buffer. -- */ --struct whd_buffer_funcs --{ -- /** Allocates a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Attempts to allocate a packet buffer of the size requested. It can do this -- * by allocating a pre-existing packet from a pool, using a static buffer, -- * or by dynamically allocating memory. The method of allocation does not -- * concern WHD, however it must match the way the network stack expects packet -- * buffers to be allocated. Usually WHD requires packet of size of WHD_LINK_MTU -- * which includes the MTU, other other various header. Refer to whd_types.h -- * to find the size of WHD_LINK_MTU -- * -- * @param buffer A pointer which receives the allocated packet buffer handle -- * @param direction Indicates transmit/receive direction that the packet buffer is -- * used for. This may be needed if tx/rx pools are separate. -- * @param size The number of bytes to allocate. -- * @param wait Whether to wait for a packet buffer to be available -- * -- * @return WHD_SUCCESS or error code -- * -- */ -- whd_result_t (*whd_host_buffer_get)(whd_buffer_t *buffer, whd_buffer_dir_t direction, unsigned short size, -- unsigned long wait); -- -- /** Releases a packet buffer -- * -- * Implemented in the port layer interface, which will be specific to the -- * buffering scheme in use. -- * This function is used by WHD to indicate that it no longer requires -- * a packet buffer. The buffer can then be released back into a pool for -- * reuse, or the dynamically allocated memory can be freed, according to -- * how the packet was allocated. -- * Returns void since WHD cannot do anything about failures -- * -- * @param buffer The handle of the packet buffer to be released -- * @param direction Indicates transmit/receive direction that the packet buffer has -- * been used for. This might be needed if tx/rx pools are separate. -- * -- */ -- void (*whd_buffer_release)(whd_buffer_t buffer, whd_buffer_dir_t direction); -- -- /** Retrieves the current pointer of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, this function allows WHD to get -- * the current 'front' location pointer. -- * -- * @param buffer The handle of the packet buffer whose pointer is to be retrieved -- * -- * @return The packet buffer's current pointer. -- */ -- uint8_t *(*whd_buffer_get_current_piece_data_pointer)(whd_buffer_t buffer); -- -- /** Retrieves the size of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, the memory block use to contain a packet buffer -- * will often be larger than the current size of the packet buffer data. -- * This function allows WHD to retrieve the current size of a packet buffer's data. -- * -- * @param buffer The handle of the packet buffer whose size is to be retrieved -- * -- * @return The size of the packet buffer. -- */ -- uint16_t (*whd_buffer_get_current_piece_size)(whd_buffer_t buffer); -- -- /** Sets the current size of a WHD packet -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * This function sets the current length of a WHD packet buffer -- * -- * @param buffer The packet to be modified -- * @param size The new size of the packet buffer -- * -- * @return WHD_SUCCESS or error code -- */ -- whd_result_t (*whd_buffer_set_size)(whd_buffer_t buffer, unsigned short size); -- -- /** Moves the current pointer of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the buffering scheme in use. -- * -- * Since packet buffers usually need to be created with space at the front for additional headers, -- * this function allows WHD to move the current 'front' location pointer so that it has space to -- * add headers to transmit packets, and so that the network stack does not see the internal WHD -- * headers on received packets. -- * -- * @param buffer A pointer to the handle of the current packet buffer for which the -- * current pointer will be moved. On return this may contain a pointer -- * to a newly allocated packet buffer which has been daisy chained to -- * the front of the given packet buffer. This would be the case if the given packet -- * buffer didn't have enough space at the front. -- * @param add_remove_amount This is the number of bytes to move the current pointer of the packet -- * buffer - a negative value increases the space for headers at the front -- * of the packet, a positive value decreases the space. -- * -- * @return WHD_SUCCESS or error code -- */ -- whd_result_t (*whd_buffer_add_remove_at_front)(whd_buffer_t *buffer, int32_t add_remove_amount); --}; --/* @} */ -- --/** @addtogroup netif WHD Network Interface API -- * Allows WHD to pass received data to the network stack, to send an ethernet frame to WHD, etc. -- * @{ -- */ -- --/** -- * Contains functions which allows WHD to pass received data to the network stack, to send an ethernet frame to WHD, etc -- */ --struct whd_netif_funcs --{ -- /** Called by WHD to pass received data to the network stack -- * -- * -- * Packets received from the Wi-Fi network by WHD are forwarded to by calling function ptr which -- * must be implemented in the network interface. Ethernet headers -- * are present at the start of these packet buffers. -- * -- * This function is called asynchronously in the context of the -- * WHD thread whenever new data has arrived. -- * Packet buffers are allocated within WHD, and ownership is transferred -- * to the network stack. The network stack or application is thus -- * responsible for releasing the packet buffers. -- * Most packet buffering systems have a pointer to the 'current point' within -- * the packet buffer. When this function is called, the pointer points -- * to the start of the Ethernet header. There is other inconsequential data -- * before the Ethernet header. -- * -- * It is preferable that the (whd_network_process_ethernet_data)() function simply puts -- * the received packet on a queue for processing by another thread. This avoids the -- * WHD thread being unnecessarily tied up which would delay other packets -- * being transmitted or received. -- * -- * @param interface The interface on which the packet was received. -- * @param buffer Handle of the packet which has just been received. Responsibility for -- * releasing this buffer is transferred from WHD at this point. -- * -- */ -- void (*whd_network_process_ethernet_data)(whd_interface_t ifp, whd_buffer_t buffer); --}; -- --/** To send an ethernet frame to WHD (called by the Network Stack) -- * -- * This function takes ethernet data from the network stack and queues it for transmission over the wireless network. -- * The function can be called from any thread context as it is thread safe, however -- * it must not be called from interrupt context since it might get blocked while waiting -- * for a lock on the transmit queue. -- * -- * This function returns immediately after the packet has been queued for transmit, -- * NOT after it has been transmitted. Packet buffers passed to the WHD -- * are released inside the WHD once they have been transmitted. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param buffer Handle of the packet buffer to be sent. -- * -- * @return WHD_SUCCESS or Error code -- * -- */ --extern void whd_network_send_ethernet_data(whd_interface_t ifp, whd_buffer_t buffer); --/* @} */ -- -- --#ifdef __cplusplus --} /*extern "C" */ --#endif --#endif /* INC_WHD_NETWORK_TYPES_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_resource_api.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_resource_api.h -deleted file mode 100644 -index eb1071c71b..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_resource_api.h -+++ /dev/null -@@ -1,128 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file whd_resource_api.h -- * Prototypes of functions for providing external resources to the radio driver -- * -- * This file provides prototypes for functions which allow -- * WHD to download firmware, NVRAM and CLM BLOB on a particular hardware platform. -- * -- */ --#include "whd.h" -- --#ifndef INCLUDED_WHD_RESOURCE_API_H_ --#define INCLUDED_WHD_RESOURCE_API_H_ -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --#define BLOCK_SIZE 1024 /**< Size of the block */ --/** -- * Type of resources -- */ --typedef enum --{ -- WHD_RESOURCE_WLAN_FIRMWARE, /**< Resource type: WLAN Firmware */ -- WHD_RESOURCE_WLAN_NVRAM, /**< Resource type: NVRAM file */ -- WHD_RESOURCE_WLAN_CLM, /**< Resource type: CLM_BLOB file */ --} whd_resource_type_t; -- --/****************************************************** --* Global Variables --******************************************************/ -- --/** @addtogroup res WHD Resource API -- * @brief Functions that enable WHD to download WLAN firmware, NVRAM and CLM BLOB on a particular hardware platform. -- * @{ -- */ -- --/** -- * Interface to a data source that provides external resources to the radio driver -- */ -- --/** This data structure defines a source for data generally intended to be downloaded to the radio device. -- * -- * The data is assumed to be available as a set of blocks that are all the same size with the exception -- * of the last block. The whd_get_resource_block_size function returns this block size. The whd_get_resource_block call -- * returns a pointer to a block of data. The actual storage for the data block is owned by the data source, so only a pointer -- * to the block is returned. There are two predominate use cases. If the data is stored in the internal -- * flash memory, then whd_get_resource_no_of_blocks will return 1 and a call to whd_get_resource_block will return a pointer to -- * the data image with the size being the size of the data image. If the data is stored in an external flash of some -- * type, each block of data can be read from the external flash one at a time. whd_get_resource_no_of_blocks will return -- * the physical number of blocks in the data and each call to whd_get_resource_block will read data from the external memory -- * and make it available via an internal buffer. -- */ --struct whd_resource_source --{ -- /** Gets the size of the resource for respective resource type -- * -- * -- * @param whd_drv Pointer to handle instance of the driver -- * @param resource Type of resource - WHD_RESOURCE_WLAN_FIRMWARE, WHD_RESOURCE_WLAN_NVRAM, WHD_RESOURCE_WLAN_CLM -- * @param size_out Size of the resource -- * -- * @return WHD_SUCCESS or error code -- * -- */ -- uint32_t (*whd_resource_size)(whd_driver_t whd_drv, whd_resource_type_t resource, uint32_t *size_out); -- -- /** Gets the resource block for specified resource type -- * -- * @param whd_drv Pointer to handle instance of the driver -- * @param type Type of resource - WHD_RESOURCE_WLAN_FIRMWARE, WHD_RESOURCE_WLAN_NVRAM, WHD_RESOURCE_WLAN_CLM -- * @param blockno The number of block -- * @param data Pointer to a block of data -- * @param size_out Size of the resource -- * -- * @return WHD_SUCCESS or error code -- * -- */ -- uint32_t (*whd_get_resource_block)(whd_driver_t whd_drv, whd_resource_type_t type, -- uint32_t blockno, const uint8_t **data, uint32_t *size_out); -- -- /** Gets block count for the specified resource_type -- * -- * @param whd_drv Pointer to handle instance of the driver -- * @param type Type of resource - WHD_RESOURCE_WLAN_FIRMWARE, WHD_RESOURCE_WLAN_NVRAM, WHD_RESOURCE_WLAN_CLM -- * @param block_count Pointer to store block count for the resource -- * -- * @return WHD_SUCCESS or error code -- * -- */ -- uint32_t (*whd_get_resource_no_of_blocks)(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *block_count); -- -- /** Gets block size for the specified resource_type -- * -- * @param whd_drv Pointer to handle instance of the driver -- * @param type Type of resources - WHD_RESOURCE_WLAN_FIRMWARE, WHD_RESOURCE_WLAN_NVRAM, WHD_RESOURCE_WLAN_CLM -- * @param size_out Pointer to store size of the block -- * -- * @return WHD_SUCCESS or error code -- * -- */ -- uint32_t (*whd_get_resource_block_size)(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *size_out); --}; -- --/** @} */ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_RESOURCE_API_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_types.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_types.h -deleted file mode 100644 -index e470bb9574..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_types.h -+++ /dev/null -@@ -1,1054 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file whd_types.h -- * Defines common data types used with WHD -- * -- */ -- --#include --#include "cy_result.h" --#include "cyhal_hw_types.h" -- --#ifndef INCLUDED_WHD_TYPES_H_ --#define INCLUDED_WHD_TYPES_H_ -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Macros --******************************************************/ --#define SSID_NAME_SIZE (32) /**< SSID Length */ -- --#define WEP_ENABLED 0x0001 /**< Flag to enable WEP Security */ --#define TKIP_ENABLED 0x0002 /**< Flag to enable TKIP Encryption */ --#define AES_ENABLED 0x0004 /**< Flag to enable AES Encryption */ --#define SHARED_ENABLED 0x00008000 /**< Flag to enable Shared key Security */ --#define WPA_SECURITY 0x00200000 /**< Flag to enable WPA Security */ --#define WPA2_SECURITY 0x00400000 /**< Flag to enable WPA2 Security */ --#define WPA3_SECURITY 0x01000000 /**< Flag to enable WPA3 PSK Security */ --#define SECURITY_MASK (WEP_ENABLED | TKIP_ENABLED | AES_ENABLED) /**< Flag to Security mask */ -- --#define ENTERPRISE_ENABLED 0x02000000 /**< Flag to enable Enterprise Security */ --#define WPS_ENABLED 0x10000000 /**< Flag to enable WPS Security */ --#define IBSS_ENABLED 0x20000000 /**< Flag to enable IBSS mode */ --#define FBT_ENABLED 0x40000000 /**< Flag to enable FBT */ -- --#define PM1_POWERSAVE_MODE (1) /**< Powersave mode on specified interface without regard for throughput reduction */ --#define PM2_POWERSAVE_MODE (2) /**< Powersave mode on specified interface with High throughput */ --#define NO_POWERSAVE_MODE (0) /**< No Powersave mode */ -- --/** -- * Suppress unused parameter warning -- */ --#define UNUSED_PARAMETER(x) ( (void)(x) ) -- --/** -- * Suppress unused variable warning -- */ --#define UNUSED_VARIABLE(x) ( (void)(x) ) -- --/** -- * Suppress unused variable warning occurring due to an assert which is disabled in release mode -- */ --#define REFERENCE_DEBUG_ONLY_VARIABLE(x) ( (void)(x) ) -- --/****************************************************** --*@cond Type Definitions --******************************************************/ --typedef void *whd_buffer_t; --typedef struct wl_bss_info_struct whd_bss_info_t; --typedef struct edcf_acparam whd_edcf_ac_param_t; --typedef struct wl_af_params whd_af_params_t; --typedef struct whd_arp_stats_s whd_arp_stats_t; --typedef struct wl_pkt_filter_stats whd_pkt_filter_stats_t; --typedef struct whd_tko_retry whd_tko_retry_t; --typedef struct whd_tko_connect whd_tko_connect_t; --typedef struct whd_tko_status whd_tko_status_t; --/** @endcond */ --/****************************************************** --* Constants --******************************************************/ -- --#define WIFI_IE_OUI_LENGTH (3) /**< OUI length for Information Element */ -- --/* Below constants are used to allocate the buffer pool by the application */ -- --#define BDC_HEADER_WITH_PAD 6 /**< BDC Header with padding 4 + 2 */ -- --/** From bdc header, Ethernet data starts after an offset of (bdc_header->data_offset<<2). -- * It is variable, but usually 4. -- */ --#define BDC_HEADER_OFFSET_TO_DATA 4 -- --#define SDPCM_HEADER (8 + 4) /**< SDPCM SW header + Frame tag */ -- --#define MAX_BUS_HEADER_SIZE 4 /**< Max bus header size for all bus types (sdio/spi) */ -- --#define BUFFER_OVERHEAD 4 /**< Buffer overhead, sizeof(void *) */ -- --/** -- * The maximum space in bytes required for headers in front of the Ethernet header. -- * 6 + (8 + 4) + 4 + 4 + 4 = 30 bytes -- */ --#define WHD_LINK_HEADER (BDC_HEADER_WITH_PAD + BDC_HEADER_OFFSET_TO_DATA + \ -- SDPCM_HEADER + MAX_BUS_HEADER_SIZE + BUFFER_OVERHEAD) -- --/** -- * The size of an Ethernet header -- */ --#define WHD_ETHERNET_SIZE (14) -- --/** -- * The size in bytes of the Link layer header i.e. the whd specific headers and the Ethernet header -- */ --#define WHD_PHYSICAL_HEADER (WHD_LINK_HEADER + WHD_ETHERNET_SIZE) -- --/** -- * The maximum size in bytes of the data part of an Ethernet frame -- */ --#ifndef WHD_PAYLOAD_MTU --#define WHD_PAYLOAD_MTU (1500) --#endif -- --/** -- * The maximum size in bytes of a packet used within whd. -- * Pool should be atleast of this size. -- * Usually buffer pools needs implementation specific headers like pbuf header etc, that should be -- * taken into account along with this during buffer pool creation. Also buffer pools needs alignment with -- * cache size of the platform for better performance -- */ --#define WHD_LINK_MTU (WHD_PAYLOAD_MTU + WHD_PHYSICAL_HEADER) -- --/** @cond */ --#ifdef __x86_64__ --typedef uint64_t whd_thread_arg_t; --#else --typedef uint32_t whd_thread_arg_t; --#endif --/** @endcond */ --/****************************************************** --* Structures and Enumerations --******************************************************/ --/** -- * Enumeration of Dot11 Reason Codes -- */ --typedef enum --{ -- WHD_DOT11_RC_RESERVED = 0, /**< Reserved */ -- WHD_DOT11_RC_UNSPECIFIED = 1 /**< Unspecified */ --} whd_dot11_reason_code_t; -- --/** -- * Boolean values -- */ --typedef enum --{ -- WHD_FALSE = 0, /**< Boolean True */ -- WHD_TRUE = 1 /**< Boolean False */ --} whd_bool_t; -- -- --/** -- * Transfer direction for the WHD platform bus interface -- */ --typedef enum --{ -- /* If updating this enum, the bus_direction_mapping variable will also need to be updated */ -- BUS_READ, /**< Specifies bus type and read direction */ -- BUS_WRITE /**< Specifies bus type and write direction */ --} whd_bus_transfer_direction_t; -- --/** -- * Enumeration of Wi-Fi security modes -- */ --typedef enum --{ -- WHD_SECURITY_OPEN = 0, /**< Open security */ -- WHD_SECURITY_WEP_PSK = WEP_ENABLED, /**< WEP PSK Security with open authentication */ -- WHD_SECURITY_WEP_SHARED = (WEP_ENABLED | SHARED_ENABLED), /**< WEP PSK Security with shared authentication */ -- WHD_SECURITY_WPA_TKIP_PSK = (WPA_SECURITY | TKIP_ENABLED), /**< WPA PSK Security with TKIP */ -- WHD_SECURITY_WPA_AES_PSK = (WPA_SECURITY | AES_ENABLED), /**< WPA PSK Security with AES */ -- WHD_SECURITY_WPA_MIXED_PSK = (WPA_SECURITY | AES_ENABLED | TKIP_ENABLED), /**< WPA PSK Security with AES & TKIP */ -- WHD_SECURITY_WPA2_AES_PSK = (WPA2_SECURITY | AES_ENABLED), /**< WPA2 PSK Security with AES */ -- WHD_SECURITY_WPA2_TKIP_PSK = (WPA2_SECURITY | TKIP_ENABLED), /**< WPA2 PSK Security with TKIP */ -- WHD_SECURITY_WPA2_MIXED_PSK = (WPA2_SECURITY | AES_ENABLED | TKIP_ENABLED), /**< WPA2 PSK Security with AES & TKIP */ -- WHD_SECURITY_WPA2_FBT_PSK = (WPA2_SECURITY | AES_ENABLED | FBT_ENABLED), /**< WPA2 FBT PSK Security with AES & TKIP */ -- WHD_SECURITY_WPA3_SAE = (WPA3_SECURITY | AES_ENABLED), /**< WPA3 Security with AES */ -- WHD_SECURITY_WPA2_WPA_AES_PSK = (WPA2_SECURITY | WPA_SECURITY | AES_ENABLED), /**< WPA2 WPA PSK Security with AES */ -- WHD_SECURITY_WPA2_WPA_MIXED_PSK = (WPA2_SECURITY | WPA_SECURITY | AES_ENABLED | TKIP_ENABLED), /**< WPA2 WPA PSK Security with AES & TKIP */ -- -- WHD_SECURITY_WPA3_WPA2_PSK = (WPA3_SECURITY | WPA2_SECURITY | AES_ENABLED), /**< WPA3 WPA2 PSK Security with AES */ -- -- WHD_SECURITY_WPA_TKIP_ENT = (ENTERPRISE_ENABLED | WPA_SECURITY | TKIP_ENABLED), /**< WPA Enterprise Security with TKIP */ -- WHD_SECURITY_WPA_AES_ENT = (ENTERPRISE_ENABLED | WPA_SECURITY | AES_ENABLED), /**< WPA Enterprise Security with AES */ -- WHD_SECURITY_WPA_MIXED_ENT = (ENTERPRISE_ENABLED | WPA_SECURITY | AES_ENABLED | TKIP_ENABLED), /**< WPA Enterprise Security with AES & TKIP */ -- WHD_SECURITY_WPA2_TKIP_ENT = (ENTERPRISE_ENABLED | WPA2_SECURITY | TKIP_ENABLED), /**< WPA2 Enterprise Security with TKIP */ -- WHD_SECURITY_WPA2_AES_ENT = (ENTERPRISE_ENABLED | WPA2_SECURITY | AES_ENABLED), /**< WPA2 Enterprise Security with AES */ -- WHD_SECURITY_WPA2_MIXED_ENT = (ENTERPRISE_ENABLED | WPA2_SECURITY | AES_ENABLED | TKIP_ENABLED), /**< WPA2 Enterprise Security with AES & TKIP */ -- WHD_SECURITY_WPA2_FBT_ENT = (ENTERPRISE_ENABLED | WPA2_SECURITY | AES_ENABLED | FBT_ENABLED), /**< WPA2 Enterprise Security with AES & FBT */ -- -- WHD_SECURITY_IBSS_OPEN = (IBSS_ENABLED), /**< Open security on IBSS ad-hoc network */ -- WHD_SECURITY_WPS_SECURE = AES_ENABLED, /**< WPS with AES security */ -- -- WHD_SECURITY_UNKNOWN = -1, /**< May be returned by scan function if security is unknown. Do not pass this to the join function! */ -- -- WHD_SECURITY_FORCE_32_BIT = 0x7fffffff /**< Exists only to force whd_security_t type to 32 bits */ --} whd_security_t; -- --/** -- * Enumeration of methods of scanning -- */ --typedef enum --{ -- WHD_SCAN_TYPE_ACTIVE = 0x00, /**< Actively scan a network by sending 802.11 probe(s) */ -- WHD_SCAN_TYPE_PASSIVE = 0x01, /**< Passively scan a network by listening for beacons from APs */ -- WHD_SCAN_TYPE_PNO = 0x02, /**< Use preferred network offload to detect an AP */ -- WHD_SCAN_TYPE_PROHIBITED_CHANNELS = 0x04, /**< Permit (passively) scanning a channel that isn't valid for the current country */ -- WHD_SCAN_TYPE_NO_BSSID_FILTER = 0x08 /**< Return a scan record for each beacon or probe response RX'ed */ --} whd_scan_type_t; -- --/** -- * Enumeration of network types -- */ --typedef enum --{ -- WHD_BSS_TYPE_INFRASTRUCTURE = 0, /**< Denotes infrastructure network */ -- WHD_BSS_TYPE_ADHOC = 1, /**< Denotes an 802.11 ad-hoc IBSS network */ -- WHD_BSS_TYPE_ANY = 2, /**< Denotes either infrastructure or ad-hoc network */ -- WHD_BSS_TYPE_MESH = 3, /**< Denotes 802.11 mesh network */ -- -- WHD_BSS_TYPE_UNKNOWN = -1 /**< May be returned by scan function if BSS type is unknown. Do not pass this to the Join function */ --} whd_bss_type_t; -- --/** -- * Enumeration of 802.11 radio bands -- */ --typedef enum --{ -- WHD_802_11_BAND_5GHZ = 0, /**< Denotes 5GHz radio band */ -- WHD_802_11_BAND_2_4GHZ = 1 /**< Denotes 2.4GHz radio band */ --} whd_802_11_band_t; -- --/** -- * Enumeration of custom IE(Information Element) management actions -- */ --typedef enum --{ -- WHD_ADD_CUSTOM_IE, /**< Add a custom IE(Information Element) */ -- WHD_REMOVE_CUSTOM_IE /**< Remove a custom IE(Information Element) */ --} whd_custom_ie_action_t; -- -- --/** -- * Enumeration of listen interval time unit types -- */ --typedef enum --{ -- WHD_LISTEN_INTERVAL_TIME_UNIT_BEACON, /**< Time units specified in beacon periods */ -- WHD_LISTEN_INTERVAL_TIME_UNIT_DTIM /**< Time units specified in DTIM periods */ --} whd_listen_interval_time_unit_t; -- --/** -- * Structure for storing scan status -- */ --typedef enum --{ -- WHD_SCAN_INCOMPLETE, /**< Denotes that scan is not finished */ -- WHD_SCAN_COMPLETED_SUCCESSFULLY, /**< Successful completion of scan */ -- WHD_SCAN_ABORTED, /**< Scan is aborted */ --} whd_scan_status_t; -- --/** -- * Structure for storing radio band list information -- */ --typedef struct --{ -- int32_t number_of_bands; /**< Number of bands supported, currently 1 or 2 */ -- int32_t current_band; /**< Current band type: WLC_BAND_2G or WLC_BAND_5G */ -- int32_t other_band; /**< If value of number_of_bands parameter is 2, then this member specifies the 2nd band */ --} whd_band_list_t; -- --/** -- * Enumeration of scan result flags -- */ --typedef enum --{ -- WHD_SCAN_RESULT_FLAG_RSSI_OFF_CHANNEL = 0x01, /**< RSSI came from an off channel DSSS (1 or 1 Mb) Rx */ -- WHD_SCAN_RESULT_FLAG_BEACON = 0x02 /**< Beacon (vs probe response) */ --} whd_scan_result_flag_t; -- --/** -- * Protected Management Frame Capability -- */ --enum --{ -- WL_MFP_NONE = 0, /**< Disables the client support for MFP. */ -- WL_MFP_CAPABLE, /**< Allows both MFP-capable and clients that do not support MFP to join the network. */ -- WL_MFP_REQUIRED /**< Clients are allowed to associate only if MFP is negotiated. */ --}; -- -- --/** -- * Enumeration of ioctl get -- */ --typedef enum --{ -- WHD_IOCTL_GET_RATE = 12, -- WHD_IOCTL_GET_COUNTRY = 83, -- WHD_IOCTL_GET_CLK = 160, -- WHD_IOCTL_GET_WSEC = 133, -- WHD_IOCTL_GET_AUTH = 21, -- WHD_IOCTL_GET_WPA_AUTH = 164, -- WHD_IOCTL_GET_PM = 85, -- WHD_IOCTL_GET_BSSID = 23, -- WHD_IOCTL_GET_ASSOCLIST = 159, -- WHD_IOCTL_GET_BSS_INFO = 136, -- WHD_IOCTL_GET_CHANNEL = 29 -- --} whd_usr_ioctl_get_list_t; -- --/** -- * Enumeration of ioctl set -- */ --typedef enum --{ -- WHD_IOCTL_SET_CHANNEL = 30, -- WHD_IOCTL_SET_WSEC_PMK = 268, -- WHD_IOCTL_SET_KEY = 45, -- WHD_IOCTL_SET_WPA_AUTH = 165, -- WHD_IOCTL_SCB_DEAUTHENTICATE_FOR_REASON = 201, -- WHD_IOCTL_SET_PM = 86, -- WHD_IOCTL_SET_SSID = 26, -- WHD_IOCTL_SET_BCNPRD = 76, -- WHD_IOCTL_SET_DTIMPRD = 78, -- WHD_IOCTL_SET_WSEC = 134, -- WHD_IOCTL_SET_INFRA = 20, -- WHD_IOCTL_SET_AUTH = 22 -- --} whd_usr_ioctl_set_list_t; -- --/** -- * IOVAR set list -- */ --typedef enum --{ -- WHD_IOVAR_SET_MFP = 0, -- WHD_IOVAR_SET_MPC, -- WHD_IOVAR_SET_AMPDU_BA_WINDOW_SIZE, -- WHD_IOVAR_SET_AMPDU_MPDU, -- WHD_IOVAR_SET_LISTEN_INTERVAL_BEACON, -- WHD_IOVAR_SET_LISTEN_INTERVAL_DTIM, -- WHD_IOVAR_SET_LISTEN_INTERVAL_ASSOC, --} whd_usr_iovar_set_list_t; -- --/** -- * IOVAR get list -- */ --typedef enum --{ -- WHD_IOVAR_GET_MFP = 0, -- WHD_IOVAR_GET_MPC, -- WHD_IOVAR_GET_AMPDU_BA_WINDOW_SIZE, -- WHD_IOVAR_GET_AMPDU_MPDU, -- WHD_IOVAR_GET_LISTEN_INTERVAL, /**< Get Listen Interval value */ -- WHD_IOVAR_GET_MAC_ADDRESS, /**< Get mac address */ --} whd_usr_iovar_get_list_t; -- --/****************************************************** --* Type Definitions --******************************************************/ --/** @cond */ --typedef struct whd_event_msg whd_event_header_t; --/** @endcond */ -- --/** -- * Structure for storing a MAC address (Wi-Fi Media Access Control address). -- */ --typedef struct --{ -- uint8_t octet[6]; /**< Unique 6-byte MAC address */ --} whd_mac_t; -- --/** -- * Structure for storing a Service Set Identifier (i.e. Name of Access Point) -- */ --typedef struct --{ -- uint8_t length; /**< SSID length */ -- uint8_t value[SSID_NAME_SIZE]; /**< SSID name (AP name) */ --} whd_ssid_t; -- --/**< -- The received packet formats are different when EXT_STA is enabled. In case -- of EXT_STA the received packets are in 802.11 format, where as in other -- case the received packets have Ethernet II format -- -- 1. 802.11 frames -- ---------------------------------------------------------------------------- -- | FC (2) | DID (2) |A1 (6) |A2 (6)|A3 (6) |SID (2) |SNAP (6) |type (2) |data (46 - 1500) | -- ---------------------------------------------------------------------------- -- -- 2. Ethernet II frames -- ------------------------------------------------- -- | DA (6) | SA (6) | type (2) | data (46 - 1500) | -- ------------------------------------------------- -- */ -- -- --/** -- * Macro for creating country codes according to endianness -- * @cond !ADDTHIS -- */ --#ifdef IL_BIGENDIAN --#define MK_CNTRY(a, b, \ -- rev) ( ( (unsigned char)(b) ) + ( ( (unsigned char)(a) ) << 8 ) + \ -- ( ( (unsigned short)(rev) ) << 16 ) ) --#else /* ifdef IL_BIGENDIAN */ --#define MK_CNTRY(a, b, \ -- rev) ( ( (unsigned char)(a) ) + ( ( (unsigned char)(b) ) << 8 ) + \ -- ( ( (unsigned short)(rev) ) << 16 ) ) --#endif /* ifdef IL_BIGENDIAN */ --/** @endcond */ -- --/** -- * Enumerated list of country codes -- */ --typedef enum --{ -- WHD_COUNTRY_AFGHANISTAN = MK_CNTRY('A', 'F', 0), /**< AF Afghanistan */ -- WHD_COUNTRY_ALBANIA = MK_CNTRY('A', 'L', 0), /**< AL Albania */ -- WHD_COUNTRY_ALGERIA = MK_CNTRY('D', 'Z', 0), /**< DZ Algeria */ -- WHD_COUNTRY_AMERICAN_SAMOA = MK_CNTRY('A', 'S', 0), /**< AS American_Samoa */ -- WHD_COUNTRY_ANGOLA = MK_CNTRY('A', 'O', 0), /**< AO Angola */ -- WHD_COUNTRY_ANGUILLA = MK_CNTRY('A', 'I', 0), /**< AI Anguilla */ -- WHD_COUNTRY_ANTIGUA_AND_BARBUDA = MK_CNTRY('A', 'G', 0), /**< AG Antigua_and_Barbuda */ -- WHD_COUNTRY_ARGENTINA = MK_CNTRY('A', 'R', 0), /**< AR Argentina */ -- WHD_COUNTRY_ARMENIA = MK_CNTRY('A', 'M', 0), /**< AM Armenia */ -- WHD_COUNTRY_ARUBA = MK_CNTRY('A', 'W', 0), /**< AW Aruba */ -- WHD_COUNTRY_AUSTRALIA = MK_CNTRY('A', 'U', 0), /**< AU Australia */ -- WHD_COUNTRY_AUSTRIA = MK_CNTRY('A', 'T', 0), /**< AT Austria */ -- WHD_COUNTRY_AZERBAIJAN = MK_CNTRY('A', 'Z', 0), /**< AZ Azerbaijan */ -- WHD_COUNTRY_BAHAMAS = MK_CNTRY('B', 'S', 0), /**< BS Bahamas */ -- WHD_COUNTRY_BAHRAIN = MK_CNTRY('B', 'H', 0), /**< BH Bahrain */ -- WHD_COUNTRY_BAKER_ISLAND = MK_CNTRY('0', 'B', 0), /**< 0B Baker_Island */ -- WHD_COUNTRY_BANGLADESH = MK_CNTRY('B', 'D', 0), /**< BD Bangladesh */ -- WHD_COUNTRY_BARBADOS = MK_CNTRY('B', 'B', 0), /**< BB Barbados */ -- WHD_COUNTRY_BELARUS = MK_CNTRY('B', 'Y', 0), /**< BY Belarus */ -- WHD_COUNTRY_BELGIUM = MK_CNTRY('B', 'E', 0), /**< BE Belgium */ -- WHD_COUNTRY_BELIZE = MK_CNTRY('B', 'Z', 0), /**< BZ Belize */ -- WHD_COUNTRY_BENIN = MK_CNTRY('B', 'J', 0), /**< BJ Benin */ -- WHD_COUNTRY_BERMUDA = MK_CNTRY('B', 'M', 0), /**< BM Bermuda */ -- WHD_COUNTRY_BHUTAN = MK_CNTRY('B', 'T', 0), /**< BT Bhutan */ -- WHD_COUNTRY_BOLIVIA = MK_CNTRY('B', 'O', 0), /**< BO Bolivia */ -- WHD_COUNTRY_BOSNIA_AND_HERZEGOVINA = MK_CNTRY('B', 'A', 0), /**< BA Bosnia_and_Herzegovina */ -- WHD_COUNTRY_BOTSWANA = MK_CNTRY('B', 'W', 0), /**< BW Botswana */ -- WHD_COUNTRY_BRAZIL = MK_CNTRY('B', 'R', 0), /**< BR Brazil */ -- WHD_COUNTRY_BRITISH_INDIAN_OCEAN_TERRITORY = MK_CNTRY('I', 'O', 0), /**< IO British_Indian_Ocean_Territory */ -- WHD_COUNTRY_BRUNEI_DARUSSALAM = MK_CNTRY('B', 'N', 0), /**< BN Brunei_Darussalam */ -- WHD_COUNTRY_BULGARIA = MK_CNTRY('B', 'G', 0), /**< BG Bulgaria */ -- WHD_COUNTRY_BURKINA_FASO = MK_CNTRY('B', 'F', 0), /**< BF Burkina_Faso */ -- WHD_COUNTRY_BURUNDI = MK_CNTRY('B', 'I', 0), /**< BI Burundi */ -- WHD_COUNTRY_CAMBODIA = MK_CNTRY('K', 'H', 0), /**< KH Cambodia */ -- WHD_COUNTRY_CAMEROON = MK_CNTRY('C', 'M', 0), /**< CM Cameroon */ -- WHD_COUNTRY_CANADA = MK_CNTRY('C', 'A', 0), /**< CA Canada */ -- WHD_COUNTRY_CANADA_REV950 = MK_CNTRY('C', 'A', 950), /**< CA Canada Revision 950 */ -- WHD_COUNTRY_CAPE_VERDE = MK_CNTRY('C', 'V', 0), /**< CV Cape_Verde */ -- WHD_COUNTRY_CAYMAN_ISLANDS = MK_CNTRY('K', 'Y', 0), /**< KY Cayman_Islands */ -- WHD_COUNTRY_CENTRAL_AFRICAN_REPUBLIC = MK_CNTRY('C', 'F', 0), /**< CF Central_African_Republic */ -- WHD_COUNTRY_CHAD = MK_CNTRY('T', 'D', 0), /**< TD Chad */ -- WHD_COUNTRY_CHILE = MK_CNTRY('C', 'L', 0), /**< CL Chile */ -- WHD_COUNTRY_CHINA = MK_CNTRY('C', 'N', 0), /**< CN China */ -- WHD_COUNTRY_CHRISTMAS_ISLAND = MK_CNTRY('C', 'X', 0), /**< CX Christmas_Island */ -- WHD_COUNTRY_COLOMBIA = MK_CNTRY('C', 'O', 0), /**< CO Colombia */ -- WHD_COUNTRY_COMOROS = MK_CNTRY('K', 'M', 0), /**< KM Comoros */ -- WHD_COUNTRY_CONGO = MK_CNTRY('C', 'G', 0), /**< CG Congo */ -- WHD_COUNTRY_CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE = MK_CNTRY('C', 'D', 0), /**< CD Congo,_The_Democratic_Republic_Of_The */ -- WHD_COUNTRY_COSTA_RICA = MK_CNTRY('C', 'R', 0), /**< CR Costa_Rica */ -- WHD_COUNTRY_COTE_DIVOIRE = MK_CNTRY('C', 'I', 0), /**< CI Cote_D'ivoire */ -- WHD_COUNTRY_CROATIA = MK_CNTRY('H', 'R', 0), /**< HR Croatia */ -- WHD_COUNTRY_CUBA = MK_CNTRY('C', 'U', 0), /**< CU Cuba */ -- WHD_COUNTRY_CYPRUS = MK_CNTRY('C', 'Y', 0), /**< CY Cyprus */ -- WHD_COUNTRY_CZECH_REPUBLIC = MK_CNTRY('C', 'Z', 0), /**< CZ Czech_Republic */ -- WHD_COUNTRY_DENMARK = MK_CNTRY('D', 'K', 0), /**< DK Denmark */ -- WHD_COUNTRY_DJIBOUTI = MK_CNTRY('D', 'J', 0), /**< DJ Djibouti */ -- WHD_COUNTRY_DOMINICA = MK_CNTRY('D', 'M', 0), /**< DM Dominica */ -- WHD_COUNTRY_DOMINICAN_REPUBLIC = MK_CNTRY('D', 'O', 0), /**< DO Dominican_Republic */ -- WHD_COUNTRY_DOWN_UNDER = MK_CNTRY('A', 'U', 0), /**< AU G'Day mate! */ -- WHD_COUNTRY_ECUADOR = MK_CNTRY('E', 'C', 0), /**< EC Ecuador */ -- WHD_COUNTRY_EGYPT = MK_CNTRY('E', 'G', 0), /**< EG Egypt */ -- WHD_COUNTRY_EL_SALVADOR = MK_CNTRY('S', 'V', 0), /**< SV El_Salvador */ -- WHD_COUNTRY_EQUATORIAL_GUINEA = MK_CNTRY('G', 'Q', 0), /**< GQ Equatorial_Guinea */ -- WHD_COUNTRY_ERITREA = MK_CNTRY('E', 'R', 0), /**< ER Eritrea */ -- WHD_COUNTRY_ESTONIA = MK_CNTRY('E', 'E', 0), /**< EE Estonia */ -- WHD_COUNTRY_ETHIOPIA = MK_CNTRY('E', 'T', 0), /**< ET Ethiopia */ -- WHD_COUNTRY_FALKLAND_ISLANDS_MALVINAS = MK_CNTRY('F', 'K', 0), /**< FK Falkland_Islands_(Malvinas) */ -- WHD_COUNTRY_FAROE_ISLANDS = MK_CNTRY('F', 'O', 0), /**< FO Faroe_Islands */ -- WHD_COUNTRY_FIJI = MK_CNTRY('F', 'J', 0), /**< FJ Fiji */ -- WHD_COUNTRY_FINLAND = MK_CNTRY('F', 'I', 0), /**< FI Finland */ -- WHD_COUNTRY_FRANCE = MK_CNTRY('F', 'R', 0), /**< FR France */ -- WHD_COUNTRY_FRENCH_GUINA = MK_CNTRY('G', 'F', 0), /**< GF French_Guina */ -- WHD_COUNTRY_FRENCH_POLYNESIA = MK_CNTRY('P', 'F', 0), /**< PF French_Polynesia */ -- WHD_COUNTRY_FRENCH_SOUTHERN_TERRITORIES = MK_CNTRY('T', 'F', 0), /**< TF French_Southern_Territories */ -- WHD_COUNTRY_GABON = MK_CNTRY('G', 'A', 0), /**< GA Gabon */ -- WHD_COUNTRY_GAMBIA = MK_CNTRY('G', 'M', 0), /**< GM Gambia */ -- WHD_COUNTRY_GEORGIA = MK_CNTRY('G', 'E', 0), /**< GE Georgia */ -- WHD_COUNTRY_GERMANY = MK_CNTRY('D', 'E', 0), /**< DE Germany */ -- WHD_COUNTRY_EUROPEAN_WIDE_REV895 = MK_CNTRY('E', '0', 895), /**< E0 European_Wide Revision 895 */ -- WHD_COUNTRY_GHANA = MK_CNTRY('G', 'H', 0), /**< GH Ghana */ -- WHD_COUNTRY_GIBRALTAR = MK_CNTRY('G', 'I', 0), /**< GI Gibraltar */ -- WHD_COUNTRY_GREECE = MK_CNTRY('G', 'R', 0), /**< GR Greece */ -- WHD_COUNTRY_GRENADA = MK_CNTRY('G', 'D', 0), /**< GD Grenada */ -- WHD_COUNTRY_GUADELOUPE = MK_CNTRY('G', 'P', 0), /**< GP Guadeloupe */ -- WHD_COUNTRY_GUAM = MK_CNTRY('G', 'U', 0), /**< GU Guam */ -- WHD_COUNTRY_GUATEMALA = MK_CNTRY('G', 'T', 0), /**< GT Guatemala */ -- WHD_COUNTRY_GUERNSEY = MK_CNTRY('G', 'G', 0), /**< GG Guernsey */ -- WHD_COUNTRY_GUINEA = MK_CNTRY('G', 'N', 0), /**< GN Guinea */ -- WHD_COUNTRY_GUINEA_BISSAU = MK_CNTRY('G', 'W', 0), /**< GW Guinea-bissau */ -- WHD_COUNTRY_GUYANA = MK_CNTRY('G', 'Y', 0), /**< GY Guyana */ -- WHD_COUNTRY_HAITI = MK_CNTRY('H', 'T', 0), /**< HT Haiti */ -- WHD_COUNTRY_HOLY_SEE_VATICAN_CITY_STATE = MK_CNTRY('V', 'A', 0), /**< VA Holy_See_(Vatican_City_State) */ -- WHD_COUNTRY_HONDURAS = MK_CNTRY('H', 'N', 0), /**< HN Honduras */ -- WHD_COUNTRY_HONG_KONG = MK_CNTRY('H', 'K', 0), /**< HK Hong_Kong */ -- WHD_COUNTRY_HUNGARY = MK_CNTRY('H', 'U', 0), /**< HU Hungary */ -- WHD_COUNTRY_ICELAND = MK_CNTRY('I', 'S', 0), /**< IS Iceland */ -- WHD_COUNTRY_INDIA = MK_CNTRY('I', 'N', 0), /**< IN India */ -- WHD_COUNTRY_INDONESIA = MK_CNTRY('I', 'D', 0), /**< ID Indonesia */ -- WHD_COUNTRY_IRAN_ISLAMIC_REPUBLIC_OF = MK_CNTRY('I', 'R', 0), /**< IR Iran,_Islamic_Republic_Of */ -- WHD_COUNTRY_IRAQ = MK_CNTRY('I', 'Q', 0), /**< IQ Iraq */ -- WHD_COUNTRY_IRELAND = MK_CNTRY('I', 'E', 0), /**< IE Ireland */ -- WHD_COUNTRY_ISRAEL = MK_CNTRY('I', 'L', 0), /**< IL Israel */ -- WHD_COUNTRY_ITALY = MK_CNTRY('I', 'T', 0), /**< IT Italy */ -- WHD_COUNTRY_JAMAICA = MK_CNTRY('J', 'M', 0), /**< JM Jamaica */ -- WHD_COUNTRY_JAPAN = MK_CNTRY('J', 'P', 0), /**< JP Japan */ -- WHD_COUNTRY_JERSEY = MK_CNTRY('J', 'E', 0), /**< JE Jersey */ -- WHD_COUNTRY_JORDAN = MK_CNTRY('J', 'O', 0), /**< JO Jordan */ -- WHD_COUNTRY_KAZAKHSTAN = MK_CNTRY('K', 'Z', 0), /**< KZ Kazakhstan */ -- WHD_COUNTRY_KENYA = MK_CNTRY('K', 'E', 0), /**< KE Kenya */ -- WHD_COUNTRY_KIRIBATI = MK_CNTRY('K', 'I', 0), /**< KI Kiribati */ -- WHD_COUNTRY_KOREA_REPUBLIC_OF = MK_CNTRY('K', 'R', 1), /**< KR Korea,_Republic_Of */ -- WHD_COUNTRY_KOSOVO = MK_CNTRY('0', 'A', 0), /**< 0A Kosovo */ -- WHD_COUNTRY_KUWAIT = MK_CNTRY('K', 'W', 0), /**< KW Kuwait */ -- WHD_COUNTRY_KYRGYZSTAN = MK_CNTRY('K', 'G', 0), /**< KG Kyrgyzstan */ -- WHD_COUNTRY_LAO_PEOPLES_DEMOCRATIC_REPUBIC = MK_CNTRY('L', 'A', 0), /**< LA Lao_People's_Democratic_Repubic */ -- WHD_COUNTRY_LATVIA = MK_CNTRY('L', 'V', 0), /**< LV Latvia */ -- WHD_COUNTRY_LEBANON = MK_CNTRY('L', 'B', 0), /**< LB Lebanon */ -- WHD_COUNTRY_LESOTHO = MK_CNTRY('L', 'S', 0), /**< LS Lesotho */ -- WHD_COUNTRY_LIBERIA = MK_CNTRY('L', 'R', 0), /**< LR Liberia */ -- WHD_COUNTRY_LIBYAN_ARAB_JAMAHIRIYA = MK_CNTRY('L', 'Y', 0), /**< LY Libyan_Arab_Jamahiriya */ -- WHD_COUNTRY_LIECHTENSTEIN = MK_CNTRY('L', 'I', 0), /**< LI Liechtenstein */ -- WHD_COUNTRY_LITHUANIA = MK_CNTRY('L', 'T', 0), /**< LT Lithuania */ -- WHD_COUNTRY_LUXEMBOURG = MK_CNTRY('L', 'U', 0), /**< LU Luxembourg */ -- WHD_COUNTRY_MACAO = MK_CNTRY('M', 'O', 0), /**< MO Macao */ -- WHD_COUNTRY_MACEDONIA_FORMER_YUGOSLAV_REPUBLIC_OF = MK_CNTRY('M', 'K', 0), /**< MK Macedonia,_Former_Yugoslav_Republic_Of */ -- WHD_COUNTRY_MADAGASCAR = MK_CNTRY('M', 'G', 0), /**< MG Madagascar */ -- WHD_COUNTRY_MALAWI = MK_CNTRY('M', 'W', 0), /**< MW Malawi */ -- WHD_COUNTRY_MALAYSIA = MK_CNTRY('M', 'Y', 0), /**< MY Malaysia */ -- WHD_COUNTRY_MALDIVES = MK_CNTRY('M', 'V', 0), /**< MV Maldives */ -- WHD_COUNTRY_MALI = MK_CNTRY('M', 'L', 0), /**< ML Mali */ -- WHD_COUNTRY_MALTA = MK_CNTRY('M', 'T', 0), /**< MT Malta */ -- WHD_COUNTRY_MAN_ISLE_OF = MK_CNTRY('I', 'M', 0), /**< IM Man,_Isle_Of */ -- WHD_COUNTRY_MARTINIQUE = MK_CNTRY('M', 'Q', 0), /**< MQ Martinique */ -- WHD_COUNTRY_MAURITANIA = MK_CNTRY('M', 'R', 0), /**< MR Mauritania */ -- WHD_COUNTRY_MAURITIUS = MK_CNTRY('M', 'U', 0), /**< MU Mauritius */ -- WHD_COUNTRY_MAYOTTE = MK_CNTRY('Y', 'T', 0), /**< YT Mayotte */ -- WHD_COUNTRY_MEXICO = MK_CNTRY('M', 'X', 0), /**< MX Mexico */ -- WHD_COUNTRY_MICRONESIA_FEDERATED_STATES_OF = MK_CNTRY('F', 'M', 0), /**< FM Micronesia,_Federated_States_Of */ -- WHD_COUNTRY_MOLDOVA_REPUBLIC_OF = MK_CNTRY('M', 'D', 0), /**< MD Moldova,_Republic_Of */ -- WHD_COUNTRY_MONACO = MK_CNTRY('M', 'C', 0), /**< MC Monaco */ -- WHD_COUNTRY_MONGOLIA = MK_CNTRY('M', 'N', 0), /**< MN Mongolia */ -- WHD_COUNTRY_MONTENEGRO = MK_CNTRY('M', 'E', 0), /**< ME Montenegro */ -- WHD_COUNTRY_MONTSERRAT = MK_CNTRY('M', 'S', 0), /**< MS Montserrat */ -- WHD_COUNTRY_MOROCCO = MK_CNTRY('M', 'A', 0), /**< MA Morocco */ -- WHD_COUNTRY_MOZAMBIQUE = MK_CNTRY('M', 'Z', 0), /**< MZ Mozambique */ -- WHD_COUNTRY_MYANMAR = MK_CNTRY('M', 'M', 0), /**< MM Myanmar */ -- WHD_COUNTRY_NAMIBIA = MK_CNTRY('N', 'A', 0), /**< NA Namibia */ -- WHD_COUNTRY_NAURU = MK_CNTRY('N', 'R', 0), /**< NR Nauru */ -- WHD_COUNTRY_NEPAL = MK_CNTRY('N', 'P', 0), /**< NP Nepal */ -- WHD_COUNTRY_NETHERLANDS = MK_CNTRY('N', 'L', 0), /**< NL Netherlands */ -- WHD_COUNTRY_NETHERLANDS_ANTILLES = MK_CNTRY('A', 'N', 0), /**< AN Netherlands_Antilles */ -- WHD_COUNTRY_NEW_CALEDONIA = MK_CNTRY('N', 'C', 0), /**< NC New_Caledonia */ -- WHD_COUNTRY_NEW_ZEALAND = MK_CNTRY('N', 'Z', 0), /**< NZ New_Zealand */ -- WHD_COUNTRY_NICARAGUA = MK_CNTRY('N', 'I', 0), /**< NI Nicaragua */ -- WHD_COUNTRY_NIGER = MK_CNTRY('N', 'E', 0), /**< NE Niger */ -- WHD_COUNTRY_NIGERIA = MK_CNTRY('N', 'G', 0), /**< NG Nigeria */ -- WHD_COUNTRY_NORFOLK_ISLAND = MK_CNTRY('N', 'F', 0), /**< NF Norfolk_Island */ -- WHD_COUNTRY_NORTHERN_MARIANA_ISLANDS = MK_CNTRY('M', 'P', 0), /**< MP Northern_Mariana_Islands */ -- WHD_COUNTRY_NORWAY = MK_CNTRY('N', 'O', 0), /**< NO Norway */ -- WHD_COUNTRY_OMAN = MK_CNTRY('O', 'M', 0), /**< OM Oman */ -- WHD_COUNTRY_PAKISTAN = MK_CNTRY('P', 'K', 0), /**< PK Pakistan */ -- WHD_COUNTRY_PALAU = MK_CNTRY('P', 'W', 0), /**< PW Palau */ -- WHD_COUNTRY_PANAMA = MK_CNTRY('P', 'A', 0), /**< PA Panama */ -- WHD_COUNTRY_PAPUA_NEW_GUINEA = MK_CNTRY('P', 'G', 0), /**< PG Papua_New_Guinea */ -- WHD_COUNTRY_PARAGUAY = MK_CNTRY('P', 'Y', 0), /**< PY Paraguay */ -- WHD_COUNTRY_PERU = MK_CNTRY('P', 'E', 0), /**< PE Peru */ -- WHD_COUNTRY_PHILIPPINES = MK_CNTRY('P', 'H', 0), /**< PH Philippines */ -- WHD_COUNTRY_POLAND = MK_CNTRY('P', 'L', 0), /**< PL Poland */ -- WHD_COUNTRY_PORTUGAL = MK_CNTRY('P', 'T', 0), /**< PT Portugal */ -- WHD_COUNTRY_PUETO_RICO = MK_CNTRY('P', 'R', 0), /**< PR Pueto_Rico */ -- WHD_COUNTRY_QATAR = MK_CNTRY('Q', 'A', 0), /**< QA Qatar */ -- WHD_COUNTRY_REUNION = MK_CNTRY('R', 'E', 0), /**< RE Reunion */ -- WHD_COUNTRY_ROMANIA = MK_CNTRY('R', 'O', 0), /**< RO Romania */ -- WHD_COUNTRY_RUSSIAN_FEDERATION = MK_CNTRY('R', 'U', 0), /**< RU Russian_Federation */ -- WHD_COUNTRY_RWANDA = MK_CNTRY('R', 'W', 0), /**< RW Rwanda */ -- WHD_COUNTRY_SAINT_KITTS_AND_NEVIS = MK_CNTRY('K', 'N', 0), /**< KN Saint_Kitts_and_Nevis */ -- WHD_COUNTRY_SAINT_LUCIA = MK_CNTRY('L', 'C', 0), /**< LC Saint_Lucia */ -- WHD_COUNTRY_SAINT_PIERRE_AND_MIQUELON = MK_CNTRY('P', 'M', 0), /**< PM Saint_Pierre_and_Miquelon */ -- WHD_COUNTRY_SAINT_VINCENT_AND_THE_GRENADINES = MK_CNTRY('V', 'C', 0), /**< VC Saint_Vincent_and_The_Grenadines */ -- WHD_COUNTRY_SAMOA = MK_CNTRY('W', 'S', 0), /**< WS Samoa */ -- WHD_COUNTRY_SANIT_MARTIN_SINT_MARTEEN = MK_CNTRY('M', 'F', 0), /**< MF Sanit_Martin_/_Sint_Marteen */ -- WHD_COUNTRY_SAO_TOME_AND_PRINCIPE = MK_CNTRY('S', 'T', 0), /**< ST Sao_Tome_and_Principe */ -- WHD_COUNTRY_SAUDI_ARABIA = MK_CNTRY('S', 'A', 0), /**< SA Saudi_Arabia */ -- WHD_COUNTRY_SENEGAL = MK_CNTRY('S', 'N', 0), /**< SN Senegal */ -- WHD_COUNTRY_SERBIA = MK_CNTRY('R', 'S', 0), /**< RS Serbia */ -- WHD_COUNTRY_SEYCHELLES = MK_CNTRY('S', 'C', 0), /**< SC Seychelles */ -- WHD_COUNTRY_SIERRA_LEONE = MK_CNTRY('S', 'L', 0), /**< SL Sierra_Leone */ -- WHD_COUNTRY_SINGAPORE = MK_CNTRY('S', 'G', 0), /**< SG Singapore */ -- WHD_COUNTRY_SLOVAKIA = MK_CNTRY('S', 'K', 0), /**< SK Slovakia */ -- WHD_COUNTRY_SLOVENIA = MK_CNTRY('S', 'I', 0), /**< SI Slovenia */ -- WHD_COUNTRY_SOLOMON_ISLANDS = MK_CNTRY('S', 'B', 0), /**< SB Solomon_Islands */ -- WHD_COUNTRY_SOMALIA = MK_CNTRY('S', 'O', 0), /**< SO Somalia */ -- WHD_COUNTRY_SOUTH_AFRICA = MK_CNTRY('Z', 'A', 0), /**< ZA South_Africa */ -- WHD_COUNTRY_SPAIN = MK_CNTRY('E', 'S', 0), /**< ES Spain */ -- WHD_COUNTRY_SRI_LANKA = MK_CNTRY('L', 'K', 0), /**< LK Sri_Lanka */ -- WHD_COUNTRY_SURINAME = MK_CNTRY('S', 'R', 0), /**< SR Suriname */ -- WHD_COUNTRY_SWAZILAND = MK_CNTRY('S', 'Z', 0), /**< SZ Swaziland */ -- WHD_COUNTRY_SWEDEN = MK_CNTRY('S', 'E', 0), /**< SE Sweden */ -- WHD_COUNTRY_SWITZERLAND = MK_CNTRY('C', 'H', 0), /**< CH Switzerland */ -- WHD_COUNTRY_SYRIAN_ARAB_REPUBLIC = MK_CNTRY('S', 'Y', 0), /**< SY Syrian_Arab_Republic */ -- WHD_COUNTRY_TAIWAN_PROVINCE_OF_CHINA = MK_CNTRY('T', 'W', 0), /**< TW Taiwan,_Province_Of_China */ -- WHD_COUNTRY_TAJIKISTAN = MK_CNTRY('T', 'J', 0), /**< TJ Tajikistan */ -- WHD_COUNTRY_TANZANIA_UNITED_REPUBLIC_OF = MK_CNTRY('T', 'Z', 0), /**< TZ Tanzania,_United_Republic_Of */ -- WHD_COUNTRY_THAILAND = MK_CNTRY('T', 'H', 0), /**< TH Thailand */ -- WHD_COUNTRY_TOGO = MK_CNTRY('T', 'G', 0), /**< TG Togo */ -- WHD_COUNTRY_TONGA = MK_CNTRY('T', 'O', 0), /**< TO Tonga */ -- WHD_COUNTRY_TRINIDAD_AND_TOBAGO = MK_CNTRY('T', 'T', 0), /**< TT Trinidad_and_Tobago */ -- WHD_COUNTRY_TUNISIA = MK_CNTRY('T', 'N', 0), /**< TN Tunisia */ -- WHD_COUNTRY_TURKEY = MK_CNTRY('T', 'R', 0), /**< TR Turkey */ -- WHD_COUNTRY_TURKMENISTAN = MK_CNTRY('T', 'M', 0), /**< TM Turkmenistan */ -- WHD_COUNTRY_TURKS_AND_CAICOS_ISLANDS = MK_CNTRY('T', 'C', 0), /**< TC Turks_and_Caicos_Islands */ -- WHD_COUNTRY_TUVALU = MK_CNTRY('T', 'V', 0), /**< TV Tuvalu */ -- WHD_COUNTRY_UGANDA = MK_CNTRY('U', 'G', 0), /**< UG Uganda */ -- WHD_COUNTRY_UKRAINE = MK_CNTRY('U', 'A', 0), /**< UA Ukraine */ -- WHD_COUNTRY_UNITED_ARAB_EMIRATES = MK_CNTRY('A', 'E', 0), /**< AE United_Arab_Emirates */ -- WHD_COUNTRY_UNITED_KINGDOM = MK_CNTRY('G', 'B', 0), /**< GB United_Kingdom */ -- WHD_COUNTRY_UNITED_STATES = MK_CNTRY('U', 'S', 0), /**< US United_States */ -- WHD_COUNTRY_UNITED_STATES_REV4 = MK_CNTRY('U', 'S', 4), /**< US United_States Revision 4 */ -- WHD_COUNTRY_UNITED_STATES_REV931 = MK_CNTRY('Q', '1', 931), /**< Q1 United_States Revision 931 */ -- WHD_COUNTRY_UNITED_STATES_NO_DFS = MK_CNTRY('Q', '2', 0), /**< Q2 United_States_(No_DFS) */ -- WHD_COUNTRY_UNITED_STATES_MINOR_OUTLYING_ISLANDS = MK_CNTRY('U', 'M', 0), /**< UM United_States_Minor_Outlying_Islands */ -- WHD_COUNTRY_URUGUAY = MK_CNTRY('U', 'Y', 0), /**< UY Uruguay */ -- WHD_COUNTRY_UZBEKISTAN = MK_CNTRY('U', 'Z', 0), /**< UZ Uzbekistan */ -- WHD_COUNTRY_VANUATU = MK_CNTRY('V', 'U', 0), /**< VU Vanuatu */ -- WHD_COUNTRY_VENEZUELA = MK_CNTRY('V', 'E', 0), /**< VE Venezuela */ -- WHD_COUNTRY_VIET_NAM = MK_CNTRY('V', 'N', 0), /**< VN Viet_Nam */ -- WHD_COUNTRY_VIRGIN_ISLANDS_BRITISH = MK_CNTRY('V', 'G', 0), /**< VG Virgin_Islands,_British */ -- WHD_COUNTRY_VIRGIN_ISLANDS_US = MK_CNTRY('V', 'I', 0), /**< VI Virgin_Islands,_U.S. */ -- WHD_COUNTRY_WALLIS_AND_FUTUNA = MK_CNTRY('W', 'F', 0), /**< WF Wallis_and_Futuna */ -- WHD_COUNTRY_WEST_BANK = MK_CNTRY('0', 'C', 0), /**< 0C West_Bank */ -- WHD_COUNTRY_WESTERN_SAHARA = MK_CNTRY('E', 'H', 0), /**< EH Western_Sahara */ -- WHD_COUNTRY_WORLD_WIDE_XV_REV983 = MK_CNTRY('X', 'V', 983), /**< Worldwide Locale Revision 983 */ -- WHD_COUNTRY_WORLD_WIDE_XX = MK_CNTRY('X', 'X', 0), /**< Worldwide Locale (passive Ch12-14) */ -- WHD_COUNTRY_WORLD_WIDE_XX_REV17 = MK_CNTRY('X', 'X', 17), /**< Worldwide Locale (passive Ch12-14) Revision 17 */ -- WHD_COUNTRY_YEMEN = MK_CNTRY('Y', 'E', 0), /**< YE Yemen */ -- WHD_COUNTRY_ZAMBIA = MK_CNTRY('Z', 'M', 0), /**< ZM Zambia */ -- WHD_COUNTRY_ZIMBABWE = MK_CNTRY('Z', 'W', 0), /**< ZW Zimbabwe */ --} whd_country_code_t; -- --/** -- * Structure for storing extended scan parameters -- */ --typedef struct --{ -- int32_t number_of_probes_per_channel; /**< Number of probes to send on each channel */ -- int32_t scan_active_dwell_time_per_channel_ms; /**< Period of time to wait on each channel when active scanning */ -- int32_t scan_passive_dwell_time_per_channel_ms; /**< Period of time to wait on each channel when passive scanning */ -- int32_t scan_home_channel_dwell_time_between_channels_ms; /**< Period of time to wait on the home channel when scanning. Only relevant if associated. */ --} whd_scan_extended_params_t; -- --/** -- * Structure for storing scan results -- */ --#pragma pack(1) --typedef struct whd_scan_result --{ -- whd_ssid_t SSID; /**< Service Set Identification (i.e. Name of Access Point) */ -- whd_mac_t BSSID; /**< Basic Service Set Identification (i.e. MAC address of Access Point) */ -- int16_t signal_strength; /**< Receive Signal Strength Indication in dBm. <-90=Very poor, >-30=Excellent */ -- uint32_t max_data_rate; /**< Maximum data rate in kilobits/s */ -- whd_bss_type_t bss_type; /**< Network type */ -- whd_security_t security; /**< Security type */ -- uint8_t channel; /**< Radio channel that the AP beacon was received on */ -- whd_802_11_band_t band; /**< Radio band */ -- uint8_t ccode[2]; /**< Two letter ISO country code from AP */ -- uint8_t flags; /**< flags */ -- struct whd_scan_result *next; /**< Pointer to the next scan result */ -- uint8_t *ie_ptr; /**< Pointer to received Beacon/Probe Response IE(Information Element) */ -- uint32_t ie_len; /**< Length of IE(Information Element) */ --} whd_scan_result_t; --#pragma pack() -- --/** -- * Structure to store scan result parameters for each AP -- */ --typedef struct whd_simple_scan_result --{ -- whd_ssid_t SSID; /**< Service Set Identification (i.e. Name of Access Point) */ -- whd_mac_t BSSID; /**< Basic Service Set Identification (i.e. MAC address of Access Point) */ -- int16_t signal_strength; /**< Receive Signal Strength Indication in dBm. <-90=Very poor, >-30=Excellent */ -- whd_security_t security; /**< Security type */ -- uint8_t channel; /**< Radio channel that the AP beacon was received on */ --} whd_sync_scan_result_t; -- --typedef uint16_t wl_chanspec_t; /**< Channel specified in uint16_t */ --#define MCSSET_LEN 16 /**< Maximum allowed mcs rate */ -- --/** BSS(Basic Service Set) information structure -- * -- * Applications MUST CHECK ie_offset field and length field to access IEs(Information Elements) and -- * next bss_info structure in a vector (in whd_sync_scan_result_t) -- */ --typedef struct wl_bss_info_struct --{ -- uint32_t version; /**< version field */ -- uint32_t length; /**< byte length of data in this record, starting at version and including IEs */ -- whd_mac_t BSSID; /**< Unique 6-byte MAC address */ -- uint16_t beacon_period; /**< Interval between two consecutive beacon frames. Units are Kusec */ -- uint16_t capability; /**< Capability information */ -- uint8_t SSID_len; /**< SSID length */ -- uint8_t SSID[32]; /**< Array to store SSID */ -- struct -- { -- uint32_t count; /**< Count of rates in this set */ -- uint8_t rates[16]; /**< rates in 500kbps units, higher bit set if basic */ -- } rateset; /**< supported rates */ -- wl_chanspec_t chanspec; /**< Channel specification for basic service set */ -- uint16_t atim_window; /**< Announcement traffic indication message window size. Units are Kusec */ -- uint8_t dtim_period; /**< Delivery traffic indication message period */ -- int16_t RSSI; /**< receive signal strength (in dBm) */ -- int8_t phy_noise; /**< noise (in dBm) */ -- -- uint8_t n_cap; /**< BSS is 802.11N Capable */ -- uint32_t nbss_cap; /**< 802.11N BSS Capabilities (based on HT_CAP_*) */ -- uint8_t ctl_ch; /**< 802.11N BSS control channel number */ -- uint32_t reserved32[1]; /**< Reserved for expansion of BSS properties */ -- uint8_t flags; /**< flags */ -- uint8_t reserved[3]; /**< Reserved for expansion of BSS properties */ -- uint8_t basic_mcs[MCSSET_LEN]; /**< 802.11N BSS required MCS set */ -- -- uint16_t ie_offset; /**< offset at which IEs start, from beginning */ -- uint32_t ie_length; /**< byte length of Information Elements */ -- int16_t SNR; /**< Average SNR(signal to noise ratio) during frame reception */ -- /* Add new fields here */ -- /* variable length Information Elements */ --} wl_bss_info_t; -- --/** Structure for storing 802.11 powersave listen interval values \n -- * See @ref whd_wifi_get_listen_interval for more information -- */ --typedef struct --{ -- uint8_t beacon; /**< Listen interval in beacon periods */ -- uint8_t dtim; /**< Listen interval in DTIM periods */ -- uint16_t assoc; /**< Listen interval as sent to APs */ --} whd_listen_interval_t; -- --/** -- * WHD result is specified as uint32_t value -- */ --typedef uint32_t whd_result_t; -- --/* whd_result_t error code format -- * |31-18 (14 bit) for module id|17-16 (2 bit) for result type|15-0 for whd error code| -- */ --#define WHD_RESULT_TYPE 0 /**< WHD Result type */ --#define WHD_RESULT_CREATE(x) CY_RSLT_CREATE(WHD_RESULT_TYPE, CY_RSLT_MODULE_DRIVERS_WHD_BASE, (x) ) /**< Create a result value from the specified type, module, and result code */ -- --#define WHD_SUCCESS CY_RSLT_SUCCESS /**< Success */ --#define WHD_PENDING WHD_RESULT_CREATE(1) /**< Pending */ --#define WHD_TIMEOUT WHD_RESULT_CREATE(2) /**< Timeout */ --#define WHD_BADARG WHD_RESULT_CREATE(5) /**< Bad Arguments */ --#define WHD_UNFINISHED WHD_RESULT_CREATE(10) /**< Operation not finished yet WHD_RESULT_CREATE(maybe aborted) */ -- --#define WHD_PARTIAL_RESULTS WHD_RESULT_CREATE(1003) /**< Partial results */ --#define WHD_INVALID_KEY WHD_RESULT_CREATE(1004) /**< Invalid key */ --#define WHD_DOES_NOT_EXIST WHD_RESULT_CREATE(1005) /**< Does not exist */ --#define WHD_NOT_AUTHENTICATED WHD_RESULT_CREATE(1006) /**< Not authenticated */ --#define WHD_NOT_KEYED WHD_RESULT_CREATE(1007) /**< Not keyed */ --#define WHD_IOCTL_FAIL WHD_RESULT_CREATE(1008) /**< IOCTL fail */ --#define WHD_BUFFER_UNAVAILABLE_TEMPORARY WHD_RESULT_CREATE(1009) /**< Buffer unavailable temporarily */ --#define WHD_BUFFER_UNAVAILABLE_PERMANENT WHD_RESULT_CREATE(1010) /**< Buffer unavailable permanently */ --#define WHD_CONNECTION_LOST WHD_RESULT_CREATE(1012) /**< Connection lost */ --#define WHD_OUT_OF_EVENT_HANDLER_SPACE WHD_RESULT_CREATE(1013) /**< Cannot add extra event handler */ --#define WHD_SEMAPHORE_ERROR WHD_RESULT_CREATE(1014) /**< Error manipulating a semaphore */ --#define WHD_FLOW_CONTROLLED WHD_RESULT_CREATE(1015) /**< Packet retrieval cancelled due to flow control */ --#define WHD_NO_CREDITS WHD_RESULT_CREATE(1016) /**< Packet retrieval cancelled due to lack of bus credits */ --#define WHD_NO_PACKET_TO_SEND WHD_RESULT_CREATE(1017) /**< Packet retrieval cancelled due to no pending packets */ --#define WHD_CORE_CLOCK_NOT_ENABLED WHD_RESULT_CREATE(1018) /**< Core disabled due to no clock */ --#define WHD_CORE_IN_RESET WHD_RESULT_CREATE(1019) /**< Core disabled - in reset */ --#define WHD_UNSUPPORTED WHD_RESULT_CREATE(1020) /**< Unsupported function */ --#define WHD_BUS_WRITE_REGISTER_ERROR WHD_RESULT_CREATE(1021) /**< Error writing to WLAN register */ --#define WHD_SDIO_BUS_UP_FAIL WHD_RESULT_CREATE(1022) /**< SDIO bus failed to come up */ --#define WHD_JOIN_IN_PROGRESS WHD_RESULT_CREATE(1023) /**< Join not finished yet */ --#define WHD_NETWORK_NOT_FOUND WHD_RESULT_CREATE(1024) /**< Specified network was not found */ --#define WHD_INVALID_JOIN_STATUS WHD_RESULT_CREATE(1025) /**< Join status error */ --#define WHD_UNKNOWN_INTERFACE WHD_RESULT_CREATE(1026) /**< Unknown interface specified */ --#define WHD_SDIO_RX_FAIL WHD_RESULT_CREATE(1027) /**< Error during SDIO receive */ --#define WHD_HWTAG_MISMATCH WHD_RESULT_CREATE(1028) /**< Hardware tag header corrupt */ --#define WHD_RX_BUFFER_ALLOC_FAIL WHD_RESULT_CREATE(1029) /**< Failed to allocate a buffer to receive into */ --#define WHD_BUS_READ_REGISTER_ERROR WHD_RESULT_CREATE(1030) /**< Error reading a bus hardware register */ --#define WHD_THREAD_CREATE_FAILED WHD_RESULT_CREATE(1031) /**< Failed to create a new thread */ --#define WHD_QUEUE_ERROR WHD_RESULT_CREATE(1032) /**< Error manipulating a queue */ --#define WHD_BUFFER_POINTER_MOVE_ERROR WHD_RESULT_CREATE(1033) /**< Error moving the current pointer of a packet buffer */ --#define WHD_BUFFER_SIZE_SET_ERROR WHD_RESULT_CREATE(1034) /**< Error setting size of packet buffer */ --#define WHD_THREAD_STACK_NULL WHD_RESULT_CREATE(1035) /**< Null stack pointer passed when non null was reqired */ --#define WHD_THREAD_DELETE_FAIL WHD_RESULT_CREATE(1036) /**< Error deleting a thread */ --#define WHD_SLEEP_ERROR WHD_RESULT_CREATE(1037) /**< Error sleeping a thread */ --#define WHD_BUFFER_ALLOC_FAIL WHD_RESULT_CREATE(1038) /**< Failed to allocate a packet buffer */ --#define WHD_NO_PACKET_TO_RECEIVE WHD_RESULT_CREATE(1039) /**< No Packets waiting to be received */ --#define WHD_INTERFACE_NOT_UP WHD_RESULT_CREATE(1040) /**< Requested interface is not active */ --#define WHD_DELAY_TOO_LONG WHD_RESULT_CREATE(1041) /**< Requested delay is too long */ --#define WHD_INVALID_DUTY_CYCLE WHD_RESULT_CREATE(1042) /**< Duty cycle is outside limit 0 to 100 */ --#define WHD_PMK_WRONG_LENGTH WHD_RESULT_CREATE(1043) /**< Returned pmk was the wrong length */ --#define WHD_UNKNOWN_SECURITY_TYPE WHD_RESULT_CREATE(1044) /**< AP security type was unknown */ --#define WHD_WEP_NOT_ALLOWED WHD_RESULT_CREATE(1045) /**< AP not allowed to use WEP - it is not secure - use Open instead */ --#define WHD_WPA_KEYLEN_BAD WHD_RESULT_CREATE(1046) /**< WPA / WPA2 key length must be between 8 & 64 bytes */ --#define WHD_FILTER_NOT_FOUND WHD_RESULT_CREATE(1047) /**< Specified filter id not found */ --#define WHD_SPI_ID_READ_FAIL WHD_RESULT_CREATE(1048) /**< Failed to read 0xfeedbead SPI id from chip */ --#define WHD_SPI_SIZE_MISMATCH WHD_RESULT_CREATE(1049) /**< Mismatch in sizes between SPI header and SDPCM header */ --#define WHD_ADDRESS_ALREADY_REGISTERED WHD_RESULT_CREATE(1050) /**< Attempt to register a multicast address twice */ --#define WHD_SDIO_RETRIES_EXCEEDED WHD_RESULT_CREATE(1051) /**< SDIO transfer failed too many times. */ --#define WHD_NULL_PTR_ARG WHD_RESULT_CREATE(1052) /**< Null Pointer argument passed to function. */ --#define WHD_THREAD_FINISH_FAIL WHD_RESULT_CREATE(1053) /**< Error deleting a thread */ --#define WHD_WAIT_ABORTED WHD_RESULT_CREATE(1054) /**< Semaphore/mutex wait has been aborted */ --#define WHD_SET_BLOCK_ACK_WINDOW_FAIL WHD_RESULT_CREATE(1055) /**< Failed to set block ack window */ --#define WHD_DELAY_TOO_SHORT WHD_RESULT_CREATE(1056) /**< Requested delay is too short */ --#define WHD_INVALID_INTERFACE WHD_RESULT_CREATE(1057) /**< Invalid interface provided */ --#define WHD_WEP_KEYLEN_BAD WHD_RESULT_CREATE(1058) /**< WEP / WEP_SHARED key length must be 5 or 13 bytes */ --#define WHD_HANDLER_ALREADY_REGISTERED WHD_RESULT_CREATE(1059) /**< EAPOL handler already registered */ --#define WHD_AP_ALREADY_UP WHD_RESULT_CREATE(1060) /**< Soft AP or P2P group owner already up */ --#define WHD_EAPOL_KEY_PACKET_M1_TIMEOUT WHD_RESULT_CREATE(1061) /**< Timeout occurred while waiting for EAPOL packet M1 from AP */ --#define WHD_EAPOL_KEY_PACKET_M3_TIMEOUT WHD_RESULT_CREATE(1062) /**< Timeout occurred while waiting for EAPOL packet M3 from APwhich may indicate incorrect WPA2/WPA passphrase */ --#define WHD_EAPOL_KEY_PACKET_G1_TIMEOUT WHD_RESULT_CREATE(1063) /**< Timeout occurred while waiting for EAPOL packet G1 from AP */ --#define WHD_EAPOL_KEY_FAILURE WHD_RESULT_CREATE(1064) /**< Unknown failure occurred during the EAPOL key handshake */ --#define WHD_MALLOC_FAILURE WHD_RESULT_CREATE(1065) /**< Memory allocation failure */ --#define WHD_ACCESS_POINT_NOT_FOUND WHD_RESULT_CREATE(1066) /**< Access point not found */ --#define WHD_RTOS_ERROR WHD_RESULT_CREATE(1067) /**< RTOS operation failed */ --#define WHD_CLM_BLOB_DLOAD_ERROR WHD_RESULT_CREATE(1068) /**< CLM blob download failed */ --#define WHD_HAL_ERROR WHD_RESULT_CREATE(1069) /**< WHD HAL Error */ --#define WHD_RTOS_STATIC_MEM_LIMIT WHD_RESULT_CREATE(1070) /**< Exceeding the RTOS static objects memory */ -- --#define WLAN_ENUM_OFFSET 2000 /**< WLAN enum offset for WHD_WLAN error processing */ -- --#define WHD_WLAN_ERROR WHD_RESULT_CREATE(2001) /**< Generic Error */ --#define WHD_WLAN_BADARG WHD_RESULT_CREATE(2002) /**< Bad Argument */ --#define WHD_WLAN_BADOPTION WHD_RESULT_CREATE(2003) /**< Bad option */ --#define WHD_WLAN_NOTUP WHD_RESULT_CREATE(2004) /**< Not up */ --#define WHD_WLAN_NOTDOWN WHD_RESULT_CREATE(2005) /**< Not down */ --#define WHD_WLAN_NOTAP WHD_RESULT_CREATE(2006) /**< Not AP */ --#define WHD_WLAN_NOTSTA WHD_RESULT_CREATE(2007) /**< Not STA */ --#define WHD_WLAN_BADKEYIDX WHD_RESULT_CREATE(2008) /**< BAD Key Index */ --#define WHD_WLAN_RADIOOFF WHD_RESULT_CREATE(2009) /**< Radio Off */ --#define WHD_WLAN_NOTBANDLOCKED WHD_RESULT_CREATE(2010) /**< Not band locked */ --#define WHD_WLAN_NOCLK WHD_RESULT_CREATE(2011) /**< No Clock */ --#define WHD_WLAN_BADRATESET WHD_RESULT_CREATE(2012) /**< BAD Rate valueset */ --#define WHD_WLAN_BADBAND WHD_RESULT_CREATE(2013) /**< BAD Band */ --#define WHD_WLAN_BUFTOOSHORT WHD_RESULT_CREATE(2014) /**< Buffer too short */ --#define WHD_WLAN_BUFTOOLONG WHD_RESULT_CREATE(2015) /**< Buffer too long */ --#define WHD_WLAN_BUSY WHD_RESULT_CREATE(2016) /**< Busy */ --#define WHD_WLAN_NOTASSOCIATED WHD_RESULT_CREATE(2017) /**< Not Associated */ --#define WHD_WLAN_BADSSIDLEN WHD_RESULT_CREATE(2018) /**< Bad SSID len */ --#define WHD_WLAN_OUTOFRANGECHAN WHD_RESULT_CREATE(2019) /**< Out of Range Channel */ --#define WHD_WLAN_BADCHAN WHD_RESULT_CREATE(2020) /**< Bad Channel */ --#define WHD_WLAN_BADADDR WHD_RESULT_CREATE(2021) /**< Bad Address */ --#define WHD_WLAN_NORESOURCE WHD_RESULT_CREATE(2022) /**< Not Enough Resources */ --#define WHD_WLAN_UNSUPPORTED WHD_RESULT_CREATE(2023) /**< Unsupported */ --#define WHD_WLAN_BADLEN WHD_RESULT_CREATE(2024) /**< Bad length */ --#define WHD_WLAN_NOTREADY WHD_RESULT_CREATE(2025) /**< Not Ready */ --#define WHD_WLAN_EPERM WHD_RESULT_CREATE(2026) /**< Not Permitted */ --#define WHD_WLAN_NOMEM WHD_RESULT_CREATE(2027) /**< No Memory */ --#define WHD_WLAN_ASSOCIATED WHD_RESULT_CREATE(2028) /**< Associated */ --#define WHD_WLAN_RANGE WHD_RESULT_CREATE(2029) /**< Not In Range */ --#define WHD_WLAN_NOTFOUND WHD_RESULT_CREATE(2030) /**< Not Found */ --#define WHD_WLAN_WME_NOT_ENABLED WHD_RESULT_CREATE(2031) /**< WME Not Enabled */ --#define WHD_WLAN_TSPEC_NOTFOUND WHD_RESULT_CREATE(2032) /**< TSPEC Not Found */ --#define WHD_WLAN_ACM_NOTSUPPORTED WHD_RESULT_CREATE(2033) /**< ACM Not Supported */ --#define WHD_WLAN_NOT_WME_ASSOCIATION WHD_RESULT_CREATE(2034) /**< Not WME Association */ --#define WHD_WLAN_SDIO_ERROR WHD_RESULT_CREATE(2035) /**< SDIO Bus Error */ --#define WHD_WLAN_WLAN_DOWN WHD_RESULT_CREATE(2036) /**< WLAN Not Accessible */ --#define WHD_WLAN_BAD_VERSION WHD_RESULT_CREATE(2037) /**< Incorrect version */ --#define WHD_WLAN_TXFAIL WHD_RESULT_CREATE(2038) /**< TX failure */ --#define WHD_WLAN_RXFAIL WHD_RESULT_CREATE(2039) /**< RX failure */ --#define WHD_WLAN_NODEVICE WHD_RESULT_CREATE(2040) /**< Device not present */ --#define WHD_WLAN_UNFINISHED WHD_RESULT_CREATE(2041) /**< To be finished */ --#define WHD_WLAN_NONRESIDENT WHD_RESULT_CREATE(2042) /**< access to nonresident overlay */ --#define WHD_WLAN_DISABLED WHD_RESULT_CREATE(2043) /**< Disabled in this build */ --#define WHD_WLAN_NOFUNCTION WHD_RESULT_CREATE(2044) /**< Function pointer not provided */ --#define WHD_WLAN_INVALID WHD_RESULT_CREATE(2045) /**< Not valid */ --#define WHD_WLAN_NOBAND WHD_RESULT_CREATE(2046) /**< No Band */ -- --/** -- * type definition for whd_buffer_t -- */ --typedef whd_buffer_t whd_buffer_queue_ptr_t; -- --#pragma pack(1) -- --/** -- * Structure for storing AP information -- */ --typedef struct whd_ap_info --{ -- whd_ssid_t SSID; /**< Service Set Identification (i.e. Name of Access Point) */ -- whd_mac_t BSSID; /**< Basic Service Set Identification (i.e. MAC address of Access Point) */ -- int16_t signal_strength; /**< Receive Signal Strength Indication in dBm. <-90=Very poor, >-30=Excellent */ -- uint32_t max_data_rate; /**< Maximum data rate in kilobits/s */ -- whd_bss_type_t bss_type; /**< Network type */ -- whd_security_t security; /**< Security type */ -- uint8_t channel; /**< Radio channel that the AP beacon was received on */ -- whd_802_11_band_t band; /**< Radio band */ -- struct whd_ap_info *next; /**< Pointer to the next scan result */ --} whd_ap_info_t; -- --/** -- * Structure describing a list of associated softAP clients -- */ --typedef struct --{ -- uint32_t count; /**< Number of MAC addresses in the list */ -- whd_mac_t mac_list[1]; /**< Variable length array of MAC addresses */ --} whd_maclist_t; -- --#pragma pack() -- --/** -- * Time value in milliseconds -- */ --typedef uint32_t whd_time_t; -- --/** -- * Structure for storing a WEP key -- */ --typedef struct --{ -- uint8_t index; /**< WEP key index [0/1/2/3] */ -- uint8_t length; /**< WEP key length. Either 5 bytes (40-bits) or 13-bytes (104-bits) */ -- uint8_t data[32]; /**< WEP key as values NOT characters */ --} whd_wep_key_t; -- --/** -- * Structure for Out-of-band interrupt config parameters which can be set by application during whd power up -- */ --typedef struct whd_oob_config --{ -- cyhal_gpio_t host_oob_pin; /**< Host-side GPIO pin selection */ -- uint8_t dev_gpio_sel; /**< WiFi device-side GPIO pin selection (must be zero) */ -- whd_bool_t is_falling_edge; /**< Interrupt trigger (polarity) */ -- uint8_t intr_priority; /**< OOB interrupt priority */ --} whd_oob_config_t; -- --/** -- * Structure for SDIO config parameters which can be set by application during whd power up -- */ --typedef struct whd_sdio_config --{ -- /* Bus config */ -- whd_bool_t sdio_1bit_mode; /**< Default is false, means SDIO operates under 4 bit mode */ -- whd_bool_t high_speed_sdio_clock; /**< Default is false, means SDIO operates in normal clock rate */ -- whd_oob_config_t oob_config; /**< Out-of-band interrupt configuration (required when bus can sleep) */ --} whd_sdio_config_t; -- --/** -- * Structure for SPI config parameters which can be set by application during whd power up -- */ --typedef struct whd_spi_config --{ -- /* Bus config */ -- whd_bool_t is_spi_normal_mode; /**< Default is false */ -- whd_oob_config_t oob_config; /**< Out-of-band interrupt configuration */ --} whd_spi_config_t; -- --/** -- * Enumeration of applicable packet mask bits for custom Information Elements (IEs) -- */ --typedef enum --{ -- VENDOR_IE_BEACON = 0x1, /**< Denotes beacon packet */ -- VENDOR_IE_PROBE_RESPONSE = 0x2, /**< Denotes probe response packet */ -- VENDOR_IE_ASSOC_RESPONSE = 0x4, /**< Denotes association response packet */ -- VENDOR_IE_AUTH_RESPONSE = 0x8, /**< Denotes authentication response packet */ -- VENDOR_IE_PROBE_REQUEST = 0x10, /**< Denotes probe request packet */ -- VENDOR_IE_ASSOC_REQUEST = 0x20, /**< Denotes association request packet */ -- VENDOR_IE_CUSTOM = 0x100 /**< Denotes a custom IE(Information Element) identifier */ --} whd_ie_packet_flag_t; -- --/** -- * Structure for LE Scan parameters -- */ --typedef struct whd_btc_lescan_params --{ -- uint16_t priority; /**< LE scan priority */ -- uint16_t duty_cycle; /**< LE scan duty cycle */ -- uint16_t max_win; /**< LE Max Scan window */ -- uint16_t int_grant; /**< LE Small Interval Grant */ -- uint16_t scan_int; /**< LE scan interval */ -- uint16_t scan_win; /**< LE scan Window */ --} whd_btc_lescan_params_t; -- --/** -- * Structure for coex config parameters which can be set by application -- */ --typedef struct whd_coex_config --{ -- whd_btc_lescan_params_t le_scan_params; /**< LE Scan Parameters */ --} whd_coex_config_t; -- --#define PORT_FILTER_LEN 26 /**< Port filter len */ --#define PACKET_FILTER_LIST_BUFFER_MAX_LEN 1000 /**< Packet filter buffer max len */ --/** -- * Enumeration of packet filter rules -- */ --typedef enum --{ -- WHD_PACKET_FILTER_RULE_POSITIVE_MATCHING = 0, /**< Specifies that a filter should match a given pattern */ -- WHD_PACKET_FILTER_RULE_NEGATIVE_MATCHING = 1 /**< Specifies that a filter should NOT match a given pattern */ --} whd_packet_filter_rule_t; -- --/** -- * Structure describing a packet filter list item -- */ --typedef struct --{ -- uint32_t id; /**< Unique identifier for a packet filter item */ -- whd_packet_filter_rule_t rule; /**< Filter matches are either POSITIVE or NEGATIVE matching */ -- uint16_t offset; /**< Offset in bytes to start filtering (referenced to the start of the ethernet packet) */ -- uint16_t mask_size; /**< Size of the mask in bytes */ -- uint8_t *mask; /**< Pattern mask bytes to be ANDed with the pattern eg. "\xff00" (must be in network byte order) */ -- uint8_t *pattern; /**< Pattern bytes used to filter eg. "\x0800" (must be in network byte order) */ -- whd_bool_t enabled_status; /**< When returned from wwd_wifi_get_packet_filters, indicates if the filter is enabled */ --} whd_packet_filter_t; -- --#define TKO_DATA_OFFSET offsetof(wl_tko_t, data) /**< TKO data offset */ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_TYPES_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_wifi_api.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_wifi_api.h -deleted file mode 100644 -index aa04ba8a92..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_wifi_api.h -+++ /dev/null -@@ -1,1179 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Prototypes of functions for controlling the Wi-Fi system -- * -- * This file provides prototypes for end-user functions which allow -- * actions such as scanning for Wi-Fi networks, joining Wi-Fi -- * networks, getting the MAC address, etc -- * -- */ -- --#include "whd.h" --#include "whd_types.h" -- --#ifndef INCLUDED_WHD_WIFI_API_H --#define INCLUDED_WHD_WIFI_API_H -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Function declarations --******************************************************/ -- --/** @addtogroup wifi WHD Wi-Fi API -- * APIs for controlling the Wi-Fi system -- * @{ -- */ -- --/** @addtogroup wifimanagement WHD Wi-Fi Management API -- * @ingroup wifi -- * Initialisation and other management functions for WHD system -- * @{ -- */ -- --/** Initialize an instance of the WHD driver -- * -- * @param whd_driver_ptr Pointer to Pointer to handle instance of the driver -- * @param whd_init_config Pointer to configuration data that controls how the driver is initialized -- * @param resource_ops Pointer to resource interface to provide resources to the driver initialization process -- * @param buffer_ops Pointer to a buffer interface to provide buffer related services to the driver instance -- * @param network_ops Pointer to a whd_netif_funcs_t to provide network stack services to the driver instance -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_init(whd_driver_t *whd_driver_ptr, whd_init_config_t *whd_init_config, -- whd_resource_source_t *resource_ops, whd_buffer_funcs_t *buffer_ops, -- whd_netif_funcs_t *network_ops); --/* @} */ --/* @} */ -- --/** @addtogroup busapi WHD Bus API -- * Allows WHD to operate with specific SDIO/SPI bus -- * @{ -- */ -- --/** Attach the WLAN Device to a specific SDIO bus -- * -- * @param whd_driver Pointer to handle instance of the driver -- * @param whd_config Configuration for SDIO bus -- * @param sdio_obj The SDHC hardware interface, from the Level 3 CY HW APIs -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_config, cyhal_sdio_t *sdio_obj); -- --/** Detach the WLAN Device to a specific SDIO bus -- * -- * @param whd_driver Pointer to handle instance of the driver -- */ --extern void whd_bus_sdio_detach(whd_driver_t whd_driver); -- --/** Attach the WLAN Device to a specific SPI bus -- * -- * @param whd_driver Pointer to handle instance of the driver -- * @param whd_config Configuration for SPI bus -- * @param spi_obj The SPI hardware interface, from the Level 3 CY HW APIs -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_config, cyhal_spi_t *spi_obj); -- --/** Detach the WLAN Device to a specific SPI bus -- * -- * @param whd_driver Pointer to handle instance of the driver -- */ --extern void whd_bus_spi_detach(whd_driver_t whd_driver); -- --/* @} */ -- --/** @addtogroup wifi WHD Wi-Fi API -- * APIs for controlling the Wi-Fi system -- * @{ -- */ -- --/** @addtogroup wifimanagement WHD Wi-Fi Management API -- * @ingroup wifi -- * Initialisation and other management functions for WHD system -- * @{ -- */ -- --/** -- * Turn on the Wi-Fi device -- * -- * Initialise Wi-Fi platform -- * Program various WiFi parameters and modes -- * -- * @param whd_driver Pointer to handle instance of the driver -- * @param ifpp Pointer to Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS if initialization is successful, error code otherwise -- */ --extern uint32_t whd_wifi_on(whd_driver_t whd_driver, whd_interface_t *ifpp); -- --/** -- * Turn off the Wi-Fi device -- * -- * - De-Initialises the required parts of the hardware platform -- * i.e. pins for SDIO/SPI, interrupt, reset, power etc. -- * -- * - De-Initialises the whd thread which arbitrates access -- * to the SDIO/SPI bus -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS if deinitialization is successful, Error code otherwise -- */ --extern uint32_t whd_wifi_off(whd_interface_t ifp); -- --/** Shutdown this instance of the wifi driver, freeing all used resources -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_deinit(whd_interface_t ifp); -- --/** Brings up the Wi-Fi core -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_up(whd_interface_t ifp); -- --/** Bring down the Wi-Fi core -- * -- * WARNING / NOTE: -- * This brings down the Wi-Fi core and existing network connections will be lost. -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_down(whd_interface_t ifp); -- --/** Creates a secondary interface -- * -- * @param whd_drv Pointer to handle instance of the driver -- * @param mac_addr MAC address for the interface -- * @param ifpp Pointer to the whd interface pointer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_add_secondary_interface(whd_driver_t whd_drv, whd_mac_t *mac_addr, whd_interface_t *ifpp); --/* @} */ -- --/** @addtogroup wifijoin WHD Wi-Fi Join, Scan and Halt API -- * @ingroup wifi -- * Wi-Fi APIs for join, scan & leave -- * @{ -- */ -- --/** Scan result callback function pointer type -- * -- * @param result_ptr A pointer to the pointer that indicates where to put the next scan result -- * @param user_data User provided data -- * @param status Status of scan process -- */ --typedef void (*whd_scan_result_callback_t)(whd_scan_result_t **result_ptr, void *user_data, whd_scan_status_t status); -- --/** Initiates a scan to search for 802.11 networks. -- * -- * This functions returns the scan results with limited sets of parameter in a buffer provided by the caller. -- * It is also a blocking call. It is an simplified version of the whd_wifi_scan(). -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param scan_result pointer to user requested records buffer. -- * @param count No of records user is interested in. -- * If 0 return the total record count. -- * -- * @note When scanning specific channels, devices with a strong signal strength on nearby channels may be detected -- * -- * @return record count or Error code -- */ --extern uint32_t whd_wifi_scan_synch(whd_interface_t ifp, -- whd_sync_scan_result_t *scan_result, -- uint32_t count -- ); -- --/** Initiates a scan to search for 802.11 networks. -- * -- * The scan progressively accumulates results over time, and may take between 1 and 10 seconds to complete. -- * The results of the scan will be individually provided to the callback function. -- * Note: The callback function will be executed in the context of the WHD thread and so must not perform any -- * actions that may cause a bus transaction. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param scan_type Specifies whether the scan should be Active, Passive or scan Prohibited channels -- * @param bss_type Specifies whether the scan should search for Infrastructure networks (those using -- * an Access Point), Ad-hoc networks, or both types. -- * @param optional_ssid If this is non-Null, then the scan will only search for networks using the specified SSID. -- * @param optional_mac If this is non-Null, then the scan will only search for networks where -- * the BSSID (MAC address of the Access Point) matches the specified MAC address. -- * @param optional_channel_list If this is non-Null, then the scan will only search for networks on the -- * specified channels - array of channel numbers to search, terminated with a zero -- * @param optional_extended_params If this is non-Null, then the scan will obey the specifications about -- * dwell times and number of probes. -- * @param callback The callback function which will receive and process the result data. -- * @param result_ptr Pointer to a pointer to a result storage structure. -- * @param user_data user specific data that will be passed directly to the callback function -- * -- * @note - When scanning specific channels, devices with a strong signal strength on nearby channels may be detected -- * - Callback must not use blocking functions, nor use WHD functions, since it is called from the context of the -- * WHD thread. -- * - The callback, result_ptr and user_data variables will be referenced after the function returns. -- * Those variables must remain valid until the scan is complete. -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_scan(whd_interface_t ifp, -- whd_scan_type_t scan_type, -- whd_bss_type_t bss_type, -- const whd_ssid_t *optional_ssid, -- const whd_mac_t *optional_mac, -- const uint16_t *optional_channel_list, -- const whd_scan_extended_params_t *optional_extended_params, -- whd_scan_result_callback_t callback, -- whd_scan_result_t *result_ptr, -- void *user_data); -- --/** Abort a previously issued scan -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_stop_scan(whd_interface_t ifp); -- --/** Joins a Wi-Fi network -- * -- * Scans for, associates and authenticates with a Wi-Fi network. -- * On successful return, the system is ready to send data packets. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ssid A null terminated string containing the SSID name of the network to join -- * @param auth_type Authentication type -- * @param security_key A byte array containing either the cleartext security key for WPA/WPA2/WPA3 secured networks -- * @param key_length The length of the security_key in bytes. -- * -- * @note In case of WPA3/WPA2 transition mode, the security_key value is WPA3 password. -- * -- * @return WHD_SUCCESS when the system is joined and ready to send data packets -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type, -- const uint8_t *security_key, uint8_t key_length); -- --/** Joins a specific Wi-Fi network -- * -- * Associates and authenticates with a specific Wi-Fi access point. -- * On successful return, the system is ready to send data packets. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ap A pointer to a whd_scan_result_t structure containing AP details and -- * set ap.channel to 0 for unspecificed channel -- * @param security_key A byte array containing either the cleartext security key for WPA/WPA2 -- * secured networks -- * @param key_length The length of the security_key in bytes. -- * -- * @return WHD_SUCCESS when the system is joined and ready to send data packets -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_join_specific(whd_interface_t ifp, const whd_scan_result_t *ap, const uint8_t *security_key, -- uint8_t key_length); -- --/* @} */ -- --/** @addtogroup wifiutilities WHD Wi-Fi Utility API -- * @ingroup wifi -- * Allows WHD to perform utility operations -- * @{ -- */ -- --/** Set the current channel on the WLAN radio -- * -- * @note On most WLAN devices this will set the channel for both AP *AND* STA -- * (since there is only one radio - it cannot be on two channels simulaneously) -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param channel The desired channel -- * -- * @return WHD_SUCCESS if the channel was successfully set -- * Error code if the channel was not successfully set -- */ --extern uint32_t whd_wifi_set_channel(whd_interface_t ifp, uint32_t channel); -- --/** Get the current channel on the WLAN radio -- * -- * @note On most WLAN devices this will get the channel for both AP *AND* STA -- * (since there is only one radio - it cannot be on two channels simulaneously) -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param channel Pointer to receive the current channel -- * -- * @return WHD_SUCCESS if the channel was successfully retrieved -- * Error code if the channel was not successfully retrieved -- */ --extern uint32_t whd_wifi_get_channel(whd_interface_t ifp, uint32_t *channel); -- --/** Set the passphrase -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param security_key The security key (passphrase) which is to be set -- * @param key_length length of the key -- * -- * @return WHD_SUCCESS when the key is set -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_set_passphrase(whd_interface_t ifp, const uint8_t *security_key, uint8_t key_length); -- --/** Set the SAE password -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param security_key The security key (password) which is to be set -- * @param key_length length of the key -- * -- * @return WHD_SUCCESS when the key is set -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_sae_password(whd_interface_t ifp, const uint8_t *security_key, uint8_t key_length); -- --/** Enable WHD internal supplicant and set WPA2 passphrase in case of WPA3/WPA2 transition mode -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param security_key_psk The security key (passphrase) which is to be set -- * @param psk_length length of the key -- * @param auth_type Authentication type: @ref WHD_SECURITY_WPA3_WPA2_PSK -- * -- * @return WHD_SUCCESS when the supplicant variable and wpa2 passphrase is set -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_enable_sup_set_passphrase(whd_interface_t ifp, const uint8_t *security_key_psk, -- uint8_t psk_length, whd_security_t auth_type); -- -- --/** Enable WHD internal supplicant -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param auth_type Authentication type -- * -- * @return WHD_SUCCESS when the supplicant variable is set -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_enable_supplicant(whd_interface_t ifp, whd_security_t auth_type); -- --/** Retrieve the latest RSSI value -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param rssi The location where the RSSI value will be stored -- * -- * @return WHD_SUCCESS if the RSSI was successfully retrieved -- * Error code if the RSSI was not retrieved -- */ --extern uint32_t whd_wifi_get_rssi(whd_interface_t ifp, int32_t *rssi); -- --/** Retrieve the associated STA's RSSI value -- * -- * @param ifp : Pointer to handle instance of whd interface -- * @param rssi : The location where the RSSI value will be stored -- * @param client_mac : Pointer to associated client's MAC address -- * -- * @return WHD_SUCCESS : if the RSSI was successfully retrieved -- * Error code : if the RSSI was not retrieved -- */ --extern uint32_t whd_wifi_get_ap_client_rssi(whd_interface_t ifp, int32_t *rssi, const whd_mac_t *client_mac); -- -- --/* @} */ -- --/** @addtogroup wifijoin WHD Wi-Fi Join, Scan and Halt API -- * @ingroup wifi -- * Wi-Fi APIs for join, scan & leave -- * @{ -- */ --/** Disassociates from a Wi-Fi network. -- * Applicable only for STA role -- * -- * @param ifp Pointer to handle instance of whd interface. -- * -- * @return WHD_SUCCESS On successful disassociation from the AP -- * Error code If an error occurred -- */ --extern uint32_t whd_wifi_leave(whd_interface_t ifp); --/* @} */ -- --/** @addtogroup wifiutilities WHD Wi-Fi Utility API -- * @ingroup wifi -- * Allows WHD to perform utility operations -- * @{ -- */ -- --/** Retrieves the current Media Access Control (MAC) address -- * (or Ethernet hardware address) of the 802.11 device -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param mac Pointer to a variable that the current MAC address will be written to -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_mac_address(whd_interface_t ifp, whd_mac_t *mac); -- --/** Get the BSSID of the interface -- * -- * @param ifp Pointer to the whd_interface_t -- * @param bssid Returns the BSSID address (mac address) if associated -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_bssid(whd_interface_t ifp, whd_mac_t *bssid); --/* @} */ -- --/** @addtogroup wifisoftap WHD Wi-Fi SoftAP API -- * @ingroup wifi -- * Wi-Fi APIs to perform SoftAP related functionalities -- * @{ -- */ -- --/** Initialises an infrastructure WiFi network (SoftAP) -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ssid A null terminated string containing the SSID name of the network to join -- * @param auth_type Authentication type -- * @param security_key A byte array containing the cleartext security key for the network -- * @param key_length The length of the security_key in bytes. -- * @param channel 802.11 channel number -- * -- * @return WHD_SUCCESS if successfully initialises an AP -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_init_ap(whd_interface_t ifp, whd_ssid_t *ssid, whd_security_t auth_type, -- const uint8_t *security_key, uint8_t key_length, uint8_t channel); -- --/** Start the infrastructure WiFi network (SoftAP) -- * using the parameter set by whd_wifi_init_ap() and optionaly by whd_wifi_manage_custom_ie() -- * -- * @return WHD_SUCCESS if successfully creates an AP -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_start_ap(whd_interface_t ifp); -- --/** Stops an existing infrastructure WiFi network -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS if the AP is successfully stopped or if the AP has not yet been brought up -- * Error code if an error occurred -- */ --extern uint32_t whd_wifi_stop_ap(whd_interface_t ifp); -- -- --/** Get the maximum number of associations supported by AP interfaces -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param max_assoc The maximum number of associations supported by Soft AP interfaces. -- * -- * @return WHD_SUCCESS if the maximum number of associated clients was successfully read -- * WHD_ERROR if the maximum number of associated clients was not successfully read -- */ --extern uint32_t whd_wifi_ap_get_max_assoc(whd_interface_t ifp, uint32_t *max_assoc); -- --/** Gets the current number of active connections -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param client_list_buffer Buffer to store list of associated clients -- * @param buffer_length Length of client list buffer -- * -- * @return WHD_SUCCESS if the active connections was successfully read -- * WHD_ERROR if the active connections was not successfully read -- */ --extern uint32_t whd_wifi_get_associated_client_list(whd_interface_t ifp, void *client_list_buffer, -- uint16_t buffer_length); -- --/** Deauthenticates a STA which may or may not be associated to SoftAP -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param mac Pointer to a variable containing the MAC address to which the deauthentication will be sent -- * NULL mac address will deauthenticate all the associated STAs -- * -- * @param reason Deauthentication reason code -- * -- * @return WHD_SUCCESS On successful deauthentication of the other STA -- * WHD_ERROR If an error occurred -- */ --extern uint32_t whd_wifi_deauth_sta(whd_interface_t ifp, whd_mac_t *mac, whd_dot11_reason_code_t reason); -- --/** Retrieves AP information -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ap_info Returns a whd_bss_info_t structure containing AP details -- * @param security Authentication type -- * -- * @return WHD_SUCCESS if the AP info was successfully retrieved -- * Error code if the AP info was not successfully retrieved -- */ --extern uint32_t whd_wifi_get_ap_info(whd_interface_t ifp, whd_bss_info_t *ap_info, whd_security_t *security); -- --/** Set the beacon interval. -- * -- * Note that the value needs to be set before ap_start in order to beacon interval to take effect. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param interval Beacon interval in time units (Default: 100 time units = 102.4 ms) -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_ap_set_beacon_interval(whd_interface_t ifp, uint16_t interval); -- --/** Set the DTIM interval. -- * -- * Note that the value needs to be set before ap_start in order to DTIM interval to take effect. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param interval DTIM interval, in unit of beacon interval -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_ap_set_dtim_interval(whd_interface_t ifp, uint16_t interval); --/* @} */ -- -- --/** @addtogroup wifipowersave WHD Wi-Fi Power Save API -- * @ingroup wifi -- * Wi-Fi functions for WLAN low power modes -- * @{ -- */ -- --/** Enables powersave mode on specified interface without regard for throughput reduction -- * -- * This function enables (legacy) 802.11 PS-Poll mode and should be used -- * to achieve the lowest power consumption possible when the Wi-Fi device -- * is primarily passively listening to the network -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_enable_powersave(whd_interface_t ifp); -- --/** Enables powersave mode on specified interface while attempting to maximise throughput -- * -- * -- * Network traffic is typically bursty. Reception of a packet often means that another -- * packet will be received shortly afterwards (and vice versa for transmit). -- * -- * In high throughput powersave mode, rather then entering powersave mode immediately -- * after receiving or sending a packet, the WLAN chip waits for a timeout period before -- * returning to sleep. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param return_to_sleep_delay The variable to set return to sleep delay. -- * return to sleep delay must be set to a multiple of 10 and not equal to zero. -- * -- * @return WHD_SUCCESS if power save mode was successfully enabled -- * Error code if power save mode was not successfully enabled -- * -- */ --extern uint32_t whd_wifi_enable_powersave_with_throughput(whd_interface_t ifp, uint16_t return_to_sleep_delay); -- --/** Get powersave mode on specified interface -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param value Value of the current powersave state -- * PM1_POWERSAVE_MODE, PM2_POWERSAVE_MODE, NO_POWERSAVE_MODE -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_powersave_mode(whd_interface_t ifp, uint32_t *value); -- --/** Disables 802.11 power save mode on specified interface -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS if power save mode was successfully disabled -- * Error code if power save mode was not successfully disabled -- * -- */ --extern uint32_t whd_wifi_disable_powersave(whd_interface_t ifp); --/* @} */ -- --/** @addtogroup wifiutilities WHD Wi-Fi Utility API -- * @ingroup wifi -- * Allows WHD to perform utility operations -- * @{ -- */ --/** Registers interest in a multicast address -- * -- * Once a multicast address has been registered, all packets detected on the -- * medium destined for that address are forwarded to the host. -- * Otherwise they are ignored. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param mac Ethernet MAC address -- * -- * @return WHD_SUCCESS if the address was registered successfully -- * Error code if the address was not registered -- */ --extern uint32_t whd_wifi_register_multicast_address(whd_interface_t ifp, const whd_mac_t *mac); -- --/** Unregisters interest in a multicast address -- * -- * Once a multicast address has been unregistered, all packets detected on the -- * medium destined for that address are ignored. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param mac Ethernet MAC address -- * -- * @return WHD_SUCCESS if the address was unregistered successfully -- * Error code if the address was not unregistered -- */ --extern uint32_t whd_wifi_unregister_multicast_address(whd_interface_t ifp, const whd_mac_t *mac); -- --/** Sets the 802.11 powersave listen interval for a Wi-Fi client, and communicates -- * the listen interval to the Access Point. The listen interval will be set to -- * (listen_interval x time_unit) seconds. -- * -- * The default value for the listen interval is 0. With the default value of 0 set, -- * the Wi-Fi device wakes to listen for AP beacons every DTIM period. -- * -- * If the DTIM listen interval is non-zero, the DTIM listen interval will over ride -- * the beacon listen interval value. -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param listen_interval The desired beacon listen interval -- * @param time_unit The listen interval time unit; options are beacon period or DTIM period. -- * -- * @return WHD_SUCCESS If the listen interval was successfully set. -- * Error code If the listen interval was not successfully set. -- */ --extern uint32_t whd_wifi_set_listen_interval(whd_interface_t ifp, uint8_t listen_interval, -- whd_listen_interval_time_unit_t time_unit); -- --/** Gets the current value of all beacon listen interval variables -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param li Powersave listen interval values -- * - listen_interval_beacon : The current value of the listen interval set as a multiple of the beacon period -- * - listen_interval_dtim : The current value of the listen interval set as a multiple of the DTIM period -- * - listen_interval_assoc : The current value of the listen interval sent to access points in an association request frame -- * -- * @return WHD_SUCCESS If all listen interval values are read successfully -- * Error code If at least one of the listen interval values are NOT read successfully -- */ --extern uint32_t whd_wifi_get_listen_interval(whd_interface_t ifp, whd_listen_interval_t *li); -- --/** Determines if a particular interface is ready to transceive ethernet packets -- * -- * @param ifp Pointer to handle instance of whd interface -- * -- * @return WHD_SUCCESS if the interface is ready to transceive ethernet packets -- * WHD_NOTFOUND no AP with a matching SSID was found -- * WHD_NOT_AUTHENTICATED Matching AP was found but it won't let you authenticate. -- * This can occur if this device is in the block list on the AP. -- * WHD_NOT_KEYED Device has authenticated and associated but has not completed the key exchange. -- * This can occur if the passphrase is incorrect. -- * Error code if the interface is not ready to transceive ethernet packets -- */ --extern uint32_t whd_wifi_is_ready_to_transceive(whd_interface_t ifp); -- --/* Certification APIs */ -- --/** Retrieve the latest STA EDCF AC parameters -- * -- * Retrieve the latest Station (STA) interface EDCF (Enhanced Distributed -- * Coordination Function) Access Category parameters -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param acp The location where the array of AC parameters will be stored -- * -- * @return WHD_SUCCESS if the AC Parameters were successfully retrieved -- * Error code if the AC Parameters were not retrieved -- */ --extern uint32_t whd_wifi_get_acparams(whd_interface_t ifp, whd_edcf_ac_param_t *acp); -- --/* Action Frames */ -- --/** Manage the addition and removal of custom IEs -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param action the action to take (add or remove IE) -- * @param oui the oui of the custom IE -- * @param subtype the IE sub-type -- * @param data a pointer to the buffer that hold the custom IE -- * @param length the length of the buffer pointed to by 'data' -- * @param which_packets A mask to indicate in which all packets this IE should be included. See whd_ie_packet_flag_t. -- * -- * @return WHD_SUCCESS if the custom IE action was successful -- * Error code if the custom IE action failed -- */ --extern uint32_t whd_wifi_manage_custom_ie(whd_interface_t ifp, whd_custom_ie_action_t action, -- const uint8_t *oui, uint8_t subtype, const void *data, -- uint16_t length, uint16_t which_packets); -- --/** Send a pre-prepared action frame -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param af_params A pointer to a pre-prepared action frame structure -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_send_action_frame(whd_interface_t ifp, whd_af_params_t *af_params); -- --/** Set coex configuration -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param coex_config Pointer to the structure whd_coex_config_t -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_coex_config(whd_interface_t ifp, whd_coex_config_t *coex_config); -- --/** Get version of Device (WLAN) Firmware -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[out] version : pointer to store version # -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_version(whd_interface_t ifp, uint32_t *version); -- --/** Get ARP Offload Peer Age from Device (WLAN) -- * Length of time in seconds before aging out an entry in the WLAN processor ARP table. -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[out] seconds : pointer to store value -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_peerage_get(whd_interface_t ifp, uint32_t *seconds); -- --/** Set ARP Offload Peer Age in Device (WLAN) -- * Length of time in seconds before aging out an entry in the WLAN processor ARP table. -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] seconds : Seconds to age out IP -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_peerage_set(whd_interface_t ifp, uint32_t seconds); -- --/** Get ARP Offload Agent Enable from Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[out] agent_enable : pointer to store value -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_arpoe_get(whd_interface_t ifp, uint32_t *agent_enable); -- --/** Set ARP Offload Agent Enable in Device (WLAN) -- * Set Enable/Disable of ARP Offload Agent -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] agent_enable : Enable=1 / Disable=0 -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_arpoe_set(whd_interface_t ifp, uint32_t agent_enable); -- --/** Clear ARP Offload cache in Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_cache_clear(whd_interface_t ifp); -- --/** Get ARP Offload Feature Flags from Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[out] features : ptr to store currently set features - bit flags CY_ARP_OL_AGENT_ENABLE, etc. -- * ARL_OL_AGENT | ARL_OL_SNOOP | ARP_OL_HOST_AUTO_REPLY | ARP_OL_PEER_AUTO_REPLY -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_features_get(whd_interface_t ifp, uint32_t *features); -- --/** Set ARP Offload Feature Flags in Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] features : features to set value (you can OR ('|') multiple flags) CY_ARP_OL_AGENT_ENABLE, etc. -- * ARL_OL_AGENT | ARL_OL_SNOOP | ARP_OL_HOST_AUTO_REPLY | ARP_OL_PEER_AUTO_REPLY -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_features_set(whd_interface_t ifp, uint32_t features); -- --/** Print ARP Offload Feature Flags in Human readable form to console -- * -- * @param[in] features : feature flags to set (you can OR '|' multiple flags) CY_ARP_OL_AGENT_ENABLE, etc. -- * ARL_OL_AGENT | ARL_OL_SNOOP | ARP_OL_HOST_AUTO_REPLY | ARP_OL_PEER_AUTO_REPLY -- * @param[in] title : Optional: Title for output (NULL == no title) -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_features_print(uint32_t features, const char *title); -- --/** Add ARP Offload Host IP Identifier(s) to HostIP List to Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] host_ipv4_list : pointer to host_ip data (IPv4, 1 uint32_t per ip addr) -- * @param[in] count : Number of array elements in host_ip -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_hostip_list_add(whd_interface_t ifp, uint32_t *host_ipv4_list, uint32_t count); -- --/** Add One ARP Offload Host IP Identifier to HostIP List (mbed-style IP string) to Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] ip_addr : pointer to ip string (as returned from mbedos calls) -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_hostip_list_add_string(whd_interface_t ifp, const char *ip_addr); -- --/** Clear One ARP Offload Host IP Identifier from Host IP List in Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] ipv4_addr : ip addr expressed as a uint32_t -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_hostip_list_clear_id(whd_interface_t ifp, uint32_t ipv4_addr); -- --/** Clear One ARP Offload Host IP Identifier from Host IP List (mbed-style IP string) in Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] ip_addr : pointer to ip string (as returned from mbedos calls) -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_hostip_list_clear_id_string(whd_interface_t ifp, const char *ip_addr); -- --/** Clear all ARP Offload Host IP Identifier List -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_hostip_list_clear(whd_interface_t ifp); -- --/** Get ARP Offload Host IP Identifiers from Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] count : Number of array elements in host_ip -- * @param[out] host_ipv4_list : Pointer to structure array to store host_ip data -- * @param[out] filled : Number of array elements filled by this routine -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_hostip_list_get(whd_interface_t ifp, uint32_t count, uint32_t *host_ipv4_list, uint32_t *filled); -- --/** Clear ARP Offload statistics in Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_stats_clear(whd_interface_t ifp); -- --/** Get ARP Offload statistics from Device (WLAN) -- * -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[out] stats : Ptr to store statistics whd_arp_stats_t -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_stats_get(whd_interface_t ifp, whd_arp_stats_t *stats); -- --/** Print ARP Offload statistics -- * NOTE: call whd_arp_stats_get(), then print them using this function. -- * -- * @param[in] arp_stats : Ptr to ARP statistics structure -- * @param[in] title : Optional: Title for output (NULL == no title) -- * -- * @return whd_result_t -- */ --whd_result_t whd_arp_stats_print(whd_arp_stats_t *arp_stats, const char *title); -- --/** A filter must be added (e.g. created) before it can be enabled. -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] settings : Ptr to filter settings @ref whd_packet_filter_t -- * @return whd_result_t -- */ --whd_result_t whd_pf_add_packet_filter(whd_interface_t ifp, const whd_packet_filter_t *settings); -- --/** Remove a previously added filter. -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] filter_id : filter to remove -- * @return whd_result_t -- */ --whd_result_t whd_pf_remove_packet_filter(whd_interface_t ifp, uint8_t filter_id); -- --/** After a filter has been added it can be enabled or disabled as needed. -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] filter_id : filter to enable -- * @return whd_result_t -- */ --whd_result_t whd_pf_enable_packet_filter(whd_interface_t ifp, uint8_t filter_id); -- --/** After a filter has been added it can be enabled or disabled as needed. -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] filter_id : filter to disable -- * @return whd_result_t -- */ --whd_result_t whd_pf_disable_packet_filter(whd_interface_t ifp, uint8_t filter_id); -- --/** After a filter has been added it can be enabled or disabled as needed. -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] filter_id : filter to disable/enable -- * @param[in] enable : Enable/Disable Flag -- * @return whd_result_t -- */ --whd_result_t whd_wifi_toggle_packet_filter(whd_interface_t ifp, uint8_t filter_id, whd_bool_t enable); -- --/** Filters are implemented in WLAN subsystem as a bit pattern and matching bit mask that -- * are applied to incoming packets. This API retrieves the pattern and mask. -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] filter_id : which filter to retrieve -- * @param[in] max_size : size of both mask and pattern buffers -- * @param[out] mask : mask for this filter -- * @param[out] pattern : pattern for this filter -- * @param[out] size_out : length of both mask and pattern -- * @return whd_result_t -- */ --whd_result_t whd_pf_get_packet_filter_mask_and_pattern(whd_interface_t ifp, uint8_t filter_id, uint32_t max_size, -- uint8_t *mask, -- uint8_t *pattern, uint32_t *size_out); -- --/** Clear the packet filter stats associated with a filter id -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] filter_id : which filter -- * @return whd_result_t -- */ --whd_result_t whd_wifi_clear_packet_filter_stats(whd_interface_t ifp, uint32_t filter_id); -- --/** Return the stats associated with a filter -- * @param[in] ifp : pointer to handle instance of whd interface -- * @param[in] filter_id : which filter -- * @param[out] stats : Ptr to store statistics wl_pkt_filter_stats_t -- * @return whd_result_t -- */ --whd_result_t whd_pf_get_packet_filter_stats(whd_interface_t ifp, uint8_t filter_id, whd_pkt_filter_stats_t *stats); -- --/** Set/Get TKO retry & interval parameters -- * @param[in] ifp : Pointer to handle instance of whd interface -- * @param[in] whd_tko_retry : whd retry & interval parameters structure -- * @param[in] set : Set/Get Flag -- * @return whd_result_t -- */ --whd_result_t whd_tko_param(whd_interface_t ifp, whd_tko_retry_t *whd_tko_retry, int set); -- --/** Return the tko status for all indexes -- * @param[in] ifp : Pointer to handle instance of whd interface -- * @param[out] tko_status : Ptr to store tko_status -- * @return whd_result_t -- */ --whd_result_t whd_tko_get_status(whd_interface_t ifp, whd_tko_status_t *tko_status); -- --/** Return the stats associated with a filter -- * @param[in] ifp : Pointer to handle instance of whd interface -- * @param[out] max : returns Max TCP connections supported by WLAN Firmware -- * @return whd_result_t -- */ --whd_result_t whd_tko_max_assoc(whd_interface_t ifp, uint8_t *max); -- --/** Return the stats associated with a filter -- * @param[in] ifp : Pointer to handle instance of whd interface -- * @param[in] index : index for TCP offload connection -- * @param[out] whd_connect : tko_connect structure buffer from Firmware -- * @param[in] buflen : Buffer given for tko_connect -- * @return whd_result_t -- */ --whd_result_t whd_tko_get_FW_connect(whd_interface_t ifp, uint8_t index, whd_tko_connect_t *whd_connect, -- uint16_t buflen); -- --/** Return the stats associated with a filter -- * @param[in] ifp : Pointer to handle instance of whd interface -- * @param[in] enable : Enable/Disable TCP Keepalive offload -- * @return whd_result_t -- */ --whd_result_t whd_tko_toggle(whd_interface_t ifp, whd_bool_t enable); -- -- --/* @} */ -- --/** @addtogroup wifiioctl WHD Wi-Fi IOCTL Set/Get API -- * @ingroup wifi -- * Set and get IOCTL values -- * @{ -- */ --/** Sends an IOCTL command - CDC_SET IOCTL value -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ioctl CDC_SET - To set the I/O control -- * @param value Data value to be sent -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_ioctl_value(whd_interface_t ifp, uint32_t ioctl, uint32_t value); -- --/** Sends an IOCTL command - CDC_GET IOCTL value -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ioctl CDC_GET - To get the I/O control -- * @param value Pointer to receive the data value -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_ioctl_value(whd_interface_t ifp, uint32_t ioctl, uint32_t *value); -- --/** Sends an IOCTL command - CDC_SET IOCTL buffer -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ioctl CDC_SET - To set the I/O control -- * @param buffer Handle for a packet buffer containing the data value to be sent. -- * @param buffer_length Length of buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_ioctl_buffer(whd_interface_t ifp, uint32_t ioctl, void *buffer, uint16_t buffer_length); -- --/** Sends an IOCTL command - CDC_GET IOCTL buffer -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param ioctl CDC_GET - To get the I/O control -- * @param out_buffer Pointer to receive the handle for the packet buffer containing the response data value received -- * @param out_length Length of out_buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_ioctl_buffer(whd_interface_t ifp, uint32_t ioctl, uint8_t *out_buffer, -- uint16_t out_length); -- --/** Sends an IOVAR command -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param iovar_name SDPCM_GET - To get the I/O Variable -- * @param param Paramater to be passed for the IOVAR -- * @param paramlen Paramter length -- * @param out_buffer Pointer to receive the handle for the packet buffer containing the response data value received -- * @param out_length Length of out_buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_iovar_buffer_with_param(whd_interface_t ifp, const char *iovar_name, void *param, -- uint32_t paramlen, uint8_t *out_buffer, uint32_t out_length); -- --/* @} */ -- --/** @addtogroup dbg WHD Wi-Fi Debug API -- * @ingroup wifi -- * WHD APIs which allows debugging like, printing whd log information, getting whd stats, etc. -- * @{ -- */ --/** Retrieves the WLAN firmware version -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param version Pointer to a buffer that version information will be written to -- * @param length Length of the buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_wifi_version(whd_interface_t ifp, char *version, uint8_t length); -- --/** Retrieves the WLAN CLM version -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param version Pointer to a buffer that version information will be written to -- * @param length Length of the buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_clm_version(whd_interface_t ifp, char *version, uint8_t length); -- --/** To print whd log information -- * -- * @param whd_drv Pointer to handle instance of the driver -- * @param buffer Buffer to store read log results -- * @param buffer_size Variable to store size of the buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_read_wlan_log(whd_driver_t whd_drv, char *buffer, uint32_t buffer_size); -- --/** To print whd log information -- * -- * @param whd_drv Pointer to handle instance of the driver -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_print_whd_log(whd_driver_t whd_drv); -- --/** Retrieves the ifidx from interface pointer. -- * ifidx is a unique value and be used to identify a instance of tcp/ip stack -- * -- * @param ifp Pointer to the whd_interface_t -- * @param ifidx Pointer to ifidx -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_network_get_ifidx_from_ifp(whd_interface_t ifp, uint8_t *ifidx); -- --/** Retrieves the bsscfgidx from interface pointer. -- * -- * Can be used to send IOCTL with requires bsscfgidx -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param bsscfgidx Pointer to bsscfgidx -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_network_get_bsscfgidx_from_ifp(whd_interface_t ifp, uint8_t *bsscfgidx); -- -- --/** Retrives the bss info -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param bi A pointer to the structure wl_bss_info_t -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_bss_info(whd_interface_t ifp, wl_bss_info_t *bi); -- --/** Prints WHD stats -- * -- * @param whd_drv Pointer to handle instance of the driver -- * @param reset_after_print Bool variable to decide if whd_stats to be reset -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_print_stats(whd_driver_t whd_drv, whd_bool_t reset_after_print); -- --/* @} */ --/* @} */ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_WIFI_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.c -deleted file mode 100644 -index 1446fae34c..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.c -+++ /dev/null -@@ -1,114 +0,0 @@ --/***************************************************************************//** --* \file cy_network_buffer.c --* --* \brief --* Basic set of APIs for dealing with network packet buffers. This is used by WHD --* for relaying data between the network stack and the connectivity chip. --* --******************************************************************************** --* \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation --* SPDX-License-Identifier: Apache-2.0 --* --* Licensed under the Apache License, Version 2.0 (the "License"); --* you may not use this file except in compliance with the License. --* You may obtain a copy of the License at --* --* http://www.apache.org/licenses/LICENSE-2.0 --* --* Unless required by applicable law or agreed to in writing, software --* distributed under the License is distributed on an "AS IS" BASIS, --* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --* See the License for the specific language governing permissions and --* limitations under the License. --*******************************************************************************/ -- --#if 1 -- --#include --#include "cy_network_buffer.h" --#include "cy_utils.h" --#include "lwip/memp.h" --#include "whd_bus_protocol_interface.h" -- --#define SDIO_BLOCK_SIZE (64U) -- --whd_result_t cy_host_buffer_get(whd_buffer_t *buffer, whd_buffer_dir_t direction, unsigned short size, unsigned long timeout_ms) --{ -- UNUSED_PARAMETER( direction ); -- UNUSED_PARAMETER( timeout_ms ); -- struct pbuf *p = NULL; -- if ( ( direction == WHD_NETWORK_TX) && ( size <= PBUF_POOL_BUFSIZE ) ) -- { -- p = pbuf_alloc(PBUF_RAW, size, PBUF_POOL); -- } -- else -- { -- p = pbuf_alloc(PBUF_RAW, size+SDIO_BLOCK_SIZE, PBUF_RAM); -- if ( p != NULL ) -- { -- p->len = size; -- p->tot_len -= SDIO_BLOCK_SIZE; -- } -- } -- if (p != NULL ) -- { -- *buffer = p; -- return WHD_SUCCESS; -- } -- else -- { -- return WHD_BUFFER_ALLOC_FAIL; -- } --} -- --void cy_buffer_release(whd_buffer_t buffer, whd_buffer_dir_t direction) --{ -- UNUSED_PARAMETER( direction ); -- (void) pbuf_free( (struct pbuf *)buffer ); --} -- --uint8_t *cy_buffer_get_current_piece_data_pointer(whd_buffer_t buffer) --{ -- CY_ASSERT(buffer != NULL); -- struct pbuf *pbuffer= (struct pbuf*) buffer; -- return (uint8_t*) pbuffer->payload; --} -- --uint16_t cy_buffer_get_current_piece_size(whd_buffer_t buffer) --{ -- CY_ASSERT(buffer != NULL); -- struct pbuf *pbuffer = (struct pbuf*) buffer; -- return (uint16_t) pbuffer->len; --} -- --whd_result_t cy_buffer_set_size(whd_buffer_t buffer, unsigned short size) --{ -- CY_ASSERT(buffer != NULL); -- struct pbuf * pbuffer = (struct pbuf *) buffer; -- -- if ( size > (unsigned short) WHD_LINK_MTU + LWIP_MEM_ALIGN_SIZE(LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf))) + LWIP_MEM_ALIGN_SIZE(size) ) -- { -- return WHD_PMK_WRONG_LENGTH; -- } -- -- pbuffer->tot_len = size; -- pbuffer->len = size; -- -- return CY_RSLT_SUCCESS; --} -- --whd_result_t cy_buffer_add_remove_at_front(whd_buffer_t *buffer, int32_t add_remove_amount) --{ -- CY_ASSERT(buffer != NULL); -- struct pbuf **pbuffer = (struct pbuf**) buffer; -- -- if ( (u8_t) 0 != pbuf_header( *pbuffer, ( s16_t )( -add_remove_amount ) ) ) -- { -- return WHD_PMK_WRONG_LENGTH; -- } -- -- return WHD_SUCCESS; --} -- --#endif /* defined(CYBSP_WIFI_CAPABLE) */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.h -deleted file mode 100644 -index 44f3872498..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_network_buffer.h -+++ /dev/null -@@ -1,185 +0,0 @@ --/***************************************************************************//** --* \file cy_network_buffer.h --* --* \brief --* Basic set of APIs for dealing with network packet buffers. This is used by WHD --* for relaying data between the network stack and the connectivity chip. --* --******************************************************************************** --* \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation --* SPDX-License-Identifier: Apache-2.0 --* --* Licensed under the Apache License, Version 2.0 (the "License"); --* you may not use this file except in compliance with the License. --* You may obtain a copy of the License at --* --* http://www.apache.org/licenses/LICENSE-2.0 --* --* Unless required by applicable law or agreed to in writing, software --* distributed under the License is distributed on an "AS IS" BASIS, --* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --* See the License for the specific language governing permissions and --* limitations under the License. --*******************************************************************************/ -- --/** --* \addtogroup group_bsp_network_buffer Buffer management --* \{ --* Basic set of APIs for dealing with network packet buffers --* --* \defgroup group_bsp_network_buffer_functions Functions --*/ -- --#ifndef __CY_NETWORK_BUFFER_H__ --#define __CY_NETWORK_BUFFER_H__ -- --#if 1 -- --#include --#include --#include "cy_result.h" --#include "whd.h" --#include "whd_network_types.h" --#include "lwip/pbuf.h" -- --#if defined(__cplusplus) --extern "C" { --#endif -- -- --/** --* \addtogroup group_bsp_network_buffer_functions --* \{ --*/ -- --/** Allocates a packet buffer -- * -- * Attempts to allocate a packet buffer of the size requested. It can do this -- * by allocating a pre-existing packet from a pool, using a static buffer, -- * or by dynamically allocating memory. The method of allocation does not -- * concern WHD, however it must match the way the network stack expects packet -- * buffers to be allocated. Usually WHD requires packet of size of WHD_LINK_MTU -- * which includes the MTU. Refer to whd_types.h to find the size of WHD_LINK_MTU. -- * -- * @param buffer : A pointer which receives the allocated packet buffer handle -- * @param direction : Indicates transmit/receive direction that the packet buffer is -- * used for. This may be needed if tx/rx pools are separate. -- * @param size : The number of bytes to allocate. -- * @param timeout_ms: Time to wait for a packet buffer to be available -- * -- * @return : CY_RSLT_SUCCESS or WHD_BUFFER_ALLOC_FAIL if the buffer could not be allocated -- */ --whd_result_t cy_host_buffer_get(whd_buffer_t *buffer, whd_buffer_dir_t direction, unsigned short size, unsigned long timeout_ms); -- --/** Releases a packet buffer -- * -- * This function is used by WHD to indicate that it no longer requires -- * a packet buffer. The buffer can then be released back into a pool for -- * reuse, or the dynamically allocated memory can be freed, according to -- * how the packet was allocated. -- * Returns void since WHD cannot do anything about failures -- * -- * @param buffer : The handle of the packet buffer to be released -- * @param direction : Indicates transmit/receive direction that the packet buffer has -- * been used for. This might be needed if tx/rx pools are separate. -- */ --void cy_buffer_release(whd_buffer_t buffer, whd_buffer_dir_t direction); -- --/** Retrieves the current pointer of a packet buffer -- * -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, this function allows WHD to get -- * the current 'front' location pointer. -- * -- * @param buffer : The handle of the packet buffer whose pointer is to be retrieved -- * -- * @return : The packet buffer's current pointer. -- */ --uint8_t *cy_buffer_get_current_piece_data_pointer(whd_buffer_t buffer); -- --/** Retrieves the size of a packet buffer -- * -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, the memory block used to contain a packet buffer -- * will often be larger than the current size of the packet buffer data. -- * This function allows WHD to retrieve the current size of a packet buffer's data. -- * -- * @param buffer : The handle of the packet buffer whose size is to be retrieved -- * -- * @return : The size of the packet buffer. -- */ --uint16_t cy_buffer_get_current_piece_size(whd_buffer_t buffer); -- --/** Sets the current size of a WHD packet -- * -- * This function sets the current length of a WHD packet buffer -- * -- * @param buffer : The packet to be modified -- * @param size : The new size of the packet buffer -- * -- * @return : CY_RSLT_SUCCESS or WHD_PMK_WRONG_LENGTH if the requested size is not valid -- */ --whd_result_t cy_buffer_set_size(whd_buffer_t buffer, unsigned short size); -- --/** Moves the current pointer of a packet buffer -- * -- * Since packet buffers usually need to be created with space at the front for additional headers, -- * this function allows WHD to move the current 'front' location pointer so that it has space to -- * add headers to transmit packets, and so that the network stack does not see the internal WHD -- * headers on received packets. -- * -- * @param buffer : A pointer to the handle of the current packet buffer for which the -- * current pointer will be moved. On return this may contain a pointer -- * to a newly allocated packet buffer which has been daisy chained to -- * the front of the given one. This would be the case if the given packet -- * buffer didn't have enough space at the front. -- * @param add_remove_amount : This is the number of bytes to move the current pointer of the packet -- * buffer - a negative value increases the space for headers at the front -- * of the packet, a positive value decreases the space. -- * -- * @return : CY_RSLT_SUCCESS or WHD_PMK_WRONG_LENGTH if the added amount is outside -- * the size of the buffer -- */ --whd_result_t cy_buffer_add_remove_at_front(whd_buffer_t *buffer, int32_t add_remove_amount); -- -- --/** Called by WHD to pass received data to the network stack -- * -- * Packets received from the Wi-Fi network by WHD are forwarded to by calling function ptr which -- * must be implemented in the network interface. Ethernet headers -- * are present at the start of these packet buffers. -- * -- * This function is called asynchronously in the context of the -- * WHD thread whenever new data has arrived. -- * Packet buffers are allocated within WHD, and ownership is transferred -- * to the network stack. The network stack or application is thus -- * responsible for releasing the packet buffers. -- * Most packet buffering systems have a pointer to the 'current point' within -- * the packet buffer. When this function is called, the pointer points -- * to the start of the Ethernet header. There is other inconsequential data -- * before the Ethernet header. -- * -- * It is preferable that the (whd_network_process_ethernet_data)() function simply puts -- * the received packet on a queue for processing by another thread. This avoids the -- * WHD thread being unnecessarily tied up which would delay other packets -- * being transmitted or received. -- * -- * @param interface : The interface on which the packet was received. -- * @param buffer : Handle of the packet which has just been received. Responsibility for -- * releasing this buffer is transferred from WHD at this point. -- * -- */ --void cy_network_process_ethernet_data(whd_interface_t interface, whd_buffer_t buffer); -- --/** \} group_bsp_network_buffer_functions */ -- --#ifdef __cplusplus --} --#endif /* __cplusplus */ -- --#endif /* defined(CYBSP_WIFI_CAPABLE) */ -- --/** \} group_bsp_network_buffer */ -- --#endif // __CY_NETWORK_BUFFER_H__ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_result.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_result.h -index 40b21b0f43..8277169ab9 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_result.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cy_result.h -@@ -8,7 +8,7 @@ - * - ******************************************************************************** - * \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation -+* Copyright 2018-2020 Cypress Semiconductor Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -25,17 +25,30 @@ - *******************************************************************************/ - - /** -- * \addtogroup group_result Result Type -- * \ingroup group_abstraction -- * \{ -- * Basic function result handling. Defines a simple type for conveying -- * information about whether something succeeded or details about any issues -- * that were detected. -- * -- * \defgroup group_result_macros Macros -- */ -- --#pragma once -+* \addtogroup group_result Result Type -+* \ingroup group_abstraction -+* \{ -+* \anchor anchor_general_description -+* \brief Defines a type and related utilities for function result handling. -+* -+* The @ref cy_rslt_t type is a structured bitfield which encodes information -+* about result type, the originating module, and a code for the specific -+* error (or warning etc). In order to extract these individual fields from -+* a @ref cy_rslt_t value, the utility macros @ref CY_RSLT_GET_TYPE, @ref CY_RSLT_GET_MODULE, -+* and @ref CY_RSLT_GET_CODE are provided. For example: -+* \code -+* cy_rslt_t result = cy_hal_do_operation(arg); -+* // Will be CY_RSLT_TYPE_INFO, CY_RSLT_TYPE_WARNING, CY_RSLT_TYPE_ERROR, or CY_RSLT_TYPE_FATAL -+* uint8_t type = CY_RSLT_GET_TYPE(result) -+* // See the "Modules" section for possible values -+* uint16_t module_id = CY_RSLT_GET_MODULE(result); -+* // Specific error codes are defined by each module -+* uint16_t error_code = CY_RSLT_GET_CODE(result); -+* \endcode -+*/ -+ -+#if !defined(CY_RESULT_H) -+#define CY_RESULT_H - - #include - -@@ -44,17 +57,20 @@ extern "C" { - #endif - - /** -- * \addtogroup group_result_macros -- * \{ -- */ -+ * @brief Provides the result of an operation as a structured bitfield. -+ * -+ * See the \ref anchor_general_description "General Description" -+ * for more details on structure and usage. -+ */ -+typedef uint32_t cy_rslt_t; -+ -+/** @ref cy_rslt_t return value indicating success */ -+#define CY_RSLT_SUCCESS ((cy_rslt_t)0x00000000U) - -+/** \cond INTERNAL */ - /** Mask for the bit at position "x" */ --#define CY_BIT_MASK(x) ( (1U << (x) ) - 1U ) -+#define CY_BIT_MASK(x) ((1UL << (x)) - 1U) - --/** Bit position of the result code */ --#define CY_RSLT_CODE_POSITION (0U) --/** Bit width of the result code */ --#define CY_RSLT_CODE_WIDTH (16U) - /** Bit position of the result type */ - #define CY_RSLT_TYPE_POSITION (16U) - /** Bit width of the result type */ -@@ -63,73 +79,150 @@ extern "C" { - #define CY_RSLT_MODULE_POSITION (18U) - /** Bit width of the module identifier */ - #define CY_RSLT_MODULE_WIDTH (14U) -+/** Bit position of the result code */ -+#define CY_RSLT_CODE_POSITION (0U) -+/** Bit width of the result code */ -+#define CY_RSLT_CODE_WIDTH (16U) - --/** Mask for the result code */ --#define CY_RSLT_CODE_MASK CY_BIT_MASK(CY_RSLT_CODE_WIDTH) --/** Mask for the module identifier */ --#define CY_RSLT_MODULE_MASK CY_BIT_MASK(CY_RSLT_MODULE_WIDTH) - /** Mask for the result type */ - #define CY_RSLT_TYPE_MASK CY_BIT_MASK(CY_RSLT_TYPE_WIDTH) -+/** Mask for the module identifier */ -+#define CY_RSLT_MODULE_MASK CY_BIT_MASK(CY_RSLT_MODULE_WIDTH) -+/** Mask for the result code */ -+#define CY_RSLT_CODE_MASK CY_BIT_MASK(CY_RSLT_CODE_WIDTH) - --/** Informational-only result status */ -+/** \endcond */ -+ -+/** -+* \{ -+* @name Fields -+* Utility macros for constructing result values and extracting individual fields from existing results. -+*/ -+ -+/** -+ * @brief Get the value of the result type field -+ * @param x the @ref cy_rslt_t value from which to extract the result type -+ */ -+#define CY_RSLT_GET_TYPE(x) (((x) >> CY_RSLT_TYPE_POSITION) & CY_RSLT_TYPE_MASK) -+/** -+ * @brief Get the value of the module identifier field -+ * @param x the @ref cy_rslt_t value from which to extract the module id -+ */ -+#define CY_RSLT_GET_MODULE(x) (((x) >> CY_RSLT_MODULE_POSITION) & CY_RSLT_MODULE_MASK) -+/** -+ * @brief Get the value of the result code field -+ * @param x the @ref cy_rslt_t value from which to extract the result code -+ */ -+#define CY_RSLT_GET_CODE(x) (((x) >> CY_RSLT_CODE_POSITION) & CY_RSLT_CODE_MASK) -+ -+/** -+ * @brief Create a new @ref cy_rslt_t value that encodes the specified type, module, and result code. -+ * @param type one of @ref CY_RSLT_TYPE_INFO, @ref CY_RSLT_TYPE_WARNING, -+ * @ref CY_RSLT_TYPE_ERROR, @ref CY_RSLT_TYPE_FATAL -+ * @param module Identifies the module where this result originated; see @ref anchor_modules "Modules". -+ * @param code a module-defined identifier to identify the specific situation that -+ * this result describes. -+ */ -+#define CY_RSLT_CREATE(type, module, code) \ -+ ((((module) & CY_RSLT_MODULE_MASK) << CY_RSLT_MODULE_POSITION) | \ -+ (((code) & CY_RSLT_CODE_MASK) << CY_RSLT_CODE_POSITION) | \ -+ (((type) & CY_RSLT_TYPE_MASK) << CY_RSLT_TYPE_POSITION)) -+ -+/** \} fields */ -+ -+/** -+* \{ -+* @name Result Types -+* Defines codes to identify the type of result. -+*/ -+ -+/** @brief The result code is informational-only */ - #define CY_RSLT_TYPE_INFO (0U) --/** Warning result */ -+/** @brief The result code is warning of a problem but will proceed */ - #define CY_RSLT_TYPE_WARNING (1U) --/** Error result */ -+/** @brief The result code is an error */ - #define CY_RSLT_TYPE_ERROR (2U) --/** Fatal error result */ -+/** @brief The result code is a fatal error */ - #define CY_RSLT_TYPE_FATAL (3U) - --/** Get the value of the result code field */ --#define CY_RSLT_GET_CODE(x) ( ( (x) >> CY_RSLT_CODE_POSITION ) & CY_RSLT_CODE_MASK ) --/** Get the value of the result type field */ --#define CY_RSLT_GET_TYPE(x) ( ( (x) >> CY_RSLT_TYPE_POSITION ) & CY_RSLT_TYPE_MASK ) --/** Get the value of the module identifier field */ --#define CY_RSLT_GET_MODULE(x) ( ( (x) >> CY_RSLT_MODULE_POSITION ) & CY_RSLT_MODULE_MASK ) -- -+/** \} severity */ - -+/** -+* \{ -+* @name Modules -+* @anchor anchor_modules -+* Defines codes to identify the module from which an error originated. -+* For some large libraries, a range of module codes is defined here; -+* see the library documentation for values corresponding to individual modules. -+* Valid range is 0x0000-0x4000. -+*/ - /**** DRIVER Module codes: 0x0000 - 0x00FF ****/ --/** Base identifier for peripheral driver library */ --#define CY_RSLT_MODULE_DRIVERS_PDL_BASE (0x0000U) --/** Base identifier for peripheral driver library */ --#define CY_RSLT_MODULE_DRIVERS_WHD_BASE (0x0080U) -- --/**** ABSTRACTION Module codes: 0x0100 - 0x01FF ****/ --/** Base identifier for chip support modules */ --#define CY_RSLT_MODULE_ABSTRACTION_HAL_BASE (0x0100U) --/** Base identifier for board support modules */ --#define CY_RSLT_MODULE_ABSTRACTION_BSP (0x0180U) --/** Base identifier for file system modules */ --#define CY_RSLT_MODULE_ABSTRACTION_FS (0x0181U) --/** Base identifier for resource abstraction modules */ --#define CY_RSLT_MODULE_ABSTRACTION_RESOURCE (0x0182U) --/** Base identifier for rtos abstraction modules */ --#define CY_RSLT_MODULE_ABSTRACTION_OS (0x0183U) --/** Base identifier for environment abstraction modules */ --#define CY_RSLT_MODULE_ABSTRACTION_ENV (0x0184U) -- --/**** Middleware Module codes: 0x0200 - 0x02FF ****/ --#define CY_RSLT_MODULE_MIDDLEWARE_BASE (0x0200U) -- -- -- --/** Provides the result of an operation as a structured bitfield */ --typedef uint32_t cy_rslt_t; -- --/** Result value indicating success */ --#define CY_RSLT_SUCCESS ( (cy_rslt_t)0x00000000U ) -- --/** Create a result value from the specified type, module, and result code */ --#define CY_RSLT_CREATE(type, module, code) \ -- ( ( ( (module) & CY_RSLT_MODULE_MASK ) << CY_RSLT_MODULE_POSITION ) | \ -- ( ( (code) & CY_RSLT_CODE_MASK ) << CY_RSLT_CODE_POSITION ) | \ -- ( ( (type) & CY_RSLT_TYPE_MASK ) << CY_RSLT_TYPE_POSITION ) ) -- --/** \} group_result_macros */ -+/** Base module identifier for peripheral driver library drivers (0x0000 - 0x007F) */ -+#define CY_RSLT_MODULE_DRIVERS_PDL_BASE (0x0000U) -+/** Base module identifier for wireless host driver library modules (0x0080 - 0x00FF) */ -+#define CY_RSLT_MODULE_DRIVERS_WHD_BASE (0x0080U) -+ -+/** Deprecated. Use \ref CY_RSLT_MODULE_ABSTRACTION_HAL */ -+#define CY_RSLT_MODULE_ABSTRACTION_HAL_BASE (0x0100U) -+/** Module identifier for the Hardware Abstraction Layer */ -+#define CY_RSLT_MODULE_ABSTRACTION_HAL (0x0100U) -+/** Module identifier for board support package */ -+#define CY_RSLT_MODULE_ABSTRACTION_BSP (0x0180U) -+/** Module identifier for file system abstraction */ -+#define CY_RSLT_MODULE_ABSTRACTION_FS (0x0181U) -+/** Module identifier for resource abstraction */ -+#define CY_RSLT_MODULE_ABSTRACTION_RESOURCE (0x0182U) -+/** Module identifier for rtos abstraction */ -+#define CY_RSLT_MODULE_ABSTRACTION_OS (0x0183U) -+/** Base identifier for environment abstraction modules (0x0184 - 0x01FF) */ -+#define CY_RSLT_MODULE_ABSTRACTION_ENV (0x0184U) -+ -+/** Base module identifier for Board Libraries (0x01A0 - 0x01BF) */ -+#define CY_RSLT_MODULE_BOARD_LIB_BASE (0x01A0U) -+/** Module identifier for the Retarget IO Board Library */ -+#define CY_RSLT_MODULE_BOARD_LIB_RETARGET_IO (0x1A0U) -+/** Module identifier for the RGB LED Board Library */ -+#define CY_RSLT_MODULE_BOARD_LIB_RGB_LED (0x01A1U) -+/** Module identifier for the Serial Flash Board Library */ -+#define CY_RSLT_MODULE_BOARD_LIB_SERIAL_FLASH (0x01A2U) -+/** Module identifier for the WiFi Host Driver + Board Support Integration Library */ -+#define CY_RSLT_MODULE_BOARD_LIB_WHD_INTEGRATION (0x01A3U) -+ -+/** Base module identifier for Shield Board Libraries (0x01B8 - 0x01BF) */ -+#define CY_RSLT_MODULE_BOARD_SHIELD_BASE (0x01B8U) -+/** Module identifier for Shield Board CY8CKIT-028-EPD */ -+#define CY_RSLT_MODULE_BOARD_SHIELD_028_EPD (0x01B8U) -+/** Module identifier for Shield Board CY8CKIT-028-TFT */ -+#define CY_RSLT_MODULE_BOARD_SHIELD_028_TFT (0x01B9U) -+/** Module identifier for Shield Board CY8CKIT-032 */ -+#define CY_RSLT_MODULE_BOARD_SHIELD_032 (0x01BAU) -+ -+/** Base module identifier for Board Hardware Libraries (0x01C0 - 0x01FF) */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_BASE (0x01C0U) -+/** Module identifier for the BMI160 Motion Sensor Library */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_BMI160 (0x01C0U) -+/** Module identifier for the E2271CS021 E-Ink Controller Library */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_E2271CS021 (0x01C1U) -+/** Module identifier for the NTC GPIO Thermistor Library */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_THERMISTOR (0x01C2U) -+/** Module identifier for the SSD1306 OLED Controller Library */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_SSD1306 (0x01C3U) -+/** Module identifier for the ST7789V TFT Controller Library */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_ST7789V (0x01C4U) -+/** Module identifier for the Light Sensor Library */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_LIGHT_SENSOR (0x01C5U) -+/** Module identifier for the AK4954A Audio Codec Library */ -+#define CY_RSLT_MODULE_BOARD_HARDWARE_AK4954A (0x01C6U) -+ -+/** Base module identifier for Middleware Libraries (0x0200 - 0x02FF) */ -+#define CY_RSLT_MODULE_MIDDLEWARE_BASE (0x0200U) -+ -+/** \} modules */ - - #ifdef __cplusplus - } - #endif - --/** \} group_result */ -+#endif /* CY_RESULT_H */ - -+/** \} group_result */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos.h -index b92a800dfd..e19ffc49f7 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos.h -@@ -9,7 +9,7 @@ - * - ******************************************************************************** - * \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation -+* Copyright 2018-2020 Cypress Semiconductor Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -32,15 +32,23 @@ - #include "cy_result.h" - #include - #include -+#include - - /** --* \defgroup group_abstraction_rtos_common Common -+* \defgroup group_abstraction_rtos_common Common -+ * General types and defines for working with the RTOS abstraction layer. - * \defgroup group_abstraction_rtos_mutex Mutex -+ * APIs for acquiring and working with Mutexes. - * \defgroup group_abstraction_rtos_queue Queue -+ * APIs for creating and working with Queues. - * \defgroup group_abstraction_rtos_semaphore Semaphore --* \defgroup group_abstraction_rtos_threads Threading -+ * APIs for acquiring and working with Semaphores. -+* \defgroup group_abstraction_rtos_threads Threads -+ * APIs for creating and working with Threads. - * \defgroup group_abstraction_rtos_time Time -+ * APIs for getting the current time and waiting. - * \defgroup group_abstraction_rtos_timer Timer -+ * APIs for creating and working with Timers. - */ - - #ifdef __cplusplus -@@ -50,10 +58,17 @@ extern "C" - - /*********************************************** CONSTANTS **********************************************/ - --/** -- * \ingroup group_abstraction_rtos_common -- * \{ -- */ -+/** -+ * \ingroup group_abstraction_rtos_common -+ * \{ -+ */ -+ -+#if defined(DOXYGEN) -+//#include "Template/cyabs_rtos_impl.h" -+ -+/** Return value indicating success */ -+#define CY_RSLT_SUCCESS ((cy_rslt_t)0x00000000U) -+#endif - - /** Used with RTOS calls that require a timeout. This implies the call will never timeout. */ - #define CY_RTOS_NEVER_TIMEOUT ( (uint32_t)0xffffffffUL ) -@@ -61,8 +76,8 @@ extern "C" - // - // Note on error strategy. If the error is a normal part of operation (timeouts, full queues, empty - // queues), the these errors are listed here and the abstraction layer implementation must map from the --// underlying errors to these. If the errors are special cases, the the error CY_RTOS_GENERAL_ERROR can be --// returns and cy_rtos_last_error() used to retrieve the RTOS specific error message. -+// underlying errors to these. If the errors are special cases, the the error \ref CY_RTOS_GENERAL_ERROR -+// will be returned and \ref cy_rtos_last_error() can be used to retrieve the RTOS specific error message. - // - /** Requested operation did not complete in the specified time */ - #define CY_RTOS_TIMEOUT CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 0) -@@ -72,15 +87,15 @@ extern "C" - #define CY_RTOS_GENERAL_ERROR CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 2) - /** A bad argument was passed into the APIs */ - #define CY_RTOS_BAD_PARAM CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 5) --/** A memory alignment issue was detected. Ensure memory provided is aligned per CY_RTOS_ALIGNMENT */ -+/** A memory alignment issue was detected. Ensure memory provided is aligned per \ref CY_RTOS_ALIGNMENT_MASK */ - #define CY_RTOS_ALIGNMENT_ERROR CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 6) - - /** \} group_abstraction_rtos_common */ - - /** -- * \ingroup group_abstraction_rtos_queue -- * \{ -- */ -+ * \ingroup group_abstraction_rtos_queue -+ * \{ -+ */ - - /** The Queue is already full and can't accept any more items at this time */ - #define CY_RTOS_QUEUE_FULL CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_OS, 3) -@@ -93,7 +108,7 @@ extern "C" - - /** - * The state a thread can be in -- * -+ * - * \ingroup group_abstraction_rtos_threads - */ - typedef enum cy_thread_state -@@ -108,29 +123,29 @@ typedef enum cy_thread_state - - /** - * The type of timer -- * -+ * - * \ingroup group_abstraction_rtos_timer - */ - typedef enum cy_timer_trigger_type - { - CY_TIMER_TYPE_PERIODIC, /**< called periodically until stopped */ - CY_TIMER_TYPE_ONCE, /**< called once only */ -- cy_timer_type_periodic = CY_TIMER_TYPE_PERIODIC, /**< \deprecated replaced by CY_TIMER_TYPE_PERIODIC */ -- cy_timer_type_once = CY_TIMER_TYPE_ONCE, /**< \deprecated replaced by CY_TIMER_TYPE_ONCE */ --} cy_timer_trigger_type_t ; -+ cy_timer_type_periodic = CY_TIMER_TYPE_PERIODIC, /**< \deprecated replaced by \ref CY_TIMER_TYPE_PERIODIC */ -+ cy_timer_type_once = CY_TIMER_TYPE_ONCE, /**< \deprecated replaced by \ref CY_TIMER_TYPE_ONCE */ -+} cy_timer_trigger_type_t; - - /** - * The type of a function that is the entry point for a thread - * - * @param[in] arg the argument passed from the thread create call to the entry function -- * -+ * - * \ingroup group_abstraction_rtos_threads - */ --typedef void (*cy_thread_entry_fn_t)(cy_thread_arg_t arg) ; -+typedef void (*cy_thread_entry_fn_t)(cy_thread_arg_t arg); - - /** - * The callback function to be called by a timer -- * -+ * - * \ingroup group_abstraction_rtos_timer - */ - typedef void (*cy_timer_callback_t)(cy_timer_callback_arg_t arg); -@@ -142,18 +157,17 @@ typedef void (*cy_timer_callback_t)(cy_timer_callback_arg_t arg); - * results calling convention. The underlying RTOS implementations will not but rather - * will have their own error code conventions. This function is provided as a service - * to the developer, mostly for debugging, and returns the underlying RTOS error code -- * from the last RTOS abstraction layer that returned CY_RTOS_GENERAL_ERROR. -+ * from the last RTOS abstraction layer that returned \ref CY_RTOS_GENERAL_ERROR. - * - * @return RTOS specific error code. -- * -+ * - * \ingroup group_abstraction_rtos_common - */ - cy_rtos_error_t cy_rtos_last_error(); - - /*********************************************** Threads **********************************************/ - --/* -- * -+/** - * \ingroup group_abstraction_rtos_threads - * \{ - */ -@@ -161,15 +175,15 @@ cy_rtos_error_t cy_rtos_last_error(); - /** Create a thread with specific thread argument. - * - * This function is called to startup a new thread. If the thread can exit, it must call -- * cy_rtos_finish_thread() just before doing so. All created threds that can terminate, either -- * by themselves or forcefully by another thread MUST be joined in order to cleanup any resources -- * that might have been allocated for them. -+ * \ref cy_rtos_exit_thread() just before doing so. All created threads that can terminate, either -+ * by themselves or forcefully by another thread MUST have \ref cy_rtos_join_thread() called on them -+ * by another thread in order to cleanup any resources that might have been allocated for them. - * - * @param[out] thread Pointer to a variable which will receive the new thread handle - * @param[in] entry_function Function pointer which points to the main function for the new thread - * @param[in] name String thread name used for a debugger - * @param[in] stack The buffer to use for the thread stack. This must be aligned to -- * CY_RTOS_ALIGNMENT with a size of at least CY_RTOS_MIN_STACK_SIZE. -+ * \ref CY_RTOS_ALIGNMENT_MASK with a size of at least \ref CY_RTOS_MIN_STACK_SIZE. - * If stack is null, cy_rtos_create_thread will allocate a stack from the heap. - * @param[in] stack_size The size of the thread stack in bytes - * @param[in] priority The priority of the thread. Values are operating system specific, but some -@@ -179,12 +193,11 @@ cy_rtos_error_t cy_rtos_last_error(); - * CY_THREAD_PRIORITY_HIGH - * @param[in] arg The argument to pass to the new thread - * -- * @return The status of thread create request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of thread create request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_function, - const char *name, void *stack, uint32_t stack_size, cy_thread_priority_t priority, cy_thread_arg_t arg); - -- - /** Exit the current thread. - * - * This function is called just before a thread exits. In some cases it is sufficient -@@ -193,26 +206,26 @@ cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_ - * where the RTOS must be signaled, this function should perform that In cases operation. - * In code using RTOS services, this function should be placed at any at any location - * where the main thread function will return, exiting the thread. Threads that can -- * exit must still be joined (cy_rtos_join_thread) to ensure their resources are fully -- * cleaned up. -+ * exit must still be joined (\ref cy_rtos_join_thread) to ensure their resources are -+ * fully cleaned up. - * -- * @return The status of thread exit request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of thread exit request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_exit_thread(); - - /** Terminates another thread. - * -- * This function is called to terminate another thread and reap the resoruces claimed -- * by it thread. This should be called both when forcibly terminating another thread -+ * This function is called to terminate another thread and reap the resources claimed -+ * by the thread. This should be called both when forcibly terminating another thread - * as well as any time a thread can exit on its own. For some RTOS implementations -- * this is not required as the thread resoruces are claimed as soon as it exits. In -+ * this is not required as the thread resources are claimed as soon as it exits. In - * other cases, this must be called to reclaim resources. Threads that are terminated -- * must still be joined (cy_rtos_join_thread) to ensure their resources are fully -+ * must still be joined (\ref cy_rtos_join_thread) to ensure their resources are fully - * cleaned up. - * - * @param[in] thread Handle of the thread to terminate - * -- * @returns The status of the thread terminate. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @returns The status of the thread terminate. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_terminate_thread(cy_thread_t *thread); - -@@ -223,19 +236,19 @@ cy_rslt_t cy_rtos_terminate_thread(cy_thread_t *thread); - * - * @param[in] thread Handle of the thread to wait for - * -- * @returns The status of thread join request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @returns The status of thread join request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_join_thread(cy_thread_t *thread); - - /** Checks if the thread is running - * -- * This function is called to determine if a thread is running or not. For information on -- * the thread state, use the cy_rtos_get_thread_state() function. -+ * This function is called to determine if a thread is actively running or not. For information on -+ * the thread state, use the \ref cy_rtos_get_thread_state() function. - * - * @param[in] thread Handle of the terminated thread to delete - * @param[out] running Returns true if the thread is running, otherwise false - * -- * @returns The status of the thread running check. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @returns The status of the thread running check. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_is_thread_running(cy_thread_t *thread, bool *running); - -@@ -246,7 +259,7 @@ cy_rslt_t cy_rtos_is_thread_running(cy_thread_t *thread, bool *running); - * @param[in] thread Handle of the terminated thread to delete - * @param[out] state Returns the state the thread is currently in - * -- * @returns The status of the thread state check. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @returns The status of the thread state check. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_get_thread_state(cy_thread_t *thread, cy_thread_state_t *state); - -@@ -256,7 +269,7 @@ cy_rslt_t cy_rtos_get_thread_state(cy_thread_t *thread, cy_thread_state_t *state - * - * @param[out] thread Handle of the current running thread - * -- * @returns The status of thread join request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @returns The status of thread join request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_get_thread_handle(cy_thread_t *thread); - -@@ -265,20 +278,38 @@ cy_rslt_t cy_rtos_get_thread_handle(cy_thread_t *thread); - /*********************************************** Mutexes **********************************************/ - - /** -- * \ingroup group_abstraction_rtos_mutex -- * \{ -- */ -+ * \ingroup group_abstraction_rtos_mutex -+ * \{ -+ */ - --/** Create a mutex. -+/** Create a recursive mutex. -+ * -+ * Creates a binary mutex which can be used to synchronize between threads -+ * and between threads and ISRs. Created mutexes are recursive and support priority inheritance. - * -- * This is basically a binary mutex which can be used to synchronize between threads -- * and between threads and ISRs. -+ * This function has been replaced by \ref cy_rtos_init_mutex2 which allow for specifying -+ * whether or not the mutex supports recursion or not. - * - * @param[out] mutex Pointer to the mutex handle to be initialized - * -- * @return The status of mutex creation request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of mutex creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ --cy_rslt_t cy_rtos_init_mutex(cy_mutex_t *mutex); -+#define cy_rtos_init_mutex(mutex) cy_rtos_init_mutex2(mutex, true) -+ -+/** Create a mutex which can support recursion or not. -+ * -+ * Creates a binary mutex which can be used to synchronize between threads and between threads and -+ * ISRs. Created mutexes can support priority inheritance if recursive. -+ * -+ * \note Not all RTOS implementations support non-recursive mutexes. In this case a recursive -+ * mutex will be created. -+ * -+ * @param[out] mutex Pointer to the mutex handle to be initialized -+ * @param[in] recursive Should the created mutex support recursion or not -+ * -+ * @return The status of mutex creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] -+ */ -+cy_rslt_t cy_rtos_init_mutex2(cy_mutex_t *mutex, bool recursive); - - /** Get a mutex. - * -@@ -290,22 +321,22 @@ cy_rslt_t cy_rtos_init_mutex(cy_mutex_t *mutex); - * - * @param[in] mutex Pointer to the mutex handle - * @param[in] timeout_ms Maximum number of milliseconds to wait while attempting to get -- * the mutex. Use the NEVER_TIMEOUT constant to wait forever. Must -- * be zero is in_isr is true -+ * the mutex. Use the \ref CY_RTOS_NEVER_TIMEOUT constant to wait forever. -+ * Must be zero if in_isr is true. - * - * @return The status of the get mutex. Returns timeout if mutex was not acquired -- * before timeout_ms period. [CY_RSLT_SUCCESS, CY_RTOS_TIMEOUT] -+ * before timeout_ms period. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_TIMEOUT, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_get_mutex(cy_mutex_t *mutex, cy_time_t timeout_ms); - - /** Set a mutex. - * - * The mutex is released allowing any other threads waiting on the mutex to -- * obtain the sempahore. -+ * obtain the semaphore. - * - * @param[in] mutex Pointer to the mutex handle - * -- * @return The status of the set mutex request. [CY_RSLT_SUCCESS, CY_RTOS_TIMEOUT] -+ * @return The status of the set mutex request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - * - */ - cy_rslt_t cy_rtos_set_mutex(cy_mutex_t *mutex); -@@ -316,7 +347,7 @@ cy_rslt_t cy_rtos_set_mutex(cy_mutex_t *mutex); - * - * @param[in] mutex Pointer to the mutex handle - * -- * @return The status to the delete request. [CY_RSLT_SUCCESS, CY_RTOS_TIMEOUT] -+ * @return The status to the delete request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_deinit_mutex(cy_mutex_t *mutex); - -@@ -325,9 +356,9 @@ cy_rslt_t cy_rtos_deinit_mutex(cy_mutex_t *mutex); - /*********************************************** Semaphores **********************************************/ - - /** -- * \ingroup group_abstraction_rtos_semaphore -- * \{ -- */ -+ * \ingroup group_abstraction_rtos_semaphore -+ * \{ -+ */ - - /** - * Create a semaphore -@@ -336,9 +367,9 @@ cy_rslt_t cy_rtos_deinit_mutex(cy_mutex_t *mutex); - * - * @param[in,out] semaphore Pointer to the semaphore handle to be initialized - * @param[in] maxcount The maximum count for this semaphore -- * @param[in] initcount The initial count for this sempahore -+ * @param[in] initcount The initial count for this semaphore - * -- * @return The status of the sempahore creation. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the semaphore creation. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_init_semaphore(cy_semaphore_t *semaphore, uint32_t maxcount, uint32_t initcount); - -@@ -351,10 +382,10 @@ cy_rslt_t cy_rtos_init_semaphore(cy_semaphore_t *semaphore, uint32_t maxcount, u - * - * @param[in] semaphore Pointer to the semaphore handle - * @param[in] timeout_ms Maximum number of milliseconds to wait while attempting to get -- * the semaphore. Use the NEVER_TIMEOUT constant to wait forever. Must -+ * the semaphore. Use the \ref CY_RTOS_NEVER_TIMEOUT constant to wait forever. Must - * be zero is in_isr is true - * @param[in] in_isr true if we are trying to get the semaphore from with an ISR -- * @return The status of get semaphore operation [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of get semaphore operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_TIMEOUT, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_get_semaphore(cy_semaphore_t *semaphore, cy_time_t timeout_ms, bool in_isr); - -@@ -366,18 +397,29 @@ cy_rslt_t cy_rtos_get_semaphore(cy_semaphore_t *semaphore, cy_time_t timeout_ms, - * @param[in] semaphore Pointer to the semaphore handle - * @param[in] in_isr Value of true indicates calling from interrupt context - * Value of false indicates calling from normal thread context -- * @return The status of set semaphore operation [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of set semaphore operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_set_semaphore(cy_semaphore_t *semaphore, bool in_isr); - - /** -- * Deletes a sempahore -+ * Get the count of a semaphore. - * -- * This function frees the resources associated with a sempahore. -+ * Gets the number of available tokens on the semaphore. -+ * -+ * @param[in] semaphore Pointer to the semaphore handle -+ * @param[out] count Pointer to the return count -+ * @return The status of get semaphore count operation [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] -+ */ -+cy_rslt_t cy_rtos_get_count_semaphore(cy_semaphore_t *semaphore, size_t *count); -+ -+/** -+ * Deletes a semaphore - * -- * @param[in] semaphore Pointer to the sempahore handle -+ * This function frees the resources associated with a semaphore. - * -- * @return The status of semaphore deletion [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @param[in] semaphore Pointer to the semaphore handle -+ * -+ * @return The status of semaphore deletion [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_deinit_semaphore(cy_semaphore_t *semaphore); - -@@ -385,10 +427,10 @@ cy_rslt_t cy_rtos_deinit_semaphore(cy_semaphore_t *semaphore); - - /*********************************************** Events **********************************************/ - --/** -- * \ingroup group_abstraction_rtos_event -- * \{ -- */ -+/** -+ * \ingroup group_abstraction_rtos_event -+ * \{ -+ */ - - /** Create an event. - * -@@ -398,7 +440,7 @@ cy_rslt_t cy_rtos_deinit_semaphore(cy_semaphore_t *semaphore); - * @param[in,out] event Pointer to the event handle to be initialized - * - * @return The status of the event initialization request. -- * [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_init_event(cy_event_t *event); - -@@ -411,7 +453,7 @@ cy_rslt_t cy_rtos_init_event(cy_event_t *event); - * @param[in] bits The value of the 32 bit flags - * @param[in] in_isr If true, this is called from an ISR, otherwise from a thread - * -- * @return The status of the set request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the set request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_setbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ; - -@@ -424,7 +466,7 @@ cy_rslt_t cy_rtos_setbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ; - * @param[in] bits Any bits set in this value, will be cleared in the event. - * @param[in] in_isr if true, this is called from an ISR, otherwise from a thread - * -- * @return The status of the clear flags request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the clear flags request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_clearbits_event(cy_event_t *event, uint32_t bits, bool in_isr) ; - -@@ -435,13 +477,13 @@ cy_rslt_t cy_rtos_clearbits_event(cy_event_t *event, uint32_t bits, bool in_isr) - * @param[in] event Pointer to the event handle - * @param[out] bits pointer to receive the value of the event flags - * -- * @return The status of the get request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the get request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_getbits_event(cy_event_t *event, uint32_t *bits); - - /** Wait for the event and return bits. - * -- * Waits for the event to be set and then returns the bits assocaited -+ * Waits for the event to be set and then returns the bits associated - * with the event, or waits for the given timeout period. - * @note This function returns if any bit in the set is set. - * -@@ -453,7 +495,7 @@ cy_rslt_t cy_rtos_getbits_event(cy_event_t *event, uint32_t *bits); - * if false, any one bit in the initial bits value must be set to return - * @param[in] timeout The amount of time to wait in milliseconds - * -- * @return The status of the wait for event request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the wait for event request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_waitbits_event(cy_event_t *event, uint32_t *bits, bool clear, bool all, cy_time_t timeout); - -@@ -463,7 +505,7 @@ cy_rslt_t cy_rtos_waitbits_event(cy_event_t *event, uint32_t *bits, bool clear, - * - * @param[in] event Pointer to the event handle - * -- * @return The status of the deletion request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the deletion request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_deinit_event(cy_event_t *event); - -@@ -471,10 +513,10 @@ cy_rslt_t cy_rtos_deinit_event(cy_event_t *event); - - /*********************************************** Queues **********************************************/ - --/** -- * \ingroup group_abstraction_rtos_queue -- * \{ -- */ -+/** -+ * \ingroup group_abstraction_rtos_queue -+ * \{ -+ */ - - /** Create a queue. - * -@@ -485,7 +527,7 @@ cy_rslt_t cy_rtos_deinit_event(cy_event_t *event); - * @param[in] length The maximum length of the queue in items - * @param[in] itemsize The size of each item in the queue. - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_init_queue(cy_queue_t *queue, size_t length, size_t itemsize); - -@@ -502,24 +544,24 @@ cy_rslt_t cy_rtos_init_queue(cy_queue_t *queue, size_t length, size_t itemsize); - * @param[in] timeout_ms The time to wait to place the item in the queue - * @param[in] in_isr If true this is being called from within and ISR - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR, CY_RTOS_QUEUE_FULL] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR, \ref CY_RTOS_QUEUE_FULL] - */ - cy_rslt_t cy_rtos_put_queue(cy_queue_t *queue, const void *item_ptr, cy_time_t timeout_ms, bool in_isr); - - /** Gets an item in a queue. - * -- * This function gets an item fropm the queue. The item is copied -+ * This function gets an item from the queue. The item is copied - * out of the queue into the memory provide by item_ptr. This space must be - * large enough to hold a queue entry as defined when the queue was initialized. - * - * @note If in_isr is true, timeout_ms must be zero. - * -- * @param[in] queue Pointer to the queue handle -- * @param[in] item_ptr Pointer to the memory for the item from the queue -- * @param[in] timeout_ms The time to wait to place the item in the queue -- * @param[in] in_isr If true this is being called from within and ISR -+ * @param[in] queue Pointer to the queue handle -+ * @param[in] item_ptr Pointer to the memory for the item from the queue -+ * @param[in] timeout_ms The time to wait to get an item from the queue -+ * @param[in] in_isr If true this is being called from within an ISR - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_NO_MEMORY, CY_RTOS_GENERAL_ERROR, CY_RTOS_QUEUE_EMPTY] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_NO_MEMORY, \ref CY_RTOS_GENERAL_ERROR, \ref CY_RTOS_QUEUE_EMPTY] - */ - cy_rslt_t cy_rtos_get_queue(cy_queue_t *queue, void *item_ptr, cy_time_t timeout_ms, bool in_isr); - -@@ -530,7 +572,7 @@ cy_rslt_t cy_rtos_get_queue(cy_queue_t *queue, void *item_ptr, cy_time_t timeout - * @param[in] queue Pointer to the queue handle - * @param[out] num_waiting Pointer to the return count - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_count_queue(cy_queue_t *queue, size_t *num_waiting); - -@@ -543,7 +585,7 @@ cy_rslt_t cy_rtos_count_queue(cy_queue_t *queue, size_t *num_waiting); - * @param[in] queue Pointer to the queue handle - * @param[out] num_spaces Pointer to the return count. - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_space_queue(cy_queue_t *queue, size_t *num_spaces); - -@@ -553,18 +595,18 @@ cy_rslt_t cy_rtos_space_queue(cy_queue_t *queue, size_t *num_spaces); - * - * @param[in] queue pointer to the queue handle - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_reset_queue(cy_queue_t *queue); - - /** Deinitialize the queue handle. - * -- * This function deinitializes the queue and returns all -+ * This function de-initializes the queue and returns all - * resources used by the queue. - * - * @param[in] queue Pointer to the queue handle - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_deinit_queue(cy_queue_t *queue); - -@@ -573,33 +615,32 @@ cy_rslt_t cy_rtos_deinit_queue(cy_queue_t *queue); - /*********************************************** Timers **********************************************/ - - /** -- * \ingroup group_abstraction_rtos_timer -- * \{ -- */ -+ * \ingroup group_abstraction_rtos_timer -+ * \{ -+ */ - - /** Create a new timer. - * -- * This function intializes a timer object. @note The timer is -- * not active until start is called. -+ * This function initializes a timer object. -+ * @note The timer is not active until start is called. -+ * @note The callback may be (likely will be) called from a different thread. - * -- * @param[out] timer Pointer to the timer handle to initalize -+ * @param[out] timer Pointer to the timer handle to initialize - * @param[in] type Type of timer (periodic or once) -- * @param[in] fun The functiuon -+ * @param[in] fun The function - * @param[in] arg Argument to pass along to the callback function - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_init_timer(cy_timer_t *timer, cy_timer_trigger_type_t type, - cy_timer_callback_t fun, cy_timer_callback_arg_t arg); - - /** Start a timer. -- * -- * @note The callback may be (likely will be) called from a different thread. - * - * @param[in] timer Pointer to the timer handle -- * @param[in] num_ms The number of miliseconds to wait before the timer fires -+ * @param[in] num_ms The number of milliseconds to wait before the timer fires - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_start_timer(cy_timer_t *timer, cy_time_t num_ms); - -@@ -607,7 +648,7 @@ cy_rslt_t cy_rtos_start_timer(cy_timer_t *timer, cy_time_t num_ms); - * - * @param[in] timer Pointer to the timer handle - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_stop_timer(cy_timer_t *timer); - -@@ -616,18 +657,17 @@ cy_rslt_t cy_rtos_stop_timer(cy_timer_t *timer); - * @param[in] timer Pointer to the timer handle - * @param[out] state Return value for state, true if running, false otherwise - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_is_running_timer(cy_timer_t *timer, bool *state); - - /** Deinit the timer. - * -- * This function de initializes the timer and frees all consumed -- * resources. -+ * This function deinitializes the timer and frees all consumed resources. - * - * @param[in] timer Pointer to the timer handle - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_deinit_timer(cy_timer_t *timer); - -@@ -636,9 +676,9 @@ cy_rslt_t cy_rtos_deinit_timer(cy_timer_t *timer); - /*********************************************** Time **********************************************/ - - /** -- * \ingroup group_abstraction_rtos_time -- * \{ -- */ -+ * \ingroup group_abstraction_rtos_time -+ * \{ -+ */ - - /** Gets time in milliseconds since RTOS start. - * -@@ -657,16 +697,15 @@ cy_rslt_t cy_rtos_get_time(cy_time_t *tval); - * the longest period possible which is less than the delay required, - * then makes up the difference with a tight loop. - * -- * @param[in] num_ms The number of miliseconds to delay for -+ * @param[in] num_ms The number of milliseconds to delay for - * -- * @return The status of the creation request. [CY_RSLT_SUCCESS, CY_RTOS_GENERAL_ERROR] -+ * @return The status of the creation request. [\ref CY_RSLT_SUCCESS, \ref CY_RTOS_GENERAL_ERROR] - */ - cy_rslt_t cy_rtos_delay_milliseconds(cy_time_t num_ms); - --/** \} group_abstraction_rtos_timer */ -+/** \} group_abstraction_rtos_time */ - - #ifdef __cplusplus - } /* extern "C" */ - #endif - #endif /* ifndef INCLUDED_CY_RTOS_INTERFACE_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_impl.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_impl.h -index bb0f4767ec..8b36a68844 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_impl.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_impl.h -@@ -6,7 +6,7 @@ - * - ******************************************************************************** - * \copyright --* Copyright 2019 Cypress Semiconductor Corporation -+* Copyright 2019-2020 Cypress Semiconductor Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -37,9 +37,9 @@ extern "C" - /****************************************************** - * Constants - ******************************************************/ --#define CY_RTOS_MIN_STACK_SIZE 300 /** Minimum stack size */ -+#define CY_RTOS_MIN_STACK_SIZE 300 /** Minimum stack size in bytes */ - #define CY_RTOS_ALIGNMENT 0x00000008UL /** Minimum alignment for RTOS objects */ --#define CY_RTOS_ALIGNMENT_MASK 0x00000007UL /** Mask for checking the alignement of crated RTOS objects */ -+#define CY_RTOS_ALIGNMENT_MASK 0x00000007UL /** Mask for checking the alignment of created RTOS objects */ - - - /****************************************************** -@@ -66,7 +66,7 @@ typedef osSemaphoreId_t cy_semaphore_t; /** CMSIS definition of a - typedef osEventFlagsId_t cy_event_t; /** CMSIS definition of an event */ - typedef osMessageQueueId_t cy_queue_t; /** CMSIS definition of a message queue */ - typedef osTimerId_t cy_timer_t; /** CMSIS definition of a timer */ --typedef uint32_t cy_timer_callback_arg_t; /** Argument passed to the timer callback function */ -+typedef void * cy_timer_callback_arg_t; /** Argument passed to the timer callback function */ - typedef uint32_t cy_time_t; /** Time in milliseconds */ - typedef osStatus_t cy_rtos_error_t; /** CMSIS definition of a error status */ - -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c -index 37de65f971..37c70fe5c7 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyabs_rtos_rtxv5.c -@@ -6,7 +6,7 @@ - * - ******************************************************************************** - * \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation -+* Copyright 2018-2020 Cypress Semiconductor Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -23,8 +23,8 @@ - *******************************************************************************/ - - #include --#include --#include "cyabs_rtos.h" -+#include -+#include - - #if defined(__cplusplus) - extern "C" { -@@ -84,6 +84,8 @@ cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_ - - if (thread == NULL || stack_size < CY_RTOS_MIN_STACK_SIZE) - status = CY_RTOS_BAD_PARAM; -+ else if (stack != NULL && (0 != (((uint32_t)stack) & CY_RTOS_ALIGNMENT_MASK))) -+ status = CY_RTOS_ALIGNMENT_ERROR; - else - { - attr.name = name; -@@ -113,10 +115,10 @@ cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_ - status = CY_RTOS_NO_MEMORY; - else - { -- assert(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -- assert(((uint32_t)attr.stack_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -- *thread = osThreadNew((osThreadFunc_t)entry_function, (void *)arg, &attr ); -- assert((*thread == attr.cb_mem) || (*thread == NULL)); -+ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ CY_ASSERT(((uint32_t)attr.stack_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ *thread = osThreadNew((osThreadFunc_t)entry_function, arg, &attr); -+ CY_ASSERT((*thread == attr.cb_mem) || (*thread == NULL)); - status = (*thread == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; - } - } -@@ -126,6 +128,10 @@ cy_rslt_t cy_rtos_create_thread(cy_thread_t *thread, cy_thread_entry_fn_t entry_ - - cy_rslt_t cy_rtos_exit_thread() - { -+ /* This does not have a return statement because the osThreadExit() function -+ * does not return so the return statement would be unreachable and causes a -+ * warning for IAR compiler. -+ */ - osThreadExit(); - } - -@@ -217,12 +223,24 @@ cy_rslt_t cy_rtos_join_thread(cy_thread_t *thread) - return status; - } - -+cy_rslt_t cy_rtos_get_thread_handle(cy_thread_t *thread) -+{ -+ cy_rslt_t status = CY_RSLT_SUCCESS; -+ -+ if (thread == NULL) -+ status = CY_RTOS_BAD_PARAM; -+ else -+ *thread = osThreadGetId(); -+ -+ return status; -+} -+ - - /****************************************************** - * Mutexes - ******************************************************/ - --cy_rslt_t cy_rtos_init_mutex(cy_mutex_t *mutex) -+cy_rslt_t cy_rtos_init_mutex2(cy_mutex_t *mutex, bool recursive) - { - cy_rslt_t status; - osMutexAttr_t attr; -@@ -232,7 +250,11 @@ cy_rslt_t cy_rtos_init_mutex(cy_mutex_t *mutex) - else - { - attr.name = NULL; -- attr.attr_bits = osMutexRecursive | osMutexPrioInherit; -+ attr.attr_bits = osMutexPrioInherit; -+ if (recursive) -+ { -+ attr.attr_bits |= osMutexRecursive; -+ } - attr.cb_mem = malloc(osRtxMutexCbSize); - attr.cb_size = osRtxMutexCbSize; - -@@ -240,9 +262,9 @@ cy_rslt_t cy_rtos_init_mutex(cy_mutex_t *mutex) - status = CY_RTOS_NO_MEMORY; - else - { -- assert(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); - *mutex = osMutexNew(&attr); -- assert((*mutex == attr.cb_mem) || (*mutex == NULL)); -+ CY_ASSERT((*mutex == attr.cb_mem) || (*mutex == NULL)); - status = (*mutex == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; - } - } -@@ -327,9 +349,9 @@ cy_rslt_t cy_rtos_init_semaphore(cy_semaphore_t *semaphore, uint32_t maxcount, u - status = CY_RTOS_NO_MEMORY; - else - { -- assert(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); - *semaphore = osSemaphoreNew(maxcount, initcount, &attr); -- assert((*semaphore == attr.cb_mem) || (*semaphore == NULL)); -+ CY_ASSERT((*semaphore == attr.cb_mem) || (*semaphore == NULL)); - status = (*semaphore == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; - } - } -@@ -375,6 +397,19 @@ cy_rslt_t cy_rtos_set_semaphore(cy_semaphore_t *semaphore, bool in_isr) - return status; - } - -+cy_rslt_t cy_rtos_get_count_semaphore(cy_semaphore_t *semaphore, size_t *count) -+{ -+ cy_rslt_t status; -+ if (semaphore == NULL || count == NULL) -+ status = CY_RTOS_BAD_PARAM; -+ else -+ { -+ *count = osSemaphoreGetCount(*semaphore); -+ status = CY_RSLT_SUCCESS; -+ } -+ return status; -+} -+ - cy_rslt_t cy_rtos_deinit_semaphore(cy_semaphore_t *semaphore) - { - cy_rslt_t status; -@@ -422,9 +457,9 @@ cy_rslt_t cy_rtos_init_event(cy_event_t *event) - status = CY_RTOS_NO_MEMORY; - else - { -- assert(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); - *event = osEventFlagsNew(&attr); -- assert((*event == attr.cb_mem) || (*event == NULL)); -+ CY_ASSERT((*event == attr.cb_mem) || (*event == NULL)); - status = (*event == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; - } - } -@@ -555,10 +590,10 @@ cy_rslt_t cy_rtos_init_queue(cy_queue_t *queue, size_t length, size_t itemsize) - status = CY_RTOS_NO_MEMORY; - else - { -- assert(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -- assert(((uint32_t)attr.mq_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ CY_ASSERT(((uint32_t)attr.mq_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); - *queue = osMessageQueueNew(length, itemsize, &attr); -- assert((*queue == attr.cb_mem) || (*queue == NULL)); -+ CY_ASSERT((*queue == attr.cb_mem) || (*queue == NULL)); - status = (*queue == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; - } - } -@@ -698,9 +733,9 @@ cy_rslt_t cy_rtos_init_timer(cy_timer_t *timer, cy_timer_trigger_type_t type, - ? osTimerPeriodic - : osTimerOnce; - -- assert(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); -+ CY_ASSERT(((uint32_t)attr.cb_mem & CY_RTOS_ALIGNMENT_MASK) == 0UL); - *timer = osTimerNew( (osTimerFunc_t)fun, osTriggerType, (void *)arg, &attr ); -- assert((*timer == attr.cb_mem) || (*timer == NULL)); -+ CY_ASSERT((*timer == attr.cb_mem) || (*timer == NULL)); - status = (*timer == NULL) ? CY_RTOS_GENERAL_ERROR : CY_RSLT_SUCCESS; - } - } -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.cpp b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.cpp -deleted file mode 100644 -index a0fa5ffbc3..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.cpp -+++ /dev/null -@@ -1,83 +0,0 @@ --/* -- * Copyright 2020 Arduino SA -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides the porting layer for STM32 GPIOs on WHD driver -- */ -- --#include "cyhal_gpio.h" --#include "mbed.h" -- --extern pinconfig_t PinConfig[]; -- --static mbed::InterruptIn* oob_irq; --static cyhal_gpio_irq_event_t oob_event = CYHAL_GPIO_IRQ_FALL; --static cyhal_gpio_irq_handler_t oob_handler; --static void* oob_handler_arg; -- --static void cb() { -- oob_handler(oob_handler_arg, oob_event); --} -- --void cyhal_gpio_register_irq(cyhal_gpio_t pin, uint8_t intrPriority, cyhal_gpio_irq_handler_t handler, -- void *handler_arg) --{ -- if (handler && handler_arg && (oob_irq==NULL)) { -- oob_irq = new mbed::InterruptIn(PJ_5); -- oob_handler = handler; -- oob_handler_arg = handler_arg; -- } --} -- --void cyhal_gpio_irq_enable(cyhal_gpio_t pin, cyhal_gpio_irq_event_t event, bool enable) --{ -- oob_event = event; -- if (enable) { -- if (CYHAL_GPIO_IRQ_RISE) { -- oob_irq->rise(cb); -- } -- if (CYHAL_GPIO_IRQ_FALL) { -- oob_irq->fall(cb); -- } -- } else if (oob_irq != NULL) { -- delete oob_irq; -- } --} -- -- --#include -- --cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drvMode, bool initVal) --{ -- cy_rslt_t ret= CY_RSLT_SUCCESS; -- // printf("Port Init %s %d\n",PinConfig[pin].portname, PinConfig[pin].pinnumber); -- -- /* Ignore the parameter and take the pin config directly from a static array defintions */ -- HAL_GPIO_Init(PinConfig[pin].port, &PinConfig[pin].config); -- if (direction == CYHAL_GPIO_DIR_OUTPUT) HAL_GPIO_WritePin(PinConfig[pin].port, PinConfig[pin].config.Pin, (initVal)?GPIO_PIN_SET:GPIO_PIN_RESET); -- //if (direction == CYHAL_GPIO_DIR_OUTPUT) printf("Port %s %s %d\n",(initVal)?"High":"low",PinConfig[pin].portname, PinConfig[pin].pinnumber); -- -- return ret; --} -- -- -- --void cyhal_gpio_write(cyhal_gpio_t pin, bool value) --{ -- /*printf("Port %s %s %d\n",(value)?"High":"low",PinConfig[pin].portname, PinConfig[pin].pinnumber);*/ -- HAL_GPIO_WritePin(PinConfig[pin].port, PinConfig[pin].config.Pin, (value)?GPIO_PIN_SET:GPIO_PIN_RESET); --} -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.h -index c741cab1ab..08d4e5bfb1 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_gpio.h -@@ -2,14 +2,14 @@ - * \file cyhal_gpio.h - * - * \brief --* Provides a high level interface for interacting with the Cypress GPIO. -+* Provides a high level interface for interacting with the GPIO on Cypress devices. - * This interface abstracts out the chip specific details. If any chip specific - * functionality is necessary, or performance is critical the low level functions - * can be used directly. - * - ******************************************************************************** - * \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation -+* Copyright 2018-2020 Cypress Semiconductor Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -26,16 +26,58 @@ - *******************************************************************************/ - - /** -- * \addtogroup group_hal_gpio GPIO (General Purpose Input Output) -- * \ingroup group_hal -- * \{ -- * High level interface for interacting with the Cypress GPIO. -- * -- * \defgroup group_hal_gpio_macros Macros -- * \defgroup group_hal_gpio_functions Functions -- * \defgroup group_hal_gpio_data_structures Data Structures -- * \defgroup group_hal_gpio_enums Enumerated Types -- */ -+* \addtogroup group_hal_gpio GPIO (General Purpose Input Output) -+* \ingroup group_hal -+* \{ -+* High level interface for configuring and interacting with general purpose input/outputs (GPIO). -+* -+* The GPIO driver provides functions to configure and initialize GPIO, and to read and write data to the pin. -+* The driver also supports interrupt generation on GPIO signals with rising, falling or both edges. -+* -+* \note The APIs in this driver need not be used if a GPIO is to be used as an input or output of peripherals like I2C or PWM. -+* The respective peripheral's driver will utilize the GPIO interface to configure and initialize its GPIO pins. -+* -+* \section subsection_gpio_features Features -+* * Configurable GPIO pin direction - \ref cyhal_gpio_direction_t -+* * Configurable GPIO pin drive modes - \ref cyhal_gpio_drive_mode_t -+* * Configurable analog and digital characteristics -+* * Configurable edge-triggered interrupts and callback assignment on GPIO events - \ref cyhal_gpio_event_t -+* -+* \section subsection_gpio_quickstart Quick Start -+* \ref cyhal_gpio_init can be used for a simple GPIO initialization by providing the pin number (pin), pin direction (direction), -+* pin drive mode (drive_mode) and the initial value on the pin (init_val). -+* -+* \section subsection_gpio_sample_snippets Code Snippets -+* -+* \subsection subsection_gpio_snippet_1 Snippet 1: Reading value from GPIO -+* The following snippet initializes GPIO pin \ref P0_0 as an input with high impedance digital drive mode and initial value = false (low). A value is read -+* from the pin and stored to a uint8_t variable (read_val). -+ -+* \snippet gpio.c snippet_cyhal_gpio_read -+ -+* \subsection subsection_gpio_snippet_2 Snippet 2: Writing value to a GPIO -+* The following snippet initializes GPIO pin \ref P0_0 as an output pin with strong drive mode and initial value = false (low). -+* A value = true (high) is written to the output driver. -+ -+* \snippet gpio.c snippet_cyhal_gpio_write -+ -+* \subsection subsection_gpio_snippet_3 Snippet 3: Reconfiguring a GPIO -+* The following snippet shows how to reconfigure a GPIO pin during run-time using the firmware. The GPIO pin \ref P0_0 -+* is first initialized as an output pin with strong drive mode. The pin is then reconfigured as an input with high impedance digital drive mode. -+* \note \ref cyhal_gpio_configure only changes the direction and the drive_mode -+* of the pin. Previously set pin value is retained. -+* -+* \snippet gpio.c snippet_cyhal_gpio_reconfigure -+ -+* \subsection subsection_gpio_snippet_4 Snippet 4: Interrupts on GPIO events -+* GPIO events can be mapped to an interrupt and assigned to a callback function. The callback function needs to be first registered and -+* then the event needs to be enabled. -+** The following snippet initializes GPIO pin \ref P0_0 as an input pin. It registers a callback function and enables detection -+* of a falling edge event to trigger the callback. -+* \note If no argument needs to be passed to the callback function then a NULL can be passed during registering.
-+* -+* \snippet gpio.c snippet_cyhal_gpio_interrupt -+*/ - - #pragma once - -@@ -48,94 +90,77 @@ - extern "C" { - #endif /* __cplusplus */ - -+ - /******************************************************************************* - * Defines - *******************************************************************************/ - --/** -- * \addtogroup group_hal_gpio_macros -- * \{ -- */ -- - /** Integer representation of no connect pin (required to exist in all BSPs) */ --#define CYHAL_NC_PIN_VALUE ( (cyhal_gpio_t)0xFFFFFFFF ) -- --/** \} group_hal_gpio_macros */ -- -- --/** -- * \addtogroup group_hal_gpio_enums -- * \{ -- */ -+#define CYHAL_NC_PIN_VALUE (NC) - - /******************************************************************************* - * Enumerations - *******************************************************************************/ - --/** Pin IRQ events */ --typedef enum --{ -- CYHAL_GPIO_IRQ_NONE = 0, /**< No interrupt */ -- CYHAL_GPIO_IRQ_RISE = 1, /**< Interrupt on rising edge */ -- CYHAL_GPIO_IRQ_FALL = 2, /**< Interrupt on falling edge */ -- CYHAL_GPIO_IRQ_BOTH = 3, /**< Interrupt on both rising and falling edges */ --} cyhal_gpio_irq_event_t; -+/** Pin events */ -+typedef enum { -+ CYHAL_GPIO_IRQ_NONE = 0, /**< No interrupt */ -+ CYHAL_GPIO_IRQ_RISE = 1 << 0, /**< Interrupt on rising edge */ -+ CYHAL_GPIO_IRQ_FALL = 1 << 1, /**< Interrupt on falling edge */ -+ CYHAL_GPIO_IRQ_BOTH = (CYHAL_GPIO_IRQ_RISE | CYHAL_GPIO_IRQ_FALL), /**< Interrupt on both rising and falling edges */ -+} cyhal_gpio_event_t; - - /** Pin direction */ --typedef enum --{ -- CYHAL_GPIO_DIR_INPUT = 0, /**< Input pin */ -- CYHAL_GPIO_DIR_OUTPUT = 1, /**< Output pin */ -- CYHAL_GPIO_DIR_BIDIRECTIONAL = 2, /**< Input and output pin */ -+typedef enum { -+ CYHAL_GPIO_DIR_INPUT, /**< Input pin */ -+ CYHAL_GPIO_DIR_OUTPUT, /**< Output pin */ -+ CYHAL_GPIO_DIR_BIDIRECTIONAL, /**< Input and output pin */ - } cyhal_gpio_direction_t; - - /** Pin drive mode */ --typedef enum --{ -- CYHAL_GPIO_DRIVE_NONE = 0, /**< No drive; Hi-Z */ -- CYHAL_GPIO_DRIVE_ANALOG = 0, /**< Analog Hi-Z */ -- CYHAL_GPIO_DRIVE_PULLUP = 2, /**< Pull-up resistor */ -- CYHAL_GPIO_DRIVE_PULLDOWN = 3, /**< Pull-down resistor */ -- CYHAL_GPIO_DRIVE_OPENDRAINDRIVESLOW = 4, /**< Open-drain, Drives Low */ -- CYHAL_GPIO_DRIVE_OPENDRAINDRIVESHIGH = 5, /**< Open-drain, Drives High */ -- CYHAL_GPIO_DRIVE_STRONG = 6, /**< Strong output */ -- CYHAL_GPIO_DRIVE_PULLUPDOWN = 7, /**< Pull-up and pull-down resistors */ --} cyhal_gpio_drive_mode_t; -- --/** \} group_hal_gpio_enums */ -- - --/** -- * \addtogroup group_hal_gpio_data_structures -- * \{ -+/** \note When the drive_mode of the pin is set to CYHAL_GPIO_DRIVE_PULL_NONE , -+ * it is set to CYHAL_GPIO_DRIVE_STRONG if the direction -+ * of the pin is CYHAL_GPIO_DIR_OUTPUT or CYHAL_GPIO_DIR_BIDIRECTIONAL. -+ * If not, the drive_mode of the pin is set to CYHAL_GPIO_DRIVE_NONE. - */ -+typedef enum { -+ CYHAL_GPIO_DRIVE_NONE, /**< Digital Hi-Z. Input only. Input init value(s): 0 or 1 */ -+ CYHAL_GPIO_DRIVE_ANALOG, /**< Analog Hi-Z. Use only for analog purpose */ -+ CYHAL_GPIO_DRIVE_PULLUP, /**< Pull-up resistor. Input and output. Input init value(s): 1, output value(s): 0 */ -+ CYHAL_GPIO_DRIVE_PULLDOWN, /**< Pull-down resistor. Input and output. Input init value(s): 0, output value(s): 1 */ -+ CYHAL_GPIO_DRIVE_OPENDRAINDRIVESLOW, /**< Open-drain, Drives Low. Input and output. Input init value(s): 1, output value(s): 0 */ -+ CYHAL_GPIO_DRIVE_OPENDRAINDRIVESHIGH, /**< Open-drain, Drives High. Input and output. Input init value(s): 0, output value(s): 1 */ -+ CYHAL_GPIO_DRIVE_STRONG, /**< Strong output. Output only. Output init value(s): 0 or 1 */ -+ CYHAL_GPIO_DRIVE_PULLUPDOWN, /**< Pull-up and pull-down resistors. Input and output. Input init value(s): 0 or 1, output value(s): 0 or 1 */ -+ CYHAL_GPIO_DRIVE_PULL_NONE, /**< No Pull-up or pull-down resistors. Input and output. Input init value(s): 0 or 1, output value(s): 0 or 1 */ -+} cyhal_gpio_drive_mode_t; - - /** GPIO callback function type */ --typedef void (*cyhal_gpio_irq_handler_t)(void *handler_arg, cyhal_gpio_irq_event_t event); -- --/** \} group_hal_gpio_data_structures */ -- -- --/** -- * \addtogroup group_hal_gpio_functions -- * \{ -- */ -+typedef void (*cyhal_gpio_event_callback_t)(void *callback_arg, cyhal_gpio_event_t event); - - /******************************************************************************* - * Functions - *******************************************************************************/ - --/** Initialize the GPIO pin -+/** Initialize the GPIO pin
-+ * See \ref subsection_gpio_snippet_1. - * -- * @param[in] pin The GPIO pin to initialize -- * @param[in] direction The pin direction (input/output) -- * @param[in] drvMode The pin drive mode -- * @param[in] initVal Initial value on the pin -+ * @param[in] pin The GPIO pin to initialize -+ * @param[in] direction The pin direction -+ * @param[in] drive_mode The pin drive mode -+ * @param[in] init_val Initial value on the pin - * - * @return The status of the init request -+ * -+ * Guidance for using gpio drive modes ( \ref cyhal_gpio_drive_mode_t for details). -+ * For default use drive modes: -+ * Input GPIO direction - \ref CYHAL_GPIO_DRIVE_NONE -+ * Output GPIO direction - \ref CYHAL_GPIO_DRIVE_STRONG -+ * Bidirectional GPIO - \ref CYHAL_GPIO_DRIVE_PULLUPDOWN -+ * \warning Don't use \ref CYHAL_GPIO_DRIVE_STRONG for input GPIO direction. It may cause an overcurrent issue. - */ --cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drvMode, -- bool initVal); -+cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drive_mode, bool init_val); - - /** Uninitialize the gpio peripheral and the cyhal_gpio_t object - * -@@ -143,66 +168,80 @@ cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cy - */ - void cyhal_gpio_free(cyhal_gpio_t pin); - --/** Set the pin direction -+/** Configure the GPIO pin
-+ * See \ref subsection_gpio_snippet_3. - * -- * @param[in] pin The pin number -- * @param[in] direction The pin direction to be set -- * @return The status of the dir request -- */ --cy_rslt_t cyhal_gpio_direction(cyhal_gpio_t pin, cyhal_gpio_direction_t direction); -- --/** Set the input pin mode -- * -- * @param[in] pin The GPIO object -- * @param[in] drvMode The pin mode to be set -+ * @param[in] pin The GPIO pin -+ * @param[in] direction The pin direction -+ * @param[in] drive_mode The pin drive mode - * -- * @return The status of the mode request -+ * @return The status of the configure request - */ --cy_rslt_t cyhal_gpio_drivemode(cyhal_gpio_t pin, cyhal_gpio_drive_mode_t drvMode); -+cy_rslt_t cyhal_gpio_configure(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drive_mode); - --/** Set the output value for the pin. This only works for output & in_out pins. -+/** Set the output value for the pin. This only works for output & in_out pins.
-+ * See \ref subsection_gpio_snippet_2. - * - * @param[in] pin The GPIO object - * @param[in] value The value to be set (high = true, low = false) - */ - void cyhal_gpio_write(cyhal_gpio_t pin, bool value); - --/** Read the input value. This only works for input & in_out pins. -+/** Read the input value. This only works for \ref CYHAL_GPIO_DIR_INPUT & \ref CYHAL_GPIO_DIR_BIDIRECTIONAL pins.
-+ * See \ref subsection_gpio_snippet_1. - * - * @param[in] pin The GPIO object - * @return The value of the IO (true = high, false = low) - */ - bool cyhal_gpio_read(cyhal_gpio_t pin); - --/** Toggle the output value -- * -+/** Toggle the output value
-+ * See \ref subsection_gpio_snippet_4. - * @param[in] pin The GPIO object - */ - void cyhal_gpio_toggle(cyhal_gpio_t pin); - --/** Register/clear an interrupt handler for the pin toggle pin IRQ event -+/** Register/clear a callback handler for pin events
- * -- * @param[in] pin The pin number -- * @param[in] intrPriority The NVIC interrupt channel priority -- * @param[in] handler The function to call when the specified event happens. Pass NULL to unregister the handler. -- * @param[in] handler_arg Generic argument that will be provided to the handler when called, can be NULL -+ * This function will be called when one of the events enabled by \ref cyhal_gpio_enable_event occurs. -+ * -+ * See \ref subsection_gpio_snippet_4. -+ * -+ * @param[in] pin The pin number -+ * @param[in] callback The function to call when the specified event happens. Pass NULL to unregister the handler. -+ * @param[in] callback_arg Generic argument that will be provided to the callback when called, can be NULL - */ --void cyhal_gpio_register_irq(cyhal_gpio_t pin, uint8_t intrPriority, cyhal_gpio_irq_handler_t handler, -- void *handler_arg); -+void cyhal_gpio_register_callback(cyhal_gpio_t pin, cyhal_gpio_event_callback_t callback, void *callback_arg); - --/** Enable or Disable the GPIO IRQ -+/** Enable or Disable the specified GPIO event
-+ * -+ * When an enabled event occurs, the function specified by \ref cyhal_gpio_register_callback will be called. - * -- * @param[in] pin The GPIO object -- * @param[in] event The GPIO IRQ event -- * @param[in] enable True to turn on interrupts, False to turn off -+ * See \ref subsection_gpio_snippet_4. -+ * -+ * @param[in] pin The GPIO object -+ * @param[in] event The GPIO event -+ * @param[in] intr_priority The priority for NVIC interrupt events -+ * @param[in] enable True to turn on interrupts, False to turn off - */ --void cyhal_gpio_irq_enable(cyhal_gpio_t pin, cyhal_gpio_irq_event_t event, bool enable); -+void cyhal_gpio_enable_event(cyhal_gpio_t pin, cyhal_gpio_event_t event, uint8_t intr_priority, bool enable); - --/** \} group_hal_gpio_functions */ -+/******************************************************************************* -+* Backward compatibility macro. The following code is DEPRECATED and must -+* not be used in new projects -+*******************************************************************************/ -+/** \cond INTERNAL */ -+#define cyhal_gpio_register_irq(pin, priority, handler, handler_arg) cyhal_gpio_register_callback(pin, handler, handler_arg) -+#define cyhal_gpio_irq_enable(pin, event, enable) cyhal_gpio_enable_event(pin, event, CYHAL_ISR_PRIORITY_DEFAULT, enable) -+typedef cyhal_gpio_event_t cyhal_gpio_irq_event_t; -+/** \endcond */ - - #ifdef __cplusplus - } - #endif /* __cplusplus */ - --/** \} group_hal_gpio */ -+#ifdef CYHAL_GPIO_IMPL_HEADER -+#include CYHAL_GPIO_IMPL_HEADER -+#endif /* CYHAL_GPIO_IMPL_HEADER */ - -+/** \} group_hal_gpio */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_modules.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_modules.h -deleted file mode 100644 -index e95f8e13ab..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_modules.h -+++ /dev/null -@@ -1,86 +0,0 @@ --/***************************************************************************//** --* \file cyhal_modules.h --* --* \brief --* Provides an enum of all HAL modules types that can be used for generating --* custom cy_rslt_t items. --* --******************************************************************************** --* \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation --* SPDX-License-Identifier: Apache-2.0 --* --* Licensed under the Apache License, Version 2.0 (the "License"); --* you may not use this file except in compliance with the License. --* You may obtain a copy of the License at --* --* http://www.apache.org/licenses/LICENSE-2.0 --* --* Unless required by applicable law or agreed to in writing, software --* distributed under the License is distributed on an "AS IS" BASIS, --* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --* See the License for the specific language governing permissions and --* limitations under the License. --*******************************************************************************/ -- --/** -- * \addtogroup group_hal_modules Driver Modules -- * \ingroup group_hal -- * \{ -- * Enum definition for all HAL resource modules. -- * -- * \defgroup group_hal_modules_enums Enumerated Types -- */ -- --#pragma once -- --#include "cy_result.h" -- --#ifdef __cplusplus --extern "C" { --#endif -- -- --/** -- * \addtogroup group_hal_modules_enums -- * \{ -- */ -- --/** Enum to in indicate which module an errors occurred in. */ --enum cyhal_rslt_module_chip --{ -- CYHAL_RSLT_MODULE_CHIP_HWMGR = CY_RSLT_MODULE_ABSTRACTION_HAL_BASE, //!< An error occurred in hardware management module -- CYHAL_RSLT_MODULE_ADC, //!< An error occurred in ADC module -- CYHAL_RSLT_MODULE_COMP, //!< An error occurred in comparator module -- CYHAL_RSLT_MODULE_CRC, //!< An error occurred in crypto CRC module -- CYHAL_RSLT_MODULE_DAC, //!< An error occurred in DAC module -- CYHAL_RSLT_MODULE_DMA, //!< An error occurred in DMA module -- CYHAL_RSLT_MODULE_FLASH, //!< An error occurred in flash module -- CYHAL_RSLT_MODULE_GPIO, //!< An error occurred in GPIO module -- CYHAL_RSLT_MODULE_I2C, //!< An error occurred in I2C module -- CYHAL_RSLT_MODULE_I2S, //!< An error occurred in I2S module -- CYHAL_RSLT_MODULE_INTERCONNECT, //!< An error occurred in Interconnct module -- CYHAL_RSLT_MODULE_OPAMP, //!< An error occurred in OpAmp module -- CYHAL_RSLT_MODULE_PDMPCM, //!< An error occurred in PDM/PCM module -- CYHAL_RSLT_MODULE_PWM, //!< An error occurred in PWM module -- CYHAL_RSLT_MODULE_QSPI, //!< An error occurred in QSPI module -- CYHAL_RSLT_MODULE_RTC, //!< An error occurred in RTC module -- CYHAL_RSLT_MODULE_SDHC, //!< An error occurred in SDHC module -- CYHAL_RSLT_MODULE_SDIO, //!< An error occurred in SDIO module -- CYHAL_RSLT_MODULE_SPI, //!< An error occurred in SPI module -- CYHAL_RSLT_MODULE_SYSTEM, //!< An error occurred in System module -- CYHAL_RSLT_MODULE_TIMER, //!< An error occurred in Timer module -- CYHAL_RSLT_MODULE_TRNG, //!< An error occurred in RNG module -- CYHAL_RSLT_MODULE_UART, //!< An error occurred in UART module -- CYHAL_RSLT_MODULE_USB, //!< An error occurred in USB module -- CYHAL_RSLT_MODULE_WDT, //!< An error occurred in WDT module --}; -- --/** \} group_hal_modules_enums */ -- --#if defined(__cplusplus) --} --#endif /* __cplusplus */ -- --/** \} group_hal_modules */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.c -deleted file mode 100644 -index 101bd09c65..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.c -+++ /dev/null -@@ -1,799 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides the porting layer for STM32 SDIO on WHD driver -- */ -- --#include --#include --#include "whd_thread.h" --#include "bus_protocols/whd_bus_sdio_protocol.h" --#include "cyabs_rtos.h" --#include "cyhal_sdio.h" --static int num=0; -- --#define STM32H753xx -- --#if defined (STM32H753xx) --#define MEMCPY_RX --#define COMMAND_FINISHED_CMD52_TIMEOUT_LOOPS (100000) --#define COMMAND_FINISHED_CMD53_TIMEOUT_LOOPS (100000) --#define SDIO_TX_RX_COMPLETE_TIMEOUT_LOOPS (100000) --//#define SDIO_1_BIT --//#define SLOW_SDIO_CLOCK -- --#else --#define SLOW_SDIO_CLOCK -- --#define COMMAND_FINISHED_CMD52_TIMEOUT_LOOPS (1000) --#define COMMAND_FINISHED_CMD53_TIMEOUT_LOOPS (1000) --#define SDIO_TX_RX_COMPLETE_TIMEOUT_LOOPS (1000) --#endif -- --#if defined(STM32H753xx) --#define SDIO_RESPONSE_SHORT SDMMC_RESPONSE_SHORT --#define SDIO_WAIT_NO SDMMC_WAIT_NO --#define SDIO_CPSM_ENABLE SDMMC_CPSM_ENABLE --#define SDIO_CMDTRANS SDMMC_CMD_CMDTRANS --#define SDIO_FLAG_CMDACT (SDMMC_STA_CPSMACT | SDMMC_STA_DPSMACT) --#define SDIO_TRANSFER_DIR_TO_SDIO SDMMC_TRANSFER_DIR_TO_SDMMC --#define SDIO_TRANSFER_DIR_TO_CARD SDMMC_TRANSFER_DIR_TO_CARD --#define SDIO_TRANSFER_MODE_BLOCK SDMMC_TRANSFER_MODE_BLOCK --#define SDIO_DPSM_ENABLE SDMMC_DPSM_ENABLE --#define SDIO_DPSM_DISABLE SDMMC_DPSM_DISABLE --#define SDIO_DCTRL_SDIOEN SDMMC_DCTRL_SDIOEN /* 1 << 11 */ --#define SDIO_DCTRL_DTMODE_1 SDMMC_DCTRL_DTMODE_1 /* 1<<3 */ --#define SDIO_STA_DTIMEOUT SDMMC_STA_DTIMEOUT --#define SDIO_STA_CTIMEOUT SDMMC_STA_CTIMEOUT --#define SDIO_STA_CCRCFAIL SDMMC_STA_CCRCFAIL --#define SDIO_STA_DCRCFAIL SDMMC_STA_DCRCFAIL --#define SDIO_STA_TXUNDERR SDMMC_STA_TXUNDERR --#define SDIO_STA_RXOVERR SDMMC_STA_RXOVERR --#define SDIO_STA_TXACT SDMMC_STA_CPSMACT --#define SDIO_STA_RXACT SDMMC_STA_DPSMACT --#define SDIO_STA_CMDREND SDMMC_STA_CMDREND --#define SDIO_STA_CMDSENT SDMMC_STA_CMDSENT --#define SDIO_CMD_CMDTRANS SDMMC_CMD_CMDTRANS --#define SDIO SDMMC2 -- --#else --#define SDIO_CMD_CMDTRANS 0 --#endif -- -- --#define SDIO_DMA_TIMEOUT_LOOPS (1000000) --#define BUS_LEVEL_MAX_RETRIES 10 -- --#define SDIO_CMD_5 5 --#define SDIO_CMD_53 53 -- --#define SDIO_STA_STBITERR ((uint32_t)0x00000200) /*!b)?a:b -- -- -- --extern pinconfig_t PinConfig[]; --extern SD_HandleTypeDef hsd; -- -- -- -- --static whd_driver_t whd_handler; --static cyhal_sdio_irq_handler_t sdio_irq_handler; -- --#ifdef MEMCPY_RX --static uint8_t temp_dma_buffer[2048] __attribute__ ((aligned (8)));; --#endif --static uint8_t* user_data; --static uint32_t user_data_size; --static uint8_t* dma_data_source; --static uint32_t dma_transfer_size; --static cyhal_transfer_t current_transfer_direction; -- -- --static cy_semaphore_t sdio_transfer_finished_semaphore; --volatile static uint32_t sdio_transfer_failed=0; --volatile static uint32_t irqstatus=0; --static int current_command=0; -- -- --cy_rslt_t cyhal_sdio_init(cyhal_sdio_t *obj, cyhal_gpio_t cmd, cyhal_gpio_t clk, cyhal_gpio_t data0, cyhal_gpio_t data1, -- cyhal_gpio_t data2, cyhal_gpio_t data3) --{ -- cy_rslt_t ret= CY_RSLT_SUCCESS; -- -- __HAL_RCC_GPIOB_CLK_ENABLE(); -- __HAL_RCC_GPIOC_CLK_ENABLE(); -- __HAL_RCC_GPIOD_CLK_ENABLE(); -- __HAL_RCC_GPIOG_CLK_ENABLE(); -- __HAL_RCC_GPIOJ_CLK_ENABLE(); -- __HAL_RCC_SDMMC2_CLK_ENABLE(); -- -- HAL_GPIO_Init(PinConfig[cmd].port, &PinConfig[cmd].config); -- HAL_GPIO_Init(PinConfig[clk].port, &PinConfig[clk].config); -- HAL_GPIO_Init(PinConfig[data0].port, &PinConfig[data0].config); -- HAL_GPIO_Init(PinConfig[data1].port, &PinConfig[data1].config); -- HAL_GPIO_Init(PinConfig[data2].port, &PinConfig[data2].config); -- HAL_GPIO_Init(PinConfig[data3].port, &PinConfig[data3].config); -- --#if defined(STM32H753xx) -- /* Reset SDIO Block */ -- SDMMC_PowerState_OFF( SDMMC2 ); -- __HAL_RCC_SDMMC2_FORCE_RESET( ); -- __HAL_RCC_SDMMC2_RELEASE_RESET( ); -- -- /* Enable the SDIO Clock */ -- __HAL_RCC_SDMMC2_CLK_ENABLE( ); --#else -- __HAL_RCC_SDIO_CLK_ENABLE(); --#endif -- -- #if !(defined(DUAL_CORE) && defined(CORE_CM4)) -- /* Disable DCache for STM32H7 family */ -- SCB_CleanDCache(); -- SCB_DisableDCache(); -- #endif -- -- //printf("in init: %d\n", sdio_transfer_finished_semaphore); -- -- // Lower speed configuration --#if defined(STM32H753xx) -- -- -- -- SDMMC_InitTypeDef sdio_init_structure; -- -- sdio_init_structure.ClockDiv = SDMMC_INIT_CLK_DIV; -- sdio_init_structure.ClockEdge = SDMMC_CLOCK_EDGE_RISING; -- sdio_init_structure.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; -- sdio_init_structure.BusWide = SDMMC_BUS_WIDE_1B; -- sdio_init_structure.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; -- ret = SDMMC_Init( SDMMC2, sdio_init_structure ); -- ret |= SDMMC_PowerState_ON( SDMMC2 ); -- ret |= SDMMC_SetSDMMCReadWaitMode( SDMMC2, SDMMC_READ_WAIT_MODE_CLK ); -- if ( ret ) -- { -- return ret; -- } -- -- /* Clear all SDIO interrupts */ -- SDMMC2->ICR = (uint32_t) 0xffffffff; -- -- /* Turn on SDIO IRQ */ -- /* Must be lower priority than the value of configMAX_SYSCALL_INTERRUPT_PRIORITY */ -- /* otherwise FreeRTOS will not be able to mask the interrupt */ -- /* keep in mind that ARMCM7 interrupt priority logic is inverted, the highest value */ -- /* is the lowest priority */ -- HAL_NVIC_EnableIRQ( (IRQn_Type) SDMMC2_IRQn ); -- HAL_NVIC_SetPriority(SDMMC2_IRQn, 5, 0); -- -- //printf("after enable sdio: %d\n", sdio_transfer_finished_semaphore); -- -- --#else -- hsd.Instance = SDIO; -- hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; -- hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; -- hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; -- hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_ENABLE; -- hsd.Init.BusWide = SDIO_BUS_WIDE_1B; -- hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; -- hsd.Init.ClockDiv = 120; /* 48Khz/ 120 = 400 Khz */ -- -- -- /* Initialize SDIO peripheral interface with default configuration */ -- SDIO_Init(hsd.Instance, hsd.Init); -- -- /* Disable SDIO Clock */ -- __HAL_SD_DISABLE(&hsd); -- -- /* Set Power State to ON */ -- SDIO_PowerState_ON(hsd.Instance); -- -- *(__IO uint32_t *) DCTRL_RWMOD_BB = ((uint32_t)0x00000001); -- -- /* Enable SDIO Clock */ -- __HAL_SD_ENABLE(&hsd); -- -- /* Required power up waiting time before starting the SD initialization sequence */ -- HAL_Delay(2U); -- -- /* Turn on SDIO IRQ */ -- SDIO->ICR = (uint32_t) 0xffffffff; -- -- /* Must be lower priority than the value of configMAX_SYSCALL_INTERRUPT_PRIORITY */ -- /* otherwise FreeRTOS will not be able to mask the interrupt */ -- /* keep in mind that ARMCM3 interrupt priority logic is inverted, the highest value */ -- /* is the lowest priority */ -- NVIC_EnableIRQ( ( IRQn_Type ) SDIO_IRQn ); -- NVIC_EnableIRQ( ( IRQn_Type ) DMA2_Stream3_IRQn ); -- -- HAL_NVIC_SetPriority(SDIO_IRQn, 5, 0); -- HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 5, 0); --#endif -- -- if (cy_rtos_init_semaphore(&sdio_transfer_finished_semaphore, 1, 0) != WHD_SUCCESS) -- { -- cy_rtos_deinit_semaphore(&sdio_transfer_finished_semaphore); -- return -1; -- } -- -- //printf("cy_rtos_init_semaphore: %d\n", sdio_transfer_finished_semaphore); -- -- return CY_RSLT_SUCCESS; --} -- -- --//uint32_t SDMMC_GetCmdResp1(SDIO_TypeDef *SDIOx, uint8_t SD_CMD, uint32_t Timeout); --cy_rslt_t cyhal_sdio_send_cmd(const cyhal_sdio_t *obj, cyhal_transfer_t direction, cyhal_sdio_command_t command, -- uint32_t argument, uint32_t *response) -- --{ -- uint32_t loop_count = 0; -- cy_rslt_t result; -- uint16_t attempts = 0; -- uint32_t temp_sta; -- if ( response != NULL ) -- { -- *response = 0; -- } -- current_command = 0; -- //platform_mcu_powersave_disable(); -- -- /* Ensure the bus isn't stuck half way through transfer */ -- //DMA2_Stream3->CR = 0; -- //PRINTF("power %lx\nclockcr %lx\n",SDIO->POWER,SDIO->CLKCR); -- --restart: -- SDIO->ICR = (uint32_t) 0xFFFFFFFF; -- ++attempts; -- -- /* Check if we've tried too many times */ -- if (attempts >= (uint16_t) BUS_LEVEL_MAX_RETRIES) -- { -- /* WWD_SDIO_RETRIES_EXCEEDED */ -- result = -1; -- goto exit; -- } -- -- -- /* Send the command */ -- SDIO->ARG = argument; -- SDIO->CMD = (uint32_t) ( command | SDIO_RESPONSE_SHORT | SDIO_WAIT_NO | SDIO_CPSM_ENABLE ); -- loop_count = (uint32_t) COMMAND_FINISHED_CMD52_TIMEOUT_LOOPS; -- do -- { -- temp_sta = SDIO->STA; -- loop_count--; -- if ( loop_count == 0 || (( response != NULL) && (( temp_sta & SDIO_ERROR_MASK ) != 0)) ) -- { -- WPRINT_MACRO( ("Restart single access loop count %ld stat %lx\n",loop_count,temp_sta) ); -- HAL_Delay(10U); -- goto restart; -- } -- } while ( ( temp_sta & SDIO_FLAG_CMDACT ) != 0); -- --#if defined(STM32F412xG) -- /* Errata */ -- if (command == SDIO_CMD_5) -- SDIO->ICR = SDIO_ICR_CCRCFAILC; --#endif -- -- if ( response != NULL ) -- { -- *response = SDIO->RESP1; -- } -- result = CY_RSLT_SUCCESS; -- --exit: -- -- if (result) -- { -- WPRINT_MACRO( ("SDIO->POWER %lx \n",SDIO->POWER) ); -- WPRINT_MACRO( ("SDIO->CLKCR %lx \n",SDIO->CLKCR) ); -- WPRINT_MACRO( ("result %lx \n", result) ); -- WPRINT_MACRO( ("cyhal_sdio_send_cmd %s\n",(result==0)? "Passed":"Failed") ); -- //while(1); -- } -- // platform_mcu_powersave_enable(); --#if !defined(STM32F412xG) && !defined(STM32H753xx) -- SDIO->MASK = SDIO_MASK_SDIOITIE; --#endif --#if defined(STM32H753xx) -- SDMMC2->CMD = 0; --#endif -- -- //PRINTF("%d %s cmd 0x%x arg 0x%x resp 0x%x\n",num++,(direction!=CYHAL_READ)?"Write":"Read",command,argument,(response)?*response:0); -- return result; --} -- -- -- --#if defined(STM32H753xx) --cy_rslt_t sdio_enable_high_speed(void) { -- SDMMC_InitTypeDef sdio_init_structure; -- --#ifdef SLOW_SDIO_CLOCK -- sdio_init_structure.ClockDiv = (uint8_t) 10; /* 10 = 10 MHz if SDIO clock = 200MHz */ --#else -- sdio_init_structure.ClockDiv = SDMMC_HSpeed_CLK_DIV; --#endif -- sdio_init_structure.ClockEdge = SDMMC_CLOCK_EDGE_RISING; -- sdio_init_structure.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; --#ifndef SDIO_1_BIT -- sdio_init_structure.BusWide = SDMMC_BUS_WIDE_4B; --#else -- sdio_init_structure.BusWide = SDMMC_BUS_WIDE_1B; --#endif -- sdio_init_structure.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE; -- -- SDMMC_Init( SDMMC2, sdio_init_structure ); -- return CY_RSLT_SUCCESS; --} --#else -- --cy_rslt_t sdio_enable_high_speed(void) { -- -- hsd.Instance = SDIO; -- hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; -- hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; -- hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; -- --#ifndef SDIO_1_BIT -- hsd.Init.BusWide = SDIO_BUS_WIDE_4B; --#else -- hsd.Init.BusWide = SDIO_BUS_WIDE_1B; --#endif -- hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; -- --#ifdef SLOW_SDIO_CLOCK -- hsd.Init.ClockDiv = 1; //30OK , 15 failed ? 48Mhz / 120 < 400 Khz --#else -- hsd.Init.ClockDiv = 0; //48Khz / 120 < 400 Khz --#endif -- -- /* Initialize SDIO peripheral interface with new configuration */ -- SDIO_Init(hsd.Instance, hsd.Init); -- -- /* Set Power State to ON */ -- SDIO_PowerState_ON(hsd.Instance); -- -- *(__IO uint32_t *) DCTRL_RWMOD_BB = ((uint32_t)0x00000001); -- -- /* Enable SDIO Clock */ -- __HAL_SD_ENABLE(&hsd); -- __SDIO_DMA_ENABLE(&hsd) ; -- return CY_RSLT_SUCCESS; --} --#endif -- --static uint32_t find_optimal_block_size(uint32_t data_size ) --{ -- if ( data_size > (uint32_t) 256 ) -- return 512; -- if ( data_size > (uint32_t) 128 ) -- return 256; -- if ( data_size > (uint32_t) 64 ) -- return 128; -- if ( data_size > (uint32_t) 32 ) -- return 64; -- if ( data_size > (uint32_t) 16 ) -- return 32; -- if ( data_size > (uint32_t) 8 ) -- return 16; -- if ( data_size > (uint32_t) 4 ) -- return 8; -- if ( data_size > (uint32_t) 2 ) -- return 4; -- -- return 4; --} -- -- -- -- --static uint32_t sdio_get_blocksize(uint32_t blocksize) --{ -- uint32_t n=0; -- blocksize>>=1; -- while(blocksize) -- { -- n++; -- blocksize>>=1; -- } -- n<<=4; -- return n; --} -- uint32_t dctrl; -- --static void sdio_prepare_data_transfer( cyhal_transfer_t direction, uint32_t block_size, uint8_t* data, uint16_t data_size ) --{ -- /* Setup a single transfer using the temp buffer */ -- user_data = data; -- user_data_size = data_size; -- dma_transfer_size = (uint32_t) ( ( ( data_size + (uint16_t) block_size - 1 ) / (uint16_t) block_size ) * (uint16_t) block_size ); -- -- if ( direction == CYHAL_WRITE ) -- { --#if defined (STM32H753xx) -- #if !(defined(DUAL_CORE) && defined(CORE_CM4)) -- //SCB_CleanDCache_by_Addr ((uint32_t *)data, data_size+32); -- SCB_CleanDCache_by_Addr ((uint32_t *)dma_data_source, data_size+32); -- #endif --#endif -- #ifdef MEMCPY_RX -- memcpy(temp_dma_buffer, data, data_size); -- dma_data_source = temp_dma_buffer; -- #else -- dma_data_source = data; -- #endif -- } -- else -- { --#ifdef MEMCPY_RX -- dma_data_source = (uint8_t*)temp_dma_buffer; --#else -- dma_data_source = data; --#endif -- //VIKR -- //memset(dma_data_source,0x12,data_size); -- --#if !(defined(DUAL_CORE) && defined(CORE_CM4)) -- /* Cache-Invalidate the output from DMA */ -- //SCB_InvalidateDCache_by_Addr((uint32_t *)dma_data_source , data_size+32); -- SCB_CleanDCache_by_Addr ((uint32_t *)dma_data_source, data_size+32); --#endif -- } -- -- SDIO->DTIMER = (uint32_t) 0xFFFFFFFF; -- SDIO->DLEN = dma_transfer_size; --#if defined (STM32H753xx) -- dctrl= sdio_get_blocksize(block_size) | ((direction==CYHAL_READ)? SDIO_TRANSFER_DIR_TO_SDIO:SDIO_TRANSFER_DIR_TO_CARD) | SDIO_TRANSFER_MODE_BLOCK | SDIO_DPSM_DISABLE | SDIO_DCTRL_SDIOEN; -- SDIO->DCTRL = dctrl; --#else -- SDIO->DCTRL = sdio_get_blocksize(block_size) | ((direction==CYHAL_READ)? SDIO_TRANSFER_DIR_TO_SDIO:SDIO_TRANSFER_DIR_TO_CARD) | SDIO_TRANSFER_MODE_BLOCK | SDIO_DPSM_ENABLE | SDIO_DCTRL_DTMODE_1 | SDIO_DCTRL_SDIOEN; --#endif -- --#if defined (STM32H753xx) -- SDMMC2->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; -- SDMMC2->IDMABASE0 = (uint32_t) dma_data_source; --#else -- /* DMA2 Stream3 */ -- DMA2_Stream3->CR = 0; -- DMA2->LIFCR = (uint32_t) ( 0x3F << 22 ); -- DMA2_Stream3->FCR = (uint32_t) ( 0x00000021 | DMA_FIFOMODE_ENABLE | DMA_FIFO_THRESHOLD_FULL ); -- DMA2_Stream3->PAR = (uint32_t) &SDIO->FIFO; -- DMA2_Stream3->M0AR = (uint32_t) dma_data_source; -- DMA2_Stream3->NDTR = dma_transfer_size/4; --#endif --} -- -- --void sdio_enable_bus_irq( void ) --{ --#if defined(STM32F412xG) -- SDIO->MASK = SDIO_MASK_CMDRENDIE | SDIO_MASK_CMDSENTIE; --#elif defined (STM32H753xx) -- SDMMC2->MASK = SDMMC_IT_RXOVERR | SDMMC_IT_TXUNDERR | SDMMC_IT_DATAEND | SDMMC_IT_CMDREND | SDMMC_IT_CMDSENT; --#else -- SDIO->MASK = SDIO_MASK_SDIOITIE | SDIO_MASK_CMDRENDIE | SDIO_MASK_CMDSENTIE; --#endif -- --} -- --static volatile bool sdio_transfer_finished_var; -- --cy_rslt_t cyhal_sdio_bulk_transfer(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, -- const uint32_t *data, uint16_t length, uint32_t *response) -- --{ -- cy_rslt_t result; -- -- uint32_t loop_count = 0; -- uint16_t attempts = 0; -- uint32_t block_size=64; -- sdio_cmd_argument_t arg; -- uint32_t cmd; -- current_command = SDIO_CMD_53; -- current_transfer_direction = direction; -- arg.value = argument; -- sdio_enable_bus_irq(); -- if ( response != NULL ) -- { -- *response = 0; -- } -- -- /* Ensure the bus isn't stuck half way through transfer */ -- // DMA2_Stream3->CR = 0; -- --restart: -- -- sdio_transfer_failed=0; -- SDMMC2->ICR = (uint32_t) 0xFFFFFFFF; -- ++attempts; -- -- /* Check if we've tried too many times */ -- if (attempts >= (uint16_t) BUS_LEVEL_MAX_RETRIES) -- { -- /* WWD_SDIO_RETRIES_EXCEEDED */ -- WPRINT_MACRO(("Too much attempt\n")); -- result = -1; -- goto exit; -- } -- -- /* Dodgy STM32 hack to set the CMD53 byte mode size to be the same as the block size */ -- if ( arg.cmd53.block_mode == 0 ) -- { -- block_size = find_optimal_block_size( arg.cmd53.count ); -- if ( block_size < SDIO_512B_BLOCK ) -- { -- arg.cmd53.count = block_size; -- } -- else -- { -- arg.cmd53.count = 0; -- } -- argument = arg.value; -- } -- -- SDMMC2->CMD |= SDMMC_CMD_CMDTRANS; -- -- /* Prepare the SDIO for a data transfer */ -- sdio_prepare_data_transfer( direction, block_size, (uint8_t*) data, (uint32_t) length ); -- -- sdio_transfer_finished_var = false; -- -- /* Send the command */ -- //PRINTF("%d bs=%d argument=%x\n",num++,block_size,argument); -- SDMMC2->ARG = argument; -- cmd = (uint32_t) ( SDIO_CMD_53 | SDMMC_RESPONSE_SHORT | SDMMC_WAIT_NO | SDMMC_CPSM_ENABLE | SDMMC_CMD_CMDTRANS ); -- SDMMC2->CMD = cmd; -- /* Wait for the whole transfer to complete */ -- -- //printf("cy_rtos_get_semaphore: %d\n", sdio_transfer_finished_semaphore); -- --#if 0 -- uint32_t start = HAL_GetTick(); -- result = CY_RSLT_SUCCESS; -- while (sdio_transfer_finished_var == false && ((HAL_GetTick() - start) < 50)) { -- -- } -- if ((HAL_GetTick() - start) >= 50) { -- result = -1; -- } --#else -- result = cy_rtos_get_semaphore(&sdio_transfer_finished_semaphore, 50, WHD_FALSE); --#endif -- if ( result != CY_RSLT_SUCCESS ) -- { -- WPRINT_MACRO(("failed getting semaphore\n")); -- goto exit; -- } -- if ( sdio_transfer_failed ) -- { -- WPRINT_MACRO( ("try again sdio_transfer_failed %x irq %x\n",sdio_transfer_failed,irqstatus) ); -- goto restart; -- } -- /* Check if there were any SDIO errors */ -- if ( ( SDIO->STA & ( SDIO_STA_DTIMEOUT | SDIO_STA_CTIMEOUT ) ) != 0 ) -- { -- WPRINT_MACRO(("sdio errors SDIO_STA_DTIMEOUT | SDIO_STA_CTIMEOUT\n")); -- goto restart; -- } -- else if ( ( ( SDIO->STA & ( SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVERR ) ) != 0 ) ) -- { -- WPRINT_MACRO(("sdio errors SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVER \n")); -- goto restart; -- } -- --#if 0 -- /* Wait till complete */ -- loop_count = (uint32_t) SDIO_TX_RX_COMPLETE_TIMEOUT_LOOPS*1000; -- do -- { -- loop_count--; -- if ( loop_count == 0 || ( ( SDIO->STA & SDIO_ERROR_MASK ) != 0 ) ) -- { -- PRINTF("sdio errors SDIO->STA & SDIO_ERROR_MASK or TO , loopct=%d \n",loop_count); -- goto restart; -- } -- } while ( ( SDIO->STA & ( SDIO_STA_TXACT | SDIO_STA_RXACT ) ) != 0 ); --#endif -- --#ifdef MEMCPY_RX -- if ( direction == CYHAL_READ ) -- { -- memcpy( user_data, dma_data_source, (size_t) user_data_size ); -- } --#endif -- -- if ( response != NULL ) -- { -- *response = SDIO->RESP1; -- } -- result = CY_RSLT_SUCCESS; -- --exit: --#if !defined(STM32F412xG) && !defined(STM32H753xx) -- SDIO->MASK = SDIO_MASK_SDIOITIE; --#endif -- --#if defined(STM32H753xx) -- SDMMC2->CMD = 0; --#endif -- -- //HAL_Delay(30); -- if (0) { //(direction==CYHAL_READ) { -- WPRINT_MACRO(("%d %s cmd 53 argument %lx datasize %d blocknumber 0x%x cmdis %lx %lu dctrl = %x\n",num++,(direction!=CYHAL_READ)?"Write":"Read",argument,length,arg.cmd53.count,cmd,cmd,dctrl)); -- } -- return result; --} -- -- --void cyhal_sdio_register_irq(cyhal_sdio_t *obj, cyhal_sdio_irq_handler_t handler, void *handler_arg) --{ -- whd_handler = (whd_driver_t)handler_arg; -- sdio_irq_handler = handler; --} -- --void cyhal_sdio_irq_enable(cyhal_sdio_t *obj, cyhal_sdio_irq_event_t event, bool enable) --{ -- --} -- --#if defined (STM32H753xx) --void SDMMC2_IRQHandler(void ) --{ -- uint32_t intstatus = SDIO->STA; -- // WWD_BUS_STATS_INCREMENT_VARIABLE( sdio_intrs ); -- -- irqstatus = intstatus; --//VIKR | SDIO_STA_STBITERR ) -- if ( ( intstatus & ( SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVERR )) != 0 ) -- { -- //WWD_BUS_STATS_INCREMENT_VARIABLE( error_intrs ); -- //printf("sdio error flagged\n"); -- sdio_transfer_failed = intstatus; -- SDIO->ICR = (uint32_t) 0xffffffff; -- cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -- //sdio_transfer_finished_var = true; -- } -- else -- { -- if ((intstatus & (SDMMC_STA_CMDREND | SDMMC_STA_CMDSENT)) != 0) -- { -- if ( ( SDMMC2->RESP1 & 0x800 ) != 0 ) -- { -- sdio_transfer_failed = irqstatus; -- //sdio_transfer_finished_var = true; -- cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -- } -- -- /* Clear all command/response interrupts */ -- SDMMC2->ICR = (SDMMC_STA_CMDREND | SDMMC_STA_CMDSENT); -- } -- -- /* Check whether the external interrupt was triggered */ -- if (intstatus & SDMMC_STA_SDIOIT) -- { -- /* Clear the interrupt */ -- SDMMC2->ICR = SDMMC_STA_SDIOIT; -- /* Mask interrupt, to be unmasked later by WICED WWD thread */ -- //SDMMC1->MASK &= ~(SDMMC_MASK_SDIOITIE);//VIKR (SDMMC_ICR_SDIOITC); -- /* Inform WICED WWD thread */ -- // whd_thread_notify_irq(whd_handler); -- sdio_irq_handler(whd_handler, CYHAL_SDIO_CARD_INTERRUPT); -- //cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -- } -- -- if (intstatus & SDMMC_STA_DATAEND) -- { -- SDMMC2->ICR = SDMMC_STA_DATAEND; -- SDMMC2->DLEN = 0; -- SDMMC2->DCTRL = SDMMC_DCTRL_SDIOEN; -- SDMMC2->IDMACTRL = SDMMC_DISABLE_IDMA; -- SDMMC2->CMD = 0; -- //sdio_transfer_finished_var = true; -- cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -- } -- } --} --#else --void sdio_irq(void ) --{ -- uint32_t intstatus = SDIO->STA; -- // WWD_BUS_STATS_INCREMENT_VARIABLE( sdio_intrs ); --#if defined(STM32F412xG) -- if (current_command == SDIO_CMD_5) -- SDIO->ICR = SDIO_ICR_CCRCFAILC; --#endif -- -- irqstatus = intstatus; -- -- if ( ( intstatus & ( SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVERR | SDIO_STA_STBITERR )) != 0 ) -- { -- //WWD_BUS_STATS_INCREMENT_VARIABLE( error_intrs ); -- //wiced_assert("sdio error flagged",0); -- sdio_transfer_failed = intstatus; -- SDIO->ICR = (uint32_t) 0xffffffff; -- cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -- } -- else -- { -- if ((intstatus & (SDIO_STA_CMDREND | SDIO_STA_CMDSENT)) != 0) -- { -- if ( ( SDIO->RESP1 & 0x800 ) != 0 ) -- { -- sdio_transfer_failed = irqstatus; -- cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -- } -- else if (current_command == SDIO_CMD_53) -- { -- if (current_transfer_direction == CYHAL_WRITE) -- { -- DMA2_Stream3->CR = DMA_MEMORY_TO_PERIPH | -- DMA_CHANNEL_4 | DMA_PINC_DISABLE | DMA_MINC_ENABLE | -- DMA_PDATAALIGN_WORD | DMA_MDATAALIGN_WORD | -- DMA_NORMAL | DMA_PRIORITY_VERY_HIGH | -- DMA_MBURST_INC4 | DMA_PBURST_INC4 | DMA_SxCR_PFCTRL | DMA_SxCR_EN | DMA_SxCR_TCIE; -- } -- else -- { -- DMA2_Stream3->CR = DMA_PERIPH_TO_MEMORY | -- DMA_CHANNEL_4 | DMA_PINC_DISABLE | DMA_MINC_ENABLE | -- DMA_PDATAALIGN_WORD | DMA_MDATAALIGN_WORD | -- DMA_NORMAL | DMA_PRIORITY_VERY_HIGH | -- DMA_MBURST_INC4 | DMA_PBURST_INC4 | DMA_SxCR_PFCTRL | DMA_SxCR_EN | DMA_SxCR_TCIE; -- } -- } -- -- /* Clear all command/response interrupts */ -- SDIO->ICR = (SDIO_STA_CMDREND | SDIO_STA_CMDSENT); -- } -- -- /* Check whether the external interrupt was triggered */ -- if ( ( intstatus & SDIO_STA_SDIOIT ) != 0 ) -- { -- /* Clear the interrupt and then inform WICED thread */ -- SDIO->ICR = SDIO_ICR_SDIOITC; -- whd_thread_notify_irq(whd_handler); -- } -- } --} --#endif -- --void sdio_dma_irq(void) --{ -- /* Clear interrupt */ -- DMA2->LIFCR = (uint32_t) (0x3F << 22); -- cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); --} -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.h -index 7e07a1ed72..d5600efd99 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_sdio.h -@@ -9,7 +9,7 @@ - * - ******************************************************************************** - * \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation -+* Copyright 2018-2020 Cypress Semiconductor Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -26,16 +26,58 @@ - *******************************************************************************/ - - /** -- * \addtogroup group_hal_sdio SDIO (Secure Digital Input Output) -- * \ingroup group_hal -- * \{ -- * High level interface for interacting with the Cypress SDIO interface. -- * -- * \defgroup group_hal_sdio_macros Macros -- * \defgroup group_hal_sdio_functions Functions -- * \defgroup group_hal_sdio_data_structures Data Structures -- * \defgroup group_hal_sdio_enums Enumerated Types -- */ -+* \addtogroup group_hal_sdio SDIO (Secure Digital Input Output) -+* \ingroup group_hal -+* \{ -+* High level interface to the Secure Digital Input Output (SDIO). -+* -+* This driver allows commands to be sent over the SDIO bus; the supported commands -+* can be found in \ref cyhal_sdio_command_t. Bulk data transfer is also supported -+* via cyhal_sdio_bulk_transfer(). -+* -+* The SDIO protocol is an extension of the SD -+* interface for general I/O functions. Refer to the SD Specifications Part 1 SDIO -+* Specifications Version 4.10 for more information on the SDIO protocol and specifications. -+* -+* -+* \section subsection_sdio_features Features -+* * Supports 4-bit interface -+* * Supports Ultra High Speed (UHS-I) mode -+* * Supports Default Speed (DS), High Speed (HS), SDR12, SDR25 and SDR50 speed modes -+* * Supports SDIO card interrupts in both 1-bit and 4-bit modes -+* * Supports Standard capacity (SDSC), High capacity (SDHC) and Extended capacity (SDXC) memory -+* -+* \section subsection_sdio_quickstart Quick Start -+* -+* \ref cyhal_sdio_init initializes the SDIO peripheral and passes a pointer to the SDIO block through the **obj** object of type \ref cyhal_sdio_t. -+* -+* \section subsection_sdio_code_snippets Code Snippets -+* -+* \subsection subsection_sdio_use_case_1 Snippet1: Simple SDIO Initialization example -+* The following snippet shows how to initialize the SDIO interface with a pre-defined configuration -+* -+* \snippet sdio.c snippet_cyhal_sdio_simple_init -+* -+* \subsection subsection_sdio_use_case_2 Snippet2: Configure Interrupt -+* The following snippet shows how to configure an interrupt and handle specific events. Refer \ref cyhal_sdio_event_t for different types of events. -+* -+* \snippet sdio.c snippet_cyhal_sdio_interrupt_callback -+* -+* \subsection subsection_sdio_use_case_3 Snippet3: Sending Commands -+* The following snippet shows how to send a particular command. Some steps of the card initialization have been provided for reference. Refer \ref cyhal_sdio_command_t for different commands. -+* -+* \snippet sdio.c snippet_cyhal_sdio_send_command -+* -+* \subsection subsection_sdio_use_case_4 Snippet4: Bulk Data Transfer -+* The following snippet shows how to start a bulk data transfer. -+* -+* \snippet sdio.c snippet_cyhal_sdio_bulk_transfer -+* -+* \subsection subsection_sdio_use_case_5 Snippet5: Async Data Transfer -+* -+* The following snippet shows how to start an async data transfer. -+* \snippet sdio.c snippet_cyhal_sdio_async_transfer -+*/ - - #pragma once - -@@ -43,132 +85,138 @@ - #include - #include "cy_result.h" - #include "cyhal_hw_types.h" --#include "cyhal_modules.h" - - #if defined(__cplusplus) - extern "C" { - #endif - -+/******************************************************************************* -+* Defines -+*******************************************************************************/ - --/** -- * \addtogroup group_hal_sdio_macros -- * \{ -- */ -- --#define CYHAL_SDIO_RET_NO_ERRORS (0x00) /**< No error*/ --#define CYHAL_SDIO_RET_NO_SP_ERRORS (0x01) /**< Non-specific error code*/ --#define CYHAL_SDIO_RET_CMD_CRC_ERROR (0x02) /**< There was a CRC error on the Command/Response*/ --#define CYHAL_SDIO_RET_CMD_IDX_ERROR (0x04) /**< The index for the command didn't match*/ --#define CYHAL_SDIO_RET_CMD_EB_ERROR (0x08) /**< There was an end bit error on the command*/ --#define CYHAL_SDIO_RET_DAT_CRC_ERROR (0x10) /**< There was a data CRC Error*/ --#define CYHAL_SDIO_RET_CMD_TIMEOUT (0x20) /**< The command didn't finish before the timeout period was over*/ --#define CYHAL_SDIO_RET_DAT_TIMEOUT (0x40) /**< The data didn't finish before the timeout period was over*/ --#define CYHAL_SDIO_RET_RESP_FLAG_ERROR (0x80) /**< There was an error in the resposne flag for command 53*/ -- --#define CYHAL_SDIO_CLOCK_ERROR (0x100) /**< Failed to initial clock for SDIO */ --#define CYHAL_SDIO_BAD_ARGUMENT (0x200) /**< Bad argument passed for SDIO */ --#define CYHAL_SDIO_SEMA_NOT_INITED (0x400) /**< Semaphore is not initiated */ --#define CYHAL_SDIO_FUNC_NOT_SUPPORTED (0x800) /**< Function is not supported */ -+#define CYHAL_SDIO_RET_NO_ERRORS (0x00) /**< No error*/ -+#define CYHAL_SDIO_RET_NO_SP_ERRORS (0x01) /**< Non-specific error code*/ -+#define CYHAL_SDIO_RET_CMD_CRC_ERROR (0x02) /**< There was a CRC error on the Command/Response*/ -+#define CYHAL_SDIO_RET_CMD_IDX_ERROR (0x04) /**< The index for the command didn't match*/ -+#define CYHAL_SDIO_RET_CMD_EB_ERROR (0x08) /**< There was an end bit error on the command*/ -+#define CYHAL_SDIO_RET_DAT_CRC_ERROR (0x10) /**< There was a data CRC Error*/ -+#define CYHAL_SDIO_RET_CMD_TIMEOUT (0x20) /**< The command didn't finish before the timeout period was over*/ -+#define CYHAL_SDIO_RET_DAT_TIMEOUT (0x40) /**< The data didn't finish before the timeout period was over*/ -+#define CYHAL_SDIO_RET_RESP_FLAG_ERROR (0x80) /**< There was an error in the resposne flag for command 53*/ -+ -+#define CYHAL_SDIO_CLOCK_ERROR (0x100) /**< Failed to initial clock for SDIO */ -+#define CYHAL_SDIO_BAD_ARGUMENT (0x200) /**< Bad argument passed for SDIO */ -+#define CYHAL_SDIO_SEMA_NOT_INITED (0x400) /**< Semaphore is not initiated */ -+#define CYHAL_SDIO_FUNC_NOT_SUPPORTED (0x800) /**< Function is not supported */ -+#define CYHAL_SDIO_CANCELED (0x1000) /**< Operation canceled */ -+#define CYHAL_SDIO_PM_PENDING_ERROR (0x2000) /**< Transfer cannot be initiated after power mode transition allowed.*/ - - /* HAL return value defines */ - --/** Incorrect parameter value define */ --#define CYHAL_SDIO_RSLT_ERR_BAD_PARAM CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, \ -- CYHAL_RSLT_MODULE_SDIO, \ -- CYHAL_SDIO_BAD_ARGUMENT) -+/** \addtogroup group_hal_results_sdio SDIO HAL Results -+ * SDIO specific return codes -+ * \ingroup group_hal_results -+ * \{ *//** -+ */ - -+/** Incorrect parameter value define */ -+#define CYHAL_SDIO_RSLT_ERR_BAD_PARAM \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_BAD_ARGUMENT)) - /** Clock initialization error define */ --#define CYHAL_SDIO_RSLT_ERR_CLOCK CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, \ -- CYHAL_RSLT_MODULE_SDIO, \ -- CYHAL_SDIO_CLOCK_ERROR) -- -+#define CYHAL_SDIO_RSLT_ERR_CLOCK \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_CLOCK_ERROR)) - /** Semaphore not initiated error define */ --#define CYHAL_SDIO_RSLT_ERR_SEMA_NOT_INITED CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, \ -- CYHAL_RSLT_MODULE_SDIO, \ -- CYHAL_SDIO_SEMA_NOT_INITED) -- -+#define CYHAL_SDIO_RSLT_ERR_SEMA_NOT_INITED \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_SEMA_NOT_INITED)) - /** Error define based on SDIO lower function return value */ --#define CYHAL_SDIO_RSLT_ERR_FUNC_RET(retVal) CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, \ -- CYHAL_RSLT_MODULE_SDIO, (retVal) ) -- --/** \} group_hal_sdio_macros */ -- -+#define CYHAL_SDIO_RSLT_ERR_FUNC_RET(retVal) \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, ((uint16_t)retVal))) -+/** Define to indicate canceled operation */ -+#define CYHAL_SDIO_RSLT_CANCELED \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_CANCELED)) -+/** Transfers are not allowed after the SDIO block has allowed power mode transition. */ -+#define CYHAL_SDIO_RSLT_ERR_PM_PENDING \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SDIO, CYHAL_SDIO_PM_PENDING_ERROR)) - - /** -- * \addtogroup group_hal_sdio_enums -- * \{ -+ * \} - */ - -+ -+/******************************************************************************* -+* Enumerations -+*******************************************************************************/ -+ - /** Commands that can be issued */ - typedef enum - { -- CYHAL_SDIO_CMD_GO_IDLE_STATE = 0, //!> Go to idle state -- CYHAL_SDIO_CMD_SEND_RELATIVE_ADDR = 3, //!> Send a relative address -- CYHAL_SDIO_CMD_IO_SEND_OP_COND = 5, //!> Send an OP IO -- CYHAL_SDIO_CMD_SELECT_CARD = 7, //!> Send a card select -- CYHAL_SDIO_CMD_GO_INACTIVE_STATE = 15, //!> Go to inactive state -- CYHAL_SDIO_CMD_IO_RW_DIRECT = 52, //!> Perform a direct read/write -- CYHAL_SDIO_CMD_IO_RW_EXTENDED = 53, //!> Perform an extended read/write -+ CYHAL_SDIO_CMD_GO_IDLE_STATE = 0, //!< Go to idle state -+ CYHAL_SDIO_CMD_SEND_RELATIVE_ADDR = 3, //!< Send a relative address -+ CYHAL_SDIO_CMD_IO_SEND_OP_COND = 5, //!< Send an OP IO -+ CYHAL_SDIO_CMD_SELECT_CARD = 7, //!< Send a card select -+ CYHAL_SDIO_CMD_GO_INACTIVE_STATE = 15, //!< Go to inactive state -+ CYHAL_SDIO_CMD_IO_RW_DIRECT = 52, //!< Perform a direct read/write -+ CYHAL_SDIO_CMD_IO_RW_EXTENDED = 53, //!< Perform an extended read/write - } cyhal_sdio_command_t; - - /** Types of transfer that can be performed */ - typedef enum - { -- CYHAL_READ, //!> Read from the card -- CYHAL_WRITE //!> Write to the card -+ CYHAL_READ, //!< Read from the card -+ CYHAL_WRITE //!< Write to the card - } cyhal_transfer_t; - --/** Events that can cause an SDIO interrupt */ --typedef enum --{ -- CYHAL_SDIO_CMD_COMPLETE = 0x0001, //!> Command Complete -- CYHAL_SDIO_XFER_COMPLETE = 0x0002, //!> Host read/write transfer is complete -- CYHAL_SDIO_BGAP_EVENT = 0x0004, //!> This bit is set when both read/write transaction is stopped -- CYHAL_SDIO_DMA_INTERRUPT = 0x0008, //!> Host controller detects an SDMA Buffer Boundary during transfer -- CYHAL_SDIO_BUF_WR_READY = 0x0010, //!> This bit is set if the Buffer Write Enable changes from 0 to 1 -- CYHAL_SDIO_BUF_RD_READY = 0x0020, //!> This bit is set if the Buffer Read Enable changes from 0 to 1 -- CYHAL_SDIO_CARD_INSERTION = 0x0040, //!> This bit is set if the Card Inserted in the Present State -- CYHAL_SDIO_CARD_REMOVAL = 0x0080, //!> This bit is set if the Card Inserted in the Present State -- CYHAL_SDIO_CARD_INTERRUPT = 0x0100, //!> The synchronized value of the DAT[1] interrupt input for SD mode -- CYHAL_SDIO_INT_A = 0x0200, //!> Reserved: set to 0 -- CYHAL_SDIO_INT_B = 0x0400, //!> Reserved: set to 0 -- CYHAL_SDIO_INT_C = 0x0800, //!> Reserved: set to 0, -- CYHAL_SDIO_RE_TUNE_EVENT = 0x1000, //!> Reserved: set to 0, -- CYHAL_SDIO_FX_EVENT = 0x2000, //!> This status is set when R[14] of response register is set to 1 -- CYHAL_SDIO_CQE_EVENT = 0x4000, //!> This status is set if Command Queuing/Crypto event has occurred -- CYHAL_SDIO_ERR_INTERRUPT = 0x8000, //!> If any of the bits in the Error Interrupt Status register are set -- CYHAL_SDIO_ALL_INTERRUPTS = 0xE1FF, //!> Is used to enable/disable all interrupts --} cyhal_sdio_irq_event_t; -- --/** \} group_hal_sdio_enums */ -- -- --/** -- * \addtogroup group_hal_sdio_data_structures -- * \{ -- */ -+/** Types of events that could be asserted by SDIO */ -+typedef enum { -+ /* Interrupt-based thread events */ -+ CYHAL_SDIO_CMD_COMPLETE = 0x00001, //!< Command Complete -+ CYHAL_SDIO_XFER_COMPLETE = 0x00002, //!< Host read/write transfer is complete -+ CYHAL_SDIO_BGAP_EVENT = 0x00004, //!< This bit is set when both read/write transaction is stopped -+ CYHAL_SDIO_DMA_INTERRUPT = 0x00008, //!< Host controller detects an SDMA Buffer Boundary during transfer -+ CYHAL_SDIO_BUF_WR_READY = 0x00010, //!< This bit is set if the Buffer Write Enable changes from 0 to 1 -+ CYHAL_SDIO_BUF_RD_READY = 0x00020, //!< This bit is set if the Buffer Read Enable changes from 0 to 1 -+ CYHAL_SDIO_CARD_INSERTION = 0x00040, //!< This bit is set if the Card Inserted in the Present State -+ CYHAL_SDIO_CARD_REMOVAL = 0x00080, //!< This bit is set if the Card Inserted in the Present State -+ CYHAL_SDIO_CARD_INTERRUPT = 0x00100, //!< The synchronized value of the DAT[1] interrupt input for SD mode -+ CYHAL_SDIO_INT_A = 0x00200, //!< Reserved: set to 0 -+ CYHAL_SDIO_INT_B = 0x00400, //!< Reserved: set to 0 -+ CYHAL_SDIO_INT_C = 0x00800, //!< Reserved: set to 0 -+ CYHAL_SDIO_RE_TUNE_EVENT = 0x01000, //!< Reserved: set to 0 -+ CYHAL_SDIO_FX_EVENT = 0x02000, //!< This status is set when R[14] of response register is set to 1 -+ CYHAL_SDIO_CQE_EVENT = 0x04000, //!< This status is set if Command Queuing/Crypto event has occurred -+ CYHAL_SDIO_ERR_INTERRUPT = 0x08000, //!< If any of the bits in the Error Interrupt Status register are set -+ -+ /* Non-interrupt-based thread events */ -+ CYHAL_SDIO_GOING_DOWN = 0x10000, //!< The interface is going away (eg: powering down for some period of time) -+ CYHAL_SDIO_COMING_UP = 0x20000, //!< The interface is back up (eg: came back from a low power state) -+ -+ CYHAL_SDIO_ALL_INTERRUPTS = 0x0E1FF, //!< Is used to enable/disable all interrupts events -+} cyhal_sdio_event_t; -+ -+ -+/******************************************************************************* -+* Data Structures -+*******************************************************************************/ - --/** SDIO controller initial configuration */ -+/** @brief SDIO controller initial configuration */ - typedef struct - { - uint32_t frequencyhal_hz; //!< Clock frequency, in hertz -- uint16_t block_size; //!< Block size -+ uint16_t block_size; //!< Block size - } cyhal_sdio_cfg_t; - --/** Handler for SDIO interrupts */ --typedef void (*cyhal_sdio_irq_handler_t)(void *handler_arg, cyhal_sdio_irq_event_t event); -- --/** \} group_hal_sdio_data_structures */ -+/** Callback for SDIO events */ -+typedef void (*cyhal_sdio_event_callback_t)(void *callback_arg, cyhal_sdio_event_t event); - - --/** -- * \addtogroup group_hal_sdio_functions -- * \{ -- */ -- -+/******************************************************************************* -+* Data Structures -+*******************************************************************************/ - /** Initialize the SDIO peripheral - * -- * @param[out] obj The SDIO object -+ * @param[out] obj Pointer to an SDIO object. -+ * The caller must allocate the memory for this object but the init -+ * function will initialize its contents. - * @param[out] clk The pin connected to the clk signal - * @param[in] cmd The pin connected to the command signal - * @param[in] data0 The pin connected to the data0 signal -@@ -176,99 +224,143 @@ typedef void (*cyhal_sdio_irq_handler_t)(void *handler_arg, cyhal_sdio_irq_event - * @param[in] data2 The pin connected to the data2 signal - * @param[in] data3 The pin connected to the data3 signal - * @return The status of the init request -+ * -+ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_1 for more information. - */ --cy_rslt_t cyhal_sdio_init(cyhal_sdio_t *obj, cyhal_gpio_t cmd, cyhal_gpio_t clk, cyhal_gpio_t data0, cyhal_gpio_t data1, -- cyhal_gpio_t data2, cyhal_gpio_t data3); -+cy_rslt_t cyhal_sdio_init(cyhal_sdio_t *obj, cyhal_gpio_t cmd, cyhal_gpio_t clk, cyhal_gpio_t data0, cyhal_gpio_t data1, cyhal_gpio_t data2, cyhal_gpio_t data3); - --/** Release the SDIO peripheral, not currently invoked. It requires further -- * resource management. -+/** Release the SDIO block. - * - * @param[in,out] obj The SDIO object - */ - void cyhal_sdio_free(cyhal_sdio_t *obj); - --/** Configure the SDIO block. -+/** Configure the SDIO block with required parameters. Refer \ref cyhal_sdio_cfg_t for more information. - * - * @param[in,out] obj The SDIO object -- * @param[in] config The sdio configuration to apply -- * @return The status of the configure request -+ * @param[in] config The SDIO configuration to apply -+ * @return The status of the configure request. -+ * -+ * Returns \ref CY_RSLT_SUCCESS on successful operation. - */ - cy_rslt_t cyhal_sdio_configure(cyhal_sdio_t *obj, const cyhal_sdio_cfg_t *config); - --/** Sends a command to the SDIO block. -+/** Sends command to the SDIO device. See \ref cyhal_sdio_command_t for list of available commands. -+ * -+ * This will block until the command is completed. - * - * @param[in,out] obj The SDIO object - * @param[in] direction The direction of transfer (read/write) -- * @param[in] command The SDIO command to send -+ * @param[in] command The command to send to the SDIO device - * @param[in] argument The argument to the command - * @param[out] response The response from the SDIO device -- * @return The status of the configure request -+ * @return The status of the command transfer. -+ * -+ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_3 for more information. - */ --cy_rslt_t cyhal_sdio_send_cmd(const cyhal_sdio_t *obj, cyhal_transfer_t direction, cyhal_sdio_command_t command, -- uint32_t argument, uint32_t *response); -+cy_rslt_t cyhal_sdio_send_cmd(const cyhal_sdio_t *obj, cyhal_transfer_t direction, cyhal_sdio_command_t command, uint32_t argument, uint32_t* response); - --/** Performs a bulk data transfer (CMD=53) to the SDIO block. -+/** Performs a bulk data transfer. Sends \ref CYHAL_SDIO_CMD_IO_RW_EXTENDED command (CMD=53) which allows writing and reading of a large number of I/O registers with a single command. -+ * -+ * This will block until the transfer is completed. - * - * @param[in,out] obj The SDIO object - * @param[in] direction The direction of transfer (read/write) - * @param[in] argument The argument to the command -- * @param[in] data The data to send to the SDIO device. The data buffer -- * should be aligned to the block size (64 bytes) if data -- * size is greater that block size (64 bytes). -+ * @param[in] data The data to send to the SDIO device. A bulk transfer is done in block -+ * size (default: 64 bytes) chunks for better performance. Therefore, -+ * the size of the data buffer passed into this function must be at least -+ * `length` bytes and a multiple of the block size. For example, when -+ * requesting to read 100 bytes of data with a block size 64 bytes, the -+ * data buffer needs to be at least 128 bytes. The first 100 bytes of data -+ * in the buffer will be the requested data. - * @param[in] length The number of bytes to send - * @param[out] response The response from the SDIO device -- * @return The status of the configure request -+ * @return The status of the bulk transfer operation. -+ * -+ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_4 for more information. - */ --cy_rslt_t cyhal_sdio_bulk_transfer(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, -- const uint32_t *data, uint16_t length, uint32_t *response); -+cy_rslt_t cyhal_sdio_bulk_transfer(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t* data, uint16_t length, uint32_t* response); - --/** Performs a bulk asynchronus data transfer (CMD=53) to the SDIO block. -+/** Performs a bulk asynchronous data transfer by issuing the \ref CYHAL_SDIO_CMD_IO_RW_EXTENDED command(CMD=53) to the SDIO block. -+ * After exiting this function the \ref CYHAL_SDIO_CMD_COMPLETE and \ref CYHAL_SDIO_XFER_COMPLETE events are not asserted. -+ * -+ * To complete the asynchronous transfer, call \ref cyhal_sdio_is_busy() -+ * until it returns false. -+ * The \ref CYHAL_SDIO_CMD_COMPLETE and \ref CYHAL_SDIO_XFER_COMPLETE events are enabled -+ * after the asynchronous transfer is complete and in the condition they were -+ * enabled in before the transfer operation started. Handle these events in the interrupt callback. -+ * -+ * When the transfer is complete, the \ref CYHAL_SDIO_XFER_COMPLETE event will be raised. -+ * See \ref cyhal_sdio_register_callback and \ref cyhal_sdio_enable_event. - * - * @param[in,out] obj The SDIO object - * @param[in] direction The direction of transfer (read/write) - * @param[in] argument The argument to the command - * @param[in] data The data to send to the SDIO device - * @param[in] length The number of bytes to send -- * @return The status of the configure request -+ * @return The status of the async tranfer operation. -+ * -+ * Returns \ref CY_RSLT_SUCCESS on successful operation. Refer \ref subsection_sdio_use_case_5 for more information. - */ --cy_rslt_t cyhal_sdio_transfer_async(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, -- const uint32_t *data, uint16_t length); -+cy_rslt_t cyhal_sdio_transfer_async(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t* data, uint16_t length); - - /** Checks if the specified SDIO is in use - * - * @param[in] obj The SDIO peripheral to check -- * @return Indication of whether the SDIO is still transmitting -+ * @return true if SDIO is in use. false, otherwise. - */ - bool cyhal_sdio_is_busy(const cyhal_sdio_t *obj); - - /** Abort an SDIO transfer - * - * @param[in] obj The SDIO peripheral to stop -- * @return The status of the abort_async request -+ * @return The status of the abort_async request. -+ * -+ * Returns \ref CY_RSLT_SUCCESS on successful operation. - */ - cy_rslt_t cyhal_sdio_abort_async(const cyhal_sdio_t *obj); - --/** The sdio interrupt handler registration -+/** Register an SDIO event callback to be invoked when the event is triggered. -+ * -+ * This function will be called when one of the events enabled by \ref cyhal_sdio_enable_event occurs. - * -- * @param[in] obj The SDIO object -- * @param[in] handler The callback handler which will be invoked when the interrupt fires -- * @param[in] handler_arg Generic argument that will be provided to the handler when called -+ * @param[in] obj The SDIO object -+ * @param[in] callback The callback function which will be invoked when the event triggers -+ * @param[in] callback_arg Generic argument that will be provided to the callback when executed -+ * -+ * Refer \ref subsection_sdio_use_case_2 for more implementation. - */ --void cyhal_sdio_register_irq(cyhal_sdio_t *obj, cyhal_sdio_irq_handler_t handler, void *handler_arg); -+void cyhal_sdio_register_callback(cyhal_sdio_t *obj, cyhal_sdio_event_callback_t callback, void *callback_arg); - --/** Configure sdio interrupt. -+/** Enables callbacks to be triggered for specified SDIO events. Refer \ref cyhal_sdio_event_t for all events. -+ * -+ * @param[in] obj The SDIO object -+ * @param[in] event The SDIO event type -+ * @param[in] intr_priority The priority for NVIC interrupt events -+ * @param[in] enable Set to true to enable events, or false to disable them - * -- * @param[in] obj The SDIO object -- * @param[in] event The sdio IRQ type -- * @param[in] enable Set to non-zero to enable events, or zero to disable them -+ * Refer \ref subsection_sdio_use_case_2 for more information. - */ --void cyhal_sdio_irq_enable(cyhal_sdio_t *obj, cyhal_sdio_irq_event_t event, bool enable); -+void cyhal_sdio_enable_event(cyhal_sdio_t *obj, cyhal_sdio_event_t event, uint8_t intr_priority, bool enable); - --/** \} group_hal_sdio_functions */ -+/******************************************************************************* -+* Backward compatibility macro. The following code is DEPRECATED and must -+* not be used in new projects -+*******************************************************************************/ -+/** \cond INTERNAL */ -+#define cyhal_sdio_register_irq cyhal_sdio_register_callback -+#define cyhal_sdio_irq_enable(obj, event, enable) cyhal_sdio_enable_event(obj, event, CYHAL_ISR_PRIORITY_DEFAULT, enable) -+typedef cyhal_sdio_event_t cyhal_sdio_irq_event_t; -+typedef cyhal_sdio_event_callback_t cyhal_sdio_irq_handler_t; -+/** \endcond */ - - #if defined(__cplusplus) - } - #endif - --/** \} group_hal_sdio */ -+#ifdef CYHAL_SDIO_IMPL_HEADER -+#include CYHAL_SDIO_IMPL_HEADER -+#endif /* CYHAL_SDIO_IMPL_HEADER */ - -+/** \} group_hal_sdio */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_spi.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_spi.h -index 345f3bd86a..f5ba47669f 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_spi.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_spi.h -@@ -9,7 +9,7 @@ - * - ******************************************************************************** - * \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation -+* Copyright 2018-2020 Cypress Semiconductor Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -26,16 +26,64 @@ - *******************************************************************************/ - - /** -- * \addtogroup group_hal_spi SPI (Serial Peripheral Interface) -- * \ingroup group_hal -- * \{ -- * High level interface for interacting with the Cypress SPI. -- * -- * \defgroup group_hal_spi_macros Macros -- * \defgroup group_hal_spi_functions Functions -- * \defgroup group_hal_spi_data_structures Data Structures -- * \defgroup group_hal_spi_enums Enumerated Types -- */ -+* \addtogroup group_hal_spi SPI (Serial Peripheral Interface) -+* \ingroup group_hal -+* \{ -+* High level interface for interacting with the Serial Peripheral Interface (SPI). -+* -+* The SPI protocol is a synchronous serial interface protocol. Devices operate -+* in either master or slave mode. The master initiates the data transfer. -+* -+* Motorola SPI modes 0, 1, 2, and 3 are supported, with either MSB or LSB first. -+* The operating mode and data frame size can be configured via \ref cyhal_spi_cfg_t. -+* -+* \section section_spi_features Features -+* * Supports master and slave functionality. -+* * Supports Motorola modes - 0, 1, 2 and 3 - \ref cyhal_spi_mode_t -+* * MSb or LSb first shift direction - \ref cyhal_spi_mode_t -+* * Master supports up to four slave select lines -+* * Supports data frame size of 8 or 16 bits -+* * Configurable interrupt and callback assignment on SPI events: -+* Data transfer to FIFO complete, Transfer complete and Transmission error - \ref cyhal_spi_event_t -+* * Supports changing baud rate of the transaction in run time. -+* * Provides functions to send/receive a single byte or block of data. -+* -+* \section section_spi_quickstart Quick Start -+* -+* Initialise a SPI master or slave interface using \ref cyhal_spi_init() and provide the SPI pins (mosi, miso, sclk, ssel), -+* number of bits per frame (data_bits) and SPI Motorola mode. The data rate can be set using \ref cyhal_spi_set_frequency().
-+* See \ref section_spi_snippets for code snippets to send or receive the data. -+* -+* \section section_spi_snippets Code snippets -+* -+* \subsection subsection_spi_snippet_1 Snippet 1: SPI Master - Single byte transfer operation (Read and Write) -+* The following code snippet initializes an SPI Master interface using the \ref cyhal_spi_init(). The data rate of transfer is set using \ref cyhal_spi_set_frequency(). -+* The code snippet shows how to transfer a single byte of data using \ref cyhal_spi_send() and \ref cyhal_spi_recv(). -+* \snippet spi.c snippet_cyhal_spi_master_byte_operation -+* -+* \subsection subsection_spi_snippet_2 Snippet 2: SPI Slave - Single byte transfer operation (Read and Write) -+* The following code snippet initializes an SPI Slave interface using the \ref cyhal_spi_init(). The data rate of transfer is set using \ref cyhal_spi_set_frequency. -+* The code snippet shows how to transfer a single byte of data using \ref cyhal_spi_send() and \ref cyhal_spi_recv. -+* \snippet spi.c snippet_cyhal_spi_slave_byte_operation -+* -+* \subsection subsection_spi_snippet_3 Snippet 3: SPI Block Data transfer -+* The following snippet sends and receives an array of data in a single SPI transaction using \ref cyhal_spi_transfer(). The example -+* uses SPI master to transmit 5 bytes of data and receive 5 bytes of data in a single transaction. -+* \snippet spi.c snippet_cyhal_spi_block_data_transfer -+* -+* \subsection subsection_spi_snippet_4 Snippet 4: Interrupts on SPI events -+* SPI interrupt events ( \ref cyhal_spi_event_t) can be mapped to an interrupt and assigned to a callback function. -+* The callback function needs to be first registered and then the event needs to be enabled. -+* The following snippet initialises a SPI master to perform a block transfer using \ref cyhal_spi_transfer_async(). This is a non-blocking function. -+* A callback function is registered using \ref cyhal_spi_register_callback to notify whenever the SPI transfer is complete. -+* \snippet spi.c snippet_cyhal_spi_interrupt_callback_events -+ -+* \section subsection_spi_moreinfor More Information -+* -+* * mtb-example-psoc6-spi-master: This example project demonstrates -+* use of SPI (HAL) resource in PSoC® 6 MCU in Master mode to write data to an SPI slave. -+* -+*/ - - #pragma once - -@@ -43,73 +91,106 @@ - #include - #include "cy_result.h" - #include "cyhal_hw_types.h" --#include "cyhal_modules.h" - - #if defined(__cplusplus) - extern "C" { - #endif - -- --/** -- * \addtogroup group_hal_spi_macros -- * \{ -+/** \addtogroup group_hal_results_spi SPI HAL Results -+ * SPI specific return codes -+ * \ingroup group_hal_results -+ * \{ *//** - */ - - /** Bad argument */ --#define CYHAL_SPI_RSLT_BAD_ARGUMENT (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 0) ) -+#define CYHAL_SPI_RSLT_BAD_ARGUMENT \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 0)) - /** Failed to initialize SPI clock */ --#define CYHAL_SPI_RSLT_CLOCK_ERROR (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 1) ) -+#define CYHAL_SPI_RSLT_CLOCK_ERROR \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 1)) - /** Failed to Transfer SPI data */ --#define CYHAL_SPI_RSLT_TRANSFER_ERROR (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 2) ) -+#define CYHAL_SPI_RSLT_TRANSFER_ERROR \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 2)) - /** Provided clock is not supported by SPI */ --#define CYHAL_SPI_RSLT_CLOCK_NOT_SUPPORTED (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 3) ) -+#define CYHAL_SPI_RSLT_CLOCK_NOT_SUPPORTED \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 3)) - /** Provided PIN configuration is not supported by SPI */ --#define CYHAL_SPI_RSLT_PIN_CONFIG_NOT_SUPPORTED (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 5) ) -+#define CYHAL_SPI_RSLT_PIN_CONFIG_NOT_SUPPORTED \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 5)) - /** Provided PIN configuration is not supported by SPI */ --#define CYHAL_SPI_RSLT_INVALID_PIN_API_NOT_SUPPORTED (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 6) ) -+#define CYHAL_SPI_RSLT_INVALID_PIN_API_NOT_SUPPORTED \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 6)) - /** The requested resource type is invalid */ --#define CYHAL_SPI_RSLT_ERR_INVALID_PIN (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 7) ) -+#define CYHAL_SPI_RSLT_ERR_INVALID_PIN \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 7)) -+/** Cannot configure SSEL signal */ -+#define CYHAL_SPI_RSLT_ERR_CANNOT_CONFIG_SSEL \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 8)) -+/** Cannot switch SSEL - device is busy or incorrect pin provided */ -+#define CYHAL_SPI_RSLT_ERR_CANNOT_SWITCH_SSEL \ -+ (CYHAL_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CYHAL_RSLT_MODULE_SPI, 9)) - --/** \} group_hal_spi_macros */ -+/** -+ * \} -+ */ - -+/** Compatibility define for cyhal_spi_set_frequency. */ -+#define cyhal_spi_frequency cyhal_spi_set_frequency - - /** SPI interrupt triggers */ --typedef enum --{ -- CYHAL_SPI_IRQ_NONE = 0, //!< Disable all interrupt call backs -+typedef enum { - /** All transfer data has been moved into data FIFO */ - CYHAL_SPI_IRQ_DATA_IN_FIFO = 1 << 1, - /** Transfer complete. */ - CYHAL_SPI_IRQ_DONE = 1 << 2, - /** An error occurred while transferring data */ - CYHAL_SPI_IRQ_ERROR = 1 << 3, --} cyhal_spi_irq_event_t; -+} cyhal_spi_event_t; -+ -+/** SPI Slave Select polarity */ -+typedef enum { -+ /** SSEL signal is active low */ -+ CYHAL_SPI_SSEL_ACTIVE_LOW = 0, -+ /** SSEL signal is active high */ -+ CYHAL_SPI_SSEL_ACTIVE_HIGH = 1, -+} cyhal_spi_ssel_polarity_t; - - /** Handler for SPI interrupts */ --typedef void (*cyhal_spi_irq_handler_t)(void *handler_arg, cyhal_spi_irq_event_t event); -+typedef void (*cyhal_spi_event_callback_t)(void *callback_arg, cyhal_spi_event_t event); -+ -+/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the LSB is sent first. */ -+#define CYHAL_SPI_MODE_FLAG_LSB (0x01u) -+/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the CPHA=1. */ -+#define CYHAL_SPI_MODE_FLAG_CPHA (0x02u) -+/** Flag for SPI \ref cyhal_spi_mode_t values indicating that the CPOL=1. */ -+#define CYHAL_SPI_MODE_FLAG_CPOL (0x04u) -+/** Creates a \ref cyhal_spi_mode_t value given the cpol, cpha, lsb values. */ -+#define CYHAL_SPI_MODE(cpol, cpha, lsb) (((cpol > 0) ? CYHAL_SPI_MODE_FLAG_CPOL : 0) | \ -+ ((cpha > 0) ? CYHAL_SPI_MODE_FLAG_CPHA : 0) | \ -+ (( lsb > 0) ? CYHAL_SPI_MODE_FLAG_LSB : 0)) - - /** SPI operating modes */ - typedef enum - { - /** Standard motorola SPI CPOL=0, CPHA=0 with MSB first operation */ -- CYHAL_SPI_MODE_00_MSB, -+ CYHAL_SPI_MODE_00_MSB = CYHAL_SPI_MODE(0, 0, 0), - /** Standard motorola SPI CPOL=0, CPHA=0 with LSB first operation */ -- CYHAL_SPI_MODE_00_LSB, -+ CYHAL_SPI_MODE_00_LSB = CYHAL_SPI_MODE(0, 0, 1), - /** Standard motorola SPI CPOL=0, CPHA=1 with MSB first operation */ -- CYHAL_SPI_MODE_01_MSB, -+ CYHAL_SPI_MODE_01_MSB = CYHAL_SPI_MODE(0, 1, 0), - /** Standard motorola SPI CPOL=0, CPHA=1 with LSB first operation */ -- CYHAL_SPI_MODE_01_LSB, -+ CYHAL_SPI_MODE_01_LSB = CYHAL_SPI_MODE(0, 1, 1), - /** Standard motorola SPI CPOL=1, CPHA=0 with MSB first operation */ -- CYHAL_SPI_MODE_10_MSB, -+ CYHAL_SPI_MODE_10_MSB = CYHAL_SPI_MODE(1, 0, 0), - /** Standard motorola SPI CPOL=1, CPHA=0 with LSB first operation */ -- CYHAL_SPI_MODE_10_LSB, -+ CYHAL_SPI_MODE_10_LSB = CYHAL_SPI_MODE(1, 0, 1), - /** Standard motorola SPI CPOL=1, CPHA=1 with MSB first operation */ -- CYHAL_SPI_MODE_11_MSB, -+ CYHAL_SPI_MODE_11_MSB = CYHAL_SPI_MODE(1, 1, 0), - /** Standard motorola SPI CPOL=1, CPHA=1 with LSB first operation */ -- CYHAL_SPI_MODE_11_LSB, -+ CYHAL_SPI_MODE_11_LSB = CYHAL_SPI_MODE(1, 1, 1), - } cyhal_spi_mode_t; - --/** Initial SPI configuration. */ -+/** @brief Initial SPI configuration. */ - typedef struct - { - cyhal_spi_mode_t mode; //!< The operating mode -@@ -117,11 +198,11 @@ typedef struct - bool is_slave; //!< Whether the peripheral is operating as slave or master - } cyhal_spi_cfg_t; - -- - /** Initialize the SPI peripheral - * - * Configures the pins used by SPI, sets a default format and frequency, and enables the peripheral -- * @param[out] obj The SPI object to initialize -+ * @param[out] obj Pointer to a SPI object. The caller must allocate the memory -+ * for this object but the init function will initialize its contents. - * @param[in] mosi The pin to use for MOSI - * @note At least MOSI or MISO pin should be non-NC - * @param[in] miso The pin to use for MISO -@@ -129,7 +210,9 @@ typedef struct - * @param[in] sclk The pin to use for SCLK - * @note This pin cannot be NC - * @param[in] ssel The pin to use for SSEL -- * @note This pin can be NC -+ * @note Provided pin will be configured for \ref CYHAL_SPI_SSEL_ACTIVE_LOW polarity and set as active. This can be changed -+ * (as well as additional ssel pins can be added) by \ref cyhal_spi_slave_select_config and \ref cyhal_spi_select_active_ssel -+ * functions. This pin can be NC. - * @param[in] clk The clock to use can be shared, if not provided a new clock will be allocated - * @param[in] bits The number of bits per frame - * @note bits should be 8 or 16 -@@ -138,8 +221,7 @@ typedef struct - * @return The status of the init request - */ - cy_rslt_t cyhal_spi_init(cyhal_spi_t *obj, cyhal_gpio_t mosi, cyhal_gpio_t miso, cyhal_gpio_t sclk, cyhal_gpio_t ssel, -- const cyhal_clock_divider_t *clk, -- uint8_t bits, cyhal_spi_mode_t mode, bool is_slave); -+ const cyhal_clock_t *clk, uint8_t bits, cyhal_spi_mode_t mode, bool is_slave); - - /** Release a SPI object - * -@@ -154,13 +236,38 @@ void cyhal_spi_free(cyhal_spi_t *obj); - * Configures the SPI peripheral's baud rate - * @param[in,out] obj The SPI object to configure - * @param[in] hz The baud rate in Hz -- * @return The status of the frequency request -+ * @return The status of the set_frequency request -+ */ -+cy_rslt_t cyhal_spi_set_frequency(cyhal_spi_t *obj, uint32_t hz); -+ -+/** Configures provided ssel pin to work as SPI slave select with specified polarity. -+ * -+ * Multiple pins can be configured as SPI slave select pins. Please refer to device datasheet for details. Switching -+ * between configured slave select pins is done by \ref cyhal_spi_select_active_ssel function. -+ * Unless modified with this function, the SSEL pin provided as part of \ref cyhal_spi_init is the default. -+ * @param[in] obj The SPI object to add slave select for -+ * @param[in] ssel Slave select pin to be added -+ * @param[in] polarity Polarity of slave select -+ * @return The status of ssel pin configuration -+ */ -+cy_rslt_t cyhal_spi_slave_select_config(cyhal_spi_t *obj, cyhal_gpio_t ssel, cyhal_spi_ssel_polarity_t polarity); -+ -+/** Selects an active slave select line from one of available. -+ * -+ * This function is applicable for the master and slave. -+ * SSEL pin should be configured by \ref cyhal_spi_slave_select_config or \ref cyhal_spi_init functions prior -+ * to selecting it as active. The active slave select line will automatically be toggled as part of any transfer. -+ * @param[in] obj The SPI object for switching -+ * @param[in] ssel Slave select pin to be set as active -+ * @return CY_RSLT_SUCCESS if slave select was switched successfully, otherwise - CYHAL_SPI_RSLT_ERR_CANNOT_SWITCH_SSEL - */ --cy_rslt_t cyhal_spi_frequency(cyhal_spi_t *obj, uint32_t hz); -+cy_rslt_t cyhal_spi_select_active_ssel(cyhal_spi_t *obj, cyhal_gpio_t ssel); - --/** Get a received value out of the SPI receive buffer -+/** Synchronously get a received value out of the SPI receive buffer -+ * -+ * In Master mode - transmits fill-in value and read the data from RxFifo -+ * In Slave mode - Blocks until a value is available - * -- * Blocks until a value is available - * @param[in] obj The SPI peripheral to read - * @param[in] value The value received - * @return The status of the read request -@@ -168,9 +275,12 @@ cy_rslt_t cyhal_spi_frequency(cyhal_spi_t *obj, uint32_t hz); - * - In Master mode, MISO pin required to be non-NC for this API to operate - * - In Slave mode, MOSI pin required to be non-NC for this API to operate - */ --cy_rslt_t cyhal_spi_read(cyhal_spi_t *obj, uint32_t *value); -+cy_rslt_t cyhal_spi_recv(cyhal_spi_t *obj, uint32_t* value); - --/** Write a byte out -+/** Synchronously send a byte out -+ * -+ * In Master mode transmits value to slave and read/drop a value from the RxFifo. -+ * In Slave mode writes a value to TxFifo - * - * @param[in] obj The SPI peripheral to use for sending - * @param[in] value The value to send -@@ -179,27 +289,35 @@ cy_rslt_t cyhal_spi_read(cyhal_spi_t *obj, uint32_t *value); - * - In Master mode, MOSI pin required to be non-NC for this API to operate - * - In Slave mode, MISO pin required to be non-NC for this API to operate - */ --cy_rslt_t cyhal_spi_write(cyhal_spi_t *obj, uint32_t value); -+cy_rslt_t cyhal_spi_send(cyhal_spi_t *obj, uint32_t value); - --/** Write a block out and receive a value -+/** Synchronously Write a block out and receive a value - * -- * The total number of bytes sent and received will be the maximum of -- * tx_length and rx_length. The bytes written will be padded with the -- * value 0xff. -+ * The total number of bytes sent and received will be the maximum of tx_length -+ * and rx_length. The bytes written will be padded (at the end) with the value -+ * given by write_fill. -+ * -+ * This function will block for the duration of the transfer. \ref cyhal_spi_transfer_async -+ * can be used for non-blocking transfers. - * - * @param[in] obj The SPI peripheral to use for sending - * @param[in] tx Pointer to the byte-array of data to write to the device - * @param[in,out] tx_length Number of bytes to write, updated with the number actually written - * @param[out] rx Pointer to the byte-array of data to read from the device -- * @param[in,out] rx_length Number of bytes to read, udpated with the number actually read -+ * @param[in,out] rx_length Number of bytes to read, updated with the number actually read - * @param[in] write_fill Default data transmitted while performing a read - * @return The status of the transfer request - * @note Both MOSI and MISO pins required to be non-NC for this API to operate - */ --cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, -- uint8_t write_fill); -+cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, uint8_t write_fill); - --/** Begin the SPI transfer. Buffer pointers and lengths are specified in tx_buff and rx_buff -+/** Start an asynchronous SPI transfer. -+ * -+ * This will transfer `rx_length` bytes into the buffer pointed to by `rx`, while simultaneously transfering -+ * `tx_length` bytes of data from the buffer pointed to by `tx`, both in the background. -+ * When the transfer is complete, the @ref CYHAL_SPI_IRQ_DONE event will be raised. -+ * See @ref cyhal_spi_register_callback and @ref cyhal_spi_enable_event. -+ * \note For blocking transfers cyhal_spi_transfer can be used. - * - * @param[in] obj The SPI object that holds the transfer information - * @param[in] tx The transmit buffer -@@ -209,8 +327,7 @@ cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_leng - * @return The status of the transfer_async request - * @note Both MOSI and MISO pins required to be non-NC for this API to operate - */ --cy_rslt_t cyhal_spi_transfer_async(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, -- size_t rx_length); -+cy_rslt_t cyhal_spi_transfer_async(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length); - - /** Checks if the specified SPI peripheral is in use - * -@@ -226,25 +343,41 @@ bool cyhal_spi_is_busy(cyhal_spi_t *obj); - */ - cy_rslt_t cyhal_spi_abort_async(cyhal_spi_t *obj); - --/** The SPI interrupt handler registration -+/** Register a SPI callback handler - * -- * @param[in] obj The SPI object -- * @param[in] handler The callback handler which will be invoked when the interrupt fires -- * @param[in] handler_arg Generic argument that will be provided to the handler when called -+ * This function will be called when one of the events enabled by \ref cyhal_spi_enable_event occurs. -+ * -+ * @param[in] obj The SPI object -+ * @param[in] callback The callback handler which will be invoked when the interrupt fires -+ * @param[in] callback_arg Generic argument that will be provided to the callback when called - */ --void cyhal_spi_register_irq(cyhal_spi_t *obj, cyhal_spi_irq_handler_t handler, void *handler_arg); -+void cyhal_spi_register_callback(cyhal_spi_t *obj, cyhal_spi_event_callback_t callback, void *callback_arg); - - /** Configure SPI interrupt. This function is used for word-approach - * -- * @param[in] obj The SPI object -- * @param[in] event The SPI IRQ type -- * @param[in] enable True to turn on interrupts, False to turn off -+ * When an enabled event occurs, the function specified by \ref cyhal_spi_register_callback will be called. -+ * -+ * @param[in] obj The SPI object -+ * @param[in] event The SPI event type -+ * @param[in] intr_priority The priority for NVIC interrupt events -+ * @param[in] enable True to turn on interrupts, False to turn off - */ --void cyhal_spi_irq_enable(cyhal_spi_t *obj, cyhal_spi_irq_event_t event, bool enable); -+void cyhal_spi_enable_event(cyhal_spi_t *obj, cyhal_spi_event_t event, uint8_t intr_priority, bool enable); - --/** \} group_hal_spi_functions */ -+/******************************************************************************* -+* Backward compatibility macro. The following code is DEPRECATED and must -+* not be used in new projects -+*******************************************************************************/ -+/** \cond INTERNAL */ -+typedef cyhal_spi_event_t cyhal_spi_irq_event_t; -+/** \endcond */ - - #if defined(__cplusplus) - } - #endif - -+#ifdef CYHAL_SPI_IMPL_HEADER -+#include CYHAL_SPI_IMPL_HEADER -+#endif /* CYHAL_SPI_IMPL_HEADER */ -+ -+/** \} group_hal_spi */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/mbed_lib.json b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/mbed_lib.json -deleted file mode 100644 -index 0d9dace57e..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/mbed_lib.json -+++ /dev/null -@@ -1,6 +0,0 @@ --{ -- "name": "cy_psoc6_whd", -- "config": { -- "present": 1 -- } --} -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_hal.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_hal.c -index bb5f942102..f5a0716697 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_hal.c -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_hal.c -@@ -18,59 +18,46 @@ - /** @file - * Provides cyhal porting to generic mbed APIs - */ -- --#include --#include "cyhal_sdio.h" --#include "cyhal_spi.h" --#include "cyhal_gpio.h" --#include --#include "sockets.h" -- --void Cy_SysLib_Delay(uint32_t milliseconds) { -- thread_sleep_for(milliseconds); --} -- --void Cy_SysLib_DelayUs(uint16_t microseconds) { -- wait_us(microseconds); --} -- --static bool filesystem_mounted = false; --extern bool wiced_filesystem_mount(); -- --int wiced_filesystem_file_open(int* fd, const char* filename) { -- if (!filesystem_mounted) { -- filesystem_mounted = wiced_filesystem_mount(); -- } -- if (!filesystem_mounted) { -- return WHD_BADARG; -- } -- *fd = open(filename, O_RDONLY); -- if (*fd == -1) { -- return WHD_BADARG; -- } -- return WHD_SUCCESS; -+#include "cyhal.h" -+#include "mbed_thread.h" -+#include "mbed_wait_api.h" -+ -+static cyhal_sdio_t sdio_obj; -+ -+/* Edit Pin configuration */ -+const pinconfig_t PinConfig[] = { -+ -+ [CYBSP_WIFI_WL_REG_ON] = WIFI_WL_REG_ON, -+#ifdef CYBSP_WIFI_32K_CLK -+ [CYBSP_WIFI_32K_CLK] = WIFI_32K_CLK, -+#endif /* CYBSP_WIFI_32K_CLK */ -+ [CYBSP_LED1 ] = BSP_LED1, -+ [CYBSP_LED2 ] = BSP_LED2, -+ [CYBSP_WIFI_SDIO_CMD] = WIFI_SDIO_CMD, -+ [CYBSP_WIFI_SDIO_CLK] = WIFI_SDIO_CLK, -+ [CYBSP_WIFI_SDIO_D0 ] = WIFI_SDIO_D0, -+ [CYBSP_WIFI_SDIO_D1 ] = WIFI_SDIO_D1, -+ [CYBSP_WIFI_SDIO_D2 ] = WIFI_SDIO_D2, -+ [CYBSP_WIFI_SDIO_D3 ] = WIFI_SDIO_D3, -+ [CYBSP_SDIO_OOB_IRQ ] = WIFI_SDIO_OOB_IRQ //VIKR -+}; -+ -+void Cy_SysLib_Delay(uint32_t milliseconds) -+{ -+ thread_sleep_for(milliseconds); - } - --int wiced_filesystem_file_seek(int* fd, uint32_t offset) { -- if (*fd == -1) { -- return WHD_BADARG; -- } -- lseek(*fd, offset, SEEK_SET); -- return WHD_SUCCESS; -+void Cy_SysLib_DelayUs(uint16_t microseconds) -+{ -+ wait_us(microseconds); - } - --int wiced_filesystem_file_read(int* fd, void *buffer, uint32_t maxsize, uint32_t* size) { -- if (*fd == -1) { -- return WHD_BADARG; -- } -- *size = read(*fd, buffer, maxsize); -- return WHD_SUCCESS; -+void cyhal_system_delay_ms(uint32_t milliseconds) -+{ -+ Cy_SysLib_Delay(milliseconds); - } - --int wiced_filesystem_file_close(int* fd) { -- if (*fd == -1) { -- return WHD_BADARG; -- } -- close(*fd); -- return WHD_SUCCESS; -+cyhal_sdio_t *cybsp_get_wifi_sdio_obj(void) -+{ -+ return &sdio_obj; - } -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_utils.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_utils.h -index 30a99344c1..db8c143f36 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_utils.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cy_utils.h -@@ -33,6 +33,8 @@ - - #pragma once - -+#include "stdint.h" -+ - #if defined(__cplusplus) - extern "C" { - #endif -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp.h -new file mode 100644 -index 0000000000..06226f327b ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp.h -@@ -0,0 +1,50 @@ -+/***************************************************************************//** -+* \file cybsp.h -+* -+* \brief -+* Basic API for setting up boards containing a Cypress MCU. -+* -+******************************************************************************** -+* \copyright -+* Copyright 2018-2020 Cypress Semiconductor Corporation -+* SPDX-License-Identifier: Apache-2.0 -+* -+* Licensed under the Apache License, Version 2.0 (the "License"); -+* you may not use this file except in compliance with the License. -+* You may obtain a copy of the License at -+* -+* http://www.apache.org/licenses/LICENSE-2.0 -+* -+* Unless required by applicable law or agreed to in writing, software -+* distributed under the License is distributed on an "AS IS" BASIS, -+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+* See the License for the specific language governing permissions and -+* limitations under the License. -+*******************************************************************************/ -+ -+#pragma once -+ -+#include "cy_result.h" -+#include "cyhal_sdio.h" -+ -+#if defined(__cplusplus) -+extern "C" { -+#endif -+ -+/** -+* \addtogroup group_bsp_functions Functions -+* \{ -+*/ -+ -+/** -+ * \brief Get the initialized sdio object used for communicating with the WiFi Chip. -+ * \note This function should only be called after cybsp_init(); -+ * \returns The initialized sdio object. -+ */ -+cyhal_sdio_t* cybsp_get_wifi_sdio_obj(void); -+ -+/** \} group_bsp_functions */ -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.c -deleted file mode 100644 -index a169f3fcff..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.c -+++ /dev/null -@@ -1,219 +0,0 @@ --/***************************************************************************//** --* \file cybsp_wifi.c --* --* \brief --* Provides utility functions that are used by board support packages. --* --******************************************************************************** --* \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation --* SPDX-License-Identifier: Apache-2.0 --* --* Licensed under the Apache License, Version 2.0 (the "License"); --* you may not use this file except in compliance with the License. --* You may obtain a copy of the License at --* --* http://www.apache.org/licenses/LICENSE-2.0 --* --* Unless required by applicable law or agreed to in writing, software --* distributed under the License is distributed on an "AS IS" BASIS, --* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --* See the License for the specific language governing permissions and --* limitations under the License. --*******************************************************************************/ -- --#include "cy_network_buffer.h" --#include "cyabs_rtos.h" --#include "whd_types.h" --#include "whd_config.h" --#include "whd_wifi_api.h" --#include "cyhal_sdio.h" -- --#if defined(__cplusplus) --extern "C" { --#endif -- --static whd_driver_t whd_drv; -- --static whd_buffer_funcs_t buffer_ops = --{ -- .whd_host_buffer_get = cy_host_buffer_get, -- .whd_buffer_release = cy_buffer_release, -- .whd_buffer_get_current_piece_data_pointer = cy_buffer_get_current_piece_data_pointer, -- .whd_buffer_get_current_piece_size = cy_buffer_get_current_piece_size, -- .whd_buffer_set_size = cy_buffer_set_size, -- .whd_buffer_add_remove_at_front = cy_buffer_add_remove_at_front, --}; -- --static whd_netif_funcs_t netif_ops = --{ -- .whd_network_process_ethernet_data = cy_network_process_ethernet_data, --}; -- --//TODO: Need to use resource implemenatation from abstraction layer. --extern whd_resource_source_t resource_ops; -- --typedef enum --{ -- CYBSP_WIFI_WL_REG_ON, -- CYBSP_WIFI_32K_CLK, -- CYBSP_LED1, -- CYBSP_LED2, -- CYBSP_WIFI_SDIO_CMD, -- CYBSP_WIFI_SDIO_CLK, -- CYBSP_WIFI_SDIO_D0, -- CYBSP_WIFI_SDIO_D1, -- CYBSP_WIFI_SDIO_D2, -- CYBSP_WIFI_SDIO_D3, -- CYBSP_SDIO_OOB_IRQ, -- CYBSP_WIFI_MAX, --} wwd_sdio_pin_t; -- --/* Edit Pin configuration */ --const pinconfig_t PinConfig[]={ -- -- [CYBSP_WIFI_WL_REG_ON] = WIFI_WL_REG_ON, --#ifdef CYBSP_WIFI_32K_CLK -- [CYBSP_WIFI_32K_CLK] = WIFI_32K_CLK, --#endif /* CYBSP_WIFI_32K_CLK */ -- [CYBSP_LED1 ] = BSP_LED1, -- [CYBSP_LED2 ] = BSP_LED2, -- [CYBSP_WIFI_SDIO_CMD] = WIFI_SDIO_CMD, -- [CYBSP_WIFI_SDIO_CLK] = WIFI_SDIO_CLK, -- [CYBSP_WIFI_SDIO_D0 ] = WIFI_SDIO_D0, -- [CYBSP_WIFI_SDIO_D1 ] = WIFI_SDIO_D1, -- [CYBSP_WIFI_SDIO_D2 ] = WIFI_SDIO_D2, -- [CYBSP_WIFI_SDIO_D3 ] = WIFI_SDIO_D3, -- [CYBSP_SDIO_OOB_IRQ ] = WIFI_SDIO_OOB_IRQ //VIKR --}; -- --whd_sdio_config_t sdio_config= --{ -- /* Bus config */ -- .sdio_1bit_mode = false, /**< Default is false, means SDIO operates under 4 bit mode */ -- .high_speed_sdio_clock = false, /**< Default is false, means SDIO operates in normal clock rate */ -- .oob_config = { -- /**< Out-of-band interrupt configuration (required when bus can sleep) */ -- .host_oob_pin = CYBSP_SDIO_OOB_IRQ, /**< Host-side GPIO pin selection CYHAL_NC_PIN_VALUE or CYBSP_SDIO_OOB_IRQ */ -- .dev_gpio_sel = 0, /**< WiFi device-side GPIO pin selection (must be zero) */ -- .is_falling_edge = true, /**< Interrupt trigger (polarity) */ -- .intr_priority = 0, /**< OOB interrupt priority */ -- } --}; -- --cy_rslt_t sdio_enumerate( cyhal_sdio_t *sdhc_obj ) --{ -- cy_rslt_t result; -- uint32_t loop_count = 0; -- uint32_t data = 0; -- do -- { -- /* Send CMD0 to set it to idle state in SDIO_BYTE_MODE, SDIO_1B_BLOCK */ -- cyhal_sdio_send_cmd( sdhc_obj, CYHAL_WRITE, CYHAL_SDIO_CMD_GO_IDLE_STATE, 0,NULL ); -- -- /* CMD5. */ -- cyhal_sdio_send_cmd( sdhc_obj, CYHAL_READ, CYHAL_SDIO_CMD_IO_SEND_OP_COND, 0,NULL); -- -- /* Send CMD3 to get RCA. */ -- result = cyhal_sdio_send_cmd(sdhc_obj, CYHAL_READ, CYHAL_SDIO_CMD_SEND_RELATIVE_ADDR,0, &data ); -- loop_count++; -- if ( loop_count >= (uint32_t) SDIO_ENUMERATION_TIMEOUT_MS ) -- { -- return -1; -- } -- -- } while ( ( result != CY_RSLT_SUCCESS ) && ( cy_rtos_delay_milliseconds( (uint32_t) 1 ), ( 1 == 1 ) ) ); -- /* If you're stuck here, check the platform matches your hardware */ -- -- /* Send CMD7 with the returned RCA to select the card */ -- cyhal_sdio_send_cmd(sdhc_obj, CYHAL_WRITE, CYHAL_SDIO_CMD_SELECT_CARD,data, &data); -- return result; --} -- --cy_rslt_t whd_init_hardware_sdio(cyhal_sdio_t *sdhc_obj) --{ -- /* WiFi no power */ -- cy_rslt_t result = cyhal_gpio_init(CYBSP_WIFI_WL_REG_ON, CYHAL_GPIO_DIR_OUTPUT, CYHAL_GPIO_DRIVE_PULLUP,0); -- -- #ifdef CYBSP_WIFI_32K_CLK -- result = cyhal_gpio_init(CYBSP_WIFI_32K_CLK, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_PULLUP,0); -- cyhal_gpio_write(CYBSP_WIFI_32K_CLK, false); --#endif -- -- if(result == CY_RSLT_SUCCESS) -- { -- /* Init SDIO Host */ -- result = cyhal_sdio_init(sdhc_obj, CYBSP_WIFI_SDIO_CMD, CYBSP_WIFI_SDIO_CLK, CYBSP_WIFI_SDIO_D0, CYBSP_WIFI_SDIO_D1, CYBSP_WIFI_SDIO_D2, CYBSP_WIFI_SDIO_D3);; -- -- if(result == CY_RSLT_SUCCESS) -- { -- /* WiFi put power */ -- cyhal_gpio_write(CYBSP_WIFI_WL_REG_ON, true); -- osDelay(WLAN_POWER_UP_DELAY_MS); -- } -- result=sdio_enumerate(sdhc_obj); -- -- if(result == CY_RSLT_SUCCESS) sdio_enable_high_speed(); -- -- } -- return result; --} -- --static cy_rslt_t init_sdio_bus(whd_driver_t* drv, cyhal_sdio_t *sdhc_obj) --{ -- cy_rslt_t res = whd_init_hardware_sdio(sdhc_obj); -- if (res != CY_RSLT_SUCCESS) { -- return res; -- } -- return whd_bus_sdio_attach(*drv, &sdio_config, sdhc_obj); --} -- --cyhal_sdio_t sdhc_obj; -- --cy_rslt_t cybsp_wifi_init_primary(whd_interface_t* interface) --{ -- whd_init_config_t whd_init_config; -- whd_init_config.thread_stack_size = (uint32_t)WHD_THREAD_STACK_SIZE; -- whd_init_config.thread_stack_start = NULL; -- whd_init_config.thread_priority = (uint32_t)WHD_THREAD_PRIORITY; -- whd_init_config.country = WHD_COUNTRY; -- -- cy_rslt_t result = whd_init(&whd_drv, &whd_init_config, &resource_ops, &buffer_ops, &netif_ops); -- if(result == CY_RSLT_SUCCESS) -- { -- result = init_sdio_bus(&whd_drv, &sdhc_obj); -- if(result == CY_RSLT_SUCCESS) -- { -- result = whd_wifi_on(whd_drv, interface); -- } -- } -- return result; --} -- --cy_rslt_t cybsp_wifi_init_secondary(whd_interface_t* interface, whd_mac_t* mac_address) --{ -- return whd_add_secondary_interface(whd_drv, mac_address, interface); --} -- --cy_rslt_t cybsp_wifi_deinit(whd_interface_t interface) --{ -- cy_rslt_t result = whd_wifi_off(interface); -- if(result == CY_RSLT_SUCCESS) -- { -- result = whd_deinit(interface); -- if(result == CY_RSLT_SUCCESS) -- { -- cyhal_gpio_free(CYBSP_WIFI_WL_REG_ON); -- } -- } -- return result; --} -- --whd_driver_t cybsp_get_wifi_driver(void) --{ -- return whd_drv; --} -- --#if defined(__cplusplus) --} --#endif -\ No newline at end of file -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.h -deleted file mode 100644 -index 31bfc82566..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cybsp_wifi.h -+++ /dev/null -@@ -1,109 +0,0 @@ --/***************************************************************************//** --* \file cybsp_wifi.h --* --* \brief --* Basic abstraction layer for dealing with boards containing a Cypress MCU. This --* API provides convenience methods for initializing and manipulating different --* hardware found on the board. --* --******************************************************************************** --* \copyright --* Copyright 2018-2019 Cypress Semiconductor Corporation --* SPDX-License-Identifier: Apache-2.0 --* --* Licensed under the Apache License, Version 2.0 (the "License"); --* you may not use this file except in compliance with the License. --* You may obtain a copy of the License at --* --* http://www.apache.org/licenses/LICENSE-2.0 --* --* Unless required by applicable law or agreed to in writing, software --* distributed under the License is distributed on an "AS IS" BASIS, --* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. --* See the License for the specific language governing permissions and --* limitations under the License. --*******************************************************************************/ -- --/** --* \addtogroup group_bsp_wifi WiFi --* \{ --* Basic abstraction layer for dealing with boards containing a Cypress MCU. This --* API provides convenience methods for initializing and manipulating different --* hardware found on the board. --* --* \defgroup group_bsp_wifi_macros Macros --* \defgroup group_bsp_wifi_functions Functions --*/ --#pragma once -- --#include "cy_result.h" --#include "whd_wifi_api.h" -- --#if defined(__cplusplus) --extern "C" { --#endif -- --/** --* \addtogroup group_bsp_wifi_macros --* \{ --*/ -- --/** Initialization of the WiFi driver failed. */ --#define CYBSP_RSLT_WIFI_INIT_FAILED (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_BSP, 4)) -- --/** SDIO enumeration failed. */ --#define CYBSP_RSLT_WIFI_SDIO_ENUM_TIMEOUT (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_BSP, 5)) -- --/** \} group_bsp_board_macros */ -- --/** --* \addtogroup group_bsp_wifi_functions --* \{ --*/ -- --/** Initializes the primary interface for the WiFi driver on the board. This function -- * does the following -- * 1) Initializes the WiFi driver. -- * 2) Turns on the WiFi chip. -- * -- * @note This function cannot be called multiple times. The user needs to first de-initialize -- * before calling this function again. -- * -- * @param[out] interface Interface to be initialized -- * @return CY_RSLT_SUCCESS for successful initialization or error if initialization failed. -- */ --cy_rslt_t cybsp_wifi_init_primary(whd_interface_t* interface); -- --/** This function initializes and adds a secondary interface to the WiFi driver. -- * @note This function does not initialize the WiFi driver or turn on the WiFi chip. -- * That is required to be done by the primary interface -- * -- * @param[out] interface Interface to be initialized -- * @param[in] mac_address Mac address for secondary interface -- * @return CY_RSLT_SUCCESS for successful initialization or error if initialization failed. -- */ --cy_rslt_t cybsp_wifi_init_secondary(whd_interface_t* interface, whd_mac_t* mac_address); -- --/** De-initializes all WiFi interfaces and the WiFi driver. This function does the following -- * 1) Deinitializes all WiFi interfaces and WiFi driver. -- * 2) Turns off the WiFi chip. -- * -- * @param[in] interface Interface to be de-initialized. -- * @return CY_RSLT_SUCCESS for successful de-initialization or error if de-initialization failed. -- */ --cy_rslt_t cybsp_wifi_deinit(whd_interface_t interface); -- --/** Gets the wifi driver instance initialized by the driver. This should only be called -- * after the interface is initialized by cybsp_wifi_init_primary(). -- * -- * @return Wifi driver instance pointer. -- */ --whd_driver_t cybsp_get_wifi_driver(void); -- --/** \} group_bsp_wifi_functions */ -- --#ifdef __cplusplus --} --#endif /* __cplusplus */ -- --/** \} group_bsp_wifi */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_version.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cycfg.h -similarity index 79% -rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_version.h -rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cycfg.h -index 79a39ee3e9..7a3dee0ca9 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/inc/whd_version.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cycfg.h -@@ -1,5 +1,5 @@ - /* -- * Copyright 2020 Cypress Semiconductor Corporation -+ * Copyright 2020 Arduino SA - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); -@@ -15,6 +15,6 @@ - * limitations under the License. - */ - --#define WHD_VERSION "v1.91.2" --#define WHD_BRANCH "v1.91.2" --#define WHD_DATE "2020-06-25 02:15:47 -0500" -+/** @file -+ * Empty file to be compliant with Cypress COMPONENT_WHD -+ */ -\ No newline at end of file -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal.h -new file mode 100644 -index 0000000000..e56be0e013 ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal.h -@@ -0,0 +1,52 @@ -+/* -+ * Copyright 2020 Arduino SA -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+ -+/** @file -+ * Provides cyhal porting to generic mbed APIs -+ */ -+#include "whd_config.h" -+#include "cyhal_hw_types.h" -+#include "cyhal_gpio.h" -+#include "cyhal_sdio.h" -+ -+#if defined(__cplusplus) -+extern "C" { -+#endif -+ -+typedef enum -+{ -+ CYBSP_WIFI_WL_REG_ON, -+ CYBSP_WIFI_32K_CLK, -+ CYBSP_LED1, -+ CYBSP_LED2, -+ CYBSP_WIFI_SDIO_CMD, -+ CYBSP_WIFI_SDIO_CLK, -+ CYBSP_WIFI_SDIO_D0, -+ CYBSP_WIFI_SDIO_D1, -+ CYBSP_WIFI_SDIO_D2, -+ CYBSP_WIFI_SDIO_D3, -+ CYBSP_SDIO_OOB_IRQ, -+ CYBSP_WIFI_MAX, -+} wwd_sdio_pin_t; -+ -+void cyhal_system_delay_ms(uint32_t milliseconds); -+cy_rslt_t sdio_enable_high_speed(void); -+ -+#if defined(__cplusplus) -+} -+#endif -+ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_gpio.cpp b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_gpio.cpp -new file mode 100644 -index 0000000000..930764c77f ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_gpio.cpp -@@ -0,0 +1,104 @@ -+/* -+ * Copyright 2020 Arduino SA -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+ -+/** @file -+ * Provides the porting layer for STM32 GPIOs on WHD driver -+ */ -+ -+#include -+#include "cyhal.h" -+#include "cybsp.h" -+#include "mbed.h" -+#include "wiced_filesystem.h" -+ -+extern pinconfig_t PinConfig[]; -+ -+/******************************************************************************* -+* Internal -+*******************************************************************************/ -+static mbed::InterruptIn *oob_irq; -+static cyhal_gpio_event_t oob_event = CYHAL_GPIO_IRQ_FALL; -+static cyhal_gpio_event_callback_t oob_handler; -+static void *oob_handler_arg; -+ -+/******************************************************************************* -+* Internal Interrrupt Service Routine -+*******************************************************************************/ -+static void cb() -+{ -+ oob_handler(oob_handler_arg, oob_event); -+} -+ -+/******************************************************************************* -+* HAL Implementation -+*******************************************************************************/ -+cy_rslt_t cyhal_gpio_init(cyhal_gpio_t pin, cyhal_gpio_direction_t direction, cyhal_gpio_drive_mode_t drvMode, bool initVal) -+{ -+ cy_rslt_t ret = CY_RSLT_SUCCESS; -+ -+ // Workaround to enable GPIOJ clock -+ if (pin == CYBSP_WIFI_WL_REG_ON) { -+ __HAL_RCC_GPIOJ_CLK_ENABLE(); -+ // Ensure FS and BlockDevice are initialized on time if needed -+ wiced_filesystem_init(); -+ } -+ // Ignore the parameter and take the pin config directly from a static array defintions -+ HAL_GPIO_Init(PinConfig[pin].port, &PinConfig[pin].config); -+ if (direction == CYHAL_GPIO_DIR_OUTPUT) { -+ HAL_GPIO_WritePin(PinConfig[pin].port, PinConfig[pin].config.Pin, (initVal) ? GPIO_PIN_SET : GPIO_PIN_RESET); -+ } -+ // Workaround to initialize sdio interface without cypress bsp init -+ if (pin == CYBSP_WIFI_WL_REG_ON) { -+ cyhal_sdio_t *sdio_p = cybsp_get_wifi_sdio_obj(); -+ ret = cyhal_sdio_init(sdio_p, CYBSP_WIFI_SDIO_CMD, CYBSP_WIFI_SDIO_CLK, CYBSP_WIFI_SDIO_D0, CYBSP_WIFI_SDIO_D1, CYBSP_WIFI_SDIO_D2, CYBSP_WIFI_SDIO_D3); -+ } -+ return ret; -+} -+ -+void cyhal_gpio_write(cyhal_gpio_t pin, bool value) -+{ -+ HAL_GPIO_WritePin(PinConfig[pin].port, PinConfig[pin].config.Pin, (value) ? GPIO_PIN_SET : GPIO_PIN_RESET); -+} -+ -+void cyhal_gpio_register_callback(cyhal_gpio_t pin, cyhal_gpio_event_callback_t handler, void *handler_arg) -+{ -+ if (handler && handler_arg && (oob_irq == NULL)) { -+ oob_irq = new mbed::InterruptIn(PJ_5); -+ oob_handler = handler; -+ oob_handler_arg = handler_arg; -+ } -+} -+ -+void cyhal_gpio_enable_event(cyhal_gpio_t pin, cyhal_gpio_event_t event, uint8_t intr_priority, bool enable) -+{ -+ oob_event = event; -+ if (enable) { -+ if (event == CYHAL_GPIO_IRQ_RISE) { -+ oob_irq->rise(cb); -+ } -+ if (event == CYHAL_GPIO_IRQ_FALL) { -+ oob_irq->fall(cb); -+ } -+ } else if (oob_irq != NULL) { -+ delete oob_irq; -+ } -+} -+ -+void cyhal_gpio_free(cyhal_gpio_t pin) -+{ -+ // Do nothing -+} -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_hw_types.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_hw_types.h -similarity index 78% -rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_hw_types.h -rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_hw_types.h -index 0436834aff..1f872abb37 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/interface/cyhal_hw_types.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_hw_types.h -@@ -41,6 +41,7 @@ - #pragma once - #include - #include "stm32h7xx_hal.h" -+#include "PinNames.h" - - /* - #include "TODO: Port specific header file" -@@ -50,6 +51,14 @@ - extern "C" { - #endif - -+ -+#ifndef CYHAL_ISR_PRIORITY_DEFAULT -+/** Priority that is applied by default to all drivers when initalized. Priorities can be -+ * overridden on each driver as part of enabling events. -+ */ -+#define CYHAL_ISR_PRIORITY_DEFAULT (7) -+#endif -+ - /** - * \addtogroup group_hal_hw_types_data_structures - * \{ -@@ -71,6 +80,18 @@ typedef struct - void *div_type; - } cyhal_clock_divider_t; - -+/** Clock object */ -+typedef struct -+{ -+ //For backwards compatibility with cyhal_clock_divider_t only. Do not use going forward. -+ int div_type; /*!< Deprecated */ -+ uint8_t div_num; /*!< Deprecated */ -+ //End BWC items -+ int block; -+ uint8_t channel; -+ bool reserved; -+} cyhal_clock_t; -+ - /** SDIO object */ - typedef void* *cyhal_sdio_t; - -@@ -81,23 +102,11 @@ typedef struct - void *empty; - } cyhal_spi_t; - -- --#include "whd_debug.h" -- --#if defined(WPRINT_ENABLE_WHD_ERROR) || defined(WPRINT_ENABLE_WHD_INFO) || defined(WPRINT_ENABLE_WHD_DEBUG) --/** \} group_hal_hw_types_data_structures */ --#define PRINTF(...) do { \ -- (void) printf(__VA_ARGS__); \ -- } while (0) --#else --#define PRINTF(...) --#endif -- - #include "whd_config.h" -+#include "whd_debug.h" - - #if defined(__cplusplus) - } - #endif /* __cplusplus */ - - /** \} group_hal_hw_types */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_sdio.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_sdio.c -new file mode 100644 -index 0000000000..34aa5498e1 ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_sdio.c -@@ -0,0 +1,483 @@ -+/* -+ * Copyright 2020 Cypress Semiconductor Corporation -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+ -+/** @file -+ * Provides the porting layer for STM32 SDIO on WHD driver -+ */ -+ -+#include -+#include -+#include "whd_thread.h" -+#include "bus_protocols/whd_bus_sdio_protocol.h" -+#include "cyabs_rtos.h" -+#include "cyhal_sdio.h" -+ -+#define SDIO_RESPONSE_SHORT SDMMC_RESPONSE_SHORT -+#define SDIO_WAIT_NO SDMMC_WAIT_NO -+#define SDIO_CPSM_ENABLE SDMMC_CPSM_ENABLE -+#define SDIO_CMDTRANS SDMMC_CMD_CMDTRANS -+#define SDIO_FLAG_CMDACT (SDMMC_STA_CPSMACT | SDMMC_STA_DPSMACT) -+#define SDIO_TRANSFER_DIR_TO_SDIO SDMMC_TRANSFER_DIR_TO_SDMMC -+#define SDIO_TRANSFER_DIR_TO_CARD SDMMC_TRANSFER_DIR_TO_CARD -+#define SDIO_TRANSFER_MODE_BLOCK SDMMC_TRANSFER_MODE_BLOCK -+#define SDIO_DPSM_ENABLE SDMMC_DPSM_ENABLE -+#define SDIO_DPSM_DISABLE SDMMC_DPSM_DISABLE -+#define SDIO_DCTRL_SDIOEN SDMMC_DCTRL_SDIOEN /* 1 << 11 */ -+#define SDIO_DCTRL_DTMODE_1 SDMMC_DCTRL_DTMODE_1 /* 1<<3 */ -+#define SDIO_STA_DTIMEOUT SDMMC_STA_DTIMEOUT -+#define SDIO_STA_CTIMEOUT SDMMC_STA_CTIMEOUT -+#define SDIO_STA_CCRCFAIL SDMMC_STA_CCRCFAIL -+#define SDIO_STA_DCRCFAIL SDMMC_STA_DCRCFAIL -+#define SDIO_STA_TXUNDERR SDMMC_STA_TXUNDERR -+#define SDIO_STA_RXOVERR SDMMC_STA_RXOVERR -+#define SDIO_STA_TXACT SDMMC_STA_CPSMACT -+#define SDIO_STA_RXACT SDMMC_STA_DPSMACT -+#define SDIO_STA_CMDREND SDMMC_STA_CMDREND -+#define SDIO_STA_CMDSENT SDMMC_STA_CMDSENT -+#define SDIO_CMD_CMDTRANS SDMMC_CMD_CMDTRANS -+#define SDIO SDMMC1 -+ -+#define COMMAND_FINISHED_CMD52_TIMEOUT_LOOPS (100000) -+#define BUS_LEVEL_MAX_RETRIES 10 -+ -+#define SDIO_CMD_5 5 -+#define SDIO_CMD_53 53 -+ -+#define SDIO_STA_STBITERR ((uint32_t)0x00000200) /*!b)?a:b -+ -+extern pinconfig_t PinConfig[]; -+extern SD_HandleTypeDef hsd; -+ -+/* for debug prints only */ -+//static int num = 0; -+ -+static uint32_t dctrl; -+ -+static whd_driver_t whd_handler; -+static cyhal_sdio_irq_handler_t sdio_irq_handler; -+ -+static uint8_t temp_dma_buffer[2048] __attribute__((aligned(8))); -+static uint8_t *user_data; -+static uint32_t user_data_size; -+static uint8_t *dma_data_source; -+static uint32_t dma_transfer_size; -+static cyhal_transfer_t current_transfer_direction; -+ -+static cy_semaphore_t sdio_transfer_finished_semaphore; -+static volatile uint32_t sdio_transfer_failed = 0; -+static volatile uint32_t irqstatus = 0; -+static int current_command = 0; -+ -+static cy_rslt_t sdio_enable_high_speed(void) -+{ -+ SDMMC_InitTypeDef sdio_init_structure; -+ -+ sdio_init_structure.ClockDiv = SDMMC_HSpeed_CLK_DIV; -+ sdio_init_structure.ClockEdge = SDMMC_CLOCK_EDGE_RISING; -+ sdio_init_structure.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; -+ sdio_init_structure.BusWide = SDMMC_BUS_WIDE_4B; -+ sdio_init_structure.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE; -+ -+ SDMMC_Init(SDMMC1, sdio_init_structure); -+ return CY_RSLT_SUCCESS; -+} -+ -+static uint32_t find_optimal_block_size(uint32_t data_size) -+{ -+ if (data_size > (uint32_t) 256) { -+ return 512; -+ } -+ if (data_size > (uint32_t) 128) { -+ return 256; -+ } -+ if (data_size > (uint32_t) 64) { -+ return 128; -+ } -+ if (data_size > (uint32_t) 32) { -+ return 64; -+ } -+ if (data_size > (uint32_t) 16) { -+ return 32; -+ } -+ if (data_size > (uint32_t) 8) { -+ return 16; -+ } -+ if (data_size > (uint32_t) 4) { -+ return 8; -+ } -+ if (data_size > (uint32_t) 2) { -+ return 4; -+ } -+ -+ return 4; -+} -+ -+static uint32_t sdio_get_blocksize(uint32_t blocksize) -+{ -+ uint32_t n = 0; -+ blocksize >>= 1; -+ while (blocksize) { -+ n++; -+ blocksize >>= 1; -+ } -+ n <<= 4; -+ return n; -+} -+ -+static void sdio_prepare_data_transfer(cyhal_transfer_t direction, uint32_t block_size, uint8_t *data, uint16_t data_size) -+{ -+ /* Setup a single transfer using the temp buffer */ -+ user_data = data; -+ user_data_size = data_size; -+ dma_transfer_size = (uint32_t)(((data_size + (uint16_t) block_size - 1) / (uint16_t) block_size) * (uint16_t) block_size); -+ -+ if (direction == CYHAL_WRITE) { -+ -+#if !(defined(DUAL_CORE) && defined(CORE_CM4)) -+ SCB_CleanDCache_by_Addr((uint32_t *)dma_data_source, data_size + 32); -+#endif -+ memcpy(temp_dma_buffer, data, data_size); -+ dma_data_source = temp_dma_buffer; -+ } else { -+ dma_data_source = (uint8_t *)temp_dma_buffer; -+ //VIKR -+ //memset(dma_data_source,0x12,data_size); -+ -+#if !(defined(DUAL_CORE) && defined(CORE_CM4)) -+ /* Cache-Invalidate the output from DMA */ -+ SCB_CleanDCache_by_Addr((uint32_t *)dma_data_source, data_size + 32); -+#endif -+ } -+ -+ SDIO->DTIMER = (uint32_t) 0xFFFFFFFF; -+ SDIO->DLEN = dma_transfer_size; -+ dctrl = sdio_get_blocksize(block_size) | ((direction == CYHAL_READ) ? SDIO_TRANSFER_DIR_TO_SDIO : SDIO_TRANSFER_DIR_TO_CARD) | SDIO_TRANSFER_MODE_BLOCK | SDIO_DPSM_DISABLE | SDIO_DCTRL_SDIOEN; -+ SDIO->DCTRL = dctrl; -+ -+ SDMMC1->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; -+ SDMMC1->IDMABASE0 = (uint32_t) dma_data_source; -+} -+ -+static void sdio_enable_bus_irq(void) -+{ -+ SDMMC1->MASK = SDMMC_IT_RXOVERR | SDMMC_IT_TXUNDERR | SDMMC_IT_DATAEND | SDMMC_IT_CMDREND | SDMMC_IT_CMDSENT; -+} -+ -+void SDMMC1_IRQHandler(void) -+{ -+ uint32_t intstatus = SDIO->STA; -+ -+ irqstatus = intstatus; -+ //VIKR | SDIO_STA_STBITERR ) -+ if ((intstatus & (SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVERR)) != 0) { -+ WPRINT_WHD_DEBUG(("sdio error flagged\n")); -+ sdio_transfer_failed = intstatus; -+ SDIO->ICR = (uint32_t) 0xffffffff; -+ cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -+ } else { -+ if ((intstatus & (SDMMC_STA_CMDREND | SDMMC_STA_CMDSENT)) != 0) { -+ if ((SDMMC1->RESP1 & 0x800) != 0) { -+ sdio_transfer_failed = irqstatus; -+ cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -+ } -+ -+ /* Clear all command/response interrupts */ -+ SDMMC1->ICR = (SDMMC_STA_CMDREND | SDMMC_STA_CMDSENT); -+ } -+ -+ /* Check whether the external interrupt was triggered */ -+ if (intstatus & SDMMC_STA_SDIOIT) { -+ /* Clear the interrupt */ -+ SDMMC1->ICR = SDMMC_STA_SDIOIT; -+ /* Inform WICED WWD thread */ -+ sdio_irq_handler(whd_handler, CYHAL_SDIO_CARD_INTERRUPT); -+ } -+ -+ if (intstatus & SDMMC_STA_DATAEND) { -+ SDMMC1->ICR = SDMMC_STA_DATAEND; -+ SDMMC1->DLEN = 0; -+ SDMMC1->DCTRL = SDMMC_DCTRL_SDIOEN; -+ SDMMC1->IDMACTRL = SDMMC_DISABLE_IDMA; -+ SDMMC1->CMD = 0; -+ cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -+ } -+ } -+} -+ -+//void sdio_dma_irq(void) -+//{ -+// /* Clear interrupt */ -+// DMA2->LIFCR = (uint32_t)(0x3F << 22); -+// cy_rtos_set_semaphore(&sdio_transfer_finished_semaphore, WHD_TRUE); -+//} -+ -+cy_rslt_t cyhal_sdio_init(cyhal_sdio_t *obj, cyhal_gpio_t cmd, cyhal_gpio_t clk, cyhal_gpio_t data0, cyhal_gpio_t data1, cyhal_gpio_t data2, cyhal_gpio_t data3) -+{ -+ cy_rslt_t ret = CY_RSLT_SUCCESS; -+ -+ __HAL_RCC_GPIOC_CLK_ENABLE(); -+ __HAL_RCC_GPIOD_CLK_ENABLE(); -+ __HAL_RCC_SDMMC1_CLK_ENABLE(); -+ -+ HAL_GPIO_Init(PinConfig[cmd].port, &PinConfig[cmd].config); -+ HAL_GPIO_Init(PinConfig[clk].port, &PinConfig[clk].config); -+ HAL_GPIO_Init(PinConfig[data0].port, &PinConfig[data0].config); -+ HAL_GPIO_Init(PinConfig[data1].port, &PinConfig[data1].config); -+ HAL_GPIO_Init(PinConfig[data2].port, &PinConfig[data2].config); -+ HAL_GPIO_Init(PinConfig[data3].port, &PinConfig[data3].config); -+ -+ /* Reset SDIO Block */ -+ SDMMC_PowerState_OFF(SDMMC1); -+ __HAL_RCC_SDMMC1_FORCE_RESET(); -+ __HAL_RCC_SDMMC1_RELEASE_RESET(); -+ -+ /* Enable the SDIO Clock */ -+ __HAL_RCC_SDMMC1_CLK_ENABLE(); -+ -+#if !(defined(DUAL_CORE) && defined(CORE_CM4)) -+ /* Disable DCache for STM32H7 family */ -+ SCB_CleanDCache(); -+ SCB_DisableDCache(); -+#endif -+ -+ WPRINT_WHD_DEBUG(("in init: %p\n", sdio_transfer_finished_semaphore)); -+ -+ // Lower speed configuration -+ SDMMC_InitTypeDef sdio_init_structure; -+ -+ sdio_init_structure.ClockDiv = SDMMC_INIT_CLK_DIV; -+ sdio_init_structure.ClockEdge = SDMMC_CLOCK_EDGE_RISING; -+ sdio_init_structure.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; -+ sdio_init_structure.BusWide = SDMMC_BUS_WIDE_1B; -+ sdio_init_structure.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; -+ ret = SDMMC_Init(SDMMC1, sdio_init_structure); -+ ret |= SDMMC_PowerState_ON(SDMMC1); -+ ret |= SDMMC_SetSDMMCReadWaitMode(SDMMC1, SDMMC_READ_WAIT_MODE_CLK); -+ if (ret) { -+ return ret; -+ } -+ -+ /* Clear all SDIO interrupts */ -+ SDMMC1->ICR = (uint32_t) 0xffffffff; -+ -+ /* Turn on SDIO IRQ */ -+ /* Must be lower priority than the value of configMAX_SYSCALL_INTERRUPT_PRIORITY */ -+ /* otherwise FreeRTOS will not be able to mask the interrupt */ -+ /* keep in mind that ARMCM7 interrupt priority logic is inverted, the highest value */ -+ /* is the lowest priority */ -+ HAL_NVIC_EnableIRQ((IRQn_Type) SDMMC1_IRQn); -+ HAL_NVIC_SetPriority(SDMMC1_IRQn, 5, 0); -+ -+ WPRINT_WHD_DEBUG(("after enable sdio: %p\n", sdio_transfer_finished_semaphore)); -+ -+ if (cy_rtos_init_semaphore(&sdio_transfer_finished_semaphore, 1, 0) != WHD_SUCCESS) { -+ cy_rtos_deinit_semaphore(&sdio_transfer_finished_semaphore); -+ return -1; -+ } -+ -+ WPRINT_WHD_DEBUG(("cy_rtos_init_semaphore: %p\n", sdio_transfer_finished_semaphore)); -+ -+ return ret; -+} -+ -+void cyhal_sdio_free(cyhal_sdio_t *obj) -+{ -+ //TODO -+} -+ -+cy_rslt_t cyhal_sdio_configure(cyhal_sdio_t *obj, const cyhal_sdio_cfg_t *config) -+{ -+ return sdio_enable_high_speed(); -+} -+ -+cy_rslt_t cyhal_sdio_send_cmd(const cyhal_sdio_t *obj, cyhal_transfer_t direction, cyhal_sdio_command_t command, uint32_t argument, uint32_t *response) -+{ -+ uint32_t loop_count = 0; -+ cy_rslt_t result; -+ uint16_t attempts = 0; -+ uint32_t temp_sta; -+ -+ if (response != NULL) { -+ *response = 0; -+ } -+ current_command = 0; -+ -+restart: -+ SDIO->ICR = (uint32_t) 0xFFFFFFFF; -+ ++attempts; -+ -+ /* Check if we've tried too many times */ -+ if (attempts >= (uint16_t) BUS_LEVEL_MAX_RETRIES) { -+ /* WWD_SDIO_RETRIES_EXCEEDED */ -+ result = -1; -+ goto exit; -+ } -+ -+ /* Send the command */ -+ SDIO->ARG = argument; -+ SDIO->CMD = (uint32_t)(command | SDIO_RESPONSE_SHORT | SDIO_WAIT_NO | SDIO_CPSM_ENABLE); -+ loop_count = (uint32_t) COMMAND_FINISHED_CMD52_TIMEOUT_LOOPS; -+ do { -+ temp_sta = SDIO->STA; -+ loop_count--; -+ if (loop_count == 0 /*|| ((response != NULL) && ((temp_sta & SDIO_ERROR_MASK) != 0))*/) { -+ WPRINT_WHD_DEBUG(("Restart single access loop count %ld stat %lx\n", loop_count, temp_sta)); -+ HAL_Delay(10U); -+ goto restart; -+ } -+ } while ((temp_sta & SDIO_FLAG_CMDACT) != 0); -+ -+ if (response != NULL) { -+ *response = SDIO->RESP1; -+ } -+ result = CY_RSLT_SUCCESS; -+ -+exit: -+ if (result) { -+ WPRINT_WHD_ERROR(("SDIO->POWER %lx \n", SDIO->POWER)); -+ WPRINT_WHD_ERROR(("SDIO->CLKCR %lx \n", SDIO->CLKCR)); -+ WPRINT_WHD_ERROR(("result %lx \n", result)); -+ WPRINT_WHD_ERROR(("cyhal_sdio_send_cmd %s\n", (result == 0) ? "Passed" : "Failed")); -+ while (1); -+ } -+ SDMMC1->CMD = 0; -+ -+ //WPRINT_WHD_DEBUG(("%d %s cmd 0x%x arg 0x%x resp 0x%x\n",num++,(direction!=CYHAL_READ)?"Write":"Read",command,argument,(response)?*response:0)); -+ return result; -+} -+ -+cy_rslt_t cyhal_sdio_bulk_transfer(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t *data, uint16_t length, uint32_t *response) -+{ -+ cy_rslt_t result; -+ uint16_t attempts = 0; -+ uint32_t block_size = 64; -+ sdio_cmd_argument_t arg; -+ uint32_t cmd; -+ current_command = SDIO_CMD_53; -+ current_transfer_direction = direction; -+ arg.value = argument; -+ -+ sdio_enable_bus_irq(); -+ if (response != NULL) { -+ *response = 0; -+ } -+ -+restart: -+ sdio_transfer_failed = 0; -+ SDMMC1->ICR = (uint32_t) 0xFFFFFFFF; -+ ++attempts; -+ -+ /* Check if we've tried too many times */ -+ if (attempts >= (uint16_t) BUS_LEVEL_MAX_RETRIES) { -+ /* WWD_SDIO_RETRIES_EXCEEDED */ -+ WPRINT_WHD_ERROR(("Too much attempt\n")); -+ result = -1; -+ goto exit; -+ } -+ -+ /* Dodgy STM32 hack to set the CMD53 byte mode size to be the same as the block size */ -+ if (arg.cmd53.block_mode == 0) { -+ block_size = find_optimal_block_size(arg.cmd53.count); -+ if (block_size < SDIO_512B_BLOCK) { -+ arg.cmd53.count = block_size; -+ } else { -+ arg.cmd53.count = 0; -+ } -+ argument = arg.value; -+ } -+ -+ SDMMC1->CMD |= SDMMC_CMD_CMDTRANS; -+ -+ /* Prepare the SDIO for a data transfer */ -+ sdio_prepare_data_transfer(direction, block_size, (uint8_t *) data, (uint32_t) length); -+ -+ /* Send the command */ -+ //WPRINT_WHD_DEBUG(("%d bs=%d argument=%x\n",num++,block_size,argument)); -+ SDMMC1->ARG = argument; -+ cmd = (uint32_t)(SDIO_CMD_53 | SDMMC_RESPONSE_SHORT | SDMMC_WAIT_NO | SDMMC_CPSM_ENABLE | SDMMC_CMD_CMDTRANS); -+ SDMMC1->CMD = cmd; -+ -+ /* Wait for the whole transfer to complete */ -+ //WPRINT_WHD_DEBUG(("cy_rtos_get_semaphore: %d\n", sdio_transfer_finished_semaphore)); -+ result = cy_rtos_get_semaphore(&sdio_transfer_finished_semaphore, 50, WHD_FALSE); -+ -+ if (result != CY_RSLT_SUCCESS) { -+ WPRINT_WHD_ERROR(("failed getting semaphore\n")); -+ goto exit; -+ } -+ if (sdio_transfer_failed) { -+ WPRINT_WHD_DEBUG(("try again sdio_transfer_failed %"PRIu32" irq %"PRIu32"\n", sdio_transfer_failed, irqstatus)); -+ goto restart; -+ } -+ /* Check if there were any SDIO errors */ -+ if ((SDIO->STA & (SDIO_STA_DTIMEOUT | SDIO_STA_CTIMEOUT)) != 0) { -+ WPRINT_WHD_DEBUG(("sdio errors SDIO_STA_DTIMEOUT | SDIO_STA_CTIMEOUT\n")); -+ goto restart; -+ } else if (((SDIO->STA & (SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVERR)) != 0)) { -+ WPRINT_WHD_DEBUG(("sdio errors SDIO_STA_CCRCFAIL | SDIO_STA_DCRCFAIL | SDIO_STA_TXUNDERR | SDIO_STA_RXOVER \n")); -+ goto restart; -+ } -+ -+ if (direction == CYHAL_READ) { -+ memcpy(user_data, dma_data_source, (size_t) user_data_size); -+ } -+ -+ if (response != NULL) { -+ *response = SDIO->RESP1; -+ } -+ result = CY_RSLT_SUCCESS; -+ -+exit: -+ SDMMC1->CMD = 0; -+ -+ //WPRINT_WHD_DEBUG(("%d %s cmd 53 argument %lx datasize %d blocknumber 0x%x cmdis %lx %lu dctrl = %x\n", num++, (direction != CYHAL_READ) ? "Write" : "Read", argument, length, arg.cmd53.count, cmd, cmd, dctrl)); -+ -+ return result; -+} -+ -+cy_rslt_t cyhal_sdio_transfer_async(cyhal_sdio_t *obj, cyhal_transfer_t direction, uint32_t argument, const uint32_t *data, uint16_t length) -+{ -+ //TODO -+ return CYHAL_SDIO_RET_NO_SP_ERRORS; -+} -+ -+bool cyhal_sdio_is_busy(const cyhal_sdio_t *obj) -+{ -+ return false; -+} -+ -+cy_rslt_t cyhal_sdio_abort_async(const cyhal_sdio_t *obj) -+{ -+ //TODO -+ return CYHAL_SDIO_RET_NO_SP_ERRORS; -+} -+ -+void cyhal_sdio_register_callback(cyhal_sdio_t *obj, cyhal_sdio_irq_handler_t handler, void *handler_arg) -+{ -+ whd_handler = (whd_driver_t)handler_arg; -+ sdio_irq_handler = handler; -+} -+ -+void cyhal_sdio_enable_event(cyhal_sdio_t *obj, cyhal_sdio_irq_event_t event, uint8_t intr_priority, bool enable) -+{ -+ //TODO -+} -+ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_spi.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_spi.c -new file mode 100644 -index 0000000000..162c7a6801 ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_spi.c -@@ -0,0 +1,29 @@ -+/* -+ * Copyright 2020 Arduino SA -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+ -+/** @file -+ * Provides stubs for the WHD driver needed by ARMClang -+ */ -+ -+#include -+#include -+#include "cyhal_spi.h" -+ -+cy_rslt_t cyhal_spi_transfer(cyhal_spi_t *obj, const uint8_t *tx, size_t tx_length, uint8_t *rx, size_t rx_length, uint8_t write_fill) -+{ -+ // Do nothing -+} -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_system.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_system.h -new file mode 100644 -index 0000000000..7a3dee0ca9 ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/cyhal_system.h -@@ -0,0 +1,20 @@ -+/* -+ * Copyright 2020 Arduino SA -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+ -+/** @file -+ * Empty file to be compliant with Cypress COMPONENT_WHD -+ */ -\ No newline at end of file -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_clm.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_bd.h -similarity index 52% -rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_clm.h -rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_bd.h -index 168e34d5e7..578b2d9e4e 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_clm.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_bd.h -@@ -1,13 +1,13 @@ - /* -- * Copyright 2020 Cypress Semiconductor Corporation -+ * Copyright 2020 Arduino SA - * SPDX-License-Identifier: Apache-2.0 -- * -+ * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at -- * -+ * - * http://www.apache.org/licenses/LICENSE-2.0 -- * -+ * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@@ -16,30 +16,34 @@ - */ - - /** @file -- * Provides generic clm blob file download functionality -+ * Provides wiced fs porting to generic mbed APIs - */ --#ifndef _WHD_INTERNAL_CLM_H_ --#define _WHD_INTERNAL_CLM_H_ - --#include "whd.h" -+#pragma once -+ -+#include "whd_config.h" -+#include "BlockDevice.h" - - #ifdef __cplusplus - extern "C" { - #endif - - /****************************************************** --* Macros --******************************************************/ -- -- --/****************************************************** --* Function prototypes --******************************************************/ --whd_result_t whd_process_clm_data(whd_interface_t ifp); -+ * Type Definitions -+ ******************************************************/ -+ -+/** -+ * Mount the physical device -+ * -+ * This assumes that the device is ready to read/write immediately. -+ * -+ * @param[in] device - physical media to init -+ * @param[out] fs_handle_out - Receives the filesystem handle. -+ * -+ * @return WICED_SUCCESS on success -+ */ -+wiced_result_t wiced_filesystem_mount(mbed::BlockDevice *device, wiced_filesystem_handle_type_t fs_type, wiced_filesystem_t *fs_handle_out, const char *mounted_name); - - #ifdef __cplusplus - } /*extern "C" */ - #endif -- --#endif /* ifndef _WHD_INTERNAL_CLM_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.cpp b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.cpp -new file mode 100644 -index 0000000000..bea07abdef ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.cpp -@@ -0,0 +1,220 @@ -+/* -+ * Copyright 2020 Arduino SA -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+ -+/** @file -+ * Provides wiced fs porting to generic mbed APIs -+ */ -+ -+#include -+#include -+#include -+#include -+#include "sockets.h" -+#include "resources.h" -+#include "wiced_filesystem.h" -+#include "wiced_bd.h" -+#include "QSPIFBlockDevice.h" -+#include "MBRBlockDevice.h" -+#include "FATFileSystem.h" -+ -+#define WIFI_DEFAULT_FIRMWARE_PATH "/wlan/4343WA1.BIN" -+#define WIFI_DEFAULT_MOUNT_NAME "wlan" -+#define WIFI_DEFAULT_PARTITION 1 -+#define WIFI_DEFAULT_FS 0 -+ -+BlockDevice *qspi_bd = NULL; -+MBRBlockDevice *mbr_bd = NULL; -+FATFileSystem *wifi_fs = NULL; -+ -+wiced_filesystem_t resource_fs_handle; -+ -+MBED_WEAK BlockDevice *BlockDevice::get_default_instance() -+{ -+ static QSPIFBlockDevice default_bd(PD_11, PD_12, PF_7, PD_13, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000); -+ return &default_bd; -+} -+ -+MBED_WEAK void wiced_filesystem_mount_error(void) -+{ -+ WPRINT_WHD_ERROR(("Failed to mount the filesystem containing the WiFi firmware.\n\r")); -+ whd_print_logbuffer(); -+ while (1) {} -+} -+ -+MBED_WEAK void wiced_filesystem_firmware_error(void) -+{ -+ WPRINT_WHD_ERROR(("Please run the \"WiFiFirmwareUpdater\" sketch once to install the WiFi firmware.\n\r")); -+ whd_print_logbuffer(); -+ while (1) {} -+} -+ -+MBED_WEAK wiced_result_t whd_firmware_check_hook(const char *mounted_name, int mount_err) -+{ -+ DIR *dir; -+ struct dirent *ent; -+ std::string dir_name(mounted_name); -+ if (mount_err) { -+ wiced_filesystem_mount_error(); -+ } else { -+ if ((dir = opendir(mounted_name)) != NULL) { -+ // print all the files and directories within directory -+ while ((ent = readdir(dir)) != NULL) { -+ std::string fullname = "/" + dir_name + "/" + std::string(ent->d_name); -+ if (fullname == WIFI_DEFAULT_FIRMWARE_PATH) { -+ closedir(dir); -+ return WICED_SUCCESS; -+ } -+ } -+ closedir(dir); -+ } -+ wiced_filesystem_firmware_error(); -+ } -+ return WICED_ERROR; -+} -+ -+static wiced_result_t whd_default_firmware_restore(void) -+{ -+#if MBED_CONF_APP_WIFI_FIRMWARE_RESTORE -+ size_t ret; -+ FILE *fp; -+ -+ //This should only happen the firs time or if the partition table has been overwritten i.e QSPI tests -+ WPRINT_WHD_DEBUG(("MBRBlockDevice init failed, repatitioning\n\r")); -+ if (mbr_bd->partition(qspi_bd, 1, 0x0B, 0, 1024 * 1024) != BD_ERROR_OK) { -+ return WICED_ERROR; -+ } -+ WPRINT_WHD_DEBUG(("MBRBockDevice repatitioning OK, reinit\n\r")); -+ -+ if (mbr_bd->init() != BD_ERROR_OK) { -+ return WICED_ERROR; -+ } -+ WPRINT_WHD_DEBUG(("MBRBockDevice init OK\n\r")); -+ -+ wifi_fs = new FATFileSystem(WIFI_DEFAULT_MOUNT_NAME); -+ -+ if (wifi_fs->reformat(mbr_bd) != 0) { -+ return WICED_ERROR; -+ } -+ WPRINT_WHD_DEBUG(("FATFileSystem reformat and mount OK\n\r")); -+ -+ fp = fopen(WIFI_DEFAULT_FIRMWARE_PATH, "wb"); -+ if (fp == NULL) { -+ return WICED_ERROR; -+ } -+ ret = fwrite(wifi_firmware_image_data, wifi_firmware_image.size, 1, fp); -+ if (ret != wifi_firmware_image.size) { -+ return WICED_ERROR; -+ } -+ fclose(fp); -+ -+ if (mbr_bd->sync() != 0) { -+ return WICED_ERROR; -+ } -+ WPRINT_WHD_DEBUG(("Sync BlockDevice OK\n\r")); -+ -+ if (wifi_fs->unmount() != 0) { -+ return WICED_ERROR; -+ } -+ WPRINT_WHD_DEBUG(("Unmount FS\n\r")); -+ wifi_fs = NULL; -+#endif -+ -+ return WICED_SUCCESS; -+} -+ -+wiced_result_t wiced_filesystem_init(void) -+{ -+ if (mbr_bd == NULL && wifi_fs == NULL) { -+ WPRINT_WHD_DEBUG(("Initialize FileSystem with Mbed default settings\n\r")); -+ qspi_bd = mbed::BlockDevice::get_default_instance(); -+ -+ if (qspi_bd->init() == BD_ERROR_OK) { -+ mbr_bd = new MBRBlockDevice(qspi_bd, WIFI_DEFAULT_PARTITION); -+ if (mbr_bd->init() == BD_ERROR_OK) { -+ return WICED_SUCCESS; -+ } else { -+ return whd_default_firmware_restore(); -+ } -+ } -+ return WICED_ERROR; -+ } else { -+ WPRINT_WHD_DEBUG(("FileSystem initialized with user settings\n\r")); -+ return WICED_SUCCESS; -+ } -+} -+ -+wiced_result_t wiced_filesystem_mount(BlockDevice *device, wiced_filesystem_handle_type_t fs_type, wiced_filesystem_t *fs_handle_out, const char *mounted_name) -+{ -+ wifi_fs = new FATFileSystem(mounted_name); -+ -+ int err = wifi_fs->mount(device); -+ whd_firmware_check_hook(mounted_name, err); -+ if (!err) { -+ //fs_handle_out = wifi_fs -+ return WICED_SUCCESS; -+ } -+ return WICED_ERROR; -+} -+ -+wiced_result_t wiced_filesystem_file_open(wiced_filesystem_t *fs_handle, wiced_file_t *file_handle_out, const char *filename, wiced_filesystem_open_mode_t mode) -+{ -+ /* This is called by mbed test system */ -+ //if (mbr_bd == NULL && wifi_fs == NULL) { -+ // wiced_filesystem_init(); -+ //} -+ //This can be called from user sketch to provide custom block device and mount point before WiFi.beginAP or WiFi.begin -+ if (wifi_fs == NULL) { -+ wiced_filesystem_mount(mbr_bd, WIFI_DEFAULT_FS, fs_handle, WIFI_DEFAULT_MOUNT_NAME); -+ } -+ -+ if (wifi_fs == NULL) { -+ return WICED_ERROR; -+ } -+ -+ *file_handle_out = open(filename, mode); -+ if (*file_handle_out == -1) { -+ return WICED_ERROR; -+ } -+ return WICED_SUCCESS; -+} -+ -+wiced_result_t wiced_filesystem_file_seek(wiced_file_t *file_handle, int64_t offset, wiced_filesystem_seek_type_t whence) -+{ -+ if (*file_handle == -1) { -+ return WICED_ERROR; -+ } -+ lseek(*file_handle, offset, whence); -+ return WICED_SUCCESS; -+} -+ -+wiced_result_t wiced_filesystem_file_read(wiced_file_t *file_handle, void *data, uint64_t bytes_to_read, uint64_t *returned_bytes_count) -+{ -+ if (*file_handle == -1) { -+ return WICED_ERROR; -+ } -+ *returned_bytes_count = read(*file_handle, data, bytes_to_read); -+ return WICED_SUCCESS; -+} -+ -+wiced_result_t wiced_filesystem_file_close(wiced_file_t *file_handle) -+{ -+ if (*file_handle == -1) { -+ return WICED_ERROR; -+ } -+ close(*file_handle); -+ return WICED_SUCCESS; -+} -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.h -new file mode 100644 -index 0000000000..a65aa3c148 ---- /dev/null -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/port/wiced_filesystem.h -@@ -0,0 +1,139 @@ -+/* -+ * Copyright 2020 Arduino SA -+ * SPDX-License-Identifier: Apache-2.0 -+ * -+ * Licensed under the Apache License, Version 2.0 (the "License"); -+ * you may not use this file except in compliance with the License. -+ * You may obtain a copy of the License at -+ * -+ * http://www.apache.org/licenses/LICENSE-2.0 -+ * -+ * Unless required by applicable law or agreed to in writing, software -+ * distributed under the License is distributed on an "AS IS" BASIS, -+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+ * See the License for the specific language governing permissions and -+ * limitations under the License. -+ */ -+ -+/** @file -+ * Provides wiced fs porting to generic mbed APIs -+ */ -+ -+#pragma once -+ -+#include "whd_config.h" -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+ -+/****************************************************** -+ * Enumerations -+ ******************************************************/ -+ -+typedef enum { -+ WICED_FILESYSTEM_OPEN_FOR_READ, /** Specifies read access to the object. Data can be read from the file - equivalent to "r" or "rb" */ -+ WICED_FILESYSTEM_OPEN_FOR_WRITE, /** Specifies read/write access to the object. Data can be written to the file - equivalent to "r+" or "rb+" or "r+b" */ -+ WICED_FILESYSTEM_OPEN_WRITE_CREATE, /** Opens for read/write access, creates it if it doesn't exist */ -+ WICED_FILESYSTEM_OPEN_ZERO_LENGTH, /** Opens for read/write access, Truncates file to zero length if it exists, or creates it if it doesn't - equivalent to "w+", "wb+" or "w+b" */ -+ WICED_FILESYSTEM_OPEN_APPEND, /** Opens for read/write access, places the current location at the end of the file ready for appending - equivalent to "a", "ab" */ -+ WICED_FILESYSTEM_OPEN_APPEND_CREATE, /** Opens for read/write access, creates it if it doesn't exist, and places the current location at the end of the file ready for appending - equivalent to "a+", "ab+" or "a+b" */ -+} wiced_filesystem_open_mode_t; -+ -+typedef enum { -+ WICED_FILESYSTEM_SEEK_SET = SEEK_SET, /* Offset from start of file */ -+ WICED_FILESYSTEM_SEEK_CUR = SEEK_CUR, /* Offset from current position in file */ -+ WICED_FILESYSTEM_SEEK_END = SEEK_END, /* Offset from end of file */ -+} wiced_filesystem_seek_type_t; -+ -+typedef enum { -+ WICED_SUCCESS = 0, -+ WICED_ERROR = 1 -+} wiced_result_t; -+ -+/****************************************************** -+ * Type Definitions -+ ******************************************************/ -+ -+/** -+ * File-system Handle Structure -+ */ -+typedef int wiced_filesystem_t; -+ -+/** -+ * File Handle Structure -+ * -+ */ -+typedef int wiced_file_t; -+ -+/** -+ * File-system type Handle Structure -+ */ -+typedef int wiced_filesystem_handle_type_t; -+ -+/** -+ * Initialise the BlockDevice and filesystem module -+ * -+ * Initialises the BlockDevice and filesystem module before mounting a physical device. -+ * -+ * @return WICED_SUCCESS on success -+ */ -+wiced_result_t wiced_filesystem_init(void); -+ -+/** -+ * Open a file for reading or writing -+ * -+ * @param[in] fs_handle - The filesystem handle to use - obtained from wiced_filesystem_mount -+ * @param[out] file_handle_out - a pointer to a wiced_file_t structure which will receive the -+ * file handle after it is opened -+ * @param[in] filename - The filename of the file to open -+ * @param[in] mode - Specifies read or write access -+ * -+ * @return WICED_SUCCESS on success -+ */ -+wiced_result_t wiced_filesystem_file_open(wiced_filesystem_t *fs_handle, wiced_file_t *file_handle_out, const char *filename, wiced_filesystem_open_mode_t mode); -+ -+/** -+ * Seek to a location within a file -+ * -+ * This is similar to the fseek() in ISO C. -+ * -+ * @param[in] file_handle - The file handle on which to perform the seek. -+ * Must have been previously opened with wiced_filesystem_fopen. -+ * @param[in] offset - The offset in bytes -+ * @param[in] whence - WICED_FILESYSTEM_SEEK_SET = Offset from start of file -+ * WICED_FILESYSTEM_SEEK_CUR = Offset from current position in file -+ * WICED_FILESYSTEM_SEEK_END = Offset from end of file -+ * -+ * @return WICED_SUCCESS on success -+ */ -+wiced_result_t wiced_filesystem_file_seek(wiced_file_t *file_handle, int64_t offset, wiced_filesystem_seek_type_t whence); -+ -+/** -+ * Reads data from a file into a memory buffer -+ * -+ * @param[in] file_handle - the file handle to read from -+ * @param[out] data - A pointer to the memory buffer that will -+ * receive the data that is read -+ * @param[in] bytes_to_read - the number of bytes to read -+ * @param[out] returned_item_count - the number of items successfully read. -+ * -+ * @return WICED_SUCCESS on success -+ */ -+wiced_result_t wiced_filesystem_file_read(wiced_file_t *file_handle, void *data, uint64_t bytes_to_read, uint64_t *returned_bytes_count); -+ -+/** -+ * Close a file -+ * -+ * This is similar to the fclose() in ISO C. -+ * -+ * @param[in] file_handle - the file handle to close -+ * -+ * @return WICED_SUCCESS = success -+ */ -+wiced_result_t wiced_filesystem_file_close(wiced_file_t *file_handle); -+ -+#ifdef __cplusplus -+} /*extern "C" */ -+#endif -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest.bin b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest.bin -deleted file mode 100644 -index 6963d81dbc0c2cbb776c9bc3beb3883196ce1ada..0000000000000000000000000000000000000000 -GIT binary patch -literal 0 -HcmV?d00001 - -literal 391693 -zcmeFZ33L?4)jwL@J-fCM5_q%#qZt-0fJYKwu^0~{skIpkgY95&k^$LC3y3Wn=ZhR; -zGm@~80Dl$;J3_K!jO>`jBpQJdWUPo7C!g13hUJSE1Z@i&BH8&`NYIS{&Hq>3QkM5W -z`JeO7dFQ=z-U*yL_3Nrzx0bHDb?a8O2qENdJ0Yc0|Gy!UPx5H_|8M=v@ho5Nnx*?& -zalQK(vg3Z1Tn1e$V#$vRSkjiy5~h$PKgnasO5n9CSW*gFK%YTx-itVdvyo>R!uDd8 -z_|bnyK;MF1Uc!;bKt~sI}Sx1S^A72p!!AgH~PkaGzC -z3>tcYkUt^pO3`T7uNac~3x>S#7DKuq=NTFzEouux!ax&2%fR!+n+*9g(u{ci;vhp9 -zgp}`Dq#fot70*MPY23AZj(q+KOXLccq`b_Md7#f-tY?XN -z4@>Ue&XR9ySn@IA{h-63Wk`!aI9|_`s=s3=WQ@ljd66YEAuAnp&u+*bp^s=k<#J>#`fqO`M>gU4 -z2tt1WN1j3W2Et89yPd<48{nt;wr$cvimUzskC#Kkm!J7N4}Jb|1xE@%6i092$VDGy -zKF^Uj#0@^j5#}9+laalj!!;!F8wdZ9Ge~+j=} -z%KcFZABy$)*s -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 -z*hC$vMF{T+LQ5=V-HMIKJ#xYO~R82(6@ -zLfnk2-g6^3H8pI2a7>P+%OOoACY%3?bVn1Y+H<3mm8P<_CML^}JhSuS6(Z@(kukQ( -z4%FM`)urn)6GcCk`6kdEK+`JbG|i4Q -zgLLJ$jB|&3_Fv@Uqu0pPd-kk7gJ}KI9*8o@6fy=;y9y_=860sK8Bwu -z1{Jbzf3D*UGiWk0KQ|6oOn(?8<_`x<26Ml`@LSKsGrfwg);t(m5Z7;v`dlHkY(P#h -z-f8aoaKK{xey;wsho8qk;XlD|<->RrzZ6>JY;aLqVxf(X7MS#C@0}t|S&e|_cIbFUn$%-0a(b;rC7>oyAIP~D -z&!8qyAIP~5&!8qyAIMpPXHXNUuLN(l12cl0ZQ)d^!MvgK=`_a0_?)8i>cb+vO5r#3 -zx&;RsHDoPP-0^{JM+R!91_P+G;y=|8Iu)mdB(``{peWTlyA5lQ-@r!PP -z@)&1knO^#1S9G(~J{Rxr%g$|NNh?QY;XOW$=aaK_(vo`=jHBmNRKmH8HhTt3;fKi@)JvasO)S#!HbF0W -z&bx$g>7A|#MbOdiFM?#&#h`Urn&9*&U~aDh$By3dr!{y7mjeXlgl-di`;{`cURwBC -z8S0*e`j&y*pnTAyAhsx8U^3$A8r`uKeKp=s6jQDEdb8y~NIoS@w=)I2?JA`h9EHBAFVp}Mf>V7}KhJUUko@AusU8Y9!wdbE?>hKOW88aI# -z#`Lgj&p%aTF=nuJCg*Mo*~Qg8%op(wV*I_?l_}VT1wt>)Tg%mvYtNU_eBsxg{|^Sa -zj4orQ&jJ}4#`(Xt?6$DAy1M-Q5}v%uNL5|ty?XF~Pb((_vg=ZKbK_D-e!9zDw6r)* -zp!o5w1%kWCBJg~JhYKu0%wt{C#rR!eyiS}bEXa?U{DOxI#`6h>8$8#~WD4;|NZtJW -zG(LVeBQ5V*B*ZuTB|bC%OuU6Bb&QmUI>$FWoN#A;<59$mTl1LHsPf!$pm$!^_;-gIrB3y3!Gg}+K2YN35~Wj321eh)?y!8OKNvp -z;!)4&u6R0Lq($BI%}ofU@Eq^pCm}`GHMv<`IXbA`8z0Y4V*dC*9U$GWIaNRUkbVzv -z(b5N2u15Ggs1?)=qT`?Zh9k2_`{)C&ViM(#LFy92wyi;9Mk7}$NP&4TJBq2jMMIG -zDr;8^uD%ML$U$#uiJ4xd^72n2xY5QnEZ(;{bTocv+=I(W< -zWr;T-{4uqDv~CamU+Sj&hq|?2xm7_rX#KLVR_J+O4dx=|q22Ej4ho0x^yW=FpVf|; -zy41i|^LIdAPM40SEtoJmM?5}AqEdUvoyk3m?IbBA8&E^r(V?1-mNkZZJ6bo);}4gU -zBqsB4*=zfy55{|j3CNhq05LaAA9 -zP7>bl)=xScj?^Y^QZ?3sPFkNVcSufn-#8Zg_6EK50pde)^sQO^A1`OMmtkG_pWhz2 -zU~M&u`l8D12?AszPe;hkljLhbx{lg0ewEg#_c4wL9{M}UAXVNZNhXI8PX=l8O?EcJ -zTZ6`aqKh5&J!%NJgrs5LTH-KBkKdfdkLaeH%aL@t1W`X5T*KtivxAH-tAk8Cp^rZ2 -z5|)nfuDY2c*>xsyUYkou;q~Yb#chz5ouK`yv{PN3(#918j)94;m!)f+B4Qq92%iDBmYzdvPlIj1mbBy}XX -zh^PGVeve6CKY4p?Q=DxJ -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 -z)y^*t4_d=k=Vo=(@#}YJ4jjYkst -zZ7XsOuUI?Z7S_@+;rZQAEaMpVvMb_a=eKxtXBY=;#u=vFHnCH2TWS7>ZL#S(X?VoI -zuY$asR5J(^6-w%jQ2k67HEy4=L -z?p@+P1zwu}%6a4KWX1xqY5NMrY5hgzaaG%WJYuZZNp&L+6(yAS_#+w(dq1(Q&JFMS -z-8J936*+YtV^`BPUr9tAW}nlt+gNw(vSBad_}zeoi@-a4TcB}K;&IHHS+x;(NAbq! -zFU*Z&&#xHj;E%iOtVm|p2NtP3c^E}>-01_!yb*I{HGf;K3uP7U&9w(l3>u@{SKsp) -z_nyPf{P3VD%rvj2ZIV9|BbyPOI1}0}m@*o?{}fYWTG&uwZp@Zgj)>;Qi^^O340WI6 -zymxK?mgGI^P>)qrMY(Z}4{1nxIv5Up2-w -zb}EZqoK(=ui-*hCmnZ08zd2LO|56^4O*yjrnYFBRp)<&nnd`-5KDY2<@^I$DQ4#8N|}IV=YHE<6x*n5m0A%+@iO -zOW3D(kmS(nymLR!RqIT9)7z4G%57@U -zNliEAVs;uDm^wFKz%Sy-E9{<-eBW(j!)m`3W7m7bC~7nL4x_n|OgGe>z8pQazZvfr -zs&BRn;k=Qr*!Uu}kpr6d8bfPI~mlEPlRt -zs^-fYr)1<3bgX1#6T)M%PgQ(b6T~S}wq)g;pi>o1o8J_wo<6bBCwTaiw%hW`(Qz3b -z$k2&RH7nvjw(a-62_0c~#Fu?pbK1b1o2DWvb#)nWG?eY%++C)fEOC5UYs1E!H9ldF -zXZD%x!o>2~=EtWnb7ppaRP#`|UBc_u86=~DguAjos+d$hNitz4;Fe6}qY7&|y~(2w -z{AcNmVfTE#pSY{nGP4=n{2^kXy!z?Jjl_N$XZ_o;!eFIDJ0*p&1ErkWVD7ElNKy^G -z%z|B>_d2+ZE0rV{aoTw5qcyeS>`+J$)CRd%p)|#a#GhOTS0gM?}qiW?c -zbytM@VHG?Qs^ZCsx7w01c0%&YAp`DU2uRUMM-?5$!#t5b!Gj|`p&Z0A -zjXI08j1PFaUcLz*ZCWXlnYOm)GQERC?dVOdI7f$For+VasGEKyXd_o2m14ew?r>V4u_8}e$fj`tE-fYymp_4OlPp_4UGF~v -zqED2Z|L{!2=={)7!C(?^MVLF-sf5RMDpp8~UC^l{nn`UK;uj2t<>MTAXx<<*S2yp^ -zN?GP>p7+maXTX2PIm2bp5a^eQ)kN2ZGj|Z3*Hd{iz?jHjBv+rS<0JSY(8(aDyGyF`XpTRj= -z7Qe->8?-Sl$Xa=e-anBlpaF>%PF6#T>DdXri$-uB>%(4(YtcBLS!x`oaIb(cfdCUSs%4FR4!;K0{Vxl$i4q|s^SGt{5 -zl|Cm{L*S~);$hz=i|8GTFCIR*i4(13Ph2Ivi^MFjq{OLG3?@r>q|Iux*8ID{Q -z(dRUY`*4f#q*EtSSqy$pZpyB-qm-)cp6x5M6QVUaPe_y0K6JHyS_<2HSajkP?4EFb -zM$lHII}-J&{x7(r>71-^c8|n(_T$7FJ(}@mDM^VgV7s@YNAD1~JMlhgpMP39UT#9LSYrS7-nN&L -z)Tl!3y~RSx1ZWK^-!d*gFfQK|D1v+^X$^!;nw|C!B^&Zds;;{V?W59M?Ny#}J>qJoGEJ?PqN24`(CMzUKm2W+ -z5GOqy%$5x5h{2t>QL67>eM#@Owp#8@%&rpdUHgB|v3Jzk{%XztnO~Rv_Yx{pehcJ> -z{Y&|O=hw#YPdZ4)9<${n&NPaHO6)!Ztp15S#yWh%cZf+?eHLLI56S03F8D*~6ZX;} -zCfN`$4TiG5KT@sGb)!GX+{NC>28t!C>C$E5q?|O@{t)Bzsrl$rV`$$X!+yt;H^3TU -z#W*#da`04u$Avs0`NUqm2^!1PAEjrnI=u4 -z8acYVR+(=nGnj>D?CdLXwHP-w$fUpA5#kLSc}6e -zY~dr!-~taj5Y9~E-%<*#gF#d3Jva%wtBi4U#7!76%KJ<2aHG_WyWn@2XEoI`IO}Fd -z%s1c<=k_RbYpsw#pTn?gH=B>c+r^EThGP27*dOZ#crN~B>NWA?gycmbl5C?Z>|OM{ -z6?t9t=qHBz`V7jmzZ!Sc{fpAf?54FGo%MGS@ecUW>A4Z^5N8|E%Bg&DKWih?zB8g5 -z>N3Wh(+!x+F32v#xQGa?@+TwwE=CK^W$S2s5uSe(vb8aDt+Ot{GJ{P}HP(OX+Au9z -zr`lHf?LNUQIeKst2YY_AwBf>jVP&Z!P2YQJW23$?!kF1(YI?y6Tgxnc_d?T4KO$G+ -z*{m|$ztmypPS-=Tl+f!^y+h+;iETGr^Zj6+GKu(FVD-TcAx`RHrQX*nLC3Etjo@dZ -zgilKo^a&9O(Yi$jF(J*+SvWJm#-Ev{3p%%NNz-?RLqp$z7+V_C -z8|!RZH}E%I7>Svs%RanT(|L!W3+IgK!tX#AJ{U+V-M=3F3g11w2htQuF4|v8%$z%h -z_BPH(iR0)s_m-_#b76DApEbwTv>rZXR+rgS<=k%P`>Oi3(t9{9x2V6D`iTEK{?{#& -z{C!m=Tla5mD(%r*;N?r<_pcAhPlt%v*FyYaRo@OGHtle3{U!X1xRVpY9hiYYncM2! -zTCX>s+rOUXU@}7T8szY9-M5tyojaShZdP?B{h)*T9>|Ps%_K#~*Yb_L{#AC@cY3zl -zvbR@kFM@aJ{`2&`@!jb>S4-d9%e{I?q-Fi`R*IOQFwYiCCJQ6-xzhq8#)NZhqn$Sl -zaAs}94BxI*M@-JBHezUP=!kg$=Q$fn={TWl#D=wYaf^wW|K1>D=??O_XJBR15>CMX -zj2m-@%u?Zb{ULZDlgv^sJe;(D&7pk)x7RG?^%6THJ|QI%qqM7-3X)@vU_J9tTCA-NxO3T)Ogv=H>ER)VL3ByK`+FPe_bDo%g9R -zZDTPkVk*>_W;LIkr+l0~BtMGUE`{xEmWFy3qBL6DzxL4G16_A;KLIJy`DDzt(JFdE -z>k}ryW-&|kUG!EU?b|QTFXS1uc3VeNc$bgH{rNn>Z7pU2T^n@#E`AChnewD+XP9hd -z$z^3_b3ypGh}2?aRqe3&f4`H6zu)m~d{b$se$Kf};jkz3%sV^gi!`0vsio)cr0IM0 -zQ`B_lnVCChh*fwWtUhMg_e4w}Q()3;UE9{Pcg2g_cK&{6Rq3}0F~j5uy|``1_>+5! -zE;!HoghcH@HHBU^_^K4*JntSNazGU#9 -z?54jR-SqBBK#e(!dgA02vBNzEw77I+L#d8;rRjPHOBr}8%we2(5Xc+-aX3jK(h=W~ -zs%;X&8Qk!qWAp3?C&s8V``wZCrOaVhYC`YILUzy^ZWZnqe$M|Ae`3y*u`YKLe?2&% -zS~r+Q;(g4)365LxPe#qqG4ov$@H^KP>3mY0nHt`k`!DjY6sM*BoR11FDU9Q-!tQFO -zw!ufG86auJD5pw_a^5RWOoe7lwFT!D!Iv9u6CM_x;<*n@nI*Ze@^X;oU=CW5Cu`I+ -zmWP%e=FAWiQYQwJ3*vc`P#|z0#Nn<%7BPX-IjZ|7&aKKkSFCfgIOSi|^q*U)8*62> -z+R6z0&U0DudzXtivC`t4g3i97TR2z3dsu)sac2*UTd&$az=-b-uE6FU0fiss$OMoB -zlnSDH@dezPA~SWr^a;D58LN3-(LHC9PF`HVSE{4WjC&lKrb-?u;yo&+UZ#+I>1GP= -zQ%B~*Bl`q8?#$Aat_7P+jEfH?q51RzUkE -zQE$_$Avvg822V&62@$QhF-cxNo`o4P0E%*KdGEr}wPr -zsPx}Rfu1W;+t-Jd(zve>XGd%%@O$u^P@T-^wVCu|%nZ%Oz?}zvNApy^ay@aH>xy7k -zal3T8jcMfSk&25~V&L_eKn^pBAo~AK^5TwDI~o(-z)iJ%6;-9DhKMs+H0;dYsl~mj -z#<`tSpt~N{lffMo?49K5jtYJ7xWc+(hRcfG((@I%M&kH+BC|UjT+m@9Zs{i#f7n^M -zvnBp#ko$DS^#rDFpJ0;CUVv?)u5pvQpCx+U2Cp$I?FzBAbVjeNfCe*v!dLM&F-tMq -z?R*-3Q+UgOfep#;-b_}^WRYTax%xTQEfrU+a?=|2gBfz>D(s?=yzr*WUx}DxeipbF+;DwCZ$7r=4g__LOv5Zbm+yp) -z#wC!{@*vl+a*8qSX{-mFq?@~G#imW0)?!!hYVtcbq|kLZvbaBTO7V4R6SV{)`#BDO -zV+p6%DSX)A-Kh7pk#G?u|BZ{L>|d|(T_2%bi=nMUvUNnuvxr?R7WW%eiIj_S({yp< -znBoxk<3^}f8nrpb%R4=m_ilEIs7YCZk}uz2?zDB$_k4%YP4Y -zeWs2w*d7YC49u_$?(S6Q6i`+t(@4_1V||jY^~ofc$K`URQcuT1^hvR_*gRxQU>aM9 -zVEG%rD^%tb#X>o{1J>UgOIK;NRb-rDdrjB_!96 -z;2zCheZwtz*Uf`GT|cMu#@8$uEd{*kZ=*#wDz(vd^my*o;4FS3W?j5xpJ0Gx^j@ct -z&Or-24pL|#osW^0<$RcGC5^`uSZ%6OKWS6@aTqp_)Zb__zZj*_bSfaM(=f`LpR+X -zs*+1eC#I!&8LXU!u8{ogjR{3nIQ9O^4Z*uXIOBiUOV4$eU%aA*wu=Vd-bT-~nL{Qi -z@8SlOr=G#_^AVfQ)7Zrqi8vXvWpn$|2dJ$eXYa+nRtMXv7Ppv9()A1ae~>Z#B9;Hm -zg>pX)zrL^va_ILM%l+BV)88xgK(96D8Q|%DLb4fD-^l#w;K7JQS%!-))qaDXMk%a{eRa^@lg$+r!-#N*7?o_*Z3734sf^vrgX@ -z_GY2HDLnNUZHHd~XBd#&aiMtFUB*gFZ)1&ue)`Nuk`VLM?V;1xvtVC2ces40+#tzj7BvrKM;+*(et4f9bD%#vk~r@XpDmq*-PU`8`}$(+ -zs@b4)*_pNlVmHfV#-u-)JJNI1|D_GGz!^EngzE-4(?s~$Z3^ql>NlIP3(MG(JJcOH -z$VNVuYwEDU18XqHNlcWjgKAu6K~3(vu+RzHQVwgsFC-6+`rsXD#%jn)Kfa}ope#49S&Po?|R=8+p`>VJVW*KFd?CBQ~9L?Hj~Vnob%0jjE8L?-18s)EzL!rA$6%< -z{c>mu#&XW68)JDXpSV6*U61$Wfu~}Ow}S4GF()xz*JCgA_qnxKy_w?e^{V4_b+20; -zuTw^|AZrb7z3R0Yp;y~8Zw6Ae+4o#8oq1GS(7UlFb@so7Z&>L3r@l-p_T|>r?XaYx -zdBcHtXn;$yLoghODY!j!O@4E`V|&SVvdeJ5isx_Tq@DYBkX>tc_U&MHy}8qHfZg@Q -zPHxwmFX?ufk=`p~hh1toUSd;VmUzw{cpb8aw2ES(aH-x_L6Y71E3Q -zai<90oYP4$*>5SQ(<8*zYhQ1nF`uY0pQP*HMf$ahf1UmgP8)F-1s)X#KW~H?3dw)G -zZGo4~BrJ^Ka^) -zFQ|S<$9)Jg3*UwLsFt|sv+m8kdT8Zdc)#-c8Sa9S44(5nYoneCay8&9fdBmV(8I&< -zanv#R8WT52d3{3>&+fTBbnh^|qv4j?ecpm&=sDVB-$&1!93Jlz+Gn}J2@Nf3Uxo)) -zu-E^$zGnhEJYm86@{7=$4d6Tv&KJP>qVN2S -zNYQtvKA4}MgS4H)?imJ=&tD4s;xJY)L%B$t#r?eHr7I@gKiBp85J?t-=_2ZA-;TeP -zP(0lK)A6>DS3g&D``A6)tG9=~1m6R}{uznjbXzeNGWU9zKm*RDAbI%wf4p=hpZv4r -zkC9_hu!TQAgT=b)v$$ti8)%Oh2@hle%CEXsf4yV9xdlTPOSsN$p#VHb5$S2!w -z%I}6kj%4047)mEn!w9ovB2EEMW%smr`Z?!xWs)lrUqnoV&CW`zMqIq+(ZJg`sBhl@ -zU;7NIRSHMGx%?N5aTens1GEhE9OzXLQ~QGa0T3XK5rmewD{Pz~NMZ#xYL1 -zo^wxQRLszc1JpmXp+1k9-?!N`@8_QDJ@}&zPgAek3)rbn_NNJ@umR%47dJCYqC{s+ -ziN9oXOdD4IB}7c+!!vXPAFwO2Chr0lGp}j$>z;3VN;X$vms0XH_261tSD1*C6Vny8 -zh{+^zb@&SmR`_*e;34Kj*t=`kMeaBz?MCNH(`jQ)N3;^-I%%tF;Rf(sA?Rebuf^4# -zg`JHR-|>ayKZo>#6PUMf4yJu2*xlg~3`N$~!nHbnsh2qDSLr_(an>-I&I)Tg{eB$Z -zB-ZHpjs6_m=qM>o;Xpg+5%x0JzvQ>|ZH|F1 -z49P#hSA`+D2XSToAC&)~?fd>8{>aY1`6KMdoX7L*_wG2zr%V=vG~aJSkc9QQM0a`mBPC!__i!wk6;?^>C=6dr)F_Va>wE% -zj^E{()nVeTe0>E@sD6wSI-)NkICs{G+iQHb?euFLD@jp;_G)a@>!N6J5PP)9-Xu9&J>jRn*Oqb= -zUv8H(^WJ-8f|L`b1jD>kcT4SdelkA`YwjJ2?qniT!UKtt4!68qi}hln!~%V1F%j=t -zyvNgd#^85*;`|X_N&OomQv0NzY=buhHwOxC%D=uH7{u4EuzyVL-#qvC_(T5?uONPO -zh&10G`rtRWhdu*+`J1YmvewA7t%Cb%rLU=`A}ur6S2M-J_j5Cx+kf5i<1iD>qnBNO -zaYdacCb)ld4E7aF5c5(rr0EeRm~mDc)6;@Az`4eZbDm+}Q>>TOKx%+Mk_X(-L9H?Prp{sPGK?*15&MOP(9t|LmCLXU8Nz`;U?vOtGo)0dr?~>Ky^5 -z(~`=Hk*N~`6H;S?QDS1M4QD2kQZ0e_)bQX0aZ0K+FelXr?Ml`eoDn$FB>Pb=(?F*!@t>#Jp#VOrZ=8#Sj$!qk{Q0~ -z8~G{XBq_>h3{ty4rZ5w0*h_=cY_sFZY!mFH6h5jj4rdIvhbq9&pSTUzz7T_X8#2fj2paC_)0iGDSybFc?)%G++~!L7sX^qX?UtqngV_Lr0hm(!Bn -zuX8d7!yPXv;rK!;(iM{LhM(F2o%G0UT{G3})E1*R7D>`HO;5IJ>z_aIY@5^98spZnx2`4dG?Yr6Eb5Ulb#f2+_tDP>3Ls90q4+T&6|1a -zK-)mMDeWP32VNK!p*Mv^JQziCuDZDbjE0JA9;fO#I1~4XcBdQr*=fjmQx3ajM?NO) -z?x5R|j##@IOKxQ$mZW6_BipRb6w&0IiL`h%?dnahnu7~WJj13X;hRFtiFGk_#FfN? -zD_Z5cc(Y#RG6Yy~MdHQ*W4C+D+F6Igi~B(BI;YdC-WsB#ky1wv{C_!G&(&Wf81F&h1W{5b&j016FtfaE|@`F#M8Y6UAGMfu?I@ -z)A$;UlJY1OTn%J$Zd;V|Iwl^#L -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 -z%Pg9GOcEZYlb}9#V -zI03Eu$4>a+!Um$VpAzCK93m7l3C2{QR8w{Q&n)VQvnF -zzmm_Cu#;Z41Bb*zsqXuh{$Gpo7Tv5_WM1sWcPtd=xty2Onh4i6PnlO8a$%9i`E9hD -z-kqb+veFXk`|RW0ZD`L@<&u}=7`sO4~2yz^e&_23Fmd#LkW#j -zT|y1%yBIHMo>i3YZKL=4mEP;UyThE4R&Tl9`(YTPv|58YUhm+1R7GT`KCNbqTYgiB{3U@X5i*I?AFKXjc8OlQhVn;UJ+sca7=WY3FrJV~UI3 -zGQ19YVOu`D4gzBsR_u|y^KQQH&Ktl72M*!L^?&3Z^!&|lvR~F02-2q)drR1~_-lMG -z2jBkWq0ve8iC5|y(ccv>Aqhd*W}ptBuSqsg2&v>J2By1|4azM{+U9aZm2hqLEhz;R -z4~x{$K75HF9Yzf!YsRGx?oE%#AEnwI9pqkNCh;$Z{qv9to_yfz2g2P0g+;lT-5e;# -zk^DtA>XLJ_)-=Ne>B);+E$`xA9`G}hbB4=!30P$)!-g{Wp)!WQ{5JZYn`O`*DM)KB -z@+gDeP9yU;D9U?~>cx&PHm~!OZbQ|*i#sc~7|fgZ!MfA6c`0mvPk%M|6DF-c{LbnA -z@Ivz1gqBK$m>}_xxnB!klMQ|gr05oxL9qj5%zDV=s>6pGb-+2^0}1X9NO1Q%^le69 -zoh%qI`Guia28PqBn`eYke+p~yyEtIagZ4H<50>a}2CkQHNfgpqMNO!^B)&1t&CX48 -z)e?#eJm;?jNuHH!zZSmKXhIp0nq3Re>%Ubi?J{08oHV#~D50e!sWH{f&P;Vx?S^g+ -zD6dz7qEcb)rfQRwEQ8Q9NdVAc3h4+DGFyB8f_Y=mVg*`fCXi{Y+C -zzhCtI#oSpdwCml$boXz8$J8{InQ|dWQhiO={9>|OB0sE%N7wK_Vw3>-hu*2j=y|@g3KV2OR=xnBt!<79!W5znloE)#vUq@$KZS -zUGqX~D7TetjUh|W>p})=RxmD0K0lc}6Mw3a^&UOSELa>4vfZ4vV!Z}YD#(&w0}c=G -zh{jV5`Px!_U>AHykAux#wpb4CFj9#cSR(IP^u1JdC?0$u%Fst6*B6T#7XRiPo5RhD -zx1NHGNCv0n`8Bl_E4}jaV0caw16qskZf1&?ypJ(EeEyX}PmtFQ`LkAIHK^%&W3va5 -zbTGSYs_ruWoZMovY(|U<%&t>QKud?1$;36PrE_iL8ksAHTq+xM5?2np1os_&9=c$) -zTJ0iP87#S7CU}jgrC+!GulYKca6J?YF$0hy6S1zEaYd*ZroNft@hw46UCaP3iK8OJMsp7gosRvA%1Nfz9Tq5Hk%D -zA5IUvoJ6wvnv8vGGTNG@HK!Q1b{yor9`ih`iVx$8zUVvu^NSSh6?}sP`!*obozx-f -z&|vs3dK2XAWLZ%R8{on4wZS$&1MF4!(+ox;DWN6&?5uy*tETn_*>v&;Bk%aG!9xyp -z0GK(-SCc3DGeEcm`ggI>&)K83NYJD2};ee{{F;@OrH{&wo$`^3f%p0)JebB{jQ`-NH!6eJ0u+yeo -zg7jAfEm4KM55TGmNYXgFzYBa8=rH@$)B==}L-9(YyW*iKiQF|RcLj;%Ry=vOh#Y8c -zidZ!30MlfMPe@D}HF}J3Y;uYr``*XNme&E4L0#4}MM8UAmJkr6vJMtVD_oYo9X@wb -zTL-Wh;TJy06K>i2I0uSNNRwx?yb2p9ZHpio1?^PW`&{ppaxnrwGmt)s`RyG-?#WTG -ztS$93S@B(h^p6gTm7`r|60i0C-xYp5))CDeu-C^?MxMuR&2H) -zSA7R$j7?hXlZndr>ayaxGW~3(5a2R(!Kck!s07vwPXQI4Nu%^N9g1ItEtM>tfGH?Q -zccJBJHH-K+zYjEHx+1!na6o{_tnd$sxccK@i(KLv1q354P|1PY4!Q-{L?(R`WL+Y2 -ziDME1+4f4FIEY<^xPV0Ps?-ikfj5wgy(ToH -zgXJMlB3qP`uyaPA1Mi`%2pR%Lr9>9WYo&ZyuwnVcB}h}dn2ZJBuFclAre@iFPqX|0 -z4%a<&hd-aXyjfl}0~Rg78_t_Ch~GPbE^4-7jPUC7&9Y}kGjKASfw0Pln&n4vRy>1n -z0|Y4!D+NU}5+wV@%0?hHFdlz|18%1_K`*J7+A&83DWQWr1O{z1ex5>YuQ%D5?|g^a -zQ;_Z)YRx+bT@BE;iyKj<2ELg;f}Kn=T5#&9NDHnFe=4`kFly8-?CpRpQCf9HnDkUr -zN70it8pxz>??q3N6-(yeL0MxK~(_ue3jbzM41^6nV$zl7&O -zJ|X)(Kijaz-QP -ztF30sq@f%&Lpiwi=HBLsrlGr`p}XO>59&vMBjrEantSaNqeK6!AFg3&>mYjPvo@ks -z*og<_IHkqlX(^?h|6=o||KfC1pv7ij7iB^M_8S4bv$Kfg#lS8BEpP9w_KXFlzz+xP -zjr&5_KY*H#XeA!aH0JVN4|XDqNygkNe}c#qUvx%%^-4YbG#;opG?w!RT4dV{i=@Iz -zXPd!7l1u-pcGWa}Q;a3b0?c9yKaK9?!)6L8roo#ek``$e2hpvfYM_j1deX} -zU%hvsL77=m?L?u#M+LO#|Bntm{O~}y>G~I&)#A7Fun`Kf7^{y8ZFUxI#%#dI0F8is -zzmvhrV4n|!@;fr|6+4}lK75;0zRKC>Nre5y9khPf=jTiDKn!Q@D0`TfCh%oHIHUZZ -z`9axc<@&)h%Kw=MiJ!{FzWC1?;-7|Nm306m!$WBHh{gDJkp*5LJO}Fvk!^G4#lh-` -zb;UM1^2i%3A~m}Y{h8rE-mRV>oV`8oS}$|?5oxUYAt0sZO9R?OF|8yr4hF*$u7@ou -zb6N@YlNNmDnCn0aw%mFicRgS7Xw?=DX=p4Uw%B!EIVYr5@?{*j#;GT?ZqxGJW5)an -zQmfv2DvdGI7?`aCPSdrkxC4ZHT$3fj->&V%sG!n#vlIPx;Tj}+H2Y_>lhaB#Q1wU$ -zt;X4FX(hxJM6N!*rd4XC!hSdye*fB}#)X%kS~1Yu*%!%6_IDIR?F;PF+&P{ZkAvj0 -z(Iv3fExxySe{oB3(w0#oVZaGec6%DIK5?qzR&SLnw7;$D0yI|u^%koRf -z%jcFLm6vkoUy4ovrt-DM>(~1~kXguGB6~ZbB}Tp>A|rtgr@zwAn6+376T$5i^p^tb -z0bavt97g#-cx`{gZ)hOArxA9%S+#rzn$rR -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 -zD7&DF|c3mu)J4RGg=OiAd} -zh2ERO1Q -za__dwxj=(tXXapDoU$Eo^mKyWQsyG|u_e1|)KCyrn=5WB(AD-9MAzmNVyw(@B2p3G{Q(zKyUMi<$h!SL%%}`b*<+s -z8+*nT(aa2$Q<`MD0bL)H@m283m$V1oD)U4ENelE?WoNkM-p-zk#%=II1KO3_w|H#8 -zFJ5&s)1;sQ`QI2U@l)BqboODHB??iN`QYhD+%}yprK_4t+S9H${+!f?cx96BKhQQv6!*1*=3ABJ&=U-KK`} -zbqq&-33+oxjaloJdzbY*4T+K%Z0zCV`16o2@Otm2kjlJJj5$JWbTvE?Ry{G*`lF+z -z8(-^d%f#_H)Mm*+ZB0Nk264*CVl1Y*0G9vrq`4Omd7%*!5|k2!K3*e^mW~bTD~(ul -z)?h8Ow&{WXKQE}Q)y!$vXnR!JH+xi3s#aso(H@mfm2Ir*guE%mtF1|?JiLrG -ztI%J}@d@yS(N~5VjWy4G#qeB}u7<|4sw$-h7)ytQDxfkjh{9eoPmDTvWQo3#=sO`0 -zeb5Tr$P96#l-#NJW%z+*$x{{sdXxYCId88?Fur|{b(MU2PZ2oqZF@GH0cGHsan88BfYw#eEc+)&4#h_wdM{=l -z^b))9U%qh{&MFH&+{jo01?786>8dPm9aD51EqGi8_YeKo -zad?OvmsN+3%j)B?wn|rJMXVT`TUq*N`4F3gF{5v$U4Nrg+Me|kTMiuCeela}PH6a4 -zel6{+CZ<(Yb4Y&Hb4V_)JS6WvbVz>w_#wHn`H);?GK7w9&u$#~R1@k#S-68V3y{av>+(sA7lr*2xaTXZT%Y -z7+Vem!h6OdF1612>V~7+vw#GbXSwXJdh)C$rS(PmOVfLZHmiyo6-Zt7qTFFfkhP}A -zbM65mQUWk2v8r)QRW7{5&4{Hm4VVaQXu4F?-YTcgaH1rmle&@)Kz{!bLX((bt%RxlwM5@R!s5^NLdZo$koh -zpXK#4C_eA+@V_He25XuVIc2W0iY)QOys}ao=m6J1cg116Rm10jTZdaBbPIK^x{4$2 -zSja(-RmA4T<{WVyD~&Z@4ZHf&%YVLWig?&f9LSWw4tEx;keu&)D&L#k>EBZ^Y%h{{ -zWgtH>pf|h4t6{PKbvLA{6A-_y^pL9vD79C^^ZWBJ>hs`u4;OL4h0r$(p}eanm@-gagd$eA -z^YDg3X(wOzL|u_hbi$IfZUZbz!Dl7F>qek;sEp(axhK69qeKm&mhE?wwT(ggV|%6l -zn455dI|cHj=BNmbHJ!JRF*V`HXxj#HndFQ%t -zy7K?MutoV_6*epX`C;ouW6?P2uKrybP3w5&-eS}*6?qrpKL!7{<3AbybHmBX^I72x -z=?>Yrl*1TSI2Pb=;>g31k7EsvLL3j_cnrtWICkUMhr@^C -zFpmGj(SYMLj`wibV0SJcKARrx`o+}@u?Ri5Sm{CA>5t13`OJXx8rl=>{#gud9N)c%KGfJ@aF!< -zbKSfCg*yn)dM}tKSh@`%dr&8PZ*E -zlSf@eQMy#wR#%i#{)NYI8dCKH#=K|sD!*^Lz0tVC<~KfNYCI?3K>Y6to5ionHf6yx -z0tEp1n!a+vH=-|V}N-os{@i}smUAvrglIzwVl0UV3utz8RJ#xFv -zBX`&g;M1;RZ*Idu`y6S_--OlwC@;9KnTDbicdU43bwFN}m{PJ&)Z=dP%z9Wfj@@@= -zwWczqL|Zl5n^^90>%6?A=WDf`RokSiPVnk#^i9732h3PH>yy2Z;C^|(`EsMi$3Ki%V0>zDcJ=Pq1YE$C+_e -z4W;CzbKGUD4EN6OZP?SU;#%s9Rtj7zMF}-Qf2lGZ#_IQuUx&T(248MX07aU(y-gF_ -zlH8ma(!6Q-`4B~A! -z6lGUK3sl&!A=rbcc}=hvkPn#7qGjugh?=S2K%CTHO>cuE`ipw0cp8YGD(`*L+ZR-| -z@s%;?p;KafRU)|XQ?N8!0=k{SZ@d?A;H%7#EWF4Wq^+#`ukF5OY&UPL>c7jxW+y^J4n2zGvBw3lH#6`* -z1lRO}6u}2o)v7|YuMILxGh;GJ_MOf3i1d6}6PS?2wVSduf$!X=$x^kahTd4Z`@4vP -z)ImG+1WqdF(|dB#lcvp<2f|5e@+JR2?#=T89rH9eviY`)(aH1>teaY3rNEjTe| -zMV@11mFvkytKc{Ce1HG@33;g#0*@_wEN`WpX0plgOme6=4`1A~@ViW=(6PV&3{t3r -zj5P1p`}^O+InJIfT2^#3JtNKfHFSl=lqa#$lnKmSyeTe3t=3;pPfS^aqw6V2tfV(9 -zDJ0Jmllwwh)Djtep^UssoYvU1>=LIlZ`3v|>+{@p&qFJh>Fi9_svtBMTl{Fry8~3` -z{j$ldf+n5|=JhdJNctKx@Si;NM8Fe1xU7%SG15OzV<(d?J(Hze{p~c`!tfz)ZN<1Z -zM5!mYve^@rR*DNyO<(Q#9?ND%wHKm?AAon{53=~cgNSm4{!&V(RJ;FYD%4mf -z)t>LLn#{-@$feRgs-NqxmSf}7@EaG;%z(5x&DaMU&3$H!N6Njo3AoVac;t>zMrPz% -z8w$xkVSbK%=wCQ!EVD|~EUBvZOsfMqtp!L8%LH4jvsA7 -zBR*0t{1Aqsf2k1pgL;m7k@^_zluP}VSQ%FpDVqz$q5QbYI=`kS$4A@(+mp^aLOwpY<|Pw+vsO>c^q581`ZQrXujl?gsBg9(&3o{(41 -zjH#}6aOWF}*0K6lZH>W~xSe)c20JBd8dIqX8LG$ZV?&0TF;$k0YksuQudmJVPj4(= -zMrEG+E@Rbn($1J~^Jyjr<}{4dHans5_<-7NLRsxM%Bh*x77QTe%O+}b>ks#74bg`|Bk@u8u+sW^tH=} -zz682H>lA#+RD8*_0PP^OM_7Z(4$PH9hdL8ECbcybrTU<)U)8WdsMS`JeXr3x-t6o< -zZpDAt%<4#&ucD_#lz=~_}vL1Uy%v~6S1CPHgW -ztsu{zpQ01wdGi~J^wn#Hgw}oj*)?W=!VVR5ztLGKuq~h+XpC>a{A+wUS_`AY5Zc}- -z+#Cr}9iwFReA3;G@~V~j!f=KR+?z70N>}@uHA!iYPK}`@s=BnXp~xiOFDw+fR)eJJ -z{qiAjqtbCR(t9>Tb@T(^I8^mU!M~k?rrnO -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 -z>jCB_a7e(O(DPc?;R+3Rp~ny6NsLT>t(_ll -z_==yngi4{`Vn5I`4L%^zS!YVZvSe<0_B-LMNH|-tyBQiPnwkZTD9sQ4mtTL1IphiV -zIasvb;sX{y^RWoNzt4xb{dzs{0=CSQxx)K<+psa0cA6U^_p@6&YvjiDT>*JC@-)i2R7#tb7rl{|7tFzE39O&wXDW0 -zd=0ECC@E{3aK=wq{RKB`F)s$d7Jr;iHXN=v&W|e=6ARY4Si$R9-6&5?&c7O0JcHv_ -z8YM8&YRXw2GzR5Y5cGqbi`AfqZ~{KA(p_NE|Ho -z!`@o>jFe}JE`!T*nl3*vpL#1u%*Xqty-r&%kb(KRy^}YvbkEMlIgF{S2+?HL1K%3P^89JL51CHU -z=uOYleI|{f(bdAfMR(e^w_lyg!Uy0qU4@BH+fHMK*YuiRIlV_u)(xM22fmhgm(Pb1 -zqp6p2Fxm@y^z<=jeK^@ad>U(pL@pMXU$JK||MzsU!&x1O_aOoodIj)Aez04HliBxy -z&q-VWM(-^mCh5x!l2e=+171FLRA$4YRz1|svlXQMsAhIe8@>j2-`3ucJ -zy>=Wb$iS$#MFgt}{fb#gdv|lGg=a0|Vn$b9{2lO>F@E4N!v20>@GcZjE5+)`eWH|k -zsGC46i&w4zFO~?eM-60h>JuCQelNiiBiwTo2|g&?UBK&HX~4YtzHCno?5pNgpP^q! -zxMwjRzUw$qY6tdhC5djfa3#?Dnx(VgrK=Ln4?TrSYs;fCC&ouax -zA^-X=3)SU9YZl~BC3D1htauhPv8)ymWLWp^KQ+!GZ*@}KBSk%mJkR24CjR&Eq=J`% -zz#q|g|Ad+4MEYRJsZx72qHd>Kq2UMy0~Pe`6Rc9Kb40-mNwylm$hDIExrIS#bk?-Z -z6jLq5Jy1&2b1zs(sMlJA6~{q}<8&3WL6{FBJ(z(Gu?Ix^Mw3O&G>^oJ_hSp+UP*Fr -z44t_}zp3bL=sRrE8ow@uIEaksfW`B~g$nvkB3GNA=<01xvtQ)ZbNtg7_Zf1_a;IXC -zOoEv&Sydr3b+y6QFBw;~1euL(_`0**Cn^~2alTSri#UcEu(G!g=_+X{k6IQ2bJ*)0 -zIe@dp=iul08^eJ2uS3`~pgo^p6CeW~1rvwJlE&;ul-7XmOt>4P-{8_!uk&1j6sJxT=|{R{wdeRH -zl~;BvdbiGNYn*pStT>3V%vWRc!O)e0I{W=~wPOjDe&7{4M2f{3I6F8T&r;K|M; -zX1i$lb(Ou|Px|Q_dff39vmGkS>D|UjbuAVk*#J^r;H>|9nOW*z}S(#jzpp -zv%~#8-Cpxr`X$Ai+hkE!1KnVE?kgqxpRcdWY~e!Vx=jZ+d_x`Pgy9d3_1I0l$fp1GOry -zlI#)2@qMgKWLt)MTnx;fjUNfCT{dvhDqTQ=3VxXWo;_yEBnKj21|*4F6jL-r%)S=M -zrb$xEGrNFZ9q|5J;MjQ)BSwI%kz(29As$u(rVA0Xhen!Kqs|rq(UsV~z`5B>BUN3v -zt5gn00yml#ZLXa2qjLcvV{OE -zBe6wmBS>3^uZ|_~`KK6Ve^S>XPw{s>i&jbNJ{P_(0p~Ab{~{lo76~>mHE^ksVG-nQ -zT&WWK_76S0i^z?fi~P{mV{xq<*TpW1uC -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 -zbnmp$5P1=MNBAd3UPKnXl@BGof| -zV?C{zL`b_ybAH*mMgF&?Gs@c-|$0{ll$JOVDpQ+({iQ@rTaBmBpP^NpoU9NE}W8heEQ -zkeLT>#5l6PqaR0g5075xVDJXV7z-F_wM=hMXRrM3T$bir+9A0MjtX#Ao$j&(FWuJd -z&cL(#dJn-;#OTn6jhFcRkZZzkO$eK|aGNOAr0;eckn3hIGjY*R>I3p?2~p$;|_ -zdZ%7@63$-f)tMJL60!GJ$kR6?QO6;oG>d-WHr}m6>V=1?iyx<+;;Sbe;XgO@z&f6& -zxyU!chBi)fgL7T;uk4m^YIx>RzNb4_ -zANZrR>w!Q0UMB_@b`rQ`=;r8+vvWE -zoeC~p#Mw+2Vf^~yir^brPENgr)t8DGgwiMctn})~rN8rV_4uFCI|i6|_)iL@AG3aJ -zk(6we8n}3JpU;S_jt5 -z11uNTwKMH1Sab%xg9EqBBJMCBD&3E7Nd2@m#Av6ZS`b!SO>MB0QGWPD`UNbj>AEe3 -z{I)aQv4KUj(?Z&cLP*PLAp#z}d<)<^KF$?KCbdw1_jfZj?zAm~7)fI%`|iN}iiwXl -zmqA9}=-_+q_tG=1=CbI!3Xj(551`pv0Bi -zYYCxiNifFYt6M^1$XGmKxn`!onXDm=wPB}R{5Vc&8gqwbL$bu?CVpH*%p2<*V#@XI -zkRSp8lL>7x@Z3zM1br)pM8khG40Sf_4SLAyXAX -zcJS&#pFjL;Vmx@EaN{YqE5J{DcaGo3=;*W9#^_@f2fsYDfnTbXaLTMh*q-Q*Rh{S` -zrQRKRqF;?YtsyV6HB;}#S}e6i%3jMLh_ -zCOJG!r)&9b*wX!_&>_(?>+k!{n1nO5|4uM$bnNASmAb-ltMEks7m&)stae6wbvuTr!j!&6~DfTcw!U$T7v2* -z%UUO-4HdM2g>Aqt6q7~~w6`1*G#L9W3R -zKk((exmDpZb;lsx&&7;q$ci#%f~jX|*_srF%(jldJ`-EFCG`4;l+7;Lb$QD3uJDvq -zE?J6+j4NB>nV#~xi|MJbJb~jeWq-c00J-z5itF>Sy=cwFf11^Va}i~K@vKZ~>JBYi -z1%~ZUtp!L6D3jf|ni6vTN{XfXW9zXL#q~Pu9ksrKt2!)Okz>%Be&cstUy4VeiVg^U0W^P8?2}Lw!znB6}CID&BfNT)kJPtx85*y#~~*}Ua>ZHw^@JJSG!R>jny;V -z*Q}dwypI@$7`(?J*z{f< -z6I4?LFISu6o5nKqB$~p+hhU_5bxali5&G9#KaOFNA$O_B-yZC^0e^tTWb(?8@9XcQ -zcbG^qTG1QSmI0RykHSjdhFBiiBs@;C`A7 -zjz2Y)V-%n%3`T-EM#{OaE@ZXvgn1yr-T%}`@4Z!+4}xl2Us>~mPGB%&$T*?wxJyU~ -zO7#cBFMnv{e@uJo-tpCTaGfx)iURwyf$oJ^FZ7tgp8J80zYGb4$CtWL$)%IXPU-_c -z&-3VxVr!6{iD$JdVrW018YgC73^{ZCt|!$zr@MX;_|Op%NbXL{f9uC4*p{fx2~h^- -zErPA-KgXJRInY!7JSA=(qb>9VOo(--mA1j!+iamNAT=(LjO8gus<`lA=_v<`S!g-p -zv|zL)woXI-Pyaw0TEL*CerAz*Boj>JELNhvlus>)-eim^Ov^v$k@uO4r3NGHG2Pzs -z!QXo1SSzJKMo>Oe!O&7Lx<&IImDShx-+8dfGZMbmCStR&8j3p2nfK(AG%tOlgPD=% -zHC%}2(>~?atyc`(`$f6E$_?G#UkrZu58-~=%z2_J-@Au#fBS*f)l?4gXuX^7mtig} -zazBwW%58{SmCfm}jx587DmglWTm;*uA;5QvVYWJY=TjcM^AQg-N2MCQ1 -zl5k(uH6b{_rRo|P><^!P8u>hnlkcVDI++zrI6KP02uD^rx(9F-4SO1)Gb5AkgM|QV -z{tsj`uDSTdSK_FM?|+JLyQeXuR7!XwHVD -zSE`ZfWL;-P!`=hKtgfI~PRqIz*cR^1hQ<8Zb)w@anMMr;ub!R{?*WgeiPh%P$Y1+L -zkQvvrb;p6x0wO~v)dqHjGRL9s>-J6^kO`O&X;(!Jy;y@sbyS?KF43IBetJGRO -z)mwM?Lmp!=Mm=?=_|%RD#^%2ToG{RZi1v&3Uoz{R;F~mzdfR99JjiDl4r9*tJ1POX -z^7~-z9V){jXoF5A- -zabmhkh^fW*j79pmbi^&+a3R{3DQRJJ^eplr2cx6$jN`bQk(c>utt1WJdFR=9mHr-P -zd{w&GIR_pWOwtj4OgdsbAzDk6AM3%<2s$dA!CQ_d$ruy1XioBD;?>}e#Wr27rE3bx -zM1-}Aj@c7K%&lrJihR>S;~!5xMdiO080}0%V`VV2mkJn=7%P=s)P^+7_A2uHAS?x# -zkJM^<6fvOYG7#U6j>KY�w2fl|}pL3Fxbu7{qhancIGO3s+AfmR5yfq+4sg@=IV< -z{6gI{I^UJG)S9tu*(`V`q&ag+bq@b6VR(bd#~1x) -z%OSIZ%tgr{AHTMjzhc}d)LA7Yu#7ZZ`SvKX5|Nv>;S8;zsYoA};9HT^;++G@g%;H4 -z2)aT`9;R$eru-ytiqxRSPVy_qs>y}x -z@S%^KCmhdCRO9)KnzH^PbfHI%mbEBW?1DZJd>vp0*Wzs%mFdg7OaN@|jOi}r!lE@G -zM9EfDul3?nD`Q12cFa2_j`%wg$rt=zOgLwnNQV8y -z;PEU*jOKxJ#lE;Ib4P*+lvmRgm(r;$yllQ^{;V)5F0|M3vKB4la^a_ZP-Xb}%lt&k -zW$@%o#XNLts1BCgeDL4%h)MNx9b?+hI5WUx2Myy__}7`2uM2h5z7z`U!@6BrbE2?L -zrTR0>32DI|8@~vV6czIou!~$?8K7YYMR`@bGv`Pj=AvkZVef9rioY}4XET~b--h!0 -zj3L9aWQQ&bZ)o@lWs-VmY{>UA=^Kx5k8{!|(D`7%TXs%1hSh#xqFkrZCJAsdh%p8v -z%WL<;yM`xrT}Cb|ty{_?FwH@)W3-Ue@6(Y6sRCEEi!aHPczpQ9+rwkPmO%NcOC1{= -z*+u?E7b3q|C4cFg^%o+uUy6x*bB&4%H)dM7?GXh&>X=n2NuY1#t6oSWPz9whnP~E@vy-;U -znF$^4Yy8Py$-ujm=gG{uiFhB0G~NerJK%6WcB^dA8-mDp@--IbZ@D=YjyEb_ZX88;|v -zjFMEtK0@!od%ODef>(x5pFAGco&WHq{O8+?J=wU9>Sbng%(!FjCGe{xvLNBj$G}(P -zE-Wmw#kFsSHNtPH-KRr3!Lt)zlQZM*;0-OaF7YQ{*v>m%SOX1HC~4rSyz&e3b*B}U -zc${Z{LB8q~7?O4}=UqE?GE|pM+eszg5TELF@gI#~wHE9Lknnek=X$Y5|IP?RCC2VQ -zSj6U0Z_ss9y(Nl#+D`fEzB8%|L&)3*(4H1%k+%>JQ-v7s)45En7R;7_W -z1f44nMfn>d`Hr2GEL+-($ug@nMj?5)mg9)Ezuzs{SsP~yf-}uil!9Ok)>K3 -zbIr}~OL(MWWv_AXc>OH_UvsK%`^s0dD -z39T6<4WMjDerIZ-CT9=$(J%9Rbqi%70%O(&#|MQ~zz?)O8<@;qXH((5E^z1ukevH< -z4vnYnS@7GjfqI-v!#Ob0Xi-zEV23^k-`Y2Ua+!txbo)Vo$BceNxp&tL>)~@mu?D`e -z5x5#K?+ziRBDEFo{$!^xKB0Bxo@fZcAOz -zLHQpDKM;06aX^0HC?Z0omF$a6(Zgup%<98jnODU6P*<{kCT5-K`dCDhQPifwHlGTf -z#B|SmeYC4xZ*-6H$oG%;oG4+(2H284j@Yn0;Z+IHThg`G9P)f?IXC+8(fHQD%E*UD -zv&nm{QI#PcadL1=1EP-oc3zkF${=tA;Q7~s(?e;OBOX0$*&hG>uSHz~_LO?Sh}$=m -zEQ(z;=V+VK{uGzxpjbOUNOw_ONbMYQy#)x0lu~zS&6~hR7nl1BsD$<9h&mX%yd;E- -ze_%ulVn{)`7|~@+fglMI -zA^IKAv#)E7(A%FChm$GLLJM3v`=~z9-}dy0ba;PJR-NeDC+wkuZwY!V*a}!BJW%1S -zmjv75A|Q%BK`dkDj9z&6?*%<1O&^OfpJJ^T(uy=AG#?GEf$%`s0N-ce0Lz}J#aIEm -zg7MgL($*@)T({BOEK^@q*maJjB{i|JVc6=6VcVKZ3 -zt%VO06D)IY1TK#iZ_KCXz`-Kq_|{Qh+T+x3x(j3&<#d+Y#PHoY+}D)1NboF@S1U00 -z054l>eHe8?S*i3W_R04t_hB?UpLYT}0G+}nw<&EWAC`Q(MF+ilo1>jKU|wD?`MfJA -zSnx#2WVBEBS{AnR*`AQBAn2N}bg=>(4QmU7rIw=h7nAR?n(^u9LtO#2;A4^mf$0Kl -z&smHPzR?R6wNY7Y)e3lH`tm>M^wrorunYxg$JcfD{Ow+KPGHxoit)AshzUOi9vKsC -zhP~ZA-`orAstyRSpW~N$fH%Ne{w*-=9_KfCCOiiNLv*Q$g^C_{b_R-w57NHaiG1Og=j{j|W5zSRYbfZ!#t1^R0f5w$XjzXGQd -zG-4%DB~j$VHhfEum>VUuGs-Zcq!EqOAyxQt>eY_R6`@2elDq6YqYfn^k=PYjGr#1^ -z9*am>^|F(exwUb_9Jwo!li`b=C#o8my#hV%T`RqwNgns`Oe3*!^6K86kBN1T%&viy -zN6}TanG>MHPH`n~S`LXSq$U}<(VW)dMCe4w>sD}wV|1ZfspkjY?&i=D0)1a -zl(dCi*HF(5Lf?VsM<98!jrOs%t|w}y*8)pd6^yH}N`!|@ -zSj*;3F_2LiO&mGcv3c_}%nbeB{Xm(+6G$_PtZPBqi5PoOEqJX%5-~1>kjZQDgQCA*t6N^(%cJ_po2h`EUJdbYDO% -z`jjDVf5OL%27O9x;MDMF*<|qbsNlZ;mmcNoO&0Vc+M|+CzW?+lW`7o0({iSSokrOt -z!kX(#-*hGeU5J*Vsp8kGMac@F%7;^-J;(RTOOlK;*mO!<2nm4Oh;_)&YHa>Jhf5r+2~n0N_S!Nu;2+qcmXLZ0tjiW%uNA1g>6 -z$KV<9b;$0>3;frbf89C_oo2q7uJ!!%ib{B!bl)s5D3sSM0@o{@9oovP5xZHGEURM3 -zRpxAVaJKj6Iu6q8S$l)7+t^*P=IjtuC~%bn0t -zE`FLmt7qk+r{-~YR|X$b0&nAQi>!#P52&Q_X-rI`Gy~%?D)a&kG1;$k9cg}+ -zSXm%iLiB=vJbdd`Gdr~^sx?2>Zg;$h_%lyv>G1_@{XKMDOXWt2nZ3eiKRlDIP5;@o -zdAJtLJJoEjrKq)wRnFrwU^QoyecrP?t*`3-C^bf&bxd-p>rp+|X=pvy0W$Pm7L -zhF0PMCRx~@t&O#Z;VD%`wX5RLlf6?tUuVU!w+evcU4@U3lU;>UCKTm(ukMadZ} -zMlN;g!*9C>UwcnMpC`&5Q_?DX;@TUJd+?){MeFzBR|lrCwSd+yLvF)k(f8Gxg|FWH -zv#-7!`IZ+@txPj=#UAwK`$)+5k%qowtu>{PZueX7nro4}w&1rnXnoIc(XT(v9fKJf -zzB|?8Ep4)i*Jk{WGWp8z`~Rmh?EhcNu+&N;p)=%ZYum#zWZwv^g&)_%Xa`V(tO<*yggXTJm-dV>aQhH(1b8Z>+OIHMhNA=_8>N)q{^pROjT_xj^|nn*|GR8s{((BDggB%@5|3vS -zCUgD&h{Fn;9c$+T5gCactMvGRU7#H2f5Cl==)m8=uWt!A0s8JS=~>WTC8p~gGP@tx -zFKN4s9Hgtdr(Lo5S~4r3Ps%Gll*fNPxAR=m@3SnRg^1%t%TnSnB;w{(WCB?T0J;N}(sM)Wo3uZteZyqFB^X5`W%rpkupUWQvq%S=wErMQ -zQ11X&FVzZDf1SDHkFe1Qp68~yL|;oKAt|@30kt9r#|dyfa@g}JYNcM7fhSn?f(}5B -z^~ZXhe#Sot21q&RxvdsRaWcAsFkt;0iin)|dV0F90t0y=`b1y$R>>6>y8r8p -zlroKJrB%0zraAV)i&W=;|F}c9o=wxO*~_mqoDjT9!(3_Tc`fi@z7nm}2ecHtq<5a_ -zPd0>gr3RlqU+_Y~OEh*t0154Xzm#gP&hX<8T?L+KAOEWh(Ee`By|X)+%9@`I_6(c^ -z7mj#P(SH`-T;w|1x2Y5>={w65lzT!v$iDB38s@w^D>$Y(Y*UV7QOPuC2E4d8+@~x9 -zEY=_CZF_G4t83>>cd6;*dAVu -zI4lzvIq^k}{+PM+PN23_A*j6xMAxa`a@Xm*cND$1ux1JutT_tu;s86AJ}Fq618clR -zL^U=PM*&O?oC??O;)*OyEAPoqkk3SV-oDK`PX0eykBZ` -zB9BA2iCTB_$dk>mOClOt(;&qQ{qZ`rfW(rcoxrFVVqk^NcTvyeXK{xp@?-~-xYYFt -zIJcSc;pfW|LLv0LWCi|;Jc>s>V@qp_>T(iy%PYq58LMPbL%vMhsEnn?kl=Gbb! -zA-x%P6@fo-tQt{V7n6{-FQKn~4_*OgBkm;9;k$%6CJ6VEL9;d7NF(Hed*gtLOzDio -z*k*(d`}?r72kD=Xpx(NStvC`kkUeFtI_ZUk!HSNUx2C~<4;#x%&zkh$iVj2c9t%c*c<47` -z3Uz{~trnW(q9HaNmWX)D?SB?_le=wzWeBVrLEN6A5u6gyy+?DErEP`K=2{N+kE@KS -z_|f^}R+B9HD)_h=i;7J|G)zSpQ3m_FR2~u7p_fXf*WgW~357?C%pDD`8d#R0A!PQ$ -zH>172(C+7dZ5<*qO~KebEq}o4=%?>L6{z1uEt2s8=RXr-)KKq9nd?>|MemBiwOCUz -zZ+4A^@+s9)W~{jWpY_!8PjyArmwT(u6?f3p=0B>6& -zCvOb@C-yYmD+W@6NwDy`)ixm4B-{x|1m@I(%U*XJEiHsjaD_u(N=q{gOr&q*YHp_E -z)A#9;N$T-Gx~bp7zglkkPYZ{b+->gfXeJmA3U -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 -z4c&soz$9$rC+5d<7x?Qs@Y(d4UWpHo7 -z2k~&_;Wdh?w%tKyzZx3f;ENtB8-UoVtd32RaU%{&ZL&S0c2QD+`$>;qE&Kzv%3Pgci57X8t_f4?!`|?n1wT>(w#`_93xM0sTGb4m@>xkRLt#!DfUf-?YY|6t8jvhj+VDGm;pheywuOuZk*&vhxP%SuDfh_}R?5p7bQ -zpl_o_>9+;P3GWaG=Jn4Ft9EO5FEcg38ob=3%xd794DavGF@0%WEYEmJm -za=a|sLnc^co~FNp8Kh$C>fyY!=GTcQwIp!=CotZFX)6mVu$_3;IqD+z~sTxTV@en -zvQz!OXeX~wLJM>uCcwi|OEALob`v5aKY41nbo~<56Q_z-D&0$M?vj-Og@#|h$VJwDXmp2gDUW8ryNBI)ik%Fto)Kg*tT<8O} -zI%ph5|5)U#Ri6QJK;w*WD_;3Zm39K#q;VI*mv#!I609sc(gh`S#Z!2V8~BMGY|}WQ -zsXGG*b1q?2z_{)N;s9l+l7B9De4wCe3eUp(1^zKugW)4Xt;%V(QBG4kildVE6JRj> -zwGwlpJU9fk39DA{7kr8*n@_dINFxeT$SgVk`T+;;0qO#gvHSsXG4|6B`4#Uayjz4d -zDlW7_lPWyfMKZ)}{-^MjEAZ*g`c;wIn6)nrQlt%D6_4)8+%;_HPvLK`m~3B(^$zk8 -zNQR9=g@_zqA|j4`(QSW{k?$(S*gN4xfwi4vIA*5>Ys+{qm>QiXNELR8mv5Yh$B+NJXi5}gf -z-nIZ9#3T6hSLE=);yNBCtPXfM%QRP>s(B#)ZtWl~}13@R{(K$!zbB{OdYnlC((hc_P_*4nNNr -zy`Q8vFy)+6jlT=?jeIbb& -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 -zN;ms+NZ>D;qns^qv!7d5#>YPr_!3- -zG`?x%PPT)yEeLjC&!)p3a=7ply!|weZ>j9hzrrv?*j|hgNB#HhphYR -z8Ne`P@R-)LFk{)SZg_Yxrp^|WQb#+dY?INX^vQ}?pS&o^-O%7JQJ#p}zREE#l|S;g -z3tmwx?X>YO=9tiMF5a2siwTXyFKMcmoA31@-bGDDP3c9Mv0I~UqGK3IJEz0`EJS8q -zPl7#kD@K&EXsdN=gR*#Q?QUF=;rlT>>ne+D5N##=&%ShMR(GS!z*1zvd%~pNmhY4u -z`4I0NM>va3ngAQpDPcD%P(WgLM#2= -z4Te0)uTJwUmBesDp*)3L4CxZTghiNDMXtcE{K`Kc`8(|LQb%?2qUnAuN-2&YSZ`{ouNMw+Uw7bQJ%%!bVUtpL4 -zn$US`2K{dHb}>of7`(7K$?K^iPIS+5t>+2a{c?}bMNc%JScV=5t%25^+QbSvSyCc; -zr6JxUD~xYS@^&`38WQ`Mh5Dndc(Zu77khNfd5G0Ho&T&?CY!=1Gzk&gK%D2ZUWQ3@ -zIG+hTQ+km#y(6}mNkh9VkOyRm4mxz!ng3QUY#}yjm*d_1;rV>YM{eilI1k#ZQ0>hE -z#wgE`eI(zTu`#*zARoZ~(FW9*#`>lXJbUI)+$Zq{Z -z#NJOO__gEeiy$b21mgwOMO+u}U=XvgRiT5hs@p2LjxBMWL5`fk@F_njwR -zYNj*adlGsbFl{ZuSTwIaPrZuzlsrHsVsfVilxUL&(I(OVg|I*8yQBF&kCN-#^3Uga -zGph2P!zC+Qp4U@Bd0scDo2V{E2dE#UABpx2>M4GO?v#5Sr4oGsh4%E2V8%uowUU=G -zRv!lVu$WuSS01eQo?qSkCd&Cja}D*J65-s}jHzBUF|~ZYs~$33-MV9KyHWoAQZGsJ -z&*67qPhNyRHWq9Y(H(h-@awO!OW<)mlkX}OR(9lho#Ja*IdrEX39)&?O89J&zx}$#t!}Zp(ABlfp7p_~VOM>4fS)1vMLB~N3`dIuD -zcVny;(!6>MDXN2fFU89(H{TcZtfNT5vmxP^`kOYKP+3mrxqaXRdIvs+b8ThH+|%gW -zjHUHMv4vq&BLmySZy9x~`k8js@KdNard^(X+QI2hZxcJ2R8JZB_fM!2Pb0@7*rhgf -zsFb*W8D5#aRZ;{PW6lwCZCJ8uKnRWZ@DeyXh|PaXvC-78XL^>wA?B|`o^3# -zDrc99J&h7!hVZOg*p{)el*Tf~A+@S3p!U{@$~|;sz?TnO42|L3+8A6F=lZyS`sfc4 -zvqBX|GDs>riRDZC>nqz0mNamwKT; -zNG{d-JCHAFcUCrL2}f__c{T21;-iV)ehzbz>K2;eq__{eC$P&Iz0fu!3ufrCqvHka -zSJIgSM#`VbT^&Gvj7f@9gYjgI#;O@E*!xqnr}<+$VzNj1FhvuF5cXU_^u1gdsQAw?jVQfNW?4k>*{;WVTz -zQrc2D0qGf1dPZR$(zB)X?80oM?~&5?6dI8(lhS2{nMmI!rSB_DMH>9p$bWI64(Vl5 -zdRd_sX{(gB7Rr%cA*ENq8i;w=m+y*u>q=ybNdJnC(0fbKdHll#4gAypALdA63P$9I -zcm`Sy17rNYeg||`h~ebeSFh0$e`LOkYmz(27My=A&ppq!n2SMQwL)&8UZsG=Zwedt -zwnEq`7Qt>Ehj=cJiFrU5l&|_&T1nn+OL7nSFPSB2_LgN+_}B?t?l8l8O)^WkKQ`FH|KC5Oz2CA4R+o3M211YV#yfldRUqxiZ_6>zZ%$&2kY;B6 -z);7zQUg;N)PmJR)Lyy$}Y37S`Z_EDLg2p-E#wR=xXPY0C70Qa=w(hSrtwbbGM|wkA -zAG1V%^pIHQhy_QI+Kw2+d*V7;`_<<8ec3XPMRmHh9-!0H(8jFIkY~iU+FR?B`(_}f -zSd*RB*<-Lwo>k5k?42&(+D3{O!g9o6E%R%H%^hqo5?KX{vbqqAJG2g?M{e{NHFl}i -zoC?fn3#k$mu;C~jD8&=1Ks@S>=KQF7#iTvySa-7m8X=bR>SVc$ -z{|I*4pfiZPChFS=ebJ5iiKuAg)HQp)8^U}ep$LipPN;#UiHZivJ#76U7H -z5~81vfnF7X)=_>S!)7Ujua4kJn)w&s!fGW02Q%p)3t_{hvxAYde`oqa$xW*hbM;KtK;&=N -z*$L`#mk|Hrzpu^l<)&pr+RoJvL_UzN3E>*FKDa8LI{-~7V%u}MseF7hV(HrDHhCwz -zFBY2T-pJ`2J=m#odCcWn``6zo1zFNGi+o}>e<^(GGHbTae6*9w3H(OkrEui(_#mPk -zK#t;P%DRp`$mB)>T;4{eV4+j%iKPC-%H{1mzlg@Vuj`2lD$1ec&mr}ZhwI~ -ziWROwf|%#e9)_q!#!KP9U54Ke+JPdS6mh5X@dfak1hUii;J`P+TmQp}1J74EbGUFbWz?btnTI>OT#90iUbE -z>D%C8u+Sz42dCW5K>L|sFxukzCh;A}kPEQZepx-V&pzv(0C|xN6Xsu2@D3nu4vU34 -zW|tnmKMAs2@F`gOvvJluFqZ$c#cCTS%(=z{Rqz-f?A4`y1y=cG>=Yr=t;5Q(TTC#= -z`;9B*MX(TOoz!2_Ki0yGKYWy%_>S%+F}CceULBMd{qNCDElfVHnS4~2Wk3rUTdQ6Y -z#2U6P(EBVkGV_!V^*s4LiSWIe+FIBe_skH1 -zRTu-#O@tpW#mIC%t+f3%jSY_C@8Dyl=qaS##Pc_Y8`z?7?S%%ij>?NUV5~ynZ!cFb -zkMo)8dl6spUjgyMsIF0*k64*|>YxoHU89Rnc$lPH&|AdJT4((iLL0L7v0;oj@bW;r%8zr3Bj`G0051AX&C! -z{ZYGiskEb4Vn@#g6!6oKV}@Z(l}}z+gVO(IEZ7O+p17pEV(wiVesnYJ*&^sfRNj -z&P+yGKO10;>sKo$wvI>_8B>EO -zvu>#VRkdv5iZqJPDuO@RaF$~phu(zt)o8Z^&mE9CU@h8~0=|}jShnY<$Pe(ZgVt1P -zJMBdd91D!_u3eL73GcU?O{Qwrw6_{{XgYF*dHBtcR&}9z!5kp18F`>L^3;F|wW$pD -zMph5VT&z1yX!ts~8YNcf{2Xvmjdq}#nVC{)tyFt!-weg85U&bzH|@UE8q`1nUHfFu -zyUd<6t$CVs?c9MkQG@KnwQJvLp&g0*Zq#4?s5O;qtf)P;OxF9HjBAo1iu9j{!~R8e -zs7UmuBYKk#Gvd8HR7crTPNN1`sfIKmrQ**c*x*p;-$wwCXoq$4_Vtr`)V(igkOz|? -z-4ipwPL`oI6^NNlZI{uG``uGgyF})Xz#PWfQ}{pG&_ZToUwZ|`M50Jftn*J+%jF&R -z?IPFy8gzxRMmC4A^81kEi54y=u45@Qde7PAM)Z3y>1^^_OuvV9M{YW@;%RV7%HflD -zr&QM8UfYZ{;0d55#`5Ra4HKTg)i%E>G&^QC^dvuqy@*Ai_6MsMs(J@$#7LNq)pQP}4IWzE&^( -z82)uwiuZ(PELCQowwR2;^BeYVh~{NLUOFaPx09|NZ@aJ&EFu9G%mS7Kc~F+ClhSs? -zKcwqeAYgxrgl}YnqgrmJw`L5))&V{^^!sSt3bVlN?;uazp}b}{?a7AtO>L-U`|&WN -zryj_H%McPHuqJbWK@`E_$)dDlv4*CGVuNG(#Mzg^i6KIws6utJ++mr*&U17PIB%Js -zB84~YKDs~74{eGQ$AGy!uGAp*3b8_xY>_Ga{R5IM<{qQiOi#+dk;UBhl&GF%KJ=2U -z)HY7>#p2l0K5>o3sF6YS#7)C`YJ6QS7dSb0hbp)Y`^s%%g(Vtul9@1v*4vSvVb5Eo -zQlBbmli8ANC#n`!#pLWe8e@zL8hz0tO;xI3G!^SxSj7fUh#wfrSC_A2LVngRo&(CP -zMHEU7A`bMHqYm+0>9W-m3L8uM0uC|Tu%Lx4&>t;dy=0w3Ja5`oGUce2@3eVVPxa03 -zJHEm<&=+bf$;L6yYB#R9^VSuf)#eY)hZy68tOcdaNcPGdt4sAW7BX4O^lZW4s1ak| -zsO}FS)=ZW>C#}+5v1H4VithvF5AEV7$gPe` -zqo*m&tf3T$qWyK+pmnmccb4*UJ>hiN!u@rZ?ciN7-~144gIK328hc`3qzT-mtPlGn -zpZJiht^_fc81@7^rFs@xw2&><>#Ju0KQ{~W^Yo#-77-Rt01Xn)$FwB_|IuSZyz4c@ -zW7HpcMl{(%jeivHGjvxq>X)v{_IXO;C5}moGwvx-1J^CZmxJyDJ#ISu5e}2AF+z&l -z$i4-HI?EUrfooF{oM&6g5%zsB@@Mc`M9&$7GuH`YBLqgE4LRF$K;ZxTu9;^U_#>6t -z$~o?IrR~__?#4^{f8Y5hAbSL0O%w;rA3Ce54=q(F_^GFvv6KDuqzR`>ZC@-7G_bJs -zPbvWWzJ(c=ggCwrv1co41`*BeAnJoHdL7@@ -zAMOypStJjYGVGlbEi^{WVY5#jn#YXASgW>N3YWcKjo6t~XXs=658-F~h)q}CdyHX= -zUe&7$ExEI;5g>`-jR_A;d7Qh_NApP6Uujg*HT}EJU{XtRIP8!_# -zefAQ@`0~te>)F7&OWEKaZT>Ox{*+t^xoZlpdzz~^={y59;2fhv3qD9R3>HZ+t9e4L! -z%&J4%4-s5F=d(6TDQD08zL!?lO6ix7_N=x`=@*c$U#*hTwLO;0UCTM7S?3U8J&^wM -z`?{A85q{INQw$kcFPo$6Ja20e`5`T$4IksEH$>*Z8=`E_8`z7y0X%(v?W)@EtkO(s -zqMoV13>s5SxbHsQ-kJb>8WZM|q{u%uu+0A0fmsU7$FJ603eV`1p$GK>%{HYV$EJs* -zE}Ek~xfAw(w2Ra;#fa-DVd$nD!dRXW$A5!3-fH*|h9U{q7*p;7$gqcgcYuAnFOoY5 -zzhNff07HAJ`7NT%{yWLWoyyBme%Rr_uK?YSW*qh{==-=MY48kc-)i$bj{k+8M_A*B -zqIORxGDJdUzieQ0 -zV!S^StTjObs!!n7d$ -zeRvq$Tl)UM<*N^sqOVNItGuciI!^9qCp$V%+PXEZB?3G}89VZ; -z;0Dy9H)Bz$fj>MD7BdkuUL9i9+4{qw!GvsLQBd1aiyhzoL3jZ&VPyV%VS-vcz={d{ -z9OehaaGS6|iT-9itG;qajiOgAKPVdaeBR4wiDiv+D~wPN$^M5z>lTs|pR=n%XStQD -zCW*;d`R>~Zuebs3GV9u0@^mM$3{!n;AP-#2!kB1b&>M@+GTtvlhQWX1H!F3vij@mz -zXmTnlmUm81N4^!lfyDk~NRcZlbXRXjWY+KX3PP-m(9 -z)fT+(O6`F1>O@hk^OdmO!HP*iJU`63GN4~^m!zFwudH9)fYg+uG5jdl;E8kf=^OgF -zbjJzNpS8lYIvw5|m*Y!TDiVfmO=@l-Z634@VL -z#FiY4+<${cc!upl1!J&Qs31iQn&m;(06POD5IyFio42PX_2hxn`LS!~aw-~%Ix0q%K3qT6U54XsTP__2TNc%61E -zxuj3Y6l!`>=WR4Y&sm@kz8)F^f4J!JM|*VAaeqN9jz7R9qt{P-Wc;mOKPttvs&wew -zZ2pXXp~%@Yg@PXSfKrtAGGO}d;OZ)I2HJs4Vbp&e=T^{hHIAqK*YRVxe$bW)-i4=2 -zDUU(*tQCKe#>SLGJF2!-%gmIRE?HZFQN3FFO4=mF#5jyIrEJGR -z(aK=0E1Q}2Zb@9vuWFtvVJ_=|N4XEU4~vjo%NA!q&L9axSFq4VQuOwt@Sh(g-==6% -z?jTgvb~|M3E9!l07S^i@ZU-}(WY@j?rl8!l0ITJ1LeD|>_}lRhoF(m0OT*Li7G%a) -zxR51&t?hsAX;fx0~#*t70cY(yOdnp2fe@G8p;k -znjRiwtTZx@0LL`VM(yFS!Pisxq*EuT6IibT4ELD^*h3cX$L}ujn`B8^nVJUKM0WWf -zSl_ik1)LP`Yj-`CKCb{#w~~RA56=3<%p>r&y3fq>y?T;;iftqrxjR{CNl5-Foyozw -z7%~vzCLc!|kTit;VwPd1yQ+UG<8|1;Wx-+C+cKlF`C@6+VUFG$WF?$Bt+nI77fT)B -z{>ZQ?QMZ})SpIw8?`%T_wJI|(zi&^q5V;qAA;*1FAuH@z(;NOKGDFmq(Yij)3ci%( -z>MSs)8-56XADM!=M66Rw-wbwJVjXyr82YUS`!-he6|sgmu;zSurP{Y|f&Du(vt4X2 -zGWiBg+?vu_;vuJB$nzi4edO5^o;8%0tyh4#8+SVbSjn_LCU=3qH|^#1%(#2u*OyeV -zLmXq^giOw>c49V9=8IOFF%!FP&^gEz3n`KY#oG*9=?G>{{EsVoUc9qlI(BZ8w1bg3 -z{r8JGmOI+!_f5y!p1C3C)vY`*D-1@<^fd;)H~i~}4Ehen^!w^h#6J5L@sj!NjlCP0 -zrX6CwVK$=1lV2bweB4j7e>yCR>AzxvnUJy&MOz`)nc5uU -z7IKLxhuOxf&I6PvE=^7fO}wC}|gBYfIKE -zvENtM{zboX!wKd1)0=BPs!5V9)Q{cJ)S}VAddPW7jIeebFQUlt$BW?2S(M=mZzA@n -z@YAa{=yJ6I`e(pDD$yzN6s)3}liiZecgtjxbS<4d9Sm=BLzi#@x`t2Sk-!LF*>l#f -zTA!rMke|@+U!Ng6q3>OPQZIAHLhewvq7O+vBQyMNafI2Uw4A1BOG}k^oSGxO&#JS^ -znl@ac1Wg6g`@Ax(&;IaE;Hg%xZ&@E+kLY-IjeP#a*hiPoNRl<`W$u%DcggV1ShEWL -zUTWjT$fRpg?-@DL=4D|99dN3F*8S224 -z_TsjZsuPeNv>)-WRP6)CMZRYgzXb32vho+FTdNi;=bkFyvr+Fu&&q4$LV}#>-6H>H -zy>UIa&9}93J)%i1XlU6kYTFUDB9I|ZQl8MGwBtB$#f%ernb%p8^B-jm_Un(3Tu5c@ -z>i@27oK#l$M?+qc1%3#(U6loidFXco@HqqOfi-5>sPtc4KPCF5()+1pkkSRU^H?|G -zPT7JM^6Rp)+eQQT(^15FJSENDQB2! -z|00vU#NQ%Xbvs05dkbcoEi*KI2$vY -z_A{GK)H2ZSX|)54?f~#RwT&P3YFU!OaypsZ9REXY+eI^T7%}6&L9So&l{01Fl3)@> -z_+R?2gdr(@F!JE_=jkf*5$xMfVXSqnOwxB%>|a+`LQ#A%_Esh7(<`H#nur+(xl50k -z&%#T(b;QG_`7ZeoGm-(5P~BiA?Hy(}$uK6=#{YvaXr(=I9gw60MoF}C(hMDYt -z`H4GxKu;?J*u2f}V~!rszlramK8ot{gPGp25UmJ#40ftN9L4VogOPWS()Hi -zd9RuSs<@g~mgt_EoqV_A?zn^CzB*EJ5_Q>UScUlMfyGAD`UlXR(0{Y^|7PU?*70;)`=gnY -z?pPm$*3DXS1oaJW#=*&K@oIuPITgIG|h@oHvS3$h+M?@|jdh35FKTjA6PiPsuGA{vt -zN^^Y_J+d9|^14`IWs9~TMZT^V@&A77Dj*GG0y#DnymBbVc;R=0+3-cCI!zf=O7 -zFtG09YC}uOo&G -zCsFxcNBK6RO~2E<n907ED$--lBX3 -zJqt0hWUq-UFhAXX0_A^D{7&lS-ytPk!?gmJ)>?7~9%Kys5(gvAH|Y#CL;pYbC;vwY -z3Q&SkS5(;DQT;{hnQAjC`Iu_B-0%F+bGk#jMYTn?{lo8cmcfYTXcU*f|3Cs(_$KHp -zn5W(Dv?4Uy1hiEN7~(s73~^4a6_uHHa#6GqQRRJf(3p0MhSO`YnA)d=0;8`2Pm|mg0kG3K^?j5`XU?eauVZ-UBa* -zZ^F;W?D$HYfzLR67CU|euf6hijSDfo+wJulcdA4EBA&-FF_w$R803&exqsHu-4e}h -z4}&Md()ya2a?EbaYRhQL02-6@iZJgdt+l( -z1CNtn?~PhJp;7O8S##!wKLTEPm%sqyhFA|!c|CGU_YCs -z+os+22-yssiOv{jsxw0>Z@Pp_XN_Oz?CivzBHLhdzYf*Y)Kdv`xw|Q25B~GxT*Mmcmu8Biz -zFxEtIsYgzv9+b10BHl?d?q(_v80Nv!5{bM#ka@lfNZfeW5s_*CN_?^X2r$AKnj|Of -zXy3Ja#cHz=@mV)<2~N@#dBwHnP7Rxrvdtni+mDF%wCj~$i7VPuVJR*v>_Ho*udJAn -zUO_cf=}T~B2!%bAzTeFC+JVidD=KD`TPYtxUZtWgqxY5LzViRLFIBqlDf1%HV2IvT -ziWKE_Ov+a&ogeo<=jn<4(C&U$xc$}>6J1IAa_bQ>1&lf~5g~e#ozAL-P3omS;^I3m -zT^-FQ*1b?qPx1Co#kflW-ny(X)|C#~Ci+IvJ3f={xcx?S553P+>3ve9_lb3tX3*L3WttdYY$NoSJTsOmup;rJc!x9W(w-q(E-8$ -znIvS;LS93>nCOFs_M5ON^x#+PpkC;(Qwchx=O??^Vk!ZZk;7Y11o7y5yms{&X~#sh -zaF?GVju-oTL~FajwPofci7i6rZ^I}v2abqOnM?ba%KiAIoV#kMmVuPT6aLRU#I203 -zJ?;NqyWYg{_i61adK2GgBpU$f2b}YkE{n@$&$2~KFu^nx9>&30jA>eMkBt>x?3Ag7 -zoF3uvv`Np9O0SeGCsh6<_nMlUkteUc580h^70pVpl|-e~qaoHb40RcuOAbiLs{>hQ -zBy8ZP_&x(JU-EXvw@HpUNfxYxY(0;Uca>zGXo+t!!S`(ed{KXjJPONEbS+7NzQ3%H -z(Di$C>{P^L#eDiQ=B{J-PIq68@HgV!J>uf_mlmF9`@PKDR; -zw_;{6&T|4-eVvPX2jjG(+^jRp_3*V9!wK#bj|_NzIo;i)a&otxpz#d#ju3u=buU_W -zvN5E)cfiJQHS*T=BQ_4!#`zbMr{wy;H??{8EoR1SemMB&1|#3}AA$d1w_M|$eH4sS -zn>j@694bsgv^=A0DCVEsTe=|H6OkQ)_Cj)Ky_m7Yt2YnQhb6SxUTXW>;*%2gXA-eN -zAfDvY{#-~IPx=$FXS^AiJa7o}#mbsvl3a0i8l!>&cRzf -z)o+Ha2|GW?d|fL{l07vaI8rwx8S?8vzRXnYffft2pQ4ua^$!gq#~OH{BiH{k!@G}U -zL})W^%ZP8_=pkvGy@7AqcNyT*8O0OcjNC0D0BMIqs3y|v4(E4^`s$mJLg2-+uxBeK -z9s2aa$O+m9&4;IDl?OUyWZ<|OKE{y^7SrQBDnwEi!1zG-$enwu+zR!nwR7dJ -zwR4h|H7Dgn -zBqkBWF|(7WI?bMKb};oH+JD1gHdQK`vxpBS>THpHt^eQMF-_# -z81?X)JKn+EY5_=v8_FxXIdvs@#@Y|llZEr){ -z%7aBZMdC(g{eKdfJ+DJMFcs_`(A9xIk0I7R^E%uOqb0U!b -zM#2Yh6!&q})OuGpi4%8KPa}Dde#U& -zcGrkz+F9H!8@DUAIhP+)kKaXlgqi38d$6~78J{WmxbT^cj}0H%choyR#}zA(s=;Rq -zK3076_$8P5{EqpUtm+J4yKHY$7xUw`OOo -zbyimG9_tw{Y`VcXs^7}y*Sx)Y|CLC}fYzaHexkLM*G=AsxBw^d&gww8gwmuoLJB -z8E(q`=&jtfm>Y&lxl`-W7};`-89gFc?e%PxN!rgWpAo+3tie;4>+n{6t;jf)>$dRB -zwnCI`?S3#B -zbl1c=tG(W;V_{3tP-k58-+d!oFMy?OX!GxVE^)ls>oYWe>xArvn;D`r1bXV#wL-XBOTZ^l=i_^?^%ak}eY}a;i3jR;V|7!Q3zOm|P -zOHvsHy(dYpZ@OJe7U=9%F2oM60s~BddnUo-EYbK?t^_yOQGdfN -z*P#96SS$Z>10^%4TqS~9hEf^8uV}7))(!3IN6*6dQPv2*DHX2W`V_qZVp)zW1$?(Ga(wv)&HK@jF&8$`;lhaP=%Z%jjCp>pImP3grxiA7 -zn?!|!Y{A+hovYl&t>XKbr#vM|C%O7E-m88ct)4E-KBsf5^>sD#W-3pV0g-Dtr}OCa -z4pHWa^;*DNP_3iVV`URx7Z)-H@1iz3ItfRo8e*|h&A{>dfF-A1bRX*fm(WmXOr;k! -zn%Ch=QSC`^HC3T4A6EA=GOho_GbQMcuZtEixr{d?m*N`O@=rc9&K-la<>wx#35@jQ -z_!ebyleykqDkyh?^2tYAR4#5qrSI7K+kN-g8t~Y!m0C~ojw5MDV?a`^t?7H;zV -ztJl{STShj=xYlP5$9%b&8`M|3hwu6U@iDTRr|9i1S&q?mrK=jAo3zW!wXxD%u5_^2 -zp)apxvDbO1Hnn*SdV2L9)S$H`n9+=S+Y=p8BaohIJyK%1{Ch|W_Z8A^{xwKX)#gQr -z2)f&@6#lNhxK5ZdcMOJL+3yy`qb;sA=fjwNNP|WGGPi2F1 -z`k1MjzMu)(&AXL>L*ncSoW#Cwe^}#B19OcQ9wVE$)Ldmp>|Bq9J3SV;(48al9}T>9SeqfSBCLkoTXIkL|Ok)zyscv#i4opfhJ> -zQ~xiZ=}LjWi)Bqq$i8Vk{0D_RYDW|bMB&uA9Q5*87qwb;%%0jU -zsNL*cDK5kr9ZJ0)e0yLmPDh-xs~T0Wg~MKui!WL%n#}H*+=&$TXSTF$+8|x=*R%h9 -zKFt~H`P}COj$)FJMo$7_v1o!`n<_X$`oGjB3*z`?@8a>zUhRg`wC3pgnTC0++8{#> -zmkRc$(|08)4b3x-mI}3N)17F0^BAAP*g9}IoaEF5p@%^X7W>mlyGAHy94!%Q*CaI= -zn}@a~HZ%Dae>yy%Os-_%*JqR5qaD%o^0V2^@eU@xz#s3X_s_;SEOI0Y3(grfk7<7V -z-QxPhX7GjO#~w{F#v9|^47e44c}{60oqrzlUF3o5@y)L_&cFKiwL=BV>Mgie2K>1) -zph8Jfb7UQhXFDv+DK-l}v5Bv4zCFv0@Gp??B$z{*%WcK0fP6ejbvEwo6wDe*m#c&k -z4%mk_=Syor^#4A4O0&|nVV$caF7PTwVsdjE?xNZ2MkE`Yxrq2{zgwTYOX(^^dYgSn -z^C%Zt!&EXCeEv?@s+;EcO4@G1gK3Pws&Jg^whh@;?X1S$ag~2-)ndi6(_2@nn~#(% -z4t&v&&`cu&QAx47lXOI~kvGH!;c0uLw`#RVFOA=&w)QlVjuai#)1uN*>CbY;SU;`H -zKSY+?NNFxM7dH%Vwzs&zg>$!lP+!ca;Ys5=s=bf}Ox~^RG}7NBTToWR(iz<~g}xCu -zKjG-G=2X-|S}+d1f%R86r3Obe4{=W!)*G%CsvQYGkD=Q&D-TeO&nJm?gsAUzrBFZAA)uQSI8oa*b0eD9gGmu>g~72oDRlDH8+B0G_y|9qek~YXqz>& -zq;_$1-EUU)+Ep9i^SA->##D1^aC<-2{al@-qx|3NYyRi@sIFBf=_bo1Cd_~5UD5TF -z`2n;xTQm#baaet*-03K5`f`#aJS`+gsJr5t)$Re{13R#`ko3Ta|K5wp{dw;(BYPmT -zn}T_NAiFFpF|=Fw)$aR5dH(YKB6ykD$x6?zl29NSn9jkXV0x5clyUCp&of(qgI(=@ -z;MTPpMRvkHGkXz_AlDBm($@NOIh0)_#ZVd4?qR~82dS(U-eX(shVI)MeQLFbo>%@K -zn+6UkC8uLKQ1!WgtQS}m}UEE$-f#Df=V%I;sfHSvLU|w8d-h{7(QT` -zgp}cVWR#EeC{Z1X6}k!*F_(5KslvzHzQa7 -zO!^F^t${DFjo`OIe+G}mTscab9#~&L(nNdAa_lKn*VO4Jh_c|}`mXv1>o@D0THY?{ -zvMV~{LxXqyr8i!&Fs;kpRi#VsSWdc+6hAQzE#`DUi!T8KDDi>PtT?G?sc70m$Oz8w -zfh!Te(O&bFu`=N_{K5}BFaRW?`1o<9XBJ>5KD3iG^jTs^MI<1q9@2cCzh5z -zi)cY@S#z>xe;g -z>1;;axQlbxZ0IFEJqLXR_=u8_Pt_H6GVHL0s$R9mJ@ZlzJ89$ud0r3YR1h%5Gf?p(t8u)6_tL2RO-W(n?dZq*0u%*s)038WCP*?cxs816#;&Qoe7HifCx50=1 -zQzWG?$6@(jFyb;AI|Vl)&wLn$l1&+wE|5`){G-kMo -zXUDTTg<9J^DJl`!q8YIaK%>*3=cA+jILwG;-%hf^F`VI -z+Fr&6Ji0Z8ljGW`A6SCBDi&4*zzicd%Y>=wd0lmgXi^Q(SERP6VHsS4p7EO3RL*53 -z2Ihl_Q5!h833@YE13ov81}!UVYpltSho)sjd#gp7^M3AIv5`_zhBe9n%%Ps5Gy1`4 -zuk4-)@A}_uKr%t{cn!8;-~liLr7KKjF^np*l)|!$^6`rwt4>+`2tEDc?XTdAi1Xzl -zvZc+TGbCql?y+;m0RySl|C(nI@mRZ!?2@wDSNQ3{i{kzuS2q;ry22?vz%E(t1157Z -zqiEh-x+k9tfMu#gYej$MgGqT$)=8P -zYy%ds?UAw>`eOx%-#NYLTsc|-NJW)ZCE=HTu2205v>~FE2ee7PeZA2e2P-=p=#R{a -zlD+$vS5jmXu#wY%959)&a%>Uv4K-rtmUw>N&8l!yD0)Bf=5Xq7yyQ8US9T9%pwa$l -zLi$zluqp#<8uI|<7smUyh%dTg@8XPh(-dTh -zm<=X=)~FHgyJ!rkq5c(A*Sj{PgPq3t~~gwKhu~ -zQmKCk`+5||O~J3>4VH&SbC7clD-dU7;|cq&#|m?(M?c4mNNHIcJEa8cBAcrM{PALe7%Dg6G}AB*LfGKVb3oB0$6 -zNl)9sM*v?K^nXX-L!j*oz)z#n?-Lc^tWw#wr96+VdaySx_0@}U(pmYPv+_G6p53uFS=)zVLwp1ZCqSFQoM_XTqUyYu{ -z-g_xUJ5fINwZ^{^11+NZ;8`@lr-=V`XvN!q-q0jt^v5XD>mw89Lhgs~*3fzJDtD@h -zG1|~~pOW@y+lE!P{9k*;*jsyN&thV(k1xZTeP@4@sR3t~|7(xA{x;4o`NjT^*k5pG -zpSeD$Y!luzJH!~x4j^!o|0FXR6?K{_ymB!%PaKq1|AU6x -zQe>3M5ywB*G-*X--9=8;4CH^f -zImAv-k3n`N^;z)MQGS{X;T?%p|D!-G`sX05EDAPB -zrQfv9{y|{Z2L@j$*8t7Txx2zg1k##W -z9`y)T_fKwP%`|bIz)Ee1)w0=vlKR4{?J?}#t;qd-t{_l|hU_eLE42{GC}2%St6aLh -z9%p`p%=0ubrcWcLa3zp-58BMI_JyE*(GfeYHbL_EYabostVlC6Ce* -zV^2E)+2rn%KfcN1$^W!186rcj;(r?CoiouF`Xk}KsllJo@zAg&R(M9py-81vq2sN% -zQ^1`p?i36f38nb+`{-RV%-!@R>RHd-Ovd%saQzfqf6bt4r5dJl{gMBUT7chlp&U}o -zww9eJ^F$lvx$1E;M08l+q4rfA8Y29WGU5S0phpITV6N3m?3gnDHi3;}f*$09z1YMU -zVjTV-B+4OIM}er2ft^JTc9t5Tq7z=0x5^GeQZ`+QsQb=CXG`2W6MjqGew7e{^!7n$ -z4sw@2QhD)eiZGX%&-|8I&OFAfWlGqM`2RN3&UE6pgcX>u^n06OvG@P~-(^hw|IPfs -zC~&WqjhCJV8iK4`X;wrh5pM`UP?Kz -zA&*~Qmd$gf&fpa3XvB3XWn+1a%kRLtF0{fZu)$mo$~?Fy9CFF6_V7=LhZtq+2;O-* -zWEe(hhoz^?EGXziG2?a8Hyn&aeTapum)cOW3UvX>@(Mg6&(DK -zh|IyAcHuo2qy)5ZKd!%<<@xx(z2)G)-g4m1TV8f$g1?d8LX33up1pX_r;Dg0FW^0k -z@E*6TuVRFO$^Ec`xM`RgigliUYg5p?VdoW@$Gq-OcWS3Ua!Oo_FaB%pGdTVth{HLl-5<{kOe~ktO6WIgjC7HGUV|Dea546}YD}cNvaj -zv}8R9E&sD>u$Qlf{x-#ak)m#Pg_$}V_~Fn=nQHyX{7 -z)VZT8!(tKHsMP-AYL+;&7d~D`2mgH$OjXT!HSQJ -z%rwdd@x*<5mKn!n$WA6#8I7w2UhY#5q~yt3mEYj;YlklepqASL-+C^Pl7<2ya}ZzOu}( -z@W@PQWe=C_7Jp@~FPrQ;hF>=4b=oV3HKnYP;e@GNephwsJ~7X*0DBxa3pnY0;#9<4 -zR`+hf>ab)jkfoW7sebJiL`=)OdGKWa-H-%I{kFA9+O&0FRwF8qGefRRF8H$YyrlJ* -zC9TH-CfX!n|3#zo&lM4$dec?pmz8Iyl%Mt{%t@H-`Q0wDjXC#F$~3SKF$3U#ma^#~ -zLtm1x>mv9)Q8Ou0d!?bh5Zp!WwdJm#mF6?l$*YKIL%rRDJOME~3ybe%hCdM80@TGo -zV}j6ofwUp`)=92wYhy_f%}BhS^gA=1DK-t^~Se+Tv$ai_7~XFEpB16s8EaF#s;j+hP|H0nh%O*8cr -ziVv}%4^m%96&l(p^Bs$sze3WjyP(b6B#DTHhis|iO+2XzS-lb*jI|iwn`dN3)rwg~ -zZB^`jgY2_{d&}8Ld&`WDono^-+m|_$aR5nEmX%=!6EbRTEw0N+QY6KUi^ym?do%I@ENrvztqbw3m-`NS_aozs63pC7 -z9422v(Bo`H&Xd+5-a(>LM{I@$i>h-!BA~%u)4D%Yg2-uQON!8O -z;Wv=w*<2of2ldLPGS>9A1J29Nm^J+E|I6Jf+jf|J^z;{=<$RXFZ}8k{+F^7v9BmQvBlYjFK8={()1cU=3RSE;F$%Ck?$!pW&`yj{LY|4Xbsc*_*&({}Uju<7hYO`&NWI?79tdK^h -z^03@9M5qOC5hEm3+6(Q%fJ(AKG#3x`{-vC`7t+H>%9OeQ^UgWs3#T4Paz?+48C&Nk -zt6(hG>m@6K&65@t}8YC?`bqfV1d_>_jn9@ASn+bE{X?tzl#1c@T1-Q`Apl -zD`P5lIGvFHfdY*obMIzaXmZAUDxU^@<$(|@WmtCS%WEDz_eqH5Jn(+SN~dr~BiC=m -z+TvNn7*aWp(7UAiuQE8D#g3mMuiakhM2Wc6ZKE*5wNUbM0=vsr{O)(Gb*?bo3hQs&t&>@I>f}rB#&X5p?Gj^y{H(m5 -ztnkQVhnVW;uWF#_7@)nzYG`!Z-9B*Oc9XLW9;3G94+hz6UsH2KK=3A^iA|7DOEHZj1p6s -zCCmS}uQ_zR$r4Wq}2As3EqD@X4zho8i>>}!jd_N1IiKGcf+G6?x%}v0k!7_`Q -zw$tpp6VkTLH5}Z1?;3xM9FNL@Y@CGkI~v)Gyjrn-GuE$biuD=P4fHqoKG%~LnFe0= -z1CDod!S-MM?vw+SxlXq@9eSJ*tQw;2pd)58-3uE!YyK(nc|UCEK-=W8lN|Xdm1L1D -zNE3cnFKun1wL#(7+F*sPE&a(Uh(OK+4q|b@g%&*MSb+5*mOpl$ummzHqrDf}@Df=r -z+0jQq_jP^DFNUvda+A9}vEmM{Q=5vM87L%iM9!A1cOG$aiLL$X}`0`2(U#r*)}D -zsf4N8d0q9|4`F$)U*xDjyP!J%rWSn5 -zn)64>35PraT-?Z?_d=SWZ+k6haBz?}^7YHSwPFF7NWtmtUGHd@$(!ZfT10~xzWx-!k)};`wb$TXgzYV0frCB0UcQ&Zs-dVyE)CZ-@W`cW4vJvb0#hH` -zK+>q$p%U&_r8{PHZNG;~Lt0HL@+Th@PcsLc2JrYwHj9#ZH*T++Y(G-Y)-qE4r3q{Q -zRlbsKY;MWsnC&TMB`h+zoL9n+M}p3BFJs(C40$r5pJ`foip!KauKm7`+9s(l2uU82JWBxa0GW6t67)ZgtEG -zBEoh>Hp*z^d#pID5t#ib1HI|4Rz%FO1OKHJU5=c&nKIhyhzq1UxI;7xsOzSQ^82*) -zmm??P9lfg?xvMeCr;UN1mR4%jYGq4-v~nzgM|jDjrr;iAGRhH^V2}K$-GFQkOMnJl -zQZg8EAbO@N($cT@8}iDF1YmEWyq40oeP1>$a)AzQ6K -zmX3KP88sMJv!w>zw89o9%T%xGjitZ&3C^mR4sE`WcV`K^NA4pjU(ap3;Z0hwcG -zb-JV7=~=xue?*(xu|UdFgA6rlGcwhH*+PvxtJ8ms47sJ`4cJ^)f~r~rW@J4TG^+$fptYtvg20I(t|xc -zvu(MmTdDqV@jZT7=2$sJE5g_yQkXql8KYqo;3EqkCk5z^esU)1%KAYE;$s^5GX@t*^N|Ni9e+jLjVRv3*8j~bee -zFUFiJmmva$(s^kevQ@HMVLMBm?C&0uf1TKy3` -z2KpYRNEb@b4Lo@a?E4(#eA$3Q)e8Sy9(^7W8)+*(4K4s*Lh|U^#<|FEBdwz-n(6U&**Jilx&nB7O76>XB%!vvB`+#+*o -z2r?a0zJrWF(n@A8xWrDmx^y~y)lBlcRStUHzdrSpPb{ -zA344ZoHwZ|v#M+JVI1qK4pp0AB_LKjZGm!cSLJNSVgB%PuAbdHsF>=ctNKhg%L1Re -zpsSK%7FZy#m@#DUWIc0vGxF8MRu^4x1ai}W@2vjE$SZw{y^JBQs&4u#uzrsW4*YfF -zHY>HMKGVyX@-SLz`WRE==HC?R1A~I!Zll(g*mz9g&6HmV7`46!3%LO28CtA>kN+B7 -z0UP)a0ie2VG1-Uovwm>P=#Rzm8t2vqrgX1&Tg5hH&KPc}MP_loxXH8tZ&MF{{^~%6 -zs|8nk?Z8}}Ni9sjplqP|0bI0*f$l-BRK%Osj&rL+dE8`=wsvV1*cS~6$jHLj;%W&W -zdmv=s79v|PC#!@WIQ1n(smg8jPWHgIrj_Sv+_Ipmex9J$YHAsy#gusPO8DuXbg=nY -zFpEFc(~Ml{R&U}##r5B=wU{nPhKg~X_|SBnER?58Ka9w>S_@_nBM@0Br}V&O62@~9 -z?~SQ% -zma-_SU?G5HQZEmEB8wO1U3i*L@gpRl48_=@=NH(p)G#O0)#O21C7ToM+5o -zCD3WlG2p@MpnbZW@AAv(PhZ=_(XJ^M>%Dj -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 -zw14Mp>K%@(Q@g}J|>ldq6k?bALzyiWKg+li}D -zV%VMbe5s1xjl9!wknlNX7cUEBIg>UqS!3}H^1?dj8%}+Xt9b16_mIOt88A6(3T2(k -z9Lt?M^D|n~z=@L0mtY3C-Phm^SCO@uShP8;ZtxToACuZ)585GDvVKM*H*OKLpHLb5 -zdloB_cx(vr6_NL8An+;jM-<2@Ii8(f>MGqoLzMWyqmd&~m#+!Ac-h>h;wEP%-<<;9 -zI0-G)VlZJ$i5OE~)KT^au|QX)8^uml^~vw4#4~Gn^~9mD>Kf5IUJh?5<@h>S;qW~>^#_gBJK!b-@i)1W&cQZq_g^%O@_{cA&~$v6;jVBJNA;3&=WG# -zj?^S!+eLathVYwq^5tGfHjPi6wqs4bLk&&6LyDehIGWPbYrwY2b`*KeFeOY^4%cY@+T_gX&XI$GhpdR>c3 -zd!CNAs*KH(6~pibPI^Nc(2&&o-UK>L+qoMn;9V(X4>AXGkXB{V6|uQYic_->5rmgy -zuv(CPdnd9!!p8ufVS{T&>AbGR$S$J;K3^jY(5QQ!nu+oG`e5%K)Q%PHMVK*)Ak|}y -zl^wQVj(WQv?J!8|`Li>vDw6tw_=TQ5PDmzB;w(z@BU3pi&l>DM0jwAYdv9%HlJ~eM -zhkvkbTapHN#iX{)n)>9bSH%ZhWbw@<)bO*ka$8?3RX;GJ?5i+TT|~@rnQvoW|I8XMc&%# -zeDCan&EOK^_(i2{%crGn19M{8jJ#uDBZdSzi2ngRA|l4Z7G$JlnKVCR-Yss^r||k< -zS4yq89k>ZOR_G=+TMWP -z)VMQW+wt?gCFTZGyZ9}e#5X;qm6*3X}#s126QM9~fgc9sFx7!NoX0zUY0l4)KNY#roV)4)0rUR76kv7Ms+)Dz_6 -zQKIqb4o~5G?G$T7^Dg+Wz2}Q;NcEc5AinZRAmi7<9-S^!Akr@sdAH93sqmj* -zAVe11$YflTiMd}PtdkfHkJ=XE?dx);P#KWjjiS*-yHWUOJ>ewK7i=u_;Q59wd}$BU -z(3@pn^w{t;xA+jljQ-%{iu|YZ_3bR!A?7n%#QT6z)57)%1;X|T{?fXv$om9;=?O_q -zP4I^y13AOy)FQ_90QOSOGO&ivH!OLC_Tn&a2#CY(H|)%h>pX|G4YD=6IbU&BJ4u1q -zYC-=gj!FK?f@d4zd6g8C^$jvdz`g(r&F_$XY>&7G8P2(8WoV5&D@ez$Mn>Jv!|^T1 -zcr0rk=v9Wc$TR4S4Hn@woSzVX%D^7+1zU%7-wW~ta22V4VPPO&?ma;5D}}c%BF`Tr -z0oWINt&cI_pl^o7ZK1a-oGOq#&Lk{sXDu9f(a92*f=r_Alfwpc -zz$MRAK<-{7{2B5#G3(+PQtk#j@;8-~6PmHo1@yIXX)uLWd(0%y!H)Vz#4;_%lVo^O -zoR7Im)W -zeGi^J2s8g4F~B%?CIRn#w`7jPA9C9YdECXB+LT9|Q+@U@E~=uxk= -zO5seW1+~P1Yex=-wdQ^o-lG&g?#%Pb>Izm;TjZk8_B4=ms1%ODQZIMc@gC{z=?)oU -z#x&jAv=0w8^AGZ$AUCf$_@F2Uk9%w;eNOcIN*s%JTn?{_aP=~tX2i?H*NYi3KA`CS -z4D$MP{y)TtE^eaSy%_O6O}$w*){Wd&_cP;K+otn=p2|@_jLl+O}mt -zPxvN&BtMrw#NWqH3$hbm&hKs)uGsLc_jjf=$-AGC6-?jj;Ob`YD3J73(m5Jqt04Sb -zKd*=N;GkzrN-$x`$55UaTR&Sb_nb>nAd5y)tET&JvV~w0)gp`PEHKK%o{PL%`Z~lm -zvfAmQiP>9>oDYzk+oe_D<@}G@f6xD#hgSQV1$mB+-;CkP1o-7h>VQRHJ~L)Mv_U4Z -zNjzH|0D9vS;4amFgauh&k@8$&cB8Bvv4EXxhsFmL-RwOt^m1kQgj@qA`ade1(8guv -zcB~zOHPv`PJge6(biA%O`s|gog@$z#8al^YHOqo5 -z;kBKN@lCN!zp+$nMRrj0#^ofRs-TIVVf@~%NaoGY#4|O6f@8ftaF|nHc~(4OW9w^? -z6PmRWU$Sn15`X2ez~038n8k-++gbvjelcS9Xl08=rXwmyoxRd~4!Ze5jErVcpWG~- -z89r2a=K}ecSmW0i*LoR_4O9xZfZsUtZaXY4e-r)V8S8KT<_$9M?|rIJJ^YG8Oy7t9 -z7^YIZXL}Y>L*EMYI?WvZ3w~&@T~r$|8ejpT-UPWgx4lsoq`vSl^4`55zGuky(OB_c -zXA!Af&s+|tUuQgIdyWgq8Wr`k3yr@NX(1YAQC -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 -zz0~Ar@% -zU;q`Qt&tROSG6#xx#Pflmn_eNuI0M$T`Adw{^km`JCL{C+ujnXN -zdRbsTwAowoBZ2z-5@1G!XQ{n@5C0vLJ=AF}1*R&Skb7inz8%@t`|7G);z`@i^u77& -zj$Pt?dW!Gxx*F3E=Mp{&D=0}laj3JOV~O69Y@-P%$D1ySDZ9^Bviyw|dw@`xD&75} -zYuQRR(=ODxc8lu4=hC+4pSo82Z%-;fR8p?@(b7E9-=O_Hy1b->o&@`zR6fR9;inR^ -z;C>ZmAWx;QWF^U5sV&Q$;3>%;1SSV6mr5#^8Ba?_4BjwdGM+`{p(m9rFIiSnLf>D4 -zI-4Ibt}?B}_Z98Tf8)>cv*5K=z~Tn`B3;jph&@jR4OneUuug`TIS+j`8P;lj3uDO% -zd|OJA+*I50M(-e*!cX)nceL*OucCU9K -z0v@x+6w%_$6{klLYYdL8HIloxT -zIU})0Ub;Cq_)plvPQybm!+!vAe$xXb_&W`rTE_aTfaytEACw0bwckc&!iQ;uEe)1Q -zXG;&9o#If!DIt&5&6%t?|$e?TFO*t7vE0pscEUvx3iEQ|zpp!B|3pVyE8A&RM#q -zZbsP&%D?ItciB=(<#X!t!FJj+xES((8QyiW$e?E89B0A3ym?L0c8izkE@0Hfh)bD4 -ztSi*kK#RkQTvemwSs=fGzY2D$6wSYOX8707l!0C<;Z4-7L7 -z%x}{W={XH7l_q5MSb?uD8zHFM4y;Lck|oG2+~^$f*dB36Ht-P&M6LBOf0)wrm1saz -z!yfS}m>Yw5$6MF-h>H@VnKFNH4KkvHU&H=Y8;%)SVnY(usTYf4sLoELnTLDs0{M+irN2KXBy0_kisehF(uu{9$F#*=p<_FNasdey~A -zKsr2~om?D?nAt1wixJz-bMPblYJZxy9og*d4U!di3TYMv&{2545ZaF2xWN0sEdMr* -zgR7k{8uaLmiHtF@IX)=wevT`0&YVq>EORPpP0b9}!_{+lXn>RLq#W -zH=7+t!9kUYI2Wq#f#7ES6n|x&Bg@WX>?|rpcJAr!1-W8LU#m42H>vp_l -zgm9)!Zc+GS+kbCUSrh^7eacX>Y-y^-+SL*}{vobm{VI6aW#E~Zo?UhVaR%s9W%d!m -zTlHlpYQ(n;`;lX2vR4M{;N#=n7%OqU;lfvSQqQ81g{&ifjIDiQiXJ10g7q%-#jY4#w*A?~uynYMaJXH?pAz)N`}hF}q-i0>TpKyTC?=Kubj!M1+C@9X#azjzJj -zJkNQ~b34!F^L#Gv4{Y@!^D+UWgtw-F1|A3*@R+P9=pv8GBHgz%`O-Oho8F|i$QJ1p -z<)ArDZaw!hs5u%r1r|SS$QqOnCjeRFqzxk~8TxKer&{arygL@R`_&thw*&b!o19VUC;jMXG_Us|L -z%x(3ju{-UuEG$ctUjfbCjG9$jsu6m*FLb&rx$HGd-WA?jQJ*Gn>5E;sEqUAPKgO;H -zJIkEmPg=g#cY5PeA4{uUjq~F6=!_rvI}z*zM2X=vh4pTO*6{48y#BtU=ebXoni4I5)lyt#Vz@*Tdnu5DOb -zQLoSJ*POh~g0@FV$20ZKZz8|h+qrfZm$WTS&OS$0g_KWq*?w1Bb5cov-&?B}l_hSv -zUCTunae}A#&~GgmYxisLb(XjMPDz2F`onsbITfcjbC#}S9=CG>XWv%;VSNgX1pB0b -z6*BwFn1e>F!oO1rvMTDscENANH%-c`sHd;obrvZcoVD6Xv~Wc|oeT~snHGG1oEEZh -zKgwdHT>8>bpPp8qK!Z}cdjjy`)*ziTGBf`1I`&{?r_p%GfYm!y9^Wj?rZyOzsq)}m -ztm&(Nkgp{*654Zxs- -zP!t7TgG;Qz-U*u#m7ha+da>i_%^BJQWv?f{=cREMp#x;B1zZksXlNgy{Uf(IvUe=< -zfm*Vr$}giO&Q4nb;m*;_e)x3_O6xjD{mJE|qF>W3^Ha?J{;!5&*7mI$k({&v8+q@ju6wdmrRkl2L?{EH -zk8n-H)t5a4vF8vProQ!0+zml|3$6okJ&_%S=ieg~htLnWM&o(`R~>XAXcyAUulGFX -z(yAeX)HEK=^SFNj -zzn1`{UW@DPzrSn#@Z)_q4}VjdgKC)Cb2|-PU*UFeySZK5UhWOYEY?Jl-JH{R_JaHz*G+6 -z7Ob>qE~V7u&tSn1N(rGU336VmeBZe@F2KsRlIFG&Z141DtF -zXO&i83_S$j3rud>lw6ewt)g#3bCqORB;0=U>%KR){OrvJ^-ZVx=376$IStaMlQ`4% -z)3cGg&eOPcb}lbvnMd)TEcFsl2hN&Ob2WJ2TInSk_0G

hpzt&lzaL>h@FW`%9s4 -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 -zg6On5#EFL0! -zYqW6fS6QiYZ|mHy=E7rWGueJEXp7j_Ycx!wIU+E|cqd~zC-F|#9ZH@9FVY^PXN4$y -z2F|vkHBxU+ZDAe#b+8~qUuB%-#`745R9>LfF!~3q#a8*fGj+b&)mGGE=(9F?@Y%W7 -z@5&RL+~@&K-ZW<#Qh*1qthtS( -z7bo~5`%r8f>3ZpbAX$)rmD|U`r#2^B@fO35@G3?n@fIzz>1-XS=ulA8NqR(NF$Q~Z -z$8eS3XqB(Fke0*5ERx_(Jmdr4UxOWMpcvI!x_Z&_pzqCV8`kJDhPK(11oJ>(L%jnp -z(3@BHU;cvciH!bj@cK5-BqmDSzTQy1;=vkl1oja7vBPGxVn*Tg7q^2PA%cHz7lk5-cuV(S0^vuj=baBa^O)ePR;o_#o3oLttT2aS59(Xf7g+s`hP^N -zfYqCdHNaGqB|Fb)MZ$!;u&keYiVDHUGjXV`@{=t)VY`=zmRn#`L;chn`UCpQDjx>o -zJaKGE4hPx;aya5iA6q?GG+4<`;x3Wal|+28AA)f~aNMz~7_4c&fzV6i0*R0WGusbA -zE|`P8@1axcu=g!I8T?=OzI#svvG?VlVq<5k_)21cjh^U7KCZ%|5do{+Jo~FASn1lX -z)HgT9V+>Y1wO#H9IOIO2^ANP&3X7rwrrAg*Ha8VpzQX!$UOLY@OiKJ&99wI&4v@&A -zGYWa~ZSlmxl%i&1{R0K4mzEUi^3m>$ubPI4@u106JDc1eg13As=UIN>0T%bb1CVpB -z(uk+^k7M^s)~)$pcfSJtGVJD6Y$-f1mN}rQ@I-_1!H9}_mn`tLxTD>zUO7C$CLdMt -zrQV|ZRi|MsT8KOcfkJ34DgcHs3o%++Dwm-rXJ_`zonoP(me2CEP*CV-q -zIO4dz3(~*CYJHEQzK2Ilf?sF>-n~kddn|viPmrB!VgfO!&(9Ci?nV*|b+@j(PGDEBHf5MPVt203lEIU6| -z#NtCbvB2|P(Aq&K;l=)==I??j9nvE}PVvvf{h*Fx3W%ljx&AJM;t{%q&@8_OAp=4y -z1(u%czaJs4Ln{K+pYu1E5$cxH-E|E>BbaZnwQpLn)rdG*zPz-c0a~FrDO{1Uo-lJ? -z=mJ7AyX-4Lsx!FPaEE=PaQ`pdPZ!F3lw$z*1ww&(|0V7h3+cWAi2n=jiv@Ed=>w@0)7&*CH7f!kjW^!h2l%2;Q$HgeWEYizzW`P1FBx)jeeiN!PFJt;fpY0{Mis)rc; -zxZoEo-+0W4s6O#`f&%E*hl+vd4mL8 -ztxN_Y?Vo{V%-OcDiFurSlFrK+;WJ@|?+G1TqJX1k!8jTP`MEh~g*pOu0lwi2JTDI& -zQ_MoK&uH;lzX|TZ{=nnRlqSCjym!L1Eq12L!(IcQhN1t7CY%Wb7dJ}*hKz+DNn{mus$bQo+oZqb%gSOV0Cg$@CTjW0U%_}}Ev -z;eVO)dF77|=$yeuFFLxl=<%fu&;=gKjZk%d^lHVd+ErI4j(_JzhYA4X`T{|np4OK&bERKV2^C-&7p -zC~KWtmB;X-UV8%Q($jO|u@&%YvS#{o4lHYL*sfIAt}OMt$H=d -z#fX~%YlDba6Igz58tb`G)~&%lVeGwuJK=*Q-hNMu(V8prb>~89kVdD;^{^Y}95eg^ -zY%m0@&Q<#Ro2H7I0}Nj4iEA4d7ko#X^hgi$-XAI|eA(YQQNOP8S&;2?m;1~`bGx2e6AnELTfV(n)n&QY^A}XRG%b|o -zD$*?I{!2ZRs3y+Nc7*f0Ih(^bwU|;9HS?G`MVdq*c&2{LF-ThU5-c?ZouAVG8|icK -zevFh;tiEC4Y@1YS>>R&Xn$ly7Wu8S|NRyl&PMv*A1Q|!U|;=fhMgK``@IRE7&5Z__xTp4 -zaNrYZq!?e4ew06^l*88^W!{0`r;QDerws^bAiwbv3bp_g%%Ymr$sTMA>_@&aS`L -zhg8`>Bg{%JTI6bQebrc|CkU#E1_>KG}t!;efFnq -zn -zJCb6nF+b5sR@n&w`_oVPW?s<=HTAK0zBW6*FQ1R$3uHi34)j-;l!N_%Z0q>7Y==R< -z`*bhP%`6UYJ1zIj}-dTnlW*Hdai->RT8`aKloG@ -zdN>>!pw3KYU5ICtD+m44k>N-U<^c=$CDQZ>1VQi(W)6fDAMod=jKK@;JjK$fgz>e6SDk -zjF4wzFL@fLo^?(B9C{p4#<=`0A79-P5S)7|kF%vP!}3t}Te! -zqD-DQ37$*yo+S?GVDV#Lg@qN7+>12z_D(Pt0oe$4`U8E=EAUGwnepFTR8gOW{at}J -z;^-O$rIx--mOel&E~>Ct+5o -zQ9+)xcIm*v+cx-Ab=zxt4r*XIYk#Tz-kiP~@G_b^;s_w`~dPmGc00AK0%z -zSL0d#1y9hlOPnEDifqfPTvLz#+5^4mo7|I<=cA&{*iQy0{RuuOCW>RR!kciujExN! -z#opx3^X)LPn=!8G&tgCX!moaF(k$pxcui9vEj=6B0vof*;?kn?!9|^c8SW*lCjNxA -zXbJj4xXC9bFLy5~b-4l@uztch)+L2Ym^4wm;JG@ab;t$x^<*~YkAY<1l8*FSQLAd# -z*Z_T*CKc7kpB8?G+(tMd4k-00dR -z*cCC8ulGW#la`Kg+5564?b;=6TJRE|)^SOf_Mb~a+SN;}X%fbbd}!OjczACS#%M6w -z<95S38Gi7{uj$#)kg#?v@7IkT0e$57F;Oj~Ss>J%4fPAtsXYeLWx>xwOVW`QE5+uY -zgsvm`ZUN?YO*r(gUM?L^IGt)Ks7G%)EXJB7H=WvPR7b%|E-;m6oP2*%=n%6Ff;WTs -z5*NJq#^z(Rj~&ny4~l`j5rkpErxBfvL{Ux#PQMh?cKzFpl>_;3jMmV%s>+a0F7nY~ -z+zv-hzMy?ch#s}z_tRUz -z56%)$T8k$P8}Zxt+i^!Y`KpR7?}t^n9%slnl$HW2-0YQtF9(J6v}W?Zp+OBl2tu0Y -zhE#}Up_B)MMp(YEaxJi#v!G{3J_+`bRU$l-(;S-zDOw&h*wUdHYjI;8$qR@62D*`W -zlJcQ^&l?AU^$wJN0sFvq_nV%4*tfCH7rZ&klRVHN@H4aI-XfWb;`T!qyF00llN*%F -z(0R5=NxKH_8zqkgrqIF0H$4OExC|3GUdu)Ofl+etX=aPtKU5Kn)r%8coSz#H4pB~u -zy(>U;R8n2azU2L!{A=h^wEDH0=DVPwvGz5r0 -zj}Jv%C`F(L{A#t1ErHwh8;tt>*$@6>+P8gUE0zt9SYXba?zwVslW4^0d?4^D4tGC- -zI*&%3o$|m<`UonCxDKc!Iw3k|7UnOge)lNw*u9Okue}d6FDA21;8+2rrlHldpTiz) -zmv^2q`MRVQ$Z$NB8*R%fUr}_>=+|s|UeRV%Dc8)=zD4!RDx*45*xK0=)&o=HMx17~ -zS<5OP-sjn6mp!mFqdJ`M7VUqyPRO=H9!%jcy;VRx=&fJl+kN8?uqn`==EmsZ8?qmE -zLD~V)a`0Kftp}a7_Z-!5teO1DIvnd7A>q)R4<>ezT$GSE?DE8Of363D0e7D)w(4Os -zOc)k(VQY{Uc;o=HaFsxte&^x3Jn@koYzMzHQ@(nZ{LDM$GOrC|l;p`qcm%Z#WtCZ2 -zlgZB3D4*z#9Y@yK+)hGJ$`MyfWQPpO-NL2zyY|I~ejNj%9vC+~pt_W1W0d`JC8eHuy2 -zA-`9<1)R(ysUN_7Ur9*0r2D1I^BAP(c%Fy6Hg_*4J&mpHuayCFUj&`D?%8;8QNxGI -ztO0_DY@Oe{cJx;y(Tt0xG2Zav6&g`$}0198XRw=C;S8ETg0GtExqaoGxk=CODjFq+oB5P1tf@8?kEAE`nGz|RC>Nvr%SM%(HTNZG -zTo-uRNR2qd^8&mv994{7jde24e<`}Cx+*dHRVnz0ELgL|s5&WlSBGGokCU+!oPxUt -zk!k>wg5x?g`;KA%c4EHBXC~t-kL5LWcKL1GNAK6vF}X1uU1eVm{xW9*6-09P&z0Tq -zT-gd#%|pt2+z%nSC*7y1<1F;9UEX#EPeJb)IRmU&ndM68Vh`awa@M5BbrRhTd7RM3 -zT=K%^eV_pc$}jbNuU@zHZXvatTk -z#7E=y+vR8QWS%dvFTU=__%(=+*iOSi1EhxGQ0z^U5BfQTEtQE -zis|q -z;QWvVdJzKdrJ!BLj=fKV(}X+BOZqe>898SN8b1vQt+{BJcWnd4nKPB%qXt;O%)lMp8x7v%P3>>n?vK()hRCU -z^VD;HmYM@^$%1#LUn3olVy9g$-No2&*t8DHCo341VZeULb;L2>jcBv)1|$*XT!)p7 -z%i_xU9YD^)3jd1^4yyzY>tWc)B7AR$#*7tFej0HOpB@r#()2PqrC_d4a}ej>CTgb} -z>&bKY?ZVG^$f$5rW8tklLE-GtzDn11zq!PeWIPfhGMFq4W3!59zL>2+{;~K%a##TNVe*4E -zpVMP98NpqO{OGC07Y<2br^k$V1LC63&cq3Cay~6@2p${9%B%6xIU6dbNhN -zOBY~#heH`*jRo{?IX$(7$9TB%-!uw1xj6kX5@!yB_C`tNbY}>g92|Tuvk~tCgPlP# -z9}e~Q7ATsHs9B;R=T+dGl;WrJ-LIbP<=*w4O<0}6Aze5MDVp7&rbb@~P|P>IF>@F& -zZ7TZSp}6K=J>twi#t9M|b;Qq&_$w^ydrQsd1@;ck578bVhk5vR7wk<^P0SoE4JdgHJPWf= -zTk?BXSrbN$WE6$$7hIhI2hOF++~_yRm)I^)?eK}7<)B=BGSN){7 -zTw%~#DV;t`8lZ4@h3&%wC7#K^Ga4+FE{>PrT}Q=+itdi;o_pm&>>$wabD+Vk!}Z;g -zMMIu5{Z8SI7S6bGM#!d-eDQdyWKt668QSxBI@?t!TzNQD7XAWy23lFqll5i0v19Q) -zGhA0VzVrTmr}Ij7!`Dq|$yL+UOY}xKv^{J@o9>zM?U}_hK2UkYlMW3O`{RslD4Ei@ -z#bpi5DXC7H=W@35Y|@b}E=y}ZdSXZ$S(7aY3z7*^gK)?bF7xG~S3|9F(&mzjNjqZ{fc2RJRD4e1hZV*E<}ez!5+{Z -z`i)Gmee8VCu=$~=ZhgplMG#6K2#3DyDSe0=KRoY&8CxItzBP8-^ciP~FS+#-d}{@3 -zGD-G;Hw6D4Y|L*!#plfqhu***@oZq-HZ4#QKD-eN%QvlGKeeV_YhTyQjbxHu3}Pn^ -zCKbA~R)j-;?J>JYLZUg|5#y`3KN5JfaJVmT1tbmvlctInmewx4>vq^apef1*ByLG> -zv#F^*3m#Qd)fUcd$Xn5@OFL!2o)8ZGw#R9a3h8cJ&j5@05xU#bbGJoO?>55T*t~4f -ziYi^ysRA|qZ+aG6-0HJ6J)Cr5W#J=x9!ZcQd3lfnbmoymVb6Dk?nk6YM&PM=87GNu -z9rzF7P+~7Pn#V{EhvIs}p*i5@DB#0HetW;%%J`C)67sI#D#^z+I^ZqYUh-KxBOmXo -z7c{KT=EyISQWtO{#t19_ptXA{oCHSm__Yaa=7a!VgI#Yt36i@4Kl`hZsU0DA)==$HV#BSYnXaoIb -zd|p4PceKuLXm)n?qWw7A#C~ed-ol!ES0*u9lJ)NjW$YZy~LtaOfO30(5=!mS1s{Kks9y -zQL3l1aL9r=JJUDKt&_NM_f9AI~&=EA}+JZT-LANmt*|^}S=c^$Wa{zN8&o19=naUkwlk&e4qQuL$LH -zfv-0A%8<&pPLqaa--37B?@}p -zSBLzyU90W56yZNae9p0^Co$%Xhp=nk6g-Pp43K$^!9RV4cJ_VasBN#q1DpZl2j?8n -zH`g%-jG#=zp$~5|j~Q(t`Ukz(r9XeS)!cZ$HGMg8BpNmvEoM7Ed4XhF%*n){1hQ=sLR}#fXnbJIQjpZevM8)TTI;`{UD6zP; -zl8{XZEk7Jb{{gWWU;Sl%j*t&O6z*{7*&~_ghceJqv{yfQ#0061;3f?W4l{ZZLL04u -zyVUJ+fA(W6aaQB7e_>ZoU+QNWZukiLm7jSCm7XitNfByDyvfx-{#VI%r6cDNI16x9 -zf~U$A-O6f!sf1Ive2MuO=mGE$$4!!m4tcuQ3!8qrTM3IVmVPF{YB;+!0GV;O;0gK& -z4?i4YHzxy?g6fnobHe%~~(i^#nE$~Uk9N;9jMy`Ksbs%rxtM%+s -zc!v$L|8#NpWgQELZgzvOh%Zfi#f_jHx$=Rcqam|_s|$zr_Xu@dRXDV#2gns>e*a5K -z9KQRsUJm>_VIPN>aA-V2ULQ9C>jY*Mt)ax-BaQ-J9S(if4e2u|orrFahI9+D*1?_t -zvcr6Tq^}NkM|!Ce-Uagfk$$@CIQ2uYhoyRf>vB$cdJlUex?Kabc1`&t=%G_vKJ3BT -zlC#UjiwS}8jhP~6rr4`JK!^9uL5OzSy*)fQi$rB|BNr+fa2y>b!#H4Ybel(=2v8Y! -zcYn4###oH8oTu-Uz09Ym*{JBRTNKg&)mFqi+QareQrlI4s2u}uUsu!aTUf$FlZ}Jj4WDTUK=au{I?%j&<$0@nVaa^p -z;ZUpwq0=e43YA*60|26zOiu-eoL}v?#qZNb8Z!pi#k|fbRoP^8OUQJjq8TL->Pw -z@Hs+7-W*M3e-HA4C&kZ$&ZruuMIUP35IVw>W=kn`tUVfDjpj|$RyUUHDhP+(yfL+e -zEAiSV`iFuCYrCS=rnz%X3o%z4z}+1w4TKkUoc?!&3E!lORc|+ZwwMF*@NBlAo5Q(J -z;K(-vpAqNZ)=0Xkagd1R$=(G~DuN>+8|2BXkcS?oO=b&h?nACqfnSL%ty1J`U==ed -zY&r}XYkdHorgmwna570;tH0}7$@{+)M@=jkyRmD<`wxlsr<2jcl#@ZQx$RFk>mngD -zLh0CP%uI)Jm^n{&A_jBQJXGaU;GBtd3Om-^Sn;`oG<*1c0=`4S4PISiy1)s|^$Y4M -zbH{NWBm4eaIFXg7i=(gteXDrISq`;xiAL#~O>8uiAKR4a;WAn0@=a5!c*H)s -z3HDduh%enVrY@#x3ZxGkV1LErg`37U+C4eG-O6DcV>IAR2$dX8S;7v7xXDrvy5eDI -zzfKkt(JOn=8%)mKlvtDFJDrmF<0ww7fSxR*5j2X2AstQ`NH=;DsHuHucXT*(?Iv(F -z_vord+4A!e_n$1_+l44Lipc_G`D3B|7!Hk6rc~QKnT?KpG1Xt11Vu9noOZjWDW>Kn -zczc>F9u%LSV=3wH;V^D#=XUJZw{H^`6=`h_tXQCAIEkOE4Uv~SZ8fa`HD03_T@_p1j<5QjI!i0OuPAKKM;+d1$j`A4Zj%f(U5mY=qWqew -z?XdSqsNS1&v3`Z;HP;tSZS~|AVXEKsV;(Oej~u_Rq~ESya2?QNM>E7N(@TLbyi6P} -zVNFxG_e*{J4z8jXesbnssTPhdj+O;s5t|2GlSEmF=c~BtXus)3v?H-&BQ(BiUBVe} -z4(B&0(ar-i&IBqzdwEAi>LygNjLE=CW$_aN2601CbQK|@&Osf<^wr_LFjw-97-gaw -z^g|7(e69i<=cB#At^eQ3=c>=(X>{QKRfA=sz9y=goBE+iU#YL+vNm?*zaLc{R})_a -znco0S^*qev#P>x}hkc#5>nb;PU44)G-RReK)C+^a>Ddg=M_5^#y;hyVjcRapL1z8m -zy(CMW#WaWaU_YU`v0Z%gU)JDAD8S6A@2yasWIm9)7-z4O3x83HWA&R&wO -zNACyTA1HGsmwThtksbZx$d1Oy7AymiVgyob^wTUJ1zBiRFdFNmVE7EH^D6&LaOQ#I -zT+#@SSF?F;$E4ZZt|-rM7t?yHsbuPy6mqncPkGLOPYe!>gVy}{z-C3Sv_Fqg%y)#R -z=_+%?Ujv1!O%y8l9Vc*>&&H_KSJRj@R7SOzA>Bis9IV7Pzpe&49eYxwQ6+<<*RYNl -zs&v(id_^3k`ATS8PM-!RaL%&B$?v*g{B&`2-lz8;D7k1_fz$K1XN2)d9pNeGj%%y9 -zyMAL@pYr#BP^bTb)>f|iw0NI>u6RLw<>VQ(idLsaP?n|GO=%Unjs4oUZsrXZUphEU -zG&gV=*5;T74n4J__p*n3f$t2MLuErc_dW1tUu(me& -z>?O>c1B#L#?@sx50P6_KP&vq@jziBK8>6K+Q~+)Soke(fqeO3kQiZ0jdM26n*D}y$)a%ffgmeUw -zN}St>?;8#^G)_FklP|=f#JL2|7kYT0jcx%jIhBl%+^EmML%1xo(-0CnHzQB6ldb;D^Mn%bfgA+ -zev&!;8^2EcX#Q`5WajR2W*hJh>3VL)$-n>WJ1>_Tv>y1WQqgcYpbNL5bkh9PwD5IV -zK*MPZjSrJWXtrN-0=COo_rLVM0SUumE##%WxOx*b4oQPrZ@Y)-yo9g`^$! -zlfk)N-xWtXx!^(Q))=67 -zs;z4ab@kS+U%EaS2!g!Lx}M%m%=>1&b|1n^dw}_&6Q9Gl){u5Va6%A$H}-?3DX0O3 -z0V#XTJ{9%3J`nxnUuLvV;>$P>m^DeB9l!};Nw}lS( -z3ero;0ERQuM6LSnRQ26^1G|+04ys2o&Lx@hq&8Su?wbPn&%`#$`_2H+oaIxeqdQ<) -zh0@zXl|a%g`Ey=8d+k^8UO^yMF -zz7jkbeHAoKd3g77+uXW3%|1OSiVq>dzT{^kREu~WX*KlIIU+G8%|&D2M@4`PVvpw{{PVO*FE{)P{wymzgQjqq -z_GaD+F9jU={TtZ~EhK26z(bBWM%J7`Do2fH5WGpB1X3uh0)P}c37mAR@kZ#$-aktJ -zBIHI3Y0gbjkxJolnmilZZiG(Ws*?_^7aG=W;OwN|pUUa?Wr{Q8Pg}5BJOf>8$8r5< -z1yLvA9nJhIP&oZc-I~FT$w2$n_oePHJ8;st9NiXGdG-BHq3(@2OCqI}{j9X#ojb68s@ks9!0?Z6*JCPtYLxw?9{2wLuE!D3 -zBHss4p6}Pb?4d#htt}etz8TP(htE6A-EeR=M$fu6IcuV6*WaY_Z|813I9xQ==sWnR -z+78|Tz1%&d2T}=79cj?q7Ant&<|sI=o3)})WAp*LG$XqCIP7cYi3zK@tb|`bh;OV1 -z#*rvhD07PkgXcTUKMN<}JAsfjS}}vG3~ywCttE-lczB@_6mB%}87Re&IqI5(6vWfr -zx*ifcT1!XPt`|PGL4Ps^S{e}q^tMp&)+Vv8ah+!#^d|)Gfs!fkZKHA6*Ow_;$M+=~ -zx$JD2Vkoaubd0P8?DB7$BYt67Q@v_4DCg#Rbe?|{1mO8=<@#yxqzEr1(9L}wSLzFH -z+Qs^nYaVaR@Er66gWIolzeM=)QNTx!hF?9T$PES;9*Xe4bZsFyhQu{St^tbPYFX!gtrb -z*B0{K6k)eaJf|dRl+kq%b^}d=*~irlooz)g6nBy|iKLV7BgL-9IBD=~Xulxm!cO8) -z(UZ5rjz%q3d8HRS#Tc{|Jo8CtTVAhF!&O(pcMjpdGHX&Xt>~PF>YD^^G1*rSO6Gvp -z@=YjH<=52*IxgLfZ-ezckM{QIUZ$el5d{L_PLv;~7|WD|Bbi -z03SbUNFYv%2Od|ez@Hjd42@Xud1gcFB?mtHAde5nNCI}IDQMMyI-t+8FB}T@Qe8;* -z4kH?P#Rff%q3tCpL*H^aPDGb*nT|lBeOyx#d}ZZhoz}op;V?gEPe-3K+d%yE(pRRm -z_2r7q$>og7^U~E(37%p6Pvf2cjTfX;hb9aAe>c%Iq&Y_aQ}Lg|G=7cZ3nc@G9&p8< -zh{0+UA4tqhZ%VW#+BO$|R;+=4SB;}Bbn5?l8#AFJRWMp{?g72?7d$s0H=`AZl}LZ2 -zdz8g2{@!DkUq8!}?>ta>oaOt_!?&o^$lCfG5c!R}<7x;|a0k}X_&4BH*L$sz_#OId -zFRopOx1TzrRlV+z&YqU~Y_44%vYR*?oYgK5ICB8FRb2GfIS1SawtYSIz$TSD75xs- -zIp9~WLl*_KjnI?b4upzoL?%o=xKlSa{(UmW7Z4zvYwO}qSF>zWl# -z@fL8U)~(>gr1egb&x~zKg8jZ7TK9!5*kjbwC~NuU&{({__y{*%7%c}1O9VC5zm^RJUzCNmX--4=MjN+Sb3IsfZQiUg5a0+T|{ZJt0gw -zYTE3IKEBs%zLnx8sJCaYhVXWF9mNH>*BwC>q<=a -zB){Hn@=t~D38F#&g|h=$nDU%c4tQN28@y{+yI6l{itsM?U+|0&YnI;lRB8n6X12%p -zHO=`L1y1=R?>LNuY>We^{DJocsSxk7L>su7h3?zA*HP}OA7DZ|17`zyO}jyS!5VKN -zIHQzymoie-*sM^WXKnZ{WWTXfX>pkJ3|fsygFbCQ~o58sxJ1#oEKiuu@W>{VBgFhGe5gW76U+D3r -zL~1}i;3QA9K&SZ1v9_cwRHE#|LUR -zZN)Zas3To$5Bj>X>iweNNh43LI3 -z^6*$_a70VH6rDL|!vbfrKFaSDeJLi4yewrBW;|yVWY-yz>&aUez-qt-e)R%(C9tP# -za&KX!JHKS0nCB}?VHTY2f+pVzm7~4FU09;APiT2N#UYNs6D^(`K%aUO54auTNW|Rg -zjKnZCCJiycz8J4SX;Kh#<#rl1W&mQ&M`C2}I!ZGPG0lB33^9czdV6%so|HQg|5ax? -z^yBtsp-iBD?9D1HF{sZ(Jp0q_XR=xN>9d)5cJRk%#-BZ-_ul&P+5i3C&L5ve-YbSa -zCgIrA%D3yW24$r&))6~-qg4uR?LO?=skm+XePRi-y#h)4AmEEeOP5T4HodAWS+}iZ -zvh#b$Z5Xt#lR%wxo?sG>oliM3{Ln1)JCD6N5axlwccEw_e6#TTYKzVW+vM7!Qg}e1 -zU6Ywfb1V_kw%MK?DCxA%hLx1}AG9;S9h&VtR%ep1{;TOi5qGU%4XfN}=CUZ4Ml}~u -zV`eoUk_jOvJ<2Tt{qqVqe_u55j<_TF&?k21qq?&&c>j}$n%3Hmbr-_$Y>h0GN&p{h`AGagmX@x|;e^EHJzGuZsW`8`u -z(#QMlM3V#}`UZat=fdOFq7_pii5uy#`QG=vs+@Mj+Y|iu4L0aET5$5IJTn&ZB1rNo -zC>-&Msh2mONyY3)bHu?ZY2eE) -z(yBag^vL4fz8tpipseqZ=d}G3zFh1LHS3cb=$Toq9cN9Jub%PayxHYAgx+a=$sx8H -zs$HX+t}Ja|Y7vv=S*M*o;;3nH67F(bS>F262~)e;gTKRhj`Rg1XTVUNwnzgiIo8WY -zq^k&OuzGTjmhXkO)E>`;(A=;??3UhJmCb43*K#KiJb2mO%WMahz0Na#^R`_pQKkRAHXyDzGyh$*-3;9o*RlU5$b0#>sQ;kiZ<7-gT)3IY@*W&u0&>LYM -z8cD)PlKWf^`Joxq=R?7&`cSZr21QMD=oaNv))wXAiIAhp7ND~6KnWQx7XYu3Vy8*` -zSOLDbXclB5cL937{8$YrejB1nf-=~$v=2M1`o$6U-nK_J#AmaE_@FD@5rX$taqxZ^|1xMq#~Cu`6)>1 -z?OQY*s;UzHsyvl(n_WKHU=yd7dcGY_^)n -zKlXrZgRM8{zaDvR$e|R~(`U$o&sk0Le|&!Qx<|5Yh_NqI{j>Q%0l4AGM{j?q`INGY -zg9V{DPd?WA3-}qj-Or$t3$&Z=L|Y56wW_yEJmREf%%s?Hjwg-uw4=)Q*i^0Nf`5X -zb1P|ozN{RIErLyXwpM)21s}j@TMkf0Y(Bz{P@E3=*{V*@TR!5Ryt>{YzoCw&Payq` -zK26_cD!lX!fk)g(uRG)i+HUs>y**EEsE(Y`YQzP@lkHn!{nQV>Gg;@f&3oolJDnYq -zHh&EMH|w0ZIdRvykVZXAJN@JbaJMTi5Yv$)Xw_L}ZPc}I=Z`B}tP9-_lZDAaBRH1H -zjdQOo;`s^=XC%WxzDDRsGHBb&3^@5Y$NB!Sp3X@)IhB7QJ|$&7t+6nigp5`%>`NW+ -zgcoy8KkR6yZu37epWXzYbfkmZ2~SXtJ>nyheZx&qC|wSRxcIlQpzCr@-y6ZZ(oAoU -z(DGWEJ|p!2KKR|B11bD<)Jg!e|P$Y=U+f%}_3i@-S8>){K=mpQYNqzlmx~b*1+r -z{iO3BSZ`D7F$JyS&;3)`gS_U-t4=d3U(uJ|sp>QYF08Ma5fiW#RnIU4`tQPg_{q -zoF0N!2CRh&*Y>ZvPyE9gJPm!*{c!gSLE91?&b|7B;Ad2|hMHl~_)$l{_`-E&oEJXo -z&_a6gyjKTbImURG|Dz6b{Ida@#Mx|XZR<3)+I1J!%?4!-%oWxe`lwseF^o~THS|HZ -z?HTanNS=nJtRNQHcLmM=k!_91ltf)iIgIfORc#h92zckNk`_Gt$lysg|vw -z9o;h}BP;jvYIz1c*Vq#9)`H=JeJG??f*cpe^JFz{z)C24e_CE9(w(T+Sgq^cT4%6o -z?Y6bwtm6W_4IW2q$r5U{7OB@A#yOq`-iQWXMh>iBq<$ZaC^P&8_JUvQDbRAKv`9x~ -zUs%W43fFNp2jFj;n;LCTP-~zw=>9*(z5_n0YFq!DDVfQnO%h5PFeM2gp-d7=km4kP -zp#%)zRS{4_QGqCgrocrrLjneDfgnNx2qqv!yd)4GJzT;2P;bcqUTNwGR`6aY^_=Pd -zZ|yS#yzjl=?=POox7V&`pWW8lYp<=*vj4(4-iWO+gP%}*w&nyJ6sSd>^lV}rpdlg+Tr-5{$bS?Iy%=Gu@3q*@BH+njyqIci%5OSc-6 -zvj@&+n2}+p_rDIiY;64Z!s^X_WlIqc%~IT%nZv6MH-vw|TDGFa -zjBlfC`9yZ7O~9(_TS4blw9J#oorr@J%K#lP`inFAGO|^5r|pMM6UOLtOQv(+RjCC> -zp#>M8$XGKI^WwJx@6AEq>jpakCd>9!6fWWFp;dR$U;b*Esgz%#Fu!^BV@y&yvv2YS -zm1UhcOGj_x5&kPsh#5fX?0b_q3`HhRkgvWYWCXg`l+`B{aeX5pHS4Jg!>>xE#&0i` -z(ou*KlI>#7(fvK#YRse~PVfiI2Um(?#>`x$O#$z%nyJNa2xm;N^u=vuW5Q3nE}Wk; -zCN+q^KR|^I{nTyMYgiv -z_jctr%{@J^aX2wyNqiL+IWk5yHY#Dp}& -z{)_NXZ+bJ_(K#U|`exf%fgddE|2d>E#DOk$$~pQw6S9wuc&hO1IQbg44S!1-*B{}G -zQMgx|B%GbA80%Btvm81C3zWmk=F!p@(LKQO-OP1qNmxvE+<29)lwX%JxwM~d%Z{T<@q -zbf1dJDpQdpFAYJhNwW49=&kE=pl>SUvvKoy#wVh;rxg_0HO@$X6&?Pfa8p1?#=1w{ -zlm;te$*N~er@_NL4NF_exD_*51>%SGdoqG{77VaGMtOk!8 -z`!mk45eKnh3C>rqC>h81lUp>+xC2x7zIZjZLA);K4AzEP(F_}Iuoep)bNHER;a4kO -zH!_!wGa_s@!WwadQ>Ip7Zhxu7?38g*Sh7LqjfD>^(D~)o28o(`N0xV9^dbeSjo8cp -zes^VBMROJ`lx1ie`R1IAO#4z;qq&%RNvxEqi!O<8$j0M$3uftUhKi!kixM50`CR&i -zCWJxlRT?Hf;CjQb@d4Ks!{_&0J^qZ?IXEpqTy78886jR*i+VnSTXN{`TzS)thI4V1 -z;=mA2XGUpD#!8Kjl7W128O4IRf=S*rnZa0Dk -zE2S7oa!;o3FNGu*3pc6* -zw?Dahr%S8bm@s2$37wJ0Dn(H(Pgh*y_s2u_c^#*TD4j@XN047gwZbA#kFebL@AR8n -zR~vWcMS#~W$IY?t7sr%N!x -ziorRsQv6M`tD&>I7bp&t5Ae5-J5bp?OK)sye3NO~sP{+HUD}rGg4NF- -zf{vk40X;h -zX=~-u``nPiSHRBX@@ag>juQD@Gk2ll6Kns(y12Rq$i${iOsW-^=Y6kMrPqp!rqzls -zU__`e$iC)~M}+}rmDss}qk-Du>x&fWDti@ftGg#HQah_p!$uJ7Xg!3x#~!Ue;+ldx -zyh7|{#aVhPuijrLPUCqUNtB%VWyL#>B$iSeuf!}iyScXb8x|_kUt4?=XEG>;8u%N% -zieZ_5ecrG3ad$#2wZ$+vpZccwTv6PDw@`B(J~L-+;BflyusGkuwM63YLj3I}Pr$v? -zFW_0k@mp();}#?w+CDSP`L%D0OEHwMHaDD)lMStjQxD{;ezVtT`6{HG8n@tcy=-fk -z^K)NBi$-NbZkQ`^$~nyWXP<27jDdYcSya0{&9cC9yk&mW;HEswe0=x0zI!7E)7~wk -zdJ1*^?4?{uk_N4l;2Z>tT*h;dI_(x;$W%G6`bjRLawY_522nYi{cNWJ=m$T}^-krn -z$3jM?bp~rWHKJ1(92peR%7H$Yf39rLm^cmPX -z;Bl^u&lr96j5suyK6Y6Sy{T#$4H+BRfw3;Y~uT!XAZ -zzmR0Sf5Cc%)5V;Khh${cX~>zKlTT|KlOU(`<76FK+!_WsvFtFX9}8`^Xm-<;#;Nw| -ziui4#kqYdCI{U*#A)SqVEU#gWrKk$WPAG0VwnX3!6u483T1328QH_%jx@g)%)vwF@ -zqJeX6vaLbu_%Gc$%oShRMgaeb;aRqXtBoBQrJQq)joQy1v>(p-Pn)^*AduPlrS19e -z%&mtR^+`}aV${!VBfe|w7=T#svsewxzd!tsGXImdG{kCT)UBX?%&32|ZAGl1h}D%0jJM543eVcQ0p$TbVG9K^1IAhll+ -zHlBqw+8hpZYa;Xi(c0KCuGH*|w_V1&K3=-8nZl1p_@5D8&%%e;YgG3-hdQ|F~vH$|Car2U6NUPOd2_fo^O`$r95NXUUP0zd7bE -z8oqKhbVtZil+J=PwOB)a?ARin8>+_dCqpkal#Az5FC}z$Y;k#qWEbtnUE|)Ay|}+- -z))3*RI&oIYdn{ZFZX`R$LVuE4olq{GPpxv$jyUo>P>(7!Bg -zSkS*L=d~cMJZ(UbR-W@pkhVU}7^JPwS@u&jPBmtsymE(xsH7X+F{q{0S@V8+wD-{t -z_u}rC>crIsH7w?YU`3>U%EbD*(GBS@tZzc^k&SvZ(rMU8m&B3gipE)aO5-d!rEbK! -z!A1HOG((*eE24*=2z738-JhqPI!P8SnTL -zM?kML7S^Jn^9hcwJ9bkIxPgQ$x)4h#h#Yl2=`+k2T}vF9+gd8Rc>FWyh-A(NJIFSrb=<&5aI^;3@ecQY8hti -zFz3Hc&^n*qhg^SiNi_ibc2f8eHyS8(BHo$&uOl>t#i@JDO+Ll_SJ0u03*8bYyde!?4D822WWr -zaf5NN(up&sN5Y&>;hRb4JOe_LsJC!;LS*-JtuG$G?^iFH;X_(in;Rre>=VaHf1LEX -z`k+L6L>>G`o3rxi8&DV#`(QkhYa -zW*ICh9)?DJAmn%MR|5R#B=p7^6#-$Y*fWSS#F!v@GY}C(utpI?m9QBg#V8EaCN1sF -zr60Umat1nfCT$~5ERNFxdv*MYcJTH;X2Z${`15Ggid7sF4X)8Oh9~Y(TVGZzuYdC8 -zdng{LQjFD8OXJcPV<+k2(0O{S>|?OPk11>)zXU7(7^1uc%1S(|@vOn~DjqAIwRp;7 -zGzf7i8rJIZ{1cCe=L()yJXi6!@%#nP1w0q=d>-8mG5!wJ98GaQ*VaN$V+zr<8a+4` -z$RPd-*Y~c(8u1KPgR(PaS+8kiO}t)vUr;atcWF$Z^)$uJL&G}&QALJnj$ -zMZvm*9VcO;E$JKhD!;HSkclxFE8$i;Ym{L*Y2i{w!Fusij^mJCo0~(hm!poFj1&3V -zs6yx}9&Z^L6#|zTr=E_tn4-qo;~miPt(4M`ZTG|80C?v+@wsI2={oi)m`_VUCLdbM -zbyOpfsFA1z_v+)WKewwse()c~9bPD@`Wc6A&_j^$s|P*OtQ|BB^)PafqS*}VgQh_R -z_MQ&ecFO+~oL{C(k$Brc@mikwl;ba0Na6uNnW -ze4bRce<{)HJLr^kM|Xad96pspuPfWGgkha=8v2FJc*sg|TC}DnvSLz1-=mEuMk-i`*LLFL0G~xo*L=w99n^oVu1tR=m&!x{N!x -zD1U3Qxl<;Kuq2qd1)=rFL`^i8b-v9iCp}1w(}$h0BTROKJ6Ol%oY^f#V#F;g{=9)~ -zyVb*rUfcq8Q(il_bhlpPJP3ac{2?J^BeJ>keC)QoH)sdOM3O;exo9=z;(_&W)_e-e0$9njo^^=;yl -zTDODW7*T4)>fPLWfbmOjS|5h*5bzXHNM|zq8sOIoztu>m4S!!kIwMP0+KJnG1>v5< -zOxf7+OzC3#Bj8!qfLD0~F*Nz`v2Q@n3kVZ%u00bippTDSGdvYo#p+1o`JI5UTuigr -zuouWx5d}68#MQwS`eLlm$u`6?&ypbJIZ!CfT=98_88=)Fw_Fq6XVQr9jHgK&!I8Z} -zx^ax|>Z%iGq@EFDbamq6L+ixpsgF2DRqzAG*<*~$tV67Hzmz6AAdC-;*sv{+w>Mg& -zAV+JkhC4=7@Js?hvSpsjcEli`B*Qh~MK8$}GP-hpmgP*j!mg?=JR{p$Vr{U>nxl-_ -z)}D?duG1MRWhJeEsI%TKD`lEGiwo1wlY>xYyw -z6jyN;upbX3zpBW}N&ns+fYm3iiP|Jd_p&p?N-D*PxWB$qd?dG0oRF!gpP3g{5(D?7 -z%vf-STAX6+2Fb-v>{m~zPXhhn#}9KUC5HOXumUuhL!Ei2$u^X;u&lV!G6S~n&8@?y -zt~)}r-bTp1-xQ-N(R-rhXlbucS(~S_^X=vd2c+Hj&d_|=N*)YVDUw~<+G4svGtBue;?NDvVb0Csaqx7f -zLyp&nIk$=wJA`r|`;V}J9WF;Hjob2|by18^Jt)R1k+iH%4~2WE2PsN9vRKSEC0VAF -z-tBP_;X>wjnp>{md_u{YO1x8PT3S;nM(|2;D9#e%938L~ -zwL~_)i6f2xx2SP`jFe#O8!5fTQhF&U1e-H9@`^XRBpDs2mUqGxze4n5+h%U#6_LN-MGBb*%-Stc0P1|ooZQn -z5oGRqoK4PBH03)(VarHLFUpcwp8-8!87MT`)fV6HKOxkAm~B$BOiHax<22%2O(o>i -z6jo|0)N07OyvcH4VVJWp*w!>oT5%4y+*ue9;{344o~g4GFIBc^cx6kBT-g$dIGY3X -zy>Hjo;%&abmkJ0Laf>)K^X_u`%~(N}EwkAd#EEN^Q7)H3ugZwO8ATL&oT$WjSV=dZ -zp+r{vrCKk8d?&14xw=ca$G`u~NIZg7pB&-m6t%SFmG(z0S0>toqI3L|wv(d}t`s{e3?a -za|5O{^Ux%RRX`e7qOm^8q*~pMdw`^NbJoS{%f(T#6z0D@wZ&CpIc%#TtX_i~G3n;D -z>x(tGwZjT3v(5C4bV(eas%R;%fOq7kEq6@Lkn -zE)J~4pnnl1$ag}@PwPzb2j`tJz|QxR!PZQFoW?qbbZap_B}OMK+#+tmnl?$l`@|M8 -zc`7%cx1DyiG|r9aW4YXhhPVaGGieQ4icuicIoX$n6M@v;bQWkO$mqtufbb^vN#Zy< -znABAjcEOs$9&K_9z@dxOhioXPQ -zf-mKC#*#HyKcJ=R{#LPB95A%t1p4;^O@{K?q>bIc0r7U;kmPuy;%-AX*c#!RcV?)X -z*A>6Gz&Jo; -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 -z6xY=IbJ@s^v-Z%C`^WDz -zY=@y)hSAvht1S_67Bm0Pm`2@;41a*Ii&)qS+s8;@DWiT4>M}-s#nuGsDn|X9<-3C6 -z&ya6#96t~T-r}S^)ZR*yN9^mUznq`T2Gd)6nSQZBAT1L$; -zH@B7nnVsYDj$`nS>luA-nYnc%qmQ&5x!u??5b=uFlBSvws0qGrG2a2U3&`yRi!*Pn -zx%DKY8f=ShnOpzN%COr;x^ZV&h)2sQg+WN+VT3)y!iL+j5Vnc=&sy8qVZuAeY-{k= -zpR)K>?5)o;e;eL06aKB%webH7^ZzUA>c4@^u$O!a)K@d<&EG6rj9hxt;9YDw9i<$4Yr|(vzg&P+v0$23@4P4 -z{r*yhHD!$*MWv6~H7Ms=M(ITAWk3b?J1EhojMikM7*!1KMSUzO9ce#+eEz~Hxu7g9 -z&9+-W`H4|~u|FVM*qYU6jx8dB{pe-`-h( -z{N`sD4ZmFjlu$GTDQrRtnMiX}riL{0MwuY9{|XlEIbABKI7yG3^az)XaJ_DCacyJ# -z*yR>pP8RvHi(+rnO}(`Gy0Z3SL%Fyuns%{5%Sf_-6AiaXP90P26N<17@ZGwnE9e!V -zAE4_9x_P5lIPCxTEt=ymHF$ATGpGCM))ujv<$eovp3!%Le&f~_R}G{86ZENA)m?{$ -zrDk9|@VmgD-?Br3$QiuCR==r;(|y9+;c&mj+$ULBudso+j>6@|x`xwz#85fVfnW$5 -zaP2K#&u!9Seow&etxs5t9Jb%09bk#Vz2g&}^`=?gzC{w2nJc+$l7W#f_4-@))}<5I -z(hA87%U^45?J1s6N|q<`*HT?jnqKTs;0#e$=-~*R398TcY!@vnNW0^k*+t6$EgIpz -z@=d)3gtvblmX8X6eZo8sz4_Q%w8EF_d;~)N=o@*9_NwnwzV>A!y=2Touv_HZ4=sa? -zpj+*%^HCbcTYUN(SYIV^`2PQq-d}y){)2Mf7xo{N(>~d)ZLtcR3wG4 -zh|{yU$}Qpy8CfLXBF+Tm@faDD^!Pd6=VxDZXp*LPIv>)yrrzfDR7`=w%64+U~IV&GBhm>j2xP?qnNYj<%I<>)s7^s$kom -zYwc_6853yuphXh`DfmFH)nJo3qeA3BI$OCoGb=VKCK?o3IclI>e0*uS_{5xYar(4! -zaYjtJxGW3hHgG!KcN$n84`kmTA#ewYuKRZ+0i}{E0&Mh%cnB8mz7mGPPxW27_;4zx -zlcOFU9(r$VQQ)iMHW8hOb+_gKFY-*sYqfhP&WWd4vWtENF9G{29w{}2fl|{Vyu(3q -z7fyG+jf>4Lx`t3{NZ)-ztLri_?ST4(UtND=*ee|JUIe1PQR_V)qGGGJ%QA2 -zvN3CqmBuM*=YIn2Dx+0frzXi@;e9*&rZ&(hwg-L==C|2OHsCi~?G2b4vOc-1jQpmB -zlR!A7&i -zC>^ZqVI)|{%IOm}xH#QBV4v_F5VY0sMn2&K;3pBwiSkSV--dl<( -zci?x_y_v`=#tpEF@uNtd7`{QiT~;I81Wsm?a=T(v$adu>4%&bQaC%yEg44E3zB2nn -zJ!Wdm0{RllVjIGqLqwW3vI49_}GPIdHm(X1nh(5pO33tRF*dw -zJL$ADaqnMj5L-3i2`g%pH4*uDY(}}YWL$3kW*FXqd|JnMaJf9ruT9`8JuObsD8tzt -zL#;SCnNl$|Zm16}n30b?6py^!cIUeld+&a?;+UtyX>Ayr&u8z=t7&Mlo6g9<(3tb0 -zI2*Vd;xvhCB_p6o0gliXgS;QFhZcv#t1v=xp|jOB64n>SW^+S(?M -z=d*%1r&RJ^KwU=8P -zfu`Q_z)x~6@XTZKKww{Jpfpb%=rb%b@bE7$1p;k6{>K?|E387|+fIpvEU;y^PY8po -z2wb31aw%MmVhBz_M7aAIdcwYI!N#)#G2}Ti9-$<`edb -z(6*n3QX}u>Q+>iNaxazKE8yOW_&na!+^OPy!rSn*=1IPja(%*U54b18T}tjb%)c`S -zxxf5?dpO*S@4H(m_2(amPq{w>H}^pNCxUKs=kRFA0MOfg!sO%BKj>Tq!sdN}T{ClQ -zeXatsJKdBsVzTv&m{xg4?7!P5j(hIz*QgRc6E%gMe)yO>SD~H* -zOEn0Ab~esSySTw`t+W{B^sTAhz0jykvsewcd2_2P*Na_^G)t{4=sU+N+<=>hJlWhj -zYN{8vd#7OzxXnqfzuoi0H}zt_8m$JoQfO)cUf~R#JsI~FBui-}3P|gFSyYB)2=kBV -zow#LuC+;l3jEY@EwZX#?)hpBmSe_TnP<2xCJ*I@%RGGMYi@mFwz)H~w5Ea5CAEs9@vATLfA28HH1CZ*fZ| -z=wH!P*TF3hq*c(KXUWip~P?jSn4^9mcUKCI|`^e8V4A2;@&suj|=@vWk^$4>AoW|N9-Csv(DG>UJfUey+ -zH~-G3vD9vd=Snpty<_89y03ut@>!Zqf?asz4<>ni`D3LWSnsYE%7 -z)sP3RavS!Hf5F)iIy1!UDK*H4p|8VF$N~3NbM}acwd#aO;CIeW1D5xr9ipBV#nt$N -zr)R|%JT(h@5-9`m6}Y9b;Ev1~6Y%~0%cuvUM-!cT7rwtAtzpjnFf;v!y24n|BG(|y -zRDWMcjU}zK3r(;t+Vqh}&NbkneMGupkn1coB3Or -ze;V^&F_rQre_dC2ZW_7c;FkKNl%BRLKDU(o)m?6i{{rmeaMLKiSopcYrI=eMBX4e6 -zU5q$H?o&Eo=AFTMqa8a7!hlFN6Ni+){nf$V*IqiD$QsL8=TLm-iAKlrg|F)_q`dc9`4kx -zw52c78>Qi)=^(ZCt!H`IDW;QTGJEud5QE$y@29XwO^8C9PsG{o*(VeRnmMl_B_3K) -zgwz;`@%11cRZx!(HH^IzGURYW&k0`P -z-{20ZMsMVfYYk*!{13Ws2Hk%Rx-~)f1-Q+vVa%1^S||4krx+!?iz4NJ1o^KKsLzu0 -zt6B-+Tc&_3`A -z!@X*_kvH64AqzDkY1TgGQK0OF?G>}B?5TJYsh3T}d-q}WHZhl0Jm~*k9p32G_C}05 -z=FXMT9`K*%8Ukq=dZW(8aMyS_B^QCwcG)&)T=Jt{Y~Tj`)6U@?H0Z-RaBGy00;x$~ -z;I~sHjkuo_qg9wC{sgr+l|h4Z{M3f1HGb<+v9fJtWxMKGUw=obvs{WWx1Pqxzu3D_ -za|v$9%yTbAP>LSm+0!M^lg~jL?PiH;mR*+hGvYj!x$_&8Zj#sB`E9h$nuZ#+c#Et# -zXNVqC;SnZM>xAE&3fMdWjl+!q<{*vQehyO3Ii1s$vJT_w)##X&9$^3rbuD@ha9@V6 -zN52oOXZWQ47H}fNr}TzZ9-%wKr}cV=tY0!xxxrG=FzQW~ih|*LikmynuvA2b -z&$3in8Sc=}StXV2&Z!*9274~88qkYeFAd=`vcFE8SlAvrTa|I8>2loVUbwS+mPh!^ -zWA4n1raN0b!g=7VXcfa}JW7vRT%2EcXMaoxzEkXM9nOY&gwvjr(e!;Yqsi6iS&@H` -zxwGKL8VBFu&?)?dZcunPb~j#r|AH#m7mTvJfD>0bcH%0Yz&?b0kc7!4j>5#-Ag?(g>LopPih!bZkg-SzaG^ -znb>{<{dHxe;{fgfoIMlT^CB#V4)H+K-Y}rk-V-+80zwJ2>Z71t5)f2=x*?G6LZq`l -zvBbBRnU2Z1X?VKf9ahJ&_n^8g;Zq_luZcGw+kbo;ZaMJJ3_ILAfT=BegzN6Uz`rtl#l0B#-wglVy%X5U -z@I`kfa4W-~xU+!U89wc<0q$h@WA{E_k>MlmLBMW?54ugjUWV)38Nhyqce&$%Vc-;H -z*ygSPmNC4Uy_X^+9j$_9^;@n`^xt%bZvqpaN3xuMx<0~f+d9i0eHN4c{2e^t^Fe$O -zcwZ2I0$c%1Bgko&jEyea^yJ4Y}M0Pw$4SPvW($Um%59-3gKn?!gj|T%tp(+(5RqrQk-J= -z$@O*M2x+F7=c2Ju@_E`NLp?+q!jSTGmV$|miqn7>>xuWJ*}ecS&Nv9Em%uf~wFC7< -zb2DaQ7ja!W*!3pYFqawhoeXCp&HyQerCuT3W$p4w?((6PK`*3W#au4M>H)tD?2S`x -zXxUrWu+%i{ZQ>bLu=4L<*iXDATM4A1_63pZL-J`6>HYh#P}qj_2SmYs7L(K^}c?exQ(@_6{w+oVl~5yT?>JCFucIk7kC%Lb6s13cQgEy -zYdi4!3_syo1zgAQRMgr&aUa74uJ?fVGd$L{7x*B<54&~(f5`A~*Dm0X7|wRp03Ts^ -zfXivvCpIXpXs`3}&aa58@C9|O#$E=GJD=6L8FgMF(pP$))xbiA=QBJHq23R+zNc9X -zsr5}4>Fe!fVWx>%U>n1eSnWx43&Pv -zW%LpjThHiHD@+7k77X8Ayx%&b7(J4O4`ts?3NIJ8if0E?oJ8=UjyWFKXrLBNy~`uC -z6Be5W%k|XWJ;JX6st0Nn9@uEO-(Eeikf5^+V)a!r&BH7z+-vh5*jc~VmOR222-hc= -z`lo?=ZOJ1vu`tw@Ji>_pwea^CK8o-;2+tWkxVMsOQlftV`Y7}wZW{UQW-jVuR^+~& -zcmc>{s2_N6mZhur;O$-y(3g>X*4_76>JeULxk^4OyL_yOvxL$M_A8ID5PliK63t_& -zNhNw3^oR7+dOX5(;9bGDoCZ9Eg_l+!6Txf4`VZEQDE*wBdXJEc5Igl+7IOr{)G9o% -zqeygG4S9q?4Aa=^5&AJqJ=-G~8D?*u=V52bcLqlatR>)QMJUQ6DzFo6`(6#HyJB&u -zFP_yst*J&$rCf_;n9m=O=1Ar4C&?VpyLX^>`~RS@xP>>lofjK6#Y(t9bvn;UYPm^sOq8LQb$|*D_vO>a7^B{M0_I -zEQJ-pIMiPuVenIHm3-zSzAadSIezM8qgj|){t#g5>mKYO%e&}P{P$b*M8r);?)3G> -zP~Kgo8pTSV!(tEf-*4-gh%rj43w*6~ii6fTiiI<>Qb}*si+u9#`Sf7rl6=64ca=pG -z%u{OVa=5rT)I+GuULU=^6hP -z`afv#!TP!6qxzA?jK5M$ls%P&`qX!STxdd!d*i|hAC*>$ag>GWgYZ%-JamTSwc%K8 -zQ9gBu)hpQNb^&XsmcW^Lgm>Wz>vC28&Tqr-{MN!XU+-kSX$>&u0ES;;bcq+yVtv1e -z&c2Rga&7L2cVvt*Wi)$Pi)OoH1npYG|`TE@HOr(uN^zloRB4IOU6uGoS!8| -z7v)b}guhyA-b7kM167(QqJ4|8yB{vl8kC+;SGE{Er50})?$NlxOR%>lw@1ig^(W!} -zjCYrCs*l>bgmu0^EWQ?MmfTGZov|LFhwtMCon8m=Le~G9`XpC-ahV)(9m42FJM%UK)bLj^p9d}2*hCghbzPKGNgkZ -z!2!I4wNM&=ufer6I5wk3#(9M1(|M40E$@&+Wnaz>#`6|<=|!NG;4drKinzsQ^T){;ro8C -z!<~wvQENG|RX -zo`=5y{&(R&8#oR4&<2k%(|dOVg-v@P>{R&ogMY?G5BBMcH&SU5WkicbyUO!suo%V% -zV&ou(k#a|hS>8h%DMiBr{%PKHl(ev2oQ5~XTj&rz9scL21|Ic*6Q|Kb>OnDH>VMRO -z@cj|4Pq1!7fOoK2N9tMrQ(7idUJu)tN5zxf7edou8ooc>SuzlIoFw}TqM0))E#>0P -zA$#=4#BWmE;OWz_>OLkqfZqY$4txvvZQxMg?}0Y}Zw3AlxC~eZ{4?+?z;fU_z%K*u -z0R9zt32`BS6nU7%tT<3;~V@mH`j)9upO*Y2ZzWhjt5nPm^WOd+)z>$b5v` -zhWNz2zYkmuOx!!Y+YaC;;Dx}ufJ1@leRc!OfvGOu2ljzar~0Y`7Jyd)?*ncDrn=Y< -zd>8mV;Df+F0Ph9<5cpeQs*8_+uL17@J_3B%b4+Z2R&PzP++RS3LaTBvMS(Ow7P%Cf -zz1>0+q%C!D%Mj-T@LpgA@KNCRfJ1-}1MdV@1AhQq1FQkw18f6tL2JZYXd|Q1rU>5z -zrd630@?fb|T|TL8+=$WIExhD0W3JnXcDuR3Em)C4BJ0hx<~-+~$~YC`HBY*E-Ho=H -zZNzg-Wv#Z}jTA8x?Pjin$RjVfTB?H&%~6uiPIn#~yD61-St>bg)DL12-Xpxld}-G5 -z2o=n?UmMM7c`VgZx7k35d{;5w1e}@3)6@FNBb2Z_%?vMeXTd6$)_kKa^eD-9BQ5h% -zG$^sG?OD8=TabDFtdd{hNBs-3tyVifP-dS8-?mnIbGOju#{4u#W+oTakX!JaWbMkt -z52wAHycDH}AEL0#(I2dE3;#mCkLvFL{S5R6efkEsa2x0e{X(E`fTrsY0$l@|r@sSq -z1!$^1eWP3W2hc42LZHuqp3)x#`V?q}{tnPNpqcvg*WJP?pt<^mKy(KFas5G{dY~uu -zcYr{vgl> -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 -z(0y4m^Wrj8xXEFP>3p2LAd?5jRF$36i`$zP7} -zhe=wZz*#J^WMEzTW!ndW%9vlJGmfp=Dqb9%`%eCeZpJ*+PGS3$Ww{5&pq0N7Ff)qP -zD7ni67T7&6g&nE7A#>|h1+bM=)eUpD3cW{dR90Epti2>aGd97s+l?%+Z5w1yaonfvw -z;F=8A$ISH>a>zjre`2mmxQ4^E-+fHnl0y0_DxP?5m++n>`3OoB{e#P48<(VBTnhR$ -z;?@DnfENOj1S|x29xzG0)WA;zlcY}rJRO*%XOY0ufL8-+fhPfv0`3890Ve5L9IzRf -zq>2f^4*?GXP68ebOp?0ZzypCvs;C1_1AZ0Q0Bit$1-Kh<67VrGIVDH$5_-6;Osbd) -zx)yXB!lVIffJXzT11o?B0QU#>!!jdD8wUc5z^T9{;8x&1z*)e*0$;%^ -zUqN0DmjWw?G>ak=XJU{hZb87;zv(|Fj_gh+`g5T9edz>N_355Mw7;vOK5hH7A0<32Z!YY*G1#blIVcJkJ)n|^di`}39T^5Kp}~cLEFzKOa!M% -zbkf&?3=}#A(&#!d*DZ8ID08c%73LNqT*{OOeU-oSh1P*H3>IEAy6bJTTPWw{Xe+O| -z%2cv1Pqgr%t+YZ$NnOG#F483?1@fB$Y8LPU;EBKiLq1$f -zPz$ixjJ!!tj%HX`iDDW;9A{!{R|Rf&p^<}IlH0mi<`pLR=|t!*EA@RH>-#97k*`!# -zVN4#uXInGect;-hkuSjRm}wbd>hE)4O-tl*Ti5blVKCN(yxu2F!I(9A!cg#I%f&Cn -z3)r_eceX=+*P2&cPi1)mXDFs8H;RwL=W?96HGC@V)zm=VI#KLxFijv%F|el#I|3#aLWY)kJ+K(F8Qvd~ -zHW%hZlx`Zejm7Z$E4Y8DoqUCM!inbAuX1VCi79k^{@?D%_w4%?6AuZ?R3d{$ghx)+|obug(a7hfU!HUhKAK|o!T -z+v!|-LwO@2k*6 -z{ZfPt>2SQnS1Go_<^);>PJ?LC_Glf_x^Fhg9O(;W1R{cMoa(9uqX}6%ySNbA7d`8-CJc%;b(7S(fy -zqN~DStSyc$@_*(Rd@B@Dn2UlvV{w9vZcdqulR3C9yEf2>S6N!@QjKBBa$VyD(CXe!N -z_TL{jUBc^>8#Gp_ueo5?p85yrvXbi+xU%%G8ve++gpvM*swh@(#SfJA1yEwt%7Bk_JjITvA#Jib9&uaGj+fir}_#(FO2QKqlanAfPaH7FupC -zIHt038A^k7RAsG-n{Lh}6qJidrp~!CXL`$f(zMP0`7EwhdL6PQN -z3zT-4*7Q*>au;b07q_*+2Sn3+!f@U4`%&_Cqul&oIk78p*D|&H;X1n2AY2IFg2e~n -zD>nw5TkDI+|Ll1do;lyv5>|c2OLn1b$26g)s1+wbK3XH%$QH3CzQqV>$xb!>|Bsv%dP`Jz~MnoxskIyu%(` -zrq0*rbp(=+2)3bz&3B`3ywtnwIkkG60V%sc6Rv5{*#=?!hg1!)WmHMWVC@|BbDCmAcy^?UI5Z3!e&n`Bh=vp1cS=;aDb($s%BLNF7FpgX$zM9Lc4>Qp{x)%9$MO5jx7J -zy#^Z$FM1VBuF!mr9#bZ4N0j#Cd~T}m<;4+sJjs2`rFez^P4N>DpTlK0{x^OIl`a$YkyJPFPP1sj*Rf4G>* -zD{-R?;zp?sy$OAh-?Ab#jn?^S%=R>!%Fj@pNOB$#SXYAQ4M+n1nV&$U^H=Vqm&{Oc -zL_YF1em6~oRuPRX!#D}hlA`{&f!AX4udz!tuzaSxC*2Oq|Jaok+hNIuu;s)!MUbAU -zsnS;Iup{s2(!%2Tc>j+Y$R3dPsO}h~)1%U^36N1X1@~Y@2zku^dPKNGTlIQGb%zdr -z)puxcx3sU3s;>P@b0piH{9(5|r%N2~9gUrq*cs5_TqMl29CvSFw+M=63M_LI6)_II -zO6^L(J|hfX$%^kr%Z3Y`m)5Iom9Qo#R!ztINUmFVOsI~^S@0eNf6d1n@X)*wa>;$+ -z^$`wwM6!Mzm5U%>*aRE4q695_QHqLX -zX$ewPHUD|MriqyjeA5QY@u_p3|7MGz300tl80F0jH>Y!>$O4s^tN42u7m%*oHP{Th -z2I|li+=(OH;~C@{*tjfEeOOg>WlZ*T3n3GEm#h=Vi<84XVN7daneE4*gwLcOa9Z5e -zjj(VqA}VjiI*iDzU1PbG0j!R0#U2*J7`0F9?;f579pu$7UHixCyIqDFBW7^Js+q1g -zqHW#{GeNRL}t`5DVD -z^hU9u$Xv$M#?fYDewDNH@;tpT=5>->&ljy2?FYU!qkSRq$gXHxXP5j*k7}P-v)r}9 -z^Q!FNgVf^PVeHm&=-uQ*EkP1X1Mo3t2z;WqwxlVkiq>dhpD}_8oY{HYLig& -z(c>)H-icI)!!FHVag;zux73fZ8Vh*{m -zj`np4V~maBNYzLKR$>;g`8?nc!Kn&5+NLa~8xZa_kSw^^{%sr8KXoy~DJtFp56#Z6 -z{YAh6qID*44Rb;33b=-C#!j7fPsWpjhjl%T_t))GX}Eh8y{-&&0J8|i;iPfhat6}? -zi#+N#fp#f3TxH*QpZ`X$Rv%U2oEEG^p+>;Jghvf{)kw4N)X?hM3C;YcGT+5nrw`6& -zHj^0IxH#2SLLt~se9PH!#R43Da2;wAud=<~T%4frcN(wl9#|TouUqq@@;5PPvL*my -zucEkw7Evq?4<8qm{~pu0=bWTAEis}N6Z&QotmMlOEjozXbT_1kg5U{SMzC~?@>Tf? -z@^=KEM1GueI&jnqKxb3?hsM8{k1xIk&Id5WGxUBVURHtr5r%^U>DE;Dztb{OthQQ3 -z8~n;2h28Hxs@)M;=yr^14G4Q|Zee7$d$83wQ{?d-(c6J1g(`KYcPaeASLx#AzVcD2 -ze@4Bdz6%glLf_awKrQr}MY0}4J;DfGFl|;ps~FYf(+%o{UU7WAvoiqCe!--8Jb5k> -z$0yE$gp22Zv%Q(Dr(%4d5e5t81Bk~OlWlL|J|n=kLrfCv-4akS*C{DY@oYUY(LLMq -zD|iR!k`H!21?^V6YjzVC6Yucg>TQpt;HLgT$*INH$e%U2N6QiW-VrT`PEKz@k*L-1Cmk=V`fGN^nu1V6~ -zsfk_s&_?H9T8A2RT?V`%&Xhr~dVtPN%Qi1Iq@`F*7+_O|4$M{w?S}=5YvO -zm8w!aR`m^ZTaS`-lT=$YD6gD)Fsb`J(r&W@EBl&She|Ix4B4tHhKcH8Rj{emAZ&36 -zV@g|=Ngp+a&F@{)Y6nBx%e!=Cxi+{P)(J36CgON|$~83mFWBq1o`CK9qeF1+E{ln^ -zwsKW%9@6Z1|5B_DVuv^)^2Ba^!z=9dyCx#u$gL3~eojOl)op6n#U>WopyP!VWcv+K -z&~uKnC+&l)hExr$s%P#(HM}7|5)xeRvpI$Dv)P5a*oTEeUP<7&U{dRou+aBOY{=1} -zu;n-S2;^Jv%GQxev|Db()Zqn1elG%z$>dMr -zyQIm7_yr{y$9<=rsw>|PT5hIXCipVa9J}Q>c*J>|GPe8boYIx;gMMjtG4-fp&UR23 -zplw0x4zQW4#ACO_>D*h6WWeuQLXQeK8p)-gMOpjq)GS9Hr#X&fE7~ZKfW}IQCaL;A(e|ya{h|*$sdG`7o -zEt(SeQz=Uirt^|v#8J6aKuYeE>m>v5$NVt*-l-AN?$8LO -z_YY4_kvzkG#9qI9R -zjeLBg6qG6X$#^Li%UsBF<|1}#j7G{4o-WGrl~{e`;Su7P%$6@!i~hthQlOqaI^L{S -zpRb2svw`aAn7u=6^?1_JOap&nShr}ckF3TC*9~9Abj#U}Z<92wu!b-jllz16&A#)6 -z6Ayt;lHyMJ7?$_r|91l~5FQk#a7j0epsrvm;(oF%`IvO=8Qnc>;(ZqPF^tx6+}&g7 -z4@n*586DwQQ$e4MWAeY?RgJ#sby6IYulD8xI#}K%zm40;!KEjop>{{O4m*)J7fk+p -z->W=0-sx^`j~^{O^GBhvn%|w(?j7)=q4?m;0kwKpd}RKfD$8?Xo>?ONzFD-yUFgp> -z6i+&Hxlg#-ZQ13=yy7u^mT81EG7-BV-IjR7Se3LpWmobZ;Q#3D;54c2oZkezKLn}C -zRmYjW+=$e*{Pl@mEgfx>%9#8Mw31!{``}08t?q*#ach3?-en7B+bJ>Ytox5 -zy$3RRD32e^!)B_%smP`@RY=O3cYMHSEAe0R`=Ij9h?(Fi^a9D`i#*)d-XyM30SGS=Ox6-FqircDBa+ts -z%Ee&k4QFpA(JQ^OAE{Ap@xpGM0!z9~K8c&{laMXVM+=Yl+=>>GWDJvk*ON-Prtu@p -zqX~DinW)jbns(ryQG&yev!pjfCfC6VI6NF!pB*~0PRvWbxV-K+t!g7YI|+_!Mgjg6 -z^0XHNt)ig#1|pkA^xuT@UY#=>9vj5aP+N*53AlMJCJrf+U#4$_b@{~4F$7haltMk< -z!{zfSg`i4UxH6sYEA`#K$kPY;GbL%*EwJ6I!5iqP{MwV`N9q^(UbeA-y!bY;y9$=U -z+x&e668_iW!FA6jX5Z!PDI`|{z^`( -zh9HtUpb#)C@rsu+yo6tm!8#J=Vb$>%BkbWq+X1%Pne68=N%5FDSZjagG0E|mb%^;R -zV(6PGJdVk4050tSKIOGgj^n&cYP`%7hsipwM+_Hy|a2#)-+lx}G;3 -zd7rtSmmqIEZ#w!#dDmUf+YhObI*8Xx(2988e(}6Zx>GPK^riktU35J!L3hRT_K)YC -z4VWai9N_^-Edc~u%5i8iAZ64kZ33XCOh-J8qz;sPgy9*eb{g{msMQgl1=9Z~E{`L8 -z3ra)(A2m}LHj4LNZ3%qdrr{RH^ub6^y`KIB(hWTQi+Fkn -z=_1mH^73CIojljWrr=HKtvu$dGRno|mabT4f65)+ZDm{ro+zmRℑP70v>Bye -ziKmx#oW{r;;H4={^)q?b_0s=FX_A45h2VH;6H0GI`T*XO9cby3lpfxJo>1GSBYiD; -zQpDTSh4K&g^{cHD(9d{nov4jwp%A0^6QmF4xx+}mho^_*=_aJ#c|9F2t>tMvUA`%O -zay-4XqY-_XfOHBe^;7vV*ULvxek7nlyzMWb?G~yntjMW@Ba7U(AYF^}(vBR|X5wFq -z@xIfksYlPDDTQ?zKwTnF4e(UF;-WN*^v&8?q_@H^0FB*Qo&&W1_0(phei2V?j;CI_ -zo_Y?c&GFQ8@zlQ}Rm0m|jdq`jP`j(+V}1~0{ua{Hc=|4+zfS3G5tQv)>&JM^xAB+_ -zE+)UkW4=O+@_NbSeGxO?i;lMY(Sn^39e?SxqrT^O-c`j)eY;V5b7Tre!qL`JRvPYF -z!=NP}hxivCLypyv_PtQRO4D()z^d(3yGXmPj#a#Uhmk%P>9_Fo -zLbPVq_1ew@nu^?|9Y=|SJ`R@8)0sRe;^4iXi!q5|4HqCkQDlzrJhXpQBn77jK??wl -zK-w5yvlDd!tbHgR%d9W?)giy;#cmDixXUGi?u;m-sPBkn%* -ztluOnMESDe;>9cAx&_IL*2aSB$i@QV5MK8OG5h>q(AGNa@h$j3z5dciWa6*-^Zdy<+dtk -z{^fY9`Pls2CKX)vq2BZ=C$%S=zJqT(Rv_hn=-Y?5wdrUoOo*x{7UQX6WVhGy!S -zV5L!~5m!d{8tWS^WrR_3sVv{gntV??72feZR+LBFR7RHLo^}rPDp{i{l_0u63cYZuf^(nfwWwFNLsrMiS5c4ro}y7dN61pUcd>u> -z+sgj3EC%fg3oO{Q^y`%~fFbMIe}_B5PvNGn$EvMo{{f@}Btp_74BIz!_YZTM4ZGMk -z{d(lfpsMQGN5e@vD=hz)*Yz==9|8Iohy26o?Kvz5Idm3jbx6C&p>u#DfX;I06F^;n -z$Yw)5yMQlGObyFtICKfnt$DloPI_rGz%G@v1DZy-w~AKcP1?Z=eesWRDSYee;FM^v -z9=71Md<*+aA<2q4AuIQ2Sy;AUrM%9j0$K}bAcx#sZZ8bZ8Kw2jVj_q7W>L+dzFF+) -zrJQ}U80JvlEPltKzFGW+Lw&RO4-WOs;w29C&0;f$`eyMX4)x9A`yA?<#XoYWZx;Um -z>9engV>j?wJb|=oz9x6z9i|%VI|l0t)LL5GzlZf!==WlFo)R(tJYHGbn12rS&GB;_ -z>YL-O9O|3nCpi?x+Mr$V7>D{+N(EZeMXkXqBCH*jfA&WKyn<}#nkUSV9SS+U93c{3)1dfQ;eDJCH}8N@9<5e*Vj^d*L>y#c{7H5r}C<)N})AaF76yu -zN3WZz5UfpL?fo4(CmV~sxCey6C!v)>?*L(0M)=V(RV9U65x%ro;^AvOjxbAA^YA|r -zZ!FXB@KwbBKJ|Ub{$r=(2ET1FNl1q=1{9Bzk#5XuNP=3%yLO-K^Y6h08v}g<<)*W3 -zu`G}58HCfl1Y=g%15a%2i||h0_ew9zW_&T0me3JfL-a)@@~8CNiaMjRr^{gZw0%{l -z1*J(kARXTkdnoQ_o!=&jV{wZNbjg7pojU=qWot2JPxt&;6HAJX-PZWKPT?`)Ha78- -zpX8y#GTCgPUMxhIY&OuysA|G8*=(SZkr1xnVMvN2yn@0Q84beAdgvXmPc}}5)&Zmr -z?jos!hlD)5Jl*Ke36eUvDWy;9K!#mAv33xDHCBaw-80e0B>-R8K=ur{44{}rxSVjX -z8ZES7Tz*u1hfX;CU_Wyu?53x@; -z6b5uFpbH%O4mSSoC_BV1ap)UBw*&f&LuCJN6`;>KbP3u4uj1=L4mBff4br~g&_{q) -z1Nw?X?*qDooL_V3kKKnD9AaS}-s;)PzCkD^d!g&|O7T|qZ=M5ul8)Xvme3U85Nm;W -z07>#S5VsHKRT$bCw9^l<|M0wfy2rT>vHz+$h0o73+Ev7JQqH<|+gj{1IS9I*d+$)u^{F^$-j3dRGEk52%ep%lKD1)bx5u>s*Fh2b}-}tp`N+e+6@t -zLelOK3#*kc?-9b^#%F@KgEXP -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 -z=7Ao0h3A-C>; -ztowB2Vaw^rgZ8;DDJt1+sUeNvTdHU+Q~PM<96xB;#G6`Hd%b1vbp3y|tQh(QE9~$j -zIh9%{Se5os+X{Kxly=d%qVy!^f7{Rp7fyabhGG5J3!_L}ij6C%%y@sq%q -z@op9wv&~&sDB$GN6cEeZE2lY6!s0`DGQN8zHhJgh|t^-f}hucW~vf_ -zS)faRxi+}@WKtd(*0!MB~wI29Q@ARRBq$)6=3(b}Y_F8#X9&tl2~o|hx3Yc@isQe9<(8+h -zD>tlGMGe@2IT)F_J*Of=vu=%~-A*t46jwA;7d#cQWLexb&W{=kXBN)PaleT=Pc{Cf -zRWL;4x4TPQerX`C=&H<}CAupjUeAwq?q6ZaJKCx;v7r(z2{KY>?76r7>dr>VBvVHIp>4TTZ -zg+BcyAy>Telc8gRpZm0}4rxkJPEg3TUHQr25!^o9tGB3ybMSw>AOF2?J|_-tH!;ICgyzc6`lLHFW5U -z4*uL1mC3^sQg_4VeLQual3EG7^4(HU9H-6K=2izzJ7XOsua$-bNgPWnie{`dq!Goy -zZElhK6@nBJs1^Yf@jJ0(+HLTCnGU*4mM`&hgZA-6X6h&})%uA->y3!OBfWAm=ojL^ -zkz`?~JdQLX$;t!jhlktLb(t|)#Ri{d&`xncQ-nMk4Fk21&cI8zKU`;qrpW+lQh5Tu -z!~d4^qmTJIt|E{9C{sahN>aO(!*l92$+Nc(|BO7|B@VV8cg9gF31797uJMz*1#qXUM -zT78J<*A5F%@n5qUJ^f4c1ge9_Jwar8L~i?_YZ?!xQ*B~X~dCGO>?L<_`u6PFfu$}d7!+lJLRNCF3N6}W`l_hTpY|7n&2tEOb`Vwv_%`Io)C -ze(OoLbGRKAke#7%s+SQy`W#kc!cHO3{%AXuIJYV-vjgw{ecYSRR&~k`LVlm958yI< -z@qS+OzgIch7N>Q+V*`V$rlWk^X&~`y0y}GPqMp5oMd;6 -z-|4G`RL{2oqV%XX5jXNX;`Ism?kA{?(x^VrwbW)yJsXa_zOzsmVGE6u2B`-bUjpP~ -zb9d2+ofv$1<#qw9EL0SO-LCNzDvY_IjeN93b1gyq4ir9(;cXbh-@&hvkRk@VDVaEig}WP*8U(~dyq)xnPD)}uaP29SeT#vVXx{1;2rJCj+^E`9>pgIS*g|)C-N$ -zBCXC9QmH7WXLSbNZm0yw8+6EH|45cfXm65!wW><0>X0*VYxpfZW!h0^zus??&S>xTAK -zbm09Tdl6iq9{Cis&~zeR^FU8@z)pe?5(Tl6-tGv#(!*cw%=A7skKgj6kTr_WH_8F8 -zfmRYB;Wr)FbPBM;D?OU5DI;#szJ&X-dTZ+_HlY(bG!*|h -zkKY*kl-)Oe)6~+Iq<^RqRIT1SUs;gH=Z$mD)=y8&+$PudGLNZ8=_G?ga;AQ%tE% -znFZjG+D`dz-Ke)hc{w9naBv|#_x`(RO2jE|Rc=v{ -zJvA-W2k8s<^42M_1ebLah3g0xpaq?%X#q*s28 -zzdZB14qlx*l&ddwPq!Yat%MtR9WQh@=``o7*>~ez*k4=l%drqzfN`1IiT8gx -zV+Wy!w4W5aG@WuV+JK#{>}aY<+0Df92)R1tz*`4LWDy^s81rkdWF=2mvDx#hu#1JP -z53qZt?mkh1lQHDbgA1z9YoOIY_^>{@KiCUf-NdCng}LaFTe>Z_S*6c^GhHCoZvTkDfe4FnlYikh4bY*F8l2SwKr37R2$&cS??a3mV|pJr3BBr`~OZ?hMVsGK>biPN0SG -zYt6kjQrjuz9;D#y0dgZ`m9_(N67&{KCl~gAoJZgVKBm-8XdPg5mniqzwcwjijDlL_ -z)GW16ebiy2md&O0h!V8w|AhLfMkm5eQT4HJ7Pya0JE{h?yBl^qyc;_M(`oc!Uzcb( -zx~Ig?-{PCkU!1<$K@IdKCxisdDPAxtdcfBsStodzgX{*ybU5UR3sWS*txXQV4BB>jYT#4)rLtPAFP~5+Y*$#m8BB -zDFxnfVH|;PAAXa@lO)f=^1e9MPDW0BTuQB!OQk_Zn>E!@kD$e#y#5892rcKkwye3c^MmfvWC_VebIWF4-w!wDH?A(Vqr)M1Vd`2=MG(jd*n -z(*^+|&T%qN>lgjwz#{c%^V)%f@UBN3kbZVer+2Mjd&nSEX^xFniB-~3H8iAEM~D~j -zO5}9JWEnQA&w6Alp=$kxS3EiYnOGw?hLDb1G&cr+~EEy?W8Ts1EPgE59|1 -z1^T?L%#z9iX^7c^)R$L6JJ(uk-pnkb64vG7#b6v{o-^M=N;MmlFXpL0?QB8F0V%D} -zX|hQv=9}njx8UBKug)=W4L@Uoq|phYRUO1VE+|=1hxI9zF<>C*0kUrW%5}-T9bDR` -z^19@n+WkxS73QhD!X7-Kj!WGLA=3K@%S~L?j&|QrXxEE^2B)z?PY&R+1KLVTGjUk~ -z;wpB)Rv;uBI4`jSwgSm!X+peAr|cpBesLZb(Vpe--lx!o+W_4gNr45Vq}Dqm5q~F3 -zD*T-Sn`h(;C#m%|RZ{CD2{y#hF8Ts#4*>t8M&d9Kw#EL3FM;#zFLKWT6i*c87#>&M -zI$~tm2q7yG9A57d7w`%3(nw>CN^EU4?gKBpfH>*f4f~u)HR=m0P;EO6HO^rdCD`j* -ziQAj<)mmUQ_4mHo!>Ep>-}`DikGr>3$a3P2aJOrp^NtHO&Pf+m`tHpe`k4ewNj1W6 -z4|+m1UWR@90Sceb!6n^&%_guHjopuMb -z)uYD+>QPtd7!&5`A%FiN?k*p~D+FnwAr4=pb|=(eRREWeoQNJ_GY|hhRfljIg|Sk! -z2pbWmenILOGxh-5r@$J}Hb2FEE({4}bxlSbzbuHPavqWL_Acf$vk&GsvorTMvyVzt -zfgZULHdC2AI3oD8QDOelp<>p6E~))n^ZYJ#hs9TM+Rk^zS!OS4Z`jGk6zyb%S>o`1 -z$WslgBi(|SbAs)^tJe35@3>DJh~>IkG?LD5Yf($;;0Q=C#B$AzHrGM6zfiQ;ar+|7 -zIU1Og-lYPK71JoDnc1^eH&mf^)MybcCe-d@`-kuJWjKw{Hy3S*6c$^^Yeb+M>krifNGa$k)}UEwV#%jv^o;N$ogwsM{jty1;AbBcp{zBdf=&Y`Mw4VZ&fx6mMk{ZYc2Ulj -zmysi%xP-vKw_g=f|Otb;a(wV!dR@qxz{a! -z9UT&%w_h+tBJOFND?RWej}w6Jbej1Nc_q9o@N+t>0mTK27x8^xysAU~aV#a%K$Klu -z|NIX5ZrlN4aU3xc@STueKX*G}K{}0A#^|2kb9*mlM(H`7EEyHuGD#81;Cay3pM{)^ -zVy_I=EzwR{&PRVE@*_BZU~M&(yscAhrg+_I)UBK-lW?MVJzuxaK0$vUIU#t`LqDkz -zJZYih`|0mfJY2R{@O&%(VN;@1>@=@f;RA~iKs`6B%tv0w7kKC<^&y|?y>^oojU -zf=6Xd54~Hf{GPyXTId;Gb|cEBhsM@8JfF!2PCGm!LW>Rvp8v`V8tLz+kdkDsXFao* -zOL?1MhwCifh<9)QnWxNe^9Xrncj6^|Q1Ya@9UdWb?=&I%HoqD^ghS@>=iVE5(mC#e -zW2#`2TJ@@n1CM$1`7fCln^)FJdC7rIIAW(o`YS7*t2|PiQsbKJ~GDp!a3Z1B+F8 -zV*=9HdoHfo_G@QZ;Bc!+Uod1hR41|4^PT`THz`n;564W^ffy+<87C~U?3bA16k}o}C!I$L~r!B|%9ovwI($9hdrkY)KD=`uR=2^m7lDEVj -zT5(z7>)1nqTHAV}(G@Pw-o^@kE~v}Y?!0wck1FrG72^X1oK$IRa!LJ;>A-=&BbFYEbePdAb$}X68vTfVZ+riYV}F9`sM4be&w?Y9!?JR -zT(H+2SwTIRAryr&uc*+2#E|pzUTzOxoj-WP;D#9Yd;^OS@H=iIdUM*&6Fc1*```5p -zf#sLe>_Phr3ygJQ_2giBs9YKt80=mYEDa67`+!@Z0abnkmM1B;6eAN>|Fldk}sMIHhfw4RfF9ld8$~OUC0~n_cMRd=E}h^Zp8{Ri(EXAmw0R -zxlYJZ6|Af<1YJ}24u)0wVW!NFVPkjYIQwD|byiozS4R<0L>1F-P*No249Jry#{; -z#N#zNsTWE^+g#5&63>-}%=p#dSD1(2^L_d3@w^E+$(-`nB_!%}2^##|oWmW@m6DUL -z+z*mXMq_ds{nHza$)>)%lL;?ViyW#M-~snZbjZ2~HK+HWuC6>JAPu;Jd5w@@=a~wk@qt)&8^M -z<%+CTTbRZ>$#cnVDwtG`^J@%!`$B;B2A9;qeiHSEOa69I9G{F4kT1@0E1W~gZK~IM -zjP3!M194ipqc+a~%K)^W_NnZ`3*`>AJF(&}*lSF3&#Jfu?bzA734dSc_2Tbyy;}U; -z-doy|uzW^~X}P{*Mj?WDxeYmAj}0gsZ5E5%C7rN(h;iFY^c-4|7=zWUM?xD#6>ddD -zoBh3g>L2v=u&dmww(Fsfs&?x^4MB%3)|cz=?FI6PasfU_^s>}-Pv`pP*3yUrM65w4U79| -zkvjA5?Y&_EFl2f6_Xi&q5^KE+@D*A$>v<{C1^O7C1o04rla5O1QR+*Sq7z6HFEyjL -zoR?D9#^j~(ay09YLEEgaoB`$j{DX3%Zz?zKrgDpZQ0^EnH?e*Q_Ek(y>jeeIduBt( -zf-h6gio4V{Ge)K_SFA^JQ~z^OBAw?`@1wqq?$UoR-!)Gn;XwG&+E*oJ}wqM1G{lLNbttwb3I#}>wN9aWC1k<$-!-I-4HJe7gcr;g}R#ZxUerQQ`$ -z^V9)7>Ue7EO{pdD%b-E4bUm856<}4*__}PYiUFBKTYM}RHdNrPvTtT|!8Jc#=<|*n -z-1r_W%JZGww -z^a!54PIW+Cm^1_wVYdo2JY>efMb`%Zad*qzJ1|cM_ZOgaH#@@tTE#ys^Vk2Q%;E2q -z5d?iMtriVvdwSK*xM=XC&I&NKH|0D%0X$`1+eZm-+n&cS*}>wem4#EP`KotU@s -zo{8oB9dHw9Xo1#9->=XZYx)j8)|1BZ4`$q?Z48h(X2{F`o}dJsK=UI+ClOT^Q9nFUQV&Lc>!0!Og -zhsjjVhZJ@tKziSE@X-JZYYt?6_q`9e6pG -zx$4AoHR~7FIX$%t%ufi}{TlTa+TkX*LMPDgjWWJ?nKYDn3T0{*q(8B=?%Czp)`1mT -z>%A4JPwcBGd*Wh6;FtTnY0qBrQcW&TsQzyYo;k77qx0B8dTC|39#m*oduE4V6^0vd -zQpxQzTPLFb$(c5cqgbt~ma5g&q4oovqskvFCvK};??UO179_#KwBFqc-pi?+9& -z@>rJ(wtu!~gnCcAJQejHEzo$DdY(RE3#m~Doj1wuq|lEquVyco@cYzNY76dn;GFndEuu9>bbi!a*IHpexo&R|>MO0cQzCt$xCv^uBP@dPE9FcM_wKyH+LtNn&$O-m -zVZq(sz9}RY{%llRpaL&JI2Sz6o-m&TwuE1gzqjYL3DyxFq1NC|4jwcM>oNb@jbp@s -zWvwP?cv~swmY2`?l`s=QRclsDQh=BfSq -zbs8J3DowBhwzF;Pq>xT(x(_wrzHeCf<+_CRDtsqRyPy%Rsi5!8Mrcz7-j8?R(Q{$(^04cMo*`O>T$pywsU=HUob(-GWgc;O-xM$6RkV -zt{=UAYl~WM4sA?P1#-0s=QWU#!`jMx6Emp_E(>i`8&`n~g?j~^$wK2PjGYN9OE>c( -z-D@2OovOfGvuV9LC>9uDGZ=Dj6@t%n+N`0wD7cj#?2z^EnX8!OJ-`YN!j`lie2NG( -z9ClQ>g{+qcE_y=9o9OQpzV!(s9~fP5L5®H^Xpp7_?V(c*<`dR@>mTIa9Fnw{Qw -zsP#_iGVGHB$J*wV4ERi}1*fdBB;;M=>hKnngf^|A+o$MvbqJCf9#&&=cCS!7y<|({ -zCh!}@2{9iuGRA)E`w;g`)0oD9a?2EK@8Vriu$uD9)g7trb`2Ys`;PL#sfXj=P=rp&*=isC9=;yH@J%uLG<+kf!}t(50ZWXw9i?(z=2 -zQ|CU_+Al>9I$i*uA{kcl7dRlfcjN$@1O1ebdR2#u@!iWY)nU5ro#{!h6*5T@_5ho1 -zR~@d+AS`z)QtpN}9#ILqoc$VYkdMWkv&YD#1dM3MSKmD&K=u*XOb|4)1Pkm=kNu@n -z?HBD$zPxPZG09KA;-oH_@vk<4aggCq2J6J -zNBa4to|-400x$IwPNO|%nOkS^R8Cv!IT@|D@Pp_)}&?t%0m -zFpR69oNj2!e`=$kGG$MM7mRmIbTWEl7IXg@(uPWuKrKQU$sC%goQmS+fJ;noEImY@$^hrwN>4h51OEcZN;OpUB4pV`~AOma9TP -z_hKf_>ZJ1&a_B3j5tUkjcAT}-Y7+8<&_&3bzk|1PzrDuU6guavj5L?Se|BuuV9{?J -zW5v72IaXm^jEcx%e)vVc49a)h&57OE~=r`UiYz5x+9oDCu31`o-2dxHcnd=;S -zse%t8viud}U(p5=^V9(&592)!?=q;zG;`=#c*4xOxWt22iFbS6Sn>40Gpu4UtavSc -z(WwvYWHok&uow4dGwi27Dr$l|***(wisb{c8gq;o!w2&*run+y7*Ob1ybG(rjRL0} -zA-fwr03WqDaGs>O_}F8NtxG(xL2jSx*$D}h+pSoIb~Xzb9q|m>CFZ_&sR-KTUQC@KxyM@y+pv*WI-;bMyytC*Tc;}8KkWoFmK}Ab;~RQwT7v}H1u-avOsbu}g^-yPrGuz}UWo<# -zH=$PW^7*d`>+M~vH(j32uYiRa -zIIU-3NQvw$m*CZ57u#V^#=6b-(<%?ZE7>L3$6MjqvBJ-mS+{4@v)z^*&dkgEbp0`o -z<@wj@&c|ypwHBugxI}UFk)4)wK!+P22|1)e8C6chm1?v~3iU`^@H@1@hTc%9;&dg; -zv3r@@F4$c6OZUIGtYX@G4?gu^YF(96d)62nVx8&oU2_e~yr>OUBA1tyAm`>~w*V^P -zteGA$ryDmb~0p-sKm}jJLClSvX=i*70 -z3>-uLW?x2V`bCnbPPSGumwhoPig(So@-FRf@Q~tzLFde#JC8GwC#G$9j$BX%7gY -zx4p4kNR@jDe>He3@wPJ0ksex?;t17yU7kT3guKOQX+Us>ysMp{A!D#sO8Xl0(z-9r -zl~LHz-GJRKl+7xV=7IbFq|3!~H9?l3Up~@9F4rmN8_~{A>Ee*gd9FnXQc!hvNalRk -zLy+}`7;3{AHnr>wo1VWon3{WzO-)U?FlVR;X^(SkdTKrPCc*_Lqit>ReAXWYmw5ae -z^1FmkLI&be{TtqQEH_gKCB(o6dzaW+jFjoAXE!uE?nTP<)B=oe$nxqSRY<23EvFo7 -zoh8?_n*LonS$*xSxP$$tyve6?WVOH>gzJ{vP3%8{=$|+EvJbPXn%=l@$QBl|i@-cO -zX|F?l?F;yz`;Q6opXCBP#}QsTKJZ)LwG2pt+R-OF_ySlnXAnBazQTKm0(}Ks*p6DZ -zunxSIgGwcN@=e4C?+Xi!be56?0M4u?wYz-k+8MeH2?z8qma&l)I5~ywZknf0z0+ER -zY1K@hdJE3=evL6-Y-E1J9?-beka;l%^=?y8%yESNIcwB`2RcKvoYUu@|W=Wo_*7N&-uZ8^L*Ajzc=5rug~{v%=es|=6lZd`JR(n -z7_5eD%m4d)YZl*_?;)6P=+xXa-%@L$Y70{V+uuCnn$&70E&kz*OZorTj3@H>{|d8B -zauGDgY%|R_+pNSW^BlsP(E&E`L=C9b+1Qbg@W2gQOzaQ%_Da~$06jmo0u(GLmN`+3 -zzGeBWmw-#EO=%lwui?f8YT_f)C7+m+7RIv$n@9E$4uap?n-Nsy3_+TN -zwGp-WoEgZYZ$8Jqu`d`bgbsOWoql6K$X}>$gSCz4{~zZ5Jua$h{~yQK-g6&N20`Vf -zZU#{Xd%{d5G$lQ2f<7s4Wo08{)y5b=_;f)>^Oix?U2L;K{)YY$#5m -zys*{vlEv)aY#U-nxn`nEd^lNol5iR>c_V%oTTlFXK*NWV*PqZJMb+|d>*SzQjl95w -zwJtj2pkMgaIv$v;cA_MDM;x-;Yl@mJQkSsUz8F|Uvtjo7%@#F!bwpsWuG(eb?ZKHJ -zPFCOvVS~X=!qOMoffbn+$XJmI@^H$|w;v}QP3cm0mOl>8YUj(3(>^y^@#59)&NRD> -zpBNUb+YF8PVe7swW-fjtpd9~I()Xq`J4zMq1htvY8p)vaK6*XHdfl9YHQ}eQ*2t7h -z)F-EBTM0V^HiR$Td}D4mV{X5PxebgRBlsSCiQ}Cyt9<-7`o6@OB3?|7cYN<|VEJS1 -zwHB<>0tfmi(MTyI`V7tk=Kf+yL#Qh;oMv7`aUdur^mUoJ#~aoAj78HzrvlVI{6*;< -zQ=R2z -zmUD~LX3C3N)LkkKb!?rwupW9?tO-8pgbZs`5K_McuUgr15_IoW%tfX}x*}~7_121S -z?dxqsSBc16ujAakeey=&yhfar+D*&keUnF?UhkcdHS08m8q?ecU|OA~b<^=)Hh7S^ -zI>!WVo}>W1Q+-|# -z$;<9JN#Tlv_8*-Op#>558n9B;Sp!P;FuLdET6#=`gKJwggVQ=}h4g$KT2m%X*wnb` -zHAo-6CIzmd^;+4v1^!Q!on=obJO8pq*;!pQ-C+X6esg^TXu<}r$9s-+jS8zl?S)@F -z52RYppMsi`1k*Vt90r2wsAw9le)row6l)$!w1)FGey;6nm+O@*yxoEuUm -z$o<=Vqkqr;rhkcNsKs=&c->0KQa{iN(TO6lUam -zxSDZ&C&POMG}w-q6!syR#M`=cHnYwR`J5>p-YY)$yyM*{DQ01R!Y(TBkeJaviuCt@ -zI&IS7HV)RXxx|gQS33y~LI8zYSew=+f%XO-M`Upd&Ob9?yCWkBV}H`*s_0TAVNDQD -zL{tDusx2e2Drl1`q;8?Ep+dT5;Ksvp$eHQDh$^J31{>r}w_{a?C6P0}ccLdc;8@q8 -zhj{DL>!x0>9kW;q2~L+OIB}RFY8Grr -zmu;S*9;%DzUf#4`*!s|z(yTbe36Xh9XcsrR58F6Mk8Aj4fZ=RVteN`|&g37OzLttM -z%UDbPO}r-UvSvyu@-4dtoTig)>+vq3JIH&D1>9%Cf>c~ItHBeg+LA760Ij0{e^EpO -z2V{@JZZIloK~z6SmUWtSYTgMct_koQ{ZVTmUry^hFmLMr}3YyXEiS^eh%`xeQG^H6BxAY*{>MT@$5E9f65r81mh>3mA#!NnYe-SRFI=jidC -zgrz&89O%#cC?RUh%(2`-P{DfO8yU0(c^@Qx5KGwUcXl`SuBAn*b`R7EnFoN*sC@XWJ;nWBpId_=nVg)@wLT9*ubo=SMw$A2x*|$0V$s -zlaWKrd=2NkjZ$Vt?xVR&{`TnKmVE!{_e+jQwv5E!_v57QmA1ADxOdx*+m7fUVoW3`Hk -z=4+}g1QoOz_CbXJs37Q>2wkP_$1AR0aX$+>&>Ob5Ed5)sZ=NJLSQj~+Xh2yB5wK}; -zdujyyu3f=;-eG%?>Y5*=b1b&bvd+#cgB|+e!4o4k!!rF)u^E#11R0T5)m3#jVKCTD -zuBO;W+ex+?`ueaH@`H3{a$yVYvIO(;+to%E`*3vqv>j3q#_L1WLa;H|89`?U$D;0X -zk2cXDL&(R_66_X$C;n;%Zo~|P6gDg~M3@Q*R!m$XU?nCX<`s*&Wrs!C+$?SM!wNw} -z7jh0YCGMkkxWs5D;m017>+tmm=Z3yhLys5OmY9LDy{-FMOW+ATPK7HlHj|PRt%nu+ -zEE^lC6!n=fKW@U=dVQj**#~tTa4k^RZ^5^S?)RZ-#C?auB8!zGJcVZdfK`tApaie! -znX4>r4ERQT;+=>+d7XS2(J4w_e?jnLwb4tE8kUoFTNEssqzASc2} -z_@%}_TJK-avzv#o!=xhgDK;S40cVU0G -zB^G0pgeRirp>@!M*{gPfKXC5W2Vpk7*0rp-MD(S-2!0OXgVkLnleO@h$Xxe`PfPbh -z_U#^6D}M*0v(s|=Y+ZOMp3w-cGK~7wn9EB#SWII6!8Sus99Bz%c9g3vZ0b`B80c_Ph(TyJrW>S?Cf1t9)UD?r6FsmZ -z(5(ra+8uZ;%FP8uHBRiXt=ctvVv)Ml$;?j?y#!vP+m3>Uwrjz}4u-T>7jP-OJu&}m -zecEKl*_92TQA0m#-%~O02bygoIbB7I2eDy_I>fj{O-oD}^exsy4l^Ab2G4{J-)XEG -zIAuDnyRcUiA4mhv|4es}mc>@N_|eB3(}3f#s^sEngpr%Ki=h~^ryT3(4AFH2JUxx` -zCCRb(Y#SFKV~YWVm$3l)_J^d0z+;|=Q`833sMAx5R!=Dn@G-rGPJ5&0Ik-6f9G#Em -zINoj31VxB?gnSTx9+oed%0(&R4uW%~Kxe6e4sKKk&QpAl;hX|cO?Ls#*<^DhQG*y4 -zq(p2kV1pZ;fu2W;1C%{pJG^Id6|kK$o>ggD^#L`|?WqB*-JFG&C9Y8`8$!VXF5<&msZYL?kmjDwxU<2pTw@4DQkA~r%IY`_! -ztp@%ImEtU`!8%MF2z!gc#o_t0C0)>fJ+rKcZK^B|w^ipSfY+y#Ij4i-!Ak*O9|R}R -z!C{>ZRw*{3{v(*j&t#M-bdRDnbI*oM-D^aEX4Zc#@_9d^VB+Z$3uttB072_x) -z+W&X9lIh`P)kXi3attp(y8k3Bo~vuZDkA->7@z_6Pcn7TphK9W!?)A!5#wA#?co@S -zdP{UOLPLXP$jP%3W6U_%70}A7Mz4JVxDRGREoW4=>QztU90Kbu@F;qvTMzqfaRumc -zt*QpT*^@U|zL%vnw@p5Ek~l5$Oig$M^m>PhZ{du1F9ACRJa!kSY4KK0L9>-h7=;}G -z(lcF0j9l^vXX2rukfx3^rA+)<69uhf%yr|pVWQjiM5)~Jlnz^xrdkWB!hcJd@@{}U -zHt0roD_gY+`dVSsBOA1U$DBdG9da*#uREw#q6Pm8AsY$GgKoE&;?nQAx*&1lSDLuf -zn$fD3Cj7h+AfNVY}+;Ei)E@t=+G775;F -zkGHoA(qJYH&WAt1PT|j>qB<~dxHAaZ@GxVsVmdf%^30=I=i_xvE0fO-?l68|>xm#W -z=;a^Y)T)pru!;9j4ITl>CjFZC;NuT_rtFYRwt?V|vY^1mZL%!1Qq=DZcm;fJ(3tM3 -z?eQABcjG&}V~K0LLsYolv6La)ja@~?6%5~oMHJ^v=i)=KCg_~gCnq?b0+daI{vd+} -z{+HK$6sGBuWeSsN&g2NkWZ=7(KpSE1xBT>_H)Q(KG;t2mrEH|R|2%e9ABAa`Yx`ug -zyV^!Q)H?5NAS??K!zpy4A_?vTt?5CEld<-b+Ec$~Si@=~ZXTDiDa_cdYcB`2d3iL^q6WB-)=rrI -ziLjV%o##YEHu!0TwfU${q?6s_O}@6(ey;+!VA4BRuUr|?t-FG}U01?BZB;AiWOX?J?Z;mN9IMRnz5oM)h$f_7rg -z)+<~e`Qux=!ZX-7aL!{R?E~dETiY#{sG)ko0B!PqsHIcPl3!6S3G3-Q$AmVXt?!M& -z`2(<(WTVT`$vqPktKlv_Aqu&D5O>HjNG_EI=sH_J -z#8)a768O+-q!O@33wWD*tqAJKAC42@c3RN+O3m}VWhXz;AslHJtPxxdCvfE)kHkiGa99wrUw@*IFoi0;*-jprkNGuw6bBKZ-V-P -z73}G~w1yE>63rXqn*q421x!{9$GUdaK;EX3fJ0jF#jr~3C2JE}*gg%c==HwX!^d%= -z!Lh52BTu-n9x<^skW27sJIw6$a_pEKzjgs^>)K=dnKokhT+U-_ZnU~FHJ&k($Sk4=t)KfdbgK)W1`;3 -zGCGM44fGsIT1Sh01U+lw++phXTE7g6aK3QKrt$R!^2*o$xF@ow7xZM+?|S0%0Yhh| -zNra0g&U6e4Ag(TWvx3^KP*+)a$5zWENLTH&OvEp1o1wy)t1Vrnh0d)L>uV-qE`>xD -zEVnCLpW$b(41frSV6HXrAn3-C)uRBE3j2RNGo$!*g4 -zqo24L=RH1ti+pYy1o^2R*i2_JyK!QsvusKM{T3D^l!0!MZv-R`P!0&B-7UcenFa&9 -z?Kt?P9n-XxL)3(ioMdwU+UN-Eao2?80u|=z -zbphNrU|-4T-_26AViI-Xw|yXN)1jnSt!D&xqZoL%9u&X+giwldZp$E^!z;+dEAMPvYI~&6PYChp0B!>sC -zG(1K>fa^hA4<+T`$vn^(-vR7#6AlwCAAAqh4Zg>9Z*BJx>0!u4+&oV_ySGXVs~#pQ -zE5oa8qM?RXjvZa;m^t$@F`qM3m5@!3f6}3a{ekxiAYos1+!Nh-1hkzaSWS*dNAeXl -zK{%<8hehsb`i+vaVxx4TmW>R@nxm{%)v%X(y>(sOn2l0*W>54`87KI4Et?bFRs*MYtV9_Qc=;-;!Jr_Fw6B$G$Qh8<$c?w=;sC>d>+9ZsbZPC#52|pF_i50veH^G9nbw?{)C|b> -z;S-725Blc#^hV#D_MOY!6Sv7yV}4Ev8ze>)518Ihq?4Wc6~ZvD0|%wEN5$24wV^A0^oZQPV{$)8f1cg9+732SW0 -zB+V+N7@NnepJeq+qU15UM{am@@jn({Ts*Q=f~`KKRS`?tw4j$Q#u@R&4o?G0 -zk_7|cCoe|1-Cwa0@ZXrcWBv~Np0&?4oCZC6!Ez(!!-AZMBGO%4xIP7XUM%{Iclz}> -zST*>mOL@C6<~t|W8m!y-X0PYcJLI2Z+XG7R%{&jZsZ9NI!86ZI -z+G3>XQ_{JDPXsMh7^RF4#OUYHK1g6|VPT$phS;WWW@3z6Y^;WId@0seke_*k>Hl -z@C|e96v67@y#lQ3r}V{Btrok5$p<>4!wTAJyT$nRf*P#V#1Jf -zu-m=`H7Oc~gAVY4rS+_uc0I`6{`l0h4Btt#StU|RL>^?GvJ>Z~X6 -zedf(iwU@3+T4OP_kj}-|e$nGO -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 -zT9bObtFX(Hos&1Ozkf+OZ~!*a6xffqDdOy$ -ziyO^D9yXL!*rzVzT0eqzRWj&Q>XRC$t*n;L?Vuol_b32vAmg3?zEg4;W^?6X!FkVF -zB2V(p&E>l+;mw;7qcRoG)smjTEoCz8O80u@w_3-;O1DNSOe9O7K0O?g?QHug>77)S_zhW^rI%3ikYfM1^w#G(|ZD=ek-{qx&{{i!{nK6*`V4jKR0d -zhPhW^hpEjL>0?!@y=<)ldd74HARF%?8v=lBEN}$ie~I1H6M4@!SK0hcE5>}#3<}1T-5?_wutvlQk*0~w#&9> -zEnIE8*KSC`N?!&`i{~Kwd>FqdA>*CkgvzmF(ud?P-ujhb5 -z_uD>y4Sarz!`EZsMqB^y9=qipyMNbX(~TZqFX?;lqjHar8V9)eJB}t9peK3E6Ly8g -z1)h06{Z3$9$2{x3yOx!wQ`#}lS}z;<)i=ab|44+yLvmF^;$y=!L8oe$DT;YWpnU-g -zuI7g9yqdgiOnIs7mEVPvHl!ZrR4&indTL -zB2QuZlXnH(XmNyI>uj6l49b=fO4>x4t9ltyhd-L}3%`POe+r+Gqcp0?d=)9JeBXc?P?>s#T_S9Qy>X#9lou*I1O -z4OLx1xZh2U^>`HE?09o5Nb2ISbOf`xZ&Y4gHlUbKP&pI{1E8t4zN6~R{;rdf -zR?eq2`et?>PDw8LiOaa*f50T=dxl!B$!%Vvk;e+~0P;1VbD)z(rPP;8@OtS{q!*TNAAYV2ylkC{?G2R2BH4Smlg|a@j2Dq~G;)g&FKPxfs -zAD|fu*8ZO!oD$YRHXPfWapIE99_)eyP2)bbWSKh+`RAhV4%^GqTEmSOuIu4o=B{1;wAj0>)8^*C+q4*+=8#7}5Jl -z_LMX$j##y>TI&d_*8U%OVim;ycsKNp71^i`C!PPJA$Llc@-a_;`yB_k@xa2j>uR(K -zlVCxQcdNqE(u`@N((Yi{pb&^oj3U;7UDvo8OM6hk{GppIDP$WZe_q;uJP&th;8$u) -zix$>glvpD^^}cY8#g1|9YSZzRnpmeGMgTL}(5n)MV~!^_a5339llFT5)f)l&dTwSo -zp6+R&ClA8ntxEKz?(FSHR9lrEznn^g-+n5x;28=&99ENYapFDilU%Ko=Cfr4*^ZVq -z@%K6U$4__IJ6~O&elC7yf7ffBrG=1Q>diY8Mu*Oy= -zXoeMZXL9bxs7E_Oh5rB()`%|qR528*`IByK&6Am*NP)HqS+b;t!;JC#Z_mL@2W(qe -z#815;*JxBphyHSpPr8nai4&LM{BUP4`fIwW{p8buN=5m1dw#rV4Invr7X7g`6>>7i -zJX72&-7M|<%sN>LUWK!u-fl_=aB9U=V?5gV`l@M^2GE3aU@z&>V00MHL%1XAI4nYK -zXI6N76n}sZ15FL&*=)o$mid%Y*%LEA?YPqQv4GYla;P+dZrBp4Rh -zIB0?{uq^;bquQF}xk976e1x0G`A>i521sU<^h&2IX=nOm`-tQ5< -zHI08@4c%8tPiFqbj?>0mcr$$f-U=4YyquX3(`y*l4Mk~1piee)@v*=kp9FTVhZO)Gc6+gFH!1~Q2(y5* -zEMP9nDN26|Cn)6u23MGk`E)L!k)};_^uxjvM`3n~bT1g><{ozx^XuUK14^v2@?;tF7{MR{A -z9K5?19-k+QO>ImUhI_HMsZFhzKG`P1qeTo~#g8^Pl+ocxxf3Zmq-f8sgrwL}SZgy| -zN-f+u1#$($62BmRVdtWmF#vu<%F+K2JmbJuBmb-$@D3X1KsgtOQAotIBKe&|Ajgsf -zngjf>`peLpQW-1C{Nyi_Bz|`>_z&MD9uc -zValyzqs3dB{bLh=`|-aT8zsi(A%`})KT<~jKgUK{r7-r#nLm&T;u63H)~lFq@4lXZ -zJv_KMB##Ani3xCFM}aqkZtvf3NlB7NU`G!d9AWU81qF5SYuOX~k$_b^?eHq^_rC;9;M7xmT -z0M`Fxr5FS2U}O`i7BL05S`+ME&r9HhaI!BHujjsfuzr+4cuJtyznQEbd|96at8-V| -zXV_zkr{m;E)VvPQFc0ZE+&qDkXMoi?D%jAp;%o`-ujkDUHhco?HL`@LbN#^c<;E&U -zU2#5qJJCxCYZ0Y8ac9EbIZ;YnnkUlRm0neesj&9Uy>7(waT4u@QK~qxNA`!uRngd} -z#IKfy#!Lr4D8Qyz8i;bgc>mpb;lcXKuebO|@z$w~x;%UzV#AesL+q$b@9V -z>am=0S7+0o6uZBI+#jptDkiq}=bD$&S~LsZ9$54-kJO>wYXB~+J)mgr_1@dV`Sk>4 -zJgmc<&-8tG81RRgzzxQt-r+nf=saXFxX#w6B=XIb(maFSl`Y@RH$XBgaZ6*Rv;Y!S -z3k_58K3_K$%A@^h{Q_9YFSh{l3`-qn0iz04wlmz4<&ZTG*=L@ao%H4etJ~N9Y3+hl -zP4yHnvus;6$pL*22P`u<70^gto?I%K=fr?Qdz(-$uRg}5^NS353)Z^5iCu(Uw0Sz+ -zlzuPpuW=583wN1+w<{p!K{ejY9qP~hm7Cyp`G5qJO!h{)ew~Z+=Q`##!9w0vO91%I -zx7N}IsRe>nq8rk@rLk9vL)Iyl_LpaVXU_&r*lCnermd^9f3yiU)C#M?`{kaT)liC6 -zRO{$(ItGd@tp0P*_Krq9(VqhDVwUcMWh!bb{K@zRT5lDOt~DNzq|TBg^<^ctBt-{Ne-%3j)z*W1HuF*gJmGKL?cJ!gc+`=PUyq -z3as6~cwgx$flU0}G^(M3*guJ8a -zgcQ-}2}UYqi6MF0uru>*iY(dcm%Nj>Sk?Ate -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 -z3$e>{;&4rmA0^u8^B}q9AYe>f9B-$unLs -z6~*R{5|%&lSl?~-nu3D9`_(J+eYYq^?Wgnz{ln{kvRNf9*GO -z(bx$2D_1V}jbHpNFaN}CE3G%8a+PxC(Q@`138RGH=F3>NdTNd^x9_Xm{2;i)Nae}{ -ztY?os!5+(D58OZXzKj{;g@UZRV*wz!+18b8ZrVio3sG}&W+AsII~TV!vU>5Msgnd# -z(&*SC{gUNbj}{8JVfwkVCuZO-F184-ke`iPjAelw6z0o8c79=BT)xpWK`1cENd-y1 -zAlVnB_=2&%V4N?w9f4fr4qrUg7u@L!lKLw0*OWw6p<99=6y_%)(Ue;Bn;)tSX;ktL -z67>vevA!~TW?hk!Rq)s%Tm?c_PL2;O@P^q1V;AM+6!~Co@tQ(F#p*&fao$v+aCz3_ -zxk7G1!O8+TzB=!*+?8uq%lA3C*(-DU5_Obm`N~Jf3(Hp$45BZi1Z&=n+q|3`x4z-_ -zYpc%BUMpeHHtj`tqX^Ie$`;+{hm#`TEvZRbPSMS9Sl&)xLKT -z@cz_?)G@v`rusXaw<3SdYGDahjhk=p|D5>PzE8TSAoo%1KZ~*pvKjL>+#h@5^} -z_b69x`!ae<_UJQqQQP}f{G%0D11$&Em;F0w!N0x@9rw}m>kJoP|5Iz!?7w|+=M%PF -z4~G4+vGDHCdUR9vo*lLL#rEj{_ysqzkV0;$Q#c+nf&pa^9Q>U&R69GNpDZge5qy3Il?Y{AhS3woWpYZw5EMBG -z85_xlBc!`HInEepXmWm&KOBotugqr@{_?>oIaD#$OL4B32RT~F!cfAO&*jgT{=0mX -z4qTO^kXJARg<);&9tsZ~XN>Ae_18lkp!mGs#QV~N1g4SeV_W2QkgbB^tJggKgzvep -zKk#BHr}yHI>azl^qx2OUQ{?d6yBTr_ta1-MfA`G0XXNsRur>LgA{@eLcF+e)E={5^m8cZB~%mbVf1qTV+t -zM0qtrs*ghY3q(lp-xp7(=U`y+2n97ll`kKo(CmxLZ*WVT&TY4*qxi4lO^Di%pW5Hx -z4>$V5XZ&HAKP>l$&-=r__`?c+Sm_V9_`|LKaGO7@_J=$DVXZ%W8KE2Pn-MY_gDWVW -zsd4b^i_2k&?>R%hQAp=7P<_wkaDy*>Xq+z{ujNa}b2+`#mmZ&VGcG^h=zE@gum3sX -z^7E&C&&?BW#s{c<-)9WM&uLvjD32#XrH!$z2x+{l5q^iT3?co!jF9f+I41h9;=*s@ -zreDVcFb+FW9^?pSzZH -z>oZmq|N6`rt<#jB!YTNt5HUG4>CAHee*XOQ29(Y*n;c@D_UHG-QA&>Y@2dwHsJ(&y -z@@96I)>pqq&ZkFtN{{I4Pm?b`#2+_|^u>qurL&MgDz9dSkyI}B#`9#kp12$F8G2tk -z_i_{hu9Xyu%ApzxdG@1@%8$8`pV=s0$@#`52Sea1ZN163C%G-#nxA(BH&wi~}1KNa-;*`uBIa-;BMgr{^R5&-MKS -zbkxuO{`Qh@42yk5Jger -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 -zYFfu)Q~y<*&Wa$1Wx -zSEEd_%gS@h?UhxyaGWwOZNfOzt$-&Bvw&i2W%=0Taj1ZoK36|3w`W?r759yY{@NpR -z)8q{^99x~$HonSkwUn{oxwvOnjU9xNVu8AsYTV$Kx*2J%5{#>aW2GmU*{!7|lA|a# -zMBiA5X(%o_(v-9c(>RP$6{U!PvFE>+`zz{qr@yimztqM<+1qfJ+xx}kiXBk-!SZEQn`I@s*3^L27nu5av2TT6R~Ej@=uiXAcDhv4?|#+2)`S_C!!9dnTwKYebB1 -z1(}nLp=CM4!@vGTg*#@6Qu+J@oUY&w;BLf6<#rx;0w<3tA-`fxso)sk?>MHW{EP+u -z9(x8fW=#S9k&}0*W&r;LImB}<@JYB+U%CkRX9X_@K81KG?A^ep6}$=f7bWcTz!{uA -zSr18H0Ow2VcqViJ&rI9JAO -z9B`h3uL7Q~@J|O`!8st)#AX3|fhk`Lfi=90t-v+hT8fvI0xwf=CGc_u*8*RUyi?e< -zz+)hv^!zaJo16(@jqFL_wZi -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 -z`xwVs)h%~mhg-_w^ODTxAjvbYJr`fAZaY#9 -z9nvpy##G3R7H6;haCa&S_j;oEC{>g?N)x4x(#7jib<=glI=u0Kw;nhUb{|2#AWEt9 -zKqK&$mz`>uv^1urqYgxo(XlS;`L2X%UMpd_wI%GmtP)n&uY@f+Qq1msrkMRufm?Bt -zigDow^qG|{d&0_`w^-RP|5bEJ>f*7_jd%XAlTyqVtBTddnqqCS?x>ogJu0?ZnjDZI@wXe^mn)10) -zQ|Ja#tE2^`^-V2clcqAZY#L)TU~U7Q1!d$ib`{)~f~rBY;5J_4L&<+nlC(4Fsy&-Q -zzx)J^0egrfk3&nQw3nTi_tXa{8KJ`6#;chbX1L-ez-&Yb%z%mOnbITR*T2{P|4x%v -z;rsCagQWfU;cqVv4Zi(WPS-CYirw*-+i$H~v8>u&z6AfHacgWAv$4OjR@?+sbK@19 -z!ENOZb9#Ojd`@An{V-?e_wu1C8~Di2&YM(?Dudc6g;aCIvxaMh1U0^>REB?BVXncy -z!(1F6$J=??o%~3$EM3oE$;%wXMKQ>+gsN^(O~7AWewrO&Q@L&2k6a92rr@=_S@p3h -zL;W;-e#Bnq$0~#74b6P*5w;CBGi)u|O**^YD20sSiD$HG8zjW=Yxz$6GpopDG^A9h -zE7S&!>`s0pS(cuG*^$gaToi*G%Y5w_?K|B6zyC4zZm)_t(5}#2rH6WeM6^2-On+ZP -zZe{1ti@_lhm>z1gYtW7xU`l6-Fp2L7dd4!C{)gN&AcX$ke;mn-{RTP6tv;DKKaX+Q8Ud2IhDV=HFmy(R1krFvoP5IWTi@%P2R5IdITK2TTqS9b`E`3Ahvb02V>Wo^zyz_mFhOh{Oc2ALA#i}$H83AR8XrX( -zLF_S@U&1^B6U3qh;G4Yz7`p)`h%H2#LF`7DARNdr2MC8T%mG5BkOy@=u2C5{18+b# -zVbB<~2Ax4SNGIsV>P&xFsQ=UOe<=LlJpVW?f$Uz?MlbSw5_vufvkm5cnD4@TGlbPw -zfx7XnH+L|;lMiz;%nd<|yDx~tYt8)4o8bBUgyXFAgJD-S|C(qX2P -z8P4h-Kzbe+!0LZMI({$!!+d~DBS>KNJtcM>OzOibVbY{=3rv(I+XpigCavB4 -z&%iNRSZ}~l4PqKxlfouAlMK35BJtDxz~La$S`NqzqJAxqI1X=&@mRU2IbN+&Yk8Fx -zzZ$JxrPgbZ2ucq<6b<#4lpe|x-7zBhlrDN`&O^N9Mtl@6rrA>5#82@Pj~NsNqBPK* -zg!}a*+0oZe!y-K-i+m_Pii5)X<0RRa=1GvddTCaOur#OT5S~N7%^@2cCg3<3VjL#m -z9MZ)>E(f_B=4BkNF>ojw4(a63qi~3eL(S$ePH?z$!XaJ`;{$gcXaNY(U-aPCGhO|| -zjf^s-P860~t7*4cE;GstG#~= -z^}q7;+_4sYufarZKk#`Zgi4C^sb)_CQ%6YnbzsULokQ;crZT2yKd>A^w)=mHhy22> -zTgyIz`TUz}*=I2CnZH(I!BJ76wY<2R5s=ST2uYu@E0hn!$S%LV03e;pNzBsW7Tw{+ -zrCxkb7Ozv#3nh3@!bWd897P=TkiG*SjDhlh8vJxRby%3gf!#cZ%As~R92$_;p_5*~ -z!1;h=;+>W1nnidg2P1zqjzViHrT24iC@!10ACChIdSL@c)^hu=#%C>ImrvQM0v&Op -zCLO)OlTOxTIm5xp>c;ZvQRpmJ5t*I@nz_|lLLOs$US@jAWJyEIRqP>iz6Fg2P+?+2rFw3n -z`aKF5kBRDiIxw{b!kNJEmw0l4!6os`0j7S4_^t=0wncIl0n@lmWCfXRrvoxn8blG29_YU6w)X|6~3 -z24K3cOV|dCtzrqU1g1Nq`Ig+yop4H*$XoI9|c;0uKi!{eBEQ -zOu=6R3kv=PI6=YZfJZ1ew7(kfB*{bRU#DQ@@v!t`ZLcFs^ -zr&%~DL`cCP)d{I=)4r!ZRL;*;N9jEuCf&_R0T0qI?PvEz27orrR#@z%fo_CdC>Tcu -z$Eu6%=n`?Pr#xOIF26m{EZOT|KOb_i^PtSDu_T6lDa?f34vFn7-2Knb)79)f(CeU= -z!9!2(M-KK3a0$%2K>p|FT$F2`Z2JMYZ9eX~&BMLSe9TiZF%Buj{p`8;wnG7y?U*b_ -z!0+)nxC=ZqCIoMKU-aBRK-Seoj*8_tjs$*fsAo-&*0blHlpXKdTrYu7;2!u;T|S9Q -z!=dKLt0ppWAMq}A5X~w3qgC{m{_$u}p=djLxN!dw4hClkIO&@vfj9^^oCiuWHSoQF -zFYr(s{q3-kteLf-g$+QB_&>#gaRuT)If3qh_)&bX|HN;^8_07pw)|!uahn|NdI0|E -zFUot+Mecz-f%t;1F6RGjcez|Ily+jgY1r1V9U;bZ$=-D*8^6EcqabuRwP!r?U{%UD|YZ2DbBjlJ+p0pgRm6WS_mq4e<$xSpddENn}e@ -zclJi&Mr0&-sQ>)E^i;7Qd{y9~zVs!~=iFxqznS|`>yYwQ#Im%*v6>%_(x&1|?40If_Ppi@yH@i93(~mRK77RGcC~@KN*#;)v#H$ss;S(1)pgv>swLc5 -zRXsY+P23m!HtrSvLv9WK16PFoAQLa(p9!c4E^FZP3OK&tH-Wnzp_U-@b&xU@(o!Kc -z7Saufh2!?A-H7!E#C`;+_!z0#hg7|d)V+dKK8@6FMyl5%_4gnb^~lXij_Th#AbmePL?3ksXbCNEot|4B*9CNIRVW%5D`zOnivY3<)zwrLo{8U*`8 -zUYxyse`(7WV*dK$CRAHP7h`L`fq=f2ZyIL%=Z+BPWy#(JeB<}6|H6*dv78YtC?4l` -z`05e9PB4OXlYtIj?sr}Lz$#VPkT -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 -z3C>A@+ZCQ`;3iQ7b3JZGWkIK&f+4odT+-U( -zK2u(1{)@KHqfL2R3^!zR8vpmW5eJ^U*NSdYj -zJmtLxj3UjRJ>C=E+qOPsi?bc|vgAXjIW7+Ej-e-E@tW&8qq -zAL1jPL#K6|K9x8(Nu2k*aeuSSO}v-+^zEEJbUe3Z)3n!*k;@RD3S*Y5z~^~ruY?|w -z>H_MSUr$sYsLew|*=q5SyWorer7@QKBF)B}Nj6p2eycj|b7&#imSl?? -zr8)j>>0B-U1?$>h#5v(xq)rXDJvyzu^&&s3^lWZTJX4*Hp?{qhqqK3WEbEYFBpTqb` -z`Fk2ICq3toi8JqO7r2OS&gC#3^ay9Ku&Lw2oZGwa>Ug_*jfj)voP5F3i|h -zE}ND;Apg0p?vf!GIeJ$;myG*^=!>t;3S%bF5iQDChgZl!9|O07J^&pA9R^+Fz_>g_ -z!`_1bHW21{vC+0HmjV5Hv@NcaRYlX>8EYm-HO7pz2(vC<7Z+{L_Nrs9x7}b?=L@je -zr$_$EoaaEp(Kguk%xRbAk%!z#T>@&;j~yDZ*^}Tkof(bXlFN`Yca~JDn+~}Ly-hPmwK!Brec?Ts67Mpo-h;W< -zb8A43tGlk6sTC8k&awMaL|&Yf)9h|SIuE(Wp>`Y1Nth*Oxg01_GI^9RMntbOwy1RE -zXwC7@fwEjCo?J{F$FHTa;DGz6C&>n%lr1WJN@Pk`8;cEr)-fwC@_AByvdwfRoR>x+ -z$cR}EnZhjXad&u-d4CD&TR1>0pIsQaG2t|$yS~YR71&o^jd<7_!yohv>t^u>y)miG -z*$?{~8GG&kk2Zd_pxSuQ)4v-&{0@wGtK*v8Pq|q_O#D{NMqfD?2vf(;6Xnu9b;ep6UCu_Uzv8Yw)0RPFXuY;U -zoH~Jjqup_b=whO(ZFDWwnYWEYOAu~?9PU$u8(hwkRL7F+9Og}~dTvTbTe1{h8tb#~ -z+crcz?#)^EWWHWJ;AQIuh=VW=)%bAj)0JFb&>3Ps=y~R>8tn$_n0giqm#Sv>c=vPW -zgQyKOg2wpP=MS|V^cstXHchBy6O7H=2z7g+-X!v|nOGmBx>-CvTfLFrn1RthPmI{2 -zaXsyGnn_|eTHLcP!R*B9a+_;$sUz=JnL48&Ib(-0X -zxt;S{o34vhtJ(}rx-R_+&Z+BCuV9ZI_U`7mb%(tz9FN}*IMq5@VW@!*a+-B|LAwsi -z^>ubp?OJfwTtxA|>p1K+h8Gv?YznD;x#>&qw&YFIi*n;o(nh|;o!voZA?zwwk8fNP -zTwcNB^ChYgrcvYd# -zdhbtp*83ngS(-jz>>(8&=C{a1*^PZ#>`~!E8;;6~+oMZUn!`dHH??ou(?bQ4qs0 -zvhC;%eo-IKdAX~s*hv^t8NHbJ$kzqm7kjOxLl(zEKe0In+;JWOzwdMj`RcCKRdZsZ -z&8pO|P+BhGdb7IguBDsJ2fPNy4Hg*bQo3 -zb2lr!0-t+H!FS?Swiw35x{@h-!3&=a%6uzhvuR;<4d`G|9IH?7vNhXPj?J05#>F|66WwOy6J -z)n+XkUi7|ue|O@>Tw0Quclyf%t1Iknd7(pk -z_ip%54O4>-c%EsdzA3z5lQ_9ngLFrV(MRSZy$}1e;J@WygB9nf5Pe9|P$qcxc-m&-&i!v!>5Xv#Hl~a*c -zj(W$`f~mO~wtb#|^m2(STa#=jyfN!l8)-()hHE#T@EYpl;bwSBxA6$vPI&cA`i)-! -zW#k2IJO=Yi^g6*C)APe^QMS+xA?wHICJza+sT%sNw}_v3^)1}SJ)RrS#fqbC8MbEk -z>#nhR+?GRLCM4#L%2RKOF-Mw1&FFVhQ=+dlf9PeVG3F2O`w^(w9plk#26y(ltmBY0 -zs!i3P-8`DO46(MDJghxh2AFjX`pt3Xpaz68kX$NPgf>K*!*WBns2W1d{kDYVn#B-v -z%8)&tLFY!>l83~KVbZ#x*}ZsM?@zryNw$YbUk_uBxeio~GNiSH0HXE7@poU{Wq?V0 -zLoqNzK}Hbm8?2x;ZNXsM`fY03TRBpbZ$!y-_56U6=Qh7Q{K3thk8{Yb}ZpijKxTlTvj>Ii8F-FzIF -z-=Ocx%E`;qbY)FrU0J5!uB^PEuB=>rS7WWND{H#8D@)XLH7?`2vNA)vvSzTZM*EJQ -z4)6A!j;_$I#@n{_bhv`M8dnB&HP-368dqq$8kcijjZ2$)I@(Woz0P-gI=cBDX5xjh^0)ojtv0-|p!>qhBAiVRUX%UQ!O*_=z`k+b3Sb -z)=$uewU6l@-Rs`%8IfZ;(~rZ9BemBPbv~mh4)#%seZYBP=de5>f5=SC`kZuLpmDw2 -zJ+;G_R&d5wwJs|XE177_Xu~;UPOqo?+`wFxXl!P&Gn+D-!t)ccx3tiy8T4i)2tGC>^vF_2FaCZuG@wydO(v2wT^1OfTA} -zQ>|$8o=aZ8Eo7sr%Z$B5nxKdhr)`yE9#3iBxuc+b+yU%f4Z8AumRVyWQz7 -zgR6g-$z`d(Z`P!KQ%t6g$=MTvS*N$QAxpoZ;FQs*ZZnr%TzPo0tae_(sd-5( -ziMg_2^Nxm#>R4#OsfI}rr-OOj#)LLg$KtdnvLf3;U*smncTI -zVV8T0hsNRf`p_*0y$jNYeq-wRdfpRR`c_j%2uyV=)^n;SvP`b<`orGV*(su?{cY7$ -zZ@gX8{x>oijrDi=)Ti%K9q=B;pV$a-a@h4F>AT#Yc$f?C<6<7*b#N1>PiqfI2OD`I -zC6mO-B71C?`x=kXv{M|3{VRO>$5}6$Fdqs`Ig7iH_FX71miTkq&UP-We`~)jEXm}0 -z&k-h>`yBln-as#Ba_x3(7LWZD+90PdGPZvMHxlWL4U`)8GWO;qjUW}!NVvz`#9bcT -z)_)82l-jn?%?Qo!_dYyezc(_Ko5&JRv`rLgEjCUZgqlaQwu|M-(z0-pu*-e=jJ}CW -z|K%q(c3CU!VjP+FLtDByMPws~Ia_`wFN)L+oH17`T+x9#y}tfTesb&~Gqx3W=lTiNK@t-FxdnXOxBd`!x1W$kLr-1oRo -zoS|9B)K;p8A#K;~)b<3s4tSpE(TN#5O=2uK_Mb^djm8UNP6u)|9Ia!oJF$z~qK|vV -zY`s^&DXmJCdrF0qTD8i0=k@SC+r{EZ-giqw+c2luinWj9d5gMTU{_$5U>;iBA|K~G -zZL?aEC{Jlg^S;6AY}1IL*iSj` -zO?C_t!`~d-M5ouPwjoY3quUZu3YwREp09k{c8+V(Y`Hai)3mV9-_-SM>$fFQn9_ -zJPkgTxL{{U9?s?98_LUmS41@sl@Y@yD64)jYvzwp|sw*PYdAdULTY!S?>(SnS+S -zLL9T9<9UE-L9flK8FPQbtBr(Fv -zB@GeT=1r^JBk(TM@>^3B5XWn -zY>`fG5|0?BZsKkC8Ig_|F*_r?{FN-JqcwcfZqK>ishcwzLTsNKGd8mL2XID4GuF#C -zMxfRV*f4M-@7lIEYBLu%$E#k#;-l6N+7P*M(B|BxjvEVO3>&yfpS^K@bl8!uo1Tp6 -z=WM?*Zz$Of>s3b_as5QY2Id^}cwr3kmvC#;n_cER?(A5z#;`?5N^I2}xhyH9b#PLa -zt9DJX)37;iRC;Uj=Z;ZXF8i9rPIuG|weFk3`Ol3yoc!*N86OoV9?PBB=<^IkUEJ$_ -z)!iKvZae~)H;g_{q>p!9v$r#0Wd0zIi#4OjyH3Pl+BHCH~SPH=kxrnmv`y* -zx^L=?dMJtS;MZ_Z&-KQ;<}6UNr$C#pSF<@cV;y70H*8=&bd#FB3TlS?HE{b7)DF^E -z)a*pPnyn~QGY|aJK##-iILHb)LyFWa2{aS55EPH_r7$T><_&800`N63$?m5;aO14_ -zz7FV$Vl_Koa>4JZ#RvzvDWF);;8Hca9Fz^Z4n#5%5O-RD%oM~KU#4bD;Qs?;yFn?i -zZ?3x_*B`e9;SPZBSJ36Rs98DaWzf%{kxQ`N1l56vKWO2_;UkduWdZT}W&WzfGaddf -zAl?<_YW7Kmn!QsAUE9^{7|6O*&6+^XRce-7qh?*8rcEPDff(yIv?WR$eb4}S%aO#?%!tQ&{%68pFcINuE -zxwv*>qXD}!12OX4ex7&j-Thr{T-{(b>Zr8{ei7ME*9IvywjBPi?PkrNCTZ9iLBkS9 -zYFJ5}hK(Ps!Mz&|OGwnPr)#aX;rwUDEmE7De?G46JJ=^SZp!@(Ep5hm?bxi2`&U1W -z&v23J!;)*}c|Ba~SI4jXwvJlmLsF}pa6TBW%UA2#gY~-hAT?T=kcO5|t#~b3@rd)( -z_EK-65O+x-h9G@6?|!DX2yMH;H~_8ry4`o=YvZtb>xj0K1~!Yso!O!x_SU>1jeFg> -z?S$*{E(gwTx1vuN@*=fO>P%OTStPN5xG)8An -zY`h*h+H;PybAA=|9M?lX`mw>_i&}ZCE=W6A{h=`!e6zv#;yKdH&&0R#`jz2)sLXfk -zv6UD2ri1Sh#QBe16C0;Vsd^B$zweT@GqEv4O4Vw(y|;@?XYs$jF$ld>v*bUqaZ+y9 -zDHZyt8u)MD^{`j9HNLLkRB&G2Db+33+U@O{5TM|k=I7e^kY{QOPQ6U_(S_aj^^lgK -zachWP>Nq6_tN##lA$+^J$d -zkOB4f5cnd&lK_g2$66M4ss&9_>P#-euS+SPXOl*|qIN|7fd(~-22Wq4!O4;a??*cJxX*a}8oU>2+~fXNpZ)H>Zw$fi+*2BB5eV1zd#KxY&Yt!6j02t4T0`taDcw^% -z@pVN?%cl~L$o{t0-|~Oyrn1$H|6tmWh&%D!iH%88+j4gEXpzF56B`qApGFUGq?>m| -zz01&(B;;CQZe#=T6q_uj|3@s@Omf)&B`- -z57B53aj-8$y~n9MdjM|vsQ)hy?T^{VfqHrN!I~e(T*E)+_|3}-)$BXC9{{}^;D4$6 -z#Ksq;v|Nw0G$3Wq=N7H>dFFP9j=jIRz!jvI#vo}u=#HA$_(X0re6!)JJ4&k+J$Uqb -zI_F~O?{z_&atC^Y1nMbLx=E9dkUiPw8GTU*oe~0}f~a@BKR2Auor-y$5r3>H$mfaZ -z=Ev`B9~|at3q=VP)ca%7>Q~L!F?HKib^Gw3OMH -z`7F=<>NcO}?`K~WpT^D!(xQdO&B -zaw#k41B}X;UBBAii>41~K4?`;Ds3>}Te#3&azA00+}H9rX#DV&Gr@gO>Ni^rgX@jbN1FRhZ{U5N!Hh$<--P9?c%<|GrV{|D#x&V|+4=%rX8%-pm -zN%GO?L8A~~Eu|LiUveNTq%0ieu(m2(u52ew?A*>w^YNcNJh%>r4nDxrOh<&h>s~R&}&DG#}74yL~1H$MB2QgQC -zh`Hb&=qDGTTYd`Mw}3YRE(ZKM`pXpbopF$LR!vZIJ44mn1jL^J{&mbd7x1hd9{Gpp -z;+NwUVt=ffeF{ -z5rdxhr7!lSU+GJ~SLVg5Rn+oG{&)k>w^hX9XOOZ`rco>%p)GQB@zVHfpvVWsm!S8` -zD>;BZ2ego-&IVLorA5tqb)9NyavNu!A(m_+dFz6fZ+L%`U>oyph5IgPz-~TjhInuj -zv@+;6UR{S5->hPCjwZTzuCLybk>^%cq6bipcvhnO5rQpm^);r6#WQ(iI_TD+B(qsb -zCIfl_&`btR1oUhbwFi>;tc*SsxJ6alWQ8*gQi#sHbLObFeEIJ9q#GA7VnF|su|p#@ -z&_9| -zL|ci1 -z-25rp-Z=b!gf=r4I2+p1B;fMUw!T4|j6u7q!T(?ITmXI#o@U@G@OaQpC*iq`OO$XcSt69zoxo>-oFPIlWT) -z*yj3DMuKy1zMKjP -zBMDr1*s~v@2M|i~Ttn!7gc3Z)HPOWh2+i`oVNKc^%7-sf8|lqf#Kd^tu(rM@hBrkQ -zPen|)H_h6#wcTkHh>1eXNEUDtJ&RQ!$7f7Qu&75D-vx@kL{UH#``4wdV`cYI -zC{Vvtqa9tKz&Z@_c&WY@MRf5f#QsXLPL}?qw3oWmJMjKs#C}JyEO+Dj`kvV6VuwkO -z*#GUx`M~HBj7zuhQ-E)!{x?uHJRXnYJ;yZ7imD9sbc*yPLdeZmYvhtPZogs1A>Bq&mz) -z$yat!9d1Bqc^B1T4nmGDs>AgNrFq}bs}4Ev<9Wn9>U~46I;7fNftYx2n%nA-=5HF0 -zx}>`)*2~A+>XF7L)IUr6pXzV{D25Tm@7CeNi0#vp`~ExXkXmU+XLk+XS%deZD&Uu9Fu>Rd_YLGr@N={-5h)yodI7CfI~oI0V{jebyvsy(e#Q26O1s#QBhTn$5eU&7BI!ufJX4#V>l%c>7+Uk0z^!<`d}q)Gq&qafI4sJ=$e8 -z+Tt{{$!uS{d=c;~h|?l&Eyfx*XjPaiiI-k}czgFVXc^_cH_XNxYG?g=rQ1H?*TDDj -zYf$)=%`Bg(x#_2(F^bX~v%b8kQU=L=Af0)0q5k%sFPBi3%ME->YLC8sknvy$c<^`+ -zZZE_21@6Hf+?x!i1a4*zZYRUFcJSieCs==Cygz`El6aq%wUzPy=MIw2y!CRxSF35O -zUuAKZI*e=TS$&=jrhY^9lA2BSi7x5y$hV)5=hTm=6`bs#xkj1SJrAyBl%=3-E&sg| -zJkL@U!%{G#@p^7|Iq)u&gS~6@3YNp`$l*fy_wtFYG*T4L%4w|2?VVq|&HF_pIqI;U -z(PIN8|Fi%~teV1~O6+}NJ_0r#^O -z!pgNf*sGm|48{Bpir{jtssVlCN6gp77{{MOKT5#UyPs@9-`R_27wAgxyobIs2K{P0 -z!kf{D9>N@-k2xU*GN%iDtGf<+zw`BYoCCr;_u!r19Ve?=YF3xD1JFN?7a~k{Ynsuw -zw37|(Pw{~mX}hGC85CXo8k09s|Lsb&smcx4(Ax7c+P%=OZBXlsXjdBnJ?o<`)a3$l -z_#l#Jm5`Y1?KB(gU)?1=iMPIa{7#9?E04X1l!@)SCTE($xEnL>D!_4oxlD!eNx;tm -zo(5P39D*{^ToKi-6ZBW^bVRAP_K@ -zsb+7O57-~D44B^VC}2gq3U5F>-tZ9Mwl1m`X%)WySQ)j&8IV1nLwhtqt`yORzks~?GQw?W*I9^Hq76R{n%59k -zpuK;A|5wnCOVDP&#N03i?U?3~K%{#E>AuHVy_08Ld=I>t*0vAU7b>Th$KV0u -zYHu#`#(kh1-9|GfS4c7mUuayj2VCUA#bIrRwb#~obLi(v0~fow%J=Y7(Zf$=4?k5s -z{8abwQ`5sw;$b&GiG#QJNgNCX2TiweFdJ4H;^5gq`~vOEXaZzqbDOFI5;9 -zgR-Rc_AgDvmn!h3@3j7Z;Y+O;edtS{!k50y^!n*2^JA@Kr6Nmmmo&FkVXQ|u8sWs& -zwAIGdw0oDdxJhg@oq?1aO1mWmuE>ntLea$&K|QIJjdz&&2}?SF8Q8I{-4ZQfN&Yth -zJF=C{hKx3unPgYuO})bCAM=;**g}m(&Su@?Kv#XqBNK -zDBV38Y5*(iP0);o4dKqV{0-Xmk7(y3(cb@wKB2&v9fv;AGg7PwQN1cha!8qHxIP?%$YBPVjn1I -zyy&4=p>Chs$bVbvCc=ajwom(UIB_> -zuC$jxG4UDJifIH+19rHpo?(|WEJ^8)%Lmpkgq9OsY>!7in46MhPAniz-PhwYXF8yv -zKLOfU`Boh}psz(2KLTvDe5;PV*tx)tmv7av!?+x@q(>TL>L1=Z_F`?o4wjiDhMIR6 -zSuNXW?Cm2nnYtHt8n7I`!pFghnKPe3$)e&rrDhM4u|fNcFNeE;z2PzX^pbAuIAFi` -z?Dy%ET+uT|Z9}k*N@qgM84u06UTu=%mYcKTCEUADY!zCG%3Uv -zUR%8z^ZzL9*PvWDV<+_g)NE6>j}GnAN0+^|7ab3}IiA!trZqk~v{E14noYgv6rh`g -z?|8n_Th<(u0X(Np_a#;>S@l*jvm-z()|S?edO*^AP^3i-UEaR`O8)ph-jc -z0fZ~NqKgwTmL6D*`bS=^73eLu*|i`=MRBlL(C9b=DcI_%i)ce2O_46gZ|js2K?9q(X<$61 -z>y+XEQ%@N{Fj7nd7y5&Kxv4uvBzTcou^(;uF~|=lJRf6xy$5pg3bf-EwCzVAXIO!2 -z!T1{o8AXA(|HM0*LyqCgw7qyoxDwzxJ8$uha328Y?!3i2!u=VzpMmS<9pUx^_dRf4 -z-Vx?)V7}?>%{#sq?{@wU@2WbzyesVC-6x&IyFc~f-3Oo{-sSsv_YPp<-9{hp_H;%U -z=ibJvjCXn+jybq#fwLNhZj?Qyh!Tdg~f-tKfb$FjOnB=x8ZBO?P!#b -zH?clm3;{2!xACGMc#%ZB@XbJGHipKabbM#eEIrYSodj%4hgXiL`7W8!P5}01hbj99 -zwo4%#QUi^(*E+C=m}&KpMYF;TkVRLIC{`4vu2y2KRAH1<7aFrQg{j%v!u{Dg$g6&k -zR{bIU_krvmPPIbc^_t_4-?+;O#L>QFL?UK8-AR)B$q~|eXB|D!Y&2Zj2ns>G*kJ!^k>C2OFHt`GU!wAY;w8!t -zbH8wPJ+SNj<5KV_3dck5!2I8S@!A2{B)qE^DzQKMqF1U8LmPet8n37fK`-{o)BdDS|AJ0!DGi0k1_cvJehd%@yy3~JqYdZ6xwAv^v2D2zC)Xw2|4=C_jKz?s5hU6 -z4gHPj)|-Q&zd@3xQbB)XwYoVN`kPM!g#PB!sI@)1pRPyuLq7!HyT5?+-Zj22klUvI -z+t>czE5#GOQXFe*x%z*P7hbyp^_$JX{)L${Nj@a$VP#vlb-^qDL!b897+CxB*%%bJ -z>BLIXiF<4eDnO$Fg)xhR8ju;#7zUA@VjQ5c3?eOiJfLs}k)Ayf&;$mNo^27f$#>nR -zXX}}s-H8*o_Nz3OkrYgtTBkI)?Xj!0!b1I5-!_-UMi*;+(w>FT3_rM#H=AKzxC=`VVw`V7TC3fRcyVwPI$?OT?gzs!eW*F -zC1Je}`x3A(5mvSJ>U#8e&WB$Q{CdKxx03Y%9QVb*(!=p_uu*Unt3m7-$U|m5r?TGQ -z?PTkr*wHLjyOrbz^#9gs*Z<$Xdk(%^**eqJXM(!c7C+8rn^W%gG);GT+Ywm+;y}^p -zvj7lm1$;w3K>LH(K17nZugTthixhu1;BS4}DA_xx9iG96{_k^Ygl}Fv2}>e8lx^j4 -zb||P&|Hhi3p0Vqio_u%EECn3 -z2#n?ZFqZ#_eiV&|_7%}S^(}|hg=*Voo2D3FXWVJ)v$fnE-ZVdPcosL_DjskyTWSgq -zxH8;GClu)9!(ZK%4V+o?Ek9Z@ro^UpsmAc5c~`&~<>-AlLH}3xj0WDEYg5!J%t3W( -z?6;qb^F@c;R;~}i6;eir$`*sOy0bb?s+H$)CIO*71$}mM<_Bx5rAKfMfithbDHguJ -z62FT6A$5IReRiWy7AXqUyUaLO!fjQegid#W3ugrn&C|gr#sr*@Fc^{7nvOoZpXB-! -z;Z%2>F+ZuLGn2o&@W`%Mf>hmuRtq;}}nO^yR=uboaUdIJPiFD$WA3b70 -zPA(ga6B@%DIDe|=#kC#y7y2X)vk%01h-&G#Rt>!W1!WB0%?UUI$_3lKXJ7iV`g;I- -zzUD$V%EG*BIX2X$+^u>uuH^m_E^LH7%&y#4aoqy1RO73HZI%iF4-aou!*F_*(q$YA -zc(AX{;&7JriLa1e^6;T5oWT(x6?;4zLY&Y`|$Joh=Wifp^;W$e|hK?vZW*X8>n6 -zR3G8Yk+txxmazv`jlCIM6g&l(>NBRBrceC1ss#I#ru!X~`#G0n9LV8D4{{~j=tNGn -zdvJrLEX~1%2f#1OFbEy>IDn0$n -zII#m?c42*7YnEDUICEiIlhU3s)pjkbT3P|`P9Gdu;^6KQ>rAf*wkJbOIccx_A!Jd` -z3Aao9OU9Ut7@J(7KX!7hGF(^t<_PX)jf#&-vG2E^Ttz3j=^frPUIWBY8uEIexjANfIM1D6t2$B+|9?xI?>K*S9)wpkBhIgR{aO{I;M`bb -zIlLu4T7sM-6>U0s%?O-cQ$FF?a6_kf!af9c7~+^#9K|VbJ~m{Gle~0+cJdZGAE}Bs -zjLB@fsI5TCYs&|ZS -z?runoJFsZ?u-!+hgAdAfi)yzkEp2hQOZCAy`Lv$fu4>3r^V@IFGfU0#-0qRGJ*6d- -zBOgXN!qbCrE7uy?Y3a^4ANdLkYvk7~W}5~+LEsGvXYZw?Ew~1)--j+?AWro4eS61s -ztN#`GerJ_*)KWJNU74|Jo9;yV}iJ4y6?( -zDh=Uw&bU#waHr%+dvShATG*yDs&N*Nf1}(T+Q^wU%400t?q5<5rIt5%?i*P3r0q0L -z@15?SUv=`PpWi8Xd#M12-;r$@r!Zsfk>?=%jQy0n*AlS%9eG;;7e1@@y=6g;i(1ur -z6V?QR?11ctmQm~8g;sgW{g)PN%XH<=*uc8$>F{gXqBi^0Qs_{N&a7ggKeq&!m37@| -z4lRRkKXqW=VI@z%FHV02??R2PJSCqN;7hT|6<8RsQ9j1PcE!BD8|C9dh(jq_Gei1q -zl*=u2+Vg?hbd=~qPl*88m-$LWZ+_~w5-sT|QEE?#{=iDqoo3m8C{c}YO8%l(sXpMk`G!=$?sc&>-Ia2G%KD};;iy?esip%4*GB$^>}A2 -zXz+$&%XuH|d4x~FdkJy1qnSLV?2Ogb5u|PrFsqz$^DPQrm -zzM+{1r>WK>;IEc^kqzlWn4{1Sog3wk;U}c8$#d5`sPljeo{4@J0!(V`%|DEJ<(IFO -zoXSKoNhK#Z0Uo3_cU@oTz)4K_xO0ybA1wKpVb^y#mcUa5!v=|CN@x!DNCjQhC8H5m -zAiTM&poG5Z$&&3TM_k#V>cX(26~ayK?{=71_euwu*>@X&aqvW-sndsj7aaXRKA?sS!=DQmE% -zNgTZOx>4~$0NEW9T@kW*@2Ixij%%~{oB3L0-RsZ}@@A>nY3HYDC!&iRH@Q{=pMzZ3 -zL|58U!DbBihrh5VG+Lj((o^oHX7X8plW;h#cRKZydwR1Pe#N>epX^2XeGjFzaUm$j -zH2dAmS3V?%S@_9H`^_UqWB-0u&Z4odcvi_-IyoqA>h`!rC*?nO#-%H6Y6dBr0RnKddia2RD-fy -zZPMBYwFZngmhj_-*7A|h*Uj{OuOIX5reWWE%Dt{9owYF(=}t90BI~9r?SJUSo%y}K -zdC?v8A2g*cb%Kki!8`bvdct6vjI!(<$%qN{8u& -zLJ9fH!bc~~Lh6t7_iz)}H$C(b&8F~^acoaKBu}A2+TTIEjmY7Iosg<_cf1~t(HQt0 -z9oynHEVQ*_kjO3K#P^+;Wdb=v5ZXkgRETv04GW)gx1e<0t)h2LoP(FL?)LK;I6AyZ -zQ|MZTO9=FE9Po|V3%Z@c?um8R-qk{f9@f=D; -zIh8i(ddl-5JWOkFQl0uwag#T`xYwI{^KV11H&vsI@c-f9Myo|$-Cf34d!_9Cb&Kvu -z`2kY$Qz+$#l22F}6)yT$Vx-a-uwBJ979P!6;q-}5bVeC40hpz6Wh+eG4twl?S%j?Y?@1NaM(sAgxik0 -z-)!cDrO=#0+d1<@NVWb5A8boos_p5y-8|ror`(ynct9gyd1LPpuy<>Cs)y1$0{*#C -zYv(7^$X9)qykB!wr?B2hWkjjqz1)_ryrL21#h>)WWwoOC!V7(GFXtRzIcu@Qy}O*r -zx0SQ^+eh`hJ*nw$DCd&f%Guqs=!^V&D6NePKsoQ<%GqJLy`21&mVT^^kG{~ayNn|l -zFI(Ufig@`_uQGPE_U2{pH~*b^!12x|U*XMzZYyJNu9x;uS{ok*CCAEmEcUZH;$)u) -z>=~bvF}wPMyA_xX;kB{9ZR251D2N{f*}OuU+GdBRgsHYcB_8RfN9*!P*FEIH@^E`| -zGv}hwZ4*Yi(eT39pM&o)=}rs{P_D~Z)j(aio2CZZw`&QBaderwDuhsUml)w+AQ)3^@BD(lEox%P6PD*#t>ud0p8=fd4}87`6p -zbZlnC7+^f*{#OHy20UhCk_M>UlTq%YSqhZ+=*`0ZkJV0I?arE@2~n%Xj77?(3?=Bq -z^{L@;^tPYcGgm7NA?gVUaZNaA0L*voM;+v;RA~sZ68ug3tuO7}YL2k?dRq;>wM|qw -zh*y*IgRDog)=&O*Kq1H9L#2qlp`JCO7r(kkK`Q;9?#SgIqT0@nhA%SI=FldKO-5V7WwTS3(p%U$L>n0P1d5WsU+khHnEE{7uR`x-O)G(9wc#Ln=roi -zv#GYLx1VyG#j&EXP(C4vo*H?9l6L{4^vWA4 -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 -z49v$vyflw6%*WAs>`FqS -z^gn=u8u5BN<@WuVN -z{G-#$rH?ya#`{SM+~}F;!@UQbn&HZ@s(?|#kSl8p1_#C@MV)-X61=P+c5Iz7y%7A- -znL{t{POl3Oto=D$Ut18~ulCjOfZ8qLd|hADAXibie_e^3Z3$6_^gY_V;aUE2u*u&Q -zV$!+(2nsz)_Dwin`$M>*Zis1vtcoz^=`j8?vIP@Xezp`bM6$rg2kN3XC9u1@jQy>se#s(@Iea0LHTh&_JP_k6~a#- -zykOu#d9Vifv^+U96&~mp=gBdtdGZ)MVR)`B%#*j_f5;--$P67WM}EjMC(VGnlXK)) -zi@}j2$Fbk@b_&nLZ=M_o`k+*djEi&Rsdl4dgWPJNUzz>xWxrD*jE)_6*TYe;Dnu2^ -zN%~i`!BrdNc^0LKGxA{v<(RNM+})NZ-@Pagx5Xtj&B;6{hfdCuPd#$c-LF9nF6pM2 -z@HQbOPqsdqD-W7$q7vd>s0Bj~$}@xWXvf?_{vX*cb4RfFEbD&gc*L3U=aPHz#V2_O8&%R!HO9X^$^zW-gj4= -z4t7CJ!mcMa$Es@;QAe9!TQAjh@0x|JFp{n9#ns9&4{-)s-%DyLTxqtIx_31#G~qfC -z>|e86Q0u01@&X=~xw$H_=&}d*rl`@6gO?6>ht+DSK3Fkkh!69(S&FD?-=AX*JDuB4C19J$5 -zdrq7WSS9{XdkyN5;D-S##0Jotd4iJwtHrH=Lm8aF(k}tLmgP5#r9Xw6^4~N3-w;EF8hYeXy&-Du%Q03>FS!;m6u|^aZOpGH1*60o;cPA0|=>ws}5C -z95zDxRfuEDbuFhe7@79J$|KlY@PO3i+tTR{+C}H@=|@78$iTq!V|H -zFjxkR8)_k`>lhCjov-5^ByaIzKBz40OMhlmQ^1)?46bMJUgR3X;42I^qg7kQZxN<@ -z^J*Y@(HqY@1>C~E-?1T4DMlfOwF<(X2G#m_wfGC@#xpvy6)DB>$TN>|uL`h6%)rX4 -zRV+tXB~D_T`4nMJ9E}pMV(Cg)Iz70)mcfSrt3@-)?qu+v0c*rI#Ah*hA4~rh;`152 -zo25Sp{pK|WZ)fzyDCtfH|B2B*jQ15V_!Soa1mgEHnD$tx#p{Uw0p(r?%aTeA!`mEy -zvH)>n3*zztWdc%)@km(;Xayj(_$?^E0JId4LVO~i57tB4bCj`Ouq%hL;lrY@&v;dzRLa=L*Fxa(380cCd1iGFT^sbdcKUby@ -z;CjQdfm?(}#QgqSdfKJcW~Sb0$Gc2hZ|`LXcd2UUUkDq!EEEjfTiB%@s?=g%ihhg)t?O%^6JV+L8kE5!NeJs#=lR@~eO36mF}W)iG! -zGGTYY5(h8ZunE096p{_BA9e@)r~)RP>4IQ_zIU0UyZX{(FYdAcjc6Y2QU1+Qfn5go -z*tiLDodLb;<9UL^BL#K}Osc^h)ubKq!H~@@XqS$;&@}J`71F&-vUfsLyRMo8cnX8B -zL)Z~)DUKi9|7gLSW8}t3b*knXyUNlkDWJ=wICya%?nTz%E_=Dcc9HF4N!ogt3*Bl9 -zd25gC5VQqX^vN>t?#ye+sY+Do`V&i;k!ocCTpCZxTsBS!~IF7 -zcj`Uxkw7Wmq606$8bu%fSvl6EgNLJJ~o{*eV(G- -z)wgJaeMiD6*io>XTv(CPuZTA~<#D5H_jTD&jKJp}(XM%}I%wvDnuaLQ*RlqRPf -zF&TGqw3{5@PwJ(mcE`{as>oI;lI_~UJzu$G`@P`)3|3n08+7VPE!LrbI(S`Ke^YpU -zHqIDrxt`ChPRx#16=f%8C#Z`|HpT18*Q=!Q9$ksvG_+o~d-yK0h>X|`4?{_mPn1z2P{+?@HI -zI{)2TY9$dCcjoavN&!V-z!YReSd -zLc1;%JNhlw#&Zw7BY!QtBiC4xn*Oko_RE)Nyn_|IJUK7=JW}L^D=y}-v`I~>4BFd) -z5mTWn8)*9I8ZfZ+m%6u$By*pU^Au>2fvU(EvI%pwGjJ|WdcOJ`&H;ssb+pgD$U+jq -z72H?Ai9EMaewg#Zzjai*s{ud4(dwvL+}IT!e;&Q$xU`__Jo=2aamC!Cbgk`Gtegcd -zgI_y6)slEmE+NmR!xGG6#2x$g@CgeO!gX!FyD2w`IYqpE*x#n -zUmtm)Ib3_8DSYCYAHv7i{uVy2_M7lASUuR3$%oInU;^c?^+V1aZQi+l#06{PkU*^5 -zVeiOD=p9d|PSF1N>^2u*ZyI3WIqElK5l5*;Up(5pd%Xg`@2nSCxgvYYK_!aE -zSVwnVZjK#*TfM%86{jyzg)W3Plx?BV205PoeP2PLg~kJNf^Y!0P9`H%D0uL@1Mn`v -zjLW;%8`1TZY~@tV|I8Ma&b76=4>oIz<`HvkpGfz# -zd+V_ePBh|djN_zi-I^=kv(?*zXLj~(!MH~&)g!$u>&k*nf4pi)?{A{J%J<2-h<&oZ -zfp2zZ@(mpdk~YS5n9|S69l}Xj#v=;2L)~yvZlcpB_{8&CoWh}VbkI7`x{`dY -z>x*`M6K6L$G_{Zm1w{$9fVq&L@yi*~1>5k5i|%afgQ3|$DEQ9(aU*A3Z}MwM=5ecU -zL6FT4H=SOWR%4a;Us8RWwefUXjjYG4f;EgbZ$F)%LpB(NVNdILVW{}^ceHwibx;}W -zu(-wDbd_d+Wsp!7@cJ^`T^uzG7>~4ot&;!X7Ttus8P)$PW^r|mT&#{jtN+3M1Mo>r -zYciErvF;|nuil6=GnCWJc72Jp@z*HHrNNmLJ5D8~TDIea5+9CR293a=_ofQx<$R03 -zahNly>EV@6IL~91k{?}T9O-<*Nfxo2?oUNs32Ap9%cmmanyMd)6Gti!BJ8cXiS5OEZZ9$`DluZu31A=^3rSzV$r0 -z2D;-(JfCB=^&js11|D~2Q7E^;l#YHGgFBTsu>Rks7gZXxz*?o@j60(Rdf*0?E5dfh -zolfCYZ<&5*o2pfu=b$SJk!>0}Da(O+eoMKw-}(I*?>EQ~SgxhhFMX2X6M;k=Q2wAwx -z+m2oB-geA2_-h`PM`yq;7YLe!X^h}IPgDW}0Y`ov{iS$wHK;eX2 -z-vo=7mf{|W3vwO83Lf1ecW9BzozqNh<6Bu@g1uX5beFI~e6BMXHC~q)P-JppH7A}V -zhU3z?_KXsxEtuWHHLPTK{N@F7wbFU)S27-#?#FEOjApNcGyEOxnXC{yqv;;JA+?+d -zcdc52Tzz*6B`2h@kW~5>^(&&2xgP1UcA`<$2JGfSiHdVAKz(`d0<>Vp-Gtw}{%|iE8_;6{BH^!!TnGOANt`X?B=!(rR0~To#-NjT-Qf1cj*z`-0WB -z;%sKNFsJ#;B>dL05|^@42m~924U@?O6u31Q5KYFc94Z3FhL1kJl<|D8|UCn -z2kc}O^nU4E>`S%ScTuL#<&NRGx`gK{@V_o7m%D=hD+6-5Vtg-sLjnF%0DHfMGcT{z -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 -zm&V%251^N`9Ylf+MIs0#1lUFVsIZm -zhBptq0RInm&fm}6|3Vhl+(oXy?0-RtGemx7oX-(>LFEd@sS{q{T$~VqHNGEaycRpC -zZh!NJ6zx=gtn$KrkWXj_leIAb>t|Z*6*S;qRhR6;Q(S@k0^Y2$O)FC+s^W(^B=?*K -zl7WD&nErs8v*Mxid}^HN)7kuS!s!!tbYoin$hh$3i=8_)%JZgt@_t~#`pGs6wTGdv -zZH-meJ^7kC{LLyG)+`n~@%>z_?BsZivwd*4iiCDW?+n1~_9Cni0ennJ0L$4QwHpwj -zH||>L-QQe`IMQyGFslG!U<=ToEL^DL|6%XVJR5fB~dPA8-rvXO*Mov}k!5y!ANBIpbd7f@$R*n=QZQE>E`2`sw#poZVRc$V;$lq|zJfNoJk13Ui$vhS!STktZp|*(@Qyg$*5NiGVGe6r2j!>q$YL -zF6P7u*F)HM7RDXkDWvSZ^5j$hIzA5Lg^S&pv0rY$$dul)pXs4XI!M8J4?WiMu<~2s -zVnYej5RNIzk7=WKW8;^~Dm -zJA*OK#d;yH$Gu3gFsqUL5%8ChKShWucJ(i2Zc}l6(cDE==nY7&3fBiNsa!Og%XP+z -za?*FBv#|l(3ddp4_)|F0U`BxBBS)g+xrVbZ*)qKB8ew??I#bYP!@ZCr&;wblzIFc@NY*%S5FA^I8ia1& -z>v{MRdw#qFB`^u=vMixH&J{^lB1`EM0_76$ydIG7F7T2?8P$3;jy2$mvKRJx{&*9{tp9?s39HRPyJ)X+xTR;NSAMjUp6`Y}*oD(W -zEyYe#V~@-p*o9kT+Bo$ir5TnjbSZkA`GppIq`?vd-t3h>?-YhHcc3NJ62WaQEJJ&3 -zj?yvWmGAVc#Wmq{K9gn&9r7~=qZ)%O9rBa|#Z#fv1UnXNHR(+z4xrd>|3V0f=qhLj1EY5Bkr8j6T -zx3-u)FMEPL#!USmEjas4F(e^V=yZ?Hh_m+4Iw7BYS+_Z0)28$h$NND}&_TOJXH?Ur -z+?4LTmaflndK=^Z8}#-N%#n}c+`|dQkhJTP?ylgLplQt)rLeCqF_v~QjENW#V58SS -zqdhzP#={T4@$egOJj`^ga!_XRo*Avoh856-Ar{L*oh87bcsef4Xmyny0XE6_3hYRV -z_4k>PI6caO`@FdtHUJ>gy&U`E -zJaBiRb+M+y^zy2gAt@x-q_RXu+SQ%{w8I#7cCA>OHciL3t2DXu=nFP`KEWy@X8)E8 -zR(DaeXHDCd9BLD_UXx`jcxX#ULSqK3@ZfxQ2Q;Rxn=CIO^uvy6IMWn@P)mn;!gphO -z%;7*w7TPgvG+z&D3Ny|-w>|^f)mxy2TWmtgKXlY(kd^{HzYcu`tDv^H#U1KS_fW2L -zL}5oT9=$n+CQB*GTh!sj31qPn56=YCptR49oII+v0PYr+BTop@{*fOqPYfaz9F)CFJmTEFE^dGnUsTt;2@r6#hKE<9tyiP6_oR -z%^`6u*;p+%Doi*&SZquUR-$o$)FAS0E`Y(=J7gx}8 -zU3NjQb@Lo&9D(bC){Cua(0i?8?xsj%>No80%iwKZxE*l2;rux$%#3|{ok)Fid7jct#-#DZg>m;sN#(Jmj}^v@t<1b)`uT;%y!!mGSfO1qn(jG* -zlO@E*uL39V)e+a6WI3fU!)Wx&e|ta1Ed)VLQN}-$ZhevgUyR9=?>B{W7YVH!anfsp -zNxBq=ySb!G0|n{QAQ60Yw1AUdh;g07+d`|$TML>}$}eFPn%-NEkZ20gQj~B!$CMa$ -z`k8Up#Y-Ot3SaazZot{qxr>5q8=sk89#r0c&D=Gs%a4^u#9_a|baK@utmxd0UQvx+ -z(aZR2H*w3Wo=n+fN#pIV<+`z;dFScCRIA}jd%*zx9bcR;+T_HT@a1XeaaaRB<2;RA -z<_1Q6dA{&P*5gZ)B^kYC*L72)iT9O;>+kIZmv&?HiWTt7Vn3Jf>2wzzkZo9(RXkZ9 -zw!vLAG-KFwW^9-HVQj(Kf6p-VXs_%7FX?R@pE6 -zR2neS(z-?E^~lBn#@_3DZ|uuQRd)C!#?*4OrynvZSts1XqR3{#(Kt(TIIYJ@j%a>P -zxC1(+#zg}fb(aimw-lpGo>O2~h{B`sY`SXX&yjc@0X|0K^#S=e -z*tLIcS1tB4Onc5?w4Pf~)4+rwrUS4mO*y8vNZ|NG9{s?I{U-tKK)>5_<%$D)+6F!F -z3cEf3zGBjRG4OqVMQKvw2EymQ(yaLm@SVC+i=Ba0cDpq+lQbMcG9{d)C%uqh=!FDh -z{(VRmud6%VHU8B-cKFb6kwq=5WXCWjQCVBD4wEp6IbL-%JJSlP(xX26-f^d}zn>Y_ -zrG&8+I0tcH<_A`*<5lYi10RWrZIuL@wH5Ygdb8F;crz)+x!Y4jIE2VXhUZWA6i+RM -z&cYYi^VC`P<6B|0d+BK{>kQdgAZ;Y*#9&o!RHhCT9F-YRC#)ZdeGL)6BQvD+BRLfp -zU^VWZ<0Jg~4zAc^wBFYGyH1y;jc_au>(?7#9}zOF=^gCyutX{a466U>v7xwk&gsfLS1Naj5$PdVUq1V2FKlRjh -zBo4^o{Ck|fqnfYrK9R|W4Yod!8Q`dG&|3yuXS8i8J|HWaoO9lFH&zg~l(ry5Ylea|Q;mV!CCFzoYW -zfw%`N*gXsB#wo!Gl0|>=!HmG|!o>=K()UC985ue}wO%$f1>$By3hm*M;sST*E(Ia) -zAkSz=2EO=L_~LyO=psXQTrBom?6$5=?*TdD8R#I_B?ccC69SJ1ZlB0;{poU0lVm(^ -z?Ml5CdcHW}h|`gQxMzj(+mHOtJ9Ib|ssB;RnB$vp(tB*LP3gUmdK6E+^)l5kkw0&~ -zoPg)y{P}t0)C=#k_@UFjl)v?&)Nzp1vT!B^?j^V_aIa)lDs5Q?%a`(*Yj1B*x+()h5H?vLMEugd2_aHUaH$+l#gA -zZfbvjs$rY)eDS4Pb}#&SU(~SQ!ykn3S5DQiKfu+VlUVr=l`Ipezf)Q)_* -zbWNUBIFIjc?AcBCDUjdU?fc_*yU-5s0DmKbn$((Qs@;~&D$V`8S{?>UqZ%=(gwb#)hpVs!3o8*@cLw5`D -zs$N!@p~;hia&?)K!Vc^f>o35A -zMsXhW7&hQ}Wtc2mr~w6fothL};B4%JIoL1oXgR_ISB -z7}qceK_Y -zfOB(k&;-?IbjV|18A8m)@mxgjckP84Rl~vAAbGozuB*W_1I--?dN6 -z?T6roov4hS)1h~H18dFd`NtI4Bf;)2S<(?8i~Lo7$!mmNolvxbgR%m9HlZ1zyggjL -zfjug|-}mC9A}d2al$S88mK}dYWOMQS9-xiF=8441%zErRq#7b%Z)T&VN&YR@9!SNm -zTq=6$@YWN`5Pe!~|LKq*q^r1h4to>mBTaJE4K^em_u)XR*Y&y;tA2GuZM0j5RUu7_ -z(}>-&2$XK*4as6{ay!D&CjR94M_Yhpi!H6m;H1;V9r7m3_M7DSytk>R7EeA}%YN0j -zidBNfX7s7A@w^e`rB*Apt~eW!VQ|u$zq-EFX=^n8%Gl_3{0TO{p)s=5?bz!4ljjXQ -z*W2nHC^P1mL-beWyU@y;uq=a)E#_?3N@DH!h_zT&0bbvJgdu9RC^=NUr){MWw -z22E?s-wc-f4(&*-VvTTH;ncnnX=su~Kb<1uc6*+e+0b~a5c{FBA77>4bhJq59(ZAY -ztRdZPjfIsMRb#JrMjw17pT^!n`FEWgn|f-!AOU)^@8VP}Yn=`aPE|kfU7U)g9+22U -z@=g;he|PQY9=fNBHNou|U&TKCzJ^Uly`F`?0Pa0FqE~IBw9*Lc7ESUWu-9%};@fNQ -zkk4u(Ta&y6d+qdYP-Bz4=}_@hqKytUT+4UbA8vv4U`@L`5%&)Yb)z_6!d^&gK4gcf -z#}m5s;OCc2AZekMq>Ay!hujo1o%ZNjAH-gX!5`imd-Qi8^z&;mT-pf0PF{cBlke2} -zHtqKHFstv;_%hw -z_k7eVma(YAwjs_*t73_Gr;bZ3p%WA9t1_0iQkcRqHy -zd?g$H*zx2C0xrJKT(x@l!%A{pKSikfW(wAglgiVteqNqFqviX45}UQbc!;OF|C=ppYachY$Ch>iOa)7Xw7Lw%3ax7ekq_mgc~rN$Yk7 -z;)GsMGiyC_-MAX7)}xK9XdkUNqkXhKd>`!&7Oc&!wt&w-&kXk55^(Zw`guG=YUl(Iv+Amh668BU`LqE2s4ojw|M{ySYx-;yp*+=4Ec$8fqBy3yqr -z=n_YCS#xyF{hTiM--a&zZrOIinssP9e{9ojp7D=kqIB_N+^6*+=8~_reXStwXIf6A -z)^Y;0ma}fBbnz2`=yCj-5lW|MGnL)x!N;lRBu6Xe!eQ~d&=awX)h@P;PL6ApL}AP; -zF}v`!XI#CpM7%VZEi%WZO^V4HIOA$ZNl4l%#2tfW`x{HxrNO$WG+RtFd=#?_)*=Oy -zD+X~T(xt(In0AJ(j(LRM!}+66D17s!g!6b;5|)iz7m=w<1M>A54D+~2{Rg& -z;5$mrIEPwMuE^J2!lltnObciiVz;dlk_b2DbR_cJs)5Ptb{-oT8IxT>Z)j;My3!nr -zJXhgQQ>msAFTN)TN!#F4@q8M2u9DJxGBCU9Gn9}@T3;nyd=I*Ol%{{$IWXNjX3SB> -zn(U1OGlvT#2Yww#>+h{XKkPJo1lca`j4(EQ)Wzd0p3*(kI9%|hhyrK#%IBbeAIa1F -z`*;tmuZyrwMYgGEA70}7@CW5toBA`S#nhnRZ-TX7+zM!wVAVX#4ZF;t)#)KEcQp1=#DDIcB79bj -zdl%_ezUR|hkH3)~*d7qm1LC;!iK9;kL-} -zmYwqY8w(%CXjk*p9%+5hW*sc?2dodn{@csYzr!69Z;}>xU;{fec#pVVzZq$G+(5*M -zh->f$Aa2~A_{pX@v9%xB#N|_Me>=W3(JA%@<RJ_ -zHaZ_t#$pDtU;dvP!dM1tz%1-`{l#$s^=rfzG)07Fb@=938PyQ -z9RXHID26jmVf0+{e$OwiZn38AN_4~^wfv=8wT5j#-155&_>-UpKKpz -z>EZ4HjkQSE=6*3NvC`{F#-6}5Sa;j}NKlFyIyL7VzlY`1#SZ=SudJJ_-Suo~c9Mm; -zd)<{R -z3_8}(LykNo#D>5&MNCxrVkyq0%uZ(T&B4>u6qk|#mkIX(+zhyqh`c5JTVJk|-X{?M=^sq>~f-Ji{AIgE2=xMt=@5vKmA|a`! -zqGScQ1K?QWZlt^$qi_%C&g}BovCF8#IfA|NKVV@5wzRMsKNb2}Iw8p-(OfKTul)7F -zKxk%2T<2jk+Eg_h%|QlY4!UVS|PTec7KB%V6QbTIkVPBbXCqrDgB?xxOPs&dy -z%{vo}+tVwR`}CE{v&o+x##0KO#MDFQP`}7MeR;Yvq{F!xy^z|xvok?FRf;{6=9CR^ -z2JE@Km(nBSq@2yuysr;xj7SiVlSR4rDaFtYfS>n=9fA}(qjLnGXlzXH-()3(!-{0HwAuIm2LiZShHYh=N_z -zJoR~yQopz%&(}^)FC3A<;z;k4-szqqhkj{fS0EPEQcrXv|f$+QZZO4UpeH`|UW*aQg87Ht(&)}P&@5#$^LjH?4Dx(_q -zvFP0s@-dtytAt&^H0&8yDjj3V{;^lS2kYC9qwWs4FW}yS(~X7wT)?exO>j%$sLv-f -z!m8dF=)4TsFGpgOq25~gOqfep6Xk;4lH~rbIwi#*ZWavvU8Hq62D+cki;AaKEPfHE -zyoi&tgu7c>l<1klgl7D*QOU<~mjzajpnr;0rBqmrtzR7DWUW2XZ(&ysG_E3BF -zJBzQuF3x%RKgtQ5tKFrz&9Cg#wH4b3gtXhv@4N@`Cmq-2iAuZkb!AgPFtk*3#&+91 -ziy}wglPwsBgx26x&%JiCF#Q$Ac^f#V>!H_`9!U>e9wL&ilQ=5oa4*a2N=QCJJN5ln6&uHco6Zcs>bM=I6;7GOsrRST!nM|JN|+z6yN -zAx~DY8Wej{)&s_(z5n4ljWkDS2|%?6ODFCYtLk}Y#F}w2blYJeVM;^jK`Nj9L9#M -zwnRt0b+O~T^-YJ-cF|$CCOYl5#5MJmi`Sg5T)e10`^`n?vo9_(+7lPs?TZ)NbKYEB -zpL22X`JBXjWA5U7d+wY0Skq5h?5xjy(|JBO!f0GL!DwHYb~VagzmPO}VxU!aej)X+ -zXP{eBeCR32z#-Z>9iI*K!0D3X9r-TUq4Qa9q?sB!T#CcZ8@_|>pnqbmF+;>R-SjR! -zLwRM-Kue(e&oN^iM`J$BTIvwS{K^_MdPDk^G;N0 -zhS8}vY>)4k$HN9(0><0n78i68Pk5;xu)~j~2e8L1bO%tc41Aen!V-Y*wy(1<_6f5B -zdcXqg3Aq7dGW4ThAJ;MVh%zfcObl;H0LLzBjTcYITRUG-rUkH_L%HS`P6h|09!kOY -zm^=aF5uCDTJ2)ONXX$|JkDae%R4E5_#PLqZuXk>P?~o4bme3qLAwSc(4t9Fp)xDIV -z##eN1M*LyKQ*3_c#*7b@BbqO_lMQ`UnXB7?6r-X4mW&jScCO2KRSD5i>g>+_&>KeF -zn7b_L&^9z!or~9P_#orW417-}%qu;qHozbe_|=&i8j# -zDM2_J=E6Is&Q}$^?$@XV;T_)jE997}BYKfPw)1i1SxBc*xW8ZLa`=n={;19}_{;qM -z;Las@e_4QvO++oAHy}{?@{!jdlutd* -zI%cDMdOc1haDP*W0L{iA{Y;*EXNPO2G!UHL$XZ2KrA!|?F|JC<49MiM^&L6z-5)TG -z`(Emp3e1oBYr3K1L&X{(@ODw9j@)eU(r3}!IN9<7E3TivX -zp+o~QDyDP4t0N0`jRxtHGsHNm&x#Hc;thH|_t`q=R`)plNM43{9aYLmy}@!;&g|Tv -zOc@Hjq!BZY4+UkHbi_lqaULIQPsocpV&R*Olrvzv>&B!2wg_#tKU@x;mjPA+?uWY! -z7mN06gNsCenTxo3guMrs4!@Do!kvWw0^BI1dl=ycxaIKw1@0BZ!;mohJKSu<*CFg{ -zJim?bdyp<3bw42+I*i>)*ssH&l~6=nPuS&oMVYG~h_*8hQVxZ+!R`~a@Np^6!zJ$O -ztSj7KPD1 -z)jqkA+l<70^VWUxcFe?KWq^_OO@@*D-t1kl|1ZSXFNU3BoV4CP^Q7aD=kBX_XF`WU -zIB!pdcDXTUT&5ka9*%Ti$7P~>QMeqZ6gF4I^%@8-V^rZITl -z&wme^M&r4e|JIt4@qC2;9y2B3`BVPeVlv_R3+#T)>`dK7GSeg87!KPz6i7d~$sRJ4 -zVq!yay4rd~X|>YKrg@fE9_%${5T`+G@d^3JbwfstlG=kpPRNIFW;{E9Zo5se(6@gv -zSz_;CJbETcV#mK1S?S+Jb_o7&PKxZ|Z$!2a@K=EEAJbl4=a;5Qk#-tH))l!&SYHT(}dV3Z^e3r{Jkxun$6Pb*pPqM -zFcTojzz(dl=((=cb@?cE>3g+?oKjbg_Q};)weY2z)<`-JX&B3QBbD0fmLdMnpVGZ0 -zbmv4Q%Daeah*MvYaXURX%E?$8@ZD;q)}lNOo+;j(PZ*FilTK -z)obvrvmB5E_&SSMexI+{&^pV@Y1OO>?h@R$C_m+Ef~-{25RH8AM82uWHyZiAFE4f^ -zKsxG~8E>`nTP`9qqOc~_b;kwt?mDeaAx2|qgwbA_W2`R~jps}CMq?RH8JE#Y$38ho -z(^a6gt8XmTtOI%8^{#pbzl#=k`f1UMonl}7T%2->wG62JU~UZP^_oA;S)_>!WVnwG -zcQqRJc~)Mb8-HLS8}{tP*eO<=Eh2SX<2sf}OAf&<;>n -zv;M?s^CZegI0vUoY~+7nt8rR2=Si-{U|xm~=O&;GIoC;dg)~sV$zp%ZsEHKZG?7L=^MJPhaN6EXwi&Xu$E -z!%#|LJ?YYR={_8g4Uo4@$BkMI;-&|n2F}jZZW;o#W;_C`&Nt+-*G_8MJ|nn}zzzB2 -zwYsJ~un&4ze!jysfNayNI{5<}BDB#2u74ignt4iHovPpzQO{3My*|vWW{q%Deo@VS -z36}%=z -zryFt}PC@sF&KFiJG9~D5k_K!HG+^l-nFDfpM}t=X-W`c#|J%^NQ5q3_Sc1MdcGqH~ -zTcxuYMPo^7i*D`wTBXB_{$8V&`Ndi2J8(1MgxS^1Ij5Qxg9cO=8oxHe&K+(UaK|n3$*9TJ%ZM9ajf1w|!eJ=4^LgS?K@pSE1BJ~rKyi!kAzxD0`^~S -z;LcE0C&Y!@;b?E+25bhYJwmOwy51a*a(=ge}(>%0rxS| -zsQl|C)TM#jyBpJ@w+G9#<+D -zL*mXaGnUwG*`@W%W?X%{q<(p&@}eoyxTVxuvZW-hqEguedlVbFUhF>H{5=w5ma4}U -zpDD2w0Xp{B^Z*81R*|q}Wq`#hlTW9^$8)a9ZCIsO`S0F$aQ7C{W53cI$WN9}DpoZa -z_Q|idQ_FlD62OeMNhLcy*0VL1ltAHCRUf~h=pCm1M)+#1c-I3>`G-)w!zWUjWIt8Dik^vS+SgTnv -zU_Bk90M^_0$%$AYQFY9EFO!&aO*PxG9{Rj5SF;V*YgkyQj*b4XmTfJ?9ZSC>UKxN} -zl5~!5A**3IL&N;!C7OjQN%iO#F|dbmO}^V(j}pZ=u3I_toP@ZXo}s>#NzMCwzM+ -zA2@q84m34F|KHbEwxA@WD?bFf^6}1QC*!*Ec}~)m7skfhNMHWIOwyPC!0LARbmhN+ -zt~^?Usg>`$#GnPOM9FESjX|pk$0`Kb`M`K<2u~d+Q$B^e>sVf40|Qa=yv0KLEgif+ddiR{V+ql4|VuvcQrc%M|4bWY=+&#;!hrorSd4~-$SPqVPObs#;J>iHYyvPu86p?#kwEgn+eNwD*5EVW$>tkj83tR}^eqnBb-nLKuzL$H<0P!Qf&Zh7s+C0=Z%6$~ -zVxe%~JSnk%!Cix+GG}35$15k?usZk27yM(#dD1D@cuWi=!F}=x+)LL0sg6p&*aMlv -z8kYI0)psKo-O+b5zxg%p=Ae6JOrw`<*u025Y4!oYw -zV5MF=>Y5%me5B$n=QXRfxG^;@2`#(xvfY7m`_`gXmcGfVTB{rutBz4k-NvZHtD!TE -z@~Qcop)Y%LK03=p=+sW+IVt?UxFW2ZmW_#ytygj)>lX<_D{zMHJZv5VTDLB`Am5{W -z1K$N`!_!&U?@`x!+(`65)_ML*c6U$63Eql8)fO=EyZNPr@pQQnXOhci&3B%YYjDen -z$#PD1wqL*r^pqBg9~_7K;tY7g%_eh9crR(EXZ2N&^boRS;MqkM<@x! -zM#m8DqcZKmy5t4y7?q9bzd{)Q+0M=p!YR5-P7Rq?%#3&%ay+Kz3So3WV!865;VMym -zmVn*Xou1`w+j+{<-QFcj4yaS?=@n$dp={QLfjeQ(B!QmCV6}hcrX|!WcjJ~I;!3G$ -z-^-u9TZyu+fm6Vn%5rqLNA@^qxI1IF{F%2}87S=J7Se$sXE$u0RVx=5Sxo;U;+rx5 -zEz3#8nf|8-~dyRleuXTIx58hWYV8sU~mcAmY1Jf(sEg7#VBf5ob_P&ge -zk=;Vpd0#}xo!vs7Mh-vl@3vm~!O*iw#Mk@5Kv?TCRJ<#^uPGn#JoaAu$kYo~i{QtJ -zxvy9)O6c@{gtM@e@~=2yF`()G%UPolV*0J}g9$b+(hwR+X;-J$9!9u9jO%$_@;rgE -ze`VS&PsiKeYHxpww{hbIZhQWgV=o2v@yPp#miH0l-4A&mF%@t+?3NRWT4P>QTG@JK -zV5~EvLb(IGhGk>c16C;0`19$N6}WMjLi;~np-iE$oEcZQmA%XS_o9DJ$ -z)*-LUT3(l_EIid^ttM1z)WwjMv0kl-iJ>ez@&0bOy{3<_O7IcRB;$-Z$2Zur8*}4o -zWwJ1(+gJMxA(@=|X&QAu#?EZnn2)eBQlSjztqQ9wvHd}b%_Se;iRvOYO4zx*A7@Cj -zV2|hnWmYUvGzs+Cj$7~P`A!Ynwi_QQvpD_{h<#Cu9j3*uN9_GPb_iluYq7CfY$al| -z1d?hQZqP!hW*zkuUm1XPLwraJ>{C0PYp|KZo0b=LEP^xCyUI>_2a+`UE~Z)z@$zyehR{lfTjA -zlf801=?xqn7zzFg-cEL%_d+fp>Cnt^v; -zFgD2xv>E>k+8mDN-L_xWuvZ_2%_hK)0R_OdfGgpG8zt8HSPh$udQsh!4#@Wir?Jr5 -z7?>HDF`zciLNoAd@}t^FxL3Y|>tXc4JkEu8TCp}m>j!&1yRYEH!>-<$kRgWX;`E9x -zv%gC)PPL9MX|tA<=wgMsi0QC+z%_6lYu}PyjI|5WV}cf%c9SmTRZB4L)@{OWKn%BT -ziBmeTUP`l3%5TT~8um2YH8{#!9cN>Z_p&SWE#^Uw12gS7$YItX^vFg7PW@p{M)twH -zavaUMZJB2x!Fz{Ihc#iyh#hh{LO)bq5+cdP);+jP8<4 -z_R2-j$&|kz?x4ycS;NZn@!dLWSS9E{->YkGQ>{r& -zd*x}EaZ`M0Nm0RqVp~aRuH9M6mgn0SWEa@%3!H@ui}2$tV>!9DoB~_ng0do3Vk;;u -z%U+p-gxx|*i=7LKmoCUHv}Lo0CTGl;JY_b^LtxJGqLLhzWq!b%F^R%Ta~2d8Wfv9Z -zucXJk;-aNxZ0bW<8HUM}(C|P}POgEFZ -zdCTK-0DJ*S4rjJ$0*X*May$h -zG!c23nX@B-tx$DguoXK5S$2vX_rB{j~C3wEMsD#0u=Cl=s-Yd|!>2FKlUkw@{vL -z%+2XQ)TLzw&IR_ee6^^#E6R#(^o4z7w-uI^E=RP_UtCg@v(#QzXe-E_5MRp5RxHR_ -zTDEe5eWg7=cR`t>B)8PDAUa%O -z6sD~04rg&m?lOAJ&*g3KC#|4c_)RULTlm;KG=4QJ)*TO}_s86n-tk}4`(vn&bMmMp -zE6y!(7I6kqnvLdOn3HOXx0j3s1M#7<+o>7`U5ohI4zE}1R%jDQ=1YP`>7!a%2`J_J -zKs<}w!qVIYrTIn0Xp`VsXkBXS@$;arendRbS%zNCdwa3X;FejYBx+pm+Pu3_*OPZFg8!)A)F=HmZ|+k>&jhhq+3t!3e-AsR{&!rxp~wUc$2aF -zJF~AVsa*|};jJBMOI617e^wd)%Sk++|Ff6D3!V98Wh>P$*PWv; -z%q^fni9V=5XRQVNC~H=nqw?=$3<3qdZ$@wB78fop&^i(geO=>P$qGA+7#FH>U7ggQ -z*4HYMe61o$Z53tR-|OCeX(S}RsrBHz;v5Y*npju17zxz6+w!vgBNhr;im`VkT5xV| -zu{LJh9H^3|!%HcB+kO%nE9TqmzB)*BYEU1{EO`1Xf2YEt8TJ#nihH -z>>mu^~tJaR?`;n>e;{R8rUUUg@Z-GY~*;rWVOoJ0LqdsY2L -zzE7n2w3df%gjB@JeIpS%E!yw`Dp5{uewj@z3QyEs0=L^Si$LK`#HW`#3v-H=mp<;J -zUH*?G$K^%K^Dz%`qHA*I=M%vEq_i*YDm!?o+L6IaZx%oq(}KEJ75y9^Uh7<{r>k!H -zHx0?Y@6LHDraHdn*41i%EdBHT;U9%cY|H&0O8strKIM}*f6VE8;aZV?lD=DKR~wyQ -z;6>N&8qcx^E5#_zg~#@#}-;ka7} -z_WCh@y;(RLW9la3`Z$4B({8=FJ9)e0K{b88@5}kT+UvQh#I99od2uPV9%^3xrbHff -z?y(SLfrpDwK1Qt3#peYA2&t5c_>zx|s=z(Q^uHIm{dD!qmp9SXAL^&8KZM#e^`v-v -zyj_*8z_7auR~d!8rQY>$VJS^0O3HF`48(yA2ws|tnKdgZa27IqeooPX?4>28Wvn%V@$`w8J2aJz(N>I#&AF8<{XCe@Icm=`*myp -zhpNOb5VE_x&{AxK&tcT{0&|stnqcqqP5SCzAFU=pV -z!QL9|qrn(J5vlrVu)hZH(BcPa(3fusnjL~NSzui*3yWFDBJztl*?2nqbo(P((I3^7 -z{-}=hM|Gw@qFwhtsssHIZRyXze;J!YmBL>d|7EPNhR~(?=lC+vpbtMPcJrTB0Drtz -zfIwftv;z3?8PwNL5Ygx_jsG(F(ECJw#$5cD$rCiczou$9QI`JX3C(JHjRIZi)dF<+ -z)dCGOY^5`{#zH|gpWSjCpbZkRQ=-x=*o}r0>~5oq~)g; -z0Dfu)^p{3I@`UU65yUu#Zo~Ug@$v#b7o{aGzlg+WnZOBgaCwfpc*aN|R^$2fm}QsQ -zS1h-cs2+cJaFlPB0HQ -zk1!{iN18{OCz;dCS>~DM2h9(e=a^sKu`FPgd4YMNd4~Be^BD73bBcMKIn{i(xzE&T -zQ-@78o2_Pxd8&DuImw)C9&LWZJlFh)d7gQP`C;>Hv)$}6mz!6aadDb?p}EYQXWnAo -zYTjo4qxo%fgZWMKTjoEQ&zrwBe`h{tZZRJ>e`Y>le#d;!+-Tlu-es;gzhZvXywAMf -z++=Pxzh{2m{JHrH^OxqonopQdnopTeo6ng4W_FvuG5^#2FY~|6KbZevzG#j!|8;xb -zcE|RYcAVV)@{V4pXZ7|Z^Xog#Y(KvJtL?Asc<_ync8G5zy^;I|5il7`v5-*tLIz7p -zDqMioSz1Hot3S5I1w_Gu-w15R5`mR&Qyb}be-+qq*t7Tj`2-(OpBf83n%!2Yep^1v -zqtFEf7!SHPD{bIq>P%A2-|iDWlbHW8nZM1K^B~l5kJc``R&cuE9n;k&wG|;>1-0d| -zv3ac2UbKJ)S#1@Jx -zo)D0Cw`b40q6g#8FmsrVv0&>&oJd~sGZ>a|41rSk -zs#{}_*s`C&u#95}mJScRH3l7f;%6{C!7+qLOZMFwLjZIA3+ -zm4s(+jUk+E{}~M1Ifj1Hu3ZK%oZUY{*m+lN2wv2G~?R#%O>ZSM0?ANWA-X4S6OZNpe_PR9&>ZP~Gp!U*t -zg6?VTj^SQ^8K{@u9)sFTn}d%0;?@|bm);(O+DnfF{et%~A04{NK)v+#7}Q?+anQ-9 -zZ(RoJrMJhR_R>EGW%HJCa~XWS^!6CkUiw+kKac#h41|Gt>FqJ7z4S!Tvg})8;Jx(r -z7}Q?+73AGpW1wDodkktXbq78Da(4_9czf{m(%WNDd+B#Uz3#a+2I{4^$DsDoAA(*! -zd20;ROK*=s?WJu$YEfOafV@)dTSH+j*Y3@!5O$b)80Sztb@VDuq+qj>d -z%O)+GUEs{gn2EHM2g*}ycMvKy0}?B`1POIvK;4T~v!z|)6>N#EAbD&Gq#89TZEBX} -zLqC8^4ntWpX7v3{uA6ug&7d3nJn1MV;@xSV<>v<^IouwD%9H*ll%;jYFw>8Lc+%}L -zs66TOQ0BTd2I5J#$Ds10Q=zQ+))Gl{@ -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 -zf%>)5Z^@?>CpnNkG;Ln1{z -zHHJ?_u>tJx6P9oKlhN=ATBJ}NWISzIBl#p{86_zQw4>IF2Zv$$6Z -z@0|tn$kZF)qyBeRtej#b;3Ax7S>cqv%y5>s)Pd+dmsU -zPJ!xv4fOo8(Qr*D=S31FpcX^~erAjng$n*Urx^kr^D}jrhXJrjjF(dog;iF4aO5;z -z_^2t;`}F;Ga!N$qEqy_sqd}?%V4`$vzStUYLDZos3ZbHa4FX&bNz{iWFi`U=%NcWE&9u|@OodLJ~?VXSX0`k#@F -ztCeUh7HZYkVVKC;Bj}qyNJq|MxQ=6n_azqlF0YE%Ln^0~gC#VJR`#w?>lQ=n9^-LR -zwOEs8XF{y-8+VU3Q;g~}GLcd;)fdki=0C$C`yojPl4xI<$vUu-kwl5e2TmqR|55T$-_n-DplMj$~VfH7QUa_;&N)=1D&0N; -zH4@AXQ(2~IWwFB-DEi7trH0<3RtH|{7^c1u6vZ0mQSPi^E`YroLG`9BPCS9XXVj -zvy*6GAo4epe%qFn%f7+urd&0@vhHznwz6-|5(R};6aoaHG2B+84k52-bx>K!YII*> -zNEkGJ6O1l82+d7+PWt_P0=&xzyLk>w6oV!WX2P@JU;(z!ARZTX0$uG*7Fo?21hn$i -zJTPJzkxtil9pdg`QFjP+Y8Tx~s9y)0@w1D%bWY@`QPS@y?hTSuFTb#XHGmoSeGZKs -zpiX3yk!?MRD#T{W@rfg+3aw`&P(M)ziCTC~XstX-?Pbg4y=_TTe8>*k#`SD)X@y7J -z?h#2-FpdrDS?muqxL2XlLfF}d=mSu518V-=(*>$60@s|aMv*iuJgzQXV=Nfh!EN@l -z3v3wJ3^)-lAQ;k>eScuJY%@DPl-04#!psD9z#QUhJqGu$ku4`yRDf9V{$Q{WQFM8j -zaEvuf&ZBIfoL_C6Q!iFPnh}mNH@n{E7!GDkf-YNp_St~gPepx;#Do_1LsqpBb-&QE -z+BkCXu=M5_60 -zRI^&LuoG&fBSqo;=TJZ)n%Su>k;G~BB@s4QBN(~|33Vn+e6r}daUl6_#U0L809tiR}DRK*%4cgLf){y==b-db170k4kC?6WRhsQPS -zmikhA`KR;(fqy}8(N{;Cn4{%$U;zMc^>9K)j{#WBqQ`bozNaf4!%O#!2z3t)b?a{U -z=17rywL(yw*s@0q%nD^<2>GOzJ;HBzGZl3dD2cij0yGd&+jXa(U@d#tmaNbyBG%cO -zC^1;5cKhS9fQ()U<|*q?BfJpxP4|k4p}b;Zn6K0h!v{=^A^}oQvqA8sAk^0I4ilp( -zFu<(^-pLH^chRzV*A`>MavI;!usD$F=z~Y{;Zq#JzgXl#K4BDxb9qpV<+8UpoX15! -zruo#5DyqIATrS58E;LME$`CHMiV0%CNQ{UH`~^{MZfIH5G|d4bgnCah$E(8MhF=&Aj`WbDo=6uHX%&W}chDFhJi#J!nFA8AxPsNr>m?xD -z3zHYp+_3O$WnlUW{$Ah?3==(x!EdmF9mWVj^CDQ^a`0q*`K%CO4EbEV(!vBE&W71W -zssluhEiVA){7Tj)sQ?ln2Gi(X0D&wz8X%NK_eO04S$ZA#^$QRygoE>|TcZbn)7G%I -zfvmwW75VWTB5Jf8v_fDYs$tQC)cUQ5G}D(w4*(dzqVe9WUWj82Sy+v!W(DkZw(3Qp -zP8|(Z*@okc_M)RFvS==j#Gup#@2xS2FA=ds6y80*Qd-Wd(hzkA&qzu^b34k!x5Y5< -zdGT$nuZUG(j^f+Qb+$&ptOwFX47fffKj96zkfmN=(a99Y_VKvhC$zX6#I0x1qnYDm -zFD4!o*}MTvY$V2s@qy<@%RZD*BdW5QMc*Zsw;W|sz7UE)j7RroVd}h1SOYl(q?;y~ -z$;W3e^=QJ+vA8B-jhlt^RYjHbgBW^x`cO+n>W6FdQK=!TFN6i&-=z?>erMF$o<@>S -zsJ#%^=>5DXWq|~=j$$NnYkQX1Hb$Lyh<_7xm*a4DQ}I?%=cy8=QdtrMpjoRVsN@ku7v^J6}4)VQ`6qI -z`u#l5yeA8_w)eN>4~CgD%QMeB^KA3Xyr{3JY1xCoyw)uBh<%x93*2g=xQj0CH}um< -zueLtx5M@$cZuX`8P<1#TQeE# -z_D2CBj5BWHllPxlhf%oy4YO~F-G(Rlw$mpytM~uT_?EaUph(}hJ?^GN>l>*gOj0Mm -zjbsENVN`daNT+sofhn(XvLv^~X@=>P)>v4+O-+o#Rd%3n0}{>0I^(7fk#=D?3JlPd -zWQ$X)?PzeLiCP*2h;h@G+M4Xm8Yg%_NU^)7bWMXg8aP?gmvxVB$>v)YS<4)Ee1B

aav3`R||D_)Wg}G*Wf+TI@bs>obM!@c5)C( -zsjq!KyJMLDNMn{IlnZ<(2$JWj;^LblHT@GVmc&fB*p4>`(*MN7#gO*7 -z>nEWL+x;+cVI<=eXH8{R!Bt9;Zb?eJ7y2|kb7KHP`KNE8Crv9MeNcgyPLZsdfG+HLWW7&uU})(rmK^E23ua6LY1Hp2DV -zCj*591wU{eyVPeo*E7F#9;~+`=rqYe?CjfWi_aV2D8Xn+jm2O?YNv|p3Ox&O-MV_u -z&e2{d)ctU?srr>v@mUX@SLju-v&H`@vt0w55o=IASiW_xL38x26N^uH&*97mhrWHK -zNvv%*zQrs+*Qr8_Up!_d;sm;st(KsHbt_|?`5scpd_UG<^YOvsg)4jrbrK4BNHs^_ -zZLa@U;Kdr6zS~_hX{ofcj#eDWn?zZ-yrL;gJ8`@Ec9=!?jxQ{{(V%ti;Cxw}zB7J+Y56u9qX0j0)DKw>fOr6&r7oz$S#OxaM@*ub -zjoxmm+DZiovBxqp)r`o<(wdxbRMn)L!gl@5OmJ$|q6G!JqAgd-8Vy}P5n2-Gkxn{x -zn$w`i5bg@Ln(uLPV#n!0j_(N|lY<;fJqIYu`^Y4QzXxyCD!z}UorAKlx#GqzqJKcl)AdIrArt+WB;7jG%KN*v_tTwYv`xHYng%{^#6TjA}N9m3w -z)RP~$TQ^YPZs9g^E>mY|u8q%wgfB^x~Ca!yG*s>sBA;`-RC -zrzU=TtW$~#$Kjqou8@^(bs8&H4Y=xUbH%=m#$RNPOlUC&-f=}}_=mzq`-^H6CpU2j -zVpk20#DopWl6TDI+CY1WzGM3wW)c(DUs7UKmEKek?V2sb7rbLU^!cobU!xMizs40C -zmc*wCeTMv#H`XLrR32lA_(>WWnd#@5)0U5W9d -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 -zOh%odFMDYUlM8IG`tiP@1%&A@b{f>&eX!k -zW@@1*X5k;ORI8omY@cE2WwpD4?@h*r8Dx{Bk`9p>p9b^Y$D -z7PG8nXbCp+KE`va86jNfY|??mT52ifnw%7Jueag~$%S6h+>we!hTLr=8P*ODukQu5 -z-BlF!g!&fD&Z_i#1ti+-as7MGFyU&Vxj0nj{KJLpJ-Dom0Sn!{jj45s{w3{)-xw!0Srr;Jx<4n1qv-r>z -z$zfA8b|frkA?WNANWPTcmQ=`Ztb5^5IfK?Hbq5;{l}dYw7MZHDoo3h+XHUgNrp532 -zD#}gx5sf4X_+XSV&!-5`Wv~aCOrl%=>-(#=dN_EuzAr9B3>9aQM}(2eX78x -z1xR+9a{}N+?+QskiDJomRgmbN+kGX1!EBZ9?`_0;*Ce4lB3`lpd+&0?Zzq>6SN(I~ -zG~Bgr2>^QOSaG5`5?^OlSQg8H44l^Y;$hD1XPLCVlJl=8M_@tP -z0F#*9WM&+O7too_tv{?}`kRPgDX?;o1-@1nJnaO#;I+ucqb6+#Ra(D%|3o-StHG;6 -zc*&RV4}teU6SZzgh@qD8xbn5tv@lQ!)M_tlF{~5rr&}g%gvSyXc9id&VolB!=AZtJ -za-n4UJk`mb9b(cNY?5}W1>#gob+wGXDOob#DdIr8;KvrSi5Mg9(b6B=niHM;SNZKu -z+shqJhUBE{4at+sXui-b_^~CTbDYc`ze(2%{oTJsWds}l`OG;^4O@m@u;%wdHZ_O% -zkYz35EDOzYn6U=uI`~?(OF-qV+k^@v@LH%K`!!iqN7a$SAYn`^Ksg&-E>*Y916iRgU`d?S%tb?u$tNc< -z`Rur=LyZT{sU=x;;PP7A+5I%Ihi#WaOLhbf+gKGYgxFPCXqN09ojjRnP!iav9K@Z& -zVcVqxQwMR+T!W(2br6@fgg*5kP6RtgZys}$qqkA^%nkaKUii?XAmr{F;iht+_Ekjt -z0afOhbHuHze0Rg43ORaf>OPOV`v&1)Qh0M^z9fRdroVb9x2uUUVk0mWq<5%dgr8YQ -zG6``0!8L{_4D{-+m#l;qhDruy3S~2klRH|YVx1sWB9hTvKLg54xw{cx*9puVQ{6|b| -znm=>6B<@<9q^ms^$lNJ~K`&YRut#7zP*Iv4=r8m#(!^KWNq=bv`hvpACcfS)BzK94 -zid1?nla`m^2lq#m$Xrw@K9m#V1l6Suq|!tn*Jo_MueFI|sen*Pjc@1#k1D{mVt)rm#M -zVSu0B*)Ggq__fABwsOhYc{Is+RiZ}EtJ;t&1;4P6&C=D3%%Yb;eWnA%SvUQ$gew_k -z#Y8$e!^_kg!@VA-bgR3fY>0`BcQBR-lSE~7lNVLHfxQ$?63bg+C)shC2UF}qE#dqc -zE$r-FSWEMC!S#{ZV&|B{Tp%h(Na1cLxf$-(PHx~1v+!*SYOC_w(;aV7 -zSvZvz-uj7ImY%8HG_p{+X=I^xmeEgWLc-H^phfPA`x)pz^|y3y8L`~ZDvO8?BZ*w+ -zWQba?o;e+1YPD@=$6MVi$21%1j8{QK -zXOGl69h|tw8u7bD@VnV|JKPXzS_JPh`scYM1E+oY!7CO$obgHF4!lhe3a4z6{8EP< -z8csEDLS>9Rq%tnDNee?yc&?pe+TB)BXWBk=f_Cny&2^{|-;BCbN~(ouk9KY~i(WeY -z=m$TBc5hgJ5Va7~ME!1ruFp4%sPe%bPG4|FJVQhhSh`$q-3rleNM1FcKt(9haO?Yj -z*8j!>{+AxOx>Ng{hYT+?L$N7!Vm=Atk38gtWGXv7Vz3S5IB$-LJmB`jZ5R2OcB`jB0Rw^ZYd{KjJUQOIwl)2~q`E>MI&WlFpp0|BIZ((_!J*_sSuKUYCcBYB1 -zvkhKR+CBFb82m_q(>)7>NZ~ZUYzw+xov9W>%BAYa -z`x+`A;lUX7(2-m8ub#P;4 -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 -zlRX=QV}4q>70KCHbqK;g(nz3Y`-t05iP -zjgAfJu&8Trf_sT^`MdFWvRZb)p=tR)TScFeV;w>!8#Z&+YR;VmS={xqRn|$4t71BA -zpRfoU)9I~4D@@?1$!>LBCPq@NiG3Dut2uH(j>J7#MMZW0&eB&VDKKcnU;&bSI>_^F7APq;Q}yQUY^$>;)x-Eg4b -z4yF=JPM>Ewu;$q^k}Q|P)uvPq&^II{hZ;J40bRSvAK_jE2-+=StNm<`RM~rQYw8mp -ziTLZuDF7IML#oJcojra#l$=s(UXA}wx=zI3N=_L^?rocUH#y}ra_`yP2gxa?ll#!- -zKGqq@90a6Qdr2fzsdOtL0V{)do$4V=Y}jwEe}`kM;5T1<*SV|Gm1MOhtiw9_xQYND -zdygb!6a1KxLtMY-++8_dns>F6UT6o^%~RBsZ*l!J&wgKWVjOfucz;!&-R;_G_X_Ql -zCD2Zdb1w(&eoZfS#b_X$=nD@P+x%~4^F?PmDPsSE+!%6HX_Bc3n_*%e5lNu;0d-8c -zv9}@2Tg`OTCZhghhi%Qb{@00Vn>#)^BVnJady52oN&-G50iTi(1Sd&>P5Rq}$4@8( -zBq&5+X**6wUw((P;m}4`bPXka3hDE0nllyY<$pOs!a18KxwV&3|Brj&u`1+d3M99w -zY@dmii1h7NwXMRAgWE($IUFfdvuhp94ri0SQ5?nesz7D@woPEv -zcE59`=xj=TU4z&kaZIRE+A_h`n&KkupUNGXc)1UrC5N*uOHcte8XhY|@cB5`ZV{AU -zr*}}J*D+pmVaZhjlIwk2r-c`jt(%ZUK9!@r{7{p&AEsb&@DoMXxbo%9=#5T;J*-hR -zd!U77kbD}_cM!wjsmpzxTUFOszD0BmF(WXqPGZ|*Y@O83-#zR3fsnGhpe7vwn0H&wZH@{I-!?D-X}h -zZ<(y^5<)ugS{|P5o;|EP7V_&p@=jvJ`QQdP -zBjS}m+2{y;tleQHhzWhmQiWTT?>Ml-IWek!9a!#h`d&<*waArpQ(EiXToKv(dC1nh -z&*|6ew_Ef#USxn!s__=Od&`kIJZX~eQ;|$BZS;~KptH!{O+jxwU_n{nlZzF>j`Hm| -zY&cPQln)2wCm#uz%U>-Zr?aJ(VOC(TU|&4G|6;Zh>l -zoy(XXJPX;#+I9hmA5*948OvgvN1vzNI^!(pTK9nLKW!eH#OSvg=TZ_r1U8pKR=R;C -zWD4p?P!5C -zzBI8g301;)RWw)2HOCkiLb$FdRhWZTVLSpSWL37L=mow@C=b3M+6_>z1BoNe2RPPE -z;W2n};-=`Gu=#nW$gU -zTG#!jUuUHS6D#`A#Lkn4rOL~hgGr3fjJJP8q$7yH1E{-c7 -z(~VtgyS_|51#8xG-G*=D#;nB`n~zeO#a98`Cf@mq%@f+CPdnax5pLuxMdsPUDvp1H -zH1G=5r5EGoo^*Ys6Wj?u+XM6X#Kf+0>#Ly&``f6ccDC4KQjDUib4VLhM-UnJ?{*X7~rMT4;{a)Ejgy$rNO*XL`%@LB~ -znAqsjr(cMDK$71W@gDWd$*h^5cjTWR&okrV>3w`GDuHQW$O43$D?D?aLRu+y; -zDFaEB*k(5<+v%sSe9bt9lcbn~0Q*VaWh1>R7Kl`Hi;4T8y3X*`IQ02A@oyfnnBc%r -zF#+(mn<7jM!aaqOaS!&%4wF)gMnZ_Q6Y<7VHeQPe~GXdB8IPrzM -zMhbz!KT~)iTnF+thqGQbg*@ile9-tFwxscl#V!#OllBjq@oV-b_&g{_uCqJkwDaQ; -zMGsh_wK9(17Efv#G~+pHHubJKtmpv=Ymfkedd6b|HQ0T`evnuPQGXyJ`K(6l6~~$M -zGtgtZK1gnMP_g;KWDC@!pe#-*PGexh0dF)$nzyCqz;H>{aH)DCv -zM4r;Z2YMI&N(*1?UHEG){IqxBehZnt@nT}Vf77nbsNRLzwVBboP`fr)_b%KInW`KM -z?L=<=g`D18Z!4Bx=W8hT6T@;&GU?J{>Cgpz}B -z;}g{{1%!y)2PK?E+noXr$>C#W!b*;5#|N@IozJq&ipoHF`yO86|LD6jV>;WMJidU^ -z>9R>U29$x~6(4=~nmkpBW%uJ8%gJMH1C=`iwwHcgy;SfJa9>k(?_`rRQ2Ly`!G2tf -z+~4&%`@w;5DeXm|{_G?tQ{dd;mP;SJ(wH+|xp3ZYuQ`1Nq|d~# -zb*8w`BU;-hT}z+iZJ#JLMf(8PIYkyn?vpeHbG}94<1&XOFoA2v3uT#f8z&ce-9w~c -z5D_WknFr5vLolnH^K38T<6K)g`aDpujzXSkU>VO9kh-8g58m?zAFsE}gXxKAUs_n4d-R5-w0uA(QWhTjef3gn%P92EIt;ocOI*taQi2!nx%=iI1rZ1jx` -zbfY%dxhXlbMs}(YpFHQ8!y^!~f%qcHp@w-Ink<#`$qg>ll~P#IFz>;&bhgywthH+^ -zG_l&ClRON5ODz5?Jkxs52n -zIk#C9+$`YE`D`2CjR&o_(F^)K_CxA4u(_}lab`~g#igFJ4Op5#zlNhe)^CGNX4>SM -zZL(rAtmx2ryFsgPl++xm53TBALF`nT&uo*#^^$8eXKWI-g<&tZL4WhT)Mla9uM;5= -zAa+1{6#aU&iQEa2b@ZxX6t?R=n%R!#ADH*-K$t(5K|hef%A7}mQ)$o>e1bYA4J_de -zzeI91CyNk7DteBQlx;;j?Yi&M212GUsFslP0yH58vEcLKYo28zSSsgHk(_7k=6cNH -zg%exhQZGQsa2sj&p7vS%q4p`;_f=r|P!a${ePvOb#px^R>&#bWM!JEdYrT?hBB`#~ -z%p*9R -zGcrkdB*`A;gNYhvr^)4w7-pNB=gN#o1R*4%dF1Bk2ffB*iVsOX=!HKyrMl-vh4fRZ -zdu~kjUso;{F5F`(wzF^8&iZ~;XZ?G1HlSB$L%m^zr2fI&2Y=1n2{G(BcWXw(F=fSi -zVQrb_Fx`|Wf})CXOEOVB#1uWF8!zwrlnv|YXP(j~7A?A))uCmHMQIZO7LfyOlBaF5 -z*Crp}*>mPx@t5APh>b2gwTC&L`%||LE}Z*<7@<}X45nXoiAX~^meWW%w7vH%Ub|vMP=6T8CTe@=l=6` -z_}jZYLF5=HrcSPvFQZ@>C=a*VyemwQ8ZVIzgMWt@;a}k -z0N;bIR~L`q8+b&+l$zXi;!Le+=TVWTF0VPbhpqiqa^G%jl6O1j{ah!Vk*WMe4RCds -zHmEvcX_u>1vWqu)G;f#jW^ZqLg-Y|1;P=xYe9y*Gi`+44Ph -zLBSIiq{q5J>Skn*_X1*XF8~E3srfY^J@YjnVfgjrJ-wGo7XX5`yPulaw_m6OCHGAW -z_3JEEH|h@dg6vffYP*cqSCadt*T5?zjE!fh(?pVpHY)F|=O#I~M;a#W2=80Gywi=B -zF5gVC -zF46cws#NWqCWYc6l^kp>FJC#)K^RieEuE!5=QN(*nq3EHRUU5TA~aQ$D8kqB8dUkB -zxnF)O(-q4rQ=Kobh^OjaHhDxrp~mDLPfe0C7@&Gimh8MDc}h`N1GMx!0>owXB6G!| -z-(Qd{lVtVr=XcL{wK_PnT8@q)aZE7sB}=ePlx$~mC*dC}PyA8HQswdrFu^s5ir-&!;2oI*x8A%tcmUc47h-`)M2P+E -zkD6pJb6WJv8-fra8#&vRuh5}?8e>aY7r&uKpRpuy(>z+e$$hKyp>qVqEe+AR245|lfV)dTvEj0 -z5YKGzaRBe_4R3Ga;1gq6LFyX8cFl6gF4h@E9yJ;#B(U -zC;i<=ar5+B4I&%mqquqZIsZ(_&-)trmv@Z(OHD;Q@_G9#EKhiBTbXL!FMF}klo-_I -zk6D3|_u4T6MMOv*aifB>r!8GSZK?ce*N;Y>_d7e#3%v&VuU-Q^-;;RWxonpnGcm=(n# -zxlnhcIFh{Q$rN2D$gO(Pv=pbCd!C?O2v+HJruJsu$9mF~_pxG-%ZuE;w;+itSM@CK -zGnHK+spt_?R@sI3OoLME^i}NskjeX!qm3qW%9mQ$W(!aG66WvYH!W=8W*E=?JS0HP;cA -z!e{zq>#%)lGyBxONzbKAQxjLLIi;y2ksI -zxJ@z;7ystnnsHD@XiT -z@vx+iH4;%$i}>s_4kg&-T}I-%HXIGhqo>VB!-YBmZxHRS%=g}$b`A{o1@Hp&Imdgv -zEp;J8cott3`z}<_htRJw-ZWHKu3LJuxr@hgmfy^yKC^^pp`36$>a5@i94_T9+1z}z -z5Av^K9$kBnL+Y@`#k7={X(*Hzuf0NdD0A;KN6*Tka(S2Is`>VHE207=&~2W5@(OFI -za(t4dT0z*`SmKO%&htl?P-UGdnJ35Ta!&(Kl-p;PX`xCv{$;zko?gc -zucoehzOlbuV%IN)ND+g4NQzIGJWE_&>U&c1358P^LWA<5PqT#2O2wmu^`#5#N^o^2 -z<4s2s;HaJ7PQ8-fkc|RFE^!ccJU>bQK?fgk+ynb%-Q~g8k_CL-?OAhRzE&x)re%Q@ -ze5Eyx_qo>=Zd)PM|>bQ`DxQf?5Z{c;PSKW?NoAetiebzE}pL_#I-ac*R -zV=ngk3m?u2_gU+q)p^|(CMsT$NW+xJ6P%s87I57Tu$!1&Y{sraKYJV?nS=Q;jZ8-bbSzYEC=oE -zH)}*N$oD%e*I+r8X`g%}l|F+9h_FGmovz&UKxJ@mD`7W;Zdo -z3PKF?K_p=}Rj=lnK6_H%H4)C&=K-_AIm5}Xwlm^{k;3mk#GRir65WLyd!$`;sabJ> -zkD9#l=PS|I0g0QjVLtgDP1M<5_5w@uURHC-6U}>1-3ysE?-jZx+OAXxMc%H36t_vF -zOx4A?zCXSpJ7DjHZj8ev(rpSG`_p`W(_7m%kPTx$(t^(EworvlyHsYSfzf3@auRxg9`+AAH&j*my7?U^BX-;JD -zXbJ3pPA;ss#SslbZ -zEqOI7dFo$fkL?A?M=s7vj`fjbo3TEam13TUj9oq!81s1BF_>frjZon%&K_*oq -zJz;TsR1q`2)a$JD@8Jx0cfG3eAGJHvSyh?UyU$>14ijYbjP?|OZuKF!&2SHDQTDng -zCWSo1t4e9Uwg2*GE4k%c`!9dCRzX$yXKHBv?0-cK{Yuift0!snT8>H?-DxLWhsV&D -z_n@BKNT(JG6?BsnPe!m2~GwiTV -zYmX6zWO;?9Jqmrnavjes7lkgD+a4AqxlgIVs~&)ea=m~l+hQ=&yi6YaQQEBmYJCn_ -zfmk8H`wFDbA=w3~&bVEhIwY;nO=CXxn{(;*pmAQEg -zt03`_lthnsTKO%lz3aDLv9|hKcRMdC*G{Y(XUI53LH7t|bJ=BF6JVf$$yOAQinWdH -zDX9N$yq?GsSpMmFzG!qZ%y^nyKv7DrCO1`>W1Hb4*gXg8N1>gxGNi8Gyh850E;RYO -zdp0jfHHTjtchi$XnDWF{)l-)xFM1sDBBICcl?SQf_l@1Bxr};CQcr7@@~uu967RC_ -zB(_zo_;Y&-6Sn!gJi#&U&j)35)&IHe{1nxRBRT(rUITsT4U~F8$4U!bD(@kkg4D#s -z=#>lXa@{TeQ>l{S*+(tcX#?)`>iUh)-=HPUos7yDYb<3?S2SjI^s3@DZ~JG>1F7Z* -zuIn*^sLOT)Ia|u=^;-(ElCSNWyMbGKgY^GNpYFfdXKkemKD+m3Zdh=wB3X=z?l5}A -zZfVzV99U?;eH&ImF_v4TSIzz+WxQTil>EB;H!aMUlcwGS_1M$huuSN7S<+xyj1Lfd -zZbI3`CMY2N@7~suc2VmvwV!R3hma01Ti?p={ZPjvE$Wpf5z;UCDWnhIm4qup!drU- -z-y2K)`*+Pl)puK8DZpc=ua0C&5Qu@`)+92JW_?Y2jhr -z;RVZt*M&oeb%Y+h90R=140+2V2G_tpc|A{j{v?Xs=HAV1l^TvO=KrvC-16RqqN(P_3VIhdQK;B$D|x#Y&U97UN`BX?P}jDt -z_9b2QZ2bXV-nfRp>V5+vUU?+0{S5j|@6>~9AQxYy{y6u@o85k?Na@x@~QE) -znH@*#rOH$FQ}Cqg4}TBO-sRFm8Sn^RJa`8DV|eIqufUT^p$FE#tdI0U`gibK`Y7v@ -z>$RKfRBQc+2T!Uz?AH$dr2l?JKgX8Su1w%a%`4T%J~L+WrNO+yUcPNcvTHNv&gQo%$a`XQ}cO9RG-(3cKh@$5DF9_5bh3 -zwF?J*cyQSL(VeG!ui*RGbdFbU_m|L-oqwvmK(%}D_4hF`mA -z>G1hiUVF{b_(cn@S$6r-C8x(rN1Sr%h||W6IPKK<&}&LZGtQX!gzuajpD=U6>G9J_ -zN*9b8ed*lz#JSflI6Zzr)%WA0OGcLrFBvs_Oi6t7sME)scKVo8;?rkc5WjHV()kOd -z+tcHtN=_LwV)UpnrSY@N&zTsf^0=|{FD<=nOsRRsOuWbzU0O2gveV`+825hxaynd3 - -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest.clm_blob b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1-mfgtest.clm_blob -deleted file mode 100644 -index 2538cb4457ecf805b2903c5319faf3393c4ce6e4..0000000000000000000000000000000000000000 -GIT binary patch -literal 0 -HcmV?d00001 - -literal 7222 -zcmd5>NpD+Oc0T96$3YY)kx!&%Q?g7Cl39Q$DF2C_?b`3cD~K#)ZcAPeO?_q}VEol15AA{5QT -zbI(2Fcc)Wc@4i~#WC+*sqB_^?#aNrzjCQ^ue57^{%s6%{^X1H7f-(Y>S?V|F751-`o5#-|zkL4u`J0z7zx(dHH{bpG&6|Tm -zJ{a-Agbz-YcgWr`djoDBsOAYb&$)TQtwXET<-aPO3RXWT#F{)GEe9`tx{pNBmjPI!3Eqx(EM4UG?Z+~#qY -zC!@&ZfjS*8F;0f=D6T3a8iJ@ykMK$S -zM;dII4wVtB_D*Z)GvYI{zKPIhaXx#`J|b(#Jd9YqIFwk*zGTN%+_O<-DrcQ-AJJi{w&K>IPQRgmos?-sz%X+wmf8xZ- -zvP0oWbS5^7v?wbYPb5?6xlA@{*vuT`S&nmplS-+WnpJUYCKj8WjmP7OcruYlCO1l( -z?q*~2>E?^gSDW8&zTNy`x4zrh{l)H!-B-JBs}1};#NX40FCM;n`1bQ(e*WU~x8J__ -z_SLs_aXYh_o;R(1`aD;1S3sB9VO -zbBfBjp`2~yxXLN3`4Z<;uB`H9Uf@MuvQ~;^g=y>fS}${vT`nKGG(Di{DPiGshS)eP -z*%cOe2A^VGBvc^V2e1mpP>C54f0f3qUtgY3N*M%gKLtt -z0TlDIB?RznUZ_Q(96#H>!;) -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 -zz5fjJ{lDomtMer99Vy@L?-UUAw`A&no3+`u| -zF~;CthHHJ6kVOrI9D+-0B;;neHE^Sv&`xl#!F{k5X|@pZ3*f&2kK0Cw0++F!kUMq| -zGIu{A3*Z*PJq&jMt{=|u2Kx4UC<|QsG06M?`NRDf?(5@(6n_W|H}DbiK1E0ioaqxn -ztZ->?Pr=RjE7~3|<8RQRi?%(|cI)N(ffM8PEb8PO>I$w5?(Q!MDMVcs_7c(!mk}mp -z_cfFw0)1G9JOtNeVaS14hHOY+zsjAgL?|@&yyHZI1TxT -zm>1?SN*l(*{zdRm -zy2T`r2a^Esj{$+lf5Na-o&4|Lf7igjYvA8C@b4PtI<7RYe< -zr!Bf4tA+W?sut!izoYr=<&RAp}>HNAS3*ERXQ -z%99#juhOW=zo_t<{uh+LYw0d1#%OqQRDPx==S!thlk=sLp{4s$85hm>il*-u%EOxc -zFBM-jJP_66zG%9sTKom2CMx%7EuSxx0nIQwTg{P#xX4X!rpw{5OT}EV0*AOj`QCDZNp7i5lM*%9~pJC(4SbuaB2cl(ErxM$_lKaz+bZ -zP%<^Xvx-d%pHq%$dY)8>#&=Q~t(Ct+Y0&6jD2f*TQZZ}s9m;-9j}B#)CZ|LBPSZ1} -zxbhP%{**#AI?5L<@5yL+U7CMZ -z`9_obg>q8kyQrLtmUmpVycHU~LwQP*+o^1c^4+6_FDOJye>OTleWv7U`J9cG@1*j6 -zG{3JjzLUzes9as24&`;N{1=p6TDmWkceU_2B~_FEg(7J5b4s~Zo|DmXf1!-hKM$0wa&NoNXuh7c#g>p*sk1HJ--*F{LOaF1S+#e{i -zCWrRPfB*Zxrv^?50qq=w*a>mu>sSD;iDEnOmPI<<0nFc}V<+(Bhjg4y@gq9+0Pk9_ -z<2>LuqSy-@d`zbo0hjzr$0fk!ztQnx;IX&s*blsUgN`L&`&1p50|$NUG@UDeEB>U@ -z1Hj~c9ajNM$8=l+JpT(F*HikJI^F>+^y+vQ@Ec(rH&Z;dQj>oWm`v005#Wn;Iz9#* -zd{)On;IHa++zDK@L&qWD^)Kr9BC!3kj%DB?MaL@eVpYc^9=c_%)$$d9t0w8#4typ@ -z#}44JNqX6xz@N|7>FL1!NjlvFd@)DIdBF2;(Xkh}euj>VfE}}RTmpP7iWdV5UY+g- -zp1eTE5^&-|9hU>!7wNbHxPFz61C;(t9ajN=zE;OIz}MF4xE^>*t&Vp9Pkc$oyMX;K -z>$n;CSQH-wmR`~6M}Sjz>-ZRO=ye?jfp`5u$DP3Mw&*wn>^Z38i@?{~bSwkE^{$Rp -z;DRn4lLSHz{$0lc@QUwrYzOvctk>Gb0eotbj-9}EkB-xUzlvfH@T-G*+C1QQ3-vbg -z0+;0L{6)Zz&ed@V@YBUQUJN|*HXZwc4@R*>@m)H-9C-CI9ajL)FV%4X_}YCst^(ft -zppI*RPnGMq9{9u>9q$0P|5C@hDE%=VHv`xITE_>0U)`YNBfu3Kb$kps5XC{@&s%kR -zC-B%l9fyEd_v`o~@WgL)ECb&o=~x9`AElEKXh-V?z5fGy<8^EYu8Cp?u>VJTeL8`Q -zF6na8fjzZ4_5feoqVwbdKYfEP#|uo7bX)|S7{w*PB~iQ>xFU-Ez%x^HehFAj)p0rS -zHK&d%fTamK4gd$ExC(gvWnG^dVEay8pL$@=Y@L4xu(L$RyC~1?I&KEOXSdFO5csRT -zIz9q?@O2#@13qEV94bU7;UwH6(dMD)qc -zI*$M>Jf~wj@Qx^U059IF)1AOC9oBI=aK)c=>;dNA(QzK-k76%y=TV(r1YGs5j!S^A -zy|3fNz~vw4*blrusACDZs6)r)z@4AyxB}Szsg47{j?Z;m1-$tUy<9cG-hQ245A0WU -zyaRZb<2PD=+eLX&bleQQ-lgM%z*V_AJ_0;{mX41B2X57I5ZL|$9d`nI-qZ69QJyHi -z2>j|Xoh}2PSf=xuCqJJ*3Yk4&bkXx*R9)qp5nkrvpDd -zM#mmthfBwKz{hHInO@+;S{)YwZ>iI93GkVhb-WnZ)~aJaNSuc&H -zaRJ1!bInqXt7jG92!C^R+{e^1uFL=fz8QzmQ7#sXjj}`q5nCvXn5= -z59e9DKU@&!{ejQeULq178}#BgqkZVYwY1rbEmE9&gf}j$KgeV;K|cGt3qp2r@d$76 -z{GH$@^4n@aB=T{!QtZ7j2edEStz%LoalYH@7<=Bk1#!*lTKu-E>%`6rv*)I{d?mNc -z^Ukea9C0W4l7e?gw-zV)ZV1LplZ%tQCs*1-JAJXiBcd%d4LnIcA(%&fZ-eh@`_$t2 -zvLxTN;9T(sKEA!){o!Ie@?b*Q#UCzC9qaZIXh`H*)hpgKSMV2!lki)j{rbg;z!T@j -z`6u2sX>N>vQqd%oowrmEXHMbODXvNHj*< -z72S+P;t0tU2#JLQImBRIL_8sR!~x$%G3-A9osza~5bhLQC)_bO#1QX~c`_DnRT3ZN -zNfEGIVIT$Y>20PU#ku%w)@#VT($37YdleC6ITE>^9&p)x-vy(wh#R`#IY8XT(0lis -zxaVb`@g&#JaK_F$-*@fA={dYWj(9wW86YlmQm?#Vop@VUk=HJBq`1A<$H^Smk<5i` -z_gGcpWjyu1EA3-4tzp731(q(CJcbC4mW%R@JK?H)S2|gF3|k{GdB*e!ou6GKGH;F@ -z;TYwD-VQ&X&F7|uT40v#gu4+a8z`G306h%!Fo^-`2kIvRMRp)NM^QXbJS%f78{$L~ -zS}GDJ3!PH$WIQ$KEsMp&7vK}t|KfsF-MU8OMh!(GuCf3ifAErFz -zh%?LYzsb0t@=oei7VQ6)j7e`>aG8wYv+~+_H|JsMoHEBpl)px%6cg7;l{DWVZWc#~ -z6GH7O+3{kb>m<`Jn3!#*utj*kpP1hb3r2IF(fB9d4JUh4zQ)`inU>UNiu*_qV<5h_f+^oNAxZnmW%R#!F0gy#MA9jairypJK`| -zcR8fYByX}X&Ee0u<8J8={}R7TOp>aTO&MJ066u7>JNeL(k{9{~Hrc<_VJjl8Bx#AC -zm7a94elzAMA)E16JA`?5snS=~7Vqc!1#Gw<+lp7sMI&FkVtM!xm5z1Z!y7nj2AggX!C -zUWPE-PPp@M?&S!>?SwlI=PpGUZYSLNQnYLvMg%#R$dk|EW?|gW@#I3ehQ|~gSG)db -z(A*oVjN}?kz|bH4pL}4_ZJU}U^qGB;j0%!*OS@2S-ZD1X7<56$ueyZ#G|?clr(NRM -zxnqkM*?f9zF&Ud$&bYJ6UAGzJo4c}5Gr7U!3X$*)k}M-jF^#FJ~lop3cLHWCK8VqIvX -zbwZrwbDlU5GcTt21}SD8!Z5*|IC5>=}wEKZ(%U -zWLd=0WNnOV=tz!jirIQJ%$VaF>`f2e{$aAM;WL%2eLHNh))nMPohq@j-;#w3ljjw5 -zIF=M7CXIENH-Dyn{=$m+D;Bt<(<&(`Eqcu{T@vcv3$wP5)YK!49O@LB%-=r#FjI#% -zSYyg`B<(Z>aE1?8E}aiQc*R*?_gAWbV8F=~U4Yflza_BQ&yJDDpb -zzeeh&7G;UawTxWRIYUZr>`l%sI+<({NgX3U1f7!`?@qb7s3}VMY3HQk6sdTBa>exh -zcUSjRCs#8AhVSyG+?H?DbxU~WVmg7YRL=yq&Rvv?QBd6Jrgi9SNNI8`O+l&4^%4hA -zT2fPMNrs-&I+JOCkxRR1%OylIL{4;xBM~#Pb5ygoaw;HYmj?Rxk -z#D4``Jp0Z?CI?Tl;FiN}groicHTb9DX41Zt#FGl}(=kHV9ziZg4>ZX4bsOZnyPcRj -z7HhvZcMV(+4m>P!MMS>v8G}9wdr>BDdXQc@U=m}+MDPk-i}#apPBEt6$gC7!Q;j9$ -zS%W;ghty}FG%sA^#m<%t5vSqu_RmVCZ&L5Sl*qZTQkMFe=_$75mlljTA9%(8`%0Sc -ziB87t4D2jFtQtM%EBO$Ic}ws2PI2h4@F4B$mu8zpo5pKzjVNn|riaM*>vH##=S=;a -zV30`<*_tkMLScdTyF6~IZ+z#Z{pn&hbovo=Qd_b$o$mUKG`&*!b@DmKv9Lj4!vePx -zYXCEAIkYVGr`Yb(^rN~x{$F(CuhZ@D#cP$Mjp~<&wZb3zwN-P -zDdOG=lE&ojEuZNk^1!G2q*BROFs$SKnvUnIU-ak8Uhb93^IBbw?|iw`86Y7t)=908 -zO4``RcokX{TPSV5WEMd$F8kPG~<@vAktOu~S^6x=MOc+T)RQ -zF%7xqd5!W<-#l#?dCG>^o&K~cUjFVgs!yIbqNKcKic()*#mjx5N0j($6UDz=$UA%l -zb@`7!z4od7fGK1sUi)N<1ldT_7IBIs{o8iBjylnQ)dOR0XIwEN=I=B?_DAsRG9e_$ -zOCszfMzpt^`UszRIk3VQ^hjx!1Ivg@kmpAxidXs3pA^VEpAs@m0@r1-;#5Dw=e3cs -zhYazbc%<1;-l>rS*~tr`DXktULo}d1RIeasfzK(bhv{6M(aIIaWBxZm@|d>rIh3Xz -zFv13m5qXiMW%zSp6EeBU70%3opk;riWNY!NE)SEF>9>VkndbINnPDck+&g+n1*bAu -zB=c(f43Y9Dw~&m#w>vYxqAN*|WcCD!i*j^bC}>TGrO0>!B%=J|s?eJ5R}V9j*@=H{ -z$J*}ls&1!x_?81BFk_umca(4y11-$%i1J2+Y2w8htyQfzhLBz&^0H4IEniDylG1Jo -zt&(<0OoI#dr$OFynzqKg0WL&G|HYnfFWh?gS18wg!76ReFv!PG+pw0V_>ILR%^~q} -zLMM;hxE7lFt<%_fXzN%2X(shX=FG(k*|{7xR~FYk2Wz}l{>y2%w6ovN#%1!IJe}p{ -zM3m`oaanQg-g)O&yJUu~^O@V1uQuk^Eh}A(T>w@;jc?<$;_0{Fw>m}YFUyhgirx!z -z79v02vvW1dQ&+kgwnyDgDYuBNJ1>z5T;2KAM6T*NU&i;_@qE<1@}?rDu5{&szD5gM -zw{vBy$koMuK;-}E*}01Ep9qfgtHy)Fz51ZYYB4K&!jij))IEDK7CV{Jo^Y8#lQgD? -zrd!(M2>tTzlcu;&BAGE=DaDOGzKiW&p1=Rwz!*cPqi7oTn{#{2{fwEvrL{jUPUvR@ -zrZZUhd3&xzocWgnrN6o8Aj9Qf*haqrp#5ju#(-uQo<33^20~C#J_UaoKq^vsrOksHmlBr*{xR5 -zDGKv=`A45J?)9oOr~I&g%|_BP4ey3qHmQj@Ojb;AllqJ7 -zMJ@Bn48``9oHwgwfgD&Ph$EJp<@+0<$u)+dHVx@dH!*34nt3q~E9u|QFzMb)zRFW- -zeRjQ%d@~EPoLOFQnn|OvpCPtV^j^wA{H`=6jg04aEp*)S+yWW(E&u#XdWfX)yE4J) -z={eZX#97++N-HI|{6s#T3*DFfTvM_&E1_qvwDcEAM*FE`Q*3Z!F>S3Bi3w4E&y#d^ -zBa_s2HYC#VJU$O&o00dOFVba6zqV(UNVL`v#PHytb7XqhL*^?sG7m{zz -z0)L);O1&7*h3A^bT&=#cLz-LgntHBAkZ02KiF6`=9GL#v6xBE>s0x9#mDwUrL1c0! -zLu6fEwCrQ*VfCCx=x0fHKBXb8C!&Rwa7^zRo}h8EA;TOBX$7THiu^(HaJ -z(W)jo?@(P%lKEXbO|e%>{zcL#b`w{72&)eloK&?}O)PPQxQ2Q2gnph_@~7{ft=cCE -zE>ag!W~-Z3OWIB1dexd%rJ9}4z)6~HIgsRJ8wA(XU6ku4m1|_{??|26_`yDx9APc_ -zQ){R07F-b}O-oOjX!<3OoKknBL4tkJ=%tSR1K(U)lz&+L(%H1{?&R0h&pk~Jl)=L^ -z?N;sft*H)i+HMvSi29+(Jge8S+D+^Hnf45Eq1HFVGk--*?XTX|ZzHzcdhBdt`oCoM -zSF)~V|B!M%0_h$~>CR_eyZSAJ${$kx7MUx1OY<*#*Jvf3B_K{9L&}E{lr=k#mNh#= -z6jW|z4*E^vnawJ8sk!U%J43U|==y`BJX=s*A5ZP5%9c}VRT}F)g4ykNr%!=O!y##& -zmvz$-XqDGDV%@@gsOHnY&8F!+yRw_4JH=CN3uGeD{tDk5QSyeop&fL^k=>DK@9`PB -z@^IcqdvUmXR_Jw!xc5K28Dlm>%zcFFOf_DE+7)vAE1BGP;Xm?=%;L3jfbB3hVGJK^ -zJ*BFibuHB15ZZGp$}4<*#2M!yX4c|pBhDtNp2|y0e&k(MErBj(J!dA%sO8MaGqjrD -z*G@3nuX(`bX@x99u(XVKEm=WFWO;N%j_f|Ap1?@uyPRcMGxIrlQN2D^&4>xon2zC? -znf2gUN9PF@^@tIiedL)~vEFAp$!1#GcVORXl7mC1)K{~~I9je(vk!*&{&Zq##Yo4< -z&JhtZFtV?kO-o1Zbe<;ZY!96U=fVcUEvRp#)%kAf921pe5Nld#+Lc<`PqegIkWJG*sUqbaG<|xG3;Cz# -z476&pqw&8~F++``ycUs{ySpeico)WK<(-FKGF;Y=x|ngAtPnFU9rg}wBRV(Ns1?~8 -zn#lwMZ1Gx=&Qt93%=6Y3ub3HnN(!o-%WBk2*J$s;7M~P9-H>VQe6spdCf9j+Dz*Lp -zGkN*H%)Q2bo4F~uxG<~Z4b|5CiTZiGSG>ERI>{vOA2f;StzKA@v=97ca9Iek*#YUz -z>PwCzj)VS_$%iVJh%ZP(iaa>6_(k1L^l&XHRcYd(wU{@NYX9I&@pkOlcUA{dE;)Ai -zcfzvG!HoK&E-LHA>fghX`YyT2v9t2`elNz`j|cfbOi6w@pmf`DaMh?d_Y@%$$^#QYn6h -zAxr2wrKYm!EnG!Pi$UIejrIf@zeB>x5}y_2VmdEpv*N{02|>fTr9uN|K(V*#{)+Civ7|$PBit*D$Ka2NQ4qE36P|gUFaaMt7{y -zER$i2gXTHa@!dYy9m|$#d2jn)@-0Wc1#QE&iLSd7^Zn!55#=51)O5|V4hL0|U86ph -zX3akW)Yr1aWcUO&Qd)i=TS_T3euQj^OKpQC=Z;d+^2<)IATET`0!S-hUKHdnwwKRY -zbKtj9jJT(IO_eacX`iuQU~2b`kmKTbakqa@<)~nniT@<1E>2@|j^MWup;PKT2)&En -z#ahU(h5TtrCU5^n%t$M=wpfuJ2yvOF&Y)U^@Dcn5RR>!UVqMIxA!Wt2-4gcZgw1AM -zL&}e@(e~j7jYAjN`?d#Qc!E -z_&8>kD!KmSq3&mbY&jP89$9990RYBuvIZXlkjOlZHM -z#ae}H$xy6#bIT!VX$2?8acq_&m@PWX$ao?z7@Q&|gpymGWvqPHnV1lhX=rCQ@$!vl -zuCk8i-Q -zZi&qETI9K(ZdRW_seip}y&70X*N7U-G8KdC)hCv%B*sr*!OI`w#7B_7>q>glCyAuGO}=Ksel^w%{&S5Yz^ -zYvpo%tsPQMUBkSwtl;*WyyKx0>_z#bE~ALU07zdSf2D=${Ojz}vQaCSt{mmPL6!~F -z<`CpFJ@J^GX)93+(IWr6M{lLT9m6g33M4;q2eoXdRYT+lJ{`7dKD|n<8X~U%WiI+O -zwP@_HXq>QUX0}5|*etW!hgWeOyYiFERM>SVrk&X9=m|d}t -z`>@)6AjJ@SirNHUrJbo@!|T~5M`N}4T~&UgFR=}ClnZ+)?UX5^bR1fgY6-HLusk^u -zw6w03S$4!#_M47U>N`K)N;b -zRJDDUJ@*;^Q;jX#{0dHb((eeCuHGPh -z?GSJwxWT`!@=eSN)}Ur*2k#JZVnBSbB(`07r{Ea6Jb7-n*es@oe!6Oh^haM_+pQQU -zCVAEsgP7L}sjzi4`(S}dzN_^PF-Hu*z6o3*O_^2u3ffW{*OF(ceB3bK+|zy=b_7f# -z+qBZpHD>uo*iv}9pJRggsKdQ}zW6;@R4I~QN-4w1jAnJb1)GDOMDpT%XRLUGSdYBJ -zs!80@Lel2DB9}hAyx_82`dI0L%fDPRP@3wVvBKtlYz6QBvuX?6>i@O>E&rhvc~~Rq -znIf&{-$^aVU~L#n#2u8CHv{z2E%3@|RM)EvD8Itljri -zVN9)|Bc^V&DAYY9$C%EawTLlIxZk{&>muW0o)ezyJiE8wZe3EC*H$Mkmmb3zCEcet -zInGsOk9z0QyaXnv!_kp4kPKPA7c2R$rO8*4PdZ+JZMRc`4Y|XfyVL(%@e5BTOMCk5 -zmW67XeazJ-ufBws?3PXyci)&1Ucn0e!rGXo*HZc%3k!|U+B;vCmeD@pd;3x%E3Bkun6^^rJ8EI`;Ujs=JDc) -z&||9(N)0G`v6v(p>P)gnH8hbHQnh?;^ID6vP<8rmZ8-{Fn*QP$(^fKmT4?8!3stxM -z_iGPov)we+RBw_w^@qhN72Pc{O~!`fjwOY*uD8DpEMHhq=QDNf{5DV;Q-{&#w$z&H -z-nd|FU|es9EnE!R@MVe8;z9>8Y9`jippBAE@n_9V(eSgzI-JMdawC -zXumTA(?t`;$`bVU32I((L!q<%P`@e8`^}pHQ^P0NneXivtiqJ)){!l_=-Eujjk}Io -zNyusR{|lvBnBG`vZpxQgj)crjpQ$hHFxDL}c=OvApQvg(F24Egx+mrZjh%1yvvEHP -zzS%z*x3t|J@_u6)(O5Vt=>5hDe_=arw+KnQabBl7)5FPz9x=4HVr4}N5BtrXS&du|%6qL?Nk|EWs| -zp}#uGO^I!}qFZdNByO~M3+@Z+gof>JtIt)tWfPaev$Bazv5m+-T6wOz -z9k(O-vYm6o9j)B?s~4noj~-ebkbL41$DndyXjsNR$lyaes~0AJ;CRvh0_F&(E4ln! -zb%&ApWUPj$)FtJ_)mZ-GuTGciHzu4|exPyn)71fKvv1PLC#4%ICYc``&D=Dh^H}u{ -zE1WW#n>WfPBe8k%k5!JW7%2sp7K*r*og*ZWE -zHjfvVgmQ}CR7X0s`iotGt;%s5JaExG-*~YQ+H9i16IL3k#!I=t(pEimUE$I-=%KK|Et60 -zbL -z;`-A>JN$^;soIh{RXe05PU}=t&7{T(`X$*~ggeqp|B#u<{FJ|`<+)pYZ=KZdH=n>= -z!|&jl;9gIyBCo>#98SjTEko$UJqC%%E$B0h<^3#PCGGTm+dWE56+dv?7>ZZ9Uy(`i -zDu3cs8yU}x{{cUz&vt*j%A6qK-xz^S@hW>_Y6{QKPmN_%el>g>qjJ=@Fe&1L7qcZnU -zd0%#yALcxGFGU1T`5X`0os2bw_{k((X_%CBm&)IBUn`S)*XX^z%iSfoKVxuawKQe1 -z&x^lc<2g)UqEV-(qqlh^Jlim7>8KWFlA(*n+%=k=yw~?lcgg7FVZ{Wj?bOQ$aVqtA4b?`L^aCo^R$xQSENUbxAJ86av+#Y#8ARwg?(G_M!gO?BdA -zk)8*Wad~*}$vj7%PY$u$m_}xrF}#)|+wQ&F8vYHpNHqkQJmO|%I>IJ4zn^dkVY3mw -z$rgT+`^g=xB0r0yGd*|?gIfu!7$+LV7e$<<)+B~V#$V4|zQEKoGpykNGxu(0I=6}2 -zM$(ePMqxJIjM>5)nc0vJ37PDfQCK|^LL}?UGgmIK+nE`r@RQ7M7c(=j=idN+Ho#9O -z6WKGc$6Z$NUj+X#(H5>GUc@moXqmu~b@@zD^el{)y;j6q36DiGNgJD=5}DdW+|G>> -z+2^tIg`Gmij|wr{nOWBGM%z8A@dz`MnU)Z?30xyeYPO(07J8->NHF~CgQ7Z#$ao)(IbikYRSW6#8* -zwnl=VmZJwN6*J8mt};DwH#0LKY!YbxANBIp=*?U{>S`XWKGYZTih;#95`DmowC9i) -z`YZI|{me9e=B=1_zB}U(P1;(?NhG|E7(#5->?&pk6YvH2Jd&lfm(QVZ|2QdDTuNea -z!-@H9R7ANL@nAOnBJu#q9fjUFD@n9evAHDkN-%nh5NoL-ZroduZH0+#&xve56U&Fa -zc-81p*^f&vjmhtUjlTL)9QR&7YoqsDCkjG^0!{%U%A1hQQJogx#<*=w;TI=q>Rko9 -z`dN1Wz|au-S?#N0vgi;~LQJ^Oys2QC%5F)q#SWNr`EZeS237=He`F>sRLhaD#X>Fb -zl7h;@ES25yY8!DfPIfvyH3^;Rfju~`?~96KVY6_H>Ttdo9+B@zo}fC&_6xK>Ea=O( -zZfIsVv04uNJe&$jGYFnb3E>QZ=}?j?}Ukkt7Dt?6mVgyd75gh -z;hKd0NS=9syJ8L}7EA|)nKr*5Q#E?oTSJAPpJtk#6v=oC+Q!~Z!t-bvv}{2^hQ=}0 -z_DwrG%hu1>$jwL3;EW>LQ@N_84lcmcnw;3=aH{OA6q~BGlf0n1xkoLkL7%O8QZ&}u -zan`V)Z!SA@Deb$PMN7C4wk&hY=&EE9ZFSR?Al_ekHu_Ape2wAsW2w{C5rLvUV^Mji -zS$r^L?Psh^XfJva+rZ|cp4kpZ4ss-!{Xu@~-a_FtIJj(eglGAsF$JZU;&>8D6ixMi -z4qG`x)gB+)8Pk5K(Av&7G#6S6_^yJ&5ka)G!4}##@a?y;q2|KPZBxXbrM`jCYx{}| -zCbeq#^2^w3Gvka6OGuRiw@*e27bs|j|p6>p#lNa&3g -zcB`TOg?)xFiM>_j2)Fg^FtOn_@CZADnZ-S8JXPhJ*oHfYGzRVP>4hJQxFv*TQjFgA -zz#vI~>U6qj)Hj~1kNui1-KK8~bc4H`F* -zw56h9)AcmNCY+X})smr0KmFF!gz;eE@XocRz!a`F--6pB;{2$WWlW7i17;9y*06YZ -z%y#CwH;@iC!?TVMomCevHisGR9*M7WiRLZD{rLcKbM>@mCps|V4SXZy6yE8leT<)G -zXxdVE{tUB~tDh+rs_A4;KX2LH&zp@+TYT@Hv3_4VUc}qnnmbi~Ms>4c6YhJ{oZ^DM -z4_IT}(52XK4NZ6}VECY)HF8+l=3;k%dC!G>+^BAWbOP;fY -zs~EF`*}`qTU2;26FK?L|iTl+gs^Pf-YayTa7J4w%biV&$JK4r>q55)7%>~TXX<~tz -z?qQ}f86TcOKQ)jE6QR!uF)m~YZy@4gx}xk$$`5l`PxM*Nt1^KFB0r5x{Q8Ws=`40k -zmhd{pj~Om8WY{`gG=!_UQFjyf7Xt?OGZK^c!=&3JXkz-UpST~VI+ln} -zy~Wi7F?dHd1}l=(atHPk3tQ}I#MKPD)aWntulN5MFIxoMJmIYk>|AdPBW1T(#oKTi -zYj^FML)>mZeOIOCQzkkXBVJW4=-bVi{P})@ -zm(dej^KeTuPaL{*$K{bBc2Z0`W+F35n}-{kp-Xcvo5Bc)K5+&VRgT6PT1U=N!iucB6@>>=&=yUl@Xer*AkMIoy%jZzr9X&h05ZoWfvB6^B -zJ@HIve!Nv&&NL;Ho5gmLv9xF9=){!qIOQD?BH{HWQCYZIgcG3@7?q*bGZ> -zUw_~UQwNi`@7ur+xQ_bKk<9wG&e61u)ciRpMH|_UQqVH+-I3(c)B+QP(4V0>ozZcU -zcWK%stlrU57~2KxUr-X}n(|u2NXuc;%N0?!MN2~Ps+sQ7s#=It(GpPT^HWW}FJ&3KWe_h>wT#C;gSE1QV&Y~(k-F=tY`C7e=mQ~%RW+<_FF -zq@)Owlkts;AsjIM2s17pt~5m!zg1}I?@5D9&Qfq@vV9h@VL^zdobFhFNcb6+h#_67;_;%4jXfT^4<1F|SVxo(-z>*WVi=VwrbqeTxjM7O -z(~=H;7kKE)#2IhWIpxyqRJ>{xgtdL=*6a+QTN8tKn?|un6=p@08zXqV;a-Ux-X0`3 -zvm#TIf&8&gIUP}g5hkR)wZn^SLxk>~gS -zSBF^q?jBv7KgL# -zTVX5D9%436Y5gVM%0tFTtn;j^=QbVgFa>=ar>g9k -z5|L}TEi_lO)>ECh1`B-KP#)?acm*vdcz`~<;)OoPu9&uy@wr%SGR4Ir!Fk?}tHuT+ -zLWX)b;=NZFqh4J=zfntC_$CKZzJ8?yXE-)k7x>CxC?%9D-VJ`d$U^GMs|GE#QA?e6 -zH7}a_ewCzuh_Co?@^dAop#=WBgE45|Ukuvt`}097e%B1rZx_l3&G>y_Fix|SlmiBF -zv}i{gCL)c0aE;bpO=vGO+AAHjuLqg>Y4EoUjzABJD4!0dYh##c%th$sA^kS7;2Kkp -zclelJBT5r!^v>{ASe##Iy=>~>5ccRMaYM6!+lq)XaqvFm^UpRsIRJ|l<1h2cdJASR -zXg=gc3(_$aQMe%*n=|NbTHNBmO@vS5PzSx*98(%$(k&rMr@MlP@>P`nqX^@fy(QM-tqg&nmEMeyXEqHZrQrB4%XMVXrW8?`+UpZDeGqP`xchcxOL08l^q0ekI-~f -z(mTtz<>hmZma!{+eff{D%h#553;BJ%(xc1r%R0=UEnK^dE$g=A_pQy(Uv^Zgwfg$j -z<*>`vN=-J<+(-TSQf-W{?`XnWKPxSb&F_1MgVpHfU|rB1xozdgWiJiz?jyZU_bc$* -zRmYK92ep-t^p1AF3d)56lY5ww3W^Cli2i?!7YB5i*UR`l -z@*s|{VC&P|kN4UkBMccj&&2_A6dmu4gNx;w_og!bva&Ku4ZjKU7`{>1X4+2E -z(Rws)GjG3uG`fBP$M`au#?W+g+0ou)aM;kF1h@4$+w;bHzQMBXEXr)!F4WUB=7tLr -z4PTTD+hS{UtsL&yMoSZwZr&F2{Fi7wVLRVwg`OtHv>k6mcj&p=v|L}8hV!MlGS3;B -z_6*qWKZ@SO)LR-t1H%1$V@&AmT@}G`5Va{Y| -zI@+6f|4${{`ZZJi!?fl^FShgCPnC(Z=TQNqe;~Gp`joV*9@8Ih{M~?qP({6%Nx5r2InMH -z))DmixJDkDzlfIk9J*dWiELYAwlj^ig=lZJq8!6Bh^~3ucAB4sd4GbHFfwSlVzxp)_$=r_M&xXC6VOdeO4ur(r8cqOjIs*hXiA_c3PP?l_hOSMQ)_12}_NbVAMZF6irW -zU3M@J&OusV-@Jth_%>@n-)T2^%un&+gD2F&6FseZTSTw}Q(84(lN< -zsNNGep?bW@;3)>rn>GeKRXGd#>hq~AO%5wQa6+BQS$}Q-d&KC5& -z&zn~LEDm)PHsD0Xtew1$~YY!+BVZ@2@Qt8SYgl8h*==^R$d -zLe~jZ@EfIYOh?jedg{Y9Gx|x{zF1#hWx~QFdO~?3+v0i -zPgRB!uf3G#2;>KQ9eb%1e&zQPR?_o&8ozGkk=~KeB3Y9_)9*yCvEth+xmD}{gFK9T -zu?|B -z6^A}k_!8;e9LEhWE(9nba>V%y( -zFAgJ$U9${hY7I0g>ghGo^D{H)6G*_p^qH?q-J?2c__!EIU=mFYPS}0O;Srk3*T+x| -z%(=^~aXpy1{^!*8?^7GTPfb%^^3zoK-xEOhfTIWY)v(sM>)D}ePIWDaqj@dpySv=m -zcbw4t_WOH!aYElGV06FD-xkO9nK9OvJe&Y2_+xdbFSPj%z0OcuvlHW}#=bsF0+mE- -z7HLTjdI*&faF8U>eKo%K@vZb9mp$zF_;2X4G>|@)%k?w;Be?zjYdIB3Grs8X(zeM7oo4_D0&Sj6-bx6>A!JS -zeb2e>zi?t@n)7bid#i{$GiiMpt&M~vUiVW<5qeij(0t5onqLt0k1t!lYD3wItf%RH -z|1{dpIMIZR0zGYX{6LmA%js!{Wev+1migqef>nk8gRH0?|D&w+5*hce8qHhwui9{B -zLDh34RXi#s;-+)7h?VC1ajo~Z^-`_2&gj1hN$*})?)7E5bUs>M%lFcEKJFjZn95uSndy+3|G&!Q|BK9MU2E;aM`b?wFEaBXbLm_egUP3bMVJosMenI5B?)G8L!xyeE{3!|jn4*n;V$#h)7LJ266!SO}aNu4CV-A1& -zW!N3@J#EMR5VaVRfOdErj -zMoivseX(6++@0Y02(udZEM_^ZbDV%R+gzZg1!BeI+sK5w=)0BYNgd|0y>#}cbN#|T -z&gu;6l6XkMYn!M{NORH@WNR{B@Gg)A%L19R?17DmkzzGq&ogWt7pUU{+eog -zycNNS%r}U_N}KrN0Kt<7|J;${d#ba>7k8n|*Y`GC9B0Rg!k4g4F}oMNr=|wjxK|Lv -zBv`MHng1Sk+icwZ|1HL!ziOE;Zo+?;m7leYjk_TIH%a+nKXUkQbbtO{zc227(Ep20 -z`K$b6B{t5ARf|dZ5_@Pmt0%;vwh}V@BZ4E`+yGm<53_XUa@$GVw_?T)+)K|Z!pnp< -zI$vil7uxnNLmyaYKk!C#)}FC$`~?P)O&d~<3}oSZjRzx=n6-OI`6%MrP5;KrssR_M -zO*q@c$tSpnl(_?wo9%ds($-AV-hk8-_t5k^1}1{@_Q+T_n>J-nI$mHtKQIN9!pM|8 -zk~k6He?OzTHJP&q+@L?K$#iQn#|-?S*+YBO>^GXLLkDYhIpxEdzE -zzEE2m9Aa7%Nju`e+YlzV_MD;A5^y-T&=o$X2K&LJxGk7x8J#{xqi1XM*z4${HM&Qm -z$6QArrO|KJ=(g+VsT%zzjc&b;o}$qwX>`kV^kj`bQKOr$qbF(fER8N)M|WuSOpR{3 -zj((#?&(P?`>*(nUc+_t8#L+!ji0}co~Y5sYjo~9`Us6aPNTEe(P?ca;3ee= -z2h%|JPsa_#7Txj_)q>l44P$F&_uZLB&m?cY=0(5A5ev{-v#w62XKa;pKeoTw?~d6N -ztM!Y`SM7~tLejSQ`f&}`|W%(Ht;4LTW93O^|iZ -zj(mgneuZcXbXSl{>4d~1RD>+7IbxL+^%aBU9z*XJ||Wud1=x=nt4ZhBsc -z+i5P&hG-15<)8nE?$rJtx~>Mksp{tbEbx==k -z)PU`J%Z-^Zu{Jtd(e_2^7#^X_5hH|lv5`?4E}N>BjkG#a?&ka(`Nj;q -zk;7b}-ldGdY6PD&ju?;VxZNy=x>(~?J+lPouH=_N{cx5sUX4|MPus^$05wE8?gsXA -z8Xby#MjZBi*z5Pl*Klc558JUuH!HcS9DD-S?wbBeT;-I{(&3b(*7fCP(W$6Rp#X -zI^PPD7c%lS_$+)%4B<|UaD;oJ!$Uz%Ve6+(xzB}j6g0>f8-I@PVq9Ex;vBP>mKK6e -z9KLajLao21!~sWCPqkXl&-=KvJS)``3Vs%54?G+jgS*Y~DD~=yQh!krqdP2VYwN|) -zxJ@1k!fT;bgWDD}G*pIyM-^s<;T+vug@R>j*=;g{*TH*$yksc&_K7HUhvm+24WZzb -z@W>kWMQfn9yVV+Sg2@@K;RUq@8K=1Cn{L+dhkvQz5!5j1-02F&A3O=zsPDz!d)f<``e>{ -z4zHQ~cWE^ZL*5(#ne;2-#0Vz|(2N=i)&Q1moX}0rgykw*nR#9aQI6At5jun%#NO=o7F4v?}+aJFd6V-DC(JFxZ*| -z;z?avoNr9f03gpoK=;r=}z>AiytZiz!dR}_9m -zEyJckcSME%RlP+<3#0J&0ly37hvAN6n+fwB_rU!8?+YlRoS@rW$J2{;TiY6 -z^u*U#i=khEC${Dwo_KnyEh^@4ze;IENaK+9mBgWhQ)KEJmvMm46A5lbz9njDs*$Uu -zdbpaepuYyXNjYmSp}b(BoUo2j;Ro@Qt=4(-iBsR5qrQ+ -z{i`$&dlO-)Ngc~!%u@}#n#$L}>k3N!RiYfQzK!CZw1#Mm4k6OA#ijsn%st7FKj -zqrlZT)tbJ7uGhh0zLu+_G2nsse?kW!6#ND{0HNUDu=9t4e;qveb@-W*<7A~74sIVB -zg2p#|#=w?_g%*qzIb66|FFDCB(#~84f3{j#&>P0tau>n|jZNFQX-a^;U*D7#m;a`N@f -zR1d-82FXfkhL&m{Gr)6RY<(O=N#tfgX%T51tBZH<`sb -z5_XosGF7ili_~gpxec#9)4(E?jyxEJ_lAao;nim4;~`G+)VtoroP -zP_{}@dj_}~@{Je@-WMVoM3g5K3=MKMx2p4&_6DTa(P{_KQl1T%UEcZC8DPG{$b6SQ1F2PS``}xXjR-l -zK&xUMJah=dC*5Tp@yAgO8QL2HgG1O8puY~xKCg^liMVV7yHzZo2E;v-DH{7V-4Pn| -zWnTo3+0h*DAx9x{4AY=9eGxpSMd8hWFCGDZzmN3tpt~A{zYh4U5%6PunW9j|so0%3 -zG*9Ged0^!8!Q5h@hOcEoA$lYSc3h#3t#4Q+)byy-hMx1GXGN(!Qo}OXjCPIZY|yg` -z1#j;cfQ8O}q89D_gqO4ZgqKhH)xGl>qSXm6)2x~VF5GZnFUq{vAL;*Uv@U>Me7JWH -zMtj#Bg}VUvjey_N2VNK!n0!?zxRX|#+K-mdt>A(4(U(wg{lF4+59sWlug;vmK-ZPV -zpR|F}2P4lek$H)Qe%SfwZxt5Cc?cSRL|<+lpuTKZ`?9T{s2%k|2VFzD3+NlbSt#Vg -z?Wh+0heaF4b1m9ST25C1D@A*Ucbt&IRuPU?MB$x)OC$R8cUYwm{MIP^L%`RJfM3Aw -z!ihZcgu&h9Lz9lfXvJbqFGs23{^YOrfz -z;n9cY)mMFyk^4T<_z^v=Ku-yNHVS`8Epu~ZOVLw;|27K$4&axdV>mqWk`kG>$D?o& -z@Y5sU=%-r#XHocEz)uar^CVU$?aleXlqNc_y@N-GZ8zq?ozPFHkF*5 -zjQ5m6(_6x>8{vCDQK(Hr3bknf9DFFKD3ft25yWSjd|r+8TTn;r{VHbp!+IgJ=qwwB7 -z?EfR+`taC86RXA@Ci!PYIJJIUEmJ+QJ{k7uV{20CxfdXD2@(F5!aD=C?^Bd7ik7D_ -z{d#D;T0cB2s_@?dzIp__eaNK3r$pgz1MV6D|6qu<(5#&R%J>aN9NMOR^!YmS%^IMm -z19-|B;L`Ys0<aK)52=#}80g^^UTM^W?n5dwae%CGn5l;J?*=AM#~sUDb?2M? -z*osMwWKFmVHXW-KY2gItGG7#KWdcR1DwKuC2ghBClxlEH^i8%6mtLPb=@1(!Yo@Z} -zYm(u+d@LxoRx#Bi*9w6YJTrJstsM*whJP5CY-8!o0hAnm>xhym$o03dsb*sB<;!F7 -zd)O|o2*qMDJ`;b={X~%b!bhWl*XTEPZXHwtr)2QJx -zH~YnX7yVkLNYj%XWBx8lIzC@QtJ~&_TVswzEi&`U$Rr{n^;etx#@i=^_svq -z_1D;X`VHOsK5^-*=*5AK@wF*6gOGMi`njn#6;CDMyOpGg$#~j~RW}$khfP>@6T{>2 -znH-*o&+*7>6H|c2WbiyK19vO>87Z~-z{8zGR6-X{K`tSjj88T^S>*+zcVIY+3!wP% -z$omXt8Rh=RP=p(NQW**wh(p6_av*&#bms~FSronv@WJRwl;CCRse3T^rzre;fPXUr -z{)lQlFc|!G6kZ7U`4R99>Pdbu_=_lfG2kDKfZr9;fZ9iR#CMP$;RB9?64QwZ`z_>g -z>F|*Ro)Mb(c$0&p#xuQ8QKBt;Z(>SiG~uTD+~#! -z(L6*PJI)2+q2Qt@Ziv#I!YP&BXpF*N1AOKP_|d^)a1^XcsdBM{M{qa3Pxv`m65`Za -zHyCUgqLVmNOB5mp(vd;PNT|(U -zKiZ!|TORXTm?5a``vTn1V6Z+!_^k;=ut+Vez-*3KIuAm+9C>>R-rhLk?K1|6>lh3^ -z9)-sNUNZtdG1~e~Q8)~ZgWz;-^e%o-qn2MAgTDe_kr>kA(-@*%IbOw0Y>4Kb4x_18&na=6?8lQfT{4mO4!==QwRiZ9 -zY&tBU($5xuSbWu#GJ)=iPi-JriR;vc2<(O8XK%pDqp9Ho-<5TdyacYD8WFqik*mNoRKjGu!;?u=flT%Xu6F#0VuD${L -zHa_ksULA$~J3iuz6K|CJHav=9G+ -zj|KmRj|GGeh5>|$Vv5^PQ%l2 -zuS0oWQSUrL!Bx-$upT0dmxAz|#_5M*RzOaKJ#5Y)E7o@lYEFa3KnRvS^h9Scy8CBZ -zmvpl5<)KA843IjHMN1+UKn+9m=37ypH9Y(-31#V>sd!f;*I2wOlB;4UqHhoi-h*7z -zkt=4vdYD=g4nB^z&q3?&N9(ik?!o?H$n_|M?g^+>|Li}YBxT#M`qIQ0ODOoo5J_p$ -z#60W`nbDSC=+A)M4)#Ie#SvP$?02Bsf@+hsy`O>IWV&TiV}JL?UUnLjmTsBWIQ6Ce -z?sdKNY;T-}=X-i%Akm&zJs6w`X$g6IZ5_lpdx%au^Kq^i4EpgkIjYSII*cbHl8ye}k5BG`8lb3W(s0o(5+$d*K?DGa7s3`L8P&#CU6* -zbjWac+7U$2LTUc+q$Avzx&53ZMx*36vNoda+$k--9(zO&jh89wYLC8z!4vjyY -zM|%l&K35&#@XgTD8W&E0gTYOMc{NM1SG%yscMhn&qWyL;uXbtO5Mp;|0*qy84at1K -z-}H&9Ogc}s5_=1`M1#SH`t$IPqJ9@X-Tflb(r1`f;-MlkQIe+p2we47140Jfp=F7@ -zKVs$C_v^^_!Ip@xyU8L0dupaDfv;Igd(}9R@2Kiaurs!$=f=-i+>y4cXqV76hJ!CK -z>uFQX(z&NEJ@NVzt}C1+{~F8JIdlA}`9fDB%LD(7eQVx*{fC!+2&k2{P4O?AF}Y*E -zGQ+-KnQl%IkXp1~nPpCN?N?@+DNlZGee)&MX*iwWWoO3w=ZQ~xg)S3oM_n)UsoKzG -z@Y02NS2DgQs^9cX@u4UV*h={6r|$~rfUyNG#cV8DM)5KD0{9zZT*(n1HIX#dN>;}F -zqqyCfDg>@V(wey$GK#sEcIoH5;_QVTu=!ECKYO|u7PDTPR1B;534tH)Vi%1HSSyRX -zMY|GP;FWC=6UY(`Il|TVxYh6pycfCHIR|$gaDLNSw5wcZ`JzXmsRpmVtMuSx0@(^z -z0FO8msu6vSG?Nk`z2O716>c53z%hZf^|i0of1=B49Sv_4ZKm>O{wiXM;J?k~f&K5i -zU_8EJgCH((GZuc*XN>C8f2Ty!66A19l&LBDM}>*qyHV8(QPD=)$x5PqLFwIr9?v&Q+?mX>C*zBO5# -zpUX8`M!}ns-eL$C;p^R0YR}O5*OZoK0G>f`CJ<|3%%cO`0F(EW)9}gtEty9VwW*Yy -z^UnG)a^5J#ALj<{?D9!7ZV0EBvbp17wVn!y!Ivrv@Puh!s0pOX9GxaUj*ne>g-!ds%-Q4F=m^}b -zdA9%cC!#e!5v}=&ku}%pld_V1G3|z|@jkXaHj4`+WR3BS$x8B%3Z!P4d_w!UtXN-i -zmcc(JFe%IEo0+BaqXipb_Y|OS-Wn5F7eh}(s}pfsOV5J!HJQtuyYlrt}48jIYhK4HPCNT2mFyk`YhOru_cyx@*i- -z&y+3Vq`)|NluqZTJBY*;xnh6!$Jf$LGm@DZ`U{jcYQ+S2weIhJPfZ;)OXH8rFGjA% -zuTg1suDJ9wf3f%+?9Vl*b=$Qx^}PO*$rVg&s=&OA@4P!Jm^i5}xy~8u<~n$ZT|l;= -z5uNy0c+8+!Zr=|HT?Y1NU4|$H+X-nK-SH=g1`GV(fEP)<2EBGxuyBnEe8X#yTY#T# -zC0I4I`Ekblyb^D>!X{O)vWEoo47C -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 -zfSJ-LaxWYa`4@q_#VJqc{x*j -z-4WL>bZhAJ4^Q5FtNQd)ruFaGS9LN};{Gxf_}+_ul3^1y;wiqA>U&g> -z-|8Sf7Pp6kqzNI&tJ{~uL$gy{P)ezFp*SmNU*po@%yAVFU9VqX>Y`lxI%2KI2fD8} -zHj~_Xv2)aap~bxX)n|m82rYJ8OTt>4{#jA6MjBqpH`f|3|5?pT`&1<7_|JIh0OHTx -z+#PQ2Y8d}-ujr}Y#(lm~>QMy91!VA!&g`X{zx(x67yqqxt -z^ARey?E;To@DI>trMdjCbQC=Ejb1yhrJ~ns)ZE}0!Ept$7r0>uGC*FKxBKXKEiasj -zL?J;`((p|@jvS%O7ijDwdQ`T3lQ!8#Wm_r9nYR+7xwxefDa?Z73w~y&g@&j -z1+YgTliaWgvwjNppyAfs3+nyj7z3wv`?i#+rDKby41fms8aDk6e=*5%KTlnjDE~&5gE3*5n<)-@mTO -zkv&5!Z?x&=3Z4s0IIkH?Lfr#hH*q&|j-35giHT^5_6BtrIY-*Ql~a$Fz$f(x9FJ`G -zp>O5x>eNb)r93e8G1qPGd6IIH@I>AoBmQqE1CM{bP>$K{kUKnt)zh8#in~?(rh+%n -zh%;;kzYkFc>86|WS!HGi8*t(Cw@5pIl?gk_{!^vw)K?sg?DbHt`$x2F7)NVS^ZFYt -zi>%5wI(bBfTi|wG(dr^x^#WCTAKPD4taA<1$&ol)@U0rkJC}$$ca}OY-VYH68|rp- -zVU~Y4GQ)2hf%}md9e<-9$29}y?f1}K&K3Ms=kORu -z+Mn0SNtO|9r#RN|+1p30zr|@#?+1r_F^mV=IorQgk9kBdHiSS+r#i097$51udD&LX -z_jpzxy{cWz`q;%i;7RWiBe5)ax!@J`>8J8>vgCw*-(j7)W_kJc&mwY_wL`$l_Zdsm -zKyNSZx?ov~6ZZgO#fga!aE{XOYRdkB!d}mg1&)h!FUFe@FOI3^8-+u;Vqf>)x-^Y^ -ztx#vO{=n7OJ@uNVWrkZ*N4FJBHF%HJljEBjm-StcX0L4hI?hm%S_81t^>RJ4Afyq9i$gYbqx3UR@8Cd -zjXEMb*U!M?@osuMwdpHxc$nAn7w0c+U59v{ADM-#ySY!4Ge*nSy-p5&TMml|vN2)O -zg29U?g24w{NNPZHiY(8Q#b9vKpwVlE^wH`zLjTNo92OCfWqj4u&=OmaB0USq*W-|U -z?ROg5P0+^L5H@=?1@Nz*lZ^brji*O-45J5)G~hpS6KcWzL87+}acgUq#UP(e)CD?9 -zN4KQGH-DPDo}v^&>*l(j`Fa9`nip*;cKoXH4j%jBk -zUe4g5hvAE -zJjToBx;CKh1@y^4Ux&Zi#*{2e0)B>{=c#)N@z|t?REu$JYX9G@9&sCuBqEWN^QVUr5Z%x( -zL!D5rOyl@XxkB{2#~tCJs5d;UZ~&cZSz^nW<#;a%PB^;?&l&b9YZ -z`)^}T7*ep#QcfA@sS*7FRltAy%NnMz -z$6+C9onc8L&V0OF)J~cp^g9E;*8j_|d)ghnJeQ$D69K)WJvN=}IwPfdd1*Uw&sOz! -zBquK~XeV3d;reF(%dZ*jR_I+3j9S5iw=V3t^MN$1%?$WE3+D*4!Kbz#yZ)VRJ-7|I -z1@YD(RouAOX%MyTbV{~B_Q=V?Ma)L?BJ@A9kG&X9vOa2|S~1V$fs1UKV4=DCc)O6s -zs!xx#8`Bv0^oT|3Gwu78d+cU0MaQ0H(s1jE+&CMz6BovSBXIPlZbVyhaW`zIJiRH7=246Pd`LhdY^YE+=2U7B?IwF3VrOqQIDQ_xBS)(YTi7Uj6b!Z=96s-~;${rC;F%i-Xz6 -zq?K6U-CiENkO~>B9$|nJp?l~oj?Ef%A=ArdYJ7+eAJ()4S97mOtL+nh(ShEaT1s=Nd`YYBn@yIq%VtGk8c(|3x_`Cm~mq8T~ -zzpxE4ul3khc7UG5V~*a|Zc=pwyTkcMnHliP*W=m20F$(96!yrtuk!5RWY2}OUhw_vNiO4O4b9p?G5GWtHdHDzJ -zOvYlId@Q#1);2}Dt4(N<2KmZrsQXb@p*eTK?-Gt*Pd@vJlSoC -z1>S}z@_e98c@$42+0c7Id+u#FL$gN9^75W@RV^nKE#vV -zE)i}Di8Aa$YX@2#%suxIJ~{ctixF(z9(Erk{qs$zQ^!-x6s_0>49*xE!QdO$K2^?S -zn{?VU>}|b>E=pLfyGAnJ8Dj}@FDM3kTQ^3MZh$kx2Naz>1>?lj^0LsrOXcwgyQlQf -ztbrvd=q*_u(TI{QdpvdtM&9pvbL-asxI;7{o)ua@m0HLhj_(?U7EVW*BAI3z3=d@^)IucS3f??4=QY86&)m@Q^z^SL(Je29#jm(CF{Q`a6$( -zR5L#?#cPhvC_cccPc(DB-fpo@jh3j3mbm?VTX)+Ob2K#&O=a}(`RiQ}#OOiC++z5#N~v_i{C&5Jxs -z{lF|jE*JKEvE7B%LGtV2?>r~IdZ42%cm{VT9XuxC5Vkb)YJ_O*)9-JR6F -z3=#H4(6-W!LmM|x%5tRW)fRK|JD+jjfH0@hNvC$s)h7 -z=Se5+{*T^8d*^-UY3|;Q6P%;>?j=TbWvxC>oCBQ(IN60>G8-_K*i|`s*JljYvST6Q -zn=Z=4d!KY!d(axWVzsNslZe~KMYQ4_3k&7Zx%8|2VVw5(@&`|;-=`id->Uw8=#=_> -z>LF_7JnRMczY;mygoDgL75qr(VNpO9a;*cqb+Kn*g_XvkWkbRL!?}t0vZ3JD@2VPK -zOUNVASa?L@~V}jTlytj|7DS;+hLn`8iG1>4b)Eivb2flT-etHjd;z&kKRFRiR`o(6EpVusX -zp`4?qRka3^D2jXZB`mZZEjCF5o%7R5g+2LUoDUy-IDlTq36`g%d-1m3ptX;!ThTj| -zIOd(BSH~3Ue27&PlP}I%PI%$^jG%`zmXnlmxu~^hx-w#VgRy-L6X{oPP}4_x4GBKR -zYTfaa67LbZ5*UkGQc?6)>tkAL(PKO`My)&Ww4<>rRiBrajgn^c@iKg?9ejkdUV4P; -zf_^O18@!-sp&KjUR|0;0ieGw+4=g|M>(9!)zyow=@%#tntg=2k1Lx!4;(NY$R*}-; -z<0Zz%$b%jhRCzq8asYRkZP$9B -zi|{};3&=GOTgx9#$To{Q`TY*ImOE_9CQd>ppTw^+ks#sVv@l!i5l!lIT9}!Y)T*D# -zOeL8ijRtf=;g_0b2>s$PHjJLFy)#eDOUPF5py#45!2SaYTl--JX{bv6GuTJTTQ{5g -zKAzya3(=Vz@|zw5s9~dr{0A-4z4_*nH{X17)-wDvWcABo2J3Tl@}D|v&_vQ;HLCZFS@Z@v%)qEAyEix;eh8pRZ+9*44Nk?$Z8-P2q3>Xf*;<|aWCx3z -z-J4~u2gBI4B%e*H*FA9NjIuJD+P5@(Qw!C%Av!~X8b -z{(c8{DU;9wojeWiH~B`w@;i(wBpHx6(ET;)+t*|ZW=%k2=5O#7YGmK?yTNDDe4%r* -zMwG!VtB7hk`cnk%;hZY`Nh~G`OT<$A@W9nd3M(x=<@7w@2NbUjHvQB^X`=@Duvj*D_GCXP1l)i8vh4B -z)Mmu`MrY*sb%EsD8=N!!dZe&OvH5SWC~AqVNOJAL{~OKe-ndenS@?4Nw>OuZtdW*h -zXe+ij;wwBAl@*UUrn{Cn49ItPi?6b?l96?|kI?a_qSi>*L(FX`MRF4Qzwl#>G0x$M -z$4_CER4YGc=6SipjMa&#rVWU>HA${eE=fqYuSP6B2J!J6Of0Nqp1;Ng8l>g&Z5LC) -zEg8fm-e)CiOWU>>Nh>ewY;ZS7#*=N^R9as6T=COQ*5a{ZEi@GT(9@xnBKSHKrhzy; -zCgzXgn}{@T7n9|DWuwGZ?dw})-{E~xNy~}zmhaq*CreI2%RXhP{WSbEBcdTJo7gmV -zFKKA8)y&je#G_&pxaEz31qFZHlS0(r&LbwuGxCnij34Wib -z8azYbZ@gQy|#+(-7|56jd%i0Y+xqtnt$r$Ye#$EMK4YM`C@~#N{p3PVi -zuzG^){SA00!Ciny()n5@vkq;cw-iRE@`~DM}iL! -z#p+ou-Cu0M{{5ToB$o8I*Cq3|neE3EieU$Rb#^HDX$UK-B@Otdo_2+%i_-(AD!-_- -zVwR)`oUG$g42iB&WnWajCVis4z10Q%G%Nm3m3gEUqF}!s)C~=n{sg6kz`;u4Rw4Iw -z_rbD*;Feg+gp#!-<+z9MD7m$S_I2!aXlM5_+|ocgep*TQ?19D=QOH@oJo6A@&Jll? -z<;#O5hR~Iy4R(L0>mm0vH$}7CEWOjkjdE}NY9rmwLjtm5^a|($vYnD$40bnmB^0DT -zkRmz6b&|?!X2f17edOzH^D(Bvxdt~A$OH98q{nB7>&Oo=>4@~*+LJ9X)8lTcJmcblnQw@-Y&(FBz6{!R`lf-_Ic5{2YNfJr25JTLmT- -z&ol6^2j!{2nUU5ZXc6wT==WHWuXwiU{t2ZsV@sLtV;&*PA^*(tx`e%98k5DyuX_9n -zXP=aCt~n*PzFAkDXpJi=D23i)ZUM9apR;RUEWC2skc!ycalSuSz#BYl6}~%fu||)% -zw>bV|#aP7$w3h!71ER3+4Bl6-*H#c+VJtD#+>6yXBfl=Pdzlwj1>QHkQJOe?x&H#n -zyl<+_V-Ums0qN~h=%7|#yvKsr^_nR~24K%AAZ}qg%Xr^i9#k^}hE^V-U|| -z)q-Zz7)>1XImg6n4(My2cbfgW19vQ)huX<{=%?Ai`d)%=H9T_7 -zb(roJe_VoA+D|J#H?ujX@R^PEG+TXAWbC__k@t~GF{VXZ%mnU~{sO(v$2Qf# -z_NWH&PFz=Fv+{el@TcIr`I9atb_F7u5f^r^pQMZidF%z`GE?pd*UJ`a{3O??Q8a4G -zM$Da=kaEm|T?{zl)8J>hYUd1;CR&&p@`yy4^+cJCX`nk3WKXCJr;bW>t)}=Kcni)H -zu;~?inv4V=n=#5iE?@7J-_r -zDP}DBDg<1Lk9uJCUoGy`#hoqsVF4&D^=0R0=9Wm_Rbq~+>6}0`QQ3!m=#26d>dTS` -zLc@8SqB%gj7Hn=5icL$gD_KYc=v-g^Xk-^SF#tbTBGC=Rlf}6-A8+an)+-uNdTJA* -z*#J5X2MSL(sX^W_zUT!KVjaK%@n`_!K^0pqrDl -zr|@}olSRC=kyZTy!=GR)@dYeSY5AKV%`SefILS+QJPpf?Cs#{5j*qdCPTfqOrrl_> -z`DVAr*;e?qfizp3Z>DX6Z-UJQTR<16Piop;-EC(%izfQ(6W!ditmTwqPRog=7MhqVM{?h#n|k(&#AaFjg5~PvBPzFGee4qOR>iq!*M~#tHHd2DOO5 -zT)xxVQe5$yZVzjbe}D1l&J@gnY;msq?q|DB(mBor4k6`7Pk>qxef(2LgQSsfA1VUP -zH;d)4ex?(gLB7AHJBLuZ><@^WttX?YkggM3;7uC}f?FK_X<+JE+U|~mog>WnE4che;CQodI -zkTn-PDkt+=LyDOZENeaE1A2U#CcZXNZ;1=U?&PyF+J&6E6|&x)>ic7*Y2sRsG5dP( -zNB!`RV_xI2>`Z=SR6v6=f+hJ8#*$VXk*vnyNue*;?bDpCh`K6DS9-M$^95_!i+jL!=UgOKZc45OFr$avJnIC8=W#v(9C8NK}3NJgE -zYezl(k882V{nB$Qc8f8Y%dc>mg;y$<7hb7dPBg|LzwUXbVjS#vxvAeze!KZ~Shcsw -zFMG%rM9jdumF1}S1^i0G41m{{0qY)0dCsGQZvh=F*O!Ya0bN%X-u1)wTk)pH{r%C} -zB6V#)JzO?*;EA7>J2&}tU9l*c%t5j~{UP5mg$tM~3a?C>e*2Y#nUni}GW5UF8N`7H -zUlJ(1Vw`y=xOq==BnEE%(BgM$`YRMr&x{p5vOMMBE8==^Q{MqlXK4Hj8r-uk7dd!l -zni8HDH~_jmCg$y{yGN0Hi%!Lv0VAxG>6y1!5xLo9f7fa9cPOcL*U}i@_zv=Bb^lNc -zZd_SNnh<+tXmjOq@sMJ$XNXrS!oj#O=x>YxmYDEZ3As6aYw)&z3=zl81YQ&KBU~ip -z5KizQjOw4@=Df*-66kBoyw)!OjrKp5V1M+LCPwFZ2S)5hR4RjbA4C@qiA@mg?>xG^OE=g>+)R7dU0 -zxS@u%wwGyqcpX7Jqu6*asyYh(j7D=W_`y>Oaeb|fn -zq+id2)LH|Y{Y(?hkS}n4nBjY~^0OASAH2Wjm*L=LSQ-oP4cOa#pxe6ZrL^Z^J(VE| -zR>Xa@@YV0-XspodeUW=n@e*6<F$6oZjnl2?30TCDyx|+3bq>33zn&jPhJsOv`R(?CE;W -zWZDfo9`J8wJI=NClP1xAlAa&PG@dWYOgpzCbFxo!UY9w!Q=gf9VPWQ&z{<>VK2zuV -z`F!T+z^P2({Ck-R=NjkZo+;qH{?wCtAAg?g4RyFZc{>$hxE?UMA<$H`d8@Fa9&d>u0K;dK6cj=&e?!B(}8F -z?wruVz#eNlQ`*AyI7*tXJDxQ7O1!5PA=^}%?``Pf*x|nEVLwQvsg@6=d@ox8>FoBs -zxW`WMu7#CWeJKyV8hI?SZlmnjeyTan*WBfKlJmokZHFe%+{HXO!+)yT1#LX0$FV)p -z^&Y3%AtyQ`-#o`LJpnVNA#&w)&tjD9@#Go}JNu~(eg%wgi=p^SiS!K~Dn^bC -z`j(jD52UikZ};?2cgUH)0+IpeAI+Wb@N*{i4cdnGpeUU#ju%2cP?kL-E-8RqWy -zo`HOJ&1S;abBqp}>ADrC*9*A}@~?%a&RTb!RB5Vp11GJ+`B%U;yV`ksMP}zEEq|8B -zd6cnD^{45EpRK;vwcJ@3Qqz1zI?I_P%q5GDt2N2L!1|i(`&`GJEeDO7=ueV4VWN+o -z4Var6Cc -z-(lMh|LW4iwi17JDQ|n&?<-|8Hu*>IWHLATSEHwHzrR8s>wqVYocx&PGUrDb!G9dIQdT&xk)arl%G-F$lfS*=tdQ+X+6}H8UvehJ|9n(m^kmDE-vQI -zrG^gc56|gh&SXLY(AYJKX)`TwHw|>lRC>4;2g9oJrb_AAO1*78WR}l9q0Lz1=jBmw -zO$a%&@TKX0p15O|ah879)F*EDGu+&m3=}-&ZB= -zuGDAE^Z)jT+8J~FPd@=KP+ASNIki`x)@*&kh<*44MPIe`@xm)H#dC!_^IlM5t5O8~ -z0$-???#y!`B@QwN!}OxOJM%gxyy6_wk!(-S?g<_o^t1@jZb=h+f(HhNcT4JvF(Qvr -zu|jfNnuG9*l)tx$k;c9}s%mupm^*Y;W-0CkeU&jkrm8`DK#HwOsM0kuRYJ93PO3NT -zXRG3FXUtp`U!|#rq{lj19CbK;|1$Zl_R&q)eOmkBvm*Xf8S}UI${0WXCx04|f02&g -zIM`6dL*qZg6Al&+vWH14)Fl63=u;)5p-ilUw*EQY*t58kf?VMv`#Q}nXGm*#-B0)) -zhwI>V$L;44&&YMvz$bv3l=Ew(34v0a4rpf%4)Wy90(v53hcHWKps|N2!c`jV+ultk -z`3#-q&BRIbIIZW|pH|ZBjT=XKe-F7DNm~RTYy}v|RL%dqOs8O4n;$oCo|G^H(KdS= -z%b01O*|gBZOPHZ+pOl{oo?%L_KyOTs38bjMC-yQKNv)c62Krh|dO$bj?9v|3J-4|& -zRo1i6kd$|H=)HNMPOs@qXEQ}gb;_FdOp(o?XMJm)tQVZJ)K0k^LZs9Z`F9uTw^=aL -z+Gsuehi91I;h*GoXO!8A9w|;fh#S;}V=>B_1_|qKN}OER$+WO@&M1%0Zov83J~~d` -ztENQkOX5Y((Va)jcM4L`yJx_MBtPyvN;_Lhsr9H8GKNw+e{{dnaLd(}{fh6F)875c -ziCe5V3qy`EK2F}!dHC4|X-p5Z%G4Tfp)|%CCoiB|V9Qg;`IO?D_7qB!-3sjHUe$=& -zSxKO8qc5yUje%E`9!OBuwB+uLvFZJ1m6a@=R~BGa%1iE+2VW+M0r@|nvTwknj#kWS -zobmx=YaYHzS78v3D@+@19X+}p&z&*V$1si`D~Yd7?*`|OMze?0!CE5D=(KYqbr0NPU -z|F~d_hc7w)(EW1T`O)=R71i+PcG_g~+|=txC;2t3>Kl~&B$9TnXXC{QvK4pwk0up7 -zVFeePkewykY1wga$ZH+{lj8FH|ZDX~v -z&~EjfRqkf*l-G8on=){NZ4u|mv7dQx_d>g-PTlot#J?!Vprgj%qy}po>3a8ry%{Y# -zV4(p|9a7EG2|lmbD={-=ztK#7=S#hwukGyb+_Z`X-yakML)w)}`R|ouT)z6WO&+VB -zcQAhnu^Zp@(%jw;AP@ -z&o1Db#~JK5Q9f>>5BYA%5$jB=(8GWjvo9Sb8!c<|jGHQMlsgbD=Ky{ibF|{RyntB0 -zDIp>SoD9*X7boQs&XWE5I-hR*S<(g}_(rivoG+g`S1y`b;4u!h -z#9)l?1+}joG*p=|$L|IF_;~}Onl13_>vgwu==AVGeh6NLgtMl)!(E7ro@3hAi8Fml -zwZ0A>)FJO?Q8)aD)UC#NF-@s*{dq%Gpv6@8{MQWs|BStRTvJ!NKE8K$t|UMph+H)n -z5F}m#L8WTj5Oj;u7B4-mw`oy2oq)Zdc3QAb4dS$@Z4VHYTxzk^&ZyK50i8;1E3IwE -z&P>lF3LP$@X*)CR$eA-Mf@R~4-?MhK)9*Ro^ZR`N*jYRKy4Kq3@~-!N-shDxMR~i0 -zxAUY;sb1*j56GIpIRXrU(mRh=?LWLo(?D%bvVeNOxmpKa`=60Rmo)BdKe)lTeDiCk -zO%C_t5f69fG=EP$v%3Nk_vYQ}&R`66=AKU~Sx@bR7~S`zlZP*)eb6WXtOWh%cBJ){ -z+p*WM{%j><3aqc+T}%Jf6<01@U%X*yc}e;1-Sri&I#mg0tKa5Y$AI*q;kmQh^dy%F -zJXa6Q9Ao2(TubmdixuJF!BY5U#Trfh}9Ob<4J=mtkjg>+||An$6!eAOmM4z$7E -zCf&1OXN;wxtO4kcn1Y7dKMMy~*&dX=s~)BET+G`FEL=T&^14zwdWAy<%9AAZ9uQt^ -zI3P6WW!S4fa6s7Ac0hQw>wwUt*M{0_@;W2uBWDyL@p_!C7q8z1Mv43Mu#%}d!&2}% -zP;3h4Qj@nXa$q}uSGY%K9JysLPW!cR4_7Q%^nGZfk%S~Hy#HC|kZ>P!bay~1={{1i -zSjP2$QBinV9~%NbmGiZ)>Abv?THng@l#un#*RM)TWrI#!VQJlc9M_pfUMM#KbyIXX -zUe{W85+m5%gA%L{T6g0st!S-lt?ggGia~}HGLQA=ywrEvv -zPRXBz$5@@9(n4#JSH#~<1_zE-D15r2)^!~<=FTsLV(WFk@A+OuT8~@!*7673Cyh-E -zq%Cm^{n~gzrI&`E<(7fhARbIo&@xGwrUDTWDG5v?6E3i!Y3Q$C3Te4Tcvh0>Gw7-D -z4{3%WI>d!dl83eZ_;%XMtQzr=YEGA -zdOv2$TfmCA%iKGE+pe^@Yqj;6f>N^-zj93jex;fKekB_1&TQxMol3sanap1swU5UX -zINLdJw=w#orq+!^8#$AC6Jt8;+_0&2Q$%*k5Uf#Db^*a6m_g-JzT5OpEgh#x(Qb^> -z6ZzloT`(hK2-vJ -zvwo(3UPY>Zz!CZPXP{TWRc-wp(k-DnXmyWU>&ohO=J3bo)zw;{H(7dX2o_jsl`V#} -z4i_2dF%Om<+*2E2+8E>T=sn{Z^>1&V#=qg9lH9bw7DrBr&Q^5l -zOX0!10srouDN$gbFr~KZuHGuu1vEwnKMdB&w;a&mOqN;?)*dLU01w_U`14CI7bn%4 -z%(ZWUA=Bzuv%w1MdqG}m=QpB#_?y}{9j=|pSS4{LUprVGmhHBu_7#8sD!beMMuj9; -z2+OQ2RQ&yMrVgle$^>$7+Z*f3$u{oba|aO*tq6#=gX@57!%P_uRKARU=Q_HsC^+Fl -zA6A%?`t~@eHaVJfUu^KVIykHXkCq+XshoSX_UrooTI0@??dx~0-fpZcy7o~0 -zYqhYy;(iS<@JhaT@zvqqj1(`{^H+ykM;3|cuSa+>Jvg#ZOj|}4h^Y_wPCKq|9_bPC -z*;w+Wpa+*x0h>kg2k7`bALn-7K6h52NAAKACyvl-jN&!3aO620v9Q_XpW=}`9C=DS -zq9p}4>0L8$Oouc={yVn};+V=?tW4NOO>;BAqglg6pW{bahyN -zd@J<5PHex#whNmJ+iTbkV0#N2W)SAL*t)QNj_n+_udw|M+dr@kW4nfpwPKxvEfJdu -zTQ;^lY;&;DXeTn>0ZYTx;oxw#$mKs>{Nff-{%H`{XJP9kN(J?`aq~|HToqu4dbkp+ -zNtP7ZFz*k!^9S#;TMO%&yX -z#K5KvajdQfx+A;+PtxNJM*40BTp>VAE@zDN4vdw+7O+{Zj!iUYD~w`!^TYeV=%&ePxJAIdfiCZ(|0tCRq)YZrrHBcjxF#qG&FYym???t -zA6mahxL?0VxX)sP7n8))>cpA@bD*7Cl#9$|>#I%G^!SkT>*|BmZ?B{K=GrRLhIMq7 -z7{c!qu64aMT*VEoU%$n)g`VF~dvMFw;$CYlW;RQz%KYNB(Wh=aTj1FKUpT^B%-gAE -zyb&!3e8u2K_m5M*5(D-b*ZAlvfv&T6Z#i3eN2AJAGh`c6wJ3-DRP>A5Sz#dWT{u{g -zTK|nx`vEkg@r-fz$`yWhjjc0ji^ZR`Ro{7DxM6V#J0Yh_^Yl4D)UXI2J;1-jJgMm`ottMc0&sgC5vGb@!1snx2c2`*iI -znM3X3h=%hiC1&MmwMXYtdo`y&!YYn24Ya4YppV@QO~B7L*lA4WTt3Y;r{&t{pRUjL -zNi8uAb^g>XYBTx>#uPvBL$lp=H43w=ceW?S+c*|$IhPazw8!yW#yq`$wvX#b-6DZq -zV~?=Mc%@V6=AP7HgiZ_2_Ux)LID+8a+hw14j?0lJle{V8b*d6 -zAMM!P2RW#{V!2GxlPXJ%*2Bgn)gQpDb;_^yu;d0;Z;lVDyt_&s5`JiI@Mly -zxNuIhB%s7sN$pg43W=UoG?tglvoU5H+3r+8KTdVy6zi@-JzM%ZD*ENqyBV{2VBgqe -ztZcIejFk_UoD+(j%F7&Q>QsW46A>AB)p*^k& -zMCz35?gMH$8Jby-u(S%;PsK@oF}w#}5ni-pfibRIC}StLF6O5kok7?eYWJY9)d}P* -zS8Ud|uz|B?b+C|Ex*6jn65mgs;Nj -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 -z0WQubR -zgm2G}9GHSRA@}hzm+%wI^PQ<9%r*|1%nVCEqHxgp(?k{xa*!A3Uj87BO~$M@!a4y| -zfR;7y5n|Xqup`L>oLLnp>STdCk1??LqA|HUgxFk;?isLWz?Hdmb_MMFvFn~q!B?FE -zP5u;Em8K+(*znGBM-g!rm6s&}$;V;!ihtZe{L|n5$BO@KxBp4-?;x-?oSMq=zJ>I8 -zNkkjV!80EkWgVU~;w+6kmDyZgc6QjNr0c?*fb8n*Durb+pNO{p-F5mMsSg6{JUi@E -zBDJJK>J;;WyF6gEpeTgsKtDVmY~L&GYhEq?BTkiEgq1j`X;d>u2@ -zkGCQoYlCqYWw`%)c1omnXpPdSX^7&skO}g@l0TF05}t<@faZM~`SwO+tw&D0 -zBuZ5=BoR0BTx3VK4B7%umQ%@`WTam(J^oJ -zDlg`;3_x5~k;{WJ%m9>ElW77z=N5N_o|#5oyv8C=;h=Pue)?a6b0EJwlfS>3L(DHO -zlg(to8xX~(lh{FSIwbp`0^FXQ5&6_da!9RGXD}B$lV4y-uE`=pU}2(CQo)L3a;C3f -z7GoTzqi(}gtRHlI7I|)5Ux~B2pIYwErM22|&B9ZkRO(YN2PS`^g?gH$l+FVKX#l#V -zv9)u_3P>Q?L34!xy2u5lnzc>BR7P2-g~#BefWfh|GtV&qYev1EdKkx5vbk~VBlu0q -zLKfj51Cs~%v*~>`Ya@4l9gKKz-O)pNcuyN+N@z-S*&UoC+7Z)~@`9A##rMDqC=a7} -zy+zZs3eR4(e%&_>!ZSuD$3|YL1K()XI~8-cZh=-LL3>uAhPEU_8%HFpJSg7NxEi?9 -z)$131W2o#EEX-m@J@}RAnaFWi@?3X)(+mC1zb{U<#rglf6L=I>)7V+VcAo3RGeN&X -zXQMyrm&@Y2|9l%4V6(p&@iLOwhcuFyJO%j6mpkJ9O~SYO_Rf`vwU`9$G!WU)P9xTp -zk20Z7Ci=mNm~rX+!`2P$qxfZO?|K^7l_F>(J^%m-dKvx67e%9%zqqH4CdOYiNDK%Su7((=s6Ey5lg@ -zGUU*9L`T+Ptag9C*Y%jgSwS6v~0TUB#xBSgQrs?;cao*+rlfr_s -z5BHKE}wIZj3&Ay#W2HT54MSu8?9d^UFzH?>&Aia9S8wAX6w+T41cS`(S}F -zX;)V}kT4YdRBw+@V_B)hPXq(QmG^+0hLu#AZGM>~NwhQnP0T7D$3U!jjpX -z-^P4X!42)^)&PZ8XOHQX4wXQ^yV?kQeV*yEggb<^;A^T+`h}ilqPY2J(=Y~Y0! -z!^IfC5FTvPHJyRRXnq&QQvPTB-mjP$FNk(IAL?MKB?+>z^+z_jB7cX7NHaOwYa$vx -z#rb_>F_wK}vCMI66xcE)q2ngln_XIH%pZZxyJ3mM`WheYJ0~!qqq|;P_y|}JW}R1B -ze(!IG4e1g1=zoYA#T+~*NW0nvdC2AX<8XpTGxSJW>E#uVlwN+|5lxuYj4XgxR45MK -zsnV_!xT^Jkx#|S2dVRrvz@zHLh43abU~OYKA;g3x5gRxtjym@W61zsQ<-QElETs!d5YtRHT -z=IVgf+mA0#v3V2we=B}*9Yy9r^Gxe8RiWuNIy!3pyXN@_JY1Pj2|vMGhS68!1-D~U -z4&FVj>oJlKubgRJ=mUX8d@s+;n1=DY4C~lD{xQT~qHW3qNteDcwx7PKymKCO+^QeF -zhl7Tjg@!w}FUA)SFOzy!@Ho9!m6Ler=-dQwPh28l0+21O;O`)yqEw -zYlb`&<9=yBS7)4AEHjx -z&^XYNZWik_SrLV@HUTMV6wB%`MRB2Yh7)fBi<7;udZx0c!az=-Hw<%FYxwc -z^u_ULFU`e@Nv|!G1!-O23O)MnEqdkOcOo(=##$q6-cdz^!hK!+wTV8)@Y;eeuut!k -z&Y>-m_8Iyw+PeqwCLepJ7i&V=!*INzjX#1F{DW-|^FM{}U`}YiJ?@+qmZ?Oa-Vp;% -z;22NycN%65_**#CPK{#}Hu9JPv{ika?=FYND{&?IUiq$&ku}L(Ip{ljvC3qQpag1l~(b2kF8ZRrZ*Pa#V -z3fQi%=)S1_XCN>1R6)F!b)yj -zC>;rIq^#bs?}5qo+(x?BIS{$>#K14@e+eq4e~tBzZ4UM4`#$Bj*ROmpxh}UtK2X@c -zKbdPu`UHE2g!vOc!8M|ak5 -z3@^b{#LgJQzr(lxnFbh?;3(q+&!&;NGQ2;m99qQE>kUE5QQ1 -zyCZx6mJh~+KAiihP!`uCZjZ&W)@3^+c{cNvpaoYQ2s2rC!EQ90bX;WT*k&GvO@KaW -zBsdjk8^b2Y3V$~CUJf&+uai*6aT2T3yljUMG~sCN?V}I=aP)-Wo_$F8&@v3^EZgvj -z&;^^&G{bptkbZ(#@}CH2EmlM+CzemJwk{nJHoqm@u$~ZZ0f!qveek%q7ilrlex#2h -zy@0d|=|zj2wy)ZU7t}LD*j`*%&$zI?j;#&bd)T&tx#ll=u<{P4j7oVuv}ly;=JG8` -zNR8a)gc;*s5MMc)p9)rE@T4?J_9T;EUYO=b+#Ni-$~HC{`+>Br>H`%IcE1zR&{Tsz -zi#*;h5o7nIl6CzwvQILeg>L{YVMdaxa#ad9HK8}?NGQ(XuM7)B0?v4>R?!2-N8cUS -z;@bZrv>yTC4;^h(2(qaqh}ucW!|K+m!ugAYgP$P-R@})qO%7k>CqhO+)dwG)7&HG&h6Y!A%6tZewB*EVrusVbe -zW}5N02B4gPioV&RJwZLp*Z8lGK7ZpIhlD>U#LM^LJ5rXkN#q|bTKEjp$TpM6^RNdw -zDHk_9(5NMduB4L5k_)r^n^;8YtDtR3N4B35qeEdOQw|moYaoS$2dVe7gn!*`3|hBx -z9ncQXi9Cb(Ig^><*bZ5Fv;X_ycf<5dzhiq!`_(Pm*gn>nvPrzw*k1-ddBSYW!TaJb -zNU=UEW^?%xl5&COv&t4l6t7jme?pq8J(0YLqx^5MlB5wm{IO{{5HaPn_Cy01e5Cw5 -zKh@8dTA=L>a+Pa-VS;u|W6VPoE@_~2#2H7|dSK8(OK`>|lYs$X<_z~5Ben5(3vG|T -zY>VYJ9vZjT4XvI1Cf1~oRP>k?uaBnQXbUr{t}Fe}qpo>jUZ=joPX5uC1h4$-qwPZ1 -zS3I;sT&%25a+oq2kbI~z -z75s_KW8Zzt;+_Yq=zV|0*QYv$v}F@8Lodwrgd$0IJWcS= -zbou|#zFpvR=@BL~4z1~#j3(i2Eei}m27^d;@a1~)+CT8M7q?F*`)_}{8{%4C0*!LY -zrgZW;qK8Z;2X4?6{ec9qYhKjDA8hfZ@BWW`ylr_nWOPh?A+~d%W(#a|h^7GSPZ}A# -zp5&)72&`rAiPsO*Sj&Eex>%hig$&-|WUXwF!}q6Ul6X)m!zTad?RCO2Ej_{*X$heZ -zZ_#8_PThFw}0cRZ%rZ(4?|uRbB?FP#i4F~18a4=@SXMk?~kqb -zwY%_LYn?znY;xJR2F?uIbk?%@-=2h4G&4A-W+Gt~&q41xmCs8zle}w)SLo*|d^JUW -z)-ab}Nlp*y@w;WvQl<&@2#mqQ$5-T)Js$c^4Ks6P5Jz%TE39Rm{7>MYCXHPlq{mBx -zSH5k9UiJaV?(fSv$Iwb@6HCRBg#o;WpFv)`rVq)kI;!NBTt_!=XakMsC7h@BjT8tjtOe}$y5mkT*6a`{~H!eA|L44u3hwJrU;g@2>6bR=pM -z8C6~TkH3K>NHrmJgx5h%OH*m_%c-KV<{7^$3j66Q1%6qT6u*foD$7NKRX*bB2^Qc& -zczULG;^O+VIR+O+Xu-7^@b&sdLcZm3t&~b}o!2jULLnCH||$7_msh*S9sc -z*P>s1DMmB31>RKL(-ROLEMlh34P^3IU7Ms}?pCR!^F2nf^oC|ky5mW?ao99_b+#MBoy_&MmP -z41Ou%Jur6IHK~V%T?&aI8G5y}4|JFV#z)^kFVK<`m&CTIccGQCXrX*A+n}#tnsnrM -zg1&;*f!0KeLfJbIUkcgwl%r0+usXg?SZS29J?DEKlmUn}g6W^qu#XZ<(14}JMkYuJ| -z9Hz%j7&mqxrTa84HSN1a*CJ;G^0RiljuG7x_)Uy?_ywX_zhY_VkK2NFnD -zXc2{S%u2i34B(R~W|xq{OOj)-9T@ar{|Un%78oW&nh|r(W@-3+C9_vY&h`}p4-o^@ -zAY+mnqro+Q40x2tYv~AWh -z74hU_Fkq3w7uy(@dMlF!NvcWn`k;{Slr(eApE}H);9s*$ewCSn5j~5}ttDg_l8w!B -z5H%}1B86w;g>k7*a#-S$`M4t-Z0JRNIr-ocd$@v^csXA=Vo5$(q1WbR=@0?@|#jLrlv&Ja6wM86scO_e&bN -zrV?W6r?b9u83XyOqO(N(KfFRyRUW&*|Rs;uEy=>|sA!8PzweU|9;15FhH-V0~r%*TPO8$CDWtkW>I?g`@8>cKD -z{<#wF{Nq#?zG@Zt?}08WsWJK0TXiVGEV90jYQ6s%r1w+b?r73;AsC|1SvRP!Xc)_n -zyFZN!vIZ-87*VXOOP@Bk&y#!cN2s00_-{1Q$q${cIg0E_TNU% -zAjv(uM>wCmS*)|G&?XgFap$XPKxrqe%88)aV4drpOtm -zIeP38XVRmGQVl*llZYPAroB1UPj#tTT>bFGhVad`V5>~D!nX|r}%$mj}1&Kl7t@jXI_>{KN9|E!#P_%8JBV3!mF}f -zA6J9OJ@00P+mT%Zuv@jXcIMw%1 -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 -z?xu53DJj30=K094{>1mkouG26}{ -zlKyS}JMZ~@AK20`7gtM5Nm{SU4dkzJbaX(V?@b4TEBVQylym3WPle%c -znVH*0es*lbUwedV*quJbZ{#b^{Pw)CR_sx04XJ3y+eW^7=kni}({!F2g;hrh4RKJo -zQ3mUIm6rU+1?oL_4BCG9+^{vT&Lcw@ckb*j8`S@B{9RZpCXlliJ2t4mcw0(Jm*3%3 -zU`;?Jn6~&?L?!{2K&*jo*w~giBvYlqCU~X58`4Vk1U?-DL}xOMbbi&bi494^y%G~J -z?e|>A8qxG3_=2g1n)*2{Ain`(N%S7HEg-trsZ=NDcebH+l;BqZT0yy#juX~eiq)}^ -znYCt7H)F1aUzy3gwMV!C+t)}N6^-VKw8i!BXZ1!rYBgd>9IY+T1$t>#G(sW(f|6u1aUqk%B<-t -zf70A}YAna13+Kh2JYD|N@+WEhhiGzS?2Q_#aXcl=IM59(`d;DZXJDb&TzYv|4wakV -zyFPsFICyus>nbspvm|ij>XsU?&s<)mqP!Q}b@q)&#Hr4q!r0Va-Ifynit2ft1&G0F -z5h%j}Ye*sKm-YauTi&@x_=}~avkgesPqd|%mq?`Kz$F?<<*emk4Yd)kC@NVfIY%uU -zyKqEimi6sHed{_AxtwgkGvs1#051xTw!(Y1S4AUb?htk!DB%Aw`aWX6%8e_r_wG32 -zv;bXYrj~&NH~v4izCA9gI{p8gGxr%TBcKf6WiDP26b8^lu^K^-plzbIrD)qAR)c1t -zw)+*c94_qwW+9^nGg+q9S7qB6$W|g(OSgO9oiQmcUPj&Dx00)&4a){O(`%m3UyrnaO1=trRTrV6^=)GdAO;k*+l?^_lN -z%3mw26WK|06m6FF#T;e>Xfq@xoqD~n@eImcrgFzRHn#6CH#=Op+OAAs_A-oSDwT1G -zLzcq&*sT5QcLIr1mTldpZJDaJ^s?6>0RR$<_$dRBidh5XP -zzd)acS}e2npn0FQgdh4a%dQ1)bw?D@Aez -z@5hT#f~nVlISv|L;qzW9w?Q}{VG1Nf*_>!0>176^`Z4Q9csPX1|40Ax-$-{WI8b;4 -zx4kZc*FDS)95435Q(4K&{1YAqzKtn63dWgYT^`n2z2)H%1NudyDMDe16A-3vQq7$>m1n8`i -zN-bXMJ7zF|Tol>qu&_;_SQ78S9@y6lK$>K0i{f{z8OduA)p{IXU*1~^t-W*4wJG&U -zHQ%;>yVa&jJPjUk#;IqM5sOg+^mVk(rw?$DL6<3&o$!`2#lT}pKn4 -zw~3IDKwZdu#?k|(48)NxDV+=}_(ZU%=OQ9d<9sGrC-Ek$@npmuvOZqfRs)_U%^RY; -zo-Ar%n=v<81cE3E{+cM~`a8O2ZTbv63e$Z#Winud7GnG@5|;L2j>_l-wigmr@KQZjf|TZA7)MId8zGI45|hC{!6JM0I*$Y&#P2)!U5+$?>OTOR@hYw?t75K9 -zs5%ndi>sa0b1&Jh#9A8XF~UEpOkK7sU&hjLY(*rFM@YvVRY$IV2L$$M=aH*5Kwx)N -z|K-w=t3h0uUuC-zBR%^O()8ipo7FuR3IECncUDIu2a9yK7wINRN1AHe6*G=(LSywX -z-kd63ZLU%vZHjdLx$5J{U56Z=MB1s+waRKnSp8n=n%^8Ul-_etmYE=2xQ^ORwh0y0 -zd&C(T@Q5%G1`Toq^z*TK7CW9sdeR`?d&45UH3W~AI9TKc?2BK$di=iP+&O)6)*@6P -zQaJ6B@~X}7Vp_>ksu&^Z=2mDMEy6?BQ`aoIUK?C=xqE}5)B-f&!XXo10ZY0?c=8&a -zdhZ>e!i`uF%+-qqoEAnH`(9hQtiy^ia`fy`*nZ{w8%WU!q;Lj*myp*@cUsO?1KqFo -zSf%;x^P#Uqb;g(C8QWZ}s8bN1=vA<|XCbOQo~+0BNNC_untTs*)ajhxXu@?pNq3LH -zrUcx4HDaTvGq6KkaQ*rvjKQo0i1gJ#{pCuiN^V{t^}>$_-J;xhHf0nvc0Yzz43ggj -zBV4GW`Dp=4k|iWyg{r`r5q;JRCV(G93kOeK%D_0!6xLz9Q~I{5+)Z5Oi(qE?6n3KT -zLwg3_z#AD&Wcqe-#*Xcxb%(A0XqDxuv*4Hw_oGz5Y0QEHa`;O{sJ{-_U%c9tCS;B}ex?903vl{2J(-wGM%Kd#0 -zaU-1fJ$p%?ZtMS36@AUX^{|d^a~0xwqEt%;v8rqS88Dqhrh0VpnyFK!;g}s+X -zcjPYWq5hKEz5x3f?kw?|NxcVG7XEa_nqlJ`3V!IH8A?W*P-Ms~;o)9Qz{Wq1t7)O^ -zpRPXATfrB439rp+vbH33Bm~ETv!3c?46ey!NlC*7gU>X^#?P5Mi~phD{-Zu!f7Zr7 -zg?zLjCi$Sx#+Tz*j^q74L`{YrkFei1eAl+?^sP2QUzG)^gApRCsN`fJ$iQr)=|-QI -zdH_>JSHO=g%vwW~p=$ -zV9OpUJa#iY>i<}I4>TsQS5?-P>pX7Qah|S(ms1AKuS>4~;UYW%r#*0y;-nwE>fF%K -z3YKaaQe9b5`MS7ZCo`VVZwnAxT_bGlQcel^b1%Lld5b80@4#0i<(99=9T#PmX%{(5 -z=EZihId{Dw-UmjDxIlRH-HHtcj|p72(oB#CTOy73q>Btj>3zVXzaidljJr5FqlOu0 -zuVGSwZNtvJEK#_p_iMy=_*y)kAvnG?d<4%lL}A1EX~egp^SwBK4d*8_5T!7euDoXb -zNIWy=Be4sAr}4K8e?I(uKIgsFvsZs4evIRj_&bijF55@qJ$WCA@8S3e{@$K5R6M)* -zBe4a?f5zW|Ia};Z^4$af{pUEViO)Cx(4T$vpZF>&+uCPHGDrkh6=TYV-_d;=e(0Zk -zRd8r6I9{LQEO#2caaP7ePmQ_CSSLpI3B -z`zrE1yAZu#`RFCBz{A_^Dl>1T~F^E8E6P~MhRy1aAy>M9kd*+FLTZ~Mwfv+zP -ze0?;VZ@55F*qHt;xAJTn%0-@=z=xIJq!CV^3BT$2p@%MDUbRpTo)n*(wuM;U;4ZG%oLk&(V2`mr#3^9P;};1{%YW`xN^o< -zf%dD+B6%-KmrYo4|LLTs=Qe&Rb}`rb5&Zyt;PvLiK=RU9`cleaZgP?^^US+=es1ahEL9ZCB7u1Rb;#K$Iuw@L-8fop8}L)ReUdqbH3`Qe)otTd~ -znGv=*SEsUPS6lL3`5xtj2lM39ld)G8hmjUJKJ81v&gJ{i{UY+o%6BK)R|Fnxnsz7| -z`>mbVr+HY@e*1Kf$!RGD`?+a<@eEIk*|I9zv&y-D)lAO?yQO57r?_~3Nsi}2v1Rpa -zPw}e#tMBw&SY>(mE>CgEg_7dc7giTPy#L|5fgZ9vV)I;hc>g1FJjIV#9?kV!cx3;h -zd7k1&Pl`_KT+apk)>!9xPKwp~lVUx5%T7W!eNx=1Kl$B6%gOJO@s|Sr$pm=iX*?1> -zLQ^IFvt9<4{2kcmTkN!Q#A5{*qlv?Rm1YF~%QeKhJzAr~|4|xspca}tT5n{5CTX=u -zgs0FVNsmM;hxiS1?7Kx23pca~Hg0Hz8u&4MQoC%;p3?aC^in4MNnfcWf8pC=lyjd$ -zXHz2*Un?ZpEH6c_OY-I}jK!XtxN>D0;*iyL#v+=K3iJDFC9y#j2(!Tjx5WSYDxEN- -zdlA^Gj-W4^&{a`jnc9opQb+JOVtI803&GN!vn9z3R4y?8`-}I$I}dRuGPi%L=CGSE -zN1=Cv>sR<)_q*j27bdoUEupYtI(GquwOK-8MVv-ij6dVBD7{Xo9c=WD58#fKB>MTo3-_D9Nz#R(%AAyz8BaqdFCYHo0~E|+glH&6GA$u$-e^n16ZPs%r1&^9C2&} -zA7R?JRkp*7xJS8&y0h=Upbcx_8t5y&5?`Az9GZ$K^u+j1*hunu77v3-4=onY-zOCG -zUMg3B4KUVUTv`jvE?KyhojDF@kXBjwqC7G5=?&WLt|}c4y#;)CNwG+tJ&TyswicC( -zm`b%4jZ5VjSsEEk))vvpH>Zys)mPA8~6Z9>7ixtI3bS{xzvP -zC%UrMPI5iEa5Daq@t5M7*gWOY`WL~m)8;(K8oGTL}z`vt(V^)3fE+P7y#-l`>2bngbnM0{^ -zVcq^f20u1MoNykjk5=d$W@1K7G^Gex-A)Nvl8fEr$@(Z^^0|W|!)$!+Ags$79(h&< -z>N&QZV$a3~l)>>BkNu&AH}&lqjRmleXEZ|V27bnWg%me4Jcoi>trAb9qb@Q$R65p0 -zHLM1bNWJ$iAp$nuT_Z@a=D>yhra0_0tgH@9~U -zMQSJSf=Tc$U}s>?Qj<;Ui1ihC7ckJclC?r5^>KyI1|4bRdHVnRv+^0n^nXK#H5sf9 -zf9ZM>bpe#KB~f@D+W3)X`2KCA*i?y-LEl?diMxqH#d*sb+>0T3`Bl;y3V*#}am=~0 -zmW8BdO8E@19#S3bnA7R*-gXPCeS6lUVjT~mMVB>DkWn*y9Pydc%HrL!n0osT8|zTyo?rU?x_J)9e%Y6XF>QQeCyJj~5np -z9TsP0CaRQvV%4XJhOv3C;|g7k6$C`0wt#P)5rkh}A1HeQ*9XcOJjp*;28o9}e=Uy0XI8=cJstXKvMy}M -zB;UaCf~}i;O+Gps_6%IM+~BP$*R@X;X7^I<48Yz--ZV>vAI{NJDcLG%9J;|lGO)0Q -zaqe!E=G|@lh?;FJaeS}H7!^AZ|4|*+q-p4_i*hKMh{yZ={t7nY7;$;ClU4l4JxUj% -zJf7tym-z1qDBLk%vsC$xKu%+XHPA4=7X5%f3mU@eXsa(0Iz)Z+13npkndqgyApTQ=~s>sHCn1b`) -zNavXq8c#`w25TU$kC6wpoYFH1zR^nF6i|3j_TMwYq>95=ZCexk7u%Jda2nFMP7}$8*6N&dQ -zY4Z{9sh+tE0zA-!KL&+kdkb*O}{<+ge~nD6(nuTEyelSL+tq -zV)Mpbue#P9WHl0U2vRvo?ux(;L|+8zTEjp#Cz%b*-?CB2ZD;gIDd!j|=Mnz*tcZ{V -zPL_X#zP$!cXa<~VMpeMddwIkjg3Q3eSB5dZ3oV`+t0h?UoRAnZx>ZbYm-D&6Gl(xe -z9(E-vsV2zFp?TqRC~^vmrJ#n*ELO<@L9~3)-Y~YJUG=D$ab10*y?tH -zg-w{-lLV};3``K_@>8(JC#hn8DtDAWqcodmfrH07ii+ -z?NP!%$O9u$o6vR!e#6JPllf70oiviLip`hvueH?kKt&*e?>ZoLmSJyO>QlTG{g*80 -z5hH`EHF3hkZjvbS`S1JxdjOuZriZiCX48QLNSzMncJTO)esRq1@B5nuERHY4ntH+t -z$3p9;f-21$ctJ_Zu#|8!0DfWggWfvn+__`0UJNd}D- -zUO5NNJwiK}Mah0g -zQXJLqc>3l)(aQZo%QiltsUEg3!^?8`W&HVEVw0vmq0ub7IK-r>>TUh{3O4P|O>xJd -z$J>jx*AjYx^Yx1Q`UvEyMxWIS1<<`GW7Z~57`)Sfj>Q|#x -zh?Ab=A)R8x}z*rP<0VD(98N^}zv{#xi! -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 -zv_5ae?7&5n)=@+MIPl{)`pkS;U)tK%j8Ujm}z -zECpV>f7pt(iAvCe67)P;bqP^CamBM{+bVk3Z2!(QIogv$d)kEGS9R1LaqJK36-O)7 -zdl=N|yY>lQCK$)X<-BX}sCX@{qc+N~1NR=uyuYj3Aw~UTgymJxvADIuVR7jtqoZET -zl~B9)R@IAnl3!IpRW;tQ6K|M{l+14MNc7xwiCSOhz7=82$Qq;T$@W|AY~I$`N|CH| -z^~+IHIo<@wQq;cD(Cp5*PK-kF^+4xa{{#UjTze$Op;+ -z`LnWH?_{$u`%PDxZG2xyb{%&oXn&HI=nj?g06gQg?joag#Qn{c(vp;BHKZ0hpy&~DmA#&yD96IZ$h-^BZ_J05I5$YWswKAU%BX)1v -z2-1|pKbdw22~F{c1vOu&gawBYHdTI&r~WENI7bDP?nZuzJf>5XYH=veP~Qpjc|3fv -zB`pK~4&<43M*7AxrWF?pu}k`2Cs?NNJE2n9MfwR-r5{w4lBe;0c`~c_cpqY)d;dI~1RV{Px1@3C0)Z -z7X4sCeS(De7+tvyeQ}ykC-umYmGPc_uiH_tNa}>Ij`5T#zO&0A3&zR)qF^+574SNN -zHrptxHyW7<+(bpa8hWVh-`W{&mweaF(B8rR3+g?jO=ow#3r4#lcr~b@N2i&0A!PA$ -zLzgZPKbY&DpUQ2O*_UdWyNp06#5vYK1*mttkc@vzOgPnu6t$ -zP8}R}y&LcaI($JXJg-Q)c*;v_W{D(SWDC(}vZeXz_O~dphONN(r2K!*y$mu(A@-KJ -z;K98gWp_x(B)%d%Z{${JrMkHbdz4?7>sn~$wag39PwtA^L-s9wlfkVb+ss~W*Kp{8 -z!SN^?&?Nmy6$ug&U<|z0&`0b=9ncvgD$|1Q_(s@Zv0sks3nZAW2cTNVr+92f>Ld@YXry`g_;ES8kC^PK|#5ZY6-MKd5TPN+c5^v?-1eU89 -zAaJ$ -z=SgVfz@EKfcwvA^F7U}p+j4oZW+FP1Dz}q?_UCr~=zqUxi!Im{#y2e$s?VjPhGfwb -z&n7f2Zqt?LwSgJ1jn>xpGL+`aq2CUR?eQM<9+rBrlS2TyUA$7|UQ~8Q5U@L#J;};+b^8&l*3ykmrE(?}`>2BH@A?{LmDSPnBjvM9KiaAbesF -zl}R^j@IDim&of5Xg+t|u-fq}Yp~(ejK@z+`-qX}WQ{4^DXeRJJkgvqJ@#{#nN*AqV -zX~2Y+U@ym5dsWGu9b$wv%mbCws!TQdJ4(A0V>$_i0Lvvb_~0|SDd+ck)riJQS0kX~ -zjzgbfz(%3QUj+UrBJvBpgn?Kp)Sm4qwZNOPqnO?m?N8mZ)=TfAxQ6un0_T6wT%m|Q{i|}@!ZK}C7DWzT30Awwh>$F;W$>vhTDAF`h>oB0j6j|r -z1I2m!9e>5Sqy3i{ksctd*sM?S|G{sJDhAO2sKh;Itk64{37vV9P^WhfEP9I~4R^Gs -zP?Q_Qd2@LeEA^+VN_&)%h<~H&z2sQf-u(Eo(RUBbd@CH&m`S~RAPY~;wSFun+iHNE -zp?01J-d)Lqd=Yt&pBJll46X#`hD{J7@!F(_!HR?45d~BupRLpv -zoD!ciez8*3D4)*t{avw^Fcn#A?Vae0!H|E*Hur#Cg*k!7rTWGs9yXVBpFiyT^Rr(l -zaWhf-llFXj%cz%B@KjVgJ^T@j1xRT1;qeev>S=LT{PWK -z))$IoQ{YFO3^1|GlUhW2&fL%%D@7L0@n5Q)0}HoGmUnqc=EVy2fe6fc-w*9~?5mZ* -zIwPO8ui_-$n^b4w!*BGo=1Xr{H>5tOsE>ebc{$WMByY<9@iAEw?7j@HzzT>MnE!iy -ztX1b@V8t*2m*N__#dj#piDND_lEj6boYK`M%^^)rCF~?jLk4yz7G42fRoaVa5rZ@q -z{#+4znLs7KTg(CWha&Q*u##={D=}v`K_|2fZ#x0}z#kB4kXFE0>B_r9o7#7yf0sZf -zrp|`jL(Px(g-Vsk)j{qBSL}c_u -zws*u2tP5?4dC;cl-w{8=acrKal}Wt|Ph_CSO%O)o?K6B~i6E;p72e^WdN0;KP(Xg+ -zbt~^LfUmf2N&y@9jz%6#fj)4z8Vkw`(>?=dNeK;udEStN`9xh`EJg2B!@hF!S -znmj6%{|x3)jVeI+4m$tj%u|xZFU6r~q_`3ZkFgmEtCv5fF)Uw=@0}j&T@H_t<;7oP -z)r@VQS^9~C2_*39$5^X+wXQvb;+>RA+I0CuCt= -ztJ_g&aNDVkpGO@0OBx^qm_bV -zCq(VoF3vYb>{7ejSOYb#alCHFHy2)ZM7uNUTA>;LSTO?ZEKyB{W1Kn0P~&hKYV1w5 -zUt$E*CAur-VEr`;cMV51Rq@*$+iKq$qs&P(ZmW1x%w=A%+a1~$gP{x8BkMOJ0=oRP -z-4WG<=m!0*1AR5{8J>vvgBuOU43<-d2OLqJ$i`PzeJ$EEXm0ojzp94dcdIQihP+@n -zP7gc~j5J2R2IeXj95|dYF;4|sn;jDLhPnyD)S-{W$Gj9tkx9KDtMZUBgLkbb`@&A^ -zvNfZGlhDX#09z93a`KIsNq1ixV`MGR`3U!RlZEcj6A5|pTvr9Or-hh{<_PuOOrU~~ -z@g+!(b&>mOIQ*U`kywhr@~t^3v!c;)q0e|Ux%Waww2aljdDgG6?3g4eWwg{_By1u -zvR@`{tB4HF2O6)2pxJGZH_D@TIqGYb -zGglbqB)aT7Dq;fRtM#?72BV@}jyZ|7ts4>VjEPcfZI@Y-%f1g0(3&bP*PK%5PJdU| -z?M&I0SmD^Vtm3=cCg-8rBImkVZ6LX>%UN2NP;scP2=^MDleaB*eqT4nxd&rmmDgRX -zPEq=P^Wz^E|Mu26q4uP4!n&eiBc@u?O1q@RQcEzqt|K0AeS4Hgv!|yvvN0D3^PUR$ -z)LW+_mN$(z4R%#v`fE||ni+`NgO)M&)u|hoh!(5SEAuARsGB~kB>uR|b+~6$HDXP* -zGUg~(U+v|}@G5O_a8J{m8F6dAq}fvWG$cFtAbzN{JK(#7wKVmbZEg!170 -z%qKoqxWW*-dg)`m3946?uFiQ{4VmtQ>>>!Od+b<`G0Q$! -zy3X)mG2{fR=9MvzIoGT+j9LBQW8Wt{xEfLxb4rYm%`to+M#S!QG&wTiwK)*FICO7d -z^1>^SO&BA-yiBMhyLvEmQhYvnRM%S)1~V8sinD0!QfSt@8cH0>_x9J?C5fZIB176w -zTo#pqG2V=t?<$FfZ#s0BcR{K?0EEdu{CQww&@bq&i@`o?iD)Wh%srJowPvZMe&RHV -zl{ih{L*E2$ZjWO)^vNJJ`KcHEvA5>e+wzBNTU6=x78MW+aX^>I_kv+HHI1YT3vtC` -zi9~O?`T4;Rw36Z*0t?~2hjR=i9N=WHA}$b*$tKyM7r3f0v~#gga&I8 -zN5i8YC6R1A$#@bTn%K*}*BzD$)Sdgb5kgw-{~9`j3?Ry%IB$6l?4>}n@KyV_$p)Nx -zB_;T(SdDjIi6xNJo_R~Q?!&h(vwjKf$^MdTNGG>+5YGFA=ekSQ+S*A&GocDmUnS;* -zCo{%gvcS?-CY_aKQ2F!P)xl*ld@BPEWtqDMk)Oc~KzA5;@fB3i9W``ndf>%qrcw0O -zYGA|CmwOX2J9Dlp(64eHMPCi~0p@pg@Lui{%rx^bZm3?s6IFp2=I|;Xt-0i&XK@#v -zqUT^cJ15GSqR79A%HvBE$NS?Ly04l;=qi8c&SV6>fm^e -zj!>)WrS^GXQymBYkO?l5Ql0{yWPF68@41Nmjx(a%=*l(1S|YK99KRBpJbYGEAEz&% -zXHSSv)_)Gk968kA!UMriE%A{s`^(5m#6ksHtmxtBixELNM+o<9z6AIk^>MlIWN#r~ -zT)F^d8@@?-QmfvHcaN6Q-mS>7s`!K`Z^2t+^F&LF%h3So+`!^(EyebIIC|B-Q=F`~ -z*e}{mz(kE@$IilaTuU*|@~#3KzuC!UuCniQaI^N=6F05cgt%9h{Z%DvS9tfYUFdaP -zi$aap8CKbGWZmcZG7+((*OqvbHp^4x@Z2=PFTmR+59km*i_ou@b5uT?@JYq0Qt$;U -z4PdYh$IRSU(I&AjIKdZZ$XF;0^p=!*N)1X|a973GSYgRaeys3tck=~{qp_yD2GKm2 -zH^msep>}!gn_?V}4f@8~ZX74#c(mS7x4iC6(THQSzOjzJ5&C*&jyGZ3vTdGiZ;Ht{ -zPr=s1k^avwJVzu?Y_C#VR_W$$mUPYO?Lh{0g_@Kv1d9o%=EFx$XNQuUvd&WZ=HRKQXeAawZaKrb}s}ewD^jd+`xz -zeYdzO_OD%w`eIYHi1V%XWlM8}1v~c)Ft{?pDBK5A0AhH`Zq=uz3m%P#Dtqa1Pi=T- -zzwHzREuBqv8?rd{0};6*0I)_hj)w1 -z^~K&@umOCmRG)6D4NDa3^EIs%&_f<|!c%a>`jzEUicgff)1KP!x2`EjYTbriz{Hu` -zknW(ft-PuDB^Ny5@xrn5 -zq@g?l9eUxd9cpo@TH*?i2Ofz@p6V-Ei#I44DGC?u)+Pxffqc2gzY%OU>HqPrOzB_K4Q8| -z(kcAKK{^E?ba2R-aKKLGWnfbd4Bg%vJzq0C{5Jk>bJEcsiFS})c&!|PZvMUcuj(54 -z7?-D3&YM!B!QJqM_*ngR@qXM}hTn(qw-SFl@n^?hNqua?)P^s_`g*oY=2#Hu!p>EX -zowQMSMvx57^efde!z!gE~obF37NR`l47a -z1^&vHztp@bE-}IacI8d@vThe2)NdDmXFQD6D@u?>{S97#VBl)eR4<9LX-$<`d_k?@uc5$^e-4hFsy*(&@*k>=VJ+cXr -zZZaYT_YEcC%O;{uCPEIqZBMqYZ6jOC-QcthdxJkiB{7~-C{H67W1_@2MA8nGI0lFY -zyKz%%vdJH;4@75HLhjK__*fHuxutZ_d0_7?^{%J=PZQ(pn_{b#G~6rwX+VGLf#P6Y=?7DR585qC -zySvKwE~ZPCzFn1(ZnRgX+B065HkekQ+>!1{+7jFLHt)y2*#XZC4bTCtWYrqT8E};V+;nO^x_DFX++A;iw -zcLrHLt=w| -zn}p9ZfecD-3g=sgk{jC7E~a^sO4D6qVNG_gN%Oc@QJzCawZw}&(NFy#u_N3!sHgZ8 -z`qNG2bTq>2S7)iYT2+1maXCw@%~CIk@fGm9po_>tAJcSCzNLw<3G=(KJK~X^NpG~lzLo}i -z+CEbXJ!y;qvO#WI(nh^(670gv2>OOx(Ns_VA&bkwD8SHF!?9i0#xb(K3if^R&+L-& -zCHfd}4G=1m?ilqlNO>QKpW|ta)l8aIPY_}gb&&3%SocNN`vUIrOuQ{0JDWUT!&9eJ -zw$8LBFZkl#gx~xEN1-yc6MdVpwH*~(8AdhU4`c$PZc{&fTs8JI>Ww)rPwcFh89H}} -z-OMO=AtDi-0>eLY%mOm%sVMB!e135?_Brq4fAG6UEXsf%x-2@k<9xNHAtA3% -zCB>bl(sU_mu|pk;{_tkB@!zSAPzX)#m&OzL_+@?$IxJ@i(1($4yix3Yn8!o5SIl4toM -zx^&4CfZFDgM}aSRg+Cz>k!Jl{VZ -zp5ob=6pbl6(}v^O((&xfSva;y$F|IAIG!sV&&^E3alUk%pP7u~d!*xgGR-(Hl#UBC -zN8|WD>G;0PQ8-473go{mQ;*}7((%enEspKdu{~3c0CAShMjlcKy9Tph^^81pGjwG*4R+3=wI4|9 -z$f5R_rjfsrS7P(4S7!4O(`0=oD=cdeg}XknHerBSZa8*WEUb?JXP(-57?y>|uC{Ax -zM5IpU+%{EbTTM6OpFj(>F-e{j(dKNci5-{=exU{@t+OY9jXR^9C)j%$y&LNY`O3;N -zU`gV9O7O9=fgeK?5WzW!3elHk|g)ZI}3%fZwS{DV|XIqi$J=!}3b; -ztuyFvCHwhK(>r3!-bAdsCcj3Aka_f6D&y;b9svNm&@%A#H9{)w#e5PT2}Q806g_&^ -zPq}<9~DCJX3^z? -zSgp8d!sip#IaRtl96I+dF>I)ylluAUjZml~{Qj`5o1|CuIYyDcnDLzw -zs&2fI5L5CDa5ipAO{fx64UB0p6u8DtQ&0IGvA}+vHpQEokc^!~s$nqnKT?_?(xCOh -zwDfEXG{hbSFH0T8M3EPy4f$nhzdHj?Nwe(0<^FH3$PUo= -zUhe;(pGo^IR#@3V?$C6h7QQk}@^4T_QNl7v5DR_DV-OY6e7XNG{ow9FJ5cP|96Mvo -z!+41jc%+$$`gX)HmQRFm6xlV3ks`Y? -zQe;<#*nN_ia9mfEfn}0E@_z=O+Tl4n;KRGbAqQ8q+{r-e8*MZ@qWA{!O~{aovDSWG -z7C+#ee~+I$!x8CkNWs?wr+!4t)H5#{;Nu_7r2>7u=0-B^Cf=CLf7EJsj1^2^WL3c{ -z*HAiA_+nUrRemKqUHJNp9xDe$0*>;T*T}OPu&RG)_};Ltm6>|vm~8r+kp3eIj~Ubf -zdDeek-P+2eBh8FsdXo_?U~VhjE=HDJ?w=YW4g>VK3jN`^j);VS!{7~uCIgdw$qodd -zDNc%7eYs!OYICR$s||5x#&o%VD99Mq=x;K|J@7Ihw8IMTJcoUGKGx&4rZnNxbN0ms -zuWb`&4M#F#7!h0yGutxTBA*^9unM!^wUvB3^Dr`9|D|+1pTGtt@U!^{DUuv%b@Ben -z{#rJxzv5CY*@fjfGWa6=(Em|?S#hM-Qqxz-r2jv^c$9Rk;^9%ytJX{e@(e5tOB{2~ -z%5HnGVh6*4ktX7p42(1$rnfb#?A7uDFYy=_ARgVmm28UqSRQ7fEWB}J8F4O|*3H;7 -zSGaIKJI`7c_8VVI>8&261_%c7T{jDBh78`UO(nwJcn%zyjDCP&)V__I&|C37YuU!K -z+q`;HzY`ZBTJ7E{=pjk}+sH?+>+8SwN0J`??j*}ij*WH?$DD+U2;3;19>Vu^(=9Lc1SavMIUH>yl8ZUFN{{mle8&H -zXj53f0+@6;WoIML~0GXK)xtzQ3 -z*4i7APo(A2dYO4vLA9u;ug2^v52~4OLr>jUhB+W!=;(@v_wa#Wlrpd((kDwRIx7!G -zG3f;|%p;{Yfuly!oX?zcC-N#HDm<$UT% -z;(n4(m)`|saauJPL`ybiAjb%q3|iT?v5D}V)C4&d>*uCx1F}@hS(*9B=vb6B>jrDy -zyk0rIZCs)tj~>NGLADHr1zL^uy=5ftrgaHTIJIjORdP+pDKH}jGMkX -zfnvOih+FX9bUBj!(jc;^5TPZshg!?H>s7I^0#oV}&c85w -z6SUT1DSgY(8>mTk`o@iKwi1)XLF}9u3#~g7Hk53z_5T@pt2wUkS? -z{^xfvi$>rbg+D!!EIn~2o>2bki6nS|P|BR2QjU>QCL^WlS1Dy4(&DgFUoQKT$ktmZ -zz4EW4XYrhc+G9A>eS>kk6x?a_8g+C)HZ|t#kS~d7Qp&k=fqa&vEi?MgM5+IT7VW@Yww@4#H1cizKRQ3%w2ky778W~-e>>%7!k|`* -zRn}^;+E^_DplE4)VfG`a`6ru+ll9_ -zM<5s3`ag5-5;c3lx;!!OvNq)a$~J=^9Z&?-8cpAyq}F*z%IP^^@yUuB&P)AMUb4=8 -z36t?V7_j00%32jQjStmqm%6wcGj|oa*U{zB+{> -z$myClVOO%3nGk+Ar%vPV4(P(ItjgxY{bJFeL$d4^jXl-MrkJ~Xq+fN{D!g}_bth_p -zolZ;yxIaJ4PARls>>VX~7-*h^fe{2BS#$X?D6CF)AlXUzjw=-a%h*KYhW} -z@E068^I@M>d8y_d=0kh~kW#YnchnVLa!x&~!&e;I)I9nWJfctzV=iVHyvw*^)63y2 -zz*gC$x3ivuo4&*vfmC*IV)rWZkj~z`=?LV#YSCp?`5qCrD(M;riD49W3k+h$-Nd{? -z{bKB`elZ5}0qcz84>>TySj_{+C4@gkif3Gh?6xbPId_V(?nui23|;4EpjXRTYV;5wTfMT$wCly50y>VJm95hIjmH>s#=6L$N){tD-z>zgOvTu|lqa*X8FDBWh%hpNaldF!@$hJV=_VC_39>`U -z2HmsEW^mf3-4a9-hfqu^FvYl1HyW-atHh -zJ!B2)9mApI!PG70EqU-^j@j#H&eN_8m*j_J&i0kb!JrJ+<62p>gwmz1)BQ{VwDT3=Mo -z1bwViJO?Cnt0?5YeRcEJ>SOidxxAI@r)AdV4gmL^Y+T&RW*CkYtzTYVFJ83l$jv^c -z<+~m3^)tPT20mWx9UKVO!kC<8m+U)fpjs;?MRn-T$G!`(Z`ABeH8lC*z?nndzmP!4=AJcwPlmm5DXwS2k9St2O_Fam?FkpXSQ&kmr5SDG;ByxAk -zgG0Fg;syKFvMG?UFS7|P~@+k8Ic%sKJA)*%O$QM5+!y7pLL -z3(tZtj@dvQ?qZ0)W^n}T{wm&Q>@BS`tXP}ub>~LGqntDa@_;*6-Al(nkYS#}K5mW} -zdb6GObK|f(lk@CBc+0b}+Y8UbACdG@9DIO>Lw|#Zd-$GNm^@7QO~F47Z76d*3od}4 -zpW4{NfR`oDQ6!UfmN-r<>#h6V@bi-qkc9={7!@tnqps4j!z&aDer6{#d4`YPG_5nw -z@!2weEejmk9T|w-Wn-qK_+*aV+Zr9i{r3&rp|~TGRp~q5hV6>#nmnTKvtk9=G#nZ+ -z{5I-?&3X<0%Z~06FD#V@^BDHd>9)zxCHyXE^~!?_naPma%WRkXpLx6NsQxh38TuH; -z{GYE-1PgiJ35Lyj)u7I_rRLj1e&Tgxz%(V#)Pu8cyk%*g?CPjLR3|{g;<&h3cB}1@ -z{QGO(7P;eut6VhT%w^0k&HJW?_5WoB8~EMmcUu3Jo8;5xHMA~gMhVWIH=M~1Q*9=2 -zGMjs_JIthrv5m0Zp1^;^E|QM+8ZVWyS(m`{N1TDg_ZM2!AO_)OJPQ4BK0Gs~Wk4gp -zl$kom7cj*LpY>igRiW);gb#Z!nkuEE_j?x&Y+qj?9e3c^z1}GuAI5Rbddyi!{Z_B- -zN>8y2$E+(xIDme!XrQ+^M%drGTMQam51XRwzUXKb`H`)n1ApcTuZv8}>ms-Jb?AFu -z7nRQRinSHr+9ip_LOqlA)4DS9OCQkh-{c3UQ?!J0=hqFcbgpZe58o5!)lHZCH(cS+ -zgZhA!&dx}27@!Rit>K>B4Q$!ZJ=1<992*^Dd2S?sAy?s3gF{IO1#d8x)Wz9HnZqx% -zu!jah>DR!1#zeO;5;tP2$T?q-@Kd9BIm!=60AAx5drp2*7$wv_x+a!BHI-K-Gocf -zwwGn}sIGK|*)=Gp*)+?-JgQ0A)!7^WZYX`G{@OV($X;Z0U*CsvO%@zNm`m`4(WjQbEt>a!+Q(@BKV@$M-c*^kkDrs1y=j}a -zENRP5()UqfkFxrATr2$D3ouZ&t7@ejCKRd`! -zw;3Jvn}lU-3rG|cY#BXm3OQ||`QOh8s5AfX`u(oo#Z_|l^Pcy-=Y5~|dG6=FhxhL6 -zrLm6@D&V2GnqRzw=DWXht2)ndC2J;$X~<=`2YFhWKCX*JUgZ<5r0hZUtpWbO*Mx7P -zfkA6r(Z={c6&VKW=C4Zh&XpyLXK8X)u3XVNGXvLM8R+ZkYH+AqXLdbft8w7na`(1| -zSFT#QB)nJr@`II6E$DsrdIRcg5P!V^&s(DHQ(m7as`UW}dp5jsQW*D-u-;7guxlLY -zC)sP8)>UF@%83MiBv4$WS@6V7!+bj9q!=`jF42J}V! -zzmM0i00j~zcY5&sNb}(T(Xhf+#jyDUOp^m_pTe93-8pp_yrkh_()wcX`nd`gFI~`H -zopn}C3i4Szz0Gv+$|yVRGT?M&N%PHT+tSJ~gKa2muuvp~W>B56&)qP4)-oZd!r-j?T3VYyzO@~g#&$n}{ -zX}cQR=lt9D4{&_UnGW8zCkp5qG4-6)A4%WFl%soHyI0Qcc0V?-b69amo -z_WW(@ZOZW!J_ATprSMqqPus{}Gyr3GcU3j|Q#>ji&EpQM;3-7r}bf^KJHWwW(;dVO(Y`OC=oxg7m%Up{}dT;-)qm6G1C -zDa+RU!&UxTjcdGJ{ -z!*}_{1fChC2FI)!PvDLIPg7yxC_dep7A|!*I3pE=#bi2`=$9n2$SM24P+ys9@IyU{ -z*(yKRxO0(cDQ3of7vf%8Gwf_bESK|a?cVsO<+x%2Pe|Wi@-@8Ds}Ioip?f9Ol0Lc} -zPd7QZ-331c=8@Z1nD{pvV$mOZ4FT#)>DxO7jO;Wgy^ks<>*BWL7Fr#LI2l#XRBy*Fte?25&tW|s;)bEKHI -zpy$MTqU~w%j=Y)BKA)tGMd$V0E9Tf|G%e_!iKlIXa)`Q-2kMc**D`axk-rkzdrbzv -zEn|7T^h2@Ry+iz$_0X1%Ell-ZalCOZ&jJ}U4cATTrQSaSsEv$=nD7u-S;w#3kl5MK -z*E_vDSJVuI<5h#T%W#SDfYG -zL7*?d&v1w`?{zc_x^l-RCHy|>@{bH9n@=jop4nFRURkPau_1eNb%RC&ga%X*%!ny} -zY-4R7;(stp*)ju>trUHTJh5i8K35x}H6zxjM5o2mK%Qt$ot5HhJ0@GCV`=Z1aAa!@ -z{5~h)bNUe3Zcw6e=WJTDDOH&%KWR9;DN}aR(6Q;1LFUoH?oc -z&$J@vaG7$(>3P!g)U+wfp#NH>1WhLc-)cJi#4iAmyKYm%rpP9{@CUa>zMx(A@QPWf -zvYiH5%_&2TV_2)sssgKv+I%@Wqvstdzf+FoNj()!Gm)dJXTFO(a1FB#J`>rvOI<=# -z*Mq2w^z5J69tg)vhB~mMKfBxEA_fTUd;A|JzX14=uF^RJwB(jfDD -z963KL>$jre7}Ftx#6l7+sDT<(^I7vpVvL@>($S;m?(omBca#nWO? -zDt(aN43_j^Z6RAjISp)H1LYnUv%5zDIoe`leLhF+*)dS~`VdFPeauG0ywrgz@d8&m -z$1RT5m(F?bx21EMx0KGQ62HPWd`%NRUFzM0876GK7#I^7XClv4dwJa-`Z1s7d`#Br -zU|JcQyF5gr71f`1iQ!o$>;7PaSghYGDw`Y7)9jc%sgb!b_#!E#!e+??RA!TMxn-f^f} -zzQR>M<5$g=NenH+gU?-YFl5EYq7U47nvSv_!@M251o>?xsfMc -zO>HMe=LPMW`w_{WvYyQySJ~ -z1#eKHv~1{Nvc3tDr>)OGBLgXkyp2A(&+r=l9}ExO)8bVtJz+lHBJ8m_vFIPA*nTYf -z)(ON15s$A_#Vzmw{5G-OI_V5bSvne)?^oL~%hgc%RPAc@T*;pm?tCXeOBi7^-$k}| -z#-l67@u~JGSOMFhvPQFudXW|iXh97gBLS1$n*Fe)GwA74Re;2+J -zTDMB;{n58$7_V59ghN2t1m+!@zc7|^^ozSux~J=DR!Eqr=iCWsLw2Fky<7a=nwQIT -z?Qo}K9M8b9-&;B9j7?#9^@<(GP~SG#b(7iY!|YXjQaBIgFT{7fu@g^eL)2k9lVvzD -zhaYCAnqOH)qui+s@9g%oWkWd3+;`xL_dtiVsFN$17zv -zXryK#-@jYW?vn}c#ag(eOy*;?|L2+dxfDj8D2^ig58} -z7TCt9P6x!4QcRsW@z4<#-=J9Vl4xwEdK<)3ZbecMULiamwHMedkGkRWzjp{d)yv|q -zi%*78TN^eF%eU_|1j`s8sBpBg!Es0Mzcc7PvZnvWIqAjnR;iQ^FE%7l%~)5IMWie4 -za?p19S>MB$39qIRI{jfc|4DlKYSgty(;1tpX_sk|!}D&vg9{OQ2lQ32(>3iJ+8bFr -zl|Apw{ukyM)DmLRoBix0D&IkrZyVm}75y8CieIvFomQC~GnA@|dWSCbiYRZ!wJfZS -zot9>2ryj%+2XX9gP`*n>1|DJ@%hZdjnR>@)=*g4~li68YHSq9Vr|zQm4!fz4VPQ9Y -z7uge`r(jG)c#5LcbT8=A%3cvyqkp=62fF?d@ru;SuV6_!hHC`&x6$!Mh)PcLw%UH$ -z1JBU^<@~gtl^_o#SQ1fTc1QIWuV<>wxaDIh<8rSAYnCFwuP`?6&=7vh=ZHYZv9+zH=8_zfH;uBx1NRE2#t@i^hejlp!fDJsVZdEU5Vs( -zYP?fj1r=4I!A;l7@U&rMHtz=hb(L0Pprcv&%wQF~7c|bl>wc$GnXC+IeH1|i+m2aV -zO$?V>kH(uI43llI$kb$dxM!ae4_0L+6tqKS0s2M@+B1Rvewls?o)cfeZ#vdrrQZVl -zxv+iBbK>ig0@`!pf%@mf*Q}pI=iqa37XGaGTUzxP#Xp)gULfY1-4(zoSE--H9XTe! -z-u?lDE12l&pER6ph+l0#gF6D-@`{zNnAK!z%52K)WF$2by8qdR6c641Y(t`l-W2fg -zH(H%3UN*0_nAWLWKr`xb|K=65KETo`Ff(clAK?E)sOmf`EkBE`d-N&Zc{pN^-r`KD -zA?zgEp@H3Am(tv!OIU|JbwIziq$GN2xg`Y{X*QvQWm=sYLu>IDz&Cy&&Pd%bOAY0x -zDfxdBXUNt|NH)nQ9Ar)U-3hyY10+PEC&i=l4Dw`3<;{@toEWpdnhEPA{ti3h5m)ln -zokwJ_1@vql=?E5JNehou9MP$laGQGI478pZKyN6(Ms|DOercbin?A9y(FmT1svBB~ -zr^U!8gc=K}jirH^p+DN&&l(w1LX~!RX4rvtl_m^4$C?wWkp&*sct5BBXN8kB(H#?Z -z`__C8%}sm*P@=@*WeJ -z=Fi1vn~xzUBU6*=q517wZogP+H9I-PgOWYuIr57etgRY0XTWZ|Q0qP>-qmbSelD(V -z9z^Jye8h*EGfGy@%2-J?v?`G7H9%vXmhZK49d6`$(Ge?W6&2HU2?-v4QU5@0p6PaDe19PV{EL(uqG&{0srxe|jQ1hn{Du^gIKk -z=SlPy;hgx>#LxMsbWZ$fZr{b?L|?g`ViKu7vLe`Ab-PT>1(mQ6&XyTGWVM_Z=Qgh| -zgIWbgqmjqq?oyV+&e0Xa#`qkyeUcTua1|2gmy{cx3GYu%+QRhe3k(?_yRdla&WlbG&3@ -zLWJC6|2jla>qdnL|6-BQn2UK0u~eZI8k_s08sHp_%?VZ14y)W$h8C#=XKWMyxWl*Bfi=qbSk(N}SoRvWzfEJA?KS-Wg%lGYe}SiP+47&%lBR;aB0L9r -zV_-JD8EJ^hpye~%=WCMgA(dV!MN+8zsWt1%`lAo`z71QRt}0rU;3g%j^-AQMC~Fyt -z+Kl%m^%B~(-t>ip$Nn4s{{p&7#H@h-EpqfqvhXU{+J$_Q*D>T|LsGQ`dDe>%b^0O7 -zOPcRAwhVy(e__56eun*ecIpTC|CIP5dan=ge@4yqXnIdl&3SQY^NQJu@OktDy6)yx -zjqt~hgzx>l=xiqc`xs`a)5dw^)k=?|iqQ2_`E=hPe@Zx|Ceg?2PWBF{0Y0so^C)&JQ37?9 -zTskVXOGtpP@&Nj@JHYhp^wCtTK`-z5y -z@RwhSJRf1QmIZ5IY4inXi=wkojc+Mpm-cRr02?YT86%A4hxESEqiC%_HyYXLuVQHx -zo+Pw12Tuh*31Ux}3Bm?!TWyiztK*F|uxqr?w`YT@+`%E7Uj}{?T;p3Svct(jgfHW^ -zh4?DA9+keTSMfh)U(cW{43%;9b()h=YxsSS5ex!x6nB4g5=BqRuQQWSTjc8<#=j&Q -zO8cYPJ!B2%WA1<>W+LDJow%)s%zl>-er9GuW&N*!++mC__Nc3paJH)I4(F-LcydBNLv)VZ -zbHG)jP@mo~U+FLn9O<*()c3LGO$csIYvDX(c*%2jh-wsVqfp=gF>$0X}QZAzx| -zV|M{^?YJ7buRqH7#}!xq;`RauLw#tI8{EEb_)8M%`EmROvFzoqceY_4gD=s%@GG#N -zkwV{Ka49HS=qhGj?(dKOu3yUbUqT!{Qf6Jkbo916CffoR;mb7wZyVoAjE9`x3QZwM -zYU0dfq2cU1O^4ut<$>iG;3hu_8~n4#>^}&P!BpTW;J<^808@_=sbkSQVkSN>d{JVa -zx>$a9z>KU{$_&L3Rb#-|YioP;GF^wby*Qu5MpYk+nqv#YW9I&SCr8{>RgC4+ZJ$;` -z`4?Z$r{%2q`{?&En=A829XXoo%)?jk4KTM%vMqRvWvRpg3xgtxZEGB}+EyW_B(GrB -zU-7>=JW#?YOWYIgiRUv4>B!wFP6a=tni;X;kewgsN!Yhx -zPwDQiXiaaazpc_=LLT?z>g3v2=c_#@AJ9~5YA2XC709m5SpO%3e&2A{8mDESx;Ce} -zZ)tMv01tel+<@BqkPV+)+mU{DtEP6ihwiUhf|&RQm4}!`;(h2?%s8eZ&#x-RfpPAN -zIUzUeM1o~L_>CyDKCKF~vtk+}E1vd>^Cu;EOKZ{sS0ZN -zU+;GKe`t&-a^b8MjIj1EX?rxa8w<}qV5!aad?C)VW#ia6oPU?jqpN*KY|bAY$PCm1 -zaWWjdce+|?S;KkVzTvfKA(}g7WA^E4bNQHh>^|}>%tpQM#|+~|{7u217k_i{=foe) -zJ}RpIjw4oMsSJNR@K=mK1OArd@3;6{T9pXBjz3l*Y9l=T?z6ipTq6`C67>SmyFeDL -zJCrPZ)0P4+LcC@a81IT%bxpR(+zEvw)WA+0$xA44mysf -z@XYE^(V8K(csv$i^fCAX4meUmH2+PI=D#L8J7I+4N+h*=L?R)Y -z7;}GgM(nWoYx|H|X4EfmuKnFo|BFs9=IuwsXN%eClQcHFymJ$i>A4#Hu3wEi-@Y%d -zZg0bVjyT#@C56}tbcf6uy86XP{OVft4T;j#>Fv=svb>)eH9TDE_wABN9#K=k4DJ)w -z=-ZxK<#%0BWS-8gvGdICe3Wg&;aK!Zv8t(nSMsGbVDmN8oxhJx>mO44i(+~&+I?3p -zQhp=lIhOh}YkV$@=7WNYStoGS^}ZDe@Ty&j{8q4346`5DNgn*$`YT3^lRLm=w?mv~ -zyE;!D~<)1iLv%_ -zAYK~_x_Z)VcH+aZxK~xMqX^Hl%02Xjnv3jc%wuf9 -z_%%1+Db|$|567L_9n#wRQdu}&vQgc|zZoScm6PO?bfettsD&3ZeF+^hJe?)bLcI_) -z8`_HZh&F42cZ6pzzO!6>WBx8fjmBWuEytI(JDyR4+Al!tvG{oBy}+ -z>~44Z_Ok45J5clT)|`^+p1Wy=64VIx^$nfwtwTd>Zf0w4iKpjo%#8+x)X3SqpGiHF -zWR;mNN5)-u2IwhyK`%Wiy+xEHJ+3FCgm?J26EZhrHhltHHzGG0c6fY^(aeMT=-d%W -zf_N?mt$a?qR?CjwU%msio3(F%cR_pGU~2u~iLIg*-Pd+qqw278m=AJEwxy!QS~HtF -zIiThfXZmh!n2u;~`}h6n9-Z&+0S~YhlLGYhB*T``g#Aucc(}B_%qa_FdzXLd*jm4K -zb3uA-eEdvDKUQj#p@xBfeqLQ2z9GYdcW)gXP?#J0x+19_O&H!7Xy3Y@ -zNZmJFIqQT&C|{piZLS^Mlv2x#w+Azjdus9OgAIrPl18YZmDMF@_d68><(pg$PFW_kE2c~#4*QWjP7I|r3EfWPDIHz+SJ?OTIVxJ-|sSKb2?c^ -ziWX{VaqFnyM>``sNaHg4_}&4v)2-7hht;|pyx?BD(-1RE=hJbgu`Q*3*a8;+E_NDu -zankH4t8v+^vt{{#;n+Xn#L(J7sD<=!B3c6*EUg|C9$7oEX3EgZkv-Q-tCD~GhHlra -zJVZ4@BgBzj#u9(Jt=*3wEaoqG{$jY -z45Ho{PFRi(M9zz6VLmt*x?E$d_lU&QI}86S{YAsZABMGVg}`eCpeFnbVaR2gBk1J|u`gBH_e?8# -zeMT-RPspG=@%!6tO&YH#o}N=<@;QsP0hyrZ-85$18f)Sf3s9u>X8-WsT{jY%QoM5; -zKa03+q*9wwLwR+hd>I(SF#l?n!RFLesfFaTz;i$|184LtXg_O%A7XbZj!CHjd&jL~ -zZnjZmZ2!|2-TQw>3M@lwpJd~xv$(x!1j%CU3xPFfGUXHZfYgKi)RhyA*z8Ut$RO_Jdo*s<*xq5gP5rO@W<6r!b -z6XW>_et-34*pNX=p$VbWzASYmV~c?>|~{HpQAIB -z2ApTi7S4z>Of#OnJ>#r)U}M+S+;{8PlfCSOyJmMlt1&kSE7IBcV>y&I~vB;DX`bKzWj`N56zo}FR -zD#fIU_lYAH4h)PhlZ_t$)+j_PVP*J!GcrKFl(-+I7~Tr9<{!hih-(0=BRo?h{?;*p -zJRFEZ|KlCPun5nfoYKDjX!l>>_gJ8GR`Pky;rwp+jgcvy3vC)cBebbvgoWmqMVM0# -zTEE>eL6n8xsc5TspkkY$y5W$c&8=un>Wuy3qmCrS;`BCmn@gY3vVwdc1A@e3x0KTZ -zL4H3tr-^}@dc{e$Wuj$2c>%bf54JQ#w+K%$4RP|DQ5jgH$A|azq=PwdS4qOiPsA*1 -z;w{W=dn7x0M^pS*;-I>dij;J6%j#yCe6qJygO!G{0zl{VU)56BN!{&V(`D5gEpEv^Zy$Lg!QJHh| -zpbh+MGw^)*-$q`HFr%Rqye%QTpnV>j1;0ecIrt-xACijeJQranBQ~3_>QHNHX8-Fv -zJ88rO`MC3RrM!f>G%qA?DPhLpE46+bc`Oo-FrJ<$XTF*wXPzHk!F-Qj^<+6?!5^@@ -z1zx_usmf9C|5&POrS@`4JSgGJ4;mj1Ps+bfGy`YOJ6BtER*ti^yt}6EaMBE>jYvFexS>dcGRaCGvYG2 -zZXRn%7Un{)?_W`&Ki`@4zu?9>`gRJgMGKmwrR@|?7yctl;cmg$W(co=4|5<|7&GdJ -zrC*3G#>D|bxTr$Fsu<14ODFtAEczgx;(CL8vU=QA#4+M|4#S1Ie&D^c&W9BB!tnxU -z^yoj95-N=uVdmKhtcASBmw*JE8B>qBhKN7)3=5qqJPm8U94YPUKOT!-I`N;m6L$+| -zT9qgjWlqHLEhnL*cKeQxN_YGL?fph{Wq&+_q7)hUgo;-OlkT4sh(-S#v!Z5JAs0V) -zQR(rxudx6qvqd7ezq*I9qRhE*?3}EP+Cf%$&&DMiL&z|dTR35cn$)8xwyWQm-lB$Q -zum~;VV8C1^%Sj0>0`spnRJR55W?2>ZL;V`OS+1?2%8`hfmIBP -zWI}5?)BjJzBNCcy$aZOS>WpbaWu9?`+j~7KGs~lll+og^~?OM@C9*ySmqsu -zeU~FMx`1cOx&t`P`x(WVZ6z-_WFc@DuF?eIzeHx73|>kc309urH&tQAgFHIP{|L)P -zSl=3KV$Dv;tJ!|@wy%%Iz__muN=HsQO%J3$DUR33(Buvv!^{GFOcL^W)V@~KJ%aZlLdNS+5fdD?}G-M|x3a>%~)own3cL`fWZ6B>fTuUjj -zP}85mWM)1r$Hd89N#V=W^$^*rteSjJt`o{H;^3O6yfcp$58@4P9xF;r(X_ -z(b$v2vJCZoQ9QMDPZ%H-s~ -zjXW=yP!sYzCw~e00!Dr=@D*zi8GpWINc@bG$!FrRnn3oT%Q -z;M&;ft1vFIHWidYX3ge;R$hz!$Gg}GsNoT_W}iE6Nd5cmb)1yku?5*5bhM3r@?;W;e%z!n$I=&A -zQgy14v6d=?F1(7^8eNN>bjhHdEFX8U;X`6PN2VX5i$=s1@#n=`?Eif(a;x=6Df{bP -zGx|c=H<3fp)8Z9bb0cH2n!f=Cp4MpDYW*hi;*V>^SlfGREz8VYn^5{q&? -z`}B`%%(b_$_o<()U&Z?4x7L|!153ByPHUr#$>IbmH|<05GyDb9mOVwhM^|LV0CVjH -zfE~U;PO8z#-SQ%9Lsy_inJN@rFgkm&L^z^UVM(nXnTbGlTjbEEpd3fpjpMMJfg$u5 -zow=yfLBdDpVbwP>AzBr$7u8#r1wF-yjb)o#w1#1 -zu-w#Vb5h@$A&rQvXQ7L=xuKAhIra1j-CYwE{Hl-A&I#B|x -z$597N`+)GvWg4KIWghee*JC$gtA%RdD&OoYXXBW>n^9Ze -zjxf-P#=IPLE4?MMQ^3@ZH}iG>6WDVVcFzuAPj?{K@KGS}?y*|n@$1B_o3_|-v>D_4 -zJAJfGmiueiq%=kst%XW?e$j8}it(!*gMD)Q$|ri~es_m+r}-AE!G~D|@;( -z4aaxk_~|&l%cyImnx=g>koTJfe5V`biRXZ`lR1B^L2grz=aBI+@=x@x6>kg|-sz#t -zm95=c==X$exdF-{=Yl&0Hh~HI`QM2b8X03;L1xG*vaw@8Sa4v-l7k_u3aII%T6rs1 -z2dmk9Dcaw28uPc5nz@K!>h`OJ)qM*7ozB8!rt6{d3s(%nUCbipK4vBJ2(yk^#csym -zTg+MJJbqWP0uzyb`xzE%|L_04#W3(M<~v4#bG2-ubcNxp`QNUT!;by8b-GI)Tfnwr -z9H23MC~_uW0{SZ!{byh5SGF=0+On+tlHtInDg1`gJYHr#AD%94jk+%xHkZZuR1d6g -z$6FW;My_weoFC^zI^FVId*plMON_Rj3*Wjr>={Nl3$IN9z5qt}r~BAOy8cP`T-e{! -z_~F9n9`YJ}?q215Zz*99J_Y8W2w&Xa+<)FELrfBxJ2(@%*lt)1c*9r0HLRojMJr=G -z_HTEo`|&OZZr!EUoekX=x=S|@_jI2c+~)%@Ba=_BK*Bh9+Q$@MZ -zg*Uf^Et_^<=KPlRPu!}V8_{}k9iI3@+wZV_2axzBSZlF8b$L%umUT0>F}aTh6LKFp -zw*&K1vf}6T+z+LzzvMrHeU?pSLa?`-w^6+r -zF*-Z&K9c&T;2vSyU6(UD8LbpUhyN;kU@W$NZJQ~T<7?X}AR?FvjOoLrO0$*!CNinp -zf;VR?U0sP;sauH_3MTOIUn(|LDBBT1LSL#>UT?5SGa!o3%)I%ww9J@oc=l;Gp#={+ -z&cNvKKg($F|4>FrmL0?4{~?HOSZ^WhGnIN|`l!zQ`o9P~8_olEt3 -zNkTg2l*BdhKR?d6h6!)Ss1NuywDtJpqd@O?RMOWykSE?dB|M#%qA8+ktR@64D;9W~ -zK4NTSpahTJSgMU*fbWcQ3Gh_d-v{mGDd1ygg#H_hG0v+8o`?0%Na*-Mgsd4~3I$dc -zT5nwEyE3L)V`i%rhh)`3lY@WXmLOD|r#8AGsPJ>w@sVuOohZmf|lV2`RXv)R2bFj6ZyP{-Xg36JJmsPhR10t92j{Xr^R6s)` -zA2yy>Vm(TX2wJ>%YIk=D?X5b@>X)LuQA^22uHv_tuTfhVBvfOLM@J14wo3E+c6b!5 -zl2yhcO1I4UI<8a!E|Vniv=`%fr -zIDzIV%^7L|$3JRq9gfRSRiq}ixy{J3K7;YSD4j8F1ESdy-dtjYZJ3Am!yOtVyz%8f -zp?vgDu&F4enjBGgG5WIfRd9!TqDL^VS;UVxv<$3+EBjjl^^WwAx}y>$JPb>9iiw?w -zQW@E41MP1%u-er>B&B -zZf6){V3C0`Pb#eA!ov!os|!re7^_)KVTwvf?aU-StL@9vq8=zZ>wf4KqSer|=E7#7 -zy*<%ifLn1Mo^=VH_3F*Kz<#K#DWN$5mCUB3u;0}Rov+pvtR-#TsS5T^)<#~8Q*O*} -z#=jC8MbGyPJs&+8p0VK9z~Jc6mYH$mgJi*0KI83hAH`HZxJ?XHJ{8NdZ(6c^$DqT+!fHzpP8qCTwoiobQe78och -zb;M+A%u=1-kIZZ~muubMxe6KG%9eq`U(Vf&`2-7bTBCJf4>yC!&1^g1`qq^pdF0>v -zKb)}1Y}_ozG{TA(dEN)`c{w+Ifw6w=H4j!3MeaU -z3zvHOKhI46U(Y-$K4r~N*^%4*f|yg)i);zXtO3db88ov)tl5ujuxaZu6Z6?5mV3?Uj+Xjc{k2jw@Y4ZDnWZ6jakY=a{n;Fi#~`EQp@eL?Lu<7bY$_cz+cLk -zNw8W*872R9EP6`fwm2hMS~uLxIB$?VldLDM`c>j8M5L{@<+;m#w60BMgzZi~iFU|N -z7E|=Druf&~8c=m;*!cH6FeD38Hd0C}V=i{OTvww@QOY<%__kJdqbnZQ`5@d>7V2b~ -zDNt$lIOJ8oIrV-gEAt})7cZT{6N_HE8GjegAor1;^)TH_s{ab3%T?_BK03c=jSD4` -zrSBY#9nYr7u7UVmf?3PvdvLbDe9o -zxi``kxm_poZq>=Bfz4%#nq3l;g#4u3N09(%z#`ZCxhopXw2YWR$7?95<#rp$?rU_l -zA!^mO@}4l8*HjuWwWaZ=Qd6ybAN@frp;B`xU@#snrs+>rPURnMFDQ7leM!Noa=D)Y -zYKh)LAx4A?7j9p@x0jxYp2Sc=y}@WPohe%Rzdg;aNTVwrY14=4j*R(g)Pu5F`J#ts -z(%ft{#h(^q1~gcBt|dNip}q+iIe3Rr({}28cf-oJx<>@;&LgI)(M5f7pev_h{EkIy -z;Q6HY!Q_q$>Kfy126cn^BjT?cXcjw2*nZ)F^N0;PHkC)FA1JrEJmM_OBTZoY5Uq92 -zxZk!0etg#QuV{LVwdjEOnZizWI#4RfD_SsExYH{wZKtt8;e5J27yiD?r=}w_IvZGw -z`$KNL!8+$+j1T0eV9bTWj4x?cJP9-MBF;v>{Lz?yyWivQN4#!Yqo*uo<1K8dHa);l -zk6k(>d^Qj&WAi>~2$gPd!VkQ4z=?3B5x(QqTzy|8QiCY%0Vp8Wl(2auOk -z_I6EnYO}Vn>#`GWgT>QRY#|ho)X`pzy}I -z7UR`uSC850=F_Csm>XCqwbUCu;9e(%rrfYaS#VxNyJ~ -zM^P?9CNN`aF<*+jc`fc;J7Y}VUMV(PYWzV?y;X&3F~6Uz)~!4=N}}W -zzE55w!>FO~K_$vP6a1W+nmQ4TU*L*m>&Y6mI90-(s!Zpc_FaRiG&GwUguI?Q@nhzI -z%Lo>C$!D@^!S(+2)9i=K*lI?qzd^#1AIrCDCu>`^E$;t{dny;2-L6ZKd#{CEWzbsN -zf|4)9GA(VfUW&|@mPIRVpLOerDDOlaDtO8UHnv0S;=aNZ;f|Mx&q_Dymj$Y|a{hR_ -z%V`P}AX2atJ@^yg-#fPGaPgYri)-WF7ZLt5@{`7*-^9o(AB%n!V=!O4Ju4zs@Bu&0 -ziY`Woe6Ej0xgGc~*}IE;D@tH#k^a?ZEa_i; -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 -zY@AIhZsvI?(j`& -zs>mj*?G>oow{dNKZUo){nJ&ry;_PPOO;|8Rh>T~`{4*`Vp4OE6$Wo;ae7dtx_b)#j -z-)h0uG+`z@NiVrG1wFhZw~zm{X&%%}G~PPAC+#2p-2#E)nOTYPUoL3Qxx>ew-p)LN -z@jEO&!?Xu-r2D1WKM0&s4T4SjEqt}9A-e140LCuSl#C3!IlUOUrYg?d^WH3jX69>@SRIU--n*?_p(9;8AnS* -zBU3s@STBeD1I3StyMZ*(@h`ciAoJmSC{h%slTC6dGNFN#Eq^*9IqM~tHrNbi%4Dc> -zwEpbK;SGeuDTUHt2#m=JUfZN~opfrRJn8%dm?Alpf@V530e0%l;+GMVF`;$8ydq_& -z895f(n@Zl=M0o+MxjlLwmPqMwVD8By1hlt&qSjUGs)n_i30;ng-v-2U3*~*X2`I7k -zO}QJfwtu9*sY?hX1HCU+u;Ezrb?9R36F;>MI8XC1n(thSjENi(Z&+V)FsBll4vIGx -z9ufP2ub*<_pxD2VwM@WF?M_6tv-yh>9$B7e!BPFlrMO`o8IB*D5K>69#EX$HqfFMw -z5PQd)P=34?8ixHhaIKUOJ5h7%h|i9Y>|;yi7j!cwH-aze@-1R}aRYw5C{eY%HsZ>~DG}=|b>D!Ue^m8DMCU@kY!K -z(uEhl{P_`sUz&0}!KvMt?yB54Gq4+;{kS(yb~+ta;F1%P@(I{Y$;~vU?Mj -zESa?gxQfErABEUo9O~3**AEdwdr?!F80SqWb5Fk%&HO#(VJML6Dt}1F|2N^gq&oqD -z;%0C!x&CsxA#8c_tcp9mK`PUR;$1HA&!F79R#5AD>&8oX8!ajYl$U1mC76r7biyMSKfoYjVT2i=`&oxJMtyongH2jvs1!ET)FdOrOH@w|~RX{Ruv?E}XN -zld}Pt9u-hasO(AV(|iJ}Mg6pR-i`dbuP8U~6a0d~IZVqR;I~}7Y~;+z!r#x~h&;=& -zFVJ&fUc72JaNFI+#m_^#-0{jayWQb%fFU6XS!~;6i=ErRZE?}n*fRoil|ABP`2|gO -z%+hvJq2i2UN2tjDj!B$g&>Lr2ht2xG<~V#C(y -zO>WE{{t_J#&V8~K@8NdaShXgDRh(w)Y{(G06j>__2p@1|^Yms8te{9XWm}C#-zPJf -zF$Vn$c&T_#oh}SHZ|7}qT!h_7NVQYY9-i1_bEfc1fzob|e$=N#KWD2!oKA>m&f*?8 -zI(D6AL*HTcL2uJ5y-m6zAvY$_3{c90d9Fmo?}e?A!0VwAwTI_IIj+<#OwKsG1Nm&P -z>ou3Y+g&_v*4xl$QHIQ}s@dH670#8e-HxFx8Q^xx<5!{FZ}ip&A{7*|B831M#%e?x -zi{p2G0e7}Z5fm_=-6Ymhp*;ToNqAGCVkSVX7_~P57&rMt3TTo~U}u%MOZLwZC9Q*4 -z^l;4G)ab;nP-CiQ&z3}F5clqHBq^-<2H8ediPmd~Lf6oLO5gF$(@}*68Haflzu`_gc -z77vMrh=r9}e(BLaxCnv8nV(Nj7UoM>_;g{=1;T?|gHq53F6+_8o?*tuo*@hWKgQlX -zzNsqjA3ryHy3n*`=|;%{*o8vUvg4AraG@|tL7gefXlRv5*jg495H+PJ1r$pQSXyP! -zqJttcq!q`CSjKI1#+h%z;&i1^d;~$~IU$8yw)Xq}+_dU^pV#yH{r+fk*K^N3_ngoE -zd4HZgdL*Igx)IxE>k-t+Rf!8x<7!5%z3Vb4=~ZhoqJ8N5*Y)j@E*g{i_XhWd?@r;50E?g2{~77v5R+%lHhM-N -zw7-v{2-hBqaH+(a4bftJbNnWj`7o{mC4l6ZKwRl@4eCuHc2oA!sf1RSU~OF@7@w6c -zuxF)c|Cso?^ew|`WVkL?NFU)l)xX}8u+_utJ6Vt2e&DM8SDgXI?3be$&@e8$ -z!zPKEY$zMv>Ng1g~f(Dj<)wVVgYC^xtgUk-#$bT|lYJ4(Fb)%cd23)vA$K -zwE{E044E9Td><`C=HvK&lD9;zIaljVn0reSl2JL1iX%&drzUa`x -znoUwXT}>IK6K>PlG*_~=sD-LOl020yj^w5vVN_N; -zLB0IkO6?F0i$=dbw=T!5Yt=@ap`&eD)7h!&5qJV&1%6>oLL@iMzL`L|i0Ik_4n817 -zO}v>7J`Sl;z9LME<$PPL>!Wo_*kH&ey9-sr;im+Ky3xIJ+1yJDP&q3Kc}993qu2F3 -zGYjkU^`V}<7@bUfFS3PFCcFVMg7U32(5UIR@EwLk)W7ITsthH*B>l}G94D)wLdIT8 -z@+x?gLX|Ppdjj#M3iyhu8{<63C6!U|w{MTrBj!1-eY3tUzVbEcKDUJ%lvH6p-YwK; -zHd8BVxfO*^fPC{et9ka&ChEyePY%W-ubFV0Qc4jfpLr)U)cZ5>kd -zF7aaMJJiu!fhr9Zj-l{5IAPaky178!Tj+lY^;VISZWQ2Kn5X&G86|uRf-g=}aE6W+ -zs`O{c>k!B7F-p{prY(2OG(`XE5tqC)_IpnpKM<4Tg+Ce|HL@rt@qhK&Jp6T-N*e-oJ9sP>T_peR8GKYhD^rbn3`h2XeyR4Z_!4=6(9+_?f^VB5V)GaySEVj|zzv)}w{F<{F -zp47sf47ROJS6Mv}ZhXz~yT*fh4(G3Q)0fr59u!U5eA -zGhAWK<8Pl6CLkU@C&{@dulw|F)KW@rrrA~pOGWrP%%uE0F7BrpB^^^awHpOk|UxxLX$DoQL+3b&F_V3O~)W)9~E%WrLJh>|xTqn&! -zbB1_+QuD%{5&Yy$g@57BseF3(xHW0w(B??KwMz-QJvuI$r*({7!%UDv%v+?gIN;R8 -z-Cy*ir*?z0IbmZFK -zems3m_B84P>T(ihh-4qm?fWT`40FgTU<~FNFJXjw*wO15_M(*|lWL^JjE#A(<&nHC -zd4>)F7(Vk@g>)C9cq3q`hI(iH2>(gyP*45{|EYzzrY1xRG=YK%+0{TIXuw{=DFzS5 -zJmbPgX)h8~kpnH`mT^~JWY=kMZfHKj<~;SOh$(8+T;zt2aZHZn$fx*7En?C7LThfT -zL?B(W^T9t}vqDBFg)drhRvjo+rTgjl#ZaL%8OJN2l_}2-hP9?bl|pB%O;_Ee3NOV( -zYkYg8m%vf!zL!+d@J#7`;h7>Se3&^CR+-!Fr%)|-p;~no?HLWQI9sQ- -z2R?Bdk)L+-cFszM$|7IEZhF7xyWryBSFoz4^1bJTG=+~@KEv?@)UhA#ZCJkqC>AQ; -z`StP5D%jHAaI4bQ(3l?Jr{LwZ1D6eL$Q60){5f~Ydh%~>#xqcX*q;D7X9)85pNB>K -z31p%c|J0HqgYj}V%UA)6gTnLxe;aLW@;!<>1pSQuJ09}U22<*Ah?tSw8dLL?9%l%aOO3>a+ -zuNoCusJ|KLgBsT^liQhsI|b~O;LZuY6n_G2oO)aliDL^o=ZFV9#p@%1UvY<@-m9dU -z`u6{}ort!Fd6{L8lx>6;iei1>mmBy-!fqwcXxI6Lks4HSQu(KgsNXk|`F{mpRXBf% -zWE~Bn)4l>7!u)1ik1DGYoH61_CRBeH+rk8d^woaJx578R`RQ@gbZCP -z*2_;%b}EtgtG~QG;^9<__<;BkJmMBVkd9EJBTSK5L^#bn$V=W{H!v6`aY+kcJ|JE+1@}p -zS7VsJ!h88Mr>#StA2Vx!XsF7f8eqy>LY=Dqbb=ZclH%I*mp@hBPq@&ilwJU2uyDJm -znP{j*j=B&rT{5$M4%G93=FlPYm*3}o(D9IXuL!He!8Gyv(4TIGV{^#^N>UdrI`df8 -zJZQr#wn;kW@F4>3BgC%j9)~x;up#038Ma1c2lBbQR;Nb$)t7}~FI`uZ4GXwqCV4-Y -zF`-?Np3}KH1>D-yAe}Pk8wUw*CLa0iL(7I>Rn|x?g@aojMO{cW{wlDy>$*_*iNx`% -z#BWbw=dydZjZYqv_>am8>G{IwZ3Wwgm$Vg+y!7qr1;tZ63erqxBk+hEx>mQ-*ne6#TYo`dQ`5I>cBkg7-oQlrk08;hy%-QT?bw-hQ#Y7Tm}- -zAs%lP?Qeybd>80zJL*&K0zK`}s-TI`S+Ys&kw)d5hn1pir=@3UNzi>hI6q+TaTmf1 -zC6!?Y&k4LMeP|t&Cj0p8%sA^3(^+_g@(n55{RYm^3R|;ts3nC*bP(-Ju2{PhcqTpe -zxnWOtL^jpP)K|x1RqFYv_P#XGBCe|lYoerOt;-Jc>uFe#>F}@WffYh6UE55)RmlA(zk05i#sA($T=(T}x>n~qhRBD^<};`_PF&W?cb+4wSrmV$Gu*d1 -zkR{S`7Qm}}Xu`fc1!!Lcuj&A8;|3I6bbF(}H+x2aT1%$^@&mA4%HfrQH7RqhZ -z0l}4?zqp&)MV^c^f;;8*^xgV>b9<`S6xt$p%>oDWhpKMq>)ym@$D^lOU$r#E-3ke9 -zGI>CC6kp18!OD2(p3z=<&RoQ4D3w~szh7FFi1ipiKJ94K2PQ{E)byE2MoVa67RtUU -zgtwHL^AR_nhN)75F~o26`n -z(BqirxoUh^=k;7Y`LGuM-473Li7*W|Df|aa%%5h07k`if9z6zBbCqAY3r`tbDC&_N -z5xH+DUkp5>FRlAjQD-SCLB|u?`s5ged5GF(W`$)a{|E9T=V7#Ky7pcl59-ZeDWdo# -z6~FT)j#$q(lQc&W6%HfCM!>Vd%aC1YgCBl1BJT#77@yEbt&iqA5MhuGWcK6Ek$h#> -zM_<#k>r`swj27a)*`l3qk*~%T{V*ii=0vZ|^twBmM}2X`F6oxlQT{>`xC -zBTf++f~cjap(jv}hVYVG39vF#`-JPSg508r87}7qCE?0}mHS0!E!J5NyAZNoFT;xd -zKyHEBo`YC`pRWs@`fppEM}_2r)$*=8rJ4 -zn|eFiH56Ml@MIfL`a>RxzM~a2EcdP!%zu!ahAoIj*P~)r#H4Rl?3(fIX^Z$9ak2Of -zlI-CvIAydFf2yS;qLe6V#s^UnbR3^S+O_%!1VSA?SAc -z*)SCwSUIJn}9;)>-(K<1%UXw0snV>rAeh$d17>_Kc_h(nMsGcjZ$9Jqz~0wa|u( -zjTYGZsx@mJguSa$u63+MwF|_y+`rZliLn`S+p-aoS4}qFdJb0Cq7D<@n^3KE=R|zd -z^{SGBclzJ-$8*R1hkkm~Yr)dc2Z&`=$4uzwM=>%#it?S6yd$x)$14!IXf}Wn$TS8L -z)CUwlyia8hoOZt?708$_=&O;T8r{$L1YIPC`T1 -z@~T_%QAqwN{H5-9uKybP%CEf?P0TXqW7S2+%*7iO16yX!S- -zU`4s-7w<@R9qO-9L=18j^>_I#YKxFp8L}Kn7kCe?8T;oL*(r0dK7yggt}De^@)$?T -zV;mkQJD;+DV3fm0t_9zJmyOo=-RuBMzfr+x9toq*KxQOcz_fl;M2hlNael+mtgT1X -zRDX0JY@udNJ*b#k!7p^Mv58*#Vha3Mz!UcVGt-`_gEl+xjgooJ{()`AU&qR#vHbjk -z+z(hr_}qGtW-GUDJF2Ro{K^{X9;E~%y8sqOyw0_fvG>(pge@L~F{|7WgO_>b*8OEgnNA$uTMX&^gT? -zv$1+;KAU?nMB|KmX_`%8}NNUoj2jwOkd`*r*|f}B6;?$=kn}6WH2a%Y8`Y4 -zMK!I`Jgl=w{&t5F`kW0?%zD+M1;m+iyEG}3XPxHHT=r)v`vA2Ndu#KI5!3=AICPjr -zlx-llus4$L=sWElWgRJ7k4fkP*UT -zZ;{77S4`)>YRkpgMDX`14_2r0lbpg@h0#axEW}YmX9|Jq(ib=)f46%eN$$B`GE&Ia -zwLB{ok3TD|P*EPhmJVupuC-1}6_CnsET6yDigAo66u%3#-4+n-fcc4UMbgr6p546% -z79OKG4P&|@`()>e)DGb|R -z2mgu8SCTacvU^yItF;1{pT46}s8LP1pR@oiO!S;9H?+#FB -z?VB28Ks?a(3Tls#?}NM}FJN1Jb^ha4y#IpR#%3+hoanw`w;?;5qXVPZ3sRxs>)?yr -z{B(G4q)`<}6h>rJ!jIIA=+qO^eXv*$=o%E=8Ij!tNfcFh9K+>$V>I3o81KcxYUdc} -zC`$OA_k!}&YNOBKZuU*E{R;G*`+wGO67rAWINgEshAdvxZpB;}*lTG$;1SFN`|;2u -z#MZtv9q6ReqxG2Rp*F7QwBg|++~ -zvQl6Z9KC-v{ThK)xy@k%O3DL>Bkr-9u1faeADDhky%=^W$3$_b-*(AQy`wDL?5vod&1yjI}V@ezwtl$SxVdu+tIuK*> -zspK8cGJoT>Y*cz4YSsqoU=c_$`-8(n)R%XyTVcV!`3T8kbHu-iss0X0XN3I-F&|`q -zfhR4eqfzN6>&e46w%>S3de@lO%xb;~J`oUr(O8H1{1IpMB!xx>RFTx9IOnbz9j7U- -zQ)mTeZi9pXWUa{NtZxR1T -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 -zO;MAW91_g+Vu&hfI -zi`OBtr=~j?8=T226|oUtuQNZEy+ad7(Z@zCdF-{v3dAC;3^hO84LXXuMzF5XlYNT% -zNOQJhpBVW1UFn}zH*7SyJ^Oz%lk2pUHKJ?D?fLeJcPibPN2I0pQ9ejQ_gfGHWN;(K -zSVwg-Q~3yF@1=5khhRk=5MVmFV8wYvGlf3`+?Gx7JuNkk&iOb2Z=|SiRC_;y9!mJq -zkbx|#$0sKayjgwYeEwlq_{|QLyMr^EkUgai}G*)S48L2ZYFjh+z!BRSuOyIBOE414|JxpUNL=|Ie%1 -zFk|Ppx -zVeASydubHlDg0?v8=kab9OlDjqEx2xG>n7Rmn+gp%!X&y*!#Koso%Vv?%Ih6e41Bw -z-t2y-vI8^2<)pbZg_oZDd48-OAD$rx8|xdDKh2Tz3BQ~jf9eds`9Aj+vN}hF=Lg>S -zD^{S@=N89wEgFo -zADGu>#Pdwy1?T>^5t#;!@Ibc!6i3}jJ;tP19+mHqu}eq%;uP5a{&^;qPOorIVmW8)a%V -z_bS@Zsr|Kxn!-5gnBR@)*JPQWC@tsL()TD7-I;@1dM)t&OX_Kwz+yp%me<`TE5`rv -zwp<`SKsnM6dzCH*OuC0$Z0rKa-4xNYNUp^*-}_r9%bM%0a6YWop4qxW%N1HSZg7im -zhXVSI@{UZ%=<(j@OcSc>+=-ZBuXSOHBJ)|vYaG$44lHIm)7L@q3R$X|`3`8gKcA2J -z>HI|byuwUc@XzN}@Bo9V<__oL?{&bQTFkxHfsakc@JIark3 -zbQ);VB$cFkhrl0}%Ky+BZTTF2*(T>Ay!oI1$D8Z=-|k-l$}G^px&S%*wlHC!YG?v~ -z;1(g2|IPOx}S`137b5k|5Uzbx48GitAZbj(T@fAwQ0Sw<57CA(EDlP9w|76-4Rhq)QLo%n6Oav2j96`F@y0js9q2Sezo5n -zjsI8Okyy{>a(z!Hd@);|vGbI2Rp8Dj2P`Hd1j6kxoa_qSd+RuO0qi)XggUDQVnCc% -z7np?_I`2suV*+Z5sW874)vs;;$fm3=f!{Vo;SU-m}8J2M`%Y;mD5_t+e!FPg1h_L%Q_!UPa1?otXw#ja7^Xq$BW#1K|hTYUd -zvJemS=pcHu9&#{Rvi{uCi$U{tJV#^MQHUzY)0xYu3cRhD&wty2?+L1^@EI%?M*=wY -zP+v5*GPk#BwLqj8&L4nJZ8(1nl;~b>xHm7#y-~@%X}%f0U+{v*`<6Qk#SZ5N$c)*d -z28apIUJswO`Ye9x=aByxNo{L8W~cgPA-AE`I1y0rMV -zlp&+?+bLhiNYUiJN*$rehzT -zZ**ESOK=Q%X4ctaREv_kl}cE;UdOmZ)I*v+KoP6+`O_U~O(iZwF#ywrH8JR8UaQ6V -zul_I9eI)|zg;%m?g@C9VmX0-Jf^6wmLi%U&>NVdKj0(RFk;X)MZfz}_S#~T+Ol;aE -zy=_(E|0LVxW}jrAcceM`zF970B3f%_D%13B(a_TEKmhtgvI~M=S$TQ0TFfbRxN2vz -zw1CgyGI)eJi%M%}mYwiEx0QLN-PVLEjkQGsw5d|PG09)AKg*b(KUBjD&QG4toFR4{R_9C4M -zcE2k=tvE^?;=cqu<=8pvUCGO8XXai59v0%2&j*VGZBn5vzUP^_6v-&)dVDK&s!1&C -zf=}x|4=cHPPMK>F?s!C}n#fQ?nX)Wd3-z5Uik&Qt5QXKrSC%XHiZu>G6-q;(8EAjb%miDXiFR2yE{JcwQ;SbXO -z@k8*X(?x%226PhQG{7r=hwyZ!+f+2pg+b&P&1 -zqLF{tAt3TR%|>StGhm}!K0@6w@pxeBpcSkjw;*_QjyOaFZL!5W!rzk5-6z-oAT<2v -z5eItrfh13d>$GG)Do4{zBaWUg&O`?I48&&G5v_7xfp@#!si>YO84Z|evCQP#9PL+K -zeqK@Nnl)RtH=T?tt(qy+E2_GHFq77#sH=9qCMiym4KmhS*ND0hZ-%eaA?`~6wZ&D< -zgPI$$Mh_u|Un45&rh0^&R8MSWVDnH!TMR`;rZDN@87EHTIm#l}Sa}{34^nxJkWQ|I -z-n*^yQ~PS~D31~A^h)SYw^55-qzWN@p=bJRe&d`=+o=+i*}*KAH(Q)XP$ME87&tUC -zgHb!}WBgavA6{|>>!N6xo}asUd3$^hD^~XOEupV&&r?Dh$-CrJuuNJp?)&HVoV-6i -z|MF(M&%U0}a%qC7*u%2^=A-I-56_r3{R{k#Z$Vt5F^mDkT8vu8X#P%?tI|=83S%M5 -z8tFS(`d#Q|uK)^Q;{V-F^Xany#l?)^g>AHVe-B9lTaX<QO>6SU0`~Yb3IH1ix4(<22EV0y?P|Yw8s#0emh+Kx}0hOIz!W@H{8IU8u+Z8MfWP -z$!3`@?@qa2)t$L)TcZ%TPxmXEkhL4O4@86A^i -zA%p5=ZEJi^nmvzNOYkaAD>Bl3Bm9DyMl+#(U>y#TS78UPJZeq!J_{VL@OmVhg~Dv& -z%Jw0iz0z2l9unCY8*vR2zurc7)17n|Wv=XnP0Pf8YlNb0>P13s)i4$5d -zqmto2pjE8rgPKViq;G-s$ADFbJndF%bOb7+S^wGicj#)uH1U#hG_YXR@Di^bj#@x@ -zB~%aSfMlO=Kr%jhKpOKPZPR_Yt5C=;NYrF(Yix%Fq1Lpp(!>w7(K(}7XR5>AtNnZJ -zmC2Pao1hay(lGJ8{YMvWOWwBsr=vUCD6Xo^p2`>h9(jN!mH2F_#%bifj)qb@b5<PTwQe7Z6YPesC -z+|2gM#;Y5ji9G#kX~D8xp4YB!TvOes&4_MI-e$tP>;0!Pw5_kAy@DOW^p?yw297^>LopN*7hemk;!EC1#w`S$1rv33KfM73T1!jy+NeoKNpIvW#hn -zpf%bwfkI*TL?Lrq`^=E$FJcWEKz;W}MYih3K4jY&@J*BQs~hPnYua!H -zGPLUKWWB0xB>V0$DZ_;Ck60=jw#S$Z)Jp#~G^RhuXONxi|J6j)Z&{7&>@=Dt-dzj+ -zD(yBHj_E+ZNAQ{L$^v=^gM9=~uVXDeV^rY19BWj_Ax{TUc%tmNtzoLZ$OCBrIkac- -z1p5_BEY)kFc3-bmp+{5UaWmS4oRN6nG}F8kqc;v{G?1$-gVAeH5Z>IHcV(p}yxKii -zi5GNeg)_q4*I+MBvmsagjJkg{hg(wnEY4adJ>x=X|M4>9gi`Df)sB7}k#~grqJeEV -zm5)O#R}w6)FCz+4LXg=~statQChf -zPeDuH$#m?ifFKktJ1Bin2=Ajw$KScW8>_kk{`d%64p!H0Yc7yVGGMj-sF(KAv8UsY -z-ug9s)}nR#m6NF3e785Lb^4V*Vrz;w0$UB(8t%qLUaEZ8SJ+C#@izPp!SCs8JvFsqq1gu2W8oTW33^d@4#=ldpeGeD}UL)Fl(B3an>yF1K7W#{FJ{8XUCNfZe5Ds0In{<@88{z -z;A}$qw|*D){_S3d|GjP}jtwe5@85tuRk@~hHGV_x^*E|5@AYrWI?4OoPi5J!=*pkR -zvFq*;e&TZl+zuJm%_<5M^6%z?bHN26qlZDpIUmZnZG(lOFDJ+0hgBoR=J7KdS+KWA -zDY0+E${kler65U->8e$tUq2dT9;GX8QW?gC4%yuf(~N^0|}p -zIR-f{Ui?1Tz^#sF{gF89kQXMKo8(p-DOVi00YrrRvqdL{pFVWm8c16h-~@wEpX(tIbIv0_&P(!Zdoc3R~QKzn+vpW`Dm;(z;5~x@~qmlo!O)U=feg*0sjNw0RYx#1SqK)8Zq0g>ERHMHXZ*8Lr3m1cdYiyLiG#xh0huc~7rV)V6vD%_XUs!F@3wV|}`8B}q4f_~K*iq+Z{7sy<0Y|g}NqAji?h(ANyA536Es3#uZPM9>(q`!+P2E%OMqqHQ&hS*` -z84x8`_gF)z;IGUReC?0v{OwN(*{2#+8SRfL+HhPx%Z&9;<&=RUZEYyU^-uim0zalp -z-->FpKypWo?nIw*Wf$Hje`O-x=VQE2wfsJ3|Hu1i&OEwu2zRR$z6ig*87LW$78W6@ -zMcHL3t!IR0!c59T5$3Mojca(8DX|>1zHA)HP{vb|aWyJfXirE{MzZixy_X}{UWm#t -z=9O{2xE}Z16Vf1~&I_;Knj_e*npA#O7Rl&a -zRu49PrA;g!a<+J-K@)f8o6=pbZFmQt>z{asQ!X#Q$vkA>f3vC@F`!A?^0-|Q4&qi>Mw+ay*`NhW+or-I=`Xz)tO+_G1Eume5n8Oa!%%0F#;U^WnI3ZMgZVin{AG2DjVwLlHGVLY*) -zM!z}B5xYs6Qcfp5NfA6K#bK2k(hSAXccfWH(&bOe+bghb==@0DUWM(5&ID{LEULgk -z1@(LcU(lwoAUDIL3cS&Oq!1c_ePTQ`75n2_KV4;YjWo>`RhAJv4-)ir(>u~3wDm1~ -za3Z$f!uGk2V^ZZrstEi#eg(_x(#sRssADB1iAAu%80Rc<*3MK-NXWY88-B0Db$Dg% -z%;jM#4SHkbKVnq-LKAO<{9fyt -z+tXTNXP>~f{0TIt!twJbyoAK8w=@*q_jRXfA-;JLO#;9uPV4XiM) -zUbWwc2s0t~@*u%2KX*?jtp*#UEKp%!Kst{V)#5TICk%E$)#igko6>80|=ycqIA)+py$=A8&_-6hj&_}SmO{NQNC@>Z{A!Qw`{xTvGll3)Tu5^5aa#Ao4uiF -zy-v`U6OzjC7I=gbcv-OB#{PfCZ0I@Ae?1}YIz -ztayCoi^08!H6nVYGmr8NLB6Em!yJdt_F{0`l^jF|{r2oyaG`}~fie@RnO*}W#bBDJV(*TvL<=aPF{&?w9lMrEcmhoamSWRjjb&)n74Iyb&umg0j<9q -zIEHM@5|`eWP=M>i)|N8Um*5=6;zDz(KmI?Cu{8$sU_V8f>d~g6GX_$J!mlp?Wz7RW -z_b+j2=3w@xf7y~K#z2RY^PO@p2Df-f>PIH^gKW@)4?>1nsS?|@>%do&HLGR5S|#&U -zpZrGcc%vfiqmUE!v0}{KN-He0k2Oi}jIM6XL(Q)SY!TmVl-`?Y;U{H0%hzZdb3GBV -zN3v!pWRDJ45%71YjTpHN0eC`uD7DrkT|rCn5lSATQ~=2~9`a%(@-=au+C@w#T`_R= -zM?rNQ_9uQERK}|^peuSFF@7C<_L^|lXTXfU`4|wP?$UW9aO}xz;nv?BeM;K{i^zL& -ze@~*n?~R^(!g?$$S13_)faHK{SBT@0o+nEHCIz@FRZ#>7H3;C{xv-6!@CQl2Q17Y6 -zT9INLSi;J3&XI%D8a1ZY7VaEQwo!H~-qGvs>s>HTR -zc+WEi+ncdHU0La&7B^wLNLeIrKaTCi$~4bl952ImnbO#70%oO=AMRo!jX;>+ff`&@ -zsNORbs8Vaq=4Qb>d$q-5;wxVv%1|~lK`fhzTCLfUn?UW%z`qhB)+xP8(>KoVL&d!f -z8=h>oY?{_g@oDiq0U4(G+@Vxr4txnbSO@6XmsYCls!dn5K?YaGJILyftXD+KnlL_5 -z(1V66nT71fUTKA*Y^EMK?>AZ^QDaQuCEQNblya5LjC3X7Kiy0A1RYlUH=*}>+40Qv -zRHbRSj}QyJMYSGRS4SM9YQkE^% -ze*q`K-_LFC?DaQ?+f3|lbG_W=hiLPIU$lAhr#90))Yhe++5&E4fB&4l7yH{HycTEN -z=S6PM<_&Ae`fglR`9S5k%BA+fmDQD-?BnzQSh>b-hW#i*ZtZ)thPuo6Ba4SyjDdE* -zkh$W_Uc6wjhmF;DS)SgXr$KxnMF(Yz9ij8L6Fh_g{ezFbD$xf*MRX!R$y=1*IVvUP -zKHr~Pd<|_IP7uO$*)jT7NlMgHwN7ub08xpyl)#(p0P23S%O_1Q`3tH!2$mhIBiAuY -zxm1Wi6d+SG)tTY^_ic_PEN!%RtS14hH7|4&duA_1C>as21(_>nxjZXskzVpSuCRqZ -zk&Ma%9>PUG7t98|S0I1N#Ixk=e6sKuc?&96V$Pj_=Ees8V+3Xb3C+PqqMkyPTSO?# -z>S*!#)ji0BvWi{7>l_tt5i!>l?7`N0WbJ;aXSR1gqy~(wGBpNVV1$T;ao69h+K^0gu#`pyw)V@0hJ6 -zUPLLZ-6o~jzd+^QHzo6dFM#&;E#B^2RknZ!gc`nx-WG3!@khnEhNjUoWH1vST&4lBD&*Vp^Auop;5h5;|)Am -zu84?88q^nP?yra#wjyu -zmG$tkfOhXgJkc~!b(mF$?Ov^26lFXGlGqebZcm>Z@&j#~{f{+`ef*|#s&k*S%6TPt -zswc)QARAQ2x`JQwXQg58Ln+$8M?h!j2t9JkE+!zKWjZ_LS&KS+Bz+nAOh_5@`(`&Y -z>LCFQWu(nS%i7EkXftV|?BNB%uQV5)HFJg|3iw7z4mUDl?Gd|xqunYQm$0!Dy+gVE -znPB4xZ$scW3e-YtYY3DG%Jit#H?mczSTGO%^^vx}Cmhea-;vNZ)-eKp%wd_ytt)aU -zLU{q5H337}p#id@#Sq?`E?JE4=WS^j>llW)9t&)+Su?h@{9R&>auNCM5xRg**Ft{G -z7x}R&sXoWje<~JfrL}0F}yyy;GWt{I}bPb{{=qfk7nPql8uX-h16Ga88ID%{o -z>BzWsOQ9zqgCDfH;dNYUsG-Q{^i@8fi~9Ce=3N=IMwqe|}ST4|-bh$}MJa6TW>y3vI* -zONR4|bJnG4kQ&10dP9Tyem=M2oOQ{-bwm5F>+cWKA*cLzjClM(Tf!>vb6C3$#zL-0 -zw|VD#7N!WWFsb~Jo+RxUZ)AmluRg}O3x6LqHwF6c8SGQRlIfyXs4mpH?FB -z;|!{ODSH?qg`)Z+h2q7?ioB?zzio0q5--?NcNf5 -zASaX|8t7HG3AlxdG<)!6*n3SJu=I$q+3Pmq{f{CqUL&@zIwP%E!!oF*Wb)G#{kqk? -z88vQwF>)LRy2UlhT6WEsQT9kJ<@5>h5C^kw1t&U|TVEg!nq1>R6 -zJ^znqqS{H1wFa@l%BE=>gPv)dEFK_Vvu{ELH{OHqVs*BV84tVUnrsVN)v4ov<5$%D -zXYjNJ&(wa*lqZ1%vDkXr6X~bxDbKvjoH{4oPI=}A-?U9@f$Dw)^DvB`9BySca$OM# -zK8pE=gHKRakz!4z$ablCN81E=FPMcSDqqny)Ue*z9I-0ACTu95Ui!UQ%23aHJ88ez{qErcL`a9W*{KS0eRm6ts)vx^{C!-`xQxRcm+>+H6XCu -zyoP`na@G@jrWR9&rx-FC9QBXsJ$ -z?Rkb{2E^uDg{TCRXh@jbvwclR=rh@7LEGec>66Y2q5>5qE@;n+N&9&O6*Lr#cYDqNad*Wp@Q1 -zx^mcgGQT3v&OdWIod+D}Lznv;4qE#s-Ra_M&W=!lRN{;>CcBFA{Y%b=I{OYla-+QY -z2In2c?}=~0OPT5)475aDtWQd)+Bf4QG7cMD|8Nz!&Ly_ZJLW*db@lns$-bybWe!$H -z_tv;g%hW*97i^|t!k%B^)VbU-RYgAO9E9$23wc;{hpk|D3`HSci -zf!nX$oHPqQRd)g^+tsv(kSY%8so2#O>Wz6x$r9$DB%XKvnAnkc-f=CNjs3GP8OY#wc+KclUEVmK!+Ab5uTQ97>Nt%Y;#Xbf -zWl{CDGbf3_$ila+m%r`#kiAcs6gAPZ?Du&+_^Rhallu^lk=3vS92fKPS}&rHMx|kX -z_r9nab@hUJRPcggRN#VU)PG-4j{5NeYdM2?!;ft{8iR^>%CRb}nnAB1Din3MQG3qZ -z9$MR{9;fhX#*Ie2M$A}!TRMDJ%0um;-yy0#$`A?Pl+vq!x7uop@<+`%1D`Y1!$ZA~ -z`o7S=dWAHc5j1Ti*Jv@CR+FJV$w77ik_z?6G8wf=!354)LdTe8C@Mk4tk08FcSX&? -zY)9;H45Sgl_wEb**ryWh%_M~aDFrKjYw+I=&>gfRuwK|MU)xuSc7FU2$QqcpBhV7F -zM2XZ^z^McF#6N)QSO`6RswmX&xz0UN18G94(D5`XCytZD_ -z2}y^rbV7hmH;|=SI%$@$sGSZJOLRcMnXt?l2+ni}Y9LxIvk5n9=L)M$m*1XhjE1#+gbw(3OSs_j{{@GxOd1eE&bs)1>OusZ*y;o%5b| -z{k?ghN7JlA-!zUg)6$T~LF0PWXCQFAf{x$YTr^og-D -zudiMk>tMa?3}}mNiIyJ3p{m4$y2RsSPOwrO&ujq~hV@ -z&dOw|2a!=kC%*^K!}7=(K17yah36w8tU -z94I<3=#QEXJeEW3VM6t@iI4jU7Y`CZ5<6kot@B%lb&ZI4xGn<`dCb8LhwtLOPLgtz -zH(u@2^lbat?{1w3nsc(qB_Fuy7P7%3oY&Dk|0QdWO_F9_b)y#xkmEx@^s57_0<`^Q -zy)+r|a{oM=*dNgq#j}WRG~rpOaab?S@6W>73Y;OkTEFextfBfd-eF$ROHszlkrl2QdMeVxFI}7t^!_~qZgCm%)rY_01MobA$4h|&SAGCe8oUgod+sp!!s+61 -z$hmsy(*d`2xEJ;k^l8dfvK`%1kRmv}3#rHkzeTKzz(AJf}K6tGo&hAb6?V)|>*t@{ljGpxTw|8ZJ0G7?Z)(=HlQP%&%W^`!{jbjzzwU@)0XD -z=>g}9&Y$GvdywHvdJUL}N0{ru&HaCn-^}}id<4H^d9b!XYP%l%W&Z+vH+b=YZcT=M -z?|Sg({SgyKFJdGYP&oepec2yimqETU=JkS&G^Yl%O-v2hTFmPZTWw{EUfoQSk51v6Q%g|bpN^H52GEZPIe?b?Rhe_|wbp1i~S;H8g -zdNSMk`gpXBo##qm{w%(k^Y=!f(bXhRDCiH_oko;vQO;(@dd>#i#gXvyHcEE8KCfuuA|T_D_Q#zCTtmt3&}Fk3 -z9LhOA?_zCd4Y6IJ^j`FWR!21GzzFPUOwwe0@wY^N~!(;gjrk}I2)*MauMYd-3IQ9@@x#`n( -z&Exa)z`60-&U0GmF8SI#W1c>VTFVPXCHeE{XiW$jKm5%JX|0bjOs8t(Bg%Pph@Gjm -zGM%5Of3uD?VqStH!deBL2xbcyd0R*YWQS*9;g}lQ4URArObe;j(cej--O686NVR?i -z=65KV8WNH~x60|NIW*PDmOt6VLn5$yBmJx~6dZRIFx2G|#e -zhVG%VmO%~5j6as~erEC+WIy{8P^<=b9+@LBDfsD}z^!(2oes`=dWQiX{H|I@L|c|? -zze9bc)Rj2qaDUe=wtr++yoa}zBM&!Yw4PD_neEJCdC_|MK?7sd`A4{pIMnS%kIMCH -zM_DswjbAVF8T%aFJ}dYmd8zIwYhSzIl%lWAJUvnzjvZ6$n$xt) -zVe&0;RVReAxo4i)#;r?!L6Z-iV -zha`ebXtu&WpFC>)&`#2JcyAtlztFWwyHeJ!Mb@5qur-#eI(c0v7`Ovpam{vyH-Bh< -zN4w+a5q+AVse|WtJ`@UmcW39%*%{-rA6l^Iq3_$Grq5q+m2`=FGV!ft&}6c~g@S)U -zRx4)eli-fC7l(pJu}3`XE8eR@#Qb}`QSj_lc{OtpH*G0yVUroZMht8OHb_E#UV33D -z_@_I@ykyuOXILXW4VDeQU*?bZWEVpF&olnH;`Q~l>+idJ4j+{WGmyCa8naocbuMsL -zsa2c5ura%^MLqG77JEV{_`)4~l0To0_TCwhWZXbUyYAed|4+Zn@{53ysgMY&$Ts1zz`o%motv$9ohX@2hji)C -zp@(a#eRkA5mk`de7rq+l;)`-z*%V8~@XiERLem;oWD}digW|r4ZvoybYnW(-zkNA+ -z6pb9>+D2p;Z={tw3S3*%B#o%<=hgU5{;27v9E9smv&jRw;x^)>D8}W+7)?&I{^4xI -zg%+JcPDf?}=U3{3O5mH9o;-2lMA7L{_~KQby^t|G;Q3kRdDN-uT%cMIk65$mZ#lHc -z08e0+FjU5akXJ!=f)h*^^#A(LqEyH^{H>eOXtZM*~9#U -zQ`BBmGz22y`CarbTD8rz!HLHAFQ&9$G6}v^`8r!Mlfo2M3UM -z%Cide6@5U2D*b(WfGK49Rf@Jq&JNcc9WGBIZ=g`{8s$&G-(Lji>Ms}oa=17G9BC++IiSWq -zV#&+grk55nGrXCg=i>%4lNOGnXU#)T%RHR(6-V@iaDN>G402?-#qinOfn0f(wJxtP -zud(n$Q0#fQ+w?!~Nm1@m58abA@KfBAvaS=-I7JN0*(1b}ON8X%GG7jAr(N0+ANO0k -zwvU&GiJH!@o??W4@G#{dAf_+^@fg!m=VoC#Q&*NrRus7 -zmg~cLWSQmw=A8aCcI|%NxwdeG#0gsO{6f{@eiv;2ZttHm>mS&@Nz=vZ_mV@f6;^w!c)# -zx62~mE*F#O{r(2+gwwrt5xBeP{~P@jBLxj#=gvqKI60!ZKOHnQ35f9ueqn^{tJPEM -zFZ4fM)?3DdlJ78lnh@iUbuDv6a1n-y&giCc7dTOIH&Ex*o`bHWJe8l%AoPyEU7+1! -z8G0_i$SvV>fE1k<3O;-0HyDQ&;;qoXr_LB)iQ)6eSArrNGjX=v#OLkIbL5@-v6M8H -z(b&I88d>jUQuDk_+Aq9}Qx9Z0wp{HG^E+ZcTLW8M1yh-VmM1|LV5@j%l>^zPYJkWC -z30Jzoco^^l&{Iv%^b;SlZP1NaB0AbMNP5n8A5+6xOg?y0^zqJsCnYHpZ_o74Ml>89 -zZ2%@A{q5|-tglxinsqVG>h7d8v9nr{!IQB$i -zBOVoe-wd3&J?tdV39Krjp`pFfhf7DmI~m*WkORefK0 -zlq&j|lx%N!obJ0o;}E#ROmHJs^qRcw7;{wDDIgz+P@V~lE_#>u?tr$~Djl2{>zmP( -zCbC8<{o#%ZeEJfc(fWV$4hM}LahYuLYFU6L&uY+44+Y(Q#>rp!=o$C-o!c1csRZ_h -z?FmRc#^NXb*&N1&+~Z|a=e9&P4R4z1=bDDSLu2qLdYHh&Ut7~n?TAjUPC2NZZQaocE0g6T1 -z2E@)H2Vh}8NiuiOHuOX402c-Q4EWI$am3I#N|=eS)`#aJBXuAPBO~2#!%_g<`BLeZ -z*>QPl^llt_$3SPUuIcowc5(0)V-a`CrD=WeTXvEMGpGFJI8)wg*Mo?$rBVTBmlM^8 -zAbDb?u^DRQxnQP_Xyy@@9E(;1KxAU1dN-4N5?<>D)+t8jlI98+ed0KmT3W1voyM!3 -zqVq1A66uW~&uhv32s4p<72ONSw~$#tvx4~#wZh4J6S?vP4?P(s8T5m*@rSaP2o=Mf -zXbahqKMB|oa-qT)3P<^_Q08KPVja_|L#DoE^HkMMuFBj{@b%ugF4pC?%<_(fZqwYM -zQccXuGOWg0ZG_e|**{Wd$3wSt5MIf>Y!y?zUwdvX3yh1!%!)o1av#sKsS#c-HQKvZ -z$pak?J5{#iUJ>CZ4^oYC#^iJGb~H=O3Ul6R$0gq{;L}qfay44?DP(vbcFqPLvL{vw -zRgg^LwrK9V<$CvL;^bMm)3)~%zWa00vTY1TnA+9yh?U>g0z_jvGvX`-JB^W1<2j5m -zTe72sV$;Wxb_h9!h)#h|SQ;hnuBX+*9p~{KVtYA-#`Hidn&sscDs#^T4l{e@03@>V -z6mc>r(08(1Tm+O$;2D9^{vaC~!F?wuBJ-tCpCWoNE3eBRqVKWZ9q@=?A|n0EL|XZ! -z{kkq*M_wA~Vzi&|`CAuswUPdx_R^z{t8FB8eCA`TXy16gpTYdR8`(;I^#Exo@=$EW -z+*juzuAXMhQ>DyQMtY)@X6fcq1`$Aym8LmaU=D38om0i3^p~Y4VOeCl*OyMMi>#Uh -zt^U>lx^s2uv?hzw=6O|qA7YFE-2`93LdxQS;#`{40KVd3*tcejaTt|1F&d1NRT@`g -z^IT4h`*9Y>9fCJ1wEQ%S$Dtmi4Ah%a3U2B+-dh(6-s%UE;4yX8WOGh-+=+|1Tqhqv -z=oUQe@6+I?7z$37=TuvqX-(GSk=36Xcv+YX4YoySj;uL=tPD%Vdhxj>Nv`2eAj|T! -zb6ZbnI`{Hx3WS4E6&x%^ap2xn6_8)~F|nrwV!glErLT^t!m8wT722Bp4nrHoINPP8ZWZE=7^%js -z7j;!p)t&gN?#KF*bachCDiZB9~5dPaxAKnSEuD8Sp1NC4SdO*)-4?(+ob};zp|N4Bk -zns9G)zW-Mb9ubiTubQ3vo80lZ{T))u!(Ewhsw9X+rq|8p-%S5`5t;Y92wv^MsOuLBV; -zyejGtIR|3Tn0VpKYx!z|{yLi5xWHt|=8{=Wjm6Yk&_kmWNlD>c-vw^>assxdD8W*p%BvZckTR)gs#w>YZp{i?0rufN)rF#avq&e>E`OJpO9kvced)5F%ZdARB;t_z6b -z0Cs5k*s<)qXn%n#Q`ADMu>>&{pYJbOg^(^1to0p59&0 -zmXlUP+sG-L)3Dw!=fwA74jflFr)8mFRBvVztDGZ#w$};W16F*J-I<*j0iQUodN4SB -z@L%VQ3SP_9b~sXiNu35>bBdQZGg$vb{sf0;fY?E65{H%9bBBi%K}Umk_?oB*LO(CC -z)m$Y>b3!jCrg(O`LclGxARX{GoN80ZO9 -zuw^~y;gCrK7RzAc9kmnoOEv75lfaP-aejlr-`?S-ISQvBVmXI=JfIOwXtc|X^!&yjwQ_{biVM318>|5 -z4S$sh_4oDNd**+u@yd@iMuzTHM47heus3e>}QMT?Nsv|^nlKV9v*ss0j(Sj@pVGdB!dCP`DT -zAkOjl9I_Q%p|sY-8E=-s7m6~>%5T@KVM -zws1Ap%7|XQU#L@&EjLgaSOzO=BsA<5(4lCm;I+xIwg>afdFndhxCR`-m#{qF@G_H> -zm{T=b`-iEKd2xsbD?q#{zI~S9+*f~5-c|}bhb+Jwu~T8Af;sq)B~OP|I559ECi< -z7l8r^|9hZ7W-2I1C;J0kOpgETtaS`a|##eyMzrE_tcLU^);Fo>8i<Cv+1$FT7_@SON*|F{zLN8qS4UVj`J>pBzv#vTJZXy5n5qFh}z?d^UpwDL0)F3 -zke+~Q#4ouVcntnm*)Gz_?kR!Ajc8$VZ3+LO8UBWm@LmXKuWJc@bf;9TYbpks)=HUo -zpLER;%P>PNC1tY8`n`*hp1oQoYs>3oHA5ESWNBARI9EB-yk3dLld`g%YUh9D`jGK) -zQ^`Dd-67L8{9&KNU(!mk^S*7^wE2mqRA;^OAA!~vUv -zC1q8L*-n*HBYv8zca9Qs^A43|iV3A;V=ZeRLh2DWV}9+HqWnDkTPa%tBO$7ZG-C0P -zJEN*uP^G_h|0donHaZf-EN?8VYfP%_n~z)x8KU}~mSF#Yi1=C3oxBW>Bl>#?`b?qG -z=wa)|E;fPcf74A?5wfzqiyD{y*-9=DKSFuQ!1=7h8f!xUNNO -zKvNJWpnm+oEgDoNk0DOsv)KMB-PR`WZucWpU*v6s%TJj -zZ#fqO<5B2RBNn?Q_(eZuLs*2P&-)i)<*4zs-s?9s)t2nUdaB+0xbzfnF5aZzw&oY3 -zy~xLrpS!kr;$q&kOOC1EB@YJzV;s{Ge5YU2mC64TJ$9Eos(hC`x?X_3hh!g>7alg8 -z9bcNSQBxc=vU~~0=zIlMc(9FR5KY$-e$n)kr2_IQd>c2UnTBzV%c3MU;>dpieBk`+6|g?^1FdHhO`w)eSQ -zoYn9CI`~wdKd%xQxV|ZC34YaAw+aZDtkJ|s{gb5DEHl*no>tYCI693gUuCo9W^ -z);7iNeRtmqi)Q{;(2~q-g>J&O!jjSIDx?v!_2r>ona_P4wDh_1^-Y=2VFvGk2jmMa -z!Lq)m3x6kD-8^y=)OD@YlJC$W@fti+vP3zbSB~@g-_OtU^cNPw|9S+g>q=ydn7f62 -zMB`GVm)gmOA?*qOAI9kWJlBmcz)Xd10N(U__N@_8FZqBn4wMP9b7sM>uKHH|OZYNz -zu-BJ@7NtmWElG-%;y!TocC_0CZ=58`*vO?y3tOn}+@_NS$U$K5UR5i9ZtpBeQ0y`M -zUL&x}`IfoJK^)@~{8q#^y1}WzW5U^1Aov|l-g&5`tstSv;0#;+F#i^Y{fp}5;qE>A -zKH0ac#6AB{@z2HgG))v$h_#(5$LU!c{x|M(M0=xhmM0kE-DU9qjb_RZHE26o=6Y^) -zKf5_iYPrhJ&`uu)3;$hTR`N<10G%#6oddg^V2No(ync>)lDc0t^B6pzR2aJtdbLeO -zB}Hf08T=H -z>R38E*lUFhtLk*CZn}!j^kIe3@9FRNFwT1f<^cY}uKb$jD8;m>#JPyGO7|>rafqba -z>-xrZ&>?(5p6!ApTut*M6GPH+V0y)4#SgR>ZX1IY^0g~gTHRLbnww`XAuF=2=(PN$ -z-dwUzI26T8gZu@3wIk0J^#z}K*095&yYQyrdO~gqD`{A576Z>*NQbc9(hq$4!Uw>6 -zXo2PVxf3yUJ43;-*gya7DRvnw30{rG;GK(14WzaH3bGc(zH+Qx^0^&OGxD>TdYIwx -zjNu%4f5bJ`^lk9vfsg%7;G~U~NUzY6gLz<=K5$RROvu1YuuG@h`~3O1mx(h&dz+tk -zxAi(|UCF0wm)>wglY_R321pNDeYHkf1epmJ?_ouoqo1+aUqjh>^-R2e9?+I3FO+Y7UmML4_bonLsLsJ -zWJCcT?sNAs*r}F_-v+0l2dlmLPETUE2Q&h9${!CjjnAxGT%iAQWv?2&QeOtL9K3Pp -zt`P%zKfM=go9A2S{EKS#rC7zzw>?+(=L0 -zdrB4j*|ENP9?LdM)90SMBQU~0u8BkDN3B)ouawnB+twBKF`5XkUGyXxF!O#TXJYq2 -zTnSR?=X8MP80;q?qj~OJtHR2a384oU -z=wi$-!*gJim;gTRhT$W_EAqPHy{_5z?_sB6;KiK)F1Gs%#?OI^lFy7ky$IvZ9S;S4 -zAr3irt`}@aCKK*>ZNcTh9I3WoCs1UG14D*Oc*@0rw_fZ#h$mh4m_bW9Z@q=_THqni -zVW%gH@>k8*3)ow^o0*F3MmC*V8LhN30-o|pJ7fbxOBy`4K;f5}l=ID;HTp~rJg4() -zIUe0!V;b5`W4t=h`_AUd#JjQY$a@Knzauyj@r6P<#r-{Dq@zZ8i;?qOUQanBTY#}c -zSyIfPcGRQU(ySw7;|3q>yx*x4TMN`;jPvyp)OzqD=n0c*mtJ%yZ6n?7e)q7h7#5z+ -z$Jv8EXPa|)0a-*!;Jd*hZfYL#wVXjtH90wU@wCu^AMfWeg%sna5^SnwM?`|Hd?mM -z^^EsCO}450r}Kt)O*AF*-VC1C$cu~(kTvDvfneLe}C&5D73i10U6$l+J7 -ziGm%CGT%BBkM%gr=`9(A)vJ=qu5DIpasO=OoLr5pcqbnvig)sn1}0W1r6{s7lICjo -z3bW$mBZwtaGOdOJKMB0;Z&a&+mywu$9vDJk@>B_$(pR%$x -ztMEts)uB}eIaG4QzF_Wv(rOQree#hmUV|%a(imxXJK5A!QsdPv{6F8dQf?H4iWVu6S7bf{7B>g6O`HIeY2L+zkG-ukO+C?nGXQz$9X{%${GDF`FPK -zs=+;xp0!*)?AToo{uA8)siwF`<0NfFoX;z}34Ox;gvX5R0Cp*IkcVTdU^@zpAm+$; -zjdZ(}r+Z;vT->3JM-HN1{QBo(|Js!CnuC!fcOx`pcIj_!+cx4JZeq{A8e9Rrl3n`7 -zZ8Nkzw!)K8;P8xj8g@*n)xEf5XDYSug=45eBqFqYhY=ZCb6;Q-o=4ZUHmXrGKTG=gRg+=WkJr_=3n@3d#fdpo -zA$!0vFGZq40%O5TUFuW<$(0mz|~ -zrEKMGCtiW&TY9}EV;e8dX?hR2gcUTIG>X`DXA^1`tx+7~d(OWS?f*dR`z!Tnd(SuT -zT)|N!j;!yd-QcIywtRUbEQ>-rRDd}643&7q5iP3mj%MJd#CekNq>o#=oo{$Z!h5A; -zvUDB!pT9t+`lE=Hr>`>?+05cK0#Na(my@L`xHfi -zmwHi;%D*oKwsQq|)mJFj{R+>~k}s7x6kELpvnZ<-K2MD_XW0n4Q(qldW05{4Ie6=t$X0a>b2kV0$&86RL~T=RWSNfkT`#Fw5a}})R4>r_hF6lbx?KD!$ir`r -zkzOdx--T>S0kMQHEueGm8T3z*lbp_kFrBX+s!tKhfLJ$%qLEGEC$2pQyqE)^_D -z&$-pWIoHQHkRQ?*^Q>>8pEaAen2QB-ZSnQu#aP!sm|?yOe$pp&jbrHitKiu_^E1%7 -zqMl$j7gIg+GrQy@Yd-!rS!?mX*}BTFXUg5N)sbn@KGPP`OwPD79Bt~&M$}&bTr3Nu1GEDC13il&r3tSFB$}ssrZdzWdE_4 -zw|rB~`ZzPtqRnIc=+zd~E+#E82mBNP2+=2z*OuMph{^<`5*E^T@bHE9yV`T0Ht1$bT^> -zAJcnRCu+R3p4uK8<5|7eByrs8()_(#HR+>I{4&23Z9tz$PxXu_W|RlPSusi!aKK4K!#ea>8oIGuYj*_$G1^+ -zea!teU;*cLHHb*Bt_{4Q$pFtj&^BnZ>H6emY4113WDJjGEck016RRuADUzU_ -zLl)lpk8;@)Rm%k11WT`vF~bs^{^tgrNInre)NI{PM -zYf5UAvynhb7-o$^dq2RQr1mq$Kgts{*1WJLU5%cQ9($PB1)ZZY6aKOsYin!JT0WKs -zM!QkMA?lU>3bzLHqO9cTq9bAS|!)UZa(B<|dBz -zUXYy}V?vKqJ97&?Q$cZ4vcHs5@=pOJJHoRc=v5=YozDj@kC0(Z`g>IHyU8{E!E9HhgklQoTO)xG-DYr`(2tGpe`1uP=vdWM6A$TksW3KyxLs@<`N-m~R-ueY2yzeXb -z#Qk`8H13W-_Q4)2&;*ySL8kY-2M@xp3cm2j6nxc39t!eK_*5X`5Rsn9^ykcoUq#a3 -ze(;p(zDQ&YoQgL|v3=-B^HIvU)ti=SCSFvi(1rw8h6ggEH+Q=pmboR&d5>Z1`<@hM -zxqJ^W@9_SN8yP_l%Cq^rCJuPDYn&~hJLJv&tjznh*oVFk9+rja#>pT1nDFX7>ZiG-Cw+xUtBjD~P;hq^NcZt!y2#51GCUjtsF= -zc;(&aSp%NLDV%rgl(F!${pL|EPzaLzEU1N{g){?Aq4z!4A7!hn9iw3LB3WyibU*T* -zTz`axOy;yk61~KpcNfblQNgl`VHi+@ZNPKF`rG10hIuy-6KQ2)r% -z%J&qFK^AdF$v?aU?@SWfn^uyM@m)Z@L%_l4e3YJ@f@ep!Fq3FqRIN(&L~b1eY5#t9 -zzNEP<%rs8z_J!~I5cv6ox=y$;8B$G)*(oHUHKVbBNgL6uga1vuwCmbS@)GNH$cwnL -z?2lNT&WzkuWuBeD805DW0!KxGY8D(kx$TofYgyT4*yD!ec< -zg#ZiR$)_b_7w4o{P7~#o4Q_5i!cr47$9lIgA%5vt9Bp&kCyZWd0IsRaTI~7LbEU}@~3)ypoo5ejN+)+!}38eiW0ep!$umjNbvn{lDvxlbJar-3JKfi#TWJLQ{krg)`qeL@*FmTU%5~%p@dcuw%fB1CozLIY+ -zJ`-3L`DyNx+FFMB`GQ779Fb2&H4v#IrUBL+{zhb8@{4auDAnK{!DPHK*z2=Rq$pAbr_k*0&kJy1M -z=njHc%^MK|Jya@zqh6WbhIvbQ;Nj0NU2n5v)IQT2#g78^^iqjsr%K;lCGAh6(nl-s -zkU7za8Av(@>>|(+(0%_vX$nfh9ylq|+%~if9~a;j-2vXS)C$A}SUqrFi1Wd~D_t+k -zvu)X!(WJi!>jr_YWHE;TEtAV -zOE0;xGujM$TLV4aZj7=hvC1sY7<#Frd`4;jp{3Mt|S)M+^MSh*RV -z3r?@I4m>^TsJwZ!Ck0^RL%u{)Zo#!+Z$E!LWo%1eZV(6=DFL*w&Y6Z;{O*;z`4O>W -z7e{X013gtVBzLd8GD}s#Oe5XUr_NTVReJw2EMi+e!H7KVbVK`uOyG@VL+8AIfqlm0 -zFK`0GMf%m1tvbDDaa)T+z%?jLc -zsqjj`c@FhyW@pgcZm~nxI~y~w8oLceQsss8K=vT2??N0F3#9Pbh@+V*ug~N*IA$wYaxvPt#)1P|8*x -z&S}iQGF9qnCtb%9@LM5Uigcir^jz`;qma9wOWY0)WSzxq*<4RSyy?*j@6b0 -zdnAYXjdhRjGZQ{0iPDW0>ID!Vt%Om8-h2$b&FxT8$h1~wt>--8F^k{D{Ezci$ZCZ% -z<3S};b}n4N`M_%;BKZsWGKCK8am;I`bKtF}8&mzh6%DHrBbpC`L);}Bhki-Odq|^^ -zgT4?3(7`^)#0>4%Z})Nj5O(GyD2R_rM(1{|$Icm>FJO6!+sK^?UvGtwKeG6J)?@ZZg@IKtPzk3U0 -zL)Ju+@?V3$9k4=2IaRVnb8k+}JH64$;@9z42w_sz@&y4~&pq -z_`CgU%p&lqO!om`Hx6;Cd1T++U1~!Q7-<*E!6A$3(!6#K{(0C#U~7%AL|h@79tzGH -zpc2*w><%mM2Oo~IDYOFfAN=}ouNmkZZx*pO732!qp&}4j_osm`Fl3 -zMpm@o3A$JcK5FDT834p!pD{FD!#n5V{a-nkDU=ZBj!PIQRg}}k^4J3x4hBWx#jtezdiYz&c8kRvZD?b#)aM1QypVy{tNEVRYg>Ph#9)HV-^2d^Cz7=A2388j5!ot7X!{{iB#Vb_3p5D -z!aa|!j-gEIFQ-c{{@C*jyl)wDx6_+NRSz4w9)DR^6M-naVKwYQt^z)v$n6?cZpZ4O -zHYzddpE3F#W*H;B>uv#6O2xbVmux&cQ(AIagM5U>vrfm -zPKMUuOK$LhveWp@qih=M<kAtD -zy8_5$8ozu&RBHob*&@9C2@(EtIQr0`YP~!LS*Sa8++6tXEEg{%9Jm?9knUikpG#W| -zob~gL4{!OGzVQfm`O{m5Y_&Y4rx-DO(JGAC!I-*eWz0tX%b3L=t|dHX -zx1ga9f9(u$vGn(A|M!?}Z;hzYRkIi~=1_Rd=-#{I_SfJTnFCEsw>~Zz7-T0f@rP(U -zmq7E(9AjVMUY;sRmo<=Kc;;?4fyW_B#wzraIn>nO-Ob-RpM9YL9`i$Y+AxzIYy07b -z78)Ui7d5W;u&_(LV{F?v7m?x9q|U25kU2|h7o?A?v=o7yO=#ETdtKmV3X-K~z!e!i -zbqa^!58ij?64oru&wlulr(jo9uotsK!T1k$$#1#25=~k*M!}h}ya6#-;LPTEzXB~M -ziaiS)mC>k4t8P}VS+m6&Xo!iLoRB%u3C&n2coK+eixqC-A@Hjt2~3roZ31S~N_co9 -zPO`7jS>x#dCw)P7$94lb?fK@9J6V=VI-kBD#~*bf>JWE@knxrW#U@JkS?}FmPL;}! -z5br~oKkG&cpyivc@<0?JPBj#KAN88HPTjoBq%8Kn0xo(DG!0hsOL8{$ -zUsY@2Civ)^AKS1SJZ57_PLplhT+d6;qME_OS#7NCIs8xK5--0bzpZz9nAAz|4M~CS -z@NMgE`7QnTkA#A2dr1o-WlfVFJQ}Nv;w$n?Kko6-zQz(ltaAWC=WY(|xo5&hQ>9%P -z4~mVK79Nz<I9(OK!FblktReG}Bkd&33A}&eCzR`01#ibql(rz0*>C~yu -zvcdTK46||X5{$J|o{J-T_7XgM|5ef;yai5L+C%#<{w~D#ACgjnOZS(M-}*r@yNPoi -z+DK#dkv!c@XuX+c+Hu39Ry#CmWQ+V#UYT?ltsla;?RVs2+z$07F`5*NTS{cxeh2n( -z?&laclq%zPlKB&jTQYeA<9P{t8f*I*G!IG28|3vq -zh+K+qxlbe4Eb%7!zQRo(I{)wpZ|;4%E5X&LU6qTUHf(Cy9?mWP7gxR-;BpH7nV3FG6E#ykK}-`V(K1 -zfcG@|4tV9~je9vye|Oi8!o3Nr3_RlYYC;rOFC%)~0fg8X@ng@TZjM{j9j&qgFG1Tp -z5;@mqAuhrIfAXz~BbsN6k3)VnD!$Vyk{RH~7Dj2qjL(V^HK24>DFab60_+5|O03ch -z_;Y+_z0420_y+P4@W@U@NXoIvrO6a?9j{#~eWX?Slak*@{CF1fHhrWeZ*r@&@QS-( -zVFxo|>Fus!(n~Drv2QWktN>;`9?u57 -zT#RpL**d1_WJx3}7THbB9Ij!fnv42publ7HXtnT#jesvKc#N7;+CE&` -z(H7U(*)ksJ6s-|m4%RBYbJgAyQEe1g&%Y26(KVk1zAk)QMc5Bw{Hf^4bbL$14smfn -z`QiI?eU1(tU+K^`ixQ_sYr~BqwL^CmLt5giw0^u@pAKc|(ngf%&}Iha)P|PGyPW^R -zGDPJO;xEO4Sf$t7!1qtv2yeQFWZrGr8mCxZSnL7-Qape*Pu9tXBE-*}u)=npDRNbO -z^%d(zHmVB30qPNMA{8To+2(FMk -z(sqrG?aJ|`Yj<0vE1xS@?p3awzow;e+aqBekS7PtW2=;UbrQ6Yh(eM6+Met$1U7h& -z@p|rs1BejWNwMwU1;6jF#q2O`TdmaNt2w;WC#`f3YqCnE*ED{L*P-+9wdL>v2w#hY -z^`GJ^tkV1z(sxC|3w%*QrfF}%m4Yk5$#?8ZERD*y6CSZbvsdP=`RfQ_oMbv6d+gm) -zUjc6tWJfqgQS}B$JNF}prk-$;kiQ_?rMK98jxtLbNu=Udt|SW)3TpSc5@xHtLp{k^ -zR_`#kz-wdCq7F7?Q3t18)PZOf;N-34kI9yS4 -z4mHH2rIqq6K>jZ!s`F9Vhij@F8lN8deWI=CD|;ze(O>ELrlht6XJ~~pf4HL7DRf1% -zg?Y7m^`=6%9`{nMyXZ+ovlcpkiXNNG{<20t^>Fih4f;vdjxv$$)Tnem%icyjfnpV@ -z{S5I^aDD$W&(uckigMX^0hkqWtP-O!@2 -zI4@cV)QL-RYRx5k69*sJ3tg;&vK#isCQKIz+S@(#(6&|p+y6n~r0O8a0vd5y67t`5 -zeaznpe1lP8Ql@)VSWWO?#q1JlmL+9~!9Yxps>WceEmb%RST>#pI))wFQicY{s?gqH5Sf+@UD&$7nU|^79I>tNW^i&pdF4ZI -zUoZ?7p|^6=N`Q)!HqCpYBm*?$Gh;dIIqO|Zn&dNSTbVSocYWDGjq#FcJCion`-Qw{ -zb1HNOR%u=9$&zBK550=+5^LIFXUya+djaeDJ7}KrivUfatPOCJ@Q65570ybdc0N}> -z48GbbF}BKz2-c`0s*2vAaR51GTUB-NGQ^xb+4p`|M2rcucTD4nr^ya=qS)kGkf!sl -zNE_>GgEoVy$Vf7cojd+J@WrDb1qjoH`?y2QVfK|a_>^IH5H*YAD85K0Spcy>ifw}= -zca~8TWhjkUMsbyatn!=3n7N4pA$FR<2dyiEUVMs|u`KX0U0Tg->|4FTuN6;``@lOS -zNF%}JvetQC(mgHhIh+Bx!<`_#*+%{`(-qBfhP0=RJWyzj8QEXueN&Kt9MNPs4+S3@ -z809CgWG6Uv!8A{L?kbgA!M~4gQd1u@Y41;vo^5CR??bPX4==at#ZkDzXvs1YqgCVo -zky^57CukXeCG_6pl~41&Ogsfj7g5I6y)O&KuL4JIrTX&=f3tB6d>hAkW<4_+Hf|MS -zxowC?{wnam?F9I2kUtPnY#lIExum%``#QL5ptc}arGjN^y5cX?72MftQBYi2)79YH -zy|7#y|0?j09-6hE`=b068*NP%XDrZI>H4dXDNv*8t3cvyJPS21_i(7$>6@;Mdsu7z -zd?CiVl5|d88=-jZ>OvnLV6ACO2j?$n3EQGgwKV&K}a97JzUC4Z^0&j -z^QZ5gCn)rsbigyD!PoSs=L4PadC%*P7~e-vbE%+BBHxwBPJlf{Z@(1$SyOz|j;Bdm -zy`xx<=o)6i?)n3Aj9nO+7S2AuKnJ=ZoISh%-t#lfo@?@mvyVde#+(Jd -z%JhW`ZnhIjnN)ho$1&`G6fI;^c~J-X?56Pzxh1YazRbg3-%yJ@&umZ@jQxzKskX_N9DtTf-z7h@oct`92|t0}Ge-3vV>qDGjeUrn&P3=Y_xM(AeYIC_+?TL= -zOA#Tbo7h7_HJ?WISHzHjRy`zBFQU)r5rIk`T1Ls -zr-7?_?e0iiMAis<_ek3j$1l9;z~lSUe8jQRI}%5yaYQ*$gqBmcrfj!M?;vKy-u<3Z -zddO|>{vD3&Qmy+%|EXJ!?PLYiqNaWOy})Qyqdl@)?Zq7tIG*l3b!!3Ic;20kk_42j -z^hV(sqj6;MTE94TOWbb9eepOi@y$S;u{cWgYEWkkj%MNhh1)m5TjtcQMccDbGYO>| -zd^15uNc-*%<@=H6()w%Y6d2>r{il1awk+_}-&)z~o$`*9o*Q&rA@9hXIaDvh)^X!> -zZ-#B^kF|EDd_7caXQuhb(p@QE4wdf8H2hflT*{|IrO#y!BU)CK0jdxCbX5vgHERw9 -z4-9^AW9rg-d((Y&H}`NM}R9YM%ZDvc8;?i?|&L!~EopU7bYtfS=g> -zg?t3Qf^VfS$!_QmbTet=VXdV4Wy2fgCzi9fjui2o$n;wFv3v5EHw|w#Ai`t$lEhm1 -z3CFiuOU-y);{YRTJA{_SdM -zxIz)t()oTX&LPD~?ZBrle=zKg5h1Mu-icP}$0_-?o-rZwm7tTJ9i%h(A+n4KsMaVc -zA0$upIq9{V;Frkml4r1yXs>di9<)L$K35-)IB#}>PU--DW2DHxlY+ey{Kv~W=~n-% -zy(6q{+c02E#95gn;7`E2Y9u0+Ok$)+NbEYvF+e_5Le3b(19KEN4qBQlJ=M%KPlq46 -z{xo5LNTC$uO3;BK>ycsQA7>P7MCg4a%Bz+|GRDuE29iXkL(SbqWqJ4a|GZW? -zV8<2OT@N+TehHMp-xJadMb3}My=4PNT))?z0sU8!Qb$Ie7k`780S;H4Y%A&le}9!^N(`+&U@QvcieGa>fgM9`kqWrRRFdgy5Q!0@4?10kYJ -zbQQSOLr3MnRSB0Z4b>)Y8ONlZxKf0Cr>Cs?)4(>wDj}|cZR!Cx@K+n~z_Fv>fwz!b -zw#H)K^;%ilm-U{Vg}i6gQ+JQzaa1mcj6@}vw8wo!i8dsGiVO!e8NRe<(PmJW;Z*V@ -zN?iDD#cvya&*JCCZwG$6hU-w{LM(E};`b$fGJY5F>&CAIzdrmv!S4_FoyYGlu_JKD -z=Q#4l(!GDt*TTDF8I|dENuZA4T0Xv_OuGMXIQx6-Ik^XS -z3@B9e94P2H`51n0;#Y^?TS@#T;yg%S8bbUxJZIvxr?W5)v?jX-yhHM%7AWduX^;@Z -zKMuKOGp)l!uHp>*)Sx{t=W%4W#=!T(2d|`9F>NpTd9LnHhfWqzAKgIW>$iv>h|HvW -zkaO_oe)1)>d)0_i(8fFf>|TA$QlLS+-!(5rjWav&(cbT}#w_r~L+`?rhuh$Q#g`5g -zNFcywA=BO9WmyPc=?Vq658f@`I+#YX33NGOZ8%qzhIulwpZCv@bVD5VHmw#nd%+Jd5{qGbtPl`J8-X=QNJy4CG_1D7(*qVl$2^&JuBb7ud& -zpYxeP@4esu|5Z5e=j@-eJm;L}Jm)!t`s-oaY1exX5U=QQiDSdAYQsXtTm+wZ#j^K| -zIw%K2jqKz#LNy`RNhIWfR3lNSk?2Li`Z(>%>#L71T<=($u}cuN4|VECje{P$cGMm1 -zx>2)G593Fv+RdXB?U|zrItFwqc2WKZT~&zdmqg#RF2RhK69uANuyjJd4zKL060&dj -zdUXfY+4HVL2(9ddeM4_L8z=<7|M!kT_&SRHj7zzz%4%h4Jk8}UN{grnUJuayaSdS! -zf;vDgbcNu=p5A*3zp4!nyBZQ!TC#KUo+M}!mq -z-#!A~Ldq-He1v$A2J`4*>}hmS2_^TzUW)P)ZBE5x$R0WpN^U90ELI=-zx@PLW^p|$ -z8xz@7inBs><9nroLANO07-~O`mmKR^$rxb-ozd5`wwohb&89rKMU2UFDDWFU2JN7% -zXWB9KEDV3QgN_Hic#PRG1ivK#e*wSkpcP{xT3thuha3eGQt^7B{=&8Dt1Xt$3rAVh -z7;#KONbgxCcYW@v&>5aeFF}*fed?Zbviq{DWRbPEpEyAYpPI23)Ys02W8PQ}c~v$3 -z!XZ&Yt$@f5S^bSKu7>RRrFwdpC2%5oa#f_s1I{aDiw9cp*F -z_Lr9RQQe@*`=~3h=0WQnntfC_QP5{m{aZCVOZ2RVrR{;@OA~Pp-17R -z=a5bj`i4>P(_6o~*6mQ;oIC0=v@EpL0_ -zR_p3gtVJI)ci&PZm^K{Qgk9zfY(SEbb6x>nVG@v@R&ckiuVj+h*T~6qJD!hWYlF;$@!WJ4>>x13KkUA?*lt@A<2O -zn0G}R2-nYt*J|)BSyuXzL5PJu2sFTV8S`O)8frx4H)9_dYX1vd-OL+va5c~~)q+F$W+ -zV;%4Y1yh?X|Cqc7lC{ywT2_}PW4CH!gJWzoZYovQYtW00 -zj{$d5hMP~~#qwV>iD%(njdG1$RL3>x!2MppsWa&$!x|^n5oDM0CbS*##Wf5Z2X`|} -zVr5!dYbCf(4eiL%U~dlChWe*hgV&VO?vKKkASJvNiIm3ilzw284rw3Y%a7SuFT#_C -z`e2muR*ZPsSCZ^(4c1#pm8HF55Q}?_P#+6cXsG>+r%r -z4fd_P<7>!+su_?CZQT>GUkXq*|dt}Lg2GghEwp%F`aR#*~636)9(?!%h!n^8=m -z1t-ZA*Obnw3~$ofU-~csR_KG&u>d9NYuWnD@G|mQ!`4%Mf`9sE(!Ca8#Byjq*q9IZ -zeJ*(*KPr-Ud!KvG2HG9E?^(3>-mM8g3)w-+Y1|;sZraMG>l2UX+x5y*@c&n-Fk)uA -z2n!*w@9(5~Im%p_REN8usZH&vwLk3_4Qtu3I12NWXMbreTZ=bBsP~3-#6mJCc3fCW -zI+r%M;)V`h1SVJ5c3Qf7>4itWSweaeKIt-cqX(u4sryUUGVe@$myXh_MbBT0FG|2m -zs9O72)akx)W*GT?d-DdHTDD~CPy(_ -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 -zH^nQBY7Mr%+G~i+GX3+&uv$iUg%K -z{v^m$NYIbBuOH_Ilq-dndw}CZs-G9J7fmZuLDq4TRb#9`m@i}YGQDjtOR4cnmq~VI -zbPMF_l`i>sojA^*>;meE>g0?sLrLF5ZZ_0G8QeZYtOR3W*QfaUGl=&$(1eQNHZ4y6 -z-giHwR-qnP*t2n-3Nz7L2vyiqMc-X6n239OrTP!cNSc*tF+!$4R=h>w7PDqlt4)W5 -zt>A8A&K#Y&`<{7bhrhh8nbLUPSJ<;pS?liQew5xn0>1J$Ka2Fj74dMdw4gsY?!hfX -zv_G$#dklW#ey*kCl}bKjE#~eg@-*@jb7mi|A^|=hF)QXe|U9keXp?GpH@vf@UpSZDa|9Ah33OaLQ-0S -zSt~R%?7Je+hPS}-gI8*B2|f1WwwO*E^ceFp;j#xgxuJbUc!x`EAFOO^9ua1;J#5=& -zqt}MX*DGyw31PNo`JG`(i|V7&rSGvX$nW|%j{4~>d2&q!+8?<_V*LB1@BE8#%Ok`} -zw;d>4OCB_BQKM*oZ(}visc_qaT;6GxbNU8nTE9W(;&U4FxTQ*ZO|L^9El!IvdZlkq -z2$NNUav1Fi2Uu0-2NpaycVNK-b0IlP9f_J3%HyyLGxKqO)LTKL45OCZqqiykol -zdYIR}jeTKk=ylJchwbzZ#fn5eH#yY`TRN@Nr>KNYQ^`&|_2o!t)KBQ3JgBE;P)(rB -z=I+}unr#-MpCp?5+qnNy?!Tgl@+SXB`@##eh<*sPJnrQ5?&*s!l#_p9A5HNegWWx0 -z7UdTQzdWAS4CF1$iaMSH?FDiji|-WpcT&1uX(Ub`sf@&NY!|ghzRe<-ypY4vSIY5;cV8tskREZ@-$2VHqn7bX -zKX6*EFXFB=e|!xsHG@UqH4+nCe*o_d3PtV7+;z4`hG2UCO=E(Hm$R -z_}QDFueX|<)9cWN3-l0#s0)+@^A7JpwVuJo>$B4H9x*^sY1UELz??<(_S_9L)!Pct -z!C9&a^y7VL%PsOSN+UwnCin0iABtob3A%fVj+kj7MrEgRn5rXsS~U9nd{1QOyyGe( -z&4%9~rKyni6Vig)qWw8_^E~Jdp#J5ry7>dx0Y;yF5q~m|Bc0g~7S^&8cZM1#cZG~O -z+&o~KR~jSNQ1`{WDR|%4DUq?Y -zJKUlis(U)V{d0se1JP>0E1h)faWAAxYQcClJ60l&{ -z;`B|N@OZN@;;Rk;r*p8jBW*=$l#dFj$tB~N9qi|!mMY4_?p -zKfY*#doN4KB)Te3VVom)rBx`UOjDVkbX&S(o*>PhudmffvbzVXo{u!*IdS4ODji~a -zz#C6$hMmRAEl-bkT)u|B`Fe0^!X19-cA86y&5qqDt4I0_qjbwW+3zIxJ5X%yUdQ9T -zk9cbX@mjcF8YC5EEwGmdZWV4Fc$|8i#u$csMbw9=Hx6-YcpdNHbv)R;zNt%%`}L9L -z?hjC|z5c~vr$L*$-_JW8Nj2kk -zIXu)iG4p}%;`l<$>%fH^zi0RncpAs=8;nnRU{8~B`oLi5R18Z&Di?Vwx!m$?N7N0I9O)u<;o2SV*+j=J9 -z%uR7joa@0`qh?1|3@j(07Onzk$7ndd;#0e|Y-xUB*MZm&^tZTqdT8U~-5%e2F{oq2 -zA?hdJiu^;I&IXNj4BFuvSZ%^Rz1F!8^Y>2khZoesu5q;WF=)8yxrSS+RrxWU#}3DN -zY*KaTn;Ev0g8$nu!&cZN!bW-Mo3Z*q(?W1&sfSjuqBC*YW7ZfwPT4vmVG|2d_MDWg -z^2s6Xu%6>u!+I`a9ITA$Jcu`%=gq<0E(WXSV?0<38Amue2EZncUn=uwTB9KY^h+8a -zz1~cBrb*W-j!w?jT*kRsNPm^E5Z|C!%)cWKtFAIJHOjhyoxkff=#hD(Y~Q1XzpxAF -za~^59Zx`^l91rn@0)NM`-nRp|ljB660{BOc<9$lt%N$4f_5lCPvDP;f_*ae2lcyMSK{ -z;LE^|0#i!g0q+Xra2}Xa%7puArU1v-VIcnY1tV^!;P?}!?Q?HKc!i;`r*l4LqYCWA -zcsMyuGyIf>dhGgWrfFov<7FT0mQfE;#&D$kDo=qV?p|pZ@KOWqcWJhVDQ8Y85lXeJ{r=5od&)LOE9A%+}{q+UG+ngM~=JhPhmh^#J@b -zaPCQExQBmr9Z#)@f6YLS3wZhWa6CB>I}Y!nc%_NFK4hO<9%C>MmCf|XU3MSN!;m|T -zbFY+wy*b82v6xz7SkG$iq7iY>^Sa>;ww3ps{T>DIHjejt76b3#_+`&f;GGF5o>Juk$p6bhvlsXcjvw{B0(^kud7e7p -zLmbcX*o|+nH`O-u*AjzAI^}-~EvQG0c_7UpH)=I=xkq}}Pp$MizSJW%aa_W2BSO8- -zd!I*Y;4!H8dGI1CwO#`cv&*jouHv}XPqinzzku*n1})ER1IO4Qmlq?p4b-kcs!s!l -z2Jmv8^Dds!67F8cW0!Du>V+O@KHSN2RR-`}f3SCYuoEZuC?0;MKiJnj(sch0_90$) -zQW%o3XYQQuk@667M<9h;3A5JGN(1$GkCel6qSp6FBQTc-`>O|UO~VQbudlLM9%(SB -zV4wF$2|PbJRxEr52U3sVwIREQ@G#VuJUF$W9{wuFF6?-75uR$b$450OyZ;II2^dAf -zEb{qhW0YQC -zT%rBpmk}sYBTr2(Q3Kq^8RXvcD)1|TuiOPZhKH9|AX~7%hRrFg$x!PhJ|Q^&DT~J3vZ%6~6x~P$Y|!+v-cCkc<17RD+-KonUZO -ze&nV8VdE)$5Qrm>*A}n7&*yE#uL_jlpqED3L>^wCS*KKGZs)VJikw;*mh -za;LmEQ{H{0TFXnH%TrqAz24VXBE|%{F3?)bC=Pn#1RicNFO{6~Lh`W$eIDTDl6|lf -z?<-4DAWylcPX{H;rx8MJkk7wf_L)FFC|ex-JlKiT7sx)Dl)`-4^N`OlluikG@irgT -zJXbxclAi4Q6no1v%wquvEcupGOSNR -zBIuEZ0x#n|l=!b6RC$0mqeiB9qyZm%3whVQ`8d0pq!JSFmj?QG{0+h%Zf-&j4>^fx -z5Bigc*n0wF(~X_&U_+F{r(8kp^o9)eaRUZ!u0r?nV1A!ro}4Kjesf-{rEI -zY=o?3=f}KeILa=hy0NEE!>aoz`xf{l@Gju*fKLF20(Szx3%mpPN8l!41@L8HvYDp@ -z{u#Idcn|Qez^?)i1?~dg1-umaci>v!y}*A0zW|&CYzN)|oDJL!Om_h4fO~+S0e%D6 -z0lWhEC}XLk3~p(uKNEIdpwSHXMR3nR7!U9Q;DNwC;0OFi8NE(c4e4zz?9<=XO80$& -z-(NGP1mU(K9PQp;2i^uuyLbAw9l#TS7X$AEz8RRlXE$&bFxAB#;0$1@uUCLmfu922 -z2Rs;<>f&|afxxc<*8|4^Hvqo@OeYys7YBefz^?!w0v1v3H=(as7bv$gFmDT~Dx~>W -zCZy8r?Uw$)d|MA%fjG2&Y5-ON{{Z|da0u{4;Jv_F;B&xrz+u2&0#{*gL95JR=pz%+ -zrwE&XX;o%}JXr2kiSOxJHi28arFx$kbKNHN+pW!Rev*;IM>DNCHLfDQQ=xsW=o0l` -zU0dLwy;%|OwakeWF%#|M)KzdQOJKEh1wJ%K$v&5z7S6jVmG7LCirGQqAP(U@(mC!+ -zvzABtlKW;kXil^6R6lW=jfBXzjr$t$@`}Yk>nE)Ld7fsDo1EFOil#GvbuH$vB;Sp) -zE=&zWUSW=h@ojD?)Au*n{3aXh!ieq;aipSSA$;Av^yO~oU1ENkuP_ruHRP6teaQP& -zrg#gT-&j)BZgGstI^S@p+ASrao@X1nfcgX7X-MDbmSTYJF)Rj(0J_(32uK68(9i{> -z04g%1Z*ogs%&2n>i-8!>1BOFD*MROfbOHSdG{=y>*)9DBw7{?!=rYjVhC@K#1Knrn -z0=fV+&yfB++8=1~^LJtNv;#e4I0UzU0L?OV0eu2=havq1H{P8GXEH1X`T%H#;SkWf -zK(`yZfSQ4(8`58NONW6942yvd08KR<0@@EW&Cmt(3eaRj`b!x9Kvu(Iplv`2hC@Iv -z0gX3w0c`?WZ)jm=y<1ufEcZTYvrCxguFpwdv2xTndJEq#dZ9JEq9-(JtnK@=XYgX@v3ypQbg#PQ7M@+Q`BPLrOF(D+2%R~Er -zkOo;?!}FrB|3wkD%?=tutWh(BPJ{LKLG{g<)_zRPa7)j6E)DPP2!;E2>!Wz@)nFZi -z8~bj&xZ8?Tx_)u5TDs|tiPkT$9(fUR{(ltUEkVQchTWDzyQsh_6L&Lcr$+Oa8MR4k -zTbjR!Ymoee<}czevU>w|u;fbh^{Su7yvW<&FFfQ9Kefk3j%zr6nd42ssz9u@{&>Xt -z`I;UfN4%T(7ie?4Z%#M+VCicaEj -zQwlN7m`UUoqWyn@K?8p8mX32wk`}l04)6f1M=9UKh|xKpXiD)7_`HA;>EN>uSl&gr -zrQICU-X8pmW7^xhr5Ayp<|7>W&UWJ_za6D}nx|!hUo=8JjXHSR_bk5dHse6VSq}GS -z5$9Q~`aVUR$3Q>F=TJMo?_o~eW;7t=L%?ec6OHM>_W^IvhEA>RMwr=sO{0)b=%$2=PuIpSi?uiDd4AKR&)HJYnV0m5Z&STk!=Gm -z0j9W=D{%uFQ!+ggIS2JZGEnP7e1TInq=i)z_m#DC-Vxo>fIi`+u9w%)tCV7le`ku+d}F+Om$`1F2RLxXwnFC94hfW@2HOcf1X^hvG`WnIV>Ye@7&MXxYF -zHe7jSeTZO+#r@d$#+a>Qt=`)2P+Vio!NY83u}50(Il*oh!U`14b&2#2+8j$lhUWYU -zHZ${Ng0go*#R0rBfj93QD~pBZ0sL0bN}u0PZ)(t)W&_SN-BK@?!`nDbW2D^sPKhC7 -z5M=PA+2oe~<)pK0Iv2uPfmUahINWF;KXRGF~!Gw2%}sUt17_#n~qmPf_9ko&s5avV7)!^ -zYJVkK6L*dlS?A-eRzGx~PO$!hY;WPZuYmhd3*f)Vszof=+4k=ZgpybGq=#NUMh$Lo -z87F}aF>6_cIt?XQg0HR5t7pqO^{A72aXov2Q^oMRFt47i4g*|O(U{R2^p~ct)U>(Qbvj*V)9Dl=>0w-{MhK&MF -z-SP5y0sj -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

DU9EEAebyYh -zS?-r4j4w!?ag*aOc}j3K8hK;9+gZ-oD^27^^a1B~mNg__*v_&ax!C+lQe7hHEzwOC -z8k-#$y@R|J%`)~IsZQd-qj2KmPQjWJBQ%e6q3iSbIexKAvN?sG;wf+Artm8^nVZP# -zJ*P)!#7*GBcrF8`^!CqlNq=(fcygCz!{mN5+-c9$@x-Y&r6_Adfufl7@623a2~THPr%5V;H0>a(suYIpARQ>%jsrRrJ%RoYNl@> -z9_o_nJvg_!!KbjNW}fWxGJHmZ}y>DbaTe4sJ3Q!{HFD666fO@k#r!i=Jmi1D9+Jt1Ba&Eap%iIr+jv#GXDeoR^{TB -z4b?1oEfa8Sh`z_lx%#UZrFaEBPd;lI-)g5BschpBSq~~VFe}9w)wLnD8jQ$yU1S+= -zO#6)Eh<7mLkfzZiZDGpoH$#6{*ZDGfgpk47k2=2?7gBrF`Ok40{M$ZG4S8N>g|ha_ -zFY1G7)~L@s(%)U;7~2SpwD8^z4d!3sOpCA=6LyH0Q_Xbe8Z%iozG}0JZsQUMuVImQ -zqGTyTZ~Id!Qw{7Ph_zF3c93q>Gz#0?cpZvfmeDkt@!G1=uf$v>~rwKL-V`jea>smo&@4*U_W^=rbF{Ph1WeD!X;x)w|%J0q(+Z}-#e0tgR{J*-p -z9b;7sjo{LuxVKlf1N3g|r`F+}X7Cs~L4&oN;a{{Kne@pOt#)y~@~mv5MAbQ~&svF4 -zM{B!M_+5;n+heNEITjhsvB-CMSDVOs>U69UNN?o$4`eanp2S_G`Vid9!eT%^$ZLZ$&0rcj1ZbivHgGNe(^k#a^=us)Z*0n|{94Y>DDEq=dyF -zvgDGeJe?@ljk+^o`u+JqTP{M~Y1Qcn3Nc7|Iq`CwIC`N@-Ko2MZoZ5cS}vW&QuJV~lvmWSalk6QZ4Duq;2CtXN>jIknrS -zAlW(Y85Yw$L+p%P&m?k}90q -zG`ygFK6x7Pvo%gzvtT^M_K8V+#rKReaT?w;#SR2(XlKGS;utRJK7=xNsVARe2a4i4 -z<9N(R;70LcK*^z_`(oxf5fW)cAirDjGVGfo?mDzaHK>I@4yy(K0ktsxpjtQuoQB`4 -z_|v_m7M{iLQTWkr?F>r^(KdZ8orjHe2ARaZbh5)CrpuOHvpbX+p=99Z6t|zCw4e41+{P4ti)YF`iK_+;cCB~fmaMYS;aNr+IRniosgUQ0%=TdC -zgO{n&mbdG$CMyp6p8aZj;a9Cnbx48rhhU(+qzn2>Czwuug2iTTRnw^5iaYqLjUQnS -z*LL2;OghnCIWH!EGNGKh=Jzc5^Y`R}@ -z;`DN^(j|oN>0E{In7=hRoyozDn95%o$T15!o`5t5oNvRfWTg@J-FPp5w&@}5HL&S7?fz&1CxyOV53$?0V+X8X4 -zSgQ%dyWC8^*>2nL|LvgF7Ul8#qbec3fb=_(ON3NSXKX>dL3FFLXm^t06UVezdOL(v -z+%^fg`=o(z4KIMER>@w=wKHVb2K9s6Rp?#)NkZtC-hEGKojC(~Z?~(2;%O@3PGHP9 -zh0!JJj^tWzFL@C*EpdkAUX5Fy8GOjm94M)5*tLKczb=&f`~;qeH*_ -z>}qnT$`xvNOZT|fSVMrcod@AIiM!2!o0X%fNMVypaEIf!nuT3O51p*S%X)%P;DUt| -zSUQVVevX%7cTNg-Y3-Gk&#xwjXMj&TqSF -z!-?M@cVh``GS(_;#KziRm4fmRv_D+Ry0J+a#qrqK -zSCyyeY{Sc5Yt6#Q!mfpQ+1HV9@=8d^Al&e>EhsGx>D&P;1ZX9lTk3L^6sxKAU&?G* -zcLX*Z58Z@S#X>*qx)m$xGT@g9JA|^;8;lUMOIq*N9Z)cy4rZ=aa -z?~J^!M`8$=z45eDVn>V!J6z1tW%xRot`!|?m4He -z$9-mcL_wf`wI`5U+toGT5Q7fxgng?7tWxM)cbhX|8Rhl&fg3Q-X{=UVr4D6Sh%zkC -zZ;Bsvpf!GI{7C#eMC^2US>XofL6rixDKId_Y*Bvl+~?E0}>Y!4r) -z>}X+2#w4gz=UQMDeV}S8X1xaX*ciHp8QY8%sz)@mI3L4ofb}F+$#iR9)-)9=hyysK -ze|~6hNxS2vBacJ!7j2FHXY|Lxza1Dq#4p6#xE2^{P?NI`ZVy&RH7c)c(A>jv=jyGE -zsI9};yZiAy2QY_ZM3^0K#bAAu?S$3=eJ{SzLT*lJr!NcCzGAoZD^3RXEqKRmhdx{r -zdMwG}oVayB^+n(MCZt8&J|s%`+=oKzRK9msS+~GyD&FouJq^QX{=zTU%$G>p?kXt| -zVS`>DLehnP{Px~EmUM2PzOFj0xX~syYKQ1jl|#ePTjEUN2P0}DcSLWGdKuPv+~XlT -zRb_GsD){3~@QtcH%(TT3@O`5149MJlYmrkLgHqC258X~6dPJbqK{_=k*@OhaiTyum -zwUDNZQ@X^p>FLzRDShoF_dy(Y(CM^A*4uDOpL3tx+~-ulht98@(h07G9tX*~6Z&ft -z(Z+NO#VIxMbm{cUDK+-#)jOqzK7D(q^y&?I?r4cV4S1)tm18PBmG={_Zx0Hm5l*QU -zJ5_V{0<6qP5_37 -zbtMa_3M2VYUCrb*O+G|T^TIOWiD0b%{e`T%!e$`SbxTLECspI7_wcN`cLdWZR+437 -zl{whqRN!5qoQ1F~HaAC!fA7tS$G^onH^bV|${ZVeDrX+h6F^VmZ#n)}_d$h -z|Bxg+nM0b?f0k4F5;WyPb>Ngf1r=gc1*pG)%7wA3z7FKr5Vw -z3rTs*jsb|>0V={s7%Tb;r}P=<%m8f%{Ws8UeW7X2<6-$dg-XkYIP^d_EKC~vnZ*hM;}D!5SZ3k$UMQ=o4Htq9P| -zK>I-}1N0&{)iH4{5$Vl$%i}<%=5Q+lG$!O*J5FiV`?)P+4LCK%xaqXW^K+zoEJh~i -zKz*q}m!W=X_2hSr<=S_Iovty^UgIG#V!JVybxplhF}g0me<+Xp19CaTcjG@4$^L`j|9PMPkMKXq -z{eKMj+u{En{F8b7pWqLz1C;Qm8~hJ(m&-*I$|>zf=zbL1vBThmB^((AO0&Qz)xw{D -zm*ZvlKacN{zw%#5dmT^dUr2iuvYTZA>e}zj9`!f&WlpgPk{R?~_;jw=S -z#7;o$2Lk?uJtt5zck|eUDSf)l{~r -z@E?gU8O!U%h4@2*-__jK_!c|%`-J55DgG}3e{;7J@jF2!@v^^!vcm=~+C$dihC~*j+u -z!{ej<`+U#B_xXVD*?{j__^Nrix1rq6@p5kq)cHQt`EvNja{uk{f1H=wiMYYOzL2~8 -z5pa1r-zm-EE|=jVpP*sYuFd2QsnWk!~73lqAhvzO_=}rS@gL;xjsa>TFJ#hH^-=M$>pyB -z7r*f##CV%i!*1|@Bj6(YlhpyU<1XBMdk~>_vh6HwEV&fIMo;zR{Sk -zx@{&%*>tcHi`7_`!oJYA4J)~|SjBC_s%P=jz0Z -znyt+$yk~J|&Tfn9B5cfKl?W@tmm0Zk@{%0N^E-|9oa`=M67h9p9cGGx; -z@m4v<6&>ya-y7bzYNxZaZvizE5FHC-GYQ#pd1Ey;E4cQ=3D6+t`XepS5gN4*9M? -z*;nFkxoNj$Cl5`bwqczr)AUVbalItx4AqFCLlcSe-y65ta@$1;ch!3~RZnC7d-jdud$6Vq? -z*qmUyFlb{TTn_F*@|L0=&A80lEv<4=4B8JX?026i<5C(rE%Hg3E_&fn*3G$JzO^<} -z7^1RnXTQa-W1la?tC`sSw6LytpOgr0-NOD%F*{a^jIV`S*zce;pk8ygFbC|y(B7Y6 -zEu=>ZzsAEh6V`ey?28oA%wn*GMASb)%>cE5Q|&2q_RJ(3r%uDK34XK|YGG$VIYE_k -z>MKw#P^FwYkDPO37-V-8@&c$^Ks~^zZxM1r5tB#*vxR*JYCNbyPIZD>25Ks&enjqX -zA@@8^U4~x;{Kj$WXHey!ayaEe4rgK*-i)U-8T>9FUMi>T@Ou+}$(-s2)dXq)r+Pp= -z1xm*$52yxEp`hq=I0to4H_|4*pV<;(Tz4c68d|dLPKJ|sCFj`_4GjAK=h&V7=ycD3 -zR*s2Rng-%U)E9mY6BM1;DQ&?E_t^D^!Df?k3u#(looXN%UM8e-$$?vxqTwhcC2H^w -z2js$Q+2^B4Ps{>6x#dMnYC}&r$|iwY0qQuXtXyZ0NzI%Jwqhfvf~{E3sbDMaQ^FP6gXI -znNtq*4H^XlI2G(EI+Vsmr9m&E@x~<0djezyX}E_SI*m!sV-K%3YJfHXg}{;*$;*Z#^g0!EJLPj1MKsxuEf%-R=PwF-F8Zq<)>O^i -zm3cPo0~lVnr=CLcawfeDyu3((n|Msx0(@bflH<+LoM$mAj@Q9GqDakgCEVYP`4}4B -z80omnP(6=sr7)abkvnEa+A&wqtrc)WoSe&=D>TA>fkc&d6BLI@ot`A%$*8kGJP*05 -zug$?Zeejf?NgW=nC}Kl<{1p_w2H`*T+=4W52hSCzKXdJhUC&e6jXe{S-t&;#5B5JI -z#ZlNrcDSTzK8-aLr*$h(XG5HSSNkLVqpDl~(knbk(#C9B>c!Xk~zuz;7v$K$E?b^pOjz)8x4K28z`KG2w_w@T8p;3oAP -zJ?V!=keP1s`lY>I=$;~Nk8}~QYey6jw~?erP=f9AJ^{y&q+-Mymq#2!!b!j4VB0m@ -zKswt!KyoH%M$)}#(Eu$StXIgYc6FZ}$gk0MpWs#l)z8<+nc>y}^@}vO+&^e-?u53W -zV5D1TOtK?I>^IP_253OS%cj}vWBNpit>+vnqP%8$|ii6ODN6u7-vyj*4$kiXqdmd_-N#habKGgj+ -z{ED!-pX$Zw81{l~6^BLQL8L)7#nD#Iu>TkOI87FlPYGpBIh8fmC=Q`||GS^K4V7nk -zktA(IUMnz)Exhek(^-P0flX4&y^>ZQUb@XTU#4m8(aSmI?Rk<^inu{eB}oerH^`|Z -z=>hl!Ih6!kOV>G-Bo%@Raw-Y7macOuNy-Bizqo$t;g$}N|Hi-K~7cS3393o%uGQ}C6TRw|Kd~&(OSf*B-jeL -z&Z#8nN7(P7k^3h`?rM>G*n@m7p;3AkA>RbIvGSV!A5cL~B+;oyA18v5b$(XTzN -z&*P8|aU+>CKHH_@Co#SyKLxzl!xMVaHQgB{`j -zQP2ig-^Z)Ug$(^P&Z8_3XV3I&-8_=`` -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 -zztu~AnPcg1!d{U^ko5 -zb)AcEc~su*>DenkKlH;hNp_i1QM{Mh9va<67~NmUB^J(hc3YAF6*#9pUHX>fwvXBA -z6Y_+Y5cB0)>P0~97`LDZXDSi$|Ka^E5LwY3>q|F$1^&3-?Xems$M%)@@M;cgZ5Ovg -zgeKA6p*>(M_9|xAacQ-e(r5L*G?X46e&~nN_Wt8N5Anx)9RYT|w6Daz -z3nRMWwf -zLokjLw@AmORnY%;Tgb@4%c9KPP6{DvBFrE-=kZ -zY{irUhf=v3;LOeDxY}-!{3pB32HbsyJDoWmcOT;p9>#IkjJr3?3Ap-O#{0Ggj -z*GQvgB>QTl(KFa!jWluwJldIe&wmcGPS&OhN2jxao%wuFVKX%C$lsYiHn{UAc~$vI -za^Cj*s{Ht174jUR(#^v)EAtWk1~q?^|C@Y8$5Se1Did0@nRaZ*&3dleD)?qJU=6Nc -zk6nW7>i&CxO<%KhrH`G_-7r?pS&E!&VAGceSXd4*!N2%GGgYy`EYP{fT>9q$0II{IH0yF`ZUQ0ma#WjrIBe?DQSvTG8&p1;KM-2%}`!< -zKEPSk@QR=X9M6E~0y;Zjo(`z0H1PLzzSoF%WiW;LoSFK|T2YE)K?VP+*D*B&`w4<8 -zf=Al3xg9;?JXkg`364;s_p{)LLj@tVPS>Zp@kVLn1MKwg;4SNE;EVG0T%Z0b)$A9O -z29EZmrr+3;bTdi%DQ(6AP4H+>S~@S(I?pssTQF@wrtksUJlgbGn9)OnXrQ3|IX!Vj -z*IBmbX)d#no*(SmvzoUZ40HNOAg6(WH5e@38kROZ%B<~7dtyW%_YjkHv}vJ}%X;9l -zd=|bvq4(FJY)M^-2-m;*?~dTF{+hQepoV=2w}Q!NK-9zrL`_`UpuNCkv6ugA{B^;< -zG^oQ4#jP_kgG`q7@_(gGl6|MmC{Z#K?}a_cD$qC|yujY~fRgzPY5#O9!L*skK7{+1 -zkoE=s$R=eXp0n_0$KP-97i)F)jAacp<{Eg?O6xrisK&R?QNk<4jD3&7(<)iiBX=h} -z#t!A~j^$Ru&rQD~$mXcC)mhbn$M!{ZB5JfXq5K^&h;3k2UWA60Go+uem -z#3!O7Xtg00WGO5ul09*rN~tJdC;q4j#`2 -zOBIeCQvReQpDV<1lrpeBm84pzK~m6evEoCrVI(d%S$%R+J3J$B2Nj2=j+L;3?r&fZc(o%=OXAi6Wz6QdfN{`iTM|{J-#Y2X9hop|HTVd`7Z9O;w2BWz-ox67iqA(Wl_aL3 -zcv4P3D5r0V{#m+b`sO(W?IpUC9XbVLV=pf?vcaWk3yoZ^(w5NnmTA+}{Y{%D5qDxz -z``;cR-2hs717d2F{aJJ1&r1DP%;k)p -zSZlE_0wmORi?asNt|!LNrwHGpApJ^!RVj@XMdQRMA}VEuxBD9Ze;T$M{{QghG2TeG -zfafuIH~8!9O&H5vz0gzuXU@?*osIK(EliNNbVC=C_7UZB2KP_n-qAgc-2~nGZm|dZ -zQ9&oW9J`>4_?zAEburw+3^v(^^z}^8i+VBte*&9e(OA1-b%0VNZ$J-1mb-kFNNYh` -z^c>TNGp^JI=?$M=lSYdYVzL$6kfk=ILIJLjW -z?qhH13@GIE*TZa(N)6|J*P}&l7$=fg8-MHhNTWJmEj8x4u(~R6jltv_ke7QGc8g2# -zZG&O}zqFcS-e0;A|F2P+cV|Jjcl~!PwWMQJ?VN&6VIfzy=s3P_QabJ3voXK+N-43T -zO1kaNDy(59{Zp)+IXmm~M#6g7p#^6~YilHEU@=k?2lfOJ!xfY({H0=*43Pg#Ykt9t -z-^^pkGLRSM9Asy3ySfqC!~uIu71qLRoCF!168(cXz3!w^1tDG=D~U6(mr7?vRo8_A -zKbv~f?WR`p1)m4Xk_8_ExjVbX5mDNac -zF#LF27dnx`o6DmTBlDHT;hQl>T -zdtfXy1Ix0tQ(6DFYV~=AS&vzRjetZc2h~b&o(IKoQF>Y|Zfo(5;NaIP`Fp}u*ZT8Vu!GZ$gP}Nx7Q<1%~ -z(Ws6;2ON>TsF6;}zwfc*3fQ-}BlU4dz^*O;0iF -zn1W81oOb|u#IYJ7=e^qVyObHqsisF##zLMzC$EuqRhRb>#`>V1sZt%9%CS|7gGyL1 -zatG)P;^{r!W8^2~4|@vr*z|4H(&;RC2VHqK%yRH~ZJ*i1VBS~@N;1g1$*X0BWrzv> -z#+vU;Y_8V!l*A`Wfh43vP-#uJ -z1KJ^>_9M7hY?o~v-Gu_#% -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 -zI?g5f;-;z98tLSZfMOp4T3sg -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 -z+z%TUi?#j6< -z-G_Tj_8O<+BGtEf;)1p^mjBvhEr)d-f45|{1H-s-i|M2t`=dTGoH1i2{7#=R($46O -z@}^Pq73I*V;?W9Igj&3b>T#4-2<{kvPBJDs+f~kO_~uiR5&MvL;VDQ9&q>n|y;c!8 -zhsbokQ!HtHfUKK|jvg37Qxi -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 -z(|rM}a)JTyK!3*4_Cf+FME6i4Qd^myQ -z4v}|HL^lIW{7r_5^|uexvCwVw-i6Txrh6o|>n`uB?CTOaz{EXt*F}2bC*fbpk?j+< -zIBy5GN;7kHwb0XwVZ&jl-~kl`J+ooI-uq}}Uw7yk@PQ6`-*Jv;!@k)1 -zse6fn!EVx*>znE$y?EH4!uI`J=|Wy<8||_L^YYj28(SWu(e(@VN(mUR6KI8CV@x2G -z&JO-x_C6QU+Ke)Ud<@I4ULJJfPgYsbOpBe^X*Q*ft7+3WyL_{4KB? -z^+5?))6;!S#&wVzakd-r^s51i%}Jv~RD*TS*m9J&XZdMejckGyr#U5%9oLL^5 -zRzOZ_fapuj&}bbWDE1`+_D|Wj4DqeVo*<@irvP_oko**8e2;gs=BxjR(J*wjgKrB+ -z6eb3-zk6-v7$yF(w8eNk_`%GpK7v0;?lvW0HND=mrhKyy%i95Y4$*_PJ)85ih?m6# -zez*Yq{(yW3_pXhK&gsz?MeslwjC2|M8^^_;6CPk#DukGfK(LOoxk6 -zcU*#=`KU@mNQ2;qhW@k=n~>HtyVJYwm4&m*)ExoF@i_5I3UQ|Y6g;$7md-}>?^hPS -zx|Gf3d^XR;23MZ{;@U>=sA2bW_;D-Zz^(L>?z5sTf~N_J*YL#JG;P+cuvOUv{nL4n -zFhqWSHFg?%8#LuT_~RGH~a4_ -zIz#lFf=o{n*d_VvFNWDTnOck^x{QgVx&KhQ8#3m_I7K~)7Ik{c(dsFuQQ8S^C{BA* -z7yH=^?h>7k7WqF2YZ6igJ+52=cNv!4j4DVuDSm=;B~NFmQGRwxGR{+6g7K09P)&Dn -zfrVs4Z`0t3g|6^I;SRtCJFyTwHw#J1LD2^v{%j?D0o=q?X*%?Ab&}Rz2Uz=Y6}C%k -zU5#@@D{^>aKIPH*gHDh!m@AebKWj@x3x7Gw)RETm(~=GRFLnm`zu5(t*bAQy_rD{{ -zsD^kLp@PxED+}rne@iJ8xsC1#!YKF;ODs?EER=K!Nr#HuczSkwd5X8zlLc9yQkI;K -z&V(!la(ytIzz2u7A$SF-K>Me#j;p0}{7QF*kg|!{UM-ymo&qM?u0P0aSBAgf6x+$_ -z=zZYmFMu&VWr+9xwRdxV%GTPlx1?3Z7hy5cA}JVkovCu{5EcV8z@EQY#|0I*uF_%d -zw1D5kqU_MCp29f<-U<*& -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 -zyqCB~<}%7UiFgz{80b>( -z?<0#uZ=Nc!FD+BBZ2d%3^%eR)++c&RkYnl_h3wGlf8l~;&1L(LF?%gk_nGbt;gvKh -z%k?D%cS!r}$MG&Em$c}g!jl$huh{o_sm^0$|US+r%*Hm09aUG58 -zuK;c1`jlaU(G*+>^N+&yVO$e&EyI;!Mf?d7o8d{Qh-{ICp|`$(bNe3S{Gs -zXENsa-K&RF%6f{CGV7X@wLPb>3soNevCMr)d4ZXCP0BBNg7<3=XJFTS0C|;6tB>xf -zTs5;_zAwgo4O8Yz#yWsM8nPSqK)vBSR_!dZsD6St0wRuff`_G_tvK+|N5FxnHd3pr=#=ZX$eQ**E&m -zV!T0>tl#fm>QV+ZXX$yrd*lM@e`VMLSU#pU0}hKXTgxwEwmO+Vh#Vw``{8#^89oMM -z%UPjIZI&ktZwu1IsmgE)tK9#Icm%fVsfc1R5#F@VizlP;*t@*n&tQ^aEeq>_u$uio -z@`vyh_i;(hzb5@xdYY^o@#*3WpVt2S$Y)){R>Lm$r;D||N@*WM)~uf|9t)~$DSuLW -z9aI|SEryiwbvtiUfs6496RSn5zPTZ$Z_8Vst5?BuL8ai3;o!9Rh{R0PRi=}iCOyN= -z9^ftCN4AEc`FoJJ>ag3V_vmU4mawpis_)g+8~|-o-an(!m8SI16m+{!BaXK&IHeIg -zi{BwXf764V{JJ(jGvy1v4!e0x56kO`2eFwr4copkau#=AJ(CXn=~Zv1z7(S;Il`5a -zbvqx~`RLBac9!itjfh0+Dv9Qrx|s)b-5@r2mkP#^fi^WWuX%G2KP -z34Ha>1XeM2(fhyi(!IV*4Y_uXpudR}O!)1rIj-W_KykA}|+FF{X-uMr%yZyeM0`3E%fmO%< -zRlT)%Y6k8Ns(Ky}oxu7d-j}b^{c?_VImRGI(rf{o|K{>7+tB}N(5EGwEUjC*;k=b~pZca>_du@%Fm*05@5!y7LVEsg$6RYs?IWmpvGnAY;x|fme(K|- -z;;kjMUt;xs>I;-aoBoYtya%555Y~loG=xcer*&vZt?OPZ<(B89xRmx2-`8Dqd;HDL -z64YyrR8+TmC*+|^8;89jy_7V^a#9<0{A=(9GgD^%Vc!FgipyJ9Rf&0@_;z0}*|KUY -zkA2`{-<%FPKh)t9-=|%xFiW06Ef&dhZ>op#U$pa5!C~K}F41O{eed_sETNt3FsKk$ -zRIx@b#)=sV+N`eZJX^tc1uJTCSME42Z4r;7t}D=X4m!8CFi4`oT{!+4+10IfPTjhm -z{{&n?%KozgWj`R5;&+m?62B9r<@mi%dUD4nK64k1vvtQmypMS41{x3BEZ9WTgRo7P -zZI8hAfOnC6EB%Kz1@EghG}r&|I_{-&-xru2(!|)-u#6zrJxvXGP3RoFnP9t_;Pss` -zG*G5Z1%wkatV|-kvVJhJ^*ZBG&J{odN19`f^mzY9Lq7DL9N5#QgU1) -zyC0O@>rq0n>|O@<4#Zv}yIzn(D-fC^yWf)CzlZy=uI=CcE -z-2}P9qj3k*y`ABh=P0wy&PZ|K&BjII)o}S4|QMFNBoo3a@cj1w^-45?~#{D{A -zkFTR_-0^^U#U28R;>u1<9gAD(;&5}G0{nrj*=l!}Z)e9-ZkA~A{ILwF(vb>Z4&W-p -z4Oj>q)Nk+-A)4#wFX?pJIx0t9L#flO{AOXZYV!%-Rp}(&1lyJ!#4F)lyb@l=D`C8? -z1$X%^wgl^G@BKfo$NhTwIWE!W;&ErGvT15gd*}U3uVzhMGTyeI`vPx*$DD(SE)2vQlZ4qVYU*ta{7&7!N+PXAguBp`{(Pv6~ -zpOz>tHxl(RuXOL~&m~}&6`i!rJ!Qwcx@cIn#w~lhVz+`4{XNtIZ$P|2WGoS;Bat%rN?FnU+x_s{dkIUj#Img?G -zwrqe%lY6`Hx!x{|78k -zjeEHA1_t+io?snfduI2SQo1h2y3Y1$2E#m>tEQI~UlVT?z&ZOJuo8igrk<`NNa>3= -z>CI2DyLhWH_8Uk!8Uy -zVVbK67&^h(1ge|Ku72*ZO(dIRwv~CfPI?WDcWUdNzhvZiye!joTAp_iM*4U}VZ{@6;~X=v9>#Mbx3zR{_!3#%c>qZ-fFS~~1t@r={mqaJD75@myYB-=bd(dTq~PRdftzwl1J})QRCTy#L9%Z$ -zcke*R7gXO})p2gQ;D*m^r(`T*gG1c`)9P)cfq})61_D)0f^DKTzTXMo&TE^Hlh8B} -zv_l`JTsftYZ>enW_fP+h0k&(k+q~WyPrdC2?|%HULAxbuM636)tJ@(N(UzPscdVlv -z?^0oPUx)BiK+_N2q@PuHi;0lF5JP%H>TSI}AD$2(*Pq4KgQFi1;>|yL-@~mz31ypm -zd)iKHw=uk&gG}|dW6YSPlC_!IQF9N}!RQjb^W -zvc!9wJ6Eyz(Jq27&s`GZ;kdauHPVwt4tmncr6Ur;4+F>Falc -zAl2`?>TPY_9c}eC1zzp(t_Qrj9NeQ(HVw)4DSQBOdLH8%rL>4JPaKGb@G2idHIKWS -zC5(5m5%;(nD^fk8&}f(2V>&*!SL4oA{Cg-fX4aC4Xv?gep{w^f!d5plMIpxt;y9{r -ztjQ6!p;4}{!9{cOOW(2UavN8NIS3l@q^KGrjyQ(;{pdZ0F{_aVCiiV>tcaD%qFT>r -z+YRZtBGWs!?k>T}x(s}5)kMb|F$ixIgVlTL?j&*ScSF6I5blBGJoVvoH}0&E -zjdpWqMOZtV!vlUjq3B7s38Wr7?XSsWQDvi?PkX;?-33f!YHGpdIjP^eyG8^#x98ml -zdYtW9+ihrTG2J`dNxLfMtL6uyPtdOGO}i>0HGPh4w_(l=#0*hYVMZVJ277j=5Qk5K -zXEOHaF5jCny#7PEfAddJ|Gr}<>DcZh%7rBiK7$^TQYV{EFU~)qH5@bJ9r!6mP-{iL -zs(*Mt^8GF)#7Xn04En1QJW*%sZO4I8s7If-dZ&2nZQpz25kk^}tIuq3@2U`K4$awR -zhn|E^He^>tnl;vAN1xMaxIHTdbhyJj{Z72Kd^?~eee-!p_4mm7SciFTwoo}&u?zj= -zt!<~@*7of-S`B{_O;}$QToSNT$A6|-R3pt4tF;jC}KyOqcCB21(F? -zc=Ns5!5Vi#3T{7_e-|-T&8>H=TUFh}uU-cT!VO4asFof#&cg2m<2{a9ONKUaF|%@x -zVxEJa_yn!|^H^E*il>=B5GB)|xMgl3_QY)LiF2?grXnZWbNG0{)fbX`uVIB!%1boc -zgkn&8GI|wpKR -z)4EkHkywE?-ku>gaY?FV?a-@d=q*Js+}C4-JQK8-^szO=zEO%viEzBUiVYj<1Xeoa -zZr5a6-|533&dBVHg4t)rn<)u^oD8%?c)~&kJC90fsnL$t*F+%h0GCVBrCexgl;&BY -zo1&MJU#K&BDReZ4$6CrAlTn -zRN#3V$eG`^=S8g2M>{T({ -zQdXH~2~6Ew!9AB}iAmki(8nk(jbzr@^mZ0<2fG31;d6!%E`jq@xc -zE2deZQujz785>~>Ppxa1gF6mMFr=Hwg04shQd;OPMW^l=$lg-!RZ{9!U?b7L6Hn#! -zw)V|4ZBT<7r@|U|@`$&-J;8P=?6$FS@hORgj{G)Q3GdB)CqK>8DI@BRa;MKgTbL0c?@$| -z)7N7?%fK -z5J5!_39UqKWHWwA2LtTm6}ymEyDF;bD5#_&^8g|AJYDOA)P};hPh&2fOVK%Bu-)a+ -zX;d!VT%+SN-%mG(&msvJnMqXZudwEg_CRZy<9S;zk4_!pvRFU!oxG{F+8~oN#rhH8 -z=6{)`@RXC3rS2LMJeFL9n^$Dxp1xV-uq@F}6D*L)RT$p1TalS2OG+I3!PmA+88n+Z -zeUpLhg^WtZnhPPJGOVJ%RrN}j@AqA1^nNmK;)F5p^o{?JB-Tbi{^To?5wF;%?g&2x -zP2F}|r|%zh!aopUon29D{Xh~y@iY+BPjR4v8deB8Rq#14=*mRSvyt;>k_dXMfp%z^ -zeGzqkpwoB!eVD(aeE#x&w;bLFx=6OHQrAiEk}Rh)k{KM;XF%P0MjDHpCm?4FC`2Zq -zv@{D>-Q`OJc2Lzk8?V0kD8-CYM%ja33VG4EIdqe(%V%b%FA+8M&3qZ{F`KErL@i4% -za?q~bnP)xdw*YD2o2>lWvt< -ze4CTUzD=R`gO7WY6oOm8CFhlkhF$1u?#TugyS7190|-TpwnkT@ui;-5UOIu7;Vi7q -z`JhAdb{>~505_26`TWdKH{fu9l9fbkl-3xxrtpwgx(;u1lHS23s}fpW=r==mTN%-hf-bFs5-G3LFt$%R+{$ltN;>Bl!OE314VT%K>Zn!t-1Yy{1OIk?A -ze3x%<7xxBuw74!`cqi>-?Vz2xph?8tV*s$3K~~b2rlg8T4d?n(1@xqnAbGSq)lkHE -z_KbQr$ta<82ATo0l+=ly@hwyi_XcFVgj{NR!fGj70#;64ZT!)O_9dr>-``AE~| -zj@}Qy4ILK(&f_gYoPz_@h6nF`1gmmPST8|zF_lNF5+~v< -z%@oP8#7i!}J!eMam7ckKf$ga6uUA8#)>zdWH(Gn;jl`KBkRZ6mLn<97aPI4+b^5Qf -zH%Y_HQy@>xj6V2!ag=8UPMG>^(Gf4-8N#8-$&Axss&%;M_b0yr*K4p?)e&Mo8u=Pz -zT{e5p*k8*FuMGF-LV}!ZbpYPmFG`2hV;vQ%1jsa`H$Y!i-@x#70l00R$r>A@#B$e$6V-ji;qu7UIUQ!msZ7sy&je5H`F|IjzO>7G4s=aGr2A -z^MKz6gbI=x?vc4wx7l~CV#smTx{=uFE1(hQG~_HCz%NqB_s%`w2{|C`F&&jI$sw2I -zmtu`H3O7%pM;h$O1$Ei5LNp$1nBiGpTZ#53=sc~mnce@YEH9l+# -zbMs>kCmA7=?IUk{D~k&}`TMkcaO3*OJKwu)ab+5XedK-E%Z7Y)4$wB;ek-`El53h0 -zmJZN{9IIa}tmeV(`ibxIbxTurUR~Z6raHDguWw}^Eo;4IC!cv>VBMYpSwDg1N1Y?#scFztM6@DRlT|Gt&Kl4P -z&6^zH+_ujc|8HNseun^cQRMgR -z9e#M-B!A?+=jxmvfUug79@ufp-0DX>X6H9pE(NrR@N}0{hH+ -z;VO8>Yzy!2PXlkN(?hi@yNJ17xn^ -zccka3)FG}m(8c^q+QJQmK8*;T)!gIxu_fC5w^eM!+IH37?kt_w36*)=eydEE`@X{! -zY!be&#rMA2zBr5ePpphwm;lddo-Nf3;&qSZ}2$ghbf(I`h-3GL*!p07e3wqNwq?fCgES;@HNj>v2~@XrGU@0a6<>-{CoVf`p^wWIvK;$PW!hK5AYaAGlX- -z5={JMfmMOx+Gy1vlwRFhe8#sk9YQH*(zuNhH^eQD5aQJaCz-GXGsZ&VQx_Zg6 -zfXRox@DATsoz&)V@C+s4&DG)imp=`)l+t{TG(Y&$Bv~(94E@!%g#W59wY}G`hA3^< -z$!!lst3JP}v^^a5!#8hlyCAn+7t;$N?;+&Z+b-15n?<(^_Z>U&W@#E(>_og-q3s*( -zLKb -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 -zCEnHqeBh>U%-);6LGn8_V*{YbHcQ*G -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 -z+%3ixjY%Fg(mYa3oja5jKWqI4P?n>lYp= -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 -zlSslW2BN^+s?-4x6jeK`mmX|~M?)>fVh4J0_ -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 -z*#!kN#85fe>5zVoTl@FPD90#GsLFND55GfULn -zz>z3u@}qF1kU;^)yqRpsDSi+=rr#Y|Np}~WD1$cyn>0oKs-n@O(c=x_?!TYBOO$Z| -zmY%N#zZU$H_uYThW9aXNgp8z&q_Td8y`S=(=&x2??j0AYdQ$b|Lpk0{KHm88 -z#$QHm@ha-3@*B|88WI`y;E;@@zZ5+EOs_TF-w=)q$A?cW>PDfgA!YsIB7YgV-0+_1 -z`3kVH%AO50dL(+R8FTJo#v7|Ns!N+=h{OVd?}WY|gf)c??^_zyr*G}> -zr^iT>KTPE(-^{r*R5PMi^x|l4gk$Jq(LWBqFPc3(H*@P#&J_=or5(t7^p%Hyc=XGM -zavy&C(b9*8J)Hdz1}nTb;IP?S+uCp5a#|sMhTg@m(VB -zEv2OdJH}RlotNn_0xpn3Wa@>qk;K1&!HUkkkx1$UH6xtp;ex+65zip*O@W!&PW)mt -z|Fcxe1t&)GI-zzM^hq(rx5PN#LTpY}CjK^iP%8M1W$I=RrzD1LL;Qv8HQI#Ky#{vCb|1OYVX#JD8LhzzS5 -zJ{Y$Gv1%2_2TB5kKxv>XP_C5^m5-Na%c;I_s4I*;B*Ul4Oy@lz6&;*7>~>?vn*(5X -z0^k62YSxewyj{a4B}l3O4Sh5$602BBAx;F56T<0C)^}oB-w8Spv|q_#()V*%a$ycT -z6`#Y3d~(=~hHSQOcQ*TZ9+q=QWn-ZU@J$w5_-Yn2&&p!I{Ua0Obk{s-q08bd7qdgGP4x|7XKn_p#HK`@*oMxa -zTp2rq?MJNo2}_9%op7?n?aIC6Om -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 -zw2S|{c-OSL;$7qE>fROK%6?#%{vh41G@O}o -zd^nrMhBGh8D%o&$1GZaygzPLEAwLTm(p67!y)a(skb?LSi)^-Jxg!9lzXCu*I@zD4 -zmCt^5=7Waxv%P>b+&2injr&Yy67!YG;$>l2?F&PxQ#*SfP{b92<^*@rP4g;?>!hK6 -zYad`NHx@LPxLP;O=Ur$>N8Sa1FhyQFBwonxbf8;>E1iJESvJV97aIlLQ!RPgL8m;h -z>n7Rh=m)v>12?2o6F)AVKjLZ~h1ljVWDl|Fjt-u?!M_r4kUN01KI4wKX(qB9hnC^W -zB;*TKg&hXCc=qC}+%)gA^iG;i-R3Ty5zJj*JVd>l?04sjoPML#N2EnMzWDq>JYifI -zc=TX1nBHp+d(*Rkd3!EqOFfENv*J0nK(UFn%eS%TSx5_l%(A?iWIFK5!`ai6oKRBzc5;QZkzxEGb4uS;~FOS8(t0pK+`C -zpSet|7wdR6{&c`H;j$V&?}Fl6z7*8O2sIm_A3-dMh;1lh4Mprqq{4B>1uIhh8L2mb -zi!Z^=ad34I+`S7fcY)h&;Cd6de-61QMs5}(R|Ux39OQBaYxK%sZ+Sn)X81hJqPk6H -z9=;R1v{qf8hVSW(^GN%&;PRj9P)U=T8LKtBM5yb-n9J8?AH8rP{v#q5j(!Zk8KWP| -zz?|%F}T}bLz -zi()ljVeA=pKWb(h8-aI;2I2L`CA@I4I45Sh!3dMAzz;iBZl_|8Q!E8!2xzG7wESNJN1S+a}OKb`NG>GSMxkw|!+Pv7(d$?&b -z*$#Q8n`UJvjX|X837RJn&jR*7z!gt}o2D4=g%u+$6==qRMvXN^HETv%jQb9u9pG8U -zJuH`@R|y171ZbjB9?{I)Npq_U4ZZ+`H`890_h$?7wVr4AA&^up+sJ0{Npce;rA9o# -zplM+*%cF4TAr^x`vy1)A&E|4IGX{Ohdhinhnm@~XKEv7!XnKQ&kdJ -z&@%90jc@q=?)Gv!oUYH>AJLWrBkhIK@}Fo#H~xS&bq~_#(KhaCXZZA*OyTL> -zP3afVLlqR#TdfJ}Co=orpZ`kWzY_Sb1pX_5|4QKh^Aez24y3q``4j7-Ru&o#GqYLH -zhwJC%evn&Z4Z7huq*&kMobQkxb>x?C2^b>POU~^!YAp)MZo_V4z>oyof4SQb0Jj9u -z&DYEi@jXY>A6d@Y--wjzwHBu&!NN;U!p3VQW=_kQl@lYiyNut+a;RVF>c-VPhP9i87r#1H4i3yuKIe?LxvM}g^4IGH=VPGMS4%{ -zoiGHqjeTN0-xOiw`hEsC!OTT_50yrk>senlZkG7O+JKwyTxo{Q#hwP{5U~gRCa};X -zjaq-ida+5F!f99HJ`~osTXG)_?nGcmtoy7h?GclXTNM`EeX8A^gm=I^;xcKpBaL<7$K*7F;Js~$Bg1dOqCa=yLpOA~&k0J!U=S5jE -zr;*@ZsFk?+fD5JjqvV#qSK;1+8jrq=eGIzkazXF?tvr=!0*#+oziE^vt8tr~7Tha! -zPMZ<8B(j>Dh`*}H#QanJ5BMAWaeGqt2_Xg{`n|@b!tQwcnUf)5xUt?R)g#y^DbT>Q -z5`%Y=Vx+|2m9+AzCzBXFlX!v_Hib8Mr1%>S+jP!EL&(w8xTy~gf@~%L3ITJFP92~S -z5DvTI01FLJAGXCgrKv1bWeCt5v5svzdR3vTwO%>EYH%{0(T!XaLk8%V>!p^KHvb7~ -z1KXc=Z53{XWTA&`VNTyPlRnnq`+%`B1ujRdeVWupGHY5!69aJ==W4B^$@+!|GS6DV0WtAJVO>WT7j; -z;oln>Zlx0T#@mJa={CezW2iB$*^-6$+qg)zQBoHkdfayDmehRM_PDdJArdiqx6z$d -zBZ2`>pOq -ze~zJToVM<^abkOnY3e4HIkmJX#EsUF!RtL!*+vdGD(`THS8{5;f@*2Ct*Dx>pnCc^ -z(!%j)W`y}B>TAJ)nADgF+~yd>q(ZC@k+)xyD))Sl5W1& -z;+TBjNKgHcB&Th?qt=>kskN?YW|jiG(-!K$CzmbZx56h5m=JD|TV}SZ4Nlt@r_=U6 -z?!9EFH)^BIa^EdYs@fQ2bgAIdPD2P<4em -z6t!aQt#E^Kf2h6!^?5b=Ba6py*t_bm&2ejp!3THCnlewoHxm8Y -zQR%*Ye(Lhbks0e?%u7x9~SKs5oqyfM0}=L6A3uPVCVDcYztsEvyK -z)O*z0cSI%_IIRi&|Li&4M&qs-j1NA^pu6dvT4waC)EG~IMs4J@L|be1Y>_7^k~PL! -zYkx>C4|RdkqBMUk!k#$HcdOR0j8!Jw3&XSmdN@zS)_N25LVwb>roGPnx3Yf&QJwTQIQkI-#OmhmB}y|Czd5;vNLq~Zo7g`{0!AFm%^*5ckT -z#ZGYO!TJW-rRsa^9=I!vujAC!wt`k}xMHxiUX4*N%el6yTPpOA>z{aXG1BWE5~2=X -z+(G+F44-9k};xM##dXV -zAF-OV?ldSZN@pzEU|chciaijYCFr@VoW8u-6Ll=6Njn=$M;EyJZS}E7SIkPVu!I$v -zdE-~i(z-GGfz?K-o(uEU%PhV!r>)5u&?dX_ZYEyr3X_^&-xscD8mFz^$qoB3-gd!$ -zR2(nkoVLr3zz2d-FWK`P$gQ%c?BG_qL;T(_gOs5~EuePqb -zp@UXaW8Hp34>#|mp>SJr!!s!gZkujA1UEIbt!nF2H`KT%75R*-v93A@6L&Fn$WuIY -z0=X7rg)<&9wWakk#wC-~UUBMD;!^h*&jjgGwksb^;7XoCN#aH^PT9sau8Zd`R@>Iv -ziE^@IWa`dF!7B*&-F6$uHLO-LGuIFIZY!cDOfY8|xzX|nu3@*)zlv(YJlqWCv}HJA -z(Z9@cK+6+dv+Ss0{Ygu6+U7cx7)7dW)9sh+OLx9*)ELjg8o_w{~V-AW&AdJAEG0g&#%il#ZaOw6)B(F_k4|unrQEFDjGS3_b_gI>9`Lr -zkV`M81Y?#Z&1rk_n25b7)&4?4*1Wht9yv3uqTOnVg+5wionpyO%}M!Km65x@y~&!Dq8Z?C$a)}aq9Bg3+_%w2 -zhTG63Ehn;sXxs&7jxSkfy`7 -zT6>hSSZ~N3XjJyqgiDdaV~B%8+?<&gQwTPeQXHb+lXv-X_alAN<@&?69rjVi&#p7s -zzP9DoGF@PweeE}zVpBPcpOn8{XgR}^KG$)EPMcH_K%haTS@cQ0v{bEkL)U4JAC95?|>$Lsc%G9dlBi4tks)^x-Le!ZW -zYnn~1A8b5kec5)P-GUKv@xpNl-BaIeY0K$_k;AcKa1>r?L0>#J-k0eB4Kl1Q%JGT` -z;7j0jfKLG@0cQaZnM^2VDfYDGTy@Cseh4}HNdEUS)MUKpOB$Od(P9Hw$495nxmlat>1_-@U-BZClTcGnTfb|PA%%@yQb=sU-Q9{}{i;euo2+F;ZuB*&l&{z6t8imHH-b}F -z=&Ec>ouAoNle(GnLO^pvfibemh8+gb%y*u%t0H?Rz#p}IB)G9BoVJF$xjAj^2|jc; -zxN4UH1UgNi@bEmDR8ijC~UfR&NUeRn0Kh&Zd -ztFDK3iPD|X)KDe2Sma|pe9hcg`H*`v6z9B$$m$~INSbw7`&)GLS)HuYox$$? -zz5ZMK)hMk+DLDo6u&rm89DmV#|3sNS9P=D+XOy1Tk4mbxdWiB`-53k4Ap%-ryv2kP -zC6h-9V??x@Lo;*x50qX!11#R6%Uwg}t=Z;sk7!K;R2TIyM-7o-lY -zIMZnx>U7z3H~erfGe#lNPj_PgY+>Te&uMFi4jY7AS{vDZlF!ISDyJik+chDtxy~N2 -zQLeAEmzszo9D4E!UBWdF$&!pD%-KJ&mqyY}@TaZ0&B(#5c--?Clu5dNJL)aovJDM` -z{xdlU-$92ddrr#ap|$omy6f;;j$1k{8MXFLyQ^UPvb!Rb)70AQy30a6NrQu11>pPc -zpK3y2mPXauKMYlCm7pkDWNo8R-f3^9O)G_EnatBLi#Q=r8;|vA8B;caqF&Nd8?gn3=QE=ko>eK -z?IA;%*$3+yu}7DIMy6e&z3GtKcrMaG9iD{SV -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 -z*HBqs+0A&ma{qH*R28g~SR@kk!u6J1Mdb-OxS -z#>a@{I@TyayRWkLy+N8vVja~(ulh%-WbK}o6Sh*jTpwGd(}#jWabq}YG!B)SO~_Rk -zTE}7Qyk>5@LbKbDwN8zlT!|$4ngqMKf+TDCboh>KVOoms%2VF;(0g`beq?$pLugd9 -zkyuH15G`(olQUm8W@SWBo}wd)eYaz;(M-AG@JqW(ju%O)a&do*4IEs@!XuEA0T-3f -zI+E>zUI%SO2?-Bq{>2d1U*0Zjol%?wony4!q>sd!zzN$(d&fQ%3rzu60kn!>7uLsN -zy)zm-ggFOcHQlwJ#UaJp`&xMiWO_rTV4Pan_qivk)W#Dwf9RekY)boZL%9A<={s$K -zHGK}SFs?+h*;B98<9eViPTO#&fZZym&8uc|rDOo#AZYy!60;;K)FR=!i);8|2~tlR -zx4J^A_r{vbMSG;Fr`~UWa3$?$qcFwM=416I&J5j6;(qjrQ4Szl#cT~vtRC0 -z@3TEz&u!+k=ohz#>Lr_{W#|F6I&C)`Bt?$NXdEb3Vs5*!@?)d6QfI_2H0QLv>BL@r -zr2#etY_DSVfc8O-+je3nc<`^zIJsV_cFkUo+crA|y&d`;$-2Pmm(t&mW8g{TnA;)&HXV+{HY;Iw^E -zW6Fg#vQ8)JB&Ky=yg63`SY8x_aHNG -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 -zOM)>n?2I)SXx_0<( -zUGi_c{c(4tj_41pz6&-Plr{>~6!CK0)-E|6X&@7~4M?T;x?qK&SLbm*g7L;ZXobE= -zzsT0}MjYB=(eZ(xEj|bRupQ4Rtgls&gvr1_?vKFz2wYFw5$+w}z5~wRc7%Bgn6JBfw;k83 -z?aKd6+tqgY+iuIPwmaNKZTE*>ZTBJ4P}`LR+U{Mzw92dxwB4?*$(2QSwB6P&CjNKL -ze`*WbIhUZMg{XJWI3nEh!2PaQTM#Y}xJ7DPXsk4nuxkoAz~!iI0USmW;hqKV$u6SN -zsWk}mG%%TWw1uWuTg?79Z80U#78$qN!V$ncnA$TcMs-om1=Q9*j)n)?COOa+gV7dA -zceF(q+9H+OBCrG5)ipE`rQ^D8?b74@*onZlb^7Ue+V3*ewBvxi(P>-xy{e@U1FC`6 -z+N+%m=l?{#fEF!?wtyC0F|1OvC3}SyYo!jWq<)KarD03JyR+>Ps27y`)2K65T -z+COy5)m44ASXYN_iAeicTGu+ca&YRfeO>a$oz0E@^MCsKR_Hz`WUy^S>_;9)vyNbI>N|5ccP?HIU2d&W{`a -z_vy+e^>hXO-&y%@VmAb0pXuE3Z(`kn*o@ANffBC?d`svo3}99SF!y#A1Tf13n2DW> -z1DGWNOibsz#;poh`t0=`K}^glqE+eb6~uQzOTjzsx@H>fRKY3KYY$!5K7{kHEmmAXJ)|FTAm3}y1r?2))$zFk6!uAvdr_eu*1na6RYR*W5Zz9D?`mS~Ll~ust -z$zDa@oCZFtOFr3Qed)>?+Zx2I*{Xz7erweHRtNH1jr`VLd5Q9Q=OrpHQoKa@VejX! -ztOa&$a7q>)&6cs?JFx$EoV~gSG710bg-+~?x#*{=qcMhG0mmz9qcDs8G&K+0T5!er -z>b~KpsH1>;v14-OkW{<1F{BIp|GujhoYnaGDw;z?31r~}z|S=jcWYL;M$G??tyd>w -zyzRl-d<@T7JT+L88}R%SPY0eauwIv7{3T+&zKpfK3(qX1`xtBZufNm7C!ya095(nj -zmABp)0sak?Je3Oko7$@zBf!4}I6&}k0gl>ui}y3#;{7lW(e6DpAij51pax2N{Qs)$ -z|GQGm36$bcyLjdQU0e9&3N&vvMg(tJI-Tf4q8^sC_edA~^gsCNfQ&&Me*qbT<_?}% -zOFZ!{8G{bcNI=o5#6b_p4rr7Lk(^=-pwTKsT=rN%F)BoS_INB!vWj0Fh+T!4RfOd>Us=ts31C+PyPB|?%~#g&F9on`fL%jaoYKF< -zuMJ>d0`?`s>Na0liy6-X__e^VCA@w!NgvSSffz`77?%PW1*2F4Vn=}1+q{|K?He|KIBU0P3y1d7n3A+|&mD*deZ;C~GCa^%Hy_U{TpaIzg)L -z;XQz_DSll=iYE%f8{j}ES0<=q?*dlw|Gke+2<(NQL3#)elAAf$ZH8|#?^qS-8@;9_ -z>%DU}tIgmK&)V -z~wsQ6&K~t}>hd1bgqv7>PZ)0S3iJ@#y$)8%?j~j3Fw?-K>H^NgIBaCH@B^M(bBTQwsSH6q< -zAu{N7IDStjD}Qd}pq-hpdNsTk2VV+Z&{4>&9t5knAuibbo1rPtg?~OIeTZ`aEF(_H -z6FLp>${LI?KVUTMb -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 -zD#}ofiW>RNP9yr7NN=@Q -zemiv?Bx8rA;?|kqj*As%{AluQFF)LIT6tQ_d4bUqy>VDts-|F;V#O6tEAcd>$W>Fg -zw3Jt?RGR)=UU~8#(zn*~(U#~vO(s)$ZMk42{m+UJq@(YI+)DbwNu6 -zXgTg)t@C#Jo;gY5BcxaQGf4kP%M+kLEAch0la2eLVTRXa(Nr$Rs&_~-q9--z$$_nY -z|D#myf3(~3+(KxK@p2XX#pu2|wLjy!*`9LUH1qcNde7gp@T=XkuTc4-T6(Y7y=!u! -zS4t|Gp#>h9-CV-)c|Qe2RFm!fxhSKUfUv~HbrN}{zeSeS{rKi5ujJ}S`(lt}lUeqW9JO}p-`hvBm? -z7Sb!!b6br(v^_CJS4!MfsiNPht6*cM)(^pK#cA`eDCRM=*7o||P<-!I2`O)l>E1mz -z{#PlNOZp0p3*1fZXpGZb%->q<6S)Yd<8cEP@Xumm0&PM(z>@|)4}kkfewACs9pCNU -zFU?X<4<UFo$`@dmA -z-L%eF;bDxO8hK_{MoYW%sPqXu(>#ebo7QGjWvt{kY9Qt%Xp(0Cy{66vfQ!$H~*(T$-Px> -z|4#8iGx!l`HOJs~m$8?7a_?Q!^#7InmOFCq-SP>)%6$!T$F8F0?w9^09wL8lurKW( -z89v?JA^9joK8byDVKv<&MyoXAW3dLsO5|OaX0hhxXyMd;@=mE$*FMgwx7EnAJIEvL -zVQH8&Gm!3I3Z)A|x*AzPtQE0gw_?9jWA$q6WW+`x*4NzgZoL|7P-E>K#P4Uc6l7<# -zB<9q}uebYQXL3dhpHd_Lp&ji9Su}B6HF8NihcNC1LU>&}tMc!+v~-IR`Jgq-ByY30 -zA)+;xcctL&Ha_swl0Q}Wu!e6mGk;L7S8(cxTZs-y|1HgR^6)xu@*I?ZQ=LD9xQ&DI -zq;{v%i~Es|%YW&}aqVtpPChFlg0t;*+LoJ-)2OMFwn#(y8u>Gy3HQtmwerqG(t8r` -z(mQ?fWuFdrBay@=F^P#QtId!d%|1wej+Bg0y!oOut(jy0aMj5BAbnj8|BqZKJWzSL -zxXApk_NNF_3houS$tOMcj@CADCaEDVf3zTAbZU`eGE&SF`YGJnQ#bUcs_6#2%O*58 -z49SO%hyDlG9#==iu4MgJF$Gbc2|^Cu`kx=7134Gknk_XZgiO)0(+f>_wf!mBFE -z6QO8!hvMPl(r{DJ$_UEQsBm?!PJeu;!P`&41><--1aCD?Kk&fGvs}C;p3emXLYHu^mqrZ2L71-ETNDJeg_*yOHN9R#X -z53PS*CoJ;RD_=MmPA<+W=XmY&I7@3tdcG1~!@vb%FRPR87r~{zH%&3!YY^sRW^()b -zh{l_{t{GTHi;q7b_XFn}i*zfb#^;~%K(fy3ZmiRMrJOTcpWlrBaXvp960Oy$f4}3< -z`(^fw`gfmSL@6C~VnW}wso!wdu>UWM|2mh|;a=PZ9!bO{+PolF0!m=gT4FClgc^0fY6OH1w4%%&va3=W

U9^U -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 -ze#}!UW@^GY9cH}W%G=M7??wCY@7q -zRamdyww4QcH^+NSVtPBp??!n`0dwN6E`mz|PY0|KzX4x#TA2>`3BX@U)wnAiR0v>) -z8o#E4URLfNWxI}&b_iAlR0KcZb|Fjza8eo@> -z-q)zGYvMU&p$bn`;e~+nRrqfzoDaBM%|BQDUOC?X9=&4}$Ex-G9=%fxSSLEw@)iRw -z0nCYB6)pjMM2$~W;Uj?SRCu|XUmf5Yz(z4o?Y$bnnI?jNQsXldahsbOKR}_j{1owT -z7)eYW&~*ZHM^PfOX=xYF$IU!xms4`mSs0}T*}a~^)^?TvYHPbqq*>< -zBuLTTv&yB+0V>58*%Y3-Nzp+k=#UiN1PeYzuZH{Jruj{ZfsGfqKNmdyr4%DA-+yg3 -zmr#ZKP~lB`T-$!S3y^tDye+Rt(Q)7~YLl_H&cyQ&9<8fhSvDg75PeB&JNp7bIw5=s -z{ZC6>r+nz3kX=}(eB?MJeJv*K=drR+1*KV!a0)ychFu`-C5+|~@IUU=*bQo!Ltcan -zUlND%kIXwH9T8u~_f>k=H$H&-2spipn~zf>tYVfT#bB|xux4r+lnaiC1*OTO8?1R- -z&^{*nh)WfD4Ke-ee~dBLm&SzEzZw%-zbS@m=wln`EsF_m@F*)C$=6t;ZldiU5ZRPS0>~=+{l;3C4H^AsLc3=hu -zF!jJp)OxYX_6uM>0cNVc9GI{G<^(X8^qE*mcDsUs`wZtG*gcKR0WJ=@Q>->NaUEOl -zD`Y?aQplRx3t3^@I`;aD(EmK-vqJU_z9?rzu~KV=B#%@3W2AQZUS;NhTwZG_Rvh|b -zW!}VMB|Eo4?HSzqIk4Z7y-M1ndzAkyuU@Y4hKDuWEb=M*a=vT=*cykaFWyI2{8CmPSy++t-b{s+&sxJZ&xs667BnPY($ -z`$8qzVR02IDeCWeCxxfuw^-?q^x@g3mBe|4$`q&7wNBaUpx>M7ucH3$R(~hOT3y@m -z#Yf{I3yI&NWSCzuM%1oT9(HJL%*sUJO|s#ed{(iN^jMKHaF&hAiCY+-9=unX9#O13`&_ZI`SD_9_v1y1fY>5shWhKo -zt@fb0XV9H~%s#PR=VD_M>WMQxDcHSOgEUiwr0EBxf~ITW)IW%WMzY}%Wwhgw2L@th -zRK}%D|Lp?q-rwf@Tpa-^cp@m3{}GW+Gg@#*>HyV?B&8KMz)Mq*sVUJ!Yr+x7jt3ep -z`fs8TH}w1~xc?Bhe!IpBChyn&??xV!rZy!eBzj1voZfpQxryG>@zAHHQg0Oc;nva3 -zg3g887<}5h^xuMN8Htp9f^ZK?|A94;PgZPhl+?;Pw0z0}E@SVK_?rWD{XScf1*Cs`#tI?>>+nRFNnw%?_@RvO_B3b3k)UPEiuf+8bvyeJUPt -zE=7Jzf&CyZMTvG(J-LK1VOw%NN;!}bOdO5T6^c`!a@@XIrNIpf;ECQy4ygwftMWws -zypXMDg?SuVoc9x?FjTm&Ik;1h!s7kHKt6>7aH}`gYx}i^)*l!Phn6zvkTRU8xFXYh -z@)tf%c;XnX+gj_ObiF8b;;vv7)>y*<-vE38{a2vVTg`wQ0hg<=!P*D#MZiy}u*n(> -z_$}B4(4avI<{iMI(8Csw+r)D<1!!mifU#H^Xgo0IzP46w=+PR7 -zKU%C!XuXtrCGinvq4RCr7_!7J9FYDf=h|?E8T2=u4$KeRIpt{%lGj;2=`GoZyV~?v -z_af#;y8bRNZZ`_Hyu~jw%yVHG=$97f;|COz`!3hF5+{A!%0H`bN(?g9f81L4tP#KN -zX9v^MNWPDNaL$CaVZ1lBb-+pJ~*4861bSxH;nD -z{Pk5k7bW4=-4TN>F1jfn#K}8vAZgQI3vvD>7URy{dTfwPJPBAY)*!wBnQ=CYBj$PRrvcZXoRb9r3%kPZzqZGs^PtA_$@X3g&N+W -zhR48@XOdW^hMj77lNw&$MI2y~_;R5ZRQ79zV0>>M@mgyBFBK9_V;KYNTfkPT*yV+z -zg_CI~)9Eyt+iDcUl-l$m!;GItxi(!hGLyv$Nrn#|A#m0s{+@K##K=xi*lLZR!dDIA -zQ-Bw$@N5(Q3lBA~Ejdq-0SwU}pUX$@h=AeC19@0-w} -zP~RF+_=;MNv9WqF8+pxCu~BN?FQXg}s_;O-deMuwGF8|NSR?*~^wU*1xX`BZb$fZr -z-GFgXthOjq^RYwvmn3#VW~mdC5cjD1PMZqPfz&WbY(|)gb5QnWYTQqNwc=5Hf3*t# -z6R<%%jas->_zGa7SU}@Vg)gb^e}#4`QQ@!E_a8$1Ybso?rXPv-%T@SuHGK)bSE|CN -z)%XiYzgvY*05*tYQP%I(dK>`^x)$}#RpI@Bb>c+4?^59p)c3zee2ohK(d}=KKk`(s -z0m!FB#lL}cT2Y7hj;Qc<6+VG-)v0hPV1xJ==EbKfyitw63;FI<%T)|mFTMl#65>N^ -zm-CEY>4m&4|99S`=5gj_2)~~H0>Tr_&m&x(zX0J_vkT!J`EwDTX3oa%4D++V?9G4L -zJA$9%jpm>5j^rQnj^Q8m#_|tCFJgyd9h-~Cg|+UN6CeKlfv!UO?-R$T;O$m(65j5} -zzt@|<-{U>bPw`ISCwr&z3Eunoc*HN_9p3x-@!k}EtT&Gz}^=#v?g#WR~7Ii8scdxReo=E+^D?j`TZbI86tWvu;}Ai -z;P>L5e3CG-w5~;$z>jMMz40`s6~BW-xf>pKaH}@B5_s`dxfW9btr-r)X~f^R+gvY4 -zf*OWY&*{>Lg@8#8aDlf$hH;76QG&N2@gUqK9$fyzWT)^8?i}8(+$*qgN`nO}#=(bq -zP!*+}yh;iC-O<6!Gvs|3`w!*vy!2w!kd%UX4ma(~tjo2(iy}3(q@y622O2KYk -z2-;jOn6_M2+*P4l`)m!{S}hmcoQYG-p*x3FkiA{78}B6}D5r4ZUX+FHanl&vHh&0BfB~j&+LDoSesOf5|fL>{GVRxjpR+B}G~e_i{!PyV^x#oc7RC`p&o_ -z8|0E`!S=n1-EdI(i2IAYxYN(C1UnvuOgQ*GTQ)zxReBjVsP{GmR~TuO#7+_V?&DFu -z!7ZeFdR&=`yFSn2{zb!trUsn1EIp(AENIA9%y}KZNCc#T1(c(U1*IlUTBFK|JC;~ -zW9xs38B_mt%qX0YZCJ|1JaEB=lsnfB{^~$$`PyL@l9~ti$LTcI$x`sD&t{J^{^O~2 -zENP;SU4R_*#Z->bys1DOy*2Wi1FaQnHTZpZEw7dbHq>@o%c} -z?*RUz8oyhO-wU{sCtuQ$NWBkGX(_dHD`aTPCR+0%3(WJsE%>{f2G}{N2xpa7=JWG) -zv0Cwm4qG15?4@3Ns`GOtiRoJZxssnhOK6qGiw3KG*et<=JCObTc=qNgJ?!ILrPq*E0(;zwxniX+}nyN_H8BD!nNYQ#imXTQBc-S -zTi#ivlRu>>ctrjz^m$GxEo5;vhHK!gb6zyU5|3ndeFwa -z#zP}u7SDO{%PhDDZ)og!N!J9KHg*TT^c(5ER%Tsm3u*$rQ^u8s3qiPr{+ir`GsJ(% -zO}?b&FLF*RX6!1skufk&p9D>ruhUp|-5kpg6rcEpPH4O3H+;}FXj!?`c7=9;Calm; -zbLQ%#<{#sS0D~JEaV`=od3QHYT2?L9Ug03q`ar)P -zc5{@|w;g6rQuEL8vey8+G$$+*vmM)DrO4r~!Xzs&n7!Hjd8Nb=Y#rjxXnAzW9QS#g -z#B(E0Tkmquag!AHpVBnR3MH&>q{hNoi(28&MEl*y*c$PN?g;dF!_v?)n-`~)sYEdxkiKur_h^L(_13*1 -zo}sB5pPpru&qG(ydPM#Jbmc9Va$cjDEVoj&$LU$_X{3OS2L0;2bIM_qc605iJm@-g_KdKQvvBGv%I> -z&>`tVuwxEMkHU^=ciE87Y@bpckq)T>;K6C++43!Did9yR7KU1NO(AT*bWL{5k98UM -zU6yyW+XUmjZ&vPmno9^y`F05xKXhChPJF3u@2e+bVK{k$txaeVD@A!0{$&F@zm;QD -zwxh3U<$#6O4L;2- -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 -zT3FKO1)QZ{yGHIaX2$g}OMfa1MPv@Qa -zZ0wa!=)cV;`Ffa!@_GSzWm0)o{HMIqR@^Sr|2?lbJp1>;x8jQEBB -z4g4Ayc?~r&q7%N^SH$kcBQAmdIAk)ddy3RC^yE8`=Tw5vf4_+R1GqZS3N*g*58Wla -z`pQ7u{`;7wEICv#T}W=8jnKHSlAAN}Kf1x>O>TA~G^GBa=GNr0WWHgD_rG2t>H1>v -z9*noXus~caK7h~w*obOze(QF8tLuM0#-+I@#u}c259f3SbuBqM~zPDZ^?Xe3@)U -zNDgJj+Wgo}qAez4M>3akP1W%3>ZN%K&L^-#r(hjO#WQe1 -zF*`rLn0+{^n7x9q`>)uW5vH<|q=6fq4@=?!g0W#R{63mte|f|a3=7))c^R1h8<+zUM+_Y3|sNzGh83K6|f|MCXrUdSg7x9cys -zZSgpzK+-U8E`$2;-XsRVOhvJOT -z2pw7r{&fwR0X)T(D$DU@op4XJE?t*8#MLZ0C8G0yJwBou3P*UzE>{oBT$2zCOGS?a -ztFe;1Qeqa(bC(;m=WQkA<;8|GqOA^^1Cg(7PS!U(^_o8BjamWcGV|OtzUpDO!eK9Y -zZ$GQ`VJ^`(LorHHAaM!h53?KmrXE?ZG!hUe|wXzoer94df_MjkBh72K8hoo*_YObsgOa* -z2eh!Bjhrm>g$J+6u0^(WFfWk4zUbxwlcz7;O-;-JltN136UvYTsVFZ>T|rrPN~AEDCK3BRaB -zDUB=)vTRKYsZ=ehNhac6=1mc}R?`b?bI=aL4yb(s7ErKU++0ms -zy;HQCp}A0c)AgM)be(?ldF9iAnSx<+$a`PHJ8Qe#SJlX4(DfQ4tRfvdc*C@HkHL(D -z-K_ZOWpER)8w#>4MGZnKJZMz$~hb0bfOQsO=-qpq0R`XJ_CZezCw;AwH`8KMa -zw3zsb`)*+_@+C=&+;und<&f_imo>1>eI_l);?MPNv`mSkCqI7arfa~$9ZawX~=O@Ajef|j?kwU`OErI@j{S=M~|}CJ<^Fga?Jb>Io=B!Hq!w* -zpB*jqPxr}>bWxbj{FF;0h5Y#rPgr^wP99%#l+XC9QU{Mdx=9Au^21`p%nK&$Pd@p- -zy0}ryYZMZNzN)X8i&!W4937*z^H^jFGZ|^0BJK#D&yV)=nBb%QNpS7ZCEW;R8tfPhI|orftajh*+52Yi+c%r(Sn=@m{6iTc%YqbmUa%m{ -z(+PT)BLdPegWzf=h6(u3Y -z)n{fIG)Y2JxiO)&p;iO53)-Ry)4$0V2dfFt1sP2w=b0D_zH=F^+s?`#j$~rrzEt2} -zt6s0FfTcJK8ub1~`1=5@yUVg;4t4-eTpu{+dUxF}P*CeU*l0n%1TL4<2g@8V<9mbTrwG)`XjIfT8b9_eY>?n#A5vcvMYE@+Om -zJA}7@oh8rokpG^;vbD=^&0n4zQEL=3F}Ay8-Az+ -z+8Pw@Ba@b`e-wHGC;lTHqoM$2sAc_Aj-C;!-Cs_tV;xJo6JTfK{G -zq!OI$GfR{768uwQ&5Ui9F1JwmzvwnqhuQe64q-XUd%n#FZvz|;dl68^KDhz;^tJW7 -znx9Ig`D@$aR9NRT3fHwQO6BKL=vdoUSnNCJhQ#Qn|W(iyP@6&O$;G)&K!IX#$b3bP|?;APEf(NmM{laD(o2 -zLb@RvN!XlmOdty)j*&2mqD~;FC|d%AMMa{rIpfTe=s0XHQFKIcW;%4>UPwZ}-&6N? -zCpZkgzxVmPpZAZ~K=rw`+*;19bE@jpsZ*Z`=<9)&%kDf0cr=iP%OPNN8jE$jChv~? -zChs+Qr$G9VTeJJy&^p5!oZE`Ug@`DPeJB?j(sOF$$MIBZpjd;Y+wjt(kR?JR=x(e> -z4jJeq?p^s0r@!eK4!zq%=tHb${)hV+v%ijf=|Y}n!`5tVrG5jIO{MOVha1i<5v#gw -z=%2kyj$uI?9?sTm58gm|)4AgA8(vx*@O%i;-)jin(0@tThNzq#8`5)nZg|*n-r={w -zze;qC!%V1>xekXKCw|S2`eCdtg6j^~4{izE<8ZCuiT498go}e)4L1p{5#j%U8w%aJ -zQ)6NG8I(HFAW#4d7xnJkbU#!8IKYA8hqHsr{*b*U#ErT@R -ztqB^}e2OVPgSRy<>y5R*E2aEQHWbr)^AOUDLev!Z@qA9n;q2Vg^Vr2qQ)>(`Z>DhY|gK8)$i>X#ttngA*(0+sYM{;rug=w)|Gi^-D2 -z``)N4#+-(|=ll|_hR^Id1M~y`b|LR2XC>2ocFx%ZOX=sG=TORgzp&3PrQfA -zaME)Go+r9$_;Wa($GGhLxfh;Cxs3cd6wfi>Yc!@Gl9Hg!@cO>B*yl0TpT~$kKc}LW -z2}5wMF{+hHOl%Y}0t|WNLo4>>1oQ*_9=BU^U>#}DYg>8=dte8XR+Z!nhwnQ{KCJj6 -z;QLZ)P<;mYPD^XCW3t+Aw|3*2AAxBi>}Zg_OaSy{0wAYom&U6a02Mx|Cp%iUSi{1W -zm$D3uQB+qKdjn7@Mc`NbB{acAfANKI)>+u4$|rHn7A`|woy2LdhcK%*43X%f5Mn| -z2;UDQ;(f>EY*0*6#n`w;4`!UuD2azgPdsEa -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 -zyr15f0)>lhAT?*(Vi -zu=5^-HBH}^AS0|~7h@%ads67;m6*CUj&o~;iRX$BNYO{=ZUfh>%@*o&!wPM)(5By_soJpDZXrw3 -z9_inZGSF^IZ)lc+Up(ur)ke$l@SST-vRFKI-Kk4jv7)wWs_r?ZR-@0oJk@X7>S?)a -z`o&av1)*$H*Cgzu=Z2j72s!iX=-=NBj*C@?u|IGH@J>?w!USUh%x15!W&LtCJ=Z&hli2e%_Gf*97A`GHPfgM89bL9C@l@Jma*dt%UCktll9$T -z6P#^;mA?(J+_S+yH6TU1As|(^fjRtBuS*@s*K4Pc#*{hh%h(yv#iSpxuCCLtgLqct -zf!C$=kh_wf=xQd`i;=K*eO;VF=bnp*|%OVt{$L%Uy*etfE~U%%LZI-vX(Kq{-j5ngvda$+5S0s9{mQVoh- -z(3W4T2&b#3* -zgl#TA*L^r^v56hP-3~(Y-=z@G*SL3z-Epl6_mg=(gQdFgx*yAC}r -zoE*l9D{aemw%h$B-;+*EIv`zrJMqXzJImOgcYF8NYSGq5`>egX>AwZ%K6p^k*#o -ze6K^-1lw_6HC!o8a+ri>ooo45%@r4(h0Pn+lj4O6oh$b%I!Tj!d2NC*b5t6=zYR8Z -z7~gRfs$#L@%J*HNFFgV$eMaEiiVl?#zNSLElg -z>1wWlCeMY;c%yNVvJbyq*zNA`QhHZArw}fe{$m+SIRd#DoQ!_<%2oy6{F|I}+3 -z;a}-9!y0waIf#K}-|JGaPv>B_Tkq33*zIOMor7KO>$p9PzG*ME%iW4wI`sI~H>8<- -z+@Y`Qhp)?yI_uW5ejj^fY9>(2k9@cLp+=I&i8gJNCsJn(H0^eOa;00Owxv5}iZ4hE -zb~M8o?QINA9hTN1T?hSJty8dvF@%>A3MqUduxwaFx(O!BF83?A$#!&;38#v~g+T$g@ocL2x!uI*<@9xp`t -zyH1}q9F8~Eqz}azU_}oecCJ;qW!zt|FM+mE`~Cno`G2qu0lavrf>FDZoV(m357O`Y -zgT?qA#(&EXHsCpu{}vx)i+8yP@ZZM|(s!`JUP}~k83S&U3cY~?lKmRVyVpRwiSXHT -zFP#GrVYjv%+5-r+1_7r@9H-M8hd_!)_7;rbIohhIG-C>Sr7DZOEG -z*9@v1k9!RYj$ZQNsQ2e(%!Iy{^05Y&byYB`zkskS=P~DNE@NeIOTPyHhAa6qodKcy -z4E#aS-(uxkUDpjan&_?5t$``DD`?`{Bi_3Uu1meR#Pk5puhLEj?IV5mJ^C}s`5%>c -zcgn)9Lz=6|^$tjfak`%!r8N1RUyf|l1M7WKOgN7|bIx_l9x)oZ`h7{~=z8EB-4{3L -zDHKoN;wc8VS9zqK9(oGKQ!oA$gs0xPt*{$)+A6yAKpM0Xnq&gx|&vX&geWwi!2_TNYf?!SkwZlaMx+=Sc64 -zZMq{(ymUfyzdQ~yf%_cy)x|+7(2J48o1_8_Q8%Q=ZiK!gj0+z116F8*Q)$l)E552h -zX&Puw3`7ssRVj8uu1khCqRSxH)UOn}40PS|h2gM0n=CWgGn78ppZ7V^x}Ays_H!H) -z-gAUI*xR7!-5RSgb$A8o@+cm7oBFfopy!VH{YS{dLRxtWrM30S-tNYj0W8^nF -z&4;@;8=d#dV<9cBmtOD)V=*I%zJOa_+~*C>dg=H4nE7HOC$&P0H}?x)Rm}FeXSNufGi5#7{E+`RGfq-maQqQB*DP`9Q$M%9q@LGN&XbZP -zc}%sAoo>=#esK&Im%E*VCFx7=Ylp1bI@SN&Y&kBJ8Ip14nC1|@F^5ooPfKsVN3##? -zntGZ`SrE<=&EJ;xNwz2W-8^@AG#w;;YmUT0{4 -zHIZWI;lSF-m?x2Xa2)mDYI#x|yD|h4Y*T!Oan{wp78JuyiPl&xMc+{GN`O7(8j~rBC_221o~;uV#MUrmAkul1G+wi}h=2luKbD -zq#ipkWTl{V%->*LqF#EN`;eB;uLMIqW|SgyJer~1hf@!rx%HQ8cn(3ZI>+gJlmJgB|3WC7O{zNBif! -zl*bI`7M03bcG$AF=kpm~{*hXFae{<8bhn86{4w{waM{n&YvykESC^-RheC>&huNIo2a{ei^^eipjjs!?`XS!{eGmHpb~)s`rfz2)-iX@M=FfrGEFyFMG` -zd-xfX(TxZ3)*RHJf2tX&lP)LXJi{4jknD%sB~5tVZDGw@ -z!Ds8GuR5NEc4jg{?{LjWssN-)Mk)=}cE%oek6I<|Y$c?E9re~Z5jWTcTl{gS+-ck= -z+pssrxP5A=9H=doSH*vP6i>JrV3j8E$fsyuXnkLv?kA)xmDg*9#D={cF`Bc5n3t^| -zvk}e!{kUhwbWb@A3uKh$_geqDkQhx9+139&r5Lgi@YDXK^0Q;e_CzIe-!LW&PtT!` -zmY|Gp;qvPR)M*kg>rKy{(EJY4GDu8MOItmO@HL8l+_%{?4!$PbseM{{%CojEKE+^p -zeaUH@#)B4Ymh$|(r)EiQmbaIjTQod{MbY_2dgp1+FuZ?86p$N*ot9R6G|{ERL+Yh(Fb^VHEqywuSXduc411jM{fjH*u?Ed%!O*{$PTGyZdB29m -z`7_omc@fr2lo{<5=nk?u!epFkpTkBbVuf-VyJ3($VLdVgH~iEr33oDAcUXTMaz6u3 -zCfsMRoRuEEzI91YN6l2a*W)KsPphu^Q~4*u)~WrQK9ql&O(%f5VQ#o-2A;0`I?|Qz8=T@12}Dhou&pypk=w`McfMY)0JWigN?*t -zj;y+OmYkGbmEq27i@%m$>cCmBI3eLAeor+gUA+h%^(f92#T=$}UL4B&b4NonahZ$Y -zR%2b1`lNiZT6x3hc-MXsbr*0>#Z@`XS|N9szR8AOn22)#P4?_6XdZ%lLGv)&s2TZ& -zJStAt6z&p2B97vO_5E$>?<~0n+pk|s^H7V6rhRg=dD~uXYrcIzV4Lm2-a8S0#vx0O -zc-owA$cx1QoI21N+iZ6(4o$c-T`&&mRsqWulk9Xm*q4wm=7EP6-~Wbu-E`08AsRZ% -zq8S-}w5R0_`Kl?=l7PN65O?Y&TH;dPMZY%Ps9r>G#$!%#Un6k{*z&wVAs@6SVpVB} -zrh-KcPv%-RQ<^B&h&1T2ZP>SqJPm8`iO|PA13SSq)|`}A!u=Mm7_Jmeu2Dfm_rcyr+W7#|(=s -z3{^aY{!97;WaWD~`aucy*E{oZwNJ!XLtMcw_rp@GqXzmb7of>vv|V!8t+7tKEp~lP -z>5}yqN|!9IN#C*fLi(k}MtkfMyM4(Ld&Z6>H5r$dT*!#cHfAo#wrB3hCVkK)&YH{} -z&I_3#SP4!x+7~5V4YSuQqEj2;I8k(A5mDmPCIf6xJqbBx;Lq;1^Gg*S*Q9*R*t$wa -z*wMnP8s@@$h$UmcI7Ndr;(PRrLkjf~7Qg1dhL3fe3_m`5nL`-!gw;P`OYwa6gllDFB%PC5H -zOZ#TTA65DBx%N#d$K_+H@6&cR^fh_Db|X?GWEe0vJ}rIJz9Ho`j3<;=WBZ{xvY(tV -zX0&B0PL&xfPosyQYTwbXVecAwsJ0%XjWDhu{0;DX&G_I^KQ#q6uSuE8>-Adu2Ybt8 -z{~-oTG2VH#{WV#y{T*6C`M%Kp1WHWQ5^l) -zSF|t1`}sO0w|umsR1O!Ye%UB%J?bZn>pluM5b0Z+wnRC=)lW;0wP&H_4LZx^kaY4t -z(C!}vOz6^i?7i(a#GcaOw7-U8E$s{7|5%rF^_>Fp-_;(7)Q!4_dFt`)4Zj4;L_YTqYZq{WO{<^7Qybcg_lgnV{zm4~urfJy?3Ac7IZcxHPP-2bn(*|6c;Ump)GFKW*}+DwR#(CfMHf7%%8Fi1aw*WpxK8LWUCEMG_| -z*Eh;x_=0TstfryB>{o5kIKMVj?RjU~BH@cdPniWf)faZ@*gW*ri*WUDcDT>rUPt(8 -zI34=)bhs;co{n%oxIK6t23iTl^G>)U@c#ua4Cy8!TnBdw;eXn$V`~Aw1N; -z|9w1H0UD4l8f`y~`&f-#YFN=`P;00`TruR3+vFkI2UqYM4qRwMcPvQw)eqcaOup*=y+3Z$IxXqj{19W}F~P9-K0;5N -zh_NC;T;K4)cZd`ZaIf_0p3#Vel;@ -zy`p+))gfiwpv7}OtR&$^3&<`D`MN}dcfZMm=UV=I$TS+y@ABUU -z(~*mFp2ER(SSyg -zJv&TfGX{(7Am95! -z(g)WQ568m}@M?L3$+*<3?Yv)F;h`HgZR5&W=^QN^@~;YJ1*EyJ1N#knt_glknh9OB -zVAlx9v#ICommbB525-8Vb)?svgt2+7sr=qqO%GILWM3mbL<$im4i6aKHogO$NW3@6^6bMZTL++jT -zkY1BUUAG<%G#U#-jP}9|V@;vPc%e{lG#1h6Ws>mhm%ijW|0LCBN58g|vv!m@`aQ*_ -zTqiE}T=U}U#CxGfyz%p4(IV0^VC{$V!-21NefZjsG@*Ws(HXEH!(R7hXxE>r3r*8T -z^)J>$PPalPRT+%aSgfjDI*8eaLDI>|S4!j4E#a#BuXm)Q|G4Dihg= -zf8%Vy%yQ0mit7S+9gfeBK^-2yPWtI|a_~W3<3xPjocCxh)C2GS8-2m0;&QKhHrM%o -zuyHi67iy(y{*Oo<0eNk^v>2NI2CD@%t0@VB9k`e@zo>6YSk*ApQmCRcke&Ld*Q8b0 -znKCtzjF_xdN2Th}f)8Nvx>IYD_VI^96QDy{(td_Zdy6B7bG^+Dse4D|;dmPpn% -zt#N3YKfWQx7W8w{3o+s=8q?aPzhMPou#P#e0j_jWLB?-NjH^j1Sq!aHI>pc-z0w}@ -zPJf*1fTSW##2Gs}xfl+KJXx*22J5r6YWr7QkEJ`k4E^iG;k}NEIOj`y1|hEKvluBO -zX=WDU8hlp4!;3zuVMnRXFU|$+z|DaZ9xP|hdF3o0IH0!B7`2J-1H?dT(JsB(Mi$(! -zNjB`L5yfAVCab$F`=z-@5|3=Lma~6?4iwtM#iH&+j)S|poG4Ump10%PaN0?UgRFKC -za%z{Bw9SVm4DE<`wch)qrTuwJGv$l0@2>QczNrFw$sW1-a39}}0QHg>>;ZI0^Hn|F -z;>Z}T@6jQ(shV0!yA_&^Mm@ha7FF)*u*2f2?7shF!Twh%6ueJMKal6t#I}6n2%qDbPe2S40&G#=xix%Z&wg -zTY6#5@>y5+6x6IJm0vW48mkMf1=R&nYf9ypOt8Vv&o1tV6+rJ!0y`=^E3)nPX<70C -z9fQ5*P)IN#&0KHt>e+gEjw~%x_l5UM>v5Wa($hCQQ#V`g^~i2%dIxr;*lr2y)s|3J -zhncdrWeEId+oG_BiNRX>0ldFo%57J6dKN_{9;u$s&ym26YvZ=YIiO*txKb4l6N)g -zBZpi54o!|asiz#BBEniMTda$B!>Zy0SZb=a -z8Jx9}?785afSZ6Qd`+7sQe(05@Si+A)X^g>r3djGb@Y&>DbOoRz&(9LDnq08c -zT_-^gTRPQNVli0heBOTPc-u_NVyw7hqISBsO1R|`=_0J@w(qP&oh*8*jZWEUi(gsV -z3-et6_!#`^<459G8=s5cz<3Q-&q0t-Z<7<_OXcAEOco>PCf4$SJEIkLkcFgu+AFd|gN`x&)Svm}9vh^^lOmsxz -z-UJyVWz1ph=A@U($>|11k7n4&4udoa_DMf*8(R&qNXlGh*?@frjQ`k~+AlqXTN0IX -zJ&*lWWX|>F?9D2iaeSqmZMatFZ)KdNRdT-S -zrd7HeSA(6eaGc7Kr5-nGP@{14#}U}a+7J7GG?LP|6v^*Zpgd`QVygQGq-5SvwkI?p -z7?bMt4xPpA9Gs&WKLy&;82|BgLNWeNwCu!v7<8gCG?ERC!HfelC7hdRmqKuEqS_X8 -zo=!p8ZL?a(7t)zTI$<6m>~!zvd)fPOnr94FsW&h#K2=lBp88beb(mTAp|fXQglVVy -zfXiExze2;E&WsPinek|6gOl+y<5^BRGcJscwwZBm{Ovh(Zu~=Qv%`C4{A-*UM{h8> -zxIRZXde9rtK%kjRIC@RRRmBb{<}a2Ss|QrjY+YN|%aw8-GXt)127QlI(k{ci2s>ut -z`C!*~=dCus=4N~^k5tFMR|)Pjpi?H8x9l%xN8kvLiFFOQm!q0vndWx6s6Wj^s1BK2 -z3xZCbP%Wli4MNx>*Yz0LMj|W-VG~iaMK-cgN>&E4I;yRQ@Lk4ZHAVG`ftZZucF_9Td6z~FBn#}hB@*r0&8q+JX -zM$QPWSu6})1Dh!qaMur@b<5)KrGIvO4d3_D52)20fUDbTaC`GTvoG*px^L#RRMfG? -zPq_n!=y*XP<#?{d2)k58a~C+9p@|}3zqVP*^IQZ+8`ntjgRzIc5_>U4xYcx?3Gc=2 -zbZ@%C-x&g}>`*#GJEtr#a*n-M$}aa;Zu6kvSjx}n*mTrk59McUcey`xm&xlGs?#p_v+j%7PbwPIf2A<-lf50o -zg|k8w?J!Zu!}-jJry)(@J)p;>i!G7wGh8LC&lRx0yVG4JZRaV^b$OR88lp{+=T?#} -z!=kwtBX+u%N-^||9gqI2URwGO>Cc}1xKUZ*3ExX|-*uv{OW~+roIz{oEaJc2{#U&A -zDt5RpUNt^xth1_T{w8{=`HWYVzVP+=R_w(8@Yiy->*I3P`l$EbmLcfvwEs_I6^k5# -z-u_`Ljg2>-`t#?f{`&D#e{B-ZlVM&Lg_#ZAJl!VUxX}!YyT%nU*ukfI9cZn_OqRHd -zLD&I(CkOOHyUu&MVI-y%j|}@j%1Wn7ox9R{;~MHmb)>rH{H2^d+E&5q+bF*~E`0G0 -z_k;u9r{@pI;6X(hT1zla)Zk_`^rl0X%jF1RFTW`b7|qz_-h+^f*bV=j?MD2^*o`a7 -zNUS6OTkuyScD|r#_80-eO -z;XZ;Bka#F>e~Y(qS7sqXcsbwES+5J%VF;fo5!!FqE!<%DX$6jTX91-bE -zStAdGU7?~eRe)>cnf&?Osx|UX1BLc~e2qMv!ZK!E-CFp%{G;i0?2WuG|BIKl%l%`^ -z>+)r_tjkmvp6asN5~?-YVwjy$rL@GvP?x=Ue?Qy-(+Su{Isr+_3Eb63?HvqVr1x9O -zVM}6qm#=mRA!!`@Nh)^tv{2nnKx(u`zJpU4&eTTs2PQTbe26D%i>6M5t)RPMH)%HP -z5`QSqjieIdfS>&>NxZL&Qgd6|ast+(D0VnvUsGd;sj;gNdpD0Ag4pNP*hn>YF=A&6 -zv>IT>YR*C5cVCqTK&FZhX~8{J#7pMB5Bo32VFiKYbJ~NjmjsszHxll3@PHF=XW+8o -zUj;ZBPy&1r?gc#0gZmNBPr)66D}z56ZXlcvTb~C*m32=sU-yvyn;*1o3Of|NGMxOt -zXh3t3ebRZpMjm;soV_oVLpPgrFzcXSti{=59oNAmEf#3uZ)oHDPgZLXcmio6wn?qf -zLRa!8&6i}=2F-_@&hI+nl$AUwZ<@b*@6M8?ZCI<*%1f4t)wTLQ=>=Yo>pq?pgj)QT -zuhT7!!_suHE}`5GWZ|7LuaK(sgw$ -zzE28+6onn_gLUl~yyt>^jbuQz&u~ -zA*rxP$Ti!e+N!7KL;gfMz?eU56gO%&>NaAIYzat>1?C5#B{b7{o7=}GJs&FX%>@+)gRoU&H(E=kUx?}lLxw{kek@j&WEDM41=a2 -z%}d*)4`DIkxcss(<-8VJxW=?by6MzV$Tz#Xd!hViiFb -zIZgd$hgGWx4G1A?D(zBj$69Rg{j`@Ym9NKGhyMYermdXCM$ -z(3!g^4?oT#_UqrT82A+fzhdB54E&0LUor4227blBuNe3h1HWS6R}B1$fnPE3{{swU -zWZE)vY`F`I@>qc_r?4n}Rfe;WbqOuZcP`9dwlFi-md@^drpQu!ycW%Yrz8Vn>*bQ6J0nm -zx{&_eVTdj?_5wS8i=2xVdSM~U -zTa=L#kD5<5t&CpD@@>%>Su3J50K5Tl4rjV)GOCboqsO?;$9Q_ovN?0@MFrV~`3^NE -z$F?$mMFDwoGHr$Vc`GteH6^!#m6W^?Wklnh%xs`$6&0zx8K31Xb_7+1|FD9>LT6!) -zeQXw`Syq_7DBG4*=&f6P78J&B@lt+9W>JAHH!CwfOG%0s6HLqEmc=XH!e!~pGjlVX -zYPD=x-U{Yr=1h(@#jm`b<0$hYtSB=lKX1{Z!px$Z8mu;#*L@Kx!O@p*LvKr8fp1Ix -zjJ%?_I9nFs-%*ghBHq;b6`Vyyz=cW4Bz>h#$w0+~H@C4_=_|&V{x8)WUu0XWcpI?xd -zvCLkSYs<-;99_tYRxZp~Rdy7} -z^OPnt8}%23nt^U_AEyc^7^b4_4rhKr=5l(>&g6aYKYBrz@SA!Z!N1p`GLhn*~kB1MXA!8HQ+vM6 -z;Fej3K=GXH_@UB>PsW-lozqz26J-j1||3S;^|YmD#ZI9|^G*~?(^-Y<#Ir?eJf -z8P2Rl&g`P1Rmzv^%F!2P=Fp%-AJkW}+5>)8G|SIW_;)-8fgJBQqqj2ibC>0)ghWGM -z=eSm|(vG{7bCtMGBK4*9_KG-fuZUB6MN!xHx{@!Agv2*h3eL*UP%}pt>ns){fzozc -zR=RJ*LPZNP_O3z?&dkhL$Bdf;6_itxx};QD%*}zFY$n4_tuc*RN!>6Z-iv; -z9zua&WwcTYDOj0L)P-Q*U;r=gS~Sv)&GONC5vE8qL=!oI4bm%x>G39K?ieC)Z-JPm -zE%LH3!jhM@73AA(zF|e3vhpx+b`=Rc)ElN&@1`&n1viDM7~o-?z87ZmM$&U!m*;r( -zS*bFHlH82AasR=YGBUjF;Jt+RRE`TiFglCujxK$OdK-{Xkdf_e@X8`v_M(E!r4+32 -zC5Lxb(Aj%_)_3>^&B<_jN0pyMNejXThrjl1D$Ir_za^~eyCGu_g8FpK~+6lXiS6!K8 -zm*8dSc-|`KXAs@0uPWcj`-xPa+Ven0NJXsNI}(9t(T5jOjWRN`i)>0&c%rT|aJwC= -z2vpuge0qg5HzRLF;p1N1W&dpExFT;wHr63dkS1q--U*lwmG&i_bq6n12pPQe<_Rcc -zYEajvg3j^bRpL@Soo&m$X-M{dcg|C>)bVz=&R+ZT**~Wb-zZdITjBdq%6IeeDesK) -z=bX+Pu2$(k(sw0xrPujpyrAvQL7mtUI*b=##LpBYsS$jlpnh*Y81ZEfu_->yqv45T -zULB3QFuX3qahFhaJnj;LGa3bXIXBPF#+bTHa=olTZE6>C?uy^e389ic+xzLfUiI}% -zWy-ELX+?e^bsy?qzP>~rW%02HXn}{%p}d?}#f#UA3@}TjRK%FPXjEq0V@&`1Ikyk5 -zz6s_{c=d()@ahYpPEDi~ZI8AqlPhrSuCuF@T;5ejKag8UD~f`m%nSpuU;~1eWnyW~ -z3UZve%$}W*w=jKKL17Wg&(20@b}mBV7}yh1L}wH+FW;t7BnVE!`oJ-!Wx))p986$= -z4A*#YKNja42J>(~)|dOWYygJ>i%`P>kOypRa=*Yt)sK_P2oso2g?beRaHwP5RKHRW -z6YH+}LsS^5!Y~!~02J}Br|R#e!rm(Eqrz}N4N~<}VSg14RO1J!&|7W+x*dYjm|tZk -z3ku)BLbCHY+ITwrbonD((I2&y{-}-gM{TA*!d=%tY6JZdZt2g!e;J!cjly3N|7EPN -znqjf(pXV(=h2H$pu$%wX3i#sH3ix>|rdGh0pFw&3G$D=tlK3x^j(kAqXRMh2GHJ5v -z_q9|BC(P2HG`T@ZuVSDxy;6Zrzfu9Dr_YZ+1OJsKpHtsYQvFPgFIN3Ys{hs%IPJxc -z`Uy@`CsqD<1v<-PyaLkXKdI#@6@Z_*0sSS>k2LxET?8?ZfowP(<*&%$i&2ts`Q}KB -zdGO$mena-?buW3NUBcN-pYKk!?b$D?rm-1apdXEzuM|DlX12&k3njW?`YhoR?cvke8jESpXqi -zAmkG1kWA2T9RH2SD%`{hZIE5Cdmp?n`JVfzKDJ>3>-QN7RR0X-XtQXJG!HR{oBNsj -zo5RdK%{|P$%)QNh%md63=7HuI^Bv~l=2-Ix^GI{DImtZRJjZ;W`F`^}^DA#I*UdFA -zG*2f%<<*~^IPWm=7-D=o8L4) -zV1CeSHy4{r%&W~A=1lVZW^SkCc^Ir2lbB%eM`8D%F^C9zLbA$PP^9SZn&3`k0X8ybRwE2wrtofYzy!k70 -zv-xZDPv(D`|7HHc{G<7jIm-O^?OEF$+h2b3%=TB_?1^@kZ;vy-@#gvMP1`@;zU|HX -z-a7H7=B>E5;@?ufBgrvXTwLx#2xm!z%7s6+B{_^m32oyF-sNc5umV*!qS0Z~ov`*aCxXwx9p~Jly;K&mp}Rtfx@~%t3GBoKT}r(o;QY -zdY_wDki)XFZFZ+EyU3Z7S-`R(&So@Q$adx|!$=JI_ozj-bjYi@bW9OWF&+fTAVkRN -z_9c0Xm@^k5vqg}a<=QimAuXB~rrQcLGZxwl3TZr!&su2Dvhf)T6>KXi%FJaypIrZk -z0M3^l0;Ym2d`POuCaxUl7>xFSFpUN)GUshnx -z!xA-%X3Sj#5-bzj2N_D6kYNF;Td*=cJI}tvnVUr;TQBL9A_h(b)_vkUY*I@h^<_xnj7GRx%+Xa{YLJmuL4t`?r>Raa^ -zvgN;!!*ZTOfOs_G);Va|Z+;<%-|!p)#ia*tor8`Q|3VJMJcl6Bcwg5XB7Jz!v$9{v -zp^WDcEPnRWt#j~W>wY1Jbv%a_AuIH_DAS%6m4hogN -z<9}ye*BmDK>OfR_`y3Q1ZSX&K@2ztnD!qLU3Y8x7zn9aP7Z06vAS%6m4hofiBSQPrqdjoJwz> -zgF>aBV}5<>9EeJ9pMyfB&Hhil(lv+4ygzuU^!7O@RQjEN&pU6O15xSib5N-C2me>j -z+&TxM(%a{tP-*MWdQ@jCFfGdW3auE%;DUviYVh%zPwyaEb7ri>pj~7ufQ%VKurGur -z5Af$>dTBF3j7uXo3B?Fv&WMR7$(|PGEX&3MAELp`{6b}ifP@B=(1c(mH)KPyB>px% -zbeRC8XR_qw59T;CQsy8n<&FB}+Z~iumx+WTh)_0vmC|TidL>(G%ZVR54igz=&Oy7V -z1=&zYQ0hig6E3o%36GitahbH0QRK*oH!aJ?yvbR#QYn*V6c!?!PjP52Mz!(bj?YDg -zvIfW``kRVx;&LPdsP%EVlMp3z{hG6V9ERp1x6eW0a)0T@lDg(F$Cm?fx!dQUaJf&r -zvEp0jKwR$jIVfE2Y&X_$>l}#7-986}%QgQD51p+bE_eGJ6fXCV|B46Va<|Vx;c`FS -z5)WQ3cl#U^E_eB7c({*$3on_lM3Lh|AqR2ZhV^fQYMWkLt{UxZLe?P`F&=&vLlm$E#H) -z6_3@BkD!Tq;a7N)Nnr>}y}T(-S-WuNMLb7k0xBQY`UL66o=T(o&}PnSfIjO6)sjGRz>`My9zOb -z;{Hcf_^=A+sc^0e=csU&3hz;2nhIyC(4xX=Dx9jqBo$6k;baxwsltgWOjO}G6^>Qm -z7!}5=FiwS-KcfD3iK983q{2IWa3l|(D0<-t)gPJ{5h>q9ai|Ju -z!ASlg9FF%vqv|ICm)>u@7|G#SA2e|P7|{y{bAP<3zyy&bcY41Bkp#MWzc>}fizJZN -z`%VWba|z*+BS5EVFB -zg@b;D954SL;UQ#-C!NX%T%f{-RQP}jIh`V&()#Y -zUC3Aur@N2@6~?L1qBkZ_L| -zayk#`qx$=J6n|e2r`wRe9!{@-oDPvrfxT7O%NI@?TKbUQ9tHOG^ydCPD(tPoUOqo< -zIO#)rdAyJ&q4a(a4tsbMe@~xZ2@g~Kp(+ek-w#p!-BlQ*z8~!KEAMwx!-G7uXQU7D -zSKkj%!~Inl=!;k0^Yg_k@A;|u`l;!3zIYOq>O%rNv_nGqE6~rQglm22X_G=9BC7dl -zJ&IpY>!VS_1vOud`ktVMYkcXI`UpP1H=qAEAcU@&(7R-XMT=;5vM?_<6Dt#_bgoq8 -zu8I~PW)NI)im3`z-o;IBfhzn}7CTVySdr<>a(D%!C)OfDE -zswSo#bV!Jm7~q4e(qS#y*^2DEta#gU2>X2!WpC=t?ChIM!uvpgve2tHJNw{9!_l#1 -zb4A$T|3yNqzOg54@$HeGxv@sKIoJ<2zzmi^%O2^}4SkxJG$3ez#$ZXX3U3aFO>vzp -zY$BUSjCn*E=jO@2*j{&xlytR+02|S;KDEznyKF$%P}~(h0Y1lNOs#T^}~&s+_LIFJUUAv?3j6^zr!9^BDYcn`;f3ZJMsrlvLC;b -zTCs(;N4kgGLXYRR(DoK=cgMB_Zic<|Ds4-#2n&WSrJ|-P4i?+Y7PqwLT60zdZ1~!X -zlosxDUv3G4g%MbRWzBhe-G9VAUst7SSl#zX^`7Ru%hFufTwu-Jq7A^{fDYC?C_2WX -zrF$1j(sn`~_^uVkq3#ureyMSFe?U|GKE?no_l4dkZeO5ru^!^<9B5WAxSz2enz99Z -z2xtiBA!-uM>M!4+z|~*wBT%~FpaQtBoSo#p;tv6YckQ0Rt|WE8SbT)C?uAP9WT9pz -zkPkb>0O5BjCG6K|7kC&{2bN6Be6VjsfJxV=3KC1D|3ALGzI2-`OE?~QB%I-Q~2tEtJxZJaZPTYc(JcAGO;6Y9EV5`-Xqd -zaEk(x%p1Q2<&`~{bT_JmQJ4olgx7hX(hG3w0=*viwgL_-;FJOyc%Es4fO34>xf(WA -z1mIW-j?sw63!$Na&yTqM%<S$=(}h;x-hl93{{et -zK>@`CzGAGD0yWL6fh@`2T1wS@5C!EdD0{GZzlKrQe_2ypjNbFI^2MH3Q1>*@6U+L( -z!*XLal6AjQ`pX&};rjQKr+;T)DMRU%8cv3|O_A{VvZiFjFv?RYPot;K_dL5e{iBDa -ztx9Gu!1okSOU0hJ!I&TYFTQ(2xWgp9Y(7GSIfZC@J$#La91X5iq!A#hMU^CiF`(9s$eb_c6vzhPmqsG!Kg -zjA9QY3ECmP01!M$Yy=RW6C3e@K3V(>Am}miIRxro7M~~Ie9hYT3z=XPk0H=MOgu>- -zLHrzXeWr+Sk*`K9hcD=5O+~|a7WA^X27!UIGF-g -zJ~>$0Dl{)x7n;9Dd=9VsMe-K}KaE~MKf9n|CcJk693@R}fRBjsf~Iu3kw7u!d4c6l -z?+aw|?j2gpwkN|n|4iN#_Bn4D`+~QKeaV`Iub5$lP~5CjN*7sB9RI}O{S+`#)18WS -zDJ8fx0+sHA(ZecX+&f#_#yBU -zW2B$3hQH2nhCs)HG;Oku087^KdJ2BRYO6jVbSAH7*mUs&e1Kq)W1`1s@o)4w-WF>B -zm_|IcK;zPRG+J~;Aygya0|=oQNiDIfBd`bYa_{iceLIf}%h!aD5}5$K -zI^+_zM%)S@7{mt&3>3tySzo3V6lW!MvDw_>_cH~v!+|+qdZRhy{00`&V*sY@0+`~n!**| -z9ZW+hnc|COwF{nRq5Y5~5J}WHpvTTae*-Xpg+4CqwEnI&f0?Et`7{&a|67vxd`ZUN -zoJ1)>$;G7RGU>l1d9T%*B)Kz*s43QCME7IDJ;FJw#?`l2eK8^|(6pK| -z$rs`EWsr}>gel)WO9)*+qmv*K!1%5(z_l2pFb1f;X5ryhlO4SELnh2;wGVby;dj9%MwJuKh{50Nr -zQmvs?skVXFI-Dsl_=mCDhpBW{J0HN_1tI$J8`ACGmo`h|urI$7YAJ+9WfB -z24rp03>Nym`X0NOl)zrtg1~O9FXlEtfo%n=T<|O#U!!1YC46WD_`G$1c05(-_pR`` -zl3!2;cD%4&Q}O-_Oehu-Q8VCk5&>nD5mqa{Er>&lFxsPpk_vVP9SlhRI{Eq5*_rHX -zyl%==%6q(P+`KL9>n{m|f(w-ZLTG%qJ);aS+tfBF9HkOeOneDE@b>|r)IsRb!t>%E -zi4dMg<;?EmcCgTLRx6;huj7HC*@QuD -z-wlYnlZ6cwDiuoILM335(d=U$l~Xyc!$yj)Qe2&Y$?WA9HnLi<=DyFO&jVCy*fbRT -z7R_de>6GA0ht3dOUxuKW8Z9Q>!Y;v8dJ;ZXJ?%hi+;ned@7l)qs4Z42kGTEA|Mh!cPqfyj2iX#XP?#2~|xyDAB -zF)ml*rN_)TbLIP;Q*UR%S?>M5=j(s!sp?uzojP^4I#n+US9R6_q(m=f+fyj^3$!zg -z<*&N>`Qcy%T1StO`Yp9hp3m*>h}7kjY|+)wSkwy?qi^HoBf(o)nWgJHS36I6S-U#G -z-Cn0pi|cX#d{@VcoD$ZaR&pV;yp$1YZCQ3rJeOjj9n>&VfUvHY|E$Gk?(bQ5q9$Mo -zJ-^0`>WPAE=*+zaz?2aN_;jtFUjsN*Ce2~eVCAwbQAOQZmPVj<9#(x|H%QcM -zW4vqwUNVL>K^sL*9i`aBYF9@YI4zT#G*B@eEylM0Z|Lj}%ioIS2TeRqZAEYMK5Cd) -zO$ARfc76UQD|6A~xIUdRNlzDby8-`-( -z(W2ym198`>cGumHBUfVipR|GC|8&O_+Fk4;oy0k-;|bL$tj_v?_Ncm8?|;SUj2n2QW)o(F27x2}C#JnJF^yW7AMCjD(0))id@ -z!w+o6gV~0jA)Ud6&X`>|8U*$m5SZ*#9n_U9wLxE!SWQ?X7@;f;^+-d5KNj0ij}R?S -zheXZRBjmrV1$NFXDy9h)Rp*Ebjs{WCXQF1hsHi$uJ4fY^&Xoq*rk-A6r=sDcCs29O -zG18-G5t3^s^d}TBGJ$NomB|1W(c%NMqt_PcO2~fBfnLyn=U%ay8p>R3A~r-;Dv(H* -zVRE788{^lWOAEoeipCotCJ3?X8>orqC^e6wwJpN@=T@a`y3U~BeN*!Wur=lr_H1RK -zKo+&BWzf1rS-z@M -zlm(iZhbsjjjdE(s6xmVUS@YPb^N`yp+ZVYa&cWtl`mA~E+IjlEObDuS+30$qy{B#9 -z6NT7gQ27xa%|M`vyKmbY0Piym?qk#q@|UTR*d5Hv)$Qb;N9FW6=?ZEn&0zV^HTgO= -z0~dGJxQi;JoqIRfeL6GhJIlZo2Psc!8U-uCTV0ixd)0W(MP<@zQlihc**QE1Xb`O} -z=rdA7amysxBD^y*khm!`6N!&9voKpX0f}AI0xd!9iPUvx4gtf(BgW7GLsK!HjNt#d -zJ%SAc1WG++4m0z^jAjQZa|n_ll!P~?0$Ccs$09XWg-oR_aIy?!jR(0MB>k{X2D{e}+j~XVf;sAkDcV`D -zV9P*R7zE}IlP0ANi#oA|GSA}ws9pZcI%NMh7ymU=<~S;UKZEohO{GIfw=v^{n2_<< -z!@~o$VJaIbbBwO+I7n8x0BZEQkIBCN`Y{kWR(3D8QH~p+KCefYx@45o#%|iY-FICaI+idX$dB*s>H> -zjEzZHZl6%-XJ|Lc)AUEdl3K{Uoa8?$of$1w9ja1qb$TkgW7L)gEtaJWlu~G2X~The -zsTsCu9*VVdBl+i2*Oh}ud_4s@m?m>+;gsyXRezHa{EcG!7JVn}WC -zp)aM2T7lJc@f;kw9^M1wDv@)>v}TfWYY&JBg|$GIvxm1mW694LH1_SJOm!~jqCh#= -zeH2>I!`*!YX#g;5jGHZf7GnX>ckFbe->#*fv#R*4D -zg|e&Q27Q66SjKH<7ur<}2JbW&yc6t+Z9{QuSuL8Ncv>xN_%Y8qlJeMyk8hyZ>UOdg -zVNrX}ADSHOMk`>?(6!jGF*Gm^Xc%eM9)Zl-B*O+@M%BuJg>Jxx -zwGJZ3)}S2uST6xGKJqaXX;#|*6g3pXyYOqnX*<9!gbCbHyqGb;<|_W9sawc;N7@BG -zqo$%yXzl0JhQc?y@E<1jo@$FV{&4LV>aCdeH`Q1VVBb2G8K?#Xwx2>v&HNl@eoiaY -zskYNN1cTd=6lIe`k3UV?#9;aAF37z(?P?n=b -z@xf8cL--HpTs49T$0*Z)jWmcJZpYRck{pLLzlu(KFVVabCmij+Vjvt_Ep6d2!}=4& -z&in)%TB=yza61JhqcyVZJO39@576g-A#s!cOC&z>e}yEC{4$4O-DVC2Hj)Jh)geGQ -ziu-`jk5Fh=0*F1=Fz^OkoK%3#oaQq*Ztl(~K4A`~U65<)$){3V!6fq6=-T~j$dLxk -zBbUO<)nO$5FO3W8b-Oc)#!jjHGg0iis+2bAlkL<5UewzZx<%DMXAi{0z3<#B8_2nr -zIT)YdR2v#>o0!Ao4Ya!28&w0oI1WK8OyK82HgKEs`6k+-3Qx>p4+xaK)HleHOKnJy -zYXUzj*(`@Hj*$Xj7*%jK=)idZ7B0M5)kRheUHUOC+}})&v#D!R6LlQbERP)Hz^{j} -zo)toF@>!7RV#LHIt&0~Nr3KPJdhs7MeTFGEY3)@7M@``X((w1902JxkdKrlJ6$;%X -zqQ}u9b}Txxi0?d -zI3SXl9Ja3{)#4$ysQ|;iL7|)NoE5@8a@>aoY;WSfLlpX{xX~QHkU0Q@?3H$uKtMyF -zY*w|A6>JzqV=jL|B~0~M;r!7`bMNaL=j;d&6 -zMMq(!nOFr3Dk-e#UuYWqR2mdkN`u)|{TrZ=8_cd!4P|g7?=;&GRtRsyM{#bkg&enm -zU2LHy{tugy|HGzyRN;sheCfn(!JI*;z$)GjER6%VF*w7yep$KIh7~K?;3(k#!uXF7 -z0_K6;!7dtjal{M2enrPR9i2R!9Ctx(UO)k+0@y(8UWCwP`gEUSZQ`2w2`34Ax{q#A -zU~3=-sp8BR700oSw=axy{*N~^>mk;&&=SBkekB~*4@(1nFn`=|jkitm4ouRZ<*%hs -zS!&&B?*O0u+;0q0!r|8axMo|_@to+pNTSep9qnTK3JumpZy5}Y6C)f&pBWlFD+x-z -z12V2Cg9>UOLe6b1U_T$)y@1?IJ~t33h{x24}Be#~q~5jr|+IUx(&sV5(dxDyri> -zis>B`dO%swtT4@|BJ8qM^^rQitwcGFTKP;UM>Wwga&*G8kV7-rIqe-Wqe%2!2M}T` -zso0e{ROq2{94Bxg^nw7)RpbI$f>vjqL2?f!{R)JXK%HGnvC?r=xJpc5#}~-uQlYT} -zKpH}kkIA<1-Dd0#?C?@oydZ}20I?tL;M@`B^Nh3F7nr3;!+$xd_$e&aF$8>_-W1GHT4pCys!% -zofoo4=tAvi6Qoz4Y5~%*af@Jg8tZr-V=jkFucR?f^%i`;EwO_)PDYJGprf!vR+pi -z>o$KdOci^D*(mh0)@kINVDnG-laZTjNFzZZyr{}wlTbNqhKs_XC}d1v(l%3VgHx?P -zH|33IfcTa2z_`N(;uC<=fdXtNXNkVA_0)sCHLA1!6fbG!arzqSg?X!NYkmB;_^3pmlI -z(&@{vS60-#P^D@`WI>W>s8lRaxOu{z0v*Nqpv)+6^zVCB*qWcR28R+@6`c5$2`#KrH8Uz5@nPZT3#59Lgqv3*r2&*^-mLuE_ -zK>&6;SglvnX@?|M1um1e4Di-@>ZA?zJfkEQ!kg9dNL|PJ8vF+!aQfd_v*8Sn;Y(X^ -z!qLe8VKc{1Ni~XD2RJm0dYGL|A=}`gTR+Sgp~Jg*Hx8k0MEh|3=bJ{o``YB*GFsk$ -zb32FQeN(ufb3?(bq`?7dn~AQEnjEyQnPVUrOzyYHL0$f%$sI%v3i2l=_absZ@?($j -zurDD8FXN{s_cC%=vCmBI6-;v~`9C+gSCN}W{x3}KHRPs?k(~kc&M@N<0ka<#NdgBL -zSkRyf=5AzC1TSxaio-z29#dB+xVY<}PO=fBD)3*Kt42;LgYy=S>ucDxYPD>G -zTHm5*pF!61yne3jzg9KktK^)+wMV>7u01j_pI4ktuIHrY8PCZ|XW_gX;HDSI+Pa>H -zyyYN2CL*5SoA?hA3{VOc?yIxe`^Dqsr*sDl1JD -z;JOrt!K;xBr%WT*vmKbGMXsY_xw$@81T7B|C>qggABUb5(d#msWT3FI`?KM5#Bo>V -zDnks%sQme<7vh*L{LRrGq?` -zXoQtnHl+Eep{@8i$~?mi`>ov^D8HY8-8yL7?krIxTrm6~A2OjfK`@|~`=l2e2*tF7 -z$SP+POXY&+64C;wD}b;wz;y-L(*r}^v92_J!?Bbb| -zq{_?-q{__mxXNHN?1s*I2iEARNZs1DRZJ+%F)Jk^*`Q~C!L_LMnV4igdT$p#$4XIM>hud}v*Fp+GQ9Fr7ND+eaK -z*D(pR=$XO)ovAq@*`0^oFHv(beLaQlQBm2j(x>|@OL0v^^hBn+atj2c;7)5RcXpPw -zkN>+%c8>czRRcJ&JIn|OUB7^re^K6-@sNf#dOL+A{DQoQ|3LFBqoZI0Szu4@Y4+yA -z4u6A2jMEA+-R@~H_(fzb3cViBy--H?j6-M3D0IK*wC;-`j|L|&Xk9PTx2KmUvs#a? -z`&B^>aI)5XB<1;$la_*O;C%B&;b88WGD09Lu~TE$armf!>u=`O14wMMeLTi{@ioaf5D##AZO_0i|>>pD!~)#$n~KL3v1t}*)j)i!-vZ!&2tGkB>K2I#Iz)a2#I<|?0vIqWw7Ef-el -zUM{EA?&auunsbM7C1o$R*$kuHmAeX)zMn!nWDXFKrZZ5v(6uc1I$aH+n7!DpVqj^u -zwgDv90V$+(EdSFZCoRVEKS$OQ_#?3Z_d*Z>yCB+1Z#?(j{?a%1UR(P1na9(dxvf~# -zddg)pUa*^(7_amWvsYGW;txPEf=-Pi&0-49x-j5i`O^m`aX# -zw`Kw|c(-QeOW<_`J7AF+uMI>r-7&&rFtML=**m`F#JNMvz`;#2KUX{M^`LNsN1*m- -z9$}C{WNOpLW-7?|`9AM{Vncl`lt_qba6mKXjfzwyVv)=_1X+*&P$-kcZuwppc6>QNAcP -zUjL)^nlkP4UnvTm=OiBCj2p)Z=kp9@R>GPilWD*lX5gTog_{TAnn;4L>snm2fc;)m -z=Hgzc^Ei11BM -z=*kHh09Wpzc+O`*WDb#W5f4ElOp#GhH9Z#q$s%lISKViJ71-0{B^3N668OD0f*szL -zGvWe(ltZBgl{Mi!3bxRqD59z_!Op*$!Yx#eoaYkh8o4$#30u^-Z?<5?*3gI_DG7<& -zq+aT*apns3_$%&GYh#)ND(fa-?(l!=XDDQDVkO@%on@NcpIND%D)Ty;PUAv{M-sXy -zN2+w>sogMa{SL`_K;D?2C&?sUllVmFSo`HfbzCe=hjZXP{~r_o#WG$>vNefEzsA4in5fxM!vmvPR~q!cwhNuihhldbpRBx&cY&N^8|Uv)QPoPe(C=XSG@{1F@OZ6uw7WT(}NG -zeor52}wRBdy$NxWFOXO86_uU!5^XI -zyLA<4H~DUL<%CBlcn?V90=~PmsB>X_)ZG$E;&}vxP}V0QInMtrj_`k2_nZ-Y_$(ps -z3dS9DDe1+ZN97ZC(WtxCGm+WUE~E9Q7{uk|3W?T5m)Ki&<*??*f3_**w&|v%6y+ -zqH94KAEFAcCWR)9@$59R%HladRrwp@d(z1LKRiwCy;zN$3EieyC2{f~fS7LW{1k;b -zT=+m_I)$6TIOU2oUOY{?aLXK%ZiV0j -zLNGDMMc=79guUUC!c&-E7#ajCo~_z@7~uX{!HJIlbPbc@cZgI&;dj<9p6%ZtWe|G# -z9jL%@90JpHjri6TSa(^Yq{&hKg9s -zhiI@y65M=7t}VY=hQ+Pui}7D%7hP=ZzvafZPx=9>Y~(6!XaI&({ZK9?osGNd^^{Zy -zO0JzdvXI(FEt6g%%YXd9Imk^TUjSQF?h0Xkdif7!I|X0VE=X+*8_PdPd0z|gNfVG@ -z*a^Uk+{@ws9l?_EQbA?x*=FT42B#S8ZqsgFs(m^-bqgi^2FY$DLT(MGQCDaUH5jpk -zlO|BP_2v--In1J@A92pH7CA(&B+aDQ)Own61pE`7ncUhVvJqas7?_yuTz-XtY@Z=1 -zs2sfR`=C!8qokjpO3U$2OR>>g2rekZ;vE0Z%oo%kX6hJ -zFrJ(g#;^lgwgA`l95K&&o&OD{3FTp$$Z;W#tN|;A-Ou;m+vcFqoeEgMesS+p?o=Sh -zcPfNk)OB18BzLapSg_A@wpDs*0`tEX8{HnEhiM5Hdd#A3r^S2EijUkX2_zREA71<$ -z7DR~y%9kF6ZrXc5ne;34DF>9ylW`;|LdqOTjx}eIAaCwv0SktW^uTW*!1$o?@6r5c -zsDf?(>x8IV*BRj>$@;!?$_Jih7R!Yj%Cb3O4A%e6M!8wd-vV3-ffbOBq6#s?H4b(p -zfb$DY!+R*{H2~3g?4le<`)2avU5-$rV`mO6Y+a*XdJQV0i&aLrDLAO90k1ALIk@?t -zin}a!%qJbj#HPC*_|UL5xJaQB1uJog)lNyj!+&l{!ub)bi3+2JhARz#zmvie%4Rra)M*$x$Mqr#?S)i3E!oTHL$&~4f&c@#z4b|?Z#NqA1~q -zfrhv`Sl&YA*eax`ZbC23^q}q=Xl&JIL9XJubd4@PM}z62^gL$r>38`gEIPic;zg{hbD>zof+z3N%c7 -zc4vAK1q|`xEff*r&4(77Pa$*T!8=CywHHSXdJ=_<+36jFTnUBl!o;RKQV`@2nXXrx -z#D^eo2!_;QoVe_yF+pH5P~JsmpmWj77z(X4lm0g|&<{~Kl|pOnLgcQZ5RPZi*)A9W -z7;iL=`j9*b -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 -zbAPmM86CfeBtN7Ix?} -zn;8xGTzm9oKo2Y3NDv+UxvoUw#)}hr7lj^_oUc(lU#YXi^OZX51kaa;8zc;AnS+16 -zNiI}SCzA?rIc(o>N`;bGcERv&@%OO7-(?&c3-+~8YAOB$LEkCuf;gAK;shTu35Pr& -zXZU>ZIkQEdkiw8rZEZSJxi}P@Pc%XeQczR9h7R`zDd1Ba*em3L540PBssp2f|?f2jv5u5Ea{9KNG3T$P9#Gd1uW)+y0}dK -z^PGy^2!2*;OA=X?|lHMArweYn-Zn%wX}@fFie)8!WRY^UpSt$Fcl -z#<#Ww@*y?;E+i0=TOplF$57!)T5xy_rQ$8NQa9&rIGh?E-HseC{coivbX@_@9#p@F -z_shfznI;hKKS^@A%W>J<=Sf9S45%*GTxLprjSDk58I|iveTj39)Yn8I$8%o|w2|Hf -zGp3Dd#t4u%Y|7IZ&bHKdMXIH~#l(Q;h7fB6O5Tb!TGz3@HUYeh_pXfR##I1_!PF0A -znh$?~cHZx`lbVGf;Q>&yz{I;0jGixh5TWR!)GsjUAyilgWWn9X$Ql;EwI1z;2ReGu -z+E$81#ebLU_)ifb@D4El8EOuv!g^HzlxGnRT{M6&9PBG}mea2@+(KgjW%RFs>tXTH -zADYqQ22O3-38SV$-fI1E4P{+5%>zOtHk5s%P0-mvHi*wc=qxopsyCbrvGkpE2K4Y_ -zn|{P@g=Xe;~zjwUW|;)P$sBGh0OLYFP|F%JiT}=CmXueT~m5&1-zkP=DY+ -zY2idpTNWZ&5~L31Zh!?qv;#fng!p}N-lDT+O3PH|v!B+uGt;t+*LD-NV)Pz9e6C{! -z!~iJN>K~2-dpd*!C^!WGB6qTmB2YMOXkse$F}9tI3j;o#kH6!mwfP-uShVHOA46hX -zCdlm#O5rZ}Mvb+LZ&9$8@Kv669{_-7i(U{zO{fQ7jYd*JY2)eo1M{jLIa^jmd=S`% -zjPhm|WAObkly(+W03Y|sCKQ%q5#~O -z4Dh9czoe}EZHeL6_9cBulPnW&;u)(+udRJVjyeMnqgV5`6V1Qut8#m -z8-4~V_*az1?AMK)I$tfJU=&jUCYGyn>>REcr>(*s17s#PEs={NfJ}FU!Nen9rnKWM -z3u`*d07g?EVCQk$nq}Qm@k@ -z7y-Rt4wL7@ZNN53P6;d&Z2NZDKN;9I)b_F)EmN(1cXICJ+Mpqjozlv?P5hD8e$yiKv;ujheY0{gdSUr(I>IPtsICW2@#ae3h_lP&kMBe^;m% -zyZ*uS>BRSM4a1YM?>}!X*$CE*Fl>Gu;-+}`UI5=t!TXR~97mNSky}&X`iO~dM*Tc; -z+p+ddNNzpW!h-f@RkDSSgzz~PctBboi_d@ur1jzWjqrf9?xMg@`1~J?=PbmP;D_Ur -zuE!jP^QtsV&f#`VlXK|MRuuYpbfysS5V$^az&yHGQ#D^X@t;daCVS&ILMR?cjjy%9 -zE^sK=0M3^~{xNuiFPFdJ#K$cDF)Sv`+!-PCX~BikS=%Mt8Gkp>&nC@u7JU5iyQRj! -z@lOy8!WEBj0Uvzu9pGR$j#o!ISDdl-Y)~tfV_YIaxC*x`yRX)D5rhq6iNS4{&9L(w -zERQ)uR627nmu&&P;D*W9bxY0M#P=f8@clnX8SH7pf((NgZ-AI!rc#2=<|dUG6(@04 -zFaca~j0~jm;$v|Dgj^tr4-o$8aYDe{3kgg%1F^Fh!IrqW9^FB!KEgor&6Ocg)_fT~ -z`6K=igM`Z=G8|Id1kd%VR0O)NQ=SmigGxK1+(a;Jml3kTP4QpxEpo#b@`xFPe}NPh -z+#&aiVK8!dp8pPI!t>0eZ&$9p2wVK#c=+Z5unUtryA8f{$pM3C-T-RFqKYk}4%t;| -zd49N_Y+%WPIIDpN%Z#uZyZ;y-m(Us$LlTw5yg|E}x-L)WI8~!L%9UCFT7xrlMB!g2 -zM(Cqc5><#9E;Nr_UvUzPY@sk5k&#ws2ZZ8ip=)7|cywa|Bp%b?mgC*65MaxfRzQT% -z4r;oe7PZz>u?=7=&{GfZGR{||iZsuc6$>ID2vm+R_4i9H*njG&QWq<_Y}t4Uk>Ji& -z7>SQO=O9TV&kvAfkmp>A%}$SBbRHNPYU1Jf2#mtBAs@a4XUjzU{ -zzh@PP|Lf`ZUuXQHFufo8kiwf``+gL^=p5ueHn~5>FZuy;pP1Zd@r%wy?sJp-Qf9<+ -z-~g)?dy#P1X?Qc@vzEJdo^2zG9ZTo0J&Hqe*ZFV$QSB_#oUD`t>##;l8UP>o1aokk -z1V<^HgPi_EJy2G}&3oH%FK7pL$V=0=*~pf22+3LG&tKl(o>)OJl#d`8SXbNUey;FA;JlM~>R6T~ia5;VyWli*b> -z6apkr2*dJdnv7ntRjuo6)}TQHHG@k4R~}O3UjC0G#MFiOw1o6B_WyM+c*PI`GXavW -zpRk_-XRz4q_7~tyj35I0n*loa7Y@9X3QaQ&ryCHqsD4(FJ^x_jVsG(2r -zW%>c*-7O73(EmSN1y795Vi339m@vbJ0Yd9C9FsS!1(v|X5GX}XbI!0syE%fEK{iY9 -zeirnzYgl+gpBF`mr^&}U_-qd>4dl8eFR;L~I22?p%<9f&nz4WdpM@xzCP=5i4f5_m -z07rzKjX7hlW016eszBC+H~Yv -zGq4Qj&lp>WpxYc+VD)SkC8J^!D;aD}K<_yN+a7w)8ST(}u%`o6#(KeHT$2yS#}*># -zjL!(8Yj#sGWXcAx7-S=aq7|+z1Zs5+o^S}PL6x**u=Lo(yO#RrX~MmU04`I&xzff0 -zGc5&cyBINMV^`CWQa!RTO0mOk%C3}2_l7*!T|=XWfm(^^Z)k_SVs3}*Bl|Fzy)oL^ -ziMcFJqlW=Ys~U7A`mBOn@lm)+ZHRdHe&aSZ -z@hZ=N|L&3h@ca)5B?@o7-dh5h1B*7>5|NBv+R#h36PbpUcRS18wlnFkYPn@L>+G -ztf#eiNjp1$Md2|+SpX?iH<)A*61P{d1ji@#5kK$Fz+0-v0I%Rn;6pQ}av_F0H-J>7I+&zRaAM~O!{?@H|Kzm -zdgf9r*wuBIA9xmIBWBwRAkGnFnq6jo3ox<30km5~YF_WUJ2&!&fw*~K3P#^Z>RKfD -zFy%EU#7fs9aZ|7w2^5|hv#6`g`mOHk1p;#}$gMdq@Rh7sI}n0ldBuS8LO6(I1UdN$ -zd;!l_^9a8C$Rzazp!Vq*MbbdwJ88Vf;0?uhAG0myb$uZZ^6l8bx8gAie9QZm?-eL~ -zs4jrpqoeXE--`xvG2Dd@+y%bH7p@Oc-V;2@k% -z$0;4(f1i@WiQ?wz%6KahEWN*}Fa`gy?*bob$Hd0qXpv`RmVYet)`OHDl5pzu!Qcgt -zP`U|9OCN&V66DN4C(ENL>F`eC3ERgcaoNdPqahJEq|wyOkzl>_)A-PZ;~WiSn%_wb -zjOl-;J}^etGw}J?=)lAn?cO!U0LXXFZ2(O&ra!JTany&W6w`m0c*wCfQp=b39auON -z*2s#13c@xC^ZQF}Q$7}P);|%)r!lLC6yIv3#lOj?yVG$E0^e~jfwyo@&&k+h{7u%G -zTzFmllBean+&4`|Za(GhHn3bwiw?|JGmQ-J`3)i;65!J>(a|YDSrdLW0XaW{+tH6Z^8i^WZ@`Y(qSFkp6Q9V(wY+zS<8S{_-YSz(wtO^`i`EW~`&&S^qwyPK*63q=J -zplje`@;BYhRCmS82(M&JY_u@};P0nAm>Bt60JVAZVY9sXkPaJ`QNZ-MeC}DBfr4tT -zvMB$)_*urg?EQl*++#b;u;7ExbiBv7P@T0)3VlB9VsMcgb-VHzo`pTe-#AK#8&qfs -z>wpz|0%WrrD3FIuGjM-;^1Rt$p@J(O$5TsCV-7u>zzZSf4m_I6i!Ih^!|J -zY2aiTa>aXy7EL)geC8hPP2lqo6s&orJ$xzf%h7p{nsqQTPHNThU>d}FPFYs*Dn*$5Qm8-rUSa{Gt_NAaF -zFz`QviLnC0cu!&w8}w^R`zb;Jf!ei(xZ{mOP^e -z<)g}%r`mMh*5$WCRJCt_g!9y}|3yoRHiS6{L -zT*~0j;5y58IcafTk2>a}hB9YKJ5D${|Le!Il4R}~h(JNt*fKbW*PW*J`x5jB}Tv&%?Pou!FUEQqdcS;mE? -z7j}HEE*r-e-`AiJ@7rLBCo@Qxw1N6U@TK3A7ncy3vGi~+YTOlCKa@)u7lVItP23d$ -z*%;rw7mrJf8iO2fwQDMbd0f*x6TD{}!x@V#zos4h4F1+xaC|~zLA%<1<6WVmLdh~v -z#+8^Kn8%w6+=jWZ8|*%#RN;F|LIrs}H129%4t4BmUCXqKL#4bP3y-q%Y@7K#YHnwG -z`85|>8P`F^VOS`^AZPEhnBOw;?lrT89cS7N%@3lmS8iehWv~Ws;j2~5MroR1qZvzR -zr{v_n75I+h)Wh^%< -z&0=t+Zib5#;O5)FFBjnRaoLr32YhuvSE| -z*9>!fpK&LHd-buMx)S|C?_XTAM|8T|kR5z8a&9DoY~ -zL*m_zHImWGN1<>JP`-TbtUWL>oO50o1}THb0zTuyvW({dr;xBMVdV%Eu48Bk&HEuD -z8{>HogL#PNF;FD8^ti44RNQPS%rWeZVu4{l{H@FtBUzf-#iw -zk*NGg957-sK9ZR3jE`V3a64Ve%mdF$kHWW-3v<{3$NGk=SkU`XHU -zs7Wf(0J$oYu+7Ce{_hx`?UMhh`M+bj)+9BiW(`;Q7Aln_Y*WG3!wWB>JjFVY4=SE^lDHq24rs2)!^)zhp_xCURcojmR=rj5e+|hOZj8bTah&P>%1;E~10=^`Z#vyqS9wk2J -zT==-bpy9ij=V0e7xcZRjC^Y_O;4g=uL6|Ct+XiFFL?MXX`)l4~SHR?M%L6}y$20G< -zc;3@mctM@)&CHDkFTarQyk^#!X)crRyk^#kN`*vFUSs@cFq&TYZG8MjQ?stGunvW$ -z=IZ{|b>_+el+3Tn_idRLyCwtQkFHndkH$A(5y=&%%ocX#R<`3!rvnQr4?Tme{ZV}X -zQ?Q8s*fZzXGU?GLPB~>_S8pK1W#rmL#m< -z@+URvIfx -zxvN~9uvz8!hA2X3k%JzRRW9M2s8YUbIv28omUCchS;K@A9RfqjyQe4oYs3QJzl{*- -z2Pq4IOL@?Kp;>j-UV#nE8X1~9_`l0!#j-9FMKJ3uydwHGWsShe5BeM_mK*+S%NM`R -z;#~{lXP?#E01n|SJp9R{pG6Bh|8V)AF5{&1ipz8j3?mfsH)JrvohKiotg|H;G3#8j -z9OtM^6v7VYkKY~I4s{Eior{6$$-5)L5?BJ2tP=*0%D_BtHpUr`<&xp{!=DpiX8r^XSm1&3G9g -zjcKm4f2M1h+;G;D9~N4A@XPqw5+0<&TzH-o;%gpf9k^M4$R-KMA)%{Ewl$Zv5+ze$_O_H!1e+&VYK3aMt!N|(2Gb3v+{}bL>K%7T-E37)ni6!-4W-9k5YT8u>{0D3I5z1N*K(y!jpg8tF8K8BF^R3aJ)>BIhcl-J4n8=K -zWb~a_4t^6Tv2e9aSqIFH!&z3|8W=e6U7+w+$e}rMykd_aw~~z?(PnmIKN$ZRc%9EO -zRM#$C`0OW{0iN*P_^bo{?SQPO)xWX>viAKGUI#e)%cI0p_{bou!@%;o&Djm#ePsZr -zebwf|vi#{r=4Acx1ewE9ChJ{;vv&<$ziX)cUG0E9L37K -z@eaFPrZQhGlwJxY*Xm!Pl28+_z%`K-0U2Q>WoP1}0;!y{fsiT)%qn%oTejh}dOZ?| -z5R5R?3_BED@heXWyK?z5sLBR_*Z~}{UBS0;>oqj^SSN28fjYQZr$*2`M{Pzr9x5yj}it#pY;qeD~Qu -z)b%`27{X>_@*y6fE{h5_!y9NPo>r^afCu4bG0%ejf)iWSfCtm?aKYl% -z#$(x#e~~%p8Uyk3y)rCmSfBik84CF`5O$#+fw^bn^dHVKP&xa^md-U#DI#o@sRXm69zucz4BbRR*nPXs|B6 -z{sxW=KuuZqY;%J$8?Q! -zKBirXb-;MV&;$?*fd2|%6qZ6ZG7uRE)G*^YkPI1q=t-qJ4)S>XqIbbOieaD*15(gf -zpTUHrRQ9*bn{XYoh0#;5+Tp#6ywyFs70Yq>nk7mVFQAZt)lK_;u)hSi%PYJlXfyXjO+zVJz|6DW5K|m!ZTb0 -z%W<>xi4TCIPge(67eYFUg`0Mix%Re10a*(jdO~@5jhMXOi-(^83eq?RG8>45=28AW -zV0kg|l`rOe*}tI%b)L$Oni=gEc6jSP+|oKP)>nwVlC<<%YPj4&OQwdv(Gz|y!EtGRezd4D|rtYXw_d#P8vD -zL0`gl>cSqAhqG8=&90=@(lolY8pPnELc|)$%eh!vp@JB2R_Fj^y#MqD}21eDc2%Ih);!#);F;-q)X!ny@N_s9oM2 -zC6@n5*-mz0+v5m8dK(cFR*;$1H}cR$b`MBu9A%DCjj?3BA%%hTn@|1^=1|z3ZN99P -zecWuyRVG`t%U>L_WHz6sk2kj1y&o)k=V1_A#hX?9Gc6~zd -z*)PTPeK?0-zFICH-09`|%!OHw1>F_kVBqB{HxZQ0MhwQ2LJ76D!UHtwKz?E%42%Dy -zCL%uJ3hWM7Li^>!6y{@%fC8L)O`h*7*@Op_a3et8unF|FgTmU^K&FB{#-pRp0so2O -zndn9C2QXxQnjKibzq;a#2my$n%tfMP)9p~EV+*Ws1=mGzKIE5!dpZs4I29|INy+) -zvHyber3zFP6F0-TzpsV{=l^fi(7#I>JNuKyfaQ?0LDi0UB0T3((T{pEyggFLRM1CK -zcvc4+fvqfVz;_kwOLM(dGQ5XQXa_FUOu?T*6hI?e)<=W6$!1v9(r<*^RJ$7lNgY4d2RdRX<3xZm08{v`IzQ){QjBHZX=+U2kQk0iF&kx+-GiDFwq(A -z!_FVxQ_qD7AbJu&*iaAHh8(<_ky_E)ymi9-3%2VFe-ha#*Ziz%T!o)ZY7F -zeg9x!`LC~?9X4#x+K027jZWKd1Ztgd9qut;pkeVAC?Jv5b?phLzc*fgWHBuNd_1#o -z&w0Q=4Oe_Fem-!_UUKAVKrm=J8752tpLg%VLjCtce~?D(`z!k0LJpcECPrW<>m -zSaD+4cA9bkS*0mOAi<#$Lcpc`13q#ASw#ZGi5mwFq!m(;IKT}K5#smeW9@a)rj^*k -z{`}s&_vY<;Gqby6&zP=3-Oe!EOZ!OBa<`G+Nu*!Bg?ua)A=0u#kyJ4b_9J70I)MkX -z@Rc-r&eKB8e26`x!HPDwl1HLltnRQpwSQ~iV@6!Kbv*#Xd -zUOLzDlYVN@0gAP_@lk*8=>3$Av{#024ybIk`8|t1j`yRWPclYhxw3NA`mS9jm?O9M -zRMgRPbf&Rdu01gbg_pvi-wZVwN4~H_l>YnM<&X42a&}VwM>uWCMw>(SVg;A#ITP=) -z=ru7t44|eTy@sa$5z7#Kz%u9eIPZ^AEaqLicy#E;#@;&}*M}R}q4qEeV^2Qfg;gq~ -z5zkHqhzxzA<0(Zl#%Je-5mp+Zea0f8ExJF@o0LodJ*q@Po=bRPywpyIDD!GJ8eO9) -z*8kmt2mlkp)}Jg|#HjDSw{lbT@F-SnF0KR)-|V*1Uwlk|m+>dA9YM^@`reBvto<=m`z5WTZCZFO`vQO$ -zs?PzKft24<21hZPAAFeav)LY -zv5H7xk3dJ2YrbRbL`dKAqhCf -zJvMPe%3*sR9D;6qfuYK&g-{c9Ho8o -zBNCs#O1NKKbRKn{VqNV_^R*v$YEMVK_9W^N?J3fC|Mkkmp?xSnWdCT>;I}B=-MFOq -zvVT!KlGm^G$*Zp>=PwiP7YFFuWVgG1)Fb$$h4Qg@kZ2awNL(Bt2`n!2h+j`BInWr# -z*kDM}%tK~_A3dqc;jW;SsSy75S<-=Cg__oKj1I^tS|RKafAFNdkU`ZG20eR<-=Wun -zd^FHcYOF6nVPkApocB4MS$}@?FkfE!^qbUK_U6$SpP78(xnoji{KMThBF5LrfWf9y -z(<#eI@M?LzbfT6omiY>=l*=VvNmh6OK)4(c3x|rLmrCaOXLx$mt{(p>4#+IP?BYuWmW2sdhlt6q-09Sp!e2rGiV$m -zH3APV(mMz|GK@@&phW>UKwY4ti`+>&yy&>Y4*CPyVS$c1=|KI~K4;spn|4;9LTE0o -zz4m&3`?cct9{6=4`u0ucpBdi@ANdpBe=HOIUA%ZxGw{#$3XzTP+n4|LMtIF$zt}pM -z91tZi?|!-Bm3QvTz`MUndHa5O*ZlnZIOhDx7ws>ee)-k2TCq~z*(>juLH+H2_2n-f -z{n3|S-0{lZ`+-j@^yxNPmNjF|+P3Z3F*|P0Mx0n|W@ct~cD7V1l}r1jC#A1TFG{aU -zZ%V%@m-qJe_V-@w?>~P0_{rlJk6%50^W>W+FP^-5@#4jsSFgVR{`)uI|K`n`gF`+T -z@xg=-PL+Si{xSOlZXT%S2{+HVdBLqitJUShLp~hyQJarOeC+e_h)?j}DYsjZ_93^& -z+@5e}Xmv++_aXP%+?#OklzV5~Kj8j^`%@nDc<_LSJswVYc+R5-JUWex4|&|?ahE3} -zXYx>;j+dA&c~z0sW2>jwPgo(tIU%l*)rwl37- -z-cMM5%DOFcVK<`G#I^z;lU@I9Y(}pNZ?2yaDnNNZUj~ -z!FoM$<~Nlq!H;%ZhUteJRxb~cenBonD*GL>2{Z+IJx -zjb|G#H@@5WVdL$_kGu8V#_q3nU+#Xl`?lJ^-y{4zd-U?rcaPqF{_D?Qe*X5`m*0N( -z?c3L{U;ps>?du=^{D-%1VV`Y|a8_k=b~bm#Q(0GK^PIDCD-|oZiqF+;l`E=T1?h83 -z%Dt)FE#-R3t*H4j=T*L<3Kd@9MP9O2N)?4^Yxr8LaEU#x9C|c8py?@L;dF-BI4tDh -zS6JT}6Re4Ty=-qZ>_^|(uYa_+y>0J~SGlv}6}Kz39k1ryC0jLe)TqGYn<=_^gKWE+ -zquL79Z_p9A)^3^_t8{_^tL{?0M0Md-Q&e9RnJ7nQ4zrgM{X)U=dkXps^i@D|xo=x8ld -z6*@Mkb(>lUI0^@#!_zuCYdRldYp_fWEjQRCj_)UFKTm@KZ7)%EnFd7~T%*Bt$=U#l -z`S}t8cs?)GqEK#-?Z9Elwhc4;+6+>wE8#CweVu%h^97yrcUeWwrlH{fq(s$MbOfrp -zAo+}{rz=6mo-WW+R75qh)DTC!EO|MqU!l5G$D1P$nw8`N#uXeBm!kVQx>%;+HM+P( -zXLso9ZRDntqF)xsU!u-3{c@eYz9|S;04k>LPbjTRz!U00wkWGX$1Rj(KznvGK=`w(AFU(poMe_I -zHM}b;N|pl;KcLhQcom!vQ=~_FB7^l3<(>zs^-cqH!3!A`Wbi<=4nSGeHCYoa=-6!&G -z+Ml6X93j_8`Hre#AaWbmCyVMa+MA&=#&BXQ<|1RufK)50I&swsltgg#safR5s5V1; -zqUVg%H;y`k9&14KO@s#EMvh1gqiPse!&!AAHflsIi-s|3%}`xzG;rQA&Qu#G8K@In -z?t}-VVcEshR#I(cpc5Co-3XOuWieW+oKe`5mD);SXpg87rQL+o*~T3M=j8uF{aQ>J -zqdUE~OdvTDqzD!f%?c -zFgSDm69-RcNQ9$@{soFp$A|*-=lJ~037nEU?o&i+W1ff4zv7Pj7x?}wC>UX|xd4F~ -zqC=eNe+jt+zW)(2fA(AO!@nnn!1q64%={&w2UjAh;PZd+C%*p{e&XcSG1{;*oe+Hj -z{-4G`pCKmD|A5aQL-?=Z|FvHbt{^!OPbeF^y!>~%_7%>-4s4i&KiowevDh$Ay}OwO(7C*ZUxnvP^Ky@w$!(0oGhyd?bOX~*$-TV*2;kn~-Y(n$ -z@sOPL=v5F?qwpfM=N1m0Dlb%YaeEt74v`j(`9p-GZ5@t7TX^$@!XXan -zNHQi-;4K&o9l^ufNd$N#9tt*&3=)pun9lqWGzYVQa1FL&L8b^F1DSdV&&qHJ6%=gH -zvG^>7JC;(yC>@8T%p6N8^^gJNvBBZ7Dcmt|7|0CG^iKm$=Ggdyhiqtc9M{UP(hp~yz}6?p-v`HN#``$Xd;*0si%tL%9Vy<; -z!B88K%9cWSMmzUX2b5`>GT~Jn$^ekMrfm~fdq8?w729EYGi?)BTPi3xY?}(=X&&kc -zD_F!!J>cMB=ae!ymhrqxCuDu$k(Z8WVu#WtP3%&7K@)c=y{w5nO0Q_*9;L5nqDtwT -znz&ESN(RS4CoEj11E0&OI%PU=m9eUdIH}S%=5XHP&6Ey=hgSMV=9X}#nOGLt=pImh -zZZQL*N%`_3QrAVIcA_}lyE;E5Ds~MLx1nUP&sU0R_`7gg5VI~o{4!n;#)yl53N=M;;@L?PDKMsl5~2lVPKw+Hmfc3SLV -zp=lGnaDfoIAUe;~>r!qr547}9oy~b{GQF@m)H6jvza%J1&wvE&laM1@imW(vQ$h}K -z7)xLNF4Kn_iTMN-(PeQW^H}(OxS>}{U$#M+)i;RhV-d-An(3SUuzwPww{P~Az8qV! -zD*GmNeWXs7L$QwvZp*>ZABOvUUr;BjvL9le`VyC{%D#yUy`RA6zKN@kaN^N86e8g| -zb$#Sn5Kib41*c5^JU}@0k?>41MVSF24G0NPJRBH|4G`Du1kS+$;#x{AkvBjI^rkm3 -zr!bmNfg1x^GLjbbqC(D)ax;0{9R?DG)(lruz;k8*>-vy-AlZ;v!vo4uegOomYZF6r -z$_!y$0pTi@6P{kA=iZ&r#r7IwivF+4-@JvnDKf!p6G -z-1NM$hI)~TV?bS>4r7!+18FSVm+UrUgE92;0?p%N%5CMhG0R|VYz_`I{6d*d82i}3 -z4~@WZ$l!2n5;d01TuLxT6oDJ2USmm=6mAS?X{?UTMQD6(OrVrn2EAH+3Cv6kkS4NH -zWctLEa$@$Di7DkIyzOKrT{AuO(3=z}XRn*Qkgax?{ZRWaj -z9h@_ojm_YWJ$*>|Yl~|jrWBXEUvUb|YXD3yC?#nro>$;Ah|D=K9}wuJ2L$2|2;AEO -z0;fno+%p7{pkaI-E;Kq1(LxuMu*w(PhS)L0t|9IkV$Trw3{f@2eM5vLC|>l#o$bP` -zueiFj=5h-ws}(}ukB^qQw$4WtPSK?*tc7o -z?*>|>;ctbeA-W_yBkkoJbmuhbqCbcrW`mek;R#xFVN9)(IFk&9u7*Q{Wp1og7JZ2msVtG~?kb;+9x -ztp#`OUEFcJ@qaG=MKMuAWF@|WDf3bwbn>`W;VW=-6~7fadE#gUt@A<_X;71_WWou4 -zyTNalV`%PU+=V(Vk>@C1+No?R=U#C=Lf?VKCtDxR%Og@ZPih|( -zFL4IJy6%d&>hjYP+fv~yv}VKNYq)91%=4v%sIIS;Aw18MvXl^(P7TtAdj?DNk!nQno57TU)@o -zAhg^VxC3)Vm@6T3g=;0=50orJ$;1Qv@kXcT=okFA{=H-mJ(v`yt(6-U{11b_`CFp@ -E0+l`kC;$Ke - -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1_bin.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c -similarity index 99% -rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1_bin.c -rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c -index e48960d5a6..ddaf0f7188 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1_bin.c -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_bin.c -@@ -25489,5 +25489,5 @@ const unsigned char wifi_firmware_image_data[421098] = { - 49, 45, 53, 97, 102, 99, 56, 99, 49, 101, 0, 254, 0, 68, 86, 73, 68, - 32, 48, 49, 45, 101, 100, 48, 100, 55, 97, 53, 54 - }; --//const resource_hnd_t wifi_firmware_image = { RESOURCE_IN_MEMORY, 421098, {.mem = { (const char *) wifi_firmware_image_data }}}; --const resource_hnd_t wifi_firmware_image = { RESOURCE_IN_FILESYSTEM, 421098, {.fs = { 0, "/wlan/4343WA1.BIN" }}}; -+resource_hnd_t wifi_firmware_image = { RESOURCE_IN_EXTERNAL_STORAGE, 421098, {.fs = { 0, "/wlan/4343WA1.BIN" }}}; -+ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1_clm_blob.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c -similarity index 100% -rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/4343WA1_clm_blob.c -rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/4343WA1_clm_blob.c -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/resources.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h -similarity index 81% -rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/resources.h -rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h -index caa02d34d6..01bad9226f 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W/resources.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/firmware/COMPONENT_4343W_FS/resources.h -@@ -18,14 +18,13 @@ - #ifndef INCLUDED_RESOURCES_H_ - #define INCLUDED_RESOURCES_H_ - #include "wiced_resource.h" -+#include "wiced_filesystem.h" -+ -+extern wiced_filesystem_t resource_fs_handle; - - extern const resource_hnd_t wifi_firmware_image; - extern const unsigned char wifi_firmware_image_data[421098]; - extern const resource_hnd_t wifi_firmware_clm_blob; - extern const unsigned char wifi_firmware_clm_blob_image_data[7222]; --extern const resource_hnd_t wifi_mfg_firmware_image; --extern const unsigned char wifi_mfg_firmware_image_data[391693]; --extern const resource_hnd_t wifi_mfg_firmware_clm_blob; --extern const unsigned char wifi_mfg_firmware_clm_blob_image_data[7222]; - - #endif /* ifndef INCLUDED_RESOURCES_H_ */ -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/nvram/TARGET_STM32H747xI/wifi_nvram_image.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h -similarity index 100% -rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/nvram/TARGET_STM32H747xI/wifi_nvram_image.h -rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/nvram/wifi_nvram_image.h -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/whd_resources.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/whd_resources.c -deleted file mode 100644 -index 8f703bb779..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/whd_resources.c -+++ /dev/null -@@ -1,292 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Defines WHD resource functions for BCM943340WCD1 platform -- */ --#include "resources.h" --#include "wifi_nvram_image.h" --#include "whd_resource_api.h" --#include "whd_debug.h" --#include "whd.h" -- --/****************************************************** --* Macros --******************************************************/ --#define BLOCK_BUFFER_SIZE (1024) -- --/****************************************************** --* Constants --******************************************************/ -- --#if defined(WHD_DYNAMIC_NVRAM) --#define NVRAM_SIZE dynamic_nvram_size --#define NVRAM_IMAGE_VARIABLE dynamic_nvram_image --#else --#define NVRAM_SIZE sizeof(wifi_nvram_image) --#define NVRAM_IMAGE_VARIABLE wifi_nvram_image --#endif -- --/****************************************************** --* Enumerations --******************************************************/ -- --/****************************************************** --* Type Definitions --******************************************************/ -- --/****************************************************** --* Structures --******************************************************/ -- --/****************************************************** --* Static Function Declarations --******************************************************/ --uint32_t host_platform_resource_size(whd_driver_t whd_drv, whd_resource_type_t resource, uint32_t *size_out); --uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type, -- uint32_t blockno, const uint8_t **data, uint32_t *size_out); --uint32_t host_get_resource_no_of_blocks(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *block_count); --uint32_t host_get_resource_block_size(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *size_out); --resource_result_t resource_read(const resource_hnd_t *resource, uint32_t offset, uint32_t maxsize, uint32_t *size, -- void *buffer); -- --/****************************************************** --* Variable Definitions --******************************************************/ -- --extern const resource_hnd_t wifi_firmware_image; --extern const resource_hnd_t wifi_firmware_clm_blob; --unsigned char r_buffer[BLOCK_BUFFER_SIZE]; -- --#if defined(WHD_DYNAMIC_NVRAM) --uint32_t dynamic_nvram_size = sizeof(wifi_nvram_image); --void *dynamic_nvram_image = &wifi_nvram_image; --#endif -- --/****************************************************** --* Function Definitions --******************************************************/ -- --resource_result_t resource_read(const resource_hnd_t *resource, uint32_t offset, uint32_t maxsize, uint32_t *size, -- void *buffer) --{ -- if (offset > resource->size) -- { -- return RESOURCE_OFFSET_TOO_BIG; -- } -- -- *size = MIN(maxsize, resource->size - offset); -- -- if (resource->location == RESOURCE_IN_MEMORY) -- { -- memcpy(buffer, &resource->val.mem.data[offset], *size); -- } --#ifdef USES_RESOURCES_IN_EXTERNAL_STORAGE -- else if (resource->location == RESOURCE_IN_EXTERNAL_STORAGE) -- { -- return platform_read_external_resource(resource, offset, maxsize, size, buffer); -- } --#endif --#ifdef USES_RESOURCE_GENERIC_FILESYSTEM -- else -- { -- int file_handle = -1; -- if (WHD_SUCCESS != -- wiced_filesystem_file_open (&file_handle, resource->val.fs.filename) ) -- { -- return WHD_BADARG; -- } -- if (WHD_SUCCESS != wiced_filesystem_file_seek (&file_handle, (offset + resource->val.fs.offset)) ) -- { -- wiced_filesystem_file_close (&file_handle); -- return WHD_BADARG; -- } -- if (WHD_SUCCESS != wiced_filesystem_file_read (&file_handle, buffer, *size, &size) ) -- { -- wiced_filesystem_file_close (&file_handle); -- return WHD_BADARG; -- } -- wiced_filesystem_file_close (&file_handle); -- } --#else --#ifdef USES_RESOURCE_FILESYSTEM -- else -- { -- wicedfs_file_t file_hnd; -- -- if (0 != wicedfs_fopen(&resource_fs_handle, &file_hnd, resource->val.fs.filename) ) -- { -- return RESOURCE_FILE_OPEN_FAIL; -- } -- -- if (0 != wicedfs_fseek(&file_hnd, (long)(offset + resource->val.fs.offset), SEEK_SET) ) -- { -- wicedfs_fclose(&file_hnd); -- return RESOURCE_FILE_SEEK_FAIL; -- } -- -- if (*size != wicedfs_fread(buffer, 1, *size, &file_hnd) ) -- { -- wicedfs_fclose(&file_hnd); -- return RESOURCE_FILE_READ_FAIL; -- } -- -- wicedfs_fclose(&file_hnd); -- } --#endif /* ifdef USES_RESOURCE_FILESYSTEM */ --#endif /* USES_RESOURCE_GENERIC_FILESYSTEM */ -- return RESOURCE_SUCCESS; --} -- --uint32_t host_platform_resource_size(whd_driver_t whd_drv, whd_resource_type_t resource, uint32_t *size_out) --{ -- if (resource == WHD_RESOURCE_WLAN_FIRMWARE) -- { --#ifdef NO_WIFI_FIRMWARE -- whd_assert("Request firmware in a no wifi firmware application", 0 == 1); -- *size_out = 0; --#else --#ifdef WIFI_FIRMWARE_IN_MULTI_APP -- wiced_app_t wifi_app; -- -- *size_out = 0; -- if (wiced_waf_app_open(DCT_WIFI_FIRMWARE_INDEX, &wifi_app) != WICED_SUCCESS) -- { -- return ( whd_result_t )RESOURCE_UNSUPPORTED; -- } -- wiced_waf_app_get_size(&wifi_app, size_out); --#else -- *size_out = (uint32_t)resource_get_size(&wifi_firmware_image); --#endif --#endif -- -- } -- else if (resource == WHD_RESOURCE_WLAN_NVRAM) -- { -- *size_out = NVRAM_SIZE; -- } -- else -- { -- *size_out = (uint32_t)resource_get_size(&wifi_firmware_clm_blob); -- } -- return WHD_SUCCESS; --} -- --uint32_t host_get_resource_block(whd_driver_t whd_drv, whd_resource_type_t type, -- uint32_t blockno, const uint8_t **data, uint32_t *size_out) --{ -- uint32_t resource_size; -- uint32_t block_size; -- uint32_t block_count; -- uint32_t read_pos; -- uint32_t result; -- -- host_platform_resource_size(whd_drv, type, &resource_size); -- host_get_resource_block_size(whd_drv, type, &block_size); -- host_get_resource_no_of_blocks(whd_drv, type, &block_count); -- memset(r_buffer, 0, block_size); -- read_pos = blockno * block_size; -- -- if (blockno >= block_count) -- { -- return WHD_BADARG; -- } -- -- if (type == WHD_RESOURCE_WLAN_FIRMWARE) -- { -- result = resource_read( (const resource_hnd_t *)&wifi_firmware_image, read_pos, block_size, size_out, -- r_buffer ); -- if (result != WHD_SUCCESS) -- { -- return result; -- } -- *data = (uint8_t *)&r_buffer; -- /* -- * In case of local buffer read use the following code -- * -- * *size_out = MIN(BLOCK_BUFFER_SIZE, resource_size - transfer_progress); -- * *data = (uint8_t *)wifi_firmware_image_data; -- * -- * For sending the entire buffer in single block set size out as following -- * *size_out = (uint32_t)resource_get_size(&wifi_firmware_image); -- */ -- } -- else if (type == WHD_RESOURCE_WLAN_NVRAM) -- { -- if (NVRAM_SIZE - read_pos > block_size) -- { -- *size_out = block_size; -- } -- else -- { -- *size_out = NVRAM_SIZE - read_pos; -- } -- *data = ( (uint8_t *)NVRAM_IMAGE_VARIABLE ) + read_pos; -- } -- else -- { -- result = resource_read( (const resource_hnd_t *)&wifi_firmware_clm_blob, read_pos, block_size, -- size_out, -- r_buffer ); -- if (result != WHD_SUCCESS) -- { -- return result; -- } -- *data = (uint8_t *)&r_buffer; -- /* -- * In case of local buffer read use the following code -- * -- * *size_out = MIN(BLOCK_BUFFER_SIZE, resource_size - transfer_progress); -- * *data = (uint8_t *)wifi_firmware_clm_blob_image_data; -- * -- * For sending the entire buffer in single block set size out as following -- * *size_out = sizeof(wifi_firmware_clm_blob_image_data); -- */ -- -- } -- -- return WHD_SUCCESS; --} -- --uint32_t host_get_resource_block_size(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *size_out) --{ -- *size_out = BLOCK_BUFFER_SIZE; -- return WHD_SUCCESS; --} -- --uint32_t host_get_resource_no_of_blocks(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *block_count) --{ -- uint32_t resource_size; -- uint32_t block_size; -- -- host_platform_resource_size(whd_drv, type, &resource_size); -- host_get_resource_block_size(whd_drv, type, &block_size); -- *block_count = resource_size / block_size; -- if (resource_size % block_size) -- *block_count += 1; -- -- return WHD_SUCCESS; --} -- --whd_resource_source_t resource_ops = --{ -- .whd_resource_size = host_platform_resource_size, -- .whd_get_resource_block_size = host_get_resource_block_size, -- .whd_get_resource_no_of_blocks = host_get_resource_no_of_blocks, -- .whd_get_resource_block = host_get_resource_block --}; -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/wiced_resource.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/wiced_resource.h -deleted file mode 100644 -index 0a1cccd870..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/resources/resource_imp/wiced_resource.h -+++ /dev/null -@@ -1,228 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * WICED Resource API's -- * The Resource Management functions reads resource from a resource location -- * and returns the number of bytes from an offset in an caller filled buffer. -- * -- * Functions to get the resource size and resource data -- * -- * The Resource could be one of the three locations -- * -- * - Wiced Filesystem (File System) -- * - Internal Memory (Embedded Flash memory) -- * - External Storage ( External Flash connected via SPI interface) -- * -- */ -- --#ifndef INCLUDED_RESOURCE_H_ --#define INCLUDED_RESOURCE_H_ -- --#include -- --#ifdef __cplusplus --extern "C" { --#endif -- -- --/****************************************************** --* Macros --******************************************************/ --#ifndef MIN --#define MIN(x, y) ( (x) < (y) ? (x) : (y) ) --#endif /* ifndef MIN */ -- --/* Suppress unused parameter warning */ --#ifndef UNUSED_PARAMETER --#define UNUSED_PARAMETER(x) ( (void)(x) ) --#endif -- --#ifndef RESULT_ENUM --#define RESULT_ENUM(prefix, name, value) prefix ## name = (value) --#endif /* ifndef RESULT_ENUM */ -- --#if defined(CY_SECTION) --#define CY_SECTION_WHD CY_SECTION --#else --#if !defined(CY_SECTION_WHD) --#if defined(__ARMCC_VERSION) --#define CY_SECTION_WHD(name) __attribute__ ( (section(name) ) ) --#elif defined (__GNUC__) --#if defined (__clang__) --#define CY_SECTION_WHD(name) __attribute__ ( (section("__DATA, "name) ) ) --#else --#define CY_SECTION_WHD(name) __attribute__ ( (section(name) ) ) --#endif --#elif defined (__ICCARM__) --#define CY_SECTION_WHD(name) CY_PRAGMA(location = name) --#else --#error "An unsupported toolchain" --#endif /* (__ARMCC_VERSION) */ --#endif /* !defined(CY_SECTION_WHD) */ --#endif /* defined(CY_SECTION) */ -- --/* These Enum result values are for Resource errors -- * Values: 4000 - 4999 -- */ --#define RESOURCE_RESULT_LIST(prefix) \ -- RESULT_ENUM(prefix, SUCCESS, 0), /**< Success */ \ -- RESULT_ENUM(prefix, UNSUPPORTED, 7), /**< Unsupported function */ \ -- RESULT_ENUM(prefix, OFFSET_TOO_BIG, 4001), /**< Offset past end of resource */ \ -- RESULT_ENUM(prefix, FILE_OPEN_FAIL, 4002), /**< Failed to open resource file */ \ -- RESULT_ENUM(prefix, FILE_SEEK_FAIL, 4003), /**< Failed to seek to requested offset in resource file */ \ -- RESULT_ENUM(prefix, FILE_READ_FAIL, 4004), /**< Failed to read resource file */ -- --#define resource_get_size(resource) ( (resource)->size ) -- --/****************************************************** --* Constants --******************************************************/ -- --#define RESOURCE_ENUM_OFFSET (1300) -- --/****************************************************** --* Enumerations --******************************************************/ -- --/** -- * Result type for WICED Resource function -- */ --typedef enum --{ -- RESOURCE_RESULT_LIST(RESOURCE_) --} resource_result_t; -- --/****************************************************** --* Type Definitions --******************************************************/ -- --typedef const void *resource_data_t; --typedef unsigned long resource_size_t; -- --/****************************************************** --* Structures --******************************************************/ -- --/** -- * Memory handle -- */ --typedef struct --{ -- const char *data; /**< resource data */ --} memory_resource_handle_t; -- --/** -- * Filesystem handle -- */ --typedef struct --{ -- unsigned long offset; /**< Offset to the start of the resource */ -- const char *filename; /**< name of the resource */ --} filesystem_resource_handle_t; -- -- --typedef enum --{ -- RESOURCE_IN_MEMORY, /**< resource location in memory */ -- RESOURCE_IN_FILESYSTEM, /**< resource location in filesystem */ -- RESOURCE_IN_EXTERNAL_STORAGE /**< resource location in external storage */ --} resource_location_t; -- --/** -- * Resource handle structure -- */ --typedef struct --{ -- resource_location_t location; /**< resource location */ -- unsigned long size; /**< resource size */ -- union -- { -- filesystem_resource_handle_t fs; /** < filesystem resource handle */ -- memory_resource_handle_t mem; /** < memory resource handle */ -- void *external_storage_context; /** < external storage context */ -- } val; --} resource_hnd_t; -- --/****************************************************** --* Global Variables --******************************************************/ -- --/****************************************************** --* Function Declarations --******************************************************/ -- --/*****************************************************************************/ --/** @addtogroup resourceapi Wiced Resource Management API's -- * @ingroup framework -- * -- * WCIED Resource Management API's has functions to get the -- * resource size and reads resource data from a resource -- * location and returns the number of bytes in an caller -- * filled buffer -- * -- * The Resource could be one of the three locations -- * -- * - Wiced Filesystem ( File System) -- * - Internal Memory (Embedded Flash memory) -- * - External Storage ( External Flash connected via SPI interface ) -- * -- * @{ -- */ --/*****************************************************************************/ -- --/** Read resource using the handle specified -- * -- * @param[in] resource : handle of the resource to read -- * @param[in] offset : offset from the beginning of the resource block -- * @param[in] maxsize : size of the buffer -- * @param[out] size : size of the data successfully read -- * @param[in] buffer : pointer to a buffer to contain the read data -- * -- * @return @ref resource_result_t -- */ --extern resource_result_t resource_read(const resource_hnd_t *resource, uint32_t offset, uint32_t maxsize, -- uint32_t *size, void *buffer); -- --/** Retrieve a read only resource buffer using the handle specified -- * -- * @param[in] resource : handle of the resource to read -- * @param[in] offset : offset from the beginning of the resource block -- * @param[in] maxsize : size of the buffer -- * @param[out] size : size of the data successfully read -- * @param[out] buffer : pointer to a buffer pointer to point to the resource data -- * -- * @return @ref resource_result_t -- */ --extern resource_result_t resource_get_readonly_buffer(const resource_hnd_t *resource, uint32_t offset, uint32_t maxsize, -- uint32_t *size_out, const void **buffer); -- --/** Free a read only resource buffer using the handle specified -- * -- * @param[in] resource : handle of the resource to read -- * @param[in] buffer : pointer to a buffer set using resource_get_readonly_buffer -- * -- * @return @ref resource_result_t -- */ --extern resource_result_t resource_free_readonly_buffer(const resource_hnd_t *handle, const void *buffer); --/* @} */ --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_RESOURCE_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.c -deleted file mode 100644 -index 9f43714289..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.c -+++ /dev/null -@@ -1,145 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * -- */ -- --#include "whd_bus.h" --#include "whd_int.h" -- --whd_result_t whd_bus_init(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_init_fptr(whd_driver); --} -- --whd_result_t whd_bus_deinit(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_deinit_fptr(whd_driver); --} -- --whd_bool_t whd_bus_wake_interrupt_present(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_wake_interrupt_present_fptr(whd_driver); --} -- --whd_result_t whd_bus_send_buffer(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- return whd_driver->bus_if->whd_bus_send_buffer_fptr(whd_driver, buffer); --} -- --uint32_t whd_bus_packet_available_to_read(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_packet_available_to_read_fptr(whd_driver); --} -- --whd_result_t whd_bus_read_frame(whd_driver_t whd_driver, whd_buffer_t *buffer) --{ -- return whd_driver->bus_if->whd_bus_read_frame_fptr(whd_driver, buffer); --} -- --whd_result_t whd_bus_write_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint32_t value) --{ -- return whd_driver->bus_if->whd_bus_write_backplane_value_fptr(whd_driver, address, register_length, value); --} -- --whd_result_t whd_bus_read_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint8_t *value) --{ -- return whd_driver->bus_if->whd_bus_read_backplane_value_fptr(whd_driver, address, register_length, value); --} -- --whd_result_t whd_bus_read_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint8_t *value) --{ -- return whd_driver->bus_if->whd_bus_read_register_value_fptr(whd_driver, function, address, value_length, value); --} -- --whd_result_t whd_bus_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint32_t value) --{ -- return whd_driver->bus_if->whd_bus_write_register_value_fptr(whd_driver, function, address, value_length, value); --} -- --whd_result_t whd_bus_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t size, -- whd_transfer_bytes_packet_t *data) --{ -- return whd_driver->bus_if->whd_bus_transfer_bytes_fptr(whd_driver, direction, function, address, size, data); --} -- --whd_result_t whd_bus_poke_wlan(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_poke_wlan_fptr(whd_driver); --} -- --whd_result_t whd_bus_wakeup(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_wakeup_fptr(whd_driver); --} -- --whd_result_t whd_bus_sleep(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_sleep_fptr(whd_driver); --} -- --whd_result_t whd_bus_wait_for_wlan_event(whd_driver_t whd_driver, cy_semaphore_t *transceive_semaphore) --{ -- return whd_driver->bus_if->whd_bus_wait_for_wlan_event_fptr(whd_driver, transceive_semaphore); --} -- --whd_bool_t whd_bus_use_status_report_scheme(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_use_status_report_scheme_fptr(whd_driver); --} -- --uint8_t whd_bus_backplane_read_padd_size(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_backplane_read_padd_size_fptr(whd_driver); --} -- --uint32_t whd_bus_get_max_transfer_size(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_get_max_transfer_size_fptr(whd_driver); --} -- --void whd_bus_init_stats(whd_driver_t whd_driver) --{ -- whd_driver->bus_if->whd_bus_init_stats_fptr(whd_driver); --} -- --whd_result_t whd_bus_print_stats(whd_driver_t whd_driver, whd_bool_t reset_after_print) --{ -- return whd_driver->bus_if->whd_bus_print_stats_fptr(whd_driver, reset_after_print); --} -- --whd_result_t whd_bus_reinit_stats(whd_driver_t whd_driver, whd_bool_t wake_from_firmware) --{ -- return whd_driver->bus_if->whd_bus_reinit_stats_fptr(whd_driver, wake_from_firmware); --} -- --whd_result_t whd_bus_irq_register(whd_driver_t whd_driver) --{ -- return whd_driver->bus_if->whd_bus_irq_register_fptr(whd_driver); --} -- --whd_result_t whd_bus_irq_enable(whd_driver_t whd_driver, whd_bool_t enable) --{ -- return whd_driver->bus_if->whd_bus_irq_enable_fptr(whd_driver, enable); --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.h -deleted file mode 100644 -index 2b63970425..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus.h -+++ /dev/null -@@ -1,123 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * -- */ -- --#include "whd_bus_protocol_interface.h" -- --#ifndef INCLUDED_WHD_BUS_H_ --#define INCLUDED_WHD_BUS_H_ -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --#if 0 --typedef struct whd_bus_if *whd_bus_if_t; -- --typedef whd_result_t (*whd_bus_transfer_t)(whd_bus_if_t *bus_if, whd_bus_transfer_direction_t dir, -- uint8_t *data, uint16_t data_size, void *arg1, void *arg2, void *arg3, -- void *arg4); --#endif -- --typedef whd_result_t (*whd_bus_init_t)(whd_driver_t whd_driver); --typedef whd_result_t (*whd_bus_deinit_t)(whd_driver_t whd_driver); -- --typedef whd_result_t (*whd_bus_ack_interrupt_t)(whd_driver_t whd_driver, uint32_t intstatus); --typedef whd_bool_t (*whd_bus_wake_interrupt_present_t)(whd_driver_t whd_driver); --typedef uint32_t (*whd_bus_packet_available_to_read_t)(whd_driver_t whd_driver); --typedef whd_result_t (*whd_bus_read_frame_t)(whd_driver_t whd_driver, whd_buffer_t *buffer); -- --typedef whd_result_t (*whd_bus_write_backplane_value_t)(whd_driver_t whd_driver, uint32_t address, -- uint8_t register_length, uint32_t value); --typedef whd_result_t (*whd_bus_read_backplane_value_t)(whd_driver_t whd_driver, uint32_t address, -- uint8_t register_length, uint8_t *value); -- --typedef whd_result_t (*whd_bus_write_register_value_t)(whd_driver_t whd_driver, whd_bus_function_t function, -- uint32_t address, uint8_t value_length, uint32_t value); --typedef whd_result_t (*whd_bus_read_register_value_t)(whd_driver_t whd_driver, whd_bus_function_t function, -- uint32_t address, uint8_t value_length, uint8_t *value); -- --typedef whd_result_t (*whd_bus_transfer_bytes_t)(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t size, -- whd_transfer_bytes_packet_t *data); -- --typedef whd_result_t (*whd_bus_poke_wlan_t)(whd_driver_t whd_driver); -- --typedef whd_result_t (*whd_bus_wakeup_t)(whd_driver_t whd_driver); --typedef whd_result_t (*whd_bus_sleep_t)(whd_driver_t whd_driver); --typedef uint8_t (*whd_bus_backplane_read_padd_size_t)(whd_driver_t whd_driver); --typedef whd_result_t (*whd_bus_send_buffer_t)(whd_driver_t whd_driver, whd_buffer_t buffer); --typedef whd_result_t (*whd_bus_wait_for_wlan_event_t)(whd_driver_t whd_driver, -- cy_semaphore_t *transceive_semaphore); --typedef whd_bool_t (*whd_bus_use_status_report_scheme_t)(whd_driver_t whd_driver); --typedef uint32_t (*whd_bus_get_max_transfer_size_t)(whd_driver_t whd_driver); -- --typedef void (*whd_bus_init_stats_t)(whd_driver_t whd_driver); --typedef whd_result_t (*whd_bus_print_stats_t)(whd_driver_t whd_driver, whd_bool_t reset_after_print); --typedef whd_result_t (*whd_bus_reinit_stats_t)(whd_driver_t whd_driver, whd_bool_t wake_from_firmware); --typedef whd_result_t (*whd_bus_irq_register_t)(whd_driver_t whd_driver); --typedef whd_result_t (*whd_bus_irq_enable_t)(whd_driver_t whd_driver, whd_bool_t enable); -- --typedef struct whd_bus_info --{ -- whd_bus_init_t whd_bus_init_fptr; -- whd_bus_deinit_t whd_bus_deinit_fptr; -- -- whd_bus_ack_interrupt_t whd_bus_ack_interrupt_fptr; -- whd_bus_send_buffer_t whd_bus_send_buffer_fptr; -- -- whd_bus_wake_interrupt_present_t whd_bus_wake_interrupt_present_fptr; -- whd_bus_packet_available_to_read_t whd_bus_packet_available_to_read_fptr; -- whd_bus_read_frame_t whd_bus_read_frame_fptr; -- -- whd_bus_write_backplane_value_t whd_bus_write_backplane_value_fptr; -- whd_bus_read_backplane_value_t whd_bus_read_backplane_value_fptr; -- -- whd_bus_write_register_value_t whd_bus_write_register_value_fptr; -- whd_bus_read_register_value_t whd_bus_read_register_value_fptr; -- -- whd_bus_transfer_bytes_t whd_bus_transfer_bytes_fptr; -- -- whd_bus_poke_wlan_t whd_bus_poke_wlan_fptr; -- -- whd_bus_wakeup_t whd_bus_wakeup_fptr; -- whd_bus_sleep_t whd_bus_sleep_fptr; -- -- whd_bus_backplane_read_padd_size_t whd_bus_backplane_read_padd_size_fptr; -- -- whd_bus_wait_for_wlan_event_t whd_bus_wait_for_wlan_event_fptr; -- whd_bus_use_status_report_scheme_t whd_bus_use_status_report_scheme_fptr; -- -- whd_bus_get_max_transfer_size_t whd_bus_get_max_transfer_size_fptr; -- -- whd_bus_init_stats_t whd_bus_init_stats_fptr; -- whd_bus_print_stats_t whd_bus_print_stats_fptr; -- whd_bus_reinit_stats_t whd_bus_reinit_stats_fptr; -- whd_bus_irq_register_t whd_bus_irq_register_fptr; -- whd_bus_irq_enable_t whd_bus_irq_enable_fptr; --} whd_bus_info_t; -- -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_BUS_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.c -deleted file mode 100644 -index 98d155b846..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.c -+++ /dev/null -@@ -1,517 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * -- */ --#include --#include "cyabs_rtos.h" -- --#include "whd_bus_common.h" --#include "whd_chip_reg.h" --#include "whd_sdio.h" --#include "whd_chip_constants.h" --#include "whd_int.h" --#include "whd_chip.h" --#include "whd_bus_protocol_interface.h" --#include "whd_debug.h" --#include "whd_buffer_api.h" --#include "whd_resource_if.h" --#include "whd_resource_api.h" --#include "whd_types_int.h" -- -- --/****************************************************** --* Macros --******************************************************/ --#define WHD_SAVE_INTERRUPTS(flags) do { UNUSED_PARAMETER(flags); } while (0); --#define WHD_RESTORE_INTERRUPTS(flags) do { } while (0); -- --/****************************************************** --* Constants --******************************************************/ --#define INDIRECT_BUFFER_SIZE (1024) --#define WHD_BUS_ROUND_UP_ALIGNMENT (64) --#define WHD_BUS_MAX_TRANSFER_SIZE (WHD_BUS_MAX_BACKPLANE_TRANSFER_SIZE) -- --#define WHD_BUS_WLAN_ALLOW_SLEEP_INVALID_MS ( (uint32_t)-1 ) -- --/****************************************************** --* Structures --******************************************************/ -- --struct whd_bus_common_info --{ -- whd_bool_t bus_is_up; -- -- whd_time_t delayed_bus_release_deadline; -- whd_bool_t delayed_bus_release_scheduled; -- uint32_t delayed_bus_release_timeout_ms; -- volatile uint32_t delayed_bus_release_timeout_ms_request; -- -- uint32_t backplane_window_current_base_address; -- whd_bool_t bus_flow_control; -- volatile whd_bool_t resource_download_abort; -- --}; -- --/****************************************************** --* Variables --******************************************************/ -- --/****************************************************** --* Function declarations --******************************************************/ --static whd_result_t whd_bus_common_download_resource(whd_driver_t whd_driver, whd_resource_type_t resource, -- whd_bool_t direct_resource, uint32_t address); -- --/****************************************************** --* Function definitions --******************************************************/ -- --whd_bool_t whd_bus_is_up(whd_driver_t whd_driver) --{ -- return whd_driver->bus_common_info->bus_is_up; --} -- --void whd_bus_set_state(whd_driver_t whd_driver, whd_bool_t state) --{ -- whd_driver->bus_common_info->bus_is_up = state; --} -- --whd_result_t whd_bus_set_flow_control(whd_driver_t whd_driver, uint8_t value) --{ -- if (value != 0) -- { -- whd_driver->bus_common_info->bus_flow_control = WHD_TRUE; -- } -- else -- { -- whd_driver->bus_common_info->bus_flow_control = WHD_FALSE; -- } -- return WHD_SUCCESS; --} -- --whd_bool_t whd_bus_is_flow_controlled(whd_driver_t whd_driver) --{ -- return whd_driver->bus_common_info->bus_flow_control; --} -- --static whd_result_t whd_bus_common_download_resource(whd_driver_t whd_driver, whd_resource_type_t resource, -- whd_bool_t direct_resource, uint32_t address) --{ -- whd_result_t result = WHD_SUCCESS; -- uint8_t *image; -- uint32_t image_size; -- uint32_t blocks_count = 0; -- uint32_t i; -- uint32_t size_out; -- uint32_t reset_instr = 0; -- -- result = whd_resource_size(whd_driver, resource, &image_size); -- -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Fatal error: download_resource doesn't exist, %s failed at line %d \n", __func__, -- __LINE__) ); -- goto exit; -- } -- -- if (image_size <= 0) -- { -- WPRINT_WHD_ERROR( ("Fatal error: download_resource cannot load with invalid size, %s failed at line %d \n", -- __func__, __LINE__) ); -- result = WHD_BADARG; -- goto exit; -- } -- -- result = whd_get_resource_no_of_blocks(whd_driver, resource, &blocks_count); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Fatal error: download_resource blocks count not known, %s failed at line %d \n", __func__, -- __LINE__) ); -- goto exit; -- } -- -- for (i = 0; i < blocks_count; i++) -- { -- CHECK_RETURN(whd_get_resource_block(whd_driver, resource, i, (const uint8_t **)&image, &size_out) ); -- if ( (resource == WHD_RESOURCE_WLAN_FIRMWARE) && (reset_instr == 0) ) -- { -- /* Copy the starting address of the firmware into a global variable */ -- reset_instr = *( (uint32_t *)(&image[0]) ); -- } -- result = whd_bus_transfer_backplane_bytes(whd_driver, BUS_WRITE, address, size_out, &image[0]); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Failed to write firmware image\n", __FUNCTION__) ); -- goto exit; -- } -- address += size_out; -- } -- -- /* Below part of the code is applicable to arm_CR4 type chips only -- * The CR4 chips by default firmware is not loaded at 0. So we need -- * load the first 32 bytes with the offset of the firmware load address -- * which is been copied before during the firmware download -- */ -- if ( (address != 0) && (reset_instr != 0) ) -- { -- /* write address 0 with reset instruction */ -- result = whd_bus_write_backplane_value(whd_driver, 0, sizeof(reset_instr), reset_instr); -- -- if (result == WHD_SUCCESS) -- { -- uint32_t tmp; -- -- /* verify reset instruction value */ -- result = whd_bus_read_backplane_value(whd_driver, 0, sizeof(tmp), (uint8_t *)&tmp); -- -- if ( (result == WHD_SUCCESS) && (tmp != reset_instr) ) -- { -- WPRINT_WHD_ERROR( ("%s: Failed to write 0x%08" PRIx32 " to addr 0\n", __FUNCTION__, reset_instr) ); -- WPRINT_WHD_ERROR( ("%s: contents of addr 0 is 0x%08" PRIx32 "\n", __FUNCTION__, tmp) ); -- return WHD_WLAN_SDIO_ERROR; -- } -- } -- } --exit: return result; --} -- --void whd_bus_common_info_init(whd_driver_t whd_driver) --{ -- struct whd_bus_common_info *bus_common = (struct whd_bus_common_info *)malloc(sizeof(struct whd_bus_common_info) ); -- -- if (bus_common != NULL) -- { -- whd_driver->bus_common_info = bus_common; -- -- bus_common->delayed_bus_release_deadline = 0; -- bus_common->delayed_bus_release_scheduled = WHD_FALSE; -- bus_common->delayed_bus_release_timeout_ms = PLATFORM_WLAN_ALLOW_BUS_TO_SLEEP_DELAY_MS; -- bus_common->delayed_bus_release_timeout_ms_request = WHD_BUS_WLAN_ALLOW_SLEEP_INVALID_MS; -- bus_common->backplane_window_current_base_address = 0; -- -- bus_common->bus_is_up = WHD_FALSE; -- bus_common->bus_flow_control = WHD_FALSE; -- -- bus_common->resource_download_abort = WHD_FALSE; -- } -- else -- { -- WPRINT_WHD_ERROR( ("Memory allocation failed for whd_bus_common_info in %s\n", __FUNCTION__) ); -- } --} -- --void whd_bus_common_info_deinit(whd_driver_t whd_driver) --{ -- if (whd_driver->bus_common_info != NULL) -- { -- free(whd_driver->bus_common_info); -- whd_driver->bus_common_info = NULL; -- } --} -- --void whd_delayed_bus_release_schedule_update(whd_driver_t whd_driver, whd_bool_t is_scheduled) --{ -- whd_driver->bus_common_info->delayed_bus_release_scheduled = is_scheduled; -- whd_driver->bus_common_info->delayed_bus_release_deadline = 0; --} -- --uint32_t whd_bus_handle_delayed_release(whd_driver_t whd_driver) --{ -- uint32_t time_until_release = 0; -- uint32_t current_time = 0; -- struct whd_bus_common_info *bus_common = whd_driver->bus_common_info; -- -- if (bus_common->delayed_bus_release_timeout_ms_request != WHD_BUS_WLAN_ALLOW_SLEEP_INVALID_MS) -- { -- whd_bool_t schedule = -- ( (bus_common->delayed_bus_release_scheduled != 0) || -- (bus_common->delayed_bus_release_deadline != 0) ) ? WHD_TRUE : WHD_FALSE; -- uint32_t flags; -- -- WHD_SAVE_INTERRUPTS(flags); -- bus_common->delayed_bus_release_timeout_ms = bus_common->delayed_bus_release_timeout_ms_request; -- bus_common->delayed_bus_release_timeout_ms_request = WHD_BUS_WLAN_ALLOW_SLEEP_INVALID_MS; -- WHD_RESTORE_INTERRUPTS(flags); -- -- DELAYED_BUS_RELEASE_SCHEDULE(whd_driver, schedule); -- } -- -- if (bus_common->delayed_bus_release_scheduled == WHD_TRUE) -- { -- bus_common->delayed_bus_release_scheduled = WHD_FALSE; -- -- if (bus_common->delayed_bus_release_timeout_ms != 0) -- { -- cy_rtos_get_time(¤t_time); -- bus_common->delayed_bus_release_deadline = current_time + -- bus_common->delayed_bus_release_timeout_ms; -- time_until_release = bus_common->delayed_bus_release_timeout_ms; -- } -- } -- else if (bus_common->delayed_bus_release_deadline != 0) -- { -- whd_time_t now; -- -- cy_rtos_get_time(&now); -- -- if (bus_common->delayed_bus_release_deadline - now <= bus_common->delayed_bus_release_timeout_ms) -- { -- time_until_release = bus_common->delayed_bus_release_deadline - now; -- } -- -- if (time_until_release == 0) -- { -- bus_common->delayed_bus_release_deadline = 0; -- } -- } -- -- if (time_until_release != 0) -- { -- if (whd_bus_is_up(whd_driver) == WHD_FALSE) -- { -- time_until_release = 0; -- } -- else if (whd_bus_platform_mcu_power_save_deep_sleep_enabled(whd_driver) ) -- { -- time_until_release = 0; -- } -- } -- -- return time_until_release; --} -- --whd_bool_t whd_bus_platform_mcu_power_save_deep_sleep_enabled(whd_driver_t whd_driver) --{ -- return WHD_FALSE; --} -- --void whd_bus_init_backplane_window(whd_driver_t whd_driver) --{ -- whd_driver->bus_common_info->backplane_window_current_base_address = 0; --} -- --whd_result_t whd_bus_write_wifi_firmware_image(whd_driver_t whd_driver) --{ -- whd_result_t result = WHD_SUCCESS; -- uint32_t ram_start_address; -- -- /* Pass the ram_start_address to the firmware Download -- * CR4 chips have offset and CM3 starts from 0 */ -- -- ram_start_address = GET_C_VAR(whd_driver, ATCM_RAM_BASE_ADDRESS); -- result = whd_bus_common_download_resource(whd_driver, WHD_RESOURCE_WLAN_FIRMWARE, WHD_FALSE, ram_start_address); -- -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Bus common resource download failed, %s failed at %d \n", __func__, __LINE__) ); -- -- return result; --} -- --whd_result_t whd_bus_write_wifi_nvram_image(whd_driver_t whd_driver) --{ -- uint32_t image_size; -- uint32_t img_base; -- uint32_t img_end; -- -- /* Get the size of the variable image */ -- CHECK_RETURN(whd_resource_size(whd_driver, WHD_RESOURCE_WLAN_NVRAM, &image_size) ); -- -- /* Round up the size of the image */ -- image_size = ROUND_UP(image_size, WHD_BUS_ROUND_UP_ALIGNMENT); -- -- /* Write image */ -- img_end = GET_C_VAR(whd_driver, CHIP_RAM_SIZE) - 4; -- img_base = (img_end - image_size); -- img_base += GET_C_VAR(whd_driver, ATCM_RAM_BASE_ADDRESS); -- -- CHECK_RETURN(whd_bus_common_download_resource(whd_driver, WHD_RESOURCE_WLAN_NVRAM, WHD_FALSE, img_base) ); -- -- /* Write the variable image size at the end */ -- image_size = (~(image_size / 4) << 16) | (image_size / 4); -- -- img_end += GET_C_VAR(whd_driver, ATCM_RAM_BASE_ADDRESS); -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, (uint32_t)img_end, 4, image_size) ); -- -- return WHD_SUCCESS; --} -- --void whd_bus_set_resource_download_halt(whd_driver_t whd_driver, whd_bool_t halt) --{ -- whd_driver->bus_common_info->resource_download_abort = halt; --} -- --/* -- * Update the backplane window registers -- */ --whd_result_t whd_bus_set_backplane_window(whd_driver_t whd_driver, uint32_t addr) --{ -- whd_result_t result = WHD_BUS_WRITE_REGISTER_ERROR; -- uint32_t base = addr & ( (uint32_t) ~BACKPLANE_ADDRESS_MASK ); -- const uint32_t upper_32bit_mask = 0xFF000000; -- const uint32_t upper_middle_32bit_mask = 0x00FF0000; -- const uint32_t lower_middle_32bit_mask = 0x0000FF00; -- struct whd_bus_common_info *bus_common_info = whd_driver->bus_common_info; -- -- if (base == bus_common_info->backplane_window_current_base_address) -- { -- return WHD_SUCCESS; -- } -- if ( (base & upper_32bit_mask) != (bus_common_info->backplane_window_current_base_address & upper_32bit_mask) ) -- { -- if (WHD_SUCCESS != -- (result = whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_BACKPLANE_ADDRESS_HIGH, -- (uint8_t)1, (base >> 24) ) ) ) -- { -- WPRINT_WHD_ERROR( ("Failed to write register value to the bus, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- /* clear old */ -- bus_common_info->backplane_window_current_base_address &= ~upper_32bit_mask; -- /* set new */ -- bus_common_info->backplane_window_current_base_address |= (base & upper_32bit_mask); -- } -- -- if ( (base & upper_middle_32bit_mask) != -- (bus_common_info->backplane_window_current_base_address & upper_middle_32bit_mask) ) -- { -- if (WHD_SUCCESS != -- (result = whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_BACKPLANE_ADDRESS_MID, -- (uint8_t)1, (base >> 16) ) ) ) -- { -- WPRINT_WHD_ERROR( ("Failed to write register value to the bus, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- /* clear old */ -- bus_common_info->backplane_window_current_base_address &= ~upper_middle_32bit_mask; -- /* set new */ -- bus_common_info->backplane_window_current_base_address |= (base & upper_middle_32bit_mask); -- } -- -- if ( (base & lower_middle_32bit_mask) != -- (bus_common_info->backplane_window_current_base_address & lower_middle_32bit_mask) ) -- { -- if (WHD_SUCCESS != -- (result = whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_BACKPLANE_ADDRESS_LOW, -- (uint8_t)1, (base >> 8) ) ) ) -- { -- WPRINT_WHD_ERROR( ("Failed to write register value to the bus, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- -- /* clear old */ -- bus_common_info->backplane_window_current_base_address &= ~lower_middle_32bit_mask; -- /* set new */ -- bus_common_info->backplane_window_current_base_address |= (base & lower_middle_32bit_mask); -- } -- -- return WHD_SUCCESS; --} -- --/* Default implementation of WHD bus resume function, which does nothing */ --whd_result_t whd_bus_resume_after_deep_sleep(whd_driver_t whd_driver) --{ -- whd_assert("In order to support deep-sleep platform need to implement this function", 0); -- return WHD_UNSUPPORTED; --} -- --whd_result_t whd_bus_transfer_backplane_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- uint32_t address, uint32_t size, uint8_t *data) --{ -- whd_buffer_t pkt_buffer = NULL; -- uint8_t *packet; -- uint32_t transfer_size; -- uint32_t remaining_buf_size; -- uint32_t window_offset_address; -- whd_result_t result; -- -- result = whd_host_buffer_get(whd_driver, &pkt_buffer, (direction == BUS_READ) ? WHD_NETWORK_RX : WHD_NETWORK_TX, -- ( uint16_t )(whd_bus_get_max_transfer_size(whd_driver) + -- whd_bus_backplane_read_padd_size( -- whd_driver) + MAX_BUS_HEADER_SIZE), WHD_TRUE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Packet buffer allocation failed in %s at %d \n", __func__, __LINE__) ); -- goto done; -- } -- packet = (uint8_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, pkt_buffer); -- -- for (remaining_buf_size = size; remaining_buf_size != 0; -- remaining_buf_size -= transfer_size, address += transfer_size) -- { -- transfer_size = (remaining_buf_size > -- whd_bus_get_max_transfer_size(whd_driver) ) ? whd_bus_get_max_transfer_size(whd_driver) : -- remaining_buf_size; -- -- /* Check if the transfer crosses the backplane window boundary */ -- window_offset_address = address & BACKPLANE_ADDRESS_MASK; -- if ( (window_offset_address + transfer_size) > BACKPLANE_ADDRESS_MASK ) -- { -- /* Adjust the transfer size to within current window */ -- transfer_size = BACKPLANE_WINDOW_SIZE - window_offset_address; -- } -- result = whd_bus_set_backplane_window(whd_driver, address); -- if (result != WHD_SUCCESS) -- { -- goto done; -- } -- -- if (direction == BUS_WRITE) -- { -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- memcpy( ( (whd_transfer_bytes_packet_t *)packet )->data, data + size - remaining_buf_size, transfer_size ); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- result = whd_bus_transfer_bytes(whd_driver, direction, BACKPLANE_FUNCTION, -- (address & BACKPLANE_ADDRESS_MASK), (uint16_t)transfer_size, -- (whd_transfer_bytes_packet_t *)packet); -- if (result != WHD_SUCCESS) -- { -- goto done; -- } -- } -- else -- { -- result = whd_bus_transfer_bytes(whd_driver, direction, BACKPLANE_FUNCTION, -- (address & BACKPLANE_ADDRESS_MASK), -- ( uint16_t )(transfer_size + whd_bus_backplane_read_padd_size(whd_driver) ), -- (whd_transfer_bytes_packet_t *)packet); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("whd_bus_transfer_bytes failed\n") ); -- goto done; -- } -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- memcpy(data + size - remaining_buf_size, (uint8_t *)( (whd_transfer_bytes_packet_t *)packet )->data + -- whd_bus_backplane_read_padd_size(whd_driver), transfer_size); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- } -- } -- --done: CHECK_RETURN(whd_bus_set_backplane_window(whd_driver, CHIPCOMMON_BASE_ADDRESS) ); -- if (pkt_buffer != NULL) -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, pkt_buffer, -- (direction == BUS_READ) ? WHD_NETWORK_RX : WHD_NETWORK_TX) ); -- } -- CHECK_RETURN(result); -- -- return WHD_SUCCESS; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.h -deleted file mode 100644 -index 90b071c65e..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_common.h -+++ /dev/null -@@ -1,65 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ --#include "whd.h" --#include -- --#ifndef INCLUDED_WHD_BUS_COMMON_H --#define INCLUDED_WHD_BUS_COMMON_H -- --#ifdef __cplusplus --extern "C" { --#endif -- --struct whd_bus_common_info; -- --void whd_bus_common_info_init(whd_driver_t whd_driver); --void whd_bus_common_info_deinit(whd_driver_t whd_driver); -- --/* Configure delayed sleep of bus. -- * A high number will mean a longer delay before sleep after the last operation (higher performance) -- * A shorter delay will mean quicker sleep after last operation (lower power use) -- */ --extern void whd_bus_sdio_wlan_set_delayed_bus_powersave_milliseconds(whd_driver_t whd_driver, uint32_t time_ms); --extern whd_result_t whd_bus_resume_after_deep_sleep(whd_driver_t whd_driver); -- --extern whd_result_t whd_bus_write_wifi_firmware_image(whd_driver_t whd_driver); --extern whd_result_t whd_bus_write_wifi_nvram_image(whd_driver_t whd_driver); --extern void whd_bus_set_resource_download_halt(whd_driver_t whd_driver, whd_bool_t halt); -- --extern whd_result_t whd_bus_transfer_backplane_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- uint32_t address, uint32_t size, uint8_t *data); --extern void whd_bus_init_backplane_window(whd_driver_t whd_driver); --whd_result_t whd_bus_set_backplane_window(whd_driver_t whd_driver, uint32_t addr); -- --whd_bool_t whd_bus_is_up(whd_driver_t whd_driver); --extern whd_result_t whd_bus_set_flow_control(whd_driver_t whd_driver, uint8_t value); --extern whd_bool_t whd_bus_is_flow_controlled(whd_driver_t whd_driver); -- --void whd_bus_set_state(whd_driver_t whd_driver, whd_bool_t state); -- --extern void whd_delayed_bus_release_schedule_update(whd_driver_t whd_driver, whd_bool_t is_scheduled); -- --/* handle delayed sleep of bus */ --extern uint32_t whd_bus_handle_delayed_release(whd_driver_t whd_driver); --whd_bool_t whd_bus_platform_mcu_power_save_deep_sleep_enabled(whd_driver_t whd_driver); -- --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_protocol_interface.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_protocol_interface.h -deleted file mode 100644 -index 0ab6677d41..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_protocol_interface.h -+++ /dev/null -@@ -1,128 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "cyabs_rtos.h" -- --#include "whd.h" --#include "whd_network_types.h" --#include "whd_types_int.h" -- --#ifndef INCLUDED_WHD_BUS_PROTOCOL_INTERFACE_H_ --#define INCLUDED_WHD_BUS_PROTOCOL_INTERFACE_H_ -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Constants --******************************************************/ -- --typedef enum --{ -- BUS_FUNCTION = 0, -- BACKPLANE_FUNCTION = 1, -- WLAN_FUNCTION = 2 --} whd_bus_function_t; -- --#define BUS_FUNCTION_MASK (0x3) /* Update this if adding functions */ -- --/****************************************************** --* Macros --******************************************************/ --#define PLATFORM_WLAN_ALLOW_BUS_TO_SLEEP_DELAY_MS 10 -- --#define DELAYED_BUS_RELEASE_SCHEDULE(whd_driver, schedule) do { whd_delayed_bus_release_schedule_update(whd_driver, \ -- schedule); \ --} while (0) -- --/****************************************************** --* Structures --******************************************************/ -- --#pragma pack(1) -- --typedef struct --{ -- uint8_t bus_header[MAX_BUS_HEADER_SIZE]; -- uint32_t data[1]; --} whd_transfer_bytes_packet_t; -- --#pragma pack() -- --typedef void (*whd_bus_irq_callback_t)(void *handler_arg, uint32_t event); -- --/****************************************************** --* Function declarations --******************************************************/ -- --/* Initialisation functions */ --extern whd_result_t whd_bus_init(whd_driver_t whd_driver); --extern whd_result_t whd_bus_deinit(whd_driver_t whd_driver); -- --/* Device register access functions */ --extern whd_result_t whd_bus_write_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint32_t value); --extern whd_result_t whd_bus_read_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint8_t *value); --extern whd_result_t whd_bus_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint32_t value); --extern whd_result_t whd_bus_read_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint8_t *value); -- --/* Device data transfer functions */ --extern whd_result_t whd_bus_send_buffer(whd_driver_t whd_driver, whd_buffer_t buffer); --extern whd_result_t whd_bus_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t size, -- whd_transfer_bytes_packet_t *data); -- --/* Frame transfer function */ --extern whd_result_t whd_bus_read_frame(whd_driver_t whd_driver, whd_buffer_t *buffer); -- --extern uint32_t whd_bus_packet_available_to_read(whd_driver_t whd_driver); --extern whd_result_t whd_bus_poke_wlan(whd_driver_t whd_driver); --extern whd_result_t whd_bus_wait_for_wlan_event(whd_driver_t whd_driver, cy_semaphore_t *transceive_semaphore); -- --extern whd_result_t whd_bus_ack_interrupt(whd_driver_t whd_driver, uint32_t intstatus); --extern whd_bool_t whd_bus_wake_interrupt_present(whd_driver_t whd_driver); -- --extern whd_result_t whd_bus_set_flow_control(whd_driver_t whd_driver, uint8_t value); --extern whd_bool_t whd_bus_is_flow_controlled(whd_driver_t whd_driver); -- --extern whd_result_t whd_bus_wakeup(whd_driver_t whd_driver); --extern whd_result_t whd_bus_sleep(whd_driver_t whd_driver); -- --extern uint8_t whd_bus_backplane_read_padd_size(whd_driver_t whd_driver); --extern whd_bool_t whd_bus_use_status_report_scheme(whd_driver_t whd_driver); --extern uint32_t whd_bus_get_max_transfer_size(whd_driver_t whd_driver); -- --extern void whd_bus_init_stats(whd_driver_t whd_driver); --extern whd_result_t whd_bus_print_stats(whd_driver_t whd_driver, whd_bool_t reset_after_print); --extern whd_result_t whd_bus_reinit_stats(whd_driver_t whd_driver, whd_bool_t wake_from_firmware); --extern whd_result_t whd_bus_irq_enable(whd_driver_t whd_driver, whd_bool_t enable); --extern whd_result_t whd_bus_irq_register(whd_driver_t whd_driver); --/****************************************************** --* Global variables --******************************************************/ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_BUS_PROTOCOL_INTERFACE_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.c -deleted file mode 100644 -index 043b623dff..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.c -+++ /dev/null -@@ -1,1469 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Broadcom WLAN SDIO Protocol interface -- * -- * Implements the WHD Bus Protocol Interface for SDIO -- * Provides functions for initialising, de-intitialising 802.11 device, -- * sending/receiving raw packets etc -- */ -- --#include --#include "cyabs_rtos.h" --#include "cyhal_sdio.h" --#include "cyhal_gpio.h" -- --#include "whd_bus_sdio_protocol.h" --#include "whd_bus.h" --#include "whd_bus_common.h" --#include "whd_chip_reg.h" --#include "whd_chip_constants.h" --#include "whd_int.h" --#include "whd_chip.h" --#include "whd_sdpcm.h" --#include "whd_debug.h" --#include "whd_sdio.h" --#include "whd_buffer_api.h" --#include "whd_resource_if.h" --#include "whd_types_int.h" --#include "whd_types.h" -- -- --/****************************************************** --* Constants --******************************************************/ --/* function 1 OCP space */ --#define SBSDIO_SB_OFT_ADDR_MASK 0x07FFF /* sb offset addr is <= 15 bits, 32k */ --#define SBSDIO_SB_OFT_ADDR_LIMIT 0x08000 --#define SBSDIO_SB_ACCESS_2_4B_FLAG 0x08000 /* with b15, maps to 32-bit SB access */ -- --#define F0_WORKING_TIMEOUT_MS (500) --#define F1_AVAIL_TIMEOUT_MS (500) --#define F2_AVAIL_TIMEOUT_MS (500) --#define F2_READY_TIMEOUT_MS (1000) --#define ALP_AVAIL_TIMEOUT_MS (100) --#define HT_AVAIL_TIMEOUT_MS (500) --#define ABORT_TIMEOUT_MS (100) --/* Taken from FALCON_5_90_195_26 dhd/sys/dhd_sdio.c. */ --#define SDIO_F2_WATERMARK (8) -- --#define INITIAL_READ 4 -- --#define WHD_THREAD_POLL_TIMEOUT (CY_RTOS_NEVER_TIMEOUT) -- --#define WHD_THREAD_POKE_TIMEOUT (100) -- --#define HOSTINTMASK (I_HMB_SW_MASK) -- -- --/****************************************************** --* Structures --******************************************************/ --struct whd_bus_priv --{ -- whd_sdio_config_t sdio_config; -- whd_bus_stats_t whd_bus_stats; -- cyhal_sdio_t *sdio_obj; -- --}; -- --/****************************************************** --* Variables --******************************************************/ -- --/****************************************************** --* Static Function Declarations --******************************************************/ -- --static whd_result_t whd_bus_sdio_transfer(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t data_size, -- uint8_t *data, sdio_response_needed_t response_expected); --static whd_result_t whd_bus_sdio_cmd52(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint8_t value, -- sdio_response_needed_t response_expected, uint8_t *response); --static whd_result_t whd_bus_sdio_cmd53(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, sdio_transfer_mode_t mode, uint32_t address, -- uint16_t data_size, uint8_t *data, -- sdio_response_needed_t response_expected, -- uint32_t *response); --static whd_result_t whd_bus_sdio_abort_read(whd_driver_t whd_driver, whd_bool_t retry); --static whd_result_t whd_bus_sdio_download_firmware(whd_driver_t whd_driver); -- --static whd_result_t whd_bus_sdio_set_oob_interrupt(whd_driver_t whd_driver, uint8_t gpio_pin_number); -- --static void whd_bus_sdio_irq_handler(void *handler_arg, cyhal_sdio_irq_event_t event); --static void whd_bus_sdio_oob_irq_handler(void *arg, cyhal_gpio_irq_event_t event); -- --static whd_result_t whd_bus_sdio_irq_register(whd_driver_t whd_driver); --static whd_result_t whd_bus_sdio_irq_enable(whd_driver_t whd_driver, whd_bool_t enable); --static whd_result_t whd_bus_sdio_init_oob_intr(whd_driver_t whd_driver); --static whd_result_t whd_bus_sdio_deinit_oob_intr(whd_driver_t whd_driver); --static whd_result_t whd_bus_sdio_register_oob_intr(whd_driver_t whd_driver); --static whd_result_t whd_bus_sdio_unregister_oob_intr(whd_driver_t whd_driver); --static whd_result_t whd_bus_sdio_enable_oob_intr(whd_driver_t whd_driver, whd_bool_t enable); -- --/****************************************************** --* Global Function definitions --******************************************************/ -- --uint32_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_sdio_config, cyhal_sdio_t *sdio_obj) --{ -- struct whd_bus_info *whd_bus_info; -- -- if (!whd_driver || !whd_sdio_config) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- whd_bus_info = (whd_bus_info_t *)malloc(sizeof(whd_bus_info_t) ); -- -- if (whd_bus_info == NULL) -- { -- WPRINT_WHD_ERROR( ("Memory allocation failed for whd_bus_info in %s\n", __FUNCTION__) ); -- return WHD_BUFFER_UNAVAILABLE_PERMANENT; -- } -- memset(whd_bus_info, 0, sizeof(whd_bus_info_t) ); -- -- whd_driver->bus_if = whd_bus_info; -- -- whd_driver->bus_priv = (struct whd_bus_priv *)malloc(sizeof(struct whd_bus_priv) ); -- -- if (whd_driver->bus_priv == NULL) -- { -- WPRINT_WHD_ERROR( ("Memory allocation failed for whd_bus_priv in %s\n", __FUNCTION__) ); -- return WHD_BUFFER_UNAVAILABLE_PERMANENT; -- } -- memset(whd_driver->bus_priv, 0, sizeof(struct whd_bus_priv) ); -- -- whd_driver->bus_priv->sdio_obj = sdio_obj; -- whd_driver->bus_priv->sdio_config = *whd_sdio_config; -- -- whd_bus_info->whd_bus_init_fptr = whd_bus_sdio_init; -- whd_bus_info->whd_bus_deinit_fptr = whd_bus_sdio_deinit; -- -- whd_bus_info->whd_bus_write_backplane_value_fptr = whd_bus_sdio_write_backplane_value; -- whd_bus_info->whd_bus_read_backplane_value_fptr = whd_bus_sdio_read_backplane_value; -- whd_bus_info->whd_bus_write_register_value_fptr = whd_bus_sdio_write_register_value; -- whd_bus_info->whd_bus_read_register_value_fptr = whd_bus_sdio_read_register_value; -- -- whd_bus_info->whd_bus_send_buffer_fptr = whd_bus_sdio_send_buffer; -- whd_bus_info->whd_bus_transfer_bytes_fptr = whd_bus_sdio_transfer_bytes; -- -- whd_bus_info->whd_bus_read_frame_fptr = whd_bus_sdio_read_frame; -- -- whd_bus_info->whd_bus_packet_available_to_read_fptr = whd_bus_sdio_packet_available_to_read; -- whd_bus_info->whd_bus_poke_wlan_fptr = whd_bus_sdio_poke_wlan; -- whd_bus_info->whd_bus_wait_for_wlan_event_fptr = whd_bus_sdio_wait_for_wlan_event; -- -- whd_bus_info->whd_bus_ack_interrupt_fptr = whd_bus_sdio_ack_interrupt; -- whd_bus_info->whd_bus_wake_interrupt_present_fptr = whd_bus_sdio_wake_interrupt_present; -- -- whd_bus_info->whd_bus_wakeup_fptr = whd_bus_sdio_wakeup; -- whd_bus_info->whd_bus_sleep_fptr = whd_bus_sdio_sleep; -- -- whd_bus_info->whd_bus_backplane_read_padd_size_fptr = whd_bus_sdio_backplane_read_padd_size; -- whd_bus_info->whd_bus_use_status_report_scheme_fptr = whd_bus_sdio_use_status_report_scheme; -- -- whd_bus_info->whd_bus_get_max_transfer_size_fptr = whd_bus_sdio_get_max_transfer_size; -- -- whd_bus_info->whd_bus_init_stats_fptr = whd_bus_sdio_init_stats; -- whd_bus_info->whd_bus_print_stats_fptr = whd_bus_sdio_print_stats; -- whd_bus_info->whd_bus_reinit_stats_fptr = whd_bus_sdio_reinit_stats; -- whd_bus_info->whd_bus_irq_register_fptr = whd_bus_sdio_irq_register; -- whd_bus_info->whd_bus_irq_enable_fptr = whd_bus_sdio_irq_enable; -- -- return WHD_SUCCESS; --} -- --void whd_bus_sdio_detach(whd_driver_t whd_driver) --{ -- if (whd_driver->bus_if != NULL) -- { -- free(whd_driver->bus_if); -- whd_driver->bus_if = NULL; -- } -- if (whd_driver->bus_priv != NULL) -- { -- free(whd_driver->bus_priv); -- whd_driver->bus_priv = NULL; -- } --} -- --whd_result_t whd_bus_sdio_ack_interrupt(whd_driver_t whd_driver, uint32_t intstatus) --{ -- return whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, intstatus); --} -- --whd_result_t whd_bus_sdio_wait_for_wlan_event(whd_driver_t whd_driver, cy_semaphore_t *transceive_semaphore) --{ -- whd_result_t result = WHD_SUCCESS; -- uint32_t timeout_ms = 1; -- uint32_t delayed_release_timeout_ms; -- -- REFERENCE_DEBUG_ONLY_VARIABLE(result); -- -- delayed_release_timeout_ms = whd_bus_handle_delayed_release(whd_driver); -- if (delayed_release_timeout_ms != 0) -- { -- timeout_ms = delayed_release_timeout_ms; -- } -- else -- { -- result = whd_allow_wlan_bus_to_sleep(whd_driver); -- whd_assert("Error setting wlan sleep", (result == WHD_SUCCESS) || (result == WHD_PENDING) ); -- -- if (result == WHD_SUCCESS) -- { -- timeout_ms = CY_RTOS_NEVER_TIMEOUT; -- } -- } -- -- /* Check if we have run out of bus credits */ -- if ( (whd_sdpcm_has_tx_packet(whd_driver) == WHD_TRUE) && (whd_sdpcm_get_available_credits(whd_driver) == 0) ) -- { -- /* Keep poking the WLAN until it gives us more credits */ -- result = whd_bus_poke_wlan(whd_driver); -- whd_assert("Poking failed!", result == WHD_SUCCESS); -- -- result = cy_rtos_get_semaphore(transceive_semaphore, (uint32_t)MIN_OF(timeout_ms, -- WHD_THREAD_POKE_TIMEOUT), WHD_FALSE); -- } -- else -- { -- result = cy_rtos_get_semaphore(transceive_semaphore, (uint32_t)MIN_OF(timeout_ms, -- WHD_THREAD_POLL_TIMEOUT), WHD_FALSE); -- } -- whd_assert("Could not get whd sleep semaphore\n", (result == CY_RSLT_SUCCESS) || (result == CY_RTOS_TIMEOUT) ); -- -- return result; --} -- --/* Device data transfer functions */ --whd_result_t whd_bus_sdio_send_buffer(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- whd_result_t retval; -- retval = -- whd_bus_transfer_bytes(whd_driver, BUS_WRITE, WLAN_FUNCTION, 0, -- (uint16_t)(whd_buffer_get_current_piece_size(whd_driver, -- buffer) - sizeof(whd_buffer_t) ), -- (whd_transfer_bytes_packet_t *)(whd_buffer_get_current_piece_data_pointer(whd_driver, -- buffer) + -- sizeof(whd_buffer_t) ) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) ); -- if (retval == WHD_SUCCESS) -- { -- DELAYED_BUS_RELEASE_SCHEDULE(whd_driver, WHD_TRUE); -- } -- CHECK_RETURN (retval); -- -- return WHD_SUCCESS; --} -- --whd_result_t whd_bus_sdio_init(whd_driver_t whd_driver) --{ -- uint8_t byte_data; -- whd_result_t result; -- uint32_t loop_count; -- whd_time_t elapsed_time, current_time; -- uint32_t wifi_firmware_image_size = 0; -- uint16_t chip_id; -- -- whd_bus_set_flow_control(whd_driver, WHD_FALSE); -- -- whd_bus_init_backplane_window(whd_driver); -- -- /* Setup the backplane*/ -- loop_count = 0; -- do -- { -- /* Enable function 1 (backplane) */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, -- SDIO_FUNC_ENABLE_1) ); -- if (loop_count != 0) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- } -- CHECK_RETURN(whd_bus_read_register_value (whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, &byte_data) ); -- loop_count++; -- if (loop_count >= (uint32_t)F0_WORKING_TIMEOUT_MS) -- { -- WPRINT_WHD_ERROR( ("Timeout while setting up the backplane, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_TIMEOUT; -- } -- } while (byte_data != (uint8_t)SDIO_FUNC_ENABLE_1); -- -- if (whd_driver->bus_priv->sdio_config.sdio_1bit_mode == WHD_FALSE) -- { -- /* Read the bus width and set to 4 bits */ -- CHECK_RETURN(whd_bus_read_register_value (whd_driver, BUS_FUNCTION, SDIOD_CCCR_BICTRL, (uint8_t)1, -- &byte_data) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_BICTRL, (uint8_t)1, -- (byte_data & (~BUS_SD_DATA_WIDTH_MASK) ) | -- BUS_SD_DATA_WIDTH_4BIT) ); -- /* NOTE: We don't need to change our local bus settings since we're not sending any data (only using CMD52) -- * until after we change the bus speed further down */ -- } -- -- /* Set the block size */ -- -- /* Wait till the backplane is ready */ -- loop_count = 0; -- while ( ( (result = whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ) == WHD_SUCCESS ) && -- ( (result = whd_bus_read_register_value (whd_driver, BUS_FUNCTION, SDIOD_CCCR_BLKSIZE_0, (uint8_t)1, -- &byte_data) ) == WHD_SUCCESS ) && -- (byte_data != (uint8_t)SDIO_64B_BLOCK) && -- (loop_count < (uint32_t)F0_WORKING_TIMEOUT_MS) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- if (loop_count >= (uint32_t)F0_WORKING_TIMEOUT_MS) -- { -- /* If the system fails here, check the high frequency crystal is working */ -- WPRINT_WHD_ERROR( ("Timeout while setting block size, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_TIMEOUT; -- } -- } -- -- CHECK_RETURN(result); -- -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_F1BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_F2BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_F2BLKSIZE_1, (uint8_t)1, -- (uint32_t)0) ); /* Function 2 = 64 */ -- -- /* Register interrupt handler*/ -- whd_bus_sdio_irq_register(whd_driver); -- /* Enable SDIO IRQ */ -- whd_bus_sdio_irq_enable(whd_driver, WHD_TRUE); -- -- /* Enable/Disable Client interrupts */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_INTEN, (uint8_t)1, -- INTR_CTL_MASTER_EN | INTR_CTL_FUNC1_EN | INTR_CTL_FUNC2_EN) ); -- -- if (whd_driver->bus_priv->sdio_config.high_speed_sdio_clock) -- { -- /* This code is required if we want more than 25 MHz clock */ -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_SPEED_CONTROL, 1, &byte_data) ); -- if ( (byte_data & 0x1) != 0 ) -- { -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_SPEED_CONTROL, 1, -- byte_data | SDIO_SPEED_EHS) ); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Error reading bus register, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_BUS_READ_REGISTER_ERROR; -- } -- }/* HIGH_SPEED_SDIO_CLOCK */ -- -- -- -- /* Wait till the backplane is ready */ -- loop_count = 0; -- while ( ( (result = whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IORDY, (uint8_t)1, -- &byte_data) ) == WHD_SUCCESS ) && -- ( (byte_data & SDIO_FUNC_READY_1) == 0 ) && -- (loop_count < (uint32_t)F1_AVAIL_TIMEOUT_MS) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- } -- if (loop_count >= (uint32_t)F1_AVAIL_TIMEOUT_MS) -- { -- WPRINT_WHD_ERROR( ("Timeout while waiting for backplane to be ready\n") ); -- return WHD_TIMEOUT; -- } -- CHECK_RETURN(result); -- -- /* Set the ALP */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- (uint32_t)(SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_ALP_AVAIL_REQ | -- SBSDIO_FORCE_ALP) ) ); -- -- loop_count = 0; -- while ( ( (result = whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- &byte_data) ) == WHD_SUCCESS ) && -- ( (byte_data & SBSDIO_ALP_AVAIL) == 0 ) && -- (loop_count < (uint32_t)ALP_AVAIL_TIMEOUT_MS) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- } -- if (loop_count >= (uint32_t)ALP_AVAIL_TIMEOUT_MS) -- { -- WPRINT_WHD_ERROR( ("Timeout while waiting for alp clock\n") ); -- return WHD_TIMEOUT; -- } -- CHECK_RETURN(result); -- -- /* Clear request for ALP */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, 0) ); -- -- /* Disable the extra SDIO pull-ups */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_PULL_UP, (uint8_t)1, 0) ); -- /* Enable F1 and F2 */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, -- SDIO_FUNC_ENABLE_1 | SDIO_FUNC_ENABLE_2) ); -- -- /* Setup host-wake signals */ -- CHECK_RETURN(whd_bus_sdio_init_oob_intr(whd_driver) ); -- -- /* Enable F2 interrupt only */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_INTEN, (uint8_t)1, -- INTR_CTL_MASTER_EN | INTR_CTL_FUNC2_EN) ); -- -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IORDY, (uint8_t)1, &byte_data) ); -- -- /* Read the chip id */ -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, CHIPCOMMON_BASE_ADDRESS, 2, (uint8_t *)&chip_id) ); -- whd_chip_set_chip_id(whd_driver, chip_id); -- -- cy_rtos_get_time(&elapsed_time); -- result = whd_bus_sdio_download_firmware(whd_driver); -- cy_rtos_get_time(¤t_time); -- elapsed_time = current_time - elapsed_time; -- CHECK_RETURN(whd_resource_size(whd_driver, WHD_RESOURCE_WLAN_FIRMWARE, &wifi_firmware_image_size) ); -- WPRINT_WHD_INFO( ("WLAN FW download size: %" PRIu32 " bytes\n", wifi_firmware_image_size) ); -- WPRINT_WHD_INFO( ("WLAN FW download time: %" PRIu32 " ms\n", elapsed_time) ); -- -- if (result != WHD_SUCCESS) -- { -- /* either an error or user abort */ -- WPRINT_WHD_ERROR( ("SDIO firmware download error, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- -- /* Wait for F2 to be ready */ -- loop_count = 0; -- while ( ( (result = whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IORDY, (uint8_t)1, -- &byte_data) ) == WHD_SUCCESS ) && -- ( (byte_data & SDIO_FUNC_READY_2) == 0 ) && -- (loop_count < (uint32_t)F2_READY_TIMEOUT_MS) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- } -- if (loop_count >= (uint32_t)F2_READY_TIMEOUT_MS) -- { -- /* If your system fails here, it could be due to incorrect NVRAM variables. -- * Check which 'wifi_nvram_image.h' file your platform is using, and -- * check that it matches the WLAN device on your platform, including the -- * crystal frequency. -- */ -- WPRINT_WHD_ERROR( ("Timeout while waiting for function 2 to be ready\n") ); -- /* Reachable after hitting assert */ -- return WHD_TIMEOUT; -- } -- -- CHECK_RETURN(whd_chip_specific_init(whd_driver) ); -- CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) ); -- cyhal_sdio_irq_enable(whd_driver->bus_priv->sdio_obj, CYHAL_SDIO_CARD_INTERRUPT, WHD_TRUE); -- UNUSED_PARAMETER(elapsed_time); -- return result; --} -- --whd_result_t whd_bus_sdio_deinit(whd_driver_t whd_driver) --{ -- CHECK_RETURN(whd_bus_sdio_deinit_oob_intr(whd_driver) ); -- -- cyhal_sdio_irq_enable(whd_driver->bus_priv->sdio_obj, CYHAL_SDIO_CARD_INTERRUPT, WHD_FALSE); -- -- CHECK_RETURN(whd_allow_wlan_bus_to_sleep(whd_driver) ); -- -- whd_bus_set_resource_download_halt(whd_driver, WHD_FALSE); -- -- DELAYED_BUS_RELEASE_SCHEDULE(whd_driver, WHD_FALSE); -- -- return WHD_SUCCESS; --} -- --whd_bool_t whd_bus_sdio_wake_interrupt_present(whd_driver_t whd_driver) --{ -- uint32_t int_status = 0; -- -- /* Ensure the wlan backplane bus is up */ -- if (WHD_SUCCESS != whd_ensure_wlan_bus_is_up(whd_driver) ) -- return WHD_FALSE; -- -- if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, -- (uint8_t *)&int_status) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Error reading interrupt status\n", __FUNCTION__) ); -- goto exit; -- } -- if ( (I_HMB_HOST_INT & int_status) != 0 ) -- { -- /* Clear any interrupts */ -- if (whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, -- I_HMB_HOST_INT) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Error clearing interrupts\n", __FUNCTION__) ); -- goto exit; -- } -- if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, -- (uint8_t *)&int_status) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Error reading interrupt status\n", __FUNCTION__) ); -- goto exit; -- } -- WPRINT_WHD_DEBUG( ("whd_bus_sdio_wake_interrupt_present after clearing int_status = [%x]\n", -- (uint8_t)int_status) ); -- return WHD_TRUE; -- } --exit: -- return WHD_FALSE; --} -- --uint32_t whd_bus_sdio_packet_available_to_read(whd_driver_t whd_driver) --{ -- uint32_t int_status = 0; -- -- /* Ensure the wlan backplane bus is up */ -- CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) ); -- -- /* Read the IntStatus */ -- if (whd_bus_read_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, -- (uint8_t *)&int_status) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Error reading interrupt status\n", __FUNCTION__) ); -- int_status = 0; -- goto exit; -- } -- -- if ( (HOSTINTMASK & int_status) != 0 ) -- { -- /* Clear any interrupts */ -- if (whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_INT_STATUS, (uint8_t)4, -- int_status & HOSTINTMASK) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Error clearing interrupts\n", __FUNCTION__) ); -- int_status = 0; -- goto exit; -- } -- } --exit: -- return ( (int_status) & (FRAME_AVAILABLE_MASK) ); --} -- --/* -- * From internal documentation: hwnbu-twiki/SdioMessageEncapsulation -- * When data is available on the device, the device will issue an interrupt: -- * - the device should signal the interrupt as a hint that one or more data frames may be available on the device for reading -- * - the host may issue reads of the 4 byte length tag at any time -- that is, whether an interupt has been issued or not -- * - if a frame is available, the tag read should return a nonzero length (>= 4) and the host can then read the remainder of the frame by issuing one or more CMD53 reads -- * - if a frame is not available, the 4byte tag read should return zero -- */ --whd_result_t whd_bus_sdio_read_frame(whd_driver_t whd_driver, whd_buffer_t *buffer) --{ -- uint16_t hwtag[8]; -- uint16_t extra_space_required; -- whd_result_t result; -- -- *buffer = NULL; -- -- /* Ensure the wlan backplane bus is up */ -- CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) ); -- -- /* Read the frame header and verify validity */ -- memset(hwtag, 0, sizeof(hwtag) ); -- -- result = whd_bus_sdio_transfer(whd_driver, BUS_READ, WLAN_FUNCTION, 0, (uint16_t)INITIAL_READ, (uint8_t *)hwtag, -- RESPONSE_NEEDED); -- if (result != WHD_SUCCESS) -- { -- (void)whd_bus_sdio_abort_read(whd_driver, WHD_FALSE); /* ignore return - not much can be done if this fails */ -- WPRINT_WHD_ERROR( ("Error during SDIO receive, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_RX_FAIL; -- } -- -- if ( ( (hwtag[0] | hwtag[1]) == 0 ) || -- ( (hwtag[0] ^ hwtag[1]) != (uint16_t)0xFFFF ) ) -- { -- return WHD_HWTAG_MISMATCH; -- } -- -- if ( (hwtag[0] == (uint16_t)12) && -- (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP) ) -- { -- result = whd_bus_sdio_transfer(whd_driver, BUS_READ, WLAN_FUNCTION, 0, (uint16_t)8, (uint8_t *)&hwtag[2], -- RESPONSE_NEEDED); -- if (result != WHD_SUCCESS) -- { -- /* ignore return - not much can be done if this fails */ -- (void)whd_bus_sdio_abort_read(whd_driver, WHD_FALSE); -- WPRINT_WHD_ERROR( ("Error during SDIO receive, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_RX_FAIL; -- } -- whd_sdpcm_update_credit(whd_driver, (uint8_t *)hwtag); -- return WHD_SUCCESS; -- } -- -- /* Calculate the space we need to store entire packet */ -- if ( (hwtag[0] > (uint16_t)INITIAL_READ) ) -- { -- extra_space_required = (uint16_t)(hwtag[0] - (uint16_t)INITIAL_READ); -- } -- else -- { -- extra_space_required = 0; -- } -- -- /* Allocate a suitable buffer */ -- result = whd_host_buffer_get(whd_driver, buffer, WHD_NETWORK_RX, (unsigned short)( (uint16_t)INITIAL_READ + -- extra_space_required + -- (uint16_t)sizeof( -- whd_buffer_header_t) ), -- WHD_FALSE); -- if (result != WHD_SUCCESS) -- { -- /* Read out the first 12 bytes to get the bus credit information, 4 bytes are already read in hwtag */ -- whd_assert("Get buffer error", -- ( (result == WHD_BUFFER_UNAVAILABLE_TEMPORARY) || (result == WHD_BUFFER_UNAVAILABLE_PERMANENT) ) ); -- result = whd_bus_sdio_transfer(whd_driver, BUS_READ, WLAN_FUNCTION, 0, (uint16_t)8, (uint8_t *)&hwtag[2], -- RESPONSE_NEEDED); -- if (result != WHD_SUCCESS) -- { -- /* ignore return - not much can be done if this fails */ -- (void)whd_bus_sdio_abort_read(whd_driver, WHD_FALSE); -- WPRINT_WHD_ERROR( ("Error during SDIO receive, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_RX_FAIL; -- } -- result = whd_bus_sdio_abort_read(whd_driver, WHD_FALSE); -- whd_assert("Read-abort failed", result == WHD_SUCCESS); -- REFERENCE_DEBUG_ONLY_VARIABLE(result); -- -- whd_sdpcm_update_credit(whd_driver, (uint8_t *)hwtag); -- WPRINT_WHD_ERROR( ("Failed to allocate a buffer to receive into, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_RX_BUFFER_ALLOC_FAIL; -- } -- -- /* Copy the data already read */ -- memcpy(whd_buffer_get_current_piece_data_pointer(whd_driver, *buffer) + sizeof(whd_buffer_header_t), hwtag, -- (size_t)INITIAL_READ); -- -- /* Read the rest of the data */ -- if (extra_space_required > 0) -- { -- result = whd_bus_sdio_transfer(whd_driver, BUS_READ, WLAN_FUNCTION, 0, extra_space_required, -- whd_buffer_get_current_piece_data_pointer(whd_driver, -- *buffer) + sizeof(whd_buffer_header_t) + -- INITIAL_READ, RESPONSE_NEEDED); -- if (result != WHD_SUCCESS) -- { -- (void)whd_bus_sdio_abort_read(whd_driver, WHD_FALSE); /* ignore return - not much can be done if this fails */ -- CHECK_RETURN(whd_buffer_release(whd_driver, *buffer, WHD_NETWORK_RX) ); -- WPRINT_WHD_ERROR( ("Error during SDIO receive, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_RX_FAIL; -- } -- } -- DELAYED_BUS_RELEASE_SCHEDULE(whd_driver, WHD_TRUE); -- return WHD_SUCCESS; --} -- --/****************************************************** --* Function definitions for Protocol Common --******************************************************/ -- --/* Device register access functions */ --whd_result_t whd_bus_sdio_write_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint32_t value) --{ -- CHECK_RETURN(whd_bus_set_backplane_window(whd_driver, address) ); -- -- address &= SBSDIO_SB_OFT_ADDR_MASK; -- -- if (register_length == 4) -- address |= SBSDIO_SB_ACCESS_2_4B_FLAG; -- -- CHECK_RETURN(whd_bus_sdio_transfer(whd_driver, BUS_WRITE, BACKPLANE_FUNCTION, address, register_length, -- (uint8_t *)&value, RESPONSE_NEEDED) ); -- -- return whd_bus_set_backplane_window(whd_driver, CHIPCOMMON_BASE_ADDRESS); --} -- --whd_result_t whd_bus_sdio_read_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint8_t *value) --{ -- *value = 0; -- CHECK_RETURN(whd_bus_set_backplane_window(whd_driver, address) ); -- -- address &= SBSDIO_SB_OFT_ADDR_MASK; -- -- if (register_length == 4) -- address |= SBSDIO_SB_ACCESS_2_4B_FLAG; -- -- CHECK_RETURN(whd_bus_sdio_transfer(whd_driver, BUS_READ, BACKPLANE_FUNCTION, address, register_length, value, -- RESPONSE_NEEDED) ); -- -- return whd_bus_set_backplane_window(whd_driver, CHIPCOMMON_BASE_ADDRESS); --} -- --whd_result_t whd_bus_sdio_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint32_t value) --{ -- return whd_bus_sdio_transfer(whd_driver, BUS_WRITE, function, address, value_length, (uint8_t *)&value, -- RESPONSE_NEEDED); --} -- --whd_result_t whd_bus_sdio_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t size, -- whd_transfer_bytes_packet_t *data) --{ -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- return whd_bus_sdio_transfer(whd_driver, direction, function, address, size, (uint8_t *)data->data, -- RESPONSE_NEEDED); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) --} -- --/****************************************************** --* Static Function definitions --******************************************************/ -- --static whd_result_t whd_bus_sdio_transfer(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t data_size, -- uint8_t *data, sdio_response_needed_t response_expected) --{ -- /* Note: this function had broken retry logic (never retried), which has been removed. -- * Failing fast helps problems on the bus get brought to light more quickly -- * and preserves the original behavior. -- */ -- whd_result_t result = WHD_SUCCESS; -- uint16_t data_byte_size; -- uint16_t data_blk_size; -- -- if (data_size == 0) -- { -- return WHD_BADARG; -- } -- else if (data_size == (uint16_t)1) -- { -- return whd_bus_sdio_cmd52(whd_driver, direction, function, address, *data, response_expected, data); -- } -- else if (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP) -- { -- return whd_bus_sdio_cmd53(whd_driver, direction, function, -- (data_size >= (uint16_t)64) ? SDIO_BLOCK_MODE : SDIO_BYTE_MODE, address, data_size, -- data, response_expected, NULL); -- } -- else -- { -- /* We need to handle remaining size for source image download */ -- data_byte_size = data_size % SDIO_64B_BLOCK; -- data_blk_size = data_size - data_byte_size; -- if (data_blk_size != 0) -- { -- result = whd_bus_sdio_cmd53(whd_driver, direction, function, SDIO_BLOCK_MODE, address, -- data_blk_size, data, response_expected, NULL); -- if (result != WHD_SUCCESS) -- { -- return result; -- } -- data += data_blk_size; -- address += data_blk_size; -- } -- if (data_byte_size) -- { -- result = whd_bus_sdio_cmd53(whd_driver, direction, function, SDIO_BYTE_MODE, address, -- data_byte_size, data, response_expected, NULL); -- } -- return result; -- } --} -- --static whd_result_t whd_bus_sdio_cmd52(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint8_t value, -- sdio_response_needed_t response_expected, uint8_t *response) --{ -- uint32_t sdio_response; -- whd_result_t result; -- sdio_cmd_argument_t arg; -- arg.value = 0; -- arg.cmd52.function_number = (unsigned int)(function & BUS_FUNCTION_MASK); -- arg.cmd52.register_address = (unsigned int)(address & 0x00001ffff); -- arg.cmd52.rw_flag = (unsigned int)( (direction == BUS_WRITE) ? 1 : 0 ); -- arg.cmd52.write_data = value; -- -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, cmd52); -- result = cyhal_sdio_send_cmd(whd_driver->bus_priv->sdio_obj, (cyhal_transfer_t)direction, -- CYHAL_SDIO_CMD_IO_RW_DIRECT, arg.value, -- &sdio_response); -- WHD_BUS_STATS_CONDITIONAL_INCREMENT_VARIABLE(whd_driver->bus_priv, (result != WHD_SUCCESS), cmd52_fail); -- -- if (response != NULL) -- { -- *response = (uint8_t)(sdio_response & 0x00000000ff); -- } -- -- if (result == CY_RSLT_SUCCESS) -- return WHD_SUCCESS; -- else -- return WHD_HAL_ERROR; -- --} -- --static whd_result_t whd_bus_sdio_cmd53(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, sdio_transfer_mode_t mode, uint32_t address, -- uint16_t data_size, uint8_t *data, -- sdio_response_needed_t response_expected, uint32_t *response) --{ -- sdio_cmd_argument_t arg; -- whd_result_t result; -- -- if (direction == BUS_WRITE) -- { -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, cmd53_write); -- } -- -- arg.value = 0; -- arg.cmd53.function_number = (unsigned int)(function & BUS_FUNCTION_MASK); -- arg.cmd53.register_address = (unsigned int)(address & BIT_MASK(17) ); -- arg.cmd53.op_code = (unsigned int)1; -- arg.cmd53.rw_flag = (unsigned int)( (direction == BUS_WRITE) ? 1 : 0 ); -- -- if (mode == SDIO_BYTE_MODE) -- { -- whd_assert("whd_bus_sdio_cmd53: data_size > 512 for byte mode", (data_size <= (uint16_t )512) ); -- arg.cmd53.count = (unsigned int)(data_size & 0x1FF); -- -- result = -- cyhal_sdio_bulk_transfer(whd_driver->bus_priv->sdio_obj, (cyhal_transfer_t)direction, arg.value, -- (uint32_t *)data, data_size, response); -- -- if (result != CY_RSLT_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d cyhal_sdio_bulk_transfer SDIO_BYTE_MODE failed\n", __func__, __LINE__) ); -- goto done; -- } -- } -- else -- { -- arg.cmd53.count = (unsigned int)( (data_size / (uint16_t)SDIO_64B_BLOCK) & BIT_MASK(9) ); -- if ( (uint32_t)(arg.cmd53.count * (uint16_t)SDIO_64B_BLOCK) < data_size ) -- { -- ++arg.cmd53.count; -- } -- arg.cmd53.block_mode = (unsigned int)1; -- -- result = -- cyhal_sdio_bulk_transfer(whd_driver->bus_priv->sdio_obj, (cyhal_transfer_t)direction, arg.value, -- (uint32_t *)data, data_size, response); -- -- if (result != CY_RSLT_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d cyhal_sdio_bulk_transfer failed\n", __func__, __LINE__) ); -- goto done; -- } -- } -- -- if (direction == BUS_READ) -- { -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, cmd53_read); -- } -- --done: -- WHD_BUS_STATS_CONDITIONAL_INCREMENT_VARIABLE(whd_driver->bus_priv, -- ( (result != WHD_SUCCESS) && (direction == BUS_READ) ), -- cmd53_read_fail); -- WHD_BUS_STATS_CONDITIONAL_INCREMENT_VARIABLE(whd_driver->bus_priv, -- ( (result != WHD_SUCCESS) && (direction == BUS_WRITE) ), -- cmd53_write_fail); -- if (result == CY_RSLT_SUCCESS) -- return WHD_SUCCESS; -- else -- return WHD_HAL_ERROR; --} -- --static whd_result_t whd_bus_sdio_download_firmware(whd_driver_t whd_driver) --{ -- uint8_t csr_val = 0; -- whd_result_t result; -- uint32_t loop_count; -- uint32_t ram_start_address; -- -- ram_start_address = GET_C_VAR(whd_driver, ATCM_RAM_BASE_ADDRESS); -- -- if (ram_start_address != 0) -- { -- CHECK_RETURN(whd_reset_core(whd_driver, WLAN_ARM_CORE, SICF_CPUHALT, SICF_CPUHALT) ); -- } -- else -- { -- CHECK_RETURN(whd_disable_device_core(whd_driver, WLAN_ARM_CORE, WLAN_CORE_FLAG_NONE) ); -- CHECK_RETURN(whd_disable_device_core(whd_driver, SOCRAM_CORE, WLAN_CORE_FLAG_NONE) ); -- CHECK_RETURN(whd_reset_device_core(whd_driver, SOCRAM_CORE, WLAN_CORE_FLAG_NONE) ); -- -- CHECK_RETURN(whd_chip_specific_socsram_init(whd_driver) ); -- } -- --#if 0 -- /* 43362 specific: Remap JTAG pins to UART output */ -- uint32_t data = 0; -- CHECK_RETURN(whd_bus_write_backplane_value(0x18000650, 1, 1) ); -- CHECK_RETURN(whd_bus_read_backplane_value(0x18000654, 4, (uint8_t *)&data) ); -- data |= (1 << 24); -- CHECK_RETURN(whd_bus_write_backplane_value(0x18000654, 4, data) ); --#endif -- -- result = whd_bus_write_wifi_firmware_image(whd_driver); -- -- if (result == WHD_UNFINISHED) -- { -- WPRINT_WHD_INFO( ("User aborted fw download\n") ); -- /* user aborted */ -- return result; -- } -- else if (result != WHD_SUCCESS) -- { -- whd_assert("Failed to load wifi firmware\n", result == WHD_SUCCESS); -- return result; -- } -- -- CHECK_RETURN(whd_bus_write_wifi_nvram_image(whd_driver) ); -- -- /* Take the ARM core out of reset */ -- if (ram_start_address != 0) -- { -- CHECK_RETURN(whd_reset_core(whd_driver, WLAN_ARM_CORE, 0, 0) ); -- } -- else -- { -- CHECK_RETURN(whd_reset_device_core(whd_driver, WLAN_ARM_CORE, WLAN_CORE_FLAG_NONE) ); -- -- result = whd_device_core_is_up(whd_driver, WLAN_ARM_CORE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not bring ARM core up\n") ); -- /* Reachable after hitting assert */ -- return result; -- } -- } -- -- /* Wait until the High Throughput clock is available */ -- loop_count = 0; -- while ( ( (result = whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- &csr_val) ) == WHD_SUCCESS ) && -- ( (csr_val & SBSDIO_HT_AVAIL) == 0 ) && -- (loop_count < (uint32_t)HT_AVAIL_TIMEOUT_MS) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- } -- if (loop_count >= (uint32_t)HT_AVAIL_TIMEOUT_MS) -- { -- /* If your system times out here, it means that the WLAN firmware is not booting. -- * Check that your WLAN chip matches the 'wifi_image.c' being built - in GNU toolchain, $(CHIP) -- * makefile variable must be correct. -- */ -- WPRINT_WHD_ERROR( ("Timeout while waiting for high throughput clock\n") ); -- /* Reachable after hitting assert */ -- return WHD_TIMEOUT; -- } -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error while waiting for high throughput clock\n") ); -- /* Reachable after hitting assert */ -- return result; -- } -- -- /* Set up the interrupt mask and enable interrupts */ -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SDIO_INT_HOST_MASK, (uint8_t)4, HOSTINTMASK) ); -- -- /* Enable F2 interrupts. This wasn't required for 4319 but is for the 43362 */ -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SDIO_FUNCTION_INT_MASK, (uint8_t)1, -- SDIO_FUNC_MASK_F1 | SDIO_FUNC_MASK_F2) ); -- -- /* Lower F2 Watermark to avoid DMA Hang in F2 when SD Clock is stopped. */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_FUNCTION2_WATERMARK, (uint8_t)1, -- (uint32_t)SDIO_F2_WATERMARK) ); -- -- return WHD_SUCCESS; --} -- --/** Aborts a SDIO read of a packet from the 802.11 device -- * -- * This function is necessary because the only way to obtain the size of the next -- * available received packet is to read the first four bytes of the packet. -- * If the system reads these four bytes, and then fails to allocate the required -- * memory, then this function allows the system to abort the packet read cleanly, -- * and to optionally tell the 802.11 device to keep it allowing reception once -- * memory is available. -- * -- * In order to do this abort, the following actions are performed: -- * - Sets abort bit for Function 2 (WLAN Data) to request stopping transfer -- * - Sets Read Frame Termination bit to flush and reset fifos -- * - If packet is to be kept and resent by 802.11 device, a NAK is sent -- * - Wait whilst the Fifo is emptied of the packet ( reading during this period would cause all zeros to be read ) -- * -- * @param retry : WHD_TRUE if 802.11 device is to keep and resend packet -- * WHD_FALSE if 802.11 device is to drop packet -- * -- * @return WHD_SUCCESS if successful, otherwise error code -- */ --static whd_result_t whd_bus_sdio_abort_read(whd_driver_t whd_driver, whd_bool_t retry) --{ -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, read_aborts); -- -- /* Abort transfer on WLAN_FUNCTION */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOABORT, (uint8_t)1, -- (uint32_t)WLAN_FUNCTION) ); -- -- /* Send frame terminate */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_FRAME_CONTROL, (uint8_t)1, -- SFC_RF_TERM) ); -- -- /* If we want to retry message, send NAK */ -- if (retry == WHD_TRUE) -- { -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, (uint32_t)SDIO_TO_SB_MAIL_BOX, (uint8_t)1, SMB_NAK) ); -- } -- -- return WHD_SUCCESS; --} -- --whd_result_t whd_bus_sdio_read_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint8_t *value) --{ -- memset(value, 0, (size_t)value_length); -- return whd_bus_sdio_transfer(whd_driver, BUS_READ, function, address, value_length, value, RESPONSE_NEEDED); --} -- --whd_result_t whd_bus_sdio_poke_wlan(whd_driver_t whd_driver) --{ -- /*TODO: change 1<<3 to a register hash define */ -- return whd_bus_write_backplane_value(whd_driver, SDIO_TO_SB_MAILBOX, (uint8_t)4, (uint32_t)(1 << 3) ); --} -- --whd_result_t whd_bus_sdio_wakeup(whd_driver_t whd_driver) --{ -- return WHD_SUCCESS; --} -- --whd_result_t whd_bus_sdio_sleep(whd_driver_t whd_driver) --{ -- return WHD_SUCCESS; --} -- --static whd_result_t whd_bus_sdio_set_oob_interrupt(whd_driver_t whd_driver, uint8_t gpio_pin_number) --{ -- if (gpio_pin_number != 0) -- { -- /* Redirect to OOB interrupt to GPIO1 */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_GPIO_SELECT, (uint8_t)1, -- (uint32_t)0xF) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_GPIO_OUTPUT, (uint8_t)1, -- (uint32_t)0x0) ); -- -- /* Enable GPIOx (bit x) */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_GPIO_ENABLE, (uint8_t)1, -- (uint32_t)0x2) ); -- -- /* Set GPIOx (bit x) on Chipcommon GPIO Control register */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, CHIPCOMMON_GPIO_CONTROL, (uint8_t)4, -- (uint32_t)0x2) ); -- } -- -- return WHD_SUCCESS; --} -- --void whd_bus_sdio_init_stats(whd_driver_t whd_driver) --{ -- memset(&whd_driver->bus_priv->whd_bus_stats, 0, sizeof(whd_bus_stats_t) ); --} -- --whd_result_t whd_bus_sdio_print_stats(whd_driver_t whd_driver, whd_bool_t reset_after_print) --{ -- WPRINT_MACRO( ("Bus Stats.. \n" -- "cmd52:%" PRIu32 ", cmd53_read:%" PRIu32 ", cmd53_write:%" PRIu32 "\n" -- "cmd52_fail:%" PRIu32 ", cmd53_read_fail:%" PRIu32 ", cmd53_write_fail:%" PRIu32 "\n" -- "oob_intrs:%" PRIu32 ", sdio_intrs:%" PRIu32 ", error_intrs:%" PRIu32 ", read_aborts:%" PRIu32 -- "\n", -- whd_driver->bus_priv->whd_bus_stats.cmd52, whd_driver->bus_priv->whd_bus_stats.cmd53_read, -- whd_driver->bus_priv->whd_bus_stats.cmd53_write, -- whd_driver->bus_priv->whd_bus_stats.cmd52_fail, -- whd_driver->bus_priv->whd_bus_stats.cmd53_read_fail, -- whd_driver->bus_priv->whd_bus_stats.cmd53_write_fail, -- whd_driver->bus_priv->whd_bus_stats.oob_intrs, -- whd_driver->bus_priv->whd_bus_stats.sdio_intrs, -- whd_driver->bus_priv->whd_bus_stats.error_intrs, -- whd_driver->bus_priv->whd_bus_stats.read_aborts) ); -- -- if (reset_after_print == WHD_TRUE) -- { -- memset(&whd_driver->bus_priv->whd_bus_stats, 0, sizeof(whd_bus_stats_t) ); -- } -- -- return WHD_SUCCESS; --} -- --/* Waking the firmware up from Deep Sleep */ --whd_result_t whd_bus_sdio_reinit_stats(whd_driver_t whd_driver, whd_bool_t wake_from_firmware) --{ -- whd_result_t result = WHD_SUCCESS; -- uint8_t byte_data; -- uint32_t loop_count; -- loop_count = 0; -- -- /* Setup the backplane*/ -- loop_count = 0; -- -- do -- { -- /* Enable function 1 (backplane) */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, -- SDIO_FUNC_ENABLE_1) ); -- if (loop_count != 0) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- } -- -- CHECK_RETURN(whd_bus_read_register_value (whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, &byte_data) ); -- loop_count++; -- if (loop_count >= (uint32_t)F0_WORKING_TIMEOUT_MS) -- { -- WPRINT_WHD_ERROR( ("Timeout on CCCR update\n") ); -- return WHD_TIMEOUT; -- } -- } while (byte_data != (uint8_t)SDIO_FUNC_ENABLE_1); -- -- if (whd_driver->bus_priv->sdio_config.sdio_1bit_mode == WHD_FALSE) -- { -- /* Read the bus width and set to 4 bits */ -- CHECK_RETURN(whd_bus_read_register_value (whd_driver, BUS_FUNCTION, SDIOD_CCCR_BICTRL, (uint8_t)1, -- &byte_data) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_BICTRL, (uint8_t)1, -- (byte_data & (~BUS_SD_DATA_WIDTH_MASK) ) | BUS_SD_DATA_WIDTH_4BIT) ); -- /* NOTE: We don't need to change our local bus settings since we're not sending any data (only using CMD52) -- * until after we change the bus speed further down */ -- } -- -- /* Set the block size */ -- /* Wait till the backplane is ready */ -- loop_count = 0; -- while ( ( (result = whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ) == WHD_SUCCESS ) && -- ( (result = whd_bus_read_register_value (whd_driver, BUS_FUNCTION, SDIOD_CCCR_BLKSIZE_0, (uint8_t)1, -- &byte_data) ) == WHD_SUCCESS ) && -- (byte_data != (uint8_t)SDIO_64B_BLOCK) && -- (loop_count < (uint32_t)F0_WORKING_TIMEOUT_MS) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- if (loop_count >= (uint32_t)F0_WORKING_TIMEOUT_MS) -- { -- /* If the system fails here, check the high frequency crystal is working */ -- WPRINT_WHD_ERROR( ("Timeout while setting block size\n") ); -- return WHD_TIMEOUT; -- } -- } -- -- CHECK_RETURN(result); -- -- WPRINT_WHD_DEBUG( ("Modding registers for blocks\n") ); -- -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_F1BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_F2BLKSIZE_0, (uint8_t)1, -- (uint32_t)SDIO_64B_BLOCK) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_F2BLKSIZE_1, (uint8_t)1, -- (uint32_t)0) ); /* Function 2 = 64 */ -- -- /* Enable/Disable Client interrupts */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_INTEN, (uint8_t)1, -- INTR_CTL_MASTER_EN | INTR_CTL_FUNC1_EN | INTR_CTL_FUNC2_EN) ); -- -- -- if (whd_driver->bus_priv->sdio_config.high_speed_sdio_clock) -- { -- WPRINT_WHD_DEBUG( ("SDIO HS clock enable\n") ); -- -- /* This code is required if we want more than 25 MHz clock */ -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_SPEED_CONTROL, 1, &byte_data) ); -- if ( (byte_data & 0x1) != 0 ) -- { -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_SPEED_CONTROL, 1, -- byte_data | SDIO_SPEED_EHS) ); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Error writing to WLAN register, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_BUS_READ_REGISTER_ERROR; -- } -- } /* HIGH_SPEED_SDIO_CLOCK */ -- -- /* Wait till the backplane is ready */ -- loop_count = 0; -- while ( ( (result = whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IORDY, (uint8_t)1, -- &byte_data) ) == WHD_SUCCESS ) && -- ( (byte_data & SDIO_FUNC_READY_1) == 0 ) && -- (loop_count < (uint32_t)F1_AVAIL_TIMEOUT_MS) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- } -- -- if (loop_count >= (uint32_t)F1_AVAIL_TIMEOUT_MS) -- { -- WPRINT_WHD_ERROR( ("Timeout while waiting for backplane to be ready\n") ); -- return WHD_TIMEOUT; -- } -- CHECK_RETURN(result); -- -- /* Set the ALP */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- (uint32_t)(SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_ALP_AVAIL_REQ | -- SBSDIO_FORCE_ALP) ) ); -- loop_count = 0; -- while ( ( (result = whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- &byte_data) ) != WHD_SUCCESS ) || -- ( ( (byte_data & SBSDIO_ALP_AVAIL) == 0 ) && -- (loop_count < (uint32_t)ALP_AVAIL_TIMEOUT_MS) ) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- } -- if (loop_count >= (uint32_t)ALP_AVAIL_TIMEOUT_MS) -- { -- WPRINT_WHD_ERROR( ("Timeout while waiting for alp clock\n") ); -- return WHD_TIMEOUT; -- } -- CHECK_RETURN(result); -- -- /* Clear request for ALP */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, 0) ); -- -- /* Disable the extra SDIO pull-ups */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_PULL_UP, (uint8_t)1, 0) ); -- -- /* Enable F1 and F2 */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, -- SDIO_FUNC_ENABLE_1 | SDIO_FUNC_ENABLE_2) ); -- -- /* Setup host-wake signals */ -- CHECK_RETURN(whd_bus_sdio_init_oob_intr(whd_driver) ); -- -- /* Enable F2 interrupt only */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_INTEN, (uint8_t)1, -- INTR_CTL_MASTER_EN | INTR_CTL_FUNC2_EN) ); -- -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IORDY, (uint8_t)1, &byte_data) ); -- -- result = whd_bus_sdio_download_firmware(whd_driver); -- -- if (result != WHD_SUCCESS) -- { -- /* either an error or user abort */ -- WPRINT_WHD_DEBUG( ("FW download failed\n") ); -- return result; -- } -- -- /* Wait for F2 to be ready */ -- loop_count = 0; -- while ( ( (result = whd_bus_read_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IORDY, (uint8_t)1, -- &byte_data) ) != WHD_SUCCESS ) || -- ( ( (byte_data & SDIO_FUNC_READY_2) == 0 ) && -- (loop_count < (uint32_t)F2_READY_TIMEOUT_MS) ) ) -- { -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- loop_count++; -- } -- -- if (loop_count >= (uint32_t)F2_READY_TIMEOUT_MS) -- { -- WPRINT_WHD_DEBUG( ("Timeout while waiting for function 2 to be ready\n") ); -- -- if (WHD_TRUE == wake_from_firmware) -- { -- /* If your system fails here, it could be due to incorrect NVRAM variables. -- * Check which 'wifi_nvram_image.h' file your platform is using, and -- * check that it matches the WLAN device on your platform, including the -- * crystal frequency. -- */ -- WPRINT_WHD_ERROR( ("F2 failed on wake fr FW\n") ); -- /* Reachable after hitting assert */ -- return WHD_TIMEOUT; -- } -- /* Else: Ignore this failure if we're doing a reinit due to host wake: Linux DHD also ignores */ -- -- } -- -- /* Do chip specific init */ -- CHECK_RETURN(whd_chip_specific_init(whd_driver) ); -- -- /* Ensure Bus is up */ -- CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) ); -- -- /* Allow bus to go to sleep */ -- CHECK_RETURN(whd_allow_wlan_bus_to_sleep(whd_driver) ); -- -- WPRINT_WHD_INFO( ("whd_bus_reinit Completed \n") ); -- return WHD_SUCCESS; --} -- --uint8_t whd_bus_sdio_backplane_read_padd_size(whd_driver_t whd_driver) --{ -- return WHD_BUS_SDIO_BACKPLANE_READ_PADD_SIZE; --} -- --whd_bool_t whd_bus_sdio_use_status_report_scheme(whd_driver_t whd_driver) --{ -- return WHD_FALSE; --} -- --uint32_t whd_bus_sdio_get_max_transfer_size(whd_driver_t whd_driver) --{ -- return WHD_BUS_SDIO_MAX_BACKPLANE_TRANSFER_SIZE; --} -- --static void whd_bus_sdio_irq_handler(void *handler_arg, cyhal_sdio_irq_event_t event) --{ -- whd_driver_t whd_driver = (whd_driver_t)handler_arg; -- -- /* WHD registered only for CY_CYHAL_SDIO_CARD_INTERRUPT */ -- if (event != CYHAL_SDIO_CARD_INTERRUPT) -- { -- WPRINT_WHD_ERROR( ("Unexpected interrupt event %d\n", event) ); -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, error_intrs); -- return; -- } -- -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, sdio_intrs); -- -- /* call thread notify to wake up WHD thread */ -- whd_thread_notify_irq(whd_driver); --} -- --whd_result_t whd_bus_sdio_irq_register(whd_driver_t whd_driver) --{ -- cyhal_sdio_register_irq(whd_driver->bus_priv->sdio_obj, whd_bus_sdio_irq_handler, whd_driver); -- return WHD_SUCCESS; --} -- --whd_result_t whd_bus_sdio_irq_enable(whd_driver_t whd_driver, whd_bool_t enable) --{ -- cyhal_sdio_irq_enable(whd_driver->bus_priv->sdio_obj, CYHAL_SDIO_CARD_INTERRUPT, enable); -- return WHD_SUCCESS; --} -- --static void whd_bus_sdio_oob_irq_handler(void *arg, cyhal_gpio_irq_event_t event) --{ -- whd_driver_t whd_driver = (whd_driver_t)arg; -- const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config; -- const cyhal_gpio_irq_event_t expected_event = (config->is_falling_edge == WHD_TRUE) -- ? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE; -- -- if (event != expected_event) -- { -- WPRINT_WHD_ERROR( ("Unexpected interrupt event %d\n", event) ); -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, error_intrs); -- return; -- } -- -- WHD_BUS_STATS_INCREMENT_VARIABLE(whd_driver->bus_priv, oob_intrs); -- -- /* Call thread notify to wake up WHD thread */ -- whd_thread_notify_irq(whd_driver); --} -- --static whd_result_t whd_bus_sdio_register_oob_intr(whd_driver_t whd_driver) --{ -- const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config; -- -- cyhal_gpio_init(config->host_oob_pin, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_NONE, 0); -- cyhal_gpio_register_irq(config->host_oob_pin, config->intr_priority, whd_bus_sdio_oob_irq_handler, -- whd_driver); -- -- return WHD_SUCCESS; --} -- --static whd_result_t whd_bus_sdio_unregister_oob_intr(whd_driver_t whd_driver) --{ -- const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config; -- -- cyhal_gpio_register_irq(config->host_oob_pin, config->intr_priority, NULL, NULL); -- -- return WHD_SUCCESS; --} -- --static whd_result_t whd_bus_sdio_enable_oob_intr(whd_driver_t whd_driver, whd_bool_t enable) --{ -- const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config; -- const cyhal_gpio_irq_event_t event = -- (config->is_falling_edge == WHD_TRUE) ? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE; -- -- cyhal_gpio_irq_enable(config->host_oob_pin, event, (enable == WHD_TRUE) ? true : false); -- -- return WHD_SUCCESS; --} -- --static whd_result_t whd_bus_sdio_init_oob_intr(whd_driver_t whd_driver) --{ -- const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config; -- uint8_t sepintpol; -- -- /* OOB isn't configured so bail */ -- if (config->host_oob_pin == CYHAL_NC_PIN_VALUE) -- return WHD_SUCCESS; -- -- /* Choose out-of-band interrupt polarity */ -- if (config->is_falling_edge == WHD_FALSE) -- { -- sepintpol = SEP_INTR_CTL_POL; -- } -- else -- { -- sepintpol = 0; -- } -- -- /* Set OOB interrupt to the correct WLAN GPIO pin (default to GPIO0) */ -- if (config->dev_gpio_sel) -- CHECK_RETURN(whd_bus_sdio_set_oob_interrupt(whd_driver, config->dev_gpio_sel) ); -- -- /* Enable out-of-band interrupt on the device */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_SEP_INT_CTL, (uint8_t)1, -- SEP_INTR_CTL_MASK | SEP_INTR_CTL_EN | sepintpol) ); -- -- /* Register and enable OOB */ -- /* XXX Remove this when BSP377 is implemented */ -- CHECK_RETURN(whd_bus_sdio_register_oob_intr(whd_driver) ); -- CHECK_RETURN(whd_bus_sdio_enable_oob_intr(whd_driver, WHD_TRUE) ); -- -- return WHD_SUCCESS; --} -- --static whd_result_t whd_bus_sdio_deinit_oob_intr(whd_driver_t whd_driver) --{ -- const whd_oob_config_t *config = &whd_driver->bus_priv->sdio_config.oob_config; -- -- if (config->host_oob_pin != CYHAL_NC_PIN_VALUE) -- { -- CHECK_RETURN(whd_bus_sdio_enable_oob_intr(whd_driver, WHD_FALSE) ); -- CHECK_RETURN(whd_bus_sdio_unregister_oob_intr(whd_driver) ); -- } -- -- return WHD_SUCCESS; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.h -deleted file mode 100644 -index f276334a51..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_sdio_protocol.h -+++ /dev/null -@@ -1,229 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "whd.h" --#include "bus_protocols/whd_bus_protocol_interface.h" -- --#ifndef INCLUDED_SDIO_WHD_BUS_PROTOCOL_H --#define INCLUDED_SDIO_WHD_BUS_PROTOCOL_H -- --#ifdef __cplusplus --extern "C" { --#endif -- --/****************************************************** --* Macros --******************************************************/ --#define BIT_MASK(x) ( (1 << x) - 1 ) -- --#define WHD_BUS_HEADER_SIZE (0) -- --#define WHD_BUS_SDIO_MAX_BACKPLANE_TRANSFER_SIZE (1536) --#define WHD_BUS_SDIO_BACKPLANE_READ_PADD_SIZE (0) -- --/****************************************************** --* Structures --******************************************************/ --#pragma pack(1) --typedef struct --{ -- unsigned char stuff_bits; -- unsigned int ocr : 24; --} sdio_cmd5_argument_t; -- --typedef struct --{ -- unsigned int _unique2 : 9; /* 0-8 */ -- unsigned int register_address : 17; /* 9-25 */ -- unsigned int _unique : 2; /* 26-27 */ -- unsigned int function_number : 3; /* 28-30 */ -- unsigned int rw_flag : 1; /* 31 */ --} sdio_cmd5x_argument_t; -- --typedef struct --{ -- uint8_t write_data; /* 0 - 7 */ -- unsigned int _stuff2 : 1; /* 8 */ -- unsigned int register_address : 17; /* 9-25 */ -- unsigned int _stuff : 1; /* 26 */ -- unsigned int raw_flag : 1; /* 27 */ -- unsigned int function_number : 3; /* 28-30 */ -- unsigned int rw_flag : 1; /* 31 */ --} whd_bus_sdio_cmd52_argument_t; -- --typedef struct --{ -- unsigned int count : 9; /* 0-8 */ -- unsigned int register_address : 17; /* 9-25 */ -- unsigned int op_code : 1; /* 26 */ -- unsigned int block_mode : 1; /* 27 */ -- unsigned int function_number : 3; /* 28-30 */ -- unsigned int rw_flag : 1; /* 31 */ --} whd_bus_sdio_cmd53_argument_t; -- --typedef union --{ -- uint32_t value; -- sdio_cmd5_argument_t cmd5; -- sdio_cmd5x_argument_t cmd5x; -- whd_bus_sdio_cmd52_argument_t cmd52; -- whd_bus_sdio_cmd53_argument_t cmd53; --} sdio_cmd_argument_t; -- --typedef struct --{ -- unsigned int ocr : 24; /* 0-23 */ -- unsigned int stuff_bits : 3; /* 24-26 */ -- unsigned int memory_present : 1; /* 27 */ -- unsigned int function_count : 3; /* 28-30 */ -- unsigned int c : 1; /* 31 */ --} sdio_response4_t; -- --typedef struct --{ -- uint8_t data; /* 0-7 */ -- uint8_t response_flags; /* 8-15 */ -- uint16_t stuff; /* 16-31 */ --} sdio_response5_t; -- --typedef struct --{ -- uint16_t card_status; /* 0-15 */ -- uint16_t rca; /* 16-31 */ --} sdio_response6_t; -- --typedef union --{ -- uint32_t value; -- sdio_response4_t r4; -- sdio_response5_t r5; -- sdio_response6_t r6; --} sdio_response_t; -- --typedef enum --{ -- SDIO_BLOCK_MODE = (0 << 2), /* These are STM32 implementation specific */ -- SDIO_BYTE_MODE = (1 << 2) /* These are STM32 implementation specific */ --} sdio_transfer_mode_t; -- --typedef enum --{ -- SDIO_1B_BLOCK = 1, SDIO_2B_BLOCK = 2, SDIO_4B_BLOCK = 4, SDIO_8B_BLOCK = 8, SDIO_16B_BLOCK = 16, -- SDIO_32B_BLOCK = 32, SDIO_64B_BLOCK = 64, SDIO_128B_BLOCK = 128, SDIO_256B_BLOCK = 256, SDIO_512B_BLOCK = 512, -- SDIO_1024B_BLOCK = 1024, SDIO_2048B_BLOCK = 2048 --} sdio_block_size_t; -- --typedef enum --{ -- RESPONSE_NEEDED, NO_RESPONSE --} sdio_response_needed_t; -- -- --#pragma pack() -- --/****************************************************** --* Macros --******************************************************/ --#define WHD_BUS_STATS_INCREMENT_VARIABLE(bus_priv, var) \ -- do { bus_priv->whd_bus_stats.var++; } while (0) -- --#define WHD_BUS_STATS_CONDITIONAL_INCREMENT_VARIABLE(bus_priv, condition, var) \ -- do { if (condition){ bus_priv->whd_bus_stats.var++; }} while (0) -- --typedef struct --{ -- uint32_t cmd52; /* Number of cmd52 reads/writes issued */ -- uint32_t cmd53_read; /* Number of cmd53 reads */ -- uint32_t cmd53_write; /* Number of cmd53 writes */ -- uint32_t cmd52_fail; /* Number of cmd52 read/write fails */ -- uint32_t cmd53_read_fail; /* Number of cmd53 read fails */ -- uint32_t cmd53_write_fail; /* Number of cmd53 write fails */ -- uint32_t oob_intrs; /* Number of OOB interrupts generated by wlan chip */ -- uint32_t sdio_intrs; /* Number of SDIO interrupts generated by wlan chip */ -- uint32_t error_intrs; /* Number of SDIO error interrupts generated by wlan chip */ -- uint32_t read_aborts; /* Number of times read aborts are called */ --} whd_bus_stats_t; -- --/****************************************************** --* Structures --******************************************************/ -- --/****************************************************** --* Function declarations --******************************************************/ --/* Initialisation functions */ --extern whd_result_t whd_bus_sdio_init(whd_driver_t whd_driver); --extern whd_result_t whd_bus_sdio_resume_after_deep_sleep(whd_driver_t whd_driver); --extern whd_result_t whd_bus_sdio_deinit(whd_driver_t whd_driver); -- --/* Device register access functions */ --extern whd_result_t whd_bus_sdio_write_backplane_value(whd_driver_t whd_driver, uint32_t address, -- uint8_t register_length, uint32_t value); --extern whd_result_t whd_bus_sdio_read_backplane_value(whd_driver_t whd_driver, uint32_t address, -- uint8_t register_length, uint8_t *value); --extern whd_result_t whd_bus_sdio_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, -- uint32_t address, uint8_t value_length, uint32_t value); --extern whd_result_t whd_bus_sdio_read_register_value(whd_driver_t whd_driver, whd_bus_function_t function, -- uint32_t address, uint8_t value_length, uint8_t *value); -- --/* Device data transfer functions */ --extern whd_result_t whd_bus_sdio_send_buffer(whd_driver_t whd_driver, whd_buffer_t buffer); --extern whd_result_t whd_bus_sdio_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t size, -- whd_transfer_bytes_packet_t *data); --extern whd_result_t whd_bus_sdio_transfer_backplane_bytes(whd_driver_t whd_driver, -- whd_bus_transfer_direction_t direction, uint32_t address, -- uint32_t size, uint8_t *data); -- --/* Frame transfer function */ --extern whd_result_t whd_bus_sdio_read_frame(whd_driver_t whd_driver, whd_buffer_t *buffer); -- --extern whd_result_t whd_bus_sdio_poke_wlan(whd_driver_t whd_driver); --extern uint32_t whd_bus_sdio_packet_available_to_read(whd_driver_t whd_driver); --extern whd_result_t whd_bus_sdio_ack_interrupt(whd_driver_t whd_driver, uint32_t intstatus); -- --extern whd_result_t whd_bus_sdio_set_backplane_window(whd_driver_t whd_driver, uint32_t addr); -- --extern void whd_delayed_bus_release_schedule_update(whd_driver_t whd_driver, whd_bool_t is_scheduled); --#define DELAYED_BUS_RELEASE_SCHEDULE(whd_driver, schedule) \ -- do { whd_delayed_bus_release_schedule_update(whd_driver, schedule); } while (0) -- --extern whd_bool_t whd_bus_sdio_wake_interrupt_present(whd_driver_t whd_driver); -- --extern whd_result_t whd_bus_sdio_wakeup(whd_driver_t whd_driver); --extern whd_result_t whd_bus_sdio_sleep(whd_driver_t whd_driver); -- --extern void whd_bus_sdio_init_stats(whd_driver_t whd_driver); --extern whd_result_t whd_bus_sdio_print_stats(whd_driver_t whd_driver, whd_bool_t reset_after_print); --extern whd_result_t whd_bus_sdio_reinit_stats(whd_driver_t whd_driver, whd_bool_t wake_from_firmware); -- --uint8_t whd_bus_sdio_backplane_read_padd_size(whd_driver_t whd_driver); -- --extern whd_result_t whd_bus_sdio_wait_for_wlan_event(whd_driver_t whd_driver, -- cy_semaphore_t *transceive_semaphore); --extern whd_bool_t whd_bus_sdio_use_status_report_scheme(whd_driver_t whd_driver); --extern uint32_t whd_bus_sdio_get_max_transfer_size(whd_driver_t whd_driver); --/****************************************************** --* Global variables --******************************************************/ -- --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_SDIO_WHD_BUS_PROTOCOL_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.c -deleted file mode 100644 -index be272116bb..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.c -+++ /dev/null -@@ -1,1038 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Broadcom WLAN SPI Protocol interface -- * -- * Implements the WHD Bus Protocol Interface for SPI -- * Provides functions for initialising, de-intitialising 802.11 device, -- * sending/receiving raw packets etc -- */ -- --#include --#include /* For memcpy */ -- --#include "cy_result.h" --#include "cyabs_rtos.h" --#include "cyhal_gpio.h" -- --#include "whd_thread.h" --#include "whd_chip.h" --#include "whd_sdpcm.h" --#include "whd_chip_constants.h" --#include "whd_int.h" --#include "whd_bus_spi_protocol.h" --#include "whd_bus_common.h" --#include "whd_chip_reg.h" --#include "whd_debug.h" --#include "whd_bus.h" --#include "whd_spi.h" --#include "whd_sdio.h" --#include "whd_buffer_api.h" --#include "whd_debug.h" --#include "whd_types_int.h" -- -- -- --/****************************************************** --* Constants --******************************************************/ -- --#define F2_READY_TIMEOUT_MS (1000) --#define F2_READY_TIMEOUT_LOOPS (1000) --#define F1_READY_TIMEOUT_LOOPS (1000) --#define FEADBEAD_TIMEOUT_MS (500) --#define ALP_AVAIL_TIMEOUT_MS (100) -- --/* function 1 OCP space */ --#define SBSDIO_SB_OFT_ADDR_MASK 0x07FFF /* sb offset addr is <= 15 bits, 32k */ --#define SBSDIO_SB_OFT_ADDR_LIMIT 0x08000 --#define SBSDIO_SB_ACCESS_2_4B_FLAG 0x08000 /* with b15, maps to 32-bit SB access */ -- --#define HT_AVAIL_TIMEOUT_MS (1000) -- --/* Taken from FALCON_5_90_195_26 dhd/sys/dhd_sdio.c. For 43362, MUST be >= 8 and word-aligned otherwise dongle fw crashes */ --#define SPI_F2_WATERMARK (32) -- --#define GSPI_PACKET_AVAILABLE (1 << 8) --#define GSPI_UNDERFLOW (1 << 1) -- --#define SWAP32_16BIT_PARTS(val) ( (uint32_t)( ( ( (uint32_t)(val) ) >> 16 ) + \ -- ( ( ( (uint32_t)(val) ) & 0xffff ) << 16 ) ) ) -- --#define WHD_BUS_GSPI_PACKET_OVERHEAD (sizeof(whd_buffer_header_t) ) -- --#define MAX_GSPI_TRANSFER_LEN 2048 -- --#define H32TO16LE(x) ( ( uint32_t )( ( ( ( uint32_t )(x) & ( uint32_t )0x000000ffU ) << 8 ) | \ -- ( ( ( uint32_t )(x) & ( uint32_t )0x0000ff00U ) >> 8 ) | \ -- ( ( ( uint32_t )(x) & ( uint32_t )0x00ff0000U ) << 8 ) | \ -- ( ( ( uint32_t )(x) & ( uint32_t )0xff000000U ) >> 8 ) ) ) -- --#define WHD_THREAD_POLL_TIMEOUT (CY_RTOS_NEVER_TIMEOUT) -- --#define WHD_THREAD_POKE_TIMEOUT (100) -- --typedef enum --{ -- GSPI_INCREMENT_ADDRESS = 1, GSPI_FIXED_ADDRESS = 0 --} gspi_transfer_access_t; -- --/****************************************************** --* Structures --******************************************************/ -- --#pragma pack(1) -- --typedef struct --{ -- whd_bus_gspi_header_t header; -- uint8_t response_delay[4]; --} gspi_backplane_f1_read_header_t; -- --#pragma pack() -- --typedef struct --{ -- gspi_backplane_f1_read_header_t gspi_header; -- uint32_t data[1]; --} gspi_backplane_f1_read_packet_t; -- --/****************************************************** --* Static variables --******************************************************/ -- --static const uint8_t whd_bus_gspi_command_mapping[] = { 0, 1 }; -- --/****************************************************** --* Structures --******************************************************/ --struct whd_bus_priv --{ -- whd_spi_config_t spi_config; -- cyhal_spi_t *spi_obj; -- --}; -- --/****************************************************** --* Variables --******************************************************/ -- --/****************************************************** --* Static Function Declarations --******************************************************/ -- --static whd_result_t whd_spi_download_firmware(whd_driver_t whd_driver); --static whd_result_t whd_bus_spi_transfer_buffer(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, whd_buffer_t buffer); -- --/****************************************************** --* Global Function definitions --******************************************************/ -- --uint32_t whd_bus_spi_attach(whd_driver_t whd_driver, whd_spi_config_t *whd_spi_config, cyhal_spi_t *spi_obj) --{ -- struct whd_bus_info *whd_bus_info; -- -- if (whd_driver->bus_priv->spi_config.oob_config.host_oob_pin == CYHAL_NC_PIN_VALUE) -- { -- WPRINT_WHD_ERROR( ("OOB interrupt pin argument must be provided in %s\n", __FUNCTION__) ); -- return WHD_BADARG; -- } -- -- whd_bus_info = (whd_bus_info_t *)malloc(sizeof(whd_bus_info_t) ); -- -- if (whd_bus_info == NULL) -- { -- WPRINT_WHD_ERROR( ("Memory allocation failed for whd_bus_info in %s\n", __FUNCTION__) ); -- return WHD_BUFFER_UNAVAILABLE_PERMANENT; -- } -- memset(whd_bus_info, 0, sizeof(whd_bus_info_t) ); -- -- whd_driver->bus_if = whd_bus_info; -- -- whd_driver->bus_priv = (struct whd_bus_priv *)malloc(sizeof(struct whd_bus_priv) ); -- -- if (whd_driver->bus_priv == NULL) -- { -- WPRINT_WHD_ERROR( ("Memory allocation failed for whd_bus_priv in %s\n", __FUNCTION__) ); -- return WHD_BUFFER_UNAVAILABLE_PERMANENT; -- } -- memset(whd_driver->bus_priv, 0, sizeof(struct whd_bus_priv) ); -- -- /* Pass the SPI object to bus private spi_obj pointer */ -- whd_driver->bus_priv->spi_obj = spi_obj; -- whd_driver->bus_priv->spi_config = *whd_spi_config; -- -- whd_bus_info->whd_bus_init_fptr = whd_bus_spi_init; -- whd_bus_info->whd_bus_deinit_fptr = whd_bus_spi_deinit; -- -- whd_bus_info->whd_bus_write_backplane_value_fptr = whd_bus_spi_write_backplane_value; -- whd_bus_info->whd_bus_read_backplane_value_fptr = whd_bus_spi_read_backplane_value; -- whd_bus_info->whd_bus_write_register_value_fptr = whd_bus_spi_write_register_value; -- whd_bus_info->whd_bus_read_register_value_fptr = whd_bus_spi_read_register_value; -- -- whd_bus_info->whd_bus_send_buffer_fptr = whd_bus_spi_send_buffer; -- whd_bus_info->whd_bus_transfer_bytes_fptr = whd_bus_spi_transfer_bytes; -- -- whd_bus_info->whd_bus_read_frame_fptr = whd_bus_spi_read_frame; -- -- whd_bus_info->whd_bus_packet_available_to_read_fptr = whd_bus_spi_packet_available_to_read; -- whd_bus_info->whd_bus_poke_wlan_fptr = whd_bus_spi_poke_wlan; -- whd_bus_info->whd_bus_wait_for_wlan_event_fptr = whd_bus_spi_wait_for_wlan_event; -- -- whd_bus_info->whd_bus_ack_interrupt_fptr = whd_bus_spi_ack_interrupt; -- whd_bus_info->whd_bus_wake_interrupt_present_fptr = whd_bus_spi_wake_interrupt_present; -- -- whd_bus_info->whd_bus_wakeup_fptr = whd_bus_spi_wakeup; -- whd_bus_info->whd_bus_sleep_fptr = whd_bus_spi_sleep; -- -- whd_bus_info->whd_bus_backplane_read_padd_size_fptr = whd_bus_spi_backplane_read_padd_size; -- whd_bus_info->whd_bus_use_status_report_scheme_fptr = whd_bus_spi_use_status_report_scheme; -- -- whd_bus_info->whd_bus_get_max_transfer_size_fptr = whd_bus_spi_get_max_transfer_size; -- -- whd_bus_info->whd_bus_init_stats_fptr = whd_bus_spi_init_stats; -- whd_bus_info->whd_bus_print_stats_fptr = whd_bus_spi_print_stats; -- whd_bus_info->whd_bus_reinit_stats_fptr = whd_bus_spi_reinit_stats; -- whd_bus_info->whd_bus_irq_register_fptr = whd_bus_spi_irq_register; -- whd_bus_info->whd_bus_irq_enable_fptr = whd_bus_spi_irq_enable; -- -- return WHD_SUCCESS; --} -- --void whd_bus_spi_detach(whd_driver_t whd_driver) --{ -- if (whd_driver->bus_if != NULL) -- { -- free(whd_driver->bus_if); -- whd_driver->bus_if = NULL; -- } -- if (whd_driver->bus_priv != NULL) -- { -- free(whd_driver->bus_priv); -- whd_driver->bus_priv = NULL; -- } --} -- --whd_result_t whd_bus_spi_send_buffer(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- whd_result_t result = whd_bus_spi_transfer_buffer(whd_driver, BUS_WRITE, WLAN_FUNCTION, 0, buffer); -- CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) ); -- if (result == WHD_SUCCESS) -- { -- DELAYED_BUS_RELEASE_SCHEDULE (whd_driver, WHD_TRUE); -- } -- CHECK_RETURN(result); -- -- return WHD_SUCCESS; --} -- --/* -- * Perform a transfer on the gSPI bus -- * Prerequisites: length < MAX_GSPI_TRANSFER_LEN -- */ --static whd_result_t whd_bus_spi_transfer_buffer(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, whd_buffer_t buffer) --{ -- uint32_t *temp; -- whd_result_t result; -- uint16_t newsize; -- whd_buffer_header_t *header = (whd_buffer_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- whd_bus_gspi_header_t *gspi_header = -- (whd_bus_gspi_header_t *)( (char *)header->bus_header + MAX_BUS_HEADER_SIZE - sizeof(whd_bus_gspi_header_t) ); -- size_t transfer_size; -- -- uint16_t size = ( uint16_t )(whd_buffer_get_current_piece_size(whd_driver, buffer) - sizeof(whd_buffer_header_t) ); -- -- /* Form the gSPI header */ -- *gspi_header = -- ( whd_bus_gspi_header_t )( ( uint32_t )( (whd_bus_gspi_command_mapping[(int)direction] & 0x1) << 31 ) | -- ( uint32_t )( (GSPI_INCREMENT_ADDRESS & 0x1) << 30 ) | -- ( uint32_t )( (function & 0x3) << 28 ) | -- ( uint32_t )( (address & 0x1FFFF) << 11 ) | ( uint32_t )( (size & 0x7FF) << 0 ) ); -- -- /* Reshuffle the bits if we're not in 32 bit mode */ -- if (whd_driver->bus_gspi_32bit == WHD_FALSE) -- { -- /* Note: This typecast should always be valid if the buffer containing the GSpi packet has been correctly declared as 32-bit aligned */ -- temp = (uint32_t *)gspi_header; -- *temp = H32TO16LE(*temp); -- } -- -- /* Round size up to 32-bit alignment */ -- newsize = (uint16_t)ROUND_UP(size, 4); -- -- /* Send the data */ -- if (direction == BUS_WRITE) -- { -- /* Wait for FIFO to be ready to accept data */ -- if (function == WLAN_FUNCTION) -- { -- uint32_t whd_bus_gspi_status; -- uint32_t loop_count = 0; -- while ( ( (result = -- whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_STATUS_REGISTER, (uint8_t)4, -- (uint8_t *)&whd_bus_gspi_status) ) == WHD_SUCCESS ) && -- ( (whd_bus_gspi_status & (1 << 5) ) == 0 ) && -- (loop_count < ( uint32_t )F2_READY_TIMEOUT_LOOPS) ) -- { -- loop_count++; -- } -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error reading register value, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- if (loop_count >= ( uint32_t )F2_READY_TIMEOUT_LOOPS) -- { -- WPRINT_WHD_ERROR( ("Timeout waiting for data FIFO to be ready\n") ); -- return WHD_TIMEOUT; -- } -- } -- -- } -- -- transfer_size = (size_t)(newsize + sizeof(whd_bus_gspi_header_t) ); -- -- /* Send the data */ -- if (direction == BUS_READ) -- { -- result = cyhal_spi_transfer(whd_driver->bus_priv->spi_obj, NULL, 0, (uint8_t *)gspi_header, -- transfer_size, 0); -- } -- else -- { -- result = cyhal_spi_transfer(whd_driver->bus_priv->spi_obj, (uint8_t *)gspi_header, transfer_size, NULL, -- 0, 0); -- } -- -- return result; --} -- --whd_result_t whd_bus_spi_poke_wlan(whd_driver_t whd_driver) --{ -- return WHD_SUCCESS; --} -- --whd_result_t whd_bus_spi_ack_interrupt(whd_driver_t whd_driver, uint32_t intstatus) --{ -- return whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SPI_INTERRUPT_REGISTER, (uint8_t)2, intstatus); --} -- --uint32_t whd_bus_spi_packet_available_to_read(whd_driver_t whd_driver) --{ -- uint16_t interrupt_register; -- -- CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) ); -- -- /* Read the interrupt register */ -- if (whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_INTERRUPT_REGISTER, (uint8_t)2, -- (uint8_t *)&interrupt_register) != WHD_SUCCESS) -- { -- goto return_with_error; -- } -- -- if ( (interrupt_register & 0x0086) != 0 ) /* This should be 0x87, but occasional "data not available" errors are flagged seemingly for no reason */ -- { -- /* Error condition detected */ -- WPRINT_WHD_DEBUG( ("Bus error condition detected\n") ); -- } -- -- /* Clear interrupt register */ -- if (interrupt_register != 0) -- { -- if (whd_bus_spi_write_register_value(whd_driver, BUS_FUNCTION, SPI_INTERRUPT_REGISTER, (uint8_t)2, -- interrupt_register) != WHD_SUCCESS) -- { -- goto return_with_error; -- } -- } -- -- return ( uint32_t )( (interrupt_register) & (F2_PACKET_AVAILABLE) ); -- --return_with_error: whd_assert("Error accessing backplane", 0 != 0); -- return 0; --} -- --whd_result_t whd_bus_spi_read_frame(whd_driver_t whd_driver, whd_buffer_t *buffer) --{ -- uint32_t whd_bus_gspi_status; -- whd_result_t result; -- uint32_t whd_gspi_bytes_pending; -- -- /* Ensure the wlan backplane bus is up */ -- CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) ); -- -- do -- { -- result = whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_STATUS_REGISTER, (uint8_t)4, -- (uint8_t *)&whd_bus_gspi_status); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error reading register value, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- } while (whd_bus_gspi_status == 0xFFFFFFFF); -- -- if ( (whd_bus_gspi_status & GSPI_PACKET_AVAILABLE) != 0 ) -- { -- if ( ( ( (whd_bus_gspi_status >> 9) & 0x7FF ) == 0 ) || -- ( ( (whd_bus_gspi_status >> 9) & 0x7FF ) > (WHD_LINK_MTU - WHD_BUS_GSPI_PACKET_OVERHEAD) ) || -- (whd_bus_gspi_status & GSPI_UNDERFLOW) ) -- { -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BACKPLANE_FUNCTION, SPI_FRAME_CONTROL, 1, -- (1 << 0) ) ); -- return WHD_NO_PACKET_TO_RECEIVE; -- } -- } -- -- whd_gspi_bytes_pending = 0; -- -- if ( (whd_bus_gspi_status & GSPI_PACKET_AVAILABLE) != 0 ) -- { -- whd_gspi_bytes_pending = ( (whd_bus_gspi_status >> 9) & 0x7FF ); -- } -- -- if (whd_gspi_bytes_pending == 0) -- { -- return WHD_NO_PACKET_TO_RECEIVE; -- } -- -- /* Allocate a suitable buffer */ -- result = whd_host_buffer_get(whd_driver, buffer, WHD_NETWORK_RX, -- (unsigned short)(whd_gspi_bytes_pending + WHD_BUS_GSPI_PACKET_OVERHEAD), WHD_FALSE); -- -- if (result != WHD_SUCCESS) -- { -- /* Read out the first 12 bytes to get the bus credit information */ -- uint8_t temp_buffer[12 + MAX_BUS_HEADER_SIZE]; -- CHECK_RETURN(whd_bus_spi_transfer_bytes(whd_driver, BUS_READ, WLAN_FUNCTION, 0, 12, -- (whd_transfer_bytes_packet_t *)temp_buffer) ); -- -- /* Abort the transfer to force the packet to be dropped */ -- if (whd_gspi_bytes_pending > 12) -- { -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BACKPLANE_FUNCTION, SPI_FRAME_CONTROL, 1, -- (1 << 0) ) ); -- } -- -- /* Process bus data credit information */ -- whd_sdpcm_update_credit(whd_driver, (uint8_t *)(temp_buffer + sizeof(whd_bus_header_t) ) ); -- WPRINT_WHD_ERROR( ("Packet buffer allocation failed in %s at %d \n", __func__, __LINE__) ); -- return result; -- } -- -- result = whd_bus_spi_transfer_buffer(whd_driver, BUS_READ, WLAN_FUNCTION, 0, *buffer); -- if (result != WHD_SUCCESS) -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, *buffer, WHD_NETWORK_RX) ); -- WPRINT_WHD_ERROR( ("SPI buffer transfer failed in %s at %d \n", __func__, __LINE__) ); -- return result; -- } -- -- DELAYED_BUS_RELEASE_SCHEDULE (whd_driver, WHD_TRUE); -- return WHD_SUCCESS; --} -- --whd_result_t whd_bus_spi_init(whd_driver_t whd_driver) --{ -- uint32_t data = 0; -- uint32_t whd_bus_gspi_status; -- uint16_t data16 = 0; -- uint32_t loop_count; -- whd_result_t result; -- uint8_t init_data[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -- uint32_t interrupt_polarity = 0; -- uint16_t chip_id; -- size_t transfer_size = 12; -- whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config; -- -- whd_driver->bus_gspi_32bit = WHD_FALSE; -- -- if (config->is_falling_edge == WHD_FALSE) -- interrupt_polarity = INTERRUPT_POLARITY_HIGH; -- -- whd_bus_init_backplane_window(whd_driver); -- -- whd_bus_gspi_header_t *gspi_header = (whd_bus_gspi_header_t *)init_data; -- -- /* Due to an chip issue, the first transfer will be corrupted. -- * This means a repeated safe read of a known value register is required until -- * the correct value is returned - signalling the bus is running. -- * This known value register must be accessed using fixed (non-incrementing) address -- * mode, hence a custom packet header must be constructed -- * Due to the chip issue, the data received could be left shifted by one bit. -- */ -- loop_count = 0; -- do -- { -- /* Header needs to calculated every time as init_data gets modified in cyhal_spi_transfer() */ -- *gspi_header = -- ( whd_bus_gspi_header_t )SWAP32_16BIT_PARTS(SWAP32( (uint32_t)( (whd_bus_gspi_command_mapping[(int)BUS_READ] -- & 0x1) << 31 ) | -- (uint32_t)( (GSPI_FIXED_ADDRESS & 0x1) << 30 ) | -- (uint32_t)( (BUS_FUNCTION & 0x3) << 28 ) | -- (uint32_t)( (SPI_READ_TEST_REGISTER & 0x1FFFFu) << -- 11 ) | -- (uint32_t)( (4u /*size*/ & 0x7FFu) << 0 ) ) ); -- CHECK_RETURN(cyhal_spi_transfer(whd_driver->bus_priv->spi_obj, NULL, 0, init_data, transfer_size, 0) ); -- loop_count++; -- } while ( (NULL == memchr(&init_data[4], SPI_READ_TEST_REG_LSB, (size_t)8) ) && -- (NULL == memchr(&init_data[4], SPI_READ_TEST_REG_LSB_SFT1, (size_t)8) ) && -- (NULL == memchr(&init_data[4], SPI_READ_TEST_REG_LSB_SFT2, (size_t)8) ) && -- (NULL == memchr(&init_data[4], SPI_READ_TEST_REG_LSB_SFT3, (size_t)8) ) && -- (loop_count < ( uint32_t )FEADBEAD_TIMEOUT_MS) && -- (cy_rtos_delay_milliseconds( (uint32_t)1 ), (1 == 1) ) ); -- -- /* Register interrupt handler */ -- whd_bus_spi_irq_register(whd_driver); -- /* Enable SPI IRQ */ -- whd_bus_spi_irq_enable(whd_driver, WHD_TRUE); -- -- /* Keep/reset defaults for registers 0x0-0x4 except for, 0x0: Change word length to 32bit, -- * set endianness, enable wakeup. 0x2: enable interrupt with status. */ --#if defined(IL_BIGENDIAN) -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BUS_FUNCTION, SPI_BUS_CONTROL, (uint8_t)4, -- (uint32_t)(WORD_LENGTH_32 | (0 & ENDIAN_BIG) | -- (interrupt_polarity & INTERRUPT_POLARITY_HIGH) | WAKE_UP | -- (0x4 << (8 * SPI_RESPONSE_DELAY) ) | -- ( (0 & STATUS_ENABLE) << (8 * SPI_STATUS_ENABLE) ) | -- (INTR_WITH_STATUS << (8 * SPI_STATUS_ENABLE) ) ) ) ); --#else -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BUS_FUNCTION, SPI_BUS_CONTROL, (uint8_t)4, -- ( uint32_t )(WORD_LENGTH_32 | ENDIAN_BIG | -- (interrupt_polarity & INTERRUPT_POLARITY_HIGH) | -- WAKE_UP | (0x4 << (8 * SPI_RESPONSE_DELAY) ) | -- ( (0 & STATUS_ENABLE) << (8 * SPI_STATUS_ENABLE) ) | -- (INTR_WITH_STATUS << (8 * SPI_STATUS_ENABLE) ) ) ) ); --#endif -- whd_driver->bus_gspi_32bit = WHD_TRUE; -- CHECK_RETURN(whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_BUS_CONTROL, (uint8_t)4, -- (uint8_t *)&data) ); -- -- if (whd_driver->bus_priv->spi_config.is_spi_normal_mode) -- { -- /* Reset host SPI interface to re-sync */ -- /*host_platform_bus_init( );*/ -- } -- -- /* Check feedbead can be read - i.e. the device is alive */ -- data = 0; -- CHECK_RETURN(whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_READ_TEST_REGISTER, (uint8_t)4, -- (uint8_t *)&data) ); -- -- if (data != SPI_READ_TEST_REGISTER_VALUE) -- { -- WPRINT_WHD_ERROR( ("Read %x, instead of 0xFEEDBEAD from the WLAN chip\n", (unsigned int)data) ); -- return WHD_SPI_ID_READ_FAIL; -- } -- -- /* Make sure error interrupt bits are clear */ -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BUS_FUNCTION, SPI_INTERRUPT_REGISTER, (uint8_t)1, -- ( uint32_t )(DATA_UNAVAILABLE | COMMAND_ERROR | DATA_ERROR | -- F1_OVERFLOW) ) ); -- -- /* Enable a selection of interrupts */ -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BUS_FUNCTION, SPI_INTERRUPT_ENABLE_REGISTER, (uint8_t)2, -- ( uint32_t )(F2_F3_FIFO_RD_UNDERFLOW | F2_F3_FIFO_WR_OVERFLOW | -- COMMAND_ERROR | DATA_ERROR | F2_PACKET_AVAILABLE | -- F1_OVERFLOW) ) ); -- -- /* Request ALP */ -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- SBSDIO_ALP_AVAIL_REQ) ); -- -- /* Wait until ALP is available */ -- loop_count = 0; -- while ( ( (result = whd_bus_spi_read_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)2, -- (uint8_t *)&data16) ) == WHD_SUCCESS ) && -- ( (data16 & SBSDIO_ALP_AVAIL) == 0 ) && -- (loop_count < ( uint32_t )ALP_AVAIL_TIMEOUT_MS) ) -- { -- cy_rtos_delay_milliseconds( (uint32_t)1 ); -- loop_count++; -- } -- if (loop_count >= ( uint32_t )ALP_AVAIL_TIMEOUT_MS) -- { -- WPRINT_WHD_ERROR( ("ALP Clock timeout\n") ); -- return WHD_TIMEOUT; -- } -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Can't read SDIO_CHIP_CLOCK_CSR\n") ); -- return result; -- } -- -- /* Clear request for ALP */ -- CHECK_RETURN(whd_bus_spi_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- (uint32_t)0) ); -- -- /* Read the chip id */ -- CHECK_RETURN(whd_bus_spi_read_backplane_value(whd_driver, CHIPCOMMON_BASE_ADDRESS, 2, (uint8_t *)&chip_id) ); -- whd_chip_set_chip_id(whd_driver, chip_id); -- -- /* Download the firmware */ -- result = whd_spi_download_firmware(whd_driver); -- -- /* user abort */ -- if (result == WHD_UNFINISHED) -- { -- /* host_platform_reset_wifi (WHD_TRUE); */ -- /* host_platform_power_wifi (WHD_FALSE); */ -- WPRINT_WHD_ERROR( ("User aborted download of firmware\n") ); -- return result; -- } -- -- /* non user abort error */ -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not download firmware\n") ); -- return result; -- } -- /* else, successfully downloaded the firmware; continue with waiting for WIFi to live */ -- -- /* Wait for F2 to be ready */ -- loop_count = 0; -- while ( ( (result = whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_STATUS_REGISTER, (uint8_t)4, -- (uint8_t *)&whd_bus_gspi_status) ) == WHD_SUCCESS ) && -- ( (whd_bus_gspi_status & (1 << 5) ) == 0 ) && -- (loop_count < ( uint32_t )F2_READY_TIMEOUT_MS) ) -- { -- cy_rtos_delay_milliseconds( (uint32_t)1 ); -- loop_count++; -- } -- if (loop_count >= ( uint32_t )F2_READY_TIMEOUT_MS) -- { -- /* If your system fails here, it could be due to incorrect NVRAM variables. -- * Check which 'wifi_nvram_image.h' file your platform is using, and -- * check that it matches the WLAN device on your platform, including the -- * crystal frequency. -- */ -- WPRINT_WHD_ERROR( ("Timeout while waiting for function 2 to be ready\n") ); -- return WHD_TIMEOUT; -- } -- -- CHECK_RETURN(whd_chip_specific_init(whd_driver) ); -- CHECK_RETURN(whd_ensure_wlan_bus_is_up(whd_driver) ); -- -- return result; --} -- --whd_result_t whd_bus_spi_deinit(whd_driver_t whd_driver) --{ -- CHECK_RETURN(whd_allow_wlan_bus_to_sleep(whd_driver) ); -- -- /* put device in reset. */ -- //host_platform_reset_wifi (WHD_TRUE); -- whd_bus_set_resource_download_halt(whd_driver, WHD_FALSE); -- DELAYED_BUS_RELEASE_SCHEDULE (whd_driver, WHD_FALSE); -- return WHD_SUCCESS; --} -- --whd_bool_t whd_bus_spi_wake_interrupt_present(whd_driver_t whd_driver) --{ -- /* functionality is only currently needed and present on SDIO */ -- return WHD_FALSE; --} -- --whd_result_t whd_bus_spi_wait_for_wlan_event(whd_driver_t whd_driver, cy_semaphore_t *transceive_semaphore) --{ -- whd_result_t result = WHD_SUCCESS; -- uint32_t timeout_ms = 1; -- uint32_t delayed_release_timeout_ms; -- -- REFERENCE_DEBUG_ONLY_VARIABLE(result); -- -- delayed_release_timeout_ms = whd_bus_handle_delayed_release(whd_driver); -- if (delayed_release_timeout_ms != 0) -- { -- timeout_ms = delayed_release_timeout_ms; -- } -- else -- { -- result = whd_allow_wlan_bus_to_sleep(whd_driver); -- whd_assert("Error setting wlan sleep", (result == WHD_SUCCESS) || (result == WHD_PENDING) ); -- -- if (result == WHD_SUCCESS) -- { -- timeout_ms = CY_RTOS_NEVER_TIMEOUT; -- } -- } -- -- /* Check if we have run out of bus credits */ -- if (whd_sdpcm_get_available_credits(whd_driver) == 0) -- { -- /* Keep poking the WLAN until it gives us more credits */ -- result = whd_bus_spi_poke_wlan(whd_driver); -- whd_assert("Poking failed!", result == WHD_SUCCESS); -- -- result = cy_rtos_get_semaphore(transceive_semaphore, (uint32_t)MIN_OF(timeout_ms, -- WHD_THREAD_POKE_TIMEOUT), WHD_FALSE); -- } -- else -- { -- result = cy_rtos_get_semaphore(transceive_semaphore, (uint32_t)MIN_OF(timeout_ms, -- WHD_THREAD_POLL_TIMEOUT), WHD_FALSE); -- } -- whd_assert("Could not get whd sleep semaphore\n", (result == CY_RSLT_SUCCESS) || (result == CY_RTOS_TIMEOUT) ); -- -- return result; --} -- --/****************************************************** --* Function definitions for Protocol Common --******************************************************/ -- --/* -- * Write a value to a register NOT on the backplane -- * Prerequisites: value_length <= 4 -- */ --whd_result_t whd_bus_spi_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint32_t value) --{ -- char gspi_internal_buffer[MAX_BUS_HEADER_SIZE + sizeof(uint32_t) + sizeof(uint32_t)]; -- whd_transfer_bytes_packet_t *internal_gspi_packet = (whd_transfer_bytes_packet_t *)gspi_internal_buffer; -- -- /* Flip the bytes if we're not in 32 bit mode */ -- if (whd_driver->bus_gspi_32bit == WHD_FALSE) -- { -- value = H32TO16LE(value); -- } -- /* Write the value and value_length into the packet */ -- internal_gspi_packet->data[0] = value; -- -- /* Send it off */ -- return whd_bus_spi_transfer_bytes(whd_driver, BUS_WRITE, function, address, value_length, internal_gspi_packet); --} -- --/* -- * Read the value of a register NOT on the backplane -- * Prerequisites: value_length <= 4 -- */ --whd_result_t whd_bus_spi_read_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address, -- uint8_t value_length, uint8_t *value) --{ -- uint32_t *data_ptr; -- whd_result_t result; -- uint8_t padding = 0; -- -- char gspi_internal_buffer[MAX_BUS_HEADER_SIZE + sizeof(uint32_t) + sizeof(uint32_t)]; -- -- /* Clear the receiving part of memory and set the value_length */ -- if (function == BACKPLANE_FUNCTION) -- { -- gspi_backplane_f1_read_packet_t *pkt = -- (gspi_backplane_f1_read_packet_t *)(gspi_internal_buffer + MAX_BUS_HEADER_SIZE - -- sizeof(whd_bus_gspi_header_t) ); -- data_ptr = pkt->data; -- padding = 4; /* Add response delay */ -- } -- else -- { -- whd_transfer_bytes_packet_t *pkt = (whd_transfer_bytes_packet_t *)gspi_internal_buffer; -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- data_ptr = pkt->data; -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- } -- -- *data_ptr = 0; -- result = -- whd_bus_spi_transfer_bytes(whd_driver, BUS_READ, function, address, ( uint16_t )(value_length + padding), -- (whd_transfer_bytes_packet_t *)gspi_internal_buffer); -- -- memcpy(value, data_ptr, value_length); -- -- return result; --} -- --/* -- * Write a value to a register on the backplane -- * Prerequisites: value_length <= 4 -- */ --whd_result_t whd_bus_spi_write_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint32_t value) --{ -- CHECK_RETURN(whd_bus_set_backplane_window(whd_driver, address) ); -- -- address &= SBSDIO_SB_OFT_ADDR_MASK; -- -- if (register_length == 4) -- address |= SBSDIO_SB_ACCESS_2_4B_FLAG; -- -- return whd_bus_spi_write_register_value(whd_driver, BACKPLANE_FUNCTION, address, register_length, value); --} -- --/* -- * Read the value of a register on the backplane -- * Prerequisites: value_length <= 4 -- */ --whd_result_t whd_bus_spi_read_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint8_t *value) --{ -- *value = 0; -- CHECK_RETURN(whd_bus_set_backplane_window(whd_driver, address) ); -- -- address &= SBSDIO_SB_OFT_ADDR_MASK; -- -- if (register_length == 4) -- address |= SBSDIO_SB_ACCESS_2_4B_FLAG; -- -- return whd_bus_spi_read_register_value(whd_driver, BACKPLANE_FUNCTION, address, register_length, value); --} -- --whd_result_t whd_bus_spi_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t size, -- whd_transfer_bytes_packet_t *packet) --{ -- uint32_t *temp; -- whd_result_t result; -- uint16_t newsize; -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- whd_bus_gspi_header_t *gspi_header = -- (whd_bus_gspi_header_t *)( (char *)packet->data - sizeof(whd_bus_gspi_header_t) ); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- size_t transfer_size; -- *gspi_header = -- ( whd_bus_gspi_header_t )( ( uint32_t )( (whd_bus_gspi_command_mapping[(int)direction] & 0x1) << 31 ) | -- ( uint32_t )( (GSPI_INCREMENT_ADDRESS & 0x1) << 30 ) | -- ( uint32_t )( (function & 0x3) << 28 ) | -- ( uint32_t )( (address & 0x1FFFF) << 11 ) | ( uint32_t )( (size & 0x7FF) << 0 ) ); -- -- /* Reshuffle the bits if we're not in 32 bit mode */ -- if (whd_driver->bus_gspi_32bit == WHD_FALSE) -- { -- /* Note: This typecast should always be valid if the buffer -- * containing the GSpi packet has been correctly declared as 32-bit aligned */ -- temp = (uint32_t *)gspi_header; -- *temp = H32TO16LE(*temp); -- } -- -- /* Round size up to 32-bit alignment */ -- newsize = (uint16_t)ROUND_UP(size, 4); -- -- /* Ensure we are clear to write */ -- if ( (direction == BUS_WRITE) && (function == WLAN_FUNCTION) ) -- { -- uint32_t whd_bus_gspi_status; -- uint32_t loop_count = 0; -- -- /* Verify the SDPCM size and stated size match */ -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- uint16_t *frametag_ptr = (uint16_t *)&packet->data; -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- if (size != *frametag_ptr) -- { -- WPRINT_WHD_DEBUG( ("Error - gSPI size does not match SDPCM size!\n") ); -- return WHD_SPI_SIZE_MISMATCH; -- } -- -- /* Wait for WLAN FIFO to be ready to accept data */ -- while ( ( (result = -- whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_STATUS_REGISTER, (uint8_t)4, -- (uint8_t *)&whd_bus_gspi_status) ) == WHD_SUCCESS ) && -- ( (whd_bus_gspi_status & (1 << 5) ) == 0 ) && -- (loop_count < ( uint32_t )F2_READY_TIMEOUT_LOOPS) ) -- { -- ++loop_count; -- } -- -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Failed to read SPI register value in %s at %d \n", __func__, __LINE__) ); -- return result; -- } -- -- if (loop_count >= ( uint32_t )F2_READY_TIMEOUT_LOOPS) -- { -- WPRINT_WHD_DEBUG( ("Timeout waiting for data FIFO to be ready\n") ); -- return WHD_TIMEOUT; -- } -- -- } -- -- transfer_size = (size_t)(newsize + sizeof(whd_bus_gspi_header_t) ); -- -- /* Send the data */ -- if (direction == BUS_READ) -- { -- result = cyhal_spi_transfer(whd_driver->bus_priv->spi_obj, NULL, 0, (uint8_t *)gspi_header, -- transfer_size, 0); -- } -- else -- { -- result = cyhal_spi_transfer(whd_driver->bus_priv->spi_obj, (uint8_t *)gspi_header, transfer_size, NULL, -- 0, 0); -- } -- -- CHECK_RETURN(result); -- return WHD_SUCCESS; --} -- --/****************************************************** --* Static Function definitions --******************************************************/ -- --static whd_result_t whd_spi_download_firmware(whd_driver_t whd_driver) --{ -- uint8_t csr_val; -- whd_result_t result; -- uint32_t loop_count = 0; -- -- CHECK_RETURN(whd_disable_device_core(whd_driver, WLAN_ARM_CORE, WLAN_CORE_FLAG_NONE) ); -- CHECK_RETURN(whd_disable_device_core(whd_driver, SOCRAM_CORE, WLAN_CORE_FLAG_NONE) ); -- CHECK_RETURN(whd_reset_device_core(whd_driver, SOCRAM_CORE, WLAN_CORE_FLAG_NONE) ); -- -- CHECK_RETURN(whd_chip_specific_socsram_init(whd_driver) ); -- -- CHECK_RETURN(whd_bus_write_wifi_firmware_image(whd_driver) ); -- CHECK_RETURN(whd_bus_write_wifi_nvram_image(whd_driver) ); -- -- /* Take the ARM core out of reset */ -- CHECK_RETURN(whd_reset_device_core(whd_driver, WLAN_ARM_CORE, WLAN_CORE_FLAG_NONE) ); -- result = whd_device_core_is_up(whd_driver, WLAN_ARM_CORE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not bring ARM core up\n") ); -- return result; -- } -- -- /* Wait until the HT clock is available */ -- while ( ( (result = -- whd_bus_spi_read_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_CHIP_CLOCK_CSR, (uint8_t)1, -- &csr_val) ) == WHD_SUCCESS ) && -- ( (csr_val & SBSDIO_HT_AVAIL) == 0 ) && -- (loop_count < ( uint32_t )HT_AVAIL_TIMEOUT_MS) ) -- { -- cy_rtos_delay_milliseconds( (uint32_t)1 ); -- loop_count++; -- } -- if (loop_count >= ( uint32_t )HT_AVAIL_TIMEOUT_MS) -- { -- return WHD_TIMEOUT; -- } -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("HT clock not available\n") ); -- return result; -- } -- -- /* Set up the interrupt mask and enable interrupts */ -- CHECK_RETURN(whd_bus_spi_write_backplane_value(whd_driver, SDIO_INT_HOST_MASK, (uint8_t)4, I_HMB_SW_MASK) ); -- -- /* Lower F2 Watermark to avoid DMA Hang in F2 when SD Clock is stopped. */ -- return whd_bus_spi_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_FUNCTION2_WATERMARK, (uint8_t)1, -- ( uint32_t )SPI_F2_WATERMARK); --} -- --whd_result_t whd_bus_spi_wakeup(whd_driver_t whd_driver) --{ -- uint32_t spi_bus_reg_value; -- -- /* Wake up WLAN SPI interface module */ -- CHECK_RETURN(whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_BUS_CONTROL, sizeof(uint32_t), -- (uint8_t *)&spi_bus_reg_value) ); -- spi_bus_reg_value |= ( uint32_t )(WAKE_UP); -- return whd_bus_spi_write_register_value(whd_driver, BUS_FUNCTION, SPI_BUS_CONTROL, sizeof(uint32_t), -- spi_bus_reg_value); --} -- --whd_result_t whd_bus_spi_sleep(whd_driver_t whd_driver) --{ -- uint32_t spi_bus_reg_value; -- -- /* Put SPI interface block to sleep */ -- CHECK_RETURN(whd_bus_spi_read_register_value(whd_driver, BUS_FUNCTION, SPI_BUS_CONTROL, sizeof(uint32_t), -- (uint8_t *)&spi_bus_reg_value) ); -- spi_bus_reg_value &= ~( uint32_t )(WAKE_UP); -- return whd_bus_spi_write_register_value(whd_driver, BUS_FUNCTION, SPI_BUS_CONTROL, sizeof(uint32_t), -- spi_bus_reg_value); --} -- --void whd_bus_spi_init_stats(whd_driver_t whd_driver) --{ -- --} -- --whd_result_t whd_bus_spi_print_stats(whd_driver_t whd_driver, whd_bool_t reset_after_print) --{ -- return WHD_TRUE; --} -- --/* Waking the firmware up from Deep Sleep */ --whd_result_t whd_bus_spi_reinit_stats(whd_driver_t whd_driver, whd_bool_t wake_from_firmware) --{ -- return WHD_TRUE; --} -- --uint8_t whd_bus_spi_backplane_read_padd_size(whd_driver_t whd_driver) --{ -- return WHD_BUS_SPI_BACKPLANE_READ_PADD_SIZE; --} -- --whd_bool_t whd_bus_spi_use_status_report_scheme(whd_driver_t whd_driver) --{ -- return WHD_FALSE; --} -- --uint32_t whd_bus_spi_get_max_transfer_size(whd_driver_t whd_driver) --{ -- return WHD_BUS_SPI_MAX_BACKPLANE_TRANSFER_SIZE; --} -- --static void whd_bus_spi_oob_irq_handler(void *arg, cyhal_gpio_irq_event_t event) --{ -- whd_driver_t whd_driver = (whd_driver_t)arg; -- const whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config; -- const cyhal_gpio_irq_event_t expected_event = (config->is_falling_edge == WHD_TRUE) -- ? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE; -- -- if (event != expected_event) -- { -- WPRINT_WHD_ERROR( ("Unexpected interrupt event %d\n", event) ); -- -- return; -- } -- -- /* call thread notify to wake up WHD thread */ -- whd_thread_notify_irq(whd_driver); --} -- --/* XXX FIXME */ --#define WLAN_INTR_PRIORITY 1 --whd_result_t whd_bus_spi_irq_register(whd_driver_t whd_driver) --{ -- const whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config; -- -- cyhal_gpio_init(config->host_oob_pin, CYHAL_GPIO_DIR_INPUT, CYHAL_GPIO_DRIVE_ANALOG, 0); -- cyhal_gpio_register_irq(config->host_oob_pin, WLAN_INTR_PRIORITY, whd_bus_spi_oob_irq_handler, -- whd_driver); -- -- return WHD_TRUE; --} -- --whd_result_t whd_bus_spi_irq_enable(whd_driver_t whd_driver, whd_bool_t enable) --{ -- const whd_oob_config_t *config = &whd_driver->bus_priv->spi_config.oob_config; -- const cyhal_gpio_irq_event_t event = -- (config->is_falling_edge == WHD_TRUE) ? CYHAL_GPIO_IRQ_FALL : CYHAL_GPIO_IRQ_RISE; -- -- cyhal_gpio_irq_enable(config->host_oob_pin, event, (enable == WHD_TRUE) ? true : false); -- -- return WHD_TRUE; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.h -deleted file mode 100644 -index 1be7b0e075..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_bus_spi_protocol.h -+++ /dev/null -@@ -1,101 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "whd.h" --#include "whd_bus_protocol_interface.h" --#include "cy_result.h" --#include "cyhal_spi.h" -- --#ifndef INCLUDED_SPI_WHD_BUS_PROTOCOL_H --#define INCLUDED_SPI_WHD_BUS_PROTOCOL_H -- --#ifdef __cplusplus --extern "C" { --#endif -- --/****************************************************** --* Constants --******************************************************/ -- --/****************************************************** --* Structures --******************************************************/ -- --typedef uint32_t whd_bus_gspi_header_t; -- --#pragma pack(1) -- --typedef struct --{ -- whd_bus_gspi_header_t gspi_header; --} whd_bus_header_t; -- --#pragma pack() -- --#define WHD_BUS_SPI_HEADER_SIZE (sizeof(whd_bus_header_t) ) -- --#define WHD_BUS_SPI_USE_STATUS_REPORT_SCHEME (1 == 1) -- --#define WHD_BUS_SPI_MAX_BACKPLANE_TRANSFER_SIZE (64) /* Max packet size on F1 */ --#define WHD_BUS_SPI_BACKPLANE_READ_PADD_SIZE (4) -- --/****************************************************** --* Function declarations --******************************************************/ --extern whd_result_t whd_bus_spi_send_buffer(whd_driver_t whd_driver, whd_buffer_t buffer); --extern whd_result_t whd_bus_spi_poke_wlan(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_ack_interrupt(whd_driver_t whd_driver, uint32_t intstatus); --extern uint32_t whd_bus_spi_packet_available_to_read(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_read_frame(whd_driver_t whd_driver, whd_buffer_t *buffer); --extern whd_result_t whd_bus_spi_init(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_deinit(whd_driver_t whd_driver); --extern whd_bool_t whd_bus_spi_wake_interrupt_present(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_wait_for_wlan_event(whd_driver_t whd_driver, -- cy_semaphore_t *transceive_semaphore); --extern whd_result_t whd_bus_spi_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, -- uint32_t address, uint8_t value_length, uint32_t value); --extern whd_result_t whd_bus_spi_read_register_value(whd_driver_t whd_driver, whd_bus_function_t function, -- uint32_t address, uint8_t value_length, uint8_t *value); --extern whd_result_t whd_bus_spi_write_backplane_value(whd_driver_t whd_driver, uint32_t address, -- uint8_t register_length, uint32_t value); --extern whd_result_t whd_bus_spi_read_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, -- uint8_t *value); --extern whd_result_t whd_bus_spi_transfer_bytes(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction, -- whd_bus_function_t function, uint32_t address, uint16_t size, -- whd_transfer_bytes_packet_t *packet); --extern whd_result_t whd_bus_spi_wakeup(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_sleep(whd_driver_t whd_driver); --extern void whd_bus_spi_init_stats(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_print_stats(whd_driver_t whd_driver, whd_bool_t reset_after_print); --extern whd_result_t whd_bus_spi_reinit_stats(whd_driver_t whd_driver, whd_bool_t wake_from_firmware); --extern uint8_t whd_bus_spi_backplane_read_padd_size(whd_driver_t whd_driver); --extern whd_bool_t whd_bus_spi_use_status_report_scheme(whd_driver_t whd_driver); --extern uint32_t whd_bus_spi_get_max_transfer_size(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_irq_register(whd_driver_t whd_driver); --extern whd_result_t whd_bus_spi_irq_enable(whd_driver_t whd_driver, whd_bool_t enable); --extern void whd_bus_spi_irq_handler(void *handler_arg, cyhal_spi_irq_event_t event); -- --/****************************************************** --* Global variables --******************************************************/ -- --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_SPI_WHD_BUS_PROTOCOL_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_chip_reg.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_chip_reg.h -deleted file mode 100644 -index 64a4f88182..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_chip_reg.h -+++ /dev/null -@@ -1,114 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef INCLUDED_WHD_CHIP_REG_H_ --#define INCLUDED_WHD_CHIP_REG_H_ -- --#ifdef __cplusplus --extern "C" { --#endif -- --/****************************************************** --* Architecture Constants --******************************************************/ -- --/* D11 registers and SHM */ --#define D11_BASE_ADDR 0x18001000 --#define D11_AXI_BASE_ADDR 0xE8000000 --#define D11_SHM_BASE_ADDR (D11_AXI_BASE_ADDR + 0x4000) -- --#define D11REG_ADDR(offset) (D11_BASE_ADDR + offset) --#define D11IHR_ADDR(offset) (D11_AXI_BASE_ADDR + 0x400 + (2 * offset) ) --#define D11SHM_ADDR(offset) (D11_SHM_BASE_ADDR + offset) -- --#define M_DS1_CTRL_STATUS (0xe0b * 2) -- --/* RMC operational modes */ --enum ds1_ctrl_status --{ -- DS1_SLEEP = 0, /* DS1_SLEEP */ -- MAC_ON = 1, /* MAC_ON */ -- RADIO_PHY_ON = 2, /* RADIO_PHY_ON */ -- DS1_EXIT = 3 /* DS1_EXIT.*/ --}; -- --#define M_DS1_CTRL_SDIO (0xe0c * 2) -- --#define C_DS1_CTRL_SDIO_DS1_SLEEP (1 << 0) --#define C_DS1_CTRL_SDIO_MAC_ON (1 << 1) --#define C_DS1_CTRL_SDIO_RADIO_PHY_ON (1 << 2) --#define C_DS1_CTRL_SDIO_DS1_EXIT (1 << 3) --#define C_DS1_CTRL_PROC_DONE (1 << 8) --#define C_DS1_CTRL_REQ_VALID (1 << 9) --/* MacControl register */ --#define D11_MACCONTROL_REG D11REG_ADDR(0x120) --#define D11_MACCONTROL_REG_SIZE 4 --#define D11_MACCONTROL_REG_WAKE (1 << 26) --#define D11_MACCONTROL_CLEAR_WAKE (0xFBFFFFFF) --#define PMU_MINRESMASK (PMU_BASE_ADDRESS + 0x618) --#define DEFAULT_43012_MIN_RES_MASK 0x0f8bfe77 -- --/* Backplane architecture */ --#define CHIPCOMMON_BASE_ADDRESS 0x18000000 /* Chipcommon core register region */ --#define I2S0_BASE_ADDRESS 0x18001000 /* I2S0 core register region */ --#define I2S1_BASE_ADDRESS 0x18002000 /* I2S1 core register region */ --#define APPS_ARMCR4_BASE_ADDRESS 0x18003000 /* Apps Cortex-R4 core register region */ --#define DMA_BASE_ADDRESS 0x18004000 /* DMA core register region */ --#define GMAC_BASE_ADDRESS 0x18005000 /* GMAC core register region */ --#define USB20H0_BASE_ADDRESS 0x18006000 /* USB20H0 core register region */ --#define USB20D_BASE_ADDRESS 0x18007000 /* USB20D core register region */ --#define SDIOH_BASE_ADDRESS 0x18008000 /* SDIOH Device core register region */ --#define WLAN_ARMCM3_BASE_ADDRESS 0x18003000 /* ARMCM3 core register region */ --#define PMU_BASE_ADDRESS 0x18012000 /* PMU core register region */ --#define DOT11MAC_BASE_ADDRESS 0x18001000 --#define SDIO_BASE_ADDRESS 0x18002000 --#define SOCSRAM_BASE_ADDRESS 0x18004000 --#define WLAN_ARMCR4_BASE_ADDRESS 0x18003000 /* ARMCR4 core register region */ -- --#define BACKPLANE_ADDRESS_MASK 0x7FFF --#define BACKPLANE_WINDOW_SIZE (BACKPLANE_ADDRESS_MASK + 1) -- --#define CHIP_STA_INTERFACE 0 --#define CHIP_AP_INTERFACE 1 --#define CHIP_P2P_INTERFACE 2 -- --/* Chipcommon registers */ --#define CHIPCOMMON_CORE_CAPEXT_ADDR ( (uint32_t)(CHIPCOMMON_BASE_ADDRESS + 0x64c) ) --#define CHIPCOMMON_CORE_CAPEXT_SR_SUPPORTED ( (uint32_t)(1 << 1) ) --#define CHIPCOMMON_CORE_RCTL_LOGIC_DISABLE ( (uint32_t)(1 << 27) ) --#define CHIPCOMMON_CORE_RCTL_MACPHY_DISABLE ( (uint32_t)(1 << 26) ) --#define CHIPCOMMON_CORE_RETENTION_CTL ( (uint32_t)(CHIPCOMMON_BASE_ADDRESS + 0x670) ) -- --#define CHIPCOMMON_GPIO_CONTROL ( (uint32_t)(CHIPCOMMON_BASE_ADDRESS + 0x6C) ) --#define CHIPCOMMON_SR_CONTROL0 ( (uint32_t)(CHIPCOMMON_BASE_ADDRESS + 0x504) ) --#define CHIPCOMMON_SR_CONTROL1 ( (uint32_t)(CHIPCOMMON_BASE_ADDRESS + 0x508) ) -- --/* SOCSRAM core registers */ --#define SOCSRAM_BANKX_INDEX ( (uint32_t)(SOCSRAM_BASE_ADDRESS + 0x10) ) --#define SOCSRAM_BANKX_PDA ( (uint32_t)(SOCSRAM_BASE_ADDRESS + 0x44) ) -- --/* PMU core registers */ --#define RETENTION_CTL ( (uint32_t)(PMU_BASE_ADDRESS + 0x670) ) --#define RCTL_MACPHY_DISABLE ( (uint32_t)(1 << 26) ) --#define RCTL_LOGIC_DISABLE ( (uint32_t)(1 << 27) ) -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_CHIP_REG_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_sdio.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_sdio.h -deleted file mode 100644 -index 5ea57f40b4..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_sdio.h -+++ /dev/null -@@ -1,234 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef INCLUDED_WHD_SDIO_H_ --#define INCLUDED_WHD_SDIO_H_ -- --#ifdef __cplusplus --extern "C" { --#endif -- --/****************************************************** --* SDIO Constants --******************************************************/ --/* CurrentSdiodProgGuide r23 */ -- --/* Base registers */ --#define SDIO_CORE ( (uint32_t)(SDIO_BASE_ADDRESS + 0x00) ) --#define SDIO_INT_STATUS ( (uint32_t)(SDIO_BASE_ADDRESS + 0x20) ) --#define SDIO_TO_SB_MAILBOX ( (uint32_t)(SDIO_BASE_ADDRESS + 0x40) ) --#define SDIO_TO_SB_MAILBOX_DATA ( (uint32_t)(SDIO_BASE_ADDRESS + 0x48) ) --#define SDIO_TO_HOST_MAILBOX_DATA ( (uint32_t)(SDIO_BASE_ADDRESS + 0x4C) ) --#define SDIO_TO_SB_MAIL_BOX ( (uint32_t)(SDIO_BASE_ADDRESS + 0x40) ) --#define SDIO_INT_HOST_MASK ( (uint32_t)(SDIO_BASE_ADDRESS + 0x24) ) --#define SDIO_FUNCTION_INT_MASK ( (uint32_t)(SDIO_BASE_ADDRESS + 0x34) ) -- --/* SDIO Function 0 (SDIO Bus) register addresses */ -- --/* SDIO Device CCCR offsets */ --/* TODO: What does CIS/CCCR stand for? */ --/* CCCR accesses do not require backpane clock */ --#define SDIOD_CCCR_REV ( (uint32_t)0x00 ) /* CCCR/SDIO Revision */ --#define SDIOD_CCCR_SDREV ( (uint32_t)0x01 ) /* SD Revision */ --#define SDIOD_CCCR_IOEN ( (uint32_t)0x02 ) /* I/O Enable */ --#define SDIOD_CCCR_IORDY ( (uint32_t)0x03 ) /* I/O Ready */ --#define SDIOD_CCCR_INTEN ( (uint32_t)0x04 ) /* Interrupt Enable */ --#define SDIOD_CCCR_INTPEND ( (uint32_t)0x05 ) /* Interrupt Pending */ --#define SDIOD_CCCR_IOABORT ( (uint32_t)0x06 ) /* I/O Abort */ --#define SDIOD_CCCR_BICTRL ( (uint32_t)0x07 ) /* Bus Interface control */ --#define SDIOD_CCCR_CAPABLITIES ( (uint32_t)0x08 ) /* Card Capabilities */ --#define SDIOD_CCCR_CISPTR_0 ( (uint32_t)0x09 ) /* Common CIS Base Address Pointer Register 0 (LSB) */ --#define SDIOD_CCCR_CISPTR_1 ( (uint32_t)0x0A ) /* Common CIS Base Address Pointer Register 1 */ --#define SDIOD_CCCR_CISPTR_2 ( (uint32_t)0x0B ) /* Common CIS Base Address Pointer Register 2 (MSB - only bit 1 valid)*/ --#define SDIOD_CCCR_BUSSUSP ( (uint32_t)0x0C ) /* */ --#define SDIOD_CCCR_FUNCSEL ( (uint32_t)0x0D ) /* */ --#define SDIOD_CCCR_EXECFLAGS ( (uint32_t)0x0E ) /* */ --#define SDIOD_CCCR_RDYFLAGS ( (uint32_t)0x0F ) /* */ --#define SDIOD_CCCR_BLKSIZE_0 ( (uint32_t)0x10 ) /* Function 0 (Bus) SDIO Block Size Register 0 (LSB) */ --#define SDIOD_CCCR_BLKSIZE_1 ( (uint32_t)0x11 ) /* Function 0 (Bus) SDIO Block Size Register 1 (MSB) */ --#define SDIOD_CCCR_POWER_CONTROL ( (uint32_t)0x12 ) /* Power Control */ --#define SDIOD_CCCR_SPEED_CONTROL ( (uint32_t)0x13 ) /* Bus Speed Select (control device entry into high-speed clocking mode) */ --#define SDIOD_CCCR_UHS_I ( (uint32_t)0x14 ) /* UHS-I Support */ --#define SDIOD_CCCR_DRIVE ( (uint32_t)0x15 ) /* Drive Strength */ --#define SDIOD_CCCR_INTEXT ( (uint32_t)0x16 ) /* Interrupt Extension */ --#define SDIOD_CCCR_BRCM_CARDCAP ( (uint32_t)0xF0 ) /* Brcm Card Capability */ --#define SDIOD_SEP_INT_CTL ( (uint32_t)0xF2 ) /* Separate Interrupt Control*/ --#define SDIOD_CCCR_F1INFO ( (uint32_t)0x100 ) /* Function 1 (Backplane) Info */ --#define SDIOD_CCCR_F1HP ( (uint32_t)0x102 ) /* Function 1 (Backplane) High Power */ --#define SDIOD_CCCR_F1CISPTR_0 ( (uint32_t)0x109 ) /* Function 1 (Backplane) CIS Base Address Pointer Register 0 (LSB) */ --#define SDIOD_CCCR_F1CISPTR_1 ( (uint32_t)0x10A ) /* Function 1 (Backplane) CIS Base Address Pointer Register 1 */ --#define SDIOD_CCCR_F1CISPTR_2 ( (uint32_t)0x10B ) /* Function 1 (Backplane) CIS Base Address Pointer Register 2 (MSB - only bit 1 valid) */ --#define SDIOD_CCCR_F1BLKSIZE_0 ( (uint32_t)0x110 ) /* Function 1 (Backplane) SDIO Block Size Register 0 (LSB) */ --#define SDIOD_CCCR_F1BLKSIZE_1 ( (uint32_t)0x111 ) /* Function 1 (Backplane) SDIO Block Size Register 1 (MSB) */ --#define SDIOD_CCCR_F2INFO ( (uint32_t)0x200 ) /* Function 2 (WLAN Data FIFO) Info */ --#define SDIOD_CCCR_F2HP ( (uint32_t)0x202 ) /* Function 2 (WLAN Data FIFO) High Power */ --#define SDIOD_CCCR_F2CISPTR_0 ( (uint32_t)0x209 ) /* Function 2 (WLAN Data FIFO) CIS Base Address Pointer Register 0 (LSB) */ --#define SDIOD_CCCR_F2CISPTR_1 ( (uint32_t)0x20A ) /* Function 2 (WLAN Data FIFO) CIS Base Address Pointer Register 1 */ --#define SDIOD_CCCR_F2CISPTR_2 ( (uint32_t)0x20B ) /* Function 2 (WLAN Data FIFO) CIS Base Address Pointer Register 2 (MSB - only bit 1 valid) */ --#define SDIOD_CCCR_F2BLKSIZE_0 ( (uint32_t)0x210 ) /* Function 2 (WLAN Data FIFO) SDIO Block Size Register 0 (LSB) */ --#define SDIOD_CCCR_F2BLKSIZE_1 ( (uint32_t)0x211 ) /* Function 2 (WLAN Data FIFO) SDIO Block Size Register 1 (MSB) */ --#define SDIOD_CCCR_F3INFO ( (uint32_t)0x300 ) /* Function 3 (Bluetooth Data FIFO) Info */ --#define SDIOD_CCCR_F3HP ( (uint32_t)0x302 ) /* Function 3 (Bluetooth Data FIFO) High Power */ --#define SDIOD_CCCR_F3CISPTR_0 ( (uint32_t)0x309 ) /* Function 3 (Bluetooth Data FIFO) CIS Base Address Pointer Register 0 (LSB) */ --#define SDIOD_CCCR_F3CISPTR_1 ( (uint32_t)0x30A ) /* Function 3 (Bluetooth Data FIFO) CIS Base Address Pointer Register 1 */ --#define SDIOD_CCCR_F3CISPTR_2 ( (uint32_t)0x30B ) /* Function 3 (Bluetooth Data FIFO) CIS Base Address Pointer Register 2 (MSB - only bit 1 valid) */ --#define SDIOD_CCCR_F3BLKSIZE_0 ( (uint32_t)0x310 ) /* Function 3 (Bluetooth Data FIFO) SDIO Block Size Register 0 (LSB) */ --#define SDIOD_CCCR_F3BLKSIZE_1 ( (uint32_t)0x311 ) /* Function 3 (Bluetooth Data FIFO) SDIO Block Size Register 1 (MSB) */ -- -- --/* SDIO Function 1 (Backplane) register addresses */ --/* Addresses 0x00000000 - 0x0000FFFF are directly access the backplane -- * throught the backplane window. Addresses above 0x0000FFFF are -- * registers relating to backplane access, and do not require a backpane -- * clock to access them -- */ --#define SDIO_GPIO_SELECT ( (uint32_t)0x10005 ) --#define SDIO_GPIO_OUTPUT ( (uint32_t)0x10006 ) --#define SDIO_GPIO_ENABLE ( (uint32_t)0x10007 ) --#define SDIO_FUNCTION2_WATERMARK ( (uint32_t)0x10008 ) --#define SDIO_DEVICE_CONTROL ( (uint32_t)0x10009 ) --#define SDIO_BACKPLANE_ADDRESS_LOW ( (uint32_t)0x1000A ) --#define SDIO_BACKPLANE_ADDRESS_MID ( (uint32_t)0x1000B ) --#define SDIO_BACKPLANE_ADDRESS_HIGH ( (uint32_t)0x1000C ) --#define SDIO_FRAME_CONTROL ( (uint32_t)0x1000D ) --#define SDIO_CHIP_CLOCK_CSR ( (uint32_t)0x1000E ) --#define SDIO_PULL_UP ( (uint32_t)0x1000F ) --#define SDIO_READ_FRAME_BC_LOW ( (uint32_t)0x1001B ) --#define SDIO_READ_FRAME_BC_HIGH ( (uint32_t)0x1001C ) --#define SDIO_WAKEUP_CTRL ( (uint32_t)0x1001E ) --#define SDIO_SLEEP_CSR ( (uint32_t)0x1001F ) --#define I_HMB_SW_MASK ( (uint32_t)0x000000F0 ) --#define I_HMB_FRAME_IND (1 << 6) --#define I_HMB_HOST_INT (1 << 7) --#define FRAME_AVAILABLE_MASK I_HMB_SW_MASK -- --/****************************************************** --* Bit Masks --******************************************************/ -- --/* SDIOD_CCCR_REV Bits */ --#define SDIO_REV_SDIOID_MASK ( (uint32_t)0xF0 ) /* SDIO spec revision number */ --#define SDIO_REV_CCCRID_MASK ( (uint32_t)0x0F ) /* CCCR format version number */ -- --/* SDIOD_CCCR_SDREV Bits */ --#define SD_REV_PHY_MASK ( (uint32_t)0x0F ) /* SD format version number */ -- --/* SDIOD_CCCR_IOEN Bits */ --#define SDIO_FUNC_ENABLE_1 ( (uint32_t)0x02 ) /* function 1 I/O enable */ --#define SDIO_FUNC_ENABLE_2 ( (uint32_t)0x04 ) /* function 2 I/O enable */ --#define SDIO_FUNC_ENABLE_3 ( (uint32_t)0x08 ) /* function 3 I/O enable */ -- --/* SDIOD_CCCR_IORDY Bits */ --#define SDIO_FUNC_READY_1 ( (uint32_t)0x02 ) /* function 1 I/O ready */ --#define SDIO_FUNC_READY_2 ( (uint32_t)0x04 ) /* function 2 I/O ready */ --#define SDIO_FUNC_READY_3 ( (uint32_t)0x08 ) /* function 3 I/O ready */ -- --/* SDIOD_CCCR_INTEN Bits */ --#define INTR_CTL_MASTER_EN ( (uint32_t)0x01 ) /* interrupt enable master */ --#define INTR_CTL_FUNC1_EN ( (uint32_t)0x02 ) /* interrupt enable for function 1 */ --#define INTR_CTL_FUNC2_EN ( (uint32_t)0x04 ) /* interrupt enable for function 2 */ -- --/* SDIOD_SEP_INT_CTL Bits */ --#define SEP_INTR_CTL_MASK ( (uint32_t)0x01 ) /* out-of-band interrupt mask */ --#define SEP_INTR_CTL_EN ( (uint32_t)0x02 ) /* out-of-band interrupt output enable */ --#define SEP_INTR_CTL_POL ( (uint32_t)0x04 ) /* out-of-band interrupt polarity */ -- --/* SDIOD_CCCR_INTPEND Bits */ --#define INTR_STATUS_FUNC1 ( (uint32_t)0x02 ) /* interrupt pending for function 1 */ --#define INTR_STATUS_FUNC2 ( (uint32_t)0x04 ) /* interrupt pending for function 2 */ --#define INTR_STATUS_FUNC3 ( (uint32_t)0x08 ) /* interrupt pending for function 3 */ -- --/* SDIOD_CCCR_IOABORT Bits */ --#define IO_ABORT_RESET_ALL ( (uint32_t)0x08 ) /* I/O card reset */ --#define IO_ABORT_FUNC_MASK ( (uint32_t)0x07 ) /* abort selction: function x */ -- --/* SDIOD_CCCR_BICTRL Bits */ --#define BUS_CARD_DETECT_DIS ( (uint32_t)0x80 ) /* Card Detect disable */ --#define BUS_SPI_CONT_INTR_CAP ( (uint32_t)0x40 ) /* support continuous SPI interrupt */ --#define BUS_SPI_CONT_INTR_EN ( (uint32_t)0x20 ) /* continuous SPI interrupt enable */ --#define BUS_SD_DATA_WIDTH_MASK ( (uint32_t)0x03 ) /* bus width mask */ --#define BUS_SD_DATA_WIDTH_4BIT ( (uint32_t)0x02 ) /* bus width 4-bit mode */ --#define BUS_SD_DATA_WIDTH_1BIT ( (uint32_t)0x00 ) /* bus width 1-bit mode */ -- --/* SDIOD_CCCR_CAPABLITIES Bits */ --#define SDIO_CAP_4BLS ( (uint32_t)0x80 ) /* 4-bit support for low speed card */ --#define SDIO_CAP_LSC ( (uint32_t)0x40 ) /* low speed card */ --#define SDIO_CAP_E4MI ( (uint32_t)0x20 ) /* enable interrupt between block of data in 4-bit mode */ --#define SDIO_CAP_S4MI ( (uint32_t)0x10 ) /* support interrupt between block of data in 4-bit mode */ --#define SDIO_CAP_SBS ( (uint32_t)0x08 ) /* support suspend/resume */ --#define SDIO_CAP_SRW ( (uint32_t)0x04 ) /* support read wait */ --#define SDIO_CAP_SMB ( (uint32_t)0x02 ) /* support multi-block transfer */ --#define SDIO_CAP_SDC ( (uint32_t)0x01 ) /* Support Direct commands during multi-byte transfer */ -- --/* SDIOD_CCCR_POWER_CONTROL Bits */ --#define SDIO_POWER_SMPC ( (uint32_t)0x01 ) /* supports master power control (RO) */ --#define SDIO_POWER_EMPC ( (uint32_t)0x02 ) /* enable master power control (allow > 200mA) (RW) */ -- --/* SDIOD_CCCR_SPEED_CONTROL Bits */ --#define SDIO_SPEED_SHS ( (uint32_t)0x01 ) /* supports high-speed [clocking] mode (RO) */ --#define SDIO_SPEED_EHS ( (uint32_t)0x02 ) /* enable high-speed [clocking] mode (RW) */ -- --/* SDIOD_CCCR_BRCM_CARDCAP Bits */ --#define SDIOD_CCCR_BRCM_CARDCAP_CMD14_SUPPORT ( (uint32_t)0x02 ) /* Supports CMD14 */ --#define SDIOD_CCCR_BRCM_CARDCAP_CMD14_EXT ( (uint32_t)0x04 ) /* CMD14 is allowed in FSM command state */ --#define SDIOD_CCCR_BRCM_CARDCAP_CMD_NODEC ( (uint32_t)0x08 ) /* sdiod_aos does not decode any command */ -- --/* SDIO_FUNCTION_INT_MASK Bits*/ --#define SDIO_FUNC_MASK_F1 ( (uint32_t)0x01 ) /* interrupt mask enable for function 1 */ --#define SDIO_FUNC_MASK_F2 ( (uint32_t)0x02 ) /* interrupt mask enable for function 2 */ -- --/* SDIO_DEVICE_CONTROL Bits */ --#define SDIO_DATA_PAD_ISO ( (uint32_t)0x08 ) /* isolate internal SDIO data bus signals */ -- --/* SDIO_CHIP_CLOCK_CSR Bits */ --#define SBSDIO_FORCE_ALP ( (uint32_t)0x01 ) /* Force ALP request to backplane */ --#define SBSDIO_FORCE_HT ( (uint32_t)0x02 ) /* Force HT request to backplane */ --#define SBSDIO_FORCE_ILP ( (uint32_t)0x04 ) /* Force ILP request to backplane */ --#define SBSDIO_ALP_AVAIL_REQ ( (uint32_t)0x08 ) /* Make ALP ready (power up xtal) */ --#define SBSDIO_HT_AVAIL_REQ ( (uint32_t)0x10 ) /* Make HT ready (power up PLL) */ --#define SBSDIO_FORCE_HW_CLKREQ_OFF ( (uint32_t)0x20 ) /* Squelch clock requests from HW */ --#define SBSDIO_ALP_AVAIL ( (uint32_t)0x40 ) /* Status: ALP is ready */ --#define SBSDIO_HT_AVAIL ( (uint32_t)0x80 ) /* Status: HT is ready */ --#define SBSDIO_Rev8_HT_AVAIL ( (uint32_t)0x40 ) --#define SBSDIO_Rev8_ALP_AVAIL ( (uint32_t)0x80 ) -- --/* SDIO_FRAME_CONTROL Bits */ --#define SFC_RF_TERM ( (uint32_t)(1 << 0) ) /* Read Frame Terminate */ --#define SFC_WF_TERM ( (uint32_t)(1 << 1) ) /* Write Frame Terminate */ --#define SFC_CRC4WOOS ( (uint32_t)(1 << 2) ) /* HW reports CRC error for write out of sync */ --#define SFC_ABORTALL ( (uint32_t)(1 << 3) ) /* Abort cancels all in-progress frames */ -- --/* SDIO_TO_SB_MAIL_BOX bits corresponding to intstatus bits */ --#define SMB_NAK ( (uint32_t)(1 << 0) ) /* To SB Mailbox Frame NAK */ --#define SMB_INT_ACK ( (uint32_t)(1 << 1) ) /* To SB Mailbox Host Interrupt ACK */ --#define SMB_USE_OOB ( (uint32_t)(1 << 2) ) /* To SB Mailbox Use OOB Wakeup */ --#define SMB_DEV_INT ( (uint32_t)(1 << 3) ) /* To SB Mailbox Miscellaneous Interrupt */ -- --/* SDIO_WAKEUP_CTRL bits */ --#define SBSDIO_WCTRL_WAKE_TILL_ALP_AVAIL ( (uint32_t)(1 << 0) ) /* WakeTillAlpAvail bit */ --#define SBSDIO_WCTRL_WAKE_TILL_HT_AVAIL ( (uint32_t)(1 << 1) ) /* WakeTillHTAvail bit */ -- --/* SDIO_SLEEP_CSR bits */ --#define SBSDIO_SLPCSR_KEEP_SDIO_ON ( (uint32_t)(1 << 0) ) /* KeepSdioOn bit */ --#define SBSDIO_SLPCSR_DEVICE_ON ( (uint32_t)(1 << 1) ) /* DeviceOn bit */ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_SDIO_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_spi.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_spi.h -deleted file mode 100644 -index 45c418e303..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/bus_protocols/whd_spi.h -+++ /dev/null -@@ -1,122 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef INCLUDED_WHD_SPI_H_ --#define INCLUDED_WHD_SPI_H_ -- --#ifdef __cplusplus --extern "C" { --#endif -- --/****************************************************** --* SPI Constants --******************************************************/ --/* GSPI v1 */ --#define SPI_FRAME_CONTROL ( (uint32_t)0x1000D ) -- --/* Register addresses */ --#define SPI_BUS_CONTROL ( (uint32_t)0x0000 ) --#define SPI_RESPONSE_DELAY ( (uint32_t)0x0001 ) --#define SPI_STATUS_ENABLE ( (uint32_t)0x0002 ) --#define SPI_RESET_BP ( (uint32_t)0x0003 ) /* (corerev >= 1) */ --#define SPI_INTERRUPT_REGISTER ( (uint32_t)0x0004 ) /* 16 bits - Interrupt status */ --#define SPI_INTERRUPT_ENABLE_REGISTER ( (uint32_t)0x0006 ) /* 16 bits - Interrupt mask */ --#define SPI_STATUS_REGISTER ( (uint32_t)0x0008 ) /* 32 bits */ --#define SPI_FUNCTION1_INFO ( (uint32_t)0x000C ) /* 16 bits */ --#define SPI_FUNCTION2_INFO ( (uint32_t)0x000E ) /* 16 bits */ --#define SPI_FUNCTION3_INFO ( (uint32_t)0x0010 ) /* 16 bits */ --#define SPI_READ_TEST_REGISTER ( (uint32_t)0x0014 ) /* 32 bits */ --#define SPI_RESP_DELAY_F0 ( (uint32_t)0x001c ) /* 8 bits (corerev >= 3) */ --#define SPI_RESP_DELAY_F1 ( (uint32_t)0x001d ) /* 8 bits (corerev >= 3) */ --#define SPI_RESP_DELAY_F2 ( (uint32_t)0x001e ) /* 8 bits (corerev >= 3) */ --#define SPI_RESP_DELAY_F3 ( (uint32_t)0x001f ) /* 8 bits (corerev >= 3) */ -- --/****************************************************** --* Bit Masks --******************************************************/ -- --/* GSPI */ --#define SPI_READ_TEST_REGISTER_VALUE ( (uint32_t)0xFEEDBEAD ) --#define SPI_READ_TEST_REG_LSB ( ( (SPI_READ_TEST_REGISTER_VALUE) ) & 0xff ) --#define SPI_READ_TEST_REG_LSB_SFT1 ( ( (SPI_READ_TEST_REGISTER_VALUE << 1) ) & 0xff ) --#define SPI_READ_TEST_REG_LSB_SFT2 ( ( (SPI_READ_TEST_REGISTER_VALUE << 1) + 1 ) & 0xff ) --#define SPI_READ_TEST_REG_LSB_SFT3 ( ( (SPI_READ_TEST_REGISTER_VALUE + 1) << 1 ) & 0xff ) -- --/* SPI_BUS_CONTROL Bits */ --#define WORD_LENGTH_32 ( (uint32_t)0x01 ) /* 0/1 16/32 bit word length */ --#define ENDIAN_BIG ( (uint32_t)0x02 ) /* 0/1 Little/Big Endian */ --#define CLOCK_PHASE ( (uint32_t)0x04 ) /* 0/1 clock phase delay */ --#define CLOCK_POLARITY ( (uint32_t)0x08 ) /* 0/1 Idle state clock polarity is low/high */ --#define HIGH_SPEED_MODE ( (uint32_t)0x10 ) /* 1/0 High Speed mode / Normal mode */ --#define INTERRUPT_POLARITY_HIGH ( (uint32_t)0x20 ) /* 1/0 Interrupt active polarity is high/low */ --#define WAKE_UP ( (uint32_t)0x80 ) /* 0/1 Wake-up command from Host to WLAN */ -- --/* SPI_RESPONSE_DELAY Bit mask */ --#define RESPONSE_DELAY_MASK 0xFF /* Configurable rd response delay in multiples of 8 bits */ -- --/* SPI_STATUS_ENABLE Bits */ --#define STATUS_ENABLE ( (uint32_t)0x01 ) /* 1/0 Status sent/not sent to host after read/write */ --#define INTR_WITH_STATUS ( (uint32_t)0x02 ) /* 0/1 Do-not / do-interrupt if status is sent */ --#define RESP_DELAY_ALL ( (uint32_t)0x04 ) /* Applicability of resp delay to F1 or all func's read */ --#define DWORD_PKT_LEN_EN ( (uint32_t)0x08 ) /* Packet len denoted in dwords instead of bytes */ --#define CMD_ERR_CHK_EN ( (uint32_t)0x20 ) /* Command error check enable */ --#define DATA_ERR_CHK_EN ( (uint32_t)0x40 ) /* Data error check enable */ -- --/* SPI_RESET_BP Bits*/ --#define RESET_ON_WLAN_BP_RESET ( (uint32_t)0x04 ) /* enable reset for WLAN backplane */ --#define RESET_SPI ( (uint32_t)0x80 ) /* reset the above enabled logic */ -- --/* SPI_INTERRUPT_REGISTER and SPI_INTERRUPT_ENABLE_REGISTER Bits */ --#define DATA_UNAVAILABLE ( (uint32_t)0x0001 ) /* Requested data not available; Clear by writing a "1" */ --#define F2_F3_FIFO_RD_UNDERFLOW ( (uint32_t)0x0002 ) --#define F2_F3_FIFO_WR_OVERFLOW ( (uint32_t)0x0004 ) --#define COMMAND_ERROR ( (uint32_t)0x0008 ) /* Cleared by writing 1 */ --#define DATA_ERROR ( (uint32_t)0x0010 ) /* Cleared by writing 1 */ --#define F2_PACKET_AVAILABLE ( (uint32_t)0x0020 ) --#define F3_PACKET_AVAILABLE ( (uint32_t)0x0040 ) --#define F1_OVERFLOW ( (uint32_t)0x0080 ) /* Due to last write. Bkplane has pending write requests */ --#define MISC_INTR0 ( (uint32_t)0x0100 ) --#define MISC_INTR1 ( (uint32_t)0x0200 ) --#define MISC_INTR2 ( (uint32_t)0x0400 ) --#define MISC_INTR3 ( (uint32_t)0x0800 ) --#define MISC_INTR4 ( (uint32_t)0x1000 ) --#define F1_INTR ( (uint32_t)0x2000 ) --#define F2_INTR ( (uint32_t)0x4000 ) --#define F3_INTR ( (uint32_t)0x8000 ) -- --/* SPI_STATUS_REGISTER Bits */ --#define STATUS_DATA_NOT_AVAILABLE ( (uint32_t)0x00000001 ) --#define STATUS_UNDERFLOW ( (uint32_t)0x00000002 ) --#define STATUS_OVERFLOW ( (uint32_t)0x00000004 ) --#define STATUS_F2_INTR ( (uint32_t)0x00000008 ) --#define STATUS_F3_INTR ( (uint32_t)0x00000010 ) --#define STATUS_F2_RX_READY ( (uint32_t)0x00000020 ) --#define STATUS_F3_RX_READY ( (uint32_t)0x00000040 ) --#define STATUS_HOST_CMD_DATA_ERR ( (uint32_t)0x00000080 ) --#define STATUS_F2_PKT_AVAILABLE ( (uint32_t)0x00000100 ) --#define STATUS_F2_PKT_LEN_MASK ( (uint32_t)0x000FFE00 ) --#define STATUS_F2_PKT_LEN_SHIFT ( (uint32_t)9 ) --#define STATUS_F3_PKT_AVAILABLE ( (uint32_t)0x00100000 ) --#define STATUS_F3_PKT_LEN_MASK ( (uint32_t)0xFFE00000 ) --#define STATUS_F3_PKT_LEN_SHIFT ( (uint32_t)21 ) -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_SPI_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_ap.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_ap.h -deleted file mode 100644 -index 903ef23760..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_ap.h -+++ /dev/null -@@ -1,102 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides prototypes / declarations for APSTA functionality -- */ --#ifndef INCLUDED_WHD_AP_H --#define INCLUDED_WHD_AP_H -- --#include "whd.h" --#include "cyabs_rtos.h" -- --#ifdef __cplusplus --extern "C" { --#endif -- --/****************************************************** --* Macros --******************************************************/ --#define AMPDU_RX_FACTOR_8K 0 /* max receive AMPDU length is 8kb */ --#define AMPDU_RX_FACTOR_16K 1 /* max receive AMPDU length is 16kb */ --#define AMPDU_RX_FACTOR_32K 2 /* max receive AMPDU length is 32kb */ --#define AMPDU_RX_FACTOR_64K 3 /* max receive AMPDU length is 64kb */ --#define AMPDU_RX_FACTOR_INVALID 0xff /* invalid rx factor; ignore */ --#define AMPDU_MPDU_AUTO (-1) /* Auto number of mpdu in ampdu */ -- -- --#define BANDWIDTH_20MHZ (20) /* 802.11n, 802.11ac 20Mhz Bandwidth */ --#define BANDWIDTH_40MHZ (40) /* 802.11n, 802.11ac 40Mhz Bandwidth */ --#define BANDWIDTH_80MHZ (80) /* 802.11ac 80Mhz Bandwidth */ -- --#define WHD_WIFI_CONFIG_AP_MAX_ASSOC 5 -- --#define CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(buff, \ -- sema) if (buff == \ -- NULL){ WPRINT_WHD_ERROR( ("Buffer alloc failed in %s at %d \n", \ -- __func__, __LINE__) ); \ -- whd_assert("Buffer alloc failed\n", 0 == 1); \ -- (void)cy_rtos_deinit_semaphore(sema); \ -- return WHD_BUFFER_ALLOC_FAIL; } -- --#define CHECK_RETURN_WITH_SEMAPHORE(expr, sema) { whd_result_t check_res = (expr); if (check_res != WHD_SUCCESS) \ -- { WPRINT_WHD_ERROR( ("Command failed in %s at %d \n", __func__, \ -- __LINE__) ); \ -- whd_assert("Command failed\n", 0 == 1); \ -- (void)cy_rtos_deinit_semaphore(sema); \ -- return check_res; } } -- --/****************************************************** --* Structures --******************************************************/ --typedef struct whd_ap_int_info --{ -- whd_bool_t ap_is_up; -- whd_bool_t is_waiting_event; -- cy_semaphore_t whd_wifi_sleep_flag; -- --} whd_ap_int_info_t; -- --/****************************************************** --* Function prototypes --******************************************************/ --extern whd_result_t whd_wifi_set_block_ack_window_size_common(whd_interface_t interface, uint16_t ap_win_size, -- uint16_t sta_win_size); --extern whd_result_t whd_wifi_set_ampdu_parameters_common(whd_interface_t interface, uint8_t ba_window_size, -- int8_t ampdu_mpdu, uint8_t rx_factor); --extern void whd_wifi_set_ap_is_up(whd_driver_t whd_driver, whd_bool_t new_state); --extern whd_bool_t whd_wifi_get_ap_is_up(whd_driver_t whd_driver); --void whd_ap_info_init(whd_driver_t whd_driver); --whd_result_t whd_wifi_set_block_ack_window_size(whd_interface_t ifp); -- -- --/** Set the AMPDU parameters for both Soft AP and STA -- * -- * Sets various AMPDU parameters for Soft AP and STA to ensure that the number of buffers dedicated to AMPDUs does -- * not exceed the resources of the chip. Both Soft AP and STA interfaces must be down. -- * -- * @return WHD_SUCCESS : if the AMPDU parameters were successfully set -- * WHD_ERROR : if the AMPDU parameters were not successfully set -- */ --extern whd_result_t whd_wifi_set_ampdu_parameters(whd_interface_t ifp); -- --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_AP_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_buffer_api.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_buffer_api.h -deleted file mode 100644 -index 60eecaa927..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_buffer_api.h -+++ /dev/null -@@ -1,151 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides prototypes / declarations for common APSTA functionality -- */ --#ifndef _WHD_INTERNAL_BUFFER_API_H_ --#define _WHD_INTERNAL_BUFFER_API_H_ -- --#include "whd.h" --#include "whd_int.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Macros --******************************************************/ -- --/****************************************************** --* Structures --******************************************************/ -- --/****************************************************** --* Function prototypes --******************************************************/ --/** Allocates a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Attempts to allocate a packet buffer of the size requested. It can do this -- * by allocating a pre-existing packet from a pool, using a static buffer, -- * or by dynamically allocating memory. The method of allocation does not -- * concern WHD, however it must match the way the network stack expects packet -- * buffers to be allocated. -- * -- * @param buffer : A pointer which receives the allocated packet buffer handle -- * @param direction : Indicates transmit/receive direction that the packet buffer is -- * used for. This may be needed if tx/rx pools are separate. -- * @param size : The number of bytes to allocate. -- * @param wait : Whether to wait for a packet buffer to be available -- * -- * @return : WHD_SUCCESS or error code -- * -- */ --whd_result_t whd_host_buffer_get(whd_driver_t whd_driver, whd_buffer_t *buffer, whd_buffer_dir_t direction, -- uint16_t size, uint32_t wait); -- --/** Releases a packet buffer -- * -- * Implemented in the port layer interface, which will be specific to the -- * buffering scheme in use. -- * This function is used by WHD to indicate that it no longer requires -- * a packet buffer. The buffer can then be released back into a pool for -- * reuse, or the dynamically allocated memory can be freed, according to -- * how the packet was allocated. -- * Returns void since WHD cannot do anything about failures -- * -- * @param buffer : The handle of the packet buffer to be released -- * @param direction : Indicates transmit/receive direction that the packet buffer has -- * been used for. This might be needed if tx/rx pools are separate. -- * -- */ --whd_result_t whd_buffer_release(whd_driver_t whd_driver, whd_buffer_t buffer, whd_buffer_dir_t direction); -- --/** Retrieves the current pointer of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, this function allows WHD to get -- * the current 'front' location pointer. -- * -- * @param buffer : The handle of the packet buffer whose pointer is to be retrieved -- * -- * @return : The packet buffer's current pointer. -- */ --uint8_t *whd_buffer_get_current_piece_data_pointer(whd_driver_t whd_driver, whd_buffer_t buffer); -- --/** Retrieves the size of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, the memory block used to contain a packet buffer -- * will often be larger than the current size of the packet buffer data. -- * This function allows WHD to retrieve the current size of a packet buffer's data. -- * -- * @param buffer : The handle of the packet buffer whose size is to be retrieved -- * -- * @return : The size of the packet buffer. -- */ --uint16_t whd_buffer_get_current_piece_size(whd_driver_t whd_driver, whd_buffer_t buffer); -- --/** Sets the current size of a WHD packet -- * -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * This function sets the current length of a WHD packet buffer -- * -- * @param buffer : The packet to be modified -- * @param size : The new size of the packet buffer -- * -- * @return : WHD_SUCCESS or error code -- */ --whd_result_t whd_buffer_set_size(whd_driver_t whd_driver, whd_buffer_t buffer, uint16_t size); -- --/** Moves the current pointer of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the buffering scheme in use. -- * -- * Since packet buffers usually need to be created with space at the front for additional headers, -- * this function allows WHD to move the current 'front' location pointer so that it has space to -- * add headers to transmit packets, and so that the network stack does not see the internal WHD -- * headers on received packets. -- * -- * @param buffer : A pointer to the handle of the current packet buffer for which the -- * current pointer will be moved. On return this may contain a pointer -- * to a newly allocated packet buffer which has been daisy chained to -- * the front of the given one. This would be the case if the given packet -- * buffer didn't have enough space at the front. -- * @param add_remove_amount : This is the number of bytes to move the current pointer of the packet -- * buffer - a negative value increases the space for headers at the front -- * of the packet, a positive value decreases the space. -- * -- * @return : WHD_SUCCESS or error code -- */ --whd_result_t whd_buffer_add_remove_at_front(whd_driver_t whd_driver, whd_buffer_t *buffer, int32_t add_remove_amount); --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif /* ifndef _WHD_INTERNAL_BUFFER_API_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_cdc_bdc.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_cdc_bdc.h -deleted file mode 100644 -index 8026b31522..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_cdc_bdc.h -+++ /dev/null -@@ -1,158 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef INCLUDED_WHD_CDC_BDC_H --#define INCLUDED_WHD_CDC_BDC_H -- --#include "whd.h" --#include "cyabs_rtos.h" --#include "whd_events_int.h" --#include "whd_types_int.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Constants --******************************************************/ -- --/* CDC flag definition taken from bcmcdc.h */ --#define CDCF_IOC_SET (0x02) /** 0=get, 1=set cmd */ --#define WHD_EVENT_HANDLER_LIST_SIZE (5) /** Maximum number of simultaneously registered event handlers */ --#define WHD_SDALIGN 32 -- --/* CDC flag definitions taken from bcmcdc.h */ --#define CDCF_IOC_ERROR (0x01) /** 0=success, 1=ioctl cmd failed */ --#define CDCF_IOC_IF_MASK (0xF000) /** I/F index */ --#define CDCF_IOC_IF_SHIFT (12) /** # of bits of shift for I/F Mask */ --#define CDCF_IOC_ID_MASK (0xFFFF0000) /** used to uniquely id an ioctl req/resp pairing */ --#define CDCF_IOC_ID_SHIFT (16) /** # of bits of shift for ID Mask */ -- --#define DATA_AFTER_HEADER(x) ( (void *)(&x[1]) ) -- --#define BDC_HEADER_LEN (4) -- --/****************************************************** --* Enumerations --******************************************************/ -- --typedef enum sdpcm_command_type_enum --{ -- CDC_GET = 0x00, -- CDC_SET = CDCF_IOC_SET --} cdc_command_type_t; -- --/****************************************************** --* Structures --******************************************************/ --#pragma pack(1) --typedef struct --{ -- uint32_t cmd; /* ioctl command value */ -- uint32_t len; /* lower 16: output buflen; upper 16: input buflen (excludes header) */ -- uint32_t flags; /* flag defns given in bcmcdc.h */ -- uint32_t status; /* status code returned from the device */ --} cdc_header_t; -- --typedef struct --{ -- uint8_t flags; /* Flags */ -- uint8_t priority; /* 802.1d Priority (low 3 bits) */ -- uint8_t flags2; -- uint8_t data_offset; /* Offset from end of BDC header to packet data, in 4-uint8_t words. -- * Leaves room for optional headers.*/ --} bdc_header_t; -- --typedef struct --{ -- whd_mac_t destination_address; -- whd_mac_t source_address; -- uint16_t ethertype; --} ethernet_header_t; -- --#pragma pack() -- --/** Event list element structure -- * -- * events : A pointer to a whd_event_num_t array that is terminated with a WLC_E_NONE event -- * handler: A pointer to the whd_event_handler_t function that will receive the event -- * handler_user_data : User provided data that will be passed to the handler when a matching event occurs -- */ --typedef struct --{ -- whd_bool_t event_set; -- whd_event_num_t events[WHD_MAX_EVENT_SUBSCRIPTION]; -- whd_event_handler_t handler; -- void *handler_user_data; -- uint8_t ifidx; --} event_list_elem_t; -- --/** @endcond */ -- --typedef struct whd_cdc_info --{ -- /* Event list variables */ -- event_list_elem_t whd_event_list[WHD_EVENT_HANDLER_LIST_SIZE]; -- cy_semaphore_t event_list_mutex; -- -- /* IOCTL variables*/ -- uint16_t requested_ioctl_id; -- cy_semaphore_t ioctl_mutex; -- whd_buffer_t ioctl_response; -- cy_semaphore_t ioctl_sleep; -- --} whd_cdc_bdc_info_t; -- --/****************************************************** --* Function Declarations --******************************************************/ -- --whd_result_t whd_cdc_bdc_info_init(whd_driver_t whd_driver); --void whd_cdc_bdc_info_deinit(whd_driver_t whd_driver); -- --whd_result_t whd_cdc_send_iovar(whd_interface_t ifp, cdc_command_type_t type, -- whd_buffer_t send_buffer_hnd, -- whd_buffer_t *response_buffer_hnd); -- --whd_result_t whd_cdc_send_ioctl(whd_interface_t ifp, cdc_command_type_t type, uint32_t command, -- whd_buffer_t send_buffer_hnd, -- whd_buffer_t *response_buffer_hnd); -- --void *whd_cdc_get_iovar_buffer(whd_driver_t whd_driver, -- whd_buffer_t *buffer, -- uint16_t data_length, -- const char *name); --void whd_network_send_ethernet_data(whd_interface_t ifp, whd_buffer_t buffer); -- --void *whd_cdc_get_ioctl_buffer(whd_driver_t whd_driver, -- whd_buffer_t *buffer, -- uint16_t data_length); -- --void whd_process_cdc(whd_driver_t whd_driver, whd_buffer_t buffer); -- --void whd_process_bdc(whd_driver_t whd_driver, whd_buffer_t buffer); -- --void whd_process_bdc_event(whd_driver_t whd_driver, whd_buffer_t buffer, uint16_t size); -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_CDC_BDC_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip.h -deleted file mode 100644 -index 6958775460..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip.h -+++ /dev/null -@@ -1,393 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef INCLUDED_WHD_CHIP_H --#define INCLUDED_WHD_CHIP_H -- --#include "cyabs_rtos.h" /* For cy_semaphore_t */ -- --#include "whd_endian.h" --#include "whd.h" --#include "whd_wifi_api.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Constants --******************************************************/ --#define WHD_WLAN_WAKE_TIMEOUT (10000) --#define WHD_SHARED_MEMORY_POLLING_DELAY (10) --#define SICF_CPUHALT (0x0020) -- --/****************************************************** --* Enumerations --******************************************************/ --/** -- * Enumerated list of aggregate codes and edit WHD_COUNTRY_AGGREGATE_CUSTOMER for supporting new aggregate -- * as per customer like XZ/278 -- */ --typedef enum --{ -- WHD_COUNTRY_AGGREGATE_XA_0 = MK_CNTRY('X', 'A', 0), -- WHD_COUNTRY_AGGREGATE_XT_0 = MK_CNTRY('X', 'T', 0), -- WHD_COUNTRY_AGGREGATE_XV_0 = MK_CNTRY('X', 'V', 0), -- WHD_COUNTRY_AGGREGATE_CUSTOMER = MK_CNTRY('X', 'Z', 278), --} whd_aggregate_code_t; -- --typedef enum --{ -- /* Note : If changing this, core_base_address must be changed also */ -- WLAN_ARM_CORE = 0, SOCRAM_CORE = 1, SDIOD_CORE = 2 --} device_core_t; -- --typedef enum --{ -- WLAN_DOWN, WLAN_UP, WLAN_OFF --} wlan_state_t; -- --typedef enum --{ -- WLAN_CORE_FLAG_NONE, WLAN_CORE_FLAG_CPU_HALT, --} wlan_core_flag_t; -- --/** -- * Enumeration of AKM (authentication and key management) suites. Table 8-140 802.11mc D3.0. -- */ --typedef enum --{ -- WHD_AKM_RESERVED = 0, -- WHD_AKM_8021X = 1, /**< WPA2 enterprise */ -- WHD_AKM_PSK = 2, /**< WPA2 PSK */ -- WHD_AKM_FT_8021X = 3, /**< 802.11r Fast Roaming enterprise */ -- WHD_AKM_FT_PSK = 4, /**< 802.11r Fast Roaming PSK */ -- WHD_AKM_8021X_SHA256 = 5, -- WHD_AKM_PSK_SHA256 = 6, -- WHD_AKM_TDLS = 7, /**< Tunneled Direct Link Setup */ -- WHD_AKM_SAE_SHA256 = 8, -- WHD_AKM_FT_SAE_SHA256 = 9, -- WHD_AKM_AP_PEER_KEY_SHA256 = 10, -- WHD_AKM_SUITEB_8021X_HMAC_SHA256 = 11, -- WHD_AKM_SUITEB_8021X_HMAC_SHA384 = 12, -- WHD_AKM_SUITEB_FT_8021X_HMAC_SHA384 = 13, --} whd_akm_suite_t; -- --/** -- * Enumeration of cipher suites. Table 8-138 802.11mc D3.0. -- */ --typedef enum --{ -- WHD_CIPHER_GROUP = 0, /**< Use group cipher suite */ -- WHD_CIPHER_WEP_40 = 1, /**< WEP-40 */ -- WHD_CIPHER_TKIP = 2, /**< TKIP */ -- WHD_CIPHER_RESERVED = 3, /**< Reserved */ -- WHD_CIPHER_CCMP_128 = 4, /**< CCMP-128 - default pairwise and group cipher suite in an RSNA */ -- WHD_CIPHER_WEP_104 = 5, /**< WEP-104 - also known as WEP-128 */ -- WHD_CIPHER_BIP_CMAC_128 = 6, /**< BIP-CMAC-128 - default management frame cipher suite */ -- WHD_CIPHER_GROUP_DISALLOWED = 7, /**< Group address traffic not allowed */ -- WHD_CIPHER_GCMP_128 = 8, /**< GCMP-128 - default for 60 GHz STAs */ -- WHD_CIPHER_GCMP_256 = 9, /**< GCMP-256 - introduced for Suite B */ -- WHD_CIPHER_CCMP_256 = 10, /**< CCMP-256 - introduced for suite B */ -- WHD_CIPHER_BIP_GMAC_128 = 11, /**< BIP-GMAC-128 - introduced for suite B */ -- WHD_CIPHER_BIP_GMAC_256 = 12, /**< BIP-GMAC-256 - introduced for suite B */ -- WHD_CIPHER_BIP_CMAC_256 = 13, /**< BIP-CMAC-256 - introduced for suite B */ --} whd_80211_cipher_t; -- --/****************************************************** --* Structures --******************************************************/ -- --typedef struct whd_chip_info --{ -- uint16_t chip_id; -- whd_bool_t save_restore_enable; -- --} whd_chip_info_t; -- --typedef struct --{ -- wlan_state_t state; -- whd_country_code_t country_code; -- whd_aggregate_code_t aggregate_code; -- uint32_t keep_wlan_awake; --} whd_wlan_status_t; -- --#pragma pack(1) -- --/* 802.11 Information Element structures */ -- --/* Country Information */ --#define COUNTRY_INFO_IE_MINIMUM_LENGTH (6) -- --typedef struct --{ -- uint8_t first_chan_num; -- uint8_t num_chans; -- uint8_t max_tx_pwr_level; --} country_chan_info_t; -- --/* Structures for TLVs with 8-bit type and 8-bit length */ --typedef struct --{ -- uint8_t type; -- uint8_t length; --} whd_tlv8_header_t; -- --typedef struct --{ -- uint8_t type; -- uint8_t length; -- uint8_t data[1]; --} whd_tlv8_data_t; -- --typedef struct --{ -- whd_tlv8_header_t tlv_header; /* id, length */ -- char ccode[2]; /* dot11CountryString MIB octet 1~2, two letter country code */ -- uint8_t env; /* dot11CountryString MIB octet 3, indicate indoor/outdoor environment */ -- country_chan_info_t country_chan_info[1]; /* At least one country channel info triples */ --} country_info_ie_fixed_portion_t; -- --/* Robust Secure Network */ --typedef struct --{ -- whd_tlv8_header_t tlv_header; /* id, length */ -- uint16_t version; -- uint32_t group_key_suite; /* See whd_80211_cipher_t for values */ -- uint16_t pairwise_suite_count; -- uint32_t pairwise_suite_list[1]; --} rsn_ie_fixed_portion_t; -- --#define RSN_IE_MINIMUM_LENGTH (8) -- --typedef struct --{ -- whd_tlv8_header_t tlv_header; /* id, length */ -- uint8_t oui[4]; --} vendor_specific_ie_header_t; -- --#define VENDOR_SPECIFIC_IE_MINIMUM_LENGTH (4) -- --/* WPA IE */ --typedef struct --{ -- vendor_specific_ie_header_t vendor_specific_header; -- uint16_t version; -- uint32_t multicast_suite; -- uint16_t unicast_suite_count; -- uint8_t unicast_suite_list[1][4]; --} wpa_ie_fixed_portion_t; -- --#define WPA_IE_MINIMUM_LENGTH (12) -- --typedef struct --{ -- uint16_t akm_suite_count; -- uint32_t akm_suite_list[1]; --} akm_suite_portion_t; -- --typedef struct --{ -- whd_tlv8_header_t tlv_header; /* id, length */ -- uint16_t ht_capabilities_info; -- uint8_t ampdu_parameters; -- uint8_t rx_mcs[10]; -- uint16_t rxhighest_supported_data_rate; -- uint8_t tx_supported_mcs_set; -- uint8_t tx_mcs_info[3]; -- uint16_t ht_extended_capabilities; -- uint32_t transmit_beam_forming_capabilities; -- uint8_t antenna_selection_capabilities; --} ht_capabilities_ie_t; -- --#define HT_CAPABILITIES_INFO_LDPC_CODING_CAPABILITY (1 << 0) --#define HT_CAPABILITIES_INFO_SUPPORTED_CHANNEL_WIDTH_SET (1 << 1) --#define HT_CAPABILITIES_INFO_SM_POWER_SAVE_OFFSET (1 << 2) --#define HT_CAPABILITIES_INFO_SM_POWER_SAVE_MASK (3 << 2) --#define HT_CAPABILITIES_INFO_HT_GREENFIELD (1 << 4) --#define HT_CAPABILITIES_INFO_SHORT_GI_FOR_20MHZ (1 << 5) --#define HT_CAPABILITIES_INFO_SHORT_GI_FOR_40MHZ (1 << 6) --#define HT_CAPABILITIES_INFO_TX_STBC (1 << 7) --#define HT_CAPABILITIES_INFO_RX_STBC_OFFSET (1 << 8) --#define HT_CAPABILITIES_INFO_RX_STBC_MASK (3 << 8) --#define HT_CAPABILITIES_INFO_HT_DELAYED_BLOCK_ACK (1 << 10) --#define HT_CAPABILITIES_INFO_MAXIMUM_A_MSDU_LENGTH (1 << 11) --#define HT_CAPABILITIES_INFO_DSSS_CCK_MODE_IN_40MHZ (1 << 12) --/* bit 13 reserved */ --#define HT_CAPABILITIES_INFO_40MHZ_INTOLERANT (1 << 14) --#define HT_CAPABILITIES_INFO_L_SIG_TXOP_PROTECTION_SUPPORT (1 << 15) -- --typedef unsigned int uint; --typedef struct --{ -- uint buf; -- uint buf_size; -- uint idx; -- uint out_idx; /* output index */ --} hnd_log_t; -- --#define CBUF_LEN 128 -- --typedef struct --{ -- /* Virtual UART -- * When there is no UART (e.g. Quickturn), the host should write a complete -- * input line directly into cbuf and then write the length into vcons_in. -- * This may also be used when there is a real UART (at risk of conflicting with -- * the real UART). vcons_out is currently unused. -- */ -- volatile uint vcons_in; -- volatile uint vcons_out; -- -- /* Output (logging) buffer -- * Console output is written to a ring buffer log_buf at index log_idx. -- * The host may read the output when it sees log_idx advance. -- * Output will be lost if the output wraps around faster than the host polls. -- */ -- hnd_log_t log; -- -- /* Console input line buffer -- * Characters are read one at a time into cbuf until is received, then -- * the buffer is processed as a command line. Also used for virtual UART. -- */ -- uint cbuf_idx; -- char cbuf[CBUF_LEN]; --} hnd_cons_t; -- --typedef struct wifi_console --{ -- uint count; /* Poll interval msec counter */ -- uint log_addr; /* Log struct address (fixed) */ -- hnd_log_t log; /* Log struct (host copy) */ -- uint bufsize; /* Size of log buffer */ -- char *buf; /* Log buffer (host copy) */ -- uint last; /* Last buffer read index */ --} wifi_console_t; -- --typedef struct --{ -- uint flags; -- uint trap_addr; -- uint assert_exp_addr; -- uint assert_file_addr; -- uint assert_line; -- uint console_addr; -- uint msgtrace_addr; -- uint fwid; --} wlan_shared_t; -- --/* Buffer size to be allocated to read wlan log */ --#define WLAN_LOG_BUF_LEN (4 * 1024) -- --#define WHD_IOCTL_LOG_SIZE 64 --#define WHD_IOVAR_STRING_SIZE 128 --#define WHD_MAX_DATA_SIZE 64 -- --#define WHD_IOCTL_LOG_ADD(x, y, z) whd_ioctl_log_add(x, y, z) --#define WHD_IOCTL_LOG_ADD_EVENT(w, x, y, z) whd_ioctl_log_add_event(w, x, y, z) --#define WHD_IOCTL_PRINT(x) whd_ioctl_print(x) -- --typedef struct --{ -- uint32_t ioct_log; -- uint8_t is_this_event; -- uint8_t data[WHD_MAX_DATA_SIZE]; -- uint32_t data_size; -- uint16_t flag; -- uint32_t reason; --}whd_ioctl_log_t; -- --void whd_ioctl_log_add(whd_driver_t whd_driver, uint32_t cmd, whd_buffer_t buffer); --void whd_ioctl_log_add_event(whd_driver_t whd_driver, uint32_t cmd, uint16_t flag, uint32_t data); -- --whd_result_t whd_ioctl_print(whd_driver_t whd_driver); -- --#pragma pack() -- --typedef struct whd_internal_info --{ -- whd_wlan_status_t whd_wlan_status; -- wifi_console_t *c; -- wifi_console_t console; -- wlan_shared_t sh; -- uint32_t console_addr; -- whd_scan_result_callback_t scan_result_callback; -- whd_scan_result_t *whd_scan_result_ptr; -- /* The semaphore used to wait for completion of a join; -- * whd_wifi_join_halt uses this to release waiting threads (if any) */ -- cy_semaphore_t *active_join_semaphore; -- whd_bool_t active_join_mutex_initted; -- cy_semaphore_t active_join_mutex; -- uint con_lastpos; -- whd_bool_t whd_wifi_p2p_go_is_up; -- uint32_t whd_join_status[3]; -- --} whd_internal_info_t; -- --#pragma pack(1) -- --typedef struct --{ -- char abbrev[3]; -- uint8_t rev; -- uint8_t data[64]; --} whd_country_info_t; -- --#pragma pack() -- --void whd_internal_info_init(whd_driver_t whd_driver); -- --/****************************************************** --* Function Declarations --******************************************************/ -- --extern void whd_wifi_chip_info_init(whd_driver_t whd_driver); --extern whd_result_t whd_wlan_bus_complete_ds_wake(whd_driver_t whd_driver, whd_bool_t wake_from_firmware, -- uint32_t wake_event_indication_addr, uint32_t wake_indication_addr, -- uint32_t sdio_control_addr); --extern whd_result_t whd_wifi_set_custom_country_code(whd_interface_t ifp, const whd_country_info_t *country_code); -- --/* Device core control functions */ --extern whd_result_t whd_disable_device_core(whd_driver_t whd_driver, device_core_t core_id, wlan_core_flag_t core_flag); --extern whd_result_t whd_reset_device_core(whd_driver_t whd_driver, device_core_t core_id, wlan_core_flag_t core_flag); --extern whd_result_t whd_reset_core(whd_driver_t whd_driver, device_core_t core_id, uint32_t bits, uint32_t resetbits); --extern whd_result_t whd_wlan_armcore_run(whd_driver_t whd_driver, device_core_t core_id, wlan_core_flag_t core_flag); --extern whd_result_t whd_device_core_is_up(whd_driver_t whd_driver, device_core_t core_id); -- --/* Chip specific functions */ --extern whd_result_t whd_allow_wlan_bus_to_sleep(whd_driver_t whd_driver); --extern whd_result_t whd_ensure_wlan_bus_is_up(whd_driver_t whd_driver); -- --extern whd_result_t whd_chip_specific_init(whd_driver_t whd_driver); --extern whd_result_t whd_chip_specific_socsram_init(whd_driver_t whd_driver); --extern whd_result_t whd_wifi_read_wlan_log(whd_driver_t whd_driver, char *buffer, uint32_t buffer_size); --extern whd_result_t whd_wifi_print_whd_log(whd_driver_t whd_driver); --extern whd_result_t whd_wifi_read_wlan_log_unsafe(whd_driver_t whd_driver, uint32_t wlan_shared_address, char *buffer, -- uint32_t buffer_size); -- --extern void whd_wifi_peek(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, uint8_t *value); --extern void whd_wifi_poke(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, uint32_t value); --extern uint32_t whd_wifi_get_btc_params(whd_driver_t whd_driver, uint32_t address, whd_interface_t interface); -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_CHIP_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip_constants.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip_constants.h -deleted file mode 100644 -index b50ce1579d..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_chip_constants.h -+++ /dev/null -@@ -1,84 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef INCLUDED_CHIP_CONSTANTS_H_ --#define INCLUDED_CHIP_CONSTANTS_H_ -- --#include "whd.h" -- --#ifdef __cplusplus --extern "C" { --#endif -- --typedef enum chip_var --{ -- BUS_CREDIT_DIFF = 1, -- CHIP_RAM_SIZE, -- ATCM_RAM_BASE_ADDRESS, -- SOCRAM_SRMEM_SIZE, -- CHANSPEC_BAND_MASK, -- CHANSPEC_BAND_2G, -- CHANSPEC_BAND_5G, -- CHANSPEC_BAND_SHIFT, -- CHANSPEC_BW_10, -- CHANSPEC_BW_20, -- CHANSPEC_BW_40, -- CHANSPEC_BW_MASK, -- CHANSPEC_BW_SHIFT, -- CHANSPEC_CTL_SB_LOWER, -- CHANSPEC_CTL_SB_UPPER, -- CHANSPEC_CTL_SB_NONE, -- CHANSPEC_CTL_SB_MASK --} chip_var_t; -- --#define VERIFY_RESULT(x) { whd_result_t verify_result = WHD_SUCCESS; verify_result = (x); \ -- if (verify_result != WHD_SUCCESS){ \ -- WPRINT_WHD_ERROR( ("Function %s failed at line %d \n", __func__, __LINE__) ); \ -- return verify_result; } } --#define GET_C_VAR(whd_driver, var) get_whd_var(whd_driver, var) -- --uint32_t get_whd_var(whd_driver_t whd_driver, chip_var_t var); -- --whd_result_t get_chip_max_bus_data_credit_diff(uint16_t, uint32_t *); --whd_result_t get_chip_ram_size(uint16_t, uint32_t *); --whd_result_t get_atcm_ram_base_address(uint16_t, uint32_t *); --whd_result_t get_socsram_srmem_size(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_band_mask(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_band_2G(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_band_5G(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_band_shift(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_bw_10(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_bw_20(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_bw_40(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_bw_mask(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_bw_shift(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_ctl_sb_lower(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_ctl_sb_upper(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_ctl_sb_none(uint16_t, uint32_t *); --whd_result_t get_wl_chanspec_ctl_sb_mask(uint16_t, uint32_t *); -- --uint32_t whd_chip_set_chip_id(whd_driver_t whd_driver, uint16_t id); --uint16_t whd_chip_get_chip_id(whd_driver_t whd_driver); -- --#undef CHIP_FIRMWARE_SUPPORTS_PM_LIMIT_IOVAR -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_CHIP_CONSTANTS_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_debug.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_debug.h -deleted file mode 100644 -index fe955f1c29..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_debug.h -+++ /dev/null -@@ -1,140 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include --#include --#include --#include "whd.h" -- --#ifndef INCLUDED_WHD_DEBUG_H --#define INCLUDED_WHD_DEBUG_H -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Macros --******************************************************/ --#define WPRINT_ENABLE_WHD_ERROR --#define WPRINT_ENABLE_WHD_INFO --#define WPRINT_ENABLE_WHD_DEBUG -- --#define WHD_ENABLE_STATS --#define WHD_LOGGING_BUFFER_ENABLE -- --#if defined (__GNUC__) --#define WHD_TRIGGER_BREAKPOINT( ) do { __asm__ ("bkpt"); } while (0) -- --#elif defined (__IAR_SYSTEMS_ICC__) --#define WHD_TRIGGER_BREAKPOINT( ) do { __asm("bkpt 0"); } while (0) -- --#else --#define WHD_TRIGGER_BREAKPOINT( ) --#endif -- --#ifdef WPRINT_ENABLE_ERROR --#define WPRINT_ERROR(args) do { WPRINT_MACRO(args); } while (0) --#define whd_assert(error_string, assertion) do { if (!(assertion) ){ WHD_TRIGGER_BREAKPOINT(); } } while (0) --#define whd_minor_assert(error_string, \ -- assertion) do { if (!(assertion) ) WPRINT_MACRO( (error_string) ); } while (0) --#else --#define whd_assert(error_string, \ -- assertion) do { if (!(assertion) ){ WPRINT_MACRO( (error_string) ); } } while (0) --#define whd_minor_assert(error_string, assertion) do { (void)(assertion); } while (0) --#endif -- --/****************************************************** --* Print declarations --******************************************************/ --/* IF MFG TEST is enabled then disable all LOGGING VIA UART as -- + * this interrupts communication between WL TOOL and MFG Test APP -- + * via STDIO UART causing Wrong Message Exchange and failure. -- + */ --#ifdef WLAN_MFG_FIRMWARE --#define WPRINT_MACRO(args) --#else --#if defined(WHD_LOGGING_BUFFER_ENABLE) --#define WPRINT_MACRO(args) do { whd_buffer_printf args; } while (0 == 1) --#else --#define WPRINT_MACRO(args) do { printf args;} while (0 == 1) --#endif --#endif -- -- --/* WICED printing macros for Wiced Wi-Fi Driver*/ --#ifdef WPRINT_ENABLE_WHD_INFO --#define WPRINT_WHD_INFO(args) WPRINT_MACRO(args) --#else --#define WPRINT_WHD_INFO(args) --#endif -- --#ifdef WPRINT_ENABLE_WHD_DEBUG --#define WPRINT_WHD_DEBUG(args) WPRINT_MACRO(args) --#else --#define WPRINT_WHD_DEBUG(args) --#endif -- --#ifdef WPRINT_ENABLE_WHD_ERROR --#define WPRINT_WHD_ERROR(args) WPRINT_MACRO(args); --#else --#define WPRINT_WHD_ERROR(args) --#endif -- --#ifdef WPRINT_ENABLE_WHD_DATA_LOG --#define WPRINT_WHD_DATA_LOG(args) WPRINT_MACRO(args) --#else --#define WPRINT_WHD_DATA_LOG(args) --#endif -- --#define WHD_STATS_INCREMENT_VARIABLE(whd_driver, var) \ -- do { whd_driver->whd_stats.var++; } while (0) -- --#define WHD_STATS_CONDITIONAL_INCREMENT_VARIABLE(whd_driver, condition, var) \ -- do { if (condition){ whd_driver->whd_stats.var++; }} while (0) -- --#if (defined(__GNUC__) && (__GNUC__ >= 6) ) --#define __FUNCTION__ __func__ --#endif -- -- --void whd_init_stats(whd_driver_t whd_driver); --void whd_print_logbuffer(void); -- -- --#ifdef WHD_LOGGING_BUFFER_ENABLE --#define LOGGING_BUFFER_SIZE (4 * 1024) --int whd_buffer_printf(const char *format, ...); -- --typedef struct --{ -- uint32_t buffer_write; -- uint32_t buffer_read; -- char buffer[LOGGING_BUFFER_SIZE + 1]; -- whd_bool_t roll_over; -- whd_bool_t over_write; --} whd_logging_t; --#else --#define whd_print_logbuffer() --#endif /* WHD_LOGGING_BUFFER_ENABLE */ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_DEBUG_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_endian.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_endian.h -deleted file mode 100644 -index c68fc0e69a..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_endian.h -+++ /dev/null -@@ -1,69 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ --/* -- * Byte order utilities -- * -- * This file by default provides proper behavior on little-endian architectures. -- * On big-endian architectures, IL_BIGENDIAN should be defined. -- */ -- --#ifndef INCLUDED_WHD_ENDIAN_H --#define INCLUDED_WHD_ENDIAN_H -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/* Reverse the bytes in a 16-bit value */ --#define SWAP16(val) \ -- ( (uint16_t)( ( ( (uint16_t)(val) & (uint16_t)0x00ffU ) << 8 ) | \ -- ( ( (uint16_t)(val) & (uint16_t)0xff00U ) >> 8 ) ) ) -- --/* Reverse the bytes in a 32-bit value */ --#define SWAP32(val) \ -- ( (uint32_t)( ( ( (uint32_t)(val) & (uint32_t)0x000000ffU ) << 24 ) | \ -- ( ( (uint32_t)(val) & (uint32_t)0x0000ff00U ) << 8 ) | \ -- ( ( (uint32_t)(val) & (uint32_t)0x00ff0000U ) >> 8 ) | \ -- ( ( (uint32_t)(val) & (uint32_t)0xff000000U ) >> 24 ) ) ) -- --#ifdef IL_BIGENDIAN --#define htod32(i) SWAP32(i) --#define htod16(i) SWAP16(i) --#define dtoh32(i) SWAP32(i) --#define dtoh16(i) SWAP16(i) --#define hton16(i) (i) --#define hton32(i) (i) --#define ntoh16(i) (i) --#define ntoh32(i) (i) --#else /* IL_BIGENDIAN */ --#define htod32(i) (i) --#define htod16(i) (i) --#define dtoh32(i) (i) --#define dtoh16(i) (i) --#define hton16(i) SWAP16(i) --#define hton32(i) SWAP32(i) --#define ntoh16(i) SWAP16(i) --#define ntoh32(i) SWAP32(i) --#endif /* IL_BIGENDIAN */ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* INCLUDED_WHD_ENDIAN_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_events_int.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_events_int.h -deleted file mode 100644 -index a61e8d0c92..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_events_int.h -+++ /dev/null -@@ -1,464 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Header for Event detection -- * -- * Provides constants and prototypes for functions that allow both -- * whd and user applications to receive event callbacks. -- */ -- --#include "whd.h" -- --#ifndef INCLUDED_WHD_EVENTS_INT_H --#define INCLUDED_WHD_EVENTS_INT_H -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* @cond Typedefs --******************************************************/ -- --/** -- * Enumerated list of event types -- */ --typedef enum --{ -- WLC_E_NONE = 0x7FFFFFFE, -- WLC_E_SET_SSID = 0 /** indicates status of set SSID */, -- WLC_E_JOIN = 1, /** differentiates join IBSS from found (WLC_E_START) IBSS */ -- WLC_E_START = 2, /** STA founded an IBSS or AP started a BSS */ -- WLC_E_AUTH = 3, /** 802.11 AUTH request */ -- WLC_E_AUTH_IND = 4, /** 802.11 AUTH indication */ -- WLC_E_DEAUTH = 5, /** 802.11 DEAUTH request */ -- WLC_E_DEAUTH_IND = 6, /** 802.11 DEAUTH indication */ -- WLC_E_ASSOC = 7, /** 802.11 ASSOC request */ -- WLC_E_ASSOC_IND = 8, /** 802.11 ASSOC indication */ -- WLC_E_REASSOC = 9, /** 802.11 REASSOC request */ -- WLC_E_REASSOC_IND = 10, /** 802.11 REASSOC indication */ -- WLC_E_DISASSOC = 11, /** 802.11 DISASSOC request */ -- WLC_E_DISASSOC_IND = 12, /** 802.11 DISASSOC indication */ -- WLC_E_QUIET_START = 13, /** 802.11h Quiet period started */ -- WLC_E_QUIET_END = 14, /** 802.11h Quiet period ended */ -- WLC_E_BEACON_RX = 15, /** BEACONS received/lost indication */ -- WLC_E_LINK = 16, /** generic link indication */ -- WLC_E_MIC_ERROR = 17, /** TKIP MIC error occurred */ -- WLC_E_NDIS_LINK = 18, /** NDIS style link indication */ -- WLC_E_ROAM = 19, /** roam attempt occurred: indicate status & reason */ -- WLC_E_TXFAIL = 20, /** change in dot11FailedCount (txfail) */ -- WLC_E_PMKID_CACHE = 21, /** WPA2 pmkid cache indication */ -- WLC_E_RETROGRADE_TSF = 22, /** current AP's TSF value went backward */ -- WLC_E_PRUNE = 23, /** AP was pruned from join list for reason */ -- WLC_E_AUTOAUTH = 24, /** report AutoAuth table entry match for join attempt */ -- WLC_E_EAPOL_MSG = 25, /** Event encapsulating an EAPOL message */ -- WLC_E_SCAN_COMPLETE = 26, /** Scan results are ready or scan was aborted */ -- WLC_E_ADDTS_IND = 27, /** indicate to host addts fail/success */ -- WLC_E_DELTS_IND = 28, /** indicate to host delts fail/success */ -- WLC_E_BCNSENT_IND = 29, /** indicate to host of beacon transmit */ -- WLC_E_BCNRX_MSG = 30, /** Send the received beacon up to the host */ -- WLC_E_BCNLOST_MSG = 31, /** indicate to host loss of beacon */ -- WLC_E_ROAM_PREP = 32, /** before attempting to roam */ -- WLC_E_PFN_NET_FOUND = 33, /** PFN network found event */ -- WLC_E_PFN_NET_LOST = 34, /** PFN network lost event */ -- WLC_E_RESET_COMPLETE = 35, WLC_E_JOIN_START = 36, WLC_E_ROAM_START = 37, WLC_E_ASSOC_START = 38, -- WLC_E_IBSS_ASSOC = 39, WLC_E_RADIO = 40, WLC_E_PSM_WATCHDOG = 41, /** PSM microcode watchdog fired */ -- WLC_E_CCX_ASSOC_START = 42, /** CCX association start */ -- WLC_E_CCX_ASSOC_ABORT = 43, /** CCX association abort */ -- WLC_E_PROBREQ_MSG = 44, /** probe request received */ -- WLC_E_SCAN_CONFIRM_IND = 45, WLC_E_PSK_SUP = 46, /** WPA Handshake */ -- WLC_E_COUNTRY_CODE_CHANGED = 47, WLC_E_EXCEEDED_MEDIUM_TIME = 48, /** WMMAC excedded medium time */ -- WLC_E_ICV_ERROR = 49, /** WEP ICV error occurred */ -- WLC_E_UNICAST_DECODE_ERROR = 50, /** Unsupported unicast encrypted frame */ -- WLC_E_MULTICAST_DECODE_ERROR = 51, /** Unsupported multicast encrypted frame */ -- WLC_E_TRACE = 52, WLC_E_BTA_HCI_EVENT = 53, /** BT-AMP HCI event */ -- WLC_E_IF = 54, /** I/F change (for wlan host notification) */ -- WLC_E_P2P_DISC_LISTEN_COMPLETE = 55, /** P2P Discovery listen state expires */ -- WLC_E_RSSI = 56, /** indicate RSSI change based on configured levels */ -- WLC_E_PFN_BEST_BATCHING = 57, /** PFN best network batching event */ -- WLC_E_EXTLOG_MSG = 58, WLC_E_ACTION_FRAME = 59, /** Action frame reception */ -- WLC_E_ACTION_FRAME_COMPLETE = 60, /** Action frame Tx complete */ -- WLC_E_PRE_ASSOC_IND = 61, /** assoc request received */ -- WLC_E_PRE_REASSOC_IND = 62, /** re-assoc request received */ -- WLC_E_CHANNEL_ADOPTED = 63, /** channel adopted (xxx: obsoleted) */ -- WLC_E_AP_STARTED = 64, /** AP started */ -- WLC_E_DFS_AP_STOP = 65, /** AP stopped due to DFS */ -- WLC_E_DFS_AP_RESUME = 66, /** AP resumed due to DFS */ -- WLC_E_WAI_STA_EVENT = 67, /** WAI stations event */ -- WLC_E_WAI_MSG = 68, /** event encapsulating an WAI message */ -- WLC_E_ESCAN_RESULT = 69, /** escan result event */ -- WLC_E_ACTION_FRAME_OFF_CHAN_COMPLETE = 70, /** action frame off channel complete *//* NOTE - This used to be WLC_E_WAKE_EVENT */ -- WLC_E_PROBRESP_MSG = 71, /** probe response received */ -- WLC_E_P2P_PROBREQ_MSG = 72, /** P2P Probe request received */ -- WLC_E_DCS_REQUEST = 73, WLC_E_FIFO_CREDIT_MAP = 74, /** credits for D11 FIFOs. [AC0,AC1,AC2,AC3,BC_MC,ATIM] */ -- WLC_E_ACTION_FRAME_RX = 75, /** Received action frame event WITH wl_event_rx_frame_data_t header */ -- WLC_E_WAKE_EVENT = 76, /** Wake Event timer fired, used for wake WLAN test mode */ -- WLC_E_RM_COMPLETE = 77, /** Radio measurement complete */ -- WLC_E_HTSFSYNC = 78, /** Synchronize TSF with the host */ -- WLC_E_OVERLAY_REQ = 79, /** request an overlay IOCTL/iovar from the host */ -- WLC_E_CSA_COMPLETE_IND = 80, WLC_E_EXCESS_PM_WAKE_EVENT = 81, /** excess PM Wake Event to inform host */ -- WLC_E_PFN_SCAN_NONE = 82, /** no PFN networks around */ -- WLC_E_PFN_SCAN_ALLGONE = 83, /** last found PFN network gets lost */ -- WLC_E_GTK_PLUMBED = 84, WLC_E_ASSOC_IND_NDIS = 85, /** 802.11 ASSOC indication for NDIS only */ -- WLC_E_REASSOC_IND_NDIS = 86, /** 802.11 REASSOC indication for NDIS only */ -- WLC_E_ASSOC_REQ_IE = 87, WLC_E_ASSOC_RESP_IE = 88, WLC_E_ASSOC_RECREATED = 89, /** association recreated on resume */ -- WLC_E_ACTION_FRAME_RX_NDIS = 90, /** rx action frame event for NDIS only */ -- WLC_E_AUTH_REQ = 91, /** authentication request received */ -- WLC_E_TDLS_PEER_EVENT = 92, /** discovered peer, connected/disconnected peer */ -- WLC_E_MESH_DHCP_SUCCESS = 92, /** DHCP handshake successful for a mesh interface */ -- WLC_E_SPEEDY_RECREATE_FAIL = 93, /** fast assoc recreation failed */ -- WLC_E_NATIVE = 94, /** port-specific event and payload (e.g. NDIS) */ -- WLC_E_PKTDELAY_IND = 95, /** event for tx pkt delay suddently jump */ -- WLC_E_AWDL_AW = 96, /** AWDL AW period starts */ -- WLC_E_AWDL_ROLE = 97, /** AWDL Master/Slave/NE master role event */ -- WLC_E_AWDL_EVENT = 98, /** Generic AWDL event */ -- WLC_E_NIC_AF_TXS = 99, /** NIC AF txstatus */ -- WLC_E_NAN = 100, /** NAN event */ -- WLC_E_BEACON_FRAME_RX = 101, WLC_E_SERVICE_FOUND = 102, /** desired service found */ -- WLC_E_GAS_FRAGMENT_RX = 103, /** GAS fragment received */ -- WLC_E_GAS_COMPLETE = 104, /** GAS sessions all complete */ -- WLC_E_P2PO_ADD_DEVICE = 105, /** New device found by p2p offload */ -- WLC_E_P2PO_DEL_DEVICE = 106, /** device has been removed by p2p offload */ -- WLC_E_WNM_STA_SLEEP = 107, /** WNM event to notify STA enter sleep mode */ -- WLC_E_TXFAIL_THRESH = 108, /** Indication of MAC tx failures (exhaustion of 802.11 retries) exceeding threshold(s) */ -- WLC_E_PROXD = 109, /** Proximity Detection event */ -- WLC_E_IBSS_COALESCE = 110, /** IBSS Coalescing */ -- WLC_E_MESH_PAIRED = 110, /** Mesh peer found and paired */ -- WLC_E_AWDL_RX_PRB_RESP = 111, /** AWDL RX Probe response */ -- WLC_E_AWDL_RX_ACT_FRAME = 112, /** AWDL RX Action Frames */ -- WLC_E_AWDL_WOWL_NULLPKT = 113, /** AWDL Wowl nulls */ -- WLC_E_AWDL_PHYCAL_STATUS = 114, /** AWDL Phycal status */ -- WLC_E_AWDL_OOB_AF_STATUS = 115, /** AWDL OOB AF status */ -- WLC_E_AWDL_SCAN_STATUS = 116, /** Interleaved Scan status */ -- WLC_E_AWDL_AW_START = 117, /** AWDL AW Start */ -- WLC_E_AWDL_AW_END = 118, /** AWDL AW End */ -- WLC_E_AWDL_AW_EXT = 119, /** AWDL AW Extensions */ -- WLC_E_AWDL_PEER_CACHE_CONTROL = 120, WLC_E_CSA_START_IND = 121, WLC_E_CSA_DONE_IND = 122, -- WLC_E_CSA_FAILURE_IND = 123, WLC_E_CCA_CHAN_QUAL = 124, /** CCA based channel quality report */ -- WLC_E_BSSID = 125, /** to report change in BSSID while roaming */ -- WLC_E_TX_STAT_ERROR = 126, /** tx error indication */ -- WLC_E_BCMC_CREDIT_SUPPORT = 127, /** credit check for BCMC supported */ -- WLC_E_PSTA_PRIMARY_INTF_IND = 128, /** psta primary interface indication */ -- WLC_E_BT_WIFI_HANDOVER_REQ = 130, /* Handover Request Initiated */ -- WLC_E_SPW_TXINHIBIT = 131, /* Southpaw TxInhibit notification */ -- WLC_E_FBT_AUTH_REQ_IND = 132, /* FBT Authentication Request Indication */ -- WLC_E_RSSI_LQM = 133, /* Enhancement addition for WLC_E_RSSI */ -- WLC_E_PFN_GSCAN_FULL_RESULT = 134, /* Full probe/beacon (IEs etc) results */ -- WLC_E_PFN_SWC = 135, /* Significant change in rssi of bssids being tracked */ -- WLC_E_AUTHORIZED = 136, /* a STA been authroized for traffic */ -- WLC_E_PROBREQ_MSG_RX = 137, /* probe req with wl_event_rx_frame_data_t header */ -- WLC_E_PFN_SCAN_COMPLETE = 138, /* PFN completed scan of network list */ -- WLC_E_RMC_EVENT = 139, /* RMC Event */ -- WLC_E_DPSTA_INTF_IND = 140, /* DPSTA interface indication */ -- WLC_E_RRM = 141, /* RRM Event */ -- WLC_E_ULP = 146, /* ULP entry event */ -- WLC_E_TKO = 151, /* TCP Keep Alive Offload Event */ -- WLC_E_LAST = 152, /* highest val + 1 for range checking */ --} whd_event_num_t; -- --#define WLC_SUP_STATUS_OFFSET (256) --#define WLC_DOT11_SC_STATUS_OFFSET (512) --/** -- * Enumerated list of event status codes -- * @note : WLC_SUP values overlap other values, so it is necessary -- * to check the event type -- */ --typedef enum --{ -- WLC_E_STATUS_SUCCESS = 0, /** operation was successful */ -- WLC_E_STATUS_FAIL = 1, /** operation failed */ -- WLC_E_STATUS_TIMEOUT = 2, /** operation timed out */ -- WLC_E_STATUS_NO_NETWORKS = 3, /** failed due to no matching network found */ -- WLC_E_STATUS_ABORT = 4, /** operation was aborted */ -- WLC_E_STATUS_NO_ACK = 5, /** protocol failure: packet not ack'd */ -- WLC_E_STATUS_UNSOLICITED = 6, /** AUTH or ASSOC packet was unsolicited */ -- WLC_E_STATUS_ATTEMPT = 7, /** attempt to assoc to an auto auth configuration */ -- WLC_E_STATUS_PARTIAL = 8, /** scan results are incomplete */ -- WLC_E_STATUS_NEWSCAN = 9, /** scan aborted by another scan */ -- WLC_E_STATUS_NEWASSOC = 10, /** scan aborted due to assoc in progress */ -- WLC_E_STATUS_11HQUIET = 11, /** 802.11h quiet period started */ -- WLC_E_STATUS_SUPPRESS = 12, /** user disabled scanning (WLC_SET_SCANSUPPRESS) */ -- WLC_E_STATUS_NOCHANS = 13, /** no allowable channels to scan */ -- WLC_E_STATUS_CCXFASTRM = 14, /** scan aborted due to CCX fast roam */ -- WLC_E_STATUS_CS_ABORT = 15, /** abort channel select */ -- -- /* for WLC_SUP messages */ -- WLC_SUP_DISCONNECTED = 0 + WLC_SUP_STATUS_OFFSET, WLC_SUP_CONNECTING = 1 + WLC_SUP_STATUS_OFFSET, -- WLC_SUP_IDREQUIRED = 2 + WLC_SUP_STATUS_OFFSET, WLC_SUP_AUTHENTICATING = 3 + WLC_SUP_STATUS_OFFSET, -- WLC_SUP_AUTHENTICATED = 4 + WLC_SUP_STATUS_OFFSET, WLC_SUP_KEYXCHANGE = 5 + WLC_SUP_STATUS_OFFSET, -- WLC_SUP_KEYED = 6 + WLC_SUP_STATUS_OFFSET, WLC_SUP_TIMEOUT = 7 + WLC_SUP_STATUS_OFFSET, -- WLC_SUP_LAST_BASIC_STATE = 8 + WLC_SUP_STATUS_OFFSET, -- /* Extended supplicant authentication states */ -- WLC_SUP_KEYXCHANGE_WAIT_M1 = WLC_SUP_AUTHENTICATED, /** Waiting to receive handshake msg M1 */ -- WLC_SUP_KEYXCHANGE_PREP_M2 = WLC_SUP_KEYXCHANGE, /** Preparing to send handshake msg M2 */ -- WLC_SUP_KEYXCHANGE_WAIT_M3 = WLC_SUP_LAST_BASIC_STATE, /** Waiting to receive handshake msg M3 */ -- WLC_SUP_KEYXCHANGE_PREP_M4 = 9 + WLC_SUP_STATUS_OFFSET, /** Preparing to send handshake msg M4 */ -- WLC_SUP_KEYXCHANGE_WAIT_G1 = 10 + WLC_SUP_STATUS_OFFSET, /** Waiting to receive handshake msg G1 */ -- WLC_SUP_KEYXCHANGE_PREP_G2 = 11 + WLC_SUP_STATUS_OFFSET, /** Preparing to send handshake msg G2 */ -- -- WLC_DOT11_SC_SUCCESS = 0 + WLC_DOT11_SC_STATUS_OFFSET, /* Successful */ -- WLC_DOT11_SC_FAILURE = 1 + WLC_DOT11_SC_STATUS_OFFSET, /* Unspecified failure */ -- WLC_DOT11_SC_CAP_MISMATCH = 10 + WLC_DOT11_SC_STATUS_OFFSET, /* Cannot support all requested capabilities in the Capability Information field */ -- WLC_DOT11_SC_REASSOC_FAIL = 11 + WLC_DOT11_SC_STATUS_OFFSET, /* Reassociation denied due to inability to confirm that association exists */ -- WLC_DOT11_SC_ASSOC_FAIL = 12 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to reason outside the scope of this standard */ -- WLC_DOT11_SC_AUTH_MISMATCH = 13 + WLC_DOT11_SC_STATUS_OFFSET, /* Responding station does not support the specified authentication algorithm */ -- WLC_DOT11_SC_AUTH_SEQ = 14 + WLC_DOT11_SC_STATUS_OFFSET, /* Received an Authentication frame with authentication transaction sequence number out of expected sequence */ -- WLC_DOT11_SC_AUTH_CHALLENGE_FAIL = 15 + WLC_DOT11_SC_STATUS_OFFSET, /* Authentication rejected because of challenge failure */ -- WLC_DOT11_SC_AUTH_TIMEOUT = 16 + WLC_DOT11_SC_STATUS_OFFSET, /* Authentication rejected due to timeout waiting for next frame in sequence */ -- WLC_DOT11_SC_ASSOC_BUSY_FAIL = 17 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied because AP is unable to handle additional associated stations */ -- WLC_DOT11_SC_ASSOC_RATE_MISMATCH = 18 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to requesting station not supporting all of the data rates in the BSSBasicRateSet parameter */ -- WLC_DOT11_SC_ASSOC_SHORT_REQUIRED = 19 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to requesting station not supporting the Short Preamble option */ -- WLC_DOT11_SC_ASSOC_PBCC_REQUIRED = 20 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to requesting station not supporting the PBCC Modulation option */ -- WLC_DOT11_SC_ASSOC_AGILITY_REQUIRED = 21 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to requesting station not supporting the Channel Agility option */ -- WLC_DOT11_SC_ASSOC_SPECTRUM_REQUIRED = 22 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied because Spectrum Management capability is required. */ -- WLC_DOT11_SC_ASSOC_BAD_POWER_CAP = 23 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied because the info in the Power Cap element is unacceptable. */ -- WLC_DOT11_SC_ASSOC_BAD_SUP_CHANNELS = 24 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied because the info in the Supported Channel element is unacceptable */ -- WLC_DOT11_SC_ASSOC_SHORTSLOT_REQUIRED = 25 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to requesting station not supporting the Short Slot Time option */ -- WLC_DOT11_SC_ASSOC_ERPBCC_REQUIRED = 26 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to requesting station not supporting the ER-PBCC Modulation option */ -- WLC_DOT11_SC_ASSOC_DSSOFDM_REQUIRED = 27 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to requesting station not supporting the DSS-OFDM option */ -- WLC_DOT11_SC_DECLINED = 37 + WLC_DOT11_SC_STATUS_OFFSET, /* request declined */ -- WLC_DOT11_SC_INVALID_PARAMS = 38 + WLC_DOT11_SC_STATUS_OFFSET, /* One or more params have invalid values */ -- WLC_DOT11_SC_INVALID_AKMP = 43 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to invalid AKMP */ -- WLC_DOT11_SC_INVALID_MDID = 54 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to invalid MDID */ -- WLC_DOT11_SC_INVALID_FTIE = 55 + WLC_DOT11_SC_STATUS_OFFSET, /* Association denied due to invalid FTIE */ -- -- WLC_E_STATUS_FORCE_32_BIT = 0x7FFFFFFE /** Force enum to be stored in 32 bit variable */ --} whd_event_status_t; -- --#define WLC_E_PRUNE_REASON_OFFSET (256) --#define WLC_E_SUP_REASON_OFFSET (512) --#define WLC_E_DOT11_RC_REASON_OFFSET (768) -- --/** -- * Enumerated list of event reason codes -- * @note : Several values overlap other values, so it is necessary -- * to check the event type -- */ --typedef enum --{ -- /* roam reason codes */ -- WLC_E_REASON_INITIAL_ASSOC = 0, /** initial assoc */ -- WLC_E_REASON_LOW_RSSI = 1, /** roamed due to low RSSI */ -- WLC_E_REASON_DEAUTH = 2, /** roamed due to DEAUTH indication */ -- WLC_E_REASON_DISASSOC = 3, /** roamed due to DISASSOC indication */ -- WLC_E_REASON_BCNS_LOST = 4, /** roamed due to lost beacons */ -- WLC_E_REASON_FAST_ROAM_FAILED = 5, /** roamed due to fast roam failure */ -- WLC_E_REASON_DIRECTED_ROAM = 6, /** roamed due to request by AP */ -- WLC_E_REASON_TSPEC_REJECTED = 7, /** roamed due to TSPEC rejection */ -- WLC_E_REASON_BETTER_AP = 8, /** roamed due to finding better AP */ -- -- /* NAN sub-events comes as a reason code with event as WLC_E_NAN */ -- WLC_E_NAN_EVENT_STATUS_CHG = 9, /* generated on any change in nan_mac status */ -- WLC_E_NAN_EVENT_MERGE = 10, /* Merged to a NAN cluster */ -- WLC_E_NAN_EVENT_STOP = 11, /* NAN stopped */ -- WLC_E_NAN_EVENT_P2P = 12, /* NAN P2P EVENT */ -- -- /* XXX: Dont use below four events: They will be cleanup, use WL_NAN_EVENT_POST_DISC */ -- WLC_E_NAN_EVENT_WINDOW_BEGIN_P2P = 13, /* Event for begin of P2P further availability window */ -- WLC_E_NAN_EVENT_WINDOW_BEGIN_MESH = 14, WLC_E_NAN_EVENT_WINDOW_BEGIN_IBSS = 15, -- WLC_E_NAN_EVENT_WINDOW_BEGIN_RANGING = 16, WLC_E_NAN_EVENT_POST_DISC = 17, /* Event for post discovery data */ -- WLC_E_NAN_EVENT_DATA_IF_ADD = 18, /* Event for Data IF add */ -- WLC_E_NAN_EVENT_DATA_PEER_ADD = 19, /* Event for peer add */ -- -- /* nan 2.0 */ -- WLC_E_NAN_EVENT_DATA_IND = 20, /* Data Indication to Host */ -- WLC_E_NAN_EVENT_DATA_CONF = 21, /* Data Response to Host */ -- WLC_E_NAN_EVENT_SDF_RX = 22, /* entire service discovery frame */ -- WLC_E_NAN_EVENT_DATA_END = 23, WLC_E_NAN_EVENT_BCN_RX = 24, /* received beacon payload */ -- -- /* prune reason codes */ -- WLC_E_PRUNE_ENCR_MISMATCH = 1 + WLC_E_PRUNE_REASON_OFFSET, /** encryption mismatch */ -- WLC_E_PRUNE_BCAST_BSSID = 2 + WLC_E_PRUNE_REASON_OFFSET, /** AP uses a broadcast BSSID */ -- WLC_E_PRUNE_MAC_DENY = 3 + WLC_E_PRUNE_REASON_OFFSET, /** STA's MAC addr is in AP's MAC deny list */ -- WLC_E_PRUNE_MAC_NA = 4 + WLC_E_PRUNE_REASON_OFFSET, /** STA's MAC addr is not in AP's MAC allow list */ -- WLC_E_PRUNE_REG_PASSV = 5 + WLC_E_PRUNE_REASON_OFFSET, /** AP not allowed due to regulatory restriction */ -- WLC_E_PRUNE_SPCT_MGMT = 6 + WLC_E_PRUNE_REASON_OFFSET, /** AP does not support STA locale spectrum mgmt */ -- WLC_E_PRUNE_RADAR = 7 + WLC_E_PRUNE_REASON_OFFSET, /** AP is on a radar channel of STA locale */ -- WLC_E_RSN_MISMATCH = 8 + WLC_E_PRUNE_REASON_OFFSET, /** STA does not support AP's RSN */ -- WLC_E_PRUNE_NO_COMMON_RATES = 9 + WLC_E_PRUNE_REASON_OFFSET, /** No rates in common with AP */ -- WLC_E_PRUNE_BASIC_RATES = 10 + WLC_E_PRUNE_REASON_OFFSET, /** STA does not support all basic rates of BSS */ -- WLC_E_PRUNE_CCXFAST_PREVAP = 11 + WLC_E_PRUNE_REASON_OFFSET, /** CCX FAST ROAM: prune previous AP */ -- WLC_E_PRUNE_CIPHER_NA = 12 + WLC_E_PRUNE_REASON_OFFSET, /** BSS's cipher not supported */ -- WLC_E_PRUNE_KNOWN_STA = 13 + WLC_E_PRUNE_REASON_OFFSET, /** AP is already known to us as a STA */ -- WLC_E_PRUNE_CCXFAST_DROAM = 14 + WLC_E_PRUNE_REASON_OFFSET, /** CCX FAST ROAM: prune unqualified AP */ -- WLC_E_PRUNE_WDS_PEER = 15 + WLC_E_PRUNE_REASON_OFFSET, /** AP is already known to us as a WDS peer */ -- WLC_E_PRUNE_QBSS_LOAD = 16 + WLC_E_PRUNE_REASON_OFFSET, /** QBSS LOAD - AAC is too low */ -- WLC_E_PRUNE_HOME_AP = 17 + WLC_E_PRUNE_REASON_OFFSET, /** prune home AP */ -- WLC_E_PRUNE_AP_BLOCKED = 18 + WLC_E_PRUNE_REASON_OFFSET, /** prune blocked AP */ -- WLC_E_PRUNE_NO_DIAG_SUPPORT = 19 + WLC_E_PRUNE_REASON_OFFSET, /** prune due to diagnostic mode not supported */ -- -- /* WPA failure reason codes carried in the WLC_E_PSK_SUP event */ -- WLC_E_SUP_OTHER = 0 + WLC_E_SUP_REASON_OFFSET, /** Other reason */ -- WLC_E_SUP_DECRYPT_KEY_DATA = 1 + WLC_E_SUP_REASON_OFFSET, /** Decryption of key data failed */ -- WLC_E_SUP_BAD_UCAST_WEP128 = 2 + WLC_E_SUP_REASON_OFFSET, /** Illegal use of ucast WEP128 */ -- WLC_E_SUP_BAD_UCAST_WEP40 = 3 + WLC_E_SUP_REASON_OFFSET, /** Illegal use of ucast WEP40 */ -- WLC_E_SUP_UNSUP_KEY_LEN = 4 + WLC_E_SUP_REASON_OFFSET, /** Unsupported key length */ -- WLC_E_SUP_PW_KEY_CIPHER = 5 + WLC_E_SUP_REASON_OFFSET, /** Unicast cipher mismatch in pairwise key */ -- WLC_E_SUP_MSG3_TOO_MANY_IE = 6 + WLC_E_SUP_REASON_OFFSET, /** WPA IE contains > 1 RSN IE in key msg 3 */ -- WLC_E_SUP_MSG3_IE_MISMATCH = 7 + WLC_E_SUP_REASON_OFFSET, /** WPA IE mismatch in key message 3 */ -- WLC_E_SUP_NO_INSTALL_FLAG = 8 + WLC_E_SUP_REASON_OFFSET, /** INSTALL flag unset in 4-way msg */ -- WLC_E_SUP_MSG3_NO_GTK = 9 + WLC_E_SUP_REASON_OFFSET, /** encapsulated GTK missing from msg 3 */ -- WLC_E_SUP_GRP_KEY_CIPHER = 10 + WLC_E_SUP_REASON_OFFSET, /** Multicast cipher mismatch in group key */ -- WLC_E_SUP_GRP_MSG1_NO_GTK = 11 + WLC_E_SUP_REASON_OFFSET, /** encapsulated GTK missing from group msg 1 */ -- WLC_E_SUP_GTK_DECRYPT_FAIL = 12 + WLC_E_SUP_REASON_OFFSET, /** GTK decrypt failure */ -- WLC_E_SUP_SEND_FAIL = 13 + WLC_E_SUP_REASON_OFFSET, /** message send failure */ -- WLC_E_SUP_DEAUTH = 14 + WLC_E_SUP_REASON_OFFSET, /** received FC_DEAUTH */ -- WLC_E_SUP_WPA_PSK_TMO = 15 + WLC_E_SUP_REASON_OFFSET, /** WPA PSK 4-way handshake timeout */ -- -- DOT11_RC_RESERVED = 0 + WLC_E_DOT11_RC_REASON_OFFSET, /* d11 RC reserved */ -- DOT11_RC_UNSPECIFIED = 1 + WLC_E_DOT11_RC_REASON_OFFSET, /* Unspecified reason */ -- DOT11_RC_AUTH_INVAL = 2 + WLC_E_DOT11_RC_REASON_OFFSET, /* Previous authentication no longer valid */ -- DOT11_RC_DEAUTH_LEAVING = 3 + WLC_E_DOT11_RC_REASON_OFFSET, /* Deauthenticated because sending station is leaving (or has left) IBSS or ESS */ -- DOT11_RC_INACTIVITY = 4 + WLC_E_DOT11_RC_REASON_OFFSET, /* Disassociated due to inactivity */ -- DOT11_RC_BUSY = 5 + WLC_E_DOT11_RC_REASON_OFFSET, /* Disassociated because AP is unable to handle all currently associated stations */ -- DOT11_RC_INVAL_CLASS_2 = 6 + WLC_E_DOT11_RC_REASON_OFFSET, /* Class 2 frame received from nonauthenticated station */ -- DOT11_RC_INVAL_CLASS_3 = 7 + WLC_E_DOT11_RC_REASON_OFFSET, /* Class 3 frame received from nonassociated station */ -- DOT11_RC_DISASSOC_LEAVING = 8 + WLC_E_DOT11_RC_REASON_OFFSET, /* Disassociated because sending station is leaving (or has left) BSS */ -- DOT11_RC_NOT_AUTH = 9 + WLC_E_DOT11_RC_REASON_OFFSET, /* Station requesting (re)association is not * authenticated with responding station */ -- DOT11_RC_BAD_PC = 10 + WLC_E_DOT11_RC_REASON_OFFSET, /* Unacceptable power capability element */ -- DOT11_RC_BAD_CHANNELS = 11 + WLC_E_DOT11_RC_REASON_OFFSET, /* Unacceptable supported channels element */ -- /* 12 is unused */ -- /* XXX 13-23 are WPA/802.11i reason codes defined in proto/wpa.h */ -- /* 32-39 are QSTA specific reasons added in 11e */ -- DOT11_RC_UNSPECIFIED_QOS = 32 + WLC_E_DOT11_RC_REASON_OFFSET, /* unspecified QoS-related reason */ -- DOT11_RC_INSUFFCIENT_BW = 33 + WLC_E_DOT11_RC_REASON_OFFSET, /* QAP lacks sufficient bandwidth */ -- DOT11_RC_EXCESSIVE_FRAMES = 34 + WLC_E_DOT11_RC_REASON_OFFSET, /* excessive number of frames need ack */ -- DOT11_RC_TX_OUTSIDE_TXOP = 35 + WLC_E_DOT11_RC_REASON_OFFSET, /* transmitting outside the limits of txop */ -- DOT11_RC_LEAVING_QBSS = 36 + WLC_E_DOT11_RC_REASON_OFFSET, /* QSTA is leaving the QBSS (or restting) */ -- DOT11_RC_BAD_MECHANISM = 37 + WLC_E_DOT11_RC_REASON_OFFSET, /* does not want to use the mechanism */ -- DOT11_RC_SETUP_NEEDED = 38 + WLC_E_DOT11_RC_REASON_OFFSET, /* mechanism needs a setup */ -- DOT11_RC_TIMEOUT = 39 + WLC_E_DOT11_RC_REASON_OFFSET, /* timeout */ -- DOT11_RC_MAX = 23 + WLC_E_DOT11_RC_REASON_OFFSET, /* Reason codes > 23 are reserved */ -- -- WLC_E_REASON_FORCE_32_BIT = 0x7FFFFFFE /** Force enum to be stored in 32 bit variable */ --} whd_event_reason_t; -- --typedef enum --{ -- WLC_E_NAN_EVENT_START = 1, /* NAN cluster started */ -- WLC_E_NAN_EVENT_JOIN = 2, /* Joined to a NAN cluster */ -- WLC_E_NAN_EVENT_ROLE = 3, /* Role or State changed */ -- WLC_E_NAN_EVENT_SCAN_COMPLETE = 4, WLC_E_NAN_EVENT_DISCOVERY_RESULT = 5, WLC_E_NAN_EVENT_REPLIED = 6, -- WLC_E_NAN_EVENT_TERMINATED = 7, /* the instance ID will be present in the ev data */ -- WLC_E_NAN_EVENT_RECEIVE = 8 -- --} whd_nan_events_t; -- --/** -- * Event handler prototype definition -- * -- * @param[out] whd_event_header_t : whd event header -- * @param[out] uint8_t* : event data -- * @param[out] handler_user_data : semaphore data -- */ --typedef void *(*whd_event_handler_t)(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, void *handler_user_data); --/** @endcond */ -- -- --extern whd_result_t whd_management_set_event_handler_locally(whd_interface_t ifp, -- const whd_event_num_t *event_nums, -- whd_event_handler_t handler_func, -- void *handler_user_data, uint16_t *event_index); -- --extern whd_result_t whd_management_set_event_handler(whd_interface_t ifp, const whd_event_num_t *event_nums, -- whd_event_handler_t handler_func, -- void *handler_user_data, uint16_t *event_index); -- --extern uint32_t whd_wifi_set_event_handler(whd_interface_t ifp, const uint32_t *event_type, -- whd_event_handler_t handler_func, -- void *handler_user_data, uint16_t *event_index); -- --extern uint32_t whd_wifi_deregister_event_handler(whd_interface_t ifp, uint16_t event_index); -- --/** @cond */ -- --//extern void* whd_rrm_report_handler( const whd_event_header_t* event_header, const uint8_t* event_data, void* handler_user_data ); -- --extern void *whd_nan_scan_handler(const whd_event_header_t *event_header, const uint8_t *event_data, -- void *handler_user_data); -- --#define WHD_MSG_IFNAME_MAX 16 -- --/* Maximum number of events registered at a time */ --#define WHD_MAX_EVENT_SUBSCRIPTION 33 -- --#define WHD_EVENT_NOT_REGISTERED 0xFF --/* Enum to index and find the entry of paricular event registered */ --typedef enum --{ -- WHD_SCAN_EVENT_ENTRY = 0, -- WHD_JOIN_EVENT_ENTRY, -- WHD_AP_EVENT_ENTRY, -- WHD_P2P_EVENT_ENTRY, -- WHD_EVENT_ENTRY_MAX --} whd_event_entry_t; -- --#pragma pack(1) --typedef struct whd_event_eth_hdr --{ -- uint16_t subtype; /** Vendor specific..32769 */ -- uint16_t length; -- uint8_t version; /** Version is 0 */ -- uint8_t oui[3]; /** OUI */ -- uint16_t usr_subtype; /** user specific Data */ --} whd_event_eth_hdr_t; -- --typedef struct whd_event_ether_header --{ -- whd_mac_t destination_address; -- whd_mac_t source_address; -- uint16_t ethertype; --} whd_event_ether_header_t; -- --struct whd_event_msg --{ -- uint16_t version; -- uint16_t flags; /* see flags below */ -- uint32_t event_type; /* Message (see below) */ -- uint32_t status; /* Status code (see below) */ -- uint32_t reason; /* Reason code (if applicable) */ -- uint32_t auth_type; /* WLC_E_AUTH */ -- uint32_t datalen; /* data buf */ -- whd_mac_t addr; /* Station address (if applicable) */ -- char ifname[WHD_MSG_IFNAME_MAX]; /* name of the packet incoming interface */ -- uint8_t ifidx; /* destination OS i/f index */ -- uint8_t bsscfgidx; /* source bsscfg index */ --}; -- --/* used by driver msgs */ --typedef struct whd_event --{ -- whd_event_ether_header_t eth; -- whd_event_eth_hdr_t eth_evt_hdr; -- whd_event_header_t whd_event; -- /* data portion follows */ --} whd_event_t; -- --#pragma pack() -- --/** @endcond */ -- --/** @} */ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_EVENTS_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_int.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_int.h -deleted file mode 100644 -index 142c0f231a..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_int.h -+++ /dev/null -@@ -1,113 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Header for whd_driver structure -- */ -- --#ifndef INCLUDED_WHD_INT_H --#define INCLUDED_WHD_INT_H -- --#include "whd_thread.h" --#include "whd_sdpcm.h" --#include "whd_cdc_bdc.h" --#include "whd_chip.h" --#include "whd_ap.h" --#include "whd_debug.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --typedef struct --{ -- uint32_t tx_total; /* Total number of TX packets sent from WHD */ -- uint32_t rx_total; /* Total number of RX packets received at WHD */ -- uint32_t tx_no_mem; /* Number of times WHD could not send due to no buffer */ -- uint32_t rx_no_mem; /* Number of times WHD could not receive due to no buffer */ -- uint32_t tx_fail; /* Number of times TX packet failed */ -- uint32_t no_credit; /* Number of times WHD could not send due to no credit */ -- uint32_t flow_control; /* Number of times WHD Flow control is enabled */ -- uint32_t internal_host_buffer_fail_with_timeout; /* Internal host buffer get failed after timeout */ --} whd_stats_t; -- --#define WHD_INTERFACE_MAX 3 --typedef enum --{ -- WHD_INVALID_ROLE = 0, -- WHD_STA_ROLE = 1, /**< STA or Client Interface */ -- WHD_AP_ROLE = 2, /**< softAP Interface */ -- WHD_P2P_ROLE = 3, /**< P2P Interface */ --} whd_interface_role_t; -- -- --struct whd_interface --{ -- whd_driver_t whd_driver; -- uint8_t ifidx; -- uint8_t bsscfgidx; -- -- char if_name[WHD_MSG_IFNAME_MAX]; -- whd_interface_role_t role; -- whd_mac_t mac_addr; -- uint8_t event_reg_list[WHD_EVENT_ENTRY_MAX]; -- whd_bool_t state; --}; -- --struct whd_driver --{ -- whd_interface_t iflist[WHD_INTERFACE_MAX]; -- uint8_t if2ifp[WHD_INTERFACE_MAX]; -- -- /* Bus variables */ -- struct whd_bus_info *bus_if; -- struct whd_bus_priv *bus_priv; -- struct whd_bus_common_info *bus_common_info; -- whd_buffer_funcs_t *buffer_if; -- whd_netif_funcs_t *network_if; -- whd_resource_source_t *resource_if; -- -- whd_bool_t bus_gspi_32bit; -- -- whd_thread_info_t thread_info; -- whd_cdc_bdc_info_t cdc_bdc_info; -- whd_sdpcm_info_t sdpcm_info; -- whd_internal_info_t internal_info; -- whd_ap_int_info_t ap_info; -- whd_chip_info_t chip_info; -- -- whd_stats_t whd_stats; -- whd_country_code_t country; -- -- whd_ioctl_log_t whd_ioctl_log[WHD_IOCTL_LOG_SIZE]; -- int whd_ioctl_log_index; --}; -- --whd_result_t whd_add_interface(whd_driver_t whd_driver, uint8_t bsscfgidx, uint8_t ifidx, -- const char *name, whd_mac_t *mac_addr, whd_interface_t *ifpp); -- --whd_result_t whd_add_primary_interface(whd_driver_t whd_driver, whd_interface_t *ifpp); -- --whd_interface_t whd_get_primary_interface(whd_driver_t whd_driver); -- -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* INCLUDED_WHD_INT_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_network_if.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_network_if.h -deleted file mode 100644 -index 8cd531eaa5..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_network_if.h -+++ /dev/null -@@ -1,76 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides prototypes / declarations for common APSTA functionality -- */ --#ifndef _WHD_INTERNAL_NETWORK_API_H_ --#define _WHD_INTERNAL_NETWORK_API_H_ -- --#include "whd.h" --#include "whd_int.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Macros --******************************************************/ -- --/****************************************************** --* Structures --******************************************************/ -- --/****************************************************** --* Function prototypes --******************************************************/ --/** Called by WHD to pass received data to the network stack -- * -- * -- * Packets received from the Wi-Fi network by WHD are forwarded to by calling function ptr which -- * must be implemented in the network interface. Ethernet headers -- * are present at the start of these packet buffers. -- * -- * This function is called asynchronously in the context of the -- * WHD thread whenever new data has arrived. -- * Packet buffers are allocated within WHD, and ownership is transferred -- * to the network stack. The network stack or application is thus -- * responsible for releasing the packet buffers. -- * Most packet buffering systems have a pointer to the 'current point' within -- * the packet buffer. When this function is called, the pointer points -- * to the start of the Ethernet header. There is other inconsequential data -- * before the Ethernet header. -- * -- * It is preferable that the (whd_network_process_ethernet_data)() function simply puts -- * the received packet on a queue for processing by another thread. This avoids the -- * WHD thread being unnecessarily tied up which would delay other packets -- * being transmitted or received. -- * -- * @param interface : The interface on which the packet was received. -- * @param buffer : Handle of the packet which has just been received. Responsibility for -- * releasing this buffer is transferred from WHD at this point. -- * -- */ --whd_result_t whd_network_process_ethernet_data(whd_interface_t ifp, whd_buffer_t buffer); --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif /* ifndef _WHD_INTERNAL_NETWORK_API_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_poll.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_poll.h -deleted file mode 100644 -index 8bdc3e790e..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_poll.h -+++ /dev/null -@@ -1,93 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Header for using WHD with no RTOS or network stack -- * -- * It is possible to use these WHD without any operating system. To do this, -- * the user application is required to periodically use the functions in this -- * file to allow WHD to send and receive data across the SPI/SDIO bus. -- * -- */ -- --#include "whd.h" -- --#ifndef INCLUDED_WHD_POLL_H --#define INCLUDED_WHD_POLL_H -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Function declarations --******************************************************/ -- -- --/** Sends the first queued packet -- * -- * Checks the queue to determine if there is any packets waiting -- * to be sent. If there are, then it sends the first one. -- * -- * This function is normally used by the WHD Thread, but can be -- * called periodically by systems which have no RTOS to ensure -- * packets get sent. -- * -- * @return 1 : packet was sent -- * 0 : no packet sent -- */ --extern int8_t whd_thread_send_one_packet(whd_driver_t whd_driver); -- -- --/** Receives a packet if one is waiting -- * -- * Checks the wifi chip fifo to determine if there is any packets waiting -- * to be received. If there are, then it receives the first one, and calls -- * the callback @ref whd_sdpcm_process_rx_packet (in whd_sdpcm.c). -- * -- * This function is normally used by the WHD Thread, but can be -- * called periodically by systems which have no RTOS to ensure -- * packets get received properly. -- * -- * @return 1 : packet was received -- * 0 : no packet waiting -- */ --extern int8_t whd_thread_receive_one_packet(whd_driver_t whd_driver); -- -- --/** Sends and Receives all waiting packets -- * -- * Repeatedly calls whd_thread_send_one_packet and whd_thread_receive_one_packet -- * to send and receive packets, until there are no more packets waiting to -- * be transferred. -- * -- * This function is normally used by the WHD Thread, but can be -- * called periodically by systems which have no RTOS to ensure -- * packets get send and received properly. -- * -- * @return 1 : packet was sent or received -- * 0 : no packet was sent or received -- */ --extern int8_t whd_thread_poll_all(whd_driver_t whd_driver); -- -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_POLL_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_resource_if.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_resource_if.h -deleted file mode 100644 -index ae83312bf4..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_resource_if.h -+++ /dev/null -@@ -1,55 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides prototypes / declarations for common APSTA functionality -- */ --#ifndef _WHD_INTERNAL_RESOURCE_API_H_ --#define _WHD_INTERNAL_RESOURCE_API_H_ -- --#include "whd.h" --#include "whd_int.h" --#include "whd_resource_api.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Macros --******************************************************/ -- --/****************************************************** --* Structures --******************************************************/ -- --/****************************************************** --* Function prototypes --******************************************************/ --uint32_t whd_resource_size(whd_driver_t whd_driver, whd_resource_type_t resource, uint32_t *size_out); --uint32_t whd_get_resource_block_size(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *size_out); --uint32_t whd_get_resource_no_of_blocks(whd_driver_t whd_drv, whd_resource_type_t type, uint32_t *block_count); --uint32_t whd_get_resource_block(whd_driver_t whd_driver, whd_resource_type_t type, -- uint32_t blockno, const uint8_t **data, uint32_t *size_out); -- --#ifdef __cplusplus --} /*extern "C" */ --#endif -- --#endif /* ifndef _WHD_INTERNAL_RESOURCE_API_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_sdpcm.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_sdpcm.h -deleted file mode 100644 -index 5a7424b04c..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_sdpcm.h -+++ /dev/null -@@ -1,124 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides whd with function prototypes for IOCTL commands, -- * and for communicating with the SDPCM module -- * -- */ -- --#ifndef INCLUDED_WHD_SDPCM_H --#define INCLUDED_WHD_SDPCM_H -- --#include "whd.h" --#include "whd_events_int.h" --#include "cyabs_rtos.h" --#include "whd_network_types.h" --#include "whd_types_int.h" --#include "whd_cdc_bdc.h" -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Constants --******************************************************/ --typedef enum --{ -- DATA_HEADER = 2, -- ASYNCEVENT_HEADER = 1, -- CONTROL_HEADER = 0 --} sdpcm_header_type_t; -- --/****************************************************** --* Macros --******************************************************/ -- --#define BUS_HEADER_LEN (12) --#define IOCTL_OFFSET (sizeof(whd_buffer_header_t) + 12 + 16) -- --/****************************************************** --* Structures --******************************************************/ --typedef struct whd_sdpcm_info --{ -- /* Bus data credit variables */ -- uint8_t packet_transmit_sequence_number; -- uint8_t last_bus_data_credit; -- uint8_t credit_diff; -- uint8_t largest_credit_diff; -- -- /* Packet send queue variables */ -- cy_semaphore_t send_queue_mutex; -- whd_buffer_t send_queue_head; -- whd_buffer_t send_queue_tail; -- --} whd_sdpcm_info_t; -- --typedef struct --{ -- whd_buffer_header_t buffer_header; -- uint8_t bus_header[BUS_HEADER_LEN]; --} bus_common_header_t; -- --#pragma pack(1) --typedef struct --{ -- bus_common_header_t common; -- cdc_header_t cdc_header; --} control_header_t; -- --typedef struct --{ -- bus_common_header_t common; -- uint8_t _padding[2]; -- bdc_header_t bdc_header; --} data_header_t; --#pragma pack() -- --/****************************************************** --* Function declarations --******************************************************/ -- --extern void whd_sdpcm_process_rx_packet(whd_driver_t whd_driver, whd_buffer_t buffer); --extern whd_result_t whd_sdpcm_init(whd_driver_t whd_driver); --extern void whd_sdpcm_quit(whd_driver_t whd_driver); --extern void whd_sdpcm_bus_vars_init(whd_driver_t whd_driver); --extern void whd_sdpcm_quit(whd_driver_t whd_driver); --extern whd_bool_t whd_sdpcm_has_tx_packet(whd_driver_t whd_driver); -- --extern whd_result_t whd_sdpcm_get_packet_to_send(whd_driver_t whd_driver, whd_buffer_t *buffer); --extern void whd_sdpcm_update_credit(whd_driver_t whd_driver, uint8_t *data); --extern uint8_t whd_sdpcm_get_available_credits(whd_driver_t whd_driver); --extern void whd_update_host_interface_to_bss_index_mapping(whd_driver_t whd_driver, whd_interface_t interface, -- uint32_t bssid_index); -- --extern void whd_send_to_bus(whd_driver_t whd_driver, whd_buffer_t buffer, -- sdpcm_header_type_t header_type); -- --/****************************************************** --* Global variables --******************************************************/ -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_SDPCM_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread.h -deleted file mode 100644 -index 248b1f8c42..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread.h -+++ /dev/null -@@ -1,92 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * The whd Thread allows thread safe access to the whd hardware bus -- * This is an whd internal file and should not be used by functions outside whd. -- * -- * This file provides prototypes for functions which allow multiple threads to use the whd hardware bus (SDIO or SPI) -- * This is achieved by having a single thread (the "whd Thread") which queues messages to be sent, sending -- * them sequentially, as well as receiving messages as they arrive. -- * -- * Messages to be sent come from the @ref whd_sdpcm_send_common function in whd_sdpcm.c . The messages already -- * contain SDPCM headers, but not any bus headers (GSPI), and are passed via a queue -- * This function can be called from any thread. -- * -- * Messages are received by way of a callback supplied by in whd_sdpcm.c - whd_sdpcm_process_rx_packet -- * Received messages are delivered in the context of the whd Thread, so the callback function needs to avoid blocking. -- * -- */ --#include "cyabs_rtos.h" --#include "whd.h" -- --#ifndef INCLUDED_WHD_THREAD_H_ --#define INCLUDED_WHD_THREAD_H_ -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Constants --******************************************************/ --#define WHD_THREAD_RX_BOUND (20) -- --typedef struct whd_thread_info --{ -- -- volatile whd_bool_t thread_quit_flag; -- volatile whd_bool_t whd_inited; -- cy_thread_t whd_thread; -- cy_semaphore_t transceive_semaphore; -- volatile whd_bool_t bus_interrupt; -- void *thread_stack_start; -- uint32_t thread_stack_size; -- cy_thread_priority_t thread_priority; -- --} whd_thread_info_t; -- --void whd_thread_info_init(whd_driver_t whd_driver, whd_init_config_t *whd_init_config); -- --/** Initialises the whd Thread -- * -- * Initialises the whd thread, and its flags/semaphores, -- * then starts it running -- * -- * @return whd result code -- */ --extern whd_result_t whd_thread_init(whd_driver_t whd_driver); -- -- --/** Terminates the whd Thread -- * -- * Sets a flag then wakes the whd Thread to force it to terminate. -- * -- */ --extern void whd_thread_quit(whd_driver_t whd_driver); -- -- --extern void whd_thread_notify(whd_driver_t whd_driver); --extern void whd_thread_notify_irq(whd_driver_t whd_driver); -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_THREAD_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread_internal.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread_internal.h -deleted file mode 100644 -index ec46ebdddc..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_thread_internal.h -+++ /dev/null -@@ -1,55 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef INCLUDED_WHD_THREAD_INTERNAL_H --#define INCLUDED_WHD_THREAD_INTERNAL_H -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --#include "whd_debug.h" --#include "whd_int.h" -- --/****************************************************** --* Macros --******************************************************/ -- --#define WHD_WLAN_KEEP_AWAKE(whd_driver) \ -- do { \ -- whd_result_t verify_result; \ -- whd_driver->internal_info.whd_wlan_status.keep_wlan_awake++; \ -- verify_result = whd_ensure_wlan_bus_is_up(whd_driver); \ -- whd_assert("Could not bring bus up", (verify_result == WHD_SUCCESS) ); \ -- } while (0) --#define WHD_WLAN_LET_SLEEP(whd_driver) \ -- do { \ -- whd_driver->internal_info.whd_wlan_status.keep_wlan_awake--; \ -- if (whd_driver->internal_info.whd_wlan_status.keep_wlan_awake == 0) \ -- whd_thread_notify(whd_driver); \ -- } while (0) --#define WHD_WLAN_MAY_SLEEP() \ -- ( (whd_driver->internal_info.whd_wlan_status.keep_wlan_awake == 0) && \ -- (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP) ) -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_THREAD_INTERNAL_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_types_int.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_types_int.h -deleted file mode 100644 -index 4f1d384247..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_types_int.h -+++ /dev/null -@@ -1,407 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Defines common constants used with WHD within src folder -- * -- */ -- --#ifndef INCLUDED_WHD_TYPES_INT_H_ --#define INCLUDED_WHD_TYPES_INT_H_ -- --#include --#include --#include -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/****************************************************** --* Macros --******************************************************/ --#define MAX_BUS_HEADER_SIZE 4 -- --/** -- * The size of an Ethernet header -- */ --#define WHD_ETHERNET_SIZE (14) -- --/** -- * Ethernet Ethertypes -- */ --#define WHD_ETHERTYPE_IPv4 0x0800 --#define WHD_ETHERTYPE_IPv6 0x86DD --#define WHD_ETHERTYPE_ARP 0x0806 --#define WHD_ETHERTYPE_RARP 0x8035 --#define WHD_ETHERTYPE_EAPOL 0x888E --#define WHD_ETHERTYPE_DOT1AS 0x88F7 --#define WHD_ETHERTYPE_8021Q 0x8100 -- --/* bss_info_cap_t flags */ --#define WL_BSS_FLAGS_FROM_BEACON 0x01 /* bss_info derived from beacon */ --#define WL_BSS_FLAGS_FROM_CACHE 0x02 /* bss_info collected from cache */ --#define WL_BSS_FLAGS_RSSI_ONCHANNEL 0x04 /* rssi info received on channel (vs offchannel) */ --#define WL_BSS_FLAGS_HS20 0x08 /* hotspot 2.0 capable */ --#define WL_BSS_FLAGS_RSSI_INVALID 0x10 /* BSS contains invalid RSSI */ --#define WL_BSS_FLAGS_RSSI_INACCURATE 0x20 /* BSS contains inaccurate RSSI */ --#define WL_BSS_FLAGS_SNR_INVALID 0x40 /* BSS contains invalid SNR */ --#define WL_BSS_FLAGS_NF_INVALID 0x80 /* BSS contains invalid noise floor */ -- --#define HT_CAPABILITIES_IE_LENGTH (26) --#define DOT11_OUI_LEN (3)/** Length in bytes of 802.11 OUI*/ -- --#define WHD_ETHER_ADDR_STR_LEN (18) --#define WHD_ETHER_ADDR_LEN (6) -- --#define CHECK_IOCTL_BUFFER(buff) if (buff == \ -- NULL){ WPRINT_WHD_ERROR( ("Buffer alloc failed in function %s at line %d \n", \ -- __func__, __LINE__) ); \ -- return WHD_BUFFER_ALLOC_FAIL; } --#define CHECK_RETURN(expr) { \ -- whd_result_t check_res = (expr); \ -- if (check_res != WHD_SUCCESS) \ -- { \ -- WPRINT_WHD_ERROR( ("Function %s failed at line %d checkres = %u \n", \ -- __func__, __LINE__, \ -- (unsigned int)check_res) ); \ -- return check_res; \ -- } \ --} -- --#define CHECK_RETURN_UNSUPPORTED_OK(expr) { whd_result_t check_res = (expr); \ -- if (check_res != WHD_SUCCESS) \ -- { \ -- return check_res; \ -- } \ --} --#define CHECK_RETURN_UNSUPPORTED_CONTINUE(expr) { whd_result_t check_res = (expr); \ -- if (check_res != WHD_SUCCESS && check_res != WHD_WLAN_UNSUPPORTED) \ -- { \ -- return check_res; \ -- } \ --} --#define RETURN_WITH_ASSERT(expr) { whd_result_t check_res = (expr); \ -- whd_assert("Command failed\n", check_res == WHD_SUCCESS); \ -- return check_res; } -- --#define CHECK_RETURN_IGNORE(expr) { whd_result_t check_res = (expr); \ -- if (check_res != WHD_SUCCESS) \ -- { \ -- } \ --} -- --#define CHECK_IFP_NULL(ifp) if (ifp == \ -- NULL){ WPRINT_WHD_ERROR( ( \ -- "Interface is not up/NULL and failed in function %s at line %d \n", \ -- __func__, __LINE__) ); \ -- return WHD_UNKNOWN_INTERFACE; } -- --#define CHECK_DRIVER_NULL(driver) if (driver == \ -- NULL){ WPRINT_WHD_ERROR( ( \ -- "WHD driver is not up/NULL and failed in function %s at line %d \n", \ -- __func__, __LINE__) ); \ -- return WHD_DOES_NOT_EXIST; } -- --#define MIN_OF(x, y) ( (x) < (y) ? (x) : (y) ) --#define MAX_OF(x, y) ( (x) > (y) ? (x) : (y) ) -- --#ifndef ROUND_UP --#define ROUND_UP(x, y) ( (x) % (y) ? (x) + (y) - ( (x) % (y) ) : (x) ) --#endif -- --#ifndef DIV_ROUND_UP --#define DIV_ROUND_UP(m, n) ( ( (m) + (n) - 1 ) / (n) ) --#endif -- --#define WHD_WRITE_16(pointer, value) (*( (uint16_t *)pointer ) = value) --#define WHD_WRITE_32(pointer, value) (*( (uint32_t *)pointer ) = value) --#define WHD_READ_16(pointer) *( (uint16_t *)pointer ) --#define WHD_READ_32(pointer) *( (uint32_t *)pointer ) -- --/** -- * Macro for checking for NULL MAC addresses -- */ --#define NULL_MAC(a) ( ( ( ( (unsigned char *)a )[0] ) == 0 ) && \ -- ( ( ( (unsigned char *)a )[1] ) == 0 ) && \ -- ( ( ( (unsigned char *)a )[2] ) == 0 ) && \ -- ( ( ( (unsigned char *)a )[3] ) == 0 ) && \ -- ( ( ( (unsigned char *)a )[4] ) == 0 ) && \ -- ( ( ( (unsigned char *)a )[5] ) == 0 ) ) -- --/** -- * Macro for checking for Broadcast address -- */ --#define BROADCAST_ID(a) ( ( ( ( (unsigned char *)a )[0] ) == 255 ) && \ -- ( ( ( (unsigned char *)a )[1] ) == 255 ) && \ -- ( ( ( (unsigned char *)a )[2] ) == 255 ) && \ -- ( ( ( (unsigned char *)a )[3] ) == 255 ) && \ -- ( ( ( (unsigned char *)a )[4] ) == 255 ) && \ -- ( ( ( (unsigned char *)a )[5] ) == 255 ) ) -- --/* Suppress unused variable warning occurring due to an assert which is disabled in release mode */ --#define REFERENCE_DEBUG_ONLY_VARIABLE(x) ( (void)(x) ) -- --/* Suppress unused parameter warning */ --#define UNUSED_PARAMETER(x) ( (void)(x) ) -- --/* Suppress unused variable warning */ --#define UNUSED_VARIABLE(x) ( (void)(x) ) -- --#if defined (__IAR_SYSTEMS_ICC__) --#define DISABLE_COMPILER_WARNING(x) _Pragma(#x) --#define ENABLE_COMPILER_WARNING(x) _Pragma(#x) --#else --#define DISABLE_COMPILER_WARNING(x) --#define ENABLE_COMPILER_WARNING(x) --#endif -- --/****************************************************** --* Type Definitions --******************************************************/ -- --/****************************************************** --* Constants --******************************************************/ -- --/****************************************************** --* Structures and Enumerations --******************************************************/ --#pragma pack(1) --typedef struct --{ -- whd_buffer_queue_ptr_t queue_next; -- char bus_header[MAX_BUS_HEADER_SIZE]; --} whd_buffer_header_t; --#pragma pack() -- --/* 802.11 Information Element Identification Numbers (as per section 8.4.2.1 of 802.11-2012) */ --typedef enum --{ -- DOT11_IE_ID_SSID = 0, -- DOT11_IE_ID_SUPPORTED_RATES = 1, -- DOT11_IE_ID_FH_PARAMETER_SET = 2, -- DOT11_IE_ID_DSSS_PARAMETER_SET = 3, -- DOT11_IE_ID_CF_PARAMETER_SET = 4, -- DOT11_IE_ID_TIM = 5, -- DOT11_IE_ID_IBSS_PARAMETER_SET = 6, -- DOT11_IE_ID_COUNTRY = 7, -- DOT11_IE_ID_HOPPING_PATTERN_PARAMETERS = 8, -- DOT11_IE_ID_HOPPING_PATTERN_TABLE = 9, -- DOT11_IE_ID_REQUEST = 10, -- DOT11_IE_ID_BSS_LOAD = 11, -- DOT11_IE_ID_EDCA_PARAMETER_SET = 12, -- DOT11_IE_ID_TSPEC = 13, -- DOT11_IE_ID_TCLAS = 14, -- DOT11_IE_ID_SCHEDULE = 15, -- DOT11_IE_ID_CHALLENGE_TEXT = 16, -- /* 17-31 Reserved */ -- DOT11_IE_ID_POWER_CONSTRAINT = 32, -- DOT11_IE_ID_POWER_CAPABILITY = 33, -- DOT11_IE_ID_TPC_REQUEST = 34, -- DOT11_IE_ID_TPC_REPORT = 35, -- DOT11_IE_ID_SUPPORTED_CHANNELS = 36, -- DOT11_IE_ID_CHANNEL_SWITCH_ANNOUNCEMENT = 37, -- DOT11_IE_ID_MEASUREMENT_REQUEST = 38, -- DOT11_IE_ID_MEASUREMENT_REPORT = 39, -- DOT11_IE_ID_QUIET = 40, -- DOT11_IE_ID_IBSS_DFS = 41, -- DOT11_IE_ID_ERP = 42, -- DOT11_IE_ID_TS_DELAY = 43, -- DOT11_IE_ID_TCLAS_PROCESSING = 44, -- DOT11_IE_ID_HT_CAPABILITIES = 45, -- DOT11_IE_ID_QOS_CAPABILITY = 46, -- /* 47 Reserved */ -- DOT11_IE_ID_RSN = 48, -- /* 49 Reserved */ -- DOT11_IE_ID_EXTENDED_SUPPORTED_RATES = 50, -- DOT11_IE_ID_AP_CHANNEL_REPORT = 51, -- DOT11_IE_ID_NEIGHBOR_REPORT = 52, -- DOT11_IE_ID_RCPI = 53, -- DOT11_IE_ID_MOBILITY_DOMAIN = 54, -- DOT11_IE_ID_FAST_BSS_TRANSITION = 55, -- DOT11_IE_ID_TIMEOUT_INTERVAL = 56, -- DOT11_IE_ID_RIC_DATA = 57, -- DOT11_IE_ID_DSE_REGISTERED_LOCATION = 58, -- DOT11_IE_ID_SUPPORTED_OPERATING_CLASSES = 59, -- DOT11_IE_ID_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT = 60, -- DOT11_IE_ID_HT_OPERATION = 61, -- DOT11_IE_ID_SECONDARY_CHANNEL_OFFSET = 62, -- DOT11_IE_ID_BSS_AVERAGE_ACCESS_DELAY = 63, -- DOT11_IE_ID_ANTENNA = 64, -- DOT11_IE_ID_RSNI = 65, -- DOT11_IE_ID_MEASUREMENT_PILOT_TRANSMISSION = 66, -- DOT11_IE_ID_BSS_AVAILABLE_ADMISSION_CAPACITY = 67, -- DOT11_IE_ID_BSS_AC_ACCESS_DELAY = 68, -- DOT11_IE_ID_TIME_ADVERTISEMENT = 69, -- DOT11_IE_ID_RM_ENABLED_CAPABILITIES = 70, -- DOT11_IE_ID_MULTIPLE_BSSID = 71, -- DOT11_IE_ID_20_40_BSS_COEXISTENCE = 72, -- DOT11_IE_ID_20_40_BSS_INTOLERANT_CHANNEL_REPORT = 73, -- DOT11_IE_ID_OVERLAPPING_BSS_SCAN_PARAMETERS = 74, -- DOT11_IE_ID_RIC_DESCRIPTOR = 75, -- DOT11_IE_ID_MANAGEMENT_MIC = 76, -- DOT11_IE_ID_EVENT_REQUEST = 78, -- DOT11_IE_ID_EVENT_REPORT = 79, -- DOT11_IE_ID_DIAGNOSTIC_REQUEST = 80, -- DOT11_IE_ID_DIAGNOSTIC_REPORT = 81, -- DOT11_IE_ID_LOCATION_PARAMETERS = 82, -- DOT11_IE_ID_NONTRANSMITTED_BSSID_CAPABILITY = 83, -- DOT11_IE_ID_SSID_LIST = 84, -- DOT11_IE_ID_MULTIPLE_BSSID_INDEX = 85, -- DOT11_IE_ID_FMS_DESCRIPTOR = 86, -- DOT11_IE_ID_FMS_REQUEST = 87, -- DOT11_IE_ID_FMS_RESPONSE = 88, -- DOT11_IE_ID_QOS_TRAFFIC_CAPABILITY = 89, -- DOT11_IE_ID_BSS_MAX_IDLE_PERIOD = 90, -- DOT11_IE_ID_TFS_REQUEST = 91, -- DOT11_IE_ID_TFS_RESPONSE = 92, -- DOT11_IE_ID_WNM_SLEEP_MODE = 93, -- DOT11_IE_ID_TIM_BROADCAST_REQUEST = 94, -- DOT11_IE_ID_TIM_BROADCAST_RESPONSE = 95, -- DOT11_IE_ID_COLLOCATED_INTERFERENCE_REPORT = 96, -- DOT11_IE_ID_CHANNEL_USAGE = 97, -- DOT11_IE_ID_TIME_ZONE = 98, -- DOT11_IE_ID_DMS_REQUEST = 99, -- DOT11_IE_ID_DMS_RESPONSE = 100, -- DOT11_IE_ID_LINK_IDENTIFIER = 101, -- DOT11_IE_ID_WAKEUP_SCHEDULE = 102, -- /* 103 Reserved */ -- DOT11_IE_ID_CHANNEL_SWITCH_TIMING = 104, -- DOT11_IE_ID_PTI_CONTROL = 105, -- DOT11_IE_ID_TPU_BUFFER_STATUS = 106, -- DOT11_IE_ID_INTERWORKING = 107, -- DOT11_IE_ID_ADVERTISMENT_PROTOCOL = 108, -- DOT11_IE_ID_EXPEDITED_BANDWIDTH_REQUEST = 109, -- DOT11_IE_ID_QOS_MAP_SET = 110, -- DOT11_IE_ID_ROAMING_CONSORTIUM = 111, -- DOT11_IE_ID_EMERGENCY_ALERT_IDENTIFIER = 112, -- DOT11_IE_ID_MESH_CONFIGURATION = 113, -- DOT11_IE_ID_MESH_ID = 114, -- DOT11_IE_ID_MESH_LINK_METRIC_REPORT = 115, -- DOT11_IE_ID_CONGESTION_NOTIFICATION = 116, -- DOT11_IE_ID_MESH_PEERING_MANAGEMENT = 117, -- DOT11_IE_ID_MESH_CHANNEL_SWITCH_PARAMETERS = 118, -- DOT11_IE_ID_MESH_AWAKE_WINDOW = 119, -- DOT11_IE_ID_BEACON_TIMING = 120, -- DOT11_IE_ID_MCCAOP_SETUP_REQUEST = 121, -- DOT11_IE_ID_MCCAOP_SETUP_REPLY = 122, -- DOT11_IE_ID_MCCAOP_ADVERTISMENT = 123, -- DOT11_IE_ID_MCCAOP_TEARDOWN = 124, -- DOT11_IE_ID_GANN = 125, -- DOT11_IE_ID_RANN = 126, -- DOT11_IE_ID_EXTENDED_CAPABILITIES = 127, -- /* 128-129 Reserved */ -- DOT11_IE_ID_PREQ = 130, -- DOT11_IE_ID_PREP = 131, -- DOT11_IE_ID_PERR = 132, -- /* 133-136 Reserved */ -- DOT11_IE_ID_PXU = 137, -- DOT11_IE_ID_PXUC = 138, -- DOT11_IE_ID_AUTHENTICATED_MESH_PEERING_EXCHANGE = 139, -- DOT11_IE_ID_MIC = 140, -- DOT11_IE_ID_DESTINATION_URI = 141, -- DOT11_IE_ID_U_APSD_COEXISTENCE = 142, -- /* 143-173 Reserved */ -- DOT11_IE_ID_MCCAOP_ADVERTISMENT_OVERVIEW = 174, -- /* 175-220 Reserved */ -- DOT11_IE_ID_VENDOR_SPECIFIC = 221, -- /* 222-255 Reserved */ --} dot11_ie_id_t; -- --uint32_t whd_wifi_get_iovar_value(whd_interface_t ifp, const char *iovar, uint32_t *value); --uint32_t whd_wifi_set_iovar_buffers(whd_interface_t ifp, const char *iovar, const void **in_buffers, -- const uint16_t *lengths, const uint8_t num_buffers); --uint32_t whd_wifi_set_iovar_value(whd_interface_t ifp, const char *iovar, uint32_t value); -- --/** Sends an IOVAR command -- * -- * @param ifp : Pointer to handle instance of whd interface -- * @param iovar : IOVAR name -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_iovar_void(whd_interface_t ifp, const char *iovar); -- --/** Sends an IOVAR command -- * -- * @param ifp : Pointer to handle instance of whd interface -- * @param iovar : IOVAR name -- * @param buffer : Handle for a packet buffer containing the data value to be sent. -- * @param buffer_length : Length of out_buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_iovar_buffer(whd_interface_t ifp, const char *iovar, void *buffer, uint16_t buffer_length); -- --/** Sends an IOVAR command -- * -- * @param ifp : Pointer to handle instance of whd interface -- * @param iovar : IOVAR name -- * @param in_buffers : Handle for a packet buffers containing the data value to be sent. -- * @param in_buffer_lengths : Length of in_buffers -- * @param num_buffers : Number of handle buffers -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_iovar_buffers(whd_interface_t ifp, const char *iovar, const void **in_buffers, -- const uint16_t *in_buffer_lengths, const uint8_t num_buffers); -- --/** Sends an IOVAR command -- * -- * @param ifp : Pointer to handle instance of whd interface -- * @param iovar : IOVAR name -- * @param out_buffer : Pointer to receive the handle for the packet buffer containing the response data value received -- * @param out_length : Length of out_buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_get_iovar_buffer(whd_interface_t ifp, const char *iovar_name, uint8_t *out_buffer, -- uint16_t out_length); -- --/** Sends an IOVAR command -- * -- * @param ifp : Pointer to handle instance of whd interface -- * @param iovar : IOVAR name -- * @param buffer : Handle for a packet buffer containing the data value to be sent. -- * @param buffer_length : Length of out_buffer -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_iovar_buffer(whd_interface_t ifp, const char *iovar, void *buffer, uint16_t buffer_length); -- --/** Sends an IOVAR command -- * -- * @param ifp : Pointer to handle instance of whd interface -- * @param iovar : IOVAR name -- * @param in_buffers : Handle for a packet buffers containing the data value to be sent. -- * @param in_buffer_lengths : Length of in_buffers -- * @param num_buffers : Number of handle buffers -- * -- * @return WHD_SUCCESS or Error code -- */ --extern uint32_t whd_wifi_set_iovar_buffers(whd_interface_t ifp, const char *iovar, const void **in_buffers, -- const uint16_t *in_buffer_lengths, const uint8_t num_buffers); -- --extern uint32_t whd_wifi_set_mac_address(whd_interface_t ifp, whd_mac_t mac); -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif /* ifndef INCLUDED_WHD_TYPES_INT_H_ */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_utils.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_utils.h -deleted file mode 100644 -index de34f9c272..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_utils.h -+++ /dev/null -@@ -1,182 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** -- * @file WHD utilities -- * -- * Utilities to help do specialized (not general purpose) WHD specific things -- */ --#include "whd_chip.h" --#include "whd_events_int.h" --#include "whd_types_int.h" -- --#ifndef INCLUDED_WHD_UTILS_H_ --#define INCLUDED_WHD_UTILS_H_ -- --#ifdef __cplusplus --extern "C" { --#endif -- --/** Searches for a specific WiFi Information Element in a byte array -- * -- * Traverse a string of 1-byte tag/1-byte length/variable-length value -- * triples, returning a pointer to the substring whose first element -- * matches tag -- * -- * @note : This function has been copied directly from the standard Broadcom host driver file wl/exe/wlu.c -- * -- * -- * @param tlv_buf : The byte array containing the Information Elements (IEs) -- * @param buflen : The length of the tlv_buf byte array -- * @param key : The Information Element tag to search for -- * -- * @return NULL : if no matching Information Element was found -- * Non-Null : Pointer to the start of the matching Information Element -- */ -- --whd_tlv8_header_t *whd_parse_tlvs(const whd_tlv8_header_t *tlv_buf, uint32_t buflen, dot11_ie_id_t key); -- --/** Checks if a WiFi Information Element is a WPA entry -- * -- * Is this body of this tlvs entry a WPA entry? If -- * not update the tlvs buffer pointer/length -- * -- * @note : This function has been copied directly from the standard Broadcom host driver file wl/exe/wlu.c -- * -- * @param wpaie : The byte array containing the Information Element (IE) -- * @param tlvs : The larger IE array to be updated if not a WPA IE -- * @param tlvs_len : The current length of larger IE array -- * -- * @return WHD_TRUE : if IE matches the WPA OUI (Organizationally Unique Identifier) and its type = 1 -- * WHD_FALSE : otherwise -- */ --whd_bool_t whd_is_wpa_ie(vendor_specific_ie_header_t *wpaie, whd_tlv8_header_t **tlvs, uint32_t *tlvs_len); -- --/** Searches for a specific WiFi Information Element in a byte array -- * -- * Traverse a string of 1-byte tag/1-byte length/variable-length value -- * triples, returning a pointer to the substring whose first element -- * matches tag -- * -- * @note : This function has been copied directly from the standard Broadcom host driver file wl/exe/wlu.c -- * -- * -- * @param tlv_buf : The byte array containing the Information Elements (IEs) -- * @param buflen : The length of the tlv_buf byte array -- * @param key : The Information Element tag to search for -- * -- * @return NULL : if no matching Information Element was found -- * Non-Null : Pointer to the start of the matching Information Element -- */ --whd_tlv8_header_t *whd_parse_dot11_tlvs(const whd_tlv8_header_t *tlv_buf, uint32_t buflen, dot11_ie_id_t key); -- --/****************************************************** --* Debug helper functionality --******************************************************/ --#ifdef WPRINT_ENABLE_WHD_DEBUG --const char *whd_event_to_string(whd_event_num_t var); --char *whd_ssid_to_string(uint8_t *value, uint8_t length, char *ssid_buf, uint8_t ssid_buf_len); --const char *whd_status_to_string(whd_event_status_t status); --const char *whd_reason_to_string(whd_event_reason_t reason); --char *whd_ether_ntoa(const uint8_t *ea, char *buf, uint8_t buf_len); --#endif /* ifdef WPRINT_ENABLE_WHD_DEBUG */ -- --/** -- ****************************************************************************** -- * Prints partial details of a scan result on a single line -- * @param[in] record : A pointer to the whd_scan_result_t record -- * -- */ --extern void whd_print_scan_result(whd_scan_result_t *record); -- --/** -- ****************************************************************************** -- * Convert a security bitmap to string -- * @param[in] security : security of type whd_security_t -- * @param[in] out_str : a character array to store output -- * @param[in] out_str_len : length of out_str char array -- * -- */ --extern void whd_convert_security_type_to_string(whd_security_t security, char *out_str, uint16_t out_str_len); -- --/*! -- ****************************************************************************** -- * Convert an IOCTL to a string. -- * -- * @param[in] cmd The ioct_log value. -- * @param[out] ioctl_str The string value after conversion. -- * @param[out] ioctl_str_len The string length of the IOCTL string. -- * -- * @result -- */ --void whd_ioctl_to_string(uint32_t cmd, char *ioctl_str, uint16_t ioctl_str_len); -- --/*! -- ****************************************************************************** -- * Convert event, status and reason value coming from firmware to string. -- * -- * @param[in] cmd The event value in numeric form. -- * @param[in] flag The status value in numeric form. -- * @param[in] reason The reson value in numeric form. -- * @param[out] ioctl_str The string representation of event, status and reason. -- * @param[out] ioctl_str_len The str_len of ioctl_str. -- * -- * @result -- */ --void whd_event_info_to_string(uint32_t cmd, uint16_t flag, uint32_t reason, char *ioctl_str, uint16_t ioctl_str_len); -- --/*! -- ****************************************************************************** -- * Prints Hexdump and ASCII dump for data passed as argument. -- * -- * @param[in] data The data which has to be converted into hex and ascii format. -- * @param[in] data_len The length of data. -- * -- * @result -- */ --void whd_hexdump(uint8_t *data, uint32_t data_len); -- --extern wl_chanspec_t whd_channel_to_wl_band(whd_driver_t whd_driver, uint32_t channel); -- --/*! -- ****************************************************************************** -- * Convert an ipv4 string to a uint32_t. -- * -- * @param[in] ip4addr : IP address in string format -- * @param[in] len : length of the ip address string -- * @param[out] dest : IP address format in uint32 -- * -- * @return -- */ --bool whd_str_to_ip(const char *ip4addr, size_t len, void *dest); -- --/*! -- ****************************************************************************** -- * Print binary IPv4 address to a string. -- * String must contain enough room for full address, 16 bytes exact. -- * @param[in] ip4addr : IPv4 address -- * @param[out] p : ipv4 address in string format -- * -- * @return -- */ --uint8_t whd_ip4_to_string(const void *ip4addr, char *p); -- --#ifdef __cplusplus --} /* extern "C" */ --#endif --#endif -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wifi_p2p.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wifi_p2p.h -deleted file mode 100644 -index b74dc87112..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wifi_p2p.h -+++ /dev/null -@@ -1,49 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "cyabs_rtos.h" /* For semaphores */ --#include "whd.h" -- -- --#ifndef INCLUDED_WHD_WIFI_P2P_H --#define INCLUDED_WHD_WIFI_P2P_H -- -- --#ifdef __cplusplus --extern "C" --{ --#endif -- --/** @cond !ADDTHIS*/ -- --/** -- * Set whether the p2p GO is up or not -- * @param is_up : specify whether the p2p GO is up currently or not -- */ --extern void whd_wifi_p2p_set_go_is_up(whd_driver_t whd_driver, whd_bool_t is_up); -- --/** -- * @return WHD_TRUE if the P2P GO is currently up -- */ --extern whd_bool_t whd_wifi_p2p_is_go_up(whd_driver_t whd_driver); -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif /* ifndef INCLUDED_WHD_WIFI_P2P_H */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wlioctl.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wlioctl.h -deleted file mode 100644 -index a75bee913f..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/include/whd_wlioctl.h -+++ /dev/null -@@ -1,3763 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ --/* -- * Custom OID/ioctl definitions for -- * 802.11abg Networking Device Driver -- */ --#ifndef INCLUDED_WHD_WLIOCTL_H --#define INCLUDED_WHD_WLIOCTL_H -- --#ifdef __cplusplus --extern "C" --{ --#endif --/* These are the flags in the BSS Capability Information field as defined in section 7.3.1.4 of IEEE Std 802.11-2007 */ --#define DOT11_CAP_ESS (0x0001) /** Extended service set capability */ --#define DOT11_CAP_IBSS (0x0002) /** Ad-hoc capability (Independent Basic Service Set) */ --#define DOT11_CAP_PRIVACY (0x0010) /** Privacy subfield - indicates data confidentiality is required for all data frames exchanged */ -- --#define CH_MAX_2G_CHANNEL (14) /* Max channel in 2G band */ --#define MAX_WFDS_SVC_NAME_LEN (200) /* maximum service_name length */ -- --#define ACTION_FRAME_SIZE 1040 --typedef uint16_t chanspec_t; --#define ETHER_ADDR_LEN 6 -- --typedef struct ether_addr --{ -- uint8_t octet[ETHER_ADDR_LEN]; --} wl_ether_addr_t; --struct wl_ether_header --{ -- uint8_t ether_dhost[ETHER_ADDR_LEN]; -- uint8_t ether_shost[ETHER_ADDR_LEN]; -- uint16_t ether_type; --}; --typedef struct wl_action_frame --{ -- wl_ether_addr_t da; -- uint16_t len; -- uint32_t packetId; -- uint8_t data[ACTION_FRAME_SIZE]; --} wl_action_frame_t; -- --typedef struct wl_af_params --{ -- uint32_t channel; -- int32_t dwell_time; -- struct ether_addr BSSID; -- wl_action_frame_t action_frame; --} wl_af_params_t; -- --#define WL_WIFI_AF_PARAMS_SIZE sizeof(struct wl_af_params) -- --/* ether types */ --#define ETHER_TYPE_LEN 2 --#define ETHER_TYPE_MIN 0x0600 /* Anything less than MIN is a length */ --#define ETHER_TYPE_IP 0x0800 /* IP */ --#define ETHER_TYPE_ARP 0x0806 /* ARP */ --#define ETHER_TYPE_8021Q 0x8100 /* 802.1Q */ --#define ETHER_TYPE_802_1X 0x888e /* 802.1x */ --#define ETHER_TYPE_WAI 0x88b4 /* WAPI WAI */ --#define ETHER_TYPE_802_1X_PREAUTH 0x88c7 /* 802.1x preauthentication */ --#define WL_WIFI_ACTION_FRAME_SIZE sizeof(struct wl_action_frame) --#define BWL_DEFAULT_PACKING -- --#define RWL_ACTION_WIFI_CATEGORY 127 --#define RWL_WIFI_OUI_BYTE1 0x90 --#define RWL_WIFI_OUI_BYTE2 0x4C --#define RWL_WIFI_OUI_BYTE3 0x0F --#define RWL_WIFI_ACTION_FRAME_SIZE sizeof(struct dot11_action_wifi_vendor_specific) --#define RWL_WIFI_DEFAULT 0x00 --#define RWL_WIFI_FIND_MY_PEER 0x09 --#define RWL_WIFI_FOUND_PEER 0x0A --#define RWL_ACTION_WIFI_FRAG_TYPE 0x55 -- --typedef struct ssid_info --{ -- uint8_t ssid_len; -- uint8_t ssid[32]; --} ssid_info_t; --typedef struct cnt_rx --{ -- uint32_t cnt_rxundec; -- uint32_t cnt_rxframe; --} cnt_rx_t; --#define RWL_REF_MAC_ADDRESS_OFFSET 17 --#define RWL_DUT_MAC_ADDRESS_OFFSET 23 --#define RWL_WIFI_CLIENT_CHANNEL_OFFSET 50 --#define RWL_WIFI_SERVER_CHANNEL_OFFSET 51 --#define WL_BSS_INFO_VERSION 109 --#define MCSSET_LEN 16 -- --typedef struct wlc_ssid --{ -- uint32_t SSID_len; -- uint8_t SSID[32]; --} wlc_ssid_t; --#define WL_BSSTYPE_INFRA 1 --#define WL_BSSTYPE_INDEP 0 --#define WL_BSSTYPE_ANY 2 --#define WL_SCANFLAGS_PASSIVE 0x01 --#define WL_SCANFLAGS_PROHIBITED 0x04 --typedef struct wl_scan_params --{ -- wlc_ssid_t ssid; -- wl_ether_addr_t bssid; -- int8_t bss_type; -- int8_t scan_type; -- int32_t nprobes; -- int32_t active_time; -- int32_t passive_time; -- int32_t home_time; -- int32_t channel_num; -- uint16_t channel_list[1]; --} wl_scan_params_t; --#define WL_SCAN_PARAMS_FIXED_SIZE (64) --#define WL_SCAN_PARAMS_COUNT_MASK (0x0000ffff) --#define WL_SCAN_PARAMS_NSSID_SHIFT (16) --#define WL_SCAN_ACTION_START (1) --#define WL_SCAN_ACTION_CONTINUE (2) --#define WL_SCAN_ACTION_ABORT (3) --#define ISCAN_REQ_VERSION (1) --typedef struct wl_iscan_params --{ -- uint32_t version; -- uint16_t action; -- uint16_t scan_duration; -- wl_scan_params_t params; --} wl_iscan_params_t; --#define WL_ISCAN_PARAMS_FIXED_SIZE (offsetof(wl_iscan_params_t, params) + sizeof(wlc_ssid_t) ) --typedef struct wl_scan_results --{ -- uint32_t buflen; -- uint32_t version; -- uint32_t count; -- wl_bss_info_t bss_info[1]; --} wl_scan_results_t; --#define WL_SCAN_RESULTS_FIXED_SIZE (12) --#define WL_SCAN_RESULTS_SUCCESS (0) --#define WL_SCAN_RESULTS_PARTIAL (1) --#define WL_SCAN_RESULTS_PENDING (2) --#define WL_SCAN_RESULTS_ABORTED (3) --#define WL_SCAN_RESULTS_NO_MEM (4) --#define ESCAN_REQ_VERSION 1 --typedef struct wl_escan_params --{ -- uint32_t version; -- uint16_t action; -- uint16_t sync_id; -- wl_scan_params_t params; --} wl_escan_params_t; --#define WL_ESCAN_PARAMS_FIXED_SIZE (offsetof(wl_escan_params_t, params) + sizeof(wlc_ssid_t) ) --typedef struct wl_escan_result --{ -- uint32_t buflen; -- uint32_t version; -- uint16_t sync_id; -- uint16_t bss_count; -- wl_bss_info_t bss_info[1]; --} wl_escan_result_t; --#define WL_ESCAN_RESULTS_FIXED_SIZE (sizeof(wl_escan_result_t) - sizeof(wl_bss_info_t) ) --typedef struct wl_iscan_results --{ -- uint32_t status; -- wl_scan_results_t results; --} wl_iscan_results_t; --#define WL_ISCAN_RESULTS_FIXED_SIZE \ -- (WL_SCAN_RESULTS_FIXED_SIZE + offsetof(wl_iscan_results_t, results) ) --#define WL_MAXRATES_IN_SET 16 /* max # of rates in a rateset */ --typedef struct wl_rateset --{ -- uint32_t count; /* # rates in this set */ -- uint8_t rates[WL_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */ --} wl_rateset_t; -- --typedef struct wl_rateset_args --{ -- uint32_t count; /* # rates in this set */ -- uint8_t rates[WL_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */ -- uint8_t mcs[WL_MAXRATES_IN_SET]; /* supported mcs index bit map */ --} wl_rateset_args_t; -- --#define WL_RSPEC_RATE_MASK 0x000000FF /* rate or HT MCS value */ --#define WL_RSPEC_VHT_MCS_MASK 0x0000000F /* VHT MCS value */ --#define WL_RSPEC_VHT_NSS_MASK 0x000000F0 /* VHT Nss value */ --#define WL_RSPEC_VHT_NSS_SHIFT 4 /* VHT Nss value shift */ --#define WL_RSPEC_TXEXP_MASK 0x00000300 --#define WL_RSPEC_TXEXP_SHIFT 8 --#define WL_RSPEC_BW_MASK 0x00070000 /* bandwidth mask */ --#define WL_RSPEC_BW_SHIFT 16 /* bandwidth shift */ --#define WL_RSPEC_STBC 0x00100000 /* STBC encoding, Nsts = 2 x Nss */ --#define WL_RSPEC_TXBF 0x00200000 /* bit indicates TXBF mode */ --#define WL_RSPEC_LDPC 0x00400000 /* bit indicates adv coding in use */ --#define WL_RSPEC_SGI 0x00800000 /* Short GI mode */ --#define WL_RSPEC_ENCODING_MASK 0x03000000 /* Encoding of Rate/MCS field */ --#define WL_RSPEC_OVERRIDE_RATE 0x40000000 /* bit indicate to override mcs only */ --#define WL_RSPEC_OVERRIDE_MODE 0x80000000 /* bit indicates override both rate & mode */ --#define WL_RSPEC_BW_UNSPECIFIED 0 --#define WL_RSPEC_BW_20MHZ 0x00010000 --#define WL_RSPEC_BW_40MHZ 0x00020000 --#define WL_RSPEC_BW_80MHZ 0x00030000 --#define WL_RSPEC_BW_160MHZ 0x00040000 --#define WL_RSPEC_BW_10MHZ 0x00050000 --#define WL_RSPEC_BW_5MHZ 0x00060000 --#define WL_RSPEC_BW_2P5MHZ 0x00070000 --#define WL_RSPEC_ENCODE_RATE 0x00000000 /* Legacy rate is stored in RSPEC_RATE_MASK */ --#define WL_RSPEC_ENCODE_HT 0x01000000 /* HT MCS is stored in RSPEC_RATE_MASK */ --#define WL_RSPEC_ENCODE_VHT 0x02000000 /* VHT MCS and Nss is stored in RSPEC_RATE_MASK */ -- --typedef struct wl_uint32_list --{ -- uint32_t count; -- uint32_t element[1]; --} wl_uint32_list_t; -- --typedef struct wl_join_scan_params --{ -- uint8_t scan_type; /* 0 use default, active or passive scan */ -- int32_t nprobes; /* -1 use default, number of probes per channel */ -- int32_t active_time; /* -1 use default, dwell time per channel for -- * active scanning -- */ -- int32_t passive_time; /* -1 use default, dwell time per channel -- * for passive scanning -- */ -- int32_t home_time; /* -1 use default, dwell time for the home channel -- * between channel scans -- */ --} wl_join_scan_params_t; -- --#define NRATE_MCS_INUSE (0x00000080) --#define NRATE_RATE_MASK (0x0000007f) --#define NRATE_STF_MASK (0x0000ff00) --#define NRATE_STF_SHIFT (8) --#define NRATE_OVERRIDE (0x80000000) --#define NRATE_OVERRIDE_MCS_ONLY (0x40000000) --#define NRATE_SGI_MASK (0x00800000) --#define NRATE_SGI_SHIFT (23) --#define NRATE_LDPC_CODING (0x00400000) --#define NRATE_LDPC_SHIFT (22) --#define NRATE_BCMC_OVERRIDE (0x00200000) --#define NRATE_BCMC_SHIFT (21) --#define NRATE_STF_SISO (0) --#define NRATE_STF_CDD (1) --#define NRATE_STF_STBC (2) --#define NRATE_STF_SDM (3) --#define ANTENNA_NUM_1 (1) --#define ANTENNA_NUM_2 (2) --#define ANTENNA_NUM_3 (3) --#define ANTENNA_NUM_4 (4) --#define ANT_SELCFG_AUTO (0x80) --#define ANT_SELCFG_MASK (0x33) --#define ANT_SELCFG_MAX (4) --#define ANT_SELCFG_TX_UNICAST (0) --#define ANT_SELCFG_RX_UNICAST (1) --#define ANT_SELCFG_TX_DEF (2) --#define ANT_SELCFG_RX_DEF (3) --typedef struct --{ -- uint8_t ant_config[ANT_SELCFG_MAX]; -- uint8_t num_antcfg; --} wlc_antselcfg_t; --#define HIGHEST_SINGLE_STREAM_MCS (7) --#define WLC_CNTRY_BUF_SZ (4) --typedef struct wl_country --{ -- char country_abbrev[WLC_CNTRY_BUF_SZ]; -- int32_t rev; -- char ccode[WLC_CNTRY_BUF_SZ]; --} wl_country_t; --typedef struct wl_channels_in_country --{ -- uint32_t buflen; -- uint32_t band; -- int8_t country_abbrev[WLC_CNTRY_BUF_SZ]; -- uint32_t count; -- uint32_t channel[1]; --} wl_channels_in_country_t; --typedef struct wl_country_list --{ -- uint32_t buflen; -- uint32_t band_set; -- uint32_t band; -- uint32_t count; -- int8_t country_abbrev[1]; --} wl_country_list_t; --#define WL_NUM_RPI_BINS 8 --#define WL_RM_TYPE_BASIC 1 --#define WL_RM_TYPE_CCA 2 --#define WL_RM_TYPE_RPI 3 --#define WL_RM_FLAG_PARALLEL (1 << 0) --#define WL_RM_FLAG_LATE (1 << 1) --#define WL_RM_FLAG_INCAPABLE (1 << 2) --#define WL_RM_FLAG_REFUSED (1 << 3) --typedef struct wl_rm_req_elt --{ -- int8_t type; -- int8_t flags; -- wl_chanspec_t chanspec; -- uint32_t token; -- uint32_t tsf_h; -- uint32_t tsf_l; -- uint32_t dur; --} wl_rm_req_elt_t; --typedef struct wl_rm_req --{ -- uint32_t token; -- uint32_t count; -- void *cb; -- void *cb_arg; -- wl_rm_req_elt_t req[1]; --} wl_rm_req_t; --#define WL_RM_REQ_FIXED_LEN offsetof(wl_rm_req_t, req) --typedef struct wl_rm_rep_elt --{ -- int8_t type; -- int8_t flags; -- wl_chanspec_t chanspec; -- uint32_t token; -- uint32_t tsf_h; -- uint32_t tsf_l; -- uint32_t dur; -- uint32_t len; -- uint8_t data[1]; --} wl_rm_rep_elt_t; --#define WL_RM_REP_ELT_FIXED_LEN 24 --#define WL_RPI_REP_BIN_NUM 8 --typedef struct wl_rm_rpi_rep --{ -- uint8_t rpi[WL_RPI_REP_BIN_NUM]; -- int8_t rpi_max[WL_RPI_REP_BIN_NUM]; --} wl_rm_rpi_rep_t; --typedef struct wl_rm_rep --{ -- uint32_t token; -- uint32_t len; -- wl_rm_rep_elt_t rep[1]; --} wl_rm_rep_t; --#define WL_RM_REP_FIXED_LEN 8 --#define CRYPTO_ALGO_OFF 0 --#define CRYPTO_ALGO_WEP1 1 --#define CRYPTO_ALGO_TKIP 2 --#define CRYPTO_ALGO_WEP128 3 --#define CRYPTO_ALGO_AES_CCM 4 --#define CRYPTO_ALGO_AES_OCB_MSDU 5 --#define CRYPTO_ALGO_AES_OCB_MPDU 6 --#define CRYPTO_ALGO_NALG 7 --#define WSEC_GEN_MIC_ERROR 0x0001 --#define WSEC_GEN_REPLAY 0x0002 --#define WSEC_GEN_ICV_ERROR 0x0004 --#define WL_SOFT_KEY (1 << 0) --#define WL_PRIMARY_KEY (1 << 1) --#define WL_KF_RES_4 (1 << 4) --#define WL_KF_RES_5 (1 << 5) --#define WL_IBSS_PEER_GROUP_KEY (1 << 6) --#define DOT11_MAX_KEY_SIZE 32 --typedef struct wl_wsec_key --{ -- uint32_t index; -- uint32_t len; -- uint8_t data[DOT11_MAX_KEY_SIZE]; -- uint32_t pad_1[18]; -- uint32_t algo; -- uint32_t flags; -- uint32_t pad_2[2]; -- int32_t pad_3; -- int32_t iv_initialized; -- int32_t pad_4; -- struct -- { -- uint32_t hi; -- uint16_t lo; -- } rxiv; -- uint32_t pad_5[2]; -- wl_ether_addr_t ea; --} wl_wsec_key_t; --#define WSEC_MIN_PSK_LEN 8 --#define WSEC_MAX_PSK_LEN 64 --#define WSEC_PASSPHRASE (1 << 0) --typedef struct --{ -- uint16_t key_len; -- uint16_t flags; -- uint8_t key[WSEC_MAX_PSK_LEN]; --} wsec_pmk_t; -- --#define WSEC_MAX_SAE_PASSWORD_LEN 128 --typedef struct --{ -- uint16_t password_len; /* octets in key materials */ -- uint8_t password[WSEC_MAX_SAE_PASSWORD_LEN]; /* maximum key len for SAE passphrase */ --} wsec_sae_password_t; -- --#define OPEN_AUTH 0x0000 --#define SHARED_AUTH 0x0001 --//#define WEP_ENABLED 0x0001 // moved to whd_types.h --//#define TKIP_ENABLED 0x0002 --//#define AES_ENABLED 0x0004 -- --typedef enum --{ -- AUTH_ALGO_80211_OPEN = 1, AUTH_ALGO_80211_SHARED_KEY = 2, AUTH_ALGO_WPA = 3, AUTH_ALGO_WPA_PSK = 4, -- AUTH_ALGO_WPA_NONE = 5, AUTH_ALGO_RSNA = 6, AUTH_ALGO_RSNA_PSK = 7, --} AUTH_ALGORITHM; -- --#define WSEC_SWFLAG 0x0008 --#define CKIP_KP_ENABLED 0x0010 --#define CKIP_MIC_ENABLED 0x0020 --#define SES_OW_ENABLED 0x0040 --#define FIPS_ENABLED 0x0080 --#define SMS4_ENABLED 0x0100 -- --#define MFP_NONE 0x0000 --#define MFP_CAPABLE 0x0200 --#define MFP_REQUIRED 0x0400 --#define MFP_SHA256 0x0800 /* a special configuration for STA for WIFI test tool */ -- --#define WPA_AUTH_DISABLED 0x0000 --#define WPA_AUTH_NONE 0x0001 --#define WPA_AUTH_UNSPECIFIED 0x0002 --#define WPA_AUTH_PSK 0x0004 --#define WPA_AUTH_CCKM 0x0008 --#define WPA2_AUTH_CCKM 0x0010 --#define WPA2_AUTH_UNSPECIFIED 0x0040 --#define WPA2_AUTH_PSK 0x0080 --#define BRCM_AUTH_PSK 0x0100 --#define BRCM_AUTH_DPT 0x0200 --#define WPA_AUTH_WAPI 0x0400 --#define WPA2_AUTH_MFP 0x1000 /* MFP (11w) in contrast to CCX */ -- --#define WPA2_AUTH_1X_SHA256 0x1000 /* 1X with SHA256 key derivation */ --#define WPA2_AUTH_TPK 0x2000 /* TDLS Peer Key */ --#define WPA2_AUTH_FT 0x4000 /* Fast Transition. */ --#define WPA2_AUTH_PSK_SHA256 0x8000 /* PSK with SHA256 key derivation */ --#define WPA2_AUTH_FILS_SHA256 0x10000 /* FILS with SHA256 key derivation */ --#define WPA2_AUTH_FILS_SHA384 0x20000 /* FILS with SHA384 key derivation */ --#define WPA2_AUTH_IS_FILS(auth) ( (auth) & (WPA2_AUTH_FILS_SHA256 | WPA2_AUTH_FILS_SHA384) ) --#define WPA3_AUTH_SAE_PSK 0x40000 /* SAE authentication with SHA-256 */ --#define WPA3_AUTH_SAE_FBT 0x80000 /* FT authentication over SAE */ --#define WPA3_AUTH_OWE 0x100000 /* OWE */ --#define WPA_AUTH_PFN_ANY 0xffffffff /* for PFN, match only ssid */ -- --#define MAXPMKID 16 --#define WPA2_PMKID_LEN 16 --typedef struct _pmkid --{ -- wl_ether_addr_t BSSID; -- uint8_t PMKID[WPA2_PMKID_LEN]; --} pmkid_t; --typedef struct _pmkid_list --{ -- uint32_t npmkid; -- pmkid_t pmkid[1]; --} pmkid_list_t; --typedef struct _pmkid_cand --{ -- wl_ether_addr_t BSSID; -- uint8_t preauth; --} pmkid_cand_t; --typedef struct _pmkid_cand_list --{ -- uint32_t npmkid_cand; -- pmkid_cand_t pmkid_cand[1]; --} pmkid_cand_list_t; --typedef struct wl_led_info --{ -- uint32_t index; -- uint32_t behavior; -- uint8_t activehi; --} wl_led_info_t; --struct wl_dot11_assoc_req --{ -- uint16_t capability; -- uint16_t listen; --}; --struct wl_dot11_assoc_resp --{ -- uint16_t capability; -- uint16_t status; -- uint16_t aid; --}; --typedef struct wl_assoc_info --{ -- uint32_t req_len; -- uint32_t resp_len; -- uint32_t flags; -- struct wl_dot11_assoc_req req; -- wl_ether_addr_t reassoc_bssid; -- struct wl_dot11_assoc_resp resp; --} wl_assoc_info_t; --#define WLC_ASSOC_REQ_IS_REASSOC 0x01 --typedef struct --{ -- uint32_t byteoff; -- uint32_t nbytes; -- uint16_t buf[1]; --} srom_rw_t; --typedef struct --{ -- uint32_t source; -- uint32_t byteoff; -- uint32_t nbytes; --} cis_rw_t; --#define WLC_CIS_DEFAULT 0 --#define WLC_CIS_SROM 1 --#define WLC_CIS_OTP 2 --typedef struct --{ -- uint32_t byteoff; -- uint32_t val; -- uint32_t size; -- uint32_t band; --} rw_reg_t; --#define WL_ATTEN_APP_INPUT_PCL_OFF 0 --#define WL_ATTEN_PCL_ON 1 --#define WL_ATTEN_PCL_OFF 2 --typedef struct --{ -- uint16_t auto_ctrl; -- uint16_t bb; -- uint16_t radio; -- uint16_t txctl1; --} atten_t; --struct wme_tx_params_s --{ -- uint8_t short_retry; -- uint8_t short_fallback; -- uint8_t long_retry; -- uint8_t long_fallback; -- uint16_t max_rate; --}; --typedef struct wme_tx_params_s wme_tx_params_t; --#define WL_WME_TX_PARAMS_IO_BYTES (sizeof(wme_tx_params_t) * AC_COUNT) --#define WL_PWRIDX_PCL_OFF -2 --#define WL_PWRIDX_PCL_ON -1 --#define WL_PWRIDX_LOWER_LIMIT -2 --#define WL_PWRIDX_UPPER_LIMIT 63 --typedef struct --{ -- uint32_t val; -- wl_ether_addr_t ea; --} scb_val_t; --#define BCM_MAC_STATUS_INDICATION (0x40010200L) --typedef struct --{ -- uint16_t ver; -- uint16_t len; -- uint16_t cap; -- uint32_t flags; -- uint32_t idle; -- wl_ether_addr_t ea; -- wl_rateset_t rateset; -- uint32_t in; -- uint32_t listen_interval_inms; -- uint32_t tx_pkts; -- uint32_t tx_failures; -- uint32_t rx_ucast_pkts; -- uint32_t rx_mcast_pkts; -- uint32_t tx_rate; -- uint32_t rx_rate; --} sta_info_t; --#define WL_OLD_STAINFO_SIZE offsetof(sta_info_t, tx_pkts) --#define WL_STA_VER 2 --#define WL_STA_BRCM 0x1 --#define WL_STA_WME 0x2 --#define WL_STA_ABCAP 0x4 --#define WL_STA_AUTHE 0x8 --#define WL_STA_ASSOC 0x10 --#define WL_STA_AUTHO 0x20 --#define WL_STA_WDS 0x40 --#define WL_STA_WDS_LINKUP 0x80 --#define WL_STA_PS 0x100 --#define WL_STA_APSD_BE 0x200 --#define WL_STA_APSD_BK 0x400 --#define WL_STA_APSD_VI 0x800 --#define WL_STA_APSD_VO 0x1000 --#define WL_STA_N_CAP 0x2000 --#define WL_STA_SCBSTATS 0x4000 --#define WL_WDS_LINKUP WL_STA_WDS_LINKUP --typedef struct channel_info --{ -- int32_t hw_channel; -- int32_t target_channel; -- int32_t scan_channel; --} channel_info_t; --struct mac_list --{ -- uint32_t count; -- wl_ether_addr_t ea[1]; --}; --typedef struct get_pktcnt --{ -- uint32_t rx_good_pkt; -- uint32_t rx_bad_pkt; -- uint32_t tx_good_pkt; -- uint32_t tx_bad_pkt; -- uint32_t rx_ocast_good_pkt; --} get_pktcnt_t; --typedef struct wl_ioctl --{ -- uint32_t cmd; -- void *buf; -- uint32_t len; -- uint8_t set; -- uint32_t used; -- uint32_t needed; --} wl_ioctl_t; --typedef struct wlc_rev_info --{ -- uint32_t vendorid; -- uint32_t deviceid; -- uint32_t radiorev; -- uint32_t chiprev; -- uint32_t corerev; -- uint32_t boardid; -- uint32_t boardvendor; -- uint32_t boardrev; -- uint32_t driverrev; -- uint32_t ucoderev; -- uint32_t bus; -- uint32_t chipnum; -- uint32_t phytype; -- uint32_t phyrev; -- uint32_t anarev; --} wlc_rev_info_t; --#define WL_REV_INFO_LEGACY_LENGTH 48 --#define WL_BRAND_MAX 10 --typedef struct wl_instance_info --{ -- uint32_t instance; -- int8_t brand[WL_BRAND_MAX]; --} wl_instance_info_t; --typedef struct wl_txfifo_sz --{ -- uint8_t fifo; -- uint8_t size; --} wl_txfifo_sz_t; --#define WLC_IOV_NAME_LEN 30 --typedef struct wlc_iov_trx_s --{ -- uint8_t module; -- uint8_t type; -- int8_t name[WLC_IOV_NAME_LEN]; --} wlc_iov_trx_t; -- --/* Event mask ext support */ --typedef enum event_msgs_ext_command --{ -- EVENTMSGS_NONE = 0, EVENTMSGS_SET_BIT = 1, EVENTMSGS_RESET_BIT = 2, EVENTMSGS_SET_MASK = 3 --} event_msgs_ext_command_t; -- --#define EVENTMSGS_VER 1 -- --/* len- for SET it would be mask size from the application to the firmware */ --/* for GET it would be actual firmware mask size */ --/* maxgetsize - is only used for GET. indicate max mask size that the */ --/* application can read from the firmware */ --typedef struct eventmsgs_ext --{ -- uint8_t ver; -- uint8_t command; -- uint8_t len; -- uint8_t maxgetsize; -- uint8_t mask[1]; --} eventmsgs_ext_t; -- --#define IOVAR_STR_ACTFRAME "actframe" --#define IOVAR_STR_BSS "bss" --#define IOVAR_STR_BSS_RATESET "bss_rateset" --#define IOVAR_STR_CSA "csa" --#define IOVAR_STR_AMPDU_TID "ampdu_tid" --#define IOVAR_STR_APSTA "apsta" --#define IOVAR_STR_ALLMULTI "allmulti" --#define IOVAR_STR_COUNTRY "country" --#define IOVAR_STR_EVENT_MSGS "event_msgs" --#define IOVAR_STR_EVENT_MSGS_EXT "event_msgs_ext" --#define IOVAR_STR_ESCAN "escan" --#define IOVAR_STR_SUP_WPA "sup_wpa" --#define IOVAR_STR_CUR_ETHERADDR "cur_etheraddr" --#define IOVAR_STR_QTXPOWER "qtxpower" --#define IOVAR_STR_MCAST_LIST "mcast_list" --#define IOVAR_STR_PM2_SLEEP_RET "pm2_sleep_ret" --#define IOVAR_STR_PM_LIMIT "pm_limit" --#define IOVAR_STR_LISTEN_INTERVAL_BEACON "bcn_li_bcn" --#define IOVAR_STR_LISTEN_INTERVAL_DTIM "bcn_li_dtim" --#define IOVAR_STR_LISTEN_INTERVAL_ASSOC "assoc_listen" --#define IOVAR_PSPOLL_PERIOD "pspoll_prd" --#define IOVAR_STR_VENDOR_IE "vndr_ie" --#define IOVAR_STR_TX_GLOM "bus:txglom" --#define IOVAR_STR_ACTION_FRAME "actframe" --#define IOVAR_STR_AC_PARAMS_STA "wme_ac_sta" --#define IOVAR_STR_COUNTERS "counters" --#define IOVAR_STR_PKT_FILTER_ADD "pkt_filter_add" --#define IOVAR_STR_PKT_FILTER_DELETE "pkt_filter_delete" --#define IOVAR_STR_PKT_FILTER_ENABLE "pkt_filter_enable" --#define IOVAR_STR_PKT_FILTER_MODE "pkt_filter_mode" --#define IOVAR_STR_PKT_FILTER_LIST "pkt_filter_list" --#define IOVAR_STR_PKT_FILTER_STATS "pkt_filter_stats" --#define IOVAR_STR_PKT_FILTER_CLEAR_STATS "pkt_filter_clear_stats" --#define IOVAR_STR_DUTY_CYCLE_CCK "dutycycle_cck" --#define IOVAR_STR_DUTY_CYCLE_OFDM "dutycycle_ofdm" --#define IOVAR_STR_MKEEP_ALIVE "mkeep_alive" --#define IOVAR_STR_VERSION "ver" --#define IOVAR_STR_SUP_WPA2_EAPVER "sup_wpa2_eapver" --#define IOVAR_STR_ROAM_OFF "roam_off" --#define IOVAR_STR_CLOSEDNET "closednet" --#define IOVAR_STR_P2P_DISC "p2p_disc" --#define IOVAR_STR_P2P_DEV "p2p_dev" --#define IOVAR_STR_P2P_IF "p2p_if" --#define IOVAR_STR_P2P_IFADD "p2p_ifadd" --#define IOVAR_STR_P2P_IFDEL "p2p_ifdel" --#define IOVAR_STR_P2P_IFUPD "p2p_ifupd" --#define IOVAR_STR_P2P_SCAN "p2p_scan" --#define IOVAR_STR_P2P_STATE "p2p_state" --#define IOVAR_STR_P2P_SSID "p2p_ssid" --#define IOVAR_STR_P2P_IP_ADDR "p2p_ip_addr" --#define IOVAR_STR_NRATE "nrate" --#define IOVAR_STR_BGRATE "bg_rate" --#define IOVAR_STR_ARATE "a_rate" --#define IOVAR_STR_NMODE "nmode" --#define IOVAR_STR_MAX_ASSOC "maxassoc" --#define IOVAR_STR_2G_MULTICAST_RATE "2g_mrate" --#define IOVAR_STR_2G_RATE "2g_rate" --#define IOVAR_STR_MPC "mpc" --#define IOVAR_STR_IBSS_JOIN "IBSS_join_only" --#define IOVAR_STR_AMPDU_BA_WINDOW_SIZE "ampdu_ba_wsize" --#define IOVAR_STR_AMPDU_MPDU "ampdu_mpdu" --#define IOVAR_STR_AMPDU_RX "ampdu_rx" --#define IOVAR_STR_AMPDU_RX_FACTOR "ampdu_rx_factor" --#define IOVAR_STR_AMPDU_HOST_REORDER "ampdu_hostreorder" --#define IOVAR_STR_MIMO_BW_CAP "mimo_bw_cap" --#define IOVAR_STR_RMC_ACKREQ "rmc_ackreq" --#define IOVAR_STR_RMC_STATUS "rmc_status" --#define IOVAR_STR_RMC_COUNTS "rmc_stats" --#define IOVAR_STR_RMC_ROLE "rmc_role" --#define IOVAR_STR_HT40_INTOLERANCE "intol40" --#define IOVAR_STR_RAND "rand" --#define IOVAR_STR_SSID "ssid" --#define IOVAR_STR_WSEC "wsec" --#define IOVAR_STR_WPA_AUTH "wpa_auth" --#define IOVAR_STR_INTERFACE_REMOVE "interface_remove" --#define IOVAR_STR_SUP_WPA_TMO "sup_wpa_tmo" --#define IOVAR_STR_JOIN "join" --#define IOVAR_STR_TLV "tlv" --#define IOVAR_STR_NPHY_ANTSEL "nphy_antsel" --#define IOVAR_STR_AVB_TIMESTAMP_ADDR "avb_timestamp_addr" --#define IOVAR_STR_BSS_MAX_ASSOC "bss_maxassoc" --#define IOVAR_STR_RM_REQ "rm_req" --#define IOVAR_STR_RM_REP "rm_rep" --#define IOVAR_STR_PSPRETEND_RETRY_LIMIT "pspretend_retry_limit" --#define IOVAR_STR_PSPRETEND_THRESHOLD "pspretend_threshold" --#define IOVAR_STR_SWDIV_TIMEOUT "swdiv_timeout" --#define IOVAR_STR_RESET_CNTS "reset_cnts" --#define IOVAR_STR_PHYRATE_LOG "phyrate_log" --#define IOVAR_STR_PHYRATE_LOG_SIZE "phyrate_log_size" --#define IOVAR_STR_PHYRATE_LOG_DUMP "phyrate_dump" --#define IOVAR_STR_SCAN_ASSOC_TIME "scan_assoc_time" --#define IOVAR_STR_SCAN_UNASSOC_TIME "scan_unassoc_time" --#define IOVAR_STR_SCAN_PASSIVE_TIME "scan_passive_time" --#define IOVAR_STR_SCAN_HOME_TIME "scan_home_time" --#define IOVAR_STR_SCAN_NPROBES "scan_nprobes" --#define IOVAR_STR_AUTOCOUNTRY "autocountry" --#define IOVAR_STR_CAP "cap" --#define IOVAR_STR_MPDU_PER_AMPDU "ampdu_mpdu" --#define IOVAR_STR_VHT_FEATURES "vht_features" --#define IOVAR_STR_CHANSPEC "chanspec" -- --#define IOVAR_STR_WOWL "wowl" --#define IOVAR_STR_WOWL_OS "wowl_os" --#define IOVAR_STR_WOWL_KEEP_ALIVE "wowl_keepalive" --#define IOVAR_STR_WOWL_PATTERN "wowl_pattern" --#define IOVAR_STR_WOWL_PATTERN_CLR "clr" --#define IOVAR_STR_WOWL_PATTERN_ADD "add" --#define IOVAR_STR_WOWL_ARP_HOST_IP "wowl_arp_hostip" --#define IOVAR_STR_ULP_WAIT "ulp_wait" --#define IOVAR_STR_ULP "ulp" -- --#define IOVAR_STR_PNO_ON "pfn" --#define IOVAR_STR_PNO_ADD "pfn_add" --#define IOVAR_STR_PNO_SET "pfn_set" --#define IOVAR_STR_PNO_CLEAR "pfnclear" --#define IOVAR_STR_SCAN_CACHE_CLEAR "scancache_clear" --#define MCS_SETLEN 16 -- --#define IOVAR_STR_RRM "rrm" --#define IOVAR_STR_RRM_NOISE_REQ "rrm_noise_req" --#define IOVAR_STR_RRM_NBR_REQ "rrm_nbr_req" --#define IOVAR_STR_RRM_LM_REQ "rrm_lm_req" --#define IOVAR_STR_RRM_STAT_REQ "rrm_stat_req" --#define IOVAR_STR_RRM_FRAME_REQ "rrm_frame_req" --#define IOVAR_STR_RRM_CHLOAD_REQ "rrm_chload_req" --#define IOVAR_STR_RRM_BCN_REQ "rrm_bcn_req" --#define IOVAR_STR_RRM_NBR_LIST "rrm_nbr_list" --#define IOVAR_STR_RRM_NBR_ADD "rrm_nbr_add_nbr" --#define IOVAR_STR_RRM_NBR_DEL "rrm_nbr_del_nbr" --#define IOVAR_STR_RRM_BCNREQ_THRTL_WIN "rrm_bcn_req_thrtl_win" --#define IOVAR_STR_RRM_BCNREQ_MAXOFF_TIME "rrm_bcn_req_max_off_chan_time" --#define IOVAR_STR_RRM_BCNREQ_TRFMS_PRD "rrm_bcn_req_traff_meas_per" -- --#define IOVAR_STR_WNM "wnm" --#define IOVAR_STR_BSSTRANS_QUERY "wnm_bsstrans_query" --#define IOVAR_STR_BSSTRANS_RESP "wnm_bsstrans_resp" -- --#define IOVAR_STR_MESH_ADD_ROUTE "mesh_add_route" --#define IOVAR_STR_MESH_DEL_ROUTE "mesh_del_route" --#define IOVAR_STR_MESH_FIND "mesh_find" --#define IOVAR_STR_MESH_FILTER "mesh_filter" --#define IOVAR_STR_MESH_PEER "mesh_peer" --#define IOVAR_STR_MESH_PEER_STATUS "mesh_peer_status" --#define IOVAR_STR_MESH_DELFILTER "mesh_delfilter" --#define IOVAR_STR_MESH_MAX_PEERS "mesh_max_peers" -- --#define IOVAR_STR_FBT_OVER_DS "fbtoverds" --#define IOVAR_STR_FBT_CAPABILITIES "fbt_cap" -- --#define IOVAR_STR_MFP "mfp" -- --#define IOVAR_STR_OTPRAW "otpraw" --#define IOVAR_NAN "nan" --#define IOVAR_STR_CLMLOAD "clmload" --#define IOVAR_STR_CLMLOAD_STATUS "clmload_status" --#define IOVAR_STR_CLMVER "clmver" --#define IOVAR_STR_MEMUSE "memuse" -- --#define IOVAR_STR_LDPC_CAP "ldpc_cap" --#define IOVAR_STR_LDPC_TX "ldpc_tx" --#define IOVAR_STR_SGI_RX "sgi_rx" --#define IOVAR_STR_SGI_TX "sgi_tx" -- --#define IOVAR_STR_APIVTW_OVERRIDE "brcmapivtwo" -- --#define IOVAR_STR_BWTE_BWTE_GCI_MASK "bwte_gci_mask" --#define IOVAR_STR_BWTE_GCI_SENDMSG "bwte_gci_sendm" --#define IOVAR_STR_WD_DISABLE "wd_disable" --#define IOVAR_STR_DLTRO "dltro" --#define IOVAR_STR_SAE_PASSWORD "sae_password" -- --#define IOVAR_STR_BTC_LESCAN_PARAMS "btc_lescan_params" -- --#define IOVAR_STR_ARP_VERSION "arp_version" --#define IOVAR_STR_ARP_PEERAGE "arp_peerage" --#define IOVAR_STR_ARPOE "arpoe" --#define IOVAR_STR_ARP_OL "arp_ol" --#define IOVAR_STR_ARP_TABLE_CLEAR "arp_table_clear" --#define IOVAR_STR_ARP_HOSTIP "arp_hostip" --#define IOVAR_STR_ARP_HOSTIP_CLEAR "arp_hostip_clear" --#define IOVAR_STR_ARP_STATS "arp_stats" --#define IOVAR_STR_ARP_STATS_CLEAR "arp_stats_clear" --#define IOVAR_STR_TKO "tko" -- --/* This value derived from the above strings, which appear maxed out in the 20s */ --#define IOVAR_NAME_STR_MAX_SIZE 32 -- --#define WLC_IOCTL_MAGIC (0x14e46c77) --#define WLC_IOCTL_VERSION (1) --#define WLC_IOCTL_SMLEN (256) --#define WLC_IOCTL_MEDLEN (1536) --#define WLC_IOCTL_MAXLEN (8192) -- --#define WLC_GET_MAGIC ( (uint32_t)0 ) --#define WLC_GET_VERSION ( (uint32_t)1 ) --#define WLC_UP ( (uint32_t)2 ) --#define WLC_DOWN ( (uint32_t)3 ) --#define WLC_GET_LOOP ( (uint32_t)4 ) --#define WLC_SET_LOOP ( (uint32_t)5 ) --#define WLC_DUMP ( (uint32_t)6 ) --#define WLC_GET_MSGLEVEL ( (uint32_t)7 ) --#define WLC_SET_MSGLEVEL ( (uint32_t)8 ) --#define WLC_GET_PROMISC ( (uint32_t)9 ) --#define WLC_SET_PROMISC ( (uint32_t)10 ) --#define WLC_GET_RATE ( (uint32_t)12 ) --#define WLC_GET_INSTANCE ( (uint32_t)14 ) --#define WLC_GET_INFRA ( (uint32_t)19 ) --#define WLC_SET_INFRA ( (uint32_t)20 ) --#define WLC_GET_AUTH ( (uint32_t)21 ) --#define WLC_SET_AUTH ( (uint32_t)22 ) --#define WLC_GET_BSSID ( (uint32_t)23 ) --#define WLC_SET_BSSID ( (uint32_t)24 ) --#define WLC_GET_SSID ( (uint32_t)25 ) --#define WLC_SET_SSID ( (uint32_t)26 ) --#define WLC_RESTART ( (uint32_t)27 ) --#define WLC_GET_CHANNEL ( (uint32_t)29 ) --#define WLC_SET_CHANNEL ( (uint32_t)30 ) --#define WLC_GET_SRL ( (uint32_t)31 ) --#define WLC_SET_SRL ( (uint32_t)32 ) --#define WLC_GET_LRL ( (uint32_t)33 ) --#define WLC_SET_LRL ( (uint32_t)34 ) --#define WLC_GET_PLCPHDR ( (uint32_t)35 ) --#define WLC_SET_PLCPHDR ( (uint32_t)36 ) --#define WLC_GET_RADIO ( (uint32_t)37 ) --#define WLC_SET_RADIO ( (uint32_t)38 ) --#define WLC_GET_PHYTYPE ( (uint32_t)39 ) --#define WLC_DUMP_RATE ( (uint32_t)40 ) --#define WLC_SET_RATE_PARAMS ( (uint32_t)41 ) --#define WLC_GET_KEY ( (uint32_t)44 ) --#define WLC_SET_KEY ( (uint32_t)45 ) --#define WLC_GET_REGULATORY ( (uint32_t)46 ) --#define WLC_SET_REGULATORY ( (uint32_t)47 ) --#define WLC_GET_PASSIVE_SCAN ( (uint32_t)48 ) --#define WLC_SET_PASSIVE_SCAN ( (uint32_t)49 ) --#define WLC_SCAN ( (uint32_t)50 ) --#define WLC_SCAN_RESULTS ( (uint32_t)51 ) --#define WLC_DISASSOC ( (uint32_t)52 ) --#define WLC_REASSOC ( (uint32_t)53 ) --#define WLC_GET_ROAM_TRIGGER ( (uint32_t)54 ) --#define WLC_SET_ROAM_TRIGGER ( (uint32_t)55 ) --#define WLC_GET_ROAM_DELTA ( (uint32_t)56 ) --#define WLC_SET_ROAM_DELTA ( (uint32_t)57 ) --#define WLC_GET_ROAM_SCAN_PERIOD ( (uint32_t)58 ) --#define WLC_SET_ROAM_SCAN_PERIOD ( (uint32_t)59 ) --#define WLC_EVM ( (uint32_t)60 ) --#define WLC_GET_TXANT ( (uint32_t)61 ) --#define WLC_SET_TXANT ( (uint32_t)62 ) --#define WLC_GET_ANTDIV ( (uint32_t)63 ) --#define WLC_SET_ANTDIV ( (uint32_t)64 ) --#define WLC_GET_CLOSED ( (uint32_t)67 ) --#define WLC_SET_CLOSED ( (uint32_t)68 ) --#define WLC_GET_MACLIST ( (uint32_t)69 ) --#define WLC_SET_MACLIST ( (uint32_t)70 ) --#define WLC_GET_RATESET ( (uint32_t)71 ) --#define WLC_SET_RATESET ( (uint32_t)72 ) --#define WLC_LONGTRAIN ( (uint32_t)74 ) --#define WLC_GET_BCNPRD ( (uint32_t)75 ) --#define WLC_SET_BCNPRD ( (uint32_t)76 ) --#define WLC_GET_DTIMPRD ( (uint32_t)77 ) --#define WLC_SET_DTIMPRD ( (uint32_t)78 ) --#define WLC_GET_SROM ( (uint32_t)79 ) --#define WLC_SET_SROM ( (uint32_t)80 ) --#define WLC_GET_WEP_RESTRICT ( (uint32_t)81 ) --#define WLC_SET_WEP_RESTRICT ( (uint32_t)82 ) --#define WLC_GET_COUNTRY ( (uint32_t)83 ) --#define WLC_SET_COUNTRY ( (uint32_t)84 ) --#define WLC_GET_PM ( (uint32_t)85 ) --#define WLC_SET_PM ( (uint32_t)86 ) --#define WLC_GET_WAKE ( (uint32_t)87 ) --#define WLC_SET_WAKE ( (uint32_t)88 ) --#define WLC_GET_FORCELINK ( (uint32_t)90 ) --#define WLC_SET_FORCELINK ( (uint32_t)91 ) --#define WLC_FREQ_ACCURACY ( (uint32_t)92 ) --#define WLC_CARRIER_SUPPRESS ( (uint32_t)93 ) --#define WLC_GET_PHYREG ( (uint32_t)94 ) --#define WLC_SET_PHYREG ( (uint32_t)95 ) --#define WLC_GET_RADIOREG ( (uint32_t)96 ) --#define WLC_SET_RADIOREG ( (uint32_t)97 ) --#define WLC_GET_REVINFO ( (uint32_t)98 ) --#define WLC_GET_UCANTDIV ( (uint32_t)99 ) --#define WLC_SET_UCANTDIV ( (uint32_t)100 ) --#define WLC_R_REG ( (uint32_t)101 ) --#define WLC_W_REG ( (uint32_t)102 ) --#define WLC_GET_MACMODE ( (uint32_t)105 ) --#define WLC_SET_MACMODE ( (uint32_t)106 ) --#define WLC_GET_MONITOR ( (uint32_t)107 ) --#define WLC_SET_MONITOR ( (uint32_t)108 ) --#define WLC_GET_GMODE ( (uint32_t)109 ) --#define WLC_SET_GMODE ( (uint32_t)110 ) --#define WLC_GET_LEGACY_ERP ( (uint32_t)111 ) --#define WLC_SET_LEGACY_ERP ( (uint32_t)112 ) --#define WLC_GET_RX_ANT ( (uint32_t)113 ) --#define WLC_GET_CURR_RATESET ( (uint32_t)114 ) --#define WLC_GET_SCANSUPPRESS ( (uint32_t)115 ) --#define WLC_SET_SCANSUPPRESS ( (uint32_t)116 ) --#define WLC_GET_AP ( (uint32_t)117 ) --#define WLC_SET_AP ( (uint32_t)118 ) --#define WLC_GET_EAP_RESTRICT ( (uint32_t)119 ) --#define WLC_SET_EAP_RESTRICT ( (uint32_t)120 ) --#define WLC_SCB_AUTHORIZE ( (uint32_t)121 ) --#define WLC_SCB_DEAUTHORIZE ( (uint32_t)122 ) --#define WLC_GET_WDSLIST ( (uint32_t)123 ) --#define WLC_SET_WDSLIST ( (uint32_t)124 ) --#define WLC_GET_ATIM ( (uint32_t)125 ) --#define WLC_SET_ATIM ( (uint32_t)126 ) --#define WLC_GET_RSSI ( (uint32_t)127 ) --#define WLC_GET_PHYANTDIV ( (uint32_t)128 ) --#define WLC_SET_PHYANTDIV ( (uint32_t)129 ) --#define WLC_AP_RX_ONLY ( (uint32_t)130 ) --#define WLC_GET_TX_PATH_PWR ( (uint32_t)131 ) --#define WLC_SET_TX_PATH_PWR ( (uint32_t)132 ) --#define WLC_GET_WSEC ( (uint32_t)133 ) --#define WLC_SET_WSEC ( (uint32_t)134 ) --#define WLC_GET_PHY_NOISE ( (uint32_t)135 ) --#define WLC_GET_BSS_INFO ( (uint32_t)136 ) --#define WLC_GET_PKTCNTS ( (uint32_t)137 ) --#define WLC_GET_LAZYWDS ( (uint32_t)138 ) --#define WLC_SET_LAZYWDS ( (uint32_t)139 ) --#define WLC_GET_BANDLIST ( (uint32_t)140 ) --#define WLC_GET_BAND ( (uint32_t)141 ) --#define WLC_SET_BAND ( (uint32_t)142 ) --#define WLC_SCB_DEAUTHENTICATE ( (uint32_t)143 ) --#define WLC_GET_SHORTSLOT ( (uint32_t)144 ) --#define WLC_GET_SHORTSLOT_OVERRIDE ( (uint32_t)145 ) --#define WLC_SET_SHORTSLOT_OVERRIDE ( (uint32_t)146 ) --#define WLC_GET_SHORTSLOT_RESTRICT ( (uint32_t)147 ) --#define WLC_SET_SHORTSLOT_RESTRICT ( (uint32_t)148 ) --#define WLC_GET_GMODE_PROTECTION ( (uint32_t)149 ) --#define WLC_GET_GMODE_PROTECTION_OVERRIDE ( (uint32_t)150 ) --#define WLC_SET_GMODE_PROTECTION_OVERRIDE ( (uint32_t)151 ) --#define WLC_UPGRADE ( (uint32_t)152 ) --#define WLC_GET_IGNORE_BCNS ( (uint32_t)155 ) --#define WLC_SET_IGNORE_BCNS ( (uint32_t)156 ) --#define WLC_GET_SCB_TIMEOUT ( (uint32_t)157 ) --#define WLC_SET_SCB_TIMEOUT ( (uint32_t)158 ) --#define WLC_GET_ASSOCLIST ( (uint32_t)159 ) --#define WLC_GET_CLK ( (uint32_t)160 ) --#define WLC_SET_CLK ( (uint32_t)161 ) --#define WLC_GET_UP ( (uint32_t)162 ) --#define WLC_OUT ( (uint32_t)163 ) --#define WLC_GET_WPA_AUTH ( (uint32_t)164 ) --#define WLC_SET_WPA_AUTH ( (uint32_t)165 ) --#define WLC_GET_UCFLAGS ( (uint32_t)166 ) --#define WLC_SET_UCFLAGS ( (uint32_t)167 ) --#define WLC_GET_PWRIDX ( (uint32_t)168 ) --#define WLC_SET_PWRIDX ( (uint32_t)169 ) --#define WLC_GET_TSSI ( (uint32_t)170 ) --#define WLC_GET_SUP_RATESET_OVERRIDE ( (uint32_t)171 ) --#define WLC_SET_SUP_RATESET_OVERRIDE ( (uint32_t)172 ) --#define WLC_GET_PROTECTION_CONTROL ( (uint32_t)178 ) --#define WLC_SET_PROTECTION_CONTROL ( (uint32_t)179 ) --#define WLC_GET_PHYLIST ( (uint32_t)180 ) --#define WLC_ENCRYPT_STRENGTH ( (uint32_t)181 ) --#define WLC_DECRYPT_STATUS ( (uint32_t)182 ) --#define WLC_GET_KEY_SEQ ( (uint32_t)183 ) --#define WLC_GET_SCAN_CHANNEL_TIME ( (uint32_t)184 ) --#define WLC_SET_SCAN_CHANNEL_TIME ( (uint32_t)185 ) --#define WLC_GET_SCAN_UNASSOC_TIME ( (uint32_t)186 ) --#define WLC_SET_SCAN_UNASSOC_TIME ( (uint32_t)187 ) --#define WLC_GET_SCAN_HOME_TIME ( (uint32_t)188 ) --#define WLC_SET_SCAN_HOME_TIME ( (uint32_t)189 ) --#define WLC_GET_SCAN_NPROBES ( (uint32_t)190 ) --#define WLC_SET_SCAN_NPROBES ( (uint32_t)191 ) --#define WLC_GET_PRB_RESP_TIMEOUT ( (uint32_t)192 ) --#define WLC_SET_PRB_RESP_TIMEOUT ( (uint32_t)193 ) --#define WLC_GET_ATTEN ( (uint32_t)194 ) --#define WLC_SET_ATTEN ( (uint32_t)195 ) --#define WLC_GET_SHMEM ( (uint32_t)196 ) --#define WLC_SET_SHMEM ( (uint32_t)197 ) --#define WLC_SET_WSEC_TEST ( (uint32_t)200 ) --#define WLC_SCB_DEAUTHENTICATE_FOR_REASON ( (uint32_t)201 ) --#define WLC_TKIP_COUNTERMEASURES ( (uint32_t)202 ) --#define WLC_GET_PIOMODE ( (uint32_t)203 ) --#define WLC_SET_PIOMODE ( (uint32_t)204 ) --#define WLC_SET_ASSOC_PREFER ( (uint32_t)205 ) --#define WLC_GET_ASSOC_PREFER ( (uint32_t)206 ) --#define WLC_SET_ROAM_PREFER ( (uint32_t)207 ) --#define WLC_GET_ROAM_PREFER ( (uint32_t)208 ) --#define WLC_SET_LED ( (uint32_t)209 ) --#define WLC_GET_LED ( (uint32_t)210 ) --#define WLC_GET_INTERFERENCE_MODE ( (uint32_t)211 ) --#define WLC_SET_INTERFERENCE_MODE ( (uint32_t)212 ) --#define WLC_GET_CHANNEL_QA ( (uint32_t)213 ) --#define WLC_START_CHANNEL_QA ( (uint32_t)214 ) --#define WLC_GET_CHANNEL_SEL ( (uint32_t)215 ) --#define WLC_START_CHANNEL_SEL ( (uint32_t)216 ) --#define WLC_GET_VALID_CHANNELS ( (uint32_t)217 ) --#define WLC_GET_FAKEFRAG ( (uint32_t)218 ) --#define WLC_SET_FAKEFRAG ( (uint32_t)219 ) --#define WLC_GET_PWROUT_PERCENTAGE ( (uint32_t)220 ) --#define WLC_SET_PWROUT_PERCENTAGE ( (uint32_t)221 ) --#define WLC_SET_BAD_FRAME_PREEMPT ( (uint32_t)222 ) --#define WLC_GET_BAD_FRAME_PREEMPT ( (uint32_t)223 ) --#define WLC_SET_LEAP_LIST ( (uint32_t)224 ) --#define WLC_GET_LEAP_LIST ( (uint32_t)225 ) --#define WLC_GET_CWMIN ( (uint32_t)226 ) --#define WLC_SET_CWMIN ( (uint32_t)227 ) --#define WLC_GET_CWMAX ( (uint32_t)228 ) --#define WLC_SET_CWMAX ( (uint32_t)229 ) --#define WLC_GET_WET ( (uint32_t)230 ) --#define WLC_SET_WET ( (uint32_t)231 ) --#define WLC_GET_PUB ( (uint32_t)232 ) --#define WLC_GET_KEY_PRIMARY ( (uint32_t)235 ) --#define WLC_SET_KEY_PRIMARY ( (uint32_t)236 ) --#define WLC_GET_ACI_ARGS ( (uint32_t)238 ) --#define WLC_SET_ACI_ARGS ( (uint32_t)239 ) --#define WLC_UNSET_CALLBACK ( (uint32_t)240 ) --#define WLC_SET_CALLBACK ( (uint32_t)241 ) --#define WLC_GET_RADAR ( (uint32_t)242 ) --#define WLC_SET_RADAR ( (uint32_t)243 ) --#define WLC_SET_SPECT_MANAGMENT ( (uint32_t)244 ) --#define WLC_GET_SPECT_MANAGMENT ( (uint32_t)245 ) --#define WLC_WDS_GET_REMOTE_HWADDR ( (uint32_t)246 ) --#define WLC_WDS_GET_WPA_SUP ( (uint32_t)247 ) --#define WLC_SET_CS_SCAN_TIMER ( (uint32_t)248 ) --#define WLC_GET_CS_SCAN_TIMER ( (uint32_t)249 ) --#define WLC_MEASURE_REQUEST ( (uint32_t)250 ) --#define WLC_INIT ( (uint32_t)251 ) --#define WLC_SEND_QUIET ( (uint32_t)252 ) --#define WLC_KEEPALIVE ( (uint32_t)253 ) --#define WLC_SEND_PWR_CONSTRAINT ( (uint32_t)254 ) --#define WLC_UPGRADE_STATUS ( (uint32_t)255 ) --#define WLC_CURRENT_PWR ( (uint32_t)256 ) --#define WLC_GET_SCAN_PASSIVE_TIME ( (uint32_t)257 ) --#define WLC_SET_SCAN_PASSIVE_TIME ( (uint32_t)258 ) --#define WLC_LEGACY_LINK_BEHAVIOR ( (uint32_t)259 ) --#define WLC_GET_CHANNELS_IN_COUNTRY ( (uint32_t)260 ) --#define WLC_GET_COUNTRY_LIST ( (uint32_t)261 ) --#define WLC_GET_VAR ( (uint32_t)262 ) --#define WLC_SET_VAR ( (uint32_t)263 ) --#define WLC_NVRAM_GET ( (uint32_t)264 ) --#define WLC_NVRAM_SET ( (uint32_t)265 ) --#define WLC_NVRAM_DUMP ( (uint32_t)266 ) --#define WLC_REBOOT ( (uint32_t)267 ) --#define WLC_SET_WSEC_PMK ( (uint32_t)268 ) --#define WLC_GET_AUTH_MODE ( (uint32_t)269 ) --#define WLC_SET_AUTH_MODE ( (uint32_t)270 ) --#define WLC_GET_WAKEENTRY ( (uint32_t)271 ) --#define WLC_SET_WAKEENTRY ( (uint32_t)272 ) --#define WLC_NDCONFIG_ITEM ( (uint32_t)273 ) --#define WLC_NVOTPW ( (uint32_t)274 ) --#define WLC_OTPW ( (uint32_t)275 ) --#define WLC_IOV_BLOCK_GET ( (uint32_t)276 ) --#define WLC_IOV_MODULES_GET ( (uint32_t)277 ) --#define WLC_SOFT_RESET ( (uint32_t)278 ) --#define WLC_GET_ALLOW_MODE ( (uint32_t)279 ) --#define WLC_SET_ALLOW_MODE ( (uint32_t)280 ) --#define WLC_GET_DESIRED_BSSID ( (uint32_t)281 ) --#define WLC_SET_DESIRED_BSSID ( (uint32_t)282 ) --#define WLC_DISASSOC_MYAP ( (uint32_t)283 ) --#define WLC_GET_NBANDS ( (uint32_t)284 ) --#define WLC_GET_BANDSTATES ( (uint32_t)285 ) --#define WLC_GET_WLC_BSS_INFO ( (uint32_t)286 ) --#define WLC_GET_ASSOC_INFO ( (uint32_t)287 ) --#define WLC_GET_OID_PHY ( (uint32_t)288 ) --#define WLC_SET_OID_PHY ( (uint32_t)289 ) --#define WLC_SET_ASSOC_TIME ( (uint32_t)290 ) --#define WLC_GET_DESIRED_SSID ( (uint32_t)291 ) --#define WLC_GET_CHANSPEC ( (uint32_t)292 ) --#define WLC_GET_ASSOC_STATE ( (uint32_t)293 ) --#define WLC_SET_PHY_STATE ( (uint32_t)294 ) --#define WLC_GET_SCAN_PENDING ( (uint32_t)295 ) --#define WLC_GET_SCANREQ_PENDING ( (uint32_t)296 ) --#define WLC_GET_PREV_ROAM_REASON ( (uint32_t)297 ) --#define WLC_SET_PREV_ROAM_REASON ( (uint32_t)298 ) --#define WLC_GET_BANDSTATES_PI ( (uint32_t)299 ) --#define WLC_GET_PHY_STATE ( (uint32_t)300 ) --#define WLC_GET_BSS_WPA_RSN ( (uint32_t)301 ) --#define WLC_GET_BSS_WPA2_RSN ( (uint32_t)302 ) --#define WLC_GET_BSS_BCN_TS ( (uint32_t)303 ) --#define WLC_GET_INT_DISASSOC ( (uint32_t)304 ) --#define WLC_SET_NUM_PEERS ( (uint32_t)305 ) --#define WLC_GET_NUM_BSS ( (uint32_t)306 ) --#define WLC_GET_WSEC_PMK ( (uint32_t)318 ) --#define WLC_GET_RANDOM_BYTES ( (uint32_t)319 ) --#define WLC_LAST ( (uint32_t)320 ) -- --#define EPICTRL_COOKIE 0xABADCEDE --#define CMN_IOCTL_OFF 0x180 --#define WL_OID_BASE 0xFFE41420 --#define OID_WL_GETINSTANCE (WL_OID_BASE + WLC_GET_INSTANCE) --#define OID_WL_GET_FORCELINK (WL_OID_BASE + WLC_GET_FORCELINK) --#define OID_WL_SET_FORCELINK (WL_OID_BASE + WLC_SET_FORCELINK) --#define OID_WL_ENCRYPT_STRENGTH (WL_OID_BASE + WLC_ENCRYPT_STRENGTH) --#define OID_WL_DECRYPT_STATUS (WL_OID_BASE + WLC_DECRYPT_STATUS) --#define OID_LEGACY_LINK_BEHAVIOR (WL_OID_BASE + WLC_LEGACY_LINK_BEHAVIOR) --#define OID_WL_NDCONFIG_ITEM (WL_OID_BASE + WLC_NDCONFIG_ITEM) --#define OID_STA_CHANSPEC (WL_OID_BASE + WLC_GET_CHANSPEC) --#define OID_STA_NBANDS (WL_OID_BASE + WLC_GET_NBANDS) --#define OID_STA_GET_PHY (WL_OID_BASE + WLC_GET_OID_PHY) --#define OID_STA_SET_PHY (WL_OID_BASE + WLC_SET_OID_PHY) --#define OID_STA_ASSOC_TIME (WL_OID_BASE + WLC_SET_ASSOC_TIME) --#define OID_STA_DESIRED_SSID (WL_OID_BASE + WLC_GET_DESIRED_SSID) --#define OID_STA_SET_PHY_STATE (WL_OID_BASE + WLC_SET_PHY_STATE) --#define OID_STA_SCAN_PENDING (WL_OID_BASE + WLC_GET_SCAN_PENDING) --#define OID_STA_SCANREQ_PENDING (WL_OID_BASE + WLC_GET_SCANREQ_PENDING) --#define OID_STA_GET_ROAM_REASON (WL_OID_BASE + WLC_GET_PREV_ROAM_REASON) --#define OID_STA_SET_ROAM_REASON (WL_OID_BASE + WLC_SET_PREV_ROAM_REASON) --#define OID_STA_GET_PHY_STATE (WL_OID_BASE + WLC_GET_PHY_STATE) --#define OID_STA_INT_DISASSOC (WL_OID_BASE + WLC_GET_INT_DISASSOC) --#define OID_STA_SET_NUM_PEERS (WL_OID_BASE + WLC_SET_NUM_PEERS) --#define OID_STA_GET_NUM_BSS (WL_OID_BASE + WLC_GET_NUM_BSS) --#define WL_DECRYPT_STATUS_SUCCESS 1 --#define WL_DECRYPT_STATUS_FAILURE 2 --#define WL_DECRYPT_STATUS_UNKNOWN 3 --#define WLC_UPGRADE_SUCCESS 0 --#define WLC_UPGRADE_PENDING 1 --typedef struct --{ -- int8_t *name; -- void *param; --} ndconfig_item_t; --typedef struct _wl_assoc_result --{ -- unsigned long associated; -- unsigned long NDIS_auth; -- unsigned long NDIS_infra; --} wl_assoc_result_t; --#define WL_RADIO_SW_DISABLE (1 << 0) --#define WL_RADIO_HW_DISABLE (1 << 1) --#define WL_RADIO_MPC_DISABLE (1 << 2) --#define WL_RADIO_COUNTRY_DISABLE (1 << 3) --#define WL_TXPWR_OVERRIDE (1U << 31) --#define WL_PHY_PAVARS_LEN (6) --#define WL_DIAG_INTERRUPT (1) --#define WL_DIAG_LOOPBACK (2) --#define WL_DIAG_MEMORY (3) --#define WL_DIAG_LED (4) --#define WL_DIAG_REG (5) --#define WL_DIAG_SROM (6) --#define WL_DIAG_DMA (7) --#define WL_DIAGERR_SUCCESS (0) --#define WL_DIAGERR_FAIL_TO_RUN (1) --#define WL_DIAGERR_NOT_SUPPORTED (2) --#define WL_DIAGERR_INTERRUPT_FAIL (3) --#define WL_DIAGERR_LOOPBACK_FAIL (4) --#define WL_DIAGERR_SROM_FAIL (5) --#define WL_DIAGERR_SROM_BADCRC (6) --#define WL_DIAGERR_REG_FAIL (7) --#define WL_DIAGERR_MEMORY_FAIL (8) --#define WL_DIAGERR_NOMEM (9) --#define WL_DIAGERR_DMA_FAIL (10) --#define WL_DIAGERR_MEMORY_TIMEOUT (11) --#define WL_DIAGERR_MEMORY_BADPATTERN (12) --#define WLC_BAND_AUTO (0) --#define WLC_BAND_5G (1) --#define WLC_BAND_2G (2) --#define WLC_BAND_ALL (3) --#define WL_CHAN_FREQ_RANGE_2G (0) --#define WL_CHAN_FREQ_RANGE_5GL (1) --#define WL_CHAN_FREQ_RANGE_5GM (2) --#define WL_CHAN_FREQ_RANGE_5GH (3) --#define WLC_PHY_TYPE_A (0) --#define WLC_PHY_TYPE_B (1) --#define WLC_PHY_TYPE_G (2) --#define WLC_PHY_TYPE_N (4) --#define WLC_PHY_TYPE_LP (5) --#define WLC_PHY_TYPE_SSN (6) --#define WLC_PHY_TYPE_NULL (0xf) --#define WLC_MACMODE_DISABLED (0) --#define WLC_MACMODE_DENY (1) --#define WLC_MACMODE_ALLOW (2) --#define GMODE_LEGACY_B (0) --#define GMODE_AUTO (1) --#define GMODE_ONLY (2) --#define GMODE_B_DEFERRED (3) --#define GMODE_PERFORMANCE (4) --#define GMODE_LRS (5) --#define GMODE_MAX (6) --#define WLC_PLCP_AUTO (-1) --#define WLC_PLCP_SHORT (0) --#define WLC_PLCP_LONG (1) --#define WLC_PROTECTION_AUTO (-1) --#define WLC_PROTECTION_OFF (0) --#define WLC_PROTECTION_ON (1) --#define WLC_PROTECTION_MMHDR_ONLY (2) --#define WLC_PROTECTION_CTS_ONLY (3) --#define WLC_PROTECTION_CTL_OFF (0) --#define WLC_PROTECTION_CTL_LOCAL (1) --#define WLC_PROTECTION_CTL_OVERLAP (2) --#define WLC_N_PROTECTION_OFF (0) --#define WLC_N_PROTECTION_OPTIONAL (1) --#define WLC_N_PROTECTION_20IN40 (2) --#define WLC_N_PROTECTION_MIXEDMODE (3) --#define WLC_N_PREAMBLE_MIXEDMODE (0) --#define WLC_N_PREAMBLE_GF (1) --#define WLC_N_BW_20ALL (0) --#define WLC_N_BW_40ALL (1) --#define WLC_N_BW_20IN2G_40IN5G (2) --#define WLC_N_TXRX_CHAIN0 (0) --#define WLC_N_TXRX_CHAIN1 (1) --#define WLC_N_SGI_20 (0x01) --#define WLC_N_SGI_40 (0x02) --#define PM_OFF (0) --#define PM_MAX (1) --#define PM_FAST (2) --#define PM_FORCE_OFF (3) --#define INTERFERE_NONE (0) --#define NON_WLAN (1) --#define WLAN_MANUAL (2) --#define WLAN_AUTO (3) --#define AUTO_ACTIVE (1 << 7) --typedef struct wl_aci_args --{ -- int32_t enter_aci_thresh; -- int32_t exit_aci_thresh; -- int32_t usec_spin; -- int32_t glitch_delay; -- uint16_t nphy_adcpwr_enter_thresh; -- uint16_t nphy_adcpwr_exit_thresh; -- uint16_t nphy_repeat_ctr; -- uint16_t nphy_num_samples; -- uint16_t nphy_undetect_window_sz; -- uint16_t nphy_b_energy_lo_aci; -- uint16_t nphy_b_energy_md_aci; -- uint16_t nphy_b_energy_hi_aci; --} wl_aci_args_t; --#define WL_ACI_ARGS_LEGACY_LENGTH 16 --typedef struct --{ -- int32_t npulses; -- int32_t ncontig; -- int32_t min_pw; -- int32_t max_pw; -- uint16_t thresh0; -- uint16_t thresh1; -- uint16_t blank; -- uint16_t fmdemodcfg; -- int32_t npulses_lp; -- int32_t min_pw_lp; -- int32_t max_pw_lp; -- int32_t min_fm_lp; -- int32_t max_deltat_lp; -- int32_t min_deltat; -- int32_t max_deltat; -- uint16_t autocorr; -- uint16_t st_level_time; -- uint16_t t2_min; -- uint32_t version; --} wl_radar_args_t; --#define WL_RADAR_ARGS_VERSION 1 --#define WL_RADAR_DETECTOR_OFF 0 --#define WL_RADAR_DETECTOR_ON 1 --#define WL_RADAR_SIMULATED 2 --#define WL_RSSI_ANT_VERSION 1 --#define WL_RSSI_ANT_MAX 4 --typedef struct --{ -- uint32_t version; -- uint32_t count; -- int8_t rssi_ant[WL_RSSI_ANT_MAX]; --} wl_rssi_ant_t; --#define WL_DFS_CACSTATE_IDLE 0 --#define WL_DFS_CACSTATE_PREISM_CAC 1 --#define WL_DFS_CACSTATE_ISM 2 --#define WL_DFS_CACSTATE_CSA 3 --#define WL_DFS_CACSTATE_POSTISM_CAC 4 --#define WL_DFS_CACSTATE_PREISM_OOC 5 --#define WL_DFS_CACSTATE_POSTISM_OOC 6 --#define WL_DFS_CACSTATES 7 --typedef struct --{ -- uint32_t state; -- uint32_t duration; -- wl_chanspec_t chanspec_cleared; -- uint16_t pad; --} wl_dfs_status_t; --#define NUM_PWRCTRL_RATES 12 --typedef struct --{ -- uint8_t txpwr_band_max[NUM_PWRCTRL_RATES]; -- uint8_t txpwr_limit[NUM_PWRCTRL_RATES]; -- uint8_t txpwr_local_max; -- uint8_t txpwr_local_constraint; -- uint8_t txpwr_chan_reg_max; -- uint8_t txpwr_target[2][NUM_PWRCTRL_RATES]; -- uint8_t txpwr_est_Pout[2]; -- uint8_t txpwr_opo[NUM_PWRCTRL_RATES]; -- uint8_t txpwr_bphy_cck_max[NUM_PWRCTRL_RATES]; -- uint8_t txpwr_bphy_ofdm_max; -- uint8_t txpwr_aphy_max[NUM_PWRCTRL_RATES]; -- int8_t txpwr_antgain[2]; -- uint8_t txpwr_est_Pout_gofdm; --} tx_power_legacy_t; --#define WL_TX_POWER_RATES 45 --#define WL_TX_POWER_CCK_FIRST 0 --#define WL_TX_POWER_CCK_NUM 4 --#define WL_TX_POWER_OFDM_FIRST 4 --#define WL_TX_POWER_OFDM_NUM 8 --#define WL_TX_POWER_MCS_SISO_NUM 8 --#define WL_TX_POWER_MCS20_FIRST 12 --#define WL_TX_POWER_MCS20_NUM 16 --#define WL_TX_POWER_MCS40_FIRST 28 --#define WL_TX_POWER_MCS40_NUM 17 --#define WL_TX_POWER_MCS20SISO_NUM 8 --#define WL_TX_POWER_MCS40_LAST 44 --#define WL_TX_POWER_F_ENABLED 1 --#define WL_TX_POWER_F_HW 2 --#define WL_TX_POWER_F_MIMO 4 --#define WL_TX_POWER_F_SISO 8 --#define WL_TX_POWER_F_40M_CAP 16 -- --#define MAX_QTX_POWER 32 --typedef struct --{ -- uint32_t flags; -- wl_chanspec_t chanspec; -- wl_chanspec_t local_chanspec; -- uint8_t local_max; -- uint8_t local_constraint; -- int8_t antgain[2]; -- uint8_t rf_cores; -- uint8_t est_Pout[4]; -- uint8_t est_Pout_cck; -- uint8_t user_limit[WL_TX_POWER_RATES]; -- uint8_t reg_limit[WL_TX_POWER_RATES]; -- uint8_t board_limit[WL_TX_POWER_RATES]; -- uint8_t target[WL_TX_POWER_RATES]; --} tx_power_t; --typedef struct tx_inst_power --{ -- uint8_t txpwr_est_Pout[2]; -- uint8_t txpwr_est_Pout_gofdm; --} tx_inst_power_t; --#define WLC_MEASURE_TPC 1 --#define WLC_MEASURE_CHANNEL_BASIC 2 --#define WLC_MEASURE_CHANNEL_CCA 3 --#define WLC_MEASURE_CHANNEL_RPI 4 --#define SPECT_MNGMT_OFF 0 --#define SPECT_MNGMT_LOOSE_11H 1 --#define SPECT_MNGMT_STRICT_11H 2 --#define SPECT_MNGMT_STRICT_11D 3 --#define SPECT_MNGMT_LOOSE_11H_D 4 --#define WL_CHAN_VALID_HW (1 << 0) --#define WL_CHAN_VALID_SW (1 << 1) --#define WL_CHAN_BAND_5G (1 << 2) --#define WL_CHAN_RADAR (1 << 3) --#define WL_CHAN_INACTIVE (1 << 4) --#define WL_CHAN_PASSIVE (1 << 5) --#define WL_CHAN_RESTRICTED (1 << 6) --#define WL_BTC_DISABLE 0 --#define WL_BTC_ENABLE (1 << 0) --#define WL_BTC_PREMPT (1 << 1) --#define WL_BTC_PARTIAL (1 << 2) --#define WL_BTC_DEFAULT (1 << 3) --#define WL_BTC_HYBRID (WL_BTC_ENABLE | WL_BTC_PARTIAL) --#define WL_INF_BTC_DISABLE 0 --#define WL_INF_BTC_ENABLE 1 --#define WL_INF_BTC_AUTO 3 --#define WL_BTC_DEFWIRE 0 --#define WL_BTC_2WIRE 2 --#define WL_BTC_3WIRE 3 --#define WL_BTC_4WIRE 4 --#define WL_BTC_FLAG_PREMPT (1 << 0) --#define WL_BTC_FLAG_BT_DEF (1 << 1) --#define WL_BTC_FLAG_ACTIVE_PROT (1 << 2) --#define WL_BTC_FLAG_SIM_RSP (1 << 3) --#define WL_BTC_FLAG_PS_PROTECT (1 << 4) --#define WL_BTC_FLAG_SIM_TX_LP (1 << 5) --#define WL_BTC_FLAG_ECI (1 << 6) --#define WL_ERROR_VAL 0x00000001 --#define WL_TRACE_VAL 0x00000002 --#define WL_PRHDRS_VAL 0x00000004 --#define WL_PRPKT_VAL 0x00000008 --#define WL_INFORM_VAL 0x00000010 --#define WL_TMP_VAL 0x00000020 --#define WL_OID_VAL 0x00000040 --#define WL_RATE_VAL 0x00000080 --#define WL_ASSOC_VAL 0x00000100 --#define WL_PRUSR_VAL 0x00000200 --#define WL_PS_VAL 0x00000400 --#define WL_TXPWR_VAL 0x00000800 --#define WL_PORT_VAL 0x00001000 --#define WL_DUAL_VAL 0x00002000 --#define WL_WSEC_VAL 0x00004000 --#define WL_WSEC_DUMP_VAL 0x00008000 --#define WL_LOG_VAL 0x00010000 --#define WL_NRSSI_VAL 0x00020000 --#define WL_LOFT_VAL 0x00040000 --#define WL_REGULATORY_VAL 0x00080000 --#define WL_PHYCAL_VAL 0x00100000 --#define WL_RADAR_VAL 0x00200000 --#define WL_MPC_VAL 0x00400000 --#define WL_APSTA_VAL 0x00800000 --#define WL_DFS_VAL 0x01000000 --#define WL_BA_VAL 0x02000000 --#define WL_NITRO_VAL 0x04000000 --#define WL_MBSS_VAL 0x04000000 --#define WL_CAC_VAL 0x08000000 --#define WL_AMSDU_VAL 0x10000000 --#define WL_AMPDU_VAL 0x20000000 --#define WL_FFPLD_VAL 0x40000000 --#define WL_NIN_VAL 0x80000000 --#define WL_DPT_VAL 0x00000001 --#define WL_SCAN_VAL 0x00000002 --#define WL_WOWL_VAL 0x00000004 --#define WL_COEX_VAL 0x00000008 --#define WL_RTDC_VAL 0x00000010 --#define WL_BTA_VAL 0x00000040 --#define WL_LED_NUMGPIO 16 --#define WL_LED_OFF 0 --#define WL_LED_ON 1 --#define WL_LED_ACTIVITY 2 --#define WL_LED_RADIO 3 --#define WL_LED_ARADIO 4 --#define WL_LED_BRADIO 5 --#define WL_LED_BGMODE 6 --#define WL_LED_WI1 7 --#define WL_LED_WI2 8 --#define WL_LED_WI3 9 --#define WL_LED_ASSOC 10 --#define WL_LED_INACTIVE 11 --#define WL_LED_ASSOCACT 12 --#define WL_LED_NUMBEHAVIOR 13 --#define WL_LED_BEH_MASK 0x7f --#define WL_LED_AL_MASK 0x80 --#define WL_NUMCHANNELS 64 --#define WL_NUMCHANSPECS 100 --#define WL_WDS_WPA_ROLE_AUTH 0 --#define WL_WDS_WPA_ROLE_SUP 1 --#define WL_WDS_WPA_ROLE_AUTO 255 --#define WL_EVENTING_MASK_LEN ( (WLC_E_LAST + 7) / 8 ) -- --#define VNDR_IE_CMD_LEN 4 --#define VNDR_IE_BEACON_FLAG 0x1 --#define VNDR_IE_PRBRSP_FLAG 0x2 --#define VNDR_IE_ASSOCRSP_FLAG 0x4 --#define VNDR_IE_AUTHRSP_FLAG 0x8 --#define VNDR_IE_PRBREQ_FLAG 0x10 --#define VNDR_IE_ASSOCREQ_FLAG 0x20 --#define VNDR_IE_CUSTOM_FLAG 0x100 --#define VNDR_IE_INFO_HDR_LEN (sizeof(uint32_t) ) --struct wl_vndr_ie --{ -- uint8_t id; -- uint8_t len; -- uint8_t oui[3]; -- uint8_t data[1]; --}; --typedef struct wl_vndr_ie wl_vndr_ie_t; --typedef struct --{ -- uint32_t pktflag; -- wl_vndr_ie_t vndr_ie_data; --} vndr_ie_info_t; --typedef struct --{ -- int32_t iecount; -- vndr_ie_info_t vndr_ie_list[1]; --} vndr_ie_buf_t; --typedef struct --{ -- int8_t cmd[VNDR_IE_CMD_LEN]; -- vndr_ie_buf_t vndr_ie_buffer; --} vndr_ie_setbuf_t; --#define WL_JOIN_PREF_RSSI 1 --#define WL_JOIN_PREF_WPA 2 --#define WL_JOIN_PREF_BAND 3 --#define WLJP_BAND_ASSOC_PREF 255 --#define WL_WPA_ACP_MCS_ANY "\x00\x00\x00\x00" --struct tsinfo_arg --{ -- uint8_t octets[3]; --}; --#define NFIFO 6 --#define WL_CNT_T_VERSION 6 --#define WL_CNT_EXT_T_VERSION 1 --#define WL_PHYRATE_LOG_SIZE 1200 -- --typedef struct --{ -- uint16_t version; /* see definition of WL_CNT_T_VERSION */ -- uint16_t length; /* length of entire structure */ -- -- /* transmit stat counters */ -- uint32_t txframe; /* tx data frames */ -- uint32_t txbyte; /* tx data bytes */ -- uint32_t txretrans; /* tx mac retransmits */ -- uint32_t txerror; /* tx data errors (derived: sum of others) */ -- uint32_t txctl; /* tx management frames */ -- uint32_t txprshort; /* tx short preamble frames */ -- uint32_t txserr; /* tx status errors */ -- uint32_t txnobuf; /* tx out of buffers errors */ -- uint32_t txnoassoc; /* tx discard because we're not associated */ -- uint32_t txrunt; /* tx runt frames */ -- uint32_t txchit; /* tx header cache hit (fastpath) */ -- uint32_t txcmiss; /* tx header cache miss (slowpath) */ -- -- /* transmit chip error counters */ -- uint32_t txuflo; /* tx fifo underflows */ -- uint32_t txphyerr; /* tx phy errors (indicated in tx status) */ -- uint32_t txphycrs; /* PR8861/8963 counter */ -- -- /* receive stat counters */ -- uint32_t rxframe; /* rx data frames */ -- uint32_t rxbyte; /* rx data bytes */ -- uint32_t rxerror; /* rx data errors (derived: sum of others) */ -- uint32_t rxctl; /* rx management frames */ -- uint32_t rxnobuf; /* rx out of buffers errors */ -- uint32_t rxnondata; /* rx non data frames in the data channel errors */ -- uint32_t rxbadds; /* rx bad DS errors */ -- uint32_t rxbadcm; /* rx bad control or management frames */ -- uint32_t rxfragerr; /* rx fragmentation errors */ -- uint32_t rxrunt; /* rx runt frames */ -- uint32_t rxgiant; /* rx giant frames */ -- uint32_t rxnoscb; /* rx no scb error */ -- uint32_t rxbadproto; /* rx invalid frames */ -- uint32_t rxbadsrcmac; /* rx frames with Invalid Src Mac */ -- uint32_t rxbadda; /* rx frames tossed for invalid da */ -- uint32_t rxfilter; /* rx frames filtered out */ -- -- /* receive chip error counters */ -- uint32_t rxoflo; /* rx fifo overflow errors */ -- uint32_t rxuflo[NFIFO]; /* rx dma descriptor underflow errors */ -- -- uint32_t d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */ -- uint32_t d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */ -- uint32_t d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */ -- -- /* misc counters */ -- uint32_t dmade; /* tx/rx dma descriptor errors */ -- uint32_t dmada; /* tx/rx dma data errors */ -- uint32_t dmape; /* tx/rx dma descriptor protocol errors */ -- uint32_t reset; /* reset count */ -- uint32_t tbtt; /* cnts the TBTT int's */ -- uint32_t txdmawar; /* # occurrences of PR15420 workaround */ -- uint32_t pkt_callback_reg_fail; /* callbacks register failure */ -- -- /* MAC counters: 32-bit version of d11.h's macstat_t */ -- uint32_t txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS, -- * Control Management (includes retransmissions) -- */ -- uint32_t txrtsfrm; /* number of RTS sent out by the MAC */ -- uint32_t txctsfrm; /* number of CTS sent out by the MAC */ -- uint32_t txackfrm; /* number of ACK frames sent out */ -- uint32_t txdnlfrm; /* Not used */ -- uint32_t txbcnfrm; /* beacons transmitted */ -- uint32_t txfunfl[8]; /* per-fifo tx underflows */ -- uint32_t txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS -- * or BCN) -- */ -- uint32_t txphyerror; /* Transmit phy error, type of error is reported in tx-status for -- * driver enqueued frames -- */ -- uint32_t rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */ -- uint32_t rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */ -- uint32_t rxinvmachdr; /* Either the protocol version != 0 or frame type not -- * data/control/management -- */ -- uint32_t rxbadfcs; /* number of frames for which the CRC check failed in the MAC */ -- uint32_t rxbadplcp; /* parity check of the PLCP header failed */ -- uint32_t rxcrsglitch; /* PHY was able to correlate the preamble but not the header */ -- uint32_t rxstrt; /* Number of received frames with a good PLCP -- * (i.e. passing parity check) -- */ -- uint32_t rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */ -- uint32_t rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */ -- uint32_t rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */ -- uint32_t rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */ -- uint32_t rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */ -- uint32_t rxackucast; /* number of ucast ACKS received (good FCS) */ -- uint32_t rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */ -- uint32_t rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */ -- uint32_t rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */ -- uint32_t rxrtsocast; /* number of received RTS not addressed to the MAC */ -- uint32_t rxctsocast; /* number of received CTS not addressed to the MAC */ -- uint32_t rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */ -- uint32_t rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */ -- uint32_t rxcfrmmcast; /* number of RX Control multicast frames received by the MAC -- * (unlikely to see these) -- */ -- uint32_t rxbeaconmbss; /* beacons received from member of BSS */ -- uint32_t rxdfrmucastobss; /* number of unicast frames addressed to the MAC from -- * other BSS (WDS FRAME) -- */ -- uint32_t rxbeaconobss; /* beacons received from other BSS */ -- uint32_t rxrsptmout; /* Number of response timeouts for transmitted frames -- * expecting a response -- */ -- uint32_t bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */ -- uint32_t rxf0ovfl; /* Number of receive fifo 0 overflows */ -- uint32_t rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */ -- uint32_t rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */ -- uint32_t txsfovfl; /* Number of transmit status fifo overflows (obsolete) */ -- uint32_t pmqovfl; /* Number of PMQ overflows */ -- uint32_t rxcgprqfrm; /* Number of received Probe requests that made it into -- * the PRQ fifo -- */ -- uint32_t rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */ -- uint32_t txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did -- * not get ACK -- */ -- uint32_t txcgprssuc; /* Tx Probe Response Success (ACK was received) */ -- uint32_t prs_timeout; /* Number of probe requests that were dropped from the PRQ -- * fifo because a probe response could not be sent out within -- * the time limit defined in M_PRS_MAXTIME -- */ -- uint32_t rxnack; /* XXX Number of NACKS received (Afterburner) */ -- uint32_t frmscons; /* XXX Number of frames completed without transmission because of an -- * Afterburner re-queue -- */ -- uint32_t txnack; /* XXX Number of NACKs transmitted (Afterburner) */ -- uint32_t txglitch_nack; /* obsolete */ -- uint32_t txburst; /* obsolete */ -- -- /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */ -- uint32_t txfrag; /* dot11TransmittedFragmentCount */ -- uint32_t txmulti; /* dot11MulticastTransmittedFrameCount */ -- uint32_t txfail; /* dot11FailedCount */ -- uint32_t txretry; /* dot11RetryCount */ -- uint32_t txretrie; /* dot11MultipleRetryCount */ -- uint32_t rxdup; /* dot11FrameduplicateCount */ -- uint32_t txrts; /* dot11RTSSuccessCount */ -- uint32_t txnocts; /* dot11RTSFailureCount */ -- uint32_t txnoack; /* dot11ACKFailureCount */ -- uint32_t rxfrag; /* dot11ReceivedFragmentCount */ -- uint32_t rxmulti; /* dot11MulticastReceivedFrameCount */ -- uint32_t rxcrc; /* dot11FCSErrorCount */ -- uint32_t txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */ -- uint32_t rxundec; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay; /* TKIPReplays */ -- uint32_t ccmpfmterr; /* CCMPFormatErrors */ -- uint32_t ccmpreplay; /* CCMPReplays */ -- uint32_t ccmpundec; /* CCMPDecryptErrors */ -- uint32_t fourwayfail; /* FourWayHandshakeFailures */ -- uint32_t wepundec; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess; /* DecryptSuccessCount */ -- uint32_t tkipicverr; /* TKIPICVErrorCount */ -- uint32_t wepexcluded; /* dot11WEPExcludedCount */ -- -- uint32_t rxundec_mcst; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill_mcst; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay_mcst; /* TKIPReplays */ -- uint32_t ccmpfmterr_mcst; /* CCMPFormatErrors */ -- uint32_t ccmpreplay_mcst; /* CCMPReplays */ -- uint32_t ccmpundec_mcst; /* CCMPDecryptErrors */ -- uint32_t fourwayfail_mcst; /* FourWayHandshakeFailures */ -- uint32_t wepundec_mcst; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr_mcst; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess_mcst; /* DecryptSuccessCount */ -- uint32_t tkipicverr_mcst; /* TKIPICVErrorCount */ -- uint32_t wepexcluded_mcst; /* dot11WEPExcludedCount */ -- -- uint32_t txchanrej; /* Tx frames suppressed due to channel rejection */ -- uint32_t txexptime; /* Tx frames suppressed due to timer expiration */ -- uint32_t psmwds; /* Count PSM watchdogs */ -- uint32_t phywatchdog; /* Count Phy watchdogs (triggered by ucode) */ -- -- /* MBSS counters, AP only */ -- uint32_t prq_entries_handled; /* PRQ entries read in */ -- uint32_t prq_undirected_entries; /* which were bcast bss & ssid */ -- uint32_t prq_bad_entries; /* which could not be translated to info */ -- uint32_t atim_suppress_count; /* TX suppressions on ATIM fifo */ -- uint32_t bcn_template_not_ready; /* Template marked in use on send bcn ... */ -- uint32_t bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */ -- uint32_t late_tbtt_dpc; /* TBTT DPC did not happen in time */ -- -- /* per-rate receive stat counters */ -- uint32_t rx1mbps; /* packets rx at 1Mbps */ -- uint32_t rx2mbps; /* packets rx at 2Mbps */ -- uint32_t rx5mbps5; /* packets rx at 5.5Mbps */ -- uint32_t rx6mbps; /* packets rx at 6Mbps */ -- uint32_t rx9mbps; /* packets rx at 9Mbps */ -- uint32_t rx11mbps; /* packets rx at 11Mbps */ -- uint32_t rx12mbps; /* packets rx at 12Mbps */ -- uint32_t rx18mbps; /* packets rx at 18Mbps */ -- uint32_t rx24mbps; /* packets rx at 24Mbps */ -- uint32_t rx36mbps; /* packets rx at 36Mbps */ -- uint32_t rx48mbps; /* packets rx at 48Mbps */ -- uint32_t rx54mbps; /* packets rx at 54Mbps */ -- uint32_t rx108mbps; /* packets rx at 108mbps */ -- uint32_t rx162mbps; /* packets rx at 162mbps */ -- uint32_t rx216mbps; /* packets rx at 216 mbps */ -- uint32_t rx270mbps; /* packets rx at 270 mbps */ -- uint32_t rx324mbps; /* packets rx at 324 mbps */ -- uint32_t rx378mbps; /* packets rx at 378 mbps */ -- uint32_t rx432mbps; /* packets rx at 432 mbps */ -- uint32_t rx486mbps; /* packets rx at 486 mbps */ -- uint32_t rx540mbps; /* packets rx at 540 mbps */ -- -- /* pkteng rx frame stats */ -- uint32_t pktengrxducast; /* unicast frames rxed by the pkteng code */ -- uint32_t pktengrxdmcast; /* multicast frames rxed by the pkteng code */ -- -- uint32_t rfdisable; /* count of radio disables */ -- uint32_t bphy_rxcrsglitch; /* PHY count of bphy glitches */ -- -- uint32_t txmpdu_sgi; /* count for sgi transmit */ -- uint32_t rxmpdu_sgi; /* count for sgi received */ -- uint32_t txmpdu_stbc; /* count for stbc transmit */ -- uint32_t rxmpdu_stbc; /* count for stbc received */ --} wl_cnt_ver_six_t; -- --typedef struct --{ -- uint16_t version; /* see definition of WL_CNT_T_VERSION */ -- uint16_t length; /* length of entire structure */ -- -- /* transmit stat counters */ -- uint32_t txframe; /* tx data frames */ -- uint32_t txbyte; /* tx data bytes */ -- uint32_t txretrans; /* tx mac retransmits */ -- uint32_t txerror; /* tx data errors (derived: sum of others) */ -- uint32_t txctl; /* tx management frames */ -- uint32_t txprshort; /* tx short preamble frames */ -- uint32_t txserr; /* tx status errors */ -- uint32_t txnobuf; /* tx out of buffers errors */ -- uint32_t txnoassoc; /* tx discard because we're not associated */ -- uint32_t txrunt; /* tx runt frames */ -- uint32_t txchit; /* tx header cache hit (fastpath) */ -- uint32_t txcmiss; /* tx header cache miss (slowpath) */ -- -- /* transmit chip error counters */ -- uint32_t txuflo; /* tx fifo underflows */ -- uint32_t txphyerr; /* tx phy errors (indicated in tx status) */ -- uint32_t txphycrs; /* PR8861/8963 counter */ -- -- /* receive stat counters */ -- uint32_t rxframe; /* rx data frames */ -- uint32_t rxbyte; /* rx data bytes */ -- uint32_t rxerror; /* rx data errors (derived: sum of others) */ -- uint32_t rxctl; /* rx management frames */ -- uint32_t rxnobuf; /* rx out of buffers errors */ -- uint32_t rxnondata; /* rx non data frames in the data channel errors */ -- uint32_t rxbadds; /* rx bad DS errors */ -- uint32_t rxbadcm; /* rx bad control or management frames */ -- uint32_t rxfragerr; /* rx fragmentation errors */ -- uint32_t rxrunt; /* rx runt frames */ -- uint32_t rxgiant; /* rx giant frames */ -- uint32_t rxnoscb; /* rx no scb error */ -- uint32_t rxbadproto; /* rx invalid frames */ -- uint32_t rxbadsrcmac; /* rx frames with Invalid Src Mac */ -- uint32_t rxbadda; /* rx frames tossed for invalid da */ -- uint32_t rxfilter; /* rx frames filtered out */ -- -- /* receive chip error counters */ -- uint32_t rxoflo; /* rx fifo overflow errors */ -- uint32_t rxuflo[NFIFO]; /* rx dma descriptor underflow errors */ -- -- uint32_t d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */ -- uint32_t d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */ -- uint32_t d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */ -- -- /* misc counters */ -- uint32_t dmade; /* tx/rx dma descriptor errors */ -- uint32_t dmada; /* tx/rx dma data errors */ -- uint32_t dmape; /* tx/rx dma descriptor protocol errors */ -- uint32_t reset; /* reset count */ -- uint32_t tbtt; /* cnts the TBTT int's */ -- uint32_t txdmawar; /* # occurrences of PR15420 workaround */ -- uint32_t pkt_callback_reg_fail; /* callbacks register failure */ -- -- /* MAC counters: 32-bit version of d11.h's macstat_t */ -- uint32_t txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS, -- * Control Management (includes retransmissions) -- */ -- uint32_t txrtsfrm; /* number of RTS sent out by the MAC */ -- uint32_t txctsfrm; /* number of CTS sent out by the MAC */ -- uint32_t txackfrm; /* number of ACK frames sent out */ -- uint32_t txdnlfrm; /* Not used */ -- uint32_t txbcnfrm; /* beacons transmitted */ -- uint32_t txfunfl[8]; /* per-fifo tx underflows */ -- uint32_t txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS -- * or BCN) -- */ -- uint32_t txphyerror; /* Transmit phy error, type of error is reported in tx-status for -- * driver enqueued frames -- */ -- uint32_t rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */ -- uint32_t rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */ -- uint32_t rxinvmachdr; /* Either the protocol version != 0 or frame type not -- * data/control/management -- */ -- uint32_t rxbadfcs; /* number of frames for which the CRC check failed in the MAC */ -- uint32_t rxbadplcp; /* parity check of the PLCP header failed */ -- uint32_t rxcrsglitch; /* PHY was able to correlate the preamble but not the header */ -- uint32_t rxstrt; /* Number of received frames with a good PLCP -- * (i.e. passing parity check) -- */ -- uint32_t rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */ -- uint32_t rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */ -- uint32_t rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */ -- uint32_t rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */ -- uint32_t rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */ -- uint32_t rxackucast; /* number of ucast ACKS received (good FCS) */ -- uint32_t rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */ -- uint32_t rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */ -- uint32_t rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */ -- uint32_t rxrtsocast; /* number of received RTS not addressed to the MAC */ -- uint32_t rxctsocast; /* number of received CTS not addressed to the MAC */ -- uint32_t rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */ -- uint32_t rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */ -- uint32_t rxcfrmmcast; /* number of RX Control multicast frames received by the MAC -- * (unlikely to see these) -- */ -- uint32_t rxbeaconmbss; /* beacons received from member of BSS */ -- uint32_t rxdfrmucastobss; /* number of unicast frames addressed to the MAC from -- * other BSS (WDS FRAME) -- */ -- uint32_t rxbeaconobss; /* beacons received from other BSS */ -- uint32_t rxrsptmout; /* Number of response timeouts for transmitted frames -- * expecting a response -- */ -- uint32_t bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */ -- uint32_t rxf0ovfl; /* Number of receive fifo 0 overflows */ -- uint32_t rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */ -- uint32_t rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */ -- uint32_t txsfovfl; /* Number of transmit status fifo overflows (obsolete) */ -- uint32_t pmqovfl; /* Number of PMQ overflows */ -- uint32_t rxcgprqfrm; /* Number of received Probe requests that made it into -- * the PRQ fifo -- */ -- uint32_t rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */ -- uint32_t txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did -- * not get ACK -- */ -- uint32_t txcgprssuc; /* Tx Probe Response Success (ACK was received) */ -- uint32_t prs_timeout; /* Number of probe requests that were dropped from the PRQ -- * fifo because a probe response could not be sent out within -- * the time limit defined in M_PRS_MAXTIME -- */ -- uint32_t rxnack; /* obsolete */ -- uint32_t frmscons; /* obsolete */ -- uint32_t txnack; /* obsolete */ -- uint32_t txglitch_nack; /* obsolete */ -- uint32_t txburst; /* obsolete */ -- -- /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */ -- uint32_t txfrag; /* dot11TransmittedFragmentCount */ -- uint32_t txmulti; /* dot11MulticastTransmittedFrameCount */ -- uint32_t txfail; /* dot11FailedCount */ -- uint32_t txretry; /* dot11RetryCount */ -- uint32_t txretrie; /* dot11MultipleRetryCount */ -- uint32_t rxdup; /* dot11FrameduplicateCount */ -- uint32_t txrts; /* dot11RTSSuccessCount */ -- uint32_t txnocts; /* dot11RTSFailureCount */ -- uint32_t txnoack; /* dot11ACKFailureCount */ -- uint32_t rxfrag; /* dot11ReceivedFragmentCount */ -- uint32_t rxmulti; /* dot11MulticastReceivedFrameCount */ -- uint32_t rxcrc; /* dot11FCSErrorCount */ -- uint32_t txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */ -- uint32_t rxundec; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay; /* TKIPReplays */ -- uint32_t ccmpfmterr; /* CCMPFormatErrors */ -- uint32_t ccmpreplay; /* CCMPReplays */ -- uint32_t ccmpundec; /* CCMPDecryptErrors */ -- uint32_t fourwayfail; /* FourWayHandshakeFailures */ -- uint32_t wepundec; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess; /* DecryptSuccessCount */ -- uint32_t tkipicverr; /* TKIPICVErrorCount */ -- uint32_t wepexcluded; /* dot11WEPExcludedCount */ -- -- uint32_t txchanrej; /* Tx frames suppressed due to channel rejection */ -- uint32_t psmwds; /* Count PSM watchdogs */ -- uint32_t phywatchdog; /* Count Phy watchdogs (triggered by ucode) */ -- -- /* MBSS counters, AP only */ -- uint32_t prq_entries_handled; /* PRQ entries read in */ -- uint32_t prq_undirected_entries; /* which were bcast bss & ssid */ -- uint32_t prq_bad_entries; /* which could not be translated to info */ -- uint32_t atim_suppress_count; /* TX suppressions on ATIM fifo */ -- uint32_t bcn_template_not_ready; /* Template marked in use on send bcn ... */ -- uint32_t bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */ -- uint32_t late_tbtt_dpc; /* TBTT DPC did not happen in time */ -- -- /* per-rate receive stat counters */ -- uint32_t rx1mbps; /* packets rx at 1Mbps */ -- uint32_t rx2mbps; /* packets rx at 2Mbps */ -- uint32_t rx5mbps5; /* packets rx at 5.5Mbps */ -- uint32_t rx6mbps; /* packets rx at 6Mbps */ -- uint32_t rx9mbps; /* packets rx at 9Mbps */ -- uint32_t rx11mbps; /* packets rx at 11Mbps */ -- uint32_t rx12mbps; /* packets rx at 12Mbps */ -- uint32_t rx18mbps; /* packets rx at 18Mbps */ -- uint32_t rx24mbps; /* packets rx at 24Mbps */ -- uint32_t rx36mbps; /* packets rx at 36Mbps */ -- uint32_t rx48mbps; /* packets rx at 48Mbps */ -- uint32_t rx54mbps; /* packets rx at 54Mbps */ -- uint32_t rx108mbps; /* packets rx at 108mbps */ -- uint32_t rx162mbps; /* packets rx at 162mbps */ -- uint32_t rx216mbps; /* packets rx at 216 mbps */ -- uint32_t rx270mbps; /* packets rx at 270 mbps */ -- uint32_t rx324mbps; /* packets rx at 324 mbps */ -- uint32_t rx378mbps; /* packets rx at 378 mbps */ -- uint32_t rx432mbps; /* packets rx at 432 mbps */ -- uint32_t rx486mbps; /* packets rx at 486 mbps */ -- uint32_t rx540mbps; /* packets rx at 540 mbps */ -- -- /* pkteng rx frame stats */ -- uint32_t pktengrxducast; /* unicast frames rxed by the pkteng code */ -- uint32_t pktengrxdmcast; /* multicast frames rxed by the pkteng code */ -- -- uint32_t rfdisable; /* count of radio disables */ -- uint32_t bphy_rxcrsglitch; /* PHY count of bphy glitches */ -- -- uint32_t txexptime; /* Tx frames suppressed due to timer expiration */ -- -- uint32_t txmpdu_sgi; /* count for sgi transmit */ -- uint32_t rxmpdu_sgi; /* count for sgi received */ -- uint32_t txmpdu_stbc; /* count for stbc transmit */ -- uint32_t rxmpdu_stbc; /* count for stbc received */ -- -- uint32_t rxundec_mcst; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill_mcst; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay_mcst; /* TKIPReplays */ -- uint32_t ccmpfmterr_mcst; /* CCMPFormatErrors */ -- uint32_t ccmpreplay_mcst; /* CCMPReplays */ -- uint32_t ccmpundec_mcst; /* CCMPDecryptErrors */ -- uint32_t fourwayfail_mcst; /* FourWayHandshakeFailures */ -- uint32_t wepundec_mcst; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr_mcst; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess_mcst; /* DecryptSuccessCount */ -- uint32_t tkipicverr_mcst; /* TKIPICVErrorCount */ -- uint32_t wepexcluded_mcst; /* dot11WEPExcludedCount */ -- -- uint32_t dma_hang; /* count for stbc received */ --} wl_cnt_ver_seven_t; -- --typedef struct --{ -- uint16_t version; /* see definition of WL_CNT_T_VERSION */ -- uint16_t length; /* length of entire structure */ -- -- /* transmit stat counters */ -- uint32_t txframe; /* tx data frames */ -- uint32_t txbyte; /* tx data bytes */ -- uint32_t txretrans; /* tx mac retransmits */ -- uint32_t txerror; /* tx data errors (derived: sum of others) */ -- uint32_t txctl; /* tx management frames */ -- uint32_t txprshort; /* tx short preamble frames */ -- uint32_t txserr; /* tx status errors */ -- uint32_t txnobuf; /* tx out of buffers errors */ -- uint32_t txnoassoc; /* tx discard because we're not associated */ -- uint32_t txrunt; /* tx runt frames */ -- uint32_t txchit; /* tx header cache hit (fastpath) */ -- uint32_t txcmiss; /* tx header cache miss (slowpath) */ -- -- /* transmit chip error counters */ -- uint32_t txuflo; /* tx fifo underflows */ -- uint32_t txphyerr; /* tx phy errors (indicated in tx status) */ -- uint32_t txphycrs; /* PR8861/8963 counter */ -- -- /* receive stat counters */ -- uint32_t rxframe; /* rx data frames */ -- uint32_t rxbyte; /* rx data bytes */ -- uint32_t rxerror; /* rx data errors (derived: sum of others) */ -- uint32_t rxctl; /* rx management frames */ -- uint32_t rxnobuf; /* rx out of buffers errors */ -- uint32_t rxnondata; /* rx non data frames in the data channel errors */ -- uint32_t rxbadds; /* rx bad DS errors */ -- uint32_t rxbadcm; /* rx bad control or management frames */ -- uint32_t rxfragerr; /* rx fragmentation errors */ -- uint32_t rxrunt; /* rx runt frames */ -- uint32_t rxgiant; /* rx giant frames */ -- uint32_t rxnoscb; /* rx no scb error */ -- uint32_t rxbadproto; /* rx invalid frames */ -- uint32_t rxbadsrcmac; /* rx frames with Invalid Src Mac */ -- uint32_t rxbadda; /* rx frames tossed for invalid da */ -- uint32_t rxfilter; /* rx frames filtered out */ -- -- /* receive chip error counters */ -- uint32_t rxoflo; /* rx fifo overflow errors */ -- uint32_t rxuflo[NFIFO]; /* rx dma descriptor underflow errors */ -- -- uint32_t d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */ -- uint32_t d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */ -- uint32_t d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */ -- -- /* misc counters */ -- uint32_t dmade; /* tx/rx dma descriptor errors */ -- uint32_t dmada; /* tx/rx dma data errors */ -- uint32_t dmape; /* tx/rx dma descriptor protocol errors */ -- uint32_t reset; /* reset count */ -- uint32_t tbtt; /* cnts the TBTT int's */ -- uint32_t txdmawar; /* # occurrences of PR15420 workaround */ -- uint32_t pkt_callback_reg_fail; /* callbacks register failure */ -- -- /* MAC counters: 32-bit version of d11.h's macstat_t */ -- uint32_t txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS, -- * Control Management (includes retransmissions) -- */ -- uint32_t txrtsfrm; /* number of RTS sent out by the MAC */ -- uint32_t txctsfrm; /* number of CTS sent out by the MAC */ -- uint32_t txackfrm; /* number of ACK frames sent out */ -- uint32_t txdnlfrm; /* Not used */ -- uint32_t txbcnfrm; /* beacons transmitted */ -- uint32_t txfunfl[6]; /* per-fifo tx underflows */ -- uint32_t rxtoolate; /* receive too late */ -- uint32_t txfbw; /* transmit at fallback bw (dynamic bw) */ -- uint32_t txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS -- * or BCN) -- */ -- uint32_t txphyerror; /* Transmit phy error, type of error is reported in tx-status for -- * driver enqueued frames -- */ -- uint32_t rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */ -- uint32_t rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */ -- uint32_t rxinvmachdr; /* Either the protocol version != 0 or frame type not -- * data/control/management -- */ -- uint32_t rxbadfcs; /* number of frames for which the CRC check failed in the MAC */ -- uint32_t rxbadplcp; /* parity check of the PLCP header failed */ -- uint32_t rxcrsglitch; /* PHY was able to correlate the preamble but not the header */ -- uint32_t rxstrt; /* Number of received frames with a good PLCP -- * (i.e. passing parity check) -- */ -- uint32_t rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */ -- uint32_t rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */ -- uint32_t rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */ -- uint32_t rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */ -- uint32_t rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */ -- uint32_t rxackucast; /* number of ucast ACKS received (good FCS) */ -- uint32_t rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */ -- uint32_t rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */ -- uint32_t rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */ -- uint32_t rxrtsocast; /* number of received RTS not addressed to the MAC */ -- uint32_t rxctsocast; /* number of received CTS not addressed to the MAC */ -- uint32_t rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */ -- uint32_t rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */ -- uint32_t rxcfrmmcast; /* number of RX Control multicast frames received by the MAC -- * (unlikely to see these) -- */ -- uint32_t rxbeaconmbss; /* beacons received from member of BSS */ -- uint32_t rxdfrmucastobss; /* number of unicast frames addressed to the MAC from -- * other BSS (WDS FRAME) -- */ -- uint32_t rxbeaconobss; /* beacons received from other BSS */ -- uint32_t rxrsptmout; /* Number of response timeouts for transmitted frames -- * expecting a response -- */ -- uint32_t bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */ -- uint32_t rxf0ovfl; /* Number of receive fifo 0 overflows */ -- uint32_t rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */ -- uint32_t rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */ -- uint32_t txsfovfl; /* Number of transmit status fifo overflows (obsolete) */ -- uint32_t pmqovfl; /* Number of PMQ overflows */ -- uint32_t rxcgprqfrm; /* Number of received Probe requests that made it into -- * the PRQ fifo -- */ -- uint32_t rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */ -- uint32_t txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did -- * not get ACK -- */ -- uint32_t txcgprssuc; /* Tx Probe Response Success (ACK was received) */ -- uint32_t prs_timeout; /* Number of probe requests that were dropped from the PRQ -- * fifo because a probe response could not be sent out within -- * the time limit defined in M_PRS_MAXTIME -- */ -- uint32_t rxnack; /* obsolete */ -- uint32_t frmscons; /* obsolete */ -- uint32_t txnack; /* obsolete */ -- uint32_t rxback; /* blockack rxcnt */ -- uint32_t txback; /* blockack txcnt */ -- -- /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */ -- uint32_t txfrag; /* dot11TransmittedFragmentCount */ -- uint32_t txmulti; /* dot11MulticastTransmittedFrameCount */ -- uint32_t txfail; /* dot11FailedCount */ -- uint32_t txretry; /* dot11RetryCount */ -- uint32_t txretrie; /* dot11MultipleRetryCount */ -- uint32_t rxdup; /* dot11FrameduplicateCount */ -- uint32_t txrts; /* dot11RTSSuccessCount */ -- uint32_t txnocts; /* dot11RTSFailureCount */ -- uint32_t txnoack; /* dot11ACKFailureCount */ -- uint32_t rxfrag; /* dot11ReceivedFragmentCount */ -- uint32_t rxmulti; /* dot11MulticastReceivedFrameCount */ -- uint32_t rxcrc; /* dot11FCSErrorCount */ -- uint32_t txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */ -- uint32_t rxundec; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay; /* TKIPReplays */ -- uint32_t ccmpfmterr; /* CCMPFormatErrors */ -- uint32_t ccmpreplay; /* CCMPReplays */ -- uint32_t ccmpundec; /* CCMPDecryptErrors */ -- uint32_t fourwayfail; /* FourWayHandshakeFailures */ -- uint32_t wepundec; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess; /* DecryptSuccessCount */ -- uint32_t tkipicverr; /* TKIPICVErrorCount */ -- uint32_t wepexcluded; /* dot11WEPExcludedCount */ -- -- uint32_t txchanrej; /* Tx frames suppressed due to channel rejection */ -- uint32_t psmwds; /* Count PSM watchdogs */ -- uint32_t phywatchdog; /* Count Phy watchdogs (triggered by ucode) */ -- -- /* MBSS counters, AP only */ -- uint32_t prq_entries_handled; /* PRQ entries read in */ -- uint32_t prq_undirected_entries; /* which were bcast bss & ssid */ -- uint32_t prq_bad_entries; /* which could not be translated to info */ -- uint32_t atim_suppress_count; /* TX suppressions on ATIM fifo */ -- uint32_t bcn_template_not_ready; /* Template marked in use on send bcn ... */ -- uint32_t bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */ -- uint32_t late_tbtt_dpc; /* TBTT DPC did not happen in time */ -- -- /* per-rate receive stat counters */ -- uint32_t rx1mbps; /* packets rx at 1Mbps */ -- uint32_t rx2mbps; /* packets rx at 2Mbps */ -- uint32_t rx5mbps5; /* packets rx at 5.5Mbps */ -- uint32_t rx6mbps; /* packets rx at 6Mbps */ -- uint32_t rx9mbps; /* packets rx at 9Mbps */ -- uint32_t rx11mbps; /* packets rx at 11Mbps */ -- uint32_t rx12mbps; /* packets rx at 12Mbps */ -- uint32_t rx18mbps; /* packets rx at 18Mbps */ -- uint32_t rx24mbps; /* packets rx at 24Mbps */ -- uint32_t rx36mbps; /* packets rx at 36Mbps */ -- uint32_t rx48mbps; /* packets rx at 48Mbps */ -- uint32_t rx54mbps; /* packets rx at 54Mbps */ -- uint32_t rx108mbps; /* packets rx at 108mbps */ -- uint32_t rx162mbps; /* packets rx at 162mbps */ -- uint32_t rx216mbps; /* packets rx at 216 mbps */ -- uint32_t rx270mbps; /* packets rx at 270 mbps */ -- uint32_t rx324mbps; /* packets rx at 324 mbps */ -- uint32_t rx378mbps; /* packets rx at 378 mbps */ -- uint32_t rx432mbps; /* packets rx at 432 mbps */ -- uint32_t rx486mbps; /* packets rx at 486 mbps */ -- uint32_t rx540mbps; /* packets rx at 540 mbps */ -- -- /* pkteng rx frame stats */ -- uint32_t pktengrxducast; /* unicast frames rxed by the pkteng code */ -- uint32_t pktengrxdmcast; /* multicast frames rxed by the pkteng code */ -- -- uint32_t rfdisable; /* count of radio disables */ -- uint32_t bphy_rxcrsglitch; /* PHY count of bphy glitches */ -- uint32_t bphy_badplcp; -- -- uint32_t txexptime; /* Tx frames suppressed due to timer expiration */ -- -- uint32_t txmpdu_sgi; /* count for sgi transmit */ -- uint32_t rxmpdu_sgi; /* count for sgi received */ -- uint32_t txmpdu_stbc; /* count for stbc transmit */ -- uint32_t rxmpdu_stbc; /* count for stbc received */ -- -- uint32_t rxundec_mcst; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill_mcst; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay_mcst; /* TKIPReplays */ -- uint32_t ccmpfmterr_mcst; /* CCMPFormatErrors */ -- uint32_t ccmpreplay_mcst; /* CCMPReplays */ -- uint32_t ccmpundec_mcst; /* CCMPDecryptErrors */ -- uint32_t fourwayfail_mcst; /* FourWayHandshakeFailures */ -- uint32_t wepundec_mcst; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr_mcst; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess_mcst; /* DecryptSuccessCount */ -- uint32_t tkipicverr_mcst; /* TKIPICVErrorCount */ -- uint32_t wepexcluded_mcst; /* dot11WEPExcludedCount */ -- -- uint32_t dma_hang; /* count for dma hang */ -- uint32_t reinit; /* count for reinit */ -- -- uint32_t pstatxucast; /* count of ucast frames xmitted on all psta assoc */ -- uint32_t pstatxnoassoc; /* count of txnoassoc frames xmitted on all psta assoc */ -- uint32_t pstarxucast; /* count of ucast frames received on all psta assoc */ -- uint32_t pstarxbcmc; /* count of bcmc frames received on all psta */ -- uint32_t pstatxbcmc; /* count of bcmc frames transmitted on all psta */ -- -- uint32_t cso_passthrough; /* hw cso required but passthrough */ -- uint32_t cso_normal; /* hw cso hdr for normal process */ -- uint32_t chained; /* number of frames chained */ -- uint32_t chainedsz1; /* number of chain size 1 frames */ -- uint32_t unchained; /* number of frames not chained */ -- uint32_t maxchainsz; /* max chain size so far */ -- uint32_t currchainsz; /* current chain size */ -- -- uint32_t rxdrop20s; /* drop secondary cnt */ -- --} wl_cnt_ver_eight_t; -- --/* per-rate receive stat counters subset of full counters */ --typedef struct --{ -- uint32_t rx1mbps; /* packets rx at 1Mbps */ -- uint32_t rx2mbps; /* packets rx at 2Mbps */ -- uint32_t rx5mbps5; /* packets rx at 5.5Mbps */ -- uint32_t rx6mbps; /* packets rx at 6Mbps */ -- uint32_t rx9mbps; /* packets rx at 9Mbps */ -- uint32_t rx11mbps; /* packets rx at 11Mbps */ -- uint32_t rx12mbps; /* packets rx at 12Mbps */ -- uint32_t rx18mbps; /* packets rx at 18Mbps */ -- uint32_t rx24mbps; /* packets rx at 24Mbps */ -- uint32_t rx36mbps; /* packets rx at 36Mbps */ -- uint32_t rx48mbps; /* packets rx at 48Mbps */ -- uint32_t rx54mbps; /* packets rx at 54Mbps */ -- uint32_t rx108mbps; /* packets rx at 108mbps */ -- uint32_t rx162mbps; /* packets rx at 162mbps */ -- uint32_t rx216mbps; /* packets rx at 216 mbps */ -- uint32_t rx270mbps; /* packets rx at 270 mbps */ --} whd_phyrate_counters_t; -- --typedef struct --{ -- uint32_t count; -- uint8_t log[WL_PHYRATE_LOG_SIZE]; --} whd_phyrate_log_t; -- --typedef struct --{ -- uint16_t version; /* see definition of WL_CNT_T_VERSION */ -- uint16_t length; /* length of entire structure */ -- -- /* transmit stat counters */ -- uint32_t txframe; /* tx data frames */ -- uint32_t txbyte; /* tx data bytes */ -- uint32_t txretrans; /* tx mac retransmits */ -- uint32_t txerror; /* tx data errors (derived: sum of others) */ -- uint32_t txctl; /* tx management frames */ -- uint32_t txprshort; /* tx short preamble frames */ -- uint32_t txserr; /* tx status errors */ -- uint32_t txnobuf; /* tx out of buffers errors */ -- uint32_t txnoassoc; /* tx discard because we're not associated */ -- uint32_t txrunt; /* tx runt frames */ -- uint32_t txchit; /* tx header cache hit (fastpath) */ -- uint32_t txcmiss; /* tx header cache miss (slowpath) */ -- -- /* transmit chip error counters */ -- uint32_t txuflo; /* tx fifo underflows */ -- uint32_t txphyerr; /* tx phy errors (indicated in tx status) */ -- uint32_t txphycrs; /* PR8861/8963 counter */ -- -- /* receive stat counters */ -- uint32_t rxframe; /* rx data frames */ -- uint32_t rxbyte; /* rx data bytes */ -- uint32_t rxerror; /* rx data errors (derived: sum of others) */ -- uint32_t rxctl; /* rx management frames */ -- uint32_t rxnobuf; /* rx out of buffers errors */ -- uint32_t rxnondata; /* rx non data frames in the data channel errors */ -- uint32_t rxbadds; /* rx bad DS errors */ -- uint32_t rxbadcm; /* rx bad control or management frames */ -- uint32_t rxfragerr; /* rx fragmentation errors */ -- uint32_t rxrunt; /* rx runt frames */ -- uint32_t rxgiant; /* rx giant frames */ -- uint32_t rxnoscb; /* rx no scb error */ -- uint32_t rxbadproto; /* rx invalid frames */ -- uint32_t rxbadsrcmac; /* rx frames with Invalid Src Mac */ -- uint32_t rxbadda; /* rx frames tossed for invalid da */ -- uint32_t rxfilter; /* rx frames filtered out */ -- -- /* receive chip error counters */ -- uint32_t rxoflo; /* rx fifo overflow errors */ -- uint32_t rxuflo[NFIFO]; /* rx dma descriptor underflow errors */ -- -- uint32_t d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */ -- uint32_t d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */ -- uint32_t d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */ -- -- /* misc counters */ -- uint32_t dmade; /* tx/rx dma descriptor errors */ -- uint32_t dmada; /* tx/rx dma data errors */ -- uint32_t dmape; /* tx/rx dma descriptor protocol errors */ -- uint32_t reset; /* reset count */ -- uint32_t tbtt; /* cnts the TBTT int's */ -- uint32_t txdmawar; /* # occurrences of PR15420 workaround */ -- uint32_t pkt_callback_reg_fail; /* callbacks register failure */ -- -- /* MAC counters: 32-bit version of d11.h's macstat_t */ -- uint32_t txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS, -- * Control Management (includes retransmissions) -- */ -- uint32_t txrtsfrm; /* number of RTS sent out by the MAC */ -- uint32_t txctsfrm; /* number of CTS sent out by the MAC */ -- uint32_t txackfrm; /* number of ACK frames sent out */ -- uint32_t txdnlfrm; /* Not used */ -- uint32_t txbcnfrm; /* beacons transmitted */ -- uint32_t txfunfl[6]; /* per-fifo tx underflows */ -- uint32_t rxtoolate; /* receive too late */ -- uint32_t txfbw; /* transmit at fallback bw (dynamic bw) */ -- uint32_t txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS -- * or BCN) -- */ -- uint32_t txphyerror; /* Transmit phy error, type of error is reported in tx-status for -- * driver enqueued frames -- */ -- uint32_t rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */ -- uint32_t rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */ -- uint32_t rxinvmachdr; /* Either the protocol version != 0 or frame type not -- * data/control/management -- */ -- uint32_t rxbadfcs; /* number of frames for which the CRC check failed in the MAC */ -- uint32_t rxbadplcp; /* parity check of the PLCP header failed */ -- uint32_t rxcrsglitch; /* PHY was able to correlate the preamble but not the header */ -- uint32_t rxstrt; /* Number of received frames with a good PLCP -- * (i.e. passing parity check) -- */ -- uint32_t rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */ -- uint32_t rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */ -- uint32_t rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */ -- uint32_t rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */ -- uint32_t rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */ -- uint32_t rxackucast; /* number of ucast ACKS received (good FCS) */ -- uint32_t rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */ -- uint32_t rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */ -- uint32_t rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */ -- uint32_t rxrtsocast; /* number of received RTS not addressed to the MAC */ -- uint32_t rxctsocast; /* number of received CTS not addressed to the MAC */ -- uint32_t rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */ -- uint32_t rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */ -- uint32_t rxcfrmmcast; /* number of RX Control multicast frames received by the MAC -- * (unlikely to see these) -- */ -- uint32_t rxbeaconmbss; /* beacons received from member of BSS */ -- uint32_t rxdfrmucastobss; /* number of unicast frames addressed to the MAC from -- * other BSS (WDS FRAME) -- */ -- uint32_t rxbeaconobss; /* beacons received from other BSS */ -- uint32_t rxrsptmout; /* Number of response timeouts for transmitted frames -- * expecting a response -- */ -- uint32_t bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */ -- uint32_t rxf0ovfl; /* Number of receive fifo 0 overflows */ -- uint32_t rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */ -- uint32_t rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */ -- uint32_t txsfovfl; /* Number of transmit status fifo overflows (obsolete) */ -- uint32_t pmqovfl; /* Number of PMQ overflows */ -- uint32_t rxcgprqfrm; /* Number of received Probe requests that made it into -- * the PRQ fifo -- */ -- uint32_t rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */ -- uint32_t txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did -- * not get ACK -- */ -- uint32_t txcgprssuc; /* Tx Probe Response Success (ACK was received) */ -- uint32_t prs_timeout; /* Number of probe requests that were dropped from the PRQ -- * fifo because a probe response could not be sent out within -- * the time limit defined in M_PRS_MAXTIME -- */ -- uint32_t rxnack; /* obsolete */ -- uint32_t frmscons; /* obsolete */ -- uint32_t txnack; /* obsolete */ -- uint32_t rxback; /* blockack rxcnt */ -- uint32_t txback; /* blockack txcnt */ -- -- /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */ -- uint32_t txfrag; /* dot11TransmittedFragmentCount */ -- uint32_t txmulti; /* dot11MulticastTransmittedFrameCount */ -- uint32_t txfail; /* dot11FailedCount */ -- uint32_t txretry; /* dot11RetryCount */ -- uint32_t txretrie; /* dot11MultipleRetryCount */ -- uint32_t rxdup; /* dot11FrameduplicateCount */ -- uint32_t txrts; /* dot11RTSSuccessCount */ -- uint32_t txnocts; /* dot11RTSFailureCount */ -- uint32_t txnoack; /* dot11ACKFailureCount */ -- uint32_t rxfrag; /* dot11ReceivedFragmentCount */ -- uint32_t rxmulti; /* dot11MulticastReceivedFrameCount */ -- uint32_t rxcrc; /* dot11FCSErrorCount */ -- uint32_t txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */ -- uint32_t rxundec; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay; /* TKIPReplays */ -- uint32_t ccmpfmterr; /* CCMPFormatErrors */ -- uint32_t ccmpreplay; /* CCMPReplays */ -- uint32_t ccmpundec; /* CCMPDecryptErrors */ -- uint32_t fourwayfail; /* FourWayHandshakeFailures */ -- uint32_t wepundec; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess; /* DecryptSuccessCount */ -- uint32_t tkipicverr; /* TKIPICVErrorCount */ -- uint32_t wepexcluded; /* dot11WEPExcludedCount */ -- -- uint32_t txchanrej; /* Tx frames suppressed due to channel rejection */ -- uint32_t psmwds; /* Count PSM watchdogs */ -- uint32_t phywatchdog; /* Count Phy watchdogs (triggered by ucode) */ -- -- /* MBSS counters, AP only */ -- uint32_t prq_entries_handled; /* PRQ entries read in */ -- uint32_t prq_undirected_entries; /* which were bcast bss & ssid */ -- uint32_t prq_bad_entries; /* which could not be translated to info */ -- uint32_t atim_suppress_count; /* TX suppressions on ATIM fifo */ -- uint32_t bcn_template_not_ready; /* Template marked in use on send bcn ... */ -- uint32_t bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */ -- uint32_t late_tbtt_dpc; /* TBTT DPC did not happen in time */ -- -- /* per-rate receive stat counters */ -- uint32_t rx1mbps; /* packets rx at 1Mbps */ -- uint32_t rx2mbps; /* packets rx at 2Mbps */ -- uint32_t rx5mbps5; /* packets rx at 5.5Mbps */ -- uint32_t rx6mbps; /* packets rx at 6Mbps */ -- uint32_t rx9mbps; /* packets rx at 9Mbps */ -- uint32_t rx11mbps; /* packets rx at 11Mbps */ -- uint32_t rx12mbps; /* packets rx at 12Mbps */ -- uint32_t rx18mbps; /* packets rx at 18Mbps */ -- uint32_t rx24mbps; /* packets rx at 24Mbps */ -- uint32_t rx36mbps; /* packets rx at 36Mbps */ -- uint32_t rx48mbps; /* packets rx at 48Mbps */ -- uint32_t rx54mbps; /* packets rx at 54Mbps */ -- uint32_t rx108mbps; /* packets rx at 108mbps */ -- uint32_t rx162mbps; /* packets rx at 162mbps */ -- uint32_t rx216mbps; /* packets rx at 216 mbps */ -- uint32_t rx270mbps; /* packets rx at 270 mbps */ -- uint32_t rx324mbps; /* packets rx at 324 mbps */ -- uint32_t rx378mbps; /* packets rx at 378 mbps */ -- uint32_t rx432mbps; /* packets rx at 432 mbps */ -- uint32_t rx486mbps; /* packets rx at 486 mbps */ -- uint32_t rx540mbps; /* packets rx at 540 mbps */ -- -- /* pkteng rx frame stats */ -- uint32_t pktengrxducast; /* unicast frames rxed by the pkteng code */ -- uint32_t pktengrxdmcast; /* multicast frames rxed by the pkteng code */ -- -- uint32_t rfdisable; /* count of radio disables */ -- uint32_t bphy_rxcrsglitch; /* PHY count of bphy glitches */ -- uint32_t bphy_badplcp; -- -- uint32_t txexptime; /* Tx frames suppressed due to timer expiration */ -- -- uint32_t txmpdu_sgi; /* count for sgi transmit */ -- uint32_t rxmpdu_sgi; /* count for sgi received */ -- uint32_t txmpdu_stbc; /* count for stbc transmit */ -- uint32_t rxmpdu_stbc; /* count for stbc received */ -- -- uint32_t rxundec_mcst; /* dot11WEPUndecryptableCount */ -- -- /* WPA2 counters (see rxundec for DecryptFailureCount) */ -- uint32_t tkipmicfaill_mcst; /* TKIPLocalMICFailures */ -- uint32_t tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */ -- uint32_t tkipreplay_mcst; /* TKIPReplays */ -- uint32_t ccmpfmterr_mcst; /* CCMPFormatErrors */ -- uint32_t ccmpreplay_mcst; /* CCMPReplays */ -- uint32_t ccmpundec_mcst; /* CCMPDecryptErrors */ -- uint32_t fourwayfail_mcst; /* FourWayHandshakeFailures */ -- uint32_t wepundec_mcst; /* dot11WEPUndecryptableCount */ -- uint32_t wepicverr_mcst; /* dot11WEPICVErrorCount */ -- uint32_t decsuccess_mcst; /* DecryptSuccessCount */ -- uint32_t tkipicverr_mcst; /* TKIPICVErrorCount */ -- uint32_t wepexcluded_mcst; /* dot11WEPExcludedCount */ -- -- uint32_t dma_hang; /* count for dma hang */ -- uint32_t reinit; /* count for reinit */ -- -- uint32_t pstatxucast; /* count of ucast frames xmitted on all psta assoc */ -- uint32_t pstatxnoassoc; /* count of txnoassoc frames xmitted on all psta assoc */ -- uint32_t pstarxucast; /* count of ucast frames received on all psta assoc */ -- uint32_t pstarxbcmc; /* count of bcmc frames received on all psta */ -- uint32_t pstatxbcmc; /* count of bcmc frames transmitted on all psta */ -- -- uint32_t cso_passthrough; /* hw cso required but passthrough */ -- uint32_t cso_normal; /* hw cso hdr for normal process */ -- uint32_t chained; /* number of frames chained */ -- uint32_t chainedsz1; /* number of chain size 1 frames */ -- uint32_t unchained; /* number of frames not chained */ -- uint32_t maxchainsz; /* max chain size so far */ -- uint32_t currchainsz; /* current chain size */ -- uint32_t rxdrop20s; /* drop secondary cnt */ -- uint32_t pciereset; /* Secondary Bus Reset issued by driver */ -- uint32_t cfgrestore; /* configspace restore by driver */ -- uint32_t reinitreason[8]; /* reinitreason counters; 0: Unknown reason */ -- uint32_t rxrtry; /* num of received packets with retry bit on */ --} wl_cnt_ver_ten_t; -- --typedef struct --{ -- uint16_t version; -- uint16_t length; -- uint32_t rxampdu_sgi; -- uint32_t rxampdu_stbc; -- uint32_t rxmpdu_sgi; -- uint32_t rxmpdu_stbc; -- uint32_t rxmcs0_40M; -- uint32_t rxmcs1_40M; -- uint32_t rxmcs2_40M; -- uint32_t rxmcs3_40M; -- uint32_t rxmcs4_40M; -- uint32_t rxmcs5_40M; -- uint32_t rxmcs6_40M; -- uint32_t rxmcs7_40M; -- uint32_t rxmcs32_40M; -- uint32_t txfrmsnt_20Mlo; -- uint32_t txfrmsnt_20Mup; -- uint32_t txfrmsnt_40M; -- uint32_t rx_20ul; --} wl_cnt_ext_t; --#define WL_RXDIV_STATS_T_VERSION 1 --typedef struct --{ -- uint16_t version; -- uint16_t length; -- uint32_t rxant[4]; --} wl_rxdiv_stats_t; --#define WL_DELTA_STATS_T_VERSION 1 --typedef struct --{ -- uint16_t version; -- uint16_t length; -- uint32_t txframe; -- uint32_t txbyte; -- uint32_t txretrans; -- uint32_t txfail; -- uint32_t rxframe; -- uint32_t rxbyte; -- uint32_t rx1mbps; -- uint32_t rx2mbps; -- uint32_t rx5mbps5; -- uint32_t rx6mbps; -- uint32_t rx9mbps; -- uint32_t rx11mbps; -- uint32_t rx12mbps; -- uint32_t rx18mbps; -- uint32_t rx24mbps; -- uint32_t rx36mbps; -- uint32_t rx48mbps; -- uint32_t rx54mbps; -- uint32_t rx108mbps; -- uint32_t rx162mbps; -- uint32_t rx216mbps; -- uint32_t rx270mbps; -- uint32_t rx324mbps; -- uint32_t rx378mbps; -- uint32_t rx432mbps; -- uint32_t rx486mbps; -- uint32_t rx540mbps; --} wl_delta_stats_t; --#define WL_WME_CNT_VERSION 1 --typedef struct --{ -- uint32_t packets; -- uint32_t bytes; --} wl_traffic_stats_t; --#define AC_COUNT 4 --typedef struct --{ -- uint16_t version; -- uint16_t length; -- wl_traffic_stats_t tx[AC_COUNT]; -- wl_traffic_stats_t tx_failed[AC_COUNT]; -- wl_traffic_stats_t rx[AC_COUNT]; -- wl_traffic_stats_t rx_failed[AC_COUNT]; -- wl_traffic_stats_t forward[AC_COUNT]; -- wl_traffic_stats_t tx_expired[AC_COUNT]; --} wl_wme_cnt_t; -- --#define WL_MKEEP_ALIVE_VERSION 1 --#define WL_MKEEP_ALIVE_FIXED_LEN offsetof(wl_mkeep_alive_pkt_t, data) --#define WL_MKEEP_ALIVE_PRECISION 500 -- --#define WLC_BA_CNT_VERSION 1 --typedef struct wlc_ba_cnt --{ -- uint16_t version; -- uint16_t length; -- uint32_t txpdu; -- uint32_t txsdu; -- uint32_t txfc; -- uint32_t txfci; -- uint32_t txretrans; -- uint32_t txbatimer; -- uint32_t txdrop; -- uint32_t txaddbareq; -- uint32_t txaddbaresp; -- uint32_t txdelba; -- uint32_t txba; -- uint32_t txbar; -- uint32_t txpad[4]; -- uint32_t rxpdu; -- uint32_t rxqed; -- uint32_t rxdup; -- uint32_t rxnobuf; -- uint32_t rxaddbareq; -- uint32_t rxaddbaresp; -- uint32_t rxdelba; -- uint32_t rxba; -- uint32_t rxbar; -- uint32_t rxinvba; -- uint32_t rxbaholes; -- uint32_t rxunexp; -- uint32_t rxpad[4]; --} wlc_ba_cnt_t; --struct ampdu_tid_control --{ -- uint8_t tid; -- uint8_t enable; --}; --struct wl_msglevel2 --{ -- uint32_t low; -- uint32_t high; --}; --struct ampdu_ea_tid --{ -- wl_ether_addr_t ea; -- uint8_t tid; --}; --struct ampdu_retry_tid --{ -- uint8_t tid; -- uint8_t retry; --}; --struct ampdu_ba_sizes --{ -- uint8_t ba_tx_wsize; -- uint8_t ba_rx_wsize; --}; --#define DPT_DISCOVERY_MANUAL 0x01 --#define DPT_DISCOVERY_AUTO 0x02 --#define DPT_DISCOVERY_SCAN 0x04 --#define DPT_PATHSEL_AUTO 0 --#define DPT_PATHSEL_DIRECT 1 --#define DPT_PATHSEL_APPATH 2 --#define DPT_DENY_LIST_ADD 1 --#define DPT_DENY_LIST_REMOVE 2 --#define DPT_MANUAL_EP_CREATE 1 --#define DPT_MANUAL_EP_MODIFY 2 --#define DPT_MANUAL_EP_DELETE 3 --typedef struct dpt_iovar --{ -- wl_ether_addr_t ea; -- uint8_t mode; -- uint32_t pad; --} dpt_iovar_t; --#define DPT_STATUS_ACTIVE 0x01 --#define DPT_STATUS_AES 0x02 --#define DPT_STATUS_FAILED 0x04 --#define DPT_FNAME_LEN 48 --typedef struct dpt_status --{ -- uint8_t status; -- uint8_t fnlen; -- uint8_t name[DPT_FNAME_LEN]; -- uint32_t rssi; -- sta_info_t sta; --} dpt_status_t; --typedef struct dpt_list --{ -- uint32_t num; -- dpt_status_t status[1]; --} dpt_list_t; --typedef struct dpt_fname --{ -- uint8_t len; -- uint8_t name[DPT_FNAME_LEN]; --} dpt_fname_t; --#define BDD_FNAME_LEN 32 --typedef struct bdd_fname --{ -- uint8_t len; -- uint8_t name[BDD_FNAME_LEN]; --} bdd_fname_t; --struct ts_list --{ -- int32_t count; -- struct tsinfo_arg tsinfo[1]; --}; --typedef struct tspec_arg --{ -- uint16_t version; -- uint16_t length; -- uint32_t flag; -- struct tsinfo_arg tsinfo; -- uint16_t nom_msdu_size; -- uint16_t max_msdu_size; -- uint32_t min_srv_interval; -- uint32_t max_srv_interval; -- uint32_t inactivity_interval; -- uint32_t suspension_interval; -- uint32_t srv_start_time; -- uint32_t min_data_rate; -- uint32_t mean_data_rate; -- uint32_t peak_data_rate; -- uint32_t max_burst_size; -- uint32_t delay_bound; -- uint32_t min_phy_rate; -- uint16_t surplus_bw; -- uint16_t medium_time; -- uint8_t dialog_token; --} tspec_arg_t; --typedef struct tspec_per_sta_arg --{ -- wl_ether_addr_t ea; -- struct tspec_arg ts; --} tspec_per_sta_arg_t; --typedef struct wme_max_bandwidth --{ -- uint32_t ac[AC_COUNT]; --} wme_max_bandwidth_t; --#define WL_WME_MBW_PARAMS_IO_BYTES (sizeof(wme_max_bandwidth_t) ) --#define TSPEC_ARG_VERSION 2 --#define TSPEC_ARG_LENGTH 55 --#define TSPEC_DEFAULT_DIALOG_TOKEN 42 --#define TSPEC_DEFAULT_SBW_FACTOR 0x3000 --#define TSPEC_PENDING 0 --#define TSPEC_ACCEPTED 1 --#define TSPEC_REJECTED 2 --#define TSPEC_UNKNOWN 3 --#define TSPEC_STATUS_MASK 7 --#define WL_WLAN_ASSOC_REASON_NORMAL_NETWORK 0 --#define WL_WLAN_ASSOC_REASON_ROAM_FROM_CELLULAR_NETWORK 1 --#define WL_WLAN_ASSOC_REASON_ROAM_FROM_LAN 2 --#define WL_WLAN_ASSOC_REASON_MAX 2 --#define WL_SWFL_ABBFL 0x0001 --#define WL_SWFL_ABENCORE 0x0002 --#define WL_SWFL_NOHWRADIO 0x0004 --#define WL_LIFETIME_MAX 0xFFFF --typedef struct wl_lifetime --{ -- uint32_t ac; -- uint32_t lifetime; --} wl_lifetime_t; --typedef struct wl_chan_switch --{ -- uint8_t mode; -- uint8_t count; -- wl_chanspec_t chspec; -- uint8_t reg; --} wl_chan_switch_t; --#define WLC_ROAM_TRIGGER_DEFAULT 0 --#define WLC_ROAM_TRIGGER_BANDWIDTH 1 --#define WLC_ROAM_TRIGGER_DISTANCE 2 --#define WLC_ROAM_TRIGGER_MAX_VALUE 2 --enum --{ -- PFN_LIST_ORDER, PFN_RSSI --}; --#define SORT_CRITERIA_BIT 0 --#define AUTO_NET_SWITCH_BIT 1 --#define ENABLE_BKGRD_SCAN_BIT 2 --#define IMMEDIATE_SCAN_BIT 3 --#define AUTO_CONNECT_BIT 4 --#define IMMEDIATE_EVENT_BIT 8 --#define SUPPRESS_SSID_BIT 9 --#define ENABLE_NET_OFFLOAD_BIT 10 --#define SORT_CRITERIA_MASK 0x01 --#define AUTO_NET_SWITCH_MASK 0x02 --#define ENABLE_BKGRD_SCAN_MASK 0x04 --#define IMMEDIATE_SCAN_MASK 0x08 --#define AUTO_CONNECT_MASK 0x10 --#define PFN_VERSION 2 -- --/* PFN network info structure */ --typedef struct wl_pfn_subnet_info --{ -- struct ether_addr BSSID; -- uint8_t channel; /* channel number only */ -- uint8_t SSID_len; -- uint8_t SSID[32]; --} wl_pfn_subnet_info_t; -- --typedef struct wl_pfn_net_info --{ -- wl_pfn_subnet_info_t pfnsubnet; -- int16_t RSSI; /* receive signal strength (in dBm) */ -- uint16_t timestamp; /* age in seconds */ --} wl_pfn_net_info_t; -- --/* used to report exactly one scan result */ --/* plus reports detailed scan info in bss_info */ --typedef struct wl_pfn_scanresult --{ -- uint32_t version; -- uint32_t status; -- uint32_t count; -- wl_pfn_net_info_t netinfo; -- wl_bss_info_t bss_info; --} wl_pfn_scanresult_t; -- --/* PFN data structure */ --typedef struct wl_pfn_param --{ -- int32_t version; /* PNO parameters version */ -- int32_t scan_freq; /* Scan frequency */ -- int32_t lost_network_timeout; /* Timeout in sec. to declare -- * discovered network as lost -- */ -- int16_t flags; /* Bit field to control features -- * of PFN such as sort criteria auto -- * enable switch and background scan -- */ -- int16_t rssi_margin; /* Margin to avoid jitter for choosing a -- * PFN based on RSSI sort criteria -- */ -- uint8_t bestn; /* number of best networks in each scan */ -- uint8_t mscan; /* number of scans recorded */ -- uint8_t repeat; /* Minimum number of scan intervals -- * before scan frequency changes in adaptive scan -- */ -- uint8_t exp; /* Exponent of 2 for maximum scan interval */ -- -- int32_t slow_freq; /* slow scan period */ --} wl_pfn_param_t; -- --typedef struct wl_pfn_bssid --{ -- struct ether_addr macaddr; -- /* Bit4: suppress_lost, Bit3: suppress_found */ -- uint16_t flags; --} wl_pfn_bssid_t; -- --typedef struct wl_pfn_cfg --{ -- uint32_t reporttype; -- int32_t channel_num; -- uint16_t channel_list[WL_NUMCHANNELS]; -- uint32_t flags; --} wl_pfn_cfg_t; -- --/* for use with wl_pfn.flags */ --#define WL_PFN_HIDDEN_MASK 0x4 --#define WL_PFN_SUPPRESSLOST_MASK 0x10 -- --typedef struct wl_pfn --{ -- wlc_ssid_t ssid; /* ssid name and its length */ -- int32_t flags; /* bit2: hidden */ -- int32_t infra; /* BSS Vs IBSS */ -- int32_t auth; /* Open Vs Closed */ -- int32_t wpa_auth; /* WPA type */ -- int32_t wsec; /* wsec value */ --} wl_pfn_t; -- --#define TOE_TX_CSUM_OL 0x00000001 --#define TOE_RX_CSUM_OL 0x00000002 --#define TOE_ERRTEST_TX_CSUM 0x00000001 --#define TOE_ERRTEST_RX_CSUM 0x00000002 --#define TOE_ERRTEST_RX_CSUM2 0x00000004 --struct toe_ol_stats_t --{ -- uint32_t tx_summed; -- uint32_t tx_iph_fill; -- uint32_t tx_tcp_fill; -- uint32_t tx_udp_fill; -- uint32_t tx_icmp_fill; -- uint32_t rx_iph_good; -- uint32_t rx_iph_bad; -- uint32_t rx_tcp_good; -- uint32_t rx_tcp_bad; -- uint32_t rx_udp_good; -- uint32_t rx_udp_bad; -- uint32_t rx_icmp_good; -- uint32_t rx_icmp_bad; -- uint32_t tx_tcp_errinj; -- uint32_t tx_udp_errinj; -- uint32_t tx_icmp_errinj; -- uint32_t rx_tcp_errinj; -- uint32_t rx_udp_errinj; -- uint32_t rx_icmp_errinj; --}; --#define ARP_OL_AGENT 0x00000001 --#define ARP_OL_SNOOP 0x00000002 --#define ARP_OL_HOST_AUTO_REPLY 0x00000004 --#define ARP_OL_PEER_AUTO_REPLY 0x00000008 --#define ARP_ERRTEST_REPLY_PEER 0x1 --#define ARP_ERRTEST_REPLY_HOST 0x2 --#define ARP_MULTIHOMING_MAX 8 --typedef struct arp_ol_stats --{ -- uint32_t host_ip_entries; -- uint32_t host_ip_overflow; -- uint32_t arp_table_entries; -- uint32_t arp_table_overflow; -- uint32_t host_request; -- uint32_t host_reply; -- uint32_t host_service; -- uint32_t peer_request; -- uint32_t peer_request_drop; -- uint32_t peer_reply; -- uint32_t peer_reply_drop; -- uint32_t peer_service; --}arp_ol_stats_t; --typedef struct wl_keep_alive_pkt --{ -- uint32_t period_msec; -- uint16_t len_bytes; -- uint8_t data[1]; --} wl_keep_alive_pkt_t; --#define WL_KEEP_ALIVE_FIXED_LEN offsetof(wl_keep_alive_pkt_t, data) --typedef enum wl_pkt_filter_type --{ -- WL_PKT_FILTER_TYPE_PATTERN_MATCH --} wl_pkt_filter_type_t; --#define WL_PKT_FILTER_TYPE wl_pkt_filter_type_t --typedef struct wl_pkt_filter_pattern --{ -- uint32_t offset; -- uint32_t size_bytes; -- uint8_t mask_and_pattern[1]; --} wl_pkt_filter_pattern_t; --typedef struct wl_pkt_filter --{ -- uint32_t id; -- uint32_t type; -- uint32_t negate_match; -- union -- { -- wl_pkt_filter_pattern_t pattern; -- } u; --} wl_pkt_filter_t; --#define WL_PKT_FILTER_FIXED_LEN offsetof(wl_pkt_filter_t, u) --#define WL_PKT_FILTER_PATTERN_FIXED_LEN offsetof(wl_pkt_filter_pattern_t, mask_and_pattern) --typedef struct wl_pkt_filter_enable --{ -- uint32_t id; -- uint32_t enable; --} wl_pkt_filter_enable_t; --typedef struct wl_pkt_filter_list --{ -- uint32_t num; -- wl_pkt_filter_t filter[1]; --} wl_pkt_filter_list_t; --#define WL_PKT_FILTER_LIST_FIXED_LEN offsetof(wl_pkt_filter_list_t, filter) --typedef struct wl_pkt_filter_stats --{ -- uint32_t num_pkts_matched; -- uint32_t num_pkts_forwarded; -- uint32_t num_pkts_discarded; --} wl_pkt_filter_stats_t; --typedef struct wl_seq_cmd_ioctl --{ -- uint32_t cmd; -- uint32_t len; --} wl_seq_cmd_ioctl_t; --#define WL_SEQ_CMD_ALIGN_BYTES 4 --#define WL_SEQ_CMDS_GET_IOCTL_FILTER(cmd) \ -- ( ( (cmd) == WLC_GET_MAGIC ) || \ -- ( (cmd) == WLC_GET_VERSION ) || \ -- ( (cmd) == WLC_GET_AP ) || \ -- ( (cmd) == WLC_GET_INSTANCE ) ) --#define WL_PKTENG_PER_TX_START 0x01 --#define WL_PKTENG_PER_TX_STOP 0x02 --#define WL_PKTENG_PER_RX_START 0x04 --#define WL_PKTENG_PER_RX_WITH_ACK_START 0x05 --#define WL_PKTENG_PER_TX_WITH_ACK_START 0x06 --#define WL_PKTENG_PER_RX_STOP 0x08 --#define WL_PKTENG_PER_MASK 0xff --#define WL_PKTENG_SYNCHRONOUS 0x100 --typedef struct wl_pkteng --{ -- uint32_t flags; -- uint32_t delay; -- uint32_t nframes; -- uint32_t length; -- uint8_t seqno; -- wl_ether_addr_t dest; -- wl_ether_addr_t src; --} wl_pkteng_t; --#define NUM_80211b_RATES 4 --#define NUM_80211ag_RATES 8 --#define NUM_80211n_RATES 32 --#define NUM_80211_RATES (NUM_80211b_RATES + NUM_80211ag_RATES + NUM_80211n_RATES) --typedef struct wl_pkteng_stats --{ -- uint32_t lostfrmcnt; -- int32_t rssi; -- int32_t snr; -- uint16_t rxpktcnt[NUM_80211_RATES + 1]; --} wl_pkteng_stats_t; --typedef struct wl_sslpnphy_papd_debug_data --{ -- uint8_t psat_pwr; -- uint8_t psat_indx; -- uint8_t final_idx; -- uint8_t start_idx; -- int32_t min_phase; -- int32_t voltage; -- int8_t temperature; --} wl_sslpnphy_papd_debug_data_t; --typedef struct wl_sslpnphy_debug_data --{ -- int16_t papdcompRe[64]; -- int16_t papdcompIm[64]; --} wl_sslpnphy_debug_data_t; --typedef struct wl_sslpnphy_spbdump_data --{ -- uint16_t tbl_length; -- int16_t spbreal[256]; -- int16_t spbimg[256]; --} wl_sslpnphy_spbdump_data_t; --typedef struct wl_sslpnphy_percal_debug_data --{ -- uint32_t cur_idx; -- uint32_t tx_drift; -- uint8_t prev_cal_idx; -- uint32_t percal_ctr; -- int32_t nxt_cal_idx; -- uint32_t force_1idxcal; -- uint32_t onedxacl_req; -- int32_t last_cal_volt; -- int8_t last_cal_temp; -- uint32_t vbat_ripple; -- uint32_t exit_route; -- int32_t volt_winner; --} wl_sslpnphy_percal_debug_data_t; --#define WL_WOWL_MAGIC (1 << 0) --#define WL_WOWL_NET (1 << 1) --#define WL_WOWL_DIS (1 << 2) --#define WL_WOWL_RETR (1 << 3) --#define WL_WOWL_BCN (1 << 4) --#define WL_WOWL_TST (1 << 5) --#define WL_WOWL_TRAFFIC (1 << 12) --#define WL_WOWL_BCAST (1 << 15) --#define WL_WOWL_GTK (0x441f) --#define WL_WOWL_DEAUTH (0x1F) --#define WL_WOWL_ALL (0x541E) -- --#define MAGIC_PKT_MINLEN 102 --typedef struct --{ -- uint32_t masksize; -- uint32_t offset; -- uint32_t patternoffset; -- uint32_t patternsize; --} wl_wowl_pattern_t; --typedef struct --{ -- uint32_t count; -- wl_wowl_pattern_t pattern[1]; --} wl_wowl_pattern_list_t; --typedef struct --{ -- uint8_t pci_wakeind; -- uint16_t ucode_wakeind; --} wl_wowl_wakeind_t; --typedef struct wl_txrate_class --{ -- uint8_t init_rate; -- uint8_t min_rate; -- uint8_t max_rate; --} wl_txrate_class_t; --#define WL_DELAYMODE_DEFER 0 --#define WL_DELAYMODE_FORCE 1 --#define WL_DELAYMODE_AUTO 2 --#define WLC_OBSS_SCAN_PASSIVE_DWELL_DEFAULT 100 --#define WLC_OBSS_SCAN_PASSIVE_DWELL_MIN 5 --#define WLC_OBSS_SCAN_PASSIVE_DWELL_MAX 1000 --#define WLC_OBSS_SCAN_ACTIVE_DWELL_DEFAULT 20 --#define WLC_OBSS_SCAN_ACTIVE_DWELL_MIN 10 --#define WLC_OBSS_SCAN_ACTIVE_DWELL_MAX 1000 --#define WLC_OBSS_SCAN_WIDTHSCAN_INTERVAL_DEFAULT 300 --#define WLC_OBSS_SCAN_WIDTHSCAN_INTERVAL_MIN 10 --#define WLC_OBSS_SCAN_WIDTHSCAN_INTERVAL_MAX 900 --#define WLC_OBSS_SCAN_CHANWIDTH_TRANSITION_DLY_DEFAULT 5 --#define WLC_OBSS_SCAN_CHANWIDTH_TRANSITION_DLY_MIN 5 --#define WLC_OBSS_SCAN_CHANWIDTH_TRANSITION_DLY_MAX 100 --#define WLC_OBSS_SCAN_PASSIVE_TOTAL_PER_CHANNEL_DEFAULT 200 --#define WLC_OBSS_SCAN_PASSIVE_TOTAL_PER_CHANNEL_MIN 200 --#define WLC_OBSS_SCAN_PASSIVE_TOTAL_PER_CHANNEL_MAX 10000 --#define WLC_OBSS_SCAN_ACTIVE_TOTAL_PER_CHANNEL_DEFAULT 20 --#define WLC_OBSS_SCAN_ACTIVE_TOTAL_PER_CHANNEL_MIN 20 --#define WLC_OBSS_SCAN_ACTIVE_TOTAL_PER_CHANNEL_MAX 10000 --#define WLC_OBSS_SCAN_ACTIVITY_THRESHOLD_DEFAULT 25 --#define WLC_OBSS_SCAN_ACTIVITY_THRESHOLD_MIN 0 --#define WLC_OBSS_SCAN_ACTIVITY_THRESHOLD_MAX 100 --typedef struct wl_obss_scan_arg --{ -- int16_t passive_dwell; -- int16_t active_dwell; -- int16_t bss_widthscan_interval; -- int16_t passive_total; -- int16_t active_total; -- int16_t chanwidth_transition_delay; -- int16_t activity_threshold; --} wl_obss_scan_arg_t; --#define WL_OBSS_SCAN_PARAM_LEN sizeof(wl_obss_scan_arg_t) --#define WL_MIN_NUM_OBSS_SCAN_ARG 7 --#define WL_COEX_INFO_MASK 0x07 --#define WL_COEX_INFO_REQ 0x01 --#define WL_COEX_40MHZ_INTOLERANT 0x02 --#define WL_COEX_WIDTH20 0x04 --typedef struct wl_action_obss_coex_req --{ -- uint8_t info; -- uint8_t num; -- uint8_t ch_list[1]; --} wl_action_obss_coex_req_t; --#define MAX_RSSI_LEVELS 8 --typedef struct wl_rssi_event --{ -- uint32_t rate_limit_msec; -- uint8_t num_rssi_levels; -- int8_t rssi_levels[MAX_RSSI_LEVELS]; --} wl_rssi_event_t; --#define WLFEATURE_DISABLE_11N 0x00000001 --#define WLFEATURE_DISABLE_11N_STBC_TX 0x00000002 --#define WLFEATURE_DISABLE_11N_STBC_RX 0x00000004 --#define WLFEATURE_DISABLE_11N_SGI_TX 0x00000008 --#define WLFEATURE_DISABLE_11N_SGI_RX 0x00000010 --#define WLFEATURE_DISABLE_11N_AMPDU_TX 0x00000020 --#define WLFEATURE_DISABLE_11N_AMPDU_RX 0x00000040 --#define WLFEATURE_DISABLE_11N_GF 0x00000080 -- --#pragma pack(1) -- --typedef struct sta_prbreq_wps_ie_hdr --{ -- wl_ether_addr_t staAddr; -- uint16_t ieLen; --} sta_prbreq_wps_ie_hdr_t; -- --typedef struct sta_prbreq_wps_ie_data --{ -- sta_prbreq_wps_ie_hdr_t hdr; -- uint8_t ieData[1]; --} sta_prbreq_wps_ie_data_t; -- --typedef struct sta_prbreq_wps_ie_list --{ -- uint32_t totLen; -- uint8_t ieDataList[1]; --} sta_prbreq_wps_ie_list_t; -- --/* EDCF related items from 802.11.h */ -- --/* ACI from 802.11.h */ --#define EDCF_AIFSN_MIN 1 /* AIFSN minimum value */ --#define EDCF_AIFSN_MAX 15 /* AIFSN maximum value */ --#define EDCF_AIFSN_MASK 0x0f /* AIFSN mask */ --#define EDCF_ACM_MASK 0x10 /* ACM mask */ --#define EDCF_ACI_MASK 0x60 /* ACI mask */ --#define EDCF_ACI_SHIFT 5 /* ACI shift */ --#define EDCF_AIFSN_SHIFT 12 /* 4 MSB(0xFFF) in ifs_ctl for AC idx */ -- --/* ECW from 802.11.h */ --#define EDCF_ECW_MIN 0 /* cwmin/cwmax exponent minimum value */ --#define EDCF_ECW_MAX 15 /* cwmin/cwmax exponent maximum value */ --#define EDCF_ECW2CW(exp) ( (1 << (exp) ) - 1 ) --#define EDCF_ECWMIN_MASK 0x0f /* cwmin exponent form mask */ --#define EDCF_ECWMAX_MASK 0xf0 /* cwmax exponent form mask */ --#define EDCF_ECWMAX_SHIFT 4 /* cwmax exponent form shift */ -- --/* TXOP from 802.11.h */ --#define EDCF_TXOP_MIN 0 /* TXOP minimum value */ --#define EDCF_TXOP_MAX 65535 /* TXOP maximum value */ --#define EDCF_TXOP2USEC(txop) ( (txop) << 5 ) -- --#define EDCF_ACPARAM --struct edcf_acparam --{ -- uint8_t ACI; -- uint8_t ECW; -- uint16_t TXOP; /* stored in network order (ls octet first) */ --}; --typedef struct edcf_acparam edcf_acparam_t; -- --/* Stop packing structures */ --#pragma pack() -- --/* discovery state */ --typedef struct wl_p2p_disc_st --{ -- uint8_t state; /* see p2p_discovery_state_t */ -- uint16_t chanspec; /* valid in listen state */ -- uint16_t dwell_time_ms; /* valid in listen state, in ms */ --} wl_p2p_disc_st_t; -- --/* scan request */ --typedef struct wl_p2p_scan --{ -- uint8_t type; /* 'S' for WLC_SCAN, 'E' for "escan" */ -- uint8_t reserved[3]; -- /* scan or escan parms... */ --} wl_p2p_scan_t; -- --/* escan request */ --typedef struct --{ -- uint8_t type; /* 'S' for WLC_SCAN, 'E' for "escan" */ -- uint8_t reserved[3]; -- -- /* escan params */ -- wl_escan_params_t escan; --} wl_p2p_escan_t; -- --/* i/f request */ --typedef struct wl_p2p_if --{ -- struct ether_addr mac_address; -- uint8_t interface_type; -- uint16_t chan_spec; --} wl_p2p_if_t; -- --/* i/f query */ --typedef struct wl_p2p_ifq --{ -- uint32_t bsscfgidx; -- char ifname[16]; --} wl_p2p_ifq_t; -- --/* OppPS & CTWindow */ --typedef struct wl_p2p_ops --{ -- uint8_t ops; /* 0: disable 1: enable */ -- uint8_t ctw; /* >= 10 */ --} wl_p2p_ops_t; -- --/* absence and presence request */ --typedef struct wl_p2p_sched_desc --{ -- uint32_t start; -- uint32_t interval; -- uint32_t duration; -- uint32_t count; /* see count */ --} wl_p2p_sched_desc_t; -- --typedef struct wl_p2p_sched --{ -- uint8_t type; /* see schedule type */ -- uint8_t action; /* see schedule action */ -- uint8_t option; /* see schedule option */ -- wl_p2p_sched_desc_t desc[1]; --} wl_p2p_sched_t; -- --/* schedule type */ --#define WL_P2P_SCHED_TYPE_ABS 0 /* Scheduled Absence */ --#define WL_P2P_SCHED_TYPE_REQ_ABS 1 /* Requested Absence */ --#define WL_P2P_SCHED_TYPE_REQ_PSC 2 /* Requested Presence */ -- --/* schedule action during absence periods (for WL_P2P_SCHED_ABS type) */ --#define WL_P2P_SCHED_ACTION_NONE 0 /* no action */ --#define WL_P2P_SCHED_ACTION_DOZE 1 /* doze */ --#define WL_P2P_SCHED_ACTION_RESET 255 /* reset */ -- --/* schedule option - WL_P2P_SCHED_TYPE_ABS */ --#define WL_P2P_SCHED_OPTION_NORMAL 0 /* normal start/interval/duration/count in time */ --#define WL_P2P_SCHED_OPTION_BCNPCT 1 /* percentage of beacon interval */ -- --typedef struct wl_p2p_wfds_hash --{ -- uint32_t advt_id; -- uint16_t nw_cfg_method; -- uint8_t wfds_hash[6]; -- uint8_t name_len; -- uint8_t service_name[MAX_WFDS_SVC_NAME_LEN]; --} wl_p2p_wfds_hash_t; -- --#define P2P_IP_ALLOC_LEN 12 --/* Definitions for Reliable Multicast */ --/* NOTE: RMC structures should not be packed */ -- --#define WL_RMC_CNT_VERSION (1) --#define WL_RMC_TR_VERSION (1) --#define WL_RMC_MAX_CLIENT (32) --#define WL_RMC_FLAG_INBLACKLIST (1) --#define WL_RMC_FLAG_ACTIVEACKER (2) --#define WL_RMC_FLAG_RELMCAST (4) --#define WL_RMC_FLAG_MASTER_TX (8) --#define WL_RMC_MAX_TABLE_ENTRY (8) -- --#define WL_RMC_VER (1) --#define WL_RMC_INDEX_ACK_ALL (255) --#define WL_RMC_NUM_OF_MC_STREAMS (4) --#define WL_RMC_MAX_TRS_PER_GROUP (1) --#define WL_RMC_MAX_TRS_IN_ACKALL (1) --#define WL_RMC_ACK_MCAST0 (0x02) --#define WL_RMC_ACK_MCAST_ALL (0x01) --#define WL_RMC_ACTF_TIME_MIN (300) /* time in ms */ --#define WL_RMC_ACTF_TIME_MAX (20000) /* time in ms */ --#define WL_RMC_MAX_NUM_TRS (32) /* maximun transmitters allowed */ --#define WL_RMC_ARTMO_MIN (350) /* time in ms */ --#define WL_RMC_ARTMO_MAX (40000) /* time in ms */ -- --enum rmc_opcodes --{ -- RELMCAST_ENTRY_OP_DISABLE = 0, /* Disable multi-cast group */ -- RELMCAST_ENTRY_OP_DELETE = 1, /* Delete multi-cast group */ -- RELMCAST_ENTRY_OP_ENABLE = 2, /* Enable multi-cast group */ -- RELMCAST_ENTRY_OP_ACK_ALL = 3 /* Enable ACK ALL bit in AMT */ --}; -- --/* RMC operational modes */ --enum rmc_modes --{ -- WL_RMC_MODE_RECEIVER = 0, /* Receiver mode by default */ -- WL_RMC_MODE_TRANSMITTER = 1, /* Transmitter mode using wl ackreq */ -- WL_RMC_MODE_INITIATOR = 2 /* Initiator mode using wl ackreq */ --}; -- --/* Each RMC mcast client info */ --typedef struct wl_relmcast_client --{ -- uint8_t flag; /* status of client such as AR, R, or blacklisted */ -- int16_t rssi; /* rssi value of RMC client */ -- struct ether_addr addr; /* mac address of RMC client */ --} wl_relmcast_client_t; -- --/* RMC Counters */ --typedef struct wl_rmc_cnts --{ -- uint16_t version; /* see definition of WL_CNT_T_VERSION */ -- uint16_t length; /* length of entire structure */ -- uint16_t dupcnt; /* counter for duplicate rmc MPDU */ -- uint16_t ackreq_err; /* counter for wl ackreq error */ -- uint16_t af_tx_err; /* error count for action frame transmit */ -- uint16_t null_tx_err; /* error count for rmc null frame transmit */ -- uint16_t af_unicast_tx_err; /* error count for rmc unicast frame transmit */ -- uint16_t mc_no_amt_slot; /* No mcast AMT entry available */ -- /* Unused. Keep for rom compatibility */ -- uint16_t mc_no_glb_slot; /* No mcast entry available in global table */ -- uint16_t mc_not_mirrored; /* mcast group is not mirrored */ -- uint16_t mc_existing_tr; /* mcast group is already taken by transmitter */ -- uint16_t mc_exist_in_amt; /* mcast group is already programmed in amt */ -- /* Unused. Keep for rom compatibility */ -- uint16_t mc_not_exist_in_gbl; /* mcast group is not in global table */ -- uint16_t mc_not_exist_in_amt; /* mcast group is not in AMT table */ -- uint16_t mc_utilized; /* mcast addressed is already taken */ -- uint16_t mc_taken_other_tr; /* multi-cast addressed is already taken */ -- uint32_t rmc_rx_frames_mac; /* no of mc frames received from mac */ -- uint32_t rmc_tx_frames_mac; /* no of mc frames transmitted to mac */ -- uint32_t mc_null_ar_cnt; /* no. of times NULL AR is received */ -- uint32_t mc_ar_role_selected; /* no. of times took AR role */ -- uint32_t mc_ar_role_deleted; /* no. of times AR role cancelled */ -- uint32_t mc_noacktimer_expired; /* no. of times noack timer expired */ -- uint16_t mc_no_wl_clk; /* no wl clk detected when trying to access amt */ -- uint16_t mc_tr_cnt_exceeded; /* No of transmitters in the network exceeded */ --} wl_rmc_cnts_t; -- --/* RMC Status */ --typedef struct wl_relmcast_st --{ -- uint8_t ver; /* version of RMC */ -- uint8_t num; /* number of clients detected by transmitter */ -- wl_relmcast_client_t clients[WL_RMC_MAX_CLIENT]; -- uint16_t err; /* error status (used in infra) */ -- uint16_t actf_time; /* action frame time period */ --} wl_relmcast_status_t; -- --/* Entry for each STA/node */ --typedef struct wl_rmc_entry --{ -- /* operation on multi-cast entry such add, -- * delete, ack-all -- */ -- int8_t flag; -- struct ether_addr addr; /* multi-cast group mac address */ --} wl_rmc_entry_t; -- --/* RMC table */ --typedef struct wl_rmc_entry_table --{ -- uint8_t index; /* index to a particular mac entry in table */ -- uint8_t opcode; /* opcodes or operation on entry */ -- wl_rmc_entry_t entry[WL_RMC_MAX_TABLE_ENTRY]; --} wl_rmc_entry_table_t; -- --typedef struct wl_rmc_trans_elem --{ -- struct ether_addr tr_mac; /* transmitter mac */ -- struct ether_addr ar_mac; /* ar mac */ -- uint16_t artmo; /* AR timeout */ -- uint8_t amt_idx; /* amt table entry */ -- uint16_t flag; /* entry will be acked, not acked, programmed, full etc */ --} wl_rmc_trans_elem_t; -- --/* RMC transmitters */ --typedef struct wl_rmc_trans_in_network --{ -- uint8_t ver; /* version of RMC */ -- uint8_t num_tr; /* number of transmitters in the network */ -- wl_rmc_trans_elem_t trs[WL_RMC_MAX_NUM_TRS]; --} wl_rmc_trans_in_network_t; -- --/* To update vendor specific ie for RMC */ --typedef struct wl_rmc_vsie --{ -- uint8_t oui[3]; -- uint16_t payload; /* IE Data Payload */ --} wl_rmc_vsie_t; -- --/* WLC_E_ULP event data */ --#define WL_ULP_EVENT_VERSION 1 --#define WL_ULP_DISABLE_CONSOLE 1 /* Disable console message on ULP entry */ --#define WL_ULP_UCODE_DOWNLOAD 2 /* Download ULP ucode file */ --#define WL_ULP_ENTRY 3 /* inform ulp entry to Host during warmboot */ -- --typedef struct wl_ulp_event --{ -- uint16_t version; -- uint16_t ulp_dongle_action; --} wl_ulp_event_t; -- --/* clm download */ --#define DLOAD_HANDLER_VER 1 /* Downloader version */ --#define DLOAD_FLAG_VER_MASK 0xf000 /* Downloader version mask */ --#define DLOAD_FLAG_VER_SHIFT 12 /* Downloader version shift */ -- --#define DL_CRC_NOT_INUSE 0x0001 --#define DL_BEGIN 0x0002 --#define DL_END 0x0004 -- --enum --{ -- DL_TYPE_UCODE = 1, DL_TYPE_CLM = 2 --}; -- --struct wl_dload_data --{ -- uint16_t flag; -- uint16_t dload_type; -- uint32_t len; -- uint32_t crc; -- uint8_t data[1]; --}; --typedef struct wl_dload_data wl_dload_data_t; -- --struct wl_clm_dload_info --{ -- uint32_t ds_id; -- uint32_t clm_total_len; -- uint32_t num_chunks; -- uint32_t chunk_len; -- uint32_t chunk_offset; -- uint8_t data_chunk[1]; --}; --typedef struct wl_clm_dload_info wl_clm_dload_info_t; -- --#pragma pack(1) --typedef struct mesh_peer_info --{ -- uint16_t mesh_peer_prot_id; -- uint16_t local_link_id; -- uint16_t peer_link_id; -- uint16_t peer_aid; -- uint8_t state; --} mesh_peer_info_t; -- --typedef struct mesh_peer_info_ext --{ -- mesh_peer_info_t peer_info; -- uint16_t local_aid; -- struct ether_addr ea; -- uint32_t entry_state; -- int32_t rssi; --} mesh_peer_info_ext_t; -- --typedef struct mesh_peer_info_dump --{ -- uint32_t buflen; -- uint32_t version; -- uint32_t count; /* number of results */ -- mesh_peer_info_ext_t mpi_ext[1]; --} mesh_peer_info_dump_t; -- --#define WL_CHANSPEC_CTL_SB_LLL 0x0000 --#define WL_CHANSPEC_CTL_SB_LLU 0x0100 --#define WL_CHANSPEC_CTL_SB_LUL 0x0200 --#define WL_CHANSPEC_CTL_SB_LUU 0x0300 --#define WL_CHANSPEC_CTL_SB_ULL 0x0400 --#define WL_CHANSPEC_CTL_SB_ULU 0x0500 --#define WL_CHANSPEC_CTL_SB_UUL 0x0600 --#define WL_CHANSPEC_CTL_SB_UUU 0x0700 --#define WL_CHANSPEC_CTL_SB_LL WL_CHANSPEC_CTL_SB_LLL --#define WL_CHANSPEC_CTL_SB_LU WL_CHANSPEC_CTL_SB_LLU --#define WL_CHANSPEC_CTL_SB_UL WL_CHANSPEC_CTL_SB_LUL --#define WL_CHANSPEC_CTL_SB_UU WL_CHANSPEC_CTL_SB_LUU --#define WL_CHANSPEC_CTL_SB_L WL_CHANSPEC_CTL_SB_LLL --#define WL_CHANSPEC_CTL_SB_U WL_CHANSPEC_CTL_SB_LLU --#define INVCHANSPEC 255 --#define WL_CHANSPEC_CTL_SB_SHIFT 8 --#define WL_CHANSPEC_BW_5 0x0000 --#define WL_CHANSPEC_BW_80 0x2000 --#define WL_CHANSPEC_BW_160 0x2800 --#define WL_CHANSPEC_BW_8080 0x3000 -- --struct ether_addr; --struct wl_join_scan_params; -- --typedef struct wl_assoc_params --{ -- struct ether_addr bssid; -- uint16_t bssid_cnt; -- uint32_t chanspec_num; -- chanspec_t chanspec_list[1]; --} wl_assoc_params_t; --#define WL_ASSOC_PARAMS_FIXED_SIZE (sizeof(wl_assoc_params_t) - sizeof(wl_chanspec_t) ) --typedef wl_assoc_params_t wl_reassoc_params_t; --#define WL_REASSOC_PARAMS_FIXED_SIZE WL_ASSOC_PARAMS_FIXED_SIZE --typedef wl_assoc_params_t wl_join_assoc_params_t; --#define WL_JOIN_ASSOC_PARAMS_FIXED_SIZE WL_ASSOC_PARAMS_FIXED_SIZE --typedef struct wl_join_params --{ -- wlc_ssid_t ssid; -- struct wl_assoc_params params; --} wl_join_params_t; --#define WL_JOIN_PARAMS_FIXED_SIZE (sizeof(wl_join_params_t) - sizeof(wl_chanspec_t) ) -- --/* extended join params */ --typedef struct wl_extjoin_params --{ -- wlc_ssid_t ssid; /* {0, ""}: wildcard scan */ -- struct wl_join_scan_params scan_params; -- wl_join_assoc_params_t assoc_params; /* optional field, but it must include the fixed portion -- * of the wl_join_assoc_params_t struct when it does -- * present. -- */ --} wl_extjoin_params_t; --#define WL_EXTJOIN_PARAMS_FIXED_SIZE (sizeof(wl_extjoin_params_t) - sizeof(chanspec_t) ) -- --#define WLC_SET_CUSTOM_COUNTRY ( (uint32_t)320 ) -- --/* WLC_GET_AUTH, WLC_SET_AUTH values */ --#define WL_AUTH_OPEN_SYSTEM 0 /* d11 open authentication */ --#define WL_AUTH_SHARED_KEY 1 /* d11 shared authentication */ --#define WL_AUTH_OPEN_SHARED 2 /* try open, then shared if open failed w/rc 13 */ --#define WL_AUTH_SAE 3 /* Simultaneous Authentication of Equals (SAE) */ -- --/** ARP offload statistics */ --struct whd_arp_stats_s --{ -- uint32_t version; /**< WLAN version */ -- uint32_t peerage; /**< Current peer age-out time */ -- uint32_t arpoe; /**< Agent enabled state */ -- uint32_t features_enabled; /**< ARP Feature Flags @ref CY_ARP_OL_AGENT_ENABLE, etc. */ -- arp_ol_stats_t stats; /**< Current stats */ -- uint32_t host_ip_list[ARP_MULTIHOMING_MAX]; /**< host_ip addresses in one call */ --}; -- --#pragma pack() -- --/* TCP Keepalive offload related defintions should not be added inside -- * pragma pack to avoid functionality breakage. -- */ --/* -- * TCP keepalive offload definitions -- */ --#define MAX_TKO_CONN 4 --#define IPV4_ADDR_LEN 4 /* IPV4 address length */ -- --/* Default TCP Keepalive retry parameters. */ --#define TCP_KEEPALIVE_OFFLOAD_INTERVAL_SEC (20) --#define TCP_KEEPALIVE_OFFLOAD_RETRY_COUNT (3) --#define TCP_KEEPALIVE_OFFLOAD_RETRY_INTERVAL_SEC (3) -- --/* common iovar struct */ --typedef struct wl_tko --{ -- uint16_t subcmd_id; /* subcommand id */ -- uint16_t len; /* total length of data[] */ -- uint8_t data[1]; /* subcommand data */ --} wl_tko_t; -- --/* subcommand ids */ --#define WL_TKO_SUBCMD_MAX_TCP 0 /* max TCP connections supported */ --#define WL_TKO_SUBCMD_PARAM 1 /* configure offload common parameters */ --#define WL_TKO_SUBCMD_CONNECT 2 /* TCP connection info */ --#define WL_TKO_SUBCMD_ENABLE 3 /* enable/disable */ --#define WL_TKO_SUBCMD_STATUS 4 /* TCP connection status */ -- --/* WL_TKO_SUBCMD_MAX_CONNECT subcommand data */ --typedef struct wl_tko_max_tcp --{ -- uint8_t max; /* max TCP connections supported */ -- uint8_t pad[3]; /* 4-byte struct alignment */ --} wl_tko_max_tcp_t; -- --/* WL_TKO_SUBCMD_PARAM subcommand data */ --typedef struct wl_tko_param --{ -- uint16_t interval; /* keepalive tx interval (secs) */ -- uint16_t retry_interval; /* keepalive retry interval (secs) */ -- uint16_t retry_count; /* retry_count */ -- uint8_t pad[2]; /* 4-byte struct alignment */ --} wl_tko_param_t; -- --/* WL_TKO_SUBCMD_CONNECT subcommand data -- * invoke with unique 'index' for each TCP connection -- */ --typedef struct wl_tko_connect --{ -- uint8_t index; /* TCP connection index, 0 to max-1 */ -- uint8_t ip_addr_type; /* 0 - IPv4, 1 - IPv6 */ -- uint16_t local_port; /* local port */ -- uint16_t remote_port; /* remote port */ -- uint32_t local_seq; /* local sequence number */ -- uint32_t remote_seq; /* remote sequence number */ -- uint16_t request_len; /* TCP keepalive request packet length */ -- uint16_t response_len; /* TCP keepalive response packet length */ -- uint8_t data[1]; /* variable length field containing local/remote IPv4/IPv6, -- * TCP keepalive request packet, TCP keepalive response packet -- * For IPv4, length is 4 * 2 + request_length + response_length -- * offset 0 - local IPv4 -- * offset 4 - remote IPv4 -- * offset 8 - TCP keepalive request packet -- * offset 8+request_length - TCP keepalive response packet -- * For IPv6, length is 16 * 2 + request_length + response_length -- * offset 0 - local IPv6 -- * offset 16 - remote IPv6 -- * offset 32 - TCP keepalive request packet -- * offset 32+request_length - TCP keepalive response packet -- */ --} wl_tko_connect_t; -- --/* WL_TKO_SUBCMD_CONNECT subcommand data to GET configured info for specific index */ --typedef struct wl_tko_get_connect --{ -- uint8_t index; /* TCP connection index, 0 to max-1 */ -- uint8_t pad[3]; /* 4-byte struct alignment */ --} wl_tko_get_connect_t; -- --typedef struct wl_tko_enable --{ -- uint8_t enable; /* 1 - enable, 0 - disable */ -- uint8_t pad[3]; /* 4-byte struct alignment */ --} wl_tko_enable_t; -- --/* WL_TKO_SUBCMD_STATUS subcommand data */ --/* must be invoked before tko is disabled else status is unavailable */ --typedef struct wl_tko_status --{ -- uint8_t count; /* number of status entries (i.e. equals -- * max TCP connections supported) -- */ -- uint8_t status[1]; /* variable length field contain status for -- * each TCP connection index -- */ --} wl_tko_status_t; --/** Get/Set TKO intervals & retrys */ --struct whd_tko_retry --{ -- uint16_t tko_interval; /**< How often to send (in seconds) */ -- uint16_t tko_retry_count; /**< Max times to retry if original fails */ -- uint16_t tko_retry_interval; /**< Wait time between retries (in seconds) */ --}; -- --/** Status values used in conjunction with whd_tko_status_t */ --typedef enum --{ -- TKO_STATUS_NORMAL = 0, /**< TCP connection normal, no error */ -- TKO_STATUS_NO_RESPONSE = 1, /**< no response to TCP keepalive */ -- TKO_STATUS_NO_TCP_ACK_FLAG = 2, /**< TCP ACK flag not set */ -- TKO_STATUS_UNEXPECT_TCP_FLAG = 3, /**< unexpect TCP flags set other than ACK */ -- TKO_STATUS_SEQ_NUM_INVALID = 4, /**< ACK != sequence number */ -- TKO_STATUS_REMOTE_SEQ_NUM_INVALID = 5, /**< SEQ > remote sequence number */ -- TKO_STATUS_TCP_DATA = 6, /**< TCP data available */ -- TKO_STATUS_UNAVAILABLE = 255, /**< not used/configured */ --} tko_status_t; -- --/** Status of each TCP connection */ --struct whd_tko_status --{ -- uint8_t count; /**< number of status entries */ -- uint8_t status[MAX_TKO_CONN]; /**< each TCP status */ --}; -- --/** Struct to query FW for current TKO configuation */ --struct whd_tko_connect --{ -- uint8_t index; /**< TCP connection index, 0 to max-1 */ -- uint8_t ip_addr_type; /**< 0 - IPv4, 1 - IPv6 */ -- uint16_t local_port; /**< local port */ -- uint16_t remote_port; /**< remote port */ -- uint32_t local_seq; /**< local sequence number */ -- uint32_t remote_seq; /**< remote sequence number */ -- uint16_t request_len; /**< TCP keepalive request packet length */ -- uint16_t response_len; /**< TCP keepalive response packet length */ -- uint8_t data[1]; /**< variable length field containing local/remote IPv4/IPv6, -- * TCP keepalive request packet, TCP keepalive response packet -- * For IPv4, length is 4 * 2 + request_length + response_length -- * offset 0 - local IPv4 -- * offset 4 - remote IPv4 -- * offset 8 - TCP keepalive request packet -- * offset 8+request_length - TCP keepalive response packet -- * For IPv6, length is 16 * 2 + request_length + response_length -- * offset 0 - local IPv6 -- * offset 16 - remote IPv6 -- * offset 32 - TCP keepalive request packet -- * offset 32+request_length - TCP keepalive response packet -- */ --}; -- --#ifdef __cplusplus --} /* extern "C" */ --#endif -- --#endif -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_ap.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_ap.c -deleted file mode 100644 -index 719b88497a..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_ap.c -+++ /dev/null -@@ -1,772 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides generic APSTA functionality that chip specific files use -- */ --#include "whd_debug.h" --#include "whd_ap.h" --#include "bus_protocols/whd_chip_reg.h" --#include "whd_chip_constants.h" --#include "whd_chip.h" --#include "whd_sdpcm.h" --#include "whd_thread_internal.h" --#include "whd_events_int.h" --#include "whd_int.h" --#include "whd_utils.h" --#include "whd_wifi_api.h" --#include "whd_buffer_api.h" --#include "whd_wlioctl.h" -- --/****************************************************** --** @cond Constants --*******************************************************/ -- --#define WLC_EVENT_MSG_LINK (0x01) --#define RATE_SETTING_11_MBPS (11000000 / 500000) --#define AMPDU_AP_DEFAULT_BA_WSIZE 8 --#define AMPDU_STA_DEFAULT_BA_WSIZE 8 --#define AMPDU_STA_DEFAULT_MPDU 4 /* STA default num MPDU per AMPDU */ --#define WEP40_KEY_LENGTH 5 --#define WEP104_KEY_LENGTH 13 --#define FORMATTED_ASCII_WEP40_KEY_LENGTH 28 /* For 5 bytes key */ --#define FORMATTED_ASCII_WEP104_KEY_LENGTH 60 /* For 13 bytes key */ -- --/****************************************************** --** Enumerations --*******************************************************/ --typedef enum --{ -- BSS_AP = 3, -- BSS_STA = 2, -- BSS_UP = 1, -- BSS_DOWN = 0 --} bss_arg_option_t; -- --typedef enum --{ -- WEP_OPEN_SYSTEM_AUTHENTICATION = 0, -- WEP_SHARED_KEY_AUTHENTICATION = 1 --} wep_authentication_type_t; -- --/****************************************************** -- * * Function Declarations -- * ******************************************************/ --static void *whd_handle_apsta_event(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, void *handler_user_data); -- --/****************************************************** -- * Variables Definitions -- *****************************************************/ --static const whd_event_num_t apsta_events[] = { WLC_E_IF, WLC_E_LINK, WLC_E_NONE }; --/****************************************************** --* Function Definitions --******************************************************/ -- --void whd_ap_info_init(whd_driver_t whd_driver) --{ -- whd_driver->ap_info.ap_is_up = WHD_FALSE; -- whd_driver->ap_info.is_waiting_event = WHD_FALSE; --} -- --void whd_wifi_set_ap_is_up(whd_driver_t whd_driver, whd_bool_t new_state) --{ -- if (whd_driver->ap_info.ap_is_up != new_state) -- { -- whd_driver->ap_info.ap_is_up = new_state; -- } --} -- --whd_bool_t whd_wifi_get_ap_is_up(whd_driver_t whd_driver) --{ -- return whd_driver->ap_info.ap_is_up; --} -- --whd_result_t whd_wifi_set_block_ack_window_size_common(whd_interface_t ifp, uint16_t ap_win_size, uint16_t sta_win_size) --{ -- whd_result_t retval; -- uint16_t block_ack_window_size = ap_win_size; -- -- /* If the AP interface is already up then don't change the Block Ack window size */ -- if (ifp->role == WHD_AP_ROLE) -- { -- return WHD_SUCCESS; -- } -- -- if (ifp->role == WHD_STA_ROLE) -- { -- block_ack_window_size = sta_win_size; -- } -- -- retval = whd_wifi_set_iovar_value(ifp, IOVAR_STR_AMPDU_BA_WINDOW_SIZE, ( uint32_t )block_ack_window_size); -- -- whd_assert("set_block_ack_window_size: Failed to set block ack window size\r\n", retval == WHD_SUCCESS); -- -- return retval; --} -- --whd_result_t whd_wifi_set_ampdu_parameters_common(whd_interface_t ifp, uint8_t ba_window_size, int8_t ampdu_mpdu, -- uint8_t rx_factor) --{ -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_AMPDU_BA_WINDOW_SIZE, ba_window_size) ); -- -- /* Set number of MPDUs available for AMPDU */ -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_AMPDU_MPDU, ( uint32_t )ampdu_mpdu) ); -- -- if (rx_factor != AMPDU_RX_FACTOR_INVALID) -- { -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_AMPDU_RX_FACTOR, rx_factor) ); -- } -- return WHD_SUCCESS; --} -- --/** Sets the chip specific AMPDU parameters for AP and STA -- * For SDK 3.0, and beyond, each chip will need it's own function for setting AMPDU parameters. -- */ --whd_result_t whd_wifi_set_ampdu_parameters(whd_interface_t ifp) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- /* Get the chip number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) ) -- { -- return whd_wifi_set_ampdu_parameters_common(ifp, AMPDU_STA_DEFAULT_BA_WSIZE, AMPDU_MPDU_AUTO, -- AMPDU_RX_FACTOR_64K); -- } -- else if (wlan_chip_id == 43909) -- { -- return whd_wifi_set_ampdu_parameters_common(ifp, AMPDU_STA_DEFAULT_BA_WSIZE, AMPDU_MPDU_AUTO, -- AMPDU_RX_FACTOR_INVALID); -- } -- else -- { -- return whd_wifi_set_ampdu_parameters_common(ifp, AMPDU_STA_DEFAULT_BA_WSIZE, AMPDU_STA_DEFAULT_MPDU, -- AMPDU_RX_FACTOR_8K); -- } --} -- --/* All chips */ --static void *whd_handle_apsta_event(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, void *handler_user_data) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- whd_ap_int_info_t *ap; -- -- UNUSED_PARAMETER(event_header); -- UNUSED_PARAMETER(event_data); -- UNUSED_PARAMETER(handler_user_data); -- -- ap = &whd_driver->ap_info; -- -- if (ap->is_waiting_event == WHD_TRUE) -- { -- if ( (event_header->event_type == (whd_event_num_t)WLC_E_LINK) || -- (event_header->event_type == WLC_E_IF) ) -- { -- whd_result_t result; -- result = cy_rtos_set_semaphore(&ap->whd_wifi_sleep_flag, WHD_FALSE); -- WPRINT_WHD_DEBUG( ("%s failed to post AP link semaphore at %d\n", __func__, __LINE__) ); -- REFERENCE_DEBUG_ONLY_VARIABLE(result); -- } -- } -- return handler_user_data; --} -- --/* All chips */ --uint32_t whd_wifi_init_ap(whd_interface_t ifp, whd_ssid_t *ssid, whd_security_t auth_type, -- const uint8_t *security_key, uint8_t key_length, uint8_t channel) --{ -- whd_driver_t whd_driver; -- whd_bool_t wait_for_interface = WHD_FALSE; -- whd_result_t result; -- whd_buffer_t response; -- whd_buffer_t buffer; -- whd_interface_t prim_ifp; -- whd_ap_int_info_t *ap; -- uint32_t *data; -- uint32_t bss_index; -- uint16_t wlan_chip_id; -- uint16_t event_entry = (uint16_t)0xFF; -- -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- ap = &whd_driver->ap_info; -- -- prim_ifp = whd_get_primary_interface(whd_driver); -- if (prim_ifp == NULL) -- { -- WPRINT_WHD_ERROR( ("%s failed at %d \n", __func__, __LINE__) ); -- return WHD_UNKNOWN_INTERFACE; -- } -- -- /* Turn off APSTA when creating AP mode on primary interface */ -- if (ifp == prim_ifp) -- { -- CHECK_RETURN(whd_wifi_set_ioctl_buffer(prim_ifp, WLC_DOWN, NULL, 0) ); -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)4, IOVAR_STR_APSTA); -- CHECK_IOCTL_BUFFER(data); -- *data = 0; -- result = whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- if ( (result != WHD_SUCCESS) && (result != WHD_WLAN_UNSUPPORTED) ) -- { -- WPRINT_WHD_ERROR( ("Could not turn off apsta\n") ); -- return result; -- } -- CHECK_RETURN(whd_wifi_set_ioctl_buffer(prim_ifp, WLC_UP, NULL, 0) ); -- } -- -- bss_index = ifp->bsscfgidx; -- /* Get the Chip Number */ -- wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- -- /* Configuration need to come from some structure whd_driver */ --#if 0 -- uint32_t *auth; -- uint16_t length; --#endif -- -- ifp->role = WHD_AP_ROLE; -- -- if (wlan_chip_id == 4334) -- { -- if (auth_type == WHD_SECURITY_WEP_PSK) -- { -- WPRINT_WHD_ERROR( ("WEP auth type is not allowed , %s failed at line %d \n", __func__, __LINE__) ); -- return WHD_WEP_NOT_ALLOWED; -- } -- } -- if ( ( (auth_type == WHD_SECURITY_WPA_TKIP_PSK) || (auth_type == WHD_SECURITY_WPA2_AES_PSK) || -- (auth_type == WHD_SECURITY_WPA2_MIXED_PSK) ) && -- ( (key_length < (uint8_t)8) || (key_length > (uint8_t)64) ) ) -- { -- WPRINT_WHD_INFO( ("Error: WPA security key length must be between 8 and 64\n") ); -- return WHD_WPA_KEYLEN_BAD; -- } -- -- /* Need to decide on the wep configuration */ --#if 0 -- else if ( ( (auth_type == WHD_SECURITY_WEP_PSK) || (auth_type == WHD_SECURITY_WEP_SHARED) ) && -- ( (key_length != FORMATTED_ASCII_WEP40_KEY_LENGTH) && -- (key_length != FORMATTED_ASCII_WEP104_KEY_LENGTH) ) ) -- { -- WPRINT_WHD_INFO( ("Error: WEP security Key length must be either 5 / 13 bytes\n") ); -- return WHD_WEP_KEYLEN_BAD; -- } --#endif -- if ( (whd_wifi_get_ap_is_up(whd_driver) == WHD_TRUE) ) -- { -- WPRINT_WHD_INFO( ("Error: Soft AP or Wi-Fi Direct group owner already up\n") ); -- return WHD_AP_ALREADY_UP; -- } -- --/* if (wlan_chip_id == 4334 || wlan_chip_id == 43340 || wlan_chip_id == 43342 ) -- { -- if ( whd_wifi_set_block_ack_window_size( ifp ) != WHD_SUCCESS ) -- { -- return WHD_SET_BLOCK_ACK_WINDOW_FAIL; -- } -- }*/ -- -- /* Query bss state (does it exist? if so is it UP?) */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)4, IOVAR_STR_BSS); -- CHECK_IOCTL_BUFFER(data); -- -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *data = htod32( (uint32_t)CHIP_AP_INTERFACE ); -- } -- else -- { -- *data = htod32( (uint32_t)bss_index ); -- } -- -- if ( (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- if (whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) != WHD_SUCCESS) -- { -- /* Note: We don't need to release the response packet since the iovar failed */ -- wait_for_interface = WHD_TRUE; -- } -- else -- { -- /* Check if the BSS is already UP, if so return */ -- uint32_t *data2 = (uint32_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- *data2 = dtoh32 (*data2); -- if (*data2 == (uint32_t)BSS_UP) -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- whd_wifi_set_ap_is_up(whd_driver, WHD_TRUE); -- ap->is_waiting_event = WHD_FALSE; -- return WHD_SUCCESS; -- } -- else -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- } -- } -- -- if (whd_cdc_send_iovar(prim_ifp, CDC_GET, buffer, &response) != WHD_SUCCESS) -- { -- /* Note: We don't need to release the response packet since the iovar failed */ -- wait_for_interface = WHD_TRUE; -- } -- else -- { -- /* Check if the BSS is already UP, if so return */ -- uint32_t *data2 = (uint32_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- *data2 = dtoh32 (*data2); -- if (*data2 == (uint32_t)BSS_UP) -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- whd_wifi_set_ap_is_up(whd_driver, WHD_TRUE); -- ap->is_waiting_event = WHD_FALSE; -- return WHD_SUCCESS; -- } -- else -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- } -- -- CHECK_RETURN(cy_rtos_init_semaphore(&ap->whd_wifi_sleep_flag, 1, 0) ); -- -- ap->is_waiting_event = WHD_TRUE; -- /* Register for interested events */ -- CHECK_RETURN_WITH_SEMAPHORE(whd_management_set_event_handler(ifp, apsta_events, whd_handle_apsta_event, -- NULL, &event_entry), &ap->whd_wifi_sleep_flag); -- if (event_entry >= WHD_EVENT_HANDLER_LIST_SIZE) -- { -- WPRINT_WHD_DEBUG( ("Event handler registration failed for AP events in function %s and line %d\n", -- __func__, __LINE__) ); -- return WHD_UNFINISHED; -- } -- ifp->event_reg_list[WHD_AP_EVENT_ENTRY] = event_entry; -- -- if (wait_for_interface == WHD_TRUE) -- { -- CHECK_RETURN_WITH_SEMAPHORE(cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, -- WHD_FALSE), &ap->whd_wifi_sleep_flag); -- } -- ap->is_waiting_event = WHD_FALSE; -- -- if (prim_ifp == ifp) -- { -- /* Set AP mode */ -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag); -- *data = 1; /* Turn on AP */ -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_AP, buffer, 0), -- &ap->whd_wifi_sleep_flag); -- } --#if 0 -- if (whd_wifi_set_block_ack_window_size(ifp) != WHD_SUCCESS) -- { -- return WHD_SET_BLOCK_ACK_WINDOW_FAIL; -- } --#endif -- -- if (NULL_MAC(ifp->mac_addr.octet) ) -- { -- /* Change the AP MAC address to be different from STA MAC */ -- if ( (result = whd_wifi_get_mac_address(prim_ifp, &ifp->mac_addr) ) != WHD_SUCCESS ) -- { -- WPRINT_WHD_INFO ( (" Get STA MAC address failed result=%" PRIu32 "\n", result) ); -- return result; -- } -- else -- { -- WPRINT_WHD_INFO ( (" Get STA MAC address success\n") ); -- } -- } -- -- if ( (result = whd_wifi_set_mac_address(ifp, ifp->mac_addr) ) != WHD_SUCCESS ) -- { -- WPRINT_WHD_INFO ( (" Set AP MAC address failed result=%" PRIu32 "\n", result) ); -- return result; -- } -- -- /* Set the SSID */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)40, "bsscfg:" IOVAR_STR_SSID); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag); -- if (wlan_chip_id == 4334) -- { -- data[0] = htod32( (uint32_t)CHIP_AP_INTERFACE ); /* Set the bsscfg index */ -- } -- else -- { -- data[0] = htod32(bss_index); /* Set the bsscfg index */ -- } -- data[1] = htod32(ssid->length); /* Set the ssid length */ -- memcpy(&data[2], (uint8_t *)ssid->value, ssid->length); -- if ( (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0), &ap->whd_wifi_sleep_flag); -- } -- else -- { -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0), &ap->whd_wifi_sleep_flag); -- } -- -- /* Set the channel */ -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag); -- *data = htod32(channel); -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_CHANNEL, buffer, 0), -- &ap->whd_wifi_sleep_flag); -- -- /* Need to decide on the wep configuration */ --#if 0 -- if ( (auth_type == WHD_SECURITY_WEP_PSK) || (auth_type == WHD_SECURITY_WEP_SHARED) ) -- { -- for (length = 0; length < key_length; length = (uint16_t)(length + 2 + security_key[1]) ) -- { -- const whd_wep_key_t *in_key = (const whd_wep_key_t *)&security_key[length]; -- wl_wsec_key_t *out_key = (wl_wsec_key_t *)whd_cdc_get_ioctl_buffer(&buffer, sizeof(wl_wsec_key_t) ); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(out_key, &ap->whd_wifi_sleep_flag); -- memset(out_key, 0, sizeof(wl_wsec_key_t) ); -- out_key->index = in_key->index; -- out_key->len = in_key->length; -- memcpy(out_key->data, in_key->data, in_key->length); -- switch (in_key->length) -- { -- case WEP40_KEY_LENGTH: -- out_key->algo = (uint32_t)CRYPTO_ALGO_WEP1; -- break; -- case WEP104_KEY_LENGTH: -- out_key->algo = (uint32_t)CRYPTO_ALGO_WEP128; -- break; -- default: -- whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX); -- return WHD_INVALID_KEY; -- } -- /* Set the first entry as primary key by default */ -- -- if (length == 0) -- { -- out_key->flags |= WL_PRIMARY_KEY; -- } -- out_key->index = htod32(out_key->index); -- out_key->len = htod32(out_key->len); -- out_key->algo = htod32(out_key->algo); -- out_key->flags = htod32(out_key->flags); -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_KEY, buffer, -- NULL), &ap->whd_wifi_sleep_flag); -- } -- -- /* Set authentication type */ -- auth = (uint32_t *)whd_cdc_get_ioctl_buffer(&buffer, (uint16_t)4); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(auth, &ap->whd_wifi_sleep_flag); -- if (auth_type == WHD_SECURITY_WEP_SHARED) -- { -- *auth = WEP_SHARED_KEY_AUTHENTICATION; /* 1 = Shared Key authentication */ -- } -- else -- { -- *auth = WEP_OPEN_SYSTEM_AUTHENTICATION; /* 0 = Open System authentication */ -- } -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_AUTH, buffer, -- 0), &ap->whd_wifi_sleep_flag); -- } --#endif -- -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_WSEC); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag); -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- data[0] = htod32( (uint32_t)CHIP_AP_INTERFACE ); -- } -- else -- { -- data[0] = htod32(bss_index); -- } -- if ( (auth_type & WPS_ENABLED) != 0 ) -- { -- data[1] = htod32( (uint32_t)( (auth_type & (~WPS_ENABLED) ) | SES_OW_ENABLED ) ); -- } -- else -- { -- data[1] = htod32( (uint32_t)auth_type ); -- } -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0), &ap->whd_wifi_sleep_flag); -- if (wlan_chip_id == 4334) -- { -- if (auth_type != WHD_SECURITY_OPEN) -- { -- wsec_pmk_t *psk; -- -- /* Set the wpa auth */ -- data = -- (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_WPA_AUTH); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag); -- data[0] = htod32( (uint32_t)CHIP_AP_INTERFACE ); -- data[1] = htod32( (uint32_t)(auth_type == WHD_SECURITY_WPA_TKIP_PSK) ? -- (WPA_AUTH_PSK) : (WPA2_AUTH_PSK | WPA_AUTH_PSK) ); -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0), &ap->whd_wifi_sleep_flag); -- -- /* Set the passphrase */ -- psk = (wsec_pmk_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(wsec_pmk_t) ); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(psk, &ap->whd_wifi_sleep_flag); -- memcpy(psk->key, security_key, key_length); -- psk->key_len = htod16(key_length); -- psk->flags = htod16( (uint16_t)WSEC_PASSPHRASE ); -- CHECK_RETURN(cy_rtos_delay_milliseconds(1) ); -- /* Delay required to allow radio firmware to be ready to receive PMK and avoid intermittent failure */ -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_WSEC_PMK, buffer, 0), -- &ap->whd_wifi_sleep_flag); -- } -- } -- else -- { -- if ( (auth_type != WHD_SECURITY_OPEN) && (auth_type != WHD_SECURITY_WEP_PSK) && -- (auth_type != WHD_SECURITY_WEP_SHARED) ) -- { -- wsec_pmk_t *psk; -- -- /* Set the wpa auth */ -- data = -- (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_WPA_AUTH); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag); -- if ( (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- data[0] = htod32( (uint32_t)CHIP_AP_INTERFACE ); -- } -- else -- { -- data[0] = htod32(bss_index); -- } -- data[1] = -- htod32( (uint32_t)(auth_type == -- WHD_SECURITY_WPA_TKIP_PSK) ? (WPA_AUTH_PSK) : (WPA2_AUTH_PSK | WPA_AUTH_PSK) ); -- if ( (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0), &ap->whd_wifi_sleep_flag); -- } -- else -- { -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0), -- &ap->whd_wifi_sleep_flag); -- } -- -- /* Set the passphrase */ -- psk = (wsec_pmk_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(wsec_pmk_t) ); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(psk, &ap->whd_wifi_sleep_flag); -- memcpy(psk->key, security_key, key_length); -- psk->key_len = htod16(key_length); -- psk->flags = htod16( (uint16_t)WSEC_PASSPHRASE ); -- CHECK_RETURN(cy_rtos_delay_milliseconds(1) ); -- /* Delay required to allow radio firmware to be ready to receive PMK and avoid intermittent failure */ -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_WSEC_PMK, buffer, -- 0), &ap->whd_wifi_sleep_flag); -- } -- } -- -- /* Set the multicast transmission rate to 11 Mbps rather than the default 1 Mbps */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)4, IOVAR_STR_2G_MULTICAST_RATE); -- CHECK_IOCTL_BUFFER(data); -- *data = htod32( (uint32_t)RATE_SETTING_11_MBPS ); -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- result = whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL); -- whd_assert("start_ap: Failed to set multicast transmission rate\r\n", result == WHD_SUCCESS); -- } -- else -- { -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL), &ap->whd_wifi_sleep_flag); -- } -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_start_ap(whd_interface_t ifp) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- uint16_t wlan_chip_id; -- whd_ap_int_info_t *ap; -- whd_interface_t prim_ifp; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- prim_ifp = whd_get_primary_interface(whd_driver); -- -- if (prim_ifp == NULL) -- { -- return WHD_UNKNOWN_INTERFACE; -- } -- -- ap = &whd_driver->ap_info; -- /* Get the Chip Number */ -- wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- -- ap->is_waiting_event = WHD_TRUE; -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, IOVAR_STR_BSS); -- CHECK_IOCTL_BUFFER_WITH_SEMAPHORE(data, &ap->whd_wifi_sleep_flag); -- -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) || (wlan_chip_id == 43455) || (wlan_chip_id == 43430) ) -- { -- data[0] = htod32(ifp->bsscfgidx); -- } -- else -- { -- data[0] = htod32( (uint32_t)CHIP_AP_INTERFACE ); -- } -- -- data[1] = htod32( (uint32_t)BSS_UP ); -- CHECK_RETURN_WITH_SEMAPHORE(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0), &ap->whd_wifi_sleep_flag); -- -- /* Wait until AP is brought up */ -- CHECK_RETURN_WITH_SEMAPHORE(cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, -- WHD_FALSE), &ap->whd_wifi_sleep_flag); -- ap->is_waiting_event = WHD_FALSE; -- -- whd_wifi_set_ap_is_up(whd_driver, WHD_TRUE); -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_stop_ap(whd_interface_t ifp) --{ -- uint32_t *data; -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_result_t result; -- whd_result_t result2; -- whd_interface_t prim_ifp; -- whd_driver_t whd_driver; -- whd_ap_int_info_t *ap; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- ap = &whd_driver->ap_info; -- -- prim_ifp = whd_get_primary_interface(whd_driver); -- -- if (prim_ifp == NULL) -- { -- return WHD_UNKNOWN_INTERFACE; -- } -- -- /* Get Chip Number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) || (wlan_chip_id == 43455) || (wlan_chip_id == 43430) ) -- { -- /* Query bss state (does it exist? if so is it UP?) */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)4, IOVAR_STR_BSS); -- CHECK_IOCTL_BUFFER(data); -- *data = ifp->bsscfgidx; -- } -- else -- { -- /* Query bss state (does it exist? if so is it UP?) */ -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)4, IOVAR_STR_BSS); -- CHECK_IOCTL_BUFFER(data); -- *data = htod32( (uint32_t)CHIP_AP_INTERFACE ); -- } -- result = whd_cdc_send_iovar(prim_ifp, CDC_GET, buffer, &response); -- if (result == WHD_WLAN_NOTFOUND) -- { -- /* AP interface does not exist - i.e. it is down */ -- whd_wifi_set_ap_is_up(whd_driver, WHD_FALSE); -- return WHD_SUCCESS; -- } -- -- CHECK_RETURN(result); -- -- *data = dtoh32(*(uint32_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response) ); -- if (data[0] != (uint32_t)BSS_UP) -- { -- /* AP interface indicates it is not up - i.e. it is down */ -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- whd_wifi_set_ap_is_up(whd_driver, WHD_FALSE); -- return WHD_SUCCESS; -- } -- -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- ap->is_waiting_event = WHD_TRUE; -- /* set BSS down */ -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43362) || (wlan_chip_id == 43455) || (wlan_chip_id == 43430) ) -- { -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, IOVAR_STR_BSS); -- CHECK_IOCTL_BUFFER(data); -- data[0] = htod32(ifp->bsscfgidx); -- data[1] = htod32( (uint32_t)BSS_DOWN ); -- CHECK_RETURN(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0) ); -- } -- else -- { -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, IOVAR_STR_BSS); -- CHECK_IOCTL_BUFFER(data); -- data[0] = htod32( (uint32_t)CHIP_AP_INTERFACE ); -- data[1] = htod32( (uint32_t)BSS_DOWN ); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0) ); -- } -- if ( (wlan_chip_id != 43430) && (wlan_chip_id != 43455) ) -- { -- result = cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, WHD_FALSE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error getting a semaphore, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- } -- /* Disable AP mode only if AP is on primary interface */ -- if (prim_ifp == ifp) -- { -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- CHECK_IOCTL_BUFFER(data); -- *data = 0; -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_AP, buffer, 0) ); -- } -- /* Wait until AP is brought down */ -- result = cy_rtos_get_semaphore(&ap->whd_wifi_sleep_flag, (uint32_t)10000, WHD_FALSE); -- ap->is_waiting_event = WHD_FALSE; -- result2 = cy_rtos_deinit_semaphore(&ap->whd_wifi_sleep_flag); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error getting a semaphore, %s failed at %d \n", __func__, __LINE__) ); -- return result; -- } -- if (result2 != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error deleting semaphore, %s failed at %d \n", __func__, __LINE__) ); -- return result2; -- } -- -- CHECK_RETURN(whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_AP_EVENT_ENTRY]) ); -- ifp->event_reg_list[WHD_AP_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED; -- whd_wifi_set_ap_is_up(whd_driver, WHD_FALSE); -- -- ifp->role = WHD_INVALID_ROLE; -- return WHD_SUCCESS; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_buffer_api.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_buffer_api.c -deleted file mode 100644 -index 966cf51968..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_buffer_api.c -+++ /dev/null -@@ -1,220 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides generic APSTA functionality that chip specific files use -- */ -- --#include "whd_debug.h" --#include "whd_buffer_api.h" -- --/****************************************************** --** @cond Constants --*******************************************************/ -- --/****************************************************** --** Enumerations --*******************************************************/ -- --/****************************************************** --** Function Declarations --*******************************************************/ -- --/****************************************************** -- * Variables Definitions -- *****************************************************/ -- --/****************************************************** --* Function Definitions --******************************************************/ --/** Allocates a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Attempts to allocate a packet buffer of the size requested. It can do this -- * by allocating a pre-existing packet from a pool, using a static buffer, -- * or by dynamically allocating memory. The method of allocation does not -- * concern WHD, however it must match the way the network stack expects packet -- * buffers to be allocated. -- * -- * @param buffer : A pointer which receives the allocated packet buffer handle -- * @param direction : Indicates transmit/receive direction that the packet buffer is -- * used for. This may be needed if tx/rx pools are separate. -- * @param size : The number of bytes to allocate. -- * @param wait : Whether to wait for a packet buffer to be available -- * -- * @return : WHD_SUCCESS or error code -- * -- */ --whd_result_t whd_host_buffer_get(whd_driver_t whd_driver, whd_buffer_t *buffer, whd_buffer_dir_t direction, -- uint16_t size, uint32_t wait) --{ -- if (whd_driver->buffer_if->whd_host_buffer_get) -- { -- return whd_driver->buffer_if->whd_host_buffer_get(buffer, direction, size, wait); -- } -- else -- { -- WPRINT_WHD_INFO( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- --/** Releases a packet buffer -- * -- * Implemented in the port layer interface, which will be specific to the -- * buffering scheme in use. -- * This function is used by WHD to indicate that it no longer requires -- * a packet buffer. The buffer can then be released back into a pool for -- * reuse, or the dynamically allocated memory can be freed, according to -- * how the packet was allocated. -- * Returns void since WHD cannot do anything about failures -- * -- * @param buffer : The handle of the packet buffer to be released -- * @param direction : Indicates transmit/receive direction that the packet buffer has -- * been used for. This might be needed if tx/rx pools are separate. -- * -- */ --whd_result_t whd_buffer_release(whd_driver_t whd_driver, whd_buffer_t buffer, whd_buffer_dir_t direction) --{ -- if (whd_driver->buffer_if->whd_buffer_release) -- { -- whd_driver->buffer_if->whd_buffer_release(buffer, direction); -- return WHD_SUCCESS; -- } -- else -- { -- WPRINT_WHD_INFO( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- --/** Retrieves the current pointer of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, this function allows WHD to get -- * the current 'front' location pointer. -- * -- * @param buffer : The handle of the packet buffer whose pointer is to be retrieved -- * -- * @return : The packet buffer's current pointer. -- */ --uint8_t *whd_buffer_get_current_piece_data_pointer(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- if (whd_driver->buffer_if->whd_buffer_get_current_piece_data_pointer) -- { -- return whd_driver->buffer_if->whd_buffer_get_current_piece_data_pointer(buffer); -- } -- else -- { -- WPRINT_WHD_INFO( ("Function pointers not provided .\n") ); -- } -- -- return NULL; --} -- --/** Retrieves the size of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * Since packet buffers usually need to be created with space at the -- * front for additional headers, the memory block used to contain a packet buffer -- * will often be larger than the current size of the packet buffer data. -- * This function allows WHD to retrieve the current size of a packet buffer's data. -- * -- * @param buffer : The handle of the packet buffer whose size is to be retrieved -- * -- * @return : The size of the packet buffer. -- */ --uint16_t whd_buffer_get_current_piece_size(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- if (whd_driver->buffer_if->whd_buffer_get_current_piece_size) -- { -- return whd_driver->buffer_if->whd_buffer_get_current_piece_size(buffer); -- } -- else -- { -- WPRINT_WHD_INFO( ("Function pointers not provided .\n") ); -- } -- -- return 0; --} -- --/** Sets the current size of a WHD packet -- * -- * -- * Implemented in the port layer interface which is specific to the -- * buffering scheme in use. -- * This function sets the current length of a WHD packet buffer -- * -- * @param buffer : The packet to be modified -- * @param size : The new size of the packet buffer -- * -- * @return : WHD_SUCCESS or error code -- */ --whd_result_t whd_buffer_set_size(whd_driver_t whd_driver, whd_buffer_t buffer, uint16_t size) --{ -- if (whd_driver->buffer_if->whd_buffer_set_size) -- { -- return whd_driver->buffer_if->whd_buffer_set_size(buffer, size); -- } -- else -- { -- WPRINT_WHD_INFO( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- --/** Moves the current pointer of a packet buffer -- * -- * Implemented in the port layer interface which is specific to the buffering scheme in use. -- * -- * Since packet buffers usually need to be created with space at the front for additional headers, -- * this function allows WHD to move the current 'front' location pointer so that it has space to -- * add headers to transmit packets, and so that the network stack does not see the internal WHD -- * headers on received packets. -- * -- * @param buffer : A pointer to the handle of the current packet buffer for which the -- * current pointer will be moved. On return this may contain a pointer -- * to a newly allocated packet buffer which has been daisy chained to -- * the front of the given one. This would be the case if the given packet -- * buffer didn't have enough space at the front. -- * @param add_remove_amount : This is the number of bytes to move the current pointer of the packet -- * buffer - a negative value increases the space for headers at the front -- * of the packet, a positive value decreases the space. -- * -- * @return : WHD_SUCCESS or error code -- */ --whd_result_t whd_buffer_add_remove_at_front(whd_driver_t whd_driver, whd_buffer_t *buffer, int32_t add_remove_amount) --{ -- if (whd_driver->buffer_if->whd_buffer_add_remove_at_front) -- { -- return whd_driver->buffer_if->whd_buffer_add_remove_at_front(buffer, add_remove_amount); -- } -- else -- { -- WPRINT_WHD_INFO( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_cdc_bdc.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_cdc_bdc.c -deleted file mode 100644 -index 9a4e11b488..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_cdc_bdc.c -+++ /dev/null -@@ -1,723 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include --#include "whd_int.h" --#include "whd_cdc_bdc.h" --#include "whd_events_int.h" --#include "cyabs_rtos.h" --#include "whd_network_types.h" --#include "whd_types_int.h" --#include "whd_wlioctl.h" --#include "whd_thread_internal.h" --#include "whd_buffer_api.h" --#include "whd_network_if.h" -- --/****************************************************** --* Constants --******************************************************/ -- --#define BDC_PROTO_VER (2) /** Version number of BDC header */ --#define BDC_FLAG_VER_SHIFT (4) /** Number of bits to shift BDC version number in the flags field */ --#define BDC_FLAG2_IF_MASK (0x0f) -- --#define ETHER_TYPE_BRCM (0x886C) /** Broadcom Ethertype for identifying event packets - Copied from DHD include/proto/ethernet.h */ --#define BRCM_OUI "\x00\x10\x18" /** Broadcom OUI (Organizationally Unique Identifier): Used in the proprietary(221) IE (Information Element) in all Broadcom devices */ -- --/* QoS related definitions (type of service) */ --#define IPV4_DSCP_OFFSET (15) /** Offset for finding the DSCP field in an IPv4 header */ -- --#define IOCTL_OFFSET (sizeof(whd_buffer_header_t) + 12 + 16) --#define WHD_IOCTL_PACKET_TIMEOUT (0xFFFFFFFF) --#define WHD_IOCTL_TIMEOUT_MS (5000) /** Need to give enough time for coming out of Deep sleep (was 400) */ --#define WHD_IOCTL_MAX_TX_PKT_LEN (1500) -- --/****************************************************** --* Macros --******************************************************/ -- --/****************************************************** --* Local Structures --******************************************************/ -- --/****************************************************** --* Static Variables --******************************************************/ -- --static const uint8_t dscp_to_wmm_qos[] = --{ 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 7 */ -- 1, 1, 1, 1, 1, 1, 1, /* 8 - 14 */ -- 1, 1, 1, 1, 1, 1, 1, /* 15 - 21 */ -- 1, 1, 0, 0, 0, 0, 0, /* 22 - 28 */ -- 0, 0, 0, 5, 5, 5, 5, /* 29 - 35 */ -- 5, 5, 5, 5, 5, 5, 5, /* 36 - 42 */ -- 5, 5, 5, 5, 5, 7, 7, /* 43 - 49 */ -- 7, 7, 7, 7, 7, 7, 7, /* 50 - 56 */ -- 7, 7, 7, 7, 7, 7, 7, /* 57 - 63 */ --}; -- --/****************************************************** --* Static Function Prototypes --******************************************************/ -- --static uint8_t whd_map_dscp_to_priority(whd_driver_t whd_driver, uint8_t dscp_val); -- --/****************************************************** --* Static Functions --******************************************************/ -- --/** Map a DSCP value from an IP header to a WMM QoS priority -- * -- * @param dscp_val : DSCP value from IP header -- * -- * @return wmm_qos : WMM priority -- * -- */ --static uint8_t whd_map_dscp_to_priority(whd_driver_t whd_driver, uint8_t val) --{ -- uint8_t dscp_val = (uint8_t)(val >> 2); /* DSCP field is the high 6 bits of the second byte of an IPv4 header */ -- -- return dscp_to_wmm_qos[dscp_val]; --} -- --void whd_cdc_bdc_info_deinit(whd_driver_t whd_driver) --{ -- whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info; -- -- /* Delete the sleep mutex */ -- (void)cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_sleep); -- -- /* Delete the queue mutex. */ -- (void)cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_mutex); -- -- /* Delete the event list management mutex */ -- (void)cy_rtos_deinit_semaphore(&cdc_bdc_info->event_list_mutex); --} -- --whd_result_t whd_cdc_bdc_info_init(whd_driver_t whd_driver) --{ -- whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info; -- -- /* Create the mutex protecting the packet send queue */ -- if (cy_rtos_init_semaphore(&cdc_bdc_info->ioctl_mutex, 1, 0) != WHD_SUCCESS) -- { -- return WHD_SEMAPHORE_ERROR; -- } -- if (cy_rtos_set_semaphore(&cdc_bdc_info->ioctl_mutex, WHD_FALSE) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- return WHD_SEMAPHORE_ERROR; -- } -- -- /* Create the event flag which signals the whd thread needs to wake up */ -- if (cy_rtos_init_semaphore(&cdc_bdc_info->ioctl_sleep, 1, 0) != WHD_SUCCESS) -- { -- cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_mutex); -- return WHD_SEMAPHORE_ERROR; -- } -- -- /* Create semaphore to protect event list management */ -- if (cy_rtos_init_semaphore(&cdc_bdc_info->event_list_mutex, 1, 0) != WHD_SUCCESS) -- { -- cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_sleep); -- cy_rtos_deinit_semaphore(&cdc_bdc_info->ioctl_mutex); -- return WHD_SEMAPHORE_ERROR; -- } -- if (cy_rtos_set_semaphore(&cdc_bdc_info->event_list_mutex, WHD_FALSE) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- return WHD_SEMAPHORE_ERROR; -- } -- -- /* Initialise the list of event handler functions */ -- memset(cdc_bdc_info->whd_event_list, 0, sizeof(cdc_bdc_info->whd_event_list) ); -- -- return WHD_SUCCESS; --} -- --/** Sends an IOCTL command -- * -- * Sends a I/O Control command to the Broadcom 802.11 device. -- * The data which is set or retrieved must be in a format structure which is appropriate for the particular -- * I/O control being sent. These structures can only be found in the DHD source code such as wl/exe/wlu.c. -- * The I/O control will always respond with a packet buffer which may contain data in a format specific to -- * the I/O control being used. -- * -- * @Note: The caller is responsible for releasing the response buffer. -- * @Note: The function blocks until the IOCTL has completed -- * @Note: Only one IOCTL may happen simultaneously. -- * -- * @param type : CDC_SET or CDC_GET - indicating whether to set or get the I/O control -- * @param send_buffer_hnd : A handle for a packet buffer containing the data value to be sent. -- * @param response_buffer_hnd : A pointer which will receive the handle for the packet buffer -- * containing the response data value received. -- * @param interface : Which interface to send the iovar to (WHD_STA_INTERFACE or WHD_AP_INTERFACE) -- * -- * @return WHD result code -- */ --whd_result_t whd_cdc_send_ioctl(whd_interface_t ifp, cdc_command_type_t type, uint32_t command, -- whd_buffer_t send_buffer_hnd, -- whd_buffer_t *response_buffer_hnd) --{ -- -- uint32_t data_length; -- uint32_t flags; -- uint32_t requested_ioctl_id; -- whd_result_t retval; -- control_header_t *send_packet; -- cdc_header_t *cdc_header; -- uint32_t bss_index = ifp->bsscfgidx; -- whd_driver_t whd_driver = ifp->whd_driver; -- whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info; -- -- /* Validate the command value */ -- if (command > INT_MAX) -- { -- WPRINT_WHD_ERROR( ("The ioctl command value is invalid\n") ); -- return WHD_BADARG; -- } -- -- /* Acquire mutex which prevents multiple simultaneous IOCTLs */ -- retval = cy_rtos_get_semaphore(&cdc_bdc_info->ioctl_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE); -- if (retval != WHD_SUCCESS) -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, send_buffer_hnd, WHD_NETWORK_TX) ); -- return retval; -- } -- -- /* Count request ioctl ID after acquiring ioctl mutex */ -- requested_ioctl_id = (uint32_t)(++cdc_bdc_info->requested_ioctl_id); -- -- /* Get the data length and cast packet to a CDC BUS header */ -- data_length = -- (uint32_t)(whd_buffer_get_current_piece_size(whd_driver, -- send_buffer_hnd) - sizeof(bus_common_header_t) - -- sizeof(cdc_header_t) ); -- -- send_packet = (control_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, send_buffer_hnd); -- -- WHD_IOCTL_LOG_ADD(ifp->whd_driver, command, send_buffer_hnd); -- -- /* Check if IOCTL is actually IOVAR */ -- if ( (command == WLC_SET_VAR) || (command == WLC_GET_VAR) ) -- { -- uint8_t *data = (uint8_t *)DATA_AFTER_HEADER(send_packet); -- uint8_t *ptr = data; -- -- /* Calculate the offset added to compensate for IOVAR string creating unaligned data section */ -- while (*ptr == 0) -- { -- ptr++; -- } -- if (data != ptr) -- { -- data_length -= (uint32_t)(ptr - data); -- memmove(data, ptr, data_length); -- CHECK_RETURN(whd_buffer_set_size(whd_driver, send_buffer_hnd, -- (uint16_t)(data_length + sizeof(bus_common_header_t) + -- sizeof(cdc_header_t) ) ) ); -- } -- } -- -- /* Prepare the CDC header */ -- send_packet->cdc_header.cmd = htod32(command); -- send_packet->cdc_header.len = htod32(data_length); -- -- send_packet->cdc_header.flags = ( (requested_ioctl_id << CDCF_IOC_ID_SHIFT) -- & CDCF_IOC_ID_MASK ) | type | bss_index << CDCF_IOC_IF_SHIFT; -- send_packet->cdc_header.flags = htod32(send_packet->cdc_header.flags); -- -- send_packet->cdc_header.status = 0; -- -- /* Manufacturing test can receive big buffers, but sending big buffers causes a wlan firmware error */ -- /* Even though data portion needs to be truncated, cdc_header should have the actual length of the ioctl packet */ -- if (whd_buffer_get_current_piece_size(whd_driver, send_buffer_hnd) > WHD_IOCTL_MAX_TX_PKT_LEN) -- { -- CHECK_RETURN(whd_buffer_set_size(whd_driver, send_buffer_hnd, WHD_IOCTL_MAX_TX_PKT_LEN) ); -- } -- -- /* Store the length of the data and the IO control header and pass "down" */ -- whd_send_to_bus(whd_driver, send_buffer_hnd, CONTROL_HEADER); -- -- -- /* Wait till response has been received */ -- retval = cy_rtos_get_semaphore(&cdc_bdc_info->ioctl_sleep, (uint32_t)WHD_IOCTL_TIMEOUT_MS, WHD_FALSE); -- if (retval != WHD_SUCCESS) -- { -- /* Release the mutex since ioctl response will no longer be referenced. */ -- CHECK_RETURN(cy_rtos_set_semaphore(&cdc_bdc_info->ioctl_mutex, WHD_FALSE) ); -- return retval; -- } -- -- cdc_header = (cdc_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, cdc_bdc_info->ioctl_response); -- flags = dtoh32(cdc_header->flags); -- -- retval = (whd_result_t)(WLAN_ENUM_OFFSET - dtoh32(cdc_header->status) ); -- -- /* Check if the caller wants the response */ -- if (response_buffer_hnd != NULL) -- { -- *response_buffer_hnd = cdc_bdc_info->ioctl_response; -- CHECK_RETURN(whd_buffer_add_remove_at_front(whd_driver, response_buffer_hnd, sizeof(cdc_header_t) ) ); -- } -- else -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, cdc_bdc_info->ioctl_response, WHD_NETWORK_RX) ); -- } -- -- cdc_bdc_info->ioctl_response = NULL; -- -- /* Release the mutex since ioctl response will no longer be referenced. */ -- CHECK_RETURN(cy_rtos_set_semaphore(&cdc_bdc_info->ioctl_mutex, WHD_FALSE) ); -- -- /* Check whether the IOCTL response indicates it failed. */ -- if ( (flags & CDCF_IOC_ERROR) != 0 ) -- { -- if (response_buffer_hnd != NULL) -- { -- CHECK_RETURN(whd_buffer_release(whd_driver, *response_buffer_hnd, WHD_NETWORK_RX) ); -- *response_buffer_hnd = NULL; -- } -- whd_minor_assert("IOCTL failed\n", 0 != 0); -- return retval; -- } -- -- return WHD_SUCCESS; --} -- --/** Sets/Gets an I/O Variable (IOVar) -- * -- * This function either sets or retrieves the value of an I/O variable from the Broadcom 802.11 device. -- * The data which is set or retrieved must be in a format structure which is appropriate for the particular -- * I/O variable being accessed. These structures can only be found in the DHD source code such as wl/exe/wlu.c. -- * -- * @Note: The function blocks until the I/O variable read/write has completed -- * -- * @param type : CDC_SET or CDC_GET - indicating whether to set or get the I/O variable value -- * @param send_buffer_hnd : A handle for a packet buffer containing the data value to be sent. -- * @param response_buffer_hnd : A pointer which will receive the handle for the packet buffer -- * containing the response data value received. -- * @param interface : Which interface to send the iovar to (AP or STA) -- * -- * @return WHD result code -- */ --whd_result_t whd_cdc_send_iovar(whd_interface_t ifp, cdc_command_type_t type, -- whd_buffer_t send_buffer_hnd, -- whd_buffer_t *response_buffer_hnd) --{ -- if (type == CDC_SET) -- { -- return whd_cdc_send_ioctl(ifp, CDC_SET, (uint32_t)WLC_SET_VAR, send_buffer_hnd, response_buffer_hnd); -- } -- else -- { -- return whd_cdc_send_ioctl(ifp, CDC_GET, (uint32_t)WLC_GET_VAR, send_buffer_hnd, response_buffer_hnd); -- } --} -- --/** A helper function to easily acquire and initialise a buffer destined for use as an iovar -- * -- * @param buffer : A pointer to a whd_buffer_t object where the created buffer will be stored -- * @param data_length : The length of space reserved for user data -- * @param name : The name of the iovar -- * -- * @return A pointer to the start of user data with data_length space available -- */ --void *whd_cdc_get_iovar_buffer(whd_driver_t whd_driver, -- whd_buffer_t *buffer, -- uint16_t data_length, -- const char *name) --{ -- uint32_t name_length = (uint32_t)strlen(name) + 1; /* + 1 for terminating null */ -- uint32_t name_length_alignment_offset = (64 - name_length) % sizeof(uint32_t); -- -- if (whd_host_buffer_get(whd_driver, buffer, WHD_NETWORK_TX, -- (unsigned short)(IOCTL_OFFSET + data_length + name_length + name_length_alignment_offset), -- (unsigned long)WHD_IOCTL_PACKET_TIMEOUT) == WHD_SUCCESS) -- { -- uint8_t *data = (whd_buffer_get_current_piece_data_pointer(whd_driver, *buffer) + IOCTL_OFFSET); -- memset(data, 0, name_length_alignment_offset); -- memcpy(data + name_length_alignment_offset, name, name_length); -- return (data + name_length + name_length_alignment_offset); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Error - failed to allocate a packet buffer for IOVAR\n") ); -- return NULL; -- } --} -- --/** Sends a data packet. -- * -- * This function should be called by the bottom of the network stack in order for it -- * to send an ethernet frame. -- * The function prepends a BDC header, before sending to @ref whd_send_to_bus where -- * the BUS header will be added -- * -- * @param buffer : The ethernet packet buffer to be sent -- * @param interface : the interface over which to send the packet (AP or STA) -- * -- */ --/* Returns immediately - whd_buffer_tx_completed will be called once the transmission has finished */ --void whd_network_send_ethernet_data(whd_interface_t ifp, whd_buffer_t buffer) --{ -- data_header_t *packet; -- whd_result_t result; -- uint8_t *dscp = NULL; -- uint8_t priority = 0; -- uint8_t whd_tos_map[8] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; -- whd_driver_t whd_driver = ifp->whd_driver; -- ethernet_header_t *ethernet_header = (ethernet_header_t *)whd_buffer_get_current_piece_data_pointer( -- whd_driver, buffer); -- uint16_t ether_type; -- -- ether_type = ntoh16(ethernet_header->ethertype); -- if ( (ether_type == WHD_ETHERTYPE_IPv4) || (ether_type == WHD_ETHERTYPE_DOT1AS) ) -- { -- dscp = (uint8_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer) + IPV4_DSCP_OFFSET; -- } -- -- WPRINT_WHD_DATA_LOG( ("Wcd:> DATA pkt 0x%08lX len %d\n", (unsigned long)buffer, -- (int)whd_buffer_get_current_piece_size(whd_driver, buffer) ) ); -- -- -- /* Add link space at front of packet */ -- result = whd_buffer_add_remove_at_front(whd_driver, &buffer, -(int)(sizeof(data_header_t) ) ); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("Unable to adjust header space\n") ); -- result = whd_buffer_release(ifp->whd_driver, buffer, WHD_NETWORK_TX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- packet = (data_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- -- if (ifp->bsscfgidx > WHD_INTERFACE_MAX) -- { -- WPRINT_WHD_DEBUG( ("No interface for packet send\n") ); -- result = whd_buffer_release(ifp->whd_driver, buffer, WHD_NETWORK_TX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- /* Prepare the BDC header */ -- packet->bdc_header.flags = 0; -- packet->bdc_header.flags = (uint8_t)(BDC_PROTO_VER << BDC_FLAG_VER_SHIFT); -- /* If it's an IPv4 packet set the BDC header priority based on the DSCP field */ -- if ( ( (ether_type == WHD_ETHERTYPE_IPv4) || (ether_type == WHD_ETHERTYPE_DOT1AS) ) && (dscp != NULL) ) -- { -- if (*dscp != 0) /* If it's equal 0 then it's best effort traffic and nothing needs to be done */ -- { -- priority = whd_map_dscp_to_priority(whd_driver, *dscp); -- } -- } -- -- /* If STA interface, re-map prio to the prio allowed by the AP, regardless of whether it's an IPv4 packet */ -- if (ifp->role == WHD_STA_ROLE) -- { -- packet->bdc_header.priority = whd_tos_map[priority]; -- } -- else -- { -- packet->bdc_header.priority = priority; -- } -- -- packet->bdc_header.flags2 = ifp->bsscfgidx; -- packet->bdc_header.data_offset = 0; -- -- /* Add the length of the BDC header and pass "down" */ -- whd_send_to_bus(whd_driver, buffer, DATA_HEADER); -- --} -- --/** A helper function to easily acquire and initialise a buffer destined for use as an ioctl -- * -- * @param buffer : A pointer to a whd_buffer_t object where the created buffer will be stored -- * @param data_length : The length of space reserved for user data -- * -- * @return A pointer to the start of user data with data_length space available -- */ --void *whd_cdc_get_ioctl_buffer(whd_driver_t whd_driver, -- whd_buffer_t *buffer, -- uint16_t data_length) --{ -- if ( (uint32_t)IOCTL_OFFSET + data_length > USHRT_MAX ) -- { -- WPRINT_WHD_ERROR( ("The reserved ioctl buffer length is over %u\n", USHRT_MAX) ); -- return NULL; -- } -- if (whd_host_buffer_get(whd_driver, buffer, WHD_NETWORK_TX, (unsigned short)(IOCTL_OFFSET + data_length), -- (unsigned long)WHD_IOCTL_PACKET_TIMEOUT) == WHD_SUCCESS) -- { -- return (whd_buffer_get_current_piece_data_pointer(whd_driver, *buffer) + IOCTL_OFFSET); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Error - failed to allocate a packet buffer for IOCTL\n") ); -- return NULL; -- } --} -- --/** Processes CDC header information received in the RX packet and sets IOCTL response buffer -- * -- * @param whd_driver : WHD driver instance -- * @param buffer : A pointer to a whd_buffer_t object where the created buffer will be stored -- */ -- --void whd_process_cdc(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- uint32_t flags; -- uint16_t id; -- whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info; -- whd_result_t result; -- cdc_header_t *cdc_header = (cdc_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- whd_result_t ioctl_mutex_res; -- -- flags = dtoh32(cdc_header->flags); -- id = (uint16_t)( (flags & CDCF_IOC_ID_MASK) >> CDCF_IOC_ID_SHIFT ); -- -- /* Validate request ioctl ID and check if whd_cdc_send_ioctl is still waiting for response*/ -- if ( ( (ioctl_mutex_res = cy_rtos_get_semaphore(&cdc_bdc_info->ioctl_mutex, 0, WHD_FALSE) ) != WHD_SUCCESS ) && -- (id == cdc_bdc_info->requested_ioctl_id) ) -- { -- /* Save the response packet in a variable */ -- cdc_bdc_info->ioctl_response = buffer; -- -- WPRINT_WHD_DATA_LOG( ("Wcd:< Procd pkt 0x%08lX: IOCTL Response\n", (unsigned long)buffer) ); -- -- /* Wake the thread which sent the IOCTL/IOVAR so that it will resume */ -- result = cy_rtos_set_semaphore(&cdc_bdc_info->ioctl_sleep, WHD_FALSE); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- -- } -- else -- { -- WPRINT_WHD_ERROR( ("Received buffer request ID: %d (expectation: %d)\n", -- id, cdc_bdc_info->requested_ioctl_id) ); -- if (ioctl_mutex_res == WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("whd_cdc_send_ioctl is already timed out, drop the buffer\n") ); -- result = cy_rtos_set_semaphore(&cdc_bdc_info->ioctl_mutex, WHD_FALSE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- } -- } -- else -- { -- WPRINT_WHD_ERROR( ("Received a response for a different IOCTL - retry\n") ); -- } -- -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- } --} -- --/** Processes BDC header information received in the RX packet and sends data to network stack -- * -- * @param whd_driver : WHD driver instance -- * @param buffer : A pointer to a whd_buffer_t object where the created buffer will be stored -- */ -- --void whd_process_bdc(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- int32_t headers_len_below_payload; -- uint32_t ip_data_start_add; -- uint32_t bssid_index; -- whd_interface_t ifp; -- whd_result_t result; -- bdc_header_t *bdc_header = (bdc_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- -- /* Calculate where the payload is */ -- headers_len_below_payload = -- (int32_t)( (int32_t)BDC_HEADER_LEN + (int32_t)(bdc_header->data_offset << 2) ); -- -- /* Move buffer pointer past gSPI, BUS, BCD headers and padding, -- * so that the network stack or 802.11 monitor sees only the payload */ -- if (WHD_SUCCESS != whd_buffer_add_remove_at_front(whd_driver, &buffer, headers_len_below_payload) ) -- { -- WPRINT_WHD_ERROR( ("No space for headers without chaining. this should never happen\n") ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- -- return; -- } -- -- /* It is preferable to have IP data at address aligned to 4 bytes. IP data startes after ethernet header */ -- ip_data_start_add = -- (uint32_t )whd_buffer_get_current_piece_data_pointer(whd_driver, buffer) + WHD_ETHERNET_SIZE; -- if ( ( (ip_data_start_add >> 2) << 2 ) != ip_data_start_add ) -- { -- WPRINT_WHD_DATA_LOG( ("IP data not aligned to 4 bytes %lx\n", ip_data_start_add) ); -- } -- -- WPRINT_WHD_DATA_LOG( ("Wcd:< Procd pkt 0x%08lX\n", (unsigned long)buffer) ); -- bssid_index = (uint32_t)(bdc_header->flags2 & BDC_FLAG2_IF_MASK); -- ifp = whd_driver->iflist[bssid_index]; -- -- /* Send packet to bottom of network stack */ -- result = whd_network_process_ethernet_data(ifp, buffer); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("%s failed at %d \n", __func__, __LINE__) ); --} -- --/** Processes BDC header information and extracts the event packets -- * Event Packets are decoded to determine which event occurred, and the event handler list is consulted -- * and the appropriate event handler is called -- * -- * @param whd_driver : WHD driver instance -- * @param buffer : A pointer to a whd_buffer_t object where the created buffer will be stored -- * @param size : Size of the complete packet received from WLAN device -- */ --void whd_process_bdc_event(whd_driver_t whd_driver, whd_buffer_t buffer, uint16_t size) --{ -- uint16_t ether_type; -- whd_event_header_t *whd_event; -- whd_event_t *event; -- whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info; -- whd_result_t result; -- bdc_header_t *bdc_header = (bdc_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- uint16_t i; -- uint16_t j; -- -- event = (whd_event_t *)&bdc_header[bdc_header->data_offset + 1]; -- -- ether_type = ntoh16(event->eth.ethertype); -- -- /* If frame is truly an event, it should have EtherType equal to the Broadcom type. */ -- if (ether_type != (uint16_t)ETHER_TYPE_BRCM) -- { -- WPRINT_WHD_DEBUG( ("Error - received a channel 1 packet which was not BRCM ethertype\n") ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- /* If ethertype is correct, the contents of the ethernet packet -- * are a structure of type bcm_event_t -- */ -- -- /* Check that the OUI matches the Broadcom OUI */ -- if (0 != memcmp(BRCM_OUI, &event->eth_evt_hdr.oui[0], (size_t)DOT11_OUI_LEN) ) -- { -- WPRINT_WHD_DEBUG( ("Event OUI mismatch\n") ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- whd_event = &event->whd_event; -- -- /* Search for the event type in the list of event handler functions -- * event data is stored in network endianness -- */ -- whd_event->flags = ntoh16(whd_event->flags); -- whd_event->event_type = (whd_event_num_t)ntoh32(whd_event->event_type); -- whd_event->status = (whd_event_status_t)ntoh32(whd_event->status); -- whd_event->reason = (whd_event_reason_t)ntoh32(whd_event->reason); -- whd_event->auth_type = ntoh32(whd_event->auth_type); -- whd_event->datalen = ntoh32(whd_event->datalen); -- -- /* Ensure data length is correct */ -- if (whd_event->datalen > -- (uint32_t)(size - ( (char *)DATA_AFTER_HEADER(event) - (char *)bdc_header ) ) ) -- { -- WPRINT_WHD_ERROR( ( -- "Error - (data length received [%d] > expected data length [%d]). Bus header packet size = [%d]. Ignoring the packet\n", -- (int)whd_event->datalen, -- size - ( (char *)DATA_AFTER_HEADER(event) - (char *)bdc_header ), -- size) ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- -- return; -- } -- -- /* This is necessary because people who defined event statuses and reasons overlapped values. */ -- if (whd_event->event_type == WLC_E_PSK_SUP) -- { -- whd_event->status = (whd_event_status_t)( (int)whd_event->status + WLC_SUP_STATUS_OFFSET ); -- whd_event->reason = (whd_event_reason_t)( (int)whd_event->reason + WLC_E_SUP_REASON_OFFSET ); -- } -- else if (whd_event->event_type == WLC_E_PRUNE) -- { -- whd_event->reason = (whd_event_reason_t)( (int)whd_event->reason + WLC_E_PRUNE_REASON_OFFSET ); -- } -- else if ( (whd_event->event_type == WLC_E_DISASSOC) || (whd_event->event_type == WLC_E_DEAUTH) ) -- { -- whd_event->status = (whd_event_status_t)( (int)whd_event->status + WLC_DOT11_SC_STATUS_OFFSET ); -- whd_event->reason = (whd_event_reason_t)( (int)whd_event->reason + WLC_E_DOT11_RC_REASON_OFFSET ); -- } -- -- /* do any needed debug logging of event */ -- WHD_IOCTL_LOG_ADD_EVENT(whd_driver, whd_event->event_type, whd_event->status, -- whd_event->reason); -- -- if (cy_rtos_get_semaphore(&cdc_bdc_info->event_list_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE) != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("Failed to obtain mutex for event list access!\n") ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- for (i = 0; i < (uint16_t)WHD_EVENT_HANDLER_LIST_SIZE; i++) -- { -- if (cdc_bdc_info->whd_event_list[i].event_set) -- { -- for (j = 0; cdc_bdc_info->whd_event_list[i].events[j] != WLC_E_NONE; ++j) -- { -- if ( (cdc_bdc_info->whd_event_list[i].events[j] == whd_event->event_type) && -- (cdc_bdc_info->whd_event_list[i].ifidx == whd_event->ifidx) ) -- { -- /* Correct event type has been found - call the handler function and exit loop */ -- cdc_bdc_info->whd_event_list[i].handler_user_data = -- cdc_bdc_info->whd_event_list[i].handler(whd_driver->iflist[whd_event->bsscfgidx], -- whd_event, -- (uint8_t *)DATA_AFTER_HEADER( -- event), -- cdc_bdc_info->whd_event_list[i].handler_user_data); -- break; -- } -- } -- } -- } -- -- result = cy_rtos_set_semaphore(&cdc_bdc_info->event_list_mutex, WHD_FALSE); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- -- WPRINT_WHD_DATA_LOG( ("Wcd:< Procd pkt 0x%08lX: Evnt %d (%d bytes)\n", (unsigned long)buffer, -- (int)whd_event->event_type, size) ); -- -- /* Release the event packet buffer */ -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip.c -deleted file mode 100644 -index 64ffb07e56..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip.c -+++ /dev/null -@@ -1,1456 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include --#include "bus_protocols/whd_chip_reg.h" --#include "bus_protocols/whd_sdio.h" --#include "bus_protocols/whd_bus_common.h" --#include "bus_protocols/whd_bus_protocol_interface.h" --#include "whd_chip_constants.h" --#include "whd_cdc_bdc.h" --#include "whd_thread_internal.h" --#include "whd_buffer_api.h" --#include "whd_debug.h" --#include "whd_utils.h" --#include "whd_wifi_api.h" --#include "whd_chip.h" --#include "whd.h" --#include "whd_wlioctl.h" -- --/****************************************************** --* Macros --******************************************************/ --#define SPINWAIT_POLL_PERIOD 10 -- --#define SPINWAIT(exp, us) { \ -- uint countdown = (us) + (SPINWAIT_POLL_PERIOD - 1); \ -- while ( (exp) && (countdown >= SPINWAIT_POLL_PERIOD) ){ \ -- cy_rtos_delay_milliseconds(SPINWAIT_POLL_PERIOD); \ -- countdown -= SPINWAIT_POLL_PERIOD; \ -- } \ --} --/****************************************************** --* Constants --******************************************************/ -- --#define PLATFORM_WLAN_RAM_BASE (0x0) --#define WLAN_BUS_UP_ATTEMPTS (1000) --#define HT_AVAIL_WAIT_MS (1) --#define KSO_WAIT_MS (1) --#define KSO_WAKE_MS (3) --#define MAX_KSO_ATTEMPTS (64) -- --#define AI_IOCTRL_OFFSET (0x408) --#define SICF_FGC (0x0002) --#define SICF_CLOCK_EN (0x0001) --#define AI_RESETCTRL_OFFSET (0x800) --#define AI_RESETSTATUS_OFFSET (0x804) --#define AIRC_RESET (1) --#define WRAPPER_REGISTER_OFFSET (0x100000) -- --#define WLAN_SHARED_VERSION_MASK (0x00ff) --#define WLAN_SHARED_VERSION (0x0001) --#define WPRINT_WHD_DEBUG_DS(args) WPRINT_WHD_DEBUG(args) -- --/****************************************************** --* Structures --******************************************************/ -- --/****************************************************** --* Variables --******************************************************/ -- --static const uint32_t cm3_core_base_address[] = --{ ( uint32_t )(WLAN_ARMCM3_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET), -- ( uint32_t )(SOCSRAM_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET), ( uint32_t )(SDIO_BASE_ADDRESS) }; -- --static const uint32_t cr4_core_base_address[] = --{ ( uint32_t )(WLAN_ARMCR4_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET), -- ( uint32_t )(SOCSRAM_BASE_ADDRESS + WRAPPER_REGISTER_OFFSET), ( uint32_t )(SDIO_BASE_ADDRESS) }; -- --/****************************************************** --* Static Function Declarations --******************************************************/ --static whd_bool_t whd_is_fw_sr_capable(whd_driver_t whd_driver); --static whd_result_t whd_kso_enable(whd_driver_t whd_driver, whd_bool_t enable); --static uint32_t whd_get_core_address(whd_driver_t whd_driver, device_core_t core_id); -- --static whd_result_t whd_enable_save_restore(whd_driver_t whd_driver); -- --/****************************************************** --* Function definitions --******************************************************/ --void whd_internal_info_init(whd_driver_t whd_driver) --{ -- whd_internal_info_t *internal_info = &whd_driver->internal_info; -- -- internal_info->whd_wlan_status.state = WLAN_OFF; -- internal_info->whd_wlan_status.country_code = WHD_COUNTRY_AUSTRALIA; -- internal_info->whd_wlan_status.aggregate_code = WHD_COUNTRY_AGGREGATE_XV_0; -- internal_info->whd_wlan_status.keep_wlan_awake = 0; -- internal_info->console_addr = 0; -- internal_info->scan_result_callback = NULL; -- internal_info->whd_scan_result_ptr = NULL; -- internal_info->active_join_mutex_initted = WHD_FALSE; -- internal_info->active_join_semaphore = NULL; -- internal_info->con_lastpos = 0; -- internal_info->whd_wifi_p2p_go_is_up = WHD_FALSE; --} -- --/* -- * Returns the base address of the core identified by the provided coreId -- */ --uint32_t whd_get_core_address(whd_driver_t whd_driver, device_core_t core_id) --{ -- uint16_t chip_id = whd_chip_get_chip_id(whd_driver); -- -- if (chip_id == 43455) -- return cr4_core_base_address[(int)core_id]; -- else -- return cm3_core_base_address[(int)core_id]; --} -- --/* -- * Returns WHD_SUCCESS is the core identified by the provided coreId is up, otherwise WHD result code -- */ --whd_result_t whd_device_core_is_up(whd_driver_t whd_driver, device_core_t core_id) --{ -- uint8_t regdata; -- uint32_t base; -- whd_result_t result; -- -- base = whd_get_core_address(whd_driver, core_id); -- -- /* Read the IO control register */ -- result = whd_bus_read_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, ®data); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- /* Verify that the clock is enabled and something else is not on */ -- if ( (regdata & (SICF_FGC | SICF_CLOCK_EN) ) != ( uint8_t )SICF_CLOCK_EN ) -- { -- return WHD_CORE_CLOCK_NOT_ENABLED; -- } -- -- /* Read the reset control and verify it is not in reset */ -- result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, ®data); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- if ( (regdata & AIRC_RESET) != 0 ) -- { -- return WHD_CORE_IN_RESET; -- } -- -- return WHD_SUCCESS; --} -- --/* -- * Resets the core identified by the provided coreId -- */ --whd_result_t whd_reset_core(whd_driver_t whd_driver, device_core_t core_id, uint32_t bits, uint32_t resetbits) --{ -- uint32_t base = whd_get_core_address(whd_driver, core_id); -- whd_result_t result; -- uint8_t regdata; -- uint32_t loop_counter = 10; -- -- /* ensure there are no pending backplane operations */ -- SPINWAIT( ( ( (result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETSTATUS_OFFSET, (uint8_t)1, -- ®data) ) == WHD_SUCCESS ) && regdata != 0 ), 300 ); -- -- /* put core into reset state */ -- result = whd_bus_write_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, ( uint32_t )AIRC_RESET); -- (void)cy_rtos_delay_milliseconds( (uint32_t)10 ); /* Ignore return - nothing can be done if it fails */ -- -- /* ensure there are no pending backplane operations */ -- SPINWAIT( ( ( (result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETSTATUS_OFFSET, (uint8_t)1, -- ®data) ) == WHD_SUCCESS ) && regdata != 0 ), 300 ); -- -- result = whd_bus_write_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, -- (bits | resetbits | SICF_FGC | SICF_CLOCK_EN) ); -- -- /* ensure there are no pending backplane operations */ -- SPINWAIT( ( ( (result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETSTATUS_OFFSET, (uint8_t)1, -- ®data) ) == WHD_SUCCESS ) && regdata != 0 ), 300 ); -- -- while ( ( (result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, -- ®data) ) == WHD_SUCCESS ) && regdata != 0 && -- --loop_counter != 0 ) -- { -- /* ensure there are no pending backplane operations */ -- SPINWAIT( ( ( (result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETSTATUS_OFFSET, (uint8_t)1, -- ®data) ) == WHD_SUCCESS ) && regdata != 0 ), 300 ); -- /* take core out of reset */ -- result = whd_bus_write_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, (uint32_t)0); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- /* ensure there are no pending backplane operations */ -- SPINWAIT( ( ( (result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETSTATUS_OFFSET, (uint8_t)1, -- ®data) ) == WHD_SUCCESS ) && regdata != 0 ), 300 ); -- } -- -- result = whd_bus_write_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, (bits | SICF_CLOCK_EN) ); -- -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); /* Ignore return - nothing can be done if it fails */ -- -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- return WHD_SUCCESS; --} -- --/* -- * Disables the core identified by the provided coreId -- */ --whd_result_t whd_disable_device_core(whd_driver_t whd_driver, device_core_t core_id, wlan_core_flag_t core_flag) --{ -- uint32_t base = whd_get_core_address(whd_driver, core_id); -- whd_result_t result; -- uint8_t junk; -- uint8_t regdata; -- -- /* Read the reset control */ -- result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, &junk); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- /* Read the reset control and check if it is already in reset */ -- result = whd_bus_read_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, ®data); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- if ( (regdata & AIRC_RESET) != 0 ) -- { -- /* Core already in reset */ -- return WHD_SUCCESS; -- } -- -- /* Write 0 to the IO control and read it back */ -- result = -- whd_bus_write_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, -- (core_flag == WLAN_CORE_FLAG_CPU_HALT) ? SICF_CPUHALT : 0); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- result = whd_bus_read_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, &junk); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); -- -- result = whd_bus_write_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, ( uint32_t )AIRC_RESET); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); -- -- return result; --} -- --/* -- * Resets the core identified by the provided coreId -- */ --whd_result_t whd_reset_device_core(whd_driver_t whd_driver, device_core_t core_id, wlan_core_flag_t core_flag) --{ -- uint32_t base = whd_get_core_address(whd_driver, core_id); -- whd_result_t result; -- uint8_t junk; -- -- result = whd_disable_device_core(whd_driver, core_id, core_flag); -- if (result != WHD_SUCCESS) -- { -- return result; -- } -- -- result = -- whd_bus_write_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, -- ( uint32_t )(SICF_FGC | SICF_CLOCK_EN | -- ( (core_flag == WLAN_CORE_FLAG_CPU_HALT) ? SICF_CPUHALT : 0 ) ) ); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- result = whd_bus_read_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, &junk); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- result = whd_bus_write_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, 0); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); -- -- result = -- whd_bus_write_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, -- ( uint32_t )(SICF_CLOCK_EN | -- ( (core_flag == WLAN_CORE_FLAG_CPU_HALT) ? SICF_CPUHALT : 0 ) ) ); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- result = whd_bus_read_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, &junk); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ) -- return result; -- } -- -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); -- -- return result; --} -- --/* -- * Release ARM core to run instructions -- */ --whd_result_t whd_wlan_armcore_run(whd_driver_t whd_driver, device_core_t core_id, wlan_core_flag_t core_flag) --{ -- uint32_t base = whd_get_core_address(whd_driver, core_id); -- whd_result_t result; -- uint8_t junk; -- -- /* Only work for WLAN arm core! */ -- if (WLAN_ARM_CORE != core_id) -- { -- return WHD_UNSUPPORTED; -- } -- -- result = -- whd_bus_write_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, -- ( uint32_t )(SICF_FGC | SICF_CLOCK_EN | -- ( (core_flag == WLAN_CORE_FLAG_CPU_HALT) ? SICF_CPUHALT : 0 ) ) ); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ) -- return result; -- } -- -- result = whd_bus_read_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, &junk); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ) -- return result; -- } -- -- result = whd_bus_write_backplane_value(whd_driver, base + AI_RESETCTRL_OFFSET, (uint8_t)1, 0); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ) -- return result; -- } -- -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); -- -- result = -- whd_bus_write_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, -- ( uint32_t )(SICF_CLOCK_EN | -- ( (core_flag == WLAN_CORE_FLAG_CPU_HALT) ? SICF_CPUHALT : 0 ) ) ); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- result = whd_bus_read_backplane_value(whd_driver, base + AI_IOCTRL_OFFSET, (uint8_t)1, &junk); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- return result; -- } -- -- (void)cy_rtos_delay_milliseconds( (uint32_t)1 ); -- -- return result; --} -- --whd_result_t whd_wifi_read_wlan_log_unsafe(whd_driver_t whd_driver, uint32_t wlan_shared_address, char *buffer, -- uint32_t buffer_size) --{ -- char ch; -- uint32_t n; -- uint32_t index; -- uint32_t address; -- whd_result_t result = WHD_WLAN_ERROR; -- whd_internal_info_t *internal_info = &whd_driver->internal_info; -- wifi_console_t *c = internal_info->c; -- -- c = &internal_info->console; -- -- if (internal_info->console_addr == 0) -- { -- uint shared_addr; -- -- address = wlan_shared_address; -- result = whd_bus_read_backplane_value(whd_driver, address, 4, (uint8_t *)&shared_addr); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- goto done; -- } -- -- result = whd_bus_transfer_backplane_bytes(whd_driver, BUS_READ, shared_addr, sizeof(wlan_shared_t), -- (uint8_t *)&internal_info->sh); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_transfer_backplane_bytes failed\n", __FUNCTION__, __LINE__) ); -- goto done; -- } -- -- internal_info->sh.flags = dtoh32(internal_info->sh.flags); -- internal_info->sh.trap_addr = dtoh32(internal_info->sh.trap_addr); -- internal_info->sh.assert_exp_addr = dtoh32(internal_info->sh.assert_exp_addr); -- internal_info->sh.assert_file_addr = dtoh32(internal_info->sh.assert_file_addr); -- internal_info->sh.assert_line = dtoh32(internal_info->sh.assert_line); -- internal_info->sh.console_addr = dtoh32(internal_info->sh.console_addr); -- internal_info->sh.msgtrace_addr = dtoh32(internal_info->sh.msgtrace_addr); -- -- if ( (internal_info->sh.flags & WLAN_SHARED_VERSION_MASK) != WLAN_SHARED_VERSION ) -- { -- WPRINT_WHD_ERROR( ("Readconsole: WLAN shared version is not valid sh.flags %x\n\r", -- internal_info->sh.flags) ); -- result = WHD_WLAN_INVALID; -- goto done; -- } -- internal_info->console_addr = internal_info->sh.console_addr; -- } -- -- /* Read console log struct */ -- address = internal_info->console_addr + offsetof(hnd_cons_t, log); -- result = whd_bus_transfer_backplane_bytes(whd_driver, BUS_READ, address, sizeof(c->log), (uint8_t *)&c->log); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_transfer_backplane_bytes failed\n", __FUNCTION__, __LINE__) ); -- goto done; -- } -- -- /* Allocate console buffer (one time only) */ -- if (c->buf == NULL) -- { -- c->bufsize = dtoh32(c->log.buf_size); -- c->buf = malloc(c->bufsize); -- if (c->buf == NULL) -- { -- WPRINT_WHD_ERROR( ("%s:%d c->buf IS null \n", __FUNCTION__, __LINE__) ); -- result = WHD_WLAN_NOMEM; -- goto done; -- } -- } -- -- /* Retrieve last read position */ -- c->last = whd_driver->internal_info.con_lastpos; -- -- index = dtoh32(c->log.idx); -- -- /* Protect against corrupt value */ -- if (index > c->bufsize) -- { -- WPRINT_WHD_ERROR( ("%s:%d index > c->bufsize \n", __FUNCTION__, __LINE__) ); -- result = WHD_WLAN_BUFTOOSHORT; -- goto done; -- } -- -- /* Skip reading the console buffer if the index pointer has not moved */ -- if (index == c->last) -- { -- result = WHD_SUCCESS; -- goto done; -- } -- -- /* Read the console buffer */ -- /* xxx this could optimize and read only the portion of the buffer needed, but -- * it would also have to handle wrap-around. -- */ -- address = dtoh32(c->log.buf); -- result = whd_bus_transfer_backplane_bytes(whd_driver, BUS_READ, address, c->bufsize, (uint8_t *)c->buf); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_transfer_backplane_bytes failed\n", __FUNCTION__, __LINE__) ); -- goto done; -- } -- -- while (c->last != index) -- { -- for (n = 0; n < buffer_size - 2; n++) -- { -- if (c->last == index) -- { -- /* This would output a partial line. Instead, back up -- * the buffer pointer and output this line next time around. -- */ -- if (c->last >= n) -- { -- c->last -= n; -- } -- else -- { -- c->last = c->bufsize - n; -- } -- /* Save last read position */ -- whd_driver->internal_info.con_lastpos = c->last; -- -- result = WHD_SUCCESS; -- goto done; -- } -- ch = c->buf[c->last]; -- c->last = (c->last + 1) % c->bufsize; -- if (ch == '\n') -- { -- break; -- } -- buffer[n] = ch; -- } -- if (n > 0) -- { -- if (buffer[n - 1] == '\r') -- n--; -- buffer[n] = 0; -- WPRINT_MACRO( ("CONSOLE: %s\n", buffer) ); -- } -- } -- /* Save last read position */ -- whd_driver->internal_info.con_lastpos = c->last; -- result = WHD_SUCCESS; -- --done: return result; --} -- --void whd_wifi_peek(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, uint8_t *value) --{ -- uint8_t status; -- -- WHD_WLAN_KEEP_AWAKE(whd_driver); -- -- status = whd_bus_read_backplane_value(whd_driver, address, register_length, value); -- -- if (status != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Error reading interrupt status\n", __FUNCTION__) ); -- } -- -- WHD_WLAN_LET_SLEEP(whd_driver); --} -- --void whd_wifi_poke(whd_driver_t whd_driver, uint32_t address, uint8_t register_length, uint32_t value) --{ -- uint8_t status; -- -- WHD_WLAN_KEEP_AWAKE(whd_driver); -- -- status = whd_bus_write_backplane_value(whd_driver, address, register_length, value); -- -- if (status != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Error clearing the interrupt status\n", __FUNCTION__) ); -- } -- -- WHD_WLAN_LET_SLEEP(whd_driver); --} -- --void whd_ioctl_log_add(whd_driver_t whd_driver, uint32_t cmd, whd_buffer_t buffer) --{ -- uint8_t *data = (whd_buffer_get_current_piece_data_pointer(whd_driver, buffer) + IOCTL_OFFSET); -- size_t data_size = whd_buffer_get_current_piece_size(whd_driver, buffer); -- -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].ioct_log = cmd; -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].is_this_event = 0; -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].data_size = MIN_OF( -- WHD_MAX_DATA_SIZE, data_size); -- memset(whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].data, 0, WHD_MAX_DATA_SIZE); -- memcpy(whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].data, data, -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].data_size); -- -- whd_driver->whd_ioctl_log_index++; --} -- --void whd_ioctl_log_add_event(whd_driver_t whd_driver, uint32_t cmd, uint16_t flag, uint32_t reason) --{ -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].is_this_event = 1; -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].ioct_log = cmd; -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].flag = flag; -- whd_driver->whd_ioctl_log[whd_driver->whd_ioctl_log_index % WHD_IOCTL_LOG_SIZE].reason = reason; -- -- whd_driver->whd_ioctl_log_index++; -- --} -- --whd_result_t whd_ioctl_print(whd_driver_t whd_driver) --{ -- int i; -- uint8_t *data = NULL; -- size_t iovar_string_size = 0; -- -- for (i = 0; i < WHD_IOCTL_LOG_SIZE; i++) -- { -- char iovar[WHD_IOVAR_STRING_SIZE] = {0}; -- data = whd_driver->whd_ioctl_log[i].data; -- -- if ( (whd_driver->whd_ioctl_log[i].ioct_log == WLC_SET_VAR) || -- (whd_driver->whd_ioctl_log[i].ioct_log == WLC_GET_VAR) ) -- { -- while (!*data) -- { -- whd_driver->whd_ioctl_log[i].data_size--; -- data++; -- } -- -- if (strlen( (char *)data ) <= WHD_IOVAR_STRING_SIZE) -- strncpy(iovar, (char *)data, strlen( (char *)data ) ); -- -- iovar_string_size = strlen( (const char *)data ); -- data += iovar_string_size; -- whd_driver->whd_ioctl_log[i].data_size -= iovar_string_size; -- } -- -- if (whd_driver->whd_ioctl_log[i].is_this_event == 1) -- { -- whd_event_info_to_string(whd_driver->whd_ioctl_log[i].ioct_log, whd_driver->whd_ioctl_log[i].flag, -- whd_driver->whd_ioctl_log[i].reason, iovar, sizeof(iovar) - 1); -- WPRINT_MACRO( ("\n<- E:%" PRIu32 "\t\t\tS:%d\t\t\t\tR:%" PRIu32 "\n%s\n", -- whd_driver->whd_ioctl_log[i].ioct_log, -- whd_driver->whd_ioctl_log[i].flag, whd_driver->whd_ioctl_log[i].reason, iovar) ); -- } -- else if (whd_driver->whd_ioctl_log[i].ioct_log == WLC_SET_VAR) -- { -- WPRINT_MACRO( ("\n-> %s\n", iovar) ); -- whd_hexdump(data, whd_driver->whd_ioctl_log[i].data_size); -- } -- else if (whd_driver->whd_ioctl_log[i].ioct_log == WLC_GET_VAR) -- { -- WPRINT_MACRO( ("\n<- %s\n", iovar) ); -- whd_hexdump(data, whd_driver->whd_ioctl_log[i].data_size); -- } -- else if (whd_driver->whd_ioctl_log[i].ioct_log != 0) -- { -- whd_ioctl_to_string(whd_driver->whd_ioctl_log[i].ioct_log, iovar, sizeof(iovar) - 1); -- WPRINT_MACRO( ("\n%s:%" PRIu32 "\n", iovar, whd_driver->whd_ioctl_log[i].ioct_log) ); -- whd_hexdump(data, whd_driver->whd_ioctl_log[i].data_size); -- } -- } -- -- memset(whd_driver->whd_ioctl_log, 0, sizeof(whd_driver->whd_ioctl_log) ); -- whd_driver->whd_ioctl_log_index = 0; -- return WHD_SUCCESS; --} -- --void whd_wifi_chip_info_init(whd_driver_t whd_driver) --{ -- whd_driver->chip_info.save_restore_enable = WHD_FALSE; --} -- --whd_result_t whd_wifi_set_custom_country_code(whd_interface_t ifp, const whd_country_info_t *country_code) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- -- /* Get chip number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- if (wlan_chip_id == 43362) -- { -- whd_buffer_t buffer; -- whd_result_t result; -- whd_country_info_t *data; -- data = (whd_country_info_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, -- (uint16_t)sizeof(whd_country_info_t) + 10); -- if (data == NULL) -- { -- whd_assert("Could not get buffer for IOCTL", 0 != 0); -- return WHD_BUFFER_ALLOC_FAIL; -- } -- memcpy(data, country_code, sizeof(whd_country_info_t) ); -- result = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_CUSTOM_COUNTRY, buffer, NULL); -- return result; -- } -- else -- { -- UNUSED_PARAMETER(country_code); -- return WHD_UNSUPPORTED; -- } --} -- --whd_result_t whd_chip_specific_socsram_init(whd_driver_t whd_driver) --{ -- /* Get chip number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- if (wlan_chip_id == 43430) -- { -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SOCSRAM_BANKX_INDEX, 4, 0x3) ); -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, SOCSRAM_BANKX_PDA, 4, 0) ); -- return WHD_SUCCESS; -- } -- else -- { -- return WHD_SUCCESS; -- } --} -- --whd_result_t whd_chip_specific_init(whd_driver_t whd_driver) --{ -- /* Get chip number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43362) ) -- { -- return WHD_SUCCESS; -- } -- else -- { -- return whd_enable_save_restore(whd_driver); -- } --} -- --whd_result_t whd_allow_wlan_bus_to_sleep(whd_driver_t whd_driver) --{ -- /* Get chip number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43362) ) -- { -- /* Clear HT clock request */ -- if (whd_bus_is_up(whd_driver) == WHD_TRUE) -- { -- whd_bus_set_state(whd_driver, WHD_FALSE); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)1, 0) ); -- /* Bus specific sleep routine */ -- return whd_bus_sleep(whd_driver); -- } -- else -- { -- return WHD_SUCCESS; -- } -- } -- else -- { -- /* Clear HT clock request */ -- if (whd_bus_is_up(whd_driver) == WHD_TRUE) -- { -- whd_bus_set_state(whd_driver, WHD_FALSE); -- if (whd_driver->chip_info.save_restore_enable == WHD_FALSE) -- { -- return whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)1, 0); -- } -- else -- { -- return whd_kso_enable(whd_driver, WHD_FALSE); -- } -- } -- else -- { -- return WHD_SUCCESS; -- } -- } --} -- --whd_result_t whd_wifi_read_wlan_log(whd_driver_t whd_driver, char *buffer, uint32_t buffer_size) --{ -- whd_result_t result; -- uint32_t wlan_shared_address; -- uint16_t wlan_chip_id = 0; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- whd_ioctl_print(whd_driver); -- -- wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- if (wlan_chip_id == 43362) -- { -- return whd_wifi_read_wlan_log_unsafe(whd_driver, ( (GET_C_VAR(whd_driver, CHIP_RAM_SIZE) + -- PLATFORM_WLAN_RAM_BASE) - 4 ), buffer, buffer_size); -- } -- else if (wlan_chip_id == 43909) -- { -- result = whd_ensure_wlan_bus_is_up(whd_driver); -- if (result != WHD_SUCCESS) -- { -- return result; -- } -- result = whd_wifi_read_wlan_log_unsafe(whd_driver, ( (GET_C_VAR(whd_driver, CHIP_RAM_SIZE) + -- PLATFORM_WLAN_RAM_BASE) - 4 ), buffer, buffer_size); -- whd_thread_notify(whd_driver); -- return result; -- } -- else if ( (wlan_chip_id == 4334) || (wlan_chip_id == 4390) ) -- { -- return WHD_UNSUPPORTED; -- } -- else -- { -- /* Backplane access needs HT clock. So, disabling bus sleep */ -- WHD_WLAN_KEEP_AWAKE(whd_driver); -- /* FW populates the last word of RAM with wlan_shared_t struct address */ -- if (whd_is_fw_sr_capable(whd_driver) == WHD_TRUE) -- { -- wlan_shared_address = PLATFORM_WLAN_RAM_BASE + GET_C_VAR(whd_driver, CHIP_RAM_SIZE) - -- GET_C_VAR(whd_driver, SOCRAM_SRMEM_SIZE) - 4; -- } -- else -- { -- wlan_shared_address = PLATFORM_WLAN_RAM_BASE + GET_C_VAR(whd_driver, CHIP_RAM_SIZE) - 4; -- } -- result = whd_wifi_read_wlan_log_unsafe(whd_driver, wlan_shared_address, buffer, buffer_size); -- WHD_WLAN_LET_SLEEP(whd_driver); -- return result; -- } -- --} -- --uint32_t whd_wifi_print_whd_log(whd_driver_t whd_driver) --{ -- whd_result_t result; -- char *buffer = NULL; -- -- whd_ioctl_print(whd_driver); -- -- if ( (buffer = malloc(WLAN_LOG_BUF_LEN) ) == NULL ) -- { -- WPRINT_WHD_ERROR( ("Memory allocation failed for log buffer in %s \n", __FUNCTION__) ); -- return WHD_MALLOC_FAILURE; -- } -- -- result = whd_wifi_read_wlan_log(whd_driver, buffer, WLAN_LOG_BUF_LEN); -- if (result == WHD_SUCCESS) -- { -- whd_print_logbuffer(); // This is not supported yet. -- } -- free(buffer); -- CHECK_RETURN(result); -- return result; --} -- --whd_result_t whd_ensure_wlan_bus_is_up(whd_driver_t whd_driver) --{ -- uint8_t csr = 0; -- uint32_t attempts = ( uint32_t )WLAN_BUS_UP_ATTEMPTS; -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- -- /* Ensure HT clock is up */ -- if (whd_bus_is_up(whd_driver) == WHD_TRUE) -- { -- return WHD_SUCCESS; -- } -- -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) ) -- { -- /* Bus specific wakeup routine */ -- CHECK_RETURN(whd_bus_wakeup(whd_driver) ); -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)1, (uint32_t)SBSDIO_HT_AVAIL_REQ) ); -- do -- { -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)1, &csr) ); -- --attempts; -- } while ( ( (csr & SBSDIO_HT_AVAIL) == 0 ) && (attempts != 0) && -- (cy_rtos_delay_milliseconds( (uint32_t)1 ), 1 == 1) ); -- -- if (attempts == 0) -- { -- WPRINT_WHD_ERROR( ("SDIO bus failed to come up , %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_BUS_UP_FAIL; -- } -- else -- { -- whd_bus_set_state(whd_driver, WHD_TRUE); -- return WHD_SUCCESS; -- } -- } -- else -- { -- if (whd_driver->chip_info.save_restore_enable == WHD_FALSE) -- { -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)1, (uint32_t)SBSDIO_HT_AVAIL_REQ) ); -- do -- { -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)sizeof(csr), &csr) ); -- --attempts; -- } while ( ( (csr & SBSDIO_HT_AVAIL) == 0 ) && (attempts != 0) && -- (cy_rtos_delay_milliseconds( ( uint32_t )HT_AVAIL_WAIT_MS ), 1 == 1) ); -- -- if (attempts == 0) -- { -- WPRINT_WHD_ERROR( ("SDIO bus failed to come up , %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_BUS_UP_FAIL; -- } -- else -- { -- whd_bus_set_state(whd_driver, WHD_TRUE); -- return WHD_SUCCESS; -- } -- } -- else -- { -- if (whd_kso_enable(whd_driver, WHD_TRUE) == WHD_SUCCESS) -- { -- whd_bus_set_state(whd_driver, WHD_TRUE); -- return WHD_SUCCESS; -- } -- else -- { -- WPRINT_WHD_ERROR( ("SDIO bus failed to come up , %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_BUS_UP_FAIL; -- } -- } -- } --} -- --static whd_bool_t whd_is_fw_sr_capable(whd_driver_t whd_driver) --{ -- uint32_t core_capext; -- uint32_t retention_ctl = 0; -- uint32_t srctrl = 0; -- whd_bool_t save_restore_capable = WHD_FALSE; -- whd_result_t result = WHD_SUCCESS; -- -- /* Get chip number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- -- if (wlan_chip_id == 43430) -- { -- /* check if fw initialized sr engine */ -- if (whd_bus_read_backplane_value(whd_driver, (uint32_t)CHIPCOMMON_SR_CONTROL1, (uint8_t)4, -- (uint8_t *)&srctrl) != WHD_SUCCESS) -- { -- return WHD_FALSE; -- } -- if (srctrl != 0) -- { -- return WHD_TRUE; -- } -- else -- { -- return WHD_FALSE; -- } -- } -- else if ( (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- /* check if fw initialized sr engine */ -- result = whd_bus_read_backplane_value(whd_driver, (uint32_t)CHIPCOMMON_CORE_CAPEXT_ADDR, (uint8_t)4, -- (uint8_t *)&core_capext); -- if (result != WHD_SUCCESS) -- { -- return WHD_FALSE; -- } -- -- if ( (core_capext & CHIPCOMMON_CORE_CAPEXT_SR_SUPPORTED) != 0 ) -- { -- result = whd_bus_read_backplane_value(whd_driver, (uint32_t)CHIPCOMMON_CORE_RETENTION_CTL, (uint8_t)4, -- (uint8_t *)&retention_ctl); -- if (result != WHD_SUCCESS) -- { -- return WHD_FALSE; -- } -- if ( (retention_ctl & (CHIPCOMMON_CORE_RCTL_MACPHY_DISABLE | CHIPCOMMON_CORE_RCTL_LOGIC_DISABLE) ) == 0 ) -- { -- save_restore_capable = WHD_TRUE; -- } -- } -- return save_restore_capable; -- } -- else -- { -- /* check if fw initialized sr engine */ -- result = whd_bus_read_backplane_value(whd_driver, (uint32_t)RETENTION_CTL, (uint8_t)sizeof(retention_ctl), -- (uint8_t *)&retention_ctl); -- if (result != WHD_SUCCESS) -- { -- return WHD_FALSE; -- } -- if ( (retention_ctl & (RCTL_MACPHY_DISABLE | RCTL_LOGIC_DISABLE) ) == 0 ) -- { -- save_restore_capable = WHD_TRUE; -- } -- return save_restore_capable; -- } --} -- --static whd_result_t whd_enable_save_restore(whd_driver_t whd_driver) --{ -- uint8_t data; -- /* Get chip number */ -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- -- if (whd_is_fw_sr_capable(whd_driver) == WHD_TRUE) -- { -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) ) -- { -- /* Configure WakeupCtrl register to set AlpAvail request bit in chipClockCSR register -- * after the sdiod core is powered on. -- */ -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_WAKEUP_CTRL, -- (uint8_t)sizeof(data), &data) ); -- data |= SBSDIO_WCTRL_WAKE_TILL_ALP_AVAIL; -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_WAKEUP_CTRL, -- (uint8_t)sizeof(data), data) ); -- } -- else -- { -- /* Configure WakeupCtrl register to set HtAvail request bit in chipClockCSR register -- * after the sdiod core is powered on. -- */ -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_WAKEUP_CTRL, -- (uint8_t)1, &data) ); -- data |= SBSDIO_WCTRL_WAKE_TILL_HT_AVAIL; -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_WAKEUP_CTRL, -- (uint8_t)1, data) ); -- } -- -- /* Set brcmCardCapability to noCmdDecode mode. -- * It makes sdiod_aos to wakeup host for any activity of cmd line, even though -- * module won't decode cmd or respond -- */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, (uint32_t)SDIOD_CCCR_BRCM_CARDCAP, -- (uint8_t)1, SDIOD_CCCR_BRCM_CARDCAP_CMD_NODEC) ); -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) ) -- { -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)1, SBSDIO_HT_AVAIL_REQ) ); -- } -- else -- { -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_CHIP_CLOCK_CSR, -- (uint8_t)1, (uint32_t)SBSDIO_FORCE_HT) ); -- } -- -- /* Enable KeepSdioOn (KSO) bit for normal operation */ -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) ) -- { -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)sizeof(data), &data) ); -- } -- else -- { -- CHECK_RETURN(whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)1, &data) ); -- } -- if ( (data & SBSDIO_SLPCSR_KEEP_SDIO_ON) == 0 ) -- { -- data |= SBSDIO_SLPCSR_KEEP_SDIO_ON; -- if ( (wlan_chip_id == 43012) || (wlan_chip_id == 43455) ) -- { -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)sizeof(data), data) ); -- } -- else -- { -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)1, data) ); -- } -- } -- -- /* SPI bus can be configured for sleep by default. -- * KSO bit solely controls the wlan chip sleep -- */ -- CHECK_RETURN(whd_bus_sleep(whd_driver) ); -- -- /* Put SPI interface block to sleep */ -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_PULL_UP, (uint8_t)1, 0xf) ); -- -- whd_driver->chip_info.save_restore_enable = WHD_TRUE; -- } -- else -- { -- whd_driver->chip_info.save_restore_enable = WHD_FALSE; -- } -- -- return WHD_SUCCESS; --} -- --static whd_result_t whd_kso_enable(whd_driver_t whd_driver, whd_bool_t enable) --{ -- uint8_t write_value = 0; -- uint8_t read_value = 0; -- uint8_t compare_value; -- uint8_t bmask; -- uint32_t attempts = ( uint32_t )MAX_KSO_ATTEMPTS; -- whd_result_t result; -- /* Get chip number */ -- -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- if (enable == WHD_TRUE) -- { -- write_value |= SBSDIO_SLPCSR_KEEP_SDIO_ON; -- } -- -- /* 1st KSO write goes to AOS wake up core if device is asleep */ -- /* Possibly device might not respond to this cmd. So, don't check return value here */ -- if ( (wlan_chip_id == 43430) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- /* 2 Sequential writes to KSO bit are required for SR module to wakeup, both write can fail */ -- CHECK_RETURN_IGNORE(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)1, -- write_value) ); -- CHECK_RETURN_IGNORE(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)1, -- write_value) ); -- if (enable == WHD_TRUE) -- { -- /* device WAKEUP through KSO: -- * write bit 0 & read back until -- * both bits 0(kso bit) & 1 (dev on status) are set -- */ -- compare_value = SBSDIO_SLPCSR_KEEP_SDIO_ON | SBSDIO_SLPCSR_DEVICE_ON; -- bmask = compare_value; -- } -- else -- { -- /* Put device to sleep, turn off KSO */ -- compare_value = 0; -- /* Check for bit0 only, bit1(devon status) may not get cleared right away */ -- bmask = SBSDIO_SLPCSR_KEEP_SDIO_ON; -- } -- } -- else -- { -- CHECK_RETURN_IGNORE(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)1, write_value) ); -- -- /* In case of 43012 chip, the chip could go down immediately after KSO bit is cleared. -- * So the further reads of KSO register could fail. Thereby just bailing out immediately -- * after clearing KSO bit, to avoid polling of KSO bit. -- */ -- if (enable == WHD_FALSE) -- { -- return WHD_SUCCESS; -- } -- -- /* 2 Sequential writes to KSO bit are required for SR module to wakeup */ -- CHECK_RETURN_IGNORE(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)1, write_value) ); -- -- /* device WAKEUP through KSO: -- * write bit 0 & read back until -- * both bits 0(kso bit) & 1 (dev on status) are set -- */ -- compare_value = SBSDIO_SLPCSR_KEEP_SDIO_ON | SBSDIO_SLPCSR_DEVICE_ON; -- bmask = compare_value; -- } -- -- while (attempts != 0) -- { -- /* Reliable KSO bit set/clr: -- * Sdiod sleep write access appears to be in sync with PMU 32khz clk -- * just one write attempt may fail,(same is with read ?) -- * in any case, read it back until it matches written value -- */ -- result = whd_bus_read_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, (uint8_t)1, -- &read_value); -- if ( ( (read_value & bmask) == compare_value ) && (result == WHD_SUCCESS) && (read_value != 0xFF) ) -- { -- break; -- } -- -- cy_rtos_delay_milliseconds( ( uint32_t )KSO_WAIT_MS ); -- -- CHECK_RETURN_IGNORE(whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, (uint32_t)SDIO_SLEEP_CSR, -- (uint8_t)1, write_value) ); -- attempts--; -- } -- -- if (attempts == 0) -- { -- WPRINT_WHD_ERROR( ("SDIO bus failed to come up , %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SDIO_BUS_UP_FAIL; -- } -- else -- { -- return WHD_SUCCESS; -- } --} -- --void whd_wlan_wake_from_host(whd_driver_t whd_driver); -- --void whd_wlan_wake_from_host(whd_driver_t whd_driver) --{ -- uint32_t val32 = 0; -- whd_result_t result; -- -- result = whd_bus_read_backplane_value(whd_driver, D11_MACCONTROL_REG, D11_MACCONTROL_REG_SIZE, (uint8_t *)&val32); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- } -- WPRINT_WHD_DEBUG( ("%s: %d:before: maccontrol: 0x%08x\n", __FUNCTION__, __LINE__, (unsigned int)val32) ); -- -- val32 = val32 | D11_MACCONTROL_REG_WAKE; -- result = whd_bus_write_backplane_value(whd_driver, D11_MACCONTROL_REG, D11_MACCONTROL_REG_SIZE, val32); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_write_backplane_value failed\n", __FUNCTION__, __LINE__) ); -- } -- result = whd_bus_read_backplane_value(whd_driver, D11_MACCONTROL_REG, D11_MACCONTROL_REG_SIZE, (uint8_t *)&val32); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s:%d whd_bus_read_backplane_value failed\n", __FUNCTION__, __LINE__) ) -- } -- WPRINT_WHD_DEBUG( ("%s: %d:after: maccontrol: 0x%08x\n", __FUNCTION__, __LINE__, (unsigned int)val32) ); --} -- --whd_result_t whd_wlan_bus_complete_ds_wake(whd_driver_t whd_driver, whd_bool_t wake_from_firmware, -- uint32_t wake_event_indication_addr, uint32_t wake_indication_addr, -- uint32_t sdio_control_addr) --{ -- uint32_t val = 0; -- uint32_t val1 = 0; -- uint32_t count = 0; -- int32_t timeout = 0; -- /* Get chip number */ -- -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- -- if (wlan_chip_id == 43012) -- { -- WPRINT_WHD_DEBUG_DS( ("%s: enter: wake_fr_fw=%d\n", __func__, (int )wake_from_firmware) ); -- -- /* Need to do for all wake causes */ -- while (WHD_SUCCESS != -- whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, SDIO_FUNC_ENABLE_1) ) -- { -- WPRINT_WHD_DEBUG( ("Retry IOEN write\n") ); -- cy_rtos_delay_milliseconds(10); -- } -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(wake_event_indication_addr), 2, -- (uint8_t *)&val) ); -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(wake_indication_addr), 2, (uint8_t *)&val) ); -- -- if (WHD_TRUE == wake_from_firmware) -- { -- WPRINT_WHD_DEBUG_DS( ("%s: CCCR written\n", __func__) ); -- -- /* Read DS1 CTRL STATUS SHM to Check whether HOST MAIL BOX interrupt is triggered due to TX/RX -- * For RX Cases , Value will be DS1_SLEEP -- * For TX Cases, Value will be MAC ON or RADIO_PHY_ON -- */ -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_STATUS), (uint8_t)2, -- (uint8_t *)&val) ); -- if (val == DS1_SLEEP) -- { -- /* HUDI communication to inform D11 to Process and Exit DS1 not required for D11 Wake cases -- * Simply update PMU Resource Mask and Re-download firmware for this case -- */ -- WPRINT_WHD_DEBUG_DS( ("%s: D11 wake detected\n", __func__) ); -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, PMU_MINRESMASK, 1, -- DEFAULT_43012_MIN_RES_MASK) ); -- -- return WHD_SUCCESS; -- } -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_SDIO), 2, -- C_DS1_CTRL_SDIO_DS1_EXIT | C_DS1_CTRL_REQ_VALID) ); -- WPRINT_WHD_DEBUG_DS( ("%s: SDIO ctl written\n", __func__) ); -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_SDIO), (uint8_t)2, -- (uint8_t *)&val) ); -- WPRINT_WHD_DEBUG_DS( ("%s: M_DS1_CTRL_SDIO = [%x]\n", __func__, (int )val) ); -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11_MACCONTROL_REG, (uint8_t)2, (uint8_t *)&val1) ); -- WPRINT_WHD_DEBUG_DS( ("%s: before setting wake = [%x]\n", __func__, (int )val1) ); -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, D11_MACCONTROL_REG, 2, -- val1 | D11_MACCONTROL_REG_WAKE) ); -- WPRINT_WHD_DEBUG_DS( ("%s: After setting wake= [%x]\n", __func__, (int )val1) ); -- -- while (!(val & C_DS1_CTRL_PROC_DONE) ) -- { -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_SDIO), (uint8_t)2, -- (uint8_t *)&val) ); -- count++; -- if (count == 1000) -- { -- WPRINT_WHD_ERROR( ("%s: sdio timed out! Aborting\n", __func__) ); -- return WHD_TIMEOUT; -- } -- } -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_SDIO), (uint8_t)2, -- (uint8_t *)&val) ); -- WPRINT_WHD_DEBUG_DS( ("%s: M_DS1_CTRL_SDIO after poll = [%x]\n", __func__, (int )val) ); -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11_MACCONTROL_REG, (uint8_t)2, (uint8_t *)&val1) ); -- WPRINT_WHD_DEBUG_DS( ("%s: D11_MACCONTROL_REG before Clear = [%x]\n", __func__, (int )val1) ); -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, D11_MACCONTROL_REG, 2, -- val1 & D11_MACCONTROL_CLEAR_WAKE) ); -- WPRINT_WHD_DEBUG_DS( ("%s: D11_MACCONTROL_REG after Clear = [%x]\n", __func__, (int )val1) ); -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, PMU_MINRESMASK, 1, DEFAULT_43012_MIN_RES_MASK) ); -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, PMU_MINRESMASK, (uint8_t)1, (uint8_t *)&val1) ); -- -- WPRINT_WHD_DEBUG_DS( ("%s: PMU_MINRESMASK = [%x]\n", __func__, (int )val1) ); -- } -- else -- { -- while (WHD_SUCCESS != whd_ensure_wlan_bus_is_up(whd_driver) ) -- { -- WPRINT_WHD_DEBUG_DS( ("Retrying bus is up\n") ); -- } -- -- WPRINT_WHD_DEBUG_DS( ("write backplane\n") ); -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(sdio_control_addr), 2, (uint8_t *)&val) ); -- -- while (WHD_SUCCESS != -- whd_bus_write_backplane_value(whd_driver, D11SHM_ADDR(sdio_control_addr), 2, -- val | C_DS1_CTRL_SDIO_DS1_EXIT | C_DS1_CTRL_REQ_VALID) ) -- { -- WPRINT_WHD_DEBUG_DS( ("Retrying backplane write; addr=%x\n", -- (unsigned int )D11SHM_ADDR(sdio_control_addr) ) ); -- cy_rtos_delay_milliseconds(100); -- } -- -- WPRINT_WHD_DEBUG_DS( ("wake host\n") ); -- whd_wlan_wake_from_host(whd_driver); -- -- WPRINT_WHD_DEBUG_DS( ("poll for timeout\n") ); -- /* Poll for PROC_DONE to be set by ucode; timeout after a good amount of time */ -- for (timeout = WHD_WLAN_WAKE_TIMEOUT * 10, val = 0; timeout >= 0; -- timeout -= WHD_SHARED_MEMORY_POLLING_DELAY) -- { -- whd_result_t read_result = -- whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(sdio_control_addr), 2, (uint8_t *)&val); -- -- if ( (WHD_SUCCESS != read_result) || !( (val) & C_DS1_CTRL_PROC_DONE ) ) -- { -- cy_rtos_delay_milliseconds (WHD_SHARED_MEMORY_POLLING_DELAY); -- } -- else -- { -- /* success! */ -- WPRINT_WHD_DEBUG_DS( ("Ucode has posted DONE\n") ); -- break; -- } -- } -- -- WPRINT_WHD_DEBUG_DS( ("%s: %d: 0x%08x\n", __func__, __LINE__, (unsigned int)val) ); -- -- if ( (timeout < 0) && !(val & C_DS1_CTRL_PROC_DONE) ) -- { -- WPRINT_WHD_ERROR( ("%s: Failed to enter DS1 Exit state!\n", __func__) ); -- return WHD_TIMEOUT; -- } -- } -- WPRINT_WHD_DEBUG_DS( ("successfully completed DS wake sequence\n") ); -- return WHD_SUCCESS; -- } -- else -- { -- UNUSED_PARAMETER(wake_from_firmware); -- UNUSED_PARAMETER(wake_event_indication_addr); -- UNUSED_PARAMETER(wake_indication_addr); -- UNUSED_PARAMETER(sdio_control_addr); -- -- WPRINT_WHD_DEBUG( ("%s: enter\n", __FUNCTION__) ); -- -- CHECK_RETURN(whd_bus_write_register_value(whd_driver, BUS_FUNCTION, SDIOD_CCCR_IOEN, (uint8_t)1, -- SDIO_FUNC_ENABLE_1) ); -- WPRINT_WHD_DEBUG( ("%s: CCCR written\n", __FUNCTION__) ); -- -- /* Read DS1 CTRL STATUS SHM to Check whether HOST MAIL BOX interrupt is triggered due to TX/RX -- * For RX Cases , Value will be DS1_SLEEP -- * For TX Cases, Value will be MAC ON or RADIO_PHY_ON -- */ -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_STATUS), (uint8_t)2, -- (uint8_t *)&val) ); -- if (val == DS1_SLEEP) -- { -- /* HUDI communication to inform D11 to Process and Exit DS1 not required for D11 Wake cases -- * Simply update PMU Resource Mask and Re-download firmware for this case -- */ -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, PMU_MINRESMASK, 1, DEFAULT_43012_MIN_RES_MASK) ); -- return WHD_SUCCESS; -- } -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_SDIO), 2, -- C_DS1_CTRL_SDIO_DS1_EXIT | C_DS1_CTRL_REQ_VALID) ); -- WPRINT_WHD_DEBUG( ("%s: SDIO ctl written\n", __FUNCTION__) ); -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR( -- M_DS1_CTRL_SDIO), (uint8_t)2, (uint8_t *)&val) ); -- WPRINT_WHD_DEBUG( ("%s: M_DS1_CTRL_SDIO = [%x]\n", __FUNCTION__, (int)val) ); -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11_MACCONTROL_REG, (uint8_t)2, (uint8_t *)&val1) ); -- WPRINT_WHD_DEBUG( ("%s: before setting wake = [%x]\n", __FUNCTION__, (int)val1) ); -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, D11_MACCONTROL_REG, 2, -- val1 | D11_MACCONTROL_REG_WAKE) ); -- WPRINT_WHD_DEBUG( ("%s: After setting wake= [%x]\n", __FUNCTION__, (int)val1) ); -- -- while (!(val & C_DS1_CTRL_PROC_DONE) ) -- { -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR(M_DS1_CTRL_SDIO), (uint8_t)2, -- (uint8_t *)&val) ); -- count++; -- if (count == 1000) -- { -- WPRINT_WHD_ERROR( ("%s: sdio timed out! Aborting\n", __FUNCTION__) ); -- return WHD_TIMEOUT; -- } -- } -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11SHM_ADDR( -- M_DS1_CTRL_SDIO), (uint8_t)2, (uint8_t *)&val) ); -- WPRINT_WHD_DEBUG( ("%s: M_DS1_CTRL_SDIO after poll = [%x]\n", __FUNCTION__, (int)val) ); -- -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, D11_MACCONTROL_REG, (uint8_t)2, (uint8_t *)&val1) ); -- WPRINT_WHD_DEBUG( ("%s: D11_MACCONTROL_REG before Clear = [%x]\n", __FUNCTION__, (int)val1) ); -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, D11_MACCONTROL_REG, 2, -- val1 & D11_MACCONTROL_CLEAR_WAKE) ); -- WPRINT_WHD_DEBUG( ("%s: D11_MACCONTROL_REG after Clear = [%x]\n", __FUNCTION__, (int)val1) ); -- -- CHECK_RETURN(whd_bus_write_backplane_value(whd_driver, PMU_MINRESMASK, 1, DEFAULT_43012_MIN_RES_MASK) ); -- CHECK_RETURN(whd_bus_read_backplane_value(whd_driver, PMU_MINRESMASK, (uint8_t)1, (uint8_t *)&val1) ); -- WPRINT_WHD_DEBUG( ("%s: PMU_MINRESMASK = [%x]\n", __FUNCTION__, (int)val1) ); -- return WHD_SUCCESS; -- } --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip_constants.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip_constants.c -deleted file mode 100644 -index a01a29fb0a..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_chip_constants.c -+++ /dev/null -@@ -1,362 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "whd_chip_constants.h" --#include "whd_wlioctl.h" --#include "whd_int.h" --#include "whd_types_int.h" -- -- --/****************************************************** --* Function Definitions --******************************************************/ -- --uint32_t whd_chip_set_chip_id(whd_driver_t whd_driver, uint16_t id) --{ -- whd_driver->chip_info.chip_id = id; -- -- return 0; --} -- --uint16_t whd_chip_get_chip_id(whd_driver_t whd_driver) --{ -- return whd_driver->chip_info.chip_id; --} -- --uint32_t get_whd_var(whd_driver_t whd_driver, chip_var_t var) --{ -- uint32_t val = 0; -- -- uint16_t wlan_chip_id = whd_chip_get_chip_id(whd_driver); -- switch (var) -- { -- case BUS_CREDIT_DIFF: -- CHECK_RETURN(get_chip_max_bus_data_credit_diff(wlan_chip_id, &val) ); -- break; -- case CHIP_RAM_SIZE: -- CHECK_RETURN(get_chip_ram_size(wlan_chip_id, &val) ); -- break; -- case ATCM_RAM_BASE_ADDRESS: -- CHECK_RETURN(get_atcm_ram_base_address(wlan_chip_id, &val) ); -- break; -- case SOCRAM_SRMEM_SIZE: -- CHECK_RETURN(get_socsram_srmem_size(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BAND_MASK: -- CHECK_RETURN(get_wl_chanspec_band_mask(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BAND_2G: -- CHECK_RETURN(get_wl_chanspec_band_2G(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BAND_5G: -- CHECK_RETURN(get_wl_chanspec_band_5G(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BAND_SHIFT: -- CHECK_RETURN(get_wl_chanspec_band_shift(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BW_10: -- CHECK_RETURN(get_wl_chanspec_bw_10(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BW_20: -- CHECK_RETURN(get_wl_chanspec_bw_20(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BW_40: -- CHECK_RETURN(get_wl_chanspec_bw_40(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BW_MASK: -- CHECK_RETURN(get_wl_chanspec_bw_mask(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_BW_SHIFT: -- CHECK_RETURN(get_wl_chanspec_bw_shift(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_CTL_SB_LOWER: -- CHECK_RETURN(get_wl_chanspec_ctl_sb_lower(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_CTL_SB_UPPER: -- CHECK_RETURN(get_wl_chanspec_ctl_sb_upper(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_CTL_SB_NONE: -- CHECK_RETURN(get_wl_chanspec_ctl_sb_none(wlan_chip_id, &val) ); -- break; -- case CHANSPEC_CTL_SB_MASK: -- CHECK_RETURN(get_wl_chanspec_ctl_sb_mask(wlan_chip_id, &val) ); -- break; -- default: -- break; -- } -- -- return val; --} -- --whd_result_t get_chip_max_bus_data_credit_diff(uint16_t wlan_chip_id, uint32_t *credit_diff) --{ -- *credit_diff = 0; -- if (wlan_chip_id == 43362) -- { -- *credit_diff = 7; -- } -- else if (wlan_chip_id == 43455) -- { -- *credit_diff = 50; -- } -- else -- { -- *credit_diff = 20; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_chip_ram_size(uint16_t wlan_chip_id, uint32_t *size) --{ -- *size = 0; -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) || (wlan_chip_id == 43430) ) -- { -- *size = (512 * 1024); -- } -- else if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4390) ) -- { -- *size = 0x3C000; -- } -- else if (wlan_chip_id == 43909) -- { -- *size = 0x90000; -- } -- else if (wlan_chip_id == 43012) -- { -- *size = 0xA0000; -- } -- else -- { -- *size = 0x80000; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_atcm_ram_base_address(uint16_t wlan_chip_id, uint32_t *size) --{ -- *size = 0; -- if (wlan_chip_id == 43455) -- { -- *size = 0x198000; -- } -- else -- { -- *size = 0; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_socsram_srmem_size(uint16_t wlan_chip_id, uint32_t *mem_size) --{ -- *mem_size = 0; -- if ( (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *mem_size = (32 * 1024); -- } -- else if (wlan_chip_id == 43430) -- { -- *mem_size = (64 * 1024); -- } -- else -- { -- *mem_size = 0; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_band_mask(uint16_t wlan_chip_id, uint32_t *band_mask) --{ -- *band_mask = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *band_mask = 0xf000; -- } -- else -- { -- *band_mask = 0xc000; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_band_2G(uint16_t wlan_chip_id, uint32_t *band_2g) --{ -- *band_2g = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *band_2g = 0x2000; -- } -- else -- { -- *band_2g = 0x0000; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_band_5G(uint16_t wlan_chip_id, uint32_t *band_5g) --{ -- *band_5g = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *band_5g = 0x1000; -- } -- else -- { -- *band_5g = 0xc000; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_band_shift(uint16_t wlan_chip_id, uint32_t *band_shift) --{ -- *band_shift = 0; -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *band_shift = 12; -- } -- else -- { -- *band_shift = 14; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_bw_10(uint16_t wlan_chip_id, uint32_t *bw_10) --{ -- *bw_10 = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *bw_10 = 0x0400; -- } -- else -- { -- *bw_10 = 0x0800; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_bw_20(uint16_t wlan_chip_id, uint32_t *bw_20) --{ -- *bw_20 = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *bw_20 = 0x0800; -- } -- else -- { -- *bw_20 = 0x1000; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_bw_40(uint16_t wlan_chip_id, uint32_t *bw_40) --{ -- *bw_40 = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *bw_40 = 0x0C00; -- } -- else -- { -- *bw_40 = 0x1800; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_bw_mask(uint16_t wlan_chip_id, uint32_t *bw_mask) --{ -- *bw_mask = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *bw_mask = 0x0C00; -- } -- else -- { -- *bw_mask = 0x3800; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_bw_shift(uint16_t wlan_chip_id, uint32_t *bw_shift) --{ -- *bw_shift = 0; -- if ( (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *bw_shift = 10; -- } -- else -- { -- *bw_shift = 11; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_ctl_sb_lower(uint16_t wlan_chip_id, uint32_t *sb_lower) --{ -- *sb_lower = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *sb_lower = 0x0100; -- } -- else -- { -- *sb_lower = WL_CHANSPEC_CTL_SB_LLL; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_ctl_sb_upper(uint16_t wlan_chip_id, uint32_t *sb_upper) --{ -- *sb_upper = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *sb_upper = 0x0200; -- } -- else -- { -- *sb_upper = WL_CHANSPEC_CTL_SB_LLU; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_ctl_sb_none(uint16_t wlan_chip_id, uint32_t *sb_none) --{ -- *sb_none = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *sb_none = 0x0300; -- } -- else -- { -- *sb_none = WL_CHANSPEC_CTL_SB_LLL; -- } -- return WHD_SUCCESS; --} -- --whd_result_t get_wl_chanspec_ctl_sb_mask(uint16_t wlan_chip_id, uint32_t *sb_mask) --{ -- *sb_mask = 0; -- if ( (wlan_chip_id == 43362) || (wlan_chip_id == 4334) || (wlan_chip_id == 43340) || (wlan_chip_id == 43342) ) -- { -- *sb_mask = 0x0300; -- } -- else -- { -- *sb_mask = 0x0700; -- } -- return WHD_SUCCESS; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_clm.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_clm.c -deleted file mode 100644 -index dfeec0ab02..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_clm.c -+++ /dev/null -@@ -1,172 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides generic clm blob file download functionality -- */ -- --#include --#include "whd_clm.h" --#include "whd_wlioctl.h" --#include "whd_cdc_bdc.h" --#include "whd_debug.h" --#include "whd_int.h" --#include "whd_buffer_api.h" --#include "whd_resource_if.h" --#include "whd_resource_api.h" --#include "whd_types_int.h" -- --/****************************************************** --* @cond Constants --******************************************************/ -- --/* -- Generic interface for downloading required data onto the dongle -- */ --static int whd_download_wifi_clm_image(whd_interface_t ifp, const char *iovar, uint16_t flag, uint16_t dload_type, -- unsigned char *dload_buf, uint32_t len) --{ -- wl_dload_data_t *dload_ptr = (wl_dload_data_t *)dload_buf; -- unsigned int dload_data_offset; -- whd_buffer_t buffer; -- uint8_t *iov_data; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- dload_data_offset = offsetof(wl_dload_data_t, data); -- dload_ptr->flag = htod16( (DLOAD_HANDLER_VER << DLOAD_FLAG_VER_SHIFT) | flag ); -- dload_ptr->dload_type = htod16(dload_type); -- dload_ptr->len = htod32(len - dload_data_offset); -- -- dload_ptr->crc = 0; -- -- whd_assert("dload buffer too large", len < 0xffffffff - 8); -- len = len + 8 - (len % 8); -- -- iov_data = (uint8_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)len, iovar); -- CHECK_IOCTL_BUFFER(iov_data); -- memcpy(iov_data, (uint8_t *)dload_ptr, len); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); -- return WHD_SUCCESS; --} -- --whd_result_t whd_process_clm_data(whd_interface_t ifp) --{ -- whd_result_t ret = WHD_SUCCESS; -- uint32_t clm_blob_size; -- unsigned int size2alloc, data_offset; -- unsigned char *chunk_buf; -- uint16_t dl_flag = DL_BEGIN; -- unsigned int chunk_len; -- uint32_t size_read; -- uint8_t *image; -- uint32_t blocks_count = 0; -- uint16_t datalen = 0; -- uint32_t i, j, num_buff; -- unsigned int transfer_progress; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- /* clm file size is the initial datalen value which is decremented */ -- ret = whd_resource_size(whd_driver, WHD_RESOURCE_WLAN_CLM, &clm_blob_size); -- -- if (ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Fatal error: download_resource doesn't exist\n") ); -- return ret; -- } -- -- ret = whd_get_resource_no_of_blocks(whd_driver, WHD_RESOURCE_WLAN_CLM, &blocks_count); -- if (ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Fatal error: download_resource blocks count not know\n") ); -- return ret; -- } -- -- data_offset = offsetof(wl_dload_data_t, data); -- size2alloc = data_offset + BLOCK_SIZE; -- -- -- if ( (chunk_buf = (unsigned char *)malloc(size2alloc) ) != NULL ) -- { -- memset(chunk_buf, 0, size2alloc); -- transfer_progress = 0; -- for (i = 0; i < blocks_count; i++) -- { -- whd_get_resource_block(whd_driver, WHD_RESOURCE_WLAN_CLM, i, (const uint8_t **)&image, &size_read); -- -- num_buff = (size_read + BLOCK_SIZE - 1) / BLOCK_SIZE; -- if (blocks_count != 1) -- transfer_progress = 0; -- -- for (j = 0; j < num_buff; j++) -- { -- if (size_read >= BLOCK_SIZE) -- chunk_len = BLOCK_SIZE; -- else -- chunk_len = (int)size_read; -- memcpy(chunk_buf + data_offset, &image[transfer_progress], chunk_len); -- -- if (datalen + chunk_len == clm_blob_size) -- { -- dl_flag |= DL_END; -- } -- -- ret = whd_download_wifi_clm_image(ifp, IOVAR_STR_CLMLOAD, dl_flag, DL_TYPE_CLM, chunk_buf, -- data_offset + chunk_len); -- dl_flag &= (uint16_t) ~DL_BEGIN; -- transfer_progress += chunk_len; -- size_read = size_read - chunk_len; -- datalen += chunk_len; -- } -- } -- -- free(chunk_buf); -- if (ret != WHD_SUCCESS) -- { -- whd_result_t ret_clmload_status; -- whd_buffer_t buffer; -- whd_buffer_t response; -- void *data; -- -- WPRINT_WHD_DEBUG( ("clmload (%" PRIu32 " byte file) failed with return %" PRIu32 "; ", clm_blob_size, -- ret) ); -- data = (int *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, 4, IOVAR_STR_CLMLOAD_STATUS); -- CHECK_IOCTL_BUFFER(data); -- ret_clmload_status = whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response); -- if (ret_clmload_status != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("clmload_status failed with return %lu\n", ret_clmload_status) ); -- } -- else -- { -- uint8_t *clmload_status = (uint8_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- if (clmload_status != NULL) -- { -- WPRINT_WHD_DEBUG( ("clmload_status is %d\n", *clmload_status) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- } -- } -- } -- else -- { -- WPRINT_WHD_ERROR( ("Memory allocation failure, %s failed at %d \n", __func__, __LINE__) ); -- ret = WHD_MALLOC_FAILURE; -- } -- -- return ret; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_debug.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_debug.c -deleted file mode 100644 -index 577ea86d87..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_debug.c -+++ /dev/null -@@ -1,62 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "whd_debug.h" --#include "whd_int.h" --#include "bus_protocols/whd_bus_protocol_interface.h" -- --/****************************************************** --* Constants --******************************************************/ -- --/****************************************************** --* Structures --******************************************************/ -- --/****************************************************** --* Variables --******************************************************/ -- --/****************************************************** --* Function definitions --******************************************************/ --void whd_init_stats(whd_driver_t whd_driver) --{ -- memset(&whd_driver->whd_stats, 0, sizeof(whd_driver->whd_stats) ); --} -- --uint32_t whd_print_stats(whd_driver_t whd_driver, whd_bool_t reset_after_print) --{ -- CHECK_DRIVER_NULL(whd_driver); -- -- WPRINT_MACRO( ("WHD Stats.. \n" -- "tx_total:%" PRIu32 ", rx_total:%" PRIu32 ", tx_no_mem:%" PRIu32 ", rx_no_mem:%" PRIu32 "\n" -- "tx_fail:%" PRIu32 ", no_credit:%" PRIu32 ", flow_control:%" PRIu32 "\n", -- whd_driver->whd_stats.tx_total, whd_driver->whd_stats.rx_total, -- whd_driver->whd_stats.tx_no_mem, whd_driver->whd_stats.rx_no_mem, -- whd_driver->whd_stats.tx_fail, whd_driver->whd_stats.no_credit, -- whd_driver->whd_stats.flow_control) ); -- -- if (reset_after_print == WHD_TRUE) -- { -- memset(&whd_driver->whd_stats, 0, sizeof(whd_driver->whd_stats) ); -- } -- -- CHECK_RETURN(whd_bus_print_stats(whd_driver, reset_after_print) ); -- return WHD_SUCCESS; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_events.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_events.c -deleted file mode 100644 -index 0d7b764400..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_events.c -+++ /dev/null -@@ -1,475 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "whd_int.h" --#include "whd_cdc_bdc.h" --#include "whd_events_int.h" --#include "cyabs_rtos.h" --#include "whd_network_types.h" --#include "whd_types_int.h" --#include "whd_wlioctl.h" --#include "whd_thread_internal.h" --#include "whd_buffer_api.h" -- --/****************************************************** --* Constants --******************************************************/ --/****************************************************** --* Macros --******************************************************/ --/* bit map related macros */ --#define NBBY 8 /* 8 bits per byte */ --#define setbit(a, i) ( ( (uint8_t *)a )[(int)(i) / (int)(NBBY)] |= (uint8_t)(1 << ( (i) % NBBY ) ) ) --#define clrbit(a, i) ( ( (uint8_t *)a )[(int)(i) / (int)(NBBY)] &= (uint8_t) ~(1 << ( (i) % NBBY ) ) ) --#define isset(a, i) ( ( (const uint8_t *)a )[(int)(i) / (int)(NBBY)]& (1 << ( (i) % NBBY ) ) ) --#define isclr(a, i) ( ( ( (const uint8_t *)a )[(int)(i) / (int)(NBBY)]& (1 << ( (i) % NBBY ) ) ) == 0 ) -- --/****************************************************** --* Local Structures --******************************************************/ -- --/****************************************************** --* Static Variables --******************************************************/ -- --/****************************************************** --* Static Function Prototypes --******************************************************/ --/* helper function for event messages ext API */ --static uint8_t *whd_management_alloc_event_msgs_buffer(whd_interface_t ifp, whd_buffer_t *buffer); --static uint8_t whd_find_number_of_events(const whd_event_num_t *event_nums); -- --/****************************************************** --* Static Functions --******************************************************/ -- --static uint8_t whd_find_number_of_events(const whd_event_num_t *event_nums) --{ -- uint8_t count = 0; -- -- while (*event_nums != WLC_E_NONE) -- { -- count++; -- event_nums++; -- -- if (count >= WHD_MAX_EVENT_SUBSCRIPTION) -- return 0; -- } -- return count + 1; --} -- --/** -- * Registers locally a handler to receive event callbacks. -- * Does not notify Wi-Fi about event subscription change. -- * Can be used to refresh local callbacks (e.g. after deep-sleep) -- * if Wi-Fi is already notified about them. -- * -- * This function registers a callback handler to be notified when -- * a particular event is received. -- * -- * @note : Currently there is a limit to the number of simultaneously -- * registered events -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param event_nums An array of event types that is to trigger the handler. -- * The array must be terminated with a WLC_E_NONE event -- * See @ref whd_event_num_t for available events -- * @param handler_func A function pointer to the new handler callback, -- * or NULL if callbacks are to be disabled for the given event type -- * @param handler_user_data A pointer value which will be passed to the event handler function -- * at the time an event is triggered (NULL is allowed) -- * @param[out] *event_index entry where the event handler is registered in the list -- * -- * @return WHD result code -- */ --whd_result_t whd_management_set_event_handler_locally(whd_interface_t ifp, const whd_event_num_t *event_nums, -- whd_event_handler_t handler_func, -- void *handler_user_data, uint16_t *event_index) --{ -- uint16_t entry = (uint16_t)0xFF; -- uint16_t i; -- whd_driver_t whd_driver = ifp->whd_driver; -- whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info; -- uint8_t num_of_events; -- num_of_events = whd_find_number_of_events(event_nums); -- -- if (num_of_events <= 1) -- { -- WPRINT_WHD_ERROR( ("Exceeded the maximum event subscription/no event subscribed\n") ); -- return WHD_UNFINISHED; -- } -- -- /* Find an existing matching entry OR the next empty entry */ -- for (i = 0; i < (uint16_t)WHD_EVENT_HANDLER_LIST_SIZE; i++) -- { -- /* Find a matching event list OR the first empty event entry */ -- if (!(memcmp(cdc_bdc_info->whd_event_list[i].events, event_nums, -- num_of_events * (sizeof(whd_event_num_t) ) ) ) ) -- { -- /* Check if all the data already matches */ -- if ( (cdc_bdc_info->whd_event_list[i].handler == handler_func) && -- (cdc_bdc_info->whd_event_list[i].handler_user_data == handler_user_data) && -- (cdc_bdc_info->whd_event_list[i].ifidx == ifp->ifidx) ) -- { -- /* send back the entry where the handler is added */ -- *event_index = i; -- return WHD_SUCCESS; -- } -- } -- else if ( (entry == (uint16_t)0xFF) && (cdc_bdc_info->whd_event_list[i].event_set == WHD_FALSE) ) -- { -- entry = i; -- } -- } -- -- /* Check if handler function was provided */ -- if (handler_func != NULL) -- { -- /* Check if an empty entry was not found */ -- if (entry == (uint16_t)0xFF) -- { -- WPRINT_WHD_DEBUG( ("Out of space in event handlers table - try increasing WHD_EVENT_HANDLER_LIST_SIZE\n") ); -- return WHD_OUT_OF_EVENT_HANDLER_SPACE; -- } -- -- /* Add the new handler in at the free space */ -- memcpy (cdc_bdc_info->whd_event_list[entry].events, event_nums, num_of_events * (sizeof(whd_event_num_t) ) ); -- cdc_bdc_info->whd_event_list[entry].handler = handler_func; -- cdc_bdc_info->whd_event_list[entry].handler_user_data = handler_user_data; -- cdc_bdc_info->whd_event_list[entry].ifidx = ifp->ifidx; -- cdc_bdc_info->whd_event_list[entry].event_set = WHD_TRUE; -- -- /* send back the entry where the handler is added */ -- *event_index = entry; -- } -- else -- { -- WPRINT_WHD_ERROR( ("Event handler callback function is NULL/not provided to register\n") ); -- return WHD_BADARG; -- } -- -- return WHD_SUCCESS; --} -- --/* allocates memory for the needed iovar and returns a pointer to the event mask */ --static uint8_t *whd_management_alloc_event_msgs_buffer(whd_interface_t ifp, whd_buffer_t *buffer) --{ -- uint16_t i; -- uint16_t j; -- whd_bool_t use_extended_evt = WHD_FALSE; -- uint32_t max_event = 0; -- eventmsgs_ext_t *eventmsgs_ext_data = NULL; -- uint32_t *data = NULL; -- whd_driver_t whd_driver = ifp->whd_driver; -- whd_cdc_bdc_info_t *cdc_bdc_info = &whd_driver->cdc_bdc_info; -- -- /* Check to see if event that's set requires more than 128 bit */ -- for (i = 0; i < (uint16_t)WHD_EVENT_HANDLER_LIST_SIZE; i++) -- { -- if (cdc_bdc_info->whd_event_list[i].event_set) -- { -- for (j = 0; cdc_bdc_info->whd_event_list[i].events[j] != WLC_E_NONE; j++) -- { -- uint32_t event_value = cdc_bdc_info->whd_event_list[i].events[j]; -- if (event_value > 127) -- { -- use_extended_evt = WHD_TRUE; -- if (event_value > max_event) -- { -- max_event = event_value; -- } -- /* keep going to get highest value */ -- } -- } -- } -- } -- -- if (WHD_FALSE == use_extended_evt) -- { -- /* use old iovar for backwards compat */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, buffer, (uint16_t)WL_EVENTING_MASK_LEN + 4, -- "bsscfg:" IOVAR_STR_EVENT_MSGS); -- -- if (NULL == data) -- { -- return NULL; -- } -- -- data[0] = ifp->bsscfgidx; -- -- return (uint8_t *)&data[1]; -- } -- else -- { -- uint8_t mask_len = (uint8_t)( (max_event + 8) / 8 ); -- data = -- (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, buffer, -- (uint16_t)(sizeof(eventmsgs_ext_t) + mask_len + 4), -- "bsscfg:" IOVAR_STR_EVENT_MSGS_EXT); -- -- if (NULL == data) -- { -- return NULL; -- } -- -- data[0] = ifp->bsscfgidx; -- -- eventmsgs_ext_data = (eventmsgs_ext_t *)&data[1]; -- -- memset(eventmsgs_ext_data, 0, sizeof(*eventmsgs_ext_data) ); -- eventmsgs_ext_data->ver = EVENTMSGS_VER; -- eventmsgs_ext_data->command = EVENTMSGS_SET_MASK; -- eventmsgs_ext_data->len = mask_len; -- return eventmsgs_ext_data->mask; -- } --} -- --/** -- * Registers a handler to receive event callbacks. -- * Subscribe locally and notify Wi-Fi about subscription. -- * -- * This function registers a callback handler to be notified when -- * a particular event is received. -- * -- * @note : Currently there is a limit to the number of simultaneously -- * registered events -- * -- * @param ifp Pointer to handle instance of whd interface -- * @param event_nums An array of event types that is to trigger the handler. -- * The array must be terminated with a WLC_E_NONE event -- * See @ref whd_event_num_t for available events -- * @param handler_func A function pointer to the new handler callback -- * @param handler_user_data A pointer value which will be passed to the event handler function -- * at the time an event is triggered (NULL is allowed) -- * @param[out] *event_index entry where the event handler is registered in the list -- * -- * @return WHD result code -- */ --whd_result_t whd_management_set_event_handler(whd_interface_t ifp, const whd_event_num_t *event_nums, -- whd_event_handler_t handler_func, -- void *handler_user_data, uint16_t *event_index) --{ -- whd_buffer_t buffer; -- uint8_t *event_mask; -- uint16_t i; -- uint16_t j; -- whd_result_t res; -- whd_driver_t whd_driver; -- whd_cdc_bdc_info_t *cdc_bdc_info; -- whd_interface_t prim_ifp; -- -- if (ifp == NULL) -- { -- return WHD_UNKNOWN_INTERFACE; -- } -- -- if (!event_nums || !event_index) -- { -- WPRINT_WHD_ERROR( ("Event list to be registered is NULL/Event index is NULL") ); -- return WHD_BADARG; -- } -- -- whd_driver = ifp->whd_driver; -- cdc_bdc_info = &whd_driver->cdc_bdc_info; -- prim_ifp = whd_get_primary_interface(whd_driver); -- -- if (prim_ifp == NULL) -- { -- return WHD_UNKNOWN_INTERFACE; -- } -- -- /* Acquire mutex preventing multiple threads accessing the handler at the same time */ -- res = cy_rtos_get_semaphore(&cdc_bdc_info->event_list_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE); -- if (res != WHD_SUCCESS) -- { -- return res; -- } -- -- /* Set event handler locally */ -- res = whd_management_set_event_handler_locally(ifp, event_nums, handler_func, handler_user_data, event_index); -- if (res != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error in setting event handler locally, %s failed at %d \n", __func__, __LINE__) ); -- goto set_event_handler_exit; -- } -- -- /* Send the new event mask value to the wifi chip */ -- event_mask = whd_management_alloc_event_msgs_buffer(ifp, &buffer); -- -- if (NULL == event_mask) -- { -- res = WHD_BUFFER_UNAVAILABLE_PERMANENT; -- WPRINT_WHD_ERROR( ("Buffer unavailable permanently, %s failed at %d \n", __func__, __LINE__) ); -- goto set_event_handler_exit; -- } -- -- /* Keep the wlan awake while we set the event_msgs */ -- WHD_WLAN_KEEP_AWAKE(whd_driver); -- -- /* Set the event bits for each event from every handler */ -- memset(event_mask, 0, (size_t)WL_EVENTING_MASK_LEN); -- for (i = 0; i < (uint16_t)WHD_EVENT_HANDLER_LIST_SIZE; i++) -- { -- if (cdc_bdc_info->whd_event_list[i].event_set) -- { -- for (j = 0; cdc_bdc_info->whd_event_list[i].events[j] != WLC_E_NONE; j++) -- { -- setbit(event_mask, cdc_bdc_info->whd_event_list[i].events[j]); -- } -- } -- } -- -- /* set the event_list_mutex from calling thread before sending iovar -- * as the RX thread also waits on this Mutex when an ASYNC Event received -- * causing deadlock -- */ -- CHECK_RETURN(cy_rtos_set_semaphore(&cdc_bdc_info->event_list_mutex, WHD_FALSE) ); -- -- CHECK_RETURN(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0) ); -- -- /* The wlan chip can sleep from now on */ -- WHD_WLAN_LET_SLEEP(whd_driver); -- return WHD_SUCCESS; -- --set_event_handler_exit: -- CHECK_RETURN(cy_rtos_set_semaphore(&cdc_bdc_info->event_list_mutex, WHD_FALSE) ); -- return res; --} -- --whd_result_t whd_wifi_set_event_handler(whd_interface_t ifp, const uint32_t *event_type, -- whd_event_handler_t handler_func, -- void *handler_user_data, uint16_t *event_index) --{ -- whd_buffer_t buffer; -- uint8_t *event_mask; -- uint16_t i; -- uint16_t j; -- whd_result_t res; -- whd_driver_t whd_driver; -- whd_cdc_bdc_info_t *cdc_bdc_info; -- whd_interface_t prim_ifp; -- -- if (ifp == NULL) -- { -- return WHD_UNKNOWN_INTERFACE; -- } -- -- if (!event_type || !event_index) -- { -- WPRINT_WHD_ERROR( ("Event list to be registered is NULL/Event index is NULL") ); -- return WHD_BADARG; -- } -- -- whd_driver = ifp->whd_driver; -- cdc_bdc_info = &whd_driver->cdc_bdc_info; -- prim_ifp = whd_get_primary_interface(whd_driver); -- -- if (prim_ifp == NULL) -- { -- return WHD_UNKNOWN_INTERFACE; -- } -- -- /* Acquire mutex preventing multiple threads accessing the handler at the same time */ -- res = cy_rtos_get_semaphore(&cdc_bdc_info->event_list_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE); -- if (res != WHD_SUCCESS) -- { -- return res; -- } -- -- /* Set event handler locally */ -- res = whd_management_set_event_handler_locally(ifp, (whd_event_num_t *)event_type, handler_func, handler_user_data, -- event_index); -- if (res != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error in setting event handler locally, %s failed at %d \n", __func__, __LINE__) ); -- goto set_event_handler_exit; -- } -- -- /* Send the new event mask value to the wifi chip */ -- event_mask = whd_management_alloc_event_msgs_buffer(ifp, &buffer); -- -- if (NULL == event_mask) -- { -- res = WHD_BUFFER_UNAVAILABLE_PERMANENT; -- WPRINT_WHD_ERROR( ("Buffer unavailable permanently, %s failed at %d \n", __func__, __LINE__) ); -- goto set_event_handler_exit; -- } -- -- /* Keep the wlan awake while we set the event_msgs */ -- WHD_WLAN_KEEP_AWAKE(whd_driver); -- -- /* Set the event bits for each event from every handler */ -- memset(event_mask, 0, (size_t)WL_EVENTING_MASK_LEN); -- for (i = 0; i < (uint16_t)WHD_EVENT_HANDLER_LIST_SIZE; i++) -- { -- if (cdc_bdc_info->whd_event_list[i].event_set) -- { -- for (j = 0; cdc_bdc_info->whd_event_list[i].events[j] != WLC_E_NONE; j++) -- { -- setbit(event_mask, cdc_bdc_info->whd_event_list[i].events[j]); -- } -- } -- } -- -- /* set the event_list_mutex from calling thread before sending iovar -- * as the RX thread also waits on this Mutex when an ASYNC Event received -- * causing deadlock -- */ -- CHECK_RETURN(cy_rtos_set_semaphore(&cdc_bdc_info->event_list_mutex, WHD_FALSE) ); -- -- CHECK_RETURN(whd_cdc_send_iovar(prim_ifp, CDC_SET, buffer, 0) ); -- -- /* The wlan chip can sleep from now on */ -- WHD_WLAN_LET_SLEEP(whd_driver); -- return WHD_SUCCESS; -- --set_event_handler_exit: -- CHECK_RETURN(cy_rtos_set_semaphore(&cdc_bdc_info->event_list_mutex, WHD_FALSE) ); -- return res; --} -- --uint32_t whd_wifi_deregister_event_handler(whd_interface_t ifp, uint16_t event_index) --{ -- whd_driver_t whd_driver; -- whd_cdc_bdc_info_t *cdc_bdc_info; -- -- if (ifp == NULL) -- { -- return WHD_UNKNOWN_INTERFACE; -- } -- -- whd_driver = ifp->whd_driver; -- cdc_bdc_info = &whd_driver->cdc_bdc_info; -- -- if (event_index < WHD_EVENT_HANDLER_LIST_SIZE) -- { -- memset(cdc_bdc_info->whd_event_list[event_index].events, 0xFF, -- (sizeof(cdc_bdc_info->whd_event_list[event_index].events) ) ); -- cdc_bdc_info->whd_event_list[event_index].handler = NULL; -- cdc_bdc_info->whd_event_list[event_index].handler_user_data = NULL; -- cdc_bdc_info->whd_event_list[event_index].event_set = WHD_FALSE; -- return WHD_SUCCESS; -- } -- if (event_index == 0xFF) -- { -- WPRINT_WHD_INFO( ("Event handler not registered \n") ); -- return WHD_SUCCESS; -- } -- WPRINT_WHD_DEBUG( ("Invalid event index received to deregister the event handler \n") ); -- return WHD_BADARG; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_logging.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_logging.c -deleted file mode 100644 -index 2766f75111..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_logging.c -+++ /dev/null -@@ -1,112 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include --#include --#include --#include "whd_debug.h" -- --#ifdef WHD_LOGGING_BUFFER_ENABLE -- --#ifndef LOGGING_BUFFER_SIZE --#error LOGGING_BUFFER_SIZE is not defined --#endif /* LOGGING_BUFFER_SIZE */ --whd_logging_t logbuf; -- --int whd_buffer_printf(const char *format, ...) --{ -- int potential_num_written = 0; -- va_list args; -- va_start (args, format); -- -- potential_num_written = vsnprintf (&(logbuf.buffer[logbuf.buffer_write]), -- (size_t)(LOGGING_BUFFER_SIZE - (logbuf.buffer_write) ) + 1, format, args); -- -- if (potential_num_written > (int)(LOGGING_BUFFER_SIZE - (logbuf.buffer_write) ) ) -- { -- /* full print did not fit in buffer - wipe what was just written -- and reprint at start of buffer -- */ -- memset(&(logbuf.buffer[logbuf.buffer_write]), 0xf, (size_t)(LOGGING_BUFFER_SIZE - (logbuf.buffer_write) ) ); -- -- logbuf.buffer_write = 0; -- potential_num_written = vsnprintf (&(logbuf.buffer[logbuf.buffer_write]), -- (size_t)(LOGGING_BUFFER_SIZE - (logbuf.buffer_write) ) + 1, format, args); -- -- logbuf.buffer_write += (unsigned)potential_num_written; -- logbuf.buffer_write %= LOGGING_BUFFER_SIZE; -- -- if (logbuf.roll_over) -- logbuf.over_write = WHD_TRUE; -- -- logbuf.roll_over = WHD_TRUE; -- -- if ( (logbuf.roll_over) && (logbuf.buffer_read < (logbuf.buffer_write) ) ) -- { -- logbuf.buffer_read = logbuf.buffer_write; -- } -- if (logbuf.over_write && (logbuf.buffer_read != (logbuf.buffer_write) ) ) -- { -- logbuf.buffer_read = (logbuf.buffer_write); -- } -- } -- else -- { -- logbuf.buffer_write += (unsigned)potential_num_written; -- -- if ( (logbuf.buffer_write) >= LOGGING_BUFFER_SIZE ) -- { -- logbuf.buffer_write %= LOGGING_BUFFER_SIZE; -- -- if (logbuf.roll_over) -- logbuf.over_write = WHD_TRUE; -- -- logbuf.roll_over = WHD_TRUE; -- } -- -- if (logbuf.roll_over && (logbuf.buffer_read < logbuf.buffer_write) ) -- { -- logbuf.buffer_read = logbuf.buffer_write; -- } -- if (logbuf.over_write && (logbuf.buffer_read != logbuf.buffer_write) ) -- { -- logbuf.buffer_read = logbuf.buffer_write; -- } -- } -- -- va_end (args); -- return potential_num_written; --} -- --void whd_print_logbuffer(void) --{ -- while (logbuf.roll_over || logbuf.over_write || (logbuf.buffer_read != logbuf.buffer_write) ) -- { -- logbuf.roll_over = logbuf.over_write = WHD_FALSE; -- -- while (logbuf.buffer[logbuf.buffer_read] == 0xf) -- { -- logbuf.buffer_read = (logbuf.buffer_read + 1) % LOGGING_BUFFER_SIZE; -- } -- -- putchar(logbuf.buffer[logbuf.buffer_read]); -- logbuf.buffer_read = (logbuf.buffer_read + 1) % LOGGING_BUFFER_SIZE; -- } --} -- --#endif /* ifdef WHD_LOGGING_BUFFER_ENABLE */ -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_management.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_management.c -deleted file mode 100644 -index 7530b7b811..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_management.c -+++ /dev/null -@@ -1,478 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Implements initialisation and other management functions for WHD system -- * -- */ -- --#include --#include --#include "bus_protocols/whd_bus_common.h" --#include "bus_protocols/whd_bus_protocol_interface.h" --#include "whd_debug.h" --#include "whd_events_int.h" --#include "whd_int.h" --#include "whd_chip.h" --#include "whd_sdpcm.h" --#include "whd_wifi_api.h" --#include "whd_clm.h" --#include "whd_wlioctl.h" --#include "whd_types_int.h" -- --/****************************************************** --* Constants --******************************************************/ -- --#define MAX_POST_SET_COUNTRY_RETRY 3 -- --#define MINIMUM_WHD_STACK_SIZE (1024 + 1200 + 2500) -- --#define DEFAULT_PM2_SLEEP_RET_TIME 200 --/****************************************************** --* Static Variables --******************************************************/ -- --/****************************************************** --* Function definitions --******************************************************/ --whd_result_t whd_management_wifi_platform_init(whd_driver_t whd_driver, whd_country_code_t country, -- whd_bool_t resume_after_deep_sleep); --void whd_wifi_bus_irq_handle(void *handler_arg, uint32_t event); -- --whd_interface_t whd_get_primary_interface(whd_driver_t whd_driver) --{ -- if (whd_driver->iflist[0] != NULL) -- { -- return whd_driver->iflist[0]; -- } -- return NULL; --} -- --whd_result_t whd_add_interface(whd_driver_t whd_driver, uint8_t bsscfgidx, uint8_t ifidx, -- const char *name, whd_mac_t *mac_addr, whd_interface_t *ifpp) --{ -- whd_interface_t ifp; -- -- if (!whd_driver || !ifpp) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- if (bsscfgidx < WHD_INTERFACE_MAX) -- { -- if (whd_driver->iflist[bsscfgidx] != NULL) -- { -- *ifpp = whd_driver->iflist[bsscfgidx]; -- return WHD_SUCCESS; -- } -- -- if ( (ifp = (whd_interface_t)malloc(sizeof(struct whd_interface) ) ) != NULL ) -- { -- memset(ifp, 0, (sizeof(struct whd_interface) ) ); -- *ifpp = ifp; -- ifp->whd_driver = whd_driver; -- -- /* Add a interface name */ -- /* strncpy doesn't terminate with null if the src string is long */ -- ifp->if_name[WHD_MSG_IFNAME_MAX - 1] = '\0'; -- strncpy(ifp->if_name, name, sizeof(ifp->if_name) - 1); -- memset(ifp->event_reg_list, WHD_EVENT_NOT_REGISTERED, sizeof(ifp->event_reg_list) ); -- /* Primary interface takes 0 as default */ -- ifp->ifidx = ifidx; -- ifp->bsscfgidx = bsscfgidx; -- -- if (mac_addr != NULL) -- memcpy(ifp->mac_addr.octet, mac_addr->octet, sizeof(whd_mac_t) ); -- else -- memset(ifp->mac_addr.octet, 0, sizeof(whd_mac_t) ); -- -- whd_driver->iflist[bsscfgidx] = ifp; -- whd_driver->if2ifp[ifidx] = bsscfgidx; -- } -- else -- { -- return WHD_MALLOC_FAILURE; -- } -- -- return WHD_SUCCESS; -- } -- return WHD_INVALID_INTERFACE; --} -- --whd_result_t whd_add_primary_interface(whd_driver_t whd_driver, whd_interface_t *ifpp) --{ -- return whd_add_interface(whd_driver, 0, 0, "wlan0", NULL, ifpp); --} -- --uint32_t whd_add_secondary_interface(whd_driver_t whd_driver, whd_mac_t *mac_addr, whd_interface_t *ifpp) --{ -- return whd_add_interface(whd_driver, 1, 1, "wlan1", mac_addr, ifpp); --} -- --uint32_t whd_init(whd_driver_t *whd_driver_ptr, whd_init_config_t *whd_init_config, -- whd_resource_source_t *resource_ops, whd_buffer_funcs_t *buffer_ops, -- whd_netif_funcs_t *network_ops) --{ -- whd_driver_t whd_drv; -- -- if (!whd_driver_ptr || !buffer_ops || !network_ops || !resource_ops || !whd_init_config) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- if (whd_init_config->thread_stack_size < MINIMUM_WHD_STACK_SIZE) -- { -- WPRINT_WHD_INFO( ("Stack size is less than minimum stack size required.\n") ); -- return WHD_WLAN_BUFTOOSHORT; -- } -- -- if ( (whd_drv = (whd_driver_t)malloc(sizeof(struct whd_driver) ) ) != NULL ) -- { -- memset(whd_drv, 0, sizeof(struct whd_driver) ); -- *whd_driver_ptr = whd_drv; -- whd_drv->buffer_if = buffer_ops; -- whd_drv->network_if = network_ops; -- whd_drv->resource_if = resource_ops; -- whd_bus_common_info_init(whd_drv); -- whd_thread_info_init(whd_drv, whd_init_config); -- whd_cdc_bdc_info_init(whd_drv); -- whd_internal_info_init(whd_drv); -- whd_ap_info_init(whd_drv); -- //whd_wifi_sleep_info_init(whd_drv); -- whd_wifi_chip_info_init(whd_drv); -- -- whd_drv->bus_gspi_32bit = WHD_FALSE; -- -- if (whd_init_config->country == 0) -- whd_drv->country = WHD_COUNTRY_UNITED_STATES; -- else -- whd_drv->country = whd_init_config->country; -- } -- else -- { -- return WHD_MALLOC_FAILURE; -- } -- return WHD_SUCCESS; --} -- --uint32_t whd_deinit(whd_interface_t ifp) --{ -- uint8_t i; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- if (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP) -- { -- CHECK_RETURN(whd_wifi_set_ioctl_buffer(ifp, WLC_DOWN, NULL, 0) ); -- whd_driver->internal_info.whd_wlan_status.state = WLAN_DOWN; -- } -- for (i = 0; i < WHD_INTERFACE_MAX; i++) -- { -- if (whd_driver->iflist[i] != NULL) -- { -- free(whd_driver->iflist[i]); -- whd_driver->iflist[i] = NULL; -- } -- } -- -- whd_cdc_bdc_info_deinit(whd_driver); -- whd_bus_common_info_deinit(whd_driver); --#ifdef WLAN_BUS_TYPE_SDIO -- whd_bus_sdio_detach(whd_driver); --#endif --#ifdef WLAN_BUS_TYPE_SPI -- whd_bus_spi_detach(whd_driver); --#endif -- free(whd_driver); -- -- return WHD_SUCCESS; --} -- --/** -- * Initialize Wi-Fi platform -- * -- * - Initializes the required parts of the hardware platform -- * i.e. pins for SDIO/SPI, interrupt, reset, power etc. -- * -- * - Initializes the WHD thread which arbitrates access -- * to the SDIO/SPI bus -- * -- * @return WHD_SUCCESS if initialization is successful, error code otherwise -- */ -- --whd_result_t whd_management_wifi_platform_init(whd_driver_t whd_driver, whd_country_code_t country, -- whd_bool_t resume_after_deep_sleep) --{ -- whd_result_t retval; -- -- whd_driver->internal_info.whd_wlan_status.country_code = country; -- -- if (resume_after_deep_sleep == WHD_TRUE) -- { -- retval = ( whd_result_t )whd_bus_resume_after_deep_sleep(whd_driver); -- } -- else -- { -- whd_bus_init_stats(whd_driver); -- retval = ( whd_result_t )whd_bus_init(whd_driver); -- } -- -- if (retval != WHD_SUCCESS) -- { -- /* May have been due to user abort */ -- WPRINT_WHD_INFO( ("Could not initialize bus\n") ); -- return retval; -- } -- -- /* WLAN device is now powered up. Change state from OFF to DOWN */ -- whd_driver->internal_info.whd_wlan_status.state = WLAN_DOWN; -- -- -- retval = whd_thread_init(whd_driver); -- if (retval != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not initialize WHD thread\n") ); -- return retval; -- } -- -- return WHD_SUCCESS; --} -- --/** -- * Turn on the Wi-Fi device -- * -- * - Initialize Wi-Fi device -- * -- * - Program various WiFi parameters and modes -- * -- * @return WHD_SUCCESS if initialization is successful, error code otherwise -- */ --uint32_t whd_wifi_on(whd_driver_t whd_driver, whd_interface_t *ifpp) --{ -- wl_country_t *country_struct; -- uint32_t *ptr; -- whd_result_t retval; -- whd_buffer_t buffer; -- uint8_t *event_mask; -- uint32_t *data; -- uint32_t counter; -- whd_interface_t ifp; -- -- if (!whd_driver || !ifpp) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- if (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP) -- { -- return WHD_SUCCESS; -- } -- -- whd_init_stats(whd_driver); -- -- -- retval = whd_management_wifi_platform_init(whd_driver, whd_driver->country, WHD_FALSE); -- if (retval != WHD_SUCCESS) -- { -- WPRINT_WHD_INFO( ("Could not initialize wifi platform\n") ); -- return retval; -- } -- -- whd_add_primary_interface(whd_driver, ifpp); -- ifp = *ifpp; -- -- /* Download blob file if exists */ -- retval = whd_process_clm_data(ifp); -- if (retval != WHD_SUCCESS) -- { -- WPRINT_MACRO( ("****************************************************\n" -- "** ERROR: WLAN: could not download clm_blob file\n" -- "** FATAL ERROR: system unusable, CLM blob file not found or corrupted.\n" -- "****************************************************\n") ); -- return retval; -- } -- -- /* Turn off SDPCM TX Glomming */ -- /* Note: This is only required for later chips. -- * The 4319 has glomming off by default however the 43362 has it on by default. -- */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)4, IOVAR_STR_TX_GLOM); -- if (data == NULL) -- { -- whd_assert("Could not get buffer for IOVAR", 0 != 0); -- return WHD_BUFFER_ALLOC_FAIL; -- } -- *data = 0; -- retval = whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- if ( (retval != WHD_SUCCESS) && (retval != WHD_WLAN_UNSUPPORTED) ) -- { -- /* Note: System may time out here if bus interrupts are not working properly */ -- WPRINT_WHD_ERROR( ("Could not turn off TX glomming\n") ); -- return retval; -- } -- -- /* Turn APSTA on */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)sizeof(*data), IOVAR_STR_APSTA); -- if (data == NULL) -- { -- whd_assert("Could not get buffer for IOVAR", 0 != 0); -- return WHD_BUFFER_ALLOC_FAIL; -- } -- *data = htod32( (uint32_t)1 ); -- /* This will fail on manufacturing test build since it does not have APSTA available */ -- retval = whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- if (retval == WHD_WLAN_UNSUPPORTED) -- { -- WPRINT_WHD_DEBUG( ("Firmware does not support APSTA\n") ); -- } -- else if (retval != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not turn on APSTA\n") ); -- return retval; -- } -- -- /* Send set country command */ -- /* This is the first time that the WLAN chip is required to respond -- * in it's normal run mode. -- * If you are porting a new system and it stalls here, it could -- * be one of the following problems: -- * - Bus interrupt not triggering properly - the WLAN chip is unable to signal the host that there is data available. -- * - Timing problems - if the timeouts on semaphores are not working correctly, then the -- * system might think that the IOCTL has timed out much faster than it should do. -- * -- */ -- -- country_struct = (wl_country_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)sizeof(wl_country_t), -- IOVAR_STR_COUNTRY); -- if (country_struct == NULL) -- { -- whd_assert("Could not get buffer for IOCTL", 0 != 0); -- return WHD_BUFFER_ALLOC_FAIL; -- } -- memset(country_struct, 0, sizeof(wl_country_t) ); -- -- ptr = (uint32_t *)country_struct->ccode; -- *ptr = (uint32_t)whd_driver->internal_info.whd_wlan_status.country_code & 0x0000ffff; -- ptr = (uint32_t *)country_struct->country_abbrev; -- *ptr = (uint32_t)whd_driver->internal_info.whd_wlan_status.country_code & 0x0000ffff; -- country_struct->rev = (int32_t)( (whd_driver->internal_info.whd_wlan_status.country_code & 0xffff0000) >> 16 ); -- -- /* if regrev is 0 then set regrev to -1 so the FW will use any NVRAM/OTP configured aggregate -- * to choose the regrev. If there is no aggregate configured then the FW will try to use regrev 0. -- */ -- if (country_struct->rev == 0) -- { -- country_struct->rev = (int32_t)htod32(-1); -- } -- retval = whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- if (retval != WHD_SUCCESS) -- { -- /* Could not set wifi country */ -- WPRINT_WHD_ERROR( ("Could not set Country code\n") ); -- return retval; -- } -- -- /* NOTE: The set country command requires time to process on the WLAN firmware and -- * the following IOCTL may fail on initial attempts therefore we try a few times */ -- -- /* Set the event mask, indicating initially we do not want any asynchronous events */ -- for (counter = 0, retval = WHD_PENDING; retval != WHD_SUCCESS && counter < (uint32_t)MAX_POST_SET_COUNTRY_RETRY; -- ++counter) -- { -- event_mask = (uint8_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)WL_EVENTING_MASK_LEN, -- IOVAR_STR_EVENT_MSGS); -- if (event_mask == NULL) -- { -- whd_assert("Could not get buffer for IOVAR", 0 != 0); -- return WHD_BUFFER_ALLOC_FAIL; -- } -- memset(event_mask, 0, (size_t)WL_EVENTING_MASK_LEN); -- retval = whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- } -- if (retval != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not set Event mask\n") ); -- return retval; -- } -- -- /* Send UP command */ -- CHECK_RETURN(whd_wifi_set_up(ifp) ); -- -- whd_wifi_enable_powersave_with_throughput(ifp, DEFAULT_PM2_SLEEP_RET_TIME); -- /* Set the GMode */ -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- if (data == NULL) -- { -- whd_assert("Could not get buffer for IOCTL", 0 != 0); -- return WHD_BUFFER_ALLOC_FAIL; -- } -- *data = htod32( (uint32_t)GMODE_AUTO ); -- retval = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_GMODE, buffer, 0); -- if (retval != WHD_SUCCESS) -- { -- /* Note: System may time out here if bus interrupts are not working properly */ -- WPRINT_WHD_ERROR( ("Error setting gmode\n") ); -- return retval; -- } -- -- return WHD_SUCCESS; --} -- --/** -- * Turn off the Wi-Fi device -- * -- * - De-Initialises the required parts of the hardware platform -- * i.e. pins for SDIO/SPI, interrupt, reset, power etc. -- * -- * - De-Initialises the WHD thread which arbitrates access -- * to the SDIO/SPI bus -- * -- * @return WHD_SUCCESS if deinitialization is successful, error code otherwise -- */ --uint32_t whd_wifi_off(whd_interface_t ifp) --{ -- whd_result_t retval; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- if (whd_driver->internal_info.whd_wlan_status.state == WLAN_OFF) -- { -- return WHD_SUCCESS; -- } -- -- /* Disable SDIO/SPI interrupt */ -- whd_bus_irq_enable(whd_driver, WHD_FALSE); -- whd_thread_quit(whd_driver); -- -- retval = whd_bus_deinit(whd_driver); -- if (retval != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("Error de-initializing bus\n") ); -- return retval; -- } -- -- whd_driver->internal_info.whd_wlan_status.state = WLAN_OFF; -- return WHD_SUCCESS; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_network_if.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_network_if.c -deleted file mode 100644 -index 9877cd26a8..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_network_if.c -+++ /dev/null -@@ -1,85 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides generic APSTA functionality that chip specific files use -- */ -- --#include "whd_debug.h" --#include "whd_network_if.h" -- --/****************************************************** -- * * @cond Constants -- * ******************************************************/ -- --/****************************************************** -- * * Enumerations -- * ******************************************************/ -- --/****************************************************** --** Function Declarations --*******************************************************/ -- --/****************************************************** -- * Variables Definitions -- *****************************************************/ -- --/****************************************************** --* Function Definitions --******************************************************/ --/** Called by WHD to pass received data to the network stack -- * -- * -- * Packets received from the Wi-Fi network by WHD are forwarded to by calling function ptr which -- * must be implemented in the network interface. Ethernet headers -- * are present at the start of these packet buffers. -- * -- * This function is called asynchronously in the context of the -- * WHD thread whenever new data has arrived. -- * Packet buffers are allocated within WHD, and ownership is transferred -- * to the network stack. The network stack or application is thus -- * responsible for releasing the packet buffers. -- * Most packet buffering systems have a pointer to the 'current point' within -- * the packet buffer. When this function is called, the pointer points -- * to the start of the Ethernet header. There is other inconsequential data -- * before the Ethernet header. -- * -- * It is preferable that the (whd_network_process_ethernet_data)() function simply puts -- * the received packet on a queue for processing by another thread. This avoids the -- * WHD thread being unnecessarily tied up which would delay other packets -- * being transmitted or received. -- * -- * @param interface : The interface on which the packet was received. -- * @param buffer : Handle of the packet which has just been received. Responsibility for -- * releasing this buffer is transferred from WHD at this point. -- * -- */ --whd_result_t whd_network_process_ethernet_data(whd_interface_t ifp, whd_buffer_t buffer) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- if (whd_driver->network_if->whd_network_process_ethernet_data) -- { -- whd_driver->network_if->whd_network_process_ethernet_data(ifp, buffer); -- return WHD_SUCCESS; -- } -- else -- { -- WPRINT_WHD_INFO( ("Function pointers not provided .\n") ); -- } -- return WHD_WLAN_NOFUNCTION; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_resource_if.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_resource_if.c -deleted file mode 100644 -index b49f586d06..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_resource_if.c -+++ /dev/null -@@ -1,103 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides generic APSTA functionality that chip specific files use -- */ -- --#include "whd_debug.h" --#include "whd_int.h" --#include "whd_resource_if.h" -- --/****************************************************** -- * * @cond Constants -- * ******************************************************/ -- --/****************************************************** -- * * Enumerations -- * ******************************************************/ -- --/****************************************************** -- * * Function Declarations -- * ******************************************************/ -- --/****************************************************** -- * Variables Definitions -- *****************************************************/ -- --/****************************************************** --* Function Definitions --******************************************************/ --uint32_t whd_resource_size(whd_driver_t whd_driver, whd_resource_type_t resource, uint32_t *size_out) --{ -- if (whd_driver->resource_if->whd_resource_size) -- { -- return whd_driver->resource_if->whd_resource_size(whd_driver, resource, size_out); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- --uint32_t whd_get_resource_block_size(whd_driver_t whd_driver, whd_resource_type_t type, uint32_t *size_out) --{ -- -- if (whd_driver->resource_if->whd_get_resource_block_size) -- { -- return whd_driver->resource_if->whd_get_resource_block_size(whd_driver, type, size_out); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- --uint32_t whd_get_resource_no_of_blocks(whd_driver_t whd_driver, whd_resource_type_t type, uint32_t *block_count) --{ -- if (whd_driver->resource_if->whd_get_resource_no_of_blocks) -- { -- return whd_driver->resource_if->whd_get_resource_no_of_blocks(whd_driver, type, block_count); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- --uint32_t whd_get_resource_block(whd_driver_t whd_driver, whd_resource_type_t type, -- uint32_t blockno, const uint8_t **data, uint32_t *size_out) --{ -- -- if (whd_driver->resource_if->whd_get_resource_block) -- { -- return whd_driver->resource_if->whd_get_resource_block(whd_driver, type, blockno, data, size_out); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Function pointers not provided .\n") ); -- } -- -- return WHD_WLAN_NOFUNCTION; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_sdpcm.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_sdpcm.c -deleted file mode 100644 -index 5e392696a2..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_sdpcm.c -+++ /dev/null -@@ -1,618 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Provides an implementation of the Broadcom SDPCM protocol. -- * The Broadcom SDPCM protocol provides multiplexing of Wireless Data frames, -- * I/O Control functions (IOCTL), and Asynchronous Event signalling. -- * It is required when communicating with Broadcom 802.11 devices. -- * -- */ --#include "whd_sdpcm.h" --#include "bus_protocols/whd_bus_protocol_interface.h" --#include "whd_endian.h" --#include "whd_chip_constants.h" --#include "whd_chip.h" --#include "whd_thread_internal.h" --#include "whd_debug.h" --#include "whd_events_int.h" --#include "whd_wifi_api.h" --#include "whd_buffer_api.h" --#include "whd_network_if.h" --#include "whd_wlioctl.h" --#include "whd_types_int.h" --#include "whd_endian.h" -- --/****************************************************** --* @cond Constants --******************************************************/ -- --#define ETHER_TYPE_BRCM (0x886C) /** Broadcom Ethertype for identifying event packets - Copied from DHD include/proto/ethernet.h */ --#define BRCM_OUI "\x00\x10\x18" /** Broadcom OUI (Organizationally Unique Identifier): Used in the proprietary(221) IE (Information Element) in all Broadcom devices */ --#define BCM_MSG_IFNAME_MAX (16) /** Maximum length of an interface name in a wl_event_msg_t structure*/ -- --#define BDC_FLAG2_IF_MASK (0x0f) -- --#define SDPCM_HEADER_LEN (12) -- --/* Event flags */ --#define WLC_EVENT_MSG_LINK (0x01) /** link is up */ --#define WLC_EVENT_MSG_FLUSHTXQ (0x02) /** flush tx queue on MIC error */ --#define WLC_EVENT_MSG_GROUP (0x04) /** group MIC error */ --#define WLC_EVENT_MSG_UNKBSS (0x08) /** unknown source bsscfg */ --#define WLC_EVENT_MSG_UNKIF (0x10) /** unknown source OS i/f */ -- --/****************************************************** --* Macros --******************************************************/ -- --/****************************************************** --* Local Structures --******************************************************/ -- --#pragma pack(1) -- --/*TODO: Keep this typedef? (in preference to the defines above */ --#if 0 --typedef struct --{ -- uint16_t control_id; -- uint8_t interface_index : 4; -- uint16_t reserved : 10; -- uint8_t set : 1; -- uint8_t error : 1; --}sdpcm_cdc_flags_t; --#endif /* if 0 */ --typedef struct --{ -- uint8_t sequence; -- uint8_t channel_and_flags; -- uint8_t next_length; -- uint8_t header_length; -- uint8_t wireless_flow_control; -- uint8_t bus_data_credit; -- uint8_t _reserved[2]; --} sdpcm_sw_header_t; -- --/* -- * SDPCM header definitions -- */ --typedef struct --{ -- uint16_t frametag[2]; -- sdpcm_sw_header_t sw_header; --} sdpcm_header_t; -- --typedef struct bcmeth_hdr --{ -- uint16_t subtype; /** Vendor specific..32769 */ -- uint16_t length; -- uint8_t version; /** Version is 0 */ -- uint8_t oui[3]; /** Broadcom OUI */ -- uint16_t usr_subtype; /** user specific Data */ --} sdpcm_bcmeth_header_t; -- --/* these fields are stored in network order */ --typedef struct --{ -- -- uint16_t version; /** Version 1 has fields up to ifname. -- * Version 2 has all fields including ifidx and bss_cfg_idx */ -- uint16_t flags; /** see flags */ -- uint32_t event_type; /** Message */ -- uint32_t status; /** Status code */ -- uint32_t reason; /** Reason code (if applicable) */ -- uint32_t auth_type; /** WLC_E_AUTH */ -- uint32_t datalen; /** data buf */ -- whd_mac_t addr; /** Station address (if applicable) */ -- char ifname[BCM_MSG_IFNAME_MAX]; /** name of the packet incoming interface */ -- uint8_t ifidx; /** destination OS i/f index */ -- uint8_t bss_cfg_idx; /** source bsscfg index */ --} sdpcm_raw_event_header_t; -- --/* used by driver msgs */ --typedef struct bcm_event --{ -- ethernet_header_t ether; -- sdpcm_bcmeth_header_t bcmeth; -- union -- { -- whd_event_header_t whd; -- sdpcm_raw_event_header_t raw; -- } event; --} sdpcm_bcm_event_t; -- --#pragma pack() -- --/****************************************************** --* Static Variables --******************************************************/ -- --/****************************************************** --* SDPCM Logging --* --* Enable this section to allow logging of SDPCM packets --* into a buffer for later perusal --* --* See sdpcm_log and next_sdpcm_log_pos --* --******************************************************/ --/** @cond */ -- --#if 0 -- --#define SDPCM_LOG_SIZE 30 --#define SDPCM_LOG_HEADER_SIZE (0x60) -- --typedef enum { UNUSED, LOG_TX, LOG_RX } sdpcm_log_direction_t; --typedef enum { IOCTL, DATA, EVENT } sdpcm_log_type_t; -- --typedef struct SDPCM_log_entry_struct --{ -- sdpcm_log_direction_t direction; -- sdpcm_log_type_t type; -- unsigned long time; -- unsigned long length; -- unsigned char header[SDPCM_LOG_HEADER_SIZE]; --}sdpcm_log_entry_t; -- --static int next_sdpcm_log_pos = 0; --static sdpcm_log_entry_t sdpcm_log[SDPCM_LOG_SIZE]; -- --static void add_sdpcm_log_entry(sdpcm_log_direction_t dir, sdpcm_log_type_t type, unsigned long length, char *eth_data) --{ -- -- sdpcm_log[next_sdpcm_log_pos].direction = dir; -- sdpcm_log[next_sdpcm_log_pos].type = type; -- cy_rtos_get_time(&sdpcm_log[next_sdpcm_log_pos].time); -- sdpcm_log[next_sdpcm_log_pos].length = length; -- memcpy(sdpcm_log[next_sdpcm_log_pos].header, eth_data, SDPCM_LOG_HEADER_SIZE); -- next_sdpcm_log_pos++; -- if (next_sdpcm_log_pos >= SDPCM_LOG_SIZE) -- { -- next_sdpcm_log_pos = 0; -- } --} -- --#else --#define add_sdpcm_log_entry(dir, type, length, eth_data) --#endif -- --/** @endcond */ -- --/****************************************************** --* Static Function Prototypes --******************************************************/ --static whd_buffer_t whd_sdpcm_get_next_buffer_in_queue(whd_driver_t whd_driver, whd_buffer_t buffer); --static void whd_sdpcm_set_next_buffer_in_queue(whd_driver_t whd_driver, whd_buffer_t buffer, -- whd_buffer_t prev_buffer); --extern void whd_wifi_log_event(whd_driver_t whd_driver, const whd_event_header_t *event_header, -- const uint8_t *event_data); --/****************************************************** --* Function definitions --******************************************************/ -- --/** Initialises the SDPCM protocol handler -- * -- * Initialises mutex and semaphore flags needed by the SDPCM handler. -- * Also initialises the list of event handlers. This function is called -- * from the @ref whd_thread_init function. -- * -- * @return WHD result code -- */ -- --whd_result_t whd_sdpcm_init(whd_driver_t whd_driver) --{ -- whd_sdpcm_info_t *sdpcm_info = &whd_driver->sdpcm_info; -- -- /* Create the sdpcm packet queue semaphore */ -- if (cy_rtos_init_semaphore(&sdpcm_info->send_queue_mutex, 1, 0) != WHD_SUCCESS) -- { -- return WHD_SEMAPHORE_ERROR; -- } -- if (cy_rtos_set_semaphore(&sdpcm_info->send_queue_mutex, WHD_FALSE) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- return WHD_SEMAPHORE_ERROR; -- } -- -- /* Packet send queue variables */ -- sdpcm_info->send_queue_head = (whd_buffer_t)NULL; -- sdpcm_info->send_queue_tail = (whd_buffer_t)NULL; -- -- whd_sdpcm_bus_vars_init(whd_driver); -- -- return WHD_SUCCESS; --} -- --/* Re-initialize the bus variables after deep sleep */ --void whd_sdpcm_bus_vars_init(whd_driver_t whd_driver) --{ -- whd_sdpcm_info_t *sdpcm_info = &whd_driver->sdpcm_info; -- -- /* Bus data credit variables */ -- sdpcm_info->credit_diff = 0; -- sdpcm_info->largest_credit_diff = 0; -- -- sdpcm_info->packet_transmit_sequence_number = 0; -- sdpcm_info->last_bus_data_credit = (uint8_t)1; --} -- --/** Initialises the SDPCM protocol handler -- * -- * De-initialises mutex and semaphore flags needed by the SDPCM handler. -- * This function is called from the @ref whd_thread_func function when it is exiting. -- */ --void whd_sdpcm_quit(whd_driver_t whd_driver) --{ -- whd_sdpcm_info_t *sdpcm_info = &whd_driver->sdpcm_info; -- whd_result_t result; -- -- /* Delete the SDPCM queue mutex */ -- (void)cy_rtos_deinit_semaphore(&sdpcm_info->send_queue_mutex); /* Ignore return - not much can be done about failure */ -- -- /* Free any left over packets in the queue */ -- while (sdpcm_info->send_queue_head != NULL) -- { -- whd_buffer_t buf = whd_sdpcm_get_next_buffer_in_queue(whd_driver, sdpcm_info->send_queue_head); -- result = whd_buffer_release(whd_driver, sdpcm_info->send_queue_head, WHD_NETWORK_TX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- sdpcm_info->send_queue_head = buf; -- } --} -- --void whd_sdpcm_update_credit(whd_driver_t whd_driver, uint8_t *data) --{ -- sdpcm_sw_header_t *header = (sdpcm_sw_header_t *)(data + 4); -- whd_sdpcm_info_t *sdpcm_info = &whd_driver->sdpcm_info; -- -- if ( (header->channel_and_flags & 0x0f) < (uint8_t)3 ) -- { -- sdpcm_info->credit_diff = (uint8_t)(header->bus_data_credit - sdpcm_info->last_bus_data_credit); -- WPRINT_WHD_DATA_LOG( ("credit update =%d\n ", header->bus_data_credit) ); -- if (sdpcm_info->credit_diff <= GET_C_VAR(whd_driver, BUS_CREDIT_DIFF) ) -- { -- sdpcm_info->last_bus_data_credit = header->bus_data_credit; -- } -- else -- { -- if (sdpcm_info->credit_diff > sdpcm_info->largest_credit_diff) -- { -- sdpcm_info->largest_credit_diff = sdpcm_info->credit_diff; -- } -- } -- } -- -- whd_bus_set_flow_control(whd_driver, header->wireless_flow_control); --} -- --/** Processes and directs incoming SDPCM packets -- * -- * This function receives SDPCM packets from the Broadcom 802.11 device and decodes the SDPCM header -- * to determine where the packet should be directed. -- * -- * Control packets (IOCTL/IOVAR) / Data Packets/ Event Packets are passed to CDC/BDC layer -- * and the appropriate event handler is called. -- * -- * @param buffer : The SDPCM packet buffer received from the Broadcom 802.11 device -- * -- */ --void whd_sdpcm_process_rx_packet(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- bus_common_header_t *packet; -- uint16_t size; -- uint16_t size_inv; -- sdpcm_header_t sdpcm_header; -- whd_result_t result; -- -- packet = (bus_common_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- -- memcpy(&sdpcm_header, packet->bus_header, BUS_HEADER_LEN); -- -- sdpcm_header.frametag[0] = dtoh16(sdpcm_header.frametag[0]); -- sdpcm_header.frametag[1] = dtoh16(sdpcm_header.frametag[1]); -- -- /* Extract the total SDPCM packet size from the first two frametag bytes */ -- size = sdpcm_header.frametag[0]; -- -- /* Check that the second two frametag bytes are the binary inverse of the size */ -- size_inv = (uint16_t) ~size; /* Separate variable due to GCC Bug 38341 */ -- if (sdpcm_header.frametag[1] != size_inv) -- { -- WPRINT_WHD_DEBUG( ("Received a packet with a frametag which is wrong\n") ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- /* Check whether the packet is big enough to contain the SDPCM header (or) it's too big to handle */ -- if ( (size < (uint16_t)SDPCM_HEADER_LEN) || (size > whd_buffer_get_current_piece_size(whd_driver, buffer) ) ) -- { -- whd_minor_assert("Packet size invalid", 0 == 1); -- WPRINT_WHD_DEBUG( ( -- "Received a packet that is too small to contain anything useful (or) too big. Packet Size = [%d]\n", -- size) ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- /* Get address of packet->sdpcm_header.frametag indirectly to avoid IAR's unaligned address warning */ -- whd_sdpcm_update_credit(whd_driver, -- (uint8_t *)&sdpcm_header.sw_header - sizeof(sdpcm_header.frametag) ); -- -- if (size == (uint16_t)SDPCM_HEADER_LEN) -- { -- /* This is a flow control update packet with no data - release it. */ -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- -- return; -- } -- -- /* Check the SDPCM channel to decide what to do with packet. */ -- switch (sdpcm_header.sw_header.channel_and_flags & 0x0f) -- { -- case CONTROL_HEADER: /* IOCTL/IOVAR reply packet */ -- { -- add_sdpcm_log_entry(LOG_RX, IOCTL, whd_buffer_get_current_piece_size(whd_driver, buffer), -- (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer) ); -- -- /* Check that packet size is big enough to contain the CDC header as well as the SDPCM header */ -- if (sdpcm_header.frametag[0] < -- (sizeof(sdpcm_header.frametag) + sizeof(sdpcm_sw_header_t) + sizeof(cdc_header_t) ) ) -- { -- /* Received a too-short SDPCM packet! */ -- WPRINT_WHD_DEBUG( ("Received a too-short SDPCM packet!\n") ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- -- break; -- } -- -- /* Move SDPCM header and Buffer header to pass onto next layer */ -- whd_buffer_add_remove_at_front(whd_driver, &buffer, -- (int32_t)(sizeof(whd_buffer_header_t) + -- sdpcm_header.sw_header.header_length) ); -- -- whd_process_cdc(whd_driver, buffer); -- } -- -- break; -- -- case DATA_HEADER: -- { -- /* Check that the packet is big enough to contain SDPCM & BDC headers */ -- if (sdpcm_header.frametag[0] <= -- (sizeof(sdpcm_header.frametag) + sizeof(sdpcm_sw_header_t) + sizeof(bdc_header_t) ) ) -- { -- WPRINT_WHD_ERROR( ("Packet too small to contain SDPCM + BDC headers\n") ); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- -- break; -- } -- -- /* Move SDPCM header and Buffer header to pass onto next layer */ -- whd_buffer_add_remove_at_front(whd_driver, &buffer, -- (int32_t)(sizeof(whd_buffer_header_t) + -- sdpcm_header.sw_header.header_length) ); -- -- whd_process_bdc(whd_driver, buffer); -- -- } -- break; -- -- case ASYNCEVENT_HEADER: -- { -- -- /* Move SDPCM header and Buffer header to pass onto next layer */ -- whd_buffer_add_remove_at_front(whd_driver, &buffer, -- (int32_t)(sizeof(whd_buffer_header_t) + -- sdpcm_header.sw_header.header_length) ); -- -- whd_process_bdc_event(whd_driver, buffer, size); -- } -- break; -- -- default: -- whd_minor_assert("SDPCM packet of unknown channel received - dropping packet", 0 != 0); -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_RX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ); -- break; -- } --} -- --whd_bool_t whd_sdpcm_has_tx_packet(whd_driver_t whd_driver) --{ -- if (whd_driver->sdpcm_info.send_queue_head != NULL) -- { -- return WHD_TRUE; -- } -- -- return WHD_FALSE; --} -- --whd_result_t whd_sdpcm_get_packet_to_send(whd_driver_t whd_driver, whd_buffer_t *buffer) --{ -- bus_common_header_t *packet; -- sdpcm_header_t sdpcm_header; -- whd_sdpcm_info_t *sdpcm_info = &whd_driver->sdpcm_info; -- whd_result_t result; -- -- if (sdpcm_info->send_queue_head != NULL) -- { -- /* Check if we're being flow controlled */ -- if (whd_bus_is_flow_controlled(whd_driver) == WHD_TRUE) -- { -- WHD_STATS_INCREMENT_VARIABLE(whd_driver, flow_control); -- return WHD_FLOW_CONTROLLED; -- } -- -- /* Check if we have enough bus data credits spare */ -- if (sdpcm_info->packet_transmit_sequence_number == sdpcm_info->last_bus_data_credit) -- { -- WHD_STATS_INCREMENT_VARIABLE(whd_driver, no_credit); -- return WHD_NO_CREDITS; -- } -- -- /* There is a packet waiting to be sent - send it then fix up queue and release packet */ -- if (cy_rtos_get_semaphore(&sdpcm_info->send_queue_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE) != WHD_SUCCESS) -- { -- /* Could not obtain mutex, push back the flow control semaphore */ -- WPRINT_WHD_ERROR( ("Error manipulating a semaphore, %s failed at %d \n", __func__, __LINE__) ); -- return WHD_SEMAPHORE_ERROR; -- } -- -- /* Pop the head off and set the new send_queue head */ -- *buffer = sdpcm_info->send_queue_head; -- sdpcm_info->send_queue_head = whd_sdpcm_get_next_buffer_in_queue(whd_driver, *buffer); -- if (sdpcm_info->send_queue_head == NULL) -- { -- sdpcm_info->send_queue_tail = NULL; -- } -- result = cy_rtos_set_semaphore(&sdpcm_info->send_queue_mutex, WHD_FALSE); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- -- -- /* Set the sequence number */ -- packet = (bus_common_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, *buffer); -- memcpy(&sdpcm_header, packet->bus_header, BUS_HEADER_LEN); -- sdpcm_header.sw_header.sequence = sdpcm_info->packet_transmit_sequence_number; -- memcpy(packet->bus_header, &sdpcm_header, BUS_HEADER_LEN); -- sdpcm_info->packet_transmit_sequence_number++; -- -- return WHD_SUCCESS; -- } -- else -- { -- return WHD_NO_PACKET_TO_SEND; -- } --} -- --/** Returns the number of bus credits available -- * -- * @return The number of bus credits available -- */ --uint8_t whd_sdpcm_get_available_credits(whd_driver_t whd_driver) --{ -- return (uint8_t)(whd_driver->sdpcm_info.last_bus_data_credit - -- whd_driver->sdpcm_info.packet_transmit_sequence_number); --} -- --/** Writes SDPCM headers and sends packet to WHD Thread -- * -- * Prepends the given packet with a new SDPCM header, -- * then passes the packet to the WHD thread via a queue -- * -- * This function is called by @ref whd_network_send_ethernet_data and @ref whd_cdc_send_ioctl -- * -- * @param buffer : The handle of the packet buffer to send -- * @param header_type : DATA_HEADER, ASYNCEVENT_HEADER or CONTROL_HEADER - indicating what type of SDPCM packet this is. -- */ -- --void whd_send_to_bus(whd_driver_t whd_driver, whd_buffer_t buffer, -- sdpcm_header_type_t header_type) --{ -- uint16_t size; -- bus_common_header_t *packet = -- (bus_common_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- sdpcm_header_t sdpcm_header; -- whd_sdpcm_info_t *sdpcm_info = &whd_driver->sdpcm_info; -- whd_result_t result; -- -- size = whd_buffer_get_current_piece_size(whd_driver, buffer); -- -- size = (uint16_t)(size - (uint16_t)sizeof(whd_buffer_header_t) ); -- -- /* Prepare the SDPCM header */ -- memset( (uint8_t *)&sdpcm_header, 0, sizeof(sdpcm_header_t) ); -- sdpcm_header.sw_header.channel_and_flags = (uint8_t)header_type; -- sdpcm_header.sw_header.header_length = -- (header_type == DATA_HEADER) ? sizeof(sdpcm_header_t) + 2 : sizeof(sdpcm_header_t); -- sdpcm_header.sw_header.sequence = 0; /* Note: The real sequence will be written later */ -- sdpcm_header.frametag[0] = size; -- sdpcm_header.frametag[1] = (uint16_t) ~size; -- -- memcpy(packet->bus_header, &sdpcm_header, BUS_HEADER_LEN); -- -- add_sdpcm_log_entry(LOG_TX, (header_type == DATA_HEADER) ? DATA : (header_type == CONTROL_HEADER) ? IOCTL : EVENT, -- whd_buffer_get_current_piece_size(whd_driver, buffer), -- (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer) ); -- -- /* Add the length of the SDPCM header and pass "down" */ -- if (cy_rtos_get_semaphore(&sdpcm_info->send_queue_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE) != WHD_SUCCESS) -- { -- /* Could not obtain mutex */ -- /* Fatal error */ -- result = whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("buffer release failed in %s at %d \n", __func__, __LINE__) ) -- return; -- } -- -- whd_sdpcm_set_next_buffer_in_queue(whd_driver, NULL, buffer); -- if (sdpcm_info->send_queue_tail != NULL) -- { -- whd_sdpcm_set_next_buffer_in_queue(whd_driver, buffer, sdpcm_info->send_queue_tail); -- } -- sdpcm_info->send_queue_tail = buffer; -- if (sdpcm_info->send_queue_head == NULL) -- { -- sdpcm_info->send_queue_head = buffer; -- } -- result = cy_rtos_set_semaphore(&sdpcm_info->send_queue_mutex, WHD_FALSE); -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- -- whd_thread_notify(whd_driver); --} -- --/****************************************************** --* Static Functions --******************************************************/ -- --static whd_buffer_t whd_sdpcm_get_next_buffer_in_queue(whd_driver_t whd_driver, whd_buffer_t buffer) --{ -- whd_buffer_header_t *packet = (whd_buffer_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, buffer); -- return packet->queue_next; --} -- --/** Sets the next buffer in the send queue -- * -- * The send queue is a linked list of packet buffers where the 'next' pointer -- * is stored in the first 4 bytes of the buffer content. -- * This function sets that pointer. -- * -- * @param buffer : handle of packet in the send queue -- * prev_buffer : handle of new packet whose 'next' pointer will point to 'buffer' -- */ --static void whd_sdpcm_set_next_buffer_in_queue(whd_driver_t whd_driver, whd_buffer_t buffer, whd_buffer_t prev_buffer) --{ -- whd_buffer_header_t *packet = -- (whd_buffer_header_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, prev_buffer); -- packet->queue_next = buffer; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_thread.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_thread.c -deleted file mode 100644 -index 1ce8cbefe7..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_thread.c -+++ /dev/null -@@ -1,346 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Allows thread safe access to the WHD WiFi Driver (WHD) hardware bus -- * -- * This file provides functions which allow multiple threads to use the WHD hardware bus (SDIO or SPI) -- * This is achieved by having a single thread (the "WHD Thread") which queues messages to be sent, sending -- * them sequentially, as well as receiving messages as they arrive. -- * -- * Messages to be sent come from the @ref whd_sdpcm_send_common function in whd_sdpcm.c . The messages already -- * contain SDPCM headers, but not any bus headers (GSPI), and are passed to the whd_thread_send_data function. -- * This function can be called from any thread. -- * -- * Messages are received by way of a callback supplied by in SDPCM.c - whd_sdpcm_process_rx_packet -- * Received messages are delivered in the context of the WHD Thread, so the callback function needs to avoid blocking. -- * -- * It is also possible to use these functions without any operating system, by periodically calling the whd_thread_send_one_packet, -- * @ref whd_thread_receive_one_packet or @ref whd_thread_poll_all functions -- * -- */ --#include "stdlib.h" --#include "whd_debug.h" --#include "whd_thread.h" --#include "bus_protocols/whd_bus_protocol_interface.h" --#include "cyabs_rtos.h" --#include "whd_int.h" --#include "whd_chip.h" --#include "whd_poll.h" --#include "whd_sdpcm.h" --#include "whd_buffer_api.h" -- --/****************************************************** --* Static Function Prototypes --******************************************************/ --static void whd_thread_func(whd_thread_arg_t thread_input); -- --/****************************************************** --* Global Functions --******************************************************/ --void whd_thread_info_init(whd_driver_t whd_driver, whd_init_config_t *whd_init_config) --{ -- memset(&whd_driver->thread_info, 0, sizeof(whd_driver->thread_info) ); -- whd_driver->thread_info.thread_stack_start = whd_init_config->thread_stack_start; -- whd_driver->thread_info.thread_stack_size = whd_init_config->thread_stack_size; -- whd_driver->thread_info.thread_priority = (cy_thread_priority_t)whd_init_config->thread_priority; --} -- --/** Initialises the WHD Thread -- * -- * Initialises the WHD thread, and its flags/semaphores, -- * then starts it running -- * -- * @return WHD_SUCCESS : if initialisation succeeds -- * otherwise, a result code -- */ --whd_result_t whd_thread_init(whd_driver_t whd_driver) --{ -- whd_result_t retval; -- -- retval = whd_sdpcm_init(whd_driver); -- -- if (retval != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not initialize SDPCM codec\n") ); -- /* Lint: Reachable after hitting assert & globals not defined due to error */ -- return retval; -- } -- -- /* Create the event flag which signals the WHD thread needs to wake up */ -- retval = cy_rtos_init_semaphore(&whd_driver->thread_info.transceive_semaphore, 1, 0); -- if (retval != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Could not initialize WHD thread semaphore\n") ); -- /* Lint: Reachable after hitting assert & globals not defined due to error */ -- return retval; -- } -- -- retval = cy_rtos_create_thread(&whd_driver->thread_info.whd_thread, (cy_thread_entry_fn_t)whd_thread_func, -- "WHD", whd_driver->thread_info.thread_stack_start, -- whd_driver->thread_info.thread_stack_size, -- whd_driver->thread_info.thread_priority, (cy_thread_arg_t)whd_driver); -- if (retval != WHD_SUCCESS) -- { -- /* Could not start WHD main thread */ -- WPRINT_WHD_ERROR( ("Could not start WHD thread\n") ); -- return retval; -- } -- -- /* Ready now. Indicate it here and in thread, whatever be executed first. */ -- whd_driver->thread_info.whd_inited = WHD_TRUE; -- -- return WHD_SUCCESS; --} -- --/** Sends the first queued packet -- * -- * Checks the queue to determine if there is any packets waiting -- * to be sent. If there are, then it sends the first one. -- * -- * This function is normally used by the WHD Thread, but can be -- * called periodically by systems which have no RTOS to ensure -- * packets get sent. -- * -- * @return 1 : packet was sent -- * 0 : no packet sent -- */ --int8_t whd_thread_send_one_packet(whd_driver_t whd_driver) --{ -- whd_buffer_t tmp_buf_hnd = NULL; -- whd_result_t result; -- -- if (whd_sdpcm_get_packet_to_send(whd_driver, &tmp_buf_hnd) != WHD_SUCCESS) -- { -- /* Failed to get a packet */ -- return 0; -- } -- -- /* Ensure the wlan backplane bus is up */ -- result = whd_ensure_wlan_bus_is_up(whd_driver); -- if (result != WHD_SUCCESS) -- { -- whd_assert("Could not bring bus back up", 0 != 0); -- CHECK_RETURN(whd_buffer_release(whd_driver, tmp_buf_hnd, WHD_NETWORK_TX) ); -- return 0; -- } -- -- WPRINT_WHD_DATA_LOG( ("Wcd:> Sending pkt 0x%08lX\n", (unsigned long)tmp_buf_hnd) ); -- if (whd_bus_send_buffer(whd_driver, tmp_buf_hnd) != WHD_SUCCESS) -- { -- WHD_STATS_INCREMENT_VARIABLE(whd_driver, tx_fail); -- return 0; -- } -- -- WHD_STATS_INCREMENT_VARIABLE(whd_driver, tx_total); -- return (int8_t)1; --} -- --/** Receives a packet if one is waiting -- * -- * Checks the wifi chip fifo to determine if there is any packets waiting -- * to be received. If there are, then it receives the first one, and calls -- * the callback @ref whd_sdpcm_process_rx_packet (in whd_sdpcm.c). -- * -- * This function is normally used by the WHD Thread, but can be -- * called periodically by systems which have no RTOS to ensure -- * packets get received properly. -- * -- * @return 1 : packet was received -- * 0 : no packet waiting -- */ --int8_t whd_thread_receive_one_packet(whd_driver_t whd_driver) --{ -- /* Check if there is a packet ready to be received */ -- whd_buffer_t recv_buffer; -- if (whd_bus_read_frame(whd_driver, &recv_buffer) != WHD_SUCCESS) -- { -- /* Failed to read a packet */ -- return 0; -- } -- -- if (recv_buffer != NULL) /* Could be null if it was only a credit update */ -- { -- -- WPRINT_WHD_DATA_LOG( ("Wcd:< Rcvd pkt 0x%08lX\n", (unsigned long)recv_buffer) ); -- WHD_STATS_INCREMENT_VARIABLE(whd_driver, rx_total); -- -- /* Send received buffer up to SDPCM layer */ -- whd_sdpcm_process_rx_packet(whd_driver, recv_buffer); -- } -- return (int8_t)1; --} -- --/** Sends and Receives all waiting packets -- * -- * Calls whd_thread_send_one_packet and whd_thread_receive_one_packet -- * once to send and receive packets, until there are no more packets waiting to -- * be transferred. -- * -- * This function is normally used by the WHD Thread, but can be -- * called periodically by systems which have no RTOS to ensure -- * packets get send and received properly. -- * -- * Note: do not loop in here, to avoid overwriting previously rx-ed packets -- */ --int8_t whd_thread_poll_all(whd_driver_t whd_driver) --{ -- int8_t result = 0; -- result |= whd_thread_send_one_packet(whd_driver); -- result |= whd_thread_receive_one_packet(whd_driver); -- return result; --} -- --/** Terminates the WHD Thread -- * -- * Sets a flag then wakes the WHD Thread to force it to terminate. -- * -- */ --void whd_thread_quit(whd_driver_t whd_driver) --{ -- whd_thread_info_t *thread_info = &whd_driver->thread_info; -- whd_result_t result; -- -- /* signal main thread and wake it */ -- thread_info->thread_quit_flag = WHD_TRUE; -- result = cy_rtos_set_semaphore(&thread_info->transceive_semaphore, WHD_FALSE); -- if (result == WHD_SUCCESS) -- { -- /* Wait for the WHD thread to end */ -- cy_rtos_join_thread(&thread_info->whd_thread); -- } -- else -- { -- WPRINT_WHD_ERROR( ("Error setting semaphore in %s at %d \n", __func__, __LINE__) ); -- } -- -- /* Delete the semaphore */ -- /* Ignore return - not much can be done about failure */ -- (void)cy_rtos_deinit_semaphore(&thread_info->transceive_semaphore); --} -- --/** -- * Informs WHD of an interrupt -- * -- * This function should be called from the SDIO/SPI interrupt function -- * and usually indicates newly received data is available. -- * It wakes the WHD Thread, forcing it to check the send/receive -- * -- */ --/* ignore failure since there is nothing that can be done about it in a ISR */ --void whd_thread_notify_irq(whd_driver_t whd_driver) --{ -- whd_driver->thread_info.bus_interrupt = WHD_TRUE; -- -- /* just wake up the main thread and let it deal with the data */ -- if (whd_driver->thread_info.whd_inited == WHD_TRUE) -- { -- (void)cy_rtos_set_semaphore(&whd_driver->thread_info.transceive_semaphore, WHD_TRUE); -- } --} -- --void whd_thread_notify(whd_driver_t whd_driver) --{ -- /* just wake up the main thread and let it deal with the data */ -- if (whd_driver->thread_info.whd_inited == WHD_TRUE) -- { -- /* Ignore return - not much can be done about failure */ -- (void)cy_rtos_set_semaphore(&whd_driver->thread_info.transceive_semaphore, WHD_FALSE); -- } --} -- --/****************************************************** --* Static Functions --******************************************************/ -- --/** The WHD Thread function -- * -- * This is the main loop of the WHD Thread. -- * It simply calls @ref whd_thread_poll_all to send/receive all waiting packets, then goes -- * to sleep. The sleep has a 100ms timeout, causing the send/receive queues to be -- * checked 10 times per second in case an interrupt is missed. -- * Once the quit flag has been set, flags/mutexes are cleaned up, and the function exits. -- * -- * @param thread_input : unused parameter needed to match thread prototype. -- * -- */ --static void whd_thread_func(whd_thread_arg_t thread_input) --{ -- int8_t rx_status; -- int8_t tx_status; -- uint8_t rx_cnt; -- -- whd_driver_t whd_driver = ( whd_driver_t )thread_input; -- whd_thread_info_t *thread_info = &whd_driver->thread_info; -- -- WPRINT_WHD_DATA_LOG( ("Started whd Thread\n") ); -- -- /* Interrupts may be enabled inside thread. To make sure none lost set flag now. */ -- thread_info->whd_inited = WHD_TRUE; -- -- while (thread_info->thread_quit_flag != WHD_TRUE) -- { -- rx_cnt = 0; -- /* Check if we were woken by interrupt */ -- if ( (thread_info->bus_interrupt == WHD_TRUE) || -- (whd_bus_use_status_report_scheme(whd_driver) ) ) -- { -- thread_info->bus_interrupt = WHD_FALSE; -- -- /* Check if the interrupt indicated there is a packet to read */ -- if (whd_bus_packet_available_to_read(whd_driver) != 0) -- { -- /* Receive all available packets */ -- do -- { -- rx_status = whd_thread_receive_one_packet(whd_driver); -- rx_cnt++; -- } while (rx_status != 0 && rx_cnt < WHD_THREAD_RX_BOUND); -- } -- } -- -- /* Send all queued packets */ -- do -- { -- tx_status = whd_thread_send_one_packet(whd_driver); -- } while (tx_status != 0); -- -- if (rx_cnt >= WHD_THREAD_RX_BOUND) -- { -- thread_info->bus_interrupt = WHD_TRUE; -- continue; -- } -- -- /* Sleep till WLAN do something */ -- whd_bus_wait_for_wlan_event(whd_driver, &thread_info->transceive_semaphore); -- WPRINT_WHD_DATA_LOG( ("whd Thread: Woke\n") ); -- } -- -- /* Set flag before releasing objects */ -- thread_info->whd_inited = WHD_FALSE; -- -- /* Reset the quit flag */ -- thread_info->thread_quit_flag = WHD_FALSE; -- -- whd_sdpcm_quit(whd_driver); -- -- WPRINT_WHD_DATA_LOG( ("Stopped whd Thread\n") ); -- -- /* Ignore return - not much can be done about failure */ -- (void)cy_rtos_exit_thread(); --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_utils.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_utils.c -deleted file mode 100644 -index 1d0c136569..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_utils.c -+++ /dev/null -@@ -1,877 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** -- * @file WHD utilities -- * -- * Utilities to help do specialized (not general purpose) WHD specific things -- */ --#include "whd_debug.h" --#include "whd_utils.h" --#include "whd_chip_constants.h" --#include "whd_endian.h" --#include "whd_int.h" -- --#define UNSIGNED_CHAR_TO_CHAR(uch) ( (uch)& 0x7f ) -- --#define RSPEC_KBPS_MASK (0x7f) --#define RSPEC_500KBPS(rate) ( (rate)& RSPEC_KBPS_MASK ) --#define RSPEC_TO_KBPS(rate) (RSPEC_500KBPS( (rate) ) * (unsigned int)500) -- --#define OTP_WORD_SIZE 16 /* Word size in bits */ --#define WPA_OUI_TYPE1 "\x00\x50\xF2\x01" /** WPA OUI */ -- --/****************************************************** --* Static Variables --******************************************************/ --whd_tlv8_data_t *whd_tlv_find_tlv8(const uint8_t *message, uint32_t message_length, uint8_t type); -- --whd_tlv8_data_t *whd_tlv_find_tlv8(const uint8_t *message, uint32_t message_length, uint8_t type) --{ -- while (message_length != 0) -- { -- uint8_t current_tlv_type = message[0]; -- uint16_t current_tlv_length = (uint16_t)(message[1] + 2); -- -- /* Check if we've overrun the buffer */ -- if (current_tlv_length > message_length) -- { -- return NULL; -- } -- -- /* Check if we've found the type we are looking for */ -- if (current_tlv_type == type) -- { -- return (whd_tlv8_data_t *)message; -- } -- -- /* Skip current TLV */ -- message += current_tlv_length; -- message_length -= current_tlv_length; -- } -- return 0; --} -- --inline whd_tlv8_header_t *whd_parse_tlvs(const whd_tlv8_header_t *tlv_buf, uint32_t buflen, -- dot11_ie_id_t key) --{ -- return (whd_tlv8_header_t *)whd_tlv_find_tlv8( (const uint8_t *)tlv_buf, buflen, key ); --} -- --whd_bool_t whd_is_wpa_ie(vendor_specific_ie_header_t *wpaie, whd_tlv8_header_t **tlvs, uint32_t *tlvs_len) --{ -- whd_tlv8_header_t *prev_tlvs = *tlvs; -- whd_tlv8_header_t *new_tlvs = *tlvs; -- vendor_specific_ie_header_t *ie = wpaie; -- -- /* If the contents match the WPA_OUI and type=1 */ -- if ( (ie->tlv_header.length >= (uint8_t)VENDOR_SPECIFIC_IE_MINIMUM_LENGTH) && -- (memcmp(ie->oui, WPA_OUI_TYPE1, sizeof(ie->oui) ) == 0) ) -- { -- /* Found the WPA IE */ -- return WHD_TRUE; -- } -- -- /* calculate the next ie address */ -- new_tlvs = (whd_tlv8_header_t *)( ( (uint8_t *)ie ) + ie->tlv_header.length + sizeof(whd_tlv8_header_t) ); -- -- /* check the rest of length of buffer */ -- if (*tlvs_len < (uint32_t)( ( (uint8_t *)new_tlvs ) - ( (uint8_t *)prev_tlvs ) ) ) -- { -- /* set rest of length to zero to avoid buffer overflow */ -- *tlvs_len = 0; -- } -- else -- { -- /* point to the next ie */ -- *tlvs = new_tlvs; -- -- /* tlvs now points to the beginning of next IE pointer, and *ie points to one or more TLV further -- * down from the *prev_tlvs. So the tlvs_len need to be adjusted by prev_tlvs instead of *ie */ -- *tlvs_len -= (uint32_t)( ( (uint8_t *)*tlvs ) - ( (uint8_t *)prev_tlvs ) ); -- } -- -- return WHD_FALSE; --} -- --whd_tlv8_header_t *whd_parse_dot11_tlvs(const whd_tlv8_header_t *tlv_buf, uint32_t buflen, dot11_ie_id_t key) --{ -- return (whd_tlv8_header_t *)whd_tlv_find_tlv8( (const uint8_t *)tlv_buf, buflen, key ); --} -- --#ifdef WPRINT_ENABLE_WHD_DEBUG --char *whd_ssid_to_string(uint8_t *value, uint8_t length, char *ssid_buf, uint8_t ssid_buf_len) --{ -- memset(ssid_buf, 0, ssid_buf_len); -- -- if (ssid_buf_len > 0) -- { -- memcpy(ssid_buf, value, ssid_buf_len < length ? ssid_buf_len : length); -- } -- -- return ssid_buf; --} -- --/* When adding new events, update this switch statement to print correct string */ --#define CASE_RETURN_STRING(value) case value: \ -- return # value; -- --#define CASE_RETURN(value) case value: \ -- break; -- --const char *whd_event_to_string(whd_event_num_t value) --{ -- switch (value) -- { -- CASE_RETURN_STRING(WLC_E_ULP) -- CASE_RETURN(WLC_E_BT_WIFI_HANDOVER_REQ) -- CASE_RETURN(WLC_E_SPW_TXINHIBIT) -- CASE_RETURN(WLC_E_FBT_AUTH_REQ_IND) -- CASE_RETURN(WLC_E_RSSI_LQM) -- CASE_RETURN(WLC_E_PFN_GSCAN_FULL_RESULT) -- CASE_RETURN(WLC_E_PFN_SWC) -- CASE_RETURN(WLC_E_AUTHORIZED) -- CASE_RETURN(WLC_E_PROBREQ_MSG_RX) -- CASE_RETURN(WLC_E_RMC_EVENT) -- CASE_RETURN(WLC_E_DPSTA_INTF_IND) -- CASE_RETURN_STRING(WLC_E_NONE) -- CASE_RETURN_STRING(WLC_E_SET_SSID) -- CASE_RETURN(WLC_E_PFN_BEST_BATCHING) -- CASE_RETURN(WLC_E_JOIN) -- CASE_RETURN(WLC_E_START) -- CASE_RETURN_STRING(WLC_E_AUTH) -- CASE_RETURN(WLC_E_AUTH_IND) -- CASE_RETURN(WLC_E_DEAUTH) -- CASE_RETURN_STRING(WLC_E_DEAUTH_IND) -- CASE_RETURN(WLC_E_ASSOC) -- CASE_RETURN(WLC_E_ASSOC_IND) -- CASE_RETURN(WLC_E_REASSOC) -- CASE_RETURN(WLC_E_REASSOC_IND) -- CASE_RETURN(WLC_E_DISASSOC) -- CASE_RETURN_STRING(WLC_E_DISASSOC_IND) -- CASE_RETURN(WLC_E_ROAM) -- CASE_RETURN(WLC_E_ROAM_PREP) -- CASE_RETURN(WLC_E_ROAM_START) -- CASE_RETURN(WLC_E_QUIET_START) -- CASE_RETURN(WLC_E_QUIET_END) -- CASE_RETURN(WLC_E_BEACON_RX) -- CASE_RETURN_STRING(WLC_E_LINK) -- CASE_RETURN_STRING(WLC_E_RRM) -- CASE_RETURN(WLC_E_MIC_ERROR) -- CASE_RETURN(WLC_E_NDIS_LINK) -- CASE_RETURN(WLC_E_TXFAIL) -- CASE_RETURN(WLC_E_PMKID_CACHE) -- CASE_RETURN(WLC_E_RETROGRADE_TSF) -- CASE_RETURN(WLC_E_PRUNE) -- CASE_RETURN(WLC_E_AUTOAUTH) -- CASE_RETURN(WLC_E_EAPOL_MSG) -- CASE_RETURN(WLC_E_SCAN_COMPLETE) -- CASE_RETURN(WLC_E_ADDTS_IND) -- CASE_RETURN(WLC_E_DELTS_IND) -- CASE_RETURN(WLC_E_BCNSENT_IND) -- CASE_RETURN(WLC_E_BCNRX_MSG) -- CASE_RETURN(WLC_E_BCNLOST_MSG) -- CASE_RETURN_STRING(WLC_E_PFN_NET_FOUND) -- CASE_RETURN(WLC_E_PFN_NET_LOST) -- CASE_RETURN(WLC_E_RESET_COMPLETE) -- CASE_RETURN(WLC_E_JOIN_START) -- CASE_RETURN(WLC_E_ASSOC_START) -- CASE_RETURN(WLC_E_IBSS_ASSOC) -- CASE_RETURN(WLC_E_RADIO) -- CASE_RETURN(WLC_E_PSM_WATCHDOG) -- CASE_RETURN(WLC_E_CCX_ASSOC_START) -- CASE_RETURN(WLC_E_CCX_ASSOC_ABORT) -- CASE_RETURN(WLC_E_PROBREQ_MSG) -- CASE_RETURN(WLC_E_SCAN_CONFIRM_IND) -- CASE_RETURN_STRING(WLC_E_PSK_SUP) -- CASE_RETURN(WLC_E_COUNTRY_CODE_CHANGED) -- CASE_RETURN(WLC_E_EXCEEDED_MEDIUM_TIME) -- CASE_RETURN(WLC_E_ICV_ERROR) -- CASE_RETURN(WLC_E_UNICAST_DECODE_ERROR) -- CASE_RETURN(WLC_E_MULTICAST_DECODE_ERROR) -- CASE_RETURN(WLC_E_TRACE) -- CASE_RETURN(WLC_E_BTA_HCI_EVENT) -- CASE_RETURN(WLC_E_IF) -- CASE_RETURN(WLC_E_P2P_DISC_LISTEN_COMPLETE) -- CASE_RETURN(WLC_E_RSSI) -- CASE_RETURN_STRING(WLC_E_PFN_SCAN_COMPLETE) -- CASE_RETURN(WLC_E_EXTLOG_MSG) -- CASE_RETURN(WLC_E_ACTION_FRAME) -- CASE_RETURN(WLC_E_ACTION_FRAME_COMPLETE) -- CASE_RETURN(WLC_E_PRE_ASSOC_IND) -- CASE_RETURN(WLC_E_PRE_REASSOC_IND) -- CASE_RETURN(WLC_E_CHANNEL_ADOPTED) -- CASE_RETURN(WLC_E_AP_STARTED) -- CASE_RETURN(WLC_E_DFS_AP_STOP) -- CASE_RETURN(WLC_E_DFS_AP_RESUME) -- CASE_RETURN(WLC_E_WAI_STA_EVENT) -- CASE_RETURN(WLC_E_WAI_MSG) -- CASE_RETURN_STRING(WLC_E_ESCAN_RESULT) -- CASE_RETURN(WLC_E_ACTION_FRAME_OFF_CHAN_COMPLETE) -- CASE_RETURN(WLC_E_PROBRESP_MSG) -- CASE_RETURN(WLC_E_P2P_PROBREQ_MSG) -- CASE_RETURN(WLC_E_DCS_REQUEST) -- CASE_RETURN(WLC_E_FIFO_CREDIT_MAP) -- CASE_RETURN(WLC_E_ACTION_FRAME_RX) -- CASE_RETURN(WLC_E_WAKE_EVENT) -- CASE_RETURN(WLC_E_RM_COMPLETE) -- CASE_RETURN(WLC_E_HTSFSYNC) -- CASE_RETURN(WLC_E_OVERLAY_REQ) -- CASE_RETURN_STRING(WLC_E_CSA_COMPLETE_IND) -- CASE_RETURN(WLC_E_EXCESS_PM_WAKE_EVENT) -- CASE_RETURN(WLC_E_PFN_SCAN_NONE) -- CASE_RETURN(WLC_E_PFN_SCAN_ALLGONE) -- CASE_RETURN(WLC_E_GTK_PLUMBED) -- CASE_RETURN(WLC_E_ASSOC_IND_NDIS) -- CASE_RETURN(WLC_E_REASSOC_IND_NDIS) -- CASE_RETURN(WLC_E_ASSOC_REQ_IE) -- CASE_RETURN(WLC_E_ASSOC_RESP_IE) -- CASE_RETURN(WLC_E_ASSOC_RECREATED) -- CASE_RETURN(WLC_E_ACTION_FRAME_RX_NDIS) -- CASE_RETURN(WLC_E_AUTH_REQ) -- CASE_RETURN(WLC_E_TDLS_PEER_EVENT) -- CASE_RETURN(WLC_E_SPEEDY_RECREATE_FAIL) -- CASE_RETURN(WLC_E_NATIVE) -- CASE_RETURN(WLC_E_PKTDELAY_IND) -- CASE_RETURN(WLC_E_AWDL_AW) -- CASE_RETURN(WLC_E_AWDL_ROLE) -- CASE_RETURN(WLC_E_AWDL_EVENT) -- CASE_RETURN(WLC_E_NIC_AF_TXS) -- CASE_RETURN(WLC_E_NAN) -- CASE_RETURN(WLC_E_BEACON_FRAME_RX) -- CASE_RETURN(WLC_E_SERVICE_FOUND) -- CASE_RETURN(WLC_E_GAS_FRAGMENT_RX) -- CASE_RETURN(WLC_E_GAS_COMPLETE) -- CASE_RETURN(WLC_E_P2PO_ADD_DEVICE) -- CASE_RETURN(WLC_E_P2PO_DEL_DEVICE) -- CASE_RETURN(WLC_E_WNM_STA_SLEEP) -- CASE_RETURN(WLC_E_TXFAIL_THRESH) -- CASE_RETURN(WLC_E_PROXD) -- CASE_RETURN(WLC_E_IBSS_COALESCE) -- CASE_RETURN(WLC_E_AWDL_RX_PRB_RESP) -- CASE_RETURN(WLC_E_AWDL_RX_ACT_FRAME) -- CASE_RETURN(WLC_E_AWDL_WOWL_NULLPKT) -- CASE_RETURN(WLC_E_AWDL_PHYCAL_STATUS) -- CASE_RETURN(WLC_E_AWDL_OOB_AF_STATUS) -- CASE_RETURN(WLC_E_AWDL_SCAN_STATUS) -- CASE_RETURN(WLC_E_AWDL_AW_START) -- CASE_RETURN(WLC_E_AWDL_AW_END) -- CASE_RETURN(WLC_E_AWDL_AW_EXT) -- CASE_RETURN(WLC_E_AWDL_PEER_CACHE_CONTROL) -- CASE_RETURN(WLC_E_CSA_START_IND) -- CASE_RETURN(WLC_E_CSA_DONE_IND) -- CASE_RETURN(WLC_E_CSA_FAILURE_IND) -- CASE_RETURN(WLC_E_CCA_CHAN_QUAL) -- CASE_RETURN(WLC_E_BSSID) -- CASE_RETURN(WLC_E_TX_STAT_ERROR) -- CASE_RETURN(WLC_E_BCMC_CREDIT_SUPPORT) -- CASE_RETURN(WLC_E_PSTA_PRIMARY_INTF_IND) -- case WLC_E_LAST: -- default: -- return "Unknown"; -- -- break; -- } -- -- return "Unknown"; --} -- --const char *whd_status_to_string(whd_event_status_t status) --{ -- switch (status) -- { -- CASE_RETURN_STRING(WLC_E_STATUS_SUCCESS) -- CASE_RETURN_STRING(WLC_E_STATUS_FAIL) -- CASE_RETURN_STRING(WLC_E_STATUS_TIMEOUT) -- CASE_RETURN_STRING(WLC_E_STATUS_NO_NETWORKS) -- CASE_RETURN_STRING(WLC_E_STATUS_ABORT) -- CASE_RETURN_STRING(WLC_E_STATUS_NO_ACK) -- CASE_RETURN_STRING(WLC_E_STATUS_UNSOLICITED) -- CASE_RETURN_STRING(WLC_E_STATUS_ATTEMPT) -- CASE_RETURN_STRING(WLC_E_STATUS_PARTIAL) -- CASE_RETURN_STRING(WLC_E_STATUS_NEWSCAN) -- CASE_RETURN_STRING(WLC_E_STATUS_NEWASSOC) -- CASE_RETURN_STRING(WLC_E_STATUS_11HQUIET) -- CASE_RETURN_STRING(WLC_E_STATUS_SUPPRESS) -- CASE_RETURN_STRING(WLC_E_STATUS_NOCHANS) -- CASE_RETURN_STRING(WLC_E_STATUS_CCXFASTRM) -- CASE_RETURN_STRING(WLC_E_STATUS_CS_ABORT) -- CASE_RETURN_STRING(WLC_SUP_DISCONNECTED) -- CASE_RETURN_STRING(WLC_SUP_CONNECTING) -- CASE_RETURN_STRING(WLC_SUP_IDREQUIRED) -- CASE_RETURN_STRING(WLC_SUP_AUTHENTICATING) -- CASE_RETURN_STRING(WLC_SUP_AUTHENTICATED) -- CASE_RETURN_STRING(WLC_SUP_KEYXCHANGE) -- CASE_RETURN_STRING(WLC_SUP_KEYED) -- CASE_RETURN_STRING(WLC_SUP_TIMEOUT) -- CASE_RETURN_STRING(WLC_SUP_LAST_BASIC_STATE) -- CASE_RETURN_STRING(WLC_SUP_KEYXCHANGE_PREP_M4) -- CASE_RETURN_STRING(WLC_SUP_KEYXCHANGE_WAIT_G1) -- CASE_RETURN_STRING(WLC_SUP_KEYXCHANGE_PREP_G2) -- CASE_RETURN_STRING(WLC_DOT11_SC_SUCCESS) -- CASE_RETURN_STRING(WLC_DOT11_SC_FAILURE) -- CASE_RETURN_STRING(WLC_DOT11_SC_CAP_MISMATCH) -- CASE_RETURN_STRING(WLC_DOT11_SC_REASSOC_FAIL) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_FAIL) -- CASE_RETURN_STRING(WLC_DOT11_SC_AUTH_MISMATCH) -- CASE_RETURN_STRING(WLC_DOT11_SC_AUTH_SEQ) -- CASE_RETURN_STRING(WLC_DOT11_SC_AUTH_CHALLENGE_FAIL) -- CASE_RETURN_STRING(WLC_DOT11_SC_AUTH_TIMEOUT) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_BUSY_FAIL) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_RATE_MISMATCH) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_SHORT_REQUIRED) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_PBCC_REQUIRED) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_AGILITY_REQUIRED) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_SPECTRUM_REQUIRED) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_BAD_POWER_CAP) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_BAD_SUP_CHANNELS) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_SHORTSLOT_REQUIRED) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_ERPBCC_REQUIRED) -- CASE_RETURN_STRING(WLC_DOT11_SC_ASSOC_DSSOFDM_REQUIRED) -- CASE_RETURN_STRING(WLC_DOT11_SC_DECLINED) -- CASE_RETURN_STRING(WLC_DOT11_SC_INVALID_PARAMS) -- CASE_RETURN_STRING(WLC_DOT11_SC_INVALID_AKMP) -- CASE_RETURN_STRING(WLC_DOT11_SC_INVALID_MDID) -- CASE_RETURN_STRING(WLC_DOT11_SC_INVALID_FTIE) -- case WLC_E_STATUS_FORCE_32_BIT: -- default: -- break; -- } -- return "Unknown"; --} -- --const char *whd_reason_to_string(whd_event_reason_t reason) --{ -- switch (reason) -- { -- CASE_RETURN_STRING(WLC_E_REASON_INITIAL_ASSOC) -- CASE_RETURN_STRING(WLC_E_REASON_LOW_RSSI) -- CASE_RETURN_STRING(WLC_E_REASON_DEAUTH) -- CASE_RETURN_STRING(WLC_E_REASON_DISASSOC) -- CASE_RETURN_STRING(WLC_E_REASON_BCNS_LOST) -- CASE_RETURN_STRING(WLC_E_REASON_FAST_ROAM_FAILED) -- CASE_RETURN_STRING(WLC_E_REASON_DIRECTED_ROAM) -- CASE_RETURN_STRING(WLC_E_REASON_TSPEC_REJECTED) -- CASE_RETURN_STRING(WLC_E_REASON_BETTER_AP) -- CASE_RETURN_STRING(WLC_E_PRUNE_ENCR_MISMATCH) -- CASE_RETURN_STRING(WLC_E_PRUNE_BCAST_BSSID) -- CASE_RETURN_STRING(WLC_E_PRUNE_MAC_DENY) -- CASE_RETURN_STRING(WLC_E_PRUNE_MAC_NA) -- CASE_RETURN_STRING(WLC_E_PRUNE_REG_PASSV) -- CASE_RETURN_STRING(WLC_E_PRUNE_SPCT_MGMT) -- CASE_RETURN_STRING(WLC_E_PRUNE_RADAR) -- CASE_RETURN_STRING(WLC_E_RSN_MISMATCH) -- CASE_RETURN_STRING(WLC_E_PRUNE_NO_COMMON_RATES) -- CASE_RETURN_STRING(WLC_E_PRUNE_BASIC_RATES) -- CASE_RETURN_STRING(WLC_E_PRUNE_CCXFAST_PREVAP) -- CASE_RETURN_STRING(WLC_E_PRUNE_CIPHER_NA) -- CASE_RETURN_STRING(WLC_E_PRUNE_KNOWN_STA) -- CASE_RETURN_STRING(WLC_E_PRUNE_CCXFAST_DROAM) -- CASE_RETURN_STRING(WLC_E_PRUNE_WDS_PEER) -- CASE_RETURN_STRING(WLC_E_PRUNE_QBSS_LOAD) -- CASE_RETURN_STRING(WLC_E_PRUNE_HOME_AP) -- CASE_RETURN_STRING(WLC_E_PRUNE_AP_BLOCKED) -- CASE_RETURN_STRING(WLC_E_PRUNE_NO_DIAG_SUPPORT) -- CASE_RETURN_STRING(WLC_E_SUP_OTHER) -- CASE_RETURN_STRING(WLC_E_SUP_DECRYPT_KEY_DATA) -- CASE_RETURN_STRING(WLC_E_SUP_BAD_UCAST_WEP128) -- CASE_RETURN_STRING(WLC_E_SUP_BAD_UCAST_WEP40) -- CASE_RETURN_STRING(WLC_E_SUP_UNSUP_KEY_LEN) -- CASE_RETURN_STRING(WLC_E_SUP_PW_KEY_CIPHER) -- CASE_RETURN_STRING(WLC_E_SUP_MSG3_TOO_MANY_IE) -- CASE_RETURN_STRING(WLC_E_SUP_MSG3_IE_MISMATCH) -- CASE_RETURN_STRING(WLC_E_SUP_NO_INSTALL_FLAG) -- CASE_RETURN_STRING(WLC_E_SUP_MSG3_NO_GTK) -- CASE_RETURN_STRING(WLC_E_SUP_GRP_KEY_CIPHER) -- CASE_RETURN_STRING(WLC_E_SUP_GRP_MSG1_NO_GTK) -- CASE_RETURN_STRING(WLC_E_SUP_GTK_DECRYPT_FAIL) -- CASE_RETURN_STRING(WLC_E_SUP_SEND_FAIL) -- CASE_RETURN_STRING(WLC_E_SUP_DEAUTH) -- CASE_RETURN_STRING(WLC_E_SUP_WPA_PSK_TMO) -- CASE_RETURN_STRING(DOT11_RC_RESERVED) -- CASE_RETURN_STRING(DOT11_RC_UNSPECIFIED) -- CASE_RETURN_STRING(DOT11_RC_AUTH_INVAL) -- CASE_RETURN_STRING(DOT11_RC_DEAUTH_LEAVING) -- CASE_RETURN_STRING(DOT11_RC_INACTIVITY) -- CASE_RETURN_STRING(DOT11_RC_BUSY) -- CASE_RETURN_STRING(DOT11_RC_INVAL_CLASS_2) -- CASE_RETURN_STRING(DOT11_RC_INVAL_CLASS_3) -- CASE_RETURN_STRING(DOT11_RC_DISASSOC_LEAVING) -- CASE_RETURN_STRING(DOT11_RC_NOT_AUTH) -- CASE_RETURN_STRING(DOT11_RC_BAD_PC) -- CASE_RETURN_STRING(DOT11_RC_BAD_CHANNELS) -- CASE_RETURN_STRING(DOT11_RC_UNSPECIFIED_QOS) -- CASE_RETURN_STRING(DOT11_RC_INSUFFCIENT_BW) -- CASE_RETURN_STRING(DOT11_RC_EXCESSIVE_FRAMES) -- CASE_RETURN_STRING(DOT11_RC_TX_OUTSIDE_TXOP) -- CASE_RETURN_STRING(DOT11_RC_LEAVING_QBSS) -- CASE_RETURN_STRING(DOT11_RC_BAD_MECHANISM) -- CASE_RETURN_STRING(DOT11_RC_SETUP_NEEDED) -- CASE_RETURN_STRING(DOT11_RC_TIMEOUT) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_STATUS_CHG) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_MERGE) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_STOP) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_P2P) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_WINDOW_BEGIN_P2P) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_WINDOW_BEGIN_MESH) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_WINDOW_BEGIN_IBSS) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_WINDOW_BEGIN_RANGING) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_POST_DISC) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_DATA_IF_ADD) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_DATA_PEER_ADD) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_DATA_IND) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_DATA_CONF) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_SDF_RX) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_DATA_END) -- CASE_RETURN_STRING(WLC_E_NAN_EVENT_BCN_RX) -- case DOT11_RC_MAX: -- case WLC_E_REASON_FORCE_32_BIT: -- default: -- break; -- } -- -- return "Unknown"; --} -- --char *whd_ether_ntoa(const uint8_t *ea, char *buf, uint8_t buf_len) --{ -- const char hex[] = -- { -- '0', '1', '2', '3', '4', '5', '6', '7', -- '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' -- }; -- char *output = buf; -- const uint8_t *octet = ea; -- -- if (buf_len < WHD_ETHER_ADDR_STR_LEN) -- { -- if (buf_len > 0) -- { -- /* buffer too short */ -- buf[0] = '\0'; -- } -- return buf; -- } -- -- for (; octet != &ea[WHD_ETHER_ADDR_LEN]; octet++) -- { -- *output++ = hex[(*octet >> 4) & 0xf]; -- *output++ = hex[*octet & 0xf]; -- *output++ = ':'; -- } -- -- *(output - 1) = '\0'; -- -- return buf; --} -- --#endif /* WPRINT_ENABLE_WHD_DEBUG */ -- --void whd_convert_security_type_to_string(whd_security_t security, char *out_str, uint16_t out_str_len) --{ -- if (security == WHD_SECURITY_OPEN) -- { -- strncat(out_str, " Open", out_str_len); -- } -- if (security & WEP_ENABLED) -- { -- strncat(out_str, " WEP", out_str_len); -- } -- if (security & WPA3_SECURITY) -- { -- strncat(out_str, " WPA3", out_str_len); -- } -- if (security & WPA2_SECURITY) -- { -- strncat(out_str, " WPA2", out_str_len); -- } -- if (security & WPA_SECURITY) -- { -- strncat(out_str, " WPA", out_str_len); -- } -- if (security & AES_ENABLED) -- { -- strncat(out_str, " AES", out_str_len); -- } -- if (security & TKIP_ENABLED) -- { -- strncat(out_str, " TKIP", out_str_len); -- } -- if (security & SHARED_ENABLED) -- { -- strncat(out_str, " SHARED", out_str_len); -- } -- if (security & ENTERPRISE_ENABLED) -- { -- strncat(out_str, " Enterprise", out_str_len); -- } -- if (security & WPS_ENABLED) -- { -- strncat(out_str, " WPS", out_str_len); -- } -- if (security & FBT_ENABLED) -- { -- strncat(out_str, " FBT", out_str_len); -- } -- if (security & IBSS_ENABLED) -- { -- strncat(out_str, " IBSS", out_str_len); -- } -- if (security == WHD_SECURITY_UNKNOWN) -- { -- strncat(out_str, " Unknown", out_str_len); -- } -- if (!(security & ENTERPRISE_ENABLED) && (security != WHD_SECURITY_OPEN) && -- (security != WHD_SECURITY_UNKNOWN) ) -- { -- strncat(out_str, " PSK", out_str_len); -- } --} -- --/*! -- ****************************************************************************** -- * Prints partial details of a scan result on a single line -- * -- * @param[in] record A pointer to the whd_scan_result_t record -- * -- */ -- --void whd_print_scan_result(whd_scan_result_t *record) --{ -- const char *str = NULL; -- char sec_type_string[40] = { 0 }; -- -- switch (record->bss_type) -- { -- case WHD_BSS_TYPE_ADHOC: -- str = "Adhoc"; -- break; -- -- case WHD_BSS_TYPE_INFRASTRUCTURE: -- str = "Infra"; -- break; -- -- case WHD_BSS_TYPE_ANY: -- str = "Any"; -- break; -- -- case WHD_BSS_TYPE_MESH: -- case WHD_BSS_TYPE_UNKNOWN: -- str = "Unknown"; -- break; -- -- default: -- str = "?"; -- break; -- } -- -- UNUSED_PARAMETER(str); -- WPRINT_MACRO( ("%5s ", str) ); -- WPRINT_MACRO( ("%02X:%02X:%02X:%02X:%02X:%02X ", record->BSSID.octet[0], record->BSSID.octet[1], -- record->BSSID.octet[2], record->BSSID.octet[3], record->BSSID.octet[4], -- record->BSSID.octet[5]) ); -- -- if (record->flags & WHD_SCAN_RESULT_FLAG_RSSI_OFF_CHANNEL) -- { -- WPRINT_MACRO( ("OFF ") ); -- } -- else -- { -- WPRINT_MACRO( ("%d ", record->signal_strength) ); -- } -- -- if (record->max_data_rate < 100000) -- { -- WPRINT_MACRO( (" %.1f ", (double)(record->max_data_rate / 1000.0) ) ); -- } -- else -- { -- WPRINT_MACRO( ("%.1f ", (double)(record->max_data_rate / 1000.0) ) ); -- } -- WPRINT_MACRO( (" %3d ", record->channel) ); -- -- whd_convert_security_type_to_string(record->security, sec_type_string, (sizeof(sec_type_string) - 1) ); -- -- WPRINT_MACRO( ("%-20s ", sec_type_string) ); -- WPRINT_MACRO( (" %-32s ", record->SSID.value) ); -- -- if (record->ccode[0] != '\0') -- { -- WPRINT_MACRO( ("%c%c ", record->ccode[0], record->ccode[1]) ); -- } -- else -- { -- WPRINT_MACRO( (" ") ); -- } -- -- if (record->flags & WHD_SCAN_RESULT_FLAG_BEACON) -- { -- WPRINT_MACRO( (" %-15s", " BEACON") ); -- } -- else -- { -- WPRINT_MACRO( (" %-15s", " PROBE ") ); -- } -- WPRINT_MACRO( ("\n") ); --} -- --void whd_hexdump(uint8_t *data, uint32_t data_len) --{ -- uint32_t i; -- uint8_t buff[17] = {0}; -- -- UNUSED_PARAMETER(buff); -- for (i = 0; i < data_len; i++) -- { -- if ( (i % 16) == 0 ) -- { -- if (i != 0) -- { -- WPRINT_MACRO( (" %s\n", buff) ); -- } -- WPRINT_MACRO( ("%04" PRIx32 " ", i) ); -- } -- WPRINT_MACRO( (" %02x", data[i]) ); -- -- if ( (data[i] < 0x20) || (data[i] > 0x7e) ) -- { -- buff[i % 16] = '.'; -- } -- else -- { -- buff[i % 16] = data[i]; -- } -- buff[(i % 16) + 1] = '\0'; -- } -- while ( (i % 16) != 0 ) -- { -- WPRINT_MACRO( (" ") ); -- i++; -- } -- WPRINT_MACRO( (" %s\n", buff) ); --} -- --void whd_ioctl_to_string(uint32_t cmd, char *ioctl_str, uint16_t ioctl_str_len) --{ -- if (cmd == 2) -- { -- strncpy(ioctl_str, "WLC_UP", ioctl_str_len); -- } -- else if (cmd == 20) -- { -- strncpy(ioctl_str, "WLC_SET_INFRA", ioctl_str_len); -- } -- else if (cmd == 22) -- { -- strncpy(ioctl_str, "WLC_SET_AUTH", ioctl_str_len); -- } -- else if (cmd == 26) -- { -- strncpy(ioctl_str, "WLC_SET_SSID", ioctl_str_len); -- } -- else if (cmd == 52) -- { -- strncpy(ioctl_str, "WLC_DISASSOC", ioctl_str_len); -- } -- else if (cmd == 55) -- { -- strncpy(ioctl_str, "WLC_SET_ROAM_TRIGGER", ioctl_str_len); -- } -- else if (cmd == 57) -- { -- strncpy(ioctl_str, "WLC_SET_ROAM_DELTA", ioctl_str_len); -- } -- else if (cmd == 59) -- { -- strncpy(ioctl_str, "WLC_SET_ROAM_SCAN_PERIOD", ioctl_str_len); -- } -- else if (cmd == 110) -- { -- strncpy(ioctl_str, "WLC_SET_GMODE", ioctl_str_len); -- } -- else if (cmd == 116) -- { -- strncpy(ioctl_str, "WLC_SET_SCANSUPPRESS", ioctl_str_len); -- } -- else if (cmd == 134) -- { -- strncpy(ioctl_str, "WLC_SET_WSEC", ioctl_str_len); -- } -- else if (cmd == 165) -- { -- strncpy(ioctl_str, "WLC_SET_WPA_AUTH", ioctl_str_len); -- } -- else if (cmd == 268) -- { -- strncpy(ioctl_str, "WLC_SET_WSEC_PMK", ioctl_str_len); -- } --} -- --void whd_event_info_to_string(uint32_t cmd, uint16_t flag, uint32_t reason, char *ioctl_str, uint16_t ioctl_str_len) --{ -- if (cmd == 0) -- { -- strncpy(ioctl_str, "WLC_E_SET_SSID", ioctl_str_len); -- } -- else if (cmd == 3) -- { -- strncpy(ioctl_str, "WLC_E_AUTH ", ioctl_str_len); -- } -- else if (cmd == 16) -- { -- strncpy(ioctl_str, "WLC_E_LINK ", ioctl_str_len); -- } -- else if (cmd == 46) -- { -- strncpy(ioctl_str, "WLC_E_PSK_SUP ", ioctl_str_len); -- } -- else if (cmd == 54) -- { -- strncpy(ioctl_str, "WLC_E_IF ", ioctl_str_len); -- } -- else if (cmd == 69) -- { -- strncpy(ioctl_str, "WLC_E_ESCAN_RESULT", ioctl_str_len); -- } -- -- if (flag == 0) -- { -- strncat(ioctl_str, " WLC_E_STATUS_SUCCESS", ioctl_str_len); -- } -- if (flag == 8) -- { -- strncat(ioctl_str, " WLC_E_STATUS_PARTIAL", ioctl_str_len); -- } -- else if (flag == 262) -- { -- strncat(ioctl_str, " WLC_SUP_KEYED ", ioctl_str_len); -- } -- -- if (reason == 0) -- { -- strncat(ioctl_str, " WLC_E_REASON_INITIAL_ASSOC", ioctl_str_len); -- } -- else if (reason == 512) -- { -- strncat(ioctl_str, " WLC_E_SUP_OTHER", ioctl_str_len); -- } --} -- --bool whd_str_to_ip(const char *ip4addr, size_t len, void *dest) --{ -- uint8_t *addr = dest; -- -- if (len > 16) // Too long, not possible -- { -- return false; -- } -- -- uint8_t stringLength = 0, byteCount = 0; -- -- //Iterate over each component of the IP. The exit condition is in the middle of the loop -- while (true) -- { -- -- //No valid character (IPv4 addresses don't have implicit 0, that is x.y..z being read as x.y.0.z) -- if ( (stringLength == len) || (ip4addr[stringLength] < '0') || (ip4addr[stringLength] > '9') ) -- { -- return false; -- } -- -- //For each component, we convert it to the raw value -- uint16_t byte = 0; -- while (stringLength < len && ip4addr[stringLength] >= '0' && ip4addr[stringLength] <= '9') -- { -- byte *= 10; -- byte += ip4addr[stringLength++] - '0'; -- -- //We go over the maximum value for an IPv4 component -- if (byte > 0xff) -- { -- return false; -- } -- } -- -- //Append the component -- addr[byteCount++] = (uint8_t)byte; -- -- //If we're at the end, we leave the loop. It's the only way to reach the `true` output -- if (byteCount == 4) -- { -- break; -- } -- -- //If the next character is invalid, we return false -- if ( (stringLength == len) || (ip4addr[stringLength++] != '.') ) -- { -- return false; -- } -- } -- -- return stringLength == len || ip4addr[stringLength] == '\0'; --} -- --static void whd_ipv4_itoa(char *string, uint8_t byte) --{ -- char *baseString = string; -- -- //Write the digits to the buffer from the least significant to the most -- // This is the incorrect order but we will swap later -- do -- { -- *string++ = '0' + byte % 10; -- byte /= 10; -- } while (byte); -- -- //We put the final \0, then go back one step on the last digit for the swap -- *string-- = '\0'; -- -- //We now swap the digits -- while (baseString < string) -- { -- uint8_t tmp = *string; -- *string-- = *baseString; -- *baseString++ = tmp; -- } --} -- --uint8_t whd_ip4_to_string(const void *ip4addr, char *p) --{ -- uint8_t outputPos = 0; -- const uint8_t *byteArray = ip4addr; -- -- for (uint8_t component = 0; component < 4; ++component) -- { -- //Convert the byte to string -- whd_ipv4_itoa(&p[outputPos], byteArray[component]); -- -- //Move outputPos to the end of the string -- while (p[outputPos] != '\0') -- { -- outputPos += 1; -- } -- -- //Append a dot if this is not the last digit -- if (component < 3) -- { -- p[outputPos++] = '.'; -- } -- } -- // Return length of generated string, excluding the terminating null character -- return outputPos; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi.c -deleted file mode 100644 -index 43cc162cbb..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi.c -+++ /dev/null -@@ -1,111 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * -- * Implements functions called by WHD user APIs, but not directly exposed to user -- * -- * This file provides functions which are not directly exposed to user but, called by end-user functions which allow actions such as -- * seting the MAC address, getting channel info, etc -- */ -- --#include "whd_ap.h" --#include "whd_chip_constants.h" --#include "whd_debug.h" --#include "whd_events_int.h" --#include "whd_cdc_bdc.h" --#include "whd_thread_internal.h" --#include "whd_utils.h" --#include "whd_wifi_api.h" --#include "whd_wlioctl.h" -- --/****************************************************** --* @cond Constants --******************************************************/ --#define MAC_ADDRESS_LOCALLY_ADMINISTERED_BIT 0x02 -- --/****************************************************** --* Local Structures --******************************************************/ -- -- -- --/****************************************************** --* Variables --******************************************************/ --void (*whd_wifi_link_update_callback)(void) = NULL; -- --/****************************************************** --* Function definitions --******************************************************/ -- --uint32_t whd_wifi_set_mac_address(whd_interface_t ifp, whd_mac_t mac) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- /* AP interface needs to come up with MAC different from STA */ --#ifdef APOLLO_AUDIO -- -- /* Work around the issue of asking API to set one address and it sets a different address. -- * This will cause any comparison of set and get mac address to fail. TODO: move twiddling this -- * bit to a higher level. -- */ -- if (0) --#else -- if (ifp->role == WHD_AP_ROLE) --#endif -- { -- whd_mac_t ap_mac_address; -- -- memcpy(&ap_mac_address, &mac, sizeof(whd_mac_t) ); -- if (ap_mac_address.octet[0] & MAC_ADDRESS_LOCALLY_ADMINISTERED_BIT) -- { -- ap_mac_address.octet[0] &= (uint8_t) ~(MAC_ADDRESS_LOCALLY_ADMINISTERED_BIT); -- } -- else -- { -- ap_mac_address.octet[0] |= MAC_ADDRESS_LOCALLY_ADMINISTERED_BIT; -- } -- -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(whd_mac_t), IOVAR_STR_CUR_ETHERADDR); -- CHECK_IOCTL_BUFFER(data); -- memcpy(data, &ap_mac_address, sizeof(whd_mac_t) ); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); -- -- if (memcmp(&mac, &ap_mac_address, sizeof(whd_mac_t) ) != 0) -- { -- WPRINT_WHD_INFO( (" STA MAC address : %02x:%02x:%02x:%02x:%02x:%02x \n" -- " AP MAC address : %02x:%02x:%02x:%02x:%02x:%02x \n", -- mac.octet[0], mac.octet[1], mac.octet[2], -- mac.octet[3], mac.octet[4], mac.octet[3], -- ap_mac_address.octet[0], ap_mac_address.octet[1], ap_mac_address.octet[2], -- ap_mac_address.octet[3], ap_mac_address.octet[4], ap_mac_address.octet[3]) ); -- } -- } -- else -- { -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(whd_mac_t), IOVAR_STR_CUR_ETHERADDR); -- CHECK_IOCTL_BUFFER(data); -- memcpy(data, &mac, sizeof(whd_mac_t) ); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); -- } -- -- return WHD_SUCCESS; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_api.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_api.c -deleted file mode 100644 -index a570639cdd..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_api.c -+++ /dev/null -@@ -1,4375 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --/** @file -- * Implements user functions for controlling the Wi-Fi system -- * -- * This file provides end-user functions which allow actions such as scanning for -- * Wi-Fi networks, joining Wi-Fi networks, getting the MAC address, etc -- * -- */ -- --#include --#include "whd_version.h" --#include "whd_chip_constants.h" --#include "whd_cdc_bdc.h" --#include "whd_thread_internal.h" --#include "whd_debug.h" --#include "whd_utils.h" --#include "whd_wifi_api.h" --#include "whd_buffer_api.h" --#include "whd_wlioctl.h" --#include "whd_types.h" --#include "whd_types_int.h" -- --/****************************************************** --* Constants --******************************************************/ --#define WL_CHANSPEC_CHAN_MASK (0x00ff) --#define CHSPEC_CHANNEL(chspec) ( (uint8_t)( (chspec) & WL_CHANSPEC_CHAN_MASK ) ) --#define CH20MHZ_CHSPEC(channel) (chanspec_t)( (chanspec_t)(channel) | GET_C_VAR(whd_driver, CHANSPEC_BW_20) | \ -- GET_C_VAR(whd_driver, CHANSPEC_CTL_SB_NONE) | \ -- ( ( (channel) <= CH_MAX_2G_CHANNEL ) ? GET_C_VAR(whd_driver, \ -- CHANSPEC_BAND_2G) \ -- : GET_C_VAR(whd_driver, CHANSPEC_BAND_5G) ) ) -- --#define MAX_SUPPORTED_MCAST_ENTRIES (10) --#define WLC_EVENT_MSG_LINK (0x01) -- --#define JOIN_ASSOCIATED (uint32_t)(1 << 0) --#define JOIN_AUTHENTICATED (uint32_t)(1 << 1) --#define JOIN_LINK_READY (uint32_t)(1 << 2) --#define JOIN_SECURITY_COMPLETE (uint32_t)(1 << 3) --#define JOIN_SSID_SET (uint32_t)(1 << 4) --#define JOIN_NO_NETWORKS (uint32_t)(1 << 5) --#define JOIN_EAPOL_KEY_M1_TIMEOUT (uint32_t)(1 << 6) --#define JOIN_EAPOL_KEY_M3_TIMEOUT (uint32_t)(1 << 7) --#define JOIN_EAPOL_KEY_G1_TIMEOUT (uint32_t)(1 << 8) --#define JOIN_EAPOL_KEY_FAILURE (uint32_t)(1 << 9) -- --#define JOIN_SECURITY_FLAGS_MASK (JOIN_SECURITY_COMPLETE | JOIN_EAPOL_KEY_M1_TIMEOUT | JOIN_EAPOL_KEY_M3_TIMEOUT | \ -- JOIN_EAPOL_KEY_G1_TIMEOUT | JOIN_EAPOL_KEY_FAILURE) -- --#define DEFAULT_JOIN_ATTEMPT_TIMEOUT (7000) /* Overall join attempt timeout in milliseconds. */ --#define DEFAULT_EAPOL_KEY_PACKET_TIMEOUT (2500) /* Timeout when waiting for EAPOL key packet M1 or M3 in milliseconds.*/ -- /* Some APs may be slow to provide M1 and 1000 ms is not long enough for edge of cell. */ --#ifndef DEFAULT_PM2_SLEEP_RET_TIME --#define DEFAULT_PM2_SLEEP_RET_TIME (200) --#endif -- --#define PM2_SLEEP_RET_TIME_MIN (10) /* Minimum return-to-sleep in milliseconds */ --#define PM2_SLEEP_RET_TIME_MAX (2000) /* Maximum return-to-sleep in milliseconds */ --#define NULL_FRAMES_WITH_PM_SET_LIMIT (100) /* NULL_FRAMES_WITH_PM_SET_LIMIT */ --#define RSPEC_KBPS_MASK (0x7f) --#define RSPEC_500KBPS(rate) ( (rate) & RSPEC_KBPS_MASK ) --#define RSPEC_TO_KBPS(rate) (RSPEC_500KBPS( (rate) ) * (unsigned int)500) --#define UNSIGNED_CHAR_TO_CHAR(uch) ( (uch) & 0x7f ) -- --/****************************************************** --* Local Structures --******************************************************/ -- --#pragma pack(1) -- --typedef struct --{ -- uint32_t entry_count; -- whd_mac_t macs[1]; --} mcast_list_t; -- --typedef struct --{ -- int32_t rssi; -- whd_mac_t macs; --} client_rssi_t; -- --typedef struct --{ -- whd_sync_scan_result_t *aps; -- uint32_t count; -- uint32_t offset; -- cy_semaphore_t scan_semaphore; --} whd_scan_userdata_t; -- --#pragma pack() -- --/****************************************************** --* Static Variables --******************************************************/ -- --/* LOOK: !!!When adding events below, please modify whd_event_to_string!!! */ --const whd_event_num_t join_events[] = --{ -- WLC_E_SET_SSID, WLC_E_LINK, WLC_E_AUTH, WLC_E_DEAUTH_IND, WLC_E_DISASSOC_IND, WLC_E_PSK_SUP, WLC_E_CSA_COMPLETE_IND, -- WLC_E_NONE --}; --static const whd_event_num_t scan_events[] = { WLC_E_ESCAN_RESULT, WLC_E_NONE }; -- --/* Values are in 100's of Kbit/sec (1 = 100Kbit/s). Arranged as: -- * [Bit index] -- * [0] = 20Mhz only -- * [0] = Long GI -- * [1] = Short GI -- * [1] = 40MHz support -- * [0] = Long GI -- * [1] = Short GI -- */ --static const uint16_t mcs_data_rate_lookup_table[32][2][2] = --{ -- [0] = -- { -- { 65, 72}, -- { 135, 150} -- }, -- [1] = -- { -- { 130, 144}, -- { 270, 300} -- }, -- [2] = -- { -- { 195, 217}, -- { 405, 450} -- }, -- [3] = -- { -- { 260, 289}, -- { 540, 600} -- }, -- [4] = -- { -- { 390, 433}, -- { 810, 900} -- }, -- [5] = -- { -- { 520, 578}, -- { 1080, 1200} -- }, -- [6] = -- { -- { 585, 650}, -- { 1215, 1350} -- }, -- [7] = -- { -- { 650, 722}, -- { 1350, 1500} -- }, -- [8] = -- { -- { 130, 144}, -- { 270, 300} -- }, -- [9] = -- { -- { 260, 289}, -- { 540, 600} -- }, -- [10] = -- { -- { 390, 433}, -- { 810, 900} -- }, -- [11] = -- { -- { 520, 578}, -- { 1080, 1200} -- }, -- [12] = -- { -- { 780, 867}, -- { 1620, 1800} -- }, -- [13] = -- { -- { 1040, 1156}, -- { 2160, 2400} -- }, -- [14] = -- { -- { 1170, 1300}, -- { 2430, 2700} -- }, -- [15] = -- { -- { 1300, 1444}, -- { 2700, 3000} -- }, -- [16] = -- { -- { 195, 217}, -- { 405, 450} -- }, -- [17] = -- { -- { 390, 433}, -- { 810, 900} -- }, -- [18] = -- { -- { 585, 650}, -- { 1215, 1350} -- }, -- [19] = -- { -- { 780, 867}, -- { 1620, 1800} -- }, -- [20] = -- { -- { 1170, 1300}, -- { 2430, 2700} -- }, -- [21] = -- { -- { 1560, 1733}, -- { 3240, 3600} -- }, -- [22] = -- { -- { 1755, 1950}, -- { 3645, 4050} -- }, -- [23] = -- { -- { 1950, 2167}, -- { 4050, 4500} -- }, -- [24] = -- { -- { 260, 288}, -- { 540, 600} -- }, -- [25] = -- { -- { 520, 576}, -- { 1080, 1200} -- }, -- [26] = -- { -- { 780, 868}, -- { 1620, 1800} -- }, -- [27] = -- { -- { 1040, 1156}, -- { 2160, 2400} -- }, -- [28] = -- { -- { 1560, 1732}, -- { 3240, 3600} -- }, -- [29] = -- { -- { 2080, 2312}, -- { 4320, 4800} -- }, -- [30] = -- { -- { 2340, 2600}, -- { 4860, 5400} -- }, -- [31] = -- { -- { 2600, 2888}, -- { 5400, 6000} -- }, --}; -- -- --/****************************************************** --* Static Function prototypes --******************************************************/ --static void *whd_wifi_join_events_handler(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, void *handler_user_data); --static void *whd_wifi_scan_events_handler(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, -- void *handler_user_data); --static uint32_t whd_wifi_prepare_join(whd_interface_t ifp, -- whd_security_t security, -- const uint8_t *security_key, -- uint8_t key_length, -- cy_semaphore_t *semaphore); --static uint32_t whd_wifi_check_join_status(whd_interface_t ifp); --static void whd_wifi_active_join_deinit(whd_interface_t ifp, cy_semaphore_t *stack_semaphore, -- whd_result_t result); --static uint32_t whd_wifi_active_join_init(whd_interface_t ifp, whd_security_t auth_type, -- const uint8_t *security_key, uint8_t key_length, -- cy_semaphore_t *semaphore); -- --/** Sets the current EAPOL key timeout for the given interface -- * -- * @param interface : the interface for which we want to set the EAPOL key timeout -- * eapol_key_timeout : EAPOL key timeout value -- * -- * @return WHD_SUCCESS : if success -- * Error code : error code to indicate the type of error -- */ --static uint32_t whd_wifi_set_supplicant_key_timeout(whd_interface_t ifp, int32_t eapol_key_timeout); -- --/****************************************************** --* Function definitions --******************************************************/ --inline wl_chanspec_t whd_channel_to_wl_band(whd_driver_t whd_driver, uint32_t channel) --{ -- return ( ( (channel) <= CH_MAX_2G_CHANNEL ) ? (uint16_t)GET_C_VAR(whd_driver, CHANSPEC_BAND_2G) : -- (uint16_t)GET_C_VAR(whd_driver, CHANSPEC_BAND_5G) ); --} -- --uint32_t whd_wifi_set_up(whd_interface_t ifp) --{ -- whd_mac_t mac; -- char version[200]; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- if (whd_driver->internal_info.whd_wlan_status.state == WLAN_UP) -- { -- WPRINT_WHD_INFO( ("whd_wifi_set_up: already up.\n") ); -- return WHD_SUCCESS; -- } -- -- /* Send UP command */ -- CHECK_RETURN(whd_wifi_set_ioctl_buffer(ifp, WLC_UP, NULL, 0) ); -- -- if (whd_wifi_get_mac_address(ifp, &mac) == WHD_SUCCESS) -- { -- WPRINT_MACRO( ("WLAN MAC Address : %02X:%02X:%02X:%02X:%02X:%02X\n", mac.octet[0], mac.octet[1], mac.octet[2], -- mac.octet[3], mac.octet[4], mac.octet[5]) ); -- } -- -- if (whd_wifi_get_wifi_version(ifp, version, sizeof(version) ) == WHD_SUCCESS) -- { -- WPRINT_MACRO( ("WLAN Firmware : %s", version) ); -- } -- -- /* minimize bootloader usage and start time from UART output */ -- if (whd_wifi_get_clm_version(ifp, version, sizeof(version) ) == WHD_SUCCESS) -- { -- WPRINT_MACRO( ("WLAN CLM : %s\n", version) ); -- } -- -- WPRINT_MACRO( ("WHD VERSION : " WHD_VERSION) ); -- WPRINT_MACRO( (" : " WHD_BRANCH) ); --#if defined(__ARMCC_VERSION) -- WPRINT_MACRO( (" : ARM CLANG %u", __ARMCC_VERSION) ); --#elif defined(__ICCARM__) -- WPRINT_MACRO( (" : IAR %u", __VER__) ); --#elif defined(__GNUC__) -- WPRINT_MACRO( (" : GCC %u.%u", __GNUC__, __GNUC_MINOR__) ); --#else -- WPRINT_MACRO( (" : UNKNOWN CC") ); --#endif -- WPRINT_MACRO( (" : " WHD_DATE "\n") ); -- -- /* Update wlan status */ -- whd_driver->internal_info.whd_wlan_status.state = WLAN_UP; -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_down(whd_interface_t ifp) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- -- if (whd_driver->internal_info.whd_wlan_status.state != WLAN_UP) -- { -- WPRINT_WHD_INFO( ("whd_wifi_set_down: already down.\n") ); -- return WHD_INTERFACE_NOT_UP; -- } -- -- /* Send DOWN command */ -- CHECK_RETURN(whd_wifi_set_ioctl_buffer(ifp, WLC_DOWN, NULL, 0) ); -- -- /* Update wlan status */ -- whd_driver->internal_info.whd_wlan_status.state = WLAN_DOWN; -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_channel(whd_interface_t ifp, uint32_t channel) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- wl_chan_switch_t *chan_switch; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* Map P2P interface to either STA or AP interface depending if it's running as group owner or client */ -- if (ifp->role == WHD_P2P_ROLE) -- { -- if (whd_driver->internal_info.whd_wifi_p2p_go_is_up == WHD_TRUE) -- { -- ifp->role = WHD_AP_ROLE; -- } -- else -- { -- ifp->role = WHD_STA_ROLE; -- } -- } -- -- switch (ifp->role) -- { -- case WHD_STA_ROLE: -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(uint32_t) ); -- CHECK_IOCTL_BUFFER(data); -- *data = htod32(channel); -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_GET, WLC_SET_CHANNEL, buffer, NULL) ); -- break; -- -- case WHD_AP_ROLE: -- chan_switch = (wl_chan_switch_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(wl_chan_switch_t), -- IOVAR_STR_CSA); -- CHECK_IOCTL_BUFFER(chan_switch); -- chan_switch->chspec = -- ( wl_chanspec_t )(GET_C_VAR(whd_driver, -- CHANSPEC_BW_20) | GET_C_VAR(whd_driver, CHANSPEC_CTL_SB_NONE) | channel); -- chan_switch->chspec |= whd_channel_to_wl_band(whd_driver, channel); -- chan_switch->chspec = htod16(chan_switch->chspec); -- chan_switch->count = 1; -- chan_switch->mode = 1; -- chan_switch->reg = 0; -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0) ); -- break; -- case WHD_P2P_ROLE: -- case WHD_INVALID_ROLE: -- default: -- whd_assert("Bad interface", 0 != 0); -- return WHD_UNKNOWN_INTERFACE; -- } -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_channel(whd_interface_t ifp, uint32_t *channel) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- channel_info_t *channel_info; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- if (channel == NULL) -- return WHD_BADARG; -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- CHECK_IOCTL_BUFFER(whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(channel_info_t) ) ); -- -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_GET, WLC_GET_CHANNEL, buffer, &response) ); -- -- channel_info = (channel_info_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- *channel = (uint32_t)channel_info->hw_channel; -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_enable_supplicant(whd_interface_t ifp, whd_security_t auth_type) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- uint32_t bss_index = 0; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* Map the interface to a BSS index */ -- bss_index = ifp->bsscfgidx; -- -- /* Set supplicant variable - mfg app doesn't support these iovars, so don't care if return fails */ -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_SUP_WPA); -- CHECK_IOCTL_BUFFER(data); -- data[0] = bss_index; -- data[1] = (uint32_t)( ( ( (auth_type & WPA_SECURITY) != 0 ) || -- ( (auth_type & WPA2_SECURITY) != 0 ) || -- (auth_type & WPA3_SECURITY) != 0 ) ? 1 : 0 ); -- (void)whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_supplicant_key_timeout(whd_interface_t ifp, int32_t eapol_key_timeout) --{ -- whd_buffer_t buffer; -- int32_t *data; -- uint32_t bss_index = 0; -- whd_driver_t whd_driver = (whd_driver_t)ifp->whd_driver; -- -- /* Map the interface to a BSS index */ -- bss_index = ifp->bsscfgidx; -- -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_SUP_WPA_TMO); -- CHECK_IOCTL_BUFFER(data); -- data[0] = (int32_t)bss_index; -- data[1] = eapol_key_timeout; -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_passphrase(whd_interface_t ifp, const uint8_t *security_key, uint8_t key_length) --{ -- whd_buffer_t buffer; -- whd_driver_t whd_driver; -- wsec_pmk_t *psk; -- -- if (!ifp || !security_key) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- whd_driver = ifp->whd_driver; -- CHECK_DRIVER_NULL(whd_driver); -- -- psk = (wsec_pmk_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(wsec_pmk_t) ); -- CHECK_IOCTL_BUFFER(psk); -- -- memset(psk, 0, sizeof(wsec_pmk_t) ); -- memcpy(psk->key, security_key, key_length); -- psk->key_len = htod16(key_length); -- psk->flags = htod16( (uint16_t)WSEC_PASSPHRASE ); -- -- /* Delay required to allow radio firmware to be ready to receive PMK and avoid intermittent failure */ -- CHECK_RETURN(cy_rtos_delay_milliseconds(1) ); -- -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_WSEC_PMK, buffer, 0) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_sae_password(whd_interface_t ifp, const uint8_t *security_key, uint8_t key_length) --{ -- whd_buffer_t buffer; -- whd_driver_t whd_driver; -- wsec_sae_password_t *sae_password; -- -- if (!ifp || !security_key) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- whd_driver = ifp->whd_driver; -- CHECK_DRIVER_NULL(whd_driver); -- -- sae_password = (wsec_sae_password_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, -- sizeof(wsec_sae_password_t), -- IOVAR_STR_SAE_PASSWORD); -- CHECK_IOCTL_BUFFER(sae_password); -- memset(sae_password, 0, sizeof(wsec_sae_password_t) ); -- memcpy(sae_password->password, security_key, key_length); -- sae_password->password_len = htod16(key_length); -- /* Delay required to allow radio firmware to be ready to receive PMK and avoid intermittent failure */ -- cy_rtos_delay_milliseconds(1); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_enable_sup_set_passphrase(whd_interface_t ifp, const uint8_t *security_key_psk, uint8_t psk_length, -- whd_security_t auth_type) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- uint32_t bss_index = 0; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- if ( (psk_length > (uint8_t)WSEC_MAX_PSK_LEN) || -- (psk_length < (uint8_t)WSEC_MIN_PSK_LEN) ) -- { -- return WHD_INVALID_KEY; -- } -- -- /* Map the interface to a BSS index */ -- bss_index = ifp->bsscfgidx; -- -- /* Set supplicant variable - mfg app doesn't support these iovars, so don't care if return fails */ -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_SUP_WPA); -- CHECK_IOCTL_BUFFER(data); -- data[0] = bss_index; -- data[1] = (uint32_t)( ( ( (auth_type & WPA_SECURITY) != 0 ) || -- ( (auth_type & WPA2_SECURITY) != 0 ) || -- (auth_type & WPA3_SECURITY) != 0 ) ? 1 : 0 ); -- (void)whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- -- CHECK_RETURN(whd_wifi_set_passphrase(ifp, security_key_psk, psk_length) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_rssi(whd_interface_t ifp, int32_t *rssi) --{ -- CHECK_IFP_NULL(ifp); -- -- if (rssi == NULL) -- return WHD_BADARG; -- if (ifp->role == WHD_STA_ROLE) -- { -- return whd_wifi_get_ioctl_buffer(ifp, WLC_GET_RSSI, (uint8_t *)rssi, sizeof(*rssi) ); -- } -- return WHD_BADARG; --} -- --uint32_t whd_wifi_get_ap_client_rssi(whd_interface_t ifp, int32_t *rssi, const whd_mac_t *client_mac) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- client_rssi_t *client_rssi; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- /* WLAN expects buffer size to be 4-byte aligned */ -- client_rssi = -- (client_rssi_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, ROUND_UP(sizeof(client_rssi_t), -- sizeof(uint32_t) ) ); -- CHECK_IOCTL_BUFFER(client_rssi); -- -- memcpy(&client_rssi->macs, client_mac, sizeof(*client_mac) ); -- client_rssi->rssi = 0; -- -- CHECK_RETURN_UNSUPPORTED_OK(whd_cdc_send_ioctl(ifp, CDC_GET, WLC_GET_RSSI, buffer, &response) ); -- -- memcpy(rssi, whd_buffer_get_current_piece_data_pointer(whd_driver, response), sizeof(int32_t) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- return WHD_SUCCESS; --} -- --/** Callback for join events -- * This is called when the WLC_E_SET_SSID event is received, -- * indicating that the system has joined successfully. -- * Wakes the thread which was doing the join, allowing it to resume. -- */ --static void *whd_wifi_join_events_handler(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, -- void *handler_user_data) --{ -- cy_semaphore_t *semaphore = (cy_semaphore_t *)handler_user_data; -- whd_bool_t join_attempt_complete = WHD_FALSE; -- whd_driver_t whd_driver = ifp->whd_driver; -- whd_result_t result; -- -- UNUSED_PARAMETER(event_data); -- -- if (event_header->bsscfgidx >= WHD_INTERFACE_MAX) -- { -- WPRINT_WHD_DEBUG( ("%s: event_header: Bad interface\n", __FUNCTION__) ); -- return NULL; -- } -- -- switch (event_header->event_type) -- { -- case WLC_E_PSK_SUP: -- /* Ignore WLC_E_PSK_SUP event if link is not up */ -- if ( (whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] & JOIN_LINK_READY) != 0 ) -- { -- if (event_header->status == WLC_SUP_KEYED) -- { -- /* Successful WPA key exchange */ -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] &= ~JOIN_SECURITY_FLAGS_MASK; -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_SECURITY_COMPLETE; -- } -- else -- { -- /* join has completed with an error */ -- join_attempt_complete = WHD_TRUE; -- if ( (event_header->status == WLC_SUP_KEYXCHANGE_WAIT_M1) && -- (event_header->reason == WLC_E_SUP_WPA_PSK_TMO) ) -- { -- /* A timeout waiting for M1 may occur at the edge of the cell or if the AP is particularly slow. */ -- WPRINT_WHD_DEBUG( ("Supplicant M1 timeout event\n") ); -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_EAPOL_KEY_M1_TIMEOUT; -- } -- else if ( (event_header->status == WLC_SUP_KEYXCHANGE_WAIT_M3) && -- (event_header->reason == WLC_E_SUP_WPA_PSK_TMO) ) -- { -- /* A timeout waiting for M3 is an indicator that the passphrase may be incorrect. */ -- WPRINT_WHD_DEBUG( ("Supplicant M3 timeout event\n") ); -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_EAPOL_KEY_M3_TIMEOUT; -- } -- else if ( (event_header->status == WLC_SUP_KEYXCHANGE_WAIT_G1) && -- (event_header->reason == WLC_E_SUP_WPA_PSK_TMO) ) -- { -- /* A timeout waiting for G1 (group key) may occur at the edge of the cell. */ -- WPRINT_WHD_DEBUG( ("Supplicant G1 timeout event\n") ); -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_EAPOL_KEY_G1_TIMEOUT; -- } -- else -- { -- WPRINT_WHD_DEBUG( ("Unsuccessful supplicant event; status=0x%" PRIu32 "\n", -- event_header->status) ); -- /* Unknown failure during EAPOL key handshake */ -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_EAPOL_KEY_FAILURE; -- } -- } -- } -- break; -- -- case WLC_E_SET_SSID: -- if (event_header->status == WLC_E_STATUS_SUCCESS) -- { -- /* SSID has been successfully set. */ -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_SSID_SET; -- } -- /* We don't bail out on this event or things like WPS won't work if the AP is rebooting after configuration */ -- else if (event_header->status == WLC_E_STATUS_NO_NETWORKS) -- { -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_NO_NETWORKS; -- } -- else -- { -- join_attempt_complete = WHD_TRUE; -- } -- break; -- -- case WLC_E_LINK: -- if ( (event_header->flags & WLC_EVENT_MSG_LINK) != 0 ) -- { -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_LINK_READY; -- } -- else -- { -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] &= ~JOIN_LINK_READY; -- } -- break; -- -- case WLC_E_DEAUTH_IND: -- case WLC_E_DISASSOC_IND: -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] &= -- ~(JOIN_AUTHENTICATED | JOIN_LINK_READY); -- break; -- -- case WLC_E_AUTH: -- if (event_header->status == WLC_E_STATUS_SUCCESS) -- { -- whd_driver->internal_info.whd_join_status[event_header->bsscfgidx] |= JOIN_AUTHENTICATED; -- } -- else if (event_header->status == WLC_E_STATUS_UNSOLICITED) -- { -- WPRINT_WHD_DEBUG( ("Ignore UNSOLICITED pkt event\n") ); -- } -- else -- { -- /* We cannot authenticate. Perhaps we're blocked or at the edge of a cell. */ -- join_attempt_complete = WHD_TRUE; -- } -- break; -- -- case WLC_E_CSA_COMPLETE_IND: -- if (event_header->datalen >= sizeof(wl_chan_switch_t) ) -- { -- wl_chan_switch_t *wl_csa = (wl_chan_switch_t *)event_data; -- UNUSED_PARAMETER(wl_csa); -- WPRINT_WHD_INFO( ("CSA event => chan %d\n", (dtoh16(wl_csa->chspec) & 0xff) ) ); -- } -- break; -- -- /* Note - These are listed to keep gcc pedantic checking happy */ -- case WLC_E_RRM: -- case WLC_E_NONE: -- case WLC_E_ROAM: -- case WLC_E_JOIN: -- case WLC_E_START: -- case WLC_E_AUTH_IND: -- case WLC_E_DEAUTH: -- case WLC_E_ASSOC: -- case WLC_E_ASSOC_IND: -- case WLC_E_REASSOC: -- case WLC_E_REASSOC_IND: -- case WLC_E_DISASSOC: -- case WLC_E_QUIET_START: -- case WLC_E_QUIET_END: -- case WLC_E_BEACON_RX: -- case WLC_E_MIC_ERROR: -- case WLC_E_NDIS_LINK: -- case WLC_E_TXFAIL: -- case WLC_E_PMKID_CACHE: -- case WLC_E_RETROGRADE_TSF: -- case WLC_E_PRUNE: -- case WLC_E_AUTOAUTH: -- case WLC_E_EAPOL_MSG: -- case WLC_E_SCAN_COMPLETE: -- case WLC_E_ADDTS_IND: -- case WLC_E_DELTS_IND: -- case WLC_E_BCNSENT_IND: -- case WLC_E_BCNRX_MSG: -- case WLC_E_BCNLOST_MSG: -- case WLC_E_ROAM_PREP: -- case WLC_E_PFN_NET_FOUND: -- case WLC_E_PFN_NET_LOST: -- case WLC_E_RESET_COMPLETE: -- case WLC_E_JOIN_START: -- case WLC_E_ROAM_START: -- case WLC_E_ASSOC_START: -- case WLC_E_IBSS_ASSOC: -- case WLC_E_RADIO: -- case WLC_E_PSM_WATCHDOG: -- case WLC_E_CCX_ASSOC_START: -- case WLC_E_CCX_ASSOC_ABORT: -- case WLC_E_PROBREQ_MSG: -- case WLC_E_SCAN_CONFIRM_IND: -- case WLC_E_COUNTRY_CODE_CHANGED: -- case WLC_E_EXCEEDED_MEDIUM_TIME: -- case WLC_E_ICV_ERROR: -- case WLC_E_UNICAST_DECODE_ERROR: -- case WLC_E_MULTICAST_DECODE_ERROR: -- case WLC_E_TRACE: -- case WLC_E_BTA_HCI_EVENT: -- case WLC_E_IF: -- case WLC_E_PFN_BEST_BATCHING: -- case WLC_E_RSSI: -- case WLC_E_EXTLOG_MSG: -- case WLC_E_ACTION_FRAME: -- case WLC_E_ACTION_FRAME_COMPLETE: -- case WLC_E_PRE_ASSOC_IND: -- case WLC_E_PRE_REASSOC_IND: -- case WLC_E_CHANNEL_ADOPTED: -- case WLC_E_AP_STARTED: -- case WLC_E_DFS_AP_STOP: -- case WLC_E_DFS_AP_RESUME: -- case WLC_E_WAI_STA_EVENT: -- case WLC_E_WAI_MSG: -- case WLC_E_ESCAN_RESULT: -- case WLC_E_ACTION_FRAME_OFF_CHAN_COMPLETE: -- case WLC_E_PROBRESP_MSG: -- case WLC_E_P2P_PROBREQ_MSG: -- case WLC_E_DCS_REQUEST: -- case WLC_E_FIFO_CREDIT_MAP: -- case WLC_E_ACTION_FRAME_RX: -- case WLC_E_WAKE_EVENT: -- case WLC_E_RM_COMPLETE: -- case WLC_E_HTSFSYNC: -- case WLC_E_OVERLAY_REQ: -- case WLC_E_EXCESS_PM_WAKE_EVENT: -- case WLC_E_PFN_SCAN_NONE: -- case WLC_E_PFN_SCAN_ALLGONE: -- case WLC_E_GTK_PLUMBED: -- case WLC_E_ASSOC_IND_NDIS: -- case WLC_E_REASSOC_IND_NDIS: -- case WLC_E_ASSOC_REQ_IE: -- case WLC_E_ASSOC_RESP_IE: -- case WLC_E_ASSOC_RECREATED: -- case WLC_E_ACTION_FRAME_RX_NDIS: -- case WLC_E_AUTH_REQ: -- case WLC_E_TDLS_PEER_EVENT: -- case WLC_E_SPEEDY_RECREATE_FAIL: -- case WLC_E_NATIVE: -- case WLC_E_PKTDELAY_IND: -- case WLC_E_AWDL_AW: -- case WLC_E_AWDL_ROLE: -- case WLC_E_AWDL_EVENT: -- case WLC_E_NIC_AF_TXS: -- case WLC_E_NAN: -- case WLC_E_BEACON_FRAME_RX: -- case WLC_E_SERVICE_FOUND: -- case WLC_E_GAS_FRAGMENT_RX: -- case WLC_E_GAS_COMPLETE: -- case WLC_E_P2PO_ADD_DEVICE: -- case WLC_E_P2PO_DEL_DEVICE: -- case WLC_E_WNM_STA_SLEEP: -- case WLC_E_TXFAIL_THRESH: -- case WLC_E_PROXD: -- case WLC_E_IBSS_COALESCE: -- case WLC_E_AWDL_RX_PRB_RESP: -- case WLC_E_AWDL_RX_ACT_FRAME: -- case WLC_E_AWDL_WOWL_NULLPKT: -- case WLC_E_AWDL_PHYCAL_STATUS: -- case WLC_E_AWDL_OOB_AF_STATUS: -- case WLC_E_AWDL_SCAN_STATUS: -- case WLC_E_AWDL_AW_START: -- case WLC_E_AWDL_AW_END: -- case WLC_E_AWDL_AW_EXT: -- case WLC_E_AWDL_PEER_CACHE_CONTROL: -- case WLC_E_CSA_START_IND: -- case WLC_E_CSA_DONE_IND: -- case WLC_E_CSA_FAILURE_IND: -- case WLC_E_CCA_CHAN_QUAL: -- case WLC_E_BSSID: -- case WLC_E_TX_STAT_ERROR: -- case WLC_E_BCMC_CREDIT_SUPPORT: -- case WLC_E_PSTA_PRIMARY_INTF_IND: -- case WLC_E_P2P_DISC_LISTEN_COMPLETE: -- case WLC_E_BT_WIFI_HANDOVER_REQ: -- case WLC_E_SPW_TXINHIBIT: -- case WLC_E_FBT_AUTH_REQ_IND: -- case WLC_E_RSSI_LQM: -- case WLC_E_PFN_GSCAN_FULL_RESULT: -- case WLC_E_PFN_SWC: -- case WLC_E_AUTHORIZED: -- case WLC_E_PROBREQ_MSG_RX: -- case WLC_E_PFN_SCAN_COMPLETE: -- case WLC_E_RMC_EVENT: -- case WLC_E_DPSTA_INTF_IND: -- case WLC_E_ULP: -- case WLC_E_LAST: -- default: -- whd_assert("Received event which was not registered\n", 0 != 0); -- break; -- } -- -- if (whd_wifi_is_ready_to_transceive(ifp) == WHD_SUCCESS) -- { -- join_attempt_complete = WHD_TRUE; -- } -- -- if (join_attempt_complete == WHD_TRUE) -- { -- if (semaphore != NULL) -- { -- result = cy_rtos_get_semaphore(&whd_driver->internal_info.active_join_mutex, CY_RTOS_NEVER_TIMEOUT, -- WHD_FALSE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Get semaphore failed in %s at %d \n", __func__, __LINE__) ); -- } -- if (whd_driver->internal_info.active_join_semaphore != NULL) -- { -- whd_assert("Unexpected semaphore\n", whd_driver->internal_info.active_join_semaphore == semaphore); -- result = cy_rtos_set_semaphore(whd_driver->internal_info.active_join_semaphore, WHD_FALSE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Set semaphore failed in %s at %d \n", __func__, __LINE__) ); -- } -- } -- result = cy_rtos_set_semaphore(&whd_driver->internal_info.active_join_mutex, WHD_FALSE); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Set semaphore failed in %s at %d \n", __func__, __LINE__) ); -- } -- } -- return NULL; -- } -- else -- { -- return handler_user_data; -- } --} -- --/* Do any needed preparation prior to launching a join */ --static uint32_t whd_wifi_active_join_init(whd_interface_t ifp, whd_security_t auth_type, const uint8_t *security_key, -- uint8_t key_length, cy_semaphore_t *semaphore) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- -- if (whd_driver->internal_info.active_join_mutex_initted == WHD_FALSE) -- { -- CHECK_RETURN(cy_rtos_init_semaphore(&whd_driver->internal_info.active_join_mutex, 1, 0) ); -- whd_driver->internal_info.active_join_mutex_initted = WHD_TRUE; -- CHECK_RETURN(cy_rtos_set_semaphore(&whd_driver->internal_info.active_join_mutex, WHD_FALSE) ); -- } -- -- CHECK_RETURN(cy_rtos_get_semaphore(&whd_driver->internal_info.active_join_mutex, CY_RTOS_NEVER_TIMEOUT, -- WHD_FALSE) ); -- whd_driver->internal_info.active_join_semaphore = semaphore; -- CHECK_RETURN(cy_rtos_set_semaphore(&whd_driver->internal_info.active_join_mutex, WHD_FALSE) ); -- -- CHECK_RETURN(whd_wifi_prepare_join(ifp, auth_type, security_key, key_length, semaphore) ); -- return WHD_SUCCESS; --} -- --static uint32_t whd_wifi_prepare_join(whd_interface_t ifp, whd_security_t auth_type, -- const uint8_t *security_key, uint8_t key_length, -- cy_semaphore_t *semaphore) --{ -- whd_buffer_t buffer; -- uint32_t auth_mfp = WL_MFP_NONE; -- whd_result_t retval = WHD_SUCCESS; -- whd_result_t check_result = WHD_SUCCESS; -- uint16_t a; -- uint32_t *data; -- uint32_t *wpa_auth; -- uint32_t bss_index = 0; -- uint32_t auth; -- whd_driver_t whd_driver = ifp->whd_driver; -- uint16_t event_entry = 0xFF; -- -- (void)bss_index; -- if ( (auth_type == WHD_SECURITY_WPA2_FBT_ENT) || (auth_type == WHD_SECURITY_IBSS_OPEN) || -- (auth_type == WHD_SECURITY_WPA2_FBT_PSK) ) -- { -- return WHD_UNKNOWN_SECURITY_TYPE; -- } -- if ( ( ( (key_length > (uint8_t)WSEC_MAX_PSK_LEN) || (key_length < (uint8_t)WSEC_MIN_PSK_LEN) ) && -- ( (auth_type == WHD_SECURITY_WPA_TKIP_PSK) || (auth_type == WHD_SECURITY_WPA_AES_PSK) || -- (auth_type == WHD_SECURITY_WPA2_AES_PSK) || (auth_type == WHD_SECURITY_WPA2_TKIP_PSK) || -- (auth_type == WHD_SECURITY_WPA2_MIXED_PSK) ) ) || -- ( (key_length > (uint8_t)WSEC_MAX_SAE_PASSWORD_LEN) && -- ( (auth_type == WHD_SECURITY_WPA3_SAE) || (auth_type == WHD_SECURITY_WPA3_WPA2_PSK) ) ) ) -- { -- return WHD_INVALID_KEY; -- } -- -- (void)auth_type, (void)security_key, (void)key_length, (void)semaphore; -- -- /* Clear the current join status */ -- whd_driver->internal_info.whd_join_status[ifp->bsscfgidx] = 0; -- -- /* Setting wsec will overwrite mfp setting in older branches, store value before setting wsec */ -- CHECK_RETURN(whd_wifi_get_iovar_value(ifp, IOVAR_STR_MFP, &auth_mfp) ); -- -- /* Set Wireless Security Type */ -- CHECK_RETURN(whd_wifi_set_ioctl_value(ifp, WLC_SET_WSEC, (uint32_t)(auth_type & 0xFF) ) ); -- -- /* Map the interface to a BSS index */ -- bss_index = ifp->bsscfgidx; -- -- /* Set supplicant variable - mfg app doesn't support these iovars, so don't care if return fails */ -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_SUP_WPA); -- CHECK_IOCTL_BUFFER(data); -- data[0] = htod32(bss_index); -- data[1] = -- htod32( ( uint32_t )( ( ( (auth_type & WPA_SECURITY) != 0 ) || ( (auth_type & WPA2_SECURITY) != 0 ) || -- (auth_type & WPA3_SECURITY) != 0 ) ? 1 : 0 ) ); -- (void)whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- -- /* Set the EAPOL version to whatever the AP is using (-1) */ -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)8, "bsscfg:" IOVAR_STR_SUP_WPA2_EAPVER); -- CHECK_IOCTL_BUFFER(data); -- data[0] = htod32(bss_index); -- data[1] = htod32( ( uint32_t )-1 ); -- (void)whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- -- /* Send WPA Key */ -- switch (auth_type) -- { -- case WHD_SECURITY_OPEN: -- case WHD_SECURITY_WPS_SECURE: -- break; -- -- case WHD_SECURITY_WPA_TKIP_PSK: -- case WHD_SECURITY_WPA_AES_PSK: -- case WHD_SECURITY_WPA_MIXED_PSK: -- case WHD_SECURITY_WPA2_AES_PSK: -- case WHD_SECURITY_WPA2_TKIP_PSK: -- case WHD_SECURITY_WPA2_MIXED_PSK: -- case WHD_SECURITY_WPA2_WPA_AES_PSK: -- case WHD_SECURITY_WPA2_WPA_MIXED_PSK: -- /* Set the EAPOL key packet timeout value, otherwise unsuccessful supplicant events aren't reported. If the IOVAR is unsupported then continue. */ -- CHECK_RETURN_UNSUPPORTED_CONTINUE(whd_wifi_set_supplicant_key_timeout(ifp, -- DEFAULT_EAPOL_KEY_PACKET_TIMEOUT) ); -- CHECK_RETURN(whd_wifi_set_passphrase(ifp, security_key, key_length) ); -- break; -- -- case WHD_SECURITY_WPA3_SAE: -- case WHD_SECURITY_WPA3_WPA2_PSK: -- /* Set the EAPOL key packet timeout value, otherwise unsuccessful supplicant events aren't reported. If the IOVAR is unsupported then continue. */ -- CHECK_RETURN_UNSUPPORTED_CONTINUE(whd_wifi_set_supplicant_key_timeout(ifp, -- DEFAULT_EAPOL_KEY_PACKET_TIMEOUT) ); -- CHECK_RETURN(whd_wifi_sae_password(ifp, security_key, key_length) ); -- break; -- -- case WHD_SECURITY_WPA_TKIP_ENT: -- case WHD_SECURITY_WPA_AES_ENT: -- case WHD_SECURITY_WPA_MIXED_ENT: -- case WHD_SECURITY_WPA2_TKIP_ENT: -- case WHD_SECURITY_WPA2_AES_ENT: -- case WHD_SECURITY_WPA2_MIXED_ENT: --#if 0 -- case WHD_SECURITY_WPA2_FBT_ENT: -- /* Disable eapol timer by setting to value 0 */ -- CHECK_RETURN_UNSUPPORTED_CONTINUE(whd_wifi_set_supplicant_key_timeout(ifp, 0) ); -- break; --#endif -- case WHD_SECURITY_WEP_PSK: -- case WHD_SECURITY_WEP_SHARED: -- for (a = 0; a < key_length; a = ( uint16_t )(a + 2 + security_key[1]) ) -- { -- const whd_wep_key_t *in_key = (const whd_wep_key_t *)&security_key[a]; -- wl_wsec_key_t *out_key = -- (wl_wsec_key_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(wl_wsec_key_t) ); -- CHECK_IOCTL_BUFFER(out_key); -- memset(out_key, 0, sizeof(wl_wsec_key_t) ); -- out_key->index = in_key->index; -- out_key->len = in_key->length; -- memcpy(out_key->data, in_key->data, in_key->length); -- switch (in_key->length) -- { -- case 5: -- out_key->algo = (uint32_t)CRYPTO_ALGO_WEP1; -- break; -- -- case 13: -- out_key->algo = (uint32_t)CRYPTO_ALGO_WEP128; -- break; -- -- case 16: -- /* default to AES-CCM */ -- out_key->algo = (uint32_t)CRYPTO_ALGO_AES_CCM; -- break; -- -- case 32: -- out_key->algo = (uint32_t)CRYPTO_ALGO_TKIP; -- break; -- -- default: -- CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) ); -- return WHD_INVALID_KEY; -- } -- /* Set the first entry as primary key by default */ -- if (a == 0) -- { -- out_key->flags |= WL_PRIMARY_KEY; -- } -- out_key->index = htod32(out_key->index); -- out_key->len = htod32(out_key->len); -- out_key->algo = htod32(out_key->algo); -- out_key->flags = htod32(out_key->flags); -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_KEY, buffer, NULL) ); -- } -- break; -- -- case WHD_SECURITY_FORCE_32_BIT: -- case WHD_SECURITY_UNKNOWN: -- default: -- whd_assert("whd_wifi_prepare_join: Unsupported security type\n", 0 != 0); -- break; -- } -- /* Set infrastructure mode */ -- CHECK_RETURN(whd_wifi_set_ioctl_value(ifp, WLC_SET_INFRA, ( (auth_type & IBSS_ENABLED) == 0 ) ? 1 : 0) ); -- -- /* Set authentication type */ -- if (auth_type == WHD_SECURITY_WEP_SHARED) -- { -- auth = WL_AUTH_SHARED_KEY; -- } -- else if ( (auth_type == WHD_SECURITY_WPA3_SAE) || (auth_type == WHD_SECURITY_WPA3_WPA2_PSK) ) -- { -- auth = WL_AUTH_SAE; -- } -- else -- { -- auth = WL_AUTH_OPEN_SYSTEM; -- } -- CHECK_RETURN(whd_wifi_set_ioctl_value(ifp, WLC_SET_AUTH, auth) ); -- -- /* From PMF cert test plan, -- * 2.2 Out of Box Requirements -- * When WPA2 security is enabled on the DUT, then by defaults the DUT shall: -- * Enable Robust Management Frame Protection Capable (MFPC) functionality -- */ -- if ( (auth_type == WHD_SECURITY_WPA3_SAE) || (auth_type == WHD_SECURITY_WPA3_WPA2_PSK) || -- auth_type & WPA2_SECURITY ) -- { -- auth_mfp = WL_MFP_CAPABLE; -- } -- -- check_result = whd_wifi_set_iovar_value(ifp, IOVAR_STR_MFP, auth_mfp); -- if (check_result != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("Older chipsets might not support MFP..Ignore result\n") ); -- } -- -- /* Set WPA authentication mode */ -- wpa_auth = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- CHECK_IOCTL_BUFFER(wpa_auth); -- -- switch (auth_type) -- { --#if 0 -- case WHD_SECURITY_IBSS_OPEN: -- /* IBSS does not get authenticated onto an AP */ -- whd_driver->internal_info.whd_join_status[ifp->bsscfgidx] |= JOIN_AUTHENTICATED; --#endif -- /* intentional fall-thru */ -- /* Disables Eclipse static analysis warning */ -- /* no break */ -- /* Fall-Through */ -- case WHD_SECURITY_OPEN: -- case WHD_SECURITY_WPS_SECURE: -- *wpa_auth = WPA_AUTH_DISABLED; -- /* Open Networks do not have to complete security */ -- whd_driver->internal_info.whd_join_status[ifp->bsscfgidx] |= JOIN_SECURITY_COMPLETE; -- break; -- -- case WHD_SECURITY_WPA_TKIP_PSK: -- case WHD_SECURITY_WPA_AES_PSK: -- case WHD_SECURITY_WPA_MIXED_PSK: -- *wpa_auth = (uint32_t)WPA_AUTH_PSK; -- break; -- -- case WHD_SECURITY_WPA2_AES_PSK: -- case WHD_SECURITY_WPA2_TKIP_PSK: -- case WHD_SECURITY_WPA2_MIXED_PSK: -- case WHD_SECURITY_WPA2_WPA_AES_PSK: -- case WHD_SECURITY_WPA2_WPA_MIXED_PSK: -- *wpa_auth = (uint32_t)WPA2_AUTH_PSK; -- break; -- -- case WHD_SECURITY_WPA3_SAE: -- case WHD_SECURITY_WPA3_WPA2_PSK: -- *wpa_auth = (uint32_t)WPA3_AUTH_SAE_PSK; -- break; -- -- case WHD_SECURITY_WPA_TKIP_ENT: -- case WHD_SECURITY_WPA_AES_ENT: -- case WHD_SECURITY_WPA_MIXED_ENT: -- *wpa_auth = (uint32_t)WPA_AUTH_UNSPECIFIED; -- break; -- -- case WHD_SECURITY_WPA2_TKIP_ENT: -- case WHD_SECURITY_WPA2_AES_ENT: -- case WHD_SECURITY_WPA2_MIXED_ENT: -- *wpa_auth = (uint32_t)WPA2_AUTH_UNSPECIFIED; -- break; --#if 0 -- case WHD_SECURITY_WPA2_FBT_ENT: -- *wpa_auth = ( uint32_t )(WPA2_AUTH_UNSPECIFIED | WPA2_AUTH_FT); -- break; --#endif -- case WHD_SECURITY_WEP_PSK: -- case WHD_SECURITY_WEP_SHARED: -- *wpa_auth = WPA_AUTH_DISABLED; -- whd_driver->internal_info.whd_join_status[ifp->bsscfgidx] |= JOIN_SECURITY_COMPLETE; -- break; -- -- case WHD_SECURITY_UNKNOWN: -- case WHD_SECURITY_FORCE_32_BIT: -- default: -- WPRINT_WHD_DEBUG( ("Unsupported Security type\n") ); -- *wpa_auth = WPA_AUTH_DISABLED; -- break; -- } -- *wpa_auth = htod32(*wpa_auth); -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_WPA_AUTH, buffer, 0) ); -- -- if (ifp->event_reg_list[WHD_JOIN_EVENT_ENTRY] != WHD_EVENT_NOT_REGISTERED) -- { -- whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_JOIN_EVENT_ENTRY]); -- ifp->event_reg_list[WHD_JOIN_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED; -- } -- -- CHECK_RETURN(whd_management_set_event_handler(ifp, join_events, whd_wifi_join_events_handler, (void *)semaphore, -- &event_entry) ); -- if (event_entry >= WHD_EVENT_ENTRY_MAX) -- { -- WPRINT_WHD_ERROR( ("Join events registration failed in function %s and line %d", __func__, __LINE__) ); -- return WHD_UNFINISHED; -- } -- ifp->event_reg_list[WHD_JOIN_EVENT_ENTRY] = event_entry; -- whd_assert("Set join Event handler failed\n", retval == WHD_SUCCESS); -- -- return WHD_SUCCESS; --} -- --/* do any needed tear down after join -- * @param stack_semaphore - semaphore used to control execution if client_semaphore is NULL -- * @param client_semaphore - semaphore used to control execution if client passes this in -- */ --static void whd_wifi_active_join_deinit(whd_interface_t ifp, cy_semaphore_t *stack_semaphore, whd_result_t result) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- whd_result_t val; -- /* deinit join specific variables, with protection from mutex */ -- -- val = cy_rtos_get_semaphore(&whd_driver->internal_info.active_join_mutex, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE); -- if (val != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Get semaphore failed in %s at %d \n", __func__, __LINE__) ); -- -- whd_driver->internal_info.active_join_semaphore = NULL; -- -- cy_rtos_deinit_semaphore(stack_semaphore); -- -- if (WHD_SUCCESS != result) -- { -- WPRINT_WHD_INFO( ("Failed join (err %" PRIu32 ")\n", result) ); -- ifp->role = WHD_INVALID_ROLE; -- } -- -- val = cy_rtos_set_semaphore(&whd_driver->internal_info.active_join_mutex, WHD_FALSE); -- if (val != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Get semaphore failed in %s at %d \n", __func__, __LINE__) ); -- -- /* we forced the chip to be up during join, now let it sleep */ -- WHD_WLAN_LET_SLEEP(whd_driver); --} -- --static uint32_t whd_wifi_join_wait_for_complete(whd_interface_t ifp, cy_semaphore_t *semaphore) --{ -- whd_result_t result; -- uint32_t start_time; -- uint32_t current_time; -- whd_bool_t done = WHD_FALSE; -- -- cy_rtos_get_time(&start_time); -- -- while (!done) -- { -- result = cy_rtos_get_semaphore(semaphore, DEFAULT_JOIN_ATTEMPT_TIMEOUT / 10, WHD_FALSE); -- whd_assert("Get semaphore failed", (result == CY_RSLT_SUCCESS) || (result == CY_RTOS_TIMEOUT) ); -- REFERENCE_DEBUG_ONLY_VARIABLE(result); -- -- result = whd_wifi_is_ready_to_transceive(ifp); -- if (result == WHD_SUCCESS) -- { -- break; -- } -- -- cy_rtos_get_time(¤t_time); -- done = (whd_bool_t)( (current_time - start_time) >= DEFAULT_JOIN_ATTEMPT_TIMEOUT ); -- } -- -- if (result != WHD_SUCCESS) -- { -- CHECK_RETURN(whd_wifi_leave(ifp) ); -- WPRINT_WHD_INFO( ("%s: not ready to transceive (err %" PRIu32 "); left network\n", __func__, result) ); -- } -- -- return result; --} -- --static uint32_t whd_wifi_check_join_status(whd_interface_t ifp) --{ -- whd_driver_t whd_driver = ifp->whd_driver; -- -- if ( (uint32_t)ifp->bsscfgidx >= WHD_INTERFACE_MAX ) -- { -- WPRINT_WHD_ERROR( ("%s: Bad interface %d\n", __FUNCTION__, ifp->bsscfgidx) ); -- return WHD_INVALID_JOIN_STATUS; -- } -- switch (whd_driver->internal_info.whd_join_status[ifp->bsscfgidx]) -- { -- case JOIN_NO_NETWORKS: -- return WHD_NETWORK_NOT_FOUND; -- -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_EAPOL_KEY_M1_TIMEOUT: -- return WHD_EAPOL_KEY_PACKET_M1_TIMEOUT; -- -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_EAPOL_KEY_M3_TIMEOUT: -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_SSID_SET | JOIN_EAPOL_KEY_M3_TIMEOUT: -- return WHD_EAPOL_KEY_PACKET_M3_TIMEOUT; -- -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_EAPOL_KEY_G1_TIMEOUT: -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_SSID_SET | JOIN_EAPOL_KEY_G1_TIMEOUT: -- return WHD_EAPOL_KEY_PACKET_G1_TIMEOUT; -- -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_EAPOL_KEY_FAILURE: -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_SSID_SET | JOIN_EAPOL_KEY_FAILURE: -- return WHD_EAPOL_KEY_FAILURE; -- -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_SSID_SET | JOIN_SECURITY_COMPLETE: -- return WHD_SUCCESS; -- -- case 0: -- case JOIN_SECURITY_COMPLETE: /* For open/WEP */ -- return WHD_NOT_AUTHENTICATED; -- -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_SECURITY_COMPLETE: -- return WHD_JOIN_IN_PROGRESS; -- -- case JOIN_AUTHENTICATED | JOIN_LINK_READY: -- case JOIN_AUTHENTICATED | JOIN_LINK_READY | JOIN_SSID_SET: -- return WHD_NOT_KEYED; -- -- default: -- return WHD_INVALID_JOIN_STATUS; -- } --} -- --uint32_t whd_wifi_join_specific(whd_interface_t ifp, const whd_scan_result_t *ap, const uint8_t *security_key, -- uint8_t key_length) --{ -- whd_buffer_t buffer; -- cy_semaphore_t join_semaphore; -- whd_result_t result; -- wl_extjoin_params_t *ext_join_params; -- wl_join_params_t *join_params; -- whd_security_t security = ap->security; -- uint16_t wl_band_for_channel = 0; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* Keep WLAN awake while joining */ -- WHD_WLAN_KEEP_AWAKE(whd_driver); -- ifp->role = WHD_STA_ROLE; -- -- if (ap->bss_type == WHD_BSS_TYPE_MESH) -- { -- return WHD_UNSUPPORTED; -- } -- -- if (ap->bss_type == WHD_BSS_TYPE_ADHOC) -- { -- security |= IBSS_ENABLED; -- } -- -- if (NULL_MAC(ap->BSSID.octet) ) -- { -- WPRINT_WHD_ERROR( ("NULL address is not allowed/valid\n") ); -- return WHD_BADARG; -- } -- -- if (BROADCAST_ID(ap->BSSID.octet) ) -- { -- WPRINT_WHD_ERROR( ("Broadcast address is not allowed/valid in join with specific BSSID of AP\n") ); -- return WHD_BADARG; -- } -- -- if ( (ap->SSID.length == 0) || (ap->SSID.length > (size_t)SSID_NAME_SIZE) ) -- { -- WPRINT_WHD_ERROR( ("%s: failure: SSID length error\n", __func__) ); -- return WHD_WLAN_BADSSIDLEN; -- } -- -- CHECK_RETURN(cy_rtos_init_semaphore(&join_semaphore, 1, 0) ); -- result = whd_wifi_active_join_init(ifp, security, security_key, key_length, &join_semaphore); -- -- if (result == WHD_SUCCESS) -- { -- /* Check if soft AP is running, if so, move its current channel to the the destination AP */ -- if ( (ifp->role == WHD_AP_ROLE) && (whd_wifi_is_ready_to_transceive(ifp) == WHD_SUCCESS) ) -- { -- uint32_t current_softap_channel = 0; -- CHECK_RETURN(whd_wifi_get_channel(ifp, ¤t_softap_channel) ); -- if (current_softap_channel != ap->channel) -- { -- CHECK_RETURN(whd_wifi_set_channel(ifp, ap->channel) ); -- WPRINT_WHD_DEBUG( ("WARN: moving soft-AP channel from %" PRIu32 " to %d due to STA join\n", -- current_softap_channel, ap->channel) ); -- cy_rtos_delay_milliseconds(100); -- } -- } -- -- else -- { -- if (ap->bss_type == WHD_BSS_TYPE_ADHOC) -- { -- CHECK_RETURN(whd_wifi_set_channel(ifp, ap->channel) ); -- } -- } -- -- /* Join network */ -- ext_join_params = -- (wl_extjoin_params_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(wl_extjoin_params_t), "join"); -- CHECK_IOCTL_BUFFER(ext_join_params); -- memset(ext_join_params, 0, sizeof(wl_extjoin_params_t) ); -- -- ext_join_params->ssid.SSID_len = ap->SSID.length; -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- memcpy(ext_join_params->ssid.SSID, ap->SSID.value, ext_join_params->ssid.SSID_len); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- memcpy(&ext_join_params->assoc_params.bssid, &ap->BSSID, sizeof(whd_mac_t) ); -- ext_join_params->scan_params.scan_type = 0; -- ext_join_params->scan_params.active_time = -1; -- ext_join_params->scan_params.home_time = -1; -- ext_join_params->scan_params.nprobes = -1; -- ext_join_params->scan_params.passive_time = -1; -- ext_join_params->assoc_params.bssid_cnt = 0; -- if (ap->channel) -- { -- ext_join_params->assoc_params.chanspec_num = (uint32_t)1; -- ext_join_params->assoc_params.chanspec_list[0] = -- (wl_chanspec_t)htod16( (ap->channel | -- GET_C_VAR(whd_driver, CHANSPEC_BW_20) | GET_C_VAR(whd_driver, -- CHANSPEC_CTL_SB_NONE) ) ); -- -- /* set band properly */ -- wl_band_for_channel = whd_channel_to_wl_band(whd_driver, ap->channel); -- -- ext_join_params->assoc_params.chanspec_list[0] |= wl_band_for_channel; -- } -- result = whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0); -- -- WPRINT_WHD_INFO( ("%s: set_ssid result (err %" PRIu32 "); left network\n", __func__, result) ); -- -- /* Some firmware, e.g. for 4390, does not support the join IOVAR, so use the older IOCTL call instead */ -- if (result == WHD_WLAN_UNSUPPORTED) -- { -- join_params = -- (wl_join_params_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(wl_join_params_t) ); -- CHECK_IOCTL_BUFFER(join_params); -- memset(join_params, 0, sizeof(wl_join_params_t) ); -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- memcpy(&join_params->ssid, &ext_join_params->ssid, sizeof(wlc_ssid_t) ); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- memcpy(&join_params->params.bssid, &ap->BSSID, sizeof(whd_mac_t) ); -- join_params->params.bssid_cnt = 0; -- if (ap->channel) -- { -- join_params->params.chanspec_num = (uint32_t)1; -- join_params->params.chanspec_list[0] = -- (wl_chanspec_t)htod16( (ap->channel | -- GET_C_VAR(whd_driver, -- CHANSPEC_BW_20) | GET_C_VAR(whd_driver, CHANSPEC_CTL_SB_NONE) ) ); -- -- /* set band properly */ -- join_params->params.chanspec_list[0] |= wl_band_for_channel; -- } -- result = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_SSID, buffer, 0); -- } -- -- if (result == WHD_SUCCESS) -- { -- -- uint16_t chip_id = whd_chip_get_chip_id(whd_driver); -- -- result = whd_wifi_join_wait_for_complete(ifp, &join_semaphore); -- -- if (chip_id == 43455) -- { -- /* For 11 AC MAX throughput set the frame burst and MPDU per AMPDU */ -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_MPDU_PER_AMPDU, 64) ); -- } -- -- } -- else -- { -- WPRINT_WHD_INFO( ("%s:3 not ready to transceive (err %" PRIu32 "); left network\n", __func__, result) ); -- } -- } -- else -- { -- WPRINT_WHD_INFO( ("%s: active join init failed: (%" PRIu32 ")\n", __FUNCTION__, result) ); -- } -- /* clean up from the join attempt */ -- whd_wifi_active_join_deinit(ifp, &join_semaphore, result); -- -- CHECK_RETURN(result); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type, -- const uint8_t *security_key, uint8_t key_length) --{ -- cy_semaphore_t join_sema; -- whd_result_t result; -- whd_buffer_t buffer; -- wlc_ssid_t *ssid_params; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- if (ssid == NULL) -- { -- WPRINT_WHD_ERROR( ("%s: failure: ssid is null\n", __func__) ); -- return WHD_BADARG; -- } -- -- if ( (ssid->length == 0) || (ssid->length > (size_t)SSID_NAME_SIZE) ) -- { -- WPRINT_WHD_ERROR( ("%s: failure: SSID length error\n", __func__) ); -- return WHD_WLAN_BADSSIDLEN; -- } -- -- /* Keep WLAN awake while joining */ -- WHD_WLAN_KEEP_AWAKE(whd_driver); -- ifp->role = WHD_STA_ROLE; -- -- CHECK_RETURN(cy_rtos_init_semaphore(&join_sema, 1, 0) ); -- result = whd_wifi_active_join_init(ifp, auth_type, security_key, key_length, &join_sema); -- -- if (result == WHD_SUCCESS) -- { -- /* Join network */ -- ssid_params = (struct wlc_ssid *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(wlc_ssid_t) ); -- CHECK_IOCTL_BUFFER(ssid_params); -- memset(ssid_params, 0, sizeof(wlc_ssid_t) ); -- ssid_params->SSID_len = htod32(ssid->length); -- memcpy(ssid_params->SSID, ssid->value, ssid_params->SSID_len); -- result = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_SSID, buffer, 0); -- -- if (result == WHD_SUCCESS) -- { -- result = whd_wifi_join_wait_for_complete(ifp, &join_sema); -- } -- } -- -- /* clean up from the join attempt */ -- whd_wifi_active_join_deinit(ifp, &join_sema, result); -- -- return result; --} -- --uint32_t whd_wifi_leave(whd_interface_t ifp) --{ -- whd_result_t result = WHD_SUCCESS; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* If interface is greater than max return error */ -- if (ifp->bsscfgidx >= WHD_INTERFACE_MAX) -- { -- WPRINT_WHD_ERROR( ("%s: Bad interface 2\n", __FUNCTION__) ); -- return WHD_BADARG; -- } -- if (ifp->event_reg_list[WHD_JOIN_EVENT_ENTRY] != WHD_EVENT_NOT_REGISTERED) -- { -- CHECK_RETURN(whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_JOIN_EVENT_ENTRY]) ); -- ifp->event_reg_list[WHD_JOIN_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED; -- } -- -- /* Disassociate from AP */ -- result = whd_wifi_set_ioctl_buffer(ifp, WLC_DISASSOC, NULL, 0); -- -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("whd_sdpcm_send_ioctl(WLC_DISASSOC) failed:%" PRIu32 "\r\n", result) ); -- } -- -- whd_driver->internal_info.whd_join_status[ifp->bsscfgidx] = 0; -- ifp->role = WHD_INVALID_ROLE; -- return WHD_SUCCESS; --} -- --/** Handles scan result events -- * -- * This function receives scan record events, and parses them into a better format, then passes the results -- * to the user application. -- * -- * @param event_header : The event details -- * @param event_data : The data for the event which contains the scan result structure -- * @param handler_user_data: data which will be passed to user application -- * -- * @returns : handler_user_data parameter -- * -- */ --static void *whd_wifi_scan_events_handler(whd_interface_t ifp, const whd_event_header_t *event_header, -- const uint8_t *event_data, -- void *handler_user_data) --{ -- whd_scan_result_t *record; -- wl_escan_result_t *eresult; -- wl_bss_info_t *bss_info; -- uint16_t chanspec; -- uint32_t version; -- whd_tlv8_header_t *cp; -- uint32_t len; -- uint16_t ie_offset; -- uint32_t bss_info_length; -- country_info_ie_fixed_portion_t *country_info_ie; -- rsn_ie_fixed_portion_t *rsnie; -- wpa_ie_fixed_portion_t *wpaie = NULL; -- uint8_t rate_num; -- ht_capabilities_ie_t *ht_capabilities_ie = NULL; -- uint32_t count_tmp = 0; -- uint16_t temp16; -- uint16_t bss_count; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- if (whd_driver->internal_info.scan_result_callback == NULL) -- { -- return handler_user_data; -- } -- -- if (event_header->status == WLC_E_STATUS_SUCCESS) -- { -- whd_driver->internal_info.scan_result_callback(NULL, handler_user_data, WHD_SCAN_COMPLETED_SUCCESSFULLY); -- whd_driver->internal_info.scan_result_callback = NULL; -- whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY]); -- ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED; -- return handler_user_data; -- } -- if ( (event_header->status == WLC_E_STATUS_NEWSCAN) || (event_header->status == WLC_E_STATUS_NEWASSOC) || -- (event_header->status == WLC_E_STATUS_ABORT) ) -- { -- whd_driver->internal_info.scan_result_callback(NULL, handler_user_data, WHD_SCAN_ABORTED); -- whd_driver->internal_info.scan_result_callback = NULL; -- whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY]); -- ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED; -- return handler_user_data; -- } -- -- if (event_header->status != WLC_E_STATUS_PARTIAL) -- { -- return handler_user_data; -- } -- -- eresult = (wl_escan_result_t *)event_data; -- bss_info = &eresult->bss_info[0]; -- bss_count = dtoh16(eresult->bss_count); -- -- version = dtoh32(WHD_READ_32(&bss_info->version) ); -- whd_minor_assert("wl_bss_info_t has wrong version", version == WL_BSS_INFO_VERSION); -- -- /* PNO bss info doesn't contain the correct bss info version */ -- if (version != WL_BSS_INFO_VERSION) -- { -- whd_minor_assert("Invalid bss_info version returned by firmware\n", version != WL_BSS_INFO_VERSION); -- -- return handler_user_data; -- } -- -- whd_minor_assert("More than one result returned by firmware", bss_count == 1); -- if (bss_count != 1) -- { -- return handler_user_data; -- } -- -- /* -- * check the SSID length and bssinfo ie offset for buffer overflow -- */ -- bss_info->ie_offset = dtoh16(bss_info->ie_offset); -- bss_info->ie_length = dtoh32(bss_info->ie_length); -- if ( (bss_info->SSID_len > sizeof(bss_info->SSID) ) || (bss_info->ie_offset < sizeof(wl_bss_info_t) ) || -- (bss_info->ie_offset > (sizeof(wl_bss_info_t) + bss_info->ie_length) ) ) -- { -- WPRINT_WHD_ERROR( ("Invalid bss length check %s: SSID_len:%d,ie_len:%" PRIu32 ",ie_off:%d\n", __FUNCTION__, -- bss_info->SSID_len, bss_info->ie_length, bss_info->ie_offset) ); -- whd_minor_assert(" bss length check failed\n", bss_info->SSID_len != sizeof(bss_info->SSID) ); -- return handler_user_data; -- } -- -- /* Safe to access *whd_scan_result_ptr, as whd_scan_result_ptr == NULL case is handled above */ -- record = (whd_scan_result_t *)(whd_driver->internal_info.whd_scan_result_ptr); -- -- /* -- * Totally ignore off channel results. This can only happen with DSSS (1 and 2 Mb). It is better to -- * totally ignore it when it happens. It is hard to argue it is "significant" given that it can't -- * happen in 5G with OFDM (or other 2G modulations). This is left here so that it could be -- * passed as a scan result for debugging only. -- */ -- if (!(bss_info->flags & WL_BSS_FLAGS_RSSI_ONCHANNEL) ) -- { -- record->flags |= WHD_SCAN_RESULT_FLAG_RSSI_OFF_CHANNEL; -- /* Comment out this return statement to pass along an off channel result for debugging */ -- return handler_user_data; -- } -- -- /* Copy the SSID into the output record structure */ -- record->SSID.length = (uint8_t)MIN_OF(sizeof(record->SSID.value), bss_info->SSID_len); -- memset(record->SSID.value, 0, sizeof(record->SSID.value) ); -- memcpy(record->SSID.value, bss_info->SSID, record->SSID.length); -- -- /* Copy the BSSID into the output record structure */ -- memcpy( (void *)record->BSSID.octet, (const void *)bss_info->BSSID.octet, sizeof(bss_info->BSSID.octet) ); -- -- /* Copy the RSSI into the output record structure */ -- record->signal_strength = ( int16_t )dtoh16( (WHD_READ_16(&bss_info->RSSI) ) ); -- -- /* Find maximum data rate and put it in the output record structure */ -- record->max_data_rate = 0; -- count_tmp = WHD_READ_32(&bss_info->rateset.count); -- if (count_tmp > 16) -- { -- count_tmp = 16; -- } -- --#ifdef WPRINT_ENABLE_WHD_DEBUG -- /* print out scan results info */ -- { -- char ea_buf[WHD_ETHER_ADDR_STR_LEN]; -- char ssid_buf[SSID_NAME_SIZE + 1]; -- -- WPRINT_WHD_DEBUG( ("Scan result: channel=%d signal=%d ssid=%s bssid=%s\n", record->channel, -- record->signal_strength, -- whd_ssid_to_string(record->SSID.value, record->SSID.length, ssid_buf, -- (uint8_t)sizeof(ssid_buf) ), -- whd_ether_ntoa( (const uint8_t *)bss_info->BSSID.octet, ea_buf, sizeof(ea_buf) ) ) ); -- } --#endif /* WPRINT_ENABLE_WHD_DEBUG */ -- -- for (rate_num = 0; rate_num < count_tmp; rate_num++) -- { -- uint32_t rate = RSPEC_TO_KBPS(bss_info->rateset.rates[rate_num]); -- if (record->max_data_rate < rate) -- { -- record->max_data_rate = rate; -- } -- } -- -- bss_info->capability = dtoh16(bss_info->capability); -- -- /* Write the BSS type into the output record structure */ -- record->bss_type = -- ( (bss_info->capability & DOT11_CAP_ESS) != -- 0 ) ? WHD_BSS_TYPE_INFRASTRUCTURE : ( (bss_info->capability & DOT11_CAP_IBSS) != -- 0 ) ? WHD_BSS_TYPE_ADHOC : WHD_BSS_TYPE_UNKNOWN; -- -- /* Determine the network security. -- * Some of this section has been copied from the standard broadcom host driver file wl/exe/wlu.c function wl_dump_wpa_rsn_ies -- */ -- -- ie_offset = WHD_READ_16(&bss_info->ie_offset); -- cp = (whd_tlv8_header_t *)( ( (uint8_t *)bss_info ) + ie_offset ); -- len = WHD_READ_32(&bss_info->ie_length); -- bss_info_length = WHD_READ_32(&bss_info->length); -- -- record->ie_ptr = (uint8_t *)cp; -- record->ie_len = len; -- -- /* Validate the length of the IE section */ -- if ( (ie_offset > bss_info_length) || (len > bss_info_length - ie_offset) ) -- { -- whd_minor_assert("Invalid ie length", 1 == 0); -- return handler_user_data; -- } -- -- /* Find an RSN IE (Robust-Security-Network Information-Element) */ -- rsnie = (rsn_ie_fixed_portion_t *)whd_parse_dot11_tlvs(cp, len, DOT11_IE_ID_RSN); -- -- /* Find a WPA IE */ -- if (rsnie == NULL) -- { -- whd_tlv8_header_t *parse = cp; -- uint32_t parse_len = len; -- while ( (wpaie = -- (wpa_ie_fixed_portion_t *)whd_parse_tlvs(parse, parse_len, DOT11_IE_ID_VENDOR_SPECIFIC) ) != 0 ) -- { -- if (whd_is_wpa_ie( (vendor_specific_ie_header_t *)wpaie, &parse, &parse_len ) != WHD_FALSE) -- { -- break; -- } -- } -- } -- -- temp16 = WHD_READ_16(&bss_info->capability); -- -- /* Check if AP is configured for RSN */ -- if ( (rsnie != NULL) && -- (rsnie->tlv_header.length >= RSN_IE_MINIMUM_LENGTH + rsnie->pairwise_suite_count * sizeof(uint32_t) ) ) -- { -- uint16_t a; -- uint32_t group_key_suite; -- akm_suite_portion_t *akm_suites; -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- akm_suites = (akm_suite_portion_t *)&(rsnie->pairwise_suite_list[rsnie->pairwise_suite_count]); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- for (a = 0; a < akm_suites->akm_suite_count; ++a) -- { -- uint32_t akm_suite_list_item = ntoh32(akm_suites->akm_suite_list[a]) & 0xFF; -- if (akm_suite_list_item == (uint32_t)WHD_AKM_PSK) -- { -- record->security |= WPA2_SECURITY; -- } -- if (akm_suite_list_item == (uint32_t)WHD_AKM_SAE_SHA256) -- { -- record->security |= WPA3_SECURITY; -- } -- if (akm_suite_list_item == (uint32_t)WHD_AKM_8021X) -- { -- record->security |= ENTERPRISE_ENABLED; -- } -- if (akm_suite_list_item == (uint32_t)WHD_AKM_FT_8021X) -- { -- record->security |= FBT_ENABLED; -- record->security |= ENTERPRISE_ENABLED; -- } -- if (akm_suite_list_item == (uint32_t)WHD_AKM_FT_PSK) -- { -- record->security |= FBT_ENABLED; -- } -- } -- -- group_key_suite = ntoh32(rsnie->group_key_suite) & 0xFF; -- /* Check the RSN contents to see if there are any references to TKIP cipher (2) in the group key or pairwise keys, */ -- /* If so it must be mixed mode. */ -- if (group_key_suite == (uint32_t)WHD_CIPHER_TKIP) -- { -- record->security |= TKIP_ENABLED; -- } -- if (group_key_suite == (uint32_t)WHD_CIPHER_CCMP_128) -- { -- record->security |= AES_ENABLED; -- } -- -- for (a = 0; a < rsnie->pairwise_suite_count; ++a) -- { -- uint32_t pairwise_suite_list_item = ntoh32(rsnie->pairwise_suite_list[a]) & 0xFF; -- if (pairwise_suite_list_item == (uint32_t)WHD_CIPHER_TKIP) -- { -- record->security |= TKIP_ENABLED; -- } -- -- if (pairwise_suite_list_item == (uint32_t)WHD_CIPHER_CCMP_128) -- { -- record->security |= AES_ENABLED; -- } -- } -- } -- /* Check if AP is configured for WPA */ -- else if ( (wpaie != NULL) && -- (wpaie->vendor_specific_header.tlv_header.length >= -- WPA_IE_MINIMUM_LENGTH + wpaie->unicast_suite_count * sizeof(uint32_t) ) ) -- { -- uint16_t a; -- uint32_t group_key_suite; -- akm_suite_portion_t *akm_suites; -- -- record->security = (whd_security_t)WPA_SECURITY; -- group_key_suite = ntoh32(wpaie->multicast_suite) & 0xFF; -- if (group_key_suite == (uint32_t)WHD_CIPHER_TKIP) -- { -- record->security |= TKIP_ENABLED; -- } -- if (group_key_suite == (uint32_t)WHD_CIPHER_CCMP_128) -- { -- record->security |= AES_ENABLED; -- } -- -- akm_suites = (akm_suite_portion_t *)&(wpaie->unicast_suite_list[wpaie->unicast_suite_count]); -- for (a = 0; a < akm_suites->akm_suite_count; ++a) -- { -- uint32_t akm_suite_list_item = ntoh32(akm_suites->akm_suite_list[a]) & 0xFF; -- if (akm_suite_list_item == (uint32_t)WHD_AKM_8021X) -- { -- record->security |= ENTERPRISE_ENABLED; -- } -- } -- -- for (a = 0; a < wpaie->unicast_suite_count; ++a) -- { -- if (wpaie->unicast_suite_list[a][3] == (uint32_t)WHD_CIPHER_CCMP_128) -- { -- record->security |= AES_ENABLED; -- } -- } -- } -- /* Check if AP is configured for WEP, that is, if the capabilities field indicates privacy, then security supports WEP */ -- else if ( (temp16 & DOT11_CAP_PRIVACY) != 0 ) -- { -- record->security = WHD_SECURITY_WEP_PSK; -- } -- else -- { -- /* Otherwise no security */ -- record->security = WHD_SECURITY_OPEN; -- } -- -- /* Update the maximum data rate with 11n rates from the HT Capabilities IE */ -- ht_capabilities_ie = (ht_capabilities_ie_t *)whd_parse_tlvs(cp, len, DOT11_IE_ID_HT_CAPABILITIES); -- if ( (ht_capabilities_ie != NULL) && (ht_capabilities_ie->tlv_header.length == HT_CAPABILITIES_IE_LENGTH) ) -- { -- uint8_t a; -- uint8_t supports_40mhz = -- (ht_capabilities_ie->ht_capabilities_info & HT_CAPABILITIES_INFO_SUPPORTED_CHANNEL_WIDTH_SET) != 0 ? 1 : 0; -- uint8_t short_gi[2] = -- { (ht_capabilities_ie->ht_capabilities_info & HT_CAPABILITIES_INFO_SHORT_GI_FOR_20MHZ) != 0 ? 1 : 0, -- (ht_capabilities_ie->ht_capabilities_info & HT_CAPABILITIES_INFO_SHORT_GI_FOR_40MHZ) != 0 ? 1 : 0 }; -- -- /* Find highest bit from MCS info */ -- for (a = 31; a != 0xFF; --a) -- { -- if ( (ht_capabilities_ie->rx_mcs[a / 8] & (1 << (a % 8) ) ) != 0 ) -- { -- break; -- } -- } -- if (a != 0xFF) -- { -- record->max_data_rate = -- ( uint32_t )(100UL * mcs_data_rate_lookup_table[a][supports_40mhz][short_gi[supports_40mhz]]); -- } -- } -- -- if (bss_info->flags & WL_BSS_FLAGS_FROM_BEACON) -- { -- record->flags |= WHD_SCAN_RESULT_FLAG_BEACON; -- } -- -- /* Get the channel for pre-N and control channel for n/HT or later */ -- chanspec = dtoh16(WHD_READ_16(&bss_info->chanspec) ); -- if (bss_info->n_cap) -- { -- /* Check control channel first.The channel that chanspec reports is the center frequency which might not be the same as -- * the 20 MHz channel that the beacons is on (primary or control channel) if it's an 802.11n/AC 40MHz or wider channel. -- */ -- record->channel = bss_info->ctl_ch; -- } -- else -- { -- /* 11 a/b/g and 20MHz bandwidth only */ -- record->channel = ( ( uint8_t )(chanspec & WL_CHANSPEC_CHAN_MASK) ); -- } -- -- /* Find country info IE (Country-Information Information-Element) */ -- country_info_ie = (country_info_ie_fixed_portion_t *)whd_parse_dot11_tlvs(cp, len, DOT11_IE_ID_COUNTRY); -- if ( (country_info_ie != NULL) && (country_info_ie->tlv_header.length >= COUNTRY_INFO_IE_MINIMUM_LENGTH) ) -- { -- record->ccode[0] = UNSIGNED_CHAR_TO_CHAR(country_info_ie->ccode[0]); -- record->ccode[1] = UNSIGNED_CHAR_TO_CHAR(country_info_ie->ccode[1]); -- } -- record->band = -- ( (chanspec & -- GET_C_VAR(whd_driver, -- CHANSPEC_BAND_MASK) ) == -- GET_C_VAR(whd_driver, CHANSPEC_BAND_2G) ? WHD_802_11_BAND_2_4GHZ : WHD_802_11_BAND_5GHZ ); -- -- whd_driver->internal_info.scan_result_callback(&whd_driver->internal_info.whd_scan_result_ptr, handler_user_data, -- WHD_SCAN_INCOMPLETE); -- -- /* whd_driver->internal_info.scan_result_callback() can make whd_scan_result_ptr to NULL */ -- if (whd_driver->internal_info.whd_scan_result_ptr == NULL) -- { -- whd_driver->internal_info.scan_result_callback(NULL, handler_user_data, WHD_SCAN_ABORTED); -- whd_driver->internal_info.scan_result_callback = NULL; -- whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY]); -- ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED; -- } -- -- return handler_user_data; --} -- --static void whd_scan_count_handler(whd_scan_result_t **result_ptr, void *user_data, whd_scan_status_t status) --{ -- uint32_t result; -- whd_scan_userdata_t *scan_userdata = (whd_scan_userdata_t *)user_data; -- -- /* finished scan, either succesfully or through an abort */ -- if (status != WHD_SCAN_INCOMPLETE) -- { -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- result = cy_rtos_set_semaphore(&scan_userdata->scan_semaphore, WHD_FALSE); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Set semaphore failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- /* just count the available networks */ -- scan_userdata->offset += 1; -- -- memset(*result_ptr, 0, sizeof(whd_scan_result_t) ); -- return; --} -- --static void whd_scan_result_handler(whd_scan_result_t **result_ptr, void *user_data, whd_scan_status_t status) --{ -- uint32_t result; -- whd_sync_scan_result_t *record; -- whd_scan_userdata_t *scan_userdata = (whd_scan_userdata_t *)user_data; -- whd_scan_result_t *current_result = (whd_scan_result_t *)(*result_ptr); -- -- /* finished scan, either succesfully or through an abort */ -- if (status != WHD_SCAN_INCOMPLETE) -- { -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- result = cy_rtos_set_semaphore(&scan_userdata->scan_semaphore, WHD_FALSE); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- if (result != WHD_SUCCESS) -- WPRINT_WHD_ERROR( ("Set semaphore failed in %s at %d \n", __func__, __LINE__) ); -- return; -- } -- -- /* can't really keep anymore scan results */ -- if (scan_userdata->offset == scan_userdata->count) -- { -- /*Offset and the count requested is reached. return with out saving the record details */ -- memset(*result_ptr, 0, sizeof(whd_scan_result_t) ); -- return; -- } -- -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- /* Safe to access *whd_scan_result_ptr, as whd_scan_result_ptr == NULL case is handled above */ -- record = (whd_sync_scan_result_t *)(&scan_userdata->aps[scan_userdata->offset]); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- -- /* Copy the SSID into the output record structure */ -- record->SSID.length = current_result->SSID.length; -- memset(record->SSID.value, 0, sizeof(record->SSID.value) ); -- memcpy(record->SSID.value, current_result->SSID.value, record->SSID.length); -- -- /* Copy the BSSID into the output record structure */ -- memcpy( (void *)record->BSSID.octet, (const void *)current_result->BSSID.octet, -- sizeof(current_result->BSSID.octet) ); -- -- record->security = current_result->security; -- record->signal_strength = current_result->signal_strength; -- record->channel = current_result->channel; -- -- scan_userdata->offset += 1; -- memset(*result_ptr, 0, sizeof(whd_scan_result_t) ); -- return; --} -- --uint32_t whd_wifi_scan_synch(whd_interface_t ifp, -- whd_sync_scan_result_t *scan_result, -- uint32_t count -- ) --{ -- uint32_t result; -- whd_scan_result_t *scan_result_ptr; -- whd_scan_userdata_t scan_userdata; -- scan_userdata.count = count; -- scan_userdata.aps = scan_result; -- scan_userdata.offset = 0; -- -- if (!ifp || !scan_result) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- CHECK_RETURN(cy_rtos_init_semaphore(&scan_userdata.scan_semaphore, 1, 0) ); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- -- whd_scan_result_callback_t handler = (count == 0) -- ? whd_scan_count_handler : whd_scan_result_handler; -- -- scan_result_ptr = (whd_scan_result_t *)malloc(sizeof(whd_scan_result_t) ); -- if (scan_result_ptr == NULL) -- { -- goto error; -- } -- memset(scan_result_ptr, 0, sizeof(whd_scan_result_t) ); -- -- if (whd_wifi_scan(ifp, WHD_SCAN_TYPE_ACTIVE, WHD_BSS_TYPE_ANY, NULL, NULL, NULL, NULL, -- handler, (whd_scan_result_t *)scan_result_ptr, &scan_userdata) != WHD_SUCCESS) -- { -- WPRINT_WHD_INFO( ("Failed scan \n") ); -- goto error; -- } -- -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- result = cy_rtos_get_semaphore(&scan_userdata.scan_semaphore, CY_RTOS_NEVER_TIMEOUT, WHD_FALSE); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- whd_assert("Get semaphore failed", (result == CY_RSLT_SUCCESS) || (result == CY_RTOS_TIMEOUT) ); -- -- DISABLE_COMPILER_WARNING(diag_suppress = Pa039) -- result = cy_rtos_deinit_semaphore(&scan_userdata.scan_semaphore); -- ENABLE_COMPILER_WARNING(diag_suppress = Pa039) -- if (WHD_SUCCESS != result) -- { -- WPRINT_WHD_INFO( ("Failed join (err %" PRIu32 ")\n", result) ); -- } -- if (scan_result_ptr != NULL) -- { -- free(scan_result_ptr); -- scan_result_ptr = NULL; -- } -- return scan_userdata.offset; -- -- --error: -- if (scan_result_ptr != NULL) -- { -- free(scan_result_ptr); -- scan_result_ptr = NULL; -- } -- -- return WHD_MALLOC_FAILURE; --} -- --/* -- * NOTE: search references of function wlu_get in wl/exe/wlu.c to find what format the returned IOCTL data is. -- */ --uint32_t whd_wifi_scan(whd_interface_t ifp, -- whd_scan_type_t scan_type, -- whd_bss_type_t bss_type, -- const whd_ssid_t *optional_ssid, -- const whd_mac_t *optional_mac, -- const uint16_t *optional_channel_list, -- const whd_scan_extended_params_t *optional_extended_params, -- whd_scan_result_callback_t callback, -- whd_scan_result_t *result_ptr, -- void *user_data -- ) --{ -- whd_buffer_t buffer; -- wl_escan_params_t *scan_params; -- uint16_t param_size = offsetof(wl_escan_params_t, params) + WL_SCAN_PARAMS_FIXED_SIZE; -- uint16_t channel_list_size = 0; -- whd_driver_t whd_driver = ifp->whd_driver; -- uint16_t event_entry = 0xFF; -- -- whd_assert("Bad args", callback != NULL); -- -- if ( (result_ptr == NULL) || (callback == NULL) ) -- { -- return WHD_BADARG; -- } -- -- if (!( (scan_type == WHD_SCAN_TYPE_ACTIVE) || (scan_type == WHD_SCAN_TYPE_PASSIVE) || -- (scan_type == WHD_SCAN_TYPE_PROHIBITED_CHANNELS) || (scan_type == WHD_SCAN_TYPE_NO_BSSID_FILTER) ) ) -- return WHD_BADARG; -- -- if (!( (bss_type == WHD_BSS_TYPE_INFRASTRUCTURE) || (bss_type == WHD_BSS_TYPE_ADHOC) || -- (bss_type == WHD_BSS_TYPE_ANY) ) ) -- return WHD_BADARG; -- -- /* Determine size of channel_list, and add it to the parameter size so correct sized buffer can be allocated */ -- if (optional_channel_list != NULL) -- { -- /* Look for entry with channel number 0, which suggests the end of channel_list */ -- for (channel_list_size = 0; optional_channel_list[channel_list_size] != 0; channel_list_size++) -- { -- } -- param_size = ( uint16_t )(param_size + channel_list_size * sizeof(uint16_t) ); -- } -- -- if (ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY] != WHD_EVENT_NOT_REGISTERED) -- { -- whd_wifi_deregister_event_handler(ifp, ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY]); -- ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY] = WHD_EVENT_NOT_REGISTERED; -- } -- CHECK_RETURN(whd_management_set_event_handler(ifp, scan_events, whd_wifi_scan_events_handler, user_data, -- &event_entry) ); -- if (event_entry >= WHD_MAX_EVENT_SUBSCRIPTION) -- { -- WPRINT_WHD_ERROR( ("scan_events registration failed in function %s and line %d", __func__, __LINE__) ); -- return WHD_UNFINISHED; -- } -- ifp->event_reg_list[WHD_SCAN_EVENT_ENTRY] = event_entry; -- /* Allocate a buffer for the IOCTL message */ -- scan_params = (wl_escan_params_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, param_size, IOVAR_STR_ESCAN); -- CHECK_IOCTL_BUFFER(scan_params); -- -- /* Clear the scan parameters structure */ -- memset(scan_params, 0, param_size); -- -- /* Fill in the appropriate details of the scan parameters structure */ -- scan_params->version = htod32(ESCAN_REQ_VERSION); -- scan_params->action = htod16(WL_SCAN_ACTION_START); -- scan_params->params.scan_type = (int8_t)scan_type; -- scan_params->params.bss_type = (int8_t)bss_type; -- -- /* Fill out the SSID parameter if provided */ -- if (optional_ssid != NULL) -- { -- scan_params->params.ssid.SSID_len = htod32(optional_ssid->length); -- memcpy(scan_params->params.ssid.SSID, optional_ssid->value, scan_params->params.ssid.SSID_len); -- } -- -- /* Fill out the BSSID parameter if provided */ -- if (optional_mac != NULL) -- { -- memcpy(scan_params->params.bssid.octet, optional_mac, sizeof(whd_mac_t) ); -- } -- else -- { -- memset(scan_params->params.bssid.octet, 0xff, sizeof(whd_mac_t) ); -- } -- -- /* Fill out the extended parameters if provided */ -- if (optional_extended_params != NULL) -- { -- scan_params->params.nprobes = (int32_t)htod32(optional_extended_params->number_of_probes_per_channel); -- scan_params->params.active_time = -- (int32_t)htod32(optional_extended_params->scan_active_dwell_time_per_channel_ms); -- scan_params->params.passive_time = (int32_t)htod32( -- optional_extended_params->scan_passive_dwell_time_per_channel_ms); -- scan_params->params.home_time = (int32_t)htod32( -- optional_extended_params->scan_home_channel_dwell_time_between_channels_ms); -- } -- else -- { -- scan_params->params.nprobes = (int32_t)htod32(-1); -- scan_params->params.active_time = (int32_t)htod32(-1); -- scan_params->params.passive_time = (int32_t)htod32(-1); -- scan_params->params.home_time = (int32_t)htod32(-1); -- } -- -- /* Copy the channel list parameter if provided */ -- if ( (channel_list_size > 0) && (optional_channel_list != NULL) ) -- { -- int i; -- -- for (i = 0; i < channel_list_size; i++) -- { -- scan_params->params.channel_list[i] = htod16(CH20MHZ_CHSPEC(optional_channel_list[i]) ); -- } -- scan_params->params.channel_num = (int32_t)htod32(channel_list_size); -- } -- -- whd_driver->internal_info.scan_result_callback = callback; -- whd_driver->internal_info.whd_scan_result_ptr = result_ptr; -- -- /* Send the Incremental Scan IOVAR message - blocks until the response is received */ -- -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_stop_scan(whd_interface_t ifp) --{ -- whd_buffer_t buffer; -- wl_escan_params_t *scan_params; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- whd_driver = ifp->whd_driver; -- CHECK_DRIVER_NULL(whd_driver) -- -- /* Allocate a buffer for the IOCTL message */ -- scan_params = (wl_escan_params_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(wl_escan_params_t), -- IOVAR_STR_ESCAN); -- CHECK_IOCTL_BUFFER(scan_params); -- /* Clear the scan parameters structure */ -- memset(scan_params, 0, sizeof(wl_escan_params_t) ); -- -- /* Fill in the appropriate details of the scan parameters structure */ -- scan_params->version = htod32(ESCAN_REQ_VERSION); -- scan_params->action = htod16(WL_SCAN_ACTION_ABORT); -- -- /* Send the Scan IOVAR message to abort scan*/ -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_SET, buffer, 0) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_deauth_sta(whd_interface_t ifp, whd_mac_t *mac, whd_dot11_reason_code_t reason) --{ -- whd_result_t result; -- scb_val_t *scb_val; -- whd_buffer_t buffer1; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- if (mac == NULL) -- { -- uint8_t *buffer = NULL; -- whd_maclist_t *clients = NULL; -- const whd_mac_t *current; -- wl_bss_info_t ap_info; -- whd_security_t sec; -- uint32_t max_clients = 0; -- size_t size = 0; -- -- result = whd_wifi_ap_get_max_assoc(ifp, &max_clients); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Failed to get max number of associated clients\n") ); -- max_clients = 5; -- } -- -- size = (sizeof(uint32_t) + (max_clients * sizeof(whd_mac_t) ) ); -- buffer = calloc(1, size); -- -- if (buffer == NULL) -- { -- WPRINT_WHD_ERROR( ("Unable to allocate memory for associated clients list, %s failed at line %d \n", -- __func__, __LINE__) ); -- return WHD_MALLOC_FAILURE; -- } -- -- clients = (whd_maclist_t *)buffer; -- clients->count = max_clients; -- memset(&ap_info, 0, sizeof(wl_bss_info_t) ); -- -- result = whd_wifi_get_associated_client_list(ifp, clients, (uint16_t)size); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Failed to get client list, %s failed at line %d \n", __func__, __LINE__) ); -- free(buffer); -- return result; -- } -- -- current = &clients->mac_list[0]; -- result = whd_wifi_get_ap_info(ifp, &ap_info, &sec); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Function %s failed at line %d \n", __func__, __LINE__) ); -- free(buffer); -- return result; -- } -- -- -- while ( (clients->count > 0) && (!(NULL_MAC(current->octet) ) ) ) -- { -- if (memcmp(current->octet, &(ap_info.BSSID), sizeof(whd_mac_t) ) != 0) -- { -- WPRINT_WHD_INFO( ("Deauthenticating STA MAC: %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", current->octet[0], -- current->octet[1], current->octet[2], current->octet[3], current->octet[4], -- current->octet[5]) ); -- -- scb_val = (scb_val_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer1, sizeof(scb_val_t) ); -- if (scb_val == NULL) -- { -- WPRINT_WHD_ERROR( ("Buffer alloc failed in function %s at line %d \n", __func__, __LINE__) ); -- free(buffer); -- return WHD_BUFFER_ALLOC_FAIL; -- } -- memset( (char *)scb_val, 0, sizeof(scb_val_t) ); -- memcpy( (char *)&scb_val->ea, (char *)current, sizeof(whd_mac_t) ); -- scb_val->val = (uint32_t)reason; -- result = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SCB_DEAUTHENTICATE_FOR_REASON, buffer1, 0); -- -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Failed to deauth client\n") ); -- } -- } -- -- --clients->count; -- ++current; -- } -- -- free(buffer); -- -- return WHD_SUCCESS; -- } -- -- scb_val = (scb_val_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer1, sizeof(scb_val_t) ); -- CHECK_IOCTL_BUFFER(scb_val); -- memset( (char *)scb_val, 0, sizeof(scb_val_t) ); -- memcpy( (char *)&scb_val->ea, (char *)mac, sizeof(whd_mac_t) ); -- scb_val->val = (uint32_t)reason; -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SCB_DEAUTHENTICATE_FOR_REASON, buffer1, 0) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_mac_address(whd_interface_t ifp, whd_mac_t *mac) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- if (mac == NULL) -- return WHD_BADARG; -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- CHECK_IOCTL_BUFFER(whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(whd_mac_t), IOVAR_STR_CUR_ETHERADDR) ); -- -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- memcpy(mac, whd_buffer_get_current_piece_data_pointer(whd_driver, response), sizeof(whd_mac_t) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_bssid(whd_interface_t ifp, whd_mac_t *bssid) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_result_t result; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- if (bssid == NULL) -- return WHD_BADARG; -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- if ( (ifp->role == WHD_STA_ROLE) || (ifp->role == WHD_AP_ROLE) ) -- { -- memset(bssid, 0, sizeof(whd_mac_t) ); -- CHECK_IOCTL_BUFFER(whd_cdc_get_ioctl_buffer(whd_driver, &buffer, sizeof(whd_mac_t) ) ); -- if ( (result = -- whd_cdc_send_ioctl(ifp, CDC_GET, WLC_GET_BSSID, buffer, &response) ) == WHD_SUCCESS ) -- { -- memcpy(bssid->octet, whd_buffer_get_current_piece_data_pointer(whd_driver, response), sizeof(whd_mac_t) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- return result; -- } -- else if (ifp->role == WHD_INVALID_ROLE) -- { -- WPRINT_WHD_ERROR( ("STA not associated with AP\n") ); -- return WHD_WLAN_NOTASSOCIATED; -- } -- else -- { -- return WHD_UNSUPPORTED; -- } --} -- --uint32_t whd_wifi_ap_get_max_assoc(whd_interface_t ifp, uint32_t *max_assoc) --{ -- if (!ifp || !max_assoc) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- return whd_wifi_get_iovar_value(ifp, IOVAR_STR_MAX_ASSOC, max_assoc); --} -- --uint32_t whd_wifi_get_associated_client_list(whd_interface_t ifp, void *client_list_buffer, uint16_t buffer_length) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_result_t result; -- whd_maclist_t *data = NULL; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* Check if soft AP interface is up, if not, return a count of 0 as a result */ -- result = whd_wifi_is_ready_to_transceive(ifp); -- if ( (result == WHD_SUCCESS) && (ifp->role == WHD_AP_ROLE) ) -- { -- data = (whd_maclist_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, buffer_length); -- CHECK_IOCTL_BUFFER(data); -- memset(data, 0, buffer_length); -- data->count = htod32( ( (whd_maclist_t *)client_list_buffer )->count ); -- -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_GET, WLC_GET_ASSOCLIST, buffer, &response) ); -- -- memcpy(client_list_buffer, (void *)whd_buffer_get_current_piece_data_pointer(whd_driver, -- response), -- (size_t)MIN_OF(whd_buffer_get_current_piece_size(whd_driver, response), buffer_length) ); -- -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- else if (result == WHD_INTERFACE_NOT_UP) -- { -- /* not up, so can't have associated clients */ -- ( (whd_maclist_t *)client_list_buffer )->count = 0; -- } -- else -- { -- WPRINT_WHD_ERROR( ("Invalid Interface\n") ); -- return WHD_INVALID_INTERFACE; -- } -- return result; --} -- --uint32_t whd_wifi_get_ap_info(whd_interface_t ifp, wl_bss_info_t *ap_info, whd_security_t *security) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- uint32_t *data; -- uint32_t security_value; /* hold misc security values */ -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- if ( (ap_info == NULL) || (security == NULL) ) -- return WHD_BADARG; -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- /* Read the BSS info */ -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, WLC_IOCTL_SMLEN); -- CHECK_IOCTL_BUFFER(data); -- *data = WLC_IOCTL_SMLEN; -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_GET, WLC_GET_BSS_INFO, buffer, &response) ); -- -- memcpy(ap_info, (void *)(whd_buffer_get_current_piece_data_pointer(whd_driver, response) + 4), -- sizeof(wl_bss_info_t) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- /* Read the WSEC setting */ -- CHECK_RETURN(whd_wifi_get_ioctl_value(ifp, WLC_GET_WSEC, &security_value) ); -- security_value = security_value & SECURITY_MASK; -- *security = ( whd_security_t )(security_value); -- -- if (*security == WHD_SECURITY_WEP_PSK) -- { -- /* Read the WEP auth setting */ -- CHECK_RETURN(whd_wifi_get_ioctl_value(ifp, WLC_GET_AUTH, &security_value) ); -- -- if (security_value == SHARED_AUTH) -- { -- *security |= SHARED_ENABLED; -- } -- } -- else if ( (*security & (TKIP_ENABLED | AES_ENABLED) ) != 0 ) -- { -- /* Read the WPA auth setting */ -- CHECK_RETURN(whd_wifi_get_ioctl_value(ifp, WLC_GET_WPA_AUTH, &security_value) ); -- -- if (security_value == WPA2_AUTH_PSK) -- { -- *security |= WPA2_SECURITY; -- } -- else if (security_value == WPA_AUTH_PSK) -- { -- *security |= WPA_SECURITY; -- } -- } -- else if (*security != WHD_SECURITY_OPEN) -- { -- *security = WHD_SECURITY_UNKNOWN; -- WPRINT_WHD_ERROR( ("Unknown security type, %s failed at line %d \n", __func__, __LINE__) ); -- return WHD_UNKNOWN_SECURITY_TYPE; -- } -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_enable_powersave(whd_interface_t ifp) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* Set legacy powersave mode - PM1 */ -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- CHECK_IOCTL_BUFFER(data); -- *data = htod32( (uint32_t)PM1_POWERSAVE_MODE ); -- -- RETURN_WITH_ASSERT(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_PM, buffer, NULL) ); --} -- --uint32_t whd_wifi_get_powersave_mode(whd_interface_t ifp, uint32_t *value) --{ -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- if (value == NULL) -- return WHD_BADARG; -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- return whd_wifi_get_ioctl_value(ifp, WLC_GET_PM, value); --} -- --uint32_t whd_wifi_enable_powersave_with_throughput(whd_interface_t ifp, uint16_t return_to_sleep_delay_ms) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- whd_driver_t whd_driver; -- uint16_t chip_id; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- if (return_to_sleep_delay_ms < PM2_SLEEP_RET_TIME_MIN) -- { -- WPRINT_WHD_ERROR( ("Delay too short, %s failed at line %d \n", __func__, __LINE__) ); -- return WHD_DELAY_TOO_SHORT; -- } -- else if (return_to_sleep_delay_ms > PM2_SLEEP_RET_TIME_MAX) -- { -- WPRINT_WHD_ERROR( ("Delay too long, %s failed at line %d \n", __func__, __LINE__) ); -- return WHD_DELAY_TOO_LONG; -- } -- -- /* Set the maximum time to wait before going back to sleep */ -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_PM2_SLEEP_RET, -- (uint32_t)(return_to_sleep_delay_ms / 10) * 10) ); -- chip_id = whd_chip_get_chip_id(whd_driver); -- -- if (chip_id == 43362) -- { -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_PM_LIMIT, NULL_FRAMES_WITH_PM_SET_LIMIT) ); -- } -- -- /* set PM2 fast return to sleep powersave mode */ -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- CHECK_IOCTL_BUFFER(data); -- *data = htod32( (uint32_t)PM2_POWERSAVE_MODE ); -- -- RETURN_WITH_ASSERT(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_PM, buffer, NULL) ); --} -- --uint32_t whd_wifi_disable_powersave(whd_interface_t ifp) --{ -- whd_buffer_t buffer; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- uint32_t *data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)4); -- -- CHECK_IOCTL_BUFFER(data); -- *data = htod32( (uint32_t)NO_POWERSAVE_MODE ); -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_PM, buffer, NULL) ); -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_register_multicast_address(whd_interface_t ifp, const whd_mac_t *mac) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- uint16_t a; -- mcast_list_t *orig_mcast_list; -- mcast_list_t *new_mcast_list; -- whd_driver_t whd_driver; -- -- if (!ifp || !mac) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* Get the current multicast list */ -- CHECK_IOCTL_BUFFER(whd_cdc_get_iovar_buffer(whd_driver, &buffer, -- sizeof(uint32_t) + MAX_SUPPORTED_MCAST_ENTRIES * -- sizeof(whd_mac_t), IOVAR_STR_MCAST_LIST) ); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- /* Verify address is not currently registered */ -- orig_mcast_list = (mcast_list_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- orig_mcast_list->entry_count = dtoh32(orig_mcast_list->entry_count); -- for (a = 0; a < orig_mcast_list->entry_count; ++a) -- { -- /* Check if any address matches */ -- if (0 == memcmp(mac, &orig_mcast_list->macs[a], sizeof(whd_mac_t) ) ) -- { -- /* A matching address has been found so we can stop now. */ -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- return WHD_SUCCESS; -- } -- } -- -- /* Add the provided address to the list and write the new multicast list */ -- new_mcast_list = (mcast_list_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, -- ( uint16_t )(sizeof(uint32_t) + -- (orig_mcast_list->entry_count + 1) * -- sizeof(whd_mac_t) ), IOVAR_STR_MCAST_LIST); -- CHECK_IOCTL_BUFFER(new_mcast_list); -- new_mcast_list->entry_count = orig_mcast_list->entry_count; -- memcpy(new_mcast_list->macs, orig_mcast_list->macs, orig_mcast_list->entry_count * sizeof(whd_mac_t) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- memcpy(&new_mcast_list->macs[new_mcast_list->entry_count], mac, sizeof(whd_mac_t) ); -- ++new_mcast_list->entry_count; -- new_mcast_list->entry_count = htod32(new_mcast_list->entry_count); -- RETURN_WITH_ASSERT(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); --} -- --uint32_t whd_wifi_unregister_multicast_address(whd_interface_t ifp, const whd_mac_t *mac) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- uint16_t a; -- mcast_list_t *orig_mcast_list; -- whd_driver_t whd_driver; -- -- if (!ifp || !mac) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- /* Get the current multicast list */ -- CHECK_IOCTL_BUFFER(whd_cdc_get_iovar_buffer(whd_driver, &buffer, -- sizeof(uint32_t) + MAX_SUPPORTED_MCAST_ENTRIES * -- sizeof(whd_mac_t), IOVAR_STR_MCAST_LIST) ); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- /* Find the address, assuming it is part of the list */ -- orig_mcast_list = (mcast_list_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- orig_mcast_list->entry_count = dtoh32(orig_mcast_list->entry_count); -- if (orig_mcast_list->entry_count != 0) -- { -- mcast_list_t *new_mcast_list = (mcast_list_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, -- ( uint16_t )(sizeof(uint32_t) + -- (orig_mcast_list-> -- entry_count - 1) * -- sizeof(whd_mac_t) ), -- IOVAR_STR_MCAST_LIST); -- CHECK_IOCTL_BUFFER(new_mcast_list); -- -- for (a = 0; a < orig_mcast_list->entry_count; ++a) -- { -- WPRINT_WHD_INFO( ("MAC: %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", orig_mcast_list->macs[a].octet[0], -- orig_mcast_list->macs[a].octet[1], orig_mcast_list->macs[a].octet[2], -- orig_mcast_list->macs[a].octet[3], orig_mcast_list->macs[a].octet[4], -- orig_mcast_list->macs[a].octet[5]) ); -- if (0 == memcmp(mac, &orig_mcast_list->macs[a], sizeof(whd_mac_t) ) ) -- { -- /* Copy the existing list up to the matching address */ -- memcpy(new_mcast_list->macs, orig_mcast_list->macs, a * sizeof(whd_mac_t) ); -- -- /* Skip the current address and copy the remaining entries */ -- memcpy(&new_mcast_list->macs[a], &orig_mcast_list->macs[a + 1], -- ( size_t )(orig_mcast_list->entry_count - a - 1) * sizeof(whd_mac_t) ); -- -- new_mcast_list->entry_count = orig_mcast_list->entry_count - 1; -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- new_mcast_list->entry_count = htod32(new_mcast_list->entry_count); -- RETURN_WITH_ASSERT(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); -- } -- } -- /* There was something in the list, but the request MAC wasn't there */ -- CHECK_RETURN(whd_buffer_release(whd_driver, buffer, WHD_NETWORK_TX) ); -- } -- /* If we get here than the address wasn't in the list or the list was empty */ -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- WPRINT_WHD_ERROR( ("whd_wifi_unregister_multicast_address address not registered yet \n") ); -- return WHD_DOES_NOT_EXIST; --} -- --uint32_t whd_wifi_set_listen_interval(whd_interface_t ifp, uint8_t listen_interval, -- whd_listen_interval_time_unit_t time_unit) --{ -- uint8_t listen_interval_dtim; -- -- CHECK_IFP_NULL(ifp); -- -- switch (time_unit) -- { -- case WHD_LISTEN_INTERVAL_TIME_UNIT_DTIM: -- { -- listen_interval_dtim = listen_interval; -- break; -- } -- case WHD_LISTEN_INTERVAL_TIME_UNIT_BEACON: -- { -- /* If the wake interval measured in DTIMs is set to 0, the wake interval is measured in beacon periods */ -- listen_interval_dtim = 0; -- -- /* The wake period is measured in beacon periods, set the value as required */ -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_LISTEN_INTERVAL_BEACON, listen_interval) ); -- break; -- } -- default: -- WPRINT_WHD_ERROR( ("whd_wifi_set_listen_interval: Invalid Time unit specified \n") ); -- return WHD_BADARG; -- } -- -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_LISTEN_INTERVAL_DTIM, listen_interval_dtim) ); -- -- CHECK_RETURN(whd_wifi_set_iovar_value(ifp, IOVAR_STR_LISTEN_INTERVAL_ASSOC, listen_interval) ); -- -- return WHD_SUCCESS; -- --} -- --uint32_t whd_wifi_get_listen_interval(whd_interface_t ifp, whd_listen_interval_t *li) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- int *data; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- if (li == NULL) -- return WHD_BADARG; -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- data = (int *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, 4, IOVAR_STR_LISTEN_INTERVAL_BEACON); -- CHECK_IOCTL_BUFFER(data); -- memset(data, 0, 1); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- memcpy( (uint8_t *)&(li->beacon), (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, response), 1 ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- data = (int *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, 4, IOVAR_STR_LISTEN_INTERVAL_DTIM); -- CHECK_IOCTL_BUFFER(data); -- memset(data, 0, 1); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- memcpy( (uint8_t *)&(li->dtim), (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, response), 1 ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- data = (int *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, 4, IOVAR_STR_LISTEN_INTERVAL_ASSOC); -- CHECK_IOCTL_BUFFER(data); -- memset(data, 0, 4); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- memcpy( (uint16_t *)&(li->assoc), (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, response), 2 ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_is_ready_to_transceive(whd_interface_t ifp) --{ -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- switch (ifp->role) -- { -- case WHD_AP_ROLE: -- return (whd_wifi_get_ap_is_up(whd_driver) == WHD_TRUE) ? WHD_SUCCESS : WHD_INTERFACE_NOT_UP; -- -- case WHD_STA_ROLE: -- return whd_wifi_check_join_status(ifp); -- -- /* Disables Eclipse static analysis warning */ -- /* No break needed due to returns in all case paths */ -- /* no break */ -- /* Fall Through */ -- case WHD_P2P_ROLE: -- case WHD_INVALID_ROLE: -- -- default: -- return WHD_UNKNOWN_INTERFACE; -- } --} -- --uint32_t whd_wifi_get_acparams(whd_interface_t ifp, edcf_acparam_t *acp) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_driver_t whd_driver; -- -- if (!ifp || !acp) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- int *data = (int *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, 64, IOVAR_STR_AC_PARAMS_STA); -- -- CHECK_IOCTL_BUFFER(data); -- memset(data, 0, 64); -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- memcpy( (char *)acp, (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, response), -- (sizeof(edcf_acparam_t) * 4) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_manage_custom_ie(whd_interface_t ifp, whd_custom_ie_action_t action, const uint8_t *oui, -- uint8_t subtype, const void *data, uint16_t length, uint16_t which_packets) --{ -- whd_buffer_t buffer; -- vndr_ie_setbuf_t *ie_setbuf; -- uint32_t *iovar_data; -- whd_driver_t whd_driver; -- -- if (!ifp || !oui || !data) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- whd_assert("Bad Args", oui != NULL); -- -- iovar_data = -- (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)(sizeof(vndr_ie_setbuf_t) + length + 4), -- "bsscfg:" IOVAR_STR_VENDOR_IE); -- CHECK_IOCTL_BUFFER(iovar_data); -- *iovar_data = ifp->bsscfgidx; -- ie_setbuf = (vndr_ie_setbuf_t *)(iovar_data + 1); -- -- /* Copy the vndr_ie SET command ("add"/"del") to the buffer */ -- if (action == WHD_ADD_CUSTOM_IE) -- { -- memcpy( (char *)ie_setbuf->cmd, "add", 3 ); -- } -- else -- { -- memcpy( (char *)ie_setbuf->cmd, "del", 3 ); -- } -- ie_setbuf->cmd[3] = 0; -- -- /* Set the values */ -- ie_setbuf->vndr_ie_buffer.iecount = (int32_t)htod32(1); -- -- ie_setbuf->vndr_ie_buffer.vndr_ie_list[0].pktflag = htod32(which_packets); -- ie_setbuf->vndr_ie_buffer.vndr_ie_list[0].vndr_ie_data.id = 0xdd; -- ie_setbuf->vndr_ie_buffer.vndr_ie_list[0].vndr_ie_data.len = -- ( uint8_t )(length + sizeof(ie_setbuf->vndr_ie_buffer.vndr_ie_list[0].vndr_ie_data.oui) + 1); /* +1: one byte for sub type */ -- -- /* Stop lint warning about vndr_ie_list array element not yet being defined */ -- memcpy(ie_setbuf->vndr_ie_buffer.vndr_ie_list[0].vndr_ie_data.oui, oui, (size_t)WIFI_IE_OUI_LENGTH); -- -- ie_setbuf->vndr_ie_buffer.vndr_ie_list[0].vndr_ie_data.data[0] = subtype; -- -- memcpy(&ie_setbuf->vndr_ie_buffer.vndr_ie_list[0].vndr_ie_data.data[1], data, length); -- -- RETURN_WITH_ASSERT(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); --} -- --uint32_t whd_wifi_send_action_frame(whd_interface_t ifp, whd_af_params_t *af_params) --{ -- whd_buffer_t buffer; -- whd_af_params_t *af_frame; -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- af_frame = (whd_af_params_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, WL_WIFI_AF_PARAMS_SIZE, -- IOVAR_STR_ACTION_FRAME); -- CHECK_IOCTL_BUFFER (af_frame); -- memcpy(af_frame, af_params, WL_WIFI_AF_PARAMS_SIZE); -- RETURN_WITH_ASSERT(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); --} -- --uint32_t whd_wifi_set_ioctl_value(whd_interface_t ifp, uint32_t ioctl, uint32_t value) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)sizeof(value) ); -- CHECK_IOCTL_BUFFER(data); -- *data = htod32(value); -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, ioctl, buffer, 0) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_ioctl_value(whd_interface_t ifp, uint32_t ioctl, uint32_t *value) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- CHECK_IOCTL_BUFFER(whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)sizeof(*value) ) ); -- CHECK_RETURN_UNSUPPORTED_OK(whd_cdc_send_ioctl(ifp, CDC_GET, ioctl, buffer, &response) ); -- -- *value = dtoh32(*(uint32_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response) ); -- -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_ioctl_buffer(whd_interface_t ifp, uint32_t ioctl, void *in_buffer, uint16_t in_buffer_length) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, in_buffer_length); -- CHECK_IOCTL_BUFFER(data); -- -- memcpy(data, in_buffer, in_buffer_length); -- -- CHECK_RETURN(whd_cdc_send_ioctl(ifp, CDC_SET, ioctl, buffer, NULL) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_ioctl_buffer(whd_interface_t ifp, uint32_t ioctl, uint8_t *out_buffer, uint16_t out_length) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- whd_buffer_t response; -- whd_result_t result; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- data = (uint32_t *)whd_cdc_get_ioctl_buffer(whd_driver, &buffer, out_length); -- CHECK_IOCTL_BUFFER(data); -- memcpy(data, out_buffer, out_length); -- -- result = whd_cdc_send_ioctl(ifp, CDC_GET, ioctl, buffer, &response); -- -- /* it worked: copy the result to the output buffer */ -- if (WHD_SUCCESS == result) -- { -- data = (uint32_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- *data = dtoh32(*data); -- memcpy(out_buffer, data, out_length); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- -- CHECK_RETURN(result); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_iovar_void(whd_interface_t ifp, const char *iovar) --{ -- whd_buffer_t buffer; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)0, iovar); -- -- return whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL); --} -- --uint32_t whd_wifi_set_iovar_value(whd_interface_t ifp, const char *iovar, uint32_t value) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)sizeof(value), iovar); -- CHECK_IOCTL_BUFFER(data); -- *data = htod32(value); -- return whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL); --} -- --uint32_t whd_wifi_get_iovar_value(whd_interface_t ifp, const char *iovar, uint32_t *value) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- CHECK_IOCTL_BUFFER(whd_cdc_get_iovar_buffer(whd_driver, &buffer, 4, iovar) ); -- CHECK_RETURN_UNSUPPORTED_OK(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- *value = dtoh32(*(uint32_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_iovar_buffer(whd_interface_t ifp, const char *iovar, void *in_buffer, uint16_t in_buffer_length) --{ -- return whd_wifi_set_iovar_buffers(ifp, iovar, (const void **)&in_buffer, (const uint16_t *)&in_buffer_length, 1); --} -- --uint32_t whd_wifi_get_iovar_buffer(whd_interface_t ifp, const char *iovar_name, uint8_t *out_buffer, -- uint16_t out_length) --{ -- uint32_t *data; -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_result_t result; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)out_length, iovar_name); -- CHECK_IOCTL_BUFFER(data); -- -- result = whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response); -- -- /* it worked: copy the result to the output buffer */ -- if (WHD_SUCCESS == result) -- { -- data = (uint32_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- *data = dtoh32(*data); -- memcpy(out_buffer, data, out_length); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- -- return result; --} -- --/* -- * format an iovar buffer -- */ --static whd_result_t --whd_iovar_mkbuf(const char *name, char *data, uint32_t datalen, char *iovar_buf, uint16_t buflen) --{ -- uint32_t iovar_len; -- -- iovar_len = strlen(name) + 1; -- -- /* check for overflow */ -- if ( (iovar_len + datalen) > buflen ) -- { -- return WHD_BADARG; -- } -- -- /* copy data to the buffer past the end of the iovar name string */ -- if (datalen > 0) -- memmove(&iovar_buf[iovar_len], data, datalen); -- -- /* copy the name to the beginning of the buffer */ -- strncpy(iovar_buf, name, (iovar_len - 1) ); -- -- return WHD_SUCCESS; --} -- --whd_result_t whd_wifi_get_iovar_buffer_with_param(whd_interface_t ifp, const char *iovar_name, void *param, -- uint32_t paramlen, uint8_t *out_buffer, uint32_t out_length) --{ -- uint32_t *data; -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_result_t result; -- whd_driver_t whd_driver; -- -- if (!ifp || !iovar_name || !param || !out_buffer) -- { -- WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n", -- __func__, __LINE__) ); -- return WHD_WLAN_BADARG; -- } -- -- whd_driver = (whd_driver_t)ifp->whd_driver; -- -- /* Format the input string */ -- result = whd_iovar_mkbuf(iovar_name, param, paramlen, (char *)out_buffer, (uint16_t)out_length); -- if (result != WHD_SUCCESS) -- return result; -- -- data = whd_cdc_get_ioctl_buffer(whd_driver, &buffer, (uint16_t)out_length); -- -- if (data == NULL) -- return WHD_WLAN_NOMEM; -- -- memcpy(data, out_buffer, out_length); -- -- result = (whd_result_t)whd_cdc_send_ioctl(ifp, CDC_GET, WLC_GET_VAR, buffer, &response); -- -- if (result == WHD_SUCCESS) -- { -- memcpy(out_buffer, whd_buffer_get_current_piece_data_pointer(whd_driver, response), -- (size_t)MIN_OF(whd_buffer_get_current_piece_size(whd_driver, response), out_length) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- } -- -- return result; --} -- --uint32_t whd_wifi_set_iovar_buffers(whd_interface_t ifp, const char *iovar, const void **in_buffers, -- const uint16_t *lengths, const uint8_t num_buffers) --{ -- whd_buffer_t buffer; -- uint32_t *data; -- int tot_in_buffer_length = 0; -- uint8_t buffer_num = 0; -- whd_driver_t whd_driver = ifp->whd_driver; -- -- /* get total length of all buffers: they will be copied into memory one after the other. */ -- for (; buffer_num < num_buffers; buffer_num++) -- { -- tot_in_buffer_length += lengths[buffer_num]; -- } -- -- /* get a valid buffer */ -- data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)tot_in_buffer_length, iovar); -- CHECK_IOCTL_BUFFER(data); -- -- /* copy all data into buffer */ -- for (buffer_num = 0; buffer_num < num_buffers; buffer_num++) -- { -- memcpy(data, in_buffers[buffer_num], lengths[buffer_num]); -- data += lengths[buffer_num]; -- } -- -- /* send iovar */ -- return whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL); --} -- --uint32_t whd_wifi_get_clm_version(whd_interface_t ifp, char *version, uint8_t length) --{ -- whd_result_t result; -- -- CHECK_IFP_NULL(ifp); -- -- if (version == NULL) -- return WHD_BADARG; -- -- version[0] = '\0'; -- -- result = whd_wifi_get_iovar_buffer(ifp, IOVAR_STR_CLMVER, (uint8_t *)version, length); -- if ( (result == WHD_SUCCESS) && version[0] ) -- { -- uint8_t version_length; -- char *p; -- -- version_length = strlen(version); -- -- /* -2 becase \0 termination needs a char and strlen doesn't include length of \0 */ -- if (version_length > length - 2) -- version_length = length - 2; -- version[version_length + 1] = '\0'; -- -- /* Replace all newline/linefeed characters with space character */ -- p = version; -- while ( (p = strchr(p, '\n') ) != NULL ) -- { -- *p = ' '; -- } -- } -- -- CHECK_RETURN(result); -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_wifi_version(whd_interface_t ifp, char *buf, uint8_t length) --{ -- whd_result_t result; -- uint8_t ver_len; -- -- CHECK_IFP_NULL(ifp); -- -- if (buf == NULL) -- return WHD_BADARG; -- -- result = whd_wifi_get_iovar_buffer(ifp, IOVAR_STR_VERSION, (uint8_t *)buf, length); -- -- ver_len = strlen(buf); -- -- if (ver_len > length - 2) -- ver_len = length - 2; -- -- if ( (ver_len > 1) && (buf[ver_len + 1] == '\n') ) -- { -- buf[ver_len + 1] = '\0'; -- } -- -- CHECK_RETURN(result); -- return WHD_SUCCESS; --} -- --uint32_t whd_network_get_ifidx_from_ifp(whd_interface_t ifp, uint8_t *ifidx) --{ -- CHECK_IFP_NULL(ifp); -- -- if (!ifidx) -- return WHD_BADARG; -- -- *ifidx = ifp->ifidx; -- -- return WHD_SUCCESS; --} -- --uint32_t whd_network_get_bsscfgidx_from_ifp(whd_interface_t ifp, uint8_t *bsscfgidx) --{ -- CHECK_IFP_NULL(ifp); -- -- if (!bsscfgidx) -- return WHD_BADARG; -- -- *bsscfgidx = ifp->bsscfgidx; -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_ap_set_beacon_interval(whd_interface_t ifp, uint16_t interval) --{ -- CHECK_IFP_NULL(ifp); -- -- CHECK_RETURN(whd_wifi_set_ioctl_value(ifp, WLC_SET_BCNPRD, interval) ); -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_ap_set_dtim_interval(whd_interface_t ifp, uint16_t interval) --{ -- CHECK_IFP_NULL(ifp); -- -- CHECK_RETURN(whd_wifi_set_ioctl_value(ifp, WLC_SET_DTIMPRD, interval) ); -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_get_bss_info(whd_interface_t ifp, wl_bss_info_t *bi) --{ -- whd_buffer_t buffer, response; -- uint32_t result; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- CHECK_DRIVER_NULL(whd_driver); -- -- if (bi == NULL) -- return WHD_BADARG; -- -- if (whd_cdc_get_ioctl_buffer(whd_driver, &buffer, WLC_IOCTL_SMLEN) == NULL) -- { -- WPRINT_WHD_INFO( ("%s: Unable to malloc WLC_GET_BSS_INFO buffer\n", __FUNCTION__) ); -- return WHD_SUCCESS; -- } -- result = whd_cdc_send_ioctl(ifp, CDC_GET, WLC_GET_BSS_INFO, buffer, &response); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_INFO( ("%s: WLC_GET_BSS_INFO Failed\n", __FUNCTION__) ); -- return result; -- } -- -- memcpy(bi, whd_buffer_get_current_piece_data_pointer(whd_driver, response) + 4, sizeof(wl_bss_info_t) ); -- -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- -- return WHD_SUCCESS; --} -- --uint32_t whd_wifi_set_coex_config(whd_interface_t ifp, whd_coex_config_t *coex_config) --{ -- return whd_wifi_set_iovar_buffer(ifp, IOVAR_STR_BTC_LESCAN_PARAMS, &coex_config->le_scan_params, -- sizeof(whd_btc_lescan_params_t) ); --} -- --/* -- * ARP Offload version -- * ARP version in the WLAN Firmware -- * -- * @param[in] ifp - whd interface Instance -- * @param[out] version - pointer to store version # -- * -- * @return @ref whd_result_t -- */ --whd_result_t whd_arp_version(whd_interface_t ifp, uint32_t *value) --{ -- CHECK_IFP_NULL(ifp); -- -- return whd_wifi_get_iovar_value(ifp, IOVAR_STR_ARP_VERSION, value); --} -- --whd_result_t whd_arp_peerage_get(whd_interface_t ifp, uint32_t *value) --{ -- CHECK_IFP_NULL(ifp); -- -- return whd_wifi_get_iovar_value(ifp, IOVAR_STR_ARP_PEERAGE, value); --} -- --whd_result_t whd_arp_peerage_set(whd_interface_t ifp, uint32_t value) --{ -- CHECK_IFP_NULL(ifp); -- -- return whd_wifi_set_iovar_value(ifp, IOVAR_STR_ARP_PEERAGE, value); --} -- --whd_result_t whd_arp_arpoe_get(whd_interface_t ifp, uint32_t *value) --{ -- CHECK_IFP_NULL(ifp); -- -- return whd_wifi_get_iovar_value(ifp, IOVAR_STR_ARPOE, value); --} -- --whd_result_t whd_arp_arpoe_set(whd_interface_t ifp, uint32_t value) --{ -- CHECK_IFP_NULL(ifp); -- -- return whd_wifi_set_iovar_value(ifp, IOVAR_STR_ARPOE, value); --} -- --whd_result_t whd_arp_cache_clear(whd_interface_t ifp) --{ -- whd_result_t whd_ret; -- CHECK_IFP_NULL(ifp); -- -- whd_ret = whd_wifi_set_iovar_void(ifp, IOVAR_STR_ARP_TABLE_CLEAR); -- return whd_ret; --} -- --whd_result_t whd_arp_features_get(whd_interface_t ifp, uint32_t *features) --{ -- if ( (ifp == NULL) || (features == NULL) ) -- { -- return WHD_BADARG; -- } -- -- if (whd_wifi_get_iovar_buffer(ifp, IOVAR_STR_ARP_OL, (uint8_t *)features, sizeof(uint32_t) ) != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get arp_ol for features\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- -- return WHD_SUCCESS; --} -- --whd_result_t whd_arp_features_set(whd_interface_t ifp, uint32_t features) --{ -- CHECK_IFP_NULL(ifp); -- -- return whd_wifi_set_iovar_buffer(ifp, IOVAR_STR_ARP_OL, (uint8_t *)&features, sizeof(features) ); --} -- --whd_result_t whd_arp_features_print(uint32_t features, const char *title) --{ -- if (title != NULL) -- { -- WPRINT_MACRO( ("%s\n", title) ); -- } -- WPRINT_MACRO( (" features : 0x%x\n", (int)features) ); -- WPRINT_MACRO( (" agent_enabled: (0x%x) %s\n", (int)(features & ARP_OL_AGENT), -- (features & ARP_OL_AGENT) ? "Enabled" : " disabled") ); -- WPRINT_MACRO( (" snoop_enabled: (0x%x) %s\n", (int)(features & ARP_OL_SNOOP), -- (features & ARP_OL_SNOOP) ? "Enabled" : " disabled") ); -- WPRINT_MACRO( (" host_auto_reply_enabled: (0x%x) %s\n", (int)(features & ARP_OL_HOST_AUTO_REPLY), -- (features & ARP_OL_HOST_AUTO_REPLY) ? "Enabled" : " disabled") ); -- WPRINT_MACRO( (" peer_auto_reply_enabled: (0x%x) %s\n", (int)(features & ARP_OL_PEER_AUTO_REPLY), -- (features & ARP_OL_PEER_AUTO_REPLY) ? "Enabled" : " disabled") ); -- -- return WHD_SUCCESS; --} -- --whd_result_t whd_arp_hostip_list_add(whd_interface_t ifp, uint32_t *host_ipv4_list, uint32_t count) --{ -- uint32_t filled = 0; -- uint32_t current_ipv4_list[ARP_MULTIHOMING_MAX]; -- CHECK_IFP_NULL(ifp); -- -- whd_result_t whd_ret = WHD_SUCCESS; -- if (host_ipv4_list == NULL) -- { -- WPRINT_WHD_ERROR( ("%s() BAD ARGS ifp:%p host_ipv4_list:%u count %d\n", __func__, ifp, (int)host_ipv4_list, -- (int)count) ); -- return WHD_BADARG; -- } -- /* check if unique */ -- whd_ret = whd_arp_hostip_list_get(ifp, ARP_MULTIHOMING_MAX, current_ipv4_list, &filled); -- if ( (whd_ret == WHD_SUCCESS) && (filled > 0) ) -- { -- uint32_t curr_index; -- uint32_t new_index; -- -- for (curr_index = 0; curr_index < filled; curr_index++) -- { -- for (new_index = 0; new_index < count; new_index++) -- { -- WPRINT_WHD_DEBUG( ("%s() curr:%ld of %ld curr:0x%lx new:%ld of %ld:0x%lx\n", __func__, curr_index, -- filled, current_ipv4_list[curr_index], -- new_index, count, host_ipv4_list[new_index]) ); -- if (current_ipv4_list[curr_index] == host_ipv4_list[new_index]) -- { -- /* decrement count */ -- count--; -- if (new_index < count) -- { -- /* copy next one down */ -- WPRINT_WHD_DEBUG( ("move %ld (+1) of %ld \n", new_index, count) ); -- host_ipv4_list[new_index] = host_ipv4_list[new_index + 1]; -- -- } -- break; -- } -- } -- } -- } -- else if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("%s() whd_arp_hostip_list_get() failed:%d\n", __func__, (int)whd_ret) ); -- } -- -- if (count > 0) -- { -- uint32_t new_index; -- WPRINT_WHD_DEBUG( ("%s() whd_wifi_set_iovar_buffer( %p, %lx)\n", __func__, host_ipv4_list, count) ); -- for (new_index = 0; new_index < count; new_index++) -- { -- WPRINT_WHD_DEBUG( (" 0x%lx\n", host_ipv4_list[new_index]) ); -- } -- whd_ret = whd_wifi_set_iovar_buffer(ifp, IOVAR_STR_ARP_HOSTIP, host_ipv4_list, (count * sizeof(uint32_t) ) ); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("Failed to set arp_hostip 0x%x error:%d\n", (int)host_ipv4_list[0], (int)whd_ret) ); -- } -- } -- return whd_ret; --} -- --whd_result_t whd_arp_hostip_list_add_string(whd_interface_t ifp, const char *ip_addr) --{ -- /* convert string to uint32_t */ -- uint32_t addr; -- CHECK_IFP_NULL(ifp); -- -- whd_str_to_ip(ip_addr, strlen(ip_addr), &addr); -- -- return whd_arp_hostip_list_add(ifp, &addr, 1); --} -- --whd_result_t whd_arp_hostip_list_clear_id(whd_interface_t ifp, uint32_t ipv4_addr) --{ -- whd_result_t whd_ret; -- uint32_t filled; -- uint32_t host_ipv4_list[ARP_MULTIHOMING_MAX]; -- CHECK_IFP_NULL(ifp); -- -- if (ipv4_addr == 0x00l) -- { -- return WHD_BADARG; -- } -- memset(host_ipv4_list, 0x00, sizeof(host_ipv4_list) ); -- whd_ret = whd_arp_hostip_list_get(ifp, ARP_MULTIHOMING_MAX, host_ipv4_list, &filled); -- if ( (whd_ret == WHD_SUCCESS) && (filled > 0) ) -- { -- uint32_t index; -- -- /* clear the list in the WLAN processor */ -- whd_ret = whd_wifi_set_iovar_void(ifp, IOVAR_STR_ARP_HOSTIP_CLEAR); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%d %s() whd_wifi_set_iovar_void() failed:%d\n", __LINE__, __func__, (int)whd_ret) ); -- return whd_ret; -- } -- -- /* remove the one address from the list and re-write arp_hostip list */ -- for (index = 0; index < filled; index++) -- { -- WPRINT_WHD_DEBUG( ("%d %s() drop() 0x%lx == 0x%lx ? %s\n", __LINE__, __func__, host_ipv4_list[index], -- ipv4_addr, (host_ipv4_list[index] == ipv4_addr) ? "DROP" : "") ); -- if (host_ipv4_list[index] == ipv4_addr) -- { -- uint32_t drop; -- /* drop this one, move rest up */ -- for (drop = index; drop < (filled - 1); drop++) -- { -- host_ipv4_list[drop] = host_ipv4_list[drop + 1]; -- } -- filled--; -- /* IP addresses must be added one at a time */ -- for (drop = 0; drop < filled; drop++) -- { -- whd_ret = whd_arp_hostip_list_add(ifp, &host_ipv4_list[drop], sizeof(uint32_t) ); -- } -- break; -- } -- } -- } -- else if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_DEBUG( ("%s() whd_arp_hostip_list_get() failed:%d\n", __func__, (int)whd_ret) ); -- } -- return WHD_SUCCESS; --} -- --whd_result_t whd_arp_hostip_list_clear_id_string(whd_interface_t ifp, const char *ip_addr) --{ -- /* convert string to uint32_t */ -- uint32_t addr; -- CHECK_IFP_NULL(ifp); -- -- whd_str_to_ip(ip_addr, strlen(ip_addr), &addr); -- -- return whd_arp_hostip_list_clear_id(ifp, addr); --} -- --whd_result_t whd_arp_hostip_list_clear(whd_interface_t ifp) --{ -- CHECK_IFP_NULL(ifp); -- return whd_wifi_set_iovar_void(ifp, IOVAR_STR_ARP_HOSTIP_CLEAR); --} -- --whd_result_t whd_arp_hostip_list_get(whd_interface_t ifp, uint32_t count, uint32_t *host_ipv4_list, uint32_t *filled) --{ -- whd_result_t whd_ret = WHD_SUCCESS; -- uint32_t temp[ARP_MULTIHOMING_MAX]; -- arp_ol_stats_t arp_stats; /* WL struct, not ours! */ -- CHECK_IFP_NULL(ifp); -- -- if ( (host_ipv4_list == NULL) || (filled == NULL) ) -- { -- return WHD_BADARG; -- } -- -- /* set up the buffer to retrieve the stats data */ -- memset(&arp_stats, 0x00, sizeof(arp_ol_stats_t) ); -- whd_ret = whd_wifi_get_iovar_buffer(ifp, "arp_stats", (uint8_t *)&arp_stats, sizeof(arp_ol_stats_t) ); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get arp_stats\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- -- *filled = 0; -- whd_ret = whd_wifi_get_iovar_buffer(ifp, IOVAR_STR_ARP_HOSTIP, (uint8_t *)&temp, sizeof(temp) ); -- /* transfer the info */ -- if (whd_ret == WHD_SUCCESS) -- { -- uint32_t index; -- for (index = 0; (index < count) && (index < arp_stats.host_ip_entries); index++) -- { -- /* only IPv4 !!! */ -- if (htod32(temp[index]) != 0L) -- { -- host_ipv4_list[*filled] = temp[index]; -- *filled = *filled + 1; -- } -- } -- } -- return whd_ret; --} -- --whd_result_t whd_arp_stats_clear(whd_interface_t ifp) --{ -- whd_result_t whd_ret; -- CHECK_IFP_NULL(ifp); -- whd_ret = whd_wifi_set_iovar_void(ifp, IOVAR_STR_ARP_STATS_CLEAR); -- return whd_ret; --} -- --whd_result_t whd_arp_stats_get(whd_interface_t ifp, whd_arp_stats_t *arp_stats) --{ -- whd_result_t whd_ret; -- uint32_t filled; -- static whd_arp_stats_t arp_stats_test; /* read twice to make sure we match */ -- CHECK_IFP_NULL(ifp); -- -- if (arp_stats == NULL) -- { -- return WHD_BADARG; -- } -- -- /* set up the buffer to retreive the data */ -- memcpy(&arp_stats_test, arp_stats, sizeof(whd_arp_stats_t) ); -- memset(arp_stats, 0xFF, sizeof(whd_arp_stats_t) ); -- -- /* read multiple times to make sure we got valid data */ -- do -- { -- /* get them until they match */ -- whd_ret = -- whd_wifi_get_iovar_buffer(ifp, IOVAR_STR_ARP_STATS, (uint8_t *)&arp_stats->stats, -- sizeof(arp_ol_stats_t) ); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get arp_stats\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- /* get all feature info in one call */ -- whd_ret = -- whd_wifi_get_iovar_buffer(ifp, IOVAR_STR_ARP_OL, (uint8_t *)&arp_stats->features_enabled, -- sizeof(arp_stats->features_enabled) ); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get arp_ol\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- whd_ret = whd_wifi_get_iovar_value(ifp, IOVAR_STR_ARP_VERSION, &(arp_stats->version) ); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get arp_version\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- whd_ret = whd_wifi_get_iovar_value(ifp, IOVAR_STR_ARP_PEERAGE, &(arp_stats->peerage) ); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get arp_peerage\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- whd_ret = whd_wifi_get_iovar_value(ifp, IOVAR_STR_ARPOE, &(arp_stats->arpoe) ); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get some settings\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- -- /* set endian correctly */ -- arp_stats->stats.host_ip_entries = dtoh32(arp_stats->stats.host_ip_entries); -- arp_stats->stats.host_ip_overflow = dtoh32(arp_stats->stats.host_ip_overflow); -- arp_stats->stats.arp_table_entries = dtoh32(arp_stats->stats.arp_table_entries); -- arp_stats->stats.arp_table_overflow = dtoh32(arp_stats->stats.arp_table_overflow); -- arp_stats->stats.host_request = dtoh32(arp_stats->stats.host_request); -- arp_stats->stats.host_reply = dtoh32(arp_stats->stats.host_reply); -- arp_stats->stats.host_service = dtoh32(arp_stats->stats.host_service); -- arp_stats->stats.peer_request = dtoh32(arp_stats->stats.peer_request); -- arp_stats->stats.peer_request_drop = dtoh32(arp_stats->stats.peer_request_drop); -- arp_stats->stats.peer_reply = dtoh32(arp_stats->stats.peer_reply); -- arp_stats->stats.peer_reply_drop = dtoh32(arp_stats->stats.peer_reply_drop); -- arp_stats->stats.peer_service = dtoh32(arp_stats->stats.peer_service); -- -- whd_ret = whd_arp_hostip_list_get(ifp, ARP_MULTIHOMING_MAX, arp_stats->host_ip_list, &filled); -- if (whd_ret != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s() failed to get host_ip_list\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- -- if (memcmp(&arp_stats_test, arp_stats, sizeof(whd_arp_stats_t) ) == 0) -- { -- break; -- } -- -- memcpy(&arp_stats_test, arp_stats, sizeof(whd_arp_stats_t) ); -- } while (1); -- -- return whd_ret; --} -- --whd_result_t whd_arp_stats_print(whd_arp_stats_t *arp_stats, const char *title) --{ -- uint32_t index; -- -- if (arp_stats == NULL) -- { -- return WHD_BADARG; -- } -- -- if (title != NULL) -- { -- WPRINT_MACRO( ("%s\n", title) ); -- } -- WPRINT_MACRO( (" version: 0x%lx\n", (unsigned long int)arp_stats->version) ); -- WPRINT_MACRO( (" host_ip_entries: %d\n", (int)arp_stats->stats.host_ip_entries) ); -- WPRINT_MACRO( (" host_ip_overflow: %d\n", (int)arp_stats->stats.host_ip_overflow) ); -- WPRINT_MACRO( (" arp_table_entries: %d\n", (int)arp_stats->stats.arp_table_entries) ); -- WPRINT_MACRO( (" arp_table_overflow: %d\n", (int)arp_stats->stats.arp_table_overflow) ); -- WPRINT_MACRO( (" host_request: %d\n", (int)arp_stats->stats.host_request) ); -- WPRINT_MACRO( (" host_reply: %d\n", (int)arp_stats->stats.host_reply) ); -- WPRINT_MACRO( (" host_service: %d\n", (int)arp_stats->stats.host_service) ); -- WPRINT_MACRO( (" peer_request: %d\n", (int)arp_stats->stats.peer_request) ); -- WPRINT_MACRO( (" peer_request_drop: %d\n", (int)arp_stats->stats.peer_request_drop) ); -- WPRINT_MACRO( (" peer_reply: %d\n", (int)arp_stats->stats.peer_reply) ); -- WPRINT_MACRO( (" peer_reply_drop: %d\n", (int)arp_stats->stats.peer_reply_drop) ); -- WPRINT_MACRO( (" peer_service: %d\n", (int)arp_stats->stats.peer_service) ); -- WPRINT_MACRO( (" peerage: %d\n", (int)arp_stats->peerage) ); -- WPRINT_MACRO( (" arpoe: %d %s\n", (int)arp_stats->arpoe, -- (arp_stats->arpoe != 0) ? "Enabled" : " disabled") ); -- -- whd_arp_features_print(arp_stats->features_enabled, NULL); -- -- if (arp_stats->stats.host_ip_entries > 0) -- { -- WPRINT_MACRO( ("WLAN Device Host IP entries\n") ); -- for (index = 0; index < arp_stats->stats.host_ip_entries; index++) -- { -- uint32_t ipv4_addr = arp_stats->host_ip_list[index]; -- char ipv4_string[32]; -- memset(ipv4_string, 0x00, sizeof(ipv4_string) ); -- whd_ip4_to_string(&ipv4_addr, ipv4_string); -- WPRINT_MACRO( (" %d of %d IPV4: 0x%x %s\n", (int)index, (int)arp_stats->stats.host_ip_entries, -- (int)arp_stats->host_ip_list[index], ipv4_string) ); -- } -- } -- return WHD_SUCCESS; --} -- --whd_result_t --whd_wifi_toggle_packet_filter(whd_interface_t ifp, uint8_t filter_id, whd_bool_t enable) --{ -- whd_buffer_t buffer; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- wl_pkt_filter_enable_t *data = (wl_pkt_filter_enable_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, -- sizeof(wl_pkt_filter_enable_t), -- IOVAR_STR_PKT_FILTER_ENABLE); -- CHECK_IOCTL_BUFFER(data); -- data->id = (uint32_t)filter_id; -- data->enable = (uint32_t)enable; -- RETURN_WITH_ASSERT(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); --} -- --whd_result_t --whd_pf_enable_packet_filter(whd_interface_t ifp, uint8_t filter_id) --{ -- return whd_wifi_toggle_packet_filter(ifp, filter_id, WHD_TRUE); --} -- --whd_result_t --whd_pf_disable_packet_filter(whd_interface_t ifp, uint8_t filter_id) --{ -- return whd_wifi_toggle_packet_filter(ifp, filter_id, WHD_FALSE); --} -- --whd_result_t --whd_pf_add_packet_filter(whd_interface_t ifp, const whd_packet_filter_t *settings) --{ -- wl_pkt_filter_t *packet_filter; -- whd_driver_t whd_driver; -- whd_buffer_t buffer; -- uint32_t buffer_length = -- (uint32_t)( (2 * (uint32_t)settings->mask_size) + WL_PKT_FILTER_FIXED_LEN + WL_PKT_FILTER_PATTERN_FIXED_LEN ); -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- packet_filter = (wl_pkt_filter_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)buffer_length, -- IOVAR_STR_PKT_FILTER_ADD); -- CHECK_IOCTL_BUFFER(packet_filter); -- -- /* Copy filter entries */ -- packet_filter->id = settings->id; -- packet_filter->type = 0; -- packet_filter->negate_match = settings->rule; -- packet_filter->u.pattern.offset = (uint32_t)settings->offset; -- packet_filter->u.pattern.size_bytes = settings->mask_size; -- -- /* Copy mask */ -- memcpy(packet_filter->u.pattern.mask_and_pattern, settings->mask, settings->mask_size); -- -- /* Copy filter pattern */ -- memcpy(packet_filter->u.pattern.mask_and_pattern + settings->mask_size, settings->pattern, settings->mask_size); -- -- RETURN_WITH_ASSERT(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); --} -- --whd_result_t --whd_pf_remove_packet_filter(whd_interface_t ifp, uint8_t filter_id) --{ -- whd_buffer_t buffer; -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- uint32_t *data = (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(uint32_t), -- IOVAR_STR_PKT_FILTER_DELETE); -- CHECK_IOCTL_BUFFER(data); -- *data = (uint32_t)filter_id; -- RETURN_WITH_ASSERT(whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL) ); --} -- --whd_result_t --whd_pf_get_packet_filter_stats(whd_interface_t ifp, uint8_t filter_id, whd_pkt_filter_stats_t *stats) --{ -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_driver_t whd_driver; -- -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- uint32_t *data = -- (uint32_t *)whd_cdc_get_iovar_buffer(whd_driver, &buffer, sizeof(uint32_t) + sizeof(wl_pkt_filter_stats_t), -- IOVAR_STR_PKT_FILTER_STATS); -- CHECK_IOCTL_BUFFER(data); -- -- memset(data, 0, sizeof(uint32_t) + sizeof(wl_pkt_filter_stats_t) ); -- *data = (uint32_t)filter_id; -- -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- memcpy( (char *)stats, (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, response), -- (sizeof(wl_pkt_filter_stats_t) ) ); -- -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_TX) ); -- -- return WHD_SUCCESS; --} -- --whd_result_t --whd_wifi_clear_packet_filter_stats(whd_interface_t ifp, uint32_t filter_id) --{ -- RETURN_WITH_ASSERT(whd_wifi_set_iovar_value(ifp, IOVAR_STR_PKT_FILTER_CLEAR_STATS, (uint32_t)filter_id) ); --} -- --whd_result_t --whd_pf_get_packet_filter_mask_and_pattern(whd_interface_t ifp, uint8_t filter_id, uint32_t max_size, uint8_t *mask, -- uint8_t *pattern, uint32_t *size_out) --{ -- whd_bool_t enabled_list; -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- for (enabled_list = WHD_FALSE; enabled_list <= WHD_TRUE; enabled_list++) -- { -- -- whd_buffer_t buffer; -- whd_buffer_t response; -- uint32_t *data; -- wl_pkt_filter_list_t *filter_list; -- wl_pkt_filter_t *filter_ptr; -- uint32_t i; -- wl_pkt_filter_t *in_filter; -- -- data = whd_cdc_get_iovar_buffer(whd_driver, &buffer, PACKET_FILTER_LIST_BUFFER_MAX_LEN, -- IOVAR_STR_PKT_FILTER_LIST); -- CHECK_IOCTL_BUFFER(data); -- *data = (uint32_t)enabled_list; -- -- CHECK_RETURN(whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response) ); -- -- filter_list = (wl_pkt_filter_list_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- filter_ptr = filter_list->filter; -- for (i = 0; i < filter_list->num; i++) -- { -- in_filter = filter_ptr; -- -- if (in_filter->id == filter_id) -- { -- *size_out = MIN_OF(in_filter->u.pattern.size_bytes, max_size); -- memcpy (mask, in_filter->u.pattern.mask_and_pattern, *size_out); -- memcpy (pattern, in_filter->u.pattern.mask_and_pattern + in_filter->u.pattern.size_bytes, *size_out); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_RX) ); -- if (*size_out < in_filter->u.pattern.size_bytes) -- { -- return WHD_PARTIAL_RESULTS; -- } -- return WHD_SUCCESS; -- } -- -- /* Update WL filter pointer */ -- filter_ptr = -- (wl_pkt_filter_t *)( (char *)filter_ptr + -- (WL_PKT_FILTER_FIXED_LEN + WL_PKT_FILTER_PATTERN_FIXED_LEN + 2 * -- in_filter->u.pattern.size_bytes) ); -- -- /* WLAN returns word-aligned filter list */ -- filter_ptr = (wl_pkt_filter_t *)ROUND_UP( (unsigned long)filter_ptr, 4 ); -- } -- } -- return WHD_FILTER_NOT_FOUND; --} -- --/* Set/Get TKO retry & interval parameters */ --whd_result_t --whd_tko_param(whd_interface_t ifp, whd_tko_retry_t *whd_retry, int set) --{ -- uint32_t len = 0; -- uint8_t *data = NULL; -- wl_tko_t *tko = NULL; -- whd_buffer_t buffer; -- whd_buffer_t response; -- wl_tko_param_t *wl_param_p = NULL; -- whd_result_t result = WHD_SUCCESS; -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- len = (int)(WHD_PAYLOAD_MTU - strlen(IOVAR_STR_TKO) - 1); -- data = (uint8_t * )whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)len, IOVAR_STR_TKO); -- if (data == NULL) -- { -- WPRINT_WHD_ERROR( ("%s: Failed to get iovar buf\n", __func__) ); -- return WHD_IOCTL_FAIL; -- } -- -- tko = (wl_tko_t *)data; -- tko->subcmd_id = WL_TKO_SUBCMD_PARAM; -- tko->len = TKO_DATA_OFFSET; -- wl_param_p = (wl_tko_param_t *)tko->data; -- tko->len += sizeof(wl_tko_param_t); -- -- tko->subcmd_id = htod16(tko->subcmd_id); -- tko->len = htod16(tko->len); -- -- if (set) -- { -- /* SET parameters */ -- -- /* Set defaults if needed */ -- wl_param_p->interval = whd_retry->tko_interval == -- 0 ? TCP_KEEPALIVE_OFFLOAD_INTERVAL_SEC : whd_retry->tko_interval; -- wl_param_p->retry_count = whd_retry->tko_retry_count == -- 0 ? TCP_KEEPALIVE_OFFLOAD_RETRY_COUNT : whd_retry->tko_retry_count; -- wl_param_p->retry_interval = whd_retry->tko_retry_interval == -- 0 ? TCP_KEEPALIVE_OFFLOAD_RETRY_INTERVAL_SEC : whd_retry->tko_retry_interval; -- -- result = whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: Cannot set params\n", __func__) ); -- } -- } -- else -- { -- /* GET paramters */ -- wl_tko_param_t tko_param_real; -- -- result = whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response); -- if (result == WHD_SUCCESS) -- { -- wl_param_p = &tko_param_real; -- memcpy( (char *)wl_param_p, -- (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, response) + TKO_DATA_OFFSET, -- (sizeof(wl_tko_param_t) ) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_TX) ); -- -- /* Copy items from wl level struct to higher level struct */ -- whd_retry->tko_interval = wl_param_p->interval; -- whd_retry->tko_retry_interval = wl_param_p->retry_interval; -- whd_retry->tko_retry_count = wl_param_p->retry_count; -- } -- else -- { -- WPRINT_WHD_ERROR( ("%s: Cannot get params.\n", __func__) ); -- } -- } -- -- return result; --} -- --/* Query Status */ --whd_result_t --whd_tko_get_status(whd_interface_t ifp, whd_tko_status_t *whd_status) --{ -- whd_result_t result = WHD_SUCCESS; -- uint32_t len = 0; -- uint8_t *data = NULL; -- wl_tko_t *tko = NULL; -- whd_buffer_t buffer; -- whd_buffer_t response; -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- /* Get a buffer */ -- len = (int)(100 - strlen(IOVAR_STR_TKO) - 1); -- data = (uint8_t * )whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)len, IOVAR_STR_TKO); -- CHECK_IOCTL_BUFFER(data); -- -- /* Fill buffer with request */ -- tko = (wl_tko_t *)data; -- tko->subcmd_id = WL_TKO_SUBCMD_STATUS; -- tko->len = TKO_DATA_OFFSET; -- -- tko->len += sizeof(wl_tko_status_t); -- -- tko->subcmd_id = htod16(tko->subcmd_id); -- tko->len = htod16(tko->len); -- -- /* Make request and get result */ -- result = whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: send iovar failed\n", __func__) ); -- return result; -- } -- -- /* Parse result */ -- tko = (wl_tko_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- len = htod16(tko->len); -- -- if (len >= MAX_TKO_CONN + 1) /* MAX_TKO status's + 1 for the count */ -- { -- memcpy(whd_status, tko->data, MAX_TKO_CONN + 1); -- } -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_TX) ); -- return result; --} -- --/* Query FW for number tko max tcp connections */ --whd_result_t --whd_tko_max_assoc(whd_interface_t ifp, uint8_t *max) --{ -- uint32_t len = 0; -- uint8_t *data = NULL; -- wl_tko_t *tko = NULL; -- whd_buffer_t buffer; -- whd_buffer_t response; -- wl_tko_max_tcp_t *tko_max_tcp = NULL; -- wl_tko_max_tcp_t tcp_result; -- whd_driver_t whd_driver; -- whd_result_t result = WHD_SUCCESS; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- len = (int)(100 - strlen(IOVAR_STR_TKO) - 1); -- data = (uint8_t * )whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)len, IOVAR_STR_TKO); -- CHECK_IOCTL_BUFFER(data); -- -- tko = (wl_tko_t *)data; -- -- tko->subcmd_id = WL_TKO_SUBCMD_MAX_TCP; -- tko->len = TKO_DATA_OFFSET; -- -- tko_max_tcp = (wl_tko_max_tcp_t *)tko->data; -- tko->len += sizeof(wl_tko_max_tcp_t); -- -- tko->subcmd_id = htod16(tko->subcmd_id); -- tko->len = htod16(tko->len); -- -- result = whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: send iovar failed\n", __func__) ); -- return result; -- } -- tko_max_tcp = &tcp_result; -- memcpy( (char *)tko_max_tcp, -- (char *)whd_buffer_get_current_piece_data_pointer(whd_driver, response) + TKO_DATA_OFFSET, -- (sizeof(wl_tko_max_tcp_t) ) ); -- CHECK_RETURN(whd_buffer_release(whd_driver, response, WHD_NETWORK_TX) ); -- -- *max = tko_max_tcp->max; -- return WHD_SUCCESS; --} -- --/* Exercise GET of wl_tko_connect_t IOVAR */ --/* Given a index, return info about that index */ --whd_result_t --whd_tko_get_FW_connect(whd_interface_t ifp, uint8_t index, whd_tko_connect_t *whd_connect, uint16_t buflen) --{ -- uint32_t len = 0; -- uint8_t *data = NULL; -- wl_tko_t *tko = NULL; -- wl_tko_connect_t *connect = NULL; -- whd_result_t result = WHD_SUCCESS; -- whd_buffer_t response; -- whd_buffer_t buffer; -- whd_driver_t whd_driver; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- CHECK_DRIVER_NULL(whd_driver); -- -- len = (int)(WHD_PAYLOAD_MTU - strlen(IOVAR_STR_TKO) - 1); -- data = (uint8_t * )whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)len, IOVAR_STR_TKO); -- CHECK_IOCTL_BUFFER(data); -- -- tko = (wl_tko_t *)data; -- -- tko->subcmd_id = WL_TKO_SUBCMD_CONNECT; -- tko->len = offsetof(wl_tko_t, data); -- connect = (wl_tko_connect_t *)tko->data; -- connect->index = index; -- -- tko->subcmd_id = htod16(tko->subcmd_id); -- tko->len = htod16(tko->len); -- -- result = whd_cdc_send_iovar(ifp, CDC_GET, buffer, &response); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: send iovar failed\n", __func__) ); -- return result; -- } -- tko = (wl_tko_t *)whd_buffer_get_current_piece_data_pointer(whd_driver, response); -- tko->subcmd_id = dtoh16(tko->subcmd_id); -- tko->len = dtoh16(tko->len); -- -- if (tko->subcmd_id != WL_TKO_SUBCMD_CONNECT) -- { -- WPRINT_WHD_ERROR( ("%s: IOVAR returned garbage!\n", __func__) ); -- return WHD_BADARG; -- } -- connect = (wl_tko_connect_t *)tko->data; -- if (tko->len >= sizeof(*connect) ) -- { -- connect->local_port = dtoh16(connect->local_port); -- connect->remote_port = dtoh16(connect->remote_port); -- connect->local_seq = dtoh32(connect->local_seq); -- connect->remote_seq = dtoh32(connect->remote_seq); -- if (connect->ip_addr_type != 0) -- { -- WPRINT_WHD_ERROR( ("%s: Address type not IPV4\n", __func__) ); -- return WHD_BADARG; -- } -- if (connect->ip_addr_type == 0) -- { -- /* IPv4 */ -- uint16_t mylen; -- mylen = sizeof(wl_tko_connect_t) + (2 * IPV4_ADDR_LEN) + connect->request_len + connect->response_len; -- if (buflen < mylen) -- { -- WPRINT_WHD_ERROR( ("%s: Buf len (%d) too small , need %d\n", __func__, buflen, mylen) ); -- return WHD_BADARG; -- } -- -- /* -- * Assumes whd_tko_connect_t and wl_tko_connect_t are the same. -- * If/when they become different (due to different FW versions, etc) than -- * this may have to be copied field by field instead. -- */ -- memcpy(whd_connect, connect, MIN_OF(mylen, buflen) ); -- } -- } -- return WHD_SUCCESS; --} -- --whd_result_t --whd_tko_toggle(whd_interface_t ifp, whd_bool_t enable) --{ -- uint32_t len = 0; -- uint8_t *data = NULL; -- wl_tko_t *tko = NULL; -- whd_buffer_t buffer; -- wl_tko_enable_t *tko_enable = NULL; -- whd_driver_t whd_driver; -- whd_result_t result; -- CHECK_IFP_NULL(ifp); -- -- whd_driver = ifp->whd_driver; -- -- -- -- len = (int)(WHD_PAYLOAD_MTU - strlen(IOVAR_STR_TKO) - 1); -- data = (uint8_t * )whd_cdc_get_iovar_buffer(whd_driver, &buffer, (uint16_t)len, IOVAR_STR_TKO); -- CHECK_IOCTL_BUFFER(data); -- -- tko = (wl_tko_t *)data; -- -- tko->subcmd_id = WL_TKO_SUBCMD_ENABLE; -- tko->len = TKO_DATA_OFFSET; -- -- tko_enable = (wl_tko_enable_t *)tko->data; -- tko_enable->enable = enable; -- -- tko->len += sizeof(wl_tko_enable_t); -- -- tko->subcmd_id = htod16(tko->subcmd_id); -- tko->len = htod16(tko->len); -- -- /* invoke SET iovar */ -- result = whd_cdc_send_iovar(ifp, CDC_SET, buffer, NULL); -- if (result != WHD_SUCCESS) -- { -- WPRINT_WHD_ERROR( ("%s: tko %s FAILED\n", __func__, (enable == WHD_TRUE ? "enable" : "disable") ) ); -- return result; -- } -- else -- { -- WPRINT_WHD_ERROR( ("%s: Successfully %s\n", __func__, (enable == WHD_TRUE ? "enabled" : "disabled") ) ); -- } -- return result; --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_p2p.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_p2p.c -deleted file mode 100644 -index 53eea0d341..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/src/whd_wifi_p2p.c -+++ /dev/null -@@ -1,45 +0,0 @@ --/* -- * Copyright 2020 Cypress Semiconductor Corporation -- * SPDX-License-Identifier: Apache-2.0 -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#include "whd_ap.h" --#include "whd_chip_constants.h" --#include "whd_debug.h" --#include "whd_events_int.h" --#include "whd_sdpcm.h" --#include "whd_thread_internal.h" --#include "whd_utils.h" --#include "whd_wifi_api.h" --#include "whd_wifi_p2p.h" -- -- --/****************************************************** --* @cond Constants --******************************************************/ -- --whd_bool_t whd_wifi_p2p_is_go_up(whd_driver_t whd_driver) --{ -- return whd_driver->internal_info.whd_wifi_p2p_go_is_up; --} -- --void whd_wifi_p2p_set_go_is_up(whd_driver_t whd_driver, whd_bool_t is_up) --{ -- if (whd_driver->internal_info.whd_wifi_p2p_go_is_up != is_up) -- { -- whd_driver->internal_info.whd_wifi_p2p_go_is_up = is_up; -- } --} -- -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/version.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/version.txt -deleted file mode 100644 -index 167a59886f..0000000000 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/version.txt -+++ /dev/null -@@ -1 +0,0 @@ --1.91.2.3926 -diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/whd_config.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/whd_config.h -index c0e890ac7f..cc442a6e44 100644 ---- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/whd_config.h -+++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_NICLA_VISION/COMPONENT_WHD/whd_config.h -@@ -22,45 +22,40 @@ - #ifndef __WHD_CONFIG__ - #define __WHD_CONFIG__ - --#include "cyhal_gpio.h" - #include "whd_types.h" - #include "stm32h7xx_hal.h" - #include - --#define WHD_COUNTRY WHD_COUNTRY_AUSTRALIA -- --/* Internal thread config */ --#define WHD_THREAD_STACK_SIZE 5120 --#define WHD_THREAD_PRIORITY osPriorityHigh -+/* disable WPRINT_MACRO */ -+#define WHD_PRINT_DISABLE - - /* please define your configuration , either SDIO or SPI */ - #define CY_WHD_CONFIG_USE_SDIO - //#define CY_WHD_CONFIG_USE_SPI - --/* Set Timeout for your platform */ --#define WLAN_POWER_UP_DELAY_MS 3000 --#define SDIO_ENUMERATION_TIMEOUT_MS 500 -- -+/* select resource implementation */ - #define USES_RESOURCE_GENERIC_FILESYSTEM - --#define BSP_LED1 {GPIOK,{.Pin= GPIO_PIN_5 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} --#define BSP_LED2 {GPIOK,{.Pin= GPIO_PIN_6 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} --#define BSP_LED3 {GPIOK,{.Pin= GPIO_PIN_7 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} -+/* if not defined default value is 2 */ -+#define CY_WIFI_OOB_INTR_PRIORITY 0 - --/* power pin */ --#define WIFI_WL_REG_ON {GPIOJ,{.Pin= GPIO_PIN_1, .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_PULLUP , .Speed= GPIO_SPEED_FREQ_LOW}} --//#define WIFI_32K_CLK {GPIOA,{.Pin= GPIO_PIN_8, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW , .Alternate = GPIO_AF0_MCO}} -+#define CYBSP_WIFI_HOST_WAKE_IRQ_EVENT CYHAL_GPIO_IRQ_FALL -+#define CYBSP_WIFI_HOST_WAKE CYBSP_SDIO_OOB_IRQ - --#define WIFI_SDIO_CMD {GPIOD,{.Pin= GPIO_PIN_7 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_PULLUP , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF11_SDIO2}} --#define WIFI_SDIO_CLK {GPIOC,{.Pin= GPIO_PIN_1 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF9_SDIO2}} --#define WIFI_SDIO_D0 {GPIOB,{.Pin= GPIO_PIN_14, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_PULLUP , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF9_SDIO2}} --#define WIFI_SDIO_D1 {GPIOB,{.Pin= GPIO_PIN_15, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_PULLUP , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF9_SDIO2}} --#define WIFI_SDIO_D2 {GPIOG,{.Pin= GPIO_PIN_11, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_PULLUP , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF10_SDIO2}} --#define WIFI_SDIO_D3 {GPIOB,{.Pin= GPIO_PIN_4 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_PULLUP , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF9_SDIO2}} --#define WIFI_SDIO_OOB_IRQ {GPIOJ,{.Pin= GPIO_PIN_5 , .Mode = GPIO_MODE_IT_FALLING , .Pull = GPIO_PULLUP , .Speed= GPIO_SPEED_FREQ_VERY_HIGH}} -+#define BSP_LED1 {GPIOK,{.Pin= GPIO_PIN_5 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} -+#define BSP_LED2 {GPIOK,{.Pin= GPIO_PIN_6 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} -+#define BSP_LED3 {GPIOK,{.Pin= GPIO_PIN_7 , .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} - --#ifndef CYHAL_NC_PIN_VALUE --#define CYHAL_NC_PIN_VALUE ( (cyhal_gpio_t)0xFFFFFFFF ) --#endif -+/* power pin */ -+#define WIFI_WL_REG_ON {GPIOJ,{.Pin= GPIO_PIN_1, .Mode = GPIO_MODE_OUTPUT_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW}} -+//#define WIFI_32K_CLK {GPIOA,{.Pin= GPIO_PIN_8, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_LOW , .Alternate = GPIO_AF0_MCO}} -+ -+#define WIFI_SDIO_CMD {GPIOD,{.Pin= GPIO_PIN_2 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} -+#define WIFI_SDIO_CLK {GPIOC,{.Pin= GPIO_PIN_12, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} -+#define WIFI_SDIO_D0 {GPIOC,{.Pin= GPIO_PIN_8 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} -+#define WIFI_SDIO_D1 {GPIOC,{.Pin= GPIO_PIN_9 , .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} -+#define WIFI_SDIO_D2 {GPIOC,{.Pin= GPIO_PIN_10, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} -+#define WIFI_SDIO_D3 {GPIOC,{.Pin= GPIO_PIN_11, .Mode = GPIO_MODE_AF_PP , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH, .Alternate = GPIO_AF12_SDIO1}} -+#define WIFI_SDIO_OOB_IRQ {GPIOJ,{.Pin= GPIO_PIN_5, .Mode = GPIO_MODE_IT_FALLING , .Pull = GPIO_NOPULL , .Speed= GPIO_SPEED_FREQ_VERY_HIGH}} - - #endif --- -2.25.1 - diff --git a/patches/0114-Nicla-Vision-Set-WiFi-as-default-interface.patch b/patches/0114-Nicla-Vision-Set-WiFi-as-default-interface.patch index eee68149e..19ea11009 100644 --- a/patches/0114-Nicla-Vision-Set-WiFi-as-default-interface.patch +++ b/patches/0114-Nicla-Vision-Set-WiFi-as-default-interface.patch @@ -1,7 +1,7 @@ From bb43009e3650270c078a3177d87a256725468be8 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Fri, 17 Sep 2021 15:46:29 +0200 -Subject: [PATCH 114/138] Nicla Vision: Set WiFi as default interface +Subject: [PATCH 114/157] Nicla Vision: Set WiFi as default interface --- targets/targets.json | 3 ++- @@ -22,5 +22,5 @@ index eb83ff264e..4458fbb207 100644 "components_add": [ "QSPIF", -- -2.25.1 +2.36.0 diff --git a/patches/0115-Nicla-Vision-enable-I2C_TIMING_VALUE_ALGO.patch b/patches/0115-Nicla-Vision-enable-I2C_TIMING_VALUE_ALGO.patch index b4de4e404..38170d5fd 100644 --- a/patches/0115-Nicla-Vision-enable-I2C_TIMING_VALUE_ALGO.patch +++ b/patches/0115-Nicla-Vision-enable-I2C_TIMING_VALUE_ALGO.patch @@ -1,7 +1,7 @@ From 3497578cddc9b5b048e1a9c35cac17ff3bf9cdd1 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 20 Sep 2021 17:30:54 +0200 -Subject: [PATCH 115/138] Nicla Vision: enable I2C_TIMING_VALUE_ALGO +Subject: [PATCH 115/157] Nicla Vision: enable I2C_TIMING_VALUE_ALGO --- targets/targets.json | 3 ++- @@ -22,5 +22,5 @@ index 4458fbb207..884f508e46 100644 "components_add": [ "QSPIF", -- -2.25.1 +2.36.0 diff --git a/patches/0116-Nicla-Vision-tune-LWIP-mem-size.patch b/patches/0116-Nicla-Vision-tune-LWIP-mem-size.patch index 9de814425..3f14ff75e 100644 --- a/patches/0116-Nicla-Vision-tune-LWIP-mem-size.patch +++ b/patches/0116-Nicla-Vision-tune-LWIP-mem-size.patch @@ -1,7 +1,7 @@ From 50fde62150c50372001e6bf9e1245efbb9d6869d Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 24 Dec 2021 09:53:40 +0100 -Subject: [PATCH 116/138] Nicla Vision: tune LWIP mem size +Subject: [PATCH 116/157] Nicla Vision: tune LWIP mem size --- connectivity/lwipstack/mbed_lib.json | 3 +++ @@ -22,5 +22,5 @@ index 6e725819b4..71df8d5449 100644 "mem-size": 36560 }, -- -2.25.1 +2.36.0 diff --git a/patches/0117-Nicla-Vision-fix-wifi-bug-related-to-SDMMC2.patch b/patches/0117-Nicla-Vision-fix-wifi-bug-related-to-SDMMC2.patch index b6a5f340f..01c2aa6d4 100644 --- a/patches/0117-Nicla-Vision-fix-wifi-bug-related-to-SDMMC2.patch +++ b/patches/0117-Nicla-Vision-fix-wifi-bug-related-to-SDMMC2.patch @@ -1,7 +1,7 @@ From 04f1d23ea3bc8fcb747191ef147c139e1da1b951 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 6 Dec 2021 15:16:08 +0100 -Subject: [PATCH 117/138] Nicla Vision: fix wifi bug related to SDMMC2 +Subject: [PATCH 117/157] Nicla Vision: fix wifi bug related to SDMMC2 Enable flow control + enable SDMMC2 clk before any operation @@ -72,5 +72,5 @@ index 9044e87180..521917c8de 100644 } -- -2.25.1 +2.36.0 diff --git a/patches/0118-Nicla-Vision-fix-LPUART-at-baudrates-higher-than-960.patch b/patches/0118-Nicla-Vision-fix-LPUART-at-baudrates-higher-than-960.patch index 0b71a62dc..0c1b83d69 100644 --- a/patches/0118-Nicla-Vision-fix-LPUART-at-baudrates-higher-than-960.patch +++ b/patches/0118-Nicla-Vision-fix-LPUART-at-baudrates-higher-than-960.patch @@ -1,7 +1,7 @@ From fe2e94ce3c2f211caa693c72e950a1b8551ed6f7 Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Wed, 27 Oct 2021 15:30:07 +0200 -Subject: [PATCH 118/138] Nicla Vision: fix LPUART at baudrates higher than +Subject: [PATCH 118/157] Nicla Vision: fix LPUART at baudrates higher than 9600 --- @@ -23,5 +23,5 @@ index 884f508e46..6702b659f4 100644 "components_add": [ "QSPIF", -- -2.25.1 +2.36.0 diff --git a/patches/0119-TEMP-Remove-log-from-.gitignore-file.patch b/patches/0119-TEMP-Remove-log-from-.gitignore-file.patch index b0d77a710..63da3d765 100644 --- a/patches/0119-TEMP-Remove-log-from-.gitignore-file.patch +++ b/patches/0119-TEMP-Remove-log-from-.gitignore-file.patch @@ -1,7 +1,7 @@ From 86184757e34954fe60e2c81f9d3c08c86566dbbc Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 19 Jan 2022 10:24:06 +0100 -Subject: [PATCH 119/138] TEMP: Remove log from .gitignore file +Subject: [PATCH 119/157] TEMP: Remove log from .gitignore file --- .gitignore | 1 - @@ -20,5 +20,5 @@ index 3e907cf52c..7a68e77ae8 100644 # Icetea related file test_suite.json -- -2.25.1 +2.36.0 diff --git a/patches/0120-Initial-import-of-plug-trust-library-to-COMPONENT_SE.patch b/patches/0120-Initial-import-of-plug-trust-library-to-COMPONENT_SE.patch index ef6223bb8..2c487511b 100644 --- a/patches/0120-Initial-import-of-plug-trust-library-to-COMPONENT_SE.patch +++ b/patches/0120-Initial-import-of-plug-trust-library-to-COMPONENT_SE.patch @@ -1,7 +1,7 @@ From 406c6ddcf2456647c316c7b4054149de15de7476 Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 18 Jan 2022 14:00:46 +0100 -Subject: [PATCH 120/138] Initial import of plug & trust library to +Subject: [PATCH 120/157] Initial import of plug & trust library to COMPONENT_SE050 --- @@ -625,334 +625,334 @@ index 0000000000..fb71b7bf10 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_SE050/README.rst @@ -0,0 +1,328 @@ -+Introduction on Plug & Trust Middleware Mini Package -+==================================================================== -+ -+Plug and Trust middleware mini package contains the minimum files required to -+connect to SE05x using t1oi2c protocol. The package is tested on -+*Raspberry-Pi* with ``T=1 overI2C``. -+ -+The complete Plug and Trust middleware package can be downloaded from -+https://www.nxp.com/products/:SE050. The package has support for other -+platforms. -+ -+- iMX6UL, iMX8MQ - Linux -+- Freedom K64F, i.MX RT 1060, LPC55S - FreeRTOS/Without RTOS -+- Hikey 960 - Android -+- Windows PC(Visual Studio) -+ -+It also includes other api usage examples, ssscli (command line tool to use -+SE05x), cloud connectivity examples, openssl engine, pkcs11 interface, AWS -+Greengrass, OPCUA and more. More details regarding SE05x and other detailed -+application notes can be found at https://www.nxp.com/products/:SE050 / -+https://www.nxp.com/products/:SE051. -+ -+ -+Change Log -+------------------------------------------------------------- -+Refer ChangeLog.md -+ -+ -+ -+Folder structure of the Mini Pacakge -+------------------------------------------------------------- -+ -+The folder structure of mini package is as under:: -+ -+ ├───ecc_example -+ ├───hostlib -+ │ └───hostLib -+ │ ├───inc -+ │ ├───libCommon -+ │ │ ├───infra -+ │ │ ├───nxScp -+ │ │ └───smCom -+ │ │ └───T1oI2C -+ │ ├───mbedtls -+ │ │ └───src -+ │ ├───platform -+ │ │ ├───generic -+ │ │ ├───inc -+ │ │ ├───linux -+ │ │ └───rsp -+ │ ├───se05x -+ │ │ └───src -+ │ └───se05x_03_xx_xx -+ └───sss -+ ├───ex -+ │ ├───ecc -+ │ ├───inc -+ │ └───src -+ ├───inc -+ ├───plugin -+ │ └───mbedtls -+ ├───port -+ │ └───default -+ └───src -+ ├───keystore -+ ├───mbedtls -+ ├───openssl -+ └───se05x -+ -+Important folders are as under: -+ -+:ecc_example: ecc sign and verify example. (Tested on Raspberry Pi with openssl 1.1.1) -+ -+:hostlib: This folder contains the common part of host library e.g. ``T=1oI2C`` communication -+ protocol stack, SE050 APIs, etc. -+ -+:sss: This folder contains the **SSS APIs** interface to the Application Layer. -+ -+ -+Prerequisite -+------------------------------------------------------------- -+- Linux should be running on the Raspberry Pi development board, -+ the release was tested with Raspbian Buster (``4.19.75-v7l+``) -+- SE050 or SE051 connected to i2c-1 port of Raspberry Pi. -+ -+ -+ECC example -+------------------------------------------------------------- -+ -+This example demonstrates Elliptic Curve Cryptography sign and verify -+operation using SSS APIs. (``/sss/ex/ecc/ex_sss_ecc.c``) Execute the command -+below to test the ecc example:: -+ -+ cd ecc_example -+ mkdir build -+ cd build -+ cmake .. -+ cmake --build . -+ ./ex_ecc -+ -+ -+Build Applications using Mini Package -+------------------------------------------------------------- -+ -+Use the source file in `sss/ex` folder to open the session to se05x. -+Applications code should start with function `ex_sss_entry`:: -+ -+ sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) -+ -+Refer the example `ecc_example`. -+Example File - `/sss/ex/ecc/ex_sss_ecc.c` -+ -+ -+Use the below macros in ``fsl_sss_ftr.h`` file to enable support for either SE050 or SE051. :: -+ -+ /** SE050 */ -+ #define SSS_HAVE_SE05X_VER_03_XX 1 -+ -+ /** SE051 */ -+ #define SSS_HAVE_SE05X_VER_06_00 0 -+ -+ -+To enable authenticated session to SE05x, make the following changes, -+ -+1. Enable any host crypto (Mbedtls or openssl or User crypto) in -+ ``fsl_sss_ftr.h`` file. Refer, -+ -+- For Openssl: Refer section - *Openssl host crypto in mini package* -+- For Mbedtls: Refer section - *Mbedtls host crypto in mini package* -+- For User Crypto: Refer section - *User host crypto in mini package* -+ -+ -+2. Enable the below macros in ``fsl_sss_ftr.h`` file: -+ -+- ``#define SSS_HAVE_SCP_SCP03_SSS 1`` -+- ``#define SSSFTR_SE05X_AuthSession 1`` -+ -+3. Below settings can be used to authenticate with SE (Refer SE050 - User -+ Guidelines in https://www.nxp.com/products/:SE050 for more details on session -+ authentication) -+ -+- ``SSS_HAVE_SE05X_AUTH_USERID`` -+- ``SSS_HAVE_SE05X_AUTH_AESKEY`` -+- ``SSS_HAVE_SE05X_AUTH_ECKEY`` -+- ``SSS_HAVE_SE05X_AUTH_PLATFSCP03`` -+- ``SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03`` -+- ``SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03`` -+- ``SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03`` -+ -+ -+4. Include the below source files for autheticated session open, -+ -+- ``sss/ex/src/ex_sss_scp03_auth.c`` -+- ``sss/src/se05x/fsl_sss_se05x_eckey.c`` -+- ``sss/src/se05x/fsl_sss_se05x_scp03.c`` -+- ``hostlib/hostLib/libCommon/nxScp/nxScp03_Com.c`` -+ -+ -+Openssl host crypto in mini package -+------------------------------------------------------------- -+ -+Enable/disable the openssl host crypto by changing the below definition in -+``fsl_sss_ftr.h`` file:: -+ -+ /** Use OpenSSL as host crypto */ -+ #define SSS_HAVE_HOSTCRYPTO_OPENSSL 1 -+ -+Include the below files for openssl host crypto support -+- ``sss/src/openssl/fsl_sss_openssl_apis.c`` -+- ``sss/src/keystore/keystore_cmn.c`` -+- ``sss/src/keystore/keystore_openssl.c`` -+- ``sss/src/keystore/keystore_pc.c`` -+ -+Link the openssl library (version 1.1) as, -+ TARGET_LINK_LIBRARIES(${PROJECT_NAME} ssl crypto) -+ -+ -+Mbedtls host crypto in mini package -+------------------------------------------------------------- -+ -+Enable/disable the mbedtls host crypto by changing the below definition in -+``fsl_sss_ftr.h`` file:: -+ -+ /** Use mbedTLS as host crypto */ -+ #define SSS_HAVE_HOSTCRYPTO_MBEDTLS 1 -+ -+Include the below file for mbedtls host crypto support, -+ -+- ``sss/src/mbedtls/fsl_sss_mbedtls_apis.c`` -+- ``sss/src/keystore/keystore_pc.c`` -+- ``sss/src/keystore/keystore_cmn.c`` -+ -+Mbedtls applications depend on the following files to use se05x for crypto -+operations. Include the following files for compilation along with the mbedtls -+stack. (Tested with mbedtls-2.16.2). Mbedtls client server example using the -+below files is expalined in the next section, -+ -+- ``/hostlib/hostLib/mbedtls/src/ecdh_alt.c`` -+- ``/hostlib/hostLib/mbedtls/src/rsa_alt.c`` -+- ``/sss/plugin/mbedtls/ecdh_alt_ax.c`` -+- ``/sss/plugin/mbedtls/sss_mbedtls.c`` -+- ``/sss/plugin/mbedtls/sss_mbedtls_rsa.c`` -+- ``/sss/plugin/mbedtls/port/ksdk/ecp_curves_alt.c`` -+- ``/sss/plugin/mbedtls/port/ksdk/ecp_alt.c`` -+ -+Note: Exclude the file ``mbedtls/library/ecdh.c`` from mbedtls stack for compilation. -+ -+Also add compile defination ``MBEDTLS_CONFIG_FILE`` to use the correct mbedtls config file:: -+ -+ TARGET_COMPILE_DEFINITIONS( -+ ${PROJECT_NAME} -+ PUBLIC -+ MBEDTLS_CONFIG_FILE=\"sss_mbedtls_x86_config.h\" -+ ) -+ -+.. note:: -+ -+ Remove linking the openssl library in ``ecc_example/CMakeLists.txt``, if -+ the example is built for mbedtls, ``TARGET_LINK_LIBRARIES(${PROJECT_NAME} -+ ssl crypto)`` -+ -+ -+ -+TLS Client Server Example using MbedTLS stack -+------------------------------------------------------------- -+ -+This example demonstrates TLS client server connection using mbedtls stack. -+(``mbedtls_cli_srv``). Mbedtls client example is modified to use the -+client key and certificates from secure element. Modified mbedtls client -+example - ``sss/ex/mbedtls/ex_sss_ssl2.c`` -+ -+Prerequisite for the demo: -+ -+- Copy mbedtls (``mbedtls-2.16.2``) stack to ``ext/`` location, -+- client key provisoned inside SE050 with key id ``0x20181001``, -+- client certificate provisoned inside SE050 with key id ``0x20181002``, -+- Root CA public key provisoned inside SE050 with key id ``0x7DCCBB22``, -+ -+Enable mbedtls host crypto in ``fsl_sss_ftr.h`` file. Execute the command -+below to build mbedtls client and server examples:: -+ -+ cd mbedtls_cli_srv -+ mkdir build -+ cd build -+ cmake .. -+ cmake --build . -+ -+ -+Run mbedtls server as:: -+ -+ ./ssl2_server exchanges=1 \ -+ force_version=tls1_2 \ -+ debug_level=1 \ -+ ca_file= \ -+ auth_mode=required \ -+ key_file= \ -+ crt_file= -+ -+Run mbedtls client as:: -+ -+ ./ssl2_client server_name=localhost \ -+ exchanges=1 \ -+ force_version=tls1_2 \ -+ debug_level=1 \ -+ ca_file= \ -+ auth_mode=required \ -+ key_file=none \ -+ crt_file=none \ -+ force_ciphersuite=TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA \ -+ curves=secp256r1 none -+ -+ -+ -+User host crypto in mini package -+------------------------------------------------------------- -+ -+Enable/disable the user host crypto by changing the below definition in ``fsl_sss_ftr.h`` file:: -+ -+ #define SSS_HAVE_HOSTCRYPTO_USER 1 -+ -+On enabling HOSTCRYPTO_USER, the user has to implement the required cryptographic function. -+Implement the functions declared in file ``sss/inc/fsl_sss_user_apis.h``. -+ -+Refer Openssl host crypto implementation in - ``sss/src/mbedtls/fsl_sss_openssl_apis.c``. -+Refer Mbedtls host crypto implementation in - ``sss/src/mbedtls/fsl_sss_mbedtls_apis.c``. -+ -+ -+ -+Port Mini package to different platform -+------------------------------------------------------------- -+ -+To port the mini package to different platform, the i2c interface needs to be -+ported. Exsisting implementation for i2c read/write on Raspberry Pi is in - -+``hostlib/hostLib/platform/linux/i2c_a7.c``. -+ -+Other file that may require porting is - -+``hostlib/hostLib/platform/generic/sm_timer.c`` -+ -+ -+ -+Memory Details -+------------------------------------------------------------- -+ -+Memory details of ex_ecc example on Raspberry Pi built with, -+ -+- No hostcrypto -+- Plain session -+ -+:: -+ -+ Text segment -- 184505 Bytes -+ Data segment -- 416 Bytes -+ Bss segment --- 2808 Bytes -+ Total -------- 187729 Bytes -+ -+ -+Memory details of ex_ecc example on Raspberry Pi built with -+ -+- Openssl hostcrypto -+- PlatformSCP + ECKey (EXFL_SE050_AUTH_ECKey_PlatfSCP03 ) session -+ -+:: -+ -+ Text segment -- 292336 Bytes -+ Data segment -- 1116 Bytes -+ Bss segment --- 3692 Bytes -+ Total -------- 297144 Bytes -+ ++Introduction on Plug & Trust Middleware Mini Package ++==================================================================== ++ ++Plug and Trust middleware mini package contains the minimum files required to ++connect to SE05x using t1oi2c protocol. The package is tested on ++*Raspberry-Pi* with ``T=1 overI2C``. ++ ++The complete Plug and Trust middleware package can be downloaded from ++https://www.nxp.com/products/:SE050. The package has support for other ++platforms. ++ ++- iMX6UL, iMX8MQ - Linux ++- Freedom K64F, i.MX RT 1060, LPC55S - FreeRTOS/Without RTOS ++- Hikey 960 - Android ++- Windows PC(Visual Studio) ++ ++It also includes other api usage examples, ssscli (command line tool to use ++SE05x), cloud connectivity examples, openssl engine, pkcs11 interface, AWS ++Greengrass, OPCUA and more. More details regarding SE05x and other detailed ++application notes can be found at https://www.nxp.com/products/:SE050 / ++https://www.nxp.com/products/:SE051. ++ ++ ++Change Log ++------------------------------------------------------------- ++Refer ChangeLog.md ++ ++ ++ ++Folder structure of the Mini Pacakge ++------------------------------------------------------------- ++ ++The folder structure of mini package is as under:: ++ ++ ├───ecc_example ++ ├───hostlib ++ │ └───hostLib ++ │ ├───inc ++ │ ├───libCommon ++ │ │ ├───infra ++ │ │ ├───nxScp ++ │ │ └───smCom ++ │ │ └───T1oI2C ++ │ ├───mbedtls ++ │ │ └───src ++ │ ├───platform ++ │ │ ├───generic ++ │ │ ├───inc ++ │ │ ├───linux ++ │ │ └───rsp ++ │ ├───se05x ++ │ │ └───src ++ │ └───se05x_03_xx_xx ++ └───sss ++ ├───ex ++ │ ├───ecc ++ │ ├───inc ++ │ └───src ++ ├───inc ++ ├───plugin ++ │ └───mbedtls ++ ├───port ++ │ └───default ++ └───src ++ ├───keystore ++ ├───mbedtls ++ ├───openssl ++ └───se05x ++ ++Important folders are as under: ++ ++:ecc_example: ecc sign and verify example. (Tested on Raspberry Pi with openssl 1.1.1) ++ ++:hostlib: This folder contains the common part of host library e.g. ``T=1oI2C`` communication ++ protocol stack, SE050 APIs, etc. ++ ++:sss: This folder contains the **SSS APIs** interface to the Application Layer. ++ ++ ++Prerequisite ++------------------------------------------------------------- ++- Linux should be running on the Raspberry Pi development board, ++ the release was tested with Raspbian Buster (``4.19.75-v7l+``) ++- SE050 or SE051 connected to i2c-1 port of Raspberry Pi. ++ ++ ++ECC example ++------------------------------------------------------------- ++ ++This example demonstrates Elliptic Curve Cryptography sign and verify ++operation using SSS APIs. (``/sss/ex/ecc/ex_sss_ecc.c``) Execute the command ++below to test the ecc example:: ++ ++ cd ecc_example ++ mkdir build ++ cd build ++ cmake .. ++ cmake --build . ++ ./ex_ecc ++ ++ ++Build Applications using Mini Package ++------------------------------------------------------------- ++ ++Use the source file in `sss/ex` folder to open the session to se05x. ++Applications code should start with function `ex_sss_entry`:: ++ ++ sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) ++ ++Refer the example `ecc_example`. ++Example File - `/sss/ex/ecc/ex_sss_ecc.c` ++ ++ ++Use the below macros in ``fsl_sss_ftr.h`` file to enable support for either SE050 or SE051. :: ++ ++ /** SE050 */ ++ #define SSS_HAVE_SE05X_VER_03_XX 1 ++ ++ /** SE051 */ ++ #define SSS_HAVE_SE05X_VER_06_00 0 ++ ++ ++To enable authenticated session to SE05x, make the following changes, ++ ++1. Enable any host crypto (Mbedtls or openssl or User crypto) in ++ ``fsl_sss_ftr.h`` file. Refer, ++ ++- For Openssl: Refer section - *Openssl host crypto in mini package* ++- For Mbedtls: Refer section - *Mbedtls host crypto in mini package* ++- For User Crypto: Refer section - *User host crypto in mini package* ++ ++ ++2. Enable the below macros in ``fsl_sss_ftr.h`` file: ++ ++- ``#define SSS_HAVE_SCP_SCP03_SSS 1`` ++- ``#define SSSFTR_SE05X_AuthSession 1`` ++ ++3. Below settings can be used to authenticate with SE (Refer SE050 - User ++ Guidelines in https://www.nxp.com/products/:SE050 for more details on session ++ authentication) ++ ++- ``SSS_HAVE_SE05X_AUTH_USERID`` ++- ``SSS_HAVE_SE05X_AUTH_AESKEY`` ++- ``SSS_HAVE_SE05X_AUTH_ECKEY`` ++- ``SSS_HAVE_SE05X_AUTH_PLATFSCP03`` ++- ``SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03`` ++- ``SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03`` ++- ``SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03`` ++ ++ ++4. Include the below source files for autheticated session open, ++ ++- ``sss/ex/src/ex_sss_scp03_auth.c`` ++- ``sss/src/se05x/fsl_sss_se05x_eckey.c`` ++- ``sss/src/se05x/fsl_sss_se05x_scp03.c`` ++- ``hostlib/hostLib/libCommon/nxScp/nxScp03_Com.c`` ++ ++ ++Openssl host crypto in mini package ++------------------------------------------------------------- ++ ++Enable/disable the openssl host crypto by changing the below definition in ++``fsl_sss_ftr.h`` file:: ++ ++ /** Use OpenSSL as host crypto */ ++ #define SSS_HAVE_HOSTCRYPTO_OPENSSL 1 ++ ++Include the below files for openssl host crypto support ++- ``sss/src/openssl/fsl_sss_openssl_apis.c`` ++- ``sss/src/keystore/keystore_cmn.c`` ++- ``sss/src/keystore/keystore_openssl.c`` ++- ``sss/src/keystore/keystore_pc.c`` ++ ++Link the openssl library (version 1.1) as, ++ TARGET_LINK_LIBRARIES(${PROJECT_NAME} ssl crypto) ++ ++ ++Mbedtls host crypto in mini package ++------------------------------------------------------------- ++ ++Enable/disable the mbedtls host crypto by changing the below definition in ++``fsl_sss_ftr.h`` file:: ++ ++ /** Use mbedTLS as host crypto */ ++ #define SSS_HAVE_HOSTCRYPTO_MBEDTLS 1 ++ ++Include the below file for mbedtls host crypto support, ++ ++- ``sss/src/mbedtls/fsl_sss_mbedtls_apis.c`` ++- ``sss/src/keystore/keystore_pc.c`` ++- ``sss/src/keystore/keystore_cmn.c`` ++ ++Mbedtls applications depend on the following files to use se05x for crypto ++operations. Include the following files for compilation along with the mbedtls ++stack. (Tested with mbedtls-2.16.2). Mbedtls client server example using the ++below files is expalined in the next section, ++ ++- ``/hostlib/hostLib/mbedtls/src/ecdh_alt.c`` ++- ``/hostlib/hostLib/mbedtls/src/rsa_alt.c`` ++- ``/sss/plugin/mbedtls/ecdh_alt_ax.c`` ++- ``/sss/plugin/mbedtls/sss_mbedtls.c`` ++- ``/sss/plugin/mbedtls/sss_mbedtls_rsa.c`` ++- ``/sss/plugin/mbedtls/port/ksdk/ecp_curves_alt.c`` ++- ``/sss/plugin/mbedtls/port/ksdk/ecp_alt.c`` ++ ++Note: Exclude the file ``mbedtls/library/ecdh.c`` from mbedtls stack for compilation. ++ ++Also add compile defination ``MBEDTLS_CONFIG_FILE`` to use the correct mbedtls config file:: ++ ++ TARGET_COMPILE_DEFINITIONS( ++ ${PROJECT_NAME} ++ PUBLIC ++ MBEDTLS_CONFIG_FILE=\"sss_mbedtls_x86_config.h\" ++ ) ++ ++.. note:: ++ ++ Remove linking the openssl library in ``ecc_example/CMakeLists.txt``, if ++ the example is built for mbedtls, ``TARGET_LINK_LIBRARIES(${PROJECT_NAME} ++ ssl crypto)`` ++ ++ ++ ++TLS Client Server Example using MbedTLS stack ++------------------------------------------------------------- ++ ++This example demonstrates TLS client server connection using mbedtls stack. ++(``mbedtls_cli_srv``). Mbedtls client example is modified to use the ++client key and certificates from secure element. Modified mbedtls client ++example - ``sss/ex/mbedtls/ex_sss_ssl2.c`` ++ ++Prerequisite for the demo: ++ ++- Copy mbedtls (``mbedtls-2.16.2``) stack to ``ext/`` location, ++- client key provisoned inside SE050 with key id ``0x20181001``, ++- client certificate provisoned inside SE050 with key id ``0x20181002``, ++- Root CA public key provisoned inside SE050 with key id ``0x7DCCBB22``, ++ ++Enable mbedtls host crypto in ``fsl_sss_ftr.h`` file. Execute the command ++below to build mbedtls client and server examples:: ++ ++ cd mbedtls_cli_srv ++ mkdir build ++ cd build ++ cmake .. ++ cmake --build . ++ ++ ++Run mbedtls server as:: ++ ++ ./ssl2_server exchanges=1 \ ++ force_version=tls1_2 \ ++ debug_level=1 \ ++ ca_file= \ ++ auth_mode=required \ ++ key_file= \ ++ crt_file= ++ ++Run mbedtls client as:: ++ ++ ./ssl2_client server_name=localhost \ ++ exchanges=1 \ ++ force_version=tls1_2 \ ++ debug_level=1 \ ++ ca_file= \ ++ auth_mode=required \ ++ key_file=none \ ++ crt_file=none \ ++ force_ciphersuite=TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA \ ++ curves=secp256r1 none ++ ++ ++ ++User host crypto in mini package ++------------------------------------------------------------- ++ ++Enable/disable the user host crypto by changing the below definition in ``fsl_sss_ftr.h`` file:: ++ ++ #define SSS_HAVE_HOSTCRYPTO_USER 1 ++ ++On enabling HOSTCRYPTO_USER, the user has to implement the required cryptographic function. ++Implement the functions declared in file ``sss/inc/fsl_sss_user_apis.h``. ++ ++Refer Openssl host crypto implementation in - ``sss/src/mbedtls/fsl_sss_openssl_apis.c``. ++Refer Mbedtls host crypto implementation in - ``sss/src/mbedtls/fsl_sss_mbedtls_apis.c``. ++ ++ ++ ++Port Mini package to different platform ++------------------------------------------------------------- ++ ++To port the mini package to different platform, the i2c interface needs to be ++ported. Exsisting implementation for i2c read/write on Raspberry Pi is in - ++``hostlib/hostLib/platform/linux/i2c_a7.c``. ++ ++Other file that may require porting is - ++``hostlib/hostLib/platform/generic/sm_timer.c`` ++ ++ ++ ++Memory Details ++------------------------------------------------------------- ++ ++Memory details of ex_ecc example on Raspberry Pi built with, ++ ++- No hostcrypto ++- Plain session ++ ++:: ++ ++ Text segment -- 184505 Bytes ++ Data segment -- 416 Bytes ++ Bss segment --- 2808 Bytes ++ Total -------- 187729 Bytes ++ ++ ++Memory details of ex_ecc example on Raspberry Pi built with ++ ++- Openssl hostcrypto ++- PlatformSCP + ECKey (EXFL_SE050_AUTH_ECKey_PlatfSCP03 ) session ++ ++:: ++ ++ Text segment -- 292336 Bytes ++ Data segment -- 1116 Bytes ++ Bss segment --- 3692 Bytes ++ Total -------- 297144 Bytes ++ diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_SE050/ecc_example/CMakeLists.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_SE050/ecc_example/CMakeLists.txt new file mode 100644 index 0000000000..5f35c06dd1 @@ -81110,5 +81110,5 @@ index 0000000000..50b2affed4 + +#endif // SSS_HAVE_APPLET_SE05X_IOT -- -2.25.1 +2.36.0 diff --git a/patches/0121-Port-sss-hostLib-to-mbed-os.patch b/patches/0121-Port-sss-hostLib-to-mbed-os.patch index 321c807d1..e14ad9e82 100644 --- a/patches/0121-Port-sss-hostLib-to-mbed-os.patch +++ b/patches/0121-Port-sss-hostLib-to-mbed-os.patch @@ -1,7 +1,7 @@ From 97718d517e09cab6dfdd1bbd1e4f530b8af30c51 Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 18 Jan 2022 14:59:17 +0100 -Subject: [PATCH 121/138] Port sss hostLib to mbed-os +Subject: [PATCH 121/157] Port sss hostLib to mbed-os --- .../hostlib/hostLib/libCommon/log/nxLog.c | 41 +- @@ -1179,5 +1179,5 @@ index 7613140051..cabfdff7d3 100644 memset(context, 0, sizeof(*context)); } -- -2.25.1 +2.36.0 diff --git a/patches/0122-Do-not-build-ecdh.c-from-mbedtls-stack-if-MBEDTLS_EC.patch b/patches/0122-Do-not-build-ecdh.c-from-mbedtls-stack-if-MBEDTLS_EC.patch index 2fc3cabab..9caf5c6d4 100644 --- a/patches/0122-Do-not-build-ecdh.c-from-mbedtls-stack-if-MBEDTLS_EC.patch +++ b/patches/0122-Do-not-build-ecdh.c-from-mbedtls-stack-if-MBEDTLS_EC.patch @@ -1,7 +1,7 @@ From 6028f880d17340e000e1b5fa8018c3694ec61078 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 19 Jan 2022 14:17:07 +0100 -Subject: [PATCH 122/138] Do not build ecdh.c from mbedtls stack if +Subject: [PATCH 122/157] Do not build ecdh.c from mbedtls stack if MBEDTLS_ECDH_ALT is defined --- @@ -28,5 +28,5 @@ index 9dfa868063..6cb53b4015 100644 +#endif /* MBEDTLS_ECDH_ALT */ #endif /* MBEDTLS_ECDH_C */ -- -2.25.1 +2.36.0 diff --git a/patches/0123-Enable-MBEDTLS-alternative-implementation-over-SSS.patch b/patches/0123-Enable-MBEDTLS-alternative-implementation-over-SSS.patch index d59cd4d0e..66b0a5be4 100644 --- a/patches/0123-Enable-MBEDTLS-alternative-implementation-over-SSS.patch +++ b/patches/0123-Enable-MBEDTLS-alternative-implementation-over-SSS.patch @@ -1,7 +1,7 @@ From 92234090ae976558fdc7f517a8f836db1110ca42 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 19 Jan 2022 14:18:07 +0100 -Subject: [PATCH 123/138] Enable MBEDTLS alternative implementation over SSS +Subject: [PATCH 123/157] Enable MBEDTLS alternative implementation over SSS --- .../COMPONENT_SE050/sss/inc/fsl_sss_ftr_default.h | 4 ++-- @@ -30,5 +30,5 @@ index 7ad9a873d2..0113d794bc 100644 #if (( 0 \ + SSS_HAVE_MBEDTLS_ALT_SSS \ -- -2.25.1 +2.36.0 diff --git a/patches/0124-Enable-DEBUG-log-by-default.-To-disable-it-define-FL.patch b/patches/0124-Enable-DEBUG-log-by-default.-To-disable-it-define-FL.patch index bb4b415e2..4cf3cd502 100644 --- a/patches/0124-Enable-DEBUG-log-by-default.-To-disable-it-define-FL.patch +++ b/patches/0124-Enable-DEBUG-log-by-default.-To-disable-it-define-FL.patch @@ -1,7 +1,7 @@ From 11dca5dd86027089be9bb6aad7beac41e0d86cf6 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 09:52:58 +0100 -Subject: [PATCH 124/138] Enable DEBUG log by default. To disable it define +Subject: [PATCH 124/157] Enable DEBUG log by default. To disable it define FLOW_SILENT macro --- @@ -22,5 +22,5 @@ index 9e37d5616b..1b0cee9dea 100644 /* Same as NX_LOG_ENABLE_DEFAULT_DEBUG but for Info Level */ #define NX_LOG_ENABLE_DEFAULT_INFO 1 -- -2.25.1 +2.36.0 diff --git a/patches/0125-Add-1ms-delays-to-let-communication-work-also-with-d.patch b/patches/0125-Add-1ms-delays-to-let-communication-work-also-with-d.patch index 7f222c084..f021b4e3d 100644 --- a/patches/0125-Add-1ms-delays-to-let-communication-work-also-with-d.patch +++ b/patches/0125-Add-1ms-delays-to-let-communication-work-also-with-d.patch @@ -1,7 +1,7 @@ From abbf7d3e64a63f7c41b23e5ecaf932d3c337e21f Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 09:53:57 +0100 -Subject: [PATCH 125/138] Add 1ms delays to let communication work also with +Subject: [PATCH 125/157] Add 1ms delays to let communication work also with debug disabled --- @@ -49,5 +49,5 @@ index 4ee1665c42..5f375185d2 100644 } } while (ret != I2C_OK); -- -2.25.1 +2.36.0 diff --git a/patches/0126-Make-i2c-and-resets-pin-configurable.patch b/patches/0126-Make-i2c-and-resets-pin-configurable.patch index 9f00702f1..8ab14583a 100644 --- a/patches/0126-Make-i2c-and-resets-pin-configurable.patch +++ b/patches/0126-Make-i2c-and-resets-pin-configurable.patch @@ -1,7 +1,7 @@ From 877b8109c62677b86b73dd5cef05c039dff065eb Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 10:10:46 +0100 -Subject: [PATCH 126/138] Make i2c and resets pin configurable +Subject: [PATCH 126/157] Make i2c and resets pin configurable --- .../COMPONENT_SE050/hostlib/hostLib/platform/se05x_i2c.cpp | 4 ++-- @@ -42,5 +42,5 @@ index 1c6af5a24e..0d7ffcac8c 100644 void se05x_ic_reset(void) { -- -2.25.1 +2.36.0 diff --git a/patches/0127-Add-missing-__MBED__-define-to-avoid-build-mbedtls-k.patch b/patches/0127-Add-missing-__MBED__-define-to-avoid-build-mbedtls-k.patch index 46bc18356..1688e873f 100644 --- a/patches/0127-Add-missing-__MBED__-define-to-avoid-build-mbedtls-k.patch +++ b/patches/0127-Add-missing-__MBED__-define-to-avoid-build-mbedtls-k.patch @@ -1,7 +1,7 @@ From 3b2f1241d3347b9f6679ac0b822f405bb5a664e7 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 10:02:13 +0100 -Subject: [PATCH 127/138] Add missing __MBED__ define to avoid build mbedtls +Subject: [PATCH 127/157] Add missing __MBED__ define to avoid build mbedtls keystore --- @@ -85,5 +85,5 @@ index b8d4e82cfc..614e8f0abb 100644 uint32_t i; for (i = 0; i < keyStore->max_object_count; i++) { -- -2.25.1 +2.36.0 diff --git a/patches/0128-Moved-COMPONENT_SE050-from-TARGET_PORTENTA_H7-to-STM.patch b/patches/0128-Moved-COMPONENT_SE050-from-TARGET_PORTENTA_H7-to-STM.patch index ad2aa73f9..9881df2a5 100644 --- a/patches/0128-Moved-COMPONENT_SE050-from-TARGET_PORTENTA_H7-to-STM.patch +++ b/patches/0128-Moved-COMPONENT_SE050-from-TARGET_PORTENTA_H7-to-STM.patch @@ -1,7 +1,7 @@ From fa21a14868766a83c1adca0d34b2330f279fbe93 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 14:23:36 +0100 -Subject: [PATCH 128/138] Moved COMPONENT_SE050 from TARGET_PORTENTA_H7 to +Subject: [PATCH 128/157] Moved COMPONENT_SE050 from TARGET_PORTENTA_H7 to STM32H747xI plugAndTrust: rename log folder to nxlog and revert 86184757e34 @@ -862,5 +862,5 @@ similarity index 100% rename from targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_H7/COMPONENT_SE050/sss/src/se05x/fsl_sss_se05x_scp03.c rename to targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/COMPONENT_SE050/sss/src/se05x/fsl_sss_se05x_scp03.c -- -2.25.1 +2.36.0 diff --git a/patches/0129-NICLA_VISION-Enable-component-SE050.patch b/patches/0129-NICLA_VISION-Enable-component-SE050.patch index 31685cdfb..89e1998b8 100644 --- a/patches/0129-NICLA_VISION-Enable-component-SE050.patch +++ b/patches/0129-NICLA_VISION-Enable-component-SE050.patch @@ -1,7 +1,7 @@ From 2b7a490c622e0e78b155ae19119259c45435fc22 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 14:24:59 +0100 -Subject: [PATCH 129/138] NICLA_VISION: Enable component SE050 +Subject: [PATCH 129/157] NICLA_VISION: Enable component SE050 --- targets/targets.json | 3 ++- @@ -22,5 +22,5 @@ index 6702b659f4..5e036861cf 100644 "macros_add": [ "MBEDTLS_FS_IO", -- -2.25.1 +2.36.0 diff --git a/patches/0130-NICLA_VISION-Add-configuration-macros-used-for-APDU-.patch b/patches/0130-NICLA_VISION-Add-configuration-macros-used-for-APDU-.patch index 5b1806d4e..0466742ed 100644 --- a/patches/0130-NICLA_VISION-Add-configuration-macros-used-for-APDU-.patch +++ b/patches/0130-NICLA_VISION-Add-configuration-macros-used-for-APDU-.patch @@ -1,7 +1,7 @@ From b1fb8c15671daecb88e22bcb320db93abfef1fe6 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 14:26:18 +0100 -Subject: [PATCH 130/138] NICLA_VISION: Add configuration macros used for APDU +Subject: [PATCH 130/157] NICLA_VISION: Add configuration macros used for APDU communication protocol --- @@ -24,5 +24,5 @@ index 5e036861cf..f2429fba17 100644 "device_has_add": [ "USBDEVICE", -- -2.25.1 +2.36.0 diff --git a/patches/0131-NICLA_VISION-Add-configuration-for-reset-pin-and-i2c.patch b/patches/0131-NICLA_VISION-Add-configuration-for-reset-pin-and-i2c.patch index cffb008de..6306ba21d 100644 --- a/patches/0131-NICLA_VISION-Add-configuration-for-reset-pin-and-i2c.patch +++ b/patches/0131-NICLA_VISION-Add-configuration-for-reset-pin-and-i2c.patch @@ -1,7 +1,7 @@ From 958d8b763ceadd44a82d907e2d09194fb4e2b299 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 14:30:07 +0100 -Subject: [PATCH 131/138] NICLA_VISION: Add configuration for reset pin and i2c +Subject: [PATCH 131/157] NICLA_VISION: Add configuration for reset pin and i2c --- targets/targets.json | 16 ++++++++++++++++ @@ -35,5 +35,5 @@ index f2429fba17..43e830d147 100644 }, "overrides": { -- -2.25.1 +2.36.0 diff --git a/patches/0132-NICLA_VISION-DISABLE-debug-log-with-FLOW_SILENT-macr.patch b/patches/0132-NICLA_VISION-DISABLE-debug-log-with-FLOW_SILENT-macr.patch index edd2ca6bd..f64e792da 100644 --- a/patches/0132-NICLA_VISION-DISABLE-debug-log-with-FLOW_SILENT-macr.patch +++ b/patches/0132-NICLA_VISION-DISABLE-debug-log-with-FLOW_SILENT-macr.patch @@ -1,7 +1,7 @@ From 595d3a1549244e709c75980a4d8f9a8cfcedb529 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Feb 2022 15:04:02 +0100 -Subject: [PATCH 132/138] NICLA_VISION: DISABLE debug log with FLOW_SILENT +Subject: [PATCH 132/157] NICLA_VISION: DISABLE debug log with FLOW_SILENT macro --- @@ -23,5 +23,5 @@ index 43e830d147..e0e4a8b6d8 100644 "device_has_add": [ "USBDEVICE", -- -2.25.1 +2.36.0 diff --git a/patches/0133-NICLA_VISION-Add-overload-for-TLSSocketWrapper-set_c.patch b/patches/0133-NICLA_VISION-Add-overload-for-TLSSocketWrapper-set_c.patch index b7a714939..d2ef3ed26 100644 --- a/patches/0133-NICLA_VISION-Add-overload-for-TLSSocketWrapper-set_c.patch +++ b/patches/0133-NICLA_VISION-Add-overload-for-TLSSocketWrapper-set_c.patch @@ -1,7 +1,7 @@ From eba7646c8e678dc21eed4e853015d84023125a42 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 16 Feb 2022 14:57:11 +0100 -Subject: [PATCH 133/138] NICLA_VISION: Add overload for +Subject: [PATCH 133/157] NICLA_VISION: Add overload for TLSSocketWrapper::set_client_cert_key() --- @@ -83,5 +83,5 @@ index 8202151eb7..c0b33dacee 100644 nsapi_error_t TLSSocketWrapper::start_handshake(bool first_call) { -- -2.25.1 +2.36.0 diff --git a/patches/0134-TLSSocketWrapper-store-SE050-keystore-pointer-and-ke.patch b/patches/0134-TLSSocketWrapper-store-SE050-keystore-pointer-and-ke.patch index 23a025927..40dcbe36e 100644 --- a/patches/0134-TLSSocketWrapper-store-SE050-keystore-pointer-and-ke.patch +++ b/patches/0134-TLSSocketWrapper-store-SE050-keystore-pointer-and-ke.patch @@ -1,7 +1,7 @@ From 46d6734251e56fccfccf78e53821ff297c30be28 Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 21 Feb 2022 11:32:33 +0100 -Subject: [PATCH 134/138] TLSSocketWrapper: store SE050 keystore pointer and +Subject: [PATCH 134/157] TLSSocketWrapper: store SE050 keystore pointer and keyObject --- @@ -88,5 +88,5 @@ index c0b33dacee..48135fabf4 100644 #endif /* MBEDTLS_X509_CRT_PARSE_C */ } -- -2.25.1 +2.36.0 diff --git a/patches/0135-TLSSocketWrapper-Force-correct-cipher-suite-for-SE05.patch b/patches/0135-TLSSocketWrapper-Force-correct-cipher-suite-for-SE05.patch index a6b7e5366..f2f6c3337 100644 --- a/patches/0135-TLSSocketWrapper-Force-correct-cipher-suite-for-SE05.patch +++ b/patches/0135-TLSSocketWrapper-Force-correct-cipher-suite-for-SE05.patch @@ -1,7 +1,7 @@ From e317b33bcfdba8f083937eaf10d655c33689e2f5 Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 21 Feb 2022 11:33:44 +0100 -Subject: [PATCH 135/138] TLSSocketWrapper: Force correct cipher suite for +Subject: [PATCH 135/157] TLSSocketWrapper: Force correct cipher suite for SE050 integration --- @@ -23,5 +23,5 @@ index 48135fabf4..0826d05346 100644 _sss_ks_ptr = &deviceCtx->ks; -- -2.25.1 +2.36.0 diff --git a/patches/0136-TLSSocketWrapper-Associate-SE050-ecdh-context-to-mbe.patch b/patches/0136-TLSSocketWrapper-Associate-SE050-ecdh-context-to-mbe.patch index bd22c2144..a4224902f 100644 --- a/patches/0136-TLSSocketWrapper-Associate-SE050-ecdh-context-to-mbe.patch +++ b/patches/0136-TLSSocketWrapper-Associate-SE050-ecdh-context-to-mbe.patch @@ -1,7 +1,7 @@ From 83821906a0030586667e13946a23acfbce81b01f Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 21 Feb 2022 11:34:40 +0100 -Subject: [PATCH 136/138] TLSSocketWrapper: Associate SE050 ecdh context to +Subject: [PATCH 136/157] TLSSocketWrapper: Associate SE050 ecdh context to mbedtls --- @@ -26,5 +26,5 @@ index 0826d05346..58f47b54c8 100644 // callers of mbedtls_ssl_set_bio_ctx and there should be only one ssl context. If these rules don't apply, // these defines can't be used. -- -2.25.1 +2.36.0 diff --git a/patches/0137-TLSSocketWrapper-Add-function-to-append-a-certificat.patch b/patches/0137-TLSSocketWrapper-Add-function-to-append-a-certificat.patch index e5307b4d8..62515f1d0 100644 --- a/patches/0137-TLSSocketWrapper-Add-function-to-append-a-certificat.patch +++ b/patches/0137-TLSSocketWrapper-Add-function-to-append-a-certificat.patch @@ -1,7 +1,7 @@ From 8b8098c97702bfdac98f7b20a4c84ba1012b4b61 Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 22 Feb 2022 14:16:16 +0100 -Subject: [PATCH 137/138] TLSSocketWrapper: Add function to append a +Subject: [PATCH 137/157] TLSSocketWrapper: Add function to append a certificate to an existing ca chain --- @@ -83,5 +83,5 @@ index 58f47b54c8..6665f64cc0 100644 { #if !defined(MBEDTLS_X509_CRT_PARSE_C) || !defined(MBEDTLS_FS_IO) -- -2.25.1 +2.36.0 diff --git a/patches/0138-Initialize-sss_object-and-sss_keystore-to-nullptr.patch b/patches/0138-Initialize-sss_object-and-sss_keystore-to-nullptr.patch index 9dadbaa3d..0492b0cc5 100644 --- a/patches/0138-Initialize-sss_object-and-sss_keystore-to-nullptr.patch +++ b/patches/0138-Initialize-sss_object-and-sss_keystore-to-nullptr.patch @@ -1,7 +1,7 @@ From 93fe1076c69864d512fff20472dc9e3bf1793327 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 2 Mar 2022 11:31:01 +0100 -Subject: [PATCH 138/138] Initialize sss_object and sss_keystore to nullptr +Subject: [PATCH 138/157] Initialize sss_object and sss_keystore to nullptr --- connectivity/netsocket/include/netsocket/TLSSocketWrapper.h | 4 ++-- @@ -23,5 +23,5 @@ index 13365428fd..2dc3b4b000 100644 DRBG_CTX _drbg; -- -2.25.1 +2.36.0 diff --git a/patches/0139-RP2040-fix-high-speed-uart-by-enabling-FIFO-timeout.patch b/patches/0139-RP2040-fix-high-speed-uart-by-enabling-FIFO-timeout.patch index 653d25c25..1e6981c6d 100644 --- a/patches/0139-RP2040-fix-high-speed-uart-by-enabling-FIFO-timeout.patch +++ b/patches/0139-RP2040-fix-high-speed-uart-by-enabling-FIFO-timeout.patch @@ -1,7 +1,8 @@ -From 9f9ee8b95b2a8c0d89dd8254cab720c319828aa4 Mon Sep 17 00:00:00 2001 +From 9ab6d5b194ad85cdf94af3f503a31fc259aa5ae5 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 7 Feb 2022 17:52:46 +0100 -Subject: [PATCH] RP2040: fix high speed uart by enabling FIFO + timeout +Subject: [PATCH 139/157] RP2040: fix high speed uart by enabling FIFO + + timeout --- .../pico-sdk/rp2_common/hardware_uart/include/hardware/uart.h | 3 ++- @@ -45,5 +46,5 @@ index 8d95f6c2a3..a6f01a6063 100644 void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) -- -2.25.1 +2.36.0 diff --git a/patches/0140-Fix-Ethernet-pins-configuration.patch b/patches/0140-Fix-Ethernet-pins-configuration.patch index e818b10e8..b3077ecf1 100644 --- a/patches/0140-Fix-Ethernet-pins-configuration.patch +++ b/patches/0140-Fix-Ethernet-pins-configuration.patch @@ -1,7 +1,7 @@ From 88e1023c6fb7197e529d3054b2dcb4bbdee8b73f Mon Sep 17 00:00:00 2001 From: giulcioffi Date: Mon, 28 Mar 2022 11:02:58 +0200 -Subject: [PATCH 140/150] Fix Ethernet pins configuration +Subject: [PATCH 140/157] Fix Ethernet pins configuration --- .../TARGET_PORTENTA_H7/stm32h7_eth_init.c | 32 ++++++++++++++++--- @@ -65,5 +65,5 @@ index 3fbac0555f..643fc5acd3 100644 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; -- -2.25.1 +2.36.0 diff --git a/patches/0141-COMPONENT_SE050-Add-defines-to-exclude-DES-functions.patch b/patches/0141-COMPONENT_SE050-Add-defines-to-exclude-DES-functions.patch index 42aee445a..aec1728be 100644 --- a/patches/0141-COMPONENT_SE050-Add-defines-to-exclude-DES-functions.patch +++ b/patches/0141-COMPONENT_SE050-Add-defines-to-exclude-DES-functions.patch @@ -1,7 +1,7 @@ From 15dbc037d15641b09507b65deb9dba43a3c193f3 Mon Sep 17 00:00:00 2001 From: pennam Date: Thu, 17 Mar 2022 10:05:32 +0100 -Subject: [PATCH 141/150] COMPONENT_SE050: Add defines to exclude DES functions +Subject: [PATCH 141/157] COMPONENT_SE050: Add defines to exclude DES functions if MBEDTLS_DES_C module is not enabled --- @@ -38,5 +38,5 @@ index 614e8f0abb..20cd12d46c 100644 case kAlgorithm_SSS_DES_ECB: case kAlgorithm_SSS_DES3_CBC: -- -2.25.1 +2.36.0 diff --git a/patches/0142-Add-build-options-to-allow-to-disable-device-functio.patch b/patches/0142-Add-build-options-to-allow-to-disable-device-functio.patch index 95ab470b5..cd8febe9f 100644 --- a/patches/0142-Add-build-options-to-allow-to-disable-device-functio.patch +++ b/patches/0142-Add-build-options-to-allow-to-disable-device-functio.patch @@ -1,7 +1,7 @@ From 006f588decaf7e097f6b0cb67460a97b2643cb04 Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 24 Aug 2021 17:02:47 +0200 -Subject: [PATCH 142/150] Add build options to allow to disable device +Subject: [PATCH 142/157] Add build options to allow to disable device functionalities i.e DEVICE_ANALOGOUT --- @@ -75,5 +75,5 @@ index 6f17147886..8415007dd9 100644 struct flash_s { /* nothing to be stored for now */ -- -2.25.1 +2.36.0 diff --git a/patches/0143-MCUboot-PORTENTA_H7_M7-Change-ST-HAL-configuration-r.patch b/patches/0143-MCUboot-PORTENTA_H7_M7-Change-ST-HAL-configuration-r.patch index 25a41f7fe..3b7f7b8c4 100644 --- a/patches/0143-MCUboot-PORTENTA_H7_M7-Change-ST-HAL-configuration-r.patch +++ b/patches/0143-MCUboot-PORTENTA_H7_M7-Change-ST-HAL-configuration-r.patch @@ -1,7 +1,7 @@ From 4b16b9a73aad76923101b705c35becf67a2fa447 Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 24 Aug 2021 17:03:39 +0200 -Subject: [PATCH 143/150] MCUboot:PORTENTA_H7_M7:Change ST HAL configuration +Subject: [PATCH 143/157] MCUboot:PORTENTA_H7_M7:Change ST HAL configuration removing unnecessary modules --- @@ -98,5 +98,5 @@ index afcfc24210..524bb2dd52 100644 /* ########################## Oscillator Values adaptation ####################*/ /** -- -2.25.1 +2.36.0 diff --git a/patches/0144-Add-build-option-to-allow-FATFS-customization-remove.patch b/patches/0144-Add-build-option-to-allow-FATFS-customization-remove.patch index ecb444cb5..8e1b202f0 100644 --- a/patches/0144-Add-build-option-to-allow-FATFS-customization-remove.patch +++ b/patches/0144-Add-build-option-to-allow-FATFS-customization-remove.patch @@ -1,7 +1,7 @@ From e15600c6af3c5d042af46864ebb19032d8a997ad Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 24 Aug 2021 17:04:35 +0200 -Subject: [PATCH 144/150] Add build option to allow FATFS customization: remove +Subject: [PATCH 144/157] Add build option to allow FATFS customization: remove mkfs --- @@ -67,5 +67,5 @@ index 3006a24530..ee0db9bde1 100644 int FATFileSystem::remove(const char *path) { -- -2.25.1 +2.36.0 diff --git a/patches/0145-Optimize-HAL_RCCEx_PeriphCLKConfig-using-only-HAL-en.patch b/patches/0145-Optimize-HAL_RCCEx_PeriphCLKConfig-using-only-HAL-en.patch index d52a55c1c..e505363bd 100644 --- a/patches/0145-Optimize-HAL_RCCEx_PeriphCLKConfig-using-only-HAL-en.patch +++ b/patches/0145-Optimize-HAL_RCCEx_PeriphCLKConfig-using-only-HAL-en.patch @@ -1,7 +1,7 @@ From c9ea188ab6fedefa03443a6cb336e70e809a34da Mon Sep 17 00:00:00 2001 From: pennam Date: Thu, 26 Aug 2021 15:40:48 +0200 -Subject: [PATCH 145/150] Optimize HAL_RCCEx_PeriphCLKConfig using only HAL +Subject: [PATCH 145/157] Optimize HAL_RCCEx_PeriphCLKConfig using only HAL enabled modules --- @@ -221,5 +221,5 @@ index afde46b3b8..c349750263 100644 if (status == HAL_OK) { -- -2.25.1 +2.36.0 diff --git a/patches/0146-MCUboot-PORTENTA_H7_M7-Remove-HSI-CSI-LSI-HSI48-supp.patch b/patches/0146-MCUboot-PORTENTA_H7_M7-Remove-HSI-CSI-LSI-HSI48-supp.patch index ea7022a2d..9c9444344 100644 --- a/patches/0146-MCUboot-PORTENTA_H7_M7-Remove-HSI-CSI-LSI-HSI48-supp.patch +++ b/patches/0146-MCUboot-PORTENTA_H7_M7-Remove-HSI-CSI-LSI-HSI48-supp.patch @@ -1,7 +1,7 @@ From 6df4a3d8af6d4b954bda1635006ea62ec9df0dd7 Mon Sep 17 00:00:00 2001 From: pennam Date: Thu, 26 Aug 2021 15:42:18 +0200 -Subject: [PATCH 146/150] MCUboot:PORTENTA_H7_M7:Remove HSI,CSI,LSI,HSI48 +Subject: [PATCH 146/157] MCUboot:PORTENTA_H7_M7:Remove HSI,CSI,LSI,HSI48 support from HAL_RCC_OscConfig --- @@ -29,5 +29,5 @@ index b5e93c78b9..eb5485dc7d 100644 if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) { -- -2.25.1 +2.36.0 diff --git a/patches/0147-MCUBoot-PORTENTA_H7_M7-Add-linker-sections-to-store-.patch b/patches/0147-MCUBoot-PORTENTA_H7_M7-Add-linker-sections-to-store-.patch index f96e2f248..5b91d24b7 100644 --- a/patches/0147-MCUBoot-PORTENTA_H7_M7-Add-linker-sections-to-store-.patch +++ b/patches/0147-MCUBoot-PORTENTA_H7_M7-Add-linker-sections-to-store-.patch @@ -1,7 +1,7 @@ From 669637a00509686bfe313bc2cdb3f597314d5510 Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 4 Aug 2021 09:33:11 +0200 -Subject: [PATCH 147/150] MCUBoot:PORTENTA_H7_M7:Add linker sections to store +Subject: [PATCH 147/157] MCUBoot:PORTENTA_H7_M7:Add linker sections to store boot configuration and gain space --- @@ -61,5 +61,5 @@ index 68280f4757..41c72141ed 100644 KEEP(*(.eh_frame*)) -- -2.25.1 +2.36.0 diff --git a/patches/0148-Add-build-option-DEVICE_SERIAL_FC-preventing-build-i.patch b/patches/0148-Add-build-option-DEVICE_SERIAL_FC-preventing-build-i.patch index bbc22b642..3d34cbd3f 100644 --- a/patches/0148-Add-build-option-DEVICE_SERIAL_FC-preventing-build-i.patch +++ b/patches/0148-Add-build-option-DEVICE_SERIAL_FC-preventing-build-i.patch @@ -1,7 +1,7 @@ From f9a49286a17f8394ff0071fb8cc2cd5c0de9cf68 Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 14 Mar 2022 09:39:31 +0100 -Subject: [PATCH 148/150] Add build option DEVICE_SERIAL_FC preventing build if +Subject: [PATCH 148/157] Add build option DEVICE_SERIAL_FC preventing build if flow control is disabled --- @@ -37,5 +37,5 @@ index 7c21d12e9c..33a049c844 100644 return ret; } -- -2.25.1 +2.36.0 diff --git a/patches/0149-MCUboot-PORTENTA_H7_M7-Remove-FATFS-mkdir-and-rename.patch b/patches/0149-MCUboot-PORTENTA_H7_M7-Remove-FATFS-mkdir-and-rename.patch index 74ea331c3..85f2af945 100644 --- a/patches/0149-MCUboot-PORTENTA_H7_M7-Remove-FATFS-mkdir-and-rename.patch +++ b/patches/0149-MCUboot-PORTENTA_H7_M7-Remove-FATFS-mkdir-and-rename.patch @@ -1,7 +1,7 @@ From f52fb039b673a3c137340680e42a14246444e7b9 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 18 Mar 2022 14:57:45 +0100 -Subject: [PATCH 149/150] MCUboot:PORTENTA_H7_M7:Remove FATFS mkdir and rename +Subject: [PATCH 149/157] MCUboot:PORTENTA_H7_M7:Remove FATFS mkdir and rename --- storage/filesystem/fat/include/fat/FATFileSystem.h | 4 ++++ @@ -65,5 +65,5 @@ index ee0db9bde1..62bb099804 100644 int FATFileSystem::stat(const char *path, struct stat *st) { -- -2.25.1 +2.36.0 diff --git a/patches/0150-Fix-Only-return-true-for-uart_is_writeable-if-the-TX.patch b/patches/0150-Fix-Only-return-true-for-uart_is_writeable-if-the-TX.patch index 546300a66..890c3fbb6 100644 --- a/patches/0150-Fix-Only-return-true-for-uart_is_writeable-if-the-TX.patch +++ b/patches/0150-Fix-Only-return-true-for-uart_is_writeable-if-the-TX.patch @@ -1,7 +1,7 @@ From f0b1b6c7375568f3256d09287956dc0649b46b20 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Tue, 29 Mar 2022 13:01:34 +0200 -Subject: [PATCH 150/150] Fix: Only return true for 'uart_is_writeable' if the +Subject: [PATCH 150/157] Fix: Only return true for 'uart_is_writeable' if the TX FIFO is empty. This allows the Arduino_Braccio_plusplus library to work again, since it depends on precisely trimmed timeouts to change data direction on the RS485 lines. @@ -45,5 +45,5 @@ index a6f01a6063..4b2398b397 100644 \ No newline at end of file +#endif -- -2.25.1 +2.36.0 diff --git a/patches/0151-MCUboot-PORTENTA_H7_M7-Remove-LittleFS-format-reform.patch b/patches/0151-MCUboot-PORTENTA_H7_M7-Remove-LittleFS-format-reform.patch new file mode 100644 index 000000000..05afa54d7 --- /dev/null +++ b/patches/0151-MCUboot-PORTENTA_H7_M7-Remove-LittleFS-format-reform.patch @@ -0,0 +1,102 @@ +From 5c6217a65136ee255e5ba67bc86dd0909b25cc78 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Mon, 4 Apr 2022 10:12:28 +0200 +Subject: [PATCH 151/157] MCUboot:PORTENTA_H7_M7:Remove LittleFS format, + reformat, rename + +--- + .../filesystem/littlefs/include/littlefs/LittleFileSystem.h | 6 ++++++ + storage/filesystem/littlefs/source/LittleFileSystem.cpp | 4 ++++ + 2 files changed, 10 insertions(+) + +diff --git a/storage/filesystem/littlefs/include/littlefs/LittleFileSystem.h b/storage/filesystem/littlefs/include/littlefs/LittleFileSystem.h +index c1e3a3c299..0051f18da6 100644 +--- a/storage/filesystem/littlefs/include/littlefs/LittleFileSystem.h ++++ b/storage/filesystem/littlefs/include/littlefs/LittleFileSystem.h +@@ -65,6 +65,7 @@ public: + + virtual ~LittleFileSystem(); + ++#if !defined(TARGET_PORTENTA_H7_M7) || !defined(MCUBOOT_BOOTLOADER_BUILD) + /** Format a block device with the LittleFileSystem. + * + * The block device to format should be mounted when this function is called. +@@ -94,6 +95,7 @@ public: + lfs_size_t block_size = MBED_LFS_BLOCK_SIZE, + lfs_size_t lookahead = MBED_LFS_LOOKAHEAD); + ++#endif + /** Mount a file system to a block device. + * + * @param bd Block device to mount to. +@@ -107,6 +109,7 @@ public: + */ + virtual int unmount(); + ++#if !defined(TARGET_PORTENTA_H7_M7) || !defined(MCUBOOT_BOOTLOADER_BUILD) + /** Reformat a file system. Results in an empty and mounted file system. + * + * @param bd +@@ -118,6 +121,7 @@ public: + * @return 0 on success, negative error code on failure + */ + virtual int reformat(mbed::BlockDevice *bd); ++#endif + + /** Remove a file from the file system. + * +@@ -126,6 +130,7 @@ public: + */ + virtual int remove(const char *path); + ++#if !defined(TARGET_PORTENTA_H7_M7) || !defined(MCUBOOT_BOOTLOADER_BUILD) + /** Rename a file in the file system. + * + * @param path The name of the file to rename. +@@ -133,6 +138,7 @@ public: + * @return 0 on success, negative error code on failure + */ + virtual int rename(const char *path, const char *newpath); ++#endif + + /** Store information about the file in a stat structure + * +diff --git a/storage/filesystem/littlefs/source/LittleFileSystem.cpp b/storage/filesystem/littlefs/source/LittleFileSystem.cpp +index 752fa99aa5..3b808cf017 100644 +--- a/storage/filesystem/littlefs/source/LittleFileSystem.cpp ++++ b/storage/filesystem/littlefs/source/LittleFileSystem.cpp +@@ -241,6 +241,7 @@ int LittleFileSystem::unmount() + return res; + } + ++#if !defined(TARGET_PORTENTA_H7_M7) || !defined(MCUBOOT_BOOTLOADER_BUILD) + int LittleFileSystem::format(BlockDevice *bd, + lfs_size_t read_size, lfs_size_t prog_size, + lfs_size_t block_size, lfs_size_t lookahead) +@@ -338,6 +339,7 @@ int LittleFileSystem::reformat(BlockDevice *bd) + _mutex.unlock(); + return 0; + } ++#endif + + int LittleFileSystem::remove(const char *filename) + { +@@ -349,6 +351,7 @@ int LittleFileSystem::remove(const char *filename) + return lfs_toerror(err); + } + ++#if !defined(TARGET_PORTENTA_H7_M7) || !defined(MCUBOOT_BOOTLOADER_BUILD) + int LittleFileSystem::rename(const char *oldname, const char *newname) + { + _mutex.lock(); +@@ -358,6 +361,7 @@ int LittleFileSystem::rename(const char *oldname, const char *newname) + _mutex.unlock(); + return lfs_toerror(err); + } ++#endif + + int LittleFileSystem::mkdir(const char *name, mode_t mode) + { +-- +2.36.0 + diff --git a/patches/0152-MCUboot-PORTENTA_H7_Move-libc-rodata-after-bootloade.patch b/patches/0152-MCUboot-PORTENTA_H7_Move-libc-rodata-after-bootloade.patch new file mode 100644 index 000000000..d1c4b2664 --- /dev/null +++ b/patches/0152-MCUboot-PORTENTA_H7_Move-libc-rodata-after-bootloade.patch @@ -0,0 +1,34 @@ +From d679e96b0176e20371244583a3d03ecea4d041c7 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Tue, 5 Apr 2022 16:43:07 +0200 +Subject: [PATCH 152/157] MCUboot:PORTENTA_H7_Move libc rodata after bootloader + data to gain flash space + +--- + .../TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld +index 41c72141ed..0a54d17c76 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld +@@ -114,7 +114,6 @@ SECTIONS + *(.dtors) + + #if defined(MCUBOOT_BOOTLOADER_BUILD) && defined(TARGET_PORTENTA_H7_M7) +- *lib*.o(.rodata*) + *ltrans0*.o(.rodata*) + *ltrans1*.o(.rodata*) + *ltrans2*.o(.rodata*) +@@ -123,6 +122,8 @@ SECTIONS + + . = ABSOLUTE(0x0801F000); + KEEP(*(.bootloader_version)) ++ ++ *lib*.o(.rodata*) + #endif + + *(.rodata*) +-- +2.36.0 + diff --git a/patches/0153-NICLA_VISION-Add-device-name-in-target.json.patch b/patches/0153-NICLA_VISION-Add-device-name-in-target.json.patch new file mode 100644 index 000000000..a4c06ed6d --- /dev/null +++ b/patches/0153-NICLA_VISION-Add-device-name-in-target.json.patch @@ -0,0 +1,26 @@ +From 5f65d73a8d028e4f1c0d8cc74b686292a9a8ecfb Mon Sep 17 00:00:00 2001 +From: pennam +Date: Wed, 6 Apr 2022 13:55:55 +0200 +Subject: [PATCH 153/157] NICLA_VISION:Add device name in target.json + +--- + targets/targets.json | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/targets/targets.json b/targets/targets.json +index e0e4a8b6d8..2afaaf214f 100644 +--- a/targets/targets.json ++++ b/targets/targets.json +@@ -3544,7 +3544,8 @@ + ], + "features": [ + "BLE" +- ] ++ ], ++ "device_name": "STM32H747XIHx" + }, + "PORTENTA_H7_M4": { + "inherits": ["PORTENTA_H7"], +-- +2.36.0 + diff --git a/patches/0154-MCUboot-NICLA_VISION-linker-file-Reserve-space-for-k.patch b/patches/0154-MCUboot-NICLA_VISION-linker-file-Reserve-space-for-k.patch new file mode 100644 index 000000000..b5a92ad55 --- /dev/null +++ b/patches/0154-MCUboot-NICLA_VISION-linker-file-Reserve-space-for-k.patch @@ -0,0 +1,44 @@ +From f61549af517c2d7f953ed03be7a01f229be4dc36 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Wed, 6 Apr 2022 13:56:50 +0200 +Subject: [PATCH 154/157] MCUboot:NICLA_VISION: linker file:Reserve space for + keys and bootloader id + +--- + .../TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld +index 0a54d17c76..3e84731230 100644 +--- a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM7/TOOLCHAIN_GCC_ARM/STM32H747xI_CM7.ld +@@ -46,7 +46,7 @@ MEMORY + } + + +-#if defined(MCUBOOT_BOOTLOADER_BUILD) && defined(TARGET_PORTENTA_H7_M7) ++#if defined(MCUBOOT_BOOTLOADER_BUILD) && ( defined(TARGET_PORTENTA_H7_M7) || defined(TARGET_NICLA_VISION)) + _ConfigStart = 0x0802F000; + _IdentificationStart = 0x080002F0; + _EncryptKeyStart = 0x08000300; +@@ -88,7 +88,7 @@ SECTIONS + .text : + { + KEEP(*(.isr_vector)) +-#if defined(MCUBOOT_BOOTLOADER_BUILD) && defined(TARGET_PORTENTA_H7_M7) ++#if defined(MCUBOOT_BOOTLOADER_BUILD) && ( defined(TARGET_PORTENTA_H7_M7) || defined(TARGET_NICLA_VISION)) + . = ABSOLUTE(0x080002F0); + KEEP(*(.bootloader_identification)) + KEEP(*(.signing_key)) +@@ -113,7 +113,7 @@ SECTIONS + *(SORT(.dtors.*)) + *(.dtors) + +-#if defined(MCUBOOT_BOOTLOADER_BUILD) && defined(TARGET_PORTENTA_H7_M7) ++#if defined(MCUBOOT_BOOTLOADER_BUILD) && ( defined(TARGET_PORTENTA_H7_M7) || defined(TARGET_NICLA_VISION)) + *ltrans0*.o(.rodata*) + *ltrans1*.o(.rodata*) + *ltrans2*.o(.rodata*) +-- +2.36.0 + diff --git a/patches/0155-ST-CAN-allow-sending-CAN-remote-frames.patch b/patches/0155-ST-CAN-allow-sending-CAN-remote-frames.patch new file mode 100644 index 000000000..a8b872ad2 --- /dev/null +++ b/patches/0155-ST-CAN-allow-sending-CAN-remote-frames.patch @@ -0,0 +1,29 @@ +From e8e2086a58f7a824c12f9f8c1a04c7ae4e05200f Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Tue, 10 May 2022 18:07:10 +0200 +Subject: [PATCH 155/157] ST: CAN: allow sending CAN remote frames + +--- + targets/TARGET_STM/can_api.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/targets/TARGET_STM/can_api.c b/targets/TARGET_STM/can_api.c +index ad00e39a2b..a5715f2b0d 100644 +--- a/targets/TARGET_STM/can_api.c ++++ b/targets/TARGET_STM/can_api.c +@@ -408,7 +408,11 @@ int can_write(can_t *obj, CAN_Message msg, int cc) + TxHeader.IdType = FDCAN_EXTENDED_ID; + } + +- TxHeader.TxFrameType = FDCAN_DATA_FRAME; ++ if (msg.type == CANData) { ++ TxHeader.TxFrameType = FDCAN_DATA_FRAME; ++ } else { ++ TxHeader.TxFrameType = FDCAN_REMOTE_FRAME; ++ } + TxHeader.DataLength = msg.len << 16; + TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE; + TxHeader.BitRateSwitch = FDCAN_BRS_OFF; +-- +2.36.0 + diff --git a/patches/0156-Add-Portenta-X8-target.patch b/patches/0156-Add-Portenta-X8-target.patch new file mode 100644 index 000000000..3ce5e8814 --- /dev/null +++ b/patches/0156-Add-Portenta-X8-target.patch @@ -0,0 +1,1055 @@ +From 23b27170e02699482e86d7d104a743ed385c7dfa Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Tue, 18 Jan 2022 16:53:27 +0100 +Subject: [PATCH 156/157] Add Portenta X8 target + +--- + .../TARGET_PORTENTA_X8/CMakeLists.txt | 16 + + .../TARGET_PORTENTA_X8/PeripheralPins.c | 570 ++++++++++++++++++ + .../TARGET_PORTENTA_X8/PinNames.h | 381 ++++++++++++ + targets/targets.json | 34 +- + 4 files changed, 1000 insertions(+), 1 deletion(-) + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/CMakeLists.txt + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PeripheralPins.c + create mode 100644 targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h + +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/CMakeLists.txt b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/CMakeLists.txt +new file mode 100644 +index 0000000000..d5015acdf4 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/CMakeLists.txt +@@ -0,0 +1,16 @@ ++# Copyright (c) 2020 ARM Limited. All rights reserved. ++# SPDX-License-Identifier: Apache-2.0 ++ ++add_library(mbed-portenta-x8 INTERFACE) ++ ++target_sources(mbed-portenta-x8 ++ INTERFACE ++ PeripheralPins.c ++) ++ ++target_include_directories(mbed-portenta-x8 ++ INTERFACE ++ . ++) ++ ++target_link_libraries(mbed-portenta-x8 INTERFACE mbed-stm32h747xi-cm4) +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PeripheralPins.c +new file mode 100644 +index 0000000000..3b1cf1075b +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PeripheralPins.c +@@ -0,0 +1,570 @@ ++/* mbed Microcontroller Library ++ * SPDX-License-Identifier: BSD-3-Clause ++ ****************************************************************************** ++ * ++ * Copyright (c) 2016-2020 STMicroelectronics. ++ * All rights reserved. ++ * ++ * This software component is licensed by ST under BSD 3-Clause license, ++ * the "License"; You may not use this file except in compliance with the ++ * License. You may obtain a copy of the License at: ++ * opensource.org/licenses/BSD-3-Clause ++ * ++ ****************************************************************************** ++ * ++ * Automatically generated from STM32CubeMX/db/mcu/STM32H747XIHx.xml ++ */ ++ ++#include "PeripheralPins.h" ++#include "mbed_toolchain.h" ++ ++//============================================================================== ++// Notes ++// ++// - The pins mentioned Px_y_ALTz are alternative possibilities which use other ++// HW peripheral instances. You can use them the same way as any other "normal" ++// pin (i.e. PwmOut pwm(PA_7_ALT0);). These pins are not displayed on the board ++// pinout image on mbed.org. ++// ++// - The pins which are connected to other components present on the board have ++// the comment "Connected to xxx". The pin function may not work properly in this ++// case. These pins may not be displayed on the board pinout image on mbed.org. ++// Please read the board reference manual and schematic for more information. ++// ++// - Warning: pins connected to the default STDIO_UART_TX and STDIO_UART_RX pins are commented ++// See https://os.mbed.com/teams/ST/wiki/STDIO for more information. ++// ++//============================================================================== ++ ++ ++//*** ADC *** ++ ++MBED_WEAK const PinMap PinMap_ADC[] = { ++ {PA_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_INP16 ++ {PA_0C, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_INP0 ++ {PA_0C_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC2_INP0 ++ {PA_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC1_INP17 ++ {PA_1C, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_INP1 ++ {PA_1C_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_INP1 ++ {PA_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_INP14 ++ {PA_2_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_INP14 ++ {PA_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_INP15 ++ {PA_3_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_INP15 ++ {PA_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_INP18 ++ {PA_4_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC2_INP18 ++ {PA_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC1_INP19 ++ {PA_5_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC2_INP19 ++ {PA_6, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_INP3 ++ {PA_6_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_INP3 ++ {PA_7, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_INP7 ++ {PA_7_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC2_INP7 ++ {PB_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_INP9 ++ {PB_0_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC2_INP9 ++ {PB_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_INP5 ++ {PB_1_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_INP5 ++ {PC_0, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_INP10 ++ {PC_0_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_INP10 ++ {PC_0_ALT1, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC3_INP10 ++ {PC_1, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_INP11 ++ {PC_1_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_INP11 ++ {PC_1_ALT1, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC3_INP11 ++ {PC_2, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_INP12 ++ {PC_2_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_INP12 ++ {PC_2_ALT1, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC3_INP12 ++ {PC_2C, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC3_INP0 ++ {PC_3, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_INP13 ++ {PC_3_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC2_INP13 ++ {PC_3C, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC3_INP1 ++ {PC_4, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_INP4 ++ {PC_4_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_INP4 ++ {PC_5, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_INP8 ++ {PC_5_ALT0, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC2_INP8 ++ {PF_3, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_INP5 ++ {PF_4, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC3_INP9 ++ {PF_5, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_INP4 ++ {PF_6, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC3_INP8 ++ {PF_7, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC3_INP3 ++ {PF_8, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC3_INP7 ++ {PF_9, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC3_INP2 ++ {PF_10, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_INP6 ++ {PF_11, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_INP2 ++ {PF_12, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_INP6 ++ {PF_13, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_INP2 ++ {PF_14, ADC_2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC2_INP6 ++ {PH_2, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC3_INP13 ++ {PH_3, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC3_INP14 ++ {PH_4, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC3_INP15 ++ {PH_5, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC3_INP16 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_ADC_Internal[] = { ++ {ADC_TEMP, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC3_INP18 ++ {ADC_VREF, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 19, 0)}, // ADC3_INP19 ++ {ADC_VBAT, ADC_3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC3_INP17 ++ {NC, NC, 0} ++}; ++ ++//*** DAC *** ++ ++MBED_WEAK const PinMap PinMap_DAC[] = { ++ {PA_4, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1 ++ {PA_5, DAC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2 ++ {NC, NC, 0} ++}; ++ ++//*** I2C *** ++ ++MBED_WEAK const PinMap PinMap_I2C_SDA[] = { ++ {PB_7, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_7_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_9, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_9_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_11, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PC_9, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PD_13, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PF_0, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PF_15, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PH_5, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PH_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PH_12, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_I2C_SCL[] = { ++ {PA_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PB_6, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_6_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_8, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, ++ {PB_8_ALT0, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C4)}, ++ {PB_10, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PD_12, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PF_1, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PF_14, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {PH_4, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, ++ {PH_7, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, ++ {PH_11, I2C_4, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C4)}, ++ {NC, NC, 0} ++}; ++ ++//*** PWM *** ++ ++// TIM5 cannot be used because already used by the us_ticker ++// TIM2 cannot be used because already used by the us_ticker (DUAL_CORE) ++MBED_WEAK const PinMap PinMap_PWM[] = { ++// {PA_0, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 ++// {PA_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 ++// {PA_1, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 ++// {PA_1, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 ++ {PA_1, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 1)}, // TIM15_CH1N ++// {PA_2, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 ++// {PA_2, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 ++ {PA_2, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 0)}, // TIM15_CH1 ++// {PA_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 ++// {PA_3, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 ++ {PA_3, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 2, 0)}, // TIM15_CH2 ++// {PA_5, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 ++ {PA_5, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PA_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 ++ {PA_6_ALT0, PWM_13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 ++ {PA_7, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PA_7_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 ++ {PA_7_ALT1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PA_7_ALT2, PWM_14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 ++// {PA_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 ++// {PA_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 ++// {PA_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 ++ {PA_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 ++// {PA_15, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 ++ {PB_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PB_0_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 ++ {PB_0_ALT1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PB_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PB_1_ALT0, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 ++ {PB_1_ALT1, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++// {PB_3, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 ++ {PB_4, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 ++ {PB_5, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 ++ {PB_6, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 ++ {PB_6_ALT0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N ++ {PB_7, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 ++ {PB_7_ALT0, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N ++ {PB_8, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 ++ {PB_8_ALT0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1 ++ {PB_9, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 ++ {PB_9_ALT0, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1 ++// {PB_10, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 ++// {PB_11, PWM_2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 ++ {PB_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PB_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PB_14_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PB_14_ALT1, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 1, 0)}, // TIM12_CH1 ++ {PB_15, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PB_15_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++ {PB_15_ALT1, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 2, 0)}, // TIM12_CH2 ++ {PC_6, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 ++ {PC_6_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 ++ {PC_7, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 ++ {PC_7_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PC_8, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 ++ {PC_8_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 ++ {PC_9, PWM_3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 ++ {PC_9_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4 ++ {PD_12, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 ++ {PD_13, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 ++ {PD_14, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 ++ {PD_15, PWM_4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 ++ {PE_4, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 1)}, // TIM15_CH1N ++ {PE_5, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 1, 0)}, // TIM15_CH1 ++ {PE_6, PWM_15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF4_TIM15, 2, 0)}, // TIM15_CH2 ++ {PE_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PE_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 ++ {PE_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PE_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 ++ {PE_12, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PE_13, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 ++ {PE_14, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 ++ {PF_6, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 0)}, // TIM16_CH1 ++ {PF_7, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 0)}, // TIM17_CH1 ++ {PF_8, PWM_13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 ++ {PF_8_ALT0, PWM_16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM16, 1, 1)}, // TIM16_CH1N ++ {PF_9, PWM_14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 ++ {PF_9_ALT0, PWM_17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM17, 1, 1)}, // TIM17_CH1N ++ {PH_6, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 1, 0)}, // TIM12_CH1 ++ {PH_9, PWM_12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM12, 2, 0)}, // TIM12_CH2 ++// {PH_10, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 ++// {PH_11, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 ++// {PH_12, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 ++ {PH_13, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PH_14, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PH_15, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++// {PI_0, PWM_5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 ++ {PI_2, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4 ++ {PI_5, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 ++ {PI_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PI_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 ++ {PJ_6, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PJ_7, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PJ_8, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N ++ {PJ_8_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 ++ {PJ_9, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 ++ {PJ_9_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N ++ {PJ_10, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N ++ {PJ_10_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 ++ {PJ_11, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 ++ {PJ_11_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N ++ {PK_0, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N ++ {PK_0_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3 ++ {PK_1, PWM_1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 ++ {PK_1_ALT0, PWM_8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N ++ {NC, NC, 0} ++}; ++//*** PWM_HRTIM *** ++ ++MBED_WEAK const PinMap PinMap_PWM_HRTIM[] = { ++ {PA_8, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHB, 1)}, // HRTIM_CHB2 ++ {PA_9, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHC, 0)}, // HRTIM_CHC1 ++ {PA_10, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHC, 1)}, // HRTIM_CHC2 ++ {PA_11, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHD, 0)}, // HRTIM_CHD1 ++ {PA_12, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHD, 1)}, // HRTIM_CHD2 ++ {PC_6, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_HRTIM1, CHA, 0)}, // HRTIM_CHA1 ++ {PC_7, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_HRTIM1, CHA, 1)}, // HRTIM_CHA2 ++ {PC_8, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_HRTIM1, CHB, 0)}, // HRTIM_CHB1 ++ {PG_6, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHE, 0)}, // HRTIM_CHE1 ++ {PG_7, PWM_I, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_HRTIM1, CHE, 1)}, // HRTIM_CHE2 ++ {NC, NC, 0} ++}; ++ ++ ++//*** SERIAL *** ++ ++MBED_WEAK const PinMap PinMap_UART_TX[] = { ++ {PA_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PA_2, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_9, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_9_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PA_12, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_UART4)}, ++ {PA_15, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PB_4, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PB_6, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PB_6_ALT0, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_6_ALT1, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART)}, ++ {PB_9, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_13, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_14, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)}, ++ {PC_6, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PC_10, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PC_10_ALT0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PC_12, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_1, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PD_5, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_8, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PE_1, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_8, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_7, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_14, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PH_13, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PJ_8, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_UART_RX[] = { ++ {PA_1, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PA_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_8, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PA_10, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_10_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PA_11, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_UART4)}, ++ {PB_3, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF11_UART7)}, ++ {PB_5, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_7, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PB_7_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_LPUART)}, ++ {PB_8, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_12, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF14_UART5)}, ++ {PB_15, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)}, ++ {PC_7, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PC_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PC_11_ALT0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PD_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PD_2, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_6, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_9, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PE_0, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_7, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_6, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_9, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PH_14, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PI_9, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PJ_9, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_UART_RTS[] = { ++ {PA_1, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_12, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_12_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PA_15, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_14, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_14_ALT0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PC_8, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_4, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_12, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PD_15, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_9, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_8, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_8, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PG_12, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_UART_CTS[] = { ++ {PA_0, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PA_11, UART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, ++ {PA_11_ALT0, LPUART_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART)}, ++ {PB_0, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PB_13, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PB_15, UART_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, ++ {PC_9, UART_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, ++ {PD_3, UART_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, ++ {PD_11, UART_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, ++ {PD_14, UART_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART8)}, ++ {PE_10, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PF_9, UART_7, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART7)}, ++ {PG_13, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {PG_15, UART_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART6)}, ++ {NC, NC, 0} ++}; ++ ++//*** SPI *** ++ ++MBED_WEAK const PinMap PinMap_SPI_MOSI[] = { ++ {PA_7, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_7_ALT0, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_2, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI3)}, ++ {PB_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PB_5_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI3)}, ++ {PB_5_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_15, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_1, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_12, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PD_6, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI3)}, ++ {PD_7, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PE_6, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_14, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_9, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PF_11, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_14, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PI_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PJ_10, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_SPI_MISO[] = { ++ {PA_6, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_6_ALT0, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PB_4_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PB_4_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_14, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_2, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_11, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PE_5, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_13, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_8, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_9, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PG_12, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PH_7, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PI_2, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PJ_11, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_SPI_SCLK[] = { ++ {PA_5, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_5_ALT0, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++// {PA_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PA_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PB_3, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PB_3_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PB_3_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PB_10, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PB_13, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PC_10, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PD_3, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PE_2, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_12, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_7, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_11, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PG_13, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PH_6, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PI_1, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PK_0, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_SPI_SSEL[] = { ++ {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_4_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PA_4_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF8_SPI6)}, ++ {PA_11, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PA_15_ALT0, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, ++ {PA_15_ALT1, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI6)}, ++ {PB_4, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF7_SPI2)}, ++ {PB_9, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PB_12, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PE_4, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PE_11, SPI_4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI4)}, ++ {PF_6, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PG_8, SPI_6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI6)}, ++ {PG_10, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, ++ {PH_5, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {PI_0, SPI_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI2)}, ++ {PK_1, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI5)}, ++ {NC, NC, 0} ++}; ++ ++//*** CAN *** ++ ++MBED_WEAK const PinMap PinMap_CAN_RD[] = { ++ {PA_11, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_5, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PB_8, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_12, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PD_0, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PH_14, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PI_9, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_CAN_TD[] = { ++ {PA_12, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_6, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PB_9, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PB_13, CAN_2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN2)}, ++ {PD_1, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {PH_13, CAN_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_FDCAN1)}, ++ {NC, NC, 0} ++}; ++ ++//*** QUADSPI *** ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA0[] = { ++ {PC_9, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO0 ++ {PD_11, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO0 ++ {PF_8, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO0 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA1[] = { ++ {PC_10, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO1 ++ {PD_12, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO1 ++ {PF_9, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_IO1 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA2[] = { ++ {PE_2, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO2 ++ {PF_7, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO2 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_DATA3[] = { ++ {PA_1, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO3 ++ {PD_13, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO3 ++ {PF_6, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_IO3 ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_SCLK[] = { ++ {PB_2, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_CLK ++ {PF_10, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_CLK ++ {NC, NC, 0} ++}; ++ ++MBED_WEAK const PinMap PinMap_QSPI_SSEL[] = { ++ {PB_6, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_NCS ++ {PB_10, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QUADSPI)}, // QUADSPI_BK1_NCS ++ {PG_6, QSPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QUADSPI)}, // QUADSPI_BK1_NCS ++ {NC, NC, 0} ++}; ++ ++//*** USBDEVICE *** ++ ++MBED_WEAK const PinMap PinMap_USB_FS[] = { ++// {PA_8, USB_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_SOF ++// {PA_9, USB_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_FS_VBUS ++// {PA_10, USB_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_ID ++ {PA_11, USB_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_DM ++ {PA_12, USB_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG1_FS)}, // USB_OTG_FS_DP ++ {NC, NC, 0} ++}; ++ ++//*** USBDEVICE *** ++ ++MBED_WEAK const PinMap PinMap_USB_HS[] = { ++#if (MBED_CONF_TARGET_USB_SPEED == USE_USB_HS_IN_FS) ++// {PA_4, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_SOF ++ {PB_12, USB_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_ID ++ {PB_13, USB_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS ++ {PB_14, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_DM ++ {PB_15, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG2_FS)}, // USB_OTG_HS_DP ++#else /* MBED_CONF_TARGET_USB_SPEED */ ++ {PA_3, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D0 ++ {PA_5, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_CK ++ {PB_0, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D1 ++ {PB_1, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D2 ++ {PB_5, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D7 ++ {PB_10, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D3 ++ {PB_11, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D4 ++ {PB_12, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D5 ++ {PB_13, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_D6 ++ {PC_0, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_STP ++ {PH_4, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_NXT ++ {PI_11, USB_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG2_HS)}, // USB_OTG_HS_ULPI_DIR ++#endif /* MBED_CONF_TARGET_USB_SPEED */ ++ {NC, NC, 0} ++}; +diff --git a/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h +new file mode 100644 +index 0000000000..1cce05b2e2 +--- /dev/null ++++ b/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8/PinNames.h +@@ -0,0 +1,381 @@ ++/* mbed Microcontroller Library ++ ******************************************************************************* ++ * Copyright (c) 2018, STMicroelectronics ++ * Copyright (c) 2020, Arduino SA ++ * ++ * SPDX-License-Identifier: BSD-3-Clause ++ * All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions are met: ++ * ++ * 1. Redistributions of source code must retain the above copyright notice, ++ * this list of conditions and the following disclaimer. ++ * 2. Redistributions in binary form must reproduce the above copyright notice, ++ * this list of conditions and the following disclaimer in the documentation ++ * and/or other materials provided with the distribution. ++ * 3. Neither the name of STMicroelectronics nor the names of its contributors ++ * may be used to endorse or promote products derived from this software ++ * without specific prior written permission. ++ * ++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE ++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ++ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ******************************************************************************* ++ */ ++ ++/* MBED TARGET LIST: PORTENTA_H7_M4, PORTENTA_H7_M7 */ ++ ++#ifndef MBED_PINNAMES_H ++#define MBED_PINNAMES_H ++ ++#include "cmsis.h" ++#include "PinNamesTypes.h" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#define DUAL_PAD 0xF00 ++ ++typedef enum { ++ ALT0 = 0x100, ++ ALT1 = 0x200, ++ ALT2 = 0x300, ++ ALT3 = 0x400, ++ ALT4 = 0x500, ++} ALTx; ++ ++typedef enum { ++ PA_0 = 0x00, ++ PA_0C = PA_0 | DUAL_PAD, // dual pad ++ PA_0C_ALT0 = PA_0C | ALT0, // same pin used for alternate HW ++ PA_0C_ALT1 = PA_0C | ALT1, // same pin used for alternate HW ++ PA_0C_ALT2 = PA_0C | ALT2, // same pin used for alternate HW ++ PA_1 = 0x01, ++ PA_1C = PA_1 | DUAL_PAD, // dual pad ++ PA_1C_ALT0 = PA_1C | ALT0, // same pin used for alternate HW ++ PA_1_ALT0 = PA_1 | ALT0, // same pin used for alternate HW ++ PA_2 = 0x02, ++ PA_2_ALT0 = PA_2 | ALT0, // same pin used for alternate HW ++ PA_3 = 0x03, ++ PA_3_ALT0 = PA_3 | ALT0, // same pin used for alternate HW ++ PA_4 = 0x04, ++ PA_4_ALT0 = PA_4 | ALT0, // same pin used for alternate HW ++ PA_4_ALT1 = PA_4 | ALT1, // same pin used for alternate HW ++ PA_5 = 0x05, ++ PA_5_ALT0 = PA_5 | ALT0, // same pin used for alternate HW ++ PA_5_ALT1 = PA_5 | ALT1, // same pin used for alternate HW ++ PA_5_ALT2 = PA_5 | ALT2, // same pin used for alternate HW ++ PA_6 = 0x06, ++ PA_6_ALT0 = PA_6 | ALT0, // same pin used for alternate HW ++ PA_7 = 0x07, ++ PA_7_ALT0 = PA_7 | ALT0, // same pin used for alternate HW ++ PA_7_ALT1 = PA_7 | ALT1, // same pin used for alternate HW ++ PA_7_ALT2 = PA_7 | ALT2, // same pin used for alternate HW ++ PA_8 = 0x08, ++ PA_9 = 0x09, ++ PA_9_ALT0 = PA_9 | ALT0, // same pin used for alternate HW ++ PA_10 = 0x0A, ++ PA_10_ALT0 = PA_10 | ALT0, // same pin used for alternate HW ++ PA_11 = 0x0B, ++ PA_11_ALT0 = PA_11 | ALT0, // same pin used for alternate HW ++ PA_12 = 0x0C, ++ PA_12_ALT0 = PA_12 | ALT0, // same pin used for alternate HW ++ PA_13 = 0x0D, ++ PA_14 = 0x0E, ++ PA_15 = 0x0F, ++ PA_15_ALT0 = PA_15 | ALT0, // same pin used for alternate HW ++ PA_15_ALT1 = PA_15 | ALT1, // same pin used for alternate HW ++ PB_0 = 0x10, ++ PB_0_ALT0 = PB_0 | ALT0, // same pin used for alternate HW ++ PB_0_ALT1 = PB_0 | ALT1, // same pin used for alternate HW ++ PB_0_ALT2 = PB_0 | ALT2, // same pin used for alternate HW ++ PB_1 = 0x11, ++ PB_1_ALT0 = PB_1 | ALT0, // same pin used for alternate HW ++ PB_1_ALT1 = PB_1 | ALT1, // same pin used for alternate HW ++ PB_2 = 0x12, ++ PB_3 = 0x13, ++ PB_3_ALT0 = PB_3 | ALT0, // same pin used for alternate HW ++ PB_3_ALT1 = PB_3 | ALT1, // same pin used for alternate HW ++ PB_4 = 0x14, ++ PB_4_ALT0 = PB_4 | ALT0, // same pin used for alternate HW ++ PB_4_ALT1 = PB_4 | ALT1, // same pin used for alternate HW ++ PB_5 = 0x15, ++ PB_5_ALT0 = PB_5 | ALT0, // same pin used for alternate HW ++ PB_5_ALT1 = PB_5 | ALT1, // same pin used for alternate HW ++ PB_6 = 0x16, ++ PB_6_ALT0 = PB_6 | ALT0, // same pin used for alternate HW ++ PB_6_ALT1 = PB_6 | ALT1, // same pin used for alternate HW ++ PB_7 = 0x17, ++ PB_7_ALT0 = PB_7 | ALT0, // same pin used for alternate HW ++ PB_8 = 0x18, ++ PB_8_ALT0 = PB_8 | ALT0, // same pin used for alternate HW ++ PB_9 = 0x19, ++ PB_9_ALT0 = PB_9 | ALT0, // same pin used for alternate HW ++ PB_10 = 0x1A, ++ PB_11 = 0x1B, ++ PB_12 = 0x1C, ++ PB_13 = 0x1D, ++ PB_14 = 0x1E, ++ PB_14_ALT0 = PB_14 | ALT0, // same pin used for alternate HW ++ PB_14_ALT1 = PB_14 | ALT1, // same pin used for alternate HW ++ PB_15 = 0x1F, ++ PB_15_ALT0 = PB_15 | ALT0, // same pin used for alternate HW ++ PB_15_ALT1 = PB_15 | ALT1, // same pin used for alternate HW ++ PC_0 = 0x20, ++ PC_0_ALT0 = PC_0 | ALT0, // same pin used for alternate HW ++ PC_0_ALT1 = PC_0 | ALT1, // same pin used for alternate HW ++ PC_1 = 0x21, ++ PC_1_ALT0 = PC_1 | ALT0, // same pin used for alternate HW ++ PC_1_ALT1 = PC_1 | ALT1, // same pin used for alternate HW ++ PC_1_ALT2 = PC_1 | ALT2, // same pin used for alternate HW ++ PC_1_ALT3 = PC_1 | ALT3, // same pin used for alternate HW ++ PC_1_ALT4 = PC_1 | ALT4, // same pin used for alternate HW ++ PC_2 = 0x22, ++ PC_2C = PC_2 | DUAL_PAD, // dual pad ++ PC_2C_ALT0 = PC_2C | ALT0, // same pin used for alternate HW ++ PC_2_ALT0 = PC_2 | ALT0, // same pin used for alternate HW ++ PC_2_ALT1 = PC_2 | ALT1, // same pin used for alternate HW ++ PC_2_ALT2 = PC_2 | ALT2, // same pin used for alternate HW ++ PC_2_ALT3 = PC_2 | ALT3, // same pin used for alternate HW ++ PC_2_ALT4 = PC_2 | ALT4, // same pin used for alternate HW ++ PC_3 = 0x23, ++ PC_3C = PC_3 | DUAL_PAD, // dual pad ++ PC_3_ALT0 = PC_3 | ALT0, // same pin used for alternate HW ++ PC_3_ALT1 = PC_3 | ALT1, // same pin used for alternate HW ++ PC_3_ALT2 = PC_3 | ALT2, // same pin used for alternate HW ++ PC_4 = 0x24, ++ PC_4_ALT0 = PC_4 | ALT0, // same pin used for alternate HW ++ PC_5 = 0x25, ++ PC_5_ALT0 = PC_5 | ALT0, // same pin used for alternate HW ++ PC_5_ALT1 = PC_5 | ALT1, // same pin used for alternate HW ++ PC_5_ALT2 = PC_5 | ALT2, // same pin used for alternate HW ++ PC_6 = 0x26, ++ PC_6_ALT0 = PC_6 | ALT0, // same pin used for alternate HW ++ PC_7 = 0x27, ++ PC_7_ALT0 = PC_7 | ALT0, // same pin used for alternate HW ++ PC_8 = 0x28, ++ PC_8_ALT0 = PC_8 | ALT0, // same pin used for alternate HW ++ PC_9 = 0x29, ++ PC_9_ALT0 = PC_9 | ALT0, // same pin used for alternate HW ++ PC_10 = 0x2A, ++ PC_10_ALT0 = PC_10 | ALT0, // same pin used for alternate HW ++ PC_11 = 0x2B, ++ PC_11_ALT0 = PC_11 | ALT0, // same pin used for alternate HW ++ PC_12 = 0x2C, ++ PC_13 = 0x2D, ++ PC_14 = 0x2E, ++ PC_15 = 0x2F, ++ PD_0 = 0x30, ++ PD_1 = 0x31, ++ PD_2 = 0x32, ++ PD_3 = 0x33, ++ PD_4 = 0x34, ++ PD_5 = 0x35, ++ PD_6 = 0x36, ++ PD_7 = 0x37, ++ PD_8 = 0x38, ++ PD_9 = 0x39, ++ PD_10 = 0x3A, ++ PD_11 = 0x3B, ++ PD_12 = 0x3C, ++ PD_13 = 0x3D, ++ PD_14 = 0x3E, ++ PD_15 = 0x3F, ++ PE_0 = 0x40, ++ PE_1 = 0x41, ++ PE_2 = 0x42, ++ PE_3 = 0x43, ++ PE_4 = 0x44, ++ PE_5 = 0x45, ++ PE_6 = 0x46, ++ PE_7 = 0x47, ++ PE_8 = 0x48, ++ PE_9 = 0x49, ++ PE_10 = 0x4A, ++ PE_11 = 0x4B, ++ PE_12 = 0x4C, ++ PE_13 = 0x4D, ++ PE_14 = 0x4E, ++ PE_15 = 0x4F, ++ PF_0 = 0x50, ++ PF_1 = 0x51, ++ PF_2 = 0x52, ++ PF_3 = 0x53, ++ PF_4 = 0x54, ++ PF_4_ALT0 = PF_4 | ALT0, // same pin used for alternate HW ++ PF_5 = 0x55, ++ PF_6 = 0x56, ++ PF_6_ALT0 = PF_6 | ALT0, // same pin used for alternate HW ++ PF_7 = 0x57, ++ PF_8 = 0x58, ++ PF_8_ALT0 = PF_8 | ALT0, // same pin used for alternate HW ++ PF_9 = 0x59, ++ PF_9_ALT0 = PF_9 | ALT0, // same pin used for alternate HW ++ PF_10 = 0x5A, ++ PF_10_ALT0 = PF_10 | ALT0, // same pin used for alternate HW ++ PF_11 = 0x5B, ++ PF_12 = 0x5C, ++ PF_12_ALT0 = PF_12 | ALT0, // same pin used for alternate HW ++ PF_13 = 0x5D, ++ PF_14 = 0x5E, ++ PF_14_ALT0 = PF_14 | ALT0, // same pin used for alternate HW ++ PF_15 = 0x5F, ++ PG_0 = 0x60, ++ PG_1 = 0x61, ++ PG_2 = 0x62, ++ PG_3 = 0x63, ++ PG_4 = 0x64, ++ PG_5 = 0x65, ++ PG_6 = 0x66, ++ PG_7 = 0x67, ++ PG_8 = 0x68, ++ PG_9 = 0x69, ++ PG_10 = 0x6A, ++ PG_11 = 0x6B, ++ PG_12 = 0x6C, ++ PG_13 = 0x6D, ++ PG_14 = 0x6E, ++ PG_15 = 0x6F, ++ PH_0 = 0x70, ++ PH_1 = 0x71, ++ PH_2 = 0x72, ++ PH_3 = 0x73, ++ PH_3_ALT0 = PH_3 | ALT0, // same pin used for alternate HW ++ PH_4 = 0x74, ++ PH_4_ALT0 = PH_4 | ALT0, // same pin used for alternate HW ++ PH_5 = 0x75, ++ PH_5_ALT0 = PH_5 | ALT0, // same pin used for alternate HW ++ PH_6 = 0x76, ++ PH_7 = 0x77, ++ PH_8 = 0x78, ++ PH_9 = 0x79, ++ PH_10 = 0x7A, ++ PH_11 = 0x7B, ++ PH_12 = 0x7C, ++ PH_13 = 0x7D, ++ PH_14 = 0x7E, ++ PH_15 = 0x7F, ++ PI_0 = 0x80, ++ PI_1 = 0x81, ++ PI_2 = 0x82, ++ PI_3 = 0x83, ++ PI_4 = 0x84, ++ PI_5 = 0x85, ++ PI_6 = 0x86, ++ PI_7 = 0x87, ++ PI_8 = 0x88, ++ PI_9 = 0x89, ++ PI_10 = 0x8A, ++ PI_11 = 0x8B, ++ PI_12 = 0x8C, ++ PI_13 = 0x8D, ++ PI_14 = 0x8E, ++ PI_15 = 0x8F, ++ PJ_0 = 0x90, ++ PJ_1 = 0x91, ++ PJ_2 = 0x92, ++ PJ_3 = 0x93, ++ PJ_4 = 0x94, ++ PJ_5 = 0x95, ++ PJ_6 = 0x96, ++ PJ_7 = 0x97, ++ PJ_8 = 0x98, ++ PJ_8_ALT0 = PJ_8 | ALT0, // same pin used for alternate HW ++ PJ_9 = 0x99, ++ PJ_9_ALT0 = PJ_9 | ALT0, // same pin used for alternate HW ++ PJ_10 = 0x9A, ++ PJ_10_ALT0 = PJ_10 | ALT0, // same pin used for alternate HW ++ PJ_11 = 0x9B, ++ PJ_11_ALT0 = PJ_11 | ALT0, // same pin used for alternate HW ++ PJ_12 = 0x9C, ++ PJ_13 = 0x9D, ++ PJ_14 = 0x9E, ++ PJ_15 = 0x9F, ++ PK_0 = 0xA0, ++ PK_0_ALT0 = PK_0 | ALT0, // same pin used for alternate HW ++ PK_1 = 0xA1, ++ PK_1_ALT0 = PK_1 | ALT0, // same pin used for alternate HW ++ PK_2 = 0xA2, ++ PK_3 = 0xA3, ++ PK_4 = 0xA4, ++ PK_5 = 0xA5, ++ PK_6 = 0xA6, ++ PK_7 = 0xA7, ++ ++ /**** ADC internal channels ****/ ++ ++ ADC_TEMP = 0xF0, // Internal pin virtual value ++ ADC_VREF = 0xF1, // Internal pin virtual value ++ ADC_VBAT = 0xF2, // Internal pin virtual value ++ ++ // STDIO for console print ++#ifdef MBED_CONF_TARGET_STDIO_UART_TX ++ CONSOLE_TX = MBED_CONF_TARGET_STDIO_UART_TX, ++#else ++ CONSOLE_TX = PD_5, ++#endif ++#ifdef MBED_CONF_TARGET_STDIO_UART_RX ++ CONSOLE_RX = MBED_CONF_TARGET_STDIO_UART_RX, ++#else ++ CONSOLE_RX = PD_6, ++#endif ++ ++ //Led mappings ++ LED_RED = PA_0, //Red ++ LED_GREEN = PA_0, //Green ++ LED_BLUE = PA_0, //Blue ++ ++ /**** OSCILLATOR pins ****/ ++ RCC_OSC32_IN = PC_14, ++ RCC_OSC32_OUT = PC_15, ++ RCC_OSC_IN = PH_0, ++ RCC_OSC_OUT = PH_1, ++ ++ /**** DEBUG pins ****/ ++ SYS_JTCK_SWCLK = PA_14, ++ SYS_JTDI = PA_15, ++ SYS_JTDO_SWO = PB_3, ++ SYS_JTMS_SWDIO = PA_13, ++ SYS_JTRST = PB_4, ++ SYS_PVD_IN = PB_7, ++ SYS_TRACECLK = PE_2, ++ SYS_TRACED0 = PE_3, ++ SYS_TRACED0_ALT0 = PC_1, ++ SYS_TRACED0_ALT1 = PG_13, ++ SYS_TRACED1 = PE_4, ++ SYS_TRACED1_ALT0 = PC_8, ++ SYS_TRACED1_ALT1 = PG_14, ++ SYS_TRACED2 = PE_5, ++ SYS_TRACED2_ALT0 = PD_2, ++ SYS_TRACED3 = PE_6, ++ SYS_TRACED3_ALT0 = PC_12, ++ SYS_TRGIO = PC_7, ++ SYS_WKUP0 = PA_0, ++ SYS_WKUP1 = PA_2, ++ SYS_WKUP2 = PC_13, ++ SYS_WKUP5 = PC_1, ++ ++ // Not connected ++ NC = (int)0xFFFFFFFF ++} PinName; ++ ++// Standardized LED and button names ++#define LED1 LED_RED ++#define LED2 LED_GREEN ++#define LED3 LED_BLUE ++#define BUTTON1 PE_5 ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/targets/targets.json b/targets/targets.json +index 2afaaf214f..415ef47f7f 100644 +--- a/targets/targets.json ++++ b/targets/targets.json +@@ -3565,6 +3565,37 @@ + "MPU" + ] + }, ++ "PORTENTA_X8": { ++ "inherits": ["MCU_STM32H747xI_CM4"], ++ "config": { ++ "hse_value": { ++ "help": "HSE default value is 25MHz in HAL", ++ "value": "25000000", ++ "macro_name": "HSE_VALUE" ++ }, ++ "lse_bypass": { ++ "help": "1 to use an oscillator (not a crystal) on 32k LSE", ++ "value": "1" ++ }, ++ "usb_speed": { ++ "help": "USE_USB_OTG_FS or USE_USB_OTG_HS or USE_USB_HS_IN_FS", ++ "value": "USE_USB_OTG_HS" ++ } ++ }, ++ "macros_add": [ ++ "MBEDTLS_FS_IO", ++ "MBEDTLS_SHA1_C", ++ "CM4_BOOT_BY_APPLICATION" ++ ], ++ "detect_code": ["0813"], ++ "overrides": { ++ "system_power_supply": "PWR_LDO_SUPPLY", ++ "clock_source": "USE_PLL_HSI", ++ "lse_available": 1, ++ "lpticker_delay_ticks": 0, ++ "i2c_timing_value_algo": true ++ } ++ }, + "MCU_STM32H750xB": { + "inherits": [ + "MCU_STM32H7" +@@ -3583,7 +3614,8 @@ + ], + "overrides": { + "system_power_supply": "PWR_LDO_SUPPLY" +- } ++ }, ++ "device_name": "STM32H747XIHx" + }, + "MCU_STM32H7A3xIQ": { + "inherits": [ +-- +2.36.0 + diff --git a/patches/0157-PortentaX8-remove-MPU-support.patch b/patches/0157-PortentaX8-remove-MPU-support.patch new file mode 100644 index 000000000..ecc82ca2e --- /dev/null +++ b/patches/0157-PortentaX8-remove-MPU-support.patch @@ -0,0 +1,30 @@ +From 2e10d655f2b90972531bda55a89d177babcfda8d Mon Sep 17 00:00:00 2001 +From: Martino Facchin +Date: Tue, 25 Jan 2022 17:17:58 +0100 +Subject: [PATCH 157/157] PortentaX8: remove MPU support + +--- + targets/targets.json | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/targets/targets.json b/targets/targets.json +index 415ef47f7f..677b43ed83 100644 +--- a/targets/targets.json ++++ b/targets/targets.json +@@ -3585,7 +3585,12 @@ + "macros_add": [ + "MBEDTLS_FS_IO", + "MBEDTLS_SHA1_C", +- "CM4_BOOT_BY_APPLICATION" ++ "CM4_BOOT_BY_APPLICATION", ++ "CORE_CM4", ++ "MBED_MPU_CUSTOM" ++ ], ++ "device_has_remove": [ ++ "MPU" + ], + "detect_code": ["0813"], + "overrides": { +-- +2.36.0 + diff --git a/patches/0158-Enable-Watchdog-for-ARDUINO_NANO33BLE.patch b/patches/0158-Enable-Watchdog-for-ARDUINO_NANO33BLE.patch new file mode 100644 index 000000000..74e184046 --- /dev/null +++ b/patches/0158-Enable-Watchdog-for-ARDUINO_NANO33BLE.patch @@ -0,0 +1,24 @@ +From 2230dbfabcbdb1d6fc861a2475937cf407b184a9 Mon Sep 17 00:00:00 2001 +From: Giampaolo Mancini +Date: Fri, 29 Apr 2022 17:12:22 +0200 +Subject: [PATCH 158/159] Enable Watchdog for ARDUINO_NANO33BLE + +--- + targets/targets.json | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/targets/targets.json b/targets/targets.json +index 677b43ed83..45a6e1f001 100644 +--- a/targets/targets.json ++++ b/targets/targets.json +@@ -6937,6 +6937,7 @@ + "components_remove": [ + "QSPIF" + ], ++ "device_has_add": ["WATCHDOG"], + "device_has_remove": [ + "QSPI", + "ITM" +-- +2.36.0 + diff --git a/patches/0159-Enable-Watchdog-for-NICLA.patch b/patches/0159-Enable-Watchdog-for-NICLA.patch new file mode 100644 index 000000000..e70ccfcbc --- /dev/null +++ b/patches/0159-Enable-Watchdog-for-NICLA.patch @@ -0,0 +1,48 @@ +From 6959b7db85d808b747949b528289eb9220eae0d5 Mon Sep 17 00:00:00 2001 +From: Giampaolo Mancini +Date: Fri, 29 Apr 2022 17:13:01 +0200 +Subject: [PATCH 159/159] Enable Watchdog for NICLA + +--- + .../TARGET_MCU_NRF52832/config/sdk_config.h | 12 ++++++++++++ + targets/targets.json | 1 + + 2 files changed, 13 insertions(+) + +diff --git a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h +index b1112d715a..dea0276ddb 100644 +--- a/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h ++++ b/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/TARGET_MCU_NRF52832/config/sdk_config.h +@@ -4487,6 +4487,18 @@ + #define NRFX_WDT_CONFIG_LOG_LEVEL 3 + #endif + ++ ++// NRFX_WDT_CONFIG_NO_IRQ - Remove WDT IRQ handling from WDT driver. ++//========================================================== ++ ++// <0=> Include WDT IRQ handling ++// <1=> Remove WDT IRQ handling ++ ++#ifndef NRFX_WDT_CONFIG_NO_IRQ ++#define NRFX_WDT_CONFIG_NO_IRQ 1 ++#endif ++ ++ + // NRFX_WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. + + // <0=> Default +diff --git a/targets/targets.json b/targets/targets.json +index 45a6e1f001..a42b64a071 100644 +--- a/targets/targets.json ++++ b/targets/targets.json +@@ -6763,6 +6763,7 @@ + "components_add": [ + "FLASHIAP" + ], ++ "device_has_add": ["WATCHDOG"], + "release_versions": ["5"], + "device_name": "nRF52832_xxAA", + "macros_add": [ +-- +2.36.0 + diff --git a/platform.txt b/platform.txt index 823814a0f..4b23ef92b 100644 --- a/platform.txt +++ b/platform.txt @@ -195,6 +195,16 @@ tools.imgtool.path={runtime.tools.imgtool.path} tools.imgtool.cmd=imgtool tools.imgtool.flags=sign --key "{build.keys.keychain}/{build.keys.sign_key}" --encrypt "{build.keys.keychain}/{build.keys.encrypt_key}" "{build.path}/{build.project_name}.bin" "{build.path}/{build.project_name}.bin" --align {build.alignment} --max-align {build.alignment} --version {build.version} --header-size {build.header_size} --pad-header --slot-size {build.slot_size} +# +# ADB WRAPPER +# + +tools.adb.path={runtime.tools.adb.path} +tools.adb.cmd=adb +tools.adb.upload.params.verbose=-v +tools.adb.upload.params.quiet= +tools.adb.upload.pattern="{path}/{cmd}" push "{build.path}/{build.project_name}.elf" "/tmp/arduino/m4-user-sketch.elf" + # # GDB (Debugger) # diff --git a/portenta.variables b/portenta.variables index ded76b43e..cd4ffa7b3 100644 --- a/portenta.variables +++ b/portenta.variables @@ -1,5 +1,5 @@ export FLAVOUR="portenta" -export VARIANTS=("PORTENTA_H7_M7 PORTENTA_H7_M4") -export FQBNS=("envie_m7 envie_m4") +export VARIANTS=("PORTENTA_H7_M7 PORTENTA_H7_M4 PORTENTA_X8") +export FQBNS=("envie_m7 envie_m4 portenta_x8") export LIBRARIES=("doom Ethernet MRI Portenta_SDRAM SPI WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug Himax_HM01B0 PDM Portenta_Video USBAudio KernelDebug Portenta_Audio RPC USBHID Wire Portenta_lvgl Camera rpclib USBHOST mbed-memory-status Portenta_SDCARD Scheduler USBMSD SocketWrapper GSM GPS MCUboot") export BOOTLOADERS=("PORTENTA_H7") diff --git a/variants/ARDUINO_NANO33BLE/conf/mbed_app.json b/variants/ARDUINO_NANO33BLE/conf/mbed_app.json index ddbdf49d1..279ca8808 100644 --- a/variants/ARDUINO_NANO33BLE/conf/mbed_app.json +++ b/variants/ARDUINO_NANO33BLE/conf/mbed_app.json @@ -1,6 +1,7 @@ { "macros": [ - "NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS=8" + "NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS=8", + "NRFX_WDT_ENABLED=1" ], "target_overrides": { "*": { @@ -15,4 +16,4 @@ "target.mbed_app_start": "0x10000" } } -} \ No newline at end of file +} diff --git a/variants/NANO_RP2040_CONNECT/conf/mbed_app.json b/variants/NANO_RP2040_CONNECT/conf/mbed_app.json index e35e61ff6..839285b81 100644 --- a/variants/NANO_RP2040_CONNECT/conf/mbed_app.json +++ b/variants/NANO_RP2040_CONNECT/conf/mbed_app.json @@ -2,6 +2,7 @@ "target_overrides": { "*": { "target.printf_lib": "std", + "target.macros_add": [ "MBEDTLS_ENTROPY_NV_SEED" ], "platform.stdio-buffered-serial": false, "platform.stdio-baud-rate": 115200, "platform.default-serial-baud-rate": 115200, diff --git a/variants/NICLA/conf/mbed_app.json b/variants/NICLA/conf/mbed_app.json index aace3cc95..319560887 100644 --- a/variants/NICLA/conf/mbed_app.json +++ b/variants/NICLA/conf/mbed_app.json @@ -3,7 +3,8 @@ "MBED_HEAP_STATS_ENABLED=1", "MBED_STACK_STATS_ENABLED=1", "MBED_MEM_TRACING_ENABLED=1", - "NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS=8" + "NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS=8", + "NRFX_WDT_ENABLED=1" ], "target_overrides": { "*": { @@ -38,4 +39,4 @@ "target.macros_remove": ["CONFIG_GPIO_AS_PINRESET"] } } -} \ No newline at end of file +} diff --git a/variants/PORTENTA_H7_M4/conf/mbed_app.json b/variants/PORTENTA_H7_M4/conf/mbed_app.json index 2cc031954..6379e53f9 100644 --- a/variants/PORTENTA_H7_M4/conf/mbed_app.json +++ b/variants/PORTENTA_H7_M4/conf/mbed_app.json @@ -17,7 +17,7 @@ "VIRTIO_SLAVE_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=100" + "RPMSG_BUFFER_SIZE=2048" ] } } diff --git a/variants/PORTENTA_H7_M4/defines.txt b/variants/PORTENTA_H7_M4/defines.txt index a0c93466c..e07df3bd5 100644 --- a/variants/PORTENTA_H7_M4/defines.txt +++ b/variants/PORTENTA_H7_M4/defines.txt @@ -55,7 +55,7 @@ -DNO_ATOMIC_64_SUPPORT -DNO_VTOR_RELOCATE -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=100 +-DRPMSG_BUFFER_SIZE=2048 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX diff --git a/variants/PORTENTA_H7_M7/conf/mbed_app.json b/variants/PORTENTA_H7_M7/conf/mbed_app.json index cffc96ec4..6cc069773 100644 --- a/variants/PORTENTA_H7_M7/conf/mbed_app.json +++ b/variants/PORTENTA_H7_M7/conf/mbed_app.json @@ -22,7 +22,7 @@ "VIRTIO_MASTER_ONLY", "NO_ATOMIC_64_SUPPORT", "METAL_MAX_DEVICE_REGIONS=2", - "RPMSG_BUFFER_SIZE=100" + "RPMSG_BUFFER_SIZE=2048" ] } } diff --git a/variants/PORTENTA_H7_M7/defines.txt b/variants/PORTENTA_H7_M7/defines.txt index f4600d25a..0f098cba9 100644 --- a/variants/PORTENTA_H7_M7/defines.txt +++ b/variants/PORTENTA_H7_M7/defines.txt @@ -54,7 +54,7 @@ -DMETAL_MAX_DEVICE_REGIONS=2 -DNO_ATOMIC_64_SUPPORT -DQSPI_NO_SAMPLE_SHIFT --DRPMSG_BUFFER_SIZE=100 +-DRPMSG_BUFFER_SIZE=2048 -DSTM32H747xx -DTARGET_CORDIO -DTARGET_CORTEX diff --git a/variants/PORTENTA_X8/cflags.txt b/variants/PORTENTA_X8/cflags.txt new file mode 100644 index 000000000..5ea7d6111 --- /dev/null +++ b/variants/PORTENTA_X8/cflags.txt @@ -0,0 +1,27 @@ +-c +-std=gnu11 +-DAPPLICATION_ADDR=0x8100000 +-DAPPLICATION_RAM_ADDR=0x10000000 +-DAPPLICATION_RAM_SIZE=0x48000 +-DAPPLICATION_SIZE=0x100000 +-DMBED_RAM1_SIZE=0x80000 +-DMBED_RAM1_START=0x24000000 +-DMBED_RAM_SIZE=0x48000 +-DMBED_RAM_START=0x10000000 +-DMBED_ROM_SIZE=0x100000 +-DMBED_ROM_START=0x8100000 +-DMBED_TRAP_ERRORS_ENABLED=1 +-Os +-Wall +-Wextra +-Wno-missing-field-initializers +-Wno-unused-parameter +-fdata-sections +-ffunction-sections +-fmessage-length=0 +-fomit-frame-pointer +-funsigned-char +-mcpu=cortex-m4 +-mfloat-abi=softfp +-mfpu=fpv4-sp-d16 +-mthumb diff --git a/variants/PORTENTA_X8/conf/.mbedignore b/variants/PORTENTA_X8/conf/.mbedignore new file mode 100644 index 000000000..d10167ba6 --- /dev/null +++ b/variants/PORTENTA_X8/conf/.mbedignore @@ -0,0 +1 @@ +mbed-os/connectivity/nanostack/* \ No newline at end of file diff --git a/variants/PORTENTA_X8/conf/mbed_app.json b/variants/PORTENTA_X8/conf/mbed_app.json new file mode 100644 index 000000000..08b653062 --- /dev/null +++ b/variants/PORTENTA_X8/conf/mbed_app.json @@ -0,0 +1,23 @@ +{ + "target_overrides": { + "*": { + "target.printf_lib": "std", + "platform.stdio-buffered-serial": false, + "platform.stdio-baud-rate": 115200, + "platform.default-serial-baud-rate": 115200, + "platform.callback-nontrivial": true, + "platform.all-stats-enabled": true, + "platform.memory-tracing-enabled": true, + "rtos.main-thread-stack-size": 32768, + "target.mbed_app_start": "0x8100000", + "target.macros_add": [ + "NO_VTOR_RELOCATE", + "METAL_INTERNAL", + "VIRTIO_SLAVE_ONLY", + "NO_ATOMIC_64_SUPPORT", + "METAL_MAX_DEVICE_REGIONS=2", + "RPMSG_BUFFER_SIZE=2048" + ] + } + } +} \ No newline at end of file diff --git a/variants/PORTENTA_X8/cxxflags.txt b/variants/PORTENTA_X8/cxxflags.txt new file mode 100644 index 000000000..0787fe177 --- /dev/null +++ b/variants/PORTENTA_X8/cxxflags.txt @@ -0,0 +1,29 @@ +-Wvla +-c +-fno-rtti +-std=gnu++14 +-DAPPLICATION_ADDR=0x8100000 +-DAPPLICATION_RAM_ADDR=0x10000000 +-DAPPLICATION_RAM_SIZE=0x48000 +-DAPPLICATION_SIZE=0x100000 +-DMBED_RAM1_SIZE=0x80000 +-DMBED_RAM1_START=0x24000000 +-DMBED_RAM_SIZE=0x48000 +-DMBED_RAM_START=0x10000000 +-DMBED_ROM_SIZE=0x100000 +-DMBED_ROM_START=0x8100000 +-DMBED_TRAP_ERRORS_ENABLED=1 +-Os +-Wall +-Wextra +-Wno-missing-field-initializers +-Wno-unused-parameter +-fdata-sections +-ffunction-sections +-fmessage-length=0 +-fomit-frame-pointer +-funsigned-char +-mcpu=cortex-m4 +-mfloat-abi=softfp +-mfpu=fpv4-sp-d16 +-mthumb diff --git a/variants/PORTENTA_X8/defines.txt b/variants/PORTENTA_X8/defines.txt new file mode 100644 index 000000000..37744313d --- /dev/null +++ b/variants/PORTENTA_X8/defines.txt @@ -0,0 +1,73 @@ + +-DARM_MATH_CM4 +-DCM4_BOOT_BY_APPLICATION +-D__CMSIS_RTOS +-DCOMPONENT_FLASHIAP=1 +-DCORE_CM4 +-D__CORTEX_M4 +-DDEVICE_ANALOGIN=1 +-DDEVICE_ANALOGOUT=1 +-DDEVICE_CAN=1 +-DDEVICE_CRC=1 +-DDEVICE_FLASH=1 +-DDEVICE_I2C=1 +-DDEVICE_I2C_ASYNCH=1 +-DDEVICE_I2CSLAVE=1 +-DDEVICE_INTERRUPTIN=1 +-DDEVICE_LPTICKER=1 +-DDEVICE_PORTIN=1 +-DDEVICE_PORTINOUT=1 +-DDEVICE_PORTOUT=1 +-DDEVICE_PWMOUT=1 +-DDEVICE_RESET_REASON=1 +-DDEVICE_RTC=1 +-DDEVICE_SERIAL=1 +-DDEVICE_SERIAL_FC=1 +-DDEVICE_SLEEP=1 +-DDEVICE_SPI=1 +-DDEVICE_SPI_ASYNCH=1 +-DDEVICE_SPISLAVE=1 +-DDEVICE_STDIO_MESSAGES=1 +-DDEVICE_TRNG=1 +-DDEVICE_USTICKER=1 +-DDEVICE_WATCHDOG=1 +-DEXTRA_IDLE_STACK_REQUIRED +-D__FPU_PRESENT=1 +-D__MBED__=1 +-DMBED_BUILD_TIMESTAMP=1643127518.8108099 +-D__MBED_CMSIS_RTOS_CM +-DMBED_MPU_CUSTOM +-DMBED_TICKLESS +-DMBEDTLS_FS_IO +-DMBEDTLS_SHA1_C +-DMETAL_INTERNAL +-DMETAL_MAX_DEVICE_REGIONS=2 +-DNO_ATOMIC_64_SUPPORT +-DNO_VTOR_RELOCATE +-DRPMSG_BUFFER_SIZE=2048 +-DSTM32H747xx +-DTARGET_CORTEX +-DTARGET_CORTEX_M +-DTARGET_LIKE_CORTEX_M4 +-DTARGET_LIKE_MBED +-DTARGET_M4 +-DTARGET_MCU_STM32 +-DTARGET_MCU_STM32H7 +-DTARGET_MCU_STM32H747xI +-DTARGET_MCU_STM32H747xI_CM4 +-DTARGET_NAME=PORTENTA_X8 +-DTARGET_PORTENTA_X8 +-DTARGET_RELEASE +-DTARGET_RTOS_M4_M7 +-DTARGET_STM +-DTARGET_STM32H7 +-DTARGET_STM32H747xI +-DTARGET_STM32H747xI_CM4 +-DTOOLCHAIN_GCC +-DTOOLCHAIN_GCC_ARM +-DTRANSACTION_QUEUE_SIZE_SPI=2 +-DUSE_FULL_LL_DRIVER +-DUSE_HAL_DRIVER +-DVIRTIO_SLAVE_ONLY +-DMBED_NO_GLOBAL_USING_DIRECTIVE=1 +-DUSE_ARDUINO_PINOUT diff --git a/variants/PORTENTA_X8/hsem.c b/variants/PORTENTA_X8/hsem.c new file mode 100644 index 000000000..1d72ef624 --- /dev/null +++ b/variants/PORTENTA_X8/hsem.c @@ -0,0 +1,6 @@ +#include "stm32h7xx_hal.h" + +void HSEM2_IRQHandler(void) +{ + HAL_HSEM_IRQHandler(); +} \ No newline at end of file diff --git a/variants/PORTENTA_X8/includes.txt b/variants/PORTENTA_X8/includes.txt new file mode 100644 index 000000000..2d996d085 --- /dev/null +++ b/variants/PORTENTA_X8/includes.txt @@ -0,0 +1,242 @@ +-iwithprefixbefore/mbed +-iwithprefixbefore/mbed/cmsis +-iwithprefixbefore/mbed/cmsis/CMSIS_5 +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/RTOS2 +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/RTOS2/Include +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/RTOS2/RTX +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/RTOS2/RTX/Config +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/RTOS2/RTX/Include +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/RTOS2/RTX/Include1 +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/RTOS2/RTX/Source +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/TARGET_CORTEX_M +-iwithprefixbefore/mbed/cmsis/CMSIS_5/CMSIS/TARGET_CORTEX_M/Include +-iwithprefixbefore/mbed/cmsis/device +-iwithprefixbefore/mbed/cmsis/device/RTE +-iwithprefixbefore/mbed/cmsis/device/RTE/include +-iwithprefixbefore/mbed/cmsis/device/rtos +-iwithprefixbefore/mbed/cmsis/device/rtos/include +-iwithprefixbefore/mbed/connectivity +-iwithprefixbefore/mbed/connectivity/cellular +-iwithprefixbefore/mbed/connectivity/cellular/include +-iwithprefixbefore/mbed/connectivity/cellular/include/cellular +-iwithprefixbefore/mbed/connectivity/cellular/include/cellular/framework +-iwithprefixbefore/mbed/connectivity/cellular/include/cellular/framework/API +-iwithprefixbefore/mbed/connectivity/cellular/include/cellular/framework/AT +-iwithprefixbefore/mbed/connectivity/cellular/include/cellular/framework/common +-iwithprefixbefore/mbed/connectivity/cellular/include/cellular/framework/device +-iwithprefixbefore/mbed/connectivity/drivers +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/atmel-rf-driver +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/atmel-rf-driver/atmel-rf-driver +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/atmel-rf-driver/source +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/mcr20a-rf-driver +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/mcr20a-rf-driver/mcr20a-rf-driver +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/mcr20a-rf-driver/source +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/stm-s2lp-rf-driver +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/stm-s2lp-rf-driver/source +-iwithprefixbefore/mbed/connectivity/drivers/802.15.4_RF/stm-s2lp-rf-driver/stm-s2lp-rf-driver +-iwithprefixbefore/mbed/connectivity/drivers/cellular +-iwithprefixbefore/mbed/connectivity/drivers/cellular/Altair +-iwithprefixbefore/mbed/connectivity/drivers/cellular/Altair/ALT1250 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/Altair/ALT1250/PPP +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GEMALTO +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GEMALTO/CINTERION +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GENERIC +-iwithprefixbefore/mbed/connectivity/drivers/cellular/GENERIC/GENERIC_AT3GPP +-iwithprefixbefore/mbed/connectivity/drivers/cellular/MultiTech +-iwithprefixbefore/mbed/connectivity/drivers/cellular/MultiTech/DragonflyNano +-iwithprefixbefore/mbed/connectivity/drivers/cellular/MultiTech/DragonflyNano/PPP +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/BC95 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/BG96 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/EC2X +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/M26 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/QUECTEL/UG96 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/RiotMicro +-iwithprefixbefore/mbed/connectivity/drivers/cellular/RiotMicro/AT +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT/HE910 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT/ME310 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/TELIT/ME910 +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX/AT +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX/N2XX +-iwithprefixbefore/mbed/connectivity/drivers/cellular/UBLOX/PPP +-iwithprefixbefore/mbed/connectivity/drivers/emac/TARGET_STM +-iwithprefixbefore/mbed/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7 +-iwithprefixbefore/mbed/connectivity/drivers/emac/TARGET_STM/TARGET_STM32H7/lan8742 +-iwithprefixbefore/mbed/connectivity/drivers/mbedtls/TARGET_STM +-iwithprefixbefore/mbed/connectivity/drivers/nfc +-iwithprefixbefore/mbed/connectivity/drivers/nfc/PN512 +-iwithprefixbefore/mbed/connectivity/drivers/nfc/PN512/include +-iwithprefixbefore/mbed/connectivity/drivers/nfc/PN512/include/nfc +-iwithprefixbefore/mbed/connectivity/drivers/nfc/PN512/include/nfc/controllers +-iwithprefixbefore/mbed/connectivity/drivers/nfc/PN512/source +-iwithprefixbefore/mbed/connectivity/drivers/nfc/PN512/source/transceiver +-iwithprefixbefore/mbed/connectivity/drivers/wifi +-iwithprefixbefore/mbed/connectivity/drivers/wifi/esp8266-driver +-iwithprefixbefore/mbed/connectivity/drivers/wifi/esp8266-driver/ESP8266 +-iwithprefixbefore/mbed/connectivity/libraries +-iwithprefixbefore/mbed/connectivity/libraries/mbed-coap +-iwithprefixbefore/mbed/connectivity/libraries/mbed-coap/mbed-coap +-iwithprefixbefore/mbed/connectivity/libraries/mbed-coap/source +-iwithprefixbefore/mbed/connectivity/libraries/mbed-coap/source/include +-iwithprefixbefore/mbed/connectivity/libraries/nanostack-libservice +-iwithprefixbefore/mbed/connectivity/libraries/nanostack-libservice/mbed-client-libservice +-iwithprefixbefore/mbed/connectivity/libraries/nanostack-libservice/mbed-client-libservice/platform +-iwithprefixbefore/mbed/connectivity/libraries/ppp +-iwithprefixbefore/mbed/connectivity/libraries/ppp/include +-iwithprefixbefore/mbed/connectivity/libraries/ppp/include/polarssl +-iwithprefixbefore/mbed/connectivity/libraries/ppp/include/ppp +-iwithprefixbefore/mbed/connectivity/lorawan +-iwithprefixbefore/mbed/connectivity/lorawan/include +-iwithprefixbefore/mbed/connectivity/lorawan/include/lorawan +-iwithprefixbefore/mbed/connectivity/lorawan/lorastack +-iwithprefixbefore/mbed/connectivity/lorawan/lorastack/mac +-iwithprefixbefore/mbed/connectivity/lorawan/lorastack/phy +-iwithprefixbefore/mbed/connectivity/lorawan/system +-iwithprefixbefore/mbed/connectivity/lwipstack +-iwithprefixbefore/mbed/connectivity/lwipstack/include +-iwithprefixbefore/mbed/connectivity/lwipstack/include/lwipstack +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip-sys +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip-sys/arch +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/compat +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/compat/posix +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/compat/posix/arpa +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/compat/posix/net +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/compat/posix/sys +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/lwip +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/lwip/priv +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/lwip/prot +-iwithprefixbefore/mbed/connectivity/lwipstack/lwip/src/include/netif +-iwithprefixbefore/mbed/connectivity/mbedtls +-iwithprefixbefore/mbed/connectivity/mbedtls/include +-iwithprefixbefore/mbed/connectivity/mbedtls/include/mbedtls +-iwithprefixbefore/mbed/connectivity/mbedtls/platform +-iwithprefixbefore/mbed/connectivity/mbedtls/platform/inc +-iwithprefixbefore/mbed/connectivity/mbedtls/source +-iwithprefixbefore/mbed/connectivity/netsocket +-iwithprefixbefore/mbed/connectivity/netsocket/include +-iwithprefixbefore/mbed/connectivity/netsocket/include/netsocket +-iwithprefixbefore/mbed/connectivity/nfc +-iwithprefixbefore/mbed/connectivity/nfc/include +-iwithprefixbefore/mbed/connectivity/nfc/include/nfc +-iwithprefixbefore/mbed/connectivity/nfc/include/nfc/ndef +-iwithprefixbefore/mbed/connectivity/nfc/include/nfc/ndef/common +-iwithprefixbefore/mbed/connectivity/nfc/libraries +-iwithprefixbefore/mbed/connectivity/nfc/libraries/acore +-iwithprefixbefore/mbed/connectivity/nfc/libraries/acore/acore +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack/ndef +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack/platform +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack/tech +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack/tech/iso7816 +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack/tech/isodep +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack/tech/type4 +-iwithprefixbefore/mbed/connectivity/nfc/libraries/stack/transceiver +-iwithprefixbefore/mbed/drivers +-iwithprefixbefore/mbed/drivers/device_key +-iwithprefixbefore/mbed/drivers/device_key/include +-iwithprefixbefore/mbed/drivers/device_key/include/device_key +-iwithprefixbefore/mbed/drivers/include +-iwithprefixbefore/mbed/drivers/include/drivers +-iwithprefixbefore/mbed/drivers/include/drivers/interfaces +-iwithprefixbefore/mbed/drivers/usb +-iwithprefixbefore/mbed/drivers/usb/include +-iwithprefixbefore/mbed/drivers/usb/include/usb +-iwithprefixbefore/mbed/drivers/usb/include/usb/internal +-iwithprefixbefore/mbed/events +-iwithprefixbefore/mbed/events/include +-iwithprefixbefore/mbed/events/include/events +-iwithprefixbefore/mbed/events/include/events/internal +-iwithprefixbefore/mbed/features +-iwithprefixbefore/mbed/features/frameworks +-iwithprefixbefore/mbed/features/frameworks/greentea-client +-iwithprefixbefore/mbed/features/frameworks/greentea-client/greentea-client +-iwithprefixbefore/mbed/features/frameworks/mbed-client-cli +-iwithprefixbefore/mbed/features/frameworks/mbed-client-cli/mbed-client-cli +-iwithprefixbefore/mbed/features/frameworks/unity +-iwithprefixbefore/mbed/features/frameworks/unity/unity +-iwithprefixbefore/mbed/features/frameworks/utest +-iwithprefixbefore/mbed/features/frameworks/utest/utest +-iwithprefixbefore/mbed/hal +-iwithprefixbefore/mbed/hal/include +-iwithprefixbefore/mbed/hal/include/hal +-iwithprefixbefore/mbed/hal/usb +-iwithprefixbefore/mbed/hal/usb/include +-iwithprefixbefore/mbed/hal/usb/include/usb +-iwithprefixbefore/mbed/platform +-iwithprefixbefore/mbed/platform/cxxsupport +-iwithprefixbefore/mbed/platform/include +-iwithprefixbefore/mbed/platform/include/platform +-iwithprefixbefore/mbed/platform/include/platform/internal +-iwithprefixbefore/mbed/platform/mbed-trace +-iwithprefixbefore/mbed/platform/mbed-trace/include +-iwithprefixbefore/mbed/platform/mbed-trace/include/mbed-trace +-iwithprefixbefore/mbed/platform/randlib +-iwithprefixbefore/mbed/platform/randlib/include +-iwithprefixbefore/mbed/platform/randlib/include/mbed-client-randlib +-iwithprefixbefore/mbed/platform/randlib/include/mbed-client-randlib/platform +-iwithprefixbefore/mbed/platform/source +-iwithprefixbefore/mbed/platform/source/minimal-printf +-iwithprefixbefore/mbed/rtos +-iwithprefixbefore/mbed/rtos/include +-iwithprefixbefore/mbed/rtos/include/rtos +-iwithprefixbefore/mbed/rtos/include/rtos/internal +-iwithprefixbefore/mbed/rtos/source +-iwithprefixbefore/mbed/storage +-iwithprefixbefore/mbed/storage/blockdevice +-iwithprefixbefore/mbed/storage/blockdevice/COMPONENT_FLASHIAP +-iwithprefixbefore/mbed/storage/blockdevice/COMPONENT_FLASHIAP/include +-iwithprefixbefore/mbed/storage/blockdevice/COMPONENT_FLASHIAP/include/FlashIAP +-iwithprefixbefore/mbed/storage/blockdevice/include +-iwithprefixbefore/mbed/storage/blockdevice/include/blockdevice +-iwithprefixbefore/mbed/storage/blockdevice/include/blockdevice/internal +-iwithprefixbefore/mbed/storage/filesystem +-iwithprefixbefore/mbed/storage/filesystem/fat +-iwithprefixbefore/mbed/storage/filesystem/fat/ChaN +-iwithprefixbefore/mbed/storage/filesystem/fat/include +-iwithprefixbefore/mbed/storage/filesystem/fat/include/fat +-iwithprefixbefore/mbed/storage/filesystem/include +-iwithprefixbefore/mbed/storage/filesystem/include/filesystem +-iwithprefixbefore/mbed/storage/filesystem/littlefs +-iwithprefixbefore/mbed/storage/filesystem/littlefs/include +-iwithprefixbefore/mbed/storage/filesystem/littlefs/include/littlefs +-iwithprefixbefore/mbed/storage/filesystem/littlefs/littlefs +-iwithprefixbefore/mbed/storage/filesystem/littlefsv2 +-iwithprefixbefore/mbed/storage/filesystem/littlefsv2/include +-iwithprefixbefore/mbed/storage/filesystem/littlefsv2/include/littlefsv2 +-iwithprefixbefore/mbed/storage/filesystem/littlefsv2/littlefs +-iwithprefixbefore/mbed/storage/kvstore +-iwithprefixbefore/mbed/storage/kvstore/direct_access_devicekey +-iwithprefixbefore/mbed/storage/kvstore/direct_access_devicekey/include +-iwithprefixbefore/mbed/storage/kvstore/direct_access_devicekey/include/direct_access_devicekey +-iwithprefixbefore/mbed/storage/kvstore/filesystemstore +-iwithprefixbefore/mbed/storage/kvstore/filesystemstore/include +-iwithprefixbefore/mbed/storage/kvstore/filesystemstore/include/filesystemstore +-iwithprefixbefore/mbed/storage/kvstore/include +-iwithprefixbefore/mbed/storage/kvstore/include/kvstore +-iwithprefixbefore/mbed/storage/kvstore/kv_config +-iwithprefixbefore/mbed/storage/kvstore/kv_config/include +-iwithprefixbefore/mbed/storage/kvstore/kv_config/include/kv_config +-iwithprefixbefore/mbed/storage/kvstore/kvstore_global_api +-iwithprefixbefore/mbed/storage/kvstore/kvstore_global_api/include +-iwithprefixbefore/mbed/storage/kvstore/kvstore_global_api/include/kvstore_global_api +-iwithprefixbefore/mbed/storage/kvstore/securestore +-iwithprefixbefore/mbed/storage/kvstore/securestore/include +-iwithprefixbefore/mbed/storage/kvstore/securestore/include/securestore +-iwithprefixbefore/mbed/storage/kvstore/tdbstore +-iwithprefixbefore/mbed/storage/kvstore/tdbstore/include +-iwithprefixbefore/mbed/storage/kvstore/tdbstore/include/tdbstore +-iwithprefixbefore/mbed/targets/TARGET_STM +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7 +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/CMSIS +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/STM32Cube_FW/STM32H7xx_HAL_Driver/Legacy +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_PORTENTA_X8 +-iwithprefixbefore/mbed/targets/TARGET_STM/TARGET_STM32H7/TARGET_STM32H747xI/TARGET_STM32H747xI_CM4 diff --git a/variants/PORTENTA_X8/ldflags.txt b/variants/PORTENTA_X8/ldflags.txt new file mode 100644 index 000000000..e3666931b --- /dev/null +++ b/variants/PORTENTA_X8/ldflags.txt @@ -0,0 +1,24 @@ +-DMBED_APP_SIZE=0x100000 +-DMBED_APP_START=0x8100000 +-DMBED_BOOT_STACK_SIZE=1024 +-DMBED_RAM1_SIZE=0x80000 +-DMBED_RAM1_START=0x24000000 +-DMBED_RAM_SIZE=0x48000 +-DMBED_RAM_START=0x10000000 +-DMBED_ROM_SIZE=0x100000 +-DMBED_ROM_START=0x8100000 +-DXIP_ENABLE=0 +-Wl,--gc-sections +-Wl,--wrap,_calloc_r +-Wl,--wrap,_free_r +-Wl,--wrap,_malloc_r +-Wl,--wrap,_memalign_r +-Wl,--wrap,_realloc_r +-Wl,--wrap,atexit +-Wl,--wrap,exit +-Wl,--wrap,main +-Wl,-n +-mcpu=cortex-m4 +-mfloat-abi=softfp +-mfpu=fpv4-sp-d16 +-mthumb diff --git a/variants/PORTENTA_X8/libs/libmbed.a b/variants/PORTENTA_X8/libs/libmbed.a new file mode 100644 index 000000000..919632130 Binary files /dev/null and b/variants/PORTENTA_X8/libs/libmbed.a differ diff --git a/variants/PORTENTA_X8/linker_script.ld b/variants/PORTENTA_X8/linker_script.ld new file mode 100644 index 000000000..33fc73c17 --- /dev/null +++ b/variants/PORTENTA_X8/linker_script.ld @@ -0,0 +1,113 @@ +MEMORY +{ + FLASH (rx) : ORIGIN = CM4_BINARY_START, LENGTH = CM4_BINARY_END - CM4_BINARY_START + RAM (rwx) : ORIGIN = 0x10000000 + (((166 * 4) + 7) & 0xFFFFFFF8), LENGTH = 0x48000 - (((166 * 4) + 7) & 0xFFFFFFF8) + RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K +} +__OPENAMP_region_start__ = 0x38000400; +__OPENAMP_region_end__ = 0x38000400 + LENGTH(RAM_D3) - 1K; +ENTRY(Reset_Handler) +SECTIONS +{ + .text : + { + KEEP(*(.isr_vector)) + *(.text*) + KEEP(*(.init)) + KEEP(*(.fini)) + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + *(.rodata*) + KEEP(*(.eh_frame*)) + } > FLASH + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + __etext = .; + _sidata = .; + .data : AT (__etext) + { + __data_start__ = .; + _sdata = .; + *(vtable) + *(.data*) + . = ALIGN(8); + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(8); + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(8); + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + KEEP(*(.jcr*)) + . = ALIGN(8); + __data_end__ = .; + _edata = .; + } > RAM + .uninitialized (NOLOAD): + { + . = ALIGN(32); + __uninitialized_start = .; + *(.uninitialized) + KEEP(*(.keep.uninitialized)) + . = ALIGN(32); + __uninitialized_end = .; + } > RAM + .bss : + { + . = ALIGN(8); + __bss_start__ = .; + _sbss = .; + *(.bss*) + *(COMMON) + . = ALIGN(8); + __bss_end__ = .; + _ebss = .; + } > RAM + .openamp_section (NOLOAD) : { + . = ABSOLUTE(0x38000000); + *(.resource_table) + } >RAM_D3 AT > FLASH + .pdm_section (NOLOAD) : { + . = ABSOLUTE(0x3800FC00); + *(.pdm_buffer) + } > RAM_D3 + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + . = ORIGIN(RAM) + LENGTH(RAM) - 0x400; + __HeapLimit = .; + } > RAM + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + _estack = __StackTop; + __StackLimit = __StackTop - 0x400; + PROVIDE(__stack = __StackTop); + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/PORTENTA_X8/mbed_config.h b/variants/PORTENTA_X8/mbed_config.h new file mode 100644 index 000000000..1839607fb --- /dev/null +++ b/variants/PORTENTA_X8/mbed_config.h @@ -0,0 +1,371 @@ +/* + * mbed SDK + * Copyright (c) 2017 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Automatically generated configuration file. +// DO NOT EDIT, content will be overwritten. + +#ifndef __MBED_CONFIG_DATA__ +#define __MBED_CONFIG_DATA__ + +// Configuration parameters +#define CLOCK_SOURCE USE_PLL_HSI // set by target:PORTENTA_X8 +#define HSE_VALUE 25000000 // set by target:PORTENTA_X8 +#define LPTICKER_DELAY_TICKS 0 // set by target:PORTENTA_X8 +#define MBED_ALL_STATS_ENABLED 1 // set by application[*] +#define MBED_CONF_ALT1250_PPP_BAUDRATE 115200 // set by library:ALT1250_PPP +#define MBED_CONF_ALT1250_PPP_PROVIDE_DEFAULT 0 // set by library:ALT1250_PPP +#define MBED_CONF_ATMEL_RF_ASSUME_SPACED_SPI 1 // set by library:atmel-rf[STM] +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED 7500000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_FULL_SPI_SPEED_BYTE_SPACING 250 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_IRQ_THREAD_STACK_SIZE 1024 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_LOW_SPI_SPEED 3750000 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_PROVIDE_DEFAULT 0 // set by library:atmel-rf +#define MBED_CONF_ATMEL_RF_USE_SPI_SPACING_API 0 // set by library:atmel-rf +#define MBED_CONF_CELLULAR_AT_HANDLER_BUFFER_SIZE 32 // set by library:cellular +#define MBED_CONF_CELLULAR_CONTROL_PLANE_OPT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_DEBUG_AT 0 // set by library:cellular +#define MBED_CONF_CELLULAR_MAX_CP_DATA_RECV_LEN 1358 // set by library:cellular +#define MBED_CONF_CELLULAR_PRESENT 1 // set by library:cellular +#define MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY 0 // set by library:cellular +#define MBED_CONF_CELLULAR_USE_APN_LOOKUP 0 // set by library:cellular +#define MBED_CONF_CELLULAR_USE_SMS 0 // set by library:cellular +#define MBED_CONF_DRIVERS_OSPI_CSN OSPI_FLASH1_CSN // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_DQS OSPI_FLASH1_DQS // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO0 OSPI_FLASH1_IO0 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO1 OSPI_FLASH1_IO1 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO2 OSPI_FLASH1_IO2 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO3 OSPI_FLASH1_IO3 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO4 OSPI_FLASH1_IO4 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO5 OSPI_FLASH1_IO5 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO6 OSPI_FLASH1_IO6 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_IO7 OSPI_FLASH1_IO7 // set by library:drivers +#define MBED_CONF_DRIVERS_OSPI_SCK OSPI_FLASH1_SCK // set by library:drivers +#define MBED_CONF_DRIVERS_QSPI_CSN QSPI_FLASH1_CSN // set by library:drivers +#define MBED_CONF_DRIVERS_QSPI_IO0 QSPI_FLASH1_IO0 // set by library:drivers +#define MBED_CONF_DRIVERS_QSPI_IO1 QSPI_FLASH1_IO1 // set by library:drivers +#define MBED_CONF_DRIVERS_QSPI_IO2 QSPI_FLASH1_IO2 // set by library:drivers +#define MBED_CONF_DRIVERS_QSPI_IO3 QSPI_FLASH1_IO3 // set by library:drivers +#define MBED_CONF_DRIVERS_QSPI_SCK QSPI_FLASH1_SCK // set by library:drivers +#define MBED_CONF_DRIVERS_UART_SERIAL_RXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_DRIVERS_UART_SERIAL_TXBUF_SIZE 256 // set by library:drivers +#define MBED_CONF_ESP8266_BUILT_IN_DNS 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_DEBUG 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_OFF_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_POLARITY 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_POWER_ON_TIME_MS 3 // set by library:esp8266 +#define MBED_CONF_ESP8266_PROVIDE_DEFAULT 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_SERIAL_BAUDRATE 115200 // set by library:esp8266 +#define MBED_CONF_ESP8266_SNTP_ENABLE 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_SNTP_SERVER0 "" // set by library:esp8266 +#define MBED_CONF_ESP8266_SNTP_SERVER1 "" // set by library:esp8266 +#define MBED_CONF_ESP8266_SNTP_SERVER2 "" // set by library:esp8266 +#define MBED_CONF_ESP8266_SNTP_TIMEZONE 0 // set by library:esp8266 +#define MBED_CONF_ESP8266_SOCKET_BUFSIZE 8192 // set by library:esp8266 +#define MBED_CONF_EVENTS_PRESENT 1 // set by library:events +#define MBED_CONF_EVENTS_SHARED_DISPATCH_FROM_APPLICATION 0 // set by library:events +#define MBED_CONF_EVENTS_SHARED_EVENTSIZE 768 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_EVENTSIZE 256 // set by library:events +#define MBED_CONF_EVENTS_SHARED_HIGHPRIO_STACKSIZE 1024 // set by library:events +#define MBED_CONF_EVENTS_SHARED_STACKSIZE 2048 // set by library:events +#define MBED_CONF_EVENTS_USE_LOWPOWER_TIMER_TICKER 0 // set by library:events +#define MBED_CONF_FAT_CHAN_FFS_DBG 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_CODE_PAGE 437 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_EXFAT 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_HEAPBUF 1 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_LOCK 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_MINIMIZE 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_NOFSINFO 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_NORTC 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_READONLY 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_REENTRANT 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_RPATH 1 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_TIMEOUT 1000 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_FS_TINY 1 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_LFN_BUF 255 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_LFN_UNICODE 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_MAX_LFN 255 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_MAX_SS 4096 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_MIN_SS 512 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_MULTI_PARTITION 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_NORTC_MDAY 1 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_NORTC_MON 1 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_NORTC_YEAR 2017 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_PRINT_FLOAT 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_PRINT_LLI 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_SFN_BUF 12 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_STRF_ENCODE 3 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_STR_VOLUME_ID 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_SYNC_T HANDLE // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_CHMOD 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_EXPAND 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_FASTSEEK 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_FIND 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_FORWARD 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_LABEL 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_LFN 3 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_MKFS 1 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_STRFUNC 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_USE_TRIM 1 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_VOLUMES 4 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2","USB","USB2","USB3" // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FLUSH_ON_NEW_CLUSTER 0 // set by library:fat_chan +#define MBED_CONF_FAT_CHAN_FLUSH_ON_NEW_SECTOR 1 // set by library:fat_chan +#define MBED_CONF_FILESYSTEM_PRESENT 1 // set by library:filesystem +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS 0xFFFFFFFF // set by library:flashiap-block-device +#define MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE 0 // set by library:flashiap-block-device +#define MBED_CONF_GEMALTO_CINTERION_BAUDRATE 115200 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GEMALTO_CINTERION_PROVIDE_DEFAULT 0 // set by library:GEMALTO_CINTERION +#define MBED_CONF_GENERIC_AT3GPP_BAUDRATE 115200 // set by library:GENERIC_AT3GPP +#define MBED_CONF_GENERIC_AT3GPP_PROVIDE_DEFAULT 0 // set by library:GENERIC_AT3GPP +#define MBED_CONF_LORA_ADR_ON 1 // set by library:lora +#define MBED_CONF_LORA_APPLICATION_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPLICATION_KEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APPSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_APP_PORT 15 // set by library:lora +#define MBED_CONF_LORA_AUTOMATIC_UPLINK_MESSAGE 1 // set by library:lora +#define MBED_CONF_LORA_DEVICE_ADDRESS 0x00000000 // set by library:lora +#define MBED_CONF_LORA_DEVICE_EUI {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_DOWNLINK_PREAMBLE_LENGTH 5 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON 1 // set by library:lora +#define MBED_CONF_LORA_DUTY_CYCLE_ON_JOIN 1 // set by library:lora +#define MBED_CONF_LORA_FSB_MASK {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x00FF} // set by library:lora +#define MBED_CONF_LORA_FSB_MASK_CHINA {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF} // set by library:lora +#define MBED_CONF_LORA_LBT_ON 0 // set by library:lora +#define MBED_CONF_LORA_MAX_SYS_RX_ERROR 5 // set by library:lora +#define MBED_CONF_LORA_NB_TRIALS 12 // set by library:lora +#define MBED_CONF_LORA_NWKSKEY {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // set by library:lora +#define MBED_CONF_LORA_OVER_THE_AIR_ACTIVATION 1 // set by library:lora +#define MBED_CONF_LORA_PHY EU868 // set by library:lora +#define MBED_CONF_LORA_PUBLIC_NETWORK 1 // set by library:lora +#define MBED_CONF_LORA_TX_MAX_SIZE 64 // set by library:lora +#define MBED_CONF_LORA_UPLINK_PREAMBLE_LENGTH 8 // set by library:lora +#define MBED_CONF_LORA_WAKEUP_TIME 5 // set by library:lora +#define MBED_CONF_LWIP_ADDR_TIMEOUT 5 // set by library:lwip +#define MBED_CONF_LWIP_ADDR_TIMEOUT_MODE 1 // set by library:lwip +#define MBED_CONF_LWIP_DEBUG_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_DEFAULT_THREAD_STACKSIZE 512 // set by library:lwip +#define MBED_CONF_LWIP_DHCP_TIMEOUT 60 // set by library:lwip +#define MBED_CONF_LWIP_ENABLE_PPP_TRACE 0 // set by library:lwip +#define MBED_CONF_LWIP_ETHERNET_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV4_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_IP_VER_PREF 4 // set by library:lwip +#define MBED_CONF_LWIP_L3IP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_MBOX_SIZE 8 // set by library:lwip +#define MBED_CONF_LWIP_MEMP_NUM_TCPIP_MSG_INPKT 8 // set by library:lwip +#define MBED_CONF_LWIP_MEMP_NUM_TCP_SEG 16 // set by library:lwip +#define MBED_CONF_LWIP_MEM_SIZE 2310 // set by library:lwip[STM] +#define MBED_CONF_LWIP_ND6_QUEUEING 0 // set by library:lwip +#define MBED_CONF_LWIP_ND6_RDNSS_MAX_DNS_SERVERS 0 // set by library:lwip +#define MBED_CONF_LWIP_NUM_NETBUF 8 // set by library:lwip +#define MBED_CONF_LWIP_NUM_PBUF 8 // set by library:lwip +#define MBED_CONF_LWIP_PBUF_POOL_SIZE 5 // set by library:lwip +#define MBED_CONF_LWIP_PPP_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV4_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_IPV6_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_PPP_THREAD_STACKSIZE 768 // set by library:lwip +#define MBED_CONF_LWIP_PRESENT 1 // set by library:lwip +#define MBED_CONF_LWIP_RAW_SOCKET_ENABLED 0 // set by library:lwip +#define MBED_CONF_LWIP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_PRIORITY osPriorityNormal // set by library:lwip +#define MBED_CONF_LWIP_TCPIP_THREAD_STACKSIZE 1200 // set by library:lwip +#define MBED_CONF_LWIP_TCP_CLOSE_TIMEOUT 1000 // set by library:lwip +#define MBED_CONF_LWIP_TCP_ENABLED 1 // set by library:lwip +#define MBED_CONF_LWIP_TCP_MAXRTX 6 // set by library:lwip +#define MBED_CONF_LWIP_TCP_MSS 536 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SERVER_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SND_BUF (2 * TCP_MSS) // set by library:lwip +#define MBED_CONF_LWIP_TCP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_TCP_SYNMAXRTX 6 // set by library:lwip +#define MBED_CONF_LWIP_TCP_WND (4 * TCP_MSS) // set by library:lwip +#define MBED_CONF_LWIP_UDP_SOCKET_MAX 4 // set by library:lwip +#define MBED_CONF_LWIP_USE_MBED_TRACE 0 // set by library:lwip +#define MBED_CONF_MCR20A_PROVIDE_DEFAULT 0 // set by library:mcr20a +#define MBED_CONF_NANOSTACK_LIBSERVICE_NSDYNMEM_TRACKER_ENABLED 0 // set by library:nanostack-libservice +#define MBED_CONF_NANOSTACK_LIBSERVICE_PRESENT 1 // set by library:nanostack-libservice +#define MBED_CONF_NSAPI_ADD_EVENT_LISTENER_RETURN_CHANGE 0 // set by library:nsapi +#define MBED_CONF_NSAPI_DEFAULT_MESH_TYPE THREAD // set by library:nsapi +#define MBED_CONF_NSAPI_DEFAULT_STACK LWIP // set by library:nsapi +#define MBED_CONF_NSAPI_DEFAULT_WIFI_SECURITY NONE // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_ADDRESSES_LIMIT 10 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_CACHE_SIZE 3 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME 10000 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_RETRIES 1 // set by library:nsapi +#define MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS 10 // set by library:nsapi +#define MBED_CONF_NSAPI_PRESENT 1 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_ENABLED 0 // set by library:nsapi +#define MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT 10 // set by library:nsapi +#define MBED_CONF_PLATFORM_CALLBACK_COMPARABLE 1 // set by library:platform +#define MBED_CONF_PLATFORM_CALLBACK_NONTRIVIAL 1 // set by application[*] +#define MBED_CONF_PLATFORM_CRASH_CAPTURE_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_CTHUNK_COUNT_MAX 8 // set by library:platform +#define MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE 115200 // set by application[*] +#define MBED_CONF_PLATFORM_ERROR_ALL_THREADS_INFO 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_HIST_SIZE 4 // set by library:platform +#define MBED_CONF_PLATFORM_ERROR_REBOOT_MAX 1 // set by library:platform +#define MBED_CONF_PLATFORM_FATAL_ERROR_AUTO_REBOOT_ENABLED 0 // set by library:platform +#define MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 16 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_64_BIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_ENABLE_FLOATING_POINT 0 // set by library:platform +#define MBED_CONF_PLATFORM_MINIMAL_PRINTF_SET_FLOATING_POINT_MAX_DECIMALS 6 // set by library:platform +#define MBED_CONF_PLATFORM_POLL_USE_LOWPOWER_TIMER 0 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_BAUD_RATE 115200 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL 0 // set by application[*] +#define MBED_CONF_PLATFORM_STDIO_CONVERT_NEWLINES 1 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_CONVERT_TTY_NEWLINES 1 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_FLUSH_AT_EXIT 1 // set by library:platform +#define MBED_CONF_PLATFORM_STDIO_MINIMAL_CONSOLE_ONLY 0 // set by library:platform +#define MBED_CONF_PLATFORM_USE_MPU 1 // set by library:platform +#define MBED_CONF_PPP_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_ENABLE_TRACE 0 // set by library:ppp +#define MBED_CONF_PPP_IPV4_ENABLED 1 // set by library:ppp +#define MBED_CONF_PPP_IPV6_ENABLED 0 // set by library:ppp +#define MBED_CONF_PPP_MBED_EVENT_QUEUE 0 // set by library:ppp +#define MBED_CONF_PPP_THREAD_STACKSIZE 816 // set by library:ppp +#define MBED_CONF_QUECTEL_BC95_BAUDRATE 9600 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BC95_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BC95 +#define MBED_CONF_QUECTEL_BG96_BAUDRATE 115200 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_BG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_BG96 +#define MBED_CONF_QUECTEL_EC2X_BAUDRATE 115200 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_EC2X_PROVIDE_DEFAULT 0 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_EC2X_START_TIMEOUT 15000 // set by library:QUECTEL_EC2X +#define MBED_CONF_QUECTEL_M26_BAUDRATE 115200 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_M26_PROVIDE_DEFAULT 0 // set by library:QUECTEL_M26 +#define MBED_CONF_QUECTEL_UG96_BAUDRATE 115200 // set by library:QUECTEL_UG96 +#define MBED_CONF_QUECTEL_UG96_PROVIDE_DEFAULT 0 // set by library:QUECTEL_UG96 +#define MBED_CONF_RM1000_AT_BAUDRATE 230400 // set by library:RM1000_AT +#define MBED_CONF_RM1000_AT_PROVIDE_DEFAULT 0 // set by library:RM1000_AT +#define MBED_CONF_RTOS_API_PRESENT 1 // set by library:rtos-api +#define MBED_CONF_RTOS_ENABLE_ALL_RTX_EVENTS 0 // set by library:rtos +#define MBED_CONF_RTOS_EVFLAGS_NUM 0 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE 512 // set by library:rtos +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_DEBUG_EXTRA 128 // set by library:rtos[STM] +#define MBED_CONF_RTOS_IDLE_THREAD_STACK_SIZE_TICKLESS_EXTRA 256 // set by library:rtos +#define MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE 32768 // set by application[*] +#define MBED_CONF_RTOS_MSGQUEUE_DATA_SIZE 0 // set by library:rtos +#define MBED_CONF_RTOS_MSGQUEUE_NUM 0 // set by library:rtos +#define MBED_CONF_RTOS_MUTEX_NUM 0 // set by library:rtos +#define MBED_CONF_RTOS_PRESENT 1 // set by library:rtos +#define MBED_CONF_RTOS_SEMAPHORE_NUM 0 // set by library:rtos +#define MBED_CONF_RTOS_THREAD_NUM 0 // set by library:rtos +#define MBED_CONF_RTOS_THREAD_STACK_SIZE 4096 // set by library:rtos +#define MBED_CONF_RTOS_THREAD_USER_STACK_SIZE 0 // set by library:rtos +#define MBED_CONF_RTOS_TIMER_NUM 0 // set by library:rtos +#define MBED_CONF_RTOS_TIMER_THREAD_STACK_SIZE 768 // set by library:rtos +#define MBED_CONF_S2LP_PROVIDE_DEFAULT 0 // set by library:s2lp +#define MBED_CONF_SARA4_PPP_BAUDRATE 115200 // set by library:SARA4_PPP +#define MBED_CONF_SARA4_PPP_PROVIDE_DEFAULT 0 // set by library:SARA4_PPP +#define MBED_CONF_STM32_EMAC_ETH_PHY_ADDRESS 0 // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_AUTONEGOTIATION ETH_AUTONEGOTIATION_ENABLE // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_DUPLEXMODE ETH_MODE_FULLDUPLEX // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_DUPLEX_STATUS 0x0010 // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_MEDIA_INTERFACE ETH_MEDIA_INTERFACE_RMII // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_RESET_DELAY 500 // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_SPEED ETH_SPEED_100M // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_SPEED_STATUS 0x0004 // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_PHY_STATUS_REGISTER 31 // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_RXBUFNB 4 // set by library:stm32-emac +#define MBED_CONF_STM32_EMAC_ETH_TXBUFNB 10 // set by library:stm32-emac[STM32H7] +#define MBED_CONF_STM32_EMAC_THREAD_STACKSIZE 1024 // set by library:stm32-emac +#define MBED_CONF_STORAGE_DEFAULT_KV kv // set by library:storage +#define MBED_CONF_STORAGE_FILESYSTEM_BLOCKDEVICE default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_EXTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FILESYSTEM default // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_FOLDER_PATH kvstore // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_INTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_MOUNT_POINT kv // set by library:storage_filesystem +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_BLOCKDEVICE default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FILESYSTEM default // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_FOLDER_PATH kvstore // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_NO_RBP_MOUNT_POINT kv // set by library:storage_filesystem_no_rbp +#define MBED_CONF_STORAGE_FILESYSTEM_RBP_INTERNAL_SIZE 0 // set by library:storage_filesystem +#define MBED_CONF_STORAGE_STORAGE_TYPE default // set by library:storage +#define MBED_CONF_STORAGE_TDB_EXTERNAL_BLOCKDEVICE default // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_EXTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_BLOCKDEVICE default // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_NO_RBP_EXTERNAL_SIZE 0 // set by library:storage_tdb_external_no_rbp +#define MBED_CONF_STORAGE_TDB_EXTERNAL_RBP_INTERNAL_SIZE 0 // set by library:storage_tdb_external +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_BASE_ADDRESS 0 // set by library:storage_tdb_internal +#define MBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_SIZE 0 // set by library:storage_tdb_internal +#define MBED_CONF_TARGET_BOOT_STACK_SIZE 0x400 // set by library:rtos[*] +#define MBED_CONF_TARGET_CONSOLE_UART 1 // set by target:Target +#define MBED_CONF_TARGET_CUSTOM_TICKERS 1 // set by target:Target +#define MBED_CONF_TARGET_DEEP_SLEEP_LATENCY 4 // set by target:MCU_STM32 +#define MBED_CONF_TARGET_DEFAULT_ADC_VREF NAN // set by target:Target +#define MBED_CONF_TARGET_GPIO_RESET_AT_INIT 0 // set by target:MCU_STM32 +#define MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO 1 // set by target:PORTENTA_X8 +#define MBED_CONF_TARGET_INIT_US_TICKER_AT_BOOT 1 // set by target:MCU_STM32 +#define MBED_CONF_TARGET_INTERNAL_FLASH_UNIFORM_SECTORS 1 // set by target:Target +#define MBED_CONF_TARGET_LPTICKER_LPTIM 1 // set by target:MCU_STM32H7 +#define MBED_CONF_TARGET_LPTICKER_LPTIM_CLOCK 1 // set by target:MCU_STM32 +#define MBED_CONF_TARGET_LPUART_CLOCK_SOURCE USE_LPUART_CLK_LSE|USE_LPUART_CLK_PCLK1|USE_LPUART_CLK_PCLK3 // set by target:MCU_STM32 +#define MBED_CONF_TARGET_LSE_AVAILABLE 1 // set by target:PORTENTA_X8 +#define MBED_CONF_TARGET_LSE_BYPASS 1 // set by target:PORTENTA_X8 +#define MBED_CONF_TARGET_LSE_DRIVE_LOAD_LEVEL RCC_LSEDRIVE_LOW // set by target:MCU_STM32H7 +#define MBED_CONF_TARGET_MPU_ROM_END 0x0fffffff // set by target:Target +#define MBED_CONF_TARGET_RTC_CLOCK_SOURCE USE_RTC_CLK_LSE_OR_LSI // set by target:MCU_STM32 +#define MBED_CONF_TARGET_SYSTEM_POWER_SUPPLY PWR_LDO_SUPPLY // set by target:PORTENTA_X8 +#define MBED_CONF_TARGET_TICKLESS_FROM_US_TICKER 0 // set by target:Target +#define MBED_CONF_TARGET_USB_SPEED USE_USB_OTG_HS // set by target:PORTENTA_X8 +#define MBED_CONF_TARGET_XIP_ENABLE 0 // set by target:Target +#define MBED_CONF_TELIT_HE910_BAUDRATE 115200 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_HE910_PROVIDE_DEFAULT 0 // set by library:TELIT_HE910 +#define MBED_CONF_TELIT_ME310_BAUDRATE 115200 // set by library:TELIT_ME310 +#define MBED_CONF_TELIT_ME310_PROVIDE_DEFAULT 0 // set by library:TELIT_ME310 +#define MBED_CONF_TELIT_ME910_BAUDRATE 115200 // set by library:TELIT_ME910 +#define MBED_CONF_TELIT_ME910_PROVIDE_DEFAULT 0 // set by library:TELIT_ME910 +#define MBED_CONF_UBLOX_AT_BAUDRATE 115200 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_AT_PROVIDE_DEFAULT 0 // set by library:UBLOX_AT +#define MBED_CONF_UBLOX_N2XX_BAUDRATE 9600 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_N2XX_PROVIDE_DEFAULT 0 // set by library:UBLOX_N2XX +#define MBED_CONF_UBLOX_PPP_BAUDRATE 115200 // set by library:UBLOX_PPP +#define MBED_CONF_UBLOX_PPP_PROVIDE_DEFAULT 0 // set by library:UBLOX_PPP +#define MBED_CRC_TABLE_SIZE 16 // set by library:drivers +#define MBED_LFS2_BLOCK_CYCLES 1024 // set by library:littlefs2 +#define MBED_LFS2_BLOCK_SIZE 512 // set by library:littlefs2 +#define MBED_LFS2_CACHE_SIZE 64 // set by library:littlefs2 +#define MBED_LFS2_ENABLE_INFO 0 // set by library:littlefs2 +#define MBED_LFS2_INTRINSICS 1 // set by library:littlefs2 +#define MBED_LFS2_LOOKAHEAD_SIZE 64 // set by library:littlefs2 +#define MBED_LFS_BLOCK_SIZE 512 // set by library:littlefs +#define MBED_LFS_ENABLE_INFO 0 // set by library:littlefs +#define MBED_LFS_INTRINSICS 1 // set by library:littlefs +#define MBED_LFS_LOOKAHEAD 512 // set by library:littlefs +#define MBED_LFS_PROG_SIZE 64 // set by library:littlefs +#define MBED_LFS_READ_SIZE 64 // set by library:littlefs +#define MBED_MEM_TRACING_ENABLED 1 // set by application[*] +#define MBED_STACK_DUMP_ENABLED 0 // set by library:platform +#define MBED_TRACE_COLOR_THEME 0 // set by library:mbed-trace +#define MEM_ALLOC malloc // set by library:mbed-trace +#define MEM_FREE free // set by library:mbed-trace +#define PPP_DEBUG 0 // set by library:ppp +// Macros +#define MBEDTLS_CIPHER_MODE_CTR // defined by library:SecureStore +#define NSAPI_PPP_AVAILABLE (MBED_CONF_PPP_ENABLED || MBED_CONF_LWIP_PPP_ENABLED) // defined by library:ppp +#define NSDYNMEM_TRACKER_ENABLED MBED_CONF_NANOSTACK_LIBSERVICE_NSDYNMEM_TRACKER_ENABLED // defined by library:nanostack-libservice +#define UNITY_INCLUDE_CONFIG_H // defined by library:utest +#define _RTE_ // defined by library:rtos + +#endif diff --git a/variants/PORTENTA_X8/pinmode_arduino.h b/variants/PORTENTA_X8/pinmode_arduino.h new file mode 100644 index 000000000..9b3cb2c43 --- /dev/null +++ b/variants/PORTENTA_X8/pinmode_arduino.h @@ -0,0 +1,74 @@ + +/* Define mock symbols to nullify PinMode definitions */ +#define PullNone TempPullNone +#define PullUp TempPullUp +#define PullDown TempPullDown +#define OpenDrainPullUp TempOpenDrainPullUp +#define OpenDrainNoPull TempOpenDrainNoPull +#define OpenDrainPullDown TempOpenDrainPullDown +#define PushPullNoPull TempPushPullNoPull +#define PushPullPullUp TempPushPullPullUp +#define PushPullPullDown TempPushPullPullDown +#define OpenDrain TempOpenDrain +#define PullDefault TempPullDefault + +#define INPUT TempINPUT +#define OUTPUT TempOUTPUT +#define INPUT_PULLUP TempINPUT_PULLUP +#define INPUT_PULLDOWN TempINPUT_PULLDOWN + +/* Rename symbol PinMode into MbedPinMode for all the file PinNamesTypes.h + * Functions using PinMode should be redeclared with the correct PinMode symbol */ +#define PinMode MbedPinMode +#include "mbed_config.h" +#include "PinNamesTypes.h" +#undef PinMode + +/* Rename symbol PinMode into ArduinoPinMode for all the file Common.h + * Functions using PinMode should be redeclared with the correct PinMode symbol */ +#define PinMode ArduinoPinMode +#include "api/Common.h" +#undef PinMode + +#undef PullNone +#undef PullUp +#undef PullDown +#undef OpenDrainPullUp +#undef OpenDrainNoPull +#undef OpenDrainPullDown +#undef PushPullNoPull +#undef PushPullPullUp +#undef PushPullPullDown +#undef OpenDrain +#undef PullDefault + +#undef INPUT +#undef OUTPUT +#undef INPUT_PULLUP +#undef INPUT_PULLDOWN + +/* Define the PinName symbol to be used in all the contexts */ +typedef enum { + PullNone = TempPullNone, + PullUp = TempPullUp, + PullDown = TempPullDown, + OpenDrainPullUp = TempOpenDrainPullUp, + OpenDrainNoPull = TempOpenDrainNoPull, + OpenDrainPullDown = TempOpenDrainPullDown, + PushPullNoPull = TempPushPullNoPull, + PushPullPullUp = TempPushPullPullUp, + PushPullPullDown = TempPushPullPullDown, + OpenDrain = TempOpenDrain, + PullDefault = TempPullDefault, + INPUT = TempINPUT, + OUTPUT = TempOUTPUT, + INPUT_PULLUP = TempINPUT_PULLUP, + INPUT_PULLDOWN = TempINPUT_PULLDOWN +} PinMode; + +#if defined(__cplusplus) + +/* Redeclare Common.h functions with the updated PinMode */ +void pinMode(pin_size_t pinNumber, PinMode pinMode); + +#endif \ No newline at end of file diff --git a/variants/PORTENTA_X8/pins_arduino.h b/variants/PORTENTA_X8/pins_arduino.h new file mode 100644 index 000000000..864aaa4ab --- /dev/null +++ b/variants/PORTENTA_X8/pins_arduino.h @@ -0,0 +1,158 @@ +#pragma once +#include +#include "PeripheralPins.h" + +#ifndef __PINS_ARDUINO__ +#define __PINS_ARDUINO__ + +#ifdef __cplusplus +extern "C" unsigned int PINCOUNT_fn(); +extern "C" bool isBetaBoard(); +#endif + +// Booting +// ---- +void bootM4(); + +extern PinName digitalPinToPinName(pin_size_t P); + +// Pin count +// ---- +#define PINS_COUNT (PINCOUNT_fn()) +#define NUM_DIGITAL_PINS (36u) +#define NUM_ANALOG_INPUTS (8u) +#define NUM_ANALOG_OUTPUTS (1u) + +// LEDs +// ---- +#define PIN_LED (33u) +#define LED_BUILTIN PIN_LED + +// Analog pins +// ----------- +#define PIN_A0 (7u) +#define PIN_A1 (8u) +#define PIN_A2 (9u) +#define PIN_A3 (10u) +#define PIN_A4 (11u) +#define PIN_A5 (12u) +#define PIN_A6 (13u) +#define PIN_A7 (14u) + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +#define ADC_RESOLUTION 12 + +// Digital pins +// ----------- +#define D0 (0u) +#define D1 (1u) +#define D2 (2u) +#define D3 (3u) +#define D4 (4u) +#define D5 (5u) +#define D6 (6u) +#define D7 (7u) +#define D8 (8u) +#define D9 (9u) +#define D10 (10u) +#define D11 (11u) +#define D12 (12u) +#define D13 (13u) +#define D14 (14u) +#define D15 (15u) +#define D16 (16u) +#define D17 (17u) +#define D18 (18u) +#define D19 (19u) +#define D20 (20u) +#define D21 (21u) + +// Serial +#define PIN_SERIAL_RX (22ul) +#define PIN_SERIAL_TX (21ul) + +#define SERIAL_HOWMANY 1 +#define SERIAL1_TX (digitalPinToPinName(PIN_SERIAL_TX)) +#define SERIAL1_RX (digitalPinToPinName(PIN_SERIAL_RX)) + +// SPI +#define PIN_SPI_MISO (0u) +#define PIN_SPI_MOSI (A6) +#define PIN_SPI_SCK (A5) +#define PIN_SPI_SS (1u) + +static const uint8_t SS = PIN_SPI_SS; // SPI Slave SS not used. Set here only for reference. +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +// Wire +#define PIN_WIRE_SDA (38u) +#define PIN_WIRE_SCL (29u) + +#define RPC_SERIAL 1 +#define HAS_UNIQUE_ISERIAL_DESCRIPTOR +#define BOARD_VENDORID 0x2341 +#define BOARD_PRODUCTID 0x0061 +#define BOARD_NAME "Portenta X8" + +#define DFU_MAGIC_SERIAL_ONLY_RESET 0xb0 + +uint8_t getUniqueSerialNumber(uint8_t* name); +void _ontouch1200bps_(); + +#define WIRE_HOWMANY 1 + +#define I2C_SDA (PC_9) // marked as PWM8 +#define I2C_SCL (PA_8) // marked as PWM6 + +#define SPI_HOWMANY 1 + +#define SPI_MISO (digitalPinToPinName(PIN_SPI_MISO)) // marked as 0 +#define SPI_MOSI (digitalPinToPinName(PIN_SPI_MOSI)) // marked as A6 +#define SPI_SCK (digitalPinToPinName(PIN_SPI_SCK)) // marked as A5 + +#define digitalPinToPort(P) (digitalPinToPinName(P)/32) + +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial2 + +#define USB_MAX_POWER (500) + +#ifdef __cplusplus + +#include "api/HardwareSerial.h" + +#define MACRO_ERROR_SERIAL_STR "\n\n****\nPlease include SerialRPC library to use Serial\n****\n\n" +#define MACRO_ERROR_SERIAL __attribute__ ((error(MACRO_ERROR_SERIAL_STR))) + +class ErrorSerialClass : public arduino::HardwareSerial { +public: + ErrorSerialClass() {}; + ~ErrorSerialClass() {}; + void MACRO_ERROR_SERIAL begin(long unsigned int); + void MACRO_ERROR_SERIAL begin(long unsigned int, uint16_t); + size_t MACRO_ERROR_SERIAL write(uint8_t); + MACRO_ERROR_SERIAL operator bool(); + void MACRO_ERROR_SERIAL end(); + int MACRO_ERROR_SERIAL peek(); + int MACRO_ERROR_SERIAL read(); + int MACRO_ERROR_SERIAL available(); + void MACRO_ERROR_SERIAL flush(); +}; + +extern ErrorSerialClass ErrorSerial; + +#endif + + +#endif //__PINS_ARDUINO__ diff --git a/variants/PORTENTA_X8/variant.cpp b/variants/PORTENTA_X8/variant.cpp new file mode 100644 index 000000000..fd0e972ba --- /dev/null +++ b/variants/PORTENTA_X8/variant.cpp @@ -0,0 +1,79 @@ +#include "Arduino.h" +#include "pinDefinitions.h" + +AnalogPinDescription g_AAnalogPinDescription[] = { + { PF_11, NULL }, // A0 ADC1_INP2 + { PA_6, NULL }, // A1 ADC12_INP3 + { PF_13, NULL }, // A2 ADC2_INP2 + { PB_1, NULL }, // A3 ADC12_INP5 + { PC_4, NULL }, // A4 ADC12_INP4 + { PF_7, NULL }, // A5 ADC3_INP3 + { PF_9, NULL }, // A6 ADC3_INP2 + { PF_5, NULL } // A7 ADC3_INP4 +}; + +PinDescription g_APinDescription[] = { + // D0 - D6 + { PF_8, NULL, NULL, NULL }, // D0 + { PF_6, NULL, NULL, NULL }, // D1 + { PF_3, NULL, NULL, NULL }, // D2 + { PF_4, NULL, NULL, NULL }, // D3 + { PF_12, NULL, NULL, NULL }, // D4 + { PE_10, NULL, NULL, NULL }, // D5 + { PE_11, NULL, NULL, NULL }, // D6 + + // D7 - D14 + { PF_11, NULL }, // D7 A0 + { PA_6, NULL }, // D8 A1 + { PF_13, NULL }, // D9 A2 + { PB_1, NULL }, // D10 A3 + { PC_4, NULL }, // D11 A4 + { PF_7, NULL }, // D12 A5 + { PF_9, NULL }, // D13 A6 + { PF_5, NULL }, // D14 A7 + + // CAN + { PD_1, NULL, NULL, NULL }, // D15 + { PD_0, NULL, NULL, NULL }, // D16 + { PB_6, NULL, NULL, NULL }, // D17 + { PB_5, NULL, NULL, NULL }, // D18 + + // USART2 + { PD_3, NULL, NULL, NULL }, // D19 + { PD_4, NULL, NULL, NULL }, // D20 + { PD_5, NULL, NULL, NULL }, // D21 + { PD_6, NULL, NULL, NULL }, // D22 + + // PWM + { PC_7, NULL, NULL, NULL }, // D23 + { PA_9, NULL, NULL, NULL }, // D24 + { PA_10, NULL, NULL, NULL }, // D25 + { PB_10, NULL, NULL, NULL }, // D26 + { PA_11, NULL, NULL, NULL }, // D27 + { PD_15, NULL, NULL, NULL }, // D28 + { PA_8, NULL, NULL, NULL }, // D29 + { PC_6, NULL, NULL, NULL }, // D30 + { PA_12, NULL, NULL, NULL }, // D31 + { PC_8, NULL, NULL, NULL }, // D32 + + // INTERNAL + { PA_0, NULL, NULL, NULL }, // D33 + { PC_1, NULL, NULL, NULL }, // D34 + { PE_5, NULL, NULL, NULL }, // D35 + + // DUAL CONNECTION + { PG_6, NULL, NULL, NULL }, // D36 + { PG_7, NULL, NULL, NULL }, // D37 + { PC_9, NULL, NULL, NULL }, // D38 +}; + +extern "C" { + unsigned int PINCOUNT_fn() { + return (sizeof(g_APinDescription) / sizeof(g_APinDescription[0])); + } +} + + +void initVariant() { + +} diff --git a/variants/RASPBERRY_PI_PICO/conf/mbed_app.json b/variants/RASPBERRY_PI_PICO/conf/mbed_app.json index e35e61ff6..839285b81 100644 --- a/variants/RASPBERRY_PI_PICO/conf/mbed_app.json +++ b/variants/RASPBERRY_PI_PICO/conf/mbed_app.json @@ -2,6 +2,7 @@ "target_overrides": { "*": { "target.printf_lib": "std", + "target.macros_add": [ "MBEDTLS_ENTROPY_NV_SEED" ], "platform.stdio-buffered-serial": false, "platform.stdio-baud-rate": 115200, "platform.default-serial-baud-rate": 115200,