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(¤tCode[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(¤tCode[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
}