☁️

Project: OTA update on STM32 through ESP32

Posted on Sat, Sep 7, 2019 ESP32 IoT

Setup

Setup connection on breadboard (didn't work out as expected due to breadboard contact problems)
Setup connection with wires directly connected (worked!)

The raw .drawio file is available here:

Schematic connection diagram

The .bin files of the project at generated at the directory ~/Documents/STM32_Projects/ledBlink/Debug

Code

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

#define STERR         "ERROR"
#define STM32INIT     0x7F          // Send Init command 
#define STM32OK       0x79          // return ACK
#define STM32ROK      0x1F          // return NACK
#define STM32GET      0             // get version command
#define STM32RUN      0x21          // Restart and Run programm
#define STM32RD       0x11          // Read flash command
#define STM32WR       0x31          // Write flash command
#define STM32UNPCTWR  0x73          // Unprotest WR command
#define STM32ERASE    0x43          // Erase flash command
#define STM32ERASEN   0x44          // Erase extended flash command
#define STM32ID       0x02          // get chip ID command
#define STM32STADDR   0x8000000     // STM32 codes start address
#define STM32ERR      0x3F
#define F10xx8  "STM32F103x8/B"     //tested
#define F10xx6  "STM32F103x4/6"   
#define F10xxc  "STM32F103xC/D/E"
#define F107    "STM32F105/107"
#define F03x46  "STM32F03xx4/6"   //tested
#define F030xc  "STM32F030xC"
#define F030x8  "STM32F030x8/05x"

String stm32GetId() {     // Tested
  Serial.println("entering the function");
  int getid = 0;
  unsigned char sbuf[5];
  stm32SendCommand(STM32ID);
  Serial.println("sent command completed");
  while (!Serial2.available());
  sbuf[0] = Serial2.read();
  if (sbuf[0] == STM32OK) {
    Serial2.readBytesUntil(STM32OK, sbuf, 4);
    getid = sbuf[1];
    getid = (getid << 8) + sbuf[2];
    if (getid == 0x410)
      return F10xx8;
    if (getid == 0x412)
      return F10xx6;
    if (getid == 0x418)
      return F107;
    if (getid == 0x444)
      return F03x46;
    if (getid == 0x414)
      return F10xxc;
    if (getid == 0x440)
      return F030x8;
    if (getid == 0x442)
      return F030xc;
  }
  else
    return STERR;
}

void stm32SendCommand(unsigned char commd) {    // Tested
  Serial2.write(commd);
  Serial2.write(~commd);
}

unsigned char stm32Erase() {     // Tested
  unsigned char eraseflag = 0;
  stm32SendCommand(STM32ERASE);
  while (!Serial2.available());
  if (Serial2.read() == STM32OK)
  {
    Serial2.write(0xFF);
    Serial2.write(0x00);
  }
  else return STM32ERR;
  while (!Serial2.available());
  eraseflag = Serial2.read();
  return eraseflag;
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200, SERIAL_8E1);

  Serial.begin(115200);
  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
  
  pinMode(BOOT0, OUTPUT);
  pinMode(NRST, OUTPUT);

  digitalWrite(BOOT0, HIGH);
  delay(100);
  digitalWrite(NRST, LOW);
  delay(50);
  digitalWrite(NRST, HIGH);
  delay(500);

  FlashMode();

  //Serial.println("flash mode completed");
  
    stm32SendCommand(STM32INIT);
   while (!Serial2.available());
  Serial.println(Serial2.read());

  Serial.println("INIT completed");
  Serial.println(stm32GetId());
  
  //Serial.println(stm32Erase());
  Serial.println("ID completed");
  RunMode();
  // Serial.println(stm32Erase() == STM32OK);

}

void loop() {
  // put your main code here, to run repeatedly:
  // Serial.print("hello world");
  // delay(500);
}

void FlashMode()  {    //Tested
  digitalWrite(BOOT0, HIGH);
  delay(100);
  digitalWrite(NRST, LOW);
  delay(50);
  digitalWrite(NRST, HIGH);
  delay(500);
}

void RunMode()  {    //Tested
  digitalWrite(BOOT0, LOW);
  delay(100);
  digitalWrite(NRST, LOW);
  delay(50);
  digitalWrite(NRST, HIGH);
  delay(500);
}
Flashing .hex file
#include "a.h"

#include <SPIFFS.h>

#include <WiFi.h>

#include <HTTPClient.h>

#include "SPIFFS.h"

const char * ssid = "*";
const char * password = "*";

# define NRST 19
# define BOOT0 18

# define ACK 0x79 // acknowledge byte from STM

HardwareSerial STM(1);

byte global_arr[512] = {
  0
};
int global_len = 512;

void FlashMode() { //Tested
  digitalWrite(BOOT0, HIGH);
  delay(100);
  digitalWrite(NRST, LOW);
  delay(50);
  digitalWrite(NRST, HIGH);
  delay(500);
}

/*----------------------------------------------------------------
 * stmSend, send byte over STM serial connection
 * return: none
 * param: byte cmd, byte to send
 */
inline void stmSend(byte cmd) {
  STM.write(cmd);
  delay(5);
}

/*----------------------------------------------------------------
 * stmRead, blocks until byte recv from STM
 * return: byte, value recv from STM
 * param: none
 */
inline byte stmRead() {
  byte buf;
  while (!STM.available()); // wait to recv byte
  buf = STM.read();
  Serial.println(buf);
  return buf;
}

/*----------------------------------------------------------------
 * stmCmdGeneric, executes chosen generic command
 * return: bool, true if successful
 *         arr, values returned by command
 *         len, lengh of arr
 * param: byte   cmd, command code
 *        byte* arr, array to hold returned values
 *        int*  len, max length of arr
 */
bool stmCmdGeneric(byte cmd, byte * arr, int * len) {
  stmSend(cmd); // send command
  stmSend(cmd ^ 0xFF); // send checksum

  if (stmRead() != ACK) {
    // ACKNOWLEDGE FAILED
    return false;
  } else {

    int recv_len = stmRead() + 1; // number of bytes in response
    if (recv_len > * len) recv_len = * len; // limit recv_len to size of arr

    for (int i = 0; i < recv_len; i++) {
      arr[i] = stmRead(); // load response into arr

    }

    * len = recv_len; // update arr length
    return true;
  }
}

/*----------------------------------------------------------------
 * printArr, prints array to console in HEX format
 * return: none
 * param: array of any data type
 */
template < typename T, size_t len > void printArr(const T( & arr)[len]) {
  for (size_t i = 0; i < len; i++) {
    Serial.print(arr[i], HEX);
    Serial.print(" ");
  }
  Serial.println();
}

/*----------------------------------------------------------------
 * stmFlushRx, clears DUEs RX buffer from STM32
 * return: none
 * param: none
 */
void stmFlushRx(void) {
  while (STM.available()) STM.read(); // clear DUEs RX buffer
}

/*----------------------------------------------------------------
 * stmReadMemory, reads the flash memory of the STM32
 * return: bool, true if successful
 *         arr, memory values returned from STM32
 *         len, number of bytes returned
 * param: int   addr, start address of flash memory to read
 *        byte* arr, array to store returned values
 *        int*  len, number of bytes to read (max 256)
 * 
 */
bool stmReadMemory(int addr, byte * arr, int * len) {
  stmFlushRx();

  stmSend(0x11); // send read command
  stmSend(0x11 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  byte byte3 = (addr >> 0) & 0xFF; // addr lsb
  byte byte2 = (addr >> 8) & 0xFF;
  byte byte1 = (addr >> 16) & 0xFF;
  byte byte0 = (addr >> 24) & 0xFF; // addr msb
  byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum

  stmSend(byte0);
  stmSend(byte1);
  stmSend(byte2);
  stmSend(byte3);
  stmSend(crc);

  if (stmRead() != ACK) return false; // wait for ACK

  byte len_byte = static_cast < byte > ( * len) - 1;
  stmSend(len_byte); // length of read
  stmSend(len_byte ^ 0xFF); // checksum

  if (stmRead() != ACK) return false; // wait for ACK

  for (size_t i = 0; i <= len_byte; i++) {
    arr[i] = stmRead();
  }
  * len = len_byte; // update length of array
  return true;
}

/*----------------------------------------------------------------
 * stmEraseMemory, performs a global erase of all flash memory
 * return: bool, true if successful
 * param: none
 */
bool stmEraseMemory(void) {
  stmFlushRx();

  Serial.println("Sending erase command...");
  stmSend(0x43); // send read command
  stmSend(0x43 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  Serial.println("Sending global code...");
  stmSend(0xFF); // send global erase code
  stmSend(0xFF ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  return true;
}

/*----------------------------------------------------------------
 * stm_init, init STM USART connection
 * return: bool, true if successful
 * param: none
 */
bool stm_init() {
  // STM waits for 0x7F to init USART
  stmSend(0x7F);
  byte recv = stmRead();
  if (recv != ACK) return false; // ACK FAILED
  // get chip ID

  if (stmCmdGeneric(0x02, global_arr, & global_len)) {
    byte msb = global_arr[0];
    byte lsb = global_arr[1];
    int chip_id = (msb << 8) + (lsb << 0);
    Serial.print("Chip ID: ");
    Serial.println(chip_id, HEX);

    if (chip_id == 0x410) return true;
  }
  return false;
}

bool stmWriteMemory(int addr,
  const byte * arr, int len) {
    Serial.println("Entered write function");
  if (len > 256) return false; // max write length

  stmFlushRx(); // clear DUE RX buffer from STM32

  if (addr & 0x3 || len & 0x3) {
    Serial.println("Data not aligned");
  }

  stmSend(0x31); // send write command
  stmSend(0x31 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  byte byte3 = (addr >> 0) & 0xFF; // addr lsb
  byte byte2 = (addr >> 8) & 0xFF;
  byte byte1 = (addr >> 16) & 0xFF;
  byte byte0 = (addr >> 24); // & 0xFF; // addr msb
  byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum

  stmSend(byte0);
  stmSend(byte1);
  stmSend(byte2);
  stmSend(byte3);
  stmSend(crc);

  if (stmRead() != ACK) return false; // wait for ACK

//  Serial.println("BEFORE ALIGNMENT");
//
//  uint8_t cs, buf[256 + 2];
//
//  byte lng = (len - 1) & 0xFF;
//  stmSend(lng);
//
//  cs = 0xFF;
//  for (int i = 0; i < len; i++) {
//    cs ^= arr[i];
//    stmSend(arr[i]);
//  }
//
//  stmSend(cs);
//  Serial.println("PROCESS COMPLETED");

//  byte aligned_len = (len + 3) & ~3;
//  cs = aligned_len - 1;
//  buf[0] = aligned_len - 1;
//  for (int i = 0; i < len; i++) {
//    cs ^= arr[i];
//    buf[i + 1] = arr[i];
//  }
//
//  stmSend(aligned_len - 1);
//  
//  /* padding data */
//  for (int i = len; i < aligned_len; i++) {
//    cs ^= 0xFF;
//    buf[i + 1] = 0xFF;
//    stmSend(buf[i]);
//  }
//
//  Serial.println("ENDED");
//  stmSend(aligned_len + 2);
//  
//  buf[aligned_len + 1] = cs;


  byte len_byte = static_cast < byte > (len) - 1; // number of bytes to write
  crc = len_byte; // XOR(arr, len) checksum for later

  stmSend(len_byte); // length of write

  for (size_t i = 0; i < len; i++) {
    crc ^= arr[i]; // calculate checksum
    Serial.println(arr[i], HEX);
    stmSend(arr[i]); // send data bytes
  }

  stmSend(crc); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  return true;
}

bool downloadBinFile() {

  delay(100);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");

  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return false;
  }

  if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status

    HTTPClient http;

    String fileName = "/ledBlink.hex";
    Serial.println(fileName);
    File f = SPIFFS.open(fileName, FILE_WRITE);

    if (f) {
      http.begin("http://esp32.surge.sh/ledBlink.hex");
      int httpCode = http.GET();
      if (httpCode > 0) {

        //          int binLength = http.getSize();
        //          Serial.println(binLength);
        //
        //          uint8_t buff[256] = { 0 };
        //          WiFiClient *stream = http.getStreamPtr();
        //
        //          int count = 0;
        //          int addr = 0x08000000;
        //
        //          while (http.connected() && (binLength > 0 || binLength == -1)) {
        //            Serial.println(binLength);
        //            size_t size = stream->available();
        //            Serial.println(size);
        //
        //            if (size) {
        //              int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
        //              Serial.println(c);
        //
        //              if( stmWriteMemory(addr, &buff[256*count], 256) )
        //              {
        //                Serial.println("pass");
        //              }
        //              else
        //              {
        //                Serial.println("fail");
        //                while(1);
        //              }
        //
        //              Serial.println(buff[count]);
        //
        //              addr += 256;
        //              count += 1;
        //
        //              if (binLength > 0) {
        //                binLength -= c;
        //              }
        //
        //            } else {
        //              Serial.println(size);
        //              Serial.println("Unable to get data");
        //            }
        //          }

        String dataContent = http.getString();
        Serial.println(dataContent);
        f.print(dataContent);
      } else {
        Serial.println("HTTP GET request failed!");
      }
      Serial.println("File Write Succeeded!");
    } else {
      Serial.println("File mounting failed!");
    }
    f.close();

    http.end(); //Free the resources
  }

  delay(100);
  return true;

}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  STM.begin(115200, SERIAL_8N1, 23, 22);
  pinMode(BOOT0, OUTPUT);
  pinMode(NRST, OUTPUT);

  /*----------------------------------------------------------------
 * printArr, prints array to console in HEX format
 * return: none
 * param: byte* arr, array to be printed
 *        int   len, length of array
 *
void printArr(byte* arr, int len)
{
  for(int i = 0; i < len; i++)
  {
    Serial.print(arr[i], HEX);
    Serial.print(" ");
  }
  Serial.println();
}
*/

  if (downloadBinFile()) {
    Serial.println("BIN FILE DOWNLOAD SUCCESSFUL");
  } else {
    Serial.println("BIN FILE DOWNLOAD FAILED");
  }

  delayMicroseconds(1227); // wait for STM bootloader to load
  FlashMode();

  if (stm_init() == true) {
    Serial.println("INIT SUCCESSFUL");
  } else {
    Serial.println("INIT FAILED");
    while (1);
  }

  // array to write: binary[21140]
  int len = 21140;
  int count = 0;
  int addr = 0x08000000;

  delay(2); // need delay or smtReadMemory here or else it breaks?

  if (stmEraseMemory()) Serial.println("MEMORY ERASED");
  else {
    Serial.println("ERASE FAILED");
    while (1);
  }

  File file2 = SPIFFS.open("/ledBlink.hex");
  int fileSize = file2.size();
  Serial.println(fileSize);

  if (!file2) {
    Serial.println("Failed to open file for reading");
    return;
  }

  Serial.println("File Content:");

  uint8_t buff[256] = { 0 };
  int counter = 0;
  int totalCounter = 0;
  while (file2.available()) {

    int oneByte = file2.read();
    // Serial.println(oneByte);
    // Serial.println("ONE BYTES READ");

    buff[counter++] = oneByte;
    if (counter >= 256) {
      if (stmWriteMemory(addr, &buff[0], 256)) {
        Serial.println("pass");
      } else {
      Serial.println("fail");
      while (1);
      }

      // clear the counter
      totalCounter += counter;

      Serial.print("CURRENT ADDR IS ");
      Serial.println(addr, HEX);
      
      counter = 0;
      addr += 256;
      Serial.println("256 bytes flashed");
    }
  }

  int remaining = fileSize - totalCounter;
  for (int i = remaining; i < 256; i++) {
    buff[i] = 0xFF;
  }
  if(stmWriteMemory(addr, &buff[0], 256)) {
    Serial.println("pass");
  } else {
    Serial.println("fail");
  }
  Serial.print(remaining);
  Serial.println(" bytes flashed");
  
  file2.close();


// flashing from the array STARTS
//while (len > 256) {
//  Serial.println(count);
//  // write in 256 byte blocks
//  if (stmWriteMemory(addr, & binary[256 * count], 256)) {
//    Serial.println("pass");
//  } else {
//    Serial.println("fail");
//    while (1);
//  }
//  addr += 256;
//  count++;
//  len -= 256;
//}
//stmWriteMemory(addr, & binary[(21140 - len)], len);

// while(1);
// flashing from the array ENDS

//Serial.println("STARTING BIN FILE FLASHING");
//
//// flashing the bin file STARTS
//FILE * file;
//char * file_buf;
//size_t bytes_read;
//unsigned int file_size = 0;
//char cont_len[8];
//
//file = fopen("/ledBlink.hex", "r");
//
//if (file != NULL) {
//  fseek(file, 0, SEEK_END);
//  file_size = ftell(file);
//  fseek(file, 0, SEEK_SET);
//  Serial.println(file_size);
//
//  file_buf = (char * ) malloc(file_size);
//  if (file_buf == NULL) {
//    Serial.println("SPIFFS - Failed to allocate memory");
//  } else {
//    bytes_read = fread(file_buf, sizeof(file_buf), 1, file);
//    Serial.println(bytes_read);
//    fclose(file);
//  }
//} else {
//  Serial.println("DOWNLOADED FILE IS NULL");
//}
// flashing the bin file ENDS
}

void loop() {
  // put your main code here, to run repeatedly:

}
Flashing .bin file
#include "a.h"

#include <SPIFFS.h>

#include <WiFi.h>

#include <HTTPClient.h>

#include "SPIFFS.h"

const char * ssid = "*";
const char * password = "*";

int len;

# define NRST 19
# define BOOT0 18

# define ACK 0x79 // acknowledge byte from STM

HardwareSerial STM(1);

byte global_arr[512] = {
  0
};
int global_len = 512;

void FlashMode() { //Tested
  digitalWrite(BOOT0, HIGH);
  delay(100);
  digitalWrite(NRST, LOW);
  delay(50);
  digitalWrite(NRST, HIGH);
  delay(500);
}

/*----------------------------------------------------------------
 * stmSend, send byte over STM serial connection
 * return: none
 * param: byte cmd, byte to send
 */
inline void stmSend(byte cmd) {
  STM.write(cmd);
  delay(5);
}

/*----------------------------------------------------------------
 * stmRead, blocks until byte recv from STM
 * return: byte, value recv from STM
 * param: none
 */
inline byte stmRead() {
  byte buf;
  while (!STM.available()); // wait to recv byte
  buf = STM.read();
  Serial.println(buf);
  return buf;
}

/*----------------------------------------------------------------
 * stmCmdGeneric, executes chosen generic command
 * return: bool, true if successful
 *         arr, values returned by command
 *         len, lengh of arr
 * param: byte   cmd, command code
 *        byte* arr, array to hold returned values
 *        int*  len, max length of arr
 */
bool stmCmdGeneric(byte cmd, byte * arr, int * len) {
  stmSend(cmd); // send command
  stmSend(cmd ^ 0xFF); // send checksum

  if (stmRead() != ACK) {
    // ACKNOWLEDGE FAILED
    return false;
  } else {

    int recv_len = stmRead() + 1; // number of bytes in response
    if (recv_len > * len) recv_len = * len; // limit recv_len to size of arr

    for (int i = 0; i < recv_len; i++) {
      arr[i] = stmRead(); // load response into arr

    }

    * len = recv_len; // update arr length
    return true;
  }
}

/*----------------------------------------------------------------
 * printArr, prints array to console in HEX format
 * return: none
 * param: array of any data type
 */
template < typename T, size_t len > void printArr(const T( & arr)[len]) {
  for (size_t i = 0; i < len; i++) {
    Serial.print(arr[i], HEX);
    Serial.print(" ");
  }
  Serial.println();
}

/*----------------------------------------------------------------
 * stmFlushRx, clears DUEs RX buffer from STM32
 * return: none
 * param: none
 */
void stmFlushRx(void) {
  while (STM.available()) STM.read(); // clear DUEs RX buffer
}

/*----------------------------------------------------------------
 * stmReadMemory, reads the flash memory of the STM32
 * return: bool, true if successful
 *         arr, memory values returned from STM32
 *         len, number of bytes returned
 * param: int   addr, start address of flash memory to read
 *        byte* arr, array to store returned values
 *        int*  len, number of bytes to read (max 256)
 * 
 */
bool stmReadMemory(int addr, byte * arr, int * len) {
  stmFlushRx();

  stmSend(0x11); // send read command
  stmSend(0x11 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  byte byte3 = (addr >> 0) & 0xFF; // addr lsb
  byte byte2 = (addr >> 8) & 0xFF;
  byte byte1 = (addr >> 16) & 0xFF;
  byte byte0 = (addr >> 24) & 0xFF; // addr msb
  byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum

  stmSend(byte0);
  stmSend(byte1);
  stmSend(byte2);
  stmSend(byte3);
  stmSend(crc);

  if (stmRead() != ACK) return false; // wait for ACK

  byte len_byte = static_cast < byte > ( * len) - 1;
  stmSend(len_byte); // length of read
  stmSend(len_byte ^ 0xFF); // checksum

  if (stmRead() != ACK) return false; // wait for ACK

  for (size_t i = 0; i <= len_byte; i++) {
    arr[i] = stmRead();
  }
  * len = len_byte; // update length of array
  return true;
}

/*----------------------------------------------------------------
 * stmEraseMemory, performs a global erase of all flash memory
 * return: bool, true if successful
 * param: none
 */
bool stmEraseMemory(void) {
  stmFlushRx();

  Serial.println("Sending erase command...");
  stmSend(0x43); // send read command
  stmSend(0x43 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  Serial.println("Sending global code...");
  stmSend(0xFF); // send global erase code
  stmSend(0xFF ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  return true;
}

/*----------------------------------------------------------------
 * stm_init, init STM USART connection
 * return: bool, true if successful
 * param: none
 */
bool stm_init() {
  // STM waits for 0x7F to init USART
  stmSend(0x7F);
  byte recv = stmRead();
  if (recv != ACK) return false; // ACK FAILED
  // get chip ID

  if (stmCmdGeneric(0x02, global_arr, & global_len)) {
    byte msb = global_arr[0];
    byte lsb = global_arr[1];
    int chip_id = (msb << 8) + (lsb << 0);
    Serial.print("Chip ID: ");
    Serial.println(chip_id, HEX);

    if (chip_id == 0x410) return true;
  }
  return false;
}

bool stmWriteMemory(int addr,
  const byte * arr, int len) {
    Serial.println("Entered write function");
  if (len > 256) return false; // max write length

  stmFlushRx(); // clear DUE RX buffer from STM32

  if (addr & 0x3 || len & 0x3) {
    Serial.println("Data not aligned");
  }

  stmSend(0x31); // send write command
  stmSend(0x31 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  byte byte3 = (addr >> 0) & 0xFF; // addr lsb
  byte byte2 = (addr >> 8) & 0xFF;
  byte byte1 = (addr >> 16) & 0xFF;
  byte byte0 = (addr >> 24); // & 0xFF; // addr msb
  byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum

  stmSend(byte0);
  stmSend(byte1);
  stmSend(byte2);
  stmSend(byte3);
  stmSend(crc);

  if (stmRead() != ACK) return false; // wait for ACK

  Serial.println("BEFORE ALIGNMENT");

  uint8_t cs, buf[256 + 2];

  byte lng = (len - 1) & 0xFF;
  stmSend(lng);

  cs = 0xFF;
  for (int i = 0; i < len; i++) {
    cs ^= arr[i];
    stmSend(arr[i]);
  }

  stmSend(cs);
  Serial.println("PROCESS COMPLETED");

//  byte aligned_len = (len + 3) & ~3;
//  cs = aligned_len - 1;
//  buf[0] = aligned_len - 1;
//  for (int i = 0; i < len; i++) {
//    cs ^= arr[i];
//    buf[i + 1] = arr[i];
//  }
//
//  stmSend(aligned_len - 1);
//  
//  /* padding data */
//  for (int i = len; i < aligned_len; i++) {
//    cs ^= 0xFF;
//    buf[i + 1] = 0xFF;
//    stmSend(buf[i]);
//  }
//
//  Serial.println("ENDED");
//  stmSend(aligned_len + 2);
//  
//  buf[aligned_len + 1] = cs;


//  byte len_byte = static_cast < byte > (len) - 1; // number of bytes to write
//  crc = len_byte; // XOR(arr, len) checksum for later
//
//  stmSend(len_byte); // length of write
//
//  for (size_t i = 0; i < len; i++) {
//    crc ^= arr[i]; // calculate checksum
//    stmSend(arr[i]); // send data bytes
//  }
//
//  stmSend(crc); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  return true;
}

bool downloadBinFile() {

  delay(100);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("Connected to the WiFi network");

  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return false;
  }

  if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status

    HTTPClient http;
    WiFiClient* stream;
    String fileName = "/final.bin";
    Serial.println(fileName);
    File f = SPIFFS.open(fileName, FILE_WRITE);

    if (f) {
      http.begin("http://esp32.surge.sh/final.bin");
      int httpCode = http.GET();
      len = http.getSize();
      Serial.print("Lenght: ");
      Serial.println(len);
      if(http.connected()) {
      Serial.println("Getting Stream");
      stream = http.getStreamPtr();      
      while (stream->available()) {
          char c = stream->read();
          f.print(c);
          //Serial.println(c);
      }
      Serial.println("Got Stream");
    }

      /*
      if (httpCode > 0) {

        String dataContent = http.getString();
        Serial.println(dataContent);
        
        ////////
        
        f.print(dataContent);
      } else {
        Serial.println("HTTP GET request failed!");
        
      }
      */
      Serial.println("File Write Succeeded!");
    } else {
      Serial.println("File mounting failed!");
    }
    f.close();

    http.end(); //Free the resources
  }

  delay(100);
  return true;

}

 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  STM.begin(115200, SERIAL_8N1, 23, 22);
  pinMode(BOOT0, OUTPUT);
  pinMode(NRST, OUTPUT);

  /*----------------------------------------------------------------
 * printArr, prints array to console in HEX format
 * return: none
 * param: byte* arr, array to be printed
 *        int   len, length of array
 *
void printArr(byte* arr, int len)
{
  for(int i = 0; i < len; i++)
  {
    Serial.print(arr[i], HEX);
    Serial.print(" ");
  }
  Serial.println();
}
*/

  if (downloadBinFile()) {
    Serial.println("BIN FILE DOWNLOAD SUCCESSFUL");
  } else {
    Serial.println("BIN FILE DOWNLOAD FAILED");
  }

  delayMicroseconds(1227); // wait for STM bootloader to load
  FlashMode();

  if (stm_init() == true) {
    Serial.println("INIT SUCCESSFUL");
  } else {
    Serial.println("INIT FAILED");
    while (1);
  }

  // array to write: binary[21140]
  int len = 21140;
  int count = 0;
  int addr = 0x08000000;

  delay(2); // need delay or smtReadMemory here or else it breaks?

  if (stmEraseMemory()) Serial.println("MEMORY ERASED");
  else {
    Serial.println("ERASE FAILED");
    while (1);
  }

  File file2 = SPIFFS.open("/final.bin");
  int fileSize = file2.size();
  Serial.println(fileSize);

  if (!file2) {
    Serial.println("Failed to open file for reading");
    return;
  }

  Serial.println("File Content:");

  uint8_t buff[256] = { 0 };
  int counter = 0;
  int totalCounter = 0;
  while (file2.available()) {

    int oneByte = file2.read();
    // Serial.println(oneByte);
    // Serial.println("ONE BYTES READ");

    buff[counter++] = oneByte;
    if (counter >= 256) {
      if (stmWriteMemory(addr, &buff[0], 256)) {
        Serial.println("pass");
      } else {
      Serial.println("fail");
      while (1);
      }

      // clear the counter
      totalCounter += counter;

      Serial.print("CURRENT ADDR IS ");
      Serial.println(addr, HEX);
      
      counter = 0;
      addr += 256;
      Serial.println("256 bytes flashed");
    }
  }

  int remaining = fileSize - totalCounter;
  for (int i = remaining; i < 256; i++) {
    buff[i] = 0;
  }
  if(stmWriteMemory(addr, &buff[0], 256)) {
    Serial.println("pass");
  } else {
    Serial.println("fail");
  }
  Serial.print(remaining);
  Serial.println(" bytes flashed");
  
  file2.close();


// flashing from the array STARTS
//while (len > 256) {
//  Serial.println(count);
//  // write in 256 byte blocks
//  if (stmWriteMemory(addr, & binary[256 * count], 256)) {
//    Serial.println("pass");
//  } else {
//    Serial.println("fail");
//    while (1);
//  }
//  addr += 256;
//  count++;
//  len -= 256;
//}
//stmWriteMemory(addr, & binary[(21140 - len)], len);

// while(1);
// flashing from the array ENDS

//Serial.println("STARTING BIN FILE FLASHING");
//
//// flashing the bin file STARTS
//FILE * file;
//char * file_buf;
//size_t bytes_read;
//unsigned int file_size = 0;
//char cont_len[8];
//
//file = fopen("/ledBlink.hex", "r");
//
//if (file != NULL) {
//  fseek(file, 0, SEEK_END);
//  file_size = ftell(file);
//  fseek(file, 0, SEEK_SET);
//  Serial.println(file_size);
//
//  file_buf = (char * ) malloc(file_size);
//  if (file_buf == NULL) {
//    Serial.println("SPIFFS - Failed to allocate memory");
//  } else {
//    bytes_read = fread(file_buf, sizeof(file_buf), 1, file);
//    Serial.println(bytes_read);
//    fclose(file);
//  }
//} else {
//  Serial.println("DOWNLOADED FILE IS NULL");
//}
// flashing the bin file ENDS
}

void loop() {
  // put your main code here, to run repeatedly:

}
Flashing .bin file - MicroPython (Boilerplate)
import urequests

from machine import UART
from machine import Pin

from time import sleep

WIFI_SSID = "*"
WIFI_PASSWORD = "*"

NRST = 19
BOOT0 = 18

ACK = 0x79

def FlashMode():
	return

def stmSend(cmd):
	return

def stmRead():
	return

def stmCmdGeneric(cmd, arr, len):
	return

def stmFlushRx():
	return

def stmReadMemory(addr, arr, len):
	return

def stmEraseMemory():
	return

def stm_init():
	return

def stmWriteMemory(addr, arr, len):
	return

def wlan_connect(ssid='MYSSID', password='MYPASS'):
	import network
	wlan = network.WLAN(network.STA_IF)
	if not wlan.active() or not wlan.isconnected():
		wlan.active(True)
		print('connecting to:', ssid)
		wlan.connect(ssid, password)
		while not wlan.isconnected():
			pass
	print('network config:', wlan.ifconfig())

def downloadFile(path):
	url = 'http://esp32.surge.sh/final.bin'
	response = urequests.get(url)
	# print(response.content)
	f = open(path, 'wb')""
	f.write(response.content)
	f.close()

def readFile(path):
	f = open(path, 'rb')
	data = [c for c in f.readline()]
	f.close()
	return data

# initialization of the UART serial port
uart = UART(2)
uart.init(baudrate=115200, rx=23, tx=22)
print(uart)

# initialization of the Pins
Pin(BOOT0, Pin.OUT)
Pin(NRST, Pin.OUT)

# connecting to WiFi
wlan_connect(WIFI_SSID, WIFI_PASSWORD)

# downloading the bin file
path = '/final.bin'
downloadFile(path)

# reading the bin file
allData = readFile(path)
print(allData)

sleep(1227)
FlashMode()

if stm_init() == True:
	print("INIT SUCCESSFUL")
else:
	print("INIT FAILED")
	while(1)

len = 21140
count = 0
addr = 0x08000000

sleep(2)

if stmEraseMemory():
	print("MEMORY ERASED")
else:
	print("ERASE FAILED")
	while(1)

while (len > 256):
	print(count)
	if stmWriteMemory(addr, 'c', 256):
		print("pass")
	else:
		print("fail")
		while(1)
	
	addr += 256
	count += 1
	len -= 256


stmWriteMemory(addr, 'x', len)

print("STARTING BIN FILE FLASHING")
Final Code
#include <WiFi.h>
#include <SPIFFS.h>
#include <HTTPClient.h>

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLE2902.h>

BLEServer *pServer = NULL;
BLECharacteristic * pTxCharacteristic;
bool deviceConnected = false;
bool oldDeviceConnected = false;
char ssid[32];
char password[32];

#define SERVICE_UUID           "ffe0" // UART service UUID
#define CHARACTERISTIC_UUID_RX "ffe1"
#define CHARACTERISTIC_UUID_TX "ffe1"

///////// STM32 FLASH FUNCTIONS START /////////

int len;

# define NRST 19
# define BOOT0 18

# define ACK 0x79 // acknowledge byte from STM

HardwareSerial STM(1);

byte global_arr[512] = {
  0
};
int global_len = 512;

void FlashMode() { //Tested
  digitalWrite(BOOT0, HIGH);
  delay(100);
  digitalWrite(NRST, LOW);
  delay(50);
  digitalWrite(NRST, HIGH);
  delay(500);
}

/*----------------------------------------------------------------
 * stmSend, send byte over STM serial connection
 * return: none
 * param: byte cmd, byte to send
 */
inline void stmSend(byte cmd) {
  STM.write(cmd);
  delay(4);
}

/*----------------------------------------------------------------
 * stmRead, blocks until byte recv from STM
 * return: byte, value recv from STM
 * param: none
 */
inline byte stmRead() {
  byte buf;
  while (!STM.available()); // wait to recv byte
  buf = STM.read();
  // Serial.println(buf);
  return buf;
}

/*----------------------------------------------------------------
 * stmCmdGeneric, executes chosen generic command
 * return: bool, true if successful
 *         arr, values returned by command
 *         len, lengh of arr
 * param: byte   cmd, command code
 *        byte* arr, array to hold returned values
 *        int*  len, max length of arr
 */
bool stmCmdGeneric(byte cmd, byte * arr, int * len) {
  stmSend(cmd); // send command
  stmSend(cmd ^ 0xFF); // send checksum

  if (stmRead() != ACK) {
    // ACKNOWLEDGE FAILED
    return false;
  } else {

    int recv_len = stmRead() + 1; // number of bytes in response
    if (recv_len > * len) recv_len = * len; // limit recv_len to size of arr

    for (int i = 0; i < recv_len; i++) {
      arr[i] = stmRead(); // load response into arr

    }

    * len = recv_len; // update arr length
    return true;
  }
}

/*----------------------------------------------------------------
 * printArr, prints array to console in HEX format
 * return: none
 * param: array of any data type
 */
template < typename T, size_t len > void printArr(const T( & arr)[len]) {
  for (size_t i = 0; i < len; i++) {
    Serial.print(arr[i], HEX);
    Serial.print(" ");
  }
  Serial.println();
}

/*----------------------------------------------------------------
 * stmFlushRx, clears DUEs RX buffer from STM32
 * return: none
 * param: none
 */
void stmFlushRx(void) {
  while (STM.available()) STM.read(); // clear DUEs RX buffer
}

/*----------------------------------------------------------------
 * stmReadMemory, reads the flash memory of the STM32
 * return: bool, true if successful
 *         arr, memory values returned from STM32
 *         len, number of bytes returned
 * param: int   addr, start address of flash memory to read
 *        byte* arr, array to store returned values
 *        int*  len, number of bytes to read (max 256)
 * 
 */
bool stmReadMemory(int addr, byte * arr, int * len) {
  stmFlushRx();

  stmSend(0x11); // send read command
  stmSend(0x11 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  byte byte3 = (addr >> 0) & 0xFF; // addr lsb
  byte byte2 = (addr >> 8) & 0xFF;
  byte byte1 = (addr >> 16) & 0xFF;
  byte byte0 = (addr >> 24) & 0xFF; // addr msb
  byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum

  stmSend(byte0);
  stmSend(byte1);
  stmSend(byte2);
  stmSend(byte3);
  stmSend(crc);

  if (stmRead() != ACK) return false; // wait for ACK

  byte len_byte = static_cast < byte > ( * len) - 1;
  stmSend(len_byte); // length of read
  stmSend(len_byte ^ 0xFF); // checksum

  if (stmRead() != ACK) return false; // wait for ACK

  for (size_t i = 0; i <= len_byte; i++) {
    arr[i] = stmRead();
  }
  * len = len_byte; // update length of array
  return true;
}

/*----------------------------------------------------------------
 * stmEraseMemory, performs a global erase of all flash memory
 * return: bool, true if successful
 * param: none
 */
bool stmEraseMemory(void) {
  stmFlushRx();

  // Serial.println("Sending erase command...");
  stmSend(0x43); // send read command
  stmSend(0x43 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  // Serial.println("Sending global code...");
  stmSend(0xFF); // send global erase code
  stmSend(0xFF ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  return true;
}

/*----------------------------------------------------------------
 * stm_init, init STM USART connection
 * return: bool, true if successful
 * param: none
 */
bool stm_init() {
  // STM waits for 0x7F to init USART
  stmSend(0x7F);
  byte recv = stmRead();
  if (recv != ACK) return false; // ACK FAILED
  // get chip ID

  if (stmCmdGeneric(0x02, global_arr, & global_len)) {
    byte msb = global_arr[0];
    byte lsb = global_arr[1];
    int chip_id = (msb << 8) + (lsb << 0);
    Serial.print("Chip ID: ");
    Serial.println(chip_id, HEX);

    if (chip_id == 0x410) return true;
  }
  return false;
}

bool stmWriteMemory(int addr,
  const byte * arr, int len) {
  // Serial.println("Entered write function");
  if (len > 256) return false; // max write length

  stmFlushRx(); // clear DUE RX buffer from STM32

  if (addr & 0x3 || len & 0x3) {
    Serial.println("Data not aligned");
  }

  stmSend(0x31); // send write command
  stmSend(0x31 ^ 0xFF); // send checksum

  if (stmRead() != ACK) return false; // wait for ACK

  byte byte3 = (addr >> 0) & 0xFF; // addr lsb
  byte byte2 = (addr >> 8) & 0xFF;
  byte byte1 = (addr >> 16) & 0xFF;
  byte byte0 = (addr >> 24); // & 0xFF; // addr msb
  byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum

  stmSend(byte0);
  stmSend(byte1);
  stmSend(byte2);
  stmSend(byte3);
  stmSend(crc);

  if (stmRead() != ACK) return false; // wait for ACK
  uint8_t cs, buf[256 + 2];

  byte lng = (len - 1) & 0xFF;
  stmSend(lng);

  cs = 0xFF;
  for (int i = 0; i < len; i++) {
    cs ^= arr[i];
    stmSend(arr[i]);
  }

  stmSend(cs);

  if (stmRead() != ACK) return false; // wait for ACK

  return true;
}

///////// STM32 FLASH FUNCTIONS END /////////


bool flashSTMFirmware() {

  delay(100);
  
  delayMicroseconds(1227); // wait for STM bootloader to load
  FlashMode();

  delay(100);

  if (stm_init() == true) {
    Serial.println("INIT SUCCESSFUL");
  } else {
    Serial.println("INIT FAILED");
    while (1);
  }

  // array to write: binary[21140]
  int len = 21140;
  int count = 0;
  int addr = 0x08000000;

  delay(2); // need delay or smtReadMemory here or else it breaks?
  delay(200);

  if (stmEraseMemory()) {
    Serial.println("MEMORY ERASED");
    return true;
  }
  else {
    Serial.println("ERASE FAILED");
    return false;
  }
}

bool downloadBinFile() {

  if (!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return false;
  }

  if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status

    HTTPClient http;
    WiFiClient* stream;
    String fileName = "/final.bin";
    Serial.println(fileName);
    File f = SPIFFS.open(fileName, FILE_WRITE);
    SPIFFS.begin(true);

    if (f) {
      http.begin("http://157.245.99.108:5000/STM32F429_TouchGFX_v3.binary");
      int httpCode = http.GET();
      len = http.getSize();
      Serial.print("Length: ");
      Serial.println(len);
      if(http.connected()) {
      // Serial.println("Getting Stream");
      stream = http.getStreamPtr();      
      while (stream->available()) {
          char c = stream->read();
          f.print(c);
          // Serial.println(c);
      }
      // Serial.println("Got Stream");
    }

      Serial.println("File Write Succeeded!");
    } else {
      Serial.println("File mounting failed!");
    }
    f.close();

    http.end(); //Free the resources
  }

  // delay(100);
  return true;

}

class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
    };

    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};

void constructSsid(std::string payload) {
  int counter = 0;
  uint8_t ssidLength = payload.length();
  for (int i = 1; i < (ssidLength / 2); i++) {
     ssid[counter++] = payload[i*2];
  }
  ssid[counter] = '\0';
}

void constructPassword(std::string payload) {
  int counter = 0;
  uint8_t passwordLength = payload.length();
  for (int i = 1; i < (passwordLength / 2); i++) {
     password[counter++] = payload[i*2];
  }
  password[counter] = '\0';
}

bool connectToWifi() {
  Serial.println(ssid);
  Serial.println(password);
  WiFi.begin(ssid, password);
  uint8_t retryCount = 0;
  while ((WiFi.status() != WL_CONNECTED) && retryCount <= 4) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
    retryCount += 1;
  }

  if (WiFi.status() == WL_CONNECTED) {
    return true;
  }
  return false;
}
 
bool compareData(std::string received, std::string predefined) {
  int receivedLength = received.length();
  int predefinedLength = predefined.length();
  
  if ((receivedLength / 2) != predefinedLength) {
    return false;
  }

  for (int i = 0; i < predefinedLength; i++) {
    if (received[i * 2] != predefined[i]) {
      return false;
    }
  }

  return true;
}

void sendSomeDataBLE(uint8_t *message, int messageSize) {
        uint8_t txValue = 0;

        while (txValue < messageSize) {
          pTxCharacteristic->setValue(&message[txValue], 1);
          pTxCharacteristic->notify();
          txValue++;
          delay(100); // bluetooth stack will go into congestion, if too many packets are sent
        }
}

String listOfWifiNetworks(int *messageLength) {
  int n = min((int16_t)3, WiFi.scanNetworks());
  String commaSeparatedNetworks = "{";
  for (int i = 0; i < n; i++) {
    commaSeparatedNetworks += WiFi.SSID(i);

    if (WiFi.encryptionType(i) != WIFI_AUTH_OPEN) {
      commaSeparatedNetworks += "$";
    } else {
      commaSeparatedNetworks += "#";
    }
    
    if (i != (n - 1)) {
      commaSeparatedNetworks += ", ";
    }
  }

  commaSeparatedNetworks += "}";
  *messageLength = commaSeparatedNetworks.length();
  return commaSeparatedNetworks;
}

class MyCallbacks: public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic) {
      std::string rxValue = pCharacteristic->getValue();
      
      std::string lwnCommand = "lwn";
      if (compareData(rxValue, lwnCommand)) {
        Serial.println("lwn command received");

        int messageLength = 0;
        String netMessage = listOfWifiNetworks(&messageLength);
        Serial.println(netMessage);
        uint8_t* message = (uint8_t*)malloc(sizeof(uint8_t)*messageLength);
        for (int i = 0; i < messageLength; i++) {
          message[i] = netMessage[i];
        }
        
        // uint8_t* message[netMessage.length()] = netMessage.c_str(); // "{srm hostels, srm campus}";
        sendSomeDataBLE(&message[0], messageLength);
        
      }

      std::string mdCommand = "md";
      if (compareData(rxValue, mdCommand)) {
        Serial.println("md command received");

        uint8_t message[] = "{Wheat, 7.6, 12, 1, 2, 55, 1}";
        sendSomeDataBLE(&message[0], sizeof(message)/sizeof(uint8_t));
        
      }

      if (rxValue[0] == '$') {
        Serial.println("wifi ssid received");
        constructSsid(rxValue);
      }


      if (rxValue[0] == '%') {
        Serial.println("wifi password received");
        constructPassword(rxValue);
      }

      std::string wcrCommand = "wcr";
      if (compareData(rxValue, wcrCommand)) {
        Serial.println("wcr command received");
        
        uint8_t wcStatus[] = "N";
        if (connectToWifi()) {
          wcStatus[0] = 'Y';
        }
        
        Serial.print("Connection status: ");
        Serial.println(wcStatus[0]);
        sendSomeDataBLE(&wcStatus[0], sizeof(wcStatus)/sizeof(uint8_t));
      }

      std::string dlCommand = "dl";
      if (compareData(rxValue, dlCommand)) {
        Serial.println("dl command received");
        
        uint8_t dlStatus[] = "N";
        if (downloadBinFile()) {
          dlStatus[0] = 'Y';
        }
        
        Serial.print("Bin file download status: ");
        Serial.println(dlStatus[0]);
        sendSomeDataBLE(&dlStatus[0], sizeof(dlStatus)/sizeof(uint8_t));
      }

      std::string flashCommand = "fl";
      if (compareData(rxValue, flashCommand)) {
        Serial.println("fl command received");
        
        uint8_t flashStatus[] = "N";
        if (flashSTMFirmware()) {
          flashStatus[0] = 'Y';
        }
        
        Serial.print("STM32 flash status: ");
        Serial.println(flashStatus[0]);
        sendSomeDataBLE(&flashStatus[0], sizeof(flashStatus)/sizeof(uint8_t));
      }


    }
};

void setup() {
  Serial.begin(115200);

  // Create the BLE Device
  BLEDevice::init("MA-404-00000");

  // Create the BLE Server
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());

  // Create the BLE Service
  BLEService *pService = pServer->createService(SERVICE_UUID);

  // Create a BLE Characteristic
  pTxCharacteristic = pService->createCharacteristic(
                    CHARACTERISTIC_UUID_TX,
                    BLECharacteristic::PROPERTY_NOTIFY
                  );
                      
  pTxCharacteristic->addDescriptor(new BLE2902());

  BLECharacteristic * pRxCharacteristic = pService->createCharacteristic(
                       CHARACTERISTIC_UUID_RX,
                      BLECharacteristic::PROPERTY_WRITE
                    );

  pRxCharacteristic->setCallbacks(new MyCallbacks());

  // Start the service
  pService->start();

  // Start advertising
  pServer->getAdvertising()->start();
  Serial.println("Waiting a client connection to notify...");

  // set up WiFi configurations
  WiFi.mode(WIFI_STA);
  delay(100);
}

void loop() {

//    if (deviceConnected) {
//        pTxCharacteristic->setValue(&message[txValue], 1);
//        pTxCharacteristic->notify();
//        txValue++;
//    delay(10); // bluetooth stack will go into congestion, if too many packets are sent
//  }

    // disconnecting
    if (!deviceConnected && oldDeviceConnected) {
        delay(500); // give the bluetooth stack the chance to get things ready
        pServer->startAdvertising(); // restart advertising
        Serial.println("start advertising");
        oldDeviceConnected = deviceConnected;
    }
    // connecting
    if (deviceConnected && !oldDeviceConnected) {
    // do stuff here on connecting
        oldDeviceConnected = deviceConnected;
    }
}

ESP32 Firmware Code Setup

To set up a custom partitioning scheme here, we are using a CSV defining that:

partitioning_scheme.csv0.2KB
  1. Copy partitioning_scheme.csv to Arduino partitions folder. For example: C:\Users\X\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.3\tools\partitions (Windows) ~/.arduino15/packages/esp32/hardware/esp32/1.0.4/tools/partitions (Linux)
  2. Open boards.txt folder in Arduino toolchain with any text editor. For example: C:\Users\X\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.3\boards.txt (Windows) ~/.arduino15/packages/esp32/hardware/esp32/1.0.4/boards.txt (Linux)
  3. Find the following line : esp32.name=ESP32 Dev Module and then append to the end the following:
    esp32.menu.PartitionScheme.partitioning_scheme=Custom Partition (1.5MB APP/2.5MB SPIFFS)
    esp32.menu.PartitionScheme.partitioning_scheme.build.partitions=partitioning_scheme
    esp32.menu.PartitionScheme.partitioning_scheme.upload.maximum_size=1572864
  4. Open Arduino project and under Tools select Board: "ESP32 Dev Module“ and Partition Scheme: "Custom Partition (1.5MB APP/2.5MB SPIFFS)“
  5. (FIRST TIME ONLY) Uncomment the SPIFFS.format() portion at line 715 → Upload to ESP32 → check progress of SPIFFS being formatted → Comment the SPIFFS.format() portion at line 715 → Re-upload to ESP32.

Now, we are ready to use the app to interact with the ESP32.

Controller App

Screenshots

Working Flow Demo

Screenshots of the pages of the app

Development Goals

At start, we scan for BLE devices in range and only display the ones starting with MA
Connect to the desired machine
The user can then wait for a new result or check from previous results in the DB
STM32 will send a string with result info on ESP32 serial port, and ESP32 will broadcast on BLE to the phone
The app will read and parse the info to display
When the app receives a new result, it also reads the GPS location
We display an icon at the top of the screen so user can see where the result was taken
This is also saved in the DB, so they can check the location of previous results

To implement

Blockers & Solutions

More Reading

If this blog interested you, go ahead with reading more on ESP32 and STM32 posts. Also, a similar project was done recently, check it out - https://github.com/laukik-hase/OTA_update_STM32_using_ESP32!

Thank you :)