Важная информация

User Tag List

Страница 12 из 53 ПерваяПервая ... 8910111213141516 ... ПоследняяПоследняя
Показано с 111 по 120 из 530

Тема: Планирую сделать FDD эмулятор на Atmega8

  1. #111
    Activist Аватар для Trol73
    Регистрация
    07.05.2015
    Адрес
    г. Ульяновск
    Сообщений
    350
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    50
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По поводу производительности AVR и SD - нужно для начала оценить, с какой скоростью требуется читать с карты.
    По поводу ардуины - никогда не мог понять, почему некоторые так любят использовать эту хрень и плодить макаронных монстров на её основе. Когда можно развести нормальную печатную плату и поиметь аккуратный девайс на одной плате без клубка МГТФа. При том, что по стоимости получится не дороже (или ненамного дороже) бабуины.
    По поводу дисплея - вчера соорудил для тестера микросхем такой дисплейный модуль (красная платка) - экран от nokia 5110 + 5 клавиш. Рулится по двум проводкам (UART). По стоимости получается почти как 1602 с i2c контроллером (ну или чуть дороже), а возможностей куда больше. Особенно для устройства, интерфейс которого требует навигации по файловой системе

  2. #112
    Master Аватар для s_kosorev
    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    adruino это удобно, хотя ни разу не юзал её среду, AvrStudio это то что реально делает AVR на голову выше ARM, платные среды с кряками не мой путь, CLion + gcc/calng + cmake + stm32 что то не получилось завести пока

  3. #113
    Junior
    Регистрация
    12.03.2016
    Адрес
    г. Нижний Новгород
    Сообщений
    28
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно сделать прототип на ардуине, и уже релиз на отдельной плате для красоты, если проект некоммерческий,
    то возможность воспроизвести его на коленке - хороший фактор, для жизнеспособности девайса.

  4. #114
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Arduino Mega это вариант, 8к SRAM достаточно, чтобы держать дорожку в памяти, конечно 16к было бы оптимальнее, но 8к это уже что-то не нужно др..чить карту каждые 12мс, а при переключении сторон отключать прерывания, не будет генерироваться INDEX и контроллер будет спокойно ждать его появления после обновления данных.

    Насчет MFM таблицы урезанной, ну, тут я подумал, зачем 512 байт в памяти держать, когда там всего один AND, не так уж много он циклов отнимает, особенно для регистра r19.

    Пока что буду оптимизировать ISR, потом скорее всего буду думать в сторону Arduino Mega.


    UPD:
    Сейчас пытаюсь добиться нормальной работы двух дорожек из флеша ардуины, переделал расчет CRC по таблице, заметно увеличилась производительность, даже почти нормально грузится BOOT из второй дорожки.
    Всё, дооптимизировал, что бут нормально загружается


    Вот пример, где грузится бут нормально.
    Код:
    // ZX-Spectrum FDD Emulator
    //
    //#include <petit_fatfs.h>
    
    #define SIDE_SEL  PC0   // SIDE SELECT                                  (INPUT)
    #define DRIVE_SEL PC1   // DRIVE SELECT CONNECT DS0-DS3 using jumper    (INPUT) /// not used yet
    #define MOTOR_ON  PC2   // MOTOR ON                                     (INPUT)
    
    #define WRT_GATE  PB0   // WRITE GATE                                   (INPUT) /// not used yet
    #define WRT_DATA  PB1   // WRITE DATA                                   (INPUT) /// not used yet
    
    #define READ_DATA PD1   // READ_DATA                                    (OUTPUT) /// defined in USART
    #define STEP      PD2   // STEP                                         (INPUT)
    #define DIR_SEL   PD3   // DIRECTION SELECT                             (INPUT)
    // PD4 UNABLE TO USE!!
    #define INDEX     PD5   // INDEX                                        (OUTPUT)
    #define TRK00     PD6   // TRACK 00                                     (OUTPUT)
    #define WP        PD7   // WRITE PROTECT                                (OUTPUT)
    
    
    uint8_t sector_header[64]; // sector header
    uint8_t track_header[146]; // track header
    uint8_t sector_data[256]; // sector data
    
    // STATE variable values
    // 0-1 - TRACK HEADER
    // 2-7 - SECTOR
    // 8 - TRACK FOOTER
    uint8_t state;
    uint8_t sector_byte;
    uint8_t prev_byte;
    uint8_t second_byte;
    uint8_t tmp;
    uint8_t b_index;
    uint16_t CRC;
    volatile uint8_t track;
    volatile uint8_t sector;
    volatile uint8_t side;
    volatile uint8_t data_sent;
    
    uint8_t MFM_tab[32] =
    {
      0xAA,0xA9,0xA4,0xA5,0x92,0x91,0x94,0x95,0x4A,0x49,0x44,0x45,0x52,0x51,0x54,0x55,
      0x2A,0x29,0x24,0x25,0x12,0x11,0x14,0x15,0x4A,0x49,0x44,0x45,0x52,0x51,0x54,0x55,
    };
    
    const uint16_t Crc16Table[256] = {
        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
        0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
        0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
        0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
        0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
        0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
        0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
        0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
        0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
        0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
        0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
        0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
        0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
        0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
        0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
        0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
        0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
        0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
        0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
        0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
        0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
        0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
        0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
        0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
        0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
        0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
        0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
        0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
        0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
        0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
        0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
        0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
    };
    
    
    // STEP pin interrupt
    ISR(INT0_vect)
    {  
      if ((PIND & (1 << DIR_SEL))==0) {
        track++;
        if (track > 79) track = 79; // !!!!!!!!!!!!!!!! use max track calculated on mounting TRD
      }
      else
      {
        if (track > 0) track--;
      }
      sector = 1;
    }
    
    ISR(USART_UDRE_vect)
    {
      if (!tmp) // it is ok, as MFM_tab doesn't have zero values
      { // Send first MFM byte
        // GET DATA BYTE (REAL DATA NOT MFM)
        switch (state)
        {
          case 0: // start track header -----------------------------------------
                // set index LOW
                PORTD &= ~_BV(INDEX);
                //set TRK00 LOW or HIGH
                if (track == 0) PORTD &= ~(1 << TRK00); else PORTD |= (1 << TRK00);
                sector_byte = 0x4E;
                b_index = 1;
                state = 1;            
                break;
                
          case 1: // send track header ------------------------------------------
                sector_byte = track_header[b_index];
                if(sector_byte == 0xC2) second_byte = 0x24;
                b_index++;
                if (b_index != 146) break;
                state = 2;
                b_index = 0;
                break;
            
          case 2: // ------------------------------------------------------------
                switch (b_index)
                {
                  case 0:
                    // set INDEX high
                    PORTD |= _BV(INDEX);
                    CRC = 0xB230;
                    break;          
    
                  case 1:
                    CRC = (CRC << 8) ^ Crc16Table[(CRC >> 8) ^ track];
                    break;
    
                  case 2:
                    CRC = (CRC << 8) ^ Crc16Table[(CRC >> 8) ^ side];
                    break;
    
                  case 3:
                    CRC = (CRC << 8) ^ Crc16Table[(CRC >> 8) ^ sector];
                    break;
    
                  case 4:
                    CRC = (CRC << 8) ^ Crc16Table[(CRC >> 8) ^ 1]; // sector size 1 = 256;
                    break;
                          
                  case 5:
                    sector_header[16] = track;
                    sector_header[17] = side;
                    break;
                                      
                  case 12:
                  case 13:
                  case 14:
                    second_byte = 0x89;
                    break;
    
                  case 15:
                    sector_header[18] = sector;
                    sector_header[20] = (byte)(CRC >> 8);
                    sector_header[21] = (byte)CRC;
                    /*if(sector == 1 && side == 0 && CRC != 0xFA0C) { 
                      cli();
                      while(1);
                    }*/
                    break;
    
                  case 56:
                  case 57:
                  case 58:
                    second_byte = 0x89;
                    break;
                }
                // send sector bytes before data
                sector_byte = sector_header[b_index++];   // pre-get new byte from buffer
                if (b_index != 60) break;
    
                b_index = 0;
                state = 3;
                // START GENERATING CRC HERE, PRE-CALC value for A1,A1,A1,FB = 0xE295        
                CRC = 0xE295; // next CRC value
                data_sent = 0;
                break;
            
          case 3: // ------------------------------------------------------------        
            // get sector data values
            sector_byte = sector_data[b_index++];   // pre-get new byte from buffer
            CRC = (CRC << 8) ^ Crc16Table[(CRC >> 8) ^ sector_byte];
            if (b_index != 0) break;
    
            state = 4;
            break;
            
          case 4:
            if(bit_is_set(PINC, SIDE_SEL)) side = 0; else side = 1;
            sector_byte = (byte)(CRC >> 8);
            state = 5;
            // b_index = 0; not needed
            break;
    
          case 5:
            if (sector <= 15)
            {
              sector++; // increase sector
              data_sent = 1;
            }
            sector_byte = (byte)CRC;
            state = 6;
            break;
          
          case 6:
            sector_byte = 0x4E;
            state = 7;
            break;
          
          case 7:
            b_index++;
    
            if (b_index != 56) break;
    
            if (data_sent)
            {
              state = 2;
              b_index = 0;
              break;
            }
            sector = 1;
            data_sent = 1;
    
            state = 8;
            b_index = 0;
            break;
    
          case 8:
            // send track footer        
            if (++b_index != 200) break;
            
            state = 0;
            b_index = 0;        
            break;
        }
        // PRE-FETCH END
    
        
        tmp = sector_byte;
        tmp >>= 4;
    
        tmp = MFM_tab[tmp]; // get first MFM byte from table
        
        if((prev_byte & 1) && !(sector_byte & 0x80)) tmp &= 0x7F;
        UDR0 = ~tmp;  // put byte to send buffer
    
      }
      else
      { // Send second MFM byte
        prev_byte = sector_byte;
    
        if (second_byte == 0)
        {
          tmp = sector_byte;
          tmp &= 0x1f;
          tmp = MFM_tab[tmp]; // get second MFM byte from table to "tmp"
        }
        else 
        {
          tmp = second_byte;
          second_byte = 0;
        }    
    
        UDR0 = ~tmp;  // put byte to send buffer
        
        tmp = 0; // this is important!
      }
    }
    
    void prepare_sector_header()
    {
      // Address field
      byte i;
      for(i=0; i <= 11; i++) sector_header[i] = 0x00; // 0x00(0)-0x0B(11) sync field
      for(i=12; i <= 14; i++) sector_header[i] = 0xA1; // 0x0C(12)-0x0E(14) 3x0xA1
      sector_header[15] = 0xFE;         // 0x0F(15) 0xFE
      // TRACK, SIDE, SECTOR
      sector_header[16] = 0x00;         // 0x10(16) track
      sector_header[17] = 0x00;         // 0x11(17) side
      sector_header[18] = 0x01;         // 0x12(18) sector
      sector_header[19] = 0x01;         // 0x13(19) sector len (256 bytes)
      sector_header[20] = 0xFA;         // 0x14(20) CRC1 for trk=0, side=0, sector=1
      sector_header[21] = 0x0C;         // 0x15(21) CRC2
    
      // GAP 2
      for(i=22; i <= 43; i++) sector_header[i] = 0x4E; // 0x16(22)-0x2B
    
      // DATA field
      for(i=44; i <= 55; i++) sector_header[i] = 0x00; // 0x2C(44)-0x37 sync field
      for(i=56; i <= 58; i++) sector_header[i] = 0xA1; // 0x38(56)-0x3A
      sector_header[59] = 0xFB;         // 0x3B(59)
    }
    
    void prepare_track_header()
    {
      // Address field
      byte i;
      for(i=0; i < 80; i++) track_header[i] = 0x4E;
      for(i=80; i < 92; i++) track_header[i] = 0x00;
      sector_header[92] = 0xC2;
      sector_header[93] = 0xC2;
      sector_header[94] = 0xC2;
      sector_header[95] = 0xFC;
      for(i=96; i < 146; i++) track_header[i] = 0x4E;
    }
    
    
    alignas(256) const byte track0[16][256] PROGMEM =
    {
    0x62,0x6F,0x6F,0x74,0x20,0x20,0x20,0x20,0x42,0x89,0x06,0x00,0x00,0x07,0x00,0x01,
    0x44,0x49,0x5A,0x5A,0x59,0x31,0x2E,0x52,0x42,0xD9,0x02,0x00,0x00,0xA0,0x07,0x01,
    0x44,0x49,0x5A,0x5A,0x59,0x32,0x2E,0x52,0x42,0xD1,0x01,0x00,0x00,0xAF,0x07,0x0B,
    0x44,0x49,0x5A,0x5A,0x59,0x33,0x2E,0x52,0x42,0xD9,0x02,0x00,0x00,0xCD,0x06,0x16,
    0x44,0x49,0x5A,0x5A,0x33,0x2E,0x35,0x52,0x42,0x90,0x00,0x90,0x00,0x9D,0x03,0x23,
    0x44,0x49,0x5A,0x5A,0x59,0x20,0x34,0x52,0x42,0xFA,0x00,0x0E,0x00,0x64,0x00,0x2D,
    0x44,0x49,0x5A,0x5A,0x59,0x20,0x34,0x52,0x43,0x00,0x00,0x00,0x00,0xC4,0x04,0x33,
    0x44,0x49,0x5A,0x5A,0x59,0x20,0x35,0x52,0x42,0x92,0x00,0x92,0x00,0xFF,0x08,0x3F,
    0x44,0x49,0x5A,0x5A,0x59,0x20,0x35,0x52,0x20,0x00,0x00,0x00,0x00,0xB1,0x07,0x4F,
    0x44,0x49,0x5A,0x5A,0x59,0x20,0x36,0x52,0x42,0x93,0x00,0x93,0x00,0xE5,0x08,0x5A,
    0x53,0x45,0x59,0x4D,0x4F,0x55,0x52,0x31,0x42,0xAB,0x00,0xAB,0x00,0x7B,0x0D,0x68,
    0x53,0x45,0x59,0x4D,0x4F,0x55,0x52,0x32,0x42,0xF2,0x00,0x10,0x00,0xBF,0x08,0x70,
    0x53,0x45,0x59,0x4D,0x4F,0x55,0x52,0x32,0x43,0x00,0x00,0x00,0x00,0xB8,0x07,0x7C,
    0x52,0x4F,0x42,0x4F,0x43,0x4F,0x50,0x33,0x42,0x5B,0x00,0x5B,0x00,0x7B,0x0F,0x87,
    0x72,0x6F,0x62,0x6F,0x63,0x6F,0x70,0x33,0x53,0x00,0x00,0x00,0x00,0xFF,0x0A,0x8F,
    0x00,0x41,0x57,0x53,0x2B,0x20,0x20,0x20,0x42,0xAD,0x00,0x9A,0x00,0x94,0x02,0x96,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x41,0x64,0x76,0x61,0x6E,0x63,0x65,0x64,0x20,0x44,0x69,0x73,0x6B,0x20,0x53,0x65,
    0x72,0x76,0x69,0x63,0x65,0x20,0x76,0x2E,0x20,0x31,0x2E,0x30,0x31,0x20,0x7F,0x20,
    0x31,0x39,0x39,0x33,0x20,0x56,0x6C,0x61,0x64,0x69,0x6D,0x69,0x72,0x20,0x56,0x61,
    0x73,0x69,0x6C,0x65,0x76,0x73,0x6B,0x69,0x6A,0x2E,0x4D,0x69,0x50,0x68,0x26,0x54,
    0x20,0x48,0x41,0x43,0x4B,0x45,0x52,0x20,0x43,0x4C,0x55,0x42,0x2E,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x09,0x9F,0x16,0x0F,0x07,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x67,0x61,0x6D,0x65,0x73,0x30,0x32,0x33,0x00,0x00,0x00,
    0x00,0x01,0xF6,0x02,0xF9,0xC0,0xB0,0x22,0x32,0x33,0x38,0x38,0x34,0x22,0x3A,0xEA,
    0x3A,0xAF,0xD3,0xFE,0x21,0x00,0x40,0xE5,0xD1,0x13,0x01,0xFF,0x1A,0x75,0xED,0xB0,
    0x21,0x68,0x5D,0x11,0x00,0xDE,0x01,0x00,0x03,0xD5,0xED,0xB0,0xC9,0xF3,0x3E,0x70,
    0x21,0x14,0xDE,0x06,0xA7,0xED,0x4F,0xED,0x5F,0xED,0x7E,0xEE,0x40,0xAE,0x77,0x23,
    0x10,0xC7,0x3D,0xA5,0x6C,0x7A,0x81,0x68,0x71,0x7A,0xEE,0x62,0x15,0x1E,0xCA,0x6F,
    0x39,0xAF,0x17,0xBA,0x2C,0xC8,0x18,0x5B,0x11,0x33,0xF5,0xA8,0xA0,0x98,0xDA,0x29,
    0x8E,0x76,0xBC,0x93,0x07,0xBE,0xD8,0x52,0xA8,0x20,0x88,0x75,0x5C,0x95,0x97,0x0A,
    0xF0,0xBE,0x8C,0xA0,0x82,0x20,0x88,0xEE,0x94,0x36,0xEA,0xD0,0x32,0x7C,0x01,0xF4,
    0x58,0xB8,0xBB,0x98,0x08,0xEC,0x21,0x54,0x19,0x51,0x34,0x0D,0x69,0xE4,0xC8,0xF0,
    0xD4,0xF1,0x64,0x54,0x63,0x5F,0x6E,0xC8,0x0A,0x0C,0x4F,0xA0,0x55,0x33,0x86,0xCB,
    0xB8,0xE0,0xF4,0xD0,0x99,0x10,0xF1,0xA5,0x48,0x5D,0x75,0x1C,0x6C,0x45,0xD0,0x66,
    0x04,0x3F,0x45,0x53,0x0B,0xDC,0x2E,0x38,0xAA,0x0F,0xD5,0x33,0x56,0x8C,0x8A,0xCB,
    0x59,0x47,0xB8,0x5C,0x20,0x1B,0x65,0x41,0xC4,0xB0,0x66,0x37,0xA4,0xBC,0xC3,0xC6,
    0x37,0x3E,0x64,0x5D,0x89,0x9C,0xAA,0xDB,0x39,0x37,0xA8,0x5C,0xC2,0x3E,0x45,0x11,
    0xA4,0x20,0xF0,0x02,0xE4,0x8C,0xE3,0x86,0x46,0x94,0x8B,0xD4,0x9F,0x50,0x67,0x04,
    0xB3,0x62,0xCB,0xE4,0xA3,0xC9,0x12,0x1B,0xA5,0x3A,0xD0,0x29,0x14,0x0B,0xD7,0x54,
    0x30,0x1A,0x06,0x9F,0x16,0xF8,0xBC,0x53,0x29,0xFD,0x9B,0x6F,0x3C,0x96,0x99,0xA0,
    0x3C,0xBD,0x43,0x69,0x5A,0x0A,0x72,0x36,0xA6,0x10,0x06,0x26,0xC3,0x5D,0x10,0x49,
    0xB3,0x27,0xDE,0xE8,0xE7,0xCE,0xC1,0x0D,0x08,0x0B,0x16,0x71,0x1C,0xCA,0x24,0x9A,
    0xF3,0xDD,0x76,0x6D,0xC1,0xF8,0xA1,0xA3,0xCB,0xAA,0x68,0x7B,0xCB,0x07,0x30,0xA3,
    0x07,0x72,0x44,0x2B,0x1E,0xD1,0x85,0x99,0x91,0x9D,0x0C,0xC5,0x26,0x36,0x9D,0x9A,
    0xCC,0x29,0xC2,0x03,0xDF,0x0F,0x0C,0x00,0x26,0x32,0x99,0x7A,0x95,0x43,0x10,0x5C,
    0xF6,0xAC,0x9D,0x53,0xE8,0xC8,0x04,0x27,0xAC,0x41,0x92,0xF8,0x8F,0x35,0x43,0x92,
    0x8F,0xB2,0x14,0xF5,0x2E,0xAB,0x8D,0x7A,0x62,0xEE,0x1D,0x28,0x76,0xB9,0x97,0x9E,
    0xE9,0xD3,0x24,0xAF,0xDB,0x6F,0xC4,0x9F,0xEE,0x11,0xDE,0xA6,0x56,0x97,0xDD,0x1C,
    0x84,0x94,0xA9,0x53,0xAD,0x0D,0xB9,0x57,0x31,0xAC,0xC1,0xD6,0xE0,0x25,0xFA,0xA2,
    0x6A,0xE7,0xA1,0x5F,0xA3,0xB1,0xC5,0x26,0x91,0xDE,0x72,0x4B,0x38,0x01,0x49,0x0B,
    0x26,0x16,0xE1,0x1E,0x77,0xEA,0x18,0x8E,0xAD,0x0F,0x15,0x74,0xC6,0x8F,0x61,0x01,
    0x66,0x62,0x6C,0x80,0x9F,0xAA,0x42,0xBD,0xB0,0x95,0x4C,0xB8,0x6C,0x5B,0x12,0xAD,
    0x89,0xF6,0x72,0x2E,0xC7,0x48,0x38,0x31,0xD3,0x7C,0x9A,0xD8,0x5C,0x92,0xBE,0x2B,
    0xA8,0x1B,0xF1,0x71,0xF4,0x16,0x3F,0x42,0xE3,0x1D,0x74,0xEE,0x93,0x5D,0xFE,0xA7,
    0x67,0xED,0x30,0x4C,0x0D,0x67,0xB5,0xA1,0xD3,0x44,0xCB,0xE6,0x63,0x14,0x6D,0x6B,
    0x75,0x67,0xD1,0x46,0x07,0x6B,0xC9,0x20,0x1A,0xB3,0xE1,0xC8,0x21,0x22,0x3C,0x67,
    0xD5,0x59,0x8E,0x31,0x4B,0xA6,0xA6,0x53,0xBD,0x3F,0x7A,0x6D,0xAF,0x1C,0x6D,0x9A,
    0xA9,0x69,0x4C,0x40,0x67,0x65,0x32,0x7D,0x7C,0x26,0x79,0x77,0x2D,0x62,0x61,0x38,
    0x34,0x69,0x36,0x50,0x6B,0x27,0x18,0x68,0x7C,0x1F,0x09,0x7E,0x29,0x96,0xAD,0x28,
    0x7B,0x79,0xB1,0xC0,0xA4,0xBA,0xBF,0x9F,0x4E,0x95,0x99,0x44,0x12,0x76,0x38,0x1D,
    0x8B,0x0A,0x46,0x04,0xE7,0xBA,0xE6,0x9E,0x0C,0x33,0x69,0x07,0xF4,0x13,0xDD,0xEB,
    0x98,0xF6,0x67,0x60,0x46,0xF6,0x69,0x98,0xD0,0x96,0x97,0x3B,0x63,0xA2,0x21,0x23,
    0x96,0x0D,0x1E,0xA0,0x45,0x67,0x58,0xFC,0x41,0x43,0xC9,0xBB,0x42,0x2F,0x30,0x94,
    0x51,0x3B,0xD1,0x71,0xE7,0x14,0x38,0xF9,0xD6,0x4C,0xBD,0xAE,0xEA,0x14,0x61,0x7E,
    0xB0,0xBE,0xD4,0xDD,0xCE,0xEF,0x57,0x9A,0x85,0x77,0x0A,0x7D,0xDA,0x04,0x52,0xB9,
    0xFE,0x8F,0x1F,0x48,0xCC,0xCF,0x42,0x34,0x6B,0x06,0x8C,0x4F,0xF9,0xA7,0x3B,0xC2,
    0x13,0x93,0x45,0x85,0x81,0x53,0xF3,0x55,0x0C,0x15,0x5D,0xD8,0xBC,0x28,0x55,0x39,
    0x34,0xD4,0x49,0xD4,0x3E,0xAE,0x35,0xEF,0xCE,0x9B,0x0D,0x33,0x8C,0xA2,0xB8,0xBE,
    0x4F,0x09,0x8F,0xBB,0xFD,0xD2,0x48,0x0B,0x15,0xE9,0xF1,0x09,0xF6,0xF7,0x35,0x6E,
    0xB5,0xAA,0x1E,0x43,0x6D,0xA1,0xA9,0x1F,0xA6,0x75,0x32,0xB8,0xD5,0x54,0xF9,0xCB,
    0xC0,0xE4,0x32,0x54,0xB5,0x70,0xE8,0xA5,0xEC,0x0D,0x80,0xAA,0x01,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0x3F,0x4C,0x5B,0xCA,0x7E,0x09,0x03,
    0xFF,0x3C,0x4C,0x5B,0xC5,0x7E,0x03,0x6E,0xF7,0x3F,0x4C,0x5B,0xA7,0x7F,0x1E,0x49,
    0xBE,0x3D,0xDC,0x5B,0xF7,0x7A,0x2B,0x54,0xD4,0x3D,0x42,0x5B,0x0E,0x79,0x25,0x3F,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBC,0x3D,0xDE,0x5B,0x95,0x71,0x37,0x28,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBD,0x3D,0xDF,0x5B,0x8F,0x71,0x52,0x41,
    0x85,0x3D,0xE7,0x5B,0x11,0x74,0x60,0x2C,0xDC,0x3D,0x5C,0x5B,0xD5,0x71,0x78,0x37,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x3D,0x26,0x5B,0x1E,0x76,0x8F,0x20,
    0x03,0x3F,0x61,0x59,0x32,0x7A,0x87,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };
    
    alignas(256) const byte track1[16][256] PROGMEM =
    {
    0x00,0x01,0x1D,0x00,0xD4,0xC0,0x2E,0x0E,0x00,0x00,0xF4,0x5E,0x00,0xF3,0x21,0x00,
    0x3D,0x11,0x00,0x91,0x06,0x60,0xC5,0x01,0x04,0x00,0xED,0xB0,0x06,0x04,0x7E,0xCB,
    0x27,0xB6,0x12,0x23,0x13,0x10,0xF7,0xC1,0x10,0xEC,0xC9,0x16,0x00,0x0E,0x4E,0x41,
    0x4D,0x45,0x53,0x3A,0x3E,0xBF,0x90,0x47,0xA7,0x1F,0x37,0x1F,0xA7,0x1F,0xA8,0xE6,
    0xF8,0xA8,0x67,0x79,0x07,0x07,0x07,0xA8,0xE6,0xC7,0xA8,0x07,0x07,0x6F,0x79,0xF6,
    0xF8,0x2F,0xC9,0xC9,0xCD,0x6F,0x5D,0xCB,0x07,0xCB,0x07,0xCB,0x07,0x06,0xC6,0x80,
    0x32,0x9F,0x5D,0xCB,0x00,0xC9,0xCD,0x6F,0x5D,0xCB,0x07,0xCB,0x07,0xCB,0x07,0x06,
    0x86,0x80,0x32,0xB1,0x5D,0xCB,0x00,0xC9,0x3E,0x00,0x32,0xF0,0x5E,0xCD,0xC2,0x5D,
    0xCD,0xD2,0x5D,0xCD,0x27,0x63,0xC9,0x00,0xC5,0x01,0x1F,0x00,0xED,0x78,0x21,0xF0,
    0x5E,0xB6,0x32,0xF0,0x5E,0xC1,0xC9,0xC5,0x01,0xFE,0xDF,0xED,0x78,0xE6,0x03,0xF5,
    0x01,0xFE,0xFB,0xED,0x78,0xE6,0x01,0xCB,0x07,0xCB,0x07,0xCB,0x07,0x57,0xF1,0xB2,
    0xF5,0x01,0xFE,0xFD,0xED,0x78,0xE6,0x01,0xCB,0x07,0xCB,0x07,0x57,0xF1,0xB2,0xF5,
    0x01,0xFE,0x7F,0xED,0x78,0xE6,0x04,0xCB,0x07,0xCB,0x07,0x57,0xF1,0xB2,0xC1,0x2F,
    0xE6,0x1F,0x21,0xF0,0x5E,0xB6,0x32,0xF0,0x5E,0xC9,0x00,0x00,0x00,0x00,0x00,0x0D,
    0x00,0x01,0x00,0x00,0x0D,0x00,0x01,0x01,0x00,0x00,0x0D,0x00,0x01,0x01,0x01,0x00,
    0x00,0x0D,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x0D,0x00,0x01,0x01,0x01,0x01,0x01,
    0x00,0x00,0x0D,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x0D,0x00,0x01,0x01,
    0x01,0x01,0x01,0x01,0x01,0x00,0x0D,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,
    0x0D,0x00,0x01,0x01,0x00,0x01,0x00,0x00,0x0D,0x00,0x01,0x00,0x00,0x01,0x01,0x00,
    0x0D,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x0D,0x09,0x09,0x09,0x09,0x00,0x01,
    0x01,0x00,0x0D,0x09,0x09,0x09,0x09,0x00,0x00,0x01,0x00,0x0D,0x09,0x09,0x09,0x09,
    0x09,0x00,0x01,0x00,0x0D,0x09,0x09,0x09,0x09,0x09,0x00,0x00,0x00,0x0D,0xFF,0x21,
    0x17,0x5E,0xED,0x4B,0xF1,0x5E,0xED,0x43,0xF3,0x5E,0x7E,0xFE,0xFF,0xC8,0xFE,0x0D,
    0x20,0x10,0x3A,0xF1,0x5E,0x32,0xF3,0x5E,0xDD,0x21,0xF3,0x5E,0xDD,0x35,0x01,0x23,
    0x18,0xE8,0xFE,0x09,0x20,0x09,0xE5,0x21,0xF3,0x5E,0x34,0xE1,0x23,0x18,0xDB,0xFE,
    0x01,0x20,0x11,0xE5,0xED,0x4B,0xF3,0x5E,0x03,0xED,0x43,0xF3,0x5E,0xCD,0x8F,0x5D,
    0xE1,0x23,0x18,0xC6,0xE5,0xED,0x4B,0xF3,0x5E,0x03,0xED,0x43,0xF3,0x5E,0xCD,0xA1,
    0x5D,0xE1,0x23,0x18,0xB5,0x00,0x00,0x00,0x00,0xCD,0x48,0x5D,0xED,0x73,0xF5,0x5E,
    0x01,0xF4,0x01,0xC5,0x3E,0x00,0x01,0x1F,0x00,0xED,0x78,0xB7,0x28,0x05,0x3E,0xC9,
    0x32,0xC2,0x5D,0xC1,0x0B,0xAF,0xB0,0xB1,0x20,0xE9,0x00,0x00,0x21,0x00,0x90,0x22,
    0x36,0x5C,0xFD,0x21,0x3A,0x5C,0xED,0x7B,0xF5,0x5E,0x3E,0x06,0x32,0x12,0x5C,0x3E,
    0x02,0xCD,0x01,0x16,0x3E,0xFF,0xFD,0x77,0x00,0x3E,0x2B,0x32,0x48,0x5C,0x32,0x8D,
    0x5C,0xCD,0x6B,0x0D,0x3E,0x05,0xD3,0xFE,0x2A,0x3D,0x5C,0x01,0x15,0x5F,0x71,0x23,
    0x70,0x21,0x40,0x9C,0x11,0x00,0x00,0x06,0x08,0x0E,0x05,0xCD,0x13,0x3D,0x3E,0xFF,
    0x32,0x15,0x5E,0x32,0x16,0x5E,0xF3,0xDD,0x21,0x40,0x9C,0xFD,0x21,0xC8,0xAF,0xDD,
    0x7E,0x00,0xFE,0x00,0xCA,0xEB,0x5F,0xFE,0x01,0xCA,0x87,0x5F,0xDD,0x7E,0x08,0xFE,
    0x42,0xCA,0x94,0x5F,0xDD,0x7E,0x0D,0xFE,0xC0,0xCA,0xCF,0x5F,0xDD,0xE5,0xE1,0x11,
    0x10,0x00,0x19,0xE5,0xDD,0xE1,0xC3,0x6A,0x5F,0xDD,0x7E,0x00,0xFE,0x62,0x20,0x34,
    0xDD,0x7E,0x01,0xFE,0x6F,0x20,0x2D,0xDD,0x7E,0x02,0xFE,0x6F,0x20,0x26,0xDD,0x7E,
    0x03,0xFE,0x74,0x20,0x1F,0xDD,0x7E,0x04,0xFE,0x20,0x20,0x18,0xDD,0x7E,0x05,0xFE,
    0x20,0x20,0x11,0xC3,0x87,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0xFD,0xE5,0xD1,0xDD,0xE5,0xE1,0x01,0x09,0x00,0xED,0xB0,0x21,
    0x15,0x5E,0x34,0xFD,0xE5,0xE1,0x11,0x09,0x00,0x19,0xE5,0xFD,0xE1,0xC3,0x87,0x5F,
    0xFD,0x21,0x3A,0x5C,0x3A,0x15,0x5E,0xFE,0xFF,0xCA,0x34,0x62,0xFE,0x14,0xD2,0x48,
    0x62,0x06,0xB4,0x0E,0xA7,0xED,0x43,0xF1,0x5E,0x06,0x00,0x0E,0x0C,0x2E,0x09,0x3A,
    0x15,0x5E,0x67,0x24,0x24,0x24,0x3E,0x70,0x32,0xC0,0x61,0xCD,0xC3,0x61,0x06,0x00,
    0x0E,0x0C,0x21,0x09,0x00,0x3E,0x46,0x32,0xC0,0x61,0xCD,0xC3,0x61,0x3E,0x47,0x32,
    0xC0,0x61,0x3A,0x15,0x5E,0xC6,0x04,0x47,0x0E,0x0D,0x21,0x09,0x00,0x3A,0xC0,0x61,
    0xCD,0xC3,0x61,0x0E,0x16,0x3A,0x15,0x5E,0xC6,0x02,0x67,0x2E,0x00,0x06,0x01,0x3A,
    0xC0,0x61,0xCD,0xC3,0x61,0x3E,0x46,0x32,0x8D,0x5C,0x3E,0x02,0xCD,0x01,0x16,0x11,
    0x66,0x5D,0x01,0x09,0x00,0xCD,0x3C,0x20,0x3E,0x70,0x32,0x8D,0x5C,0x3E,0x02,0xCD,
    0x01,0x16,0x3A,0x15,0x5E,0xDD,0x21,0xC8,0xAF,0x26,0x01,0x3C,0x47,0xC5,0x24,0x7C,
    0x32,0x83,0x60,0xE5,0x3E,0x16,0xD7,0x3E,0x03,0xD7,0x3E,0x0D,0xD7,0xDD,0xE5,0xD1,
    0x01,0x08,0x00,0xCD,0x3C,0x20,0xDD,0xE5,0xE1,0x11,0x09,0x00,0x19,0xE5,0xDD,0xE1,
    0xE1,0xC1,0x10,0xD9,0xCD,0xAF,0x63,0x11,0x00,0xC0,0x01,0x00,0x18,0xED,0xB0,0xCD,
    0xB3,0x5D,0x3A,0xF0,0x5E,0xDD,0x21,0xF1,0x5E,0xCB,0x47,0x28,0x03,0xDD,0x34,0x00,
    0xCB,0x4F,0x28,0x03,0xDD,0x35,0x00,0xCB,0x57,0x28,0x03,0xDD,0x35,0x01,0xCB,0x5F,
    0x28,0x03,0xDD,0x34,0x01,0xCB,0x67,0x28,0x0B,0x3A,0x16,0x5E,0xFE,0xFF,0x28,0x04,
    0xFB,0xC3,0x8C,0x62,0xED,0x4B,0xF1,0x5E,0x3E,0x10,0xB8,0x38,0x02,0x06,0x10,0xB9,
    0x38,0x02,0x0E,0x10,0x3E,0xBD,0xB8,0x30,0x02,0x06,0xBD,0x3E,0xEF,0xB9,0x30,0x02,
    0x0E,0xEF,0xED,0x43,0xF1,0x5E,0xCD,0x9A,0x5E,0x3A,0xF0,0x5E,0xFE,0x00,0xCA,0xB2,
    0x61,0x06,0x11,0xC5,0xED,0x4B,0xF1,0x5E,0xD1,0xD5,0x04,0x78,0x92,0x3C,0x47,0xCD,
    0x6F,0x5D,0x3E,0x80,0x84,0x57,0x5D,0x1A,0xB6,0x77,0x23,0x13,0x1A,0xB6,0x77,0x23,
    0x13,0x1A,0xB6,0x77,0xC1,0x10,0xDC,0x3A,0xF2,0x5E,0x47,0x3E,0xBF,0x90,0xE6,0xF8,
    0xCB,0x0F,0xCB,0x0F,0xCB,0x0F,0xFE,0x02,0x38,0x4F,0x47,0x3A,0x15,0x5E,0xC6,0x02,
    0xB8,0x38,0x46,0x3A,0xF1,0x5E,0xFE,0x60,0x38,0x3F,0xFE,0xB0,0x30,0x3B,0x3A,0xF2,
    0x5E,0x47,0x3E,0xBF,0x90,0xE6,0xF8,0x0F,0x0F,0x0F,0x21,0x16,0x5E,0xBE,0x28,0x47,
    0x32,0x16,0x5E,0x06,0x02,0x0E,0x0C,0x2E,0x09,0x3A,0x15,0x5E,0x67,0x24,0x3E,0x70,
    0x32,0xC0,0x61,0xCD,0xC3,0x61,0x3A,0x16,0x5E,0x47,0x0E,0x0C,0x21,0x09,0x00,0x3E,
    0x46,0x32,0xC0,0x61,0xCD,0xC3,0x61,0x18,0x1E,0x3A,0x16,0x5E,0xFE,0xFF,0x28,0x17,
    0x3E,0xFF,0x32,0x16,0x5E,0x06,0x02,0x0E,0x0C,0x2E,0x09,0x3A,0x15,0x5E,0x67,0x3E,
    0x70,0x32,0xC0,0x61,0xCD,0xC3,0x61,0xCD,0x54,0x1F,0xDA,0xAA,0x60,0xCD,0x54,0x1F,
    0x30,0xFB,0xC3,0x15,0x5F,0x00,0x00,0x00,0x32,0xC0,0x61,0xED,0x43,0xC1,0x61,0x05,
    0x0D,0x24,0x2C,0x09,0x04,0x0C,0xCD,0xE2,0x61,0x79,0xBD,0x38,0xF8,0x3A,0xC1,0x61,
    0x4F,0x0D,0x78,0xBC,0x38,0xEE,0xC9,0xE5,0xC5,0x16,0x00,0x58,0x06,0x05,0x3F,0xCB,
    0x23,0xCB,0x12,0x10,0xF9,0xC1,0xC5,0xD5,0xE1,0x16,0x00,0x59,0x19,0x11,0x00,0x58,
    0x19,0x3A,0xC0,0x61,0x77,0xC1,0xE1,0xC9,0xCD,0xBC,0x63,0x01,0x06,0x0C,0x21,0x11,
    0x02,0x3E,0x57,0x32,0x8D,0x5C,0x32,0xC0,0x61,0xCD,0xC3,0x61,0x06,0x0F,0x0E,0x07,
    0x21,0x11,0x00,0x3E,0x00,0x32,0xC0,0x61,0xCD,0xC3,0x61,0x06,0x0D,0x0E,0x18,0x2E,
    0x00,0x26,0x02,0x3E,0x00,0xCD,0xC3,0x61,0xC9,0xCD,0x03,0x62,0x3E,0x02,0xCD,0x01,
    0x16,0x11,0x63,0x62,0x01,0x14,0x00,0xCD,0x3C,0x20,0xC3,0x59,0x62,0xCD,0x03,0x62,
    0x3E,0x02,0xCD,0x01,0x16,0x11,0x78,0x62,0x01,0x14,0x00,0xCD,0x3C,0x20,0xCD,0x8E,
    0x02,0xCB,0x7B,0x20,0xF9,0xC3,0x15,0x5F,0x16,0x0D,0x07,0x20,0x20,0x4E,0x4F,0x20,
    0x45,0x58,0x45,0x2D,0x46,0x49,0x4C,0x45,0x20,0x21,0x20,0x20,0x20,0x16,0x0D,0x07,
    0x4E,0x4F,0x20,0x4D,0x4F,0x52,0x45,0x20,0x54,0x48,0x41,0x4E,0x20,0x32,0x30,0x21,
    0x20,0x2A,0x3D,0x5C,0x01,0x15,0x5F,0x71,0x23,0x70,0x3E,0x00,0x32,0x36,0x5C,0x3E,
    0x3C,0x32,0x37,0x5C,0x3E,0x00,0x32,0x48,0x5C,0x32,0x8D,0x5C,0x3E,0x02,0xCD,0x01,
    0x16,0xCD,0x6B,0x0D,0x3E,0x00,0xD3,0xFE,0x31,0xFF,0xFF,0x21,0xC8,0xAF,0x3A,0x16,
    0x5E,0x3D,0x3D,0xCB,0x07,0xCB,0x07,0xCB,0x07,0x47,0x3A,0x16,0x5E,0x3D,0x3D,0x80,
    0x5F,0x16,0x00,0x19,0xE5,0xDD,0xE1,0xED,0x7B,0xF5,0x5E,0xDD,0x7E,0x08,0xFE,0x43,
    0x28,0x14,0x11,0x0D,0x63,0x01,0x08,0x00,0xED,0xB0,0x21,0x08,0x63,0x22,0x5D,0x5C,
    0xCD,0x03,0x3D,0xC3,0x15,0x5F,0x11,0x1C,0x63,0x01,0x08,0x00,0xED,0xB0,0xCD,0xBF,
    0x16,0x21,0x17,0x63,0x22,0x5D,0x5C,0xCD,0x03,0x3D,0xC3,0x15,0x5F,0x3A,0xEA,0x3A,
    0xF7,0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x0D,0x3A,0xEA,0x3A,0xEC,
    0x22,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0xAF,0x0D,0x01,0xFE,0xEF,0x16,
    0x00,0xED,0x78,0xCB,0x47,0x20,0x02,0xCB,0xE2,0xCB,0x4F,0x20,0x02,0xCB,0xDA,0xCB,
    0x57,0x20,0x02,0xCB,0xD2,0xCB,0x5F,0x20,0x02,0xCB,0xC2,0xCB,0x67,0x20,0x02,0xCB,
    0xCA,0x3A,0xF0,0x5E,0xB2,0x32,0xF0,0x5E,0xC9,0x01,0xD0,0x07,0x21,0x00,0x00,0x7E,
    0xE6,0xF8,0xF6,0x01,0xD3,0xFE,0x23,0x0B,0xAF,0xB0,0xB1,0x20,0xF2,0xC9,0xCA,0x3A,
    0x1D,0x5F,0xB2,0x32,0x1D,0x5F,0xC9,0x01,0xD0,0x07,0x21,0x00,0x00,0x7E,0xE6,0xF8,
    0xF6,0x01,0xD3,0xFE,0x23,0x0B,0xAF,0xB0,0xB1,0x20,0xF2,0xC9,0x16,0x15,0x01,0x10,
    0x02,0x11,0x05,0x13,0x00,0x20,0x50,0x55,0x42,0x4C,0x49,0x53,0x48,0x45,0x44,0x20,
    0x42,0x59,0x20,0x53,0x4F,0x46,0x54,0x53,0x54,0x41,0x52,0x20,0x4F,0x46,0x20,0x4D,
    0x4B,0x48,0x47,0x20,0x11,0x87,0x63,0x01,0x28,0x00,0xCD,0x3C,0x20,0x21,0x00,0x40,
    0xC9,0xCD,0x54,0x63,0x3E,0x05,0xD3,0xFE,0xC9,0x80,0xAA,0x01,0x00,0x00,0x00,0x00,
    0x43,0x4F,0x52,0x52,0x45,0x43,0x54,0x45,0x44,0x20,0x42,0x59,0x20,0x4B,0x53,0x41,
    0x20,0x53,0x4F,0x46,0x54,0x57,0x41,0x52,0x45,0x2C,0x53,0x50,0x45,0x43,0x49,0x41,
    0x4C,0x20,0x46,0x4F,0x52,0x20,0x41,0x4E,0x44,0x52,0x45,0x57,0x20,0x49,0x53,0x41,
    0x45,0x56,0x20,0x20,0x31,0x39,0x39,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x01,0x82,0x00,0xF9,0xC0,0x30,0x0E,0x00,0x00,0x72,0x5D,0x00,0x16,0x00,0x00,
    0x13,0x01,0x11,0x05,0x10,0x00,0x20,0x2A,0x20,0x50,0x52,0x4F,0x54,0x45,0x43,0x54,
    0x49,0x4F,0x4E,0x20,0x42,0x59,0x20,0x4B,0x53,0x41,0x20,0x53,0x4F,0x46,0x54,0x57,
    0x41,0x52,0x45,0x20,0x2A,0x20,0x13,0xF3,0x31,0x00,0x40,0xAF,0xD3,0xFE,0x21,0x00,
    0x40,0x11,0x01,0x40,0x01,0xFF,0x1A,0x75,0xED,0xB0,0x21,0x90,0x5D,0x06,0xA1,0x7E,
    0xAD,0x77,0x23,0x10,0xFA,0xA1,0x95,0xD2,0xB2,0x0B,0xC8,0x87,0x93,0xD8,0x98,0xBA,
    0x9B,0x71,0x2D,0x57,0x5F,0xFD,0xD5,0xBA,0x92,0x79,0xF8,0x6A,0xFA,0x6E,0xF4,0xF7,
    0x7E,0xF1,0x4A,0xF3,0x1A,0xED,0x0D,0xEF,0x40,0xE9,0x84,0x07,0xEA,0x46,0xCD,0x15,
    0x72,0x13,0x6E,0x40,0x76,0xFA,0xB4,0x9F,0x02,0xF7,0x0C,0xFD,0xF9,0x82,0x37,0xB2,
    0x02,0xF6,0xAF,0x93,0x61,0xF3,0x7F,0xF1,0x7D,0x1D,0xF4,0xD4,0x89,0xE6,0xDC,0x09,
    0x25,0x15,0xFC,0x2D,0x82,0x4E,0xC2,0x4C,0xC0,0x4A,0xC6,0x2F,0xD9,0xC0,0xDE,0xFD,
    0x45,0xCF,0x43,0xCD,0x41,0xD3,0x5F,0x3B,0xD2,0xDB,0xAB,0xE7,0x12,0xF9,0xF8,0x1F,
    0xFA,0x82,0x51,0x56,0x56,0xAA,0xAA,0xAF,0xED,0x05,0xEB,0xF8,0xE9,0x4A,0xE7,0x22,
    0x7C,0x2F,0x1E,0x05,0x77,0xA1,0x31,0xFB,0x32,0x3B,0x4B,0x07,0x17,0xE8,0x18,0xFF,
    0x1A,0xF1,0xAD,0x2F,0x08,0x7E,0x00,0x34,0x7D,0x35,0x30,0x78,0x26,0x8D,0x29,0x1C,
    0x2B,0xC1,0x95,0xE7,0x38,0xF8,0xEE,0xB3,0xD1,0xC7,0x3A,0xDE,0xA1,0x9C,0xC7,0xDB,
    0xDA,0x08,0x11,0x14,0xE7,0xA9,0xAE,0xA3,0xA0,0xA5,0xBA,0xBF,0xBC,0xB1,0xB6,0x48,
    0x4B,0x4E,0x41,0x44,0x47,0x5A,0x5D,0x50,0x53,0x56,0x29,0x2C,0x2F,0x22,0x25,0x38,
    0x3B,0x3E,0x31,0x34,0x37,0x0A,0xE0,0x57,0xF2,0xD7,0xF4,0x43,0x78,0xFF,0x42,0xDB,
    0x0A,0x2E,0x21,0xC1,0xF6,0x3B,0x3D,0x6B,0xF2,0x27,0xEC,0x51,0xDA,0xEF,0x4A,0xFD,
    0xCA,0x05,0x0A,0x0F,0x11,0xEA,0x00,0x50,0x2A,0xC7,0xF9,0xFC,0xEE,0xF3,0xF5,0x89,
    0x8B,0xD5,0x44,0x41,0x42,0xA9,0xAE,0x7D,0x23,0xB7,0x96,0x93,0x4C,0xA4,0x64,0x5A,
    0xEB,0x23,0x53,0xEA,0x2A,0x70,0xC7,0x1E,0xBD,0x85,0x99,0x7D,0x8F,0x0F,0xB0,0x56,
    0x6A,0x50,0x63,0x5A,0x64,0x44,0x79,0x4E,0x76,0x48,0x4F,0x72,0x48,0x7C,0x4D,0x66,
    0x52,0xA0,0x58,0x96,0x57,0x2A,0xEE,0xE5,0x10,0x04,0x39,0x3C,0x1D,0x30,0x35,0x35,
    0xB7,0x33,0xBC,0xD5,0xE2,0x84,0x00,0xB2,0x0E,0xBD,0x74,0x49,0x4E,0x4B,0x8F,0xB8,
    0xBB,0x8F,0x1B,0x1E,0x8C,0xB1,0xBE,0x61,0x62,0x5F,0x40,0x45,0xBE,0x0C,0xC8,0x96,
    0x0B,0x08,0x93,0x3B,0xFA,0x5B,0x64,0xA1,0xDD,0xB6,0x5C,0x9D,0xE1,0x82,0x50,0x89,
    0x0B,0xC3,0x44,0x5D,0xD3,0x22,0x3F,0x2A,0x42,0x2B,0x37,0x3C,0x3A,0x36,0x26,0x29,
    0x48,0x56,0x20,0x4E,0x55,0x5A,0x3C,0x62,0x7D,0x71,0x9D,0xCB,0xD6,0xD6,0xF4,0x96,
    0xFB,0x13,0xBE,0x19,0xA4,0x34,0x32,0x15,0xF0,0xD7,0x54,0x82,0x32,0x81,0x2B,0x17,
    0xD8,0xFF,0x8F,0xE4,0x32,0xEC,0x02,0xE6,0x0C,0x2F,0xDF,0x33,0xD9,0x3D,0x04,0x01,
    0xC3,0xD9,0xC9,0xD1,0xCF,0xA9,0x6E,0xF0,0xFD,0x7B,0x98,0xCB,0xE1,0x59,0x5E,0xA2,
    0x97,0x62,0x9D,0x66,0x9F,0x8A,0x67,0x6A,0xB3,0xB2,0xF5,0xC8,0xCB,0xFE,0xC1,0x13,
    0xC4,0xC0,0xE9,0x14,0x66,0x55,0x2E,0x51,0x5C,0x34,0x2B,0x26,0x2D,0x20,0x2F,0xF0,
    0xC7,0x70,0xF9,0x23,0x22,0x2B,0xC2,0xE8,0x9C,0x40,0x7F,0x12,0x11,0xEE,0xA4,0xF9,
    0x21,0x24,0xF8,0xD6,0xBC,0x41,0x72,0xD1,0xF7,0x92,0xE4,0xAC,0x1B,0x8B,0xFC,0xB9,
    0x52,0x9D,0x29,0xA8,0x4E,0xCC,0xEA,0xF1,0xBF,0x97,0x14,0x79,0x41,0xB7,0x72,0xEC,
    0x53,0xBB,0x7E,0x79,0xC0,0x2C,0x30,0x41,0xAA,0x11,0x88,0x75,0xFE,0xE7,0x21,0x21,
    0xAC,0x18,0x2D,0xD5,0x8E,0x1B,0x70,0x48,0x4E,0x1F,0x30,0x21,0x86,0x21,0xFD,0x64,
    0xE2,0x45,0x70,0x45,0x13,0x82,0x40,0x25,0x32,0xE3,0x5E,0x98,0x07,0x87,0x2A,0xD5,
    0x0C,0x45,0xCE,0x44,0x0E,0xD1,0xCC,0x53,0x87,0x3E,0xD5,0xBC,0x8B,0x9A,0xE9,0xD8,
    0xCF,0xB6,0xAD,0x84,0xF3,0xD2,0xE1,0x80,0x97,0xAE,0xA5,0xCC,0xFB,0xEA,0x99,0x88,
    0x9F,0xE6,0xFD,0xD4,0xA6,0xBB,0xBC,0xB1,0xB2,0xB7,0x88,0x8D,0x8E,0x83,0xA4,0xB9,
    0xBA,0xBF,0xB0,0xB5,0xB6,0x74,0x73,0x7E,0x7D,0x78,0x67,0x62,0x61,0x6C,0x6B,0x16,
    0x15,0x10,0x1F,0x1A,0x19,0x04,0x03,0x0E,0x20,0x80,0xAA,0x01,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0xF3,0xCD,0x52,0x00,0x3B,0x3B,0xC1,0x21,0x97,0x00,0x09,0xEB,0x21,0x66,0x00,0x09,
    0x73,0x23,0x72,0x21,0x7B,0x00,0x09,0x73,0x23,0x72,0x21,0x89,0x00,0x09,0x73,0x23,
    0x72,0x21,0xBE,0x00,0x09,0x11,0x00,0x40,0xD5,0xD9,0x08,0x3E,0x03,0xB7,0x06,0x08,
    0x48,0xE1,0x08,0xD9,0x7E,0xCB,0x7F,0x20,0x3A,0xE6,0x07,0x4F,0x7E,0x0F,0x0F,0x0F,
    0xE6,0x0F,0xC6,0x03,0x47,0x23,0x7B,0x96,0x23,0xE5,0x6F,0x7A,0x99,0x67,0xE5,0x7C,
    0xE6,0x58,0xFE,0x58,0x28,0x12,0x4F,0x7D,0xE6,0x07,0xB1,0x4F,0x29,0x29,0x7C,0xE6,
    0x1F,0x67,0x7D,0xE6,0xE0,0xB4,0x6F,0x61,0x7E,0xCD,0xA6,0x74,0xE1,0x23,0x10,0xDE,
    0xE1,0x18,0xC1,0xE6,0x7F,0x28,0x1D,0x23,0xCB,0x77,0x20,0x0A,0x47,0x7E,0xCD,0xA6,
    0x74,0x23,0x10,0xF9,0x18,0xAE,0xE6,0x3F,0xC6,0x03,0x47,0x7E,0xCD,0xA6,0x74,0x10,
    0xFB,0x23,0x18,0xA0,0xD9,0x21,0x58,0x27,0xD9,0xFB,0xC9,0x13,0xD9,0x77,0x08,0x28,
    0x19,0x24,0x10,0x1B,0x11,0x20,0xF8,0x19,0x0D,0x20,0x12,0x11,0x01,0xFF,0x19,0xC6,
    0x08,0x30,0x08,0x11,0xE0,0x07,0x19,0x3D,0x18,0x01,0x23,0x0E,0x08,0x06,0x08,0x08,
    0xD9,0xC9,0xC8,0x00,0x87,0x30,0xDC,0xEF,0xEB,0xEF,0xEB,0x5C,0xCB,0x00,0x8F,0x3C,
    0x5E,0xBF,0x9F,0xAF,0x95,0x42,0x3C,0x00,0x3A,0x74,0xA8,0x96,0xAF,0x5D,0x18,0x06,
    0x40,0x0C,0x88,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x0E,0xC0,0x1D,0x8B,0x2D,0x3E,
    0x2F,0x2F,0x14,0x16,0x13,0x09,0x08,0x04,0x03,0x08,0x56,0x00,0x16,0x8B,0x0F,0x08,
    0x0F,0x61,0xB2,0x75,0x6B,0x57,0x2E,0x45,0x38,0x18,0x68,0x81,0x27,0x30,0x6F,0x82,
    0x7F,0x05,0xC1,0xFF,0x00,0x60,0xC3,0xFF,0x85,0x3C,0x18,0x18,0xDB,0xDB,0x08,0x0C,
    0x86,0x00,0x81,0xDB,0xE7,0x3F,0x05,0x00,0x19,0x8F,0x00,0xC3,0xC3,0xE7,0xE7,0x24,
    0xE7,0x86,0xCB,0xD7,0xAE,0x5D,0xBA,0x14,0xE3,0x20,0x36,0x30,0xAF,0x82,0xFF,0x78,
    0x10,0x40,0x89,0x04,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xF0,0x70,0xC0,0xB8,0x8B,0xBC,
    0x7C,0xFC,0xFC,0x38,0x78,0xF8,0xF0,0xF0,0xE0,0xC0,0x08,0xD6,0x00,0x16,0x8B,0xF0,
    0x10,0xF0,0x18,0x2C,0x5D,0xBA,0x75,0xEB,0x51,0x8E,0x20,0x36,0x81,0x3F,0x38,0xF0,
    0x81,0xFC,0x10,0x80,0x41,0x00,0x87,0x0C,0x3B,0xF7,0xD7,0xF7,0xD7,0x3A,0x59,0x00,
    0x00,0xC0,0x83,0xEB,0xD7,0xAE,0x28,0xC0,0x81,0xFC,0x00,0xB2,0x81,0x23,0x30,0x83,
    0x60,0x40,0xD2,0x00,0x58,0xC0,0x08,0x81,0x81,0x83,0x38,0x40,0x08,0xA8,0x83,0x06,
    0x06,0x03,0xC0,0x06,0x84,0x00,0x38,0x7C,0x7C,0xC1,0xFE,0x81,0x7C,0x68,0x52,0x58,
    0xC0,0x00,0x74,0x83,0x00,0xFF,0x0F,0x38,0x0C,0x01,0xBE,0x86,0x36,0xB6,0xE6,0xB7,
    0xB7,0x36,0x78,0x40,0x78,0xC0,0x01,0xEB,0x81,0x1F,0x08,0x40,0x81,0xFF,0x11,0x9F,
    0x83,0x00,0x00,0xC0,0x10,0xFF,0x86,0x33,0x76,0xF0,0xB0,0x36,0x33,0x78,0x80,0x78,
    0xC0,0x18,0xF3,0x00,0x43,0x29,0x37,0x81,0xFD,0x0A,0x3D,0x86,0xE6,0x36,0xE7,0x36,
    0x36,0xE6,0x78,0xC0,0x78,0xC0,0x83,0x00,0x00,0x3F,0xC4,0xFF,0x22,0x75,0x81,0xE8,
    0x10,0xC0,0x84,0x36,0xF6,0x37,0x37,0x78,0xC0,0x79,0x80,0x19,0x72,0x48,0x40,0x81,
    0x40,0x12,0xB6,0x85,0x70,0xF0,0xB0,0x30,0x30,0x79,0x40,0x79,0x80,0x02,0x2B,0x83,
    0xFF,0xFF,0xFE,0x40,0x80,0x12,0xA6,0x82,0x04,0x06,0xC3,0x02,0x83,0x06,0x04,0x07,
    0x28,0x12,0x81,0x07,0x28,0x0B,0x71,0x80,0x02,0xB2,0x84,0xF8,0xFF,0xFF,0xFC,0x43,
    0x35,0x84,0xF0,0x08,0xE4,0x92,0xC1,0x8A,0x84,0x92,0xE4,0x08,0xF0,0x1B,0x4C,0x85,
    0x91,0x51,0x9D,0x55,0x9D,0x7A,0x40,0x20,0x81,0x29,0xB7,0x1B,0x78,0x8D,0x20,0x60,
    0xE3,0xA2,0xA2,0xA4,0xA8,0xB2,0xA6,0x8A,0x92,0xA2,0xA2,0x22,0xE4,0x81,0x04,0x00,
    0x80,0x02,0xD7,0x7A,0x40,0x0B,0xAB,0x81,0xC7,0x00,0x72,0x2A,0x00,0x13,0xBB,0x84,
    0x9F,0xA0,0xA7,0x98,0xC1,0x80,0x84,0x98,0xA7,0xA0,0x9F,0x1B,0xCC,0x85,0x5F,0x50,
    0xDE,0x50,0x5F,0x7A,0x40,0x20,0x71,0x03,0xF0,0x81,0xB2,0x4B,0xE2,0x8A,0xE3,0x14,
    0xD4,0x57,0x50,0xA0,0xA0,0x50,0x57,0xD4,0x2B,0x64,0x85,0x39,0x45,0x41,0x45,0x39,
    0x7B,0x00,0x2C,0x29,0x13,0xEF,0x82,0x0F,0x0F,0xC3,0x1F,0x8D,0x0F,0x0F,0xFC,0x02,
    0xFA,0x0A,0x0A,0x14,0x14,0x0A,0x0A,0xFA,0x02,0x11,0x17,0x87,0xA0,0x00,0xF7,0x01,
    0xE1,0x01,0xF1,0x7B,0x00,0x14,0x69,0x81,0x0F,0x2A,0x02,0xC6,0xFF,0x8C,0xE1,0xA1,
    0xA2,0xA4,0xA9,0xB3,0xA5,0x89,0x91,0xA1,0xA1,0xE1,0x1C,0x8C,0x85,0xDF,0x10,0x1E,
    0x10,0x1F,0x7B,0x00,0x14,0xA9,0x11,0xBE,0x50,0x43,0x81,0xC0,0xC7,0x40,0x13,0xF6,
    0x1A,0x17,0x12,0x1A,0x7B,0xC0,0x04,0x2D,0x88,0xE0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFE,
    0xFE,0x1C,0xF8,0x82,0x06,0x07,0x7B,0x80,0x7B,0xC0,0x43,0xC0,0x5D,0x1D,0x83,0x01,
    0x03,0x8F,0x7B,0x80,0x7B,0xC0,0x34,0x80,0x81,0x9E,0x3D,0x6E,0x83,0x40,0x40,0x60,
    0x04,0xA0,0x82,0xF8,0xF8,0x7B,0x80,0x7C,0x80,0x2C,0x80,0x81,0x03,0x7C,0x70,0x7B,
    0x80,0x7C,0x80,0x35,0x40,0x6C,0xB0,0xC0,0x01,0x81,0x03,0x7B,0x80,0x7C,0x80,0x25,
    0x40,0x81,0x7F,0x65,0x30,0x85,0x08,0x08,0x1C,0x1C,0xBE,0x7B,0x80,0x7D,0x40,0x25,
    0x40,0x82,0xFF,0xFF,0x0B,0x22,0x83,0x10,0x10,0x28,0x0C,0xEC,0x04,0xF0,0x85,0x7C,
    0x7D,0x79,0x79,0x7B,0xDD,0x00,0x46,0x00,0x83,0xFF,0xFF,0x01,0x25,0xA9,0x8A,0x0C,
    0x1E,0x3F,0x00,0x1E,0x5C,0xDE,0xDC,0x9E,0x5C,0x41,0x52,0x7E,0xC0,0x5D,0x40,0x81,
    0x01,0x03,0xFB,0x08,0xB5,0x00,0xB6,0x82,0x1C,0x3E,0xC2,0x1C,0x84,0xDD,0xED,0xF3,
    0xF9,0x7E,0xC0,0x76,0xC0,0x26,0x00,0x0E,0xB0,0x2C,0x18,0x02,0x75,0xC0,0xE0,0x84,
    0xF0,0xF0,0xF9,0xD1,0x7E,0xC0,0x7E,0xC0,0x16,0xC0,0x1C,0xFC,0x57,0x5D,0x84,0x80,
    0x80,0xC0,0xC1,0x7E,0xC0,0x6E,0xC0,0x86,0x5C,0xBA,0x74,0xEA,0x50,0x8E,0x24,0xFC,
    0x81,0x01,0x21,0x03,0xD1,0x00,0x7E,0xC0,0x47,0xC0,0x87,0x80,0x5C,0x2E,0x17,0x6B,
    0xB5,0xBA,0x18,0x06,0x40,0x0C,0x7F,0xD2,0x7F,0xE4,0x7F,0xF6,0x38,0x36,0xC1,0x00,
    0x84,0x01,0x07,0x1F,0x3F,0x02,0x1D,0x82,0xFF,0xE0,0x0F,0x76,0x05,0x20,0x0F,0xDA,
    0x9C,0x5A,0x3D,0x92,0x09,0x40,0x44,0x4E,0x0C,0x15,0x80,0x10,0x1A,0x3A,0x57,0x12,
    0x80,0x28,0x0C,0x1C,0x2A,0x08,0x40,0x01,0x23,0x23,0x35,0x63,0x05,0xC1,0x00,0x8A,
    0x07,0x0B,0x15,0x0A,0x00,0x0B,0x0B,0x05,0x0E,0x1F,0x08,0x3A,0xC2,0xFF,0x08,0x3F,
    0x0F,0xB8,0x1E,0x25,0xA7,0x6F,0x92,0x44,0x91,0x88,0x0A,0x23,0x22,0x70,0xA8,0x71,
    0x31,0x2B,0x03,0x25,0x61,0x70,0xB0,0x68,0xA2,0x02,0x07,0x06,0x8A,0x93,0x46,0x0A,
    0x02,0x00,0x40,0x04,0xF0,0xFC,0xFC,0xB8,0x00,0x98,0x98,0x90,0xC0,0x00,0x83,0x80,
    0xC3,0xF7,0x0E,0x58,0x3D,0x96,0x81,0xE0,0x1E,0x67,0x95,0xAB,0x57,0x8A,0x00,0x22,
    0x30,0xA2,0x03,0x27,0x0A,0x02,0x88,0x61,0x23,0x61,0xB0,0x24,0x06,0x0E,0x05,0xC4,
    0xC0,0x00,0x8C,0x5E,0xAF,0x50,0x0F,0x2B,0x57,0x2A,0x00,0x2E,0x1E,0x2E,0x14,0xC0,
    0x00,0x84,0x40,0xE0,0xF0,0xFC,0x69,0x9B,0x18,0xC5,0x8D,0x7F,0xAD,0x52,0x04,0x20,
    0x02,0x00,0x10,0x80,0x00,0x08,0x18,0x9C,0x00,0xBF,0x93,0x00,0x00,0x40,0x00,0x5C,
    0xBE,0x00,0x74,0x74,0x00,0xC0,0xE0,0xF1,0xE3,0x00,0x60,0x61,0x61,0x41,0x1A,0x92,
    0x82,0x01,0x81,0x69,0xDB,0x81,0xF0,0x1E,0xEA,0x88,0x6B,0x54,0xA9,0x02,0x10,0x00,
    0x02,0x40,0x02,0xB9,0x86,0x2E,0x5F,0x00,0x2E,0x2E,0x00,0x02,0xFF,0x8E,0x12,0x12,
    0x42,0x02,0x00,0x00,0xFF,0xFF,0xA5,0x00,0xFF,0x39,0x30,0x2B,0xC0,0x00,0x82,0xE0,
    0xF3,0x0F,0x17,0x81,0xF8,0x5F,0xFA,0x17,0x2A,0x89,0xFD,0xFF,0xAB,0x45,0x10,0x82,
    0x08,0x00,0x04,0x03,0x36,0x87,0x30,0x38,0x5C,0x38,0x34,0x52,0x10,0x0A,0x7B,0x81,
    0x00,0x01,0x6F,0x87,0x95,0xC0,0xAE,0x2E,0x17,0x00,0x00,0x16,0x8B,0x81,0xC0,0x09,
    0x74,0xD2,0x00,0x90,0x01,0x01,0x6E,0x96,0x2A,0x00,0x8A,0x02,0x10,0x84,0x00,0x04,
    0x04,0x0E,0x96,0x0D,0x08,0xF0,0x0F,0xFA,0x86,0xE0,0xF0,0x60,0x00,0x60,0x60,0x2D,
    0x31,0x0D,0x17,0x45,0xDD,0x9D,0x1F,0x1F,0x3F,0x3F,0x7F,0x5F,0xDF,0xAF,0xDF,0xAF,
    0x9F,0x2F,0x5F,0x2B,0x5F,0x2F,0x57,0x2B,0x17,0x2A,0x95,0x82,0x89,0x42,0x49,0x22,
    0x20,0x11,0x08,0x23,0x1D,0xC0,0x00,0x82,0x01,0x03,0x07,0x39,0x32,0x8F,0x2A,0x04,
    0xD4,0xFF,0x8E,0xBF,0xFF,0x7F,0xAF,0x7F,0xAB,0x57,0x2A,0x55,0x09,0x22,0x00,0xE0,
    0x1C,0x03,0x60,0x83,0x3E,0xF7,0x0F,0x07,0x8D,0x82,0x7E,0x3E,0xC1,0x00,0x81,0x02,
    0x06,0x17,0x81,0xF8,0x7D,0xDB,0x2F,0xEE,0x83,0xFE,0xD0,0xA0,0x15,0xE5,0x05,0xBC,
    0x87,0xB0,0xFC,0x57,0xAA,0x55,0x80,0x01,0x0D,0xBE,0x86,0x8F,0xBD,0x43,0x7F,0xBF,
    0xBF,0x26,0xF4,0x81,0x83,0x07,0xD3,0x03,0x48,0x82,0xF0,0xF8,0x05,0xDA,0x0F,0xE1,
    0x82,0xE3,0xDD,0xC1,0xD8,0x8B,0xEE,0xF1,0xFF,0xFF,0xF9,0xFC,0xFE,0x3F,0x1F,0x63,
    0x81,0x1F,0xE2,0x87,0x09,0x03,0x0F,0xFD,0xBB,0x4E,0x38,0x16,0x29,0x81,0x80,0x06,
    0x07,0xC0,0xFC,0x0D,0x06,0x81,0x07,0x0E,0x96,0x4B,0x97,0x81,0xCE,0x0B,0x93,0xC1,
    0xF0,0x82,0xF8,0xF8,0x0F,0xD5,0x81,0xC0,0xC0,0xF8,0x00,0x0F,0x96,0xE0,0xE0,0xC0,
    };
    
    // read sector
    void read_sector()
    {    
      if( side == 0)
      {
        byte i = 0, s = sector - 1;
        while(1)
        {
          uint16_t w = pgm_read_word_near(track0[s] + i);
          sector_data[i] = (uint8_t)w;
          sector_data[i+1] = (uint8_t)(w >> 8);
          if(i==254) break;
          i += 2;
        }
      }
      else
      {
        byte i = 0, s = sector - 1;
        while(1)
        {
          uint16_t w = pgm_read_word_near(track1[s] + i);
          sector_data[i] = (uint8_t)w;
          sector_data[i+1] = (uint8_t)(w >> 8);
          if(i==254) break;
          i += 2;
        }
      }
    }
    
    int main() {
      // init();
    
      cli();
      prepare_track_header();
      prepare_sector_header();
    
      // Setup USART in MasterSPI mode 500000bps
      //DDRD |= (1 << DDD4);
      UBRR0H = 0x00;
      UBRR0L = 0x0F; // 500 kbps
      UCSR0C = 0xC0;
      UCSR0A = 0x00;
      UCSR0B = 0x28; // enable USART
    
      //INIT INT0 interrupt
      EICRA = 0x03; // falling edge=2, rising edge=3
      EIFR = 0x01; // clear interrupt flag
      EIMSK = 0x01; // enable INT0
    
      // AFTER TRD is MOUNTED
    
      PORTC |= ((1 << MOTOR_ON) | (1 << DRIVE_SEL) | (1 << SIDE_SEL));
    
      //SET INDEX,TRK00 AS OUTPUT AND HIGH, WP AS OUTPUT AND LOW
      //PORTD |= ((1 << INDEX) | (1 << TRK00)); // set 1
      //PORTD |= (1 << STEP) | (1 << DIR_SEL);
      PORTD = 255;
      //////PORTD &= ~(1 << READ_DATA); // set 0
      PORTD &= ~(1 << WP); // set 0
      DDRD |= ((1 << INDEX) | (1 << TRK00) | (1 << WP));
    
      // ---------------------------------------------------
    
      while (1)
      {    
        while ((PINC & (1 << MOTOR_ON)) > 0);
    
        // this part is after motor on and drive sel --------
        PORTD &= ~(1 << TRK00); // set 0
        tmp = 0;
        state = 0;
        b_index = 0;
        prev_byte = 0x4E;
        sector = 1;
        track = 0;
        side = 0;
        data_sent = 0;
    
        read_sector();
    
    
        sei();   // ENABLE INTERRUPTS
    
        do
        {      
          while (data_sent != 1);
          // read next half of sector
          read_sector();
          
          if (data_sent == 0) { cli(); while (1); } // speed test
          while (data_sent != 0);
        }
        while ((PINC & (1 << MOTOR_ON)) == 0);
        cli();   // DISABLE INTERRUPTS
        PORTD |= (1 << TRK00);
      }
    }
    PS: убрал маппинг регистров и ISR_NAKED, компилятор справляется нормально

    Ура! С таким кодом у меня уже грузится бут с SD карты!
    Последний раз редактировалось EvgenRU; 30.03.2016 в 23:58.

  5. #115
    Master Аватар для s_kosorev
    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NAKED имеет смысл для функций целиком из ассемблерных вставок

  6. #116
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так, добился я загрузки бута с SD карты, но теперь другая проблема... не грузится нормально то что после 1-ой дорожки... завтра буду думать с чем это связано...

  7. #117
    Member Аватар для Abadonna
    Регистрация
    12.05.2008
    Адрес
    г. Москва
    Сообщений
    81
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Позвольте тоже немного встрять. Слежу за Вашей разработкой с очень внимательным интересом, очень многообещающая идея. И, что примечательно, она движется. Аплодирую стоя на голове.

    Ваш выбор платформы не собираюсь ни критиковать, ни поддерживать - каждый может по Вашим исходникам сделать свой вариант. Даже, возможно, я одолел бы STM, конечно, дал бы развернуться во всю ширь и все такое, но выбор сделан, ардуина куплена Если для экспериментов Вам нужна будет дунька мега - могу предложить свою - все равно валяется, место занимает, а у Вас может на благое дело пойти

    Если все-таки будете присматриваться в сторону ARM, позволю себе порекомендовать серию Discavery от STM - распространенная платформа, имеет все необходимое для старта из коробки (еще бы кило мозгов прилагался, тогда и у меня бы заработала, наверное ).

    П.С. Извиняюсь, сразу забыл спросить - в чем Вы писали этот код, какая среда?
    Последний раз редактировалось Abadonna; 31.03.2016 в 19:05.

  8. #118
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Abadonna Посмотреть сообщение
    Если для экспериментов Вам нужна будет дунька мега - могу предложить свою - все равно валяется, место занимает, а у Вас может на благое дело пойти
    Да у меня она тоже есть, для второго 3D принтера брал, пока что не доделал, так что можно в крайнем случае её использовать

    Цитата Сообщение от Abadonna Посмотреть сообщение
    П.С. Извиняюсь, сразу забыл спросить - в чем Вы писали этот код, какая среда?
    Код делался в Arduino 1.6.8, в принципе, легко переносится в AVR Studio

    - - - Добавлено - - -

    Так, ну что, в целом вроде SD нормально работает, то что часто читаются сектора - не проблема, т.к. чтение же идет не постоянно, а выключается при отключении мотора. Сделал так, что не делается lseek при переходе к 1 сектору дорожки с последнего, а просто подставляются значения кластера/сектора, которые были при переходе на дорожку. Основная проблема сейчас это передвижение указателя в файле при смене дорожек, очень долго это делается стандартной функцией. Придется делать таблицу кластеров при открытии файла. Это снимет все проблемы.

  9. #119
    Master
    Регистрация
    20.01.2016
    Адрес
    п. Власиха, Московская обл.
    Сообщений
    593
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    32
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ура! Я загрузил дримтимовскую DIZZY 3.5 с microSD карты!!! Это успех! Правда пока что не все файлы грузит. Где-то что-то не успевает. Надеюсь, что сегодня доделаю!

    UPD: теперь уже и ROBOCOP 3 грузится
    Последний раз редактировалось EvgenRU; 01.04.2016 в 15:05.

  10. #120
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,441
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    62 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Жги!

Страница 12 из 53 ПерваяПервая ... 8910111213141516 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 24
    Последнее: 08.12.2012, 19:00
  2. Тестер транзисторов на ATmega8
    от ILoveSpeccy в разделе Творчество
    Ответов: 10
    Последнее: 19.05.2011, 15:03
  3. Ответов: 0
    Последнее: 31.01.2007, 18:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •