Arduino IR Controller Code v2


May 31, 2026


#include <avr/pgmspace.h>
// --------------------------------------------------------
// OPTIMIZED IR CODES (8-bit Multipliers)
// --------------------------------------------------------

const uint8_t c0[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c1[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c2[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c3[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c4[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c5[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c6[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c7[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c8[] PROGMEM = {6, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 156};

const uint8_t c9[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c10[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 78, 16, 4, 1, 174};

const uint8_t c11[] PROGMEM = {1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c12[] PROGMEM = {1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c13[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c14[] PROGMEM = {8, 4, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110};

const uint8_t c15[] PROGMEM = {8, 4, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110};

const uint8_t c16[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c17[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c18[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c19[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c20[] PROGMEM = {1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 5, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27};

const uint8_t c21[] PROGMEM = {6, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 155};

const uint8_t c22[] PROGMEM = {6, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 155};

const uint8_t c23[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 78, 16, 4, 1, 174};

const uint8_t c24[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c25[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c26[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c27[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c28[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c29[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c30[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c31[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c32[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c33[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c34[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 33};

const uint8_t c35[] PROGMEM = {16, 8, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c36[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c37[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c38[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 78, 16, 4, 1, 174};

const uint8_t c39[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 78};

const uint8_t c40[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c41[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c42[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 102};

const uint8_t c43[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 102};

const uint8_t c44[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 102};

const uint8_t c45[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 102};

const uint8_t c46[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c47[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c48[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 101};

const uint8_t c49[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c50[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c51[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c52[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 78};

const uint8_t c53[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c54[] PROGMEM = {1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 7, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 165, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 7, 1, 7, 1, 7, 1, 3, 1, 7, 1, 165};

const uint8_t c55[] PROGMEM = {1, 7, 1, 7, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 80};

const uint8_t c56[] PROGMEM = {1, 7, 1, 7, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 80};

const uint8_t c57[] PROGMEM = {1, 7, 1, 7, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 80};

const uint8_t c58[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c59[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c60[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c61[] PROGMEM = {8, 4, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 173};

const uint8_t c62[] PROGMEM = {8, 4, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 173};

const uint8_t c63[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c64[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c65[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c66[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 2, 1, 15};

const uint8_t c67[] PROGMEM = {16, 8, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c68[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c69[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c70[] PROGMEM = {8, 4, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 173};

const uint8_t c71[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c72[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c73[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c74[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c75[] PROGMEM = {1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 7, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 165, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 7, 1, 7, 1, 7, 1, 3, 1, 7, 1, 165};

const uint8_t c76[] PROGMEM = {1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 7, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 165, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 7, 1, 7, 1, 7, 1, 3, 1, 7, 1, 165};

const uint8_t c77[] PROGMEM = {4, 4, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 39};

const uint8_t c78[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c79[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 78};

const uint8_t c80[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

// --------------------------------------------------------
// MASTER TABLES
// --------------------------------------------------------

const uint8_t* const allCodes[] PROGMEM = {c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80};

const uint16_t baseUnits[] = {564, 889, 564, 564, 500, 500, 564, 564, 444, 564, 564, 889, 889, 564, 400, 400, 460, 460, 460, 460, 500, 444, 444, 564, 564, 564, 564, 564, 564, 564, 527, 527, 527, 527, 527, 564, 564, 564, 564, 564, 889, 889, 889, 889, 889, 889, 564, 889, 889, 564, 564, 564, 564, 564, 264, 300, 300, 300, 564, 564, 500, 432, 432, 889, 564, 460, 460, 500, 500, 564, 432, 460, 460, 564, 564, 264, 264, 872, 564, 564, 564}; // Base microsecond multiplier per code

const uint8_t codeLengths[] = {72, 24, 68, 72, 38, 38, 72, 72, 70, 72, 72, 22, 22, 68, 100, 100, 52, 52, 52, 52, 42, 64, 68, 72, 72, 72, 72, 72, 72, 72, 36, 36, 36, 36, 36, 72, 72, 72, 72, 68, 24, 24, 24, 24, 22, 22, 72, 24, 26, 72, 72, 72, 68, 72, 64, 34, 34, 34, 72, 72, 38, 100, 100, 24, 68, 52, 52, 38, 38, 72, 100, 52, 52, 68, 72, 64, 64, 52, 72, 68, 72}; // Number of values in each array

const uint8_t totalCodes = 81;
 // Include the file generated by PowerShell

// Define the 4 free pins for our circle animation
const int segA = 0; // Physical Pin 5
const int segB = 2; // Physical Pin 7
const int segG = 3; // Physical Pin 2
const int segF = 4; // Physical Pin 3


void setup() {
  pinMode(1, OUTPUT); // PB1 (Physical Pin 6)

// Set our display pins as outputs
  pinMode(segA, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segG, OUTPUT);
  pinMode(segF, OUTPUT);

}

// Updated to uint32_t to handle massive trailing pauses safely
void mark(uint32_t time) {
  // 38kHz carrier logic for 8MHz ATtiny85
  TCCR1 = _BV(CTC1) | _BV(PWM1A) | _BV(COM1A1) | _BV(CS10);
  
  // 8,000,000 / 38,000 = 210.5
  OCR1C = 210; // NEW: Timer resets at 210 to hit 38kHz
  OCR1A = 105; // NEW: Duty cycle is exactly half of OCR1C (50%)
  
#include <avr/pgmspace.h>
// --------------------------------------------------------
// OPTIMIZED IR CODES (8-bit Multipliers)
// --------------------------------------------------------

const uint8_t c0[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c1[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c2[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c3[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c4[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c5[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c6[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c7[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c8[] PROGMEM = {6, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 156};

const uint8_t c9[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c10[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 78, 16, 4, 1, 174};

const uint8_t c11[] PROGMEM = {1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c12[] PROGMEM = {1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c13[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c14[] PROGMEM = {8, 4, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110};

const uint8_t c15[] PROGMEM = {8, 4, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 110};

const uint8_t c16[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c17[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c18[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c19[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c20[] PROGMEM = {1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 5, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27};

const uint8_t c21[] PROGMEM = {6, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 155};

const uint8_t c22[] PROGMEM = {6, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 155};

const uint8_t c23[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 78, 16, 4, 1, 174};

const uint8_t c24[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c25[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c26[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c27[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c28[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c29[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c30[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c31[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c32[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c33[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 43};

const uint8_t c34[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 33};

const uint8_t c35[] PROGMEM = {16, 8, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c36[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c37[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c38[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 78, 16, 4, 1, 174};

const uint8_t c39[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 78};

const uint8_t c40[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c41[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c42[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 102};

const uint8_t c43[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 102};

const uint8_t c44[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 102};

const uint8_t c45[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 102};

const uint8_t c46[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c47[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c48[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 101};

const uint8_t c49[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c50[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c51[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c52[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 78};

const uint8_t c53[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c54[] PROGMEM = {1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 7, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 165, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 7, 1, 7, 1, 7, 1, 3, 1, 7, 1, 165};

const uint8_t c55[] PROGMEM = {1, 7, 1, 7, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 80};

const uint8_t c56[] PROGMEM = {1, 7, 1, 7, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 80};

const uint8_t c57[] PROGMEM = {1, 7, 1, 7, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 80};

const uint8_t c58[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c59[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c60[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c61[] PROGMEM = {8, 4, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 173};

const uint8_t c62[] PROGMEM = {8, 4, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 173};

const uint8_t c63[] PROGMEM = {1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 102};

const uint8_t c64[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c65[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c66[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 2, 1, 15};

const uint8_t c67[] PROGMEM = {16, 8, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c68[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 45};

const uint8_t c69[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c70[] PROGMEM = {8, 4, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 173};

const uint8_t c71[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c72[] PROGMEM = {8, 8, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 2, 1, 4, 1, 4, 1, 4, 1, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1, 4, 1, 2, 1, 2, 1, 2, 1, 4, 1, 2, 1, 4, 1, 15};

const uint8_t c73[] PROGMEM = {16, 8, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78};

const uint8_t c74[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c75[] PROGMEM = {1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 7, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 165, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 7, 1, 7, 1, 7, 1, 3, 1, 7, 1, 165};

const uint8_t c76[] PROGMEM = {1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 7, 1, 3, 1, 7, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 165, 1, 7, 1, 3, 1, 3, 1, 3, 1, 3, 1, 7, 1, 3, 1, 3, 1, 7, 1, 3, 1, 7, 1, 7, 1, 7, 1, 3, 1, 7, 1, 165};

const uint8_t c77[] PROGMEM = {4, 4, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 39};

const uint8_t c78[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

const uint8_t c79[] PROGMEM = {16, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 78};

const uint8_t c80[] PROGMEM = {16, 8, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 78, 16, 4, 1, 174};

// --------------------------------------------------------
// MASTER TABLES
// --------------------------------------------------------

const uint8_t* const allCodes[] PROGMEM = {c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, c71, c72, c73, c74, c75, c76, c77, c78, c79, c80};

const uint16_t baseUnits[] = {564, 889, 564, 564, 500, 500, 564, 564, 444, 564, 564, 889, 889, 564, 400, 400, 460, 460, 460, 460, 500, 444, 444, 564, 564, 564, 564, 564, 564, 564, 527, 527, 527, 527, 527, 564, 564, 564, 564, 564, 889, 889, 889, 889, 889, 889, 564, 889, 889, 564, 564, 564, 564, 564, 264, 300, 300, 300, 564, 564, 500, 432, 432, 889, 564, 460, 460, 500, 500, 564, 432, 460, 460, 564, 564, 264, 264, 872, 564, 564, 564}; // Base microsecond multiplier per code

const uint8_t codeLengths[] = {72, 24, 68, 72, 38, 38, 72, 72, 70, 72, 72, 22, 22, 68, 100, 100, 52, 52, 52, 52, 42, 64, 68, 72, 72, 72, 72, 72, 72, 72, 36, 36, 36, 36, 36, 72, 72, 72, 72, 68, 24, 24, 24, 24, 22, 22, 72, 24, 26, 72, 72, 72, 68, 72, 64, 34, 34, 34, 72, 72, 38, 100, 100, 24, 68, 52, 52, 38, 38, 72, 100, 52, 52, 68, 72, 64, 64, 52, 72, 68, 72}; // Number of values in each array

const uint8_t totalCodes = 81;


void setup() {
  // PB4 (Physical Pin 3) is Arduino pin 4
  pinMode(4, OUTPUT); 
}

void mark(uint32_t time) {
  // 38kHz carrier logic for 8MHz ATtiny85
  // Shifted to use Channel B for PB4 (OC1B) output
  TCCR1 = _BV(CTC1) | _BV(CS10);     // CTC mode, no prescaler
  GTCCR = _BV(PWM1B) | _BV(COM1B1);  // Enable PWM B, clear on match

  // 8,000,000 / 38,000 = 210.5
  OCR1C = 210; // Timer resets at 210 to hit 38kHz
  OCR1B = 105; // Duty cycle is exactly half of OCR1C (50%) for Channel B
  
  customDelay(time);
}

void space(uint32_t time) {
  TCCR1 = 0; // Turn off main timer
  GTCCR = 0; // Turn off PWM Channel B
  digitalWrite(4, LOW); // Ensure PB4 stays low
  
  customDelay(time);
}

// Handles durations longer than 16383us which delayMicroseconds fails at
void customDelay(uint32_t us) {
  while (us > 15000) {
    delayMicroseconds(15000);
    us -= 15000;
  }
  delayMicroseconds(us); // Handle the remainder
}

void loop() {
  for (uint8_t i = 0; i < totalCodes; i++) {
    
    // 1. Get pointer to the current code array
    const uint8_t* currentCode = (const uint8_t*)pgm_read_word(&(allCodes[i]));
    
    // 2. Get the length and base unit for this specific code
    uint8_t len = codeLengths[i];
    uint16_t baseUnit = baseUnits[i];

    // 3. Repeat each code exactly twice
    for (uint8_t rep = 0; rep < 2; rep++) {
      
      for (uint8_t j = 0; j < len; j++) {
        // Read the 8-bit multiplier from PROGMEM
        uint8_t multiplier = pgm_read_byte(&currentCode[j]);
        
        // Calculate actual duration
        uint32_t duration = (uint32_t)multiplier * baseUnit;

        if (j % 2 == 0) mark(duration); // Even = Pulse
        else space(duration);           // Odd = Gap
      }
      space(0); // Ensure off
      
      // Standard 150ms gap between identical blasts so the TV recognizes them
      delay(150); 
    }

    // 100ms gap before moving to the next TV brand
    delay(100); 
  }
  
  // No delay here; the list immediately starts over from the beginning
}  customDelay(time);
}

// Updated to uint32_t
void space(uint32_t time) {
  TCCR1 = 0; // Turn off carrier
  digitalWrite(1, LOW);
  customDelay(time);
}

// Handles durations longer than 16383us which delayMicroseconds fails at
// Updated to uint32_t
void customDelay(uint32_t us) {
  while (us > 15000) {
    delayMicroseconds(15000);
    us -= 15000;
  }
  delayMicroseconds(us); // Handle the remainder
}

void loop() {
  for (uint8_t i = 0; i < totalCodes; i++) {

// --- 1. DETERMINE WHICH SEGMENT TO LIGHT ---
    // --- 1. CALCULATE PROGRESS BAR TIER ---
    // Multiplies current code by 4, divides by total, adds 1.
    // Result will always be 1, 2, 3, or 4.
    // (Cast to uint16_t prevents math overflow since 81 * 4 = 324)
    uint8_t numActive = ((uint16_t)i * 4) / totalCodes + 1; 
    
    // Make sure all segments start clean
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segG, LOW);
    digitalWrite(segF, LOW);

    // --- 2. LIGHT THE PROGRESS BAR ---
    // If numActive is 3, it lights A, B, and G simultaneously.
    if (numActive >= 1) digitalWrite(segA, HIGH);      // Q1: Top
    if (numActive >= 2) digitalWrite(segB, HIGH);      // Q2: Top + Top Right
    if (numActive >= 3) digitalWrite(segG, HIGH);      // Q3: Top + Top Right + Middle
    if (numActive >= 4) digitalWrite(segF, HIGH);      // Q4: All Four

  // tv codes
    // 1. Get pointer to the current code array (Now uint8_t*)
    const uint8_t* currentCode = (const uint8_t*)pgm_read_word(&(allCodes[i]));
    
    // 2. Get the length and base unit for this specific code
    uint8_t len = codeLengths[i];
    uint16_t baseUnit = baseUnits[i];

    for (uint8_t j = 0; j < len; j++) {
      // 3. Read the 8-bit multiplier from PROGMEM
      uint8_t multiplier = pgm_read_byte(&currentCode[j]);
      
      // 4. Calculate actual duration (Cast to uint32_t to prevent math overflow)
      uint32_t duration = (uint32_t)multiplier * baseUnit;

      if (j % 2 == 0) mark(duration); // Even = Pulse
      else space(duration);           // Odd = Gap
    }
    space(0); // Ensure off
    
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segG, LOW);
    digitalWrite(segF, LOW);

    
    delay(100); // 100ms gap between different TV codes
  }
  
  delay(10000); // Wait 10 seconds before starting the whole list again
}