From abbf4926414173dc31477867cebb53458306b5c3 Mon Sep 17 00:00:00 2001 From: Brian Hill Date: Fri, 20 Dec 2024 21:36:37 -0500 Subject: [PATCH] updated firmware and added to qmk_firmware repo --- firmware/{ver0 => }/rev0/config.h | 14 - firmware/{ver0 => }/rev0/keyboard.json | 9 +- firmware/rev0/keymaps/default/keymap.c | 47 ++ firmware/{ver0 => }/rev0/mcuconf.h | 0 .../rev0/keymaps/via/keymap.c => rev0/rev0.c} | 299 ++++---- firmware/rev0/rev0.h | 21 + .../trojan_pinata_model_b_rev0_default.uf2 | Bin 0 -> 77312 bytes firmware/ver0/readme.md | 36 - firmware/ver0/rev0/keymaps/default/keymap.c | 654 ------------------ firmware/ver0/rev0/keymaps/via/rules.mk | 1 - firmware/ver0/rules.mk | 6 - .../trojan_pinata_model_b_rev0_default.uf2 | Bin 80384 -> 0 bytes 12 files changed, 252 insertions(+), 835 deletions(-) rename firmware/{ver0 => }/rev0/config.h (53%) rename firmware/{ver0 => }/rev0/keyboard.json (97%) create mode 100644 firmware/rev0/keymaps/default/keymap.c rename firmware/{ver0 => }/rev0/mcuconf.h (100%) rename firmware/{ver0/rev0/keymaps/via/keymap.c => rev0/rev0.c} (51%) create mode 100644 firmware/rev0/rev0.h create mode 100644 firmware/trojan_pinata_model_b_rev0_default.uf2 delete mode 100644 firmware/ver0/readme.md delete mode 100644 firmware/ver0/rev0/keymaps/default/keymap.c delete mode 100644 firmware/ver0/rev0/keymaps/via/rules.mk delete mode 100644 firmware/ver0/rules.mk delete mode 100644 firmware/ver0/trojan_pinata_model_b_rev0_default.uf2 diff --git a/firmware/ver0/rev0/config.h b/firmware/rev0/config.h similarity index 53% rename from firmware/ver0/rev0/config.h rename to firmware/rev0/config.h index f896162..df90591 100644 --- a/firmware/ver0/rev0/config.h +++ b/firmware/rev0/config.h @@ -3,26 +3,12 @@ #pragma once - -#define DEBUG_MATRIX_SCAN_RATE - -//#define QMK_WAITING_TEST_BUSY_PIN GP8 -//#define QMK_WAITING_TEST_YIELD_PIN GP9 - #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET -#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP25 #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U // settings for the oled keyboard demo with Adafruit 0.91" OLED display on the Stemma QT port -#define OLED_DISPLAY_128X32 #define I2C_DRIVER I2CD0 #define I2C1_SDA_PIN GP0 #define I2C1_SCL_PIN GP1 -#define OLED_BRIGHTNESS 255 // you can reduce the brightness, but not make it brighter! #define OLED_TIMEOUT 3000000 // 5 minutes before oled turns off - -#define ENCODERS_PAD_A { GP27 } -#define ENCODERS_PAD_B { GP26 } - -#define ENCODER_RESOLUTION 4 diff --git a/firmware/ver0/rev0/keyboard.json b/firmware/rev0/keyboard.json similarity index 97% rename from firmware/ver0/rev0/keyboard.json rename to firmware/rev0/keyboard.json index e59a983..82d712d 100644 --- a/firmware/ver0/rev0/keyboard.json +++ b/firmware/rev0/keyboard.json @@ -4,13 +4,20 @@ "maintainer": "Trojan_Pinata", "bootloader": "rp2040", "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "GP27", "pin_b": "GP26"} + ] + }, "features": { "bootmagic": true, "command": false, "console": false, "extrakey": true, "mousekey": true, - "nkro": true + "nkro": true, + "oled": true, + "encoder": true }, "matrix_pins": { "cols": ["GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21", "GP22"], diff --git a/firmware/rev0/keymaps/default/keymap.c b/firmware/rev0/keymaps/default/keymap.c new file mode 100644 index 0000000..56c4657 --- /dev/null +++ b/firmware/rev0/keymaps/default/keymap.c @@ -0,0 +1,47 @@ +/* Copyright 2024 Brian H (@Trojan_Pinata) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +// keymaps +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, + + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, QK_KB, KC_ENT, KC_HOME, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + [1] = LAYOUT( + QK_BOOT, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, + + EE_CLR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, + DB_TOGG, _______, _______, KC_MYCM, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MSTP, + _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, + _______, _______, _______, _______, _______, _______, _______, KC_EXEC, _______, _______ + ) +}; + +// encoder handling +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(_______, _______) }, +}; +#endif diff --git a/firmware/ver0/rev0/mcuconf.h b/firmware/rev0/mcuconf.h similarity index 100% rename from firmware/ver0/rev0/mcuconf.h rename to firmware/rev0/mcuconf.h diff --git a/firmware/ver0/rev0/keymaps/via/keymap.c b/firmware/rev0/rev0.c similarity index 51% rename from firmware/ver0/rev0/keymaps/via/keymap.c rename to firmware/rev0/rev0.c index 32e11ed..02cd92f 100644 --- a/firmware/ver0/rev0/keymaps/via/keymap.c +++ b/firmware/rev0/rev0.c @@ -14,56 +14,38 @@ * along with this program. If not, see . */ -#include QMK_KEYBOARD_H +#include "rev0.h" -// screen aliases -#define MTNS 0 -#define INFO 1 -#define LOGO 2 -#define NUM_MODES 3 -uint8_t display_mode = INFO; // defaults to 1 in case of no value +// NUM_MODES stays last to indicate the number of different screens possible +enum oled_modes { + MTNS, INFO, LOGO, MEW, CEL, RAY, NUM_MODES +}; -// key that changes OLED -#define OLED_MOD KC_F13 +// define the key that switches the display +enum keeb_codes { + OLED_MOD = QK_KB, +}; // virtual eeprom for storing last layer typedef union { uint32_t raw; struct { - uint8_t display_mode_saved :NUM_MODES; + uint8_t display_mode_saved : 3; }; -} user_config_t; -user_config_t user_config; - -// keymaps -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, - - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_F13, KC_ENT, KC_HOME, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - [1] = LAYOUT( - QK_BOOT, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, +} keyboard_config_t; +keyboard_config_t keyboard_config; - EE_CLR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, - DB_TOGG, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_EXEC, KC_TRNS, KC_TRNS - ) -}; +void keyboard_pre_init_kb(void) { + keyboard_config.raw = eeconfig_read_kb(); + keyboard_pre_init_user(); +} -// encoder handling -#if defined(ENCODER_MAP_ENABLE) -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, -}; -#endif +void eeconfig_init_kb(void) { + keyboard_config.raw = 0; + keyboard_config.display_mode_saved = INFO; + eeconfig_update_kb(keyboard_config.raw); + eeconfig_init_user(); +} // oled stuff below #ifdef OLED_ENABLE @@ -105,43 +87,7 @@ static const char PROGMEM bootscreen[] = { 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const char PROGMEM invertlogo[] = { - // 'modelb-oled_inv', 128x32px - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf0, 0x80, 0x01, - 0x0f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x01, 0xc0, 0xf8, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0x0f, 0x03, 0x01, 0xc0, 0xf0, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8, 0xe0, - 0xc0, 0x01, 0x03, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, - 0xf0, 0xe0, 0x01, 0x03, 0x07, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, - 0x3e, 0x3e, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1e, - 0x1e, 0x1e, 0x1c, 0x00, 0x00, 0x40, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, - 0xe0, 0x80, 0x03, 0x0f, 0x01, 0x80, 0xf0, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xf8, 0xe0, 0xc0, 0x81, 0x07, 0x0f, 0x1f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x83, - 0x80, 0xc0, 0xe0, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, - 0x07, 0x83, 0xc0, 0xe0, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, - 0x3e, 0x3e, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, - 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, - 0x3e, 0x3e, 0x3e, 0x1e, 0x00, 0x00, 0x80, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, - 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, - 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff -}; - -static const char PROGMEM layer0[] = { +static const char PROGMEM mnts_l0[] = { // 'base', 128x32px 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xa0, 0xb0, 0xf0, 0xd0, 0xd0, 0xf8, 0xfc, 0xdc, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xde, 0xde, 0x9c, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0x90, 0xa0, 0x40, @@ -177,7 +123,7 @@ static const char PROGMEM layer0[] = { 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x06, 0x06, 0x0c, 0x08, 0x08, 0x10, 0x30, 0x20, 0x20, 0x60 }; -static const char PROGMEM layer1[] = { +static const char PROGMEM mnts_l1[] = { // 'alt', 128x32px 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xa0, 0xb0, 0xf0, 0xd0, 0xd0, 0xf8, 0xfc, 0xdc, 0xfe, 0xff, 0xff, 0xff, 0xdf, 0xde, 0xde, 0x9c, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0x90, 0xa0, 0x40, @@ -213,17 +159,137 @@ static const char PROGMEM layer1[] = { 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x06, 0x06, 0x0c, 0x08, 0x08, 0x10, 0x30, 0x20, 0x20, 0x60 }; +static const char PROGMEM mew_disp[] = { + // 'mewl2', 128x32px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, + 0x60, 0x50, 0x10, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, + 0x04, 0xc4, 0xf2, 0xfa, 0x7e, 0x3e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0xa0, 0x20, 0x00, 0x10, + 0x10, 0x10, 0x10, 0x0c, 0x02, 0x22, 0x42, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xf2, 0xf2, 0xc2, 0x01, 0x00, 0xc0, 0xa0, 0xe0, 0x28, + 0x50, 0x00, 0x00, 0x00, 0x01, 0x1a, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0xe0, + 0xff, 0xff, 0xc7, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0x78, 0x78, 0x3c, 0x3c, 0x1c, 0x1c, 0x3c, 0x38, + 0x78, 0xf0, 0xe0, 0xc0, 0x00, 0x01, 0x06, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x41, 0xc0, 0x80, + 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x61, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x8c, 0xd9, 0x7b, 0x53, 0x10, + 0x08, 0x18, 0x38, 0x3c, 0x36, 0x2f, 0x6b, 0x75, 0x92, 0xee, 0x18, 0xe4, 0xfc, 0x78, 0x00, 0xc1, + 0xb7, 0xcf, 0xf3, 0xfc, 0xfd, 0xef, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xfe, 0xf9, + 0xf0, 0xf9, 0xff, 0x7f, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x90, + 0x08, 0x09, 0x9f, 0xff, 0xff, 0xf8, 0x00, 0x38, 0xc6, 0x81, 0x8e, 0x70, 0x50, 0x50, 0x53, 0xe2, + 0x83, 0x01, 0x62, 0xab, 0xa8, 0xa8, 0x50, 0x54, 0x50, 0x89, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x0d, 0x0c, 0x04, 0x06, 0x1e, 0x6e, + 0x80, 0x00, 0x00, 0x38, 0x08, 0x84, 0xc4, 0xfe, 0x07, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x3e, 0x7f, + 0x7f, 0x3f, 0x0f, 0x01, 0x83, 0x7c, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xc8, 0x84, 0x86, 0xcf, + 0xb7, 0x81, 0x80, 0x41, 0x43, 0x8c, 0x92, 0xe1, 0x61, 0x53, 0x2e, 0x11, 0x11, 0x19, 0x2c, 0xd0, + 0x20, 0x41, 0x40, 0x40, 0x24, 0x30, 0x20, 0x20, 0xf0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static const char PROGMEM cel_disp[] = { + // 'celebi1', 128x32px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, + 0x20, 0xc0, 0xe0, 0xe0, 0xf0, 0xdc, 0xee, 0xf0, 0xbe, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0xc0, 0x81, 0x80, 0x80, 0xc0, + 0xc0, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x80, 0xc0, 0xc0, 0xc0, + 0x60, 0xb0, 0xcc, 0xf0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xc0, 0xf8, 0xfc, 0xfc, 0xfb, + 0xf4, 0xff, 0xff, 0x7f, 0x1f, 0xcf, 0x67, 0xe3, 0xc7, 0x0f, 0x9f, 0xff, 0x3e, 0xc0, 0xf0, 0x78, + 0x90, 0xe0, 0xf2, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x3f, + 0x3f, 0x3b, 0x3e, 0x79, 0xfe, 0xfe, 0xff, 0xfe, 0x7c, 0xfc, 0xf8, 0xd8, 0xf0, 0xf0, 0xb0, 0xa0, + 0xa0, 0xa0, 0xe0, 0xe0, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x31, 0x40, 0xf0, 0xf8, 0xfc, 0xfe, 0xf0, 0xff, 0xf0, 0xff, 0x7f, 0x3f, 0xbf, 0x9f, + 0x9f, 0x1f, 0x3f, 0xfe, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x87, 0x8f, 0x9f, + 0x9f, 0x9f, 0xc7, 0xcc, 0xd8, 0xd8, 0x98, 0x3c, 0xfc, 0xf7, 0xfb, 0x1c, 0x1d, 0x1e, 0x1e, 0x1f, + 0x0f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x87, 0xcf, 0x6d, 0xf8, 0x72, 0xf4, + 0xf4, 0x90, 0x20, 0x20, 0xa7, 0x6f, 0x6f, 0x6b, 0x0b, 0x06, 0x06, 0x05, 0x05, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, + 0xc0, 0xc0, 0xc0, 0xc0, 0x83, 0x8f, 0x9f, 0x3f, 0x7f, 0x5f, 0xff, 0x71, 0xe0, 0xe1, 0x60, 0x62, + 0x27, 0x30, 0x18, 0x9f, 0xcf, 0xc3, 0xc0, 0xc0, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0xe0, 0xe0, 0xc8, 0x9c, 0xf8, 0x60, 0x28, 0x3c, 0x7e, 0x7e, 0xfe, 0xff, 0xfc, 0xe1, + 0x07, 0x1f, 0x3f, 0x3e, 0x7d, 0x7b, 0x73, 0x72, 0xe2, 0xe0, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, + 0x01, 0x01, 0xc1, 0xc1, 0x03, 0x03, 0x03, 0x23, 0x01, 0x0d, 0x06, 0x07, 0x37, 0x33, 0x01, 0x01, + 0x07, 0x0e, 0x3c, 0x39, 0x79, 0x71, 0x71, 0x60, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static const char PROGMEM rayq_disp[] = { + // 'rayquaza1', 128x32px + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, + 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x70, 0x70, 0x71, 0x50, 0x60, 0x60, 0x60, 0x40, 0x80, 0x80, + 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x80, 0x00, 0xc0, 0x60, 0x00, 0x00, 0x80, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0, + 0xe0, 0x60, 0x70, 0x70, 0x7b, 0x7b, 0xfb, 0xfb, 0xf8, 0xb0, 0xb0, 0xd0, 0x60, 0x30, 0x10, 0x08, + 0x0c, 0x84, 0x86, 0x83, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x30, 0x1c, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf0, 0x11, 0x12, 0x10, 0x10, 0x0e, 0x0e, 0x0c, 0x0c, 0x07, + 0x07, 0x0f, 0x0f, 0x03, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x9f, 0xf3, 0x3e, 0xe7, 0xfc, 0x7f, 0x3f, 0x0f, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x2e, 0x57, 0x17, 0x1b, 0x1d, 0x36, + 0x36, 0x3d, 0x31, 0x31, 0x39, 0x3d, 0x3d, 0x1d, 0x1f, 0x1f, 0xcf, 0x3f, 0x07, 0x00, 0x00, 0x81, + 0x83, 0x83, 0x83, 0x03, 0x07, 0x07, 0x07, 0x0f, 0x0e, 0x1e, 0x1c, 0x3c, 0x78, 0xf8, 0xf0, 0xe0, + 0x00, 0x40, 0xc0, 0x00, 0x60, 0x38, 0x38, 0x20, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x7f, 0xfe, 0xec, 0xf8, 0x7c, 0x3c, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xcf, 0x80, 0x07, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x08, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc1, + 0x07, 0x0f, 0x9f, 0xbe, 0x78, 0xf0, 0xc0, 0x00, 0x80, 0x00, 0x80, 0x30, 0x30, 0x30, 0x11, 0x19, + 0x18, 0x02, 0x07, 0x1f, 0x1f, 0x3c, 0x73, 0xcf, 0x0f, 0x0f, 0x0f, 0x17, 0x2f, 0x56, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1d, 0x3b, 0xff, 0xff, 0xfc, 0xf8, 0xf0, + 0x60, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x68, 0x78, 0x10, 0x00, 0x18, 0x90, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x7f, 0xff, 0xfc, 0xf8, 0xe0, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, + 0xf0, 0xf0, 0xf0, 0xf1, 0xe1, 0x41, 0x04, 0x1e, 0xcf, 0xc7, 0x44, 0x63, 0x59, 0x6d, 0x0a, 0x03, + 0x03, 0x0c, 0x0e, 0x05, 0x03, 0x02, 0x02, 0x1b, 0xec, 0x67, 0x5b, 0x1c, 0x8c, 0xcc, 0xdc, 0x30, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xc0, 0x3f, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// invert display based on layer +static void inv_display(void) { + switch (get_highest_layer(layer_state)) { + case 1: + oled_invert(true); + break; + default: + oled_invert(false); + break; + } +} + // MTNS static void mountains(void) { switch (get_highest_layer(layer_state)) { case 0: - oled_write_raw_P(layer0, sizeof(layer0)); + oled_write_raw_P(mnts_l0, sizeof(mnts_l0)); break; case 1: - oled_write_raw_P(layer1, sizeof(layer1)); + oled_write_raw_P(mnts_l1, sizeof(mnts_l1)); break; default: - oled_write_raw_P(layer0, sizeof(layer0)); + oled_write_raw_P(mnts_l0, sizeof(mnts_l0)); break; } } @@ -270,26 +336,13 @@ static void logo(void) { oled_write_raw_P(bootscreen, sizeof(bootscreen)); } -// logo, but also have some signifier for the current layer -static void logo_with_layer(void) { - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_raw_P(bootscreen, sizeof(bootscreen)); - break; - case 1: - oled_write_raw_P(invertlogo, sizeof(invertlogo)); - break; - default: - oled_write_raw_P(bootscreen, sizeof(bootscreen)); - break; +// run this whenever the oled needs to update +bool oled_task_kb(void) { + if (!oled_task_user()) { + return false; } -} -// run this whenever the oled needs to update -bool oled_task_user(void) { - user_config.raw = eeconfig_read_user(); // read saved config - display_mode = user_config.display_mode_saved; - switch (display_mode) { + switch (keyboard_config.display_mode_saved) { case MTNS: mountains(); break; @@ -297,7 +350,20 @@ bool oled_task_user(void) { info(); break; case LOGO: - logo_with_layer(); + oled_write_raw_P(bootscreen, sizeof(bootscreen)); // write image to screen + inv_display(); // invert image if necessary - remove if layer differs + break; + case MEW: + oled_write_raw_P(mew_disp, sizeof(mew_disp)); + inv_display(); + break; + case CEL: + oled_write_raw_P(cel_disp, sizeof(cel_disp)); + inv_display(); + break; + case RAY: + oled_write_raw_P(rayq_disp, sizeof(rayq_disp)); + inv_display(); break; default: logo(); @@ -305,11 +371,6 @@ bool oled_task_user(void) { return false; } -// what happens on sleep/power down -void suspend_power_down_user(void) { - oled_off(); -} - // render this on boot/reset void oled_render_boot(bool bootloader) { oled_clear(); @@ -317,26 +378,18 @@ void oled_render_boot(bool bootloader) { oled_render_dirty(true); } -// run this on boot/reset -bool shutdown_user(bool jump_to_bootloader) { - oled_render_boot(jump_to_bootloader); - return false; -} - // change depending on if OLED_MOD is pressed -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (keycode == OLED_MOD) { - if (record->event.pressed) { - oled_clear(); - if (display_mode == NUM_MODES - 1) { - display_mode = 0; - } - else { - display_mode++; - } - user_config.display_mode_saved = display_mode; - eeconfig_update_user(user_config.raw); // update config when screen changes +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + if (!process_record_user(keycode, record)) { + return false; + } + if (keycode == OLED_MOD && record->event.pressed) { + oled_clear(); + keyboard_config.display_mode_saved++; + if (keyboard_config.display_mode_saved == NUM_MODES) { + keyboard_config.display_mode_saved = 0; } + eeconfig_update_kb(keyboard_config.raw); } return true; } diff --git a/firmware/rev0/rev0.h b/firmware/rev0/rev0.h new file mode 100644 index 0000000..1890680 --- /dev/null +++ b/firmware/rev0/rev0.h @@ -0,0 +1,21 @@ +/* Copyright 2024 Brian H (@Trojan_Pinata) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "quantum.h" + +void oled_render_boot(bool bootloader); diff --git a/firmware/trojan_pinata_model_b_rev0_default.uf2 b/firmware/trojan_pinata_model_b_rev0_default.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..e50ff03e0612ec70da79f90bb88596b9913491d8 GIT binary patch literal 77312 zcmd?Sdwdi{x;I|kJ-1v)CJEqVa-nBBfk`GnNVvyKGovBN1m&gzfpr49JAw5$xT|Nf zXLk+YC4##PMBR`P7X{C&qPuL?aW5J-io4!-dr;g2bPa;GikJ2}liT#~Tir<mFqctQ^=VYDmxH7-}EyUvhEh0npS z@wW$9N2|Bp-{ZG6u4$a*BaVH3gJW$Y<4~OYmb+_n{R~3p@kF^e&N_E{CQBwq?)Ql@ zH=g?+487xR-?!tr4A1n>h?ukEjKkvTkJ7yIkOOh7_1kOnY8WlAvq*J7%Og8ZV@$1` zJo1KllDLROmS)%F)LQ)9^DUoSS}jYt$iB@6p79Jy4F1QXTo)U$ec$$dHTIcm`w!cH zuw8_(B7T;Q5Hlg%Rm9;WN#vgS+ z@uy8-41a@x{~JrJ8?GeQ=WzZ1d+y&vtjBRqx|&$$;iTzHw*2q%nX(3HaQ;uh zusH*AaqYB`rwIuA*iRaVKkAEu&nDqdYr|P9)Cs=H)g2zg2}{6=8ZuPG<=onI|1{JS z@B3yr;qz+?lIqf+ypZ6O(`s&g?y^Tb+zCgZb*W))zsxEN`lr@U{YKd2TFX*=9Bq!I z;~eRem*YSnuZ8Pv)Y^^f@?9t|A^hAl{Y)<=JPl7i|8*I${!}Iki6>+wa&h&t>MN?R zs#YG`QvH(uXkdS}^5lW)hpIcPpQu*4j7nr+CPFVQ#^kHqW<+y8i&6@$KQ~IKPkdI$UMS{!7DT5I z>jg7YIFe2tsh-VTWVJAi=iThe&CE)MmG$+_{1Dx=HmrZ9BbAPiAy&Af@i> z+M0NGqehGl?ZB&*4$w9l&mHai5472pEY7@CCZcm#>GZi z<%wZy7vTrw{{VfqMi}L%1FX;HXO#3oYu9oI;TeQ-TF8$F80F^!)~@bq8g7lS%5%fu z@uEBW>U_44XcjY#F4B8PpBj59!DapImfLQ>#7Do>*Uz|&lDDSCaXVp^YlgP;Evbpi z#IdA?RW2P8>lp`+@Y-f_~KZ^g-xS_C68WK)2_j>HnEzQJzp2RBG52V$a`LxhF^U6%7VhY*eHHvO; zT96Y>ZW1NMX`vln`fLd>%B}r832Ob_8Zi)t&mlK^(tC_0sXZB`mYz&!op+t1(Yw;d z)*Q2~B-VA-u8M8MYK^EdS+#aCd~hkf9~`--&w9uZLI}x;WckSMyb!a8xTi+9R5zf6 zlO$4_CJ|-nFuq4fJ5lVzJR$oS<>tYuUG#Z6-h3(3yLrQ8-)9&X&ev#^fus_qRcs{& zi}$`(H72PO7=AJie~XU4B?*6Pmxh`{jVY>wsIfnz)@cYqh&&d;2s=b;q`i|Ui-$&1 z@CU?}PDc4O&Lh<)-$D|C2AYTRI_R((`$A=F49X8{?5u^D3puf{%BIprxWH-aY_ zPY>ZK7-1Ynq{!PO?w|2Yy@b&n@qav|p$HLWkxcTVA-qT`>Eg#SIBEGYvu^JSD# zR>eP))z}f0@WC!d*%()2zgOcj4SyH^FOQ!_KU()w$PaLGI2&-T$B9v1`N<$rD&nlt zhOyroA1C;@onvy@iC?N7%M4)#28I zEhjtMJccOS-WVWCVPaYrt;hEh#Pww~E_2Q3!)`W8z@tsq`*4W?^Tf1byNrb(` zr2JyYpllze?drE`5MzVr$t1{@EO%HVi>L$`W6-~}zD-;l+G+1FQGN~FD4wIwzrwQ; zx#h@h&FT4k{?O)%Ip(_9z!sIi*{(=o%p0)L(4IdTF1UM4e`i|{wyC>Z8vqR!ooRA5m@^j?1()%uva!jBmvStx+0>8N~WAQcO-T zVdBm~n^=HyvBWOgJn2z3ylyK|TzFqJz=HR?3jN%Hr;-8V5v42BDHx_3^D^dV(qBs? ztz2d26#kQR{4wttFsT^Ef0qXGNFdcR8 zPCO%1-s$xOnbn1NkI7^vIPuwBv>c&s^$#*L`}epfO6~BYGMRl?3!kCVkV}W@|B~VR zkcO3vv-kI$kqxsudT7e2>fMOlFERY0G7_x;w|L_aZ3*`$cFMf5B{NlGKo4$~34aSX zi37%#Nv!hUD&)R1N1tv{Z;(q!U#A*dlnBa#AuR~&LS!bnXtz={y#& z*mJ}6kgG54kKzBC{x9(V{QghngT`>?3H0ZD>7@CC^}k?bT#AvEejd)Zf7}B78+dVgBHym;EFP*A`Vg;(6;&v z-5Ge<-!2-mP)^qP8JdLOl9L@jX+T9cm-{YYkbqGSy-vq{gjG94GvhMN$_Li;~xff~DQxKXR; zm(iC~XkVU1qDJ)P-GlV)lfx^uw_$k{KgugOTE%9f{IcJekNiNdZ;zMc)1E&i5$vK| zCT5ZDEJ=<1Xo$EnfZlVM-=#>KFuyZNX061mHb(soTqsR<99*RuD;$cAv=i_OkYe4K zp#Oh?aqLaZQ*MB?>K2?$NHbx<#}6Bazg5TInuI@<#a@NpepctRls`iD_9gD0=_Cd& z)8w{EnGO@U_l!!yr-_W)(!=mdsZlb6Gn9okkGO=++)S09$X_hB60c{?lCRKCQ2I(?VtF@_9N_(;8Oj6vdo9dgW@XVv$a4TfccvK z?hB;Q=9<2|R-0FieTe7oYWki^nGq(cvA4e!wgzE6V`1O*jdKeBEFJ%>B>ZU|>+*X# zzSBA$mG!8xk4B!jI%~v=I&Z<~dKzIgz8(v2THAqzUdN;1di*tz4?&(k5`P3E#C--K z-PQUxM{)bpx56lHza0yML@>fkf5{Ri$82U{9?2DdAri+&og8^dT)n`E+S5Y*llScDK@6qN_MS3jW}&0Q(^OVcN$8+ik5ffL^!$>Heru( z{XbjBKO4Vzl>RdhTU+unEX0VOJvo$7X6(syto5>WDY)lKqcx8}7nzqNbITgYA#7M4^&lE9qbe~c8n zNTTbVP8XR2slo*bNDy70Nne0g)Am67vN^&WwzV+rv`sPlh~iFU04L^fZcBzQFGSp& zMBja=LeA?-*Y2NHsT7!o{u;EOrpdw#mOdZEn=g?!mHh@I=HfJ8ekcvO9P|*hkyPK? zB)V?Gf{!0I4*wh-|C}WJ!?rc89hyA6x0RWjV#q=deLPVnet>$r9`*JkoIl2C!rI@O zR(oqN;#$2Ot$NJ+F#GPVehly95qr&!=1jM{$BVJqC7tIpw%SAI`KnvM57q z?}qJ=E8w}7-OISPO`-2Mvu*C?AGA7wtSw4PN%X}&0^ZJiit<`k$OK80Ic0G=aFc+%md+4A z9#CU9fUnr3KGwITnQ7b7%Iq7ohdW6Li9X%;9OMGG^wFFi=sVn8(&}u@bg$~!z!G_^Ok)$}0Kva}_ydHYswD-pav);gAMgBp+zgLY)} z7}|~d!0Qjw7DVu#IB1LNPpGlKCT^0ct_p1{dm!r}vr?lxIf#5d9I`m)Xf5xZ1XFyi zR)T7jU?EB{Upm}8&HZ9;DZbC*`=!l0wz6A^)3fy{`8m)kw7>~`jHCZkb^NC$;r|Y5 zNsvlgh1L$x`poMysiO_J`GEH%}VGhCs{&<;;=luGNIggtyuHTNQSly9yKm4=AxW68{~&o_v7dQzp_nv=xhY^?6K zC1Ot{<_6VRX5!yiySf)`VG+r$SrD8ZOvE-MUXwHGy9og=vj z)`J+yQqC>@?>rs<^OEq-^;$9FcMZ8iOl6hm4nB!7F?md&V=ZQ4p>9iX=^5NZ!w2KJ zO{98$^cng++OxN?U7HEgFdCn}x2Dth_K?+U3ywY4I+;=&QU9b@uv5nqVZQF2y$)d{@5L;wuPI*&D0;c!0PV zNsXOR%e-{uR&NIsGn!X0l2%`g{(eez1&abH%Pda1wx5Vy13F@sMybndSQWzhU4O7^ z$V~V*lG6Q64QT23k#x0MI(~%r_>-1SM!GoCJ*kzQRkjT>E>qM9&i^Ji+pETUQGPY{ z7j^Jl+I$;w-PmUeofY@eOn?5@H0=+?`1!1#jUE4cGNbs4Rj? z{nXg2BX^KEQTbmjQ9gpkVt2I)tsfc#(#By_#e_Y^jsH-H##9-4(O=L1Szot}O6|Hk ztzCJHssc^aOAz%0i4E?yXm?L{()(w$d+6ya*J^i|C*c05cAts6>qbK9{j($YIk$-qt*RUtSIFJlY_&=LBH8H%<#F8`C;WjJ>W3#wG2`2!aEb*-GZwb*KN33 zaHZh_uFbfn<9Y+GlW^TSOrXhdo`dXV+5**<3ZnS%W*Xl7bT|=PFl_F6CxJC;t&OU& zC$!Q`Sop`!|MPVG^OEpKpCK8jpVh$VN00?yKA5u1K-{f6&=a>*lj(&mtl}HoQhjgB znikT|>`TP_YFW#Vy0SsfsqA=A)A^-(zt%1n!iq-1KlxTTk8rBl_cg6y@J#!mv4$vz zpbxSDv;2?MMC=5l^4--B@X+BLp-faaa5Uv0=9B|kzgA-f&<$gvYHT0E1l6KZq1mb# zZHQ6aLs$hs_{IU~0JW;I?a)3hLm5_sPUx~nR@n!w@aG15^6c9GKvMOFOAR?+l-p~Wg-!KHesgoapjG{ znU|5G3qVqtxo0|OfoA&#Ol7qaJMUJ{7t#!jykRqQoG8_h3f!%dA`Wu_qAVJyYGrn} zdx|Ae%uM%+;ZC-V4HtT*NE}x8vn9jfg5dfftLz$JoQA{pt!rACu%W$DTvyn(#PIN{ ztwyxQeFsKDe;8d*`d^TQ|77$D+Ao68*;C_(1OqwAw0o+L9e_q~yNA4bZ{J(4DLpT{ z7We!gS8C58Xz2(07--*c)56f|GWGEJSf?WoR)wLB^@Cng^p)JArL-Swnf^F)1Uc;L zlU-+fy@hHObD?@+xbqL5v&Tp()$Ur_ZzO%V9*xgr=ZP-w&7J>}Y4{UyMaaYOeo;N= z&G#Pad|7@#%QOGj`M!3Kr>6@4Q+hcE<7C90;!&(YH!ut8bG+}#3-D%U59fTg^Ppw2 z$S%HLY+x$!=A>MKHZq1G0PMZf%YJ*|^>cM5LUF zbOoZ(JIni6=L(q|P}Qqe5^@nva)+u;qt{=k>R)mF4bCqP5F$RRstT?W^!z@>mFxs} zw_8=skuOH^ucjc-^{wK(Cy~s(UqZW^V`Qugg%*ZxN6u?s%L&w3|Txq z(rMwC>G*LXyed19YK8f$*Zv_-t4$3pH&?z^8+yT9@tW0dkMcFXgGUurrT<&mO#N62TMbbPXt z6%E?@y$$`{QnkUeWl0Al#OcBsF>U1i~}ewxp=8Dy-kL(QYZ69`#&}w4ip6X)8ovEC z$l)v(5R!5MQI{99w71UJ+T!((OTtr*JX0-Mw}zAsNq_zPs$VhA?V_c=W8*UK$FV;2dpVRo;}ua$s^^C>>tB$BK( zq+|qbc2c`D;_h{oN|F{~cKc&!El~P@ z1sz)^@G*}6E7I{VO2WS!Yjf#XXJsB7j{OZYa|dSd%!6l8%Rg03WwB^ReYz8~`iF*N zcdACRrEvd}k2(@GL_^P=3GXt zuFMi6R0SDjL&A#DnrdoXfVG1GDcxs-J?Vjj!SzM&jiiEFbhZ!2)#w2FydU>xRaW^Ut__1<$&f(` zo2y^lI)ULIKmHf%_!lSPzonWXjI*Zz))((Di-T^2WQW-bMk!e3h}QL5wA8qONA z5Q^cI-*|cwPmq~MT8a(z*D_F;aPUCpcL~4VNj2gEb z*=~cG&YlLQ!!xC4#bp)bx!gsBU}Sh{m?@%Kpmc0lh&H(hdO}qyvzxfeP|6yNW^^Qi zd^!xxz*)1U56m-PYjGZ9?(!@?Mmm;<2y646Q~0}d{6R~{(*)7e?)5L+ zl4|pAv7GG8W4k-4mi3@?@3`w8YH&lds54cn-~J? z@po2S)2GIKi6`V#hv6_deH&3;M9R;w4rKpHiqOX!9%``Vh8jZMY#y8DZTL%;A>7G` zXiAQo$5H%=(vEtWkCnPK2WqaP&t^FM0>;jq;TB;QI_`c?$EytAA~Z1XE+?+Z zz;<^cr|%+1UTUg%aP^0BoL|AVFpSv3=cP8l|JT}lk=f?4yjr|mja`y36cXtQthMzG zuaftgj%B{Rnh2X#N3llKz`V1Z>R;1-NXHF2erRKd6M6@=D+z}gTXYEH2gVE(*ZOQe z;q~?4Pd>Nqxc>1Lhsqo4Z)ZeK@Eeq#AtA8ib8D*}zZ-F_5j~!B=G$DcaA7{$N0#Z*Z-cQy7d)&OV?qp~9_iLpN0mSW!xO?q0VT*FCk z+Df+kE1C37!yKD&>e@g`WU0*rp3w@u@jrT)9!fbXLv@T-%qMxQxs3>>w$mAQ?%SeG7A|CzvUab)8uuF73>`)- z%+z5HGxKSx=jBv#wZNdHA*@*6G&rikLT7^18wgf^$kh%OTtkR2T7)^}NQ?|{{fu$} z=89CGpapGh0>eLk{#T~sPmSJ3@i)~|ets`T+rJNDmEE_}lkewz_7>Xjf|$SmSim@0 zpwF@2!Aj8?)n3mFe6ZV0Uh`Ml>ZlIoaW%~`wMLC~gAah6K1L90mk`RS37g6B>>4Ay zIQ#)`K9eRntcdj}JiB}-G0OJ_CV|^*vDy4o7msnKLl2am#F>WwZ-6$O#dklzxdU>Y zpW|%C`9qxDf1gQ$DAy-=_c6|oaGIPJpU0aQ@_ECyeVr{rnC$a}ml*1DMT75lTduYy zK=T^?P4UR2%O+iVe&C$Kf2NNA%q09L`3~h3giLb}b<&x%K?x6DYyYUzIFsoq%RQvk z<2|Uyd~ts6h5k6&1Z@wr4ryJ+U@w9>J)c^}N|Uf6gA9~q@mQB>I)54OyC6`3`4x0c z+lFI59DJ)RyBB;q^!bNlS%cJjLw5B1fXV65IQe%m6U+wx@tFFS{9|u+Z3X80jTnWN z556xyT=1~xeX6U79bg?u`9lXG2Q6c&O7jmm^oF+$UOFId7Ubr{x6N z4lU=iDB~~DUTAq~8;(WJyX-ua>%98B(9As2cDU0tk>MZT|7Yp=&q~6d?6VQ3&7e#h zgs9gJ?TcBH;Mv=t%ou#OlQ|!9K=@;bb%93kubl}Fno#W)@7gn6O#dg5lHd?|c&nS^geY=k2wVHRs@19hz*VO#>G|wXp2Oxun$7FI{+PWytNB5%oJaF*%~0+-J!o z(<&C%Y};yf>8WMuVqH>=idvr~HPQpXsggp6tA*+A>RyHdeFYeXE%YOX=|_Q*LnmEo!cL z0Ca%%L)xb3xJ<`z16_*;4So^#0ko~Fai&4%J3EwCk3Lz-g2!AVTKb4PMbdj`7+U>$ z|0RMD6ha@5wNXFPT75zEacjMi@aWO-Q!_JNqVreQk&d4IvyrqxSh5Sj0hzes$kl{5 zLA?1)Dh^UV!L)oI;ykDDpQGbHCkg-Wp+4!_ALaZrG}=k~JG87ptB(&4#~{ZA<&P&U z8U=t?4~31Je0hOxy9pX~OphAt(ByifG=%bH301wx8cD>aX?ow(ijU6bruGx%3}ngO z)t{r@S;7e|A*P%YrI5|8^Y7rvwNYaVzWs?xgmzCx^d`r_&__&$__l4Hcgj}I$yDZu z2hk#!N+HMyHb{5NBhQ9z2~ip11D;GNKbLQQHbpdv8I~Y4)cDE46Cnono+pCqa9tNH zhb)`=B7h%I@FwS&{ZECCKlre*{{MHNNAXCm6KdZ>!)TkJt149E+E8ecQXLP$ryGer z%n!$Q4e?YePqKWm2(=9|!E2a3nCa^Xoe0`P>w-i%f|b^vB3-6LiVS^=LggW9(_com zRKHblZ^0r+hNy=DW8tS!*#C5WhVSX+xEeD$f)WstC#)Zi8Li;}N7xXBc)wS<7DN%3rG>PU%Idf1UB=8~GiZA(h{tROtBO6hRZ_2p0^wrGHWVq3d% zLM8lYxN-P1dFoFINoeiINNSof^^3mT_XFQqn-g9F4ny1QZv)rVU*qFj-m^Je**!zC zMe0S5*5u~jC$=SsQMf~8&&Fkp1I5*+CDY&YSMaY-30slXPg}4xc{}sGbWETHF zlC21N7yP*pIxUO%--q05hi}4Njwl4@_NC+Qb(uq4nzw-$G+V%(-aYU;p60bUj=>hN zU7PoB3Y{SVV^4K+)nBPtuVy$WbV`W}WY;2LG@_o#qog zJwa-5{WCS+*N@epX4Q_c_TU$||B-s07WRNT#b?`k79j`JY`l%*F05K{w`OY}?(b43 zAs*w5R&|J}wK?$PUmHq;eef~RaWl03A@>WuEF0@sAu9yilsW^h)V|A%veI&wM+^?5 zlP%(kD}8IP=(r;P$_-b(;+h;ir|@5>vDP^MWx~!nR zxd9$M)}dE3Q5X2U@~(eS+5XJ;-gsaBrwc3VW$z$eNAPV~qTyxnH{O(cX?RKRo0th~ zeO*35!%L2xh{-2ucw=}K+a9>>rXwP}#!xTMQrpR?OD^NlUlo2&DhSEBu;Nh`ECnM2F9 zIIE<~v^Zy!Iw` zg9pzdlWTifLs=Szse5;skf$KDs_|kf(Jm4PY3tQGsbHEp>Nc@ zVJ!c$r2GZ63gg(DX-RK3Z8d0LCed4DqxNkQZNYf(H++wNo!?5o{*?B0|5o^@6*g@R zj?jJDziHde!dOMyIi(SkaG#A6E)U_ej(S3yxW_pBt91OU@RLXJ_cRv})8T0$w~v%& zN%@f5tR5_Z1wF)g@cm_mwH5SgctNE5F$~8R$Kzdvq5t;Gjq+N*^bS7fn$=T=?HSK> z{uXon%5S796pv`BX2i{9Trbto%Z~qBrun%?^2?6XP;;Dy6^IXNv90l!<%Q_KL#ny# zxt>qu(ULr^l_Xz00N;J^DFZAsaPq#KNVhGWm|T?@Ngf%TY&T@^)62+ofwVnQX(ze0 zlsfE$ZP?VV83=m{VN+_qkf#fMPSQ5HcH*M{9rpj{>-e9ag#QzjAImd@GpLK~+NUbt zL%qC>du#0zm2V^bUEF6N{0-S9yo3An+8I@^%Rcz+g5It(1$+U+ACuqPp{jPw;q!3X zaOUF7$60{05GTcI)Gp74dydMP1GYj&$_unFwRX`kDp&X%as~YzxDKgd>>c&@k{6)9 z!c0y!82*lM7U3ty!p)IXSgmEXZu3l%tSy$h>;NgXNRS3U$ON0JeOvQVcWupSYF}#B zb&Do!6ByV3FVOM7APN7;sC!!f-(6>h@2s=zku-F@AU^qO^|)K8NY`^50j2cL=E{<5Q1Esu=e zQtj{k*8_^*R~+)>-UAfzGS z0(azF%JV~az&|c}cI6K2mul^L$?{2wxu@G^7IH-sWbxa!^l0|U23!qP^|QH4}WL6=abSsJT4tk zeuY$NQMyWXliS=|=rqBWh%G0Mq1ZY|dksF5lRkg-t?$)^CT!=&4;$D2FVgY9C<*_I zv2w=ncY1^YG`?n;h_99BhgVwe-zP!J*h1?cLiW z@93C7ckaRrKPgVN7Dq~oLwBDuN9eaPFLbsB=~pVXSY3$KT}{8k_}Vp}g!G=4$Kb5d z;+<3Yi#q;d68_V)dU`0Sp4NP;o-A5DrD^f*8jGi`uYHGoJ;m%(th6O!$6#sq5muKH zu}h#~4FBKY5lv-Zfub<{kWB3ke+Zi|D^`c;Z0)vw9x}aO_PdGsW%E%NaR%&uYDGx( zH9x_g4Nn7OYh)-^JH*z&$`5_IyE@>Zv}QQAVQ@IM6+VmxVgHdkMAxemknhqxB(PR6 zWbKk1PdQUeE6J`k#I0MdQp^AAVVU}wdQRcLM8|(g68?;GVh|g+zz);wvuh`{+m(c$ zRpgn}im+x?U4-$T$C;0Fv`+@L`a1^yN`D!gQa`m;2uuo0sq41i;<5BjUMA*FUe=H+ z_;Ug|^?A8Dev5x{K+pFnXC9EC`RcoXK{r5Y>ZiMeY1+U-N*$+c>xY|3;G6v2mS-|Z z%LQ1sy=4ix2>XQ5y~1c&o={sLJ*Fdv8jGkT@9U@E;>p_e*UvBe73VY5oq(12WxwjK z9>&~(V4rgX88BkayXKt2-=pJ?ZZkIjBWTq%aO#3JhoD%>9sMOzZq5+%v`$1 zFYT>Y4ILO&qVTTZR9Wh|7v8EzQN7aoARp~&6T<} z@BZp6DC3c$KL-LA55@i?J{T}O8Vb0f0!D;PAh8ulWYpbgp*>!w0-SPNoVk^ zw$v_hrI;&}=E6R8%TTauS#xUh#6|x*_`i#F{4Y+ze!&k^KK1e*IQzclw_`FVs%!)SBLj^V$^e(XQE4ZDf@ zLMC|qJI{CCGCJEgMu+CPH$%G=T;_u^r8d}mRC-*yJD}z759G0z1aiDQc`jK%At(l^j=n}hu{~~ ztUfjNcj&Gt2`kb#2I&97aVhCqVDh3;ehmGV<`mSWWv$ zH_pWrM{SMBP%{|oOb{n5go5<6c2Vp`ag0YYiSavj!u8XMTQs_!Mmx$+eA0dD?B9=dSC5vD{th$v6|3=mYDtvW6{r{i+>C5PKgZ32cPXQOmlaH4(%FhO9Z+Qf>Idd(eG!B@3 zA1?cx9FF0nQu=k^Lg#y(GE%5EoXf)OtYwUiac+ai*UyY7`O%nc;PP>W-e?Iz# z4cJf&sb(jY)fHowO~ZqzyDT-mo-GzaM(EK5K|dFvep9d~qZuRa8OK^UH_68|5;ZiyGWC^?d zxMxXK&VpJNI~NjX7MarLa2HBWcO1G1r4m!}Mf7p!)Y{ZO;_U9sA{?6g#68CG|Ft^) zbkS>+{u@ClvxeDRbE?6aRcj>x`{670WQ@~>!$GrjgBIop|5 z`+=N~|FWFoOszd5UyT1$Cv4H}#Cj{vc{q(YDLz-@`eU5u;e^_@_57X0`rW+yx5xM3 z(gl%=w`{yFCuD%FU@-~JD+zH_7yNd+hwlBuz^1=XWeW{bNr(yiuVa))`WJLfi(t1& zVyRtS$?SRhI(9eNbM$IU1y{g0PF{EHI-=aC8jldPpZ&G8-9Sz~fsb+c*Xj7zCE>5e z{saYpP-R|d<8@h;Ve+bNJ-FsO<_hSakAs#n0*l?)4TQVC)&oya37+hpOO(4+0USCj zoe0IfU!2U1@}V;ixSZSsyUMI*^oA zOKL2H?-S=8mG+>sX;V`Nyhxlz-nr2~QiS1xnn^U_;2jTIB$z*!;)(~)Ze}v6Dy{J#U6}6Cu|}+JX3mqP zG*Nj}TJ&rH_8iid>q7HNL(JSe#k|||#Z8{|_{P7{I)h#RTj~;zm;7lR$?hh>49Ajyh|GC*UDLZZ7}vv@NTpX7)a4PN^_FGckS5ssCUm#qFBQO z1&T*rtH@~vWuMNt?LB)!mXht9j0a|w%? zS*n-r-E~HLXDehSTcE{4_k$*c3k2!t3hhyP+9dYRPw%s zO63SDC&2HG;u4F@^^rCzjY*R#p!q?{Ea2D3jB?*So1gT|h8M1aV62OoL0~n0Br({@ zwDosxYT_|!YiqXfGIk^}9W%4rp;0(lI*2#@omASF0fgEUj!P-MKnlc%PI!Xw1+|?& zgp6s3S&%aOc=SbZs<$K-5j{s{H_eB7BiV@DjM5@P^P{;zLKUVvhZJ}pM~WXN(k@*@ zeT+`vV;ugM>G)rkgg+n9>-D;X1+~gxmhBv(d;iitP5ZtpMVFV><9RjCZiKN|B^sfz z#f&>wqp?$a(lr{JtA=&41Y+rldyK<>xsLzxB>eZm3Wuw-+xJ@b z!X9=ocC_E-KDJ+uUGp_YC%E{`^Iw$kx3Y;JmNG>UT6Q7q};IzbCzCePE|Q&0p_#_}BXP1$Npy z{0ws50X`%zke&CTO#Kf(T#v zULfnTFc}0UCAsaJ33LJ`PbbPNgUoJk-aW9G*5mvbGqSJa^bJlY%>J|T4SwfCYE|z9Yo_>*OaUjiyjo^`gqn7_O(CD~#(2(~4S|2li9=N-Y#`3uX zJAHqh&lEaOR9Xj}fjd2>C<}A3IcQLHulIP@>A+F@C$`^s$g$a^E%1bg?JdEZZgufU zoa@vNK?e+U@xo*b2#xSYR`VzkbH%{hertIu+0+Qx;{-m&_5YPR{wtI4r)wv{k@^ls zq~e(-cOXyepX&ocQ#)ul7w`nO1#-aEcR&-f1JVJ`&r}_340d6iFkr28H2VC+!T23b zyFBKoI}j$vY^wsa6JcCIWmiId#&@!nuwAz_XPMS?4BXr?8xwxjPQ#fF z_*Foch3x_E1`cwZeStlm!DH(JoZsWO`qxnZ z4c~m%ll+eAXki}+O=GBi4RPtZTb7?0UFkgokWO)FX_kB&MOxQWBFr{va1Z@_W`v}!TqU*%_<>R8lZw78V;>)*6ZrFsS*1;zOq&0L+hd}1TN`Y#+$NPg#X6XD;-%|Y}bYVZ*to~io zNKPjLxq;n*U4eE_%M#Hu$_wamQpd`cALt2C9YR_%=M8V5HP)$ERU!ki4>ex~qrc~z z!vAs||I3r`w+GB)b!HEo4D1br1K8=QSKsAXABW5TIxI_q?q8p_fPCK`(t4!9wteH@ zHm(6>&+Qk8wNhx@)Cg_+=?$L$_8)9~x3S27HQpWWuY^p-L7W>mZRE*+U(-^VQCB{P zC>O>1{7jL>Ifoc-Fg-XBGpi{+*k`nD2^j8V+YSe~Hj~eYT?QKBmLsF%Q|1lCIvHm% ze#ie-%BQyrZsa%i1V-BnJP7!G8?iPyfsb+h{|X)dE0XZHH16CEe~KGlY78y~l}3cz zruxOMh0pl28rL?hXiTfk+St+53kw=kG`at;3qUvT1|n?pdv9PHmu%!V9z_n_)gNIA zK_CE$^a}p<{#)>_ zDS@>>f%rxL4mxrZIyzH&FxtD=x{hl`=W)5{r=NVDvV*VO@p(#X@;FS#YN~&2AT8k3 z?u$!8I!1W=H3y;VH7R<+Q!9KCaI0=jzs>_1r_}`q0H8*h8Go z`5T6{-Me7}MwA2aK!iT8Fm&e;=p8}Rh|WIzCorBIhi2I!q=h}lW=d}eca4RyKI}9#fsb+cuhsEin}mN0c^cU0 z_4r-ACb)Eb-!)V+*XNR>m`_7fWe)bhs^;7faMK zmwI@H`~_RMkQr+1I+fDs6smi%PmMi2;veifbs_xs9oYQNW)hxhKbg1RLwXB{IMdcU zhltLB*vCT$H;ePdN^!y4n-6a6!0tS!n&4@A5w+b=W6Qz+|Hkv?F*PQt|CHyDQgGbYOhTNNS-+?X|BLFU2`b0rAjS0h z;hAg#ALIIegN}bg68>szY7)nE0vy>jpt2thQ+ci$dsC$=W;zBh;~i11#cKT~KlQ$; z#;69K0y{3sElk5&FXi!waL~`;ZF(5q_uA6J74R;d8b-=CcpXp#qzfY zJnw@qxCDBGZIC$bf-E_R9es^tc~b^-5Z3u=dLAVih;17@pry{&o_;c@YpAru>H2;g zx&UUBz(95cGV84Ka>O0}`UT%ricg2WS&H|EXeqi-3i?Za&=2hf!k{K5?lG?aZ_x4I zfS)|N{vV7m#lH|QzP-$Q@wPki4-rG|)qz7z0;Ih6`#1Sd`x#|#e-OQe#xfw5VJz0w z--z{V#Nwd&nHr^ggN50wK$^G3kpphefStgi8jrCXdcvBnFb`f(h(*wwL51IdRmcuM zhnXHb!$9gQ)8{d5H)*XZM}iJ-!X41t)*`KK-8zP<{`_;ar?Uy@dW6Nl?f0CH3gp?! z!XQO>yG9xQfU$zE7_={qp?tJ08{KY+C4Ch+L8E~0PvB!5{@>H_{~mtxDE?lJdcrf7 zqkSpX>;-oELI2nNnj-M~F$DD9eaRRC`tt=q;NgT}-UFU@Fk56o)Q-av0A1#I~i}Y6cneYVx>KTCa;UDc($thw0=da?9N49bv8{D2Oz9zT%BJS$@{B!r$h9Qr@P;B+-ZZ z)C#qt&9fi9@^$3MxZ4r?jf$*R_~P<<`mhHh_6Dq%oIMAe$B?%uT@PRV47|SH46i>u z8jcR^Bb4KH5`Wn8psauBqj7G=yQ
T^$_FCtk*0)>B&n-35GD{m}f1N-^ z?b3*IYTsxnh_qUE64n9A(>h_n#}6BazhB4SpM?J|?3Y4oiRw}8_kRyHx*ED*^r^#t zC7zsk_f`c~Rh+NL0(3yBt>A;u+k_q$q;$U>76|8ftFj=tDc}fFK8yip-o8|?X{rz8 zByWMz8o*DC@@cGt#z4Cpu?M^cU&(azpndQpS8RaC!PFB(!9Jgm>cKcgO1xWM*CChJ zwZjhaUiEXtrfrGNP(FQ^wvxP1rZbmhi8-Fvq=rr&I%n(&Mk$EDA~T91{$f)6-fzW! z67f+L6ZRN~f1{3nBYyE{|L3*(g8W2{pnkj6PI0L6@ zB2CfW&VW6qPBlJ~)3lI6Eq)0(`EGYLWJrVzs4AOIh!wgYzr(yE1J`t%*e4cafPs|5 z)2K%>Ej-$p>7Lt@>8ikr-YfB{Idd$<6>~<8sw#oJT-otowm?Q@Lx|FWc2D-P(}CQb z*z>D@QeisU;@d;Cocb*P5tQ?tp;VM7txx|IuY%{}3A}*eSM0>w*N5n;wN&|aOGQa1 z>@g1ijXM4t@ry_CCxWc`d?yO_*>>=lqg|+u_SDf4_H|7Q``LMJjNFsmB~osW$!(I@ z9;*Ev>`JL(-Ge=P+W8}S=4T%-juZZ^kwiz59z{*A9O<-U?Lym@ZY54zX?Bj z6#o~ObB-Mri`XiLNnUPu(a@Z2;vr&Ri+y%hltU&=>(7Am|7-7Cz@oa&wZFCJ3XCvZ zj023YX9h2T#!=Lu5}08S9ngv)rfDn* zru|QilcuMMNqRD)&8e51h?kb0HfbkGpC2&D{@=AXqod<#lhfxsr^PNgq$BN{DpY)qvG9G_^(j#UlD~r&Q@UNrqE3d zIWWeqr8U~hjpglfUoMFJWR2AOOGwOB!f@WZJ}TTfIh<-JT;PUqT1eqKyPO~uAj6YU zy|lWm`fPPuP12O5;J_<h$H{gG^Kakl``oSrdBlZ45S^>WNaqxQh9z1?d*Po%KSHUmO7=5x{O()f=cLeJe zZ@g=(C&9X;4l6^!Z+TT%hdb!O3T#crnq_PGei0F)Ythbm{6FZEdJh8GO3SOY4P9qf zt0^8ca=z~ad__xqsWT`vs`64p{;|TCqqKZA<<$k#>vK#07_`*s8(AKO>@GH$%`{b8 zYL+kmL(kUL#ymO`k2%ML$$E?-QiCXu4IP#fT*_pKiT*LHa9_=HM0s%`qa~+ee^pL} zVaEQd*LwUGH@)A}v6^A#kn2jX_FGsXn|WK|zf!?}WfcA$%iZ+b9AR`2ht zjkZ+Roy%>W23dv;In)l`Pw_O!uXcpHR2aqlymrSCmOnZ)^Y&W*U8Uf^DhmI7I8mp! z%($UX7A&Jg+|6`#YUR`LHCiU$xFifcf-o;aDD?NQC&aK*a273c|*@~2d`!z(7w(Yj6|6T=uZxsIir}ioG)EXaQ zeRADk`DJLI7XsP5;IGlUR)FJ{jowvDE5`BOb#%qj61jK13#0Rz->t)qY_8w06l}j+ z$A6{X{6UAct}eAykJ(uUcm#QU{>&ehesl`wLt#rEtXn$*|_c}>zEbb-gJ%2U7KAY}x6yUVT z@7E6Ez9MQ5WZZ%K>c*ayde2?`0Ow3as#z|y+xSp;*s7TEf31RlEpi+g|0lE`S{~nC zQ)8nE1=$V!&OaKT3=XVef4ioAM4e}R4J3f9%wMCc6z%yngS}mYE;9>Fs>zq@9N&d? zrDwsbM9Tz%Znvlrs-TVD>%o5Deaxo6u!ETlUzA|tImCra)c!&NEv{{P?H&@ z=#0_KCHDD6KYh~Uzlw=MmoWJ;a+qA+QS`;y%v~0*we}ks-$ckPaEwf}JAGH_VyCrw ztBQ789_i|gr>d;2&P6J=n^`Ly9ktd?I1dm!^tFI#3VqAl-#h8*cJYvxg!c49-~x|# znOr!A;G#(sB=sQHlZLa3!GE=a|LQ3Gd%O5b+^g98Ysk8tqHLtGXhlU=3W?@Jn29ZP=4SV8UlM%ND8IZdjICM1R8D^9I2PQ6Ui7WN){ zlRjR2wnsk{26u96-tW0cFI4@3@6{q>6<-UIBvrM(-!lm`JL|C1Kjs4(?Ru_rh1a1P@6ycAOds#qUn-pT+s-i{n#U2v-eI34VXTmq z8cM4C4>=cn-_nT6(GLFpe0(GNJA7kY2zErGWc{&foeby4^?9MjA9Dt^iPTimL0 zkrtWm@$mamhp>6xFXLpa+E54;`$JW#_Alyh zEBx0e_^*k=e|{y_-r5eK4LD_D*89Aw_SDjn(8INVZFxbKA;L=& z{~}&uWM0y^9IcNo;fro7{MRb@uZ_ZAIa70#o=XQ+YfZGo%kelh!11`e@JBrg^8Y@# z1#QAUwAWRbzwx$#%XZ@H`I2;1S`4@CXeY2UXC9aLT!vjh7pL0%oS(zP#eu7|uXIF6 zg%v>D)(ozYM$GWw&Yml;*qB9K(T@EAk+6|H0zT_|b`|aiWEH8{EvmFfkU=W0Ts)9{3y#i#LfWI(|RZRcCPQia2@*ElerG^T3fkSiEZxw92ahqpc(2qNo zPr{@Qy0WBMOH1!@ws)S>3a!+3amt?Zn)2kGrI5;%;U8CdWZN4!3ASZ&XSFoBO&gE> z9&uXS{@NzA3qL)ziYC4sG^3aOjcGLKei?MXwCdT7MP4=`MSiFEFTRu7p3z>!YVjP? zD1So5_-(sPtE>IiEt93m23LyK>RRv7Pycw;*LsL4V+j;KC}Wix+7CB9e)%00WO>!Y z_b}aua+y$ZacU}7Gj0BOcaY+_D3oEVV(_n5@UKUXBltT^Au^sz*1MO^GwT zxhg3y3@Po9n+jemuj_qMl1x)h&xWq7`8!GrL;0x7(?WhrW~E!5;mw?jo%kNeSpp|t z;p_XYqvjFr-V~|7H~oqqn*7h3VeikV=aE;uejFy92?c=4}a|!(+TS$iItYZ45G!+YF0N9>=tK+2lpE zNRQp(UjBR5la%{mh_7B4tF)CT=na#$l8GlwZ`NmOgkM(isqnB>G59wq_%|TO5&Q#5 z4pQ1zrM|?{$mop@!|Rr@3p=!}g1f($uJCfgX{)r%OCj~;saiD^ct;QuA;UMgaMxlJ zE2Oa0@9(s41wRm|Pr8bod{!lfv5QOi%D`!i{|l)?_^@16ND#FZ+RC7e*9nu~_C|ds zOLe`uD$);Ns|xY5$iuQv5mxzTF2zVGBWLTi^Q?}utH>%$#v6yNioyQ@1^)+-;|TuB zT)VxtZ6of~0ZpY|NkWTxOIj&mfz~G6s4^5*k-&*%W9$QFyW_#*OCkc7ujaHNCnGUa zQ0*34g*r=_Y*&t0i^E8{3j=M)P zJcqoquo}qPY~Dp|siWJLff?K~gyAiM)%&o6uNpGjzc>zhQ~5fgyqhS)b4TU(C?v~} z!mhz^SwFM0!mFWMrGhihd1uZHTkw&w82r~O_^*$`-*596t>9IYE9~ zNxypDbL3gbL_Uf_9ru$XMs zFc1>PXvSI~RbFe$t`H$3WD%t8!~RrOMHXz8eOZ;clr^7P2{%6TzBwPh7)b6VE0_CD zR@1y>95$mpI{4z0fYnCHu<`SOZrGA5VQY;OZD>!Nuwx*nhHz3QA`VUeN!+E;E;)XdKU%sYl z5JyoKjXB1cf;RAizwgPpE3VZR;KPR0nK^=^Dd=HX14|-EHDI>OG-RKXN zi{2ALyrZo&Gia>XQ<{!md=X1>Cw(s714*KuQS?La6RuA}0jp*7ZWiydSjKodJjosl zj6$An=CtZchK^ z^el|TdCn!X7oj}Q{+tWX&o7vVr^{J|=RGd&K7T>k?0FMQMgHx>RmIeQjuj)?gbYXO zKixwva?%{CnM^fyT3cPaj%rt|xu4eGzqWqk{bED)y4o7@Rm#5^4sn9K$j7IS9?hc2;A6{^(v)+EKtY*pDc$LbK zs8I<*=KHIbnIC`aT@1;H1_lBp0|9P|Q2{Z4G~WF~_~k$##`6XTlP9o+S9m{M9VCk4 z4Zcwpzhd?~czFnTj=U8v2}F4h8F4N(&^Ivf$)6<2m;LstORpszkctE0#+L4nZdD5X zfdOnOlzb&6vx*-Y9Fzu|2Kr8i!?EcOAD0;X8x{N;k;Mr9M>;w>y1P9x$`Qg&c7*!| z2E$Sq)H;6PKz7NXbSsLY`fU5^69*0)cq*yI+60&ojQLxp`0;xS-1}DSl-0hV>V_#n=>MUh((r5QG0i3jPlv zQxW`c${!=p@|9OWOB)-Z)!kLVm@cts#zPN0;NczkP0H^_&+n-+UT;(bcD?#%A6;oK zHs2KVvsnY8GOXwjA*J7FGziwxfg4gVPyOhlpE3$`bdRrs2g~RS$o@$U-IDa$ry4%o zklwJg#Nhw1g8#$F?RET7;dm#|*VtH8WHuKSHio+c#I$;Q0KuH-TzP8^Rs9}+URNre z;qfz@?=k94g+bL)FP}j$s_hKK0cx+n} z1Bdu_S26f+R`A~p!d$~Yy8S)!`u0cPerb!}>3V$kh3b3mOioUp5EPvbM~+<-!%tkJ zC$IJ$N5a8i-@v=PQ$7FQdruDx^!0_qEgkSu#$$457#$8#6kCG9*MIx|<$)_#uKelp z<=0<7-GW{~l*7v51_=#6M*rl%qtBof2<58exB8qS10kTI)LTofX8Q5ncQ+N6l#Cvc zl#mUTfN>$3D~&EGAt5#OE?;kNU%0RD!wVm$oD7AM357e{*w|l!uSDtaNfP>}Bt%Qf zMptE?G2>dEhM^$_|0V_hCge4O|IDI?9{T9waSI1`$I?%YJ*(Wtd2HYxDk`A+r|3ayF959KYw0sgrsyXF9fBbQS z$zC(B>aA@=DcMGRd*aAcjQY4jf$&sUW5Vgd?9pC0q|9diULc!gR+PzzDFnQmii(Pw z`k=yLj|T%@u3+irjoa{5G59~C;Qt7+9Kqk=0pOgP{2$berUn~=AEPWmt2JP*k7j^} z@FULuLj8xVD75PTsQ=Lz{W)_C{>=*h&4?7i|FhJ8jI&TA{!#z`9L@ih{9^F;Dfs)M z@c(bs|DjA`P8QV(MB9{E9CwMdu(EHo16^|o@Z@0QKR2mJ82?S~iWNP2l5a4~J^kUq z5*_R?h6e`02Ei!QZdo??;X!^&cdV zX`s;VW>UcQ!i5Vszj+)-xnqFWg1T7>uDs7A~TuDKq-`p&G>dm?03@)QbUTE zj^Zeu60rW5h`j^_G?l1%JXO#I8cms`rF2LNN=8Pe(_K`EZ}~MXqWRQKm+0cqXHJlR ze}gSYm#K;t(gGq3dA(FitErCG&{|qY_0&KQ5MK!&zA6U)tqT5Ik>v>f8-SUriD6mj z)_*@BLH2#&mj2(rrE4Um=dSs7UNdn&)IIz?JLIO&U#X}{%#E_oMfy+r9d*%BdWn8P z+t^#Q3mZ1~FpFRla)dF$SYe!yC%ix}%2*y?Z?XeIhwxcr4PW$cvHrVF!5{OfYxpZv zU2z8H8Gl}m2;L;!YjvhqBjyvcS=v3%5=#kKOKnu_+Xf?D3n)7Mo=KI_9 z9r^)1Z!#ivz0pKxg)P#V56_9ueEZJlsUvWT=v%Mj@q>5#hqE1DPZLR}_vv+1ylla; zVk)j%P*+Um;wJDCO-0REXEJ}`kuR9Z{AJ&l!Cf@*g(s=!)gJWurX1OP4rcq@nc74e zoBL4iSaSF@8XbR*DWRoBJw;2&S8O)xNpCh6`zX!ov+`UFUlmjTw=4K>N0uY?|GxVO z|Jpbo!>DlOV|!N={&4 z;dW0ZrzJT~hj+Q%)2ZC;&gH`g8Epsp6C|C67pFmS%WzdO`0r5g-+>HA@CN~$)-*i{ zY)PD!ik)9t@;PcsNls}ZpG>=Ar_*UAAD+dsi<5kDad8YGoeMXR4*;RuIDJ4-bT~^G zTsUQYU=TRSCzu5v`P6!&kB8?eATEE)Ld%z7PR}i;v3ScAEIRm@ib@cvgtA44m<@9w z%r$BHv>H;W8`UbRUgDnb!XZN>L;}(j@m{CXM{0oyYT_?+pc&Gkz=-$W+laT1FDomg z!m_fm@%%a7M}_y^doLOaeRG^Zre~gcx)EPHT(Rf*ioyR;1^-9k7r|exZX_yu#KG}% z+zs*?$Cts|$!k~>=-x<8dLD+;v5*E#IcRG6V?cJ-(_GLrht%qlvK%S`C#i|dz|Rb` z-BCnk<9TxPT3T9~sBFc(^N_TDI;ofr`f3#ujlmC?E;$oKz_F^_2|$ zhGlfQrytV%PTVT0R!z)eLo4 zeuB*1&FGT{1E4Uy`>Xffd+%58!t`G$RB24yr0(;_kJItv=exNDZgTMK5|5|*csBWb zx~#%1oe%HuC1%fhz$5$mdWKLk#|pDfmBz7e?@RmCY_EqiQ}TQ7hBz*KYQHd zkz2<2_6nQyTeNY7vYBzS#t>g9T(<@S2<%5fs&tn35{+bIU!uKilW_|LGzO&2cBtXe zA;6HQt3BNATwq(}FNsjV`@AwrCj)pmAxb=1g#%aKDz?=kUbA6hbt2eKv32`CH7lYI`YaQjK1yhO5 zqSpBClco`QADzz2V!^ydHf`ogRz&&l<8DHn^l_!SE`$=g=}s0bXkgP>JDbH?Kg6BS zui?gu4}uJ5L^^R-DNZXBiE?I!=_3aJ#})h^M}8yqpUd*_ivg?J=2wfZMH-gKW+kr# z%=!H|1Inefk~k9FAjsm9ATLvswK9*G%>q}c_dAf`c2^h6sVo1F(N^$<`8mzsNcoL6 zNQIMnTR`m(gLla{_$ViHPD2h{xGQa(DQCwK+fJO_rox?O_eh+{x9!Yyvz9`fEU@hq zTGHLzq-vpwEW}SA<>NLHI^zI4Ic>obnzHPqYvw(|)W=KvL(|hg$YAaJ<_OTTG(Siw zXqBu)mO@h7q~6a%pv(^-{UAgzFhnIxU+0o#CPFD5F-baFVW82rDk;Q#d~{2i#L z`U+!LDkLg%+5OtNI`=Y-+5599b-~w4uY{N_758Zb%K7;ToSxwAhcQye7sBl?)p5Tq z+*NAQp#<$X(yrn+3sU&Pm9(*@G4`GLJ5${I=H%~GwIsXkKs+DVCk>erQ69J(zyIxd ziDSnx_FFA<+Ez%51om{toWsEL$C7eBErRKy*$S?5IUBp z+=g6YlZ7XL1sM_%oOsfwJ2>y7o>J~r-bn8TmyE-qEz zr=u1+AiN{^I^?^}yh0ZBF=Qb)Vko|G<-$J`pT;xDhzua+=txY&HFn|M+t(kxt?++B z!JlvBi?sg~PVCzbI`cYyjV9r_*W4&S=Uj4-a*NMW*9n&ccL6Zm-dWfeF`siS;%)_W zjPiaT0G_-aqC>GVPbWJxrsCv14gX?_4GIb#1$Iev42G=>$iHv{K zbHAfyt(_ZO*-4o!;+LI}so~~FM?4`EyLgzmi8<#M#jkhyGagix$8(oEY|Ap=bDVb^ zPhU~K(zP|SpRpWbK})}!79=f&4wlBB3?E~5 zo_0#+m6L2%AKWO)t+yxKWj0XI-)(r2#+c*Pp-kb9!~z#DHRc4^*d0l*q3k>jTRS}k z8!ticCJ3S3re#hx%}oDfTH$0<%TbQX<#MEyqColea`aD~54r-G{HvAc0oYGup2!?! zc+l0XmJsab}J1?P^Ir6go)X1X#HuG3AS7^hdUy2Rkmyk66C z<&t5z`@!<(QM2qnIoSCu%E$(klKsv|8R2H${<6C$^SjRelZ{zq2_G}aF&`}VB|Ptt z(z|;o=SyZ?Fm1sjD`&{95XZ5oesAYDJMTx0c4Yq0IT8zv+&o=9$x!T?sOE0_OVuZN z+9F2#C~KjX(%w`2eQfG}NE`isJ-jF@WqF~?kt+Uc)L>pJ_+TH2zta2?M z)-!;Z@qep=e=7(R>Hp2@OarAGf3n1xs!lNkObeaWWxOSiKEJ(CMaDm8pMi7bJpe+7 zz52i4a|8=Sfs$&xzKUhVr=d5-f3ky&56vOtUg$&6KZKSM`fofqAA+m36-pYSZ2NQ% zE<=d(FfjM$C1+Tx82tAr`0qikBl!O)>pB?%ao5eCl`uDB@>v#EIVLC~GA2CU&Zuv? z7vIzXojs3?pHz}@27V{bC!-sB3G~Ll;+sEf9{=9L$KbzL!GA9@62U(@Pn`Def}T4- z<0a7l4E-Ev9D@E&=t$Vh@g(kpo(C. - */ - -#include QMK_KEYBOARD_H - -// screen aliases -#define MTNS 0 -#define INFO 1 -#define LOGO 2 -#define MEW 3 -#define CEL 4 -#define RAY 5 -#define NUM_MODES 6 -uint8_t display_mode = INFO; // defaults to 1 in case of no value - -// key that changes OLED -#define OLED_MOD KC_F13 - -// virtual eeprom for storing last layer -typedef union { - uint32_t raw; - struct { - uint8_t display_mode_saved :NUM_MODES; - }; -} user_config_t; -user_config_t user_config; - -// keymaps -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, - - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS, - KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_F13, KC_ENT, KC_HOME, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - [1] = LAYOUT( - QK_BOOT, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_MUTE, - - EE_CLR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, - DB_TOGG, KC_TRNS, KC_TRNS, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_EXEC, KC_TRNS, KC_TRNS - ) -}; - -// encoder handling -#if defined(ENCODER_MAP_ENABLE) -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, -}; -#endif - -// oled stuff below -#ifdef OLED_ENABLE - -// hold only let me just drop all of my embedded images rq -static const char PROGMEM bootscreen[] = { - // 'modelb-oled', 128x32px - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, - 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, - 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0x7f, 0xfe, - 0xf0, 0x80, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xfe, 0x3f, 0x07, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0xf0, 0xfc, 0xfe, 0x3f, 0x0f, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x07, 0x1f, - 0x3f, 0xfe, 0xfc, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x07, - 0x0f, 0x1f, 0xfe, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe1, - 0xe1, 0xe1, 0xe3, 0xff, 0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x03, - 0x1f, 0x7f, 0xfc, 0xf0, 0xfe, 0x7f, 0x0f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x07, 0x1f, 0x3f, 0x7e, 0xf8, 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0x7c, - 0x7f, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, - 0xf8, 0x7c, 0x3f, 0x1f, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, - 0xc1, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, - 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc1, - 0xc1, 0xc1, 0xc1, 0xe1, 0xff, 0xff, 0x7f, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -static const char PROGMEM blank[] = { // what? this is a waste of memory??? too bad! - // 'blank', 128x32px - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -static const char PROGMEM invertlogo[] = { - // 'modelb-oled_inv', 128x32px - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf0, 0x80, 0x01, - 0x0f, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x01, 0xc0, 0xf8, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0x0f, 0x03, 0x01, 0xc0, 0xf0, 0xfc, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8, 0xe0, - 0xc0, 0x01, 0x03, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, - 0xf0, 0xe0, 0x01, 0x03, 0x07, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, - 0x3e, 0x3e, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1e, - 0x1e, 0x1e, 0x1c, 0x00, 0x00, 0x40, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, - 0xe0, 0x80, 0x03, 0x0f, 0x01, 0x80, 0xf0, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xf8, 0xe0, 0xc0, 0x81, 0x07, 0x0f, 0x1f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x83, - 0x80, 0xc0, 0xe0, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, - 0x07, 0x83, 0xc0, 0xe0, 0xf8, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, - 0x3e, 0x3e, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, - 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, - 0x3e, 0x3e, 0x3e, 0x1e, 0x00, 0x00, 0x80, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, - 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, - 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff -}; - -static const char PROGMEM layer0[] = { - // 'base', 128x32px - 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xa0, 0xb0, 0xf0, 0xd0, 0xd0, 0xf8, 0xfc, 0xdc, 0xfe, - 0xff, 0xff, 0xff, 0xdf, 0xde, 0xde, 0x9c, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0x90, 0xa0, 0x40, - 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, - 0x40, 0x40, 0x20, 0x20, 0x20, 0x90, 0xd0, 0xd0, 0xc8, 0xe8, 0xec, 0xe4, 0xfc, 0xfa, 0xfa, 0xfa, - 0xf4, 0xe4, 0xe4, 0xc8, 0xc8, 0xd8, 0x90, 0x90, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x80, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x00, 0x40, 0x60, - 0x30, 0x10, 0xf8, 0x0c, 0x06, 0x02, 0x00, 0x10, 0x08, 0x18, 0x3f, 0xe8, 0x08, 0x24, 0x3c, 0x0c, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, - 0xb9, 0x3d, 0x3d, 0x7c, 0x3e, 0x3f, 0x3f, 0x1d, 0x0d, 0x0f, 0x0b, 0x1f, 0x1f, 0x1f, 0x1f, 0x0b, - 0x0f, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x05, 0x07, 0x0f, 0x0b, 0x0b, 0x13, 0x13, 0x37, 0x7f, 0xf7, - 0xf7, 0xf8, 0xf0, 0xf8, 0xf8, 0xf1, 0xe1, 0xf3, 0x12, 0xd2, 0xd1, 0xd1, 0x11, 0x00, 0xc0, 0xc0, - 0xe0, 0xf0, 0x78, 0x78, 0xf9, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x1f, - 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x0f, 0x1f, 0x1e, 0x1e, 0x1f, 0x1c, 0x39, 0x39, 0x3a, 0x3c, - 0x79, 0x79, 0xf2, 0xe2, 0xe4, 0xe5, 0x85, 0x49, 0x48, 0x08, 0xd0, 0xd0, 0x90, 0x20, 0x20, 0x40, - 0x40, 0x40, 0xc1, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, - 0x0b, 0x0f, 0x0f, 0x1f, 0x2f, 0x7c, 0x7c, 0xf8, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x0f, 0x0f, 0x0f, - 0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7e, 0x7f, 0xff, 0x78, 0xf8, 0xe0, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x0f, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x07, 0x07, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x06, - 0x0e, 0x0e, 0x0c, 0x0c, 0x00, 0x03, 0x47, 0x46, 0xc6, 0x8c, 0x8c, 0x0c, 0x18, 0x30, 0x63, 0x4c, - 0x50, 0xcc, 0x83, 0x00, 0x00, 0x12, 0x1f, 0x10, 0x00, 0x10, 0x00, 0x0e, 0x15, 0x13, 0x0e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x60, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, - 0x70, 0x70, 0x30, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x07, 0x0f, 0x1f, - 0x1f, 0x1f, 0x1e, 0x1e, 0x1e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x10, 0x30, 0x30, - 0x30, 0x30, 0x38, 0x38, 0x7c, 0x3c, 0x3c, 0x3c, 0x7c, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, - 0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xe0, 0x80, 0x80, 0x40, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x60, 0x20, 0x60, 0x60, 0x60, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x06, 0x06, 0x0c, 0x08, 0x08, 0x10, 0x30, 0x20, 0x20, 0x60 -}; - -static const char PROGMEM layer1[] = { - // 'alt', 128x32px - 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0xa0, 0xb0, 0xf0, 0xd0, 0xd0, 0xf8, 0xfc, 0xdc, 0xfe, - 0xff, 0xff, 0xff, 0xdf, 0xde, 0xde, 0x9c, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0x90, 0xa0, 0x40, - 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, - 0x40, 0x40, 0x20, 0x20, 0x20, 0x90, 0xd0, 0xd0, 0xc8, 0xe8, 0xec, 0xe4, 0xfc, 0xfa, 0xfa, 0xfa, - 0xf4, 0xe4, 0xe4, 0xc8, 0xc8, 0xd8, 0x90, 0x90, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x80, 0x80, 0xc0, 0x60, 0x30, 0x10, 0x00, 0x40, 0x60, - 0x30, 0x10, 0xf8, 0x0c, 0x06, 0x02, 0x00, 0x10, 0x08, 0x18, 0x3f, 0xe8, 0x08, 0x24, 0x3c, 0x0c, - 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x04, 0x82, 0x42, 0x22, 0x1c, 0x00, - 0xb9, 0x3d, 0x3d, 0x7c, 0x3e, 0x3f, 0x3f, 0x1d, 0x0d, 0x0f, 0x0b, 0x1f, 0x1f, 0x1f, 0x1f, 0x0b, - 0x0f, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x05, 0x07, 0x0f, 0x0b, 0x0b, 0x13, 0x13, 0x37, 0x7f, 0xf7, - 0xf7, 0xf8, 0xf0, 0xf8, 0xf8, 0xf1, 0xe1, 0xf3, 0x12, 0xd2, 0xd1, 0xd1, 0x11, 0x00, 0xc0, 0xc0, - 0xe0, 0xf0, 0x78, 0x78, 0xf9, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0x1f, - 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x0f, 0x1f, 0x1e, 0x1e, 0x1f, 0x1c, 0x39, 0x39, 0x3a, 0x3c, - 0x79, 0x79, 0xf2, 0xe2, 0xe4, 0xe5, 0x85, 0x49, 0x48, 0x08, 0xd0, 0xd0, 0x90, 0x20, 0x20, 0x40, - 0x40, 0x40, 0xc1, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x0b, 0x0f, 0x0f, 0x1f, 0x2f, 0x7c, 0x7c, 0xf8, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x0f, 0x0f, 0x0f, - 0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x1f, 0x1f, 0x3f, 0x7e, 0x7f, 0xff, 0x78, 0xf8, 0xe0, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x0f, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x07, 0x07, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x06, - 0x0e, 0x0e, 0x0c, 0x0c, 0x00, 0x03, 0x47, 0x46, 0xc6, 0x8c, 0x8c, 0x0c, 0x18, 0x30, 0x63, 0x4c, - 0x50, 0xcc, 0x83, 0x00, 0x00, 0x12, 0x1f, 0x10, 0x00, 0x10, 0x00, 0x0e, 0x15, 0x13, 0x0e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x60, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, - 0x70, 0x70, 0x30, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x07, 0x0f, 0x1f, - 0x1f, 0x1f, 0x1e, 0x1e, 0x1e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x10, 0x30, 0x30, - 0x30, 0x30, 0x38, 0x38, 0x7c, 0x3c, 0x3c, 0x3c, 0x7c, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf0, 0x60, - 0x60, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf0, 0xe0, 0x80, 0x80, 0x40, 0x60, - 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x60, 0x20, 0x20, 0x60, 0x20, 0x60, 0x60, 0x60, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, 0x06, 0x06, 0x0c, 0x08, 0x08, 0x10, 0x30, 0x20, 0x20, 0x60 -}; - - -static const char PROGMEM layer3[] = { - // 'mewl1', 128x32px - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xbf, 0xbf, 0xbf, - 0x9f, 0xaf, 0xef, 0x1f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xcf, 0xf7, - 0xfb, 0x3b, 0x0d, 0x05, 0x81, 0xc1, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x3f, 0xdf, 0xef, 0xef, 0xdf, 0xdf, 0xbf, 0xbf, 0x5f, 0xdf, 0xff, 0xef, - 0xef, 0xef, 0xef, 0xf3, 0xfd, 0xdd, 0xbd, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xcb, 0x0d, 0x0d, 0x3d, 0xfe, 0xff, 0x3f, 0x5f, 0x1f, 0xd7, - 0xaf, 0xff, 0xff, 0xff, 0xfe, 0xe5, 0x07, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x8f, 0x1f, - 0x00, 0x00, 0x38, 0x7e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x87, 0x87, 0xc3, 0xc3, 0xe3, 0xe3, 0xc3, 0xc7, - 0x87, 0x0f, 0x1f, 0x3f, 0xff, 0xfe, 0xf9, 0xf7, 0xcf, 0x3f, 0xff, 0xff, 0xff, 0xbe, 0x3f, 0x7f, - 0x7f, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x9e, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf3, 0x73, 0x26, 0x84, 0xac, 0xef, - 0xf7, 0xe7, 0xc7, 0xc3, 0xc9, 0xd0, 0x94, 0x8a, 0x6d, 0x11, 0xe7, 0x1b, 0x03, 0x87, 0xff, 0x3e, - 0x48, 0x30, 0x0c, 0x03, 0x02, 0x10, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x01, 0x06, - 0x0f, 0x06, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x6f, - 0xf7, 0xf6, 0x60, 0x00, 0x00, 0x07, 0xff, 0xc7, 0x39, 0x7e, 0x71, 0x8f, 0xaf, 0xaf, 0xac, 0x1d, - 0x7c, 0xfe, 0x9d, 0x54, 0x57, 0x57, 0xaf, 0xab, 0xaf, 0x76, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf1, 0xf2, 0xf3, 0xfb, 0xf9, 0xe1, 0x91, - 0x7f, 0xff, 0xff, 0xc7, 0xf7, 0x7b, 0x3b, 0x01, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x80, 0xc1, 0x80, - 0x80, 0xc0, 0xf0, 0xfe, 0x7c, 0x83, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x37, 0x7b, 0x79, 0x30, - 0x48, 0x7e, 0x7f, 0xbe, 0xbc, 0x73, 0x6d, 0x1e, 0x9e, 0xac, 0xd1, 0xee, 0xee, 0xe6, 0xd3, 0x2f, - 0xdf, 0xbe, 0xbf, 0xbf, 0xdb, 0xcf, 0xdf, 0xdf, 0x0f, 0x70, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff -}; - -static const char PROGMEM layer2[] = { - // 'mewl2', 128x32px - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, - 0x60, 0x50, 0x10, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x08, - 0x04, 0xc4, 0xf2, 0xfa, 0x7e, 0x3e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0xa0, 0x20, 0x00, 0x10, - 0x10, 0x10, 0x10, 0x0c, 0x02, 0x22, 0x42, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xf2, 0xf2, 0xc2, 0x01, 0x00, 0xc0, 0xa0, 0xe0, 0x28, - 0x50, 0x00, 0x00, 0x00, 0x01, 0x1a, 0xf8, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0xe0, - 0xff, 0xff, 0xc7, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0x78, 0x78, 0x3c, 0x3c, 0x1c, 0x1c, 0x3c, 0x38, - 0x78, 0xf0, 0xe0, 0xc0, 0x00, 0x01, 0x06, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x41, 0xc0, 0x80, - 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x61, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0c, 0x8c, 0xd9, 0x7b, 0x53, 0x10, - 0x08, 0x18, 0x38, 0x3c, 0x36, 0x2f, 0x6b, 0x75, 0x92, 0xee, 0x18, 0xe4, 0xfc, 0x78, 0x00, 0xc1, - 0xb7, 0xcf, 0xf3, 0xfc, 0xfd, 0xef, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xfe, 0xf9, - 0xf0, 0xf9, 0xff, 0x7f, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x90, - 0x08, 0x09, 0x9f, 0xff, 0xff, 0xf8, 0x00, 0x38, 0xc6, 0x81, 0x8e, 0x70, 0x50, 0x50, 0x53, 0xe2, - 0x83, 0x01, 0x62, 0xab, 0xa8, 0xa8, 0x50, 0x54, 0x50, 0x89, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x0d, 0x0c, 0x04, 0x06, 0x1e, 0x6e, - 0x80, 0x00, 0x00, 0x38, 0x08, 0x84, 0xc4, 0xfe, 0x07, 0xf8, 0xff, 0xff, 0xff, 0x7f, 0x3e, 0x7f, - 0x7f, 0x3f, 0x0f, 0x01, 0x83, 0x7c, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xc8, 0x84, 0x86, 0xcf, - 0xb7, 0x81, 0x80, 0x41, 0x43, 0x8c, 0x92, 0xe1, 0x61, 0x53, 0x2e, 0x11, 0x11, 0x19, 0x2c, 0xd0, - 0x20, 0x41, 0x40, 0x40, 0x24, 0x30, 0x20, 0x20, 0xf0, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -static const char PROGMEM layer4[] = { - // 'celebi1', 128x32px - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, - 0x20, 0xc0, 0xe0, 0xe0, 0xf0, 0xdc, 0xee, 0xf0, 0xbe, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x60, 0xc0, 0x81, 0x80, 0x80, 0xc0, - 0xc0, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x80, 0xc0, 0xc0, 0xc0, - 0x60, 0xb0, 0xcc, 0xf0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xc0, 0xf8, 0xfc, 0xfc, 0xfb, - 0xf4, 0xff, 0xff, 0x7f, 0x1f, 0xcf, 0x67, 0xe3, 0xc7, 0x0f, 0x9f, 0xff, 0x3e, 0xc0, 0xf0, 0x78, - 0x90, 0xe0, 0xf2, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x3f, - 0x3f, 0x3b, 0x3e, 0x79, 0xfe, 0xfe, 0xff, 0xfe, 0x7c, 0xfc, 0xf8, 0xd8, 0xf0, 0xf0, 0xb0, 0xa0, - 0xa0, 0xa0, 0xe0, 0xe0, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x31, 0x40, 0xf0, 0xf8, 0xfc, 0xfe, 0xf0, 0xff, 0xf0, 0xff, 0x7f, 0x3f, 0xbf, 0x9f, - 0x9f, 0x1f, 0x3f, 0xfe, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x87, 0x8f, 0x9f, - 0x9f, 0x9f, 0xc7, 0xcc, 0xd8, 0xd8, 0x98, 0x3c, 0xfc, 0xf7, 0xfb, 0x1c, 0x1d, 0x1e, 0x1e, 0x1f, - 0x0f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x87, 0xcf, 0x6d, 0xf8, 0x72, 0xf4, - 0xf4, 0x90, 0x20, 0x20, 0xa7, 0x6f, 0x6f, 0x6b, 0x0b, 0x06, 0x06, 0x05, 0x05, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, - 0xc0, 0xc0, 0xc0, 0xc0, 0x83, 0x8f, 0x9f, 0x3f, 0x7f, 0x5f, 0xff, 0x71, 0xe0, 0xe1, 0x60, 0x62, - 0x27, 0x30, 0x18, 0x9f, 0xcf, 0xc3, 0xc0, 0xc0, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x40, 0xe0, 0xe0, 0xc8, 0x9c, 0xf8, 0x60, 0x28, 0x3c, 0x7e, 0x7e, 0xfe, 0xff, 0xfc, 0xe1, - 0x07, 0x1f, 0x3f, 0x3e, 0x7d, 0x7b, 0x73, 0x72, 0xe2, 0xe0, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, - 0x01, 0x01, 0xc1, 0xc1, 0x03, 0x03, 0x03, 0x23, 0x01, 0x0d, 0x06, 0x07, 0x37, 0x33, 0x01, 0x01, - 0x07, 0x0e, 0x3c, 0x39, 0x79, 0x71, 0x71, 0x60, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -static const char PROGMEM layer5[] = { - // 'celebi2', 128x32px - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, - 0xdf, 0x3f, 0x1f, 0x1f, 0x0f, 0x23, 0x11, 0x0f, 0x41, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x9f, 0x3f, 0x7e, 0x7f, 0x7f, 0x3f, - 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xff, 0x7f, 0x3f, 0x3f, 0x3f, - 0x9f, 0x4f, 0x33, 0x0f, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0x3f, 0x07, 0x03, 0x03, 0x04, - 0x0b, 0x00, 0x00, 0x80, 0xe0, 0x30, 0x98, 0x1c, 0x38, 0xf0, 0x60, 0x00, 0xc1, 0x3f, 0x0f, 0x87, - 0x6f, 0x1f, 0x0d, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x80, 0xc0, - 0xc0, 0xc4, 0xc1, 0x86, 0x01, 0x01, 0x00, 0x01, 0x83, 0x03, 0x07, 0x27, 0x0f, 0x0f, 0x4f, 0x5f, - 0x5f, 0x5f, 0x1f, 0x1f, 0x9f, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf1, 0xce, 0xbf, 0x0f, 0x07, 0x03, 0x01, 0x0f, 0x00, 0x0f, 0x00, 0x80, 0xc0, 0x40, 0x60, - 0x60, 0xe0, 0xc0, 0x01, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7c, 0x78, 0x70, 0x60, - 0x60, 0x60, 0x38, 0x33, 0x27, 0x27, 0x67, 0xc3, 0x03, 0x08, 0x04, 0xe3, 0xe2, 0xe1, 0xe1, 0xe0, - 0xf0, 0xf0, 0xf8, 0xfe, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0x78, 0x30, 0x92, 0x07, 0x8d, 0x0b, - 0x0b, 0x6f, 0xdf, 0xdf, 0x58, 0x90, 0x90, 0x94, 0xf4, 0xf9, 0xf9, 0xfa, 0xfa, 0xfe, 0xfe, 0xfe, - 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x7c, 0x70, 0x60, 0xc0, 0x80, 0xa0, 0x00, 0x8e, 0x1f, 0x1e, 0x9f, 0x9d, - 0xd8, 0xcf, 0xe7, 0x60, 0x30, 0x3c, 0x3f, 0x3f, 0x3f, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, - 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xfc, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xbf, 0x1f, 0x1f, 0x37, 0x63, 0x07, 0x9f, 0xd7, 0xc3, 0x81, 0x81, 0x01, 0x00, 0x03, 0x1e, - 0xf8, 0xe0, 0xc0, 0xc1, 0x82, 0x84, 0x8c, 0x8d, 0x1d, 0x1f, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, - 0xfe, 0xfe, 0x3e, 0x3e, 0xfc, 0xfc, 0xfc, 0xdc, 0xfe, 0xf2, 0xf9, 0xf8, 0xc8, 0xcc, 0xfe, 0xfe, - 0xf8, 0xf1, 0xc3, 0xc6, 0x86, 0x8e, 0x8e, 0x9f, 0x1f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff -}; - -static const char PROGMEM layer6[] = { - // 'rayquaza1', 128x32px - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, - 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x70, 0x70, 0x71, 0x50, 0x60, 0x60, 0x60, 0x40, 0x80, 0x80, - 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x80, 0x00, 0xc0, 0x60, 0x00, 0x00, 0x80, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0, - 0xe0, 0x60, 0x70, 0x70, 0x7b, 0x7b, 0xfb, 0xfb, 0xf8, 0xb0, 0xb0, 0xd0, 0x60, 0x30, 0x10, 0x08, - 0x0c, 0x84, 0x86, 0x83, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x30, 0x1c, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xf0, 0x11, 0x12, 0x10, 0x10, 0x0e, 0x0e, 0x0c, 0x0c, 0x07, - 0x07, 0x0f, 0x0f, 0x03, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x9f, 0xf3, 0x3e, 0xe7, 0xfc, 0x7f, 0x3f, 0x0f, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3c, 0x2e, 0x57, 0x17, 0x1b, 0x1d, 0x36, - 0x36, 0x3d, 0x31, 0x31, 0x39, 0x3d, 0x3d, 0x1d, 0x1f, 0x1f, 0xcf, 0x3f, 0x07, 0x00, 0x00, 0x81, - 0x83, 0x83, 0x83, 0x03, 0x07, 0x07, 0x07, 0x0f, 0x0e, 0x1e, 0x1c, 0x3c, 0x78, 0xf8, 0xf0, 0xe0, - 0x00, 0x40, 0xc0, 0x00, 0x60, 0x38, 0x38, 0x20, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x7f, 0xfe, 0xec, 0xf8, 0x7c, 0x3c, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xcf, 0x80, 0x07, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x08, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xc1, - 0x07, 0x0f, 0x9f, 0xbe, 0x78, 0xf0, 0xc0, 0x00, 0x80, 0x00, 0x80, 0x30, 0x30, 0x30, 0x11, 0x19, - 0x18, 0x02, 0x07, 0x1f, 0x1f, 0x3c, 0x73, 0xcf, 0x0f, 0x0f, 0x0f, 0x17, 0x2f, 0x56, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1d, 0x3b, 0xff, 0xff, 0xfc, 0xf8, 0xf0, - 0x60, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x68, 0x78, 0x10, 0x00, 0x18, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x7f, 0xff, 0xfc, 0xf8, 0xe0, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xe0, - 0xf0, 0xf0, 0xf0, 0xf1, 0xe1, 0x41, 0x04, 0x1e, 0xcf, 0xc7, 0x44, 0x63, 0x59, 0x6d, 0x0a, 0x03, - 0x03, 0x0c, 0x0e, 0x05, 0x03, 0x02, 0x02, 0x1b, 0xec, 0x67, 0x5b, 0x1c, 0x8c, 0xcc, 0xdc, 0x30, - 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xc0, 0x3f, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -static const char PROGMEM layer7[] = { - // 'rayquaza2', 128x32px - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfd, 0xfb, 0xfb, 0xf7, 0xf7, 0xef, - 0xef, 0xdf, 0xdf, 0xbf, 0xbf, 0xbf, 0x8f, 0x8f, 0x8e, 0xaf, 0x9f, 0x9f, 0x9f, 0xbf, 0x7f, 0x7f, - 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x3f, 0x7f, 0xff, 0x3f, 0x9f, 0xff, 0xff, 0x7f, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x3f, 0x3f, - 0x1f, 0x9f, 0x8f, 0x8f, 0x84, 0x84, 0x04, 0x04, 0x07, 0x4f, 0x4f, 0x2f, 0x9f, 0xcf, 0xef, 0xf7, - 0xf3, 0x7b, 0x79, 0x7c, 0x7e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xcf, 0xe3, 0xfd, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x0f, 0xee, 0xed, 0xef, 0xef, 0xf1, 0xf1, 0xf3, 0xf3, 0xf8, - 0xf8, 0xf0, 0xf0, 0xfc, 0xf9, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x60, 0x0c, 0xc1, 0x18, 0x03, 0x80, 0xc0, 0xf0, - 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xc3, 0xd1, 0xa8, 0xe8, 0xe4, 0xe2, 0xc9, - 0xc9, 0xc2, 0xce, 0xce, 0xc6, 0xc2, 0xc2, 0xe2, 0xe0, 0xe0, 0x30, 0xc0, 0xf8, 0xff, 0xff, 0x7e, - 0x7c, 0x7c, 0x7c, 0xfc, 0xf8, 0xf8, 0xf8, 0xf0, 0xf1, 0xe1, 0xe3, 0xc3, 0x87, 0x07, 0x0f, 0x1f, - 0xff, 0xbf, 0x3f, 0xff, 0x9f, 0xc7, 0xc7, 0xdf, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x01, 0x00, 0x80, 0x01, 0x13, 0x07, 0x83, 0xc3, - 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x30, 0x7f, 0xf8, 0xfe, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xdf, 0xf7, 0xff, 0xff, 0x7f, 0x3f, 0x3f, 0x3e, - 0xf8, 0xf0, 0x60, 0x41, 0x87, 0x0f, 0x3f, 0xff, 0x7f, 0xff, 0x7f, 0xcf, 0xcf, 0xcf, 0xee, 0xe6, - 0xe7, 0xfd, 0xf8, 0xe0, 0xe0, 0xc3, 0x8c, 0x30, 0xf0, 0xf0, 0xf0, 0xe8, 0xd0, 0xa9, 0xdf, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe2, 0xc4, 0x00, 0x00, 0x03, 0x07, 0x0f, - 0x9f, 0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x9f, 0x97, 0x87, 0xef, 0xff, 0xe7, 0x6f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x00, 0x03, 0x07, 0x1f, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x3f, 0x1f, 0x1f, - 0x0f, 0x0f, 0x0f, 0x0e, 0x1e, 0xbe, 0xfb, 0xe1, 0x30, 0x38, 0xbb, 0x9c, 0xa6, 0x92, 0xf5, 0xfc, - 0xfc, 0xf3, 0xf1, 0xfa, 0xfc, 0xfd, 0xfd, 0xe4, 0x13, 0x98, 0xa4, 0xe3, 0x73, 0x33, 0x23, 0xcf, - 0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x3f, 0xc0, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff -}; - -// MTNS -static void mountains(void) { - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_raw_P(layer0, sizeof(layer0)); - break; - case 1: - oled_write_raw_P(layer1, sizeof(layer1)); - break; - default: - oled_write_raw_P(layer0, sizeof(layer0)); - break; - } -} - -// MEW -static void mew(void) { - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_raw_P(layer2, sizeof(layer2)); - break; - case 1: - oled_write_raw_P(layer3, sizeof(layer3)); - break; - default: - oled_write_raw_P(layer2, sizeof(layer2)); - break; - } -} - -// CEL -static void celebi(void) { - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_raw_P(layer4, sizeof(layer4)); - break; - case 1: - oled_write_raw_P(layer5, sizeof(layer5)); - break; - default: - oled_write_raw_P(layer4, sizeof(layer4)); - break; - } -} - -// RAY -static void rayquaza(void) { - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_raw_P(layer6, sizeof(layer6)); - break; - case 1: - oled_write_raw_P(layer7, sizeof(layer7)); - break; - default: - oled_write_raw_P(layer6, sizeof(layer6)); - break; - } -} - -// INFO -static void info(void) { - // get layer the board is on - oled_write_P(PSTR("LAYER "), false); - oled_write_P(PSTR(" "), true); - oled_write_char(get_highest_layer(layer_state) + 0x30, true); - oled_write_P(PSTR(" "), true); - - // here we do a bit of trickery - oled_write_P(PSTR(" ENC "), false); - oled_write_P(PSTR(" VOL "), true); - - // lock key statuses - led_t led_state = host_keyboard_led_state(); - oled_set_cursor(9, 1); - oled_write_P(PSTR(" CAP "), led_state.caps_lock); - oled_set_cursor(14, 1); - oled_write_P(PSTR(" SCR "), led_state.scroll_lock); - - // write model B here in invert text - oled_set_cursor(0, 3); - oled_write_P(PSTR(" MODEL-B "), true); - - // mod masks - if you don't know what these do, don't worry about them - uint8_t mod_state = get_mods(); - oled_advance_char(); - oled_advance_char(); - oled_write_P(PSTR("S"), mod_state & MOD_MASK_SHIFT); - oled_advance_char(); - oled_write_P(PSTR("C"), mod_state & MOD_MASK_CTRL); - oled_advance_char(); - oled_write_P(PSTR("A"), mod_state & MOD_MASK_ALT); - oled_advance_char(); - oled_write_P(PSTR("G"), mod_state & MOD_MASK_GUI); - oled_advance_char(); -} - -// display logo - used on boot and exception state -static void logo(void) { - oled_write_raw_P(bootscreen, sizeof(bootscreen)); -} - -// logo, but also have some signifier for the current layer -static void logo_with_layer(void) { - switch (get_highest_layer(layer_state)) { - case 0: - oled_write_raw_P(bootscreen, sizeof(bootscreen)); - break; - case 1: - oled_write_raw_P(invertlogo, sizeof(invertlogo)); - break; - default: - oled_write_raw_P(bootscreen, sizeof(bootscreen)); - break; - } -} - -// run this whenever the oled needs to update -bool oled_task_user(void) { - user_config.raw = eeconfig_read_user(); // read saved config - display_mode = user_config.display_mode_saved; - switch (display_mode) { - case MTNS: - mountains(); - break; - case INFO: - info(); - break; - case LOGO: - logo_with_layer(); - break; - case MEW: - mew(); - break; - case CEL: - celebi(); - break; - case RAY: - rayquaza(); - break; - default: - logo(); - } - return false; -} - -// what happens on sleep/power down -void suspend_power_down_user(void) { - oled_off(); -} - -// render this on boot/reset -void oled_render_boot(bool bootloader) { - oled_clear(); - logo(); - oled_render_dirty(true); -} - -// run this on boot/reset -bool shutdown_user(bool jump_to_bootloader) { - oled_render_boot(jump_to_bootloader); - return false; -} - -// change depending on if OLED_MOD is pressed -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (keycode == OLED_MOD) { - if (record->event.pressed) { - oled_clear(); - if (display_mode == NUM_MODES - 1) { - display_mode = 0; - } - else { - display_mode++; - } - user_config.display_mode_saved = display_mode; - eeconfig_update_user(user_config.raw); // update config when screen changes - } - } - return true; -} - -#endif diff --git a/firmware/ver0/rev0/keymaps/via/rules.mk b/firmware/ver0/rev0/keymaps/via/rules.mk deleted file mode 100644 index 1e5b998..0000000 --- a/firmware/ver0/rev0/keymaps/via/rules.mk +++ /dev/null @@ -1 +0,0 @@ -VIA_ENABLE = yes diff --git a/firmware/ver0/rules.mk b/firmware/ver0/rules.mk deleted file mode 100644 index f857486..0000000 --- a/firmware/ver0/rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -OLED_ENABLE = yes -OLED_DRIVER = ssd1306 -OLED_TRANSPORT = i2c - -ENCODER_ENABLE = yes -ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/firmware/ver0/trojan_pinata_model_b_rev0_default.uf2 b/firmware/ver0/trojan_pinata_model_b_rev0_default.uf2 deleted file mode 100644 index 0fd085f2fb69f59dfd201296b0bb1a22558c90e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80384 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