summaryrefslogtreecommitdiff
path: root/keyboard/planck
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard/planck')
-rw-r--r--keyboard/planck/Makefile140
-rw-r--r--keyboard/planck/PCB_GUIDE.md114
-rw-r--r--keyboard/planck/README.md48
-rw-r--r--keyboard/planck/backlight.c61
-rw-r--r--keyboard/planck/config.h79
-rwxr-xr-xkeyboard/planck/flash-pcb.sh3
-rw-r--r--keyboard/planck/keymaps/keymap_angerthosenear.c50
-rw-r--r--keyboard/planck/keymaps/keymap_austin.c50
-rw-r--r--keyboard/planck/keymaps/keymap_charlie.c54
-rw-r--r--keyboard/planck/keymaps/keymap_daniel.c48
-rw-r--r--keyboard/planck/keymaps/keymap_david.c76
-rw-r--r--keyboard/planck/keymaps/keymap_default.c68
-rw-r--r--keyboard/planck/keymaps/keymap_dzobert.c49
-rw-r--r--keyboard/planck/keymaps/keymap_jack.c50
-rw-r--r--keyboard/planck/keymaps/keymap_joe.c88
-rw-r--r--keyboard/planck/keymaps/keymap_kyle.c49
-rw-r--r--keyboard/planck/keymaps/keymap_leo.c46
-rw-r--r--keyboard/planck/keymaps/keymap_lock.c121
-rw-r--r--keyboard/planck/keymaps/keymap_max.c49
-rw-r--r--keyboard/planck/keymaps/keymap_monkey.c76
-rw-r--r--keyboard/planck/keymaps/keymap_numpad.c26
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_brett.c42
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_dotcom.c34
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_jack.c50
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_joe.c83
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_matthew.c70
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_nathan.c153
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_paul.c49
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_peasant.c51
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_reed.c74
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_sean.c53
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_shane.c98
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_simon.c44
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_tim.c44
-rw-r--r--keyboard/planck/old_keymap_files/common_keymaps/keymap_wilba.c56
-rw-r--r--keyboard/planck/old_keymap_files/keymap_common.c30
-rw-r--r--keyboard/planck/old_keymap_files/keymap_common.h129
-rw-r--r--keyboard/planck/planck.c31
-rw-r--r--keyboard/planck/planck.h38
-rw-r--r--keyboard/planck/planck_pcb.hex1544
-rwxr-xr-xkeyboard/planck/planck_with_bootloader.hex1796
41 files changed, 5814 insertions, 0 deletions
diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile
new file mode 100644
index 0000000000..fc26905d80
--- /dev/null
+++ b/keyboard/planck/Makefile
@@ -0,0 +1,140 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+# Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+# (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+# have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+# have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+# (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+# (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+# with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+# bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# Target file name (without extension).
+TARGET = planck
+
+
+# Directory common source filess exist
+TOP_DIR = ../..
+TMK_DIR = ../../tmk_core
+
+# Directory keyboard dependent files exist
+TARGET_DIR = .
+
+# # project specific files
+SRC = planck.c \
+ backlight.c
+
+ifdef KEYMAP
+ SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
+else
+ SRC := keymaps/keymap_default.c $(SRC)
+endif
+
+CONFIG_H = config.h
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+# NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = YES # MIDI controls
+# UNICODE_ENABLE = YES # Unicode
+BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+
+# Optimize size but this may cause error "relocation truncated to fit"
+#EXTRALDFLAGS = -Wl,--relax
+
+# Search Path
+VPATH += $(TARGET_DIR)
+VPATH += $(TOP_DIR)
+VPATH += $(TMK_DIR)
+
+include $(TOP_DIR)/quantum.mk
+
diff --git a/keyboard/planck/PCB_GUIDE.md b/keyboard/planck/PCB_GUIDE.md
new file mode 100644
index 0000000000..10b86bb3b2
--- /dev/null
+++ b/keyboard/planck/PCB_GUIDE.md
@@ -0,0 +1,114 @@
+# Planck Firmware Guide
+
+## Setting up the environment
+
+### Windows
+1. Install [WinAVR Tools](http://sourceforge.net/projects/winavr/) for AVR GCC compiler.
+2. Install [DFU-Programmer][dfu-prog] (the -win one).
+3. Start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you will need to update its driver on 'Device Manager' to the `dfu-programmer` driver.
+
+### Mac
+1. Install Xcode from the App Store.
+2. Install the Command Line Tools from `Xcode->Preferences->Downloads`.
+3. Install [DFU-Programmer][dfu-prog].
+
+### Linux
+1. Install AVR GCC with your favorite package manager.
+2. Install [DFU-Programmer][dfu-prog].
+
+## Verify Your Installation
+1. Clone the following repository: https://github.com/jackhumbert/qmk_firmware
+2. Open a Terminal and `cd` into `qmk_firmware/keyboard/planck`
+3. Run `make`. This should output a lot of information about the build process.
+
+## Using the built-in functions
+
+Here is a list of some of the functions available from the command line:
+
+* `make clean`: clean the environment - may be required in-between builds
+* `make`: compile the code
+* `make KEYMAP=<keymap>`: compile with the extended keymap file `extended_keymaps/extended_keymap_<keymap>.c`
+* `make dfu`: build and flash the layout to the PCB
+* `make dfu-force`: build and force-flash the layout to the PCB (may be require for first flash)
+
+Generally, the instructions to flash the PCB are as follows:
+
+1. Make changes to the appropriate keymap file
+2. Save the file
+3. `make clean`
+4. Press the reset button on the PCB/press the key with the `RESET` keycode
+5. `make <arguments> dfu` - use the necessary `KEYMAP=<keymap>` and/or `COMMON=true` arguments here.
+
+## Quantum MK Firmware
+
+### Keymap
+
+Unlike the other keymaps, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/jackhumbert/qmk_firmware/blob/master/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/jackhumbert/qmk_firmware/blob/master/quantum/keymap_common.h).
+
+You can use modifiers with keycodes like this:
+
+ LCTL(KC_C)
+
+Which will generate Ctrl+c. These are daisy-chainable, meaning you can do things like:
+
+ LCTL(LALT(KC_C))
+
+That will generate Ctrl+Alt+c. The entire list of these functions is here:
+
+* `LCTL()`: Left control
+* `LSFT()` / `S()`: Left shift
+* `LALT()`: Left alt/opt
+* `LGUI()`: Left win/cmd
+* `RCTL()`: Right control
+* `RSFT()`: Right shift
+* `RALT()`: Right alt/opt
+* `RGUI()`: Right win/cmd
+
+`S(KC_1)`-like entries are useful in writing keymaps for the Planck.
+
+### Other keycodes
+
+A number of other keycodes have been added that you may find useful:
+
+* `CM_<key>`: the Colemak equivalent of a key (in place of `KC_<key>`), when using Colemak in software (`CM_O` generates `KC_SCLN`)
+* `RESET`: jump to bootloader for flashing (same as press the reset button)
+* `BL_STEP`: step through the backlight brightnesses
+* `BL_<0-15>`: set backlight brightness to 0-15
+* `BL_DEC`: lower the backlight brightness
+* `BL_INC`: raise the backlight brightness
+* `BL_TOGG`: toggle the backlight on/off
+
+### Function layers
+
+The extended keymap extends the number of function layers from 32 to the near-infinite value of 256. Rather than using `FN<num>` notation (still available, but limited to `FN0`-`FN31`), you can use the `FUNC(<num>)` notation. `F(<num>)` is a shortcut for this.
+
+The function actions are unchanged, and you can see the full list of them [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/common/action_code.h). They are explained in detail [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keymap.md#2-action).
+
+### Macros
+
+Macros have been setup in the `keymaps/keymap_default.c` file so that you can use `M(<num>)` to access a macro in the `action_get_macro` section on your keymap. The switch/case structure you see here is required, and is setup for `M(0)` - you'll need to copy and paste the code to look like this (e.g. to support `M(3)`):
+
+ switch(id) {
+ case 0:
+ return MACRODOWN(TYPE(KC_A), END);
+ break;
+ case 1:
+ return MACRODOWN(TYPE(KC_B), END);
+ break;
+ case 2:
+ return MACRODOWN(TYPE(KC_C), END);
+ break;
+ case 3:
+ return MACRODOWN(TYPE(KC_D), END);
+ break;
+ }
+ return MACRO_NONE;
+
+`MACRODOWN()` is a shortcut for `(record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)` which tells the macro to execute when the key is pressed. Without this, the macro will be executed on both the down and up stroke.
+
+[cygwin]: https://www.cygwin.com/
+[mingw]: http://www.mingw.org/
+[mhv]: https://infernoembedded.com/products/avr-tools
+[winavr]: http://winavr.sourceforge.net/
+[crosspack]: http://www.obdev.at/products/crosspack/index.html
+[dfu-prog]: http://dfu-programmer.sourceforge.net/
diff --git a/keyboard/planck/README.md b/keyboard/planck/README.md
new file mode 100644
index 0000000000..a733f07937
--- /dev/null
+++ b/keyboard/planck/README.md
@@ -0,0 +1,48 @@
+Planck keyboard firmware
+======================
+DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
+
+## Quantum MK Firmware
+You have access to a bunch of goodies:
+
+- Use `LSFT()`, `LCTL()`, et. al. (listed in keymap_common.h) as modifiers for keys (daisy-chain-able)
+- Use `FUNC(1)` instead of `FN1` (etc.) to access the function layers beyond the 32 function layer limit
+- Use `CM_F` instead of `KC_F` to get the ColeMak equivilent for shortcuts (maps backwards)
+- Use `MACRODOWN()` instead of `MACRO()` to easily make a keydown macro (`CM_*` works here too)
+
+### Some notes on usage:
+
+- The `KEYMAP()` macro is unable to be used due to the bitwise modifications that take place - refer to extended_keymap_jack.c to see how to set things up with the `KC_` prefix
+- Keep an eye on the Makefile - this needs to include the correct files to work
+- Don't forget to use `const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {` instead of the 8bit equivilent
+
+## Build
+
+Follow [this guide](http://deskthority.net/workshop-f7/how-to-build-your-very-own-keyboard-firmware-t7177.html) to setup your development environment before anything else. Abbreviated instructions are provide at the [bottom of this document](https://github.com/rswiernik/tmk_keyboard/tree/rswiernik_dev/keyboard/planck#environment-setup)
+
+Download the whole firmware [here](https://github.com/jackhumbert/tmk_keyboard/archive/master.zip) and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex that you can load with the Teensy app onto your Planck (once you've hit reset/shorted GND & RST).
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+####Default
+To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows:
+```
+$ make
+```
+
+## Keymap
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
+
+####**Keymaps**
+
+To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+_The only applicable keymaps will work with this option._ Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.
+
+## Notable TMK forks (which some of the keymap files are from)
+- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
+- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c)
+- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck)
+- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid)
diff --git a/keyboard/planck/backlight.c b/keyboard/planck/backlight.c
new file mode 100644
index 0000000000..f69364b2af
--- /dev/null
+++ b/keyboard/planck/backlight.c
@@ -0,0 +1,61 @@
+
+#include <avr/io.h>
+#include "backlight.h"
+
+#define CHANNEL OCR1C
+
+void backlight_init_ports()
+{
+
+ // Setup PB7 as output and output low.
+ DDRB |= (1<<7);
+ PORTB &= ~(1<<7);
+
+ // Use full 16-bit resolution.
+ ICR1 = 0xFFFF;
+
+ // I could write a wall of text here to explain... but TL;DW
+ // Go read the ATmega32u4 datasheet.
+ // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
+
+ // Pin PB7 = OCR1C (Timer 1, Channel C)
+ // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
+ // (i.e. start high, go low when counter matches.)
+ // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
+ // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
+
+ TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
+ TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+
+ backlight_init();
+}
+
+void backlight_set(uint8_t level)
+{
+ if ( level == 0 )
+ {
+ // Turn off PWM control on PB7, revert to output low.
+ TCCR1A &= ~(_BV(COM1C1));
+ CHANNEL = 0x0;
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ }
+ else if ( level == BACKLIGHT_LEVELS )
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+ // Set the brightness
+ CHANNEL = 0xFFFF;
+ }
+ else
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+ // Set the brightness
+ CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+ }
+} \ No newline at end of file
diff --git a/keyboard/planck/config.h b/keyboard/planck/config.h
new file mode 100644
index 0000000000..a4c711db82
--- /dev/null
+++ b/keyboard/planck/config.h
@@ -0,0 +1,79 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Ortholinear Keyboards
+#define PRODUCT The Planck Keyboard
+#define DESCRIPTION A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define ROWS (int []){ D0, D5, B5, B6 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+#define NO_DEBUG
+
+/* disable print */
+#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboard/planck/flash-pcb.sh b/keyboard/planck/flash-pcb.sh
new file mode 100755
index 0000000000..2ae15458c0
--- /dev/null
+++ b/keyboard/planck/flash-pcb.sh
@@ -0,0 +1,3 @@
+dfu-programmer atmega32u4 erase --force
+dfu-programmer atmega32u4 flash planck_pcb.hex
+dfu-programmer atmega32u4 reset \ No newline at end of file
diff --git a/keyboard/planck/keymaps/keymap_angerthosenear.c b/keyboard/planck/keymaps/keymap_angerthosenear.c
new file mode 100644
index 0000000000..cdf60632e4
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_angerthosenear.c
@@ -0,0 +1,50 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
+ {KC_LCTL, KC_LGUI, KC_LALT, BL_STEP, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* WASD + NumPad */
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PMNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PPLS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PENT, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_SPC, KC_P0, FUNC(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+[2] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* LOWER */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DEL},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+}
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_austin.c b/keyboard/planck/keymaps/keymap_austin.c
new file mode 100644
index 0000000000..49fc98a587
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_austin.c
@@ -0,0 +1,50 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {BL_STEP, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_FN3, KC_LGUI, KC_LALT, KC_LCTL, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[2] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* LOWER */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+}
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_charlie.c b/keyboard/planck/keymaps/keymap_charlie.c
new file mode 100644
index 0000000000..88f454d789
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_charlie.c
@@ -0,0 +1,54 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = { /* Native */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, FUNC(2)},
+ {KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_TAB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_DEL, KC_LCTL, KC_NO, KC_LSFT, KC_LALT, KC_SPC, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+ [1] = { /* QWERTY->PHOTOSHOP */
+ {KC_DELETE, KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, FUNC(1)},
+ {KC_O, KC_G, KC_S, KC_U, KC_T, FUNC(27), KC_F21, KC_F10, KC_F11, KC_F7, KC_F8, KC_F9},
+ {KC_TAB, FUNC(4), FUNC(5), FUNC(6), KC_F1, FUNC(7), KC_F18, KC_F19, KC_F23, KC_F20, KC_F22, FUNC(9)},
+ {KC_COMM, KC_DOT, KC_R, FUNC(11), FUNC(3), KC_SPC, FUNC(12), KC_F2, FUNC(8), KC_F3, KC_F14}
+ },
+ [2] = { /* 2: FUNC(3 PHOTOSHOP */
+ {KC_ESC, FUNC(25), FUNC(26), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
+ {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, FUNC(19), FUNC(20), FUNC(21)},
+ {KC_C, KC_NO, FUNC(22), FUNC(5), KC_NO, FUNC(23), KC_NO, KC_NO, KC_NO, KC_NO, FUNC(13), KC_NO},
+ {FUNC(14), FUNC(15), FUNC(16), FUNC(17), FUNC(3), KC_SPC, FUNC(18), KC_NO, KC_NO, KC_F24, KC_NO}
+ }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout
+ [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets
+ [3] = ACTION_LAYER_MOMENTARY(2), // Photoshop function layer
+
+ [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK
+ [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse
+ [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select
+ [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill
+ [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp
+ [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer
+ [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out
+ [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders
+ [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save
+ [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy
+ [14] = ACTION_MODS_KEY(MOD_LCTL, KC_F2), // stroke
+ [15] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_F2), // stroke layer
+ [16] = ACTION_MODS_KEY(MOD_LCTL, KC_0), // zoom 0
+ [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders
+ [18] = ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_S), // save as
+ [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur
+ [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur
+ [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending
+ [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_BSPC), // KC_NOrmal layer blending
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending
+ [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back
+ [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward
+ [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize
+
+};
diff --git a/keyboard/planck/keymaps/keymap_daniel.c b/keyboard/planck/keymaps/keymap_daniel.c
new file mode 100644
index 0000000000..234e48ff4a
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_daniel.c
@@ -0,0 +1,48 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
+ {FUNC(3), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* RAISE */
+ {KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_EQL},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, S(KC_MINS), KC_BSLS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[2] = { /* LOWER */
+ {S(KC_GRV), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_EQL)},
+ {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_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ENT},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* Qwerty */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL},
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {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_TRNS, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+}
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(1), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(2), // to LOWER
+ [3] = ACTION_LAYER_MOMENTARY(3) // to LOWER
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_david.c b/keyboard/planck/keymaps/keymap_david.c
new file mode 100644
index 0000000000..f483084801
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_david.c
@@ -0,0 +1,76 @@
+#include "keymap_common.h"
+#include "beeps.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_A, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {M(10), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[2] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F11, KC_F12, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* LOWER */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), RESET, M(0), M(1), M(2), S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ if (record->event.pressed) {
+ switch(id) {
+ case 0:
+ true_note(12, 12, 20);
+ break;
+ case 1:
+ true_note(14, 14, 20);
+ break;
+ case 2:
+ true_note(16, 16, 20);
+ break;
+ case 3:
+ true_note(17, 17, 20);
+ break;
+ case 4:
+ true_note(19, 19, 20);
+ break;
+ case 5:
+ true_note(21, 21, 20);
+ break;
+ case 6:
+ true_note(23, 23, 20);
+ break;
+ case 7:
+ true_note(24, 24, 20);
+ break;
+ case 10:
+
+ break;
+ }
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_default.c b/keyboard/planck/keymaps/keymap_default.c
new file mode 100644
index 0000000000..49670dafd3
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_default.c
@@ -0,0 +1,68 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "backlight.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _CM 1
+#define _DV 2
+#define _LW 3
+#define _RS 4
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_CM] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_DV] = { /* Dvorak */
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
+ {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
+ {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_RS] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[_LW] = { /* LOWER */
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ backlight_step();
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_dzobert.c b/keyboard/planck/keymaps/keymap_dzobert.c
new file mode 100644
index 0000000000..665e9c20b6
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_dzobert.c
@@ -0,0 +1,49 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_TAB},
+ {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_BSPC},
+ {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_FN4, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_BSPC},
+ {KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_FN3, KC_RSFT, KC_LGUI, KC_LSFT, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[2] = { /* RAISE */
+ {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_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_DEL},
+ {KC_TRNS, KC_GRV, KC_MINS, KC_EQL, KC_QUOT, S(KC_QUOT), S(KC_LBRC), S(KC_RBRC), KC_LBRC, KC_RBRC, KC_BSLS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_HOME, KC_PGUP, KC_PGDN, KC_END}
+},
+[3] = { /* LOWER */
+ {KC_POWER,KC_PSCR, KC_SLCK, KC_PAUSE, KC_NLCK, KC_EXECUTE, KC_MENU, KC_APP, KC_7, KC_8, KC_9, KC_KP_SLASH},
+ {KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_CAPS, KC_CANCEL, KC_UNDO, KC_AGAIN, KC_4, KC_5, KC_6, KC_KP_ASTERISK},
+ {KC_TRNS, KC_INSERT,KC_CUT, KC_COPY, KC_PASTE, KC_BSLS, KC_9, KC_0, KC_1, KC_2, KC_3, KC_KP_MINUS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_KP_DOT, KC_KP_ENTER, KC_KP_PLUS}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+}; \ No newline at end of file
diff --git a/keyboard/planck/keymaps/keymap_jack.c b/keyboard/planck/keymaps/keymap_jack.c
new file mode 100644
index 0000000000..0b93bba33f
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_jack.c
@@ -0,0 +1,50 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Jack soft-coded colemak */
+ {KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_BSPC},
+ {KC_ESC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT},
+ {KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_ENT},
+ {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Jack hard-coded colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[2] = { /* Jack RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* Jack LOWER */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+}
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
+ [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_joe.c b/keyboard/planck/keymaps/keymap_joe.c
new file mode 100644
index 0000000000..5b7bbe2bbb
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_joe.c
@@ -0,0 +1,88 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = { /* Joe colemak */
+ {F(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS},
+ {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT },
+ {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT},
+ {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT}
+ },
+ [1] = { /* Joe soft Colemak */
+ {F(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS},
+ {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT },
+ {F(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT},
+ {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT}
+ },
+ [2] = { /* Joe NUMPAD */
+ {F(3), KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, LSFT(KC_9), LSFT(KC_0), KC_PSLS, KC_P7, KC_P8, KC_P9 },
+ {KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, LSFT(KC_5), KC_PEQL, KC_PAST, KC_P4, KC_P5, KC_P6 },
+ {F(15), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_PMNS, KC_P1, KC_P2, KC_P3 },
+ {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_TRNS, KC_TRNS, F(2), KC_PPLS, KC_P0, KC_PDOT, KC_PENT}
+ },
+ [3] = { /* Joe 1337 haxOr5*/
+ {F(3), KC_Q, KC_W, KC_F, KC_P, KC_6, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS},
+ {KC_BSPC, KC_4, KC_R, KC_5, KC_7, KC_D, KC_H, KC_N, KC_3, KC_1, KC_0, KC_ENT },
+ {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_QUOT},
+ {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT}
+ },
+ [4] = { /* Joe LOWER fn1 */
+ {KC_GRV, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(3), M(2), M(1), M(0) },
+ {KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS},
+ {KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_PGUP, KC_EQL },
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_TRNS, KC_TRNS, F(2), KC_NO, KC_HOME, KC_PGDN, KC_END }
+ },
+ [5] = { /* Joe UPPER fn2 */
+ {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_DEL, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_WH_U, KC_BTN4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO },
+ {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_L, KC_WH_D, KC_WH_R, KC_NO, KC_NO, LCTL(KC_PGUP), LCTL(LALT(KC_UP)), LCTL(KC_PGDN) },
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_NO, KC_NO, F(2), KC_NO, LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_RGHT))}
+ },
+ [6] = { /* Joe SPECIAL fn3 */
+ {KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO },
+ {KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET },
+ {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO },
+ {F(6), F(7), F(8), F(9), F(1), KC_TRNS, KC_TRNS, F(2), KC_POWER, KC_WAKE, KC_SLEP, LCTL(LALT(KC_L))}
+ }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(4), // fn1
+ [2] = ACTION_LAYER_MOMENTARY(5), // fn2
+
+ /* ESC on tap, fn3 on hold */
+ [3] = ACTION_LAYER_TAP_KEY(6, KC_ESC),
+
+ /* toggle layers */
+ [6] = ACTION_DEFAULT_LAYER_SET(0),
+ [7] = ACTION_DEFAULT_LAYER_SET(1),
+ [8] = ACTION_DEFAULT_LAYER_SET(2),
+ [9] = ACTION_DEFAULT_LAYER_SET(3),
+
+ /* tab on tap, shift on hold */
+ [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch (id) {
+ case 0:
+ /* :) */
+ return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END );
+ break;
+ case 1:
+ /* :( */
+ return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END );
+ break;
+ case 2:
+ /* (: | :) */
+ return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END );
+ break;
+ case 3:
+ /* :( | ): */
+ return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END );
+ break;
+ default:
+ break;
+ }
+ return MACRO_NONE;
+}
diff --git a/keyboard/planck/keymaps/keymap_kyle.c b/keyboard/planck/keymaps/keymap_kyle.c
new file mode 100644
index 0000000000..da32b74f96
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_kyle.c
@@ -0,0 +1,49 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_RCTL, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Colemak */
+ {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[2] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* LOWER */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), LSFT(RSFT(KC_D)), KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
+ {BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_leo.c b/keyboard/planck/keymaps/keymap_leo.c
new file mode 100644
index 0000000000..6d66441822
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_leo.c
@@ -0,0 +1,46 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* BASE */
+ {KC_ESC, KC_LBRC, KC_QUOT, KC_SCLN, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
+ {KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT},
+ {KC_LSFT, KC_DOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_COMM},
+ {KC_LCTL, KC_LALT, KC_LGUI, FUNC(3), FUNC(2), KC_SPC, KC_SPC, FUNC(1), FUNC(3), KC_RGUI, KC_RALT, KC_RCTL}
+},
+[2] = { /* RAISE */
+ {RALT(KC_RBRC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, S(KC_RBRC)},
+ {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_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+[3] = { /* LOWER */
+ {S(KC_EQL),S(KC_1),S(KC_2),S(KC_3),RALT(KC_5),S(KC_5), S(KC_6), S(KC_7),RALT(KC_7),RALT(KC_0),S(KC_0), KC_MINS},
+ {KC_TRNS,RALT(KC_2),S(KC_SLSH),KC_NUBS,S(KC_NUBS),RALT(KC_MINS),RALT(KC_NUBS), KC_NUHS, S(KC_8), S(KC_9), S(KC_MINS), KC_SLSH},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_8), RALT(KC_9), 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}
+},
+[4] = { /* META */
+ {KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_DEL},
+ {KC_TRNS, KC_RGHT, KC_DOWN, KC_LEFT, KC_PGUP, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_PGDN, KC_TRNS, KC_VOLD, KC_VOLU, 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}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+ [3] = ACTION_LAYER_MOMENTARY(4), // to META
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/keymap_lock.c
new file mode 100644
index 0000000000..cc9be55f64
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_lock.c
@@ -0,0 +1,121 @@
+#include "keymap_common.h"
+#include "backlight.h"
+#include "action_layer.h"
+#include "keymap_midi.h"
+#include <avr/boot.h>
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[2] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F11, KC_F12, 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, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* LOWER */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[4] = { /* TENKEY */
+ {KC_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT},
+ {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[5] = {
+ { MIDI12 },
+ { MIDI12 },
+ { MIDI12 },
+ {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+uint16_t hextokeycode(int hex) {
+ if (hex == 0x0) {
+ return KC_0;
+ } else if (hex < 0xA) {
+ return KC_1 + (hex - 0x1);
+ } else {
+ return KC_A + (hex - 0xA);
+ }
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ // play_note(440, 20);
+ // register_code(KC_RSFT);
+ backlight_set(BACKLIGHT_LEVELS);
+ default_layer_and(0);
+ default_layer_or((1<<5));
+
+ // uint8_t low = boot_lock_fuse_bits_get(0x0000);
+ // uint8_t high = boot_lock_fuse_bits_get(0x0003);
+ // uint8_t ext = boot_lock_fuse_bits_get(0x0002);
+ // uint8_t lock = boot_lock_fuse_bits_get(0x0001);
+
+ // register_code(hextokeycode((low & 0xF0) >> 4));
+ // unregister_code(hextokeycode((low & 0xF0) >> 4));
+ // register_code(hextokeycode((low & 0x0F)));
+ // unregister_code(hextokeycode((low & 0x0F)));
+
+
+ // register_code(hextokeycode((high & 0xF0) >> 4));
+ // unregister_code(hextokeycode((high & 0xF0) >> 4));
+ // register_code(hextokeycode((high & 0x0F)));
+ // unregister_code(hextokeycode((high & 0x0F)));
+
+
+ // register_code(hextokeycode((ext & 0xF0) >> 4));
+ // unregister_code(hextokeycode((ext & 0xF0) >> 4));
+ // register_code(hextokeycode((ext & 0x0F)));
+ // unregister_code(hextokeycode((ext & 0x0F)));
+
+
+ // register_code(hextokeycode((lock & 0xF0) >> 4));
+ // unregister_code(hextokeycode((lock & 0xF0) >> 4));
+ // register_code(hextokeycode((lock & 0x0F)));
+ // unregister_code(hextokeycode((lock & 0x0F)));
+
+ // note(0+12, 20);
+ // note(0+24, 20);
+ } else {
+ // unregister_code(KC_RSFT);
+ // stop_note();
+ backlight_set(0);
+ default_layer_and(0);
+ default_layer_or(0);
+ // note(0+24, 20);
+ // note(0, 20);
+ // play_note(4, 20);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_max.c b/keyboard/planck/keymaps/keymap_max.c
new file mode 100644
index 0000000000..7fb29bc7a4
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_max.c
@@ -0,0 +1,49 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
+ {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ // Space is repeated to accommadate for both spacebar wiring positions
+},
+[1] = { /* Colemak */
+ {KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
+ {KC_LCTL, BL_STEP, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[2] = { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_TRNS},
+ {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_BSLS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[3] = { /* LOWER */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
+ {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), KC_TRNS},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(KC_BSLS)},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboard/planck/keymaps/keymap_monkey.c b/keyboard/planck/keymaps/keymap_monkey.c
new file mode 100644
index 0000000000..21a2c146ab
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_monkey.c
@@ -0,0 +1,76 @@
+#include "keymap_common.h"
+#include "backlight.h"
+#include "debug.h"
+
+#define COLEMAK_LAYER 0
+#define QWERTY_LAYER 1
+#define LOWER_LAYER 2
+#define UPPER_LAYER 3
+#define SPACEFN_LAYER 4
+#define TENKEY_LAYER 5
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[COLEMAK_LAYER] = { /* Colemak */
+ {KC_TAB, UNI(0x1961), KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[QWERTY_LAYER] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
+ {FUNC(5), KC_ESC, KC_LGUI, KC_LALT, FUNC(1), FUNC(6), FUNC(6), FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[LOWER_LAYER] = { /* LOWER */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE},
+ {KC_TRNS, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {KC_TRNS, KC_F11, KC_F12, 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_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+[UPPER_LAYER] = { /* RAISE */
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DELETE},
+ {KC_CALC, FUNC(3), FUNC(4), RESET, DEBUG, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
+ {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[SPACEFN_LAYER] = { /* SpaceFN */
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS},
+ {KC_TRNS, FUNC(3), FUNC(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, 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}
+},
+[TENKEY_LAYER] = { /* TENKEY */
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_BSPC},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_NLCK},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_PDOT, KC_ENT},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_KEY(LOWER_LAYER, KC_BSPC), // Tap for backspace, hold for LOWER
+ [2] = ACTION_LAYER_TAP_KEY(UPPER_LAYER, KC_ENT), // Tap for enter, hold for RAISE
+
+ [3] = ACTION_DEFAULT_LAYER_SET(COLEMAK_LAYER),
+ [4] = ACTION_DEFAULT_LAYER_SET(QWERTY_LAYER),
+ [5] = ACTION_LAYER_TOGGLE(TENKEY_LAYER),
+
+ [6] = ACTION_LAYER_TAP_KEY(SPACEFN_LAYER, KC_SPC), // Tap for space, hold for SpaceFN
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ backlight_step();
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+}; \ No newline at end of file
diff --git a/keyboard/planck/keymaps/keymap_numpad.c b/keyboard/planck/keymaps/keymap_numpad.c
new file mode 100644
index 0000000000..7de4372ab0
--- /dev/null
+++ b/keyboard/planck/keymaps/keymap_numpad.c
@@ -0,0 +1,26 @@
+#include "keymap_common.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_MINUS, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_KP_ENTER},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_ASTERISK, KC_KP_9, KC_KP_6, KC_KP_3, KC_KP_DOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_SLASH, KC_KP_8, KC_KP_5, KC_KP_2, KC_KP_0},
+ {BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, KC_NUMLOCK, KC_KP_7, KC_KP_4, KC_KP_1, KC_KP_0}
+ // Space is repeated to accommadate for both spacebar wiring positions
+}
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(T(CM_T), END);
+ break;
+ }
+ return MACRO_NONE;
+}; \ No newline at end of file
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_brett.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_brett.c
new file mode 100644
index 0000000000..97d832b47a
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_brett.c
@@ -0,0 +1,42 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP(
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, ENT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
+ TAB, LGUI, RSFT, LALT, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
+[1] = KEYMAP( /* RAISE */
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
+ TRNS, F1, F2, F3, F4, F5, F6, 4, 5, 6, QUOT, TRNS,
+ TRNS, F7, F8, F9, F10, F11, F12, 1, 2, 3, TRNS, PGUP,
+ MPRV, MNXT, TRNS, MUTE, TRNS, TRNS, FN1, 0, 0, TRNS, PGDN),
+[2] = KEYMAP( /* LOWER */
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS,
+ TRNS, TRNS, TRNS, PAUSE, TRNS, TRNS, TRNS, TRNS, LBRC, RBRC, BSLS, EQL,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ MPLY, MSTP, VOLU, VOLD, FN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+ [2] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
+
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+
+ [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_dotcom.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_dotcom.c
new file mode 100644
index 0000000000..347f6dea91
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_dotcom.c
@@ -0,0 +1,34 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP(
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ FN1, A, S, D, F, G, H, J, K, L, SCLN, ENT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, LBRC,
+ LCTL, BSLS, QUOT, LALT, FN22, SPC, LEFT, UP, DOWN, RGHT, RBRC),
+[1] = KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,
+ TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, TRNS, TRNS, TRNS,
+ TRNS, FN18, FN19, FN22, EQL, MINS, FN20, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, TRNS, VOLD, VOLU, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_jack.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_jack.c
new file mode 100644
index 0000000000..c74812121f
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_jack.c
@@ -0,0 +1,50 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP( /* Jack */
+ TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ ESC, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
+ RSFT, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
+[1] = KEYMAP( /* Jack colemak */
+ TAB, Q, W, F, P, G, J, L, U, Y, SCLN, BSPC,
+ ESC, A, R, S, T, D, H, N, E, I, O, QUOT,
+ LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, ENT,
+ FN3, LCTL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
+[2] = KEYMAP( /* Jack RAISE */
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
+ TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
+ TRNS, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, MNXT, VOLD, VOLU, MPLY),
+[3] = KEYMAP( /* Jack LOWER */
+ FN22, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
+ TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
+ TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
+ TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, MNXT, VOLD, VOLU, MPLY),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
+ [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+
+ [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_joe.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_joe.c
new file mode 100644
index 0000000000..598b0c455c
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_joe.c
@@ -0,0 +1,83 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP( /* Joe qwerty */
+ ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,
+ BSPC, A, S, D, F, G, H, J, K, L, SCLN, ENTER,
+ FN7, Z, X, C, V, B, N, M, COMM, DOT, SLSH, QUOT,
+ LCTL, LGUI, LALT, LSFT, FN1, SPC, FN0, LEFT, UP, DOWN, RGHT),
+[1] = KEYMAP( /* Joe colemak */
+ ESC, Q, W, F, P, G, J, L, U, Y, SCLN, MINS,
+ BSPC, A, R, S, T, D, H, N, E, I, O, ENTER,
+ FN7, Z, X, C, V, B, K, M, COMM, DOT, SLSH, QUOT,
+ LCTL, LGUI, LALT, LSFT, FN1, SPC, FN0, LEFT, UP, DOWN, RGHT),
+[2] = KEYMAP( /* Joe UPPER */
+ F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
+ DEL, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, MENU, CAPS, INS, PSCR, TRNS, FN5, FN6,
+ TRNS, TRNS, TRNS, TRNS, FN2, TRNS, FN0, FN26, FN27, FN28, FN29),
+[3] = KEYMAP( /* Joe LOWER */
+ GRV, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN8, FN9, FN30,
+ BSPC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, TRNS,
+ BSLS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, RBRC, TRNS, EQL,
+ TRNS, TRNS, TRNS, TRNS, FN1, TRNS, FN2, HOME, PGUP, PGDN, END),
+[4] = KEYMAP( /* Joe LOWER + UPPER */
+ FN3, FN4, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SLEP,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MUTE, VOLD, VOLU, MPLY),
+};
+
+enum macro_id {
+ M_Q0,
+ M_Q1,
+ M_Q2
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
+ [1] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
+ [2] = ACTION_LAYER_MOMENTARY(4), // to Fn overlay
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+ [5] = ACTION_MODS_KEY(MOD_LCTL, KC_PGUP),
+ [6] = ACTION_MODS_KEY(MOD_LCTL, KC_PGDN),
+
+ /* tab on tap, shift on hold */
+ [7] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),
+
+ [8] = ACTION_MACRO(M_Q0),
+ [9] = ACTION_MACRO(M_Q1),
+
+ [26] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_LEFT),
+ [27] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_UP),
+ [28] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_DOWN),
+ [29] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT, KC_RGHT),
+
+ [30] = ACTION_MACRO(M_Q2),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ keyevent_t event = record->event;
+ switch (id) {
+ case M_Q0:
+ /* :( | ): */
+ return event.pressed ?
+ MACRO( D(LSFT), T(P), T(9), T(SPC), T(SPC), T(0), T(P), U(LSFT), T(LEFT), T(LEFT), T(LEFT), END ) :
+ MACRO_NONE;
+ case M_Q1:
+ /* (: | :) */
+ return event.pressed ?
+ MACRO( D(LSFT), T(9), T(P), T(SPC), T(SPC), T(P), T(0), U(LSFT), T(LEFT), T(LEFT), T(LEFT), END ) :
+ MACRO_NONE;
+ case M_Q2:
+ /* :) */
+ return event.pressed ?
+ MACRO( D(LSFT), T(P), T(0), U(LSFT), END ) :
+ MACRO_NONE;
+ }
+ return MACRO_NONE;
+}
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_matthew.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_matthew.c
new file mode 100644
index 0000000000..56e7003a97
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_matthew.c
@@ -0,0 +1,70 @@
+// by Matthew Pepers - https://github.com/pepers
+
+/* grid planck layout - modified programmer dvorak
+,-----------------------------------------------------------------------------------------------.
+| pause | @ | | | ^ | | | | | * | # | $ | del |
+| esc | ; : | , < | . > | P | Y | F | G | G | C | R | bkspc |
+| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
+| & | / | { | ( | [ | = | ! | ] | ) | } | \ | + |
+| ` ~ | A | O | E | U | I | D | H | T | N | S | - _ |
+| % | 7 | 5 | 3 | 1 | 9 | 0 | 2 | 4 | 6 | 8 | ? |
+|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
+| | | | | | | | | | | | prtsc |
+| tab | ' " | Q | J | K | X | B | M | W | V | Z | retrn |
+| | | | | | | | | | | | insrt |
+|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|
+| | | | | | | | | | | | |
+| lctrl | lgui | lalt | ralt | lower | shift | space | raise | left | down | up | right |
+| | | | | | | | | home | pgdn | pgup | end |
+`-----------------------------------------------------------------------------------------------'
+*/
+
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: dvorak */
+ [0] = KEYMAP_GRID( ESC, SCLN, COMM, DOT, P, Y, F, G, C, R, L, BSPC, \
+ GRV, A, O, E, U, I, D, H, T, N, S, MINS, \
+ TAB, QUOT, Q, J, K, X, B, M, W, V, Z, ENT, \
+ LCTL, LGUI, LALT, RALT, FN1, LSFT, SPC, FN2, LEFT, DOWN, UP, RGHT),
+
+ /* 1: lower (FN1) */
+ [1] = KEYMAP_GRID( F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, \
+ FN17, 7, 5, 3, 1, 9, 0, 2, 4, 6, 8, FN18, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, INS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END),
+
+ /* 2: raise (FN2) */
+ [2] = KEYMAP_GRID(PAUS, FN19, FN20, FN21, TRNS, TRNS, TRNS, TRNS, FN22, FN23, FN24, DEL, \
+ FN10, SLSH, FN11, FN12, LBRC, EQL, FN13, RBRC, FN14, FN15, BSLS, FN16, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(1), // lower Fn layer
+ [2] = ACTION_LAYER_MOMENTARY(2), // raise Fn layer
+
+ // lower row1
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // %
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // ?
+
+ // raise row0
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLASH), // |
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // *
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // #
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $
+
+ // raise row1
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // &
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRACKET), // {
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // (
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // !
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // )
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRACKET), // }
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_EQUAL), // +
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_nathan.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_nathan.c
new file mode 100644
index 0000000000..5a0900b66d
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_nathan.c
@@ -0,0 +1,153 @@
+// Author: Nathan Ross Powell <nathanrospowell@gmail.com>
+// https://github.com/nathanrosspowell/tmk_keyboard/blob/planck-jack/keyboard/planck/keymap_nathan.c
+
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: main layer
+ * ,-----------------------------------------------------------------------.
+ * |Tab | q | w | e | r | t | y | u | i | o | p | BS |
+ * |-----------------------------------------------------------------------|
+ * |Ctrl | a | s | d | f | g | h | j | k | l | ; | Ret |
+ * |-----------------------------------------------------------------------|
+ * |Shift| z | x | c | v | b | n | m | [ | ( | { | < |
+ * |-----------------------------------------------------------------------|
+ * |Meta | \ | / | Alt |Lower|Space|Space|Upper|Left |Down | Up |Right|
+ * `-----------------------------------------------------------------------'
+ */
+ [0] = KEYMAP_GRID(
+ TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, ENT,
+ RSFT, Z, X, C, V, B, N, M, LBRC, FN10, FN11, FN12,
+ LGUI, BSLS, SLSH, LALT, FN0, SPC, SPC, FN1, LEFT, DOWN, UP, RGHT),
+
+ /* 1: fn left/lower layer
+ * The top row are Visual Studio combos:
+ * 'Run', 'Breakpoint', 'Step over', 'Step into', 'Set cursor to line'
+ * 2nd row are key combos:
+ * 'ctrl-alt-delete', 'ctrl-shift-escape'
+ * 3rd row are macros keys:
+ * 'P0' - 'P5' execute a script on Windows machines
+ * ,-----------------------------------------------------------------------.
+ * | ESC | F5 | F9 | F10 | F11 |S+F11|CSF10|NLock|Num7 |Num8 |Num9 | Del |
+ * |-----------------------------------------------------------------------|
+ * | |C/A/D|C/S/E| Ins |Print|Pause|SLock|Num0 |Num4 |Num5 |Num6 |Num= |
+ * |-----------------------------------------------------------------------|
+ * | | P0 | P1 | P2 | P3 | P4 | P5 |Num. |Num1 |Num2 |Num3 |Num/ |
+ * |-----------------------------------------------------------------------|
+ * | |User | | | | | | |Home |PgDn |PgUp | End |
+ * `-----------------------------------------------------------------------'
+ */
+ [1] = KEYMAP_GRID(
+ ESC, F5, F9, F10, F11, FN30, FN31, NLCK, P7, P8, P9, DEL,
+ TRNS, FN16, FN17, INS, PSCR, PAUS, SLCK, P0, P4, P5, P6, PEQL,
+ TRNS, FN2, FN3, FN4, FN5, FN6, FN7, PDOT, P1, P2, P3, PSLS,
+ TRNS, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END ),
+
+ /* 2: fn right/raise layer
+ * ,-----------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 |F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |-----------------------------------------------------------------------|
+ * | | ! | @ | # | $ | % | ^ | & | * | - | + | = |
+ * |-----------------------------------------------------------------------|
+ * | | _ | ' | " | ` | ~ | , | . | ] | ) | } | > |
+ * |-----------------------------------------------------------------------|
+ * | |NextT|PrevT| | | | Esc | |Mute |Vol- |Vol+ | P/P |
+ * `-----------------------------------------------------------------------'
+ */
+ [2] = KEYMAP_GRID(
+ F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
+ TRNS, FN18, FN19, FN20, FN21, FN22, FN23, FN24, FN25, MINS, FN26, PAST,
+ TRNS, FN27, QUOT, FN28, GRV, FN29, COMM, DOT, RBRC, FN13, FN14, FN15,
+ TRNS, MNXT, MPRV, TRNS, TRNS, TRNS, ESC, TRNS, MUTE, VOLD, VOLU, MPLY ),
+};
+
+enum macro_id {
+ M_P0,
+ M_P1,
+ M_P2,
+ M_P3,
+ M_P4,
+ M_P5,
+ M_USERNAME
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1), // left/lower layer
+ [1] = ACTION_LAYER_MOMENTARY(2), // right/raise layer
+ // Program macros
+ [2] = ACTION_MACRO(M_P0),
+ [3] = ACTION_MACRO(M_P1),
+ [4] = ACTION_MACRO(M_P2),
+ [5] = ACTION_MACRO(M_P3),
+ [6] = ACTION_MACRO(M_P4),
+ [7] = ACTION_MACRO(M_P5),
+ [8] = ACTION_MACRO(M_USERNAME),
+ // Braces
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // (
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // {
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_COMMA), // <
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // )
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // }
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // >
+ // Combo
+ [16] = ACTION_MODS_KEY(MOD_LALT | MOD_LCTL, KC_DEL), // Ctrl+Alt+Delete
+ [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_ESC), // Ctrl+Shft+Escape
+ // Symbols
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // !
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // #
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // %
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // &
+ [25] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // *
+ [26] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // +
+ [27] = ACTION_MODS_KEY(MOD_LSFT, KC_MINUS), // _
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOTE), // "
+ [29] = ACTION_MODS_KEY(MOD_LSFT, KC_GRAVE), // ~
+ // Debugging
+ [30] = ACTION_MODS_KEY(MOD_LSFT, KC_F11), // Step into
+ [31] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F10), // Set cursor to line
+ };
+
+// Run a script and pass a key number to it. This is Windows specific and the script needs to be on your path.
+// *open run dialog* keypress.py [PRG_NUM]
+#define ADD_PYTHON_PROGRAM_ON_WIN( PRG_NUM ) MACRO( D(LGUI), T(R), U(LGUI), W(100), T(K), T(E), T(Y), T(P), T(R), T(E), T(S), T(S), T(DOT), T(P), T(Y), T(SPC), T(PRG_NUM), END )
+// *return*
+#define RUN_PYTHON_PROGRAM_ON_WIN MACRO( T(ENT), END )
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ keyevent_t event = record->event;
+ switch (id) {
+ case M_P0:
+ return event.pressed ?
+ ADD_PYTHON_PROGRAM_ON_WIN( 0 ) :
+ RUN_PYTHON_PROGRAM_ON_WIN;
+ case M_P1:
+ return event.pressed ?
+ ADD_PYTHON_PROGRAM_ON_WIN( 1 ) :
+ RUN_PYTHON_PROGRAM_ON_WIN;
+ case M_P2:
+ return event.pressed ?
+ ADD_PYTHON_PROGRAM_ON_WIN( 2 ) :
+ RUN_PYTHON_PROGRAM_ON_WIN;
+ case M_P3:
+ return event.pressed ?
+ ADD_PYTHON_PROGRAM_ON_WIN( 3 ) :
+ RUN_PYTHON_PROGRAM_ON_WIN;
+ case M_P4:
+ return event.pressed ?
+ ADD_PYTHON_PROGRAM_ON_WIN( 4 ) :
+ RUN_PYTHON_PROGRAM_ON_WIN;
+ case M_P5:
+ return event.pressed ?
+ ADD_PYTHON_PROGRAM_ON_WIN( 5 ) :
+ RUN_PYTHON_PROGRAM_ON_WIN;
+ case M_USERNAME:
+ return event.pressed ?
+ MACRO( T(N), T(A), T(T), T(H), T(A), T(N), T(R), T(O), T(S), T(S), T(P), T(O), T(W), T(E), T(L), T(L), END ) :
+ MACRO_NONE;
+ }
+ return MACRO_NONE;
+}
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_paul.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_paul.c
new file mode 100644
index 0000000000..49c90e0196
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_paul.c
@@ -0,0 +1,49 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP( /* Paul */
+ TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ FN1, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
+ ESC, LCTL, LALT, LGUI, FN2, SPC, FN3, LEFT, DOWN, UP, RGHT),
+[1] = KEYMAP( /* Paul FN */
+ TRNS, TRNS, TRNS, FN8, FN9, TRNS, TRNS, TRNS, TRNS, MUTE, VOLD, VOLU,
+ FN1, TRNS, TRNS, HOME, END, TRNS, TRNS, TRNS, TRNS, MPRV, MPLY, MNXT,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LEFT, DOWN, RGHT),
+[2] = KEYMAP( /* Paul LOWER */
+ FN22, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
+ TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
+ TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+[3] = KEYMAP( /* Paul RAISE */
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
+ TRNS, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN3, TRNS, TRNS, TRNS, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(1), // to Fn1 overlay (FN)
+ [2] = ACTION_LAYER_MOMENTARY(2), // to Fn2 overlay (LOWER)
+ [3] = ACTION_LAYER_MOMENTARY(3), // to Fn3 overlay (RAISE)
+
+ [8] = ACTION_MODS_KEY(MOD_LSFT, KC_HOME),
+ [9] = ACTION_MODS_KEY(MOD_LSFT, KC_END),
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_peasant.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_peasant.c
new file mode 100644
index 0000000000..ddacb614e6
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_peasant.c
@@ -0,0 +1,51 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP( /* Native */
+ ESC, Q, W, E, R, T, Y, U, I, O, P, FN2,
+ BSPC, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
+ TAB, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
+ DEL, LCTL, NO, LSFT, LALT, SPC, NO, LEFT, DOWN, UP, RGHT),
+ [1] = KEYMAP( /* QWERTY->PHOTOSHOP */
+ DELETE, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, FN1,
+ O, G, S, U, T, FN27, F21, F10, F11, F7, F8, F9,
+ TAB, FN4, FN5, FN6, F1, FN7, F18, F19, F23, F20, F22, FN9,
+ COMM, DOT, FN10, FN11, FN3, SPC, FN12, F2, FN8, F3, F14),
+ [2] = KEYMAP( /* 2: FN3 PHOTOSHOP */
+ ESC, FN25, FN26, NO, NO, NO, NO, NO, NO, NO, NO, NO,
+ NO, NO, NO, NO, NO, NO, NO, NO, NO, FN19, FN20, FN21,
+ C, NO, FN22, FN5, NO, FN23, NO, NO, NO, NO, FN13, NO,
+ FN14, FN15, FN16, FN17, FN3, SPC, FN18, NO, NO, F24, NO),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_DEFAULT_LAYER_SET(0), // set Qwerty layout
+ [2] = ACTION_DEFAULT_LAYER_SET(1), // set Photoshop presets
+ [3] = ACTION_LAYER_ON_OFF(2), // Photoshop function layer
+
+ [4] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F9), // photo folder AHK
+ [5] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_I), // select inverse
+ [6] = ACTION_MODS_KEY(MOD_LSFT, KC_M), // marquee select
+ [7] = ACTION_MODS_KEY(MOD_LALT, KC_BSPC), // fill
+ [8] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_X), // warp
+ [9] = ACTION_MODS_KEY(MOD_LCTL | MOD_LALT | MOD_LSFT, KC_F12), // merge all new layer
+ [10] = ACTION_MODS_KEY(MOD_LCTL, KC_MINS), // zoom out
+ [11] = ACTION_MODS_KEY(MOD_LCTL, KC_H), // RBG sliders
+ [12] = ACTION_MODS_KEY(MOD_LCTL, KC_S), // save
+ [13] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F5), // layer mask from transparancy
+ [14] = ACTION_MODS_KEY(MOD_LALT, KC_LBRC), // prev layer
+ [15] = ACTION_MODS_KEY(MOD_LALT, KC_RBRC), // next layer
+ [16] = ACTION_MODS_KEY(MOD_LCTL, KC_EQL), // zoom in
+ [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_H), // HSV sliders
+ [18] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F11), // save as PNG
+ [19] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F7), // gaussian blur
+ [20] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL | MOD_LALT, KC_F8), // motion blur
+ [21] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_X), // liquify filter
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // prev layer blending
+ [23] = ACTION_MODS_KEY(MOD_LSFT | MOD_LALT, KC_N), // normal layer blending
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // next layer blending
+ [25] = ACTION_MODS_KEY(MOD_LCTL, KC_Z), // step back
+ [26] = ACTION_MODS_KEY(MOD_LCTL, KC_Y), // step forward
+ [27] = ACTION_MODS_KEY(MOD_LCTL, KC_R), // rasterize
+
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_reed.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_reed.c
new file mode 100644
index 0000000000..1aa24e10de
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_reed.c
@@ -0,0 +1,74 @@
+#include "keymap_common.h"
+
+/*
+ * BUILD:
+ * Simply run the command below in the keyboard/planck directory
+ * to build against this keymap
+ *
+ * make KEYMAP=reed COMMON_KEYMAP=true
+ *
+ *
+ * DETAILS:
+ *
+ * This layout works off of Jack's layout, making some changes that I
+ * feel significantly improve the function of the keyboard. Major changes
+ * include adding a "gaming mode" that will allow users to still access
+ * the number keys 1 through 4 easily for games that require it. Also
+ * included is the ability to use the tap/hold function for easy use of
+ * right shift and thumb shift with their tapped companions.
+ *
+ */
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP_GRID( /* Reed */
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN5,
+ LCTL, CAPS, LALT, LGUI, FN2, FN7, SPC, FN1, LEFT, DOWN, UP, RGHT),
+
+[1] = KEYMAP_GRID( /* Reed EXTREME GAMING */
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN5,
+ LCTL, 1, 2, 3, 4, SPC, FN2, FN1, LEFT, DOWN, UP, RGHT),
+
+[2] = KEYMAP_GRID( /* Reed RAISE */
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
+ TRNS, FN3, FN4, PAUSE, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
+ TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, MNXT, VOLD, VOLU, MPLY),
+
+[3] = KEYMAP_GRID( /* Reed LOWER */
+ TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, DEL,
+ TRNS, TRNS, INS, HOME, PGUP, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
+ TRNS, TRNS, DEL, END, PGDN, F11, F12, F13, TRNS, VOLD, VOLU, TRNS,
+ TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, MPRV, MUTE, MPLY, MNXT),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay - RAISE
+ [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay - LOWER
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+ // Actions for the tap/hold modifiers listed above
+ [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+ [7] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_BSPC),
+
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+
+ [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_sean.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_sean.c
new file mode 100644
index 0000000000..cb2ef8f138
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_sean.c
@@ -0,0 +1,53 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP( /* Matrix Dvorak */
+ QUOT, COMM, DOT, P, Y, SLSH, EQL, F, G, C, R, L,
+ A, O, E, U, I, ESC, BSPC, D, H, T, N, S,
+ SCLN, Q, J, K, X, TAB, ENT, B, M, W, V, Z,
+ LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
+
+ [1] = KEYMAP( /* Matrix Qwerty */
+ Q, W, E, R, T, QUOT, EQL, Y, U, I, O, P,
+ A, S, D, F, G, ESC, BSPC, H, J, K, L, SCLN,
+ Z, X, C, V, B, TAB, ENT, N, M, COMM, DOT, SLSH,
+ LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
+
+ [2] = KEYMAP( /* fn1 lower */
+ F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10,
+ 1, 2, 3, 4, 5, F18, DEL, 6, 7, 8, 9, 0,
+ FN3, FN4, FN28, GRV, MINS, TRNS, INS, BSLS, LBRC, RBRC, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END),
+
+ [3] = KEYMAP( /* fn2 raise */
+ MRWD, MPLY, MFFD, NO, NO, FN21, FN22, EJCT, PWR, LSFT,PAUSE, RSFT,
+ FN11, FN12, FN13, FN14, FN15, F18, DEL, FN16, FN17, FN18, FN19, FN20,
+ FN3, FN4, FN28, FN23, FN24, TRNS, INS, FN25, FN26, FN27, MPRV, MNXT,
+ TRNS, TRNS, TRNS, TRNS, FN1, TRNS, FN2, NO, VOLD, VOLU, MUTE),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay LOWER
+ [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay RAISE
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_SLSH),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [25] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+ [26] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [27] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_shane.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_shane.c
new file mode 100644
index 0000000000..8d5ad68753
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_shane.c
@@ -0,0 +1,98 @@
+#include "keymap_common.h"
+#include "action_layer.h"
+#include "action.h"
+#include "action_util.h"
+
+/*
+ Shane's Planck Layout
+ http://www.keyboard-layout-editor.com/#/layouts/015d9011102619d7695c86ffe57cf441
+*/
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP_AND_SWAP( /* Base */
+ TAB, Q, W, E, R, T, Y, U, I, O, P, MINS,
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, BSPC,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN5,
+ /*ALPHA*/FN3, /*HYPER*/ /*SUPER*/LGUI, /*META*/LALT, LCTL, FN2, FN6, FN1, LEFT, DOWN, UP, RGHT),
+ [2] = KEYMAP_AND_SWAP( /* More modifiers */
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RCTL, RALT, RGUI, TRNS),
+ [4] = KEYMAP_AND_SWAP( /* WASD */
+ TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, LEFT, DOWN, RIGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+ [6] = KEYMAP_AND_SWAP( /* Raise/FN1 */
+ FN23, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, EQL,
+ TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, ENT,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, BSLS, TRNS,
+ PAUS, TRNS, TRNS, TRNS, TRNS, BSPC, TRNS, MUTE, PGUP, PGDN, MNXT),
+ [8] = KEYMAP_AND_SWAP( /* Lower/FN2 */
+ ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN19, FN20, TRNS,
+ TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, QUOT,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN24, FN25, LBRC, RBRC, TRNS, TRNS,
+ FN4, TRNS, TRNS, TRNS, TRNS, ENT, TRNS, MPLY, VOLD, VOLU, MPRV),
+};
+
+enum function_id {
+ SPACE_FN,
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch (id) {
+ case SPACE_FN:
+ if (record->event.pressed) {
+ // Change the keyboard maps.
+ // Whatever even layer's are on, turn on the odd one's too.
+ for (uint8_t i = 0; i < 9; i += 2) {
+ if (layer_state & (1UL << i))
+ layer_on(i + 1);
+ }
+ layer_on(1);
+ } else {
+ // turn off all the even layers.
+ for (uint8_t i = 0; i < 9; i += 2)
+ layer_off(i + 1);
+
+ if (record->tap.count != 0) {
+ // Space was tapped rather than used like a modifier.
+ // So send a space up and down event.
+ add_key(KC_SPC);
+ send_keyboard_report();
+ del_key(KC_SPC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
+
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(6), // to fist Fn overlay
+ [2] = ACTION_LAYER_MOMENTARY(8), // to second Fn overlay
+ [3] = ACTION_LAYER_TOGGLE(2), // toggle more modifiers
+ [4] = ACTION_LAYER_TOGGLE(4), // toggle wasd
+ [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+ [6] = ACTION_FUNCTION_TAP(SPACE_FN),
+
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [25] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [26] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+}; \ No newline at end of file
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_simon.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_simon.c
new file mode 100644
index 0000000000..37951364be
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_simon.c
@@ -0,0 +1,44 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP( /* Jack */
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ TAB, A, S, D, F, G, H, J, K, L, DOT, ENT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SCLN, DEL,
+ LCTL, ENT, LALT, CAPS, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
+[1] = KEYMAP( /* Jack RAISE */
+ TRNS, F1, F2, F3, F4, NO, FN11, FN9, FN12, NO, FN14, TRNS,
+ TRNS, F5, F6, F7, F8, FN16, SLSH, MINS, EQL, LBRC, FN8, TRNS,
+ TRNS, F9, F10, F11, F12, F15, F16, FN22, SCLN, MINS, QUOT, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+[2] = KEYMAP( /* Jack LOWER */
+ FN22, 1, 2, 3, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
+ TRNS, 4, 5, 6, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
+ TRNS, 7, 8, 9, 0, FN28, FN15, F7, F8, F9, F10, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+ [2] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
+
+ [8] = ACTION_MODS_KEY(MOD_LSFT, KC_SLSH),
+ [9] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOT),
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+
+ [29] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_tim.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_tim.c
new file mode 100644
index 0000000000..7444f3877b
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_tim.c
@@ -0,0 +1,44 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP(
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
+ LCTL, LALT, DEL, LGUI, FN2, SPC, FN1, F2, F5, F9, F12),
+[2] = KEYMAP( /* RAISE */
+ TRNS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,
+ GRV, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MINS, EQL, LBRC, RBRC, BSLS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, QUOT, FN29, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, TRNS, TRNS, TRNS, TRNS),
+[3] = KEYMAP( /* LOWER */
+ TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, BSPC,
+ FN22, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN20, FN21, FN23, FN24, FN28,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, QUOT, FN29, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
+ [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
+ [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
+ [29] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOT),
+};
diff --git a/keyboard/planck/old_keymap_files/common_keymaps/keymap_wilba.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_wilba.c
new file mode 100644
index 0000000000..9781f8fcd8
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/common_keymaps/keymap_wilba.c
@@ -0,0 +1,56 @@
+#include "keymap_common.h"
+
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP( /* Wilba */
+ FN27, FN28, FN29, E, R, T, Y, U, I, O, P, BSPC,
+ TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
+ LCTL, LGUI, LALT, RSFT, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
+[1] = KEYMAP( /* Wilba Alternate */
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT,
+ LCTL, LGUI, LALT, RSFT, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
+[2] = KEYMAP( /* Wilba LOWER */
+ TRNS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, TRNS,
+ TRNS, F11, F12, LBRC, RBRC, FN20, EQL, FN23, FN24, MINS, FN21, TRNS,
+ TRNS, BSLS, GRV, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, FN1, TRNS, TRNS, MNXT, VOLD, VOLU, MPLY),
+[3] = KEYMAP( /* Wilba RAISE */
+ TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, TRNS,
+ TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS,
+ TRNS, FN25, FN22, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(2), // LOWER
+ [2] = ACTION_LAYER_MOMENTARY(3), // RAISE
+
+ [3] = ACTION_DEFAULT_LAYER_SET(0),
+ [4] = ACTION_DEFAULT_LAYER_SET(1),
+
+ [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // !
+ [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @
+ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // #
+ [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $
+ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // %
+ [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^
+ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // &
+ [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // *
+ [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // (
+ [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // )
+
+ [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // _
+ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // +
+ [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // ~
+ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // {
+ [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // }
+ [25] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // |
+
+ [26] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
+
+ [27] = ACTION_BACKLIGHT_TOGGLE(),
+ [28] = ACTION_BACKLIGHT_INCREASE(),
+ [29] = ACTION_BACKLIGHT_DECREASE()
+
+};
diff --git a/keyboard/planck/old_keymap_files/keymap_common.c b/keyboard/planck/old_keymap_files/keymap_common.c
new file mode 100644
index 0000000000..fdb1769e1c
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/keymap_common.c
@@ -0,0 +1,30 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+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 <http://www.gnu.org/licenses/>.
+*/
+#include "keymap_common.h"
+
+
+/* translates key to keycode */
+uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
+{
+ return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
+}
+
+/* translates Fn keycode to action */
+action_t keymap_fn_to_action(uint8_t keycode)
+{
+ return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
+}
diff --git a/keyboard/planck/old_keymap_files/keymap_common.h b/keyboard/planck/old_keymap_files/keymap_common.h
new file mode 100644
index 0000000000..d46df92876
--- /dev/null
+++ b/keyboard/planck/old_keymap_files/keymap_common.h
@@ -0,0 +1,129 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+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 <http://www.gnu.org/licenses/>.
+*/
+#ifndef KEYMAP_COMMON_H
+#define KEYMAP_COMMON_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/pgmspace.h>
+#include "keycode.h"
+#include "action.h"
+#include "action_macro.h"
+#include "report.h"
+#include "host.h"
+// #include "print.h"
+#include "debug.h"
+#include "keymap.h"
+
+
+extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
+extern const uint16_t fn_actions[];
+
+
+// MIT Layout
+/*
+ * ,-----------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------'
+ */
+#define KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K34, K35, K37, K38, K39, K3A, K3B \
+) { \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K35, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B } \
+}
+
+// Grid Layout
+/*
+ * ,-----------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------'
+ */
+#define KEYMAP_GRID( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
+) { \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B } \
+}
+
+#define KEYMAP_REVERSE( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K34, K35, K37, K38, K39, K3A, K3B \
+ ) { \
+ { KC_##K0B, KC_##K0A, KC_##K09, KC_##K08, KC_##K07, KC_##K06, KC_##K05, KC_##K04, KC_##K03, KC_##K02, KC_##K01, KC_##K00 }, \
+ { KC_##K1B, KC_##K1A, KC_##K19, KC_##K18, KC_##K17, KC_##K16, KC_##K15, KC_##K14, KC_##K13, KC_##K12, KC_##K11, KC_##K10 }, \
+ { KC_##K2B, KC_##K2A, KC_##K29, KC_##K28, KC_##K27, KC_##K26, KC_##K25, KC_##K24, KC_##K23, KC_##K22, KC_##K21, KC_##K20 }, \
+ { KC_##K3B, KC_##K3A, KC_##K39, KC_##K38, KC_##K37, KC_##K35, KC_##K35, KC_##K34, KC_##K33, KC_##K32, KC_##K31, KC_##K30 }, \
+ }
+
+#define KEYMAP_AND_REVERSE(args...) KEYMAP(args), KEYMAP_REVERSE(args)
+
+#define KEYMAP_SWAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K34, K35, K37, K38, K39, K3A, K3B \
+ ) { \
+ { KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05 }, \
+ { KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15 }, \
+ { KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25 }, \
+ { KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K35, KC_##K35, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34 }, \
+}
+
+#define KEYMAP_AND_SWAP(args...) KEYMAP(args), KEYMAP_SWAP(args)
+
+/*
+ Keymap for the Planck 48 key variant.
+ */
+#define KEYMAP_48( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
+) { \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B }, \
+}
+
+
+#endif
diff --git a/keyboard/planck/planck.c b/keyboard/planck/planck.c
new file mode 100644
index 0000000000..b62862af04
--- /dev/null
+++ b/keyboard/planck/planck.c
@@ -0,0 +1,31 @@
+#include "planck.h"
+
+__attribute__ ((weak))
+void * matrix_init_user(void) {
+
+};
+
+__attribute__ ((weak))
+void * matrix_scan_user(void) {
+
+};
+
+void * matrix_init_kb(void) {
+ #ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+ #endif
+
+ // Turn status LED on
+ DDRE |= (1<<6);
+ PORTE |= (1<<6);
+
+ if (matrix_init_user) {
+ (*matrix_init_user)();
+ }
+};
+
+void * matrix_scan_kb(void) {
+ if (matrix_scan_user) {
+ (*matrix_scan_user)();
+ }
+}; \ No newline at end of file
diff --git a/keyboard/planck/planck.h b/keyboard/planck/planck.h
new file mode 100644
index 0000000000..4e59aef566
--- /dev/null
+++ b/keyboard/planck/planck.h
@@ -0,0 +1,38 @@
+#ifndef PLANCK_H
+#define PLANCK_H
+
+#include "matrix.h"
+#include "keymap_common.h"
+#include "backlight.h"
+#include <stddef.h>
+
+#define PLANCK_MIT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k37, k38, k39, k3a, k3b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define PLANCK_GRID( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \
+}
+
+void * matrix_init_user(void);
+void * matrix_scan_user(void);
+
+#endif \ No newline at end of file
diff --git a/keyboard/planck/planck_pcb.hex b/keyboard/planck/planck_pcb.hex
new file mode 100644
index 0000000000..11f523c058
--- /dev/null
+++ b/keyboard/planck/planck_pcb.hex
@@ -0,0 +1,1544 @@
+:100000000C949D020C94E1020C94E1020C94E10228
+:100010000C94E1020C94E1020C94E1020C94E102D4
+:100020000C94E1020C94E1020C941C120C94EE125C
+:100030000C948D240C94E1020C94E1020C94E102E6
+:100040000C94E1020C94E1020C94E1020C94E102A4
+:100050000C94E1020C94FA240C94E1020C94E10259
+:100060000C94E1020C94E1020C94E1020C94E10284
+:100070000C94E1020C94E1020C94E1020C94E10274
+:100080000C94860A0C94E1020C94E1020C94E102B7
+:100090000C94E1020C94E1020C94E1020C94E10254
+:1000A0000C94E1020C94E1020C94E10207634236E5
+:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
+:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
+:1000D0000000803F08000000BE922449123EABAAF7
+:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
+:1000F000AA3E00000000BF000000803F000000009A
+:1001000000084178D3BB4387D1133D190E3CC3BDD2
+:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
+:1001200080EFFFBE01C4FF7F3F0000000000000021
+:10013000F1A4F1A3018C028C048C2B0014001A0092
+:100140000800150017001C0018000C001200130016
+:100150002A00290004001600070009000A000B000D
+:100160000D000E000F0033003400E1001D001B00E5
+:100170000600190005001100100036003700380095
+:1001800028000030E000E200E30002202C002C00F8
+:1001900001205000510052004F002B0014001A00A3
+:1001A000090013000A000D000F0018001C003300A6
+:1001B0002A002900040015001600170007000B0094
+:1001C000110008000C0012003400E1001D001B00AB
+:1001D0000600190005000E00100036003700380038
+:1001E00028000030E000E200E30002202C002C0098
+:1001F00001205000510052004F002B003400360007
+:10020000370013001C0009000A00060015000F004B
+:100210002A00290004001200080018000C00070042
+:100220000B001700110016003800E1003300140025
+:100230000D000E001B00050010001A0019001D0023
+:1002400028000030E000E200E30002202C002C0037
+:1002500001205000510052004F0035021E021F02C3
+:100260002002210222022302240225022602270262
+:100270002A0001003A003B003C003D003E003F00E8
+:100280002D022E022F0230023102010040004100F7
+:100290004200430044004500032004200520005094
+:1002A0000100010001000100010002200100010025
+:1002B0000100AB00AA00A900AE0035001E001F001F
+:1002C0002000210022002300240025002600270012
+:1002D0002A0001003A003B003C003D003E003F0088
+:1002E0002D002E002F0030003100010040004100A1
+:1002F0004200430044004500032004200520005034
+:1003000001000100010001000100010001000100E5
+:100310000120AB00AA00A900AE0028035400680029
+:100320006500200050006C0061006E0063006B00EF
+:1003300020004B006500790062006F0061007200D0
+:10034000640000002C034F007200740068006F000E
+:100350006C0069006E0065006100720020004B00B7
+:100360006500790062006F00610072006400730034
+:100370000000040309040902D000060100A03209AC
+:100380000400000103010100092111010001223FC5
+:10039000000705810308000A0904010001030102A6
+:1003A00000092111010001224D0007058203080008
+:1003B0000A090402000103000000092111010001E3
+:1003C0002236000705830308000A0904030002031C
+:1003D000000000092111010001222000070584030B
+:1003E00020000107050403200001090404000001A6
+:1003F00001000009240100010900010509040500AC
+:10040000020103000007240100014100062402014B
+:100410000100062402020200092403010301020173
+:10042000000924030204010101000905060240003D
+:1004300005000005250101010905850240000500B0
+:100440000005250101031201100100000008EDFE66
+:1004500060600100010200010631FF0974A1010979
+:1004600075150025FF952075088102097615002570
+:10047000FF952075089102C005010980A101850240
+:1004800016010026B7001A01002AB7007510950161
+:100490008100C0050C0901A1018503160100269CFD
+:1004A000021A01002A9C02751095018100C0050105
+:1004B0000902A1010901A100050919012905150079
+:1004C00025019505750181029501750381010501DD
+:1004D000093009311581257F950275088106093893
+:1004E0001581257F950175088106050C0A380215CE
+:1004F00081257F950175088106C0C005010906A107
+:1005000001050719E029E715002501950875018106
+:1005100002950175088101050819012905950575E0
+:100520000191029501750391010507190029FF1535
+:100530000025FF950675088100C011241FBECFEF6E
+:10054000DAE0DEBFCDBF04B603FE24C0809178039D
+:1005500090917903A0917A03B0917B038730904BFF
+:10056000A740B04BB9F4109278031092790310921F
+:100570007A0310927B0314BE84B7877F84BF88E11F
+:100580000FB6F89480936000109260000FBEE0E018
+:10059000F8E3099511E0A0E0B1E0E2EAFFE502C06E
+:1005A00005900D92A63BB107D9F713E0A6EBB1E099
+:1005B00001C01D92A837B107E1F70E94F90E0C9413
+:1005C000CF2F0C9400000895089561110DC0FC0117
+:1005D0008281882331F085EE0E949D190E94B62BFE
+:1005E00003C085EE0E94651A80E090E008958B3B81
+:1005F000910568F4883A910530F5853A9105C0F483
+:100600008430910598F4019709F06FC071C0803E65
+:10061000910508F46AC0883E910540F09C01205F76
+:1006200031092031310508F060C05CC09C01A1C0D7
+:10063000853A910509F45FC0863A910509F45EC0D8
+:1006400023E830E496C0883A910509F45AC0893A03
+:10065000910509F459C08A3A910509F458C08B3ABA
+:10066000910509F457C08C3A910509F456C08D3AAA
+:10067000910509F455C0803B910509F454C08E3AA8
+:10068000910509F453C08F3A910509F452C0813B9A
+:10069000910509F451C0823B910509F450C0833B98
+:1006A000910509F44FC0843B910509F44EC0853B88
+:1006B000910509F44DC0863B910509F44CC0873B78
+:1006C000910509F44BC0883B910509F44AC0893B68
+:1006D000910509F449C08A3B910509F048C02AE216
+:1006E00036E447C09C01306544C020E030E041C0A2
+:1006F00021E030E03EC021E830E43BC022E830E4B5
+:1007000038C022EE34E435C029EE34E432C02AEE9B
+:1007100034E42FC025EB34E42CC026EB34E429C0AC
+:1007200027EB34E426C02CEC34E423C02DEC34E475
+:1007300020C023E835E41DC02AE835E41AC022E9C8
+:1007400035E417C024E935E414C021E236E411C0D1
+:1007500023E236E40EC024E236E40BC025E236E4A0
+:1007600008C026E236E405C027E236E402C020E0F5
+:1007700034E4C90108959CE0799FF001112490E3CD
+:10078000899FE00DF11D1124E60FF11DEE0FFF1FF3
+:10079000E65CFE4F25913491C9010895880F991F99
+:1007A00082559040FC0125913491C9010895880F2C
+:1007B000991F825D9E4FFC0125913491C9010895D6
+:1007C0000E94BB039C013A9521153F4108F4DFC00C
+:1007D0009C0130522115304120F49F700E94D703B4
+:1007E00008959C0130532115304118F49927906CDD
+:1007F00008959C0130542031310520F48F709927E1
+:10080000946D0895803120E4920719F480E091ED11
+:100810000895813140E4940719F480E090ED089543
+:10082000823120E4920719F480E092ED089583313B
+:1008300040E4940719F480E093ED0895811520E5D4
+:10084000920711F40C941F25813040E5940731F490
+:100850008091680281608093680208959C013056FF
+:100860002115304108F402C097FF02C0906F08952F
+:10087000803E9105E0F4803C910568F58133910557
+:1008800009F474C048F48932910509F46AC08A32C7
+:10089000910509F07AC074C089339105F9F0823866
+:1008A0009105E1F08533910509F06FC050C0833E9A
+:1008B0009105A9F140F4803E9105C9F0823E910571
+:1008C00009F063C01BC0863E910571F1873E91051A
+:1008D00009F05BC037C00E94CE03089520917B02CF
+:1008E00020FD02C021FF51C080EE90E04EC08091FB
+:1008F0007B0280FFF9CF89E390E047C080917B02C3
+:1009000082FF0AC080917B0284FF03C080E090E0F8
+:100910003CC083EE90E039C082EE90E036C080911A
+:100920007B0282FFEFCFF8CF80917B0283FF07C06D
+:1009300080917B0284FDEACF87EE90E026C086EEB0
+:1009400090E023C080917B0283FFF2CFF8CF8091AB
+:100950007B0285FF03C089E290E017C085E390E049
+:1009600014C080917B0285FDF9CFF5CF80917B0289
+:1009700086FF03C08AE290E008C081E390E005C0F2
+:1009800080917B0286FDF9CFF5CF0E94F702089592
+:100990005F926F927F928F929F92AF92BF92CF920F
+:1009A000DF92EF92FF920F931F93CF93DF93CDB718
+:1009B000DEB728970FB6F894DEBF0FBECDBF9E01FD
+:1009C0002F5F3F4F4E0189E0880E911C60E070E080
+:1009D00000E010E0E12CF12CC12CD12CA12CB12C89
+:1009E00088E0782E622E532E41E050E0E3E2F1E001
+:1009F000A62DB52D872D01900D928A95E1F7F9016D
+:100A0000819191919F01FC01E07FFF27E032F10588
+:100A100059F48F709927FA0102C0EE0FFF1F8A95D3
+:100A2000E2F7AE2ABF2A37C0E033F10559F48F70E0
+:100A30009927FA0102C0EE0FFF1F8A95E2F7CE2A2E
+:100A4000DF2A29C0E034F10559F48F709927FA01A3
+:100A500002C0EE0FFF1F8A95E2F7EE2AFF2A1BC0A5
+:100A6000E035F10559F48F709927FA0102C0EE0FB5
+:100A7000FF1F8A95E2F70E2B1F2B0DC0E036F10504
+:100A800051F48F709927FA0102C0EE0FFF1F8A956B
+:100A9000E2F76E2B7F2B2815390509F0A7CF94B10B
+:100AA0008A2D8095892384B985B18A2985B997B122
+:100AB0008C2D8095892387B988B18C2988B99AB102
+:100AC0008E2D809589238AB98BB18E298BB99DB1E2
+:100AD000802F809589238DB98EB1802B8EB990B3EC
+:100AE000862F8095892380BB81B3862B81BB289676
+:100AF0000FB6F894DEBF0FBECDBFDF91CF911F912F
+:100B00000F91FF90EF90DF90CF90BF90AF909F90AC
+:100B10008F907F906F905F9008955F926F927F9219
+:100B20008F929F92AF92BF92CF92DF92EF92FF92FD
+:100B30000F931F93CF93DF93CDB7DEB768970FB6B0
+:100B4000F894DEBF0FBECDBF85B7806885BF85B77F
+:100B5000806885BF0E94CF076E9A769A0E94C8046B
+:100B60009E012F5F3F4F4E0189E1880E911C60E08E
+:100B700070E000E010E0E12CF12CC12CD12CA12C74
+:100B8000B12C98E1792E622E532E41E050E0EBE239
+:100B9000F1E0A62DB52D872D01900D928A95E1F7F4
+:100BA000F901819191919F01FC01E07FFF27E032E3
+:100BB000F10559F48F709927FA0102C0EE0FFF1F5B
+:100BC0008A95E2F7AE2ABF2A37C0E033F10559F41F
+:100BD0008F709927FA0102C0EE0FFF1F8A95E2F786
+:100BE000CE2ADF2A29C0E034F10559F48F70992705
+:100BF000FA0102C0EE0FFF1F8A95E2F7EE2AFF2AE4
+:100C00001BC0E035F10559F48F709927FA0102C035
+:100C1000EE0FFF1F8A95E2F70E2B1F2B0DC0E0365B
+:100C2000F10551F48F709927FA0102C0EE0FFF1FF2
+:100C30008A95E2F76E2B7F2B2815390509F0A7CF8F
+:100C400094B18A2D8095892384B985B18A2985B983
+:100C500097B18C2D8095892387B988B18C2988B963
+:100C60009AB18E2D809589238AB98BB18E298BB943
+:100C70009DB1802F809589238DB98EB1802B8EB93F
+:100C800090B3862F8095892380BB81B3862B81BB4F
+:100C90001092B7011092B6011092BF011092BE01DE
+:100CA0001092B9011092B8011092C1011092C001C6
+:100CB0001092BB011092BA011092C3011092C201AE
+:100CC0001092BD011092BC011092C5011092C40196
+:100CD00068960FB6F894DEBF0FBECDBFDF91CF91FF
+:100CE0001F910F91FF90EF90DF90CF90BF90AF904A
+:100CF0009F908F907F906F905F9008955F926F921A
+:100D00007F928F929F92AF92BF92CF92DF92EF929B
+:100D1000FF920F931F93CF93DF93CDB7DEB7A097CA
+:100D20000FB6F894DEBF0FBECDBF7E0149E1E40EE1
+:100D3000F11C2EEBC22E21E0D22E5E0151E2A50E57
+:100D4000B11C38E0532E470101E010E048E1642E69
+:100D500055E0752EE3E2F1E0D401852D01900D926E
+:100D60008A95E1F7F701819191917F019C01207FA4
+:100D700033272032310589F424B18F709927A801D7
+:100D800002C0440F551F8A95E2F7CA01242B24B9EB
+:100D900095B18095892385B94FC02033310589F4F9
+:100DA00027B18F709927F80102C0EE0FFF1F8A95B7
+:100DB000E2F7CF012E2B27B998B18095892388B906
+:100DC0003BC02034310589F42AB18F709927A801DE
+:100DD00002C0440F551F8A95E2F7CA01242B2AB995
+:100DE0009BB1809589238BB927C02035310589F4C3
+:100DF0002DB18F709927F80102C0EE0FFF1F8A9561
+:100E0000E2F7CF012E2B2DB99EB1809589238EB9A3
+:100E100013C02036310581F420B38F709927A801C3
+:100E200002C0440F551F8A95E2F7CA01242B20BB4C
+:100E300091B38095892381BB50EA5A95F1F7BE01A1
+:100E40006F5F7F4F80E090E020E030E0EBE2F1E088
+:100E5000DE011196462D01900D924A95E1F7FB01B6
+:100E600041915191BF01FA01E07FFF27E032F10586
+:100E700011F4E3B113C0E033F10511F4E6B10EC093
+:100E8000E034F10511F4E9B109C0E035F10511F4E0
+:100E9000ECB104C0E036F105B9F4EFB1F0E04F7009
+:100EA000552702C0F595E7954A95E2F7E0FD08C0A1
+:100EB000A801022E02C0440F551F0A94E2F702C097
+:100EC00040E050E0842B952B2F5F3F4F2C303105B5
+:100ED00009F0BCCFF601208131812817390721F0B4
+:100EE00091838083709200010E94C804F2E0CF0ECB
+:100EF000D11CEA14FB0409F02DCF80910001882356
+:100F000061F1815080930001811121C08091BE0167
+:100F10009091BF019093B7018093B6018091C00179
+:100F20009091C1019093B9018093B8018091C20161
+:100F30009091C3019093BB018093BA018091C40149
+:100F40009091C5019093BD018093BC0106C08FE9CB
+:100F50009FE00197F1F700C0000081E0A0960FB676
+:100F6000F894DEBF0FBECDBFDF91CF911F910F91DF
+:100F7000FF90EF90DF90CF90BF90AF909F908F90B9
+:100F80007F906F905F900895E82FF0E0EE0FFF1FC5
+:100F9000EA54FE4F80819181089508950895279A1B
+:100FA0002F988FEF9FEF90938700809386008AE0C1
+:100FB0008093800089E1809381000C945F2B8111E4
+:100FC0000BC080918000877F8093800010928D00FD
+:100FD00010928C002F9808952F98833041F48091BF
+:100FE00080008860809380008FEF9FEF12C0909107
+:100FF000800098609093800023E030E0281B310946
+:10100000220F331F8FEF9FEF02C0969587952A9589
+:10101000E2F790938D0080938C0008950F931F93B7
+:10102000CF93DF93CDB7DEB7CC58D1090FB6F89484
+:10103000DEBF0FBECDBF8C01862F642F882379F0D1
+:10104000F80192812FE7482F992329F08DE792E04C
+:101050000E94F81404C08DE792E00E940815F80180
+:1010600080818B3061F49181933009F068C0828176
+:10107000882309F4CDC0809103018F5F0EC08A30B0
+:10108000E1F5F8019181933009F059C082818823FC
+:1010900009F4BEC08091030181508093030120E0D8
+:1010A0004BE760E08DE792E00E94E81420E04BE718
+:1010B00061E08DE792E00E94E81420E04BE762E0F7
+:1010C0008DE792E00E94E81420E04BE763E08DE7B3
+:1010D00092E00E94E81420E04BE764E08DE792E0A4
+:1010E000C457DF4F0FB6F894DEBF0FBECDBFDF9100
+:1010F000CF911F910F910C94E814893069F4F80195
+:1011000091819330E1F492819923C9F0809101019A
+:101110009091020101960EC0883089F4F801918106
+:10112000933069F49281992351F08091010190915B
+:10113000020101979093020180930101B0CFF80161
+:10114000928140910301992391F196E4E3E4F1E067
+:10115000DE01A95BBF4F01900D929A95E1F7405DCA
+:10116000F8019181FCE09F9F40191124E091010159
+:10117000F0910201E80FF11DEE0FFF1F87E490E0F0
+:101180008C0F9D1FE80FF91F8081480F2FE760E04B
+:101190008DE792E0C457DF4F0FB6F894DEBF0FBE65
+:1011A000CDBFDF91CF911F910F910C94F81496E46D
+:1011B000E3E4F1E0DE01119601900D929A95E1F7DA
+:1011C000405DF8019181FCE09F9F40191124E0915E
+:1011D0000101F0910201E80FF11DEE0FFF1F81E008
+:1011E00090E08C0F9D1FE80FF91F8081480F2FE7BB
+:1011F00060E08DE792E0C457DF4F0FB6F894DEBF92
+:101200000FBECDBFDF91CF911F910F910C940815A8
+:10121000C457DF4F0FB6F894DEBF0FBECDBFDF91CE
+:10122000CF911F910F910895CF93DF93EA019B0116
+:10123000AC0160E074E284E79BE40E945F2C0E94B2
+:10124000C72C709397006093960020E130E02C1B30
+:101250003D0B02C0759567952A95E2F7709399004A
+:1012600060939800DF91CF9108951092020210923E
+:10127000010210929000109291001092FD011092C4
+:10128000FE011092FF01109200021092FC011092D8
+:10129000FB01E9EDF1E0A9ECB1E01192119211929C
+:1012A00011921D921D9281E0E93FF807B1F7089570
+:1012B000AF92BF92CF92DF92EF92FF920F931F9364
+:1012C000CF93DF936B017C0109EF11E047EDA42E72
+:1012D00041E0B42EC7E0D0E0A7019601F801929159
+:1012E0008291729162918F010E945B2C882349F058
+:1012F0002197F2E0AF1AB108CF3F8FEFD80761F71F
+:1013000034C0F8011082118212821382F501118219
+:101310001082FE01EE0FFF1FEE0FFF1FE752FE4F80
+:10132000DE01AA0FBB1FA753BE4FCE011AC0019604
+:1013300044815581668177814083518362837383C1
+:10134000148215821682178212962D913C91139762
+:1013500011963C932E9313961C921E9212973496DC
+:1013600012968730910519F7C3CF809101029091B1
+:101370000202019797FD05C090930202809301023B
+:1013800004C01092020210920102E0910102F09159
+:101390000202309789F410929000109291001092FE
+:1013A000FD011092FE011092FF01109200021092B6
+:1013B000FC011092FB019EC03197DF01AA0FBB1FF9
+:1013C000AA0FBB1FA752BE4FCD90DD90ED90FC90B1
+:1013D000EE0FFF1FE753FE4FC081D181A090FD01AA
+:1013E000B090FE010091FF0110910002A70196014B
+:1013F0006A2D7B2D802F912F0E945B2C87FF2FC0A1
+:1014000081E08093C801AE016A2D7B2D802F912F42
+:101410000E9414092091FD013091FE014091FF01CD
+:1014200050910002C701B6010E94F62B20E030E087
+:101430004AEF53E40E945F2C9B01AC016A2D7B2D87
+:10144000802F912F0E94F72B5B018C01A701960141
+:101450007B2D912F0E945B2C1816ACF638C0A7018B
+:1014600096016A2D7B2D802F912F0E94AA2D181690
+:1014700084F581E08093C801AE016A2D7B2D802F19
+:10148000912F0E941409A70196016091FD017091AE
+:10149000FE018091FF01909100020E94F62B20E056
+:1014A00030E04AEF53E40E945F2C9B01AC016A2DAF
+:1014B0007B2D802F912F0E94F62B5B018C01A701C1
+:1014C00096017B2D912F0E94AA2D87FFD5CF1092D8
+:1014D000C801AE01C701B6010E941409C092FD0106
+:1014E000D092FE01E092FF01F0920002D093FC0145
+:1014F000C093FB01DF91CF911F910F91FF90EF906F
+:10150000DF90CF90BF90AF90089508951F920F92F3
+:101510000FB60F9211242F933F934F935F936F93C6
+:101520007F938F939F93AF93BF93EF93FF9380919C
+:10153000960090919700892B09F455C08091C801BD
+:10154000811151C08091F9019091FA01813091058A
+:1015500071F082309105C1F0892BC1F52091FD0118
+:101560003091FE014091FF01509100021DC0609139
+:10157000FD017091FE018091FF01909100029B019D
+:10158000AC010E94F72B0EC020E030E040E450E4B4
+:101590006091FD017091FE018091FF019091000228
+:1015A0000E94AE2D9B01AC0160E074E284E79BE4F5
+:1015B0000E945F2C0E94C72C709397006093960046
+:1015C0007595679570939900609398008091F901E3
+:1015D0009091FA01019663E070E00E948A2F909347
+:1015E000FA018093F901FF91EF91BF91AF919F9123
+:1015F0008F917F916F915F914F913F912F910F90BC
+:101600000FBE0F901F901895AF92BF92CF92DF92AE
+:10161000EF92FF920F931F93CF93DF936B017C01A7
+:10162000EA0120E030E0A9010E94AA2D18160CF072
+:10163000B4C03E9A82E8809390008AE18093910042
+:10164000A090FD01B090FE010091FF0110910002F9
+:1016500020E030E0A9016A2D7B2D802F912F0E9480
+:101660005B2C81112DC0AE01C701B6010E94140987
+:10167000C092FD01D092FE01E092FF01F0920002C3
+:10168000D093FC01C093FB01809101029091020272
+:10169000FC01EE0FFF1FEE0FFF1FE752FE4FC0824F
+:1016A000D182E282F382FC01EE0FFF1FE753FE4F6F
+:1016B000D183C083019690930202809301026DC092
+:1016C000A70196016A2D7B2D802F912F0E945B2C04
+:1016D00087FF2CC0AE016A2D7B2D802F912F0E9499
+:1016E00014092091FD013091FE014091FF015091BC
+:1016F0000002C701B6010E94F62B20E030E04AEF5D
+:1017000053E40E945F2C9B01AC016A2D7B2D802F3E
+:10171000912F0E94F72B5B018C01A70196017B2D75
+:10172000912F0E945B2C1816ACF69DCFA701960155
+:101730006A2D7B2D802F912F0E94AA2D18160CF058
+:1017400092CFAE016A2D7B2D802F912F0E9414091C
+:10175000A70196016091FD017091FE018091FF014A
+:10176000909100020E94F62B20E030E04AEF53E413
+:101770000E945F2C9B01AC016A2D7B2D802F912F45
+:101780000E94F62B5B018C01A70196017B2D912F06
+:101790000E94AA2D87FFD5CF66CFDF91CF911F91F1
+:1017A0000F91FF90EF90DF90CF90BF90AF90089592
+:1017B00080910C020895CF93DF9300D01F92CDB794
+:1017C000DEB720916E03243021F523E029839B832B
+:1017D0008A832093E9008FEF06C095ED9A95F1F783
+:1017E0000000882329F09091E800815095FFF5CF03
+:1017F0008091E80085FF0DC040E050E063E070E0BC
+:10180000CE0101960E94BA0F8091E8008E778093F6
+:10181000E8000F900F900F90DF91CF910895CF9334
+:10182000DF9300D01F92CDB7DEB720916E03243036
+:1018300029F522E029839B838A8383E08093E90052
+:101840008FEF06C095ED9A95F1F70000882329F0F7
+:101850009091E800815095FFF5CF8091E80085FFD9
+:101860000DC040E050E063E070E0CE0101960E94C0
+:10187000BA0F8091E8008E778093E8000F900F9068
+:101880000F90DF91CF91089520916E032430F9F4E9
+:1018900022E02093E9002FEF06C035ED3A95F1F7ED
+:1018A0000000222329F03091E800215035FFF5CFC8
+:1018B0002091E80025FF0BC040E050E065E070E0BB
+:1018C0000E94BA0F8091E8008E778093E800089517
+:1018D000CF93DF93EC0180916E03843041F581E07A
+:1018E0008093E9008FEF06C095ED9A95F1F700001F
+:1018F000882329F09091E800815095FFF5CF8091E1
+:10190000E80085FF14C040E050E068E070E0CE01E0
+:101910000E94BA0F8091E8008E778093E80088E0FB
+:10192000FE01A4E0B2E001900D928A95E1F7DF910B
+:10193000CF910895BF92CF92DF92EF92FF920F93D3
+:101940001F93CF93DF937C01B62EE90100E010E0F6
+:10195000C42ED12C0BC04991202F2B0D2F774F7700
+:101960006FE0C7010E94E8140F5F1F4F0C151D05A3
+:1019700094F3DF91CF911F910F91FF90EF90DF9043
+:10198000CF90BF90089570E06F5F7F4F6F707727A3
+:101990000C94E8140F931F93CF93C42F63307105F9
+:1019A00009F04AC0842F807F803849F1803909F0DE
+:1019B00043C0622F6F7770E080E090E00E94FA2CC5
+:1019C00020E030E040E451E40E945F2C9B01AC0138
+:1019D00060E070E080E090E40E94112E0F7710E04C
+:1019E00023E0159507952A95E1F72DEC3CEC42E0B4
+:1019F00053E40E94AE2DA8010E94040B1DC0622F6B
+:101A00006F7770E080E090E00E94FA2C20E030E0F8
+:101A100040E451E40E945F2C9B01AC0160E070E067
+:101A200080E090E40E94112E2DEC3CEC42E053E467
+:101A30000E94AE2D0E945809CC3F29F4CF911F91EE
+:101A40000F910C943509CF911F910F9108950F9329
+:101A50001F93CF93DF93CDB7DEB727970FB6F894D8
+:101A6000DEBF0FBECDBF8C0114C08A810E94C2149C
+:101A70009A819D839B819E839C819F8381111EC03F
+:101A800089818430B1F08730A1F08630A1F08530B3
+:101A9000A1F0BE016F5F7F4F84E091E00E942F189C
+:101AA0008111E3CF84E091E00E9420180E949B14F2
+:101AB0000DC083E003C082E001C081E0AE014B5F56
+:101AC0005F4F682FC8010E945515E3CF27960FB6C8
+:101AD000F894DEBF0FBECDBFDF91CF911F910F9164
+:101AE0000895EF92FF920F93CF93DF9300D000D031
+:101AF00000D0CDB7DEB77B014A832B830C83842FC4
+:101B00002E834D830E94C2142E814D8181111BC0F2
+:101B100082E0E816F10479F083E0E816F10421F0A0
+:101B2000EA94EF2821F50BC0073F11F487E001C0CC
+:101B300084E089830BC0273FD9F786E0FACF473F7F
+:101B4000B9F785E0F6CF42954F704983BE016F5FCC
+:101B50007F4F84E091E00E94E51784E091E00E94CD
+:101B6000031884E091E00E9420180E949B1426969E
+:101B70000FB6F894DEBF0FBECDBFDF91CF910F91AE
+:101B8000FF90EF90089580916D03811109C00E942C
+:101B9000A1110E94FE118091E20084608093E20016
+:101BA000089510926D03089508950C94E4020C9426
+:101BB000892480916E03843049F58091E9008F700B
+:101BC0009091EC0090FF02C090E801C090E0982B4B
+:101BD00084E08093E9008091EB0080FF14C0809145
+:101BE000EE0087FD03C00FC01092F1008091E80065
+:101BF00085FDFACF8091E80080FF05C08091E80064
+:101C00008E778093E8009F709093E900089542E0FA
+:101C100061EC81E00E94171142E061EC82E00E94D9
+:101C2000171142E061EC83E00E94171146E261EC7B
+:101C300084E00E94171142E361E885E00E941711D9
+:101C400042E360E886E00C941711809170038330C2
+:101C500009F454C030F4813071F0823009F0AAC028
+:101C600091C08A3009F47EC08B3009F45FC089309E
+:101C700009F0A0C020C080916F03813A09F09AC09A
+:101C80008091E800877F8093E800809173039091B2
+:101C90007403892B21F060E080E090E003C068E0ED
+:101CA00084E092E070E00E9458108091E8008B7709
+:101CB0008093E800089580916F03813209F07AC023
+:101CC0008091730390917403892B09F073C0809104
+:101CD000E800877F8093E80005C080916E03882329
+:101CE00009F468C08091E80082FFF7CF8091F1008D
+:101CF00080930C028091E8008B7758C080916F032D
+:101D0000813A09F057C08091730390917403892B35
+:101D100009F050C08091E800877F8093E8008091AF
+:101D2000E80080FFFCCF80911A013BC080916F03D7
+:101D3000813209F03FC08091730390917403892B25
+:101D4000C9F58091E800877F8093E8000E944E11DA
+:101D50009091710381E0911101C080E080931A019C
+:101D60000C948C1E80916F03813221F58091E800E4
+:101D7000877F8093E8000E944E11809172038093C8
+:101D80000302089580916F03813AA1F48091E800E5
+:101D9000877F8093E8008091E80080FFFCCF8091EE
+:101DA00003028093F1008091E8008E778093E80031
+:101DB0000C944E11089584B7877F84BF88E10FB6D5
+:101DC000F89480936000109260000FBE90E080E86D
+:101DD0000FB6F89480936100909361000FBE0E944B
+:101DE000A1110E94FE11E2EEF0E080818460808308
+:101DF00008958DE792E00E94241561E77DE08DE76C
+:101E000092E00E947A1567E27DE08DE792E00E9401
+:101E10007E150E94DB0E78946AEC7CE08DE792E000
+:101E20000E94201563EC7CE08DE792E00E9418157B
+:101E30006AE97CE08DE792E00E941C150E94850A09
+:101E40000E949B140E94AC1880E191E00E945418FB
+:101E50000BC00E944E2480916C03882329F00E94BD
+:101E6000742481110E94A40F80916E03853089F340
+:101E70008DE792E00E942D170E94B618F5CF292F0A
+:101E8000332723303105B1F04CF42130310509F40A
+:101E90004DC02230310509F04EC007C02132310556
+:101EA00041F12232310591F146C0E0EDF0E086E7E4
+:101EB00093E045C099278130910569F08230910502
+:101EC00089F0892B09F037C0E2E7F3E0E491F0E014
+:101ED00082E793E034C0E4E4F3E0E491F0E084E4EA
+:101EE00093E02DC0EAE1F3E0E491F0E08AE193E0D1
+:101EF00026C0643000F5E62FF0E0EE0FFF1FE75735
+:101F0000FE4F80819181E9E0F0E019C0643098F4DF
+:101F1000E62FF0E0DF01AA0FBB1FAF56BE4F8D9139
+:101F20009C91E756FE4FE081F0E009C0E2E1F0E06D
+:101F300086E494E004C0E0E0F0E080E090E0DA01C4
+:101F40008D939C93CF01089580E189BD82E189BD85
+:101F500009B400FEFDCF8091D8008F7D8093D8001A
+:101F60008091E00082608093E0008091E00081FD3C
+:101F7000FCCF0895BF92CF92DF92EF92FF920F9322
+:101F80001F93CF93DF937C018B01EA010E946F11B5
+:101F9000B82E811133C0209731F028813981021B7E
+:101FA000130BE20EF31EC12CD12C23C08091E8004C
+:101FB00085FD15C08091E8008E778093E80020971A
+:101FC00049F0888199818C0D9D1D9983888325E036
+:101FD000B22E14C00E946F11882359F00EC0F70171
+:101FE00081917F018093F10001501109FFEFCF1A19
+:101FF000DF0A01151105D1F601C0B82E8B2DDF9136
+:10200000CF911F910F91FF90EF90DF90CF90BF90F5
+:102010000895BF92CF92DF92EF92FF920F931F939A
+:10202000CF93DF937C018B01EA010E946F11B82EE0
+:10203000811133C0209731F028813981021B130BA5
+:10204000E20EF31EC12CD12C23C08091E80085FD47
+:1020500015C08091E8008B778093E800209749F0C5
+:10206000888199818C0D9D1D9983888345E0B42ECC
+:1020700014C00E946F11882359F00EC08091F100A6
+:10208000F70181937F0101501109FFEFCF1ADF0A99
+:1020900001151105D1F601C0B82E8B2DDF91CF911E
+:1020A0001F910F91FF90EF90DF90CF90BF90089518
+:1020B00040917503509176034617570748F0611514
+:1020C000710539F44091E8004E774093E80001C073
+:1020D000BA01FC0140E033C080916E03882309F40B
+:1020E00042C0853009F441C08091E80083FD39C0C9
+:1020F0008091E80082FD2FC08091E80080FF1FC022
+:102100009091F3008091F200392F20E0A901482B33
+:10211000CA0106C041914093F100615071090196D6
+:102120006115710519F088309105A0F341E0089719
+:1021300009F040E08091E8008E778093E800611517
+:10214000710551F64111C8CF06C080916E038823F6
+:1021500051F0853051F08091E80082FFF6CF80E0A9
+:10216000089581E0089582E0089583E00895409104
+:102170007503509176034617570748F061157105AE
+:1021800039F44091E8004E774093E80001C0BA016D
+:10219000FC0140E034C080916E03882309F443C001
+:1021A000853009F442C08091E80083FD3AC08091F7
+:1021B000E80082FD30C08091E80080FF20C090914F
+:1021C000F3008091F200392F20E0A901482BCA01C9
+:1021D00007C044914093F100319661507109019616
+:1021E0006115710519F08830910598F341E0089761
+:1021F00009F040E08091E8008E778093E800611557
+:10220000710549F64111C7CF06C080916E0388233E
+:1022100051F0853051F08091E80082FFF6CF80E0E8
+:10222000089581E0089582E0089583E00895982F4D
+:102230002CC09093E900981739F07091EC00209130
+:10224000ED005091F00003C0242F762F50E021FDC7
+:1022500002C09F5F1AC03091EB003E7F3093EB00CD
+:102260003091ED003D7F3093ED003091EB00316017
+:102270003093EB007093EC002093ED005093F0004E
+:102280002091EE0027FDE5CF07C0973090F28F70C8
+:102290008093E90081E0089580E0089580916F03C4
+:1022A00087FD05C08091E80080FF0EC012C08091BC
+:1022B000E80082FD05C080916E038111F8CF08957A
+:1022C0008091E8008B7708C080916E038111EACF7E
+:1022D00008958091E8008E778093E80008958091BA
+:1022E000E4009091E50045E62091EC0020FD1FC040
+:1022F00023C020916E03222391F0253091F020918C
+:10230000EB0025FD10C02091E4003091E500281776
+:10231000390751F34150C90139F784E0089582E04B
+:10232000089583E0089581E0089580E00895209164
+:10233000E80020FFDECFF9CF2091E80022FFD9CFBF
+:10234000F4CF0E940F120E941712E0EEF0E080819D
+:1023500081608083E8EDF0E080818F77808319BC15
+:10236000A7EDB0E08C918E7F8C9380818F7E8083EF
+:1023700010926D0308950F931F93CF93DF930E94E4
+:102380000F120E941712C8EDD0E088818F778883E2
+:1023900088818068888388818F7D888319BC1092AA
+:1023A0006E0310926A0310926C0310926B0300EE9E
+:1023B00010E0F80180818B7F808388818160888331
+:1023C00042E060E080E00E941711E1EEF0E08081E1
+:1023D0008E7F8083E2EEF0E0808181608083808167
+:1023E00088608083F80180818E7F8083888180610E
+:1023F0008883DF91CF911F910F910895E8EDF0E070
+:1024000080818F7E8083E7EDF0E080818160808332
+:1024100084E082BF81E080936D030C94BB11E8EDF2
+:10242000F0E080818E7F80831092E2000895109208
+:10243000DA001092E10008951F920F920FB60F92EA
+:1024400011242F933F934F935F936F937F938F93B9
+:102450009F93AF93BF93EF93FF938091E10082FF2F
+:102460000BC08091E20082FF07C08091E1008B7F6A
+:102470008093E1000E94D90D8091DA0080FF1FC097
+:102480008091D80080FF1BC08091DA008E7F8093FE
+:10249000DA008091D90080FF0DC080E189BD82E122
+:1024A00089BD09B400FEFDCF81E080936E030E94D8
+:1024B000C30D05C019BC10926E030E94D10D80910E
+:1024C000E10080FF19C08091E20080FF15C080917B
+:1024D000E2008E7F8093E2008091E2008061809331
+:1024E000E2008091D80080628093D80019BC85E01A
+:1024F00080936E030E94D50D8091E10084FF30C06F
+:102500008091E20084FF2CC080E189BD82E189BD19
+:1025100009B400FEFDCF8091D8008F7D8093D80054
+:102520008091E1008F7E8093E1008091E2008F7EB8
+:102530008093E2008091E20081608093E2008091CC
+:102540006A03882311F084E007C08091E30087FFCD
+:1025500002C083E001C081E080936E030E94D70D2A
+:102560008091E10083FF29C08091E20083FF25C0B4
+:102570008091E100877F8093E10082E080936E0389
+:1025800010926A038091E1008E7F8093E100809138
+:10259000E2008E7F8093E2008091E2008061809370
+:1025A000E20042E060E080E00E9417118091F000BC
+:1025B00088608093F0000E94D40DFF91EF91BF914D
+:1025C000AF919F918F917F916F915F914F913F91CB
+:1025D0002F910F900FBE0F901F9018951F920F9282
+:1025E0000FB60F9211242F933F934F935F936F93E6
+:1025F0007F938F939F93AF93BF93CF93EF93FF936B
+:102600008091E9008F709091EC0090FF02C090E8FB
+:1026100001C090E0C92FC82B1092E9008091F00012
+:10262000877F8093F00078940E9432131092E90023
+:102630008091F00088608093F000CF70C093E90033
+:10264000FF91EF91CF91BF91AF919F918F917F912A
+:102650006F915F914F913F912F910F900FBE0F900F
+:102660001F9018951F93CF93DF93CDB7DEB7AC972C
+:102670000FB6F894DEBF0FBECDBFEFE6F3E080915A
+:10268000F100819323E0E737F207C9F70E94250E96
+:102690008091E80083FF37C180916F0390917003B0
+:1026A000953009F488C038F49130B1F170F093306E
+:1026B00009F029C131C0983009F4F8C0993009F403
+:1026C00004C1963009F01FC19DC0803821F08238C6
+:1026D00009F019C108C080916B0390916C03992394
+:1026E00089F082600FC080917303909174038F70A2
+:1026F00099278093E9008091EB0085FB882780F97A
+:102700001092E9009091E800977F9093E800809301
+:10271000F1001092F100D5C0882319F0823009F041
+:10272000F2C08F7121F0823009F0EDC00BC08091B2
+:102730007103813009F0E7C0933009F080E08093A5
+:102740006C032FC08091710381112BC080917303A2
+:10275000909174038F709927009709F4D4C08093E7
+:10276000E9002091EB0020FF1CC020917003233072
+:1027700021F48091EB00806212C09091EB00906197
+:102780009093EB0021E030E001C0220F8A95EAF738
+:102790002093EA001092EA008091EB008860809319
+:1027A000EB001092E9008091E800877F8093E800B9
+:1027B0000E944E11A8C08111A6C080917103909112
+:1027C00072038F779927182F9091E3009078982BB8
+:1027D0009093E3008091E800877F8093E8000E9457
+:1027E0004E118091E80080FFFCCF8091E30080686B
+:1027F0008093E300112311F083E001C082E0809315
+:102800006E0381C08058823008F07DC080917103D2
+:10281000909172038C3D23E0920779F583E08A83DF
+:102820008AE289834FB7F894DE01139620E03EE0F8
+:1028300051E2E32FF0E050935700E49120FF03C0F2
+:10284000E295EF703F5FEF708E2F90E0EA3010F06E
+:10285000C79601C0C0968D939D932F5F243149F791
+:102860004FBF8091E800877F8093E8006AE270E0C4
+:10287000CE0101960E94581013C0AE01455D5F4F16
+:10288000609173030E943F0F0097E9F12091E800E7
+:10289000277F2093E800BC018BA59CA50E94B71060
+:1028A0008091E8008B778093E8002DC0803859F53F
+:1028B0008091E800877F8093E80080916A0380938D
+:1028C000F1008091E8008E7771CF81111CC090914A
+:1028D00071039230C0F48091E800877F8093E80014
+:1028E00090936A030E944E1180916A03811104C083
+:1028F0008091E30087FF02C084E001C081E0809303
+:102900006E030E94070E8091E80083FF0AC0809149
+:10291000E800877F8093E8008091EB0080628093DD
+:10292000EB00AC960FB6F894DEBF0FBECDBFDF91C3
+:10293000CF911F910895CF9380916E038823B1F0BA
+:102940008091E9008F709091EC0090FF02C090E8B8
+:1029500001C090E0C92FC82B1092E9008091E800D7
+:1029600083FD0E943213CF70C093E900CF91089588
+:10297000881F8827881F089591E0883F08F490E019
+:10298000892F0895982F907F903B99F038F49039D3
+:1029900081F0903A71F09038C9F40BC0903DA1F0ED
+:1029A00018F4903C99F410C0903E19F0903F71F4E7
+:1029B00002C083E00895E82FE15FEF3038F4F0E0E3
+:1029C000E356FE4F8081089582E0089580E00895E7
+:1029D0000F932F774F776F70606BDC01ED91FC9157
+:1029E000022F242F462F63E070E009950F91089580
+:1029F0000F932F774F776F706069DC01ED91FC9139
+:102A0000022F242F462F63E070E009950F9108955F
+:102A10000F932F774F776F706068DC01ED91FC9119
+:102A2000022F242F462F63E070E009950F9108953F
+:102A3000FC01738362830895FC01738F628F089594
+:102A4000FC01758F648F0895CF93DF93EC011DA275
+:102A50001FA21EA2BC01685D7F4F40EC88519F4FB2
+:102A60000E9461171B821A821D821C821F821E8295
+:102A7000198618861B861A861D861C861F861E864A
+:102A8000198A188A1B8A1A8A1D8A1C8A1F8A1E8A1A
+:102A9000198E188E1B8E1A8E1D8E1C8E1F8E1E8EEA
+:102AA00019A218A2DF91CF910895CF92DF92FF92E1
+:102AB0000F931F93CF93DF931F92CDB7DEB7F62E00
+:102AC0006A018C0108511F4F08C0F60161916F0126
+:102AD000C80149830E94681749818C2D841B8F157A
+:102AE000A0F30F90DF91CF911F910F91FF90DF9096
+:102AF000CF900895FC01718360830895FC0171A358
+:102B000060A30895AF92BF92CF92DF92EF92FF92AF
+:102B10000F931F93CF93DF9300D01F92CDB7DEB7F3
+:102B20007C016B01142FB22EA02EDC0195968C91A6
+:102B300095978430F1F45A96ED91FC915B9730971C
+:102B400009F4D8C0CB01019763E070E00E94762FB2
+:102B5000DB01AA0FBB1FA60FB71F49832A830B8374
+:102B60004C2D4A1B9E012F5F3F4FBD01C7010995A8
+:102B7000B1C06230710509F453C06330710529F0AA
+:102B80006130710509F09CC083C0842F807F803A3A
+:102B900001F130F48038B9F0803909F0ABC00DC0D4
+:102BA000803EE9F0803F09F1803B09F0A3C0D701E6
+:102BB0001296ED91FC91139723C0D7011496ED91D5
+:102BC000FC9115971DC0D7011696ED91FC911797B2
+:102BD00017C0D7011896ED91FC91199711C0D70134
+:102BE0001A96ED91FC911B970BC0423F09F082C0F1
+:102BF000D7011C96ED91FC911D97309731F47AC066
+:102C0000309709F477C0123F21F42A2D4B2D62EF43
+:102C100004C0612F6F702A2D4B2DC70109955AC032
+:102C2000842F807F803D59F0803F79F0803C09F00F
+:102C300061C0D7011E96ED91FC911F9719C0D70175
+:102C40005096ED91FC91519713C0433F31F4D70159
+:102C50005296ED91FC91539708C0413F09F04AC04C
+:102C6000D7015496ED91FC915597309741F442C0AD
+:102C7000309709F43FC0133F11F0113F19F44B2D69
+:102C8000612F03C0612F6F704B2DC701099522C0C2
+:102C9000842F0E94BC14882331F0D7015696ED9101
+:102CA000FC91579707C0163F29F5D7015896ED912B
+:102CB000FC9159973097F1F0612FC70109950AC02F
+:102CC00064307105A8F416C00A2D2B2D412FB601D2
+:102CD000C7010995D7015E96ED91FC915F973097FA
+:102CE00089F00A2D2B2D412FB601C70109950AC085
+:102CF000C12CD12CD7015C96ED91FC915D9730975A
+:102D000019F7E8CF0F900F900F90DF91CF911F919F
+:102D10000F91FF90EF90DF90CF90BF90AF9008950C
+:102D2000EF92FF920F931F93CF93DF93EC01162F37
+:102D3000862F0E94BC14882369F0FDA081E08DA33A
+:102D400000E020E0412F61E070E0CE010E9482159A
+:102D5000FDA27CC0812F0E94B8144DA1882309F4E4
+:102D600040C0443029F01AA321E030E03FA32EA355
+:102D7000812F0E94C214813031F070F0823051F006
+:102D8000833059F507C08DA300E020E0412F61E0BA
+:102D900070E01EC08DA35AC0103F19F0173FE9F430
+:102DA00004C084E08DA31AA33FC02EA13FA1C90196
+:102DB00063E070E00E94762F8C0F9D1FFC0112A330
+:102DC000B9016F5F7F4F7FA36EA30CA12BA14AA116
+:102DD000CE010E9482151DA239C01DA21FA21EA2F3
+:102DE00035C0442399F12EA13FA1C90163E070E0F1
+:102DF0000E94762F7C01FE01E80FF91F12A3B90192
+:102E00006F5F7F4F7FA36EA38130910591F082E0C9
+:102E1000E816F104D9F40CA12BA14AA1CE010E941D
+:102E200082158DA1843091F081E090E09FA38EA364
+:102E30000DC0423059F400E02BA14AA1CE010E94FE
+:102E400082158DA1843011F0FFA2EEA2DF91CF9107
+:102E50001F910F91FF90EF900895CF92DF92EF9224
+:102E6000FF920F931F93CF93DF93EC01E8A1F9A199
+:102E7000309709F009958E0108511F4FC8010E9433
+:102E80009A17E12CF12CC82ED12C0FC060E0C8019C
+:102E90000E94AE17682FCE010E94901661E0C80113
+:102EA0000E94BF178FEFE81AF80AEC14FD0470F3C4
+:102EB000DF91CF911F910F91FF90EF90DF90CF9016
+:102EC0000895FC0142837483638311821082089504
+:102ED0000F931F93CF93DF93EC01062F0E94E0170F
+:102EE000182F298130E0C90101966A8170E00E94A3
+:102EF0008A2F488150E08417950729F4812F0E947A
+:102F0000E31780E012C0EB81FC81E20FF31F008326
+:102F10002981822F90E001966A8170E00E948A2FB9
+:102F20008983812F0E94E31781E0DF91CF911F9168
+:102F30000F910895CF93DF93EC010E94E017298150
+:102F40009881291710F0C22F02C0CA81C20FC91B75
+:102F50000E94E3178C2FDF91CF910895FC0120810F
+:102F6000862F90E0820F911D628170E00E948A2F6F
+:102F70000380F481E02DE80FF91F808108950F93FD
+:102F80001F93CF93DF931F92CDB7DEB78C01698378
+:102F90000E94E017482FF80180816981262F30E0D8
+:102FA000280F311D6281C90170E00E948A2F808341
+:102FB000842F0F90DF91CF911F910F910C94E31705
+:102FC0008FB7F89408958FBF0895FC01CB0120912D
+:102FD0006E032430B1F421812F702093E90040E08A
+:102FE00050E064E070E00E94BA0F81110BC0909134
+:102FF000E80095FD07C09091E8009E779093E80067
+:10300000089582E0089520916E032430A9F4FC0114
+:1030100081818F708093E9003091F3002091F2005C
+:10302000932F80E0822B892B49F08091E8008E77E6
+:103030008093E8000C946F1182E0089580E0089579
+:1030400020916E03243051F4FC0121812F702093D4
+:10305000E9002091E80020FD0C9403180895FC017C
+:10306000CB0120916E03243011F080E00895268179
+:103070002F702093E9002091E80022FFF6CF2091E5
+:10308000E80025FFF2CF40E050E064E070E00E94ED
+:1030900009108091E80085FD05C08091E8008B77DC
+:1030A0008093E80081E0089590930F0280930E02D0
+:1030B000089580910E0290910F020895E0910E0202
+:1030C000F0910F02309721F00190F081E02D0994EA
+:1030D00080E00895E0910E02F0910F02309721F008
+:1030E0000280F381E02D09940895E0910E02F091A1
+:1030F0000F02309721F00480F581E02D09940895A6
+:1031000020911002309111028217930771F0909371
+:10311000110280931002E0910E02F0910F0230979D
+:1031200021F00680F781E02D099408952091120284
+:10313000309113028217930771F0909313028093DA
+:103140001202E0910E02F0910F02309721F00084FC
+:10315000F185E02D099408950E94B6240E948D0502
+:103160000E948A250C945F2B0C94CE075F926F927D
+:103170007F928F929F92AF92BF92CF92DF92EF9207
+:10318000FF920F931F93CF93DF93CDB7DEB72A97AC
+:103190000FB6F894DEBF0FBECDBF0E947E0694E14D
+:1031A000C92E92E0D92E00E010E0AA24A394B12CFD
+:1031B000502E802F0E94C4073C01F601E190F1904F
+:1031C0006F01E826F926E114F10431F40F5F1F4F77
+:1031D0000430110569F73AC08091680281FD0E94B0
+:1031E000CD0720E030E04501022E02C0880C991C7A
+:1031F0000A94E2F7C4018E219F21892B09F12E83C5
+:103200005F826820792081E0672809F480E0888760
+:103210000E94BF248160782F9A8789874E815F81C1
+:1032200068858A850E946F19F801EE0FFF1FEC5E1A
+:10323000FD4F80819181882599259183808316C0D7
+:103240002F5F3F4F2C30310571F6C0CF8FEF898350
+:103250008A831B820E94BF248160782F9D838C8388
+:1032600049815A816B818D810E946F190E94772854
+:1032700010911C020E945E181817D9F00E945E1867
+:1032800080931C022A960FB6F894DEBF0FBECDBF06
+:10329000DF91CF911F910F91FF90EF90DF90CF9032
+:1032A000BF90AF909F908F907F906F905F900C94A5
+:1032B000B4182A960FB6F894DEBF0FBECDBFDF91CB
+:1032C000CF911F910F91FF90EF90DF90CF90BF9023
+:1032D000AF909F908F907F906F905F900895CF9365
+:1032E000DF93CDB7DEB72B970FB6F894DEBF0FBED6
+:1032F000CDBF4F83588769877A878B87DE01119608
+:1033000086E0FD0111928A95E9F785E0FE01379686
+:1033100001900D928A95E1F749815A816B817C81F8
+:103320008D819E810E9447212B960FB6F894DEBFB7
+:103330000FBECDBFDF91CF910895CF93C82F8823C3
+:1033400009F4C1C0823859F40E945E1881FDBBC0E7
+:1033500089E30E94AC230E94282489E30CC08338AF
+:1033600079F40E945E1880FDAEC083E50E94AC2314
+:103370000E94282483E50E94CE23CF910C94282418
+:10338000843859F40E945E1882FD9DC087E40E9433
+:10339000AC230E94282487E4EECF8450813A48F47D
+:1033A0008C2F0E94C72A81118EC08C2F0E94AC23C3
+:1033B000E4CF8C2F805E883050F4C77081E090E0BD
+:1033C00001C0880FCA95EAF70E94EF23D6CF8C2F51
+:1033D000855A833078F4C53A29F0C63A31F482E848
+:1033E00090E005C081E890E002C083E890E0CF91D2
+:1033F0000C9480188C2F885A833108F064C0C83A26
+:1034000039F1C93A41F1CA3A49F1CB3A51F1CC3AD2
+:1034100059F1CD3A61F1C03B69F1CE3A71F1CF3A41
+:1034200079F1C13B81F1C23B89F1C33B91F1C43BCE
+:1034300099F1C53BA1F1C63BA9F1C73BB1F1C83B2E
+:10344000B9F1C93BC1F1CA3BC9F58AE292E038C083
+:1034500082EE90E035C089EE90E032C08AEE90E0D6
+:103460002FC085EB90E02CC086EB90E029C087EB65
+:1034700090E026C08CEC90E023C08DEC90E020C062
+:1034800083E891E01DC08AE891E01AC082E991E0EA
+:1034900017C084E991E014C081E292E011C083E298
+:1034A00092E00EC084E292E00BC085E292E008C098
+:1034B00086E292E005C087E292E002C080E090E000
+:1034C000CF910C949618CF910895882309F44DC09C
+:1034D000823859F40E945E1881FF47C089E30E9438
+:1034E000AC230E94282489E30CC0833871F40E9425
+:1034F0005E1880FF3AC083E50E94AC230E94282416
+:1035000083E50E94CE230C942824843859F40E9429
+:103510005E1882FF2AC087E40E94AC230E94282400
+:1035200087E4EFCF982F9450913A08F4EACF982F80
+:10353000905E983058F4282F277081E090E001C009
+:10354000880F2A95EAF70E94F523DDCF982F955A28
+:10355000933020F480E090E00C948018885A8331F6
+:1035600020F480E090E00C9496180895882321F0D0
+:103570000E94EF230C9428240895882321F00E94B0
+:10358000F5230C9428240895BF92CF92DF92EF92F6
+:10359000FF920F931F93CF93DF93CDB7DEB727979B
+:1035A0000FB6F894DEBF0FBECDBF8C0185E0F801E9
+:1035B000DE01119601900D928A95E1F7F8013081B4
+:1035C0002181F280558152955F7083819481892B8E
+:1035D00039F02F3F41F481E090E03F3F31F003C0EC
+:1035E00081E090E002C080E090E080FD73C3398309
+:1035F0002A8389819A815E830E946923B92E8F83F1
+:103600000E9468230E9490222B2D22952F7030E07B
+:103610005E816F812530310509F4E6C06CF42430F9
+:1036200031050CF0A2C04B2D407F8B2D8F702230C6
+:1036300031050CF045C017C02C3031054CF42A3050
+:1036400031050CF0E7C12830310509F043C3E5C06E
+:103650002D30310509F4BAC20CF4A2C22F30310565
+:1036600009F038C323C3182F411101C002C01295BD
+:10367000107FFF2059F0112309F46BC2812F6F8353
+:103680000E94FF230E9428246F8163C2862F0E941C
+:10369000651A112309F41EC3812F0E940524279661
+:1036A0000FB6F894DEBF0FBECDBFDF91CF911F9153
+:1036B0000F91FF90EF90DF90CF90BF900C94282453
+:1036C000403211F08295807F662319F0613071F5E8
+:1036D00023C0FF20B1F0511101C032C0513081F53B
+:1036E00027960FB6F894DEBF0FBECDBFDF91CF9106
+:1036F0001F910F91FF90EF90DF90CF90BF900C94AF
+:103700000F24511101C003C0513009F4E3C28E836C
+:103710000E9412248E819AC1FF2021F0563008F0B9
+:10372000D9C20EC0553008F0D5C290C1FF20C9F0F3
+:10373000552331F0F801958190FF0BC29F7095835E
+:1037400027960FB6F894DEBF0FBECDBFDF91CF91A5
+:103750001F910F91FF90EF90DF90CF90BF900C944E
+:10376000B61A552309F472C109C22B2D2695269548
+:10377000237030E02115310529F02130310509F0A1
+:10378000A9C219C0FF2021F0862F9B2D937002C083
+:1037900080E090E027960FB6F894DEBF0FBECDBF55
+:1037A000DF91CF911F910F91FF90EF90DF90CF901D
+:1037B000BF900C948018FF2021F0862F9B2D9370D2
+:1037C00002C080E090E027960FB6F894DEBF0FBEEF
+:1037D000CDBFDF91CF911F910F91FF90EF90DF90C0
+:1037E000CF90BF900C949618862FFF2019F00E945E
+:1037F0007D2702C00E94E52727960FB6F894DEBF0A
+:103800000FBECDBFDF91CF911F910F91FF90EF9031
+:10381000DF90CF90BF900C946C288B2D837009F0B3
+:1038200079C0F11057C2262F229526952770220FB6
+:10383000220F862F8F70C82ED12CE12CF12C022E56
+:1038400004C0CC0CDD1CEE1CFF1C0A94D2F764FFF4
+:1038500010C06FE070E080E090E004C0660F771F5A
+:10386000881F991F2A95D2F760957095809590953D
+:1038700003C060E070E0CB012B2D269526952370C8
+:10388000422F50E042305105D9F04330510569F1E3
+:103890006C297D298E299F294130510551F12796A8
+:1038A0000FB6F894DEBF0FBECDBFDF91CF911F9151
+:1038B0000F91FF90EF90DF90CF90BF900C94A522D6
+:1038C0006C297D298E299F2927960FB6F894DEBF93
+:1038D0000FBECDBFDF91CF911F910F91FF90EF9061
+:1038E000DF90CF90BF900C94B7220E94A522C70111
+:1038F000B60127960FB6F894DEBF0FBECDBFDF919D
+:10390000CF911F910F91FF90EF90DF90CF90BF90DC
+:103910000C949322FF2019F08B2D817001C08695A5
+:10392000882309F4D7C1262F229526952770220FC8
+:10393000220F862F8F70C82ED12CE12CF12C022E55
+:1039400004C0CC0CDD1CEE1CFF1C0A94D2F764FFF3
+:1039500010C06FE070E080E090E004C0660F771F59
+:10396000881F991F2A95D2F760957095809590953C
+:1039700003C060E070E0CB012B2D269526952370C7
+:10398000422F50E042305105D9F04330510569F1E2
+:103990006C297D298E299F294130510551F12796A7
+:1039A0000FB6F894DEBF0FBECDBFDF91CF911F9150
+:1039B0000F91FF90EF90DF90CF90BF900C94442335
+:1039C0006C297D298E299F2927960FB6F894DEBF92
+:1039D0000FBECDBFDF91CF911F910F91FF90EF9060
+:1039E000DF90CF90BF900C9456230E944423C701D0
+:1039F000B60127960FB6F894DEBF0FBECDBFDF919C
+:103A0000CF911F910F91FF90EF90DF90CF90BF90DB
+:103A10000C943223603F59F120F4603E08F494C0C6
+:103A200008C0623F09F467C0F0F1633F09F08CC041
+:103A300065C0162F1F708B2D8F71FF2021F00E9403
+:103A4000DD22812F7DCE0E94F822812F27960FB68E
+:103A5000F894DEBF0FBECDBFDF91CF911F910F91C4
+:103A6000FF90EF90DF90CF90BF900C94BD1AFF2095
+:103A7000B1F0553008F02EC18B2D8F7127960FB6FF
+:103A8000F894DEBF0FBECDBFDF91CF911F910F9194
+:103A9000FF90EF90DF90CF90BF900C94172356309B
+:103AA00008F018C1E9CFFF2099F08B2D8F71279670
+:103AB0000FB6F894DEBF0FBECDBFDF91CF911F913F
+:103AC0000F91FF90EF90DF90CF90BF900C94DD228C
+:103AD0008B2D8F7127960FB6F894DEBF0FBECDBF2A
+:103AE000DF91CF911F910F91FF90EF90DF90CF90DA
+:103AF000BF900C94F822F110EBCFD7CFFF2099F0B4
+:103B00008B2D8F7127960FB6F894DEBF0FBECDBFF9
+:103B1000DF91CF911F910F91FF90EF90DF90CF90A9
+:103B2000BF900C94CE2227960FB6F894DEBF0FBE3E
+:103B3000CDBFDF91CF911F910F91FF90EF90DF905C
+:103B4000CF90BF900C94C922FF20A9F0552309F40F
+:103B5000ACCF862F27960FB6F894DEBF0FBECDBF31
+:103B6000DF91CF911F910F91FF90EF90DF90CF9059
+:103B7000BF900C949D19552309F4AACF862F279640
+:103B80000FB6F894DEBF0FBECDBFDF91CF911F916E
+:103B90000F91FF90EF90DF90CF90BF900C94651A3B
+:103BA0004B2D4F70C8010E94E50227960FB6F8947E
+:103BB000DEBF0FBECDBFDF91CF911F910F91FF9060
+:103BC000EF90DF90CF90BF900C94FD21F11082C058
+:103BD0009B2D9F70492F50E04230510599F144F4DC
+:103BE0004115510569F04130510509F073C019C004
+:103BF00043305105C1F14430510509F06BC044C058
+:103C000027960FB6F894DEBF0FBECDBFDF91CF91E0
+:103C10001F910F91FF90EF90DF90CF90BF900C9489
+:103C2000702B27960FB6F894DEBF0FBECDBFDF9185
+:103C3000CF911F910F91FF90EF90DF90CF90BF90A9
+:103C40000C94872B27960FB6F894DEBF0FBECDBF1E
+:103C5000DF91CF911F910F91FF90EF90DF90CF9068
+:103C6000BF900C94A32B27960FB6F894DEBF0FBE1F
+:103C7000CDBFDF91CF911F910F91FF90EF90DF901B
+:103C8000CF90BF900C94B62B862F27960FB6F89442
+:103C9000DEBF0FBECDBFDF91CF911F910F91FF907F
+:103CA000EF90DF90CF90BF900C94DA2B4B2D4F709C
+:103CB000C80127960FB6F894DEBF0FBECDBFDF91C7
+:103CC000CF911F910F91FF90EF90DF90CF90BF9019
+:103CD0000C940E0827960FB6F894DEBF0FBECDBF2A
+:103CE000DF91CF911F910F91FF90EF90DF90CF90D8
+:103CF000BF9008950E940C240E94E1230E94282472
+:103D00000E9418290E946C2880E090E00E94801890
+:103D100080E090E00C9496180E94FC230C947A1E8C
+:103D20000E946923292F22952F7030E02C30310515
+:103D30004CF42A3031056CF422503109223031051F
+:103D400070F407C02C30310531F02F30310539F4D3
+:103D500002C081E0089593FB882780F9089580E0F0
+:103D60000895CF93DF9300D000D01F92CDB7DEB778
+:103D70000F900F900F900F900F90DF91CF910895BB
+:103D8000CF93DF9300D000D000D0CDB7DEB726961A
+:103D90000FB6F894DEBF0FBECDBFDF91CF9108956F
+:103DA0001F93CF93DF93C091530216E012C0D0E06F
+:103DB0001C9FF0011D9FF00D1124ED5DFD4F408112
+:103DC000518162817381848195810E94C01E2196F8
+:103DD000C77080915402C813EACFDF91CF911F9131
+:103DE000089540911D0250911E0260911F02709132
+:103DF000200280912102909122020C94C01E0F9308
+:103E00001F93CF93DF938091220282958F7009F0E8
+:103E100069C080911F02882309F464C0A0915302F5
+:103E2000D0915402B0911D02C0911E0280912002D7
+:103E30009091210221E030E0BF3F11F020E030E01E
+:103E4000122FBC016095709506E04AC0009721F0E2
+:103E5000CF3F29F4212F05C021E030E002C020E04F
+:103E600030E020FD3BC04A2F50E0049FF001059F49
+:103E7000F00D1124ED5DFD4F2181C2132FC0208173
+:103E8000B2132CC02281211129C02381348128172B
+:103E9000390718F0281B390B02C0260F371F283CA2
+:103EA0003105E0F4809122028F70806180932202BC
+:103EB00086E0849FF001859FF00D1124E85DFD4FA1
+:103EC00080818F70806180838DE192E00E94C41AAE
+:103ED000DF91CF911F910F910C94D01EAF5FA7700F
+:103EE000AD13B4CFDF91CF911F910F910895EF9251
+:103EF000FF920F931F93CF93DF93CDB7DEB76297F7
+:103F00000FB6F894DEBF0FBECDBF8C0185E0F8017F
+:103F1000DE011D9601900D928A95E1F7D8014C9132
+:103F200011965C91119712966C9112971396ED90E1
+:103F3000FC90149770911D02E0911E028091200266
+:103F400090912102009739F0EF3F41F421E030E0F9
+:103F50007F3F31F003C021E030E002C020E030E0DC
+:103F600020FD5CC120911F02222309F4F1C0E81654
+:103F7000F90628F09701281B390BC90104C0809568
+:103F800090958E0D9F1D883C910508F098C08091FA
+:103F90002202982F907F09F064C0E51314C07413B7
+:103FA00012C0611110C08F708061809322020E9444
+:103FB000F11E8DE192E00E94C41A80912202D80184
+:103FC00015968C9343C1EF2839F05F3F41F481E0AF
+:103FD00090E04F3F31F003C081E090E002C080E00C
+:103FE00090E080FD03C081E0862702C080E090E081
+:103FF00080FF2EC0809153022091540236E013C0FE
+:1040000090E0389FF001399FF00D1124ED5DFD4FD8
+:104010007181571306C07081471303C07281671303
+:1040200017C0019687708213EBCF12C19F7059F0B1
+:10403000882309F40BC107C09F7029F0F80195810E
+:10404000907F09F403C1805E883008F4FFC0D2C0BD
+:10405000662309F4FBC080912202816080932202D2
+:10406000F5C0E51308C0741306C0611104C0D8017F
+:1040700015968C939DC04D875E878D859E856A8B36
+:104080000E94901E6A89882309F4B4C0662309F44B
+:10409000B1C020912202822F82958F7090E002970A
+:1040A0000CF4C6C080911D0290911E0298878F83E8
+:1040B0001986FB86EA862C87CE01079646C080913A
+:1040C0002202982F907F59F47E2DF98AE88A8989F7
+:1040D0000E94B11E8DE192E00E94C41A95C0E513C2
+:1040E00011C074130FC061110DC0F8018583C801A0
+:1040F0000E94C41AEDE1F2E086E0DF011D928A958C
+:10410000E9F7A2C04D875E878D859E856A8B0E94E8
+:10411000901E6A89882309F46DC0662309F46AC079
+:1041200020912202822F82958F7090E002970CF4EA
+:104130007FC080911D0290911E029A8389831B8209
+:10414000FD82EC822E83CE0101960E94C41A70C0BB
+:10415000E816F90628F09701281B390BC90104C09D
+:10416000809590958E0D9F1D883C910508F046C066
+:10417000662309F43FC0E51330C074132EC02091AC
+:10418000220220FD21C0322F32953F70832F90E014
+:104190000097D1F0D80115962C9315970F9741F001
+:1041A000832F8F5F8295807F2F70282B15962C93FD
+:1041B000C8010E94C41A86E0F801ADE1B2E00190A6
+:1041C0000D928A95E1F73EC086E0F801ADE1B2E0DC
+:1041D00001900D928A95E1F737C04D875E878D85F6
+:1041E0009E850E94901E811123C0809122028160D1
+:1041F00080932202C8010E94C41A26C07E2DF98A2B
+:10420000E88A89890E94B11EEDE1F2E086E0DF01D3
+:104210001D928A95E9F70E94F11E18C0662351F39A
+:104220004D875E878D859E850E94901E882311F3A1
+:1042300086E0F801ADE1B2E001900D928A95E1F7D8
+:104240000E94FF1E0E94F11E81E014C080E012C097
+:104250004D875E878D859E850E946923292F229533
+:104260002F7030E0223031050CF4E0CE24303105DF
+:104270000CF6E2CE62960FB6F894DEBF0FBECDBF4D
+:10428000DF91CF911F910F91FF90EF9008951F93B1
+:10429000CF93DF93CDB7DEB72C970FB6F894DEBF80
+:1042A0000FBECDBF4F83588769877A878B879C87DE
+:1042B000CE0107960E94771F8823D9F02F81388579
+:1042C0008A859B85892B39F03F3F19F080E090E08B
+:1042D00004C02F3FD9F781E090E0892B09F06DC031
+:1042E0004F81588569857A858B859C850E94C01E83
+:1042F00064C086E0FE013796DE01119601900D92B2
+:104300008A95E1F7FF81E8854A855B85411551056E
+:1043100039F0EF3F41F481E090E0FF3F31F003C01E
+:1043200081E090E002C080E090E080FD46C02091F6
+:10433000540230E0C90101968770992760915302B9
+:1043400070E08617970709F440C0F983EA835D831C
+:104350004C8396E0929FD001939FB00D1124AD5DE8
+:10436000BD4FFE01319601900D929A95E1F7809331
+:1043700054020E94D01E21C0189FC00111248D5DDF
+:104380009D4F0E94771F882371F1E09153021E9F79
+:10439000F0011124ED5DFD4F4081518162817381F7
+:1043A000848195810E94C01E8091530290E0019605
+:1043B000877099278093530201C016E080915302C1
+:1043C000909154028913D8CF0EC00E948C1E109277
+:1043D000540210925302EDE1F2E086E0DF011D92FB
+:1043E0008A95E9F7EACF2C960FB6F894DEBF0FBE98
+:1043F000CDBFDF91CF911F910895DF92EF92FF9291
+:104400000F931F93CF93DF93EC01009709F46CC0D7
+:10441000D12CEE24E394F12C8E010F5F1F4FFE018F
+:104420008491843748F4843008F04AC0813071F0B8
+:10443000823009F059C01EC0853709F43DC070F1C3
+:10444000982F9458903708F04FC03DC02296F8013D
+:104450008491982F905E983050F48770FE2D01C0A3
+:10446000FF0F8A95EAF78F2F0E94FF2330C00E942A
+:104470009D192DC02296F8018491982F905E983056
+:1044800050F48770FE2D01C0FF0F8A95EAF78F2F39
+:104490000E9405241CC00E94651A19C02296F801CA
+:1044A000049107C08FE99FE00197F1F700C0000079
+:1044B00001500111F7CF0BC02296F801D49007C02C
+:1044C0000E949D1903C08F770E94651AE8018D2D07
+:1044D00007C08150EFE9FFE03197F1F700C000001D
+:1044E000882309F499CFF5CFDF91CF911F910F91D8
+:1044F000FF90EF90DF9008956093590270935A02F5
+:1045000080935B0290935C020C947A1E6093550238
+:104510007093560280935702909358020C947A1E1F
+:1045200008950C947C220F931F93009159021091CF
+:104530005A0220915B0230915C02602B712B822B1E
+:10454000932B1F910F910C947C220F931F9300913A
+:10455000590210915A0220915B0230915C02602353
+:104560007123822393231F910F910C947C220F932C
+:104570001F930091590210915A0220915B023091D1
+:104580005C0260277127822793271F910F910C945B
+:104590007C2260E070E0CB010C94862241E050E088
+:1045A00060E070E004C0440F551F661F771F8A95B6
+:1045B000D2F7CB01BA010C94862241E050E060E0D2
+:1045C00070E004C0440F551F661F771F8A95D2F70D
+:1045D0008091550290915602A0915702B0915802D5
+:1045E000482B592B6A2B7B2BCB01BA010C948622CA
+:1045F00041E050E060E070E004C0440F551F661FCA
+:10460000771F8A95D2F74095509560957095809167
+:10461000550290915602A0915702B091580248233A
+:1046200059236A237B23CB01BA010C94862241E0F3
+:1046300050E060E070E004C0440F551F661F771F14
+:104640008A95D2F78091550290915602A091570217
+:10465000B0915802482759276A277B27CB01BA0116
+:104660000C9486220F931F930091550210915602CD
+:104670002091570230915802602B712B822B932B83
+:104680001F910F910C9486220F931F930091550256
+:1046900010915602209157023091580260237123E5
+:1046A000822393231F910F910C9486220F931F93C3
+:1046B00000915502109156022091570230915802F4
+:1046C00060277127822793271F910F910C948622D0
+:1046D0000895CF92DF92EF92FF920F931F93CF93A3
+:1046E000DF93EC01C0905902D0905A02E0905B0237
+:1046F000F0905C028091550290915602A091570271
+:10470000B0915802C82AD92AEA2AFB2A0FE110E000
+:10471000B701A601002E04C0769567955795479579
+:104720000A94D2F740FF08C0BE01802F0E94E00328
+:104730008130910509F007C00150110948F7BE0109
+:1047400080E00E94E003DF91CF911F910F91FF90D5
+:10475000EF90DF90CF90089540911B0150911C0184
+:1047600020E030E09FEFFA01E20FF31F628168174B
+:10477000A1F09F3F19F4611101C0922F2F5F3F4FAD
+:104780002630310581F707C0FA01E90FF11D97FDC9
+:10479000FA95828308959F3FB9F7089540911B01D0
+:1047A00050911C0120E030E0FA01E20FF31F9281EA
+:1047B000981301C012822F5F3F4F26303105A1F7B9
+:1047C000089581E090E0E0911B01F0911C01E80F59
+:1047D000F91F1082019688309105A9F708959091EC
+:1047E0005D02982B90935D020895809590915D02F3
+:1047F000982390935D02089510925D020895909120
+:104800005E02982B90935E020895809590915E02CF
+:10481000982390935E02089510925E02089580930B
+:104820005F02089510925F02089540911B0150911C
+:104830001C0120E030E080E0FA01E20FF31F9181DB
+:1048400091118F5F2F5F3F4F27303105A9F70895F2
+:10485000E0911B01F0911C0180915D028083E09149
+:104860001B01F0911C01808190915E02892B808355
+:1048700090915F02992361F0E0911B01F0911C017E
+:104880008081892B80830E94152481110E9412242B
+:1048900080911B0190911C010C946A1880916E0309
+:1048A000843009F11092690220E488E190E00FB6AB
+:1048B000F894A895809360000FBE2093600083B7A2
+:1048C000817F846083BF83B7816083BF789488953C
+:1048D00083B78E7F83BF88E10FB6F8948093600022
+:1048E000109260000FBE0895CF930E94E3020E94D1
+:1048F0007E060E94E402C0E08C2F0E94C407892B30
+:1049000029F4CF5FC430C1F780E001C081E0CF91CE
+:1049100008950E948C1E0C945F2B1F920F920FB66D
+:104920000F9211248F939F93AF93BF93809169024D
+:10493000811113C080916A0290916B02A0916C0268
+:10494000B0916D024196A11DB11D80936A029093B2
+:104950006B02A0936C02B0936D02BF91AF919F91D7
+:104960008F910F900FBE0F901F90189582E084BD1D
+:1049700093E095BD9AEF97BD80936E0008958FB731
+:10498000F89440916A0250916B0260916C027091B0
+:104990006D028FBFCA010895CF92DF92EF92FF920E
+:1049A0000F931F932FB7F89440916A0250916B02B6
+:1049B00060916C0270916D022FBF6A017B01EE2441
+:1049C000FF248C0120E030E0C016D106E206F30699
+:1049D00020F09A01281B390B05C09C0120953095C9
+:1049E000240F351FC9011F910F91FF90EF90DF90A9
+:1049F000CF9008951F920F920FB60F9211248F93AC
+:104A00009F93AF93BF9380916A0290916B02A091A4
+:104A10006C02B0916D020196A11DB11D80936A02D6
+:104A200090936B02A0936C02B0936D02BF91AF9113
+:104A30009F918F910F900FBE0F901F9018950E941D
+:104A4000A111F8942FEF87EA91E621508040904021
+:104A5000E1F700C0000087E090EBDC018093780371
+:104A600090937903A0937A03B0937B032CE088E1C1
+:104A700090E00FB6F894A895809360000FBE209345
+:104A80006000FFCFCF92DF92EF92FF920F931F93C0
+:104A9000CF93DF93C82ED12C01E010E08D2D0E9422
+:104AA000C4077C01C0E0D0E098010C2E02C0220FA8
+:104AB000331F0A94E2F72E213F21232B29F421965C
+:104AC000CC30D10589F708C06C2F7D2D80E00E9485
+:104AD000BB03C812F4CF06C0D39484E0D812DECF53
+:104AE00080E001C081E0DF91CF911F910F91FF9095
+:104AF000EF90DF90CF900895CF93C82F8CE20E9463
+:104B00004225882321F08C2FCF910C94422580E000
+:104B1000CF910895CF930E94CD26811102C00E94AB
+:104B2000AE26C5E608C00E947E068FE39CE9019789
+:104B3000F1F700C00000C150B1F789E20E947C2566
+:104B400081110AC18AE20E947C2581110E94AE2651
+:104B500085E00E947C2581110E941F250E94D82695
+:104B60008093680287E00E947C25882399F18BE17D
+:104B70000E947C25882351F09091680291FB882740
+:104B800080F921E0822780FB91F922C08EE00E940B
+:104B90007C25882351F09091680292FB882780F948
+:104BA00021E0822780FB92F913C080E10E947C25DE
+:104BB00090916802882341F093FB882780F921E0D7
+:104BC000822780FB93F904C0892F809580FB90F9A0
+:104BD00090936802809168020E94DC260E94EA2677
+:104BE00080937B0280EE0E947C25882341F0809197
+:104BF0007B02982F909590FB80F980937B0289E34C
+:104C00000E947C25882359F090917B0291FB882794
+:104C100080F921E0822780FB91F990937B0282EE5C
+:104C20000E947C25882359F090917B0292FB882773
+:104C300080F921E0822780FB92F990937B0286EE37
+:104C40000E947C25882359F090917B0293FB882752
+:104C500080F921E0822780FB93F990937B0283EE19
+:104C60000E947C25882359F090917B0294FB882731
+:104C700080F921E0822780FB94F990937B0285E301
+:104C80000E947C25882359F090917B0295FB882710
+:104C900080F921E0822780FB95F990937B0281E3E4
+:104CA0000E947C25882359F090917B0296FB8827EF
+:104CB00080F921E0822780FB96F990937B0281E1C5
+:104CC0000E947C25882359F090917B0297FB8827CE
+:104CD00080F921E0822780FB97F990937B028091F5
+:104CE0007B020E94EE2687E20E947C25C82F8EE17F
+:104CF0000E947C258111C2608FE10E947C25811178
+:104D0000C46080E20E947C258111C86081E20E941B
+:104D10007C258111C06182E20E947C258111C062E4
+:104D200083E20E947C258111C06484E20E947C257C
+:104D3000882311F0C06802C0CC2329F08C2F0E9478
+:104D4000E5266C2F03C00E94E126682F70E080E00A
+:104D500090E0CF910C949122CF9108956DEE7EEF6B
+:104D600080E090E00E94BA2F60E082E090E00E9434
+:104D7000AC2F60E083E090E00E94AC2F60E084E024
+:104D800090E00E94AC2F60E085E090E00E94AC2FA4
+:104D900060E086E090E00C94AC2F80E090E00E9410
+:104DA000A62F21E08D3E9E4F09F020E0822F08952E
+:104DB00082E090E00C949E2F682F82E090E00C94AB
+:104DC000AC2F83E090E00C949E2F682F83E090E05E
+:104DD0000C94AC2F84E090E00C949E2F682F84E01C
+:104DE00090E00C94AC2F86E090E00C949E2F682FFE
+:104DF00086E090E00C94AC2F8091760280FF0BC08F
+:104E00006091200185E0689FB00111247595679538
+:104E1000759567952AC081FF09C06091200185E0E2
+:104E2000689FB0011124759567951FC082FF07C068
+:104E30006091200185E0689FB001112416C0409167
+:104E400070024423C9F060911F01461788F7209132
+:104E5000200185E0289F90011124429FC001439FBB
+:104E6000900D112470E00E948A2F6038710540F483
+:104E70006115710539F002C065E070E0862F089574
+:104E80008FE7089581E008958091760280FF08C041
+:104E900060911E0170E0759567957595679521C0C5
+:104EA00081FF06C060911E0170E07595679519C07D
+:104EB00082FF04C060911E0170E010C080917002FA
+:104EC0008823C1F060911D018617A0F790911E0103
+:104ED000989FC001112470E00E948A2F60387105EC
+:104EE00028F46115710521F0862F08958FE7089544
+:104EF00081E0089561E070E0F4CF803F21F40E94EA
+:104F0000FC26819504C0813F29F40E94FC268093F1
+:104F100073020895823F21F40E94FC26819504C00B
+:104F2000833F29F40E94FC26809372020895893FF2
+:104F300019F40E94442705C08A3F31F40E94442797
+:104F400081958093740208958B3F21F40E94442739
+:104F5000819504C08C3F29F40E94442780937502F8
+:104F60000895843F21F480917102816017C0853FCC
+:104F700021F480917102826011C0863F21F48091FA
+:104F8000710284600BC0873F21F4809171028860B8
+:104F900005C0883F31F48091710280618093710275
+:104FA00008958D3F21F48091760281600BC08E3F81
+:104FB00021F480917602826005C08F3F29F48091B0
+:104FC00076028460809376020895803F29F4809170
+:104FD000730287FF6EC007C0813F41F48091730266
+:104FE00018160CF066C01092730263C090917202A2
+:104FF000823F19F497FF5DC005C0833F31F4191655
+:105000000CF057C01092720254C0893F31F4809165
+:10501000740218160CF04DC006C08A3F39F4809116
+:10502000740287FF46C01092740243C08B3F29F47C
+:105030008091750287FF3DC006C08C3F39F4809196
+:1050400075021816B4F51092750233C0843F21F42E
+:10505000809171028E7F05C0853F31F4809171028D
+:105060008D7F8093710225C0863F21F4809171026B
+:105070008B7FF7CF873F21F480917102877FF1CF3B
+:10508000883F21F4809171028F7EEBCF8D3F21F418
+:10509000809176028E7F0BC08E3F21F48091760244
+:1050A0008D7F05C08F3F29F4809176028B7F80939E
+:1050B00076028091720281110EC08091730281117B
+:1050C0000AC080917402811106C08091750281111D
+:1050D00002C010927002089581E792E00E94751854
+:1050E0000E94BF2490936F0280936E020895CF9325
+:1050F00080916E0290916F020E94CC2440917002C8
+:10510000442321F02091210130E006C020912201AA
+:105110005AE0259F900111248217930708F486C056
+:105120008091720281110DC090917302911109C09A
+:1051300090917402911105C090917502992309F420
+:1051400075C04F3F19F04F5F40937002181624F45A
+:105150000E94FC26809372028091720287FF05C034
+:105160000E94FC268195809372028091730218162A
+:1051700024F40E94FC26809373028091730287FFBF
+:1051800005C00E94FC268195809373026091720293
+:10519000662339F1C0917302CC2319F1772767FD9B
+:1051A0007095872F972F0E94FA2C23E333E343E374
+:1051B0005FE30E94AE2D0E94C72C609372026C2F99
+:1051C000772767FD7095872F972F0E94FA2C23E38E
+:1051D00033E343E35FE30E94AE2D0E94C72C60934C
+:1051E000730280917402181624F40E94442780935D
+:1051F00074028091740287FF05C00E944427819544
+:105200008093740280917502181624F40E9444273A
+:10521000809375028091750287FF05C00E94442724
+:10522000819580937502CF910C946C28CF9108954D
+:10523000E1E7F2E085E0DF011D928A95E9F710923F
+:105240007002109276020895833089F130F4813033
+:1052500061F0823009F06EC019C0853009F449C090
+:10526000B8F1863009F066C055C020912201862F22
+:1052700090E0820F911D8F3F910520F4620F6093A3
+:10528000220108958FEF809322010895209121013A
+:10529000862F90E0820F911D8F3F910520F4620FC1
+:1052A0006093210108958FEF80932101089520914B
+:1052B0002001862F90E0820F911D8F3F910520F4F1
+:1052C000620F6093200108958FEF8093200108956D
+:1052D00020911F01862F90E0820F911D8F3F910535
+:1052E00020F4620F60931F0108958FEF80931F01D8
+:1052F000089520911E01862F90E0820F911D8F3F0F
+:10530000910520F4620F60931E0108958FEF809342
+:105310001E01089520911D01862F90E0820F911D9E
+:105320008F3F910520F4620F60931D0108958FEF68
+:1053300080931D010895833021F130F4813059F0BC
+:10534000823009F049C012C0853089F128F18630D9
+:1053500009F042C037C080912201681720F4861BF3
+:1053600080932201089510922201089580912101D5
+:10537000681720F4861B8093210108951092210163
+:10538000089580912001681720F4861B80932001E6
+:10539000089510922001089580911F01681720F44C
+:1053A000861B80931F01089510921F01089580911C
+:1053B0001E01681720F4861B80931E010895109229
+:1053C0001E01089580911D01681720F4861B8093AB
+:1053D0001D01089510921D01089541E050E060E024
+:1053E00070E004C0440F551F661F771F8A95D2F7DF
+:1053F000CB01BA010E9491220C948C1E873208F5D1
+:105400008E3108F0B9C08E3009F47EC060F4873068
+:1054100009F465C018F4863059F549C0883051F157
+:105420008B3031F5AEC0883130F4863108F0A9C038
+:105430008031F1F473C0893109F4A3C08B31C1F418
+:1054400059C08933F1F068F4893209F493C018F433
+:10545000873271F48FC0853309F48CC0883341F4EE
+:1054600090C0863409F46BC008F488C0883449F1D0
+:1054700080E008950E94D8260E94EA260E94F32622
+:1054800080C00E945918892B59F00E945918909396
+:105490007902809378020E948C1E80E090E004C024
+:1054A00080917802909179020E9454186AC080918C
+:1054B0006802817F8E7F8093680281E0809377020B
+:1054C00008950E948C1E2FEF83ED90E321508040C1
+:1054D0009040E1F700C000000E941F2552C080915B
+:1054E000680280FF03C0817F8E7F01C0816080934E
+:1054F000680247C09091680291FB882780F921E0FB
+:10550000822780FB91F913C09091680292FB882753
+:1055100080F921E0822780FB92F909C0909168020E
+:1055200093FB882780F921E0822780FB93F99093F1
+:105530006802882331F191609093680222C081E86B
+:1055400090E00E9480182FEF81EE94E0215080407F
+:105550009040E1F700C0000080E090E00E948018D9
+:105560002FEF89E698E1215080409040E1F700C09C
+:10557000000007C080E003C08D5101C089530E9424
+:10558000ED2981E0089580E0089580E00895CF93AB
+:10559000C82F80917702813071F020F0823009F0BD
+:1055A00083C037C0A0911B01B0911C018C91823245
+:1055B00009F07CC007C0A0911B01B0911C018C9127
+:1055C000823249F48C2F0E94C32A81111EC08C2F75
+:1055D0000E94FE291CC08C2F0E94C52A811115C073
+:1055E000C43169F030F4CB3081F0C03109F062C0D1
+:1055F00009C0C93221F0C83309F05CC006C010925E
+:10560000770258C082E08093770281E090E0817059
+:1056100054C0C932C1F060F4C431A9F020F4C730DD
+:1056200009F046C02EC0CE51CA3008F041C011C0AA
+:10563000CE3409F118F4CB34D9F517C0C13599F03F
+:10564000C235B1F50EC010927A0281E080937702E4
+:1056500034C0EC2FF0E0E455FE4F808180937A0255
+:1056600027C061E003C061E007C06AE080917A0270
+:105670000E9424291DC06AE080917A020E949B2921
+:1056800017C08EE18093220182E3809321018AE09A
+:105690008093200184E180931F0188E080931E01A4
+:1056A00088E280931D0104C01092770280E005C05B
+:1056B00081E003C080E090E0AACFCF9108950E94DE
+:1056C000CD26811102C00E94AE260E94F32680934F
+:1056D000770380FF02C0869501C080E00C94DF074D
+:1056E00080917703982F9695292F30E0233031054C
+:1056F0004CF49F5F990F8170892B816080937703B1
+:105700000E94F7268091770386950C94DF0780919D
+:105710007703982F969591F09158990F8170892B66
+:10572000809377038E7F91E009F490E08091770376
+:1057300090FB80F9809377030E94F726809177038E
+:1057400086950C94DF0780917703982F909590FBB6
+:1057500080F9809377030E94F7268091770380FF7A
+:1057600002C0869501C080E00C94DF07309177037A
+:10577000232F26952F5F2F77822F90E0317004978B
+:105780002CF4220F232B2093770302C0309377034E
+:1057900080917703282F2E7F91E009F490E090FB11
+:1057A00080F9809377030E94F7268091770386958E
+:1057B0000C94DF0720917703922F96959827990FE5
+:1057C000822F8170892B809377038E7F91E009F47B
+:1057D00090E08091770390FB80F9809377030E949B
+:1057E000F7268091770386950C94DF075058BB27E6
+:1057F000AA270ED075C166D130F06BD120F031F4FC
+:105800009F3F11F41EF45BC10EF4E095E7FB51C11C
+:10581000E92F77D180F3BA176207730784079507DA
+:1058200018F071F49EF58FC10EF4E0950B2EBA2F8F
+:10583000A02D0B01B90190010C01CA01A001112496
+:10584000FF27591B99F0593F50F4503E68F11A1642
+:10585000F040A22F232F342F4427585FF3CF4695D3
+:1058600037952795A795F0405395C9F77EF41F16F5
+:10587000BA0B620B730B840BBAF09150A1F0FF0FBF
+:10588000BB1F661F771F881FC2F70EC0BA0F621FAB
+:10589000731F841F48F4879577956795B795F7959B
+:1058A0009E3F08F0B3CF9395880F08F09927EE0F2D
+:1058B000979587950895D9D008F481E008950CD084
+:1058C0000FC107D140F0FED030F021F45F3F19F056
+:1058D000F0C0511139C1F3C014D198F39923C9F321
+:1058E0005523B1F3951B550BBB27AA2762177307E6
+:1058F000840738F09F5F5F4F220F331F441FAA1F9A
+:10590000A9F333D00E2E3AF0E0E830D09150504059
+:10591000E695001CCAF729D0FE2F27D0660F771F07
+:10592000881FBB1F261737074807AB07B0E809F0E9
+:10593000BB0B802DBF01FF2793585F4F2AF09E3F7E
+:10594000510568F0B6C000C15F3FECF3983EDCF350
+:10595000869577956795B795F7959F5FC9F7880FF7
+:10596000911D9695879597F90895E1E0660F771F49
+:10597000881FBB1F621773078407BA0720F0621BDA
+:10598000730B840BBA0BEE1F88F7E095089504D0D3
+:105990006894B111D9C00895BCD088F09F5790F099
+:1059A000B92F9927B751A0F0D1F0660F771F881F44
+:1059B000991F1AF0BA95C9F712C0B13081F0C3D05F
+:1059C000B1E00895C0C0672F782F8827B85F39F0FD
+:1059D000B93FCCF3869577956795B395D9F73EF4A3
+:1059E00090958095709561957F4F8F4F9F4F08954B
+:1059F000E89409C097FB3EF4909580957095619569
+:105A00007F4F8F4F9F4F9923A9F0F92F96E9BB271E
+:105A10009395F695879577956795B795F111F8CF9A
+:105A2000FAF4BB0F11F460FF1BC06F5F7F4F8F4F05
+:105A30009F4F16C0882311F096E911C0772321F0FB
+:105A40009EE8872F762F05C0662371F096E8862F93
+:105A500070E060E02AF09A95660F771F881FDAF7EA
+:105A6000880F9695879597F90895990F0008550F17
+:105A7000AA0BE0E8FEEF16161706E807F907C0F0D4
+:105A800012161306E407F50798F0621B730B840BDC
+:105A9000950B39F40A2661F0232B242B252B21F4B6
+:105AA00008950A2609F4A140A6958FEF811D811D56
+:105AB000089597F99F6780E870E060E008959FEF90
+:105AC00080EC089500240A94161617061806090695
+:105AD000089500240A941216130614060506089564
+:105AE000092E0394000C11F4882352F0BB0F40F4EC
+:105AF000BF2B11F460FF04C06F5F7F4F8F4F9F4F2C
+:105B0000089557FD9058440F551F59F05F3F71F0AD
+:105B10004795880F97FB991F61F09F3F79F0879514
+:105B20000895121613061406551FF2CF4695F1DF9D
+:105B300008C0161617061806991FF1CF869571052D
+:105B4000610508940895E894BB2766277727CB0161
+:105B500097F908958ADF08F48FEF08950BD0C0CF2E
+:105B6000B1DF28F0B6DF18F0952309F0A2CFA7CF58
+:105B70001124EACFC6DFA0F3959FD1F3950F50E033
+:105B8000551F629FF001729FBB27F00DB11D639FEF
+:105B9000AA27F00DB11DAA1F649F6627B00DA11D95
+:105BA000661F829F2227B00DA11D621F739FB00D3B
+:105BB000A11D621F839FA00D611D221F749F3327AB
+:105BC000A00D611D231F849F600D211D822F762F44
+:105BD0006A2F11249F5750408AF0E1F088234AF041
+:105BE000EE0FFF1FBB1F661F771F881F915050408D
+:105BF000A9F79E3F510570F05CCFA6CF5F3FECF355
+:105C0000983EDCF3869577956795B795F795E79578
+:105C10009F5FC1F7FE2B880F911D9695879597F989
+:105C20000895FA01EE0FFF1F30962105310599F115
+:105C30006115710561F48038BFE39B0749F16894F1
+:105C40009038810561F08038BFEF9B0741F09923C0
+:105C500042F5FF3FE1053105210511F1E894089473
+:105C6000E795D901AA2329F4AB2FBE2FF85FD0F313
+:105C700010C0FF5F70F4A695E0F7F73950F019F007
+:105C8000FF3A38F49F779F930CD00F9007FC905801
+:105C900008953EF014CF60E070E080E89FE308953F
+:105CA0004FE79F775F934F933F932F939ED02F9112
+:105CB0003F914F915F9152DF05C019F40EF0F9CE7C
+:105CC00042CFFDCE26DFC8F39638C0F707F80F9213
+:105CD000E8942BE33AEA48EB5FE74EDF0F920F922E
+:105CE0000F924DB75EB70F92C0D0ECEAF0E016D03D
+:105CF0004F915F91EF91FF91E595EE1FFF1F49F0E6
+:105D0000FE57E0684427EE0F441FFA95E1F74195EE
+:105D1000550B32D00F9007FE26C00895DF93CF9326
+:105D20001F930F93FF92EF92DF927B018C01689497
+:105D300005C0DA2EEF011EDFFE01E894A591259142
+:105D4000359145915591AEF3EF0162DDFE0197016A
+:105D5000A801DA9479F7DF90EF90FF900F911F91EF
+:105D6000CF91DF9108959B01AC0160E070E080E885
+:105D70009FE3A5CD9ECEACC0CCDEE8F39923D9F34A
+:105D8000940F511DBBF39150504094F059F088236B
+:105D900032F0660F771F881F91505040C1F79E3F29
+:105DA000510544F7880F911D9695879597F90895A9
+:105DB0005F3FACF0983E9CF0BB2786957795679542
+:105DC000B79508F4B1609395C1F7BB0F58F711F47C
+:105DD00060FFE8CF6F5F7F4F8F4F9F4FE3CFB4CE11
+:105DE0000EF076C06CCE689464CE93DEC8F399232F
+:105DF000D1F3C6F3DF93CF931F930F93FF92C92F75
+:105E0000DD2788232AF02197660F771F881FDAF78E
+:105E100020E030E040E85FEB9FE3883920F0803EEF
+:105E200030F021968F77E3DCE4EDF0E003C0DFDCB7
+:105E3000E1E0F1E073DF8B01BE01EC01FB2E6F5757
+:105E400071097595771F880B990BD4DD28E132E72E
+:105E500041E35FE38FDEAF2D9801AE01FF900F911C
+:105E60001F91CF91DF91D4DC3BCEFA01DC01AA0F68
+:105E7000BB1F9B01AC01BF5728F4222733274427BF
+:105E800050781FC0B75188F4AB2F00244695379542
+:105E90002795011CA395D2F3002069F0220F331F30
+:105EA000441FB395DAF30DD0A1CC61307105A0E8A1
+:105EB0008A07B94630F49B01AC016627772788270B
+:105EC0009078309621F02083318342835383089564
+:105ED0009F3F31F0915020F4879577956795B7955E
+:105EE000880F911D9695879597F90895AA1BBB1B5E
+:105EF00051E107C0AA1FBB1FA617B70710F0A61BCA
+:105F0000B70B881F991F5A95A9F780959095BC01EA
+:105F1000CD01089597FB072E16F4009407D077FD66
+:105F200009D00E94762F07FC05D03EF4909581950C
+:105F30009F4F0895709561957F4F0895F999FECF11
+:105F400092BD81BDF89A992780B50895A8E1B0E087
+:105F500042E050E00C94C12F262FF999FECF1FBAD2
+:105F600092BD81BD20BD0FB6F894FA9AF99A0FBE82
+:105F7000019608950E94AC2F272F0C94AD2FDC01C1
+:105F8000CB01FC01F999FECF06C0F2BDE1BDF89A44
+:105F9000319600B40D9241505040B8F70895F894EE
+:025FA000FFCF31
+:105FA2000507000C058540000001064000000100C5
+:105FB200D80B680C440C0F0CDB0B01600228081490
+:105FC2000A321E40004500250026006100600020C4
+:105FD2000037006400650066006700440046002444
+:105FE2000047000000020004000500070009000B42
+:105FF200000C000E0010001100130015001700180D
+:10600200001A001C001D001F00210023002400268E
+:1060120000280029002B002D002F00300032003410
+:10602200003500370039003B008803A103BA03D3CF
+:1060320003FB04AE04780458043F4D3620020302E9
+:10604200000001000101010101000101010203043C
+:0660520005060708090025
+:00000001FF
diff --git a/keyboard/planck/planck_with_bootloader.hex b/keyboard/planck/planck_with_bootloader.hex
new file mode 100755
index 0000000000..c61dfb743a
--- /dev/null
+++ b/keyboard/planck/planck_with_bootloader.hex
@@ -0,0 +1,1796 @@
+:020000020000FC
+:047000000C948D3E21
+:047028000C94B73DD0
+:10702F0012010002FF010020EB03F42F0000010208
+:10703F00030109021200010100803209040000005F
+:10704F00000000000C03410054004D0045004C00AF
+:10705F001603410054006D00330032005500340018
+:10706F004400460055000C0331002E0030002E0066
+:10707F0030000403090416010C0100000C0000018C
+:02708F006C7F14
+:1070920012BD01BDF89A00B5089501E00895F9996D
+:1070A200FECF12BD01BD20BDFA9AF99AF6CFF99929
+:1070B200FECF0C944938F80104910895F8013491F7
+:1070C20031962491890108950091610000930C0189
+:1070D20000E80093610001E00093610005BF02E057
+:1070E20005BF0C9486380091D70001600093D70049
+:1070F200A89507EF04BF0091600000610093600053
+:1071020000E00093600001E008950E94AA3D0E9401
+:10711200B53DFDCF0CD00F7708D0006806D00061D6
+:1071220004D0016028D0789408950093D80000918B
+:10713200D8000895FCDF00621ED04CD009B500FFD4
+:10714200FDCFF5DF0F7D17D00091E0000E7F009399
+:10715200E0000091E000077F0093E0000091E20070
+:1071620001600093E2000091E20008600093E200F7
+:1071720078940C94743B0093D800089500910D010B
+:10718200002359F40091D90000FF07C0D0DF006846
+:10719200F2DF01E000930D01CDDFE0E2F2E00081D9
+:1071A200018100FF0DC0008111811E7F11830083C8
+:1071B20001E00093EA0000E00093EA0000931E025F
+:1071C20000E00093E9000091E80003FF02C00E9482
+:1071D200F23B0895A89539D000E40093600000E0E6
+:1071E200009381000093800010E0009385000093DB
+:1071F200840001E006BB00918100036000938100DE
+:107202000091600007FFFCCF00E80093600010933C
+:107212008100A89507EF04BF18D010936000209159
+:1072220084003091850010938100109380001093A8
+:1072320085001093840001E006BB2D3D354010F01F
+:1072420002E101C002E009BD089500916000006101
+:107252000093600008950E94AD3E239741D100E063
+:1072620000930901B5D104811581012B51F437D165
+:1072720000910701002309F4B9C000E0009307015F
+:10728200B5C058D102FFFDCF37D1068335D1009367
+:107292000F0132D1009310012FD1009311012CD193
+:1072A2000093120129D10093130102852091130149
+:1072B20030911201409111015091100116811A95DD
+:1072C20041F01250A9F01A9599F11A9509F473C078
+:1072D2008BC010910F01113011F411E001C010E0C8
+:1072E200138799D00C3F11F414D17FC077D17DC0A0
+:1072F20092D010910F01112329F01A9549F01A9595
+:10730200A9F073C010E013870C3F09F06EC0ECCFF8
+:1073120056D103C04CD109F468C00D911C9144D1DF
+:107322000F3FC1F305E0009309015FC011E0EBCF0D
+:10733200D2D029F00250E1F10A9541F056C0FDD0B9
+:107342000E94A33F0FEF00930A014FC0552319F08B
+:107352005A9579F04AC04ED00DEF04BF74D0EAD0EE
+:1073620003FFFDCF67D051D04AD008E00093600000
+:10737200FFCF40D068D0DED003FFFDCF5BD03FD03F
+:1073820044D00FEF1FE004C009811A810150104060
+:1073920009831A8309811A81012BB1F700E800934E
+:1073A200610000910C01009361000C940000FFCF7A
+:1073B20001E003871AC08FD019F00A9539F015C081
+:1073C200535098F4BAD002E000870FC0505339F0FE
+:1073D2005A9541F05F52B1F35A95A1F306C002E00B
+:1073E2000883F0CF01E0FCCFA8D079D02396E4E067
+:1073F2000C94BA3E01E005BF00E005BF089500917C
+:10740200D8000F770093D800089509B50D7F09BD04
+:1074120000E009BD08955183408333832283109194
+:10742200E8001B7F1093E8001091E8001F7710938B
+:10743200E80008955DD053D0F8940091E000016017
+:107442000093E000089579D04AC0219749D0009175
+:107452000601035019F00250B9F00BC03CD021F0E4
+:107462000A9559F00A9529F400910A010C3F19F482
+:1074720050D02196089567D0FCCF0091010100936E
+:10748200F100009100010AC01091100124D019F0FE
+:107492000A9549F0EECF135018F400E00093F10082
+:1074A2001ED044D0E6CF105339F01A9539F01F524E
+:1074B20041F01A9541F0F4CF08E5F0CF00E006D094
+:1074C200EDCF02E0FCCF04E001D0E8CF10E020E0F5
+:1074D20030E00C94113F00910F010023089521C068
+:1074E2000BD008D007D00093040106D00093050109
+:1074F20021D00BC000D008830091F10008950091C3
+:10750200EB0000620093EB0015D0077F0093E800C8
+:107512000895F5DF02E00093080103E000930901FA
+:10752200089559D007D000FFFDCF089503D002FF80
+:10753200FDCF03C00091E8000895FCDF0B7FE6DF7A
+:10754200F9DF0F77E3CF0E94AC3E42D038D006C0BD
+:107552002BD00093F1002BD059F43DD0082F092BEA
+:10756200A9F0E8DF02FD12C0E5DF00FFFDCF4424F1
+:10757200042D4394003289F300910B0100230D91F5
+:107582001C9131F311970E945838E3CFD3DF00FFEB
+:10759200FDCF21D0CFDF00FFFDCFCCDF02FFFDCF3B
+:1075A200CCDFE5E00C94B93E11970C945C380D9158
+:1075B2001C910F5F1F4F1C930E93019708958281B8
+:1075C200938100811181801B910B0196DF01089547
+:1075D200E0E0F1E00895AEDF0E7F98CF0E94A93E71
+:1075E200F7DF80819181A081B181AF710481158122
+:1075F20000521040048315830AC000910B0100233E
+:1076020031F4A301920103E911E00E943B3F47D00C
+:10761200B8F1662477242C0111C06EDFF301ED5618
+:10762200FE4F008301E0600E00E0701E01960091A3
+:10763200F200002311F033D0B8F47FDF30D0E8F24B
+:10764200F301B096E238F040C0F674DF02FFFDCFDE
+:107652000091F200BDDF24813581201B304024835C
+:107662003583E5CF49DFAA95AA23E1F700910B0103
+:10767200013099F62091F1008C010E945038D6CF4A
+:1076820004811581012B21F055DF02FFFDCF55DF6B
+:10769200A2DF50DF00FFFDCFE8E00C94B63EE0E051
+:1076A200F1E0028113810817190708952091EB0078
+:1076B20021602093EB000093EC000091ED0002703A
+:1076C200012B0093ED000091ED0002600093ED00AC
+:1076D2001091EE00012F000F00E0001F0895412FCE
+:1076E2000093E900089500E009D000FD05C000E024
+:1076F200F7DF10E202E0DACF00E00895F1DF009157
+:10770200EB0008950F770132A9F5112369F11A955B
+:1077120059F01A9561F01A9569F01A95F9F01A95CF
+:10772200C1F01A95D9F024C00E942C3920C00E94C1
+:10773200263A1DC029D00091090123D001E01FD0B3
+:1077420020D0009108011BD00E94923A0E94973AE1
+:107752000EC01AD00091080114D007C002E00093B5
+:10776200080100E0009309010FD00E94923A03C081
+:107772000E94803A02C001E0089500E0089501D01D
+:1077820000E00093F10008950091E800077F009364
+:10779200E800089508950350F9F4112339F01A9579
+:1077A20051F01A9581F01A9599F016C004E016D09E
+:1077B20001E810E703C011D003E510E7E7E1F2E0CA
+:1077C20000831183D8CF06E109D00FE510E7F6CF89
+:1077D20004D005E710E7F2CFD0CF0CE000931A02F5
+:1077E200089527D120D100931D02E1D0212F11232A
+:1077F20029F12A95E9F02250F1F0225099F02A95C8
+:1078020049F0225061F02A9581F02A95E1F02A95FB
+:10781200E9F023C0003809F44FC00C94833B0038D0
+:10782200E1F7C8C00023C9F71EC00023B1F72DC07D
+:10783200033098F744C1033080F70BC1003868F376
+:10784200033858F7C9C0013841F77BC1013051F400
+:10785200FCD0BFD000FD06C0FCCF0E94833B0023BA
+:1078620009F41ED008951091E3001078DCD00F7750
+:10787200012B0093E300E9D0ACD000FFFDCF0091D3
+:10788200E30000680093E300089591D0123040F4C1
+:107892000FD010931E02DAD000911E020C94CB3B43
+:1078A2000091EB0001D004C000620093EB00089548
+:1078B2000091E800077FC0C0BA93AA93229700E024
+:1078C2000093190274D0AFD0202F2A9519F02A956F
+:1078D200E9F022C002E100931A020FE210E7E7E1A9
+:1078E200F2E0008311839DD008839DD00983E0DFFD
+:1078F20000911A0210E02881398102171307A8F4B7
+:107902000F7181F401E00093190211C002E10093AA
+:107912001A0201E410E7E3CF0E94CC3B002319F7DF
+:107922008ED040C01093190202C020931A027ED05A
+:10793200A7E1B2E001C08AD000911A02002309F146
+:1079420048D004FD1EC045D000FD03C042D004FF54
+:10795200FACF10E0012F1395003281F0ED91FC91E6
+:107962001197049133D02D913C912F5F3F4F3C935F
+:107972002E93FD0103810A95038361F72AD004FF48
+:10798200DACF00911902013039F423D004FD04C08A
+:1079920020D000FFFDCF5AD01CD004FFFDCF46D02F
+:1079A20018D00B7F49D02296A991B99108951091D0
+:1079B200F10008957DDF00911E0208D047D009D062
+:1079C2000F773AD006D002FFFDCFBFC00093F1007F
+:1079D20008950091E800089524D010911D021058D6
+:1079E20029F01A9589F01A9591F019C061DF00917A
+:1079F2001C02ECDF00E0EADF29D0EBDF02FFFDCF63
+:107A020018D0E7DF0F770CC053DF00E0F2CF51D080
+:107A12000F7710E0F801E55EFD4F0081EACF0FD04D
+:107A22000BC001D000D00091F1000895D2DF0F7E8B
+:107A320003C00091E8000B7F0093E80008950091D5
+:107A4200EB0032DFC6DF077F089532DFC2DF0E7F31
+:107A5200F3CF00911D02002329F00A9509F10A953E
+:107A620031F01EC0E0DF0A9561D0D9F41AC061D0AE
+:107A7200B9F4D9DF0F7711F416D01BD00093E900C7
+:107A82001091EB0010FF0BC00ED010E01093E90034
+:107A920021E0F801E55EFD4F20834FD003C042D0C4
+:107AA20045D0CFDFC9CF1091EB0010621093EB00ED
+:107AB20008951091E800177F1093E800089500914F
+:107AC2001D02002311F4AFDF02C0013011F4B7DF51
+:107AD200B3CF023031F52DD019F52091F1002F7777
+:107AE2002093E90023D000FF19C081F01FD000616C
+:107AF200DCDE01E010E0422F0E949F3E0093EA008C
+:107B020000E00093EA0012D00860CFDE0BD030E034
+:107B1200F901E55EFD4F008310D0DACF03D0D7CF55
+:107B2200BFDE089500E00093E90008950091EB00A4
+:107B3200089579DF3CDF00230895BADE4ADF0E7F25
+:107B4200089583DF46DF02FFFDCF73DF42DF0F7749
+:107B520073CF0091D70001600093D7000E948B3849
+:107B620000E000931F0208950C94BF388A93FA93A1
+:107B7200EA933A922A921A920A927A936A935A93BF
+:107B82004A933A932A931A930A938FB70091DA0091
+:107B920000FF24C00091D80000FF20C00EEF009328
+:107BA200DA000091D90000FF11C001E000930D013D
+:107BB200ABD0026096D09AD00860A2D00E949B38C7
+:107BC2000091E0000E7F0093E00008C000E0009307
+:107BD2000D0100931E0298D0046083D07FD002FF73
+:107BE20005C084D002FF02C00BEF75D077D000FF32
+:107BF2001BC07CD000FF18C001E000930E016AD0C8
+:107C020083D000626ED00EEF6FD0006179D06ED05B
+:107C12000F7D76D00091D80000620093D80009B59C
+:107C22000D7F09BD00E009BD59D004FF20C05ED020
+:107C320004FF1DC009B500FD05C00E94EB3809B55F
+:107C420000FFFDCF0091D8000F7D0093D80042D0F5
+:107C520000910E01002359F04CD00FEE45D00F7E5B
+:107C620052D000643ED042D001604AD042D036D0D9
+:107C720005FF0FC03BD005FF0CC000E000930E01D2
+:107C820035D00F7E3DD00FED2FD00F7D3CD0006858
+:107C920028D024D003FF0DC029D003FF0AC000E082
+:107CA20000931F0207EF17D00E94743B2DD0116082
+:107CB20018D08FBF09911991299139914991599100
+:107CC200699179910990199029903990E991F991E6
+:107CD200899118950FEE0093E10008950091E1005B
+:107CE20008951183008308950093E1000091E2005A
+:107CF20008950091E200006203D00091E200086062
+:107D02000093E2000895FCDFE0E2F2E000811181DD
+:107D1200089500008895FECF01E60DBF02E00EBF78
+:107D2200C2EED2E00E947438002311F00E94D33ECA
+:107D32000E9465380E948A3E0C948A3E4A951AF047
+:107D4200000F111FFBCF0895BA92AA929A928A92BB
+:107D52007A926A925A924A92BA93AA939A938A937D
+:107D62000895BB84AA84998488847F806E805D8014
+:107D72004C80BB81AA8199818881F0E00FB6F8948A
+:107D8200CE0FDF1F0FBE089520E006D0E9F7089559
+:107D9200259102D0E9F708952D9301501040202F2C
+:107DA200212B089585E890E7FC0105911491FC01CF
+:107DB2003296A591B491FC01349625913491422FCB
+:107DC200432B19F0F901E4DF01C0DEDF069610E76C
+:107DD2008139910748F308952F930CD02F9101D048
+:107DE20008953CD0F12FE02F45E047BFE89536D00B
+:107DF20012D0089533D0F12FE02F43E047BFE8952A
+:107E02002DD008952BD0F12FE02F43E047BFE89506
+:107E120025D001D0089522D041E147BFE8951EC088
+:107E22001DD0F12FE02F41E247BFC895002D16C0AB
+:107E320015D0F12FE02F49E047BFC895002D0EC0A5
+:107E4200F32FE22F012E102E41E047BFE89506C026
+:107E520005D0002E29E027BFE89500C0022E27B7E3
+:107E620020FDFCCF202D0895022E27B726FDFCCF42
+:107E7200202D08950E94A53E22974801C901DA01EA
+:107E820010C05BD001E0A00E00E0B01E00E4A0161E
+:107E920000E0B00608F440C0830120E030E00E9418
+:107EA200F23E0A2F0B2B09F440C0082F0F7710E087
+:107EB2002C01401A510A320100E4A02E03C00A2FFD
+:107EC2000B2BE1F04816590680F0F40101914F01A5
+:107ED2000983119729F001914F010883119711C06D
+:107EE200F2013196049108830CC0F20104910983D6
+:107EF2003196E817F907A1F7F401EDCF1BD00883FB
+:107F020019839201088119810E94213F16D0AA94F7
+:107F1200B1F62301AA24BB240DD0312F0F3F3F4FCE
+:107F220009F4AFCF83011DD0B7CF01E02296ECE078
+:107F32000C94B23E82010C945F3802E0400E00E0E5
+:107F4200501E08959A938A9380E090E08C0109D0A4
+:107F520080589F4F8F3F0FE69007C0F38991999108
+:107F6200089520E030E00C94FB3E00000000000089
+:067F720000000000FC000D
+:107FE4000C94ED3E0C94113F0C94193F0C94213FDA
+:0C7FF4000C94F23E0C94033F0C94293FC7
+:040000030000700089
+:100000000C949D020C94E1020C94E1020C94E10228
+:100010000C94E1020C94E1020C94E1020C94E102D4
+:100020000C94E1020C94E1020C941C120C94EE125C
+:100030000C948D240C94E1020C94E1020C94E102E6
+:100040000C94E1020C94E1020C94E1020C94E102A4
+:100050000C94E1020C94FA240C94E1020C94E10259
+:100060000C94E1020C94E1020C94E1020C94E10284
+:100070000C94E1020C94E1020C94E1020C94E10274
+:100080000C94860A0C94E1020C94E1020C94E102B7
+:100090000C94E1020C94E1020C94E1020C94E10254
+:1000A0000C94E1020C94E1020C94E10207634236E5
+:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
+:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
+:1000D0000000803F08000000BE922449123EABAAF7
+:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
+:1000F000AA3E00000000BF000000803F000000009A
+:1001000000084178D3BB4387D1133D190E3CC3BDD2
+:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
+:1001200080EFFFBE01C4FF7F3F0000000000000021
+:10013000F1A4F1A3018C028C048C2B0014001A0092
+:100140000800150017001C0018000C001200130016
+:100150002A00290004001600070009000A000B000D
+:100160000D000E000F0033003400E1001D001B00E5
+:100170000600190005001100100036003700380095
+:1001800028000030E000E200E30002202C002C00F8
+:1001900001205000510052004F002B0014001A00A3
+:1001A000090013000A000D000F0018001C003300A6
+:1001B0002A002900040015001600170007000B0094
+:1001C000110008000C0012003400E1001D001B00AB
+:1001D0000600190005000E00100036003700380038
+:1001E00028000030E000E200E30002202C002C0098
+:1001F00001205000510052004F002B003400360007
+:10020000370013001C0009000A00060015000F004B
+:100210002A00290004001200080018000C00070042
+:100220000B001700110016003800E1003300140025
+:100230000D000E001B00050010001A0019001D0023
+:1002400028000030E000E200E30002202C002C0037
+:1002500001205000510052004F0035021E021F02C3
+:100260002002210222022302240225022602270262
+:100270002A0001003A003B003C003D003E003F00E8
+:100280002D022E022F0230023102010040004100F7
+:100290004200430044004500032004200520005094
+:1002A0000100010001000100010002200100010025
+:1002B0000100AB00AA00A900AE0035001E001F001F
+:1002C0002000210022002300240025002600270012
+:1002D0002A0001003A003B003C003D003E003F0088
+:1002E0002D002E002F0030003100010040004100A1
+:1002F0004200430044004500032004200520005034
+:1003000001000100010001000100010001000100E5
+:100310000120AB00AA00A900AE0028035400680029
+:100320006500200050006C0061006E0063006B00EF
+:1003300020004B006500790062006F0061007200D0
+:10034000640000002C034F007200740068006F000E
+:100350006C0069006E0065006100720020004B00B7
+:100360006500790062006F00610072006400730034
+:100370000000040309040902D000060100A03209AC
+:100380000400000103010100092111010001223FC5
+:10039000000705810308000A0904010001030102A6
+:1003A00000092111010001224D0007058203080008
+:1003B0000A090402000103000000092111010001E3
+:1003C0002236000705830308000A0904030002031C
+:1003D000000000092111010001222000070584030B
+:1003E00020000107050403200001090404000001A6
+:1003F00001000009240100010900010509040500AC
+:10040000020103000007240100014100062402014B
+:100410000100062402020200092403010301020173
+:10042000000924030204010101000905060240003D
+:1004300005000005250101010905850240000500B0
+:100440000005250101031201100100000008EDFE66
+:1004500060600100010200010631FF0974A1010979
+:1004600075150025FF952075088102097615002570
+:10047000FF952075089102C005010980A101850240
+:1004800016010026B7001A01002AB7007510950161
+:100490008100C0050C0901A1018503160100269CFD
+:1004A000021A01002A9C02751095018100C0050105
+:1004B0000902A1010901A100050919012905150079
+:1004C00025019505750181029501750381010501DD
+:1004D000093009311581257F950275088106093893
+:1004E0001581257F950175088106050C0A380215CE
+:1004F00081257F950175088106C0C005010906A107
+:1005000001050719E029E715002501950875018106
+:1005100002950175088101050819012905950575E0
+:100520000191029501750391010507190029FF1535
+:100530000025FF950675088100C011241FBECFEF6E
+:10054000DAE0DEBFCDBF04B603FE24C0809178039D
+:1005500090917903A0917A03B0917B038730904BFF
+:10056000A740B04BB9F4109278031092790310921F
+:100570007A0310927B0314BE84B7877F84BF88E11F
+:100580000FB6F89480936000109260000FBEE0E018
+:10059000F8E3099511E0A0E0B1E0E2EAFFE502C06E
+:1005A00005900D92A63BB107D9F713E0A6EBB1E099
+:1005B00001C01D92A837B107E1F70E94F90E0C9413
+:1005C000CF2F0C9400000895089561110DC0FC0117
+:1005D0008281882331F085EE0E949D190E94B62BFE
+:1005E00003C085EE0E94651A80E090E008958B3B81
+:1005F000910568F4883A910530F5853A9105C0F483
+:100600008430910598F4019709F06FC071C0803E65
+:10061000910508F46AC0883E910540F09C01205F76
+:1006200031092031310508F060C05CC09C01A1C0D7
+:10063000853A910509F45FC0863A910509F45EC0D8
+:1006400023E830E496C0883A910509F45AC0893A03
+:10065000910509F459C08A3A910509F458C08B3ABA
+:10066000910509F457C08C3A910509F456C08D3AAA
+:10067000910509F455C0803B910509F454C08E3AA8
+:10068000910509F453C08F3A910509F452C0813B9A
+:10069000910509F451C0823B910509F450C0833B98
+:1006A000910509F44FC0843B910509F44EC0853B88
+:1006B000910509F44DC0863B910509F44CC0873B78
+:1006C000910509F44BC0883B910509F44AC0893B68
+:1006D000910509F449C08A3B910509F048C02AE216
+:1006E00036E447C09C01306544C020E030E041C0A2
+:1006F00021E030E03EC021E830E43BC022E830E4B5
+:1007000038C022EE34E435C029EE34E432C02AEE9B
+:1007100034E42FC025EB34E42CC026EB34E429C0AC
+:1007200027EB34E426C02CEC34E423C02DEC34E475
+:1007300020C023E835E41DC02AE835E41AC022E9C8
+:1007400035E417C024E935E414C021E236E411C0D1
+:1007500023E236E40EC024E236E40BC025E236E4A0
+:1007600008C026E236E405C027E236E402C020E0F5
+:1007700034E4C90108959CE0799FF001112490E3CD
+:10078000899FE00DF11D1124E60FF11DEE0FFF1FF3
+:10079000E65CFE4F25913491C9010895880F991F99
+:1007A00082559040FC0125913491C9010895880F2C
+:1007B000991F825D9E4FFC0125913491C9010895D6
+:1007C0000E94BB039C013A9521153F4108F4DFC00C
+:1007D0009C0130522115304120F49F700E94D703B4
+:1007E00008959C0130532115304118F49927906CDD
+:1007F00008959C0130542031310520F48F709927E1
+:10080000946D0895803120E4920719F480E091ED11
+:100810000895813140E4940719F480E090ED089543
+:10082000823120E4920719F480E092ED089583313B
+:1008300040E4940719F480E093ED0895811520E5D4
+:10084000920711F40C941F25813040E5940731F490
+:100850008091680281608093680208959C013056FF
+:100860002115304108F402C097FF02C0906F08952F
+:10087000803E9105E0F4803C910568F58133910557
+:1008800009F474C048F48932910509F46AC08A32C7
+:10089000910509F07AC074C089339105F9F0823866
+:1008A0009105E1F08533910509F06FC050C0833E9A
+:1008B0009105A9F140F4803E9105C9F0823E910571
+:1008C00009F063C01BC0863E910571F1873E91051A
+:1008D00009F05BC037C00E94CE03089520917B02CF
+:1008E00020FD02C021FF51C080EE90E04EC08091FB
+:1008F0007B0280FFF9CF89E390E047C080917B02C3
+:1009000082FF0AC080917B0284FF03C080E090E0F8
+:100910003CC083EE90E039C082EE90E036C080911A
+:100920007B0282FFEFCFF8CF80917B0283FF07C06D
+:1009300080917B0284FDEACF87EE90E026C086EEB0
+:1009400090E023C080917B0283FFF2CFF8CF8091AB
+:100950007B0285FF03C089E290E017C085E390E049
+:1009600014C080917B0285FDF9CFF5CF80917B0289
+:1009700086FF03C08AE290E008C081E390E005C0F2
+:1009800080917B0286FDF9CFF5CF0E94F702089592
+:100990005F926F927F928F929F92AF92BF92CF920F
+:1009A000DF92EF92FF920F931F93CF93DF93CDB718
+:1009B000DEB728970FB6F894DEBF0FBECDBF9E01FD
+:1009C0002F5F3F4F4E0189E0880E911C60E070E080
+:1009D00000E010E0E12CF12CC12CD12CA12CB12C89
+:1009E00088E0782E622E532E41E050E0E3E2F1E001
+:1009F000A62DB52D872D01900D928A95E1F7F9016D
+:100A0000819191919F01FC01E07FFF27E032F10588
+:100A100059F48F709927FA0102C0EE0FFF1F8A95D3
+:100A2000E2F7AE2ABF2A37C0E033F10559F48F70E0
+:100A30009927FA0102C0EE0FFF1F8A95E2F7CE2A2E
+:100A4000DF2A29C0E034F10559F48F709927FA01A3
+:100A500002C0EE0FFF1F8A95E2F7EE2AFF2A1BC0A5
+:100A6000E035F10559F48F709927FA0102C0EE0FB5
+:100A7000FF1F8A95E2F70E2B1F2B0DC0E036F10504
+:100A800051F48F709927FA0102C0EE0FFF1F8A956B
+:100A9000E2F76E2B7F2B2815390509F0A7CF94B10B
+:100AA0008A2D8095892384B985B18A2985B997B122
+:100AB0008C2D8095892387B988B18C2988B99AB102
+:100AC0008E2D809589238AB98BB18E298BB99DB1E2
+:100AD000802F809589238DB98EB1802B8EB990B3EC
+:100AE000862F8095892380BB81B3862B81BB289676
+:100AF0000FB6F894DEBF0FBECDBFDF91CF911F912F
+:100B00000F91FF90EF90DF90CF90BF90AF909F90AC
+:100B10008F907F906F905F9008955F926F927F9219
+:100B20008F929F92AF92BF92CF92DF92EF92FF92FD
+:100B30000F931F93CF93DF93CDB7DEB768970FB6B0
+:100B4000F894DEBF0FBECDBF85B7806885BF85B77F
+:100B5000806885BF0E94CF076E9A769A0E94C8046B
+:100B60009E012F5F3F4F4E0189E1880E911C60E08E
+:100B700070E000E010E0E12CF12CC12CD12CA12C74
+:100B8000B12C98E1792E622E532E41E050E0EBE239
+:100B9000F1E0A62DB52D872D01900D928A95E1F7F4
+:100BA000F901819191919F01FC01E07FFF27E032E3
+:100BB000F10559F48F709927FA0102C0EE0FFF1F5B
+:100BC0008A95E2F7AE2ABF2A37C0E033F10559F41F
+:100BD0008F709927FA0102C0EE0FFF1F8A95E2F786
+:100BE000CE2ADF2A29C0E034F10559F48F70992705
+:100BF000FA0102C0EE0FFF1F8A95E2F7EE2AFF2AE4
+:100C00001BC0E035F10559F48F709927FA0102C035
+:100C1000EE0FFF1F8A95E2F70E2B1F2B0DC0E0365B
+:100C2000F10551F48F709927FA0102C0EE0FFF1FF2
+:100C30008A95E2F76E2B7F2B2815390509F0A7CF8F
+:100C400094B18A2D8095892384B985B18A2985B983
+:100C500097B18C2D8095892387B988B18C2988B963
+:100C60009AB18E2D809589238AB98BB18E298BB943
+:100C70009DB1802F809589238DB98EB1802B8EB93F
+:100C800090B3862F8095892380BB81B3862B81BB4F
+:100C90001092B7011092B6011092BF011092BE01DE
+:100CA0001092B9011092B8011092C1011092C001C6
+:100CB0001092BB011092BA011092C3011092C201AE
+:100CC0001092BD011092BC011092C5011092C40196
+:100CD00068960FB6F894DEBF0FBECDBFDF91CF91FF
+:100CE0001F910F91FF90EF90DF90CF90BF90AF904A
+:100CF0009F908F907F906F905F9008955F926F921A
+:100D00007F928F929F92AF92BF92CF92DF92EF929B
+:100D1000FF920F931F93CF93DF93CDB7DEB7A097CA
+:100D20000FB6F894DEBF0FBECDBF7E0149E1E40EE1
+:100D3000F11C2EEBC22E21E0D22E5E0151E2A50E57
+:100D4000B11C38E0532E470101E010E048E1642E69
+:100D500055E0752EE3E2F1E0D401852D01900D926E
+:100D60008A95E1F7F701819191917F019C01207FA4
+:100D700033272032310589F424B18F709927A801D7
+:100D800002C0440F551F8A95E2F7CA01242B24B9EB
+:100D900095B18095892385B94FC02033310589F4F9
+:100DA00027B18F709927F80102C0EE0FFF1F8A95B7
+:100DB000E2F7CF012E2B27B998B18095892388B906
+:100DC0003BC02034310589F42AB18F709927A801DE
+:100DD00002C0440F551F8A95E2F7CA01242B2AB995
+:100DE0009BB1809589238BB927C02035310589F4C3
+:100DF0002DB18F709927F80102C0EE0FFF1F8A9561
+:100E0000E2F7CF012E2B2DB99EB1809589238EB9A3
+:100E100013C02036310581F420B38F709927A801C3
+:100E200002C0440F551F8A95E2F7CA01242B20BB4C
+:100E300091B38095892381BB50EA5A95F1F7BE01A1
+:100E40006F5F7F4F80E090E020E030E0EBE2F1E088
+:100E5000DE011196462D01900D924A95E1F7FB01B6
+:100E600041915191BF01FA01E07FFF27E032F10586
+:100E700011F4E3B113C0E033F10511F4E6B10EC093
+:100E8000E034F10511F4E9B109C0E035F10511F4E0
+:100E9000ECB104C0E036F105B9F4EFB1F0E04F7009
+:100EA000552702C0F595E7954A95E2F7E0FD08C0A1
+:100EB000A801022E02C0440F551F0A94E2F702C097
+:100EC00040E050E0842B952B2F5F3F4F2C303105B5
+:100ED00009F0BCCFF601208131812817390721F0B4
+:100EE00091838083709200010E94C804F2E0CF0ECB
+:100EF000D11CEA14FB0409F02DCF80910001882356
+:100F000061F1815080930001811121C08091BE0167
+:100F10009091BF019093B7018093B6018091C00179
+:100F20009091C1019093B9018093B8018091C20161
+:100F30009091C3019093BB018093BA018091C40149
+:100F40009091C5019093BD018093BC0106C08FE9CB
+:100F50009FE00197F1F700C0000081E0A0960FB676
+:100F6000F894DEBF0FBECDBFDF91CF911F910F91DF
+:100F7000FF90EF90DF90CF90BF90AF909F908F90B9
+:100F80007F906F905F900895E82FF0E0EE0FFF1FC5
+:100F9000EA54FE4F80819181089508950895279A1B
+:100FA0002F988FEF9FEF90938700809386008AE0C1
+:100FB0008093800089E1809381000C945F2B8111E4
+:100FC0000BC080918000877F8093800010928D00FD
+:100FD00010928C002F9808952F98833041F48091BF
+:100FE00080008860809380008FEF9FEF12C0909107
+:100FF000800098609093800023E030E0281B310946
+:10100000220F331F8FEF9FEF02C0969587952A9589
+:10101000E2F790938D0080938C0008950F931F93B7
+:10102000CF93DF93CDB7DEB7CC58D1090FB6F89484
+:10103000DEBF0FBECDBF8C01862F642F882379F0D1
+:10104000F80192812FE7482F992329F08DE792E04C
+:101050000E94F81404C08DE792E00E940815F80180
+:1010600080818B3061F49181933009F068C0828176
+:10107000882309F4CDC0809103018F5F0EC08A30B0
+:10108000E1F5F8019181933009F059C082818823FC
+:1010900009F4BEC08091030181508093030120E0D8
+:1010A0004BE760E08DE792E00E94E81420E04BE718
+:1010B00061E08DE792E00E94E81420E04BE762E0F7
+:1010C0008DE792E00E94E81420E04BE763E08DE7B3
+:1010D00092E00E94E81420E04BE764E08DE792E0A4
+:1010E000C457DF4F0FB6F894DEBF0FBECDBFDF9100
+:1010F000CF911F910F910C94E814893069F4F80195
+:1011000091819330E1F492819923C9F0809101019A
+:101110009091020101960EC0883089F4F801918106
+:10112000933069F49281992351F08091010190915B
+:10113000020101979093020180930101B0CFF80161
+:10114000928140910301992391F196E4E3E4F1E067
+:10115000DE01A95BBF4F01900D929A95E1F7405DCA
+:10116000F8019181FCE09F9F40191124E091010159
+:10117000F0910201E80FF11DEE0FFF1F87E490E0F0
+:101180008C0F9D1FE80FF91F8081480F2FE760E04B
+:101190008DE792E0C457DF4F0FB6F894DEBF0FBE65
+:1011A000CDBFDF91CF911F910F910C94F81496E46D
+:1011B000E3E4F1E0DE01119601900D929A95E1F7DA
+:1011C000405DF8019181FCE09F9F40191124E0915E
+:1011D0000101F0910201E80FF11DEE0FFF1F81E008
+:1011E00090E08C0F9D1FE80FF91F8081480F2FE7BB
+:1011F00060E08DE792E0C457DF4F0FB6F894DEBF92
+:101200000FBECDBFDF91CF911F910F910C940815A8
+:10121000C457DF4F0FB6F894DEBF0FBECDBFDF91CE
+:10122000CF911F910F910895CF93DF93EA019B0116
+:10123000AC0160E074E284E79BE40E945F2C0E94B2
+:10124000C72C709397006093960020E130E02C1B30
+:101250003D0B02C0759567952A95E2F7709399004A
+:1012600060939800DF91CF9108951092020210923E
+:10127000010210929000109291001092FD011092C4
+:10128000FE011092FF01109200021092FC011092D8
+:10129000FB01E9EDF1E0A9ECB1E01192119211929C
+:1012A00011921D921D9281E0E93FF807B1F7089570
+:1012B000AF92BF92CF92DF92EF92FF920F931F9364
+:1012C000CF93DF936B017C0109EF11E047EDA42E72
+:1012D00041E0B42EC7E0D0E0A7019601F801929159
+:1012E0008291729162918F010E945B2C882349F058
+:1012F0002197F2E0AF1AB108CF3F8FEFD80761F71F
+:1013000034C0F8011082118212821382F501118219
+:101310001082FE01EE0FFF1FEE0FFF1FE752FE4F80
+:10132000DE01AA0FBB1FA753BE4FCE011AC0019604
+:1013300044815581668177814083518362837383C1
+:10134000148215821682178212962D913C91139762
+:1013500011963C932E9313961C921E9212973496DC
+:1013600012968730910519F7C3CF809101029091B1
+:101370000202019797FD05C090930202809301023B
+:1013800004C01092020210920102E0910102F09159
+:101390000202309789F410929000109291001092FE
+:1013A000FD011092FE011092FF01109200021092B6
+:1013B000FC011092FB019EC03197DF01AA0FBB1FF9
+:1013C000AA0FBB1FA752BE4FCD90DD90ED90FC90B1
+:1013D000EE0FFF1FE753FE4FC081D181A090FD01AA
+:1013E000B090FE010091FF0110910002A70196014B
+:1013F0006A2D7B2D802F912F0E945B2C87FF2FC0A1
+:1014000081E08093C801AE016A2D7B2D802F912F42
+:101410000E9414092091FD013091FE014091FF01CD
+:1014200050910002C701B6010E94F62B20E030E087
+:101430004AEF53E40E945F2C9B01AC016A2D7B2D87
+:10144000802F912F0E94F72B5B018C01A701960141
+:101450007B2D912F0E945B2C1816ACF638C0A7018B
+:1014600096016A2D7B2D802F912F0E94AA2D181690
+:1014700084F581E08093C801AE016A2D7B2D802F19
+:10148000912F0E941409A70196016091FD017091AE
+:10149000FE018091FF01909100020E94F62B20E056
+:1014A00030E04AEF53E40E945F2C9B01AC016A2DAF
+:1014B0007B2D802F912F0E94F62B5B018C01A701C1
+:1014C00096017B2D912F0E94AA2D87FFD5CF1092D8
+:1014D000C801AE01C701B6010E941409C092FD0106
+:1014E000D092FE01E092FF01F0920002D093FC0145
+:1014F000C093FB01DF91CF911F910F91FF90EF906F
+:10150000DF90CF90BF90AF90089508951F920F92F3
+:101510000FB60F9211242F933F934F935F936F93C6
+:101520007F938F939F93AF93BF93EF93FF9380919C
+:10153000960090919700892B09F455C08091C801BD
+:10154000811151C08091F9019091FA01813091058A
+:1015500071F082309105C1F0892BC1F52091FD0118
+:101560003091FE014091FF01509100021DC0609139
+:10157000FD017091FE018091FF01909100029B019D
+:10158000AC010E94F72B0EC020E030E040E450E4B4
+:101590006091FD017091FE018091FF019091000228
+:1015A0000E94AE2D9B01AC0160E074E284E79BE4F5
+:1015B0000E945F2C0E94C72C709397006093960046
+:1015C0007595679570939900609398008091F901E3
+:1015D0009091FA01019663E070E00E948A2F909347
+:1015E000FA018093F901FF91EF91BF91AF919F9123
+:1015F0008F917F916F915F914F913F912F910F90BC
+:101600000FBE0F901F901895AF92BF92CF92DF92AE
+:10161000EF92FF920F931F93CF93DF936B017C01A7
+:10162000EA0120E030E0A9010E94AA2D18160CF072
+:10163000B4C03E9A82E8809390008AE18093910042
+:10164000A090FD01B090FE010091FF0110910002F9
+:1016500020E030E0A9016A2D7B2D802F912F0E9480
+:101660005B2C81112DC0AE01C701B6010E94140987
+:10167000C092FD01D092FE01E092FF01F0920002C3
+:10168000D093FC01C093FB01809101029091020272
+:10169000FC01EE0FFF1FEE0FFF1FE752FE4FC0824F
+:1016A000D182E282F382FC01EE0FFF1FE753FE4F6F
+:1016B000D183C083019690930202809301026DC092
+:1016C000A70196016A2D7B2D802F912F0E945B2C04
+:1016D00087FF2CC0AE016A2D7B2D802F912F0E9499
+:1016E00014092091FD013091FE014091FF015091BC
+:1016F0000002C701B6010E94F62B20E030E04AEF5D
+:1017000053E40E945F2C9B01AC016A2D7B2D802F3E
+:10171000912F0E94F72B5B018C01A70196017B2D75
+:10172000912F0E945B2C1816ACF69DCFA701960155
+:101730006A2D7B2D802F912F0E94AA2D18160CF058
+:1017400092CFAE016A2D7B2D802F912F0E9414091C
+:10175000A70196016091FD017091FE018091FF014A
+:10176000909100020E94F62B20E030E04AEF53E413
+:101770000E945F2C9B01AC016A2D7B2D802F912F45
+:101780000E94F62B5B018C01A70196017B2D912F06
+:101790000E94AA2D87FFD5CF66CFDF91CF911F91F1
+:1017A0000F91FF90EF90DF90CF90BF90AF90089592
+:1017B00080910C020895CF93DF9300D01F92CDB794
+:1017C000DEB720916E03243021F523E029839B832B
+:1017D0008A832093E9008FEF06C095ED9A95F1F783
+:1017E0000000882329F09091E800815095FFF5CF03
+:1017F0008091E80085FF0DC040E050E063E070E0BC
+:10180000CE0101960E94BA0F8091E8008E778093F6
+:10181000E8000F900F900F90DF91CF910895CF9334
+:10182000DF9300D01F92CDB7DEB720916E03243036
+:1018300029F522E029839B838A8383E08093E90052
+:101840008FEF06C095ED9A95F1F70000882329F0F7
+:101850009091E800815095FFF5CF8091E80085FFD9
+:101860000DC040E050E063E070E0CE0101960E94C0
+:10187000BA0F8091E8008E778093E8000F900F9068
+:101880000F90DF91CF91089520916E032430F9F4E9
+:1018900022E02093E9002FEF06C035ED3A95F1F7ED
+:1018A0000000222329F03091E800215035FFF5CFC8
+:1018B0002091E80025FF0BC040E050E065E070E0BB
+:1018C0000E94BA0F8091E8008E778093E800089517
+:1018D000CF93DF93EC0180916E03843041F581E07A
+:1018E0008093E9008FEF06C095ED9A95F1F700001F
+:1018F000882329F09091E800815095FFF5CF8091E1
+:10190000E80085FF14C040E050E068E070E0CE01E0
+:101910000E94BA0F8091E8008E778093E80088E0FB
+:10192000FE01A4E0B2E001900D928A95E1F7DF910B
+:10193000CF910895BF92CF92DF92EF92FF920F93D3
+:101940001F93CF93DF937C01B62EE90100E010E0F6
+:10195000C42ED12C0BC04991202F2B0D2F774F7700
+:101960006FE0C7010E94E8140F5F1F4F0C151D05A3
+:1019700094F3DF91CF911F910F91FF90EF90DF9043
+:10198000CF90BF90089570E06F5F7F4F6F707727A3
+:101990000C94E8140F931F93CF93C42F63307105F9
+:1019A00009F04AC0842F807F803849F1803909F0DE
+:1019B00043C0622F6F7770E080E090E00E94FA2CC5
+:1019C00020E030E040E451E40E945F2C9B01AC0138
+:1019D00060E070E080E090E40E94112E0F7710E04C
+:1019E00023E0159507952A95E1F72DEC3CEC42E0B4
+:1019F00053E40E94AE2DA8010E94040B1DC0622F6B
+:101A00006F7770E080E090E00E94FA2C20E030E0F8
+:101A100040E451E40E945F2C9B01AC0160E070E067
+:101A200080E090E40E94112E2DEC3CEC42E053E467
+:101A30000E94AE2D0E945809CC3F29F4CF911F91EE
+:101A40000F910C943509CF911F910F9108950F9329
+:101A50001F93CF93DF93CDB7DEB727970FB6F894D8
+:101A6000DEBF0FBECDBF8C0114C08A810E94C2149C
+:101A70009A819D839B819E839C819F8381111EC03F
+:101A800089818430B1F08730A1F08630A1F08530B3
+:101A9000A1F0BE016F5F7F4F84E091E00E942F189C
+:101AA0008111E3CF84E091E00E9420180E949B14F2
+:101AB0000DC083E003C082E001C081E0AE014B5F56
+:101AC0005F4F682FC8010E945515E3CF27960FB6C8
+:101AD000F894DEBF0FBECDBFDF91CF911F910F9164
+:101AE0000895EF92FF920F93CF93DF9300D000D031
+:101AF00000D0CDB7DEB77B014A832B830C83842FC4
+:101B00002E834D830E94C2142E814D8181111BC0F2
+:101B100082E0E816F10479F083E0E816F10421F0A0
+:101B2000EA94EF2821F50BC0073F11F487E001C0CC
+:101B300084E089830BC0273FD9F786E0FACF473F7F
+:101B4000B9F785E0F6CF42954F704983BE016F5FCC
+:101B50007F4F84E091E00E94E51784E091E00E94CD
+:101B6000031884E091E00E9420180E949B1426969E
+:101B70000FB6F894DEBF0FBECDBFDF91CF910F91AE
+:101B8000FF90EF90089580916D03811109C00E942C
+:101B9000A1110E94FE118091E20084608093E20016
+:101BA000089510926D03089508950C94E4020C9426
+:101BB000892480916E03843049F58091E9008F700B
+:101BC0009091EC0090FF02C090E801C090E0982B4B
+:101BD00084E08093E9008091EB0080FF14C0809145
+:101BE000EE0087FD03C00FC01092F1008091E80065
+:101BF00085FDFACF8091E80080FF05C08091E80064
+:101C00008E778093E8009F709093E900089542E0FA
+:101C100061EC81E00E94171142E061EC82E00E94D9
+:101C2000171142E061EC83E00E94171146E261EC7B
+:101C300084E00E94171142E361E885E00E941711D9
+:101C400042E360E886E00C941711809170038330C2
+:101C500009F454C030F4813071F0823009F0AAC028
+:101C600091C08A3009F47EC08B3009F45FC089309E
+:101C700009F0A0C020C080916F03813A09F09AC09A
+:101C80008091E800877F8093E800809173039091B2
+:101C90007403892B21F060E080E090E003C068E0ED
+:101CA00084E092E070E00E9458108091E8008B7709
+:101CB0008093E800089580916F03813209F07AC023
+:101CC0008091730390917403892B09F073C0809104
+:101CD000E800877F8093E80005C080916E03882329
+:101CE00009F468C08091E80082FFF7CF8091F1008D
+:101CF00080930C028091E8008B7758C080916F032D
+:101D0000813A09F057C08091730390917403892B35
+:101D100009F050C08091E800877F8093E8008091AF
+:101D2000E80080FFFCCF80911A013BC080916F03D7
+:101D3000813209F03FC08091730390917403892B25
+:101D4000C9F58091E800877F8093E8000E944E11DA
+:101D50009091710381E0911101C080E080931A019C
+:101D60000C948C1E80916F03813221F58091E800E4
+:101D7000877F8093E8000E944E11809172038093C8
+:101D80000302089580916F03813AA1F48091E800E5
+:101D9000877F8093E8008091E80080FFFCCF8091EE
+:101DA00003028093F1008091E8008E778093E80031
+:101DB0000C944E11089584B7877F84BF88E10FB6D5
+:101DC000F89480936000109260000FBE90E080E86D
+:101DD0000FB6F89480936100909361000FBE0E944B
+:101DE000A1110E94FE11E2EEF0E080818460808308
+:101DF00008958DE792E00E94241561E77DE08DE76C
+:101E000092E00E947A1567E27DE08DE792E00E9401
+:101E10007E150E94DB0E78946AEC7CE08DE792E000
+:101E20000E94201563EC7CE08DE792E00E9418157B
+:101E30006AE97CE08DE792E00E941C150E94850A09
+:101E40000E949B140E94AC1880E191E00E945418FB
+:101E50000BC00E944E2480916C03882329F00E94BD
+:101E6000742481110E94A40F80916E03853089F340
+:101E70008DE792E00E942D170E94B618F5CF292F0A
+:101E8000332723303105B1F04CF42130310509F40A
+:101E90004DC02230310509F04EC007C02132310556
+:101EA00041F12232310591F146C0E0EDF0E086E7E4
+:101EB00093E045C099278130910569F08230910502
+:101EC00089F0892B09F037C0E2E7F3E0E491F0E014
+:101ED00082E793E034C0E4E4F3E0E491F0E084E4EA
+:101EE00093E02DC0EAE1F3E0E491F0E08AE193E0D1
+:101EF00026C0643000F5E62FF0E0EE0FFF1FE75735
+:101F0000FE4F80819181E9E0F0E019C0643098F4DF
+:101F1000E62FF0E0DF01AA0FBB1FAF56BE4F8D9139
+:101F20009C91E756FE4FE081F0E009C0E2E1F0E06D
+:101F300086E494E004C0E0E0F0E080E090E0DA01C4
+:101F40008D939C93CF01089580E189BD82E189BD85
+:101F500009B400FEFDCF8091D8008F7D8093D8001A
+:101F60008091E00082608093E0008091E00081FD3C
+:101F7000FCCF0895BF92CF92DF92EF92FF920F9322
+:101F80001F93CF93DF937C018B01EA010E946F11B5
+:101F9000B82E811133C0209731F028813981021B7E
+:101FA000130BE20EF31EC12CD12C23C08091E8004C
+:101FB00085FD15C08091E8008E778093E80020971A
+:101FC00049F0888199818C0D9D1D9983888325E036
+:101FD000B22E14C00E946F11882359F00EC0F70171
+:101FE00081917F018093F10001501109FFEFCF1A19
+:101FF000DF0A01151105D1F601C0B82E8B2DDF9136
+:10200000CF911F910F91FF90EF90DF90CF90BF90F5
+:102010000895BF92CF92DF92EF92FF920F931F939A
+:10202000CF93DF937C018B01EA010E946F11B82EE0
+:10203000811133C0209731F028813981021B130BA5
+:10204000E20EF31EC12CD12C23C08091E80085FD47
+:1020500015C08091E8008B778093E800209749F0C5
+:10206000888199818C0D9D1D9983888345E0B42ECC
+:1020700014C00E946F11882359F00EC08091F100A6
+:10208000F70181937F0101501109FFEFCF1ADF0A99
+:1020900001151105D1F601C0B82E8B2DDF91CF911E
+:1020A0001F910F91FF90EF90DF90CF90BF90089518
+:1020B00040917503509176034617570748F0611514
+:1020C000710539F44091E8004E774093E80001C073
+:1020D000BA01FC0140E033C080916E03882309F40B
+:1020E00042C0853009F441C08091E80083FD39C0C9
+:1020F0008091E80082FD2FC08091E80080FF1FC022
+:102100009091F3008091F200392F20E0A901482B33
+:10211000CA0106C041914093F100615071090196D6
+:102120006115710519F088309105A0F341E0089719
+:1021300009F040E08091E8008E778093E800611517
+:10214000710551F64111C8CF06C080916E038823F6
+:1021500051F0853051F08091E80082FFF6CF80E0A9
+:10216000089581E0089582E0089583E00895409104
+:102170007503509176034617570748F061157105AE
+:1021800039F44091E8004E774093E80001C0BA016D
+:10219000FC0140E034C080916E03882309F443C001
+:1021A000853009F442C08091E80083FD3AC08091F7
+:1021B000E80082FD30C08091E80080FF20C090914F
+:1021C000F3008091F200392F20E0A901482BCA01C9
+:1021D00007C044914093F100319661507109019616
+:1021E0006115710519F08830910598F341E0089761
+:1021F00009F040E08091E8008E778093E800611557
+:10220000710549F64111C7CF06C080916E0388233E
+:1022100051F0853051F08091E80082FFF6CF80E0E8
+:10222000089581E0089582E0089583E00895982F4D
+:102230002CC09093E900981739F07091EC00209130
+:10224000ED005091F00003C0242F762F50E021FDC7
+:1022500002C09F5F1AC03091EB003E7F3093EB00CD
+:102260003091ED003D7F3093ED003091EB00316017
+:102270003093EB007093EC002093ED005093F0004E
+:102280002091EE0027FDE5CF07C0973090F28F70C8
+:102290008093E90081E0089580E0089580916F03C4
+:1022A00087FD05C08091E80080FF0EC012C08091BC
+:1022B000E80082FD05C080916E038111F8CF08957A
+:1022C0008091E8008B7708C080916E038111EACF7E
+:1022D00008958091E8008E778093E80008958091BA
+:1022E000E4009091E50045E62091EC0020FD1FC040
+:1022F00023C020916E03222391F0253091F020918C
+:10230000EB0025FD10C02091E4003091E500281776
+:10231000390751F34150C90139F784E0089582E04B
+:10232000089583E0089581E0089580E00895209164
+:10233000E80020FFDECFF9CF2091E80022FFD9CFBF
+:10234000F4CF0E940F120E941712E0EEF0E080819D
+:1023500081608083E8EDF0E080818F77808319BC15
+:10236000A7EDB0E08C918E7F8C9380818F7E8083EF
+:1023700010926D0308950F931F93CF93DF930E94E4
+:102380000F120E941712C8EDD0E088818F778883E2
+:1023900088818068888388818F7D888319BC1092AA
+:1023A0006E0310926A0310926C0310926B0300EE9E
+:1023B00010E0F80180818B7F808388818160888331
+:1023C00042E060E080E00E941711E1EEF0E08081E1
+:1023D0008E7F8083E2EEF0E0808181608083808167
+:1023E00088608083F80180818E7F8083888180610E
+:1023F0008883DF91CF911F910F910895E8EDF0E070
+:1024000080818F7E8083E7EDF0E080818160808332
+:1024100084E082BF81E080936D030C94BB11E8EDF2
+:10242000F0E080818E7F80831092E2000895109208
+:10243000DA001092E10008951F920F920FB60F92EA
+:1024400011242F933F934F935F936F937F938F93B9
+:102450009F93AF93BF93EF93FF938091E10082FF2F
+:102460000BC08091E20082FF07C08091E1008B7F6A
+:102470008093E1000E94D90D8091DA0080FF1FC097
+:102480008091D80080FF1BC08091DA008E7F8093FE
+:10249000DA008091D90080FF0DC080E189BD82E122
+:1024A00089BD09B400FEFDCF81E080936E030E94D8
+:1024B000C30D05C019BC10926E030E94D10D80910E
+:1024C000E10080FF19C08091E20080FF15C080917B
+:1024D000E2008E7F8093E2008091E2008061809331
+:1024E000E2008091D80080628093D80019BC85E01A
+:1024F00080936E030E94D50D8091E10084FF30C06F
+:102500008091E20084FF2CC080E189BD82E189BD19
+:1025100009B400FEFDCF8091D8008F7D8093D80054
+:102520008091E1008F7E8093E1008091E2008F7EB8
+:102530008093E2008091E20081608093E2008091CC
+:102540006A03882311F084E007C08091E30087FFCD
+:1025500002C083E001C081E080936E030E94D70D2A
+:102560008091E10083FF29C08091E20083FF25C0B4
+:102570008091E100877F8093E10082E080936E0389
+:1025800010926A038091E1008E7F8093E100809138
+:10259000E2008E7F8093E2008091E2008061809370
+:1025A000E20042E060E080E00E9417118091F000BC
+:1025B00088608093F0000E94D40DFF91EF91BF914D
+:1025C000AF919F918F917F916F915F914F913F91CB
+:1025D0002F910F900FBE0F901F9018951F920F9282
+:1025E0000FB60F9211242F933F934F935F936F93E6
+:1025F0007F938F939F93AF93BF93CF93EF93FF936B
+:102600008091E9008F709091EC0090FF02C090E8FB
+:1026100001C090E0C92FC82B1092E9008091F00012
+:10262000877F8093F00078940E9432131092E90023
+:102630008091F00088608093F000CF70C093E90033
+:10264000FF91EF91CF91BF91AF919F918F917F912A
+:102650006F915F914F913F912F910F900FBE0F900F
+:102660001F9018951F93CF93DF93CDB7DEB7AC972C
+:102670000FB6F894DEBF0FBECDBFEFE6F3E080915A
+:10268000F100819323E0E737F207C9F70E94250E96
+:102690008091E80083FF37C180916F0390917003B0
+:1026A000953009F488C038F49130B1F170F093306E
+:1026B00009F029C131C0983009F4F8C0993009F403
+:1026C00004C1963009F01FC19DC0803821F08238C6
+:1026D00009F019C108C080916B0390916C03992394
+:1026E00089F082600FC080917303909174038F70A2
+:1026F00099278093E9008091EB0085FB882780F97A
+:102700001092E9009091E800977F9093E800809301
+:10271000F1001092F100D5C0882319F0823009F041
+:10272000F2C08F7121F0823009F0EDC00BC08091B2
+:102730007103813009F0E7C0933009F080E08093A5
+:102740006C032FC08091710381112BC080917303A2
+:10275000909174038F709927009709F4D4C08093E7
+:10276000E9002091EB0020FF1CC020917003233072
+:1027700021F48091EB00806212C09091EB00906197
+:102780009093EB0021E030E001C0220F8A95EAF738
+:102790002093EA001092EA008091EB008860809319
+:1027A000EB001092E9008091E800877F8093E800B9
+:1027B0000E944E11A8C08111A6C080917103909112
+:1027C00072038F779927182F9091E3009078982BB8
+:1027D0009093E3008091E800877F8093E8000E9457
+:1027E0004E118091E80080FFFCCF8091E30080686B
+:1027F0008093E300112311F083E001C082E0809315
+:102800006E0381C08058823008F07DC080917103D2
+:10281000909172038C3D23E0920779F583E08A83DF
+:102820008AE289834FB7F894DE01139620E03EE0F8
+:1028300051E2E32FF0E050935700E49120FF03C0F2
+:10284000E295EF703F5FEF708E2F90E0EA3010F06E
+:10285000C79601C0C0968D939D932F5F243149F791
+:102860004FBF8091E800877F8093E8006AE270E0C4
+:10287000CE0101960E94581013C0AE01455D5F4F16
+:10288000609173030E943F0F0097E9F12091E800E7
+:10289000277F2093E800BC018BA59CA50E94B71060
+:1028A0008091E8008B778093E8002DC0803859F53F
+:1028B0008091E800877F8093E80080916A0380938D
+:1028C000F1008091E8008E7771CF81111CC090914A
+:1028D00071039230C0F48091E800877F8093E80014
+:1028E00090936A030E944E1180916A03811104C083
+:1028F0008091E30087FF02C084E001C081E0809303
+:102900006E030E94070E8091E80083FF0AC0809149
+:10291000E800877F8093E8008091EB0080628093DD
+:10292000EB00AC960FB6F894DEBF0FBECDBFDF91C3
+:10293000CF911F910895CF9380916E038823B1F0BA
+:102940008091E9008F709091EC0090FF02C090E8B8
+:1029500001C090E0C92FC82B1092E9008091E800D7
+:1029600083FD0E943213CF70C093E900CF91089588
+:10297000881F8827881F089591E0883F08F490E019
+:10298000892F0895982F907F903B99F038F49039D3
+:1029900081F0903A71F09038C9F40BC0903DA1F0ED
+:1029A00018F4903C99F410C0903E19F0903F71F4E7
+:1029B00002C083E00895E82FE15FEF3038F4F0E0E3
+:1029C000E356FE4F8081089582E0089580E00895E7
+:1029D0000F932F774F776F70606BDC01ED91FC9157
+:1029E000022F242F462F63E070E009950F91089580
+:1029F0000F932F774F776F706069DC01ED91FC9139
+:102A0000022F242F462F63E070E009950F9108955F
+:102A10000F932F774F776F706068DC01ED91FC9119
+:102A2000022F242F462F63E070E009950F9108953F
+:102A3000FC01738362830895FC01738F628F089594
+:102A4000FC01758F648F0895CF93DF93EC011DA275
+:102A50001FA21EA2BC01685D7F4F40EC88519F4FB2
+:102A60000E9461171B821A821D821C821F821E8295
+:102A7000198618861B861A861D861C861F861E864A
+:102A8000198A188A1B8A1A8A1D8A1C8A1F8A1E8A1A
+:102A9000198E188E1B8E1A8E1D8E1C8E1F8E1E8EEA
+:102AA00019A218A2DF91CF910895CF92DF92FF92E1
+:102AB0000F931F93CF93DF931F92CDB7DEB7F62E00
+:102AC0006A018C0108511F4F08C0F60161916F0126
+:102AD000C80149830E94681749818C2D841B8F157A
+:102AE000A0F30F90DF91CF911F910F91FF90DF9096
+:102AF000CF900895FC01718360830895FC0171A358
+:102B000060A30895AF92BF92CF92DF92EF92FF92AF
+:102B10000F931F93CF93DF9300D01F92CDB7DEB7F3
+:102B20007C016B01142FB22EA02EDC0195968C91A6
+:102B300095978430F1F45A96ED91FC915B9730971C
+:102B400009F4D8C0CB01019763E070E00E94762FB2
+:102B5000DB01AA0FBB1FA60FB71F49832A830B8374
+:102B60004C2D4A1B9E012F5F3F4FBD01C7010995A8
+:102B7000B1C06230710509F453C06330710529F0AA
+:102B80006130710509F09CC083C0842F807F803A3A
+:102B900001F130F48038B9F0803909F0ABC00DC0D4
+:102BA000803EE9F0803F09F1803B09F0A3C0D701E6
+:102BB0001296ED91FC91139723C0D7011496ED91D5
+:102BC000FC9115971DC0D7011696ED91FC911797B2
+:102BD00017C0D7011896ED91FC91199711C0D70134
+:102BE0001A96ED91FC911B970BC0423F09F082C0F1
+:102BF000D7011C96ED91FC911D97309731F47AC066
+:102C0000309709F477C0123F21F42A2D4B2D62EF43
+:102C100004C0612F6F702A2D4B2DC70109955AC032
+:102C2000842F807F803D59F0803F79F0803C09F00F
+:102C300061C0D7011E96ED91FC911F9719C0D70175
+:102C40005096ED91FC91519713C0433F31F4D70159
+:102C50005296ED91FC91539708C0413F09F04AC04C
+:102C6000D7015496ED91FC915597309741F442C0AD
+:102C7000309709F43FC0133F11F0113F19F44B2D69
+:102C8000612F03C0612F6F704B2DC701099522C0C2
+:102C9000842F0E94BC14882331F0D7015696ED9101
+:102CA000FC91579707C0163F29F5D7015896ED912B
+:102CB000FC9159973097F1F0612FC70109950AC02F
+:102CC00064307105A8F416C00A2D2B2D412FB601D2
+:102CD000C7010995D7015E96ED91FC915F973097FA
+:102CE00089F00A2D2B2D412FB601C70109950AC085
+:102CF000C12CD12CD7015C96ED91FC915D9730975A
+:102D000019F7E8CF0F900F900F90DF91CF911F919F
+:102D10000F91FF90EF90DF90CF90BF90AF9008950C
+:102D2000EF92FF920F931F93CF93DF93EC01162F37
+:102D3000862F0E94BC14882369F0FDA081E08DA33A
+:102D400000E020E0412F61E070E0CE010E9482159A
+:102D5000FDA27CC0812F0E94B8144DA1882309F4E4
+:102D600040C0443029F01AA321E030E03FA32EA355
+:102D7000812F0E94C214813031F070F0823051F006
+:102D8000833059F507C08DA300E020E0412F61E0BA
+:102D900070E01EC08DA35AC0103F19F0173FE9F430
+:102DA00004C084E08DA31AA33FC02EA13FA1C90196
+:102DB00063E070E00E94762F8C0F9D1FFC0112A330
+:102DC000B9016F5F7F4F7FA36EA30CA12BA14AA116
+:102DD000CE010E9482151DA239C01DA21FA21EA2F3
+:102DE00035C0442399F12EA13FA1C90163E070E0F1
+:102DF0000E94762F7C01FE01E80FF91F12A3B90192
+:102E00006F5F7F4F7FA36EA38130910591F082E0C9
+:102E1000E816F104D9F40CA12BA14AA1CE010E941D
+:102E200082158DA1843091F081E090E09FA38EA364
+:102E30000DC0423059F400E02BA14AA1CE010E94FE
+:102E400082158DA1843011F0FFA2EEA2DF91CF9107
+:102E50001F910F91FF90EF900895CF92DF92EF9224
+:102E6000FF920F931F93CF93DF93EC01E8A1F9A199
+:102E7000309709F009958E0108511F4FC8010E9433
+:102E80009A17E12CF12CC82ED12C0FC060E0C8019C
+:102E90000E94AE17682FCE010E94901661E0C80113
+:102EA0000E94BF178FEFE81AF80AEC14FD0470F3C4
+:102EB000DF91CF911F910F91FF90EF90DF90CF9016
+:102EC0000895FC0142837483638311821082089504
+:102ED0000F931F93CF93DF93EC01062F0E94E0170F
+:102EE000182F298130E0C90101966A8170E00E94A3
+:102EF0008A2F488150E08417950729F4812F0E947A
+:102F0000E31780E012C0EB81FC81E20FF31F008326
+:102F10002981822F90E001966A8170E00E948A2FB9
+:102F20008983812F0E94E31781E0DF91CF911F9168
+:102F30000F910895CF93DF93EC010E94E017298150
+:102F40009881291710F0C22F02C0CA81C20FC91B75
+:102F50000E94E3178C2FDF91CF910895FC0120810F
+:102F6000862F90E0820F911D628170E00E948A2F6F
+:102F70000380F481E02DE80FF91F808108950F93FD
+:102F80001F93CF93DF931F92CDB7DEB78C01698378
+:102F90000E94E017482FF80180816981262F30E0D8
+:102FA000280F311D6281C90170E00E948A2F808341
+:102FB000842F0F90DF91CF911F910F910C94E31705
+:102FC0008FB7F89408958FBF0895FC01CB0120912D
+:102FD0006E032430B1F421812F702093E90040E08A
+:102FE00050E064E070E00E94BA0F81110BC0909134
+:102FF000E80095FD07C09091E8009E779093E80067
+:10300000089582E0089520916E032430A9F4FC0114
+:1030100081818F708093E9003091F3002091F2005C
+:10302000932F80E0822B892B49F08091E8008E77E6
+:103030008093E8000C946F1182E0089580E0089579
+:1030400020916E03243051F4FC0121812F702093D4
+:10305000E9002091E80020FD0C9403180895FC017C
+:10306000CB0120916E03243011F080E00895268179
+:103070002F702093E9002091E80022FFF6CF2091E5
+:10308000E80025FFF2CF40E050E064E070E00E94ED
+:1030900009108091E80085FD05C08091E8008B77DC
+:1030A0008093E80081E0089590930F0280930E02D0
+:1030B000089580910E0290910F020895E0910E0202
+:1030C000F0910F02309721F00190F081E02D0994EA
+:1030D00080E00895E0910E02F0910F02309721F008
+:1030E0000280F381E02D09940895E0910E02F091A1
+:1030F0000F02309721F00480F581E02D09940895A6
+:1031000020911002309111028217930771F0909371
+:10311000110280931002E0910E02F0910F0230979D
+:1031200021F00680F781E02D099408952091120284
+:10313000309113028217930771F0909313028093DA
+:103140001202E0910E02F0910F02309721F00084FC
+:10315000F185E02D099408950E94B6240E948D0502
+:103160000E948A250C945F2B0C94CE075F926F927D
+:103170007F928F929F92AF92BF92CF92DF92EF9207
+:10318000FF920F931F93CF93DF93CDB7DEB72A97AC
+:103190000FB6F894DEBF0FBECDBF0E947E0694E14D
+:1031A000C92E92E0D92E00E010E0AA24A394B12CFD
+:1031B000502E802F0E94C4073C01F601E190F1904F
+:1031C0006F01E826F926E114F10431F40F5F1F4F77
+:1031D0000430110569F73AC08091680281FD0E94B0
+:1031E000CD0720E030E04501022E02C0880C991C7A
+:1031F0000A94E2F7C4018E219F21892B09F12E83C5
+:103200005F826820792081E0672809F480E0888760
+:103210000E94BF248160782F9A8789874E815F81C1
+:1032200068858A850E946F19F801EE0FFF1FEC5E1A
+:10323000FD4F80819181882599259183808316C0D7
+:103240002F5F3F4F2C30310571F6C0CF8FEF898350
+:103250008A831B820E94BF248160782F9D838C8388
+:1032600049815A816B818D810E946F190E94772854
+:1032700010911C020E945E181817D9F00E945E1867
+:1032800080931C022A960FB6F894DEBF0FBECDBF06
+:10329000DF91CF911F910F91FF90EF90DF90CF9032
+:1032A000BF90AF909F908F907F906F905F900C94A5
+:1032B000B4182A960FB6F894DEBF0FBECDBFDF91CB
+:1032C000CF911F910F91FF90EF90DF90CF90BF9023
+:1032D000AF909F908F907F906F905F900895CF9365
+:1032E000DF93CDB7DEB72B970FB6F894DEBF0FBED6
+:1032F000CDBF4F83588769877A878B87DE01119608
+:1033000086E0FD0111928A95E9F785E0FE01379686
+:1033100001900D928A95E1F749815A816B817C81F8
+:103320008D819E810E9447212B960FB6F894DEBFB7
+:103330000FBECDBFDF91CF910895CF93C82F8823C3
+:1033400009F4C1C0823859F40E945E1881FDBBC0E7
+:1033500089E30E94AC230E94282489E30CC08338AF
+:1033600079F40E945E1880FDAEC083E50E94AC2314
+:103370000E94282483E50E94CE23CF910C94282418
+:10338000843859F40E945E1882FD9DC087E40E9433
+:10339000AC230E94282487E4EECF8450813A48F47D
+:1033A0008C2F0E94C72A81118EC08C2F0E94AC23C3
+:1033B000E4CF8C2F805E883050F4C77081E090E0BD
+:1033C00001C0880FCA95EAF70E94EF23D6CF8C2F51
+:1033D000855A833078F4C53A29F0C63A31F482E848
+:1033E00090E005C081E890E002C083E890E0CF91D2
+:1033F0000C9480188C2F885A833108F064C0C83A26
+:1034000039F1C93A41F1CA3A49F1CB3A51F1CC3AD2
+:1034100059F1CD3A61F1C03B69F1CE3A71F1CF3A41
+:1034200079F1C13B81F1C23B89F1C33B91F1C43BCE
+:1034300099F1C53BA1F1C63BA9F1C73BB1F1C83B2E
+:10344000B9F1C93BC1F1CA3BC9F58AE292E038C083
+:1034500082EE90E035C089EE90E032C08AEE90E0D6
+:103460002FC085EB90E02CC086EB90E029C087EB65
+:1034700090E026C08CEC90E023C08DEC90E020C062
+:1034800083E891E01DC08AE891E01AC082E991E0EA
+:1034900017C084E991E014C081E292E011C083E298
+:1034A00092E00EC084E292E00BC085E292E008C098
+:1034B00086E292E005C087E292E002C080E090E000
+:1034C000CF910C949618CF910895882309F44DC09C
+:1034D000823859F40E945E1881FF47C089E30E9438
+:1034E000AC230E94282489E30CC0833871F40E9425
+:1034F0005E1880FF3AC083E50E94AC230E94282416
+:1035000083E50E94CE230C942824843859F40E9429
+:103510005E1882FF2AC087E40E94AC230E94282400
+:1035200087E4EFCF982F9450913A08F4EACF982F80
+:10353000905E983058F4282F277081E090E001C009
+:10354000880F2A95EAF70E94F523DDCF982F955A28
+:10355000933020F480E090E00C948018885A8331F6
+:1035600020F480E090E00C9496180895882321F0D0
+:103570000E94EF230C9428240895882321F00E94B0
+:10358000F5230C9428240895BF92CF92DF92EF92F6
+:10359000FF920F931F93CF93DF93CDB7DEB727979B
+:1035A0000FB6F894DEBF0FBECDBF8C0185E0F801E9
+:1035B000DE01119601900D928A95E1F7F8013081B4
+:1035C0002181F280558152955F7083819481892B8E
+:1035D00039F02F3F41F481E090E03F3F31F003C0EC
+:1035E00081E090E002C080E090E080FD73C3398309
+:1035F0002A8389819A815E830E946923B92E8F83F1
+:103600000E9468230E9490222B2D22952F7030E07B
+:103610005E816F812530310509F4E6C06CF42430F9
+:1036200031050CF0A2C04B2D407F8B2D8F702230C6
+:1036300031050CF045C017C02C3031054CF42A3050
+:1036400031050CF0E7C12830310509F043C3E5C06E
+:103650002D30310509F4BAC20CF4A2C22F30310565
+:1036600009F038C323C3182F411101C002C01295BD
+:10367000107FFF2059F0112309F46BC2812F6F8353
+:103680000E94FF230E9428246F8163C2862F0E941C
+:10369000651A112309F41EC3812F0E940524279661
+:1036A0000FB6F894DEBF0FBECDBFDF91CF911F9153
+:1036B0000F91FF90EF90DF90CF90BF900C94282453
+:1036C000403211F08295807F662319F0613071F5E8
+:1036D00023C0FF20B1F0511101C032C0513081F53B
+:1036E00027960FB6F894DEBF0FBECDBFDF91CF9106
+:1036F0001F910F91FF90EF90DF90CF90BF900C94AF
+:103700000F24511101C003C0513009F4E3C28E836C
+:103710000E9412248E819AC1FF2021F0563008F0B9
+:10372000D9C20EC0553008F0D5C290C1FF20C9F0F3
+:10373000552331F0F801958190FF0BC29F7095835E
+:1037400027960FB6F894DEBF0FBECDBFDF91CF91A5
+:103750001F910F91FF90EF90DF90CF90BF900C944E
+:10376000B61A552309F472C109C22B2D2695269548
+:10377000237030E02115310529F02130310509F0A1
+:10378000A9C219C0FF2021F0862F9B2D937002C083
+:1037900080E090E027960FB6F894DEBF0FBECDBF55
+:1037A000DF91CF911F910F91FF90EF90DF90CF901D
+:1037B000BF900C948018FF2021F0862F9B2D9370D2
+:1037C00002C080E090E027960FB6F894DEBF0FBEEF
+:1037D000CDBFDF91CF911F910F91FF90EF90DF90C0
+:1037E000CF90BF900C949618862FFF2019F00E945E
+:1037F0007D2702C00E94E52727960FB6F894DEBF0A
+:103800000FBECDBFDF91CF911F910F91FF90EF9031
+:10381000DF90CF90BF900C946C288B2D837009F0B3
+:1038200079C0F11057C2262F229526952770220FB6
+:10383000220F862F8F70C82ED12CE12CF12C022E56
+:1038400004C0CC0CDD1CEE1CFF1C0A94D2F764FFF4
+:1038500010C06FE070E080E090E004C0660F771F5A
+:10386000881F991F2A95D2F760957095809590953D
+:1038700003C060E070E0CB012B2D269526952370C8
+:10388000422F50E042305105D9F04330510569F1E3
+:103890006C297D298E299F294130510551F12796A8
+:1038A0000FB6F894DEBF0FBECDBFDF91CF911F9151
+:1038B0000F91FF90EF90DF90CF90BF900C94A522D6
+:1038C0006C297D298E299F2927960FB6F894DEBF93
+:1038D0000FBECDBFDF91CF911F910F91FF90EF9061
+:1038E000DF90CF90BF900C94B7220E94A522C70111
+:1038F000B60127960FB6F894DEBF0FBECDBFDF919D
+:10390000CF911F910F91FF90EF90DF90CF90BF90DC
+:103910000C949322FF2019F08B2D817001C08695A5
+:10392000882309F4D7C1262F229526952770220FC8
+:10393000220F862F8F70C82ED12CE12CF12C022E55
+:1039400004C0CC0CDD1CEE1CFF1C0A94D2F764FFF3
+:1039500010C06FE070E080E090E004C0660F771F59
+:10396000881F991F2A95D2F760957095809590953C
+:1039700003C060E070E0CB012B2D269526952370C7
+:10398000422F50E042305105D9F04330510569F1E2
+:103990006C297D298E299F294130510551F12796A7
+:1039A0000FB6F894DEBF0FBECDBFDF91CF911F9150
+:1039B0000F91FF90EF90DF90CF90BF900C94442335
+:1039C0006C297D298E299F2927960FB6F894DEBF92
+:1039D0000FBECDBFDF91CF911F910F91FF90EF9060
+:1039E000DF90CF90BF900C9456230E944423C701D0
+:1039F000B60127960FB6F894DEBF0FBECDBFDF919C
+:103A0000CF911F910F91FF90EF90DF90CF90BF90DB
+:103A10000C943223603F59F120F4603E08F494C0C6
+:103A200008C0623F09F467C0F0F1633F09F08CC041
+:103A300065C0162F1F708B2D8F71FF2021F00E9403
+:103A4000DD22812F7DCE0E94F822812F27960FB68E
+:103A5000F894DEBF0FBECDBFDF91CF911F910F91C4
+:103A6000FF90EF90DF90CF90BF900C94BD1AFF2095
+:103A7000B1F0553008F02EC18B2D8F7127960FB6FF
+:103A8000F894DEBF0FBECDBFDF91CF911F910F9194
+:103A9000FF90EF90DF90CF90BF900C94172356309B
+:103AA00008F018C1E9CFFF2099F08B2D8F71279670
+:103AB0000FB6F894DEBF0FBECDBFDF91CF911F913F
+:103AC0000F91FF90EF90DF90CF90BF900C94DD228C
+:103AD0008B2D8F7127960FB6F894DEBF0FBECDBF2A
+:103AE000DF91CF911F910F91FF90EF90DF90CF90DA
+:103AF000BF900C94F822F110EBCFD7CFFF2099F0B4
+:103B00008B2D8F7127960FB6F894DEBF0FBECDBFF9
+:103B1000DF91CF911F910F91FF90EF90DF90CF90A9
+:103B2000BF900C94CE2227960FB6F894DEBF0FBE3E
+:103B3000CDBFDF91CF911F910F91FF90EF90DF905C
+:103B4000CF90BF900C94C922FF20A9F0552309F40F
+:103B5000ACCF862F27960FB6F894DEBF0FBECDBF31
+:103B6000DF91CF911F910F91FF90EF90DF90CF9059
+:103B7000BF900C949D19552309F4AACF862F279640
+:103B80000FB6F894DEBF0FBECDBFDF91CF911F916E
+:103B90000F91FF90EF90DF90CF90BF900C94651A3B
+:103BA0004B2D4F70C8010E94E50227960FB6F8947E
+:103BB000DEBF0FBECDBFDF91CF911F910F91FF9060
+:103BC000EF90DF90CF90BF900C94FD21F11082C058
+:103BD0009B2D9F70492F50E04230510599F144F4DC
+:103BE0004115510569F04130510509F073C019C004
+:103BF00043305105C1F14430510509F06BC044C058
+:103C000027960FB6F894DEBF0FBECDBFDF91CF91E0
+:103C10001F910F91FF90EF90DF90CF90BF900C9489
+:103C2000702B27960FB6F894DEBF0FBECDBFDF9185
+:103C3000CF911F910F91FF90EF90DF90CF90BF90A9
+:103C40000C94872B27960FB6F894DEBF0FBECDBF1E
+:103C5000DF91CF911F910F91FF90EF90DF90CF9068
+:103C6000BF900C94A32B27960FB6F894DEBF0FBE1F
+:103C7000CDBFDF91CF911F910F91FF90EF90DF901B
+:103C8000CF90BF900C94B62B862F27960FB6F89442
+:103C9000DEBF0FBECDBFDF91CF911F910F91FF907F
+:103CA000EF90DF90CF90BF900C94DA2B4B2D4F709C
+:103CB000C80127960FB6F894DEBF0FBECDBFDF91C7
+:103CC000CF911F910F91FF90EF90DF90CF90BF9019
+:103CD0000C940E0827960FB6F894DEBF0FBECDBF2A
+:103CE000DF91CF911F910F91FF90EF90DF90CF90D8
+:103CF000BF9008950E940C240E94E1230E94282472
+:103D00000E9418290E946C2880E090E00E94801890
+:103D100080E090E00C9496180E94FC230C947A1E8C
+:103D20000E946923292F22952F7030E02C30310515
+:103D30004CF42A3031056CF422503109223031051F
+:103D400070F407C02C30310531F02F30310539F4D3
+:103D500002C081E0089593FB882780F9089580E0F0
+:103D60000895CF93DF9300D000D01F92CDB7DEB778
+:103D70000F900F900F900F900F90DF91CF910895BB
+:103D8000CF93DF9300D000D000D0CDB7DEB726961A
+:103D90000FB6F894DEBF0FBECDBFDF91CF9108956F
+:103DA0001F93CF93DF93C091530216E012C0D0E06F
+:103DB0001C9FF0011D9FF00D1124ED5DFD4F408112
+:103DC000518162817381848195810E94C01E2196F8
+:103DD000C77080915402C813EACFDF91CF911F9131
+:103DE000089540911D0250911E0260911F02709132
+:103DF000200280912102909122020C94C01E0F9308
+:103E00001F93CF93DF938091220282958F7009F0E8
+:103E100069C080911F02882309F464C0A0915302F5
+:103E2000D0915402B0911D02C0911E0280912002D7
+:103E30009091210221E030E0BF3F11F020E030E01E
+:103E4000122FBC016095709506E04AC0009721F0E2
+:103E5000CF3F29F4212F05C021E030E002C020E04F
+:103E600030E020FD3BC04A2F50E0049FF001059F49
+:103E7000F00D1124ED5DFD4F2181C2132FC0208173
+:103E8000B2132CC02281211129C02381348128172B
+:103E9000390718F0281B390B02C0260F371F283CA2
+:103EA0003105E0F4809122028F70806180932202BC
+:103EB00086E0849FF001859FF00D1124E85DFD4FA1
+:103EC00080818F70806180838DE192E00E94C41AAE
+:103ED000DF91CF911F910F910C94D01EAF5FA7700F
+:103EE000AD13B4CFDF91CF911F910F910895EF9251
+:103EF000FF920F931F93CF93DF93CDB7DEB76297F7
+:103F00000FB6F894DEBF0FBECDBF8C0185E0F8017F
+:103F1000DE011D9601900D928A95E1F7D8014C9132
+:103F200011965C91119712966C9112971396ED90E1
+:103F3000FC90149770911D02E0911E028091200266
+:103F400090912102009739F0EF3F41F421E030E0F9
+:103F50007F3F31F003C021E030E002C020E030E0DC
+:103F600020FD5CC120911F02222309F4F1C0E81654
+:103F7000F90628F09701281B390BC90104C0809568
+:103F800090958E0D9F1D883C910508F098C08091FA
+:103F90002202982F907F09F064C0E51314C07413B7
+:103FA00012C0611110C08F708061809322020E9444
+:103FB000F11E8DE192E00E94C41A80912202D80184
+:103FC00015968C9343C1EF2839F05F3F41F481E0AF
+:103FD00090E04F3F31F003C081E090E002C080E00C
+:103FE00090E080FD03C081E0862702C080E090E081
+:103FF00080FF2EC0809153022091540236E013C0FE
+:1040000090E0389FF001399FF00D1124ED5DFD4FD8
+:104010007181571306C07081471303C07281671303
+:1040200017C0019687708213EBCF12C19F7059F0B1
+:10403000882309F40BC107C09F7029F0F80195810E
+:10404000907F09F403C1805E883008F4FFC0D2C0BD
+:10405000662309F4FBC080912202816080932202D2
+:10406000F5C0E51308C0741306C0611104C0D8017F
+:1040700015968C939DC04D875E878D859E856A8B36
+:104080000E94901E6A89882309F4B4C0662309F44B
+:10409000B1C020912202822F82958F7090E002970A
+:1040A0000CF4C6C080911D0290911E0298878F83E8
+:1040B0001986FB86EA862C87CE01079646C080913A
+:1040C0002202982F907F59F47E2DF98AE88A8989F7
+:1040D0000E94B11E8DE192E00E94C41A95C0E513C2
+:1040E00011C074130FC061110DC0F8018583C801A0
+:1040F0000E94C41AEDE1F2E086E0DF011D928A958C
+:10410000E9F7A2C04D875E878D859E856A8B0E94E8
+:10411000901E6A89882309F46DC0662309F46AC079
+:1041200020912202822F82958F7090E002970CF4EA
+:104130007FC080911D0290911E029A8389831B8209
+:10414000FD82EC822E83CE0101960E94C41A70C0BB
+:10415000E816F90628F09701281B390BC90104C09D
+:10416000809590958E0D9F1D883C910508F046C066
+:10417000662309F43FC0E51330C074132EC02091AC
+:10418000220220FD21C0322F32953F70832F90E014
+:104190000097D1F0D80115962C9315970F9741F001
+:1041A000832F8F5F8295807F2F70282B15962C93FD
+:1041B000C8010E94C41A86E0F801ADE1B2E00190A6
+:1041C0000D928A95E1F73EC086E0F801ADE1B2E0DC
+:1041D00001900D928A95E1F737C04D875E878D85F6
+:1041E0009E850E94901E811123C0809122028160D1
+:1041F00080932202C8010E94C41A26C07E2DF98A2B
+:10420000E88A89890E94B11EEDE1F2E086E0DF01D3
+:104210001D928A95E9F70E94F11E18C0662351F39A
+:104220004D875E878D859E850E94901E882311F3A1
+:1042300086E0F801ADE1B2E001900D928A95E1F7D8
+:104240000E94FF1E0E94F11E81E014C080E012C097
+:104250004D875E878D859E850E946923292F229533
+:104260002F7030E0223031050CF4E0CE24303105DF
+:104270000CF6E2CE62960FB6F894DEBF0FBECDBF4D
+:10428000DF91CF911F910F91FF90EF9008951F93B1
+:10429000CF93DF93CDB7DEB72C970FB6F894DEBF80
+:1042A0000FBECDBF4F83588769877A878B879C87DE
+:1042B000CE0107960E94771F8823D9F02F81388579
+:1042C0008A859B85892B39F03F3F19F080E090E08B
+:1042D00004C02F3FD9F781E090E0892B09F06DC031
+:1042E0004F81588569857A858B859C850E94C01E83
+:1042F00064C086E0FE013796DE01119601900D92B2
+:104300008A95E1F7FF81E8854A855B85411551056E
+:1043100039F0EF3F41F481E090E0FF3F31F003C01E
+:1043200081E090E002C080E090E080FD46C02091F6
+:10433000540230E0C90101968770992760915302B9
+:1043400070E08617970709F440C0F983EA835D831C
+:104350004C8396E0929FD001939FB00D1124AD5DE8
+:10436000BD4FFE01319601900D929A95E1F7809331
+:1043700054020E94D01E21C0189FC00111248D5DDF
+:104380009D4F0E94771F882371F1E09153021E9F79
+:10439000F0011124ED5DFD4F4081518162817381F7
+:1043A000848195810E94C01E8091530290E0019605
+:1043B000877099278093530201C016E080915302C1
+:1043C000909154028913D8CF0EC00E948C1E109277
+:1043D000540210925302EDE1F2E086E0DF011D92FB
+:1043E0008A95E9F7EACF2C960FB6F894DEBF0FBE98
+:1043F000CDBFDF91CF911F910895DF92EF92FF9291
+:104400000F931F93CF93DF93EC01009709F46CC0D7
+:10441000D12CEE24E394F12C8E010F5F1F4FFE018F
+:104420008491843748F4843008F04AC0813071F0B8
+:10443000823009F059C01EC0853709F43DC070F1C3
+:10444000982F9458903708F04FC03DC02296F8013D
+:104450008491982F905E983050F48770FE2D01C0A3
+:10446000FF0F8A95EAF78F2F0E94FF2330C00E942A
+:104470009D192DC02296F8018491982F905E983056
+:1044800050F48770FE2D01C0FF0F8A95EAF78F2F39
+:104490000E9405241CC00E94651A19C02296F801CA
+:1044A000049107C08FE99FE00197F1F700C0000079
+:1044B00001500111F7CF0BC02296F801D49007C02C
+:1044C0000E949D1903C08F770E94651AE8018D2D07
+:1044D00007C08150EFE9FFE03197F1F700C000001D
+:1044E000882309F499CFF5CFDF91CF911F910F91D8
+:1044F000FF90EF90DF9008956093590270935A02F5
+:1045000080935B0290935C020C947A1E6093550238
+:104510007093560280935702909358020C947A1E1F
+:1045200008950C947C220F931F93009159021091CF
+:104530005A0220915B0230915C02602B712B822B1E
+:10454000932B1F910F910C947C220F931F9300913A
+:10455000590210915A0220915B0230915C02602353
+:104560007123822393231F910F910C947C220F932C
+:104570001F930091590210915A0220915B023091D1
+:104580005C0260277127822793271F910F910C945B
+:104590007C2260E070E0CB010C94862241E050E088
+:1045A00060E070E004C0440F551F661F771F8A95B6
+:1045B000D2F7CB01BA010C94862241E050E060E0D2
+:1045C00070E004C0440F551F661F771F8A95D2F70D
+:1045D0008091550290915602A0915702B0915802D5
+:1045E000482B592B6A2B7B2BCB01BA010C948622CA
+:1045F00041E050E060E070E004C0440F551F661FCA
+:10460000771F8A95D2F74095509560957095809167
+:10461000550290915602A0915702B091580248233A
+:1046200059236A237B23CB01BA010C94862241E0F3
+:1046300050E060E070E004C0440F551F661F771F14
+:104640008A95D2F78091550290915602A091570217
+:10465000B0915802482759276A277B27CB01BA0116
+:104660000C9486220F931F930091550210915602CD
+:104670002091570230915802602B712B822B932B83
+:104680001F910F910C9486220F931F930091550256
+:1046900010915602209157023091580260237123E5
+:1046A000822393231F910F910C9486220F931F93C3
+:1046B00000915502109156022091570230915802F4
+:1046C00060277127822793271F910F910C948622D0
+:1046D0000895CF92DF92EF92FF920F931F93CF93A3
+:1046E000DF93EC01C0905902D0905A02E0905B0237
+:1046F000F0905C028091550290915602A091570271
+:10470000B0915802C82AD92AEA2AFB2A0FE110E000
+:10471000B701A601002E04C0769567955795479579
+:104720000A94D2F740FF08C0BE01802F0E94E00328
+:104730008130910509F007C00150110948F7BE0109
+:1047400080E00E94E003DF91CF911F910F91FF90D5
+:10475000EF90DF90CF90089540911B0150911C0184
+:1047600020E030E09FEFFA01E20FF31F628168174B
+:10477000A1F09F3F19F4611101C0922F2F5F3F4FAD
+:104780002630310581F707C0FA01E90FF11D97FDC9
+:10479000FA95828308959F3FB9F7089540911B01D0
+:1047A00050911C0120E030E0FA01E20FF31F9281EA
+:1047B000981301C012822F5F3F4F26303105A1F7B9
+:1047C000089581E090E0E0911B01F0911C01E80F59
+:1047D000F91F1082019688309105A9F708959091EC
+:1047E0005D02982B90935D020895809590915D02F3
+:1047F000982390935D02089510925D020895909120
+:104800005E02982B90935E020895809590915E02CF
+:10481000982390935E02089510925E02089580930B
+:104820005F02089510925F02089540911B0150911C
+:104830001C0120E030E080E0FA01E20FF31F9181DB
+:1048400091118F5F2F5F3F4F27303105A9F70895F2
+:10485000E0911B01F0911C0180915D028083E09149
+:104860001B01F0911C01808190915E02892B808355
+:1048700090915F02992361F0E0911B01F0911C017E
+:104880008081892B80830E94152481110E9412242B
+:1048900080911B0190911C010C946A1880916E0309
+:1048A000843009F11092690220E488E190E00FB6AB
+:1048B000F894A895809360000FBE2093600083B7A2
+:1048C000817F846083BF83B7816083BF789488953C
+:1048D00083B78E7F83BF88E10FB6F8948093600022
+:1048E000109260000FBE0895CF930E94E3020E94D1
+:1048F0007E060E94E402C0E08C2F0E94C407892B30
+:1049000029F4CF5FC430C1F780E001C081E0CF91CE
+:1049100008950E948C1E0C945F2B1F920F920FB66D
+:104920000F9211248F939F93AF93BF93809169024D
+:10493000811113C080916A0290916B02A0916C0268
+:10494000B0916D024196A11DB11D80936A029093B2
+:104950006B02A0936C02B0936D02BF91AF919F91D7
+:104960008F910F900FBE0F901F90189582E084BD1D
+:1049700093E095BD9AEF97BD80936E0008958FB731
+:10498000F89440916A0250916B0260916C027091B0
+:104990006D028FBFCA010895CF92DF92EF92FF920E
+:1049A0000F931F932FB7F89440916A0250916B02B6
+:1049B00060916C0270916D022FBF6A017B01EE2441
+:1049C000FF248C0120E030E0C016D106E206F30699
+:1049D00020F09A01281B390B05C09C0120953095C9
+:1049E000240F351FC9011F910F91FF90EF90DF90A9
+:1049F000CF9008951F920F920FB60F9211248F93AC
+:104A00009F93AF93BF9380916A0290916B02A091A4
+:104A10006C02B0916D020196A11DB11D80936A02D6
+:104A200090936B02A0936C02B0936D02BF91AF9113
+:104A30009F918F910F900FBE0F901F9018950E941D
+:104A4000A111F8942FEF87EA91E621508040904021
+:104A5000E1F700C0000087E090EBDC018093780371
+:104A600090937903A0937A03B0937B032CE088E1C1
+:104A700090E00FB6F894A895809360000FBE209345
+:104A80006000FFCFCF92DF92EF92FF920F931F93C0
+:104A9000CF93DF93C82ED12C01E010E08D2D0E9422
+:104AA000C4077C01C0E0D0E098010C2E02C0220FA8
+:104AB000331F0A94E2F72E213F21232B29F421965C
+:104AC000CC30D10589F708C06C2F7D2D80E00E9485
+:104AD000BB03C812F4CF06C0D39484E0D812DECF53
+:104AE00080E001C081E0DF91CF911F910F91FF9095
+:104AF000EF90DF90CF900895CF93C82F8CE20E9463
+:104B00004225882321F08C2FCF910C94422580E000
+:104B1000CF910895CF930E94CD26811102C00E94AB
+:104B2000AE26C5E608C00E947E068FE39CE9019789
+:104B3000F1F700C00000C150B1F789E20E947C2566
+:104B400081110AC18AE20E947C2581110E94AE2651
+:104B500085E00E947C2581110E941F250E94D82695
+:104B60008093680287E00E947C25882399F18BE17D
+:104B70000E947C25882351F09091680291FB882740
+:104B800080F921E0822780FB91F922C08EE00E940B
+:104B90007C25882351F09091680292FB882780F948
+:104BA00021E0822780FB92F913C080E10E947C25DE
+:104BB00090916802882341F093FB882780F921E0D7
+:104BC000822780FB93F904C0892F809580FB90F9A0
+:104BD00090936802809168020E94DC260E94EA2677
+:104BE00080937B0280EE0E947C25882341F0809197
+:104BF0007B02982F909590FB80F980937B0289E34C
+:104C00000E947C25882359F090917B0291FB882794
+:104C100080F921E0822780FB91F990937B0282EE5C
+:104C20000E947C25882359F090917B0292FB882773
+:104C300080F921E0822780FB92F990937B0286EE37
+:104C40000E947C25882359F090917B0293FB882752
+:104C500080F921E0822780FB93F990937B0283EE19
+:104C60000E947C25882359F090917B0294FB882731
+:104C700080F921E0822780FB94F990937B0285E301
+:104C80000E947C25882359F090917B0295FB882710
+:104C900080F921E0822780FB95F990937B0281E3E4
+:104CA0000E947C25882359F090917B0296FB8827EF
+:104CB00080F921E0822780FB96F990937B0281E1C5
+:104CC0000E947C25882359F090917B0297FB8827CE
+:104CD00080F921E0822780FB97F990937B028091F5
+:104CE0007B020E94EE2687E20E947C25C82F8EE17F
+:104CF0000E947C258111C2608FE10E947C25811178
+:104D0000C46080E20E947C258111C86081E20E941B
+:104D10007C258111C06182E20E947C258111C062E4
+:104D200083E20E947C258111C06484E20E947C257C
+:104D3000882311F0C06802C0CC2329F08C2F0E9478
+:104D4000E5266C2F03C00E94E126682F70E080E00A
+:104D500090E0CF910C949122CF9108956DEE7EEF6B
+:104D600080E090E00E94BA2F60E082E090E00E9434
+:104D7000AC2F60E083E090E00E94AC2F60E084E024
+:104D800090E00E94AC2F60E085E090E00E94AC2FA4
+:104D900060E086E090E00C94AC2F80E090E00E9410
+:104DA000A62F21E08D3E9E4F09F020E0822F08952E
+:104DB00082E090E00C949E2F682F82E090E00C94AB
+:104DC000AC2F83E090E00C949E2F682F83E090E05E
+:104DD0000C94AC2F84E090E00C949E2F682F84E01C
+:104DE00090E00C94AC2F86E090E00C949E2F682FFE
+:104DF00086E090E00C94AC2F8091760280FF0BC08F
+:104E00006091200185E0689FB00111247595679538
+:104E1000759567952AC081FF09C06091200185E0E2
+:104E2000689FB0011124759567951FC082FF07C068
+:104E30006091200185E0689FB001112416C0409167
+:104E400070024423C9F060911F01461788F7209132
+:104E5000200185E0289F90011124429FC001439FBB
+:104E6000900D112470E00E948A2F6038710540F483
+:104E70006115710539F002C065E070E0862F089574
+:104E80008FE7089581E008958091760280FF08C041
+:104E900060911E0170E0759567957595679521C0C5
+:104EA00081FF06C060911E0170E07595679519C07D
+:104EB00082FF04C060911E0170E010C080917002FA
+:104EC0008823C1F060911D018617A0F790911E0103
+:104ED000989FC001112470E00E948A2F60387105EC
+:104EE00028F46115710521F0862F08958FE7089544
+:104EF00081E0089561E070E0F4CF803F21F40E94EA
+:104F0000FC26819504C0813F29F40E94FC268093F1
+:104F100073020895823F21F40E94FC26819504C00B
+:104F2000833F29F40E94FC26809372020895893FF2
+:104F300019F40E94442705C08A3F31F40E94442797
+:104F400081958093740208958B3F21F40E94442739
+:104F5000819504C08C3F29F40E94442780937502F8
+:104F60000895843F21F480917102816017C0853FCC
+:104F700021F480917102826011C0863F21F48091FA
+:104F8000710284600BC0873F21F4809171028860B8
+:104F900005C0883F31F48091710280618093710275
+:104FA00008958D3F21F48091760281600BC08E3F81
+:104FB00021F480917602826005C08F3F29F48091B0
+:104FC00076028460809376020895803F29F4809170
+:104FD000730287FF6EC007C0813F41F48091730266
+:104FE00018160CF066C01092730263C090917202A2
+:104FF000823F19F497FF5DC005C0833F31F4191655
+:105000000CF057C01092720254C0893F31F4809165
+:10501000740218160CF04DC006C08A3F39F4809116
+:10502000740287FF46C01092740243C08B3F29F47C
+:105030008091750287FF3DC006C08C3F39F4809196
+:1050400075021816B4F51092750233C0843F21F42E
+:10505000809171028E7F05C0853F31F4809171028D
+:105060008D7F8093710225C0863F21F4809171026B
+:105070008B7FF7CF873F21F480917102877FF1CF3B
+:10508000883F21F4809171028F7EEBCF8D3F21F418
+:10509000809176028E7F0BC08E3F21F48091760244
+:1050A0008D7F05C08F3F29F4809176028B7F80939E
+:1050B00076028091720281110EC08091730281117B
+:1050C0000AC080917402811106C08091750281111D
+:1050D00002C010927002089581E792E00E94751854
+:1050E0000E94BF2490936F0280936E020895CF9325
+:1050F00080916E0290916F020E94CC2440917002C8
+:10510000442321F02091210130E006C020912201AA
+:105110005AE0259F900111248217930708F486C056
+:105120008091720281110DC090917302911109C09A
+:1051300090917402911105C090917502992309F420
+:1051400075C04F3F19F04F5F40937002181624F45A
+:105150000E94FC26809372028091720287FF05C034
+:105160000E94FC268195809372028091730218162A
+:1051700024F40E94FC26809373028091730287FFBF
+:1051800005C00E94FC268195809373026091720293
+:10519000662339F1C0917302CC2319F1772767FD9B
+:1051A0007095872F972F0E94FA2C23E333E343E374
+:1051B0005FE30E94AE2D0E94C72C609372026C2F99
+:1051C000772767FD7095872F972F0E94FA2C23E38E
+:1051D00033E343E35FE30E94AE2D0E94C72C60934C
+:1051E000730280917402181624F40E94442780935D
+:1051F00074028091740287FF05C00E944427819544
+:105200008093740280917502181624F40E9444273A
+:10521000809375028091750287FF05C00E94442724
+:10522000819580937502CF910C946C28CF9108954D
+:10523000E1E7F2E085E0DF011D928A95E9F710923F
+:105240007002109276020895833089F130F4813033
+:1052500061F0823009F06EC019C0853009F449C090
+:10526000B8F1863009F066C055C020912201862F22
+:1052700090E0820F911D8F3F910520F4620F6093A3
+:10528000220108958FEF809322010895209121013A
+:10529000862F90E0820F911D8F3F910520F4620FC1
+:1052A0006093210108958FEF80932101089520914B
+:1052B0002001862F90E0820F911D8F3F910520F4F1
+:1052C000620F6093200108958FEF8093200108956D
+:1052D00020911F01862F90E0820F911D8F3F910535
+:1052E00020F4620F60931F0108958FEF80931F01D8
+:1052F000089520911E01862F90E0820F911D8F3F0F
+:10530000910520F4620F60931E0108958FEF809342
+:105310001E01089520911D01862F90E0820F911D9E
+:105320008F3F910520F4620F60931D0108958FEF68
+:1053300080931D010895833021F130F4813059F0BC
+:10534000823009F049C012C0853089F128F18630D9
+:1053500009F042C037C080912201681720F4861BF3
+:1053600080932201089510922201089580912101D5
+:10537000681720F4861B8093210108951092210163
+:10538000089580912001681720F4861B80932001E6
+:10539000089510922001089580911F01681720F44C
+:1053A000861B80931F01089510921F01089580911C
+:1053B0001E01681720F4861B80931E010895109229
+:1053C0001E01089580911D01681720F4861B8093AB
+:1053D0001D01089510921D01089541E050E060E024
+:1053E00070E004C0440F551F661F771F8A95D2F7DF
+:1053F000CB01BA010E9491220C948C1E873208F5D1
+:105400008E3108F0B9C08E3009F47EC060F4873068
+:1054100009F465C018F4863059F549C0883051F157
+:105420008B3031F5AEC0883130F4863108F0A9C038
+:105430008031F1F473C0893109F4A3C08B31C1F418
+:1054400059C08933F1F068F4893209F493C018F433
+:10545000873271F48FC0853309F48CC0883341F4EE
+:1054600090C0863409F46BC008F488C0883449F1D0
+:1054700080E008950E94D8260E94EA260E94F32622
+:1054800080C00E945918892B59F00E945918909396
+:105490007902809378020E948C1E80E090E004C024
+:1054A00080917802909179020E9454186AC080918C
+:1054B0006802817F8E7F8093680281E0809377020B
+:1054C00008950E948C1E2FEF83ED90E321508040C1
+:1054D0009040E1F700C000000E941F2552C080915B
+:1054E000680280FF03C0817F8E7F01C0816080934E
+:1054F000680247C09091680291FB882780F921E0FB
+:10550000822780FB91F913C09091680292FB882753
+:1055100080F921E0822780FB92F909C0909168020E
+:1055200093FB882780F921E0822780FB93F99093F1
+:105530006802882331F191609093680222C081E86B
+:1055400090E00E9480182FEF81EE94E0215080407F
+:105550009040E1F700C0000080E090E00E948018D9
+:105560002FEF89E698E1215080409040E1F700C09C
+:10557000000007C080E003C08D5101C089530E9424
+:10558000ED2981E0089580E0089580E00895CF93AB
+:10559000C82F80917702813071F020F0823009F0BD
+:1055A00083C037C0A0911B01B0911C018C91823245
+:1055B00009F07CC007C0A0911B01B0911C018C9127
+:1055C000823249F48C2F0E94C32A81111EC08C2F75
+:1055D0000E94FE291CC08C2F0E94C52A811115C073
+:1055E000C43169F030F4CB3081F0C03109F062C0D1
+:1055F00009C0C93221F0C83309F05CC006C010925E
+:10560000770258C082E08093770281E090E0817059
+:1056100054C0C932C1F060F4C431A9F020F4C730DD
+:1056200009F046C02EC0CE51CA3008F041C011C0AA
+:10563000CE3409F118F4CB34D9F517C0C13599F03F
+:10564000C235B1F50EC010927A0281E080937702E4
+:1056500034C0EC2FF0E0E455FE4F808180937A0255
+:1056600027C061E003C061E007C06AE080917A0270
+:105670000E9424291DC06AE080917A020E949B2921
+:1056800017C08EE18093220182E3809321018AE09A
+:105690008093200184E180931F0188E080931E01A4
+:1056A00088E280931D0104C01092770280E005C05B
+:1056B00081E003C080E090E0AACFCF9108950E94DE
+:1056C000CD26811102C00E94AE260E94F32680934F
+:1056D000770380FF02C0869501C080E00C94DF074D
+:1056E00080917703982F9695292F30E0233031054C
+:1056F0004CF49F5F990F8170892B816080937703B1
+:105700000E94F7268091770386950C94DF0780919D
+:105710007703982F969591F09158990F8170892B66
+:10572000809377038E7F91E009F490E08091770376
+:1057300090FB80F9809377030E94F726809177038E
+:1057400086950C94DF0780917703982F909590FBB6
+:1057500080F9809377030E94F7268091770380FF7A
+:1057600002C0869501C080E00C94DF07309177037A
+:10577000232F26952F5F2F77822F90E0317004978B
+:105780002CF4220F232B2093770302C0309377034E
+:1057900080917703282F2E7F91E009F490E090FB11
+:1057A00080F9809377030E94F7268091770386958E
+:1057B0000C94DF0720917703922F96959827990FE5
+:1057C000822F8170892B809377038E7F91E009F47B
+:1057D00090E08091770390FB80F9809377030E949B
+:1057E000F7268091770386950C94DF075058BB27E6
+:1057F000AA270ED075C166D130F06BD120F031F4FC
+:105800009F3F11F41EF45BC10EF4E095E7FB51C11C
+:10581000E92F77D180F3BA176207730784079507DA
+:1058200018F071F49EF58FC10EF4E0950B2EBA2F8F
+:10583000A02D0B01B90190010C01CA01A001112496
+:10584000FF27591B99F0593F50F4503E68F11A1642
+:10585000F040A22F232F342F4427585FF3CF4695D3
+:1058600037952795A795F0405395C9F77EF41F16F5
+:10587000BA0B620B730B840BBAF09150A1F0FF0FBF
+:10588000BB1F661F771F881FC2F70EC0BA0F621FAB
+:10589000731F841F48F4879577956795B795F7959B
+:1058A0009E3F08F0B3CF9395880F08F09927EE0F2D
+:1058B000979587950895D9D008F481E008950CD084
+:1058C0000FC107D140F0FED030F021F45F3F19F056
+:1058D000F0C0511139C1F3C014D198F39923C9F321
+:1058E0005523B1F3951B550BBB27AA2762177307E6
+:1058F000840738F09F5F5F4F220F331F441FAA1F9A
+:10590000A9F333D00E2E3AF0E0E830D09150504059
+:10591000E695001CCAF729D0FE2F27D0660F771F07
+:10592000881FBB1F261737074807AB07B0E809F0E9
+:10593000BB0B802DBF01FF2793585F4F2AF09E3F7E
+:10594000510568F0B6C000C15F3FECF3983EDCF350
+:10595000869577956795B795F7959F5FC9F7880FF7
+:10596000911D9695879597F90895E1E0660F771F49
+:10597000881FBB1F621773078407BA0720F0621BDA
+:10598000730B840BBA0BEE1F88F7E095089504D0D3
+:105990006894B111D9C00895BCD088F09F5790F099
+:1059A000B92F9927B751A0F0D1F0660F771F881F44
+:1059B000991F1AF0BA95C9F712C0B13081F0C3D05F
+:1059C000B1E00895C0C0672F782F8827B85F39F0FD
+:1059D000B93FCCF3869577956795B395D9F73EF4A3
+:1059E00090958095709561957F4F8F4F9F4F08954B
+:1059F000E89409C097FB3EF4909580957095619569
+:105A00007F4F8F4F9F4F9923A9F0F92F96E9BB271E
+:105A10009395F695879577956795B795F111F8CF9A
+:105A2000FAF4BB0F11F460FF1BC06F5F7F4F8F4F05
+:105A30009F4F16C0882311F096E911C0772321F0FB
+:105A40009EE8872F762F05C0662371F096E8862F93
+:105A500070E060E02AF09A95660F771F881FDAF7EA
+:105A6000880F9695879597F90895990F0008550F17
+:105A7000AA0BE0E8FEEF16161706E807F907C0F0D4
+:105A800012161306E407F50798F0621B730B840BDC
+:105A9000950B39F40A2661F0232B242B252B21F4B6
+:105AA00008950A2609F4A140A6958FEF811D811D56
+:105AB000089597F99F6780E870E060E008959FEF90
+:105AC00080EC089500240A94161617061806090695
+:105AD000089500240A941216130614060506089564
+:105AE000092E0394000C11F4882352F0BB0F40F4EC
+:105AF000BF2B11F460FF04C06F5F7F4F8F4F9F4F2C
+:105B0000089557FD9058440F551F59F05F3F71F0AD
+:105B10004795880F97FB991F61F09F3F79F0879514
+:105B20000895121613061406551FF2CF4695F1DF9D
+:105B300008C0161617061806991FF1CF869571052D
+:105B4000610508940895E894BB2766277727CB0161
+:105B500097F908958ADF08F48FEF08950BD0C0CF2E
+:105B6000B1DF28F0B6DF18F0952309F0A2CFA7CF58
+:105B70001124EACFC6DFA0F3959FD1F3950F50E033
+:105B8000551F629FF001729FBB27F00DB11D639FEF
+:105B9000AA27F00DB11DAA1F649F6627B00DA11D95
+:105BA000661F829F2227B00DA11D621F739FB00D3B
+:105BB000A11D621F839FA00D611D221F749F3327AB
+:105BC000A00D611D231F849F600D211D822F762F44
+:105BD0006A2F11249F5750408AF0E1F088234AF041
+:105BE000EE0FFF1FBB1F661F771F881F915050408D
+:105BF000A9F79E3F510570F05CCFA6CF5F3FECF355
+:105C0000983EDCF3869577956795B795F795E79578
+:105C10009F5FC1F7FE2B880F911D9695879597F989
+:105C20000895FA01EE0FFF1F30962105310599F115
+:105C30006115710561F48038BFE39B0749F16894F1
+:105C40009038810561F08038BFEF9B0741F09923C0
+:105C500042F5FF3FE1053105210511F1E894089473
+:105C6000E795D901AA2329F4AB2FBE2FF85FD0F313
+:105C700010C0FF5F70F4A695E0F7F73950F019F007
+:105C8000FF3A38F49F779F930CD00F9007FC905801
+:105C900008953EF014CF60E070E080E89FE308953F
+:105CA0004FE79F775F934F933F932F939ED02F9112
+:105CB0003F914F915F9152DF05C019F40EF0F9CE7C
+:105CC00042CFFDCE26DFC8F39638C0F707F80F9213
+:105CD000E8942BE33AEA48EB5FE74EDF0F920F922E
+:105CE0000F924DB75EB70F92C0D0ECEAF0E016D03D
+:105CF0004F915F91EF91FF91E595EE1FFF1F49F0E6
+:105D0000FE57E0684427EE0F441FFA95E1F74195EE
+:105D1000550B32D00F9007FE26C00895DF93CF9326
+:105D20001F930F93FF92EF92DF927B018C01689497
+:105D300005C0DA2EEF011EDFFE01E894A591259142
+:105D4000359145915591AEF3EF0162DDFE0197016A
+:105D5000A801DA9479F7DF90EF90FF900F911F91EF
+:105D6000CF91DF9108959B01AC0160E070E080E885
+:105D70009FE3A5CD9ECEACC0CCDEE8F39923D9F34A
+:105D8000940F511DBBF39150504094F059F088236B
+:105D900032F0660F771F881F91505040C1F79E3F29
+:105DA000510544F7880F911D9695879597F90895A9
+:105DB0005F3FACF0983E9CF0BB2786957795679542
+:105DC000B79508F4B1609395C1F7BB0F58F711F47C
+:105DD00060FFE8CF6F5F7F4F8F4F9F4FE3CFB4CE11
+:105DE0000EF076C06CCE689464CE93DEC8F399232F
+:105DF000D1F3C6F3DF93CF931F930F93FF92C92F75
+:105E0000DD2788232AF02197660F771F881FDAF78E
+:105E100020E030E040E85FEB9FE3883920F0803EEF
+:105E200030F021968F77E3DCE4EDF0E003C0DFDCB7
+:105E3000E1E0F1E073DF8B01BE01EC01FB2E6F5757
+:105E400071097595771F880B990BD4DD28E132E72E
+:105E500041E35FE38FDEAF2D9801AE01FF900F911C
+:105E60001F91CF91DF91D4DC3BCEFA01DC01AA0F68
+:105E7000BB1F9B01AC01BF5728F4222733274427BF
+:105E800050781FC0B75188F4AB2F00244695379542
+:105E90002795011CA395D2F3002069F0220F331F30
+:105EA000441FB395DAF30DD0A1CC61307105A0E8A1
+:105EB0008A07B94630F49B01AC016627772788270B
+:105EC0009078309621F02083318342835383089564
+:105ED0009F3F31F0915020F4879577956795B7955E
+:105EE000880F911D9695879597F90895AA1BBB1B5E
+:105EF00051E107C0AA1FBB1FA617B70710F0A61BCA
+:105F0000B70B881F991F5A95A9F780959095BC01EA
+:105F1000CD01089597FB072E16F4009407D077FD66
+:105F200009D00E94762F07FC05D03EF4909581950C
+:105F30009F4F0895709561957F4F0895F999FECF11
+:105F400092BD81BDF89A992780B50895A8E1B0E087
+:105F500042E050E00C94C12F262FF999FECF1FBAD2
+:105F600092BD81BD20BD0FB6F894FA9AF99A0FBE82
+:105F7000019608950E94AC2F272F0C94AD2FDC01C1
+:105F8000CB01FC01F999FECF06C0F2BDE1BDF89A44
+:105F9000319600B40D9241505040B8F70895F894EE
+:025FA000FFCF31
+:105FA2000507000C058540000001064000000100C5
+:105FB200D80B680C440C0F0CDB0B01600228081490
+:105FC2000A321E40004500250026006100600020C4
+:105FD2000037006400650066006700440046002444
+:105FE2000047000000020004000500070009000B42
+:105FF200000C000E0010001100130015001700180D
+:10600200001A001C001D001F00210023002400268E
+:1060120000280029002B002D002F00300032003410
+:10602200003500370039003B008803A103BA03D3CF
+:1060320003FB04AE04780458043F4D3620020302E9
+:10604200000001000101010101000101010203043C
+:0660520005060708090025
+:00000001FF