Just4Trionic - CAN and BDM FLASH programmer for Saab cars

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Just4pLeisure
Date:
Wed Sep 11 11:55:51 2013 +0000
Parent:
3:92dae9083c83
Child:
5:1775b4b13232
Commit message:
This update adds T8 CAN DUMP and FLASH capability (recovery still to do)

Changed in this revision

bdm.cpp Show annotated file Show diff for this revision Revisions of this file
bdmcpu32.cpp Show annotated file Show diff for this revision Revisions of this file
bdmtrionic.cpp Show annotated file Show diff for this revision Revisions of this file
bdmtrionic.h Show annotated file Show diff for this revision Revisions of this file
can232.cpp Show annotated file Show diff for this revision Revisions of this file
canutils.cpp Show annotated file Show diff for this revision Revisions of this file
canutils.h Show annotated file Show diff for this revision Revisions of this file
common.h Show annotated file Show diff for this revision Revisions of this file
gmlan.cpp Show annotated file Show diff for this revision Revisions of this file
gmlan.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show diff for this revision Revisions of this file
t7can.cpp Show annotated file Show diff for this revision Revisions of this file
t7can.h Show annotated file Show diff for this revision Revisions of this file
t7utils.cpp Show annotated file Show diff for this revision Revisions of this file
t7utils.h Show annotated file Show diff for this revision Revisions of this file
t8bootloaders.h Show annotated file Show diff for this revision Revisions of this file
t8can.cpp Show annotated file Show diff for this revision Revisions of this file
t8can.h Show annotated file Show diff for this revision Revisions of this file
t8utils.cpp Show annotated file Show diff for this revision Revisions of this file
t8utils.h Show annotated file Show diff for this revision Revisions of this file
--- a/bdm.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/bdm.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -181,6 +181,7 @@
                 case CMD_VERSION:
                     printf("%02x", FW_VERSION_MAJOR);
                     printf("%02x", FW_VERSION_MINOR);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // get momentary status of BDM pins 0...5 (for debugging)
@@ -191,6 +192,7 @@
 //                    printf("DS %d, ", PIN_DS.read());
                     printf("FREEZE %d, ", PIN_FREEZE.read());
                     printf("DSO %d, ", PIN_DSO.read());
+                    printf("\r\n");
                     return TERM_OK;
 
                     // pull BKPT low
@@ -245,6 +247,7 @@
                 case CMD_GETVERIFY:
                     CHECK_ARGLENGTH(0);
                     printf("%02x", (uint8_t)verify_flash);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // set verification flag
@@ -304,6 +307,7 @@
                         return TERM_ERR;
                     }
                     printf("%02x", (uint8_t)cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // read word
@@ -313,6 +317,7 @@
                         return TERM_ERR;
                     }
                     printf("%04X", (uint16_t)cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // read long word
@@ -322,6 +327,7 @@
                         return TERM_ERR;
                     }
                     printf("%08X", cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // dump byte
@@ -331,6 +337,7 @@
                         return TERM_ERR;
                     }
                     printf("%02x", (uint8_t)cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // dump word
@@ -340,6 +347,7 @@
                         return TERM_ERR;
                     }
                     printf("%04X", (uint16_t)cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // dump long word
@@ -349,6 +357,7 @@
                         return TERM_ERR;
                     }
                     printf("%08X", cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // write byte
@@ -415,6 +424,7 @@
                         return TERM_ERR;
                     }
                     printf("%08X", cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // write system register
@@ -430,6 +440,7 @@
                         return TERM_ERR;
                     }
                     printf("%08X", cmd_result);
+                    printf("\r\n");
                     return TERM_OK;
 
                     // write A/D register
--- a/bdmcpu32.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/bdmcpu32.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -1217,6 +1217,7 @@
     return (bdm_response == BDM_CMDCMPLTE);
 }
 
+
 //-----------------------------------------------------------------------------
 /**
     Writes a word to target MCU via BDM line and gets the response.
@@ -1254,6 +1255,42 @@
 //-----------------------------------------------------------------------------
 /**
     Writes a word to target MCU via BDM line and gets the response.
+
+    @param            value            value to write
+    @param            num_bits        value size, bits
+*/
+/*
+void bdm_clk_fast(uint16_t value, uint8_t num_bits) {
+//    PIN_BKPT.output();
+    PIN_DSI.output();
+    // clock the value via BDM
+    bdm_response = ((uint32_t)value) << (32 - num_bits);
+//    bool dsi;
+    while (num_bits--) {
+
+        // falling edge on BKPT/DSCLK
+        PIN_BKPT.write(0);
+        // set DSI bit
+        PIN_DSI.write(bdm_response & 0x80000000);
+        bdm_response <<= 1;
+        // read DSO bit
+        bdm_response |= PIN_DSO.read();
+        // short delay
+//        for (uint8_t c = 1; c; c--);
+//        wait_us(1);
+        // rising edge on BKPT/DSCLK
+        PIN_BKPT.write(1);
+        // short delay
+        for (uint8_t c = 1; c; c--);
+//        wait_us(1);
+    }
+    PIN_DSI.input();
+}
+//*/
+
+//-----------------------------------------------------------------------------
+/**
+    Writes a word to target MCU via BDM line and gets the response.
     This 'fast' version can be used once the 68332 has been 'prepped'
     because the BDM interface can go twice as fast once the 68332
     clock is increased from 8 MHz to 16 MHz
@@ -1261,6 +1298,8 @@
     @param            value            value to write
     @param            num_bits        value size, bits
 */
+
+//*
 void bdm_clk_fast(uint16_t value, uint8_t num_bits) {
 
     //Set BKPT
@@ -1277,24 +1316,38 @@
     while (num_bits--) {
         // set DSI bit
 //        LPC_GPIO2->FIOPIN = ((bool)(bdm_response & 0x80000000) << 2);
-        if (bdm_response & 0x80000000) 
-            LPC_GPIO2->FIOSET = (1 << 2);
-        else
-            LPC_GPIO2->FIOCLR = (1 << 2);
+        //if (bdm_response & 0x80000000) 
+        //    LPC_GPIO2->FIOSET = (1 << 2);
+        //else
+        //    LPC_GPIO2->FIOCLR = (1 << 2);
+            
+        (bdm_response & 0x80000000) ? LPC_GPIO2->FIOSET = (1 << 2) : LPC_GPIO2->FIOCLR = (1 << 2);
+        
+        //*((volatile unsigned int *)0x23380a88) = (bool)(bdm_response & 0x80000000);
+        //*((volatile unsigned int *)0x23380a88) = bdm_response >> 31;
+        //*((volatile unsigned int *)0x23380a9c) = 1;
+        //used to set the P2.7 pin is slower (about 3 cycles) than this one
+        //GPIO2->FIOPIN=0x80
        // falling edge on BKPT/DSCLK
         LPC_GPIO2->FIOCLR = (1 << 4);
+        //*((volatile unsigned int *)0x23380a90) = 0;
 //        for (uint8_t c = 1; c; c--);
 //        // read DSO bit
 //        (bdm_response <<= 1) |= (bool)((LPC_GPIO0->FIOPIN) & (1 << 11));  -- OLD CONNECTION to PIN 27
         (bdm_response <<= 1) |= (bool)((LPC_GPIO2->FIOPIN) & (1 << 1));
+        //(bdm_response <<= 1) |= *((volatile unsigned int *)0x23380a84);
         // rising edge on BKPT/DSCLK
         LPC_GPIO2->FIOSET = (1 << 4);
+        //*((volatile unsigned int *)0x23380a90) = 1;
         for (uint8_t c = 1; c; c--);
     }
     //Make DSI an input
     LPC_GPIO2->FIODIR &= ~(1 << 2);
 //    LPC_GPIO2->FIOMASK = mask;
 }
+
+//*/
+
 //-----------------------------------------------------------------------------
 /**
     Clears the BDM interface after errors.
--- a/bdmtrionic.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/bdmtrionic.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -80,7 +80,8 @@
 */
 
 
-uint8_t dump_flash(const uint32_t* start_addr, const uint32_t* end_addr) {
+uint8_t dump_flash(const uint32_t* start_addr, const uint32_t* end_addr)
+{
 
     // check parametres
     if (*start_addr > *end_addr) {
@@ -105,6 +106,7 @@
 
         // send memory value to host
         printf("%08X", value);
+        printf("\r\n");
 
         // add the terminating character
         if (curr_addr < *end_addr - 4) {
@@ -131,7 +133,8 @@
     @return                        status flag
 */
 
-uint8_t dump_trionic() {
+uint8_t dump_trionic()
+{
 
     // Configure the MC68332 register values to prepare for flashing
     printf("I am trying to discover what type of Trionic ECU I am connected to...\r\n");
@@ -145,6 +148,11 @@
     uint32_t flash_size;
 
     switch (type) {
+        case AMD29BL802C:
+            printf("I have found AMD29BL802C type FLASH chips; I must be connected to a T8 ECU :-)\r\n");
+            reset_func = &reset_am29;
+            flash_size = T8FLASHSIZE;
+            break;
         case AMD29F400B:
         case AMD29F400T:
             printf("I have found AMD29F400 type FLASH chips; I must be connected to a T7 ECU :-)\r\n");
@@ -193,7 +201,7 @@
 
     timer.reset();
     timer.start();
-
+    printf("  0.00 %% complete.\r");
     while (addr < flash_size) {
         uint16_t byte_count = 0;
         while (byte_count < FILE_BUF_LENGTH) {
@@ -207,7 +215,7 @@
             file_buffer[byte_count+3] = ((uint8_t)long_value);
             byte_count +=4;
             // make the activity led twinkle
-            ACTIVITYLEDON; 
+            ACTIVITYLEDON;
         }
         fwrite(file_buffer, 1, FILE_BUF_LENGTH, fp);
         if (ferror (fp)) {
@@ -215,7 +223,9 @@
             printf ("Error writing to the FLASH BIN file.\r\n");
             return TERM_ERR;
         }
+        printf("%6.2f\r", 100*(float)addr/(float)flash_size );
     }
+    printf("\n");
     // should 'clear' the BDM connection here but bdm_clear won't compile from here
     // instead do a memread (or anything really) but ignore the result because it's not needed for anything
     memread_long(&long_value, &addr);
@@ -238,7 +248,8 @@
     @return                        status flag
 */
 uint8_t erase_flash(const char* flash_type, const uint32_t* start_addr,
-                    const uint32_t* end_addr) {
+                    const uint32_t* end_addr)
+{
     // AM29Fxxx chips (retrofitted to Trionic 5.x; original to T7)
     if (strncmp(flash_type, "29f010", 6) == 0 ||
             strncmp(flash_type, "29f400", 6) == 0) {
@@ -264,7 +275,8 @@
 
     @return                        status flag
 */
-uint8_t write_flash(const char* flash_type, const uint32_t* start_addr) {
+uint8_t write_flash(const char* flash_type, const uint32_t* start_addr)
+{
     // set up chip-specific functions
     bool (*reset_func)(void);
     bool (*flash_func)(const uint32_t*, uint16_t);
@@ -349,7 +361,7 @@
         curr_addr += 2;
 
         // light up the activity LED
-        ACTIVITYLEDON; 
+        ACTIVITYLEDON;
     }
 
     // reset flash
@@ -367,7 +379,8 @@
 
     @return                        status flag
 */
-uint8_t flash_trionic() {
+uint8_t flash_trionic()
+{
     // Configure the MC68332 register values to prepare for flashing
     printf("I am trying to discover what type of Trionic ECU I am connected to...\r\n");
     prep_t5_do();
@@ -381,6 +394,12 @@
     uint32_t flash_size;
 
     switch (type) {
+        case AMD29BL802C:
+            printf("I have found AMD29BL802C type FLASH chips; I must be connected to a T8 ECU :-)\r\n");
+            reset_func = &reset_am29;
+            flash_func = &flash_am29;
+            flash_size = T8FLASHSIZE;
+            break;
         case AMD29F400B:
         case AMD29F400T:
             printf("I have found AMD29F400 type FLASH chips; I must be connected to a T7 ECU :-)\r\n");
@@ -415,6 +434,7 @@
     }
 
     // reset the FLASH chips
+    printf("Reset the FLASH chip(s) to prepare them for Erasing\r\n");
     if (!reset_func()) return TERM_ERR;
 
     printf("Checking the FLASH BIN file...\r\n");
@@ -459,6 +479,12 @@
         printf("BIN file size: %#10x, FLASH chip size: %#010x, Pointer: %#10x.\r\n", file_size, flash_size, stack_long);
         return TERM_ERR;
     }
+    if (flash_size == T8FLASHSIZE && (file_size != T8FLASHSIZE || stack_long != T8POINTER)) {
+        fclose(fp);
+        printf("The BIN file does not appear to be for a T8 ECU :-(\r\n");
+        printf("BIN file size: %#10x, FLASH chip size: %#010x, Pointer: %#10x.\r\n", file_size, flash_size, stack_long);
+        return TERM_ERR;
+    }
 
     timer.reset();
     timer.start();
@@ -467,10 +493,11 @@
 
     switch (type) {
             // AM29Fxxx chips (retrofitted to Trionic 5.x; original to T7)
+        case AMD29BL802C:
         case AMD29F400B:
         case AMD29F400T:
         case AMD29F010:
-            printf("Erasing 29F400/010 type FLASH chips...\r\n");
+            printf("Erasing 29BL802/F400/010 type FLASH chips...\r\n");
             if (!erase_am29()) {
                 printf("WARNING: An error occured when I tried to erase the FLASH chips :-(\r\n");
                 return TERM_ERR;
@@ -488,7 +515,7 @@
             }
             break;
         default:
-            // unknown flash type - shouldn't get here hence "Starange!"
+            // unknown flash type - shouldn't get here hence "Strange!"
             printf("Strange! I couldn't work out how to erase the FLASH chips in the TRIONIC ECU that I am connected to :-(\r\n");
             return TERM_ERR;
     }
@@ -506,6 +533,7 @@
 //    bool ret = true;
 
 // ready to receive data
+    printf("  0.00 %% complete.\r");
     while (curr_addr < flash_size) {
         // receive bytes from BIN file
         //Get a byte - break if no more bytes to get
@@ -529,40 +557,46 @@
         curr_addr += 2;
 
         // make the activity LED twinkle
-        ACTIVITYLEDON; 
+        ACTIVITYLEDON;
+        if (!(curr_addr % 0x80))
+            printf("%6.2f\r", 100*(float)curr_addr/(float)flash_size );
     }
-
+    printf("\n");
     timer.stop();
     fclose(fp);
 
     if (curr_addr == flash_size) {
         printf("Programming took %#.1f seconds.\r\n",timer.read());
-        reset_func();
-        for (uint8_t i = 0; i < 8; ++i) {
-            memread_word(&word_value, &flash_tag[i].addr);
-            flash_func(&flash_tag[i].addr, (flash_tag[i].val & word_value));
-        }
 
-    } else {
+        // "Just4pleisure;)" 'tag' in the empty space at the end of the FLASH chip
+        // Removed for now because it conflicts with some information that Dilemma places in this empty space
+        // and because it is unsafe for Trionic 8 ECUs which have much bigger BIN files and FLASH chips
+        //        reset_func();
+        //        for (uint8_t i = 0; i < 8; ++i) {
+        //            memread_word(&word_value, &flash_tag[i].addr);
+        //            flash_func(&flash_tag[i].addr, (flash_tag[i].val & word_value));
+        //        }
+
+    } else
         printf("WARNING: Oh dear, I couldn't program the FLASH at address 0x%8x.\r\n", curr_addr);
-    }
 
-// reset flash
+    // reset flash
     return (reset_func() && (curr_addr == flash_size)) ? TERM_OK : TERM_ERR;
 }
 
 //-----------------------------------------------------------------------------
 /**
-    Resets an AM29Fxxx flash memory chip. MCU must be in background mode.
+Resets an AM29Fxxx flash memory chip. MCU must be in background mode.
 
-    @param                          none
+@param                          none
 
-    @return                         succ / fail
+@return                         succ / fail
 */
-bool reset_am29(void) {
+bool reset_am29(void)
+{
     // execute the reset command
-//    uint32_t addr = 0xfffe;
-//    return (memwrite_word(&addr, 0xf0f0) == TERM_OK);
+    //    uint32_t addr = 0xfffe;
+    //    return (memwrite_word(&addr, 0xf0f0) == TERM_OK);
     // execute the algorithm
     for (uint8_t i = 0; i < 3; ++i) {
         if (memwrite_word(&am29_reset[i].addr, am29_reset[i].val) != TERM_OK) return false;
@@ -572,17 +606,20 @@
 
 //-----------------------------------------------------------------------------
 /**
-    Erases an AM29Fxxx flash memory chip and verifies the result; MCU must be
-    in background mode.
+Erases an AM29Fxxx flash memory chip and verifies the result; MCU must be
+in background mode.
 
-    @return                        succ / fail
+@return                        succ / fail
 */
-bool erase_am29() {
+bool erase_am29()
+{
     // reset flash
     if (!reset_am29()) {
         return false;
     }
-
+    printf("Erasing AMD 29Fxxx FLASH chips.\r\n");
+    printf("This can take up to a minute for a T8,\r\n");
+    printf("30s for a T7 or 15s for a T5 ECU.\r\n");
     // execute the algorithm
     for (uint8_t i = 0; i < 6; ++i) {
         if (memwrite_word(&am29_erase[i].addr, am29_erase[i].val) != TERM_OK) {
@@ -595,17 +632,24 @@
     uint32_t addr = 0x0;
     uint16_t verify_value;
 
+    printf(" 0.0 seconds.\r");
     uint8_t err_cnt = ERR_COUNT;
     while (--err_cnt) {
         // typical erase time = 1s
         // Allow up to 25.5 seconds erase time
         wait_ms(100);
+        wait_ms(100);
         if (memread_word(&verify_value, &addr) == TERM_OK && verify_value == 0xffff) {
             // erase completed normally
             reset_am29();
+            printf("\n");
             return true;
         }
+        // make the activity LED twinkle
+        ACTIVITYLEDON;
+        printf("%4.1f\r", (float)ERR_COUNT/5 - (float)err_cnt/5 );
     }
+    printf("\n");
 
     // erase failed
     reset_am29();
@@ -614,15 +658,16 @@
 
 //-----------------------------------------------------------------------------
 /**
-    Writes a word to AM29Fxxx flash memory chip and optionally verifies the
-    result; MCU must be in background mode.
+Writes a word to AM29Fxxx flash memory chip and optionally verifies the
+result; MCU must be in background mode.
 
-    @param        addr        destination address
-    @param        val            value
+@param        addr        destination address
+@param        val            value
 
-    @return                    succ / fail
+@return                    succ / fail
 */
-bool flash_am29(const uint32_t* addr, uint16_t value) {
+bool flash_am29(const uint32_t* addr, uint16_t value)
+{
 
     // execute the algorithm
     for (uint8_t i = 0; i < 3; ++i) {
@@ -640,7 +685,8 @@
     uint8_t err_cnt = ERR_COUNT;
     while (--err_cnt) {
         // Allow up to approx 2.55 milliseconds program time (255 * ~10us BDM memread time)
-//        wait_ms(10);
+        //        wait_ms(10);
+        wait_us(100);
         uint16_t verify_value;
         if ((memread_word(&verify_value, addr) == TERM_OK) &&
                 (verify_value == value)) {
@@ -655,28 +701,30 @@
 
 //-----------------------------------------------------------------------------
 /**
-    Resets a AM28Fxxx flash memory chip. MCU must be in background mode.
+Resets a AM28Fxxx flash memory chip. MCU must be in background mode.
 
-    @param      start_addr      flash start address
+@param      start_addr      flash start address
 
-    @return                     succ / fail
+@return                     succ / fail
 */
-bool reset_am28(void) {
+bool reset_am28(void)
+{
     uint32_t start_addr = 0x0;
     return (memwrite_word_write_word(&start_addr, 0xffff, 0xffff) == TERM_OK);
 }
 
 //-----------------------------------------------------------------------------
 /**
-    Erases an AM28Fxxx flash memory chip and verifies the result; MCU must be
-    in background mode.
+Erases an AM28Fxxx flash memory chip and verifies the result; MCU must be
+in background mode.
 
-    @param      start_addr      flash start address
-    @param      end_addr        flash end address
+@param      start_addr      flash start address
+@param      end_addr        flash end address
 
-    @return                     succ / fail
+@return                     succ / fail
 */
-bool erase_am28(const uint32_t* start_addr, const uint32_t* end_addr) {
+bool erase_am28(const uint32_t* start_addr, const uint32_t* end_addr)
+{
 
     // check the addresses
     if (!start_addr || !end_addr) return false;
@@ -687,20 +735,26 @@
     // write zeroes over entire flash space
     uint32_t addr = *start_addr;
 
+    printf("First write 0x00 to all FLASH addresses.\r\n");
+    printf("  0.00 %% complete.\r");
     while (addr < *end_addr) {
         if (!flash_am28(&addr, 0x0000)) return false;
         addr += 2;
-//        // feedback to host computer
-//        pc.putc(TERM_OK);
+        //        // feedback to host computer
+        //        pc.putc(TERM_OK);
         // make the activity LED twinkle
-        ACTIVITYLEDON; 
-
+        ACTIVITYLEDON;
+        if (!(addr % 0x80))
+            printf("%6.2f\r", 100*(float)addr/(float)*end_addr );
     }
+    printf("\n");
 
     // erase flash
     addr = *start_addr;
     uint8_t verify_value;
 
+    printf("Now erasing FLASH and verfiying that all addresses are 0xFF.\r\n");
+    printf("  0.00 %% complete.\r");
     uint16_t pulse_cnt = 0;
     if (memwrite_byte_cmd(NULL) != TERM_OK) {
         reset_am28();
@@ -715,16 +769,19 @@
         while (addr < *end_addr) {
             // issue the verify command
             if (memwrite_read_byte(&addr, 0xa0) != TERM_OK) break;
-//            wait_us(6);
+            //            wait_us(6);
             // check the written value
             if (memread_write_byte(&verify_value, &addr) != TERM_OK) break;
             if (verify_value != 0xff) break;
             // succeeded need to check next address
             addr++;
             // make the activity LED twinkle
-            ACTIVITYLEDON; 
+            ACTIVITYLEDON;
+            if (!(addr % 0x80))
+                printf("%6.2f\r", 100*(float)addr/(float)*end_addr );
         }
     }
+    printf("\n");
     // the erase process ends with a BDM_WRITE + BDM_BYTESIZE command left in the BDM
     // it is safe to use it to put one of the FLASH chips into read mode and thereby
     // leave the BDM ready for the next command
@@ -737,17 +794,18 @@
 
 //-----------------------------------------------------------------------------
 /**
-    Writes a byte to AM28Fxxx flash memory chip and verifies the result
-    A so called 'mask' method checks the FLASH contents and only tries
-    to program bytes that need to be programmed.
-    MCU must be in background mode.
+Writes a byte to AM28Fxxx flash memory chip and verifies the result
+A so called 'mask' method checks the FLASH contents and only tries
+to program bytes that need to be programmed.
+MCU must be in background mode.
 
-    @param      addr        destination address
-    @param      val         value
+@param      addr        destination address
+@param      val         value
 
-    @return                 succ / fail
+@return                 succ / fail
 */
-bool flash_am28(const uint32_t* addr, uint16_t value) {
+bool flash_am28(const uint32_t* addr, uint16_t value)
+{
 
     if (!addr) return false;
 
@@ -785,16 +843,18 @@
 
 //-----------------------------------------------------------------------------
 /**
-    Does the equivalent of do prept5.do in BD32
-    Sets up all of the control registers in the MC68332 so that we can program
-    the FLASH chips
+Does the equivalent of do prept5.do in BD32
+Sets up all of the control registers in the MC68332 so that we can program
+the FLASH chips
 
-    @param                  none
+@param                  none
 
-    @return                 succ / fail
+@return                 succ / fail
 */
 
-uint8_t prep_t5_do(void) {
+//uint8_t prep_t5_do(void) {
+uint8_t prep_t8_do(void)
+{
 
     // reset and freeze the MC68332 chip
     if (restart_chip() != TERM_OK) return TERM_ERR;
@@ -804,48 +864,138 @@
     if (sysreg_write(0x0e, &long_value) != TERM_OK) return TERM_ERR;
     if (sysreg_write(0x0f, &long_value) != TERM_OK) return TERM_ERR;
 
-    // Set MC68332 to 16 MHz (actually 16.78 MHz)
+    // Set MC68332 to 16 MHz (actually 16.78 MHz) (SYNCR)
     long_value = 0x00fffa04;
     if (memwrite_word(&long_value, 0x7f00) != TERM_OK) return TERM_ERR;
 
-    // Disable watchdog and monitors
+    // Disable watchdog and monitors (SYPCR)
     long_value = 0x00fffa21;
     if (memwrite_byte(&long_value, 0x00) != TERM_OK) return TERM_ERR;
 
-    // Chip select pin assignments
+
+    // Chip select pin assignments (CSPAR0)
     long_value = 0x00fffa44;
     if (memwrite_word(&long_value, 0x3fff) != TERM_OK) return TERM_ERR;
 
-    // Boot Chip select read only, one wait state
+    // Boot Chip select read only, one wait state (CSBARBT)
     long_value = 0x00fffa48;
     if (memwrite_word(&long_value, 0x0007) != TERM_OK) return TERM_ERR;
     if (memfill_word(0x6870) != TERM_OK) return TERM_ERR;
 
-    // Chip select 1 and 2 upper lower bytes, zero wait states
+    // Chip select 1 and 2 upper lower bytes, zero wait states (CSBAR1, CSOR1, CSBAR2, CSBAR2)
     long_value = 0x00fffa50;
     if (memwrite_word(&long_value, 0x0007) != TERM_OK) return TERM_ERR;
     if (memfill_word(0x3030) != TERM_OK) return TERM_ERR;
     if (memfill_word(0x0007) != TERM_OK) return TERM_ERR;
     if (memfill_word(0x5030) != TERM_OK) return TERM_ERR;
 
-    // PQS Data - turn on VPPH
+    // PQS Data - turn on VPPH (PORTQS)
     long_value = 0x00fffc14;
     if (memwrite_word(&long_value, 0x0040) != TERM_OK) return TERM_ERR;
 
-    // PQS Data Direction output
+    // PQS Data Direction output (DDRQS)
     long_value = 0x00fffc17;
     if (memwrite_byte(&long_value, 0x40) != TERM_OK) return TERM_ERR;
     // wait for programming voltage to be ready
     wait_ms(10);
 
-//    // Enable internal 2kByte RAM of 68332 at address 0x00100000
-//    long_value = 0x00fffb04;
-//    if (memwrite_word(&long_value, 0x1000) != TERM_OK) return TERM_ERR;
+    //    // Enable internal 2kByte RAM of 68332 at address 0x00100000 (TRAMBAR)
+    //    long_value = 0x00fffb04;
+    //    if (memwrite_word(&long_value, 0x1000) != TERM_OK) return TERM_ERR;
     return TERM_OK;
 }
 
 //-----------------------------------------------------------------------------
 /**
+Does the equivalent of do prept5/7/8.do in BD32
+Sets up all of the control registers in the MC68332/377 so that we can
+program the FLASH chips
+
+@param                  none
+
+@return                 succ / fail
+*/
+
+uint8_t prep_t5_do(void)
+{
+
+    // reset and freeze the MC68332/377 chip
+    if (restart_chip() != TERM_OK) return TERM_ERR;
+
+    // define some variables to store address and data values
+    uint32_t long_value = 0x05;
+    uint16_t verify_value;
+
+    // set the 'fc' registers to allow supervisor mode access
+    if (sysreg_write(0x0e, &long_value) != TERM_OK) return TERM_ERR;
+    if (sysreg_write(0x0f, &long_value) != TERM_OK) return TERM_ERR;
+
+    // Read MC68332/377 Module Control Register (SIMCR/MCR)
+    // and use the value to work out if ECU is a T5/7 or a T8
+    long_value = 0x00fffa00;
+    if (memread_word(&verify_value, &long_value) != TERM_OK) return TERM_ERR;
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//    verify_value = 0x7E4F;
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    // MC68377 MCR = x111111x01001111 binary after a reset
+    if ((verify_value & 0x7E4F) == 0x7E4F) {
+        printf ("I have found a Trionic 8 ECU.\r\n");
+// Set MC68377 to double it's default speed (16 MHz?) (SYNCR)
+        long_value = 0x00fffa08;
+        // First set the MFD part (change 4x to 8x)
+        if (memwrite_word(&long_value, 0x6908) != TERM_OK) return TERM_ERR;
+        // wait for everything to settle (should really check the PLL lock register)
+        wait_ms(100);
+        // Now set the RFD part (change /2 to /1)
+        if (memwrite_word(&long_value, 0x6808) != TERM_OK) return TERM_ERR;
+        // Disable watchdog and monitors (SYPCR)
+        long_value = 0x00fffa50;
+        if (memwrite_word(&long_value, 0x0000) != TERM_OK) return TERM_ERR;
+        return TERM_OK;
+    }
+// MC68332 SIMCR = 0000x00011001111 binary after a reset
+    //if ((verify_value & 0x00CF) == 0x00CF) {
+    else {
+        printf ("I have found a Trionic 5 or 7 ECU.\r\n");
+        // Set MC68332 to 16 MHz (actually 16.78 MHz) (SYNCR)
+        long_value = 0x00fffa04;
+        if (memwrite_word(&long_value, 0x7f00) != TERM_OK) return TERM_ERR;
+        // Disable watchdog and monitors (SYPCR)
+        long_value = 0x00fffa21;
+        if (memwrite_byte(&long_value, 0x00) != TERM_OK) return TERM_ERR;
+        // Chip select pin assignments (CSPAR0)
+        long_value = 0x00fffa44;
+        if (memwrite_word(&long_value, 0x3fff) != TERM_OK) return TERM_ERR;
+        // Boot Chip select read only, one wait state (CSBARBT)
+        long_value = 0x00fffa48;
+        if (memwrite_word(&long_value, 0x0007) != TERM_OK) return TERM_ERR;
+        if (memfill_word(0x6870) != TERM_OK) return TERM_ERR;
+        // Chip select 1 and 2 upper lower bytes, zero wait states (CSBAR1, CSOR1, CSBAR2, CSBAR2)
+        long_value = 0x00fffa50;
+        if (memwrite_word(&long_value, 0x0007) != TERM_OK) return TERM_ERR;
+        if (memfill_word(0x3030) != TERM_OK) return TERM_ERR;
+        if (memfill_word(0x0007) != TERM_OK) return TERM_ERR;
+        if (memfill_word(0x5030) != TERM_OK) return TERM_ERR;
+        // PQS Data - turn on VPPH (PORTQS)
+        long_value = 0x00fffc14;
+        if (memwrite_word(&long_value, 0x0040) != TERM_OK) return TERM_ERR;
+        // PQS Data Direction output (DDRQS)
+        long_value = 0x00fffc17;
+        if (memwrite_byte(&long_value, 0x40) != TERM_OK) return TERM_ERR;
+        // wait for programming voltage to be ready
+        wait_ms(10);
+        // Enable internal 2kByte RAM of 68332 at address 0x00100000 (TRAMBAR)
+        //long_value = 0x00fffb04;
+        //if (memwrite_word(&long_value, 0x1000) != TERM_OK) return TERM_ERR;
+        return TERM_OK;
+    }
+// Unknown MC683xx chip if code reaches this point
+    return TERM_ERR;
+}
+
+
+//-----------------------------------------------------------------------------
+/**
     Works out what type of flash chip is fitted in the ECU by reading
     the manufacturer byte codes.
     It is enough to use the 29Fxxx flash id algorithm because 28Fxxx
@@ -857,22 +1007,31 @@
 
     @return                 succ / fail
 */
-bool get_flash_id(uint8_t* make, uint8_t* type) {
+bool get_flash_id(uint8_t* make, uint8_t* type)
+{
 
     uint32_t  addr = 0x0;
     uint32_t value;
     bool ret;
     // read id bytes algorithm for 29F010/400 FLASH chips
     for (uint8_t i = 0; i < 3; ++i) {
-        if (memwrite_word(&am29_id[i].addr, am29_id[i].val) != TERM_OK) return false;
+        //printf("Getting FLASH chip ID.\r\n");
+        if (memwrite_word(&am29_id[i].addr, am29_id[i].val) != TERM_OK) {
+            printf("There was an error when I tried to request the FLASH chip ID.\r\n");
+            return false;
+        }
     }
-    if (memread_long(&value, &addr) != TERM_OK) return false;
+    if (memread_long(&value, &addr) != TERM_OK) {
+        printf("Error Reading FLASH chip types in get_flash_id\r\n");
+        return false;
+    }
 //    *make = (uint8_t)(value >> 24);
 //    *type = (uint8_t)(value >> 8);
     *make = (uint8_t)(value >> 16);
     *type = (uint8_t)(value);
     printf("FLASH id bytes: %08x, make: %02x, type: %02x\r\n", value, *make, *type);
     switch (*type) {
+        case AMD29BL802C:
         case AMD29F400B:
         case AMD29F400T:
         case AMD29F010:
--- a/bdmtrionic.h	Tue Jun 07 12:23:28 2011 +0000
+++ b/bdmtrionic.h	Wed Sep 11 11:55:51 2013 +0000
@@ -36,6 +36,7 @@
 uint8_t write_flash(const char* flash_type, const uint32_t* start_addr);
 
 uint8_t prep_t5_do(void);
+uint8_t prep_t8_do(void);
 uint8_t dump_trionic(void);
 uint8_t flash_trionic(void);
 
--- a/can232.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/can232.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -25,9 +25,9 @@
 #define CMD_OPEN            'O'             ///< Open the CAN device (do this before an S/s command)
 
 #define CMD_PRESET_SPEED    'S'             ///< Sn: set preconfigured speeds 
-#define CMD_SPEED_0         '0'             ///< 10 kbits
-#define CMD_SPEED_1         '1'             ///< 20 kbits
-#define CMD_SPEED_2         '2'             ///< 50 kbits
+#define CMD_SPEED_0         '0'             ///< 10 kbits (or 47,619 bits with 's')
+#define CMD_SPEED_1         '1'             ///< 20 kbits (or 500 kbits with 's')
+#define CMD_SPEED_2         '2'             ///< 50 kbits (or 615 kbits with 's')
 #define CMD_SPEED_3         '3'             ///< 100 kbits
 #define CMD_SPEED_4         '4'             ///< 125 kbits
 #define CMD_SPEED_5         '5'             ///< 250 kbits
@@ -50,6 +50,12 @@
 
 #define CMD_READ_FLAGS      'F'             ///< Read flags !?!
 
+#define CMD_FILTER          'f'             ///< Filter which CAN message types to allow
+#define CMD_FILTER_NONE     '0'             ///< Allow all CAN message types
+#define CMD_FILTER_T5       '5'             ///< Allow only Trionic 5 CAN message types
+#define CMD_FILTER_T7       '7'             ///< Allow only Trionic 5 CAN message types
+#define CMD_FILTER_T8       '8'             ///< Allow only Trionic 5 CAN message types
+
 #define CMD_ACCEPT_CODE     'M'             ///< Mxxxxxxxx: Acceptance code e.g. 0x00000000 } accept
 #define CMD_ACCEPT_MASK     'm'             ///< mxxxxxxxx: Acceptance mask e.g. 0xffffffff } all
 
@@ -88,21 +94,19 @@
     *cmd_buffer = '\0';
     char ret;
     char rx_char;
-    can_open();
-    can.attach(&show_can_message);
-//    bool (*reset_func)();
     while (true) {
         // read chars from USB
-//        Trionic5ShowCANMessage();
         if (pc.readable()) {
+            // turn Error LED off for next command
+            led4 = 0;
             rx_char = pc.getc();
             switch (rx_char) {
-                // 'ESC' key to go back to mbed Just4Trionic 'home' menu
+                    // 'ESC' key to go back to mbed Just4Trionic 'home' menu
                 case '\e':
                     can_close();
                     can.attach(NULL);
                     return;
-                // end-of-command reached
+                    // end-of-command reached
                 case TERM_OK :
                     // execute command and return flag via USB
                     ret = execute_can_cmd();
@@ -113,7 +117,7 @@
 //                    ret == TERM_OK ? led_on(LED_ACT) : led_on(LED_ERR);
                     ret == TERM_OK ? led3 = 1 : led4 = 1;
                     break;
-                // another command char
+                    // another command char
                 default:
                     // store in buffer if space permits
                     if (StrLen(cmd_buffer) < CMD_BUF_LENGTH - 1) {
@@ -154,48 +158,119 @@
 
         case CMD_SEND_29BIT:
             break;
-            
+
         case CMD_CLOSE:
             can_close();
             return TERM_OK;
         case CMD_OPEN:
             can_open();
             return TERM_OK;
-            
+
         case CMD_PRESET_SPEED:
             CHECK_ARGLENGTH(0);
-            switch (cmd) {
-                    // get firmware version
+//            can.attach(NULL);
+           switch (cmd) {
                 case CMD_SPEED_0:
-                    return (can.frequency(10000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 10000, 0);
+                    break;
                 case CMD_SPEED_1:
-                    return (can.frequency(20000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 20000, 0);
+                    break;
                 case CMD_SPEED_2:
-                    return (can.frequency(50000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 50000, 0);
+                    break;
                 case CMD_SPEED_3:
-                    return (can.frequency(100000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 100000, 0);
+                    break;
                 case CMD_SPEED_4:
-                    return (can.frequency(125000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 125000, 0);
+                    break;
                 case CMD_SPEED_5:
-                    return (can.frequency(250000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 250000, 0);
+                    break;
                 case CMD_SPEED_6:
-                    return (can.frequency(500000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 500000, 0);
+                    break;
                 case CMD_SPEED_7:
-                    return (can.frequency(800000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 800000, 0);
+                    break;
                 case CMD_SPEED_8:
-                    return (can.frequency(1000000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 1000000, 0);
+                    break;
+                default:
+                    return TERM_ERR;
             }
-            break;
-            
+            can.attach(&show_can_message);
+            return TERM_OK;
+
         case CMD_DIRECT_SPEED:
             CHECK_ARGLENGTH(0);
             switch (cmd) {
                 case CMD_SPEED_0:
-                    return (can.frequency(47619)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 47619, 0);
+                    break;
                 case CMD_SPEED_1:
-                    return (can.frequency(500000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 500000, 0);
+                    break;
                 case CMD_SPEED_2:
-                    return (can.frequency(615000)) ? TERM_OK : TERM_ERR;
+                    can_configure(2, 615000, 0);
+                    break;
+                default:
+                    return TERM_ERR;
+            }
+            can.attach(&show_can_message);
+            return TERM_OK;
+
+        case CMD_FILTER:
+            CHECK_ARGLENGTH(0);
+            switch (cmd) {
+                case CMD_FILTER_NONE:
+                    can_use_filters(FALSE);                             // Accept all messages (Acceptance Filters disabled)
+                    return TERM_OK;
+                case CMD_FILTER_T5:
+                    can_reset_filters();
+                    can_add_filter(2, 0x005);         //005h -
+                    can_add_filter(2, 0x006);         //006h -
+                    can_add_filter(2, 0x00C);         //00Ch -
+                    can_add_filter(2, 0x008);         //008h -
+                    return TERM_OK;
+                case CMD_FILTER_T7:
+                    can_reset_filters();
+                    can_add_filter(2, 0x220);         //220h
+                    can_add_filter(2, 0x238);         //238h
+                    can_add_filter(2, 0x240);         //240h
+                    can_add_filter(2, 0x258);         //258h
+                    can_add_filter(2, 0x266);         //266h - Ack
+                    return TERM_OK;
+                    can_add_filter(2, 0x1A0);         //1A0h - Engine information
+                    can_add_filter(2, 0x280);         //280h - Pedals, reverse gear
+                    can_add_filter(2, 0x290);         //290h - Steering wheel and SID buttons
+                    can_add_filter(2, 0x2F0);         //2F0h - Vehicle speed
+                    can_add_filter(2, 0x320);         //320h - Doors, central locking and seat belts
+                    can_add_filter(2, 0x370);         //370h - Mileage
+                    can_add_filter(2, 0x3A0);         //3A0h - Vehicle speed
+                    can_add_filter(2, 0x3B0);         //3B0h - Head lights
+                    can_add_filter(2, 0x3E0);         //3E0h - Automatic Gearbox
+                    can_add_filter(2, 0x410);         //410h - Light dimmer and light sensor
+                    can_add_filter(2, 0x430);         //430h - SID beep request (interesting for Knock indicator?)
+                    can_add_filter(2, 0x460);         //460h - Engine rpm and speed
+                    can_add_filter(2, 0x4A0);         //4A0h - Steering wheel, Vehicle Identification Number
+                    can_add_filter(2, 0x520);         //520h - ACC, inside temperature
+                    can_add_filter(2, 0x530);         //530h - ACC
+                    can_add_filter(2, 0x5C0);         //5C0h - Coolant temperature, air pressure
+                    can_add_filter(2, 0x630);         //630h - Fuel usage
+                    can_add_filter(2, 0x640);         //640h - Mileage
+                    can_add_filter(2, 0x7A0);         //7A0h - Outside temperature
+                    return TERM_OK;
+                case CMD_FILTER_T8:
+                    can_reset_filters();
+                    can_add_filter(2, 0x645);         //645h - CIM
+                    can_add_filter(2, 0x7E0);         //7E0h -
+                    can_add_filter(2, 0x7E8);         //7E8h -
+                    can_add_filter(2, 0x311);         //311h -
+                    can_add_filter(2, 0x5E8);         //5E8h -
+                    //can_add_filter(2, 0x101);         //101h -
+                    return TERM_OK;
             }
             break;
     }
--- a/canutils.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/canutils.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -1,7 +1,7 @@
 /*******************************************************************************
 
 canutils.cpp
-(c) 2010 by Sophie Dexter
+(c) 2010, 2012 by Sophie Dexter
 
 General purpose CAN bus functions for Just4Trionic by Just4pLeisure
 Functions that work with the CAN bus directly. Anything to do with the CAN bus
@@ -22,6 +22,181 @@
 Timer CANTimer;
 
 
+//LPC_CANx->MOD |= 1;          // Disble CAN controller 2
+//LPC_CANx->MOD |= (1 << 1);   // Put into listen only mode
+//LPC_CANx->MOD &= ~(1);       // Re-enable CAN controller
+
+void can_disable(uint8_t chan) {
+    // Put a CAN controller into disabled condition
+    chan == 1 ? LPC_CAN1->MOD |= 1 : LPC_CAN2->MOD |= 1;
+}
+
+void can_enable(uint8_t chan) {
+    // Put a CAN controller in operating mode
+    chan == 1 ? LPC_CAN1->MOD &= ~(1) : LPC_CAN2->MOD &= ~(1);
+}
+
+void can_configure(uint8_t chan, uint32_t baud, bool listen) {
+
+    LPC_CAN_TypeDef *pCANx = (chan == 1) ? LPC_CAN1 : LPC_CAN2;
+
+    uint32_t result;
+    uint8_t TQU, TSEG1=0, TSEG2=0;
+    uint16_t BRP=0;
+
+    switch (chan) {
+        case 1:
+            LPC_SC->PCONP       |=  (1 << 13);          // Enable CAN controller 1
+            LPC_PINCON->PINSEL0 |=  (1 <<  0);          // Pin 9 (port0 bit0) used as Receive
+            LPC_PINCON->PINSEL0 |=  (1 <<  2);          // Pin 10 (port0 bit1) used as Transmit
+            break;
+        case 2:
+        default:
+            LPC_SC->PCONP       |=  (1 << 14);          // Enable CAN controller 2
+            LPC_PINCON->PINSEL0 |=  (1 <<  9);          // Pin 30 (port0 bit4) used as Receive
+            LPC_PINCON->PINSEL0 |=  (1 << 11);          // Pin 29 (port0 bit5) used as Transmit
+            break;
+    }
+    pCANx->MOD = 0x01;                                  // Put into reset mode
+
+    pCANx->IER   = 0;                                   // Disable all interrupts
+    pCANx->GSR   = 0;                                   // Clear status register
+    pCANx->CMR = (1<<1)|(1<<2)|(1<<3);                  // Clear Receive path, abort anything waiting to send and clear errors
+    // CANx->CMR = CAN_CMR_AT | CAN_CMR_RRB | CAN_CMR_CDO;
+    result = pCANx->ICR;                                // Read interrupt register to clear it
+
+    // Calculate a suitable BTR register setting
+    // The Bit Rate Pre-scaler (BRP) can be in the range of 1-1024
+    // Bit Time can be be between 25 and 8 Time Quanta (TQU) according to CANopen
+    // Bit Time = SyncSeg(1) + TSEG1(1-16) + TSEG2(1-8)
+    // SyncSeg is always 1TQU, TSEG2 must be at least 2TQU to be longer than the processing time
+    // Opinions vary on when to take a sample but a point roughly 2/3 of Bit Time seems OK, TSEG1 is roughly 2*TSEG2
+    // Synchronisation Jump width can be 1-4 TQU, a value of 1 seems to be normal
+    // All register values are -1, e.g. TSEG1 can range from 1-16 TQU, so register values are 0-15 to fit into 4 bits
+    result =  CANsuppliedCLK / baud;
+    for (TQU=25; TQU>7; TQU--) {
+        if ((result%TQU)==0) {
+            BRP = (result/TQU) - 1;
+            TSEG2 = (TQU/3) - 1;                        // Subtract 1
+            TSEG1 = TQU - (TQU/3) - 2;                  // Subtract 2 to allow for SyncSeg
+            break;
+        }
+    }
+    pCANx->BTR  = (TSEG2<<20)|(TSEG1<<16)|(0<<14)|BRP;  // Set bit timing, SAM = 0, TSEG2, TSEG1, SJW = 1 (0+1), BRP
+
+    can_reset_filters();                                // Initialise the Acceptance Filters
+    can_use_filters(FALSE);                             // Accept all messages (Acceptance Filters disabled)
+    // Go :-)
+    can_rs_pin = listen;                                // enable/disable CAN driver chip
+    pCANx->MOD = (listen <<1);                          // Enable CAN controller in active/listen mode
+}
+
+
+void can_reset_filters() {
+    // Initialise the Acceptance Filters
+    LPC_CANAF->AFMR = 0x01;                             // Put Acceptance Filter into reset/configuration mode
+    for (uint16_t i = 0; i < 512; i++)
+        LPC_CANAF_RAM->mask[i] = 0x00;                  // Clear the Acceptance Filter memory
+    LPC_CANAF->SFF_sa = 0x00;                           // Clear the Acceptance Filter registers
+    LPC_CANAF->SFF_GRP_sa = 0x00;
+    LPC_CANAF->EFF_sa = 0x00;
+    LPC_CANAF->EFF_GRP_sa = 0x00;
+    LPC_CANAF->ENDofTable = 0x00;
+    LPC_CANAF->AFMR = 0x00;                             // Enable Acceptance Filter all messages should be rejected
+}
+
+void can_use_filters(bool active) {
+    active ? LPC_CANAF->AFMR = 0 : LPC_CANAF->AFMR = 2;
+}
+
+/*--------------------------------------------
+  setup acceptance filter for CAN controller 2
+  original http://www.dragonwake.com/download/LPC1768/Example/CAN/CAN.c
+  simplified for CAN2 interface and std id (11 bit) only
+ *--------------------------------------------*/
+void can_add_filter(uint8_t chan, uint32_t id)  {
+
+    static int CAN_std_cnt = 0;
+    uint32_t buf0, buf1;
+    int cnt1, cnt2, bound1;
+
+    /* Acceptance Filter Memory full */
+    if (((CAN_std_cnt + 1) >> 1) >= 512)
+        return;                                         // error: objects full
+
+    /* Setup Acceptance Filter Configuration
+      Acceptance Filter Mode Register = Off  */
+    LPC_CANAF->AFMR = 0x00000001;
+
+    id &= 0x000007FF;                                   // Mask out 16-bits of ID
+    id |= (chan-1) << 13;                               // Add CAN controller number (1 or 2)
+
+    if (CAN_std_cnt == 0)  {                     /* For entering first  ID */
+        LPC_CANAF_RAM->mask[0] = 0x0000FFFF | (id << 16);
+    }  else if (CAN_std_cnt == 1)  {             /* For entering second ID */
+        if ((LPC_CANAF_RAM->mask[0] >> 16) > id)
+            LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] >> 16) | (id << 16);
+        else
+            LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] & 0xFFFF0000) | id;
+    }  else  {
+        /* Find where to insert new ID */
+        cnt1 = 0;
+        cnt2 = CAN_std_cnt;
+        bound1 = (CAN_std_cnt - 1) >> 1;
+        while (cnt1 <= bound1)  {                  /* Loop through standard existing IDs */
+            if ((LPC_CANAF_RAM->mask[cnt1] >> 16) > id)  {
+                cnt2 = cnt1 * 2;
+                break;
+            }
+            if ((LPC_CANAF_RAM->mask[cnt1] & 0x0000FFFF) > id)  {
+                cnt2 = cnt1 * 2 + 1;
+                break;
+            }
+            cnt1++;                                  /* cnt1 = U32 where to insert new ID */
+        }                                          /* cnt2 = U16 where to insert new ID */
+
+        if (cnt1 > bound1)  {                      /* Adding ID as last entry */
+            if ((CAN_std_cnt & 0x0001) == 0)         /* Even number of IDs exists */
+                LPC_CANAF_RAM->mask[cnt1]  = 0x0000FFFF | (id << 16);
+            else                                     /* Odd  number of IDs exists */
+                LPC_CANAF_RAM->mask[cnt1]  = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | id;
+        }  else  {
+            buf0 = LPC_CANAF_RAM->mask[cnt1];        /* Remember current entry */
+            if ((cnt2 & 0x0001) == 0)                /* Insert new mask to even address */
+                buf1 = (id << 16) | (buf0 >> 16);
+            else                                     /* Insert new mask to odd  address */
+                buf1 = (buf0 & 0xFFFF0000) | id;
+
+            LPC_CANAF_RAM->mask[cnt1] = buf1;        /* Insert mask */
+
+            bound1 = CAN_std_cnt >> 1;
+            /* Move all remaining standard mask entries one place up */
+            while (cnt1 < bound1)  {
+                cnt1++;
+                buf1  = LPC_CANAF_RAM->mask[cnt1];
+                LPC_CANAF_RAM->mask[cnt1] = (buf1 >> 16) | (buf0 << 16);
+                buf0  = buf1;
+            }
+
+            if ((CAN_std_cnt & 0x0001) == 0)         /* Even number of IDs exists */
+                LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | (0x0000FFFF);
+        }
+    }
+    CAN_std_cnt++;
+
+    /* Calculate std ID start address (buf0) and ext ID start address <- none (buf1) */
+    buf0 = ((CAN_std_cnt + 1) >> 1) << 2;
+    /* Setup acceptance filter pointers */
+    LPC_CANAF->SFF_sa     = 0;
+    LPC_CANAF->SFF_GRP_sa = buf0;
+    LPC_CANAF->EFF_sa     = buf0;
+    LPC_CANAF->EFF_GRP_sa = buf0;
+    LPC_CANAF->ENDofTable = buf0;
+
+    LPC_CANAF->AFMR = 0x00000000;                  /* Use acceptance filter */
+} // CAN2_wrFilter
+
+
 void can_open() {
     // activate external can transceiver
     can.reset();
@@ -34,6 +209,16 @@
     can.reset();
 }
 
+void can_monitor() {
+    // Put CAN into silent monitoring mode
+    can.monitor(1);
+}
+
+void can_active() {
+    // Take CAN out of silent monitoring mode
+    can.monitor(0);
+}
+
 uint8_t can_set_speed(uint32_t speed) {
     // 600kbit/s first - basically sets up CAN interface, but to wrong speed - not sure what else it does
 //    can.frequency(600000);
@@ -57,13 +242,110 @@
         printf("w%03x%d", can_MsgRx.id, can_MsgRx.len);
         for (char i=0; i<can_MsgRx.len; i++)
             printf("%02x", can_MsgRx.data[i]);
-        printf(" %c ", can_MsgRx.data[2]);
+        //printf(" %c ", can_MsgRx.data[2]);
         printf("\r\n");
     }
     return;
 }
 
 //
+// show_T5can_message
+//
+// Displays a Trionic 5 CAN message in the RX buffer if there is one.
+//
+// inputs:    none
+// return:    bool TRUE if there was a message, FALSE if no message.
+//
+extern void show_T5can_message() {
+    CANMessage can_MsgRx;
+    if (can.read(can_MsgRx)) {
+        CANRXLEDON;
+        switch (can_MsgRx.id) {
+            case 0x005:
+            case 0x006:
+            case 0x00C:
+            case 0x008:
+                printf("w%03x%d", can_MsgRx.id, can_MsgRx.len);
+                for (char i=0; i<can_MsgRx.len; i++)
+                    printf("%02x", can_MsgRx.data[i]);
+                printf("\r\n");
+                break;
+        }
+    }
+    return;
+}
+//
+// show_T7can_message
+//
+// Displays a Trionic 7 CAN message in the RX buffer if there is one.
+//
+// inputs:    none
+// return:    bool TRUE if there was a message, FALSE if no message.
+//
+extern void show_T7can_message() {
+    CANMessage can_MsgRx;
+    if (can.read(can_MsgRx)) {
+        CANRXLEDON;
+        switch (can_MsgRx.id) {
+            case 0x1A0:         //1A0h - Engine information
+            case 0x280:         //280h - Pedals, reverse gear
+            case 0x290:         //290h - Steering wheel and SID buttons
+            case 0x2F0:         //2F0h - Vehicle speed
+            case 0x320:         //320h - Doors, central locking and seat belts
+            case 0x370:         //370h - Mileage
+            case 0x3A0:         //3A0h - Vehicle speed
+            case 0x3B0:         //3B0h - Head lights
+            case 0x3E0:         //3E0h - Automatic Gearbox
+            case 0x410:         //410h - Light dimmer and light sensor
+            case 0x430:         //430h - SID beep request (interesting for Knock indicator?)
+            case 0x460:         //460h - Engine rpm and speed
+            case 0x4A0:         //4A0h - Steering wheel, Vehicle Identification Number
+            case 0x520:         //520h - ACC, inside temperature
+            case 0x530:         //530h - ACC
+            case 0x5C0:         //5C0h - Coolant temperature, air pressure
+            case 0x630:         //630h - Fuel usage
+            case 0x640:         //640h - Mileage
+            case 0x7A0:         //7A0h - Outside temperature
+                printf("w%03x%d", can_MsgRx.id, can_MsgRx.len);
+                for (char i=0; i<can_MsgRx.len; i++)
+                    printf("%02x", can_MsgRx.data[i]);
+                //printf(" %c ", can_MsgRx.data[2]);
+                printf("\r\n");
+                break;
+        }
+    }
+    return;
+}
+//
+// show_T8can_message
+//
+// Displays a Trionic 8 CAN message in the RX buffer if there is one.
+//
+// inputs:    none
+// return:    bool TRUE if there was a message, FALSE if no message.
+//
+extern void show_T8can_message() {
+    CANMessage can_MsgRx;
+    if (can.read(can_MsgRx)) {
+        CANRXLEDON;
+        switch (can_MsgRx.id) {
+            case 0x645: // CIM
+            case 0x7E0:
+            case 0x7E8:
+            case 0x311:
+            case 0x5E8:
+                //case 0x101:
+                printf("w%03x%d", can_MsgRx.id, can_MsgRx.len);
+                for (char i=0; i<can_MsgRx.len; i++)
+                    printf("%02x", can_MsgRx.data[i]);
+                printf("\r\n");
+                break;
+        }
+    }
+    return;
+}
+
+//
 // silent_can_message
 //
 // Turns on the CAN receive LED if there is a CAN message
@@ -120,16 +402,16 @@
     CANTimer.start();
     while (CANTimer.read_ms() < timeout) {
         if (can.read(CANMsgRx)) {
-/*
-            printf("w%03x8", CANMsgRx.id);
-            for (char i=0; i<len; i++) {
-                printf("%02x", CANMsgRx.data[i]);
-            }
-            printf("\n\r");
-//            */
+            /*
+                        printf("w%03x8", CANMsgRx.id);
+                        for (char i=0; i<len; i++) {
+                            printf("%02x", CANMsgRx.data[i]);
+                        }
+                        printf("\n\r");
+            //            */
             CANRXLEDON;
 //            led2 = 1;
-            if (CANMsgRx.id == id) {
+            if (CANMsgRx.id == id || id ==0) {
                 CANTimer.stop();
 //                if (T5MsgRx.len != len)
 //                    return FALSE;
--- a/canutils.h	Tue Jun 07 12:23:28 2011 +0000
+++ b/canutils.h	Wed Sep 11 11:55:51 2013 +0000
@@ -1,7 +1,7 @@
 /*******************************************************************************
 
 canutils.h - information and definitions needed for the CAN bus
-(c) 2010 by Sophie Dexter
+(c) 2010, 2012 by Sophie Dexter
 
 ********************************************************************************
 
@@ -19,10 +19,24 @@
 
 #include "common.h"
 
+#define CANsuppliedCLK 24000000
+
+extern void can_disable(uint8_t chan);
+extern void can_enable(uint8_t chan);
+extern void can_configure(uint8_t chan, uint32_t baud, bool listen);
+extern void can_add_filter(uint8_t chan, uint32_t id);
+extern void can_reset_filters();
+extern void can_use_filters(bool active);
+
 extern void can_open();
 extern void can_close();
+extern void can_monitor();
+extern void can_active();
 extern uint8_t can_set_speed(uint32_t speed);
 extern void show_can_message();
+extern void show_T5can_message();
+extern void show_T7can_message();
+extern void show_T8can_message();
 extern void silent_can_message();
 
 extern bool can_send_timeout (uint32_t id, char *frame, uint8_t len, uint16_t timeout);
--- a/common.h	Tue Jun 07 12:23:28 2011 +0000
+++ b/common.h	Wed Sep 11 11:55:51 2013 +0000
@@ -18,6 +18,12 @@
 //#include <stdint.h>
 //#include <stdbool.h>
 
+#undef DEBUG
+#ifndef DEBUG
+//#define DEBUG 1
+//#define DEBUG
+#endif
+
 #include "mbed.h"
 
 #include "sizedefs.h"
@@ -69,16 +75,21 @@
 #define AMD29F400B          0xAB
 //#define 29F400T             0x2223
 //#define 29F400B             0x22AB
+#define AMD29BL802C         0x81
+//#define AMD29BL802C         0x2281
+
 
 // TRIONIC ECU Start addresses
 #define T52FLASHSTART       0x60000
 #define T55FLASHSTART       0x40000
 #define T7FLASHSTART        0x00000
+#define T8FLASHSTART        0x00000
 
 // TRIONIC ECU FLASH sizes
 #define T52FLASHSIZE        0x20000
 #define T55FLASHSIZE        0x40000
 #define T7FLASHSIZE         0x80000
+#define T8FLASHSIZE         0x100000
 
 // TRIONIC ECU Last address
 #define TRIONICLASTADDR     0x7FFFF
@@ -90,6 +101,7 @@
 // Initial Stack pointer values used by Trionic (1st 4 bytes of BIN file)
 #define T5POINTER           0xFFFFF7FC
 #define T7POINTER           0xFFFFEFFC
+#define T8POINTER           0x00100C00
 
 // public functions
 void led_on(uint8_t led);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gmlan.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -0,0 +1,458 @@
+#include "gmlan.h"
+
+void GMLANTesterPresentAll()
+{
+    char GMLANMsg[] = GMLANTesterPresentFunctional;
+    can_send_timeout(GMLANALLNODES, GMLANMsg, 3, GMLANPTCT);
+    ACTIVITYLEDON;
+}
+
+void GMLANTesterPresentT8()
+{
+    char GMLANMsg[] = GMLANTesterPresentPhysical;
+    can_send_timeout(T8RequestId, GMLANMsg, 8, GMLANPTCT);
+    can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT);
+    ACTIVITYLEDON;
+}
+
+// All steps needed in preparation for using a bootloader ('Utility File' in GMLAN parlance)
+bool GMLANprogrammingSetupProcess()
+{
+    printf("Starting Diagnostic session\r\n");
+    if (!GMLANinitiateDiagnostic(GMLANdisableAllDTCs)) {
+        printf("Unable to start Diagnostic session\r\n");
+        return FALSE;
+    }
+    printf("Disabling Normal Communincation Messages\r\n");
+    if (!GMLANdisableNormalCommunication()) {
+        printf("Unable to tell T8 to disable normal communication messages\r\n");
+        return FALSE;
+    }
+    printf("Report Programmed State\r\n");
+    if (!GMLANReportProgrammedState()) {
+        printf("Unable to determine ECU programmed state\r\n");
+        return FALSE;
+    }
+    printf("Requesting program mode\r\n");
+    if (!GMLANProgrammingMode(GMLANRequestProgrammingNormal)) {
+        printf("Unable to request programming mode\r\n");
+        return FALSE;
+    }
+    printf("Starting program session\r\n");
+    if (!GMLANProgrammingMode(GMLANEnableProgrammingMode)) {
+        printf("Unable to start program session\r\n");
+        return FALSE;
+    }
+    return TRUE;
+}
+
+
+// All steps needed to transfer and start a bootloader ('Utility File' in GMLAN parlance)
+bool GMLANprogrammingUtilityFileProcess(char UtilityFile[])
+{
+    uint16_t i = 0, j = 0, k = 0;
+    uint32_t StartAddress = 0x102400;
+    uint16_t txpnt = 0;
+    char iFrameNumber = 0x21;
+    char GMLANMsg[8];
+    //char BootLoader[] = T8Bootloader;
+//
+    printf("Waiting for Permission to send bootloader\r\n");
+    if (!GMLANRequestDownload(GMLANRequestDownloadModeNormal)) {
+        printf("Unable to request Bootloader Upload\r\n");
+        return FALSE;
+    }
+    printf("Sending Bootloader\r\n");
+    printf("  0.00 %% complete.\r");
+//
+    for (i=0; i<0x46; i++) {
+        if (!GMLANDataTransferFirstFrame(0xF0, GMLANDOWNLOAD, StartAddress)) {
+            printf("Unable to start Bootloader Upload\r\n");
+            return FALSE;
+        }
+        iFrameNumber = 0x21;
+        for (j=0; j < 0x22; j++) {
+            GMLANMsg[0] = iFrameNumber;
+            for (k=1; k<8; k++)
+                GMLANMsg[k] = UtilityFile[txpnt++];
+#ifdef DEBUG
+            for (k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+            printf("\r\n");
+#endif
+            if (!can_send_timeout(T8RequestId, GMLANMsg, 8, GMLANPTCT)) {
+                printf("Unable to send Bootloader\r\n");
+                return FALSE;
+            }
+            ++iFrameNumber &= 0x2F;
+            wait_ms(1);
+//            wait_us(500);
+        }
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT)) {
+            printf("I didn't receive a block acknowledge message\r\n");
+            return FALSE;
+        }
+        while (GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x36 && GMLANMsg[3] == 0x78) {
+            printf("I'm waiting for a BootLoader Block to upload\r\n");
+            if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED)) {
+                printf("I didn't receive a block acknowledge message after enhanced timeout\r\n");
+                return FALSE;
+            }
+        }
+#ifdef DEBUG
+        for (k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+        printf("\r\n");
+#endif
+        if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x36 ) {
+            GMLANShowReturnCode(GMLANMsg[3]);
+            return FALSE;
+        }
+        if (GMLANMsg[0] != 0x01 && GMLANMsg[1] != 0x76) {
+            printf("EXITING due to an unexpected CAN message\r\n");
+            return FALSE;
+        }
+        GMLANTesterPresentT8();
+        ACTIVITYLEDON;
+        StartAddress += 0xea;
+        printf("%6.2f\r", 100*(float)txpnt/(float)(16384+(70*4)) );
+    }
+    wait_ms(1);
+    if (!GMLANDataTransferFirstFrame(0x0A, GMLANDOWNLOAD, StartAddress)) {
+        printf("Unable to finish Bootloader Upload\r\n");
+        return FALSE;
+    }
+    iFrameNumber = 0x21;
+    GMLANMsg[0] = iFrameNumber;
+    for (k=0; k<7; k++) {
+        GMLANMsg[k+1] = UtilityFile[txpnt++];
+    }
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 8, GMLANPTCT)) {
+        printf("Unable to finish sending Bootloader\r\n");
+        return FALSE;
+    }
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+#ifdef DEBUG
+    for (k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    printf("%6.2f\r\n", (float)100 );
+    printf("Starting the bootloader\r\n");
+    if (!GMLANDataTransfer(0x06, GMLANEXECUTE, 0x00102460)) {
+        printf("Unable to start the Bootloader\r\n");
+        return FALSE;
+    }
+    wait_ms(500);
+    return TRUE;
+}
+
+bool GMLANinitiateDiagnostic(char level)
+{
+    char GMLANMsg[] = GMLANinitiateDiagnosticOperation;
+    GMLANMsg[2] = level;
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 3, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x10 && GMLANMsg[3] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x10 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x01 && GMLANMsg[1] == 0x50) ? TRUE : FALSE;
+}
+
+
+bool GMLANdisableNormalCommunication()
+{
+    char GMLANMsg[] = GMLANdisableCommunication;
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 2, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x28 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x01 && GMLANMsg[1] == 0x68) ? TRUE : FALSE;
+}
+
+
+bool GMLANReportProgrammedState()
+{
+    char GMLANMsg[] = GMLANReportProgrammed;
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 2, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0xA2 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x02 && GMLANMsg[1] == 0xE2) ? TRUE : FALSE;
+}
+
+
+bool GMLANProgrammingMode(char mode)
+{
+    char GMLANMsg[] = GMLANProgramming;
+    GMLANMsg[2] = mode;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 3, GMLANPTCT))
+        return FALSE;
+    if (mode == GMLANEnableProgrammingMode)
+        return TRUE;                            // No response expected when enabling program mode
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0xA5 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x01 && GMLANMsg[1] == 0xE5) ? TRUE : FALSE;
+}
+
+bool GMLANSecurityAccessRequest(char level, uint16_t& seed)
+{
+    char GMLANMsg[] = GMLANSecurityAccessSeed;
+    GMLANMsg[2] = level;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 3, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    seed = GMLANMsg[3] << 8 | GMLANMsg[4];
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x27 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x04 && GMLANMsg[1] == 0x67 && GMLANMsg[2] == level) ? TRUE : FALSE;
+}
+
+bool GMLANSecurityAccessSendKey(char level, uint16_t key)
+{
+    char GMLANMsg[] = GMLANSecurityAccessKey;
+    GMLANMsg[2] = level+1;
+    GMLANMsg[3] = (key >> 8) & 0xFF;
+    GMLANMsg[4] = key & 0xFF;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 5, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x27 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x02 && GMLANMsg[1] == 0x67 && GMLANMsg[2] == level+1) ? TRUE : FALSE;
+}
+
+bool GMLANRequestDownload(char dataFormatIdentifier)
+{
+    char GMLANMsg[] = GMLANRequestDownloadMessage;
+    GMLANMsg[2] = dataFormatIdentifier;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 7, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+//    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+    while (GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x34 && GMLANMsg[3] == 0x78) {
+        printf("Erasing\r\n");
+        GMLANTesterPresentT8();
+        ACTIVITYLEDON;
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+    }
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x34 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x01 && GMLANMsg[1] == 0x74) ? TRUE : FALSE;
+}
+
+
+bool GMLANDataTransfer(char length, char function, uint32_t address)
+{
+    char GMLANMsg[8];
+    GMLANMsg[0] = length;
+    GMLANMsg[1] = 0x36;
+    GMLANMsg[2] = function;
+    GMLANMsg[3] = (char) (address >> 24);
+    GMLANMsg[4] = (char) (address >> 16);
+    GMLANMsg[5] = (char) (address >> 8);
+    GMLANMsg[6] = (char) (address);
+    GMLANMsg[7] = 0xaa;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x36 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x01 && GMLANMsg[1] == 0x76) ? TRUE : FALSE;
+}
+
+
+bool GMLANDataTransferFirstFrame(char length, char function, uint32_t address)
+{
+    char GMLANMsg[8];
+    GMLANMsg[0] = 0x10;
+    GMLANMsg[1] = length;
+    GMLANMsg[2] = 0x36;
+    GMLANMsg[3] = function;
+    GMLANMsg[4] = (char) (address >> 24);
+    GMLANMsg[5] = (char) (address >> 16);
+    GMLANMsg[6] = (char) (address >> 8);
+    GMLANMsg[7] = (char) (address);
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x36 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x30 && GMLANMsg[1] == 0x00 && GMLANMsg[2] == 0x00) ? TRUE : FALSE;
+}
+
+
+bool GMLANDataTransferConsecutiveFrame(char framenumber, char data[7])
+{
+    char GMLANMsg[8];
+    GMLANMsg[0] = framenumber;
+    for (char k = 0; k < 7; k++ )
+        GMLANMsg[k+1] = data[k];
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    return (can_send_timeout(T8RequestId, GMLANMsg, 8, GMLANPTCT)) ? TRUE : FALSE;
+}
+
+bool GMLANReturnToNormalMode()
+{
+    char GMLANMsg[] = GMLANRetrunToNormalModeMessage;
+    if (!can_send_timeout(T8RequestId, GMLANMsg, 2, GMLANPTCT))
+        return FALSE;
+    if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT))
+        return FALSE;
+    while (GMLANMsg[0] == 0x7F && GMLANMsg[2] == 0x78)
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED))
+            return FALSE;
+#ifdef DEBUG
+    for (char k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+    printf("\r\n");
+#endif
+    if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x28 )
+        GMLANShowReturnCode(GMLANMsg[3]);
+    return (GMLANMsg[0] == 0x01 && GMLANMsg[1] == 0x60) ? TRUE : FALSE;
+}
+
+
+void GMLANShowReturnCode(char returnCode)
+{
+    switch (returnCode) {
+        case 0x11 :
+            printf("0x11 - ServiceNotSupported\r\n");
+            break;
+        case 0x12 :
+            printf("0x12 - SubFunctionNotSupported-InvalidFormat\r\n");
+            break;
+        case 0x22 :
+            printf("0x22 - ConditionsNotCorrectOrRequestSequenceError\r\n");
+            break;
+        case 0x31 :
+            printf("0x31 - RequestOutOfRange\r\n");
+            break;
+        case 0x35 :
+            printf("0x35 - InvalidKey\r\n");
+            break;
+        case 0x36 :
+            printf("0x36 - ExceededNumberOfAttempts, ECU is now locked!\r\n");
+            break;
+        case 0x37 :
+            printf("0x37 - RequiredTimeDelayNotExpired\r\n");
+            break;
+        case 0x78 :
+            printf("0x78 - RequestCorrectlyReceived-ResponsePending\r\n");
+            break;
+        case 0x81 :
+            printf("0x81 - SchedulerFull\r\n");
+            break;
+        case 0x83 :
+            printf("0x83 - VoltageOutOfRangeFault\r\n");
+            break;
+        case 0x85 :
+            printf("0x85 - GeneralProgrammingFailure\r\n");
+            break;
+        case 0x99 :
+            printf("0x99 - ReadyForDownload-DTCStored\r\n");
+            break;
+        case 0xE3 :
+            printf("0xE3 - DeviceControlLimitsExceeded\r\n");
+            break;
+        default :
+            printf("Unknown failure Return Code ?!?\r\n");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gmlan.h	Wed Sep 11 11:55:51 2013 +0000
@@ -0,0 +1,88 @@
+
+// gmlan.h - information and definitions needed for communicating with GMLAN
+
+// (C) 2013 Sophie Dexter
+
+#ifndef __GMLAN_H__
+#define __GMLAN_H__
+
+#include "mbed.h"
+
+#include "common.h"
+#include "canutils.h"
+
+#define T8RequestId 0x7E0
+#define T8ResponseId 0x7E8
+#define GMLANALLNODES 0x101
+
+#define GMLANMESSAGETIMEOUT 50             // 50 milliseconds (0.05 of a second) - Seems to be plenty of time to wait for messages on the CAN bus
+#define GMLANPTCT 150                       // 150 milliseconds Timeout between tester request and ECU response or multiple ECU responses
+#define GMLANPTCTENHANCED 5100                       // 5100 milliseconds Enhanced response timing value for tester P2CT timer.
+
+// Tester Present message, must be sent at least once every 5 seconds for some types of activity
+// NOTE however that 2 seconds has been suggested as a good interval
+#define GMLANTesterPresentPhysical    {0x01,0x3E,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
+#define GMLANTesterPresentFunctional  {0xFE,0x01,0x3E,0xaa,0xaa,0xaa,0xaa,0xaa}
+extern void GMLANTesterPresentAll();
+extern void GMLANTesterPresentT8();
+
+// All steps needed in preparation for using a bootloader ('Utility File' in GMLAN parlance)
+bool GMLANprogrammingSetupProcess();
+
+// All steps needed to transfer and start a bootloader ('Utility File' in GMLAN parlance)
+bool GMLANprogrammingUtilityFileProcess(char UtilityFile[]);
+
+
+// Start a Diagnostic Session
+#define GMLANinitiateDiagnosticOperation {0x02,0x10,0x02,0xaa,0xaa,0xaa,0xaa,0xaa}
+#define GMLANdisableAllDTCs 0x02
+bool GMLANinitiateDiagnostic(char level);
+
+
+// Tell T8 To disable normal communication messages
+#define GMLANdisableCommunication {0x01,0x28,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
+bool GMLANdisableNormalCommunication();
+
+
+// Tell T8 To report programmed state
+#define GMLANReportProgrammed    {0x01,0xA2,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
+bool GMLANReportProgrammedState();
+
+// Tell T8 To request or initiate programming
+#define GMLANProgramming    {0x02,0xA5,0x00,0xaa,0xaa,0xaa,0xaa,0xaa}
+#define GMLANRequestProgrammingNormal 0x01  // I or P-Bus speed
+#define GMLANRequestProgrammingFast 0x02    // 83.333 kbps for single-wire CAN
+#define GMLANEnableProgrammingMode 0x03     // Tell T8 To initiate programming
+bool GMLANProgrammingMode(char mode);
+
+// authenticate with T8
+#define GMLANSecurityAccessSeed     {0x02,0x27,0x01,0xaa,0xaa,0xaa,0xaa,0xaa}
+bool GMLANSecurityAccessRequest(char level, uint16_t& seed);
+#define GMLANSecurityAccessKey      {0x04,0x27,0x02,0xCA,0xFE,0xaa,0xaa,0xaa}
+bool GMLANSecurityAccessSendKey(char level, uint16_t key);
+
+// Tell T8 We are Requesting a download session
+#define GMLANRequestDownloadMessage {0x06,0x34,0x00,0x00,0x00,0x00,0x00,0xaa}
+#define GMLANRequestDownloadModeNormal 0x00
+#define GMLANRequestDownloadModeEncrypted 0x01
+#define GMLANRequestDownloadModeCompressed 0x10
+#define GMLANRequestDownloadModeCompressedEncrypted 0x11
+bool GMLANRequestDownload(char dataFormatIdentifier);
+
+// Data blocks are sent using this message type
+#define GMLANDataTransferMessage    {0x10,0xF0,0x36,0x00,0xCA,0xFE,0xBA,0xBE}
+#define GMLANDOWNLOAD 0x00
+#define GMLANEXECUTE  0x80
+bool GMLANDataTransfer(char length, char function, uint32_t address);
+bool GMLANDataTransferFirstFrame(char length, char function, uint32_t address);
+bool GMLANDataTransferConsecutiveFrame(char framenumber, char data[7]);
+
+// Tell T8 ECU to return to normal mode after FLASHing
+#define GMLANRetrunToNormalModeMessage    {0x01,0x20,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
+bool GMLANReturnToNormalMode();
+
+
+// Show a description of GMLAN Return Codes when an error occurs
+void GMLANShowReturnCode(char returnCode);
+
+#endif
\ No newline at end of file
--- a/main.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/main.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -28,9 +28,21 @@
 
 ********************************************************************************
 
+Version 1.4 (07/2013)
+
+Changes since Verion 1.3
+    Progress indication shown as a percentage, slightly slower but more informative
+    T8 BDM Functionality
+
+Changes since Verion 1.3
+    T7 CAN FLASH algorithm changed to only send 4 Bytes at a time
+        Slightly slower but more reliable especially with I-Bus connection
+
+********************************************************************************
+
 Version 1.3 (06/2011) - Basic T7 CAN support and faster T5 CAN bootloader
 
-Changes since Verion 1.1
+Changes since Verion 1.2
     New T7 CAN menu provides some very basic T7 CAN DUMP and FLASH functions
     T5 CAN uses Mybooty version 2 for 1 Mbps CAN speed
         Get MyBooty version 2.x from forum.ecuproject.com
@@ -116,6 +128,7 @@
 #include "can232.h"
 #include "t5can.h"
 #include "t7can.h"
+#include "t8can.h"
 
 // constants
 #define CMD_BUF_LENGTH      32              ///< command buffer size
@@ -127,9 +140,10 @@
 uint8_t execute_just4trionic_cmd();
 void show_just4trionic_help();
 
-int main() {
+int main()
+{
     // fast serial speed
-//    pc.baud(921600);
+    //pc.baud(921600);
     pc.baud(115200);
 
     // the address of the function to be attached (leds_off) and the interval (0.1 seconds)
@@ -144,6 +158,14 @@
     while (pc.readable())
         rx_char = pc.getc();
 
+#ifdef DEBUG
+    printf("*************************\r\n");
+    printf("** RUNNING DEBUG BUILD **\r\n");
+    printf("*************************\r\n");
+#else
+    printf("Running... this is a release build.\r\n");
+#endif
+
     show_just4trionic_help();
 
     // main loop
@@ -194,7 +216,8 @@
 
     @return                    command flag (success / failure)
 */
-uint8_t execute_just4trionic_cmd() {
+uint8_t execute_just4trionic_cmd()
+{
 
 
 //    uint8_t cmd_length = strlen(cmd_buffer);
@@ -215,6 +238,9 @@
         case '7':
             t7_can();
             return TERM_OK;
+        case '8':
+            t8_can();
+            return TERM_OK;
         case 'h':
         case 'H':
             return TERM_OK;
@@ -226,13 +252,15 @@
     return TERM_ERR;
 }
 
-void show_just4trionic_help() {
+void show_just4trionic_help()
+{
     printf("Just4Trionic Command Menu\r\n");
     printf("=========================\r\n");
     printf("b/B - Start BDM interface\r\n");
     printf("o/O - Open Lawicel CAN232 type interface\r\n");
     printf("5   - Start Trionic5 ECU CAN interface\r\n");
     printf("7   - Start Trionic7 ECU CAN interface\r\n");
+    printf("8   - Start Trionic8 ECU CAN interface\r\n");
     printf("\r\n");
     printf("h/H - show this help menu\r\n");
     printf("\r\n");
--- a/mbed.bld	Tue Jun 07 12:23:28 2011 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/9114680c05da
--- a/t7can.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/t7can.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -1,7 +1,7 @@
 /*******************************************************************************
 
 trionic7.cpp - CAN Bus functions for Just4Trionic by Just4pLeisure
-(c) 2011 by Sophie Dexter
+(c) 2011, 2012 by Sophie Dexter
 
 This C++ module provides functions for reading and writing the FLASH chips and
 SRAM in Trionic7 ECUs. (Writing the adaption data back to SRAM not done yet).
@@ -44,23 +44,62 @@
 
 void t7_can() {
     // Start the CAN bus system
-    // Note that at the moment this is only for T5 ECUs at 615 kbits
-    can_open();
-    can_set_speed(500000);
-
+    // Note that at the moment this is only for T7 ECUs at 500 kbits
     t7_can_show_help();
 
-    if (t7_initialise())
-        printf("Trionic 7 Connection OK\r\n");
-    else
-        printf("Trionic 7 Connection Failed\r\n");
+    char data[8];
+    printf("Trying to listen to CAN I-Bus (47619 Bit/s)...\r\n");
+    can_configure(2, 47619, 1);
+    if (can_wait_timeout(T7ANYMSG, data, 8, T7MESSAGETIMEOUT)) {
+        printf("Connected to Saab I-Bus\r\n");
+        printf("Switching to I-Bus active mode\r\n");
+        can_configure(2, 47619, 0);
+    } else {
+        printf("I did not receive any I-Bus messages\r\n");
+        printf("Trying to listen to  CAN P-Bus (500 kBit/s)...\r\n");
+        can_configure(2, 500000, 1);
+        if (can_wait_timeout(T7ANYMSG, data, 8, T7MESSAGETIMEOUT)) {
+            printf("Connected to Saab P-Bus\r\n");
+            printf("Switching to P-Bus active mode\r\n");
+            can_configure(2, 500000, 0);
+        } else {
+            printf("I did not receive any P-Bus messages\r\n");
+            printf("Switching to P-Bus active mode\r\n");
+            can_configure(2, 500000, 0);
+            if (can_wait_timeout(T7ANYMSG, data, 8, T7CONNECTTIMEOUT)) {
+                printf("Connected to Saab P-Bus\r\n");
+                //can_active();
+            } else {
+                printf("FAILED to connect!\r\n");
+                led4 = 1;
+            }
+        }
+    }
+
+//    if (t7_initialise())
+//        printf("Connected to Saab I-Bus\r\n");
+//    else {
+//        printf("Opening CAN channel to Saab P-Bus (500 kBit/s)...\r\n");
+//        can_set_speed(500000);
+//        if (t7_initialise())
+//            printf("Connected to Saab P-Bus\r\n");
+//        else {
+//            printf("FAILED to connect!\r\n");
+//            led4 = 1;
+//        }
+//    }
+
+//    if (t7_initialise())
+//        printf("Trionic 7 Connection OK\r\n");
+//    else
+//        printf("Trionic 7 Connection Failed\r\n");
 //    t7_authenticate();
-    if (t7_authenticate())
-        printf("Security Key Accepted\r\n");
-    else
-        printf("Security Key Failed\r\n");
+//    if (t7_authenticate())
+//        printf("Security Key Accepted\r\n");
+//    else
+//        printf("Security Key Failed\r\n");
 
-    // main loop
+// main loop
     *cmd_buffer = '\0';
     char ret;
     char rx_char;
@@ -116,40 +155,107 @@
 */
 uint8_t execute_t7_cmd() {
 
-
+    char data[8];
 //    uint8_t cmd_length = strlen(cmd_buffer);
     // command groups
     switch (*cmd_buffer) {
 //            CHECK_ARGLENGTH(0);
             // Get the Symbol Table
         case 'i' :
-        case 'I' :
-            return t7_initialise()
-                   ? TERM_OK : TERM_ERR;
+            if (t7_initialise()) {
+                printf("Trionic 7 Connection OK\r\n");
+                return TERM_OK;
+            } else {
+                printf("Trionic 7 Connection Failed\r\n");
+                return TERM_ERR;
+            }
+//            return t7_initialise()
+//                   ? TERM_OK : TERM_ERR;
         case 'a' :
         case 'A' :
-            return t7_authenticate()
-                   ? TERM_OK : TERM_ERR;
+            if (t7_authenticate()) {
+                printf("Security Key Accepted\r\n");
+                return TERM_OK;
+            } else {
+                printf("Security Key Failed\r\n");
+                return TERM_ERR;
+            }
+//            return t7_authenticate()
+//                   ? TERM_OK : TERM_ERR;
 
-            // Erase the FLASH chips
+// Erase the FLASH chips
         case 'e':
         case 'E':
             return t7_erase()
                    ? TERM_OK : TERM_ERR;
-            // DUMP the T5 ECU BIN file stored in the FLASH chips
+// DUMP the T5 ECU BIN file stored in the FLASH chips
+        case 'D':
+            if (!t7_authenticate()) {
+                if (!t7_initialise()) {
+                    printf("Trionic 7 Connection Failed\r\n");
+                    return TERM_ERR;
+                }
+                if (!t7_authenticate()) {
+                    printf("Security Key Failed\r\n");
+                    return TERM_ERR;
+                }
+            }
         case 'd':
-        case 'D':
             return t7_dump()
                    ? TERM_OK : TERM_ERR;
-            // Send a FLASH update file to the T5 ECU
+// Send a FLASH update file to the T5 ECU
+        case 'F':
+            if (!t7_authenticate()) {
+                if (!t7_initialise()) {
+                    printf("Trionic 7 Connection Failed\r\n");
+                    return TERM_ERR;
+                }
+                if (!t7_authenticate()) {
+                    printf("Security Key Failed\r\n");
+                    return TERM_ERR;
+                }
+            }
+            if (!t7_erase()) {
+                printf("Could not Erase FLASH!\r\n");
+                return TERM_ERR;
+            }
         case 'f':
-        case 'F':
             return t7_flash()
                    ? TERM_OK : TERM_ERR;
+// Try to connect to CAN I-BUS
+        case 'I' :
+            printf("Trying to open CAN I-Bus (47619 Bit/s)...\r\n");
+            can_close();
+            //can_monitor();
+            can_set_speed(47619);
+            can_open();
+            if (can_wait_timeout(T7ANYMSG, data, 8, T7CONNECTTIMEOUT)) {
+                printf("Connected to Saab I-Bus\r\n");
+                //can_active();
+                return TERM_OK;
+            } else {
+                printf("I did not receive any I-Bus messages\r\n");
+                printf("FAILED to connect!\r\n");
+                return TERM_ERR;
+            }
+// Try to connect to CAN P-BUS
+        case 'P' :
+            printf("Trying to open CAN P-Bus (500 kBit/s)...\r\n");
+            can_close();
+            //can_monitor();
+            can_set_speed(500000);
+            can_open();
+            if (can_wait_timeout(T7ANYMSG, data, 8, T7CONNECTTIMEOUT)) {
+                printf("Connected to Saab P-Bus\r\n");
+                //can_active();
+                return TERM_OK;
+            } else {
+                printf("I did not receive any P-Bus messages\r\n");
+                printf("FAILED to connect!\r\n");
+                return TERM_ERR;
+            }
 
-        case '3':
-
-            // Print help
+// Print help
         case 'h':
             t7_can_show_help();
             return TERM_OK;
@@ -160,7 +266,7 @@
             t7_can_show_help();
             break;
     }
-    // unknown command
+// unknown command
     return TERM_ERR;
 }
 
@@ -175,8 +281,11 @@
 void t7_can_show_help() {
     printf("Trionic 7 Command Menu\r\n");
     printf("======================\r\n");
-    printf("D - Read and DUMP T7 FLASH BIN file\r\n");
-    printf("F - FLASH the update file to the T7\r\n");
+    printf("D - DUMP the T7 ECU FLASH to a file 'ORIGINAL.BIN'\r\n");
+    printf("F - FLASH the update file 'MODIFIED.HEX' to the T7\r\n");
+    printf("\r\n");
+    printf("I - Try to open CAN I-Bus (47619 Bit/s)\r\n");
+    printf("P - Try to open CAN P-Bus (500 kBit/s)\r\n");
     printf("\r\n");
     printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
     printf("\r\n");
@@ -195,13 +304,18 @@
 void t7_can_show_full_help() {
     printf("Trionic 7 Command Menu\r\n");
     printf("======================\r\n");
-    printf("D - Read and DUMP T7 FLASH BIN file\r\n");
-    printf("F - FLASH the update file to the T7\r\n");
+    printf("D - DUMP the T7 ECU FLASH to a file 'ORIGINAL.BIN'\r\n");
+    printf("F - FLASH the update file 'MODIFIED.HEX' to the T7\r\n");
+    printf("\r\n");
+    printf("I - Try to open CAN I-Bus (47619 Bit/s)\r\n");
+    printf("P - Try to open CAN P-Bus (500 kBit/s)\r\n");
     printf("\r\n");
     printf("\r\n");
     printf("i - Send initialisation message to T7\r\n");
     printf("a - Send Authentication key to T7\r\n");
-    printf("d - Dump T7 Bin file\r\n");
+    printf("d - Dump T7 Bin file 'ORIGINAL.BIN'\r\n");
+    printf("e - Erase the FLASH in the T7 ECU\r\n");
+    printf("f - FLASH the file 'MODIFIED.BIN' to the T7 ECU\r\n");
     printf("\r\n");
     printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
     printf("\r\n");
--- a/t7can.h	Tue Jun 07 12:23:28 2011 +0000
+++ b/t7can.h	Wed Sep 11 11:55:51 2013 +0000
@@ -1,7 +1,7 @@
 /*******************************************************************************
 
-t5can.h - information and definitions needed for doing things with the T5 ECU
-(c) 2010 by Sophie Dexter
+t7can.h - information and definitions needed for doing things with the T7 ECU
+(c) 2010,2011,2012 by Sophie Dexter
 
 ********************************************************************************
 
--- a/t7utils.cpp	Tue Jun 07 12:23:28 2011 +0000
+++ b/t7utils.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -1,7 +1,7 @@
 /*******************************************************************************
 
 t7utils.cpp
-(c) 2011 by Sophie Dexter
+(c) 2011, 2012 by Sophie Dexter
 portions (c) Tomi Liljemark (firstname.surname@gmail.com)
 
 This C++ module provides functions for communicating simple messages to and from
@@ -151,7 +151,7 @@
     timer.start();
 
     received = 0;
-    printf("       %% complete.\r");
+    printf("  0.00 %% complete.\r");
     while (received < T7FLASHSIZE) {
 //        T7_dump_jumpa[7] = ((T7FLASHSIZE - received) < 0xEF) ? (T7FLASHSIZE - received) : 0xEF;
         T7_dump_jumpb[2] = (received >> 16) & 0xFF;
@@ -371,7 +371,7 @@
     return TRUE;
 }
 
-bool t7_flash() {
+bool t7_flash_raw() {
     char T7_flash_jumpa[]   = T7FLAJP1A;
     char T7_flash_jumpb[]   = T7FLAJP1B;
     char T7_flash_end[]     = T7FLA_END;
@@ -447,22 +447,22 @@
 
     uint32_t address = 0;
 
-    printf("       %% complete.\r");
+    printf("  0.00 %% complete.\r");
     while (address < T7FLASHSIZE) {
 
-        data[0] = 0x4A; // 0x40 send, | 0x0A (10) messages to follow
+//        data[0] = 0x4A; // 0x40 send, | 0x0A (10) messages to follow
 //        data[0] = 0x42; // 0x40 send, | 0x02 (2) messages to follow
-//        data[0] = 0x40; // 0x40 send, | 0x00 (0) messages to follow
+        data[0] = 0x40; // 0x40 send, | 0x00 (0) messages to follow
         data[1] = 0xA1;
-        data[2] = 0x41; // length+1 (64 Bytes)
+//        data[2] = 0x41; // length+1 (64 Bytes)
 //        data[2] = 0x11; // length+1 (16 Bytes)
-//        data[2] = 0x05; // length+1 (4 Bytes)
+        data[2] = 0x05; // length+1 (4 Bytes)
         data[3] = 0x36; // Data Transfer
         for ( k = 4; k < 8; k++ )
             //data[k] = *(bin + bin_count++);
             if (!fread(&data[k],1,1,fp)) {
                 fclose(fp);
-                printf("Error reading the BIN file MODIFIED.HEX");
+                printf("Error reading the BIN file MODIFIED.HEX\r\n");
                 return FALSE;
             }
 //      /* DEBUG info...
@@ -475,35 +475,36 @@
             fclose(fp);
             return FALSE;
         }
-//*
-        for (i = 9; i>=0; i--) {
-//        for (i = 1; i>=0; i--) {
-            data[0] = i;
-            // data[1] = 0xA1;
-            for ( k = 2; k < 8; k++ )
-                //data[k] = *(bin + bin_count++);
-                if (!fread(&data[k],1,1,fp)) {
-                    fclose(fp);
-                    printf("Error reading the BIN file MODIFIED.HEX");
-                    return FALSE;
+        /*
+                for (i = 9; i>=0; i--) {
+        //        for (i = 1; i>=0; i--) {
+                    data[0] = i;
+                    // data[1] = 0xA1;
+                    for ( k = 2; k < 8; k++ )
+                        //data[k] = *(bin + bin_count++);
+                        if (!fread(&data[k],1,1,fp)) {
+                            fclose(fp);
+                            printf("Error reading the BIN file MODIFIED.HEX\r\n");
+                            return FALSE;
+                        }
+        //            /* DEBUG info...
+        //            for (k = 0; k < 8; k++ ) printf("0x%02X ", data[k] );
+        //            for (k = 2; k < 8; k++ ) printf("%c ", data[k] );
+        //            printf(" data\r\n");
+
+        //            printf("%6.2f\r", 100*(float)address/(float)T7FLASHSIZE );
+                    wait_ms(1);
+        //            wait_ms(10);   // 31/3/12 this longer wait might be needed for i-bus connections...
+                    if (!can_send_timeout (T7SEC_ID, data, 8, T7MESSAGETIMEOUT)) {
+                        printf("err t7utils line: %d\r\n", __LINE__ );
+                        fclose(fp);
+                        return FALSE;
+                    }
                 }
-//            /* DEBUG info...
-//            for (k = 0; k < 8; k++ ) printf("0x%02X ", data[k] );
-//            for (k = 2; k < 8; k++ ) printf("%c ", data[k] );
-//            printf(" data\r\n");
-
-//            printf("%6.2f\r", 100*(float)address/(float)T7FLASHSIZE );
-            wait_ms(1);
-            if (!can_send_timeout (T7SEC_ID, data, 8, T7MESSAGETIMEOUT)) {
-                printf("err t7utils line: %d\r\n", __LINE__ );
-                fclose(fp);
-                return FALSE;
-            }
-        }
-//*/
-        address += 0x40;
+        */
+//        address += 0x40;
 //        address += 0x10;
-//        address += 0x04;
+        address += 0x04;
         if (!can_wait_timeout(T7SEC_RX, data, 8, T7LONGERTIMEOUT)) {
             printf("err t7utils line: %d\r\n", __LINE__ );
             fclose(fp);
@@ -525,9 +526,115 @@
             printf("%6.2f\r", 100*(float)address/(float)T7FLASHSIZE );
     }
     printf("\n");
-/*
-    // Send "Request Data Transfer Exit" to Trionic
-    if (!can_send_timeout (T7SEC_ID, T7_flash_end, 8, T7MESSAGETIMEOUT)) {
+    /*
+        // Send "Request Data Transfer Exit" to Trionic
+        if (!can_send_timeout (T7SEC_ID, T7_flash_end, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if (!can_wait_timeout(T7SEC_RX, data, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        T7_flash_ack[3] = data[0] & 0xBF;
+        if (!can_send_timeout (T7ACK_ID, T7_flash_ack, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if ( data[3] != 0x77 ) {
+            printf("Cannot Update FLASH, message refused.\r\n");
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        // Send "Request Data Transfer Exit" to Trionic
+        if (!can_send_timeout (T7SEC_ID, T7_flash_exit, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if (!can_wait_timeout(T7SEC_RX, data, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        T7_flash_ack[3] = data[0] & 0xBF;
+        if (!can_send_timeout (T7ACK_ID, T7_flash_ack, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if ( data[3] != 0x71 ) {
+            printf("Cannot Update FLASH, message refused.\r\n");
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+    */
+    timer.stop();
+    printf("SUCCESS! Programming the FLASH took %#.1f seconds.\r\n",timer.read());
+    fclose(fp);
+    return TRUE;
+}
+
+
+bool t7_flash() {
+    char T7_flash_jumpa[]   = T7FLABINA;
+    char T7_flash_jumpb[]   = T7FLABINB;
+    char T7_flash_jumpc[]   = T7FLAHDRA;
+    char T7_flash_jumpd[]   = T7FLAHDRB;
+    char T7_flash_end[]     = T7FLA_END;
+    char T7_flash_exit[]    = T7FLAEXIT;
+    char T7_flash_ack[]     = T7FLA_ACK;
+    char data[8];
+    int i, k;
+
+    // fopen modified.hex here?
+    // need lots of fcloses though
+    printf("Checking the FLASH BIN file...\r\n");
+    FILE *fp = fopen("/local/modified.hex", "r");    // Open "modified.hex" on the local file system for reading
+    if (!fp) {
+        printf("Error: I could not find the BIN file MODIFIED.HEX\r\n");;
+        return TERM_ERR;
+    }
+    // obtain file size - it should match the size of the FLASH chips:
+    fseek (fp , 0 , SEEK_END);
+    uint32_t file_size = ftell (fp);
+    rewind (fp);
+
+    // read the initial stack pointer value in the BIN file - it should match the value expected for the type of ECU
+    uint8_t stack_byte = 0;
+    uint32_t stack_long = 0;
+    if (!fread(&stack_byte,1,1,fp)) return TERM_ERR;
+    stack_long |= (stack_byte << 24);
+    if (!fread(&stack_byte,1,1,fp)) return TERM_ERR;
+    stack_long |= (stack_byte << 16);
+    if (!fread(&stack_byte,1,1,fp)) return TERM_ERR;
+    stack_long |= (stack_byte << 8);
+    if (!fread(&stack_byte,1,1,fp)) return TERM_ERR;
+    stack_long |= stack_byte;
+    rewind (fp);
+
+    if (file_size != T7FLASHSIZE || stack_long != T7POINTER) {
+        fclose(fp);
+        printf("The BIN file does not appear to be for a T7 ECU :-(\r\n");
+        printf("BIN file size: %#010x, FLASH chip size: %#010x, Pointer: %#010x.\r\n", file_size, T7FLASHSIZE, stack_long);
+        return TERM_ERR;
+    }
+
+    timer.reset();
+    timer.start();
+
+    // Send "Request Download - tool to module" to Trionic
+    if (!can_send_timeout (T7SEC_ID, T7_flash_jumpa, 8, T7MESSAGETIMEOUT)) {
+        printf("err t7utils line: %d\r\n", __LINE__ );
+        fclose(fp);
+        return FALSE;
+    }
+    if (!can_send_timeout (T7SEC_ID, T7_flash_jumpb, 8, T7MESSAGETIMEOUT)) {
         printf("err t7utils line: %d\r\n", __LINE__ );
         fclose(fp);
         return FALSE;
@@ -543,14 +650,62 @@
         fclose(fp);
         return FALSE;
     }
-    if ( data[3] != 0x77 ) {
+    if ( data[3] != 0x74 ) {
         printf("Cannot Update FLASH, message refused.\r\n");
         printf("err t7utils line: %d\r\n", __LINE__ );
         fclose(fp);
         return FALSE;
     }
-    // Send "Request Data Transfer Exit" to Trionic
-    if (!can_send_timeout (T7SEC_ID, T7_flash_exit, 8, T7MESSAGETIMEOUT)) {
+
+    uint32_t address = 0;
+
+    printf("  0.00 %% complete.\r");
+// FLASH main Binary image up to address 0x7B000
+    while (address < 0x70000) {
+        data[0] = 0x40; // 0x40 send, | 0x00 (0) messages to follow
+        data[1] = 0xA1;
+        data[2] = 0x05; // length+1 (4 Bytes)
+        data[3] = 0x36; // Data Transfer
+        for ( k = 4; k < 8; k++ )
+            if (!fread(&data[k],1,1,fp)) {
+                fclose(fp);
+                printf("Error reading the BIN file MODIFIED.HEX\r\n");
+                return FALSE;
+            }
+        if (!can_send_timeout (T7SEC_ID, data, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        address += 0x04;
+        if (!can_wait_timeout(T7SEC_RX, data, 8, T7LONGERTIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        // Send acknowledgement
+        T7_flash_ack[3] = data[0] & 0xBF;
+        if (!can_send_timeout (T7ACK_ID, T7_flash_ack, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if ( data[3] != 0x76 ) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if (!(address % 0x80))
+            printf("%6.2f\r", 100*(float)address/(float)T7FLASHSIZE );
+    }
+
+    // Send "Request Download - tool to module" to Trionic
+    if (!can_send_timeout (T7SEC_ID, T7_flash_jumpc, 8, T7MESSAGETIMEOUT)) {
+        printf("err t7utils line: %d\r\n", __LINE__ );
+        fclose(fp);
+        return FALSE;
+    }
+    if (!can_send_timeout (T7SEC_ID, T7_flash_jumpd, 8, T7MESSAGETIMEOUT)) {
         printf("err t7utils line: %d\r\n", __LINE__ );
         fclose(fp);
         return FALSE;
@@ -566,12 +721,106 @@
         fclose(fp);
         return FALSE;
     }
-    if ( data[3] != 0x71 ) {
+    if ( data[3] != 0x74 ) {
         printf("Cannot Update FLASH, message refused.\r\n");
         printf("err t7utils line: %d\r\n", __LINE__ );
         fclose(fp);
         return FALSE;
     }
+
+    address = 0x7FF00;
+    fseek (fp , 0x7FF00 , SEEK_SET);
+
+// FLASH BIN file Header
+    while (address < T7FLASHSIZE) {
+        data[0] = 0x40; // 0x40 send, | 0x00 (0) messages to follow
+        data[1] = 0xA1;
+        data[2] = 0x05; // length+1 (4 Bytes)
+        data[3] = 0x36; // Data Transfer
+        for ( k = 4; k < 8; k++ )
+            if (!fread(&data[k],1,1,fp)) {
+                fclose(fp);
+                printf("Error reading the BIN file MODIFIED.HEX\r\n");
+                return FALSE;
+            }
+        if (!can_send_timeout (T7SEC_ID, data, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        address += 0x04;
+        if (!can_wait_timeout(T7SEC_RX, data, 8, T7LONGERTIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        // Send acknowledgement
+        T7_flash_ack[3] = data[0] & 0xBF;
+        if (!can_send_timeout (T7ACK_ID, T7_flash_ack, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if ( data[3] != 0x76 ) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if (!(address % 0x80))
+            printf("%6.2f\r", 100*(float)address/(float)T7FLASHSIZE );
+    }
+
+
+    printf("\n");
+    printf("Restarting T7 ECU");
+/*
+        // Send "Request Data Transfer Exit" to Trionic
+        if (!can_send_timeout (T7SEC_ID, T7_flash_end, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if (!can_wait_timeout(T7SEC_RX, data, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        T7_flash_ack[3] = data[0] & 0xBF;
+        if (!can_send_timeout (T7ACK_ID, T7_flash_ack, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if ( data[3] != 0x77 ) {
+            printf("Cannot Update FLASH, message refused.\r\n");
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+//
+        // Send "Request Data Transfer Exit" to Trionic
+        if (!can_send_timeout (T7SEC_ID, T7_flash_exit, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if (!can_wait_timeout(T7SEC_RX, data, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        T7_flash_ack[3] = data[0] & 0xBF;
+        if (!can_send_timeout (T7ACK_ID, T7_flash_ack, 8, T7MESSAGETIMEOUT)) {
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
+        if ( data[3] != 0x71 ) {
+            printf("Cannot Update FLASH, message refused.\r\n");
+            printf("err t7utils line: %d\r\n", __LINE__ );
+            fclose(fp);
+            return FALSE;
+        }
 */
     timer.stop();
     printf("SUCCESS! Programming the FLASH took %#.1f seconds.\r\n",timer.read());
--- a/t7utils.h	Tue Jun 07 12:23:28 2011 +0000
+++ b/t7utils.h	Wed Sep 11 11:55:51 2013 +0000
@@ -1,7 +1,7 @@
 
-// t5utils.h - information and definitions needed for communicating with the T5 ECU
+// t7utils.h - information and definitions needed for communicating with the T7 ECU
 
-// (C) 2011, Sophie Dexter
+// (C) 2011, 2012 Sophie Dexter
 
 #ifndef __T7UTILS_H__
 #define __T7UTILS_H__
@@ -16,6 +16,8 @@
 #define T7SEC_ID 0x240
 #define T7SEC_RX 0x258
 #define T7ACK_ID 0x266
+#define T7ANYMSG 0x0
+
 
 // initialise T7
 
@@ -42,6 +44,10 @@
 
 #define T7FLAJP1A   {0x41,0xA1,0x08,0x34,0x00,0x00,0x00,0x00}    // Start  = 0x000000
 #define T7FLAJP1B   {0x00,0xA1,0x08,0x00,0x00,0x00,0x00,0x00}    // Length = 0x080000
+#define T7FLABINA   {0x41,0xA1,0x08,0x34,0x00,0x00,0x00,0x00}    // Start  = 0x000000
+#define T7FLABINB   {0x00,0xA1,0x07,0x00,0x00,0x00,0x00,0x00}    // Length = 0x070000
+#define T7FLAHDRA   {0x41,0xA1,0x08,0x34,0x07,0xFF,0x00,0x00}    // Start  = 0x07FF00
+#define T7FLAHDRB   {0x00,0xA1,0x00,0x01,0x00,0x00,0x00,0x00}    // Length = 0x000100
 #define T7FLA_END   {0x40,0xA1,0x01,0x37,0x00,0x00,0x00,0x00}
 #define T7FLAEXIT   {0x40,0xA1,0x02,0x31,0x54,0x00,0x00,0x00}
 #define T7FLA_ACK   {0x40,0xA1,0x3F,0x00,0x00,0x00,0x00,0x00}        // 266h
@@ -50,12 +56,14 @@
 #define T7MESSAGETIMEOUT 50             // 50 milliseconds (0.05 of a second) - Seems to be plenty of time to wait for messages on the CAN bus
 #define T7LONGERTIMEOUT 500             // 500 milliseconds (0.5 of a second) - Some messages seem to need longer
 #define T7CHECKSUMTIMEOUT 2000          // 2 seconds (2,000 milliseconds) - Usually takes less than a second so allowing 2 is plenty
+#define T7CONNECTTIMEOUT 5000           // 5 seconds (5,000 milliseconds) - Usually takes 3 seconds so allowing 5 is plenty
 #define T7ERASETIMEOUT 40000            // 40 seconds (60,000 milliseconds) - Usually takes less than 20 seconds so allowing 40 is plenty
 
 extern bool t7_initialise();
 extern bool t7_authenticate();
 extern bool t7_dump();
 extern bool t7_flash();
+extern bool t7_flash_raw();
 extern bool t7_erase();
 /* global constants */
 //#define init_msg        { 0x3F, 0x81, 0x00, 0x11, 0x02, 0x40, 0x00, 0x00 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t8bootloaders.h	Wed Sep 11 11:55:51 2013 +0000
@@ -0,0 +1,4771 @@
+#ifndef __T8BOOTLOADERS_H__
+#define __T8BOOTLOADERS_H__
+
+
+#define T8BootloaderProg {\
+    0x77,0xD1,0x77,0x7D,0x1B,0x09,0x77,\
+    0xD1,0x77,0x7D,0x1B,0x7D,0x77,0x1D,\
+    0x39,0x1C,0x05,0x00,0x39,0x78,0x0B,\
+    0x61,0x05,0x80,0x39,0x78,0x0B,0x7D,\
+    0x05,0x80,0x39,0x78,0x1B,0x6D,0x05,\
+    0x00,0x39,0x78,0x0C,0x99,0x37,0x38,\
+    0x2A,0xA8,0x77,0x7D,0x3C,0xCC,0x7B,\
+    0x51,0x77,0x7D,0x3C,0xC1,0x2A,0xA8,\
+    0x77,0x7D,0x3C,0xC0,0x7B,0x51,0x77,\
+    0x7D,0x23,0x39,0x7B,0x51,0x77,0x7D,\
+    0x2C,0xC4,0x7B,0x51,0x77,0x7D,0x2C,\
+    0xC7,0x7B,0x51,0x77,0x7D,0x23,0x3D,\
+    0x7B,0x11,0x77,0x7D,0x23,0x3B,0x77,\
+    0x1D,0x17,0x93,0x09,0x4C,0x77,0x3E,\
+    0x88,0xBD,0x0F,0xDE,0x36,0x54,0x5D,\
+    0x11,0x47,0x29,0x5D,0x6E,0x35,0x38,\
+    0x7D,0x05,0x32,0xD0,0x39,0xD4,0x47,\
+    0x29,0x65,0x58,0x39,0xD4,0x47,0x29,\
+    0x65,0x2C,0x49,0x78,0x15,0x7E,0x03,\
+    0xEF,0xC9,0x28,0x22,0xD3,0x58,0x68,\
+    0x88,0xE9,0x09,0x80,0x39,0x78,0x43,\
+    0xBD,0x09,0x80,0x39,0x78,0x2E,0x3D,\
+    0x3D,0x38,0x2A,0xAD,0x77,0x7D,0x2C,\
+    0xC4,0x2A,0xAD,0x77,0x7D,0x2C,0xC7,\
+    0x11,0x54,0x77,0x7D,0x3C,0xC1,0x1D,\
+    0x14,0x77,0x7D,0x3C,0xCD,0x73,0x7A,\
+    0x10,0x6D,0x47,0xD9,0x73,0x51,0x77,\
+    0x7D,0x3C,0xCC,0x5F,0x68,0x77,0xBB,\
+    0x09,0x80,0x39,0x78,0x2B,0x5D,0x09,\
+    0x80,0x39,0x78,0x2B,0x29,0x57,0x00,\
+    0x39,0x78,0x6F,0x6C,0xF7,0x05,0x39,\
+    0x0D,0x10,0x63,0xF7,0x05,0x39,0x0E,\
+    0x10,0x7F,0xF7,0x05,0x39,0x0F,0x10,\
+    0x7B,0x27,0x27,0x00,0x36,0x43,0x36,\
+    0x2A,0x94,0x77,0x6C,0x47,0x29,0x45,\
+    0x76,0x17,0x77,0x54,0xC5,0x39,0x6A,\
+    0x77,0x7D,0x3B,0x27,0x59,0x78,0x64,\
+    0x91,0x47,0x3A,0x39,0x78,0x0B,0x73,\
+    0x27,0x3F,0x7B,0x51,0x77,0x7D,0x3B,\
+    0x27,0x77,0xD1,0x77,0x7D,0x74,0x79,\
+    0x16,0x54,0x77,0x7D,0x3B,0x24,0x16,\
+    0x54,0x77,0x7D,0x3B,0x21,0x49,0x6D,\
+    0x58,0x6D,0x37,0x35,0x16,0x68,0x39,\
+    0xD4,0x47,0x29,0x17,0x2C,0x4D,0xD1,\
+    0x47,0x3D,0x76,0x87,0x77,0x7D,0x0D,\
+    0x00,0x39,0x78,0x13,0x6D,0x21,0x6B,\
+    0x45,0x61,0x51,0x11,0x47,0x29,0x5D,\
+    0x6A,0x5F,0x11,0x47,0x29,0x5D,0x68,\
+    0x07,0x6D,0x77,0x2C,0x16,0x68,0x47,\
+    0x7E,0x0F,0xF9,0x16,0x68,0x39,0xD4,\
+    0x47,0x29,0x73,0x00,0x5D,0x6D,0x5F,\
+    0xBC,0x07,0x7D,0x25,0x2A,0x7D,0xBE,\
+    0x69,0xE7,0xC9,0x2B,0x23,0x3D,0x73,\
+    0x6D,0x10,0xB7,0x0D,0x00,0x39,0x78,\
+    0x13,0x6D,0x21,0x2F,0x49,0x6F,0x58,\
+    0x6D,0x37,0x38,0x16,0x68,0x39,0xD4,\
+    0x47,0x29,0x73,0x00,0x64,0xAD,0x47,\
+    0x29,0x5D,0x68,0x27,0xE2,0x54,0xC5,\
+    0x39,0x69,0x77,0x7D,0x3C,0xCC,0x19,\
+    0x2C,0x3D,0x7D,0x20,0x7D,0x73,0x51,\
+    0x77,0x7D,0x3C,0xC0,0x5F,0x54,0x3D,\
+    0x54,0x47,0x29,0x5D,0x68,0x11,0x59,\
+    0x68,0x00,0x39,0x78,0x0C,0x91,0x68,\
+    0x00,0x39,0x78,0x0B,0x69,0x68,0x00,\
+    0x39,0x78,0x0B,0x65,0x77,0x00,0x39,\
+    0x78,0x13,0x6F,0x0F,0xF9,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x73,0xC0,0x64,\
+    0xAD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x5D,0x68,0x64,0x91,0x47,0x38,0x39,\
+    0x78,0x0C,0x94,0x08,0xD6,0x39,0x78,\
+    0x39,0xD4,0x47,0x29,0x65,0x58,0x39,\
+    0xD4,0x47,0x29,0x65,0x2C,0x3D,0x54,\
+    0x47,0x29,0x42,0x91,0x10,0x6D,0x47,\
+    0x8B,0x73,0x51,0x77,0x7D,0x3B,0x35,\
+    0x5E,0x68,0x77,0xC5,0x0D,0x00,0x39,\
+    0x78,0x13,0x69,0x21,0x39,0x39,0xF6,\
+    0x39,0xD4,0x47,0x29,0x0A,0x28,0x39,\
+    0xD4,0x47,0x29,0x16,0x88,0x64,0x91,\
+    0x47,0x38,0x39,0x78,0x13,0x69,0x09,\
+    0x80,0x39,0x78,0x46,0x59,0x0F,0x57,\
+    0xC6,0x93,0x3F,0x03,0xB8,0xC5,0x49,\
+    0x6B,0x58,0x6D,0x37,0x27,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x17,0x2C,0x38,\
+    0x82,0x47,0x29,0x73,0x46,0x88,0x96,\
+    0x20,0x5B,0x71,0x06,0x88,0x8A,0x0F,\
+    0x57,0xC6,0x80,0x07,0x7F,0x68,0x39,\
+    0x49,0x65,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x59,0x29,0x08,0xD6,0x39,0x78,\
+    0x3D,0x43,0xB8,0xDE,0x5E,0x2A,0x0B,\
+    0x6D,0x39,0x39,0x43,0x78,0x05,0x6D,\
+    0x75,0x3E,0x29,0x5E,0x6F,0x87,0xFA,\
+    0x39,0x24,0xE8,0x6F,0xB9,0x9B,0x05,\
+    0x39,0x79,0x25,0x2A,0xF9,0x7C,0x5C,\
+    0x80,0x4D,0xEA,0x68,0x05,0x39,0x6B,\
+    0x08,0x9D,0x0F,0x57,0xC6,0xBC,0x07,\
+    0x7D,0x68,0x39,0x49,0x69,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x3D,0xC5,0x54,\
+    0xF9,0x39,0x78,0x13,0x6D,0x08,0xD6,\
+    0x39,0x78,0x3D,0x54,0x47,0x29,0x45,\
+    0x64,0x10,0x6D,0xB9,0x3D,0x19,0x51,\
+    0x77,0x7D,0x3B,0x29,0x89,0xD1,0x77,\
+    0x7D,0x2B,0x39,0x00,0x36,0x43,0x36,\
+    0x5D,0x68,0x8A,0x85,0x0D,0x00,0x39,\
+    0x78,0x13,0x69,0x20,0x39,0xC4,0xB6,\
+    0x3D,0x54,0x47,0x29,0x5D,0x68,0x11,\
+    0x6D,0xBA,0xED,0x77,0xD1,0x77,0x7D,\
+    0x75,0x59,0x77,0xD1,0x77,0x7D,0x1C,\
+    0xE9,0x59,0x68,0x8A,0xA9,0x6F,0x26,\
+    0x13,0x77,0x5B,0x72,0x69,0x26,0x1D,\
+    0x37,0x51,0x32,0x6F,0x66,0x13,0x37,\
+    0x39,0x33,0x09,0x4C,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x71,0x8F,0x74,0x71,\
+    0x6D,0x56,0x39,0x70,0x51,0x02,0x47,\
+    0x25,0x11,0x07,0x77,0x4D,0x65,0x56,\
+    0x39,0x4C,0x3D,0x38,0x21,0x3D,0x49,\
+    0x69,0x17,0x25,0x65,0x35,0x17,0x79,\
+    0x0B,0x6C,0x8B,0xBE,0x73,0xEE,0x10,\
+    0x67,0x14,0xBE,0x1B,0xEF,0x57,0x2A,\
+    0x5F,0xA9,0x6B,0x3D,0x59,0x6B,0xFB,\
+    0x6C,0x5D,0x78,0x5F,0x2C,0x9E,0xFF,\
+    0x21,0xB3,0x25,0xEA,0x37,0x39,0x09,\
+    0x7D,0xC9,0xED,0x22,0xCD,0x05,0x7D,\
+    0x7F,0x6B,0x47,0x39,0x5E,0x7A,0x07,\
+    0x6D,0x77,0x3F,0x15,0x68,0x57,0x2C,\
+    0x96,0xFF,0x1B,0x39,0xA4,0xAB,0x57,\
+    0xA8,0x6B,0x3D,0x07,0x6D,0x6B,0x26,\
+    0x17,0x77,0x51,0x32,0x6F,0x66,0x13,\
+    0x37,0x39,0x18,0x4B,0x16,0x39,0x96,\
+    0x77,0x6A,0x21,0x25,0x0A,0x94,0x77,\
+    0x6F,0x47,0x29,0x5D,0x7C,0x07,0x6D,\
+    0x57,0x16,0x39,0x63,0x44,0xAD,0x47,\
+    0x29,0x5D,0x60,0x7F,0x94,0x47,0x3C,\
+    0x39,0x78,0x13,0x61,0x09,0x4C,0x77,\
+    0x19,0x44,0x82,0x47,0x3F,0x39,0x78,\
+    0x13,0x65,0x4F,0xC0,0x39,0x6D,0x77,\
+    0x7D,0x23,0x35,0x00,0x36,0x43,0x36,\
+    0x7B,0x11,0x77,0x7D,0x23,0x2D,0x77,\
+    0x1D,0x57,0x11,0x47,0x29,0x5D,0x64,\
+    0x35,0x7D,0x05,0x11,0x39,0x69,0x35,\
+    0x45,0x47,0x3B,0x31,0xB8,0x77,0x69,\
+    0x4F,0xE9,0x39,0x68,0x7F,0xBD,0x47,\
+    0x3F,0x7B,0x11,0x77,0x7D,0x23,0x29,\
+    0x7B,0x51,0x77,0x7D,0x23,0x36,0x19,\
+    0x14,0x77,0x7D,0x23,0x21,0x29,0xD4,\
+    0x77,0x54,0x56,0x45,0x39,0x00,0x77,\
+    0x6C,0x56,0x45,0x39,0x1F,0x77,0x6F,\
+    0x56,0x45,0x39,0x05,0x77,0x6E,0x56,\
+    0x45,0x39,0x2F,0x77,0x69,0x05,0x00,\
+    0x39,0x78,0x13,0x70,0x09,0x4C,0x77,\
+    0x19,0x58,0x6A,0x79,0x16,0x39,0x62,\
+    0x7F,0x54,0x47,0x3B,0x39,0x78,0x13,\
+    0x67,0x21,0x39,0x39,0xBE,0x47,0x6A,\
+    0x05,0x39,0x89,0x14,0x75,0x6D,0x20,\
+    0x33,0x89,0x14,0x74,0x6D,0x20,0x75,\
+    0x59,0x68,0x77,0xAF,0x37,0x39,0x29,\
+    0x6F,0x3D,0x2D,0x20,0x39,0x39,0xD0,\
+    0x57,0x11,0x47,0x29,0x5D,0x40,0x66,\
+    0x3D,0x47,0x38,0x29,0xD4,0x77,0x12,\
+    0x56,0x79,0x39,0x6A,0x58,0x65,0x37,\
+    0x3A,0x16,0x68,0x39,0xD4,0x47,0x29,\
+    0x07,0xC0,0x05,0x6D,0x55,0x39,0x19,\
+    0x69,0x92,0xE5,0x87,0x05,0x39,0x6C,\
+    0x75,0x54,0x47,0xC2,0x39,0x78,0x13,\
+    0x67,0xC6,0x00,0x39,0x78,0x13,0x67,\
+    0x17,0xB6,0x59,0x68,0x77,0x17,0x37,\
+    0x39,0x29,0x6F,0x3D,0x2D,0x20,0x07,\
+    0x19,0x14,0x77,0x7D,0x23,0x11,0x39,\
+    0x78,0x77,0x2D,0x56,0x79,0x39,0x69,\
+    0x58,0x65,0x37,0x39,0x29,0x51,0x77,\
+    0x7D,0x23,0x30,0x00,0x36,0x43,0x36,\
+    0x16,0x68,0x39,0xD4,0x47,0x29,0x07,\
+    0xC0,0x05,0x6D,0x55,0x39,0x19,0x69,\
+    0x92,0xE5,0x87,0x05,0x39,0x6C,0x75,\
+    0x54,0x47,0xC2,0x39,0x78,0x13,0x67,\
+    0xC6,0x00,0x39,0x78,0x13,0x67,0x17,\
+    0xB6,0x59,0x5A,0x57,0x11,0x47,0x29,\
+    0x5D,0x40,0x77,0x7D,0x47,0x79,0x16,\
+    0x60,0x07,0x6C,0x68,0x39,0x77,0xD1,\
+    0x77,0x7D,0x79,0x91,0x4B,0x68,0x65,\
+    0x6D,0x67,0x38,0xDC,0xE0,0xB7,0x51,\
+    0x47,0x3D,0x3B,0x51,0x77,0x96,0x47,\
+    0x29,0x5D,0x62,0xF6,0x54,0x47,0x29,\
+    0x5D,0x62,0x27,0xE2,0x69,0x26,0x77,\
+    0x1D,0x39,0x1C,0x65,0x45,0x39,0x78,\
+    0x13,0x61,0x4F,0x10,0x39,0x6D,0x77,\
+    0x6C,0x20,0x39,0x38,0x2A,0x67,0x54,\
+    0x47,0x29,0x5D,0x67,0xC7,0x51,0x47,\
+    0x0D,0x5E,0x64,0xC7,0x51,0x47,0x0F,\
+    0x5E,0x68,0x77,0xFB,0x27,0x39,0x38,\
+    0x42,0x3D,0x54,0x47,0x29,0x5D,0x68,\
+    0x10,0x49,0x4F,0x80,0x39,0x6A,0x77,\
+    0x7D,0x23,0x33,0x2A,0x94,0x77,0x59,\
+    0x47,0x29,0x5D,0x40,0x7F,0xC4,0x47,\
+    0x3C,0x39,0x69,0x3F,0x15,0x45,0xBC,\
+    0x58,0x68,0x89,0xA5,0x1F,0xB6,0x59,\
+    0x68,0x77,0x93,0x0D,0x00,0x39,0x78,\
+    0x0C,0x98,0x20,0x0B,0x73,0x11,0x77,\
+    0x7D,0x23,0x2B,0x5E,0x42,0x7F,0xD4,\
+    0x47,0x3B,0x39,0x78,0x13,0x67,0x54,\
+    0xC5,0x39,0x5C,0x77,0x7D,0x23,0x11,\
+    0x31,0xC1,0x77,0x68,0x47,0x38,0x7B,\
+    0x11,0x77,0x7D,0x23,0x2B,0x71,0x10,\
+    0x74,0x6D,0x26,0x39,0xC7,0xE6,0x2F,\
+    0xE2,0x27,0x39,0x00,0x36,0x43,0x36,\
+    0x39,0xAC,0x47,0x54,0x47,0x29,0x5D,\
+    0x7A,0x25,0x2D,0x74,0xF9,0x39,0x78,\
+    0x13,0x7F,0xF7,0x45,0x3B,0xE8,0x14,\
+    0x6D,0x47,0x97,0x31,0xD1,0x77,0x6F,\
+    0x47,0x29,0x5D,0x62,0x64,0x91,0x47,\
+    0x0D,0x39,0x78,0x13,0x45,0x27,0x39,\
+    0x39,0xE2,0x3D,0x54,0x47,0x29,0x5D,\
+    0x68,0x10,0x49,0x4F,0x80,0x39,0x6A,\
+    0x77,0x7D,0x23,0x33,0x2A,0x94,0x77,\
+    0x5B,0x47,0x29,0x5D,0x40,0x7F,0xC4,\
+    0x47,0x3C,0x39,0x69,0x3F,0x15,0x45,\
+    0xBC,0x58,0x68,0x89,0x55,0x1F,0xB6,\
+    0x59,0x68,0x77,0x03,0x0D,0x00,0x39,\
+    0x78,0x0C,0x94,0x20,0x09,0x73,0x11,\
+    0x77,0x7D,0x23,0x2B,0x5E,0x40,0x7F,\
+    0xD4,0x47,0x3B,0x39,0x78,0x13,0x67,\
+    0x54,0xC5,0x39,0x5E,0x77,0x7D,0x23,\
+    0x11,0x31,0xC1,0x77,0x68,0x47,0x38,\
+    0x7B,0x11,0x77,0x7D,0x23,0x2B,0x71,\
+    0x10,0x74,0x6D,0x26,0x39,0xC4,0x96,\
+    0x2F,0xE2,0x27,0x0D,0x09,0x51,0x77,\
+    0x7D,0x23,0x2B,0x6B,0x28,0x44,0xAD,\
+    0x47,0x29,0x5D,0x7A,0xC7,0x11,0x45,\
+    0xB9,0x5A,0x48,0x7F,0xD4,0x47,0x3B,\
+    0x39,0x78,0x13,0x67,0x54,0xC5,0x39,\
+    0x5E,0x77,0x7D,0x23,0x11,0x7B,0x11,\
+    0x77,0x7D,0x23,0x2B,0x71,0x10,0x75,\
+    0x15,0x26,0x39,0xC4,0xA0,0x2F,0xE2,\
+    0x09,0x4C,0x77,0x19,0x16,0x6D,0xB9,\
+    0x93,0x77,0x1D,0x39,0x1C,0x77,0x00,\
+    0x39,0x78,0x13,0x65,0x14,0x79,0x5E,\
+    0x6E,0x47,0x51,0x45,0x2B,0x59,0x40,\
+    0x07,0x4D,0x97,0x80,0x39,0x78,0x1B,\
+    0x6D,0x64,0xF9,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x0B,0x7D,0x54,0xC5,0x39,\
+    0x69,0x77,0x7D,0x3B,0x35,0x31,0xD1,\
+    0x77,0x6B,0x47,0x29,0x5D,0x64,0x35,\
+    0x14,0x47,0x29,0x5D,0x78,0x47,0x51,\
+    0x44,0x39,0x77,0x1D,0x39,0x1C,0x77,\
+    0x00,0x39,0x78,0x13,0x65,0x1A,0x79,\
+    0x5F,0x60,0x3D,0x14,0x47,0x29,0x5D,\
+    0x7C,0x10,0x6B,0x77,0x05,0x3B,0x7A,\
+    0x17,0x57,0x67,0x45,0x39,0x78,0x13,\
+    0x61,0x4F,0xD1,0x39,0x6D,0x77,0x6F,\
+    0x4F,0xD1,0x39,0x6C,0x77,0x6F,0x54,\
+    0xC5,0x39,0x5C,0x77,0x7D,0x23,0x36,\
+    0x0A,0x94,0x75,0x13,0x47,0x29,0x5D,\
+    0x7A,0x7F,0x85,0x47,0x3C,0x39,0x69,\
+    0x64,0x91,0x47,0x38,0x39,0x78,0x0C,\
+    0x99,0x05,0x00,0x39,0x78,0x0C,0x98,\
+    0x77,0x05,0x38,0x68,0x39,0x18,0x09,\
+    0x6F,0xC6,0x90,0x58,0x60,0x68,0x3E,\
+    0x31,0x51,0x77,0x68,0x47,0x29,0x5D,\
+    0x66,0x11,0x65,0x77,0x05,0x3B,0x4A,\
+    0x17,0x6D,0x46,0x09,0x1B,0x14,0x77,\
+    0x7D,0x23,0x11,0x29,0x41,0x77,0x6C,\
+    0x0D,0x39,0x5E,0x7A,0xC7,0x51,0x47,\
+    0xB9,0x5E,0x6C,0x17,0x6D,0x46,0x2D,\
+    0x09,0x54,0x75,0x7F,0x27,0x39,0x38,\
+    0x78,0x7F,0x94,0x47,0x3A,0x39,0x78,\
+    0x13,0x63,0x5A,0x50,0x39,0x6A,0x88,\
+    0x91,0x5A,0x50,0x39,0x6B,0x88,0x90,\
+    0x5A,0x50,0x39,0x6C,0x88,0x93,0x5A,\
+    0x50,0x39,0x6D,0x88,0x92,0x79,0x00,\
+    0x39,0x78,0x13,0x65,0xF9,0x45,0x39,\
+    0x6E,0x14,0x6D,0x47,0xE1,0x09,0x54,\
+    0x88,0x97,0x97,0x7E,0x04,0x28,0x88,\
+    0x97,0x74,0xD7,0x00,0x36,0x43,0x36,\
+    0xC6,0x92,0x77,0x7D,0x3C,0xCF,0x31,\
+    0x51,0x77,0x69,0x47,0x29,0x5D,0x66,\
+    0x10,0x35,0x39,0x3F,0x49,0x68,0x47,\
+    0x54,0x47,0x29,0x42,0x9E,0x2B,0xED,\
+    0x1A,0xB9,0x56,0x20,0x58,0x6B,0x5B,\
+    0x00,0x39,0x78,0x13,0x70,0x35,0x3C,\
+    0x19,0x14,0x77,0x7D,0x3C,0xCF,0x13,\
+    0x14,0x77,0x7D,0x23,0x21,0x85,0x69,\
+    0x11,0x6B,0x3B,0x39,0x49,0x68,0x17,\
+    0x6B,0x37,0x39,0x29,0x6E,0x25,0x6B,\
+    0x57,0x0C,0x31,0x68,0xC6,0x5C,0x3F,\
+    0x39,0x19,0x6F,0x25,0x2D,0x39,0x39,\
+    0x07,0x68,0x07,0x6D,0x77,0x29,0x65,\
+    0xE8,0xC9,0xED,0x2A,0xEF,0x2A,0xAE,\
+    0x77,0x7D,0x23,0x24,0x15,0x77,0x54,\
+    0x83,0xB8,0xC5,0x39,0x78,0x0C,0x91,\
+    0x6D,0x45,0x39,0x78,0x03,0x4D,0x68,\
+    0x05,0x39,0x78,0x0C,0x91,0x68,0x34,\
+    0x71,0x01,0x77,0x6B,0x0F,0x57,0xC6,\
+    0x92,0x16,0x6D,0xBC,0x11,0x1A,0xA5,\
+    0x77,0x7D,0x3B,0x3D,0x49,0x68,0x47,\
+    0x43,0xB8,0xC3,0x1A,0xA8,0x77,0x7D,\
+    0x3B,0x31,0x2A,0x94,0x77,0x5B,0x47,\
+    0x29,0x5D,0x67,0x35,0x14,0x47,0x29,\
+    0x5D,0x7A,0x7F,0x94,0x47,0x3C,0x39,\
+    0x78,0x13,0x60,0x54,0xC5,0x39,0x69,\
+    0x77,0x7D,0x3C,0xC1,0x7B,0x51,0x77,\
+    0x7D,0x3C,0xC0,0x09,0x54,0x76,0x6D,\
+    0x08,0xD6,0x39,0x78,0x17,0x67,0x77,\
+    0x05,0x3A,0x68,0x17,0x69,0x77,0x05,\
+    0x3B,0x7A,0x59,0x72,0x6D,0x66,0x77,\
+    0x36,0x39,0x18,0x68,0x34,0x16,0x6F,\
+    0x5D,0x11,0x47,0x29,0x5D,0x64,0x7F,\
+    0x78,0x47,0x3F,0x00,0x36,0x43,0x36,\
+    0x5E,0x4C,0x49,0x54,0x47,0x29,0x5D,\
+    0x78,0x25,0x2A,0x74,0xFE,0x39,0x78,\
+    0x13,0x7D,0xF9,0x45,0x3A,0x48,0x12,\
+    0x7D,0x4F,0xAC,0x39,0x6E,0x35,0x14,\
+    0x47,0x29,0x5D,0x78,0x39,0xD4,0x47,\
+    0x29,0x62,0xB8,0x7F,0x78,0x47,0x3C,\
+    0x5E,0x68,0x76,0x7B,0x4F,0xAC,0x39,\
+    0x6D,0x7F,0xD4,0x47,0x3B,0x39,0x78,\
+    0x13,0x67,0x6D,0x45,0x39,0x78,0x13,\
+    0x45,0x57,0x2C,0x89,0x54,0x77,0x5B,\
+    0x25,0x27,0x5E,0x68,0x77,0xE5,0xF7,\
+    0x05,0x39,0x72,0x10,0x45,0xF7,0x05,\
+    0x39,0x48,0x10,0x6D,0x47,0x5F,0x89,\
+    0x54,0x77,0x59,0x20,0x39,0x39,0x00,\
+    0x17,0x6D,0x47,0xEB,0x89,0x54,0x77,\
+    0x56,0x20,0x39,0x39,0x18,0xC7,0x51,\
+    0x47,0x07,0x5E,0x68,0x77,0xF5,0x27,\
+    0x39,0x39,0xD6,0x49,0x54,0x47,0x29,\
+    0x5D,0x60,0xC9,0x11,0x47,0x3B,0x5E,\
+    0x6E,0x49,0x51,0x45,0x2B,0x59,0x46,\
+    0x65,0x40,0x47,0x38,0x49,0x68,0x67,\
+    0x6C,0xF7,0x85,0x39,0x68,0x77,0xDD,\
+    0x21,0x23,0x22,0x14,0x77,0x7C,0x47,\
+    0x3B,0x09,0x6F,0x25,0x2D,0x74,0xF9,\
+    0x39,0x78,0x13,0x65,0x39,0x39,0x27,\
+    0x69,0xF9,0x11,0x44,0x39,0x59,0x6C,\
+    0x49,0x51,0x45,0x08,0x59,0x68,0x77,\
+    0x13,0x26,0x39,0xC4,0x3A,0x59,0x6D,\
+    0x27,0x39,0x39,0x1C,0x16,0x6D,0xBA,\
+    0xBD,0x17,0x68,0x17,0x6D,0x47,0x53,\
+    0x58,0x68,0x8A,0xA3,0x69,0x39,0x59,\
+    0x68,0x77,0x0D,0x37,0x39,0x29,0x45,\
+    0x77,0x6C,0x35,0x29,0x8B,0xE8,0x11,\
+    0x67,0x09,0x80,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x44,0xAD,0x0D,0x39,0x5F,\
+    0x6E,0x49,0x51,0x45,0x2B,0x59,0x7A,\
+    0x44,0x91,0x47,0x3B,0x39,0x78,0x13,\
+    0x65,0x39,0x39,0x27,0x45,0x77,0x6C,\
+    0xC9,0x45,0x3A,0x68,0x17,0x43,0x77,\
+    0x00,0x39,0x78,0x13,0x65,0x14,0x79,\
+    0x5F,0x72,0x35,0x14,0x47,0x29,0x5D,\
+    0x78,0x3D,0x14,0x47,0x29,0x5D,0x7C,\
+    0x11,0x6B,0x79,0x05,0x3A,0x68,0x17,\
+    0x67,0x79,0x05,0x38,0x68,0x17,0x69,\
+    0x79,0x05,0x3B,0x7A,0x17,0x69,0x79,\
+    0x05,0x3B,0x79,0x58,0x6A,0x26,0x39,\
+    0xC3,0xE4,0x2F,0xE2,0x69,0x26,0x13,\
+    0x37,0x39,0x18,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x67,0x05,0xC6,0x96,0x77,\
+    0x6D,0x97,0x96,0x39,0x6C,0xC7,0xD1,\
+    0x47,0x34,0x39,0x68,0x24,0xAD,0x87,\
+    0x85,0x39,0x68,0x77,0x6C,0x09,0x4C,\
+    0x77,0x19,0x58,0x6A,0x68,0x3F,0x16,\
+    0x6D,0x5D,0x42,0x47,0x29,0x1B,0x47,\
+    0x77,0x79,0xFD,0xB8,0x5C,0x6C,0x07,\
+    0x92,0x27,0x79,0x47,0x68,0x57,0x28,\
+    0x6B,0x38,0xA5,0xED,0x93,0xE3,0x67,\
+    0x38,0xA9,0x6D,0x05,0x6E,0x85,0x39,\
+    0x73,0xEE,0x10,0x7D,0x3D,0xC6,0xE7,\
+    0xF8,0xC9,0xE8,0x21,0x3B,0x47,0x68,\
+    0x2F,0xE5,0x14,0xBF,0x5F,0x9A,0x3D,\
+    0x6C,0x20,0x2D,0x45,0x97,0x07,0x6D,\
+    0x57,0x29,0xE7,0xE8,0xC9,0xEB,0x21,\
+    0x3B,0x47,0x68,0x25,0xE5,0x14,0x38,\
+    0x5F,0x86,0x57,0x6A,0x6D,0x26,0x15,\
+    0x77,0x59,0x72,0x09,0x4C,0x77,0x19,\
+    0x58,0x6A,0x65,0x16,0x39,0x60,0x57,\
+    0x42,0x47,0x35,0x00,0x36,0x43,0x36,\
+    0x47,0x68,0xE7,0xEC,0x67,0x78,0x73,\
+    0xE8,0x10,0x49,0x65,0x39,0x31,0x68,\
+    0x77,0x6D,0x20,0x33,0x47,0x68,0x69,\
+    0x75,0x65,0x39,0x6A,0xE9,0x10,0x7F,\
+    0xA5,0xB0,0x49,0x68,0x67,0x75,0x99,\
+    0xB9,0x49,0x68,0x67,0x75,0x99,0xB9,\
+    0x6A,0xE9,0x11,0x9D,0x67,0x3E,0x17,\
+    0x77,0x39,0x18,0x09,0x48,0x71,0x8F,\
+    0x70,0x41,0x5D,0x16,0x39,0x77,0x6B,\
+    0x42,0x47,0x1A,0x13,0x07,0x77,0x49,\
+    0x63,0x56,0x39,0x40,0x35,0x7F,0x69,\
+    0x00,0x39,0x6A,0x76,0x2D,0x67,0x05,\
+    0xC6,0x96,0x77,0x6D,0x97,0xBE,0x89,\
+    0xD4,0x77,0x60,0x47,0x39,0x5B,0x68,\
+    0x77,0xBB,0x6F,0x40,0x39,0x6A,0x76,\
+    0x2D,0x57,0x00,0x39,0x78,0x13,0x4D,\
+    0x20,0x3D,0x47,0x9C,0x17,0x6F,0x39,\
+    0xC6,0x2B,0x44,0x77,0x6C,0x0D,0x39,\
+    0x5E,0x64,0xA5,0x51,0x47,0xEF,0x33,\
+    0x69,0x77,0x4C,0x27,0x39,0x39,0x6A,\
+    0xC5,0x6A,0x20,0x39,0x39,0xC0,0x58,\
+    0x66,0x61,0x45,0x39,0x78,0x13,0x4D,\
+    0x59,0x15,0x39,0x69,0x3D,0x7E,0x20,\
+    0x35,0xE7,0x54,0x77,0xBB,0x4D,0x3E,\
+    0x39,0x49,0x17,0x6D,0x47,0x3B,0x87,\
+    0x6D,0x11,0x2B,0x37,0x39,0x29,0x6E,\
+    0x58,0x6D,0x68,0x35,0x16,0x65,0x39,\
+    0xD4,0x47,0x29,0x0D,0x98,0x38,0x82,\
+    0x47,0x35,0x2B,0x7B,0x10,0x47,0x39,\
+    0x39,0x73,0x6E,0x10,0x49,0x57,0x0C,\
+    0x41,0x68,0x3D,0x6C,0x20,0x35,0xE9,\
+    0x54,0x77,0xBB,0x4D,0x39,0x39,0x49,\
+    0x17,0x6D,0x47,0x3B,0x22,0xE8,0x0F,\
+    0x6D,0x67,0x3E,0x00,0x36,0x43,0x36,\
+    0x6B,0x68,0x09,0x6D,0x59,0x39,0x85,\
+    0x6F,0x15,0xB1,0x53,0x85,0x39,0x69,\
+    0x65,0x79,0x59,0x2A,0x5E,0x64,0xA5,\
+    0x51,0x47,0xEF,0x33,0x69,0x77,0x4C,\
+    0x27,0x39,0x39,0x6A,0x07,0x6D,0x57,\
+    0x38,0x70,0x9C,0x7F,0x6F,0x0D,0x3E,\
+    0x5E,0x6C,0x07,0x99,0x27,0x3B,0x49,\
+    0x97,0x65,0x41,0x47,0x38,0x73,0x6F,\
+    0x10,0x61,0x95,0x05,0x39,0xBE,0x7D,\
+    0x6C,0x47,0x18,0x59,0x68,0x77,0x6F,\
+    0xF5,0x39,0x5F,0x68,0x88,0x0B,0x61,\
+    0x66,0x13,0x77,0x5B,0x72,0x69,0x26,\
+    0x1D,0x37,0x5F,0x32,0x6D,0x66,0x77,\
+    0x1D,0x58,0x6A,0x65,0x00,0x39,0x6A,\
+    0x76,0x2D,0x67,0x05,0xC6,0x96,0x77,\
+    0x6D,0x97,0xB8,0x89,0xD4,0x77,0x60,\
+    0x47,0x39,0x5A,0x6E,0x07,0x6D,0x27,\
+    0x39,0x39,0x04,0x57,0x14,0x47,0x3B,\
+    0x38,0x28,0x65,0x54,0x47,0x29,0x5D,\
+    0x48,0x10,0x69,0x37,0xCD,0x59,0x6A,\
+    0x07,0x92,0x59,0x11,0x39,0x69,0x3D,\
+    0x6C,0x20,0x35,0xE7,0x54,0x77,0xBB,\
+    0x4D,0x3E,0x39,0x49,0x17,0x6D,0x47,\
+    0x3B,0x87,0x68,0x10,0x51,0x59,0x29,\
+    0x73,0x69,0x10,0x61,0x99,0x05,0x39,\
+    0xBE,0x7D,0x6A,0x47,0x18,0x59,0x68,\
+    0x77,0x6F,0x37,0x39,0x29,0x6F,0x36,\
+    0x9D,0x4F,0x3B,0x73,0x69,0x10,0x69,\
+    0x37,0xCD,0x59,0x6A,0x07,0x92,0x59,\
+    0x11,0x39,0x69,0x3D,0x6C,0x20,0x35,\
+    0xE7,0x54,0x77,0xBB,0x4D,0x3E,0x39,\
+    0x49,0x17,0x6D,0x47,0x3B,0x87,0x68,\
+    0x11,0xA9,0x67,0x31,0x17,0x77,0x39,\
+    0x18,0x09,0x6F,0x00,0x36,0x43,0x36,\
+    0xC6,0xB0,0x58,0x6A,0x69,0x00,0x39,\
+    0x6A,0x76,0x2D,0x67,0x05,0xC6,0x96,\
+    0x77,0x6D,0x97,0xBE,0x89,0xD4,0x77,\
+    0x60,0x47,0x39,0x5B,0x68,0x77,0xF3,\
+    0x0F,0x57,0xC6,0x8F,0x3F,0x03,0xB8,\
+    0xC1,0x49,0x6E,0x58,0x6D,0x0F,0x41,\
+    0x39,0x95,0x16,0x6D,0xB9,0x0D,0x24,\
+    0x06,0x88,0x97,0xB8,0xC9,0x24,0x06,\
+    0x88,0x96,0xB8,0xC8,0x24,0x06,0x88,\
+    0x91,0xB8,0xCB,0x24,0x06,0x88,0x90,\
+    0xB8,0xCA,0x71,0x06,0x88,0x8B,0x0F,\
+    0x57,0xC6,0x90,0x07,0x6B,0x68,0x39,\
+    0x71,0x10,0x77,0x91,0x26,0x39,0xC7,\
+    0x60,0x6A,0x03,0xB8,0xC3,0xC6,0x84,\
+    0x6A,0x03,0xB8,0xC2,0xC6,0x85,0x6A,\
+    0x03,0xB8,0xC5,0xC6,0x86,0x6A,0x03,\
+    0xB8,0xC4,0xC6,0x87,0x3F,0x03,0xB8,\
+    0xDC,0x71,0x06,0x88,0x95,0x37,0x3F,\
+    0x16,0x68,0x3F,0x15,0x47,0xC2,0x58,\
+    0x68,0x8A,0xB1,0x5A,0x57,0xC6,0x92,\
+    0x88,0x85,0x5A,0x57,0xC6,0x93,0x88,\
+    0x84,0x5A,0x57,0xC6,0x94,0x88,0x87,\
+    0x5A,0x57,0xC6,0x95,0x88,0x86,0x08,\
+    0xD6,0x39,0x58,0x3D,0x43,0xB8,0xDE,\
+    0x5E,0x7C,0x3D,0x43,0xB8,0xDF,0x5E,\
+    0x66,0x3D,0x43,0xB8,0xDC,0x5F,0x66,\
+    0x17,0x6B,0x37,0x39,0x59,0x68,0x77,\
+    0xFD,0x37,0x39,0x59,0x68,0x77,0xE7,\
+    0x0F,0x57,0xC6,0xB7,0x3F,0x03,0xB8,\
+    0xD9,0x49,0x6B,0x58,0x6D,0x37,0x27,\
+    0x16,0x68,0x16,0x6D,0xBA,0xB5,0x76,\
+    0x87,0x77,0x7D,0x0D,0x17,0xC6,0xB7,\
+    0x10,0x2F,0x0D,0x17,0xC6,0x8A,0x10,\
+    0x51,0x67,0x17,0x00,0x36,0x43,0x36,\
+    0xC6,0x84,0x55,0x43,0xB8,0xC9,0x47,\
+    0x68,0xE7,0xEC,0x67,0x78,0x73,0xE8,\
+    0x10,0x49,0x65,0x39,0x31,0x68,0x77,\
+    0x6D,0x20,0x33,0x47,0x68,0x69,0x75,\
+    0x65,0x39,0x6A,0xE9,0x10,0x7F,0xA5,\
+    0xB0,0x49,0x68,0x67,0x75,0x99,0xB9,\
+    0x49,0x68,0x67,0x75,0x99,0xB9,0x6A,\
+    0xE9,0x11,0x9D,0x6A,0x7E,0xC6,0x9C,\
+    0x17,0x7F,0x68,0x17,0xC6,0x84,0x58,\
+    0x43,0xB8,0xC9,0x58,0x68,0x8B,0xF9,\
+    0x6A,0x79,0xC6,0x9C,0x27,0xE2,0x67,\
+    0x17,0xC6,0x80,0xE7,0xC3,0xB8,0xCD,\
+    0x7D,0xE8,0xE6,0xED,0x15,0xB9,0x2A,\
+    0xA8,0x77,0x7D,0x24,0xD9,0x49,0x69,\
+    0x59,0x72,0x09,0x67,0x77,0x1D,0x39,\
+    0x3B,0xB8,0xC9,0x16,0x65,0x58,0x61,\
+    0x65,0x00,0x39,0x6A,0x76,0x2D,0x67,\
+    0x05,0xC6,0x96,0x77,0x6D,0x97,0xB8,\
+    0x89,0xD4,0x77,0x60,0x47,0x39,0x5A,\
+    0x6E,0x07,0x6D,0x27,0x39,0x38,0x6A,\
+    0x3F,0x03,0xB8,0xCE,0x71,0x06,0x88,\
+    0x95,0x37,0x3C,0x16,0x68,0x07,0x61,\
+    0x68,0x39,0x58,0x68,0x8B,0xB7,0x08,\
+    0xD6,0x39,0x78,0x67,0x54,0x47,0x29,\
+    0x45,0x76,0x24,0x6D,0x21,0x39,0x39,\
+    0xBC,0x3D,0x54,0x47,0x29,0x45,0x75,\
+    0x10,0x6D,0x47,0xF3,0x73,0x46,0x88,\
+    0x9A,0x20,0x1D,0x29,0x51,0x77,0x7D,\
+    0x3B,0x23,0x89,0x46,0x88,0x97,0x21,\
+    0x21,0x29,0x51,0x77,0x7D,0x3B,0x22,\
+    0x89,0x46,0x88,0x96,0x21,0x35,0x2A,\
+    0x94,0x77,0x6C,0x47,0x29,0x5A,0x8A,\
+    0x17,0x6D,0x47,0x91,0x73,0x51,0x77,\
+    0x7D,0x23,0x19,0x00,0x36,0x43,0x36,\
+    0x5E,0x4E,0x05,0x6D,0x6D,0x45,0x39,\
+    0x78,0x0B,0x75,0x57,0x0C,0x21,0x68,\
+    0x7D,0x6D,0x47,0x18,0xE9,0x54,0x77,\
+    0x47,0x5C,0xB9,0x21,0x68,0x57,0x6C,\
+    0x15,0x39,0x4B,0x68,0x65,0x6D,0x67,\
+    0x38,0x62,0x28,0x1A,0x8F,0x05,0x00,\
+    0x39,0x78,0x14,0x8F,0x26,0x39,0xC4,\
+    0x06,0x5F,0x2D,0x0D,0xB5,0x5E,0x00,\
+    0x5D,0x11,0x47,0x29,0x42,0x94,0x5D,\
+    0xE1,0x7A,0x45,0x39,0x6D,0x88,0x99,\
+    0x6F,0x45,0x39,0x78,0x03,0x4D,0x68,\
+    0x34,0x16,0x64,0x58,0x51,0x47,0x29,\
+    0x45,0x70,0x3F,0x03,0xB8,0xCD,0x77,\
+    0xD1,0x77,0x7D,0x60,0x39,0x1A,0xA4,\
+    0x77,0x7D,0x3B,0x3D,0x49,0x68,0x47,\
+    0x43,0xB8,0xCD,0x1A,0xA8,0x77,0x7D,\
+    0x3B,0x31,0x76,0x87,0x77,0x7D,0x68,\
+    0x2C,0x16,0x51,0x77,0x7D,0x3B,0x3D,\
+    0x16,0x51,0x77,0x7D,0x3B,0x31,0x7B,\
+    0xCF,0x39,0xD4,0x47,0x29,0x73,0xC0,\
+    0x38,0x82,0x47,0x29,0x73,0x68,0x11,\
+    0x61,0x37,0x39,0x59,0x62,0x64,0x91,\
+    0x47,0x38,0x39,0x78,0x14,0x8F,0x37,\
+    0x38,0x11,0x37,0x5D,0x32,0x09,0x67,\
+    0x77,0x1D,0x39,0x3B,0xB8,0xC9,0x16,\
+    0x65,0x58,0x61,0x65,0x00,0x39,0x6A,\
+    0x76,0x2D,0x67,0x05,0xC6,0x96,0x77,\
+    0x6D,0x97,0xB8,0x89,0xD4,0x77,0x60,\
+    0x47,0x39,0x5A,0x6E,0x07,0x6D,0x27,\
+    0x39,0x39,0xDE,0x6A,0x11,0x47,0x38,\
+    0xC6,0x90,0x6A,0x11,0x47,0xC0,0xC6,\
+    0x91,0x67,0x54,0x47,0x29,0x5A,0x88,\
+    0xB7,0x54,0x47,0x29,0x5A,0x8A,0xB7,\
+    0x54,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x5A,0x89,0x6A,0x2D,0xB8,0xC3,0x73,\
+    0x51,0x77,0x7D,0x23,0x19,0x5E,0x48,\
+    0x05,0x6D,0x57,0x0F,0x21,0x90,0x7D,\
+    0x6D,0x47,0x18,0xE9,0x54,0x77,0x47,\
+    0x5A,0xB9,0x21,0x90,0x57,0x6C,0x15,\
+    0x39,0x4B,0x68,0x65,0x6D,0x67,0x38,\
+    0x6E,0x28,0x1A,0x8F,0x26,0x39,0xC5,\
+    0xEC,0x5D,0x2D,0x0D,0xB4,0x5E,0x36,\
+    0x5F,0x11,0x47,0x29,0x42,0x94,0x5F,\
+    0xE0,0x7A,0x45,0x39,0x6B,0x88,0x9B,\
+    0x6D,0x45,0x39,0x78,0x03,0x4D,0x68,\
+    0x35,0x16,0x65,0x3F,0x03,0xB8,0xC1,\
+    0x71,0x06,0x88,0x9B,0x09,0x80,0x39,\
+    0x78,0x50,0x6D,0x64,0xF4,0x39,0x78,\
+    0x0B,0x69,0x37,0x39,0x09,0x46,0x88,\
+    0x9B,0x64,0xF9,0x39,0x78,0x0B,0x65,\
+    0x08,0xD6,0x39,0x78,0x58,0x79,0x68,\
+    0x00,0x39,0x78,0x0B,0x69,0x68,0x00,\
+    0x39,0x78,0x0B,0x65,0x05,0x9E,0x77,\
+    0xD1,0x77,0x7D,0x0D,0x91,0x76,0x87,\
+    0x77,0x7D,0x0D,0x39,0x5E,0x6C,0x07,\
+    0x6D,0x27,0x3B,0x49,0x69,0x5F,0x32,\
+    0x6D,0x66,0x77,0x36,0x39,0x18,0x09,\
+    0x6F,0xC6,0x98,0x64,0x91,0x47,0x38,\
+    0x39,0x78,0x13,0x4D,0x5A,0x45,0x39,\
+    0x76,0x88,0x95,0x0F,0x57,0xC6,0x9F,\
+    0x3F,0x03,0xB8,0xC1,0x49,0x6B,0x58,\
+    0x6D,0x37,0x27,0x16,0x68,0x16,0x6D,\
+    0xBD,0xD9,0x76,0x87,0x77,0x7D,0x0D,\
+    0x17,0xC6,0x9F,0x10,0x67,0x54,0xC5,\
+    0x39,0x69,0x77,0x7D,0x23,0x19,0x59,\
+    0x2A,0x6A,0x11,0x47,0xA3,0xC6,0x90,\
+    0x3F,0x03,0xB8,0xCE,0x71,0x06,0x88,\
+    0x95,0x37,0x3D,0x00,0x36,0x43,0x36,\
+    0x16,0x68,0x3F,0x15,0x47,0xA3,0x58,\
+    0x68,0x8D,0xDF,0x08,0xD6,0x39,0x78,\
+    0x3D,0x43,0xB8,0xC3,0x5F,0x70,0x67,\
+    0x43,0xB8,0xC2,0x6A,0x68,0x11,0x7D,\
+    0x0D,0x17,0xC6,0x9F,0x10,0x67,0x54,\
+    0xC5,0x39,0x69,0x77,0x7D,0x23,0x19,\
+    0x59,0x6E,0x35,0x54,0x47,0x29,0x5D,\
+    0x48,0x39,0x33,0x09,0x4C,0x77,0x3E,\
+    0x88,0x95,0x0F,0xDE,0x3A,0x64,0x16,\
+    0x6D,0xB8,0x4F,0x58,0x68,0x8C,0xEB,\
+    0x6D,0x79,0x73,0xE5,0x10,0x61,0x75,\
+    0x00,0x39,0x78,0x13,0x65,0xF5,0x45,\
+    0x39,0x6C,0x13,0x6B,0x37,0x39,0x59,\
+    0x68,0x77,0xDD,0x64,0xF4,0x39,0x78,\
+    0x0C,0x91,0x7A,0x40,0x39,0x78,0x13,\
+    0x65,0xB8,0xC7,0x13,0x14,0x77,0x7D,\
+    0x23,0x11,0x25,0x7D,0x47,0x6C,0x97,\
+    0x05,0x39,0x96,0x6D,0xED,0x0D,0x00,\
+    0x39,0x78,0x13,0x4D,0x20,0x11,0x47,\
+    0x68,0x3D,0x03,0xB8,0xC7,0x5E,0x48,\
+    0x05,0x6D,0x55,0x3E,0x29,0x5D,0x6F,\
+    0x6D,0x4D,0x39,0x39,0x49,0xA7,0x51,\
+    0x47,0x13,0x22,0xE8,0x6F,0x6D,0x15,\
+    0x3E,0xF7,0x14,0x77,0x92,0xF9,0x57,\
+    0xC6,0x96,0x12,0x8D,0x6F,0x45,0x39,\
+    0x78,0x03,0x4D,0x68,0x05,0x39,0x78,\
+    0x0C,0x91,0x68,0x35,0x16,0x65,0x3F,\
+    0x03,0xB8,0xC7,0x77,0xD1,0x77,0x7D,\
+    0x60,0x39,0x1A,0xA4,0x77,0x7D,0x3B,\
+    0x3D,0x49,0x68,0x47,0x43,0xB8,0xC7,\
+    0x1A,0xA8,0x77,0x7D,0x3B,0x31,0x16,\
+    0x51,0x77,0x7D,0x3C,0xC5,0x16,0x51,\
+    0x77,0x7D,0x3B,0x3D,0x16,0x51,0x77,\
+    0x7D,0x3B,0x31,0x00,0x36,0x43,0x36,\
+    0x7B,0xCF,0x39,0xD4,0x47,0x29,0x73,\
+    0xC0,0x55,0x6D,0x5D,0xBF,0x76,0x87,\
+    0x77,0x4D,0x0D,0x38,0x5F,0x64,0x64,\
+    0x91,0x47,0x38,0x39,0x78,0x14,0x8C,\
+    0x37,0x38,0x59,0x6A,0x07,0x6D,0x6B,\
+    0x26,0x17,0x77,0x5F,0x32,0x6D,0x66,\
+    0x77,0x36,0x39,0x18,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x80,0x39,0x78,\
+    0x37,0x25,0x09,0x80,0x39,0x78,0x5B,\
+    0x41,0x09,0x80,0x39,0x78,0x5D,0x29,\
+    0x09,0x80,0x39,0x78,0x2B,0x5D,0x09,\
+    0x80,0x39,0x78,0x2B,0x29,0x15,0x80,\
+    0x39,0x78,0x1B,0x6D,0x09,0x4C,0x77,\
+    0x19,0x35,0x54,0x47,0x29,0x55,0x78,\
+    0x39,0xD4,0x47,0x29,0x07,0x00,0x39,\
+    0xD4,0x47,0x29,0x70,0x84,0x39,0xD4,\
+    0x47,0x29,0x1E,0xD8,0x39,0x18,0x09,\
+    0x48,0x77,0x19,0x39,0x1C,0x65,0x56,\
+    0x39,0x6C,0x57,0x02,0x47,0x31,0x29,\
+    0x47,0x77,0x62,0x0D,0xB0,0x5E,0x66,\
+    0x3D,0x6D,0x20,0x33,0xE9,0x54,0x77,\
+    0x92,0x55,0xE1,0x73,0x68,0x11,0x9B,\
+    0x09,0x4C,0x19,0x07,0x77,0x69,0x57,\
+    0x16,0x39,0x63,0x3D,0xE5,0x20,0x37,\
+    0x73,0x68,0x10,0x67,0x97,0x05,0x39,\
+    0x97,0x35,0x75,0x0D,0x39,0x5F,0x9E,\
+    0x39,0x18,0x09,0x48,0x77,0x19,0x3F,\
+    0x8A,0x48,0x35,0x25,0x47,0x77,0x72,\
+    0x6F,0x56,0x39,0x48,0x7F,0x54,0x47,\
+    0x3D,0x39,0x78,0x1B,0x64,0x20,0x39,\
+    0x38,0x7C,0x55,0x11,0x47,0x29,0x7B,\
+    0x20,0x5D,0x24,0x37,0x39,0x29,0x6E,\
+    0x9E,0xE5,0x9C,0xF9,0x43,0x68,0x6D,\
+    0x40,0x47,0x3B,0x00,0x36,0x43,0x36,\
+    0x11,0x54,0x77,0x92,0xBC,0x39,0x19,\
+    0x6D,0x9E,0xE5,0x67,0x79,0x49,0x60,\
+    0x9E,0xE5,0x55,0x09,0x71,0x69,0xB7,\
+    0xD1,0x47,0x39,0x39,0x98,0xB5,0xD1,\
+    0xB8,0xC6,0xC6,0x67,0xF5,0xED,0x56,\
+    0xB8,0x71,0x69,0x59,0x51,0x47,0xC6,\
+    0xC2,0x6A,0xCD,0x11,0x47,0x37,0x5F,\
+    0x44,0x57,0x68,0xAE,0xB1,0x19,0x28,\
+    0xA6,0xAA,0x37,0x39,0x29,0x6E,0x9E,\
+    0xE5,0x94,0xF9,0x09,0x79,0xB7,0xD1,\
+    0x47,0x39,0x3E,0x97,0x9C,0xE5,0x75,\
+    0x29,0xF9,0xD4,0x77,0x6D,0xB8,0xD9,\
+    0xFB,0xD4,0x88,0x92,0x47,0x26,0xBB,\
+    0xE8,0x47,0xEC,0x67,0x3C,0xD0,0xE0,\
+    0x55,0x2D,0x45,0x48,0xC6,0x87,0x0F,\
+    0x6D,0x45,0x48,0xC6,0x98,0x0F,0x6D,\
+    0x37,0x31,0x2B,0x59,0x3F,0x6C,0x87,\
+    0x85,0x39,0x68,0x77,0x62,0x85,0x85,\
+    0xC6,0x97,0x88,0x9D,0xC5,0xB9,0x2A,\
+    0xE9,0x3F,0x6C,0x39,0x39,0x73,0x45,\
+    0x77,0x6B,0x20,0x11,0x1B,0x54,0x77,\
+    0x92,0xBC,0x3F,0x15,0x6D,0x9E,0xE3,\
+    0x67,0x7F,0xE8,0xAF,0xA6,0xAC,0x57,\
+    0x8D,0x41,0x68,0x57,0x6A,0x15,0x39,\
+    0x47,0x68,0x69,0x6D,0xF9,0x14,0x39,\
+    0x6E,0x12,0x85,0x67,0x3E,0x68,0x28,\
+    0x1B,0x4D,0x65,0x05,0x39,0x97,0x8C,\
+    0x6B,0x6B,0x3C,0xD0,0xE6,0x57,0x2B,\
+    0x96,0xFE,0xE8,0xA9,0x35,0x7D,0x67,\
+    0x3E,0x6B,0x68,0x09,0x6D,0x59,0x39,\
+    0x19,0x6F,0x26,0x2D,0x2A,0xD3,0x19,\
+    0x6D,0x9E,0xE5,0x67,0x79,0x49,0x64,\
+    0x9E,0xE5,0x55,0x09,0x71,0x69,0xB7,\
+    0xD1,0x47,0x39,0x00,0x36,0x43,0x36,\
+    0x39,0x98,0xB5,0xD1,0xB8,0xC6,0xC6,\
+    0x67,0xF5,0xED,0x56,0xB8,0x71,0x69,\
+    0x07,0x6C,0x27,0x3B,0x49,0x68,0x5F,\
+    0x72,0x6D,0x26,0x15,0x77,0x59,0x72,\
+    0x6F,0x66,0x13,0x37,0x39,0x18,0x09,\
+    0x48,0x77,0x3E,0x88,0x95,0x68,0x3F,\
+    0x25,0x46,0x77,0x66,0xFB,0x05,0x39,\
+    0x78,0x11,0x43,0x67,0x45,0x39,0x97,\
+    0x8D,0xCD,0x57,0x11,0x39,0x69,0x93,\
+    0xE5,0x87,0x85,0x39,0x68,0x77,0x6C,\
+    0x6A,0x79,0xC6,0x94,0x57,0x11,0x47,\
+    0xC6,0xC3,0xC8,0x7F,0xC5,0x47,0x3B,\
+    0x39,0x69,0x77,0x54,0x47,0x3B,0x39,\
+    0x78,0x14,0x85,0x27,0x39,0x38,0xF0,\
+    0xCB,0x51,0x47,0x28,0x5F,0x46,0x57,\
+    0x11,0x47,0xC6,0xC3,0xC8,0x67,0x45,\
+    0x47,0x38,0xDB,0xE0,0xB7,0xD1,0x47,\
+    0x39,0x39,0x69,0x5A,0x2D,0xB8,0xC5,\
+    0x19,0x14,0x77,0x92,0xBD,0x99,0x31,\
+    0xC0,0x77,0x6C,0x47,0x38,0x39,0x51,\
+    0x77,0x6C,0x47,0x29,0x5A,0x80,0x17,\
+    0x6D,0x46,0x5D,0x31,0x51,0x77,0x69,\
+    0x47,0x29,0x55,0x61,0x10,0x6D,0x46,\
+    0x61,0x16,0x65,0x58,0x61,0x68,0x3E,\
+    0x49,0x68,0x67,0x6B,0xAE,0xB1,0x19,\
+    0x28,0xA6,0x91,0x47,0xC6,0xC2,0x68,\
+    0x49,0x7D,0x89,0x85,0x39,0x68,0x77,\
+    0x92,0xAF,0xBE,0x49,0x6A,0xC7,0xEA,\
+    0x21,0x39,0x39,0xEE,0x59,0x51,0x47,\
+    0xC6,0xC2,0x6A,0x07,0x6D,0x57,0x3F,\
+    0xD0,0xE0,0x5D,0x2D,0x6F,0x74,0xE0,\
+    0x94,0x77,0x92,0xBC,0x3F,0x16,0x64,\
+    0x47,0x58,0x3F,0x39,0xD3,0xE0,0xB7,\
+    0xD1,0x47,0x39,0x00,0x36,0x43,0x36,\
+    0x3E,0x97,0x05,0x6A,0x85,0x39,0x16,\
+    0x69,0x47,0x58,0x3F,0x39,0xD3,0xE0,\
+    0xB7,0xD1,0x47,0x39,0x3E,0x97,0x91,\
+    0xE5,0x35,0x39,0x2B,0x68,0x58,0x6C,\
+    0x09,0x80,0x39,0x78,0x37,0xFD,0x39,\
+    0x39,0x27,0x68,0x38,0x82,0x47,0x35,\
+    0x87,0x14,0x77,0x92,0x20,0x39,0x39,\
+    0xAA,0x3D,0x6A,0x2C,0x39,0x39,0xD4,\
+    0x57,0x11,0x47,0x29,0x7B,0xC8,0x57,\
+    0x6A,0x97,0xB9,0x1B,0x68,0xA7,0xED,\
+    0x95,0xB9,0xDC,0xE0,0xA5,0xED,0x96,\
+    0xF8,0x13,0x38,0x3D,0xE0,0x20,0x39,\
+    0x39,0xF6,0x58,0x61,0x68,0x3E,0x77,\
+    0xFD,0x27,0xE2,0x27,0x39,0x39,0xFA,\
+    0x07,0x65,0xF7,0xBE,0x5F,0x68,0x77,\
+    0x1B,0x69,0x05,0x39,0x97,0x8C,0x6F,\
+    0x37,0x39,0x29,0x6E,0x9E,0xE5,0x6D,\
+    0x79,0x11,0x25,0xAE,0x91,0x47,0xC6,\
+    0xC2,0x6E,0x58,0x61,0x77,0x0C,0x41,\
+    0x68,0x9D,0xE5,0x87,0x85,0x39,0x68,\
+    0x70,0x92,0x35,0x3E,0xFB,0x68,0x58,\
+    0x6C,0x77,0x0C,0x41,0x68,0x9D,0xE5,\
+    0x87,0x85,0x39,0x68,0x70,0x92,0xA1,\
+    0xB1,0x4B,0x68,0x65,0x6D,0x68,0x38,\
+    0x77,0xD1,0x77,0x7D,0x07,0xA9,0x47,\
+    0x68,0x69,0x6D,0x08,0xD6,0x39,0x64,\
+    0xC9,0x11,0x47,0xC6,0x5E,0x5E,0x07,\
+    0x12,0x87,0x3E,0x17,0x68,0x57,0x11,\
+    0x47,0x29,0x7B,0x38,0x57,0x6A,0xAE,\
+    0xB1,0xE8,0xA8,0x5D,0x3D,0x0D,0xB4,\
+    0x5E,0x76,0x58,0x61,0x68,0x3E,0x77,\
+    0xFD,0x27,0xE2,0x27,0x2D,0x49,0x6E,\
+    0xC7,0xEA,0x21,0x37,0x2A,0xAE,0x77,\
+    0x7D,0x2B,0x31,0x00,0x36,0x43,0x36,\
+    0x39,0x51,0x77,0x69,0x47,0x29,0x5A,\
+    0x80,0x07,0x6D,0x77,0x00,0x39,0x97,\
+    0x8D,0xE7,0x6A,0x79,0xC6,0x94,0x07,\
+    0x92,0x4A,0xB9,0xF8,0x11,0x77,0x92,\
+    0xBD,0x9D,0x17,0x77,0x5F,0x32,0x6D,\
+    0x66,0x15,0x77,0x39,0x33,0x09,0x4C,\
+    0x77,0x19,0x39,0x3B,0x47,0x39,0x16,\
+    0x6F,0x58,0x6B,0x68,0x3C,0x25,0x46,\
+    0x77,0x66,0x6D,0x05,0x39,0x97,0x8C,\
+    0x6D,0x37,0x39,0x29,0x6E,0x9E,0xE5,\
+    0x67,0x79,0x49,0x6C,0x9E,0xE5,0x55,\
+    0x09,0x61,0x69,0xB7,0xD1,0x47,0x39,\
+    0x39,0x98,0xB5,0xD1,0xB8,0xC6,0xC6,\
+    0x67,0xF5,0xED,0x56,0xB8,0x61,0x69,\
+    0x59,0x51,0x47,0xC6,0xC2,0x6A,0x75,\
+    0x1D,0xB8,0xD6,0x41,0x68,0x07,0x6D,\
+    0x57,0x17,0x39,0x7B,0x65,0x5D,0x1F,\
+    0x38,0xF9,0xD4,0x77,0x6D,0x47,0x36,\
+    0xFB,0xD4,0x88,0x92,0xB8,0xC9,0xBB,\
+    0xE8,0x66,0xEC,0x1F,0x38,0x19,0x46,\
+    0x77,0x61,0xAC,0xB1,0x0B,0x58,0x0F,\
+    0x6D,0x87,0x85,0x39,0x68,0x88,0x8D,\
+    0x85,0x85,0xC6,0x97,0x77,0x72,0xC5,\
+    0xB9,0x08,0xE9,0x0F,0x6D,0x45,0x49,\
+    0xC6,0x87,0x0F,0x6D,0x45,0x49,0xC6,\
+    0x98,0x0F,0x6D,0x0D,0x17,0x39,0x7F,\
+    0x10,0x61,0x37,0x39,0x34,0xA8,0xF6,\
+    0x14,0x47,0xC6,0xC3,0xCA,0x17,0x67,\
+    0x37,0xC6,0x34,0xE8,0xB6,0x14,0x47,\
+    0xC6,0xC3,0xCA,0x5D,0x72,0x6B,0x26,\
+    0x17,0x77,0x39,0x33,0x09,0x4C,0x77,\
+    0x3E,0x77,0x6D,0x68,0x3E,0x16,0x6E,\
+    0x58,0x68,0x5B,0x17,0x39,0x63,0x5D,\
+    0x51,0x47,0xC6,0x00,0x36,0x43,0x36,\
+    0xC2,0x68,0x07,0x6D,0x57,0x3F,0xD0,\
+    0xE0,0x57,0x2D,0x37,0x31,0xD0,0xE0,\
+    0x65,0x5D,0x1F,0x38,0xF9,0xD4,0x77,\
+    0x6D,0x47,0xC9,0xFB,0xD4,0x88,0x92,\
+    0xB8,0x36,0xBB,0xE8,0x66,0xEC,0x1F,\
+    0x38,0x17,0x54,0x77,0x92,0xBC,0x3B,\
+    0x49,0x69,0x9E,0xE5,0x75,0x09,0x41,\
+    0x68,0xB7,0xD1,0x47,0x39,0x39,0x78,\
+    0xB5,0xD1,0xB8,0xC6,0xC6,0x87,0xF5,\
+    0xED,0x76,0xB8,0x41,0x68,0x07,0x6D,\
+    0x57,0x17,0x39,0x7B,0x65,0x5D,0x1F,\
+    0x38,0xF9,0xD4,0x77,0x6D,0x47,0x36,\
+    0xFB,0xD4,0x88,0x92,0xB8,0xC9,0xBB,\
+    0xE8,0x66,0xEC,0x1F,0x38,0x19,0x46,\
+    0x77,0x61,0xAC,0xB1,0x0B,0x58,0x0F,\
+    0x6D,0x87,0x85,0x39,0x68,0x88,0x8D,\
+    0x85,0x85,0xC6,0x97,0x77,0x72,0xC5,\
+    0xB9,0x08,0xE9,0x0F,0x6D,0x45,0x49,\
+    0xC6,0x87,0x0F,0x6D,0x45,0x49,0xC6,\
+    0x98,0x0F,0x6D,0x0D,0x17,0x39,0x7F,\
+    0x10,0x61,0x37,0x39,0x34,0xA8,0xF6,\
+    0x14,0x47,0xC6,0xC3,0xCA,0x17,0x67,\
+    0x37,0xC6,0x34,0xE8,0xB6,0x14,0x47,\
+    0xC6,0xC3,0xCA,0x5D,0x72,0x6B,0x26,\
+    0x17,0x77,0x39,0x33,0x09,0x4C,0x77,\
+    0x3E,0x88,0x95,0x0F,0xDE,0x06,0x6C,\
+    0x6A,0x11,0x47,0x39,0xC6,0x97,0x63,\
+    0x51,0x47,0x39,0x45,0x68,0x0D,0x6D,\
+    0x71,0x05,0x3E,0x97,0x49,0x51,0x40,\
+    0xC6,0x31,0x91,0x77,0x6C,0x47,0xC6,\
+    0xC3,0xE8,0x35,0x54,0x47,0xC6,0xC3,\
+    0xEE,0x7F,0x94,0x47,0x3D,0x39,0x97,\
+    0x8D,0xED,0x37,0x39,0x29,0x46,0x77,\
+    0x67,0xA8,0xB1,0x00,0x36,0x43,0x36,\
+    0x2B,0x51,0x77,0x92,0xBD,0xBE,0xF9,\
+    0xD4,0x77,0x6D,0x47,0xB9,0xFB,0xD4,\
+    0x88,0x92,0xB8,0x46,0xBB,0xE8,0x64,\
+    0xAC,0x47,0xC6,0xC3,0xEF,0x5D,0x11,\
+    0x47,0xC6,0xC3,0xE1,0x07,0x6D,0x57,\
+    0x17,0x39,0x60,0x9A,0xE5,0x55,0x2C,\
+    0xF9,0xD4,0x77,0x6D,0x47,0xF9,0xFB,\
+    0xD4,0x88,0x92,0xB8,0x06,0xBB,0xE8,\
+    0x6D,0xEC,0x37,0x39,0x29,0x46,0x77,\
+    0x66,0xA0,0xB1,0x2B,0x7D,0xB7,0xD1,\
+    0x47,0x39,0x39,0x50,0xB5,0xD1,0xB8,\
+    0xC6,0xC6,0xAF,0xF5,0xED,0x5D,0xB8,\
+    0x49,0x68,0x67,0x43,0x47,0x35,0x2B,\
+    0x7D,0xB7,0xD1,0x47,0x39,0x39,0x6F,\
+    0xB5,0xD1,0xB8,0xC6,0xC6,0x90,0xF5,\
+    0xED,0x5D,0xB8,0x2A,0x86,0x77,0x64,\
+    0x47,0xC6,0xC3,0xE0,0x07,0x6A,0x55,\
+    0x00,0x39,0x97,0x8D,0xEA,0x87,0x85,\
+    0x39,0x68,0x77,0x6A,0x85,0x85,0xC6,\
+    0x97,0x88,0x95,0xC5,0xB9,0x2A,0xA9,\
+    0x77,0x92,0xBD,0xBE,0x41,0x68,0x55,\
+    0x11,0x47,0xC6,0xC2,0x6A,0x55,0x51,\
+    0x47,0xC6,0xC2,0x68,0x57,0x69,0xAE,\
+    0xB1,0x13,0x28,0x75,0x58,0x47,0x36,\
+    0x21,0x69,0x57,0x20,0x96,0xF0,0x3B,\
+    0x38,0x88,0x82,0x67,0x3D,0x6B,0x68,\
+    0x0F,0x6D,0x5F,0x39,0x81,0x14,0x77,\
+    0x62,0x2A,0xE7,0x19,0x54,0x77,0x6D,\
+    0x40,0xC6,0xD2,0xE0,0x45,0x54,0x47,\
+    0xC6,0xC3,0xF8,0xB7,0xD1,0x47,0x39,\
+    0xC6,0x88,0xB5,0xD1,0xB8,0xC6,0x39,\
+    0x77,0xF5,0xED,0x74,0xF8,0x39,0x97,\
+    0x8D,0xFD,0x37,0x3E,0x0B,0x51,0x77,\
+    0x92,0xBD,0xA9,0x00,0x36,0x43,0x36,\
+    0xF9,0xD4,0x77,0x6D,0x47,0x3E,0xFB,\
+    0xD4,0x88,0x92,0xB8,0xC1,0xBB,0xE8,\
+    0x44,0xAC,0x47,0xC6,0xC3,0xF8,0x57,\
+    0x51,0x47,0x39,0x46,0x97,0x94,0xE5,\
+    0x75,0x00,0x39,0x97,0x8D,0xFF,0x87,\
+    0x85,0x39,0x68,0x88,0x93,0x85,0x85,\
+    0xC6,0x97,0x77,0x6C,0xC5,0xB9,0x0A,\
+    0xA9,0x77,0x92,0xBD,0xAB,0x41,0x68,\
+    0x5D,0x11,0x47,0x29,0x7B,0xF0,0x57,\
+    0x69,0x97,0xB9,0x1B,0x68,0xA7,0xED,\
+    0x95,0xB9,0xDC,0xE0,0xA5,0xED,0x4B,\
+    0x0C,0x39,0x66,0x6F,0x6F,0x21,0x25,\
+    0x73,0x46,0x88,0x92,0x20,0x35,0x0B,\
+    0x5D,0x6F,0x6D,0xFC,0x78,0x7F,0x29,\
+    0xB1,0x2C,0x27,0x33,0x03,0x5D,0x6F,\
+    0x6D,0x5A,0x45,0x39,0x69,0x88,0x92,\
+    0x67,0x3D,0x6B,0x68,0x0F,0x6D,0x5F,\
+    0x39,0x19,0x6C,0x2E,0x2D,0x2A,0xF9,\
+    0x49,0x68,0x47,0x6E,0xAC,0xB1,0x0B,\
+    0x51,0x77,0x92,0xBD,0xAD,0xF9,0xD4,\
+    0x77,0x6D,0xB8,0xD9,0xFB,0xD4,0x88,\
+    0x92,0x47,0x26,0xBB,0xE8,0x44,0xAC,\
+    0x47,0xC6,0xC3,0xFC,0x07,0x6A,0x75,\
+    0x00,0x39,0x97,0x8D,0xF9,0x87,0x85,\
+    0x39,0x68,0x77,0x6A,0x85,0x85,0xC6,\
+    0x97,0x88,0x95,0xC5,0xB9,0x0A,0xA9,\
+    0x77,0x92,0xBD,0xAD,0x19,0x54,0x77,\
+    0x6D,0x38,0xC6,0xDA,0xE0,0x45,0x54,\
+    0x47,0xC6,0xC3,0xFE,0xB7,0xD1,0x47,\
+    0x39,0xC6,0x96,0xB5,0xD1,0xB8,0xC6,\
+    0x39,0x69,0xF5,0xED,0x74,0xF8,0x39,\
+    0x97,0x8D,0xFB,0x67,0x45,0x39,0x97,\
+    0x8C,0x8D,0x37,0x3D,0xD0,0xE0,0x65,\
+    0x45,0x47,0x38,0x00,0x36,0x43,0x36,\
+    0xF9,0xD4,0x77,0x6D,0x47,0xC9,0xFB,\
+    0xD4,0x88,0x92,0xB8,0x36,0xBB,0xE8,\
+    0x66,0x2C,0x47,0x38,0x13,0x14,0x77,\
+    0x92,0xBC,0xDB,0x3B,0x3D,0x88,0x82,\
+    0x67,0x45,0x39,0x97,0x8C,0x8D,0x37,\
+    0x31,0x2B,0x40,0x77,0x6C,0x87,0x85,\
+    0x39,0x68,0x77,0x62,0x85,0x85,0xC6,\
+    0x97,0x88,0x9D,0xC5,0xB9,0x28,0x29,\
+    0x77,0x6C,0x37,0x39,0x09,0x6D,0x9C,\
+    0xE5,0x75,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0xB8,0xD9,0xFB,0xD4,0x88,0x92,0x47,\
+    0x26,0xBB,0xE8,0x4D,0xEC,0x45,0x6C,\
+    0xC6,0x87,0x75,0x38,0xB8,0xC9,0x39,\
+    0x11,0x37,0x6D,0x47,0xC6,0xC3,0xCA,\
+    0x0D,0x6D,0x6D,0x45,0x39,0x78,0x35,\
+    0xF5,0x67,0x3C,0xE9,0xE8,0x51,0x6D,\
+    0x97,0xB9,0xEF,0xE8,0x92,0xE5,0x91,\
+    0xB9,0x35,0x5D,0x77,0x62,0x7F,0x3B,\
+    0x5F,0x72,0x3D,0x6F,0x20,0x37,0x0F,\
+    0x5D,0x4F,0x6D,0x75,0x3A,0x84,0x29,\
+    0x31,0x2C,0x89,0x78,0x59,0x60,0x4B,\
+    0x58,0x7F,0x39,0x2D,0x54,0x77,0x6C,\
+    0x67,0x3C,0x6B,0x68,0x0D,0x6D,0x5D,\
+    0x39,0x19,0x6D,0x2E,0x2D,0x2A,0xFB,\
+    0x49,0x68,0x47,0x6A,0xAC,0xB1,0x0B,\
+    0x51,0x77,0x92,0xBD,0xA1,0xF9,0xD4,\
+    0x77,0x6D,0xB8,0xD9,0xFB,0xD4,0x88,\
+    0x92,0x47,0x26,0xBB,0xE8,0x44,0xAC,\
+    0x47,0xC6,0xC3,0xF0,0x07,0x6A,0x75,\
+    0x00,0x39,0x97,0x8D,0xF5,0x87,0x85,\
+    0x39,0x68,0x77,0x6A,0x85,0x85,0xC6,\
+    0x97,0x88,0x95,0xC5,0xB9,0x0A,0xA9,\
+    0x77,0x92,0xBD,0xA1,0x19,0x54,0x77,\
+    0x6D,0x38,0xC6,0x00,0x36,0x43,0x36,\
+    0xDA,0xE0,0x45,0x54,0x47,0xC6,0xC3,\
+    0xF2,0xB7,0xD1,0x47,0x39,0xC6,0x96,\
+    0xB5,0xD1,0xB8,0xC6,0x39,0x69,0xF5,\
+    0xED,0x74,0xF8,0x39,0x97,0x8D,0xF7,\
+    0x67,0x45,0x39,0x97,0x8C,0x9D,0x37,\
+    0x3D,0xD0,0xE0,0x65,0x45,0x47,0x38,\
+    0xF9,0xD4,0x77,0x6D,0x47,0xC9,0xFB,\
+    0xD4,0x88,0x92,0xB8,0x36,0xBB,0xE8,\
+    0x66,0x2C,0x47,0x38,0x13,0x14,0x77,\
+    0x92,0xBC,0xCB,0x3B,0x3D,0x88,0x82,\
+    0x67,0x45,0x39,0x97,0x8C,0x9D,0x37,\
+    0x31,0x2B,0x40,0x77,0x6C,0x87,0x85,\
+    0x39,0x68,0x77,0x62,0x85,0x85,0xC6,\
+    0x97,0x88,0x9D,0xC5,0xB9,0x28,0x29,\
+    0x77,0x6C,0x37,0x39,0x09,0x6E,0x9C,\
+    0xE5,0x75,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0xB8,0xD9,0xFB,0xD4,0x88,0x92,0x47,\
+    0x26,0xBB,0xE8,0x4D,0xEC,0x45,0x6C,\
+    0xC6,0x87,0x75,0x38,0xB8,0xC9,0x39,\
+    0x11,0xF7,0x6D,0x47,0xC6,0xC3,0xCA,\
+    0x09,0x6D,0x53,0x05,0x39,0x66,0x5D,\
+    0x11,0x47,0x29,0x7B,0x20,0x57,0x6A,\
+    0xAE,0xB1,0x25,0x5D,0x7F,0x6F,0xFB,\
+    0x3B,0x5E,0x64,0x57,0x6A,0xAE,0xB1,\
+    0x31,0x5D,0x77,0x6D,0x4F,0x3C,0x5E,\
+    0x4A,0x07,0x6C,0x68,0x39,0x49,0x60,\
+    0x58,0x6D,0x67,0x74,0x19,0x6F,0x9E,\
+    0xE5,0x96,0xF9,0x49,0x68,0x47,0x7D,\
+    0x68,0x39,0x16,0x6E,0x16,0x6D,0xBC,\
+    0x45,0x76,0x87,0x77,0x7D,0x27,0x27,\
+    0x7B,0xCF,0x07,0x65,0x68,0x39,0x19,\
+    0x25,0x57,0x6A,0xAE,0xB1,0xE8,0xA8,\
+    0x07,0x6D,0x77,0x29,0x16,0x68,0x58,\
+    0x6B,0x26,0x39,0x00,0x36,0x43,0x36,\
+    0xC2,0x34,0x38,0x82,0x47,0x29,0x19,\
+    0x6F,0x25,0x6D,0x39,0x39,0x27,0x68,\
+    0x57,0x6A,0x1C,0x79,0x54,0xF2,0x0B,\
+    0x6D,0x53,0x05,0x39,0x67,0x5D,0x11,\
+    0x47,0x29,0x7B,0xF0,0x57,0x6B,0x97,\
+    0xB9,0x13,0x68,0xA7,0xED,0x9D,0xB9,\
+    0xDC,0xE0,0xAD,0xED,0x59,0x0C,0x61,\
+    0x6A,0xC9,0x6F,0x20,0x19,0x87,0x54,\
+    0x77,0x63,0x20,0x23,0x49,0x69,0x58,\
+    0x6D,0x37,0x31,0x16,0x68,0x07,0x6D,\
+    0x77,0x0C,0x61,0x68,0x58,0x6D,0x68,\
+    0x3E,0x58,0x68,0x8D,0x0D,0x08,0xD6,\
+    0x39,0x78,0x57,0x6B,0x15,0x39,0x45,\
+    0x68,0x6B,0x6D,0x67,0x3F,0x60,0x28,\
+    0x1A,0xD1,0x77,0x05,0x3E,0x88,0xB7,\
+    0x14,0x47,0xC6,0xC3,0xEC,0xF7,0x11,\
+    0x45,0x59,0x0A,0xA8,0x77,0x92,0xBD,\
+    0xBD,0x19,0x14,0x77,0x92,0xBD,0xB9,\
+    0x49,0x6F,0x65,0x45,0x47,0x38,0xF9,\
+    0xD4,0x77,0x6D,0x47,0x36,0xFB,0xD4,\
+    0x88,0x92,0xB8,0xC9,0xBB,0xE8,0x66,\
+    0x2C,0x47,0x38,0x13,0x14,0x77,0x92,\
+    0xBD,0xBF,0x3B,0x7D,0x77,0x9E,0x45,\
+    0x2C,0x39,0x94,0x7F,0xB8,0x47,0x3F,\
+    0x31,0xBD,0x77,0x6A,0x4F,0x80,0x39,\
+    0x6C,0x77,0x92,0xBD,0xB9,0x31,0x91,\
+    0x77,0x69,0x47,0x29,0x55,0x61,0x53,\
+    0x72,0x61,0x26,0x11,0x77,0x5D,0x72,\
+    0x6B,0x26,0x17,0x77,0x5D,0x32,0x09,\
+    0x67,0x77,0x1D,0x39,0x1C,0x05,0x00,\
+    0x39,0x78,0x1B,0x65,0x67,0x45,0x39,\
+    0x78,0x1B,0x64,0x4F,0xA9,0x39,0x6F,\
+    0x7F,0xFD,0x47,0x3C,0x31,0xF8,0x77,\
+    0x6B,0x4F,0xA9,0x00,0x36,0x43,0x36,\
+    0x39,0x6C,0x55,0x11,0x47,0x29,0x07,\
+    0xF6,0xE8,0x91,0x47,0x39,0x39,0x60,\
+    0x57,0x22,0x67,0xE0,0x09,0xB1,0x16,\
+    0x6D,0xBC,0x25,0x69,0xE7,0x39,0x18,\
+    0x45,0x3A,0x39,0x6B,0x75,0x6D,0x09,\
+    0x48,0x77,0x19,0x58,0x6A,0x59,0x16,\
+    0x39,0x63,0x57,0x02,0x47,0x35,0x73,\
+    0x51,0x77,0x7D,0x2C,0xC7,0x5F,0x6E,\
+    0x07,0x6D,0x27,0x39,0x39,0x02,0x7F,\
+    0x54,0x47,0x3E,0x39,0x78,0x04,0x98,\
+    0x20,0x39,0x39,0x34,0x07,0x6D,0x57,\
+    0x3E,0x16,0x68,0x58,0x65,0x68,0x05,\
+    0x39,0x78,0x1B,0x4D,0x09,0x80,0x39,\
+    0x78,0x43,0x9D,0x89,0x45,0x39,0x97,\
+    0x44,0xAA,0x47,0x29,0x55,0x72,0x38,\
+    0x82,0x47,0x35,0x73,0x51,0x77,0x7D,\
+    0x2B,0x29,0x5E,0x62,0x64,0x91,0x47,\
+    0x38,0x39,0x78,0x04,0x9B,0x27,0x23,\
+    0x73,0x51,0x77,0x7D,0x24,0xC9,0x5E,\
+    0x62,0x64,0x91,0x47,0x3D,0x39,0x78,\
+    0x04,0x9B,0x27,0x31,0x2A,0x94,0x77,\
+    0x6E,0x47,0x29,0x4A,0x9E,0x7F,0xD4,\
+    0x47,0x3E,0x39,0x78,0x04,0x98,0x37,\
+    0x38,0x59,0x6A,0x07,0x6D,0x69,0x26,\
+    0x77,0x1D,0x58,0x6A,0x68,0x3F,0x27,\
+    0x47,0x77,0x62,0x67,0x56,0x39,0x78,\
+    0x55,0x11,0x47,0x29,0x7B,0xF0,0x07,\
+    0x6D,0x57,0x3E,0xE9,0xE8,0x55,0x6D,\
+    0x97,0xB9,0xEB,0xE8,0x92,0xE5,0x95,\
+    0xB9,0x17,0x69,0x4B,0x5C,0x3F,0x39,\
+    0x85,0x14,0x75,0x2C,0x21,0x37,0x7B,\
+    0x51,0x77,0x7D,0x2B,0x29,0x7B,0x51,\
+    0x77,0x7D,0x24,0xC9,0x59,0x76,0xCB,\
+    0x11,0x40,0xD9,0x00,0x36,0x43,0x36,\
+    0x5F,0x78,0x35,0x54,0x47,0x29,0x55,\
+    0x78,0x64,0x91,0x47,0x38,0x39,0x78,\
+    0x14,0x9D,0x27,0x31,0x2A,0x94,0x77,\
+    0x6C,0x47,0x29,0x55,0x78,0x58,0x65,\
+    0x37,0x39,0x29,0x59,0x0F,0x6B,0x68,\
+    0x39,0x77,0xD1,0x77,0x7D,0x05,0xC9,\
+    0x69,0xE7,0x7F,0x54,0x47,0x3C,0x39,\
+    0x78,0x04,0x98,0x20,0x71,0x47,0x68,\
+    0x45,0x54,0x47,0x29,0x55,0x72,0x10,\
+    0x45,0x6B,0x05,0x39,0x68,0x70,0xB9,\
+    0x67,0x45,0x39,0x78,0x1B,0x4D,0x65,\
+    0x45,0x39,0x78,0x13,0x45,0x54,0x89,\
+    0x41,0x68,0x0F,0x6D,0x67,0x3E,0x6B,\
+    0x28,0x09,0x6D,0x79,0x39,0x8B,0x2F,\
+    0x14,0x69,0xF9,0xBF,0x54,0x82,0x7F,\
+    0xD4,0x47,0x3C,0x39,0x78,0x04,0x98,\
+    0x37,0x39,0x09,0x69,0x58,0x6D,0x09,\
+    0x80,0x39,0x78,0x50,0xF5,0x1F,0xB6,\
+    0x15,0x77,0x59,0x72,0x09,0x4C,0x16,\
+    0x65,0x5D,0x02,0x47,0x35,0x29,0x45,\
+    0x77,0x6F,0xF7,0x05,0x39,0x56,0x11,\
+    0x65,0x05,0x40,0x39,0x78,0x13,0x7D,\
+    0x27,0x0B,0x2A,0xA8,0x77,0x7D,0x23,\
+    0x11,0x49,0x6C,0x58,0x6D,0x0F,0x54,\
+    0x39,0x6B,0x58,0x51,0x47,0x29,0x5D,\
+    0x41,0x39,0xD4,0x47,0x29,0x0D,0x98,\
+    0x07,0x6D,0x57,0x14,0x39,0x69,0x58,\
+    0x6D,0x37,0x39,0x29,0x7D,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x50,0x1D,0x08,\
+    0xD6,0x39,0x7C,0x5D,0x32,0x09,0x4C,\
+    0x77,0x19,0x39,0x18,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x4F,0x00,0x39,0x6D,\
+    0x77,0x7D,0x2B,0x21,0x5E,0x64,0x39,\
+    0xD4,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x70,0xE4,0x39,0xD4,0x47,0x29,0x70,\
+    0xC4,0x57,0x54,0x47,0x29,0x4A,0x90,\
+    0x10,0x45,0xF7,0x80,0x39,0x78,0x1B,\
+    0x6D,0x25,0x19,0x7B,0xD1,0x77,0x7D,\
+    0x34,0xC1,0x77,0xD1,0x77,0x7D,0x63,\
+    0x29,0x77,0xD1,0x77,0x7D,0x0E,0xD5,\
+    0x49,0x69,0x64,0xAD,0x47,0x29,0x52,\
+    0x95,0x64,0xAD,0x47,0x29,0x52,0x96,\
+    0x39,0x18,0x68,0x3E,0x2B,0x47,0x77,\
+    0x66,0x59,0x16,0x39,0x67,0x57,0x11,\
+    0x47,0x29,0x78,0x20,0x07,0x6D,0x57,\
+    0x38,0xE8,0xA8,0x65,0x7D,0xF5,0x05,\
+    0x39,0x97,0x10,0x7B,0x67,0x45,0x39,\
+    0x78,0x36,0x6D,0x37,0x39,0x29,0x69,\
+    0x36,0x9D,0x49,0x39,0x49,0x68,0x67,\
+    0x6A,0x96,0xF9,0x2B,0x78,0x69,0x6C,\
+    0x0D,0x38,0x52,0x46,0x3D,0x54,0x47,\
+    0x29,0x52,0x95,0x11,0x69,0x37,0xC6,\
+    0x59,0x4C,0x57,0x11,0x47,0x29,0x7B,\
+    0xF4,0x07,0x6D,0x57,0x3E,0xE9,0xE8,\
+    0x55,0x6D,0x97,0xB9,0xEB,0xE8,0x92,\
+    0xE5,0x95,0xB9,0xE8,0xA9,0x7B,0x3D,\
+    0x07,0x39,0x5E,0x6C,0x07,0x92,0x27,\
+    0x3B,0x19,0x6F,0x59,0x72,0x09,0x4C,\
+    0x77,0x19,0x88,0x6D,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0x38,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xB9,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x6F,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xB8,0xC6,0x97,0x88,0x92,0xB8,0xC6,\
+    0xC6,0xEA,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0xEE,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0x44,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0x00,0x36,0x43,0x36,\
+    0xBD,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0x47,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0x46,0xC6,\
+    0xC6,0x97,0x75,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x74,0x92,0xB8,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0x43,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0xB8,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0xB8,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x72,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0x41,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0x00,0x36,0x43,0x36,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x70,0x65,\
+    0xB8,0xC6,0x38,0x48,0x72,0x6D,0x07,\
+    0x39,0x31,0x69,0x77,0x6D,0x47,0x39,\
+    0x39,0x68,0x77,0x6D,0x44,0x28,0x3F,\
+    0x68,0x37,0x6C,0x4F,0x38,0x39,0x78,\
+    0x3E,0x8D,0x47,0x39,0x39,0x68,0x72,\
+    0x2C,0x43,0x39,0x79,0x68,0x7F,0x6C,\
+    0x47,0x39,0x39,0x68,0x77,0x6D,0x47,\
+    0x39,0x3F,0x29,0x74,0x6D,0x07,0x38,\
+    0x31,0x69,0x77,0x7D,0x0E,0xD9,0x39,\
+    0x68,0x77,0x6D,0x40,0xD1,0x3E,0x68,\
+    0x37,0x6C,0x4F,0x38,0x39,0x78,0x3E,\
+    0x8D,0x47,0x39,0x39,0x68,0x77,0x7C,\
+    0x4E,0x39,0x79,0x68,0x7F,0x6C,0x47,\
+    0x29,0x06,0x44,0x77,0x6D,0x47,0x39,\
+    0x39,0x68,0x77,0x6D,0x47,0x39,0x38,\
+    0x69,0x7F,0x6D,0x07,0x39,0x31,0x69,\
+    0x77,0x7D,0x78,0xC9,0x39,0x68,0x77,\
+    0x6D,0x46,0x39,0x39,0x68,0x77,0x6D,\
+    0x45,0x78,0x3B,0x68,0x37,0x6D,0x4F,\
+    0x38,0x39,0x78,0x48,0x41,0x47,0x39,\
+    0x39,0x68,0x75,0x6D,0x47,0x39,0x39,\
+    0x68,0x70,0x8D,0x46,0x39,0x79,0x68,\
+    0x7F,0x6C,0x47,0x29,0x06,0x44,0x77,\
+    0x6D,0x47,0x39,0x3A,0x68,0x77,0x6D,\
+    0x47,0x39,0x71,0x8F,0x78,0x61,0x6D,\
+    0x56,0x39,0x48,0x57,0x20,0x65,0x74,\
+    0x19,0xB1,0x57,0xB4,0x65,0x45,0x39,\
+    0x78,0x03,0x64,0x57,0x28,0x73,0x68,\
+    0x10,0x6D,0x47,0xFB,0x89,0x54,0x77,\
+    0x6C,0x20,0x3D,0x00,0x36,0x43,0x36,\
+    0x59,0x68,0x76,0xA3,0x57,0x2C,0xD1,\
+    0xE0,0xB7,0xD1,0x47,0x39,0x39,0x67,\
+    0x22,0xED,0x21,0x39,0x39,0xC0,0x6D,\
+    0x54,0x47,0x29,0x4D,0x62,0x67,0x78,\
+    0x87,0x85,0x39,0x68,0x77,0x62,0x35,\
+    0x39,0x2B,0x6D,0xC7,0xEC,0x21,0x39,\
+    0x39,0xE2,0x49,0x54,0x47,0x29,0x4D,\
+    0x66,0x4F,0x54,0x47,0x29,0x4D,0x64,\
+    0x07,0x6D,0x77,0x3E,0x11,0x28,0x07,\
+    0x6D,0x77,0x3D,0xA9,0xE4,0x28,0xED,\
+    0x24,0x3D,0x4B,0x6F,0x17,0x69,0x75,\
+    0x3D,0xAB,0x2F,0x0B,0x6D,0x7B,0x38,\
+    0x73,0xEE,0x10,0x49,0x68,0x3A,0x0F,\
+    0x54,0x88,0x92,0x67,0x45,0x39,0x78,\
+    0x1B,0x4D,0x96,0xF5,0x11,0x20,0x57,\
+    0x6B,0x97,0x7A,0x45,0x68,0x4B,0x6D,\
+    0x5E,0x8C,0x51,0x69,0x1F,0x6D,0x0D,\
+    0xBF,0x5F,0x86,0x51,0x72,0x99,0x78,\
+    0x0A,0xAF,0x77,0x7D,0x33,0x37,0x29,\
+    0x6D,0x25,0x6D,0x35,0x36,0xFB,0x68,\
+    0x64,0xAC,0x47,0x29,0x4D,0x62,0xCF,\
+    0x2A,0x21,0x2D,0x31,0x91,0x77,0x68,\
+    0x47,0x29,0x4A,0x9D,0x44,0xA9,0x47,\
+    0x29,0x55,0x72,0x35,0x7C,0x27,0x39,\
+    0x38,0x40,0x25,0x14,0x47,0x29,0x4D,\
+    0x78,0x17,0x6D,0x46,0x27,0x7B,0x79,\
+    0x17,0x6D,0x46,0x21,0x31,0x51,0x77,\
+    0x68,0x47,0x29,0x4A,0x9D,0x11,0x6D,\
+    0x46,0x35,0x29,0x7D,0xB7,0x51,0x47,\
+    0xC9,0x5F,0x68,0x77,0x1D,0x4F,0x2C,\
+    0x39,0x6B,0x11,0x6D,0x47,0x51,0x29,\
+    0x7D,0xB7,0xD1,0x47,0x39,0x39,0x6F,\
+    0x28,0xED,0x25,0x63,0x29,0x7D,0xB7,\
+    0xD1,0x47,0x39,0x00,0x36,0x43,0x36,\
+    0x39,0x6F,0x28,0xED,0x24,0x3D,0x43,\
+    0x6F,0x17,0x67,0x57,0x2C,0xF9,0xD4,\
+    0x77,0x6D,0x47,0x3E,0x13,0x68,0x4F,\
+    0x68,0x74,0xFC,0x39,0x78,0x03,0x61,\
+    0x39,0x39,0x07,0x6D,0x3D,0xEA,0x20,\
+    0x25,0x03,0x54,0x88,0x92,0x6F,0x45,\
+    0x39,0x78,0x1B,0x4D,0x67,0x3E,0xE9,\
+    0x2D,0x09,0x6D,0x79,0x39,0x20,0xDD,\
+    0x0F,0x6C,0x3F,0x39,0x73,0xEF,0x11,\
+    0x83,0x4F,0xC0,0x39,0x6D,0x77,0x7D,\
+    0x34,0xCC,0x0A,0xAC,0x77,0x7D,0x2B,\
+    0x23,0x7B,0x79,0x17,0x6D,0x47,0xAD,\
+    0x29,0x7D,0x9F,0xE5,0x87,0x85,0x39,\
+    0x68,0x77,0x62,0x14,0xB9,0x5F,0x68,\
+    0x77,0xE9,0x39,0x39,0x27,0x45,0x77,\
+    0x6C,0x57,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0x47,0x36,0xD8,0x20,0xA9,0x2D,0x74,\
+    0xFE,0x39,0x78,0x03,0x61,0xF9,0x45,\
+    0x3E,0xBD,0x15,0x09,0x39,0x3F,0x01,\
+    0x54,0x88,0x92,0x6F,0x45,0x39,0x78,\
+    0x1B,0x4D,0x67,0x3E,0xE9,0x2C,0x09,\
+    0x6D,0x79,0x39,0x20,0xDD,0x0F,0x6F,\
+    0x3F,0x39,0x73,0xEF,0x11,0x83,0x74,\
+    0xC5,0x39,0x6E,0x77,0x7D,0x33,0x37,\
+    0x47,0x69,0x64,0xAA,0x47,0x29,0x4D,\
+    0x62,0x5F,0x11,0x47,0x29,0x4D,0x68,\
+    0x07,0x6E,0xAE,0xB1,0x2B,0x7C,0xB7,\
+    0xD1,0x47,0x39,0x39,0x98,0xB5,0xD1,\
+    0xB8,0xC6,0xC6,0x67,0xF5,0xED,0x5F,\
+    0xB8,0x3B,0x7C,0x77,0x9D,0x05,0x15,\
+    0x39,0x69,0x35,0x41,0x47,0x3B,0x2A,\
+    0xAF,0x77,0x7D,0x33,0x22,0x7B,0x51,\
+    0x77,0x7D,0x33,0x23,0x2B,0xEF,0x67,\
+    0x78,0xAF,0xB1,0x00,0x36,0x43,0x36,\
+    0xF9,0xD4,0x77,0x6D,0x47,0x36,0x6E,\
+    0xE8,0x11,0x6D,0x46,0x35,0x1B,0x14,\
+    0x77,0x7D,0x33,0x2B,0x29,0x79,0x2A,\
+    0x6D,0x21,0x05,0x27,0x51,0x77,0x7D,\
+    0x33,0x20,0x5E,0x72,0x3D,0x54,0x47,\
+    0x29,0x4D,0x72,0x10,0x63,0x54,0xC5,\
+    0x39,0x49,0x77,0x7D,0x33,0x20,0x2B,\
+    0xD4,0x77,0x6F,0x27,0x27,0x73,0x6F,\
+    0x11,0x77,0x0D,0x00,0x39,0x78,0x03,\
+    0x77,0x21,0x2B,0x31,0xD1,0x77,0x6B,\
+    0x47,0x29,0x4A,0x9D,0x7F,0x94,0x47,\
+    0x3E,0x39,0x78,0x04,0x98,0x05,0x28,\
+    0x29,0x79,0x26,0x6D,0x21,0x77,0x27,\
+    0x51,0x77,0x7D,0x33,0x20,0x5E,0x44,\
+    0x3D,0x54,0x47,0x29,0x4D,0x72,0x10,\
+    0x4D,0x54,0xC5,0x39,0x49,0x77,0x7D,\
+    0x33,0x20,0x29,0x51,0x77,0x7D,0x33,\
+    0x2A,0x6B,0x68,0x05,0x62,0x85,0x39,\
+    0x2A,0xA9,0x77,0x7D,0x33,0x2A,0x2B,\
+    0xD4,0x77,0x69,0x27,0x27,0x73,0x6F,\
+    0x11,0x77,0x0D,0x00,0x39,0x78,0x03,\
+    0x77,0x21,0x2B,0x31,0xD1,0x77,0x6B,\
+    0x47,0x29,0x4A,0x9D,0x7F,0x94,0x47,\
+    0x3E,0x39,0x78,0x04,0x98,0x05,0x28,\
+    0x27,0x79,0xC9,0x51,0x47,0x3B,0x5F,\
+    0x54,0x64,0x80,0x47,0x38,0x39,0x78,\
+    0x03,0x7A,0x54,0xD4,0x39,0x6A,0x77,\
+    0x7D,0x33,0x21,0x47,0x69,0x64,0xAA,\
+    0x47,0x29,0x4D,0x7B,0x35,0x54,0x47,\
+    0x29,0x4D,0x71,0x64,0xAA,0x47,0x29,\
+    0x4D,0x7E,0x65,0xD1,0x47,0x3A,0x19,\
+    0x54,0x77,0x6D,0x4E,0xFD,0xE9,0xD1,\
+    0x77,0x7D,0x2B,0x39,0x1A,0xA8,0x77,\
+    0x7D,0x34,0xC1,0x00,0x36,0x43,0x36,\
+    0x59,0x42,0xC9,0x51,0x47,0x3D,0x5F,\
+    0x4C,0x35,0x54,0x47,0x29,0x4D,0x71,\
+    0x64,0x91,0x47,0x38,0x39,0x78,0x03,\
+    0x7B,0x55,0x85,0x39,0x6B,0x57,0x51,\
+    0x47,0x39,0x30,0xAC,0xA7,0xD4,0x47,\
+    0x29,0x55,0x68,0x54,0xAD,0x47,0x29,\
+    0x4A,0x90,0x5F,0x72,0x6D,0x26,0x15,\
+    0x77,0x59,0x72,0x6F,0x66,0x13,0x37,\
+    0x39,0x18,0x68,0x34,0x16,0x64,0x58,\
+    0x6A,0x6D,0x45,0x39,0x78,0x04,0x98,\
+    0x4F,0x2C,0x39,0x6F,0x10,0x67,0x0D,\
+    0x00,0x39,0x78,0x03,0x7F,0x20,0x39,\
+    0x3A,0x36,0x5F,0x11,0x47,0x29,0x4D,\
+    0x7A,0x67,0x79,0x1A,0x39,0x5F,0x5C,\
+    0x69,0x54,0x47,0x29,0x4D,0x71,0x10,\
+    0x77,0x0D,0x00,0x39,0x78,0x03,0x77,\
+    0x20,0x37,0x2A,0x94,0x77,0x4C,0x47,\
+    0x29,0x4D,0x71,0x6F,0xD1,0x47,0x3B,\
+    0x59,0x7E,0x3D,0x6A,0x21,0x2B,0x73,\
+    0x51,0x77,0x7D,0x33,0x23,0x5F,0x62,\
+    0x7F,0xF8,0x47,0x3F,0x31,0xBD,0x77,\
+    0x6A,0x05,0x2D,0x29,0x7C,0x22,0x6D,\
+    0x21,0x2B,0x73,0x51,0x77,0x7D,0x33,\
+    0x20,0x5F,0x62,0x7F,0xF8,0x47,0x3F,\
+    0x31,0xBD,0x77,0x6A,0x05,0x2D,0x29,\
+    0x7C,0x26,0x6D,0x21,0x7F,0x27,0x51,\
+    0x77,0x7D,0x33,0x20,0x5E,0x44,0x3D,\
+    0x54,0x47,0x29,0x4D,0x72,0x10,0x4D,\
+    0x54,0xC5,0x39,0x49,0x77,0x7D,0x33,\
+    0x20,0x29,0x51,0x77,0x7D,0x33,0x2A,\
+    0x6B,0x68,0x05,0x62,0x85,0x39,0x2A,\
+    0xA9,0x77,0x7D,0x33,0x2A,0x21,0xD4,\
+    0x77,0x69,0x27,0x2F,0x73,0x6F,0x11,\
+    0x7F,0x0D,0x00,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x03,0x77,0x21,0x33,0x31,\
+    0xFD,0x77,0x6B,0x4F,0xEC,0x39,0x6F,\
+    0x35,0x79,0x57,0x2D,0x60,0x68,0x11,\
+    0x7F,0x0D,0x00,0x39,0x78,0x03,0x74,\
+    0x21,0x33,0x31,0xFD,0x77,0x6B,0x4F,\
+    0xEC,0x39,0x6F,0x35,0x79,0x57,0x2D,\
+    0x66,0x68,0x11,0x6D,0x47,0x59,0x27,\
+    0x51,0x77,0x7D,0x33,0x20,0x5E,0x2C,\
+    0x3D,0x54,0x47,0x29,0x4D,0x72,0x10,\
+    0x55,0x57,0x00,0x39,0x78,0x03,0x75,\
+    0x35,0x3F,0xF9,0xD4,0x77,0x6D,0x47,\
+    0xC6,0xFB,0x14,0x77,0x92,0xC6,0xF8,\
+    0x2A,0xA8,0x77,0x7D,0x33,0x20,0x6B,\
+    0x51,0x77,0x7D,0x33,0x2F,0x29,0x51,\
+    0x77,0x7D,0x33,0x2A,0x6B,0x68,0x05,\
+    0x62,0x85,0x39,0x2A,0xA9,0x77,0x7D,\
+    0x33,0x2A,0x21,0xD4,0x77,0x6E,0x27,\
+    0x2F,0x73,0x6F,0x11,0x7F,0x0D,0x00,\
+    0x39,0x78,0x03,0x77,0x21,0x33,0x31,\
+    0xFD,0x77,0x6B,0x4F,0xEC,0x39,0x6F,\
+    0x35,0x79,0x57,0x2D,0x62,0x68,0x11,\
+    0x41,0x59,0x00,0x39,0x78,0x03,0x74,\
+    0x20,0x2B,0x73,0x51,0x77,0x7D,0x33,\
+    0x23,0x5E,0x6E,0x7F,0xB8,0x47,0x3F,\
+    0x59,0x78,0x3D,0x6A,0x21,0x2B,0x73,\
+    0x51,0x77,0x7D,0x33,0x23,0x5F,0x62,\
+    0x7F,0xF8,0x47,0x3F,0x31,0xBD,0x77,\
+    0x6A,0x05,0x2D,0x73,0x7C,0x11,0x6D,\
+    0x47,0xD7,0x07,0x51,0x77,0x7D,0x2B,\
+    0x23,0x2A,0xAF,0x77,0x7D,0x33,0x2D,\
+    0x87,0x54,0x77,0x6A,0x25,0x39,0x39,\
+    0x10,0x7F,0x78,0x47,0x3E,0x5F,0x68,\
+    0x77,0xBF,0x6D,0x45,0x39,0x78,0x03,\
+    0x6D,0x45,0x2C,0x00,0x36,0x43,0x36,\
+    0x39,0x67,0x07,0x6D,0x57,0x3E,0x2B,\
+    0x7D,0xB7,0xD1,0x47,0x39,0x39,0x6F,\
+    0xB5,0xD1,0xB8,0xC6,0xC6,0x90,0xF5,\
+    0xED,0x5D,0xB8,0x31,0xFD,0x77,0x6E,\
+    0x37,0x31,0x16,0x68,0x3F,0x00,0x47,\
+    0x38,0x77,0xD1,0x77,0x7D,0x72,0x29,\
+    0x69,0xE7,0x09,0x6D,0x59,0x00,0x39,\
+    0x78,0x03,0x79,0x0D,0xBE,0x5E,0x72,\
+    0x57,0x11,0x47,0x29,0x55,0x48,0x57,\
+    0x6A,0x97,0x05,0x39,0x97,0x09,0x6D,\
+    0x59,0x39,0x22,0xD8,0x0F,0x6D,0x3F,\
+    0x38,0x73,0xEF,0x11,0x81,0x54,0xC5,\
+    0x39,0x69,0x77,0x7D,0x33,0x22,0x7B,\
+    0x51,0x77,0x7D,0x33,0x23,0x21,0xD4,\
+    0x77,0x68,0x27,0x5B,0x31,0x7D,0x77,\
+    0x6A,0x21,0x65,0x13,0x14,0x77,0x7D,\
+    0x33,0x39,0x49,0x69,0x9E,0xE5,0x55,\
+    0x2C,0xF9,0xD4,0x77,0x6D,0x47,0xC9,\
+    0xFB,0xD4,0x88,0x92,0xB8,0x36,0xBB,\
+    0xE8,0x6D,0xEC,0x45,0x2C,0x39,0x98,\
+    0x6C,0x14,0x47,0x29,0x4D,0x7C,0x77,\
+    0x6C,0x39,0x3F,0x19,0x14,0x77,0x7D,\
+    0x2B,0x19,0x19,0x6F,0xA7,0x51,0x47,\
+    0xC6,0x47,0x68,0x69,0x6D,0x5C,0x89,\
+    0x41,0x68,0x0F,0x6F,0x0D,0xBE,0x5F,\
+    0x84,0x09,0x6B,0x54,0xFE,0x39,0x78,\
+    0x03,0x78,0x54,0xC5,0x39,0x69,0x77,\
+    0x7D,0x33,0x22,0x7B,0x51,0x77,0x7D,\
+    0x33,0x23,0x21,0xEF,0x67,0x79,0x10,\
+    0x39,0x5F,0x68,0x76,0x7D,0x0D,0x00,\
+    0x39,0x78,0x03,0x74,0x21,0x39,0x38,\
+    0x6E,0x58,0x6B,0x6D,0x45,0x39,0x78,\
+    0x03,0x6D,0x37,0x3B,0xD0,0xE0,0x65,\
+    0x78,0x87,0x85,0x00,0x36,0x43,0x36,\
+    0x39,0x68,0x77,0x9D,0x85,0x85,0xC6,\
+    0x97,0x88,0x62,0xC5,0xB9,0x23,0xE9,\
+    0x07,0x6D,0x57,0x00,0x39,0x78,0x03,\
+    0x7E,0x55,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0x47,0x36,0xFB,0xD4,0x88,0x92,0xB8,\
+    0xC9,0xBB,0xE8,0x6D,0xEC,0x5B,0x00,\
+    0x39,0x78,0x03,0x78,0x35,0x39,0x2B,\
+    0x6E,0x07,0x6D,0x57,0x00,0x39,0x78,\
+    0x03,0x79,0xD7,0xB8,0x66,0xE8,0x14,\
+    0x39,0x39,0x3E,0x19,0x14,0x77,0x7D,\
+    0x2B,0x19,0xE8,0xA9,0x57,0x6A,0x97,\
+    0x05,0x39,0x97,0x09,0x6D,0x59,0x39,\
+    0x22,0xD8,0x0F,0x6D,0x3F,0x38,0x73,\
+    0xEF,0x11,0x81,0x54,0xC5,0x39,0x69,\
+    0x77,0x7D,0x33,0x22,0x7B,0x51,0x77,\
+    0x7D,0x33,0x23,0x29,0x6E,0x29,0x6D,\
+    0x54,0xF9,0x39,0x78,0x03,0x78,0x59,\
+    0x00,0x39,0x78,0x03,0x7A,0xF9,0x00,\
+    0x39,0x78,0x03,0x7B,0x21,0x33,0x73,\
+    0x6F,0x10,0x6B,0x5F,0x85,0x39,0x60,\
+    0x17,0x09,0x5F,0x85,0x39,0x6F,0x17,\
+    0x33,0x37,0x31,0x16,0x68,0x3F,0x00,\
+    0x47,0x38,0x77,0xD1,0x77,0x7D,0x72,\
+    0x29,0x25,0x51,0x77,0x7D,0x33,0x2C,\
+    0x69,0xE7,0x67,0x54,0x47,0x29,0x4D,\
+    0x7C,0xE7,0x6B,0x39,0x39,0x27,0x68,\
+    0x3D,0xEA,0x20,0x19,0x19,0x14,0x77,\
+    0x7D,0x2B,0x19,0x49,0x68,0x67,0x6B,\
+    0x96,0xF9,0x19,0x6F,0xA7,0x51,0x47,\
+    0xC6,0x47,0x68,0x69,0x6D,0x5C,0x89,\
+    0x41,0x68,0x0F,0x6C,0x0D,0xBE,0x5F,\
+    0x84,0x64,0x91,0x47,0x38,0x39,0x78,\
+    0x03,0x76,0x05,0x00,0x39,0x78,0x03,\
+    0x77,0x5F,0x85,0x00,0x36,0x43,0x36,\
+    0x39,0x6D,0x35,0xD4,0x47,0x29,0x4A,\
+    0x90,0x5B,0x72,0x69,0x26,0x11,0x37,\
+    0x5D,0x32,0x09,0x4C,0x2B,0x51,0x77,\
+    0x7D,0x33,0x20,0x5E,0x78,0xC5,0x51,\
+    0x47,0xC6,0x5E,0x62,0x07,0x92,0x97,\
+    0x38,0x2A,0xA8,0x77,0x7D,0x33,0x20,\
+    0x58,0x68,0x8B,0x0B,0x09,0x4C,0x77,\
+    0x19,0x67,0x54,0x47,0x29,0x4D,0x73,\
+    0x24,0x6D,0x21,0x1F,0x2A,0x94,0x77,\
+    0x4C,0x47,0x29,0x4D,0x71,0x58,0x51,\
+    0x47,0x29,0x4D,0x68,0x07,0x6D,0x57,\
+    0x00,0x39,0x78,0x04,0x9B,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x72,0x09,0x7B,\
+    0x51,0x77,0x7D,0x33,0x22,0x69,0xE7,\
+    0x39,0x18,0x09,0x48,0x2A,0x94,0x77,\
+    0x6C,0x47,0x29,0x4D,0x72,0x39,0x18,\
+    0x09,0x48,0x7B,0x51,0x77,0x7D,0x33,\
+    0x30,0x49,0x69,0x64,0xAD,0x47,0x29,\
+    0x4D,0x62,0x35,0x14,0x47,0x29,0x4D,\
+    0x64,0x35,0x14,0x47,0x29,0x4D,0x66,\
+    0x44,0x91,0x47,0x38,0x39,0x78,0x03,\
+    0x7D,0x05,0x00,0x39,0x78,0x03,0x7F,\
+    0x54,0xF9,0x39,0x78,0x03,0x7E,0x05,\
+    0x00,0x39,0x78,0x03,0x79,0x05,0x00,\
+    0x39,0x78,0x03,0x78,0x05,0x00,0x39,\
+    0x78,0x03,0x7B,0x54,0xC5,0x39,0x97,\
+    0x77,0x7D,0x33,0x2E,0x7B,0x51,0x77,\
+    0x7D,0x33,0x21,0x7B,0x51,0x77,0x7D,\
+    0x33,0x20,0x19,0x14,0x77,0x7D,0x34,\
+    0xCC,0x31,0xB8,0x77,0x6A,0x4F,0xA9,\
+    0x39,0x6E,0x7F,0xFD,0x47,0x3C,0x31,\
+    0x91,0x77,0x68,0x47,0x29,0x55,0x70,\
+    0x35,0xD4,0x47,0x29,0x4A,0x90,0x39,\
+    0x18,0x09,0x48,0x00,0x36,0x43,0x36,\
+    0x77,0x19,0x39,0x1C,0x68,0x3E,0x09,\
+    0x47,0x77,0x67,0x79,0x16,0x39,0x66,\
+    0x3D,0x2D,0x20,0x3F,0x6A,0x28,0x10,\
+    0x7F,0x27,0x19,0x49,0x68,0x47,0x6A,\
+    0x68,0x39,0x77,0xD1,0x77,0x7D,0x25,\
+    0xC1,0x61,0xE7,0x17,0x7F,0x37,0x39,\
+    0x09,0x6F,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x24,0xAD,0x1F,0xB6,0x59,0x6A,\
+    0x07,0x6C,0x69,0x26,0x77,0x1D,0x39,\
+    0x1C,0x09,0x4C,0x77,0x19,0x58,0x6A,\
+    0x68,0x3F,0x16,0x6D,0x47,0x42,0x47,\
+    0x2B,0x17,0x47,0x77,0x79,0x6B,0x16,\
+    0x39,0x70,0x5D,0x42,0x47,0x25,0x73,\
+    0x28,0x10,0x6B,0x14,0x79,0x5E,0x7C,\
+    0x17,0x49,0x68,0x3C,0x16,0x6E,0x58,\
+    0x6A,0x09,0x80,0x39,0x78,0x14,0x39,\
+    0x08,0xD6,0x39,0x64,0x17,0x79,0x68,\
+    0x3C,0x16,0x6E,0x58,0x6A,0x09,0x80,\
+    0x39,0x78,0x23,0x55,0x08,0xD6,0x39,\
+    0x64,0x17,0x6F,0x37,0x38,0x13,0x77,\
+    0x5B,0x72,0x69,0x26,0x77,0x1D,0x39,\
+    0x1C,0x77,0x16,0x39,0x6E,0xC7,0x11,\
+    0x47,0x38,0x5F,0x60,0x39,0xD4,0x47,\
+    0x29,0x6D,0x14,0x17,0x6F,0x37,0x39,\
+    0x77,0x1D,0x39,0x1C,0x68,0x34,0x16,\
+    0x64,0x58,0x6A,0x6D,0x45,0x39,0x97,\
+    0x83,0x6D,0x0E,0xD4,0x39,0x72,0x7F,\
+    0x79,0x47,0x3E,0x5F,0x92,0x37,0xAD,\
+    0x47,0x45,0x3E,0x68,0x7F,0x79,0x47,\
+    0x3E,0x5E,0x6C,0x31,0xAD,0x27,0xD3,\
+    0x17,0x68,0x4C,0x11,0xC7,0x3C,0x39,\
+    0x70,0x4C,0x11,0x47,0x38,0x39,0x72,\
+    0x4C,0x11,0x58,0x29,0x39,0x74,0x35,\
+    0x40,0x47,0x27,0x00,0x36,0x43,0x36,\
+    0x31,0xBC,0x77,0x6A,0x01,0xFE,0x17,\
+    0x77,0x5F,0x32,0x6D,0x66,0x77,0x1D,\
+    0x3F,0x8A,0x48,0x39,0x15,0x51,0x77,\
+    0x7E,0x47,0x51,0x19,0x54,0x77,0x6D,\
+    0x46,0xCD,0x0B,0x54,0xC1,0x77,0x3F,\
+    0x93,0x43,0x3D,0x57,0x11,0x47,0x2A,\
+    0x39,0x68,0x55,0x11,0x47,0xC6,0xC3,\
+    0x68,0x64,0x28,0x47,0x6C,0x2A,0x2C,\
+    0x77,0x38,0x76,0x78,0x39,0x16,0x59,\
+    0x45,0x47,0x51,0xA7,0xEE,0xC9,0xED,\
+    0x22,0xD3,0x11,0x77,0x5D,0x72,0x6B,\
+    0x26,0x17,0x77,0x39,0x18,0x0F,0xDE,\
+    0x3E,0x64,0x09,0x6C,0x6B,0x00,0x39,\
+    0x7B,0x77,0x05,0x6F,0x45,0x39,0x7B,\
+    0x77,0x6D,0x6D,0x45,0x39,0x97,0x82,\
+    0x6D,0x6D,0x05,0x39,0x61,0xFE,0x05,\
+    0x26,0x39,0xC6,0x38,0x16,0xF5,0x67,\
+    0x74,0x2B,0x70,0x07,0x62,0x95,0x21,\
+    0xEB,0x70,0xA7,0x51,0x47,0xC6,0x73,\
+    0x68,0x11,0x99,0x37,0x38,0xA9,0x69,\
+    0x55,0x6D,0xF5,0x14,0x39,0x77,0x11,\
+    0x49,0x0D,0x2C,0x5F,0x48,0x67,0x54,\
+    0x47,0x29,0x45,0x50,0xC7,0x40,0x47,\
+    0x38,0x5F,0x7C,0x69,0x40,0x47,0x3B,\
+    0x5E,0x70,0xC9,0x51,0x47,0x38,0x5E,\
+    0x7A,0xC9,0x51,0x47,0x3A,0x5E,0x64,\
+    0x09,0x6C,0x65,0x15,0x39,0x00,0xE5,\
+    0xEB,0xF5,0xBC,0x5C,0xC6,0x57,0x6A,\
+    0x6D,0x26,0x15,0x77,0x59,0x72,0x6F,\
+    0x66,0x13,0x37,0x39,0x18,0x09,0x48,\
+    0x71,0x8F,0x48,0x61,0x3F,0x39,0x4D,\
+    0x47,0x01,0x17,0x6F,0x45,0x39,0x78,\
+    0x0B,0x55,0x6D,0x45,0x39,0x97,0x82,\
+    0x4D,0x5D,0xBA,0x00,0x36,0x43,0x36,\
+    0x43,0x76,0x0B,0xC7,0x5C,0x7F,0x39,\
+    0x69,0x09,0x6F,0x67,0x3C,0x6C,0x68,\
+    0x14,0x73,0x5C,0xBF,0x41,0x68,0x57,\
+    0x20,0x67,0x3E,0x6B,0x68,0x05,0x6D,\
+    0x55,0x39,0xE8,0xA9,0x67,0xEB,0x67,\
+    0x3E,0x6D,0x68,0x09,0x6D,0x59,0x39,\
+    0x87,0x6D,0x12,0x8F,0x5C,0x7B,0x39,\
+    0x76,0x6C,0x11,0x47,0xC6,0x39,0x77,\
+    0x16,0x6D,0xB9,0xA7,0x58,0x68,0x89,\
+    0x8B,0x5F,0xBA,0x58,0x68,0x88,0x49,\
+    0x69,0x39,0x87,0x54,0x77,0x6C,0x21,\
+    0x35,0x6B,0x6C,0x16,0x6D,0xB9,0xEB,\
+    0x81,0x54,0x77,0x6E,0x22,0x9D,0x19,\
+    0x6F,0x53,0x72,0x61,0x26,0x11,0x77,\
+    0x5D,0x72,0x6B,0x26,0x17,0x77,0x5F,\
+    0x32,0x6D,0x66,0x77,0x1D,0x39,0x1C,\
+    0x0F,0xDE,0x36,0x6C,0x6F,0x42,0x47,\
+    0x22,0x23,0x47,0x77,0x72,0x6D,0x45,\
+    0x39,0x97,0x82,0x4D,0x5D,0xBD,0x19,\
+    0x6C,0xC7,0x51,0x47,0xBD,0x5E,0x68,\
+    0x76,0x53,0xF7,0x05,0x39,0xE0,0x10,\
+    0x6D,0x47,0xC5,0x89,0x54,0x77,0xE1,\
+    0x20,0x39,0x39,0xE8,0xC7,0x51,0x47,\
+    0x99,0x5E,0x6C,0x17,0x6D,0x46,0x4B,\
+    0x17,0x51,0x77,0x7D,0x3B,0x15,0x19,\
+    0x6F,0x05,0x75,0xA5,0x91,0x22,0x28,\
+    0x77,0x6C,0x67,0x3E,0x7B,0x28,0x3F,\
+    0x2D,0x5C,0x79,0x39,0x6A,0x57,0x6A,\
+    0xA7,0xB1,0x22,0x28,0x77,0x6E,0x5C,\
+    0x7E,0x39,0x6C,0x59,0x54,0x47,0x29,\
+    0x45,0x58,0x57,0x6A,0x35,0x21,0xDB,\
+    0xC0,0x6C,0x2D,0x47,0x3C,0x19,0x6F,\
+    0x35,0x2D,0x0F,0x79,0x22,0x28,0x77,\
+    0x6B,0x67,0x3E,0x00,0x36,0x43,0x36,\
+    0xD9,0xE0,0x6C,0x2D,0x47,0x3E,0x22,\
+    0x2F,0x77,0x65,0x39,0x30,0x45,0x77,\
+    0x55,0x20,0x05,0x08,0x41,0x68,0x57,\
+    0x24,0x67,0x3E,0x6B,0x68,0x05,0x6D,\
+    0x55,0x39,0xE8,0xA9,0x35,0x7D,0x67,\
+    0x3E,0x6D,0x68,0x09,0x6D,0x59,0x39,\
+    0x87,0x6E,0x12,0x8F,0x27,0x39,0x39,\
+    0x96,0x59,0x54,0x47,0x29,0x45,0x4C,\
+    0x57,0x6A,0x35,0x21,0xDB,0xC0,0x6C,\
+    0x2D,0x47,0x38,0x19,0x6F,0x35,0x2D,\
+    0x0F,0x79,0x22,0x28,0x77,0x6F,0x67,\
+    0x3E,0xD9,0xE0,0x6C,0x2D,0x47,0x3A,\
+    0x22,0x2F,0x77,0x69,0x69,0x00,0x39,\
+    0x78,0x0B,0x45,0x67,0x3E,0x4B,0x70,\
+    0x95,0xC5,0x5C,0x79,0x39,0x6D,0x57,\
+    0x6A,0x05,0x79,0x71,0x28,0x6C,0x2D,\
+    0x47,0x3F,0x19,0x6F,0x97,0xE5,0x5C,\
+    0x79,0x39,0x6F,0x6C,0x2A,0x47,0x31,\
+    0x47,0x61,0x0B,0x72,0x65,0x74,0x7B,\
+    0x59,0x0F,0x6D,0x67,0x70,0x19,0x6F,\
+    0x25,0x6D,0x35,0x39,0x2B,0x68,0xA6,\
+    0xAC,0x05,0x29,0x19,0x6F,0x23,0x6D,\
+    0x39,0x39,0x27,0x68,0xC9,0x6B,0x22,\
+    0xDB,0x59,0x68,0x77,0xE7,0x79,0x00,\
+    0x39,0x78,0x0B,0x59,0x37,0x39,0x09,\
+    0x6F,0x97,0xED,0x5C,0x79,0x39,0x69,\
+    0x6C,0x2A,0x47,0x3B,0x45,0x6B,0x09,\
+    0x72,0x65,0x74,0x7B,0x59,0x1F,0x6D,\
+    0x67,0x70,0x19,0x6E,0x25,0x6D,0x35,\
+    0x39,0x2B,0x68,0xA6,0xAC,0x05,0x29,\
+    0x19,0x6E,0x23,0x6D,0x3B,0x39,0x25,\
+    0x68,0xCB,0x6A,0x22,0xDB,0x59,0x26,\
+    0x6C,0x28,0x47,0x38,0x73,0x6D,0x11,\
+    0x63,0x5C,0x45,0x00,0x36,0x43,0x36,\
+    0x39,0x6A,0x77,0x6F,0x5C,0x45,0x39,\
+    0xE0,0x77,0x6E,0x27,0x35,0x22,0x14,\
+    0x77,0x6F,0x47,0x3B,0x22,0x14,0x77,\
+    0x59,0x47,0x3A,0x47,0x77,0x35,0x40,\
+    0x47,0x3D,0x45,0x6D,0x57,0x6A,0x1C,\
+    0x39,0x5A,0x76,0x35,0x58,0x2F,0x39,\
+    0x19,0x25,0x57,0x6B,0x15,0x39,0x4B,\
+    0x68,0x65,0x6D,0x96,0xF8,0x7B,0x78,\
+    0x57,0x6B,0x13,0x39,0x45,0x68,0x6B,\
+    0x6D,0xFB,0x3E,0x5C,0x8A,0x55,0x20,\
+    0x59,0x20,0x45,0x67,0xA9,0x74,0x99,\
+    0x20,0xE5,0x54,0x77,0x92,0x0D,0x3F,\
+    0x5F,0x9C,0x0B,0x6C,0xDB,0x3E,0x22,\
+    0x2E,0x77,0x72,0x26,0x39,0xC5,0xCC,\
+    0x16,0x6D,0xBB,0xD5,0x23,0xD4,0x77,\
+    0xED,0x5C,0x7D,0x39,0x69,0x6C,0x28,\
+    0x47,0x3B,0x47,0x6B,0x0D,0x72,0x05,\
+    0x0C,0x41,0x68,0x57,0x20,0x67,0x3E,\
+    0x6B,0x68,0x05,0x6D,0x55,0x39,0xE8,\
+    0xA9,0x35,0x7D,0x67,0x3E,0x6D,0x68,\
+    0x09,0x6D,0x59,0x39,0x87,0x6D,0x12,\
+    0x8F,0x65,0x74,0x23,0x71,0x09,0x62,\
+    0x9D,0x20,0xE3,0x71,0xA9,0x51,0x47,\
+    0xC6,0x73,0x6F,0x11,0x99,0x39,0x38,\
+    0xA7,0x6D,0x6C,0x2A,0x47,0x26,0x2A,\
+    0xAC,0x77,0x7D,0x3B,0x01,0x58,0x68,\
+    0x8B,0xB3,0x6F,0x39,0x19,0x6C,0x5F,\
+    0x72,0x6D,0x26,0x15,0x77,0x59,0x72,\
+    0x6D,0x66,0x77,0x1D,0x3F,0x8A,0x58,\
+    0x25,0x13,0x47,0x77,0x49,0x69,0x16,\
+    0x39,0x40,0x0F,0x6D,0x61,0x45,0x39,\
+    0x78,0x0B,0x5B,0x05,0x6A,0x13,0x2D,\
+    0x07,0x73,0xF7,0xBE,0x5C,0x68,0x77,\
+    0xCF,0x6F,0x45,0x00,0x36,0x43,0x36,\
+    0x39,0x97,0x82,0x4D,0x5F,0x85,0x39,\
+    0xF8,0x0D,0x6C,0x0D,0x3E,0x5E,0x76,\
+    0x0F,0x6D,0x67,0x75,0x49,0x68,0x67,\
+    0x68,0x96,0xF9,0x29,0xFD,0x07,0x6D,\
+    0x57,0x24,0xE1,0x28,0x25,0x68,0x37,\
+    0x39,0x29,0x6D,0xC9,0xED,0x23,0xDF,\
+    0x0F,0xEC,0x5D,0x6A,0x15,0x3C,0x21,\
+    0x6D,0xCD,0x51,0x47,0x26,0x5D,0x56,\
+    0x09,0x72,0x37,0x39,0x29,0x6D,0xE7,\
+    0xEA,0x4F,0x39,0x39,0x68,0x10,0x7F,\
+    0x67,0x75,0x49,0x68,0x67,0x68,0x96,\
+    0xF9,0x7B,0x78,0x6F,0x68,0x15,0x3D,\
+    0x81,0x6F,0x13,0x73,0x67,0x75,0x49,\
+    0x68,0x67,0x69,0x96,0xF9,0x7B,0x78,\
+    0x57,0x21,0x57,0x3D,0x6B,0x68,0x05,\
+    0x6D,0x55,0x39,0xE8,0xA9,0x35,0x7D,\
+    0x13,0x3D,0x81,0x6F,0x12,0x8F,0x6D,\
+    0x75,0x21,0x75,0x0D,0x62,0x9F,0x24,\
+    0xE1,0x75,0xAD,0x51,0x47,0xC6,0x73,\
+    0x6D,0x11,0x99,0x3D,0x38,0xA3,0x6C,\
+    0x6E,0x28,0x47,0x26,0x58,0x68,0x8C,\
+    0xE5,0x39,0x39,0x58,0x68,0x8C,0xA3,\
+    0x27,0x39,0x38,0x50,0x5F,0x11,0x47,\
+    0xC6,0xCC,0x48,0x6F,0xD1,0x47,0xA9,\
+    0x43,0x69,0x0B,0x6D,0x35,0x27,0x19,\
+    0x24,0x07,0x6D,0x57,0x3C,0xE8,0xA8,\
+    0x67,0xF8,0x37,0x39,0x29,0x75,0xAB,\
+    0x2D,0x15,0x3C,0x83,0x69,0x14,0x87,\
+    0x71,0xBF,0x1F,0x64,0x57,0x2E,0x15,\
+    0xBA,0x23,0x78,0x0B,0x62,0x67,0x7A,\
+    0x6B,0xEB,0xAD,0x7D,0x67,0x7A,0x6B,\
+    0xEB,0xAD,0x7D,0x9B,0x05,0x39,0x97,\
+    0x3D,0x6B,0x21,0xD5,0x45,0x69,0xEB,\
+    0x68,0x5E,0x7F,0x00,0x36,0x43,0x36,\
+    0x39,0x77,0x16,0x6D,0xBC,0x15,0x58,\
+    0x68,0x8C,0x19,0x6D,0x3E,0x1F,0x54,\
+    0x77,0x7D,0x3B,0x01,0x4B,0x8A,0xAD,\
+    0xEC,0x67,0x7A,0x29,0xFC,0x25,0x69,\
+    0x37,0x3A,0xF9,0x6C,0xF7,0x51,0x47,\
+    0xA9,0x21,0xE8,0x07,0x73,0xF7,0xBC,\
+    0x5C,0x68,0x77,0x19,0x39,0x38,0x73,\
+    0x6D,0x10,0x73,0x7B,0x2A,0x19,0x24,\
+    0x07,0x6D,0x57,0x3E,0xE8,0xA8,0x67,\
+    0xF8,0x37,0x39,0x29,0x75,0xAB,0x2D,\
+    0x15,0x3E,0x49,0x68,0x67,0x6A,0xFD,\
+    0xB9,0x5D,0x8E,0x41,0xEB,0x65,0x3C,\
+    0x6B,0x69,0x69,0x6C,0xF5,0x05,0x39,\
+    0x77,0x13,0x0D,0x3B,0x26,0x1B,0x24,\
+    0x07,0x6D,0x57,0x38,0xA9,0xEE,0x7F,\
+    0x6D,0x47,0x39,0x5E,0x7A,0x57,0x21,\
+    0x37,0x39,0x29,0x69,0xA6,0xAD,0x05,\
+    0x29,0x27,0x69,0x25,0x6A,0xF9,0x3F,\
+    0x5D,0x56,0x57,0x24,0x37,0x39,0x29,\
+    0x6F,0xA6,0xAD,0x05,0x29,0x19,0x21,\
+    0x67,0x6A,0x15,0x39,0x4B,0x68,0x65,\
+    0x6D,0x96,0xF8,0x7B,0x78,0x23,0x6A,\
+    0xF9,0x3F,0x5C,0x8A,0x17,0x73,0x39,\
+    0x38,0x05,0x7B,0x05,0x73,0x67,0x75,\
+    0x49,0x68,0x67,0x6A,0x96,0xF9,0x29,\
+    0xFD,0x07,0x6D,0x57,0x24,0xE5,0x28,\
+    0x25,0x6A,0xF9,0x38,0x5A,0x82,0x41,\
+    0xEB,0x65,0x75,0x27,0x71,0x0B,0x62,\
+    0x99,0x20,0xE7,0x71,0xAB,0x51,0x47,\
+    0xC6,0x73,0x6E,0x11,0x99,0x3B,0x38,\
+    0xA5,0x6F,0x6E,0x2B,0x47,0x26,0x58,\
+    0x68,0x8D,0x8B,0x69,0x39,0x73,0x6F,\
+    0x11,0x65,0x37,0x27,0x89,0xED,0x12,\
+    0x6D,0xB8,0x13,0x00,0x36,0x43,0x36,\
+    0x19,0x6F,0x51,0x72,0x6F,0x26,0x13,\
+    0x77,0x5B,0x72,0x69,0x26,0x1F,0x37,\
+    0x5F,0x32,0x6D,0x66,0x77,0x1D,0x39,\
+    0x1C,0x0F,0xDE,0x3E,0x6C,0x6B,0x42,\
+    0x47,0x2E,0x13,0x14,0x77,0x92,0xB2,\
+    0x19,0x2A,0xBD,0x77,0x7D,0x3B,0x01,\
+    0x23,0xD4,0x77,0xF5,0x5C,0x7F,0x39,\
+    0x69,0xCB,0x51,0x47,0x3A,0x5F,0x68,\
+    0x77,0x13,0x69,0x00,0x39,0x78,0x0B,\
+    0x41,0x67,0x3E,0x4B,0x70,0x95,0xC5,\
+    0x5C,0x79,0x39,0x6A,0x57,0x6A,0x05,\
+    0x79,0x71,0x28,0x6C,0x2D,0x47,0x3A,\
+    0x19,0x6F,0x97,0xE5,0x5C,0x79,0x39,\
+    0x6C,0x6C,0x2A,0x47,0x3C,0x17,0x51,\
+    0x77,0x7D,0x3B,0x09,0x19,0x6F,0x05,\
+    0x75,0xA5,0x91,0x22,0x28,0x77,0x6B,\
+    0x67,0x3E,0x7B,0x28,0x3F,0x2D,0x5C,\
+    0x79,0x39,0x6F,0x57,0x6A,0xA7,0xB1,\
+    0x22,0x28,0x77,0x65,0x5C,0x7E,0x39,\
+    0x61,0x0D,0x72,0x65,0x74,0x7B,0x45,\
+    0x77,0x67,0x39,0x32,0x83,0x54,0x77,\
+    0x66,0x24,0x75,0x7B,0x59,0x0F,0x6D,\
+    0x67,0x70,0x19,0x6F,0x25,0x6D,0x35,\
+    0x39,0x2B,0x68,0xA6,0xAC,0x05,0x29,\
+    0x19,0x6F,0x23,0x6D,0x39,0x39,0x27,\
+    0x68,0xC9,0x68,0x22,0xDB,0x59,0x44,\
+    0x0D,0x72,0x05,0x14,0x39,0x6A,0x09,\
+    0x6E,0x67,0x3C,0x6E,0x68,0x14,0x73,\
+    0x05,0x0C,0x41,0x68,0x57,0x20,0x67,\
+    0x3E,0x6B,0x68,0x05,0x6D,0x55,0x39,\
+    0xE8,0xA9,0x35,0x7D,0x67,0x3E,0x6D,\
+    0x68,0x09,0x6D,0x59,0x39,0x87,0x6D,\
+    0x12,0x8F,0x65,0x74,0x27,0x71,0x0D,\
+    0x62,0x99,0x20,0x00,0x36,0x43,0x36,\
+    0xE7,0x71,0xAD,0x51,0x47,0xC6,0x73,\
+    0x6D,0x11,0x99,0x37,0x38,0xA9,0x6F,\
+    0x59,0x6D,0x5C,0x7E,0x39,0x77,0x16,\
+    0x6D,0xBE,0xEF,0x17,0x68,0x3D,0x6A,\
+    0x21,0x39,0x39,0xEE,0x16,0x6D,0xBE,\
+    0xBF,0x23,0xD4,0x77,0xED,0x5C,0x45,\
+    0x39,0xF0,0x77,0x6C,0x5C,0x7F,0x39,\
+    0x6A,0x09,0x6E,0x3B,0x26,0x7B,0x5D,\
+    0x0F,0x6D,0x67,0x74,0x19,0x6F,0x25,\
+    0x6D,0x35,0x39,0x2B,0x68,0xA6,0xAC,\
+    0x05,0x29,0x19,0x6F,0x23,0x6D,0x39,\
+    0x39,0x27,0x68,0xC9,0x6B,0x22,0xDB,\
+    0x1B,0x25,0x6B,0x74,0x39,0x36,0xE5,\
+    0x71,0xAB,0x74,0x99,0x05,0x39,0x97,\
+    0x3D,0x6A,0x21,0xCD,0x49,0x69,0xE7,\
+    0x6B,0x6B,0x39,0x22,0x2E,0x77,0x72,\
+    0x54,0xC5,0x39,0xF0,0x77,0x7D,0x3B,\
+    0x01,0x58,0x68,0x8E,0x1F,0x69,0x39,\
+    0x73,0x6F,0x11,0x4F,0x3B,0x39,0x25,\
+    0x51,0x77,0x92,0xB2,0x3D,0xD8,0x26,\
+    0x6B,0x54,0x47,0xC6,0xCC,0x6D,0xCB,\
+    0x14,0x47,0x29,0x45,0x5E,0x10,0x67,\
+    0x39,0x38,0x2A,0x94,0x77,0x6C,0x47,\
+    0x29,0x45,0x51,0x57,0x6A,0x6D,0x26,\
+    0x15,0x77,0x59,0x72,0x6D,0x66,0x77,\
+    0x1D,0x3F,0x8A,0x78,0x39,0x23,0x47,\
+    0x77,0x72,0x3B,0x39,0x4D,0x6B,0x01,\
+    0x6C,0x3F,0x46,0x63,0xEC,0x58,0x68,\
+    0x68,0x3D,0x58,0x68,0x8D,0x41,0x17,\
+    0xB6,0x17,0x68,0x3D,0x6A,0x21,0x01,\
+    0x73,0x6D,0x11,0x79,0x0F,0x41,0x3B,\
+    0xE0,0x58,0x51,0x47,0x29,0x6F,0xA8,\
+    0x16,0x6D,0xBB,0x07,0x17,0x68,0x27,\
+    0xE2,0x27,0x2B,0x00,0x36,0x43,0x36,\
+    0x71,0x10,0x75,0x59,0x68,0x05,0x39,\
+    0x78,0x23,0xE5,0x26,0x39,0xC5,0x42,\
+    0x59,0x6D,0x17,0xB6,0x73,0x6F,0x11,\
+    0x67,0x68,0x3C,0x58,0x68,0x89,0x45,\
+    0x69,0x39,0x61,0xE7,0xC9,0x6E,0x21,\
+    0x33,0x6B,0x6E,0x16,0x6D,0xBF,0xAF,\
+    0x85,0x6A,0x12,0xC7,0x67,0x3E,0x1D,\
+    0x77,0x51,0x72,0x6F,0x26,0x13,0x77,\
+    0x5B,0x72,0x69,0x26,0x77,0x1D,0x3F,\
+    0x8A,0x58,0x39,0x13,0x47,0x77,0x75,\
+    0x6F,0x16,0x39,0x74,0x59,0x42,0x47,\
+    0x19,0x1A,0xAC,0x77,0x7D,0x3B,0x19,\
+    0x1A,0xAF,0x77,0x7D,0x3B,0x1D,0x1A,\
+    0xAD,0x77,0x7D,0x3B,0x11,0x1A,0xAF,\
+    0x77,0x7D,0x3B,0x15,0x19,0x6D,0xA7,\
+    0xEA,0x14,0xB9,0x1A,0xA8,0x77,0x7D,\
+    0x3B,0x09,0x41,0x69,0x0D,0x6E,0x61,\
+    0x05,0x39,0x68,0x77,0xE1,0x05,0x9E,\
+    0x16,0x6B,0x16,0x6D,0xBE,0xB1,0x17,\
+    0x68,0x27,0xE2,0xF9,0x3C,0x5F,0x66,\
+    0x0B,0x6C,0x05,0x9E,0x58,0x68,0x88,\
+    0x59,0x69,0x39,0x61,0xE7,0x17,0x6F,\
+    0x3B,0x39,0x73,0x6F,0x11,0x45,0xFB,\
+    0x3D,0x5E,0xB0,0x58,0x54,0x47,0x29,\
+    0x45,0x40,0x58,0x54,0x47,0x29,0x45,\
+    0x48,0x16,0x6D,0xBC,0xBD,0x69,0xE7,\
+    0x59,0x6D,0x0D,0x3E,0x5F,0x64,0x07,\
+    0x6E,0x68,0x39,0x58,0x68,0x8A,0xED,\
+    0x69,0x39,0x61,0xE7,0x57,0x6A,0x61,\
+    0x26,0x11,0x77,0x5D,0x72,0x6B,0x26,\
+    0x17,0x77,0x39,0x18,0x68,0x3E,0x17,\
+    0x47,0x77,0x65,0x67,0x16,0x39,0x64,\
+    0x54,0xAA,0x47,0x29,0x45,0x44,0x54,\
+    0xAD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x45,0x58,0x3D,0x54,0x47,0x29,0x5A,\
+    0x90,0x11,0x75,0x26,0x39,0xC1,0xE4,\
+    0x59,0x6D,0x0D,0x3E,0x5F,0x62,0x64,\
+    0x91,0x47,0x38,0x39,0x78,0x14,0x95,\
+    0x27,0x3D,0x19,0x6F,0x17,0x7D,0x05,\
+    0x9E,0x71,0x10,0x77,0xCD,0x26,0x39,\
+    0xC1,0x9E,0x59,0x6D,0x67,0x3E,0x69,\
+    0xE7,0x59,0x72,0x09,0x4C,0x77,0x19,\
+    0x3F,0x8A,0x58,0x39,0x07,0x47,0x77,\
+    0x77,0x05,0x00,0x39,0x78,0x0B,0x54,\
+    0x74,0xFE,0x39,0x78,0x0B,0x59,0x0D,\
+    0x00,0x39,0x78,0x14,0x95,0x21,0x21,\
+    0x58,0x68,0x8F,0x2F,0x69,0x39,0x73,\
+    0x6F,0x11,0x67,0x54,0xC5,0x39,0x69,\
+    0x77,0x7D,0x24,0xC1,0x59,0x6C,0x57,\
+    0x6A,0x27,0x0F,0x4F,0x69,0x0F,0x6E,\
+    0x6D,0x05,0x39,0x68,0x77,0xE5,0x05,\
+    0x9E,0x16,0x6D,0x16,0x6D,0xBF,0x9D,\
+    0x17,0x68,0x27,0xE2,0xF9,0x3D,0x5F,\
+    0x78,0x0B,0x6C,0x37,0x38,0x16,0x68,\
+    0x16,0x6D,0xB9,0x77,0x17,0x68,0x2F,\
+    0xE2,0x27,0x3B,0x45,0x68,0x3D,0x6A,\
+    0x21,0x3D,0x85,0x6B,0x10,0xBB,0x67,\
+    0x3E,0x1F,0x77,0x5F,0x72,0x6D,0x26,\
+    0x15,0x77,0x59,0x72,0x09,0x4C,0x77,\
+    0x19,0x39,0x3B,0x47,0x39,0x16,0x6F,\
+    0x3D,0x54,0x47,0x29,0x5A,0x90,0x11,\
+    0x75,0x26,0x39,0xCE,0xB0,0x59,0x6D,\
+    0x0D,0x3E,0x5F,0x62,0x64,0x91,0x47,\
+    0x38,0x39,0x78,0x14,0x95,0x27,0x3D,\
+    0x19,0x6F,0x17,0x75,0x68,0x17,0x39,\
+    0x78,0x58,0x43,0x47,0x35,0x16,0x46,\
+    0x77,0x65,0x26,0x39,0xC7,0x18,0x59,\
+    0x6D,0x67,0x3E,0x00,0x36,0x43,0x36,\
+    0x76,0x87,0x77,0x61,0x69,0x26,0x77,\
+    0x36,0x39,0x18,0x57,0x00,0x39,0x78,\
+    0x0B,0x54,0x09,0x4C,0x77,0x19,0x39,\
+    0x1C,0x09,0x6F,0xC6,0x90,0x3F,0x8A,\
+    0x78,0x3D,0x45,0x6A,0x57,0x03,0x47,\
+    0x31,0x49,0x68,0x67,0x45,0x47,0x38,\
+    0x04,0x28,0x88,0x91,0x77,0x17,0xC6,\
+    0x94,0x96,0x25,0x7A,0x79,0xC6,0x94,\
+    0x57,0x03,0x47,0x31,0x49,0x68,0x67,\
+    0x45,0x47,0x3B,0x04,0x28,0x88,0x93,\
+    0x79,0x17,0xC6,0x94,0xF9,0x03,0xB8,\
+    0xC7,0x4D,0x68,0xC9,0x11,0x47,0x31,\
+    0x5B,0x68,0x76,0xD7,0x67,0x3E,0x89,\
+    0x14,0x77,0x65,0x25,0x39,0x39,0xD6,\
+    0x47,0x56,0x45,0x3F,0x77,0x93,0x77,\
+    0x6F,0x47,0x2B,0x39,0x4A,0x77,0x5B,\
+    0x47,0x73,0x39,0x34,0x77,0x03,0x47,\
+    0xB9,0x39,0xFA,0x77,0xC9,0x79,0x05,\
+    0x38,0x68,0xEC,0xA0,0x65,0x45,0x39,\
+    0x68,0xF7,0x6D,0x27,0x39,0x39,0xFC,\
+    0x49,0x51,0xB9,0x39,0x13,0x14,0x77,\
+    0x6D,0xC7,0x39,0x1B,0x14,0x77,0x69,\
+    0x47,0x39,0x59,0x68,0x77,0xED,0x79,\
+    0x05,0x3B,0x68,0x5D,0x11,0x47,0x39,\
+    0xB9,0x68,0x55,0x11,0x47,0x38,0x39,\
+    0x68,0x17,0x6D,0x47,0x55,0x07,0x54,\
+    0x73,0x6D,0x6D,0x45,0x39,0x69,0x77,\
+    0x6D,0x65,0x45,0x39,0x69,0xF7,0x6D,\
+    0x27,0x61,0x07,0x54,0x7F,0x6D,0x6D,\
+    0x45,0x39,0x69,0xF7,0x6D,0x65,0x45,\
+    0x39,0x6A,0x77,0x6D,0x27,0x7F,0x07,\
+    0x54,0x67,0x6D,0x6D,0x45,0x39,0x6A,\
+    0x77,0x6D,0x65,0x45,0x39,0x6A,0xF7,\
+    0x6D,0x27,0x0D,0x00,0x36,0x43,0x36,\
+    0x07,0x54,0x57,0x6D,0x6D,0x45,0x39,\
+    0x6A,0xF7,0x6D,0x65,0x45,0x39,0x6B,\
+    0x77,0x6D,0x27,0x1B,0x07,0x54,0x37,\
+    0x6D,0x6D,0x45,0x39,0x6B,0x77,0x6D,\
+    0x65,0x45,0x39,0x6B,0xF7,0x6D,0x27,\
+    0x29,0x07,0x54,0xF7,0x6D,0x6D,0x45,\
+    0x39,0x6B,0xF7,0x6D,0x65,0x45,0x39,\
+    0x6C,0x77,0x6D,0x74,0xC5,0x31,0x68,\
+    0x77,0x92,0xBF,0x39,0x3B,0x11,0xC8,\
+    0x92,0x47,0xC6,0xC1,0x68,0x44,0x91,\
+    0x65,0x05,0x39,0x97,0x8F,0x61,0x37,\
+    0x0F,0xB9,0x2F,0x44,0xAD,0x47,0xC6,\
+    0xC1,0x66,0x4D,0xD1,0xB8,0xC6,0x41,\
+    0x69,0xCF,0x51,0x47,0x38,0x5F,0x68,\
+    0x77,0xDF,0xFB,0x05,0x39,0x6A,0x11,\
+    0x6D,0x47,0x93,0x2A,0x94,0x77,0x38,\
+    0x47,0xC6,0xC3,0x4F,0x64,0x91,0x47,\
+    0x93,0x39,0x97,0x8D,0x4A,0x47,0x40,\
+    0x39,0x69,0x77,0x92,0xBF,0x37,0x4F,\
+    0x68,0x3D,0x14,0x47,0xC6,0xC1,0x64,\
+    0x1D,0x4B,0xFB,0x05,0x39,0x6A,0x11,\
+    0x4D,0x54,0xC5,0x39,0x3D,0x77,0x92,\
+    0xBD,0x1E,0x2A,0x94,0x77,0xC7,0x47,\
+    0xC6,0xC3,0x4F,0x57,0x6E,0x15,0xBA,\
+    0x89,0xD4,0x78,0x92,0xB8,0xC6,0x5C,\
+    0xBE,0x0B,0x6C,0x27,0xEB,0x3B,0x11,\
+    0x88,0x93,0x47,0xC6,0xC1,0x66,0x0F,\
+    0x6D,0x3D,0x39,0x82,0xA1,0x13,0x5B,\
+    0x0D,0x3D,0x5F,0x5A,0xCB,0x51,0x47,\
+    0x3B,0x5F,0x44,0x7B,0x38,0xB8,0xC6,\
+    0x5E,0x6C,0x0F,0x6C,0x27,0xD1,0x6D,\
+    0xE5,0x57,0x68,0x15,0xBC,0x89,0xD4,\
+    0x77,0x6D,0x46,0x39,0x5A,0xB2,0x0D,\
+    0x6D,0x54,0xC5,0x00,0x36,0x43,0x36,\
+    0x39,0x3D,0x77,0x92,0xBD,0x1E,0x2A,\
+    0x94,0x77,0xC7,0x47,0xC6,0xC3,0x4F,\
+    0x17,0xAB,0xFC,0xF0,0x5F,0x6E,0x0B,\
+    0x6D,0x27,0x39,0xC6,0x32,0x57,0x6F,\
+    0x15,0xBB,0x62,0xE8,0x12,0x6D,0xB8,\
+    0x69,0x45,0x69,0x17,0x6D,0xB8,0x73,\
+    0x3B,0x11,0x88,0x90,0x47,0xC6,0xC1,\
+    0x66,0x77,0x14,0x07,0x39,0x39,0x97,\
+    0x8F,0x6D,0x27,0x3B,0x45,0x69,0x57,\
+    0x03,0x47,0x35,0x28,0x2E,0x77,0x6F,\
+    0x0B,0xD7,0x19,0x94,0x88,0xB1,0x09,\
+    0x67,0x77,0x1D,0x39,0x1C,0x09,0x6F,\
+    0xC6,0x90,0x35,0x03,0xB8,0xC7,0x49,\
+    0x68,0x67,0x43,0x47,0x32,0x04,0x28,\
+    0x88,0x91,0x67,0x17,0xC6,0x94,0x95,\
+    0xE5,0x6A,0x79,0xC6,0x94,0x57,0x43,\
+    0xB8,0xC5,0x77,0x36,0x39,0x18,0x45,\
+    0x0D,0x77,0x19,0x39,0x3B,0xB8,0x49,\
+    0x71,0x8F,0x48,0x51,0x6D,0x57,0x39,\
+    0x60,0x5F,0x03,0x47,0x29,0x1F,0x06,\
+    0x77,0x79,0x39,0x39,0x41,0x69,0x57,\
+    0x51,0xB8,0x39,0x31,0x68,0xA7,0xE1,\
+    0x35,0x79,0x8B,0xE8,0x14,0x79,0x6A,\
+    0x75,0xC6,0x1C,0x75,0xC3,0x47,0x39,\
+    0x36,0x97,0x88,0x19,0x6F,0x57,0xC6,\
+    0x1C,0x49,0x51,0x67,0x39,0x73,0xFB,\
+    0x10,0x6D,0x46,0x2D,0x80,0x94,0x77,\
+    0x69,0x47,0x39,0x5D,0x68,0x76,0x67,\
+    0x67,0x35,0x45,0x57,0xBB,0xED,0x61,\
+    0x35,0xAF,0xEE,0x03,0x6D,0xF3,0x05,\
+    0x39,0xE8,0x13,0x7F,0x67,0x77,0x49,\
+    0x68,0x67,0x6F,0x96,0xF9,0x28,0x14,\
+    0x77,0x92,0xB8,0x41,0x6B,0x6A,0x17,\
+    0x85,0x37,0x27,0x00,0x36,0x43,0x36,\
+    0x89,0xFB,0x15,0x65,0x3D,0x27,0x49,\
+    0x8A,0xA6,0xFE,0x27,0x3D,0x13,0x7B,\
+    0x35,0xFE,0x33,0x39,0x8D,0x6D,0x13,\
+    0x75,0x67,0x77,0xE8,0xAE,0x07,0x6D,\
+    0x57,0x3B,0xE8,0xA8,0x07,0x6D,0x57,\
+    0x3B,0x28,0x1D,0x7F,0x6C,0xB8,0x41,\
+    0x6B,0x6A,0x17,0x89,0x68,0x35,0x58,\
+    0x68,0x77,0xAF,0x1F,0xB6,0x04,0x28,\
+    0x88,0x93,0x37,0x79,0xA9,0xEE,0x5A,\
+    0x2D,0xB8,0xC1,0x49,0x68,0x47,0x6A,\
+    0x68,0x39,0x49,0x28,0x58,0x6D,0x68,\
+    0x3A,0x49,0x68,0x47,0x43,0xB8,0xC7,\
+    0x16,0x68,0x3F,0x03,0xB8,0x41,0x58,\
+    0x68,0x77,0xD1,0x08,0xD6,0x39,0x7C,\
+    0x5F,0x6D,0x37,0x39,0x29,0x6D,0xC7,\
+    0xC3,0xB8,0xC1,0x5A,0x54,0x3D,0x69,\
+    0x21,0x01,0x4B,0x28,0xA1,0xEC,0x68,\
+    0x3A,0x58,0x68,0x77,0x17,0x1F,0xB6,\
+    0x04,0x28,0x88,0x93,0x37,0x39,0x09,\
+    0x6F,0x58,0x6D,0x37,0x79,0x16,0x68,\
+    0x58,0x6E,0x37,0x39,0x09,0x46,0x88,\
+    0x93,0x68,0x39,0x19,0x54,0x88,0x92,\
+    0xB8,0x41,0x71,0x1E,0x7F,0x2D,0x26,\
+    0x39,0x39,0x1E,0x38,0x82,0x47,0x2D,\
+    0x11,0x68,0x3D,0x2A,0x20,0x3F,0xB6,\
+    0x11,0x77,0x92,0xBF,0x39,0x1D,0x24,\
+    0x03,0x6D,0xF3,0x3C,0x5D,0x70,0xCF,\
+    0x51,0x47,0x38,0x5E,0x7A,0x07,0x6D,\
+    0x57,0x3B,0x2B,0x72,0xC5,0x58,0x4F,\
+    0x38,0x5E,0x6A,0x0F,0x6C,0x15,0x3B,\
+    0x59,0x8C,0x3D,0x2A,0x20,0x33,0x09,\
+    0x6F,0x31,0x2D,0x86,0x40,0x39,0x97,\
+    0x8F,0x6D,0x67,0x57,0x39,0x64,0x66,\
+    0x29,0x47,0x3B,0x00,0x36,0x43,0x36,\
+    0x75,0x86,0x4B,0x91,0xB8,0x71,0x77,\
+    0x36,0x39,0x18,0x09,0x6F,0xC6,0x90,\
+    0x57,0x51,0x47,0x3A,0xB9,0x68,0xB7,\
+    0xC3,0x47,0x31,0xE9,0xE8,0x5A,0x2D,\
+    0xB8,0xC5,0x09,0x54,0x76,0x6D,0x75,\
+    0x17,0xC6,0x94,0x94,0x05,0x09,0x67,\
+    0x77,0x1D,0x39,0x1C,0x09,0x6F,0xC6,\
+    0x90,0x3F,0x8A,0x48,0x3D,0x17,0x46,\
+    0x77,0x7D,0x3F,0x3B,0x15,0x46,0x77,\
+    0x79,0x9B,0xBE,0x0A,0x94,0x7F,0x6D,\
+    0x47,0xC6,0xC1,0x68,0x75,0x14,0xF8,\
+    0xC6,0x39,0x97,0x8F,0x6D,0x77,0x17,\
+    0x39,0x72,0xF6,0x14,0x47,0xC6,0xC1,\
+    0x68,0x44,0x91,0x67,0x32,0x39,0x97,\
+    0x8F,0x61,0x37,0x0B,0xB9,0x06,0x77,\
+    0x63,0x74,0xF9,0x39,0x97,0x8F,0x63,\
+    0x45,0x40,0xC6,0x93,0x77,0x92,0xBF,\
+    0x37,0x13,0x2F,0x55,0x03,0x47,0x31,\
+    0x82,0xAE,0x13,0x69,0x5D,0xE0,0x59,\
+    0x90,0x5D,0x2A,0x65,0x57,0x39,0x60,\
+    0x05,0x6D,0xFF,0x05,0x39,0x6A,0x11,\
+    0x6D,0x47,0x4F,0x39,0x11,0x77,0x6C,\
+    0x47,0xC6,0xC1,0x66,0x0D,0x6D,0x0D,\
+    0x40,0x39,0x97,0x8F,0x61,0x2D,0x1F,\
+    0x81,0x54,0x77,0x6F,0x21,0x19,0x2A,\
+    0x94,0x77,0x38,0x47,0xC6,0xC3,0x4F,\
+    0x64,0x91,0x47,0x93,0x39,0x97,0x8D,\
+    0x4A,0x67,0x3C,0x6B,0xED,0xC7,0xD1,\
+    0x47,0x39,0xC6,0x97,0x12,0xBB,0x3F,\
+    0x38,0x59,0xBA,0x75,0x14,0xB8,0xC7,\
+    0x39,0x97,0x8F,0x63,0x67,0x7E,0x24,\
+    0x38,0x88,0x92,0x67,0x7E,0x24,0x00,\
+    0x77,0x4D,0xB8,0xC6,0x82,0xAE,0x15,\
+    0x67,0x0D,0x2C,0x00,0x36,0x43,0x36,\
+    0x5F,0x6E,0x25,0xE0,0x15,0xB0,0x59,\
+    0x9A,0xCC,0xAB,0x22,0x3B,0x41,0x68,\
+    0x47,0x6C,0x15,0x78,0x89,0x14,0xCC,\
+    0xED,0x22,0x39,0xC6,0xE4,0x0F,0x6C,\
+    0x27,0x39,0xC6,0xEE,0x75,0x14,0xB8,\
+    0xC4,0x39,0x97,0x8F,0x63,0x47,0x40,\
+    0x79,0x68,0x77,0x92,0xBF,0x39,0x3B,\
+    0x11,0xA8,0x92,0x47,0xC6,0xC1,0x68,\
+    0x57,0x69,0x0B,0xD7,0x19,0x98,0x88,\
+    0x89,0x09,0x67,0x77,0x1D,0x75,0xE5,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x68,\
+    0x3E,0x39,0x14,0x70,0x6D,0x67,0x45,\
+    0x39,0x97,0x8D,0x6D,0x05,0x51,0x39,\
+    0x32,0x75,0x45,0x47,0xC1,0x39,0x3A,\
+    0x77,0x45,0x47,0x38,0x39,0x3A,0x46,\
+    0x11,0x77,0xED,0x39,0x32,0x66,0x11,\
+    0x47,0x79,0x39,0x3B,0x77,0x05,0x46,\
+    0x29,0x39,0x38,0x59,0x51,0x47,0x29,\
+    0x65,0x38,0x39,0x16,0x3F,0x38,0x3B,\
+    0x14,0x8F,0x92,0x69,0x26,0x77,0x1D,\
+    0x3F,0x8A,0x87,0xF9,0x77,0xD1,0x77,\
+    0x7D,0x63,0x65,0x19,0x77,0x55,0x72,\
+    0x67,0x66,0x1B,0x37,0x39,0x1E,0x0F,\
+    0xDE,0xF9,0xA8,0x75,0x14,0xB0,0xC6,\
+    0x39,0x97,0x8D,0x3D,0x09,0x80,0x39,\
+    0x78,0x43,0xC5,0x67,0x26,0x1B,0x77,\
+    0x57,0x32,0x65,0x66,0x77,0x1B,0x3F,\
+    0x8A,0x87,0xF9,0x7B,0xCF,0x39,0xD4,\
+    0x47,0x29,0x0F,0x04,0x2F,0xE2,0x67,\
+    0x26,0x1B,0x77,0x57,0x32,0x65,0x66,\
+    0x77,0x1B,0x3F,0x8A,0x87,0xF9,0x49,\
+    0x69,0x58,0x6D,0x09,0x80,0x39,0x78,\
+    0x41,0x01,0x1F,0xB6,0x19,0x77,0x55,\
+    0x72,0x67,0x66,0x00,0x36,0x43,0x36,\
+    0x1B,0x37,0x39,0x1E,0x09,0x48,0x71,\
+    0x8F,0xB7,0xAD,0x37,0x3B,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x0F,0x04,0x2F,\
+    0xE2,0x67,0x26,0x1B,0x77,0x57,0x32,\
+    0x65,0x66,0x77,0x1B,0x39,0x1C,0x0F,\
+    0xDE,0xF9,0xA8,0x07,0x6E,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x71,0x55,0x61,\
+    0xE7,0x57,0x72,0x65,0x26,0x19,0x37,\
+    0x55,0x32,0x09,0x4A,0x77,0x19,0x3F,\
+    0x8A,0x87,0xF9,0x49,0x6C,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x41,0x01,0x1F,\
+    0xB6,0x19,0x77,0x55,0x72,0x67,0x66,\
+    0x1B,0x37,0x39,0x1E,0x09,0x48,0x71,\
+    0x8F,0xB7,0xAD,0x37,0x3C,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x0F,0x04,0x2F,\
+    0xE2,0x67,0x26,0x1B,0x77,0x57,0x32,\
+    0x65,0x66,0x77,0x1B,0x39,0x1C,0x0F,\
+    0xDE,0xF9,0xA8,0x07,0x6B,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x71,0x55,0x61,\
+    0xE7,0x57,0x72,0x65,0x26,0x19,0x37,\
+    0x55,0x32,0x09,0x4A,0x77,0x19,0x3F,\
+    0x8A,0x87,0xF9,0x49,0x6F,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x41,0x01,0x1F,\
+    0xB6,0x19,0x77,0x55,0x72,0x67,0x66,\
+    0x1B,0x37,0x39,0x1E,0x09,0x48,0x71,\
+    0x8F,0xB7,0xAD,0x37,0x31,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x0F,0x04,0x2F,\
+    0xE2,0x67,0x26,0x1B,0x77,0x57,0x32,\
+    0x65,0x66,0x77,0x1B,0x39,0x1C,0x0F,\
+    0xDE,0xF9,0xA8,0x07,0x64,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x71,0x55,0x61,\
+    0xE7,0x57,0x72,0x65,0x26,0x19,0x37,\
+    0x55,0x32,0x09,0x4A,0x77,0x19,0x3F,\
+    0x8A,0x87,0xF9,0x00,0x36,0x43,0x36,\
+    0x49,0x62,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x41,0x01,0x1F,0xB6,0x19,0x77,\
+    0x55,0x72,0x67,0x66,0x1B,0x37,0x39,\
+    0x1E,0x09,0x48,0x71,0x8F,0xB7,0xAD,\
+    0x37,0x32,0x16,0x68,0x39,0xD4,0x47,\
+    0x29,0x0F,0x04,0x2F,0xE2,0x67,0x26,\
+    0x1B,0x77,0x57,0x32,0x65,0x66,0x77,\
+    0x1B,0x39,0x1C,0x0F,0xDE,0xF9,0xA8,\
+    0x07,0x61,0x68,0x39,0x77,0xD1,0x77,\
+    0x7D,0x71,0x55,0x61,0xE7,0x57,0x72,\
+    0x65,0x26,0x19,0x37,0x55,0x32,0x09,\
+    0x4A,0x77,0x19,0x3F,0x8A,0x87,0xF9,\
+    0x49,0x65,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x41,0x01,0x1F,0xB6,0x19,0x77,\
+    0x55,0x72,0x67,0x66,0x1B,0x37,0x39,\
+    0x1E,0x09,0x48,0x71,0x8F,0xB7,0xAD,\
+    0x37,0x37,0x16,0x68,0x39,0xD4,0x47,\
+    0x29,0x0F,0x04,0x2F,0xE2,0x67,0x26,\
+    0x1B,0x77,0x57,0x32,0x65,0x66,0x77,\
+    0x1B,0x39,0x1C,0x0F,0xDE,0xF9,0xA8,\
+    0x07,0x62,0x68,0x39,0x77,0xD1,0x77,\
+    0x7D,0x71,0x55,0x61,0xE7,0x57,0x72,\
+    0x65,0x26,0x19,0x37,0x55,0x32,0x09,\
+    0x4A,0x77,0x19,0x3F,0x8A,0x87,0xF9,\
+    0x49,0x78,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x41,0x01,0x1F,0xB6,0x19,0x77,\
+    0x55,0x72,0x67,0x66,0x1B,0x37,0x39,\
+    0x1E,0x09,0x48,0x71,0x8F,0xB7,0xAD,\
+    0x37,0x28,0x16,0x68,0x39,0xD4,0x47,\
+    0x29,0x0F,0x04,0x2F,0xE2,0x67,0x26,\
+    0x1B,0x77,0x57,0x32,0x65,0x66,0x77,\
+    0x1B,0x39,0x1C,0x0F,0xDE,0xF9,0xA8,\
+    0x07,0x7F,0x68,0x39,0x77,0xD1,0x77,\
+    0x7D,0x71,0x55,0x00,0x36,0x43,0x36,\
+    0x61,0xE7,0x57,0x72,0x65,0x26,0x19,\
+    0x37,0x55,0x32,0x09,0x4A,0x77,0x19,\
+    0x3F,0x8A,0x48,0x25,0x39,0x14,0x70,\
+    0x6D,0x6D,0x45,0x39,0x97,0x8D,0x6D,\
+    0x5C,0x45,0x39,0x3D,0x77,0x38,0x5C,\
+    0x45,0x39,0xC2,0x77,0x38,0x79,0x05,\
+    0x8F,0x72,0x44,0xAA,0x47,0x2A,0x39,\
+    0x16,0x4F,0x51,0xC7,0x39,0x43,0xC2,\
+    0x0B,0x38,0x6F,0x45,0x39,0x7B,0x77,\
+    0x6D,0x00,0xD5,0x39,0xD9,0x7F,0xFE,\
+    0x47,0x39,0x22,0x2E,0x77,0x38,0x5C,\
+    0x7C,0x39,0x3D,0x4E,0x2A,0x47,0x47,\
+    0x68,0xA4,0x88,0x83,0x39,0xC6,0x6A,\
+    0xEF,0x11,0x91,0x6F,0x26,0x13,0x77,\
+    0x5B,0x72,0x69,0x26,0x1F,0x37,0x5F,\
+    0x32,0x6D,0x66,0x77,0x1D,0x64,0x91,\
+    0x47,0x6C,0x39,0x97,0x8D,0x38,0x54,\
+    0xC5,0x39,0xC2,0x77,0x92,0xBD,0x6C,\
+    0x77,0x1D,0x39,0x1C,0x74,0xC5,0x8F,\
+    0x72,0x77,0x7E,0x47,0x47,0x77,0x1D,\
+    0x39,0x1C,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0x9D,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xA8,0x77,\
+    0x7D,0x1E,0xE1,0x39,0x78,0x2E,0x99,\
+    0x47,0x29,0x63,0x78,0x77,0x7D,0x1D,\
+    0x15,0x39,0x78,0x2D,0x25,0x47,0x29,\
+    0x63,0x0C,0x77,0x7D,0x1D,0xB9,0x39,\
+    0x78,0x2D,0xF1,0x47,0x29,0x63,0xD0,\
+    0x77,0x7D,0x1D,0xED,0x39,0x78,0x2D,\
+    0x9D,0x47,0x29,0x62,0x64,0x77,0x7D,\
+    0x1C,0x11,0x39,0x78,0x2C,0x29,0x47,\
+    0x29,0x62,0x08,0x77,0x7D,0x1C,0x45,\
+    0x39,0x78,0x2C,0xF5,0x47,0x29,0x62,\
+    0xDC,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x39,\
+    0x3B,0xB8,0xC1,0x00,0x36,0x43,0x36,\
+    0x71,0x8F,0x68,0x69,0x7D,0x17,0x39,\
+    0x62,0x41,0x51,0x47,0x39,0x83,0x14,\
+    0x77,0x64,0x22,0x3F,0x49,0x69,0x17,\
+    0x6D,0x47,0x95,0x19,0x14,0x77,0x7D,\
+    0x24,0x8D,0x49,0x68,0x47,0x68,0x6D,\
+    0x49,0x35,0x68,0x44,0x91,0xED,0x93,\
+    0x39,0x68,0x7D,0xC7,0x74,0xC5,0x6C,\
+    0x3D,0x77,0x6D,0x42,0x6D,0x0A,0x94,\
+    0xF7,0xED,0x47,0x39,0x33,0xC2,0x44,\
+    0x91,0xED,0x93,0x39,0x68,0x7D,0xC7,\
+    0x74,0xC5,0x6C,0x3D,0x77,0x6D,0x42,\
+    0x6D,0x03,0xD4,0x47,0x5D,0x6D,0x00,\
+    0x39,0x7B,0x77,0x05,0x35,0x93,0x41,\
+    0x3D,0x57,0x11,0x47,0x2A,0x39,0x68,\
+    0x55,0x11,0x47,0xC6,0xC3,0x68,0x47,\
+    0x51,0xF1,0x23,0x2A,0x2C,0x77,0x38,\
+    0x54,0x78,0x39,0x3D,0x46,0x2D,0x47,\
+    0x47,0x05,0x7D,0x49,0x51,0x47,0xB9,\
+    0xF7,0x2E,0x3D,0x2A,0x21,0x17,0x31,\
+    0x6E,0x77,0x68,0x20,0x37,0x73,0x2F,\
+    0x11,0x49,0x74,0xC5,0xC9,0x98,0x77,\
+    0x6D,0x4D,0x93,0x59,0x76,0x59,0x45,\
+    0x47,0x51,0xA7,0xED,0xC9,0xD1,0x47,\
+    0x92,0x90,0x38,0x12,0xAB,0x74,0xC5,\
+    0x89,0xD8,0x77,0x6D,0x4D,0x93,0x49,\
+    0x69,0x17,0x7D,0x37,0x39,0x59,0x64,\
+    0x47,0x6E,0x15,0x7A,0x6E,0x28,0x12,\
+    0x6D,0xB8,0x51,0x49,0x69,0x51,0x72,\
+    0x6F,0x26,0x13,0x77,0x5B,0x72,0x69,\
+    0x26,0x13,0x37,0x39,0x33,0x09,0x4C,\
+    0x77,0x19,0x39,0x3B,0xB8,0xC1,0x71,\
+    0x8F,0x68,0x71,0x65,0x17,0x39,0x60,\
+    0x5D,0x43,0x47,0x35,0x11,0x46,0x77,\
+    0x7D,0x71,0x05,0x00,0x36,0x43,0x36,\
+    0x39,0x68,0xCF,0xD4,0x47,0x29,0x5A,\
+    0xDC,0x12,0x61,0x67,0x38,0xE9,0xEC,\
+    0xC7,0xD4,0x47,0x29,0x5A,0xB0,0x14,\
+    0x6B,0x37,0x38,0x59,0x68,0x77,0xA3,\
+    0x6F,0x7D,0x1F,0x2D,0x57,0x28,0x67,\
+    0x38,0x6B,0xE8,0x95,0xE5,0x06,0xC9,\
+    0x33,0x96,0x5D,0x25,0x74,0xC5,0x93,\
+    0xC2,0x77,0x6D,0x4D,0x93,0x0A,0x94,\
+    0x22,0x38,0x47,0x39,0x3C,0x3C,0x44,\
+    0x91,0x67,0x19,0x39,0x68,0x7D,0xC7,\
+    0x3D,0x39,0x03,0x7B,0x44,0x91,0xE7,\
+    0x99,0x39,0x68,0x7D,0xC7,0x7F,0xBC,\
+    0x13,0x51,0x77,0x7E,0x47,0x51,0x41,\
+    0xC2,0x05,0x38,0x67,0x45,0x39,0x7B,\
+    0x77,0x6D,0x65,0x45,0x39,0x97,0x8D,\
+    0x6D,0x54,0x78,0x39,0x3D,0x64,0x29,\
+    0x47,0x6C,0x08,0x14,0xC1,0x77,0x47,\
+    0x47,0x05,0x7C,0x49,0x51,0x47,0xB9,\
+    0xF7,0x3B,0x47,0x51,0x47,0xB9,0xF9,\
+    0x2E,0xC7,0x2A,0x20,0x23,0x31,0x6E,\
+    0x77,0x68,0x20,0x3F,0x89,0x2F,0x11,\
+    0x55,0x27,0x37,0x17,0x40,0x77,0x05,\
+    0xD9,0xBC,0x49,0x2C,0xC7,0xEA,0x25,\
+    0xF1,0x59,0x4C,0x57,0x26,0x13,0xB2,\
+    0x88,0xA5,0x13,0x65,0x13,0xB5,0x0F,\
+    0x54,0x77,0x6D,0x27,0x21,0x0A,0x94,\
+    0xE7,0xFD,0x47,0x39,0x33,0xC2,0x44,\
+    0x91,0x47,0x39,0x39,0x68,0x7D,0xC7,\
+    0x37,0x39,0x59,0x48,0x07,0x6C,0x27,\
+    0x25,0x09,0x6B,0x25,0x2E,0x10,0x79,\
+    0x5C,0x68,0x88,0x1F,0x74,0xC5,0xA9,\
+    0xF8,0x77,0x6D,0x4D,0x93,0x0A,0x94,\
+    0x77,0x6D,0x47,0x39,0x33,0xC2,0x07,\
+    0x6C,0x61,0x26,0x00,0x36,0x43,0x36,\
+    0x11,0x77,0x5D,0x72,0x6B,0x26,0x17,\
+    0x77,0x51,0x32,0x6F,0x66,0x13,0x37,\
+    0x39,0x33,0x09,0x4C,0x77,0x19,0x58,\
+    0x60,0x67,0x16,0x39,0x64,0x05,0x6D,\
+    0x65,0x56,0x39,0x60,0x5D,0x2D,0x67,\
+    0x79,0xE8,0x87,0x77,0x7D,0x16,0xF0,\
+    0x39,0x76,0x64,0x91,0x47,0x6C,0x39,\
+    0x97,0x8D,0x38,0x54,0xC5,0x39,0xC2,\
+    0x77,0x92,0xBD,0x6C,0x0A,0x94,0xC1,\
+    0x77,0x47,0x2A,0x39,0x16,0x45,0x51,\
+    0x45,0x39,0x82,0x21,0x10,0x69,0x37,\
+    0x38,0x59,0x6E,0xCC,0xA5,0x22,0xED,\
+    0x49,0x68,0x5D,0x32,0x09,0x4C,0x77,\
+    0x19,0x58,0x60,0x68,0x3E,0x19,0x47,\
+    0x77,0x7D,0x79,0x05,0x3B,0x68,0x5D,\
+    0x11,0x47,0xC6,0xC3,0x68,0x6C,0x11,\
+    0x47,0x6C,0x39,0x3D,0x6C,0x11,0x47,\
+    0x93,0x39,0x3D,0x45,0x51,0xF1,0x23,\
+    0x0A,0xA9,0x77,0x7E,0x47,0x47,0x1B,\
+    0x07,0x77,0x61,0x67,0x79,0x09,0x54,\
+    0x88,0x92,0x16,0xF6,0x39,0x70,0x6C,\
+    0x11,0x47,0x6C,0x39,0x3D,0x6C,0x11,\
+    0x47,0x93,0x39,0x3D,0x44,0xAC,0x47,\
+    0x2A,0x39,0x16,0x49,0x51,0x45,0x39,\
+    0x89,0x31,0x10,0x69,0x37,0x38,0x59,\
+    0x70,0xC4,0xA5,0x24,0xE3,0x22,0x14,\
+    0x77,0x38,0x47,0x6C,0x22,0x14,0x77,\
+    0xC7,0x47,0x6C,0x0A,0xA9,0x77,0x7E,\
+    0x47,0x47,0x49,0x68,0x59,0x72,0x6D,\
+    0x66,0x77,0x1D,0x39,0x1C,0x68,0x3E,\
+    0x16,0x6E,0x4B,0x42,0x47,0x37,0x2A,\
+    0x94,0x77,0x38,0x47,0xC6,0xC3,0x3D,\
+    0x64,0x91,0x47,0x93,0x39,0x97,0x8D,\
+    0x38,0x74,0xC5,0x00,0x36,0x43,0x36,\
+    0x8F,0x72,0x77,0x7E,0x47,0x47,0x16,\
+    0x6E,0x16,0x6D,0xBA,0x0D,0x61,0xE7,\
+    0x59,0x6D,0x0D,0x3E,0x5F,0x4C,0x58,\
+    0x60,0x67,0x45,0x39,0x78,0x14,0xD9,\
+    0x37,0x39,0x09,0x6E,0x3C,0x9D,0x4B,\
+    0x39,0x19,0x05,0x77,0x69,0x0F,0x51,\
+    0xC6,0x96,0x58,0x78,0x26,0x39,0xC6,\
+    0x2A,0x59,0x6D,0x17,0xB6,0x13,0x37,\
+    0x57,0x6A,0x6B,0x26,0x17,0x77,0x39,\
+    0x18,0x09,0x48,0x71,0x8F,0x78,0x6D,\
+    0x69,0x16,0x39,0x7C,0x5D,0x42,0x47,\
+    0x21,0x11,0x47,0x77,0x71,0x0D,0xBE,\
+    0x5F,0x6C,0x07,0x6D,0x27,0x07,0x2A,\
+    0x94,0x77,0x38,0x47,0xC6,0xC3,0x3D,\
+    0x64,0x91,0x47,0x93,0x39,0x97,0x8D,\
+    0x38,0x74,0xC5,0x8F,0x72,0x77,0x7E,\
+    0x47,0x47,0x16,0x6C,0x58,0x68,0x68,\
+    0x3E,0x58,0x68,0x8A,0xF1,0x08,0xD6,\
+    0x39,0x64,0x5B,0x6D,0x0D,0x3F,0x5F,\
+    0x78,0x58,0x6A,0x68,0x3D,0x16,0x6D,\
+    0x16,0x6D,0xB9,0xA5,0x15,0x68,0x38,\
+    0x82,0x47,0x35,0x19,0x6E,0x5F,0x72,\
+    0x6D,0x26,0x15,0x77,0x59,0x72,0x09,\
+    0x4C,0x39,0x68,0x77,0x6D,0x47,0x39,\
+    0x79,0x68,0x77,0x6D,0x27,0x39,0x39,\
+    0x68,0xF7,0x6D,0x47,0x3B,0x39,0x68,\
+    0x77,0x69,0x47,0x39,0x39,0x6E,0x77,\
+    0x6D,0x47,0x31,0x39,0x68,0x77,0x61,\
+    0x47,0x39,0x39,0x78,0x77,0x6D,0x09,\
+    0x48,0x77,0x19,0x77,0x6D,0x47,0x39,\
+    0x39,0x68,0x77,0x6D,0x47,0x39,0x39,\
+    0x68,0x77,0x6D,0x47,0x39,0x39,0x68,\
+    0x77,0x6D,0x47,0x39,0x39,0x68,0x77,\
+    0x6D,0x43,0x4D,0x00,0x36,0x43,0x36,\
+    0x44,0x54,0x45,0x43,0x00,0x49,0x00} //16384
+
+#define T8Bootloader {\
+    0x77,0xD1,0x77,0x7D,0x1B,0x09,0x77,\
+    0xD1,0x77,0x7D,0x1B,0x7D,0x77,0x1D,\
+    0x39,0x1C,0x05,0x00,0x39,0x78,0x0B,\
+    0x61,0x05,0x80,0x39,0x78,0x0B,0x7D,\
+    0x05,0x80,0x39,0x78,0x1B,0x6D,0x05,\
+    0x00,0x39,0x78,0x0C,0x99,0x37,0x38,\
+    0x2A,0xA8,0x77,0x7D,0x3C,0xCC,0x7B,\
+    0x51,0x77,0x7D,0x3C,0xC1,0x2A,0xA8,\
+    0x77,0x7D,0x3C,0xC0,0x7B,0x51,0x77,\
+    0x7D,0x23,0x39,0x7B,0x51,0x77,0x7D,\
+    0x2C,0xC4,0x7B,0x51,0x77,0x7D,0x2C,\
+    0xC7,0x7B,0x51,0x77,0x7D,0x23,0x3D,\
+    0x7B,0x11,0x77,0x7D,0x23,0x3B,0x77,\
+    0x1D,0x17,0x93,0x09,0x4C,0x77,0x3E,\
+    0x88,0xBD,0x0F,0xDE,0x36,0x54,0x5D,\
+    0x11,0x47,0x29,0x5D,0x6E,0x35,0x38,\
+    0x7D,0x05,0x32,0xD0,0x39,0xD4,0x47,\
+    0x29,0x65,0x58,0x39,0xD4,0x47,0x29,\
+    0x65,0x2C,0x49,0x78,0x15,0x7E,0x03,\
+    0xEF,0xC9,0x28,0x22,0xD3,0x58,0x68,\
+    0x88,0xE9,0x09,0x80,0x39,0x78,0x43,\
+    0xBD,0x09,0x80,0x39,0x78,0x2E,0x3D,\
+    0x3D,0x38,0x2A,0xAD,0x77,0x7D,0x2C,\
+    0xC4,0x2A,0xAD,0x77,0x7D,0x2C,0xC7,\
+    0x11,0x54,0x77,0x7D,0x3C,0xC1,0x1D,\
+    0x14,0x77,0x7D,0x3C,0xCD,0x73,0x7A,\
+    0x10,0x6D,0x47,0xD9,0x73,0x51,0x77,\
+    0x7D,0x3C,0xCC,0x5F,0x68,0x77,0xBB,\
+    0x09,0x80,0x39,0x78,0x2B,0x5D,0x09,\
+    0x80,0x39,0x78,0x2B,0x29,0x57,0x00,\
+    0x39,0x78,0x6F,0x6C,0xF7,0x05,0x39,\
+    0x0D,0x10,0x63,0xF7,0x05,0x39,0x0E,\
+    0x10,0x7F,0xF7,0x05,0x39,0x0F,0x10,\
+    0x7B,0x27,0x27,0x00,0x36,0x43,0x36,\
+    0x2A,0x94,0x77,0x6C,0x47,0x29,0x45,\
+    0x76,0x17,0x77,0x54,0xC5,0x39,0x6A,\
+    0x77,0x7D,0x3B,0x27,0x59,0x78,0x64,\
+    0x91,0x47,0x3A,0x39,0x78,0x0B,0x73,\
+    0x27,0x3F,0x7B,0x51,0x77,0x7D,0x3B,\
+    0x27,0x77,0xD1,0x77,0x7D,0x74,0x79,\
+    0x16,0x54,0x77,0x7D,0x3B,0x24,0x16,\
+    0x54,0x77,0x7D,0x3B,0x21,0x49,0x6D,\
+    0x58,0x6D,0x37,0x35,0x16,0x68,0x39,\
+    0xD4,0x47,0x29,0x17,0x2C,0x4D,0xD1,\
+    0x47,0x3D,0x76,0x87,0x77,0x7D,0x0D,\
+    0x00,0x39,0x78,0x13,0x6D,0x21,0x6B,\
+    0x45,0x61,0x51,0x11,0x47,0x29,0x5D,\
+    0x6A,0x5F,0x11,0x47,0x29,0x5D,0x68,\
+    0x07,0x6D,0x77,0x2C,0x16,0x68,0x47,\
+    0x7E,0x0F,0xF9,0x16,0x68,0x39,0xD4,\
+    0x47,0x29,0x73,0x00,0x5D,0x6D,0x5F,\
+    0xBC,0x07,0x7D,0x25,0x2A,0x7D,0xBE,\
+    0x69,0xE7,0xC9,0x2B,0x23,0x3D,0x73,\
+    0x6D,0x10,0xB7,0x0D,0x00,0x39,0x78,\
+    0x13,0x6D,0x21,0x2F,0x49,0x6F,0x58,\
+    0x6D,0x37,0x38,0x16,0x68,0x39,0xD4,\
+    0x47,0x29,0x73,0x00,0x64,0xAD,0x47,\
+    0x29,0x5D,0x68,0x27,0xE2,0x54,0xC5,\
+    0x39,0x69,0x77,0x7D,0x3C,0xCC,0x19,\
+    0x2C,0x3D,0x7D,0x20,0x7D,0x73,0x51,\
+    0x77,0x7D,0x3C,0xC0,0x5F,0x54,0x3D,\
+    0x54,0x47,0x29,0x5D,0x68,0x11,0x59,\
+    0x68,0x00,0x39,0x78,0x0C,0x91,0x68,\
+    0x00,0x39,0x78,0x0B,0x69,0x68,0x00,\
+    0x39,0x78,0x0B,0x65,0x77,0x00,0x39,\
+    0x78,0x13,0x6F,0x0F,0xF9,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x73,0xC0,0x64,\
+    0xAD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x5D,0x68,0x64,0x91,0x47,0x38,0x39,\
+    0x78,0x0C,0x94,0x08,0xD6,0x39,0x78,\
+    0x39,0xD4,0x47,0x29,0x65,0x58,0x39,\
+    0xD4,0x47,0x29,0x65,0x2C,0x3D,0x54,\
+    0x47,0x29,0x42,0x91,0x10,0x6D,0x47,\
+    0x8B,0x73,0x51,0x77,0x7D,0x3B,0x35,\
+    0x5E,0x68,0x77,0xC5,0x0D,0x00,0x39,\
+    0x78,0x13,0x69,0x21,0x39,0x39,0xF6,\
+    0x39,0xD4,0x47,0x29,0x0A,0x28,0x39,\
+    0xD4,0x47,0x29,0x16,0x88,0x64,0x91,\
+    0x47,0x38,0x39,0x78,0x13,0x69,0x09,\
+    0x80,0x39,0x78,0x46,0x59,0x0F,0x57,\
+    0xC6,0x93,0x3F,0x03,0xB8,0xC5,0x49,\
+    0x6B,0x58,0x6D,0x37,0x27,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x17,0x2C,0x38,\
+    0x82,0x47,0x29,0x73,0x46,0x88,0x96,\
+    0x20,0x5B,0x71,0x06,0x88,0x8A,0x0F,\
+    0x57,0xC6,0x80,0x07,0x7F,0x68,0x39,\
+    0x49,0x65,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x59,0x29,0x08,0xD6,0x39,0x78,\
+    0x3D,0x43,0xB8,0xDE,0x5E,0x2A,0x0B,\
+    0x6D,0x39,0x39,0x43,0x78,0x05,0x6D,\
+    0x75,0x3E,0x29,0x5E,0x6F,0x87,0xFA,\
+    0x39,0x24,0xE8,0x6F,0xB9,0x9B,0x05,\
+    0x39,0x79,0x25,0x2A,0xF9,0x7C,0x5C,\
+    0x80,0x4D,0xEA,0x68,0x05,0x39,0x6B,\
+    0x08,0x9D,0x0F,0x57,0xC6,0xBC,0x07,\
+    0x7D,0x68,0x39,0x49,0x69,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x3D,0xC5,0x54,\
+    0xF9,0x39,0x78,0x13,0x6D,0x08,0xD6,\
+    0x39,0x78,0x3D,0x54,0x47,0x29,0x45,\
+    0x64,0x10,0x6D,0xB9,0x3D,0x19,0x51,\
+    0x77,0x7D,0x3B,0x29,0x89,0xD1,0x77,\
+    0x7D,0x2B,0x39,0x00,0x36,0x43,0x36,\
+    0x5D,0x68,0x8A,0x85,0x0D,0x00,0x39,\
+    0x78,0x13,0x69,0x20,0x39,0xC4,0xB6,\
+    0x3D,0x54,0x47,0x29,0x5D,0x68,0x11,\
+    0x6D,0xBA,0xED,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x77,0xD1,0x77,0x7D,0x1C,\
+    0xE9,0x59,0x68,0x8A,0xA9,0x6F,0x26,\
+    0x13,0x77,0x5B,0x72,0x69,0x26,0x1D,\
+    0x37,0x51,0x32,0x6F,0x66,0x13,0x37,\
+    0x39,0x33,0x09,0x4C,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x71,0x8F,0x74,0x71,\
+    0x6D,0x56,0x39,0x70,0x51,0x02,0x47,\
+    0x25,0x11,0x07,0x77,0x4D,0x65,0x56,\
+    0x39,0x4C,0x3D,0x38,0x21,0x3D,0x49,\
+    0x69,0x17,0x25,0x65,0x35,0x17,0x79,\
+    0x0B,0x6C,0x8B,0xBE,0x73,0xEE,0x10,\
+    0x67,0x14,0xBE,0x1B,0xEF,0x57,0x2A,\
+    0x5F,0xA9,0x6B,0x3D,0x59,0x6B,0xFB,\
+    0x6C,0x5D,0x78,0x5F,0x2C,0x9E,0xFF,\
+    0x21,0xB3,0x25,0xEA,0x37,0x39,0x09,\
+    0x7D,0xC9,0xED,0x22,0xCD,0x05,0x7D,\
+    0x7F,0x6B,0x47,0x39,0x5E,0x7A,0x07,\
+    0x6D,0x77,0x3F,0x15,0x68,0x57,0x2C,\
+    0x96,0xFF,0x1B,0x39,0xA4,0xAB,0x57,\
+    0xA8,0x6B,0x3D,0x07,0x6D,0x6B,0x26,\
+    0x17,0x77,0x51,0x32,0x6F,0x66,0x13,\
+    0x37,0x39,0x18,0x4B,0x16,0x39,0x96,\
+    0x77,0x6A,0x21,0x25,0x0A,0x94,0x77,\
+    0x6F,0x47,0x29,0x5D,0x7C,0x07,0x6D,\
+    0x57,0x16,0x39,0x63,0x44,0xAD,0x47,\
+    0x29,0x5D,0x60,0x7F,0x94,0x47,0x3C,\
+    0x39,0x78,0x13,0x61,0x09,0x4C,0x77,\
+    0x19,0x44,0x82,0x47,0x3F,0x39,0x78,\
+    0x13,0x65,0x4F,0xC0,0x39,0x6D,0x77,\
+    0x7D,0x23,0x35,0x00,0x36,0x43,0x36,\
+    0x7B,0x11,0x77,0x7D,0x23,0x2D,0x77,\
+    0x1D,0x57,0x11,0x47,0x29,0x5D,0x64,\
+    0x35,0x7D,0x05,0x11,0x39,0x69,0x35,\
+    0x45,0x47,0x3B,0x31,0xB8,0x77,0x69,\
+    0x4F,0xE9,0x39,0x68,0x7F,0xBD,0x47,\
+    0x3F,0x7B,0x11,0x77,0x7D,0x23,0x29,\
+    0x7B,0x51,0x77,0x7D,0x23,0x36,0x19,\
+    0x14,0x77,0x7D,0x23,0x21,0x29,0xD4,\
+    0x77,0x54,0x56,0x45,0x39,0x00,0x77,\
+    0x6C,0x56,0x45,0x39,0x1F,0x77,0x6F,\
+    0x56,0x45,0x39,0x05,0x77,0x6E,0x56,\
+    0x45,0x39,0x2F,0x77,0x69,0x05,0x00,\
+    0x39,0x78,0x13,0x70,0x09,0x4C,0x77,\
+    0x19,0x58,0x6A,0x79,0x16,0x39,0x62,\
+    0x7F,0x54,0x47,0x3B,0x39,0x78,0x13,\
+    0x67,0x09,0x48,0x77,0x19,0x47,0x6A,\
+    0x05,0x39,0x89,0x14,0x75,0x6D,0x20,\
+    0x33,0x89,0x14,0x74,0x6D,0x20,0x75,\
+    0x59,0x68,0x77,0xAF,0x37,0x39,0x29,\
+    0x6F,0x3D,0x2D,0x20,0x39,0x39,0xD0,\
+    0x57,0x11,0x47,0x29,0x5D,0x40,0x66,\
+    0x3D,0x47,0x38,0x29,0xD4,0x77,0x12,\
+    0x56,0x79,0x39,0x6A,0x58,0x65,0x37,\
+    0x3A,0x16,0x68,0x39,0xD4,0x47,0x29,\
+    0x07,0xC0,0x05,0x6D,0x55,0x39,0x19,\
+    0x69,0x92,0xE5,0x87,0x05,0x39,0x6C,\
+    0x75,0x54,0x47,0xC2,0x39,0x78,0x13,\
+    0x67,0xC6,0x00,0x39,0x78,0x13,0x67,\
+    0x17,0xB6,0x59,0x68,0x77,0x17,0x37,\
+    0x39,0x29,0x6F,0x3D,0x2D,0x20,0x07,\
+    0x19,0x14,0x77,0x7D,0x23,0x11,0x39,\
+    0x78,0x77,0x2D,0x56,0x79,0x39,0x69,\
+    0x58,0x65,0x37,0x39,0x29,0x51,0x77,\
+    0x7D,0x23,0x30,0x00,0x36,0x43,0x36,\
+    0x16,0x68,0x39,0xD4,0x47,0x29,0x07,\
+    0xC0,0x05,0x6D,0x55,0x39,0x19,0x69,\
+    0x92,0xE5,0x87,0x05,0x39,0x6C,0x75,\
+    0x54,0x47,0xC2,0x39,0x78,0x13,0x67,\
+    0xC6,0x00,0x39,0x78,0x13,0x67,0x17,\
+    0xB6,0x59,0x5A,0x57,0x11,0x47,0x29,\
+    0x5D,0x40,0x77,0x7D,0x47,0x79,0x16,\
+    0x60,0x07,0x6C,0x68,0x39,0x77,0xD1,\
+    0x77,0x7D,0x79,0x91,0x4B,0x68,0x65,\
+    0x6D,0x67,0x38,0xDC,0xE0,0xB7,0x51,\
+    0x47,0x3D,0x3B,0x51,0x77,0x96,0x47,\
+    0x29,0x5D,0x62,0xF6,0x54,0x47,0x29,\
+    0x5D,0x62,0x27,0xE2,0x69,0x26,0x77,\
+    0x1D,0x39,0x1C,0x65,0x45,0x39,0x78,\
+    0x13,0x61,0x4F,0x10,0x39,0x6D,0x77,\
+    0x6C,0x20,0x39,0x38,0x2A,0x67,0x54,\
+    0x47,0x29,0x5D,0x67,0xC7,0x51,0x47,\
+    0x0D,0x5E,0x64,0xC7,0x51,0x47,0x0F,\
+    0x5E,0x68,0x77,0xFB,0x27,0x39,0x38,\
+    0x42,0x3D,0x54,0x47,0x29,0x5D,0x68,\
+    0x10,0x49,0x4F,0x80,0x39,0x6A,0x77,\
+    0x7D,0x23,0x33,0x2A,0x94,0x77,0x59,\
+    0x47,0x29,0x5D,0x40,0x7F,0xC4,0x47,\
+    0x3C,0x39,0x69,0x3F,0x15,0x45,0xBC,\
+    0x58,0x68,0x89,0xA5,0x1F,0xB6,0x59,\
+    0x68,0x77,0x93,0x0D,0x00,0x39,0x78,\
+    0x0C,0x98,0x20,0x0B,0x73,0x11,0x77,\
+    0x7D,0x23,0x2B,0x5E,0x42,0x7F,0xD4,\
+    0x47,0x3B,0x39,0x78,0x13,0x67,0x54,\
+    0xC5,0x39,0x5C,0x77,0x7D,0x23,0x11,\
+    0x31,0xC1,0x77,0x68,0x47,0x38,0x7B,\
+    0x11,0x77,0x7D,0x23,0x2B,0x71,0x10,\
+    0x74,0x6D,0x26,0x39,0xC7,0xE6,0x2F,\
+    0xE2,0x27,0x39,0x00,0x36,0x43,0x36,\
+    0x39,0xAC,0x47,0x54,0x47,0x29,0x5D,\
+    0x7A,0x25,0x2D,0x74,0xF9,0x39,0x78,\
+    0x13,0x7F,0xF7,0x45,0x3B,0xE8,0x14,\
+    0x6D,0x47,0x97,0x31,0xD1,0x77,0x6F,\
+    0x47,0x29,0x5D,0x62,0x64,0x91,0x47,\
+    0x0D,0x39,0x78,0x13,0x45,0x27,0x39,\
+    0x39,0xE2,0x3D,0x54,0x47,0x29,0x5D,\
+    0x68,0x10,0x49,0x4F,0x80,0x39,0x6A,\
+    0x77,0x7D,0x23,0x33,0x2A,0x94,0x77,\
+    0x5B,0x47,0x29,0x5D,0x40,0x7F,0xC4,\
+    0x47,0x3C,0x39,0x69,0x3F,0x15,0x45,\
+    0xBC,0x58,0x68,0x89,0x55,0x1F,0xB6,\
+    0x59,0x68,0x77,0x03,0x0D,0x00,0x39,\
+    0x78,0x0C,0x94,0x20,0x09,0x73,0x11,\
+    0x77,0x7D,0x23,0x2B,0x5E,0x40,0x7F,\
+    0xD4,0x47,0x3B,0x39,0x78,0x13,0x67,\
+    0x54,0xC5,0x39,0x5E,0x77,0x7D,0x23,\
+    0x11,0x31,0xC1,0x77,0x68,0x47,0x38,\
+    0x7B,0x11,0x77,0x7D,0x23,0x2B,0x71,\
+    0x10,0x74,0x6D,0x26,0x39,0xC4,0x96,\
+    0x2F,0xE2,0x27,0x0D,0x09,0x51,0x77,\
+    0x7D,0x23,0x2B,0x6B,0x28,0x44,0xAD,\
+    0x47,0x29,0x5D,0x7A,0xC7,0x11,0x45,\
+    0xB9,0x5A,0x48,0x7F,0xD4,0x47,0x3B,\
+    0x39,0x78,0x13,0x67,0x54,0xC5,0x39,\
+    0x5E,0x77,0x7D,0x23,0x11,0x7B,0x11,\
+    0x77,0x7D,0x23,0x2B,0x71,0x10,0x75,\
+    0x15,0x26,0x39,0xC4,0xA0,0x2F,0xE2,\
+    0x09,0x4C,0x77,0x19,0x16,0x6D,0xB9,\
+    0x93,0x77,0x1D,0x39,0x1C,0x77,0x00,\
+    0x39,0x78,0x13,0x65,0x14,0x79,0x5E,\
+    0x6E,0x47,0x51,0x45,0x2B,0x59,0x40,\
+    0x07,0x4D,0x97,0x80,0x39,0x78,0x1B,\
+    0x6D,0x64,0xF9,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x0B,0x7D,0x54,0xC5,0x39,\
+    0x69,0x77,0x7D,0x3B,0x35,0x31,0xD1,\
+    0x77,0x6B,0x47,0x29,0x5D,0x64,0x35,\
+    0x14,0x47,0x29,0x5D,0x78,0x47,0x51,\
+    0x44,0x39,0x77,0x1D,0x39,0x1C,0x77,\
+    0x00,0x39,0x78,0x13,0x65,0x1A,0x79,\
+    0x5F,0x60,0x3D,0x14,0x47,0x29,0x5D,\
+    0x7C,0x10,0x6B,0x77,0x05,0x3B,0x7A,\
+    0x17,0x57,0x67,0x45,0x39,0x78,0x13,\
+    0x61,0x4F,0xD1,0x39,0x6D,0x77,0x6F,\
+    0x4F,0xD1,0x39,0x6C,0x77,0x6F,0x54,\
+    0xC5,0x39,0x5C,0x77,0x7D,0x23,0x36,\
+    0x0A,0x94,0x75,0x13,0x47,0x29,0x5D,\
+    0x7A,0x7F,0x85,0x47,0x3C,0x39,0x69,\
+    0x64,0x91,0x47,0x38,0x39,0x78,0x0C,\
+    0x99,0x05,0x00,0x39,0x78,0x0C,0x98,\
+    0x77,0x05,0x38,0x68,0x39,0x18,0x09,\
+    0x6F,0xC6,0x90,0x58,0x60,0x68,0x3E,\
+    0x16,0x63,0x55,0x11,0x47,0x29,0x5D,\
+    0x40,0x55,0x44,0x47,0x3B,0x77,0x19,\
+    0x39,0x1C,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x1F,0x29,0x09,0x6D,0x39,\
+    0xBB,0x0A,0xAF,0x77,0x7D,0x23,0x31,\
+    0x47,0x69,0x25,0x2A,0x55,0x22,0x22,\
+    0xE9,0x0F,0x6D,0x4B,0x7E,0x39,0xE9,\
+    0x1A,0x9F,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x09,\
+    0x48,0x77,0x19,0x39,0x1C,0x09,0x48,\
+    0x77,0x19,0x39,0x1C,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x00,0x36,0x43,0x36,\
+    0x77,0x19,0x39,0x1C,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x09,\
+    0x48,0x77,0x19,0x39,0x1C,0x09,0x48,\
+    0x77,0x19,0x39,0x1C,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x09,\
+    0x48,0x77,0x19,0x39,0x1C,0x09,0x48,\
+    0x77,0x19,0x39,0x1C,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x09,\
+    0x48,0x77,0x19,0x39,0x1C,0x09,0x48,\
+    0x77,0x19,0x39,0x1C,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x09,\
+    0x48,0x77,0x19,0x39,0x1C,0x09,0x48,\
+    0x77,0x19,0x39,0x1C,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x09,0x48,0x77,0x19,0x39,\
+    0x1C,0x09,0x48,0x77,0x19,0x39,0x1C,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x77,\
+    0x05,0x3A,0xE8,0x39,0x1C,0x09,0x48,\
+    0x1F,0x37,0x59,0x72,0x6D,0x66,0x77,\
+    0x36,0x39,0x18,0x68,0x34,0x16,0x6F,\
+    0x5D,0x11,0x47,0x29,0x5D,0x64,0x7F,\
+    0x78,0x47,0x3F,0x00,0x36,0x43,0x36,\
+    0x5E,0x4C,0x49,0x54,0x47,0x29,0x5D,\
+    0x78,0x25,0x2A,0x74,0xFE,0x39,0x78,\
+    0x13,0x7D,0xF9,0x45,0x3A,0x48,0x12,\
+    0x7D,0x4F,0xAC,0x39,0x6E,0x35,0x14,\
+    0x47,0x29,0x5D,0x78,0x39,0xD4,0x47,\
+    0x29,0x62,0xB8,0x7F,0x78,0x47,0x3C,\
+    0x5E,0x68,0x76,0x7B,0x4F,0xAC,0x39,\
+    0x6D,0x7F,0xD4,0x47,0x3B,0x39,0x78,\
+    0x13,0x67,0x6D,0x45,0x39,0x78,0x13,\
+    0x45,0x57,0x2C,0x89,0x54,0x77,0x4C,\
+    0x25,0x27,0x5E,0x68,0x77,0xE5,0xF7,\
+    0x05,0x39,0x72,0x10,0x45,0xF7,0x05,\
+    0x39,0x48,0x10,0x6D,0x47,0x5F,0x89,\
+    0x54,0x77,0x59,0x20,0x39,0x39,0x00,\
+    0x17,0x6D,0x47,0xEB,0x89,0x54,0x77,\
+    0x56,0x20,0x39,0x39,0x18,0xC7,0x51,\
+    0x47,0x07,0x5E,0x68,0x77,0xF5,0x27,\
+    0x39,0x39,0xD6,0x49,0x54,0x47,0x29,\
+    0x5D,0x60,0xC9,0x11,0x47,0x3B,0x5E,\
+    0x6E,0x49,0x51,0x45,0x2B,0x59,0x46,\
+    0x65,0x40,0x47,0x38,0x49,0x68,0x67,\
+    0x6C,0xF7,0x85,0x39,0x68,0x77,0xDD,\
+    0x21,0x23,0x22,0x14,0x77,0x7C,0x47,\
+    0x3B,0x09,0x6F,0x25,0x2D,0x74,0xF9,\
+    0x39,0x78,0x13,0x65,0x39,0x39,0x27,\
+    0x69,0xF9,0x11,0x44,0x39,0x59,0x6C,\
+    0x49,0x51,0x45,0x08,0x59,0x68,0x77,\
+    0x13,0x26,0x39,0xC4,0x3A,0x59,0x6D,\
+    0x27,0x39,0x39,0x1C,0x16,0x6D,0xBA,\
+    0xBD,0x17,0x68,0x17,0x6D,0x47,0x53,\
+    0x58,0x68,0x8A,0xA3,0x69,0x39,0x59,\
+    0x68,0x77,0x0D,0x37,0x39,0x29,0x45,\
+    0x77,0x6C,0x35,0x29,0x8B,0xE8,0x11,\
+    0x67,0x09,0x80,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x44,0xAD,0x0D,0x39,0x5F,\
+    0x6E,0x49,0x51,0x45,0x2B,0x59,0x7A,\
+    0x44,0x91,0x47,0x3B,0x39,0x78,0x13,\
+    0x65,0x39,0x39,0x27,0x45,0x77,0x6C,\
+    0xC9,0x45,0x3A,0x68,0x17,0x43,0x77,\
+    0x00,0x39,0x78,0x13,0x65,0x14,0x79,\
+    0x5F,0x72,0x35,0x14,0x47,0x29,0x5D,\
+    0x78,0x3D,0x14,0x47,0x29,0x5D,0x7C,\
+    0x11,0x6B,0x79,0x05,0x3A,0x68,0x17,\
+    0x67,0x79,0x05,0x38,0x68,0x17,0x69,\
+    0x79,0x05,0x3B,0x7A,0x17,0x69,0x79,\
+    0x05,0x3B,0x79,0x58,0x6A,0x26,0x39,\
+    0xC3,0xE4,0x2F,0xE2,0x69,0x26,0x13,\
+    0x37,0x39,0x18,0x09,0x48,0x77,0x19,\
+    0x39,0x1C,0x67,0x05,0xC6,0x96,0x77,\
+    0x6D,0x97,0x96,0x39,0x6C,0xC7,0xD1,\
+    0x47,0x34,0x39,0x68,0x24,0xAD,0x87,\
+    0x85,0x39,0x68,0x77,0x6C,0x09,0x4C,\
+    0x77,0x19,0x58,0x6A,0x68,0x3F,0x16,\
+    0x6D,0x5D,0x42,0x47,0x29,0x1B,0x47,\
+    0x77,0x79,0xFD,0xB8,0x5C,0x6C,0x07,\
+    0x92,0x27,0x79,0x47,0x68,0x57,0x28,\
+    0x6B,0x38,0xA5,0xED,0x93,0xE3,0x67,\
+    0x38,0xA9,0x6D,0x05,0x6E,0x85,0x39,\
+    0x73,0xEE,0x10,0x7D,0x3D,0xC6,0xE7,\
+    0xF8,0xC9,0xE8,0x21,0x3B,0x47,0x68,\
+    0x2F,0xE5,0x14,0xBF,0x5F,0x9A,0x3D,\
+    0x6C,0x20,0x2D,0x45,0x97,0x07,0x6D,\
+    0x57,0x29,0xE7,0xE8,0xC9,0xEB,0x21,\
+    0x3B,0x47,0x68,0x25,0xE5,0x14,0x38,\
+    0x5F,0x86,0x57,0x6A,0x6D,0x26,0x15,\
+    0x77,0x59,0x72,0x09,0x4C,0x77,0x19,\
+    0x58,0x6A,0x65,0x16,0x39,0x60,0x57,\
+    0x42,0x47,0x35,0x00,0x36,0x43,0x36,\
+    0x47,0x68,0xE7,0xEC,0x67,0x78,0x73,\
+    0xE8,0x10,0x49,0x65,0x39,0x31,0x68,\
+    0x77,0x6D,0x20,0x33,0x47,0x68,0x69,\
+    0x75,0x65,0x39,0x6A,0xE9,0x10,0x7F,\
+    0xA5,0xB0,0x49,0x68,0x67,0x75,0x99,\
+    0xB9,0x49,0x68,0x67,0x75,0x99,0xB9,\
+    0x6A,0xE9,0x11,0x9D,0x67,0x3E,0x17,\
+    0x77,0x39,0x18,0x09,0x48,0x71,0x8F,\
+    0x70,0x41,0x5D,0x16,0x39,0x77,0x6B,\
+    0x42,0x47,0x1A,0x13,0x07,0x77,0x49,\
+    0x63,0x56,0x39,0x40,0x35,0x7F,0x69,\
+    0x00,0x39,0x6A,0x76,0x2D,0x67,0x05,\
+    0xC6,0x96,0x77,0x6D,0x97,0xBE,0x89,\
+    0xD4,0x77,0x60,0x47,0x39,0x5B,0x68,\
+    0x77,0xBB,0x6F,0x40,0x39,0x6A,0x76,\
+    0x2D,0x57,0x00,0x39,0x78,0x13,0x4D,\
+    0x20,0x3D,0x47,0x9C,0x17,0x6F,0x39,\
+    0xC6,0x2B,0x44,0x77,0x6C,0x0D,0x39,\
+    0x5E,0x64,0xA5,0x51,0x47,0xEF,0x33,\
+    0x69,0x77,0x4C,0x27,0x39,0x39,0x6A,\
+    0xC5,0x6A,0x20,0x39,0x39,0xC0,0x58,\
+    0x66,0x61,0x45,0x39,0x78,0x13,0x4D,\
+    0x59,0x15,0x39,0x69,0x3D,0x7E,0x20,\
+    0x35,0xE7,0x54,0x77,0xBB,0x4D,0x3E,\
+    0x39,0x49,0x17,0x6D,0x47,0x3B,0x87,\
+    0x6D,0x11,0x2B,0x37,0x39,0x29,0x6E,\
+    0x58,0x6D,0x68,0x35,0x16,0x65,0x39,\
+    0xD4,0x47,0x29,0x0D,0x98,0x38,0x82,\
+    0x47,0x35,0x2B,0x7B,0x10,0x47,0x39,\
+    0x39,0x73,0x6E,0x10,0x49,0x57,0x0C,\
+    0x41,0x68,0x3D,0x6C,0x20,0x35,0xE9,\
+    0x54,0x77,0xBB,0x4D,0x39,0x39,0x49,\
+    0x17,0x6D,0x47,0x3B,0x22,0xE8,0x0F,\
+    0x6D,0x67,0x3E,0x00,0x36,0x43,0x36,\
+    0x6B,0x68,0x09,0x6D,0x59,0x39,0x85,\
+    0x6F,0x15,0xB1,0x53,0x85,0x39,0x69,\
+    0x65,0x79,0x59,0x2A,0x5E,0x64,0xA5,\
+    0x51,0x47,0xEF,0x33,0x69,0x77,0x4C,\
+    0x27,0x39,0x39,0x6A,0x07,0x6D,0x57,\
+    0x38,0x70,0x9C,0x7F,0x6F,0x0D,0x3E,\
+    0x5E,0x6C,0x07,0x99,0x27,0x3B,0x49,\
+    0x97,0x65,0x41,0x47,0x38,0x73,0x6F,\
+    0x10,0x61,0x95,0x05,0x39,0xBE,0x7D,\
+    0x6C,0x47,0x18,0x59,0x68,0x77,0x6F,\
+    0xF5,0x39,0x5F,0x68,0x88,0x0B,0x61,\
+    0x66,0x13,0x77,0x5B,0x72,0x69,0x26,\
+    0x1D,0x37,0x5F,0x32,0x6D,0x66,0x77,\
+    0x1D,0x58,0x6A,0x65,0x00,0x39,0x6A,\
+    0x76,0x2D,0x67,0x05,0xC6,0x96,0x77,\
+    0x6D,0x97,0xB8,0x89,0xD4,0x77,0x60,\
+    0x47,0x39,0x5A,0x6E,0x07,0x6D,0x27,\
+    0x39,0x39,0x04,0x57,0x14,0x47,0x3B,\
+    0x38,0x28,0x65,0x54,0x47,0x29,0x5D,\
+    0x48,0x10,0x69,0x37,0xCD,0x59,0x6A,\
+    0x07,0x92,0x59,0x11,0x39,0x69,0x3D,\
+    0x6C,0x20,0x35,0xE7,0x54,0x77,0xBB,\
+    0x4D,0x3E,0x39,0x49,0x17,0x6D,0x47,\
+    0x3B,0x87,0x68,0x10,0x51,0x59,0x29,\
+    0x73,0x69,0x10,0x61,0x99,0x05,0x39,\
+    0xBE,0x7D,0x6A,0x47,0x18,0x59,0x68,\
+    0x77,0x6F,0x37,0x39,0x29,0x6F,0x36,\
+    0x9D,0x4F,0x3B,0x73,0x69,0x10,0x69,\
+    0x37,0xCD,0x59,0x6A,0x07,0x92,0x59,\
+    0x11,0x39,0x69,0x3D,0x6C,0x20,0x35,\
+    0xE7,0x54,0x77,0xBB,0x4D,0x3E,0x39,\
+    0x49,0x17,0x6D,0x47,0x3B,0x87,0x68,\
+    0x11,0xA9,0x67,0x31,0x17,0x77,0x39,\
+    0x18,0x09,0x6F,0x00,0x36,0x43,0x36,\
+    0xC6,0xB0,0x58,0x6A,0x69,0x00,0x39,\
+    0x6A,0x76,0x2D,0x67,0x05,0xC6,0x96,\
+    0x77,0x6D,0x97,0xBE,0x89,0xD4,0x77,\
+    0x60,0x47,0x39,0x5B,0x68,0x77,0xF3,\
+    0x0F,0x57,0xC6,0x8F,0x3F,0x03,0xB8,\
+    0xC1,0x49,0x6E,0x58,0x6D,0x0F,0x41,\
+    0x39,0x95,0x16,0x6D,0xB9,0x0D,0x24,\
+    0x06,0x88,0x97,0xB8,0xC9,0x24,0x06,\
+    0x88,0x96,0xB8,0xC8,0x24,0x06,0x88,\
+    0x91,0xB8,0xCB,0x24,0x06,0x88,0x90,\
+    0xB8,0xCA,0x71,0x06,0x88,0x8B,0x0F,\
+    0x57,0xC6,0x90,0x07,0x6B,0x68,0x39,\
+    0x71,0x10,0x77,0x91,0x26,0x39,0xC7,\
+    0x60,0x6A,0x03,0xB8,0xC3,0xC6,0x84,\
+    0x6A,0x03,0xB8,0xC2,0xC6,0x85,0x6A,\
+    0x03,0xB8,0xC5,0xC6,0x86,0x6A,0x03,\
+    0xB8,0xC4,0xC6,0x87,0x3F,0x03,0xB8,\
+    0xDC,0x71,0x06,0x88,0x95,0x37,0x3F,\
+    0x16,0x68,0x3F,0x15,0x47,0xC2,0x58,\
+    0x68,0x8A,0xB1,0x5A,0x57,0xC6,0x92,\
+    0x88,0x85,0x5A,0x57,0xC6,0x93,0x88,\
+    0x84,0x5A,0x57,0xC6,0x94,0x88,0x87,\
+    0x5A,0x57,0xC6,0x95,0x88,0x86,0x08,\
+    0xD6,0x39,0x58,0x3D,0x43,0xB8,0xDE,\
+    0x5E,0x7C,0x3D,0x43,0xB8,0xDF,0x5E,\
+    0x66,0x3D,0x43,0xB8,0xDC,0x5F,0x66,\
+    0x17,0x6B,0x37,0x39,0x59,0x68,0x77,\
+    0xFD,0x37,0x39,0x59,0x68,0x77,0xE7,\
+    0x0F,0x57,0xC6,0xB7,0x3F,0x03,0xB8,\
+    0xD9,0x49,0x6B,0x58,0x6D,0x37,0x27,\
+    0x16,0x68,0x16,0x6D,0xBA,0xB5,0x76,\
+    0x87,0x77,0x7D,0x0D,0x17,0xC6,0xB7,\
+    0x10,0x2F,0x0D,0x17,0xC6,0x8A,0x10,\
+    0x51,0x67,0x17,0x00,0x36,0x43,0x36,\
+    0xC6,0x84,0x55,0x43,0xB8,0xC9,0x47,\
+    0x68,0xE7,0xEC,0x67,0x78,0x73,0xE8,\
+    0x10,0x49,0x65,0x39,0x31,0x68,0x77,\
+    0x6D,0x20,0x33,0x47,0x68,0x69,0x75,\
+    0x65,0x39,0x6A,0xE9,0x10,0x7F,0xA5,\
+    0xB0,0x49,0x68,0x67,0x75,0x99,0xB9,\
+    0x49,0x68,0x67,0x75,0x99,0xB9,0x6A,\
+    0xE9,0x11,0x9D,0x6A,0x7E,0xC6,0x9C,\
+    0x17,0x7F,0x68,0x17,0xC6,0x84,0x58,\
+    0x43,0xB8,0xC9,0x58,0x68,0x8B,0xF9,\
+    0x6A,0x79,0xC6,0x9C,0x27,0xE2,0x67,\
+    0x17,0xC6,0x80,0xE7,0xC3,0xB8,0xCD,\
+    0x7D,0xE8,0xE6,0xED,0x15,0xB9,0x2A,\
+    0xA8,0x77,0x7D,0x24,0xD9,0x49,0x69,\
+    0x59,0x72,0x09,0x67,0x77,0x1D,0x39,\
+    0x3B,0xB8,0xC9,0x16,0x65,0x58,0x61,\
+    0x65,0x00,0x39,0x6A,0x76,0x2D,0x67,\
+    0x05,0xC6,0x96,0x77,0x6D,0x97,0xB8,\
+    0x89,0xD4,0x77,0x60,0x47,0x39,0x5A,\
+    0x6E,0x07,0x6D,0x27,0x39,0x38,0x6A,\
+    0x3F,0x03,0xB8,0xCE,0x71,0x06,0x88,\
+    0x95,0x37,0x3C,0x16,0x68,0x07,0x61,\
+    0x68,0x39,0x58,0x68,0x8B,0xB7,0x08,\
+    0xD6,0x39,0x78,0x67,0x54,0x47,0x29,\
+    0x45,0x76,0x24,0x6D,0x21,0x39,0x39,\
+    0xBC,0x3D,0x54,0x47,0x29,0x45,0x75,\
+    0x10,0x6D,0x47,0xF3,0x73,0x46,0x88,\
+    0x9A,0x20,0x1D,0x29,0x51,0x77,0x7D,\
+    0x3B,0x23,0x89,0x46,0x88,0x97,0x21,\
+    0x21,0x29,0x51,0x77,0x7D,0x3B,0x22,\
+    0x89,0x46,0x88,0x96,0x21,0x35,0x2A,\
+    0x94,0x77,0x6C,0x47,0x29,0x5A,0x8A,\
+    0x17,0x6D,0x47,0x91,0x73,0x51,0x77,\
+    0x7D,0x23,0x19,0x00,0x36,0x43,0x36,\
+    0x5E,0x4E,0x05,0x6D,0x6D,0x45,0x39,\
+    0x78,0x0B,0x75,0x57,0x0C,0x21,0x68,\
+    0x7D,0x6D,0x47,0x18,0xE9,0x54,0x77,\
+    0x47,0x5C,0xB9,0x21,0x68,0x57,0x6C,\
+    0x15,0x39,0x4B,0x68,0x65,0x6D,0x67,\
+    0x38,0x62,0x28,0x1A,0x8F,0x05,0x00,\
+    0x39,0x78,0x14,0x8F,0x26,0x39,0xC4,\
+    0x06,0x5F,0x2D,0x0D,0xB5,0x5E,0x00,\
+    0x5D,0x11,0x47,0x29,0x42,0x94,0x5D,\
+    0xE1,0x7A,0x45,0x39,0x6D,0x88,0x99,\
+    0x6F,0x45,0x39,0x78,0x03,0x4D,0x68,\
+    0x34,0x16,0x64,0x58,0x51,0x47,0x29,\
+    0x45,0x70,0x3F,0x03,0xB8,0xCD,0x77,\
+    0xD1,0x77,0x7D,0x60,0x39,0x1A,0xA4,\
+    0x77,0x7D,0x3B,0x3D,0x49,0x68,0x47,\
+    0x43,0xB8,0xCD,0x1A,0xA8,0x77,0x7D,\
+    0x3B,0x31,0x76,0x87,0x77,0x7D,0x68,\
+    0x2C,0x16,0x51,0x77,0x7D,0x3B,0x3D,\
+    0x16,0x51,0x77,0x7D,0x3B,0x31,0x7B,\
+    0xCF,0x39,0xD4,0x47,0x29,0x73,0xC0,\
+    0x38,0x82,0x47,0x29,0x73,0x68,0x11,\
+    0x61,0x37,0x39,0x59,0x62,0x64,0x91,\
+    0x47,0x38,0x39,0x78,0x14,0x8F,0x37,\
+    0x38,0x11,0x37,0x5D,0x32,0x09,0x67,\
+    0x77,0x1D,0x39,0x3B,0xB8,0xC9,0x16,\
+    0x65,0x58,0x61,0x65,0x00,0x39,0x6A,\
+    0x76,0x2D,0x67,0x05,0xC6,0x96,0x77,\
+    0x6D,0x97,0xB8,0x89,0xD4,0x77,0x60,\
+    0x47,0x39,0x5A,0x6E,0x07,0x6D,0x27,\
+    0x39,0x39,0xDE,0x6A,0x11,0x47,0x38,\
+    0xC6,0x90,0x6A,0x11,0x47,0xC0,0xC6,\
+    0x91,0x67,0x54,0x47,0x29,0x5A,0x88,\
+    0xB7,0x54,0x47,0x29,0x5A,0x8A,0xB7,\
+    0x54,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x5A,0x89,0x6A,0x2D,0xB8,0xC3,0x73,\
+    0x51,0x77,0x7D,0x23,0x19,0x5E,0x48,\
+    0x05,0x6D,0x57,0x0F,0x21,0x90,0x7D,\
+    0x6D,0x47,0x18,0xE9,0x54,0x77,0x47,\
+    0x5A,0xB9,0x21,0x90,0x57,0x6C,0x15,\
+    0x39,0x4B,0x68,0x65,0x6D,0x67,0x38,\
+    0x6E,0x28,0x1A,0x8F,0x26,0x39,0xC5,\
+    0xEC,0x5D,0x2D,0x0D,0xB4,0x5E,0x36,\
+    0x5F,0x11,0x47,0x29,0x42,0x94,0x5F,\
+    0xE0,0x7A,0x45,0x39,0x6B,0x88,0x9B,\
+    0x6D,0x45,0x39,0x78,0x03,0x4D,0x68,\
+    0x35,0x16,0x65,0x3F,0x03,0xB8,0xC1,\
+    0x71,0x06,0x88,0x9B,0x09,0x80,0x39,\
+    0x78,0x50,0x6D,0x64,0xF4,0x39,0x78,\
+    0x0B,0x69,0x37,0x39,0x09,0x46,0x88,\
+    0x9B,0x64,0xF9,0x39,0x78,0x0B,0x65,\
+    0x08,0xD6,0x39,0x78,0x58,0x79,0x68,\
+    0x00,0x39,0x78,0x0B,0x69,0x68,0x00,\
+    0x39,0x78,0x0B,0x65,0x05,0x9E,0x77,\
+    0xD1,0x77,0x7D,0x0D,0x91,0x76,0x87,\
+    0x77,0x7D,0x0D,0x39,0x5E,0x6C,0x07,\
+    0x6D,0x27,0x3B,0x49,0x69,0x5F,0x32,\
+    0x6D,0x66,0x77,0x36,0x39,0x18,0x09,\
+    0x6F,0xC6,0x98,0x64,0x91,0x47,0x38,\
+    0x39,0x78,0x13,0x4D,0x5A,0x45,0x39,\
+    0x76,0x88,0x95,0x0F,0x57,0xC6,0x9F,\
+    0x3F,0x03,0xB8,0xC1,0x49,0x6B,0x58,\
+    0x6D,0x37,0x27,0x16,0x68,0x16,0x6D,\
+    0xBD,0xD9,0x76,0x87,0x77,0x7D,0x0D,\
+    0x17,0xC6,0x9F,0x10,0x67,0x54,0xC5,\
+    0x39,0x69,0x77,0x7D,0x23,0x19,0x59,\
+    0x2A,0x6A,0x11,0x47,0xA3,0xC6,0x90,\
+    0x3F,0x03,0xB8,0xCE,0x71,0x06,0x88,\
+    0x95,0x37,0x3D,0x00,0x36,0x43,0x36,\
+    0x16,0x68,0x3F,0x15,0x47,0xA3,0x58,\
+    0x68,0x8D,0xDF,0x08,0xD6,0x39,0x78,\
+    0x3D,0x43,0xB8,0xC3,0x5F,0x70,0x67,\
+    0x43,0xB8,0xC2,0x6A,0x68,0x11,0x7D,\
+    0x0D,0x17,0xC6,0x9F,0x10,0x67,0x54,\
+    0xC5,0x39,0x69,0x77,0x7D,0x23,0x19,\
+    0x59,0x6E,0x35,0x54,0x47,0x29,0x5D,\
+    0x48,0x39,0x33,0x09,0x4C,0x77,0x3E,\
+    0x88,0x95,0x0F,0xDE,0x3A,0x64,0x16,\
+    0x6D,0xB8,0x4F,0x58,0x68,0x8C,0xEB,\
+    0x6D,0x79,0x73,0xE5,0x10,0x61,0x75,\
+    0x00,0x39,0x78,0x13,0x65,0xF5,0x45,\
+    0x39,0x6C,0x13,0x6B,0x37,0x39,0x59,\
+    0x68,0x77,0xDD,0x64,0xF4,0x39,0x78,\
+    0x0C,0x91,0x7A,0x40,0x39,0x78,0x13,\
+    0x65,0xB8,0xC7,0x13,0x14,0x77,0x7D,\
+    0x23,0x11,0x25,0x7D,0x47,0x6C,0x97,\
+    0x05,0x39,0x96,0x6D,0xED,0x0D,0x00,\
+    0x39,0x78,0x13,0x4D,0x20,0x11,0x47,\
+    0x68,0x3D,0x03,0xB8,0xC7,0x5E,0x48,\
+    0x05,0x6D,0x55,0x3E,0x29,0x5D,0x6F,\
+    0x6D,0x4D,0x39,0x39,0x49,0xA7,0x51,\
+    0x47,0x13,0x22,0xE8,0x6F,0x6D,0x15,\
+    0x3E,0xF7,0x14,0x77,0x92,0xF9,0x57,\
+    0xC6,0x96,0x12,0x8D,0x6F,0x45,0x39,\
+    0x78,0x03,0x4D,0x68,0x05,0x39,0x78,\
+    0x0C,0x91,0x68,0x35,0x16,0x65,0x3F,\
+    0x03,0xB8,0xC7,0x77,0xD1,0x77,0x7D,\
+    0x60,0x39,0x1A,0xA4,0x77,0x7D,0x3B,\
+    0x3D,0x49,0x68,0x47,0x43,0xB8,0xC7,\
+    0x1A,0xA8,0x77,0x7D,0x3B,0x31,0x16,\
+    0x51,0x77,0x7D,0x3C,0xC5,0x16,0x51,\
+    0x77,0x7D,0x3B,0x3D,0x16,0x51,0x77,\
+    0x7D,0x3B,0x31,0x00,0x36,0x43,0x36,\
+    0x7B,0xCF,0x39,0xD4,0x47,0x29,0x73,\
+    0xC0,0x55,0x6D,0x5D,0xBF,0x76,0x87,\
+    0x77,0x4D,0x0D,0x38,0x5F,0x64,0x64,\
+    0x91,0x47,0x38,0x39,0x78,0x14,0x8C,\
+    0x37,0x38,0x59,0x6A,0x07,0x6D,0x6B,\
+    0x26,0x17,0x77,0x5F,0x32,0x6D,0x66,\
+    0x77,0x36,0x39,0x18,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x09,0x80,0x39,0x78,\
+    0x37,0x25,0x09,0x80,0x39,0x78,0x5B,\
+    0x41,0x09,0x80,0x39,0x78,0x5D,0x29,\
+    0x09,0x80,0x39,0x78,0x2B,0x5D,0x09,\
+    0x80,0x39,0x78,0x2B,0x29,0x15,0x80,\
+    0x39,0x78,0x1B,0x6D,0x09,0x4C,0x77,\
+    0x19,0x35,0x54,0x47,0x29,0x55,0x78,\
+    0x39,0xD4,0x47,0x29,0x07,0x00,0x39,\
+    0xD4,0x47,0x29,0x70,0x84,0x39,0xD4,\
+    0x47,0x29,0x1E,0xD8,0x39,0x18,0x09,\
+    0x48,0x77,0x19,0x39,0x1C,0x65,0x56,\
+    0x39,0x6C,0x57,0x02,0x47,0x31,0x29,\
+    0x47,0x77,0x62,0x0D,0xB0,0x5E,0x66,\
+    0x3D,0x6D,0x20,0x33,0xE9,0x54,0x77,\
+    0x92,0x55,0xE1,0x73,0x68,0x11,0x9B,\
+    0x09,0x4C,0x19,0x07,0x77,0x69,0x57,\
+    0x16,0x39,0x63,0x3D,0xE5,0x20,0x37,\
+    0x73,0x68,0x10,0x67,0x97,0x05,0x39,\
+    0x97,0x35,0x75,0x0D,0x39,0x5F,0x9E,\
+    0x39,0x18,0x09,0x48,0x77,0x19,0x3F,\
+    0x8A,0x48,0x35,0x25,0x47,0x77,0x72,\
+    0x6F,0x56,0x39,0x48,0x7F,0x54,0x47,\
+    0x3D,0x39,0x78,0x1B,0x64,0x20,0x39,\
+    0x38,0x7C,0x55,0x11,0x47,0x29,0x7B,\
+    0x20,0x5D,0x24,0x37,0x39,0x29,0x6E,\
+    0x9E,0xE5,0x9C,0xF9,0x43,0x68,0x6D,\
+    0x40,0x47,0x3B,0x00,0x36,0x43,0x36,\
+    0x11,0x54,0x77,0x92,0xBC,0x39,0x19,\
+    0x6D,0x9E,0xE5,0x67,0x79,0x49,0x60,\
+    0x9E,0xE5,0x55,0x09,0x71,0x69,0xB7,\
+    0xD1,0x47,0x39,0x39,0x98,0xB5,0xD1,\
+    0xB8,0xC6,0xC6,0x67,0xF5,0xED,0x56,\
+    0xB8,0x71,0x69,0x59,0x51,0x47,0xC6,\
+    0xC2,0x6A,0xCD,0x11,0x47,0x37,0x5F,\
+    0x44,0x57,0x68,0xAE,0xB1,0x19,0x28,\
+    0xA6,0xAA,0x37,0x39,0x29,0x6E,0x9E,\
+    0xE5,0x94,0xF9,0x09,0x79,0xB7,0xD1,\
+    0x47,0x39,0x3E,0x97,0x9C,0xE5,0x75,\
+    0x29,0xF9,0xD4,0x77,0x6D,0xB8,0xD9,\
+    0xFB,0xD4,0x88,0x92,0x47,0x26,0xBB,\
+    0xE8,0x47,0xEC,0x67,0x3C,0xD0,0xE0,\
+    0x55,0x2D,0x45,0x48,0xC6,0x87,0x0F,\
+    0x6D,0x45,0x48,0xC6,0x98,0x0F,0x6D,\
+    0x37,0x31,0x2B,0x59,0x3F,0x6C,0x87,\
+    0x85,0x39,0x68,0x77,0x62,0x85,0x85,\
+    0xC6,0x97,0x88,0x9D,0xC5,0xB9,0x2A,\
+    0xE9,0x3F,0x6C,0x39,0x39,0x73,0x45,\
+    0x77,0x6B,0x20,0x11,0x1B,0x54,0x77,\
+    0x92,0xBC,0x3F,0x15,0x6D,0x9E,0xE3,\
+    0x67,0x7F,0xE8,0xAF,0xA6,0xAC,0x57,\
+    0x8D,0x41,0x68,0x57,0x6A,0x15,0x39,\
+    0x47,0x68,0x69,0x6D,0xF9,0x14,0x39,\
+    0x6E,0x12,0x85,0x67,0x3E,0x68,0x28,\
+    0x1B,0x4D,0x65,0x05,0x39,0x97,0x8C,\
+    0x6B,0x6B,0x3C,0xD0,0xE6,0x57,0x2B,\
+    0x96,0xFE,0xE8,0xA9,0x35,0x7D,0x67,\
+    0x3E,0x6B,0x68,0x09,0x6D,0x59,0x39,\
+    0x19,0x6F,0x26,0x2D,0x2A,0xD3,0x19,\
+    0x6D,0x9E,0xE5,0x67,0x79,0x49,0x64,\
+    0x9E,0xE5,0x55,0x09,0x71,0x69,0xB7,\
+    0xD1,0x47,0x39,0x00,0x36,0x43,0x36,\
+    0x39,0x98,0xB5,0xD1,0xB8,0xC6,0xC6,\
+    0x67,0xF5,0xED,0x56,0xB8,0x71,0x69,\
+    0x07,0x6C,0x27,0x3B,0x49,0x68,0x5F,\
+    0x72,0x6D,0x26,0x15,0x77,0x59,0x72,\
+    0x6F,0x66,0x13,0x37,0x39,0x18,0x09,\
+    0x48,0x77,0x3E,0x88,0x95,0x68,0x3F,\
+    0x25,0x46,0x77,0x66,0xFB,0x05,0x39,\
+    0x78,0x11,0x43,0x67,0x45,0x39,0x97,\
+    0x8D,0xCD,0x57,0x11,0x39,0x69,0x93,\
+    0xE5,0x87,0x85,0x39,0x68,0x77,0x6C,\
+    0x6A,0x79,0xC6,0x94,0x57,0x11,0x47,\
+    0xC6,0xC3,0xC8,0x7F,0xC5,0x47,0x3B,\
+    0x39,0x69,0x77,0x54,0x47,0x3B,0x39,\
+    0x78,0x14,0x85,0x27,0x39,0x38,0xF0,\
+    0xCB,0x51,0x47,0x28,0x5F,0x46,0x57,\
+    0x11,0x47,0xC6,0xC3,0xC8,0x67,0x45,\
+    0x47,0x38,0xDB,0xE0,0xB7,0xD1,0x47,\
+    0x39,0x39,0x69,0x5A,0x2D,0xB8,0xC5,\
+    0x19,0x14,0x77,0x92,0xBD,0x99,0x31,\
+    0xC0,0x77,0x6C,0x47,0x38,0x39,0x51,\
+    0x77,0x6C,0x47,0x29,0x5A,0x80,0x17,\
+    0x6D,0x46,0x5D,0x31,0x51,0x77,0x69,\
+    0x47,0x29,0x55,0x61,0x10,0x6D,0x46,\
+    0x61,0x16,0x65,0x58,0x61,0x68,0x3E,\
+    0x49,0x68,0x67,0x6B,0xAE,0xB1,0x19,\
+    0x28,0xA6,0x91,0x47,0xC6,0xC2,0x68,\
+    0x49,0x7D,0x89,0x85,0x39,0x68,0x77,\
+    0x92,0xAF,0xBE,0x49,0x6A,0xC7,0xEA,\
+    0x21,0x39,0x39,0xEE,0x59,0x51,0x47,\
+    0xC6,0xC2,0x6A,0x07,0x6D,0x57,0x3F,\
+    0xD0,0xE0,0x5D,0x2D,0x6F,0x74,0xE0,\
+    0x94,0x77,0x92,0xBC,0x3F,0x16,0x64,\
+    0x47,0x58,0x3F,0x39,0xD3,0xE0,0xB7,\
+    0xD1,0x47,0x39,0x00,0x36,0x43,0x36,\
+    0x3E,0x97,0x05,0x6A,0x85,0x39,0x16,\
+    0x69,0x47,0x58,0x3F,0x39,0xD3,0xE0,\
+    0xB7,0xD1,0x47,0x39,0x3E,0x97,0x91,\
+    0xE5,0x35,0x39,0x2B,0x68,0x58,0x6C,\
+    0x09,0x80,0x39,0x78,0x37,0xFD,0x39,\
+    0x39,0x27,0x68,0x38,0x82,0x47,0x35,\
+    0x87,0x14,0x77,0x92,0x20,0x39,0x39,\
+    0xAA,0x3D,0x6A,0x2C,0x39,0x39,0xD4,\
+    0x57,0x11,0x47,0x29,0x7B,0xC8,0x57,\
+    0x6A,0x97,0xB9,0x1B,0x68,0xA7,0xED,\
+    0x95,0xB9,0xDC,0xE0,0xA5,0xED,0x96,\
+    0xF8,0x13,0x38,0x3D,0xE0,0x20,0x39,\
+    0x39,0xF6,0x58,0x61,0x68,0x3E,0x77,\
+    0xFD,0x27,0xE2,0x27,0x39,0x39,0xFA,\
+    0x07,0x65,0xF7,0xBE,0x5F,0x68,0x77,\
+    0x1B,0x69,0x05,0x39,0x97,0x8C,0x6F,\
+    0x37,0x39,0x29,0x6E,0x9E,0xE5,0x6D,\
+    0x79,0x11,0x25,0xAE,0x91,0x47,0xC6,\
+    0xC2,0x6E,0x58,0x61,0x77,0x0C,0x41,\
+    0x68,0x9D,0xE5,0x87,0x85,0x39,0x68,\
+    0x70,0x92,0x35,0x3E,0xFB,0x68,0x58,\
+    0x6C,0x77,0x0C,0x41,0x68,0x9D,0xE5,\
+    0x87,0x85,0x39,0x68,0x70,0x92,0xA1,\
+    0xB1,0x4B,0x68,0x65,0x6D,0x68,0x38,\
+    0x77,0xD1,0x77,0x7D,0x07,0xA9,0x47,\
+    0x68,0x69,0x6D,0x08,0xD6,0x39,0x64,\
+    0xC9,0x11,0x47,0xC6,0x5E,0x5E,0x07,\
+    0x12,0x87,0x3E,0x17,0x68,0x57,0x11,\
+    0x47,0x29,0x7B,0x38,0x57,0x6A,0xAE,\
+    0xB1,0xE8,0xA8,0x5D,0x3D,0x0D,0xB4,\
+    0x5E,0x76,0x58,0x61,0x68,0x3E,0x77,\
+    0xFD,0x27,0xE2,0x27,0x2D,0x49,0x6E,\
+    0xC7,0xEA,0x21,0x37,0x2A,0xAE,0x77,\
+    0x7D,0x2B,0x31,0x00,0x36,0x43,0x36,\
+    0x39,0x51,0x77,0x69,0x47,0x29,0x5A,\
+    0x80,0x07,0x6D,0x77,0x00,0x39,0x97,\
+    0x8D,0xE7,0x6A,0x79,0xC6,0x94,0x07,\
+    0x92,0x4A,0xB9,0xF8,0x11,0x77,0x92,\
+    0xBD,0x9D,0x17,0x77,0x5F,0x32,0x6D,\
+    0x66,0x15,0x77,0x39,0x33,0x09,0x4C,\
+    0x77,0x19,0x39,0x3B,0x47,0x39,0x16,\
+    0x6F,0x58,0x6B,0x68,0x3C,0x25,0x46,\
+    0x77,0x66,0x6D,0x05,0x39,0x97,0x8C,\
+    0x6D,0x37,0x39,0x29,0x6E,0x9E,0xE5,\
+    0x67,0x79,0x49,0x6C,0x9E,0xE5,0x55,\
+    0x09,0x61,0x69,0xB7,0xD1,0x47,0x39,\
+    0x39,0x98,0xB5,0xD1,0xB8,0xC6,0xC6,\
+    0x67,0xF5,0xED,0x56,0xB8,0x61,0x69,\
+    0x59,0x51,0x47,0xC6,0xC2,0x6A,0x75,\
+    0x1D,0xB8,0xD6,0x41,0x68,0x07,0x6D,\
+    0x57,0x17,0x39,0x7B,0x65,0x5D,0x1F,\
+    0x38,0xF9,0xD4,0x77,0x6D,0x47,0x36,\
+    0xFB,0xD4,0x88,0x92,0xB8,0xC9,0xBB,\
+    0xE8,0x66,0xEC,0x1F,0x38,0x19,0x46,\
+    0x77,0x61,0xAC,0xB1,0x0B,0x58,0x0F,\
+    0x6D,0x87,0x85,0x39,0x68,0x88,0x8D,\
+    0x85,0x85,0xC6,0x97,0x77,0x72,0xC5,\
+    0xB9,0x08,0xE9,0x0F,0x6D,0x45,0x49,\
+    0xC6,0x87,0x0F,0x6D,0x45,0x49,0xC6,\
+    0x98,0x0F,0x6D,0x0D,0x17,0x39,0x7F,\
+    0x10,0x61,0x37,0x39,0x34,0xA8,0xF6,\
+    0x14,0x47,0xC6,0xC3,0xCA,0x17,0x67,\
+    0x37,0xC6,0x34,0xE8,0xB6,0x14,0x47,\
+    0xC6,0xC3,0xCA,0x5D,0x72,0x6B,0x26,\
+    0x17,0x77,0x39,0x33,0x09,0x4C,0x77,\
+    0x3E,0x77,0x6D,0x68,0x3E,0x16,0x6E,\
+    0x58,0x68,0x5B,0x17,0x39,0x63,0x5D,\
+    0x51,0x47,0xC6,0x00,0x36,0x43,0x36,\
+    0xC2,0x68,0x07,0x6D,0x57,0x3F,0xD0,\
+    0xE0,0x57,0x2D,0x37,0x31,0xD0,0xE0,\
+    0x65,0x5D,0x1F,0x38,0xF9,0xD4,0x77,\
+    0x6D,0x47,0xC9,0xFB,0xD4,0x88,0x92,\
+    0xB8,0x36,0xBB,0xE8,0x66,0xEC,0x1F,\
+    0x38,0x17,0x54,0x77,0x92,0xBC,0x3B,\
+    0x49,0x69,0x9E,0xE5,0x75,0x09,0x41,\
+    0x68,0xB7,0xD1,0x47,0x39,0x39,0x78,\
+    0xB5,0xD1,0xB8,0xC6,0xC6,0x87,0xF5,\
+    0xED,0x76,0xB8,0x41,0x68,0x07,0x6D,\
+    0x57,0x17,0x39,0x7B,0x65,0x5D,0x1F,\
+    0x38,0xF9,0xD4,0x77,0x6D,0x47,0x36,\
+    0xFB,0xD4,0x88,0x92,0xB8,0xC9,0xBB,\
+    0xE8,0x66,0xEC,0x1F,0x38,0x19,0x46,\
+    0x77,0x61,0xAC,0xB1,0x0B,0x58,0x0F,\
+    0x6D,0x87,0x85,0x39,0x68,0x88,0x8D,\
+    0x85,0x85,0xC6,0x97,0x77,0x72,0xC5,\
+    0xB9,0x08,0xE9,0x0F,0x6D,0x45,0x49,\
+    0xC6,0x87,0x0F,0x6D,0x45,0x49,0xC6,\
+    0x98,0x0F,0x6D,0x0D,0x17,0x39,0x7F,\
+    0x10,0x61,0x37,0x39,0x34,0xA8,0xF6,\
+    0x14,0x47,0xC6,0xC3,0xCA,0x17,0x67,\
+    0x37,0xC6,0x34,0xE8,0xB6,0x14,0x47,\
+    0xC6,0xC3,0xCA,0x5D,0x72,0x6B,0x26,\
+    0x17,0x77,0x39,0x33,0x09,0x4C,0x77,\
+    0x3E,0x88,0x95,0x0F,0xDE,0x06,0x6C,\
+    0x6A,0x11,0x47,0x39,0xC6,0x97,0x63,\
+    0x51,0x47,0x39,0x45,0x68,0x0D,0x6D,\
+    0x71,0x05,0x3E,0x97,0x49,0x51,0x40,\
+    0xC6,0x31,0x91,0x77,0x6C,0x47,0xC6,\
+    0xC3,0xE8,0x35,0x54,0x47,0xC6,0xC3,\
+    0xEE,0x7F,0x94,0x47,0x3D,0x39,0x97,\
+    0x8D,0xED,0x37,0x39,0x29,0x46,0x77,\
+    0x67,0xA8,0xB1,0x00,0x36,0x43,0x36,\
+    0x2B,0x51,0x77,0x92,0xBD,0xBE,0xF9,\
+    0xD4,0x77,0x6D,0x47,0xB9,0xFB,0xD4,\
+    0x88,0x92,0xB8,0x46,0xBB,0xE8,0x64,\
+    0xAC,0x47,0xC6,0xC3,0xEF,0x5D,0x11,\
+    0x47,0xC6,0xC3,0xE1,0x07,0x6D,0x57,\
+    0x17,0x39,0x60,0x9A,0xE5,0x55,0x2C,\
+    0xF9,0xD4,0x77,0x6D,0x47,0xF9,0xFB,\
+    0xD4,0x88,0x92,0xB8,0x06,0xBB,0xE8,\
+    0x6D,0xEC,0x37,0x39,0x29,0x46,0x77,\
+    0x66,0xA0,0xB1,0x2B,0x7D,0xB7,0xD1,\
+    0x47,0x39,0x39,0x50,0xB5,0xD1,0xB8,\
+    0xC6,0xC6,0xAF,0xF5,0xED,0x5D,0xB8,\
+    0x49,0x68,0x67,0x43,0x47,0x35,0x2B,\
+    0x7D,0xB7,0xD1,0x47,0x39,0x39,0x6F,\
+    0xB5,0xD1,0xB8,0xC6,0xC6,0x90,0xF5,\
+    0xED,0x5D,0xB8,0x2A,0x86,0x77,0x64,\
+    0x47,0xC6,0xC3,0xE0,0x07,0x6A,0x55,\
+    0x00,0x39,0x97,0x8D,0xEA,0x87,0x85,\
+    0x39,0x68,0x77,0x6A,0x85,0x85,0xC6,\
+    0x97,0x88,0x95,0xC5,0xB9,0x2A,0xA9,\
+    0x77,0x92,0xBD,0xBE,0x41,0x68,0x55,\
+    0x11,0x47,0xC6,0xC2,0x6A,0x55,0x51,\
+    0x47,0xC6,0xC2,0x68,0x57,0x69,0xAE,\
+    0xB1,0x13,0x28,0x75,0x58,0x47,0x36,\
+    0x21,0x69,0x57,0x20,0x96,0xF0,0x3B,\
+    0x38,0x88,0x82,0x67,0x3D,0x6B,0x68,\
+    0x0F,0x6D,0x5F,0x39,0x81,0x14,0x77,\
+    0x62,0x2A,0xE7,0x19,0x54,0x77,0x6D,\
+    0x40,0xC6,0xD2,0xE0,0x45,0x54,0x47,\
+    0xC6,0xC3,0xF8,0xB7,0xD1,0x47,0x39,\
+    0xC6,0x88,0xB5,0xD1,0xB8,0xC6,0x39,\
+    0x77,0xF5,0xED,0x74,0xF8,0x39,0x97,\
+    0x8D,0xFD,0x37,0x3E,0x0B,0x51,0x77,\
+    0x92,0xBD,0xA9,0x00,0x36,0x43,0x36,\
+    0xF9,0xD4,0x77,0x6D,0x47,0x3E,0xFB,\
+    0xD4,0x88,0x92,0xB8,0xC1,0xBB,0xE8,\
+    0x44,0xAC,0x47,0xC6,0xC3,0xF8,0x57,\
+    0x51,0x47,0x39,0x46,0x97,0x94,0xE5,\
+    0x75,0x00,0x39,0x97,0x8D,0xFF,0x87,\
+    0x85,0x39,0x68,0x88,0x93,0x85,0x85,\
+    0xC6,0x97,0x77,0x6C,0xC5,0xB9,0x0A,\
+    0xA9,0x77,0x92,0xBD,0xAB,0x41,0x68,\
+    0x5D,0x11,0x47,0x29,0x7B,0xF0,0x57,\
+    0x69,0x97,0xB9,0x1B,0x68,0xA7,0xED,\
+    0x95,0xB9,0xDC,0xE0,0xA5,0xED,0x4B,\
+    0x0C,0x39,0x66,0x6F,0x6F,0x21,0x25,\
+    0x73,0x46,0x88,0x92,0x20,0x35,0x0B,\
+    0x5D,0x6F,0x6D,0xFC,0x78,0x7F,0x29,\
+    0xB1,0x2C,0x27,0x33,0x03,0x5D,0x6F,\
+    0x6D,0x5A,0x45,0x39,0x69,0x88,0x92,\
+    0x67,0x3D,0x6B,0x68,0x0F,0x6D,0x5F,\
+    0x39,0x19,0x6C,0x2E,0x2D,0x2A,0xF9,\
+    0x49,0x68,0x47,0x6E,0xAC,0xB1,0x0B,\
+    0x51,0x77,0x92,0xBD,0xAD,0xF9,0xD4,\
+    0x77,0x6D,0xB8,0xD9,0xFB,0xD4,0x88,\
+    0x92,0x47,0x26,0xBB,0xE8,0x44,0xAC,\
+    0x47,0xC6,0xC3,0xFC,0x07,0x6A,0x75,\
+    0x00,0x39,0x97,0x8D,0xF9,0x87,0x85,\
+    0x39,0x68,0x77,0x6A,0x85,0x85,0xC6,\
+    0x97,0x88,0x95,0xC5,0xB9,0x0A,0xA9,\
+    0x77,0x92,0xBD,0xAD,0x19,0x54,0x77,\
+    0x6D,0x38,0xC6,0xDA,0xE0,0x45,0x54,\
+    0x47,0xC6,0xC3,0xFE,0xB7,0xD1,0x47,\
+    0x39,0xC6,0x96,0xB5,0xD1,0xB8,0xC6,\
+    0x39,0x69,0xF5,0xED,0x74,0xF8,0x39,\
+    0x97,0x8D,0xFB,0x67,0x45,0x39,0x97,\
+    0x8C,0x8D,0x37,0x3D,0xD0,0xE0,0x65,\
+    0x45,0x47,0x38,0x00,0x36,0x43,0x36,\
+    0xF9,0xD4,0x77,0x6D,0x47,0xC9,0xFB,\
+    0xD4,0x88,0x92,0xB8,0x36,0xBB,0xE8,\
+    0x66,0x2C,0x47,0x38,0x13,0x14,0x77,\
+    0x92,0xBC,0xDB,0x3B,0x3D,0x88,0x82,\
+    0x67,0x45,0x39,0x97,0x8C,0x8D,0x37,\
+    0x31,0x2B,0x40,0x77,0x6C,0x87,0x85,\
+    0x39,0x68,0x77,0x62,0x85,0x85,0xC6,\
+    0x97,0x88,0x9D,0xC5,0xB9,0x28,0x29,\
+    0x77,0x6C,0x37,0x39,0x09,0x6D,0x9C,\
+    0xE5,0x75,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0xB8,0xD9,0xFB,0xD4,0x88,0x92,0x47,\
+    0x26,0xBB,0xE8,0x4D,0xEC,0x45,0x6C,\
+    0xC6,0x87,0x75,0x38,0xB8,0xC9,0x39,\
+    0x11,0x37,0x6D,0x47,0xC6,0xC3,0xCA,\
+    0x0D,0x6D,0x6D,0x45,0x39,0x78,0x35,\
+    0xF5,0x67,0x3C,0xE9,0xE8,0x51,0x6D,\
+    0x97,0xB9,0xEF,0xE8,0x92,0xE5,0x91,\
+    0xB9,0x35,0x5D,0x77,0x62,0x7F,0x3B,\
+    0x5F,0x72,0x3D,0x6F,0x20,0x37,0x0F,\
+    0x5D,0x4F,0x6D,0x75,0x3A,0x84,0x29,\
+    0x31,0x2C,0x89,0x78,0x59,0x60,0x4B,\
+    0x58,0x7F,0x39,0x2D,0x54,0x77,0x6C,\
+    0x67,0x3C,0x6B,0x68,0x0D,0x6D,0x5D,\
+    0x39,0x19,0x6D,0x2E,0x2D,0x2A,0xFB,\
+    0x49,0x68,0x47,0x6A,0xAC,0xB1,0x0B,\
+    0x51,0x77,0x92,0xBD,0xA1,0xF9,0xD4,\
+    0x77,0x6D,0xB8,0xD9,0xFB,0xD4,0x88,\
+    0x92,0x47,0x26,0xBB,0xE8,0x44,0xAC,\
+    0x47,0xC6,0xC3,0xF0,0x07,0x6A,0x75,\
+    0x00,0x39,0x97,0x8D,0xF5,0x87,0x85,\
+    0x39,0x68,0x77,0x6A,0x85,0x85,0xC6,\
+    0x97,0x88,0x95,0xC5,0xB9,0x0A,0xA9,\
+    0x77,0x92,0xBD,0xA1,0x19,0x54,0x77,\
+    0x6D,0x38,0xC6,0x00,0x36,0x43,0x36,\
+    0xDA,0xE0,0x45,0x54,0x47,0xC6,0xC3,\
+    0xF2,0xB7,0xD1,0x47,0x39,0xC6,0x96,\
+    0xB5,0xD1,0xB8,0xC6,0x39,0x69,0xF5,\
+    0xED,0x74,0xF8,0x39,0x97,0x8D,0xF7,\
+    0x67,0x45,0x39,0x97,0x8C,0x9D,0x37,\
+    0x3D,0xD0,0xE0,0x65,0x45,0x47,0x38,\
+    0xF9,0xD4,0x77,0x6D,0x47,0xC9,0xFB,\
+    0xD4,0x88,0x92,0xB8,0x36,0xBB,0xE8,\
+    0x66,0x2C,0x47,0x38,0x13,0x14,0x77,\
+    0x92,0xBC,0xCB,0x3B,0x3D,0x88,0x82,\
+    0x67,0x45,0x39,0x97,0x8C,0x9D,0x37,\
+    0x31,0x2B,0x40,0x77,0x6C,0x87,0x85,\
+    0x39,0x68,0x77,0x62,0x85,0x85,0xC6,\
+    0x97,0x88,0x9D,0xC5,0xB9,0x28,0x29,\
+    0x77,0x6C,0x37,0x39,0x09,0x6E,0x9C,\
+    0xE5,0x75,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0xB8,0xD9,0xFB,0xD4,0x88,0x92,0x47,\
+    0x26,0xBB,0xE8,0x4D,0xEC,0x45,0x6C,\
+    0xC6,0x87,0x75,0x38,0xB8,0xC9,0x39,\
+    0x11,0xF7,0x6D,0x47,0xC6,0xC3,0xCA,\
+    0x09,0x6D,0x53,0x05,0x39,0x66,0x5D,\
+    0x11,0x47,0x29,0x7B,0x20,0x57,0x6A,\
+    0xAE,0xB1,0x25,0x5D,0x7F,0x6F,0xFB,\
+    0x3B,0x5E,0x64,0x57,0x6A,0xAE,0xB1,\
+    0x31,0x5D,0x77,0x6D,0x4F,0x3C,0x5E,\
+    0x4A,0x07,0x6C,0x68,0x39,0x49,0x60,\
+    0x58,0x6D,0x67,0x74,0x19,0x6F,0x9E,\
+    0xE5,0x96,0xF9,0x49,0x68,0x47,0x7D,\
+    0x68,0x39,0x16,0x6E,0x16,0x6D,0xBC,\
+    0x45,0x76,0x87,0x77,0x7D,0x27,0x27,\
+    0x7B,0xCF,0x07,0x65,0x68,0x39,0x19,\
+    0x25,0x57,0x6A,0xAE,0xB1,0xE8,0xA8,\
+    0x07,0x6D,0x77,0x29,0x16,0x68,0x58,\
+    0x6B,0x26,0x39,0x00,0x36,0x43,0x36,\
+    0xC2,0x34,0x38,0x82,0x47,0x29,0x19,\
+    0x6F,0x25,0x6D,0x39,0x39,0x27,0x68,\
+    0x57,0x6A,0x1C,0x79,0x54,0xF2,0x0B,\
+    0x6D,0x53,0x05,0x39,0x67,0x5D,0x11,\
+    0x47,0x29,0x7B,0xF0,0x57,0x6B,0x97,\
+    0xB9,0x13,0x68,0xA7,0xED,0x9D,0xB9,\
+    0xDC,0xE0,0xAD,0xED,0x59,0x0C,0x61,\
+    0x6A,0xC9,0x6F,0x20,0x19,0x87,0x54,\
+    0x77,0x63,0x20,0x23,0x49,0x69,0x58,\
+    0x6D,0x37,0x31,0x16,0x68,0x07,0x6D,\
+    0x77,0x0C,0x61,0x68,0x58,0x6D,0x68,\
+    0x3E,0x58,0x68,0x8D,0x0D,0x08,0xD6,\
+    0x39,0x78,0x57,0x6B,0x15,0x39,0x45,\
+    0x68,0x6B,0x6D,0x67,0x3F,0x60,0x28,\
+    0x1A,0xD1,0x77,0x05,0x3E,0x88,0xB7,\
+    0x14,0x47,0xC6,0xC3,0xEC,0xF7,0x11,\
+    0x45,0x59,0x0A,0xA8,0x77,0x92,0xBD,\
+    0xBD,0x19,0x14,0x77,0x92,0xBD,0xB9,\
+    0x49,0x6F,0x65,0x45,0x47,0x38,0xF9,\
+    0xD4,0x77,0x6D,0x47,0x36,0xFB,0xD4,\
+    0x88,0x92,0xB8,0xC9,0xBB,0xE8,0x66,\
+    0x2C,0x47,0x38,0x13,0x14,0x77,0x92,\
+    0xBD,0xBF,0x3B,0x7D,0x77,0x9E,0x45,\
+    0x2C,0x39,0x94,0x7F,0xB8,0x47,0x3F,\
+    0x31,0xBD,0x77,0x6A,0x4F,0x80,0x39,\
+    0x6C,0x77,0x92,0xBD,0xB9,0x31,0x91,\
+    0x77,0x69,0x47,0x29,0x55,0x61,0x53,\
+    0x72,0x61,0x26,0x11,0x77,0x5D,0x72,\
+    0x6B,0x26,0x17,0x77,0x5D,0x32,0x09,\
+    0x67,0x77,0x1D,0x39,0x1C,0x05,0x00,\
+    0x39,0x78,0x1B,0x65,0x67,0x45,0x39,\
+    0x78,0x1B,0x64,0x4F,0xA9,0x39,0x6F,\
+    0x7F,0xFD,0x47,0x3C,0x31,0xF8,0x77,\
+    0x6B,0x4F,0xA9,0x00,0x36,0x43,0x36,\
+    0x39,0x6C,0x55,0x11,0x47,0x29,0x07,\
+    0xF6,0xE8,0x91,0x47,0x39,0x39,0x60,\
+    0x57,0x22,0x67,0xE0,0x09,0xB1,0x16,\
+    0x6D,0xBC,0x25,0x69,0xE7,0x39,0x18,\
+    0x45,0x3A,0x39,0x6B,0x75,0x6D,0x09,\
+    0x48,0x77,0x19,0x58,0x6A,0x59,0x16,\
+    0x39,0x63,0x57,0x02,0x47,0x35,0x73,\
+    0x51,0x77,0x7D,0x2C,0xC7,0x5F,0x6E,\
+    0x07,0x6D,0x27,0x39,0x39,0x02,0x7F,\
+    0x54,0x47,0x3E,0x39,0x78,0x04,0x98,\
+    0x20,0x39,0x39,0x34,0x07,0x6D,0x57,\
+    0x3E,0x16,0x68,0x58,0x65,0x68,0x05,\
+    0x39,0x78,0x1B,0x4D,0x09,0x80,0x39,\
+    0x78,0x43,0x9D,0x89,0x45,0x39,0x97,\
+    0x44,0xAA,0x47,0x29,0x55,0x72,0x38,\
+    0x82,0x47,0x35,0x73,0x51,0x77,0x7D,\
+    0x2B,0x29,0x5E,0x62,0x64,0x91,0x47,\
+    0x38,0x39,0x78,0x04,0x9B,0x27,0x23,\
+    0x73,0x51,0x77,0x7D,0x24,0xC9,0x5E,\
+    0x62,0x64,0x91,0x47,0x3D,0x39,0x78,\
+    0x04,0x9B,0x27,0x31,0x2A,0x94,0x77,\
+    0x6E,0x47,0x29,0x4A,0x9E,0x7F,0xD4,\
+    0x47,0x3E,0x39,0x78,0x04,0x98,0x37,\
+    0x38,0x59,0x6A,0x07,0x6D,0x69,0x26,\
+    0x77,0x1D,0x58,0x6A,0x68,0x3F,0x27,\
+    0x47,0x77,0x62,0x67,0x56,0x39,0x78,\
+    0x55,0x11,0x47,0x29,0x7B,0xF0,0x07,\
+    0x6D,0x57,0x3E,0xE9,0xE8,0x55,0x6D,\
+    0x97,0xB9,0xEB,0xE8,0x92,0xE5,0x95,\
+    0xB9,0x17,0x69,0x4B,0x5C,0x3F,0x39,\
+    0x85,0x14,0x75,0x2C,0x21,0x37,0x7B,\
+    0x51,0x77,0x7D,0x2B,0x29,0x7B,0x51,\
+    0x77,0x7D,0x24,0xC9,0x59,0x76,0xCB,\
+    0x11,0x40,0xD9,0x00,0x36,0x43,0x36,\
+    0x5F,0x78,0x35,0x54,0x47,0x29,0x55,\
+    0x78,0x64,0x91,0x47,0x38,0x39,0x78,\
+    0x14,0x9D,0x27,0x31,0x2A,0x94,0x77,\
+    0x6C,0x47,0x29,0x55,0x78,0x58,0x65,\
+    0x37,0x39,0x29,0x59,0x0F,0x6B,0x68,\
+    0x39,0x77,0xD1,0x77,0x7D,0x05,0xC9,\
+    0x69,0xE7,0x7F,0x54,0x47,0x3C,0x39,\
+    0x78,0x04,0x98,0x20,0x71,0x47,0x68,\
+    0x45,0x54,0x47,0x29,0x55,0x72,0x10,\
+    0x45,0x6B,0x05,0x39,0x68,0x70,0xB9,\
+    0x67,0x45,0x39,0x78,0x1B,0x4D,0x65,\
+    0x45,0x39,0x78,0x13,0x45,0x54,0x89,\
+    0x41,0x68,0x0F,0x6D,0x67,0x3E,0x6B,\
+    0x28,0x09,0x6D,0x79,0x39,0x8B,0x2F,\
+    0x14,0x69,0xF9,0xBF,0x54,0x82,0x7F,\
+    0xD4,0x47,0x3C,0x39,0x78,0x04,0x98,\
+    0x37,0x39,0x09,0x69,0x58,0x6D,0x09,\
+    0x80,0x39,0x78,0x50,0xF5,0x1F,0xB6,\
+    0x15,0x77,0x59,0x72,0x09,0x4C,0x16,\
+    0x65,0x5D,0x02,0x47,0x35,0x29,0x45,\
+    0x77,0x6F,0xF7,0x05,0x39,0x56,0x11,\
+    0x65,0x05,0x40,0x39,0x78,0x13,0x7D,\
+    0x27,0x0B,0x2A,0xA8,0x77,0x7D,0x23,\
+    0x11,0x49,0x6C,0x58,0x6D,0x0F,0x54,\
+    0x39,0x6B,0x58,0x51,0x47,0x29,0x5D,\
+    0x41,0x39,0xD4,0x47,0x29,0x0D,0x98,\
+    0x07,0x6D,0x57,0x14,0x39,0x69,0x58,\
+    0x6D,0x37,0x39,0x29,0x7D,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x50,0x1D,0x08,\
+    0xD6,0x39,0x7C,0x5D,0x32,0x09,0x4C,\
+    0x77,0x19,0x39,0x18,0x09,0x48,0x77,\
+    0x19,0x39,0x1C,0x4F,0x00,0x39,0x6D,\
+    0x77,0x7D,0x2B,0x21,0x5E,0x64,0x39,\
+    0xD4,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x70,0xE4,0x39,0xD4,0x47,0x29,0x70,\
+    0xC4,0x57,0x54,0x47,0x29,0x4A,0x90,\
+    0x10,0x45,0xF7,0x80,0x39,0x78,0x1B,\
+    0x6D,0x25,0x19,0x7B,0xD1,0x77,0x7D,\
+    0x34,0xC1,0x77,0xD1,0x77,0x7D,0x63,\
+    0x29,0x77,0xD1,0x77,0x7D,0x0E,0xD5,\
+    0x49,0x69,0x64,0xAD,0x47,0x29,0x52,\
+    0x95,0x64,0xAD,0x47,0x29,0x52,0x96,\
+    0x39,0x18,0x68,0x3E,0x2B,0x47,0x77,\
+    0x66,0x59,0x16,0x39,0x67,0x57,0x11,\
+    0x47,0x29,0x78,0x20,0x07,0x6D,0x57,\
+    0x38,0xE8,0xA8,0x65,0x7D,0xF5,0x05,\
+    0x39,0x97,0x10,0x7B,0x67,0x45,0x39,\
+    0x78,0x36,0x6D,0x37,0x39,0x29,0x69,\
+    0x36,0x9D,0x49,0x39,0x49,0x68,0x67,\
+    0x6A,0x96,0xF9,0x2B,0x78,0x69,0x6C,\
+    0x0D,0x38,0x52,0x46,0x3D,0x54,0x47,\
+    0x29,0x52,0x95,0x11,0x69,0x37,0xC6,\
+    0x59,0x4C,0x57,0x11,0x47,0x29,0x7B,\
+    0xF4,0x07,0x6D,0x57,0x3E,0xE9,0xE8,\
+    0x55,0x6D,0x97,0xB9,0xEB,0xE8,0x92,\
+    0xE5,0x95,0xB9,0xE8,0xA9,0x7B,0x3D,\
+    0x07,0x39,0x5E,0x6C,0x07,0x92,0x27,\
+    0x3B,0x19,0x6F,0x59,0x72,0x09,0x4C,\
+    0x77,0x19,0x88,0x6D,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0x38,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xB9,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x6F,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xB8,0xC6,0x97,0x88,0x92,0xB8,0xC6,\
+    0xC6,0xEA,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0xEE,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0x44,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0x00,0x36,0x43,0x36,\
+    0xBD,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0x47,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0x46,0xC6,\
+    0xC6,0x97,0x75,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x74,0x92,0xB8,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0x43,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0xB8,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0xB8,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x72,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x88,0x92,\
+    0xB8,0xC6,0xC6,0x97,0x88,0x92,0xB8,\
+    0xC6,0xC6,0x97,0x88,0x92,0x41,0xC6,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0x00,0x36,0x43,0x36,\
+    0xC6,0x97,0x88,0x92,0xB8,0xC6,0xC6,\
+    0x97,0x88,0x92,0xB8,0xC6,0xC6,0x97,\
+    0x88,0x92,0xB8,0xC6,0xC6,0x97,0x88,\
+    0x92,0xB8,0xC6,0xC6,0x97,0x70,0x65,\
+    0xB8,0xC6,0x38,0x48,0x72,0x6D,0x07,\
+    0x39,0x31,0x69,0x77,0x6D,0x47,0x39,\
+    0x39,0x68,0x77,0x6D,0x44,0x28,0x3F,\
+    0x68,0x37,0x6C,0x4F,0x38,0x39,0x78,\
+    0x3E,0x8D,0x47,0x39,0x39,0x68,0x72,\
+    0x2C,0x43,0x39,0x79,0x68,0x7F,0x6C,\
+    0x47,0x39,0x39,0x68,0x77,0x6D,0x47,\
+    0x39,0x3F,0x29,0x74,0x6D,0x07,0x38,\
+    0x31,0x69,0x77,0x7D,0x0E,0xD9,0x39,\
+    0x68,0x77,0x6D,0x40,0xD1,0x3E,0x68,\
+    0x37,0x6C,0x4F,0x38,0x39,0x78,0x3E,\
+    0x8D,0x47,0x39,0x39,0x68,0x77,0x7C,\
+    0x4E,0x39,0x79,0x68,0x7F,0x6C,0x47,\
+    0x29,0x06,0x44,0x77,0x6D,0x47,0x39,\
+    0x39,0x68,0x77,0x6D,0x47,0x39,0x38,\
+    0x69,0x7F,0x6D,0x07,0x39,0x31,0x69,\
+    0x77,0x7D,0x78,0xC9,0x39,0x68,0x77,\
+    0x6D,0x46,0x39,0x39,0x68,0x77,0x6D,\
+    0x45,0x78,0x3B,0x68,0x37,0x6D,0x4F,\
+    0x38,0x39,0x78,0x48,0x41,0x47,0x39,\
+    0x39,0x68,0x75,0x6D,0x47,0x39,0x39,\
+    0x68,0x70,0x8D,0x46,0x39,0x79,0x68,\
+    0x7F,0x6C,0x47,0x29,0x06,0x44,0x77,\
+    0x6D,0x47,0x39,0x3A,0x68,0x77,0x6D,\
+    0x47,0x39,0x71,0x8F,0x78,0x61,0x6D,\
+    0x56,0x39,0x48,0x57,0x20,0x65,0x74,\
+    0x19,0xB1,0x57,0xB4,0x65,0x45,0x39,\
+    0x78,0x03,0x64,0x57,0x28,0x73,0x68,\
+    0x10,0x6D,0x47,0xFB,0x89,0x54,0x77,\
+    0x6C,0x20,0x3D,0x00,0x36,0x43,0x36,\
+    0x59,0x68,0x76,0xA3,0x57,0x2C,0xD1,\
+    0xE0,0xB7,0xD1,0x47,0x39,0x39,0x67,\
+    0x22,0xED,0x21,0x39,0x39,0xC0,0x6D,\
+    0x54,0x47,0x29,0x4D,0x62,0x67,0x78,\
+    0x87,0x85,0x39,0x68,0x77,0x62,0x35,\
+    0x39,0x2B,0x6D,0xC7,0xEC,0x21,0x39,\
+    0x39,0xE2,0x49,0x54,0x47,0x29,0x4D,\
+    0x66,0x4F,0x54,0x47,0x29,0x4D,0x64,\
+    0x07,0x6D,0x77,0x3E,0x11,0x28,0x07,\
+    0x6D,0x77,0x3D,0xA9,0xE4,0x28,0xED,\
+    0x24,0x3D,0x4B,0x6F,0x17,0x69,0x75,\
+    0x3D,0xAB,0x2F,0x0B,0x6D,0x7B,0x38,\
+    0x73,0xEE,0x10,0x49,0x68,0x3A,0x0F,\
+    0x54,0x88,0x92,0x67,0x45,0x39,0x78,\
+    0x1B,0x4D,0x96,0xF5,0x11,0x20,0x57,\
+    0x6B,0x97,0x7A,0x45,0x68,0x4B,0x6D,\
+    0x5E,0x8C,0x51,0x69,0x1F,0x6D,0x0D,\
+    0xBF,0x5F,0x86,0x51,0x72,0x99,0x78,\
+    0x0A,0xAF,0x77,0x7D,0x33,0x37,0x29,\
+    0x6D,0x25,0x6D,0x35,0x36,0xFB,0x68,\
+    0x64,0xAC,0x47,0x29,0x4D,0x62,0xCF,\
+    0x2A,0x21,0x2D,0x31,0x91,0x77,0x68,\
+    0x47,0x29,0x4A,0x9D,0x44,0xA9,0x47,\
+    0x29,0x55,0x72,0x35,0x7C,0x27,0x39,\
+    0x38,0x40,0x25,0x14,0x47,0x29,0x4D,\
+    0x78,0x17,0x6D,0x46,0x27,0x7B,0x79,\
+    0x17,0x6D,0x46,0x21,0x31,0x51,0x77,\
+    0x68,0x47,0x29,0x4A,0x9D,0x11,0x6D,\
+    0x46,0x35,0x29,0x7D,0xB7,0x51,0x47,\
+    0xC9,0x5F,0x68,0x77,0x1D,0x4F,0x2C,\
+    0x39,0x6B,0x11,0x6D,0x47,0x51,0x29,\
+    0x7D,0xB7,0xD1,0x47,0x39,0x39,0x6F,\
+    0x28,0xED,0x25,0x63,0x29,0x7D,0xB7,\
+    0xD1,0x47,0x39,0x00,0x36,0x43,0x36,\
+    0x39,0x6F,0x28,0xED,0x24,0x3D,0x43,\
+    0x6F,0x17,0x67,0x57,0x2C,0xF9,0xD4,\
+    0x77,0x6D,0x47,0x3E,0x13,0x68,0x4F,\
+    0x68,0x74,0xFC,0x39,0x78,0x03,0x61,\
+    0x39,0x39,0x07,0x6D,0x3D,0xEA,0x20,\
+    0x25,0x03,0x54,0x88,0x92,0x6F,0x45,\
+    0x39,0x78,0x1B,0x4D,0x67,0x3E,0xE9,\
+    0x2D,0x09,0x6D,0x79,0x39,0x20,0xDD,\
+    0x0F,0x6C,0x3F,0x39,0x73,0xEF,0x11,\
+    0x83,0x4F,0xC0,0x39,0x6D,0x77,0x7D,\
+    0x34,0xCC,0x0A,0xAC,0x77,0x7D,0x2B,\
+    0x23,0x7B,0x79,0x17,0x6D,0x47,0xAD,\
+    0x29,0x7D,0x9F,0xE5,0x87,0x85,0x39,\
+    0x68,0x77,0x62,0x14,0xB9,0x5F,0x68,\
+    0x77,0xE9,0x39,0x39,0x27,0x45,0x77,\
+    0x6C,0x57,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0x47,0x36,0xD8,0x20,0xA9,0x2D,0x74,\
+    0xFE,0x39,0x78,0x03,0x61,0xF9,0x45,\
+    0x3E,0xBD,0x15,0x09,0x39,0x3F,0x01,\
+    0x54,0x88,0x92,0x6F,0x45,0x39,0x78,\
+    0x1B,0x4D,0x67,0x3E,0xE9,0x2C,0x09,\
+    0x6D,0x79,0x39,0x20,0xDD,0x0F,0x6F,\
+    0x3F,0x39,0x73,0xEF,0x11,0x83,0x74,\
+    0xC5,0x39,0x6E,0x77,0x7D,0x33,0x37,\
+    0x47,0x69,0x64,0xAA,0x47,0x29,0x4D,\
+    0x62,0x5F,0x11,0x47,0x29,0x4D,0x68,\
+    0x07,0x6E,0xAE,0xB1,0x2B,0x7C,0xB7,\
+    0xD1,0x47,0x39,0x39,0x98,0xB5,0xD1,\
+    0xB8,0xC6,0xC6,0x67,0xF5,0xED,0x5F,\
+    0xB8,0x3B,0x7C,0x77,0x9D,0x05,0x15,\
+    0x39,0x69,0x35,0x41,0x47,0x3B,0x2A,\
+    0xAF,0x77,0x7D,0x33,0x22,0x7B,0x51,\
+    0x77,0x7D,0x33,0x23,0x2B,0xEF,0x67,\
+    0x78,0xAF,0xB1,0x00,0x36,0x43,0x36,\
+    0xF9,0xD4,0x77,0x6D,0x47,0x36,0x6E,\
+    0xE8,0x11,0x6D,0x46,0x35,0x1B,0x14,\
+    0x77,0x7D,0x33,0x2B,0x29,0x79,0x2A,\
+    0x6D,0x21,0x05,0x27,0x51,0x77,0x7D,\
+    0x33,0x20,0x5E,0x72,0x3D,0x54,0x47,\
+    0x29,0x4D,0x72,0x10,0x63,0x54,0xC5,\
+    0x39,0x49,0x77,0x7D,0x33,0x20,0x2B,\
+    0xD4,0x77,0x6F,0x27,0x27,0x73,0x6F,\
+    0x11,0x77,0x0D,0x00,0x39,0x78,0x03,\
+    0x77,0x21,0x2B,0x31,0xD1,0x77,0x6B,\
+    0x47,0x29,0x4A,0x9D,0x7F,0x94,0x47,\
+    0x3E,0x39,0x78,0x04,0x98,0x05,0x28,\
+    0x29,0x79,0x26,0x6D,0x21,0x77,0x27,\
+    0x51,0x77,0x7D,0x33,0x20,0x5E,0x44,\
+    0x3D,0x54,0x47,0x29,0x4D,0x72,0x10,\
+    0x4D,0x54,0xC5,0x39,0x49,0x77,0x7D,\
+    0x33,0x20,0x29,0x51,0x77,0x7D,0x33,\
+    0x2A,0x6B,0x68,0x05,0x62,0x85,0x39,\
+    0x2A,0xA9,0x77,0x7D,0x33,0x2A,0x2B,\
+    0xD4,0x77,0x69,0x27,0x27,0x73,0x6F,\
+    0x11,0x77,0x0D,0x00,0x39,0x78,0x03,\
+    0x77,0x21,0x2B,0x31,0xD1,0x77,0x6B,\
+    0x47,0x29,0x4A,0x9D,0x7F,0x94,0x47,\
+    0x3E,0x39,0x78,0x04,0x98,0x05,0x28,\
+    0x27,0x79,0xC9,0x51,0x47,0x3B,0x5F,\
+    0x54,0x64,0x80,0x47,0x38,0x39,0x78,\
+    0x03,0x7A,0x54,0xD4,0x39,0x6A,0x77,\
+    0x7D,0x33,0x21,0x47,0x69,0x64,0xAA,\
+    0x47,0x29,0x4D,0x7B,0x35,0x54,0x47,\
+    0x29,0x4D,0x71,0x64,0xAA,0x47,0x29,\
+    0x4D,0x7E,0x65,0xD1,0x47,0x3A,0x19,\
+    0x54,0x77,0x6D,0x4E,0xFD,0xE9,0xD1,\
+    0x77,0x7D,0x2B,0x39,0x1A,0xA8,0x77,\
+    0x7D,0x34,0xC1,0x00,0x36,0x43,0x36,\
+    0x59,0x42,0xC9,0x51,0x47,0x3D,0x5F,\
+    0x4C,0x35,0x54,0x47,0x29,0x4D,0x71,\
+    0x64,0x91,0x47,0x38,0x39,0x78,0x03,\
+    0x7B,0x55,0x85,0x39,0x6B,0x57,0x51,\
+    0x47,0x39,0x30,0xAC,0xA7,0xD4,0x47,\
+    0x29,0x55,0x68,0x54,0xAD,0x47,0x29,\
+    0x4A,0x90,0x5F,0x72,0x6D,0x26,0x15,\
+    0x77,0x59,0x72,0x6F,0x66,0x13,0x37,\
+    0x39,0x18,0x68,0x34,0x16,0x64,0x58,\
+    0x6A,0x6D,0x45,0x39,0x78,0x04,0x98,\
+    0x4F,0x2C,0x39,0x6F,0x10,0x67,0x0D,\
+    0x00,0x39,0x78,0x03,0x7F,0x20,0x39,\
+    0x3A,0x36,0x5F,0x11,0x47,0x29,0x4D,\
+    0x7A,0x67,0x79,0x1A,0x39,0x5F,0x5C,\
+    0x69,0x54,0x47,0x29,0x4D,0x71,0x10,\
+    0x77,0x0D,0x00,0x39,0x78,0x03,0x77,\
+    0x20,0x37,0x2A,0x94,0x77,0x4C,0x47,\
+    0x29,0x4D,0x71,0x6F,0xD1,0x47,0x3B,\
+    0x59,0x7E,0x3D,0x6A,0x21,0x2B,0x73,\
+    0x51,0x77,0x7D,0x33,0x23,0x5F,0x62,\
+    0x7F,0xF8,0x47,0x3F,0x31,0xBD,0x77,\
+    0x6A,0x05,0x2D,0x29,0x7C,0x22,0x6D,\
+    0x21,0x2B,0x73,0x51,0x77,0x7D,0x33,\
+    0x20,0x5F,0x62,0x7F,0xF8,0x47,0x3F,\
+    0x31,0xBD,0x77,0x6A,0x05,0x2D,0x29,\
+    0x7C,0x26,0x6D,0x21,0x7F,0x27,0x51,\
+    0x77,0x7D,0x33,0x20,0x5E,0x44,0x3D,\
+    0x54,0x47,0x29,0x4D,0x72,0x10,0x4D,\
+    0x54,0xC5,0x39,0x49,0x77,0x7D,0x33,\
+    0x20,0x29,0x51,0x77,0x7D,0x33,0x2A,\
+    0x6B,0x68,0x05,0x62,0x85,0x39,0x2A,\
+    0xA9,0x77,0x7D,0x33,0x2A,0x21,0xD4,\
+    0x77,0x69,0x27,0x2F,0x73,0x6F,0x11,\
+    0x7F,0x0D,0x00,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x03,0x77,0x21,0x33,0x31,\
+    0xFD,0x77,0x6B,0x4F,0xEC,0x39,0x6F,\
+    0x35,0x79,0x57,0x2D,0x60,0x68,0x11,\
+    0x7F,0x0D,0x00,0x39,0x78,0x03,0x74,\
+    0x21,0x33,0x31,0xFD,0x77,0x6B,0x4F,\
+    0xEC,0x39,0x6F,0x35,0x79,0x57,0x2D,\
+    0x66,0x68,0x11,0x6D,0x47,0x59,0x27,\
+    0x51,0x77,0x7D,0x33,0x20,0x5E,0x2C,\
+    0x3D,0x54,0x47,0x29,0x4D,0x72,0x10,\
+    0x55,0x57,0x00,0x39,0x78,0x03,0x75,\
+    0x35,0x3F,0xF9,0xD4,0x77,0x6D,0x47,\
+    0xC6,0xFB,0x14,0x77,0x92,0xC6,0xF8,\
+    0x2A,0xA8,0x77,0x7D,0x33,0x20,0x6B,\
+    0x51,0x77,0x7D,0x33,0x2F,0x29,0x51,\
+    0x77,0x7D,0x33,0x2A,0x6B,0x68,0x05,\
+    0x62,0x85,0x39,0x2A,0xA9,0x77,0x7D,\
+    0x33,0x2A,0x21,0xD4,0x77,0x6E,0x27,\
+    0x2F,0x73,0x6F,0x11,0x7F,0x0D,0x00,\
+    0x39,0x78,0x03,0x77,0x21,0x33,0x31,\
+    0xFD,0x77,0x6B,0x4F,0xEC,0x39,0x6F,\
+    0x35,0x79,0x57,0x2D,0x62,0x68,0x11,\
+    0x41,0x59,0x00,0x39,0x78,0x03,0x74,\
+    0x20,0x2B,0x73,0x51,0x77,0x7D,0x33,\
+    0x23,0x5E,0x6E,0x7F,0xB8,0x47,0x3F,\
+    0x59,0x78,0x3D,0x6A,0x21,0x2B,0x73,\
+    0x51,0x77,0x7D,0x33,0x23,0x5F,0x62,\
+    0x7F,0xF8,0x47,0x3F,0x31,0xBD,0x77,\
+    0x6A,0x05,0x2D,0x73,0x7C,0x11,0x6D,\
+    0x47,0xD7,0x07,0x51,0x77,0x7D,0x2B,\
+    0x23,0x2A,0xAF,0x77,0x7D,0x33,0x2D,\
+    0x87,0x54,0x77,0x6A,0x25,0x39,0x39,\
+    0x10,0x7F,0x78,0x47,0x3E,0x5F,0x68,\
+    0x77,0xBF,0x6D,0x45,0x39,0x78,0x03,\
+    0x6D,0x45,0x2C,0x00,0x36,0x43,0x36,\
+    0x39,0x67,0x07,0x6D,0x57,0x3E,0x2B,\
+    0x7D,0xB7,0xD1,0x47,0x39,0x39,0x6F,\
+    0xB5,0xD1,0xB8,0xC6,0xC6,0x90,0xF5,\
+    0xED,0x5D,0xB8,0x31,0xFD,0x77,0x6E,\
+    0x37,0x31,0x16,0x68,0x3F,0x00,0x47,\
+    0x38,0x77,0xD1,0x77,0x7D,0x72,0x29,\
+    0x69,0xE7,0x09,0x6D,0x59,0x00,0x39,\
+    0x78,0x03,0x79,0x0D,0xBE,0x5E,0x72,\
+    0x57,0x11,0x47,0x29,0x55,0x48,0x57,\
+    0x6A,0x97,0x05,0x39,0x97,0x09,0x6D,\
+    0x59,0x39,0x22,0xD8,0x0F,0x6D,0x3F,\
+    0x38,0x73,0xEF,0x11,0x81,0x54,0xC5,\
+    0x39,0x69,0x77,0x7D,0x33,0x22,0x7B,\
+    0x51,0x77,0x7D,0x33,0x23,0x21,0xD4,\
+    0x77,0x68,0x27,0x5B,0x31,0x7D,0x77,\
+    0x6A,0x21,0x65,0x13,0x14,0x77,0x7D,\
+    0x33,0x39,0x49,0x69,0x9E,0xE5,0x55,\
+    0x2C,0xF9,0xD4,0x77,0x6D,0x47,0xC9,\
+    0xFB,0xD4,0x88,0x92,0xB8,0x36,0xBB,\
+    0xE8,0x6D,0xEC,0x45,0x2C,0x39,0x98,\
+    0x6C,0x14,0x47,0x29,0x4D,0x7C,0x77,\
+    0x6C,0x39,0x3F,0x19,0x14,0x77,0x7D,\
+    0x2B,0x19,0x19,0x6F,0xA7,0x51,0x47,\
+    0xC6,0x47,0x68,0x69,0x6D,0x5C,0x89,\
+    0x41,0x68,0x0F,0x6F,0x0D,0xBE,0x5F,\
+    0x84,0x09,0x6B,0x54,0xFE,0x39,0x78,\
+    0x03,0x78,0x54,0xC5,0x39,0x69,0x77,\
+    0x7D,0x33,0x22,0x7B,0x51,0x77,0x7D,\
+    0x33,0x23,0x21,0xEF,0x67,0x79,0x10,\
+    0x39,0x5F,0x68,0x76,0x7D,0x0D,0x00,\
+    0x39,0x78,0x03,0x74,0x21,0x39,0x38,\
+    0x6E,0x58,0x6B,0x6D,0x45,0x39,0x78,\
+    0x03,0x6D,0x37,0x3B,0xD0,0xE0,0x65,\
+    0x78,0x87,0x85,0x00,0x36,0x43,0x36,\
+    0x39,0x68,0x77,0x9D,0x85,0x85,0xC6,\
+    0x97,0x88,0x62,0xC5,0xB9,0x23,0xE9,\
+    0x07,0x6D,0x57,0x00,0x39,0x78,0x03,\
+    0x7E,0x55,0x2C,0xF9,0xD4,0x77,0x6D,\
+    0x47,0x36,0xFB,0xD4,0x88,0x92,0xB8,\
+    0xC9,0xBB,0xE8,0x6D,0xEC,0x5B,0x00,\
+    0x39,0x78,0x03,0x78,0x35,0x39,0x2B,\
+    0x6E,0x07,0x6D,0x57,0x00,0x39,0x78,\
+    0x03,0x79,0xD7,0xB8,0x66,0xE8,0x14,\
+    0x39,0x39,0x3E,0x19,0x14,0x77,0x7D,\
+    0x2B,0x19,0xE8,0xA9,0x57,0x6A,0x97,\
+    0x05,0x39,0x97,0x09,0x6D,0x59,0x39,\
+    0x22,0xD8,0x0F,0x6D,0x3F,0x38,0x73,\
+    0xEF,0x11,0x81,0x54,0xC5,0x39,0x69,\
+    0x77,0x7D,0x33,0x22,0x7B,0x51,0x77,\
+    0x7D,0x33,0x23,0x29,0x6E,0x29,0x6D,\
+    0x54,0xF9,0x39,0x78,0x03,0x78,0x59,\
+    0x00,0x39,0x78,0x03,0x7A,0xF9,0x00,\
+    0x39,0x78,0x03,0x7B,0x21,0x33,0x73,\
+    0x6F,0x10,0x6B,0x5F,0x85,0x39,0x60,\
+    0x17,0x09,0x5F,0x85,0x39,0x6F,0x17,\
+    0x33,0x37,0x31,0x16,0x68,0x3F,0x00,\
+    0x47,0x38,0x77,0xD1,0x77,0x7D,0x72,\
+    0x29,0x25,0x51,0x77,0x7D,0x33,0x2C,\
+    0x69,0xE7,0x67,0x54,0x47,0x29,0x4D,\
+    0x7C,0xE7,0x6B,0x39,0x39,0x27,0x68,\
+    0x3D,0xEA,0x20,0x19,0x19,0x14,0x77,\
+    0x7D,0x2B,0x19,0x49,0x68,0x67,0x6B,\
+    0x96,0xF9,0x19,0x6F,0xA7,0x51,0x47,\
+    0xC6,0x47,0x68,0x69,0x6D,0x5C,0x89,\
+    0x41,0x68,0x0F,0x6C,0x0D,0xBE,0x5F,\
+    0x84,0x64,0x91,0x47,0x38,0x39,0x78,\
+    0x03,0x76,0x05,0x00,0x39,0x78,0x03,\
+    0x77,0x5F,0x85,0x00,0x36,0x43,0x36,\
+    0x39,0x6D,0x35,0xD4,0x47,0x29,0x4A,\
+    0x90,0x5B,0x72,0x69,0x26,0x11,0x37,\
+    0x5D,0x32,0x09,0x4C,0x2B,0x51,0x77,\
+    0x7D,0x33,0x20,0x5E,0x78,0xC5,0x51,\
+    0x47,0xC6,0x5E,0x62,0x07,0x92,0x97,\
+    0x38,0x2A,0xA8,0x77,0x7D,0x33,0x20,\
+    0x58,0x68,0x8B,0x0B,0x09,0x4C,0x77,\
+    0x19,0x67,0x54,0x47,0x29,0x4D,0x73,\
+    0x24,0x6D,0x21,0x1F,0x2A,0x94,0x77,\
+    0x4C,0x47,0x29,0x4D,0x71,0x58,0x51,\
+    0x47,0x29,0x4D,0x68,0x07,0x6D,0x57,\
+    0x00,0x39,0x78,0x04,0x9B,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x72,0x09,0x7B,\
+    0x51,0x77,0x7D,0x33,0x22,0x69,0xE7,\
+    0x39,0x18,0x09,0x48,0x2A,0x94,0x77,\
+    0x6C,0x47,0x29,0x4D,0x72,0x39,0x18,\
+    0x09,0x48,0x7B,0x51,0x77,0x7D,0x33,\
+    0x30,0x49,0x69,0x64,0xAD,0x47,0x29,\
+    0x4D,0x62,0x35,0x14,0x47,0x29,0x4D,\
+    0x64,0x35,0x14,0x47,0x29,0x4D,0x66,\
+    0x44,0x91,0x47,0x38,0x39,0x78,0x03,\
+    0x7D,0x05,0x00,0x39,0x78,0x03,0x7F,\
+    0x54,0xF9,0x39,0x78,0x03,0x7E,0x05,\
+    0x00,0x39,0x78,0x03,0x79,0x05,0x00,\
+    0x39,0x78,0x03,0x78,0x05,0x00,0x39,\
+    0x78,0x03,0x7B,0x54,0xC5,0x39,0x97,\
+    0x77,0x7D,0x33,0x2E,0x7B,0x51,0x77,\
+    0x7D,0x33,0x21,0x7B,0x51,0x77,0x7D,\
+    0x33,0x20,0x19,0x14,0x77,0x7D,0x34,\
+    0xCC,0x31,0xB8,0x77,0x6A,0x4F,0xA9,\
+    0x39,0x6E,0x7F,0xFD,0x47,0x3C,0x31,\
+    0x91,0x77,0x68,0x47,0x29,0x55,0x70,\
+    0x35,0xD4,0x47,0x29,0x4A,0x90,0x39,\
+    0x18,0x09,0x48,0x00,0x36,0x43,0x36,\
+    0x77,0x19,0x39,0x1C,0x68,0x3E,0x09,\
+    0x47,0x77,0x67,0x79,0x16,0x39,0x66,\
+    0x3D,0x2D,0x20,0x3F,0x6A,0x28,0x10,\
+    0x7F,0x27,0x19,0x49,0x68,0x47,0x6A,\
+    0x68,0x39,0x77,0xD1,0x77,0x7D,0x25,\
+    0xC1,0x61,0xE7,0x17,0x7F,0x37,0x39,\
+    0x09,0x6F,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x24,0xAD,0x1F,0xB6,0x59,0x6A,\
+    0x07,0x6C,0x69,0x26,0x77,0x1D,0x39,\
+    0x1C,0x09,0x4C,0x77,0x19,0x58,0x6A,\
+    0x68,0x3F,0x16,0x6D,0x47,0x42,0x47,\
+    0x2B,0x17,0x47,0x77,0x79,0x6B,0x16,\
+    0x39,0x70,0x5D,0x42,0x47,0x25,0x73,\
+    0x28,0x10,0x6B,0x14,0x79,0x5E,0x7C,\
+    0x17,0x49,0x68,0x3C,0x16,0x6E,0x58,\
+    0x6A,0x09,0x80,0x39,0x78,0x14,0x39,\
+    0x08,0xD6,0x39,0x64,0x17,0x79,0x68,\
+    0x3C,0x16,0x6E,0x58,0x6A,0x09,0x80,\
+    0x39,0x78,0x23,0x55,0x08,0xD6,0x39,\
+    0x64,0x17,0x6F,0x37,0x38,0x13,0x77,\
+    0x5B,0x72,0x69,0x26,0x77,0x1D,0x39,\
+    0x1C,0x77,0x16,0x39,0x6E,0xC7,0x11,\
+    0x47,0x38,0x5F,0x60,0x39,0xD4,0x47,\
+    0x29,0x6D,0x14,0x17,0x6F,0x37,0x39,\
+    0x77,0x1D,0x39,0x1C,0x68,0x34,0x16,\
+    0x64,0x58,0x6A,0x6D,0x45,0x39,0x97,\
+    0x83,0x6D,0x0E,0xD4,0x39,0x72,0x7F,\
+    0x79,0x47,0x3E,0x5F,0x92,0x37,0xAD,\
+    0x47,0x45,0x3E,0x68,0x7F,0x79,0x47,\
+    0x3E,0x5E,0x6C,0x31,0xAD,0x27,0xD3,\
+    0x17,0x68,0x4C,0x11,0xC7,0x3C,0x39,\
+    0x70,0x4C,0x11,0x47,0x38,0x39,0x72,\
+    0x4C,0x11,0x58,0x29,0x39,0x74,0x35,\
+    0x40,0x47,0x27,0x00,0x36,0x43,0x36,\
+    0x31,0xBC,0x77,0x6A,0x01,0xFE,0x17,\
+    0x77,0x5F,0x32,0x6D,0x66,0x77,0x1D,\
+    0x3F,0x8A,0x48,0x39,0x15,0x51,0x77,\
+    0x7E,0x47,0x51,0x19,0x54,0x77,0x6D,\
+    0x46,0xCD,0x0B,0x54,0xC1,0x77,0x3F,\
+    0x93,0x43,0x3D,0x57,0x11,0x47,0x2A,\
+    0x39,0x68,0x55,0x11,0x47,0xC6,0xC3,\
+    0x68,0x64,0x28,0x47,0x6C,0x2A,0x2C,\
+    0x77,0x38,0x76,0x78,0x39,0x16,0x59,\
+    0x45,0x47,0x51,0xA7,0xEE,0xC9,0xED,\
+    0x22,0xD3,0x11,0x77,0x5D,0x72,0x6B,\
+    0x26,0x17,0x77,0x39,0x18,0x0F,0xDE,\
+    0x3E,0x64,0x09,0x6C,0x6B,0x00,0x39,\
+    0x7B,0x77,0x05,0x6F,0x45,0x39,0x7B,\
+    0x77,0x6D,0x6D,0x45,0x39,0x97,0x82,\
+    0x6D,0x6D,0x05,0x39,0x61,0xFE,0x05,\
+    0x26,0x39,0xC6,0x38,0x16,0xF5,0x67,\
+    0x74,0x2B,0x70,0x07,0x62,0x95,0x21,\
+    0xEB,0x70,0xA7,0x51,0x47,0xC6,0x73,\
+    0x68,0x11,0x99,0x37,0x38,0xA9,0x69,\
+    0x55,0x6D,0xF5,0x14,0x39,0x77,0x11,\
+    0x49,0x0D,0x2C,0x5F,0x48,0x67,0x54,\
+    0x47,0x29,0x45,0x50,0xC7,0x40,0x47,\
+    0x38,0x5F,0x7C,0x69,0x40,0x47,0x3B,\
+    0x5E,0x70,0xC9,0x51,0x47,0x38,0x5E,\
+    0x7A,0xC9,0x51,0x47,0x3A,0x5E,0x64,\
+    0x09,0x6C,0x65,0x15,0x39,0x00,0xE5,\
+    0xEB,0xF5,0xBC,0x5C,0xC6,0x57,0x6A,\
+    0x6D,0x26,0x15,0x77,0x59,0x72,0x6F,\
+    0x66,0x13,0x37,0x39,0x18,0x09,0x48,\
+    0x71,0x8F,0x48,0x61,0x3F,0x39,0x4D,\
+    0x47,0x01,0x17,0x6F,0x45,0x39,0x78,\
+    0x0B,0x55,0x6D,0x45,0x39,0x97,0x82,\
+    0x4D,0x5D,0xBA,0x00,0x36,0x43,0x36,\
+    0x43,0x76,0x0B,0xC7,0x5C,0x7F,0x39,\
+    0x69,0x09,0x6F,0x67,0x3C,0x6C,0x68,\
+    0x14,0x73,0x5C,0xBF,0x41,0x68,0x57,\
+    0x20,0x67,0x3E,0x6B,0x68,0x05,0x6D,\
+    0x55,0x39,0xE8,0xA9,0x67,0xEB,0x67,\
+    0x3E,0x6D,0x68,0x09,0x6D,0x59,0x39,\
+    0x87,0x6D,0x12,0x8F,0x5C,0x7B,0x39,\
+    0x76,0x6C,0x11,0x47,0xC6,0x39,0x77,\
+    0x16,0x6D,0xB9,0xA7,0x58,0x68,0x89,\
+    0x8B,0x5F,0xBA,0x58,0x68,0x88,0x49,\
+    0x69,0x39,0x87,0x54,0x77,0x6C,0x21,\
+    0x35,0x6B,0x6C,0x16,0x6D,0xB9,0xEB,\
+    0x81,0x54,0x77,0x6E,0x22,0x9D,0x19,\
+    0x6F,0x53,0x72,0x61,0x26,0x11,0x77,\
+    0x5D,0x72,0x6B,0x26,0x17,0x77,0x5F,\
+    0x32,0x6D,0x66,0x77,0x1D,0x39,0x1C,\
+    0x0F,0xDE,0x36,0x6C,0x6F,0x42,0x47,\
+    0x22,0x23,0x47,0x77,0x72,0x6D,0x45,\
+    0x39,0x97,0x82,0x4D,0x5D,0xBD,0x19,\
+    0x6C,0xC7,0x51,0x47,0xBD,0x5E,0x68,\
+    0x76,0x53,0xF7,0x05,0x39,0xE0,0x10,\
+    0x6D,0x47,0xC5,0x89,0x54,0x77,0xE1,\
+    0x20,0x39,0x39,0xE8,0xC7,0x51,0x47,\
+    0x99,0x5E,0x6C,0x17,0x6D,0x46,0x4B,\
+    0x17,0x51,0x77,0x7D,0x3B,0x15,0x19,\
+    0x6F,0x05,0x75,0xA5,0x91,0x22,0x28,\
+    0x77,0x6C,0x67,0x3E,0x7B,0x28,0x3F,\
+    0x2D,0x5C,0x79,0x39,0x6A,0x57,0x6A,\
+    0xA7,0xB1,0x22,0x28,0x77,0x6E,0x5C,\
+    0x7E,0x39,0x6C,0x59,0x54,0x47,0x29,\
+    0x45,0x58,0x57,0x6A,0x35,0x21,0xDB,\
+    0xC0,0x6C,0x2D,0x47,0x3C,0x19,0x6F,\
+    0x35,0x2D,0x0F,0x79,0x22,0x28,0x77,\
+    0x6B,0x67,0x3E,0x00,0x36,0x43,0x36,\
+    0xD9,0xE0,0x6C,0x2D,0x47,0x3E,0x22,\
+    0x2F,0x77,0x65,0x39,0x30,0x45,0x77,\
+    0x55,0x20,0x05,0x08,0x41,0x68,0x57,\
+    0x24,0x67,0x3E,0x6B,0x68,0x05,0x6D,\
+    0x55,0x39,0xE8,0xA9,0x35,0x7D,0x67,\
+    0x3E,0x6D,0x68,0x09,0x6D,0x59,0x39,\
+    0x87,0x6E,0x12,0x8F,0x27,0x39,0x39,\
+    0x96,0x59,0x54,0x47,0x29,0x45,0x4C,\
+    0x57,0x6A,0x35,0x21,0xDB,0xC0,0x6C,\
+    0x2D,0x47,0x38,0x19,0x6F,0x35,0x2D,\
+    0x0F,0x79,0x22,0x28,0x77,0x6F,0x67,\
+    0x3E,0xD9,0xE0,0x6C,0x2D,0x47,0x3A,\
+    0x22,0x2F,0x77,0x69,0x69,0x00,0x39,\
+    0x78,0x0B,0x45,0x67,0x3E,0x4B,0x70,\
+    0x95,0xC5,0x5C,0x79,0x39,0x6D,0x57,\
+    0x6A,0x05,0x79,0x71,0x28,0x6C,0x2D,\
+    0x47,0x3F,0x19,0x6F,0x97,0xE5,0x5C,\
+    0x79,0x39,0x6F,0x6C,0x2A,0x47,0x31,\
+    0x47,0x61,0x0B,0x72,0x65,0x74,0x7B,\
+    0x59,0x0F,0x6D,0x67,0x70,0x19,0x6F,\
+    0x25,0x6D,0x35,0x39,0x2B,0x68,0xA6,\
+    0xAC,0x05,0x29,0x19,0x6F,0x23,0x6D,\
+    0x39,0x39,0x27,0x68,0xC9,0x6B,0x22,\
+    0xDB,0x59,0x68,0x77,0xE7,0x79,0x00,\
+    0x39,0x78,0x0B,0x59,0x37,0x39,0x09,\
+    0x6F,0x97,0xED,0x5C,0x79,0x39,0x69,\
+    0x6C,0x2A,0x47,0x3B,0x45,0x6B,0x09,\
+    0x72,0x65,0x74,0x7B,0x59,0x1F,0x6D,\
+    0x67,0x70,0x19,0x6E,0x25,0x6D,0x35,\
+    0x39,0x2B,0x68,0xA6,0xAC,0x05,0x29,\
+    0x19,0x6E,0x23,0x6D,0x3B,0x39,0x25,\
+    0x68,0xCB,0x6A,0x22,0xDB,0x59,0x26,\
+    0x6C,0x28,0x47,0x38,0x73,0x6D,0x11,\
+    0x63,0x5C,0x45,0x00,0x36,0x43,0x36,\
+    0x39,0x6A,0x77,0x6F,0x5C,0x45,0x39,\
+    0xE0,0x77,0x6E,0x27,0x35,0x22,0x14,\
+    0x77,0x6F,0x47,0x3B,0x22,0x14,0x77,\
+    0x59,0x47,0x3A,0x47,0x77,0x35,0x40,\
+    0x47,0x3D,0x45,0x6D,0x57,0x6A,0x1C,\
+    0x39,0x5A,0x76,0x35,0x58,0x2F,0x39,\
+    0x19,0x25,0x57,0x6B,0x15,0x39,0x4B,\
+    0x68,0x65,0x6D,0x96,0xF8,0x7B,0x78,\
+    0x57,0x6B,0x13,0x39,0x45,0x68,0x6B,\
+    0x6D,0xFB,0x3E,0x5C,0x8A,0x55,0x20,\
+    0x59,0x20,0x45,0x67,0xA9,0x74,0x99,\
+    0x20,0xE5,0x54,0x77,0x92,0x0D,0x3F,\
+    0x5F,0x9C,0x0B,0x6C,0xDB,0x3E,0x22,\
+    0x2E,0x77,0x72,0x26,0x39,0xC5,0xCC,\
+    0x16,0x6D,0xBB,0xD5,0x23,0xD4,0x77,\
+    0xED,0x5C,0x7D,0x39,0x69,0x6C,0x28,\
+    0x47,0x3B,0x47,0x6B,0x0D,0x72,0x05,\
+    0x0C,0x41,0x68,0x57,0x20,0x67,0x3E,\
+    0x6B,0x68,0x05,0x6D,0x55,0x39,0xE8,\
+    0xA9,0x35,0x7D,0x67,0x3E,0x6D,0x68,\
+    0x09,0x6D,0x59,0x39,0x87,0x6D,0x12,\
+    0x8F,0x65,0x74,0x23,0x71,0x09,0x62,\
+    0x9D,0x20,0xE3,0x71,0xA9,0x51,0x47,\
+    0xC6,0x73,0x6F,0x11,0x99,0x39,0x38,\
+    0xA7,0x6D,0x6C,0x2A,0x47,0x26,0x2A,\
+    0xAC,0x77,0x7D,0x3B,0x01,0x58,0x68,\
+    0x8B,0xB3,0x6F,0x39,0x19,0x6C,0x5F,\
+    0x72,0x6D,0x26,0x15,0x77,0x59,0x72,\
+    0x6D,0x66,0x77,0x1D,0x3F,0x8A,0x58,\
+    0x25,0x13,0x47,0x77,0x49,0x69,0x16,\
+    0x39,0x40,0x0F,0x6D,0x61,0x45,0x39,\
+    0x78,0x0B,0x5B,0x05,0x6A,0x13,0x2D,\
+    0x07,0x73,0xF7,0xBE,0x5C,0x68,0x77,\
+    0xCF,0x6F,0x45,0x00,0x36,0x43,0x36,\
+    0x39,0x97,0x82,0x4D,0x5F,0x85,0x39,\
+    0xF8,0x0D,0x6C,0x0D,0x3E,0x5E,0x76,\
+    0x0F,0x6D,0x67,0x75,0x49,0x68,0x67,\
+    0x68,0x96,0xF9,0x29,0xFD,0x07,0x6D,\
+    0x57,0x24,0xE1,0x28,0x25,0x68,0x37,\
+    0x39,0x29,0x6D,0xC9,0xED,0x23,0xDF,\
+    0x0F,0xEC,0x5D,0x6A,0x15,0x3C,0x21,\
+    0x6D,0xCD,0x51,0x47,0x26,0x5D,0x56,\
+    0x09,0x72,0x37,0x39,0x29,0x6D,0xE7,\
+    0xEA,0x4F,0x39,0x39,0x68,0x10,0x7F,\
+    0x67,0x75,0x49,0x68,0x67,0x68,0x96,\
+    0xF9,0x7B,0x78,0x6F,0x68,0x15,0x3D,\
+    0x81,0x6F,0x13,0x73,0x67,0x75,0x49,\
+    0x68,0x67,0x69,0x96,0xF9,0x7B,0x78,\
+    0x57,0x21,0x57,0x3D,0x6B,0x68,0x05,\
+    0x6D,0x55,0x39,0xE8,0xA9,0x35,0x7D,\
+    0x13,0x3D,0x81,0x6F,0x12,0x8F,0x6D,\
+    0x75,0x21,0x75,0x0D,0x62,0x9F,0x24,\
+    0xE1,0x75,0xAD,0x51,0x47,0xC6,0x73,\
+    0x6D,0x11,0x99,0x3D,0x38,0xA3,0x6C,\
+    0x6E,0x28,0x47,0x26,0x58,0x68,0x8C,\
+    0xE5,0x39,0x39,0x58,0x68,0x8C,0xA3,\
+    0x27,0x39,0x38,0x50,0x5F,0x11,0x47,\
+    0xC6,0xCC,0x48,0x6F,0xD1,0x47,0xA9,\
+    0x43,0x69,0x0B,0x6D,0x35,0x27,0x19,\
+    0x24,0x07,0x6D,0x57,0x3C,0xE8,0xA8,\
+    0x67,0xF8,0x37,0x39,0x29,0x75,0xAB,\
+    0x2D,0x15,0x3C,0x83,0x69,0x14,0x87,\
+    0x71,0xBF,0x1F,0x64,0x57,0x2E,0x15,\
+    0xBA,0x23,0x78,0x0B,0x62,0x67,0x7A,\
+    0x6B,0xEB,0xAD,0x7D,0x67,0x7A,0x6B,\
+    0xEB,0xAD,0x7D,0x9B,0x05,0x39,0x97,\
+    0x3D,0x6B,0x21,0xD5,0x45,0x69,0xEB,\
+    0x68,0x5E,0x7F,0x00,0x36,0x43,0x36,\
+    0x39,0x77,0x16,0x6D,0xBC,0x15,0x58,\
+    0x68,0x8C,0x19,0x6D,0x3E,0x1F,0x54,\
+    0x77,0x7D,0x3B,0x01,0x4B,0x8A,0xAD,\
+    0xEC,0x67,0x7A,0x29,0xFC,0x25,0x69,\
+    0x37,0x3A,0xF9,0x6C,0xF7,0x51,0x47,\
+    0xA9,0x21,0xE8,0x07,0x73,0xF7,0xBC,\
+    0x5C,0x68,0x77,0x19,0x39,0x38,0x73,\
+    0x6D,0x10,0x73,0x7B,0x2A,0x19,0x24,\
+    0x07,0x6D,0x57,0x3E,0xE8,0xA8,0x67,\
+    0xF8,0x37,0x39,0x29,0x75,0xAB,0x2D,\
+    0x15,0x3E,0x49,0x68,0x67,0x6A,0xFD,\
+    0xB9,0x5D,0x8E,0x41,0xEB,0x65,0x3C,\
+    0x6B,0x69,0x69,0x6C,0xF5,0x05,0x39,\
+    0x77,0x13,0x0D,0x3B,0x26,0x1B,0x24,\
+    0x07,0x6D,0x57,0x38,0xA9,0xEE,0x7F,\
+    0x6D,0x47,0x39,0x5E,0x7A,0x57,0x21,\
+    0x37,0x39,0x29,0x69,0xA6,0xAD,0x05,\
+    0x29,0x27,0x69,0x25,0x6A,0xF9,0x3F,\
+    0x5D,0x56,0x57,0x24,0x37,0x39,0x29,\
+    0x6F,0xA6,0xAD,0x05,0x29,0x19,0x21,\
+    0x67,0x6A,0x15,0x39,0x4B,0x68,0x65,\
+    0x6D,0x96,0xF8,0x7B,0x78,0x23,0x6A,\
+    0xF9,0x3F,0x5C,0x8A,0x17,0x73,0x39,\
+    0x38,0x05,0x7B,0x05,0x73,0x67,0x75,\
+    0x49,0x68,0x67,0x6A,0x96,0xF9,0x29,\
+    0xFD,0x07,0x6D,0x57,0x24,0xE5,0x28,\
+    0x25,0x6A,0xF9,0x38,0x5A,0x82,0x41,\
+    0xEB,0x65,0x75,0x27,0x71,0x0B,0x62,\
+    0x99,0x20,0xE7,0x71,0xAB,0x51,0x47,\
+    0xC6,0x73,0x6E,0x11,0x99,0x3B,0x38,\
+    0xA5,0x6F,0x6E,0x2B,0x47,0x26,0x58,\
+    0x68,0x8D,0x8B,0x69,0x39,0x73,0x6F,\
+    0x11,0x65,0x37,0x27,0x89,0xED,0x12,\
+    0x6D,0xB8,0x13,0x00,0x36,0x43,0x36,\
+    0x19,0x6F,0x51,0x72,0x6F,0x26,0x13,\
+    0x77,0x5B,0x72,0x69,0x26,0x1F,0x37,\
+    0x5F,0x32,0x6D,0x66,0x77,0x1D,0x39,\
+    0x1C,0x0F,0xDE,0x3E,0x6C,0x6B,0x42,\
+    0x47,0x2E,0x13,0x14,0x77,0x92,0xB2,\
+    0x19,0x2A,0xBD,0x77,0x7D,0x3B,0x01,\
+    0x23,0xD4,0x77,0xF5,0x5C,0x7F,0x39,\
+    0x69,0xCB,0x51,0x47,0x3A,0x5F,0x68,\
+    0x77,0x13,0x69,0x00,0x39,0x78,0x0B,\
+    0x41,0x67,0x3E,0x4B,0x70,0x95,0xC5,\
+    0x5C,0x79,0x39,0x6A,0x57,0x6A,0x05,\
+    0x79,0x71,0x28,0x6C,0x2D,0x47,0x3A,\
+    0x19,0x6F,0x97,0xE5,0x5C,0x79,0x39,\
+    0x6C,0x6C,0x2A,0x47,0x3C,0x17,0x51,\
+    0x77,0x7D,0x3B,0x09,0x19,0x6F,0x05,\
+    0x75,0xA5,0x91,0x22,0x28,0x77,0x6B,\
+    0x67,0x3E,0x7B,0x28,0x3F,0x2D,0x5C,\
+    0x79,0x39,0x6F,0x57,0x6A,0xA7,0xB1,\
+    0x22,0x28,0x77,0x65,0x5C,0x7E,0x39,\
+    0x61,0x0D,0x72,0x65,0x74,0x7B,0x45,\
+    0x77,0x67,0x39,0x32,0x83,0x54,0x77,\
+    0x66,0x24,0x75,0x7B,0x59,0x0F,0x6D,\
+    0x67,0x70,0x19,0x6F,0x25,0x6D,0x35,\
+    0x39,0x2B,0x68,0xA6,0xAC,0x05,0x29,\
+    0x19,0x6F,0x23,0x6D,0x39,0x39,0x27,\
+    0x68,0xC9,0x68,0x22,0xDB,0x59,0x44,\
+    0x0D,0x72,0x05,0x14,0x39,0x6A,0x09,\
+    0x6E,0x67,0x3C,0x6E,0x68,0x14,0x73,\
+    0x05,0x0C,0x41,0x68,0x57,0x20,0x67,\
+    0x3E,0x6B,0x68,0x05,0x6D,0x55,0x39,\
+    0xE8,0xA9,0x35,0x7D,0x67,0x3E,0x6D,\
+    0x68,0x09,0x6D,0x59,0x39,0x87,0x6D,\
+    0x12,0x8F,0x65,0x74,0x27,0x71,0x0D,\
+    0x62,0x99,0x20,0x00,0x36,0x43,0x36,\
+    0xE7,0x71,0xAD,0x51,0x47,0xC6,0x73,\
+    0x6D,0x11,0x99,0x37,0x38,0xA9,0x6F,\
+    0x59,0x6D,0x5C,0x7E,0x39,0x77,0x16,\
+    0x6D,0xBE,0xEF,0x17,0x68,0x3D,0x6A,\
+    0x21,0x39,0x39,0xEE,0x16,0x6D,0xBE,\
+    0xBF,0x23,0xD4,0x77,0xED,0x5C,0x45,\
+    0x39,0xF0,0x77,0x6C,0x5C,0x7F,0x39,\
+    0x6A,0x09,0x6E,0x3B,0x26,0x7B,0x5D,\
+    0x0F,0x6D,0x67,0x74,0x19,0x6F,0x25,\
+    0x6D,0x35,0x39,0x2B,0x68,0xA6,0xAC,\
+    0x05,0x29,0x19,0x6F,0x23,0x6D,0x39,\
+    0x39,0x27,0x68,0xC9,0x6B,0x22,0xDB,\
+    0x1B,0x25,0x6B,0x74,0x39,0x36,0xE5,\
+    0x71,0xAB,0x74,0x99,0x05,0x39,0x97,\
+    0x3D,0x6A,0x21,0xCD,0x49,0x69,0xE7,\
+    0x6B,0x6B,0x39,0x22,0x2E,0x77,0x72,\
+    0x54,0xC5,0x39,0xF0,0x77,0x7D,0x3B,\
+    0x01,0x58,0x68,0x8E,0x1F,0x69,0x39,\
+    0x73,0x6F,0x11,0x4F,0x3B,0x39,0x25,\
+    0x51,0x77,0x92,0xB2,0x3D,0xD8,0x26,\
+    0x6B,0x54,0x47,0xC6,0xCC,0x6D,0xCB,\
+    0x14,0x47,0x29,0x45,0x5E,0x10,0x67,\
+    0x39,0x38,0x2A,0x94,0x77,0x6C,0x47,\
+    0x29,0x45,0x51,0x57,0x6A,0x6D,0x26,\
+    0x15,0x77,0x59,0x72,0x6D,0x66,0x77,\
+    0x1D,0x3F,0x8A,0x78,0x39,0x23,0x47,\
+    0x77,0x72,0x3B,0x39,0x4D,0x6B,0x01,\
+    0x6C,0x3F,0x46,0x63,0xEC,0x58,0x68,\
+    0x68,0x3D,0x58,0x68,0x8D,0x41,0x17,\
+    0xB6,0x17,0x68,0x3D,0x6A,0x21,0x01,\
+    0x73,0x6D,0x11,0x79,0x0F,0x41,0x3B,\
+    0xE0,0x58,0x51,0x47,0x29,0x6F,0xA8,\
+    0x16,0x6D,0xBB,0x07,0x17,0x68,0x27,\
+    0xE2,0x27,0x2B,0x00,0x36,0x43,0x36,\
+    0x71,0x10,0x75,0x59,0x68,0x05,0x39,\
+    0x78,0x23,0xE5,0x26,0x39,0xC5,0x42,\
+    0x59,0x6D,0x17,0xB6,0x73,0x6F,0x11,\
+    0x67,0x68,0x3C,0x58,0x68,0x89,0x45,\
+    0x69,0x39,0x61,0xE7,0xC9,0x6E,0x21,\
+    0x33,0x6B,0x6E,0x16,0x6D,0xBF,0xAF,\
+    0x85,0x6A,0x12,0xC7,0x67,0x3E,0x1D,\
+    0x77,0x51,0x72,0x6F,0x26,0x13,0x77,\
+    0x5B,0x72,0x69,0x26,0x77,0x1D,0x3F,\
+    0x8A,0x58,0x39,0x13,0x47,0x77,0x75,\
+    0x6F,0x16,0x39,0x74,0x59,0x42,0x47,\
+    0x19,0x1A,0xAC,0x77,0x7D,0x3B,0x19,\
+    0x1A,0xAF,0x77,0x7D,0x3B,0x1D,0x1A,\
+    0xAD,0x77,0x7D,0x3B,0x11,0x1A,0xAF,\
+    0x77,0x7D,0x3B,0x15,0x19,0x6D,0xA7,\
+    0xEA,0x14,0xB9,0x1A,0xA8,0x77,0x7D,\
+    0x3B,0x09,0x41,0x69,0x0D,0x6E,0x61,\
+    0x05,0x39,0x68,0x77,0xE1,0x05,0x9E,\
+    0x16,0x6B,0x16,0x6D,0xBE,0xB1,0x17,\
+    0x68,0x27,0xE2,0xF9,0x3C,0x5F,0x66,\
+    0x0B,0x6C,0x05,0x9E,0x58,0x68,0x88,\
+    0x59,0x69,0x39,0x61,0xE7,0x17,0x6F,\
+    0x3B,0x39,0x73,0x6F,0x11,0x45,0xFB,\
+    0x3D,0x5E,0xB0,0x58,0x54,0x47,0x29,\
+    0x45,0x40,0x58,0x54,0x47,0x29,0x45,\
+    0x48,0x16,0x6D,0xBC,0xBD,0x69,0xE7,\
+    0x59,0x6D,0x0D,0x3E,0x5F,0x64,0x07,\
+    0x6E,0x68,0x39,0x58,0x68,0x8A,0xED,\
+    0x69,0x39,0x61,0xE7,0x57,0x6A,0x61,\
+    0x26,0x11,0x77,0x5D,0x72,0x6B,0x26,\
+    0x17,0x77,0x39,0x18,0x68,0x3E,0x17,\
+    0x47,0x77,0x65,0x67,0x16,0x39,0x64,\
+    0x54,0xAA,0x47,0x29,0x45,0x44,0x54,\
+    0xAD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x45,0x58,0x3D,0x54,0x47,0x29,0x5A,\
+    0x90,0x11,0x75,0x26,0x39,0xC1,0xE4,\
+    0x59,0x6D,0x0D,0x3E,0x5F,0x62,0x64,\
+    0x91,0x47,0x38,0x39,0x78,0x14,0x95,\
+    0x27,0x3D,0x19,0x6F,0x17,0x7D,0x05,\
+    0x9E,0x71,0x10,0x77,0xCD,0x26,0x39,\
+    0xC1,0x9E,0x59,0x6D,0x67,0x3E,0x69,\
+    0xE7,0x59,0x72,0x09,0x4C,0x77,0x19,\
+    0x3F,0x8A,0x58,0x39,0x07,0x47,0x77,\
+    0x77,0x05,0x00,0x39,0x78,0x0B,0x54,\
+    0x74,0xFE,0x39,0x78,0x0B,0x59,0x0D,\
+    0x00,0x39,0x78,0x14,0x95,0x21,0x21,\
+    0x58,0x68,0x8F,0x2F,0x69,0x39,0x73,\
+    0x6F,0x11,0x67,0x54,0xC5,0x39,0x69,\
+    0x77,0x7D,0x24,0xC1,0x59,0x6C,0x57,\
+    0x6A,0x27,0x0F,0x4F,0x69,0x0F,0x6E,\
+    0x6D,0x05,0x39,0x68,0x77,0xE5,0x05,\
+    0x9E,0x16,0x6D,0x16,0x6D,0xBF,0x9D,\
+    0x17,0x68,0x27,0xE2,0xF9,0x3D,0x5F,\
+    0x78,0x0B,0x6C,0x37,0x38,0x16,0x68,\
+    0x16,0x6D,0xB9,0x77,0x17,0x68,0x2F,\
+    0xE2,0x27,0x3B,0x45,0x68,0x3D,0x6A,\
+    0x21,0x3D,0x85,0x6B,0x10,0xBB,0x67,\
+    0x3E,0x1F,0x77,0x5F,0x72,0x6D,0x26,\
+    0x15,0x77,0x59,0x72,0x09,0x4C,0x77,\
+    0x19,0x39,0x3B,0x47,0x39,0x16,0x6F,\
+    0x3D,0x54,0x47,0x29,0x5A,0x90,0x11,\
+    0x75,0x26,0x39,0xCE,0xB0,0x59,0x6D,\
+    0x0D,0x3E,0x5F,0x62,0x64,0x91,0x47,\
+    0x38,0x39,0x78,0x14,0x95,0x27,0x3D,\
+    0x19,0x6F,0x17,0x75,0x68,0x17,0x39,\
+    0x78,0x58,0x43,0x47,0x35,0x16,0x46,\
+    0x77,0x65,0x26,0x39,0xC7,0x18,0x59,\
+    0x6D,0x67,0x3E,0x00,0x36,0x43,0x36,\
+    0x76,0x87,0x77,0x61,0x69,0x26,0x77,\
+    0x36,0x39,0x18,0x57,0x00,0x39,0x78,\
+    0x0B,0x54,0x09,0x4C,0x77,0x19,0x39,\
+    0x1C,0x09,0x6F,0xC6,0x90,0x3F,0x8A,\
+    0x78,0x3D,0x45,0x6A,0x57,0x03,0x47,\
+    0x31,0x49,0x68,0x67,0x45,0x47,0x38,\
+    0x04,0x28,0x88,0x91,0x77,0x17,0xC6,\
+    0x94,0x96,0x25,0x7A,0x79,0xC6,0x94,\
+    0x57,0x03,0x47,0x31,0x49,0x68,0x67,\
+    0x45,0x47,0x3B,0x04,0x28,0x88,0x93,\
+    0x79,0x17,0xC6,0x94,0xF9,0x03,0xB8,\
+    0xC7,0x4D,0x68,0xC9,0x11,0x47,0x31,\
+    0x5B,0x68,0x76,0xD7,0x67,0x3E,0x89,\
+    0x14,0x77,0x65,0x25,0x39,0x39,0xD6,\
+    0x47,0x56,0x45,0x3F,0x77,0x93,0x77,\
+    0x6F,0x47,0x2B,0x39,0x4A,0x77,0x5B,\
+    0x47,0x73,0x39,0x34,0x77,0x03,0x47,\
+    0xB9,0x39,0xFA,0x77,0xC9,0x79,0x05,\
+    0x38,0x68,0xEC,0xA0,0x65,0x45,0x39,\
+    0x68,0xF7,0x6D,0x27,0x39,0x39,0xFC,\
+    0x49,0x51,0xB9,0x39,0x13,0x14,0x77,\
+    0x6D,0xC7,0x39,0x1B,0x14,0x77,0x69,\
+    0x47,0x39,0x59,0x68,0x77,0xED,0x79,\
+    0x05,0x3B,0x68,0x5D,0x11,0x47,0x39,\
+    0xB9,0x68,0x55,0x11,0x47,0x38,0x39,\
+    0x68,0x17,0x6D,0x47,0x55,0x07,0x54,\
+    0x73,0x6D,0x6D,0x45,0x39,0x69,0x77,\
+    0x6D,0x65,0x45,0x39,0x69,0xF7,0x6D,\
+    0x27,0x61,0x07,0x54,0x7F,0x6D,0x6D,\
+    0x45,0x39,0x69,0xF7,0x6D,0x65,0x45,\
+    0x39,0x6A,0x77,0x6D,0x27,0x7F,0x07,\
+    0x54,0x67,0x6D,0x6D,0x45,0x39,0x6A,\
+    0x77,0x6D,0x65,0x45,0x39,0x6A,0xF7,\
+    0x6D,0x27,0x0D,0x00,0x36,0x43,0x36,\
+    0x07,0x54,0x57,0x6D,0x6D,0x45,0x39,\
+    0x6A,0xF7,0x6D,0x65,0x45,0x39,0x6B,\
+    0x77,0x6D,0x27,0x1B,0x07,0x54,0x37,\
+    0x6D,0x6D,0x45,0x39,0x6B,0x77,0x6D,\
+    0x65,0x45,0x39,0x6B,0xF7,0x6D,0x27,\
+    0x29,0x07,0x54,0xF7,0x6D,0x6D,0x45,\
+    0x39,0x6B,0xF7,0x6D,0x65,0x45,0x39,\
+    0x6C,0x77,0x6D,0x74,0xC5,0x31,0x68,\
+    0x77,0x92,0xBF,0x39,0x3B,0x11,0xC8,\
+    0x92,0x47,0xC6,0xC1,0x68,0x44,0x91,\
+    0x65,0x05,0x39,0x97,0x8F,0x61,0x37,\
+    0x0F,0xB9,0x2F,0x44,0xAD,0x47,0xC6,\
+    0xC1,0x66,0x4D,0xD1,0xB8,0xC6,0x41,\
+    0x69,0xCF,0x51,0x47,0x38,0x5F,0x68,\
+    0x77,0xDF,0xFB,0x05,0x39,0x6A,0x11,\
+    0x6D,0x47,0x93,0x2A,0x94,0x77,0x38,\
+    0x47,0xC6,0xC3,0x4F,0x64,0x91,0x47,\
+    0x93,0x39,0x97,0x8D,0x4A,0x47,0x40,\
+    0x39,0x69,0x77,0x92,0xBF,0x37,0x4F,\
+    0x68,0x3D,0x14,0x47,0xC6,0xC1,0x64,\
+    0x1D,0x4B,0xFB,0x05,0x39,0x6A,0x11,\
+    0x4D,0x54,0xC5,0x39,0x3D,0x77,0x92,\
+    0xBD,0x1E,0x2A,0x94,0x77,0xC7,0x47,\
+    0xC6,0xC3,0x4F,0x57,0x6E,0x15,0xBA,\
+    0x89,0xD4,0x78,0x92,0xB8,0xC6,0x5C,\
+    0xBE,0x0B,0x6C,0x27,0xEB,0x3B,0x11,\
+    0x88,0x93,0x47,0xC6,0xC1,0x66,0x0F,\
+    0x6D,0x3D,0x39,0x82,0xA1,0x13,0x5B,\
+    0x0D,0x3D,0x5F,0x5A,0xCB,0x51,0x47,\
+    0x3B,0x5F,0x44,0x7B,0x38,0xB8,0xC6,\
+    0x5E,0x6C,0x0F,0x6C,0x27,0xD1,0x6D,\
+    0xE5,0x57,0x68,0x15,0xBC,0x89,0xD4,\
+    0x77,0x6D,0x46,0x39,0x5A,0xB2,0x0D,\
+    0x6D,0x54,0xC5,0x00,0x36,0x43,0x36,\
+    0x39,0x3D,0x77,0x92,0xBD,0x1E,0x2A,\
+    0x94,0x77,0xC7,0x47,0xC6,0xC3,0x4F,\
+    0x17,0xAB,0xFC,0xF0,0x5F,0x6E,0x0B,\
+    0x6D,0x27,0x39,0xC6,0x32,0x57,0x6F,\
+    0x15,0xBB,0x62,0xE8,0x12,0x6D,0xB8,\
+    0x69,0x45,0x69,0x17,0x6D,0xB8,0x73,\
+    0x3B,0x11,0x88,0x90,0x47,0xC6,0xC1,\
+    0x66,0x77,0x14,0x07,0x39,0x39,0x97,\
+    0x8F,0x6D,0x27,0x3B,0x45,0x69,0x57,\
+    0x03,0x47,0x35,0x28,0x2E,0x77,0x6F,\
+    0x0B,0xD7,0x19,0x94,0x88,0xB1,0x09,\
+    0x67,0x77,0x1D,0x39,0x1C,0x09,0x6F,\
+    0xC6,0x90,0x35,0x03,0xB8,0xC7,0x49,\
+    0x68,0x67,0x43,0x47,0x32,0x04,0x28,\
+    0x88,0x91,0x67,0x17,0xC6,0x94,0x95,\
+    0xE5,0x6A,0x79,0xC6,0x94,0x57,0x43,\
+    0xB8,0xC5,0x77,0x36,0x39,0x18,0x45,\
+    0x0D,0x77,0x19,0x39,0x3B,0xB8,0x49,\
+    0x71,0x8F,0x48,0x51,0x6D,0x57,0x39,\
+    0x60,0x5F,0x03,0x47,0x29,0x1F,0x06,\
+    0x77,0x79,0x39,0x39,0x41,0x69,0x57,\
+    0x51,0xB8,0x39,0x31,0x68,0xA7,0xE1,\
+    0x35,0x79,0x8B,0xE8,0x14,0x79,0x6A,\
+    0x75,0xC6,0x1C,0x75,0xC3,0x47,0x39,\
+    0x36,0x97,0x88,0x19,0x6F,0x57,0xC6,\
+    0x1C,0x49,0x51,0x67,0x39,0x73,0xFB,\
+    0x10,0x6D,0x46,0x2D,0x80,0x94,0x77,\
+    0x69,0x47,0x39,0x5D,0x68,0x76,0x67,\
+    0x67,0x35,0x45,0x57,0xBB,0xED,0x61,\
+    0x35,0xAF,0xEE,0x03,0x6D,0xF3,0x05,\
+    0x39,0xE8,0x13,0x7F,0x67,0x77,0x49,\
+    0x68,0x67,0x6F,0x96,0xF9,0x28,0x14,\
+    0x77,0x92,0xB8,0x41,0x6B,0x6A,0x17,\
+    0x85,0x37,0x27,0x00,0x36,0x43,0x36,\
+    0x89,0xFB,0x15,0x65,0x3D,0x27,0x49,\
+    0x8A,0xA6,0xFE,0x27,0x3D,0x13,0x7B,\
+    0x35,0xFE,0x33,0x39,0x8D,0x6D,0x13,\
+    0x75,0x67,0x77,0xE8,0xAE,0x07,0x6D,\
+    0x57,0x3B,0xE8,0xA8,0x07,0x6D,0x57,\
+    0x3B,0x28,0x1D,0x7F,0x6C,0xB8,0x41,\
+    0x6B,0x6A,0x17,0x89,0x68,0x35,0x58,\
+    0x68,0x77,0xAF,0x1F,0xB6,0x04,0x28,\
+    0x88,0x93,0x37,0x79,0xA9,0xEE,0x5A,\
+    0x2D,0xB8,0xC1,0x49,0x68,0x47,0x6A,\
+    0x68,0x39,0x49,0x28,0x58,0x6D,0x68,\
+    0x3A,0x49,0x68,0x47,0x43,0xB8,0xC7,\
+    0x16,0x68,0x3F,0x03,0xB8,0x41,0x58,\
+    0x68,0x77,0xD1,0x08,0xD6,0x39,0x7C,\
+    0x5F,0x6D,0x37,0x39,0x29,0x6D,0xC7,\
+    0xC3,0xB8,0xC1,0x5A,0x54,0x3D,0x69,\
+    0x21,0x01,0x4B,0x28,0xA1,0xEC,0x68,\
+    0x3A,0x58,0x68,0x77,0x17,0x1F,0xB6,\
+    0x04,0x28,0x88,0x93,0x37,0x39,0x09,\
+    0x6F,0x58,0x6D,0x37,0x79,0x16,0x68,\
+    0x58,0x6E,0x37,0x39,0x09,0x46,0x88,\
+    0x93,0x68,0x39,0x19,0x54,0x88,0x92,\
+    0xB8,0x41,0x71,0x1E,0x7F,0x2D,0x26,\
+    0x39,0x39,0x1E,0x38,0x82,0x47,0x2D,\
+    0x11,0x68,0x3D,0x2A,0x20,0x3F,0xB6,\
+    0x11,0x77,0x92,0xBF,0x39,0x1D,0x24,\
+    0x03,0x6D,0xF3,0x3C,0x5D,0x70,0xCF,\
+    0x51,0x47,0x38,0x5E,0x7A,0x07,0x6D,\
+    0x57,0x3B,0x2B,0x72,0xC5,0x58,0x4F,\
+    0x38,0x5E,0x6A,0x0F,0x6C,0x15,0x3B,\
+    0x59,0x8C,0x3D,0x2A,0x20,0x33,0x09,\
+    0x6F,0x31,0x2D,0x86,0x40,0x39,0x97,\
+    0x8F,0x6D,0x67,0x57,0x39,0x64,0x66,\
+    0x29,0x47,0x3B,0x00,0x36,0x43,0x36,\
+    0x75,0x86,0x4B,0x91,0xB8,0x71,0x77,\
+    0x36,0x39,0x18,0x09,0x6F,0xC6,0x90,\
+    0x57,0x51,0x47,0x3A,0xB9,0x68,0xB7,\
+    0xC3,0x47,0x31,0xE9,0xE8,0x5A,0x2D,\
+    0xB8,0xC5,0x09,0x54,0x76,0x6D,0x75,\
+    0x17,0xC6,0x94,0x94,0x05,0x09,0x67,\
+    0x77,0x1D,0x39,0x1C,0x09,0x6F,0xC6,\
+    0x90,0x3F,0x8A,0x48,0x3D,0x17,0x46,\
+    0x77,0x7D,0x3F,0x3B,0x15,0x46,0x77,\
+    0x79,0x9B,0xBE,0x0A,0x94,0x7F,0x6D,\
+    0x47,0xC6,0xC1,0x68,0x75,0x14,0xF8,\
+    0xC6,0x39,0x97,0x8F,0x6D,0x77,0x17,\
+    0x39,0x72,0xF6,0x14,0x47,0xC6,0xC1,\
+    0x68,0x44,0x91,0x67,0x32,0x39,0x97,\
+    0x8F,0x61,0x37,0x0B,0xB9,0x06,0x77,\
+    0x63,0x74,0xF9,0x39,0x97,0x8F,0x63,\
+    0x45,0x40,0xC6,0x93,0x77,0x92,0xBF,\
+    0x37,0x13,0x2F,0x55,0x03,0x47,0x31,\
+    0x82,0xAE,0x13,0x69,0x5D,0xE0,0x59,\
+    0x90,0x5D,0x2A,0x65,0x57,0x39,0x60,\
+    0x05,0x6D,0xFF,0x05,0x39,0x6A,0x11,\
+    0x6D,0x47,0x4F,0x39,0x11,0x77,0x6C,\
+    0x47,0xC6,0xC1,0x66,0x0D,0x6D,0x0D,\
+    0x40,0x39,0x97,0x8F,0x61,0x2D,0x1F,\
+    0x81,0x54,0x77,0x6F,0x21,0x19,0x2A,\
+    0x94,0x77,0x38,0x47,0xC6,0xC3,0x4F,\
+    0x64,0x91,0x47,0x93,0x39,0x97,0x8D,\
+    0x4A,0x67,0x3C,0x6B,0xED,0xC7,0xD1,\
+    0x47,0x39,0xC6,0x97,0x12,0xBB,0x3F,\
+    0x38,0x59,0xBA,0x75,0x14,0xB8,0xC7,\
+    0x39,0x97,0x8F,0x63,0x67,0x7E,0x24,\
+    0x38,0x88,0x92,0x67,0x7E,0x24,0x00,\
+    0x77,0x4D,0xB8,0xC6,0x82,0xAE,0x15,\
+    0x67,0x0D,0x2C,0x00,0x36,0x43,0x36,\
+    0x5F,0x6E,0x25,0xE0,0x15,0xB0,0x59,\
+    0x9A,0xCC,0xAB,0x22,0x3B,0x41,0x68,\
+    0x47,0x6C,0x15,0x78,0x89,0x14,0xCC,\
+    0xED,0x22,0x39,0xC6,0xE4,0x0F,0x6C,\
+    0x27,0x39,0xC6,0xEE,0x75,0x14,0xB8,\
+    0xC4,0x39,0x97,0x8F,0x63,0x47,0x40,\
+    0x79,0x68,0x77,0x92,0xBF,0x39,0x3B,\
+    0x11,0xA8,0x92,0x47,0xC6,0xC1,0x68,\
+    0x57,0x69,0x0B,0xD7,0x19,0x98,0x88,\
+    0x89,0x09,0x67,0x77,0x1D,0x75,0xE5,\
+    0x09,0x48,0x77,0x19,0x39,0x1C,0x68,\
+    0x3E,0x39,0x14,0x70,0x6D,0x67,0x45,\
+    0x39,0x97,0x8D,0x6D,0x05,0x51,0x39,\
+    0x32,0x75,0x45,0x47,0xC1,0x39,0x3A,\
+    0x77,0x45,0x47,0x38,0x39,0x3A,0x46,\
+    0x11,0x77,0xED,0x39,0x32,0x66,0x11,\
+    0x47,0x79,0x39,0x3B,0x77,0x05,0x46,\
+    0x29,0x39,0x38,0x59,0x51,0x47,0x29,\
+    0x65,0x38,0x39,0x16,0x3F,0x38,0x3B,\
+    0x14,0x8F,0x92,0x69,0x26,0x77,0x1D,\
+    0x3F,0x8A,0x87,0xF9,0x77,0xD1,0x77,\
+    0x7D,0x63,0x65,0x19,0x77,0x55,0x72,\
+    0x67,0x66,0x1B,0x37,0x39,0x1E,0x0F,\
+    0xDE,0xF9,0xA8,0x75,0x14,0xB0,0xC6,\
+    0x39,0x97,0x8D,0x3D,0x09,0x80,0x39,\
+    0x78,0x43,0xC5,0x67,0x26,0x1B,0x77,\
+    0x57,0x32,0x65,0x66,0x77,0x1B,0x3F,\
+    0x8A,0x87,0xF9,0x7B,0xCF,0x39,0xD4,\
+    0x47,0x29,0x0F,0x04,0x2F,0xE2,0x67,\
+    0x26,0x1B,0x77,0x57,0x32,0x65,0x66,\
+    0x77,0x1B,0x3F,0x8A,0x87,0xF9,0x49,\
+    0x69,0x58,0x6D,0x09,0x80,0x39,0x78,\
+    0x41,0x01,0x1F,0xB6,0x19,0x77,0x55,\
+    0x72,0x67,0x66,0x00,0x36,0x43,0x36,\
+    0x1B,0x37,0x39,0x1E,0x09,0x48,0x71,\
+    0x8F,0xB7,0xAD,0x37,0x3B,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x0F,0x04,0x2F,\
+    0xE2,0x67,0x26,0x1B,0x77,0x57,0x32,\
+    0x65,0x66,0x77,0x1B,0x39,0x1C,0x0F,\
+    0xDE,0xF9,0xA8,0x07,0x6E,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x71,0x55,0x61,\
+    0xE7,0x57,0x72,0x65,0x26,0x19,0x37,\
+    0x55,0x32,0x09,0x4A,0x77,0x19,0x3F,\
+    0x8A,0x87,0xF9,0x49,0x6C,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x41,0x01,0x1F,\
+    0xB6,0x19,0x77,0x55,0x72,0x67,0x66,\
+    0x1B,0x37,0x39,0x1E,0x09,0x48,0x71,\
+    0x8F,0xB7,0xAD,0x37,0x3C,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x0F,0x04,0x2F,\
+    0xE2,0x67,0x26,0x1B,0x77,0x57,0x32,\
+    0x65,0x66,0x77,0x1B,0x39,0x1C,0x0F,\
+    0xDE,0xF9,0xA8,0x07,0x6B,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x71,0x55,0x61,\
+    0xE7,0x57,0x72,0x65,0x26,0x19,0x37,\
+    0x55,0x32,0x09,0x4A,0x77,0x19,0x3F,\
+    0x8A,0x87,0xF9,0x49,0x6F,0x58,0x6D,\
+    0x09,0x80,0x39,0x78,0x41,0x01,0x1F,\
+    0xB6,0x19,0x77,0x55,0x72,0x67,0x66,\
+    0x1B,0x37,0x39,0x1E,0x09,0x48,0x71,\
+    0x8F,0xB7,0xAD,0x37,0x31,0x16,0x68,\
+    0x39,0xD4,0x47,0x29,0x0F,0x04,0x2F,\
+    0xE2,0x67,0x26,0x1B,0x77,0x57,0x32,\
+    0x65,0x66,0x77,0x1B,0x39,0x1C,0x0F,\
+    0xDE,0xF9,0xA8,0x07,0x64,0x68,0x39,\
+    0x77,0xD1,0x77,0x7D,0x71,0x55,0x61,\
+    0xE7,0x57,0x72,0x65,0x26,0x19,0x37,\
+    0x55,0x32,0x09,0x4A,0x77,0x19,0x3F,\
+    0x8A,0x87,0xF9,0x00,0x36,0x43,0x36,\
+    0x49,0x62,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x41,0x01,0x1F,0xB6,0x19,0x77,\
+    0x55,0x72,0x67,0x66,0x1B,0x37,0x39,\
+    0x1E,0x09,0x48,0x71,0x8F,0xB7,0xAD,\
+    0x37,0x32,0x16,0x68,0x39,0xD4,0x47,\
+    0x29,0x0F,0x04,0x2F,0xE2,0x67,0x26,\
+    0x1B,0x77,0x57,0x32,0x65,0x66,0x77,\
+    0x1B,0x39,0x1C,0x0F,0xDE,0xF9,0xA8,\
+    0x07,0x61,0x68,0x39,0x77,0xD1,0x77,\
+    0x7D,0x71,0x55,0x61,0xE7,0x57,0x72,\
+    0x65,0x26,0x19,0x37,0x55,0x32,0x09,\
+    0x4A,0x77,0x19,0x3F,0x8A,0x87,0xF9,\
+    0x49,0x65,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x41,0x01,0x1F,0xB6,0x19,0x77,\
+    0x55,0x72,0x67,0x66,0x1B,0x37,0x39,\
+    0x1E,0x09,0x48,0x71,0x8F,0xB7,0xAD,\
+    0x37,0x37,0x16,0x68,0x39,0xD4,0x47,\
+    0x29,0x0F,0x04,0x2F,0xE2,0x67,0x26,\
+    0x1B,0x77,0x57,0x32,0x65,0x66,0x77,\
+    0x1B,0x39,0x1C,0x0F,0xDE,0xF9,0xA8,\
+    0x07,0x62,0x68,0x39,0x77,0xD1,0x77,\
+    0x7D,0x71,0x55,0x61,0xE7,0x57,0x72,\
+    0x65,0x26,0x19,0x37,0x55,0x32,0x09,\
+    0x4A,0x77,0x19,0x3F,0x8A,0x87,0xF9,\
+    0x49,0x78,0x58,0x6D,0x09,0x80,0x39,\
+    0x78,0x41,0x01,0x1F,0xB6,0x19,0x77,\
+    0x55,0x72,0x67,0x66,0x1B,0x37,0x39,\
+    0x1E,0x09,0x48,0x71,0x8F,0xB7,0xAD,\
+    0x37,0x28,0x16,0x68,0x39,0xD4,0x47,\
+    0x29,0x0F,0x04,0x2F,0xE2,0x67,0x26,\
+    0x1B,0x77,0x57,0x32,0x65,0x66,0x77,\
+    0x1B,0x39,0x1C,0x0F,0xDE,0xF9,0xA8,\
+    0x07,0x7F,0x68,0x39,0x77,0xD1,0x77,\
+    0x7D,0x71,0x55,0x00,0x36,0x43,0x36,\
+    0x61,0xE7,0x57,0x72,0x65,0x26,0x19,\
+    0x37,0x55,0x32,0x09,0x4A,0x77,0x19,\
+    0x3F,0x8A,0x48,0x25,0x39,0x14,0x70,\
+    0x6D,0x6D,0x45,0x39,0x97,0x8D,0x6D,\
+    0x5C,0x45,0x39,0x3D,0x77,0x38,0x5C,\
+    0x45,0x39,0xC2,0x77,0x38,0x79,0x05,\
+    0x8F,0x72,0x44,0xAA,0x47,0x2A,0x39,\
+    0x16,0x4F,0x51,0xC7,0x39,0x43,0xC2,\
+    0x0B,0x38,0x6F,0x45,0x39,0x7B,0x77,\
+    0x6D,0x00,0xD5,0x39,0xD9,0x7F,0xFE,\
+    0x47,0x39,0x22,0x2E,0x77,0x38,0x5C,\
+    0x7C,0x39,0x3D,0x4E,0x2A,0x47,0x47,\
+    0x68,0xA4,0x88,0x83,0x39,0xC6,0x6A,\
+    0xEF,0x11,0x91,0x6F,0x26,0x13,0x77,\
+    0x5B,0x72,0x69,0x26,0x1F,0x37,0x5F,\
+    0x32,0x6D,0x66,0x77,0x1D,0x64,0x91,\
+    0x47,0x6C,0x39,0x97,0x8D,0x38,0x54,\
+    0xC5,0x39,0xC2,0x77,0x92,0xBD,0x6C,\
+    0x77,0x1D,0x39,0x1C,0x74,0xC5,0x8F,\
+    0x72,0x77,0x7E,0x47,0x47,0x77,0x1D,\
+    0x39,0x1C,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0x9D,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xA8,0x77,\
+    0x7D,0x1E,0xE1,0x39,0x78,0x2E,0x99,\
+    0x47,0x29,0x63,0x78,0x77,0x7D,0x1D,\
+    0x15,0x39,0x78,0x2D,0x25,0x47,0x29,\
+    0x63,0x0C,0x77,0x7D,0x1D,0xB9,0x39,\
+    0x78,0x2D,0xF1,0x47,0x29,0x63,0xD0,\
+    0x77,0x7D,0x1D,0xED,0x39,0x78,0x2D,\
+    0x9D,0x47,0x29,0x62,0x64,0x77,0x7D,\
+    0x1C,0x11,0x39,0x78,0x2C,0x29,0x47,\
+    0x29,0x62,0x08,0x77,0x7D,0x1C,0x45,\
+    0x39,0x78,0x2C,0xF5,0x47,0x29,0x62,\
+    0xDC,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x00,0x36,0x43,0x36,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x00,0x36,0x43,0x36,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x77,\
+    0x7D,0x1E,0xA9,0x39,0x78,0x2E,0xFD,\
+    0x47,0x29,0x60,0xF8,0x77,0x7D,0x1E,\
+    0xA9,0x39,0x78,0x2E,0xFD,0x47,0x29,\
+    0x60,0xF8,0x77,0x7D,0x1E,0xA9,0x39,\
+    0x78,0x2E,0xFD,0x47,0x29,0x60,0xF8,\
+    0x77,0x7D,0x1E,0xA9,0x39,0x78,0x2E,\
+    0xFD,0x47,0x29,0x60,0xF8,0x77,0x7D,\
+    0x1E,0xA9,0x39,0x78,0x2E,0xFD,0x47,\
+    0x29,0x60,0xF8,0x77,0x7D,0x1E,0xA9,\
+    0x39,0x78,0x2E,0xFD,0x47,0x29,0x60,\
+    0xF8,0x77,0x7D,0x1E,0xA9,0x39,0x78,\
+    0x2E,0xFD,0x47,0x29,0x60,0xF8,0x39,\
+    0x3B,0xB8,0xC1,0x00,0x36,0x43,0x36,\
+    0x71,0x8F,0x68,0x69,0x7D,0x17,0x39,\
+    0x62,0x41,0x51,0x47,0x39,0x83,0x14,\
+    0x77,0x64,0x22,0x3F,0x49,0x69,0x17,\
+    0x6D,0x47,0x95,0x19,0x14,0x77,0x7D,\
+    0x24,0x8D,0x49,0x68,0x47,0x68,0x6D,\
+    0x49,0x35,0x68,0x44,0x91,0xED,0x93,\
+    0x39,0x68,0x7D,0xC7,0x74,0xC5,0x6C,\
+    0x3D,0x77,0x6D,0x42,0x6D,0x0A,0x94,\
+    0xF7,0xED,0x47,0x39,0x33,0xC2,0x44,\
+    0x91,0xED,0x93,0x39,0x68,0x7D,0xC7,\
+    0x74,0xC5,0x6C,0x3D,0x77,0x6D,0x42,\
+    0x6D,0x03,0xD4,0x47,0x5D,0x6D,0x00,\
+    0x39,0x7B,0x77,0x05,0x35,0x93,0x41,\
+    0x3D,0x57,0x11,0x47,0x2A,0x39,0x68,\
+    0x55,0x11,0x47,0xC6,0xC3,0x68,0x47,\
+    0x51,0xF1,0x23,0x2A,0x2C,0x77,0x38,\
+    0x54,0x78,0x39,0x3D,0x46,0x2D,0x47,\
+    0x47,0x05,0x7D,0x49,0x51,0x47,0xB9,\
+    0xF7,0x2E,0x3D,0x2A,0x21,0x17,0x31,\
+    0x6E,0x77,0x68,0x20,0x37,0x73,0x2F,\
+    0x11,0x49,0x74,0xC5,0xC9,0x98,0x77,\
+    0x6D,0x4D,0x93,0x59,0x76,0x59,0x45,\
+    0x47,0x51,0xA7,0xED,0xC9,0xD1,0x47,\
+    0x92,0x90,0x38,0x12,0xAB,0x74,0xC5,\
+    0x89,0xD8,0x77,0x6D,0x4D,0x93,0x49,\
+    0x69,0x17,0x7D,0x37,0x39,0x59,0x64,\
+    0x47,0x6E,0x15,0x7A,0x6E,0x28,0x12,\
+    0x6D,0xB8,0x51,0x49,0x69,0x51,0x72,\
+    0x6F,0x26,0x13,0x77,0x5B,0x72,0x69,\
+    0x26,0x13,0x37,0x39,0x33,0x09,0x4C,\
+    0x77,0x19,0x39,0x3B,0xB8,0xC1,0x71,\
+    0x8F,0x68,0x71,0x65,0x17,0x39,0x60,\
+    0x5D,0x43,0x47,0x35,0x11,0x46,0x77,\
+    0x7D,0x71,0x05,0x00,0x36,0x43,0x36,\
+    0x39,0x68,0xCF,0xD4,0x47,0x29,0x5A,\
+    0xDC,0x12,0x61,0x67,0x38,0xE9,0xEC,\
+    0xC7,0xD4,0x47,0x29,0x5A,0xB0,0x14,\
+    0x6B,0x37,0x38,0x59,0x68,0x77,0xA3,\
+    0x6F,0x7D,0x1F,0x2D,0x57,0x28,0x67,\
+    0x38,0x6B,0xE8,0x95,0xE5,0x06,0xC9,\
+    0x33,0x96,0x5D,0x25,0x74,0xC5,0x93,\
+    0xC2,0x77,0x6D,0x4D,0x93,0x0A,0x94,\
+    0x22,0x38,0x47,0x39,0x3C,0x3C,0x44,\
+    0x91,0x67,0x19,0x39,0x68,0x7D,0xC7,\
+    0x3D,0x39,0x03,0x7B,0x44,0x91,0xE7,\
+    0x99,0x39,0x68,0x7D,0xC7,0x7F,0xBC,\
+    0x13,0x51,0x77,0x7E,0x47,0x51,0x41,\
+    0xC2,0x05,0x38,0x67,0x45,0x39,0x7B,\
+    0x77,0x6D,0x65,0x45,0x39,0x97,0x8D,\
+    0x6D,0x54,0x78,0x39,0x3D,0x64,0x29,\
+    0x47,0x6C,0x08,0x14,0xC1,0x77,0x47,\
+    0x47,0x05,0x7C,0x49,0x51,0x47,0xB9,\
+    0xF7,0x3B,0x47,0x51,0x47,0xB9,0xF9,\
+    0x2E,0xC7,0x2A,0x20,0x23,0x31,0x6E,\
+    0x77,0x68,0x20,0x3F,0x89,0x2F,0x11,\
+    0x55,0x27,0x37,0x17,0x40,0x77,0x05,\
+    0xD9,0xBC,0x49,0x2C,0xC7,0xEA,0x25,\
+    0xF1,0x59,0x4C,0x57,0x26,0x13,0xB2,\
+    0x88,0xA5,0x13,0x65,0x13,0xB5,0x0F,\
+    0x54,0x77,0x6D,0x27,0x21,0x0A,0x94,\
+    0xE7,0xFD,0x47,0x39,0x33,0xC2,0x44,\
+    0x91,0x47,0x39,0x39,0x68,0x7D,0xC7,\
+    0x37,0x39,0x59,0x48,0x07,0x6C,0x27,\
+    0x25,0x09,0x6B,0x25,0x2E,0x10,0x79,\
+    0x5C,0x68,0x88,0x1F,0x74,0xC5,0xA9,\
+    0xF8,0x77,0x6D,0x4D,0x93,0x0A,0x94,\
+    0x77,0x6D,0x47,0x39,0x33,0xC2,0x07,\
+    0x6C,0x61,0x26,0x00,0x36,0x43,0x36,\
+    0x11,0x77,0x5D,0x72,0x6B,0x26,0x17,\
+    0x77,0x51,0x32,0x6F,0x66,0x13,0x37,\
+    0x39,0x33,0x09,0x4C,0x77,0x19,0x58,\
+    0x60,0x67,0x16,0x39,0x64,0x05,0x6D,\
+    0x65,0x56,0x39,0x60,0x5D,0x2D,0x67,\
+    0x79,0xE8,0x87,0x77,0x7D,0x16,0xF0,\
+    0x39,0x76,0x64,0x91,0x47,0x6C,0x39,\
+    0x97,0x8D,0x38,0x54,0xC5,0x39,0xC2,\
+    0x77,0x92,0xBD,0x6C,0x0A,0x94,0xC1,\
+    0x77,0x47,0x2A,0x39,0x16,0x45,0x51,\
+    0x45,0x39,0x82,0x21,0x10,0x69,0x37,\
+    0x38,0x59,0x6E,0xCC,0xA5,0x22,0xED,\
+    0x49,0x68,0x5D,0x32,0x09,0x4C,0x77,\
+    0x19,0x58,0x60,0x68,0x3E,0x19,0x47,\
+    0x77,0x7D,0x79,0x05,0x3B,0x68,0x5D,\
+    0x11,0x47,0xC6,0xC3,0x68,0x6C,0x11,\
+    0x47,0x6C,0x39,0x3D,0x6C,0x11,0x47,\
+    0x93,0x39,0x3D,0x45,0x51,0xF1,0x23,\
+    0x0A,0xA9,0x77,0x7E,0x47,0x47,0x1B,\
+    0x07,0x77,0x61,0x67,0x79,0x09,0x54,\
+    0x88,0x92,0x16,0xF6,0x39,0x70,0x6C,\
+    0x11,0x47,0x6C,0x39,0x3D,0x6C,0x11,\
+    0x47,0x93,0x39,0x3D,0x44,0xAC,0x47,\
+    0x2A,0x39,0x16,0x49,0x51,0x45,0x39,\
+    0x89,0x31,0x10,0x69,0x37,0x38,0x59,\
+    0x70,0xC4,0xA5,0x24,0xE3,0x22,0x14,\
+    0x77,0x38,0x47,0x6C,0x22,0x14,0x77,\
+    0xC7,0x47,0x6C,0x0A,0xA9,0x77,0x7E,\
+    0x47,0x47,0x49,0x68,0x59,0x72,0x6D,\
+    0x66,0x77,0x1D,0x39,0x1C,0x68,0x3E,\
+    0x16,0x6E,0x4B,0x42,0x47,0x37,0x2A,\
+    0x94,0x77,0x38,0x47,0xC6,0xC3,0x3D,\
+    0x64,0x91,0x47,0x93,0x39,0x97,0x8D,\
+    0x38,0x74,0xC5,0x00,0x36,0x43,0x36,\
+    0x8F,0x72,0x77,0x7E,0x47,0x47,0x16,\
+    0x6E,0x16,0x6D,0xBA,0x0D,0x61,0xE7,\
+    0x59,0x6D,0x0D,0x3E,0x5F,0x4C,0x58,\
+    0x60,0x67,0x45,0x39,0x78,0x14,0xD9,\
+    0x37,0x39,0x09,0x6E,0x3C,0x9D,0x4B,\
+    0x39,0x19,0x05,0x77,0x69,0x0F,0x51,\
+    0xC6,0x96,0x58,0x78,0x26,0x39,0xC6,\
+    0x2A,0x59,0x6D,0x17,0xB6,0x13,0x37,\
+    0x57,0x6A,0x6B,0x26,0x17,0x77,0x39,\
+    0x18,0x09,0x48,0x71,0x8F,0x78,0x6D,\
+    0x69,0x16,0x39,0x7C,0x5D,0x42,0x47,\
+    0x21,0x11,0x47,0x77,0x71,0x0D,0xBE,\
+    0x5F,0x6C,0x07,0x6D,0x27,0x07,0x2A,\
+    0x94,0x77,0x38,0x47,0xC6,0xC3,0x3D,\
+    0x64,0x91,0x47,0x93,0x39,0x97,0x8D,\
+    0x38,0x74,0xC5,0x8F,0x72,0x77,0x7E,\
+    0x47,0x47,0x16,0x6C,0x58,0x68,0x68,\
+    0x3E,0x58,0x68,0x8A,0xF1,0x08,0xD6,\
+    0x39,0x64,0x5B,0x6D,0x0D,0x3F,0x5F,\
+    0x78,0x58,0x6A,0x68,0x3D,0x16,0x6D,\
+    0x16,0x6D,0xB9,0xA5,0x15,0x68,0x38,\
+    0x82,0x47,0x35,0x19,0x6E,0x5F,0x72,\
+    0x6D,0x26,0x15,0x77,0x59,0x72,0x09,\
+    0x4C,0x39,0x68,0x77,0x6D,0x47,0x39,\
+    0x79,0x68,0x77,0x6D,0x27,0x39,0x39,\
+    0x68,0xF7,0x6D,0x47,0x3B,0x39,0x68,\
+    0x77,0x69,0x47,0x39,0x39,0x6E,0x77,\
+    0x6D,0x47,0x31,0x39,0x68,0x77,0x61,\
+    0x47,0x39,0x39,0x78,0x77,0x6D,0x09,\
+    0x48,0x77,0x19,0x77,0x6D,0x47,0x39,\
+    0x39,0x68,0x77,0x6D,0x47,0x39,0x39,\
+    0x68,0x77,0x6D,0x47,0x39,0x39,0x68,\
+    0x77,0x6D,0x47,0x39,0x39,0x68,0x77,\
+    0x6D,0x43,0x4D,0x00,0x36,0x43,0x36,\
+    0x44,0x54,0x45,0x43,0x00,0x49,0x00} // 16384
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t8can.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -0,0 +1,303 @@
+/*******************************************************************************
+
+trionic8.cpp - CAN Bus functions for Just4Trionic by Just4pLeisure
+(c) 2011, 2012 by Sophie Dexter
+
+This C++ module provides functions for reading and writing the FLASH chips and
+SRAM in Trionic8 ECUs. (Writing the adaption data back to SRAM not done yet).
+
+Some functions need an additional 'bootloader' program to be sent to the T8 ECU
+before they can be used. These functions are: Identifying the T5 ECU type and
+FLASH chips, dumping the FLASH chips, erasing the FLASH chips, writing to the
+FLASH chips and calculating the FLASH chips' checksum.
+
+********************************************************************************
+
+WARNING: Use at your own risk, sadly this software comes with no guarantees.
+This software is provided 'free' and in good faith, but the author does not
+accept liability for any damage arising from its use.
+
+*******************************************************************************/
+
+#include "t8can.h"
+
+// constants
+#define CMD_BUF_LENGTH      32              ///< command buffer size
+
+// static variables
+static char cmd_buffer[CMD_BUF_LENGTH];     ///< command string buffer
+
+//static uint32_t cmd_addr;                   ///< address (optional)
+//static uint32_t cmd_value;                  ///< value    (optional)
+//static uint32_t cmd_result;                 ///< result
+
+//static uint32_t flash_start = 0;
+
+// private functions
+uint8_t execute_t8_cmd();
+void t8_can_show_help();
+void t8_can_show_full_help();
+
+void t8_can()
+{
+    // Start the CAN bus system
+    // Note that at the moment this is only for T8 ECUs at 500 kbits
+    t8_can_show_help();
+
+    char data[8];
+    printf("Trying to listen to  CAN P-Bus (500 kBit/s)...\r\n");
+    can_configure(2, 500000, 1);
+    if (can_wait_timeout(T8ANYMSG, data, 8, T8MESSAGETIMEOUT)) {
+        printf("Connected to Saab P-Bus\r\n");
+        printf("Switching to P-Bus active mode\r\n");
+        can_configure(2, 500000, 0);
+    } else {
+        printf("I did not receive any P-Bus messages\r\n");
+        printf("Switching to P-Bus active mode\r\n");
+        can_configure(2, 500000, 0);
+        if (can_wait_timeout(T8ANYMSG, data, 8, T8CONNECTTIMEOUT)) {
+            printf("Connected to Saab P-Bus\r\n");
+            //can_active();
+        } else {
+            printf("FAILED to connect!\r\n");
+            led4 = 1;
+        }
+    }
+
+// main loop
+    *cmd_buffer = '\0';
+    char ret;
+    char rx_char;
+    while (true) {
+        // read chars from USB
+        // send received messages to the pc over USB connection
+        // This function displays any CAN messages that are 'missed' by the other functions
+        // Can messages might be 'missed' because they are received after a 'timeout' period
+        // or because they weren't expected, e.g. if the T5 ECU resets for some reason
+//        t7_show_can_message();
+        silent_can_message();
+        if (pc.readable()) {
+            // turn Error LED off for next command
+            led4 = 0;
+            rx_char = pc.getc();
+            switch (rx_char) {
+                    // 'ESC' key to go back to mbed Just4Trionic 'home' menu
+                case '\e':
+                    can_close();
+                    return;
+                    // end-of-command reached
+                case TERM_OK :
+                    // execute command and return flag via USB
+                    timer.reset();
+                    timer.start();
+                    ret = execute_t8_cmd();
+                    pc.putc(ret);
+                    printf("Completed in %.3f seconds.\r\n", timer.read());
+                    // reset command buffer
+                    *cmd_buffer = '\0';
+                    // light up LED
+                    //                    ret == TERM_OK ? led_on(LED_ACT) : led_on(LED_ERR);
+                    ret == TERM_OK ? led3 = 1 : led4 = 1;
+                    break;
+                    // another command char
+                default:
+                    // store in buffer if space permits
+                    if (StrLen(cmd_buffer) < CMD_BUF_LENGTH - 1) {
+                        StrAddc(cmd_buffer, rx_char);
+                    }
+                    break;
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+/**
+    Executes a command and returns result flag (does not transmit the flag
+    itself).
+
+    @return                    command flag (success / failure)
+*/
+uint8_t execute_t8_cmd()
+{
+
+    char data[8];
+//    uint8_t cmd_length = strlen(cmd_buffer);
+    // command groups
+    switch (*cmd_buffer) {
+//            CHECK_ARGLENGTH(0);
+            // Get the Symbol Table
+        case 'i' :
+            if (t8_initialise()) {
+                printf("Trionic 8 Connection OK\r\n");
+                return TERM_OK;
+            } else {
+                printf("Trionic 8 Connection Failed\r\n");
+                return TERM_ERR;
+            }
+//            return t7_initialise()
+//                   ? TERM_OK : TERM_ERR;
+        case 'a' :
+        case 'A' :
+            if (t8_authenticate(0x01)) {
+                printf("Security Key Accepted\r\n");
+                return TERM_OK;
+            } else {
+                printf("Security Key Failed\r\n");
+                return TERM_ERR;
+            }
+//            return t7_authenticate()
+//                   ? TERM_OK : TERM_ERR;
+
+// Erase the FLASH chips
+        case 'e':
+        case 'E':
+            return t8_erase()
+                   ? TERM_OK : TERM_ERR;
+// DUMP the T8 ECU BIN file stored in the FLASH chips
+        case 'D':
+            if (!t8_authenticate(0x00)) {
+                if (!t8_initialise()) {
+                    printf("Trionic 7 Connection Failed\r\n");
+                    return TERM_ERR;
+                }
+                if (!t8_authenticate(0x00)) {
+                    printf("Security Key Failed\r\n");
+                    return TERM_ERR;
+                }
+            }
+        case 'd':
+            return t8_dump()
+                   ? TERM_OK : TERM_ERR;
+// Send a FLASH update file to the T8 ECU
+        case 'F':
+            if (!t8_authenticate(0x00)) {
+                if (!t8_initialise()) {
+                    printf("Trionic 7 Connection Failed\r\n");
+                    return TERM_ERR;
+                }
+                if (!t8_authenticate(0x00)) {
+                    printf("Security Key Failed\r\n");
+                    return TERM_ERR;
+                }
+            }
+            if (!t8_erase()) {
+                printf("Could not Erase FLASH!\r\n");
+                return TERM_ERR;
+            }
+        case 'f':
+            return t8_flash()
+                   ? TERM_OK : TERM_ERR;
+// Try to connect to CAN I-BUS
+        case 'I' :
+            printf("Trying to open CAN I-Bus (47619 Bit/s)...\r\n");
+            can_close();
+            //can_monitor();
+            can_set_speed(47619);
+            can_open();
+            if (can_wait_timeout(T8ANYMSG, data, 8, T8CONNECTTIMEOUT)) {
+                printf("Connected to Saab I-Bus\r\n");
+                //can_active();
+                return TERM_OK;
+            } else {
+                printf("I did not receive any I-Bus messages\r\n");
+                printf("FAILED to connect!\r\n");
+                return TERM_ERR;
+            }
+// Try to connect to CAN P-BUS
+        case 'P' :
+            printf("Trying to open CAN P-Bus (500 kBit/s)...\r\n");
+            can_close();
+            //can_monitor();
+            can_set_speed(500000);
+            can_open();
+            if (can_wait_timeout(T8ANYMSG, data, 8, T8CONNECTTIMEOUT)) {
+                printf("Connected to Saab P-Bus\r\n");
+                //can_active();
+                return TERM_OK;
+            } else {
+                printf("I did not receive any P-Bus messages\r\n");
+                printf("FAILED to connect!\r\n");
+                return TERM_ERR;
+            }
+// Show the VIN code
+        case 'v':
+            return t8_show_VIN()
+                   ? TERM_OK : TERM_ERR;
+        case 'V':
+            return t8_write_VIN()
+                   ? TERM_OK : TERM_ERR;
+// Print help
+        case 'h':
+            t8_can_show_help();
+            return TERM_OK;
+        case 'H':
+            t8_can_show_full_help();
+            return TERM_OK;
+        default:
+            t8_can_show_help();
+            break;
+    }
+// unknown command
+    return TERM_ERR;
+}
+
+//
+// Trionic7ShowHelp
+//
+// Displays a list of things that can be done with the T5 ECU.
+//
+// inputs:    none
+// return:    none
+//
+void t8_can_show_help()
+{
+    printf("Trionic 8 Command Menu\r\n");
+    printf("======================\r\n");
+    printf("D - DUMP the T8 ECU FLASH to a file 'ORIGINAL.BIN'\r\n");
+    printf("F - FLASH the update file 'MODIFIED.HEX' to the T8\r\n");
+    printf("\r\n");
+    printf("I - Try to open CAN I-Bus (47619 Bit/s)\r\n");
+    printf("P - Try to open CAN P-Bus (500 kBit/s)\r\n");
+    printf("\r\n");
+    printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
+    printf("\r\n");
+    printf("h  - Show this help menu\r\n");
+    printf("\r\n");
+    return;
+}
+//
+// t7_can_show_full_help
+//
+// Displays a complete list of things that can be done with the T5 ECU.
+//
+// inputs:    none
+// return:    none
+//
+void t8_can_show_full_help()
+{
+    printf("Trionic 8 Command Menu\r\n");
+    printf("======================\r\n");
+    printf("D - DUMP the T8 ECU FLASH to a file 'ORIGINAL.BIN'\r\n");
+    printf("F - FLASH the update file 'MODIFIED.HEX' to the T8\r\n");
+    printf("\r\n");
+    printf("I - Try to open CAN I-Bus (47619 Bit/s)\r\n");
+    printf("P - Try to open CAN P-Bus (500 kBit/s)\r\n");
+    printf("\r\n");
+    printf("\r\n");
+    printf("i - Send initialisation message to T8\r\n");
+    printf("a - Send Authentication key to T8\r\n");
+    printf("d - Dump T8 Bin file 'ORIGINAL.BIN'\r\n");
+    printf("e - Erase the FLASH in the T8 ECU\r\n");
+    printf("f - FLASH the file 'MODIFIED.BIN' to the T8 ECU\r\n");
+    printf("v - Display the current VIN code stored in the T8 ECU\r\n");
+    printf("V - FLASH the file 'MODIFIED.BIN' to the T8 ECU\r\n");
+    printf("\r\n");
+    printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
+    printf("\r\n");
+    printf("H  - Show this help menu\r\n");
+    printf("\r\n");
+    return;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t8can.h	Wed Sep 11 11:55:51 2013 +0000
@@ -0,0 +1,33 @@
+/*******************************************************************************
+
+t8can.h - information and definitions needed for doing things with the T7 ECU
+(c) 2010,2011,2012 by Sophie Dexter
+
+********************************************************************************
+
+WARNING: Use at your own risk, sadly this software comes with no guarantees.
+This software is provided 'free' and in good faith, but the author does not
+accept liability for any damage arising from its use.
+
+*******************************************************************************/
+
+#ifndef __T8CAN_H__
+#define __T8CAN_H__
+
+#include "mbed.h"
+#include "CAN.h"
+
+#include "common.h"
+#include "strings.h"
+#include "t8utils.h"
+#include "srecutils.h"
+
+
+extern void t8_can();
+
+void t8_can_show_help();
+void t8_can_show_full_help();
+uint8_t execute_t8_cmd();
+
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t8utils.cpp	Wed Sep 11 11:55:51 2013 +0000
@@ -0,0 +1,513 @@
+/*******************************************************************************
+
+t7utils.cpp
+(c) 2011, 2012 by Sophie Dexter
+portions (c) Tomi Liljemark (firstname.surname@gmail.com)
+
+This C++ module provides functions for communicating simple messages to and from
+the T7 ECU
+
+********************************************************************************
+
+WARNING: Use at your own risk, sadly this software comes with no guarantees.
+This software is provided 'free' and in good faith, but the author does not
+accept liability for any damage arising from its use.
+
+*******************************************************************************/
+
+#include "t8utils.h"
+
+Timer   TesterPresent;
+
+
+//
+// t8_initialise
+//
+// sends an initialisation message to the T7 ECU
+// but doesn't displays anything.
+//
+// inputs:    none
+// return:    bool TRUE if there was a message, FALSE if no message.
+//
+
+
+bool t8_initialise()
+{
+    return TRUE;
+}
+
+bool t8_show_VIN()
+{
+    uint16_t i;
+    char T8TxFlo[] = T8FLOCTL;
+    char T8TxMsg[] = T8REQVIN;
+    char T8RxMsg[8];
+    printf("Requesting VIN from T8...\r\n");
+    // Send "Request VIN" to Trionic8
+    if (!can_send_timeout (T8TSTRID, T8TxMsg, 8, T8MESSAGETIMEOUT))
+        return FALSE;
+    // wait for the T8 to reply
+    // Read "Seed"
+    // if a message is not received id return false
+    if (!can_wait_timeout(T8ECU_ID, T8RxMsg, 8, T8MESSAGETIMEOUT))
+        return FALSE;
+    //* DEBUG info...
+    for (i = 0; i < 8; i++ ) printf("0x%02X ", T8RxMsg[i] );
+    printf("\r\n");
+    for (i = 5; i < 8; i++ ) printf("%c", T8RxMsg[i] );
+    printf("\r\n");
+    // Send Trionic8 a "Flow Control Message to get the rest of the VIN
+    if (!can_send_timeout (T8TSTRID, T8TxFlo, 8, T8MESSAGETIMEOUT))
+        return FALSE;
+    if (!can_wait_timeout(T8ECU_ID, T8RxMsg, 8, T8MESSAGETIMEOUT))
+        return FALSE;
+    //* DEBUG info...
+    for (i = 0; i < 8; i++ ) printf("0x%02X ", T8RxMsg[i] );
+    printf("\r\n");
+    for (i = 1; i < 8; i++ ) printf("%c", T8RxMsg[i] );
+    printf("\r\n");
+    if (!can_wait_timeout(T8ECU_ID, T8RxMsg, 8, T8MESSAGETIMEOUT))
+        return FALSE;
+    //* DEBUG info...
+    for (i = 0; i < 8; i++ ) printf("0x%02X ", T8RxMsg[i] );
+    printf("\r\n");
+    for (i = 1; i < 8; i++ ) printf("%c", T8RxMsg[i] );
+    printf("\r\n");
+    //*/
+    return TRUE;
+}
+
+bool t8_write_VIN()
+{
+
+    char SetVin10[] = {0x10,0x13,0x3B,0x90,0x59,0x53,0x33,0x46};
+    char SetVin21[] = {0x21,0x46,0x34,0x35,0x53,0x38,0x33,0x31};
+//  char SetVin22[] = {0x22,0x30,0x30,0x32,0x33,0x34,0x30,0xaa};  // Original
+    char SetVin22[] = {0x22,0x30,0x30,0x34,0x33,0x32,0x31,0x00};
+    char T8RxMsg[8];
+    char k = 0;
+
+//    GMLANTesterPresentT8();
+//    wait_ms(2000);
+//
+//    printf("Requesting Security Access\r\n");
+//    if (!t8_authenticate(0x01)) {
+//        printf("Unable to get Security Access\r\n");
+//        return FALSE;
+//    }
+//    printf("Security Access Granted\r\n");
+//
+//    GMLANTesterPresentT8();
+//    wait_ms(2000);
+//
+//    GMLANTesterPresentT8();
+//    wait_ms(2000);
+//
+    if (!can_send_timeout (T8TSTRID, SetVin10, 8, T8MESSAGETIMEOUT)) {
+        printf("Unable to write VIN\r\n");
+        return FALSE;
+    }
+    for (k = 0; k < 8; k++ ) printf("0x%02X ", SetVin10[k] );
+    printf("\r\n");
+    if (!can_wait_timeout(T8ECU_ID, T8RxMsg, 8, T8MESSAGETIMEOUT))
+        return FALSE;
+    for (k = 0; k < 8; k++ ) printf("0x%02X ", T8RxMsg[k] );
+    printf("\r\n");
+//    wait_ms(100);
+    if (!can_send_timeout (T8TSTRID, SetVin21, 8, T8MESSAGETIMEOUT)) {
+        printf("Unable to write VIN\r\n");
+        return FALSE;
+    }
+    for (k = 0; k < 8; k++ ) printf("0x%02X ", SetVin21[k] );
+    printf("\r\n");
+//    wait_ms(100);
+    if (!can_send_timeout (T8TSTRID, SetVin22, 8, T8MESSAGETIMEOUT)) {
+        printf("Unable to write VIN\r\n");
+        return FALSE;
+    }
+    for (k = 0; k < 8; k++ ) printf("0x%02X ", SetVin22[k] );
+    printf("\r\n");
+    if (!can_wait_timeout(T8ECU_ID, T8RxMsg, 8, T8MESSAGETIMEOUT))
+        return FALSE;
+    for (k = 0; k < 8; k++ ) printf("0x%02X ", T8RxMsg[k] );
+    printf("\r\n");
+    return TRUE;
+//    GMLANTesterPresentT8();
+//    wait_ms(2000);
+//
+}
+
+//
+// t8_authenticate
+//
+// sends an authentication message to the T7 ECU
+// but doesn't display anything.
+//
+// inputs:    none
+// return:    bool TRUE if there was a message, FALSE if no message.
+//
+
+bool t8_authenticate(char level)
+{
+    uint16_t seed, key;
+    if (!GMLANSecurityAccessRequest(level, seed)) {
+        printf("Unable to request SEED value for security access\r\n");
+        return FALSE;
+    }
+    if ( seed == 0x0000 ) {
+        printf("T8 ECU is already unlocked\r\n");
+        return TRUE;
+    }
+    key = (seed >> 5) | (seed << 11);
+    key += 0xB988;
+    if (level == 0xFD) {
+        key /= 3;
+        key ^= 0x8749;
+        key += 0x0ACF;
+        key ^= 0x81BF;
+    } else if (level == 0xFB) {
+        key ^= 0x8749;
+        key += 0x06D3;
+        key ^= 0xCFDF;
+    }
+    /* CIM KEY CALCULATION
+        uint16_t key = (seed + 0x9130);
+        key = (key >> 8) | (key << 8);
+        key -= 0x3FC7;
+    */
+    if (!GMLANSecurityAccessSendKey(level, key)) {
+        printf("Unable to send KEY value for security access\r\n");
+        return FALSE;
+    }
+    printf("Key Accepted\r\n");
+    return TRUE;
+}
+
+
+
+//
+// t8_dump
+//
+// dumps the T8 BIN File
+// but doesn't displays anything.
+//
+// inputs:    none
+// return:    bool TRUE if there was a message, FALSE if no message.
+//
+
+bool t8_dump()
+{
+    uint16_t i = 0, k = 0;
+    char T8TxMsg[8];
+    char T8RxMsg[8];
+
+    timer.reset();
+    timer.start();
+    printf("Creating FLASH dump file...\r\n");
+
+//
+    GMLANTesterPresentT8();
+//
+    if (!GMLANprogrammingSetupProcess())
+        return FALSE;
+//
+    wait_ms(500);
+    printf("Requesting Security Access\r\n");
+    if (!t8_authenticate(0x01)) {
+        printf("Unable to get Security Access\r\n");
+        return FALSE;
+    }
+    printf("Security Access Granted\r\n");
+    wait_ms(500);
+    GMLANTesterPresentT8();
+//
+    char BootLoader[] = T8Bootloader;
+    if(!GMLANprogrammingUtilityFileProcess(BootLoader))
+        return FALSE;
+//
+    uint32_t StartAddress = 0x0;
+    uint16_t txpnt = 0;
+    char iFrameNumber = 0x21;
+//
+    printf("Downloading FLASH BIN file...\r\n");
+    printf("Creating FLASH dump file...\r\n");
+    FILE *fp = fopen("/local/original.bin", "w");    // Open "original.bin" on the local file system for writing
+    if (!fp) {
+        perror ("The following error occured");
+        return TERM_ERR;
+    }
+    printf("  0.00 %% complete.\r");
+    TesterPresent.start();
+    while (StartAddress < 0x100000) {     // 0x100000
+        T8TxMsg[0] = 0x06;
+        T8TxMsg[1] = 0x21;
+        T8TxMsg[2] = 0x80;  // Blocksize
+        T8TxMsg[3] = (char) (StartAddress >> 24);
+        T8TxMsg[4] = (char) (StartAddress >> 16);
+        T8TxMsg[5] = (char) (StartAddress >> 8);
+        T8TxMsg[6] = (char) (StartAddress);
+        T8TxMsg[7] = 0xaa;
+#ifdef DEBUG
+        printf("block %#.3f\r\n",timer.read());
+#endif
+        if (!can_send_timeout (T8TSTRID, T8TxMsg, 7, T8MESSAGETIMEOUT)) {
+            printf("Unable to download FLASH\r\n");
+            return FALSE;
+        }
+        if (!can_wait_timeout(T8ECU_ID, T8RxMsg, 8, T8MESSAGETIMEOUT))
+            return FALSE;
+#ifdef DEBUG
+        printf("first %#.3f\r\n",timer.read());
+        for (k = 0; k < 8; k++ ) printf("0x%02X ", T8RxMsg[k] );
+        printf("\r\n");
+#endif
+        txpnt = 0;
+        for (k = 4; k < 8; k++ ) file_buffer[txpnt++] = T8RxMsg[k];
+
+        uint8_t DataFrames = 0x12;
+        iFrameNumber = 0x21;
+        char T8TxFlo[] = T8FLOCTL;
+#ifdef DEBUG
+        printf("flowCtrl %#.3f\r\n",timer.read());
+#endif
+        can_send_timeout (T8TSTRID, T8TxFlo, 8, T8MESSAGETIMEOUT);
+        for (i = 0; i < DataFrames; i++) {
+            if (!can_wait_timeout(T8ECU_ID, T8RxMsg, 8, T8MESSAGETIMEOUT))
+                return FALSE;
+#ifdef DEBUG
+            printf("Consec %#.3f\r\n",timer.read());
+            for (k = 0; k < 8; k++ ) printf("0x%02X ", T8RxMsg[k] );
+            printf("\r\n");
+#endif
+            iFrameNumber++;
+            for (k = 1; k < 8; k++ ) file_buffer[txpnt++] = T8RxMsg[k];
+        }
+        fwrite((file_buffer), 1, 0x80, fp);
+        if (ferror (fp)) {
+            fclose (fp);
+            printf ("Error writing to the FLASH BIN file.\r\n");
+            return TERM_ERR;
+        }
+        StartAddress +=0x80;
+        printf("%6.2f\r", (100.0*(float)StartAddress)/(float)(0x100000) );
+        if (TesterPresent.read_ms() > 2000) {
+            GMLANTesterPresentT8();
+            TesterPresent.reset();
+            ACTIVITYLEDON;
+        }
+    }
+
+    printf("%6.2f\r\n", (float)100 );
+    timer.stop();
+    printf("SUCCESS! Getting the FLASH dump took %#.1f seconds.\r\n",timer.read());
+    fclose(fp);
+    return TRUE;
+}
+
+bool t8_erase()
+{
+    printf("Erasing T8 ECU FLASH...\r\n");
+    printf("SUCCESS: The FLASH has been erased.\r\n");
+    return TRUE;
+}
+
+bool t8_flash_raw()
+{
+    timer.reset();
+    timer.start();
+    printf("Checking the FLASH BIN file...\r\n");
+    timer.stop();
+    printf("SUCCESS! Programming the FLASH took %#.1f seconds.\r\n",timer.read());
+    return TRUE;
+}
+
+
+bool t8_flash()
+{
+    uint16_t i = 0, j = 0, k = 0;
+
+    timer.reset();
+    timer.start();
+    printf("FLASHing T8 BIN file...\r\n");
+
+//
+    GMLANTesterPresentT8();
+//
+    if (!GMLANprogrammingSetupProcess())
+        return FALSE;
+//
+    wait_ms(500);
+    printf("Requesting Security Access\r\n");
+    if (!t8_authenticate(0x01)) {
+        printf("Unable to get Security Access\r\n");
+        return FALSE;
+    }
+    printf("Security Access Granted\r\n");
+    wait_ms(500);
+    GMLANTesterPresentT8();
+//
+    char BootLoader[] = T8BootloaderProg;
+    if(!GMLANprogrammingUtilityFileProcess(BootLoader))
+        return FALSE;
+//
+
+
+// All steps needed to transfer and start a bootloader ('Utility File' in GMLAN parlance)
+//    bool GMLANprogrammingUtilityFileProcess(char UtilityFile[]) {
+//        uint16_t i = 0, j = 0, k = 0;
+    uint32_t StartAddress = 0x020000;
+    uint16_t txpnt = 0;
+    char iFrameNumber = 0x21;
+    char GMLANMsg[8];
+    char data2Send[0xE0];
+//
+    // fopen modified.hex here, check it is OK and work out how much data I need to send
+    // need lots of fcloses though
+    printf("Checking the FLASH BIN file...\r\n");
+    FILE *fp = fopen("/local/modified.hex", "r");    // Open "modified.hex" on the local file system for reading
+    if (!fp) {
+        printf("Error: I could not find the BIN file MODIFIED.HEX\r\n");;
+        return TERM_ERR;
+    }
+    // obtain file size - it should match the size of the FLASH chips:
+    fseek (fp , 0 , SEEK_END);
+    uint32_t file_size = ftell (fp);
+    rewind (fp);
+
+    // read the initial stack pointer value in the BIN file - it should match the value expected for the type of ECU
+    uint32_t stack_long = 0;
+    if (!fread(&stack_long,4,1,fp)) return TERM_ERR;
+    stack_long = (stack_long >> 24) | ((stack_long << 8) & 0x00FF0000) | ((stack_long >> 8) & 0x0000FF00) |  (stack_long << 24);
+//
+    if (file_size != T8FLASHSIZE || stack_long != T8POINTER) {
+        fclose(fp);
+        printf("The BIN file does not appear to be for a T8 ECU :-(\r\n");
+        printf("BIN file size: %#010x, FLASH chip size: %#010x, Pointer: %#010x.\r\n", file_size, T7FLASHSIZE, stack_long);
+        return TERM_ERR;
+    }
+// It is possible to save some time by only sending the program code and CAL data
+// This is just a rough calculation, and slight overestimate of the number of blocks of data needed to send the BIN file
+    uint32_t blocks2Send;
+    fseek(fp,0x020140,SEEK_SET);
+    if (!fread(&blocks2Send,4,1,fp)) return TERM_ERR;
+    blocks2Send = (blocks2Send >> 24) | ((blocks2Send << 8) & 0x00FF0000) | ((blocks2Send >> 8) & 0x0000FF00) |  (blocks2Send << 24);
+    printf("Start address of BIN file's Footer area = 0x%06X\r\n", blocks2Send );
+    blocks2Send += 0x200;       // Add some bytes for the Footer itself and to account for division rounded down later
+    blocks2Send -= 0x020000;    // Remove 0x020000 because we don't send the bootblock and adaptation blocks
+    printf("Amount of data to send BIN file adjusted for footer = 0x%06X Bytes\r\n", blocks2Send );
+    blocks2Send /= 0xE0;
+    printf("Number of Blocks of 0xE0 Bytes needed to send BIN file = 0x%04X\r\n", blocks2Send );
+// Move BIN file pointer to start of data
+    fseek (fp , 0x020000 , SEEK_SET);
+// Erase the FLASH
+    printf("Waiting for FLASH to be Erased\r\n");
+    if (!GMLANRequestDownload(GMLANRequestDownloadModeEncrypted)) {
+        printf("Unable to erase the FLASH chip!\r\n");
+        return FALSE;
+    }
+// Now send the BIN file
+    TesterPresent.start();
+    printf("Sending FLASH BIN file\r\n");
+    printf("  0.00 %% complete.\r");
+    for (i=0; i<blocks2Send; i++) {
+        // get a block of 0xE0 bytes in an array called data2Send
+        for ( j = 0; j < 0xE0; j++ ) {
+            //data[k] = *(bin + bin_count++);
+            if (!fread(&data2Send[j],1,1,fp)) {
+                fclose(fp);
+                printf("Error reading the BIN file MODIFIED.HEX\r\n");
+                return FALSE;
+            }
+            // encrypt data2Send array by XORing with 6 different in a ring (modulo function)
+            switch ( ((0xE0*i)+j) %6) {
+                case 1:
+                    data2Send[j] ^= 0x68;
+                    break;
+                case 2:
+                    data2Send[j] ^= 0x77;
+                    break;
+                case 3:
+                    data2Send[j] ^= 0x6D;
+                    break;
+                case 4:
+                    data2Send[j] ^= 0x47;
+                    break;
+                default:        // remainder 0 and 5 both XOR with 0x39
+                    data2Send[j] ^= 0x39;
+            }
+        }
+        // Send the block of data
+        if (!GMLANDataTransferFirstFrame(0xE6, GMLANDOWNLOAD, StartAddress)) {
+            fclose(fp);
+            printf("Unable to start BIN File Upload\r\n");
+            return FALSE;
+        }
+        // Send 0x20 messages of 0x07 bytes each (0x20 * 0x07 = 0xE0)
+        txpnt = 0;
+        iFrameNumber = 0x21;
+        for (j=0; j < 0x20; j++) {
+            GMLANMsg[0] = iFrameNumber;
+            for (k=1; k<8; k++)
+                GMLANMsg[k] = data2Send[txpnt++];
+#ifdef DEBUG
+            for (k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+            printf("\r\n");
+#endif
+            if (!can_send_timeout(T8RequestId, GMLANMsg, 8, GMLANPTCT)) {
+                fclose(fp);
+                printf("Unable to send BIN File\r\n");
+                return FALSE;
+            }
+            ++iFrameNumber &= 0x2F;
+//            wait_ms(1);
+            wait_us(250);
+        }
+        if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCT)) {
+            fclose(fp);
+            printf("I did not receive a block acknowledge message\r\n");
+            return FALSE;
+        }
+        while (GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x36 && GMLANMsg[3] == 0x78) {
+            printf("I'm waiting for a Block to be programmed into FLASH\r\n");
+            if (!can_wait_timeout(T8ResponseId, GMLANMsg, 8, GMLANPTCTENHANCED)) {
+                printf("I did not receive a block acknowledge message after enhanced timeout\r\n");
+                fclose(fp);
+                return FALSE;
+            }
+        }
+#ifdef DEBUG
+        for (k = 0; k < 8; k++ ) printf("0x%02X ", GMLANMsg[k] );
+        printf("\r\n");
+#endif
+        if ( GMLANMsg[0] == 0x03 && GMLANMsg[1] == 0x7F && GMLANMsg[2] == 0x36 ) {
+            GMLANShowReturnCode(GMLANMsg[3]);
+            fclose(fp);
+            return FALSE;
+        }
+        if (GMLANMsg[0] != 0x01 && GMLANMsg[1] != 0x76) {
+            printf("EXITING due to an unexpected CAN message");
+            fclose(fp);
+            return FALSE;
+        }
+        if (TesterPresent.read_ms() > 2000) {
+            GMLANTesterPresentT8();
+            TesterPresent.reset();
+            ACTIVITYLEDON;
+        }
+        StartAddress += 0xE0;
+        printf("%6.2f\r", (100.0*(float)i)/(float)(blocks2Send) );
+    }
+// FLASHing complete
+    printf("%6.2f\r\n", (float)100 );
+// End programming session and return to normal mode
+    if (!GMLANReturnToNormalMode()) {
+        fclose(fp);
+        printf("UH-OH! T8 ECU did not Return To Normal Mode!!\r\n");
+        return FALSE;
+    }
+    wait_ms(1000);
+    timer.stop();
+    printf("SUCCESS! FLASHing the BIN file took %#.1f seconds.\r\n",timer.read());
+    fclose(fp);
+    return TRUE;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t8utils.h	Wed Sep 11 11:55:51 2013 +0000
@@ -0,0 +1,55 @@
+
+// t8utils.h - information and definitions needed for communicating with the T7 ECU
+
+// (C) 2011, 2012 Sophie Dexter
+
+#ifndef __T8UTILS_H__
+#define __T8UTILS_H__
+
+#include "mbed.h"
+
+#include "common.h"
+#include "canutils.h"
+
+#include "t8bootloaders.h"
+#include "gmlan.h"
+
+
+#define T8TSTRID 0x7E0
+#define T8ECU_ID 0x7E8
+#define T8ANYMSG 0x0
+
+// initialise T8
+
+//#define T8REQVIN    {0x02,0x09,0x02,0x00,0x00,0x00,0x00,0x00}
+// Request VIN using ReadDataByIdentifier method using DID
+#define T8REQVIN    {0x02,0x1A,0x90,0x00,0x00,0x00,0x00,0x00}
+
+
+// A "Flow Control" message. Send to let T8 it is OK to send the rest of the messages it has
+#define T8FLOCTL    {0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
+
+
+// read_trionic8
+
+
+// flash_trionic8
+
+
+#define T8MESSAGETIMEOUT 50             // 50 milliseconds (0.05 of a second) - Seems to be plenty of time to wait for messages on the CAN bus
+#define T8LONGERTIMEOUT 500             // 500 milliseconds (0.5 of a second) - Some messages seem to need longer
+#define T8CHECKSUMTIMEOUT 2000          // 2 seconds (2,000 milliseconds) - Usually takes less than a second so allowing 2 is plenty
+#define T8CONNECTTIMEOUT 5000           // 5 seconds (5,000 milliseconds) - Usually takes 3 seconds so allowing 5 is plenty
+#define T8ERASETIMEOUT 120000            // 120 seconds (120,000 milliseconds) - Usually takes less than 90 seconds so allowing 120 is plenty
+
+extern bool t8_initialise();
+extern bool t8_show_VIN();
+extern bool t8_write_VIN();
+extern bool t8_authenticate(char level);
+extern bool t8_dump();
+extern bool t8_flash();
+extern bool t8_flash_raw();
+extern bool t8_erase();
+
+
+#endif
\ No newline at end of file