Site icon Renzo Mischianti

Guida Completa: Come Usare un Display ILI9341 con la Libreria TFT_eSPI

Usare un display ILI9341 con la libreria TFT_eSPI

Usare un display ILI9341 con la libreria TFT_eSPI

Spread the love

Uso di un display ILI9341 con la libreria TFT_eSPI

Stai cercando di esplorare le potenzialità del display TFT SPI ILI9341 con ESP32 e la libreria TFT_eSPI? Non cercare oltre! In questa guida completa approfondiremo le funzionalità e le caratteristiche di questo potente display e ti mostreremo come sfruttarlo al meglio con il microcontrollore ESP32. Che tu sia un principiante o uno sviluppatore esperto, questa guida ti fornirà istruzioni passo passo ed esempi di codice per integrare senza problemi questo display TFT nei tuoi progetti.

Dalla comprensione delle basi del display TFT SPI ILI9341 all’impostazione delle librerie necessarie sul tuo ESP32, copriremo ogni aspetto. Esploreremo inoltre vari argomenti come la visualizzazione di testo, grafica e immagini sul display, l’integrazione dell’input touch e altre funzionalità avanzate. Al termine di questa guida, avrai una comprensione completa di come sfruttare la potenza del display TFT SPI ILI9341 in combinazione con il microcontrollore ESP32, aprendo nuove possibilità per i tuoi progetti.

Iniziamo questo entusiasmante viaggio per migliorare i tuoi progetti con display vivaci e interfacce interattive che il display TFT SPI ILI9341 e l’ESP32 possono offrire. Alla fine di questa guida, non solo sarai in grado di visualizzare grafica e testo colorati, ma anche di implementare funzionalità avanzate che porteranno i tuoi progetti al livello successivo.

Specifiche ILI9341

L’ILI9341 è un controller TFT LCD ampiamente utilizzato, noto per il suo display a colori vividi e le prestazioni efficienti. Alimenta display da 2,4 pollici, 2,8 pollici o anche più grandi con una risoluzione di 320×240 pixel (QVGA), offrendo visivi nitidi e luminosi. Il display supporta modalità colore 65K (16-bit) e 262K (18-bit), ideale per interfacce grafiche ricche. Funziona tramite interfaccia SPI, che riduce il numero di GPIO necessari, rendendolo perfetto per microcontrollori come ESP32, Arduino e STM32. L’ILI9341 supporta un refresh rate fino a 60 Hz, garantendo transizioni fluide, e offre funzioni come scorrimento hardware, modalità di visualizzazione parziale e sleep mode per l’efficienza energetica. Include inoltre un pin di controllo retroilluminazione flessibile per la regolazione della luminosità. Con compatibilità, convenienza e caratteristiche robuste, l’ILI9341 è la scelta ideale per applicazioni come gaming, stazioni meteo, dashboard e sistemi interattivi.

Cablaggio

Per questo test utilizzeremo una DOIT ESP32 DevKit V1. Questo dispositivo è ampiamente usato e semplice.

Qui la mia selezione di esp32 ESP32 Dev Kit v1 - TTGO T-Display 1.14 ESP32 - NodeMCU V3 V2 ESP8266 Lolin32 - NodeMCU ESP-32S - WeMos Lolin32 - WeMos Lolin32 mini - ESP32-CAM programmer - ESP32-CAM bundle - ESP32-WROOM-32 - ESP32-S

L’ILI9341 è disponibile in vari formati.

Qui la mia selezione i schermi touch 240 * 320 ILI9341 2,8 - from 320 * 240 ILI9341 from 2,2 to 3,5 -

L’ILI9341 comunica con l’ESP32 tramite SPI. Di seguito la configurazione di cablaggio standard:

Pin ILI9341 TFTPin ESP32Descrizione
VCC3.3V (con J1 saldato) o 5VAlimentazione
GNDGNDMassa
CSGPIO15Chip Select (TFT_CS)
RESETGPIO4Reset Display
DCGPIO2Data/Command (TFT_DC)
SDI (MOSI)GPIO23SPI MOSI
SCKGPIO18SPI Clock (SCLK)
SDO (MISO)Non connessoNon necessario
LED3.3VRetroilluminazione

Nota: Se il tuo modulo ILI9341 ha un pin LED, collegalo a 3.3V o a un GPIO per il controllo della retroilluminazione.

Installazione della libreria TFT_eSPI

La libreria TFT_eSPI è altamente ottimizzata per facilitare l’uso di display TFT con ESP32 e altri microcontrollori. È progettata per alte prestazioni e supporta numerosi driver di display, incluso l’ILI9341. Questa libreria semplifica il processo di disegno di grafica, visualizzazione di testo e gestione dell’input touch, rendendola uno strumento essenziale per sviluppatori che lavorano con display TFT.

Uno dei principali vantaggi della libreria TFT_eSPI è la facilità d’uso. Con un’API intuitiva, gli sviluppatori possono implementare rapidamente funzionalità di display senza conoscere in profondità l’hardware sottostante. La libreria include funzioni predefinite per disegnare forme, rendere immagini e visualizzare font, riducendo notevolmente i tempi di sviluppo. Inoltre, le opzioni di configurazione consentono di personalizzare la libreria in base alle esigenze specifiche del progetto.

La libreria TFT_eSPI supporta anche funzionalità avanzate come gli aggiornamenti parziali dello schermo, utili per migliorare le prestazioni quando si aggiorna solo una porzione del display. Supporta inoltre diversi tipi e dimensioni di font, permettendo di adattare la visualizzazione del testo al design desiderato. In sintesi, la TFT_eSPI è una risorsa preziosa per chiunque voglia lavorare con il display TFT SPI ILI9341 e l’ESP32, semplificando la creazione di applicazioni visivamente accattivanti e interattive.

Apri l’IDE di Arduino.

  1. Vai su Strumenti > Gestione Librerie.
  2. Cerca TFT_eSPI e installa la libreria di Bodmer.

Configurazione della libreria

La libreria non è pronta all’uso: bisogna configurare correttamente il display e i pin del microcontrollore. Nella cartella principale della libreria c’è un file chiamato UserSetupSelect.h. Di seguito il contenuto predefinito.

// This header file contains a list of user setup files and defines which one the
// compiler uses when the IDE performs a Verify/Compile or Upload.
//
// Users can create configurations for different boards and TFT displays.
// This makes selecting between hardware setups easy by "uncommenting" one line.

// The advantage of this hardware configuration method is that the examples provided
// with the library should work with immediately without any other changes being
// needed. It also improves the portability of users sketches to other hardware
// configurations and compatible libraries.
//
// Create a shortcut to this file on your desktop to permit quick access for editing.
// Re-compile and upload after making and saving any changes to this file.

// Example User_Setup files are stored in the "User_Setups" folder. These can be used
// unmodified or adapted for a particular hardware configuration.

#ifndef USER_SETUP_LOADED //  Lets PlatformIO users define settings in
                          //  platformio.ini, see notes in "Tools" folder.

///////////////////////////////////////////////////////
//   User configuration selection lines are below    //
///////////////////////////////////////////////////////

// Only ONE line below should be uncommented to define your setup.  Add extra lines and files as needed.

#include <User_Setup.h>           // Default setup is root library folder

//#include <User_Setups/Setup1_ILI9341.h>  // Setup file for ESP8266 configured for my ILI9341
//#include <User_Setups/Setup2_ST7735.h>   // Setup file for ESP8266 configured for my ST7735
//#include <User_Setups/Setup3_ILI9163.h>  // Setup file for ESP8266 configured for my ILI9163
//#include <User_Setups/Setup4_S6D02A1.h>  // Setup file for ESP8266 configured for my S6D02A1
//#include <User_Setups/Setup5_RPi_ILI9486.h>        // Setup file for ESP8266 configured for my stock RPi TFT
//#include <User_Setups/Setup6_RPi_Wr_ILI9486.h>     // Setup file for ESP8266 configured for my modified RPi TFT
//#include <User_Setups/Setup7_ST7735_128x128.h>     // Setup file for ESP8266 configured for my ST7735 128x128 display
//#include <User_Setups/Setup8_ILI9163_128x128.h>    // Setup file for ESP8266 configured for my ILI9163 128x128 display
//#include <User_Setups/Setup9_ST7735_Overlap.h>     // Setup file for ESP8266 configured for my ST7735
//#include <User_Setups/Setup10_RPi_touch_ILI9486.h> // Setup file for ESP8266 configured for ESP8266 and RPi TFT with touch

//#include <User_Setups/Setup11_RPi_touch_ILI9486.h> // Setup file configured for ESP32 and RPi TFT with touch
//#include <User_Setups/Setup12_M5Stack_Basic_Core.h>// Setup file for the ESP32 based M5Stack (Basic Core only)
//#include <User_Setups/Setup13_ILI9481_Parallel.h>  // Setup file for the ESP32 with parallel bus TFT
//#include <User_Setups/Setup14_ILI9341_Parallel.h>  // Setup file for the ESP32 with parallel bus TFT
//#include <User_Setups/Setup15_HX8357D.h>           // Setup file for ESP8266 configured for HX8357D
//#include <User_Setups/Setup16_ILI9488_Parallel.h>  // Setup file for the ESP32 with parallel bus TFT
//#include <User_Setups/Setup17_ePaper.h>            // Setup file for ESP8266 and any Waveshare ePaper display
//#include <User_Setups/Setup18_ST7789.h>            // Setup file for ESP8266 configured for ST7789

//#include <User_Setups/Setup19_RM68140_Parallel.h>	 // Setup file configured for RM68140 with parallel bus

//#include <User_Setups/Setup20_ILI9488.h>           // Setup file for ESP8266 and ILI9488 SPI bus TFT
//#include <User_Setups/Setup21_ILI9488.h>           // Setup file for ESP32 and ILI9488 SPI bus TFT

//#include <User_Setups/Setup22_TTGO_T4.h>           // Setup file for ESP32 and TTGO T4 version 1.2
//#include <User_Setups/Setup22_TTGO_T4_v1.3.h>      // Setup file for ESP32 and TTGO T4 version 1.3
//#include <User_Setups/Setup23_TTGO_TM.h>           // Setup file for ESP32 and TTGO TM ST7789 SPI bus TFT
//#include <User_Setups/Setup24_ST7789.h>            // Setup file for DSTIKE/ESP32/ESP8266 configured for ST7789 240 x 240
//#include <User_Setups/Setup25_TTGO_T_Display.h>    // Setup file for ESP32 and TTGO T-Display ST7789V SPI bus TFT
//#include <User_Setups/Setup26_TTGO_T_Wristband.h>  // Setup file for ESP32 and TTGO T-Wristband ST7735 SPI bus TFT

//#include <User_Setups/Setup27_RPi_ST7796_ESP32.h>    // ESP32   RPi MHS-4.0 inch Display-B
//#include <User_Setups/Setup28_RPi_ST7796_ESP8266.h>  // ESP8266 RPi MHS-4.0 inch Display-B

//#include <User_Setups/Setup29_ILI9341_STM32.h>          // Setup for Nucleo board
//#include <User_Setups/Setup30_ILI9341_Parallel_STM32.h> // Setup for Nucleo board and parallel display
//#include <User_Setups/Setup31_ST7796_Parallel_STM32.h>  // Setup for Nucleo board and parallel display
//#include <User_Setups/Setup32_ILI9341_STM32F103.h>      // Setup for "Blue/Black Pill"

//#include <User_Setups/Setup33_RPi_ILI9486_STM32.h>      // Setup for Nucleo board

//#include <User_Setups/Setup34_ILI9481_Parallel_STM32.h> // Setup for Nucleo board and parallel display
//#include <User_Setups/Setup35_ILI9341_STM32_Port_Bus.h> // Setup for STM32 port A parallel display

//#include <User_Setups/Setup36_RPi_touch_ST7796.h>      // Setup file configured for ESP32 and RPi ST7796 TFT with touch

// #include <User_Setups/Setup42_ILI9341_ESP32.h>           // Setup file for ESP32 and SPI ILI9341 240x320
//#include <User_Setups/Setup43_ST7735.h>            // Setup file for ESP8266 & ESP32 configured for my ST7735S 80x160
//#include <User_Setups/Setup44_TTGO_CameraPlus.h>   // Setup file for ESP32 and TTGO T-CameraPlus ST7789 SPI bus TFT    240x240
//#include <User_Setups/Setup45_TTGO_T_Watch.h>      // Setup file for ESP32 and TTGO T-Watch ST7789 SPI bus TFT  240x240
//#include <User_Setups/Setup46_GC9A01_ESP32.h>      // Setup file for ESP32 and GC9A01 SPI bus TFT  240x240

//#include <User_Setups/Setup47_ST7735.h>            // Setup file for ESP32 configured for ST7735 128 x 128 animated eyes

//#include <User_Setups/Setup50_SSD1963_Parallel.h>  // Setup file for ESP32 and SSD1963 TFT display

//#include <User_Setups/Setup51_LilyPi_ILI9481.h>    // Setup file for LilyGo LilyPi with ILI9481 display
//#include <User_Setups/Setup52_LilyPi_ST7796.h>     // Setup file for LilyGo LilyPi with ST7796 display

//#include <User_Setups/Setup60_RP2040_ILI9341.h>              // Setup file for RP2040 with SPI ILI9341
//#include <User_Setups/Setup61_RP2040_ILI9341_PIO_SPI.h>      // Setup file for RP2040 with PIO SPI ILI9341
//#include <User_Setups/Setup62_RP2040_Nano_Connect_ILI9341.h> // Setup file for RP2040 with SPI ILI9341

//#include <User_Setups/Setup66_Seeed_XIAO_Round.h>     // Setup file for Seeed XIAO with GC9A01 240x240

//#include <User_Setups/Setup70_ESP32_S2_ILI9341.h>     // Setup file for ESP32 S2 with SPI ILI9341
//#include <User_Setups/Setup70b_ESP32_S3_ILI9341.h>    // Setup file for ESP32 S3 with SPI ILI9341
//#include <User_Setups/Setup70c_ESP32_C3_ILI9341.h>    // Setup file for ESP32 C3 with SPI ILI9341
//#include <User_Setups/Setup70d_ILI9488_S3_Parallel.h> // Setup file for ESP32 S3 with SPI ILI9488

//#include <User_Setups/Setup71_ESP32_S2_ST7789.h>       // Setup file for ESP32 S2 with ST7789
//#include <User_Setups/Setup72_ESP32_ST7789_172x320.h>  // Setup file for ESP32 with ST7789 1.47" 172x320

//#include <User_Setups/Setup100_RP2040_ILI9488_parallel.h> // Setup file for Pico/RP2040 with 8-bit parallel ILI9488
//#include <User_Setups/Setup101_RP2040_ILI9481_parallel.h> // Setup file for Pico/RP2040 with 8-bit parallel ILI9481
//#include <User_Setups/Setup102_RP2040_ILI9341_parallel.h> // Setup file for Pico/RP2040 with 8-bit parallel ILI9341
//#include <User_Setups/Setup103_RP2040_ILI9486_parallel.h> // Setup file for Pico/RP2040 with 8-bit parallel ILI9486
//#include <User_Setups/Setup104_RP2040_ST7796_parallel.h>  // Setup file for Pico/RP2040 with 8-bit parallel ST7796

//#include <User_Setups/Setup105_RP2040_ST7796_16bit_parallel.h>  // Setup file for RP2040 16-bit parallel display
//#include <User_Setups/Setup106_RP2040_ILI9481_16bit_parallel.h> // Setup file for RP2040 16-bit parallel display
//#include <User_Setups/Setup107_RP2040_ILI9341_16bit_parallel.h> // Setup file for RP2040 16-bit parallel display
//#include <User_Setups/Setup108_RP2040_ST7735.h> // Setup file for Waveshare RP2040 board with onboard ST7735 0.96" 160x80 display

//#include <User_Setups/Setup135_ST7789.h>           // Setup file for ESP8266 and ST7789 135 x 240 TFT

//#include <User_Setups/Setup136_LilyGo_TTV.h>       // Setup file for ESP32 and Lilygo TTV ST7789 SPI bus TFT  135x240
//#include <User_Setups/Setup137_LilyGo_TDisplay_RP2040.h>  // Setup file for Lilygo T-Display RP2040 (ST7789 on SPI bus with 135x240 TFT)

//#include <User_Setups/Setup138_Pico_Explorer_Base_RP2040_ST7789.h> // Setup file for Pico Explorer Base by Pimoroni for RP2040 (ST7789 on SPI bus with 240x240 TFT)

//#include <User_Setups/Setup200_GC9A01.h>           // Setup file for ESP32 and GC9A01 240 x 240 TFT

//#include <User_Setups/Setup201_WT32_SC01.h>        // Setup file for ESP32 based WT32_SC01 from Seeed

//#include <User_Setups/Setup202_SSD1351_128.h>      // Setup file for ESP32/ESP8266 based SSD1351 128x128 1.5inch OLED display

//#include <User_Setups/Setup203_ST7789.h>     // Setup file for ESP32/ESP8266 based ST7789 240X280 1.69inch TFT 

//#include <User_Setups/Setup204_ESP32_TouchDown.h>     // Setup file for the ESP32 TouchDown based on ILI9488 480 x 320 TFT 

//#include <User_Setups/Setup205_ESP32_TouchDown_S3.h>     // Setup file for the ESP32 TouchDown S3 based on ILI9488 480 x 320 TFT 

//#include <User_Setups/Setup206_LilyGo_T_Display_S3.h>     // For the LilyGo T-Display S3 based ESP32S3 with ST7789 170 x 320 TFT
//#include <User_Setups/Setup207_LilyGo_T_HMI.h>            // For the LilyGo T-HMI S3 based ESP32S3 with ST7789 240 x 320 TFT
//#include <User_Setups/Setup209_LilyGo_T_Dongle_S3.h>      // For the LilyGo T-Dongle S3 based ESP32 with ST7735 80 x 160 TFT
//#include <User_Setups/Setup210_LilyGo_T_Embed_S3.h>         // For the LilyGo T-Embed S3 based ESP32S3 with ST7789 170 x 320 TFT
//#include <User_Setups/Setup211_LilyGo_T_QT_Pro_S3.h>         // For the LilyGo T-QT Pro S3 based ESP32S3 with GC9A01 128 x 128 TFT
// #include <User_Setups/Setup212_LilyGo_T_PicoPro.h>         // For the LilyGo T-PICO-Pro with ST7796 222 x 480 TFT
// #include <User_Setups/Setup213_LilyGo_T_Beam_Shield.h>         // For the LilyGo T-BEAM V1.x with ST7796 222 x 480 TFT

//#include <User_Setups/Setup250_ESP32_S3_Box_Lite.h>      // For the ESP32 S3 Box Lite
//#include <User_Setups/Setup251_ESP32_S3_Box.h>            // For the ESP32 S3 Box

//#include <User_Setups/Setup301_BW16_ST7735.h>            // Setup file for Bw16-based boards with ST7735 160 x 80 TFT
//#include <User_Setups/Setup302_Waveshare_ESP32S3_GC9A01.h>            // Setup file for Waveshare ESP32-S3-Touch-LCD-1.28 board with GC9A01 240*240 TFT

//#include <User_Setups/SetupX_Template.h>     // Template file for a setup


//#include <User_Setups/Dustin_ILI9488.h>          // Setup file for Dustin Watts PCB with ILI9488
//#include <User_Setups/Dustin_ST7796.h>           // Setup file for Dustin Watts PCB with ST7796
//#include <User_Setups/Dustin_ILI9488_Pico.h>     // Setup file for Dustin Watts Pico PCB with ST7796
//#include <User_Setups/Dustin_ST7789_Pico.h>      // Setup file for Dustin Watts PCB with ST7789 240 x 240 on 3.3V adapter board
//#include <User_Setups/Dustin_GC9A01_Pico.h>      // Setup file for Dustin Watts PCB with GC9A01 240 x 240 on 3.3V adapter board
//#include <User_Setups/Dustin_GC9A01_ESP32.h>     // Setup file for Dustin Watts PCB with GC9A01 240 x 240 on 3.3V adapter board
//#include <User_Setups/Dustin_STT7789_ESP32.h>    // Setup file for Dustin Watts PCB with ST7789 240 x 240 on 3.3V adapter board
//#include <User_Setups/Dustin_ILI9341_ESP32.h>    // Setup file for Dustin Watts PCB with ILI9341
//#include <User_Setups/ILI9225.h>

#endif // USER_SETUP_LOADED



/////////////////////////////////////////////////////////////////////////////////////
//                                                                                 //
//     DON'T TINKER WITH ANY OF THE FOLLOWING LINES, THESE ADD THE TFT DRIVERS     //
//       AND ESP8266 PIN DEFINITONS, THEY ARE HERE FOR BODMER'S CONVENIENCE!       //
//                                                                                 //
/////////////////////////////////////////////////////////////////////////////////////


// Identical looking TFT displays may have a different colour ordering in the 16-bit colour
#define TFT_BGR 0   // Colour order Blue-Green-Red
#define TFT_RGB 1   // Colour order Red-Green-Blue

// Legacy setup support, RPI_DISPLAY_TYPE replaces RPI_DRIVER
#if defined (RPI_DRIVER)
  #if !defined (RPI_DISPLAY_TYPE)
    #define RPI_DISPLAY_TYPE
  #endif
#endif

// Legacy setup support, RPI_ILI9486_DRIVER form is deprecated
// Instead define RPI_DISPLAY_TYPE and also define driver (e.g. ILI9486_DRIVER) 
#if defined (RPI_ILI9486_DRIVER)
  #if !defined (ILI9486_DRIVER)
    #define ILI9486_DRIVER
  #endif
  #if !defined (RPI_DISPLAY_TYPE)
    #define RPI_DISPLAY_TYPE
  #endif
#endif

// Invoke 18-bit colour for selected displays
#if !defined (RPI_DISPLAY_TYPE) && !defined (TFT_PARALLEL_8_BIT) && !defined (TFT_PARALLEL_16_BIT) && !defined (ESP32_PARALLEL)
  #if defined (ILI9481_DRIVER) || defined (ILI9486_DRIVER) || defined (ILI9488_DRIVER)
    #define SPI_18BIT_DRIVER
  #endif
#endif

// Load the right driver definition - do not tinker here !
#if   defined (ILI9341_DRIVER) || defined(ILI9341_2_DRIVER) || defined (ILI9342_DRIVER)
     #include <TFT_Drivers/ILI9341_Defines.h>
     #define  TFT_DRIVER 0x9341
#elif defined (ST7735_DRIVER)
     #include <TFT_Drivers/ST7735_Defines.h>
     #define  TFT_DRIVER 0x7735
#elif defined (ILI9163_DRIVER)
     #include <TFT_Drivers/ILI9163_Defines.h>
     #define  TFT_DRIVER 0x9163
#elif defined (S6D02A1_DRIVER)
     #include <TFT_Drivers/S6D02A1_Defines.h>
     #define  TFT_DRIVER 0x6D02
#elif defined (ST7796_DRIVER)
      #include "TFT_Drivers/ST7796_Defines.h"
      #define  TFT_DRIVER 0x7796
#elif defined (ILI9486_DRIVER)
     #include <TFT_Drivers/ILI9486_Defines.h>
     #define  TFT_DRIVER 0x9486
#elif defined (ILI9481_DRIVER)
     #include <TFT_Drivers/ILI9481_Defines.h>
     #define  TFT_DRIVER 0x9481
#elif defined (ILI9488_DRIVER)
     #include <TFT_Drivers/ILI9488_Defines.h>
     #define  TFT_DRIVER 0x9488
#elif defined (HX8357D_DRIVER)
     #include "TFT_Drivers/HX8357D_Defines.h"
     #define  TFT_DRIVER 0x8357
#elif defined (EPD_DRIVER)
     #include "TFT_Drivers/EPD_Defines.h"
     #define  TFT_DRIVER 0xE9D
#elif defined (ST7789_DRIVER)
     #include "TFT_Drivers/ST7789_Defines.h"
     #define  TFT_DRIVER 0x7789
#elif defined (R61581_DRIVER)
     #include "TFT_Drivers/R61581_Defines.h"
     #define  TFT_DRIVER 0x6158
#elif defined (ST7789_2_DRIVER)
     #include "TFT_Drivers/ST7789_2_Defines.h"
     #define  TFT_DRIVER 0x778B
#elif defined (RM68140_DRIVER)
     #include "TFT_Drivers/RM68140_Defines.h"
     #define  TFT_DRIVER 0x6814
#elif defined (SSD1351_DRIVER)
     #include "TFT_Drivers/SSD1351_Defines.h"
     #define  TFT_DRIVER 0x1351
#elif defined (SSD1963_480_DRIVER)
     #include "TFT_Drivers/SSD1963_Defines.h"
     #define  TFT_DRIVER 0x1963
#elif defined (SSD1963_800_DRIVER)
     #include "TFT_Drivers/SSD1963_Defines.h"
     #define  TFT_DRIVER 0x1963
#elif defined (SSD1963_800ALT_DRIVER)
     #include "TFT_Drivers/SSD1963_Defines.h"
     #define  TFT_DRIVER 0x1963
#elif defined (SSD1963_800BD_DRIVER)
     #include "TFT_Drivers/SSD1963_Defines.h"
     #define  TFT_DRIVER 0x1963
#elif defined (GC9A01_DRIVER)
     #include "TFT_Drivers/GC9A01_Defines.h"
     #define  TFT_DRIVER 0x9A01
#elif defined (ILI9225_DRIVER)
     #include "TFT_Drivers/ILI9225_Defines.h"
     #define  TFT_DRIVER 0x9225
#elif defined (RM68120_DRIVER)
     #include "TFT_Drivers/RM68120_Defines.h"
     #define  TFT_DRIVER 0x6812
#elif defined (HX8357B_DRIVER)
     #include "TFT_Drivers/HX8357B_Defines.h"
     #define  TFT_DRIVER 0x835B
#elif defined (HX8357C_DRIVER)
     #include "TFT_Drivers/HX8357C_Defines.h"
     #define  TFT_DRIVER 0x835C

                              // <<<<<<<<<<<<<<<<<<<<<<<< ADD NEW DRIVER HERE
                              // XYZZY_init.h and XYZZY_rotation.h must also be added in TFT_eSPI.cpp
#elif defined (XYZZY_DRIVER)
     #include "TFT_Drivers/XYZZY_Defines.h"
     #define  TFT_DRIVER 0x0000
#else
     #define  TFT_DRIVER 0x0000
#endif

// These are the pins for ESP8266 boards
//      Name   GPIO    NodeMCU      Function
#define PIN_D0  16  // GPIO16       WAKE
#define PIN_D1   5  // GPIO5        User purpose
#define PIN_D2   4  // GPIO4        User purpose
#define PIN_D3   0  // GPIO0        Low on boot means enter FLASH mode
#define PIN_D4   2  // GPIO2        TXD1 (must be high on boot to go to UART0 FLASH mode)
#define PIN_D5  14  // GPIO14       HSCLK
#define PIN_D6  12  // GPIO12       HMISO
#define PIN_D7  13  // GPIO13       HMOSI  RXD2
#define PIN_D8  15  // GPIO15       HCS    TXD0 (must be low on boot to enter UART0 FLASH mode)
#define PIN_D9   3  //              RXD0
#define PIN_D10  1  //              TXD0

#define PIN_MOSI 8  // SD1          FLASH and overlap mode
#define PIN_MISO 7  // SD0
#define PIN_SCLK 6  // CLK
#define PIN_HWCS 0  // D3

#define PIN_D11  9  // SD2
#define PIN_D12 10  // SD4

Questo file è abilitato di default e include, tra le righe commentate, la linea:

#include <User_Setups/Setup42_ILI9341_ESP32.h>           // File di setup per ESP32 e ILI9341 SPI 240x320

All’interno di quel file c’è una configurazione di base per il nostro display.

// See SetupX_Template.h for all options available
#define USER_SETUP_ID 42

#define ILI9341_DRIVER

#define TFT_MISO 19  // (leave TFT SDO disconnected if other SPI devices share MISO)
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   15  // Chip select control pin
#define TFT_DC    2  // Data Command control pin
#define TFT_RST   4  // Reset pin (could connect to RST pin)

// Optional touch screen chip select
#define TOUCH_CS 21 // Chip select pin (T_CS) of touch screen

#define LOAD_GLCD    // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2   // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4   // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6   // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7   // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:.
#define LOAD_FONT8   // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
#define LOAD_GFXFF   // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

#define SMOOTH_FONT

// TFT SPI clock frequency
// #define SPI_FREQUENCY  20000000
// #define SPI_FREQUENCY  27000000
#define SPI_FREQUENCY  40000000
// #define SPI_FREQUENCY  80000000

// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY  16000000

// SPI clock frequency for touch controller
#define SPI_TOUCH_FREQUENCY  2500000

Questa configurazione va bene, ma preferisco avere un file personalizzato nella cartella del progetto, così non perdo le modifiche quando aggiorno la libreria.

Disabilitiamo il caricamento del setup interno definendo USER_SETUP_LOADED e includiamo un mio file User_Setup.h nella cartella del progetto.

// Aggiungi in cima al file del progetto
#define USER_SETUP_LOADED // per non caricare i USER_SETTINGS interni

#include "User_Setup.h"

Il mio User_Setup.h diventa così:

/**
 * User setup for ili9143 and esp32
 * by Renzo Mischianti <mischianti.org>
 * Tutorial for ili9143
 */

#define USER_SETUP_INFO "User_Setup"

// ##################################################################################
//
// Section 1. Call up the right driver file and any options for it
//
// ##################################################################################

#define ILI9341_DRIVER       // Generic driver for common displays

#define TFT_WIDTH  240 // ST7789 240 x 240 and 240 x 320
#define TFT_HEIGHT 320 // ST7789 240 x 320


// ##################################################################################
//
// Section 2. Define the pins that are used to interface with the display here
//
// ##################################################################################

// If a backlight control signal is available then define the TFT_BL pin in Section 2
// below. The backlight will be turned ON when tft.begin() is called, but the library
// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be
// driven with a PWM signal or turned OFF/ON then this must be handled by the user
// sketch. e.g. with digitalWrite(TFT_BL, LOW);

// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP   ######

// For ESP32 Dev board (only tested with ILI9341 display)
// The hardware SPI can be mapped to any pins

#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   15  // Chip select control pin
#define TFT_DC    2  // Data Command control pin
#define TFT_RST   4  // Reset pin (could connect to RST pin)

//#define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST
//#define TFT_BL   22  // LED back-light

#define TOUCH_CS 21     // Chip select pin (T_CS) of touch screen

// ##################################################################################
//
// Section 3. Define the fonts that are to be used here
//
// ##################################################################################

// Comment out the #defines below with // to stop that font being loaded
// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not
// normally necessary. If all fonts are loaded the extra FLASH space required is
// about 17Kbytes. To save FLASH space only enable the fonts you need!

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
// this will save ~20kbytes of FLASH
#define SMOOTH_FONT

// ##################################################################################
//
// Section 4. Other options
//
// ##################################################################################

// TFT SPI clock frequency
// #define SPI_FREQUENCY  20000000
// #define SPI_FREQUENCY  27000000
#define SPI_FREQUENCY  40000000
// #define SPI_FREQUENCY  80000000

// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY  16000000

// SPI clock frequency for touch controller
#define SPI_TOUCH_FREQUENCY  2500000
//#define SPI_TOUCH_FREQUENCY 1000000 // Reduce to 1 MHz for debugging

// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex)
// so changing it here has no effect

// #define SUPPORT_TRANSACTIONS

Primo programma di test

Inizializzazione di base e pulizia schermo

/**
 * Blank screen 
 * by Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

void setup() {
  tft.init();
  tft.fillScreen(TFT_BLACK);  // Clear the screen with black color
}

void loop() {
  // Do nothing
}

Spiegazione:

Rotazione schermo

/**
 * Screen rotation
 * by Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

void setup() {
  tft.init();
  for (int i = 0; i < 4; i++) {
    tft.setRotation(i);  // Set rotation: 0, 1, 2, or 3
    tft.fillScreen(TFT_BLUE);
    tft.println("Hello, World!");           // Print a message

    delay(1000);  // Pause to observe the effect
  }
}

void loop() {
  // Do nothing
}

Spiegazione:

Disegno forme base

Disegna linee, rettangoli e cerchi, sia vuoti che riempiti.

/**
 * Draw lines, rectangles, and circles, both filled and unfilled
 * by Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

void setup() {
  tft.init();
  tft.fillScreen(TFT_BLACK);

  tft.drawLine(10, 10, 100, 10, TFT_WHITE);  // Draw a white line
  tft.drawRect(10, 20, 50, 30, TFT_RED);     // Draw a red rectangle
  tft.fillRect(70, 20, 50, 30, TFT_GREEN);   // Draw a filled green rectangle
  tft.drawCircle(50, 100, 20, TFT_YELLOW);   // Draw a yellow circle
  tft.fillCircle(100, 100, 20, TFT_BLUE);    // Draw a filled blue circle
}

void loop() {
  // Do nothing
}

Spiegazione:

Disegno testo

Esempio che mostra varie funzionalità di disegno del testo.

/**
 * Example demonstrating various text drawing functionalities using TFT_eSPI
 * library with the ILI9341 display.
 *
 * Features:
 * - Draw basic text with custom colors and background.
 * - Display text with a transparent background.
 * - Center text horizontally and vertically on the screen.
 * - Align text to the right edge of the screen.
 *
 * Author: Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

void setup() {
  tft.init();

  tft.fillScreen(TFT_BLACK); // Clear screen

  // Example 1: Basic Text
  tft.setTextColor(TFT_WHITE, TFT_RED); // Text color with background
  tft.setTextSize(1);                     // Scale the font size
  tft.setCursor(10, 10);                  // Set cursor position
  tft.println("Hello, World!");           // Print a message

  // Example 2: Text with Transparent Background
  tft.setTextColor(TFT_GREEN); // Text color without background
  tft.setTextSize(2);          // Larger font size
  tft.setCursor(10, 50);
  tft.println("Transparent Text");

  // Example 3: Centered Text
  String text = "Centered Text";
  uint8_t textSizeCentered = 1;
  tft.setTextSize(textSizeCentered);
  int16_t textWidth = tft.textWidth(text, textSizeCentered); // Get text width
  int16_t textHeight = tft.fontHeight(textSizeCentered);    // Get text height
  int16_t x = (tft.width()/2) - (textWidth / 2); // Center horizontally
  int16_t y = (tft.height()/2) - (textHeight / 2); // Center vertically
  tft.setTextColor(TFT_YELLOW);
  tft.setCursor(x, y);
  tft.println(text);

  // Example 4: Right-aligned Text
  String rightText = "Right-Aligned";
  uint8_t textSizeRightAligned = 1;
  tft.setTextSize(textSizeRightAligned);
  textWidth = tft.textWidth(rightText, textSizeRightAligned);
  tft.setCursor(tft.width() - textWidth - 10, 100); // Align right
  tft.setTextColor(TFT_CYAN);
  tft.println(rightText);
}

void loop() {
  // Do nothing
}

Testo base:

Testo trasparente:

Testo centrato:

Testo allineato a destra:

Uso di Free Fonts

Esempio che dimostra l’uso di più font FreeFonts.

/**
 * Example demonstrating the use of multiple fonts with TFT_eSPI library
 * and ILI9341 display.
 *
 * Features:
 * - Use built-in and custom FreeFonts.
 * - Apply different colors and font styles.
 * - Demonstrates font scaling and positioning.
 *
 * Author: Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>
#include <Fonts/GFXFF/FreeSansBold12pt7b.h>
#include <Fonts/GFXFF/FreeSerifItalic18pt7b.h>
#include <Fonts/GFXFF/FreeMonoOblique9pt7b.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

void setup() {
  tft.init();
  tft.fillScreen(TFT_BLACK);

  // Example 1: Using FreeSansBold12pt7b
  tft.setFreeFont(&FreeSansBold12pt7b); // Set a free font
  tft.setTextColor(TFT_CYAN, TFT_BLACK); // Text with background
  tft.drawString("Sans Bold Font", 10, 30);

  // Example 2: Using FreeSerifItalic18pt7b
  tft.setFreeFont(&FreeSerifItalic18pt7b); // Change to another free font
  tft.setTextColor(TFT_GREEN);             // Text without background
  tft.drawString("Serif Italic", 10, 70);

  // Example 3: Using FreeMonoOblique9pt7b
  tft.setFreeFont(&FreeMonoOblique9pt7b); // Another free font style
  tft.setTextColor(TFT_YELLOW);
  tft.drawString("Mono Oblique", 10, 110);

  // Example 4: Default Font with Scaling
  tft.setTextFont(1);      // Use the default font
  tft.setTextSize(2);      // Scale text size
  tft.setTextColor(TFT_WHITE);
  tft.setCursor(10, 150);  // Position using cursor
  tft.println("Default Font");
}

void loop() {
  // Do nothing
}


Spiegazione:

Disegno bitmap

Per gestire le immagini, ho aggiunto uno strumento per convertire le immagini in array di byte, molto utile.

Ecco un esempio:

Basta selezionare e caricare l’immagine, verificare i parametri corretti e fare clic su Convert.

Esempio di come visualizzare un’immagine da array di byte.

/**
 * Example demonstrating how to display an image from a byte array using the TFT_eSPI library.
 *
 * Features:
 * - Show an image stored in a byte array on an ILI9341 TFT display.
 * - Utilize the PROGMEM directive to store image data in flash memory.
 * - Manage image rendering with the TFT_eSPI library.
 *
 * Author: Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

#define LOGO_HEIGHT 100
#define LOGO_WIDTH 100

// array size is 20000
static const uint16_t logo[] PROGMEM  = {
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf77d, 0xc638, 0x9cb2, 0xbdf7, 0xef5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe6fb, 0xa534, 0xad34, 0xdeba, 0xffbe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79e, 0xa4b2, 0x38e3, 0x3861, 0x38a2, 0x6aea, 0xe73c, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xde99, 0x6249, 0x3881, 0x3060, 0x4944, 0xbd95, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdeba, 0x6227, 0x4080, 0x4040, 0x4060, 0x38c2, 0x9c71, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf77d, 0x7b6d, 0x4081, 0x4060, 0x4060, 0x4060, 0x6aaa, 0xe6fb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xce59, 0x5185, 0x4060, 0x4840, 0x4840, 0x4061, 0x6207, 0xdedb, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd69a, 0x51a6, 0x4040, 0x4040, 0x4060, 0x4060, 0x59c6, 0xd679, 0xf7fe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xd6ba, 0x6207, 0x4060, 0x4060, 0x4861, 0x4040, 0x4103, 0xb554, 0xf7de, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf77d, 0x93ef, 0x4082, 0x4040, 0x4040, 0x4040, 0x3881, 0x6aaa, 0xe71b, 0xf7ff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79e, 0x83ae, 0x4081, 0x4060, 0x4040, 0x4060, 0x4081, 0x7b2c, 0xef5c, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xdeba, 0x6228, 0x4040, 0x4060, 0x4040, 0x4040, 0x38a1, 0xa4d2, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xc5d7, 0x4904, 0x4061, 0x4060, 0x4060, 0x4040, 0x59a6, 0xd659, 0xf7ff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xad34, 0x40e3, 0x4040, 0x4060, 0x4060, 0x4040, 0x5185, 0xd679, 0xf7de, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef5c, 0x6a69, 0x4040, 0x4060, 0x4040, 0x4040, 0x4081, 0x8c0f, 0xefde, 0xf7df, 0xf79d, 0xe71b, 0xc617, 0xc5d7, 0xc5d7, 0xc5d7, 0xc5d7, 0xce18, 0xe73c, 0xf77d, 0xf7de, 0xef7c, 0x72ca, 0x4060, 0x4060, 0x4060, 0x4080, 0x4881, 0x8bef, 0xffbe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7de, 0xad13, 0x40c2, 0x4060, 0x4040, 0x4040, 0x4040, 0x5164, 0x9c70, 0x8bef, 0x6268, 0x51a6, 0x40e2, 0x40a1, 0x4081, 0x4081, 0x40a1, 0x40c2, 0x59e6, 0x6aa9, 0x942f, 0xa470, 0x48e3, 0x4060, 0x4060, 0x4060, 0x4060, 0x4924, 0xd638, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe71b, 0x5a07, 0x4060, 0x4040, 0x4040, 0x4040, 0x3860, 0x40a1, 0x40a1, 0x4060, 0x4060, 0x4840, 0x4840, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4081, 0x40a1, 0x4081, 0x4040, 0x4040, 0x4040, 0x4081, 0x836d, 0xf77d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7be, 0x9c2f, 0x40a1, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4080, 0x4060, 0x4040, 0x4040, 0x4060, 0x4040, 0x4060, 0x4060, 0x4060, 0x3860, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x48e2, 0xbd55, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xef5c, 0x836d, 0x40a1, 0x4060, 0x4060, 0x4060, 0x4040, 0x3840, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x40a1, 0x93cf, 0xef1c, 0xf7ff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf79e, 0xc5d7, 0x6aaa, 0x38a1, 0x4060, 0x4040, 0x4060, 0x4060, 0x4060, 0x4880, 0x48a1, 0x48a1, 0x48a1, 0x4080, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x4060, 0x40c2, 0x7b0c, 0xd67a, 0xf79e, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7be, 0xbd95, 0x59e7, 0x4061, 0x4060, 0x4060, 0x4060, 0x4060, 0x48a0, 0x5943, 0x69e5, 0x7206, 0x7a26, 0x7206, 0x69c5, 0x5922, 0x48a0, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x3860, 0x4060, 0x4081, 0x6a49, 0xcdd7, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7be, 0xce17, 0x51a6, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x48a0, 0x71e4, 0x8287, 0x8287, 0x8aa7, 0x8aa7, 0x8aa7, 0x82a7, 0x8287, 0x69c5, 0x4080, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4040, 0x4061, 0x5a07, 0xd679, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd679, 0x59e7, 0x4881, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x6183, 0x8aa7, 0x8aa6, 0x8aa6, 0x8aa6, 0x8aa6, 0x8aa6, 0x8aa6, 0x8ac7, 0x8aa7, 0x61a4, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x3881, 0x72aa, 0xe6db, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe71b, 0x7b2c, 0x4082, 0x4881, 0x4060, 0x4040, 0x4040, 0x4040, 0x4080, 0x7a26, 0x8ac7, 0x8aa6, 0x8ac7, 0x8aa6, 0x8aa6, 0x8aa6, 0x8aa6, 0x8ac6, 0x8aa7, 0x7225, 0x48a0, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x3860, 0x4060, 0x4060, 0x4881, 0x8b8e, 0xef5d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xf7ff, 0xf7de, 0xffff, 0xffff, 0xf7be, 0xf77c, 0xe71b, 0xce38, 0xce17, 0xc5f7, 0xce17, 0xe6fb, 0xf77d, 0xf79d, 0xf7be, 0xf7be, 0xf79d, 0xa4d2, 0x4103, 0x3861, 0x4061, 0x4040, 0x4040, 0x4040, 0x4040, 0x4080, 0x7a26, 0x8aa7, 0x8aa7, 0x8aa7, 0x8ac7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8ac7, 0x8aa7, 0x7225, 0x48a0, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x5165, 0xbdd6, 0xf7de, 0xf7be, 0xffde, 0xf79d, 0xf75d, 0xef1b, 0xce38, 0xc5f7, 0xc5f7, 0xce58, 0xef5c, 0xf77d, 0xf7be, 0xffff, 0xffdf, 0xffdf, 0xf7df, 0xf7df, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7bf, 0xf79d, 0xe6fb, 0xc5b5, 0xa491, 0x7aeb, 0x5a07, 0x51a6, 0x40e3, 0x48c2, 0x40c2, 0x48e3, 0x5986, 0x59e7, 0x72cb, 0x9c50, 0xbdb5, 0xd617, 0x6a48, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x61a4, 0x82a7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8287, 0x6184, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4881, 0x72a9, 0xc5b5, 0xad13, 0x9c50, 0x72aa, 0x59c7, 0x5185, 0x48e3, 0x40a2, 0x40c2, 0x4123, 0x51c6, 0x5a07, 0x7b2c, 0xa4b1, 0xd679, 0xe71c, 0xef9e, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xe6fb, 0xbd54, 0x8bae, 0x6207, 0x4903, 0x4081, 0x3860, 0x4060, 0x4040, 0x4040, 0x4060, 0x4040, 0x4040, 0x4060, 0x4040, 0x3860, 0x3880, 0x4123, 0x4964, 0x4060, 0x4840, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x48c0, 0x69a4, 0x8266, 0x8aa7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8aa7, 0x8266, 0x69a4, 0x48a1, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4081, 0x4923, 0x40c2, 0x4060, 0x4060, 0x4061, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x3860, 0x3881, 0x4924, 0x6227, 0x8bce, 0xbdb6, 0xef5c, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7df, 0xffdf, 0xef7d, 0xb575, 0x6a89, 0x4903, 0x4081, 0x4060, 0x4060, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4880, 0x5922, 0x69c5, 0x7205, 0x7a26, 0x7205, 0x69c4, 0x5122, 0x4080, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4840, 0x4040, 0x4040, 0x4060, 0x3840, 0x3881, 0x4944, 0x72eb, 0xbd96, 0xef7d, 0xffdf, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xf79d, 0xcdf7, 0x72eb, 0x40e3, 0x40a2, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4860, 0x4081, 0x40a1, 0x40a1, 0x40c1, 0x40a1, 0x40a1, 0x40a1, 0x4081, 0x4060, 0x4860, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4080, 0x4080, 0x4080, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4840, 0x4840, 0x4040, 0x4040, 0x4060, 0x4081, 0x40a1, 0x40a1, 0x40c1, 0x40c2, 0x40c1, 0x40a1, 0x4081, 0x4061, 0x4881, 0x4040, 0x4040, 0x4040, 0x4060, 0x3861, 0x4103, 0x7b4c, 0xe6fb, 0xf79e, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe73c, 0xacb2, 0x5165, 0x4061, 0x4060, 0x4060, 0x4060, 0x4060, 0x48c2, 0x5985, 0x6248, 0x834c, 0x9c70, 0xb534, 0xb534, 0xb534, 0xb513, 0xacd2, 0xa4b1, 0x8bad, 0x7aca, 0x69e6, 0x5164, 0x40c1, 0x3880, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x3840, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x48a1, 0x5944, 0x6a07, 0x7b0b, 0x9c2f, 0xacf3, 0xb534, 0xbd55, 0xb575, 0xb554, 0xad34, 0x9470, 0x7b2c, 0x6208, 0x5145, 0x4081, 0x4060, 0x4060, 0x4080, 0x4080, 0x40a1, 0x6a49, 0xbd95, 0xef7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xf7df, 0xe71c, 0x83ae, 0x5124, 0x4060, 0x3860, 0x4080, 0x4060, 0x4081, 0x61e6, 0x9c2f, 0xce59, 0xe6fb, 0xf79d, 0xf7be, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffdf, 0xffbe, 0xf75c, 0xeeda, 0xd617, 0xc574, 0x9bee, 0x6a67, 0x48e2, 0x4080, 0x4080, 0x4060, 0x3840, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4860, 0x4040, 0x4040, 0x4040, 0x4060, 0x4080, 0x4923, 0x7288, 0x9c0e, 0xc594, 0xde78, 0xef3b, 0xf79d, 0xffdf, 0xffdf, 0xffdf, 0xffde, 0xffde, 0xffde, 0xf7be, 0xef7d, 0xdeda, 0xc5b7, 0x9430, 0x5a07, 0x40c1, 0x40a1, 0x4080, 0x4881, 0x4040, 0x5985, 0xacf3, 0xf7be, 0xffde, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffdf, 0xf7de, 0xe71b, 0x7b2c, 0x4082, 0x4040, 0x4060, 0x4060, 0x3861, 0x5165, 0x9c51, 0xe6ba, 0xf79e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffbe, 0xf77c, 0xf75b, 0xeed9, 0xe657, 0xb4d1, 0x6a67, 0x40c1, 0x3880, 0x4080, 0x3840, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4080, 0x4902, 0x832a, 0xbd52, 0xe697, 0xf73a, 0xf77c, 0xffbe, 0xfffe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xf7be, 0xe6fa, 0x940f, 0x4903, 0x4061, 0x4040, 0x4840, 0x4841, 0x4924, 0xad14, 0xf79d, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffdf, 0xef5c, 0x8bce, 0x4082, 0x4840, 0x4861, 0x3860, 0x40e2, 0x7b2c, 0xce38, 0xffbe, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xf79d, 0xf75b, 0xf71a, 0xf6f9, 0xe676, 0xac6f, 0x6a26, 0x40c1, 0x3860, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x48e2, 0x7ac9, 0xbd11, 0xee97, 0xf739, 0xf75a, 0xf79d, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xfffe, 0xffde, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xf79e, 0xbdb6, 0x6aaa, 0x40c2, 0x4041, 0x4840, 0x4060, 0x4903, 0xad13, 0xf79d, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xf7be, 0xacf3, 0x5164, 0x3860, 0x4060, 0x4081, 0x4924, 0x93ef, 0xdedb, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xf7bd, 0xef5b, 0xf719, 0xf718, 0xeeb7, 0xd5d4, 0x9bed, 0x59a4, 0x4080, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x40c1, 0x6a47, 0xb46f, 0xe635, 0xf6d8, 0xf6f9, 0xf739, 0xf77c, 0xffbe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf77b, 0xef39, 0xf75b, 0xffbe, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xf7df, 0xdeba, 0x7b6d, 0x40c2, 0x4040, 0x4080, 0x4061, 0x59a6, 0xbdb6, 0xf7df, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffdf, 0xdeba, 0x5a08, 0x40a1, 0x3860, 0x4081, 0x5144, 0xacf3, 0xef5d, 0xffbf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xf7bc, 0xf73a, 0xf719, 0xf718, 0xeef8, 0xeed8, 0xc573, 0x7288, 0x40a1, 0x4080, 0x4060, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x48c1, 0x832a, 0xd5d4, 0xf6d8, 0xf718, 0xf718, 0xef19, 0xf75b, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef3a, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xe73c, 0x83ad, 0x40c2, 0x4060, 0x3840, 0x4861, 0x72aa, 0xef7d, 0xffff, 0xffff, 0xffff,
  0xffdf, 0xffff, 0xf79e, 0x734c, 0x3881, 0x4081, 0x4080, 0x48c2, 0x940f, 0xef7d, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xf79c, 0xf73a, 0xef19, 0xef18, 0xeef8, 0xeed8, 0xddf5, 0x8b6b, 0x40e2, 0x4060, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4080, 0x5143, 0xa42e, 0xe697, 0xf6f8, 0xeef8, 0xef18, 0xef18, 0xef5a, 0xf79d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xe73b, 0x7b2c, 0x40a1, 0x4060, 0x4820, 0x48a2, 0xa4b3, 0xf7be, 0xffff, 0xffff,
  0xffdf, 0xffde, 0xbdd7, 0x4123, 0x4060, 0x4060, 0x4060, 0x72ca, 0xdeba, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf77b, 0xef19, 0xeef8, 0xeef8, 0xeef8, 0xf6d8, 0xe656, 0x9bed, 0x5163, 0x4080, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x3860, 0x4080, 0x6226, 0xb4f1, 0xeeb7, 0xeef8, 0xeef8, 0xef18, 0xef18, 0xef39, 0xf77b, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xce18, 0x59e7, 0x4080, 0x4060, 0x3860, 0x51a6, 0xd69a, 0xffff, 0xffff,
  0xffdf, 0xf77d, 0x8bae, 0x3860, 0x3840, 0x4040, 0x40c2, 0xbdb5, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7bd, 0xf75a, 0xef19, 0xeef8, 0xeef8, 0xeef8, 0xf6d8, 0xee97, 0xac6f, 0x5164, 0x4060, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x3880, 0x5a05, 0xbd32, 0xeed8, 0xeef8, 0xeef8, 0xf6f8, 0xf6f8, 0xef39, 0xef5b, 0xf7bd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf77e, 0xa4b3, 0x40c1, 0x4060, 0x4060, 0x4081, 0x9c91, 0xffde, 0xffff,
  0xffff, 0xd699, 0x59c6, 0x4060, 0x4040, 0x3860, 0x7b0c, 0xf77d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf77c, 0xf739, 0xef18, 0xef18, 0xef18, 0xf6f8, 0xf6f8, 0xeeb8, 0xb490, 0x4922, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x3880, 0x59c5, 0xc573, 0xeef8, 0xeef8, 0xef18, 0xf718, 0xf6f8, 0xf6f8, 0xf73a, 0xf77c, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf75d, 0x6a89, 0x4080, 0x4060, 0x3840, 0x6a89, 0xe73c, 0xffff,
  0xf7de, 0xb554, 0x4903, 0x4040, 0x4060, 0x4923, 0xc5d7, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79c, 0xf75a, 0xef19, 0xef18, 0xef18, 0xef19, 0xf6f8, 0xf6f8, 0xeeb7, 0xac8f, 0x5984, 0x4080, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4080, 0x6206, 0xc552, 0xeed8, 0xeef8, 0xef18, 0xeef8, 0xeef8, 0xf6f8, 0xf719, 0xf75b, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef3a, 0xf6f8, 0xef18, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xa4d3, 0x38a1, 0x4060, 0x4080, 0x59a5, 0xd678, 0xffff,
  0xf7be, 0x942f, 0x40a1, 0x4040, 0x4061, 0x5a48, 0xef3c, 0xffff, 0xffff, 0xffff, 0xf7de, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf79c, 0xf77d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xf7bd, 0xef5b, 0xef19, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xeeb8, 0xa44e, 0x4943, 0x4080, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x3860, 0x59a4, 0xbcf1, 0xeed8, 0xef18, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xf6f8, 0xf719, 0xf75c, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffbe, 0xef39, 0xef18, 0xef38, 0xf7bd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdeda, 0x5165, 0x4040, 0x4860, 0x4903, 0xbd95, 0xffff,
  0xf79e, 0x838d, 0x4080, 0x4040, 0x4081, 0x8bae, 0xf79e, 0xffff, 0xffff, 0xffff, 0xf75b, 0xeef8, 0xef18, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xef18, 0xef18, 0xef3a, 0xffdf, 0xffff, 0xffff, 0xffff, 0xf7dd, 0xef5b, 0xef19, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xef18, 0xeef8, 0xeed8, 0xe677, 0x93cc, 0x38a0, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4102, 0xac6f, 0xeeb7, 0xeef8, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xf6f8, 0xf719, 0xf77c, 0xffde, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdd, 0xef39, 0xeef8, 0xef19, 0xff9d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe, 0xffff, 0xffff, 0xffff, 0xf77d, 0x6a48, 0x4060, 0x4040, 0x48e2, 0xb513, 0xffdf,
  0xef9d, 0x7b4c, 0x4040, 0x4060, 0x4061, 0x9c30, 0xffbe, 0xffff, 0xffff, 0xffff, 0xf77b, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef39, 0xffde, 0xffff, 0xffff, 0xffff, 0xffde, 0xf77b, 0xef19, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xef18, 0xef18, 0xf6f8, 0xe636, 0x7ae9, 0x4080, 0x4040, 0x4040, 0x4040, 0x4040, 0x48e2, 0x9c2e, 0xe6b7, 0xeef8, 0xf719, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xeef8, 0xf739, 0xf77c, 0xffde, 0xffff, 0xffff, 0xffbe, 0xf75b, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xef38, 0xf719, 0xef19, 0xf73a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf75a, 0xf77a, 0xf7bc, 0xffff, 0xffff, 0xf77d, 0x7289, 0x4060, 0x3840, 0x4081, 0x93ef, 0xf7be,
  0xef9d, 0x832c, 0x4060, 0x4040, 0x4081, 0x9c0f, 0xffde, 0xffff, 0xffff, 0xffff, 0xf77b, 0xeef8, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef19, 0xffde, 0xffff, 0xffff, 0xffff, 0xffde, 0xf75b, 0xef19, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xeef8, 0xeef8, 0xeef8, 0xf6f8, 0xcd32, 0x5123, 0x4040, 0x4040, 0x4060, 0x4060, 0x6a06, 0xe656, 0xeef9, 0xeef8, 0xf718, 0xf6f8, 0xeef8, 0xeef8, 0xeef8, 0xef18, 0xef18, 0xf73a, 0xf77c, 0xffde, 0xffff, 0xffff, 0xffbd, 0xef19, 0xf718, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xeef8, 0xf718, 0xf719, 0xef19, 0xef18, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xf79c, 0xffff, 0xffff, 0xf7be, 0x72ca, 0x4040, 0x4040, 0x4081, 0x8bce, 0xf7be,
  0xf79e, 0x834c, 0x4060, 0x4060, 0x4061, 0x93ee, 0xffde, 0xffff, 0xffff, 0xffff, 0xf75b, 0xeef8, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xef18, 0xf719, 0xffde, 0xffff, 0xffff, 0xffff, 0xffde, 0xf75b, 0xef19, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xeef8, 0xeef8, 0xeeb7, 0x9bad, 0x48a1, 0x4840, 0x4060, 0x4060, 0x4060, 0x5144, 0xb4b1, 0xf6b8, 0xf6f8, 0xeef8, 0xef18, 0xeef8, 0xeef8, 0xeef8, 0xef18, 0xef19, 0xf73a, 0xf77c, 0xffde, 0xffff, 0xffff, 0xffbe, 0xef3a, 0xef39, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xf718, 0xef18, 0xef39, 0xef39, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef1a, 0xf79d, 0xffff, 0xffff, 0xf7be, 0x72aa, 0x4040, 0x4840, 0x4081, 0x8bcf, 0xf7be,
  0xf79e, 0x836d, 0x4060, 0x4040, 0x4061, 0x8bae, 0xf7be, 0xffff, 0xffff, 0xffff, 0xf77c, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xef19, 0xf73a, 0xffde, 0xffff, 0xffff, 0xffff, 0xffde, 0xf75b, 0xef19, 0xeef8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xeef8, 0xeeb8, 0xacb0, 0x4902, 0x4860, 0x4840, 0x4060, 0x4060, 0x4060, 0x4081, 0x5164, 0xcd32, 0xf6d8, 0xeef8, 0xef18, 0xeef8, 0xeef8, 0xeef8, 0xef18, 0xef19, 0xf73a, 0xf77c, 0xffde, 0xffff, 0xffff, 0xffff, 0xfffe, 0xfffe, 0xffde, 0xffde, 0xffde, 0xffde, 0xffde, 0xffde, 0xffbd, 0xf73a, 0xf6f8, 0xf719, 0xff9c, 0xffde, 0xffde, 0xffde, 0xffde, 0xffde, 0xffde, 0xffde, 0xffde, 0xffdf, 0xffff, 0xffff, 0xf79d, 0x6a89, 0x4040, 0x4840, 0x40a2, 0xa4b2, 0xffdf,
  0xf79e, 0x93ef, 0x4081, 0x4060, 0x4060, 0x6a89, 0xef5c, 0xffff, 0xffff, 0xffff, 0xffde, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffbe, 0xf75b, 0xef19, 0xef18, 0xef18, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xbd32, 0x59e5, 0x4080, 0x4040, 0x4840, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x7aa9, 0xd5d4, 0xeed8, 0xeef8, 0xeef8, 0xf6f8, 0xeef8, 0xef18, 0xef18, 0xf739, 0xf77c, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef3a, 0xf6f8, 0xf719, 0xff9d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe71b, 0x59c6, 0x4060, 0x4040, 0x48e2, 0xb554, 0xffff,
  0xffbf, 0xad14, 0x48c3, 0x4060, 0x4060, 0x5165, 0xd658, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff9d, 0xf75b, 0xef19, 0xef18, 0xef18, 0xf6f8, 0xf6f8, 0xf6f8, 0xf6f8, 0xd5f5, 0x6a67, 0x40a0, 0x4080, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x48a1, 0x7ac9, 0xde36, 0xeef8, 0xf6f8, 0xf6f8, 0xeef8, 0xef18, 0xef18, 0xef39, 0xf75b, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xbdb5, 0x48a2, 0x4060, 0x4060, 0x5144, 0xc617, 0xffff,
  0xffdf, 0xce17, 0x5985, 0x4080, 0x4060, 0x4081, 0x93f0, 0xf77e, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf79c, 0xf75b, 0xef19, 0xef18, 0xef18, 0xf6f8, 0xf718, 0xeef8, 0xd5f5, 0x6226, 0x4060, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4081, 0x7ac9, 0xde36, 0xeef8, 0xeef8, 0xeef8, 0xef18, 0xef18, 0xef39, 0xef3a, 0xf79c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffbe, 0x730b, 0x4060, 0x4060, 0x4060, 0x6228, 0xe71b, 0xffff,
  0xffff, 0xef3b, 0x72ca, 0x3880, 0x4860, 0x4041, 0x4945, 0xd638, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffbe, 0xf77b, 0xf73a, 0xef19, 0xef18, 0xeef8, 0xeef8, 0xeed8, 0xcdb4, 0x72a8, 0x4081, 0x4060, 0x4860, 0x4060, 0x4060, 0x3860, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x40a1, 0x7ae9, 0xcdd4, 0xeef8, 0xeef7, 0xef18, 0xeef8, 0xf718, 0xef39, 0xef5b, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7de, 0xce38, 0x4924, 0x4040, 0x3860, 0x4080, 0x9410, 0xf79e, 0xffff,
  0xffff, 0xf7be, 0xacf3, 0x38c1, 0x4040, 0x4041, 0x4061, 0x838d, 0xef3c, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf79c, 0xf73a, 0xf719, 0xeed8, 0xeef8, 0xeef8, 0xeed8, 0xc532, 0x6a67, 0x40a1, 0x4060, 0x4040, 0x4040, 0x4861, 0x40a0, 0x48a0, 0x48a0, 0x5080, 0x4880, 0x4880, 0x4080, 0x4060, 0x4040, 0x4060, 0x40c1, 0x72c9, 0xd635, 0xeef8, 0xf6f8, 0xf6f8, 0xeef8, 0xf719, 0xef1a, 0xf77c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7de, 0xe71b, 0x730b, 0x3860, 0x4040, 0x3860, 0x4944, 0xce39, 0xffdf, 0xffff,
  0xffff, 0xffff, 0xe71c, 0x5a08, 0x4081, 0x4060, 0x4060, 0x5144, 0xb534, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7bd, 0xf75b, 0xef39, 0xef18, 0xeef8, 0xf6f8, 0xee97, 0xb4b0, 0x51a4, 0x40a0, 0x4060, 0x4040, 0x4040, 0x48a0, 0x8ae3, 0xb424, 0xb443, 0xb403, 0xabc4, 0xab63, 0xa344, 0x79e2, 0x4860, 0x4060, 0x3880, 0x4060, 0x4081, 0x7289, 0xc553, 0xeed8, 0xf719, 0xeed8, 0xf6f9, 0xeef9, 0xef1a, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef39, 0xf6f8, 0xf718, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef7d, 0x9450, 0x40e2, 0x3860, 0x4040, 0x3861, 0x83ae, 0xf79e, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffdf, 0xbd55, 0x4924, 0x4060, 0x3880, 0x4081, 0x59e6, 0xc5d6, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf79c, 0xef3a, 0xef18, 0xef18, 0xeef8, 0xddf5, 0x9bcd, 0x4923, 0x4080, 0x4080, 0x4060, 0x4040, 0x50e0, 0x9343, 0xe5c5, 0xf643, 0xf662, 0xf663, 0xf623, 0xf583, 0xed04, 0xd446, 0x8202, 0x48a0, 0x3880, 0x4060, 0x4040, 0x4061, 0x5985, 0xacb0, 0xde57, 0xeed9, 0xf6f8, 0xeef8, 0xef19, 0xef3b, 0xffbe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef3a, 0xf6f8, 0xef19, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79e, 0xa4d2, 0x4144, 0x3860, 0x4060, 0x4061, 0x59c7, 0xd69a, 0xffdf, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xef5d, 0x93cf, 0x48c3, 0x4060, 0x4060, 0x4080, 0x59c6, 0xbd75, 0xef9d, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf79c, 0xf73b, 0xf719, 0xf718, 0xe6b7, 0xbd12, 0x7288, 0x48e2, 0x4060, 0x4060, 0x4060, 0x4061, 0x50e0, 0xa362, 0xe5a3, 0xf642, 0xf641, 0xfe41, 0xfe41, 0xfe41, 0xfdc2, 0xed02, 0xe4a4, 0xd405, 0x8a42, 0x48a0, 0x4060, 0x4040, 0x4040, 0x4060, 0x5123, 0x7b0a, 0xc573, 0xeeb7, 0xf6f8, 0xeef8, 0xef19, 0xf75b, 0xffdd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xef5b, 0xef19, 0xef1a, 0xffbd, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef3c, 0x9c71, 0x4924, 0x4060, 0x4040, 0x4060, 0x4924, 0xacf3, 0xffdf, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xf7df, 0xdeba, 0x72aa, 0x4060, 0x4040, 0x3860, 0x3861, 0x5165, 0x9c71, 0xef5c, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf79c, 0xf75b, 0xf6f9, 0xf6f9, 0xddf5, 0x9bee, 0x5144, 0x4080, 0x4060, 0x4040, 0x4060, 0x4060, 0x5920, 0xabe3, 0xede3, 0xf641, 0xfe61, 0xfe41, 0xfe41, 0xfe61, 0xfe41, 0xfe01, 0xed41, 0xe4a3, 0xeca4, 0xdc44, 0x9282, 0x48a0, 0x4040, 0x4040, 0x4040, 0x4060, 0x4081, 0x5984, 0x9bed, 0xddf5, 0xf6d8, 0xf6f9, 0xef1a, 0xf75b, 0xffbe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xffde, 0xffbe, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xdeda, 0x8bce, 0x4903, 0x4060, 0x4040, 0x4840, 0x4082, 0x8bef, 0xe73c, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffdf, 0xf7de, 0xce38, 0x6228, 0x4081, 0x3840, 0x4060, 0x4060, 0x48c2, 0x730b, 0xce58, 0xf77d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xf79c, 0xf75b, 0xeed9, 0xddf5, 0x9bee, 0x59c5, 0x40a1, 0x4060, 0x4040, 0x4040, 0x4060, 0x4880, 0x69c1, 0xbc84, 0xf643, 0xf642, 0xf621, 0xfe42, 0xfe21, 0xfe42, 0xfe42, 0xfe42, 0xfe42, 0xf5c2, 0xece2, 0xf4c3, 0xf4a2, 0xec85, 0xa2e4, 0x5921, 0x4040, 0x4041, 0x4040, 0x4060, 0x4040, 0x40c2, 0x6a47, 0xbcf2, 0xd615, 0xeeb8, 0xef19, 0xef5c, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xef5d, 0xc596, 0x6a49, 0x40c1, 0x4080, 0x4060, 0x4060, 0x40a1, 0x6aca, 0xe71c, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xce58, 0x72a9, 0x48a2, 0x4060, 0x4060, 0x4840, 0x4861, 0x5164, 0x836d, 0xb555, 0xe6fb, 0xf79e, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffbe, 0xf77c, 0xeefa, 0xd636, 0xb512, 0x938c, 0x69e6, 0x40c1, 0x4080, 0x4060, 0x4040, 0x4060, 0x4060, 0x50e0, 0x82a2, 0xcd04, 0xee23, 0xf681, 0xf662, 0xf642, 0xf641, 0xfe41, 0xfe41, 0xf642, 0xfe42, 0xfe42, 0xfde3, 0xed02, 0xecc3, 0xf4a3, 0xf4a3, 0xe484, 0xbb84, 0x71a2, 0x4881, 0x4840, 0x4060, 0x4060, 0x4060, 0x4080, 0x4902, 0x6206, 0x93ac, 0xc512, 0xde36, 0xe6b8, 0xf75b, 0xffbd, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7de, 0xf7be, 0xf77d, 0xd679, 0xad13, 0x7aeb, 0x4904, 0x4041, 0x4060, 0x4080, 0x40a1, 0x4924, 0x8bce, 0xdeba, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xde99, 0x834c, 0x40c2, 0x4081, 0x4060, 0x4060, 0x4040, 0x4081, 0x5103, 0x6208, 0x8b8d, 0xad13, 0xd679, 0xd6ba, 0xdeda, 0xe6da, 0xe6ba, 0xde79, 0xd638, 0xbd54, 0x9c2f, 0x830b, 0x61e6, 0x4902, 0x4081, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4860, 0x69a3, 0xabe6, 0xe5a5, 0xf643, 0xf662, 0xf663, 0xf643, 0xf643, 0xf663, 0xf662, 0xf663, 0xf663, 0xf663, 0xf663, 0xfe03, 0xf504, 0xecc4, 0xecc4, 0xecc4, 0xecc3, 0xe4c4, 0xd446, 0x9aa4, 0x5901, 0x4060, 0x3840, 0x4060, 0x4060, 0x4060, 0x4060, 0x48a1, 0x5123, 0x6a06, 0x830a, 0xa450, 0xbd54, 0xcdf6, 0xde78, 0xde99, 0xde9a, 0xd679, 0xd659, 0xc5f7, 0xa4d2, 0x836d, 0x5a07, 0x48e2, 0x4080, 0x4060, 0x4060, 0x4060, 0x4061, 0x5104, 0x9410, 0xef3c, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xef5c, 0xacd3, 0x51a6, 0x38a1, 0x3880, 0x3861, 0x4040, 0x4840, 0x4040, 0x4060, 0x4061, 0x38a1, 0x40e2, 0x4944, 0x5165, 0x5144, 0x48e3, 0x48c2, 0x40a1, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4080, 0x4040, 0x4060, 0x4040, 0x4860, 0x48a0, 0x7a25, 0xa3a6, 0xa3a3, 0xa3a3, 0xa3a2, 0xa3c3, 0xa3c3, 0xa3a3, 0xa3a3, 0xa3a2, 0xa3a3, 0xa3a3, 0xa3a3, 0xa3a3, 0xa363, 0xa303, 0xa2e3, 0x9ae3, 0x9ae3, 0x9ae3, 0x9ae4, 0x92c3, 0x92c6, 0x69a3, 0x4880, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4081, 0x48a1, 0x4903, 0x5144, 0x5144, 0x4903, 0x40c2, 0x3881, 0x3861, 0x4061, 0x4061, 0x4060, 0x4040, 0x4080, 0x3860, 0x40a2, 0x59c7, 0xc596, 0xf79e, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xce38, 0x836d, 0x5165, 0x4081, 0x4061, 0x4060, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4880, 0x48a0, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4860, 0x4860, 0x4860, 0x4860, 0x4860, 0x4860, 0x4860, 0x4060, 0x4860, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x3860, 0x4060, 0x4040, 0x4080, 0x4060, 0x4061, 0x48c2, 0x59c6, 0x8bef, 0xdedb, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xef5c, 0xc5d6, 0x940f, 0x6248, 0x4103, 0x4060, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4081, 0x4903, 0x6a8a, 0xa4b2, 0xce38, 0xef7d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffdf, 0xf7be, 0xef3c, 0xc637, 0x838d, 0x6248, 0x40e3, 0x4081, 0x4061, 0x3840, 0x3860, 0x3860, 0x3860, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x3860, 0x3860, 0x3860, 0x3840, 0x3860, 0x3861, 0x3881, 0x40e3, 0x6228, 0x83ce, 0xce38, 0xef5c, 0xffbe, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf77d, 0xdedb, 0xd679, 0xbd96, 0x9c72, 0x9471, 0x9450, 0x940f, 0x6248, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x3881, 0x72eb, 0x9c51, 0x9c30, 0x9451, 0x9c72, 0xbd96, 0xd6ba, 0xdedb, 0xef5d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xf7de, 0xf7de, 0xf79d, 0xa4b2, 0x4081, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4060, 0x38c2, 0xb555, 0xf7be, 0xffde, 0xffdf, 0xffbe, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7ff, 0xffff, 0xffdf, 0xb534, 0x4081, 0x4040, 0x4040, 0x4060, 0x4040, 0x4060, 0x4060, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4060, 0x4124, 0xd679, 0xf7df, 0xf7de, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffff, 0xffff, 0xbd95, 0x40c2, 0x4080, 0x4060, 0x4040, 0x4861, 0x48a1, 0x48e1, 0x48e0, 0x48e0, 0x48e0, 0x48e0, 0x48e0, 0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50e0, 0x50e0, 0x50e0, 0x50e0, 0x50e0, 0x50e0, 0x50e0, 0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x48a0, 0x40a1, 0x4060, 0x4060, 0x4040, 0x4040, 0x4965, 0xe71c, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd679, 0x4944, 0x4080, 0x4060, 0x4060, 0x4880, 0x8ae4, 0xbc64, 0xbc82, 0xbc82, 0xbc63, 0xbc63, 0xbc63, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xc463, 0xbc03, 0xb382, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb363, 0xb343, 0x79c2, 0x4080, 0x4060, 0x4040, 0x4040, 0x51c7, 0xef3c, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef5c, 0x51e7, 0x4061, 0x4040, 0x4860, 0x4881, 0x9b43, 0xede4, 0xf642, 0xf642, 0xfe21, 0xfe21, 0xfe21, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xfe41, 0xf641, 0xf642, 0xf624, 0xf583, 0xe4c2, 0xecc3, 0xecc3, 0xecc3, 0xecc2, 0xecc2, 0xecc2, 0xecc3, 0xecc3, 0xecc3, 0xecc3, 0xecc3, 0xecc3, 0xe464, 0x81e2, 0x4080, 0x4060, 0x4040, 0x4061, 0x834d, 0xf79e, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffbe, 0x8bcf, 0x4061, 0x4060, 0x4880, 0x4061, 0x7a41, 0xdda2, 0xf641, 0xf641, 0xf641, 0xf641, 0xf641, 0xf661, 0xf661, 0xf661, 0xf661, 0xf641, 0xf641, 0xf641, 0xf641, 0xf641, 0xf641, 0xf641, 0xf641, 0xf641, 0xf660, 0xf641, 0xed82, 0xecc2, 0xecc4, 0xecc4, 0xf4c3, 0xf4c3, 0xf4c3, 0xf4c3, 0xf4a4, 0xf4a4, 0xf4a4, 0xf4a4, 0xf4c4, 0xecc4, 0xcc25, 0x6141, 0x4040, 0x4060, 0x4040, 0x40a1, 0xa4b2, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xbd75, 0x48a2, 0x4040, 0x4060, 0x4040, 0x5941, 0xc4c3, 0xf662, 0xfe42, 0xfe41, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xf661, 0xfe22, 0xf522, 0xecc2, 0xf4a3, 0xf4a3, 0xf4a3, 0xf4a3, 0xf4a3, 0xf4a3, 0xf4a3, 0xf4a3, 0xf4a3, 0xf4a2, 0xf4a3, 0xeca5, 0xb344, 0x50a0, 0x4040, 0x4060, 0x4060, 0x4944, 0xdeba, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe6fb, 0x5186, 0x4040, 0x4040, 0x4040, 0x48a0, 0x9b63, 0xf644, 0xfe42, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xfe61, 0xf641, 0xfe02, 0xed02, 0xf4c3, 0xf4a3, 0xf4a3, 0xf4c3, 0xf4c3, 0xf4c3, 0xf4c3, 0xecc3, 0xecc3, 0xecc3, 0xecc2, 0xf4e3, 0xe485, 0x8202, 0x4840, 0x4040, 0x4040, 0x4061, 0x6269, 0xef7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7be, 0x7b6d, 0x4061, 0x4040, 0x4040, 0x4060, 0x61c1, 0xddc4, 0xfe63, 0xfe62, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe63, 0xfe62, 0xfe62, 0xfe62, 0xf642, 0xf5e3, 0xed03, 0xf4c4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xecc4, 0xc3a4, 0x58e0, 0x4040, 0x4040, 0x4060, 0x40c2, 0xacf3, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xbd95, 0x4943, 0x3860, 0x4840, 0x4040, 0x40a0, 0x82e2, 0xa3a3, 0xa3c3, 0xa3c3, 0xa3c3, 0xa3a3, 0xa3a3, 0xa3a3, 0xa3a3, 0xa3a3, 0xa3c3, 0xa3c3, 0xa3c3, 0xa3c3, 0xa3c2, 0xa3c2, 0xa3c2, 0xa3c2, 0xa3c2, 0xa382, 0xa303, 0xa2e3, 0x9ae3, 0x9ae3, 0x9ae3, 0x9ae3, 0x9ae3, 0xa2e3, 0xa2e3, 0xa2e3, 0xa2e3, 0x9ae3, 0x9b03, 0x79c2, 0x4860, 0x4840, 0x4060, 0x3860, 0x59a6, 0xd658, 0xf7ff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xe71c, 0x72ea, 0x4060, 0x4820, 0x4040, 0x4060, 0x4080, 0x4880, 0x4880, 0x4880, 0x48a0, 0x48a0, 0x40a0, 0x40a0, 0x40a0, 0x48a0, 0x48a0, 0x48a0, 0x48a0, 0x4880, 0x48a0, 0x40a0, 0x40a0, 0x40a0, 0x48c0, 0x48a0, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x4880, 0x48a0, 0x48a0, 0x4060, 0x4060, 0x4840, 0x4060, 0x3881, 0x836d, 0xef5d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7be, 0xb534, 0x48c2, 0x4820, 0x4040, 0x4040, 0x4060, 0x4060, 0x4040, 0x3840, 0x3840, 0x4040, 0x4040, 0x4040, 0x4040, 0x3840, 0x4040, 0x4040, 0x3840, 0x3840, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4041, 0x4060, 0x4040, 0x4040, 0x5164, 0xc5f7, 0xffbf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xe71c, 0x6a69, 0x4061, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4861, 0x4081, 0x7b8e, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xb595, 0x4944, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4080, 0x4081, 0x5a07, 0xce59, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef9d, 0x9c91, 0x48e2, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4040, 0x4080, 0x4923, 0xb534, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xe75c, 0x6aab, 0x4061, 0x4040, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x3860, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x4040, 0x4040, 0x40a1, 0x8bad, 0xf77d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7be, 0xc5b7, 0x59a6, 0x4841, 0x4040, 0x4040, 0x4040, 0x4040, 0x4060, 0x4080, 0x50e1, 0x5101, 0x5101, 0x5101, 0x5101, 0x5101, 0x5101, 0x5101, 0x5101, 0x58e1, 0x58c1, 0x58c1, 0x50c0, 0x50c1, 0x50c1, 0x50c1, 0x50c0, 0x50c0, 0x50e1, 0x48c0, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x3840, 0x3881, 0x6a69, 0xd658, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7df, 0xf79d, 0xad13, 0x4924, 0x4041, 0x4040, 0x4040, 0x4040, 0x4040, 0x48a1, 0x82c5, 0xb465, 0xbc83, 0xbc83, 0xbc83, 0xc483, 0xc483, 0xc483, 0xc444, 0xbbc3, 0xbb84, 0xbb84, 0xbb84, 0xbb84, 0xbb63, 0xbb63, 0xbb64, 0xbb65, 0xab26, 0x71c3, 0x4060, 0x4040, 0x4040, 0x4040, 0x4060, 0x3860, 0x51a6, 0xc5f7, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79d, 0xacf3, 0x5103, 0x4040, 0x4060, 0x4060, 0x4040, 0x4021, 0x5941, 0xac03, 0xe604, 0xf642, 0xf641, 0xf641, 0xfe41, 0xf622, 0xf583, 0xed02, 0xeca3, 0xecc3, 0xece4, 0xecc4, 0xecc3, 0xecc3, 0xeca4, 0xdc45, 0x9a83, 0x58c1, 0x4060, 0x4060, 0x4060, 0x4860, 0x4060, 0x4965, 0xb575, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf7df, 0xf79d, 0xa4b2, 0x5165, 0x4060, 0x4060, 0x4040, 0x4041, 0x4040, 0x5100, 0x9322, 0xd543, 0xee22, 0xf641, 0xfe21, 0xf5a2, 0xed03, 0xecc2, 0xecc3, 0xf4c4, 0xeca3, 0xecc3, 0xf4c3, 0xe484, 0xc3c5, 0x8202, 0x5880, 0x4840, 0x4080, 0x3860, 0x4060, 0x4861, 0x59a6, 0xb513, 0xf7be, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7de, 0xef7d, 0xacd3, 0x4965, 0x4061, 0x4040, 0x4040, 0x4040, 0x4061, 0x48c1, 0x69e1, 0xabe3, 0xdd64, 0xf584, 0xf502, 0xf4a3, 0xeca3, 0xecc3, 0xecc3, 0xecc4, 0xeca5, 0xd405, 0x9aa3, 0x6121, 0x4880, 0x4060, 0x4040, 0x4060, 0x4040, 0x4081, 0x6228, 0xb554, 0xf79d, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf79e, 0xbdd6, 0x6a69, 0x4081, 0x4060, 0x4080, 0x4060, 0x4060, 0x4061, 0x50c0, 0x7a02, 0xb384, 0xe465, 0xf4a5, 0xf4a4, 0xeca3, 0xe4c4, 0xd465, 0xa304, 0x6981, 0x48a1, 0x4841, 0x4060, 0x4060, 0x4080, 0x4060, 0x4881, 0x6aaa, 0xd699, 0xf7de, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7ff, 0xd69a, 0x72ab, 0x48c2, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x50c0, 0x79c1, 0xab23, 0xd445, 0xd405, 0xaae3, 0x71a1, 0x4880, 0x3860, 0x4060, 0x4060, 0x4040, 0x4060, 0x4061, 0x4903, 0x7b2c, 0xdeba, 0xf7df, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf7df, 0xf7de, 0xdeba, 0x940f, 0x5986, 0x4081, 0x4060, 0x4060, 0x4060, 0x4060, 0x4060, 0x4860, 0x50a0, 0x6961, 0x6141, 0x48a1, 0x4040, 0x4040, 0x4060, 0x4060, 0x4060, 0x4060, 0x40a1, 0x5a07, 0xa4b2, 0xe71b, 0xffde, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffdf, 0xf77d, 0xc5f7, 0x72ca, 0x48c2, 0x4060, 0x4860, 0x4840, 0x4040, 0x4820, 0x4841, 0x4060, 0x4040, 0x3860, 0x4080, 0x4060, 0x4060, 0x4040, 0x4081, 0x4103, 0x838d, 0xd679, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xef3c, 0xa4d2, 0x51a5, 0x48c1, 0x4040, 0x4860, 0x4860, 0x4060, 0x4060, 0x4040, 0x4060, 0x4080, 0x4061, 0x4081, 0x40c2, 0x6268, 0xb575, 0xef7d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xf79e, 0xde9a, 0x9430, 0x6207, 0x48c2, 0x4080, 0x4080, 0x4060, 0x4060, 0x4060, 0x4080, 0x4903, 0x6a69, 0x9c71, 0xdeda, 0xf7de, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffde, 0xffdf, 0xf79e, 0xd69a, 0xacd3, 0x72ca, 0x4923, 0x3881, 0x4081, 0x4924, 0x7b0c, 0xb534, 0xdedb, 0xf79e, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf79d, 0xc5b6, 0x7b8d, 0x9430, 0xce38, 0xef7d, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xf7be, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffdf, 0xffdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
  0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
};

void setup() {
  tft.init();
  tft.fillScreen(TFT_WHITE);

  tft.setSwapBytes(true);

  int16_t x = (tft.width()/2) - (LOGO_WIDTH / 2); // Center horizontally
  int16_t y = (tft.height()/2) - (LOGO_HEIGHT / 2); // Center vertically

  tft.pushImage(x, y, LOGO_WIDTH, LOGO_HEIGHT, logo); // Draw a small bitmap
}

void loop() {
  // Do nothing
}


Spiegazione:

Animazioni di Disegno

Cerchio in movimento su un display TFT ILI9341.

Cerchio animato su TFT
/**
 * Simple Animation Example: Moving Circle on an ILI9341 TFT Display
 *
 *
 * Author: Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

void setup() {
  tft.init();
}

void loop() {
  for (int x = 0; x < tft.width(); x += 10) {
    tft.fillScreen(TFT_BLACK);
    tft.fillCircle(x, tft.height() / 2, 20, TFT_BLUE);
    delay(100); // Pause for smooth animation
  }
}

Spiegazione:

Gradienti di Colore Morbidi

/**
 * Create a dynamic gradient background on an ILI9341 TFT display using the TFT_eSPI library
 *
 *
 * Author: Renzo Mischianti <mischianti.org>
 */

#define USER_SETUP_LOADED //for not loading internal USER_SETTINGS

#include "User_Setup.h"
#include <TFT_eSPI.h>
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI();  // Invoke library

void setup() {
  tft.init();
}

void loop() {
  for (int i = 0; i < 256; i++) {
    tft.fillScreen(tft.color565(i, 0, 255 - i)); // Gradually change colors
    delay(10);
  }
}

Spiegazione:

Testo Scorrevole

void setup() {
  tft.init();
  tft.fillScreen(TFT_BLACK);
  tft.setTextSize(2);
}

void loop() {
  tft.fillScreen(TFT_BLACK);
  tft.drawString("Scrolling Text!", 10, 10);
  tft.scroll(0, -10); // Scroll text upwards
  delay(200);
}

Spiegazione:

Risoluzione dei Problemi

Se il display non funziona:

  1. Ricontrolla tutte le connessioni, specialmente i pin CS, DC e RST.
  2. Assicurati che l’ILI9341 sia alimentato correttamente (3.3V o 5V).
  3. Riduci la frequenza SPI per il test: #define SPI_FREQUENCY 20000000 // Riduci a 20 MHz
  4. Verifica che il file User_Setup.h corrisponda alla tua configurazione dei cavi.

Prossimi Passi

Ora che il display funziona, il prossimo tutorial tratterà:

Con questo tutorial, sei pronto per iniziare a usare il tuo ILI9341 con la libreria TFT_eSPI. Personalizza il codice in base alle esigenze del tuo progetto, da giochi interattivi a interfacce grafiche semplici!

Grazie

  1. ESP32: piedinatura, specifiche e configurazione dell’Arduino IDE
  2. ESP32: fileSystem integrato SPIFFS
  3. ESP32: gestire più seriali e logging per il debug
  4. ESP32 risparmio energetico pratico
    1. ESP32 risparmio energetico pratico: gestire WiFi e CPU
    2. ESP32 risparmio energetico pratico: modem e light sleep
    3. ESP32 risparmio energetico pratico: deep sleep e ibernazione
    4. ESP32 risparmio energetico pratico: preservare dati al riavvio, sveglia a tempo e tramite tocco
    5. ESP32 risparmio energetico pratico: sveglia esterna e da ULP
    6. ESP32 risparmio energetico pratico: sveglia da UART e GPIO
  5. ESP32: filesystem integrato LittleFS
  6. ESP32: filesystem integrato FFat (Fat/exFAT)
  7. ESP32-wroom-32
    1. ESP32-wroom-32: flash, piedinatura, specifiche e configurazione dell’Arduino IDE
  8. ESP32-CAM
    1. ESP32-CAM: piedinatura, specifiche e configurazione dell’Arduino IDE
    2. ESP32-CAM: upgrade CamerWebServer con gestione della luce flash
  9. ESP32: ethernet w5500 con chiamate standard (HTTP) e SSL (HTTPS)
  10. ESP32: ethernet enc28j60 con chiamate standard (HTTP) e SSL (HTTPS)
  11. Come usare la scheda SD con l’esp32
  12. esp32 e esp8266: file system FAT su memoria SPI flash esterna
  13. Gestione aggiornamenti firmware e OTA
    1. Gestione del firmware
      1. ESP32: flash del firmware binario compilato (.bin)
      2. ESP32: flash del firmware e filesystem (.bin) con strumenti grafici
    2. Aggiornamento OTA con Arduino IDE
      1. Aggiornamenti OTA su ESP32 con Arduino IDE: filesystem, firmware e password
    3. Aggiornamento OTA con browser web
      1. Aggiornamenti OTA su ESP32 tramite browser web: firmware, filesystem e autenticazione
      2. Aggiornamenti OTA su ESP32 tramite browser web: caricamento in HTTPS (SSL/TLS) con certificato autofirmato
      3. Aggiornamenti OTA su ESP32 tramite browser web: interfaccia web personalizzata
    4. Aggiornamenti automatici OTA da un server HTTP
      1. Aggiornamento automatico Firmware OTA dell’ESP32 dal server
      2. Aggiornamento automatico Firmware OTA dell’ESP32 dal server con controllo della versione
      3. Aggiornamento automatico Firmware OTA dell’ESP32 in HTTPS (SSL/TLS) con certificato autofirmato affidabile
    5. Aggiornamento del firmware non standard
      1. Aggiornamento firmware e filesystem ESP32 dalla scheda SD
      2. Aggiornamento firmware e filesystem ESP32 con client FTP
  14. Integrare LAN8720 con ESP32 per la connettività Ethernet con plain (HTTP) e SSL (HTTPS)
  15. Collegare l’EByte E70 (CC1310) ai dispositivi ESP32 c3/s3 ed un semplice sketch di esempio
  16. ESP32-C3: piedinatura, specifiche e configurazione dell’IDE Arduino
  17. Integrazione del modulo W5500 su ESP32 con Core 3: supporto nativo ai protocolli Ethernet con SSL e altre funzionalità
  18. Integrazione del modulo LAN8720 su ESP32 con Core 3: supporto nativo del protocollo Ethernet con SSL e altre funzionalità.
  19. Dallas DS18B20
  20. Guida all’I2C su ESP32: comunicazione con dispositivi eterogenei 5v 3.3v, gestione interfacce aggiuntive
  21. Display

Spread the love
Exit mobile version