diff --git a/.gitignore b/.gitignore index 8b8c4516..a082ea22 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,8 @@ build/ .vagrant/ .DS_STORE -# Eclipse Settings +# Eclipse/PyCharm/Other IDE Settings .cproject .project .settings/ - +.idea diff --git a/README.md b/README.md index ab737302..d20557f5 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ -# Quantum MK Firmware +# Quantum Mechanical Keyboard Firmware -This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.co) and the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard. +This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.co), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, TMK. This documentation is edited and maintained by Erez Zukerman of ErgoDox EZ. If you spot any typos or inaccuracies, please [open an issue](https://github.com/jackhumbert/qmk_firmware/issues/new). +The OLKB product firmwares are maintained by Jack, the Ergodox EZ by Erez, and the Clueboard by [skullydazed](/skullydazed). + ## Important background info: TMK documentation The documentation below explains QMK customizations and elaborates on some of the more useful features of TMK. To understand the base firmware, and especially what *layers* are and how they work, please see [TMK_README.md](/TMK_README.md). @@ -16,13 +18,21 @@ The documentation below explains QMK customizations and elaborates on some of th * If you're looking to customize a keyboard that currently runs QMK or TMK, find your keyboard's directory under `keyboard/` and run the make commands from there. * If you're looking to apply this firmware to an entirely new hardware project (a new kind of keyboard), you can create your own Quantum-based project by using `./new_project.sh `, which will create `/keyboard/` with all the necessary components for a Quantum project. +### Makefile Options + You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you. BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = yes # MIDI controls - # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not // + UNICODE_ENABLE = no # <-- This is how you disable an option, just set it to "no" BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID +### Customizing Makefile options on a per-keymap basis + +If your keymap directory has a file called `makefile.mk` (note the lowercase filename, and the `.mk` extension), any Makefile options you set in that file will take precedence over other Makefile options (those set for Quantum as a whole or for your particular keyboard). + +So let's say your keyboard's makefile has `CONSOLE_ENABLE = yes` (or maybe doesn't even list the `CONSOLE_ENABLE` option, which would cause it to revert to the global Quantum default). You want your particular keymap to not have the debug console, so you make a file called `makefile.mk` and specify `CONSOLE_ENABLE = no`. + ## Quick aliases to common actions Your keymap can include shortcuts to common operations (called "function actions" in tmk). @@ -199,6 +209,27 @@ This will clear all mods currently pressed. This will clear all keys besides the mods currently pressed. +* `update_tri_layer(layer_1, layer_2, layer_3);` + +If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0). + +#### Naming your macros + +If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so: + +``` +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) +#define PLOVER M(12) +#define EXT_PLV M(13) +``` + +As was done on the [Planck default keymap](/keyboard/planck/keymaps/default/keymap.c#L33-L40) + #### Timer functionality It's possible to start timers and read values for time-specific events - here's an example: @@ -215,11 +246,91 @@ if (timer_elapsed(key_timer) < 100) { It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc). +#### Example 1: Single-key copy/paste (hold to copy, tap to paste) + +With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held? + +Here's what you do: + + +``` +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + } + else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. + return MACRO( D(LCTL), T(C), U(LCTL), END ); + } + else { + return MACRO( D(LCTL), T(V), U(LCTL), END ); + } + } + break; + } + } + return MACRO_NONE; +}; +``` + +And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste. + +#### Example 2: Space Cadet Shift (making it easy to send opening and closing parentheses) + +In the [Modern Space Cadet Keyboard](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses), one of cooler features is the Shift Parentheses. To quote Steve Losh: + + > When held while pressing other keys, act like Shift. + > When pressed and released on their own, type an opening or closing parenthesis (left and right shift respectively). + +``` +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + register_code(KC_LSFT); // we're now holding down Shift. + } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) < 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. + register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren + unregister_code(KC_9); // now let's let go of that key + } + unregister_code(KC_LSFT); // let's release the Shift key now. + } + break; + } + case 1: { + if (record->event.pressed) { + key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key + register_code(KC_RSFT); + } else { + if (timer_elapsed(key_timer) < 150) { + register_code(KC_0); + unregister_code(KC_0); + } + unregister_code(KC_RSFT); + } + break; + } + } + return MACRO_NONE; +}; +``` + +And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for left shift/opening parens, and `M(1)` for right shift/closing parens. + ## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc) Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap: - #include + #include If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to: @@ -262,7 +373,7 @@ This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboar ## International Characters on Windows -[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys amont others. +[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys among others. The method does not require Unicode support in the keyboard itself but depends instead of AutoHotkey running in the background. @@ -292,7 +403,7 @@ For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring Please note that the underglow is not compatible with audio output. So you cannot enable both of them at the same time. -Please add the following options into your config.h, and set them up according your hardware configuration. +Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the F4 by default: #define ws2812_PORTREG PORTF #define ws2812_DDRREG DDRF @@ -302,6 +413,12 @@ Please add the following options into your config.h, and set them up according y #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 +You'll need to edit `PORTF`, `DDRF`, and `PF4` on the first three lines to the port/pin you have your LED(s) wired to, eg for B3 change things to: + + #define ws2812_PORTREG PORTB + #define ws2812_DDRREG DDRB + #define ws2812_pin PB3 + The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. For details, please check this keymap. `keyboard/planck/keymaps/yang/keymap.c` ### WS2812 Wiring diff --git a/keyboard/atomic/Makefile b/keyboard/atomic/Makefile index da6d0ac6..1d91c34b 100644 --- a/keyboard/atomic/Makefile +++ b/keyboard/atomic/Makefile @@ -27,7 +27,7 @@ # 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, +# 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. @@ -41,7 +41,6 @@ # Target file name (without extension). TARGET = atomic - # Directory common source filess exist TOP_DIR = ../.. TMK_DIR = ../../tmk_core @@ -50,15 +49,42 @@ TMK_DIR = ../../tmk_core TARGET_DIR = . # # project specific files -SRC = atomic.c \ - backlight.c +SRC = atomic.c + +ifdef keymap + KEYMAP = $(keymap) +endif ifdef KEYMAP - SRC := keymaps/$(KEYMAP).c $(SRC) +ifneq ("$(wildcard keymaps/$(KEYMAP).c)","") + KEYMAP_FILE = keymaps/$(KEYMAP).c +else +ifneq ("$(wildcard keymaps/$(KEYMAP)/keymap.c)","") + KEYMAP_FILE = keymaps/$(KEYMAP)/keymap.c +ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","") + include keymaps/$(KEYMAP)/makefile.mk +endif +else +$(error Keymap file does not exist) +endif +endif + else - SRC := keymaps/default.c $(SRC) + +ifneq ("$(wildcard keymaps/default.c)","") + KEYMAP_FILE = keymaps/default.c +else + KEYMAP_FILE = keymaps/default/keymap.c +endif + +ifneq ("$(wildcard keymaps/default/makefile.mk)","") + include keymaps/default/makefile.mk endif +endif + +SRC := $(KEYMAP_FILE) $(SRC) + CONFIG_H = config.h # MCU name @@ -78,7 +104,6 @@ MCU = atmega32u4 # software delays. F_CPU = 16000000 - # # LUFA specific # @@ -110,23 +135,45 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # 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 +# change to "no" to disable the options, or define them in the makefile.mk in +# the appropriate keymap folder that will get included automatically +# +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 = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + # 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 +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifdef KEYMAP + +ifeq ("$(wildcard keymaps/$(KEYMAP).c)","") +ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","") + include keymaps/$(KEYMAP)/makefile.mk +endif +endif +else + +ifneq ("$(wildcard keymaps/default/makefile.mk)","") + include keymaps/default/makefile.mk +endif + +endif + +ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) + SRC := backlight.c $(SRC) +endif # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax @@ -136,5 +183,4 @@ VPATH += $(TARGET_DIR) VPATH += $(TOP_DIR) VPATH += $(TMK_DIR) -include $(TOP_DIR)/quantum/quantum.mk - +include $(TOP_DIR)/quantum/quantum.mk \ No newline at end of file diff --git a/keyboard/atomic/atomic.c b/keyboard/atomic/atomic.c index 30e81228..5e31264e 100644 --- a/keyboard/atomic/atomic.c +++ b/keyboard/atomic/atomic.c @@ -2,12 +2,22 @@ __attribute__ ((weak)) void matrix_init_user(void) { - // leave these blank -} + // leave this function blank - it can be defined in a keymap file +}; __attribute__ ((weak)) void matrix_scan_user(void) { - // leave these blank + // leave this function blank - it can be defined in a keymap file +} + +__attribute__ ((weak)) +void process_action_user(keyrecord_t *record) { + // leave this function blank - it can be defined in a keymap file +} + +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { + // leave this function blank - it can be defined in a keymap file } void matrix_init_kb(void) { @@ -33,4 +43,17 @@ void matrix_scan_kb(void) { // runs every cycle (a lot) matrix_scan_user(); -} \ No newline at end of file +} + +void process_action_kb(keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + process_action_user(record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + led_set_user(usb_led); +} diff --git a/keyboard/atomic/atomic.h b/keyboard/atomic/atomic.h index d8574efa..d5461e42 100644 --- a/keyboard/atomic/atomic.h +++ b/keyboard/atomic/atomic.h @@ -26,5 +26,8 @@ void matrix_init_user(void); void matrix_scan_user(void); +void process_action_user(keyrecord_t *record); +void led_set_user(uint8_t usb_led); +void backlight_init_ports(void); #endif \ No newline at end of file diff --git a/keyboard/atomic/backlight.c b/keyboard/atomic/backlight.c index f69364b2..647b57e7 100644 --- a/keyboard/atomic/backlight.c +++ b/keyboard/atomic/backlight.c @@ -1,6 +1,8 @@ #include #include "backlight.h" +#include "atomic.h" + #define CHANNEL OCR1C diff --git a/keyboard/atomic/config.h b/keyboard/atomic/config.h index 149aed47..1b34decf 100644 --- a/keyboard/atomic/config.h +++ b/keyboard/atomic/config.h @@ -32,36 +32,109 @@ along with this program. If not, see . #define MATRIX_ROWS 5 #define MATRIX_COLS 15 -// Planck PCB default pin-out -// Change this to how you wired your keyboard -// COLS: Left to right, ROWS: Top to bottom +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ #define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 } #define ROWS (int []){ D0, D5, B5, B6, C6 } /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW -/* define if matrix has ghost */ +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST /* number of backlight levels */ -/* NOTE: this is the max value of 0..BACKLIGHT_LEVELS so really 16 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 */ +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ #define IS_COMMAND() ( \ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) - +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +#define MAGIC_KEY_BOOTLOADER B +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z /* * Feature disable options diff --git a/keyboard/atomic/keymaps/default.c b/keyboard/atomic/keymaps/default.c index f37d9d9a..0ede363a 100644 --- a/keyboard/atomic/keymaps/default.c +++ b/keyboard/atomic/keymaps/default.c @@ -1,79 +1,234 @@ #include "atomic.h" +// Fillers to make layering more clear +#define _______ KC_TRNS +#define ___T___ KC_TRNS +#define XXXXXXX KC_NO + +// Layer shorthand +#define _QW 0 +#define _CM 1 +#define _DV 2 +#define _LW 3 +#define _RS 4 +#define _FN 5 + +/* ROW 1 OPTIONS + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + * .- 2u ------------. + * | KEY . XXXXXX | + * '-----------------' + */ + +/* ROW 2 OPTIONS + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + * .- 2u ------------. .- 2u ------------. + * | KEY . XXXXXX | | KEY . XXXXXX | + * '-----------------' '-----------------' + */ + +/* ROW 3 OPTIONS + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + * .- 2u ------------. .- 2u ------------. + * | KEY . XXXXXX | | X | + * '-----------------' '-----------------' + * .- 2u ------------. + * | X | + * '-----------------' + */ + +/* ROW 4 OPTIONS + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + * .- 2u ------------. + * | KEY . XXXXXX | + * '-----------------' + * .- 2u ------------. .- 2u ------------. + * | KEY . XXXXXX | | KEY . XXXXXX | + * '-----------------' '-----------------' + * .- 2u ------------. + * | KEY . XXXXXX | + * '-----------------' + */ + +/* ROW 5 OPTIONS + * .--------------------------------------------------------------------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + * .- 1.25u --+ 1.25u ------- 1.25u +--- 1.25u --- 2u -------------- 1.25u ---- 1.25u ------ 1.25u +---- 1.25u . + * | X | X | X | X | X | X | X | X | X | + * '-----------------------------------------------------------------------------------------------------------' + * .- 2u ------------. + * | X | + * '-----------------' + * .--------------------- 6.25u ----------------------------. + * | X | + * '--------------------------------------------------------' + * .----------------------- 6.25u ---------------------------- 1.25u ---- 1.25u ---- 1.25u ------ 1.25u +-- 1.25u --. + * | X | X | X | X | X | X | + * '----------------------------------------------------------------------------------------------------------------' + */ + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Qwerty */ - { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ + +/* QWERTY - MIT ENHANCED / GRID COMPATIBLE + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_QW] = { /* QWERTY */ + { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ { 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_ENT, KC_ENT, KC_PGUP }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { 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_RSFT, KC_UP, KC_PGDN }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { BL_STEP, KC_LCTL, KC_LALT, KC_LGUI, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, KC_RGUI, KC_RALT, KC_RCTL, BL_STEP, KC_LEFT, KC_DOWN, KC_RGHT }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐ -// │ X │ X │ X │ X │ X │ X │ X │ X │ X │ -// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌───────────────────── 6.25u ────────────────────────────┐ -// │ X │ -// └────────────────────────────────────────────────────────┘ -// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐ -// │ X │ X │ X │ X │ X │ X │ -// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘ - } + { 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_RSFT, KC_UP, KC_PGDN }, + { M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT }, + }, + +/* COLEMAK - MIT ENHANCED / GRID COMPATIBLE + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | ESC | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_CM] = { /* COLEMAK */ + { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, + { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, + { 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_ENT, KC_ENT, KC_PGUP }, + { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, + { M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT }, + }, + +/* DVORAK - MIT ENHANCED / GRID COMPATIBLE + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | ' | , | . | P | Y | F | G | C | R | L | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | ESC | A | O | E | U | I | D | H | T | N | S | / | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_DV] = { /* DVORAK */ + { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, + { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, + { 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_ENT, KC_ENT, KC_PGUP }, + { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, + { M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT }, + }, + +/* LOWERED + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | | | | INS | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | XXXXXX . | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | XXXXXX . | | | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | XXXXXX . | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_LW] = { /* LOWERED */ + { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ }, + { _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, _______, KC_INS }, + { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, ___T___, ___T___, _______ }, + { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, ___T___, ___T___, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, + +/* RAISED + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | INS | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | XXXXXX . | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | XXXXXX . | | | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | XXXXXX . | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_RS] = { /* RAISED */ + { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ }, + { _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_INS }, + { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, ___T___, ___T___, _______ }, + { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, ___T___, ___T___, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, + +/* FUNCTION + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | SCR LK | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | PAUSE | PR SCR | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | XXXXXX . | WHEEL+ | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | | QWERTY | COLEMK | DVORAK | | | | | | | XXXXXX . | MOUS U | WHEEL- | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | XXXXXX . MS BT1 | | | | | | MOUS L | MOUS D | MOUS R | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_FN] = { /* FUNCTION */ + { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ }, + { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR }, + { KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U }, + { _______, _______, DF(_QW), DF(_CM), DF(_DV), _______, _______, _______, _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D }, + { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, + }, }; 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) +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(TYPE(KC_T), END); - break; - } + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } return MACRO_NONE; }; diff --git a/keyboard/atomic/keymaps/pvc/config.h b/keyboard/atomic/keymaps/pvc/config.h new file mode 100644 index 00000000..cc926346 --- /dev/null +++ b/keyboard/atomic/keymaps/pvc/config.h @@ -0,0 +1,161 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#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 Atomic Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 } +#define ROWS (int []){ D0, D5, B5, B6, B3 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* 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 + +// Enable Keyboard Locking via magic key +#define KEYBOARD_LOCK_ENABLE + + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +#define MAGIC_KEY_BOOTLOADER B +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * 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/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c new file mode 100644 index 00000000..e17c41e2 --- /dev/null +++ b/keyboard/atomic/keymaps/pvc/keymap.c @@ -0,0 +1,517 @@ +#include "atomic.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "led.h" + +#ifdef AUDIO_ENABLE + #include "audio.h" + #include "song_list.h" +#endif + +#define LAYER_QWERTY 0 +#define LAYER_COLEMAK 1 +#define LAYER_DVORAK 2 +#define LAYER_LOWER 3 +#define LAYER_RAISE 4 +#define LAYER_FUNCTION 5 +#define LAYER_MOUSE 6 +#define LAYER_MUSIC 7 +#define LAYER_ADJUST 8 + +#define MACRO_QWERTY 0 +#define MACRO_COLEMAK 1 +#define MACRO_DVORAK 2 +#define MACRO_LOWER 3 +#define MACRO_RAISE 4 +#define MACRO_FUNCTION 5 +#define MACRO_MOUSE 6 +#define MACRO_TIMBRE_1 7 +#define MACRO_TIMBRE_2 8 +#define MACRO_TIMBRE_3 9 +#define MACRO_TIMBRE_4 10 +#define MACRO_TEMPO_U 11 +#define MACRO_TEMPO_D 12 +#define MACRO_TONE_DEFAULT 13 +#define MACRO_MUSIC_ON 14 +#define MACRO_MUSIC_OFF 15 +#define MACRO_AUDIO_ON 16 +#define MACRO_AUDIO_OFF 17 +#define MACRO_INC_VOICE 18 +#define MACRO_DEC_VOICE 19 + +#define M_QWRTY M(MACRO_QWERTY) +#define M_COLMK M(MACRO_COLEMAK) +#define M_DVORK M(MACRO_DVORAK) +#define M_LOWER M(MACRO_LOWER) +#define M_RAISE M(MACRO_RAISE) +#define M_FUNCT M(MACRO_FUNCTION) +#define M_MOUSE M(MACRO_MOUSE) +#define TIMBR_1 M(MACRO_TIMBRE_1) +#define TIMBR_2 M(MACRO_TIMBRE_2) +#define TIMBR_3 M(MACRO_TIMBRE_3) +#define TIMBR_4 M(MACRO_TIMBRE_4) +#define TMPO_UP M(MACRO_TEMPO_U) +#define TMPO_DN M(MACRO_TEMPO_D) +#define TMPO_DF M(MACRO_TONE_DEFAULT) + + +#define MUS_ON M(MACRO_MUSIC_ON) +#define MUS_OFF M(MACRO_MUSIC_OFF) +#define AUD_OFF M(MACRO_AUDIO_OFF) +#define AUD_ON M(MACRO_AUDIO_ON) +#define VC_UP M(MACRO_INC_VOICE) +#define VC_DOWN M(MACRO_DEC_VOICE) + + +#define SC_UNDO LCTL(KC_Z) +#define SC_REDO LCTL(KC_Y) +#define SC_CUT LCTL(KC_X) +#define SC_COPY LCTL(KC_C) +#define SC_PSTE LCTL(KC_V) +#define SC_SELA LCTL(KC_A) +#define SC_SAVE LCTL(KC_S) +#define SC_OPEN LCTL(KC_O) +#define SC_ACLS LALT(KC_F4) +#define SC_CCLS LCTL(KC_F4) + + +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define ________________ _______, _______ +#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [LAYER_QWERTY] = { /* QWERTY */ + { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, + { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, + { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, + { 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_RSFT, KC_UP, KC_PGDN }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, + }, + + /* COLEMAK + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [LAYER_COLEMAK] = { /* COLEMAK */ + { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, + { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, + { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, + { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, + }, + +/* DVORAK + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | XXXXXX . SPACE | LOWER | RALT | RWIN | MENU | RCTRL | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [LAYER_DVORAK] = { /* DVORAK */ + { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC }, + { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL }, + { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP }, + { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, + }, + + + [LAYER_LOWER] = { /* LOWERED */ + { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, + { _______, _______, _______, _______, SC_CCLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, + { _______, SC_REDO, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, + { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, + + [LAYER_RAISE] = { /* RAISED */ + { KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ }, + { _______, _______, _______, _______, SC_ACLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS }, + { _______, SC_SELA, SC_SAVE, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_HOME }, + { _______, SC_UNDO, SC_CUT, SC_COPY, SC_PSTE, _______, _______, _______, _______, _______, _______, ________________, _______, KC_END }, + { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, + + [LAYER_FUNCTION] = { /* FUNCTION */ + { KC_NLCK, 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_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS }, + { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_VOLU, KC_MUTE }, + { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }, + }, + +#ifdef MOUSEKEY_ENABLE + + [LAYER_MOUSE] = { /* MOUSE */ + { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U }, + { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D }, + { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, + }, + +#endif + + [LAYER_MUSIC] = { /* MUSIC */ + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + }, + + [LAYER_ADJUST] = { /* ADJUST */ + { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF, ________________ }, + { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, + { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ }, + { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ }, + }, + + +/* + [LAYER_EMPTY] = { + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ }, + { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ }, + }, +*/ + +}; + +#ifdef AUDIO_ENABLE + +float tone_my_startup[][2] = SONG(ODE_TO_JOY); +float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY); + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); +float tone_music_on[][2] = SONG(DOE_A_DEER); +float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); +float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND); +float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND); +float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND); +float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND); +float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +#endif /* AUDIO_ENABLE */ + +void persistant_default_layer_set(uint16_t default_layer) +{ + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +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 MACRO_QWERTY: + if (record->event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + layer_on(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + else + { + layer_off(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + break; + + case MACRO_RAISE: + if (record->event.pressed) + { + layer_on(LAYER_RAISE); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + else + { + layer_off(LAYER_RAISE); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + break; + + case MACRO_FUNCTION: + if (record->event.pressed) + { + layer_on(LAYER_FUNCTION); + } + else + { + layer_off(LAYER_FUNCTION); + } + break; + +#ifdef MOUSEKEY_ENABLE + + case MACRO_MOUSE: + if (record->event.pressed) + { + layer_invert(LAYER_MOUSE); + } + break; + +#endif /* MOUSEKEY_ENABLE */ + +#ifdef AUDIO_ENABLE + + case MACRO_TIMBRE_1: + if (record->event.pressed) set_timbre(TIMBRE_12); + break; + + case MACRO_TIMBRE_2: + if (record->event.pressed) set_timbre(TIMBRE_25); + break; + + case MACRO_TIMBRE_3: + if (record->event.pressed) set_timbre(TIMBRE_50); + break; + + case MACRO_TIMBRE_4: + if (record->event.pressed) set_timbre(TIMBRE_75); + break; + + case MACRO_TEMPO_U: + if (record->event.pressed) increase_tempo(10); + break; + + case MACRO_TEMPO_D: + if (record->event.pressed) decrease_tempo(10); + break; + + case MACRO_TONE_DEFAULT: + if (record->event.pressed) + { + set_timbre(TIMBRE_DEFAULT); + set_tempo(TEMPO_DEFAULT); + } + break; + + case MACRO_AUDIO_OFF: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + + case MACRO_AUDIO_ON: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); + #endif + } + break; + + case MACRO_MUSIC_ON: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); + layer_on(LAYER_MUSIC); + #endif + } + break; + + case MACRO_MUSIC_OFF: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + layer_off(LAYER_MUSIC); + stop_all_notes(); + #endif + } + break; + + case MACRO_INC_VOICE: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, STACCATO); + #endif + } + break; + + case MACRO_DEC_VOICE: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, STACCATO); + #endif + } + break; + +#endif /* AUDIO_ENABLE */ + + default: + break; + + } + return MACRO_NONE; +}; + + +#ifdef AUDIO_ENABLE + + +void process_action_user(keyrecord_t *record) +{ + + uint8_t starting_note = 0x0C; + int offset = 7; + + if (IS_LAYER_ON(LAYER_MUSIC)) + { + if (record->event.pressed) + { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } + else + { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } +} + + +void matrix_init_user(void) +{ + set_voice(default_voice); + play_startup_tone(); + println("Matrix Init"); +} + +void led_set_user(uint8_t usb_led) +{ + static uint8_t old_usb_led = 0; + + _delay_ms(10); // gets rid of tick + + if ((usb_led & (1< + + +/* Clueboard matrix layout + * ,-----------------------------------------------------------. ,---. + * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| | 0F| + * |-----------------------------------------------------------| |---| + * | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| 1D| | 1F| + * |-----------------------------------------------------------| `---' + * | 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2A| 2B| 2C| 2D| + * |------------------------------------------------------------. + * | 30| 31| 32| 33| 34| 35| 36| 37| 38| 39| 3A| 3B| 3C| 3D|3E| + * |------------------------------------------------------------------. + * | 40| 41| 42| 43| 45| 46| 49| 4A| 4B| 4C| 4D| 4E| 4F| + * `------------------------------------------------------------------' + * ,-----------------------------------------------------------. ,---. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins| + * |-----------------------------------------------------------| |---| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del| + * |-----------------------------------------------------------| `---' + * |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent| + * |--------------------------------------------------------------. + * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up| + * |------------------------------------------------------------------. + * |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +// The first section contains all of the arguements +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \ + k40, k41, k42, k43, k45, k46, k49, k4A, k4B, k4C, k4D, k4E, k4F \ +) { \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, KC_NO, k1F }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E }, \ + { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); + +#endif diff --git a/keyboard/clueboard1/config.h b/keyboard/clueboard1/config.h new file mode 100644 index 00000000..2b20c387 --- /dev/null +++ b/keyboard/clueboard1/config.h @@ -0,0 +1,96 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xC1ED +#define PRODUCT_ID 0x2301 +#define DEVICE_VER 0x0003 +#define MANUFACTURER Clueboard +#define PRODUCT Clueboard +#define DESCRIPTION QMK keyboard firmware for Clueboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 16 + +// COLS: Left to right, ROWS: Top to bottom + +/* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + * pin: B3 F1 F4 F5 F6 C7 C6 B6 B5 B4 D7 D6 D4 F7 B0 B1 + */ +#define COLS (int []){ B3, F1, F4, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, F7, B0, B1 } + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D1 D0 D2 D5 D3 + */ +#define ROWS (int []){ D1, D0, D2, D5, D3 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* 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)) \ +) + +/* Underlight configuration + */ + #define ws2812_PORTREG PORTB + #define ws2812_DDRREG DDRB + #define ws2812_pin 2 + #define RGBLED_NUM 14 // Number of LEDs + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 + +/* + * 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/clueboard1/keymaps/keymap_default.c b/keyboard/clueboard1/keymaps/keymap_default.c new file mode 100644 index 00000000..3f4f3c41 --- /dev/null +++ b/keyboard/clueboard1/keymaps/keymap_default.c @@ -0,0 +1,184 @@ +#include "clueboard1.h" + +#ifdef RGBLIGHT_ENABLE +#include "rgblight.h" +#endif + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// 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 _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, 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_DEL, BL_STEP, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),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, KC_TRNS, KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END), + + /* Keymap _RS: Reset layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = KEYMAP( + #ifdef RGBLIGHT_ENABLE + 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, F(1), F(7), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(5), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(2), F(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(4), F(6), F(3)), + #else + 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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),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, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS), + #endif +}; + +enum function_id { + SHIFT_ESC, + #ifdef RGBLIGHT_ENABLE + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL + #endif +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), + #ifdef RGBLIGHT_ENABLE + [1] = ACTION_FUNCTION(RGBLED_TOGGLE), + [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), + #endif +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + //led operations + #ifdef RGBLIGHT_ENABLE + case RGBLED_TOGGLE: + if (record->event.pressed) { + rgblight_toggle(); + } + + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + #endif + } +} diff --git a/keyboard/clueboard1/led.c b/keyboard/clueboard1/led.c new file mode 100644 index 00000000..f0dd5662 --- /dev/null +++ b/keyboard/clueboard1/led.c @@ -0,0 +1,32 @@ + /* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include "stdint.h" +#include "led.h" + + +void led_set_kb(uint8_t usb_led) { + DDRF |= (1<<0); + if (usb_led & (1< +#include "backlight.h" +#include "print.h" + +/* Clueboard 2.0 LED locations: + * + * Capslock: B4, pull high to turn on + * LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH + * Page Up: B7, pull high to turn on + * Escape: D6, pull high to turn on + * Arrows: D4, pull high to turn on + */ + +void init_backlight_pin(void) { + print("init_backlight_pin()\n"); + // Set our LED pins as output + DDRD |= (1<<6); // Esc + DDRB |= (1<<7); // Page Up + DDRD |= (1<<4); // Arrows + + // Set our LED pins low + PORTD &= ~(1<<6); // Esc + PORTB &= ~(1<<7); // Page Up + PORTD &= ~(1<<4); // Arrows +} + +void backlight_set(uint8_t level) { + if ( level == 0 ) { + // Turn off light + PORTD |= (1<<6); // Esc + PORTB |= (1<<7); // Page Up + PORTD |= (1<<4); // Arrows + } else { + // Turn on light + PORTD &= ~(1<<6); // Esc + PORTB &= ~(1<<7); // Page Up + PORTD &= ~(1<<4); // Arrows + } +} + diff --git a/keyboard/clueboard2/clueboard2.c b/keyboard/clueboard2/clueboard2.c new file mode 100644 index 00000000..437f8d1e --- /dev/null +++ b/keyboard/clueboard2/clueboard2.c @@ -0,0 +1,44 @@ +#include "clueboard2.h" + +#ifdef BACKLIGHT_ENABLE +#include "backlight.h" +#endif + +__attribute__ ((weak)) +void matrix_init_user(void) { + // leave these blank +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + // leave these blank +}; + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + if (matrix_init_user) { + (*matrix_init_user)(); + } + led_init_ports(); + + #ifdef BACKLIGHT_ENABLE + init_backlight_pin(); + #endif + + #ifdef RGBLIGHT_ENABLE + rgblight_init(); + #endif + + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1< + + +/* Clueboard matrix layout + * ,-----------------------------------------------------------. ,---. + * | 00| 01| 02| 03| 04| 05| 06| 07| 50| 51| 52| 53| 54| 55| 56| | 57| + * |-----------------------------------------------------------| |---| + * | 10| 11| 12| 13| 14| 15| 16| 17| 60| 61| 62| 63| 64| 65| | 67| + * |-----------------------------------------------------------| `---' + * | 20| 21| 22| 23| 24| 25| 26| 27| 70| 71| 72| 73| 74| 75| + * |------------------------------------------------------------. + * | 30| 31| 32| 33| 34| 35| 36| 37| 80| 81| 82| 83| 84| 85|86| + * |------------------------------------------------------------------. + * | 40| 41| 42| 43| 45| 46| 90| 91| 92| 93| 94| 95| 96| + * `------------------------------------------------------------------' + * ,-----------------------------------------------------------. ,---. + * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Yen| BS| |Ins| + * |-----------------------------------------------------------| |---| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del| + * |-----------------------------------------------------------| `---' + * |Caps | A| S| D| F| G| H| J| k| L| ;| '| # | Ent| + * |--------------------------------------------------------------. + * |Shift| \| Z| X| C| V| B| N| M| ,| .| /| \|Shift| Up| + * |------------------------------------------------------------------. + * |Ctrl|Alt|Gui |MHen| Space| Space|Henk|Gui |Ctrl| Fn|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \ + k10, k11, k12, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k67, \ + k20, k21, k22, k23, k24, k25, k26, k27, k70, k71, k72, k73, k74, k75, \ + k30, k31, k32, k33, k34, k35, k36, k37, k80, k81, k82, k83, k84, k85, k86, \ + k40, k41, k42, k43, k45, k46, k90, k92, k93, k94, k95, k96, k97 \ +) { \ + { k00, k01, k02, k03, k04, k05, k06, k07 }, \ + { k10, k11, k12, k13, k14, k15, k16, k17 }, \ + { k20, k21, k22, k23, k24, k25, k26, k27 }, \ + { k30, k31, k32, k33, k34, k35, k36, k37 }, \ + { k40, k41, k42, k43, KC_NO, k45, k46, KC_NO }, \ + { k50, k51, k52, k53, k54, k55, k56, k57 }, \ + { k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \ + { k70, k71, k72, k73, k74, k75, KC_NO, KC_NO }, \ + { k80, k81, k82, k83, k84, k85, k86, KC_NO }, \ + { k90, KC_NO, k92, k93, k94, k95, k96, k97 } \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); + +#endif diff --git a/keyboard/clueboard2/config.h b/keyboard/clueboard2/config.h new file mode 100644 index 00000000..04166c20 --- /dev/null +++ b/keyboard/clueboard2/config.h @@ -0,0 +1,100 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xC1ED +#define PRODUCT_ID 0x2320 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Clueboard +#define PRODUCT Clueboard with RGB Underlighting +#define DESCRIPTION QMK keyboard firmware for Clueboard + +/* key matrix size */ +#define MATRIX_ROWS 10 +#define MATRIX_COLS 8 + +// COLS: Left to right, ROWS: Top to bottom + +/* Column pin configuration + * col: 0 1 2 3 4 5 6 7 + * pin: F0 F1 F4 F5 F6 F7 E6 B1 + */ +#define COLS (int []){ F0, F1, F4, F5, F6, F7, E6, B1 } + + /* Row pin configuration + * row: 0 1 2 3 4 5 6 7 8 9 + * pin: B2 C7 C6 B6 B5 B0 B3 D5 D3 D2 + */ +#define ROWS (int []){ B2, C7, C6, B6, B5, B0, B3, D5, D3, D2 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* 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)) \ +) + +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 1 + +/* Underlight configuration + */ + #define ws2812_PORTREG PORTD + #define ws2812_DDRREG DDRD + #define ws2812_pin 7 + #define RGBLED_NUM 14 // Number of LEDs + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 + +/* + * 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/clueboard2/keymaps/keymap_default.c b/keyboard/clueboard2/keymaps/keymap_default.c new file mode 100644 index 00000000..73179f94 --- /dev/null +++ b/keyboard/clueboard2/keymaps/keymap_default.c @@ -0,0 +1,183 @@ +#include "clueboard2.h" + +#ifdef RGBLIGHT_ENABLE +#include "rgblight.h" +#endif + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// 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 _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, 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_DEL, BL_STEP, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),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, KC_TRNS, KC_PGUP, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END), + + /* Keymap _RS: Reset layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = KEYMAP( + #ifdef RGBLIGHT_ENABLE + 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, F(1), F(7), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(8), \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(5), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(2), F(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(4), F(6), F(3)), + #else + 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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),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, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS), + #endif +}; + +enum function_id { + SHIFT_ESC, + #ifdef RGBLIGHT_ENABLE + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL + #endif +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), + #ifdef RGBLIGHT_ENABLE + [1] = ACTION_FUNCTION(RGBLED_TOGGLE), + [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), + #endif +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + //led operations + #ifdef RGBLIGHT_ENABLE + case RGBLED_TOGGLE: + if (record->event.pressed) { + rgblight_toggle(); + } + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + #endif + } +} diff --git a/keyboard/clueboard2/keymaps/keymap_max.c b/keyboard/clueboard2/keymaps/keymap_max.c new file mode 100644 index 00000000..714d6390 --- /dev/null +++ b/keyboard/clueboard2/keymaps/keymap_max.c @@ -0,0 +1,147 @@ +#include "clueboard2.h" + +#ifdef ENABLE_RGBLIGHT +#include "rgblight.h" +#endif + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// 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 _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * | Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| ~| BS| |PgUp| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PgDn| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| Up| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Alt| Gui| MHen| Space| Space| Hen| Gui| Alt| Ctrl|Left|Down|Rght| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \ + MO(_FL), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, 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_DEL, BL_STEP, \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_PGUP, \ + 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_END), + + /* Keymap _RS: Reset/Underlight layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = KEYMAP( + 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, F(0), F(6), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(7), \ + KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), F(4), \ + KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, F(1), F(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(3), F(5), F(2)), +}; + +enum function_id { + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(RGBLED_TOGGLE), + [1] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch (id) { + case RGBLED_TOGGLE: + //led operations + if (record->event.pressed) { + rgblight_toggle(); + } + + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + } +} diff --git a/keyboard/clueboard2/keymaps/keymap_skully.c b/keyboard/clueboard2/keymaps/keymap_skully.c new file mode 100644 index 00000000..74a03f2f --- /dev/null +++ b/keyboard/clueboard2/keymaps/keymap_skully.c @@ -0,0 +1,108 @@ +#include "clueboard2.h" + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// 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 _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,--------------------------------------------------------------------------. ,----. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PGUP| + * |--------------------------------------------------------------------------| |----| + * | Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PGDN| + * |--------------------------------------------------------------------------| `----' + * |Capslck| A| S| D| F| G| H| J| K| L| ;| '| # | Ent| + * |-----------------------------------------------------------------------------. + * |Shift| BS| Z| X| C| V| B| N| M| ,| .| /| BS|Shift| UP| + * |------------------------------------------------------------------------|----|----. + * | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT| + * `----------------------------------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \ + 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_NUHS, KC_ENT, \ + KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \ + KC_LCTL,KC_LALT,KC_LGUI,MO(_FL), KC_SPC, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + * ,--------------------------------------------------------------------------. ,----. + * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN| + * |--------------------------------------------------------------------------| |----| + * | | | | | | | | |PScr|SLck|Paus| | | | |BLDE| + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | |PGUP| + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL|HOME|PGDN| END| + * `----------------------------------------------------------------------------------' + */ +[_FL] = KEYMAP( + KC_GRV, 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_DEL, BL_STEP, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,MO(_RS),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,KC_TRNS, KC_PGUP, \ + KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL), KC_TRNS,KC_TRNS, MO(_FL),KC_TRNS,KC_TRNS,MO(_FL),KC_HOME,KC_PGDN,KC_END), + + /* Keymap _RS: Reset layer + * ,--------------------------------------------------------------------------. ,----. + * | | | | | | | | | | | | | | | | | | + * |--------------------------------------------------------------------------| |----| + * | | | | |RESET| | | | | | | | | | | | + * |--------------------------------------------------------------------------| `----' + * | | | _RS| | | | | | | | | | | | + * |-----------------------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------------------|----|----. + * | | | | | | | | | | _FL| | | | + * `----------------------------------------------------------------------------------' + */ +[_RS] = KEYMAP( + 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,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,MO(_RS),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,KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,MO(_FL),KC_TRNS, KC_TRNS, KC_TRNS), +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} diff --git a/keyboard/clueboard2/led.c b/keyboard/clueboard2/led.c new file mode 100644 index 00000000..3d074e5d --- /dev/null +++ b/keyboard/clueboard2/led.c @@ -0,0 +1,36 @@ + /* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include "stdint.h" +#include "led.h" + + +void led_init_ports() { + // * Set our LED pins as output + DDRB |= (1<<4); +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1< +#include "backlight.h" +#include "led.h" + +#include "print.h" + +int pwm_level; + +void led_set_kb(uint8_t usb_led) +{ + print("led_set\n"); +} + +void init_backlight_pin(void) +{ + // Set C7 to output + DDRC |= (1<<7); + + // Initialize the timer + TC4H = 0x03; + OCR4C = 0xFF; + TCCR4A = 0b10000010; + TCCR4B = 0b00000001; +} + +void backlight_set(uint8_t level) +{ + // Determine the PWM level + switch (level) + { + case 0: + // 33% + pwm_level = 0x54; + break; + case 1: + // 66% + pwm_level = 0xA8; + break; + case 2: + // 100% + pwm_level = 0xFF; + break; + case 3: + // 0% + pwm_level = 0x00; + break; + default: + xprintf("Unknown level: %d\n", level); + } + + // Write the PWM level to the timer + TC4H = pwm_level >> 8; + OCR4A = 0xFF & pwm_level; +} diff --git a/keyboard/cluepad/cluepad.c b/keyboard/cluepad/cluepad.c new file mode 100644 index 00000000..d55b9996 --- /dev/null +++ b/keyboard/cluepad/cluepad.c @@ -0,0 +1,39 @@ +#include "cluepad.h" + +__attribute__ ((weak)) +void matrix_init_user(void) { + // leave these blank +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + // leave these blank +}; + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + if (matrix_init_user) { + (*matrix_init_user)(); + } + + #ifdef BACKLIGHT_ENABLE + init_backlight_pin(); + #endif + + #ifdef RGBLIGHT_ENABLE + rgblight_init(); + #endif + + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1< + + +/* Cluepad matrix layout + * .-------------------. + * |NLCK| /| *| -| + * |-------------------| + * | 7| 8| 9| | + * |--------------| | + * | 4| 5| 6| +| + * |-------------------| + * | 1| 2| 3| | + * |--------------| | + * | 0| .| Ent| + * '-------------------' + */ +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, \ + k30, k31, k32, k33, \ + k40, k42 \ +) { \ + { k00, k01, k02, k03, }, \ + { k10, k11, k12, k13, }, \ + { k20, k21, k22, KC_NO, }, \ + { k30, k31, k32, k33, }, \ + { k40, KC_NO, k42, KC_NO } \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); + +#endif diff --git a/keyboard/cluepad/config.h b/keyboard/cluepad/config.h new file mode 100644 index 00000000..5ed421a6 --- /dev/null +++ b/keyboard/cluepad/config.h @@ -0,0 +1,102 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xC1ED +#define PRODUCT_ID 0x2312 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Clueboard +#define PRODUCT Cluepad with RGB Underlighting +#define DESCRIPTION QMK keyboard firmware for Cluepad + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 4 + +// COLS: Left to right, ROWS: Top to bottom + +/* Column pin configuration + * col: 0 1 2 3 + * pin: F4 E6 B1 D2 + */ +#define COLS (int []){ F4, E6, B1, D2 } + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: + */ +#define ROWS (int []){ B0, D3, D5, D4, D6 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Number of backlighting levels */ +#define BACKLIGHT_LEVELS 3 + +/* 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)) \ +) + +/* Underlight configuration + */ + #define ws2812_PORTREG PORTF + #define ws2812_DDRREG DDRF + #define ws2812_pin 6 + #define RGBLED_NUM 4 // Number of LEDs + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* Debug forcibly enabled */ +#define ALWAYS_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/cluepad/keymaps/keymap_default.c b/keyboard/cluepad/keymaps/keymap_default.c new file mode 100644 index 00000000..8ba49952 --- /dev/null +++ b/keyboard/cluepad/keymaps/keymap_default.c @@ -0,0 +1,122 @@ +#include "cluepad.h" + +#include "backlight.h" +#include "rgblight.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 _BL 0 +#define _FL 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * .-------------------. + * |NL F| /| *| -| + * |-------------------| + * | 7| 8| 9| | + * |--------------| | + * | 4| 5| 6| +| + * |-------------------| + * | 1| 2| 3| | + * |--------------| | + * | 0| .| Ent| + * '-------------------' + */ +[_BL] = KEYMAP( + LT(_FL, KC_NLCK), KC_PSLS, KC_PAST, KC_PMNS, \ + KC_P7, KC_P8, KC_P9, KC_PPLS, \ + KC_P4, KC_P5, KC_P6, \ + KC_P1, KC_P2, KC_P3, KC_PENT, \ + KC_P0, KC_PDOT), + + /* Keymap _FL: Function Layer + * .-------------------. + * |NL F| | | Fn0| + * |-------------------| + * | | Fn4| | | + * |--------------| | + * | Fn3|BL_S| Fn2| Fn6| + * |-------------------| + * | | Fn5| | | + * |--------------| | + * | Fn1| | Fn7| + * '-------------------' + */ +[_FL] = KEYMAP( + LT(_FL, KC_NLCK), KC_TRNS, KC_TRNS, F(0), \ + KC_TRNS, F(4), KC_TRNS, F(6), \ + F(3), BL_STEP, F(2), \ + KC_TRNS, F(5), KC_TRNS, F(7), \ + F(1), KC_TRNS) +}; + +enum function_id { + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(RGBLED_TOGGLE), + [1] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [2] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [3] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [5] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [7] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch (id) { + case RGBLED_TOGGLE: + if (record->event.pressed) { + rgblight_toggle(); + } + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + } +} + diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex index aa088456..bb78a5ea 100644 --- a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex +++ b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex @@ -1,18 +1,18 @@ -:100000000C9465020C94AC020C94AC020C94AC02FF -:100010000C94AC020C94AC020C94AC020C94AC02A8 -:100020000C94AC020C94AC020C94C30B0C94950C85 -:100030000C94AC020C94AC020C94AC020C94AC0288 -:100040000C94AC020C9409210C94AC020C94AC02FC -:100050000C94AC020C949B1A0C94AC020C94AC0261 -:100060000C94AC020C94AC020C94AC020C94AC0258 -:100070000C94AC020C94AC020C94AC020C94AC0248 -:100080000C94AC020C94AC020C94AC020C94AC0238 -:100090000C94AC020C94AC020C94AC020C94AC0228 -:1000A0000C94AC020C94AC020C94AC02020D240D26 -:1000B000170E240D170E690D8C0D170EE10DF40DA2 -:1000C000DE10DE100D110D1150118A1197139713C8 -:1000D000A3119713981298126B1397139713821307 -:1000E0000000F0A12E004C002A00E1003581000044 +:100000000C9465020C94A9020C94A9020C94A90208 +:100010000C94A9020C94A9020C94A9020C94A902B4 +:100020000C94A9020C94A9020C94A00C0C94720DCF +:100030000C94A9020C94A9020C94A9020C94A90294 +:100040000C94A9020C9446220C94A9020C94A902C7 +:100050000C94A9020C94EA1B0C94A9020C94A9021A +:100060000C94A9020C94A9020C94A9020C94A90264 +:100070000C94A9020C94A9020C94A9020C94A90254 +:100080000C94A9020C94A9020C94A9020C94A90244 +:100090000C94A9020C94A9020C94A9020C94A90234 +:1000A0000C94A9020C94A9020C94A902D70DF90D85 +:1000B000E40EF90DE40E3B0E5E0EE40EB30EC60E1A +:1000C000C011C0110112011243127F127F147F145C +:1000D00097127F148E138E1359147F147F146D148E +:1000E0000000F0A12E004C002A00003035810000F5 :1000F0001E00140004001D7134004D001F001A0082 :1001000016001B00E104C1002000080007000600E3 :1001100050002C0021001500090019004F004A0072 @@ -22,7 +22,7 @@ :10015000240018000D74100052004B0025000C0004 :100160000E00360051002800260012000F00370054 :100170002F002B81270013003382387130004E008E -:100180002D0031003478E500C100000001000100BD +:100180002D00310034780130C10000000100010071 :1001900001000100010000003A001E0022002602BA :1001A000010001003B001F002300270201000100A5 :1001B0003C00200024002F004B0101003D002100E5 @@ -75,1047 +75,1085 @@ :1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2 :1004B000B39D87715D4A3A2C20170F0A060402018A :1004C0000000000000000000000011241FBECFEF5C -:1004D000DAE0DEBFCDBF04B603FE27C08091ED0198 -:1004E0009091EE01A091EF01B091F0018730904B17 -:1004F000A740B04BD1F41092ED011092EE01109292 -:10050000EF011092F00114BE84B7877F84BF0FB64D -:10051000F894A895809160008861809360001092A3 -:1005200060000FBEE0E0FFE3099511E0A0E0B1E05C -:10053000E4EBF5E402C005900D92A433B107D9F7BE -:1005400021E0A4E3B1E001C01D92AD3EB207E1F7A6 -:100550000E940A090C94D8220C94000061110BC06F -:10056000FC018281882321F085EE0E94780F03C070 -:1005700085EE0E94401080E090E00895089560911B -:10058000B1017091B2018091B3019091B4010E94C8 -:10059000C81956985E9825982D9826982E982798D1 -:1005A0002F98813019F0823021F00895259A2D9AE4 -:1005B0000895269A2E9A08950C94BF0256985E9834 -:1005C00025982D9826982E9827982F988FEF90E0B1 -:1005D000909389008093880090938B0080938A0089 -:1005E00090938D0080938C00259A2D9A2FEF80E7B1 -:1005F00092E0215080409040E1F700C00000269A30 -:100600002E9A2FEF80E792E0215080409040E1F752 -:1006100000C00000279A2F9A2FEF80E792E0215028 -:1006200080409040E1F700C0000025982D982FEF02 -:1006300080E792E0215080409040E1F700C0000048 -:1006400026982E982FEF80E792E02150804090402E -:10065000E1F700C0000027982F9856985E982598DB -:100660002D9826982E9827982F98089589EA809398 -:10067000800089E08093810024982C983F988AB16B -:100680008F748AB96E98479A8BB1806B8BB9769AC2 -:100690000E94DE020C94BE0280E2809300018091F1 -:1006A000340181110EC00E949B0381E080933401CC -:1006B0002FEF83ED90E3215080409040E1F700C0A0 -:1006C000000080E40E94A1038093000181112EC0EC -:1006D0000E94CB0380930001811128C00E94CB03AC -:1006E00080930001811122C08FE30E94CB0380938D -:1006F000000181111BC00E94C30380E40E94A1037A -:1007000080930001811112C08CE00E94CB03809382 -:10071000000181110BC00E94CB0380930001811165 -:1007200005C08FE30E94CB03809300010E94C303A6 -:100730008091000108951092B9008AE08093B8007A -:10074000089594EA9093BC009091BC0097FFFCCF71 -:100750009091B900987F983021F0903111F081E0AC -:1007600008958093BB0084E88093BC008091BC0016 -:1007700087FFFCCF8091B900887F883111F08034E9 -:1007800071F780E0089584E98093BC008091BC00FB -:1007900084FDFCCF08958093BB0084E88093BC0067 -:1007A0008091BC0087FFFCCF9091B900987F81E0D9 -:1007B000983209F480E0089584E88093BC00809129 -:1007C000BC0087FFFCCF8091BB00089580910001A1 -:1007D000811115C080E40E94A10380930001811162 -:1007E0000CC082E10E94CB0380930001811105C0FF -:1007F0008FEF0E94CB03809300010E94C30384B15A -:10080000807F84B985B1807F85B98AB1837F8AB9B9 -:100810008BB1837F8BB93E98469808950E944C0314 -:10082000809300010E94E60380B38C7080BB81B38B -:10083000836F81BBE4E4F1E0A6E3B1E011921D9285 -:1008400081E0E235F807D1F70C9436039F92AF921E -:10085000BF92CF92DF92EF92FF920F931F93CF93AD -:10086000DF9380910001882379F0809135018F5FBB -:1008700080933501811108C00E944C0380930001D0 -:10088000811102C00E94DE0286E3E82E81E0F82E8C -:100890008701C0E0D0E0BB24B39492E0A92ECC2421 -:1008A000C394D12CC730D10500F58091000181118E -:1008B00064C080E40E94A10380930001811112C0F2 -:1008C00082E10E94CB038093000181110BC0C6011D -:1008D0000C2E01C0880F0A94EAF780950E94CB0382 -:1008E000809300010E94C30348C0CA30A1F028F4DD -:1008F000C83059F0C93061F005C0CC3089F070F0D3 -:10090000CD3089F0209A289810C0219A29980DC0DE -:10091000229A2A980AC0239A2B9807C0529A01C09B -:10092000539A5B9802C03E9A4698E0EAEA95F1F73E -:100930008FB181708B25799902C032E001C030E01F -:10094000832B7C9902C034E001C030E0832B7D9979 -:1009500002C028E001C020E0822B7E9902C090E115 -:1009600001C090E0892B9FB19095991F9927991FFD -:100970009295990F907E892B0FC080910001811173 -:100980004AC080E40E94A10380930001882381F182 -:10099000912C0E94C303892DD8019C91981719F0BE -:1009A0008C93A09201010E94E60321960F5F1F4FD6 -:1009B000CE30D10509F076CF80910101882369F10D -:1009C000815080930101882339F0EFE9FFE03197EE -:1009D000F1F700C0000021C0E4E4F1E0D7018D91FF -:1009E0007D018193B4E4EB16B1E0FB06B9F715C0C5 -:1009F00083E10E94CB03809300018111C9CF81E480 -:100A00000E94A103809300018111C2CF0E94DC03E8 -:100A1000982E9094BECF80E0BFCF0E94DC0281E090 -:100A2000DF91CF911F910F91FF90EF90DF90CF90CA -:100A3000BF90AF909F900895E82FF0E0EC5BFE4FE1 -:100A40008081089508958B3B910580F4883A910543 -:100A500048F5853A9105D8F48430910508F0B2C084 -:100A6000019709F06EC081E090E00895803E910505 -:100A700008F467C0883E910508F4A4C09C01205F7B -:100A800031092031310508F05CC090650895853A40 -:100A9000910509F459C0863A910509F058C082E8D9 -:100AA00090E40895883A910509F454C0893A910573 -:100AB00009F453C08A3A910509F452C08B3A910562 -:100AC00009F451C08C3A910509F450C08D3A910552 -:100AD00009F44FC0803B910509F44EC08E3A910550 -:100AE00009F44DC08F3A910509F44CC0813B910542 -:100AF00009F44BC0823B910509F44AC0833B910540 -:100B000009F449C0843B910509F448C0853B91052F -:100B100009F447C0863B910509F446C0873B91051F -:100B200009F445C0883B910509F444C0893B91050F -:100B300009F443C08A3B910509F442C080E094E483 -:100B4000089580E090E0089581E890E4089583E8B6 -:100B500090E4089582EE94E4089589EE94E4089573 -:100B60008AEE94E4089585EB94E4089586EB94E48A -:100B7000089587EB94E408958CEC94E408958DEC4B -:100B800094E4089583E895E408958AE895E4089547 -:100B900082E995E4089584E995E4089581E296E474 -:100BA000089583E296E4089584E296E4089585E248 -:100BB00096E4089586E296E4089587E296E408951F -:100BC0008AE296E40895089524E5829FC0011124E5 -:100BD000FC0126E0729FE00DF11D1124E60FF11DCE -:100BE000EE0FFF1FEC51FF4F859194910895880FF0 -:100BF000991FFC01E05AF040859194910895880F67 -:100C0000991FFC01E052FF4F85919491089524E5CE -:100C1000829FC0011124FC0146E0749FE00DF11D8C -:100C20001124E60FF11DEE0FFF1FEC51FF4F8591D0 -:100C300094919C013A9521154FE1340708F425C1A0 -:100C40003F512115304120F49F700E94FF05089507 -:100C50009C0130532115304118F49927906C089568 -:100C6000811520E5920769F40E94B9134FEF84E3E0 -:100C70009CE0415080409040E1F700C000000C949F -:100C8000C01A813020E5920731F48091CC01816057 -:100C90008093CC0108959C0130552115304108F016 -:100CA0005CC0292F33272F70332721303105E9F419 -:100CB000AC0164E0440F551F6A95E1F74427537077 -:100CC000BC016370772702C0220F331F6A95E2F7D9 -:100CD0003C68242B352B73E0880F991F7A95E1F738 -:100CE00080769927822B932B08952230310529F4A1 -:100CF000982F8827816F906A089523303105A1F4D9 -:100D0000AC0133E0440F551F3A95E1F7407E577030 -:100D10008370992721E030E002C0220F331F8A95AB -:100D2000E2F7C9019C6816C02430310531F5AC01E9 -:100D300023E0440F551F2A95E1F7407E57708370DA -:100D4000992721E030E002C0220F331F8A95E2F795 -:100D5000C9019A68842B952B08959C013057211561 -:100D6000304118F49F70906208959C01305821150D -:100D7000304118F49F70906A0895803E9105E0F428 -:100D8000803C910558F58133910509F46FC048F412 -:100D90008932910509F463C08A32910509F46DC066 -:100DA00072C089339105E9F082389105D1F085331D -:100DB000910509F44DC067C0833E910581F138F477 -:100DC000803E9105B9F0823E9105D9F05CC0863E27 -:100DD000910561F1873E9105A1F155C00E94F7058B -:100DE00008952091DE0120FD02C021FF4CC080EE5D -:100DF00090E049C08091DE0180FFF9CF89E390E067 -:100E000042C08091DE0182FF0EC08091DE0184FF2E -:100E100003C080E090E037C083EE90E034C0809162 -:100E2000DE0182FFF2CF82EE90E02DC08091DE01E4 -:100E300083FF0BC08091DE0184FDEBCF87EE90E055 -:100E400022C08091DE0183FFF5CF86EE90E01BC0CB -:100E50008091DE0185FF07C089E290E014C0809197 -:100E6000DE0185FFF9CF85E390E00DC08091DE01C2 -:100E700086FF07C08AE290E006C08091DE0186FF0F -:100E8000F9CF81E390E00E942305089508958091B1 -:100E900062010895CF93DF9300D01F92CDB7DEB7E4 -:100EA0009C018091E401843019F593E099833B83A0 -:100EB0002A839093E9008FEF9091E800815095FD8F -:100EC00006C095ED9A95F1F700008111F5CF80915C -:100ED000E80085FF0DC040E050E063E070E0CE0127 -:100EE00001960E94B7098091E8008E778093E80010 -:100EF0000F900F900F90DF91CF910895CF93DF93D4 -:100F000000D01F92CDB7DEB72091E401243021F547 -:100F100022E029839B838A8383E08093E9008FEF1B -:100F20009091E800815095FD06C095ED9A95F1F7F6 -:100F300000008111F5CF8091E80085FF0DC040E0F1 -:100F400050E063E070E0CE0101960E94B709809105 -:100F5000E8008E778093E8000F900F900F90DF915C -:100F6000CF9108959C018091E4018430F9F482E0EE -:100F70008093E9009FEF8091E800915085FD06C0C5 -:100F800085ED8A95F1F700009111F5CF8091E80089 -:100F900085FF0CC040E050E065E070E0C9010E94B0 -:100FA000B7098091E8008E778093E8000895CF9389 -:100FB000DF93EC018091E401843009F046C0909108 -:100FC0000C019923D9F090910D019923B9F08093E8 -:100FD000E9008FEF9091E800815095FD06C095E102 -:100FE0009A95F1F700008111F5CF8091E80085FF17 -:100FF0002CC040E050E060E170E017C081E08093D9 -:10100000E9008FEF9091E800815095FD06C095EDC5 -:101010009A95F1F700008111F5CF8091E80085FFE6 -:1010200014C040E050E068E070E0CE010E94B709D3 -:101030008091E8008E778093E80080E1FE01A2E5D0 -:10104000B1E001900D928A95E1F7DF91CF9108957B -:101050008091E301811109C00E94480B0E94A50BF9 -:101060008091E20084608093E20008951092E30191 -:10107000089508950C94F6200E94561A0E94FC20B0 -:101080000E94500E0C94460742E061EC81E00E9401 -:10109000C10A42E061EC82E00E94C10A42E061ECD8 -:1010A00083E00E94C10A42E161EC84E00C94C10A31 -:1010B0008091E601833009F455C030F4813071F03D -:1010C000823009F48EC008958A3009F47AC08B30DA -:1010D00009F460C0893009F09CC020C08091E5010E -:1010E000813A09F096C08091E800877F8093E800FC -:1010F0008091E9019091EA01892B21F460E182E578 -:1011000091E003C060E080E090E070E00E94020A9D -:101110008091E8008B778093E80008958091E50145 -:10112000813209F076C08091E9019091EA0100973F -:1011300019F0039709F06DC08091E800877F8093D4 -:10114000E8008091E80082FD05C08091E4018111F2 -:10115000F8CF5FC08091F100809362018091E80038 -:101160008B7753C08091E501813A09F052C080919C -:10117000E9019091EA01892B09F04BC08091E800C8 -:10118000877F8093E8008091E80080FFFCCF80910A -:101190000C0136C08091E5018132D9F58091E901D9 -:1011A0009091EA01892BA9F58091E800877F8093CF -:1011B000E8000E94F60A8091E70180930C010C94EC -:1011C000B9138091E501813221F58091E800877F94 -:1011D0008093E8000E94F60A8091E8018093630101 -:1011E00008958091E501813AA1F48091E800877F1C -:1011F0008093E8008091E80080FFFCCF809163013C -:101200008093F1008091E8008E778093E8000C9441 -:10121000F60A089584B7877F84BF0FB6F894A8951F -:1012200080916000886180936000109260000FBE22 -:1012300090E080E80FB6F89480936100909361008D -:101240000FBE0E949F0E0E94480B0E94A50B80912A -:10125000E20084608093E20078940E94300E0E9445 -:10126000A10E82E091E00E944B0E0E94E42080914A -:10127000E401853069F40E94181A8091E201882304 -:10128000B1F30E94421A882391F30E94A109EFCF83 -:101290000E94A70EECCF292F332723303105C9F048 -:1012A00060F42130310581F02230310509F041C070 -:1012B0008DE690E020E133E040C021323105E1F0DD -:1012C0002232310531F135C082E190E02DE733E083 -:1012D00034C099278130910549F028F0029749F5EB -:1012E000ECEDF2E005C0ECE0F3E002C0E4EFF2E088 -:1012F000849190E09F0121C06430D8F4E62FF0E0A3 -:10130000EE0FFF1FEE5DFE4F2081318189E090E0FE -:1013100014C0643070F470E0FB01EE0FFF1FE65E56 -:10132000FE4F20813181FB01EA5EFE4F808190E01B -:1013300004C080E090E020E030E0FA0131832083B7 -:10134000089580E189BD82E189BD09B400FEFDCF29 -:101350008091D8008F7D8093D8008091E0008260DA -:101360008093E0008091E00081FDFCCF0895CF9252 -:10137000DF92EF92FF920F931F93CF93DF93EC01D5 -:101380008B016A010E94150B811133C0C114D10475 -:1013900039F0F60180819181081B190BC80FD91F04 -:1013A000E12CF12C0115110519F18091E80085FD62 -:1013B00016C08091E8008E778093E800C114D104B4 -:1013C00049F0F60180819181E80EF91EF182E082F8 -:1013D00085E00FC00E94150B882321F30AC0899174 -:1013E0008093F10001501109FFEFEF1AFF0ADACFE5 -:1013F00080E0DF91CF911F910F91FF90EF90DF90F0 -:10140000CF9008952091EB013091EC01261737071A -:1014100048F06115710539F42091E8002E7720938A -:10142000E80001C0B901FC0120E06115710579F106 -:101430008091E4018823F1F18530F1F18091E80099 -:1014400083FD3CC08091E80082FD2EC08091E800C1 -:1014500080FFEBCF2091F3008091F20090E0922B7F -:101460006115710551F08830910538F42191209370 -:10147000F100615071090196F3CF21E0089709F05E -:1014800020E08091E8008E778093E800CECF211194 -:10149000CFCF0AC08091E401882361F0853061F0EC -:1014A0008091E80083FD0AC08091E80082FFF2CFBE -:1014B00080E0089582E0089583E0089581E0089532 -:1014C0002091EB013091EC012617370748F06115A8 -:1014D000710539F42091E8002E772093E80001C0CF -:1014E000B901FC0120E06115710591F18091E401E1 -:1014F000882309F440C0853009F43FC08091E8009A -:1015000083FD3DC08091E80082FD2FC08091E800FE -:1015100080FFE9CF2091F3008091F20090E0922BC0 -:101520006115710559F08830910540F4249120939C -:10153000F1003196615071090196F2CF21E00897D0 -:1015400009F020E08091E8008E778093E800CBCF0F -:101550002111CCCF0AC08091E401882361F085304D -:1015600061F08091E80083FD0AC08091E80082FF6D -:10157000F2CF80E0089582E0089583E0089581E04D -:101580000895982F973068F59093E900981739F0EF -:101590007091EC002091ED005091F00003C0242FD9 -:1015A000762F50E021FD02C09F5FECCF3091EB0021 -:1015B0003E7F3093EB003091ED003D7F3093ED00A6 -:1015C0003091EB0031603093EB007093EC0020938E -:1015D000ED005093F0002091EE0027FDE5CF80E074 -:1015E00008958F708093E90081E008958091E5016E -:1015F00087FF11C08091E80082FD05C08091E40161 -:101600008111F8CF11C08091E8008B770BC08091D9 -:10161000E401882349F08091E80080FFF8CF8091B1 -:10162000E8008E778093E80008952091E4003091DF -:10163000E50095E64091EC00842F817040FF23C0C7 -:101640008091E80080FD1DC08091E401882399F01D -:10165000853099F08091EB0085FD11C04091E40048 -:101660005091E5002417350729F3915011F09A01A4 -:10167000E1CF84E0089582E0089583E0089581E059 -:10168000089580E008954091E80042FFDDCF08957D -:101690000E94B60B0E94BE0BE0EEF0E080818160FC -:1016A0008083E8EDF0E080818F77808319BCA7ED1F -:1016B000B0E08C918E7F8C9380818F7E808310929E -:1016C000E30108950F931F93CF93DF930E94B60B0E -:1016D0000E94BE0BC8EDD0E088818F778883888117 -:1016E0008068888388818F7D888319BC1092E4018B -:1016F0001092E0011092E2011092E10100EE10E080 -:10170000F80180818B7F808388818160888342E0BB -:1017100060E080E00E94C10AE1EEF0E080818E7F0F -:101720008083E2EEF0E08081816080838081886048 -:101730008083F80180818E7F8083888180618883A7 -:10174000DF91CF911F910F910895E8EDF0E0808136 -:101750008F7E8083E7EDF0E080818160808384E08C -:1017600082BF81E08093E3010C94620BE8EDF0E02E -:1017700080818E7F80831092E20008951092DA00BB -:101780001092E10008951F920F920FB60F9211244C -:101790002F933F934F935F936F937F938F939F9379 -:1017A000AF93BF93EF93FF938091E10082FF0BC053 -:1017B0008091E20082FF07C08091E1008B7F8093DF -:1017C000E1000E942F0E8091DA0080FF1FC08091FF -:1017D000D80080FF1BC08091DA008E7F8093DA00F2 -:1017E0008091D90080FF0DC080E189BD82E189BD73 -:1017F00009B400FEFDCF81E08093E4010E94280837 -:1018000005C019BC1092E4010E9436088091E100E5 -:1018100080FF19C08091E20080FF15C08091E20036 -:101820008E7F8093E2008091E20080618093E200ED -:101830008091D80080628093D80019BC85E08093A5 -:10184000E4010E943A088091E10084FF30C0809159 -:10185000E20084FF2CC080E189BD82E189BD09B42A -:1018600000FEFDCF8091D8008F7D8093D8008091BD -:10187000E1008F7E8093E1008091E2008F7E809373 -:10188000E2008091E20081608093E2008091E001BB -:10189000882311F084E007C08091E30087FD02C037 -:1018A00081E001C083E08093E4010E943C088091C4 -:1018B000E10083FF29C08091E20083FF25C0809171 -:1018C000E100877F8093E10082E08093E401109241 -:1018D000E0018091E1008E7F8093E1008091E20041 -:1018E0008E7F8093E2008091E20080618093E2002D -:1018F00042E060E080E00E94C10A8091F0008860D0 -:101900008093F0000E943908FF91EF91BF91AF9151 -:101910009F918F917F916F915F914F913F912F9107 -:101920000F900FBE0F901F9018951F920F920FB639 -:101930000F9211242F933F934F935F936F937F9355 -:101940008F939F93AF93BF93CF93DF93EF93FF93C7 -:10195000C091E900CF708091EC00D82FD17080FD4C -:10196000D0E81092E9008091F000877F8093F0002A -:1019700078940E94D90C1092E9008091F000886060 -:101980008093F000CD2BCF70C093E900FF91EF91D1 -:10199000DF91CF91BF91AF919F918F917F916F9187 -:1019A0005F914F913F912F910F900FBE0F901F901D -:1019B00018951F93CF93DF93CDB7DEB7AA970FB6D5 -:1019C000F894DEBF0FBECDBFE5EEF1E08091F100EF -:1019D000819321E0ED3EF207C9F70E9458088091FB -:1019E000E80083FF24C18091E5019091E601492F31 -:1019F00050E04A30510508F01AC1FA01EA5AFF4F87 -:101A00000C948D22803881F0823809F010C18091C9 -:101A1000E9018F708093E9008091EB0085FB8827B6 -:101A200080F91092E90006C08091E1019091E201F5 -:101A3000911182609091E800977F9093E8008093E5 -:101A4000F1001092F100C8C0282F2D7F09F0EFC0DF -:101A5000882319F0823061F0EAC08091E70181307B -:101A600009F0E5C0933009F080E08093E2012BC0DB -:101A70008091E701811127C08091E9018F7009F4FD -:101A8000D6C08093E9002091EB0020FF1CC093306A -:101A900021F48091EB00806214C09091EB00906182 -:101AA0009093EB0021E030E0A90102C0440F551FE4 -:101AB0008A95E2F74093EA001092EA008091EB00E9 -:101AC00088608093EB001092E9008091E800877FA6 -:101AD00086C08111ACC01091E7011F778091E300AF -:101AE0008078812B8093E3008091E800877F80934A -:101AF000E8000E94F60A8091E80080FFFCCF809108 -:101B0000E30080688093E300111102C082E001C00D -:101B100083E08093E4018BC08058823008F087C056 -:101B20008091E7019091E8018C3D53E0950779F5AC -:101B300083E08A838AE289834FB7F894DE011396A3 -:101B400020E03EE051E2E32FF0E050935700E491B3 -:101B500020FF03C0E295EF703F5FEF708E2F90E0A3 -:101B6000EA3010F0C79601C0C0968D939D932F5F09 -:101B7000243149F74FBF8091E800877F8093E800C8 -:101B80006AE270E0CE0101960E94020A14C0AE0122 -:101B90004F5F5F4F6091E9010E944B09BC01892BA7 -:101BA00009F445C09091E800977F9093E8008981FF -:101BB0009A810E94600A8091E8008B778093E80008 -:101BC00036C08038A1F58091E800877F8093E800D7 -:101BD0008091E0018093F1008091E8008E778093FE -:101BE000E8000E94F60A23C0811121C08091E7011C -:101BF0009091E80199270297D4F48091E800877FBB -:101C00008093E8008091E7018093E0010E94F60A4A -:101C10008091E001811106C08091E30087FD02C040 -:101C200081E001C084E08093E4010E944408809137 -:101C3000E80083FF0AC08091E800877F8093E80076 -:101C40008091EB0080628093EB00AA960FB6F89427 -:101C5000DEBF0FBECDBFDF91CF911F9108950895D4 -:101C6000CF938091E4018823A1F0C091E900CF7067 -:101C70009091EC00892F817090FD80E8C82B109224 -:101C8000E9008091E80083FD0E94D90CCF70C093D9 -:101C9000E900CF91089590936901809368010895B8 -:101CA000E0916801F0916901309721F00190F08195 -:101CB000E02D099480E00895E0916801F0916901B8 -:101CC000309721F00280F381E02D09940895E0918E -:101CD0006801F0916901309721F00480F581E02DD1 -:101CE00009940895209166013091670128173907FA -:101CF00071F09093670180936601E0916801F09123 -:101D00006901309721F00680F781E02D099408954C -:101D100020916401309165012817390771F0909383 -:101D2000650180936401E0916801F0916901309749 -:101D300021F00084F185E02D0994089508950C9414 -:101D40009E0E0E945C1A0E940E040C94221BCF92DD -:101D5000DF92EF92FF920F931F93CF93DF93CDB754 -:101D6000DEB72B970FB6F894DEBF0FBECDBF0E9433 -:101D700026048BE6C82E81E0D82E00E010E0E02E8D -:101D8000802F0E941C05F60141916F01F82EF42668 -:101D9000B1F40F5F1F4F0E30110589F78FEF898364 -:101DA0008A831B820E94651A8160782F9D838C83B1 -:101DB00049815A816B818D810E944A0F40C0909168 -:101DC000CC0191FF04C08B870E9422058B8520E007 -:101DD00030E04F2D50E0922FBA01022E02C07595CF -:101DE00067950A94E2F760FF24C02E83EF8221E01A -:101DF00030E0690102C0CC0CDD1C9A95E2F790E05E -:101E00008C219D21892B09F420E028870E94651AE6 -:101E10008160782F9A8789874E815F8168858A855E -:101E20000E944A0FF801E559FE4F8081C826C08202 -:101E300006C02F5F3F4F2630310569F6AACF0E94BA -:101E4000091E0E94500E90916A018917A1F00E940C -:101E5000500E80936A012B960FB6F894DEBF0FBE2A -:101E6000CDBFDF91CF911F910F91FF90EF90DF9049 -:101E7000CF900C9446072B960FB6F894DEBF0FBE9A -:101E8000CDBFDF91CF911F910F91FF90EF90DF9029 -:101E9000CF900895CF93DF93CDB7DEB72B970FB6D2 -:101EA000F894DEBF0FBECDBF4F83588769877A870E -:101EB0008B87DE01119686E0FD0111928A95E9F784 -:101EC00085E0FE01379601900D928A95E1F74981F0 -:101ED0005A816B817C818D819E810E944D162B964B -:101EE0000FB6F894DEBF0FBECDBFDF91CF9108953E -:101EF000CF93C82F882309F4C1C0823859F40E94B7 -:101F0000500E81FDBBC089E30E94EA180E94A2190D -:101F100089E30CC0833879F40E94500E80FDAEC076 -:101F200083E50E94EA180E94A21983E50E942919FC -:101F3000CF910C94A219843859F40E94500E82FD5E -:101F40009DC087E40E94EA180E94A21987E4EECFA0 -:101F50008CEF8C0F813A48F48C2F0E94492081111C -:101F60008DC08C2F0E94EA18E3CF80E28C0F88305E -:101F700048F4C77081E001C0880FCA95EAF70E9453 -:101F80006B19D6CF8BE58C0F833078F4C53A29F0E6 -:101F9000C63A31F083E890E005C081E890E002C0E5 -:101FA00082E890E0CF910C94720E88E58C0F83311B -:101FB00008F064C0C83A39F1C93A41F1CA3A49F166 -:101FC000CB3A51F1CC3A59F1CD3A61F1C03B69F1CC -:101FD000CE3A71F1CF3A79F1C13B81F1C23B89F13F -:101FE000C33B91F1C43B99F1C53BA1F1C63BA9F1BB -:101FF000C73BB1F1C83BB9F1C93BC1F1CA3BC9F11B -:1020000080E090E038C082EE90E035C089EE90E04C -:1020100032C08AEE90E02FC085EB90E02CC086EBBA -:1020200090E029C087EB90E026C08CEC90E023C0C4 -:102030008DEC90E020C083E891E01DC08AE891E03B -:102040001AC082E991E017C084E991E014C081E2EE -:1020500092E011C083E292E00EC084E292E00BC0F5 -:1020600085E292E008C086E292E005C087E292E055 -:1020700002C08AE292E0CF910C94880ECF9108952D -:10208000882309F44BC0823859F40E94500E81FF16 -:1020900045C089E30E94EA180E94A21989E30CC096 -:1020A000833871F40E94500E80FF38C083E50E948F -:1020B000EA180E94A21983E50E9429190C94A2191A -:1020C000843859F40E94500E82FF28C087E40E9491 -:1020D000EA180E94A21987E4EFCF9CEF980F913A7B -:1020E00058F390E2980F983050F4877091E001C057 -:1020F000990F8A95EAF7892F0E947119DFCF9BE526 -:10210000980F933020F480E090E00C94720E885A7F -:10211000833120F480E090E00C94880E08958823A9 -:1021200021F00E946B190C94A2190895882321F0C4 -:102130000E9471190C94A2190895BF92CF92DF9258 -:10214000EF92FF920F931F93CF93DF9300D000D0B5 -:1021500000D0CDB7DEB77C0185E0F701DE01119636 -:1021600001900D928A95E1F7F70183819481892B83 -:1021700009F4DDC2908181818F3F19F49F3F09F4FA -:10218000D6C2F7010281258122952F7099838A8317 -:1021900089819A812E830E94A918182FB92E0E9436 -:1021A000A8180E946F17EB2DE295EF704E2F50E0AC -:1021B000FA01E05AFF4F2E810C948D228B2D807FE7 -:1021C0009B2D9F70F92E882319F0F29480EFF8224E -:1021D000002349F0FF2009F457C28F2D0E947B197C -:1021E0000E94A21951C2812F0E944010FF2009F4C1 -:1021F0009EC28F2D0E94811926960FB6F894DEBFDD -:102200000FBECDBFDF91CF911F910F91FF90EF9047 -:10221000DF90CF90BF900C94A2193B2D307F8B2D77 -:102220008F70303211F08295807F112319F01130B8 -:1022300021F12CC00023B9F0222309F490C12130F0 -:1022400009F08DC126960FB6F894DEBF0FBECDBF44 -:10225000DF91CF911F910F91FF90EF90DF90CF9082 -:10226000BF900C948B19222319F0213009F45FC21E -:102270008E830E948E198E8186C1002321F0223028 -:1022800008F055C26CC1211152C27DC1002321F05A -:10229000222309F464C1F8C1222309F474C109C2DC -:1022A0008B2D86958695837019F08130D1F03FC2D1 -:1022B000002321F0812F9B2D937002C080E090E0DD -:1022C00026960FB6F894DEBF0FBECDBFDF91CF913B -:1022D0001F910F91FF90EF90DF90CF90BF900C94E3 -:1022E000720E002321F0812F9B2D937002C080E09D -:1022F00090E026960FB6F894DEBF0FBECDBFDF91FB -:10230000CF911F910F91FF90EF90DF90CF90BF90F2 -:102310000C94880E812F002319F00E94111D02C019 -:102320000E94791D26960FB6F894DEBF0FBECDBF72 -:10233000DF91CF911F910F91FF90EF90DF90CF90A1 -:10234000BF900C94FE1D8B2D837009F075C0011198 -:10235000EEC1812F829586958770880F880F912F07 -:102360009F70C92ED12CE12CF12C082E04C0CC0C6E -:10237000DD1CEE1CFF1C0A94D2F714FF12C00FE004 -:1023800010E020E030E004C0000F111F221F331FB7 -:102390008A95D2F7C901B80160957095809590959E -:1023A00003C060E070E0CB014B2D4695469543702D -:1023B0004230C1F060F56C297D298E299F2941307A -:1023C00051F126960FB6F894DEBF0FBECDBFDF9158 -:1023D000CF911F910F91FF90EF90DF90CF90BF9022 -:1023E0000C9496176C297D298E299F2926960FB665 -:1023F000F894DEBF0FBECDBFDF91CF911F910F913B -:10240000FF90EF90DF90CF90BF900C94B2170E9496 -:102410009617C701B60126960FB6F894DEBF0FBE19 -:10242000CDBFDF91CF911F910F91FF90EF90DF9083 -:10243000CF90BF900C947A17002319F08B2D8170E8 -:1024400001C08695882309F472C1812F82958695F3 -:102450008770880F880F912F9F70C92ED12CE12C87 -:10246000F12C082E04C0CC0CDD1CEE1CFF1C0A94C1 -:10247000D2F714FF12C00FE010E020E030E004C0FB -:10248000000F111F221F331F8A95D2F7C901B8010F -:10249000609570958095909503C060E070E0CB01E9 -:1024A0004B2D4695469543704230C1F060F56C293E -:1024B0007D298E299F29413051F126960FB6F89437 -:1024C000DEBF0FBECDBFDF91CF911F910F91FF9067 -:1024D000EF90DF90CF90BF900C9470186C297D29FD -:1024E0008E299F2926960FB6F894DEBF0FBECDBF6A -:1024F000DF91CF911F910F91FF90EF90DF90CF90E0 -:10250000BF900C948C180E947018C701B6012696D3 +:1004D000DAE0DEBFCDBF04B603FE24C08091F00198 +:1004E0009091F101A091F201B091F3018730904B0E +:1004F000A740B04BB9F41092F0011092F1011092A4 +:10050000F2011092F30114BE84B7877F84BF88E1A3 +:100510000FB6F89480936000109260000FBEE0E088 +:10052000FFE3099511E0A0E0B1E0EAE1F8E402C0E0 +:1005300005900D92A433B107D9F711E0A4E3B1E01F +:1005400001C01D92A03FB107E1F70E94E6090C949B +:100550000B240C940000662319F06130F1F03DC0CB +:10056000FC018281882341F00E94B51B90933501E4 +:100570008093340181EE1CC080913401909135014B +:100580000E94C11B8634910534F486E20E94481013 +:1005900086E20E94101181EE1EC0FC018281882338 +:1005A00051F00E94B51B909335018093340185EE84 +:1005B0000E94481012C080913401909135010E9430 +:1005C000C11B8634910534F487E20E94481087E20B +:1005D0000E94101185EE0E94101180E090E00895B5 +:1005E00008956091B3017091B4018091B50190912B +:1005F000B6010E94131B56985E9825982D98269850 +:100600002E9827982F98813019F0823021F0089584 +:10061000259A2D9A0895269A2E9A08950C94F102FF +:1006200056985E9825982D9826982E9827982F985A +:100630008FEF90E0909389008093880090938B00D7 +:1006400080938A0090938D0080938C00259A2D9A38 +:100650002FEF80E792E0215080409040E1F700C00A +:100660000000269A2E9A2FEF80E792E021508040DA +:100670009040E1F700C00000279A2F9A2FEF80E703 +:1006800092E0215080409040E1F700C000002598A2 +:100690002D982FEF80E792E0215080409040E1F7C5 +:1006A00000C0000026982E982FEF80E792E021509E +:1006B00080409040E1F700C0000027982F9856989E +:1006C0005E9825982D9826982E9827982F9808950B +:1006D00089EA8093800089E08093810024982C9897 +:1006E0003F988AB18F748AB96E98479A8BB1806BA4 +:1006F0008BB9769A0E9410030C94F00280E28093EA +:1007000000018091360181110EC00E94CD0381E06D +:10071000809336012FEF83ED90E32150804090408D +:10072000E1F700C0000080E40E94D3038093000141 +:1007300081112EC00E94FD0380930001811128C009 +:100740000E94FD0380930001811122C08FE30E946B +:10075000FD038093000181111BC00E94F50380E41A +:100760000E94D30380930001811112C08CE00E948B +:10077000FD038093000181110BC00E94FD03809353 +:100780000001811105C08FE30E94FD0380930001E9 +:100790000E94F5038091000108951092B9008AE04B +:1007A0008093B800089594EA9093BC009091BC00A7 +:1007B00097FFFCCF9091B900987F983021F090314D +:1007C00011F081E008958093BB0084E88093BC0021 +:1007D0008091BC0087FFFCCF8091B900887F883171 +:1007E00011F0803471F780E0089584E98093BC00B3 +:1007F0008091BC0084FDFCCF08958093BB0084E809 +:100800008093BC008091BC0087FFFCCF9091B90021 +:10081000987F81E0983209F480E0089584E880931D +:10082000BC008091BC0087FFFCCF8091BB00089585 +:1008300080910001811115C080E40E94D303809350 +:10084000000181110CC082E10E94FD038093000130 +:10085000811105C08FEF0E94FD03809300010E946B +:10086000F50384B1807F84B985B1807F85B98AB171 +:10087000837F8AB98BB1837F8BB93E984698089560 +:100880000E947E03809300010E94180480B38C7044 +:1008900080BB81B3836F81BBE6E4F1E0A8E3B1E004 +:1008A00011921D9281E0E435F807D1F70C946803AA +:1008B000BF92CF92DF92EF92FF920F931F93CF934D +:1008C000DF9380910001882379F0809137018F5F59 +:1008D00080933701811108C00E947E03809300013C +:1008E000811102C00E94100308E311E0C0E0D0E0D3 +:1008F000DD24D39482E0C82EEE24E394F12CC7309B +:1009000000F580910001811162C080E40E94D30350 +:1009100080930001811112C082E10E94FD03809347 +:10092000000181110BC0C7010C2E01C0880F0A9471 +:10093000EAF780950E94FD03809300010E94F50371 +:1009400046C0CA30A1F028F4C83059F0C93061F06F +:1009500005C0CC3089F070F0CD3089F0209A28980D +:1009600010C0219A29980DC0229A2A980AC0239A69 +:100970002B9807C0529A01C0539A5B9802C03E9AC6 +:100980004698E0EAEA95F1F78FB179995AC092E07A +:1009900081708D25892B7C9B02C090E001C094E082 +:1009A000892B7D9B02C090E001C098E0892B7E9B43 +:1009B00002C090E001C090E1892B9FB19095991FF2 +:1009C0009927991F9295990F907E892B0FC080913E +:1009D000000181114BC080E40E94D3038093000189 +:1009E000882389F1B12C0E94F5038B2DF8019081A9 +:1009F000981719F08083C09201010E941804219673 +:100A00000F5F1F4FCE30D10509F079CF80910101E2 +:100A1000882371F1815080930101882339F08FE997 +:100A20009FE00197F1F700C0000022C0A6E4B1E00A +:100A3000E8E3F1E081918D9391E0E634F907D1F795 +:100A400017C090E0A5CF83E10E94FD0380930001D1 +:100A50008111C8CF81E40E94D303809300018111EA +:100A6000C1CF0E940E04B82EB094BDCF80E0BECF9F +:100A70000E940E0381E0DF91CF911F910F91FF90B3 +:100A8000EF90DF90CF90BF900895E82FF0E0EA5B01 +:100A9000FE4F808108950895089596E0799FF001B2 +:100AA000112494E5899FE00DF11D1124E60FF11D3D +:100AB000EE0FFF1FEC51FF4F859194910895880F21 +:100AC000991F805A9040FC01859194910895880F58 +:100AD000991F80529F4FFC018591949108950F9327 +:100AE0001F93CF93DF93EC01811520E3920730F53C +:100AF000811530E2930708F0B1C08B3B910588F473 +:100B0000883A910508F058C0853A910508F049C027 +:100B10008430910508F043C08130910509F4B2C1D9 +:100B2000AEC18F3F910509F0D0F5803F910508F0E7 +:100B300092C0805E9109089790F1A1C1C11581E52D +:100B4000D807A8F4C23090E5D90708F09FC0C115B6 +:100B500020E5D20709F486C008F092C0C11580E4F0 +:100B6000D80708F08CC18E011127106CCCC1C115BB +:100B700090E8D90758F4C11520E7D20708F07BC1E7 +:100B8000C11530E6D30708F423C179C1C11580E946 +:100B9000D80708F074C18E011F70106AB4C18E01AD +:100BA000B2C1853A910509F470C1863A910509F4FC +:100BB0006FC103E810E4A7C1883A910509F46BC13D +:100BC000893A910509F46AC18A3A910509F469C123 +:100BD0008B3A910509F468C18C3A910509F467C113 +:100BE0008D3A910509F466C1803B910509F465C110 +:100BF0008E3A910509F464C18F3A910509F463C1F5 +:100C0000813B910509F462C1823B910509F461C100 +:100C1000833B910509F460C1843B910509F45FC1F0 +:100C2000853B910509F45EC1863B910509F45DC1E0 +:100C3000873B910509F45CC1883B910509F45BC1D0 +:100C4000893B910509F45AC18A3B910509F059C1C4 +:100C50000AE216E458C18C01106555C19F700E94CC +:100C6000670552C10E94A2149FEF24E33CE091501B +:100C700020403040E1F700C000000E940F1C43C13B +:100C80008091CF0181608093CF013DC10E94B71D4B +:100C9000811102C00E949D1D0E94D41D90E090937E +:100CA000F0018093EF01C23080E5D80721F48091F4 +:100CB000EF01816086C0C43090E5D90721F48091AE +:100CC000EF0182607EC0C63020E5D20721F480911A +:100CD000EF01846076C0C83030E5D30719F4809105 +:100CE000EF0127C0CA3080E5D80721F48091EF01D9 +:100CF000806167C0CC3090E5D90721F48091EF0185 +:100D000080625FC0CE3020E5D20721F48091EF01F0 +:100D1000806457C0C03130E5D30721F48091EF01E2 +:100D200080684FC0C23180E5D80729F48091EF0177 +:100D30008460886046C0C33090E5D90721F4809173 +:100D4000EF018E7F3EC0C53020E5D20721F48091AF +:100D5000EF018D7F36C0C73030E5D30721F4809195 +:100D6000EF018B7F2EC0C93080E5D80719F4809140 +:100D7000EF0126C0CB3090E5D90721F48091EF0137 +:100D80008F7E1FC0CD3020E5D20721F48091EF0186 +:100D90008F7D17C0CF3030E5D30721F48091EF016C +:100DA0008F7B0FC0C13180E5D80721F48091EF011E +:100DB0008F7707C0C331D04531F48091EF018B7F2D +:100DC000877F8093EF018091EF010E94D81D9BC027 +:100DD0008D2F99278F70992781309105E9F48E0125 +:100DE000037011279C0102C0220F331F0A95E2F7FE +:100DF00089011C68CE0164E0880F991F6A95E1F7AC +:100E000088279370082B192B73E0CC0FDD1F7A9580 +:100E1000E1F7C076DD272CC08230910529F41C2F24 +:100E20000027016F106A6FC08330910561F4CE0115 +:100E30008370992701E010E002C0000F111F8A950E +:100E4000E2F71C680EC0049709F05DC0CE01837004 +:100E5000992701E010E002C0000F111F8A95E2F708 +:100E60001A6843E0CC0FDD1F4A95E1F7C07ED770CA +:100E70000C2B1D2B48C08E011F70106244C000E077 +:100E800010E041C001E010E03EC001E810E43BC0CA +:100E900002E810E438C002EE14E435C009EE14E4B0 +:100EA00032C00AEE14E42FC005EB14E42CC006EBAC +:100EB00014E429C007EB14E426C00CEC14E423C0AE +:100EC0000DEC14E420C003E815E41DC00AE815E4A5 +:100ED0001AC002E915E417C004E915E414C001E2E0 +:100EE00016E411C003E216E40EC004E216E40BC0DF +:100EF00005E216E408C006E216E405C007E216E4BF +:100F000002C000E014E4C801DF91CF911F910F915E +:100F1000089596E0799FF001112494E5899FE00DF2 +:100F2000F11D1124E60FF11DEE0FFF1FEC51FF4FD5 +:100F300085919491803E9105E0F4803C910558F5AF +:100F40008133910509F46FC048F48932910509F4A1 +:100F500063C08A32910509F46DC072C0893391056E +:100F6000E9F082389105D1F08533910509F44DC03F +:100F700067C0833E910581F138F4803E9105B9F058 +:100F8000823E9105D9F05CC0863E910561F1873EB5 +:100F90009105A1F155C00E945F0508952091EF01D0 +:100FA00020FD02C021FF4CC080EE90E049C080913E +:100FB000EF0180FFF9CF89E390E042C08091EF011B +:100FC00082FF0EC08091EF0184FF03C080E090E0BB +:100FD00037C083EE90E034C08091EF0182FFF2CF02 +:100FE00082EE90E02DC08091EF0183FF0BC08091D5 +:100FF000EF0184FDEBCF87EE90E022C08091EF01FE +:1010000083FFF5CF86EE90E01BC08091EF0185FF56 +:1010100007C089E290E014C08091EF0185FFF9CF0D +:1010200085E390E00DC08091EF0186FF07C08AE262 +:1010300090E006C08091EF0186FFF9CF81E390E058 +:101040000E946F05089508950C942308809164010F +:101050000895CF93DF9300D01F92CDB7DEB72091D4 +:10106000E601243019F523E029839B838A832093AA +:10107000E9008FEF9091E800815095FD06C095ED55 +:101080009A95F1F700008111F5CF8091E80085FF76 +:101090000DC040E050E063E070E0CE0101960E9498 +:1010A000930A8091E8008E778093E8000F900F906C +:1010B0000F90DF91CF910895CF93DF9300D01F92CF +:1010C000CDB7DEB72091E601243021F522E0298357 +:1010D0009B838A8383E08093E9008FEF9091E800FF +:1010E000815095FD06C095ED9A95F1F700008111AC +:1010F000F5CF8091E80085FF0DC040E050E063E04F +:1011000070E0CE0101960E94930A8091E8008E77EC +:101110008093E8000F900F900F90DF91CF9108958A +:101120002091E6012430F1F422E02093E9002FEF32 +:101130003091E800215035FD06C035ED3A95F1F7C4 +:1011400000002111F5CF2091E80025FF0BC040E001 +:1011500050E065E070E00E94930A8091E8008E778D +:101160008093E8000895CF93DF93EC018091E6012E +:10117000843009F046C090910C019923D9F09091E8 +:101180000D019923B9F08093E9008FEF9091E80069 +:10119000815095FD06C095E19A95F1F70000811107 +:1011A000F5CF8091E80085FF2CC040E050E060E181 +:1011B00070E017C081E08093E9008FEF9091E80024 +:1011C000815095FD06C095ED9A95F1F700008111CB +:1011D000F5CF8091E80085FF14C040E050E068E062 +:1011E00070E0CE010E94930A8091E8008E77809390 +:1011F000E80080E1FE01A4E5B1E001900D928A953E +:10120000E1F7DF91CF9108958091E501811109C047 +:101210000E94250C0E94820C8091E20084608093E1 +:10122000E20008951092E501089508950C94332288 +:101230000E94A61B0E9439220E941F0F0C942408B2 +:1012400042E061EC81E00E949F0B42E061EC82E0B1 +:101250000E949F0B42E061EC83E00E949F0B42E101 +:1012600061EC84E00C949F0B8091E801833009F4D9 +:1012700055C030F4813071F0823009F48EC0089589 +:101280008A3009F47AC08B3009F460C0893009F0E3 +:101290009CC020C08091E701813A09F096C08091FE +:1012A000E800877F8093E8008091EB019091EC014A +:1012B000892B21F060E080E090E003C060E184E5EC +:1012C00091E070E00E94DC0A8091E8008B778093C7 +:1012D000E80008958091E701813209F076C080919D +:1012E000EB019091EC01009719F0039709F06DC0A4 +:1012F0008091E800877F8093E8008091E80082FD7C +:1013000005C08091E6018111F8CF5FC08091F100A6 +:10131000809364018091E8008B7753C08091E7014E +:10132000813A09F052C08091EB019091EC01892B38 +:1013300009F04BC08091E800877F8093E80080919E +:10134000E80080FFFCCF80910C0136C08091E7015E +:101350008132D9F58091EB019091EC01892BA9F5AF +:101360008091E800877F8093E8000E94D40B8091F1 +:10137000E90180930C010C94A2148091E701813261 +:1013800021F58091E800877F8093E8000E94D40BCC +:101390008091EA018093650108958091E701813A87 +:1013A000A1F48091E800877F8093E8008091E800B5 +:1013B00080FFFCCF809165018093F1008091E8006F +:1013C0008E778093E8000C94D40B089584B7877FC0 +:1013D00084BF88E10FB6F89480936000109260009B +:1013E0000FBE90E080E80FB6F89480936100909370 +:1013F00061000FBE0E946E0F0E94250C0E94820C9D +:101400008091E20084608093E20078940E94FD0E57 +:101410000E94700F82E091E00E941A0F0E94212228 +:101420008091E601853069F40E94661B8091E40199 +:101430008823B1F30E94911B882391F30E947D0AB7 +:10144000EFCF0E94760FECCF292F332723303105C1 +:10145000A9F06CF42130310509F442C02230310585 +:1014600009F043C08DE690E020E133E042C0213234 +:101470003105C9F02232310519F137C09927813081 +:10148000910541F08230910541F0892B71F5ECE036 +:10149000F3E005C0E4EFF2E002C0ECEDF2E084918D +:1014A00090E09F0126C0643000F5E62FF0E0EE0FDB +:1014B000FF1FEE5DFE4F2081318189E090E019C071 +:1014C000643098F4E62FF0E0DF01AA0FBB1FA65EA0 +:1014D000BE4F2D913C91EA5EFE4F808190E009C0A5 +:1014E00082E190E02DE733E004C080E090E020E06E +:1014F00030E0FA0131832083089580E189BD82E1E3 +:1015000089BD09B400FEFDCF8091D8008F7D809306 +:10151000D8008091E00082608093E0008091E0003C +:1015200081FDFCCF0895CF92DF92EF92FF920F934F +:101530001F93CF93DF937C018B01EA010E94F50B8F +:10154000811131C0209731F088819981081B190BD6 +:10155000E80EF91EC12CD12C0115110519F180914D +:10156000E80085FD14C08091E8008E778093E80044 +:10157000209741F0888199818C0D9D1D99838883E6 +:1015800085E011C00E94F50B882331F30CC0F701F0 +:1015900081917F018093F10001501109FFEFCF1A73 +:1015A000DF0ADACF80E0DF91CF911F910F91FF909A +:1015B000EF90DF90CF9008952091ED013091EE01F2 +:1015C0002617370748F06115710539F42091E800B6 +:1015D0002E772093E80001C0B901FC0120E06115DD +:1015E0007105B9F18091E601882309F440C0853086 +:1015F00009F43FC08091E80083FD3DC08091E80080 +:1016000082FF06C08091E80082FF26C080E0089536 +:101610008091E80080FFE3CF2091F3008091F200F9 +:1016200090E0922B6115710551F08830910538F4E6 +:1016300021912093F100615071090196F3CF21E0CF +:10164000089709F020E08091E8008E778093E80009 +:10165000C6CF2111C7CFD6CF8091E601882339F0BC +:10166000853039F08091E80083FFCCCF04C082E060 +:10167000089583E0089581E008952091ED0130916F +:10168000EE012617370748F06115710539F42091EE +:10169000E8002E772093E80001C0B901FC0120E0AA +:1016A00061157105C1F18091E601882309F441C0FB +:1016B000853009F440C08091E80083FD3EC08091F0 +:1016C000E80082FF06C08091E80082FF27C080E02A +:1016D00008958091E80080FFE3CF2091F30080918E +:1016E000F20090E0922B6115710559F08830910558 +:1016F00040F424912093F1003196615071090196D4 +:10170000F2CF21E0089709F020E08091E8008E7781 +:101710008093E800C5CF2111C6CFD5CF8091E601D7 +:10172000882339F0853039F08091E80083FFCBCFF2 +:1017300004C082E0089583E0089581E00895982F21 +:10174000973058F59093E900981739F07091EC00B4 +:101750002091ED005091F00003C0242F762F50E02F +:1017600021FF19C03091EB003E7F3093EB003091A8 +:10177000ED003D7F3093ED003091EB003160309310 +:10178000EB007093EC002093ED005093F00020915B +:10179000EE0027FF07C09F5FD3CF8F708093E900D3 +:1017A00081E0089580E008958091E70187FD05C0FC +:1017B0008091E80080FF0EC012C08091E80082FD99 +:1017C00005C08091E6018111F8CF08958091E8006D +:1017D0008B7708C08091E6018111EACF089580914E +:1017E000E8008E778093E80008958091E40090915E +:1017F000E50045E62091EC0020FF21C02091E800A3 +:1018000020FD21C02091E601222389F0253089F0B6 +:101810002091EB0025FD0FC02091E4003091E50000 +:101820002817390739F3415041F0C901E3CF82E06D +:10183000089583E0089581E0089584E0089520915B +:10184000E80022FFDFCF80E008950E94930C0E9401 +:101850009B0CE0EEF0E0808181608083E8EDF0E0B9 +:1018600080818F77808319BCA7EDB0E08C918E7F4B +:101870008C9380818F7E80831092E50108950F9371 +:101880001F93CF93DF930E94930C0E949B0CC8ED93 +:10189000D0E088818F778883888180688883888179 +:1018A0008F7D888319BC1092E6011092E20110929C +:1018B000E4011092E30100EE10E0F80180818B7FDB +:1018C000808388818160888342E060E080E00E94BC +:1018D0009F0BE1EEF0E080818E7F8083E2EEF0E00E +:1018E000808181608083808188608083F80180812D +:1018F0008E7F8083888180618883DF91CF911F9163 +:101900000F910895E8EDF0E080818F7E8083E7ED10 +:10191000F0E080818160808384E082BF81E08093F9 +:10192000E5010C943F0CE8EDF0E080818E7F808330 +:101930001092E20008951092DA001092E1000895EA +:101940001F920F920FB60F9211242F933F934F9334 +:101950005F936F937F938F939F93AF93BF93EF9317 +:10196000FF938091E10082FF0BC08091E20082FF33 +:1019700007C08091E1008B7F8093E1000E94FC0E04 +:101980008091DA0080FF1FC08091D80080FF1BC0CB +:101990008091DA008E7F8093DA008091D90080FFF9 +:1019A0000DC080E189BD82E189BD09B400FEFDCF93 +:1019B00081E08093E6010E94040905C019BC1092E1 +:1019C000E6010E9412098091E10080FF19C0809118 +:1019D000E20080FF15C08091E2008E7F8093E200DC +:1019E0008091E20080618093E2008091D800806263 +:1019F0008093D80019BC85E08093E6010E94160907 +:101A00008091E10084FF30C08091E20084FF2CC00F +:101A100080E189BD82E189BD09B400FEFDCF8091DE +:101A2000D8008F7D8093D8008091E1008F7E8093D5 +:101A3000E1008091E2008F7E8093E2008091E200DD +:101A400081608093E2008091E201882311F084E0BC +:101A500007C08091E30087FF02C083E001C081E0FE +:101A60008093E6010E9418098091E10083FF29C05C +:101A70008091E20083FF25C08091E100877F809301 +:101A8000E10082E08093E6011092E2018091E100A2 +:101A90008E7F8093E1008091E2008E7F8093E20050 +:101AA0008091E20080618093E20042E060E080E0AB +:101AB0000E949F0B8091F00088608093F0000E944C +:101AC0001509FF91EF91BF91AF919F918F917F91F8 +:101AD0006F915F914F913F912F910F900FBE0F909B +:101AE0001F9018951F920F920FB60F9211242F93EB +:101AF0003F934F935F936F937F938F939F93AF9396 +:101B0000BF93CF93EF93FF93C091E900CF70809183 +:101B1000EC001092E9008091F000877F8093F00044 +:101B200078940E94AE0D1092E9008091F0008860D8 +:101B30008093F000C093E900FF91EF91CF91BF91A6 +:101B4000AF919F918F917F916F915F914F913F9155 +:101B50002F910F900FBE0F901F9018951F93CF934A +:101B6000DF93CDB7DEB7AA970FB6F894DEBF0FBEEE +:101B7000CDBFE7EEF1E08091F100819321E0EF3EEF +:101B8000F207C9F70E9434098091E80083FF1CC165 +:101B90002091E7013091E801832F90E08A30910590 +:101BA00008F012C1FC01EA5AFF4F0C94BB23203805 +:101BB00081F0223809F008C18091EB018F70809389 +:101BC000E9008091EB0085FB882780F91092E900FD +:101BD00006C08091E3019091E4019111826090919F +:101BE000E800977F9093E8008093F1001092F10055 +:101BF000C5C0822F8D7F09F0E7C0222319F0223063 +:101C000061F0E2C08091E901813009F0DDC033303C +:101C100009F080E08093E40128C08091E9018111FE +:101C200024C02091EB012F7009F4CEC02093E9006D +:101C30008091EB0080FF19C08091EB00333011F4EC +:101C4000806211C080618093EB0081E090E0022E01 +:101C500001C0880F0A94EAF78093EA001092EA0024 +:101C60008091EB0088608093EB001092E9008091F6 +:101C7000E800877F86C02111A7C01091E9011F7776 +:101C80008091E3008078812B8093E3008091E800CD +:101C9000877F8093E8000E94D40B8091E80080FF4A +:101CA000FCCF8091E30080688093E300112311F062 +:101CB00083E001C082E08093E60186C02058223094 +:101CC00008F082C08091E9019091EA018C3D23E007 +:101CD000920779F583E08A838AE289834FB7F89483 +:101CE000DE01139620E03EE051E2E32FF0E0509356 +:101CF0005700E49120FF03C0E295EF703F5FEF7063 +:101D00008E2F90E0EA3010F0C79601C0C0968D93F8 +:101D10009D932F5F243149F74FBF8091E800877F63 +:101D20008093E8006AE270E0CE0101960E94DC0A2E +:101D300014C0AE014F5F5F4F6091EB010E94240A17 +:101D4000009709F441C02091E800277F2093E80024 +:101D5000BC0189819A810E943D0B8091E8008B77BC +:101D60008093E80031C0203879F58091E800877FC2 +:101D70008093E8008091E2018093F1008091E80077 +:101D80008E778093E8000E94D40B1EC021111CC0E6 +:101D90009091E9019230C0F48091E800877F8093B0 +:101DA000E8009093E2010E94D40B8091E20181113E +:101DB00004C08091E30087FF02C084E001C081E09D +:101DC0008093E6010E9420098091E80083FF0AC009 +:101DD0008091E800877F8093E8008091EB0080622B +:101DE0008093EB00AA960FB6F894DEBF0FBECDBF6E +:101DF000DF91CF911F9108950895CF938091E601CF +:101E00008823B1F08091E9008F709091EC0090FFF1 +:101E100002C090E801C090E0C92FC82B1092E900E1 +:101E20008091E80083FD0E94AE0DCF70C093E90061 +:101E3000CF91089590936B0180936A010895E0918A +:101E40006A01F0916B01309721F00190F081E02D53 +:101E5000099480E00895E0916A01F0916B01309758 +:101E600021F00280F381E02D09940895E0916A0148 +:101E7000F0916B01309721F00480F581E02D0994F9 +:101E8000089520916801309169018217930771F0DC +:101E90009093690180936801E0916A01F0916B0170 +:101EA000309721F00680F781E02D09940895209164 +:101EB0006601309167018217930771F09093670173 +:101EC00080936601E0916A01F0916B01309721F0F7 +:101ED0000084F185E02D0994089508950C946D0F08 +:101EE0000E94AC1B0E9440040C94721CCF92DF92A3 +:101EF000EF92FF920F931F93CF93DF93CDB7DEB78F +:101F00002B970FB6F894DEBF0FBECDBF0E945804CA +:101F10003DE6E32E31E0F32E00E010E0C02E802FEE +:101F20000E944505F701D1907F01D826B1F40F5FDB +:101F30001F4F0E30110591F78FEF89838A831B8223 +:101F40000E94B51B8160782F9D838C8349815A81C3 +:101F50006B818D810E94191041C09091CF0191FF3A +:101F600004C08B870E944B058B8520E030E04D2D0F +:101F700050E0922FBA01022E02C0759567950A941F +:101F8000E2F760FF25C02E83CF82EE24E394F12C8C +:101F900002C0EE0CFF1C9A95E2F790E08E219F2183 +:101FA00021E0892B09F420E028870E94B51B81607D +:101FB000782F9A8789874E815F8168858A850E94FC +:101FC0001910F801E359FE4F80818E25808306C0E9 +:101FD0002F5F3F4F2630310561F6A9CF0E94561F73 +:101FE00010916C010E941F0F1817A1F00E941F0F83 +:101FF00080936C012B960FB6F894DEBF0FBECDBF59 +:10200000DF91CF911F910F91FF90EF90DF90CF90D4 +:102010000C9424082B960FB6F894DEBF0FBECDBFEC +:10202000DF91CF911F910F91FF90EF90DF90CF90B4 +:102030000895CF93DF93CDB7DEB72B970FB6F89403 +:10204000DEBF0FBECDBF4F83588769877A878B87E6 +:10205000DE01119686E0FD0111928A95E9F785E08F +:10206000FE01379601900D928A95E1F749815A81D8 +:102070006B817C818D819E810E946E172B960FB69D +:10208000F894DEBF0FBECDBFDF91CF9108950895C4 +:10209000CF93C82F882309F4C1C0823859F40E9415 +:1020A0001F0F81FDBBC089E30E941A1A0E94E41A27 +:1020B00089E30CC0833879F40E941F0F80FDAEC005 +:1020C00083E50E941A1A0E94E41A83E50E945A1AB4 +:1020D000CF910C94E41A843859F40E941F0F82FDAA +:1020E0009DC087E40E941A1A0E94E41A87E4EECF8A +:1020F0008CEF8C0F813A48F48C2F0E94892181113A +:102100008DC08C2F0E941A1AE3CF80E28C0F88308A +:1021100048F4C77081E001C0880FCA95EAF70E94B1 +:102120009B1AD6CF8BE58C0F833078F4C53A29F013 +:10213000C63A31F482E890E005C081E890E002C040 +:1021400083E890E0CF910C94410F88E58C0F8331A8 +:1021500008F064C0C83A39F1C93A41F1CA3A49F1C4 +:10216000CB3A51F1CC3A59F1CD3A61F1C03B69F12A +:10217000CE3A71F1CF3A79F1C13B81F1C23B89F19D +:10218000C33B91F1C43B99F1C53BA1F1C63BA9F119 +:10219000C73BB1F1C83BB9F1C93BC1F1CA3BC9F575 +:1021A0008AE292E038C082EE90E035C089EE90E09D +:1021B00032C08AEE90E02FC085EB90E02CC086EB19 +:1021C00090E029C087EB90E026C08CEC90E023C023 +:1021D0008DEC90E020C083E891E01DC08AE891E09A +:1021E0001AC082E991E017C084E991E014C081E24D +:1021F00092E011C083E292E00EC084E292E00BC054 +:1022000085E292E008C086E292E005C087E292E0B3 +:1022100002C080E090E0CF910C94570FCF910895C9 +:10222000882309F44BC0823859F40E941F0F81FFA4 +:1022300045C089E30E941A1A0E94E41A89E30CC07F +:10224000833871F40E941F0F80FF38C083E50E941D +:102250001A1A0E94E41A83E50E945A1A0C94E41A8E +:10226000843859F40E941F0F82FF28C087E40E941F +:102270001A1A0E94E41A87E4EFCF9CEF980F913A64 +:1022800058F390E2980F983050F4877091E001C0B5 +:10229000990F8A95EAF7892F0E94A11ADFCF9BE553 +:1022A000980F933020F480E090E00C94410F885A0E +:1022B000833120F480E090E00C94570F0895882338 +:1022C00021F00E949B1A0C94E41A0895882321F0AF +:1022D0000E94A11A0C94E41A0895CF92DF92EF9213 +:1022E000FF920F931F93CF93DF93CDB7DEB728975D +:1022F0000FB6F894DEBF0FBECDBF8C0185E0F801AC +:10230000DE01119601900D928A95E1F7F801D080D7 +:10231000E180F280558152955F7023813481232BB7 +:1023200039F0FFEFEF1206C081E0DF1203C003C0F7 +:1023300081E001C080E080FDE2C2C8015F830E94AD +:102340004710D982EA8269817A818F2D0E94161AFC +:102350009E8388870E94CA190E949D184E815F81C2 +:102360006885FF2029F00E94B81A68855F814E8138 +:10237000E42FE295EF70F0E0E05AFF4F0C94BB239E +:10238000842F807F142F1F70882311F01295107FE7 +:10239000FF20B1F0112309F467C280E2860F883074 +:1023A00028F4812F68870E949B1A04C0812F6887B8 +:1023B0000E94AB1A688568870E94E41A688554C237 +:1023C000862F68870E9410116885112309F497C22F +:1023D000605E812F683018F40E94A11A02C00E942A +:1023E000B11A28960FB6F894DEBF0FBECDBFDF91AD +:1023F000CF911F910F91FF90EF90DF90CF900C94B1 +:10240000E41A242F207F842F8F70203211F08295C0 +:10241000807F662319F0613019F12BC0FF20B1F0E5 +:10242000552309F493C1513009F090C128960FB695 +:10243000F894DEBF0FBECDBFDF91CF911F910F91FA +:10244000FF90EF90DF90CF900C94CB1A552319F0AA +:10245000513009F454C28E830E94CE1A8E8189C1F4 +:10246000FF2021F0523008F04AC270C1511147C21A +:1024700080C1FF2021F0552309F468C1F5C155231F +:1024800009F477C105C2242F26952695237030E0E4 +:102490002115310521F021303105C9F030C2FF206E +:1024A00021F0862F942F937002C080E090E0289650 +:1024B0000FB6F894DEBF0FBECDBFDF91CF911F9155 +:1024C0000F91FF90EF90DF90CF900C94410FFF2081 +:1024D00021F0862F942F937002C080E090E0289620 +:1024E0000FB6F894DEBF0FBECDBFDF91CF911F9125 +:1024F0000F91FF90EF90DF90CF900C94570F862FA5 +:10250000FF2019F00E945E1E02C00E94C61E28967F :102510000FB6F894DEBF0FBECDBFDF91CF911F91F4 -:102520000F91FF90EF90DF90CF90BF900C945418D4 -:10253000103FD1F118F4103E50F4A1C0123F09F43D -:1025400063C008F44CC0133F09F473C098C01F70F7 -:102550008B2D8F710023A1F00E94ED17812F2696FD -:102560000FB6F894DEBF0FBECDBFDF91CF911F91A4 -:102570000F91FF90EF90DF90CF90BF900C948F1051 -:102580000E940E18812F26960FB6F894DEBF0FBE5C -:10259000CDBFDF91CF911F910F91FF90EF90DF9012 -:1025A000CF90BF900C9496100023A9F02111BFC0CA -:1025B0008B2D8F7126960FB6F894DEBF0FBECDBF60 -:1025C000DF91CF911F910F91FF90EF90DF90CF900F -:1025D000BF900C943318223008F0A9C0E9CF002333 -:1025E000A9F08B2D8F7126960FB6F894DEBF0FBE23 -:1025F000CDBFDF91CF911F910F91FF90EF90DF90B2 -:10260000CF90BF900C94ED17002359F38B2D8F7151 -:1026100026960FB6F894DEBF0FBECDBFDF91CF91E7 -:102620001F910F91FF90EF90DF90CF90BF900C948F -:102630000E18002399F08B2D8F7126960FB6F89403 -:10264000DEBF0FBECDBFDF91CF911F910F91FF90E5 -:10265000EF90DF90CF90BF900C94D81726960FB6CE -:10266000F894DEBF0FBECDBFDF91CF911F910F91C8 -:10267000FF90EF90DF90CF90BF900C94CE17002387 -:10268000A9F0222309F4ADCF812F26960FB6F89436 -:10269000DEBF0FBECDBFDF91CF911F910F91FF9095 -:1026A000EF90DF90CF90BF900C94780F222309F425 -:1026B000ADCF812F26960FB6F894DEBF0FBECDBFEB -:1026C000DF91CF911F910F91FF90EF90DF90CF900E -:1026D000BF900C9440104B2D4F70612FC7010E948A -:1026E000AE0226960FB6F894DEBF0FBECDBFDF91C7 -:1026F000CF911F910F91FF90EF90DF90CF90BF90FF -:102700000C94F2164B2D4F70612FC70126960FB611 -:10271000F894DEBF0FBECDBFDF91CF911F910F9117 -:10272000FF90EF90DF90CF90BF900C94E30526963A -:102730000FB6F894DEBF0FBECDBFDF91CF911F91D2 -:102740000F91FF90EF90DF90CF90BF9008950E947F -:1027500088190E945D190E94A2190E94AE1E0E9453 -:10276000FE1D80E090E00E94720E80E090E00C94EC -:10277000880E0E9478190C94A7130E94A918292F7B -:1027800022952F702C3030F42A3048F42250223019 -:1027900078F405C02C3041F02F3031F009C0803E74 -:1027A00048F0803F29F406C093FB882780F90895FC -:1027B00080E0089581E00895CF93DF9300D000D0AA -:1027C0001F92CDB7DEB70F900F900F900F900F9024 -:1027D000DF91CF910895CF93DF9300D000D000D048 -:1027E000CDB7DEB726960FB6F894DEBF0FBECDBFCD -:1027F000DF91CF9108951F93CF93DF93C09179011B -:1028000016E080917A01C81799F0D0E01C9FF00182 -:102810001D9FF00D1124E558FE4F408151816281CA -:102820007381848195810E94EB132196C770E9CF53 -:10283000DF91CF911F9108954091AB015091AC0170 -:102840006091AD017091AE018091AF019091B001A6 -:102850000C94EB138091B00182958F7009F054C0F5 -:102860008091AD01882309F44FC080917901A09136 -:102870007A014091AE015091AF016091AB0170912E -:10288000AC01B6E08A1709F43FC090E0411551054C -:10289000C1F17F3F11F46F3FA1F1B89FF001B99FE3 -:1028A000F00D1124E558FE4F218127132AC0208105 -:1028B000261327C02281211124C0238134812417AB -:1028C000350710F421503109241B350B283C310504 -:1028D000C0F42091B0012F7020612093B00126E058 -:1028E000289FF001299FF00D1124E058FE4F8081B0 -:1028F0008F70806180838BEA91E00E949D100C9420 -:10290000FB1301968770BECF0895CF92DF92EF92AE -:10291000FF920F931F93CF93DF93CDB7DEB76297EC -:102920000FB6F894DEBF0FBECDBF8C0185E0F80175 -:10293000DE011D9601900D928A95E1F7D8014C9128 -:1029400011965C91119712966C918091AE019091C5 -:10295000AF01009709F475C13091AB017091AC01E2 -:102960007F3F19F43F3F09F46CC1F801C380D48064 -:10297000E090AD01EE2009F4BEC02091B001C81670 -:10298000D90628F0D601A81BB90BCD0104C080954B -:1029900090958C0D9D1DFF24F394883C910578F053 -:1029A000F12C207F09F0C4C07C2DD98AC88A89897E -:1029B0000E94DC138BEA91E00E949D10AFC0822F31 -:1029C000807F09F045C0571313C0431311C0611134 -:1029D0000FC02F7020612093B0010E941C148BEA5D -:1029E00091E00E949D108091B001F80185832EC076 -:1029F000CD2819F15F3F11F44F3FF9F0F62E611128 -:102A00001CC08091790120917A0136E0821709F487 -:102A10005BC090E0389FF001399FF00D1124E5581C -:102A2000FE4F7181571306C07081471303C0728136 -:102A3000711103C001968770E9CFF62E662309F461 -:102A40001CC18091B00181608093B001F12C15C14F -:102A5000571309C0431307C0611105C08091B0012D -:102A6000F8018583C8C04D875E878D859E856A8BFA -:102A70000E94BD136A898823D1F16623C1F1209198 -:102A8000B001822F82958F7090E0029774F0809150 -:102A9000AB019091AC0198878F831986DB86CA863B -:102AA0002C87CE0107960E949D1086E0F801ABEAC4 -:102AB000B1E001900D928A95E1F70E942A140E94DC -:102AC0001C14FF24F394D9C04D875E878D859E85A5 -:102AD0000E94A918292F22952F70223008F0C1C01A -:102AE0009F7009F0BBC0805E883008F4C6C0C80182 -:102AF0000E949D10E6CFC816D90608F453C0F6010F -:102B0000E81BF90BCF01883C910508F450C0F12C6B -:102B10007C2DD98AC88A89890E94DC13EBEAF1E00E -:102B200086E0DF011D928A95E9F70E941C14A5C07A -:102B3000571314C0431312C0611110C08091B0012B -:102B4000F8018583C8010E949D1086E0EBEAF1E060 -:102B5000DF011D928A95E9F7FE2C8FC04D875E87B5 -:102B60008D859E856A8B0E94BD136A89882309F42E -:102B7000BECF662309F4BBCF2091B001822F82958E -:102B80008F7090E002970CF490CF8091AB01909100 -:102B9000AC019A8389831B82DD82CC822E83CE0195 -:102BA000019681CF809590958C0D9D1DACCFF62E12 -:102BB000662309F49CCF571333C0431331C02091CF -:102BC000B00120FD24C0822F82958F70482F50E0E5 -:102BD00041155105E1F0D80115962C9315974F300A -:102BE000510549F08F5F982F9295907F822F8F70BB -:102BF000892B15968C93C8010E949D1086E0F801E0 -:102C0000ABEAB1E001900D928A95E1F78ECF86E0B4 -:102C1000F801ABEAB1E001900D928A95E1F72DC081 -:102C20004D875E878D859E850E94BD1381113DCFA6 -:102C30008091B00181608093B001C8010E949D1015 -:102C40001CC0662309F453CF4D875E878D859E8512 -:102C50000E94BD13882309F44ACF27CF811143CFA7 -:102C60000CC0243008F043CF9F7009F43CCFD8014A -:102C700015969C91907F09F036CF8F2D62960FB6F6 -:102C8000F894DEBF0FBECDBFDF91CF911F910F91A2 -:102C9000FF90EF90DF90CF9008951F93CF93DF9335 -:102CA000CDB7DEB72C970FB6F894DEBF0FBECDBF01 -:102CB0004F83588769877A878B879C87CE010796D1 -:102CC0000E948514882371F08A859B85892B09F4DD -:102CD00041C088858F3F09F065C08F818F3F09F023 -:102CE00061C038C086E0FE013796DE011196019082 -:102CF0000D928A95E1F76A857B856115710551F121 -:102D0000FF81E885EF3F11F4FF3F21F120917A0127 -:102D100030E0C9010196877099274091790150E010 -:102D20008417950709F447C0F983EA837D836C8390 -:102D300096E0929FD001939FB00D1124A558BE4FED -:102D4000FE01319601900D929A95E1F780937A01F8 -:102D50000E94FB1316E08091790190917A01891706 -:102D6000B9F1189FC001112485589E4F0E94851407 -:102D7000882371F1E09179011E9FF0011124E5583B -:102D8000FE4F4081518162817381848195810E94CF -:102D9000EB138091790190E00196877099278093D9 -:102DA0007901D9CF4F81588569857A858B859C8536 -:102DB0000E94EB13CFCF0E94B91310927A011092A8 -:102DC0007901EBEAF1E086E0DF011D928A95E9F7EF -:102DD0002C960FB6F894DEBF0FBECDBFDF91CF911A -:102DE0001F910895EF92FF920F931F93CF93DF935C -:102DF0008C01892B09F46CC0F12CEE24E394E801DA -:102E00002196F8018491843740F4843008F051C051 -:102E1000813081F0823019F15BC0853709F444C0FC -:102E2000A8F19CE7980F903708F052C08F770E9466 -:102E3000401041C00E5F1F4FFE01849190E2980F39 -:102E4000983050F48770FE2D01C0FF0F8A95EAF785 -:102E50008F2F0E947B1914C00E94780F2DC00E5F27 -:102E60001F4FFE01849190E2980F983060F48770B4 -:102E7000FE2D01C0FF0F8A95EAF78F2F0E9481195E -:102E80000E94A21919C00E94401016C00E5F1F4F69 -:102E9000FE01C491CC2381F08FE99FE00197F1F707 -:102EA00000C00000C150F6CF0E5F1F4FFE01F4902E -:102EB00003C00E94780F8E018F2D882309F49FCFC5 -:102EC000EFE9FFE03197F1F700C000008150F5CF46 -:102ED000DF91CF911F910F91FF90EF90089508958A -:102EE0006093B5017093B6018093B7019093B801D8 -:102EF0000C94A7130F931F930091B5011091B60185 -:102F00002091B7013091B801DC01CB01802B912BCE -:102F1000A22BB32B8093B5019093B601A093B70178 -:102F2000B093B8011F910F910C94A7130F931F93A7 -:102F30000091B5011091B6012091B7013091B8010F -:102F4000DC01CB0180239123A223B3238093B5011D -:102F50009093B601A093B701B093B8011F910F9160 -:102F60000C94A7130F931F930091B5011091B60114 -:102F70002091B7013091B801DC01CB018027912766 -:102F8000A227B3278093B5019093B601A093B70110 -:102F9000B093B8011F910F910C94A7131092B10137 -:102FA0001092B2011092B3011092B4010C94A713C5 -:102FB00041E050E060E070E004C0440F551F661F20 -:102FC000771F8A95D2F74093B1015093B201609375 -:102FD000B3017093B4010C94A71341E050E060E09A -:102FE00070E004C0440F551F661F771F8A95D2F703 -:102FF0008091B1019091B201A091B301B091B4015F -:10300000482B592B6A2B7B2B4093B1015093B20173 -:103010006093B3017093B4010C94A71341E050E0A6 -:1030200060E070E004C0440F551F661F771F8A954B -:10303000D2F740955095609570958091B10190912F -:10304000B201A091B301B091B401482359236A237E -:103050007B234093B1015093B2016093B30170930D -:10306000B4010C94A71341E050E060E070E004C0AC -:10307000440F551F661F771F8A95D2F78091B101C3 -:103080009091B201A091B301B091B40148275927A2 -:103090006A277B274093B1015093B2016093B3013B -:1030A0007093B4010C94A7130F931F930091B10177 -:1030B0001091B2012091B3013091B401DC01CB0138 -:1030C000802B912BA22BB32B8093B1019093B20153 -:1030D000A093B301B093B4011F910F910C94A71367 -:1030E0000F931F930091B1011091B2012091B30190 -:1030F0003091B401DC01CB0180239123A223B323BF -:103100008093B1019093B201A093B301B093B40145 -:103110001F910F910C94A7130F931F930091B1016E -:103120001091B2012091B3013091B401DC01CB01C7 -:1031300080279127A227B3278093B1019093B201F2 -:10314000A093B301B093B4011F910F910C94A713F6 -:103150000895CF92DF92EF92FF920F931F93CF9338 -:10316000DF938C01C090B101D090B201E090B30127 -:10317000F090B4018091B5019091B601A091B70192 -:10318000B091B801C82AD92AEA2AFB2ACFE1D0E0B7 -:10319000D701C6010C2E04C0B695A79597958795C3 -:1031A0000A94D2F780FF07C0B8018C2F0E9407064F -:1031B0008130910531F4219758F7B80180E00E94E1 -:1031C0000706DF91CF911F910F91FF90EF90DF9055 -:1031D000CF90089590910C019923F1F090910D01F9 -:1031E0009923D1F0982F9695969596959F3080F5D6 -:1031F000E0910E01F0910F01E90FF11D877021E0C0 -:1032000030E0A90102C0440F551F8A95E2F7CA01B8 -:103210009181892B8183089520910E0130910F01B6 -:10322000F90132969FEF40E05191851789F09F3F59 -:1032300019F4511101C0942F4F5F4E30A9F79F3FF1 -:1032400039F0F901E90FF11D97FDFA958283089590 -:10325000089590910C019923F9F090910D01992313 -:10326000D9F0982F9695969596959F3028F5E091F0 -:103270000E01F0910F01E90FF11D877021E030E0A0 -:10328000A90102C0440F551F8A95E2F7CA01809533 -:10329000918189238183089520910E0130910F013E -:1032A000F9013296205F3F4F9081891301C010824F -:1032B0003196E217F307C1F7089581E090E0E091BD -:1032C0000E01F0910F01E80FF91F10820196803175 -:1032D0009105A9F708959091CB01892B8093CB019B -:1032E000089580959091CB0189238093CB01089517 -:1032F0001092CB0108959091CA01892B8093CA0145 -:10330000089580959091CA0189238093CA010895F8 -:103310001092CA0108958093B90108951092B901DD -:10332000089580910E0190910F01FC0131969C014E -:10333000205F3F4F80E0919191118F5FE217F3077B -:10334000D1F70895E0910E01F0910F018091CB012A -:103350008083E0910E01F0910F0190818091CA016C -:10336000892B80838091B901882361F0E0910E015F -:10337000F0910F019081892B80830E949119811116 -:103380001092B90180910E0190910F010C945C0E86 -:10339000CF92DF92EF92FF926C01EE24FF24C114D2 -:1033A000D104E104F10421F0C701B60120E101C01C -:1033B00020E0C72ED82EE92EFF24C114D104E10449 -:1033C000F10419F0285FC701B6016B017C0154E0DC -:1033D000F694E794D794C7945A95D1F7C114D104C1 -:1033E000E104F10419F02C5FC701B6016B017C0107 -:1033F00042E0F694E794D794C7944A95D1F7C11464 -:10340000D104E104F10419F02E5FC701B601DC011B -:10341000CB01B695A79597958795892B8A2B8B2BF2 -:1034200009F02F5F822FFF90EF90DF90CF900895EB -:103430008091E401843011F120E488E190E00FB63E -:10344000F894A895809360000FBE2093600083B726 -:10345000817F846083BF83B7816083BF78948895C0 -:1034600083B78E7F83BF0FB6F894A89580916000D4 -:10347000886180936000109260000FBE08950895E7 -:103480000C943F1ACF930E94401A0E9426040E9477 -:103490003F1AC0E08C2F0E941C05811104C0CF5F31 -:1034A000CE30C1F701C081E0CF9108950E94B913D9 -:1034B0000E94500E0C94460782E084BD93E095BDB7 -:1034C0009AEF97BD80936E0008952FB7F89480917E -:1034D000CD019091CE01A091CF01B091D0012FBF2D -:1034E0000895CF92DF92EF92FF920F931F932FB721 -:1034F000F8944091CD015091CE016091CF0170912F -:10350000D0012FBF6A017B01EE24FF248C0120E053 -:1035100030E0C016D106E206F30610F4415051091E -:103520009A01281B390BC9011F910F91FF90EF9051 -:10353000DF90CF9008951F920F920FB60F92112433 -:103540008F939F93AF93BF938091CD019091CE01C4 -:10355000A091CF01B091D0010196A11DB11D809322 -:10356000CD019093CE01A093CF01B093D001BF9134 -:10357000AF919F918F910F900FBE0F901F90189554 -:103580000E94480BF8942FEF87EA91E62150804083 -:103590009040E1F700C0000087E090EBDC018093F1 -:1035A000ED019093EE01A093EF01B093F0019CE048 -:1035B00088E10FB6F894A895809360000FBE9093B1 -:1035C0006000FFCFEF92FF920F931F93CF93DF9393 -:1035D000D82FC0E08C2F0E941C0500E010E0E82EE0 -:1035E000F12CC701002E02C0959587950A94E2F749 -:1035F00080FD06C00F5F1F4F0630110591F709C00F -:10360000602F7C2F80E00E94E4058D13F3CF81E0D2 -:1036100004C0CF5FCE30F1F680E0DF91CF911F91F3 -:103620000F91FF90EF900895CF93C82F8CE20E94E6 -:10363000E21A882321F08C2FCF910C94E21A80E0BB -:10364000CF910895CF930E94691C811102C00E94FE -:103650004F1CC5E6C15049F00E9426048FE39CE947 -:103660000197F1F700C00000F5CF89E20E94141B1A -:10367000811113C18AE20E94141B81110E944F1C08 -:1036800085E00E94141B81110E94C01A0E94741CC4 -:103690008093CC0187E00E94141B8823A9F18BE161 -:1036A0000E94141B882351F08091CC0181FB2227BA -:1036B00020F991E0922790FB81F90EC08EE00E94E4 -:1036C000141B882361F08091CC0182FB222720F912 -:1036D00091E0922790FB82F98093CC0115C080E1A4 -:1036E0000E94141B9091CC01882341F093FB222768 -:1036F00020F981E0822780FB93F904C0892F80950F -:1037000080FB90F99093CC018091CC010E94781CB1 -:103710000E94861C8093DE0180EE0E94141B882389 -:1037200041F08091DE01982F909590FB80F9809375 -:10373000DE0189E30E94141B882359F08091DE0189 -:1037400081FB222720F991E0922790FB81F9809359 -:10375000DE0182EE0E94141B882359F08091DE0165 -:1037600082FB222720F991E0922790FB82F9809337 -:10377000DE0186EE0E94141B882359F08091DE0141 -:1037800083FB222720F991E0922790FB83F9809315 -:10379000DE0183EE0E94141B882359F08091DE0124 -:1037A00084FB222720F991E0922790FB84F98093F3 -:1037B000DE0185E30E94141B882359F08091DE010D -:1037C00085FB222720F991E0922790FB85F98093D1 -:1037D000DE0181E30E94141B882359F08091DE01F1 -:1037E00086FB222720F991E0922790FB86F98093AF -:1037F000DE0181E10E94141B882359F08091DE01D3 -:1038000087FB222720F991E0922790FB87F980938C -:10381000DE018091DE010E948A1C8091DE0187FB1F -:10382000882780F980930D0187E20E94141BC82F1E -:103830008EE10E94141B8111C2608FE10E94141B53 -:103840008111C46080E20E94141B8111C86081E272 -:103850000E94141B8111C06182E20E94141B81111D -:10386000C06283E20E94141B8111C06484E20E9442 -:10387000141B882311F0C06802C0CC2329F08C2FC0 -:103880000E94811C6C2F03C00E947D1C682F70E079 -:1038900080E090E0CF910C947017CF9108956DEE79 -:1038A0007EEF80E090E00E94C32260E082E090E042 -:1038B0000E94B52260E083E090E00E94B52260E0C3 -:1038C00084E090E00E94B52260E085E090E00C94F6 -:1038D000B52280E090E00E94AF2221E08D3E9E4F15 -:1038E00009F020E0822F089582E090E00C94A72256 -:1038F000682F82E090E00C94B52283E090E00C9475 -:10390000A722682F83E090E00C94B52284E090E039 -:103910000C94A722682F84E090E00C94B52280914B -:10392000D30180FF0BC06091130185E0689FB00157 -:10393000112475956795759567952BC081FF09C012 -:103940006091130185E0689FB0011124759567951A -:1039500020C082FF07C06091130185E0689FB0011D -:10396000112417C09091D4019923D1F060911201D4 -:10397000961788F72091130185E0289F9001112464 -:10398000929FA001939F500D112470E0CA010E94E4 -:1039900079226038710540F46115710519F406C08B -:1039A00065E070E0862F08958FE7089581E008951F -:1039B0008091D30180FF08C06091110170E075957E -:1039C00067957595679521C081FF06C060911101CB -:1039D00070E07595679519C082FF04C06091110170 -:1039E00070E010C09091D401992399F0609110017A -:1039F0009617A0F780911101899FC001112470E0F2 -:103A00000E9479226038710540F46115710519F43E -:103A100006C061E070E0862F08958FE7089581E089 -:103A20000895803F21F40E948F1C819504C0813F3E -:103A300029F40E948F1C8093D7010895823F21F4BE -:103A40000E948F1C819504C0833F29F40E948F1C23 -:103A50008093D6010895893F19F40E94D81C05C0AF -:103A60008A3F31F40E94D81C81958093D801089533 -:103A70008B3F21F40E94D81C819504C08C3F29F40F -:103A80000E94D81C8093D9010895843F21F480912D -:103A9000D501816017C0853F21F48091D5018260F6 -:103AA00011C0863F21F48091D50184600BC0873F0F -:103AB00021F48091D501886005C0883F31F4809160 -:103AC000D50180618093D50108958D3F21F48091C7 -:103AD000D30181600BC08E3F21F48091D3018260BD -:103AE00005C08F3F29F48091D30184608093D30176 -:103AF0000895803F39F48091D70187FF6CC0109200 -:103B0000D70169C0813F29F48091D7011816BCF311 -:103B100062C09091D601823F29F497FF5CC0109259 -:103B2000D60159C0833F19F41916CCF354C0893F0C -:103B300041F48091D80118160CF04DC01092D801B4 -:103B40004AC08A3F29F48091D80187FF44C0F6CF4C -:103B50008B3F39F48091D90187FF3DC01092D90184 -:103B60003AC08C3F29F48091D9011816BCF333C0B8 -:103B7000843F21F48091D5018E7F17C0853F21F4C9 -:103B80008091D5018D7F11C0863F21F48091D501B0 -:103B90008B7F0BC0873F21F48091D501877F05C0C3 -:103BA000883F31F48091D5018F7E8093D50113C079 -:103BB0008D3F21F48091D3018E7F0BC08E3F21F485 -:103BC0008091D3018D7F05C08F3F29F48091D3016F -:103BD0008B7F8093D3018091D60181110EC080919B -:103BE000D70181110AC08091D801811106C080914E -:103BF000D901811102C01092D401089585ED91E0A0 -:103C00000E94670E0E94651A9093D2018093D101A1 -:103C100008951F93CF93DF938091D1019091D201AA -:103C20000E94711AAC019091D401992321F0209146 -:103C3000140130E006C0209115018AE0289F900110 -:103C400011244217530708F485C08091D601C09112 -:103C5000D701D091D8011091D901811107C0C111AC -:103C600075C0D11173C0111171C074C09F3F19F09C -:103C70009F5F9093D401181624F40E948F1C8093A8 -:103C8000D6018091D60187FF05C00E948F1C8195C7 -:103C90008093D6011C1624F40E948F1C8093D701B8 -:103CA0008091D70187FF05C00E948F1C819580936A -:103CB000D7016091D601662331F1C091D701CC23A1 -:103CC00011F1062E000C770B880B990B0E948021B6 -:103CD00023E333E343E35FE30E94E4210E944821AE -:103CE0006093D6016C2FCC0F770B880B990B0E9439 -:103CF000802123E333E343E35FE30E94E4210E9456 -:103D000048216093D7011D1624F40E94D81C80938B -:103D1000D8018091D80187FF05C00E94D81C8195E9 -:103D20008093D801111624F40E94D81C8093D901E5 -:103D30008091D90187FF05C00E94D81C819580938E -:103D4000D901DF91CF911F910C94FE1D9F3F09F087 -:103D50008FCFA0CFDF91CF911F910895E5EDF1E0D6 -:103D600085E0DF011D928A95E9F71092D401109247 -:103D7000D3010895833081F128F4813059F08230E5 -:103D8000D1F00895853009F449C0B8F1863009F4BE -:103D900056C0089580911501262F30E0280F311D5F -:103DA0002F3F310524F4680F6093150108958FEFBC -:103DB00080931501089580911401262F30E0280F7B -:103DC000311D2F3F310524F4680F609314010895CD -:103DD0008FEF80931401089580911301262F30E016 -:103DE000280F311D2F3F310524F4680F6093130114 -:103DF00008958FEF80931301089580911201262F6B -:103E000030E0280F311D2F3F310524F4680F6093F7 -:103E1000120108958FEF809312010895809111018E -:103E2000262F30E0280F311D2F3F310524F4680F75 -:103E30006093110108958FEF80931101089580918F -:103E40001001262F30E0280F311D2F3F310524F4BB -:103E5000680F6093100108958FEF8093100108950B -:103E6000833011F128F4813049F0823091F00895C7 -:103E7000853081F120F18630C1F1089580911501DE -:103E8000681720F4861B8093150108951092150180 -:103E9000089580911401681720F4861B8093140103 -:103EA000089510921401089580911301681720F469 -:103EB000861B809313010895109213010895809139 -:103EC0001201681720F4861B809312010895109246 -:103ED0001201089580911101681720F4861B8093C8 -:103EE0001101089510921101089580911001681731 -:103EF00020F4861B809310010895109210010895FC -:103F00000F931F938D3109F46BC008F03FC08E30C2 -:103F100009F47DC0C0F4873009F46EC068F48630BF -:103F200009F0AFC08091CC01817F8E7F8093CC015E -:103F300081E08093DB01A6C0883009F458C08B3043 -:103F400009F49BC09EC0863109F497C078F4803193 -:103F500009F470C0813109F094C00E94B9139091A6 -:103F60000D0181E0892780930D0187C0893109F413 -:103F700084C08B3109F085C08091CC0181FB222760 -:103F800020F991E0922790FB81F94AC0853309F42A -:103F90005BC048F4873209F457C008F45AC089322C -:103FA00009F452C06EC0833438F48A3308F067C015 -:103FB000883309F462C065C0833409F445C088348D -:103FC00009F05FC00E94B9130FEF13ED20E3015019 -:103FD00010402040E1F700C000000E94C01A4DC010 -:103FE0000E9402210E94500E0E94460746C00E9475 -:103FF000741C0E94861C41C09091CC01892F817055 -:1040000090FF12C0917F9E7F9093CC013BC0809126 -:10401000CC0182FB222720F991E0922790FB82F9C4 -:104020008093CC01992349F18091CC0181608093E8 -:10403000CC0123C08091CC0183FB222720F991E0A1 -:10404000922790FB83F9ECCF61E070E080E090E094 -:1040500010C08D5141E050E060E070E08A019B01AA -:1040600004C0000F111F221F331F8A95D2F7C90108 -:10407000B8010E9470170E94B91381E003C08953F0 -:10408000E9CF80E01F910F91089580E008950C948E -:104090004520CF93C82F8091DB01813079F018F053 -:1040A0008230E9F187C0E0910E01F0910F0180812B -:1040B000813169F0823209F07FC009C0E0910E01C0 -:1040C000F0910F018081813111F0823261F48C2FE7 -:1040D0000E944720811104C08C2F0E94801F1DC0A8 -:1040E00081E090E01AC08C2F0E944520811114C0FD -:1040F000C43179F048F4CB3079F0C03109F060C0B8 -:1041000082E08093DB0108C0C93219F0C83321F086 -:1041100057C01092DB0154C081E0817053C0C93296 -:1041200089F118F5C43171F1A8F4C73009F046C01F -:104130008AE08093150194E19093140193E09093A9 -:1041400013018093120188E08093110188E280932B -:10415000100134C0CE51C63088F5EC2FF0E0E65D9A -:10416000FE4F80818093DA0129C0CE34E9F020F43B -:10417000CB3421F56AE013C0C13579F0C235F1F4D2 -:1041800061E00DC08091DA01882319F01092DA0104 -:1041900015C081E08093DB0115C061E006C080910D -:1041A000DA010E94BA1E0AC06AE08091DA010E9418 -:1041B000301F04C01092DB0180E004C081E002C027 -:1041C00080E0ABCFCF910895E1E8F0E08081886096 -:1041D00080838081816080838FB7F89493E090938F -:1041E000890090ED909388008FBF0895EFE6F0E08E -:1041F0008081826080830895EFE6F0E080818D7F8A -:1042000080830895EFE6F0E0908182E08927808343 -:1042100008951F920F920FB60F9211242F933F9380 -:104220004F935F936F937F938F939F93AF93BF93BE -:10423000EF93FF938091DC019091DD0101969093C3 -:10424000DD018093DC01811103C082E00E944607FA -:10425000E091DD01E695E695F0E0E657FB4FE4914D -:104260008091DC018E1303C080E00E944607FF911D -:10427000EF91BF91AF919F918F917F916F915F91DE -:104280004F913F912F910F900FBE0F901F90189557 -:104290000E944F216894B1110C94DE2108950E9470 -:1042A000C32188F09F5798F0B92F9927B751B0F0E4 -:1042B000E1F0660F771F881F991F1AF0BA95C9F7AA -:1042C00014C0B13091F00E94DD21B1E008950C944A -:1042D000DD21672F782F8827B85F39F0B93FCCF3FD -:1042E000869577956795B395D9F73EF49095809527 -:1042F000709561957F4F8F4F9F4F0895E89409C047 -:1043000097FB3EF490958095709561957F4F8F4F08 -:104310009F4F9923A9F0F92F96E9BB279395F6951E -:10432000879577956795B795F111F8CFFAF4BB0F9C -:1043300011F460FF1BC06F5F7F4F8F4F9F4F16C000 -:10434000882311F096E911C0772321F09EE8872F8A -:10435000762F05C0662371F096E8862F70E060E046 -:104360002AF09A95660F771F881FDAF7880F9695BF -:10437000879597F9089557FD9058440F551F59F0A8 -:104380005F3F71F04795880F97FB991F61F09F3F42 -:1043900079F087950895121613061406551FF2CF6B -:1043A0004695F1DF08C0161617061806991FF1CFBB -:1043B00086957105610508940895E894BB276627E2 -:1043C0007727CB0197F908950E94F7210C94682272 -:1043D0000E945A2238F00E94612220F0952311F0A9 -:1043E0000C9451220C94572211240C94DE210E942B -:1043F000BB2170F3959FC1F3950F50E0551F629F4D -:10440000F001729FBB27F00DB11D639FAA27F00D2D -:10441000B11DAA1F649F6627B00DA11D661F829F54 -:104420002227B00DA11D621F739FB00DA11D621F39 -:10443000839FA00D611D221F749F3327A00D611D56 -:10444000231F849F600D211D822F762F6A2F112438 -:104450009F5750409AF0F1F088234AF0EE0FFF1F6B -:10446000BB1F661F771F881F91505040A9F79E3FC2 -:10447000510580F00C9451220C94DE215F3FE4F34F -:10448000983ED4F3869577956795B795F795E79518 -:104490009F5FC1F7FE2B880F911D9695879597F921 -:1044A000089597F99F6780E870E060E008959FEFB6 -:1044B00080EC089500240A941616170618060906BB -:1044C000089500240A94121613061406050608958A -:1044D000092E0394000C11F4882352F0BB0F40F412 -:1044E000BF2B11F460FF04C06F5F7F4F8F4F9F4F52 -:1044F000089597FB072E16F4009407D077FD09D096 -:104500000E94932207FC05D03EF4909581959F4F21 -:104510000895709561957F4F0895EE0FFF1F0590E8 -:10452000F491E02D0994AA1BBB1B51E107C0AA1FFF -:10453000BB1FA617B70710F0A61BB70B881F991F44 -:104540005A95A9F780959095BC01CD010895F999E8 -:10455000FECF92BD81BDF89A992780B50895A8E154 -:10456000B0E042E050E00C94CA22262FF999FECF29 -:104570001FBA92BD81BD20BD0FB6F894FA9AF99A80 -:104580000FBE019608950E94B522272F0C94B622E3 -:10459000DC01CB01FC01F999FECF06C0F2BDE1BD03 -:1045A000F89A319600B40D9241505040B8F70895F2 -:0445B000F894FFCFAD -:1045B40020024707D707B2077E074A070101BA015D -:1045C40028080A03140A3F4D36394B04FE03C80376 -:1045D4008F0322033B0354036D0301020304050606 -:0445E40007080900BB +:102520000F91FF90EF90DF90CF900C944B1F842F72 +:10253000837009F076C0F110E2C1262F229526950E +:102540002770220F220F862F8F70C82ED12CE12CDE +:10255000F12C022E04C0CC0CDD1CEE1CFF1C0A94D6 +:10256000D2F764FF10C06FE070E080E090E004C03C +:10257000660F771F881F991F2A95D2F7609570956F +:102580008095909503C060E070E0CB01242F2695E4 +:1025900026952370422F50E042305105D1F0433050 +:1025A000510559F16C297D298E299F29413051050A +:1025B00041F128960FB6F894DEBF0FBECDBFDF9174 +:1025C000CF911F910F91FF90EF90DF90CF900C94DF +:1025D000C2186C297D298E299F2928960FB6F89458 +:1025E000DEBF0FBECDBFDF91CF911F910F91FF9046 +:1025F000EF90DF90CF900C94DC180E94C218C701B6 +:10260000B60128960FB6F894DEBF0FBECDBFDF919E +:10261000CF911F910F91FF90EF90DF90CF900C948E +:10262000A818FF2019F0842F817001C08695882397 +:1026300009F465C1262F229526952770220F220FB7 +:10264000862F8F70C82ED12CE12CF12C022E04C0C5 +:10265000CC0CDD1CEE1CFF1C0A94D2F764FF10C0EA +:102660006FE070E080E090E004C0660F771F881F85 +:10267000991F2A95D2F7609570958095909503C023 +:1026800060E070E0CB01242F269526952370422F21 +:1026900050E042305105D1F04330510559F16C29D9 +:1026A0007D298E299F294130510541F128960FB689 +:1026B000F894DEBF0FBECDBFDF91CF911F910F9178 +:1026C000FF90EF90DF90CF900C9496196C297D29A4 +:1026D0008E299F2928960FB6F894DEBF0FBECDBF76 +:1026E000DF91CF911F910F91FF90EF90DF90CF90EE +:1026F0000C94B0190E949619C701B60128960FB61E +:10270000F894DEBF0FBECDBFDF91CF911F910F9127 +:10271000FF90EF90DF90CF900C947C19603FC9F14F +:1027200018F4603E50F49BC0623F09F460C008F4A6 +:102730004AC0633F09F46FC092C0162F1F70842FE8 +:102740008F71FF2099F00E941519812F28960FB6DE +:10275000F894DEBF0FBECDBFDF91CF911F910F91D7 +:10276000FF90EF90DF90CF900C945F110E9436198C +:10277000812F28960FB6F894DEBF0FBECDBFDF9134 +:10278000CF911F910F91FF90EF90DF90CF900C941D +:102790006611FF20A1F05111B2C0842F8F712896CD +:1027A0000FB6F894DEBF0FBECDBFDF91CF911F9162 +:1027B0000F91FF90EF90DF90CF900C945B19523007 +:1027C00008F09DC0EACFFF20A1F0842F8F712896DA +:1027D0000FB6F894DEBF0FBECDBFDF91CF911F9132 +:1027E0000F91FF90EF90DF90CF900C941519FF2080 +:1027F00061F3842F8F7128960FB6F894DEBF0FBE59 +:10280000CDBFDF91CF911F910F91FF90EF90DF909F +:10281000CF900C943619FF2091F0842F8F71289659 +:102820000FB6F894DEBF0FBECDBFDF91CF911F91E1 +:102830000F91FF90EF90DF90CF900C9400192896A5 +:102840000FB6F894DEBF0FBECDBFDF91CF911F91C1 +:102850000F91FF90EF90DF90CF900C94F618FF202F +:10286000A1F0552309F4B1CF862F28960FB6F8941E +:10287000DEBF0FBECDBFDF91CF911F910F91FF90B3 +:10288000EF90DF90CF900C944810552309F4B1CF0E +:10289000862F28960FB6F894DEBF0FBECDBFDF910E +:1028A000CF911F910F91FF90EF90DF90CF900C94FC +:1028B00010114F70C8010E94AB0228960FB6F89411 +:1028C000DEBF0FBECDBFDF91CF911F910F91FF9063 +:1028D000EF90DF90CF900C941B184F70C801289692 +:1028E0000FB6F894DEBF0FBECDBFDF91CF911F9121 +:1028F0000F91FF90EF90DF90CF900C944C052896AD +:102900000FB6F894DEBF0FBECDBFDF91CF911F9100 +:102910000F91FF90EF90DF90CF9008950E94B81A2A +:102920000E94C81A0E948D1A0E94E41A0E94F71F82 +:102930000E944B1F80E090E00E94410F80E090E0F9 +:102940000C94570F0E94A81A0C948E140E940B1A14 +:10295000292F22952F7030E02C3031054CF42A308D +:1029600031056CF4225031092230310590F407C052 +:102970002C30310551F02F30310539F00AC0803E3E +:1029800010F0803F31F481E0089593FB882780F9AF +:10299000089580E00895CF93DF9300D000D01F9278 +:1029A000CDB7DEB70F900F900F900F900F90DF9183 +:1029B000CF910895CF93DF9300D000D000D0CDB752 +:1029C000DEB726960FB6F894DEBF0FBECDBFDF91FF +:1029D000CF9108951F93CF93DF93C0917B0116E0B1 +:1029E00080917C01C81799F0D0E01C9FF0011D9FD9 +:1029F000F00D1124E358FE4F4081518162817381B3 +:102A0000848195810E94DA142196C770E9CFDF9105 +:102A1000CF911F9108954091AD015091AE01609109 +:102A2000AF017091B0018091B1019091B2010C940D +:102A3000DA14CF938091B20182958F7009F05FC054 +:102A40008091AF01882309F45AC020917B01A091A5 +:102A50007C016091AD017091AE018091B0019091C7 +:102A6000B10131E06F3F09F030E0B32FC6E02A1723 +:102A700009F445C0009721F07F3F21F44B2F03C09C +:102A800041E001C040E030E040FD35C0C29FF001B0 +:102A9000C39FF00D1124E358FE4F418174132BC0E6 +:102AA0004081641328C04281411125C04381548173 +:102AB0004817590710F441505109481B590B483C1D +:102AC0005105C8F48091B2018F7080618093B2018A +:102AD00086E0829FF001839FF00D1124EE57FE4F98 +:102AE00080818F70806180838DEA91E00E946D11FA +:102AF000CF910C94EA142F5F3F4F2770B8CFCF913E +:102B00000895CF92DF92EF92FF920F931F93CF938E +:102B1000DF93CDB7DEB762970FB6F894DEBF0FBE76 +:102B2000CDBF8C0185E0F801DE011D9601900D926C +:102B30008A95E1F7D8014C9111965C911197129604 +:102B40006C9112971396ED90FC9014977091AD01D3 +:102B5000E091AE012091B0013091B1012115310514 +:102B600031F0EF3F31F481E07F3F19F403C081E0A1 +:102B700001C080E0B82FB170CB2E80FD6CC1D09029 +:102B8000AF01DD2009F4F5C0F091B201E216F306C1 +:102B900038F0C701821B930B883C910548F09BC01D +:102BA000209530952E0D3F1D283C310508F093C02F +:102BB0008F2F807F09F052C0E51314C0741312C028 +:102BC000D62E61110FC0FF70F061F093B2010E9428 +:102BD0000B158DEA91E00E946D118091B201F80110 +:102BE00085836CC1EF2831F05F3F31F481E04F3FC6 +:102BF00019F403C081E001C080E080FD03C081E0E2 +:102C0000862701C080E0F82FF170FF2E80FF1CC0E6 +:102C100080917B0120917C0136E0821709F428C164 +:102C200090E0389FF001399FF00D1124E358FE4FDA +:102C30007181571306C07081471303C072816713F7 +:102C400003C001968770E9CFD62E662309F436C1FA +:102C50008091B20181608093B20153C0E51308C036 +:102C6000741306C0611104C0D8011596FC93AEC060 +:102C70004D875E878D859E856A8B0E94A6146A8922 +:102C8000882329F1D62E662311F12091B201822FDB +:102C900082958F7090E002970CF460C08091AD0136 +:102CA0009091AE0198878F831986FB86EA862C87E0 +:102CB000CE01079651C0E51731F14D875E878D85AE +:102CC0009E856A8B0E94A6146A8981112EC0C80154 +:102CD0000E946D11A4C08F2F807F69F77E2DF98A25 +:102CE000E88A89890E94CB148DEA91E00E946D11D7 +:102CF000EDEAF1E086E0DF011D928A95E9F70E9496 +:102D00000B15D12CDBC07413D8CF6111D6CFD801ED +:102D10001596FC93C8010E946D11EDEAF1E086E082 +:102D2000DF011D928A95E9F7C9C0D62E662379F294 +:102D30002091B201822F82958F7090E0029774F0FB +:102D40008091AD019091AE019A8389831B82FD82AF +:102D5000EC822E83CE0101960E946D1186E0F8016F +:102D6000ADEAB1E001900D928A95E1F70E94191544 +:102D70006FC0E216F30628F0C701821B930B9C017B +:102D800004C0209530952E0D3F1D283C310508F0DC +:102D900052C0D62E662309F49ACFE5132CC07413C3 +:102DA0002AC08091B20180FD1DC0982F92959F701E +:102DB000C9F0D80115968C9315979F3039F09F5F15 +:102DC0009295907F8F70892B15968C93C8010E94E5 +:102DD0006D1186E0F801ADEAB1E001900D928A959F +:102DE000E1F736C086E0F801ADEAB1E001900D925E +:102DF0008A95E1F763C04D875E878D859E850E9429 +:102E0000A614882379F086E0F801ADEAB1E00190DC +:102E10000D928A95E1F70E9419150E940B15DD2489 +:102E2000D3944CC08091B20181608093B201C801FB +:102E30000E946D1143C07E2DF98AE88A89890E941B +:102E4000CB14EDEAF1E086E0DF011D928A95E9F707 +:102E50000E940B1533C0662309F439CF4D875E8776 +:102E60008D859E850E94A614882309F430CFCBCF90 +:102E70004D875E878D859E850E940B1A292F22958E +:102E80002F7030E0223031052CF49F7041F0811119 +:102E900006C00CC0243031052CF49F7049F4805ECC +:102EA000883020F0C8010E946D11CF2CDC2C06C0A8 +:102EB000D80115969C91907F91F7F8CF8D2D629651 +:102EC0000FB6F894DEBF0FBECDBFDF91CF911F913B +:102ED0000F91FF90EF90DF90CF9008951F93CF93C5 +:102EE000DF93CDB7DEB72C970FB6F894DEBF0FBED9 +:102EF000CDBF4F83588769877A878B879C87CE01A0 +:102F000007960E9481158823C1F02F8138858A8514 +:102F10009B85892B31F03F3F11F080E003C02F3FAC +:102F2000E1F781E0811147C04F81588569857A8535 +:102F30008B859C850E94DA143EC086E0FE013796A0 +:102F4000DE01119601900D928A95E1F7FF81E885E7 +:102F50004A855B854115510531F0EF3F31F481E041 +:102F6000FF3F19F403C081E001C080E080FD23C071 +:102F700020917C0130E0C90101968770992760910A +:102F80007B0170E086179707F1F1F983EA835D838F +:102F90004C8396E0929FD001939FB00D1124A358CB +:102FA000BE4FFE01319601900D929A95E1F7809304 +:102FB0007C010E94EA1416E080917B0190917C01D3 +:102FC000891779F1189FC001112483589E4F0E94E0 +:102FD0008115882331F1E0917B011E9FF0011124BE +:102FE000E358FE4F408151816281738184819581D4 +:102FF0000E94DA1480917B0190E0019687709927F6 +:1030000080937B01D9CF0E94A21410927C01109270 +:103010007B01EDEAF1E086E0DF011D928A95E9F798 +:10302000CACF2C960FB6F894DEBF0FBECDBFDF918E +:10303000CF911F910895EF92FF920F931F93CF931B +:10304000DF939C01009709F471C0F12CEE24E39406 +:10305000E9012196F9018491843740F4843008F025 +:1030600056C0813081F0823021F160C0853709F48B +:1030700049C0C0F19CE7980F903708F057C08F7790 +:103080000E94101146C089010E5F1F4FFE018491FE +:1030900090E2980F983050F48770FE2D01C0FF0F1A +:1030A0008A95EAF78F2F0E94BB1A15C00E9448101C +:1030B00014C089010E5F1F4FFE01849190E2980FAA +:1030C000983068F48770FE2D01C0FF0F8A95EAF7EB +:1030D0008F2F0E94C11A0E94E41AE8011AC00E94B0 +:1030E0001011FBCF2E5F3F4FFE01C491CC2341F066 +:1030F0008FE99FE00197F1F700C00000C150F6CFC3 +:10310000E90107C0FE01F490E901229602C00E9485 +:1031100048108F2D882341F0EFE9FFE03197F1F758 +:1031200000C000008150F6CF9E0192CFDF91CF9179 +:103130001F910F91FF90EF90089508956093B7014C +:103140007093B8018093B9019093BA010C948E14D6 +:103150000F931F930091B7011091B8012091B9010D +:103160003091BA01062B172B282B392B0093B7016E +:103170001093B8012093B9013093BA011F910F91B8 +:103180000C948E140F931F930091B7011091B80106 +:103190002091B9013091BA0106231723282339233E +:1031A0000093B7011093B8012093B9013093BA018D +:1031B0001F910F910C948E140F931F930091B701E0 +:1031C0001091B8012091B9013091BA010627172753 +:1031D000282739270093B7011093B8012093B9012C +:1031E0003093BA011F910F910C948E141092B30179 +:1031F0001092B4011092B5011092B6010C948E1485 +:1032000041E050E060E070E004C0440F551F661FCD +:10321000771F8A95D2F74093B3015093B40160931E +:10322000B5017093B6010C948E1441E050E060E05B +:1032300070E004C0440F551F661F771F8A95D2F7B0 +:103240008091B3019091B401A091B501B091B60104 +:10325000842B952BA62BB72B8093B3019093B401AD +:10326000A093B501B093B6010C948E1441E050E0E8 +:1032700060E070E004C0440F551F661F771F8A95F9 +:10328000D2F740955095609570958091B3019091DB +:10329000B401A091B501B091B60184239523A62372 +:1032A000B7238093B3019093B401A093B501B09379 +:1032B000B6010C948E1441E050E060E070E004C070 +:1032C000440F551F661F771F8A95D2F78091B3016F +:1032D0009091B401A091B501B091B60184279527D2 +:1032E000A627B7278093B3019093B401A093B501AB +:1032F000B093B6010C948E140F931F930091B301F9 +:103300001091B4012091B5013091B601062B172B15 +:10331000282B392B0093B3011093B4012093B501EE +:103320003093B6011F910F910C948E140F931F933D +:103330000091B3011091B4012091B5013091B60113 +:1033400006231723282339230093B3011093B401D4 +:103350002093B5013093B6011F910F910C948E14F8 +:103360000F931F930091B3011091B4012091B50107 +:103370003091B60106271727282739270093B30174 +:103380001093B4012093B5013093B6011F910F91B2 +:103390000C948E140895CF92DF92EF92FF920F93C8 +:1033A0001F93CF93DF93EC01C090B701D090B80189 +:1033B000E090B901F090BA018091B3019091B4010D +:1033C000A091B501B091B601C82AD92AEA2AFB2AF0 +:1033D0000FE110E0B701A601002E04C076956795B5 +:1033E000579547950A94D2F740FD05C00150110941 +:1033F00088F780E007C0BE01802F0E9489070197EF +:10340000A9F3802FDF91CF911F910F91FF90EF9043 +:10341000DF90CF900895CF93DF93EC010E94CB19FA +:10342000BE010E948907DF91CF910895CB010E94D0 +:103430000B1A089590910C019923D9F090910D01E8 +:103440009923B9F0982F9695969596959F3088F583 +:10345000E0910E01F0910F01E90FF11D877021E05D +:1034600030E001C0220F8A95EAF78181822B8183A7 +:10347000089540910E0150910F0120E030E09FEF40 +:10348000FA01E20FF31F6281681799F09F3F19F468 +:10349000611101C0922F2F5F3F4F2E30310581F710 +:1034A0009F3F39F0FA01E90FF11D97FDFA958283EC +:1034B0000895089590910C019923E1F090910D01E8 +:1034C0009923C1F0982F9695969596959F3020F563 +:1034D000E0910E01F0910F01E90FF11D877021E0DD +:1034E00030E001C0220F8A95EAF7209581812823D8 +:1034F0002183089540910E0150910F0120E030E0AA +:10350000FA01E20FF31F9281981301C012822F5F1C +:103510003F4F2E303105A1F7089581E090E0E09112 +:103520000E01F0910F01E80FF91F10820196803112 +:103530009105A9F708959091CE01982B9093CE0113 +:10354000089580959091CE0198239093CE0108958F +:103550001092CE0108959091CD01982B9093CD01BA +:10356000089580959091CD0198239093CD01089571 +:103570001092CD0108959091CC01982B9093CC019D +:10358000089580959091CC0198239093CC01089553 +:103590001092CC0108958093BB0108951092BB0155 +:1035A000089540910E0150910F0120E030E080E03D +:1035B000FA01E20FF31F918191118F5F2F5F3F4F4F +:1035C0002F303105A9F70895E0910E01F0910F0118 +:1035D0008091CE018083E0910E01F0910F018081F6 +:1035E0009091CD01892B8083E0910E01F0910F0124 +:1035F00080819091CC01892B80839091BB0199238C +:1036000061F0E0910E01F0910F018081892B8083A0 +:103610000E94D11A81111092BB0180910E019091EC +:103620000F010C942B0FCF92DF92EF92FF920F932A +:103630001F936C01EE24FF24C114D104E104F104B2 +:1036400021F46B017C0180E001C080E133272F2D44 +:103650001E2D0D2D011511052105310519F0885F6D +:103660006801790197018601A4E0369527951795A1 +:103670000795AA95D1F7011511052105310519F016 +:103680008C5F6801790197018601F2E036952795F4 +:1036900017950795FA95D1F7011511052105310503 +:1036A00019F08E5F68017901B701A60176956795DB +:1036B00057954795452B462B472B09F08F5F1F9158 +:1036C0000F91FF90EF90DF90CF9008958091E601E9 +:1036D000843021F11092D00120E488E190E00FB60F +:1036E000F894A895809360000FBE2093600080E05E +:1036F0000E94240883B7817F846083BF83B7816081 +:1037000083BF7894889583B78E7F83BF88E10FB697 +:10371000F89480936000109260000FBE08950895A1 +:103720000895CF930E948F1B0E9458040E94901B03 +:10373000C0E08C2F0E944505811105C0CF5FCE30BF +:10374000C1F780E001C081E0CF9108950E94A214EA +:103750000E941F0F0C94240882E084BD93E095BD65 +:103760009AEF97BD80936E0008952FB7F8948091DB +:10377000D1019091D201A091D301B091D4012FBF7A +:103780000895CF92DF92EF92FF920F931F932FB77E +:10379000F8944091D1015091D2016091D301709180 +:1037A000D4012FBF6A017B01EE24FF248C0120E0AD +:1037B00030E0C016D106E206F30610F4415051097C +:1037C000481B590BCA011F910F91FF90EF90DF909A +:1037D000CF9008951F920F920FB60F9211248F93DE +:1037E0009F93AF93BF938091D1019091D201A0910B +:1037F000D301B091D4010196A11DB11D8093D101D7 +:103800009093D201A093D301B093D401BF91AF9113 +:103810009F918F910F900FBE0F901F9018950E944F +:10382000250CF8942FEF87EA91E6215080409040D4 +:10383000E1F700C0000087E090EBDC018093F0012D +:103840009093F101A093F201B093F3012CE088E191 +:1038500090E00FB6F894A895809360000FBE209377 +:103860006000FFCFEF92FF920F931F93CF93DF93F0 +:10387000E82EF12C8F2D0E944505C0E0D0E0082FE6 +:1038800010E098010C2E02C0359527950A94E2F7B6 +:1038900020FD05C02196C630D10599F709C06C2FCF +:1038A0007F2D80E00E944D05E812F4CF81E005C035 +:1038B000F3948EE0F812DECF80E0DF91CF911F917C +:1038C0000F91FF90EF900895CF93C82F8CE20E9444 +:1038D000321C882321F08C2FCF910C94321C80E075 +:1038E000CF910895CF930E94B71D811102C00E940D +:1038F0009D1DC5E6C15049F00E9458048FE39CE924 +:103900000197F1F700C00000F5CF89E20E94641C26 +:10391000811111C18AE20E94641C81110E949D1DC7 +:1039200085E00E94641C81110E940F1C0E94C21D30 +:103930008093CF0187E00E94641C882399F18BE17A +:103940000E94641C882351F09091CF0191FB88273D +:1039500080F921E0822780FB91F922C08EE00E944D +:10396000641C882351F09091CF0192FB882780F945 +:1039700021E0822780FB92F913C080E10E94641C41 +:103980009091CF01882341F093FB882780F921E0B3 +:10399000822780FB93F904C0892F809580FB90F9E2 +:1039A0009093CF018091CF010E94C61D0E94D41D2B +:1039B0008093EF0180EE0E94641C882341F0809187 +:1039C000EF01982F909590FB80F98093EF0189E3A8 +:1039D0000E94641C882359F09091EF0191FB882785 +:1039E00080F921E0822780FB91F99093EF0182EE2C +:1039F0000E94641C882359F09091EF0192FB882764 +:103A000080F921E0822780FB92F99093EF0186EE06 +:103A10000E94641C882359F09091EF0193FB882742 +:103A200080F921E0822780FB93F99093EF0183EEE8 +:103A30000E94641C882359F09091EF0194FB882721 +:103A400080F921E0822780FB94F99093EF0185E3D0 +:103A50000E94641C882359F09091EF0195FB882700 +:103A600080F921E0822780FB95F99093EF0181E3B3 +:103A70000E94641C882359F09091EF0196FB8827DF +:103A800080F921E0822780FB96F99093EF0181E194 +:103A90000E94641C882359F09091EF0197FB8827BE +:103AA00080F921E0822780FB97F99093EF018091C4 +:103AB000EF010E94D81D8091EF0187FB882780F9D4 +:103AC00080930D0187E20E94641CC82F8EE10E9442 +:103AD000641C8111C2608FE10E94641C8111C4606A +:103AE00080E20E94641C8111C86081E20E94641C13 +:103AF0008111C06182E20E94641C8111C06283E274 +:103B00000E94641C8111C06484E20E94641C8823AA +:103B100011F0C06802C0CC2329F08C2F0E94CF1D69 +:103B20006C2F03C00E94CB1D682F70E080E090E0F6 +:103B3000CF910C949E18CF9108956DEE7EEF80E0AA +:103B400090E00E94F52360E082E090E00E94E32391 +:103B500060E083E090E00E94E32360E084E090E096 +:103B60000E94E32360E085E090E00C94E32380E092 +:103B700090E00E94DD2321E08D3E9E4F09F020E081 +:103B8000822F089582E090E00C94D523682F82E084 +:103B900090E00C94E32383E090E00C94D523682F0D +:103BA00083E090E00C94E32384E090E00C94D52330 +:103BB000682F84E090E00C94E3238091D70180FF8C +:103BC0000BC06091130185E0689FB00111247595C9 +:103BD0006795759567952AC081FF09C060911301AB +:103BE00085E0689FB0011124759567951FC082FF1D +:103BF00007C06091130185E0689FB001112416C0D1 +:103C00004091D8014423C9F060911201461788F70A +:103C10002091130185E0289F90011124429FC0014B +:103C2000439F900D112470E00E94A7236038710516 +:103C300040F46115710539F002C065E070E0862F2F +:103C400008958FE7089581E008958091D70180FF5E +:103C500008C06091110170E075956795759567953D +:103C600021C081FF06C06091110170E075956795D4 +:103C700019C082FF04C06091110170E010C08091F2 +:103C8000D8018823C1F0609110018617A0F79091A8 +:103C90001101989FC001112470E00E94A723603891 +:103CA000710528F46115710521F0862F08958FE7BD +:103CB000089581E0089561E070E0F4CF803F21F441 +:103CC0000E94DD1D819504C0813F29F40E94DD1D05 +:103CD0008093DB010895823F21F40E94DD1D8195D0 +:103CE00004C0833F29F40E94DD1D8093DA0108950A +:103CF000893F19F40E94251E05C08A3F31F40E94B5 +:103D0000251E81958093DC0108958B3F21F40E944C +:103D1000251E819504C08C3F29F40E94251E8093A6 +:103D2000DD010895843F21F48091D901816017C09D +:103D3000853F21F48091D901826011C0863F21F432 +:103D40008091D90184600BC0873F21F48091D90113 +:103D5000886005C0883F31F48091D90180618093EB +:103D6000D90108958D3F21F48091D70181600BC066 +:103D70008E3F21F48091D701826005C08F3F29F4E6 +:103D80008091D70184608093D7010895803F39F4F2 +:103D90008091DB0187FF6CC01092DB0169C0813F1D +:103DA00029F48091DB011816BCF362C09091DA010E +:103DB000823F29F497FF5CC01092DA0159C0833F1B +:103DC00019F41916CCF354C0893F41F48091DC01F9 +:103DD00018160CF04DC01092DC014AC08A3F29F43D +:103DE0008091DC0187FF44C0F6CF8B3F39F480918E +:103DF000DD0187FF3DC01092DD013AC08C3F29F400 +:103E00008091DD011816BCF333C0843F21F480910A +:103E1000D9018E7F17C0853F21F48091D9018D7F14 +:103E200011C0863F21F48091D9018B7F0BC0873F61 +:103E300021F48091D901877F05C0883F31F48091BA +:103E4000D9018F7E8093D90113C08D3F21F48091D9 +:103E5000D7018E7F0BC08E3F21F48091D7018D7FDB +:103E600005C08F3F29F48091D7018B7F8093D701C4 +:103E70008091DA0181110EC08091DB0181110AC0AD +:103E80008091DC01811106C08091DD01811102C0A9 +:103E90001092D801089589ED91E00E94360F0E949A +:103EA000B51B9093D6018093D50108951F93CF93AE +:103EB000DF938091D5019091D6010E94C11B409162 +:103EC000D801442321F02091140130E006C0209154 +:103ED00015015AE0259F900111248217930708F4D9 +:103EE00082C08091DA011091DB01D091DC01C09198 +:103EF000DD01811107C0111105C0D11103C0CC2310 +:103F000009F471C04F3F19F04F5F4093D801181664 +:103F100024F40E94DD1D8093DA018091DA0187FF8D +:103F200005C00E94DD1D81958093DA01111624F4ED +:103F30000E94DD1D8093DB018091DB0187FF05C0BE +:103F40000E94DD1D81958093DB016091DA0166237B +:103F500039F11091DB01112319F1772767FD709575 +:103F6000872F972F0E94B82223E333E343E35FE3D5 +:103F70000E941C230E9485226093DA01612F77271B +:103F800067FD7095872F972F0E94B82223E333E3B4 +:103F900043E35FE30E941C230E9485226093DB01C0 +:103FA0001D1624F40E94251E8093DC018091DC0103 +:103FB00087FF05C00E94251E81958093DC011C1699 +:103FC00024F40E94251E8093DD018091DD0187FF8E +:103FD00005C00E94251E81958093DD01DF91CF9160 +:103FE0001F910C944B1FDF91CF911F910895E9ED24 +:103FF000F1E085E0DF011D928A95E9F71092D80182 +:104000001092D7010895833081F128F4813059F05E +:104010008230D1F00895853009F449C0B8F1863076 +:1040200009F456C0089520911501862F90E0820F63 +:10403000911D8F3F910520F4620F60931501089543 +:104040008FEF80931501089520911401862F90E041 +:10405000820F911D8F3F910520F4620F6093140130 +:1040600008958FEF80931401089520911301862FF6 +:1040700090E0820F911D8F3F910520F4620F6093B5 +:10408000130108958FEF8093130108952091120179 +:10409000862F90E0820F911D8F3F910520F4620FD3 +:1040A0006093120108958FEF80931201089520917B +:1040B0001101862F90E0820F911D8F3F910520F412 +:1040C000620F6093110108958FEF8093110108959D +:1040D00020911001862F90E0820F911D8F3F910556 +:1040E00020F4620F6093100108958FEF8093100108 +:1040F0000895833011F128F4813049F0823091F035 +:104100000895853081F120F18630C1F108958091C4 +:104110001501681720F4861B8093150108951092ED +:104120001501089580911401681720F4861B80936F +:1041300014010895109214010895809113016817D5 +:1041400020F4861B809313010895109213010895A3 +:1041500080911201681720F4861B80931201089544 +:1041600010921201089580911101681720F4861BA6 +:10417000809311010895109211010895809110010A +:10418000681720F4861B8093100108951092100187 +:1041900008958D3109F442C020F58E3009F477C0BE +:1041A00070F4873009F459C018F48630F1F134C046 +:1041B000883009F4A8C08B3009F4A5C02DC0863121 +:1041C00009F4A1C038F4803109F472C0813109F4D6 +:1041D00079C022C0893109F496C08B3109F44DC0F1 +:1041E0001BC0853309F487C048F4873209F483C0C3 +:1041F00008F473C0893209F47EC00EC0833438F4E9 +:104200008A3308F068C0883309F47DC005C0833460 +:1042100009F471C0883499F080E008950E943F222B +:104220000E941F0F0E9424086EC08091CF01817FE1 +:104230008E7F8093CF0181E08093DF0108950E94FB +:10424000A2142FEF83ED90E3215080409040E1F7DE +:1042500000C000000E940F1C56C09091CF01892F12 +:104260008095817080FB90F919F0966098601DC070 +:10427000997F977F9093CF0146C09091CF0191FB9A +:10428000882780F921E0822780FB91F909C090916D +:10429000CF0192FB882780F921E0822780FB92F9E9 +:1042A0009093CF01882379F191609093CF01089585 +:1042B0009091CF0193FB882780F921E0822780FB32 +:1042C00093F9EECF0E94A21480910D0191E089270D +:1042D00080930D0118C027EC01C023EE280F61E088 +:1042E00070E080E090E004C0660F771F881F991F80 +:1042F0002A95D2F704C061E070E080E090E00E946F +:104300009E180E94A21481E0089580E0089580E044 +:104310000895CF93C82F8091DF01813079F018F094 +:104320008230D1F184C0A0910E01B0910F018C9127 +:10433000813169F0823209F07CC009C0A0910E0180 +:10434000B0910F018C91813111F0823249F48C2FA0 +:104350000E94852181111DC08C2F0E94C9201AC086 +:104360008C2F0E948721811114C0C43179F048F448 +:10437000CB3079F0C03109F060C082E08093DF017A +:1043800008C0C93219F0C83321F057C01092DF01BC +:1043900054C081E0817053C0C93289F118F5C4312D +:1043A00071F1A8F4C73009F046C08AE08093150186 +:1043B00094E19093140193E0909313018093120180 +:1043C00088E08093110188E28093100134C0CE51BF +:1043D000C63088F5EC2FF0E0E65DFE4F80818093DB +:1043E000DE0129C0CE34E9F020F4CB3421F56AE0B7 +:1043F00013C0C13579F0C235F1F461E00DC0809190 +:10440000DE01882319F01092DE0115C081E080934F +:10441000DF0115C061E006C08091DE010E9403202B +:104420000AC06AE08091DE010E94792004C01092E7 +:10443000DF0180E004C081E002C080E0ABCFCF911B +:104440000895E1E8F0E08081886080838081816068 +:1044500080838FB7F89493E09093890090ED9093C8 +:1044600088008FBF0895EFE6F0E08081826080834E +:104470000895EFE6F0E080818D7F80830895EFE678 +:10448000F0E0808192E08927808308951F920F9247 +:104490000FB60F9211242F933F934F935F936F9317 +:1044A0007F938F939F93AF93BF93EF93FF938091ED +:1044B000E0019091E10101969093E1018093E00188 +:1044C000811103C082E00E942408E091E101E69599 +:1044D000E695F0E0E657FB4FE4918091E0018E1302 +:1044E00003C080E00E942408FF91EF91BF91AF913B +:1044F0009F918F917F916F915F914F913F912F91FC +:104500000F900FBE0F901F90189504D06894B111B2 +:104510008DC0089570D088F09F5790F0B92F9927DB +:10452000B751A0F0D1F0660F771F881F991F1AF0BE +:10453000BA95C9F712C0B13081F077D0B1E00895D3 +:1045400074C0672F782F8827B85F39F0B93FCCF354 +:10455000869577956795B395D9F73EF490958095B4 +:10456000709561957F4F8F4F9F4F0895E89409C0D4 +:1045700097FB3EF490958095709561957F4F8F4F96 +:104580009F4F9923A9F0F92F96E9BB279395F695AC +:10459000879577956795B795F111F8CFFAF4BB0F2A +:1045A00011F460FF1BC06F5F7F4F8F4F9F4F16C08E +:1045B000882311F096E911C0772321F09EE8872F18 +:1045C000762F05C0662371F096E8862F70E060E0D4 +:1045D0002AF09A95660F771F881FDAF7880F96954D +:1045E000879597F9089557FD9058440F551F59F036 +:1045F0005F3F71F04795880F97FB991F61F09F3FD0 +:1046000079F087950895121613061406551FF2CFF8 +:104610004695F1DF08C0161617061806991FF1CF48 +:1046200086957105610508940895E894BB2766276F +:104630007727CB0197F908950BD078C069D028F07F +:104640006ED018F0952309F05AC05FC01124EECF48 +:10465000CADFA0F3959FD1F3950F50E0551F629FDD +:10466000F001729FBB27F00DB11D639FAA27F00DCB +:10467000B11DAA1F649F6627B00DA11D661F829FF2 +:104680002227B00DA11D621F739FB00DA11D621FD7 +:10469000839FA00D611D221F749F3327A00D611DF4 +:1046A000231F849F600D211D822F762F6A2F1124D6 +:1046B0009F5750408AF0E1F088234AF0EE0FFF1F29 +:1046C000BB1F661F771F881F91505040A9F79E3F60 +:1046D000510570F014C0AACF5F3FECF3983EDCF3B5 +:1046E000869577956795B795F795E7959F5FC1F79D +:1046F000FE2B880F911D9695879597F9089597F948 +:104700009F6780E870E060E008959FEF80EC089577 +:1047100000240A94161617061806090608950024A0 +:104720000A9412161306140605060895092E03941A +:10473000000C11F4882352F0BB0F40F4BF2B11F48E +:1047400060FF04C06F5F7F4F8F4F9F4F089597FBAF +:10475000072E16F4009407D077FD09D00E94C123DC +:1047600007FC05D03EF4909581959F4F0895709574 +:1047700061957F4F0895EE0FFF1F0590F491E02D96 +:104780000994AA1BBB1B51E107C0AA1FBB1FA61798 +:10479000B70710F0A61BB70B881F991F5A95A9F7EA +:1047A00080959095BC01CD010895F999FECF92BDF9 +:1047B00081BDF89A992780B50895A8E1B0E042E05C +:1047C00050E00C94FD23262FF999FECF92BD81BDB8 +:1047D000F89A019700B4021639F01FBA20BD0FB63F +:1047E000F894FA9AF99A0FBE08950196272F0E941D +:1047F000E4230C94E323DC01CB01FC01F999FECF07 +:1048000006C0F2BDE1BDF89A319600B40D92415058 +:0A4810005040B8F70895F894FFCF68 +:10481A0020022608B30890085C0829080101BC0197 +:10482A0028080A03140A3F4D36394B04FE03C8030D +:10483A008F0322033B0354036D030102030405069D +:04484A000708090052 :00000001FF diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c index 24ff1c68..f3190133 100644 --- a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c +++ b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c @@ -7,6 +7,9 @@ #define SYMB 1 // symbols #define MDIA 2 // media keys +#define LSFTO M(0) // Left shift, open parens when tapped +#define RSFTC M(1) // Right shift, close parens when tapped + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * @@ -17,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | BkSp | A | S | D | F | G |------| |------| H | Alt/J| K | L |; / L2| LGui/' | * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| - * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * |LShift/(|Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl|RShift/)| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | * `----------------------------------' `----------------------------------' @@ -36,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), + LSFTO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, ALT_T(KC_APP), KC_LGUI, KC_HOME, @@ -45,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS, KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT), - MEH_T(KC_NO),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + MEH_T(KC_NO),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), RSFTC, KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, KC_LALT, CTL_T(KC_ESC), KC_PGUP, @@ -140,17 +143,37 @@ const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) }; +static uint16_t key_timer; + 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); - } else { - unregister_code(KC_RSFT); + case 0: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + register_code(KC_LSFT); // we're now holding down Shift. + } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) < 70) { // the threshhold we pick for counting something as a tap. + register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren + unregister_code(KC_9); // now let's let go of that key + } + unregister_code(KC_LSFT); // let's release the Shift key now. + } + break; + } + case 1: { + if (record->event.pressed) { + key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key + register_code(KC_RSFT); + } else { + if (timer_elapsed(key_timer) < 70) { + register_code(KC_0); + unregister_code(KC_0); + } + unregister_code(KC_RSFT); + } + break; } - break; } return MACRO_NONE; }; @@ -183,3 +206,5 @@ void matrix_scan_user(void) { } }; + + diff --git a/keyboard/ergodox_ez/keymaps/ordinary/keymap.c b/keyboard/ergodox_ez/keymaps/ordinary/keymap.c index 3a999f26..efd67add 100644 --- a/keyboard/ergodox_ez/keymaps/ordinary/keymap.c +++ b/keyboard/ergodox_ez/keymaps/ordinary/keymap.c @@ -2,29 +2,31 @@ #include "led.h" #include "debug.h" #include "action_layer.h" - -#define BASE 0 // default layer -#define LOCK 1 // layer lock keys -#define SYMB_MO 2 // symbols momentary layer -#define SYMB_TG 3 // symbols lock layer -#define SYMB_XX 4 // symbols exit layer -#define MDIA_MO 5 // media momentary layer -#define MDIA_TG 6 // media lock layer -#define MDIA_XX 7 // media exit layer -#define UNLOCK 8 // clear to base layer +#include "action_util.h" + +#define BASE 0 // default layer +#define LOCK 1 // shift-lock layer +#define SYMB_SH 2 // symbols shift layer +#define SYMB_LK 3 // symbols lock layer +#define SYMB_UN 4 // symbols unlock layer +#define MDIA_SH 5 // media shift layer +#define MDIA_LK 6 // media lock layer +#define MDIA_UN 7 // media unlock layer +#define UNLOCK 8 // clear to base layer /* - * Ordinary Ergodox EZ keyboard layout, v3 + * The Ordinary Layout for the Ergodox EZ keyboard, v3.1 * modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com - * Details: http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html + * Details: readme.md + * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer +/* Keymap 0: Base Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | LOCK Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK | + * | LOCK `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ Media | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| @@ -32,8 +34,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+-----------| * | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl | - * `----------------------------------' `----------------------------------' + * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | + * `-----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | Home | End | | Left | Right| * ,------|------|------| |------+------+------. @@ -44,20 +46,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [BASE] = KEYMAP( // left hand - LT(LOCK, KC_GRV),KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC -,LT(MDIA_MO, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC -,MO(SYMB_MO) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G -,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) -,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI + LT(LOCK, KC_GRV) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC +,LT(MDIA_SH, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC +,MO(SYMB_SH) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G +,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) +,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI - ,KC_HOME,KC_END - ,KC_PGUP - ,KC_BSPC,KC_DEL ,KC_PGDN + ,KC_HOME,KC_END + ,KC_PGUP + ,KC_BSPC,KC_DEL ,KC_PGDN // right hand ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,LT(LOCK, KC_EQL) - ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_MO, KC_BSLS) - ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_MO, KC_QUOT) + ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_SH, KC_BSLS) + ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_SH, KC_QUOT) ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT ,KC_RGUI,KC_RALT,ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL @@ -68,59 +70,59 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 1: Layer Lock Keys * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | Esc | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Media LOCK| | | | | | | | | | | | | | Media LOCK| - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * |Symbol LOCK| | | | | |------| |------| | | | | |Symbol LOCK| - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Caps LOCK| | | | | | | | | | | | | | Caps LOCK| - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' + * ,-------------------------------------------------------. ,-------------------------------------------------------. + * | | Esc | | | | | | | | | | | | Bspc | | + * |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------| + * | Media LOCK | | | | | | | | | | | | | | Media LOCK | + * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------| + * | Symbol LOCK | | | | | |------| |------| | | | | | Symbol LOCK | + * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------| + * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK | + * `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------' + * | | | | | | | | | | | | + * `------------------------------------' `------------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' */ [LOCK] = KEYMAP( // left hand - KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_CAPS ,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_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_CAPS ,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 // right hand - ,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_FN3 - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2 - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN3 + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2 + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS + ,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 ), -/* Keymap 2: Symbol Momentary Layer +/* Keymap 2: Symbol Shift Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | + * | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media | + * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol | + * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol | * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| - * | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift | + * | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift | * `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------' * | | | | | | | 0 | . | = | + | Entr | * `----------------------------------' `----------------------------------' @@ -132,22 +134,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | Down | | PgDn | | | * `--------------------' `--------------------' */ -[SYMB_MO] = KEYMAP( +[SYMB_SH] = KEYMAP( // left hand KC_FN2 ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS -,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) -,MO(SYMB_MO) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV +,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) +,MO(SYMB_SH) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV ,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_LEFT ,KC_RGHT ,KC_UP ,KC_SPC ,KC_ENT ,KC_DOWN // right hand - ,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2 - ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO) - ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_MO) + ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2 + ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH) + ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_SH) ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT - ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT + ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) ,KC_HOME ,KC_END ,KC_PGUP ,KC_PGDN ,KC_BSPC ,KC_DEL @@ -156,13 +158,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 3: Symbol Lock Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Lock | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | Lock | + * | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media | + * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | + * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol | * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| - * | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift | + * | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift | * `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------' * | | | | | | | 0 | . | = | + | Entr | * `----------------------------------' `----------------------------------' @@ -174,22 +176,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | Down | | PgDn | | | * `--------------------' `--------------------' */ -[SYMB_TG] = KEYMAP( // layer 3 : return key for symbol lock layer +[SYMB_LK] = KEYMAP( // left hand - MO(SYMB_XX) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS -,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) -,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV -,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_LEFT ,KC_RGHT - ,KC_UP - ,KC_SPC ,KC_ENT ,KC_DOWN + MO(SYMB_UN) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS +,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) +,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV +,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB +,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_LEFT ,KC_RGHT + ,KC_UP + ,KC_SPC ,KC_ENT ,KC_DOWN // right hand - ,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_XX) - ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO) + ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_UN) + ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH) ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(UNLOCK) ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT - ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT + ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) ,KC_HOME ,KC_END ,KC_PGUP ,KC_PGDN ,KC_BSPC ,KC_DEL @@ -197,58 +199,58 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 4: Symbol Unlock Layer * - * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | Esc | | | | | | | | | | | | | | - * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Unlock | | | | | | | | | | | | | | Unlock | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | | | | |------| |------| | | | | | | - * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK | - * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' + * ,------------------------------------------------------. ,------------------------------------------------------. + * | | Esc | | | | | | | | | | | | Bspc | | + * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| + * | Media LOCK | | | | | | | | | | | | | | Media LOCK | + * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| + * | UNLOCK | | | | | |------| |------| | | | | | UNLOCK | + * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| + * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK | + * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' */ -[SYMB_XX] = KEYMAP( +[SYMB_UN] = KEYMAP( // left hand - KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,TG(MDIA_TG) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_CAPS ,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 - // right hand - ,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 ,TG(MDIA_TG) - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1 - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS - ,KC_TRNS ,KC_TRNS - ,KC_TRNS - ,KC_TRNS ,KC_TRNS ,KC_TRNS - ), - -/* Keymap 5: Media Momentary Layer + KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,TG(MDIA_LK) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_CAPS ,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 + // right hand + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TG(MDIA_LK) + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1 + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS + ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS +), + +/* Keymap 5: Media Shift Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | | + * | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | | + * | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| | + * | Symbol | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| Symbol | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | | + * | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | | + * | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | Stop |Refrsh| | Prev | Next | @@ -258,22 +260,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | Home | |VolDn | | Pause| * `--------------------' `--------------------' */ -[MDIA_MO] = KEYMAP( +[MDIA_SH] = KEYMAP( // left hand - KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS -,MO(MDIA_MO) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U -,MO(SYMB_MO) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS -,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D -,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2 - ,KC_WSTP ,KC_WREF - ,KC_WSCH - ,KC_WBAK ,KC_TRNS ,KC_WHOM + KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO +,MO(MDIA_SH) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U +,MO(SYMB_SH) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD +,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D +,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI + ,KC_WSTP ,KC_WREF + ,KC_WSCH + ,KC_WBAK ,KC_NO ,KC_WHOM // right hand - ,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3 - ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_MO) - ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_MO) - ,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT - ,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3 + ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_SH) + ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_SH) + ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT + ,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL ,KC_MPRV ,KC_MNXT ,KC_VOLU ,KC_VOLD ,KC_MSTP ,KC_MPLY @@ -282,15 +284,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 6: Media Lock Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | | + * | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | | + * | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| | + * | | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | | + * | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' - * | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | | + * | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | Stop |Refrsh| | Prev | Next | @@ -300,22 +302,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | Home | |VolDn | | Pause| * `--------------------' `--------------------' */ -[MDIA_TG] = KEYMAP( +[MDIA_LK] = KEYMAP( // left hand - MO(MDIA_XX) ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS -,MO(UNLOCK) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U -,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS -,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D -,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2 + MO(MDIA_UN),KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO +,MO(UNLOCK) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U +,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD +,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D +,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI ,KC_WSTP ,KC_WREF ,KC_WSCH - ,KC_WBAK ,KC_TRNS ,KC_WHOM + ,KC_WBAK ,KC_NO ,KC_WHOM // right hand - ,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_XX) + ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_UN) ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(UNLOCK) ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_NO - ,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT - ,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT + ,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL ,KC_MPRV ,KC_MNXT ,KC_VOLU ,KC_VOLD ,KC_MSTP ,KC_MPLY @@ -324,9 +326,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 7: Media Unlock Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | | Esc | | | | | | | | | | | | | | + * | | Esc | | | | | | | | | | | | Bspc | | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Unlock | | | | | | | | | | | | | | Unlock | + * | UNLOCK | | | | | | | | | | | | | | UNLOCK | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| * | | | | | | |------| |------| | | | | | | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| @@ -342,34 +344,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | * `--------------------' `--------------------' */ -[MDIA_XX] = KEYMAP( +[MDIA_UN] = KEYMAP( // left hand - KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS -,KC_FN1 ,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_CAPS ,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_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS +,KC_FN1 ,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_CAPS ,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 // right hand - ,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_FN1 - ,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_CAPS - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1 + ,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_CAPS + ,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 ), /* Keymap 8: Unlock Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | Unlock | | | | | | | | | | | | | | Unlock | + * | UNLOCK | | | | | | | | | | | | | | UNLOCK | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * | | | | | | | | | | | | | | | | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| @@ -389,22 +391,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [UNLOCK] = KEYMAP( // left hand - KC_FN1 ,KC_ESC ,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 ,KC_TRNS -,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS + KC_FN1 ,KC_ESC ,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 ,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 // right hand - ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1 - ,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 ,KC_TRNS + ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1 + ,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 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS @@ -413,9 +415,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer - ,[2] = ACTION_LAYER_INVERT(SYMB_TG, ON_PRESS) // FN2 - toggle to Symbols on press - ,[3] = ACTION_LAYER_INVERT(MDIA_TG, ON_PRESS) // FN3 - toggle to Media on press + [1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer + ,[2] = ACTION_LAYER_INVERT(SYMB_LK, ON_PRESS) // FN2 - toggle to Symbols on press + ,[3] = ACTION_LAYER_INVERT(MDIA_LK, ON_PRESS) // FN3 - toggle to Media on press }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -440,31 +442,34 @@ void matrix_init_user(void) { // Runs constantly in the background, in a loop. void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); + uint8_t layer = biton32(layer_state); - // do not change lights for locking and unlocking - if(layer == UNLOCK || layer == LOCK || layer == SYMB_XX || layer == MDIA_XX) { - return; + // shift or caps lock turns on red light + if((keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT))) || (host_keyboard_leds() & (1<\n\n\nBrowser","Search\n\n\nBrowser"], [{x:2},"Home\n\n\nBrowser"], [{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], -[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#cfc82b",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], +[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], [{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png index 2538fbeb..b3101e5c 100644 Binary files a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png and b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png differ diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt index 098a08d2..35efdba7 100644 --- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt +++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt @@ -1,27 +1,27 @@ [{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], [{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], -[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F6"], +[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], [{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"], -[{y:-0.375,x:3.5,c:"#c4e0bf"},"{",{x:10.5,c:"#89b087"},"8"], -[{y:-0.875,x:2.5,c:"#c4e0bf"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], -[{y:-0.875,x:5.5,c:"#c4e0bf"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], -[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#c4e0bf"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#c4e0bf"},"(",{x:10.5,c:"#89b087"},"5"], -[{y:-0.875,x:2.5,c:"#c4e0bf"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], -[{y:-0.875,x:5.5,c:"#c4e0bf"},"`",{x:6.5},"/"], -[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#c4e0bf",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], +[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], +[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], [{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], -[{y:-0.75,x:3.5,c:"#c4e0bf"},"[",{x:10.5,c:"#89b087"},"2"], -[{y:-0.875,x:2.5,c:"#c4e0bf"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], -[{y:-0.875,x:5.5,c:"#c4e0bf"},"~",{x:6.5},"\\"], -[{y:-0.875,c:"#2277ff",f2:1,w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#c4e0bf"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"], -[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5,c:"#89b087",a:4},"."], -[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#89b087",a:4},"0",{x:1},"="], -[{y:-0.75,x:0.5,c:"#cccccc",a:7},"","",{x:14.5,c:"#89b087",a:4},"+","Enter"], +[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], +[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], +[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], +[{y:-0.875,c:"#2277ff",fa:[0,1,0,1,0,0,1],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"], +[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"], +[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"], +[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"], [{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"], [{h:2},"Space",{h:2},"Enter","Up"], [{x:2},"Down"], [{r:-30,rx:13,y:-1,x:-3},"Home","End"], -[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"], -[{x:-3},"Page\n\n\n\n\n\nDown"] +[{x:-3,f:3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"], +[{x:-3,f:3},"Page\n\n\n\n\n\nDown"] diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex b/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex index b726e5e9..8e2d5ce2 100644 --- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex +++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex @@ -1,17 +1,17 @@ :100000000C945F040C94A3040C94A3040C94A30418 :100010000C94A3040C94A3040C94A3040C94A304C4 -:100020000C94A3040C94A3040C94BC0D0C948E0E9D +:100020000C94A3040C94A3040C94C40D0C94960E8D :100030000C94A3040C94A3040C94A3040C94A304A4 -:100040000C94A3040C9439230C94A3040C94A304DF -:100050000C94A3040C94DB1C0C94A3040C94A30434 +:100040000C94A3040C9441230C94A3040C94A304D7 +:100050000C94A3040C94E31C0C94A3040C94A3042C :100060000C94A3040C94A3040C94A3040C94A30474 :100070000C94A3040C94A3040C94A3040C94A30464 :100080000C94A3040C94A3040C94A3040C94A30454 :100090000C94A3040C94A3040C94A3040C94A30444 -:1000A0000C94A3040C94A3040C94A304F30E150F56 -:1000B0000010150F0010570F7A0F0010CF0FE20F2E -:1000C000D612D61204130413461382138215821516 -:1000D0009A138215911491145C158215821570156E +:1000A0000C94A3040C94A3040C94A304FB0E1D0F46 +:1000B00008101D0F08105F0F820F0810D70FEA0FEE +:1000C000DE12DE120C130C134E138A138A158A15D6 +:1000D000A2138A159914991464158A158A1578152E :1000E000000000810889248935812B850252E100B6 :1000F000E00000001E00140004001D0000774E0008 :100100001F001A0016001B00007F4C002000080092 @@ -32,29 +32,29 @@ :1001F00001000100010001000000010001000100F8 :1002000001000100010001000100010001000100E6 :1002100001000100010001000100010001000100D6 -:100220000100010001000100010001000100C30004 +:100220002A00010001000100010001000100C300DB :10023000C200390001000000C20005520252E10074 :10024000010000003A001E022002220201005100BB :100250003B001F0221022302010028003C002F0264 :1002600026022F0001002C003D0030022702300042 :10027000010052003E00240235003502000050000B -:100280000100360200002B0000004F000100370281 +:100280000100360200002B0000004F002D00370255 :1002900000002B0200004A003F003102380031000C -:1002A00000004D004000240021001E0027004B00EC -:1002B0004100250022001F0037004C0042002600AC -:1002C000230020002E002A004300380025022D00C4 -:1002D0002E024E00C20005520252E5002800000026 +:1002A00000004D004000240021001E0027784B0074 +:1002B0004100250022001F0037744C004200260038 +:1002C000230020002E7F2A004300380025022D0045 +:1002D0002E774E00C20005520252E5002871000040 :1002E000045205520852E100010000003A001E02CB :1002F00020022202010051003B001F0221022302C2 :10030000010028003C002F0226022F0001002C00D3 :100310003D00300227023000010052003E0024025E :1003200035003502000050000100360200002B00AD -:1003300000004F000100370200002B0200004A00BD +:1003300000004F002D00370200002B0200004A0091 :100340003F0031023800310000004D004000240021 -:1003500021001E0027004B004100250022001F0045 -:1003600037004C0042002600230020002E002A0007 -:100370004300380025022D002E024E000452055283 -:100380000852E5002800000001000654C1003900B1 +:1003500021001E0027784B004100250022001F00CD +:1003600037744C0042002600230020002E7F2A0014 +:100370004300380025022D002E774E00045205520E +:100380000852E5002871000001000654C100390040 :10039000010000002900010001000100010001002E :1003A0000100010001000100010001000100010045 :1003B0000100010001000100010001000100010035 @@ -63,29 +63,29 @@ :1003E0000000010000000100010001000100010007 :1003F00000000100010001000100010001000100F6 :1004000001000100010001000100010001000100E4 -:1004100001000100010001000100010001000100D4 +:1004100001000100010001002A00010001000100AB :100420000100010001000654C10039000100000074 -:10043000C30005520252E100A8000000440066001B -:10044000A6000100AA00B50045000100F20001006D -:10045000A90001006800F000F100F100F400B6000E -:1004600069000100F3000100F500B4006A0001001A -:10047000010001000000B8000100F9000000FA00CE -:100480000000B9000100F9000000FA000000AC0013 -:100490006B004600530001000000AB006C004A00F6 -:1004A00050004D004900A9006D005200510051005C -:1004B0004C00AE006E004B004F004E000100AD003E -:1004C0006F00B100B30001000100AA00C300055293 -:1004D0000252E50001000000075208520000E1004E -:1004E000A800000044006600A6000100AA00B500B4 -:1004F00045000100F2000100A90001006800F000C1 -:10050000F100F100F400B60069000100F300010001 -:10051000F500B4006A000100010001000000B8000D -:100520000100F9000000FA000000B9000100F90024 -:100530000000FA000000AC006B0046005300010010 -:100540000000AB006C004A0050004D004900A900BB -:100550006D005200510051004C00AE006E004B0087 -:100560004F004E000100AD006F00B100B30001006C -:100570000100AA00075208520000E5000100000037 +:10043000C30005520252E100E000000044006600E3 +:10044000A60000000077B5004500F400F2000000AF +:10045000007F00006800F000F100F100E200B6004B +:100460006900F500F3000000E300B4006A00A90091 +:10047000AA00A8000000B8000000F9000000FA007F +:100480000000B9000000F9000000FA000000AC0014 +:100490006B004600530000000000AB006C004A00F7 +:1004A00050004D004978A9006D00520051005100E4 +:1004B0004C74AE006E004B004F004E00007FAD004C +:1004C0006F00B100B30000000077AA00C30005521E +:1004D0000252E500E4000000075208520000E1006B +:1004E000E000000044006600A60000000077B500B0 +:1004F0004500F400F2000000007F00006800F000FA +:10050000F100F100E200B6006900F500F300000020 +:10051000E300B4006A00A900AA00A8000000B80027 +:100520000000F9000000FA000000B9000000F90026 +:100530000000FA000000AC006B0046005300000011 +:100540000000AB006C004A0050004D004978A90043 +:100550006D005200510051004C74AE006E004B0013 +:100560004F004E00007FAD006F00B100B3000000EF +:100570000077AA00075208520000E500E4000000DE :100580000100C10001003900010000002900010044 :100590000100010001000100010001000100010053 :1005A0000100010001000100010001000100010043 @@ -95,7 +95,7 @@ :1005E0000100010001000100000001000100010004 :1005F00001000100010001000100010001000100F3 :1006000001000100010001000100010001000100E2 -:100610000100010001000100010001000100C10012 +:100610002A00010001000100010001000100C100E9 :100620000100390001000000C100010001000100CB :10063000010000002900010001000100010001008B :1006400001000100010001000100010001000100A2 @@ -143,1047 +143,1048 @@ :1008E0008730904BA740B04BB9F41092EF011092B3 :1008F000F0011092F1011092F20114BE84B7877FCB :1009000084BF88E10FB6F894809360001092600075 -:100910000FBEE0E0FFE3099511E0A0E0B1E0E6EFF3 -:10092000F9E402C005900D92A433B107D9F721E094 +:100910000FBEE0E0FFE3099511E0A0E0B1E0E6E002 +:10092000FAE402C005900D92A433B107D9F721E093 :10093000A4E3B1E001C01D92AF3EB207E1F70E940F -:10094000020B0C94F9240C94000061110BC0FC0103 -:100950008281882321F085EE0E94631103C085EE19 -:100960000E942B1280E090E008950895CF9360914B +:100940000A0B0C9401250C94000061110BC0FC01F2 +:100950008281882321F085EE0E946B1103C085EE11 +:100960000E94331280E090E008950895CF93609143 :10097000B1017091B2018091B3019091B4010E94D4 -:10098000071CC82F8130F9F08430E9F089EF8C0F13 -:100990008230C8F056985E9825982D9826982E9803 -:1009A00027982F980E943B1081FF02C0259A2D9A0C -:1009B0008EEF8C0F823010F4269A2E9AC550C230DA -:1009C00010F4279A2F9ACF9108950C94B604569854 -:1009D0005E9825982D9826982E9827982F988FEF17 -:1009E00090E0909389008093880090938B0080938F -:1009F0008A0090938D0080938C00259A2D9A2FEF7A -:100A000080E792E0215080409040E1F700C0000074 -:100A1000269A2E9A2FEF80E792E021508040904056 -:100A2000E1F700C00000279A2F9A2FEF80E792E0AD -:100A3000215080409040E1F700C0000025982D989B -:100A40002FEF80E792E0215080409040E1F700C016 -:100A5000000026982E982FEF80E792E021508040EA -:100A60009040E1F700C0000027982F9856985E98B4 -:100A700025982D9826982E9827982F98089589EADA -:100A80008093800089E08093810024982C983F987F -:100A90008AB18F748AB96E98479A8BB1806B8BB983 -:100AA000769A0E94E7040C94B50480E280930001DA -:100AB0008091340181110EC00E94A40581E08093D1 -:100AC00034012FEF83ED90E3215080409040E1F717 -:100AD00000C0000080E40E94AA05809300018111FB -:100AE0002EC00E94D40580930001811128C00E946D -:100AF000D40580930001811122C08FE30E94D405A8 -:100B00008093000181111BC00E94CC0580E40E94EB -:100B1000AA0580930001811112C08CE00E94D405C7 -:100B20008093000181110BC00E94D40580930001C5 -:100B3000811105C08FE30E94D405809300010E94BB -:100B4000CC058091000108951092B9008AE080934D -:100B5000B800089594EA9093BC009091BC0097FF70 -:100B6000FCCF9091B900987F983021F0903111F02E -:100B700081E008958093BB0084E88093BC0080915D -:100B8000BC0087FFFCCF8091B900887F883111F0CD -:100B9000803471F780E0089584E98093BC008091EF -:100BA000BC0084FDFCCF08958093BB0084E8809353 -:100BB000BC008091BC0087FFFCCF9091B900987F6A -:100BC00081E0983209F480E0089584E88093BC00C5 -:100BD0008091BC0087FFFCCF8091BB00089580917D -:100BE0000001811115C080E40E94AA0580930001D4 -:100BF00081110CC082E10E94D40580930001811113 -:100C000005C08FEF0E94D405809300010E94CC059F -:100C100084B1807F84B985B1807F85B98AB1837FB3 -:100C20008AB98BB1837F8BB93E98469808950E940C -:100C30005505809300010E94EF0580B38C7080BB46 -:100C400081B3836F81BBE4E4F1E0A6E3B1E01192EC -:100C50001D9281E0E235F807D1F70C943F05BF9271 -:100C6000CF92DF92EF92FF920F931F93CF93DF9378 -:100C700080910001882379F0809135018F5F809306 -:100C80003501811108C00E94550580930001811132 -:100C900002C00E94E70406E311E0C0E0D0E0DD24DA -:100CA000D39482E0C82EEE24E394F12CC73000F5F3 -:100CB00080910001811162C080E40E94AA058093A6 -:100CC0000001811112C082E10E94D40580930001CD -:100CD00081110BC0C7010C2E01C0880F0A94EAF7DE -:100CE00080950E94D405809300010E94CC0546C0E7 -:100CF000CA30A1F028F4C83059F0C93061F005C0FD -:100D0000CC3089F070F0CD3089F0209A289810C04E -:100D1000219A29980DC0229A2A980AC0239A2B98C2 -:100D200007C0529A01C0539A5B9802C03E9A4698F7 -:100D3000E0EAEA95F1F78FB179995AC092E08170B3 -:100D40008D25892B7C9B02C090E001C094E0892B0B -:100D50007D9B02C090E001C098E0892B7E9B02C081 -:100D600090E001C090E1892B9FB19095991F992740 -:100D7000991F9295990F907E892B0FC08091000149 -:100D800081114BC080E40E94AA0580930001882352 -:100D900089F1B12C0E94CC058B2DF8019081981718 -:100DA00019F08083C09201010E94EF0521960F5F28 -:100DB0001F4FCE30D10509F079CF809101018823F2 -:100DC00071F1815080930101882339F08FE99FE010 -:100DD0000197F1F700C0000022C0A4E4B1E0E6E30F -:100DE000F1E081918D9391E0E434F907D1F717C0D8 -:100DF00090E0A5CF83E10E94D4058093000181118A -:100E0000C8CF81E40E94AA05809300018111C1CF5F -:100E10000E94E505B82EB094BDCF80E0BECF0E9401 -:100E2000E50481E0DF91CF911F910F91FF90EF904A -:100E3000DF90CF90BF900895E82FF0E0EC5BFE4F7D -:100E40008081089508958B3B910578F4883A910547 -:100E500040F5853A9105D0F48430910508F0B1C091 -:100E60008130910509F4ADC06BC0803E910508F456 -:100E700067C0883E910508F4A4C09C01205F310939 -:100E80002031310508F05CC090650895853A9105E0 -:100E900009F459C0863A910509F458C083E890E4F2 -:100EA0000895883A910509F454C0893A910509F4E6 -:100EB00053C08A3A910509F452C08B3A910509F45E -:100EC00051C08C3A910509F450C08D3A910509F44E -:100ED0004FC0803B910509F44EC08E3A910509F44C -:100EE0004DC08F3A910509F44CC0813B910509F43E -:100EF0004BC0823B910509F44AC0833B910509F43C -:100F000049C0843B910509F448C0853B910509F42B -:100F100047C0863B910509F446C0873B910509F41B -:100F200045C0883B910509F444C0893B910509F40B -:100F300043C08A3B910509F042C08AE296E40895D5 -:100F400080E090E0089581E890E4089582E890E4DC -:100F5000089582EE94E4089589EE94E408958AEE6B -:100F600094E4089585EB94E4089586EB94E4089561 -:100F700087EB94E408958CEC94E408958DEC94E46C -:100F8000089583E895E408958AE895E4089582E950 -:100F900095E4089584E995E4089581E296E408953E -:100FA00083E296E4089584E296E4089585E296E467 -:100FB000089586E296E4089587E296E4089580E035 -:100FC00094E40895089596E0799FF001112494E542 -:100FD000899FE00DF11D1124E60FF11DEE0FFF1F9B -:100FE000E851FF4F859194910895880F991F805A79 -:100FF0009040FC01859194910895880F991F80522B -:101000009F4FFC0185919491089526E0729FF00115 -:10101000112444E5849FE00DF11D1124E60FF11D1C -:10102000EE0FFF1FE851FF4F25913491C9019A95AA -:1010300081159F4110F4C9010895C901905281158D -:10104000904128F4C9019F700E94FD070895C901CD -:1010500090538115904120F4C9019927906C08950F -:10106000211580E5380769F40E94A5159FEF24E358 -:101070004CE0915020404040E1F700C000000C944B -:10108000001D213080E5380731F48091CD01816069 -:101090008093CD010895C90190558115904108F0C4 -:1010A00050C0832F99278F70992781309105D9F4EB -:1010B000A9014370552702C0880F991F4A95E2F78E -:1010C0009C68A90164E0440F551F6A95E1F7442725 -:1010D0005370842B952B73E0220F331F7A95E1F721 -:1010E000207633271DC08230910529F4922F88275E -:1010F000816F906A089583309105A9F4A901437026 -:10110000552781E090E002C0880F991F4A95E2F7C9 -:101110009C6843E0220F331F4A95E1F7207E377029 -:10112000822B932B08950497F1F4A901437055275E -:1011300081E090E002C0880F991F4A95E2F79A6813 -:10114000E8CFC90190578115904120F4C9019F70E3 -:1011500090620895C90190588115904120F4C90109 -:101160009F70906A0895203E3105E0F4203C3105DF -:1011700058F52133310509F470C048F4293231059E -:1011800009F464C02A32310509F46EC074C02933F1 -:101190003105F1F022383105D9F02533310509F454 -:1011A0004EC069C0233E310589F138F4203E310537 -:1011B000C1F0223E3105E1F05EC0263E310569F105 -:1011C000273E3105A9F157C0C9010E94F5070895CE -:1011D0008091E00180FD02C081FF4DC080EE90E073 -:1011E0004BC08091E00180FFF9CF89E390E044C0DB -:1011F0008091E00182FF0EC08091E00184FF03C076 -:1012000080E090E039C083EE90E036C08091E0014C -:1012100082FFF2CF82EE90E02FC08091E00183FF49 -:101220000BC08091E00184FDEBCF87EE90E024C0FD -:101230008091E00183FFF5CF86EE90E01DC08091A4 -:10124000E00185FF07C089E290E016C08091E001CF -:1012500085FFF9CF85E390E00FC08091E00186FF24 -:1012600007C08AE290E008C08091E00186FFF9CFD4 -:1012700081E390E001C0C9010E9423070895089509 -:101280000C943F09809162010895CF93DF9300D0C1 -:101290001F92CDB7DEB72091E601243019F523E087 -:1012A00029839B838A832093E9008FEF9091E80044 -:1012B000815095FD06C095ED9A95F1F700008111DA -:1012C000F5CF8091E80085FF0DC040E050E063E07D -:1012D00070E0CE0101960E94AF0B8091E8008E77FE -:1012E0008093E8000F900F900F90DF91CF910895B9 -:1012F000CF93DF9300D01F92CDB7DEB72091E601E8 -:10130000243021F522E029839B838A8383E0809324 -:10131000E9008FEF9091E800815095FD06C095EDB2 -:101320009A95F1F700008111F5CF8091E80085FFD3 -:101330000DC040E050E063E070E0CE0101960E94F5 -:10134000AF0B8091E8008E778093E8000F900F90AC -:101350000F90DF91CF9108952091E6012430F1F4B0 -:1013600022E02093E9002FEF3091E800215035FD75 -:1013700006C035ED3A95F1F700002111F5CF209127 -:10138000E80025FF0BC040E050E065E070E00E94FF -:10139000AF0B8091E8008E778093E8000895CF939B -:1013A000DF93EC018091E601843009F046C0909112 -:1013B0000C019923D9F090910D019923B9F08093F4 -:1013C000E9008FEF9091E800815095FD06C095E10E -:1013D0009A95F1F700008111F5CF8091E80085FF23 -:1013E0002CC040E050E060E170E017C081E08093E5 -:1013F000E9008FEF9091E800815095FD06C095EDD2 -:101400009A95F1F700008111F5CF8091E80085FFF2 -:1014100014C040E050E068E070E0CE010E94AF0BE5 -:101420008091E8008E778093E80080E1FE01A2E5DC -:10143000B1E001900D928A95E1F7DF91CF91089587 -:101440008091E501811109C00E94410D0E949E0D0D -:101450008091E20084608093E20008951092E5019B -:10146000089508950C9426230E94971C0E942C2313 -:101470000E943B100C94400942E061EC81E00E9424 -:10148000BB0C42E061EC82E00E94BB0C42E061ECEC -:1014900083E00E94BB0C42E161EC84E00C94BB0C45 -:1014A0008091E801833009F455C030F4813071F047 -:1014B000823009F48EC008958A3009F47AC08B30E6 -:1014C00009F460C0893009F09CC020C08091E70118 -:1014D000813A09F096C08091E800877F8093E80008 -:1014E0008091EB019091EC01892B21F060E080E08C -:1014F00090E003C060E182E591E070E00E94F80BAB -:101500008091E8008B778093E80008958091E7014F -:10151000813209F076C08091EB019091EC01009747 -:1015200019F0039709F06DC08091E800877F8093E0 -:10153000E8008091E80082FD05C08091E6018111FC -:10154000F8CF5FC08091F100809362018091E80044 -:101550008B7753C08091E701813A09F052C08091A6 -:10156000EB019091EC01892B09F04BC08091E800D0 -:10157000877F8093E8008091E80080FFFCCF809116 -:101580000C0136C08091E7018132D9F58091EB01E1 -:101590009091EC01892BA9F58091E800877F8093D9 -:1015A000E8000E94F00C8091E90180930C010C94FA -:1015B000A5158091E701813221F58091E800877FB0 -:1015C0008093E8000E94F00C8091EA01809363010F -:1015D00008958091E701813AA1F48091E800877F26 -:1015E0008093E8008091E80080FFFCCF8091630148 -:1015F0008093F1008091E8008E778093E8000C944E -:10160000F00C089584B7877F84BF88E10FB6F89403 -:1016100080936000109260000FBE90E080E80FB6EB -:10162000F89480936100909361000FBE0E948A102D -:101630000E94410D0E949E0D8091E2008460809383 -:10164000E20078940E9419100E948C1082E091E0D0 -:101650000E9436100E9414238091E601853069F4BF -:101660000E945A1C8091E4018823B1F30E94821CDD -:10167000882391F30E94990BEFCF0E949210ECCF38 -:10168000292F332723303105A9F06CF4213031059F -:1016900009F442C02230310509F043C08DE690E0E4 -:1016A00024E037E042C021323105C9F02232310551 -:1016B00019F137C099278130910541F082309105A9 -:1016C00041F0892B71F5E0E0F7E005C0E8EEF6E0C7 -:1016D00002C0E0EDF6E0849190E09F0126C0643006 -:1016E00000F5E62FF0E0EE0FFF1FEE5DFE4F2081CC -:1016F000318189E090E019C0643098F4E62FF0E081 -:10170000DF01AA0FBB1FA65EBE4F2D913C91EA5E82 -:10171000FE4F808190E009C082E190E021E737E050 -:1017200004C080E090E020E030E0FA0131832083C3 -:10173000089580E189BD82E189BD09B400FEFDCF35 -:101740008091D8008F7D8093D8008091E0008260E6 -:101750008093E0008091E00081FDFCCF0895CF925E -:10176000DF92EF92FF920F931F93CF93DF937C0151 -:101770008B01EA010E94110D811131C0209731F0D7 -:1017800088819981081B190BE80EF91EC12CD12CF8 -:101790000115110519F18091E80085FD14C08091B3 -:1017A000E8008E778093E800209741F08881998146 -:1017B0008C0D9D1D9983888385E011C00E94110DB9 -:1017C000882331F30CC0F70181917F018093F100F0 -:1017D00001501109FFEFCF1ADF0ADACF80E0DF9165 -:1017E000CF911F910F91FF90EF90DF90CF900895D0 -:1017F0002091ED013091EE012617370748F0611571 -:10180000710539F42091E8002E772093E80001C09B -:10181000B901FC0120E061157105B9F18091E60183 -:10182000882309F440C0853009F43FC08091E80066 -:1018300083FD3DC08091E80082FF06C08091E800F2 -:1018400082FF26C080E008958091E80080FFE3CF0A -:101850002091F3008091F20090E0922B61157105C8 -:1018600051F08830910538F421912093F1006150B6 -:1018700071090196F3CF21E0089709F020E08091EB -:10188000E8008E778093E800C6CF2111C7CFD6CF6E -:101890008091E601882339F0853039F08091E800A5 -:1018A00083FFCCCF04C082E0089583E0089581E0F7 -:1018B00008952091ED013091EE012617370748F089 -:1018C0006115710539F42091E8002E772093E80026 -:1018D00001C0B901FC0120E061157105C1F18091E1 -:1018E000E601882309F441C0853009F440C08091A5 -:1018F000E80083FD3EC08091E80082FF06C0809131 -:10190000E80082FF27C080E008958091E80080FF12 -:10191000E3CF2091F3008091F20090E0922B6115CB -:10192000710559F08830910540F424912093F1001D -:101930003196615071090196F2CF21E0089709F0C4 -:1019400020E08091E8008E778093E800C5CF2111D8 -:10195000C6CFD5CF8091E601882339F0853039F0A4 -:101960008091E80083FFCBCF04C082E0089583E03C -:10197000089581E00895982F973058F59093E900E5 -:10198000981739F07091EC002091ED005091F00023 -:1019900003C0242F762F50E021FF19C03091EB00B7 -:1019A0003E7F3093EB003091ED003D7F3093ED00B2 -:1019B0003091EB0031603093EB007093EC0020939A -:1019C000ED005093F0002091EE0027FF07C09F5FCD -:1019D000D3CF8F708093E90081E0089580E008956F -:1019E0008091E70187FD05C08091E80080FF0EC06F -:1019F00012C08091E80082FD05C08091E60181114E -:101A0000F8CF08958091E8008B7708C08091E601B7 -:101A10008111EACF08958091E8008E778093E800E5 -:101A200008958091E4009091E50045E62091EC0056 -:101A300020FF21C02091E80020FD21C02091E60177 -:101A4000222389F0253089F02091EB0025FD0FC07D -:101A50002091E4003091E5002817390739F341500F -:101A600041F0C901E3CF82E0089583E0089581E069 -:101A7000089584E008952091E80022FFDFCF80E000 -:101A800008950E94AF0D0E94B70DE0EEF0E0808156 -:101A900081608083E8EDF0E080818F77808319BCDE -:101AA000A7EDB0E08C918E7F8C9380818F7E8083B8 -:101AB0001092E50108950F931F93CF93DF930E9437 -:101AC000AF0D0E94B70DC8EDD0E088818F77888375 -:101AD00088818068888388818F7D888319BC109273 -:101AE000E6011092E2011092E4011092E30100EE8F -:101AF00010E0F80180818B7F8083888181608883FA -:101B000042E060E080E00E94BB0CE1EEF0E080810A -:101B10008E7F8083E2EEF0E080818160808380812F -:101B200088608083F80180818E7F808388818061D6 -:101B30008883DF91CF911F910F910895E8EDF0E038 -:101B400080818F7E8083E7EDF0E0808181608083FB -:101B500084E082BF81E08093E5010C945B0DE8EDA9 -:101B6000F0E080818E7F80831092E20008951092D1 -:101B7000DA001092E10008951F920F920FB60F92B3 -:101B800011242F933F934F935F936F937F938F9382 -:101B90009F93AF93BF93EF93FF938091E10082FFF8 -:101BA0000BC08091E20082FF07C08091E1008B7F33 -:101BB0008093E1000E9418108091DA0080FF1FC01E -:101BC0008091D80080FF1BC08091DA008E7F8093C7 -:101BD000DA008091D90080FF0DC080E189BD82E1EB -:101BE00089BD09B400FEFDCF81E08093E6010E942B -:101BF000200A05C019BC1092E6010E942E0A8091AD -:101C0000E10080FF19C08091E20080FF15C0809143 -:101C1000E2008E7F8093E2008091E20080618093F9 -:101C2000E2008091D80080628093D80019BC85E0E2 -:101C30008093E6010E94320A8091E10084FF30C067 -:101C40008091E20084FF2CC080E189BD82E189BDE2 -:101C500009B400FEFDCF8091D8008F7D8093D8001D -:101C60008091E1008F7E8093E1008091E2008F7E81 -:101C70008093E2008091E20081608093E200809195 -:101C8000E201882311F084E007C08091E30087FF20 -:101C900002C083E001C081E08093E6010E94340A23 -:101CA0008091E10083FF29C08091E20083FF25C07D -:101CB0008091E100877F8093E10082E08093E601DC -:101CC0001092E2018091E1008E7F8093E10080918B -:101CD000E2008E7F8093E2008091E2008061809339 -:101CE000E20042E060E080E00E94BB0C8091F000E6 -:101CF00088608093F0000E94310AFF91EF91BF91BC -:101D0000AF919F918F917F916F915F914F913F9193 -:101D10002F910F900FBE0F901F9018951F920F924A -:101D20000FB60F9211242F933F934F935F936F93AE -:101D30007F938F939F93AF93BF93CF93EF93FF9333 -:101D4000C091E900CF708091EC001092E900809181 -:101D5000F000877F8093F00078940E94CA0E109262 -:101D6000E9008091F00088608093F000C093E90062 -:101D7000FF91EF91CF91BF91AF919F918F917F9103 -:101D80006F915F914F913F912F910F900FBE0F90E8 -:101D90001F9018951F93CF93DF93CDB7DEB7AA9707 -:101DA0000FB6F894DEBF0FBECDBFE7EEF1E0809135 -:101DB000F100819321E0EF3EF207C9F70E94500A3B -:101DC0008091E80083FF1CC12091E7013091E80178 -:101DD000832F90E08A30910508F012C1FC01EA5A85 -:101DE000FF4F0C94AE24203881F0223809F008C14E -:101DF0008091EB018F708093E9008091EB0085FB6F -:101E0000882780F91092E90006C08091E301909143 -:101E1000E401911182609091E800977F9093E8002F -:101E20008093F1001092F100C5C0822F8D7F09F0E0 -:101E3000E7C0222319F0223061F0E2C08091E9016D -:101E4000813009F0DDC0333009F080E08093E40197 -:101E500028C08091E901811124C02091EB012F70ED -:101E600009F4CEC02093E9008091EB0080FF19C0F7 -:101E70008091EB00333011F4806211C08061809357 -:101E8000EB0081E090E0022E01C0880F0A94EAF78F -:101E90008093EA001092EA008091EB0088608093C2 -:101EA000EB001092E9008091E800877F86C0211145 -:101EB000A7C01091E9011F778091E3008078812B02 -:101EC0008093E3008091E800877F8093E8000E9480 -:101ED000F00C8091E80080FFFCCF8091E3008068E7 -:101EE0008093E300112311F083E001C082E080932E -:101EF000E60186C02058223008F082C08091E901B6 -:101F00009091EA018C3D23E0920779F583E08A8382 -:101F10008AE289834FB7F894DE01139620E03EE011 -:101F200051E2E32FF0E050935700E49120FF03C00B -:101F3000E295EF703F5FEF708E2F90E0EA3010F087 -:101F4000C79601C0C0968D939D932F5F243149F7AA -:101F50004FBF8091E800877F8093E8006AE270E0DD -:101F6000CE0101960E94F80B14C0AE014F5F5F4F87 -:101F70006091EB010E94400B009709F441C0209151 -:101F8000E800277F2093E800BC0189819A810E94A4 -:101F9000590C8091E8008B778093E80031C020389D -:101FA00079F58091E800877F8093E8008091E201D5 -:101FB0008093F1008091E8008E778093E8000E9482 -:101FC000F00C1EC021111CC09091E9019230C0F4A8 -:101FD0008091E800877F8093E8009093E2010E945F -:101FE000F00C8091E201811104C08091E30087FF31 -:101FF00002C084E001C081E08093E6010E943C0AB7 -:102000008091E80083FF0AC08091E800877F809379 -:10201000E8008091EB0080628093EB00AA960FB6F7 -:10202000F894DEBF0FBECDBFDF91CF911F91089511 -:102030000895CF938091E6018823B1F08091E90063 -:102040008F709091EC0090FF02C090E801C090E08A -:10205000C92FC82B1092E9008091E80083FD0E94EF -:10206000CA0ECF70C093E900CF9108959093690193 -:10207000809368010895E0916801F09169013097BB -:1020800021F00190F081E02D099480E00895E09125 -:102090006801F0916901309721F00280F381E02D11 -:1020A00009940895E0916801F0916901309721F059 -:1020B0000480F581E02D0994089520916601309106 -:1020C00067018217930771F090936701809366010F -:1020D000E0916801F0916901309721F00680F78165 -:1020E000E02D0994089520916401309165018217D3 -:1020F000930771F09093650180936401E09168010A -:10210000F0916901309721F00084F185E02D099468 -:10211000089508950C9489100E949D1C0E94170632 -:102120000C94631DCF92DF92EF92FF920F931F9357 -:10213000CF93DF93CDB7DEB72B970FB6F894DEBF02 -:102140000FBECDBF0E942F063BE6E32E31E0F32EFB -:1021500000E010E0C02E802F0E941C07F701D190F4 -:102160007F01D826B1F40F5F1F4F0E30110591F794 -:102170008FEF89838A831B820E94A61C8160782F3F -:102180009D838C8349815A816B818D810E94351199 -:1021900041C09091CD0191FF04C08B870E9422071E -:1021A0008B8520E030E04D2D50E0922FBA01022EB9 -:1021B00002C0759567950A94E2F760FF25C02E83EB -:1021C000CF82EE24E394F12C02C0EE0CFF1C9A9512 -:1021D000E2F790E08E219F2121E0892B09F420E095 -:1021E00028870E94A61C8160782F9A8789874E8154 -:1021F0005F8168858A850E943511F801E559FE4F97 -:1022000080818E25808306C02F5F3F4F26303105A9 -:1022100061F6A9CF0E94472010916A010E943B10ED -:102220001817A1F00E943B1080936A012B960FB6FD -:10223000F894DEBF0FBECDBFDF91CF911F910F91FC -:10224000FF90EF90DF90CF900C9440092B960FB643 -:10225000F894DEBF0FBECDBFDF91CF911F910F91DC -:10226000FF90EF90DF90CF900895CF93DF93CDB79D -:10227000DEB72B970FB6F894DEBF0FBECDBF4F83EE -:10228000588769877A878B87DE01119686E0FD0182 -:1022900011928A95E9F785E0FE01379601900D923B -:1022A0008A95E1F749815A816B817C818D819E817C -:1022B0000E9471182B960FB6F894DEBF0FBECDBFEB -:1022C000DF91CF910895CF93C82F882309F4C1C01F -:1022D000823859F40E943B1081FDBBC089E30E9403 -:1022E0000E1B0E94D81B89E30CC0833879F40E942E -:1022F0003B1080FDAEC083E50E940E1B0E94D81BE0 -:1023000083E50E944E1BCF910C94D81B843859F45E -:102310000E943B1082FD9DC087E40E940E1B0E941C -:10232000D81B87E4EECF8CEF8C0F813A48F48C2FCA -:102330000E947C2281118DC08C2F0E940E1BE3CF46 -:1023400080E28C0F883048F4C77081E001C0880FAC -:10235000CA95EAF70E948F1BD6CF8BE58C0F83308E -:1023600078F4C53A29F0C63A31F482E890E005C025 -:1023700081E890E002C083E890E0CF910C945D107A -:1023800088E58C0F833108F064C0C83A39F1C93A46 -:1023900041F1CA3A49F1CB3A51F1CC3A59F1CD3A2F -:1023A00061F1C03B69F1CE3A71F1CF3A79F1C13BAD -:1023B00081F1C23B89F1C33B91F1C43B99F1C53B2B -:1023C000A1F1C63BA9F1C73BB1F1C83BB9F1C93B8B -:1023D000C1F1CA3BC9F58AE292E038C082EE90E0D2 -:1023E00035C089EE90E032C08AEE90E02FC085EBD8 -:1023F00090E02CC086EB90E029C087EB90E026C0EF -:102400008CEC90E023C08DEC90E020C083E891E05C -:102410001DC08AE891E01AC082E991E017C084E902 -:1024200091E014C081E292E011C083E292E00EC01C -:1024300084E292E00BC085E292E008C086E292E07E -:1024400005C087E292E002C080E090E0CF910C945A -:102450007310CF910895882309F44BC0823859F442 -:102460000E943B1081FF45C089E30E940E1B0E9421 -:10247000D81B89E30CC0833871F40E943B1080FFA5 -:1024800038C083E50E940E1B0E94D81B83E50E9482 -:102490004E1B0C94D81B843859F40E943B1082FFC9 -:1024A00028C087E40E940E1B0E94D81B87E4EFCF50 -:1024B0009CEF980F913A58F390E2980F983050F4AF -:1024C000877091E001C0990F8A95EAF7892F0E94E1 -:1024D000951BDFCF9BE5980F933020F480E090E0D0 -:1024E0000C945D10885A833120F480E090E00C94C5 -:1024F00073100895882321F00E948F1B0C94D81B21 -:102500000895882321F00E94951B0C94D81B0895F0 -:10251000CF92DF92EF92FF920F931F93CF93DF93AF -:10252000CDB7DEB728970FB6F894DEBF0FBECDBF8C -:102530008C0185E0F801DE01119601900D928A95DB -:10254000E1F7F80140813181F280258122952F70D9 -:1025500083819481892B31F03F3F31F481E04F3FFB -:1025600019F403C081E001C080E080FDCBC2498343 -:102570003A8389819A812F830E94CC1A9E8388870F -:102580000E94CB1A0E949E192F814E816885FF20E0 -:1025900029F00E94AC1B68854E812F81E42FE295C3 -:1025A000EF70F0E0E05AFF4F0C94AE24842F807F50 -:1025B000142F1F70882311F01295107FFF2059F0FF -:1025C000112309F454C2812F68870E949F1B0E9427 -:1025D000D81B68854CC2862F0E942B12112309F448 -:1025E00091C2812F0E94A51B28960FB6F894DEBFDA -:1025F0000FBECDBFDF91CF911F910F91FF90EF9054 -:10260000DF90CF900C94D81B342F307F842F8F70A5 -:10261000303211F08295807F662319F0613019F114 -:102620002BC0FF20B1F0222309F493C1213009F01F -:1026300090C128960FB6F894DEBF0FBECDBFDF91D4 -:10264000CF911F910F91FF90EF90DF90CF900C945E -:10265000BF1B222319F0213009F454C28E830E943B -:10266000C21B8E8189C1FF2021F0223008F04AC2AE -:1026700070C1211147C280C1FF2021F0222309F43B -:1026800068C1F5C1222309F477C105C2242F26951C -:102690002695237030E02115310521F021303105D8 -:1026A000C9F030C2FF2021F0862F942F937002C012 -:1026B00080E090E028960FB6F894DEBF0FBECDBF45 -:1026C000DF91CF911F910F91FF90EF90DF90CF900E -:1026D0000C945D10FF2021F0862F942F937002C080 -:1026E00080E090E028960FB6F894DEBF0FBECDBF15 -:1026F000DF91CF911F910F91FF90EF90DF90CF90DE -:102700000C947310862FFF2019F00E944F1F02C0F7 -:102710000E94B71F28960FB6F894DEBF0FBECDBF3C -:10272000DF91CF911F910F91FF90EF90DF90CF90AD -:102730000C943C20842F837009F076C0F110E2C124 -:10274000262F229526952770220F220F862F8F7015 -:10275000C82ED12CE12CF12C022E04C0CC0CDD1C97 -:10276000EE1CFF1C0A94D2F764FF10C06FE070E00B -:1027700080E090E004C0660F771F881F991F2A959C -:10278000D2F7609570958095909503C060E070E0F9 -:10279000CB01242F269526952370422F50E04230FE -:1027A0005105D1F04330510559F16C297D298E290D -:1027B0009F294130510541F128960FB6F894DEBFAC -:1027C0000FBECDBFDF91CF911F910F91FF90EF9082 -:1027D000DF90CF900C94C3196C297D298E299F29F5 -:1027E00028960FB6F894DEBF0FBECDBFDF91CF9114 -:1027F0001F910F91FF90EF90DF90CF900C94DD1917 -:102800000E94C319C701B60128960FB6F894DEBF1F -:102810000FBECDBFDF91CF911F910F91FF90EF9031 -:10282000DF90CF900C94A919FF2019F0842F8170AC -:1028300001C08695882309F465C1262F2295269527 -:102840002770220F220F862F8F70C82ED12CE12CDB -:10285000F12C022E04C0CC0CDD1CEE1CFF1C0A94D3 -:10286000D2F764FF10C06FE070E080E090E004C039 -:10287000660F771F881F991F2A95D2F7609570956C -:102880008095909503C060E070E0CB01242F2695E1 -:1028900026952370422F50E042305105D1F043304D -:1028A000510559F16C297D298E299F294130510507 -:1028B00041F128960FB6F894DEBF0FBECDBFDF9171 -:1028C000CF911F910F91FF90EF90DF90CF900C94DC -:1028D000971A6C297D298E299F2928960FB6F8947E -:1028E000DEBF0FBECDBFDF91CF911F910F91FF9043 -:1028F000EF90DF90CF900C94B11A0E94971AC70105 -:10290000B60128960FB6F894DEBF0FBECDBFDF919B -:10291000CF911F910F91FF90EF90DF90CF900C948B -:102920007D1A603FC9F118F4603E50F49BC0623FCD -:1029300009F460C008F44AC0633F09F46FC092C054 -:10294000162F1F70842F8F71FF2099F00E94161A86 -:10295000812F28960FB6F894DEBF0FBECDBFDF9152 -:10296000CF911F910F91FF90EF90DF90CF900C943B -:102970007A120E94371A812F28960FB6F894DEBF7C -:102980000FBECDBFDF91CF911F910F91FF90EF90C0 -:10299000DF90CF900C948112FF20A1F02111B2C0E2 -:1029A000842F8F7128960FB6F894DEBF0FBECDBF6F -:1029B000DF91CF911F910F91FF90EF90DF90CF901B -:1029C0000C945C1A223008F09DC0EACFFF20A1F0E1 -:1029D000842F8F7128960FB6F894DEBF0FBECDBF3F -:1029E000DF91CF911F910F91FF90EF90DF90CF90EB -:1029F0000C94161AFF2061F3842F8F7128960FB65E -:102A0000F894DEBF0FBECDBFDF91CF911F910F9124 -:102A1000FF90EF90DF90CF900C94371AFF2091F049 -:102A2000842F8F7128960FB6F894DEBF0FBECDBFEE -:102A3000DF91CF911F910F91FF90EF90DF90CF909A -:102A40000C94011A28960FB6F894DEBF0FBECDBFC6 -:102A5000DF91CF911F910F91FF90EF90DF90CF907A -:102A60000C94F719FF20A1F0222309F4B1CF862F8F -:102A700028960FB6F894DEBF0FBECDBFDF91CF9181 -:102A80001F910F91FF90EF90DF90CF900C94631106 -:102A9000222309F4B1CF862F28960FB6F894DEBF13 -:102AA0000FBECDBFDF91CF911F910F91FF90EF909F -:102AB000DF90CF900C942B124F70C8010E94A50498 -:102AC00028960FB6F894DEBF0FBECDBFDF91CF9131 -:102AD0001F910F91FF90EF90DF90CF900C941E19F3 -:102AE0004F70C80128960FB6F894DEBF0FBECDBF59 -:102AF000DF91CF911F910F91FF90EF90DF90CF90DA -:102B00000C94E20728960FB6F894DEBF0FBECDBF37 -:102B1000DF91CF911F910F91FF90EF90DF90CF90B9 -:102B200008950E94AC1B0E94BC1B0E94811B0E9446 -:102B3000D81B0E94E8200E943C2080E090E00E9488 -:102B40005D1080E090E00C9473100E949C1B0C942C -:102B500091150E94CC1A292F22952F7030E02C302D -:102B600031054CF42A3031056CF422503109223001 -:102B7000310590F407C02C30310551F02F3031056C -:102B800039F00AC0803E10F0803F31F481E00895B2 -:102B900093FB882780F9089580E00895CF93DF9311 -:102BA00000D000D01F92CDB7DEB70F900F900F90DE -:102BB0000F900F90DF91CF910895CF93DF9300D0C6 -:102BC00000D000D0CDB7DEB726960FB6F894DEBFA2 -:102BD0000FBECDBFDF91CF9108951F93CF93DF93A9 -:102BE000C091790116E080917A01C81799F0D0E080 -:102BF0001C9FF0011D9FF00D1124E558FE4F4081F0 -:102C0000518162817381848195810E94DD152196B5 -:102C1000C770E9CFDF91CF911F9108954091AB012B -:102C20005091AC016091AD017091AE018091AF0106 -:102C30009091B0010C94DD15CF938091B0018295F5 -:102C40008F7009F05FC08091AD01882309F45AC0EC -:102C500020917901A0917A016091AB017091AC0152 -:102C60008091AE019091AF0131E06F3F09F030E00B -:102C7000B32FC6E02A1709F445C0009721F07F3F23 -:102C800021F44B2F03C041E001C040E030E040FDA3 -:102C900035C0C29FF001C39FF00D1124E558FE4FCF -:102CA000418174132BC04081641328C042814111BB -:102CB00025C0438154814817590710F441505109E8 -:102CC000481B590B483C5105C8F48091B0018F70E6 -:102CD00080618093B00186E0829FF001839FF00DB8 -:102CE0001124E058FE4F80818F70806180838BEAD1 -:102CF00091E00E948812CF910C94ED152F5F3F4F09 -:102D00002770B8CFCF910895CF92DF92EF92FF92C4 -:102D10000F931F93CF93DF93CDB7DEB762970FB6B4 -:102D2000F894DEBF0FBECDBF8C0185E0F801DE0157 -:102D30001D9601900D928A95E1F7D8014C9111965C -:102D40005C91119712966C9112971396ED90FC90EE -:102D500014977091AB01E091AC012091AE013091DC -:102D6000AF012115310531F0EF3F31F481E07F3FB4 -:102D700019F403C081E001C080E0B82FB170CB2E00 -:102D800080FD6CC1D090AD01DD2009F4F5C0F0915B -:102D9000B001E216F30638F0C701821B930B883CA2 -:102DA000910548F09BC0209530952E0D3F1D283C85 -:102DB000310508F093C08F2F807F09F052C0E513D2 -:102DC00014C0741312C0D62E61110FC0FF70F061D1 -:102DD000F093B0010E940E168BEA91E00E948812D7 -:102DE0008091B001F80185836CC1EF2831F05F3F1D -:102DF00031F481E04F3F19F403C081E001C080E06D -:102E000080FD03C081E0862701C080E0F82FF170CB -:102E1000FF2E80FF1CC08091790120917A0136E05D -:102E2000821709F428C190E0389FF001399FF00D16 -:102E30001124E558FE4F7181571306C07081471366 -:102E400003C07281671303C001968770E9CFD62E45 -:102E5000662309F436C18091B00181608093B0018E -:102E600053C0E51308C0741306C0611104C0D80133 -:102E70001596FC93AEC04D875E878D859E856A8BC7 -:102E80000E94A9156A89882329F1D62E662311F19B -:102E90002091B001822F82958F7090E002970CF400 -:102EA00060C08091AB019091AC0198878F831986A7 -:102EB000FB86EA862C87CE01079651C0E51731F1D3 -:102EC0004D875E878D859E856A8B0E94A9156A89CC -:102ED00081112EC0C8010E948812A4C08F2F807F4C -:102EE00069F77E2DF98AE88A89890E94CE158BEAD6 -:102EF00091E00E948812EBEAF1E086E0DF011D928A -:102F00008A95E9F70E940E16D12CDBC07413D8CF36 -:102F10006111D6CFD8011596FC93C8010E94881282 -:102F2000EBEAF1E086E0DF011D928A95E9F7C9C07E -:102F3000D62E662379F22091B001822F82958F7070 -:102F400090E0029774F08091AB019091AC019A836C -:102F500089831B82FD82EC822E83CE0101960E9422 -:102F6000881286E0F801ABEAB1E001900D928A95F3 -:102F7000E1F70E941C166FC0E216F30628F0C701A5 -:102F8000821B930B9C0104C0209530952E0D3F1D94 -:102F9000283C310508F052C0D62E662309F49ACF9A -:102FA000E5132CC074132AC08091B00180FD1DC0B0 -:102FB000982F92959F70C9F0D80115968C9315970C -:102FC0009F3039F09F5F9295907F8F70892B159677 -:102FD0008C93C8010E94881286E0F801ABEAB1E048 -:102FE00001900D928A95E1F736C086E0F801ABEAD0 -:102FF000B1E001900D928A95E1F763C04D875E873D -:103000008D859E850E94A915882379F086E0F801B8 -:10301000ABEAB1E001900D928A95E1F70E941C168F -:103020000E940E16DD24D3944CC08091B0018160C3 -:103030008093B001C8010E94881243C07E2DF98A96 -:10304000E88A89890E94CE15EBEAF1E086E0DF018B -:103050001D928A95E9F70E940E1633C0662309F483 -:1030600039CF4D875E878D859E850E94A91588235F -:1030700009F430CFCBCF4D875E878D859E850E942A -:10308000CC1A292F22952F7030E0223031052CF4F4 -:103090009F7041F0811106C00CC0243031052CF422 -:1030A0009F7049F4805E883020F0C8010E94881229 -:1030B000CF2CDC2C06C0D80115969C91907F91F7FF -:1030C000F8CF8D2D62960FB6F894DEBF0FBECDBF40 -:1030D000DF91CF911F910F91FF90EF90DF90CF90F4 -:1030E00008951F93CF93DF93CDB7DEB72C970FB61C -:1030F000F894DEBF0FBECDBF4F83588769877A87AC -:103100008B879C87CE0107960E9484168823C1F086 -:103110002F8138858A859B85892B31F03F3F11F0BF -:1031200080E003C02F3FE1F781E0811147C04F816C -:10313000588569857A858B859C850E94DD153EC002 -:1031400086E0FE013796DE01119601900D928A9578 -:10315000E1F7FF81E8854A855B854115510531F02E -:10316000EF3F31F481E0FF3F19F403C081E001C07B -:1031700080E080FD23C020917A0130E0C9010196F2 -:10318000877099276091790170E086179707F1F1B0 -:10319000F983EA835D834C8396E0929FD001939FED -:1031A000B00D1124A558BE4FFE01319601900D922D -:1031B0009A95E1F780937A010E94ED1516E08091CF -:1031C000790190917A01891779F1189FC001112432 -:1031D00085589E4F0E948416882331F1E091790131 -:1031E0001E9FF0011124E558FE4F408151816281FC -:1031F0007381848195810E94DD158091790190E031 -:1032000001968770992780937901D9CF0E94A515DF -:1032100010927A0110927901EBEAF1E086E0DF0189 -:103220001D928A95E9F7CACF2C960FB6F894DEBFA7 -:103230000FBECDBFDF91CF911F910895EF92FF9206 -:103240000F931F93CF93DF93FC01009709F46FC096 -:10325000F12CEE24E394EF0121968491843740F41D -:10326000843008F055C0813081F0823021F15FC098 -:10327000853709F447C0C0F19CE7980F903708F0F4 -:1032800056C08F770E942B1245C08F010E5F1F4FD3 -:10329000FE01849190E2980F983050F48770FE2DD3 -:1032A00001C0FF0F8A95EAF78F2F0E94AF1B15C050 -:1032B0000E94631114C08F010E5F1F4FFE018491A5 -:1032C00090E2980F983068F48770FE2D01C0FF0FD0 -:1032D0008A95EAF78F2F0E94B51B0E94D81BE80140 -:1032E00019C00E942B12FBCFCF010296FE01C491A0 -:1032F000CC2361F0EFE9FFE03197F1F700C0000067 -:10330000C150F6CFCF010296FE01F490EC0102C04D -:103310000E9463118F2D882341F0EFE9FFE0319780 -:10332000F1F700C000008150F6CFFE0194CFDF918D -:10333000CF911F910F91FF90EF90089508956093A2 -:10334000B5017093B6018093B7019093B8010C94C6 -:1033500091150F931F930091B5011091B601209123 -:10336000B7013091B801062B172B282B392B00936E -:10337000B5011093B6012093B7013093B8011F91A6 -:103380000F910C9491150F931F930091B50110911B -:10339000B6012091B7013091B801062317232823E5 -:1033A00039230093B5011093B6012093B7013093F0 -:1033B000B8011F910F910C9491150F931F930091D9 -:1033C000B5011091B6012091B7013091B8010627DF -:1033D0001727282739270093B5011093B6012093AA -:1033E000B7013093B8011F910F910C949115109271 -:1033F000B1011092B2011092B3011092B4010C9479 -:10340000911541E050E060E070E004C0440F551FAA -:10341000661F771F8A95D2F74093B1015093B2018E -:103420006093B3017093B4010C94911541E050E0A6 -:1034300060E070E004C0440F551F661F771F8A9537 -:10344000D2F78091B1019091B201A091B301B091F6 -:10345000B401842B952BA62BB72B8093B1019093AD -:10346000B201A093B301B093B4010C94911541E063 -:1034700050E060E070E004C0440F551F661F771FE6 -:103480008A95D2F740955095609570958091B101DD -:103490009091B201A091B301B091B401842395231E -:1034A000A623B7238093B1019093B201A093B301F7 -:1034B000B093B4010C94911541E050E060E070E0ED -:1034C00004C0440F551F661F771F8A95D2F780915D -:1034D000B1019091B201A091B301B091B4018427E0 -:1034E0009527A627B7278093B1019093B201A093A7 -:1034F000B301B093B4010C9491150F931F930091F5 -:10350000B1011091B2012091B3013091B401062BA9 -:10351000172B282B392B0093B1011093B201209364 -:10352000B3013093B4011F910F910C9491150F9337 -:103530001F930091B1011091B2012091B30130911C -:10354000B40106231723282339230093B1011093D4 -:10355000B2012093B3013093B4011F910F910C94E9 -:1035600091150F931F930091B1011091B201209119 -:10357000B3013091B4010627172728273927009374 -:10358000B1011093B2012093B3013093B4011F91A4 -:103590000F910C9491150895CF92DF92EF92FF92C4 -:1035A0000F931F93CF93DF93EC01C090B501D090A0 -:1035B000B601E090B701F090B8018091B10190910F -:1035C000B201A091B301B091B401C82AD92AEA2A64 -:1035D000FB2A0FE110E0B701A601002E04C076958A -:1035E0006795579547950A94D2F740FF07C0BE01EB -:1035F000802F0E9405088130910539F4015011098E -:1036000050F7BE0180E00E940508DF91CF911F9125 -:103610000F91FF90EF90DF90CF90089590910C0163 -:103620009923D9F090910D019923B9F0982F96958F -:10363000969596959F3088F5E0910E01F0910F01D7 -:10364000E90FF11D877021E030E001C0220F8A955B -:10365000EAF78181822B8183089540910E01509178 -:103660000F0120E030E09FEFFA01E20FF31F6281CB -:10367000681799F09F3F19F4611101C0922F2F5FD5 -:103680003F4F2E30310581F79F3F39F0FA01E90FA6 -:10369000F11D97FDFA9582830895089590910C018C -:1036A0009923E1F090910D019923C1F0982F9695FF -:1036B000969596959F3020F5E0910E01F0910F01BF -:1036C000E90FF11D877021E030E001C0220F8A95DB -:1036D000EAF72095818128232183089540910E01E6 -:1036E00050910F0120E030E0FA01E20FF31F9281C8 -:1036F000981301C012822F5F3F4F2E303105A1F782 -:10370000089581E090E0E0910E01F0910F01E80F43 -:10371000F91F1082019680319105A9F708959091C3 -:10372000CC01982B9093CC01089580959091CC0179 -:1037300098239093CC0108951092CC010895909114 -:10374000CB01982B9093CB01089580959091CB015C -:1037500098239093CB0108951092CB0108959091F6 -:10376000CA01982B9093CA01089580959091CA013F -:1037700098239093CA0108951092CA0108958093E6 -:10378000B90108951092B901089540910E01509128 -:103790000F0120E030E080E0FA01E20FF31F918199 -:1037A00091118F5F2F5F3F4F2F303105A9F708959B -:1037B000E0910E01F0910F018091CC018083E091A6 -:1037C0000E01F0910F0180819091CB01892B8083B4 -:1037D000E0910E01F0910F0180819091CA01892B37 -:1037E00080839091B901992361F0E0910E01F091ED -:1037F0000F018081892B80830E94C51B811110924B -:10380000B90180910E0190910F010C944710CF9255 -:10381000DF92EF92FF920F931F936C01EE24FF242F -:10382000C114D104E104F10421F46B017C0180E0B6 -:1038300001C080E133272F2D1E2D0D2D01151105FF -:103840002105310519F0885F68017901970186012A -:10385000A4E03695279517950795AA95D1F70115F8 -:1038600011052105310519F08C5F68017901970177 -:103870008601F2E03695279517950795FA95D1F7C9 -:10388000011511052105310519F08E5F68017901D7 -:10389000B701A6017695679557954795452B462B19 -:1038A000472B09F08F5F1F910F91FF90EF90DF90F2 -:1038B000CF9008958091E601843009F11092CE01F5 -:1038C00020E488E190E00FB6F894A895809360001A -:1038D0000FBE2093600083B7817F846083BF83B76E -:1038E000816083BF7894889583B78E7F83BF88E19A -:1038F0000FB6F89480936000109260000FBE089598 -:1039000008950895CF930E94801C0E942F060E9464 -:10391000811CC0E08C2F0E941C07811105C0CF5F65 -:10392000CE30C1F780E001C081E0CF9108950E94C0 -:10393000A5150E943B100C94400982E084BD93E0E1 -:1039400095BD9AEF97BD80936E0008952FB7F894B8 -:103950008091CF019091D001A091D101B091D2017D -:103960002FBF0895CF92DF92EF92FF920F931F9394 -:103970002FB7F8944091CF015091D0016091D101BF -:103980007091D2012FBF6A017B01EE24FF248C01CC -:1039900020E030E0C016D106E206F30610F44150F4 -:1039A0005109481B590BCA011F910F91FF90EF90CD -:1039B000DF90CF9008951F920F920FB60F921124AF -:1039C0008F939F93AF93BF938091CF019091D0013C -:1039D000A091D101B091D2010196A11DB11D80939A -:1039E000CF019093D001A093D101B093D201BF91A8 -:1039F000AF919F918F910F900FBE0F901F901895D0 -:103A00000E94410DF8942FEF87EA91E62150804003 -:103A10009040E1F700C0000087E090EBDC0180936C -:103A2000EF019093F001A093F101B093F2012CE02B -:103A300088E190E00FB6F894A895809360000FBEDF -:103A400020936000FFCFEF92FF920F931F93CF93CD -:103A5000DF93E82EF12C8F2D0E941C07C0E0D0E0F0 -:103A6000082F10E098010C2E02C0359527950A9476 -:103A7000E2F720FD05C02196C630D10599F709C0AF -:103A80006C2F7F2D80E00E94E307E812F4CF81E0E5 -:103A900005C0F3948EE0F812DECF80E0DF91CF9185 -:103AA0001F910F91FF90EF900895CF93C82F8CE254 -:103AB0000E94231D882321F08C2FCF910C94231D6D -:103AC00080E0CF910895CF930E94A81E811102C07B -:103AD0000E948E1EC5E6C15049F00E942F068FE35A -:103AE0009CE90197F1F700C00000F5CF89E20E9440 -:103AF000551D811111C18AE20E94551D81110E943C -:103B00008E1E85E00E94551D81110E94001D0E949D -:103B1000B31E8093CD0187E00E94551D882399F143 -:103B20008BE10E94551D882351F09091CD0191FBAE -:103B3000882780F921E0822780FB91F922C08EE05E -:103B40000E94551D882351F09091CD0192FB88274A -:103B500080F921E0822780FB92F913C080E10E9466 -:103B6000551D9091CD01882341F093FB882780F962 -:103B700021E0822780FB93F904C0892F809580FB88 -:103B800090F99093CD018091CD010E94B71E0E94C3 -:103B9000C51E8093E00180EE0E94551D882341F0F0 -:103BA0008091E001982F909590FB80F98093E0013F -:103BB00089E30E94551D882359F09091E00191FB03 -:103BC000882780F921E0822780FB91F99093E0011A -:103BD00082EE0E94551D882359F09091E00192FBDE -:103BE000882780F921E0822780FB92F99093E001F9 -:103BF00086EE0E94551D882359F09091E00193FBB9 -:103C0000882780F921E0822780FB93F99093E001D7 -:103C100083EE0E94551D882359F09091E00194FB9A -:103C2000882780F921E0822780FB94F99093E001B6 -:103C300085E30E94551D882359F09091E00195FB82 -:103C4000882780F921E0822780FB95F99093E00195 -:103C500081E30E94551D882359F09091E00196FB65 -:103C6000882780F921E0822780FB96F99093E00174 -:103C700081E10E94551D882359F09091E00197FB46 -:103C8000882780F921E0822780FB97F99093E00153 -:103C90008091E0010E94C91E8091E00187FB882786 -:103CA00080F980930D0187E20E94551DC82F8EE197 -:103CB0000E94551D8111C2608FE10E94551D811126 -:103CC000C46080E20E94551D8111C86081E20E949B -:103CD000551D8111C06182E20E94551D8111C06293 -:103CE00083E20E94551D8111C06484E20E94551D2B -:103CF000882311F0C06802C0CC2329F08C2F0E94C9 -:103D0000C01E6C2F03C00E94BC1E682F70E080E0B4 -:103D100090E0CF910C949F19CF9108956DEE7EEFB6 -:103D200080E090E00E94E42460E082E090E00E9465 -:103D3000D62460E083E090E00E94D62460E084E036 -:103D400090E00E94D62460E085E090E00C94D624B8 -:103D500080E090E00E94D02421E08D3E9E4F09F04B -:103D600020E0822F089582E090E00C94C824682F10 -:103D700082E090E00C94D62483E090E00C94C82478 -:103D8000682F83E090E00C94D62484E090E00C94BB -:103D9000C824682F84E090E00C94D6248091D5014B -:103DA00080FF0BC06091130185E0689FB001112472 -:103DB00075956795759567952AC081FF09C06091D3 -:103DC000130185E0689FB0011124759567951FC0A8 -:103DD00082FF07C06091130185E0689FB001112444 -:103DE00016C04091D6014423C9F0609112014617D4 -:103DF00088F72091130185E0289F90011124429FAC -:103E0000C001439F900D112470E00E949A246038F5 -:103E1000710540F46115710539F002C065E070E08C -:103E2000862F08958FE7089581E008958091D50148 -:103E300080FF08C06091110170E0759567957595D8 -:103E4000679521C081FF06C06091110170E07595F2 -:103E5000679519C082FF04C06091110170E010C025 -:103E60008091D6018823C1F0609110018617A0F7D8 -:103E700090911101989FC001112470E00E949A2432 -:103E80006038710528F46115710521F0862F0895B9 -:103E90008FE7089581E0089561E070E0F4CF803FFE -:103EA00021F40E94CE1E819504C0813F29F40E9416 -:103EB000CE1E8093D9010895823F21F40E94CE1E28 -:103EC000819504C0833F29F40E94CE1E8093D801BF -:103ED0000895893F19F40E94161F05C08A3F31F4E6 -:103EE0000E94161F81958093DA0108958B3F21F47B -:103EF0000E94161F819504C08C3F29F40E94161F52 -:103F00008093DB010895843F21F48091D701816083 -:103F100017C0853F21F48091D701826011C0863F90 -:103F200021F48091D70184600BC0873F21F48091F8 -:103F3000D701886005C0883F31F48091D701806146 -:103F40008093D70108958D3F21F48091D501816040 -:103F50000BC08E3F21F48091D501826005C08F3F58 -:103F600029F48091D50184608093D5010895803F24 -:103F700039F48091D90187FF6CC01092D90169C0D2 -:103F8000813F29F48091D9011816BCF362C0909149 -:103F9000D801823F29F497FF5CC01092D80159C024 -:103FA000833F19F41916CCF354C0893F41F4809132 -:103FB000DA0118160CF04DC01092DA014AC08A3F9F -:103FC00029F48091DA0187FF44C0F6CF8B3F39F4A2 -:103FD0008091DB0187FF3DC01092DB013AC08C3F2E -:103FE00029F48091DB011816BCF333C0843F21F41F -:103FF0008091D7018E7F17C0853F21F48091D70132 -:104000008D7F11C0863F21F48091D7018B7F0BC03B -:10401000873F21F48091D701877F05C0883F31F425 -:104020008091D7018F7E8093D70113C08D3F21F4FB -:104030008091D5018E7F0BC08E3F21F48091D501F8 -:104040008D7F05C08F3F29F48091D5018B7F8093B0 -:10405000D5018091D80181110EC08091D9018111C3 -:104060000AC08091DA01811106C08091DB018111C3 -:1040700002C01092D601089587ED91E00E9452107F -:104080000E94A61C9093D4018093D30108951F939E -:10409000CF93DF938091D3019091D4010E94B21C01 -:1040A0004091D601442321F02091140130E006C054 -:1040B000209115015AE0259F900111248217930742 -:1040C00008F482C08091D8011091D901D091DA0111 -:1040D000C091DB01811107C0111105C0D11103C0CE -:1040E000CC2309F471C04F3F19F04F5F4093D601C4 -:1040F000181624F40E94CE1E8093D8018091D80116 -:1041000087FF05C00E94CE1E81958093D8011116AD -:1041100024F40E94CE1E8093D9018091D90187FF9B -:1041200005C00E94CE1E81958093D9016091D8016F -:10413000662339F11091D901112319F1772767FD11 -:104140007095872F972F0E94AB2323E333E343E33C -:104150005FE30E940F240E9478236093D801612FAF -:10416000772767FD7095872F972F0E94AB2323E356 -:1041700033E343E35FE30E940F240E9478236093BC -:10418000D9011D1624F40E94161F8093DA01809134 -:10419000DA0187FF05C00E94161F81958093DA011E -:1041A0001C1624F40E94161F8093DB018091DB0112 -:1041B00087FF05C00E94161F81958093DB01DF9168 -:1041C000CF911F910C943C20DF91CF911F910895C6 -:1041D000E7EDF1E085E0DF011D928A95E9F71092A5 -:1041E000D6011092D5010895833081F128F48130F1 -:1041F00059F08230D1F00895853009F449C0B8F102 -:10420000863009F456C0089520911501862F90E05C -:10421000820F911D8F3F910520F4620F609315016D -:1042200008958FEF80931501089520911401862F32 -:1042300090E0820F911D8F3F910520F4620F6093F3 -:10424000140108958FEF80931401089520911301B4 -:10425000862F90E0820F911D8F3F910520F4620F11 -:104260006093130108958FEF8093130108952091B7 -:104270001201862F90E0820F911D8F3F910520F44F -:10428000620F6093120108958FEF809312010895D9 -:1042900020911101862F90E0820F911D8F3F910593 -:1042A00020F4620F6093110108958FEF8093110144 -:1042B000089520911001862F90E0820F911D8F3F6D -:1042C000910520F4620F6093100108958FEF8093A1 -:1042D00010010895833011F128F4813049F08230C3 -:1042E00091F00895853081F120F18630C1F1089573 -:1042F00080911501681720F4861B8093150108959D -:1043000010921501089580911401681720F4861BFE -:10431000809314010895109214010895809113015F -:10432000681720F4861B80931301089510921301DF -:10433000089580911201681720F4861B8093120162 -:10434000089510921201089580911101681720F4C8 -:10435000861B809311010895109211010895809198 -:104360001001681720F4861B8093100108951092A5 -:10437000100108958D3109F442C020F58E3009F402 -:1043800079C070F4873009F45EC020F4863009F4F7 -:1043900042C033C08830D1F18B3009F4A7C02DC0A2 -:1043A000863109F4A3C038F4803109F46DC081313D -:1043B00009F47BC022C0893109F498C08B3109F41B -:1043C0004FC01BC0853309F479C048F4873209F423 -:1043D00075C008F478C0893209F470C00EC0833407 -:1043E00038F48A3308F071C0883309F47FC005C0FF -:1043F000833409F463C08834C1F080E008950E94DA -:1044000032230E943B100E94400970C00E94B31EDC -:104410000E94C51E6BC08091CD01817F8E7F8093ED -:10442000CD0181E08093DD0108950E94A5152FEF55 -:1044300083ED90E3215080409040E1F700C0000000 -:104440000E94001D53C09091CD01892F817090FF73 -:1044500003C0917F9E7F26C091609093CD0146C09E -:104460009091CD0191FB882780F921E0822780FB84 -:1044700091F913C09091CD0192FB882780F921E03A -:10448000822780FB92F909C09091CD0193FB882788 -:1044900080F921E0822780FB93F99093CD01882356 -:1044A00029F191609093CD0108950E94A515809106 -:1044B0000D0191E0892780930D0118C061E070E043 -:1044C00080E090E00FC023EE01C027EC280F61E0F0 -:1044D00070E080E090E004C0660F771F881F991F8E -:1044E0002A95D2F70E949F190E94A51581E0089590 -:1044F00080E0089580E00895CF93C82F8091DD017A -:10450000813079F018F08230D1F184C0A0910E0191 -:10451000B0910F018C91813169F0823209F07CC039 -:1045200009C0A0910E01B0910F018C91813111F061 -:10453000823249F48C2F0E94782281111DC08C2F69 -:104540000E94BA211AC08C2F0E947A22811114C0B5 -:10455000C43179F048F4CB3079F0C03109F060C053 -:1045600082E08093DD0108C0C93219F0C83321F020 -:1045700057C01092DD0154C081E0817053C0C93230 -:1045800089F118F5C43171F1A8F4C73009F046C0BB -:104590008AE08093150194E19093140193E0909345 -:1045A00013018093120188E08093110188E28093C7 -:1045B000100134C0CE51C63088F5EC2FF0E0E65D36 -:1045C000FE4F80818093DC0129C0CE34E9F020F4D5 -:1045D000CB3421F56AE013C0C13579F0C235F1F46E -:1045E00061E00DC08091DC01882319F01092DC019C -:1045F00015C081E08093DD0115C061E006C08091A7 -:10460000DC010E94F4200AC06AE08091DC010E9473 -:104610006A2104C01092DD0180E004C081E002C084 -:1046200080E0ABCFCF910895E1E8F0E08081886031 -:1046300080838081816080838FB7F89493E090932A -:10464000890090ED909388008FBF0895EFE6F0E029 -:104650008081826080830895EFE6F0E080818D7F25 -:1046600080830895EFE6F0E0808192E089278083DF -:1046700008951F920F920FB60F9211242F933F931C -:104680004F935F936F937F938F939F93AF93BF935A -:10469000EF93FF938091DE019091DF01019690935B -:1046A000DF018093DE01811103C082E00E94400996 -:1046B000E091DF01E695E695F0E0E258F74FE491EE -:1046C0008091DE018E1303C080E00E944009FF91BB -:1046D000EF91BF91AF919F918F917F916F915F917A -:1046E0004F913F912F910F900FBE0F901F901895F3 -:1046F00004D06894B1118DC0089570D088F09F5790 -:1047000090F0B92F9927B751A0F0D1F0660F771F1D -:10471000881F991F1AF0BA95C9F712C0B13081F0FD -:1047200077D0B1E0089574C0672F782F8827B85FDD -:1047300039F0B93FCCF3869577956795B395D9F75E -:104740003EF490958095709561957F4F8F4F9F4F68 -:104750000895E89409C097FB3EF490958095709574 -:1047600061957F4F8F4F9F4F9923A9F0F92F96E9BD -:10477000BB279395F695879577956795B795F11132 -:10478000F8CFFAF4BB0F11F460FF1BC06F5F7F4FCF -:104790008F4F9F4F16C0882311F096E911C07723E1 -:1047A00021F09EE8872F762F05C0662371F096E8EA -:1047B000862F70E060E02AF09A95660F771F881FB9 -:1047C000DAF7880F9695879597F9089557FD9058D1 -:1047D000440F551F59F05F3F71F04795880F97FBC5 -:1047E000991F61F09F3F79F087950895121613067F -:1047F0001406551FF2CF4695F1DF08C016161706AE -:104800001806991FF1CF86957105610508940895E2 -:10481000E894BB2766277727CB0197F908950BD03B -:1048200078C069D028F06ED018F0952309F05AC0EE -:104830005FC01124EECFCADFA0F3959FD1F3950F8F -:1048400050E0551F629FF001729FBB27F00DB11D14 -:10485000639FAA27F00DB11DAA1F649F6627B00DA4 -:10486000A11D661F829F2227B00DA11D621F739F8D -:10487000B00DA11D621F839FA00D611D221F749F9B -:104880003327A00D611D231F849F600D211D822FE2 -:10489000762F6A2F11249F5750408AF0E1F0882329 -:1048A0004AF0EE0FFF1FBB1F661F771F881F915036 -:1048B0005040A9F79E3F510570F014C0AACF5F3F4A -:1048C000ECF3983EDCF3869577956795B795F79569 -:1048D000E7959F5FC1F7FE2B880F911D96958795F1 -:1048E00097F9089597F99F6780E870E060E0089570 -:1048F0009FEF80EC089500240A94161617061806F8 -:104900000906089500240A941216130614060506D3 -:104910000895092E0394000C11F4882352F0BB0F64 -:1049200040F4BF2B11F460FF04C06F5F7F4F8F4FC7 -:104930009F4F089597FB072E16F4009407D077FD3C -:1049400009D00E94B42407FC05D03EF490958195CF -:104950009F4F0895709561957F4F0895EE0FFF1F4B -:104960000590F491E02D0994AA1BBB1B51E107C0EF -:10497000AA1FBB1FA617B70710F0A61BB70B881FEF -:10498000991F5A95A9F780959095BC01CD0108957E -:10499000F999FECF92BD81BDF89A992780B5089507 -:1049A000A8E1B0E042E050E00C94EB24262FF99906 -:1049B000FECF1FBA92BD81BD20BD0FB6F894FA9A02 -:1049C000F99A0FBE019608950E94D624272F0C94C1 -:1049D000D724DC01CB01FC01F999FECF06C0F2BD62 -:1049E000E1BDF89A319600B40D9241505040B8F7AD -:0649F0000895F894FFCFCA -:1049F60020024209CF09AC09780945090101BA012B -:104A060028080A03140A3F4D36393F08F207BC0747 -:104A1600830716072F0748076107010203040506E7 -:044A26000708090074 +:100980000F1CC82FE0910E01F0910F01808182723F +:1009900019F0259A2D9A06C00E94431081FDF9CFC7 +:1009A00025982D98C130B9F0C430A9F089EF8C0F8B +:1009B000823088F08EEF8C0F823018F4269A2E9AAF +:1009C00002C026982E98C550C23018F4279A2F9A44 +:1009D00002C027982F98CF9108950C94B60456988A +:1009E0005E9825982D9826982E9827982F988FEF07 +:1009F00090E0909389008093880090938B0080937F +:100A00008A0090938D0080938C00259A2D9A2FEF69 +:100A100080E792E0215080409040E1F700C0000064 +:100A2000269A2E9A2FEF80E792E021508040904046 +:100A3000E1F700C00000279A2F9A2FEF80E792E09D +:100A4000215080409040E1F700C0000025982D988B +:100A50002FEF80E792E0215080409040E1F700C006 +:100A6000000026982E982FEF80E792E021508040DA +:100A70009040E1F700C0000027982F9856985E98A4 +:100A800025982D9826982E9827982F98089589EACA +:100A90008093800089E08093810024982C983F986F +:100AA0008AB18F748AB96E98479A8BB1806B8BB973 +:100AB000769A0E94EF040C94B50480E280930001C2 +:100AC0008091340181110EC00E94AC0581E08093B9 +:100AD00034012FEF83ED90E3215080409040E1F707 +:100AE00000C0000080E40E94B205809300018111E3 +:100AF0002EC00E94DC0580930001811128C00E9455 +:100B0000DC0580930001811122C08FE30E94DC0587 +:100B10008093000181111BC00E94D40580E40E94D3 +:100B2000B20580930001811112C08CE00E94DC05A7 +:100B30008093000181110BC00E94DC0580930001AD +:100B4000811105C08FE30E94DC05809300010E94A3 +:100B5000D4058091000108951092B9008AE0809335 +:100B6000B800089594EA9093BC009091BC0097FF60 +:100B7000FCCF9091B900987F983021F0903111F01E +:100B800081E008958093BB0084E88093BC0080914D +:100B9000BC0087FFFCCF8091B900887F883111F0BD +:100BA000803471F780E0089584E98093BC008091DF +:100BB000BC0084FDFCCF08958093BB0084E8809343 +:100BC000BC008091BC0087FFFCCF9091B900987F5A +:100BD00081E0983209F480E0089584E88093BC00B5 +:100BE0008091BC0087FFFCCF8091BB00089580916D +:100BF0000001811115C080E40E94B20580930001BC +:100C000081110CC082E10E94DC05809300018111FA +:100C100005C08FEF0E94DC05809300010E94D4057F +:100C200084B1807F84B985B1807F85B98AB1837FA3 +:100C30008AB98BB1837F8BB93E98469808950E94FC +:100C40005D05809300010E94F70580B38C7080BB26 +:100C500081B3836F81BBE4E4F1E0A6E3B1E01192DC +:100C60001D9281E0E235F807D1F70C944705BF9259 +:100C7000CF92DF92EF92FF920F931F93CF93DF9368 +:100C800080910001882379F0809135018F5F8093F6 +:100C90003501811108C00E945D058093000181111A +:100CA00002C00E94EF0406E311E0C0E0D0E0DD24C2 +:100CB000D39482E0C82EEE24E394F12CC73000F5E3 +:100CC00080910001811162C080E40E94B20580938E +:100CD0000001811112C082E10E94DC0580930001B5 +:100CE00081110BC0C7010C2E01C0880F0A94EAF7CE +:100CF00080950E94DC05809300010E94D40546C0C7 +:100D0000CA30A1F028F4C83059F0C93061F005C0EC +:100D1000CC3089F070F0CD3089F0209A289810C03E +:100D2000219A29980DC0229A2A980AC0239A2B98B2 +:100D300007C0529A01C0539A5B9802C03E9A4698E7 +:100D4000E0EAEA95F1F78FB179995AC092E08170A3 +:100D50008D25892B7C9B02C090E001C094E0892BFB +:100D60007D9B02C090E001C098E0892B7E9B02C071 +:100D700090E001C090E1892B9FB19095991F992730 +:100D8000991F9295990F907E892B0FC08091000139 +:100D900081114BC080E40E94B2058093000188233A +:100DA00089F1B12C0E94D4058B2DF8019081981700 +:100DB00019F08083C09201010E94F70521960F5F10 +:100DC0001F4FCE30D10509F079CF809101018823E2 +:100DD00071F1815080930101882339F08FE99FE000 +:100DE0000197F1F700C0000022C0A4E4B1E0E6E3FF +:100DF000F1E081918D9391E0E434F907D1F717C0C8 +:100E000090E0A5CF83E10E94DC0580930001811171 +:100E1000C8CF81E40E94B205809300018111C1CF47 +:100E20000E94ED05B82EB094BDCF80E0BECF0E94E9 +:100E3000ED0481E0DF91CF911F910F91FF90EF9032 +:100E4000DF90CF90BF900895E82FF0E0EC5BFE4F6D +:100E50008081089508958B3B910578F4883A910537 +:100E600040F5853A9105D0F48430910508F0B1C081 +:100E70008130910509F4ADC06BC0803E910508F446 +:100E800067C0883E910508F4A4C09C01205F310929 +:100E90002031310508F05CC090650895853A9105D0 +:100EA00009F459C0863A910509F458C083E890E4E2 +:100EB0000895883A910509F454C0893A910509F4D6 +:100EC00053C08A3A910509F452C08B3A910509F44E +:100ED00051C08C3A910509F450C08D3A910509F43E +:100EE0004FC0803B910509F44EC08E3A910509F43C +:100EF0004DC08F3A910509F44CC0813B910509F42E +:100F00004BC0823B910509F44AC0833B910509F42B +:100F100049C0843B910509F448C0853B910509F41B +:100F200047C0863B910509F446C0873B910509F40B +:100F300045C0883B910509F444C0893B910509F4FB +:100F400043C08A3B910509F042C08AE296E40895C5 +:100F500080E090E0089581E890E4089582E890E4CC +:100F6000089582EE94E4089589EE94E408958AEE5B +:100F700094E4089585EB94E4089586EB94E4089551 +:100F800087EB94E408958CEC94E408958DEC94E45C +:100F9000089583E895E408958AE895E4089582E940 +:100FA00095E4089584E995E4089581E296E408952E +:100FB00083E296E4089584E296E4089585E296E457 +:100FC000089586E296E4089587E296E4089580E025 +:100FD00094E40895089596E0799FF001112494E532 +:100FE000899FE00DF11D1124E60FF11DEE0FFF1F8B +:100FF000E851FF4F859194910895880F991F805A69 +:101000009040FC01859194910895880F991F80521A +:101010009F4FFC0185919491089526E0729FF00105 +:10102000112444E5849FE00DF11D1124E60FF11D0C +:10103000EE0FFF1FE851FF4F25913491C9019A959A +:1010400081159F4110F4C9010895C901905281157D +:10105000904128F4C9019F700E9405080895C901B4 +:1010600090538115904120F4C9019927906C0895FF +:10107000211580E5380769F40E94AD159FEF24E340 +:101080004CE0915020404040E1F700C000000C943B +:10109000081D213080E5380731F48091CD01816051 +:1010A0008093CD010895C90190558115904108F0B4 +:1010B00050C0832F99278F70992781309105D9F4DB +:1010C000A9014370552702C0880F991F4A95E2F77E +:1010D0009C68A90164E0440F551F6A95E1F7442715 +:1010E0005370842B952B73E0220F331F7A95E1F711 +:1010F000207633271DC08230910529F4922F88274E +:10110000816F906A089583309105A9F4A901437015 +:10111000552781E090E002C0880F991F4A95E2F7B9 +:101120009C6843E0220F331F4A95E1F7207E377019 +:10113000822B932B08950497F1F4A901437055274E +:1011400081E090E002C0880F991F4A95E2F79A6803 +:10115000E8CFC90190578115904120F4C9019F70D3 +:1011600090620895C90190588115904120F4C901F9 +:101170009F70906A0895203E3105E0F4203C3105CF +:1011800058F52133310509F470C048F4293231058E +:1011900009F464C02A32310509F46EC074C02933E1 +:1011A0003105F1F022383105D9F02533310509F444 +:1011B0004EC069C0233E310589F138F4203E310527 +:1011C000C1F0223E3105E1F05EC0263E310569F1F5 +:1011D000273E3105A9F157C0C9010E94FD070895B6 +:1011E0008091E00180FD02C081FF4DC080EE90E063 +:1011F0004BC08091E00180FFF9CF89E390E044C0CB +:101200008091E00182FF0EC08091E00184FF03C065 +:1012100080E090E039C083EE90E036C08091E0013C +:1012200082FFF2CF82EE90E02FC08091E00183FF39 +:101230000BC08091E00184FDEBCF87EE90E024C0ED +:101240008091E00183FFF5CF86EE90E01DC0809194 +:10125000E00185FF07C089E290E016C08091E001BF +:1012600085FFF9CF85E390E00FC08091E00186FF14 +:1012700007C08AE290E008C08091E00186FFF9CFC4 +:1012800081E390E001C0C9010E942B0708950895F1 +:101290000C944709809162010895CF93DF9300D0A9 +:1012A0001F92CDB7DEB72091E601243019F523E077 +:1012B00029839B838A832093E9008FEF9091E80034 +:1012C000815095FD06C095ED9A95F1F700008111CA +:1012D000F5CF8091E80085FF0DC040E050E063E06D +:1012E00070E0CE0101960E94B70B8091E8008E77E6 +:1012F0008093E8000F900F900F90DF91CF910895A9 +:10130000CF93DF9300D01F92CDB7DEB72091E601D7 +:10131000243021F522E029839B838A8383E0809314 +:10132000E9008FEF9091E800815095FD06C095EDA2 +:101330009A95F1F700008111F5CF8091E80085FFC3 +:101340000DC040E050E063E070E0CE0101960E94E5 +:10135000B70B8091E8008E778093E8000F900F9094 +:101360000F90DF91CF9108952091E6012430F1F4A0 +:1013700022E02093E9002FEF3091E800215035FD65 +:1013800006C035ED3A95F1F700002111F5CF209117 +:10139000E80025FF0BC040E050E065E070E00E94EF +:1013A000B70B8091E8008E778093E8000895CF9383 +:1013B000DF93EC018091E601843009F046C0909102 +:1013C0000C019923D9F090910D019923B9F08093E4 +:1013D000E9008FEF9091E800815095FD06C095E1FE +:1013E0009A95F1F700008111F5CF8091E80085FF13 +:1013F0002CC040E050E060E170E017C081E08093D5 +:10140000E9008FEF9091E800815095FD06C095EDC1 +:101410009A95F1F700008111F5CF8091E80085FFE2 +:1014200014C040E050E068E070E0CE010E94B70BCD +:101430008091E8008E778093E80080E1FE01A2E5CC +:10144000B1E001900D928A95E1F7DF91CF91089577 +:101450008091E501811109C00E94490D0E94A60DED +:101460008091E20084608093E20008951092E5018B +:10147000089508950C942E230E949F1C0E943423EB +:101480000E9443100C94480942E061EC81E00E9404 +:10149000C30C42E061EC82E00E94C30C42E061ECCC +:1014A00083E00E94C30C42E161EC84E00C94C30C25 +:1014B0008091E801833009F455C030F4813071F037 +:1014C000823009F48EC008958A3009F47AC08B30D6 +:1014D00009F460C0893009F09CC020C08091E70108 +:1014E000813A09F096C08091E800877F8093E800F8 +:1014F0008091EB019091EC01892B21F060E080E07C +:1015000090E003C060E182E591E070E00E94000C91 +:101510008091E8008B778093E80008958091E7013F +:10152000813209F076C08091EB019091EC01009737 +:1015300019F0039709F06DC08091E800877F8093D0 +:10154000E8008091E80082FD05C08091E6018111EC +:10155000F8CF5FC08091F100809362018091E80034 +:101560008B7753C08091E701813A09F052C0809196 +:10157000EB019091EC01892B09F04BC08091E800C0 +:10158000877F8093E8008091E80080FFFCCF809106 +:101590000C0136C08091E7018132D9F58091EB01D1 +:1015A0009091EC01892BA9F58091E800877F8093C9 +:1015B000E8000E94F80C8091E90180930C010C94E2 +:1015C000AD158091E701813221F58091E800877F98 +:1015D0008093E8000E94F80C8091EA0180936301F7 +:1015E00008958091E701813AA1F48091E800877F16 +:1015F0008093E8008091E80080FFFCCF8091630138 +:101600008093F1008091E8008E778093E8000C943D +:10161000F80C089584B7877F84BF88E10FB6F894EB +:1016200080936000109260000FBE90E080E80FB6DB +:10163000F89480936100909361000FBE0E94921015 +:101640000E94490D0E94A60D8091E2008460809363 +:10165000E20078940E9421100E94941082E091E0B0 +:101660000E943E100E941C238091E601853069F49F +:101670000E94621C8091E4018823B1F30E948A1CBD +:10168000882391F30E94A10BEFCF0E949A10ECCF18 +:10169000292F332723303105A9F06CF4213031058F +:1016A00009F442C02230310509F043C08DE690E0D4 +:1016B00024E037E042C021323105C9F02232310541 +:1016C00019F137C099278130910541F08230910599 +:1016D00041F0892B71F5E0E0F7E005C0E8EEF6E0B7 +:1016E00002C0E0EDF6E0849190E09F0126C06430F6 +:1016F00000F5E62FF0E0EE0FFF1FEE5DFE4F2081BC +:10170000318189E090E019C0643098F4E62FF0E070 +:10171000DF01AA0FBB1FA65EBE4F2D913C91EA5E72 +:10172000FE4F808190E009C082E190E021E737E040 +:1017300004C080E090E020E030E0FA0131832083B3 +:10174000089580E189BD82E189BD09B400FEFDCF25 +:101750008091D8008F7D8093D8008091E0008260D6 +:101760008093E0008091E00081FDFCCF0895CF924E +:10177000DF92EF92FF920F931F93CF93DF937C0141 +:101780008B01EA010E94190D811131C0209731F0BF +:1017900088819981081B190BE80EF91EC12CD12CE8 +:1017A0000115110519F18091E80085FD14C08091A3 +:1017B000E8008E778093E800209741F08881998136 +:1017C0008C0D9D1D9983888385E011C00E94190DA1 +:1017D000882331F30CC0F70181917F018093F100E0 +:1017E00001501109FFEFCF1ADF0ADACF80E0DF9155 +:1017F000CF911F910F91FF90EF90DF90CF900895C0 +:101800002091ED013091EE012617370748F0611560 +:10181000710539F42091E8002E772093E80001C08B +:10182000B901FC0120E061157105B9F18091E60173 +:10183000882309F440C0853009F43FC08091E80056 +:1018400083FD3DC08091E80082FF06C08091E800E2 +:1018500082FF26C080E008958091E80080FFE3CFFA +:101860002091F3008091F20090E0922B61157105B8 +:1018700051F08830910538F421912093F1006150A6 +:1018800071090196F3CF21E0089709F020E08091DB +:10189000E8008E778093E800C6CF2111C7CFD6CF5E +:1018A0008091E601882339F0853039F08091E80095 +:1018B00083FFCCCF04C082E0089583E0089581E0E7 +:1018C00008952091ED013091EE012617370748F079 +:1018D0006115710539F42091E8002E772093E80016 +:1018E00001C0B901FC0120E061157105C1F18091D1 +:1018F000E601882309F441C0853009F440C0809195 +:10190000E80083FD3EC08091E80082FF06C0809120 +:10191000E80082FF27C080E008958091E80080FF02 +:10192000E3CF2091F3008091F20090E0922B6115BB +:10193000710559F08830910540F424912093F1000D +:101940003196615071090196F2CF21E0089709F0B4 +:1019500020E08091E8008E778093E800C5CF2111C8 +:10196000C6CFD5CF8091E601882339F0853039F094 +:101970008091E80083FFCBCF04C082E0089583E02C +:10198000089581E00895982F973058F59093E900D5 +:10199000981739F07091EC002091ED005091F00013 +:1019A00003C0242F762F50E021FF19C03091EB00A7 +:1019B0003E7F3093EB003091ED003D7F3093ED00A2 +:1019C0003091EB0031603093EB007093EC0020938A +:1019D000ED005093F0002091EE0027FF07C09F5FBD +:1019E000D3CF8F708093E90081E0089580E008955F +:1019F0008091E70187FD05C08091E80080FF0EC05F +:101A000012C08091E80082FD05C08091E60181113D +:101A1000F8CF08958091E8008B7708C08091E601A7 +:101A20008111EACF08958091E8008E778093E800D5 +:101A300008958091E4009091E50045E62091EC0046 +:101A400020FF21C02091E80020FD21C02091E60167 +:101A5000222389F0253089F02091EB0025FD0FC06D +:101A60002091E4003091E5002817390739F34150FF +:101A700041F0C901E3CF82E0089583E0089581E059 +:101A8000089584E008952091E80022FFDFCF80E0F0 +:101A900008950E94B70D0E94BF0DE0EEF0E0808136 +:101AA00081608083E8EDF0E080818F77808319BCCE +:101AB000A7EDB0E08C918E7F8C9380818F7E8083A8 +:101AC0001092E50108950F931F93CF93DF930E9427 +:101AD000B70D0E94BF0DC8EDD0E088818F77888355 +:101AE00088818068888388818F7D888319BC109263 +:101AF000E6011092E2011092E4011092E30100EE7F +:101B000010E0F80180818B7F8083888181608883E9 +:101B100042E060E080E00E94C30CE1EEF0E08081F2 +:101B20008E7F8083E2EEF0E080818160808380811F +:101B300088608083F80180818E7F808388818061C6 +:101B40008883DF91CF911F910F910895E8EDF0E028 +:101B500080818F7E8083E7EDF0E0808181608083EB +:101B600084E082BF81E08093E5010C94630DE8ED91 +:101B7000F0E080818E7F80831092E20008951092C1 +:101B8000DA001092E10008951F920F920FB60F92A3 +:101B900011242F933F934F935F936F937F938F9372 +:101BA0009F93AF93BF93EF93FF938091E10082FFE8 +:101BB0000BC08091E20082FF07C08091E1008B7F23 +:101BC0008093E1000E9420108091DA0080FF1FC006 +:101BD0008091D80080FF1BC08091DA008E7F8093B7 +:101BE000DA008091D90080FF0DC080E189BD82E1DB +:101BF00089BD09B400FEFDCF81E08093E6010E941B +:101C0000280A05C019BC1092E6010E94360A80918C +:101C1000E10080FF19C08091E20080FF15C0809133 +:101C2000E2008E7F8093E2008091E20080618093E9 +:101C3000E2008091D80080628093D80019BC85E0D2 +:101C40008093E6010E943A0A8091E10084FF30C04F +:101C50008091E20084FF2CC080E189BD82E189BDD2 +:101C600009B400FEFDCF8091D8008F7D8093D8000D +:101C70008091E1008F7E8093E1008091E2008F7E71 +:101C80008093E2008091E20081608093E200809185 +:101C9000E201882311F084E007C08091E30087FF10 +:101CA00002C083E001C081E08093E6010E943C0A0B +:101CB0008091E10083FF29C08091E20083FF25C06D +:101CC0008091E100877F8093E10082E08093E601CC +:101CD0001092E2018091E1008E7F8093E10080917B +:101CE000E2008E7F8093E2008091E2008061809329 +:101CF000E20042E060E080E00E94C30C8091F000CE +:101D000088608093F0000E94390AFF91EF91BF91A3 +:101D1000AF919F918F917F916F915F914F913F9183 +:101D20002F910F900FBE0F901F9018951F920F923A +:101D30000FB60F9211242F933F934F935F936F939E +:101D40007F938F939F93AF93BF93CF93EF93FF9323 +:101D5000C091E900CF708091EC001092E900809171 +:101D6000F000877F8093F00078940E94D20E10924A +:101D7000E9008091F00088608093F000C093E90052 +:101D8000FF91EF91CF91BF91AF919F918F917F91F3 +:101D90006F915F914F913F912F910F900FBE0F90D8 +:101DA0001F9018951F93CF93DF93CDB7DEB7AA97F7 +:101DB0000FB6F894DEBF0FBECDBFE7EEF1E0809125 +:101DC000F100819321E0EF3EF207C9F70E94580A23 +:101DD0008091E80083FF1CC12091E7013091E80168 +:101DE000832F90E08A30910508F012C1FC01EA5A75 +:101DF000FF4F0C94B624203881F0223809F008C136 +:101E00008091EB018F708093E9008091EB0085FB5E +:101E1000882780F91092E90006C08091E301909133 +:101E2000E401911182609091E800977F9093E8001F +:101E30008093F1001092F100C5C0822F8D7F09F0D0 +:101E4000E7C0222319F0223061F0E2C08091E9015D +:101E5000813009F0DDC0333009F080E08093E40187 +:101E600028C08091E901811124C02091EB012F70DD +:101E700009F4CEC02093E9008091EB0080FF19C0E7 +:101E80008091EB00333011F4806211C08061809347 +:101E9000EB0081E090E0022E01C0880F0A94EAF77F +:101EA0008093EA001092EA008091EB0088608093B2 +:101EB000EB001092E9008091E800877F86C0211135 +:101EC000A7C01091E9011F778091E3008078812BF2 +:101ED0008093E3008091E800877F8093E8000E9470 +:101EE000F80C8091E80080FFFCCF8091E3008068CF +:101EF0008093E300112311F083E001C082E080931E +:101F0000E60186C02058223008F082C08091E901A5 +:101F10009091EA018C3D23E0920779F583E08A8372 +:101F20008AE289834FB7F894DE01139620E03EE001 +:101F300051E2E32FF0E050935700E49120FF03C0FB +:101F4000E295EF703F5FEF708E2F90E0EA3010F077 +:101F5000C79601C0C0968D939D932F5F243149F79A +:101F60004FBF8091E800877F8093E8006AE270E0CD +:101F7000CE0101960E94000C14C0AE014F5F5F4F6E +:101F80006091EB010E94480B009709F441C0209139 +:101F9000E800277F2093E800BC0189819A810E9494 +:101FA000610C8091E8008B778093E80031C0203885 +:101FB00079F58091E800877F8093E8008091E201C5 +:101FC0008093F1008091E8008E778093E8000E9472 +:101FD000F80C1EC021111CC09091E9019230C0F490 +:101FE0008091E800877F8093E8009093E2010E944F +:101FF000F80C8091E201811104C08091E30087FF19 +:1020000002C084E001C081E08093E6010E94440A9E +:102010008091E80083FF0AC08091E800877F809369 +:10202000E8008091EB0080628093EB00AA960FB6E7 +:10203000F894DEBF0FBECDBFDF91CF911F91089501 +:102040000895CF938091E6018823B1F08091E90053 +:102050008F709091EC0090FF02C090E801C090E07A +:10206000C92FC82B1092E9008091E80083FD0E94DF +:10207000D20ECF70C093E900CF910895909369017B +:10208000809368010895E0916801F09169013097AB +:1020900021F00190F081E02D099480E00895E09115 +:1020A0006801F0916901309721F00280F381E02D01 +:1020B00009940895E0916801F0916901309721F049 +:1020C0000480F581E02D09940895209166013091F6 +:1020D00067018217930771F09093670180936601FF +:1020E000E0916801F0916901309721F00680F78155 +:1020F000E02D0994089520916401309165018217C3 +:10210000930771F09093650180936401E0916801F9 +:10211000F0916901309721F00084F185E02D099458 +:10212000089508950C9491100E94A51C0E941F060A +:102130000C946B1DCF92DF92EF92FF920F931F933F +:10214000CF93DF93CDB7DEB72B970FB6F894DEBFF2 +:102150000FBECDBF0E9437063BE6E32E31E0F32EE3 +:1021600000E010E0C02E802F0E942407F701D190DC +:102170007F01D826B1F40F5F1F4F0E30110591F784 +:102180008FEF89838A831B820E94AE1C8160782F27 +:102190009D838C8349815A816B818D810E943D1181 +:1021A00041C09091CD0191FF04C08B870E942A0706 +:1021B0008B8520E030E04D2D50E0922FBA01022EA9 +:1021C00002C0759567950A94E2F760FF25C02E83DB +:1021D000CF82EE24E394F12C02C0EE0CFF1C9A9502 +:1021E000E2F790E08E219F2121E0892B09F420E085 +:1021F00028870E94AE1C8160782F9A8789874E813C +:102200005F8168858A850E943D11F801E559FE4F7E +:1022100080818E25808306C02F5F3F4F2630310599 +:1022200061F6A9CF0E944F2010916A010E944310CD +:102230001817A1F00E94431080936A012B960FB6E5 +:10224000F894DEBF0FBECDBFDF91CF911F910F91EC +:10225000FF90EF90DF90CF900C9448092B960FB62B +:10226000F894DEBF0FBECDBFDF91CF911F910F91CC +:10227000FF90EF90DF90CF900895CF93DF93CDB78D +:10228000DEB72B970FB6F894DEBF0FBECDBF4F83DE +:10229000588769877A878B87DE01119686E0FD0172 +:1022A00011928A95E9F785E0FE01379601900D922B +:1022B0008A95E1F749815A816B817C818D819E816C +:1022C0000E9479182B960FB6F894DEBF0FBECDBFD3 +:1022D000DF91CF910895CF93C82F882309F4C1C00F +:1022E000823859F40E94431081FDBBC089E30E94EB +:1022F000161B0E94E01B89E30CC0833879F40E940E +:10230000431080FDAEC083E50E94161B0E94E01BB7 +:1023100083E50E94561BCF910C94E01B843859F43E +:102320000E94431082FD9DC087E40E94161B0E94FC +:10233000E01B87E4EECF8CEF8C0F813A48F48C2FB2 +:102340000E94842281118DC08C2F0E94161BE3CF26 +:1023500080E28C0F883048F4C77081E001C0880F9C +:10236000CA95EAF70E94971BD6CF8BE58C0F833076 +:1023700078F4C53A29F0C63A31F482E890E005C015 +:1023800081E890E002C083E890E0CF910C94651062 +:1023900088E58C0F833108F064C0C83A39F1C93A36 +:1023A00041F1CA3A49F1CB3A51F1CC3A59F1CD3A1F +:1023B00061F1C03B69F1CE3A71F1CF3A79F1C13B9D +:1023C00081F1C23B89F1C33B91F1C43B99F1C53B1B +:1023D000A1F1C63BA9F1C73BB1F1C83BB9F1C93B7B +:1023E000C1F1CA3BC9F58AE292E038C082EE90E0C2 +:1023F00035C089EE90E032C08AEE90E02FC085EBC8 +:1024000090E02CC086EB90E029C087EB90E026C0DE +:102410008CEC90E023C08DEC90E020C083E891E04C +:102420001DC08AE891E01AC082E991E017C084E9F2 +:1024300091E014C081E292E011C083E292E00EC00C +:1024400084E292E00BC085E292E008C086E292E06E +:1024500005C087E292E002C080E090E0CF910C944A +:102460007B10CF910895882309F44BC0823859F42A +:102470000E94431081FF45C089E30E94161B0E9401 +:10248000E01B89E30CC0833871F40E94431080FF85 +:1024900038C083E50E94161B0E94E01B83E50E9462 +:1024A000561B0C94E01B843859F40E94431082FFA1 +:1024B00028C087E40E94161B0E94E01B87E4EFCF30 +:1024C0009CEF980F913A58F390E2980F983050F49F +:1024D000877091E001C0990F8A95EAF7892F0E94D1 +:1024E0009D1BDFCF9BE5980F933020F480E090E0B8 +:1024F0000C946510885A833120F480E090E00C94AD +:102500007B100895882321F00E94971B0C94E01BF8 +:102510000895882321F00E949D1B0C94E01B0895D0 +:10252000CF92DF92EF92FF920F931F93CF93DF939F +:10253000CDB7DEB728970FB6F894DEBF0FBECDBF7C +:102540008C0185E0F801DE01119601900D928A95CB +:10255000E1F7F80140813181F280258122952F70C9 +:1025600083819481892B31F03F3F31F481E04F3FEB +:1025700019F403C081E001C080E080FDCBC2498333 +:102580003A8389819A812F830E94D41A9E838887F7 +:102590000E94D31A0E94A6192F814E816885FF20C0 +:1025A00029F00E94B41B68854E812F81E42FE295AB +:1025B000EF70F0E0E05AFF4F0C94B624842F807F38 +:1025C000142F1F70882311F01295107FFF2059F0EF +:1025D000112309F454C2812F68870E94A71B0E940F +:1025E000E01B68854CC2862F0E943312112309F428 +:1025F00091C2812F0E94AD1B28960FB6F894DEBFC2 +:102600000FBECDBFDF91CF911F910F91FF90EF9043 +:10261000DF90CF900C94E01B342F307F842F8F708D +:10262000303211F08295807F662319F0613019F104 +:102630002BC0FF20B1F0222309F493C1213009F00F +:1026400090C128960FB6F894DEBF0FBECDBFDF91C4 +:10265000CF911F910F91FF90EF90DF90CF900C944E +:10266000C71B222319F0213009F454C28E830E9423 +:10267000CA1B8E8189C1FF2021F0223008F04AC296 +:1026800070C1211147C280C1FF2021F0222309F42B +:1026900068C1F5C1222309F477C105C2242F26950C +:1026A0002695237030E02115310521F021303105C8 +:1026B000C9F030C2FF2021F0862F942F937002C002 +:1026C00080E090E028960FB6F894DEBF0FBECDBF35 +:1026D000DF91CF911F910F91FF90EF90DF90CF90FE +:1026E0000C946510FF2021F0862F942F937002C068 +:1026F00080E090E028960FB6F894DEBF0FBECDBF05 +:10270000DF91CF911F910F91FF90EF90DF90CF90CD +:102710000C947B10862FFF2019F00E94571F02C0D7 +:102720000E94BF1F28960FB6F894DEBF0FBECDBF24 +:10273000DF91CF911F910F91FF90EF90DF90CF909D +:102740000C944420842F837009F076C0F110E2C10C +:10275000262F229526952770220F220F862F8F7005 +:10276000C82ED12CE12CF12C022E04C0CC0CDD1C87 +:10277000EE1CFF1C0A94D2F764FF10C06FE070E0FB +:1027800080E090E004C0660F771F881F991F2A958C +:10279000D2F7609570958095909503C060E070E0E9 +:1027A000CB01242F269526952370422F50E04230EE +:1027B0005105D1F04330510559F16C297D298E29FD +:1027C0009F294130510541F128960FB6F894DEBF9C +:1027D0000FBECDBFDF91CF911F910F91FF90EF9072 +:1027E000DF90CF900C94CB196C297D298E299F29DD +:1027F00028960FB6F894DEBF0FBECDBFDF91CF9104 +:102800001F910F91FF90EF90DF90CF900C94E519FE +:102810000E94CB19C701B60128960FB6F894DEBF07 +:102820000FBECDBFDF91CF911F910F91FF90EF9021 +:10283000DF90CF900C94B119FF2019F0842F817094 +:1028400001C08695882309F465C1262F2295269517 +:102850002770220F220F862F8F70C82ED12CE12CCB +:10286000F12C022E04C0CC0CDD1CEE1CFF1C0A94C3 +:10287000D2F764FF10C06FE070E080E090E004C029 +:10288000660F771F881F991F2A95D2F7609570955C +:102890008095909503C060E070E0CB01242F2695D1 +:1028A00026952370422F50E042305105D1F043303D +:1028B000510559F16C297D298E299F2941305105F7 +:1028C00041F128960FB6F894DEBF0FBECDBFDF9161 +:1028D000CF911F910F91FF90EF90DF90CF900C94CC +:1028E0009F1A6C297D298E299F2928960FB6F89466 +:1028F000DEBF0FBECDBFDF91CF911F910F91FF9033 +:10290000EF90DF90CF900C94B91A0E949F1AC701E4 +:10291000B60128960FB6F894DEBF0FBECDBFDF918B +:10292000CF911F910F91FF90EF90DF90CF900C947B +:10293000851A603FC9F118F4603E50F49BC0623FB5 +:1029400009F460C008F44AC0633F09F46FC092C044 +:10295000162F1F70842F8F71FF2099F00E941E1A6E +:10296000812F28960FB6F894DEBF0FBECDBFDF9142 +:10297000CF911F910F91FF90EF90DF90CF900C942B +:1029800082120E943F1A812F28960FB6F894DEBF5C +:102990000FBECDBFDF91CF911F910F91FF90EF90B0 +:1029A000DF90CF900C948912FF20A1F02111B2C0CA +:1029B000842F8F7128960FB6F894DEBF0FBECDBF5F +:1029C000DF91CF911F910F91FF90EF90DF90CF900B +:1029D0000C94641A223008F09DC0EACFFF20A1F0C9 +:1029E000842F8F7128960FB6F894DEBF0FBECDBF2F +:1029F000DF91CF911F910F91FF90EF90DF90CF90DB +:102A00000C941E1AFF2061F3842F8F7128960FB645 +:102A1000F894DEBF0FBECDBFDF91CF911F910F9114 +:102A2000FF90EF90DF90CF900C943F1AFF2091F031 +:102A3000842F8F7128960FB6F894DEBF0FBECDBFDE +:102A4000DF91CF911F910F91FF90EF90DF90CF908A +:102A50000C94091A28960FB6F894DEBF0FBECDBFAE +:102A6000DF91CF911F910F91FF90EF90DF90CF906A +:102A70000C94FF19FF20A1F0222309F4B1CF862F77 +:102A800028960FB6F894DEBF0FBECDBFDF91CF9171 +:102A90001F910F91FF90EF90DF90CF900C946B11EE +:102AA000222309F4B1CF862F28960FB6F894DEBF03 +:102AB0000FBECDBFDF91CF911F910F91FF90EF908F +:102AC000DF90CF900C9433124F70C8010E94A50480 +:102AD00028960FB6F894DEBF0FBECDBFDF91CF9121 +:102AE0001F910F91FF90EF90DF90CF900C942619DB +:102AF0004F70C80128960FB6F894DEBF0FBECDBF49 +:102B0000DF91CF911F910F91FF90EF90DF90CF90C9 +:102B10000C94EA0728960FB6F894DEBF0FBECDBF1F +:102B2000DF91CF911F910F91FF90EF90DF90CF90A9 +:102B300008950E94B41B0E94C41B0E94891B0E941E +:102B4000E01B0E94F0200E94442080E090E00E9460 +:102B5000651080E090E00C947B100E94A41B0C9404 +:102B600099150E94D41A292F22952F7030E02C300D +:102B700031054CF42A3031056CF4225031092230F1 +:102B8000310590F407C02C30310551F02F3031055C +:102B900039F00AC0803E10F0803F31F481E00895A2 +:102BA00093FB882780F9089580E00895CF93DF9301 +:102BB00000D000D01F92CDB7DEB70F900F900F90CE +:102BC0000F900F90DF91CF910895CF93DF9300D0B6 +:102BD00000D000D0CDB7DEB726960FB6F894DEBF92 +:102BE0000FBECDBFDF91CF9108951F93CF93DF9399 +:102BF000C091790116E080917A01C81799F0D0E070 +:102C00001C9FF0011D9FF00D1124E558FE4F4081DF +:102C1000518162817381848195810E94E51521969D +:102C2000C770E9CFDF91CF911F9108954091AB011B +:102C30005091AC016091AD017091AE018091AF01F6 +:102C40009091B0010C94E515CF938091B0018295DD +:102C50008F7009F05FC08091AD01882309F45AC0DC +:102C600020917901A0917A016091AB017091AC0142 +:102C70008091AE019091AF0131E06F3F09F030E0FB +:102C8000B32FC6E02A1709F445C0009721F07F3F13 +:102C900021F44B2F03C041E001C040E030E040FD93 +:102CA00035C0C29FF001C39FF00D1124E558FE4FBF +:102CB000418174132BC04081641328C042814111AB +:102CC00025C0438154814817590710F441505109D8 +:102CD000481B590B483C5105C8F48091B0018F70D6 +:102CE00080618093B00186E0829FF001839FF00DA8 +:102CF0001124E058FE4F80818F70806180838BEAC1 +:102D000091E00E949012CF910C94F5152F5F3F4FE8 +:102D10002770B8CFCF910895CF92DF92EF92FF92B4 +:102D20000F931F93CF93DF93CDB7DEB762970FB6A4 +:102D3000F894DEBF0FBECDBF8C0185E0F801DE0147 +:102D40001D9601900D928A95E1F7D8014C9111964C +:102D50005C91119712966C9112971396ED90FC90DE +:102D600014977091AB01E091AC012091AE013091CC +:102D7000AF012115310531F0EF3F31F481E07F3FA4 +:102D800019F403C081E001C080E0B82FB170CB2EF0 +:102D900080FD6CC1D090AD01DD2009F4F5C0F0914B +:102DA000B001E216F30638F0C701821B930B883C92 +:102DB000910548F09BC0209530952E0D3F1D283C75 +:102DC000310508F093C08F2F807F09F052C0E513C2 +:102DD00014C0741312C0D62E61110FC0FF70F061C1 +:102DE000F093B0010E9416168BEA91E00E949012B7 +:102DF0008091B001F80185836CC1EF2831F05F3F0D +:102E000031F481E04F3F19F403C081E001C080E05C +:102E100080FD03C081E0862701C080E0F82FF170BB +:102E2000FF2E80FF1CC08091790120917A0136E04D +:102E3000821709F428C190E0389FF001399FF00D06 +:102E40001124E558FE4F7181571306C07081471356 +:102E500003C07281671303C001968770E9CFD62E35 +:102E6000662309F436C18091B00181608093B0017E +:102E700053C0E51308C0741306C0611104C0D80123 +:102E80001596FC93AEC04D875E878D859E856A8BB7 +:102E90000E94B1156A89882329F1D62E662311F183 +:102EA0002091B001822F82958F7090E002970CF4F0 +:102EB00060C08091AB019091AC0198878F83198697 +:102EC000FB86EA862C87CE01079651C0E51731F1C3 +:102ED0004D875E878D859E856A8B0E94B1156A89B4 +:102EE00081112EC0C8010E949012A4C08F2F807F34 +:102EF00069F77E2DF98AE88A89890E94D6158BEABE +:102F000091E00E949012EBEAF1E086E0DF011D9271 +:102F10008A95E9F70E941616D12CDBC07413D8CF1E +:102F20006111D6CFD8011596FC93C8010E9490126A +:102F3000EBEAF1E086E0DF011D928A95E9F7C9C06E +:102F4000D62E662379F22091B001822F82958F7060 +:102F500090E0029774F08091AB019091AC019A835C +:102F600089831B82FD82EC822E83CE0101960E9412 +:102F7000901286E0F801ABEAB1E001900D928A95DB +:102F8000E1F70E9424166FC0E216F30628F0C7018D +:102F9000821B930B9C0104C0209530952E0D3F1D84 +:102FA000283C310508F052C0D62E662309F49ACF8A +:102FB000E5132CC074132AC08091B00180FD1DC0A0 +:102FC000982F92959F70C9F0D80115968C931597FC +:102FD0009F3039F09F5F9295907F8F70892B159667 +:102FE0008C93C8010E94901286E0F801ABEAB1E030 +:102FF00001900D928A95E1F736C086E0F801ABEAC0 +:10300000B1E001900D928A95E1F763C04D875E872C +:103010008D859E850E94B115882379F086E0F801A0 +:10302000ABEAB1E001900D928A95E1F70E94241677 +:103030000E941616DD24D3944CC08091B0018160AB +:103040008093B001C8010E94901243C07E2DF98A7E +:10305000E88A89890E94D615EBEAF1E086E0DF0173 +:103060001D928A95E9F70E94161633C0662309F46B +:1030700039CF4D875E878D859E850E94B115882347 +:1030800009F430CFCBCF4D875E878D859E850E941A +:10309000D41A292F22952F7030E0223031052CF4DC +:1030A0009F7041F0811106C00CC0243031052CF412 +:1030B0009F7049F4805E883020F0C8010E94901211 +:1030C000CF2CDC2C06C0D80115969C91907F91F7EF +:1030D000F8CF8D2D62960FB6F894DEBF0FBECDBF30 +:1030E000DF91CF911F910F91FF90EF90DF90CF90E4 +:1030F00008951F93CF93DF93CDB7DEB72C970FB60C +:10310000F894DEBF0FBECDBF4F83588769877A879B +:103110008B879C87CE0107960E948C168823C1F06E +:103120002F8138858A859B85892B31F03F3F11F0AF +:1031300080E003C02F3FE1F781E0811147C04F815C +:10314000588569857A858B859C850E94E5153EC0EA +:1031500086E0FE013796DE01119601900D928A9568 +:10316000E1F7FF81E8854A855B854115510531F01E +:10317000EF3F31F481E0FF3F19F403C081E001C06B +:1031800080E080FD23C020917A0130E0C9010196E2 +:10319000877099276091790170E086179707F1F1A0 +:1031A000F983EA835D834C8396E0929FD001939FDD +:1031B000B00D1124A558BE4FFE01319601900D921D +:1031C0009A95E1F780937A010E94F51516E08091B7 +:1031D000790190917A01891779F1189FC001112422 +:1031E00085589E4F0E948C16882331F1E091790119 +:1031F0001E9FF0011124E558FE4F408151816281EC +:103200007381848195810E94E5158091790190E018 +:1032100001968770992780937901D9CF0E94AD15C7 +:1032200010927A0110927901EBEAF1E086E0DF0179 +:103230001D928A95E9F7CACF2C960FB6F894DEBF97 +:103240000FBECDBFDF91CF911F910895EF92FF92F6 +:103250000F931F93CF93DF93FC01009709F46FC086 +:10326000F12CEE24E394EF0121968491843740F40D +:10327000843008F055C0813081F0823021F15FC088 +:10328000853709F447C0C0F19CE7980F903708F0E4 +:1032900056C08F770E94331245C08F010E5F1F4FBB +:1032A000FE01849190E2980F983050F48770FE2DC3 +:1032B00001C0FF0F8A95EAF78F2F0E94B71B15C038 +:1032C0000E946B1114C08F010E5F1F4FFE0184918D +:1032D00090E2980F983068F48770FE2D01C0FF0FC0 +:1032E0008A95EAF78F2F0E94BD1B0E94E01BE80120 +:1032F00019C00E943312FBCFCF010296FE01C49188 +:10330000CC2361F0EFE9FFE03197F1F700C0000056 +:10331000C150F6CFCF010296FE01F490EC0102C03D +:103320000E946B118F2D882341F0EFE9FFE0319768 +:10333000F1F700C000008150F6CFFE0194CFDF917D +:10334000CF911F910F91FF90EF9008950895609392 +:10335000B5017093B6018093B7019093B8010C94B6 +:1033600099150F931F930091B5011091B60120910B +:10337000B7013091B801062B172B282B392B00935E +:10338000B5011093B6012093B7013093B8011F9196 +:103390000F910C9499150F931F930091B501109103 +:1033A000B6012091B7013091B801062317232823D5 +:1033B00039230093B5011093B6012093B7013093E0 +:1033C000B8011F910F910C9499150F931F930091C1 +:1033D000B5011091B6012091B7013091B8010627CF +:1033E0001727282739270093B5011093B60120939A +:1033F000B7013093B8011F910F910C949915109259 +:10340000B1011092B2011092B3011092B4010C9468 +:10341000991541E050E060E070E004C0440F551F92 +:10342000661F771F8A95D2F74093B1015093B2017E +:103430006093B3017093B4010C94991541E050E08E +:1034400060E070E004C0440F551F661F771F8A9527 +:10345000D2F78091B1019091B201A091B301B091E6 +:10346000B401842B952BA62BB72B8093B10190939D +:10347000B201A093B301B093B4010C94991541E04B +:1034800050E060E070E004C0440F551F661F771FD6 +:103490008A95D2F740955095609570958091B101CD +:1034A0009091B201A091B301B091B401842395230E +:1034B000A623B7238093B1019093B201A093B301E7 +:1034C000B093B4010C94991541E050E060E070E0D5 +:1034D00004C0440F551F661F771F8A95D2F780914D +:1034E000B1019091B201A091B301B091B4018427D0 +:1034F0009527A627B7278093B1019093B201A09397 +:10350000B301B093B4010C9499150F931F930091DC +:10351000B1011091B2012091B3013091B401062B99 +:10352000172B282B392B0093B1011093B201209354 +:10353000B3013093B4011F910F910C9499150F931F +:103540001F930091B1011091B2012091B30130910C +:10355000B40106231723282339230093B1011093C4 +:10356000B2012093B3013093B4011F910F910C94D9 +:1035700099150F931F930091B1011091B201209101 +:10358000B3013091B4010627172728273927009364 +:10359000B1011093B2012093B3013093B4011F9194 +:1035A0000F910C9499150895CF92DF92EF92FF92AC +:1035B0000F931F93CF93DF93EC01C090B501D09090 +:1035C000B601E090B701F090B8018091B1019091FF +:1035D000B201A091B301B091B401C82AD92AEA2A54 +:1035E000FB2A0FE110E0B701A601002E04C076957A +:1035F0006795579547950A94D2F740FF07C0BE01DB +:10360000802F0E940D088130910539F40150110975 +:1036100050F7BE0180E00E940D08DF91CF911F910D +:103620000F91FF90EF90DF90CF90089590910C0153 +:103630009923D9F090910D019923B9F0982F96957F +:10364000969596959F3088F5E0910E01F0910F01C7 +:10365000E90FF11D877021E030E001C0220F8A954B +:10366000EAF78181822B8183089540910E01509168 +:103670000F0120E030E09FEFFA01E20FF31F6281BB +:10368000681799F09F3F19F4611101C0922F2F5FC5 +:103690003F4F2E30310581F79F3F39F0FA01E90F96 +:1036A000F11D97FDFA9582830895089590910C017C +:1036B0009923E1F090910D019923C1F0982F9695EF +:1036C000969596959F3020F5E0910E01F0910F01AF +:1036D000E90FF11D877021E030E001C0220F8A95CB +:1036E000EAF72095818128232183089540910E01D6 +:1036F00050910F0120E030E0FA01E20FF31F9281B8 +:10370000981301C012822F5F3F4F2E303105A1F771 +:10371000089581E090E0E0910E01F0910F01E80F33 +:10372000F91F1082019680319105A9F708959091B3 +:10373000CC01982B9093CC01089580959091CC0169 +:1037400098239093CC0108951092CC010895909104 +:10375000CB01982B9093CB01089580959091CB014C +:1037600098239093CB0108951092CB0108959091E6 +:10377000CA01982B9093CA01089580959091CA012F +:1037800098239093CA0108951092CA0108958093D6 +:10379000B90108951092B901089540910E01509118 +:1037A0000F0120E030E080E0FA01E20FF31F918189 +:1037B00091118F5F2F5F3F4F2F303105A9F708958B +:1037C000E0910E01F0910F018091CC018083E09196 +:1037D0000E01F0910F0180819091CB01892B8083A4 +:1037E000E0910E01F0910F0180819091CA01892B27 +:1037F00080839091B901992361F0E0910E01F091DD +:103800000F018081892B80830E94CD1B8111109232 +:10381000B90180910E0190910F010C944F10CF923D +:10382000DF92EF92FF920F931F936C01EE24FF241F +:10383000C114D104E104F10421F46B017C0180E0A6 +:1038400001C080E133272F2D1E2D0D2D01151105EF +:103850002105310519F0885F68017901970186011A +:10386000A4E03695279517950795AA95D1F70115E8 +:1038700011052105310519F08C5F68017901970167 +:103880008601F2E03695279517950795FA95D1F7B9 +:10389000011511052105310519F08E5F68017901C7 +:1038A000B701A6017695679557954795452B462B09 +:1038B000472B09F08F5F1F910F91FF90EF90DF90E2 +:1038C000CF9008958091E601843009F11092CE01E5 +:1038D00020E488E190E00FB6F894A895809360000A +:1038E0000FBE2093600083B7817F846083BF83B75E +:1038F000816083BF7894889583B78E7F83BF88E18A +:103900000FB6F89480936000109260000FBE089587 +:1039100008950895CF930E94881C0E9437060E9444 +:10392000891CC0E08C2F0E942407811105C0CF5F45 +:10393000CE30C1F780E001C081E0CF9108950E94B0 +:10394000AD150E9443100C94480982E084BD93E0B9 +:1039500095BD9AEF97BD80936E0008952FB7F894A8 +:103960008091CF019091D001A091D101B091D2016D +:103970002FBF0895CF92DF92EF92FF920F931F9384 +:103980002FB7F8944091CF015091D0016091D101AF +:103990007091D2012FBF6A017B01EE24FF248C01BC +:1039A00020E030E0C016D106E206F30610F44150E4 +:1039B0005109481B590BCA011F910F91FF90EF90BD +:1039C000DF90CF9008951F920F920FB60F9211249F +:1039D0008F939F93AF93BF938091CF019091D0012C +:1039E000A091D101B091D2010196A11DB11D80938A +:1039F000CF019093D001A093D101B093D201BF9198 +:103A0000AF919F918F910F900FBE0F901F901895BF +:103A10000E94490DF8942FEF87EA91E621508040EB +:103A20009040E1F700C0000087E090EBDC0180935C +:103A3000EF019093F001A093F101B093F2012CE01B +:103A400088E190E00FB6F894A895809360000FBECF +:103A500020936000FFCFEF92FF920F931F93CF93BD +:103A6000DF93E82EF12C8F2D0E942407C0E0D0E0D8 +:103A7000082F10E098010C2E02C0359527950A9466 +:103A8000E2F720FD05C02196C630D10599F709C09F +:103A90006C2F7F2D80E00E94EB07E812F4CF81E0CD +:103AA00005C0F3948EE0F812DECF80E0DF91CF9175 +:103AB0001F910F91FF90EF900895CF93C82F8CE244 +:103AC0000E942B1D882321F08C2FCF910C942B1D4D +:103AD00080E0CF910895CF930E94B01E811102C063 +:103AE0000E94961EC5E6C15049F00E9437068FE33A +:103AF0009CE90197F1F700C00000F5CF89E20E9430 +:103B00005D1D811111C18AE20E945D1D81110E941B +:103B1000961E85E00E945D1D81110E94081D0E9475 +:103B2000BB1E8093CD0187E00E945D1D882399F123 +:103B30008BE10E945D1D882351F09091CD0191FB96 +:103B4000882780F921E0822780FB91F922C08EE04E +:103B50000E945D1D882351F09091CD0192FB882732 +:103B600080F921E0822780FB92F913C080E10E9456 +:103B70005D1D9091CD01882341F093FB882780F94A +:103B800021E0822780FB93F904C0892F809580FB78 +:103B900090F99093CD018091CD010E94BF1E0E94AB +:103BA000CD1E8093E00180EE0E945D1D882341F0D0 +:103BB0008091E001982F909590FB80F98093E0012F +:103BC00089E30E945D1D882359F09091E00191FBEB +:103BD000882780F921E0822780FB91F99093E0010A +:103BE00082EE0E945D1D882359F09091E00192FBC6 +:103BF000882780F921E0822780FB92F99093E001E9 +:103C000086EE0E945D1D882359F09091E00193FBA0 +:103C1000882780F921E0822780FB93F99093E001C7 +:103C200083EE0E945D1D882359F09091E00194FB82 +:103C3000882780F921E0822780FB94F99093E001A6 +:103C400085E30E945D1D882359F09091E00195FB6A +:103C5000882780F921E0822780FB95F99093E00185 +:103C600081E30E945D1D882359F09091E00196FB4D +:103C7000882780F921E0822780FB96F99093E00164 +:103C800081E10E945D1D882359F09091E00197FB2E +:103C9000882780F921E0822780FB97F99093E00143 +:103CA0008091E0010E94D11E8091E00187FB88276E +:103CB00080F980930D0187E20E945D1DC82F8EE17F +:103CC0000E945D1D8111C2608FE10E945D1D811106 +:103CD000C46080E20E945D1D8111C86081E20E9483 +:103CE0005D1D8111C06182E20E945D1D8111C06273 +:103CF00083E20E945D1D8111C06484E20E945D1D0B +:103D0000882311F0C06802C0CC2329F08C2F0E94B8 +:103D1000C81E6C2F03C00E94C41E682F70E080E094 +:103D200090E0CF910C94A719CF9108956DEE7EEF9E +:103D300080E090E00E94EC2460E082E090E00E944D +:103D4000DE2460E083E090E00E94DE2460E084E016 +:103D500090E00E94DE2460E085E090E00C94DE2498 +:103D600080E090E00E94D82421E08D3E9E4F09F033 +:103D700020E0822F089582E090E00C94D024682FF8 +:103D800082E090E00C94DE2483E090E00C94D02458 +:103D9000682F83E090E00C94DE2484E090E00C94A3 +:103DA000D024682F84E090E00C94DE248091D5012B +:103DB00080FF0BC06091130185E0689FB001112462 +:103DC00075956795759567952AC081FF09C06091C3 +:103DD000130185E0689FB0011124759567951FC098 +:103DE00082FF07C06091130185E0689FB001112434 +:103DF00016C04091D6014423C9F0609112014617C4 +:103E000088F72091130185E0289F90011124429F9B +:103E1000C001439F900D112470E00E94A2246038DD +:103E2000710540F46115710539F002C065E070E07C +:103E3000862F08958FE7089581E008958091D50138 +:103E400080FF08C06091110170E0759567957595C8 +:103E5000679521C081FF06C06091110170E07595E2 +:103E6000679519C082FF04C06091110170E010C015 +:103E70008091D6018823C1F0609110018617A0F7C8 +:103E800090911101989FC001112470E00E94A2241A +:103E90006038710528F46115710521F0862F0895A9 +:103EA0008FE7089581E0089561E070E0F4CF803FEE +:103EB00021F40E94D61E819504C0813F29F40E94FE +:103EC000D61E8093D9010895823F21F40E94D61E08 +:103ED000819504C0833F29F40E94D61E8093D801A7 +:103EE0000895893F19F40E941E1F05C08A3F31F4CE +:103EF0000E941E1F81958093DA0108958B3F21F463 +:103F00000E941E1F819504C08C3F29F40E941E1F31 +:103F10008093DB010895843F21F48091D701816073 +:103F200017C0853F21F48091D701826011C0863F80 +:103F300021F48091D70184600BC0873F21F48091E8 +:103F4000D701886005C0883F31F48091D701806136 +:103F50008093D70108958D3F21F48091D501816030 +:103F60000BC08E3F21F48091D501826005C08F3F48 +:103F700029F48091D50184608093D5010895803F14 +:103F800039F48091D90187FF6CC01092D90169C0C2 +:103F9000813F29F48091D9011816BCF362C0909139 +:103FA000D801823F29F497FF5CC01092D80159C014 +:103FB000833F19F41916CCF354C0893F41F4809122 +:103FC000DA0118160CF04DC01092DA014AC08A3F8F +:103FD00029F48091DA0187FF44C0F6CF8B3F39F492 +:103FE0008091DB0187FF3DC01092DB013AC08C3F1E +:103FF00029F48091DB011816BCF333C0843F21F40F +:104000008091D7018E7F17C0853F21F48091D70121 +:104010008D7F11C0863F21F48091D7018B7F0BC02B +:10402000873F21F48091D701877F05C0883F31F415 +:104030008091D7018F7E8093D70113C08D3F21F4EB +:104040008091D5018E7F0BC08E3F21F48091D501E8 +:104050008D7F05C08F3F29F48091D5018B7F8093A0 +:10406000D5018091D80181110EC08091D9018111B3 +:104070000AC08091DA01811106C08091DB018111B3 +:1040800002C01092D601089587ED91E00E945A1067 +:104090000E94AE1C9093D4018093D30108951F9386 +:1040A000CF93DF938091D3019091D4010E94BA1CE9 +:1040B0004091D601442321F02091140130E006C044 +:1040C000209115015AE0259F900111248217930732 +:1040D00008F482C08091D8011091D901D091DA0101 +:1040E000C091DB01811107C0111105C0D11103C0BE +:1040F000CC2309F471C04F3F19F04F5F4093D601B4 +:10410000181624F40E94D61E8093D8018091D801FD +:1041100087FF05C00E94D61E81958093D801111695 +:1041200024F40E94D61E8093D9018091D90187FF83 +:1041300005C00E94D61E81958093D9016091D80157 +:10414000662339F11091D901112319F1772767FD01 +:104150007095872F972F0E94B32323E333E343E324 +:104160005FE30E9417240E9480236093D801612F8F +:10417000772767FD7095872F972F0E94B32323E33E +:1041800033E343E35FE30E9417240E94802360939C +:10419000D9011D1624F40E941E1F8093DA0180911C +:1041A000DA0187FF05C00E941E1F81958093DA0106 +:1041B0001C1624F40E941E1F8093DB018091DB01FA +:1041C00087FF05C00E941E1F81958093DB01DF9150 +:1041D000CF911F910C944420DF91CF911F910895AE +:1041E000E7EDF1E085E0DF011D928A95E9F7109295 +:1041F000D6011092D5010895833081F128F48130E1 +:1042000059F08230D1F00895853009F449C0B8F1F1 +:10421000863009F456C0089520911501862F90E04C +:10422000820F911D8F3F910520F4620F609315015D +:1042300008958FEF80931501089520911401862F22 +:1042400090E0820F911D8F3F910520F4620F6093E3 +:10425000140108958FEF80931401089520911301A4 +:10426000862F90E0820F911D8F3F910520F4620F01 +:104270006093130108958FEF8093130108952091A7 +:104280001201862F90E0820F911D8F3F910520F43F +:10429000620F6093120108958FEF809312010895C9 +:1042A00020911101862F90E0820F911D8F3F910583 +:1042B00020F4620F6093110108958FEF8093110134 +:1042C000089520911001862F90E0820F911D8F3F5D +:1042D000910520F4620F6093100108958FEF809391 +:1042E00010010895833011F128F4813049F08230B3 +:1042F00091F00895853081F120F18630C1F1089563 +:1043000080911501681720F4861B8093150108958C +:1043100010921501089580911401681720F4861BEE +:10432000809314010895109214010895809113014F +:10433000681720F4861B80931301089510921301CF +:10434000089580911201681720F4861B8093120152 +:10435000089510921201089580911101681720F4B8 +:10436000861B809311010895109211010895809188 +:104370001001681720F4861B809310010895109295 +:10438000100108958D3109F442C020F58E3009F4F2 +:1043900079C070F4873009F45EC020F4863009F4E7 +:1043A00042C033C08830D1F18B3009F4A7C02DC092 +:1043B000863109F4A3C038F4803109F46DC081312D +:1043C00009F47BC022C0893109F498C08B3109F40B +:1043D0004FC01BC0853309F479C048F4873209F413 +:1043E00075C008F478C0893209F470C00EC08334F7 +:1043F00038F48A3308F071C0883309F47FC005C0EF +:10440000833409F463C08834C1F080E008950E94C9 +:104410003A230E9443100E94480970C00E94BB1EAC +:104420000E94CD1E6BC08091CD01817F8E7F8093D5 +:10443000CD0181E08093DD0108950E94AD152FEF3D +:1044400083ED90E3215080409040E1F700C00000F0 +:104450000E94081D53C09091CD01892F817090FF5B +:1044600003C0917F9E7F26C091609093CD0146C08E +:104470009091CD0191FB882780F921E0822780FB74 +:1044800091F913C09091CD0192FB882780F921E02A +:10449000822780FB92F909C09091CD0193FB882778 +:1044A00080F921E0822780FB93F99093CD01882346 +:1044B00029F191609093CD0108950E94AD158091EE +:1044C0000D0191E0892780930D0118C061E070E033 +:1044D00080E090E00FC023EE01C027EC280F61E0E0 +:1044E00070E080E090E004C0660F771F881F991F7E +:1044F0002A95D2F70E94A7190E94AD1581E0089570 +:1045000080E0089580E00895CF93C82F8091DD0169 +:10451000813079F018F08230D1F184C0A0910E0181 +:10452000B0910F018C91813169F0823209F07CC029 +:1045300009C0A0910E01B0910F018C91813111F051 +:10454000823249F48C2F0E94802281111DC08C2F51 +:104550000E94C2211AC08C2F0E948222811114C095 +:10456000C43179F048F4CB3079F0C03109F060C043 +:1045700082E08093DD0108C0C93219F0C83321F010 +:1045800057C01092DD0154C081E0817053C0C93220 +:1045900089F118F5C43171F1A8F4C73009F046C0AB +:1045A0008AE08093150194E19093140193E0909335 +:1045B00013018093120188E08093110188E28093B7 +:1045C000100134C0CE51C63088F5EC2FF0E0E65D26 +:1045D000FE4F80818093DC0129C0CE34E9F020F4C5 +:1045E000CB3421F56AE013C0C13579F0C235F1F45E +:1045F00061E00DC08091DC01882319F01092DC018C +:1046000015C081E08093DD0115C061E006C0809196 +:10461000DC010E94FC200AC06AE08091DC010E945B +:10462000722104C01092DD0180E004C081E002C06C +:1046300080E0ABCFCF910895E1E8F0E08081886021 +:1046400080838081816080838FB7F89493E090931A +:10465000890090ED909388008FBF0895EFE6F0E019 +:104660008081826080830895EFE6F0E080818D7F15 +:1046700080830895EFE6F0E0808192E089278083CF +:1046800008951F920F920FB60F9211242F933F930C +:104690004F935F936F937F938F939F93AF93BF934A +:1046A000EF93FF938091DE019091DF01019690934B +:1046B000DF018093DE01811103C082E00E9448097E +:1046C000E091DF01E695E695F0E0E258F74FE491DE +:1046D0008091DE018E1303C080E00E944809FF91A3 +:1046E000EF91BF91AF919F918F917F916F915F916A +:1046F0004F913F912F910F900FBE0F901F901895E3 +:1047000004D06894B1118DC0089570D088F09F577F +:1047100090F0B92F9927B751A0F0D1F0660F771F0D +:10472000881F991F1AF0BA95C9F712C0B13081F0ED +:1047300077D0B1E0089574C0672F782F8827B85FCD +:1047400039F0B93FCCF3869577956795B395D9F74E +:104750003EF490958095709561957F4F8F4F9F4F58 +:104760000895E89409C097FB3EF490958095709564 +:1047700061957F4F8F4F9F4F9923A9F0F92F96E9AD +:10478000BB279395F695879577956795B795F11122 +:10479000F8CFFAF4BB0F11F460FF1BC06F5F7F4FBF +:1047A0008F4F9F4F16C0882311F096E911C07723D1 +:1047B00021F09EE8872F762F05C0662371F096E8DA +:1047C000862F70E060E02AF09A95660F771F881FA9 +:1047D000DAF7880F9695879597F9089557FD9058C1 +:1047E000440F551F59F05F3F71F04795880F97FBB5 +:1047F000991F61F09F3F79F087950895121613066F +:104800001406551FF2CF4695F1DF08C0161617069D +:104810001806991FF1CF86957105610508940895D2 +:10482000E894BB2766277727CB0197F908950BD02B +:1048300078C069D028F06ED018F0952309F05AC0DE +:104840005FC01124EECFCADFA0F3959FD1F3950F7F +:1048500050E0551F629FF001729FBB27F00DB11D04 +:10486000639FAA27F00DB11DAA1F649F6627B00D94 +:10487000A11D661F829F2227B00DA11D621F739F7D +:10488000B00DA11D621F839FA00D611D221F749F8B +:104890003327A00D611D231F849F600D211D822FD2 +:1048A000762F6A2F11249F5750408AF0E1F0882319 +:1048B0004AF0EE0FFF1FBB1F661F771F881F915026 +:1048C0005040A9F79E3F510570F014C0AACF5F3F3A +:1048D000ECF3983EDCF3869577956795B795F79559 +:1048E000E7959F5FC1F7FE2B880F911D96958795E1 +:1048F00097F9089597F99F6780E870E060E0089560 +:104900009FEF80EC089500240A94161617061806E7 +:104910000906089500240A941216130614060506C3 +:104920000895092E0394000C11F4882352F0BB0F54 +:1049300040F4BF2B11F460FF04C06F5F7F4F8F4FB7 +:104940009F4F089597FB072E16F4009407D077FD2C +:1049500009D00E94BC2407FC05D03EF490958195B7 +:104960009F4F0895709561957F4F0895EE0FFF1F3B +:104970000590F491E02D0994AA1BBB1B51E107C0DF +:10498000AA1FBB1FA617B70710F0A61BB70B881FDF +:10499000991F5A95A9F780959095BC01CD0108956E +:1049A000F999FECF92BD81BDF89A992780B50895F7 +:1049B000A8E1B0E042E050E00C94F324262FF999EE +:1049C000FECF1FBA92BD81BD20BD0FB6F894FA9AF2 +:1049D000F99A0FBE019608950E94DE24272F0C94A9 +:1049E000DF24DC01CB01FC01F999FECF06C0F2BD4A +:1049F000E1BDF89A319600B40D9241505040B8F79D +:064A00000895F894FFCFB9 +:104A060020024A09D709B40980094D090101BA01F2 +:104A160028080A03140A3F4D36393F08F207BC0737 +:104A2600830716072F0748076107010203040506D7 +:044A36000708090064 :00000001FF diff --git a/keyboard/ergodox_ez/keymaps/ordinary/readme.md b/keyboard/ergodox_ez/keymaps/ordinary/readme.md index f100dd1c..842dc7ee 100644 --- a/keyboard/ergodox_ez/keymaps/ordinary/readme.md +++ b/keyboard/ergodox_ez/keymaps/ordinary/readme.md @@ -18,7 +18,7 @@ no rights reserved, use for any purposes, credit me if you are a nice person ![Ordinary base layout](ordinary-base.png) -This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. +This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence. @@ -45,7 +45,7 @@ The symbol keys are mostly the same as on the default layout, which did a good j The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons. -Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with most keys mirrored, but the Delete keys shifted to maintain the directional significance of their arrangement. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the yellow keys, and Enter is right where it should be. +Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be. ## The Media Layer ## @@ -55,6 +55,7 @@ Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these * The bright green keys are more F-keys * The dark yellow keys signal Web and Audio applications * The light yellow keys signal the operating system +* The uncolored keys do nothing in case you bump them by accident ![Ordinary media layout](ordinary-media.png) @@ -62,14 +63,18 @@ This layer was inspired by the Media layer on the Ergodox EZ but takes it farthe Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. +Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much. + ## Switching Between Layers ## -The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; either way works. To revert to the base layer, use the Shift Lock key again in combination with the Shift key. +The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; it works either way. To revert to the base layer, use the Shift Lock key again in combination with the Shift key. -This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol associated with the Shift Lock button). +This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol character associated with the Shift Lock button). -## Special Escape Sequence ## +## Special Escape & Backspace Sequences ## -In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one, in the top left corner, was assigned to the tilde button which is traditionally found in that location. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner! +In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one, in the top left corner, is home to the tilde (er, grave) which is commonly found there. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner! That tilde key has a second function as the Shift Lock key and that makes possible a special feature. To make this layout as Ordinary as possible, the Escape key can *also* be accessed by pressing Shift Lock then the 1 button right next to it. This easy gesture is a way to partially maintain the ease of flicking your wrist to the left and tapping Escape. This gesture works in all layers. + +Finally, because the special Escape sequence is so natural and useful, on the top right corner of the Ergodox EZ you can do the same gesture with the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. These special sequences should feel unremarkably mundane but might prove to be remarkably useful. diff --git a/keyboard/ergodox_ez/keymaps/osx_de/keymap.c b/keyboard/ergodox_ez/keymaps/osx_de/keymap.c index dffcb21d..174f26cb 100644 --- a/keyboard/ergodox_ez/keymaps/osx_de/keymap.c +++ b/keyboard/ergodox_ez/keymaps/osx_de/keymap.c @@ -1,413 +1,329 @@ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" +#include "keymap_extras/keymap_french.h" +#include "keymap_extras/keymap_neo2.h" +#include "keymap_extras/keymap_uk.h" +#include "keymap_extras/keymap_colemak.h" +#include "keymap_extras/keymap_french_osx.h" +#include "keymap_extras/keymap_nordic.h" +#include "keymap_extras/keymap_dvorak.h" +#include "keymap_extras/keymap_german.h" +#include "keymap_extras/keymap_norwegian.c" +#include "keymap_extras/keymap_fr_ch.h" #include "keymap_extras/keymap_german_osx.h" +#include "keymap_extras/keymap_spanish.h" +#include "keymap_extras/keymap_bepo.h" -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys -#define SMLY 3 // media keys -#define NUMB 4 // number keys -#define EGOS 5 // Egoshooter layer - -#define M_CTRL_CMDV 1 -#define M_CTRL_CMDC 2 -#define M_MEH_SH_ACUT 3 -#define M_DE_OSX_PLUS_CTRLALT 12 -#define M_DE_OSX_CIRC_CTRLCMD 13 -#define M_TOGGLE_5 14 -#define M_CTL_SFT_HASH 15 -#define M_LGUI_SHFT 16 - -#define SM_SMILE 4 -#define SM_SMIRK 5 -#define SM_FROWN 6 -#define SM_CRY 7 -#define SM_KISS 8 -#define SM_HEART 9 -#define SM_LAUGH 10 -#define SM_SAD 11 +#define BASE 0 +#define SYMB 1 +#define MDIA 2 +#define SMLY 3 +#define NUMB 4 +#define EGOS 5 +#define M_CTRL_CMDV 0 +#define M_CTRL_CMDC 1 +#define M_MEH_SH_ACUT 2 +#define M_LGUI_SHFT 3 +#define M_CTL_SFT_HASH 4 +#define M_DE_OSX_CIRC_CTRLCMD 5 +#define M_DE_OSX_PLUS_CTRLALT 6 +#define SM_SMILE 7 +#define SM_SMIRK 8 +#define SM_CRY 9 +#define SM_SAD 10 +#define SM_HEART 11 +#define SM_LAUGH 12 +#define SM_KISS 13 +#define SM_FROWN 14 +#define M_TOGGLE_5 15 +//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer - * - * ,-----------------------------------------------------. ,--------------------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 |CTL_SFT/#| |CTL_SFT/#| 6 | 7 | 8 | 9 | 0 | ß | - * |--------+------+------+------+------+----------------| |---------+------+------+------+------+------+--------| - * | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | LALT | A | S | D | F | G |---------| |---------| H | J | K | L | ö | ä/RALT| - * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------| - * | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift | - * `--------+------+------+------+------+----------------' `-------------+------+------+------+------+--------' - * | | ! | ? | | | | | \ | [ | ] | < | > | ! | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | # | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | ^ | % | | | ~ | | | | | | ~ | ^ | UP | | $ | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | ' | LEFT| DOWN | RIGHT | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | F13 | F12 | - * ,------|------|------| |------+------+------. - * | | | | | F14 | | | - * | | |------| |------| | | - * | | | | | F15 | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,DE_OSX_LESS,DE_OSX_MORE,DE_OSX_EXLM,DE_OSX_QST, KC_TRNS,KC_TRNS, - KC_TRNS,DE_OSX_HASH,DE_OSX_DLR, DE_OSX_BSLS,DE_OSX_SLSH,KC_DOT, - KC_TRNS,KC_TRNS,DE_OSX_LESS,DE_OSX_PERC,DE_OSX_PIPE,DE_OSX_TILD,KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS, - KC_TRNS, - KC_TRNS,KC_DEL,KC_TRNS, - // right hand - M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, - DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH, - KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4), - DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, - KC_F13, KC_F12, - KC_F14, - KC_F15, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | Mute | | | | | | EGOS | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | Lclk | MsUp | Rclk | WlUp | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| WlDw |------| |------|VolUp | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | MClk | | | |VolDn | | Prev | Next | Up | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | Left | Down | Right | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -[MDIA] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, - KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - // right hand - KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, - KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_WBAK -), -/* Keymap 3: Smiley layer - * making it easier to type smileys... tipp: on osx you can easily replace those smileys with the UTF-8 character using - * keyboard short commands... - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | :-) | ;-) | :-D | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | :-{ | :-( | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| <3 | :-* | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | r| - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+--------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `----------------------' - */ -[SMLY] = KEYMAP( - 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, 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, - // right hand - M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, - M(SM_HEART), M(SM_KISS), 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 -), -//number pad -[NUMB] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, - // right hand - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, - KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS, - KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, - KC_0,KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), - -/* Keymap 3: Egoshooter layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | L5 | | | | | | | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | SHIFT | | | | | |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | CTRL | | | | | | | | | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | F1 | F2 | | | | - * ,------|------|------| |------+--------+------. - * | | | F3 | | | | | - * | SPACE| CTRL|------| |------| | | - * | | | F4 | | | | | - * `--------------------' `----------------------' - */ -[EGOS] = KEYMAP( - 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_LSFT, 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_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_F1, KC_F2, - KC_F3, - KC_SPC, KC_LCTL, KC_F4, - // right hand - M(M_TOGGLE_5), 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, 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 -), +[BASE]=KEYMAP( +//left half + KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH), + KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, + KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, + KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, + LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN, + M(M_MEH_SH_ACUT), TG(MDIA), + KC_HOME, + KC_BSPC, KC_DEL, LT(SMLY,KC_END), + //right half + M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, + KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, + DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), + KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, + KC_LEFT, KC_RIGHT, LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), + TG(NUMB), ALL_T(DE_OSX_ACUT), + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC), +[SYMB]=KEYMAP( +//left half + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, + KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, + KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_DEL, KC_TRNS, + //right half + M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, + DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH, + KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4), + DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, + KC_F13, KC_F12, + KC_F14, + KC_F15, KC_TRNS, KC_TRNS), +[MDIA]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, + KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + //right half + KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK), +[SMLY]=KEYMAP( +//left half + 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, 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, + //right half + M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, + M(SM_HEART), M(SM_KISS), 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), +[NUMB]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, + //right half + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS, + KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, + KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +[EGOS]=KEYMAP( +//left half + 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_LSFT, 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_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_F1, KC_F2, + KC_F3, + KC_SPC, KC_LCTL, KC_F4, + //right half + M(M_TOGGLE_5), 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, 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_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols) - [2] = ACTION_LAYER_TAP_TOGGLE(SMLY) // FN2 - Momentary Layer 2 (Smiley) + }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - static uint16_t start; - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - case 1: - if (record->event.pressed) { - start = timer_read(); - return MACRO(D(LCTRL), END); - } else { - if (timer_elapsed(start) > 150) { - return MACRO(U(LCTRL), END); - } else { - return MACRO(U(LCTRL), D(LGUI), T(V), U(LGUI), END); - } - } - break; - case 2: - if (record->event.pressed) { +static uint16_t start; +switch(id) { +case M_TOGGLE_5: +//Macro: M_TOGGLE_5//----------------------- + if (record->event.pressed){ + layer_state ^= (1<<5); + layer_state &= (1<<5); + } + +break; +case M_CTRL_CMDC: +//Macro: M_CTRL_CMDC//----------------------- +if (record->event.pressed) { start = timer_read(); return MACRO(D(LCTRL),END); } else { - if (timer_elapsed(start) > 150){ + if (timer_elapsed(start) >150) { return MACRO(U(LCTRL),END); } else { return MACRO(U(LCTRL),D(LGUI),T(C),U(LGUI),END); } } - break; - case 3: - if (record->event.pressed) { + +break; +case M_DE_OSX_PLUS_CTRLALT: +//Macro: M_DE_OSX_PLUS_CTRLALT//----------------------- +if (record->event.pressed) { start = timer_read(); - return MACRO(D(LCTRL),D(LSFT),D(LALT),END); + return MACRO(D(LCTRL),D(LALT),END); } else { - if (timer_elapsed(start) > 150){ - return MACRO(U(LCTRL),U(LSFT),U(LALT),END); + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LALT),END); } else { - return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_OSX_ACUT here, as macro needs KC_ prefix + return MACRO(U(LCTRL),U(LALT),T(RBRC),END); } } - break; - case M_LGUI_SHFT: - if (record->event.pressed){ + +break; +case SM_KISS: +//Macro: SM_KISS//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END); + } + +break; +case SM_FROWN: +//Macro: SM_FROWN//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END); + } + +break; +case SM_CRY: +//Macro: SM_CRY//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); + } + +break; +case SM_SMILE: +//Macro: SM_SMILE//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); + } + +break; +case SM_SMIRK: +//Macro: SM_SMIRK//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); + } + +break; +case M_LGUI_SHFT: +//Macro: M_LGUI_SHFT//----------------------- +if (record->event.pressed){ return MACRO(D(LGUI),D(LSFT),END); }else{ return MACRO(U(LGUI),U(LSFT),END); } - break; - case M_CTL_SFT_HASH: - if (record->event.pressed) { - start=timer_read(); - return MACRO(D(LCTRL),D(LSFT),END); + +break; +case SM_HEART: +//Macro: SM_HEART//----------------------- +if (record->event.pressed) { + return MACRO(T(GRV),T(3),END); + } + +break; +case SM_LAUGH: +//Macro: SM_LAUGH//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END); + } + +break; +case M_CTL_SFT_HASH: +//Macro: M_CTL_SFT_HASH//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL),D(LSFT),END); } else { - if (timer_elapsed(start) > 150){ + if (timer_elapsed(start) >150) { return MACRO(U(LCTRL),U(LSFT),END); } else { return MACRO(U(LCTRL),U(LSFT),T(BSLS),END); } } - break; - case M_DE_OSX_CIRC_CTRLCMD: - if (record->event.pressed) { + +break; +case SM_SAD: +//Macro: SM_SAD//----------------------- +if (record->event.pressed) { + return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); + } + +break; +case M_DE_OSX_CIRC_CTRLCMD: +//Macro: M_DE_OSX_CIRC_CTRLCMD//----------------------- +if (record->event.pressed) { start = timer_read(); return MACRO(D(LCTRL),D(LGUI),END); } else { - if (timer_elapsed(start) > 150){ + if (timer_elapsed(start) >150) { return MACRO(U(LCTRL),U(LGUI),END); } else { - return MACRO(U(LCTRL),U(LGUI),T(NUBS),END); + return MACRO(U(LCTRL),U(LGUI),T(NUBS),END); } } - break; - case M_DE_OSX_PLUS_CTRLALT: - if (record->event.pressed) { + +break; +case M_CTRL_CMDV: +//Macro: M_CTRL_CMDV//----------------------- +if (record->event.pressed) { start = timer_read(); - return MACRO(D(LCTRL),D(LALT),END); + return MACRO(D(LCTRL),END); } else { - if (timer_elapsed(start) > 150){ - return MACRO(U(LCTRL),U(LALT),END); + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),END); } else { - return MACRO(U(LCTRL),U(LALT),T(RBRC),END); + return MACRO(U(LCTRL),D(LGUI),T(V),U(LGUI),END); } } - break; - case SM_SMILE: - if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); - } - break; - case SM_SMIRK: - if (record->event.pressed) { - return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END); - } - break; - case SM_CRY: - if (record->event.pressed) { - return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); - } - break; - - case SM_SAD: - if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END); - } - break; - - case SM_HEART: - if (record->event.pressed) { - return MACRO(T(GRV),T(3),END); - } - break; - case SM_LAUGH: - if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END); - } - break; - case SM_KISS: - if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END); - } - break; - case SM_FROWN: - if (record->event.pressed) { - return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END); +break; +case M_MEH_SH_ACUT: +//Macro: M_MEH_SH_ACUT//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(D(LCTRL),D(LSFT),D(LALT),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LSFT),U(LALT),END); + } else { + return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); + } } - break; - case M_TOGGLE_5: - if (record->event.pressed){ - layer_state ^= (1<<5); - layer_state &= (1<<5); - } - break; - } - return MACRO_NONE; + +break; +} +return MACRO_NONE; }; // Runs just one time when the keyboard initializes. @@ -418,36 +334,43 @@ void matrix_init_user(void) { // Runs constantly in the background, in a loop. void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); +uint8_t layer = biton32(layer_state); - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - case 3: - ergodox_right_led_3_on(); - break; - case 4: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - //ergodox_board_led_on(); - break; - case 5: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); - break; - default: - // none - break; - } +ergodox_board_led_off(); +ergodox_right_led_1_off(); +ergodox_right_led_2_off(); +ergodox_right_led_3_off(); +switch (layer) { + + case SYMB: + ergodox_right_led_1_on(); + + + break; + case MDIA: + + ergodox_right_led_2_on(); + + break; + case SMLY: + + + ergodox_right_led_3_on(); + break; + case NUMB: + ergodox_right_led_1_on(); + + ergodox_right_led_3_on(); + break; + case EGOS: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; +default: +// none +break; +} }; + diff --git a/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex b/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex index c7cb8d86..e6ce5da9 100644 --- a/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex +++ b/keyboard/ergodox_ez/keymaps/osx_de/osx_de.hex @@ -1,1197 +1,1235 @@ -:100000000C94F0030C9434040C9434040C943404D5 -:100010000C9434040C9434040C9434040C94340480 -:100020000C9434040C9434040C94210E0C94F30EB0 -:100030000C9434040C9434040C9434040C94340460 -:100040000C9434040C9478230C9434040C943404ED -:100050000C9434040C94091D0C9434040C94340452 -:100060000C9434040C9434040C9434040C94340430 -:100070000C9434040C9434040C9434040C94340420 -:100080000C9434040C9434040C9434040C94340410 -:100090000C9434040C9434040C9434040C94340400 -:1000A0000C9434040C9434040C94340444044E042E -:1000B00066047E04C604CC04ED04D204E804DE0425 -:1000C000E304D804AE049604F204600F820F7010AB -:1000D000820F7010C70FEA0F70103F1052103413C8 -:1000E000341363136313A613E413FD15FD15FD13F9 -:1000F000FD15FE14FE14D115FD15FD15E81501E1E1 -:100100000137023702E10138023801E201250225F8 -:1001100002E20001E10137023702E1013802380151 -:10012000E10130023002E10001E10137023702E172 -:100130000138023801E10107020702E1000135023E -:1001400035012002200001E10137023702E10138C8 -:10015000023801E10125022502E10001E101360238 -:100160003602E10138023801E10125022502E100F1 -:1001700001E10136023602E10138023801E10126CF -:10018000022602E10001E10137023702E1013802F3 -:100190003801E10126022602E10002E002E201301C -:1001A00002300002E002E20001E001E20002E002AF -:1001B000E3016402640002E002E30001E001E30005 -:1001C00002E002E2012E022E02E10002E002E10260 -:1001D000E20001E001E101E20002E001E3010602C8 -:1001E0000602E30002E00001E00002E001E3011981 -:1001F000021902E30002E00001E0000000F0A1F0BB -:10020000A329002B00E200E100358100001E00144C -:100210000004001D710D304D831F001A0016001BD5 -:10022000000C304C00200008000700060052002A95 -:1002300000210015000900190051004A0022001792 -:10024000000A00050000000330E101E3000000E2C5 -:1002500000000002543100E7000000E60000000446 -:100260005423001C000B00110000002E7F240018F6 -:10027000000D00100050004B0025000C000E003651 -:10028000004F002C00260012000F003700E1082864 -:10029000002700130033003871E1044E002D002FB9 -:1002A000003474E50030810000010001000100010C -:1002B00000010000003A003500310001000100019A -:1002C000003B0035022102350001004C003C001EBD -:1002D0000224062202010001003D002D0224022416 -:1002E00004010001003E000100370011040000017C -:1002F000000100010000000100000001000E3001BB -:100300000000000100000068003F002406240224D1 -:100310000400004500400022042502110431026956 -:100320000041002304260264005000010042003511 -:100330000025045200510001004300350226043814 -:10034000004F006A0044001E02310021020100003B -:100350000001000100010001000100000001000196 -:100360000001000100010001000100F400F200FBA7 -:1003700000010001000100F000F100FA000100019D -:10038000000100F500F300FC00010001000100F98C -:1003900000FA00F600000001000100010000000169 -:1003A0000000000100A800010000000100000001A1 -:1003B0000001000100A900AA0000000100010001E5 -:1003C000000100010001000100010001000100AC7A -:1003D000000100B600010001000100AB0050000167 -:1003E00000010001000100520051000100AE0001B7 -:1003F00000010001004F00000001000100010001A8 -:1004000000010000000100010001000100010001E5 -:1004100000010001000100010001000100010001D4 -:1004200000010001000100010001000100010001C4 -:1004300000010001000100010001000100000001B5 -:100440000001000100000001000000010004300173 -:1004500000000001000000010005300630093001F5 -:1004600000000001000A300B3008300100010001DB -:10047000000100073001000100010001000100013E -:100480000001000100010001000100010001000164 -:100490000001000100010001000100010001000055 -:1004A0000001000100010001000100000001000145 -:1004B00000010001000100010001000100500001E5 -:1004C0000001000100010052005100010001000183 -:1004D00000010001004F00010001000100010001C6 -:1004E0000001000100000001000100010000000106 -:1004F00000000001000100010000000100000001F7 -:10050000003F00520051002302000001004000247F -:100510000021001E00270001004100250022001FCD -:1005200000370001004200260023002000360001B1 -:10053000004300300230002402270201004400453D -:1005400000380001000100000001000100E100018D -:1005500000E0000000010001000100010001003D79 -:100560000001000100010001000100E000010001A4 -:10057000000100010001002C000100010001000148 -:100580000001003C00010001000100010000003AF0 -:1005900000010001000000010000003B000E3001DE -:1005A0000000000100000001000100010001000145 -:1005B0000000000100010001000100010001000134 -:1005C0000001000100010001000100010001000123 -:1005D0000001000100010001000100010001000113 -:1005E0000001000100010001000100010001000004 -:1005F0000016034500720067006F0044006F00782A -:1006000000200045005A00000016034500720067F4 -:10061000006F0044006F007800200045005A000081 -:10062000000403090409026D00040100A0FA090492 -:1006300000000103010100092111010001223F0016 -:100640000705810308000A090401000103010200F3 -:10065000092111010001224D000705820308000A4B -:100660000904020001030000000921110100012218 -:1006700036000705830308000A090403000103008C -:10068000000009211101000122390007058403102F -:1006900000011201100100000008EDFE0713010027 -:1006A0000102000105010906A101050719E029E77A -:1006B0001500250195087501810205081901290514 -:1006C00095057501910295017503910105071900C2 -:1006D000297715002501957875018102C00501096A -:1006E00080A101850216010026B7001A01002AB771 -:1006F00000751095018100C0050C0901A101850359 -:10070000160100269C021A01002A9C027510950110 -:100710008100C005010902A1010901A10005091913 -:1007200001290515002501950575018102950175C1 -:100730000381010501093009311581257F95027575 -:1007400008810609381581257F9501750881060500 -:100750000C0A38021581257F950175088106C0C0F5 -:1007600005010906A101050719E029E71500250182 -:100770009508750181029501750881010508190127 -:1007800029059505750191029501750391010507EC -:10079000190029FF150025FF950675088100C00086 -:1007A00000000000000000000000010204060A0F23 -:1007B00017202C3A4A5D71879DB3C7DAE9F5FCFF33 -:1007C000FCF5E9DAC7B39D87715D4A3A2C20170F13 -:1007D0000A06040201000000000000000000000002 -:1007E00011241FBECFEFDAE0DEBFCDBF04B603FE9B -:1007F00024C08091F0019091F101A091F201B0919B -:10080000F3018730904BA740B04BB9F41092F00140 -:100810001092F1011092F2011092F30114BE84B70C -:10082000877F84BF88E10FB6F894809360001092B0 -:1008300060000FBEE0E0FFE3099511E0A0E0B1E049 -:10084000E4E7FAE402C005900D92A433B107D9F7AA -:1008500011E0A4E3B1E001C01D92A03FB107E1F7B0 -:100860000E94650B0C9438250C940000462F50E034 -:100870004F30510508F0DEC0DC01FA01EA5AFF4FA3 -:1008800012968C910C94ED24882321F085EE0E9421 -:10089000D111D0C085EE0E949912CCC0882349F0B6 -:1008A0000E94D31C909335018093340188EF91E02E -:1008B000089580913401909135010E94DF1C8739A1 -:1008C00091050CF0A8C08AEE91E00895882349F0C4 -:1008D0000E94D31C909335018093340187EE91E000 -:1008E000089580913401909135010E94DF1C873971 -:1008F00091050CF093C089ED91E00895882349F0AB -:100900000E94D31C909335018093340182ED91E0D5 -:10091000089580913401909135010E94DF1C873940 -:1009200091050CF07EC080EC91E00895882349F099 -:100930000E94D31C90933501809334018BEB91E09E -:10094000089580913401909135010E94DF1C873910 -:1009500091050CF069C08DEA91E00895882349F073 -:100960000E94D31C909335018093340188EA91E072 -:10097000089580913401909135010E94DF1C8739E0 -:1009800091050CF054C08AE991E00895882309F498 -:1009900051C085E891E00895882309F44BC080E7B1 -:1009A00091E00895882309F445C08BE591E008950E -:1009B000882309F43FC086E491E008958823D1F1AB -:1009C0008DE391E008958823A9F188E291E00895EC -:1009D000882381F183E191E00895882359F18EEF16 -:1009E00090E00895882331F18091B3019091B40192 -:1009F000A091B501B091B60120E2822780729927BB -:100A0000AA27BB278093B3019093B401A093B501AB -:100A1000B093B6010FC085EF91E0089584EE91E0A8 -:100A200008958BEC91E0089586EB91E0089583EAB8 -:100A300091E0089580E090E0089508956091B301F9 -:100A40007091B4018091B5019091B6010E94381C5B -:100A500056985E9825982D9826982E9827982F9826 -:100A60008330C1F028F4813041F0823049F008959C -:100A7000843049F0853051F00895259A2D9A0895D3 -:100A8000269A2E9A0895259A2D9A04C0259A2D9A71 -:100A9000269A2E9A279A2F9A08950C941E055698F6 -:100AA0005E9825982D9826982E9827982F988FEF46 -:100AB00090E0909389008093880090938B008093BE -:100AC0008A0090938D0080938C00259A2D9A2FEFA9 -:100AD00080E792E0215080409040E1F700C00000A4 -:100AE000269A2E9A2FEF80E792E021508040904086 -:100AF000E1F700C00000279A2F9A2FEF80E792E0DD -:100B0000215080409040E1F700C0000025982D98CA -:100B10002FEF80E792E0215080409040E1F700C045 -:100B2000000026982E982FEF80E792E02150804019 -:100B30009040E1F700C0000027982F9856985E98E3 -:100B400025982D9826982E9827982F98089589EA09 -:100B50008093800089E08093810024982C983F98AE -:100B60008AB18F748AB96E98479A8BB1806B8BB9B2 -:100B7000769A0E944F050C941D0580E28093000137 -:100B80008091360181110EC00E940C0681E0809395 -:100B900036012FEF83ED90E3215080409040E1F744 -:100BA00000C0000080E40E941206809300018111C1 -:100BB0002EC00E943C0680930001811128C00E9433 -:100BC0003C0680930001811122C08FE30E943C0605 -:100BD0008093000181111BC00E94340680E40E94B2 -:100BE000120680930001811112C08CE00E943C0625 -:100BF0008093000181110BC00E943C06809300018C -:100C0000811105C08FE30E943C06809300010E9481 -:100C100034068091000108951092B9008AE0809313 -:100C2000B800089594EA9093BC009091BC0097FF9F -:100C3000FCCF9091B900987F983021F0903111F05D -:100C400081E008958093BB0084E88093BC0080918C -:100C5000BC0087FFFCCF8091B900887F883111F0FC -:100C6000803471F780E0089584E98093BC0080911E -:100C7000BC0084FDFCCF08958093BB0084E8809382 -:100C8000BC008091BC0087FFFCCF9091B900987F99 -:100C900081E0983209F480E0089584E88093BC00F4 -:100CA0008091BC0087FFFCCF8091BB0008958091AC -:100CB0000001811115C080E40E941206809300019A -:100CC00081110CC082E10E943C06809300018111D9 -:100CD00005C08FEF0E943C06809300010E943406FD -:100CE00084B1807F84B985B1807F85B98AB1837FE3 -:100CF0008AB98BB1837F8BB93E98469808950E943C -:100D0000BD05809300010E94570680B38C7080BBA4 -:100D100081B3836F81BBA8E3B1E0E6E4F1E08EE04C -:100D20008E0F11921D928E13FCCF0C94A705BF92CB -:100D3000CF92DF92EF92FF920F931F93CF93DF93A7 -:100D400080910001882379F0809137018F5F809333 -:100D50003701811108C00E94BD05809300018111F7 -:100D600002C00E944F0508E311E0C0E0D0E0DD249E -:100D7000D39482E0C82EEE24E394F12CC730D10541 -:100D800000F580910001811164C080E40E94120688 -:100D900080930001811112C082E10E943C06809381 -:100DA000000181110BC0C7010C2E01C0880F0A94ED -:100DB000EAF780950E943C06809300010E94340669 -:100DC00048C0CA30A1F028F4C83059F0C93061F0E9 -:100DD00005C0CC3089F070F0CD3089F0209A289889 -:100DE00010C0219A29980DC0229A2A980AC0239AE5 -:100DF0002B9807C0529A01C0539A5B9802C03E9A42 -:100E0000469890EA9A95F1F79FB1799902C082E0ED -:100E100001C080E091709D25982B7C9902C084E0F0 -:100E200001C080E0892B7D9902C038E001C030E02C -:100E3000832B7E9902C020E101C020E0822B9FB16C -:100E40009095991F9927991F9295990F907E892BBC -:100E50000FC080910001811149C080E40E941206F8 -:100E600080930001882379F1B12C0E9434068B2DE8 -:100E7000F8019081981719F08083C09201010E94B7 -:100E8000570621960F5F1F4FCE30D10509F076CF60 -:100E900080910101882361F18150809301018823B1 -:100EA00039F08FE99FE00197F1F700C0000020C002 -:100EB000A6E4B1E0E8E3F1E0CF01825F91919D9378 -:100EC0008E13FCCF15C083E10E943C068093000185 -:100ED0008111CACF81E40E94120680930001811122 -:100EE000C3CF0E944D06B82EB094BFCF80E0C0CFD4 -:100EF0000E944D0581E0DF91CF911F910F91FF90EE -:100F0000EF90DF90CF90BF900895E82FF0E0EA5B7C -:100F1000FE4F8081089508958B3B910578F4883ABF -:100F2000910540F5853A9105D0F48430910508F09B -:100F3000B1C08130910509F4ADC06BC0803E910510 -:100F400008F467C0883E910508F4A4C09C01205FA6 -:100F500031092031310508F05CC090650895853A6B -:100F6000910509F459C0863A910509F058C082E804 -:100F700090E40895883A910509F454C0893A91059E -:100F800009F453C08A3A910509F452C08B3A91058D -:100F900009F451C08C3A910509F450C08D3A91057D -:100FA00009F44FC0803B910509F44EC08E3A91057B -:100FB00009F44DC08F3A910509F44CC0813B91056D -:100FC00009F44BC0823B910509F44AC0833B91056B -:100FD00009F449C0843B910509F448C0853B91055B -:100FE00009F447C0863B910509F446C0873B91054B -:100FF00009F445C0883B910509F444C0893B91053B -:1010000009F443C08A3B910509F442C080E094E4AE -:10101000089580E090E0089581E890E4089583E8E1 -:1010200090E4089582EE94E4089589EE94E408959E -:101030008AEE94E4089585EB94E4089586EB94E4B5 -:10104000089587EB94E408958CEC94E408958DEC76 -:1010500094E4089583E895E408958AE895E4089572 -:1010600082E995E4089584E995E4089581E296E49F -:10107000089583E296E4089584E296E4089585E273 -:1010800096E4089586E296E4089587E296E408954A -:101090008AE296E40895089596E0799FF00111247C -:1010A00094E5899FE00DF11D1124E60FF11DEE0F6F -:1010B000FF1FEF5FFD4F859194910895880F991F51 -:1010C000FC01E558FF4F859194910895880F991F71 -:1010D000FC01E550FE4F85919491089526E0729FA2 -:1010E000F001112444E5849FE00DF11D1124E60F69 -:1010F000F11DEE0FFF1FEF5FFD4F859194919C0155 -:101100003A9521154FE1340708F41AC13F512115D2 -:10111000304120F49F700E94660808959C0130536E -:101120002115304118F49927906C0895811520E518 -:10113000920769F40E941F164FEF84E39CE0415030 -:1011400080409040E1F700C000000C942E1D8130DB -:1011500020E5920731F48091CE0181608093CE0129 -:1011600008959C0130552115304108F051C0292FB8 -:1011700033272F70332721303105D9F4AC01437068 -:10118000552702C0220F331F4A95E2F73C68AC0195 -:1011900064E0440F551F6A95E1F744275370242BF0 -:1011A000352B73E0880F991F7A95E1F780769927A0 -:1011B0001DC02230310529F4982F8827816F906A4D -:1011C000089523303105A9F4AC014370552721E07F -:1011D00030E002C0220F331F4A95E2F73C6843E03B -:1011E000880F991F4A95E1F7807E9770822B932B89 -:1011F000089524303105E1F4AC014370552721E016 -:1012000030E002C0220F331F4A95E2F73A68E7CF79 -:101210009C0130572115304118F49F709062089559 -:101220009C0130582115304118F49F70906A089540 -:10123000803E9105E0F4803C910558F5813391059D -:1012400009F46FC048F48932910509F463C08A3209 -:10125000910509F46DC072C089339105E9F08238B7 -:101260009105D1F08533910509F44DC067C0833EE7 -:10127000910581F138F4803E9105B9F0823E9105E7 -:10128000D9F05CC0863E910561F1873E9105A1F1E0 -:1012900055C00E945E0808952091E10120FD02C022 -:1012A00021FF4CC080EE90E049C08091E10180FFB9 -:1012B000F9CF89E390E042C08091E10182FF0EC046 -:1012C0008091E10184FF03C080E090E037C083EEAD -:1012D00090E034C08091E10182FFF2CF82EE90E095 -:1012E0002DC08091E10183FF0BC08091E10184FD5D -:1012F000EBCF87EE90E022C08091E10183FFF5CF34 -:1013000086EE90E01BC08091E10185FF07C089E275 -:1013100090E014C08091E10185FFF9CF85E390E072 -:101320000DC08091E10186FF07C08AE290E006C00F -:101330008091E10186FFF9CF81E390E00E948C0764 -:10134000089508950C94A109809164010895CF93A4 -:10135000DF9300D01F92CDB7DEB79C018091E701EB -:10136000843019F593E099833B832A839093E900B5 -:101370008FEF9091E800815095FD06C095ED9A950C -:10138000F1F700008111F5CF8091E80085FF0DC0D5 -:1013900040E050E063E070E0CE0101960E94110C45 -:1013A0008091E8008E778093E8000F900F900F9067 -:1013B000DF91CF910895CF93DF9300D01F92CDB7E7 -:1013C000DEB72091E701243021F522E029839B83B9 -:1013D0008A8383E08093E9008FEF9091E800815049 -:1013E00095FD06C095ED9A95F1F700008111F5CFB6 -:1013F0008091E80085FF0DC040E050E063E070E0C0 -:10140000CE0101960E94110C8091E8008E778093A6 -:10141000E8000F900F900F90DF91CF9108952091E9 -:10142000E7012430F1F422E02093E9002FEF30911E -:10143000E800215035FD06C035ED3A95F1F7000082 -:101440002111F5CF2091E80025FF0BC040E050E0CE -:1014500065E070E00E94110C8091E8008E77809327 -:10146000E8000895CF93DF93EC019091E701943069 -:1014700009F046C080910C018823D9F080910D01BC -:101480008823B9F09093E9008FEF9091E8008150A4 -:1014900095FD06C095E19A95F1F700008111F5CF11 -:1014A0008091E80085FF2CC040E050E060E170E0F2 -:1014B00017C081E08093E9008FEF9091E8008150A0 -:1014C00095FD06C095ED9A95F1F700008111F5CFD5 -:1014D0008091E80085FF14C040E050E068E070E0D3 -:1014E000CE010E94110C8091E8008E778093E80075 -:1014F00080E1FE01A4E5B1E001900D928A95E1F74B -:10150000DF91CF9108958091E601811109C00E9479 -:10151000A60D0E94030E8091E20084608093E20099 -:1015200008951092E601089508950C9465230E9491 -:10153000C41C0E946B230E94A9100C94A20942E0D3 -:1015400061EC81E00E94200D42E061EC82E00E94AB -:10155000200D42E061EC83E00E94200D42E161EC4D -:1015600084E00C94200D8091E901833009F455C08A -:1015700030F4813071F0823009F48EC008958A30E1 -:1015800009F47AC08B3009F460C0893009F09CC03E -:1015900020C08091E801813A09F096C08091E8006E -:1015A000877F8093E8008091EC019091ED01892B79 -:1015B00021F460E184E591E003C060E080E090E028 -:1015C00070E00E945C0C8091E8008B778093E800CB -:1015D00008958091E801813209F076C08091EC0194 -:1015E0009091ED01009719F0039709F06DC080917B -:1015F000E800877F8093E8008091E80082FD05C0C5 -:101600008091E7018111F8CF5FC08091F100809354 -:1016100064018091E8008B7753C08091E801813AA2 -:1016200009F052C08091EC019091ED01892B09F0F5 -:101630004BC08091E800877F8093E8008091E800AC -:1016400080FFFCCF80910C0136C08091E80181328F -:10165000D9F58091EC019091ED01892BA9F580914C -:10166000E800877F8093E8000E94550D8091EA0191 -:1016700080930C010C941F168091E801813221F5B2 -:101680008091E800877F8093E8000E94550D80914B -:10169000EB018093650108958091E801813AA1F4FE -:1016A0008091E800877F8093E8008091E80080FFC8 -:1016B000FCCF809165018093F1008091E8008E77E6 -:1016C0008093E8000C94550D089584B7877F84BFFC -:1016D00088E10FB6F89480936000109260000FBE0E -:1016E00090E080E80FB6F8948093610090936100D9 -:1016F0000FBE0E94F8100E94A60D0E94030E80915A -:10170000E20084608093E20078940E9489100E9435 -:10171000FA1082E091E00E94A4100E94532380916D -:10172000E701853069F40E94881C8091E5018823D7 -:10173000B1F30E94B01C882391F30E94FB0BEFCF02 -:101740000E940011ECCF292F332723303105C9F037 -:1017500064F42130310581F02230310509F043C0B5 -:101760008DE690E025E236E042C021323105F1F00D -:101770002232310541F137C082E190E022E936E0C2 -:1017800036C099278130910541F08230910541F0B2 -:10179000892B49F5E1E2F6E005C0E9E0F6E002C098 -:1017A000E1EFF5E0849190E09F0121C06430D8F42E -:1017B000E62FF0E0EE0FFF1FEE5DFE4F208131813E -:1017C00089E090E014C0643070F470E0FB01EE0F2B -:1017D000FF1FE65EFE4F20813181FB01EA5EFE4F76 -:1017E000808190E004C080E090E020E030E0FA01E9 -:1017F00031832083089580E189BD82E189BD09B4E8 -:1018000000FEFDCF8091D8008F7D8093D80080911D -:10181000E00082608093E0008091E00081FDFCCFD9 -:101820000895CF92DF92EF92FF920F931F93CF9381 -:10183000DF93EC018B016A010E94740D811133C0AA -:10184000C114D10439F0F60180819181081B190B74 -:10185000C80FD91FE12CF12C0115110519F1809148 -:10186000E80085FD16C08091E8008E778093E8003F -:10187000C114D10449F0F60180819181E80EF91E6E -:10188000F182E08285E00FC00E94740D882321F36D -:101890000AC089918093F10001501109FFEFEF1AFE -:1018A000FF0ADACF80E0DF91CF911F910F91FF9077 -:1018B000EF90DF90CF9008952091EE013091EF01ED -:1018C0002617370748F06115710539F42091E800B3 -:1018D0002E772093E80001C0B90140E06115710541 -:1018E000A9F12091E701222309F443C0253009F42E -:1018F00042C02091E80023FD40C02091E80022FD75 -:1019000032C02091E80020FFE9CF4091F300209100 -:10191000F20030E0342BFC01CF016115710559F064 -:101920002830310540F481918093F10061507109B4 -:101930002F5F3F4FF1CF41E02830310509F040E003 -:101940002091E8002E772093E800C8CF4111C9CF3D -:101950000AC08091E701882361F0853061F08091B1 -:10196000E80083FD0AC08091E80082FFF2CF80E0AA -:10197000089582E0089583E0089581E0089520911C -:10198000EE013091EF012617370748F06115710518 -:1019900039F42091E8002E772093E80001C0B901C6 -:1019A000FC0120E06115710591F18091E701882328 -:1019B00009F440C0853009F43FC08091E80083FD00 -:1019C0003DC08091E80082FD2FC08091E80080FF3B -:1019D000E9CF2091F3008091F20090E0922B611505 -:1019E000710559F08830910540F424912093F1005D -:1019F0003196615071090196F2CF21E0089709F004 -:101A000020E08091E8008E778093E800CBCF211111 -:101A1000CCCF0AC08091E701882361F0853061F066 -:101A20008091E80083FD0AC08091E80082FFF2CF38 -:101A300080E0089582E0089583E0089581E00895AC -:101A4000982F973058F59093E900981739F07091D6 -:101A5000EC002091ED005091F00003C0242F762F70 -:101A600050E021FF19C03091EB003E7F3093EB0036 -:101A70003091ED003D7F3093ED003091EB0031600F -:101A80003093EB007093EC002093ED005093F00046 -:101A90002091EE0027FF07C09F5FD3CF8F70809308 -:101AA000E90081E0089580E008958091E80187FFD2 -:101AB00011C08091E80082FD05C08091E70181118D -:101AC000F8CF11C08091E8008B770BC08091E701BF -:101AD000882349F08091E80080FFF8CF8091E800EA -:101AE0008E778093E80008952091E4003091E5001E -:101AF00095E64091EC00842F817040FF22C08091D8 -:101B0000E80080FD1CC08091E701882391F08530BA -:101B100091F08091EB0085FD10C04091E400509160 -:101B2000E5004217530729F39A01915011F784E019 -:101B3000089582E0089583E0089581E0089580E0AB -:101B400008954091E80042FFDECF08950E94140EF0 -:101B50000E941C0EE0EEF0E0808181608083E8ED61 -:101B6000F0E080818F77808319BCA7EDB0E08C9185 -:101B70008E7F8C9380818F7E80831092E601089502 -:101B80000F931F93CF93DF930E94140E0E941C0E9D -:101B9000C8EDD0E088818F778883888180688883CA -:101BA00088818F7D888319BC1092E7011092E30130 -:101BB0001092E5011092E40100EE10E0F80180813E -:101BC0008B7F808388818160888342E060E080E051 -:101BD0000E94200DE1EEF0E080818E7F8083E2EEB6 -:101BE000F0E0808181608083808188608083F8015B -:101BF00080818E7F8083888180618883DF91CF910F -:101C00001F910F910895E8EDF0E080818F7E808331 -:101C1000E7EDF0E080818160808384E082BF81E035 -:101C20008093E6010C94C00DE8EDF0E080818E7F9A -:101C300080831092E20008951092DA001092E10081 -:101C400008951F920F920FB60F9211242F933F9376 -:101C50004F935F936F937F938F939F93AF93BF93B4 -:101C6000EF93FF938091E10082FF0BC08091E2002F -:101C700082FF07C08091E1008B7F8093E1000E948A -:101C800088108091DA0080FF1FC08091D80080FF0B -:101C90001BC08091DA008E7F8093DA008091D9009A -:101CA00080FF0DC080E189BD82E189BD09B400FEDD -:101CB000FDCF81E08093E7010E94830A05C019BC33 -:101CC0001092E7010E94910A8091E10080FF19C003 -:101CD0008091E20080FF15C08091E2008E7F8093AA -:101CE000E2008091E20080618093E2008091D80060 -:101CF00080628093D80019BC85E08093E7010E9440 -:101D0000950A8091E10084FF30C08091E20084FF59 -:101D10002CC080E189BD82E189BD09B400FEFDCF00 -:101D20008091D8008F7D8093D8008091E1008F7ED4 -:101D30008093E1008091E2008F7E8093E2008091A9 -:101D4000E20081608093E2008091E301882311F03A -:101D500084E007C08091E30087FD02C081E001C0FC -:101D600083E08093E7010E94970A8091E10083FF5E -:101D700029C08091E20083FF25C08091E100877F28 -:101D80008093E10082E08093E7011092E30180916B -:101D9000E1008E7F8093E1008091E2008E7F80934E -:101DA000E2008091E20080618093E20042E060E026 -:101DB00080E00E94200D8091F00088608093F00008 -:101DC0000E94940AFF91EF91BF91AF919F918F91E3 -:101DD0007F916F915F914F913F912F910F900FBE27 -:101DE0000F901F9018951F920F920FB60F9211240B -:101DF0002F933F934F935F936F937F938F939F9313 -:101E0000AF93BF93CF93DF93EF93FF93C091E9001C -:101E1000CF708091EC00D82FD17080FDD0E8109267 -:101E2000E9008091F000877F8093F00078940E9411 -:101E3000370F1092E9008091F00088608093F000E5 -:101E4000CD2BCF70C093E900FF91EF91DF91CF913F -:101E5000BF91AF919F918F917F916F915F914F91C2 -:101E60003F912F910F900FBE0F901F9018951F93C9 -:101E7000CF93DF93CDB7DEB7AA970FB6F894DEBF46 -:101E80000FBECDBFE8EEF1E088E08E0F9091F1003B -:101E900091938E13FBCF0E94B30A8091E80083FFD9 -:101EA0001FC18091E8019091E901492F50E04A302B -:101EB000510508F015C1FA01EB59FF4F0C94ED24C0 -:101EC000803881F0823809F00BC18091EC018F706D -:101ED0008093E9008091EB0085FB882780F91092C0 -:101EE000E90006C08091E4019091E50191118260C2 -:101EF0009091E800977F9093E8008093F100109212 -:101F0000F100C8C0282F2D7F09F0EAC0882319F0FE -:101F1000823061F0E5C08091EA01813009F0E0C0D3 -:101F2000933009F080E08093E5012BC08091EA01B5 -:101F3000811127C08091EC018F7009F4D1C080938A -:101F4000E9002091EB0020FF1CC0933021F4809128 -:101F5000EB00806214C09091EB0090619093EB00D5 -:101F600021E030E0A90102C0440F551F8A95E2F735 -:101F70004093EA001092EA008091EB008860809321 -:101F8000EB001092E9008091E800877F86C0811104 -:101F9000A7C01091EA011F778091E3008078812B20 -:101FA0008093E3008091E800877F8093E8000E949F -:101FB000550D8091E80080FFFCCF8091E3008068A0 -:101FC0008093E300111102C082E001C083E080939E -:101FD000E70186C08058823008F082C08091EA0113 -:101FE0009091EB018C3D53E0950779F583E08A836E -:101FF0008AE289834FB7F894DE01139620E03EE031 -:1020000051E2E32FF0E050935700E49120FF03C02A -:10201000E295EF703F5FEF708E2F90E0EA3010F0A6 -:10202000C79601C0C0968D939D932F5F243149F7C9 -:102030004FBF8091E800877F8093E8006AE270E0FC -:10204000CE0101960E945C0C14C0AE014F5F5F4F41 -:102050006091EC010E94A30BBC01892B09F440C0E4 -:102060009091E800977F9093E80089819A810E947F -:10207000BF0C8091E8008B778093E80031C08038F6 -:1020800079F58091E800877F8093E8008091E301F3 -:102090008093F1008091E8008E778093E8000E94A1 -:1020A000550D1EC081111CC09091EA019230C0F400 -:1020B0008091E800877F8093E8009093E3010E947D -:1020C000550D8091E301811106C08091E30087FDE9 -:1020D00002C081E001C084E08093E7010E949F0A72 -:1020E0008091E80083FF0AC08091E800877F809399 -:1020F000E8008091EB0080628093EB00AA960FB617 -:10210000F894DEBF0FBECDBFDF91CF911F91089530 -:102110000895CF938091E7018823A1F0C091E90051 -:10212000CF709091EC00892F817090FD80E8C82BD2 -:102130001092E9008091E80083FD0E94370FCF7074 -:10214000C093E900CF91089590936B0180936A0149 -:102150000895E0916A01F0916B01309721F00190B0 -:10216000F081E02D099480E00895E0916A01F091FA -:102170006B01309721F00280F381E02D09940895DE -:10218000E0916A01F0916B01309721F00480F581B4 -:10219000E02D09940895209168013091690182171A -:1021A000930771F09093690180936801E0916A014F -:1021B000F0916B01309721F00680F781E02D0994B2 -:1021C000089520916601309167018217930771F09D -:1021D0009093670180936601E0916A01F0916B0131 -:1021E000309721F00084F185E02D09940895089539 -:1021F0000C94F7100E94CA1C0E947F060C94901D3C -:10220000CF92DF92EF92FF920F931F93CF93DF93C2 -:10221000CDB7DEB72B970FB6F894DEBF0FBECDBF9C -:102220000E9497068DE6C82E81E0D82E00E010E0CF -:10223000E02E802F0E948507F60141916F01F42E58 -:10224000F826B1F40F5F1F4F0E30110589F78FEF9D -:1022500089838A831B820E94D31C8160782F9D838F -:102260008C8349815A816B818D810E94A31140C06A -:102270009091CE0191FF04C08B870E948B078B85C4 -:1022800020E030E04F2D50E0922FBA01022E02C024 -:10229000759567950A94E2F760FF24C02E83EF825C -:1022A00021E030E0690102C0CC0CDD1C9A95E2F718 -:1022B00090E08C219D21892B09F420E028870E9441 -:1022C000D31C8160782F9A8789874E815F816885CA -:1022D0008A850E94A311F801E359FE4F8081C82628 -:1022E000C08206C02F5F3F4F2630310569F6AACF66 -:1022F0000E94772010916C010E94A9101817A1F07C -:102300000E94A91080936C012B960FB6F894DEBF43 -:102310000FBECDBFDF91CF911F910F91FF90EF9036 -:10232000DF90CF900C94A2092B960FB6F894DEBFE5 -:102330000FBECDBFDF91CF911F910F91FF90EF9016 -:10234000DF90CF900895CF93DF93CDB7DEB72B9773 -:102350000FB6F894DEBF0FBECDBF4F835887698795 -:102360007A878B87DE01119686E0FD0111928A95AE -:10237000E9F785E0FE01379601900D928A95E1F725 -:1023800049815A816B817C818D819E810E94B9181F -:102390002B960FB6F894DEBF0FBECDBFDF91CF9165 -:1023A0000895CF93882309F4C2C0C82F823859F406 -:1023B0000E94A91081FDBBC089E30E94551B0E94A9 -:1023C000121C89E30CC0833879F40E94A91080FDA7 -:1023D000AEC083E50E94551B0E94121C83E50E943B -:1023E000971BCF910C94121C843859F40E94A910A9 -:1023F00082FD9DC087E40E94551B0E94121C87E449 -:10240000EECF8CEF8C0F813A48F48C2F0E94B822CB -:1024100081118DC08C2F0E94551BE3CF80E28C0F61 -:10242000883048F4C77081E001C0880FCA95EAF788 -:102430000E94DB1BD6CF8BE58C0F833078F4C53A36 -:1024400029F0C63A31F083E890E005C081E890E0D9 -:1024500002C082E890E0CF910C94CB1088E58C0FFD -:10246000833108F064C0C83A39F1C93A41F1CA3A37 -:1024700049F1CB3A51F1CC3A59F1CD3A61F1C03B37 -:1024800069F1CE3A71F1CF3A79F1C13B81F1C23BAA -:1024900089F1C33B91F1C43B99F1C53BA1F1C63B26 -:1024A000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B86 -:1024B000C9F180E090E038C082EE90E035C089EE4E -:1024C00090E032C08AEE90E02FC085EB90E02CC007 -:1024D00086EB90E029C087EB90E026C08CEC90E082 -:1024E00023C08DEC90E020C083E891E01DC08AE815 -:1024F00091E01AC082E991E017C084E991E014C02C -:1025000081E292E011C083E292E00EC084E292E0A8 -:102510000BC085E292E008C086E292E005C087E247 -:1025200092E002C08AE292E0CF910C94E110CF9148 -:102530000895882309F44BC0823859F40E94A910E9 -:1025400081FF45C089E30E94551B0E94121C89E34C -:102550000CC0833871F40E94A91080FF38C083E555 -:102560000E94551B0E94121C83E50E94971B0C942D -:10257000121C843859F40E94A91082FF28C087E4F5 -:102580000E94551B0E94121C87E4EFCF9CEF980F0E -:10259000913A58F390E2980F983050F4877091E098 -:1025A00001C0990F8A95EAF7892F0E94E11BDFCFBE -:1025B0009BE5980F933020F480E090E00C94CB10D2 -:1025C000885A833120F480E090E00C94E110089563 -:1025D000882321F00E94DB1B0C94121C0895882391 -:1025E00021F00E94E11B0C94121C0895BF92CF921F -:1025F000DF92EF92FF920F931F93CF93DF9300D060 -:1026000000D000D0CDB7DEB725E0FC01DE01119689 -:1026100001900D922A95E1F7FC0140813181028100 -:10262000258122952F7063817481672B09F4E5C29F -:102630003F3F19F44F3F09F4E0C27C0149833A83DC -:1026400089819A812E830E94141B182FB92E0E9413 -:10265000131B0E94DA19EB2DE295EF70F0E0E159BF -:10266000FF4F2E810C94ED248B2D807F9B2D9F702E -:10267000F92E882319F0F29480EFF822002349F014 -:10268000FF2009F467C28F2D0E94EB1B0E94121CD1 -:1026900061C2812F0E949912FF2009F4AEC28F2DD2 -:1026A0000E94F11B26960FB6F894DEBF0FBECDBF79 -:1026B000DF91CF911F910F91FF90EF90DF90CF901E -:1026C000BF900C94121C3B2D307F8B2D8F703032BD -:1026D00011F08295807F112319F0113021F12CC067 -:1026E0000023B9F0222309F4A0C1213009F09DC1D3 -:1026F00026960FB6F894DEBF0FBECDBFDF91CF9107 -:102700001F910F91FF90EF90DF90CF90BF900C94AE -:10271000FB1B222319F0213009F46FC28E830E9423 -:10272000FE1B8E8196C1002321F0223008F065C285 -:102730007CC1211162C28DC1002321F0222309F442 -:1027400074C108C2222309F484C119C22B2D269515 -:102750002695237030E02115310521F02130310517 -:10276000D1F04BC2002321F0812F9B2D937002C02A -:1027700080E090E026960FB6F894DEBF0FBECDBF86 -:10278000DF91CF911F910F91FF90EF90DF90CF904D -:10279000BF900C94CB10002321F0812F9B2D9370C0 -:1027A00002C080E090E026960FB6F894DEBF0FBE20 -:1027B000CDBFDF91CF911F910F91FF90EF90DF90F0 -:1027C000CF90BF900C94E110812F002319F00E944C -:1027D0007F1F02C00E94E71F26960FB6F894DEBF47 -:1027E0000FBECDBFDF91CF911F910F91FF90EF9062 -:1027F000DF90CF90BF900C946C208B2D837009F0EC -:102800007BC00111FAC1812F829586958770880F50 -:10281000880F912F9F70C92ED12CE12CF12C082EFE -:1028200004C0CC0CDD1CEE1CFF1C0A94D2F714FF74 -:1028300012C04FE050E060E070E004C0440F551F4C -:10284000661F771F8A95D2F7CB01BA016095709504 -:102850008095909503C060E070E0CB012B2D26950C -:1028600026952370422F50E042305105D9F0433075 -:10287000510569F16C297D298E299F294130510527 -:1028800051F126960FB6F894DEBF0FBECDBFDF9193 -:10289000CF911F910F91FF90EF90DF90CF90BF905D -:1028A0000C94011A6C297D298E299F2926960FB632 -:1028B000F894DEBF0FBECDBFDF91CF911F910F9176 -:1028C000FF90EF90DF90CF90BF900C941D1A0E9464 -:1028D000011AC701B60126960FB6F894DEBF0FBEE7 -:1028E000CDBFDF91CF911F910F91FF90EF90DF90BF -:1028F000CF90BF900C94E519002319F08B2D8170B7 -:1029000001C08695882309F478C1812F8295869528 -:102910008770880F880F912F9F70C92ED12CE12CC2 -:10292000F12C082E04C0CC0CDD1CEE1CFF1C0A94FC -:10293000D2F714FF12C04FE050E060E070E004C036 -:10294000440F551F661F771F8A95D2F7CB01BA0136 -:10295000609570958095909503C060E070E0CB0124 -:102960002B2D269526952370422F50E0423051059D -:10297000D9F04330510569F16C297D298E299F29B1 -:102980004130510551F126960FB6F894DEBF0FBEC7 -:10299000CDBFDF91CF911F910F91FF90EF90DF900E -:1029A000CF90BF900C94DB1A6C297D298E299F292A +:100000000C94FC030C9440040C9440040C944004A5 +:100010000C9440040C9440040C9440040C94400450 +:100020000C9440040C9440040C940E0F0C94E00FBC +:100030000C9440040C9440040C9440040C94400430 +:100040000C9440040C94AA240C9440040C94400496 +:100050000C9440040C94391E0C9440040C944004FD +:100060000C9440040C9440040C9440040C94400400 +:100070000C9440040C9440040C9440040C944004F0 +:100080000C9440040C9440040C9440040C944004E0 +:100090000C9440040C9440040C9440040C944004D0 +:1000A0000C9440040C9440040C944004FF046A0433 +:1000B0001605B804C904E7048204AC04B204A6041B +:1000C000E104BD04C3049A04A00450044D106F1051 +:1000D0005D116F105D11B410D7105D112C113F111F +:1000E0002B142B1468146814AB14E91402170217AC +:1000F0000215021703160316D61602170217ED167D +:1001000002E002E2012E022E02E10002E002E10220 +:10011000E20001E001E101E20002E001E301190275 +:100120001902E30002E00001E00002E002E30164E2 +:1001300002640002E002E30001E001E30001E101EA +:1001400037023702E10138023801E10125022502B8 +:10015000E10002E002E1013102310002E002E100CF +:1001600001E001E10001E10137023702E10138025B +:100170003801E10107020702E100013502350120E3 +:1001800002200002E302E10001E301E10001E101DC +:1001900036023602E10138023801E1012602260268 +:1001A000E10001E10137023702E10138023801E1E3 +:1001B0000126022602E10001E10136023602E101D8 +:1001C00038023801E10125022502E10001E1013791 +:1001D000023702E10138023801E20125022502E27C +:1001E0000001E10137023702E10138023801E10183 +:1001F00030023002E10002E002E20130023000028F +:10020000E002E20001E001E20002E001E301060297 +:100210000602E30002E00001E00029002B00E200FA +:10022000E100358100001E00140004001D7105303E +:100230004D831F001A0016001B0006304C002000E2 +:1002400008000700060052002A00210015000900DE +:10025000190051004A00220017000A0005000000A2 +:1002600002300430E3000000E200000002540430D9 +:10027000E7000000E6000000045423001C000B000F +:10028000110000002E7F240018000D001000500007 +:100290004B0025000C000E0036004F002C002600FD +:1002A00012000F003700E108280027001300330078 +:1002B0003871E1044E002D002F003474E5003081C8 +:1002C00000000100010001000100010000003A00EF +:1002D000350031000100010001003B003502210220 +:1002E000350001004C003C001E02240622020100E1 +:1002F00001003D002D0224022404010001003E0003 +:10030000010037001104000001000100010000009D +:100310000100000001000F3001000000010000009A +:1003200068003F0024062402240400004500400029 +:10033000220425021104310269004100230426022F +:1003400064005000010042003500250452005100B5 +:10035000010043003502260438004F006A004400C3 +:100360001E02310021020100000001000100010015 +:100370000100010000000100010001000100010076 +:1003800001000100F400F200FB0001000100010087 +:10039000F000F100FA00010001000100F500F30097 +:1003A000FC00010001000100F900FA00F600000065 +:1003B0000100010001000000010000000100A80090 +:1003C0000100000001000000010001000100A9007F +:1003D000AA0000000100010001000100010001006D +:1003E0000100010001000100AC000100B6000100A5 +:1003F00001000100AB0050000100010001000100FC +:10040000520051000100AE000100010001004F0048 +:1004100000000100010001000100010000000100D6 +:1004200001000100010001000100010001000100C4 +:1004300001000100010001000100010001000100B4 +:1004400001000100010001000100010001000100A4 +:100450000100010001000000010001000100000096 +:100460000100000001000730010000000100000051 +:10047000010008300E300B300100000001000C308C +:100480000A300D30010001000100010009300100B7 +:100490000100010001000100010001000100010054 +:1004A0000100010001000100010001000100010044 +:1004B0000100010001000100000001000100010035 +:1004C0000100010000000100010001000100010025 +:1004D00001000100010050000100010001000100C5 +:1004E00052005100010001000100010001004F0015 +:1004F00001000100010001000100010001000000F5 +:1005000001000100010000000100000001000100E5 +:10051000010000000100000001003F0052005100F6 +:100520002302000001004000240021001E002700DB +:1005300001004100250022001F0037000100420099 +:100540002600230020003600010043003002300066 +:100550002402270201004400450038000100010088 +:10056000000001000100E1000100E00000000100C6 +:1005700001000100010001003D0001000100010037 +:1005800001000100E0000100010001000100010084 +:100590002C00010001000100010001003C000100ED +:1005A00001000100010000003A000100010000000C +:1005B000010000003B000F300100000001000000BE +:1005C0000100010001000100010000000100010024 +:1005D0000100010001000100010001000100010013 +:1005E0000100010001000100010001000100010003 +:1005F00001000100010001000100010001000100F3 +:100600000100010001000100000016034500720016 +:1006100067006F0044006F007800200045005A001A +:10062000000016034500720067006F0044006F0071 +:100630007800200045005A00000004030904090264 +:100640006D00040100A0FA0904000001030101008B +:10065000092111010001223F000705810308000A5A +:100660000904010001030102000921110100012216 +:100670004D000705820308000A0904020001030077 +:10068000000009211101000122360007058303083B +:10069000000A090403000103000000092111010000 +:1006A0000122390007058403100001120110010026 +:1006B000000008EDFE071301000102000105010919 +:1006C00006A101050719E029E71500250195087520 +:1006D0000181020508190129059505750191029509 +:1006E000017503910105071900297715002501956A +:1006F0007875018102C005010980A10185021601FA +:100700000026B7001A01002AB70075109501810074 +:10071000C0050C0901A1018503160100269C021ADF +:1007200001002A9C02751095018100C00501090293 +:10073000A1010901A10005091901290515002501DB +:100740009505750181029501750381010501093047 +:1007500009311581257F95027508810609381581B3 +:10076000257F950175088106050C0A38021581253B +:100770007F950175088106C0C005010906A1010524 +:100780000719E029E71500250195087501810295F3 +:100790000175088101050819012905950575019163 +:1007A000029501750391010507190029FF15002520 +:1007B000FF950675088100C00000000000000000E1 +:1007C000000000010204060A0F17202C3A4A5D714E +:1007D000879DB3C7DAE9F5FCFFFCF5E9DAC7B39DFD +:1007E00087715D4A3A2C20170F0A060402010000A7 +:1007F000000000000000000011241FBECFEFDAE06F +:10080000DEBFCDBF04B603FE24C08091F0019091FD +:10081000F101A091F201B091F3018730904BA74014 +:10082000B04BB9F41092F0011092F1011092F20164 +:100830001092F30114BE84B7877F84BF88E10FB69E +:10084000F89480936000109260000FBEE0E0FFE338 +:10085000099511E0A0E0B1E0E8EDFCE402C00590EC +:100860000D92A433B107D9F711E0A4E3B1E001C0C0 +:100870001D92A03FB107E1F70E94520C0C946A262A +:100880000C940000462F50E04031510508F0F1C0B3 +:10089000DC01FA01EA5AFF4F12968C910C941F2644 +:1008A000882309F4E6C08091B3019091B401A0912E +:1008B000B501B091B60120E2822780729927AA275C +:1008C000BB278093B3019093B401A093B501B0937B +:1008D000B601CFC0882349F00E94031E90933501D2 +:1008E0008093340187E192E00895809134019091E2 +:1008F00035010E940F1E873991050CF0AEC089E0CA +:1009000092E00895882349F00E94031E90933501D8 +:100910008093340184E092E00895809134019091B5 +:1009200035010E940F1E873991050CF099C086EFA2 +:1009300091E00895882309F49CC081EE91E0089528 +:10094000882309F496C08CEC91E00895882309F47B +:1009500090C087EB91E00895882309F48AC082EA69 +:1009600091E00895882309F484C08DE891E008950A +:10097000811179C083E891E00895882309F479C052 +:100980008AE791E00895882309F473C085E691E031 +:100990000895882349F00E94031E909335018093A7 +:1009A000340180E691E00895809134019091350101 +:1009B0000E940F1E873991050CF058C082E591E026 +:1009C0000895882309F455C08DE391E008958823A4 +:1009D00049F00E94031E909335018093340188E30F +:1009E00091E0089580913401909135010E940F1E8D +:1009F000873991050CF040C08AE291E00895882380 +:100A000049F00E94031E909335018093340187E2E0 +:100A100091E0089580913401909135010E940F1E5C +:100A20008739910564F589E191E00895882349F0BB +:100A30000E94031E909335018093340182E191E07E +:100A4000089580913401909135010E940F1E8739DD +:100A50009105C4F480E091E0089584E192E0089566 +:100A60008FEF91E0089588E891E008958BE591E09B +:100A7000089580E090E0089583E391E0089584E292 +:100A800091E008958BE091E0089508956091B3019D +:100A90007091B4018091B5019091B6010E94651DDD +:100AA00056985E9825982D9826982E9827982F98D6 +:100AB0008330C1F028F4813041F0823049F008954C +:100AC000843049F0853051F00895259A2D9A089583 +:100AD000269A2E9A0895259A2D9A04C0259A2D9A21 +:100AE000269A2E9A279A2F9A08950C94460556987E +:100AF0005E9825982D9826982E9827982F988FEFF6 +:100B000090E0909389008093880090938B0080936D +:100B10008A0090938D0080938C00259A2D9A2FEF58 +:100B200080E792E0215080409040E1F700C0000053 +:100B3000269A2E9A2FEF80E792E021508040904035 +:100B4000E1F700C00000279A2F9A2FEF80E792E08C +:100B5000215080409040E1F700C0000025982D987A +:100B60002FEF80E792E0215080409040E1F700C0F5 +:100B7000000026982E982FEF80E792E021508040C9 +:100B80009040E1F700C0000027982F9856985E9893 +:100B900025982D9826982E9827982F98089589EAB9 +:100BA0008093800089E08093810024982C983F985E +:100BB0008AB18F748AB96E98479A8BB1806B8BB962 +:100BC000769A0E9477050C94450580E28093000197 +:100BD0008091360181110EC00E94340681E080931D +:100BE00036012FEF83ED90E3215080409040E1F7F4 +:100BF00000C0000080E40E943A0680930001811149 +:100C00002EC00E94640680930001811128C00E94BA +:100C1000640680930001811122C08FE30E94640664 +:100C20008093000181111BC00E945C0680E40E9439 +:100C30003A0680930001811112C08CE00E94640684 +:100C40008093000181110BC00E9464068093000113 +:100C5000811105C08FE30E946406809300010E9409 +:100C60005C068091000108951092B9008AE080939B +:100C7000B800089594EA9093BC009091BC0097FF4F +:100C8000FCCF9091B900987F983021F0903111F00D +:100C900081E008958093BB0084E88093BC0080913C +:100CA000BC0087FFFCCF8091B900887F883111F0AC +:100CB000803471F780E0089584E98093BC008091CE +:100CC000BC0084FDFCCF08958093BB0084E8809332 +:100CD000BC008091BC0087FFFCCF9091B900987F49 +:100CE00081E0983209F480E0089584E88093BC00A4 +:100CF0008091BC0087FFFCCF8091BB00089580915C +:100D00000001811115C080E40E943A068093000121 +:100D100081110CC082E10E94640680930001811160 +:100D200005C08FEF0E946406809300010E945C065C +:100D300084B1807F84B985B1807F85B98AB1837F92 +:100D40008AB98BB1837F8BB93E98469808950E94EB +:100D5000E505809300010E947F0680B38C7080BB04 +:100D600081B3836F81BBA8E3B1E0E6E4F1E08EE0FC +:100D70008E0F11921D928E13FCCF0C94CF05BF9253 +:100D8000CF92DF92EF92FF920F931F93CF93DF9357 +:100D900080910001882379F0809137018F5F8093E3 +:100DA0003701811108C00E94E5058093000181117F +:100DB00002C00E94770508E311E0C0E0D0E0DD2426 +:100DC000D39482E0C82EEE24E394F12CC730D105F1 +:100DD00000F580910001811164C080E40E943A0610 +:100DE00080930001811112C082E10E946406809309 +:100DF000000181110BC0C7010C2E01C0880F0A949D +:100E0000EAF780950E946406809300010E945C06C8 +:100E100048C0CA30A1F028F4C83059F0C93061F098 +:100E200005C0CC3089F070F0CD3089F0209A289838 +:100E300010C0219A29980DC0229A2A980AC0239A94 +:100E40002B9807C0529A01C0539A5B9802C03E9AF1 +:100E5000469890EA9A95F1F79FB1799902C082E09D +:100E600001C080E091709D25982B7C9902C084E0A0 +:100E700001C080E0892B7D9902C038E001C030E0DC +:100E8000832B7E9902C020E101C020E0822B9FB11C +:100E90009095991F9927991F9295990F907E892B6C +:100EA0000FC080910001811149C080E40E943A0680 +:100EB00080930001882379F1B12C0E945C068B2D70 +:100EC000F8019081981719F08083C09201010E9467 +:100ED0007F0621960F5F1F4FCE30D10509F076CFE8 +:100EE00080910101882361F1815080930101882361 +:100EF00039F08FE99FE00197F1F700C0000020C0B2 +:100F0000A6E4B1E0E8E3F1E0CF01825F91919D9327 +:100F10008E13FCCF15C083E10E946406809300010C +:100F20008111CACF81E40E943A06809300018111A9 +:100F3000C3CF0E947506B82EB094BFCF80E0C0CF5B +:100F40000E94750581E0DF91CF911F910F91FF9075 +:100F5000EF90DF90CF90BF900895E82FF0E0EA5B2C +:100F6000FE4F808108950895089596E0799FF001DD +:100F7000112494E5899FE00DF11D1124E60FF11D68 +:100F8000EE0FFF1FE65EFD4F859194910895880F47 +:100F9000991FFC01E656FF4F859194910895880FA3 +:100FA000991FFC01E65EFD4F8591949108950F9382 +:100FB0001F93CF93DF93EC018115904350F5C1153A +:100FC00080E2D80708F0B3C0CB3BD10590F4C83A13 +:100FD000D10508F05AC0C53AD10508F04BC0C4305D +:100FE000D10508F0BBC1219709F0B5C101E010E0BF +:100FF000F5C1CF3FD10511F008F0B0C1C03FD10518 +:1010000008F092C0CE01805E9109089708F4A6C14D +:10101000A2C1C11591E5D907A8F4C23020E5D207D5 +:1010200008F09EC0C11580E5D80709F485C008F016 +:1010300091C0C11520E4D20708F08DC1DD278E01D3 +:10104000106CCCC1C11580E8D80758F4C11590E7E1 +:10105000D90708F07CC1C11520E6D20708F422C1E7 +:101060007AC1C11580E9D80708F075C1DF708E011B +:10107000106AB4C1C53AD10509F472C1C63AD105A6 +:1010800009F071C102E810E4A9C1C83AD10509F418 +:101090006DC1C93AD10509F46CC1CA3AD10509F448 +:1010A0006BC1CB3AD10509F46AC1CC3AD10509F438 +:1010B00069C1CD3AD10509F468C1C03BD10509F435 +:1010C00067C1CE3AD10509F466C1CF3AD10509F41A +:1010D00065C1C13BD10509F464C1C23BD10509F426 +:1010E00063C1C33BD10509F462C1C43BD10509F416 +:1010F00061C1C53BD10509F460C1C63BD10509F406 +:101100005FC1C73BD10509F45EC1C83BD10509F4F5 +:101110005DC1C93BD10509F45CC1CA3BD10509F4E5 +:101120005BC100E014E45AC18E01106557C1CE01C5 +:101130009F700E94CF0753C10E9426179FEF24E3A0 +:101140008CE0915020408040E1F700C000000E94F8 +:101150005E1E44C18091CF0181608093CF013EC16A +:101160000E940720811102C00E94ED1F0E942420CE +:1011700090E09093F0018093EF01C23090E5D907A1 +:1011800021F48091EF01816086C0C43020E5D20750 +:1011900021F48091EF0182607EC0C63080E5D807DF +:1011A00021F48091EF01846076C0C83090E5D907C2 +:1011B00019F48091EF0127C0CA3020E5D20721F44D +:1011C0008091EF01806167C0CC3080E5D80721F4C1 +:1011D0008091EF0180625FC0CE3090E5D90721F4A5 +:1011E0008091EF01806457C0C03120E5D20721F41F +:1011F0008091EF0180684FC0C23180E5D80729F4A3 +:101200008091EF018460886046C0C33090E5D907C3 +:1012100021F48091EF018E7F3EC0C53020E5D207DA +:1012200021F48091EF018D7F36C0C73080E5D8076B +:1012300021F48091EF018B7F2EC0C93090E5D90752 +:1012400019F48091EF0126C0CB3020E5D20721F4BC +:101250008091EF018F7E1FC0CD3080E5D80721F44B +:101260008091EF018F7D17C0CF3090E5D90721F431 +:101270008091EF018F7B0FC0C13120E5D20721F4AF +:101280008091EF018F7707C0C331D04531F4809151 +:10129000EF018B7F877F8093EF018091EF010E94A8 +:1012A00028209CC08D2F99278F7099278130910518 +:1012B000D9F49E012370332702C0880F991F2A9505 +:1012C000E2F79C688E0144E0000F111F4A95E1F798 +:1012D00000271370802B912B53E0CC0FDD1F5A9504 +:1012E000E1F7C076DD272FC08230910531F4DC2F85 +:1012F000CC278E01016F106A71C08330910569F4AB +:10130000CE018370992701E010E002C0000F111F89 +:101310008A95E2F7C8019C680FC0049709F05EC087 +:10132000CE018370992701E010E002C0000F111F69 +:101330008A95E2F7C8019A6823E0CC0FDD1F2A9551 +:10134000E1F7C07ED7708C010C2B1D2B47C0DF70DE +:101350008E01106243C000E010E040C08E013EC02C +:1013600001E810E43BC003E810E438C002EE14E4E6 +:1013700035C009EE14E432C00AEE14E42FC005EBC8 +:1013800014E42CC006EB14E429C007EB14E426C0D7 +:101390000CEC14E423C00DEC14E420C003E815E4C5 +:1013A0001DC00AE815E41AC002E915E417C004E9F3 +:1013B00015E414C001E216E411C003E216E40EC005 +:1013C00004E216E40BC005E216E408C006E216E4E7 +:1013D00005C007E216E402C00AE216E4C801DF9184 +:1013E000CF911F910F91089596E0799FF0011124FC +:1013F00094E5899FE00DF11D1124E60FF11DEE0F1C +:10140000FF1FE65EFD4F85919491803E9105E0F4CB +:10141000803C910558F58133910509F46FC048F47B +:101420008932910509F463C08A32910509F46DC0CF +:1014300072C089339105E9F082389105D1F0853386 +:10144000910509F44DC067C0833E910581F138F4E0 +:10145000803E9105B9F0823E9105D9F05CC0863E90 +:10146000910561F1873E9105A1F155C00E94C70722 +:1014700008952091EF0120FD02C021FF4CC080EEB5 +:1014800090E049C08091EF0180FFF9CF89E390E0BF +:1014900042C08091EF0182FF0EC08091EF0184FF76 +:1014A00003C080E090E037C083EE90E034C08091CC +:1014B000EF0182FFF2CF82EE90E02DC08091EF012C +:1014C00083FF0BC08091EF0184FDEBCF87EE90E0AE +:1014D00022C08091EF0183FFF5CF86EE90E01BC024 +:1014E0008091EF0185FF07C089E290E014C08091F0 +:1014F000EF0185FFF9CF85E390E00DC08091EF010A +:1015000086FF07C08AE290E006C08091EF0186FF67 +:10151000F9CF81E390E00E94D707089508950C94D5 +:101520008E0A809164010895CF93DF9300D01F92BB +:10153000CDB7DEB79C018091E601843019F593E0C8 +:1015400099833B832A839093E9008FEF9091E80081 +:10155000815095FD06C095ED9A95F1F70000811137 +:10156000F5CF8091E80085FF0DC040E050E063E0DA +:1015700070E0CE0101960E94FE0C8091E8008E770B +:101580008093E8000F900F900F90DF91CF91089516 +:10159000CF93DF9300D01F92CDB7DEB72091E60145 +:1015A000243021F522E029839B838A8383E0809382 +:1015B000E9008FEF9091E800815095FD06C095ED10 +:1015C0009A95F1F700008111F5CF8091E80085FF31 +:1015D0000DC040E050E063E070E0CE0101960E9453 +:1015E000FE0C8091E8008E778093E8000F900F90BA +:1015F0000F90DF91CF9108952091E6012430F1F40E +:1016000022E02093E9002FEF3091E800215035FDD2 +:1016100006C035ED3A95F1F700002111F5CF209184 +:10162000E80025FF0BC040E050E065E070E00E945C +:10163000FE0C8091E8008E778093E8000895CF93A8 +:10164000DF93EC019091E601943009F046C080915F +:101650000C018823D9F080910D018823B9F0909373 +:10166000E9008FEF9091E800815095FD06C095E16B +:101670009A95F1F700008111F5CF8091E80085FF80 +:101680002CC040E050E060E170E017C081E0809342 +:10169000E9008FEF9091E800815095FD06C095ED2F +:1016A0009A95F1F700008111F5CF8091E80085FF50 +:1016B00014C040E050E068E070E0CE010E94FE0CF3 +:1016C0008091E8008E778093E80080E1FE01A4E538 +:1016D000B1E001900D928A95E1F7DF91CF910895E5 +:1016E0008091E501811109C00E94930E0E94F00EC5 +:1016F0008091E20084608093E20008951092E501F9 +:10170000089508950C9497240E94F41D0E949D242E +:101710000E9496110C948F0A42E061EC81E00E94D5 +:101720000D0E42E061EC82E00E940D0E42E061ECA1 +:1017300083E00E940D0E42E161EC84E00C940D0EFA +:101740008091E801833009F455C030F4813071F0A4 +:10175000823009F48EC008958A3009F47AC08B3043 +:1017600009F460C0893009F09CC020C08091E70175 +:10177000813A09F096C08091E800877F8093E80065 +:101780008091EB019091EC01892B21F460E184E5DB +:1017900091E003C060E080E090E070E00E94490DBD +:1017A0008091E8008B778093E80008958091E701AD +:1017B000813209F076C08091EB019091EC010097A5 +:1017C00019F0039709F06DC08091E800877F80933E +:1017D000E8008091E80082FD05C08091E60181115A +:1017E000F8CF5FC08091F100809364018091E800A0 +:1017F0008B7753C08091E701813A09F052C0809104 +:10180000EB019091EC01892B09F04BC08091E8002D +:10181000877F8093E8008091E80080FFFCCF809173 +:101820000C0136C08091E7018132D9F58091EB013E +:101830009091EC01892BA9F58091E800877F809336 +:10184000E8000E94420E8091E90180930C010C9403 +:1018500026178091E701813221F58091E800877F8A +:101860008093E8000E94420E8091EA018093650116 +:1018700008958091E701813AA1F48091E800877F83 +:101880008093E8008091E80080FFFCCF80916501A3 +:101890008093F1008091E8008E778093E8000C94AB +:1018A000420E089584B7877F84BF88E10FB6F8940D +:1018B00080936000109260000FBE90E080E80FB649 +:1018C000F89480936100909361000FBE0E94E5112F +:1018D0000E94930E0E94F00E8091E200846080933B +:1018E000E20078940E9476110E94E71182E091E074 +:1018F0000E9491110E9485248091E601853069F44F +:101900000E94B51D8091E4018823B1F30E94E01D7F +:10191000882391F30E94E80CEFCF0E94ED11ECCFE9 +:10192000292F332723303105C9F064F421303105E4 +:1019300081F02230310509F043C08DE690E02EE3BE +:1019400036E042C021323105F1F02232310541F159 +:1019500037C082E190E02BEA36E036C0992781302B +:10196000910541F08230910541F0892B49F5EAE378 +:10197000F6E005C0E2E2F6E002C0EAE0F6E08491BB +:1019800090E09F0121C06430D8F4E62FF0E0EE0F24 +:10199000FF1FEE5DFE4F2081318189E090E014C091 +:1019A000643070F470E0FB01EE0FFF1FE65EFE4F47 +:1019B00020813181FB01EA5EFE4F808190E004C00E +:1019C00080E090E020E030E0FA0131832083089548 +:1019D00080E189BD82E189BD09B400FEFDCF80911F +:1019E000D8008F7D8093D8008091E0008260809342 +:1019F000E0008091E00081FDFCCF0895CF92DF925E +:101A0000EF92FF920F931F93CF93DF93EC018B0123 +:101A10006A010E94610E811133C0C114D10439F0F2 +:101A2000F60180819181081B190BC80FD91FE12C89 +:101A3000F12C0115110519F18091E80085FD16C002 +:101A40008091E8008E778093E800C114D10449F0BA +:101A5000F60180819181E80EF91EF182E08285E035 +:101A60000FC00E94610E882321F30AC089918093E0 +:101A7000F10001501109FFEFEF1AFF0ADACF80E001 +:101A8000DF91CF911F910F91FF90EF90DF90CF905A +:101A900008952091ED013091EE012617370748F0A7 +:101AA0006115710539F42091E8002E772093E80044 +:101AB00001C0B90140E061157105A9F12091E6016D +:101AC000222309F443C0253009F442C02091E800E4 +:101AD00023FD40C02091E80022FD32C02091E800A3 +:101AE00020FFE9CF4091F3002091F20030E0342B49 +:101AF000FC01CF016115710559F02830310540F422 +:101B000081918093F100615071092F5F3F4FF1CFB8 +:101B100041E02830310509F040E02091E8002E77BF +:101B20002093E800C8CF4111C9CF0AC08091E601D7 +:101B3000882361F0853061F08091E80083FD0AC060 +:101B40008091E80082FFF2CF80E0089582E008955E +:101B500083E0089581E008952091ED013091EE0138 +:101B60002617370748F06115710539F42091E80010 +:101B70002E772093E80001C0B901FC0120E0611537 +:101B8000710591F18091E601882309F440C0853008 +:101B900009F43FC08091E80083FD3DC08091E800DA +:101BA00082FD2FC08091E80080FFE9CF2091F300F3 +:101BB0008091F20090E0922B6115710559F0883008 +:101BC000910540F424912093F10031966150710900 +:101BD0000196F2CF21E0089709F020E08091E8001B +:101BE0008E778093E800CBCF2111CCCF0AC08091B3 +:101BF000E601882361F0853061F08091E80083FD83 +:101C00000AC08091E80082FFF2CF80E0089582E070 +:101C1000089583E0089581E00895982F973058F54E +:101C20009093E900981739F07091EC002091ED0045 +:101C30005091F00003C0242F762F50E021FF19C0EF +:101C40003091EB003E7F3093EB003091ED003D7F13 +:101C50003093ED003091EB0031603093EB007093E6 +:101C6000EC002093ED005093F0002091EE0027FF50 +:101C700007C09F5FD3CF8F708093E90081E0089504 +:101C800080E008958091E70187FF11C08091E8000E +:101C900082FD05C08091E6018111F8CF11C08091CD +:101CA000E8008B770BC08091E601882349F0809192 +:101CB000E80080FFF8CF8091E8008E778093E800FD +:101CC00008952091E4003091E50095E64091EC0004 +:101CD000842F817040FF22C08091E80080FD1CC0ED +:101CE0008091E601882391F0853091F08091EB009E +:101CF00085FD10C04091E4005091E5004217530764 +:101D000029F39A01915011F784E0089582E0089533 +:101D100083E0089581E0089580E008954091E8000F +:101D200042FFDECF08950E94010F0E94090FE0EEEE +:101D3000F0E0808181608083E8EDF0E080818F7742 +:101D4000808319BCA7EDB0E08C918E7F8C9380814D +:101D50008F7E80831092E50108950F931F93CF9398 +:101D6000DF930E94010F0E94090FC8EDD0E0888127 +:101D70008F77888388818068888388818F7D888336 +:101D800019BC1092E6011092E2011092E401109247 +:101D9000E30100EE10E0F80180818B7F8083888171 +:101DA0008160888342E060E080E00E940D0EE1EEF9 +:101DB000F0E080818E7F8083E2EEF0E080818160C0 +:101DC0008083808188608083F80180818E7F80831A +:101DD000888180618883DF91CF911F910F91089551 +:101DE000E8EDF0E080818F7E8083E7EDF0E0808198 +:101DF0008160808384E082BF81E08093E5010C9460 +:101E0000AD0EE8EDF0E080818E7F80831092E200DD +:101E100008951092DA001092E10008951F920F9237 +:101E20000FB60F9211242F933F934F935F936F93AD +:101E30007F938F939F93AF93BF93EF93FF93809183 +:101E4000E10082FF0BC08091E20082FF07C0809119 +:101E5000E1008B7F8093E1000E9475118091DA0090 +:101E600080FF1FC08091D80080FF1BC08091DA00E6 +:101E70008E7F8093DA008091D90080FF0DC080E1D1 +:101E800089BD82E189BD09B400FEFDCF81E0809368 +:101E9000E6010E94700B05C019BC1092E6010E9479 +:101EA0007E0B8091E10080FF19C08091E20080FFED +:101EB00015C08091E2008E7F8093E2008091E20065 +:101EC00080618093E2008091D80080628093D80086 +:101ED00019BC85E08093E6010E94820B8091E100AD +:101EE00084FF30C08091E20084FF2CC080E189BD76 +:101EF00082E189BD09B400FEFDCF8091D8008F7DBD +:101F00008093D8008091E1008F7E8093E1008091E2 +:101F1000E2008F7E8093E2008091E20081608093F6 +:101F2000E2008091E201882311F084E007C08091F3 +:101F3000E30087FD02C081E001C083E08093E601F9 +:101F40000E94840B8091E10083FF29C08091E20010 +:101F500083FF25C08091E100877F8093E10082E0CC +:101F60008093E6011092E2018091E1008E7F8093E0 +:101F7000E1008091E2008E7F8093E2008091E20098 +:101F800080618093E20042E060E080E00E940D0EFC +:101F90008091F00088608093F0000E94810BFF9197 +:101FA000EF91BF91AF919F918F917F916F915F91D1 +:101FB0004F913F912F910F900FBE0F901F9018954A +:101FC0001F920F920FB60F9211242F933F934F93AE +:101FD0005F936F937F938F939F93AF93BF93CF93B1 +:101FE000DF93EF93FF93C091E900CF708091EC00F5 +:101FF000D82FD17080FDD0E81092E9008091F000D8 +:10200000877F8093F00078940E9424101092E9005A +:102010008091F00088608093F000CD2BCF70C0934A +:10202000E900FF91EF91DF91CF91BF91AF919F9127 +:102030008F917F916F915F914F913F912F910F9071 +:102040000FBE0F901F9018951F93CF93DF93CDB7BE +:10205000DEB7AA970FB6F894DEBF0FBECDBFE7EE8E +:10206000F1E088E08E0F9091F10091938E13FBCFF9 +:102070000E94A00B8091E80083FF1FC18091E701BF +:102080009091E801492F50E04A30510508F015C100 +:10209000FA01EA59FF4F0C941F26803881F08238EC +:1020A00009F00BC18091EB018F708093E900809162 +:1020B000EB0085FB882780F91092E90006C080912B +:1020C000E3019091E401911182609091E800977F83 +:1020D0009093E8008093F1001092F100C8C0282F7F +:1020E0002D7F09F0EAC0882319F0823061F0E5C045 +:1020F0008091E901813009F0E0C0933009F080E07F +:102100008093E4012BC08091E901811127C0809167 +:10211000EB018F7009F4D1C08093E9002091EB00AE +:1021200020FF1CC0933021F48091EB00806214C02A +:102130009091EB0090619093EB0021E030E0A901D9 +:1021400002C0440F551F8A95E2F74093EA001092AF +:10215000EA008091EB0088608093EB001092E90028 +:102160008091E800877F86C08111A7C01091E901A6 +:102170001F778091E3008078812B8093E30080912A +:10218000E800877F8093E8000E94420E8091E8007B +:1021900080FFFCCF8091E30080688093E300111101 +:1021A00002C082E001C083E08093E60186C08058CF +:1021B000823008F082C08091E9019091EA018C3D63 +:1021C00053E0950779F583E08A838AE289834FB7E4 +:1021D000F894DE01139620E03EE051E2E32FF0E0B8 +:1021E00050935700E49120FF03C0E295EF703F5FEA +:1021F000EF708E2F90E0EA3010F0C79601C0C096C5 +:102200008D939D932F5F243149F74FBF8091E80054 +:10221000877F8093E8006AE270E0CE0101960E9419 +:10222000490D14C0AE014F5F5F4F6091EB010E94FA +:10223000900CBC01892B09F440C09091E800977F75 +:102240009093E80089819A810E94AC0D8091E8000A +:102250008B778093E80031C0803879F58091E80071 +:10226000877F8093E8008091E2018093F100809164 +:10227000E8008E778093E8000E94420E1EC0811114 +:102280001CC09091E9019230C0F48091E800877FF2 +:102290008093E8009093E2010E94420E8091E20157 +:1022A000811106C08091E30087FD02C081E001C07A +:1022B00084E08093E6010E948C0B8091E80083FF0C +:1022C0000AC08091E800877F8093E8008091EB004E +:1022D00080628093EB00AA960FB6F894DEBF0FBE23 +:1022E000CDBFDF91CF911F9108950895CF93809135 +:1022F000E6018823A1F0C091E900CF709091EC0035 +:10230000892F817090FD80E8C82B1092E9008091A0 +:10231000E80083FD0E942410CF70C093E900CF91A4 +:10232000089590936B0180936A010895E0916A018A +:10233000F0916B01309721F00190F081E02D09942C +:1023400080E00895E0916A01F0916B01309721F0EF +:102350000280F381E02D09940895E0916A01F091E3 +:102360006B01309721F00480F581E02D09940895E8 +:1023700020916801309169018217930771F0909361 +:10238000690180936801E0916A01F0916B013097D7 +:1023900021F00680F781E02D0994089520916601CF +:1023A000309167018217930771F0909367018093D2 +:1023B0006601E0916A01F0916B01309721F0008491 +:1023C000F185E02D0994089508950C94E4110E947C +:1023D000FA1D0E94A7060C94C01ECF92DF92EF92C6 +:1023E000FF920F931F93CF93DF93CDB7DEB72B9759 +:1023F0000FB6F894DEBF0FBECDBF0E94BF068DE6BC +:10240000C82E81E0D82E00E010E0E02E802F0E9440 +:10241000AD07F60141916F01F42EF826B1F40F5F7C +:102420001F4F0E30110589F78FEF89838A831B8236 +:102430000E94031E8160782F9D838C8349815A817D +:102440006B818D810E94901240C09091CF0191FFCD +:1024500004C08B870E94B3078B8520E030E04F2DAE +:1024600050E0922FBA01022E02C0759567950A942A +:10247000E2F760FF24C02E83EF8221E030E06901A3 +:1024800002C0CC0CDD1C9A95E2F790E08C219D21D6 +:10249000892B09F420E028870E94031E8160782F91 +:1024A0009A8789874E815F8168858A850E9490120C +:1024B000F801E359FE4F8081C826C08206C02F5F15 +:1024C0003F4F2630310569F6AACF0E94A72110910F +:1024D0006C010E9496111817A1F00E94961180932A +:1024E0006C012B960FB6F894DEBF0FBECDBFDF9107 +:1024F000CF911F910F91FF90EF90DF90CF900C94B0 +:102500008F0A2B960FB6F894DEBF0FBECDBFDF91BA +:10251000CF911F910F91FF90EF90DF90CF90089592 +:10252000CF93DF93CDB7DEB72B970FB6F894DEBF0E +:102530000FBECDBF4F83588769877A878B87DE01AF +:10254000119686E0FD0111928A95E9F785E0FE017A +:10255000379601900D928A95E1F749815A816B81F6 +:102560007C818D819E810E94C0192B960FB6F894B4 +:10257000DEBF0FBECDBFDF91CF9108950895CF93F9 +:10258000882309F4C2C0C82F823859F40E949611DA +:1025900081FDBBC089E30E94691C0E94361D89E34E +:1025A0000CC0833879F40E94961180FDAEC083E59B +:1025B0000E94691C0E94361D83E50E94AB1CCF91CE +:1025C0000C94361D843859F40E94961182FD9DC0EA +:1025D00087E40E94691C0E94361D87E4EECF8CEFD1 +:1025E0008C0F813A48F48C2F0E94EA2381118DC010 +:1025F0008C2F0E94691CE3CF80E28C0F883048F456 +:10260000C77081E001C0880FCA95EAF70E94EF1CED +:10261000D6CF8BE58C0F833078F4C53A29F0C63AD3 +:1026200031F083E890E005C081E890E002C082E8E4 +:1026300090E0CF910C94B81188E58C0F833108F0AD +:1026400064C0C83A39F1C93A41F1CA3A49F1CB3AC2 +:1026500051F1CC3A59F1CD3A61F1C03B69F1CE3A32 +:1026600071F1CF3A79F1C13B81F1C23B89F1C33BB2 +:1026700091F1C43B99F1C53BA1F1C63BA9F1C73B20 +:10268000B1F1C83BB9F1C93BC1F1CA3BC9F180E026 +:1026900090E038C082EE90E035C089EE90E032C024 +:1026A0008AEE90E02FC085EB90E02CC086EB90E0A6 +:1026B00029C087EB90E026C08CEC90E023C08DEC25 +:1026C00090E020C083E891E01DC08AE891E01AC044 +:1026D00082E991E017C084E991E014C081E292E0C0 +:1026E00011C083E292E00EC084E292E00BC085E26A +:1026F00092E008C086E292E005C087E292E002C064 +:102700008AE292E0CF910C94CE11CF910895882364 +:1027100009F44BC0823859F40E94961181FF45C0DC +:1027200089E30E94691C0E94361D89E30CC083382E +:1027300071F40E94961180FF38C083E50E94691CE5 +:102740000E94361D83E50E94AB1C0C94361D843814 +:1027500059F40E94961182FF28C087E40E94691CE8 +:102760000E94361D87E4EFCF9CEF980F913A58F303 +:1027700090E2980F983050F4877091E001C0990F63 +:102780008A95EAF7892F0E94F51CDFCF9BE5980F09 +:10279000933020F480E090E00C94B811885A833193 +:1027A00020F480E090E00C94CE110895882321F06D +:1027B0000E94EF1C0C94361D0895882321F00E947E +:1027C000F51C0C94361D0895BF92CF92DF92EF92C4 +:1027D000FF920F931F93CF93DF9300D000D000D0D0 +:1027E000CDB7DEB725E0FC01DE01119601900D9218 +:1027F0002A95E1F7FC01D080118102812581229583 +:102800002F7043815481452B09F4FCC21F3F21F4F2 +:10281000FFEFDF1609F4F6C27C012E830E94BE1280 +:10282000D9821A8369817A81802F0E94651C182FB2 +:10283000B92E0E941A1C0E94E11A2E81002319F061 +:102840000E940C1D2E81EB2DE295EF70F0E0E05917 +:10285000FF4F0C941F268B2D807F9B2D9F70F92E90 +:10286000882319F0F29480EFF822002389F0FF20EA +:1028700009F475C280E2810F883020F48F2D0E9408 +:10288000EF1C03C08F2D0E94FF1C0E94361D67C2E3 +:10289000812F0E948713FF2009F4B4C2105E8F2D90 +:1028A000183018F40E94F51C02C00E94051D2696DF +:1028B0000FB6F894DEBF0FBECDBFDF91CF911F9151 +:1028C0000F91FF90EF90DF90CF90BF900C94361D4A +:1028D0003B2D307F8B2D8F70303211F08295807FB1 +:1028E000112319F0113021F12CC00023B9F022235B +:1028F00009F4A0C1213009F09DC126960FB6F894C5 +:10290000DEBF0FBECDBFDF91CF911F910F91FF9022 +:10291000EF90DF90CF90BF900C941F1D222319F0F1 +:10292000213009F46FC28E830E94221D8E8196C1D0 +:10293000002321F0223008F065C27CC1211162C25F +:102940008DC1002321F0222309F474C108C222237F +:1029500009F484C119C22B2D26952695237030E0E9 +:102960002115310521F021303105D1F04BC2002372 +:1029700021F0812F9B2D937002C080E090E026967D +:102980000FB6F894DEBF0FBECDBFDF91CF911F9180 +:102990000F91FF90EF90DF90CF90BF900C94B81103 +:1029A000002321F0812F9B2D937002C080E090E0E6 :1029B00026960FB6F894DEBF0FBECDBFDF91CF9144 :1029C0001F910F91FF90EF90DF90CF90BF900C94EC -:1029D000F71A0E94DB1AC701B60126960FB6F894C3 -:1029E000DEBF0FBECDBFDF91CF911F910F91FF9042 -:1029F000EF90DF90CF90BF900C94BF1A103FD1F1B1 -:102A000018F4103E50F4A1C0123F09F463C008F45A -:102A10004CC0133F09F473C098C01F708B2D8F7189 -:102A20000023A1F00E94581A812F26960FB6F89421 -:102A3000DEBF0FBECDBFDF91CF911F910F91FF90F1 -:102A4000EF90DF90CF90BF900C94E8120E94791A1B -:102A5000812F26960FB6F894DEBF0FBECDBFDF9153 -:102A6000CF911F910F91FF90EF90DF90CF90BF908B -:102A70000C94EF120023A9F02111BFC08B2D8F7190 -:102A800026960FB6F894DEBF0FBECDBFDF91CF9173 -:102A90001F910F91FF90EF90DF90CF90BF900C941B -:102AA0009E1A223008F0A9C0E9CF0023A9F08B2D8F -:102AB0008F7126960FB6F894DEBF0FBECDBFDF91A3 -:102AC000CF911F910F91FF90EF90DF90CF90BF902B -:102AD0000C94581A002359F38B2D8F7126960FB63C -:102AE000F894DEBF0FBECDBFDF91CF911F910F9144 -:102AF000FF90EF90DF90CF90BF900C94791A002355 -:102B000099F08B2D8F7126960FB6F894DEBF0FBE0D -:102B1000CDBFDF91CF911F910F91FF90EF90DF908C -:102B2000CF90BF900C94431A26960FB6F894DEBF50 -:102B30000FBECDBFDF91CF911F910F91FF90EF900E -:102B4000DF90CF90BF900C94391A0023A9F0222374 -:102B500009F4ADCF812F26960FB6F894DEBF0FBED5 -:102B6000CDBFDF91CF911F910F91FF90EF90DF903C -:102B7000CF90BF900C94D111222309F4ADCF812FB7 -:102B800026960FB6F894DEBF0FBECDBFDF91CF9172 -:102B90001F910F91FF90EF90DF90CF90BF900C941A -:102BA00099124B2D4F70612FC7010E943604269653 -:102BB0000FB6F894DEBF0FBECDBFDF91CF911F914E -:102BC0000F91FF90EF90DF90CF90BF900C945D1924 -:102BD0004B2D4F70612FC70126960FB6F894DEBFBC -:102BE0000FBECDBFDF91CF911F910F91FF90EF905E -:102BF000DF90CF90BF900C944B0826960FB6F894B8 -:102C0000DEBF0FBECDBFDF91CF911F910F91FF901F -:102C1000EF90DF90CF90BF9008950E94F81B0E9424 -:102C2000CD1B0E94121C0E941D210E946C2080E07E -:102C300090E00E94CB1080E090E00C94E1100E94A4 -:102C4000E81B0C940D160E94141B292F22952F703F -:102C500030E02C3031054CF42A3031056CF4225030 -:102C600031092230310588F407C02C30310549F094 -:102C70002F30310531F009C0803E48F0803F29F403 -:102C800006C093FB882780F9089580E0089581E0CD -:102C90000895CF93DF9300D000D01F92CDB7DEB759 -:102CA0000F900F900F900F900F90DF91CF9108959C -:102CB000CF93DF9300D000D000D0CDB7DEB72696FB -:102CC0000FB6F894DEBF0FBECDBFDF91CF91089550 -:102CD0001F93CF93DF93C0917B0116E080917C011D -:102CE000C81799F0D0E01C9FF0011D9FF00D112432 -:102CF000E358FE4F408151816281738184819581C7 -:102D00000E9458162196C770E9CFDF91CF911F918D -:102D100008954091AD015091AE016091AF01709165 -:102D2000B0018091B1019091B2010C94581680913C -:102D3000B20182958F7009F054C08091AF01882351 -:102D400009F44FC080917B01A0917C016091AD019D -:102D50007091AE014091B0015091B101B6E08A1777 -:102D600009F43FC090E041155105C1F17F3F11F4D6 -:102D70006F3FA1F1B89FF001B99FF00D1124E35806 -:102D8000FE4F218172132AC02081621327C0228145 -:102D9000211124C0238134812417350710F42150D8 -:102DA0003109241B350B283C3105C0F42091B201B8 -:102DB0002F7020612093B20126E0289FF001299F07 -:102DC000F00D1124EE57FE4F80818F70806180835B -:102DD0008DEA91E00E94F6120C94681601968770B5 -:102DE000BECF0895CF92DF92EF92FF920F931F9381 -:102DF000CF93DF93CDB7DEB762970FB6F894DEBFFF -:102E00000FBECDBF8C0185E0F801DE011D9601905B -:102E10000D928A95E1F7D8014C9111965C9111972A -:102E200012966C9112971396CD90DC901497309176 -:102E3000AD017091AE018091B0019091B101009708 -:102E400009F46BC17F3F19F43F3F09F466C1E0907C -:102E5000AF01EE2009F4C0C02091B201C816D90616 -:102E600028F0F601E81BF90BCF0104C0809590957E -:102E70008C0D9D1DFF24F394883C910578F0F12C76 -:102E8000207F09F0C6C07C2DD98AC88A89890E9412 -:102E900049168DEA91E00E94F612B1C0822F807F20 -:102EA00009F046C0751314C0341312C0611110C06C -:102EB0002F7020612093B2010E9489168DEA91E063 -:102EC0000E94F6128091B201D80115968C932EC003 -:102ED000CD2819F15F3F11F44F3FF9F0F62E611143 -:102EE0001CC080917B0120917C0136E0821709F49F -:102EF0005AC090E0389FF001399FF00D1124E3583B -:102F0000FE4F7181571306C07081471303C0728151 -:102F1000711103C001968770E9CFF62E662309F47C -:102F200018C18091B20181608093B201F12C11C16E -:102F3000751308C0341306C0611104C08091B2013A -:102F4000D801C3C04D875E878D859E856A8B0E94A0 -:102F500023166A898823E1F16623D1F12091B20119 -:102F6000822F82958F7090E0029774F08091AD016E -:102F70009091AE0198878F831986DB86CA862C874D -:102F8000CE0107960E94F61286E0F801ADEAB1E0A4 -:102F900001900D928A95E1F70E9497160E9489167A -:102FA000FF24F394D6C04D875E878D859E850E9451 -:102FB000141B292F22952F7030E0223031050CF0A0 -:102FC000BCC09F7009F0B6C0805E883008F4C1C0F4 -:102FD000C8010E94F612E4CFC816D90608F453C0FF -:102FE000F601E81BF90BCF01883C910508F450C0AD -:102FF000F12C7C2DD98AC88A89890E944916EDEA6C -:10300000F1E086E0DF011D928A95E9F70E948916BA -:10301000A0C0751314C0341312C0611110C0809188 -:10302000B201F8018583C8010E94F61286E0EDEA3C -:10303000F1E0DF011D928A95E9F7FE2C8AC04D87E9 -:103040005E878D859E856A8B0E9423166A898823F8 -:1030500009F4BECF662309F4BBCF2091B201822FC1 -:1030600082958F7090E002970CF48ECF8091AD0125 -:103070009091AE019A8389831B82DD82CC822E835C -:10308000CE0101967FCF809590958C0D9D1DACCF84 -:10309000F62E662309F49CCF75132EC034132CC072 -:1030A0002091B20120FD1FC0822F82958F70D9F030 -:1030B000D80115962C9315978F3049F08F5F982F74 -:1030C0009295907F822F8F70892B15968C93C801D3 -:1030D0000E94F61286E0F801ADEAB1E001900D928F -:1030E0008A95E1F793CF86E0F801ADEAB1E001906F -:1030F0000D928A95E1F72DC04D875E878D859E855F -:103100000E942316811140CF8091B201816080938B -:10311000B201C8010E94F6121CC0662309F458CF00 -:103120004D875E878D859E850E942316882309F42E -:103130004FCF2ACF811148CF0CC0243031050CF07D -:1031400047CF9F7009F440CFF8019581907F09F037 -:103150003BCF8F2D62960FB6F894DEBF0FBECDBF6A -:10316000DF91CF911F910F91FF90EF90DF90CF9063 -:1031700008951F93CF93DF93CDB7DEB72C970FB68B -:10318000F894DEBF0FBECDBF4F83588769877A871B -:103190008B879C87CE0107960E94F216882369F0E0 -:1031A0008F8198852A853B85232BF1F19F3F09F07C -:1031B00063C08F3F09F060C037C086E0FE013796DC -:1031C000DE01119601900D928A95E1F76F81788565 -:1031D000EA85FB85309741F17F3F11F46F3F21F184 -:1031E00020917C0130E0C9010196877099274091B8 -:1031F0007B0150E08417950709F447C069837A83FF -:10320000FD83EC8396E0929FD001939FB00D112433 -:10321000A358BE4FFE01319601900D929A95E1F7A9 -:1032200080937C010E94681616E080917B0190914A -:103230007C018917C1F1189FC001112483589E4F4A -:103240000E94F216882379F1E0917B011E9FF00124 -:103250001124E358FE4F4081518162817381848142 -:1032600095810E94581680917B0190E001968770AD -:10327000992780937B01D9CF4F81588569857A85BD -:103280008B859C850E945816CFCF0E941F161092E6 -:103290007C0110927B01EDEAF1E086E0DF011D92F6 -:1032A0008A95E9F7C1CF2C960FB6F894DEBF0FBE12 -:1032B000CDBFDF91CF911F910895EF92FF920F93B1 -:1032C0001F93CF93DF938C01892B09F46CC0F12CF1 -:1032D000EE24E394E8012196F8018491843740F4C8 -:1032E000843008F051C0813081F0823019F15BC028 -:1032F000853709F444C0A8F19CE7980F903708F08F -:1033000052C08F770E94991241C00E5F1F4FFE017D -:10331000C49180E28C0F883048F4C7708E2D01C0B4 -:10332000880FCA95EAF70E94EB1B14C08C2F0E94ED -:10333000D1112DC00E5F1F4FFE01C49180E28C0F92 -:10334000883058F4C7708E2D01C0880FCA95EAF7EF -:103350000E94F11B0E94121C1AC08C2F0E9499120D -:1033600016C00E5F1F4FFE01C491CC2381F08FE980 -:103370009FE00197F1F700C00000C150F6CF0E5F4B -:103380001F4FFE01F49003C00E94D1118E018F2DBA -:10339000882309F49FCFEFE9FFE03197F1F700C0F0 -:1033A00000008150F5CFDF91CF911F910F91FF90D9 -:1033B000EF90089508956093B7017093B8018093DA -:1033C000B9019093BA010C940D160F931F930091BD -:1033D000B7011091B8012091B9013091BA01DC0117 -:1033E000CB01802B912BA22BB32B8093B701909311 -:1033F000B801A093B901B093BA011F910F910C9439 -:103400000D160F931F930091B7011091B8012091F1 -:10341000B9013091BA01DC01CB0180239123A223B1 -:10342000B3238093B7019093B801A093B901B093EF -:10343000BA011F910F910C940D160F931F930091D9 -:10344000B7011091B8012091B9013091BA01DC01A6 -:10345000CB0180279127A227B3278093B7019093B0 -:10346000B801A093B901B093BA011F910F910C94C8 -:103470000D161092B3011092B4011092B501109282 -:10348000B6010C940D1641E050E060E070E004C01D -:10349000440F551F661F771F8A95D2F74093B301DB -:1034A0005093B4016093B5017093B6010C940D165E -:1034B00041E050E060E070E004C0440F551F661F1B -:1034C000771F8A95D2F78091B3019091B401A091B2 -:1034D000B501B091B601482B592B6A2B7B2B409339 -:1034E000B3015093B4016093B5017093B6010C948D -:1034F0000D1641E050E060E070E004C0440F551F3D -:10350000661F771F8A95D2F7409550956095709504 -:103510008091B3019091B401A091B501B091B60131 -:10352000482359236A237B234093B3015093B4016A -:103530006093B5017093B6010C940D1641E050E014 -:1035400060E070E004C0440F551F661F771F8A9526 -:10355000D2F78091B3019091B401A091B501B091DF -:10356000B601482759276A277B274093B301509318 -:10357000B4016093B5017093B6010C940D160F93CE -:103580001F930091B3011091B4012091B5013091C6 -:10359000B601DC01CB01802B912BA22BB32B8093A6 -:1035A000B3019093B401A093B501B093B6011F91FC -:1035B0000F910C940D160F931F930091B30110916E -:1035C000B4012091B5013091B601DC01CB0180231B -:1035D0009123A223B3238093B3019093B401A093CA -:1035E000B501B093B6011F910F910C940D160F9376 -:1035F0001F930091B3011091B4012091B501309156 -:10360000B601DC01CB0180279127A227B327809345 -:10361000B3019093B401A093B501B093B6011F918B -:103620000F910C940D160895CF92DF92EF92FF92B6 -:103630000F931F93CF93DF938C01C090B701D0906D -:10364000B801E090B901F090BA014091B3015091F6 -:10365000B4016091B5017091B601C42AD52AE62A59 -:10366000F72ACFE1D0E0D701C6010C2E04C0B695F1 -:10367000A795979587950A94D2F780FF07C0B80160 -:103680008C2F0E946E088130910531F4219758F7F4 -:10369000B80180E00E946E08DF91CF911F910F91D9 -:1036A000FF90EF90DF90CF90089590910C019923B7 -:1036B00021F090910D01911109C020910E013091DE -:1036C0000F01F90132969FEF40E01FC0982F9695A9 -:1036D000969596959F3050F5E0910E01F0910F016F -:1036E000E90FF11D877021E030E0A90102C0440F0D -:1036F000551F8A95E2F7CA019181892B818308952C -:103700009F3F39F04F5F4E3041F051915813F8CF41 -:103710000DC05111F7CF942FF5CF9F3F39F0F9012C -:10372000E90FF11D97FDFA95828308950895909110 -:103730000C01992321F090910D01911109C0209164 -:103740000E0130910F01F9013296205F3F4F1FC0EB -:10375000982F9695969596959F30F0F4E0910E01EE -:10376000F0910F01E90FF11D877021E030E0A90110 -:1037700002C0440F551F8A95E2F7CA0180959181D6 -:103780008923818308953196E217F30729F0908108 -:103790009813F9CF1082F7CF089581E090E0E0917F -:1037A0000E01F0910F01E80FF91F10820196803190 -:1037B0009105A9F708959091CD01892B8093CD01B2 -:1037C000089580959091CD0189238093CD0108952E -:1037D0001092CD0108959091CC01892B8093CC015A -:1037E000089580959091CC0189238093CC01089510 -:1037F0001092CC0108958093BB0108951092BB01F3 -:10380000089580910E0190910F01FC0131969C0169 -:10381000205F3F4F80E0919191118F5FE217F30796 -:10382000D1F70895E0910E01F0910F018091CD0143 -:103830008083E0910E01F0910F0190818091CC0185 -:10384000892B80838091BB01882361F0E0910E0178 -:10385000F0910F019081892B80830E94011C8111BE -:103860001092BB0180910E0190910F010C94B51044 -:10387000CF92DF92EF92FF926C01EE24FF24C114ED -:10388000D104E104F10421F0C701B60120E101C037 -:1038900020E0C72ED82EE92EFF24C114D104E10464 -:1038A000F10419F0285FC701B6016B017C0154E0F7 -:1038B000F694E794D794C7945A95D1F7C114D104DC -:1038C000E104F10419F02C5FC701B6016B017C0122 -:1038D00042E0F694E794D794C7944A95D1F7C1147F -:1038E000D104E104F10419F02E5FC701B601DC0137 -:1038F000CB01B695A79597958795892B8A2B8B2B0E -:1039000009F02F5F822FFF90EF90DF90CF90089506 -:103910008091E701843009F11092CF0120E488E121 -:1039200090E00FB6F894A895809360000FBE2093A6 -:10393000600083B7817F846083BF83B7816083BF6A -:103940007894889583B78E7F83BF88E10FB6F8940B -:1039500080936000109260000FBE0895089508954E -:10396000CF930E94AE1C0E9497060E94AF1CC0E03D -:103970008C2F0E948507811104C0CF5FCE30C1F724 -:1039800001C081E0CF9108950E941F160E94A910E6 -:103990000C94A20982E084BD93E095BD9AEF97BD97 -:1039A00080936E0008952FB7F8948091D001909184 -:1039B000D101A091D201B091D3012FBF0895CF9230 -:1039C000DF92EF92FF920F931F932FB7F8944091DD -:1039D000D0015091D1016091D2017091D3012FBFDC -:1039E0006A017B01EE24FF248C0120E030E0C01648 -:1039F000D106E206F30610F4415051099A01281B42 -:103A0000390BC9011F910F91FF90EF90DF90CF907C -:103A100008951F920F920FB60F9211248F939F93C8 -:103A2000AF93BF938091D0019091D101A091D20129 -:103A3000B091D3010196A11DB11D8093D001909347 -:103A4000D101A093D201B093D301BF91AF919F91C7 -:103A50008F910F900FBE0F901F9018950E94A60D8A -:103A6000F8942FEF87EA91E6215080409040E1F7EB -:103A700000C0000087E090EBDC018093F0019093A0 -:103A8000F101A093F201B093F3019CE088E10FB63D -:103A9000F894A895809360000FBE90936000FFCFCC -:103AA000EF92FF920F931F93CF93DF93D82FC0E035 -:103AB0008C2F0E94850700E010E0E82EF12CC70152 -:103AC000002E02C0959587950A94E2F780FD06C006 -:103AD0000F5F1F4F0630110591F709C0602F7C2F33 -:103AE00080E00E944C08D813F3CF81E004C0CF5F80 -:103AF000CE30F1F680E0DF91CF911F910F91FF90D2 -:103B0000EF900895CF93C82F8CE20E94501D882318 -:103B100021F08C2FCF910C94501D80E0CF9108950F -:103B2000CF930E94D71E811102C00E94BD1EC5E620 -:103B3000C15049F00E9497068FE39CE90197F1F785 -:103B400000C00000F5CF89E20E94821D811113C1DF -:103B50008AE20E94821D81110E94BD1E85E00E94A2 -:103B6000821D81110E942E1D0E94E21E8093CE01B3 -:103B700087E00E94821D8823A9F18BE10E94821DAB -:103B8000882351F08091CE0181FB222720F991E01A -:103B9000922790FB81F90EC08EE00E94821D88233F -:103BA00061F08091CE0182FB222720F991E09227DB -:103BB00090FB82F98093CE0115C080E10E94821DA6 -:103BC0009091CE01882341F093FB222720F981E0D8 -:103BD000822780FB93F904C0892F809580FB90F9A0 -:103BE0009093CE018091CE010E94E61E0E94F41EA9 -:103BF0008093E10180EE0E94821D882341F0809134 -:103C0000E101982F909590FB80F98093E10189E381 -:103C10000E94821D882359F08091E10181FB2227B7 -:103C200020F991E0922790FB81F98093E10182EEE7 -:103C30000E94821D882359F08091E10182FB222796 -:103C400020F991E0922790FB82F98093E10186EEC2 -:103C50000E94821D882359F08091E10183FB222775 -:103C600020F991E0922790FB83F98093E10183EEA4 -:103C70000E94821D882359F08091E10184FB222754 -:103C800020F991E0922790FB84F98093E10185E38C -:103C90000E94821D882359F08091E10185FB222733 -:103CA00020F991E0922790FB85F98093E10181E36F -:103CB0000E94821D882359F08091E10186FB222712 -:103CC00020F991E0922790FB86F98093E10181E150 -:103CD0000E94821D882359F08091E10187FB2227F1 -:103CE00020F991E0922790FB87F98093E101809180 -:103CF000E1010E94F81E8091E10187FB882780F98D -:103D000080930D0187E20E94821DC82F8EE10E94E0 -:103D1000821D8111C2608FE10E94821D8111C460E9 -:103D200080E20E94821D8111C86081E20E94821D92 -:103D30008111C06182E20E94821D8111C06283E212 -:103D40000E94821D8111C06484E20E94821D88232A -:103D500011F0C06802C0CC2329F08C2F0E94EF1E06 -:103D60006C2F03C00E94EB1E682F70E080E090E093 -:103D7000CF910C94DB19CF9108956DEE7EEF80E02A -:103D800090E00E94232560E082E090E00E941525EB -:103D900060E083E090E00E94152560E084E090E020 -:103DA0000E94152560E085E090E00C94152580E0E8 -:103DB00090E00E940F2521E08D3E9E4F09F020E00B -:103DC000822F089582E090E00C940725682F82E00E -:103DD00090E00C94152583E090E00C940725682F63 -:103DE00083E090E00C94152584E090E00C94072586 -:103DF000682F84E090E00C9415258091D60180FF17 -:103E00000BC06091130185E0689FB0011124759586 -:103E10006795759567952BC081FF09C06091130167 -:103E200085E0689FB00111247595679520C082FFD9 -:103E300007C06091130185E0689FB001112417C08D -:103E40009091D7019923D1F060911201961788F7CC -:103E50002091130185E0289F90011124929FA001D9 -:103E6000939F500D112470E0CA010E94D92460383C -:103E7000710540F46115710539F002C065E070E02C -:103E8000862F08958FE7089581E008958091D601E7 -:103E900080FF08C06091110170E075956795759578 -:103EA000679521C081FF06C06091110170E0759592 -:103EB000679519C082FF04C06091110170E010C0C5 -:103EC0009091D7019923C1F0609110019617A0F746 -:103ED00080911101899FC001112470E00E94D924B2 -:103EE0006038710528F46115710521F0862F089559 -:103EF0008FE7089581E0089561E070E0F4CF803F9E -:103F000021F40E94FD1E819504C0813F29F40E9486 -:103F1000FD1E8093DA010895823F21F40E94FD1E68 -:103F2000819504C0833F29F40E94FD1E8093D9012E -:103F30000895893F19F40E94461F05C08A3F31F455 -:103F40000E94461F81958093DB0108958B3F21F4E9 -:103F50000E94461F819504C08C3F29F40E94461F91 -:103F60008093DC010895843F21F48091D801816021 -:103F700017C0853F21F48091D801826011C0863F2F -:103F800021F48091D80184600BC0873F21F4809197 -:103F9000D801886005C0883F31F48091D8018061E4 -:103FA0008093D80108958D3F21F48091D6018160DE -:103FB0000BC08E3F21F48091D601826005C08F3FF7 -:103FC00029F48091D60184608093D6010895803FC2 -:103FD00039F48091DA0187FF6CC01092DA0169C070 -:103FE000813F29F48091DA011816BCF362C09091E8 -:103FF000D901823F29F497FF5CC01092D90159C0C2 -:10400000833F19F41916CCF354C0893F41F48091D1 -:10401000DB0118160CF04DC01092DB014AC08A3F3C -:1040200029F48091DB0187FF44C0F6CF8B3F39F440 -:104030008091DC0187FF3DC01092DC013AC08C3FCB -:1040400029F48091DC011816BCF333C0843F21F4BD -:104050008091D8018E7F17C0853F21F48091D801CF -:104060008D7F11C0863F21F48091D8018B7F0BC0DA -:10407000873F21F48091D801877F05C0883F31F4C4 -:104080008091D8018F7E8093D80113C08D3F21F499 -:104090008091D6018E7F0BC08E3F21F48091D60196 -:1040A0008D7F05C08F3F29F48091D6018B7F80934F -:1040B000D6018091D90181110EC08091DA01811160 -:1040C0000AC08091DB01811106C08091DC01811161 -:1040D00002C01092D701089588ED91E00E94C010AF -:1040E0000E94D31C9093D5018093D40108951F930F -:1040F000CF93DF938091D4019091D5010E94DF1C72 -:10410000AC019091D701992321F02091140130E066 -:1041100006C0209115018AE0289F900111244217C2 -:10412000530708F486C08091D901C091DA01D0917B -:10413000DB011091DC01811107C0C11176C0D111E2 -:1041400074C0111172C075C09F3F19F09F5F9093AA -:10415000D701181624F40E94FD1E8093D901809186 -:10416000D90187FF05C00E94FD1E81958093D9016A -:104170001C1624F40E94FD1E8093DA018091DA015E -:1041800087FF05C00E94FD1E81958093DA01609132 -:10419000D901662339F1C091DA01CC2319F17727CF -:1041A00067FD7095872F972F0E94EA2323E333E35F -:1041B00043E35FE30E944E240E94B7236093D9013A -:1041C0006C2F772767FD7095872F972F0E94EA2322 -:1041D00023E333E343E35FE30E944E240E94B723CB -:1041E0006093DA011D1624F40E94461F8093DB01C0 -:1041F0008091DB0187FF05C00E94461F8195809357 -:10420000DB01111624F40E94461F8093DC0180918B -:10421000DC0187FF05C00E94461F81958093DC0169 -:10422000DF91CF911F910C946C209F3F09F08ECFAE -:1042300096CFDF91CF911F910895E8EDF1E085E0F1 -:10424000DF011D928A95E9F71092D7011092D601ED -:104250000895833081F128F4813059F08230D1F013 -:104260000895853009F449C0B8F1863009F456C084 -:10427000089580911501262F30E0280F311D2F3F22 -:10428000310524F4680F6093150108958FEF809332 -:104290001501089580911401262F30E0280F311D5B -:1042A0002F3F310524F4680F6093140108958FEFB8 -:1042B00080931401089580911301262F30E0280F78 -:1042C000311D2F3F310524F4680F609313010895C9 -:1042D0008FEF80931301089580911201262F30E013 -:1042E000280F311D2F3F310524F4680F6093120110 -:1042F00008958FEF80931201089580911101262F68 -:1043000030E0280F311D2F3F310524F4680F6093F2 -:10431000110108958FEF809311010895809110018C -:10432000262F30E0280F311D2F3F310524F4680F70 -:104330006093100108958FEF8093100108958330EA -:1043400011F128F4813049F0823091F008958530E0 -:1043500081F120F18630C1F108958091150168172F -:1043600020F4861B8093150108951092150108957D -:1043700080911401681720F4861B8093140108951E -:1043800010921401089580911301681720F4861B80 -:1043900080931301089510921301089580911201E2 -:1043A000681720F4861B8093120108951092120161 -:1043B000089580911101681720F4861B80931101E4 -:1043C000089510921101089580911001681720F44A -:1043D000861B8093100108951092100108950F9389 -:1043E0001F938D3109F46BC008F03FC08E3009F483 -:1043F0007DC0C0F4873009F46EC068F4863009F0DF -:10440000AFC08091CE01817F8E7F8093CE0181E00D -:104410008093DE01A6C0883009F458C08B3009F4BF -:104420009BC09EC0863109F497C078F4803109F4AE -:1044300070C0813109F094C00E941F1690910D0147 -:1044400081E0892780930D0187C0893109F484C0F8 -:104450008B3109F085C08091CE0181FB222720F9A4 -:1044600091E0922790FB81F94AC0853309F45BC043 -:1044700048F4873209F457C008F45AC0893209F465 -:1044800052C06EC0833438F48A3308F067C0883372 -:1044900009F462C065C0833409F445C0883409F06A -:1044A0005FC00E941F160FEF13ED20E30150104074 -:1044B0002040E1F700C000000E942E1D4DC00E9468 -:1044C00071230E94A9100E94A20946C00E94E21E08 -:1044D0000E94F41E41C09091CE01892F817090FFFF -:1044E00012C0917F9E7F9093CE013BC08091CE0100 -:1044F00082FB222720F991E0922790FB82F980939A -:10450000CE01992349F18091CE0181608093CE0143 -:1045100023C08091CE0183FB222720F991E09227CE -:1045200090FB83F9ECCF61E070E080E090E010C098 -:104530008D5141E050E060E070E08A019B0104C0D1 -:10454000000F111F221F331F8A95D2F7C901B8012E -:104550000E94DB190E941F1681E003C08953E9CF36 -:1045600080E01F910F91089580E0089580E0089504 -:10457000CF93C82F8091DE01813079F018F082301E -:10458000E9F187C0E0910E01F0910F018081813146 -:1045900069F0823209F07FC009C0E0910E01F0910C -:1045A0000F018081813111F0823261F48C2F0E94E1 -:1045B000B422811104C08C2F0E94EF211DC081E024 -:1045C00090E01AC08C2F0E94B622811114C0C43111 -:1045D00079F048F4CB3079F0C03109F060C082E066 -:1045E0008093DE0108C0C93219F0C83321F057C0EA -:1045F0001092DE0154C081E0817053C0C93289F14C -:1046000018F5C43171F1A8F4C73009F046C08AE04A -:104610008093150194E19093140193E0909313011A -:104620008093120188E08093110188E28093100149 -:1046300034C0CE51C63088F5EC2FF0E0E65DFE4F79 -:1046400080818093DD0129C0CE34E9F020F4CB34A1 -:1046500021F56AE013C0C13579F0C235F1F461E0AB -:104660000DC08091DD01882319F01092DD0115C085 -:1046700081E08093DE0115C061E006C08091DD011C -:104680000E9429210AC06AE08091DD010E949F21D9 -:1046900004C01092DE0180E004C081E002C080E02E -:1046A000ABCFCF910895E1E8F0E08081886080830E -:1046B0008081816080838FB7F89493E09093890024 -:1046C00090ED909388008FBF0895EFE6F0E0808131 -:1046D000826080830895EFE6F0E080818D7F8083A3 -:1046E0000895EFE6F0E0908182E0892780830895C5 -:1046F0001F920F920FB60F9211242F933F934F9357 -:104700005F936F937F938F939F93AF93BF93EF9339 -:10471000FF938091DF019091E00101969093E00179 -:104720008093DF01811103C082E00E94A209E09121 -:10473000E001E695E695F0E0E156F84FE4918091CE -:10474000DF018E1303C080E00E94A209FF91EF9168 -:10475000BF91AF919F918F917F916F915F914F9199 -:104760003F912F910F900FBE0F901F90189504D07E -:104770006894B1118DC0089570D088F09F5790F063 -:10478000B92F9927B751A0F0D1F0660F771F881F76 -:10479000991F1AF0BA95C9F712C0B13081F077D0DD -:1047A000B1E0089574C0672F782F8827B85F39F07B -:1047B000B93FCCF3869577956795B395D9F73EF4D5 -:1047C00090958095709561957F4F8F4F9F4F08957D -:1047D000E89409C097FB3EF490958095709561959B -:1047E0007F4F8F4F9F4F9923A9F0F92F96E9BB2751 -:1047F0009395F695879577956795B795F111F8CFCD -:10480000FAF4BB0F11F460FF1BC06F5F7F4F8F4F37 -:104810009F4F16C0882311F096E911C0772321F02D -:104820009EE8872F762F05C0662371F096E8862FC5 -:1048300070E060E02AF09A95660F771F881FDAF71C -:10484000880F9695879597F9089557FD9058440FCE -:10485000551F59F05F3F71F04795880F97FB991FDF -:1048600061F09F3F79F0879508951216130614069C -:10487000551FF2CF4695F1DF08C016161706180629 -:10488000991FF1CF86957105610508940895E89404 -:10489000BB2766277727CB0197F908950BD078C0FF -:1048A00069D028F06ED018F0952309F05AC05FC087 -:1048B0001124EECFCADFA0F3959FD1F3950F50E0FE -:1048C000551F629FF001729FBB27F00DB11D639FC2 -:1048D000AA27F00DB11DAA1F649F6627B00DA11D68 -:1048E000661F829F2227B00DA11D621F739FB00D0E -:1048F000A11D621F839FA00D611D221F749F33277E -:10490000A00D611D231F849F600D211D822F762F16 -:104910006A2F11249F5750408AF0E1F088234AF013 -:10492000EE0FFF1FBB1F661F771F881F915050405F -:10493000A9F79E3F510570F014C0AACF5F3FECF37A -:10494000983EDCF3869577956795B795F795E7954B -:104950009F5FC1F7FE2B880F911D9695879597F95C -:10496000089597F99F6780E870E060E008959FEFF1 -:1049700080EC089500240A941616170618060906F6 -:10498000089500240A9412161306140605060895C5 -:10499000092E0394000C11F4882352F0BB0F40F44D -:1049A000BF2B11F460FF04C06F5F7F4F8F4F9F4F8D -:1049B000089597FB072E16F4009407D077FD09D0D1 -:1049C0000E94F32407FC05D03EF4909581959F4FFB -:1049D0000895709561957F4F0895EE0FFF1F059024 -:1049E000F491E02D0994AA1BBB1B51E107C0AA1F3B -:1049F000BB1FA617B70710F0A61BB70B881F991F80 -:104A00005A95A9F780959095BC01CD010895F99923 -:104A1000FECF92BD81BDF89A992780B50895A8E18F -:104A2000B0E042E050E00C942A25262FF999FECF01 -:104A30001FBA92BD81BD20BD0FB6F894FA9AF99ABB -:104A40000FBE019608950E941525272F0C94162558 -:104A5000DC01CB01FC01F999FECF06C0F2BDE1BD3E -:104A6000F89A319600B40D9241505040B8F708952D -:044A7000F894FFCFE8 -:104A74002002A409320A0F0ADB09A7090101BC01BB -:104A840028080A03140A3F4D363960071307DD0668 -:104A9400A4063706500669068206010203040506C9 -:044AA40007080900F6 +:1029D000CE11812F002319F00E94AF2002C00E9467 +:1029E000172126960FB6F894DEBF0FBECDBFDF913C +:1029F000CF911F910F91FF90EF90DF90CF90BF90FC +:102A00000C949C218B2D837009F07BC00111FAC1BD +:102A1000812F829586958770880F880F912F9F70E0 +:102A2000C92ED12CE12CF12C082E04C0CC0CDD1CBD +:102A3000EE1CFF1C0A94D2F714FF12C04FE050E0C6 +:102A400060E070E004C0440F551F661F771F8A9531 +:102A5000D2F7CB01BA01609570958095909503C02F +:102A600060E070E0CB012B2D269526952370422F38 +:102A700050E042305105D9F04330510569F16C29DD +:102A80007D298E299F294130510551F126960FB697 +:102A9000F894DEBF0FBECDBFDF91CF911F910F9194 +:102AA000FF90EF90DF90CF90BF900C94081B6C29A3 +:102AB0007D298E299F2926960FB6F894DEBF0FBE7A +:102AC000CDBFDF91CF911F910F91FF90EF90DF90DD +:102AD000CF90BF900C94241B0E94081BC701B60125 +:102AE00026960FB6F894DEBF0FBECDBFDF91CF9113 +:102AF0001F910F91FF90EF90DF90CF90BF900C94BB +:102B0000EC1A002319F08B2D817001C08695882363 +:102B100009F478C1812F829586958770880F880F78 +:102B2000912F9F70C92ED12CE12CF12C082E04C0BE +:102B3000CC0CDD1CEE1CFF1C0A94D2F714FF12C053 +:102B40004FE050E060E070E004C0440F551F661F86 +:102B5000771F8A95D2F7CB01BA0160957095809561 +:102B6000909503C060E070E0CB012B2D2695269553 +:102B70002370422F50E042305105D9F043305105C7 +:102B800069F16C297D298E299F294130510551F128 +:102B900026960FB6F894DEBF0FBECDBFDF91CF9162 +:102BA0001F910F91FF90EF90DF90CF90BF900C940A +:102BB000E21B6C297D298E299F2926960FB6F89451 +:102BC000DEBF0FBECDBFDF91CF911F910F91FF9060 +:102BD000EF90DF90CF90BF900C94FE1B0E94E21B01 +:102BE000C701B60126960FB6F894DEBF0FBECDBF63 +:102BF000DF91CF911F910F91FF90EF90DF90CF90D9 +:102C0000BF900C94C61B103FD1F118F4103E50F445 +:102C1000A1C0123F09F463C008F44CC0133F09F48B +:102C200073C098C01F708B2D8F710023A1F00E947C +:102C30005F1B812F26960FB6F894DEBF0FBECDBF67 +:102C4000DF91CF911F910F91FF90EF90DF90CF9088 +:102C5000BF900C94D6130E94801B812F26960FB62E +:102C6000F894DEBF0FBECDBFDF91CF911F910F91C2 +:102C7000FF90EF90DF90CF90BF900C94DD13002376 +:102C8000A9F02111BFC08B2D8F7126960FB6F89435 +:102C9000DEBF0FBECDBFDF91CF911F910F91FF908F +:102CA000EF90DF90CF90BF900C94A51B223008F0DE +:102CB000A9C0E9CF0023A9F08B2D8F7126960FB6FE +:102CC000F894DEBF0FBECDBFDF91CF911F910F9162 +:102CD000FF90EF90DF90CF90BF900C945F1B00238C +:102CE00059F38B2D8F7126960FB6F894DEBF0FBE69 +:102CF000CDBFDF91CF911F910F91FF90EF90DF90AB +:102D0000CF90BF900C94801B002399F08B2D8F7176 +:102D100026960FB6F894DEBF0FBECDBFDF91CF91E0 +:102D20001F910F91FF90EF90DF90CF90BF900C9488 +:102D30004A1B26960FB6F894DEBF0FBECDBFDF91BB +:102D4000CF911F910F91FF90EF90DF90CF90BF90A8 +:102D50000C94401B0023A9F0222309F4ADCF812F4E +:102D600026960FB6F894DEBF0FBECDBFDF91CF9190 +:102D70001F910F91FF90EF90DF90CF90BF900C9438 +:102D8000BF12222309F4ADCF812F26960FB6F894F7 +:102D9000DEBF0FBECDBFDF91CF911F910F91FF908E +:102DA000EF90DF90CF90BF900C9487134B2D4F7016 +:102DB000612FC7010E94420426960FB6F894DEBF29 +:102DC0000FBECDBFDF91CF911F910F91FF90EF907C +:102DD000DF90CF90BF900C94641A4B2D4F70612FF1 +:102DE000C70126960FB6F894DEBF0FBECDBFDF91A8 +:102DF000CF911F910F91FF90EF90DF90CF90BF90F8 +:102E00000C94B40726960FB6F894DEBF0FBECDBF64 +:102E1000DF91CF911F910F91FF90EF90DF90CF90B6 +:102E2000BF9008950E940C1D0E941C1D0E94E11C71 +:102E30000E94361D0E944D220E949C2180E090E05D +:102E40000E94B81180E090E00C94CE110E94FC1C0E +:102E50000C9412170E945A1C292F22952F7030E0D3 +:102E60002C3031054CF42A3031056CF422503109F4 +:102E70002230310588F407C02C30310549F02F305D +:102E8000310531F009C0803E48F0803F29F406C08A +:102E900093FB882780F9089580E0089581E00895E4 +:102EA000CF93DF9300D000D01F92CDB7DEB70F9045 +:102EB0000F900F900F900F90DF91CF910895CF93C7 +:102EC000DF9300D000D000D0CDB7DEB726960FB686 +:102ED000F894DEBF0FBECDBFDF91CF9108951F9351 +:102EE000CF93DF93C0917B0116E080917C01C817DE +:102EF00099F0D0E01C9FF0011D9FF00D1124E358C4 +:102F0000FE4F4081518162817381848195810E944D +:102F10005F172196C770E9CFDF91CF911F91089578 +:102F20004091AD015091AE016091AF017091B0013F +:102F30008091B1019091B2010C945F178091B20120 +:102F400082958F7009F054C08091AF01882309F4F5 +:102F50004FC080917B01A0917C016091AD01709187 +:102F6000AE014091B0015091B101B6E08A1709F469 +:102F70003FC090E041155105C1F17F3F11F46F3F13 +:102F8000A1F1B89FF001B99FF00D1124E358FE4F55 +:102F9000218172132AC02081621327C0228121114E +:102FA00024C0238134812417350710F421503109BE +:102FB000241B350B283C3105C0F42091B2012F7041 +:102FC00020612093B20126E0289FF001299FF00D97 +:102FD0001124EE57FE4F80818F70806180838DEACF +:102FE00091E00E94E4130C946F1701968770BECF96 +:102FF0000895CF92DF92EF92FF920F931F93CF939A +:10300000DF93CDB7DEB762970FB6F894DEBF0FBE81 +:10301000CDBF8C0185E0F801DE011D9601900D9277 +:103020008A95E1F7D8014C9111965C91119712960F +:103030006C9112971396CD90DC9014973091AD015E +:103040007091AE018091B0019091B101009709F4A7 +:103050006BC17F3F19F43F3F09F466C1E090AF01B7 +:10306000EE2009F4C0C02091B201C816D90628F09C +:10307000F601E81BF90BCF0104C0809590958C0DEB +:103080009D1DFF24F394883C910578F0F12C207F5E +:1030900009F0C6C07C2DD98AC88A89890E94501738 +:1030A0008DEA91E00E94E413B1C0822F807F09F085 +:1030B00046C0751314C0341312C0611110C02F70B4 +:1030C00020612093B2010E9490178DEA91E00E9446 +:1030D000E4138091B201D80115968C932EC0CD28AF +:1030E00019F15F3F11F44F3FF9F0F62E61111CC04A +:1030F00080917B0120917C0136E0821709F45AC04F +:1031000090E0389FF001399FF00D1124E358FE4FF5 +:103110007181571306C07081471303C0728171110A +:1031200003C001968770E9CFF62E662309F418C113 +:103130008091B20181608093B201F12C11C17513AD +:1031400008C0341306C0611104C08091B201D801D7 +:10315000C3C04D875E878D859E856A8B0E942A1726 +:103160006A898823E1F16623D1F12091B201822F8F +:1031700082958F7090E0029774F08091AD019091EC +:10318000AE0198878F831986DB86CA862C87CE018D +:1031900007960E94E41386E0F801ADEAB1E00190E1 +:1031A0000D928A95E1F70E949E170E949017FF24C6 +:1031B000F394D6C04D875E878D859E850E945A1CEC +:1031C000292F22952F7030E0223031050CF0BCC041 +:1031D0009F7009F0B6C0805E883008F4C1C0C80195 +:1031E0000E94E413E4CFC816D90608F453C0F601D0 +:1031F000E81BF90BCF01883C910508F450C0F12C75 +:103200007C2DD98AC88A89890E945017EDEAF1E09D +:1032100086E0DF011D928A95E9F70E949017A0C011 +:10322000751314C0341312C0611110C08091B20123 +:10323000F8018583C8010E94E41386E0EDEAF1E01D +:10324000DF011D928A95E9F7FE2C8AC04D875E87C3 +:103250008D859E856A8B0E942A176A89882309F4C6 +:10326000BECF662309F4BBCF2091B201822F829595 +:103270008F7090E002970CF48ECF8091AD01909109 +:10328000AE019A8389831B82DD82CC822E83CE019C +:1032900001967FCF809590958C0D9D1DACCFF62E1D +:1032A000662309F49CCF75132EC034132CC02091D3 +:1032B000B20120FD1FC0822F82958F70D9F0D801F6 +:1032C00015962C9315978F3049F08F5F982F929514 +:1032D000907F822F8F70892B15968C93C8010E9446 +:1032E000E41386E0F801ADEAB1E001900D928A9511 +:1032F000E1F793CF86E0F801ADEAB1E001900D92DD +:103300008A95E1F72DC04D875E878D859E850E9449 +:103310002A17811140CF8091B20181608093B20160 +:10332000C8010E94E4131CC0662309F458CF4D87DE +:103330005E878D859E850E942A17882309F44FCFCA +:103340002ACF811148CF0CC0243031050CF047CF73 +:103350009F7009F440CFF8019581907F09F03BCF31 +:103360008F2D62960FB6F894DEBF0FBECDBFDF91F2 +:10337000CF911F910F91FF90EF90DF90CF90089524 +:103380001F93CF93DF93CDB7DEB72C970FB6F8948A +:10339000DEBF0FBECDBF4F83588769877A878B8783 +:1033A0009C87CE0107960E94F917882369F08F81C8 +:1033B00098852A853B85232BF1F19F3F09F063C057 +:1033C0008F3F09F060C037C086E0FE013796DE010E +:1033D000119601900D928A95E1F76F817885EA85C3 +:1033E000FB85309741F17F3F11F46F3F21F1209130 +:1033F0007C0130E0C90101968770992740917B01DB +:1034000050E08417950709F447C069837A83FD83E8 +:10341000EC8396E0929FD001939FB00D1124A358A6 +:10342000BE4FFE01319601900D929A95E1F780937F +:103430007C010E946F1716E080917B0190917C01C6 +:103440008917C1F1189FC001112483589E4F0E9413 +:10345000F917882379F1E0917B011E9FF001112477 +:10346000E358FE4F4081518162817381848195814F +:103470000E945F1780917B0190E0019687709927E9 +:1034800080937B01D9CF4F81588569857A858B855B +:103490009C850E945F17CFCF0E94261710927C0157 +:1034A00010927B01EDEAF1E086E0DF011D928A9542 +:1034B000E9F7C1CF2C960FB6F894DEBF0FBECDBF93 +:1034C000DF91CF911F910895EF92FF920F931F9379 +:1034D000CF93DF938C01892B09F46CC0F12CEE247F +:1034E000E394E8012196F8018491843740F4843014 +:1034F00008F051C0813081F0823019F15BC085370E +:1035000009F444C0A8F19CE7980F903708F052C026 +:103510008F770E94871341C00E5F1F4FFE01C49139 +:1035200080E28C0F883048F4C7708E2D01C0880F60 +:10353000CA95EAF70E940F1D14C08C2F0E94BF127B +:103540002DC00E5F1F4FFE01C49180E28C0F8830AA +:1035500058F4C7708E2D01C0880FCA95EAF70E94F3 +:10356000151D0E94361D1AC08C2F0E94871316C08D +:103570000E5F1F4FFE01C491CC2381F08FE99FE0C5 +:103580000197F1F700C00000C150F6CF0E5F1F4F4A +:10359000FE01F49003C00E94BF128E018F2D88237C +:1035A00009F49FCFEFE9FFE03197F1F700C0000089 +:1035B0008150F5CFDF91CF911F910F91FF90EF9048 +:1035C000089508956093B7017093B8018093B9018D +:1035D0009093BA010C9412170F931F930091B701A7 +:1035E0001091B8012091B9013091BA01DC01CB01F1 +:1035F000802B912BA22BB32B8093B7019093B80112 +:10360000A093B901B093BA011F910F910C941217B6 +:103610000F931F930091B7011091B8012091B90148 +:103620003091BA01DC01CB0180239123A223B32383 +:103630008093B7019093B801A093B901B093BA01F8 +:103640001F910F910C9412170F931F930091B701C4 +:103650001091B8012091B9013091BA01DC01CB0180 +:1036600080279127A227B3278093B7019093B801B1 +:10367000A093B901B093BA011F910F910C94121746 +:103680001092B3011092B4011092B5011092B601DC +:103690000C94121741E050E060E070E004C0440F69 +:1036A000551F661F771F8A95D2F74093B301509339 +:1036B000B4016093B5017093B6010C94121741E008 +:1036C00050E060E070E004C0440F551F661F771F94 +:1036D0008A95D2F78091B3019091B401A091B50180 +:1036E000B091B601482B592B6A2B7B2B4093B30129 +:1036F0005093B4016093B5017093B6010C94121706 +:1037000041E050E060E070E004C0440F551F661FC8 +:10371000771F8A95D2F74095509560957095809166 +:10372000B3019091B401A091B501B091B6014823C5 +:1037300059236A237B234093B3015093B4016093D0 +:10374000B5017093B6010C94121741E050E060E0AF +:1037500070E004C0440F551F661F771F8A95D2F78B +:103760008091B3019091B401A091B501B091B601DF +:10377000482759276A277B274093B3015093B40108 +:103780006093B5017093B6010C9412170F931F93B9 +:103790000091B3011091B4012091B5013091B601AF +:1037A000DC01CB01802B912BA22BB32B8093B30197 +:1037B0009093B401A093B501B093B6011F910F91FE +:1037C0000C9412170F931F930091B3011091B40141 +:1037D0002091B5013091B601DC01CB01802391230A +:1037E000A223B3238093B3019093B401A093B501B6 +:1037F000B093B6011F910F910C9412170F931F9362 +:103800000091B3011091B4012091B5013091B6013E +:10381000DC01CB0180279127A227B3278093B30136 +:103820009093B401A093B501B093B6011F910F918D +:103830000C9412170895CF92DF92EF92FF920F939C +:103840001F93CF93DF938C01C090B701D090B80144 +:10385000E090B901F090BA018091B3019091B40168 +:10386000A091B501B091B601C82AD92AEA2AFB2A4B +:10387000CFE1D0E0D701C6010C2E04C0B695A795C4 +:10388000979587950A94D2F780FF06C0B8018C2FD0 +:103890000E94F409019721F4219760F780E001C0AC +:1038A0008C2FDF91CF911F910F91FF90EF90DF90C0 +:1038B000CF900895CF93DF93EC010E941B1CBE01B3 +:1038C0000E94F409DF91CF910895CB010E945A1C08 +:1038D000089590910C01992321F090910D0191117F +:1038E00009C020910E0130910F01F90132969FEF2E +:1038F00040E01FC0982F9695969596959F3050F56D +:10390000E0910E01F0910F01E90FF11D877021E0A8 +:1039100030E0A90102C0440F551F8A95E2F7CA01A1 +:103920009181892B818308959F3F39F04F5F4E30FD +:1039300041F051915813F8CF0DC05111F7CF942F8A +:10394000F5CF9F3F39F0F901E90FF11D97FDFA9589 +:1039500082830895089590910C01992321F090910C +:103960000D01911109C020910E0130910F01F90153 +:103970003296205F3F4F1FC0982F9695969596954B +:103980009F30F0F4E0910E01F0910F01E90FF11D6D +:10399000877021E030E0A90102C0440F551F8A95CD +:1039A000E2F7CA0180959181892381830895319638 +:1039B000E217F30729F090819813F9CF1082F7CF1F +:1039C000089581E090E0E0910E01F0910F01E80F81 +:1039D000F91F1082019680319105A9F70895909101 +:1039E000CE01892B8093CE01089580959091CE01D0 +:1039F00089238093CE0108951092CE01089590916D +:103A0000CD01892B8093CD01089580959091CD01B2 +:103A100089238093CD0108951092CD01089590914E +:103A2000CC01892B8093CC01089580959091CC0195 +:103A300089238093CC0108951092CC01089580933E +:103A4000BB0108951092BB01089580910E019091E1 +:103A50000F01FC0131969C01205F3F4F80E0919166 +:103A600091118F5FE217F307D1F70895E0910E01EE +:103A7000F0910F018091CE018083E0910E01F091D1 +:103A80000F0190818091CD01892B8083E0910E01FF +:103A9000F0910F0190818091CC01892B80838091DE +:103AA000BB01882361F0E0910E01F0910F0190813C +:103AB000892B80830E94251D81111092BB0180916A +:103AC0000E0190910F010C94A211CF92DF92EF9210 +:103AD000FF926C01EE24FF24C114D104E104F1042F +:103AE00021F0C701B60120E101C020E0C72ED82E89 +:103AF000E92EFF24C114D104E104F10419F0285F78 +:103B0000C701B6016B017C0154E0F694E794D794A9 +:103B1000C7945A95D1F7C114D104E104F10419F006 +:103B20002C5FC701B6016B017C0142E0F694E7947B +:103B3000D794C7944A95D1F7C114D104E104F10494 +:103B400019F02E5FC701B601DC01CB01B695A79530 +:103B500097958795892B8A2B8B2B09F02F5F822FC6 +:103B6000FF90EF90DF90CF9008958091E601843030 +:103B700021F11092D00120E488E190E00FB6F89492 +:103B8000A895809360000FBE2093600080E00E94A3 +:103B90008F0A83B7817F846083BF83B7816083BFCF +:103BA0007894889583B78E7F83BF88E10FB6F894A9 +:103BB00080936000109260000FBE089508950895EC +:103BC000CF930E94DE1D0E94BF060E94DF1DC0E051 +:103BD0008C2F0E94AD07811104C0CF5FCE30C1F79A +:103BE00001C081E0CF9108950E9426170E9496118E +:103BF0000C948F0A82E084BD93E095BD9AEF97BD47 +:103C000080936E0008952FB7F8948091D101909120 +:103C1000D201A091D301B091D4012FBF0895CF92CA +:103C2000DF92EF92FF920F931F932FB7F89440917A +:103C3000D1015091D2016091D3017091D4012FBF75 +:103C40006A017B01EE24FF248C0120E030E0C016E5 +:103C5000D106E206F30610F4415051099A01281BDF +:103C6000390BC9011F910F91FF90EF90DF90CF901A +:103C700008951F920F920FB60F9211248F939F9366 +:103C8000AF93BF938091D1019091D201A091D301C4 +:103C9000B091D4010196A11DB11D8093D1019093E3 +:103CA000D201A093D301B093D401BF91AF919F9162 +:103CB0008F910F900FBE0F901F9018950E94930E3A +:103CC000F8942FEF87EA91E6215080409040E1F789 +:103CD00000C0000087E090EBDC018093F00190933E +:103CE000F101A093F201B093F3019CE088E10FB6DB +:103CF000F894A895809360000FBE90936000FFCF6A +:103D0000EF92FF920F931F93CF93DF93D82FC0E0D2 +:103D10008C2F0E94AD0700E010E0E82EF12CC701C7 +:103D2000002E02C0959587950A94E2F780FD06C0A3 +:103D30000F5F1F4F0630110591F709C0602F7C2FD0 +:103D400080E00E94B507D813F3CF81E004C0CF5FB5 +:103D5000CE30F1F680E0DF91CF911F910F91FF906F +:103D6000EF900895CF93C82F8CE20E94801E882385 +:103D700021F08C2FCF910C94801E80E0CF9108957C +:103D8000CF930E940720811102C00E94ED1FC5E65B +:103D9000C15049F00E94BF068FE39CE90197F1F7FB +:103DA00000C00000F5CF89E20E94B21E811113C14C +:103DB0008AE20E94B21E81110E94ED1F85E00E94DE +:103DC000B21E81110E945E1E0E9412208093CF01BC +:103DD00087E00E94B21E8823A9F18BE10E94B21EE7 +:103DE000882351F08091CF0181FB222720F991E0B7 +:103DF000922790FB81F90EC08EE00E94B21E8823AC +:103E000061F08091CF0182FB222720F991E0922777 +:103E100090FB82F98093CF0115C080E10E94B21E11 +:103E20009091CF01882341F093FB222720F981E074 +:103E3000822780FB93F904C0892F809580FB90F93D +:103E40009093CF018091CF010E9416200E942420E0 +:103E50008093EF0180EE0E94B21E882341F0809192 +:103E6000EF01982F909590FB80F98093EF0189E303 +:103E70000E94B21E882359F08091EF0181FB222716 +:103E800020F991E0922790FB81F98093EF0182EE77 +:103E90000E94B21E882359F08091EF0182FB2227F5 +:103EA00020F991E0922790FB82F98093EF0186EE52 +:103EB0000E94B21E882359F08091EF0183FB2227D4 +:103EC00020F991E0922790FB83F98093EF0183EE34 +:103ED0000E94B21E882359F08091EF0184FB2227B3 +:103EE00020F991E0922790FB84F98093EF0185E31C +:103EF0000E94B21E882359F08091EF0185FB222792 +:103F000020F991E0922790FB85F98093EF0181E3FE +:103F10000E94B21E882359F08091EF0186FB222770 +:103F200020F991E0922790FB86F98093EF0181E1DF +:103F30000E94B21E882359F08091EF0187FB22274F +:103F400020F991E0922790FB87F98093EF0180910F +:103F5000EF010E9428208091EF0187FB882780F9DC +:103F600080930D0187E20E94B21EC82F8EE10E944D +:103F7000B21E8111C2608FE10E94B21E8111C46025 +:103F800080E20E94B21E8111C86081E20E94B21ECE +:103F90008111C06182E20E94B21E8111C06283E27F +:103FA0000E94B21E8111C06484E20E94B21E882366 +:103FB00011F0C06802C0CC2329F08C2F0E941F2072 +:103FC0006C2F03C00E941B20682F70E080E090E0FF +:103FD000CF910C94E21ACF9108956DEE7EEF80E0C0 +:103FE00090E00E94552660E082E090E00E94472623 +:103FF00060E083E090E00E94472660E084E090E08B +:104000000E94472660E085E090E00C94472680E01F +:1040100090E00E94412621E08D3E9E4F09F020E075 +:10402000822F089582E090E00C943926682F82E078 +:1040300090E00C94472683E090E00C943926682F9A +:1040400083E090E00C94472684E090E00C943926BD +:10405000682F84E090E00C9447268091D70180FF80 +:104060000BC06091130185E0689FB0011124759524 +:104070006795759567952BC081FF09C06091130105 +:1040800085E0689FB00111247595679520C082FF77 +:1040900007C06091130185E0689FB001112417C02B +:1040A0009091D8019923D1F060911201961788F769 +:1040B0002091130185E0289F90011124929FA00177 +:1040C000939F500D112470E0CA010E940B266038A6 +:1040D000710540F46115710539F002C065E070E0CA +:1040E000862F08958FE7089581E008958091D70184 +:1040F00080FF08C06091110170E075956795759516 +:10410000679521C081FF06C06091110170E075952F +:10411000679519C082FF04C06091110170E010C062 +:104120009091D8019923C1F0609110019617A0F7E2 +:1041300080911101899FC001112470E00E940B261B +:104140006038710528F46115710521F0862F0895F6 +:104150008FE7089581E0089561E070E0F4CF803F3B +:1041600021F40E942D20819504C0813F29F40E94F2 +:104170002D208093DB010895823F21F40E942D20A1 +:10418000819504C0833F29F40E942D208093DA0199 +:104190000895893F19F40E94762005C08A3F31F4C2 +:1041A0000E94762081958093DC0108958B3F21F455 +:1041B0000E947620819504C08C3F29F40E947620CD +:1041C0008093DD010895843F21F48091D9018160BD +:1041D00017C0853F21F48091D901826011C0863FCC +:1041E00021F48091D90184600BC0873F21F4809134 +:1041F000D901886005C0883F31F48091D901806180 +:104200008093D90108958D3F21F48091D701816079 +:104210000BC08E3F21F48091D701826005C08F3F93 +:1042200029F48091D70184608093D7010895803F5D +:1042300039F48091DB0187FF6CC01092DB0169C00B +:10424000813F29F48091DB011816BCF362C0909184 +:10425000DA01823F29F497FF5CC01092DA0159C05D +:10426000833F19F41916CCF354C0893F41F480916F +:10427000DC0118160CF04DC01092DC014AC08A3FD8 +:1042800029F48091DC0187FF44C0F6CF8B3F39F4DD +:104290008091DD0187FF3DC01092DD013AC08C3F67 +:1042A00029F48091DD011816BCF333C0843F21F45A +:1042B0008091D9018E7F17C0853F21F48091D9016B +:1042C0008D7F11C0863F21F48091D9018B7F0BC077 +:1042D000873F21F48091D901877F05C0883F31F461 +:1042E0008091D9018F7E8093D90113C08D3F21F435 +:1042F0008091D7018E7F0BC08E3F21F48091D70132 +:104300008D7F05C08F3F29F48091D7018B7F8093EB +:10431000D7018091DA0181110EC08091DB018111FA +:104320000AC08091DC01811106C08091DD018111FC +:1043300002C01092D801089589ED91E00E94AD115C +:104340000E94031E9093D6018093D50108951F9378 +:10435000CF93DF938091D5019091D6010E940F1EDB +:10436000AC019091D801992321F02091140130E003 +:1043700006C0209115018AE0289F90011124421760 +:10438000530708F486C08091DA01C091DB01D09117 +:10439000DC011091DD01811107C0C11176C0D1117E +:1043A00074C0111172C075C09F3F19F09F5F909348 +:1043B000D801181624F40E942D208093DA018091F0 +:1043C000DA0187FF05C00E942D2081958093DA01D4 +:1043D0001C1624F40E942D208093DB018091DB01C8 +:1043E00087FF05C00E942D2081958093DB0160919D +:1043F000DA01662339F1C091DB01CC2319F177276B +:1044000067FD7095872F972F0E941C2523E333E3C8 +:1044100043E35FE30E9480250E94E9246093DA0170 +:104420006C2F772767FD7095872F972F0E941C258B +:1044300023E333E343E35FE30E9480250E94E92402 +:104440006093DB011D1624F40E9476208093DC012A +:104450008091DC0187FF05C00E94762081958093C2 +:10446000DC01111624F40E9476208093DD018091F6 +:10447000DD0187FF05C00E94762081958093DD01D4 +:10448000DF91CF911F910C949C219F3F09F08ECF1B +:1044900096CFDF91CF911F910895E9EDF1E085E08E +:1044A000DF011D928A95E9F71092D8011092D70189 +:1044B0000895833081F128F4813059F08230D1F0B1 +:1044C0000895853009F449C0B8F1863009F456C022 +:1044D000089580911501262F30E0280F311D2F3FC0 +:1044E000310524F4680F6093150108958FEF8093D0 +:1044F0001501089580911401262F30E0280F311DF9 +:104500002F3F310524F4680F6093140108958FEF55 +:1045100080931401089580911301262F30E0280F15 +:10452000311D2F3F310524F4680F60931301089566 +:104530008FEF80931301089580911201262F30E0B0 +:10454000280F311D2F3F310524F4680F60931201AD +:1045500008958FEF80931201089580911101262F05 +:1045600030E0280F311D2F3F310524F4680F609390 +:10457000110108958FEF809311010895809110012A +:10458000262F30E0280F311D2F3F310524F4680F0E +:104590006093100108958FEF809310010895833088 +:1045A00011F128F4813049F0823091F0089585307E +:1045B00081F120F18630C1F10895809115016817CD +:1045C00020F4861B8093150108951092150108951B +:1045D00080911401681720F4861B809314010895BC +:1045E00010921401089580911301681720F4861B1E +:1045F0008093130108951092130108958091120180 +:10460000681720F4861B80931201089510921201FE +:10461000089580911101681720F4861B8093110181 +:10462000089510921101089580911001681720F4E7 +:10463000861B8093100108951092100108950F9326 +:104640001F938D3109F46BC008F03FC08E3009F420 +:104650007FC0C0F4873009F469C068F4863009F07F +:10466000B1C08091CF01817F8E7F8093CF0181E0A7 +:104670008093DF01A8C0883009F4A2C08B3009F410 +:104680009FC0A0C0863109F49BC078F4803109F442 +:1046900072C0813109F096C00E94261790910D01D9 +:1046A00081E0892780930D018BC0893109F488C08E +:1046B0008B3109F087C08091CF0181FB222720F93F +:1046C00091E0922790FB81F94CC0853309F470C0CA +:1046D00048F4873209F46CC008F459C0893209F4EF +:1046E00067C070C0833438F48A3308F04EC0883312 +:1046F00009F466C067C0833409F45AC0883409F0ED +:1047000061C00E9426170FEF13ED20E30150104007 +:104710002040E1F700C000000E945E1E51C00E94D0 +:10472000A3240E9496110E948F0A4AC09091CF0143 +:10473000892F8095817080FB90F929F096609860B0 +:104740009093CF0140C0997F977F9093CF0138C05D +:104750008091CF0182FB222720F991E0922790FBE4 +:1047600082F98093CF01992359F18091CF01816023 +:104770008093CF0125C08091CF0183FB222720F9B0 +:1047800091E0922790FB83F9ECCF895301C08D51C2 +:1047900041E050E060E070E08A019B0104C0000F3E +:1047A000111F221F331F8A95D2F7C901B80104C017 +:1047B00061E070E080E090E00E94E21A0E9426171B +:1047C00081E001C080E01F910F91089580E008957D +:1047D00080E00895CF93C82F8091DF01813079F078 +:1047E00018F08230E9F187C0E0910E01F0910F01DD +:1047F0008081813169F0823209F07FC009C0E09187 +:104800000E01F0910F018081813111F0823261F44B +:104810008C2F0E94E623811104C08C2F0E941F233D +:104820001DC081E090E01AC08C2F0E94E823811106 +:1048300014C0C43179F048F4CB3079F0C03109F0BC +:1048400060C082E08093DF0108C0C93219F0C8332C +:1048500021F057C01092DF0154C081E0817053C035 +:10486000C93289F118F5C43171F1A8F4C73009F0E3 +:1048700046C08AE08093150194E19093140193E07F +:10488000909313018093120188E08093110188E2D4 +:104890008093100134C0CE51C63088F5EC2FF0E083 +:1048A000E65DFE4F80818093DE0129C0CE34E9F0C1 +:1048B00020F4CB3421F56AE013C0C13579F0C2355C +:1048C000F1F461E00DC08091DE01882319F01092AF +:1048D000DE0115C081E08093DF0115C061E006C0F4 +:1048E0008091DE010E9459220AC06AE08091DE01B7 +:1048F0000E94CF2204C01092DF0180E004C081E05A +:1049000002C080E0ABCFCF910895E1E8F0E0808174 +:10491000886080838081816080838FB7F89493E082 +:104920009093890090ED909388008FBF0895EFE6F3 +:10493000F0E08081826080830895EFE6F0E080817E +:104940008D7F80830895EFE6F0E0908182E08927F3 +:10495000808308951F920F920FB60F9211242F9308 +:104960003F934F935F936F937F938F939F93AF93F7 +:10497000BF93EF93FF938091E0019091E101019645 +:104980009093E1018093E001811103C082E00E94D5 +:104990008F0AE091E101E695E695F0E0E854F84FE2 +:1049A000E4918091E0018E1303C080E00E948F0AA1 +:1049B000FF91EF91BF91AF919F918F917F916F91F7 +:1049C0005F914F913F912F910F900FBE0F901F90CD +:1049D000189504D06894B1118DC0089570D088F0F6 +:1049E0009F5790F0B92F9927B751A0F0D1F0660FDB +:1049F000771F881F991F1AF0BA95C9F712C0B130F6 +:104A000081F077D0B1E0089574C0672F782F8827A0 +:104A1000B85F39F0B93FCCF3869577956795B39534 +:104A2000D9F73EF490958095709561957F4F8F4FA3 +:104A30009F4F0895E89409C097FB3EF490958095A8 +:104A4000709561957F4F8F4F9F4F9923A9F0F92F54 +:104A500096E9BB279395F695879577956795B795D2 +:104A6000F111F8CFFAF4BB0F11F460FF1BC06F5FB8 +:104A70007F4F8F4F9F4F16C0882311F096E911C0CA +:104A8000772321F09EE8872F762F05C0662371F0EB +:104A900096E8862F70E060E02AF09A95660F771FFF +:104AA000881FDAF7880F9695879597F9089557FD2F +:104AB0009058440F551F59F05F3F71F04795880F8C +:104AC00097FB991F61F09F3F79F087950895121623 +:104AD00013061406551FF2CF4695F1DF08C01616CF +:104AE00017061806991FF1CF869571056105089480 +:104AF0000895E894BB2766277727CB0197F9089597 +:104B00000BD078C069D028F06ED018F0952309F04A +:104B10005AC05FC01124EECFCADFA0F3959FD1F336 +:104B2000950F50E0551F629FF001729FBB27F00D5B +:104B3000B11D639FAA27F00DB11DAA1F649F6627B0 +:104B4000B00DA11D661F829F2227B00DA11D621FFF +:104B5000739FB00DA11D621F839FA00D611D221FB9 +:104B6000749F3327A00D611D231F849F600D211D9D +:104B7000822F762F6A2F11249F5750408AF0E1F040 +:104B800088234AF0EE0FFF1FBB1F661F771F881F89 +:104B900091505040A9F79E3F510570F014C0AACF24 +:104BA0005F3FECF3983EDCF3869577956795B79574 +:104BB000F795E7959F5FC1F7FE2B880F911D96959E +:104BC000879597F9089597F99F6780E870E060E00E +:104BD00008959FEF80EC089500240A941616170696 +:104BE00018060906089500240A94121613061406DE +:104BF00005060895092E0394000C11F4882352F041 +:104C0000BB0F40F4BF2B11F460FF04C06F5F7F4FF8 +:104C10008F4F9F4F089597FB072E16F4009407D0EF +:104C200077FD09D00E94252607FC05D03EF490951B +:104C300081959F4F0895709561957F4F0895EE0F70 +:104C4000FF1F0590F491E02D0994AA1BBB1B51E1B5 +:104C500007C0AA1FBB1FA617B70710F0A61BB70BEC +:104C6000881F991F5A95A9F780959095BC01CD0191 +:104C70000895F999FECF92BD81BDF89A992780B524 +:104C80000895A8E1B0E042E050E00C945C26262FA5 +:104C9000F999FECF1FBA92BD81BD20BD0FB6F89421 +:104CA000FA9AF99A0FBE019608950E944726272F77 +:104CB0000C944826DC01CB01FC01F999FECF06C01B +:104CC000F2BDE1BDF89A319600B40D9241505040CA +:084CD000B8F70895F894FFCF36 +:104CD8002002910A1F0BFC0AC80A940A0101BC01B0 +:104CE80028080A03140A3F4D363979072C07F606B7 +:104CF800BD065006690682069B06010203040506E6 +:044D0800070809008F :00000001FF diff --git a/keyboard/ergodox_ez/keymaps/osx_de/osx_de_highres.png b/keyboard/ergodox_ez/keymaps/osx_de/osx_de_highres.png index 8e709ee2..d442a992 100644 Binary files a/keyboard/ergodox_ez/keymaps/osx_de/osx_de_highres.png and b/keyboard/ergodox_ez/keymaps/osx_de/osx_de_highres.png differ diff --git a/keyboard/ergodox_ez/keymaps/osx_de/readme.md b/keyboard/ergodox_ez/keymaps/osx_de/readme.md index 44d7a334..5011a9dd 100644 --- a/keyboard/ergodox_ez/keymaps/osx_de/readme.md +++ b/keyboard/ergodox_ez/keymaps/osx_de/readme.md @@ -11,6 +11,12 @@ Dies ist nur ein kleiner Tweak der bestehenden firmware für das ErgoDox-EZ-Keyb - der Zehnerblock wurde in eine eigene Layer umgezogen - die Meh und Hyper-Tasten wurden in die Daumenblöcke umgezogen +# Erstellt Mit Dem ErgodoxLayoutGenerator + +Der ErgodoxLayoutGenerator ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein. +Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar). + + ------------------------------ @@ -26,3 +32,10 @@ This is only a little tweak of the existing default layout for the ErgoDox keyb - the symbollayer now has only symbols - the number block was moved to a special layer - meh and hyper went down to the thumb block + +# Created Using the ErgodoxLayoutGenerator + +The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed. + +The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/). + diff --git a/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c b/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c index 70ac8f01..72ed195e 100644 --- a/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c +++ b/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c @@ -1,229 +1,153 @@ -// Netable differences vs. the default firmware for the ErgoDox EZ: -// 1. The Cmd key is now on the right side, making Cmd+Space easier. -// 2. The media keys work on OSX (But not on Windows). #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" +#include "keymap_extras/keymap_french.h" +#include "keymap_extras/keymap_neo2.h" +#include "keymap_extras/keymap_uk.h" +#include "keymap_extras/keymap_colemak.h" +#include "keymap_extras/keymap_french_osx.h" +#include "keymap_extras/keymap_nordic.h" +#include "keymap_extras/keymap_dvorak.h" #include "keymap_extras/keymap_german.h" +#include "keymap_extras/keymap_norwegian.c" +#include "keymap_extras/keymap_fr_ch.h" +#include "keymap_extras/keymap_german_osx.h" +#include "keymap_extras/keymap_spanish.h" +#include "keymap_extras/keymap_bepo.h" -#define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys -#define ADNW 3 // media keys -#define NUMB 4 // number keys - +#define BASE 0 +#define SYMB 1 +#define MDIA 2 +#define QWERTZ 3 +#define NUMB 4 +#define UNUSED 0 +//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -// If it accepts an argument (i.e, is a function), it doesn't need KC_. -// Otherwise, it needs KC_* - -/* Keymap 0: ADNW-Koy layer - * ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts. - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 |Lctrl | |Rctrl | 6 | 7 | 8 | 9 | 0 | - | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | K | . | O | , | Y | CMD | | CMD | V | G | C | L | ß | Z | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ADNW | H | A | E | I | U |------| |------| D | T | R | N | S | F/L2 | - * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------| - * | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M |J/Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | " | ' | ? | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | . | ! | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | | | - * | | |------| |------| | | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// SYMBOLS -[SYMB] = KEYMAP( - // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_GRV,LSFT(KC_GRV),DE_EXLM,DE_QST,KC_TRNS,KC_TRNS, - KC_TRNS,DE_HASH,DE_DLR, LALT(LSFT(KC_7)),DE_SLSH,KC_DOT, - KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,LALT(KC_7),LALT(KC_N),KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS,KC_TRNS, - KC_TRNS, - KC_TRNS,KC_DEL,KC_TRNS, - // right hand - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12, - DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS, - KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST, - KC_TRNS,KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* Keymap 2: Media and mouse keys - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | Play | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | - * `----------------------------------' `----------------------------------' - * ,-------------. ,-------------. - * | | | | | | - * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | - * `--------------------' `--------------------' - */ -// MEDIA AND MOUSE -KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, - KC_TRNS, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - // right hand - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, - 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_MUTE, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, - KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RIGHT, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_WBAK -), -/* Keymap 3: qwertz layer - * - * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß | - * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ADNW | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/L2 | - * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------| - * | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift | - * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |event.pressed) { register_code(KC_RSFT); } else { unregister_code(KC_RSFT); } - break; - } - return MACRO_NONE; + + + +break; +} +return MACRO_NONE; }; // Runs just one time when the keyboard initializes. @@ -234,31 +158,18 @@ void matrix_init_user(void) { // Runs constantly in the background, in a loop. void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); +uint8_t layer = biton32(layer_state); + +ergodox_board_led_off(); +ergodox_right_led_1_off(); +ergodox_right_led_2_off(); +ergodox_right_led_3_off(); +switch (layer) { - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - case 3: - ergodox_right_led_3_on(); - break; - case 4: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); - //ergodox_board_led_on(); - break; - default: - // none - break; - } +default: +// none +break; +} }; + diff --git a/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy.hex b/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy.hex index 56448283..f574150e 100644 --- a/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy.hex +++ b/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy.hex @@ -1,1122 +1,1171 @@ -:100000000C9466020C94AD020C94AD020C94AD02FB -:100010000C94AD020C94AD020C94AD020C94AD02A4 -:100020000C94AD020C94AD020C94CF0B0C94A10C6B -:100030000C94AD020C94AD020C94AD020C94AD0284 -:100040000C94AD020C9415210C94AD020C94AD02ED -:100050000C94AD020C94A71A0C94AD020C94AD0252 -:100060000C94AD020C94AD020C94AD020C94AD0254 -:100070000C94AD020C94AD020C94AD020C94AD0244 -:100080000C94AD020C94AD020C94AD020C94AD0234 -:100090000C94AD020C94AD020C94AD020C94AD0224 -:1000A0000C94AD020C94AD020C94AD020E0D300D0B -:1000B000230E300D230E750D980D230EED0D000E41 -:1000C000EA10EA10191119115C119611A313A31368 -:1000D000AF11A313A412A4127713A313A3138E13A7 -:1000E0000000F0A1F0A329002B000354E1003581AA -:1000F00000001E00140004001D7164004D001F006C -:100100001A0016001B00E1044C0020000800070044 -:10011000060050002A0021001500090019004F00B8 -:100120004A00220017000A000500000002541908C6 -:10013000E3000000E20000002E770608E700000060 -:10014000E60000002E7F23001C000B0011000000C1 -:100150000454240018000D00100052004B0025002C -:100160000C000E00360051002C00260012000F007B -:100170003700E108280027001300330038713000F1 -:100180004E002D002F003482E50031810000010077 -:100190000100010001000100000001000100010058 -:1001A00001000100010001000100500001000100F8 -:1001B0000100010052005100010001000100010096 -:1001C00001004F00010001000100010001000100D9 -:1001D000010000000100010001000000010000001A -:1001E00001000100010000000100000001003F00CB -:1001F00052005100230200000100400024002100B1 -:100200001E00270001004100250022001F003700CA -:1002100001004200260023002000270001004300C7 -:100220003002300024022E0001004400450001008D -:1002300001000100000001000100010001000100B7 -:100240000000010001000100FB00010001000100AD -:100250000100F200F900010001000100F000F100CE -:10026000FA00F400010001000100F300FC00F500B9 -:100270000100010001000100F60000000100010082 -:100280000100000001000000010001000100000069 -:100290000100000001000100010001000100000058 -:1002A0000100010001000100A800A90001000100F7 -:1002B00001000100AC00AA00B6000100010001002D -:1002C000AB0050000100010001000100520051008C -:1002D0000100AE000100010001004F000000160304 -:1002E0004500720067006F0044006F007800200036 -:1002F00045005A00000016034500720067006F00B9 -:1003000044006F007800200045005A0000000403FC -:10031000090409026D00040100A0FA0904000001AB -:1003200003010100092111010001223F000705819D -:100330000308000A09040100010301020009211158 -:10034000010001224D000705820308000A0904028A -:1003500000010300000009211101000122360007FD -:1003600005830308000A09040300010300000009D3 -:100370002111010001223900070584031000011238 -:1003800001100100000008EDFE071301000102004A -:100390000105010906A101050719E029E715002556 -:1003A0000195087501810205081901290595057552 -:1003B000019102950175039101050719002977152F -:1003C000002501957875018102C005010980A10110 -:1003D000850216010026B7001A01002AB700751021 -:1003E00095018100C0050C0901A1018503160100DA -:1003F000269C021A01002A9C02751095018100C0FA -:1004000005010902A1010901A10005091901290538 -:10041000150025019505750181029501750381017E -:100420000501093009311581257F9502750881067E -:1004300009381581257F950175088106050C0A3854 -:10044000021581257F950175088106C0C005010947 -:1004500006A101050719E029E71500250195087592 -:100460000181029501750881010508190129059589 -:100470000575019102950175039101050719002980 -:10048000FF150025FF950675088100C000000000DB -:1004900000000000000000010204060A0F17202CD3 -:1004A0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9CF -:1004B000DAC7B39D87715D4A3A2C20170F0A0604EC -:1004C00002010000000000000000000011241FBE17 -:1004D000CFEFDAE0DEBFCDBF04B603FE27C08091C8 -:1004E000ED019091EE01A091EF01B091F001873004 -:1004F000904BA740B04BD1F41092ED011092EE0159 -:100500001092EF011092F00114BE84B7877F84BF70 -:100510000FB6F894A8958091600088618093600080 -:10052000109260000FBEE0E0FFE3099511E0A0E04B -:10053000B1E0ECECF5E402C005900D92A433B107F4 -:10054000D9F721E0A4E3B1E001C01D92AD3EB207AE -:10055000E1F70E9416090C94E4220C94000061114A -:100560000BC0FC018281882321F085EE0E94840F5C -:1005700003C085EE0E944C1080E090E0089508953D -:100580006091B1017091B2018091B3019091B40179 -:100590000E94D41956985E9825982D9826982E98E2 -:1005A00027982F98823061F018F4813031F0089547 -:1005B000833059F0843039F00895259A2D9A0895A2 -:1005C000269A2E9A0895259A2D9A279A2F9A089559 -:1005D0000C94C00256985E9825982D9826982E98CF -:1005E00027982F988FEF90E0909389008093880050 -:1005F00090938B0080938A0090938D0080938C0061 -:10060000259A2D9A2FEF80E792E02150804090406C -:10061000E1F700C00000269A2E9A2FEF80E792E0C3 -:10062000215080409040E1F700C00000279A2F9AA7 -:100630002FEF80E792E0215080409040E1F700C02A -:10064000000025982D982FEF80E792E02150804000 -:100650009040E1F700C0000026982E982FEF80E729 -:1006600092E0215080409040E1F700C000002798C0 -:100670002F9856985E9825982D9826982E9827980A -:100680002F98089589EA8093800089E08093810003 -:1006900024982C983F988AB18F748AB96E98479A9B -:1006A0008BB1806B8BB9769A0E94EA020C94BF02E0 -:1006B00080E2809300018091340181110EC00E947C -:1006C000A70381E0809334012FEF83ED90E3215065 -:1006D00080409040E1F700C0000080E40E94AD033C -:1006E0008093000181112EC00E94D70380930001E6 -:1006F000811128C00E94D70380930001811122C07C -:100700008FE30E94D7038093000181111BC00E94D8 -:10071000CF0380E40E94AD0380930001811112C0D9 -:100720008CE00E94D7038093000181110BC00E94CE -:10073000D70380930001811105C08FE30E94D70386 -:10074000809300010E94CF038091000108951092D0 -:10075000B9008AE08093B800089594EA9093BC00B1 -:100760009091BC0097FFFCCF9091B900987F983092 -:1007700021F0903111F081E008958093BB0084E86E -:100780008093BC008091BC0087FFFCCF8091B900B2 -:10079000887F883111F0803471F780E0089584E912 -:1007A0008093BC008091BC0084FDFCCF08958093B1 -:1007B000BB0084E88093BC008091BC0087FFFCCF25 -:1007C0009091B900987F81E0983209F480E0089513 -:1007D00084E88093BC008091BC0087FFFCCF8091AF -:1007E000BB00089580910001811115C080E40E9432 -:1007F000AD038093000181110CC082E10E94D703F8 -:1008000080930001811105C08FEF0E94D703809370 -:1008100000010E94CF0384B1807F84B985B1807FBD -:1008200085B98AB1837F8AB98BB1837F8BB93E98B2 -:10083000469808950E945803809300010E94F20395 -:1008400080B38C7080BB81B3836F81BBE4E4F1E043 -:10085000A6E3B1E011921D9281E0E235F807D1F7ED -:100860000C9442039F92AF92BF92CF92DF92EF928D -:10087000FF920F931F93CF93DF9380910001882302 -:1008800079F0809135018F5F80933501811108C027 -:100890000E94580380930001811102C00E94EA0265 -:1008A00086E3E82E81E0F82E8701C0E0D0E0BB248B -:1008B000B39492E0A92ECC24C394D12CC730D10597 -:1008C00000F580910001811164C080E40E94AD03B5 -:1008D00080930001811112C082E10E94D7038093AE -:1008E000000181110BC0C6010C2E01C0880F0A94B3 -:1008F000EAF780950E94D703809300010E94CF03FE -:1009000048C0CA30A1F028F4C83059F0C93061F0AD -:1009100005C0CC3089F070F0CD3089F0209A28984D -:1009200010C0219A29980DC0229A2A980AC0239AA9 -:100930002B9807C0529A01C0539A5B9802C03E9A06 -:100940004698E0EAEA95F1F78FB181708B257999A5 -:1009500002C032E001C030E0832B7C9902C034E059 -:1009600001C030E0832B7D9902C028E001C020E067 -:10097000822B7E9902C090E101C090E0892B9FB14B -:100980009095991F9927991F9295990F907E892B81 -:100990000FC08091000181114AC080E40E94AD0324 -:1009A00080930001882381F1912C0E94CF03892D2F -:1009B000D8019C91981719F08C93A09201010E9484 -:1009C000F20321960F5F1F4FCE30D10509F076CF8D -:1009D00080910101882369F181508093010188236E -:1009E00039F0EFE9FFE03197F1F700C0000021C0D6 -:1009F000E4E4F1E0D7018D917D018193B4E4EB163D -:100A0000B1E0FB06B9F715C083E10E94D7038093DC -:100A100000018111C9CF81E40E94AD0380930001E0 -:100A20008111C2CF0E94E803982E9094BECF80E03F -:100A3000BFCF0E94E80281E0DF91CF911F910F911B -:100A4000FF90EF90DF90CF90BF90AF909F90089570 -:100A5000E82FF0E0EC5BFE4F8081089508958B3B1A -:100A6000910580F4883A910548F5853A9105D8F4C6 -:100A70008430910508F0B2C0019709F06EC081E0A2 -:100A800090E00895803E910508F467C0883E910586 -:100A900008F4A4C09C01205F31092031310508F021 -:100AA0005CC090650895853A910509F459C0863A6D -:100AB000910509F058C082E890E40895883A9105BC -:100AC00009F454C0893A910509F453C08A3A910552 -:100AD00009F452C08B3A910509F451C08C3A910542 -:100AE00009F450C08D3A910509F44FC0803B91053F -:100AF00009F44EC08E3A910509F44DC08F3A910524 -:100B000009F44CC0813B910509F44BC0823B91052F -:100B100009F44AC0833B910509F449C0843B91051F -:100B200009F448C0853B910509F447C0863B91050F -:100B300009F446C0873B910509F445C0883B9105FF -:100B400009F444C0893B910509F443C08A3B9105EF -:100B500009F442C080E094E4089580E090E00895B4 -:100B600081E890E4089583E890E4089582EE94E4A7 -:100B7000089589EE94E408958AEE94E4089585EB4F -:100B800094E4089586EB94E4089587EB94E4089543 -:100B90008CEC94E408958DEC94E4089583E895E456 -:100BA00008958AE895E4089582E995E4089584E932 -:100BB00095E4089581E296E4089583E296E4089529 -:100BC00084E296E4089585E296E4089586E296E448 -:100BD000089587E296E408958AE296E408950895D8 -:100BE00024E5829FC0011124FC0126E0729FE00DE4 -:100BF000F11D1124E60FF11DEE0FFF1FEA51FF4F0B -:100C0000859194910895880F991FFC01E05AF04056 -:100C1000859194910895880F991FFC01E052FF4F30 -:100C200085919491089524E5829FC0011124FC01CF -:100C300046E0749FE00DF11D1124E60FF11DEE0F4B -:100C4000FF1FEA51FF4F859194919C013A95211520 -:100C50004FE1340708F425C13F512115304120F4FC -:100C60009F700E940B0608959C013053211530415E -:100C700018F49927906C0895811520E5920769F47E -:100C80000E94C5134FEF84E39CE0415080409040A8 -:100C9000E1F700C000000C94CC1A813020E59207E7 -:100CA00031F48091CC0181608093CC0108959C0146 -:100CB00030552115304108F05CC0292F33272F70A3 -:100CC000332721303105E9F4AC0164E0440F551FAE -:100CD0006A95E1F744275370BC016370772702C01F -:100CE000220F331F6A95E2F73C68242B352B73E003 -:100CF000880F991F7A95E1F780769927822B932B9D -:100D000008952230310529F4982F8827816F906A41 -:100D1000089523303105A1F4AC0133E0440F551F91 -:100D20003A95E1F7407E57708370992721E030E0D3 -:100D300002C0220F331F8A95E2F7C9019C6816C0D2 -:100D40002430310531F5AC0123E0440F551F2A95BD -:100D5000E1F7407E57708370992721E030E002C0B0 -:100D6000220F331F8A95E2F7C9019A68842B952BCD -:100D700008959C0130572115304118F49F709062FE -:100D800008959C0130582115304118F49F70906AE5 -:100D90000895803E9105E0F4803C910558F581333B -:100DA000910509F46FC048F48932910509F463C0D4 -:100DB0008A32910509F46DC072C089339105E9F05A -:100DC00082389105D1F08533910509F44DC067C093 -:100DD000833E910581F138F4803E9105B9F0823E61 -:100DE0009105D9F05CC0863E910561F1873E910581 -:100DF000A1F155C00E94030608952091DE0120FD57 -:100E000002C021FF4CC080EE90E049C08091DE011D -:100E100080FFF9CF89E390E042C08091DE0182FF3C -:100E20000EC08091DE0184FF03C080E090E037C0F7 -:100E300083EE90E034C08091DE0182FFF2CF82EE3B -:100E400090E02DC08091DE0183FF0BC08091DE0118 -:100E500084FDEBCF87EE90E022C08091DE0183FF1E -:100E6000F5CF86EE90E01BC08091DE0185FF07C0C4 -:100E700089E290E014C08091DE0185FFF9CF85E31F -:100E800090E00DC08091DE0186FF07C08AE290E00D -:100E900006C08091DE0186FFF9CF81E390E00E94D9 -:100EA0002F0508950895809162010895CF93DF93EF -:100EB00000D01F92CDB7DEB79C018091E401843051 -:100EC00019F593E099833B832A839093E9008FEF90 -:100ED0009091E800815095FD06C095ED9A95F1F747 -:100EE00000008111F5CF8091E80085FF0DC040E042 -:100EF00050E063E070E0CE0101960E94C30980914A -:100F0000E8008E778093E8000F900F900F90DF91AC -:100F1000CF910895CF93DF9300D01F92CDB7DEB766 -:100F20002091E401243021F522E029839B838A83E8 -:100F300083E08093E9008FEF9091E800815095FD68 -:100F400006C095ED9A95F1F700008111F5CF8091DB -:100F5000E80085FF0DC040E050E063E070E0CE01A6 -:100F600001960E94C3098091E8008E778093E80083 -:100F70000F900F900F90DF91CF9108959C01809179 -:100F8000E4018430F9F482E08093E9009FEF8091DE -:100F9000E800915085FD06C085ED8A95F1F70000C7 -:100FA0009111F5CF8091E80085FF0CC040E050E042 -:100FB00065E070E0C9010E94C3098091E8008E7766 -:100FC0008093E8000895CF93DF93EC018091E401D2 -:100FD000843009F046C090910C019923D9F090918A -:100FE0000D019923B9F08093E9008FEF9091E8000B -:100FF000815095FD06C095E19A95F1F700008111A9 -:10100000F5CF8091E80085FF2CC040E050E060E122 -:1010100070E017C081E08093E9008FEF9091E800C5 -:10102000815095FD06C095ED9A95F1F7000081116C -:10103000F5CF8091E80085FF14C040E050E068E003 -:1010400070E0CE010E94C3098091E8008E77809302 -:10105000E80080E1FE01A2E5B1E001900D928A95E1 -:10106000E1F7DF91CF9108958091E301811109C0EB -:101070000E94540B0E94B10B8091E2008460809327 -:10108000E20008951092E301089508950C9402215E -:101090000E94621A0E9408210E945C0E0C94520762 -:1010A00042E061EC81E00E94CD0A42E061EC82E026 -:1010B0000E94CD0A42E061EC83E00E94CD0A42E149 -:1010C00061EC84E00C94CD0A8091E601833009F450 -:1010D00055C030F4813071F0823009F48EC008952B -:1010E0008A3009F47AC08B3009F460C0893009F085 -:1010F0009CC020C08091E501813A09F096C08091A2 -:10110000E800877F8093E8008091E9019091EA01EF -:10111000892B21F460E182E591E003C060E080E08A -:1011200090E070E00E940E0A8091E8008B77809337 -:10113000E80008958091E501813209F076C0809140 -:10114000E9019091EA01009719F0039709F06DC049 -:101150008091E800877F8093E8008091E80082FD1D -:1011600005C08091E4018111F8CF5FC08091F1004A -:10117000809362018091E8008B7753C08091E501F4 -:10118000813A09F052C08091E9019091EA01892BDE -:1011900009F04BC08091E800877F8093E800809140 -:1011A000E80080FFFCCF80910C0136C08091E50102 -:1011B0008132D9F58091E9019091EA01892BA9F555 -:1011C0008091E800877F8093E8000E94020B809165 -:1011D000E70180930C010C94C5138091E5018132E5 -:1011E00021F58091E800877F8093E8000E94020B40 -:1011F0008091E8018093630108958091E501813A2F -:10120000A1F48091E800877F8093E8008091E80056 -:1012100080FFFCCF809163018093F1008091E80012 -:101220008E778093E8000C94020B089584B7877F33 -:1012300084BF0FB6F894A895809160008861809370 -:101240006000109260000FBE90E080E80FB6F89446 -:1012500080936100909361000FBE0E94AB0E0E94CC -:10126000540B0E94B10B8091E20084608093E200F5 -:1012700078940E943C0E0E94AD0E82E091E00E94A4 -:10128000570E0E94F0208091E401853069F40E949D -:10129000241A8091E2018823B1F30E944E1A882318 -:1012A00091F30E94AD09EFCF0E94B30EECCF292F2E -:1012B000332723303105C9F060F42130310581F046 -:1012C0002230310509F041C08DE690E022E133E0A3 -:1012D00040C021323105E1F02232310531F135C013 -:1012E00082E190E02FE733E034C099278130910507 -:1012F00049F028F0029749F5EEEDF2E005C0EEE086 -:10130000F3E002C0E6EFF2E0849190E09F0121C09B -:101310006430D8F4E62FF0E0EE0FFF1FEE5DFE4FD5 -:101320002081318189E090E014C0643070F470E075 -:10133000FB01EE0FFF1FE65EFE4F20813181FB01B6 -:10134000EA5EFE4F808190E004C080E090E020E003 -:1013500030E0FA0131832083089580E189BD82E184 -:1013600089BD09B400FEFDCF8091D8008F7D8093A8 -:10137000D8008091E00082608093E0008091E000DE -:1013800081FDFCCF0895CF92DF92EF92FF920F93F1 -:101390001F93CF93DF93EC018B016A010E94210B15 -:1013A000811133C0C114D10439F0F60180819181DB -:1013B000081B190BC80FD91FE12CF12C01151105C1 -:1013C00019F18091E80085FD16C08091E8008E77C4 -:1013D0008093E800C114D10449F0F6018081918125 -:1013E000E80EF91EF182E08285E00FC00E94210B19 -:1013F000882321F30AC089918093F10001501109DB -:10140000FFEFEF1AFF0ADACF80E0DF91CF911F9153 -:101410000F91FF90EF90DF90CF9008952091EB0116 -:101420003091EC012617370748F06115710539F442 -:101430002091E8002E772093E80001C0B901FC015B -:1014400020E06115710579F18091E4018823F1F1C3 -:101450008530F1F18091E80083FD3CC08091E80087 -:1014600082FD2EC08091E80080FFEBCF2091F30039 -:101470008091F20090E0922B6115710551F0883057 -:10148000910538F421912093F10061507109019682 -:10149000F3CF21E0089709F020E08091E8008E77F3 -:1014A0008093E800CECF2111CFCF0AC08091E40114 -:1014B000882361F0853061F08091E80083FD0AC0E7 -:1014C0008091E80082FFF2CF80E0089582E00895E5 -:1014D00083E0089581E008952091EB013091EC01C3 -:1014E0002617370748F06115710539F42091E80097 -:1014F0002E772093E80001C0B901FC0120E06115BE -:10150000710591F18091E401882309F440C0853090 -:1015100009F43FC08091E80083FD3DC08091E80060 -:1015200082FD2FC08091E80080FFE9CF2091F30079 -:101530008091F20090E0922B6115710559F088308E -:10154000910540F424912093F10031966150710986 -:101550000196F2CF21E0089709F020E08091E800A1 -:101560008E778093E800CBCF2111CCCF0AC0809139 -:10157000E401882361F0853061F08091E80083FD0B -:101580000AC08091E80082FFF2CF80E0089582E0F7 -:10159000089583E0089581E00895982F973068F5C5 -:1015A0009093E900981739F07091EC002091ED00CC -:1015B0005091F00003C0242F762F50E021FD02C08F -:1015C0009F5FECCF3091EB003E7F3093EB0030918A -:1015D000ED003D7F3093ED003091EB0031603093B2 -:1015E000EB007093EC002093ED005093F0002091FD -:1015F000EE0027FDE5CF80E008958F708093E9002D -:1016000081E008958091E50187FF11C08091E80095 -:1016100082FD05C08091E4018111F8CF11C0809155 -:10162000E8008B770BC08091E401882349F080911A -:10163000E80080FFF8CF8091E8008E778093E80083 -:1016400008952091E4003091E50095E64091EC008A -:10165000842F817040FF23C08091E80080FD1DC071 -:101660008091E401882399F0853099F08091EB0016 -:1016700085FD11C04091E4005091E5002417350725 -:1016800029F3915011F09A01E1CF84E0089582E0AE -:10169000089583E0089581E0089580E008954091E1 -:1016A000E80042FFDDCF08950E94C20B0E94CA0BE2 -:1016B000E0EEF0E0808181608083E8EDF0E0808101 -:1016C0008F77808319BCA7EDB0E08C918E7F8C93CF -:1016D00080818F7E80831092E30108950F931F9382 -:1016E000CF93DF930E94C20B0E94CA0BC8EDD0E0DB -:1016F00088818F77888388818068888388818F7DBF -:10170000888319BC1092E4011092E0011092E2016A -:101710001092E10100EE10E0F80180818B7F808360 -:1017200088818160888342E060E080E00E94CD0A89 -:10173000E1EEF0E080818E7F8083E2EEF0E0808158 -:1017400081608083808188608083F80180818E7FC2 -:101750008083888180618883DF91CF911F910F9171 -:101760000895E8EDF0E080818F7E8083E7EDF0E082 -:1017700080818160808384E082BF81E08093E30187 -:101780000C946E0BE8EDF0E080818E7F80831092E8 -:10179000E20008951092DA001092E10008951F927D -:1017A0000F920FB60F9211242F933F934F935F9395 -:1017B0006F937F938F939F93AF93BF93EF93FF9319 -:1017C0008091E10082FF0BC08091E20082FF07C0A0 -:1017D0008091E1008B7F8093E1000E943B0E80911D -:1017E000DA0080FF1FC08091D80080FF1BC080916D -:1017F000DA008E7F8093DA008091D90080FF0DC0DF -:1018000080E189BD82E189BD09B400FEFDCF81E0A0 -:101810008093E4010E94340805C019BC1092E401D1 -:101820000E9442088091E10080FF19C08091E2008F -:1018300080FF15C08091E2008E7F8093E20080914E -:10184000E20080618093E2008091D8008062809302 -:10185000D80019BC85E08093E4010E94460880917D -:10186000E10084FF30C08091E20084FF2CC080E161 -:1018700089BD82E189BD09B400FEFDCF8091D80009 -:101880008F7D8093D8008091E1008F7E8093E1006E -:101890008091E2008F7E8093E2008091E20081607F -:1018A0008093E2008091E001882311F084E007C07A -:1018B0008091E30087FD02C081E001C083E0809356 -:1018C000E4010E9448088091E10083FF29C08091D3 -:1018D000E20083FF25C08091E100877F8093E100D3 -:1018E00082E08093E4011092E0018091E1008E7F1C -:1018F0008093E1008091E2008E7F8093E2008091EE -:10190000E20080618093E20042E060E080E00E94BB -:10191000CD0A8091F00088608093F0000E94450815 -:10192000FF91EF91BF91AF919F918F917F916F91B7 -:101930005F914F913F912F910F900FBE0F901F908D -:1019400018951F920F920FB60F9211242F933F9369 -:101950004F935F936F937F938F939F93AF93BF93B7 -:10196000CF93DF93EF93FF93C091E900CF70809105 -:10197000EC00D82FD17080FDD0E81092E900809162 -:10198000F000877F8093F00078940E94E50C10921D -:10199000E9008091F00088608093F000CD2BCF703B -:1019A000C093E900FF91EF91DF91CF91BF91AF918B -:1019B0009F918F917F916F915F914F913F912F9167 -:1019C0000F900FBE0F901F9018951F93CF93DF932A -:1019D000CDB7DEB7AA970FB6F894DEBF0FBECDBF66 -:1019E000E5EEF1E08091F100819321E0ED3EF20718 -:1019F000C9F70E9464088091E80083FF24C18091A8 -:101A0000E5019091E601492F50E04A30510508F078 -:101A10001AC1FA01EA5AFF4F0C949922803881F0DA -:101A2000823809F010C18091E9018F708093E9003C -:101A30008091EB0085FB882780F91092E90006C0B1 -:101A40008091E1019091E201911182609091E80012 -:101A5000977F9093E8008093F1001092F100C8C046 -:101A6000282F2D7F09F0EFC0882319F0823061F014 -:101A7000EAC08091E701813009F0E5C0933009F0B8 -:101A800080E08093E2012BC08091E701811127C0A3 -:101A90008091E9018F7009F4D6C08093E90020910C -:101AA000EB0020FF1CC0933021F48091EB0080629A -:101AB00014C09091EB0090619093EB0021E030E036 -:101AC000A90102C0440F551F8A95E2F74093EA002E -:101AD0001092EA008091EB0088608093EB001092F6 -:101AE000E9008091E800877F86C08111ACC0109129 -:101AF000E7011F778091E3008078812B8093E300DA -:101B00008091E800877F8093E8000E94020B80911B -:101B1000E80080FFFCCF8091E30080688093E300C1 -:101B2000111102C082E001C083E08093E4018BC008 -:101B30008058823008F087C08091E7019091E801D9 -:101B40008C3D53E0950779F583E08A838AE28983A7 -:101B50004FB7F894DE01139620E03EE051E2E32F08 -:101B6000F0E050935700E49120FF03C0E295EF703E -:101B70003F5FEF708E2F90E0EA3010F0C79601C003 -:101B8000C0968D939D932F5F243149F74FBF80916D -:101B9000E800877F8093E8006AE270E0CE0101965A -:101BA0000E940E0A14C0AE014F5F5F4F6091E901C1 -:101BB0000E945709BC01892B09F445C09091E800A7 -:101BC000977F9093E80089819A810E946C0A8091A6 -:101BD000E8008B778093E80036C08038A1F58091CB -:101BE000E800877F8093E8008091E0018093F10016 -:101BF0008091E8008E778093E8000E94020B23C05A -:101C0000811121C08091E7019091E8019927029705 -:101C1000D4F48091E800877F8093E8008091E70109 -:101C20008093E0010E94020B8091E001811106C0C7 -:101C30008091E30087FD02C081E001C084E08093D1 -:101C4000E4010E9450088091E80083FF0AC080915F -:101C5000E800877F8093E8008091EB0080628093AA -:101C6000EB00AA960FB6F894DEBF0FBECDBFDF9192 -:101C7000CF911F9108950895CF938091E401882317 -:101C8000A1F0C091E900CF709091EC00892F817094 -:101C900090FD80E8C82B1092E9008091E80083FD58 -:101CA0000E94E50CCF70C093E900CF910895909306 -:101CB0006901809368010895E0916801F0916901DC -:101CC000309721F00190F081E02D099480E0089593 -:101CD000E0916801F0916901309721F00280F38171 -:101CE000E02D09940895E0916801F0916901309721 -:101CF00021F00480F581E02D09940895209166017A -:101D0000309167012817390771F09093670180932C -:101D10006601E0916801F0916901309721F0068039 -:101D2000F781E02D099408952091640130916501B7 -:101D30002817390771F09093650180936401E09151 -:101D40006801F0916901309721F00084F185E02D60 -:101D50000994089508950C94AA0E0E94681A0E948E -:101D60001A040C942E1BCF92DF92EF92FF920F93E6 -:101D70001F93CF93DF93CDB7DEB72B970FB6F894B1 -:101D8000DEBF0FBECDBF0E9432048BE6C82E81E0BD -:101D9000D82E00E010E0E02E802F0E942805F601EA -:101DA00041916F01F82EF426B1F40F5F1F4F0E30F2 -:101DB000110589F78FEF89838A831B820E94711A2C -:101DC0008160782F9D838C8349815A816B818D81BD -:101DD0000E94560F40C09091CC0191FF04C08B87A8 -:101DE0000E942E058B8520E030E04F2D50E0922F91 -:101DF000BA01022E02C0759567950A94E2F760FF5A -:101E000024C02E83EF8221E030E0690102C0CC0CB7 -:101E1000DD1C9A95E2F790E08C219D21892B09F435 -:101E200020E028870E94711A8160782F9A8789871D -:101E30004E815F8168858A850E94560FF801E559B9 -:101E4000FE4F8081C826C08206C02F5F3F4F2630DC -:101E5000310569F6AACF0E94151E0E945C0E909172 -:101E60006A018917A1F00E945C0E80936A012B968B -:101E70000FB6F894DEBF0FBECDBFDF91CF911F919B -:101E80000F91FF90EF90DF90CF900C9452072B961C -:101E90000FB6F894DEBF0FBECDBFDF91CF911F917B -:101EA0000F91FF90EF90DF90CF900895CF93DF9345 -:101EB000CDB7DEB72B970FB6F894DEBF0FBECDBF00 -:101EC0004F83588769877A878B87DE01119686E072 -:101ED000FD0111928A95E9F785E0FE0137960190A0 -:101EE0000D928A95E1F749815A816B817C818D81C0 -:101EF0009E810E9459162B960FB6F894DEBF0FBE36 -:101F0000CDBFDF91CF910895CF93C82F882309F4D7 -:101F1000C1C0823859F40E945C0E81FDBBC089E3C8 -:101F20000E94F6180E94AE1989E30CC0833879F438 -:101F30000E945C0E80FDAEC083E50E94F6180E94F0 -:101F4000AE1983E50E943519CF910C94AE198438EF -:101F500059F40E945C0E82FD9DC087E40E94F61831 -:101F60000E94AE1987E4EECF8CEF8C0F813A48F4D3 -:101F70008C2F0E94552081118DC08C2F0E94F61845 -:101F8000E3CF80E28C0F883048F4C77081E001C055 -:101F9000880FCA95EAF70E947719D6CF8BE58C0F88 -:101FA000833078F4C53A29F0C63A31F083E890E0FE -:101FB00005C081E890E002C082E890E0CF910C94E7 -:101FC0007E0E88E58C0F833108F064C0C83A39F181 -:101FD000C93A41F1CA3A49F1CB3A51F1CC3A59F1F7 -:101FE000CD3A61F1C03B69F1CE3A71F1CF3A79F166 -:101FF000C13B81F1C23B89F1C33B91F1C43B99F1F3 -:10200000C53BA1F1C63BA9F1C73BB1F1C83BB9F152 -:10201000C93BC1F1CA3BC9F180E090E038C082EE13 -:1020200090E035C089EE90E032C08AEE90E02FC09B -:1020300085EB90E02CC086EB90E029C087EB90E028 -:1020400026C08CEC90E023C08DEC90E020C083E8AB -:1020500091E01DC08AE891E01AC082E991E017C0C2 -:1020600084E991E014C081E292E011C083E292E041 -:102070000EC084E292E00BC085E292E008C086E2E6 -:1020800092E005C087E292E002C08AE292E0CF913E -:102090000C94940ECF910895882309F44BC0823894 -:1020A00059F40E945C0E81FF45C089E30E94F61836 -:1020B0000E94AE1989E30CC0833871F40E945C0E53 -:1020C00080FF38C083E50E94F6180E94AE1983E5B0 -:1020D0000E9435190C94AE19843859F40E945C0E94 -:1020E00082FF28C087E40E94F6180E94AE1987E498 -:1020F000EFCF9CEF980F913A58F390E2980F9830F9 -:1021000050F4877091E001C0990F8A95EAF7892F02 -:102110000E947D19DFCF9BE5980F933020F480E07B -:1021200090E00C947E0E885A833120F480E090E099 -:102130000C94940E0895882321F00E9477190C9432 -:10214000AE190895882321F00E947D190C94AE19D0 -:102150000895BF92CF92DF92EF92FF920F931F9359 -:10216000CF93DF9300D000D000D0CDB7DEB77C0195 -:1021700085E0F701DE01119601900D928A95E1F755 -:10218000F70183819481892B09F4DDC290818181DB -:102190008F3F19F49F3F09F4D6C2F70102812581D0 -:1021A00022952F7099838A8389819A812E830E9438 -:1021B000B518182FB92E0E94B4180E947B17EB2D6A -:1021C000E295EF704E2F50E0FA01E05AFF4F2E815A -:1021D0000C9499228B2D807F9B2D9F70F92E882344 -:1021E00019F0F29480EFF822002349F0FF2009F45F -:1021F00057C28F2D0E9487190E94AE1951C2812F9C -:102200000E944C10FF2009F49EC28F2D0E948D1950 -:1022100026960FB6F894DEBF0FBECDBFDF91CF91EB -:102220001F910F91FF90EF90DF90CF90BF900C9493 -:10223000AE193B2D307F8B2D8F70303211F082958F -:10224000807F112319F0113021F12CC00023B9F047 -:10225000222309F490C1213009F08DC126960FB6D2 -:10226000F894DEBF0FBECDBFDF91CF911F910F91CC -:10227000FF90EF90DF90CF90BF900C94971922239E -:1022800019F0213009F45FC28E830E949A198E8161 -:1022900086C1002321F0223008F055C26CC1211103 -:1022A00052C27DC1002321F0222309F464C1F8C188 -:1022B000222309F474C109C28B2D869586958370FB -:1022C00019F08130D1F03FC2002321F0812F9B2DE6 -:1022D000937002C080E090E026960FB6F894DEBFBF -:1022E0000FBECDBFDF91CF911F910F91FF90EF9067 -:1022F000DF90CF90BF900C947E0E002321F0812FB1 -:102300009B2D937002C080E090E026960FB6F89463 -:10231000DEBF0FBECDBFDF91CF911F910F91FF9018 -:10232000EF90DF90CF90BF900C94940E812F0023FC -:1023300019F00E941D1D02C00E94851D26960FB631 -:10234000F894DEBF0FBECDBFDF91CF911F910F91EB -:10235000FF90EF90DF90CF90BF900C940A1E8B2DD2 -:10236000837009F075C00111EEC1812F82958695A9 -:102370008770880F880F912F9F70C92ED12CE12C68 -:10238000F12C082E04C0CC0CDD1CEE1CFF1C0A94A2 -:10239000D2F714FF12C00FE010E020E030E004C0DC -:1023A000000F111F221F331F8A95D2F7C901B801F0 -:1023B000609570958095909503C060E070E0CB01CA -:1023C0004B2D4695469543704230C1F060F56C291F -:1023D0007D298E299F29413051F126960FB6F89418 -:1023E000DEBF0FBECDBFDF91CF911F910F91FF9048 -:1023F000EF90DF90CF90BF900C94A2176C297D29AD -:102400008E299F2926960FB6F894DEBF0FBECDBF4A -:10241000DF91CF911F910F91FF90EF90DF90CF90C0 -:10242000BF900C94BE170E94A217C701B601269652 -:102430000FB6F894DEBF0FBECDBFDF91CF911F91D5 -:102440000F91FF90EF90DF90CF90BF900C94861784 -:10245000002319F08B2D817001C08695882309F423 -:1024600072C1812F829586958770880F880F912F72 -:102470009F70C92ED12CE12CF12C082E04C0CC0C5D -:10248000DD1CEE1CFF1C0A94D2F714FF12C00FE0F3 -:1024900010E020E030E004C0000F111F221F331FA6 -:1024A0008A95D2F7C901B80160957095809590958D -:1024B00003C060E070E0CB014B2D4695469543701C -:1024C0004230C1F060F56C297D298E299F29413069 -:1024D00051F126960FB6F894DEBF0FBECDBFDF9147 -:1024E000CF911F910F91FF90EF90DF90CF90BF9011 -:1024F0000C947C186C297D298E299F2926960FB66D -:10250000F894DEBF0FBECDBFDF91CF911F910F9129 -:10251000FF90EF90DF90CF90BF900C9498180E949E -:102520007C18C701B60126960FB6F894DEBF0FBE21 -:10253000CDBFDF91CF911F910F91FF90EF90DF9072 -:10254000CF90BF900C946018103FD1F118F4103E5A -:1025500050F4A1C0123F09F463C008F44CC0133F0B -:1025600009F473C098C01F708B2D8F710023A1F0E8 -:102570000E94F917812F26960FB6F894DEBF0FBE82 -:10258000CDBFDF91CF911F910F91FF90EF90DF9022 -:10259000CF90BF900C949B100E941A18812F269602 -:1025A0000FB6F894DEBF0FBECDBFDF91CF911F9164 -:1025B0000F91FF90EF90DF90CF90BF900C94A210FE -:1025C0000023A9F02111BFC08B2D8F7126960FB665 -:1025D000F894DEBF0FBECDBFDF91CF911F910F9159 -:1025E000FF90EF90DF90CF90BF900C943F18223077 -:1025F00008F0A9C0E9CF0023A9F08B2D8F71269692 -:102600000FB6F894DEBF0FBECDBFDF91CF911F9103 -:102610000F91FF90EF90DF90CF90BF900C94F9173F -:10262000002359F38B2D8F7126960FB6F894DEBFD9 -:102630000FBECDBFDF91CF911F910F91FF90EF9013 -:10264000DF90CF90BF900C941A18002399F08B2D37 -:102650008F7126960FB6F894DEBF0FBECDBFDF9107 -:10266000CF911F910F91FF90EF90DF90CF90BF908F -:102670000C94E41726960FB6F894DEBF0FBECDBFBC -:10268000DF91CF911F910F91FF90EF90DF90CF904E -:10269000BF900C94DA170023A9F0222309F4ADCFE0 -:1026A000812F26960FB6F894DEBF0FBECDBFDF9107 -:1026B000CF911F910F91FF90EF90DF90CF90BF903F -:1026C0000C94840F222309F4ADCF812F26960FB6E8 -:1026D000F894DEBF0FBECDBFDF91CF911F910F9158 -:1026E000FF90EF90DF90CF90BF900C944C104B2D4B -:1026F0004F70612FC7010E94AF0226960FB6F89463 -:10270000DEBF0FBECDBFDF91CF911F910F91FF9024 -:10271000EF90DF90CF90BF900C94FE164B2D4F7032 -:10272000612FC70126960FB6F894DEBF0FBECDBF4E -:10273000DF91CF911F910F91FF90EF90DF90CF909D -:10274000BF900C94EF0526960FB6F894DEBF0FBE2F -:10275000CDBFDF91CF911F910F91FF90EF90DF9050 -:10276000CF90BF9008950E9494190E9469190E9409 -:10277000AE190E94BA1E0E940A1E80E090E00E94DC -:102780007E0E80E090E00C94940E0E9484190C94CC -:10279000B3130E94B518292F22952F702C3030F4D6 -:1027A0002A3048F42250223078F405C02C3041F011 -:1027B0002F3031F009C0803E48F0803F29F406C038 -:1027C00093FB882780F9089580E0089581E00895BB -:1027D000CF93DF9300D000D01F92CDB7DEB70F901C -:1027E0000F900F900F900F90DF91CF910895CF939E -:1027F000DF9300D000D000D0CDB7DEB726960FB65D -:10280000F894DEBF0FBECDBFDF91CF9108951F9327 -:10281000CF93DF93C091790116E080917A01C817B8 -:1028200099F0D0E01C9FF0011D9FF00D1124E55898 -:10283000FE4F4081518162817381848195810E9424 -:10284000F7132196C770E9CFDF91CF911F910895BB -:102850004091AB015091AC016091AD017091AE011E -:102860008091AF019091B0010C94F7138091B00169 -:1028700082958F7009F054C08091AD01882309F4CE -:102880004FC080917901A0917A014091AE015091A1 -:10289000AF016091AB017091AC01B6E08A1709F409 -:1028A0003FC090E041155105C1F17F3F11F46F3FEA -:1028B000A1F1B89FF001B99FF00D1124E558FE4F2A -:1028C000218127132AC02081261327C022812111AC -:1028D00024C0238134812417350710F42150310995 -:1028E000241B350B283C3105C0F42091B0012F701A -:1028F00020612093B00126E0289FF001299FF00D70 -:102900001124E058FE4F80818F70806180838BEAB4 -:1029100091E00E94A9100C94071401968770BECF15 -:102920000895CF92DF92EF92FF920F931F93CF9370 -:10293000DF93CDB7DEB762970FB6F894DEBF0FBE58 -:10294000CDBF8C0185E0F801DE011D9601900D924E -:102950008A95E1F7D8014C9111965C9111971296E6 -:102960006C918091AE019091AF01009709F475C10F -:102970003091AB017091AC017F3F19F43F3F09F4F6 -:102980006CC1F801C380D480E090AD01EE2009F461 -:10299000BEC02091B001C816D90628F0D601A81BE8 -:1029A000B90BCD0104C0809590958C0D9D1DFF2421 -:1029B000F394883C910578F0F12C207F09F0C4C095 -:1029C0007C2DD98AC88A89890E94E8138BEA91E014 -:1029D0000E94A910AFC0822F807F09F045C0571315 -:1029E00013C0431311C061110FC02F7020612093D9 -:1029F000B0010E9428148BEA91E00E94A9108091F6 -:102A0000B001F80185832EC0CD2819F15F3F11F484 -:102A10004F3FF9F0F62E61111CC080917901209191 -:102A20007A0136E0821709F45BC090E0389FF0012C -:102A3000399FF00D1124E558FE4F7181571306C0E0 -:102A40007081471303C07281711103C001968770B2 -:102A5000E9CFF62E662309F41CC18091B001816094 -:102A60008093B001F12C15C1571309C0431307C05F -:102A7000611105C08091B001F8018583C8C04D8700 -:102A80005E878D859E856A8B0E94C9136A8988231B -:102A9000D1F16623C1F12091B001822F82958F7010 -:102AA00090E0029774F08091AB019091AC0198870F -:102AB0008F831986DB86CA862C87CE0107960E94F3 -:102AC000A91086E0F801ABEAB1E001900D928A9579 -:102AD000E1F70E9436140E942814FF24F394D9C011 -:102AE0004D875E878D859E850E94B518292F22957A -:102AF0002F70223008F0C1C09F7009F0BBC0805E0B -:102B0000883008F4C6C0C8010E94A910E6CFC816D4 -:102B1000D90608F453C0F601E81BF90BCF01883C35 -:102B2000910508F450C0F12C7C2DD98AC88A898976 -:102B30000E94E813EBEAF1E086E0DF011D928A953E -:102B4000E9F70E942814A5C0571314C0431312C0FC -:102B5000611110C08091B001F8018583C8010E9405 -:102B6000A91086E0EBEAF1E0DF011D928A95E9F712 -:102B7000FE2C8FC04D875E878D859E856A8B0E9457 -:102B8000C9136A89882309F4BECF662309F4BBCF31 -:102B90002091B001822F82958F7090E002970CF403 -:102BA00090CF8091AB019091AC019A8389831B8275 -:102BB000DD82CC822E83CE01019681CF80959095C7 -:102BC0008C0D9D1DACCFF62E662309F49CCF5713B8 -:102BD00033C0431331C02091B00120FD24C0822FA7 -:102BE00082958F70482F50E041155105E1F0D801D2 -:102BF00015962C9315974F30510549F08F5F982FFC -:102C00009295907F822F8F70892B15968C93C80197 -:102C10000E94A91086E0F801ABEAB1E001900D92A4 -:102C20008A95E1F78ECF86E0F801ABEAB1E001903A -:102C30000D928A95E1F72DC04D875E878D859E8523 -:102C40000E94C91381113DCF8091B00181608093B2 -:102C5000B001C8010E94A9101CC0662309F453CF1B -:102C60004D875E878D859E850E94C913882309F450 -:102C70004ACF27CF811143CF0CC0243008F043CF77 -:102C80009F7009F43CCFD80115969C91907F09F074 -:102C900036CF8F2D62960FB6F894DEBF0FBECDBF34 -:102CA000DF91CF911F910F91FF90EF90DF90CF9028 -:102CB00008951F93CF93DF93CDB7DEB72C970FB650 -:102CC000F894DEBF0FBECDBF4F83588769877A87E0 -:102CD0008B879C87CE0107960E949114882371F000 -:102CE0008A859B85892B09F441C088858F3F09F02F -:102CF00065C08F818F3F09F061C038C086E0FE015A -:102D00003796DE01119601900D928A95E1F76A855A -:102D10007B856115710551F1FF81E885EF3F11F465 -:102D2000FF3F21F120917A0130E0C90101968770BF -:102D300099274091790150E08417950709F447C01D -:102D4000F983EA837D836C8396E0929FD001939F01 -:102D5000B00D1124A558BE4FFE01319601900D9281 -:102D60009A95E1F780937A010E94071416E080910A -:102D7000790190917A018917B9F1189FC001112446 -:102D800085589E4F0E949114882371F1E09179013A -:102D90001E9FF0011124E558FE4F40815181628150 -:102DA0007381848195810E94F7138091790190E06D -:102DB00001968770992780937901D9CF4F815885E3 -:102DC00069857A858B859C850E94F713CFCF0E94F9 -:102DD000C51310927A0110927901EBEAF1E086E0D6 -:102DE000DF011D928A95E9F72C960FB6F894DEBFA5 -:102DF0000FBECDBFDF91CF911F910895EF92FF924B -:102E00000F931F93CF93DF938C01892B09F46CC030 -:102E1000F12CEE24E394E8012196F80184918437A3 -:102E200040F4843008F051C0813081F0823019F1D3 -:102E30005BC0853709F444C0A8F19CE7980F903730 -:102E400008F052C08F770E944C1041C00E5F1F4F98 -:102E5000FE01849190E2980F983050F48770FE2D17 -:102E600001C0FF0F8A95EAF78F2F0E94871914C0BF -:102E70000E94840F2DC00E5F1F4FFE01849190E2CF -:102E8000980F983060F48770FE2D01C0FF0F8A956F -:102E9000EAF78F2F0E948D190E94AE1919C00E9467 -:102EA0004C1016C00E5F1F4FFE01C491CC2381F061 -:102EB0008FE99FE00197F1F700C00000C150F6CF05 -:102EC0000E5F1F4FFE01F49003C00E94840F8E011D -:102ED0008F2D882309F49FCFEFE9FFE03197F1F7B9 -:102EE00000C000008150F5CFDF91CF911F910F916D -:102EF000FF90EF90089508956093B5017093B60127 -:102F00008093B7019093B8010C94B3130F931F9360 -:102F10000091B5011091B6012091B7013091B8012F -:102F2000DC01CB01802B912BA22BB32B8093B5011D -:102F30009093B601A093B701B093B8011F910F9180 -:102F40000C94B3130F931F930091B5011091B60128 -:102F50002091B7013091B801DC01CB01802391238E -:102F6000A223B3238093B5019093B601A093B70138 -:102F7000B093B8011F910F910C94B3130F931F934B -:102F80000091B5011091B6012091B7013091B801BF -:102F9000DC01CB0180279127A227B3278093B501BD -:102FA0009093B601A093B701B093B8011F910F9110 -:102FB0000C94B3131092B1011092B2011092B301AC -:102FC0001092B4010C94B31341E050E060E070E063 -:102FD00004C0440F551F661F771F8A95D2F7409390 -:102FE000B1015093B2016093B3017093B4010C949A -:102FF000B31341E050E060E070E004C0440F551F9F -:10300000661F771F8A95D2F78091B1019091B20126 -:10301000A091B301B091B401482B592B6A2B7B2BA3 -:103020004093B1015093B2016093B3017093B40126 -:103030000C94B31341E050E060E070E004C0440F32 -:10304000551F661F771F8A95D2F74095509560955A -:1030500070958091B1019091B201A091B301B091AE -:10306000B401482359236A237B234093B101509331 -:10307000B2016093B3017093B4010C94B31341E0B7 -:1030800050E060E070E004C0440F551F661F771FDA -:103090008A95D2F78091B1019091B201A091B301CC -:1030A000B091B401482759276A277B274093B10183 -:1030B0005093B2016093B3017093B4010C94B313B5 -:1030C0000F931F930091B1011091B2012091B301B0 -:1030D0003091B401DC01CB01802B912BA22BB32BBF -:1030E0008093B1019093B201A093B301B093B40166 -:1030F0001F910F910C94B3130F931F930091B10183 -:103100001091B2012091B3013091B401DC01CB01E7 -:1031100080239123A223B3238093B1019093B20122 -:10312000A093B301B093B4011F910F910C94B3130A -:103130000F931F930091B1011091B2012091B3013F -:103140003091B401DC01CB0180279127A227B3275E -:103150008093B1019093B201A093B301B093B401F5 -:103160001F910F910C94B3130895CF92DF92EF92B9 -:10317000FF920F931F93CF93DF938C01C090B10107 -:10318000D090B201E090B301F090B4018091B5010C -:103190009091B601A091B701B091B801C82AD92A7F -:1031A000EA2AFB2ACFE1D0E0D701C6010C2E04C0E9 -:1031B000B695A795979587950A94D2F780FF07C093 -:1031C000B8018C2F0E9413068130910531F42197AC -:1031D00058F7B80180E00E941306DF91CF911F914C -:1031E0000F91FF90EF90DF90CF90089590910C0198 -:1031F0009923F1F090910D019923D1F0982F969594 -:10320000969596959F3080F5E0910E01F0910F0113 -:10321000E90FF11D877021E030E0A90102C0440FE1 -:10322000551F8A95E2F7CA019181892B8183089500 -:1032300020910E0130910F01F90132969FEF40E08D -:103240005191851789F09F3F19F4511101C0942FB6 -:103250004F5F4E30A9F79F3F39F0F901E90FF11D9B -:1032600097FDFA9582830895089590910C01992312 -:10327000F9F090910D019923D9F0982F9695969594 -:1032800096959F3028F5E0910E01F0910F01E90F1E -:10329000F11D877021E030E0A90102C0440F551FE5 -:1032A0008A95E2F7CA0180959181892381830895E7 -:1032B00020910E0130910F01F9013296205F3F4FAE -:1032C0009081891301C010823196E217F307C1F78C -:1032D000089581E090E0E0910E01F0910F01E80F78 -:1032E000F91F1082019680319105A9F708959091F8 -:1032F000CB01892B8093CB01089580959091CB01D0 -:1033000089238093CB0108951092CB010895909169 -:10331000CA01892B8093CA01089580959091CA01B2 -:1033200089238093CA0108951092CA010895809359 -:10333000B90108951092B901089580910E019091FC -:103340000F01FC0131969C01205F3F4F80E091917D -:1033500091118F5FE217F307D1F70895E0910E0105 -:10336000F0910F018091CB018083E0910E01F091EB -:103370000F0190818091CA01892B80838091B901CE -:10338000882361F0E0910E01F0910F019081892B6B -:1033900080830E949D1981111092B90180910E01C4 -:1033A00090910F010C94680ECF92DF92EF92FF92F2 -:1033B0006C01EE24FF24C114D104E104F10421F0D6 -:1033C000C701B60120E101C020E0C72ED82EE92EAA -:1033D000FF24C114D104E104F10419F0285FC701EE -:1033E000B6016B017C0154E0F694E794D794C7943E -:1033F0005A95D1F7C114D104E104F10419F02C5FFE -:10340000C701B6016B017C0142E0F694E794D794C2 -:10341000C7944A95D1F7C114D104E104F10419F01D -:103420002E5FC701B601DC01CB01B695A795979534 -:103430008795892B8A2B8B2B09F02F5F822FFF908A -:10344000EF90DF90CF9008958091E401843011F1E6 -:1034500020E488E190E00FB6F894A895809360008E -:103460000FBE2093600083B7817F846083BF83B7E2 -:10347000816083BF7894889583B78E7F83BF0FB6B2 -:10348000F894A89580916000886180936000109204 -:1034900060000FBE089508950C944B1ACF930E94BC -:1034A0004C1A0E9432040E944B1AC0E08C2F0E94DA -:1034B0002805811104C0CF5FCE30C1F701C081E083 -:1034C000CF9108950E94C5130E945C0E0C94520780 -:1034D00082E084BD93E095BD9AEF97BD80936E0026 -:1034E00008952FB7F8948091CD019091CE01A091CD -:1034F000CF01B091D0012FBF0895CF92DF92EF920C -:10350000FF920F931F932FB7F8944091CD015091E4 -:10351000CE016091CF017091D0012FBF6A017B0174 -:10352000EE24FF248C0120E030E0C016D106E20634 -:10353000F30610F4415051099A01281B390BC901B7 -:103540001F910F91FF90EF90DF90CF9008951F9201 -:103550000F920FB60F9211248F939F93AF93BF9347 -:103560008091CD019091CE01A091CF01B091D00179 -:103570000196A11DB11D8093CD019093CE01A09322 -:10358000CF01B093D001BF91AF919F918F910F90D8 -:103590000FBE0F901F9018950E94540BF8942FEFB8 -:1035A00087EA91E6215080409040E1F700C000009A -:1035B00087E090EBDC018093ED019093EE01A09306 -:1035C000EF01B093F0019CE088E10FB6F894A89564 -:1035D000809360000FBE90936000FFCFEF92FF9248 -:1035E0000F931F93CF93DF93D82FC0E08C2F0E94AF -:1035F000280500E010E0E82EF12CC701002E02C0E3 -:10360000959587950A94E2F780FD06C00F5F1F4FDE -:103610000630110591F709C0602F7C2F80E00E94D1 -:10362000F0058D13F3CF81E004C0CF5FCE30F1F60B -:1036300080E0DF91CF911F910F91FF90EF9008955F -:10364000CF93C82F8CE20E94EE1A882321F08C2F92 -:10365000CF910C94EE1A80E0CF910895CF930E9401 -:10366000751C811102C00E945B1CC5E6C15049F067 -:103670000E9432048FE39CE90197F1F700C000003B -:10368000F5CF89E20E94201B811113C18AE20E94BA -:10369000201B81110E945B1C85E00E94201B811170 -:1036A0000E94CC1A0E94801C8093CC0187E00E946B -:1036B000201B8823A9F18BE10E94201B882351F055 -:1036C0008091CC0181FB222720F991E0922790FB89 -:1036D00081F90EC08EE00E94201B882361F080914A -:1036E000CC0182FB222720F991E0922790FB82F9FE -:1036F0008093CC0115C080E10E94201B9091CC01E9 -:10370000882341F093FB222720F981E0822780FB68 -:1037100093F904C0892F809580FB90F99093CC0198 -:103720008091CC010E94841C0E94921C8093DE0137 -:1037300080EE0E94201B882341F08091DE01982FAB -:10374000909590FB80F98093DE0189E30E94201B15 -:10375000882359F08091DE0181FB222720F991E036 -:10376000922790FB81F98093DE0182EE0E94201B5C -:10377000882359F08091DE0182FB222720F991E015 -:10378000922790FB82F98093DE0186EE0E94201B37 -:10379000882359F08091DE0183FB222720F991E0F4 -:1037A000922790FB83F98093DE0183EE0E94201B19 -:1037B000882359F08091DE0184FB222720F991E0D3 -:1037C000922790FB84F98093DE0185E30E94201B01 -:1037D000882359F08091DE0185FB222720F991E0B2 -:1037E000922790FB85F98093DE0181E30E94201BE4 -:1037F000882359F08091DE0186FB222720F991E091 -:10380000922790FB86F98093DE0181E10E94201BC4 -:10381000882359F08091DE0187FB222720F991E06F -:10382000922790FB87F98093DE018091DE010E9450 -:10383000961C8091DE0187FB882780F980930D011B -:1038400087E20E94201BC82F8EE10E94201B81115D -:10385000C2608FE10E94201B8111C46080E20E943F -:10386000201B8111C86081E20E94201B8111C06170 -:1038700082E20E94201B8111C06283E20E94201B11 -:103880008111C06484E20E94201B882311F0C0686B -:1038900002C0CC2329F08C2F0E948D1C6C2F03C0FA -:1038A0000E94891C682F70E080E090E0CF910C941A -:1038B0007C17CF9108956DEE7EEF80E090E00E943E -:1038C000CF2260E082E090E00E94C12260E083E0CD -:1038D00090E00E94C12260E084E090E00E94C1225A -:1038E00060E085E090E00C94C12280E090E00E94CE -:1038F000BB2221E08D3E9E4F09F020E0822F0895EB -:1039000082E090E00C94B322682F82E090E00C9467 -:10391000C12283E090E00C94B322682F83E090E012 -:103920000C94C12284E090E00C94B322682F84E0D0 -:1039300090E00C94C1228091D30180FF0BC0609174 -:10394000130185E0689FB001112475956795759501 -:1039500067952BC081FF09C06091130185E0689FC6 -:10396000B00111247595679520C082FF07C0609152 -:10397000130185E0689FB001112417C09091D40114 -:103980009923D1F060911201961788F720911301C5 -:1039900085E0289F90011124929FA001939F500DD4 -:1039A000112470E0CA010E9485226038710540F43C -:1039B0006115710519F406C065E070E0862F089561 -:1039C0008FE7089581E008958091D30180FF08C0BA -:1039D0006091110170E0759567957595679521C0A7 -:1039E00081FF06C06091110170E07595679519C05F -:1039F00082FF04C06091110170E010C09091D40169 -:103A0000992399F0609110019617A0F78091110108 -:103A1000899FC001112470E00E94852260387105E1 -:103A200040F46115710519F406C061E070E0862F5D -:103A300008958FE7089581E00895803F21F40E9462 -:103A40009B1C819504C0813F29F40E949B1C80939C -:103A5000D7010895823F21F40E949B1C819504C0E8 -:103A6000833F29F40E949B1C8093D6010895893FCF -:103A700019F40E94E41C05C08A3F31F40E94E41C42 -:103A800081958093D80108958B3F21F40E94E41C16 -:103A9000819504C08C3F29F40E94E41C8093D901D5 -:103AA0000895843F21F48091D501816017C0853F3E -:103AB00021F48091D501826011C0863F21F480916C -:103AC000D50184600BC0873F21F48091D5018860C7 -:103AD00005C0883F31F48091D50180618093D50184 -:103AE00008958D3F21F48091D30181600BC08E3FFA -:103AF00021F48091D301826005C08F3F29F4809129 -:103B0000D30184608093D3010895803F39F480917C -:103B1000D70187FF6CC01092D70169C0813F29F49B -:103B20008091D7011816BCF362C09091D601823FF4 -:103B300029F497FF5CC01092D60159C0833F19F455 -:103B40001916CCF354C0893F41F48091D80118165E -:103B50000CF04DC01092D8014AC08A3F29F48091E0 -:103B6000D80187FF44C0F6CF8B3F39F48091D9014B -:103B700087FF3DC01092D9013AC08C3F29F4809153 -:103B8000D9011816BCF333C0843F21F48091D501CC -:103B90008E7F17C0853F21F48091D5018D7F11C0A4 -:103BA000863F21F48091D5018B7F0BC0873F21F4A4 -:103BB0008091D501877F05C0883F31F48091D50180 -:103BC0008F7E8093D50113C08D3F21F48091D30166 -:103BD0008E7F0BC08E3F21F48091D3018D7F05C075 -:103BE0008F3F29F48091D3018B7F8093D301809103 -:103BF000D60181110EC08091D70181110AC0809138 -:103C0000D801811106C08091D901811102C01092A2 -:103C1000D401089585ED91E00E94730E0E94711AFF -:103C20009093D2018093D10108951F93CF93DF9396 -:103C30008091D1019091D2010E947D1AAC019091A6 -:103C4000D401992321F02091140130E006C0209185 -:103C500015018AE0289F900111244217530708F4A8 -:103C600085C08091D601C091D701D091D801109123 -:103C7000D901811107C0C11175C0D11173C01111D3 -:103C800071C074C09F3F19F09F5F9093D4011816C4 -:103C900024F40E949B1C8093D6018091D60187FF5B -:103CA00005C00E949B1C81958093D6011C1624F4AC -:103CB0000E949B1C8093D7018091D70187FF05C08C -:103CC0000E949B1C81958093D7016091D601662349 -:103CD00031F1C091D701CC2311F1062E000C770BE6 -:103CE000880B990B0E948C2123E333E343E35FE3CA -:103CF0000E94F0210E9454216093D6016C2FCC0FBA -:103D0000770B880B990B0E948C2123E333E343E369 -:103D10005FE30E94F0210E9454216093D7011D1699 -:103D200024F40E94E41C8093D8018091D80187FF7D -:103D300005C00E94E41C81958093D801111624F4DB -:103D40000E94E41C8093D9018091D90187FF05C0AE -:103D50000E94E41C81958093D901DF91CF911F913E -:103D60000C940A1E9F3F09F08FCFA0CFDF91CF9117 -:103D70001F910895E5EDF1E085E0DF011D928A9540 -:103D8000E9F71092D4011092D3010895833081F1A4 -:103D900028F4813059F08230D1F00895853009F44B -:103DA00049C0B8F1863009F456C0089580911501D4 -:103DB000262F30E0280F311D2F3F310524F4680FE6 -:103DC0006093150108958FEF8093150108958091F8 -:103DD0001401262F30E0280F311D2F3F310524F428 -:103DE000680F6093140108958FEF80931401089574 -:103DF00080911301262F30E0280F311D2F3F310510 -:103E000024F4680F6093130108958FEF80931301DA -:103E1000089580911201262F30E0280F311D2F3F89 -:103E2000310524F4680F6093120108958FEF809399 -:103E30001201089580911101262F30E0280F311DC5 -:103E40002F3F310524F4680F6093110108958FEF1F -:103E500080931101089580911001262F30E0280FE2 -:103E6000311D2F3F310524F4680F60931001089530 -:103E70008FEF809310010895833011F128F4813081 -:103E800049F0823091F00895853081F120F186303B -:103E9000C1F1089580911501681720F4861B809365 -:103EA0001501089510921501089580911401681765 -:103EB00020F4861B80931401089510921401089534 -:103EC00080911301681720F4861B809313010895D5 -:103ED00010921301089580911201681720F4861B37 -:103EE000809312010895109212010895809111019A -:103EF000681720F4861B8093110108951092110118 -:103F0000089580911001681720F4861B809310019A -:103F100008951092100108950F931F938D3109F4A5 -:103F20006BC008F03FC08E3009F47DC0C0F487300C -:103F300009F46EC068F4863009F0AFC08091CC01FE -:103F4000817F8E7F8093CC0181E08093DB01A6C0CE -:103F5000883009F458C08B3009F49BC09EC086316C -:103F600009F497C078F4803109F470C0813109F008 -:103F700094C00E94C51390910D0181E08927809320 -:103F80000D0187C0893109F484C08B3109F085C0E7 -:103F90008091CC0181FB222720F991E0922790FBB0 -:103FA00081F94AC0853309F45BC048F4873209F4CB -:103FB00057C008F45AC0893209F452C06EC0833425 -:103FC00038F48A3308F067C0883309F462C065C0EA -:103FD000833409F445C0883409F05FC00E94C513DA -:103FE0000FEF13ED20E3015010402040E1F700C037 -:103FF00000000E94CC1A4DC00E940E210E945C0E4F -:104000000E94520746C00E94801C0E94921C41C020 -:104010009091CC01892F817090FF12C0917F9E7F7B -:104020009093CC013BC08091CC0182FB222720F9E8 -:1040300091E0922790FB82F98093CC01992349F17A -:104040008091CC0181608093CC0123C08091CC0110 -:1040500083FB222720F991E0922790FB83F9ECCF94 -:1040600061E070E080E090E010C08D5141E050E0F0 -:1040700060E070E08A019B0104C0000F111F221F45 -:10408000331F8A95D2F7C901B8010E947C170E949C -:10409000C51381E003C08953E9CF80E01F910F91E0 -:1040A000089580E008950C945120CF93C82F8091FB -:1040B000DB01813079F018F08230E9F187C0E091BE -:1040C0000E01F0910F018081813169F0823209F097 -:1040D0007FC009C0E0910E01F0910F018081813114 -:1040E00011F0823261F48C2F0E945320811104C0A0 -:1040F0008C2F0E948C1F1DC081E090E01AC08C2F75 -:104100000E945120811114C0C43179F048F4CB30A1 -:1041100079F0C03109F060C082E08093DB0108C013 -:10412000C93219F0C83321F057C01092DB0154C0D6 -:1041300081E0817053C0C93289F118F5C43171F141 -:10414000A8F4C73009F046C08AE08093150194E1D5 -:104150009093140193E0909313018093120188E0EF -:104160008093110188E28093100134C0CE51C63093 -:1041700088F5EC2FF0E0E65DFE4F80818093DA0158 -:1041800029C0CE34E9F020F4CB3421F56AE013C025 -:10419000C13579F0C235F1F461E00DC08091DA01EA -:1041A000882319F01092DA0115C081E08093DB01B9 -:1041B00015C061E006C08091DA010E94C61E0AC0E7 -:1041C0006AE08091DA010E943C1F04C01092DB017A -:1041D00080E004C081E002C080E0ABCFCF910895C1 -:1041E000E1E8F0E080818860808380818160808365 -:1041F0008FB7F89493E09093890090ED90938800A6 -:104200008FBF0895EFE6F0E080818260808308959B -:10421000EFE6F0E080818D7F80830895EFE6F0E0A7 -:10422000908182E08927808308951F920F920FB6B4 -:104230000F9211242F933F934F935F936F937F932C -:104240008F939F93AF93BF93EF93FF938091DC0184 -:104250009091DD0101969093DD018093DC01811145 -:1042600003C082E00E945207E091DD01E695E695E9 -:10427000F0E0E457FB4FE4918091DC018E1303C022 -:1042800080E00E945207FF91EF91BF91AF919F9103 -:104290008F917F916F915F914F913F912F910F90EF -:1042A0000FBE0F901F9018950E945B216894B1116A -:1042B0000C94EA2108950E94CF2188F09F5798F02E -:1042C000B92F9927B751B0F0E1F0660F771F881F1B -:1042D000991F1AF0BA95C9F714C0B13091F00E9435 -:1042E000E921B1E008950C94E921672F782F882700 -:1042F000B85F39F0B93FCCF3869577956795B3955C -:10430000D9F73EF490958095709561957F4F8F4FCA -:104310009F4F0895E89409C097FB3EF490958095CF -:10432000709561957F4F8F4F9F4F9923A9F0F92F7B -:1043300096E9BB279395F695879577956795B795F9 -:10434000F111F8CFFAF4BB0F11F460FF1BC06F5FDF -:104350007F4F8F4F9F4F16C0882311F096E911C0F1 -:10436000772321F09EE8872F762F05C0662371F012 -:1043700096E8862F70E060E02AF09A95660F771F26 -:10438000881FDAF7880F9695879597F9089557FD56 -:104390009058440F551F59F05F3F71F04795880FB3 -:1043A00097FB991F61F09F3F79F08795089512164A -:1043B00013061406551FF2CF4695F1DF08C01616F6 -:1043C00017061806991FF1CF8695710561050894A7 -:1043D0000895E894BB2766277727CB0197F90895BE -:1043E0000E9403220C9474220E94662238F00E94DC -:1043F0006D2220F0952311F00C945D220C94632221 -:1044000011240C94EA210E94C72170F3959FC1F3F7 -:10441000950F50E0551F629FF001729FBB27F00D72 -:10442000B11D639FAA27F00DB11DAA1F649F6627C7 -:10443000B00DA11D661F829F2227B00DA11D621F16 -:10444000739FB00DA11D621F839FA00D611D221FD0 -:10445000749F3327A00D611D231F849F600D211DB4 -:10446000822F762F6A2F11249F5750409AF0F1F037 -:1044700088234AF0EE0FFF1FBB1F661F771F881FA0 -:1044800091505040A9F79E3F510580F00C945D2259 -:104490000C94EA215F3FE4F3983ED4F38695779538 -:1044A0006795B795F795E7959F5FC1F7FE2B880F46 -:1044B000911D9695879597F9089597F99F6780E8DC -:1044C00070E060E008959FEF80EC089500240A9466 -:1044D0001616170618060906089500240A941216DF -:1044E0001306140605060895092E0394000C11F412 -:1044F000882352F0BB0F40F4BF2B11F460FF04C0BF -:104500006F5F7F4F8F4F9F4F089597FB072E16F4D5 -:10451000009407D077FD09D00E949F2207FC05D0A8 -:104520003EF4909581959F4F0895709561957F4FCA -:104530000895EE0FFF1F0590F491E02D0994AA1B3A -:10454000BB1B51E107C0AA1FBB1FA617B70710F07E -:10455000A61BB70B881F991F5A95A9F780959095B0 -:10456000BC01CD010895F999FECF92BD81BDF89AA5 -:10457000992780B50895A8E1B0E042E050E00C949E -:10458000D622262FF999FECF1FBA92BD81BD20BD3C -:104590000FB6F894FA9AF99A0FBE019608950E9400 -:1045A000C122272F0C94C222DC01CB01FC01F99916 -:1045B000FECF06C0F2BDE1BDF89A319600B40D926F -:0C45C00041505040B8F70895F894FFCF28 -:1045CC0020025307E307BE078A0756070101BA0109 -:1045DC0028080A03140A3F4D36394D040004CA0357 -:1045EC00910324033D0356036F03010203040506E4 -:0445FC0007080900A3 +:100000000C940B030C944F030C944F030C944F036C +:100010000C944F030C944F030C944F030C944F0318 +:100020000C944F030C944F030C940E0D0C94E00DA4 +:100030000C944F030C944F030C944F030C944F03F8 +:100040000C944F030C94AA220C944F030C944F036E +:100050000C944F030C94391C0C944F030C944F03D5 +:100060000C944F030C944F030C944F030C944F03C8 +:100070000C944F030C944F030C944F030C944F03B8 +:100080000C944F030C944F030C944F030C944F03A8 +:100090000C944F030C944F030C944F030C944F0398 +:1000A0000C944F030C944F030C944F034D0E6F0EA2 +:1000B0005D0F6F0E5D0FB40ED70E5D0F2C0F3F0F4F +:1000C0002B122B1268126812AB12E91202150215DC +:1000D0000213021503140314D61402150215ED14AD +:1000E00029002B000354E100358100001E000E00A2 +:1000F0000B001B7164004D001F003700040014004A +:10010000E1044C00200012000800340050002A00D6 +:10011000210036000C002F004F004A0022001D0075 +:100120001800330000000254E000E3000000E20089 +:1001300000002E77E400E7000000E60000002E7FBC +:1001400023001900070005000000045424000A00E1 +:100150001700130052004B002500060015001A007E +:1001600051002C0026000F0011001000E1082800AB +:1001700027002D0016000D7130004E0038001C00C5 +:100180000982E50031810000010001000100010049 +:10019000010000003A0035003100010001000100BB +:1001A0003B0035022102640001004C003C001E02AD +:1001B00024062202010001003D002D022402240435 +:1001C000010001003E0001003700110400000100A1 +:1001D0000100010000000100000001000100010019 +:1001E00000000100000001003F0024062402230259 +:1001F000000001004000220425023500010001003A +:100200004100230426023502370001004200240485 +:1002100025041F021E0201004300310026043102A2 +:10022000010001004400450001002D020100000012 +:1002300001000100010001000100000001000100B7 +:100240000100FB000100010001000100F200F900C3 +:10025000010001000100F000F100FA00F4000100CB +:1002600001000100F300FC00F500010001000100A5 +:100270000100F60000000100010001000000010083 +:100280000000010001000100000001000000010069 +:100290000100010001000100000001000100010057 +:1002A0000100A800A9000100010001000100AC004C +:1002B000AA00B600010001000100AB0050000100DF +:1002C000010001000100520051000100AE000100D8 +:1002D000010001004F00000029002B000100E10097 +:1002E000358100001E00140004001D7164004D00E3 +:1002F0001F001A0016001B00E1044C00200008003B +:100300000700060050002A0021001500090019000E +:100310004F004A00220017000A00050000000100FB +:100320001908E3000000E20000002E770608E7004D +:100330000000E60000002E7F23001C000B001100CF +:1003400000000100240018000D00100052004B00B6 +:1003500025000C000E00360051002C002600120073 +:100360000F003700E1082800270013003300387120 +:1003700030004E002D002F003482E5003181000056 +:100380000100010001000100010000000100010066 +:100390000100010001000100010001005000010006 +:1003A00001000100010052005100010001000100A4 +:1003B000010001004F0001000100010001000100E7 +:1003C0000100010000000100010001000000010027 +:1003D0000000010001000100000001000000010018 +:1003E0003F005200510023020000010040002400A1 +:1003F00021001E00270001004100250022001F00EF +:1004000037000100420026002300200027000100E1 +:1004100043003002300024022E0001004400450059 +:100420000100010001000000160345007200670092 +:100430006F0044006F007800200045005A00000063 +:1004400016034500720067006F0044006F007800DB +:10045000200045005A0000000403090409026D0051 +:10046000040100A0FA0904000001030101000921B0 +:1004700011010001223F000705810308000A090459 +:1004800001000103010200092111010001224D00B8 +:100490000705820308000A090402000103000000A6 +:1004A0000921110100012236000705830308000A13 +:1004B00009040300010300000009211101000122C9 +:1004C000390007058403100001120110010000002B +:1004D00008EDFE071301000102000105010906A154 +:1004E00001050719E029E715002501950875018127 +:1004F00002050819012905950575019102950175F7 +:1005000003910105071900297715002501957875D4 +:10051000018102C005010980A101850216010026A2 +:10052000B7001A01002AB700751095018100C005B7 +:100530000C0901A1018503160100269C021A010085 +:100540002A9C02751095018100C005010902A101D4 +:100550000901A100050919012905150025019505C5 +:100560007501810295017503810105010930093189 +:100570001581257F95027508810609381581257F2B +:10058000950175088106050C0A38021581257F95AD +:100590000175088106C0C005010906A101050719FA +:1005A000E029E7150025019508750181029501757F +:1005B0000881010508190129059505750191029524 +:1005C00001750391010507190029FF150025FF9505 +:1005D0000675088100C00000000000000000000057 +:1005E00000010204060A0F17202C3A4A5D71879D0C +:1005F000B3C7DAE9F5FCFFFCF5E9DAC7B39D87710B +:100600005D4A3A2C20170F0A060402010000000080 +:1006100000000000000011241FBECFEFDAE0DEBFB3 +:10062000CDBF04B603FE24C08091EE019091EF018E +:10063000A091F001B091F1018730904BA740B04BF1 +:10064000B9F41092EE011092EF011092F0011092A5 +:10065000F10114BE84B7877F84BF88E10FB6F89498 +:1006600080936000109260000FBEE0E0FFE3099508 +:1006700011E0A0E0B1E0E8EDF8E402C005900D92D1 +:10068000A433B107D9F711E0A4E3B1E001C01D9292 +:10069000AE3EB107E1F70E94520A0C946A240C9412 +:1006A000000061110BC0FC018281882321F085EEDE +:1006B0000E94BF1003C085EE0E94871180E090E089 +:1006C000089508956091B1017091B2018091B301D4 +:1006D0009091B4010E94651B56985E9825982D98BC +:1006E00026982E9827982F9808950C946203569870 +:1006F0005E9825982D9826982E9827982F988FEFFA +:1007000090E0909389008093880090938B00809371 +:100710008A0090938D0080938C00259A2D9A2FEF5C +:1007200080E792E0215080409040E1F700C0000057 +:10073000269A2E9A2FEF80E792E021508040904039 +:10074000E1F700C00000279A2F9A2FEF80E792E090 +:10075000215080409040E1F700C0000025982D987E +:100760002FEF80E792E0215080409040E1F700C0F9 +:10077000000026982E982FEF80E792E021508040CD +:100780009040E1F700C0000027982F9856985E9897 +:1007900025982D9826982E9827982F98089589EABD +:1007A0008093800089E08093810024982C983F9862 +:1007B0008AB18F748AB96E98479A8BB1806B8BB966 +:1007C000769A0E9477030C94610380E28093000183 +:1007D0008091340181110EC00E94340481E0809325 +:1007E00034012FEF83ED90E3215080409040E1F7FA +:1007F00000C0000080E40E943A048093000181114F +:100800002EC00E94640480930001811128C00E94C0 +:10081000640480930001811122C08FE30E9464046C +:100820008093000181111BC00E945C0480E40E943F +:100830003A0480930001811112C08CE00E9464048C +:100840008093000181110BC00E9464048093000119 +:10085000811105C08FE30E946404809300010E940F +:100860005C048091000108951092B9008AE08093A1 +:10087000B800089594EA9093BC009091BC0097FF53 +:10088000FCCF9091B900987F983021F0903111F011 +:1008900081E008958093BB0084E88093BC00809140 +:1008A000BC0087FFFCCF8091B900887F883111F0B0 +:1008B000803471F780E0089584E98093BC008091D2 +:1008C000BC0084FDFCCF08958093BB0084E8809336 +:1008D000BC008091BC0087FFFCCF9091B900987F4D +:1008E00081E0983209F480E0089584E88093BC00A8 +:1008F0008091BC0087FFFCCF8091BB000895809160 +:100900000001811115C080E40E943A048093000127 +:1009100081110CC082E10E94640480930001811166 +:1009200005C08FEF0E946404809300010E945C0464 +:1009300084B1807F84B985B1807F85B98AB1837F96 +:100940008AB98BB1837F8BB93E98469808950E94EF +:10095000E503809300010E947F0480B38C7080BB0C +:1009600081B3836F81BBA6E3B1E0E4E4F1E08EE004 +:100970008E0F11921D928E13FCCF0C94CF03BF9259 +:10098000CF92DF92EF92FF920F931F93CF93DF935B +:1009900080910001882379F0809135018F5F8093E9 +:1009A0003501811108C00E94E50380930001811187 +:1009B00002C00E94770306E311E0C0E0D0E0DD242E +:1009C000D39482E0C82EEE24E394F12CC730D105F5 +:1009D00000F580910001811164C080E40E943A0416 +:1009E00080930001811112C082E10E94640480930F +:1009F000000181110BC0C7010C2E01C0880F0A94A1 +:100A0000EAF780950E946404809300010E945C04D0 +:100A100048C0CA30A1F028F4C83059F0C93061F09C +:100A200005C0CC3089F070F0CD3089F0209A28983C +:100A300010C0219A29980DC0229A2A980AC0239A98 +:100A40002B9807C0529A01C0539A5B9802C03E9AF5 +:100A5000469890EA9A95F1F79FB1799902C082E0A1 +:100A600001C080E091709D25982B7C9902C084E0A4 +:100A700001C080E0892B7D9902C038E001C030E0E0 +:100A8000832B7E9902C020E101C020E0822B9FB120 +:100A90009095991F9927991F9295990F907E892B70 +:100AA0000FC080910001811149C080E40E943A0486 +:100AB00080930001882379F1B12C0E945C048B2D76 +:100AC000F8019081981719F08083C09201010E946B +:100AD0007F0421960F5F1F4FCE30D10509F076CFEE +:100AE00080910101882361F1815080930101882365 +:100AF00039F08FE99FE00197F1F700C0000020C0B6 +:100B0000A4E4B1E0E6E3F1E0CF01825F91919D932F +:100B10008E13FCCF15C083E10E9464048093000112 +:100B20008111CACF81E40E943A04809300018111AF +:100B3000C3CF0E947504B82EB094BFCF80E0C0CF61 +:100B40000E94750381E0DF91CF911F910F91FF907B +:100B5000EF90DF90CF90BF900895E82FF0E0EC5B2E +:100B6000FE4F808108950895089596E0799FF001E1 +:100B7000112494E5899FE00DF11D1124E60FF11D6C +:100B8000EE0FFF1FE052FF4F859194910895880F5B +:100B9000991FFC01E05AF040859194910895880FC7 +:100BA000991FFC01E052FF4F8591949108950F9396 +:100BB0001F93CF93DF93EC018115904350F5C1153E +:100BC00080E2D80708F0B3C0CB3BD10590F4C83A17 +:100BD000D10508F05AC0C53AD10508F04BC0C43061 +:100BE000D10508F0BBC1219709F0B5C101E010E0C3 +:100BF000F5C1CF3FD10511F008F0B0C1C03FD1051C +:100C000008F092C0CE01805E9109089708F4A6C151 +:100C1000A2C1C11591E5D907A8F4C23020E5D207D9 +:100C200008F09EC0C11580E5D80709F485C008F01A +:100C300091C0C11520E4D20708F08DC1DD278E01D7 +:100C4000106CCCC1C11580E8D80758F4C11590E7E5 +:100C5000D90708F07CC1C11520E6D20708F422C1EB +:100C60007AC1C11580E9D80708F075C1DF708E011F +:100C7000106AB4C1C53AD10509F472C1C63AD105AA +:100C800009F071C102E810E4A9C1C83AD10509F41C +:100C90006DC1C93AD10509F46CC1CA3AD10509F44C +:100CA0006BC1CB3AD10509F46AC1CC3AD10509F43C +:100CB00069C1CD3AD10509F468C1C03BD10509F439 +:100CC00067C1CE3AD10509F466C1CF3AD10509F41E +:100CD00065C1C13BD10509F464C1C23BD10509F42A +:100CE00063C1C33BD10509F462C1C43BD10509F41A +:100CF00061C1C53BD10509F460C1C63BD10509F40A +:100D00005FC1C73BD10509F45EC1C83BD10509F4F9 +:100D10005DC1C93BD10509F45CC1CA3BD10509F4E9 +:100D20005BC100E014E45AC18E01106557C1CE01C9 +:100D30009F700E94CF0553C10E9426159FEF24E3A8 +:100D40008CE0915020408040E1F700C000000E94FC +:100D50005E1C44C18091CD0181608093CD013EC174 +:100D60000E94071E811102C00E94ED1D0E94241ED8 +:100D700090E09093EE018093ED01C23090E5D907A9 +:100D800021F48091ED01816086C0C43020E5D20756 +:100D900021F48091ED0182607EC0C63080E5D807E5 +:100DA00021F48091ED01846076C0C83090E5D907C8 +:100DB00019F48091ED0127C0CA3020E5D20721F453 +:100DC0008091ED01806167C0CC3080E5D80721F4C7 +:100DD0008091ED0180625FC0CE3090E5D90721F4AB +:100DE0008091ED01806457C0C03120E5D20721F425 +:100DF0008091ED0180684FC0C23180E5D80729F4A9 +:100E00008091ED018460886046C0C33090E5D907C9 +:100E100021F48091ED018E7F3EC0C53020E5D207E0 +:100E200021F48091ED018D7F36C0C73080E5D80771 +:100E300021F48091ED018B7F2EC0C93090E5D90758 +:100E400019F48091ED0126C0CB3020E5D20721F4C2 +:100E50008091ED018F7E1FC0CD3080E5D80721F451 +:100E60008091ED018F7D17C0CF3090E5D90721F437 +:100E70008091ED018F7B0FC0C13120E5D20721F4B5 +:100E80008091ED018F7707C0C331D04531F4809157 +:100E9000ED018B7F877F8093ED018091ED010E94B2 +:100EA000281E9CC08D2F99278F709927813091051E +:100EB000D9F49E012370332702C0880F991F2A9509 +:100EC000E2F79C688E0144E0000F111F4A95E1F79C +:100ED00000271370802B912B53E0CC0FDD1F5A9508 +:100EE000E1F7C076DD272FC08230910531F4DC2F89 +:100EF000CC278E01016F106A71C08330910569F4AF +:100F0000CE018370992701E010E002C0000F111F8D +:100F10008A95E2F7C8019C680FC0049709F05EC08B +:100F2000CE018370992701E010E002C0000F111F6D +:100F30008A95E2F7C8019A6823E0CC0FDD1F2A9555 +:100F4000E1F7C07ED7708C010C2B1D2B47C0DF70E2 +:100F50008E01106243C000E010E040C08E013EC030 +:100F600001E810E43BC003E810E438C002EE14E4EA +:100F700035C009EE14E432C00AEE14E42FC005EBCC +:100F800014E42CC006EB14E429C007EB14E426C0DB +:100F90000CEC14E423C00DEC14E420C003E815E4C9 +:100FA0001DC00AE815E41AC002E915E417C004E9F7 +:100FB00015E414C001E216E411C003E216E40EC009 +:100FC00004E216E40BC005E216E408C006E216E4EB +:100FD00005C007E216E402C00AE216E4C801DF9188 +:100FE000CF911F910F91089596E0799FF001112400 +:100FF00094E5899FE00DF11D1124E60FF11DEE0F20 +:10100000FF1FE052FF4F85919491803E9105E0F4DF +:10101000803C910558F58133910509F46FC048F47F +:101020008932910509F463C08A32910509F46DC0D3 +:1010300072C089339105E9F082389105D1F085338A +:10104000910509F44DC067C0833E910581F138F4E4 +:10105000803E9105B9F0823E9105D9F05CC0863E94 +:10106000910561F1873E9105A1F155C00E94C70528 +:1010700008952091ED0120FD02C021FF4CC080EEBB +:1010800090E049C08091ED0180FFF9CF89E390E0C5 +:1010900042C08091ED0182FF0EC08091ED0184FF7E +:1010A00003C080E090E037C083EE90E034C08091D0 +:1010B000ED0182FFF2CF82EE90E02DC08091ED0134 +:1010C00083FF0BC08091ED0184FDEBCF87EE90E0B4 +:1010D00022C08091ED0183FFF5CF86EE90E01BC02A +:1010E0008091ED0185FF07C089E290E014C08091F6 +:1010F000ED0185FFF9CF85E390E00DC08091ED0112 +:1011000086FF07C08AE290E006C08091ED0186FF6D +:10111000F9CF81E390E00E94D705089508950C94DB +:101120008E08809162010895CF93DF9300D01F92C3 +:10113000CDB7DEB79C018091E401843019F593E0CE +:1011400099833B832A839093E9008FEF9091E80085 +:10115000815095FD06C095ED9A95F1F7000081113B +:10116000F5CF8091E80085FF0DC040E050E063E0DE +:1011700070E0CE0101960E94FE0A8091E8008E7711 +:101180008093E8000F900F900F90DF91CF9108951A +:10119000CF93DF9300D01F92CDB7DEB72091E4014B +:1011A000243021F522E029839B838A8383E0809386 +:1011B000E9008FEF9091E800815095FD06C095ED14 +:1011C0009A95F1F700008111F5CF8091E80085FF35 +:1011D0000DC040E050E063E070E0CE0101960E9457 +:1011E000FE0A8091E8008E778093E8000F900F90C0 +:1011F0000F90DF91CF9108952091E4012430F1F414 +:1012000022E02093E9002FEF3091E800215035FDD6 +:1012100006C035ED3A95F1F700002111F5CF209188 +:10122000E80025FF0BC040E050E065E070E00E9460 +:10123000FE0A8091E8008E778093E8000895CF93AE +:10124000DF93EC019091E401943009F046C0809165 +:101250000C018823D9F080910D018823B9F0909377 +:10126000E9008FEF9091E800815095FD06C095E16F +:101270009A95F1F700008111F5CF8091E80085FF84 +:101280002CC040E050E060E170E017C081E0809346 +:10129000E9008FEF9091E800815095FD06C095ED33 +:1012A0009A95F1F700008111F5CF8091E80085FF54 +:1012B00014C040E050E068E070E0CE010E94FE0AF9 +:1012C0008091E8008E778093E80080E1FE01A2E53E +:1012D000B1E001900D928A95E1F7DF91CF910895E9 +:1012E0008091E301811109C00E94930C0E94F00CCF +:1012F0008091E20084608093E20008951092E301FF +:10130000089508950C9497220E94F41B0E949D2238 +:101310000E94960F0C948F0842E061EC81E00E94DD +:101320000D0C42E061EC82E00E940D0C42E061ECA9 +:1013300083E00E940D0C42E161EC84E00C940D0C02 +:101340008091E601833009F455C030F4813071F0AA +:10135000823009F48EC008958A3009F47AC08B3047 +:1013600009F460C0893009F09CC020C08091E5017B +:10137000813A09F096C08091E800877F8093E80069 +:101380008091E9019091EA01892B21F460E182E5E5 +:1013900091E003C060E080E090E070E00E94490BC3 +:1013A0008091E8008B778093E80008958091E501B3 +:1013B000813209F076C08091E9019091EA010097AD +:1013C00019F0039709F06DC08091E800877F809342 +:1013D000E8008091E80082FD05C08091E401811160 +:1013E000F8CF5FC08091F100809362018091E800A6 +:1013F0008B7753C08091E501813A09F052C080910A +:10140000E9019091EA01892B09F04BC08091E80035 +:10141000877F8093E8008091E80080FFFCCF809177 +:101420000C0136C08091E5018132D9F58091E90146 +:101430009091EA01892BA9F58091E800877F80933C +:10144000E8000E94420C8091E70180930C010C940B +:1014500026158091E501813221F58091E800877F92 +:101460008093E8000E94420C8091E8018093630120 +:1014700008958091E501813AA1F48091E800877F89 +:101480008093E8008091E80080FFFCCF80916301A9 +:101490008093F1008091E8008E778093E8000C94AF +:1014A000420C089584B7877F84BF88E10FB6F89413 +:1014B00080936000109260000FBE90E080E80FB64D +:1014C000F89480936100909361000FBE0E94E50F35 +:1014D0000E94930C0E94F00C8091E2008460809343 +:1014E000E20078940E94760F0E94E70F82E091E07C +:1014F0000E94910F0E9485228091E401853069F459 +:101500000E94B51B8091E2018823B1F30E94E01B89 +:10151000882391F30E94E80AEFCF0E94ED0FECCFF1 +:10152000292F332723303105C9F064F421303105E8 +:1015300081F02230310509F043C08DE690E02CE5C2 +:1015400034E042C021323105F1F02232310541F15F +:1015500037C082E190E029EC34E036C09927813031 +:10156000910541F08230910541F0892B49F5E8E57C +:10157000F4E005C0E0E4F4E002C0E8E2F4E08491C5 +:1015800090E09F0121C06430D8F4E62FF0E0EE0F28 +:10159000FF1FEE5DFE4F2081318189E090E014C095 +:1015A000643070F470E0FB01EE0FFF1FE65EFE4F4B +:1015B00020813181FB01EA5EFE4F808190E004C012 +:1015C00080E090E020E030E0FA013183208308954C +:1015D00080E189BD82E189BD09B400FEFDCF809123 +:1015E000D8008F7D8093D8008091E0008260809346 +:1015F000E0008091E00081FDFCCF0895CF92DF9262 +:10160000EF92FF920F931F93CF93DF93EC018B0127 +:101610006A010E94610C811133C0C114D10439F0F8 +:10162000F60180819181081B190BC80FD91FE12C8D +:10163000F12C0115110519F18091E80085FD16C006 +:101640008091E8008E778093E800C114D10449F0BE +:10165000F60180819181E80EF91EF182E08285E039 +:101660000FC00E94610C882321F30AC089918093E6 +:10167000F10001501109FFEFEF1AFF0ADACF80E005 +:10168000DF91CF911F910F91FF90EF90DF90CF905E +:1016900008952091EB013091EC012617370748F0AF +:1016A0006115710539F42091E8002E772093E80048 +:1016B00001C0B90140E061157105A9F12091E40173 +:1016C000222309F443C0253009F442C02091E800E8 +:1016D00023FD40C02091E80022FD32C02091E800A7 +:1016E00020FFE9CF4091F3002091F20030E0342B4D +:1016F000FC01CF016115710559F02830310540F426 +:1017000081918093F100615071092F5F3F4FF1CFBC +:1017100041E02830310509F040E02091E8002E77C3 +:101720002093E800C8CF4111C9CF0AC08091E401DD +:10173000882361F0853061F08091E80083FD0AC064 +:101740008091E80082FFF2CF80E0089582E0089562 +:1017500083E0089581E008952091EB013091EC0140 +:101760002617370748F06115710539F42091E80014 +:101770002E772093E80001C0B901FC0120E061153B +:10178000710591F18091E401882309F440C085300E +:1017900009F43FC08091E80083FD3DC08091E800DE +:1017A00082FD2FC08091E80080FFE9CF2091F300F7 +:1017B0008091F20090E0922B6115710559F088300C +:1017C000910540F424912093F10031966150710904 +:1017D0000196F2CF21E0089709F020E08091E8001F +:1017E0008E778093E800CBCF2111CCCF0AC08091B7 +:1017F000E401882361F0853061F08091E80083FD89 +:101800000AC08091E80082FFF2CF80E0089582E074 +:10181000089583E0089581E00895982F973058F552 +:101820009093E900981739F07091EC002091ED0049 +:101830005091F00003C0242F762F50E021FF19C0F3 +:101840003091EB003E7F3093EB003091ED003D7F17 +:101850003093ED003091EB0031603093EB007093EA +:10186000EC002093ED005093F0002091EE0027FF54 +:1018700007C09F5FD3CF8F708093E90081E0089508 +:1018800080E008958091E50187FF11C08091E80014 +:1018900082FD05C08091E4018111F8CF11C08091D3 +:1018A000E8008B770BC08091E401882349F0809198 +:1018B000E80080FFF8CF8091E8008E778093E80001 +:1018C00008952091E4003091E50095E64091EC0008 +:1018D000842F817040FF22C08091E80080FD1CC0F1 +:1018E0008091E401882391F0853091F08091EB00A4 +:1018F00085FD10C04091E4005091E5004217530768 +:1019000029F39A01915011F784E0089582E0089537 +:1019100083E0089581E0089580E008954091E80013 +:1019200042FFDECF08950E94010D0E94090DE0EEF6 +:10193000F0E0808181608083E8EDF0E080818F7746 +:10194000808319BCA7EDB0E08C918E7F8C93808151 +:101950008F7E80831092E30108950F931F93CF939E +:10196000DF930E94010D0E94090DC8EDD0E088812F +:101970008F77888388818068888388818F7D88833A +:1019800019BC1092E4011092E0011092E201109251 +:10199000E10100EE10E0F80180818B7F8083888177 +:1019A0008160888342E060E080E00E940D0CE1EEFF +:1019B000F0E080818E7F8083E2EEF0E080818160C4 +:1019C0008083808188608083F80180818E7F80831E +:1019D000888180618883DF91CF911F910F91089555 +:1019E000E8EDF0E080818F7E8083E7EDF0E080819C +:1019F0008160808384E082BF81E08093E3010C9466 +:101A0000AD0CE8EDF0E080818E7F80831092E200E3 +:101A100008951092DA001092E10008951F920F923B +:101A20000FB60F9211242F933F934F935F936F93B1 +:101A30007F938F939F93AF93BF93EF93FF93809187 +:101A4000E10082FF0BC08091E20082FF07C080911D +:101A5000E1008B7F8093E1000E94750F8091DA0096 +:101A600080FF1FC08091D80080FF1BC08091DA00EA +:101A70008E7F8093DA008091D90080FF0DC080E1D5 +:101A800089BD82E189BD09B400FEFDCF81E080936C +:101A9000E4010E94700905C019BC1092E4010E9483 +:101AA0007E098091E10080FF19C08091E20080FFF3 +:101AB00015C08091E2008E7F8093E2008091E20069 +:101AC00080618093E2008091D80080628093D8008A +:101AD00019BC85E08093E4010E9482098091E100B5 +:101AE00084FF30C08091E20084FF2CC080E189BD7A +:101AF00082E189BD09B400FEFDCF8091D8008F7DC1 +:101B00008093D8008091E1008F7E8093E1008091E6 +:101B1000E2008F7E8093E2008091E20081608093FA +:101B2000E2008091E001882311F084E007C08091F9 +:101B3000E30087FD02C081E001C083E08093E401FF +:101B40000E9484098091E10083FF29C08091E20016 +:101B500083FF25C08091E100877F8093E10082E0D0 +:101B60008093E4011092E0018091E1008E7F8093E8 +:101B7000E1008091E2008E7F8093E2008091E2009C +:101B800080618093E20042E060E080E00E940D0C02 +:101B90008091F00088608093F0000E948109FF919D +:101BA000EF91BF91AF919F918F917F916F915F91D5 +:101BB0004F913F912F910F900FBE0F901F9018954E +:101BC0001F920F920FB60F9211242F933F934F93B2 +:101BD0005F936F937F938F939F93AF93BF93CF93B5 +:101BE000DF93EF93FF93C091E900CF708091EC00F9 +:101BF000D82FD17080FDD0E81092E9008091F000DC +:101C0000877F8093F00078940E94240E1092E90060 +:101C10008091F00088608093F000CD2BCF70C0934E +:101C2000E900FF91EF91DF91CF91BF91AF919F912B +:101C30008F917F916F915F914F913F912F910F9075 +:101C40000FBE0F901F9018951F93CF93DF93CDB7C2 +:101C5000DEB7AA970FB6F894DEBF0FBECDBFE5EE94 +:101C6000F1E088E08E0F9091F10091938E13FBCFFD +:101C70000E94A0098091E80083FF1FC18091E501C7 +:101C80009091E601492F50E04A30510508F015C106 +:101C9000FA01EA5AFF4F0C941F24803881F08238F1 +:101CA00009F00BC18091E9018F708093E900809168 +:101CB000EB0085FB882780F91092E90006C080912F +:101CC000E1019091E201911182609091E800977F8B +:101CD0009093E8008093F1001092F100C8C0282F83 +:101CE0002D7F09F0EAC0882319F0823061F0E5C049 +:101CF0008091E701813009F0E0C0933009F080E085 +:101D00008093E2012BC08091E701811127C080916F +:101D1000E9018F7009F4D1C08093E9002091EB00B4 +:101D200020FF1CC0933021F48091EB00806214C02E +:101D30009091EB0090619093EB0021E030E0A901DD +:101D400002C0440F551F8A95E2F74093EA001092B3 +:101D5000EA008091EB0088608093EB001092E9002C +:101D60008091E800877F86C08111A7C01091E701AC +:101D70001F778091E3008078812B8093E30080912E +:101D8000E800877F8093E8000E94420C8091E80081 +:101D900080FFFCCF8091E30080688093E300111105 +:101DA00002C082E001C083E08093E40186C08058D5 +:101DB000823008F082C08091E7019091E8018C3D6B +:101DC00053E0950779F583E08A838AE289834FB7E8 +:101DD000F894DE01139620E03EE051E2E32FF0E0BC +:101DE00050935700E49120FF03C0E295EF703F5FEE +:101DF000EF708E2F90E0EA3010F0C79601C0C096C9 +:101E00008D939D932F5F243149F74FBF8091E80058 +:101E1000877F8093E8006AE270E0CE0101960E941D +:101E2000490B14C0AE014F5F5F4F6091E9010E9402 +:101E3000900ABC01892B09F440C09091E800977F7B +:101E40009093E80089819A810E94AC0B8091E80010 +:101E50008B778093E80031C0803879F58091E80075 +:101E6000877F8093E8008091E0018093F10080916A +:101E7000E8008E778093E8000E94420C1EC081111A +:101E80001CC09091E7019230C0F48091E800877FF8 +:101E90008093E8009093E0010E94420C8091E00161 +:101EA000811106C08091E30087FD02C081E001C07E +:101EB00084E08093E4010E948C098091E80083FF14 +:101EC0000AC08091E800877F8093E8008091EB0052 +:101ED00080628093EB00AA960FB6F894DEBF0FBE27 +:101EE000CDBFDF91CF911F9108950895CF93809139 +:101EF000E4018823A1F0C091E900CF709091EC003B +:101F0000892F817090FD80E8C82B1092E9008091A4 +:101F1000E80083FD0E94240ECF70C093E900CF91AA +:101F2000089590936901809368010895E091680194 +:101F3000F0916901309721F00190F081E02D099432 +:101F400080E00895E0916801F0916901309721F0F7 +:101F50000280F381E02D09940895E0916801F091E9 +:101F60006901309721F00480F581E02D09940895EE +:101F700020916601309167018217930771F0909369 +:101F8000670180936601E0916801F09169013097E3 +:101F900021F00680F781E02D0994089520916401D5 +:101FA000309165018217930771F0909365018093DA +:101FB0006401E0916801F0916901309721F000849B +:101FC000F185E02D0994089508950C94E40F0E9482 +:101FD000FA1B0E94A7040C94C01CCF92DF92EF92D0 +:101FE000FF920F931F93CF93DF93CDB7DEB72B975D +:101FF0000FB6F894DEBF0FBECDBF0E94BF048BE6C4 +:10200000C82E81E0D82E00E010E0E02E802F0E9444 +:10201000AD05F60141916F01F42EF826B1F40F5F82 +:102020001F4F0E30110589F78FEF89838A831B823A +:102030000E94031C8160782F9D838C8349815A8183 +:102040006B818D810E94901040C09091CD0191FFD5 +:1020500004C08B870E94B3058B8520E030E04F2DB4 +:1020600050E0922FBA01022E02C0759567950A942E +:10207000E2F760FF24C02E83EF8221E030E06901A7 +:1020800002C0CC0CDD1C9A95E2F790E08C219D21DA +:10209000892B09F420E028870E94031C8160782F97 +:1020A0009A8789874E815F8168858A850E94901012 +:1020B000F801E559FE4F8081C826C08206C02F5F17 +:1020C0003F4F2630310569F6AACF0E94A71F109115 +:1020D0006A010E94960F1817A1F00E94960F809334 +:1020E0006A012B960FB6F894DEBF0FBECDBFDF910D +:1020F000CF911F910F91FF90EF90DF90CF900C94B4 +:102100008F082B960FB6F894DEBF0FBECDBFDF91C0 +:10211000CF911F910F91FF90EF90DF90CF90089596 +:10212000CF93DF93CDB7DEB72B970FB6F894DEBF12 +:102130000FBECDBF4F83588769877A878B87DE01B3 +:10214000119686E0FD0111928A95E9F785E0FE017E +:10215000379601900D928A95E1F749815A816B81FA +:102160007C818D819E810E94C0172B960FB6F894BA +:10217000DEBF0FBECDBFDF91CF9108950895CF93FD +:10218000882309F4C2C0C82F823859F40E94960FE0 +:1021900081FDBBC089E30E94691A0E94361B89E356 +:1021A0000CC0833879F40E94960F80FDAEC083E5A1 +:1021B0000E94691A0E94361B83E50E94AB1ACF91D8 +:1021C0000C94361B843859F40E94960F82FD9DC0F2 +:1021D00087E40E94691A0E94361B87E4EECF8CEFD9 +:1021E0008C0F813A48F48C2F0E94EA2181118DC016 +:1021F0008C2F0E94691AE3CF80E28C0F883048F45C +:10220000C77081E001C0880FCA95EAF70E94EF1AF3 +:10221000D6CF8BE58C0F833078F4C53A29F0C63AD7 +:1022200031F083E890E005C081E890E002C082E8E8 +:1022300090E0CF910C94B80F88E58C0F833108F0B3 +:1022400064C0C83A39F1C93A41F1CA3A49F1CB3AC6 +:1022500051F1CC3A59F1CD3A61F1C03B69F1CE3A36 +:1022600071F1CF3A79F1C13B81F1C23B89F1C33BB6 +:1022700091F1C43B99F1C53BA1F1C63BA9F1C73B24 +:10228000B1F1C83BB9F1C93BC1F1CA3BC9F180E02A +:1022900090E038C082EE90E035C089EE90E032C028 +:1022A0008AEE90E02FC085EB90E02CC086EB90E0AA +:1022B00029C087EB90E026C08CEC90E023C08DEC29 +:1022C00090E020C083E891E01DC08AE891E01AC048 +:1022D00082E991E017C084E991E014C081E292E0C4 +:1022E00011C083E292E00EC084E292E00BC085E26E +:1022F00092E008C086E292E005C087E292E002C068 +:102300008AE292E0CF910C94CE0FCF91089588236A +:1023100009F44BC0823859F40E94960F81FF45C0E2 +:1023200089E30E94691A0E94361B89E30CC0833836 +:1023300071F40E94960F80FF38C083E50E94691AED +:102340000E94361B83E50E94AB1A0C94361B84381E +:1023500059F40E94960F82FF28C087E40E94691AF0 +:102360000E94361B87E4EFCF9CEF980F913A58F309 +:1023700090E2980F983050F4877091E001C0990F67 +:102380008A95EAF7892F0E94F51ADFCF9BE5980F0F +:10239000933020F480E090E00C94B80F885A833199 +:1023A00020F480E090E00C94CE0F0895882321F073 +:1023B0000E94EF1A0C94361B0895882321F00E9486 +:1023C000F51A0C94361B0895BF92CF92DF92EF92CC +:1023D000FF920F931F93CF93DF9300D000D000D0D4 +:1023E000CDB7DEB725E0FC01DE01119601900D921C +:1023F0002A95E1F7FC01D080118102812581229587 +:102400002F7043815481452B09F4FCC21F3F21F4F6 +:10241000FFEFDF1609F4F6C27C012E830E94BE1086 +:10242000D9821A8369817A81802F0E94651A182FB8 +:10243000B92E0E941A1A0E94E1182E81002319F069 +:102440000E940C1B2E81EB2DE295EF70F0E0E05A1C +:10245000FF4F0C941F248B2D807F9B2D9F70F92E96 +:10246000882319F0F29480EFF822002389F0FF20EE +:1024700009F475C280E2810F883020F48F2D0E940C +:10248000EF1A03C08F2D0E94FF1A0E94361B67C2ED +:10249000812F0E948711FF2009F4B4C2105E8F2D96 +:1024A000183018F40E94F51A02C00E94051B2696E7 +:1024B0000FB6F894DEBF0FBECDBFDF91CF911F9155 +:1024C0000F91FF90EF90DF90CF90BF900C94361B50 +:1024D0003B2D307F8B2D8F70303211F08295807FB5 +:1024E000112319F0113021F12CC00023B9F022235F +:1024F00009F4A0C1213009F09DC126960FB6F894C9 +:10250000DEBF0FBECDBFDF91CF911F910F91FF9026 +:10251000EF90DF90CF90BF900C941F1B222319F0F7 +:10252000213009F46FC28E830E94221B8E8196C1D6 +:10253000002321F0223008F065C27CC1211162C263 +:102540008DC1002321F0222309F474C108C2222383 +:1025500009F484C119C22B2D26952695237030E0ED +:102560002115310521F021303105D1F04BC2002376 +:1025700021F0812F9B2D937002C080E090E0269681 +:102580000FB6F894DEBF0FBECDBFDF91CF911F9184 +:102590000F91FF90EF90DF90CF90BF900C94B80F09 +:1025A000002321F0812F9B2D937002C080E090E0EA +:1025B00026960FB6F894DEBF0FBECDBFDF91CF9148 +:1025C0001F910F91FF90EF90DF90CF90BF900C94F0 +:1025D000CE0F812F002319F00E94AF1E02C00E946F +:1025E000171F26960FB6F894DEBF0FBECDBFDF9142 +:1025F000CF911F910F91FF90EF90DF90CF90BF9000 +:102600000C949C1F8B2D837009F07BC00111FAC1C3 +:10261000812F829586958770880F880F912F9F70E4 +:10262000C92ED12CE12CF12C082E04C0CC0CDD1CC1 +:10263000EE1CFF1C0A94D2F714FF12C04FE050E0CA +:1026400060E070E004C0440F551F661F771F8A9535 +:10265000D2F7CB01BA01609570958095909503C033 +:1026600060E070E0CB012B2D269526952370422F3C +:1026700050E042305105D9F04330510569F16C29E1 +:102680007D298E299F294130510551F126960FB69B +:10269000F894DEBF0FBECDBFDF91CF911F910F9198 +:1026A000FF90EF90DF90CF90BF900C9408196C29A9 +:1026B0007D298E299F2926960FB6F894DEBF0FBE7E +:1026C000CDBFDF91CF911F910F91FF90EF90DF90E1 +:1026D000CF90BF900C9424190E940819C701B6012D +:1026E00026960FB6F894DEBF0FBECDBFDF91CF9117 +:1026F0001F910F91FF90EF90DF90CF90BF900C94BF +:10270000EC18002319F08B2D817001C08695882369 +:1027100009F478C1812F829586958770880F880F7C +:10272000912F9F70C92ED12CE12CF12C082E04C0C2 +:10273000CC0CDD1CEE1CFF1C0A94D2F714FF12C057 +:102740004FE050E060E070E004C0440F551F661F8A +:10275000771F8A95D2F7CB01BA0160957095809565 +:10276000909503C060E070E0CB012B2D2695269557 +:102770002370422F50E042305105D9F043305105CB +:1027800069F16C297D298E299F294130510551F12C +:1027900026960FB6F894DEBF0FBECDBFDF91CF9166 +:1027A0001F910F91FF90EF90DF90CF90BF900C940E +:1027B000E2196C297D298E299F2926960FB6F89457 +:1027C000DEBF0FBECDBFDF91CF911F910F91FF9064 +:1027D000EF90DF90CF90BF900C94FE190E94E21909 +:1027E000C701B60126960FB6F894DEBF0FBECDBF67 +:1027F000DF91CF911F910F91FF90EF90DF90CF90DD +:10280000BF900C94C619103FD1F118F4103E50F44B +:10281000A1C0123F09F463C008F44CC0133F09F48F +:1028200073C098C01F708B2D8F710023A1F00E9480 +:102830005F19812F26960FB6F894DEBF0FBECDBF6D +:10284000DF91CF911F910F91FF90EF90DF90CF908C +:10285000BF900C94D6110E948019812F26960FB636 +:10286000F894DEBF0FBECDBFDF91CF911F910F91C6 +:10287000FF90EF90DF90CF90BF900C94DD1100237C +:10288000A9F02111BFC08B2D8F7126960FB6F89439 +:10289000DEBF0FBECDBFDF91CF911F910F91FF9093 +:1028A000EF90DF90CF90BF900C94A519223008F0E4 +:1028B000A9C0E9CF0023A9F08B2D8F7126960FB602 +:1028C000F894DEBF0FBECDBFDF91CF911F910F9166 +:1028D000FF90EF90DF90CF90BF900C945F19002392 +:1028E00059F38B2D8F7126960FB6F894DEBF0FBE6D +:1028F000CDBFDF91CF911F910F91FF90EF90DF90AF +:10290000CF90BF900C948019002399F08B2D8F717C +:1029100026960FB6F894DEBF0FBECDBFDF91CF91E4 +:102920001F910F91FF90EF90DF90CF90BF900C948C +:102930004A1926960FB6F894DEBF0FBECDBFDF91C1 +:10294000CF911F910F91FF90EF90DF90CF90BF90AC +:102950000C9440190023A9F0222309F4ADCF812F54 +:1029600026960FB6F894DEBF0FBECDBFDF91CF9194 +:102970001F910F91FF90EF90DF90CF90BF900C943C +:10298000BF10222309F4ADCF812F26960FB6F894FD +:10299000DEBF0FBECDBFDF91CF911F910F91FF9092 +:1029A000EF90DF90CF90BF900C9487114B2D4F701C +:1029B000612FC7010E94510326960FB6F894DEBF1F +:1029C0000FBECDBFDF91CF911F910F91FF90EF9080 +:1029D000DF90CF90BF900C9464184B2D4F70612FF7 +:1029E000C70126960FB6F894DEBF0FBECDBFDF91AC +:1029F000CF911F910F91FF90EF90DF90CF90BF90FC +:102A00000C94B40526960FB6F894DEBF0FBECDBF6A +:102A1000DF91CF911F910F91FF90EF90DF90CF90BA +:102A2000BF9008950E940C1B0E941C1B0E94E11A7B +:102A30000E94361B0E944D200E949C1F80E090E067 +:102A40000E94B80F80E090E00C94CE0F0E94FC1A18 +:102A50000C9412150E945A1A292F22952F7030E0DB +:102A60002C3031054CF42A3031056CF422503109F8 +:102A70002230310588F407C02C30310549F02F3061 +:102A8000310531F009C0803E48F0803F29F406C08E +:102A900093FB882780F9089580E0089581E00895E8 +:102AA000CF93DF9300D000D01F92CDB7DEB70F9049 +:102AB0000F900F900F900F90DF91CF910895CF93CB +:102AC000DF9300D000D000D0CDB7DEB726960FB68A +:102AD000F894DEBF0FBECDBFDF91CF9108951F9355 +:102AE000CF93DF93C091790116E080917A01C817E6 +:102AF00099F0D0E01C9FF0011D9FF00D1124E558C6 +:102B0000FE4F4081518162817381848195810E9451 +:102B10005F152196C770E9CFDF91CF911F9108957E +:102B20004091AB015091AC016091AD017091AE014B +:102B30008091AF019091B0010C945F158091B0012C +:102B400082958F7009F054C08091AD01882309F4FB +:102B50004FC080917901A0917A016091AB01709191 +:102B6000AC014091AE015091AF01B6E08A1709F473 +:102B70003FC090E041155105C1F17F3F11F46F3F17 +:102B8000A1F1B89FF001B99FF00D1124E558FE4F57 +:102B9000218172132AC02081621327C02281211152 +:102BA00024C0238134812417350710F421503109C2 +:102BB000241B350B283C3105C0F42091B0012F7047 +:102BC00020612093B00126E0289FF001299FF00D9D +:102BD0001124E058FE4F80818F70806180838BEAE2 +:102BE00091E00E94E4110C946F1501968770BECF9E +:102BF0000895CF92DF92EF92FF920F931F93CF939E +:102C0000DF93CDB7DEB762970FB6F894DEBF0FBE85 +:102C1000CDBF8C0185E0F801DE011D9601900D927B +:102C20008A95E1F7D8014C9111965C911197129613 +:102C30006C9112971396CD90DC9014973091AB0164 +:102C40007091AC018091AE019091AF01009709F4B1 +:102C50006BC17F3F19F43F3F09F466C1E090AD01BD +:102C6000EE2009F4C0C02091B001C816D90628F0A2 +:102C7000F601E81BF90BCF0104C0809590958C0DEF +:102C80009D1DFF24F394883C910578F0F12C207F62 +:102C900009F0C6C07C2DD98AC88A89890E9450153E +:102CA0008BEA91E00E94E411B1C0822F807F09F08D +:102CB00046C0751314C0341312C0611110C02F70B8 +:102CC00020612093B0010E9490158BEA91E00E9450 +:102CD000E4118091B001D80115968C932EC0CD28B7 +:102CE00019F15F3F11F44F3FF9F0F62E61111CC04E +:102CF0008091790120917A0136E0821709F45AC057 +:102D000090E0389FF001399FF00D1124E558FE4FF7 +:102D10007181571306C07081471303C0728171110E +:102D200003C001968770E9CFF62E662309F418C117 +:102D30008091B00181608093B001F12C11C17513B5 +:102D400008C0341306C0611104C08091B001D801DD +:102D5000C3C04D875E878D859E856A8B0E942A152C +:102D60006A898823E1F16623D1F12091B001822F95 +:102D700082958F7090E0029774F08091AB019091F2 +:102D8000AC0198878F831986DB86CA862C87CE0193 +:102D900007960E94E41186E0F801ABEAB1E00190E9 +:102DA0000D928A95E1F70E949E150E949015FF24CE +:102DB000F394D6C04D875E878D859E850E945A1AF2 +:102DC000292F22952F7030E0223031050CF0BCC045 +:102DD0009F7009F0B6C0805E883008F4C1C0C80199 +:102DE0000E94E411E4CFC816D90608F453C0F601D6 +:102DF000E81BF90BCF01883C910508F450C0F12C79 +:102E00007C2DD98AC88A89890E945015EBEAF1E0A5 +:102E100086E0DF011D928A95E9F70E949015A0C017 +:102E2000751314C0341312C0611110C08091B00129 +:102E3000F8018583C8010E94E41186E0EBEAF1E025 +:102E4000DF011D928A95E9F7FE2C8AC04D875E87C7 +:102E50008D859E856A8B0E942A156A89882309F4CC +:102E6000BECF662309F4BBCF2091B001822F82959B +:102E70008F7090E002970CF48ECF8091AB0190910F +:102E8000AC019A8389831B82DD82CC822E83CE01A2 +:102E900001967FCF809590958C0D9D1DACCFF62E21 +:102EA000662309F49CCF75132EC034132CC02091D7 +:102EB000B00120FD1FC0822F82958F70D9F0D801FC +:102EC00015962C9315978F3049F08F5F982F929518 +:102ED000907F822F8F70892B15968C93C8010E944A +:102EE000E41186E0F801ABEAB1E001900D928A9519 +:102EF000E1F793CF86E0F801ABEAB1E001900D92E3 +:102F00008A95E1F72DC04D875E878D859E850E944D +:102F10002A15811140CF8091B00181608093B0016A +:102F2000C8010E94E4111CC0662309F458CF4D87E4 +:102F30005E878D859E850E942A15882309F44FCFD0 +:102F40002ACF811148CF0CC0243031050CF047CF77 +:102F50009F7009F440CFF8019581907F09F03BCF35 +:102F60008F2D62960FB6F894DEBF0FBECDBFDF91F6 +:102F7000CF911F910F91FF90EF90DF90CF90089528 +:102F80001F93CF93DF93CDB7DEB72C970FB6F8948E +:102F9000DEBF0FBECDBF4F83588769877A878B8787 +:102FA0009C87CE0107960E94F915882369F08F81CE +:102FB00098852A853B85232BF1F19F3F09F063C05B +:102FC0008F3F09F060C037C086E0FE013796DE0112 +:102FD000119601900D928A95E1F76F817885EA85C7 +:102FE000FB85309741F17F3F11F46F3F21F1209134 +:102FF0007A0130E0C90101968770992740917901E3 +:1030000050E08417950709F447C069837A83FD83EC +:10301000EC8396E0929FD001939FB00D1124A558A8 +:10302000BE4FFE01319601900D929A95E1F7809383 +:103030007A010E946F1516E08091790190917A01D2 +:103040008917C1F1189FC001112485589E4F0E9415 +:10305000F915882379F1E09179011E9FF00111247F +:10306000E558FE4F40815181628173818481958151 +:103070000E945F158091790190E0019687709927F1 +:1030800080937901D9CF4F81588569857A858B8561 +:103090009C850E945F15CFCF0E94261510927A0161 +:1030A00010927901EBEAF1E086E0DF011D928A954A +:1030B000E9F7C1CF2C960FB6F894DEBF0FBECDBF97 +:1030C000DF91CF911F910895EF92FF920F931F937D +:1030D000CF93DF938C01892B09F46CC0F12CEE2483 +:1030E000E394E8012196F8018491843740F4843018 +:1030F00008F051C0813081F0823019F15BC0853712 +:1031000009F444C0A8F19CE7980F903708F052C02A +:103110008F770E94871141C00E5F1F4FFE01C4913F +:1031200080E28C0F883048F4C7708E2D01C0880F64 +:10313000CA95EAF70E940F1B14C08C2F0E94BF1083 +:103140002DC00E5F1F4FFE01C49180E28C0F8830AE +:1031500058F4C7708E2D01C0880FCA95EAF70E94F7 +:10316000151B0E94361B1AC08C2F0E94871116C097 +:103170000E5F1F4FFE01C491CC2381F08FE99FE0C9 +:103180000197F1F700C00000C150F6CF0E5F1F4F4E +:10319000FE01F49003C00E94BF108E018F2D882382 +:1031A00009F49FCFEFE9FFE03197F1F700C000008D +:1031B0008150F5CFDF91CF911F910F91FF90EF904C +:1031C000089508956093B5017093B6018093B70197 +:1031D0009093B8010C9412150F931F930091B501B1 +:1031E0001091B6012091B7013091B801DC01CB01FB +:1031F000802B912BA22BB32B8093B5019093B6011A +:10320000A093B701B093B8011F910F910C941215C0 +:103210000F931F930091B5011091B6012091B70152 +:103220003091B801DC01CB0180239123A223B32389 +:103230008093B5019093B601A093B701B093B80104 +:103240001F910F910C9412150F931F930091B501CC +:103250001091B6012091B7013091B801DC01CB018A +:1032600080279127A227B3278093B5019093B601B9 +:10327000A093B701B093B8011F910F910C94121550 +:103280001092B1011092B2011092B3011092B401E8 +:103290000C94121541E050E060E070E004C0440F6F +:1032A000551F661F771F8A95D2F74093B10150933F +:1032B000B2016093B3017093B4010C94121541E014 +:1032C00050E060E070E004C0440F551F661F771F98 +:1032D0008A95D2F78091B1019091B201A091B3018A +:1032E000B091B401482B592B6A2B7B2B4093B10131 +:1032F0005093B2016093B3017093B4010C94121512 +:1033000041E050E060E070E004C0440F551F661FCC +:10331000771F8A95D2F7409550956095709580916A +:10332000B1019091B201A091B301B091B4014823D1 +:1033300059236A237B234093B1015093B2016093D8 +:10334000B3017093B4010C94121541E050E060E0B9 +:1033500070E004C0440F551F661F771F8A95D2F78F +:103360008091B1019091B201A091B301B091B401EB +:10337000482759276A277B274093B1015093B20110 +:103380006093B3017093B4010C9412150F931F93C3 +:103390000091B1011091B2012091B3013091B401BB +:1033A000DC01CB01802B912BA22BB32B8093B1019D +:1033B0009093B201A093B301B093B4011F910F9108 +:1033C0000C9412150F931F930091B1011091B2014B +:1033D0002091B3013091B401DC01CB018023912312 +:1033E000A223B3238093B1019093B201A093B301C0 +:1033F000B093B4011F910F910C9412150F931F936A +:103400000091B1011091B2012091B3013091B4014A +:10341000DC01CB0180279127A227B3278093B1013C +:103420009093B201A093B301B093B4011F910F9197 +:103430000C9412150895CF92DF92EF92FF920F93A2 +:103440001F93CF93DF938C01C090B501D090B6014C +:10345000E090B701F090B8018091B1019091B20174 +:10346000A091B301B091B401C82AD92AEA2AFB2A53 +:10347000CFE1D0E0D701C6010C2E04C0B695A795C8 +:10348000979587950A94D2F780FF06C0B8018C2FD4 +:103490000E94F407019721F4219760F780E001C0B2 +:1034A0008C2FDF91CF911F910F91FF90EF90DF90C4 +:1034B000CF900895CF93DF93EC010E941B1ABE01B9 +:1034C0000E94F407DF91CF910895CB010E945A1A10 +:1034D000089590910C01992321F090910D01911183 +:1034E00009C020910E0130910F01F90132969FEF32 +:1034F00040E01FC0982F9695969596959F3050F571 +:10350000E0910E01F0910F01E90FF11D877021E0AC +:1035100030E0A90102C0440F551F8A95E2F7CA01A5 +:103520009181892B818308959F3F39F04F5F4E3001 +:1035300041F051915813F8CF0DC05111F7CF942F8E +:10354000F5CF9F3F39F0F901E90FF11D97FDFA958D +:1035500082830895089590910C01992321F0909110 +:103560000D01911109C020910E0130910F01F90157 +:103570003296205F3F4F1FC0982F9695969596954F +:103580009F30F0F4E0910E01F0910F01E90FF11D71 +:10359000877021E030E0A90102C0440F551F8A95D1 +:1035A000E2F7CA018095918189238183089531963C +:1035B000E217F30729F090819813F9CF1082F7CF23 +:1035C000089581E090E0E0910E01F0910F01E80F85 +:1035D000F91F1082019680319105A9F70895909105 +:1035E000CC01892B8093CC01089580959091CC01DA +:1035F00089238093CC0108951092CC010895909175 +:10360000CB01892B8093CB01089580959091CB01BC +:1036100089238093CB0108951092CB010895909156 +:10362000CA01892B8093CA01089580959091CA019F +:1036300089238093CA0108951092CA010895809346 +:10364000B90108951092B901089580910E019091E9 +:103650000F01FC0131969C01205F3F4F80E091916A +:1036600091118F5FE217F307D1F70895E0910E01F2 +:10367000F0910F018091CC018083E0910E01F091D7 +:103680000F0190818091CB01892B8083E0910E0105 +:10369000F0910F0190818091CA01892B80838091E4 +:1036A000B901882361F0E0910E01F0910F01908142 +:1036B000892B80830E94251B81111092B901809172 +:1036C0000E0190910F010C94A20FCF92DF92EF9216 +:1036D000FF926C01EE24FF24C114D104E104F10433 +:1036E00021F0C701B60120E101C020E0C72ED82E8D +:1036F000E92EFF24C114D104E104F10419F0285F7C +:10370000C701B6016B017C0154E0F694E794D794AD +:10371000C7945A95D1F7C114D104E104F10419F00A +:103720002C5FC701B6016B017C0142E0F694E7947F +:10373000D794C7944A95D1F7C114D104E104F10498 +:1037400019F02E5FC701B601DC01CB01B695A79534 +:1037500097958795892B8A2B8B2B09F02F5F822FCA +:10376000FF90EF90DF90CF9008958091E401843036 +:1037700021F11092CE0120E488E190E00FB6F89498 +:10378000A895809360000FBE2093600080E00E94A7 +:103790008F0883B7817F846083BF83B7816083BFD5 +:1037A0007894889583B78E7F83BF88E10FB6F894AD +:1037B00080936000109260000FBE089508950895F0 +:1037C000CF930E94DE1B0E94BF040E94DF1BC0E05B +:1037D0008C2F0E94AD05811104C0CF5FCE30C1F7A0 +:1037E00001C081E0CF9108950E9426150E94960F96 +:1037F0000C948F0882E084BD93E095BD9AEF97BD4D +:1038000080936E0008952FB7F8948091CF01909126 +:10381000D001A091D101B091D2012FBF0895CF92D4 +:10382000DF92EF92FF920F931F932FB7F89440917E +:10383000CF015091D0016091D1017091D2012FBF81 +:103840006A017B01EE24FF248C0120E030E0C016E9 +:10385000D106E206F30610F4415051099A01281BE3 +:10386000390BC9011F910F91FF90EF90DF90CF901E +:1038700008951F920F920FB60F9211248F939F936A +:10388000AF93BF938091CF019091D001A091D101CE +:10389000B091D2010196A11DB11D8093CF019093EB +:1038A000D001A093D101B093D201BF91AF919F916C +:1038B0008F910F900FBE0F901F9018950E94930C40 +:1038C000F8942FEF87EA91E6215080409040E1F78D +:1038D00000C0000087E090EBDC018093EE01909344 +:1038E000EF01A093F001B093F1019CE088E10FB6E5 +:1038F000F894A895809360000FBE90936000FFCF6E +:10390000EF92FF920F931F93CF93DF93D82FC0E0D6 +:103910008C2F0E94AD0500E010E0E82EF12CC701CD +:10392000002E02C0959587950A94E2F780FD06C0A7 +:103930000F5F1F4F0630110591F709C0602F7C2FD4 +:1039400080E00E94B505D813F3CF81E004C0CF5FBB +:10395000CE30F1F680E0DF91CF911F910F91FF9073 +:10396000EF900895CF93C82F8CE20E94801C88238B +:1039700021F08C2FCF910C94801C80E0CF91089582 +:10398000CF930E94071E811102C00E94ED1DC5E663 +:10399000C15049F00E94BF048FE39CE90197F1F701 +:1039A00000C00000F5CF89E20E94B21C811113C152 +:1039B0008AE20E94B21C81110E94ED1D85E00E94E6 +:1039C000B21C81110E945E1C0E94121E8093CD01C8 +:1039D00087E00E94B21C8823A9F18BE10E94B21CEF +:1039E000882351F08091CD0181FB222720F991E0BD +:1039F000922790FB81F90EC08EE00E94B21C8823B2 +:103A000061F08091CD0182FB222720F991E092277D +:103A100090FB82F98093CD0115C080E10E94B21C19 +:103A20009091CD01882341F093FB222720F981E07A +:103A3000822780FB93F904C0892F809580FB90F941 +:103A40009093CD018091CD010E94161E0E94241EEC +:103A50008093ED0180EE0E94B21C882341F080919A +:103A6000ED01982F909590FB80F98093ED0189E30B +:103A70000E94B21C882359F08091ED0181FB22271E +:103A800020F991E0922790FB81F98093ED0182EE7D +:103A90000E94B21C882359F08091ED0182FB2227FD +:103AA00020F991E0922790FB82F98093ED0186EE58 +:103AB0000E94B21C882359F08091ED0183FB2227DC +:103AC00020F991E0922790FB83F98093ED0183EE3A +:103AD0000E94B21C882359F08091ED0184FB2227BB +:103AE00020F991E0922790FB84F98093ED0185E322 +:103AF0000E94B21C882359F08091ED0185FB22279A +:103B000020F991E0922790FB85F98093ED0181E304 +:103B10000E94B21C882359F08091ED0186FB222778 +:103B200020F991E0922790FB86F98093ED0181E1E5 +:103B30000E94B21C882359F08091ED0187FB222757 +:103B400020F991E0922790FB87F98093ED01809115 +:103B5000ED010E94281E8091ED0187FB882780F9E6 +:103B600080930D0187E20E94B21CC82F8EE10E9453 +:103B7000B21C8111C2608FE10E94B21C8111C4602D +:103B800080E20E94B21C8111C86081E20E94B21CD6 +:103B90008111C06182E20E94B21C8111C06283E285 +:103BA0000E94B21C8111C06484E20E94B21C88236E +:103BB00011F0C06802C0CC2329F08C2F0E941F1E78 +:103BC0006C2F03C00E941B1E682F70E080E090E005 +:103BD000CF910C94E218CF9108956DEE7EEF80E0C6 +:103BE00090E00E94552460E082E090E00E9447242B +:103BF00060E083E090E00E94472460E084E090E091 +:103C00000E94472460E085E090E00C94472480E027 +:103C100090E00E94412421E08D3E9E4F09F020E07B +:103C2000822F089582E090E00C943924682F82E07E +:103C300090E00C94472483E090E00C943924682FA2 +:103C400083E090E00C94472484E090E00C943924C5 +:103C5000682F84E090E00C9447248091D50180FF88 +:103C60000BC06091130185E0689FB0011124759528 +:103C70006795759567952BC081FF09C06091130109 +:103C800085E0689FB00111247595679520C082FF7B +:103C900007C06091130185E0689FB001112417C02F +:103CA0009091D6019923D1F060911201961788F76F +:103CB0002091130185E0289F90011124929FA0017B +:103CC000939F500D112470E0CA010E940B246038AC +:103CD000710540F46115710539F002C065E070E0CE +:103CE000862F08958FE7089581E008958091D5018A +:103CF00080FF08C06091110170E07595679575951A +:103D0000679521C081FF06C06091110170E0759533 +:103D1000679519C082FF04C06091110170E010C066 +:103D20009091D6019923C1F0609110019617A0F7E8 +:103D300080911101899FC001112470E00E940B2421 +:103D40006038710528F46115710521F0862F0895FA +:103D50008FE7089581E0089561E070E0F4CF803F3F +:103D600021F40E942D1E819504C0813F29F40E94F8 +:103D70002D1E8093D9010895823F21F40E942D1EAB +:103D8000819504C0833F29F40E942D1E8093D801A1 +:103D90000895893F19F40E94761E05C08A3F31F4C8 +:103DA0000E94761E81958093DA0108958B3F21F45D +:103DB0000E94761E819504C08C3F29F40E94761ED5 +:103DC0008093DB010895843F21F48091D7018160C5 +:103DD00017C0853F21F48091D701826011C0863FD2 +:103DE00021F48091D70184600BC0873F21F480913A +:103DF000D701886005C0883F31F48091D701806188 +:103E00008093D70108958D3F21F48091D501816081 +:103E10000BC08E3F21F48091D501826005C08F3F99 +:103E200029F48091D50184608093D5010895803F65 +:103E300039F48091D90187FF6CC01092D90169C013 +:103E4000813F29F48091D9011816BCF362C090918A +:103E5000D801823F29F497FF5CC01092D80159C065 +:103E6000833F19F41916CCF354C0893F41F4809173 +:103E7000DA0118160CF04DC01092DA014AC08A3FE0 +:103E800029F48091DA0187FF44C0F6CF8B3F39F4E3 +:103E90008091DB0187FF3DC01092DB013AC08C3F6F +:103EA00029F48091DB011816BCF333C0843F21F460 +:103EB0008091D7018E7F17C0853F21F48091D70173 +:103EC0008D7F11C0863F21F48091D7018B7F0BC07D +:103ED000873F21F48091D701877F05C0883F31F467 +:103EE0008091D7018F7E8093D70113C08D3F21F43D +:103EF0008091D5018E7F0BC08E3F21F48091D5013A +:103F00008D7F05C08F3F29F48091D5018B7F8093F1 +:103F1000D5018091D80181110EC08091D901811104 +:103F20000AC08091DA01811106C08091DB01811104 +:103F300002C01092D601089587ED91E00E94AD0F66 +:103F40000E94031C9093D4018093D30108951F9382 +:103F5000CF93DF938091D3019091D4010E940F1CE5 +:103F6000AC019091D601992321F02091140130E009 +:103F700006C0209115018AE0289F90011124421764 +:103F8000530708F486C08091D801C091D901D0911F +:103F9000DA011091DB01811107C0C11176C0D11186 +:103FA00074C0111172C075C09F3F19F09F5F90934C +:103FB000D601181624F40E942D1E8093D8018091FA +:103FC000D80187FF05C00E942D1E81958093D801DE +:103FD0001C1624F40E942D1E8093D9018091D901D2 +:103FE00087FF05C00E942D1E81958093D9016091A5 +:103FF000D801662339F1C091D901CC2319F1772773 +:1040000067FD7095872F972F0E941C2323E333E3CE +:1040100043E35FE30E9480230E94E9226093D8017A +:104020006C2F772767FD7095872F972F0E941C2391 +:1040300023E333E343E35FE30E9480230E94E9220A +:104040006093D9011D1624F40E94761E8093DA0134 +:104050008091DA0187FF05C00E94761E81958093CA +:10406000DA01111624F40E94761E8093DB01809100 +:10407000DB0187FF05C00E94761E81958093DB01DE +:10408000DF91CF911F910C949C1F9F3F09F08ECF21 +:1040900096CFDF91CF911F910895E7EDF1E085E094 +:1040A000DF011D928A95E9F71092D6011092D50191 +:1040B0000895833081F128F4813059F08230D1F0B5 +:1040C0000895853009F449C0B8F1863009F456C026 +:1040D000089580911501262F30E0280F311D2F3FC4 +:1040E000310524F4680F6093150108958FEF8093D4 +:1040F0001501089580911401262F30E0280F311DFD +:104100002F3F310524F4680F6093140108958FEF59 +:1041100080931401089580911301262F30E0280F19 +:10412000311D2F3F310524F4680F6093130108956A +:104130008FEF80931301089580911201262F30E0B4 +:10414000280F311D2F3F310524F4680F60931201B1 +:1041500008958FEF80931201089580911101262F09 +:1041600030E0280F311D2F3F310524F4680F609394 +:10417000110108958FEF809311010895809110012E +:10418000262F30E0280F311D2F3F310524F4680F12 +:104190006093100108958FEF80931001089583308C +:1041A00011F128F4813049F0823091F00895853082 +:1041B00081F120F18630C1F10895809115016817D1 +:1041C00020F4861B8093150108951092150108951F +:1041D00080911401681720F4861B809314010895C0 +:1041E00010921401089580911301681720F4861B22 +:1041F0008093130108951092130108958091120184 +:10420000681720F4861B8093120108951092120102 +:10421000089580911101681720F4861B8093110185 +:10422000089510921101089580911001681720F4EB +:10423000861B8093100108951092100108950F932A +:104240001F938D3109F46BC008F03FC08E3009F424 +:104250007FC0C0F4873009F469C068F4863009F083 +:10426000B1C08091CD01817F8E7F8093CD0181E0AF +:104270008093DD01A8C0883009F4A2C08B3009F416 +:104280009FC0A0C0863109F49BC078F4803109F446 +:1042900072C0813109F096C00E94261590910D01DF +:1042A00081E0892780930D018BC0893109F488C092 +:1042B0008B3109F087C08091CD0181FB222720F945 +:1042C00091E0922790FB81F94CC0853309F470C0CE +:1042D00048F4873209F46CC008F459C0893209F4F3 +:1042E00067C070C0833438F48A3308F04EC0883316 +:1042F00009F466C067C0833409F45AC0883409F0F1 +:1043000061C00E9426150FEF13ED20E3015010400D +:104310002040E1F700C000000E945E1C51C00E94D6 +:10432000A3220E94960F0E948F084AC09091CD014F +:10433000892F8095817080FB90F929F096609860B4 +:104340009093CD0140C0997F977F9093CD0138C065 +:104350008091CD0182FB222720F991E0922790FBEA +:1043600082F98093CD01992359F18091CD0181602B +:104370008093CD0125C08091CD0183FB222720F9B8 +:1043800091E0922790FB83F9ECCF895301C08D51C6 +:1043900041E050E060E070E08A019B0104C0000F42 +:1043A000111F221F331F8A95D2F7C901B80104C01B +:1043B00061E070E080E090E00E94E2180E94261523 +:1043C00081E001C080E01F910F91089580E0089581 +:1043D00080E00895CF93C82F8091DD01813079F07E +:1043E00018F08230E9F187C0E0910E01F0910F01E1 +:1043F0008081813169F0823209F07FC009C0E0918B +:104400000E01F0910F018081813111F0823261F44F +:104410008C2F0E94E621811104C08C2F0E941F2145 +:104420001DC081E090E01AC08C2F0E94E82181110C +:1044300014C0C43179F048F4CB3079F0C03109F0C0 +:1044400060C082E08093DD0108C0C93219F0C83332 +:1044500021F057C01092DD0154C081E0817053C03B +:10446000C93289F118F5C43171F1A8F4C73009F0E7 +:1044700046C08AE08093150194E19093140193E083 +:10448000909313018093120188E08093110188E2D8 +:104490008093100134C0CE51C63088F5EC2FF0E087 +:1044A000E65DFE4F80818093DC0129C0CE34E9F0C7 +:1044B00020F4CB3421F56AE013C0C13579F0C23560 +:1044C000F1F461E00DC08091DC01882319F01092B5 +:1044D000DC0115C081E08093DD0115C061E006C0FC +:1044E0008091DC010E9459200AC06AE08091DC01C1 +:1044F0000E94CF2004C01092DD0180E004C081E062 +:1045000002C080E0ABCFCF910895E1E8F0E0808178 +:10451000886080838081816080838FB7F89493E086 +:104520009093890090ED909388008FBF0895EFE6F7 +:10453000F0E08081826080830895EFE6F0E0808182 +:104540008D7F80830895EFE6F0E0908182E08927F7 +:10455000808308951F920F920FB60F9211242F930C +:104560003F934F935F936F937F938F939F93AF93FB +:10457000BF93EF93FF938091DE019091DF0101964D +:104580009093DF018093DE01811103C082E00E94DD +:104590008F08E091DF01E695E695F0E0EA52FA4FE8 +:1045A000E4918091DE018E1303C080E00E948F08A9 +:1045B000FF91EF91BF91AF919F918F917F916F91FB +:1045C0005F914F913F912F910F900FBE0F901F90D1 +:1045D000189504D06894B1118DC0089570D088F0FA +:1045E0009F5790F0B92F9927B751A0F0D1F0660FDF +:1045F000771F881F991F1AF0BA95C9F712C0B130FA +:1046000081F077D0B1E0089574C0672F782F8827A4 +:10461000B85F39F0B93FCCF3869577956795B39538 +:10462000D9F73EF490958095709561957F4F8F4FA7 +:104630009F4F0895E89409C097FB3EF490958095AC +:10464000709561957F4F8F4F9F4F9923A9F0F92F58 +:1046500096E9BB279395F695879577956795B795D6 +:10466000F111F8CFFAF4BB0F11F460FF1BC06F5FBC +:104670007F4F8F4F9F4F16C0882311F096E911C0CE +:10468000772321F09EE8872F762F05C0662371F0EF +:1046900096E8862F70E060E02AF09A95660F771F03 +:1046A000881FDAF7880F9695879597F9089557FD33 +:1046B0009058440F551F59F05F3F71F04795880F90 +:1046C00097FB991F61F09F3F79F087950895121627 +:1046D00013061406551FF2CF4695F1DF08C01616D3 +:1046E00017061806991FF1CF869571056105089484 +:1046F0000895E894BB2766277727CB0197F908959B +:104700000BD078C069D028F06ED018F0952309F04E +:104710005AC05FC01124EECFCADFA0F3959FD1F33A +:10472000950F50E0551F629FF001729FBB27F00D5F +:10473000B11D639FAA27F00DB11DAA1F649F6627B4 +:10474000B00DA11D661F829F2227B00DA11D621F03 +:10475000739FB00DA11D621F839FA00D611D221FBD +:10476000749F3327A00D611D231F849F600D211DA1 +:10477000822F762F6A2F11249F5750408AF0E1F044 +:1047800088234AF0EE0FFF1FBB1F661F771F881F8D +:1047900091505040A9F79E3F510570F014C0AACF28 +:1047A0005F3FECF3983EDCF3869577956795B79578 +:1047B000F795E7959F5FC1F7FE2B880F911D9695A2 +:1047C000879597F9089597F99F6780E870E060E012 +:1047D00008959FEF80EC089500240A94161617069A +:1047E00018060906089500240A94121613061406E2 +:1047F00005060895092E0394000C11F4882352F045 +:10480000BB0F40F4BF2B11F460FF04C06F5F7F4FFC +:104810008F4F9F4F089597FB072E16F4009407D0F3 +:1048200077FD09D00E94252407FC05D03EF4909521 +:1048300081959F4F0895709561957F4F0895EE0F74 +:10484000FF1F0590F491E02D0994AA1BBB1B51E1B9 +:1048500007C0AA1FBB1FA617B70710F0A61BB70BF0 +:10486000881F991F5A95A9F780959095BC01CD0195 +:104870000895F999FECF92BD81BDF89A992780B528 +:104880000895A8E1B0E042E050E00C945C24262FAB +:10489000F999FECF1FBA92BD81BD20BD0FB6F89425 +:1048A000FA9AF99A0FBE019608950E944724272F7D +:1048B0000C944824DC01CB01FC01F999FECF06C021 +:1048C000F2BDE1BDF89A319600B40D9241505040CE +:0848D000B8F70895F894FFCF3A +:1048D800200291081F09FC08C80894080101BA01C0 +:1048E80028080A03140A3F4D363997054A05140566 +:1048F800DB046E048704A004B9040102030405065E +:044908000708090093 :00000001FF diff --git a/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png b/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png new file mode 100644 index 00000000..193aa339 Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png differ diff --git a/keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c b/keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c new file mode 100644 index 00000000..b3ed55f2 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/osx_de_experimental/keymap.c @@ -0,0 +1,376 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_extras/keymap_french.h" +#include "keymap_extras/keymap_neo2.h" +#include "keymap_extras/keymap_uk.h" +#include "keymap_extras/keymap_colemak.h" +#include "keymap_extras/keymap_french_osx.h" +#include "keymap_extras/keymap_nordic.h" +#include "keymap_extras/keymap_dvorak.h" +#include "keymap_extras/keymap_german.h" +#include "keymap_extras/keymap_norwegian.c" +#include "keymap_extras/keymap_fr_ch.h" +#include "keymap_extras/keymap_german_osx.h" +#include "keymap_extras/keymap_spanish.h" +#include "keymap_extras/keymap_bepo.h" + +#define BASE 0 +#define SYMB 1 +#define MDIA 2 +#define SMLY 3 +#define NUMB 4 +#define EGOS 5 + +#define SMLY_TOG_QUOT 0 +#define M_TOGGLE_5 1 +#define TGH_NUM 2 +#define M_DE_OSX_PLUS_CTRLALT 3 +#define SM_KISS 4 +#define SM_FROWN 5 +#define SM_CRY 6 +#define SM_SMILE 7 +#define SM_SMIRK 8 +#define M_LGUI_SHFT 9 +#define SM_HEART 10 +#define TOG_HLD_MDIA 11 +#define SM_LAUGH 12 +#define SM_SAD 13 +#define M_DE_OSX_CIRC_CTRLCMD 14 +#define M_MEH_SH_ACUT 15 + +//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1 +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE]=KEYMAP( +//left half + KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(TGH_NUM), + KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, + KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, + KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, + LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), LSFT(KC_LCTRL), M(SMLY_TOG_QUOT), + KC_HOME, KC_END, + KC_PGUP, + KC_BSPC, KC_DEL, KC_PGDN, + //right half + M(TOG_HLD_MDIA), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, + KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, + DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), + KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, + MEH_T(DE_OSX_HASH), ALL_T(DE_OSX_ACUT), LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), + KC_LEFT, KC_RIGHT, + KC_UP, + KC_DOWN, KC_ENT, KC_SPC), +[SYMB]=KEYMAP( +//left half + KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, + KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, + KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, + KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_DEL, KC_TRNS, + //right half + KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, DE_OSX_BSLS, DE_OSX_LBRC, DE_OSX_RBRC, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, + DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, DE_OSX_LCBR, DE_OSX_RCBR, DE_OSX_HASH, + KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + DE_OSX_QUOT, DE_OSX_DQOT, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, + KC_F13, KC_F12, + KC_F14, + KC_F15, KC_TRNS, KC_TRNS), +[MDIA]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, + KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + //right half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, + KC_MUTE, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK), +[SMLY]=KEYMAP( +//left half + 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, 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, + //right half + M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, + M(SM_HEART), M(SM_KISS), 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), +[NUMB]=KEYMAP( +//left half + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, + //right half + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, DE_OSX_SLSH, KC_7, KC_8, KC_9, DE_OSX_ASTR, KC_F12, + DE_OSX_SLSH, KC_4, KC_5, KC_6, DE_OSX_PLUS, DE_OSX_MINS, + KC_TRNS, DE_OSX_PERC, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, + KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +[EGOS]=KEYMAP( +//left half + 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_LSFT, 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_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_F1, KC_F2, + KC_F3, + KC_SPC, KC_LCTL, KC_F4, + //right half + 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, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ +static uint16_t start; +switch(id) { +case SMLY_TOG_QUOT: +//Macro: SMLY_TOG_QUOT//----------------------- +if (record->event.pressed) { + start = timer_read(); + layer_state ^= (1<150) { + return MACRO_NONE; + } else { + return MACRO(DOWN(KC_LSFT),TYPE(DE_OSX_HASH),UP(KC_LSFT),END); + } + } + +break; +case M_TOGGLE_5: +//Macro: M_TOGGLE_5//----------------------- + if (record->event.pressed){ + layer_state ^= (1<<5); + layer_state &= (1<<5); + } + +break; +case TGH_NUM: +//Macro: TGH_NUM//----------------------- +if (record->event.pressed){ + start = timer_read(); + layer_state ^=(1< 150) { + layer_state^=(1<event.pressed) { + start = timer_read(); + return MACRO(DOWN(KC_LCTRL),DOWN(KC_LALT),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LALT),END); + } else { + return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(KC_RBRC),END); + } + } + +break; +case SM_KISS: +//Macro: SM_KISS//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_RBRC),UP(KC_LSFT),END); + } + +break; +case SM_FROWN: +//Macro: SM_FROWN//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LALT),TYPE(KC_8),UP(KC_LALT),END); + } + +break; +case SM_CRY: +//Macro: SM_CRY//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END); + } + +break; +case SM_SMILE: +//Macro: SM_SMILE//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END); + } + +break; +case SM_SMIRK: +//Macro: SM_SMIRK//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END); + } + +break; +case M_LGUI_SHFT: +//Macro: M_LGUI_SHFT//----------------------- +if (record->event.pressed){ + return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END); + }else{ + return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END); + } + +break; +case SM_HEART: +//Macro: SM_HEART//----------------------- +if (record->event.pressed) { + return MACRO(TYPE(KC_GRV),TYPE(KC_3),END); + } + +break; +case TOG_HLD_MDIA: +//Macro: TOG_HLD_MDIA//----------------------- +if (record->event.pressed){ + start = timer_read(); + layer_state ^=(1< 150) { + layer_state^=(1<event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_D),UP(KC_LSFT),END); + } + +break; +case SM_SAD: +//Macro: SM_SAD//----------------------- +if (record->event.pressed) { + return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END); + } + +break; +case M_DE_OSX_CIRC_CTRLCMD: +//Macro: M_DE_OSX_CIRC_CTRLCMD//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(DOWN(KC_LCTRL),DOWN(KC_LGUI),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LGUI),END); + } else { + return MACRO(UP(KC_LCTRL),UP(KC_LGUI),TYPE(KC_NUBS),END); + } + } + +break; +case M_MEH_SH_ACUT: +//Macro: M_MEH_SH_ACUT//----------------------- +if (record->event.pressed) { + start = timer_read(); + return MACRO(DOWN(KC_LCTRL),DOWN(KC_LSFT),DOWN(KC_LALT),END); + } else { + if (timer_elapsed(start) >150) { + return MACRO(U(LCTRL),U(LSFT),U(LALT),END); + } else { + return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(DE_OSX_ACUT),UP(KC_LSFT),END); + } + } + +break; +} +return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + +uint8_t layer = biton32(layer_state); + +ergodox_board_led_off(); +ergodox_right_led_1_off(); +ergodox_right_led_2_off(); +ergodox_right_led_3_off(); +switch (layer) { + + case SYMB: + ergodox_right_led_1_on(); + + + break; + case MDIA: + + ergodox_right_led_2_on(); + + break; + case NUMB: + + + ergodox_right_led_3_on(); + break; + case EGOS: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; +default: +// none +break; +} + +}; + diff --git a/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png b/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png new file mode 100644 index 00000000..29f1099d Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png differ diff --git a/keyboard/ergodox_ez/keymaps/plums/keymap.c b/keyboard/ergodox_ez/keymaps/plums/keymap.c new file mode 100644 index 00000000..46eb2e42 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/plums/keymap.c @@ -0,0 +1,229 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | F5 | |Hypr+M| 6 | 7 | 8 | 9 | 0 | Mute | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | LGui | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | + * |--------+------+------+------+------+------| SYMB | | MDIA |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Ca/Ctl| { | ( | | | : | | - | = | ) | } |C`/Ctl| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | LGA | LAlt | | RAlt | Play | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * |Backsp| Esc |------| |------|Enter |Space | + * |ace | | End | | PgDn | | | + * `--------------------' `--------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, + KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, TG(SYMB), + F(0), KC_LCBR, KC_LPRN,KC_PIPE,KC_COLN, + LGUI(KC_LALT), KC_LALT, + KC_HOME, + KC_BSPC, KC_ESC, KC_END, + // right hand + HYPR(KC_M), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE, + KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + TG(MDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_MINS, KC_EQL, KC_RPRN, KC_RCBR, F(1), + KC_RALT, KC_MPLY, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | | | | | | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Left | Down | Up | Right| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, 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 +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |VolUp |VolDn | Prev | Next | | | LClk | RClk | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + 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, KC_TRNS, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + 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_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_MACRO_TAP(0), // FN0 - Ctrl + a (For screen/tmux) + [1] = ACTION_MACRO_TAP(1) // FN1 - Ctrl + ` (For quake style console) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. +{ + switch(id) { + case 0: + if (record->event.pressed) { + if (record->tap.count) { + if (record->tap.interrupted) { + record->tap.count = 0; + // hold press action + register_code(KC_LCTL); + } else { + // tap press action + return MACRO( D(LCTL), T(A), U(LCTL), END ); + } + } else { + // hold press action + register_code(KC_LCTL); + } + } else { + if (record->tap.count) { + // tap release action + } else { + // hold release action + unregister_code(KC_LCTL); + } + record->tap.count = 0; + } + break; + case 1: + if (record->event.pressed) { + if (record->tap.count) { + if (record->tap.interrupted) { + record->tap.count = 0; + // hold press action + register_code(KC_RCTL); + } else { + // tap press action + return MACRO( DOWN(KC_RCTL), TYPE(KC_GRV), UP(KC_RCTL), END ); + } + } else { + // hold press action + register_code(KC_RCTL); + } + } else { + if (record->tap.count) { + // tap release action + } else { + // hold release action + unregister_code(KC_RCTL); + } + record->tap.count = 0; + } + break; + } + return MACRO_NONE; +}; + + + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboard/ergodox_ez/keymaps/plums/plums.hex b/keyboard/ergodox_ez/keymaps/plums/plums.hex new file mode 100644 index 00000000..f950ba3a --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/plums/plums.hex @@ -0,0 +1,1159 @@ +:100000000C946E020C94B2020C94B2020C94B202E4 +:100010000C94B2020C94B2020C94B2020C94B20290 +:100020000C94B2020C94B2020C94A60C0C94780DB1 +:100030000C94B2020C94B2020C94B2020C94B20270 +:100040000C94B2020C9442220C94B2020C94B202B0 +:100050000C94B2020C94D11B0C94B2020C94B20218 +:100060000C94B2020C94B2020C94B2020C94B20240 +:100070000C94B2020C94B2020C94B2020C94B20230 +:100080000C94B2020C94B2020C94B2020C94B20220 +:100090000C94B2020C94B2020C94B2020C94B20210 +:1000A0000C94B2020C94B2020C94B202E50D070E4D +:1000B000F50E070EF50E4C0E6F0EF50EC40ED70E94 +:1000C000C311C31100120012431281129A149A1420 +:1000D0009A129A149B139B136E149A149A148514F3 +:1000E00001E40135023502E40001E00104020402EA +:1000F000E00000C801C835002B00E300E10000204B +:1001000000001E00140004001D002F024D001F00FF +:100110001A0016001B002602290020000800070014 +:10012000060031022A0021001500090019003302DF +:100130004A00220017000A0005000000E2083E0005 +:100140002F00000001540000E200100F30000000FA +:1001500002540000E60023001C000B001100000008 +:10016000AE00240018000D0010002D004B002500EB +:100170000C000E0036002E002C00260012000F008E +:100180003700270228002700130033003800300210 +:100190004E00A80031003400E500012000000100FD +:1001A000010001000100010000003A001E022002CF +:1001B0002202010001003B001F0221022302010074 +:1001C00001003C002F0226022F00010001003D002B +:1001D000300227023000010001003E0031023500EC +:1001E00035020000010001000100000001000000D4 +:1001F00001000100010000000100000001003F00BB +:100200000100500001000000010040000100510009 +:100210000100010001004100010052000100010045 +:100220000100420001004F000100010001004300F5 +:10023000010001000100010001004400450001002F +:100240000100010000000100010001000100A900FF +:1002500000000100010001000100AA0001000100EE +:10026000010001000100AC000100010001000100DB +:100270000100AB00010001000100010001000100CC +:100280000100010001000100010000000100010067 +:100290000100000001000000010001000100000059 +:1002A00001000000010001000100F2000100000057 +:1002B000010001000100F1000100F4000100010053 +:1002C0000100F0000100F500B60001000100F3009C +:1002D0000100010001000100010001000100010016 +:1002E00001000100010001000100010000001603EF +:1002F0004500720067006F0044006F007800200026 +:1003000045005A00000016034500720067006F00A8 +:1003100044006F007800200045005A0000000403EC +:10032000090409026D00040100A0FA09040000019B +:1003300003010100092111010001223F000705818D +:100340000308000A09040100010301020009211148 +:10035000010001224D000705820308000A0904027A +:1003600000010300000009211101000122360007ED +:1003700005830308000A09040300010300000009C3 +:100380002111010001223900070584031000011228 +:1003900001100100000008EDFE071301000102003A +:1003A0000105010906A101050719E029E715002546 +:1003B0000195087501810205081901290595057542 +:1003C000019102950175039101050719002977151F +:1003D000002501957875018102C005010980A10100 +:1003E000850216010026B7001A01002AB700751011 +:1003F00095018100C0050C0901A1018503160100CA +:10040000269C021A01002A9C02751095018100C0E9 +:1004100005010902A1010901A10005091901290528 +:10042000150025019505750181029501750381016E +:100430000501093009311581257F9502750881066E +:1004400009381581257F950175088106050C0A3844 +:10045000021581257F950175088106C0C005010937 +:1004600006A101050719E029E71500250195087582 +:100470000181029501750881010508190129059579 +:100480000575019102950175039101050719002970 +:10049000FF150025FF950675088100C000000000CB +:1004A00000000000000000010204060A0F17202CC3 +:1004B0003A4A5D71879DB3C7DAE9F5FCFFFCF5E9BF +:1004C000DAC7B39D87715D4A3A2C20170F0A0604DC +:1004D00002010000000000000000000011241FBE07 +:1004E000CFEFDAE0DEBFCDBF04B603FE24C08091BB +:1004F000EE019091EF01A091F001B091F1018730F0 +:10050000904BA740B04BB9F41092EE011092EF015E +:100510001092F0011092F10114BE84B7877F84BF5E +:1005200088E10FB6F89480936000109260000FBECF +:10053000E0E0FFE3099511E0A0E0B1E0E2E1F8E4DA +:1005400002C005900D92A433B107D9F711E0A4E3DE +:10055000B1E001C01D92AE3EB107E1F70E94EA0989 +:100560000C9407240C940000CF93DF93EC016623D6 +:1005700019F06130C9F015C09A818D81992349F035 +:10058000982F907F21F080FF22C08F708D8380EEA6 +:1005900017C0807F19F480EE0E941F118D818F702B +:1005A0008D8380E090E018C09A818D81992359F065 +:1005B000982F907F21F080FF0DC08F708D8384EE87 +:1005C0000E945710EECF807F49F784EEE5CF89EE89 +:1005D00090E002C080EE90E0DF91CF910895089501 +:1005E0006091B1017091B2018091B3019091B40119 +:1005F0000E94FD1A56985E9825982D9826982E9858 +:1006000027982F98813019F0823021F00895259A8B +:100610002D9A0895269A2E9A08950C94F0025698D1 +:100620005E9825982D9826982E9827982F988FEFCA +:1006300090E0909389008093880090938B00809342 +:100640008A0090938D0080938C00259A2D9A2FEF2D +:1006500080E792E0215080409040E1F700C0000028 +:10066000269A2E9A2FEF80E792E02150804090400A +:10067000E1F700C00000279A2F9A2FEF80E792E061 +:10068000215080409040E1F700C0000025982D984F +:100690002FEF80E792E0215080409040E1F700C0CA +:1006A000000026982E982FEF80E792E0215080409E +:1006B0009040E1F700C0000027982F9856985E9868 +:1006C00025982D9826982E9827982F98089589EA8E +:1006D0008093800089E08093810024982C983F9833 +:1006E0008AB18F748AB96E98479A8BB1806B8BB937 +:1006F000769A0E940F030C94EF0280E2809300012F +:100700008091340181110EC00E94CC0381E080935E +:1007100034012FEF83ED90E3215080409040E1F7CA +:1007200000C0000080E40E94D20380930001811188 +:100730002EC00E94FC0380930001811128C00E94FA +:10074000FC0380930001811122C08FE30E94FC030F +:100750008093000181111BC00E94F40380E40E9479 +:10076000D20380930001811112C08CE00E94FC032F +:100770008093000181110BC00E94FC038093000153 +:10078000811105C08FE30E94FC03809300010E9449 +:10079000F4038091000108951092B9008AE08093DB +:1007A000B800089594EA9093BC009091BC0097FF24 +:1007B000FCCF9091B900987F983021F0903111F0E2 +:1007C00081E008958093BB0084E88093BC00809111 +:1007D000BC0087FFFCCF8091B900887F883111F081 +:1007E000803471F780E0089584E98093BC008091A3 +:1007F000BC0084FDFCCF08958093BB0084E8809307 +:10080000BC008091BC0087FFFCCF9091B900987F1D +:1008100081E0983209F480E0089584E88093BC0078 +:100820008091BC0087FFFCCF8091BB000895809130 +:100830000001811115C080E40E94D2038093000161 +:1008400081110CC082E10E94FC03809300018111A0 +:1008500005C08FEF0E94FC03809300010E94F40307 +:1008600084B1807F84B985B1807F85B98AB1837F67 +:100870008AB98BB1837F8BB93E98469808950E94C0 +:100880007D03809300010E94170480B38C7080BBAD +:1008900081B3836F81BBA6E3B1E0E4E4F1E08EE0D5 +:1008A0008E0F11921D928E13FCCF0C946703BF9292 +:1008B000CF92DF92EF92FF920F931F93CF93DF932C +:1008C00080910001882379F0809135018F5F8093BA +:1008D0003501811108C00E947D03809300018111C0 +:1008E00002C00E940F0306E311E0C0E0D0E0DD2467 +:1008F000D39482E0C82EEE24E394F12CC730D105C6 +:1009000000F580910001811164C080E40E94D2034F +:1009100080930001811112C082E10E94FC03809348 +:10092000000181110BC0C7010C2E01C0880F0A9471 +:10093000EAF780950E94FC03809300010E94F40373 +:1009400048C0CA30A1F028F4C83059F0C93061F06D +:1009500005C0CC3089F070F0CD3089F0209A28980D +:1009600010C0219A29980DC0229A2A980AC0239A69 +:100970002B9807C0529A01C0539A5B9802C03E9AC6 +:10098000469890EA9A95F1F79FB1799902C082E072 +:1009900001C080E091709D25982B7C9902C084E075 +:1009A00001C080E0892B7D9902C038E001C030E0B1 +:1009B000832B7E9902C020E101C020E0822B9FB1F1 +:1009C0009095991F9927991F9295990F907E892B41 +:1009D0000FC080910001811149C080E40E94D203C0 +:1009E00080930001882379F1B12C0E94F4038B2DB0 +:1009F000F8019081981719F08083C09201010E943C +:100A0000170421960F5F1F4FCE30D10509F076CF26 +:100A100080910101882361F1815080930101882335 +:100A200039F08FE99FE00197F1F700C0000020C086 +:100A3000A4E4B1E0E6E3F1E0CF01825F91919D9300 +:100A40008E13FCCF15C083E10E94FC03809300014C +:100A50008111CACF81E40E94D203809300018111E9 +:100A6000C3CF0E940D04B82EB094BFCF80E0C0CF9A +:100A70000E940D0381E0DF91CF911F910F91FF90B4 +:100A8000EF90DF90CF90BF900895E82FF0E0EC5BFF +:100A9000FE4F808108950895089596E0799FF001B2 +:100AA000112494E5899FE00DF11D1124E60FF11D3D +:100AB000EE0FFF1FEA50FF4F859194910895880F24 +:100AC000991FFC01EE58F040859194910895880F8C +:100AD000991FFC01EE50FF4F8591949108950F935B +:100AE0001F93CF93DF93EC018115904350F5C1150F +:100AF00080E2D80708F0B3C0CB3BD10590F4C83AE8 +:100B0000D10508F05AC0C53AD10508F04BC0C43031 +:100B1000D10508F0BBC1219709F0B5C101E010E093 +:100B2000F5C1CF3FD10511F008F0B0C1C03FD105EC +:100B300008F092C0CE01805E9109089708F4A6C122 +:100B4000A2C1C11591E5D907A8F4C23020E5D207AA +:100B500008F09EC0C11580E5D80709F485C008F0EB +:100B600091C0C11520E4D20708F08DC1DD278E01A8 +:100B7000106CCCC1C11580E8D80758F4C11590E7B6 +:100B8000D90708F07CC1C11520E6D20708F422C1BC +:100B90007AC1C11580E9D80708F075C1DF708E01F0 +:100BA000106AB4C1C53AD10509F472C1C63AD1057B +:100BB00009F071C102E810E4A9C1C83AD10509F4ED +:100BC0006DC1C93AD10509F46CC1CA3AD10509F41D +:100BD0006BC1CB3AD10509F46AC1CC3AD10509F40D +:100BE00069C1CD3AD10509F468C1C03BD10509F40A +:100BF00067C1CE3AD10509F466C1CF3AD10509F4EF +:100C000065C1C13BD10509F464C1C23BD10509F4FA +:100C100063C1C33BD10509F462C1C43BD10509F4EA +:100C200061C1C53BD10509F460C1C63BD10509F4DA +:100C30005FC1C73BD10509F45EC1C83BD10509F4CA +:100C40005DC1C93BD10509F45CC1CA3BD10509F4BA +:100C50005BC100E014E45AC18E01106557C1CE019A +:100C60009F700E94670553C10E94BE149FEF24E34A +:100C70008CE0915020408040E1F700C000000E94CD +:100C8000F61B44C18091CD0181608093CD013EC1AE +:100C90000E949F1D811102C00E94851D0E94BC1DE3 +:100CA00090E09093EE018093ED01C23090E5D9077A +:100CB00021F48091ED01816086C0C43020E5D20727 +:100CC00021F48091ED0182607EC0C63080E5D807B6 +:100CD00021F48091ED01846076C0C83090E5D90799 +:100CE00019F48091ED0127C0CA3020E5D20721F424 +:100CF0008091ED01806167C0CC3080E5D80721F498 +:100D00008091ED0180625FC0CE3090E5D90721F47B +:100D10008091ED01806457C0C03120E5D20721F4F5 +:100D20008091ED0180684FC0C23180E5D80729F479 +:100D30008091ED018460886046C0C33090E5D9079A +:100D400021F48091ED018E7F3EC0C53020E5D207B1 +:100D500021F48091ED018D7F36C0C73080E5D80742 +:100D600021F48091ED018B7F2EC0C93090E5D90729 +:100D700019F48091ED0126C0CB3020E5D20721F493 +:100D80008091ED018F7E1FC0CD3080E5D80721F422 +:100D90008091ED018F7D17C0CF3090E5D90721F408 +:100DA0008091ED018F7B0FC0C13120E5D20721F486 +:100DB0008091ED018F7707C0C331D04531F4809128 +:100DC000ED018B7F877F8093ED018091ED010E9483 +:100DD000C01D9CC08D2F99278F7099278130910558 +:100DE000D9F49E012370332702C0880F991F2A95DA +:100DF000E2F79C688E0144E0000F111F4A95E1F76D +:100E000000271370802B912B53E0CC0FDD1F5A95D8 +:100E1000E1F7C076DD272FC08230910531F4DC2F59 +:100E2000CC278E01016F106A71C08330910569F47F +:100E3000CE018370992701E010E002C0000F111F5E +:100E40008A95E2F7C8019C680FC0049709F05EC05C +:100E5000CE018370992701E010E002C0000F111F3E +:100E60008A95E2F7C8019A6823E0CC0FDD1F2A9526 +:100E7000E1F7C07ED7708C010C2B1D2B47C0DF70B3 +:100E80008E01106243C000E010E040C08E013EC001 +:100E900001E810E43BC003E810E438C002EE14E4BB +:100EA00035C009EE14E432C00AEE14E42FC005EB9D +:100EB00014E42CC006EB14E429C007EB14E426C0AC +:100EC0000CEC14E423C00DEC14E420C003E815E49A +:100ED0001DC00AE815E41AC002E915E417C004E9C8 +:100EE00015E414C001E216E411C003E216E40EC0DA +:100EF00004E216E40BC005E216E408C006E216E4BC +:100F000005C007E216E402C00AE216E4C801DF9158 +:100F1000CF911F910F91089596E0799FF0011124D0 +:100F200094E5899FE00DF11D1124E60FF11DEE0FF0 +:100F3000FF1FEA50FF4F85919491803E9105E0F4A8 +:100F4000803C910558F58133910509F46FC048F450 +:100F50008932910509F463C08A32910509F46DC0A4 +:100F600072C089339105E9F082389105D1F085335B +:100F7000910509F44DC067C0833E910581F138F4B5 +:100F8000803E9105B9F0823E9105D9F05CC0863E65 +:100F9000910561F1873E9105A1F155C00E945F0561 +:100FA00008952091ED0120FD02C021FF4CC080EE8C +:100FB00090E049C08091ED0180FFF9CF89E390E096 +:100FC00042C08091ED0182FF0EC08091ED0184FF4F +:100FD00003C080E090E037C083EE90E034C08091A1 +:100FE000ED0182FFF2CF82EE90E02DC08091ED0105 +:100FF00083FF0BC08091ED0184FDEBCF87EE90E085 +:1010000022C08091ED0183FFF5CF86EE90E01BC0FA +:101010008091ED0185FF07C089E290E014C08091C6 +:10102000ED0185FFF9CF85E390E00DC08091ED01E2 +:1010300086FF07C08AE290E006C08091ED0186FF3E +:10104000F9CF81E390E00E946F05089508950C9414 +:101050002608809162010895CF93DF9300D01F92FC +:10106000CDB7DEB79C018091E401843019F593E09F +:1010700099833B832A839093E9008FEF9091E80056 +:10108000815095FD06C095ED9A95F1F7000081110C +:10109000F5CF8091E80085FF0DC040E050E063E0AF +:1010A00070E0CE0101960E94960A8091E8008E774A +:1010B0008093E8000F900F900F90DF91CF910895EB +:1010C000CF93DF9300D01F92CDB7DEB72091E4011C +:1010D000243021F522E029839B838A8383E0809357 +:1010E000E9008FEF9091E800815095FD06C095EDE5 +:1010F0009A95F1F700008111F5CF8091E80085FF06 +:101100000DC040E050E063E070E0CE0101960E9427 +:10111000960A8091E8008E778093E8000F900F90F8 +:101120000F90DF91CF9108952091E4012430F1F4E4 +:1011300022E02093E9002FEF3091E800215035FDA7 +:1011400006C035ED3A95F1F700002111F5CF209159 +:10115000E80025FF0BC040E050E065E070E00E9431 +:10116000960A8091E8008E778093E8000895CF93E7 +:10117000DF93EC019091E401943009F046C0809136 +:101180000C018823D9F080910D018823B9F0909348 +:10119000E9008FEF9091E800815095FD06C095E140 +:1011A0009A95F1F700008111F5CF8091E80085FF55 +:1011B0002CC040E050E060E170E017C081E0809317 +:1011C000E9008FEF9091E800815095FD06C095ED04 +:1011D0009A95F1F700008111F5CF8091E80085FF25 +:1011E00014C040E050E068E070E0CE010E94960A32 +:1011F0008091E8008E778093E80080E1FE01A2E50F +:10120000B1E001900D928A95E1F7DF91CF910895B9 +:101210008091E301811109C00E942B0C0E94880C6F +:101220008091E20084608093E20008951092E301CF +:10123000089508950C942F220E948C1B0E94352241 +:101240000E942E0F0C94270842E061EC81E00E947E +:10125000A50B42E061EC82E00E94A50B42E061EC4C +:1012600083E00E94A50B42E161EC84E00C94A50BA5 +:101270008091E601833009F455C030F4813071F07B +:10128000823009F48EC008958A3009F47AC08B3018 +:1012900009F460C0893009F09CC020C08091E5014C +:1012A000813A09F096C08091E800877F8093E8003A +:1012B0008091E9019091EA01892B21F460E182E5B6 +:1012C00091E003C060E080E090E070E00E94E10AFD +:1012D0008091E8008B778093E80008958091E50184 +:1012E000813209F076C08091E9019091EA0100977E +:1012F00019F0039709F06DC08091E800877F809313 +:10130000E8008091E80082FD05C08091E401811130 +:10131000F8CF5FC08091F100809362018091E80076 +:101320008B7753C08091E501813A09F052C08091DA +:10133000E9019091EA01892B09F04BC08091E80006 +:10134000877F8093E8008091E80080FFFCCF809148 +:101350000C0136C08091E5018132D9F58091E90117 +:101360009091EA01892BA9F58091E800877F80930D +:10137000E8000E94DA0B8091E70180930C010C9445 +:10138000BE148091E501813221F58091E800877FCC +:101390008093E8000E94DA0B8091E801809363015A +:1013A00008958091E501813AA1F48091E800877F5A +:1013B0008093E8008091E80080FFFCCF809163017A +:1013C0008093F1008091E8008E778093E8000C9480 +:1013D000DA0B089584B7877F84BF88E10FB6F8944D +:1013E00080936000109260000FBE90E080E80FB61E +:1013F000F89480936100909361000FBE0E947D0F6E +:101400000E942B0C0E94880C8091E20084608093E3 +:10141000E20078940E940E0F0E947F0F82E091E01C +:101420000E94290F0E941D228091E401853069F4F9 +:101430000E944D1B8091E2018823B1F30E94781B2A +:10144000882391F30E94800AEFCF0E94850FECCF92 +:10145000292F332723303105C9F064F421303105B9 +:1014600081F02230310509F043C08DE690E022E2A0 +:1014700033E042C021323105F1F02232310541F131 +:1014800037C082E190E02FE833E036C09927813001 +:10149000910541F08230910541F0892B49F5EEE14B +:1014A000F3E005C0E6E0F3E002C0EEEEF2E0849186 +:1014B00090E09F0121C06430D8F4E62FF0E0EE0FF9 +:1014C000FF1FEE5DFE4F2081318189E090E014C066 +:1014D000643070F470E0FB01EE0FFF1FE65EFE4F1C +:1014E00020813181FB01EA5EFE4F808190E004C0E3 +:1014F00080E090E020E030E0FA013183208308951D +:1015000080E189BD82E189BD09B400FEFDCF8091F3 +:10151000D8008F7D8093D8008091E0008260809316 +:10152000E0008091E00081FDFCCF0895CF92DF9232 +:10153000EF92FF920F931F93CF93DF93EC018B01F8 +:101540006A010E94F90B811133C0C114D10439F032 +:10155000F60180819181081B190BC80FD91FE12C5E +:10156000F12C0115110519F18091E80085FD16C0D7 +:101570008091E8008E778093E800C114D10449F08F +:10158000F60180819181E80EF91EF182E08285E00A +:101590000FC00E94F90B882321F30AC08991809320 +:1015A000F10001501109FFEFEF1AFF0ADACF80E0D6 +:1015B000DF91CF911F910F91FF90EF90DF90CF902F +:1015C00008952091EB013091EC012617370748F080 +:1015D0006115710539F42091E8002E772093E80019 +:1015E00001C0B90140E061157105A9F12091E40144 +:1015F000222309F443C0253009F442C02091E800B9 +:1016000023FD40C02091E80022FD32C02091E80077 +:1016100020FFE9CF4091F3002091F20030E0342B1D +:10162000FC01CF016115710559F02830310540F4F6 +:1016300081918093F100615071092F5F3F4FF1CF8D +:1016400041E02830310509F040E02091E8002E7794 +:101650002093E800C8CF4111C9CF0AC08091E401AE +:10166000882361F0853061F08091E80083FD0AC035 +:101670008091E80082FFF2CF80E0089582E0089533 +:1016800083E0089581E008952091EB013091EC0111 +:101690002617370748F06115710539F42091E800E5 +:1016A0002E772093E80001C0B901FC0120E061150C +:1016B000710591F18091E401882309F440C08530DF +:1016C00009F43FC08091E80083FD3DC08091E800AF +:1016D00082FD2FC08091E80080FFE9CF2091F300C8 +:1016E0008091F20090E0922B6115710559F08830DD +:1016F000910540F424912093F100319661507109D5 +:101700000196F2CF21E0089709F020E08091E800EF +:101710008E778093E800CBCF2111CCCF0AC0809187 +:10172000E401882361F0853061F08091E80083FD59 +:101730000AC08091E80082FFF2CF80E0089582E045 +:10174000089583E0089581E00895982F973058F523 +:101750009093E900981739F07091EC002091ED001A +:101760005091F00003C0242F762F50E021FF19C0C4 +:101770003091EB003E7F3093EB003091ED003D7FE8 +:101780003093ED003091EB0031603093EB007093BB +:10179000EC002093ED005093F0002091EE0027FF25 +:1017A00007C09F5FD3CF8F708093E90081E00895D9 +:1017B00080E008958091E50187FF11C08091E800E5 +:1017C00082FD05C08091E4018111F8CF11C08091A4 +:1017D000E8008B770BC08091E401882349F0809169 +:1017E000E80080FFF8CF8091E8008E778093E800D2 +:1017F00008952091E4003091E50095E64091EC00D9 +:10180000842F817040FF22C08091E80080FD1CC0C1 +:101810008091E401882391F0853091F08091EB0074 +:1018200085FD10C04091E4005091E5004217530738 +:1018300029F39A01915011F784E0089582E0089508 +:1018400083E0089581E0089580E008954091E800E4 +:1018500042FFDECF08950E94990C0E94A10CE0EE99 +:10186000F0E0808181608083E8EDF0E080818F7717 +:10187000808319BCA7EDB0E08C918E7F8C93808122 +:101880008F7E80831092E30108950F931F93CF936F +:10189000DF930E94990C0E94A10CC8EDD0E08881D2 +:1018A0008F77888388818068888388818F7D88830B +:1018B00019BC1092E4011092E0011092E201109222 +:1018C000E10100EE10E0F80180818B7F8083888148 +:1018D0008160888342E060E080E00E94A50BE1EE39 +:1018E000F0E080818E7F8083E2EEF0E08081816095 +:1018F0008083808188608083F80180818E7F8083EF +:10190000888180618883DF91CF911F910F91089525 +:10191000E8EDF0E080818F7E8083E7EDF0E080816C +:101920008160808384E082BF81E08093E3010C9436 +:10193000450CE8EDF0E080818E7F80831092E2001C +:1019400008951092DA001092E10008951F920F920C +:101950000FB60F9211242F933F934F935F936F9382 +:101960007F938F939F93AF93BF93EF93FF93809158 +:10197000E10082FF0BC08091E20082FF07C08091EE +:10198000E1008B7F8093E1000E940D0F8091DA00CF +:1019900080FF1FC08091D80080FF1BC08091DA00BB +:1019A0008E7F8093DA008091D90080FF0DC080E1A6 +:1019B00089BD82E189BD09B400FEFDCF81E080933D +:1019C000E4010E94080905C019BC1092E4010E94BC +:1019D00016098091E10080FF19C08091E20080FF2C +:1019E00015C08091E2008E7F8093E2008091E2003A +:1019F00080618093E2008091D80080628093D8005B +:101A000019BC85E08093E4010E941A098091E100ED +:101A100084FF30C08091E20084FF2CC080E189BD4A +:101A200082E189BD09B400FEFDCF8091D8008F7D91 +:101A30008093D8008091E1008F7E8093E1008091B7 +:101A4000E2008F7E8093E2008091E20081608093CB +:101A5000E2008091E001882311F084E007C08091CA +:101A6000E30087FD02C081E001C083E08093E401D0 +:101A70000E941C098091E10083FF29C08091E2004F +:101A800083FF25C08091E100877F8093E10082E0A1 +:101A90008093E4011092E0018091E1008E7F8093B9 +:101AA000E1008091E2008E7F8093E2008091E2006D +:101AB00080618093E20042E060E080E00E94A50B3C +:101AC0008091F00088608093F0000E941909FF91D6 +:101AD000EF91BF91AF919F918F917F916F915F91A6 +:101AE0004F913F912F910F900FBE0F901F9018951F +:101AF0001F920F920FB60F9211242F933F934F9383 +:101B00005F936F937F938F939F93AF93BF93CF9385 +:101B1000DF93EF93FF93C091E900CF708091EC00C9 +:101B2000D82FD17080FDD0E81092E9008091F000AC +:101B3000877F8093F00078940E94BC0D1092E9009A +:101B40008091F00088608093F000CD2BCF70C0931F +:101B5000E900FF91EF91DF91CF91BF91AF919F91FC +:101B60008F917F916F915F914F913F912F910F9046 +:101B70000FBE0F901F9018951F93CF93DF93CDB793 +:101B8000DEB7AA970FB6F894DEBF0FBECDBFE5EE65 +:101B9000F1E088E08E0F9091F10091938E13FBCFCE +:101BA0000E9438098091E80083FF1FC18091E50100 +:101BB0009091E601492F50E04A30510508F015C1D7 +:101BC000FA01EA5AFF4F0C94B723803881F082382B +:101BD00009F00BC18091E9018F708093E900809139 +:101BE000EB0085FB882780F91092E90006C0809100 +:101BF000E1019091E201911182609091E800977F5C +:101C00009093E8008093F1001092F100C8C0282F53 +:101C10002D7F09F0EAC0882319F0823061F0E5C019 +:101C20008091E701813009F0E0C0933009F080E055 +:101C30008093E2012BC08091E701811127C0809140 +:101C4000E9018F7009F4D1C08093E9002091EB0085 +:101C500020FF1CC0933021F48091EB00806214C0FF +:101C60009091EB0090619093EB0021E030E0A901AE +:101C700002C0440F551F8A95E2F74093EA00109284 +:101C8000EA008091EB0088608093EB001092E900FD +:101C90008091E800877F86C08111A7C01091E7017D +:101CA0001F778091E3008078812B8093E3008091FF +:101CB000E800877F8093E8000E94DA0B8091E800BB +:101CC00080FFFCCF8091E30080688093E3001111D6 +:101CD00002C082E001C083E08093E40186C08058A6 +:101CE000823008F082C08091E7019091E8018C3D3C +:101CF00053E0950779F583E08A838AE289834FB7B9 +:101D0000F894DE01139620E03EE051E2E32FF0E08C +:101D100050935700E49120FF03C0E295EF703F5FBE +:101D2000EF708E2F90E0EA3010F0C79601C0C09699 +:101D30008D939D932F5F243149F74FBF8091E80029 +:101D4000877F8093E8006AE270E0CE0101960E94EE +:101D5000E10A14C0AE014F5F5F4F6091E9010E943C +:101D6000280ABC01892B09F440C09091E800977FB4 +:101D70009093E80089819A810E94440B8091E80049 +:101D80008B778093E80031C0803879F58091E80046 +:101D9000877F8093E8008091E0018093F10080913B +:101DA000E8008E778093E8000E94DA0B1EC0811154 +:101DB0001CC09091E7019230C0F48091E800877FC9 +:101DC0008093E8009093E0010E94DA0B8091E0019B +:101DD000811106C08091E30087FD02C081E001C04F +:101DE00084E08093E4010E9424098091E80083FF4D +:101DF0000AC08091E800877F8093E8008091EB0023 +:101E000080628093EB00AA960FB6F894DEBF0FBEF7 +:101E1000CDBFDF91CF911F9108950895CF93809109 +:101E2000E4018823A1F0C091E900CF709091EC000B +:101E3000892F817090FD80E8C82B1092E900809175 +:101E4000E80083FD0E94BC0DCF70C093E900CF91E4 +:101E5000089590936901809368010895E091680165 +:101E6000F0916901309721F00190F081E02D099403 +:101E700080E00895E0916801F0916901309721F0C8 +:101E80000280F381E02D09940895E0916801F091BA +:101E90006901309721F00480F581E02D09940895BF +:101EA00020916601309167018217930771F090933A +:101EB000670180936601E0916801F09169013097B4 +:101EC00021F00680F781E02D0994089520916401A6 +:101ED000309165018217930771F0909365018093AB +:101EE0006401E0916801F0916901309721F000846C +:101EF000F185E02D0994089508950C947C0F0E94BB +:101F0000921B0E943F040C94581CCF92DF92EF92D8 +:101F1000FF920F931F93CF93DF93CDB7DEB72B972D +:101F20000FB6F894DEBF0FBECDBF0E9457048BE6FC +:101F3000C82E81E0D82E00E010E0E02E802F0E9415 +:101F40004505F60141916F01F42EF826B1F40F5FBB +:101F50001F4F0E30110589F78FEF89838A831B820B +:101F60000E949B1B8160782F9D838C8349815A81BD +:101F70006B818D810E94281040C09091CD0191FF0E +:101F800004C08B870E944B058B8520E030E04F2DED +:101F900050E0922FBA01022E02C0759567950A94FF +:101FA000E2F760FF24C02E83EF8221E030E0690178 +:101FB00002C0CC0CDD1C9A95E2F790E08C219D21AB +:101FC000892B09F420E028870E949B1B8160782FD1 +:101FD0009A8789874E815F8168858A850E9428104B +:101FE000F801E559FE4F8081C826C08206C02F5FE8 +:101FF0003F4F2630310569F6AACF0E943F1F10914E +:102000006A010E942E0F1817A1F00E942E0F8093D4 +:102010006A012B960FB6F894DEBF0FBECDBFDF91DD +:10202000CF911F910F91FF90EF90DF90CF900C9484 +:1020300027082B960FB6F894DEBF0FBECDBFDF91F9 +:10204000CF911F910F91FF90EF90DF90CF90089567 +:10205000CF93DF93CDB7DEB72B970FB6F894DEBFE3 +:102060000FBECDBF4F83588769877A878B87DE0184 +:10207000119686E0FD0111928A95E9F785E0FE014F +:10208000379601900D928A95E1F749815A816B81CB +:102090007C818D819E810E9458172B960FB6F894F3 +:1020A000DEBF0FBECDBFDF91CF9108950895CF93CE +:1020B000882309F4C2C0C82F823859F40E942E0F19 +:1020C00081FDBBC089E30E94011A0E94CE1A89E3F8 +:1020D0000CC0833879F40E942E0F80FDAEC083E5DA +:1020E0000E94011A0E94CE1A83E50E94431ACF91E2 +:1020F0000C94CE1A843859F40E942E0F82FD9DC094 +:1021000087E40E94011A0E94CE1A87E4EECF8CEF7A +:102110008C0F813A48F48C2F0E94822181118DC04E +:102120008C2F0E94011AE3CF80E28C0F883048F494 +:10213000C77081E001C0880FCA95EAF70E94871A2C +:10214000D6CF8BE58C0F833078F4C53A29F0C63AA8 +:1021500031F083E890E005C081E890E002C082E8B9 +:1021600090E0CF910C94500F88E58C0F833108F0EC +:1021700064C0C83A39F1C93A41F1CA3A49F1CB3A97 +:1021800051F1CC3A59F1CD3A61F1C03B69F1CE3A07 +:1021900071F1CF3A79F1C13B81F1C23B89F1C33B87 +:1021A00091F1C43B99F1C53BA1F1C63BA9F1C73BF5 +:1021B000B1F1C83BB9F1C93BC1F1CA3BC9F180E0FB +:1021C00090E038C082EE90E035C089EE90E032C0F9 +:1021D0008AEE90E02FC085EB90E02CC086EB90E07B +:1021E00029C087EB90E026C08CEC90E023C08DECFA +:1021F00090E020C083E891E01DC08AE891E01AC019 +:1022000082E991E017C084E991E014C081E292E094 +:1022100011C083E292E00EC084E292E00BC085E23E +:1022200092E008C086E292E005C087E292E002C038 +:102230008AE292E0CF910C94660FCF9108958823A3 +:1022400009F44BC0823859F40E942E0F81FF45C01B +:1022500089E30E94011A0E94CE1A89E30CC08338D8 +:1022600071F40E942E0F80FF38C083E50E94011A8E +:102270000E94CE1A83E50E94431A0C94CE1A843829 +:1022800059F40E942E0F82FF28C087E40E94011A91 +:102290000E94CE1A87E4EFCF9CEF980F913A58F343 +:1022A00090E2980F983050F4877091E001C0990F38 +:1022B0008A95EAF7892F0E948D1ADFCF9BE5980F48 +:1022C000933020F480E090E00C94500F885A8331D2 +:1022D00020F480E090E00C94660F0895882321F0AC +:1022E0000E94871A0C94CE1A0895882321F00E9428 +:1022F0008D1A0C94CE1A0895BF92CF92DF92EF926E +:10230000FF920F931F93CF93DF9300D000D000D0A4 +:10231000CDB7DEB725E0FC01DE01119601900D92EC +:102320002A95E1F7FC01D080118102812581229557 +:102330002F7043815481452B09F4FCC21F3F21F4C7 +:10234000FFEFDF1609F4F6C27C012E830E945610BF +:10235000D9821A8369817A81802F0E94FD19182FF2 +:10236000B92E0E94B2190E9479182E81002319F00B +:102370000E94A41A2E81EB2DE295EF70F0E0E05A56 +:10238000FF4F0C94B7238B2D807F9B2D9F70F92ED0 +:10239000882319F0F29480EFF822002389F0FF20BF +:1023A00009F475C280E2810F883020F48F2D0E94DD +:1023B000871A03C08F2D0E94971A0E94CE1A67C2F7 +:1023C000812F0E941F11FF2009F4B4C2105E8F2DCF +:1023D000183018F40E948D1A02C00E949D1A269689 +:1023E0000FB6F894DEBF0FBECDBFDF91CF911F9126 +:1023F0000F91FF90EF90DF90CF90BF900C94CE1A8A +:102400003B2D307F8B2D8F70303211F08295807F85 +:10241000112319F0113021F12CC00023B9F022232F +:1024200009F4A0C1213009F09DC126960FB6F89499 +:10243000DEBF0FBECDBFDF91CF911F910F91FF90F7 +:10244000EF90DF90CF90BF900C94B71A222319F031 +:10245000213009F46FC28E830E94BA1A8E8196C110 +:10246000002321F0223008F065C27CC1211162C234 +:102470008DC1002321F0222309F474C108C2222354 +:1024800009F484C119C22B2D26952695237030E0BE +:102490002115310521F021303105D1F04BC2002347 +:1024A00021F0812F9B2D937002C080E090E0269652 +:1024B0000FB6F894DEBF0FBECDBFDF91CF911F9155 +:1024C0000F91FF90EF90DF90CF90BF900C94500F42 +:1024D000002321F0812F9B2D937002C080E090E0BB +:1024E00026960FB6F894DEBF0FBECDBFDF91CF9119 +:1024F0001F910F91FF90EF90DF90CF90BF900C94C1 +:10250000660F812F002319F00E94471E02C00E940F +:10251000AF1E26960FB6F894DEBF0FBECDBFDF917B +:10252000CF911F910F91FF90EF90DF90CF90BF90D0 +:102530000C94341F8B2D837009F07BC00111FAC1FC +:10254000812F829586958770880F880F912F9F70B5 +:10255000C92ED12CE12CF12C082E04C0CC0CDD1C92 +:10256000EE1CFF1C0A94D2F714FF12C04FE050E09B +:1025700060E070E004C0440F551F661F771F8A9506 +:10258000D2F7CB01BA01609570958095909503C004 +:1025900060E070E0CB012B2D269526952370422F0D +:1025A00050E042305105D9F04330510569F16C29B2 +:1025B0007D298E299F294130510551F126960FB66C +:1025C000F894DEBF0FBECDBFDF91CF911F910F9169 +:1025D000FF90EF90DF90CF90BF900C94A0186C29E3 +:1025E0007D298E299F2926960FB6F894DEBF0FBE4F +:1025F000CDBFDF91CF911F910F91FF90EF90DF90B2 +:10260000CF90BF900C94BC180E94A018C701B601CF +:1026100026960FB6F894DEBF0FBECDBFDF91CF91E7 +:102620001F910F91FF90EF90DF90CF90BF900C948F +:102630008418002319F08B2D817001C086958823A2 +:1026400009F478C1812F829586958770880F880F4D +:10265000912F9F70C92ED12CE12CF12C082E04C093 +:10266000CC0CDD1CEE1CFF1C0A94D2F714FF12C028 +:102670004FE050E060E070E004C0440F551F661F5B +:10268000771F8A95D2F7CB01BA0160957095809536 +:10269000909503C060E070E0CB012B2D2695269528 +:1026A0002370422F50E042305105D9F0433051059C +:1026B00069F16C297D298E299F294130510551F1FD +:1026C00026960FB6F894DEBF0FBECDBFDF91CF9137 +:1026D0001F910F91FF90EF90DF90CF90BF900C94DF +:1026E0007A196C297D298E299F2926960FB6F89490 +:1026F000DEBF0FBECDBFDF91CF911F910F91FF9035 +:10270000EF90DF90CF90BF900C9496190E947A19A9 +:10271000C701B60126960FB6F894DEBF0FBECDBF37 +:10272000DF91CF911F910F91FF90EF90DF90CF90AD +:10273000BF900C945E19103FD1F118F4103E50F484 +:10274000A1C0123F09F463C008F44CC0133F09F460 +:1027500073C098C01F708B2D8F710023A1F00E9451 +:10276000F718812F26960FB6F894DEBF0FBECDBFA7 +:10277000DF91CF911F910F91FF90EF90DF90CF905D +:10278000BF900C946E110E941819812F26960FB6D7 +:10279000F894DEBF0FBECDBFDF91CF911F910F9197 +:1027A000FF90EF90DF90CF90BF900C9475110023B5 +:1027B000A9F02111BFC08B2D8F7126960FB6F8940A +:1027C000DEBF0FBECDBFDF91CF911F910F91FF9064 +:1027D000EF90DF90CF90BF900C943D19223008F01D +:1027E000A9C0E9CF0023A9F08B2D8F7126960FB6D3 +:1027F000F894DEBF0FBECDBFDF91CF911F910F9137 +:10280000FF90EF90DF90CF90BF900C94F7180023CB +:1028100059F38B2D8F7126960FB6F894DEBF0FBE3D +:10282000CDBFDF91CF911F910F91FF90EF90DF907F +:10283000CF90BF900C941819002399F08B2D8F71B5 +:1028400026960FB6F894DEBF0FBECDBFDF91CF91B5 +:102850001F910F91FF90EF90DF90CF90BF900C945D +:10286000E21826960FB6F894DEBF0FBECDBFDF91FB +:10287000CF911F910F91FF90EF90DF90CF90BF907D +:102880000C94D8180023A9F0222309F4ADCF812F8E +:1028900026960FB6F894DEBF0FBECDBFDF91CF9165 +:1028A0001F910F91FF90EF90DF90CF90BF900C940D +:1028B0005710222309F4ADCF812F26960FB6F89436 +:1028C000DEBF0FBECDBFDF91CF911F910F91FF9063 +:1028D000EF90DF90CF90BF900C941F114B2D4F7055 +:1028E000612FC7010E94B40226960FB6F894DEBF8E +:1028F0000FBECDBFDF91CF911F910F91FF90EF9051 +:10290000DF90CF90BF900C94FC174B2D4F70612F30 +:10291000C70126960FB6F894DEBF0FBECDBFDF917C +:10292000CF911F910F91FF90EF90DF90CF90BF90CC +:102930000C944C0526960FB6F894DEBF0FBECDBFA3 +:10294000DF91CF911F910F91FF90EF90DF90CF908B +:10295000BF9008950E94A41A0E94B41A0E94791A86 +:102960000E94CE1A0E94E51F0E94341F80E090E072 +:102970000E94500F80E090E00C94660F0E94941A21 +:102980000C94AA140E94F219292F22952F7030E07E +:102990002C3031054CF42A3031056CF422503109C9 +:1029A0002230310588F407C02C30310549F02F3032 +:1029B000310531F009C0803E48F0803F29F406C05F +:1029C00093FB882780F9089580E0089581E00895B9 +:1029D000CF93DF9300D000D01F92CDB7DEB70F901A +:1029E0000F900F900F900F90DF91CF910895CF939C +:1029F000DF9300D000D000D0CDB7DEB726960FB65B +:102A0000F894DEBF0FBECDBFDF91CF9108951F9325 +:102A1000CF93DF93C091790116E080917A01C817B6 +:102A200099F0D0E01C9FF0011D9FF00D1124E55896 +:102A3000FE4F4081518162817381848195810E9422 +:102A4000F7142196C770E9CFDF91CF911F910895B8 +:102A50004091AB015091AC016091AD017091AE011C +:102A60008091AF019091B0010C94F7148091B00166 +:102A700082958F7009F054C08091AD01882309F4CC +:102A80004FC080917901A0917A016091AB01709162 +:102A9000AC014091AE015091AF01B6E08A1709F444 +:102AA0003FC090E041155105C1F17F3F11F46F3FE8 +:102AB000A1F1B89FF001B99FF00D1124E558FE4F28 +:102AC000218172132AC02081621327C02281211123 +:102AD00024C0238134812417350710F42150310993 +:102AE000241B350B283C3105C0F42091B0012F7018 +:102AF00020612093B00126E0289FF001299FF00D6E +:102B00001124E058FE4F80818F70806180838BEAB2 +:102B100091E00E947C110C94071501968770BECF3E +:102B20000895CF92DF92EF92FF920F931F93CF936E +:102B3000DF93CDB7DEB762970FB6F894DEBF0FBE56 +:102B4000CDBF8C0185E0F801DE011D9601900D924C +:102B50008A95E1F7D8014C9111965C9111971296E4 +:102B60006C9112971396CD90DC9014973091AB0135 +:102B70007091AC018091AE019091AF01009709F482 +:102B80006BC17F3F19F43F3F09F466C1E090AD018E +:102B9000EE2009F4C0C02091B001C816D90628F073 +:102BA000F601E81BF90BCF0104C0809590958C0DC0 +:102BB0009D1DFF24F394883C910578F0F12C207F33 +:102BC00009F0C6C07C2DD98AC88A89890E94E81478 +:102BD0008BEA91E00E947C11B1C0822F807F09F0C6 +:102BE00046C0751314C0341312C0611110C02F7089 +:102BF00020612093B0010E9428158BEA91E00E9489 +:102C00007C118091B001D80115968C932EC0CD28EF +:102C100019F15F3F11F44F3FF9F0F62E61111CC01E +:102C20008091790120917A0136E0821709F45AC027 +:102C300090E0389FF001399FF00D1124E558FE4FC8 +:102C40007181571306C07081471303C072817111DF +:102C500003C001968770E9CFF62E662309F418C1E8 +:102C60008091B00181608093B001F12C11C1751386 +:102C700008C0341306C0611104C08091B001D801AE +:102C8000C3C04D875E878D859E856A8B0E94C21466 +:102C90006A898823E1F16623D1F12091B001822F66 +:102CA00082958F7090E0029774F08091AB019091C3 +:102CB000AC0198878F831986DB86CA862C87CE0164 +:102CC00007960E947C1186E0F801ABEAB1E0019022 +:102CD0000D928A95E1F70E9436150E942815FF246F +:102CE000F394D6C04D875E878D859E850E94F2192C +:102CF000292F22952F7030E0223031050CF0BCC016 +:102D00009F7009F0B6C0805E883008F4C1C0C80169 +:102D10000E947C11E4CFC816D90608F453C0F6010E +:102D2000E81BF90BCF01883C910508F450C0F12C49 +:102D30007C2DD98AC88A89890E94E814EBEAF1E0DF +:102D400086E0DF011D928A95E9F70E942815A0C050 +:102D5000751314C0341312C0611110C08091B001FA +:102D6000F8018583C8010E947C1186E0EBEAF1E05E +:102D7000DF011D928A95E9F7FE2C8AC04D875E8798 +:102D80008D859E856A8B0E94C2146A89882309F406 +:102D9000BECF662309F4BBCF2091B001822F82956C +:102DA0008F7090E002970CF48ECF8091AB019091E0 +:102DB000AC019A8389831B82DD82CC822E83CE0173 +:102DC00001967FCF809590958C0D9D1DACCFF62EF2 +:102DD000662309F49CCF75132EC034132CC02091A8 +:102DE000B00120FD1FC0822F82958F70D9F0D801CD +:102DF00015962C9315978F3049F08F5F982F9295E9 +:102E0000907F822F8F70892B15968C93C8010E941A +:102E10007C1186E0F801ABEAB1E001900D928A9551 +:102E2000E1F793CF86E0F801ABEAB1E001900D92B3 +:102E30008A95E1F72DC04D875E878D859E850E941E +:102E4000C214811140CF8091B00181608093B001A4 +:102E5000C8010E947C111CC0662309F458CF4D871D +:102E60005E878D859E850E94C214882309F44FCF0A +:102E70002ACF811148CF0CC0243031050CF047CF48 +:102E80009F7009F440CFF8019581907F09F03BCF06 +:102E90008F2D62960FB6F894DEBF0FBECDBFDF91C7 +:102EA000CF911F910F91FF90EF90DF90CF900895F9 +:102EB0001F93CF93DF93CDB7DEB72C970FB6F8945F +:102EC000DEBF0FBECDBF4F83588769877A878B8758 +:102ED0009C87CE0107960E949115882369F08F8107 +:102EE00098852A853B85232BF1F19F3F09F063C02C +:102EF0008F3F09F060C037C086E0FE013796DE01E3 +:102F0000119601900D928A95E1F76F817885EA8597 +:102F1000FB85309741F17F3F11F46F3F21F1209104 +:102F20007A0130E0C90101968770992740917901B3 +:102F300050E08417950709F447C069837A83FD83BD +:102F4000EC8396E0929FD001939FB00D1124A55879 +:102F5000BE4FFE01319601900D929A95E1F7809354 +:102F60007A010E94071516E08091790190917A010B +:102F70008917C1F1189FC001112485589E4F0E94E6 +:102F80009115882379F1E09179011E9FF0011124B8 +:102F9000E558FE4F40815181628173818481958122 +:102FA0000E94F7148091790190E00196877099272B +:102FB00080937901D9CF4F81588569857A858B8532 +:102FC0009C850E94F714CFCF0E94BE1410927A0104 +:102FD00010927901EBEAF1E086E0DF011D928A951B +:102FE000E9F7C1CF2C960FB6F894DEBF0FBECDBF68 +:102FF000DF91CF911F910895EF92FF920F931F934E +:10300000CF93DF938C01892B09F46CC0F12CEE2453 +:10301000E394E8012196F8018491843740F48430E8 +:1030200008F051C0813081F0823019F15BC08537E2 +:1030300009F444C0A8F19CE7980F903708F052C0FB +:103040008F770E941F1141C00E5F1F4FFE01C49178 +:1030500080E28C0F883048F4C7708E2D01C0880F35 +:10306000CA95EAF70E94A71A14C08C2F0E94571025 +:103070002DC00E5F1F4FFE01C49180E28C0F88307F +:1030800058F4C7708E2D01C0880FCA95EAF70E94C8 +:10309000AD1A0E94CE1A1AC08C2F0E941F1116C0A2 +:1030A0000E5F1F4FFE01C491CC2381F08FE99FE09A +:1030B0000197F1F700C00000C150F6CF0E5F1F4F1F +:1030C000FE01F49003C00E9457108E018F2D8823BB +:1030D00009F49FCFEFE9FFE03197F1F700C000005E +:1030E0008150F5CFDF91CF911F910F91FF90EF901D +:1030F000089508956093B5017093B6018093B70168 +:103100009093B8010C94AA140F931F930091B501EA +:103110001091B6012091B7013091B801DC01CB01CB +:10312000802B912BA22BB32B8093B5019093B601EA +:10313000A093B701B093B8011F910F910C94AA14FA +:103140000F931F930091B5011091B6012091B70123 +:103150003091B801DC01CB0180239123A223B3235A +:103160008093B5019093B601A093B701B093B801D5 +:103170001F910F910C94AA140F931F930091B50106 +:103180001091B6012091B7013091B801DC01CB015B +:1031900080279127A227B3278093B5019093B6018A +:1031A000A093B701B093B8011F910F910C94AA148A +:1031B0001092B1011092B2011092B3011092B401B9 +:1031C0000C94AA1441E050E060E070E004C0440FA9 +:1031D000551F661F771F8A95D2F74093B101509310 +:1031E000B2016093B3017093B4010C94AA1441E04E +:1031F00050E060E070E004C0440F551F661F771F69 +:103200008A95D2F78091B1019091B201A091B3015A +:10321000B091B401482B592B6A2B7B2B4093B10101 +:103220005093B2016093B3017093B4010C94AA144B +:1032300041E050E060E070E004C0440F551F661F9D +:10324000771F8A95D2F7409550956095709580913B +:10325000B1019091B201A091B301B091B4014823A2 +:1032600059236A237B234093B1015093B2016093A9 +:10327000B3017093B4010C94AA1441E050E060E0F3 +:1032800070E004C0440F551F661F771F8A95D2F760 +:103290008091B1019091B201A091B301B091B401BC +:1032A000482759276A277B274093B1015093B201E1 +:1032B0006093B3017093B4010C94AA140F931F93FD +:1032C0000091B1011091B2012091B3013091B4018C +:1032D000DC01CB01802B912BA22BB32B8093B1016E +:1032E0009093B201A093B301B093B4011F910F91D9 +:1032F0000C94AA140F931F930091B1011091B20185 +:103300002091B3013091B401DC01CB0180239123E2 +:10331000A223B3238093B1019093B201A093B30190 +:10332000B093B4011F910F910C94AA140F931F93A3 +:103330000091B1011091B2012091B3013091B4011B +:10334000DC01CB0180279127A227B3278093B1010D +:103350009093B201A093B301B093B4011F910F9168 +:103360000C94AA140895CF92DF92EF92FF920F93DC +:103370001F93CF93DF938C01C090B501D090B6011D +:10338000E090B701F090B8018091B1019091B20145 +:10339000A091B301B091B401C82AD92AEA2AFB2A24 +:1033A000CFE1D0E0D701C6010C2E04C0B695A79599 +:1033B000979587950A94D2F780FF06C0B8018C2FA5 +:1033C0000E948C07019721F4219760F780E001C0EB +:1033D0008C2FDF91CF911F910F91FF90EF90DF9095 +:1033E000CF900895CF93DF93EC010E94B319BE01F3 +:1033F0000E948C07DF91CF910895CB010E94F219B2 +:10340000089590910C01992321F090910D01911153 +:1034100009C020910E0130910F01F90132969FEF02 +:1034200040E01FC0982F9695969596959F3050F541 +:10343000E0910E01F0910F01E90FF11D877021E07D +:1034400030E0A90102C0440F551F8A95E2F7CA0176 +:103450009181892B818308959F3F39F04F5F4E30D2 +:1034600041F051915813F8CF0DC05111F7CF942F5F +:10347000F5CF9F3F39F0F901E90FF11D97FDFA955E +:1034800082830895089590910C01992321F09091E1 +:103490000D01911109C020910E0130910F01F90128 +:1034A0003296205F3F4F1FC0982F96959695969520 +:1034B0009F30F0F4E0910E01F0910F01E90FF11D42 +:1034C000877021E030E0A90102C0440F551F8A95A2 +:1034D000E2F7CA018095918189238183089531960D +:1034E000E217F30729F090819813F9CF1082F7CFF4 +:1034F000089581E090E0E0910E01F0910F01E80F56 +:10350000F91F1082019680319105A9F708959091D5 +:10351000CC01892B8093CC01089580959091CC01AA +:1035200089238093CC0108951092CC010895909145 +:10353000CB01892B8093CB01089580959091CB018D +:1035400089238093CB0108951092CB010895909127 +:10355000CA01892B8093CA01089580959091CA0170 +:1035600089238093CA0108951092CA010895809317 +:10357000B90108951092B901089580910E019091BA +:103580000F01FC0131969C01205F3F4F80E091913B +:1035900091118F5FE217F307D1F70895E0910E01C3 +:1035A000F0910F018091CC018083E0910E01F091A8 +:1035B0000F0190818091CB01892B8083E0910E01D6 +:1035C000F0910F0190818091CA01892B80838091B5 +:1035D000B901882361F0E0910E01F0910F01908113 +:1035E000892B80830E94BD1A81111092B9018091AC +:1035F0000E0190910F010C943A0FCF92DF92EF924F +:10360000FF926C01EE24FF24C114D104E104F10403 +:1036100021F0C701B60120E101C020E0C72ED82E5D +:10362000E92EFF24C114D104E104F10419F0285F4C +:10363000C701B6016B017C0154E0F694E794D7947E +:10364000C7945A95D1F7C114D104E104F10419F0DB +:103650002C5FC701B6016B017C0142E0F694E79450 +:10366000D794C7944A95D1F7C114D104E104F10469 +:1036700019F02E5FC701B601DC01CB01B695A79505 +:1036800097958795892B8A2B8B2B09F02F5F822F9B +:10369000FF90EF90DF90CF9008958091E401843007 +:1036A00021F11092CE0120E488E190E00FB6F89469 +:1036B000A895809360000FBE2093600080E00E9478 +:1036C000270883B7817F846083BF83B7816083BF0E +:1036D0007894889583B78E7F83BF88E10FB6F8947E +:1036E00080936000109260000FBE089508950895C1 +:1036F000CF930E94761B0E9457040E94771BC0E064 +:103700008C2F0E944505811104C0CF5FCE30C1F7D8 +:1037100001C081E0CF9108950E94BE140E942E0F37 +:103720000C94270882E084BD93E095BD9AEF97BD85 +:1037300080936E0008952FB7F8948091CF019091F7 +:10374000D001A091D101B091D2012FBF0895CF92A5 +:10375000DF92EF92FF920F931F932FB7F89440914F +:10376000CF015091D0016091D1017091D2012FBF52 +:103770006A017B01EE24FF248C0120E030E0C016BA +:10378000D106E206F30610F4415051099A01281BB4 +:10379000390BC9011F910F91FF90EF90DF90CF90EF +:1037A00008951F920F920FB60F9211248F939F933B +:1037B000AF93BF938091CF019091D001A091D1019F +:1037C000B091D2010196A11DB11D8093CF019093BC +:1037D000D001A093D101B093D201BF91AF919F913D +:1037E0008F910F900FBE0F901F9018950E942B0C79 +:1037F000F8942FEF87EA91E6215080409040E1F75E +:1038000000C0000087E090EBDC018093EE01909314 +:10381000EF01A093F001B093F1019CE088E10FB6B5 +:10382000F894A895809360000FBE90936000FFCF3E +:10383000EF92FF920F931F93CF93DF93D82FC0E0A7 +:103840008C2F0E94450500E010E0E82EF12CC70106 +:10385000002E02C0959587950A94E2F780FD06C078 +:103860000F5F1F4F0630110591F709C0602F7C2FA5 +:1038700080E00E944D05D813F3CF81E004C0CF5FF4 +:10388000CE30F1F680E0DF91CF911F910F91FF9044 +:10389000EF900895CF93C82F8CE20E94181C8823C4 +:1038A00021F08C2FCF910C94181C80E0CF910895BB +:1038B000CF930E949F1D811102C00E94851DC5E605 +:1038C000C15049F00E9457048FE39CE90197F1F73A +:1038D00000C00000F5CF89E20E944A1C811113C18B +:1038E0008AE20E944A1C81110E94851D85E00E9487 +:1038F0004A1C81110E94F61B0E94AA1D8093CD01D3 +:1039000087E00E944A1C8823A9F18BE10E944A1C8F +:10391000882351F08091CD0181FB222720F991E08D +:10392000922790FB81F90EC08EE00E944A1C8823EA +:1039300061F08091CD0182FB222720F991E092274E +:1039400090FB82F98093CD0115C080E10E944A1C52 +:103950009091CD01882341F093FB222720F981E04B +:10396000822780FB93F904C0892F809580FB90F912 +:103970009093CD018091CD010E94AE1D0E94BC1D8F +:103980008093ED0180EE0E944A1C882341F08091D3 +:10399000ED01982F909590FB80F98093ED0189E3DC +:1039A0000E944A1C882359F08091ED0181FB222757 +:1039B00020F991E0922790FB81F98093ED0182EE4E +:1039C0000E944A1C882359F08091ED0182FB222736 +:1039D00020F991E0922790FB82F98093ED0186EE29 +:1039E0000E944A1C882359F08091ED0183FB222715 +:1039F00020F991E0922790FB83F98093ED0183EE0B +:103A00000E944A1C882359F08091ED0184FB2227F3 +:103A100020F991E0922790FB84F98093ED0185E3F2 +:103A20000E944A1C882359F08091ED0185FB2227D2 +:103A300020F991E0922790FB85F98093ED0181E3D5 +:103A40000E944A1C882359F08091ED0186FB2227B1 +:103A500020F991E0922790FB86F98093ED0181E1B6 +:103A60000E944A1C882359F08091ED0187FB222790 +:103A700020F991E0922790FB87F98093ED018091E6 +:103A8000ED010E94C01D8091ED0187FB882780F920 +:103A900080930D0187E20E944A1CC82F8EE10E948C +:103AA0004A1C8111C2608FE10E944A1C8111C460CE +:103AB00080E20E944A1C8111C86081E20E944A1C77 +:103AC0008111C06182E20E944A1C8111C06283E2BE +:103AD0000E944A1C8111C06484E20E944A1C88230F +:103AE00011F0C06802C0CC2329F08C2F0E94B71DB2 +:103AF0006C2F03C00E94B31D682F70E080E090E03F +:103B0000CF910C947A18CF9108956DEE7EEF80E0FE +:103B100090E00E94F12360E082E090E00E94DF23C9 +:103B200060E083E090E00E94DF2360E084E090E0CA +:103B30000E94DF2360E085E090E00C94DF2380E0CA +:103B400090E00E94D92321E08D3E9E4F09F020E0B5 +:103B5000822F089582E090E00C94D123682F82E0B8 +:103B600090E00C94DF2383E090E00C94D123682F45 +:103B700083E090E00C94DF2384E090E00C94D12368 +:103B8000682F84E090E00C94DF238091D50180FFC2 +:103B90000BC06091130185E0689FB00111247595F9 +:103BA0006795759567952BC081FF09C060911301DA +:103BB00085E0689FB00111247595679520C082FF4C +:103BC00007C06091130185E0689FB001112417C000 +:103BD0009091D6019923D1F060911201961788F740 +:103BE0002091130185E0289F90011124929FA0014C +:103BF000939F500D112470E0CA010E94A3236038E6 +:103C0000710540F46115710539F002C065E070E09E +:103C1000862F08958FE7089581E008958091D5015A +:103C200080FF08C06091110170E0759567957595EA +:103C3000679521C081FF06C06091110170E0759504 +:103C4000679519C082FF04C06091110170E010C037 +:103C50009091D6019923C1F0609110019617A0F7B9 +:103C600080911101899FC001112470E00E94A3235B +:103C70006038710528F46115710521F0862F0895CB +:103C80008FE7089581E0089561E070E0F4CF803F10 +:103C900021F40E94C51D819504C0813F29F40E9432 +:103CA000C51D8093D9010895823F21F40E94C51D4E +:103CB000819504C0833F29F40E94C51D8093D801DB +:103CC0000895893F19F40E940E1E05C08A3F31F401 +:103CD0000E940E1E81958093DA0108958B3F21F496 +:103CE0000E940E1E819504C08C3F29F40E940E1E76 +:103CF0008093DB010895843F21F48091D701816096 +:103D000017C0853F21F48091D701826011C0863FA2 +:103D100021F48091D70184600BC0873F21F480910A +:103D2000D701886005C0883F31F48091D701806158 +:103D30008093D70108958D3F21F48091D501816052 +:103D40000BC08E3F21F48091D501826005C08F3F6A +:103D500029F48091D50184608093D5010895803F36 +:103D600039F48091D90187FF6CC01092D90169C0E4 +:103D7000813F29F48091D9011816BCF362C090915B +:103D8000D801823F29F497FF5CC01092D80159C036 +:103D9000833F19F41916CCF354C0893F41F4809144 +:103DA000DA0118160CF04DC01092DA014AC08A3FB1 +:103DB00029F48091DA0187FF44C0F6CF8B3F39F4B4 +:103DC0008091DB0187FF3DC01092DB013AC08C3F40 +:103DD00029F48091DB011816BCF333C0843F21F431 +:103DE0008091D7018E7F17C0853F21F48091D70144 +:103DF0008D7F11C0863F21F48091D7018B7F0BC04E +:103E0000873F21F48091D701877F05C0883F31F437 +:103E10008091D7018F7E8093D70113C08D3F21F40D +:103E20008091D5018E7F0BC08E3F21F48091D5010A +:103E30008D7F05C08F3F29F48091D5018B7F8093C2 +:103E4000D5018091D80181110EC08091D9018111D5 +:103E50000AC08091DA01811106C08091DB018111D5 +:103E600002C01092D601089587ED91E00E94450F9F +:103E70000E949B1B9093D4018093D30108951F93BC +:103E8000CF93DF938091D3019091D4010E94A71B1F +:103E9000AC019091D601992321F02091140130E0DA +:103EA00006C0209115018AE0289F90011124421735 +:103EB000530708F486C08091D801C091D901D091F0 +:103EC000DA011091DB01811107C0C11176C0D11157 +:103ED00074C0111172C075C09F3F19F09F5F90931D +:103EE000D601181624F40E94C51D8093D801809134 +:103EF000D80187FF05C00E94C51D81958093D80118 +:103F00001C1624F40E94C51D8093D9018091D9010B +:103F100087FF05C00E94C51D81958093D9016091DE +:103F2000D801662339F1C091D901CC2319F1772743 +:103F300067FD7095872F972F0E94B42223E333E308 +:103F400043E35FE30E9418230E9481226093D8011B +:103F50006C2F772767FD7095872F972F0E94B422CB +:103F600023E333E343E35FE30E9418230E948122AB +:103F70006093D9011D1624F40E940E1E8093DA016D +:103F80008091DA0187FF05C00E940E1E8195809303 +:103F9000DA01111624F40E940E1E8093DB01809139 +:103FA000DB0187FF05C00E940E1E81958093DB0117 +:103FB000DF91CF911F910C94341F9F3F09F08ECF5A +:103FC00096CFDF91CF911F910895E7EDF1E085E065 +:103FD000DF011D928A95E9F71092D6011092D50162 +:103FE0000895833081F128F4813059F08230D1F086 +:103FF0000895853009F449C0B8F1863009F456C0F7 +:10400000089580911501262F30E0280F311D2F3F94 +:10401000310524F4680F6093150108958FEF8093A4 +:104020001501089580911401262F30E0280F311DCD +:104030002F3F310524F4680F6093140108958FEF2A +:1040400080931401089580911301262F30E0280FEA +:10405000311D2F3F310524F4680F6093130108953B +:104060008FEF80931301089580911201262F30E085 +:10407000280F311D2F3F310524F4680F6093120182 +:1040800008958FEF80931201089580911101262FDA +:1040900030E0280F311D2F3F310524F4680F609365 +:1040A000110108958FEF80931101089580911001FF +:1040B000262F30E0280F311D2F3F310524F4680FE3 +:1040C0006093100108958FEF80931001089583305D +:1040D00011F128F4813049F0823091F00895853053 +:1040E00081F120F18630C1F10895809115016817A2 +:1040F00020F4861B809315010895109215010895F0 +:1041000080911401681720F4861B80931401089590 +:1041100010921401089580911301681720F4861BF2 +:104120008093130108951092130108958091120154 +:10413000681720F4861B80931201089510921201D3 +:10414000089580911101681720F4861B8093110156 +:10415000089510921101089580911001681720F4BC +:10416000861B8093100108951092100108950F93FB +:104170001F938D3109F46BC008F03FC08E3009F4F5 +:104180007FC0C0F4873009F469C068F4863009F054 +:10419000B1C08091CD01817F8E7F8093CD0181E080 +:1041A0008093DD01A8C0883009F4A2C08B3009F4E7 +:1041B0009FC0A0C0863109F49BC078F4803109F417 +:1041C00072C0813109F096C00E94BE1490910D0119 +:1041D00081E0892780930D018BC0893109F488C063 +:1041E0008B3109F087C08091CD0181FB222720F916 +:1041F00091E0922790FB81F94CC0853309F470C09F +:1042000048F4873209F46CC008F459C0893209F4C3 +:1042100067C070C0833438F48A3308F04EC08833E6 +:1042200009F466C067C0833409F45AC0883409F0C1 +:1042300061C00E94BE140FEF13ED20E30150104047 +:104240002040E1F700C000000E94F61B51C00E9410 +:104250003B220E942E0F0E9427084AC09091CD0158 +:10426000892F8095817080FB90F929F09660986085 +:104270009093CD0140C0997F977F9093CD0138C036 +:104280008091CD0182FB222720F991E0922790FBBB +:1042900082F98093CD01992359F18091CD018160FC +:1042A0008093CD0125C08091CD0183FB222720F989 +:1042B00091E0922790FB83F9ECCF895301C08D5197 +:1042C00041E050E060E070E08A019B0104C0000F13 +:1042D000111F221F331F8A95D2F7C901B80104C0EC +:1042E00061E070E080E090E00E947A180E94BE14C5 +:1042F00081E001C080E01F910F91089580E0089552 +:1043000080E00895CF93C82F8091DD01813079F04E +:1043100018F08230E9F187C0E0910E01F0910F01B1 +:104320008081813169F0823209F07FC009C0E0915B +:104330000E01F0910F018081813111F0823261F420 +:104340008C2F0E947E21811104C08C2F0E94B720E7 +:104350001DC081E090E01AC08C2F0E948021811145 +:1043600014C0C43179F048F4CB3079F0C03109F091 +:1043700060C082E08093DD0108C0C93219F0C83303 +:1043800021F057C01092DD0154C081E0817053C00C +:10439000C93289F118F5C43171F1A8F4C73009F0B8 +:1043A00046C08AE08093150194E19093140193E054 +:1043B000909313018093120188E08093110188E2A9 +:1043C0008093100134C0CE51C63088F5EC2FF0E058 +:1043D000E65DFE4F80818093DC0129C0CE34E9F098 +:1043E00020F4CB3421F56AE013C0C13579F0C23531 +:1043F000F1F461E00DC08091DC01882319F0109286 +:10440000DC0115C081E08093DD0115C061E006C0CC +:104410008091DC010E94F11F0AC06AE08091DC01FA +:104420000E94672004C01092DD0180E004C081E09A +:1044300002C080E0ABCFCF910895E1E8F0E0808149 +:10444000886080838081816080838FB7F89493E057 +:104450009093890090ED909388008FBF0895EFE6C8 +:10446000F0E08081826080830895EFE6F0E0808153 +:104470008D7F80830895EFE6F0E0908182E08927C8 +:10448000808308951F920F920FB60F9211242F93DD +:104490003F934F935F936F937F938F939F93AF93CC +:1044A000BF93EF93FF938091DE019091DF0101961E +:1044B0009093DF018093DE01811103C082E00E94AE +:1044C0002708E091DF01E695E695F0E0E456FB4F22 +:1044D000E4918091DE018E1303C080E00E942708E2 +:1044E000FF91EF91BF91AF919F918F917F916F91CC +:1044F0005F914F913F912F910F900FBE0F901F90A2 +:10450000189504D06894B1118DC0089570D088F0CA +:104510009F5790F0B92F9927B751A0F0D1F0660FAF +:10452000771F881F991F1AF0BA95C9F712C0B130CA +:1045300081F077D0B1E0089574C0672F782F882775 +:10454000B85F39F0B93FCCF3869577956795B39509 +:10455000D9F73EF490958095709561957F4F8F4F78 +:104560009F4F0895E89409C097FB3EF4909580957D +:10457000709561957F4F8F4F9F4F9923A9F0F92F29 +:1045800096E9BB279395F695879577956795B795A7 +:10459000F111F8CFFAF4BB0F11F460FF1BC06F5F8D +:1045A0007F4F8F4F9F4F16C0882311F096E911C09F +:1045B000772321F09EE8872F762F05C0662371F0C0 +:1045C00096E8862F70E060E02AF09A95660F771FD4 +:1045D000881FDAF7880F9695879597F9089557FD04 +:1045E0009058440F551F59F05F3F71F04795880F61 +:1045F00097FB991F61F09F3F79F0879508951216F8 +:1046000013061406551FF2CF4695F1DF08C01616A3 +:1046100017061806991FF1CF869571056105089454 +:104620000895E894BB2766277727CB0197F908956B +:104630000BD078C069D028F06ED018F0952309F01F +:104640005AC05FC01124EECFCADFA0F3959FD1F30B +:10465000950F50E0551F629FF001729FBB27F00D30 +:10466000B11D639FAA27F00DB11DAA1F649F662785 +:10467000B00DA11D661F829F2227B00DA11D621FD4 +:10468000739FB00DA11D621F839FA00D611D221F8E +:10469000749F3327A00D611D231F849F600D211D72 +:1046A000822F762F6A2F11249F5750408AF0E1F015 +:1046B00088234AF0EE0FFF1FBB1F661F771F881F5E +:1046C00091505040A9F79E3F510570F014C0AACFF9 +:1046D0005F3FECF3983EDCF3869577956795B79549 +:1046E000F795E7959F5FC1F7FE2B880F911D969573 +:1046F000879597F9089597F99F6780E870E060E0E3 +:1047000008959FEF80EC089500240A94161617066A +:1047100018060906089500240A94121613061406B2 +:1047200005060895092E0394000C11F4882352F015 +:10473000BB0F40F4BF2B11F460FF04C06F5F7F4FCD +:104740008F4F9F4F089597FB072E16F4009407D0C4 +:1047500077FD09D00E94BD2307FC05D03EF490955B +:1047600081959F4F0895709561957F4F0895EE0F45 +:10477000FF1F0590F491E02D0994AA1BBB1B51E18A +:1047800007C0AA1FBB1FA617B70710F0A61BB70BC1 +:10479000881F991F5A95A9F780959095BC01CD0166 +:1047A0000895F999FECF92BD81BDF89A992780B5F9 +:1047B0000895A8E1B0E042E050E00C94F923262FE0 +:1047C000F999FECF92BD81BDF89A019700B4021607 +:1047D00039F01FBA20BD0FB6F894FA9AF99A0FBEB5 +:1047E00008950196272F0E94E0230C94DF23DC011B +:1047F000CB01FC01F999FECF06C0F2BDE1BDF89AEC +:10480000319600B40D9241505040B8F70895F89495 +:02481000FFCFD8 +:1048120020022908B708940860082C080101BA018F +:1048220028080A03140A3F4D36395D041004DA03DE +:10483200A10334034D0366037F030102030405064B +:04484200070809005A +:00000001FF diff --git a/keyboard/ergodox_ez/keymaps/plums/plums.png b/keyboard/ergodox_ez/keymaps/plums/plums.png new file mode 100644 index 00000000..2f127c4c Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/plums/plums.png differ diff --git a/keyboard/ergodox_ez/keymaps/plums/readme.md b/keyboard/ergodox_ez/keymaps/plums/readme.md new file mode 100644 index 00000000..b72329ee --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/plums/readme.md @@ -0,0 +1,11 @@ +# ErgoDox EZ Plums Configuration + +## Changelog + +* Apr 23, 2016 (v0.1.0): + * Shortcut for iTerm2 quake style dropdown (Ctrl+`) + * Shortcut for screen/tmux (Ctrl+a) + * Shortcut for shush (Hyper+m) + * Combo modifier for LGUI + LALT + +![Plums](plums.png) diff --git a/keyboard/ergodox_ez/keymaps/twey/keymap.c b/keyboard/ergodox_ez/keymaps/twey/keymap.c new file mode 100644 index 00000000..75d264bd --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/twey/keymap.c @@ -0,0 +1,225 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "keymap_plover.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys +#define STEN 3 // steno + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,---------------------------------------------------. ,---------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | STEN | | NONE | 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+-------+-------------| |-------+------+------+------+------+------+--------| + * | Del | ' | , | . | P | Y | Esc | | Caps | F | G | C | R | L | / | + * |--------+------+------+------+-------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | O | E | U | I |------| |-------| D | H | T | N |S / L2|- / Cmd | + * |--------+------+------+------+-------+------| Tab | | Enter |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift | + * `--------+------+------+------+-------+-------------' `--------------+------+------+------+------+--------' + * |Grv/L1| '" |AltShf| Left | Right | | Up | Down | [ | ] | ~L1 | + * `-----------------------------------' `----------------------------------' + * ,-------------. ,---------------. + * | PgUp | PgDn | | Home | End | + * ,------|------|------| |-------+-------+------. + * | | | NONE | | NONE | | | + * | Alt | NONE |------| |-------| Space | Ctrl | + * | | | Supr | | AltGr | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, M(0), + KC_DELT, KC_QUOT, KC_COMM,KC_DOT, KC_P, KC_Y, KC_ESC, + KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_TAB, + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, + KC_PGUP,KC_PGDN, + KC_NO, + KC_LALT,KC_ENT ,KC_LGUI, + // right hand + KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, + KC_CAPS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), GUI_T(KC_MINS), + KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z , KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_HOME,KC_END, + KC_NO, + KC_RALT,KC_SPC,KC_RCTL + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + 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_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), + +[STEN] = KEYMAP( // layout: layer 4: Steno for Plover + // left hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_STAR, + KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, + KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, + KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + PV_A, PV_O, KC_NO, + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + PV_STAR, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, + PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, + PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, + KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, PV_E, PV_U +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +void toggle_steno(int pressed) +{ + uint8_t layer = biton32(layer_state); + + if (pressed) { + if (layer != STEN) layer_on(STEN); else layer_off(STEN); + + register_code(PV_LS); + register_code(PV_LH); + register_code(PV_RF); + register_code(PV_RT); + } else { + unregister_code(PV_LS); + unregister_code(PV_LH); + unregister_code(PV_RF); + unregister_code(PV_RT); + } +} + +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: + toggle_steno(record->event.pressed); + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboard/ergodox_ez/keymaps/twey/readme.md b/keyboard/ergodox_ez/keymaps/twey/readme.md new file mode 100644 index 00000000..d44c0a23 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/twey/readme.md @@ -0,0 +1,19 @@ +# Twey's Home Configuration +## Layers +- Layer 0: Non-ANSI Dvorak layout, with modified modifiers — all + modifiers on thumb keys, as well as return and space. +- Layer 1: Default symbol layout. +- Layer 2: Default media/mouse layout. +- Layer 3: Plover-oriented stenography layer. + +## Unusual features +The Plover key (top right key on the left half) also sends my Plover +‘toggle’ chord (SH-FT) when pressed, as well as toggling the steno +layer, so you can toggle between steno and typing modes with a single +keypress. + +If you want to use this feature, you'll need to add: + + "SH-FT": "{PLOVER:TOGGLE}" + +to your Plover dictionary. diff --git a/keyboard/ergodox_ez/keymaps/twey/twey.hex b/keyboard/ergodox_ez/keymaps/twey/twey.hex new file mode 100644 index 00000000..14f5b7c7 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/twey/twey.hex @@ -0,0 +1,1122 @@ +:100000000C9465020C94A9020C94A9020C94A90208 +:100010000C94A9020C94A9020C94A9020C94A902B4 +:100020000C94A9020C94A9020C94C50B0C94970C87 +:100030000C94A9020C94A9020C94A9020C94A90294 +:100040000C94A9020C9422210C94A9020C94A902EC +:100050000C94A9020C94C41A0C94A9020C94A90241 +:100060000C94A9020C94A9020C94A9020C94A90264 +:100070000C94A9020C94A9020C94A9020C94A90254 +:100080000C94A9020C94A9020C94A9020C94A90244 +:100090000C94A9020C94A9020C94A9020C94A90234 +:1000A0000C94A9020C94A9020C94A902FC0C1E0D3C +:1000B000090E1E0D090E600D830D090ED80DEB0DF6 +:1000C000D810D81006110611481184118413841316 +:1000D0009C118413931293125E138413841372136E +:1000E0000000F0A12E004C002A00E1003581000044 +:1000F0001E00140004001D7134004D001F001A0082 +:1001000016001B00E1042A0020000800070006007A +:1001100050002C0021001500090019004F004A0072 +:10012000220017000A000500000065745000015409 +:100130000000007F0000E3004F0001540000007742 +:100140000000E20023001C000B00110000002971D8 +:10015000240018000D00100052004B0025000C0078 +:100160000E00360051002800260012000F00370054 +:100170002F002B00270013003382387130004E000F +:100180002D0031003478E500C100000001000100BD +:1001900001000100010000003A001E0220022202BC +:1001A000010001003B001F022102230201000100A7 +:1001B0003C002F0226022F00010001003D0030020A +:1001C00027023000010001003E00310235003502F7 +:1001D000000001000100010000000100000001001A +:1001E0000100010000000100000001003F0052007A +:1001F00051002402000001004000240021001E00E4 +:10020000010001004100250022001F00370001000D +:1002100042002600230020002700010043002502A1 +:100220002E0231002E0001004400450001000100B3 +:1002300001000000010001000100010001000000B8 +:1002400001000100010001000100010001000100A6 +:10025000F2000100010001000100F000F1000100C6 +:10026000F400010001000100F3000100F5000100AD +:100270000100010001000100000001000100010077 +:100280000000010000000100010001000000010069 +:100290000000010001000100010001000000010058 +:1002A0000100010001000100A9000100010001009E +:1002B0000100AC00AA00B600010001000100AB0083 +:1002C000A80001000100010001000100010001007F +:1002D00001000100AE00010001000000160345000E +:1002E000720067006F0044006F0078002000450036 +:1002F0005A00000016034500720067006F004400BA +:100300006F007800200045005A0000000403090433 +:1003100009026D00040100A0FA09040000010301B4 +:100320000100092111010001223F00070581030896 +:10033000000A090401000103010200092111010062 +:1003400001224D000705820308000A09040200018A +:100350000300000009211101000122360007058376 +:100360000308000A09040300010300000009211129 +:100370000100012239000705840310000112011059 +:100380000100000008EDFE07130100010200010555 +:10039000010906A101050719E029E71500250195C6 +:1003A0000875018102050819012905950575019156 +:1003B000029501750391010507190029771500259C +:1003C00001957875018102C005010980A1018502AE +:1003D00016010026B7001A01002AB7007510950112 +:1003E0008100C0050C0901A1018503160100269CAE +:1003F000021A01002A9C02751095018100C00501B6 +:100400000902A1010901A100050919012905150029 +:10041000250195057501810295017503810105018D +:10042000093009311581257F950275088106093843 +:100430001581257F950175088106050C0A3802157E +:1004400081257F950175088106C0C005010906A1B7 +:1004500001050719E029E7150025019508750181B7 +:100460000295017508810105081901290595057591 +:100470000191029501750391010507190029FF15E6 +:100480000025FF950675088100C0000000000000EF +:100490000000000000010204060A0F17202C3A4A4F +:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2 +:1004B000B39D87715D4A3A2C20170F0A060402018A +:1004C0000000000000000000000011241FBECFEF5C +:1004D000DAE0DEBFCDBF04B603FE24C08091EE019A +:1004E0009091EF01A091F001B091F1018730904B14 +:1004F000A740B04BB9F41092EE011092EF011092A8 +:10050000F0011092F10114BE84B7877F84BF88E1A7 +:100510000FB6F89480936000109260000FBEE0E088 +:10052000FFE3099511E0A0E0B1E0E8ECF5E402C0DA +:1005300005900D92A433B107D9F711E0A4E3B1E01F +:1005400001C01D92AE3EB107E1F70E940B090C9469 +:10055000E2220C94000061110BC0FC01828188230F +:1005600021F085EE0E946C0F03C085EE0E943410CE +:1005700080E090E0089508956091B1017091B2011A +:100580008091B3019091B4010E94F01956985E9841 +:1005900025982D9826982E9827982F98813019F015 +:1005A000823021F00895259A2D9A0895269A2E9A40 +:1005B00008958CEB92E0892B11F00E94BC0280E040 +:1005C00090E0089556985E9825982D9826982E9834 +:1005D00027982F988FEF90E0909389008093880060 +:1005E00090938B0080938A0090938D0080938C0071 +:1005F000259A2D9A2FEF80E792E02150804090407D +:10060000E1F700C00000269A2E9A2FEF80E792E0D3 +:10061000215080409040E1F700C00000279A2F9AB7 +:100620002FEF80E792E0215080409040E1F700C03A +:10063000000025982D982FEF80E792E02150804010 +:100640009040E1F700C0000026982E982FEF80E739 +:1006500092E0215080409040E1F700C000002798D0 +:100660002F9856985E9825982D9826982E9827981A +:100670002F98089589EA8093800089E08093810013 +:1006800024982C983F988AB18F748AB96E98479AAB +:100690008BB1806B8BB9769A0E94E2028BEB92E071 +:1006A000892B11F00E94BB0280E090E0089580E267 +:1006B000809300018091340181110EC00E94A60335 +:1006C00081E0809334012FEF83ED90E3215080404F +:1006D0009040E1F700C0000080E40E94AC038093EA +:1006E000000181112EC00E94D60380930001811168 +:1006F00028C00E94D60380930001811122C08FE39D +:100700000E94D6038093000181111BC00E94CE037A +:1007100080E40E94AC0380930001811112C08CE040 +:100720000E94D6038093000181110BC00E94D60362 +:1007300080930001811105C08FE30E94D60380934E +:1007400000010E94CE038091000108951092B9002B +:100750008AE08093B800089594EA9093BC00909149 +:10076000BC0097FFFCCF9091B900987F983021F0A2 +:10077000903111F081E008958093BB0084E880936C +:10078000BC008091BC0087FFFCCF8091B900887FBE +:10079000883111F0803471F780E0089584E9809306 +:1007A000BC008091BC0084FDFCCF08958093BB0009 +:1007B00084E88093BC008091BC0087FFFCCF9091BF +:1007C000B900987F81E0983209F480E0089584E8C8 +:1007D0008093BC008091BC0087FFFCCF8091BB0060 +:1007E000089580910001811115C080E40E94AC033E +:1007F0008093000181110CC082E10E94D603809396 +:100800000001811105C08FEF0E94D6038093000183 +:100810000E94CE0384B1807F84B985B1807F85B981 +:100820008AB1837F8AB98BB1837F8BB93E98469812 +:1008300008950E945703809300010E94F10380B342 +:100840008C7080BB81B3836F81BBE4E4F1E0A6E3ED +:10085000B1E011921D9281E0E235F807D1F78AE309 +:1008600093E0892B11F00C943A030895BF92CF9234 +:10087000DF92EF92FF920F931F93CF93DF938091BC +:100880000001882379F0809135018F5F80933501D5 +:10089000811108C00E94570380930001811102C09A +:1008A0000E94E20206E311E0C0E0D0E0DD24D39430 +:1008B00082E0C82EEE24E394F12CC73000F580913D +:1008C0000001811162C080E40E94AC0380930001AA +:1008D000811112C082E10E94D60380930001811130 +:1008E0000BC0C7010C2E01C0880F0A94EAF780954F +:1008F0000E94D603809300010E94CE0346C0CA30F6 +:10090000A1F028F4C83059F0C93061F005C0CC30EE +:1009100089F070F0CD3089F0209A289810C0219A83 +:1009200029980DC0229A2A980AC0239A2B9807C0AA +:10093000529A01C0539A5B9802C03E9A4698E0EAE8 +:10094000EA95F1F78FB1799960C092E081708D25B9 +:10095000892B7C9B02C090E001C094E0892B7D9B99 +:1009600002C090E001C098E0892B7E9B02C090E01D +:1009700001C090E1892B9FB19095991F9927991FEC +:100980009295990F907E892B0FC080910001811163 +:1009900051C080E40E94AC03809300018823B9F128 +:1009A000B12C0E94CE038B2DF8019081981719F07D +:1009B0008083C09201010E94F10321960F5F1F4FB7 +:1009C000CE30D10509F079CF809101018823B1F0B3 +:1009D000815080930101882339F08FE99FE00197CE +:1009E000F1F700C000000AC0A4E4B1E0E6E3F1E0E2 +:1009F00081918D9391E0E434F907D1F789ED92E08C +:100A0000892BD1F00E94D90217C090E09FCF83E1DB +:100A10000E94D603809300018111C2CF81E40E941D +:100A2000AC03809300018111BBCF0E94E703B82E75 +:100A3000B094B7CF80E0B8CF81E0DF91CF911F9124 +:100A40000F91FF90EF90DF90CF90BF900895E82F27 +:100A5000F0E0EC5BFE4F8081089508958B3B91059B +:100A600078F4883A910540F5853A9105D0F48430C0 +:100A7000910508F0B1C08130910509F4ADC06BC09B +:100A8000803E910508F467C0883E910508F4A4C033 +:100A90009C01205F31092031310508F05CC0906570 +:100AA0000895853A910509F459C0863A910509F4EB +:100AB00058C083E890E40895883A910509F454C039 +:100AC000893A910509F453C08A3A910509F452C054 +:100AD0008B3A910509F451C08C3A910509F450C044 +:100AE0008D3A910509F44FC0803B910509F44EC041 +:100AF0008E3A910509F44DC08F3A910509F44CC026 +:100B0000813B910509F44BC0823B910509F44AC031 +:100B1000833B910509F449C0843B910509F448C021 +:100B2000853B910509F447C0863B910509F446C011 +:100B3000873B910509F445C0883B910509F444C001 +:100B4000893B910509F443C08A3B910509F042C0F5 +:100B50008AE296E4089580E090E0089581E890E4C8 +:100B6000089582E890E4089582EE94E4089589EE71 +:100B700094E408958AEE94E4089585EB94E408954E +:100B800086EB94E4089587EB94E408958CEC94E468 +:100B900008958DEC94E4089583E895E408958AE837 +:100BA00095E4089582E995E4089584E995E408952B +:100BB00081E296E4089583E296E4089584E296E45F +:100BC000089585E296E4089586E296E4089587E222 +:100BD00096E4089580E094E40895089596E0799F5E +:100BE000F001112494E5899FE00DF11D1124E60F19 +:100BF000F11DEE0FFF1FEC51FF4F85919491089569 +:100C0000880F991F805A9040FC0185919491089516 +:100C1000880F991F80529F4FFC01859194910895F0 +:100C200026E0729FF001112444E5849FE00DF11D40 +:100C30001124E60FF11DEE0FFF1FEC51FF4F259120 +:100C40003491C9019A9581159F4110F4C901089505 +:100C5000C90190528115904128F4C9019F700E94EA +:100C600008060895C90190538115904120F4C901E7 +:100C70009927906C0895211580E5380769F40E9442 +:100C8000A5139FEF24E34CE0915020404040E1F752 +:100C900000C000000C94E91A213080E5380731F4D7 +:100CA0008091CC0181608093CC010895C901905559 +:100CB0008115904108F050C0832F99278F70992794 +:100CC00081309105D9F4A9014370552702C0880FDE +:100CD000991F4A95E2F79C68A90164E0440F551FEB +:100CE0006A95E1F744275370842B952B73E0220F0C +:100CF000331F7A95E1F7207633271DC082309105A6 +:100D000029F4922F8827816F906A08958330910586 +:100D1000A9F4A9014370552781E090E002C0880F33 +:100D2000991F4A95E2F79C6843E0220F331F4A95CA +:100D3000E1F7207E3770822B932B08950497F1F40E +:100D4000A9014370552781E090E002C0880F991FE8 +:100D50004A95E2F79A68E8CFC9019057811590410A +:100D600020F4C9019F7090620895C90190588115BF +:100D7000904120F4C9019F70906A0895203E31058A +:100D8000E0F4203C310558F52133310509F470C0F9 +:100D900048F42932310509F464C02A32310509F4D6 +:100DA0006EC074C029333105F1F022383105D9F015 +:100DB0002533310509F44EC069C0233E310589F160 +:100DC00038F4203E3105C1F0223E3105E1F05EC02D +:100DD000263E310569F1273E3105A9F157C0C90109 +:100DE0000E94000608958091DF0180FD02C081FF0E +:100DF0004DC080EE90E04BC08091DF0180FFF9CFC5 +:100E000089E390E044C08091DF0182FF0EC08091B1 +:100E1000DF0184FF03C080E090E039C083EE90E002 +:100E200036C08091DF0182FFF2CF82EE90E02FC0CA +:100E30008091DF0183FF0BC08091DF0184FDEBCF48 +:100E400087EE90E024C08091DF0183FFF5CF86EE2E +:100E500090E01DC08091DF0185FF07C089E290E02E +:100E600016C08091DF0185FFF9CF85E390E00FC0C8 +:100E70008091DF0186FF07C08AE290E008C0809180 +:100E8000DF0186FFF9CF81E390E001C0C9010E9434 +:100E90002E0508950895809162010895CF93DF9300 +:100EA00000D01F92CDB7DEB72091E501243019F5AF +:100EB00023E029839B838A832093E9008FEF90911D +:100EC000E800815095FD06C095ED9A95F1F7000078 +:100ED0008111F5CF8091E80085FF0DC040E050E022 +:100EE00063E070E0CE0101960E94B8098091E800AD +:100EF0008E778093E8000F900F900F90DF91CF9145 +:100F00000895CF93DF9300D01F92CDB7DEB7209125 +:100F1000E501243021F522E029839B838A8383E045 +:100F20008093E9008FEF9091E800815095FD06C015 +:100F300095ED9A95F1F700008111F5CF8091E800C9 +:100F400085FF0DC040E050E063E070E0CE01019607 +:100F50000E94B8098091E8008E778093E8000F9096 +:100F60000F900F90DF91CF9108952091E5012430EB +:100F7000F1F422E02093E9002FEF3091E8002150B6 +:100F800035FD06C035ED3A95F1F700002111F5CF9A +:100F90002091E80025FF0BC040E050E065E070E0E4 +:100FA0000E94B8098091E8008E778093E800089548 +:100FB000CF93DF93EC018091E501843009F046C0C6 +:100FC00090910C019923D9F090910D019923B9F0DA +:100FD0008093E9008FEF9091E800815095FD06C065 +:100FE00095E19A95F1F700008111F5CF8091E80025 +:100FF00085FF2CC040E050E060E170E017C081E068 +:101000008093E9008FEF9091E800815095FD06C034 +:1010100095ED9A95F1F700008111F5CF8091E800E8 +:1010200085FF14C040E050E068E070E0CE010E940F +:10103000B8098091E8008E778093E80080E1FE0196 +:10104000A2E5B1E001900D928A95E1F7DF91CF9191 +:1010500008958091E401811109C00E944A0B0E9409 +:10106000A70B8091E20084608093E20008951092C3 +:10107000E401089508950C940F210E94801A0E94A3 +:1010800015210E94440E0C944A0742E061EC81E075 +:101090000E94C40A42E061EC82E00E94C40A42E07D +:1010A00061EC83E00E94C40A42E161EC84E00C94AC +:1010B000C40A8091E701833009F455C030F48130CF +:1010C00071F0823009F48EC008958A3009F47AC034 +:1010D0008B3009F460C0893009F09CC020C0809139 +:1010E000E601813A09F096C08091E800877F8093FD +:1010F000E8008091EA019091EB01892B21F060E0FA +:1011000080E090E003C060E182E591E070E00E9441 +:10111000010A8091E8008B778093E8000895809120 +:10112000E601813209F076C08091EA019091EB01ED +:10113000009719F0039709F06DC08091E800877F50 +:101140008093E8008091E80082FD05C08091E50170 +:101150008111F8CF5FC08091F1008093620180918E +:10116000E8008B7753C08091E601813A09F052C0C4 +:101170008091EA019091EB01892B09F04BC080919D +:10118000E800877F8093E8008091E80080FFFCCF33 +:1011900080910C0136C08091E6018132D9F58091B1 +:1011A000EA019091EB01892BA9F58091E800877FF6 +:1011B0008093E8000E94F90A8091E80180930C0175 +:1011C0000C94A5138091E601813221F58091E8000D +:1011D000877F8093E8000E94F90A8091E90180935B +:1011E000630108958091E601813AA1F48091E800BD +:1011F000877F8093E8008091E80080FFFCCF80919A +:1012000063018093F1008091E8008E778093E8007D +:101210000C94F90A089584B7877F84BF88E10FB6DC +:10122000F89480936000109260000FBE90E080E818 +:101230000FB6F89480936100909361000FBE0E94F6 +:10124000930E0E944A0B0E94A70B8091E2008460DB +:101250008093E20078940E94220E0E94950E82E014 +:1012600091E00E943F0E0E94FD208091E5018530B3 +:1012700069F40E94431A8091E3018823B1F30E942C +:101280006B1A882391F30E94A209EFCF0E949B0E54 +:10129000ECCF292F332723303105A9F06CF421300E +:1012A000310509F442C02230310509F043C08DE612 +:1012B00090E020E133E042C021323105C9F0223212 +:1012C000310519F137C099278130910541F08230FD +:1012D000910541F0892B71F5ECE0F3E005C0E4EFF6 +:1012E000F2E002C0ECEDF2E0849190E09F0126C0B4 +:1012F000643000F5E62FF0E0EE0FFF1FEE5DFE4FCD +:101300002081318189E090E019C0643098F4E62FA3 +:10131000F0E0DF01AA0FBB1FA65EBE4F2D913C91EE +:10132000EA5EFE4F808190E009C082E190E02DE707 +:1013300033E004C080E090E020E030E0FA01318347 +:101340002083089580E189BD82E189BD09B400FE52 +:10135000FDCF8091D8008F7D8093D8008091E000F0 +:1013600082608093E0008091E00081FDFCCF0895D1 +:10137000CF92DF92EF92FF920F931F93CF93DF9361 +:101380007C018B01EA010E941A0B811131C0209768 +:1013900031F088819981081B190BE80EF91EC12CC8 +:1013A000D12C0115110519F18091E80085FD14C0BB +:1013B0008091E8008E778093E800209741F0888143 +:1013C00099818C0D9D1D9983888385E011C00E94B1 +:1013D0001A0B882331F30CC0F70181917F018093B0 +:1013E000F10001501109FFEFCF1ADF0ADACF80E0D8 +:1013F000DF91CF911F910F91FF90EF90DF90CF90F1 +:1014000008952091EC013091ED012617370748F03F +:101410006115710539F42091E8002E772093E800DA +:1014200001C0B901FC0120E061157105B9F180919D +:10143000E501882309F440C0853009F43FC080915C +:10144000E80083FD3DC08091E80082FF06C08091E6 +:10145000E80082FF26C080E008958091E80080FFC8 +:10146000E3CF2091F3008091F20090E0922B611580 +:10147000710551F08830910538F421912093F100E5 +:10148000615071090196F3CF21E0089709F020E03F +:101490008091E8008E778093E800C6CF2111C7CFF6 +:1014A000D6CF8091E501882339F0853039F08091DD +:1014B000E80083FFCCCF04C082E0089583E0089564 +:1014C00081E008952091EC013091ED012617370756 +:1014D00048F06115710539F42091E8002E772093CA +:1014E000E80001C0B901FC0120E061157105C1F1FE +:1014F0008091E501882309F441C0853009F440C09A +:101500008091E80083FD3EC08091E80082FF06C024 +:101510008091E80082FF27C080E008958091E80074 +:1015200080FFE3CF2091F3008091F20090E0922BB6 +:101530006115710559F08830910540F4249120938C +:10154000F1003196615071090196F2CF21E00897C0 +:1015500009F020E08091E8008E778093E800C5CF05 +:101560002111C6CFD5CF8091E501882339F0853090 +:1015700039F08091E80083FFCBCF04C082E008956A +:1015800083E0089581E00895982F973058F590935F +:10159000E900981739F07091EC002091ED0050911E +:1015A000F00003C0242F762F50E021FF19C03091A6 +:1015B000EB003E7F3093EB003091ED003D7F3093A8 +:1015C000ED003091EB0031603093EB007093EC0054 +:1015D0002093ED005093F0002091EE0027FF07C00C +:1015E0009F5FD3CF8F708093E90081E0089580E002 +:1015F00008958091E60187FD05C08091E80080FF95 +:101600000EC012C08091E80082FD05C08091E50106 +:101610008111F8CF08958091E8008B7708C0809100 +:10162000E5018111EACF08958091E8008E778093DB +:10163000E80008958091E4009091E50045E620914E +:10164000EC0020FF21C02091E80020FD21C0209166 +:10165000E501222389F0253089F02091EB0025FD5A +:101660000FC02091E4003091E5002817390739F3C5 +:10167000415041F0C901E3CF82E0089583E008952D +:1016800081E0089584E008952091E80022FFDFCFF3 +:1016900080E008950E94B80B0E94C00BE0EEF0E0DD +:1016A000808181608083E8EDF0E080818F778083A6 +:1016B00019BCA7EDB0E08C918E7F8C9380818F7EDA +:1016C00080831092E40108950F931F93CF93DF93CB +:1016D0000E94B80B0E94C00BC8EDD0E088818F77C4 +:1016E000888388818068888388818F7D888319BCFE +:1016F0001092E5011092E1011092E3011092E201D3 +:1017000000EE10E0F80180818B7F8083888181600A +:10171000888342E060E080E00E94C40AE1EEF0E0ED +:1017200080818E7F8083E2EEF0E080818160808323 +:10173000808188608083F80180818E7F80838881AA +:1017400080618883DF91CF911F910F910895E8ED1B +:10175000F0E080818F7E8083E7EDF0E08081816022 +:10176000808384E082BF81E08093E4010C94640B69 +:10177000E8EDF0E080818E7F80831092E200089592 +:101780001092DA001092E10008951F920F920FB6A6 +:101790000F9211242F933F934F935F936F937F93F7 +:1017A0008F939F93AF93BF93EF93FF938091E1004B +:1017B00082FF0BC08091E20082FF07C08091E100B0 +:1017C0008B7F8093E1000E94210E8091DA0080FFE0 +:1017D0001FC08091D80080FF1BC08091DA008E7FEF +:1017E0008093DA008091D90080FF0DC080E189BD2F +:1017F00082E189BD09B400FEFDCF81E08093E5015F +:101800000E94290805C019BC1092E5010E94370802 +:101810008091E10080FF19C08091E20080FF15C037 +:101820008091E2008E7F8093E2008091E2008061EF +:101830008093E2008091D80080628093D80019BC28 +:1018400085E08093E5010E943B088091E10084FFE0 +:1018500030C08091E20084FF2CC080E189BD82E12C +:1018600089BD09B400FEFDCF8091D8008F7D8093A3 +:10187000D8008091E1008F7E8093E1008091E200AA +:101880008F7E8093E2008091E20081608093E2008D +:101890008091E101882311F084E007C08091E3008A +:1018A00087FF02C083E001C081E08093E5010E94D0 +:1018B0003D088091E10083FF29C08091E20083FF11 +:1018C00025C08091E100877F8093E10082E08093D2 +:1018D000E5011092E1018091E1008E7F8093E100AB +:1018E0008091E2008E7F8093E2008091E20080612F +:1018F0008093E20042E060E080E00E94C40A8091B0 +:10190000F00088608093F0000E943A08FF91EF9108 +:10191000BF91AF919F918F917F916F915F914F9107 +:101920003F912F910F900FBE0F901F9018951F920F +:101930000F920FB60F9211242F933F934F935F9303 +:101940006F937F938F939F93AF93BF93CF93EF93B7 +:10195000FF93C091E900CF708091EC001092E900F4 +:101960008091F000877F8093F00078940E94D30CE0 +:101970001092E9008091F00088608093F000C0939D +:10198000E900FF91EF91CF91BF91AF919F918F911E +:101990007F916F915F914F913F912F910F900FBE6B +:1019A0000F901F9018951F93CF93DF93CDB7DEB79D +:1019B000AA970FB6F894DEBF0FBECDBFE6EEF1E0FA +:1019C0008091F100819321E0EE3EF207C9F70E9479 +:1019D00059088091E80083FF1CC12091E6013091F5 +:1019E000E701832F90E08A30910508F012C1FC01D5 +:1019F000EA5AFF4F0C949722203881F0223809F0E0 +:101A000008C18091EA018F708093E9008091EB001A +:101A100085FB882780F91092E90006C08091E201D9 +:101A20009091E301911182609091E800977F9093EB +:101A3000E8008093F1001092F100C5C0822F8D7FE5 +:101A400009F0E7C0222319F0223061F0E2C0809152 +:101A5000E801813009F0DDC0333009F080E0809387 +:101A6000E30128C08091E801811124C02091EA019E +:101A70002F7009F4CEC02093E9008091EB0080FF25 +:101A800019C08091EB00333011F4806211C0806185 +:101A90008093EB0081E090E0022E01C0880F0A9451 +:101AA000EAF78093EA001092EA008091EB008860E8 +:101AB0008093EB001092E9008091E800877F86C058 +:101AC0002111A7C01091E8011F778091E300807871 +:101AD000812B8093E3008091E800877F8093E8006A +:101AE0000E94F90A8091E80080FFFCCF8091E3001A +:101AF00080688093E300112311F083E001C082E04D +:101B00008093E50186C02058223008F082C0809181 +:101B1000E8019091E9018C3D23E0920779F583E09B +:101B20008A838AE289834FB7F894DE01139620E016 +:101B30003EE051E2E32FF0E050935700E49120FFA4 +:101B400003C0E295EF703F5FEF708E2F90E0EA30B8 +:101B500010F0C79601C0C0968D939D932F5F2431DE +:101B600049F74FBF8091E800877F8093E8006AE2E1 +:101B700070E0CE0101960E94010A14C0AE014F5FD1 +:101B80005F4F6091EA010E944909009709F441C042 +:101B90002091E800277F2093E800BC0189819A8189 +:101BA0000E94620A8091E8008B778093E80031C040 +:101BB000203879F58091E800877F8093E800809154 +:101BC000E1018093F1008091E8008E778093E80036 +:101BD0000E94F90A1EC021111CC09091E8019230A8 +:101BE000C0F48091E800877F8093E8009093E10142 +:101BF0000E94F90A8091E101811104C08091E30003 +:101C000087FF02C084E001C081E08093E5010E946B +:101C100045088091E80083FF0AC08091E800877F33 +:101C20008093E8008091EB0080628093EB00AA969D +:101C30000FB6F894DEBF0FBECDBFDF91CF911F91DD +:101C400008950895CF938091E5018823B1F08091A4 +:101C5000E9008F709091EC0090FF02C090E801C005 +:101C600090E0C92FC82B1092E9008091E80083FD15 +:101C70000E94D30CCF70C093E900CF910895909348 +:101C80006901809368010895E0916801F09169010C +:101C9000309721F00190F081E02D099480E00895C3 +:101CA000E0916801F0916901309721F00280F381A1 +:101CB000E02D09940895E0916801F0916901309751 +:101CC00021F00480F581E02D0994089520916601AA +:101CD000309167018217930771F0909367018093A9 +:101CE0006601E0916801F0916901309721F006806A +:101CF000F781E02D099408952091640130916501E8 +:101D00008217930771F09093650180936401E091CD +:101D10006801F0916901309721F00084F185E02D90 +:101D20000994089508950C94920E0E94861A0E94B8 +:101D300019040C944C1BCF92DF92EF92FF920F93F9 +:101D40001F93CF93DF93CDB7DEB72B970FB6F894E1 +:101D5000DEBF0FBECDBF0E9436043BE6E32E31E06E +:101D6000F32E00E010E0C02E802F0E942705F7011F +:101D7000D1907F01D826B1F40F5F1F4F0E301105AF +:101D800091F78FEF89838A831B820E948F1A81606B +:101D9000782F9D838C8349815A816B818D810E942C +:101DA0003E0F41C09091CC0191FF04C08B870E94EF +:101DB0002D058B8520E030E04D2D50E0922FBA01AB +:101DC000022E02C0759567950A94E2F760FF25C060 +:101DD0002E83CF82EE24E394F12C02C0EE0CFF1C84 +:101DE0009A95E2F790E08E219F2121E0892B09F45A +:101DF00020E028870E948F1A8160782F9A87898730 +:101E00004E815F8168858A850E943E0FF801E55901 +:101E1000FE4F80818E25808306C02F5F3F4F263086 +:101E2000310561F6A9CF0E94301E10916A010E940F +:101E3000440E1817A1F00E94440E80936A012B965D +:101E40000FB6F894DEBF0FBECDBFDF91CF911F91CB +:101E50000F91FF90EF90DF90CF900C944A072B9654 +:101E60000FB6F894DEBF0FBECDBFDF91CF911F91AB +:101E70000F91FF90EF90DF90CF900895CF93DF9375 +:101E8000CDB7DEB72B970FB6F894DEBF0FBECDBF30 +:101E90004F83588769877A878B87DE01119686E0A2 +:101EA000FD0111928A95E9F785E0FE0137960190D0 +:101EB0000D928A95E1F749815A816B817C818D81F0 +:101EC0009E810E9471162B960FB6F894DEBF0FBE4E +:101ED000CDBFDF91CF910895CF93C82F882309F408 +:101EE000C1C0823859F40E94440E81FDBBC089E311 +:101EF0000E9410190E94CA1989E30CC0833879F432 +:101F00000E94440E80FDAEC083E50E9410190E941D +:101F1000CA1983E50E945019CF910C94CA198438CC +:101F200059F40E94440E82FD9DC087E40E9410195E +:101F30000E94CA1987E4EECF8CEF8C0F813A48F4E7 +:101F40008C2F0E94652081118DC08C2F0E9410194A +:101F5000E3CF80E28C0F883048F4C77081E001C085 +:101F6000880FCA95EAF70E949119D6CF8BE58C0F9E +:101F7000833078F4C53A29F0C63A31F482E890E02B +:101F800005C081E890E002C083E890E0CF910C9416 +:101F9000660E88E58C0F833108F064C0C83A39F1C9 +:101FA000C93A41F1CA3A49F1CB3A51F1CC3A59F127 +:101FB000CD3A61F1C03B69F1CE3A71F1CF3A79F196 +:101FC000C13B81F1C23B89F1C33B91F1C43B99F123 +:101FD000C53BA1F1C63BA9F1C73BB1F1C83BB9F183 +:101FE000C93BC1F1CA3BC9F58AE292E038C082EE32 +:101FF00090E035C089EE90E032C08AEE90E02FC0CC +:1020000085EB90E02CC086EB90E029C087EB90E058 +:1020100026C08CEC90E023C08DEC90E020C083E8DB +:1020200091E01DC08AE891E01AC082E991E017C0F2 +:1020300084E991E014C081E292E011C083E292E071 +:102040000EC084E292E00BC085E292E008C086E216 +:1020500092E005C087E292E002C080E090E0CF917C +:102060000C947C0ECF910895882309F44BC08238DC +:1020700059F40E94440E81FF45C089E30E94101963 +:102080000E94CA1989E30CC0833871F40E94440E7F +:1020900080FF38C083E50E9410190E94CA1983E5A9 +:1020A0000E9450190C94CA19843859F40E94440EA5 +:1020B00082FF28C087E40E9410190E94CA1987E491 +:1020C000EFCF9CEF980F913A58F390E2980F983029 +:1020D00050F4877091E001C0990F8A95EAF7892F33 +:1020E0000E949719DFCF9BE5980F933020F480E092 +:1020F00090E00C94660E885A833120F480E090E0E2 +:102100000C947C0E0895882321F00E9491190C9460 +:10211000CA190895882321F00E9497190C94CA19AE +:102120000895CF92DF92EF92FF920F931F93CF9378 +:10213000DF93CDB7DEB728970FB6F894DEBF0FBE9A +:10214000CDBF8C0185E0F801DE01119601900D9262 +:102150008A95E1F7F80140813181F280258122954D +:102160002F7083819481892B31F03F3F31F481E0DE +:102170004F3F19F403C081E001C080E080FDC4C27C +:1021800049833A8389819A812F830E94CE189E8346 +:1021900088870E94CD180E94A0174E81E42FE295F7 +:1021A000EF70F0E0E05AFF4F2F8168850C94972282 +:1021B000842F807F142F1F70882311F01295107FB9 +:1021C000FF2059F0112309F454C2812F68870E941F +:1021D000A1190E94CA1968854CC2862F0E9434102A +:1021E000112309F491C2812F0E94A71928960FB6D6 +:1021F000F894DEBF0FBECDBFDF91CF911F910F913D +:10220000FF90EF90DF90CF900C94CA19342F307F5D +:10221000842F8F70303211F08295807F662319F001 +:10222000613019F12BC0FF20B1F0222309F493C1D2 +:10223000213009F090C128960FB6F894DEBF0FBE8A +:10224000CDBFDF91CF911F910F91FF90EF90DF9065 +:10225000CF900C94B119222319F0213009F454C203 +:102260008E830E94B4198E8189C1FF2021F0223013 +:1022700008F04AC270C1211147C280C1FF2021F07D +:10228000222309F468C1F5C1222309F477C105C2EC +:10229000242F26952695237030E02115310521F055 +:1022A00021303105C9F030C2FF2021F0862F942F54 +:1022B000937002C080E090E028960FB6F894DEBFDD +:1022C0000FBECDBFDF91CF911F910F91FF90EF9087 +:1022D000DF90CF900C94660EFF2021F0862F942F74 +:1022E000937002C080E090E028960FB6F894DEBFAD +:1022F0000FBECDBFDF91CF911F910F91FF90EF9057 +:10230000DF90CF900C947C0E862FFF2019F00E9456 +:10231000381D02C00E94A01D28960FB6F894DEBF9B +:102320000FBECDBFDF91CF911F910F91FF90EF9026 +:10233000DF90CF900C94251E842F837009F076C017 +:10234000F110E2C1262F229526952770220F220F29 +:10235000862F8F70C82ED12CE12CF12C022E04C0B8 +:10236000CC0CDD1CEE1CFF1C0A94D2F764FF10C0DD +:102370006FE070E080E090E004C0660F771F881F78 +:10238000991F2A95D2F7609570958095909503C016 +:1023900060E070E0CB01242F269526952370422F14 +:1023A00050E042305105D1F04330510559F16C29CC +:1023B0007D298E299F294130510541F128960FB67C +:1023C000F894DEBF0FBECDBFDF91CF911F910F916B +:1023D000FF90EF90DF90CF900C94C5176C297D296A +:1023E0008E299F2928960FB6F894DEBF0FBECDBF69 +:1023F000DF91CF911F910F91FF90EF90DF90CF90E1 +:102400000C94DF170E94C517C701B60128960FB6B6 +:10241000F894DEBF0FBECDBFDF91CF911F910F911A +:10242000FF90EF90DF90CF900C94AB17FF2019F046 +:10243000842F817001C08695882309F465C1262FF9 +:10244000229526952770220F220F862F8F70C82E77 +:10245000D12CE12CF12C022E04C0CC0CDD1CEE1C86 +:10246000FF1C0A94D2F764FF10C06FE070E080E0B8 +:1024700090E004C0660F771F881F991F2A95D2F736 +:10248000609570958095909503C060E070E0CB01F9 +:10249000242F269526952370422F50E04230510577 +:1024A000D1F04330510559F16C297D298E299F299E +:1024B0004130510541F128960FB6F894DEBF0FBEAA +:1024C000CDBFDF91CF911F910F91FF90EF90DF90E3 +:1024D000CF900C9499186C297D298E299F292896D4 +:1024E0000FB6F894DEBF0FBECDBFDF91CF911F9125 +:1024F0000F91FF90EF90DF90CF900C94B3180E9453 +:102500009918C701B60128960FB6F894DEBF0FBE22 +:10251000CDBFDF91CF911F910F91FF90EF90DF9092 +:10252000CF900C947F18603FC9F118F4603E50F4CE +:102530009BC0623F09F460C008F44AC0633F09F4DD +:102540006FC092C0162F1F70842F8F71FF2099F0DB +:102550000E941818812F28960FB6F894DEBF0FBE80 +:10256000CDBFDF91CF911F910F91FF90EF90DF9042 +:10257000CF900C9483100E943918812F28960FB6A3 +:10258000F894DEBF0FBECDBFDF91CF911F910F91A9 +:10259000FF90EF90DF90CF900C948A10FF20A1F075 +:1025A0002111B2C0842F8F7128960FB6F894DEBF28 +:1025B0000FBECDBFDF91CF911F910F91FF90EF9094 +:1025C000DF90CF900C945E18223008F09DC0EACFC7 +:1025D000FF20A1F0842F8F7128960FB6F894DEBFEC +:1025E0000FBECDBFDF91CF911F910F91FF90EF9064 +:1025F000DF90CF900C941818FF2061F3842F8F7117 +:1026000028960FB6F894DEBF0FBECDBFDF91CF91F5 +:102610001F910F91FF90EF90DF90CF900C9439189D +:10262000FF2091F0842F8F7128960FB6F894DEBFAB +:102630000FBECDBFDF91CF911F910F91FF90EF9013 +:10264000DF90CF900C94031828960FB6F894DEBF55 +:102650000FBECDBFDF91CF911F910F91FF90EF90F3 +:10266000DF90CF900C94F917FF20A1F0222309F4FA +:10267000B1CF862F28960FB6F894DEBF0FBECDBF20 +:10268000DF91CF911F910F91FF90EF90DF90CF904E +:102690000C946C0F222309F4B1CF862F28960FB625 +:1026A000F894DEBF0FBECDBFDF91CF911F910F9188 +:1026B000FF90EF90DF90CF900C9434104F70C801D2 +:1026C0000E94AB0228960FB6F894DEBF0FBECDBFB6 +:1026D000DF91CF911F910F91FF90EF90DF90CF90FE +:1026E0000C941E174F70C80128960FB6F894DEBFE1 +:1026F0000FBECDBFDF91CF911F910F91FF90EF9053 +:10270000DF90CF900C94ED0528960FB6F894DEBFBD +:102710000FBECDBFDF91CF911F910F91FF90EF9032 +:10272000DF90CF9008950E94AE190E9483190E94F5 +:10273000CA190E94D11E0E94251E80E090E00E94CE +:10274000660E80E090E00C947C0E0E949E190C9422 +:1027500093130E94CE18292F22952F7030E02C3031 +:1027600031054CF42A3031056CF422503109223005 +:10277000310590F407C02C30310551F02F30310570 +:1027800039F00AC0803E10F0803F31F481E00895B6 +:1027900093FB882780F9089580E00895CF93DF9315 +:1027A00000D000D01F92CDB7DEB70F900F900F90E2 +:1027B0000F900F90DF91CF910895CF93DF9300D0CA +:1027C00000D000D0CDB7DEB726960FB6F894DEBFA6 +:1027D0000FBECDBFDF91CF9108951F93CF93DF93AD +:1027E000C091790116E080917A01C81799F0D0E084 +:1027F0001C9FF0011D9FF00D1124E558FE4F4081F4 +:10280000518162817381848195810E94DD132196BB +:10281000C770E9CFDF91CF911F9108954091AB012F +:102820005091AC016091AD017091AE018091AF010A +:102830009091B0010C94DD13CF938091B0018295FB +:102840008F7009F05FC08091AD01882309F45AC0F0 +:1028500020917901A0917A016091AB017091AC0156 +:102860008091AE019091AF0131E06F3F09F030E00F +:10287000B32FC6E02A1709F445C0009721F07F3F27 +:1028800021F44B2F03C041E001C040E030E040FDA7 +:1028900035C0C29FF001C39FF00D1124E558FE4FD3 +:1028A000418174132BC04081641328C042814111BF +:1028B00025C0438154814817590710F441505109EC +:1028C000481B590B483C5105C8F48091B0018F70EA +:1028D00080618093B00186E0829FF001839FF00DBC +:1028E0001124E058FE4F80818F70806180838BEAD5 +:1028F00091E00E949110CF910C94ED132F5F3F4F08 +:102900002770B8CFCF910895CF92DF92EF92FF92C8 +:102910000F931F93CF93DF93CDB7DEB762970FB6B8 +:10292000F894DEBF0FBECDBF8C0185E0F801DE015B +:102930001D9601900D928A95E1F7D8014C91119660 +:102940005C91119712966C9112971396ED90FC90F2 +:1029500014977091AB01E091AC012091AE013091E0 +:10296000AF012115310531F0EF3F31F481E07F3FB8 +:1029700019F403C081E001C080E0B82FB170CB2E04 +:1029800080FD6CC1D090AD01DD2009F4F5C0F0915F +:10299000B001E216F30638F0C701821B930B883CA6 +:1029A000910548F09BC0209530952E0D3F1D283C89 +:1029B000310508F093C08F2F807F09F052C0E513D6 +:1029C00014C0741312C0D62E61110FC0FF70F061D5 +:1029D000F093B0010E940E148BEA91E00E949110D6 +:1029E0008091B001F80185836CC1EF2831F05F3F21 +:1029F00031F481E04F3F19F403C081E001C080E071 +:102A000080FD03C081E0862701C080E0F82FF170CF +:102A1000FF2E80FF1CC08091790120917A0136E061 +:102A2000821709F428C190E0389FF001399FF00D1A +:102A30001124E558FE4F7181571306C0708147136A +:102A400003C07281671303C001968770E9CFD62E49 +:102A5000662309F436C18091B00181608093B00192 +:102A600053C0E51308C0741306C0611104C0D80137 +:102A70001596FC93AEC04D875E878D859E856A8BCB +:102A80000E94A9136A89882329F1D62E662311F1A1 +:102A90002091B001822F82958F7090E002970CF404 +:102AA00060C08091AB019091AC0198878F831986AB +:102AB000FB86EA862C87CE01079651C0E51731F1D7 +:102AC0004D875E878D859E856A8B0E94A9136A89D2 +:102AD00081112EC0C8010E949110A4C08F2F807F49 +:102AE00069F77E2DF98AE88A89890E94CE138BEADC +:102AF00091E00E949110EBEAF1E086E0DF011D9287 +:102B00008A95E9F70E940E14D12CDBC07413D8CF3C +:102B10006111D6CFD8011596FC93C8010E9491107F +:102B2000EBEAF1E086E0DF011D928A95E9F7C9C082 +:102B3000D62E662379F22091B001822F82958F7074 +:102B400090E0029774F08091AB019091AC019A8370 +:102B500089831B82FD82EC822E83CE0101960E9426 +:102B6000911086E0F801ABEAB1E001900D928A95F0 +:102B7000E1F70E941C146FC0E216F30628F0C701AB +:102B8000821B930B9C0104C0209530952E0D3F1D98 +:102B9000283C310508F052C0D62E662309F49ACF9E +:102BA000E5132CC074132AC08091B00180FD1DC0B4 +:102BB000982F92959F70C9F0D80115968C93159710 +:102BC0009F3039F09F5F9295907F8F70892B15967B +:102BD0008C93C8010E94911086E0F801ABEAB1E045 +:102BE00001900D928A95E1F736C086E0F801ABEAD4 +:102BF000B1E001900D928A95E1F763C04D875E8741 +:102C00008D859E850E94A913882379F086E0F801BE +:102C1000ABEAB1E001900D928A95E1F70E941C1495 +:102C20000E940E14DD24D3944CC08091B0018160C9 +:102C30008093B001C8010E94911043C07E2DF98A93 +:102C4000E88A89890E94CE13EBEAF1E086E0DF0191 +:102C50001D928A95E9F70E940E1433C0662309F489 +:102C600039CF4D875E878D859E850E94A913882365 +:102C700009F430CFCBCF4D875E878D859E850E942E +:102C8000CE18292F22952F7030E0223031052CF4F8 +:102C90009F7041F0811106C00CC0243031052CF426 +:102CA0009F7049F4805E883020F0C8010E94911026 +:102CB000CF2CDC2C06C0D80115969C91907F91F703 +:102CC000F8CF8D2D62960FB6F894DEBF0FBECDBF44 +:102CD000DF91CF911F910F91FF90EF90DF90CF90F8 +:102CE00008951F93CF93DF93CDB7DEB72C970FB620 +:102CF000F894DEBF0FBECDBF4F83588769877A87B0 +:102D00008B879C87CE0107960E9484148823C1F08C +:102D10002F8138858A859B85892B31F03F3F11F0C3 +:102D200080E003C02F3FE1F781E0811147C04F8170 +:102D3000588569857A858B859C850E94DD133EC008 +:102D400086E0FE013796DE01119601900D928A957C +:102D5000E1F7FF81E8854A855B854115510531F032 +:102D6000EF3F31F481E0FF3F19F403C081E001C07F +:102D700080E080FD23C020917A0130E0C9010196F6 +:102D8000877099276091790170E086179707F1F1B4 +:102D9000F983EA835D834C8396E0929FD001939FF1 +:102DA000B00D1124A558BE4FFE01319601900D9231 +:102DB0009A95E1F780937A010E94ED1316E08091D5 +:102DC000790190917A01891779F1189FC001112436 +:102DD00085589E4F0E948414882331F1E091790137 +:102DE0001E9FF0011124E558FE4F40815181628100 +:102DF0007381848195810E94DD138091790190E037 +:102E000001968770992780937901D9CF0E94A513E5 +:102E100010927A0110927901EBEAF1E086E0DF018D +:102E20001D928A95E9F7CACF2C960FB6F894DEBFAB +:102E30000FBECDBFDF91CF911F910895EF92FF920A +:102E40000F931F93CF93DF939C01009709F471C0F8 +:102E5000F12CEE24E394E9012196F9018491843761 +:102E600040F4843008F056C0813081F0823021F186 +:102E700060C0853709F449C0C0F19CE7980F9037CE +:102E800008F057C08F770E94341046C089010E5F4A +:102E90001F4FFE01849190E2980F983050F4877094 +:102EA000FE2D01C0FF0F8A95EAF78F2F0E94A1190E +:102EB00015C00E946C0F14C089010E5F1F4FFE01E8 +:102EC000849190E2980F983068F48770FE2D01C0CD +:102ED000FF0F8A95EAF78F2F0E94A7190E94CA193F +:102EE000E8011AC00E943410FBCF2E5F3F4FFE0155 +:102EF000C491CC2341F08FE99FE00197F1F700C026 +:102F00000000C150F6CFE90107C0FE01F490E901CD +:102F1000229602C00E946C0F8F2D882341F0EFE9AA +:102F2000FFE03197F1F700C000008150F6CF9E011D +:102F300092CFDF91CF911F910F91FF90EF90089565 +:102F400008956093B5017093B6018093B701909393 +:102F5000B8010C9493130F931F930091B501109136 +:102F6000B6012091B7013091B801062B172B282B01 +:102F7000392B0093B5011093B6012093B70130931C +:102F8000B8011F910F910C9493130F931F9300910D +:102F9000B5011091B6012091B7013091B801062317 +:102FA0001723282339230093B5011093B6012093EA +:102FB000B7013093B8011F910F910C9493130F93A5 +:102FC0001F930091B5011091B6012091B701309186 +:102FD000B80106271727282739270093B501109332 +:102FE000B6012093B7013093B8011F910F910C9453 +:102FF00093131092B1011092B2011092B30110928A +:10300000B4010C94931341E050E060E070E004C020 +:10301000440F551F661F771F8A95D2F74093B10161 +:103020005093B2016093B3017093B4010C94931365 +:1030300041E050E060E070E004C0440F551F661F9F +:10304000771F8A95D2F78091B1019091B201A0913A +:10305000B301B091B401842B952BA62BB72B809391 +:10306000B1019093B201A093B301B093B4010C9459 +:10307000931341E050E060E070E004C0440F551F3E +:10308000661F771F8A95D2F7409550956095709589 +:103090008091B1019091B201A091B301B091B401BE +:1030A00084239523A623B7238093B1019093B20183 +:1030B000A093B301B093B4010C94931341E050E09A +:1030C00060E070E004C0440F551F661F771F8A95AB +:1030D000D2F78091B1019091B201A091B301B0916A +:1030E000B40184279527A627B7278093B101909331 +:1030F000B201A093B301B093B4010C9493130F9356 +:103100001F930091B1011091B2012091B301309150 +:10311000B401062B172B282B392B0093B1011093E8 +:10312000B2012093B3013093B4011F910F910C941D +:1031300093130F931F930091B1011091B20120914D +:10314000B3013091B40106231723282339230093B8 +:10315000B1011093B2012093B3013093B4011F91D8 +:103160000F910C9493130F931F930091B101109141 +:10317000B2012091B3013091B40106271727282707 +:1031800039270093B1011093B2012093B30130931A +:10319000B4011F910F910C9493130895CF92DF9275 +:1031A000EF92FF920F931F93CF93DF93EC01C090A8 +:1031B000B501D090B601E090B701F090B8018091D0 +:1031C000B1019091B201A091B301B091B401C82AAC +:1031D000D92AEA2AFB2A0FE110E0B701A601002E46 +:1031E00004C076956795579547950A94D2F740FFA6 +:1031F00007C0BE01802F0E9410068130910539F46E +:103200000150110950F7BE0180E00E941006DF91C5 +:10321000CF911F910F91FF90EF90DF90CF90089585 +:1032200090910C019923D9F090910D019923B9F057 +:10323000982F9695969596959F3088F5E0910E017A +:10324000F0910F01E90FF11D877021E030E001C01E +:10325000220F8A95EAF78181822B8183089540911C +:103260000E0150910F0120E030E09FEFFA01E20FD4 +:10327000F31F6281681799F09F3F19F4611101C033 +:10328000922F2F5F3F4F2E30310581F79F3F39F04E +:10329000FA01E90FF11D97FDFA95828308950895CB +:1032A00090910C019923E1F090910D019923C1F0C7 +:1032B000982F9695969596959F3020F5E0910E0162 +:1032C000F0910F01E90FF11D877021E030E001C09E +:1032D000220F8A95EAF7209581812823218308957A +:1032E00040910E0150910F0120E030E0FA01E20F11 +:1032F000F31F9281981301C012822F5F3F4F2E302F +:103300003105A1F7089581E090E0E0910E01F09180 +:103310000F01E80FF91F1082019680319105A9F77E +:1033200008959091CB01982B9093CB0108958095AF +:103330009091CB0198239093CB0108951092CB01EB +:1033400008959091CA01982B9093CA010895809591 +:103350009091CA0198239093CA0108951092CA01CE +:1033600008958093B90108951092B901089540918C +:103370000E0150910F0120E030E080E0FA01E20FF1 +:10338000F31F918191118F5F2F5F3F4F2F303105D8 +:10339000A9F70895E0910E01F0910F018091CB0102 +:1033A0008083E0910E01F0910F0180819091CA011C +:1033B000892B80839091B901992361F0E0910E01EE +:1033C000F0910F018081892B80830E94B7198111B0 +:1033D0001092B90180910E0190910F010C94500E42 +:1033E000CF92DF92EF92FF920F931F936C01EE2426 +:1033F000FF24C114D104E104F10421F46B017C0128 +:1034000080E001C080E133272F2D1E2D0D2D0115E9 +:1034100011052105310519F0885F680179019701CF +:103420008601A4E03695279517950795AA95D1F7BB +:10343000011511052105310519F08C5F680179012D +:1034400097018601F2E03695279517950795FA952D +:10345000D1F7011511052105310519F08E5F6801BD +:103460007901B701A6017695679557954795452B44 +:10347000462B472B09F08F5F1F910F91FF90EF9024 +:10348000DF90CF9008958091E501843009F110928A +:10349000CD0120E488E190E00FB6F894A8958093E0 +:1034A00060000FBE2093600083B7817F846083BF7C +:1034B00083B7816083BF7894889583B78E7F83BFFD +:1034C00088E10FB6F89480936000109260000FBE00 +:1034D000089508950895CF930E94691A0E943604B2 +:1034E0000E946A1AC0E08C2F0E942705811105C036 +:1034F000CF5FCE30C1F780E001C081E0CF91089569 +:103500000E94A5130E94440E0C944A0782E084BDD9 +:1035100093E095BD9AEF97BD80936E0008952FB705 +:10352000F8948091CE019091CF01A091D001B091FB +:10353000D1012FBF0895CF92DF92EF92FF920F93A8 +:103540001F932FB7F8944091CE015091CF01609115 +:10355000D0017091D1012FBF6A017B01EE24FF24BD +:103560008C0120E030E0C016D106E206F30610F42C +:1035700041505109481B590BCA011F910F91FF90EF +:10358000EF90DF90CF9008951F920F920FB60F9299 +:1035900011248F939F93AF93BF938091CE0190910D +:1035A000CF01A091D001B091D1010196A11DB11D13 +:1035B0008093CE019093CF01A093D001B093D1011D +:1035C000BF91AF919F918F910F900FBE0F901F9061 +:1035D00018950E944A0BF8942FEF87EA91E6215044 +:1035E00080409040E1F700C0000087E090EBDC01F4 +:1035F0008093EE019093EF01A093F001B093F1015D +:103600002CE088E190E00FB6F894A89580936000D4 +:103610000FBE20936000FFCFEF92FF920F931F9396 +:10362000CF93DF93E82EF12C8F2D0E942705C0E069 +:10363000D0E0082F10E098010C2E02C03595279598 +:103640000A94E2F720FD05C02196C630D10599F70E +:1036500009C06C2F7F2D80E00E94EE05E812F4CFA8 +:1036600081E005C0F3948EE0F812DECF80E0DF91B8 +:10367000CF911F910F91FF90EF900895CF93C82F96 +:103680008CE20E940C1B882321F08C2FCF910C948C +:103690000C1B80E0CF910895CF930E94911C811163 +:1036A00002C00E94771CC5E6C15049F00E94360452 +:1036B0008FE39CE90197F1F700C00000F5CF89E2A4 +:1036C0000E943E1B811111C18AE20E943E1B8111A2 +:1036D0000E94771C85E00E943E1B81110E94E91A1E +:1036E0000E949C1C8093CC0187E00E943E1B882393 +:1036F00099F18BE10E943E1B882351F09091CC01FF +:1037000091FB882780F921E0822780FB91F922C074 +:103710008EE00E943E1B882351F09091CC0192FBD9 +:10372000882780F921E0822780FB92F913C080E18D +:103730000E943E1B9091CC01882341F093FB882787 +:1037400080F921E0822780FB93F904C0892F8095BE +:1037500080FB90F99093CC018091CC010E94A01C39 +:103760000E94AE1C8093DF0180EE0E943E1B8823E6 +:1037700041F08091DF01982F909590FB80F9809324 +:10378000DF0189E30E943E1B882359F09091DF01FD +:1037900091FB882780F921E0822780FB91F99093A3 +:1037A000DF0182EE0E943E1B882359F09091DF01D9 +:1037B00092FB882780F921E0822780FB92F9909381 +:1037C000DF0186EE0E943E1B882359F09091DF01B5 +:1037D00093FB882780F921E0822780FB93F990935F +:1037E000DF0183EE0E943E1B882359F09091DF0198 +:1037F00094FB882780F921E0822780FB94F990933D +:10380000DF0185E30E943E1B882359F09091DF0180 +:1038100095FB882780F921E0822780FB95F990931A +:10382000DF0181E30E943E1B882359F09091DF0164 +:1038300096FB882780F921E0822780FB96F99093F8 +:10384000DF0181E10E943E1B882359F09091DF0146 +:1038500097FB882780F921E0822780FB97F99093D6 +:10386000DF018091DF010E94B21C8091DF0187FBA4 +:10387000882780F980930D0187E20E943E1BC82FA4 +:103880008EE10E943E1B8111C2608FE10E943E1BAF +:103890008111C46080E20E943E1B8111C86081E2F8 +:1038A0000E943E1B8111C06182E20E943E1B811179 +:1038B000C06283E20E943E1B8111C06484E20E94C8 +:1038C0003E1B882311F0C06802C0CC2329F08C2F46 +:1038D0000E94A91C6C2F03C00E94A51C682F70E0D9 +:1038E00080E090E0CF910C94A117CF9108956DEEF8 +:1038F0007EEF80E090E00E94CD2260E082E090E0E8 +:103900000E94BF2260E083E090E00E94BF2260E05E +:1039100084E090E00E94BF2260E085E090E00C949B +:10392000BF2280E090E00E94B92221E08D3E9E4FB0 +:1039300009F020E0822F089582E090E00C94B122FB +:10394000682F82E090E00C94BF2283E090E00C941A +:10395000B122682F83E090E00C94BF2284E090E0D5 +:103960000C94B122682F84E090E00C94BF228091E7 +:10397000D40180FF0BC06091130185E0689FB00106 +:10398000112475956795759567952AC081FF09C0C3 +:103990006091130185E0689FB001112475956795CA +:1039A0001FC082FF07C06091130185E0689FB001CE +:1039B000112416C04091D5014423C9F06091120131 +:1039C000461788F72091130185E0289F9001112464 +:1039D000429FC001439F900D112470E00E948322FA +:1039E0006038710540F46115710539F002C065E079 +:1039F00070E0862F08958FE7089581E00895809103 +:103A0000D40180FF08C06091110170E07595679541 +:103A10007595679521C081FF06C06091110170E026 +:103A20007595679519C082FF04C06091110170E01F +:103A300010C08091D5018823C1F0609110018617D4 +:103A4000A0F790911101989FC001112470E00E948D +:103A500083226038710528F46115710521F0862FE5 +:103A600008958FE7089581E0089561E070E0F4CF54 +:103A7000803F21F40E94B71C819504C0813F29F446 +:103A80000E94B71C8093D8010895823F21F40E94C0 +:103A9000B71C819504C0833F29F40E94B71C809312 +:103AA000D7010895893F19F40E94FF1C05C08A3F81 +:103AB00031F40E94FF1C81958093D90108958B3FBA +:103AC00021F40E94FF1C819504C08C3F29F40E94C0 +:103AD000FF1C8093DA010895843F21F48091D60180 +:103AE000816017C0853F21F48091D601826011C0AA +:103AF000863F21F48091D60184600BC0873F21F47A +:103B00008091D601886005C0883F31F48091D6014C +:103B100080618093D60108958D3F21F48091D40176 +:103B200081600BC08E3F21F48091D401826005C07A +:103B30008F3F29F48091D40184608093D40108954B +:103B4000803F39F48091D80187FF6CC01092D80172 +:103B500069C0813F29F48091D8011816BCF362C076 +:103B60009091D701823F29F497FF5CC01092D70152 +:103B700059C0833F19F41916CCF354C0893F41F45E +:103B80008091D90118160CF04DC01092D9014AC08D +:103B90008A3F29F48091D90187FF44C0F6CF8B3F3B +:103BA00039F48091DA0187FF3DC01092DA013AC002 +:103BB0008C3F29F48091DA011816BCF333C0843F9E +:103BC00021F48091D6018E7F17C0853F21F480912A +:103BD000D6018D7F11C0863F21F48091D6018B7F65 +:103BE0000BC0873F21F48091D601877F05C0883FB5 +:103BF00031F48091D6018F7E8093D60113C08D3F22 +:103C000021F48091D4018E7F0BC08E3F21F48091EE +:103C1000D4018D7F05C08F3F29F48091D4018B7F23 +:103C20008093D4018091D70181110EC08091D80179 +:103C300081110AC08091D901811106C08091DA01F9 +:103C4000811102C01092D501089586ED91E00E9485 +:103C50005B0E0E948F1A9093D3018093D201089536 +:103C60001F93CF93DF938091D2019091D3010E9453 +:103C70009B1A4091D501442321F02091140130E09A +:103C800006C0209115015AE0259F9001112482174A +:103C9000930708F482C08091D7011091D801D09188 +:103CA000D901C091DA01811107C0111105C0D111EC +:103CB00003C0CC2309F471C04F3F19F04F5F40930C +:103CC000D501181624F40E94B71C8093D701809167 +:103CD000D70187FF05C00E94B71C81958093D7014B +:103CE000111624F40E94B71C8093D8018091D8014A +:103CF00087FF05C00E94B71C81958093D801609111 +:103D0000D701662339F11091D801112319F17727D2 +:103D100067FD7095872F972F0E94942123E333E34B +:103D200043E35FE30E94F8210E9461216093D70181 +:103D3000612F772767FD7095872F972F0E94942119 +:103D400023E333E343E35FE30E94F8210E94612110 +:103D50006093D8011D1624F40E94FF1C8093D901A2 +:103D60008091D90187FF05C00E94FF1C8195809337 +:103D7000D9011C1624F40E94FF1C8093DA01809163 +:103D8000DA0187FF05C00E94FF1C81958093DA014C +:103D9000DF91CF911F910C94251EDF91CF911F9140 +:103DA0000895E6EDF1E085E0DF011D928A95E9F7DF +:103DB0001092D5011092D4010895833081F128F436 +:103DC000813059F08230D1F00895853009F449C02E +:103DD000B8F1863009F456C0089520911501862F58 +:103DE00090E0820F911D8F3F910520F4620F609348 +:103DF000150108958FEF8093150108952091140106 +:103E0000862F90E0820F911D8F3F910520F4620F65 +:103E10006093140108958FEF809314010895209109 +:103E20001301862F90E0820F911D8F3F910520F4A2 +:103E3000620F6093130108958FEF8093130108952B +:103E400020911201862F90E0820F911D8F3F9105E6 +:103E500020F4620F6093120108958FEF8093120196 +:103E6000089520911101862F90E0820F911D8F3FC0 +:103E7000910520F4620F6093110108958FEF8093F4 +:103E80001101089520911001862F90E0820F911D5D +:103E90008F3F910520F4620F6093100108958FEF1A +:103EA000809310010895833011F128F4813049F096 +:103EB000823091F00895853081F120F18630C1F192 +:103EC000089580911501681720F4861B80931501D1 +:103ED000089510921501089580911401681720F437 +:103EE000861B809314010895109214010895809107 +:103EF0001301681720F4861B809313010895109214 +:103F00001301089580911201681720F4861B809395 +:103F100012010895109212010895809111016817FD +:103F200020F4861B809311010895109211010895C9 +:103F300080911001681720F4861B8093100108956A +:103F40001092100108958D3109F442C020F58E3091 +:103F500009F479C070F4873009F45EC020F486302B +:103F600009F442C033C08830D1F18B3009F4A7C0C6 +:103F70002DC0863109F4A3C038F4803109F46DC036 +:103F8000813109F47BC022C0893109F498C08B319A +:103F900009F44FC01BC0853309F479C048F4873257 +:103FA00009F475C008F478C0893209F470C00EC0F5 +:103FB000833438F48A3308F071C0883309F47FC041 +:103FC00005C0833409F463C08834C1F080E00895EB +:103FD0000E941B210E94440E0E944A0770C00E944A +:103FE0009C1C0E94AE1C6BC08091CC01817F8E7F97 +:103FF0008093CC0181E08093DC0108950E94A51399 +:104000002FEF83ED90E3215080409040E1F700C016 +:1040100000000E94E91A53C09091CC01892F817051 +:1040200090FF03C0917F9E7F26C091609093CC014A +:1040300046C09091CC0191FB882780F921E082272E +:1040400080FB91F913C09091CC0192FB882780F9F5 +:1040500021E0822780FB92F909C09091CC0193FB6B +:10406000882780F921E0822780FB93F99093CC0187 +:10407000882329F191609093CC0108950E94A513A3 +:1040800080910D0191E0892780930D0118C061E0B6 +:1040900070E080E090E00FC023EE01C027EC280F15 +:1040A00061E070E080E090E004C0660F771F881F39 +:1040B000991F2A95D2F70E94A1170E94A51381E0AB +:1040C000089580E0089580E00895CF93C82F8091EF +:1040D000DC01813079F018F08230D1F184C0A091F8 +:1040E0000E01B0910F018C91813169F0823209F09B +:1040F0007CC009C0A0910E01B0910F018C9181315B +:1041000011F0823249F48C2F0E94612081111DC070 +:104110008C2F0E94A31F1AC08C2F0E946320811134 +:1041200014C0C43179F048F4CB3079F0C03109F0D3 +:1041300060C082E08093DC0108C0C93219F0C83346 +:1041400021F057C01092DC0154C081E0817053C04F +:10415000C93289F118F5C43171F1A8F4C73009F0FA +:1041600046C08AE08093150194E19093140193E096 +:10417000909313018093120188E08093110188E2EB +:104180008093100134C0CE51C63088F5EC2FF0E09A +:10419000E65DFE4F80818093DB0129C0CE34E9F0DB +:1041A00020F4CB3421F56AE013C0C13579F0C23573 +:1041B000F1F461E00DC08091DB01882319F01092C9 +:1041C000DB0115C081E08093DC0115C061E006C011 +:1041D0008091DB010E94DD1E0AC06AE08091DB0154 +:1041E0000E94531F04C01092DC0180E004C081E0F3 +:1041F00002C080E0ABCFCF910895E1E8F0E080818C +:10420000886080838081816080838FB7F89493E099 +:104210009093890090ED909388008FBF0895EFE60A +:10422000F0E08081826080830895EFE6F0E0808195 +:104230008D7F80830895EFE6F0E0808192E089270A +:10424000808308951F920F920FB60F9211242F931F +:104250003F934F935F936F937F938F939F93AF930E +:10426000BF93EF93FF938091DD019091DE01019662 +:104270009093DE018093DD01811103C082E00E94F2 +:104280004A07E091DE01E695E695F0E0E657FB4F40 +:10429000E4918091DD018E1303C080E00E944A0703 +:1042A000FF91EF91BF91AF919F918F917F916F910E +:1042B0005F914F913F912F910F900FBE0F901F90E4 +:1042C000189504D06894B1118DC0089570D088F00D +:1042D0009F5790F0B92F9927B751A0F0D1F0660FF2 +:1042E000771F881F991F1AF0BA95C9F712C0B1300D +:1042F00081F077D0B1E0089574C0672F782F8827B8 +:10430000B85F39F0B93FCCF3869577956795B3954B +:10431000D9F73EF490958095709561957F4F8F4FBA +:104320009F4F0895E89409C097FB3EF490958095BF +:10433000709561957F4F8F4F9F4F9923A9F0F92F6B +:1043400096E9BB279395F695879577956795B795E9 +:10435000F111F8CFFAF4BB0F11F460FF1BC06F5FCF +:104360007F4F8F4F9F4F16C0882311F096E911C0E1 +:10437000772321F09EE8872F762F05C0662371F002 +:1043800096E8862F70E060E02AF09A95660F771F16 +:10439000881FDAF7880F9695879597F9089557FD46 +:1043A0009058440F551F59F05F3F71F04795880FA3 +:1043B00097FB991F61F09F3F79F08795089512163A +:1043C00013061406551FF2CF4695F1DF08C01616E6 +:1043D00017061806991FF1CF869571056105089497 +:1043E0000895E894BB2766277727CB0197F90895AE +:1043F0000BD078C069D028F06ED018F0952309F062 +:104400005AC05FC01124EECFCADFA0F3959FD1F34D +:10441000950F50E0551F629FF001729FBB27F00D72 +:10442000B11D639FAA27F00DB11DAA1F649F6627C7 +:10443000B00DA11D661F829F2227B00DA11D621F16 +:10444000739FB00DA11D621F839FA00D611D221FD0 +:10445000749F3327A00D611D231F849F600D211DB4 +:10446000822F762F6A2F11249F5750408AF0E1F057 +:1044700088234AF0EE0FFF1FBB1F661F771F881FA0 +:1044800091505040A9F79E3F510570F014C0AACF3B +:104490005F3FECF3983EDCF3869577956795B7958B +:1044A000F795E7959F5FC1F7FE2B880F911D9695B5 +:1044B000879597F9089597F99F6780E870E060E025 +:1044C00008959FEF80EC089500240A9416161706AD +:1044D00018060906089500240A94121613061406F5 +:1044E00005060895092E0394000C11F4882352F058 +:1044F000BB0F40F4BF2B11F460FF04C06F5F7F4F10 +:104500008F4F9F4F089597FB072E16F4009407D006 +:1045100077FD09D00E949D2207FC05D03EF49095BE +:1045200081959F4F0895709561957F4F0895EE0F87 +:10453000FF1F0590F491E02D0994AA1BBB1B51E1CC +:1045400007C0AA1FBB1FA617B70710F0A61BB70B03 +:10455000881F991F5A95A9F780959095BC01CD01A8 +:104560000895F999FECF92BD81BDF89A992780B53B +:104570000895A8E1B0E042E050E00C94D422262F48 +:10458000F999FECF1FBA92BD81BD20BD0FB6F89438 +:10459000FA9AF99A0FBE019608950E94BF22272F1A +:1045A0000C94C022DC01CB01FC01F999FECF06C0BE +:1045B000F2BDE1BDF89A319600B40D9241505040E1 +:0845C000B8F70895F894FFCF4D +:1045C80020024B07D807B50781074E070101BA013A +:1045D80028080A03140A3F4D36394B04FE03C80362 +:1045E8008F0322033B0354036D03010203040506F2 +:0445F80007080900A7 +:00000001FF diff --git a/keyboard/gh60_rev_c/Makefile b/keyboard/gh60_rev_c/Makefile new file mode 100644 index 00000000..09843dd8 --- /dev/null +++ b/keyboard/gh60_rev_c/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 = gh60 + + +# Directory common source filess exist +TOP_DIR = ../.. +TMK_DIR = ../../tmk_core + +# Directory keyboard dependent files exist +TARGET_DIR = . + +# # project specific files +SRC = gh60.c + +ifdef KEYMAP + SRC := keymaps/$(KEYMAP).c $(SRC) +else + SRC := keymaps/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 +KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key +# 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 - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +# 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/quantum.mk + diff --git a/keyboard/gh60_rev_c/README.md b/keyboard/gh60_rev_c/README.md new file mode 100644 index 00000000..bf209be8 --- /dev/null +++ b/keyboard/gh60_rev_c/README.md @@ -0,0 +1,60 @@ +## gh60 Rev C keyboard firmware + +![gh60 Rev C PCB](gh60revc.jpg) + + /* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) + */ + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D0 D1 D2 D3 D5 + */ + + GPIO pads + 0 F7 WASD LEDs + 1 F6 ESC LED + 2 F5 FN LED + 3 F4 POKER Arrow LEDs + + B2 Capslock LED + B0 not connected + +Functions to controls LED clusters + + gh60_caps_led_on() + gh60_poker_leds_on() + gh60_fn_led_on() + gh60_esc_led_on() + gh60_wasd_leds_on() + + gh60_caps_led_off() + gh60_poker_leds_off() + gh60_fn_led_off() + gh60_esc_led_off() + gh60_wasd_leds_off() + +====================== + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent README.md](/README.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboard/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default +To build with the default keymap, simply run `make`. + +### Other Keymaps +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 `.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files. + +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: +``` +$ make KEYMAP=[default|jack|] +``` +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboard/gh60_rev_c/config.h b/keyboard/gh60_rev_c/config.h new file mode 100644 index 00000000..2fd8f574 --- /dev/null +++ b/keyboard/gh60_rev_c/config.h @@ -0,0 +1,157 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#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 You +#define PRODUCT gh60 +#define DESCRIPTION A custom keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define COLS (int []){ F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 } +#define ROWS (int []){ D0, D1, D2, D3, D5 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* 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 + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * 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/gh60_rev_c/gh60.c b/keyboard/gh60_rev_c/gh60.c new file mode 100644 index 00000000..8e7219bf --- /dev/null +++ b/keyboard/gh60_rev_c/gh60.c @@ -0,0 +1,67 @@ +#include "gh60.h" +#include "led.h" + +__attribute__ ((weak)) +void matrix_init_user(void) { + // leave this function blank - it can be defined in a keymap file +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + // leave this function blank - it can be defined in a keymap file +} + +__attribute__ ((weak)) +void process_action_user(keyrecord_t *record) { + // leave this function blank - it can be defined in a keymap file +} + +__attribute__ ((weak)) +void led_set_user(uint8_t usb_led) { + // leave this function blank - it can be defined in a keymap file +} + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +void process_action_kb(keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + process_action_user(record); +} + +void led_set_kb(uint8_t usb_led) { + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + + if (usb_led & (1< + +/* GH60 LEDs + * GPIO pads + * 0 F7 WASD LEDs + * 1 F6 ESC LED + * 2 F5 FN LED + * 3 F4 POKER Arrow LEDs + * B2 Capslock LED + * B0 not connected + */ +inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); } +inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); } +inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); } +inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); } +inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); } + +inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); } +inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); } +inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); } +inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); } +inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } + +/* GH60 keymap definition macro + * K2C, K31 and K3C are extra keys for ISO + */ +#define KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ +) { \ + { 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_##K0C, KC_##K0D }, \ + { 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_##K1C, KC_##K1D }, \ + { 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_##K2C, KC_##K2D }, \ + { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \ + { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \ +} + +/* ANSI valiant. No extra keys for ISO */ +#define KEYMAP_ANSI( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K41, K42, K45, K4A, K4B, K4C, K4D \ +) KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \ + K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \ + K40, K41, K42, K45, NO, K4A, K4B, K4C, K4D \ +) + +#define KEYMAP_HHKB( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \ + K40, K41, K42, K45, K4A, K4B, K4C, K4D \ +) KEYMAP( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \ + K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \ +) + +void matrix_init_user(void); +void matrix_scan_user(void); +void process_action_user(keyrecord_t *record); +void led_set_user(uint8_t usb_led); + +#endif diff --git a/keyboard/gh60_rev_c/gh60revc.jpg b/keyboard/gh60_rev_c/gh60revc.jpg new file mode 100644 index 00000000..6c88ad24 Binary files /dev/null and b/keyboard/gh60_rev_c/gh60revc.jpg differ diff --git a/keyboard/gh60_rev_c/keymaps/default.c b/keyboard/gh60_rev_c/keymaps/default.c new file mode 100644 index 00000000..3622be41 --- /dev/null +++ b/keyboard/gh60_rev_c/keymaps/default.c @@ -0,0 +1,69 @@ +#include "gh60.h" +#include "action_layer.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* 0: qwerty */ + KEYMAP( + ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \ + CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \ + LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \ + LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, RCTL), + /* 1: fn */ + KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \ + TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \ + TRNS,LEFT,DOWN,RGHT,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), + /* 2: arrows */ + KEYMAP( + 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,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP, \ + TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,LEFT,DOWN,RGHT), +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay + [1] = ACTION_LAYER_TOGGLE(2), // toggle arrow overlay +}; + +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); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_scan_user(void) { + +//Layer LED indicators + uint32_t layer = layer_state; + + if (layer & (1<<1)) { + gh60_wasd_leds_on(); + gh60_fn_led_on(); + } else { + gh60_wasd_leds_off(); + gh60_fn_led_off(); + } + + if (layer & (1<<2)) { + gh60_poker_leds_on(); + gh60_esc_led_on(); + } else { + gh60_poker_leds_off(); + gh60_esc_led_off(); + } + +}; diff --git a/keyboard/gh60_rev_c/pinout.txt b/keyboard/gh60_rev_c/pinout.txt new file mode 100644 index 00000000..3787f938 --- /dev/null +++ b/keyboard/gh60_rev_c/pinout.txt @@ -0,0 +1,18 @@ + /* Column pin configuration + * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C) + */ + + /* Row pin configuration + * row: 0 1 2 3 4 + * pin: D0 D1 D2 D3 D5 + */ + + GPIO pads + 0 F7 WASD LEDs + 1 F6 ESC LED + 2 F5 FN LED + 3 F4 POKER Arrow LEDs + + B2 Capslock LED + B0 not connected \ No newline at end of file diff --git a/keyboard/hhkb/rn42/rn42_task.c b/keyboard/hhkb/rn42/rn42_task.c index 5107fef4..84001b3f 100644 --- a/keyboard/hhkb/rn42/rn42_task.c +++ b/keyboard/hhkb/rn42/rn42_task.c @@ -219,7 +219,7 @@ static void store_link(uint8_t *eeaddr) xprintf("%s(%d)\r\n", s, strlen(s)); if (strlen(s) == 12) { for (int i = 0; i < 12; i++) { - eeprom_write_byte(eeaddr+i, *(s+i)); + eeprom_update_byte(eeaddr+i, *(s+i)); dprintf("%c ", *(s+i)); } dprint("\r\n"); diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 03d26017..01d9e3ce 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -41,7 +41,6 @@ # Target file name (without extension). TARGET = planck - # Directory common source filess exist TOP_DIR = ../.. TMK_DIR = ../../tmk_core @@ -62,17 +61,28 @@ ifneq ("$(wildcard keymaps/$(KEYMAP).c)","") else ifneq ("$(wildcard keymaps/$(KEYMAP)/keymap.c)","") KEYMAP_FILE = keymaps/$(KEYMAP)/keymap.c +ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","") + include keymaps/$(KEYMAP)/makefile.mk +endif else $(error Keymap file does not exist) +endif endif -endif + else + ifneq ("$(wildcard keymaps/default.c)","") KEYMAP_FILE = keymaps/default.c else KEYMAP_FILE = keymaps/default/keymap.c endif + +ifneq ("$(wildcard keymaps/default/makefile.mk)","") + include keymaps/default/makefile.mk +endif + endif + SRC := $(KEYMAP_FILE) $(SRC) CONFIG_H = config.h @@ -94,7 +104,6 @@ MCU = atmega32u4 # software delays. F_CPU = 16000000 - # # LUFA specific # @@ -126,29 +135,45 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # 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 +# change to "no" to disable the options, or define them in the makefile.mk in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + # 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 - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -# MIDI_ENABLE = YES # MIDI controls -# AUDIO_ENABLE = YES # Audio output on port C6 -# UNICODE_ENABLE = YES # Unicode -# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID -# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. - -ifdef BACKLIGHT_ENABLE - SRC += backlight.c +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifdef KEYMAP + +ifeq ("$(wildcard keymaps/$(KEYMAP).c)","") +ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","") + include keymaps/$(KEYMAP)/makefile.mk +endif endif +else + +ifneq ("$(wildcard keymaps/default/makefile.mk)","") + include keymaps/default/makefile.mk +endif + +endif + +ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) + SRC := backlight.c $(SRC) +endif # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax @@ -158,4 +183,4 @@ VPATH += $(TARGET_DIR) VPATH += $(TOP_DIR) VPATH += $(TMK_DIR) -include $(TOP_DIR)/quantum/quantum.mk +include $(TOP_DIR)/quantum/quantum.mk \ No newline at end of file diff --git a/keyboard/planck/config.h b/keyboard/planck/config.h index d3719e0c..7d64f097 100644 --- a/keyboard/planck/config.h +++ b/keyboard/planck/config.h @@ -73,10 +73,10 @@ along with this program. If not, see . */ /* disable debug print */ -#define NO_DEBUG +//#define NO_DEBUG /* disable print */ -#define NO_PRINT +//#define NO_PRINT /* disable action features */ //#define NO_ACTION_LAYER diff --git a/keyboard/planck/keymaps/bone2planck.c b/keyboard/planck/keymaps/bone2planck.c new file mode 100644 index 00000000..a99e7719 --- /dev/null +++ b/keyboard/planck/keymaps/bone2planck.c @@ -0,0 +1,112 @@ + +#include "planck.h" +#ifdef BACKLIGHT_ENABLE +#include "backlight.h" +#endif +#include "..\..\quantum\keymap_extras\keymap_german.h" + +/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout. + It has Umlauts and "ß" as it is optimized for a mix of German & English. + My favourite features are the placement of the special characters often used for programming right on the home row + and the number & navigation block combo, so you never have to move your hands from their home position. + + Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone +*/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Bone2 + * ,-----------------------------------------------------------------------------------. + * | Q | J | D | U | A | X | P | H | L | M | W | ẞ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | M1 | C | T | I | E | O | B | N | R | S | G | M1 | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [0] = { + { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS }, + { MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, MO(1) }, + { DE_S, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, DE_S }, + { KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2), KC_SPC, KC_SPC, MO(2), MO(3), KC_ESC, KC_TAB, KC_ENT } + }, + + /* M1 Special Characters + * ,-----------------------------------------------------------------------------------. + * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | M1 | \ | / | { | } | * | ? | ( | ) | - | : | M1 | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | # | $ | | | ~ | € | + | % | " | ' | ; | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [1] = { + { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_NO }, + { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS }, + { KC_NO , DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + }, + + /* Navigation & Number Blocks + * ,-----------------------------------------------------------------------------------. + * | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [2] = { + { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO }, + { KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_NO }, + { DE_S, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, KC_0, DE_1, DE_2, DE_3, DE_SCLN, DE_S }, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + }, + + /* Function & Media Keys + * ,-----------------------------------------------------------------------------------. + * | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt | M3 | | Space | | M3 | Esc | Tab |Enter | + * `-----------------------------------------------------------------------------------' + */ + [3] = { + { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO }, + { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO }, + { KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_TRNS}, + { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + } +}; + +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); +#ifdef BACKLIGHT_ENABLE + backlight_step(); +#endif + } + else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboard/planck/keymaps/default/README.md b/keyboard/planck/keymaps/default/README.md index d2f43bbd..de9680b4 100644 --- a/keyboard/planck/keymaps/default/README.md +++ b/keyboard/planck/keymaps/default/README.md @@ -1,34 +1,2 @@ # The Default Planck Layout - 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} - } - }; \ No newline at end of file diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index a7541b0b..fa9c3915 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -2,19 +2,46 @@ // this is the style you want to emulate. #include "planck.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" +#include "action_layer.h" +#ifdef AUDIO_ENABLE + #include "audio.h" #endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; // 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 +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MUSIC 5 +#define _PLOVER 6 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) +#define PLOVER M(12) +#define EXT_PLV M(13) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -29,11 +56,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_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} + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Colemak @@ -47,11 +74,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_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} + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak @@ -65,59 +92,174 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_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} + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, /* Raise * ,-----------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Next | Vol- | Vol+ | Play | + * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' */ -[_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} + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -/* Lower +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Plover layer (http://opensteno.org) * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * | # | # | # | # | # | # | # | # | # | # | # | # | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * | | S | T | P | H | * | * | F | P | L | T | D | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter | + * | | S | K | W | R | * | * | R | B | G | S | Z | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Next | Vol- | Vol+ | Play | + * | Exit | | | A | O | | E | U | | | | * `-----------------------------------------------------------------------------------' */ -[_LW] = { - {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} + +[_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } + + }; const uint16_t PROGMEM fn_actions[] = { }; +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {440.0*pow(2.0,(31)/12.0), 12}, + {440.0*pow(2.0,(28)/12.0), 8}, + {440.0*pow(2.0,(19)/12.0), 8}, + {440.0*pow(2.0,(24)/12.0), 8}, + {440.0*pow(2.0,(28)/12.0), 20} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_plover[][2] = SONG(PLOVER_SOUND); +float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + 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: + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: if (record->event.pressed) { register_code(KC_RSFT); #ifdef BACKLIGHT_ENABLE @@ -127,6 +269,111 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_RSFT); } break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 12: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover, false, 0); + #endif + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + layer_off(_MUSIC); + stop_all_notes(); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + } + break; + case 13: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); + #endif + layer_off(_PLOVER); + } + break; + } return MACRO_NONE; }; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // stops the tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} +#endif diff --git a/keyboard/planck/keymaps/default/makefile.mk b/keyboard/planck/keymaps/default/makefile.mk new file mode 100644 index 00000000..99fbfbd0 --- /dev/null +++ b/keyboard/planck/keymaps/default/makefile.mk @@ -0,0 +1,2 @@ +AUDIO_ENABLE = yes +NKRO_ENABLE = yes \ No newline at end of file diff --git a/keyboard/planck/keymaps/pvc/config.h b/keyboard/planck/keymaps/pvc/config.h new file mode 100644 index 00000000..7d64f097 --- /dev/null +++ b/keyboard/planck/keymaps/pvc/config.h @@ -0,0 +1,88 @@ +/* +Copyright 2012 Jun Wako + +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 . +*/ + +#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)) \ +) + +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * 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/keymaps/pvc/keymap.c b/keyboard/planck/keymaps/pvc/keymap.c new file mode 100644 index 00000000..27850b21 --- /dev/null +++ b/keyboard/planck/keymaps/pvc/keymap.c @@ -0,0 +1,536 @@ +#include "planck.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "led.h" + +#ifdef AUDIO_ENABLE + #include "audio.h" + #include "song_list.h" +#endif + +#define LAYER_QWERTY 0 +#define LAYER_COLEMAK 1 +#define LAYER_DVORAK 2 +#define LAYER_LOWER 3 +#define LAYER_RAISE 4 +#define LAYER_FUNCTION 5 +#define LAYER_MOUSE 6 +#define LAYER_MUSIC 7 +#define LAYER_ADJUST 8 + +#define MACRO_QWERTY 0 +#define MACRO_COLEMAK 1 +#define MACRO_DVORAK 2 +#define MACRO_LOWER 3 +#define MACRO_RAISE 4 +#define MACRO_FUNCTION 5 +#define MACRO_MOUSE 6 +#define MACRO_TIMBRE_1 7 +#define MACRO_TIMBRE_2 8 +#define MACRO_TIMBRE_3 9 +#define MACRO_TIMBRE_4 10 +#define MACRO_TEMPO_U 11 +#define MACRO_TEMPO_D 12 +#define MACRO_TONE_DEFAULT 13 +#define MACRO_MUSIC_ON 14 +#define MACRO_MUSIC_OFF 15 +#define MACRO_AUDIO_ON 16 +#define MACRO_AUDIO_OFF 17 +#define MACRO_INC_VOICE 18 +#define MACRO_DEC_VOICE 19 + +#define M_QWRTY M(MACRO_QWERTY) +#define M_COLMK M(MACRO_COLEMAK) +#define M_DVORK M(MACRO_DVORAK) +#define M_LOWER M(MACRO_LOWER) +#define M_RAISE M(MACRO_RAISE) +#define M_FUNCT M(MACRO_FUNCTION) +#define M_MOUSE M(MACRO_MOUSE) +#define TIMBR_1 M(MACRO_TIMBRE_1) +#define TIMBR_2 M(MACRO_TIMBRE_2) +#define TIMBR_3 M(MACRO_TIMBRE_3) +#define TIMBR_4 M(MACRO_TIMBRE_4) +#define TMPO_UP M(MACRO_TEMPO_U) +#define TMPO_DN M(MACRO_TEMPO_D) +#define TMPO_DF M(MACRO_TONE_DEFAULT) + + +#define MUS_ON M(MACRO_MUSIC_ON) +#define MUS_OFF M(MACRO_MUSIC_OFF) +#define AUD_OFF M(MACRO_AUDIO_OFF) +#define AUD_ON M(MACRO_AUDIO_ON) +#define VC_UP M(MACRO_INC_VOICE) +#define VC_DOWN M(MACRO_DEC_VOICE) + + +#define SC_UNDO LCTL(KC_Z) +#define SC_REDO LCTL(KC_Y) +#define SC_CUT LCTL(KC_X) +#define SC_COPY LCTL(KC_C) +#define SC_PSTE LCTL(KC_V) +#define SC_SELA LCTL(KC_A) +#define SC_SAVE LCTL(KC_S) +#define SC_OPEN LCTL(KC_O) +#define SC_ACLS LALT(KC_F4) +#define SC_CCLS LCTL(KC_F4) + + +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define ________________ _______, _______ +#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * .-----------------------------------------------------------------------------------------------------------. + * | TAB | Q | W | E | R | T | Y | U | I | O | P | BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | ENTER | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | + * '-----------------------------------------------------------------------------------------------------------' + */ + + [LAYER_QWERTY] = { /* 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_BSPC, 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_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, + }, + +/* COLEMAK + * .-----------------------------------------------------------------------------------------------------------. + * | TAB | Q | W | F | P | G | J | L | U | Y | ; | ESC | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | ENTER | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | + * '-----------------------------------------------------------------------------------------------------------' + */ + + [LAYER_COLEMAK] = { /* COLEMAK */ + { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC }, + { 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_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, + }, + +/* DVORAK + * .-----------------------------------------------------------------------------------------------------------. + * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | ESC | A | O | E | U | I | D | H | T | N | S | ' | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | ENTER | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT | + * '-----------------------------------------------------------------------------------------------------------' + */ + + [LAYER_DVORAK] = { /* 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 }, + { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_RAISE, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT }, + }, + +/* Raise + * .-----------------------------------------------------------------------------------------------------------. + * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | [ | ] | \ | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END | + * '-----------------------------------------------------------------------------------------------------------' + */ + + [LAYER_RAISE] = { /* RAISED */ + { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, + { XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS }, + { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END }, + }, + + +/* LOWERED + * .-----------------------------------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | INS | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | XXXXXX | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LSHIFT | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ENTER | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | BACKSP | BACKSP | LOWER | PG UP | PG DN | HOME | END | + * '-----------------------------------------------------------------------------------------------------------' + */ + + [LAYER_LOWER] = { /* LOWERED */ + { KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_INS }, + { XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS }, + { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END }, + }, + +/* FUNCTION + * .-----------------------------------------------------------------------------------------------------------. + * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | PAUSE | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | CAP LK | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | PRINT | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + * | LCTRL | LWIN | FN | LALT | RAISE | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV | + * '-----------------------------------------------------------------------------------------------------------' + */ + [LAYER_FUNCTION] = { /* FUNCTION */ + { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PAUS }, + { KC_CAPS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_PSCR }, + { KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE }, + { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT }, + }, + +#ifdef MOUSEKEY_ENABLE + + [LAYER_MOUSE] = { /* MOUSE */ + { KC_ESC, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { _______, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_D }, + { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_MS_U, KC_MS_D, KC_MS_L, KC_MS_R }, + }, + +#endif + + [LAYER_MUSIC] = { /* MUSIC */ + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_RAISE, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, + }, + + [LAYER_ADJUST] = { /* ADJUST */ + { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, MUS_ON, MUS_OFF, AUD_ON, AUD_OFF }, + { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, RESET, _______, M_MOUSE, _______, _______, _______, _______ }, + { _______, _______, _______, _______, _______, _______, _______, _______, VC_UP, VC_DOWN, _______, _______ }, + }, + + +/* + [LAYER_EMPTY] = { + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, }, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, }, + { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, }, + }, +*/ + +}; + +#ifdef AUDIO_ENABLE + +float tone_my_startup[][2] = SONG(ODE_TO_JOY); +float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY); + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); +float tone_music_on[][2] = SONG(DOE_A_DEER); +float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); +float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND); +float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND); +float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND); +float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND); +float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +#endif /* AUDIO_ENABLE */ + +void persistant_default_layer_set(uint16_t default_layer) +{ + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +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 MACRO_QWERTY: + if (record->event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + persistant_default_layer_set(1UL<event.pressed) + { + layer_on(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + else + { + layer_off(LAYER_LOWER); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + break; + + case MACRO_RAISE: + if (record->event.pressed) + { + layer_on(LAYER_RAISE); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + else + { + layer_off(LAYER_RAISE); + update_tri_layer(LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST); + } + break; + + case MACRO_FUNCTION: + if (record->event.pressed) + { + layer_on(LAYER_FUNCTION); + } + else + { + layer_off(LAYER_FUNCTION); + } + break; + +#ifdef MOUSEKEY_ENABLE + + case MACRO_MOUSE: + if (record->event.pressed) + { + layer_invert(LAYER_MOUSE); + } + break; + +#endif /* MOUSEKEY_ENABLE */ + +#ifdef AUDIO_ENABLE + + case MACRO_TIMBRE_1: + if (record->event.pressed) set_timbre(TIMBRE_12); + break; + + case MACRO_TIMBRE_2: + if (record->event.pressed) set_timbre(TIMBRE_25); + break; + + case MACRO_TIMBRE_3: + if (record->event.pressed) set_timbre(TIMBRE_50); + break; + + case MACRO_TIMBRE_4: + if (record->event.pressed) set_timbre(TIMBRE_75); + break; + + case MACRO_TEMPO_U: + if (record->event.pressed) increase_tempo(10); + break; + + case MACRO_TEMPO_D: + if (record->event.pressed) decrease_tempo(10); + break; + + case MACRO_TONE_DEFAULT: + if (record->event.pressed) + { + set_timbre(TIMBRE_DEFAULT); + set_tempo(TEMPO_DEFAULT); + } + break; + + case MACRO_AUDIO_OFF: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + + case MACRO_AUDIO_ON: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); + #endif + } + break; + + case MACRO_MUSIC_ON: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); + layer_on(LAYER_MUSIC); + #endif + } + break; + + case MACRO_MUSIC_OFF: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + layer_off(LAYER_MUSIC); + stop_all_notes(); + #endif + } + break; + + case MACRO_INC_VOICE: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, STACCATO); + #endif + } + break; + + case MACRO_DEC_VOICE: + if (record->event.pressed) + { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, STACCATO); + #endif + } + break; + +#endif /* AUDIO_ENABLE */ + + default: + break; + + } + return MACRO_NONE; +}; + + +#ifdef AUDIO_ENABLE + + +void process_action_user(keyrecord_t *record) +{ + + uint8_t starting_note = 0x0C; + int offset = 7; + + if (IS_LAYER_ON(LAYER_MUSIC)) + { + if (record->event.pressed) + { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } + else + { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } +} + + +void matrix_init_user(void) +{ + set_voice(default_voice); + play_startup_tone(); + println("Matrix Init"); +} + +void led_set_user(uint8_t usb_led) +{ + static uint8_t old_usb_led = 0; + + _delay_ms(10); // gets rid of tick + + if ((usb_led & (1<. */ /* disable debug print */ -#define NO_DEBUG +// #define NO_DEBUG /* disable print */ -#define NO_PRINT +// #define NO_PRINT /* disable action features */ //#define NO_ACTION_LAYER diff --git a/keyboard/preonic/keymaps/default/README.md b/keyboard/preonic/keymaps/default/README.md index d2f43bbd..e911968d 100644 --- a/keyboard/preonic/keymaps/default/README.md +++ b/keyboard/preonic/keymaps/default/README.md @@ -1,34 +1 @@ -# The Default Planck Layout - - 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} - } - }; \ No newline at end of file +# The default Preonic layout - largely based on the Planck's \ No newline at end of file diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c index 78467078..95b97187 100644 --- a/keyboard/preonic/keymaps/default/keymap.c +++ b/keyboard/preonic/keymaps/default/keymap.c @@ -1,76 +1,253 @@ -// 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 "preonic.h" -#ifdef BACKLIGHT_ENABLE - #include "backlight.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" #endif // 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 +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _MUSIC 5 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = { /* Qwerty */ + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { {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_TAB, 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_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, {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} + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, -[_CM] = { /* Colemak */ + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { {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_TAB, 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_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL}, {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} + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, -[_DV] = { /* Dvorak */ + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { {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_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL}, {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} + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, 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_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} + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, -[_LW] = { /* LOWER */ + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_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_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} + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } + + }; const uint16_t PROGMEM fn_actions[] = { }; +#ifdef AUDIO_ENABLE float start_up[][2] = { - {440.0*pow(2.0,(67)/12.0), 600}, - {440.0*pow(2.0,(64)/12.0), 400}, - {440.0*pow(2.0,(55)/12.0), 400}, - {440.0*pow(2.0,(60)/12.0), 400}, - {440.0*pow(2.0,(64)/12.0), 1000}, + {440.0*pow(2.0,(14)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8}, + {440.0*pow(2.0,(18)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8} }; +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + 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: + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: if (record->event.pressed) { register_code(KC_RSFT); #ifdef BACKLIGHT_ENABLE @@ -80,13 +257,86 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_RSFT); } break; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; } return MACRO_NONE; }; + void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif +} + #ifdef AUDIO_ENABLE - init_notes(); - play_notes(&start_up, 5, false); -#endif + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + } + +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +#endif \ No newline at end of file diff --git a/keyboard/preonic/keymaps/default/makefile.mk b/keyboard/preonic/keymaps/default/makefile.mk new file mode 100644 index 00000000..628167ff --- /dev/null +++ b/keyboard/preonic/keymaps/default/makefile.mk @@ -0,0 +1 @@ +AUDIO_ENABLE = yes \ No newline at end of file diff --git a/keyboard/preonic/preonic_music.hex b/keyboard/preonic/preonic_music.hex deleted file mode 100644 index 603693bf..00000000 --- a/keyboard/preonic/preonic_music.hex +++ /dev/null @@ -1,1713 +0,0 @@ -:100000000C9410030C9454030C9454030C94540358 -:100010000C9454030C9454030C9454030C94540304 -:100020000C9454030C9454030C9410170C94E21782 -:100030000C94BD290C9454030C9454030C94540355 -:100040000C9454030C9454030C9454030C945403D4 -:100050000C9454030C942A2A0C9454030C945403C7 -:100060000C9454030C9454030C9454030C945403B4 -:100070000C9454030C9454030C9454030C945403A4 -:100080000C94440E0C9454030C9454030C94540399 -:100090000C9454030C9454030C9454030C94540384 -:1000A0000C9454030C9454030C9454030763423689 -:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9 -:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD -:1000D0000000803F08000000BE922449123EABAAF7 -:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52 -:1000F000AA3E00000000BF000000803F000000009A -:1001000000084178D3BB4387D1133D190E3CC3BDD2 -:100110004282AD2B3E68EC8276BED98FE1A93E4C7F -:1001200080EFFFBE01C4FF7F3F00000000003500EC -:100130001E001F00200021002200230024002500B3 -:10014000260027002A002B0014001A0008001500C2 -:1001500017001C0018000C00120013002A002900D0 -:1001600004001600070009000A000B000D000E0035 -:100170000F0033003400E1001D001B0006001900D1 -:10018000050011001000360037003800280000304C -:10019000E000E200E30003522C002C000452500067 -:1001A000510052004F0035001E001F0020002100AA -:1001B0002200230024002500260027002A002B000F -:1001C00014001A00090013000A000D000F001800A7 -:1001D0001C0033002A002900040015001600170037 -:1001E00007000B00110008000C0012003400E100B1 -:1001F0001D001B000600190005000E00100036004F -:100200003700380028000030E000E200E30003522D -:100210002C002C0004525000510052004F003500B9 -:100220001E001F00200021002200230024002500C2 -:10023000260027002A002B00340036003700130068 -:100240001C0009000A00060015000F002A00290002 -:1002500004001200080018000C0007000B00170033 -:10026000110016003800E100330014000D000E00EC -:100270001B00050010001A0019001D0028000030A6 -:10028000E000E200E30003522C002C000452500076 -:10029000510052004F0035001E001F0020002100B9 -:1002A0002200230024002500260027002A00350212 -:1002B0001E021F0220022102220223022402250222 -:1002C000260227022A0001003A003B003C003D00C4 -:1002D0003E003F002D022E022F02300231020100AB -:1002E00040004100420043004400450000530153D8 -:1002F0000253005001000100010001000100010053 -:10030000010001000100AB00AA00A900AE00350009 -:100310001E001F00200021002200230024002500D1 -:10032000260027002A0035001E001F0020002100A3 -:100330002200230024002500260027002A000100B7 -:100340003A003B003C003D003E003F002D002E00E7 -:100350002F00300031000100400041004200430006 -:1003600044004500005301530253005001000100B6 -:100370000100010001000100010001000100AB00CB -:10038000AA00A900AE00006000600060006000608C -:10039000006000600060006000600060006000605D -:1003A000006000600060006000600060006000604D -:1003B000006000600060006000600060006000603D -:1003C000006000600060006000600060006000602D -:1003D000006000600060006000600060006000601D -:1003E00000600060006000300100010001000100B9 -:1003F00001000100010000600060006000602A034D -:1004000054006800650020005000720065006F0015 -:100410006E006900630020004B00650079006200F7 -:100420006F0061007200640000002C034F00720036 -:10043000740068006F006C0069006E006500610068 -:10044000720020004B006500790062006F006100BF -:100450007200640073000000040309040902D00064 -:10046000060100A0FA0904000001030101000921AE -:1004700011010001223F000705810308000A090459 -:1004800001000103010200092111010001224D00B8 -:100490000705820308000A090402000103000000A6 -:1004A0000921110100012236000705830308000A13 -:1004B00009040300020300000009211101000122C8 -:1004C0002000070584032000010705040320000124 -:1004D00009040400000101000009240100010900D1 -:1004E00001050904050002010300000724010001C1 -:1004F0004100062402010100062402020200092430 -:1005000003010301020100092403020401010100A7 -:100510000905060240000500000525010101090545 -:1005200085024000050000052501010312011001AC -:1005300000000008EDFE61600100010200010631CB -:10054000FF0974A1010975150025FF952075088123 -:10055000020976150025FF952075089102C0050156 -:100560000980A101850216010026B7001A01002AA0 -:10057000B700751095018100C0050C0901A1018526 -:1005800003160100269C021A01002A9C0275109590 -:10059000018100C005010902A1010901A1000509AD -:1005A000190129051500250195057501810295019F -:1005B000750381010501093009311581257F9502F7 -:1005C0007508810609381581257F95017508810612 -:1005D000050C0A38021581257F950175088106C032 -:1005E000C005010906A101050719E029E715002545 -:1005F00001950875018102950175088101050819A9 -:100600000129059505750191029501750391010573 -:1006100007190029FF150025FF950675088100C000 -:1006200011241FBECFEFDAE0DEBFCDBF04B603FE5C -:1006300024C08091050490910604A0910704B09114 -:1006400008048730904BA740B04BB9F410920504D2 -:1006500010920604109207041092080414BE84B786 -:10066000877F84BF88E10FB6F89480936000109272 -:1006700060000FBEE0E0F8E3099512E0A0E0B1E011 -:10068000E6ECF9E602C005900D92A832B107D9F761 -:1006900014E0A8E2B2E001C01D92A530B107E1F775 -:1006A0000E94C8130C94E1340C94000061111DC029 -:1006B000FC018281882351F085EE0E94901E0E94E9 -:1006C000BC3080E290E0A0E0B0E007C085EE0E9480 -:1006D000581F81E090E0A0E0B0E08093E1029093A9 -:1006E000E202A093E302B093E40280E090E0089578 -:1006F0000E94370E40E050E069E070E080E091E059 -:100700000C94880F08950E948B036E9A769A0C942D -:1007100078030C948203279A2F988FEF9FEF909382 -:100720008700809386008AE08093800089E180932F -:1007300081000C94653081110BC080918000877F0F -:100740008093800010928D0010928C002F98089555 -:100750002F98833041F480918000886080938000DE -:100760008FEF9FEF12C0909180009860909380006F -:1007700023E030E0281B3109220F331F8FEF9FEF5A -:1007800002C0969587952A95E2F790938D00809305 -:100790008C0008958B3B910568F4883A910530F5FB -:1007A000853A9105C0F48430910598F4019709F0D9 -:1007B0006FC071C0803E910508F46AC0883E910503 -:1007C00040F09C01205F31092031310508F060C004 -:1007D0005CC09C01A1C0853A910509F45FC0863ACE -:1007E000910509F45EC023E830E496C0883A91058B -:1007F00009F45AC0893A910509F459C08A3A910519 -:1008000009F458C08B3A910509F457C08C3A910508 -:1008100009F456C08D3A910509F455C0803B910505 -:1008200009F454C08E3A910509F453C08F3A9105EA -:1008300009F452C0813B910509F451C0823B9105F6 -:1008400009F450C0833B910509F44FC0843B9105E6 -:1008500009F44EC0853B910509F44DC0863B9105D6 -:1008600009F44CC0873B910509F44BC0883B9105C6 -:1008700009F44AC0893B910509F449C08A3B9105B6 -:1008800009F048C02AE236E447C09C01306544C004 -:1008900020E030E041C021E030E03EC021E830E41B -:1008A0003BC022E830E438C022EE34E435C029EE03 -:1008B00034E432C02AEE34E42FC025EB34E42CC0FB -:1008C00026EB34E429C027EB34E426C02CEC34E4D6 -:1008D00023C02DEC34E420C023E835E41DC02AE811 -:1008E00035E41AC022E935E417C024E935E414C020 -:1008F00021E236E411C023E236E40EC024E236E4FD -:100900000BC025E236E408C026E236E405C027E243 -:1009100036E402C020E034E4C90108959CE0799FE8 -:10092000F00111249CE3899FE00DF11D1124E60FD5 -:10093000F11DEE0FFF1FE25DFE4F25913491C901BD -:100940000895880F991F82559040FC01259134919C -:10095000C9010895880F991F825D9E4FFC01259162 -:100960003491C90108950E948E049C019A958115C5 -:100970009F4110F4C9010895C90190528115904119 -:1009800028F4C9019F700E94AA040895C9019053D8 -:100990008115904120F4C9019927906C0895C901EF -:1009A0009054409728F4C9018F709927946D089549 -:1009B000203180E4380719F480E091ED0895213169 -:1009C00090E4390719F480E090ED0895223140E475 -:1009D000340719F480E092ED0895233180E438075C -:1009E00019F480E093ED0895211590E53907A1F4FD -:1009F0000E948B2340E065E088E491E00E94880F2C -:100A00002FEF44E38CE0215040408040E1F700C0EC -:100A100000000E944F2A1EC1213090E5390731F4B1 -:100A20008091F10281608093F10214C1C901905557 -:100A30008115904108F062C0432F55274F7055270C -:100A400041305105F9F4C90174E0880F991F7A9576 -:100A5000E1F788279370B901E3E0660F771FEA9505 -:100A6000E1F760767727862B972B9C6823703327D6 -:100A700002C0440F551F2A95E2F74F715527842B6A -:100A8000952B08954230510529F4922F8827816FC4 -:100A9000906A089543305105B9F4C90153E0880FB5 -:100AA000991F5A95E1F7807E97702370332741E0B4 -:100AB00050E002C0440F551F2A95E2F74F715527A9 -:100AC000842B952B9C6808954430510589F5C90104 -:100AD00043E0880F991F4A95E1F7807E9770237055 -:100AE000332741E050E002C0440F551F2A95E2F73A -:100AF0004F715527842B952B9A680895C9019056FC -:100B00008115904118F4C901906F0895C90190575B -:100B10008115904120F4C9019F7090620895C90128 -:100B200090588115904120F4C9019F70906A0895F2 -:100B3000203E3105E0F4203C310568F521333105D4 -:100B400009F475C048F42932310509F46BC02A3222 -:100B5000310509F07BC075C02933310501F1223818 -:100B60003105E9F02533310509F070C051C0233E4D -:100B70003105B1F140F4203E3105D1F0223E31057E -:100B800009F064C01CC0263E310579F1273E3105CD -:100B900009F05CC038C0C9010E94A1040895809189 -:100BA000020380FD02C081FF51C080EE90E04FC083 -:100BB0008091020380FFF9CF89E390E048C08091E3 -:100BC000020382FF0AC08091020384FF03C080E019 -:100BD00090E03DC083EE90E03AC082EE90E037C0F6 -:100BE0008091020382FFEFCFF8CF8091020383FF51 -:100BF00007C08091020384FDEACF87EE90E027C012 -:100C000086EE90E024C08091020383FFF2CFF8CFFC -:100C10008091020385FF03C089E290E018C085E35C -:100C200090E015C08091020385FDF9CFF5CF80914A -:100C3000020386FF03C08AE290E009C081E390E0EE -:100C400006C08091020386FDF9CFF5CFC9010E944D -:100C5000CA030895089508950C942B065F926F922D -:100C60007F928F929F92AF92BF92CF92DF92EF923C -:100C7000FF920F931F93CF93DF93CDB7DEB72A97E1 -:100C80000FB6F894DEBF0FBECDBF9E012F5F3F4F62 -:100C90004E018BE0880E911C60E070E000E010E0F7 -:100CA000E12CF12CC12CD12CA12CB12C8AE0782E76 -:100CB000622E532E41E050E0E3E9F1E0A62DB52D80 -:100CC000872D01900D928A95E1F7F901819191911B -:100CD0009F01FC01E07FFF27E032F10559F48F709E -:100CE0009927FA0102C0EE0FFF1F8A95E2F7AE2A9C -:100CF000BF2A37C0E033F10559F48F709927FA0104 -:100D000002C0EE0FFF1F8A95E2F7CE2ADF2A29C024 -:100D1000E034F10559F48F709927FA0102C0EE0F03 -:100D2000FF1F8A95E2F7EE2AFF2A1BC0E035F10586 -:100D300059F48F709927FA0102C0EE0FFF1F8A95B0 -:100D4000E2F70E2B1F2B0DC0E036F10551F48F702A -:100D50009927FA0102C0EE0FFF1F8A95E2F76E2B6A -:100D60007F2B2815390509F0A7CF94B18A2D8095DE -:100D7000892384B985B18A2985B997B18C2D80954D -:100D8000892387B988B18C2988B99AB18E2D80952D -:100D900089238AB98BB18E298BB99DB1802F80951B -:100DA00089238DB98EB1802B8EB990B3862F809513 -:100DB000892380BB81B3862B81BB2A960FB6F8941A -:100DC000DEBF0FBECDBFDF91CF911F910F91FF907E -:100DD000EF90DF90CF90BF90AF909F908F907F90DB -:100DE0006F905F9008955F926F927F928F929F9223 -:100DF000AF92BF92CF92DF92EF92FF920F931F9329 -:100E0000CF93DF93CDB7DEB768970FB6F894DEBF08 -:100E10000FBECDBF85B7806885BF85B7806885BFA9 -:100E20000E942E069E012F5F3F4F4E0189E1880EE2 -:100E3000911C60E070E000E010E0E12CF12CC12C8E -:100E4000D12CA12CB12C98E1792E622E532E41E0A9 -:100E500050E0EDE9F1E0A62DB52D872D01900D9222 -:100E60008A95E1F7F901819191919F01FC01E07F61 -:100E7000FF27E032F10559F48F709927FA0102C07B -:100E8000EE0FFF1F8A95E2F7AE2ABF2A37C0E03384 -:100E9000F10559F48F709927FA0102C0EE0FFF1F78 -:100EA0008A95E2F7CE2ADF2A29C0E034F10559F409 -:100EB0008F709927FA0102C0EE0FFF1F8A95E2F7A3 -:100EC000EE2AFF2A1BC0E035F10559F48F709927EF -:100ED000FA0102C0EE0FFF1F8A95E2F70E2B1F2BBF -:100EE0000DC0E036F10551F48F709927FA0102C068 -:100EF000EE0FFF1F8A95E2F76E2B7F2B2815390521 -:100F000009F0A7CF94B18A2D8095892384B985B142 -:100F10008A2985B997B18C2D8095892387B988B1A5 -:100F20008C2988B99AB18E2D809589238AB98BB185 -:100F30008E298BB99DB1802F809589238DB98EB173 -:100F4000802B8EB990B3862F8095892380BB81B387 -:100F5000862B81BB10922902109228021092330234 -:100F60001092320210922B0210922A021092350235 -:100F70001092340210922D0210922C02109237021D -:100F80001092360210922F0210922E021092390205 -:100F900010923802109231021092300210923B02ED -:100FA00010923A0268960FB6F894DEBF0FBECDBF1E -:100FB000DF91CF911F910F91FF90EF90DF90CF9035 -:100FC000BF90AF909F908F907F906F905F900C94A8 -:100FD00083035F926F927F928F929F92AF92BF92A4 -:100FE000CF92DF92EF92FF920F931F93CF93DF93F5 -:100FF000CDB7DEB7A2970FB6F894DEBF0FBECDBF58 -:101000007E0149E1E40EF11C22E3C22E22E0D22E41 -:101010005E0153E2A50EB11C3AE0532E470101E0F8 -:1010200010E048E1642E55E0752EE3E9F1E0D401CB -:10103000852D01900D928A95E1F7F70181919191AB -:101040007F019C01207F33272032310589F424B1B0 -:101050008F709927A80102C0440F551F8A95E2F7A7 -:10106000CA01242B24B995B18095892385B94FC035 -:101070002033310589F427B18F709927F80102C018 -:10108000EE0FFF1F8A95E2F7CF012E2B27B998B1FB -:101090008095892388B93BC02034310589F42AB171 -:1010A0008F709927A80102C0440F551F8A95E2F757 -:1010B000CA01242B2AB99BB1809589238BB927C0FB -:1010C0002035310589F42DB18F709927F80102C0C0 -:1010D000EE0FFF1F8A95E2F7CF012E2B2DB99EB19F -:1010E000809589238EB913C02036310581F420B351 -:1010F0008F709927A80102C0440F551F8A95E2F707 -:10110000CA01242B20BB91B38095892381BB50EA6F -:101110005A95F1F7BE016F5F7F4F80E090E020E0CD -:1011200030E0EDE9F1E0DE011196462D01900D92DF -:101130004A95E1F7FB0141915191BF01FA01E07F2E -:10114000FF27E032F10511F4E3B113C0E033F105FC -:1011500011F4E6B10EC0E034F10511F4E9B109C0B3 -:10116000E035F10511F4ECB104C0E036F105B9F455 -:10117000EFB1F0E04F70552702C0F595E7954A951D -:10118000E2F7E0FD08C0A801022E02C0440F551F7F -:101190000A94E2F702C040E050E0842B952B2F5FC9 -:1011A0003F4F2C30310509F0BCCFF6012081318151 -:1011B0002817390721F091838083709270010E9473 -:1011C0002E06F2E0CF0ED11CEA14FB0409F02DCF5D -:1011D000809170018823A1F1815080937001882350 -:1011E00039F08FE99FE00197F1F700C0000028C0B7 -:1011F00080913202909133029093290280932802C9 -:10120000809134029091350290932B0280932A02B0 -:10121000809136029091370290932D0280932C0298 -:10122000809138029091390290932F0280932E0280 -:1012300080913A0290913B02909331028093300268 -:101240000E94890381E0A2960FB6F894DEBF0FBE1C -:10125000CDBFDF91CF911F910F91FF90EF90DF9065 -:10126000CF90BF90AF909F908F907F906F905F9046 -:101270000895E82FF0E0EE0FFF1FE85DFD4F80813D -:10128000918108950895CF92DF92EF92FF920F938C -:101290001F93CF93DF93CDB7DEB7CC5BD2400FB6B1 -:1012A000F894DEBF0FBECDBF8C01862F642F88233C -:1012B00079F0F80192812FE7482F992329F084E0F3 -:1012C00093E00E94EC1904C084E093E00E94FC19B2 -:1012D000F80180818B3091F59181943009F0A8C29A -:1012E0009281809173019923B1F08F5F8093730194 -:1012F00096E4E5EBF1E0DE01A958BD4F01900D92B7 -:101300009A95E1F7E0917101F0917201EE0FFF1FE4 -:1013100027E732E036C096E4E5EBF1E0DE01AF5CB2 -:10132000BD4F01900D929A95E1F7E0917101F09116 -:101330007201EE0FFF1F21E332E093C08A3009F003 -:10134000CBC0F8019181943009F072C292818091F2 -:101350007301992309F473C081508093730196E45B -:10136000E5EBF1E0DE01A551BE4F01900D929A959B -:10137000E1F7E0917101F0917201EE0FFF1F2BEE8A -:1013800031E02C0F3D1FE20FF31F60817181680F68 -:10139000711D882777FD8095982F0E94003220E0EC -:1013A00030E040E451E40E94653120E030E040E864 -:1013B00050E40E94FD309B01AC0160E070E080E0F1 -:1013C00090E40E94173321E230ED42E053E40E94A2 -:1013D000B4324CE050E00E94E30F20E04BE760E0C5 -:1013E00084E093E00E94DC1920E04BE761E084E0B8 -:1013F00093E00E94DC1920E04BE762E084E093E098 -:101400000E94DC1920E04BE763E084E093E00E9457 -:10141000DC1920E04BE764E084E093E0C454DD4F46 -:101420000FB6F894DEBF0FBECDBFDF91CF911F91F5 -:101430000F91FF90EF90DF90CF900C94DC1996E421 -:10144000E5EBF1E0DE01AB55BE4F01900D929A95B0 -:10145000E1F7E0917101F0917201EE0FFF1F25EAB3 -:1014600031E02C0F3D1FE20FF31F60817181680F87 -:10147000711D882777FD8095982F0E94003220E00B -:1014800030E040E451E40E94653120E030E040E883 -:1014900050E40E94FD309B01AC0160E070E080E010 -:1014A00090E40E94173321E230ED42E053E40E94C1 -:1014B000B4320E94130DC454DD4F0FB6F894DEBF52 -:1014C0000FBECDBFDF91CF911F910F91FF90EF9095 -:1014D000DF90CF900C94E60C893009F0D3C0F8016E -:1014E0009181943009F0A4C19281992309F4A0C19B -:1014F0008091710190917201019690937201809395 -:10150000710120E04BE760E084E093E00E94DC1989 -:1015100020E04BE761E084E093E00E94DC1920E0EA -:101520004BE762E084E093E00E94DC1920E04BE7A7 -:1015300063E084E093E00E94DC1920E04BE764E084 -:1015400084E093E00E94DC190E94E60C00E010E0C9 -:10155000E6E4FE2E80917301E5EBF1E0DE01A15A95 -:10156000BE4F9F2D01900D929A95E1F7E091710188 -:10157000F0917201E00FF11FEE0FFF1F2FE531E038 -:101580002C0F3D1FE20FF31F60817181680F711DE9 -:10159000882777FD8095982F0E94003220E030E068 -:1015A00040E451E40E94653120E030E040E850E43E -:1015B0000E94FD309B01AC0160E070E080E090E4AF -:1015C0000E94173321E230ED42E053E40E94B4322E -:1015D0004CE050E00E94E30F3FEF87EE93E0315084 -:1015E00080409040E1F700C0000080917301E5EB7E -:1015F000F1E0DE01A75EBE4F9F2D01900D929A95FE -:10160000E1F7E0917101F0917201E00FF11FEE0F2F -:10161000FF1F29E131E02C0F3D1FE20FF31F608116 -:101620007181680F711D882777FD8095982F0E9422 -:10163000003220E030E040E451E40E94653120E0D7 -:1016400030E040E850E40E94FD309B01AC0160E0D6 -:1016500070E080E090E40E94173321E230ED42E038 -:1016600053E40E94B4320E94130D8FEF9CE7019760 -:10167000F1F700C000000F5F1F4F0830110509F09F -:1016800069CF94C1883009F0D3C0F80191819430BA -:1016900009F0CEC09281992309F4CAC080917101EA -:1016A000909172010197909372018093710120E0F3 -:1016B0004BE760E084E093E00E94DC1920E04BE718 -:1016C00061E084E093E00E94DC1920E04BE762E0F7 -:1016D00084E093E00E94DC1920E04BE763E084E0C3 -:1016E00093E00E94DC1920E04BE764E084E093E0A3 -:1016F0000E94DC190E94E60C00E010E056E4F52E92 -:1017000080917301E5EBF1E0DE01AD52BF4F9F2DFB -:1017100001900D929A95E1F7E0917101F0917201BB -:10172000E00FF11FEE0FFF1F23ED30E02C0F3D1FE8 -:10173000E20FF31F60817181680F711D882777FDAB -:101740008095982F0E94003220E030E040E451E480 -:101750000E94653120E030E040E850E40E94FD3016 -:101760009B01AC0160E070E080E090E40E941733E0 -:1017700021E230ED42E053E40E94B4324CE050E00C -:101780000E94E30F3FEF87EE93E03150804090409E -:10179000E1F700C0000080917301E5EBF1E0DE01AC -:1017A000A357BF4F9F2D01900D929A95E1F7E091BD -:1017B0007101F0917201E00FF11FEE0FFF1F2DE894 -:1017C00030E02C0F3D1FE20FF31F60817181680F25 -:1017D000711D882777FD8095982F0E94003220E0A8 -:1017E00030E040E451E40E94653120E030E040E820 -:1017F00050E40E94FD309B01AC0160E070E080E0AD -:1018000090E40E94173321E230ED42E053E40E945D -:10181000B4320E94130D8FEF9CE70197F1F700C0DF -:1018200000000F5F1F4F0830110509F069CFBEC0DF -:10183000F801228190917301222309F45DC026E40E -:10184000E5EBF1E0DE01A95BBF4F01900D922A9517 -:10185000E1F7E0917101F0917201E80FF11DEE0FD7 -:10186000FF1F27E430E02C0F3D1FE20FF31F6081C4 -:101870007181690F711D882777FD8095982F0E94CF -:10188000003220E030E040E451E40E9465316B0119 -:101890007C01F801818165E070E0681B710988278F -:1018A00077FD8095982F0E9400329B01AC01C70103 -:1018B000B6010E94FD309B01AC0160E070E080E069 -:1018C00090E40E94173321E230ED42E053E40E949D -:1018D000B4324FE050E0C454DD4F0FB6F894DEBF91 -:1018E0000FBECDBFDF91CF911F910F91FF90EF9071 -:1018F000DF90CF900C94E30F26E4E5EBF1E0DE01FE -:10190000119601900D922A95E1F7E0917101F09105 -:101910007201E80FF11DEE0FFF1F21E030E02C0FE8 -:101920003D1FE20FF31F60817181690F711D8827D0 -:1019300077FD8095982F0E94003220E030E040E44F -:1019400051E40E9465316B017C01F801818165E001 -:1019500070E0681B7109882777FD8095982F0E9499 -:1019600000329B01AC01C701B6010E94FD309B0112 -:10197000AC0160E070E080E090E40E94173321E267 -:1019800030ED42E053E40E94B432C454DD4F0FB650 -:10199000F894DEBF0FBECDBFDF91CF911F910F91A5 -:1019A000FF90EF90DF90CF900C94130DC454DD4F57 -:1019B0000FB6F894DEBF0FBECDBFDF91CF911F9160 -:1019C0000F91FF90EF90DF90CF90089510928702D3 -:1019D00010928602809171008D7F809371008091BA -:1019E00090008F77809390001092480210924702E7 -:1019F0001092800210928102109282021092830251 -:101A000010927F0210927E02EEE5F2E0AEE4B2E0C8 -:101A100011921192119211921D921D9282E0EE3755 -:101A2000F807B1F708956F927F928F929F92AF92CD -:101A3000BF92CF92DF92EF92FF920F931F93CF93BB -:101A4000DF936B017C010EE712E04CE5A42E42E02F -:101A5000B42EC7E0D0E0A7019601F80192918291DF -:101A6000729162918F010E946131882349F0219720 -:101A7000F2E0AF1AB108CF3F8FEFD80761F734C05B -:101A8000F8011082118212821382F50111821082F4 -:101A9000FE01EE0FFF1FEE0FFF1FE25AFD4FDE01AA -:101AA000AA0FBB1FA25BBD4FCE011AC00196448195 -:101AB0005581668177814083518362837383148269 -:101AC00015821682178212962D913C9113971196CA -:101AD0003C932E9313961C921E9212973496129654 -:101AE0008730910519F7C3CF8091860290918702C4 -:101AF000019797FD05C0909387028093860204C0EA -:101B00001092870210928602E0918602F09187027D -:101B10003097C9F4809171008D7F8093710080911E -:101B200090008F7780939000109280021092810233 -:101B3000109282021092830210927F0210927E0213 -:101B40001092470285C03197DF01AA0FBB1FAA0F71 -:101B5000BB1FA25ABD4FCD90DD90ED90FC90EE0FD3 -:101B6000FF1FE25BFD4FC081D181609080027090C9 -:101B700081028090820290908302A7019601662DD7 -:101B8000772D882D992D0E94613187FF25C0262D44 -:101B9000372D482D592DC701B6010E94FC3020E099 -:101BA00030E04AEF54E40E9465315B018C012A2D3C -:101BB0003B2D402F512F662D772D882D992D0E947A -:101BC000FD303B014C01A7019601772D992D0E9414 -:101BD0006131181664F72EC0A7019601662D772D86 -:101BE000882D992D0E94B032181634F5A701960160 -:101BF000662D772D882D992D0E94FC3020E030E055 -:101C00004AEF54E40E9465315B018C012A2D3B2D83 -:101C1000402F512F662D772D882D992D0E94FC3055 -:101C20003B014C01A7019601772D992D0E94B032FE -:101C300087FFECCF10924D02C0928002D0928102B9 -:101C4000E0928202F0928302D0937F02C0937E02E0 -:101C5000DF91CF911F910F91FF90EF90DF90CF9088 -:101C6000BF90AF909F908F907F906F9008953E9A15 -:101C7000E1E7F0E080818D7F808382E080939000B7 -:101C80008AE18093910008951F920F920FB60F92F0 -:101C90001124CF92DF92EF92FF922F933F934F93B5 -:101CA0005F936F937F938F939F93AF93BF93CF93E4 -:101CB000DF93EF93FF9380914702882309F479C063 -:101CC00020E030E0A9016091800270918102809152 -:101CD0008202909183020E94B03218160CF069C003 -:101CE00020E030E040E251E46091490270914A0204 -:101CF00080914B0290914C020E94B0321816BCF4B5 -:101D00008091840290918502019660918602709183 -:101D100087020E949C3490938502809384021092E3 -:101D2000490210924A0210924B0210924C02C0914A -:101D30008402D0918502CC0FDD1FCC0FDD1FC25A6B -:101D4000DD4F288139814A815B8160E074E284E75C -:101D50009BE40E9465310E94CD317093970060939F -:101D60009600288139814A815B8160E074E284E7D2 -:101D70009BE40E9465310E94CD3175956795709303 -:101D800099006093980020E030E040E85FE36091C4 -:101D9000490270914A0280914B0290914C020E943C -:101DA000FD306093490270934A0280934B029093F6 -:101DB0004C0280914802882309F493C0C0904302EA -:101DC000D0904402E0904502F090460220E030E0DE -:101DD000A901C701B6010E94B0321816F4F4A70198 -:101DE000960160E074E284E79BE40E9465310E9402 -:101DF000CD317093970060939600A701960160E043 -:101E000074E284E79BE40E9465310E94CD317595B0 -:101E10006795709399006093980060913D0270916E -:101E20003E026F5F7F4F70933E0260933D0280E001 -:101E300090E00E94FE3120913F023091400240919B -:101E40004102509142020E94B03287FD4AC0809107 -:101E50003C028F5F80933C029091F1038917A0F0C0 -:101E60008091F603882319F010923C020DC08091F6 -:101E700071008D7F80937100809190008F778093A7 -:101E80009000109248022DC0E091F203F091F3030C -:101E900080913C0298E0899FE00DF11D1124808122 -:101EA0009181A281B3818093430290934402A093D5 -:101EB0004502B093460220E030E040E85EE36481F2 -:101EC0007581868197810E94B43260933F0270933E -:101ED0004002809341029093420210923E0210927F -:101EE0003D02FF91EF91DF91CF91BF91AF919F9113 -:101EF0008F917F916F915F914F913F912F91FF90C3 -:101F0000EF90DF90CF900F900FBE0F901F9018951D -:101F10000F931F93CF93DF9300D0CDB7DEB78C0123 -:101F200080914702882331F04A8369830E94E60C3E -:101F300069814A8181E0809348021093F303009302 -:101F4000F2036093F1034093F6031092490210925A -:101F50004A0210924B0210924C0210923C02F8017D -:101F600040815181628173814093430250934402C6 -:101F7000609345027093460220E030E040E85EE363 -:101F800064817581868197810E94B43260933F029B -:101F900070934002809341029093420210923E025D -:101FA00010923D0280917100826080937100809157 -:101FB00090008068809390000F900F90DF91CF91F8 -:101FC0001F910F9108956F927F928F929F92AF927F -:101FD000BF92CF92DF92EF92FF920F931F93CF9316 -:101FE000DF936B017C01EA018091480281110E941C -:101FF000E60C81E08093470220E030E0A901C701B0 -:10200000B6010E94B03218160CF09AC0609080029F -:1020100070908102809082029090830220E030E0F4 -:10202000A901662D772D882D992D0E94613181118E -:1020300028C0C0928002D0928102E0928202F09287 -:102040008302D0937F02C0937E028091860290919A -:102050008702FC01EE0FFF1FEE0FFF1FE25AFD4F3C -:10206000C082D182E282F382FC01EE0FFF1FE25BAD -:10207000FD4FD183C083019690938702809386029F -:102080005FC0A7019601662D772D882D992D0E949E -:10209000613187FF25C0262D372D482D592DC701C9 -:1020A000B6010E94FC3020E030E04AEF54E40E9488 -:1020B00065315B018C012A2D3B2D402F512F662D60 -:1020C000772D882D992D0E94FD303B014C01A701F1 -:1020D0009601772D992D0E946131181664F7A9CFCA -:1020E000A7019601662D772D882D992D0E94B0327B -:1020F00018160CF09ECFA7019601662D772D882D1E -:10210000992D0E94FC3020E030E04AEF54E40E9418 -:1021100065315B018C012A2D3B2D402F512F662DFF -:10212000772D882D992D0E94FC303B014C01A70191 -:102130009601772D992D0E94B03287FFECCF79CF91 -:10214000809171008260809371008091900080681E -:1021500080939000DF91CF911F910F91FF90EF90AE -:10216000DF90CF90BF90AF909F908F907F906F90B7 -:102170000895809191020895CF93DF9300D01F922C -:10218000CDB7DEB72091FB03243021F523E029836E -:102190009B838A832093E9008FEF06C095ED9A9583 -:1021A000F1F70000882329F09091E800815095FF15 -:1021B000F5CF8091E80085FF0DC040E050E063E07E -:1021C00070E0CE0101960E94A6148091E8008E77FF -:1021D0008093E8000F900F900F90DF91CF910895BA -:1021E000CF93DF9300D01F92CDB7DEB72091FB03D2 -:1021F000243029F522E029839B838A8383E080931E -:10220000E9008FEF06C095ED9A95F1F7000088235D -:1022100029F09091E800815095FFF5CF8091E8007A -:1022200085FF0DC040E050E063E070E0CE01019614 -:102230000E94A6148091E8008E778093E8000F90AA -:102240000F900F90DF91CF9108952091FB032430E0 -:10225000F9F422E02093E9002FEF06C035ED3A951E -:10226000F1F70000222329F03091E800215035FFDA -:10227000F5CF2091E80025FF0BC040E050E065E07D -:1022800070E00E94A6148091E8008E778093E800A9 -:102290000895CF93DF93EC018091FB03843041F5E7 -:1022A00081E08093E9008FEF06C095ED9A95F1F7F4 -:1022B0000000882329F09091E800815095FFF5CF28 -:1022C0008091E80085FF14C040E050E068E070E0D5 -:1022D000CE010E94A6148091E8008E778093E800DA -:1022E00088E0FE01A9E8B2E001900D928A95E1F73D -:1022F000DF91CF910895BF92CF92DF92EF92FF923C -:102300000F931F93CF93DF937C01B62EE90100E07A -:1023100010E0C42ED12C0BC04991202F2B0D2F770C -:102320004F776FE0C7010E94DC190F5F1F4F0C153C -:102330001D0594F3DF91CF911F910F91FF90EF90C6 -:10234000DF90CF90BF90089570E06F5F7F4F6F7008 -:1023500077270C94DC190F931F93CF93C42F63300E -:10236000710509F04AC0842F807F803849F1803997 -:1023700009F043C0622F6F7770E080E090E00E9428 -:10238000003220E030E040E451E40E9465319B01DE -:10239000AC0160E070E080E090E40E9417330F77BA -:1023A00010E023E0159507952A95E1F72DEC3CEC1C -:1023B00042E053E40E94B432A8010E94E30F1DC022 -:1023C000622F6F7770E080E090E00E94003220E0A2 -:1023D00030E040E451E40E9465319B01AC0160E0D3 -:1023E00070E080E090E40E9417332DEC3CEC42E07A -:1023F00053E40E94B4320E94130DCC3F29F4CF91D4 -:102400001F910F910C94E60CCF911F910F9108959D -:102410000F931F93CF93DF93CDB7DEB727970FB6F8 -:10242000F894DEBF0FBECDBF8C0114C08A810E941C -:10243000B6199A819D839B819E839C819F83811184 -:102440001EC089818430B1F08730A1F08630A1F0C0 -:102450008530A1F0BE016F5F7F4F84E791E00E945D -:10246000231D8111E3CF84E791E00E94141D0E9497 -:102470008F190DC083E003C082E001C081E0AE018E -:102480004B5F5F4F682FC8010E94491AE3CF279620 -:102490000FB6F894DEBF0FBECDBFDF91CF911F9175 -:1024A0000F910895EF92FF920F93CF93DF9300D097 -:1024B00000D000D0CDB7DEB77B014A832B830C83DD -:1024C000842F2E834D830E94B6192E814D81811158 -:1024D0001BC082E0E816F10479F083E0E816F1040D -:1024E00021F0EA94EF2821F50BC0073F11F487E0B3 -:1024F00001C084E089830BC0273FD9F786E0FACF7B -:10250000473FB9F785E0F6CF42954F704983BE014A -:102510006F5F7F4F84E791E00E94D91C84E791E0D0 -:102520000E94F71C84E791E00E94141D0E948F19FD -:1025300026960FB6F894DEBF0FBECDBFDF91CF91C8 -:102540000F91FF90EF9008958091FA03811109C0D7 -:102550000E9495160E94F2168091E200846080939A -:10256000E20008951092FA030895089508950C94D6 -:10257000B229809192028F5F8093920262E30E945F -:102580007C34911135C0109292028091930288237D -:1025900079F18091FB03843049F58091E9008F70D7 -:1025A0009091EC0090FF02C090E801C090E0982B61 -:1025B00084E08093E9008091EB0080FF14C080915B -:1025C000EE0087FD03C00FC01092F1008091E8007B -:1025D00085FDFACF8091E80080FF05C08091E8007A -:1025E0008E778093E8009F709093E9001092930299 -:1025F000089542E061EC81E00E940B1642E061EC3C -:1026000082E00E940B1642E061EC83E00E940B1610 -:1026100042E261EC84E00E940B1642E361E885E04F -:102620000E940B1642E360E886E00C940B16809142 -:10263000FD03833009F454C030F4813071F08230EE -:1026400009F0A5C08CC08A3009F479C08B3009F438 -:102650005FC0893009F09BC020C08091FC03813AA3 -:1026600009F095C08091E800877F8093E800809111 -:10267000000490910104892B21F060E080E090E05B -:1026800003C068E089E892E070E00E944415809100 -:10269000E8008B778093E80008958091FC038132F5 -:1026A00009F075C08091000490910104892B09F014 -:1026B0006EC08091E800877F8093E80005C080911C -:1026C000FB03882309F463C08091E80082FFF7CF01 -:1026D0008091F100809391028091E8008B7753C044 -:1026E0008091FC03813A09F052C0809100049091DE -:1026F0000104892B09F04BC08091E800877F80930B -:10270000E8008091E80080FFFCCF80918A0136C00C -:102710008091FC038132D9F58091000490910104ED -:10272000892BA9F58091E800877F8093E8000E94BB -:1027300042168091FE0380938A010C948B23809132 -:10274000FC03813221F58091E800877F8093E800C7 -:102750000E9442168091FF03809388020895809121 -:10276000FC03813AA1F48091E800877F8093E80020 -:102770008091E80080FFFCCF809188028093F10077 -:102780008091E8008E778093E8000C9442160895BB -:1027900084E093E00E94181A62E572E184E093E01D -:1027A0000E946E1A68E072E184E093E00E94721A5F -:1027B00084B7877F84BF88E10FB6F8948093600068 -:1027C000109260000FBE90E080E80FB6F8948093FE -:1027D0006100909361000FBE0E949C1D0E9495169F -:1027E0000E94F2168091E20084608093E200789467 -:1027F0006BEA71E184E093E00E94141A64EA71E1EB -:1028000084E093E00E940C1A6BE771E184E093E0AE -:102810000E94101A0E94370E0E948F190E949E1D5E -:1028200080E891E00E94481D0BC00E946C298091B5 -:10283000F903882329F00E949A2981110E9490149B -:102840008091FB03853089F384E093E00E94211C92 -:102850000E94A81DF5CF292F332723303105B1F071 -:102860004CF42130310509F44DC02230310509F016 -:102870004EC007C02132310541F12232310591F1BC -:1028800046C0E0EDF0E08CE594E045C0992781304A -:10289000910569F08230910589F0892B09F037C0E4 -:1028A000E8E5F4E0E491F0E088E594E034C0EAE2A1 -:1028B000F4E0E491F0E08AE294E02DC0EEEFF3E082 -:1028C000E491F0E08EEF93E026C0643000F5E62F4F -:1028D000F0E0EE0FFF1FE550FE4F80819181E9E0AF -:1028E000F0E019C0643098F4E62FF0E0DF01AA0FA1 -:1028F000BB1FAD5FBD4F8D919C91E55FFD4FE081AA -:10290000F0E009C0E2E1F0E08CE295E004C0E0E034 -:10291000F0E080E090E0DA018D939C93CF01089580 -:1029200080E189BD82E189BD09B400FEFDCF8091BF -:10293000D8008F7D8093D8008091E00082608093E2 -:10294000E0008091E00081FDFCCF0895BF92CF921E -:10295000DF92EF92FF920F931F93CF93DF937C014F -:102960008B01EA010E946316B82E811133C02097B3 -:1029700031F028813981021B130BE20EF31EC12CAA -:10298000D12C23C08091E80085FD15C08091E8001E -:102990008E778093E800209749F0888199818C0D8B -:1029A0009D1D9983888325E0B22E14C00E94631672 -:1029B000882359F00EC0F70181917F018093F100C7 -:1029C00001501109FFEFCF1ADF0A01151105D1F6E9 -:1029D00001C0B82E8B2DDF91CF911F910F91FF90E9 -:1029E000EF90DF90CF90BF900895BF92CF92DF928B -:1029F000EF92FF920F931F93CF93DF937C018B0194 -:102A0000EA010E946316B82E811133C0209731F07D -:102A100028813981021B130BE20EF31EC12CD12C2D -:102A200023C08091E80085FD15C08091E8008B7778 -:102A30008093E800209749F0888199818C0D9D1D35 -:102A40009983888345E0B42E14C00E9463168823BE -:102A500059F00EC08091F100F70181937F01015080 -:102A60001109FFEFCF1ADF0A01151105D1F601C0D8 -:102A7000B82E8B2DDF91CF911F910F91FF90EF908A -:102A8000DF90CF90BF9008954091020450910304CD -:102A90004617570748F06115710539F44091E80071 -:102AA0004E774093E80001C0BA01FC0140E033C01A -:102AB0008091FB03882309F444C0853009F443C0A6 -:102AC0008091E80083FD41C08091E80082FD33C021 -:102AD0008091E80080FF1FC09091F3008091F20088 -:102AE000392F20E0A901482BCA0106C0419140932B -:102AF000F1006150710901966115710519F0883076 -:102B00009105A0F341E0089709F040E08091E800CA -:102B10008E778093E8006115710551F64111C8CF99 -:102B20000AC08091FB03882361F0853061F08091B9 -:102B3000E80083FD0AC08091E80082FFF2CF80E0C8 -:102B4000089582E0089583E0089581E0089540911A -:102B50000204509103044617570748F061157105A8 -:102B600039F44091E8004E774093E80001C0BA0183 -:102B7000FC0140E034C08091FB03882309F445C088 -:102B8000853009F444C08091E80083FD42C0809103 -:102B9000E80082FD34C08091E80080FF20C0909161 -:102BA000F3008091F200392F20E0A901482BCA01DF -:102BB00007C044914093F10031966150710901962C -:102BC0006115710519F08830910598F341E0089777 -:102BD00009F040E08091E8008E778093E80061156D -:102BE000710549F64111C7CF0AC08091FB038823C4 -:102BF00061F0853061F08091E80083FD0AC080912A -:102C0000E80082FFF2CF80E0089582E0089583E03B -:102C1000089581E00895982F2CC09093E9009817AB -:102C200039F07091EC002091ED005091F00003C05C -:102C3000242F762F50E021FD02C09F5F1AC03091F3 -:102C4000EB003E7F3093EB003091ED003D7F309301 -:102C5000ED003091EB0031603093EB007093EC00AD -:102C60002093ED005093F0002091EE0027FDE5CF7A -:102C700007C0973090F28F708093E90081E008954B -:102C800080E008958091FC0387FD05C08091E800F5 -:102C900080FF0EC012C08091E80082FD05C08091C7 -:102CA000FB038111F8CF08958091E8008B7708C06D -:102CB0008091FB038111EACF08958091E8008E771F -:102CC0008093E80008958091E4009091E50045E646 -:102CD0002091EC0020FD1FC023C02091FB03222384 -:102CE00091F0253091F02091EB0025FD10C020914E -:102CF000E4003091E5002817390751F34150C9012C -:102D000039F784E0089582E0089583E0089581E032 -:102D1000089580E008952091E80020FFDECFF9CFEC -:102D20002091E80022FFD9CFF4CF0E9403170E9420 -:102D30000B17E0EEF0E0808181608083E8EDF0E049 -:102D400080818F77808319BCA7EDB0E08C918E7F56 -:102D50008C9380818F7E80831092FA0308950F9365 -:102D60001F93CF93DF930E9403170E940B17C8EDA8 -:102D7000D0E088818F778883888180688883888184 -:102D80008F7D888319BC1092FB031092F703109279 -:102D9000F9031092F80300EE10E0F80180818B7FB8 -:102DA000808388818160888342E060E080E00E94C7 -:102DB0000B16E1EEF0E080818E7F8083E2EEF0E0A2 -:102DC000808181608083808188608083F801808138 -:102DD0008E7F8083888180618883DF91CF911F916E -:102DE0000F910895E8EDF0E080818F7E8083E7ED1C -:102DF000F0E080818160808384E082BF81E0809305 -:102E0000FA030C94AF16E8EDF0E080818E7F8083AA -:102E10001092E20008951092DA001092E1000895F5 -:102E20001F920F920FB60F9211242F933F934F933F -:102E30005F936F937F938F939F93AF93BF93EF9322 -:102E4000FF938091E10082FF0BC08091E20082FF3E -:102E500007C08091E1008B7F8093E1000E94B9124E -:102E60008091DA0080FF1FC08091D80080FF1BC0D6 -:102E70008091DA008E7F8093DA008091D90080FF04 -:102E80000DC080E189BD82E189BD09B400FEFDCF9E -:102E900081E08093FB030E94A41205C019BC10922C -:102EA000FB030E94B2128091E10080FF19C0809163 -:102EB000E20080FF15C08091E2008E7F8093E200E7 -:102EC0008091E20080618093E2008091D80080626E -:102ED0008093D80019BC85E08093FB030E94B61252 -:102EE0008091E10084FF30C08091E20084FF2CC01B -:102EF00080E189BD82E189BD09B400FEFDCF8091EA -:102F0000D8008F7D8093D8008091E1008F7E8093E0 -:102F1000E1008091E2008F7E8093E2008091E200E8 -:102F200081608093E2008091F703882311F084E0B0 -:102F300007C08091E30087FF02C083E001C081E009 -:102F40008093FB030E94B7128091E10083FF29C0A8 -:102F50008091E20083FF25C08091E100877F80930C -:102F6000E10082E08093FB031092F7038091E1007F -:102F70008E7F8093E1008091E2008E7F8093E2005B -:102F80008091E20080618093E20042E060E080E0B6 -:102F90000E940B168091F00088608093F0000E94E0 -:102FA000B512FF91EF91BF91AF919F918F917F915A -:102FB0006F915F914F913F912F910F900FBE0F90A6 -:102FC0001F9018951F920F920FB60F9211242F93F6 -:102FD0003F934F935F936F937F938F939F93AF93A1 -:102FE000BF93CF93EF93FF938091E9008F709091FF -:102FF000EC0090FF02C090E801C090E0C92FC82B00 -:103000001092E9008091F000877F8093F00078941F -:103010000E9426181092E9008091F0008860809349 -:10302000F000CF70C093E900FF91EF91CF91BF9175 -:10303000AF919F918F917F916F915F914F913F9150 -:103040002F910F900FBE0F901F9018951F93CF9345 -:10305000DF93CDB7DEB7AC970FB6F894DEBF0FBEE7 -:10306000CDBFECEFF3E08091F100819324E0E430F8 -:10307000F207C9F70E9417138091E80083FF37C158 -:103080008091FC039091FD03953009F488C038F4D9 -:103090009130B1F170F0933009F029C131C098300E -:1030A00009F4F8C0993009F404C1963009F01FC141 -:1030B0009DC0803821F0823809F019C108C0809184 -:1030C000F8039091F903992389F082600FC08091F1 -:1030D0000004909101048F7099278093E9008091FA -:1030E000EB0085FB882780F91092E9009091E800B9 -:1030F000977F9093E8008093F1001092F100D5C083 -:10310000882319F0823009F0F2C08F7121F08230EB -:1031100009F0EDC00BC08091FE03813009F0E7C0DB -:10312000933009F080E08093F9032FC08091FE0373 -:1031300081112BC080910004909101048F70992718 -:10314000009709F4D4C08093E9002091EB0020FFA0 -:103150001CC02091FD03233021F48091EB0080629C -:1031600012C09091EB0090619093EB0021E030E071 -:1031700001C0220F8A95EAF72093EA001092EA0034 -:103180008091EB0088608093EB001092E9008091C1 -:10319000E800877F8093E8000E944216A8C0811152 -:1031A000A6C08091FE039091FF038F779927182F77 -:1031B0009091E3009078982B9093E3008091E80041 -:1031C000877F8093E8000E9442168091E80080FF8C -:1031D000FCCF8091E30080688093E300112311F01D -:1031E00083E001C082E08093FB0381C0805882307D -:1031F00008F07DC08091FE039091FF038C3D23E099 -:10320000920779F583E08A838AE289834FB7F8943D -:10321000DE01139620E03EE051E2E32FF0E0509310 -:103220005700E49120FF03C0E295EF703F5FEF701D -:103230008E2F90E0EA3010F0C79601C0C0968D93B3 -:103240009D932F5F243149F74FBF8091E800877F1E -:103250008093E8006AE270E0CE0101960E94441576 -:1032600013C0AE01455D5F4F609100040E942B14B6 -:103270000097E9F12091E800277F2093E800BC0146 -:103280008BA59CA50E94A7158091E8008B77809361 -:10329000E8002DC0803859F58091E800877F809341 -:1032A000E8008091F7038093F1008091E8008E7729 -:1032B00071CF81111CC09091FE039230C0F48091B7 -:1032C000E800877F8093E8009093F7030E944216FE -:1032D0008091F703811104C08091E30087FF02C051 -:1032E00084E001C081E08093FB030E94F912809189 -:1032F000E80083FF0AC08091E800877F8093E800A0 -:103300008091EB0080628093EB00AC960FB6F8944E -:10331000DEBF0FBECDBFDF91CF911F910895CF9338 -:103320008091FB038823B1F08091E9008F70909128 -:10333000EC0090FF02C090E801C090E0C92FC82BBC -:103340001092E9008091E80083FD0E942618CF705A -:10335000C093E900CF910895881F8827881F08959A -:1033600091E0883F08F490E0892F0895982F907F8E -:10337000903B99F038F4903981F0903A71F09038A0 -:10338000C9F40BC0903DA1F018F4903C99F410C022 -:10339000903E19F0903F71F402C083E00895E82F49 -:1033A000E15FEF3038F4F0E0E15FFD4F8081089598 -:1033B00082E0089580E008950F932F774F776F7024 -:1033C000606BDC01ED91FC91022F242F462F63E00E -:1033D00070E009950F9108950F932F774F776F70D5 -:1033E0006069DC01ED91FC91022F242F462F63E0F0 -:1033F00070E009950F9108950F932F774F776F70B5 -:103400006068DC01ED91FC91022F242F462F63E0D0 -:1034100070E009950F910895FC017383628308950C -:10342000FC01738F628F0895FC01758F648F08957E -:10343000CF93DF93EC011DA21FA21EA2BC01685D09 -:103440007F4F40EC88519F4F0E94551C1B821A826F -:103450001D821C821F821E82198618861B861A8670 -:103460001D861C861F861E86198A188A1B8A1A8A40 -:103470001D8A1C8A1F8A1E8A198E188E1B8E1A8E10 -:103480001D8E1C8E1F8E1E8E19A218A2DF91CF9149 -:103490000895CF92DF92FF920F931F93CF93DF9304 -:1034A0001F92CDB7DEB7F62E6A018C0108511F4F6F -:1034B00008C0F60161916F01C80149830E945C1C3C -:1034C00049818C2D841B8F15A0F30F90DF91CF9134 -:1034D0001F910F91FF90DF90CF900895FC017183B1 -:1034E00060830895FC0171A360A30895AF92BF9219 -:1034F000CF92DF92EF92FF920F931F93CF93DF93C0 -:1035000000D01F92CDB7DEB77C016B01142FB22E15 -:10351000A02EDC0195968C9195978430F1F45A9603 -:10352000ED91FC915B97309709F4D8C0CB010197DE -:1035300063E070E00E948834DB01AA0FBB1FA60F76 -:10354000B71F49832A830B834C2D4A1B9E012F5F93 -:103550003F4FBD01C7010995B1C06230710509F443 -:1035600053C06330710529F06130710509F09CC0CA -:1035700083C0842F807F803A01F130F48038B9F025 -:10358000803909F0ABC00DC0803EE9F0803F09F101 -:10359000803B09F0A3C0D7011296ED91FC911397DF -:1035A00023C0D7011496ED91FC9115971DC0D7014A -:1035B0001696ED91FC91179717C0D7011896ED91CB -:1035C000FC91199711C0D7011A96ED91FC911B97A8 -:1035D0000BC0423F09F082C0D7011C96ED91FC91CF -:1035E0001D97309731F47AC0309709F477C0123FB5 -:1035F00021F42A2D4B2D62EF04C0612F6F702A2D0C -:103600004B2DC70109955AC0842F807F803D59F00A -:10361000803F79F0803C09F061C0D7011E96ED91A2 -:10362000FC911F9719C0D7015096ED91FC915197CD -:1036300013C0433F31F4D7015296ED91FC9153975B -:1036400008C0413F09F04AC0D7015496ED91FC9162 -:103650005597309741F442C0309709F43FC0133F6B -:1036600011F0113F19F44B2D612F03C0612F6F70C2 -:103670004B2DC701099522C0842F0E94B0198823C1 -:1036800031F0D7015696ED91FC91579707C0163F40 -:1036900029F5D7015896ED91FC9159973097F1F0A3 -:1036A000612FC70109950AC064307105A8F416C0DE -:1036B0000A2D2B2D412FB601C7010995D7015E9622 -:1036C000ED91FC915F97309789F00A2D2B2D412FBA -:1036D000B601C70109950AC0C12CD12CD7015C964F -:1036E000ED91FC915D97309719F7E8CF0F900F900F -:1036F0000F90DF91CF911F910F91FF90EF90DF908E -:10370000CF90BF90AF900895EF92FF920F931F93C9 -:10371000CF93DF93EC01162F862F0E94B0198823D8 -:1037200069F0FDA081E08DA300E020E0412F61E081 -:1037300070E0CE010E94761AFDA27CC0812F0E940B -:10374000AC194DA1882309F440C0443029F01AA3D4 -:1037500021E030E03FA32EA3812F0E94B6198130D3 -:1037600031F070F0823051F0833059F507C08DA3ED -:1037700000E020E0412F61E070E01EC08DA35AC040 -:10378000103F19F0173FE9F404C084E08DA31AA399 -:103790003FC02EA13FA1C90163E070E00E948834C0 -:1037A0008C0F9D1FFC0112A3B9016F5F7F4F7FA398 -:1037B0006EA30CA12BA14AA1CE010E94761A1DA2D4 -:1037C00039C01DA21FA21EA235C0442399F12EA10B -:1037D0003FA1C90163E070E00E9488347C01FE01D2 -:1037E000E80FF91F12A3B9016F5F7F4F7FA36EA38C -:1037F0008130910591F082E0E816F104D9F40CA132 -:103800002BA14AA1CE010E94761A8DA1843091F09D -:1038100081E090E09FA38EA30DC0423059F400E0F8 -:103820002BA14AA1CE010E94761A8DA1843011F0FD -:10383000FFA2EEA2DF91CF911F910F91FF90EF9029 -:103840000895CF92DF92EF92FF920F931F93CF9341 -:10385000DF93EC01E8A1F9A1309709F009958E01F9 -:1038600008511F4FC8010E948E1CE12CF12CC82E5C -:10387000D12C0FC060E0C8010E94A21C682FCE01AD -:103880000E94841B61E0C8010E94B31C8FEFE81AFC -:10389000F80AEC14FD0470F3DF91CF911F910F91A2 -:1038A000FF90EF90DF90CF900895FC0142837483E6 -:1038B00063831182108208950F931F93CF93DF9338 -:1038C000EC01062F0E94D41C182F298130E0C90179 -:1038D00001966A8170E00E949C34488150E0841710 -:1038E000950729F4812F0E94D71C80E012C0EB813C -:1038F000FC81E20FF31F00832981822F90E0019663 -:103900006A8170E00E949C348983812F0E94D71CB9 -:1039100081E0DF91CF911F910F910895CF93DF93B5 -:10392000EC010E94D41C29819881291710F0C22F24 -:1039300002C0CA81C20FC91B0E94D71C8C2FDF9105 -:10394000CF910895FC012081862F90E0820F911D78 -:10395000628170E00E949C340380F481E02DE80FC6 -:10396000F91F808108950F931F93CF93DF931F92C8 -:10397000CDB7DEB78C0169830E94D41C482FF801B3 -:1039800080816981262F30E0280F311D6281C901B5 -:1039900070E00E949C348083842F0F90DF91CF9140 -:1039A0001F910F910C94D71C8FB7F89408958FBF77 -:1039B0000895FC01CB012091FB032430B1F4218157 -:1039C0002F702093E90040E050E064E070E00E9436 -:1039D000A61481110BC09091E80095FD07C090914D -:1039E000E8009E779093E800089582E00895209182 -:1039F000FB032430A9F4FC0181818F708093E900DE -:103A00003091F3002091F200932F80E0822B892BDC -:103A100049F08091E8008E778093E8000C9463165B -:103A200082E0089580E008952091FB03243051F452 -:103A3000FC0121812F702093E9002091E80020FDF6 -:103A40000C94F71C0895FC01CB012091FB0324305A -:103A500011F080E0089526812F702093E9002091D5 -:103A6000E80022FFF6CF2091E80025FFF2CF40E0EA -:103A700050E064E070E00E94F5148091E80085FD5C -:103A800005C08091E8008B778093E80081E008957D -:103A900090939502809394020895E0919402F0919E -:103AA0009502309721F00190F081E02D099480E09B -:103AB0000895E0919402F0919502309721F00280F0 -:103AC000F381E02D09940895E0919402F09195021C -:103AD000309721F00480F581E02D0994089520911C -:103AE0009602309197028217930771F09093970294 -:103AF00080939602E0919402F0919502309721F024 -:103B00000680F781E02D0994089520919802309164 -:103B100099028217930771F090939902809398020B -:103B2000E0919402F0919502309721F00084F185A4 -:103B3000E02D0994089508950C949B1D0E94E62998 -:103B40000E94F3060E94BA2A0C9465300C942C064D -:103B50005F926F927F928F929F92AF92BF92CF921D -:103B6000DF92EF92FF920F931F93CF93DF93CDB726 -:103B7000DEB72A970FB6F894DEBF0FBECDBF0E9406 -:103B8000E9079AE9C92E92E0D92E00E010E0AA24B4 -:103B9000A394B12C502E802F0E9439093C01F601CC -:103BA000E190F1906F01E826F926E114F10431F477 -:103BB0000F5F1F4F0530110569F73AC08091F10280 -:103BC00081FD0E94420920E030E04501022E02C042 -:103BD000880C991C0A94E2F7C4018E219F21892B3D -:103BE00009F12E835F826820792081E0672809F43B -:103BF00080E088870E94EF298160782F9A878987E3 -:103C00004E815F8168858A850E94611EF801EE0FF2 -:103C1000FF1FE656FD4F808191818825992591836C -:103C2000808316C02F5F3F4F2C30310571F6C0CF17 -:103C30008FEF89838A831B820E94EF298160782F0E -:103C40009D838C8349815A816B818D810E94611E85 -:103C50000E94A72D1091A4020E944D1D1817D9F0A3 -:103C60000E944D1D8093A4022A960FB6F894DEBFE1 -:103C70000FBECDBFDF91CF911F910F91FF90EF90BD -:103C8000DF90CF90BF90AF909F908F907F906F907C -:103C90005F900C94A61D2A960FB6F894DEBF0FBE57 -:103CA000CDBFDF91CF911F910F91FF90EF90DF90EB -:103CB000CF90BF90AF909F908F907F906F905F90CC -:103CC0000895CF93DF93CDB7DEB72B970FB6F89457 -:103CD000DEBF0FBECDBF4F83588769877A878B873A -:103CE000DE01119686E0FD0111928A95E9F785E0E3 -:103CF000FE01379601900D928A95E1F749815A812C -:103D00006B817C818D819E810E944A262B960FB605 -:103D1000F894DEBF0FBECDBFDF91CF910895089517 -:103D2000CF93C82F882309F4C1C0823859F40E9468 -:103D30004D1D81FDBBC089E30E94B1280E943D2931 -:103D400089E30CC0833879F40E944D1D80FDAEC01C -:103D500083E50E94B1280E943D2983E50E94D32873 -:103D6000CF910C943D29843859F40E944D1D82FD59 -:103D70009DC087E40E94B1280E943D2987E4EECFD0 -:103D80008450813A48F48C2F0E94C72F81118EC035 -:103D90008C2F0E94B128E4CF8C2F805E883050F4A5 -:103DA000C77081E090E001C0880FCA95EAF70E94D1 -:103DB000F428D6CF8C2F855A833078F4C53A29F071 -:103DC000C63A31F482E890E005C081E890E002C094 -:103DD00083E890E0CF910C946F1D8C2F885A83312B -:103DE00008F064C0C83A39F1C93A41F1CA3A49F118 -:103DF000CB3A51F1CC3A59F1CD3A61F1C03B69F17E -:103E0000CE3A71F1CF3A79F1C13B81F1C23B89F1F0 -:103E1000C33B91F1C43B99F1C53BA1F1C63BA9F16C -:103E2000C73BB1F1C83BB9F1C93BC1F1CA3BC9F5C8 -:103E30008AE292E038C082EE90E035C089EE90E0F0 -:103E400032C08AEE90E02FC085EB90E02CC086EB6C -:103E500090E029C087EB90E026C08CEC90E023C076 -:103E60008DEC90E020C083E891E01DC08AE891E0ED -:103E70001AC082E991E017C084E991E014C081E2A0 -:103E800092E011C083E292E00EC084E292E00BC0A7 -:103E900085E292E008C086E292E005C087E292E007 -:103EA00002C080E090E0CF910C94851DCF910895E1 -:103EB000882309F44DC0823859F40E944D1D81FFBA -:103EC00047C089E30E94B1280E943D2989E30CC0C4 -:103ED000833871F40E944D1D80FF3AC083E50E9433 -:103EE000B1280E943D2983E50E94D3280C943D29E6 -:103EF000843859F40E944D1D82FF2AC087E40E9435 -:103F0000B1280E943D2987E4EFCF982F9450913A31 -:103F100008F4EACF982F905E983058F4282F277035 -:103F200081E090E001C0880F2A95EAF70E94FA2804 -:103F3000DDCF982F955A933020F480E090E00C94D8 -:103F40006F1D885A833120F480E090E00C94851D29 -:103F50000895882321F00E94F4280C943D290895A7 -:103F6000882321F00E94FA280C943D290895BF92DD -:103F7000CF92DF92EF92FF920F931F93CF93DF9335 -:103F8000CDB7DEB727970FB6F894DEBF0FBECDBF13 -:103F90008C0185E0F801DE01119601900D928A9561 -:103FA000E1F7F801D080E180F280558152955F7091 -:103FB00083819481892B41F0FFEFEF1208C081E0EB -:103FC00090E0DF1631F003C081E090E002C080E0B5 -:103FD00090E080FD7CC3C8015E830E948F1ED98261 -:103FE000EA8289819A810E946E28B92E8F830E946D -:103FF0006D280E9495275E816F81FF2021F00E942D -:1040000011296F815E812B2D22952F7030E0253094 -:10401000310509F4E6C06CF4243031050CF0A2C07F -:104020004B2D407F8B2D8F70223031050CF045C019 -:1040300017C02C3031054CF42A3031050CF0E7C1A3 -:104040002830310509F043C3E5C02D30310509F4AE -:10405000BAC20CF4A2C22F30310509F038C323C311 -:10406000182F411101C002C01295107FFF2059F096 -:10407000112309F46BC2812F6F830E9404290E94CF -:104080003D296F8163C2862F0E94581F112309F4B6 -:104090001EC3812F0E940A2927960FB6F894DEBF0F -:1040A0000FBECDBFDF91CF911F910F91FF90EF9089 -:1040B000DF90CF90BF900C943D29403211F0829553 -:1040C000807F662319F0613071F523C0FF20B1F0C5 -:1040D000511101C032C0513081F527960FB6F894C6 -:1040E000DEBF0FBECDBFDF91CF911F910F91FF902B -:1040F000EF90DF90CF90BF900C942429511101C014 -:1041000003C0513009F4E3C28E830E9427298E81B7 -:104110009AC1FF2021F0563008F0D9C20EC05530A8 -:1041200008F0D5C290C1FF20C9F0552331F0F80145 -:10413000958190FF0BC29F70958327960FB6F894D8 -:10414000DEBF0FBECDBFDF91CF911F910F91FF90CA -:10415000EF90DF90CF90BF900C94A91F552309F4E6 -:1041600072C109C22B2D26952695237030E02115AA -:10417000310529F02130310509F0A9C219C0FF200D -:1041800021F0862F9B2D937002C080E090E027964F -:104190000FB6F894DEBF0FBECDBFDF91CF911F9158 -:1041A0000F91FF90EF90DF90CF90BF900C946F1D18 -:1041B000FF2021F0862F9B2D937002C080E090E0BD -:1041C00027960FB6F894DEBF0FBECDBFDF91CF911B -:1041D0001F910F91FF90EF90DF90CF90BF900C94C4 -:1041E000851D862FFF2019F00E94AD2C02C00E9471 -:1041F000152D27960FB6F894DEBF0FBECDBFDF9109 -:10420000CF911F910F91FF90EF90DF90CF90BF90D3 -:104210000C949C2D8B2D837009F079C0F11057C23E -:10422000262F229526952770220F220F862F8F701A -:10423000C82ED12CE12CF12C022E04C0CC0CDD1C9C -:10424000EE1CFF1C0A94D2F764FF10C06FE070E010 -:1042500080E090E004C0660F771F881F991F2A95A1 -:10426000D2F7609570958095909503C060E070E0FE -:10427000CB012B2D269526952370422F50E04230FE -:104280005105D9F04330510569F16C297D298E29FA -:104290009F294130510551F127960FB6F894DEBFA2 -:1042A0000FBECDBFDF91CF911F910F91FF90EF9087 -:1042B000DF90CF90BF900C94AA276C297D298E297E -:1042C0009F2927960FB6F894DEBF0FBECDBFDF91B2 -:1042D000CF911F910F91FF90EF90DF90CF90BF9003 -:1042E0000C94BC270E94AA27C701B60127960FB6D7 -:1042F000F894DEBF0FBECDBFDF91CF911F910F911C -:10430000FF90EF90DF90CF90BF900C949827FF2004 -:1043100019F08B2D817001C08695882309F4D7C1CF -:10432000262F229526952770220F220F862F8F7019 -:10433000C82ED12CE12CF12C022E04C0CC0CDD1C9B -:10434000EE1CFF1C0A94D2F764FF10C06FE070E00F -:1043500080E090E004C0660F771F881F991F2A95A0 -:10436000D2F7609570958095909503C060E070E0FD -:10437000CB012B2D269526952370422F50E04230FD -:104380005105D9F04330510569F16C297D298E29F9 -:104390009F294130510551F127960FB6F894DEBFA1 -:1043A0000FBECDBFDF91CF911F910F91FF90EF9086 -:1043B000DF90CF90BF900C9449286C297D298E29DD -:1043C0009F2927960FB6F894DEBF0FBECDBFDF91B1 -:1043D000CF911F910F91FF90EF90DF90CF90BF9002 -:1043E0000C945B280E944928C701B60127960FB696 -:1043F000F894DEBF0FBECDBFDF91CF911F910F911B -:10440000FF90EF90DF90CF90BF900C943728603FE3 -:1044100059F120F4603E08F494C008C0623F09F4EA -:1044200067C0F0F1633F09F08CC065C0162F1F70A4 -:104430008B2D8F71FF2021F00E94E227812F7DCEEE -:104440000E94FD27812F27960FB6F894DEBF0FBE7E -:10445000CDBFDF91CF911F910F91FF90EF90DF9033 -:10446000CF90BF900C94B01FFF20B1F0553008F0F2 -:104470002EC18B2D8F7127960FB6F894DEBF0FBE1D -:10448000CDBFDF91CF911F910F91FF90EF90DF9003 -:10449000CF90BF900C941C28563008F018C1E9CF7B -:1044A000FF2099F08B2D8F7127960FB6F894DEBF01 -:1044B0000FBECDBFDF91CF911F910F91FF90EF9075 -:1044C000DF90CF90BF900C94E2278B2D8F712796B1 -:1044D0000FB6F894DEBF0FBECDBFDF91CF911F9115 -:1044E0000F91FF90EF90DF90CF90BF900C94FD273D -:1044F000F110EBCFD7CFFF2099F08B2D8F7127963E -:104500000FB6F894DEBF0FBECDBFDF91CF911F91E4 -:104510000F91FF90EF90DF90CF90BF900C94D32736 -:1045200027960FB6F894DEBF0FBECDBFDF91CF91B7 -:104530001F910F91FF90EF90DF90CF90BF900C9460 -:10454000CE27FF20A9F0552309F4ACCF862F27965C -:104550000FB6F894DEBF0FBECDBFDF91CF911F9194 -:104560000F91FF90EF90DF90CF90BF900C94901E32 -:10457000552309F4AACF862F27960FB6F894DEBFED -:104580000FBECDBFDF91CF911F910F91FF90EF90A4 -:10459000DF90CF90BF900C94581F4B2D4F70C801E7 -:1045A0000E94560327960FB6F894DEBF0FBECDBF0C -:1045B000DF91CF911F910F91FF90EF90DF90CF90FF -:1045C000BF900C940027F11082C09B2D9F70492F43 -:1045D00050E04230510599F144F44115510569F01C -:1045E0004130510509F073C019C043305105C1F184 -:1045F0004430510509F06BC044C027960FB6F894BB -:10460000DEBF0FBECDBFDF91CF911F910F91FF9005 -:10461000EF90DF90CF90BF900C94763027960FB636 -:10462000F894DEBF0FBECDBFDF91CF911F910F91E8 -:10463000FF90EF90DF90CF90BF900C948D30279635 -:104640000FB6F894DEBF0FBECDBFDF91CF911F91A3 -:104650000F91FF90EF90DF90CF90BF900C94A93016 -:1046600027960FB6F894DEBF0FBECDBFDF91CF9176 -:104670001F910F91FF90EF90DF90CF90BF900C941F -:10468000BC30862F27960FB6F894DEBF0FBECDBF85 -:10469000DF91CF911F910F91FF90EF90DF90CF901E -:1046A000BF900C94E0304B2D4F70C80127960FB689 -:1046B000F894DEBF0FBECDBFDF91CF911F910F9158 -:1046C000FF90EF90DF90CF90BF900C944309279616 -:1046D0000FB6F894DEBF0FBECDBFDF91CF911F9113 -:1046E0000F91FF90EF90DF90CF90BF9008950E94C0 -:1046F00011290E9421290E94E6280E943D290E943A -:10470000482E0E949C2D80E090E00E946F1D80E06A -:1047100090E00C94851D0E9401290C9477230E943F -:104720006E28292F22952F7030E02C3031054CF463 -:104730002A3031056CF4225031092230310590F4D1 -:1047400007C02C30310551F02F30310559F406C027 -:10475000803E10F0803F31F481E0089593FB88277C -:1047600080F9089580E00895CF93DF9300D000D0C2 -:104770001F92CDB7DEB70F900F900F900F900F9054 -:10478000DF91CF910895CF93DF9300D000D000D078 -:10479000CDB7DEB726960FB6F894DEBF0FBECDBFFD -:1047A000DF91CF9108951F93CF93DF93C091DB02E8 -:1047B00016E012C0D0E01C9FF0011D9FF00D1124E7 -:1047C000E555FD4F408151816281738184819581DE -:1047D0000E94C3232196C7708091DC02C813EACFE0 -:1047E000DF91CF911F9108954091A5025091A602AB -:1047F0006091A7027091A8028091A9029091AA02EB -:104800000C94C3230F931F93CF93DF938091AA023D -:1048100082958F7009F069C08091A702882309F4FE -:1048200064C0A091DB02D091DC02B091A502C091DE -:10483000A6028091A8029091A90221E030E0BF3F3A -:1048400011F020E030E0122FBC016095709506E079 -:104850004AC0009721F0CF3F29F4212F05C021E065 -:1048600030E002C020E030E020FD3BC04A2F50E0A5 -:10487000049FF001059FF00D1124E555FD4F2181A6 -:10488000C2132FC02081B2132CC02281211129C054 -:10489000238134812817390718F0281B390B02C0EF -:1048A000260F371F283C3105E0F48091AA028F7053 -:1048B00080618093AA0286E0849FF001859FF00DBD -:1048C0001124E055FD4F80818F708061808385EADF -:1048D00092E00E94B71FDF91CF911F910F910C942E -:1048E000D323AF5FA770AD13B4CFDF91CF911F91EA -:1048F0000F910895EF92FF920F931F93CF93DF9341 -:10490000CDB7DEB762970FB6F894DEBF0FBECDBF4E -:104910008C0185E0F801DE011D9601900D928A95CB -:10492000E1F7D8014C9111965C91119712966C9118 -:1049300012971396ED90FC9014977091A502E09158 -:10494000A6028091A8029091A902009739F0EF3F4A -:1049500041F421E030E07F3F31F003C021E030E05E -:1049600002C020E030E020FD5CC12091A70222239C -:1049700009F4F1C0E816F90628F09701281B390B55 -:10498000C90104C0809590958E0D9F1D883C9105AE -:1049900008F098C08091AA02982F907F09F064C017 -:1049A000E51314C0741312C0611110C08F708061C0 -:1049B0008093AA020E94F42385EA92E00E94B71F26 -:1049C0008091AA02D80115968C9343C1EF2839F043 -:1049D0005F3F41F481E090E04F3F31F003C081E060 -:1049E00090E002C080E090E080FD03C081E0862777 -:1049F00002C080E090E080FF2EC08091DB02209119 -:104A0000DC0236E013C090E0389FF001399FF00DD2 -:104A10001124E555FD4F7181571306C0708147136E -:104A200003C07281671317C0019687708213EBCFA2 -:104A300012C19F7059F0882309F40BC107C09F7001 -:104A400029F0F8019581907F09F403C1805E8830D8 -:104A500008F4FFC0D2C0662309F4FBC08091AA020B -:104A600081608093AA02F5C0E51308C0741306C0E4 -:104A7000611104C0D80115968C939DC04D875E8747 -:104A80008D859E856A8B0E948F236A89882309F40D -:104A9000B4C0662309F4B1C02091AA02822F829586 -:104AA0008F7090E002970CF4C6C08091A50290919F -:104AB000A60298878F831986FB86EA862C87CE010B -:104AC000079646C08091AA02982F907F59F47E2DB8 -:104AD000F98AE88A89890E94B42385EA92E00E94D3 -:104AE000B71F95C0E51311C074130FC061110DC03D -:104AF000F8018583C8010E94B71FE5EAF2E086E06D -:104B0000DF011D928A95E9F7A2C04D875E878D85EA -:104B10009E856A8B0E948F236A89882309F46DC061 -:104B2000662309F46AC02091AA02822F82958F70B1 -:104B300090E002970CF47FC08091A5029091A602AC -:104B40009A8389831B82FD82EC822E83CE0101969B -:104B50000E94B71F70C0E816F90628F09701281BBD -:104B6000390BC90104C0809590958E0D9F1D883C1E -:104B7000910508F046C0662309F43FC0E51330C034 -:104B800074132EC02091AA0220FD21C0322F32952D -:104B90003F70832F90E00097D1F0D80115962C93A9 -:104BA00015970F9741F0832F8F5F8295807F2F702D -:104BB000282B15962C93C8010E94B71F86E0F80198 -:104BC000A5EAB2E001900D928A95E1F73EC086E039 -:104BD000F801A5EAB2E001900D928A95E1F737C09D -:104BE0004D875E878D859E850E948F23811123C00E -:104BF0008091AA0281608093AA02C8010E94B71F17 -:104C000026C07E2DF98AE88A89890E94B423E5EAC4 -:104C1000F2E086E0DF011D928A95E9F70E94F42315 -:104C200018C0662351F34D875E878D859E850E944F -:104C30008F23882311F386E0F801A5EAB2E0019002 -:104C40000D928A95E1F70E9402240E94F42381E0EC -:104C500014C080E012C04D875E878D859E850E94BE -:104C60006E28292F22952F7030E0223031050CF468 -:104C7000E0CE243031050CF6E2CE62960FB6F89401 -:104C8000DEBF0FBECDBFDF91CF911F910F91FF907F -:104C9000EF9008951F93CF93DF93CDB7DEB72C9796 -:104CA0000FB6F894DEBF0FBECDBF4F83588769871C -:104CB0007A878B879C87CE0107960E947A24882367 -:104CC000D9F02F8138858A859B85892B39F03F3F24 -:104CD00019F080E090E004C02F3FD9F781E090E028 -:104CE000892B09F06DC04F81588569857A858B8540 -:104CF0009C850E94C32364C086E0FE013796DE01D6 -:104D0000119601900D928A95E1F7FF81E8854A8519 -:104D10005B854115510539F0EF3F41F481E090E0AA -:104D2000FF3F31F003C081E090E002C080E090E0FE -:104D300080FD46C02091DC0230E0C90101968770F9 -:104D400099276091DB0270E08617970709F440C04D -:104D5000F983EA835D834C8396E0929FD001939F11 -:104D6000B00D1124A555BD4FFE01319601900D9255 -:104D70009A95E1F78093DC020E94D32321C0189F0B -:104D8000C001112485559D4F0E947A24882371F11A -:104D9000E091DB021E9FF0011124E555FD4F40819B -:104DA000518162817381848195810E94C3238091A6 -:104DB000DB0290E00196877099278093DB0201C0A7 -:104DC00016E08091DB029091DC028913D8CF0EC0EF -:104DD0000E948B231092DC021092DB02E5EAF2E0E3 -:104DE00086E0DF011D928A95E9F7EACF2C960FB68F -:104DF000F894DEBF0FBECDBFDF91CF911F91089514 -:104E0000DF92EF92FF920F931F93CF93DF93EC010A -:104E1000009709F46EC0D12CEE24E394F12C8E019E -:104E20000F5F1F4FFE018491843748F4843008F0EF -:104E30004CC0813071F0823009F05BC01EC08537F4 -:104E400009F43FC080F1982F9458903708F051C072 -:104E50003FC02296F8018491982F905E983050F4CC -:104E60008770FE2D01C0FF0F8A95EAF78F2F0E94F1 -:104E7000142913C00E94901E2FC02296F80184911D -:104E8000982F905E983060F48770FE2D01C0FF0F60 -:104E90008A95EAF78F2F0E941A290E943D291CC08B -:104EA0000E94581F19C02296F801049107C08FE98B -:104EB0009FE00197F1F700C0000001500111F7CF0A -:104EC0000BC02296F801D49007C00E94901E03C028 -:104ED0008F770E94581FE8018D2D07C08150EFE9A0 -:104EE000FFE03197F1F700C00000882309F497CF65 -:104EF000F5CFDF91CF911F910F91FF90EF90DF9051 -:104F000008956093E1027093E2028093E30290932C -:104F1000E4020C9477236093DD027093DE028093A9 -:104F2000DF029093E0020C94772308950C9481277C -:104F30000F931F930091E1021091E2022091E3028E -:104F40003091E402602B712B822B932B1F910F91D8 -:104F50000C9481270F931F930091E1021091E202BC -:104F60002091E3023091E402602371238223932392 -:104F70001F910F910C9481270F931F930091E102D1 -:104F80001091E2022091E3023091E4026027712740 -:104F9000822793271F910F910C94812760E070E086 -:104FA000CB010C948B2741E050E060E070E004C03E -:104FB000440F551F661F771F8A95D2F7CB01BA01A0 -:104FC0000C948B2741E050E060E070E004C0440F97 -:104FD000551F661F771F8A95D2F78091DD02909149 -:104FE000DE02A091DF02B091E002482B592B6A2B20 -:104FF0007B2BCB01BA010C948B2741E050E060E0A1 -:1050000070E004C0440F551F661F771F8A95D2F7C2 -:1050100040955095609570958091DD029091DE02EB -:10502000A091DF02B091E002482359236A237B2339 -:10503000CB01BA010C948B2741E050E060E070E0B6 -:1050400004C0440F551F661F771F8A95D2F78091C1 -:10505000DD029091DE02A091DF02B091E0024827CC -:1050600059276A277B27CB01BA010C948B270F9312 -:105070001F930091DD021091DE022091DF0230913A -:10508000E002602B712B822B932B1F910F910C94BC -:105090008B270F931F930091DD021091DE02209168 -:1050A000DF023091E00260237123822393231F915A -:1050B0000F910C948B270F931F930091DD02109199 -:1050C000DE022091DF023091E00260277127822703 -:1050D00093271F910F910C948B270895CF92DF9205 -:1050E000EF92FF920F931F93CF93DF93EC01C09049 -:1050F000E102D090E202E090E302F090E4028091BD -:10510000DD029091DE02A091DF02B091E002C82A98 -:10511000D92AEA2AFB2A0FE110E0B701A601002EE6 -:1051200004C076956795579547950A94D2F740FF46 -:1051300008C0BE01802F0E94B3048130910509F0A0 -:1051400007C00150110948F7BE0180E00E94B30476 -:10515000DF91CF911F910F91FF90EF90DF90CF9053 -:10516000089540918B0150918C0120E030E09FEF39 -:10517000FA01E20FF31F62816817A1F09F3F19F453 -:10518000611101C0922F2F5F3F4F2630310581F70B -:1051900007C0FA01E90FF11D97FDFA958283089582 -:1051A0009F3FB9F7089540918B0150918C0120E009 -:1051B00030E0FA01E20FF31F9281981301C01282CE -:1051C0002F5F3F4F26303105A1F7089581E090E031 -:1051D000E0918B01F0918C01E80FF91F108201968C -:1051E00088309105A9F708959091E502982B909346 -:1051F000E502089580959091E50298239093E50249 -:1052000008951092E50208959091E602982B9093EC -:10521000E602089580959091E60298239093E60225 -:1052200008951092E60208959091E702982B9093CA -:10523000E702089580959091E70298239093E70202 -:1052400008951092E70208958093E802089510925D -:10525000E802089540918B0150918C0120E030E0EC -:1052600080E0FA01E20FF31F918191118F5F2F5FB0 -:105270003F4F27303105A9F70895E0918B01F09158 -:105280008C018091E5028083E0918B01F0918C018B -:1052900080819091E602892B8083E0918B01F091CF -:1052A0008C0180819091E702892B80839091E802A4 -:1052B000992361F0E0918B01F0918C018081892B21 -:1052C00080830E942A2981110E94272980918B01C5 -:1052D00090918C010C94591D8091FB03843039F11D -:1052E0001092F20220E488E190E00FB6F894A895BD -:1052F000809360000FBE2093600080E00E949B03BB -:1053000080E00E942C0683B7817F846083BF83B7CF -:10531000816083BF7894889583B78E7F83BF88E14F -:105320000FB6F89480936000109260000FBE08954D -:1053300008950895CF9380E00E949B030E949829CE -:105340000E94E9070E949929C0E08C2F0E94390928 -:10535000892B29F4CF5FC530C1F780E001C081E01F -:10536000CF9108950E948B2380E00E949B030E94AE -:1053700065300E944D1D0C942C061F920F920FB6A3 -:105380000F9211248F939F93AF93BF938091F2025A -:10539000811113C08091F3029091F402A091F50263 -:1053A000B091F6024196A11DB11D8093F302909336 -:1053B000F402A093F502B093F602BF91AF919F91D2 -:1053C0008F910F900FBE0F901F90189582E084BDB3 -:1053D00093E095BD9AEF97BD80936E0008958FB7C7 -:1053E000F8944091F3025091F4026091F5027091AB -:1053F000F6028FBFCA010895CF92DF92EF92FF921B -:105400000F931F932FB7F8944091F3025091F40239 -:105410006091F5027091F6022FBF6A017B01EE24C4 -:10542000FF248C0120E030E0C016D106E206F3062E -:1054300020F09A01281B390B05C09C01209530955E -:10544000240F351FC9011F910F91FF90EF90DF903E -:10545000CF9008951F920F920FB60F9211248F9341 -:105460009F93AF93BF938091F3029091F402A09128 -:10547000F502B091F6020196A11DB11D8093F302D1 -:105480009093F402A093F502B093F602BF91AF910E -:105490009F918F910F900FBE0F901F9018950E94B3 -:1054A0009516F8942FEF87EA91E6215080409040BE -:1054B000E1F700C0000087E090EBDC018093050479 -:1054C00090930604A0930704B09308042CE088E1AD -:1054D00090E00FB6F894A895809360000FBE2093DB -:1054E0006000FFCFCF92DF92EF92FF920F931F9356 -:1054F000CF93DF93C82ED12C01E010E08D2D0E94B8 -:1055000039097C01C0E0D0E098010C2E02C0220FC6 -:10551000331F0A94E2F72E213F21232B29F42196F1 -:10552000CC30D10589F708C06C2F7D2D80E00E941A -:105530008E04C812F4CF06C0D39485E0D812DECF13 -:1055400080E001C081E0DF91CF911F910F91FF902A -:10555000EF90DF90CF900895CF93C82F8CE20E94F8 -:10556000722A882321F08C2FCF910C94722A80E02C -:10557000CF910895CF930E94FD2B811102C00E940C -:10558000DE2BC5E608C00E94E9078FE39CE901977E -:10559000F1F700C00000C150B1F789E20E94AC2AC7 -:1055A00081110AC18AE20E94AC2A81110E94DE2B7D -:1055B00085E00E94AC2A81110E944F2A0E94082C8B -:1055C0008093F10287E00E94AC2A882399F18BE155 -:1055D0000E94AC2A882351F09091F10291FB882718 -:1055E00080F921E0822780FB91F922C08EE00E94A1 -:1055F000AC2A882351F09091F10292FB882780F920 -:1056000021E0822780FB92F913C080E10E94AC2A3E -:105610009091F102882341F093FB882780F921E0E3 -:10562000822780FB93F904C0892F809580FB90F935 -:105630009093F1028091F1020E940C2C0E941A2C8E -:105640008093020380EE0E94AC2A882341F080916F -:105650000203982F909590FB80F98093020389E3D1 -:105660000E94AC2A882359F09091020391FB88276D -:1056700080F921E0822780FB91F99093020382EE6A -:105680000E94AC2A882359F09091020392FB88274C -:1056900080F921E0822780FB92F99093020386EE45 -:1056A0000E94AC2A882359F09091020393FB88272B -:1056B00080F921E0822780FB93F99093020383EE27 -:1056C0000E94AC2A882359F09091020394FB88270A -:1056D00080F921E0822780FB94F99093020385E30F -:1056E0000E94AC2A882359F09091020395FB8827E9 -:1056F00080F921E0822780FB95F99093020381E3F2 -:105700000E94AC2A882359F09091020396FB8827C7 -:1057100080F921E0822780FB96F99093020381E1D2 -:105720000E94AC2A882359F09091020397FB8827A6 -:1057300080F921E0822780FB97F990930203809102 -:1057400002030E941E2C87E20E94AC2AC82F8EE121 -:105750000E94AC2A8111C2608FE10E94AC2A8111A3 -:10576000C46080E20E94AC2A8111C86081E20E947C -:10577000AC2A8111C06182E20E94AC2A8111C06210 -:1057800083E20E94AC2A8111C06484E20E94AC2AA8 -:10579000882311F0C06802C0CC2329F08C2F0E940E -:1057A000152C6C2F03C00E94112C682F70E080E034 -:1057B00090E0CF910C949627CF9108956DEE7EEFF7 -:1057C00080E090E00E94CC3460E082E090E00E94B3 -:1057D000BE3460E083E090E00E94BE3460E084E08C -:1057E00090E00E94BE3460E085E090E00E94BE340C -:1057F00060E086E090E00C94BE3480E090E00E948F -:10580000B83421E08D3E9E4F09F020E0822F0895AC -:1058100082E090E00C94B034682F82E090E00C9429 -:10582000BE3483E090E00C94B034682F83E090E0C5 -:105830000C94BE3484E090E00C94B034682F84E083 -:1058400090E00C94BE3486E090E00C94B034682F65 -:1058500086E090E00C94BE348091FF0280FF0BC084 -:105860006091900185E0689FB0011124759567955E -:10587000759567952AC081FF09C06091900185E008 -:10588000689FB0011124759567951FC082FF07C0FE -:105890006091900185E0689FB001112416C040918D -:1058A000F9024423C9F060918F01461788F72091CF -:1058B000900185E0289F90011124429FC001439FE1 -:1058C000900D112470E00E949C346038710540F402 -:1058D0006115710539F002C065E070E0862F08950A -:1058E0008FE7089581E008958091FF0280FF08C04E -:1058F00060918E0170E0759567957595679521C0EB -:1059000081FF06C060918E0170E07595679519C0A2 -:1059100082FF04C060918E0170E010C08091F90296 -:105920008823C1F060918D018617A0F790918E01B8 -:10593000989FC001112470E00E949C34603871056A -:1059400028F46115710521F0862F08958FE70895D9 -:1059500081E0089561E070E0F4CF803F21F40E947F -:105960002C2C819504C0813F29F40E942C2C80931B -:10597000FC020895823F21F40E942C2C819504C0E2 -:10598000833F29F40E942C2C8093FB020895893FC9 -:1059900019F40E94742C05C08A3F31F40E94742CC3 -:1059A00081958093FD0208958B3F21F40E94742C11 -:1059B000819504C08C3F29F40E94742C8093FE02D0 -:1059C0000895843F21F48091FA02816017C0853FD9 -:1059D00021F48091FA02826011C0863F21F4809107 -:1059E000FA0284600BC0873F21F48091FA0288603C -:1059F00005C0883F31F48091FA0280618093FA02F9 -:105A000008958D3F21F48091FF0281600BC08E3F8D -:105A100021F48091FF02826005C08F3F29F48091BC -:105A2000FF0284608093FF020895803F29F48091F3 -:105A3000FC0287FF6EC007C0813F41F48091FC02E9 -:105A400018160CF066C01092FC0263C09091FB0225 -:105A5000823F19F497FF5DC005C0833F31F41916EA -:105A60000CF057C01092FB0254C0893F31F4809172 -:105A7000FD0218160CF04DC006C08A3F39F4809123 -:105A8000FD0287FF46C01092FD0243C08B3F29F400 -:105A90008091FE0287FF3DC006C08C3F39F48091A3 -:105AA000FE021816B4F51092FE0233C0843F21F4B2 -:105AB0008091FA028E7F05C0853F31F48091FA0211 -:105AC0008D7F8093FA0225C0863F21F48091FA02EF -:105AD0008B7FF7CF873F21F48091FA02877FF1CF48 -:105AE000883F21F48091FA028F7EEBCF8D3F21F425 -:105AF0008091FF028E7F0BC08E3F21F48091FF02C8 -:105B00008D7F05C08F3F29F48091FF028B7F8093AA -:105B1000FF028091FB0281110EC08091FC02811175 -:105B20000AC08091FD02811106C08091FE028111A0 -:105B300002C01092F90208958AEF92E00E94641D5B -:105B40000E94EF299093F8028093F7020895CF9373 -:105B50008091F7029091F8020E94FC294091F9028D -:105B6000442321F02091910130E006C02091920160 -:105B70005AE0259F900111248217930708F486C0EC -:105B80008091FB0281110DC09091FC02911109C01E -:105B90009091FD02911105C09091FE02992309F4A4 -:105BA00075C04F3F19F04F5F4093F902181624F467 -:105BB0000E942C2C8093FB028091FB0287FF05C082 -:105BC0000E942C2C81958093FB028091FC02181678 -:105BD00024F40E942C2C8093FC028091FC0287FF0D -:105BE00005C00E942C2C81958093FC026091FB02E1 -:105BF000662339F1C091FC02CC2319F1772767FDA8 -:105C00007095872F972F0E94003223E333E343E3FD -:105C10005FE30E94B4320E94CD316093FB026C2F8F -:105C2000772767FD7095872F972F0E94003223E317 -:105C300033E343E35FE30E94B4320E94CD316093CB -:105C4000FC028091FD02181624F40E94742C8093AB -:105C5000FD028091FD0287FF05C00E94742C819592 -:105C60008093FD028091FE02181624F40E94742C89 -:105C70008093FE028091FE0287FF05C00E94742C73 -:105C800081958093FE02CF910C949C2DCF91089525 -:105C9000EAEFF2E085E0DF011D928A95E9F71092C4 -:105CA000F9021092FF020895833089F130F48130B7 -:105CB00061F0823009F06EC019C0853009F449C026 -:105CC000B8F1863009F066C055C020919201862F48 -:105CD00090E0820F911D8F3F910520F4620F609339 -:105CE000920108958FEF8093920108952091910180 -:105CF000862F90E0820F911D8F3F910520F4620F57 -:105D00006093910108958FEF809391010895209100 -:105D10009001862F90E0820F911D8F3F910520F416 -:105D2000620F6093900108958FEF80939001089522 -:105D300020918F01862F90E0820F911D8F3F91055A -:105D400020F4620F60938F0108958FEF80938F018D -:105D5000089520918E01862F90E0820F911D8F3F34 -:105D6000910520F4620F60938E0108958FEF809368 -:105D70008E01089520918D01862F90E0820F911D54 -:105D80008F3F910520F4620F60938D0108958FEF8E -:105D900080938D010895833021F130F4813059F0E2 -:105DA000823009F049C012C0853089F128F186306F -:105DB00009F042C037C080919201681720F4861B19 -:105DC000809392010895109292010895809191011B -:105DD000681720F4861B8093910108951092910119 -:105DE000089580919001681720F4861B809390019C -:105DF000089510929001089580918F01681720F402 -:105E0000861B80938F01089510928F0108958091D1 -:105E10008E01681720F4861B80938E0108951092DE -:105E20008E01089580918D01681720F4861B809360 -:105E30008D01089510928D01089541E050E060E0D9 -:105E400070E004C0440F551F661F771F8A95D2F774 -:105E5000CB01BA010E9496270C948B23873200F560 -:105E60008E3108F089C08E3009F469C060F4873043 -:105E700009F44DC018F4863049F531C0883041F13D -:105E80008B3021F57EC0863109F47BC018F4803157 -:105E9000E9F45FC0893109F474C08B31B9F445C0AD -:105EA000883309F46EC048F4893209F467C0853339 -:105EB00009F464C0873251F461C0833409F45EC0D0 -:105EC00018F48A3318F056C0883499F080E00895A9 -:105ED0000E94082C0E941A2C0E94232C52C08091F0 -:105EE000F102817F8E7F8093F10281E08093000335 -:105EF00008950E948B232FEF83ED90E32150804083 -:105F00009040E1F700C000000E944F2A3AC09091F3 -:105F1000F102892F8095817080FB90F919F09660CD -:105F2000986025C0997F977F22C09091F10291FBE4 -:105F3000882780F921E0822780FB91F913C0909196 -:105F4000F10292FB882780F921E0822780FB92F9F9 -:105F500009C09091F10293FB882780F921E0822704 -:105F600080FB93F99093F102882359F0916090930C -:105F7000F10207C0895303C08D5101C080E00E9427 -:105F80001D2F81E0089580E0089580E00895CF936B -:105F9000C82F80910003813071F020F0823009F029 -:105FA00089C037C0A0918B01B0918C018C91823255 -:105FB00009F082C007C0A0918B01B0918C018C9137 -:105FC000823249F48C2F0E94C32F81111EC08C2F66 -:105FD0000E942E2F1CC08C2F0E94C52F811115C02E -:105FE000C43169F030F4CB3081F0C03109F068C0C1 -:105FF00009C0C93221F0C83309F062C006C010924E -:1060000000035EC082E08093000381E090E0817035 -:106010005AC0C932C9F060F4C431B1F020F4C730BD -:1060200009F04CC034C0CE51C63008F047C017C08C -:10603000CE3439F120F4CB3409F040C01CC0C13556 -:10604000C1F0C235D9F513C080910103882319F03E -:106050001092010333C081E08093000334C0EC2F21 -:10606000F0E0E25EFD4F80818093010327C061E094 -:1060700003C061E007C06AE0809101030E94542ED2 -:106080001DC06AE0809101030E94CB2E17C08EE1F3 -:106090008093920182E3809391018AE08093900142 -:1060A00084E180938F0188E080938E0188E2809361 -:1060B0008D0104C01092000380E005C081E003C0A0 -:1060C00080E090E0A4CFCF9108950E94FD2B811134 -:1060D00002C00E94DE2B0E94232C8093040480FFC8 -:1060E00002C0869501C080E00C949B03809104045B -:1060F000982F9695292F30E0233031054CF49F5F7F -:10610000990F8170892B8160809304040E94272C51 -:106110008091040486950C949B0380910404982F2D -:10612000969591F09158990F8170892B8093040472 -:106130008E7F91E009F490E08091040490FB80F957 -:10614000809304040E94272C8091040486950C946B -:106150009B0380910404982F909590FB80F9809385 -:1061600004040E94272C8091040480FF02C08695BD -:1061700001C080E00C949B0330910404232F2695EA -:106180002F5F2F77822F90E0317004972CF4220F2D -:10619000232B2093040402C0309304048091040450 -:1061A000282F2E7F91E009F490E090FB80F98093F6 -:1061B00004040E94272C8091040486950C949B0370 -:1061C00020910404922F96959827990F822F817021 -:1061D000892B809304048E7F91E009F490E08091F4 -:1061E000040490FB80F9809304040E94272C809182 -:1061F000040486950C949B035058BB27AA270ED005 -:1062000075C166D130F06BD120F031F49F3F11F4AD -:106210001EF45BC10EF4E095E7FB51C1E92F77D185 -:1062200080F3BA17620773078407950718F071F4B3 -:106230009EF58FC10EF4E0950B2EBA2FA02D0B0109 -:10624000B90190010C01CA01A0011124FF27591BBB -:1062500099F0593F50F4503E68F11A16F040A22FC1 -:10626000232F342F4427585FF3CF46953795279532 -:10627000A795F0405395C9F77EF41F16BA0B620B31 -:10628000730B840BBAF09150A1F0FF0FBB1F661F78 -:10629000771F881FC2F70EC0BA0F621F731F841FBB -:1062A00048F4879577956795B795F7959E3F08F0E1 -:1062B000B3CF9395880F08F09927EE0F97958795A0 -:1062C0000895D9D008F481E008950CD00FC107D10A -:1062D00040F0FED030F021F45F3F19F0F0C05111D2 -:1062E00039C1F3C014D198F39923C9F35523B1F3FD -:1062F000951B550BBB27AA2762177307840738F035 -:106300009F5F5F4F220F331F441FAA1FA9F333D093 -:106310000E2E3AF0E0E830D091505040E695001C47 -:10632000CAF729D0FE2F27D0660F771F881FBB1F03 -:10633000261737074807AB07B0E809F0BB0B802DDD -:10634000BF01FF2793585F4F2AF09E3F510568F029 -:10635000B6C000C15F3FECF3983EDCF386957795BD -:106360006795B795F7959F5FC9F7880F911D96952B -:10637000879597F90895E1E0660F771F881FBB1F87 -:10638000621773078407BA0720F0621B730B840B34 -:10639000BA0BEE1F88F7E095089504D06894B11108 -:1063A000D9C00895BCD088F09F5790F0B92F992795 -:1063B000B751A0F0D1F0660F771F881F991F1AF010 -:1063C000BA95C9F712C0B13081F0C3D0B1E00895D9 -:1063D000C0C0672F782F8827B85F39F0B93FCCF35A -:1063E000869577956795B395D9F73EF49095809506 -:1063F000709561957F4F8F4F9F4F0895E89409C026 -:1064000097FB3EF490958095709561957F4F8F4FE7 -:106410009F4F9923A9F0F92F96E9BB279395F695FD -:10642000879577956795B795F111F8CFFAF4BB0F7B -:1064300011F460FF1BC06F5F7F4F8F4F9F4F16C0DF -:10644000882311F096E911C0772321F09EE8872F69 -:10645000762F05C0662371F096E8862F70E060E025 -:106460002AF09A95660F771F881FDAF7880F96959E -:10647000879597F90895990F0008550FAA0BE0E842 -:10648000FEEF16161706E807F907C0F012161306F6 -:10649000E407F50798F0621B730B840B950B39F436 -:1064A0000A2661F0232B242B252B21F408950A269C -:1064B00009F4A140A6958FEF811D811D089597F9DC -:1064C0009F6780E870E060E008959FEF80EC08959A -:1064D00000240A94161617061806090608950024C3 -:1064E0000A9412161306140605060895092E03943D -:1064F000000C11F4882352F0BB0F40F4BF2B11F4B1 -:1065000060FF04C06F5F7F4F8F4F9F4F089557FD0F -:106510009058440F551F59F05F3F71F04795880F11 -:1065200097FB991F61F09F3F79F0879508951216A8 -:1065300013061406551FF2CF4695F1DF08C0161654 -:1065400017061806991FF1CF869571056105089405 -:106550000895E894BB2766277727CB0197F908951C -:106560008ADF08F48FEF08950BD0C0CFB1DF28F099 -:10657000B6DF18F0952309F0A2CFA7CF1124EACFF8 -:10658000C6DFA0F3959FD1F3950F50E0551F629F92 -:10659000F001729FBB27F00DB11D639FAA27F00D7C -:1065A000B11DAA1F649F6627B00DA11D661F829FA3 -:1065B0002227B00DA11D621F739FB00DA11D621F88 -:1065C000839FA00D611D221F749F3327A00D611DA5 -:1065D000231F849F600D211D822F762F6A2F112487 -:1065E0009F5750408AF0E1F088234AF0EE0FFF1FDA -:1065F000BB1F661F771F881F91505040A9F79E3F11 -:10660000510570F05CCFA6CF5F3FECF3983EDCF312 -:10661000869577956795B795F795E7959F5FC1F74D -:10662000FE2B880F911D9695879597F90895FA018D -:10663000EE0FFF1F30962105310599F161157105A7 -:1066400061F48038BFE39B0749F168949038810575 -:1066500061F08038BFEF9B0741F0992342F5FF3F7F -:10666000E1053105210511F1E8940894E795D90178 -:10667000AA2329F4AB2FBE2FF85FD0F310C0FF5F21 -:1066800070F4A695E0F7F73950F019F0FF3A38F4B6 -:106690009F779F930CD00F9007FC905808953EF081 -:1066A00014CF60E070E080E89FE308954FE79F77A4 -:1066B0005F934F933F932F939ED02F913F914F9194 -:1066C0005F9152DF05C019F40EF0F9CE42CFFDCE36 -:1066D00026DFC8F39638C0F707F80F92E8942BE34B -:1066E0003AEA48EB5FE74EDF0F920F920F924DB7F9 -:1066F0005EB70F92C0D0ECEAF0E016D04F915F91F8 -:10670000EF91FF91E595EE1FFF1F49F0FE57E068FE -:106710004427EE0F441FFA95E1F74195550B32D00F -:106720000F9007FE26C00895DF93CF931F930F931A -:10673000FF92EF92DF927B018C01689405C0DA2E04 -:10674000EF011EDFFE01E894A59125913591459159 -:106750005591AEF3EF0162DDFE019701A801DA94D5 -:1067600079F7DF90EF90FF900F911F91CF91DF911C -:1067700008959B01AC0160E070E080E89FE3A5CD47 -:106780009ECEACC0CCDEE8F39923D9F3940F511D13 -:10679000BBF39150504094F059F0882332F0660FCB -:1067A000771F881F91505040C1F79E3F510544F715 -:1067B000880F911D9695879597F908955F3FACF0E6 -:1067C000983E9CF0BB27869577956795B79508F41A -:1067D000B1609395C1F7BB0F58F711F460FFE8CF94 -:1067E0006F5F7F4F8F4F9F4FE3CFB4CE0EF076C0D9 -:1067F0006CCE689464CE93DEC8F39923D1F3C6F3CC -:10680000DF93CF931F930F93FF92C92FDD27882328 -:106810002AF02197660F771F881FDAF720E030E013 -:1068200040E85FEB9FE3883920F0803E30F021960E -:106830008F77E3DCE4EDF0E003C0DFDCE1E0F1E0E2 -:1068400073DF8B01BE01EC01FB2E6F57710975954B -:10685000771F880B990BD4DD28E132E741E35FE332 -:106860008FDEAF2D9801AE01FF900F911F91CF9158 -:10687000DF91D4DC3BCEFA01DC01AA0FBB1F9B01E8 -:10688000AC01BF5728F422273327442750781FC074 -:10689000B75188F4AB2F0024469537952795011CF6 -:1068A000A395D2F3002069F0220F331F441FB39544 -:1068B000DAF30DD0A1CC61307105A0E88A07B946A2 -:1068C00030F49B01AC0166277727882790783096B3 -:1068D00021F0208331834283538308959F3F31F019 -:1068E000915020F4879577956795B795880F911DFE -:1068F0009695879597F90895991B79E004C0991F9B -:10690000961708F0961B881F7A95C9F78095089509 -:10691000AA1BBB1B51E107C0AA1FBB1FA617B707C5 -:1069200010F0A61BB70B881F991F5A95A9F78095E1 -:106930009095BC01CD01089597FB072E16F40094A5 -:1069400007D077FD09D00E94883407FC05D03EF4BB -:10695000909581959F4F0895709561957F4F08950B -:10696000F999FECF92BD81BDF89A992780B5089517 -:10697000A8E1B0E042E050E00C94D334262FF9991E -:10698000FECF1FBA92BD81BD20BD0FB6F894FA9A12 -:10699000F99A0FBE019608950E94BE34272F0C94D9 -:1069A000BF34DC01CB01FC01F999FECF06C0F2BD7A -:1069B000E1BDF89A319600B40D9241505040B8F7BD -:0669C0000895F894FFCFDA -:1069C60055D0A446000016440000000000004842CE -:1069D60061978A460000C843000000000000484254 -:1069E60055D024460000C84300000000000048427D -:1069F60000005C460000C84300000000000048425A -:106A060061978A4600007A4455D0A4460000C843E0 -:106A1600000000000000484200005C460000C84339 -:106A2600000000000000484255D0244600001644ED -:106A36000507000C05854000000106400000010026 -:106A4600B91049112511F010BC1001E902280814EB -:106A56000A321E4200450025002600430061006000 -:106A660000200037006400650066006700440046A9 -:106A7600002400470000000200040005000700098A -:106A8600000B000C000E001000110013001500177B -:106A96000018001A001C001D001F002100230024FE -:106AA600002600280029002B002D002F0030003280 -:106AB6000034003500370039003B006E048704A01F -:106AC60004B904E10594055E053E053F4D362002F6 -:106AD60003020000010001010101010001010102A0 -:086AE60003040506070809007E -:00000001FF diff --git a/keyboard/preonic/preonic_pcb.hex b/keyboard/preonic/preonic_pcb_r1.hex similarity index 100% rename from keyboard/preonic/preonic_pcb.hex rename to keyboard/preonic/preonic_pcb_r1.hex diff --git a/keyboard/preonic/preonic_pcb_r1_w_bootloader.hex b/keyboard/preonic/preonic_pcb_r1_w_bootloader.hex new file mode 100644 index 00000000..a29f23c0 --- /dev/null +++ b/keyboard/preonic/preonic_pcb_r1_w_bootloader.hex @@ -0,0 +1,1863 @@ +: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 +:100000000C94A0050C94E4050C94E4050C94E40510 +:100010000C94E4050C94E4050C94E4050C94E405BC +:100020000C94E4050C94E4050C94B6180C9488190F +:100030000C94A1270C94E4050C94E4050C94E405BD +:100040000C94E4050C94E4050C94E4050C94E4058C +:100050000C94E4050C9409280C94E4050C94E40534 +:100060000C94E4050C94E4050C94E4050C94E4056C +:100070000C94E4050C94E4050C94E4050C94E4055C +:100080000C94090F0C94E4050C94E4050C94E4051D +:100090000C94E4050C94E4050C94E4050C94E4053C +:1000A0000C94E4050C94E4050C94E4053F064F061B +:1000B000610671067706860692069706A406AC06C8 +:1000C000BC06C106C813C813C813C813C813C81385 +:1000D000C813C813C813C813DF13DF13DF13DF13EC +:1000E000DF13DF13DF13DF13DF13DF13C813C813AE +:1000F000C813C813C813DF13DF13DF13DF13DF13B5 +:10010000C813C813C813DF13DF13DF13F519171A49 +:10011000051B171A051B5C1A7F1A051BD41AE71A50 +:10012000EA1DEA1D271E271E811EBF1E372137210B +:10013000D81E3721D91FD91F9C20B3203721222157 +:1001400007634236B79BD8A71A39685618AEBAABC0 +:10015000558C1D3CB7CC5763BD6DEDFD753EF61754 +:100160007231BF000000803F08000000BE922449A9 +:10017000123EABAAAA2ABECDCCCC4C3E00000080D9 +:10018000BEABAAAAAA3E00000000BF000000803F4C +:100190000000000000084178D3BB4387D1133D190C +:1001A0000E3CC3BD4282AD2B3E68EC8276BED98F39 +:1001B000E1A93E4C80EFFFBE01C4FF7F3F0000007D +:1001C000000035001E001F00200021002200230037 +:1001D00024002500260027002A002B0014001A0006 +:1001E0000800150017001C0018000C001200130076 +:1001F0004C00290004001600070009000A000B004B +:100200000D000E000F0033003400E1001D001B0044 +:1002100006001900050011001000360037003800F4 +:1002200028000530E000E200E30003302C002C0041 +:1002300004305000510052004F0035001E001F00D6 +:100240002000210022002300240025002600270092 +:100250002A002B0014001A00090013000A000D00E8 +:100260000F0018001C0033004C002900040015008A +:100270001600170007000B00110008000C00120008 +:100280003400E1001D001B000600190005000E00EF +:10029000100036003700380028000530E000E2008A +:1002A000E30003302C002C000430500051005200B9 +:1002B0004F0035001E001F002000210022002300F7 +:1002C00024002500260027002A002B0034003600D9 +:1002D000370013001C0009000A00060015000F007B +:1002E0004C00290004001200080018000C00070050 +:1002F0000B001700110016003800E1003300140055 +:100300000D000E001B00050010001A0019001D0052 +:1003100028000530E000E200E30003302C002C0050 +:1003200004305000510052004F0035021E021F02DF +:100330002002210222022302240225022602270291 +:100340002A0035021E021F0220022102220223027D +:1003500024022502260227024C004C003A003B00F2 +:100360003C003D003E003F002D022E022F023002D5 +:1003700031020100400041004200430044004500BA +:100380000100010001000100010001000100010065 +:1003900001000100010001000100AB00AA00A9005A +:1003A000AE0035001E001F002000210022002300A7 +:1003B00024002500260027002A0035001E001F000B +:1003C0002000210022002300240025002600270011 +:1003D0004C004C003A003B003C003D003E003F001A +:1003E0002D002E002F0030003100010040004100A0 +:1003F00042004300440045000100010001000100EB +:1004000001000100010001000100010001000100E4 +:100410000100AB00AA00A900AE000000000000002F +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:100480000000033000000000043000000000000005 +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:1009000000000000000000000000000000000000E7 +:1009100000000000000000000000000000000000D7 +:1009200000000000000000000000000000000000C7 +:1009300000000000000000000000000000000000B7 +:1009400000003A003B003C003D003E003F004000FC +:1009500041004200430044004500010000500100F6 +:10096000010001000100010001000100010001007F +:100970004C000100010001000730063013501250F6 +:100980000030013002300100010001000B300A305C +:1009900009300830010001000100010001000100E0 +:1009A000010001000100010001000100010001003F +:1009B000010001000100010001002A035400680049 +:1009C000650020005000720065006F006E00690035 +:1009D000630020004B006500790062006F00610039 +:1009E0007200640000002C034F0072007400680065 +:1009F0006F006C0069006E006500610072002000ED +:100A00004B006500790062006F00610072006400B5 +:100A1000730000000403090409025400030100A04C +:100A2000FA0904000001030101000921110100017C +:100A3000223F000705810308000A090401000103A1 +:100A4000010200092111010001224D000705820366 +:100A500008000A0904020001030000000921110135 +:100A600000012236000705830308000A1201100165 +:100A700000000008EDFE61600100010200010501B7 +:100A80000980A101850216010026B7001A01002A7B +:100A9000B700751095018100C0050C0901A1018501 +:100AA00003160100269C021A01002A9C027510956B +:100AB000018100C005010902A1010901A100050988 +:100AC000190129051500250195057501810295017A +:100AD000750381010501093009311581257F9502D2 +:100AE0007508810609381581257F950175088106ED +:100AF000050C0A38021581257F950175088106C00D +:100B0000C005010906A101050719E029E71500251F +:100B10000195087501810295017508810105081983 +:100B2000012905950575019102950175039101054E +:100B300007190029FF150025FF950675088100C0DB +:100B400011241FBECFEFDAE0DEBFCDBF04B603FE37 +:100B500024C08091A3039091A403A091A503B09118 +:100B6000A6038730904BA740B04BB9F41092A30373 +:100B70001092A4031092A5031092A60314BE84B78A +:100B8000877F84BF88E10FB6F8948093600010924D +:100B900060000FBEE0E0F8E3099512E0A0E0B1E0EC +:100BA000EAEEF2E602C005900D92A83AB107D9F735 +:100BB00013E0A8EAB2E001C01D92A33AB107E1F741 +:100BC0000E94FC150C9473310C940000279A2F9806 +:100BD0008FEF9FEF90938700809386008AE0809349 +:100BE000800089E1809381000C94F82C282F8111DA +:100BF0000BC080918000877F8093800010928D00D1 +:100C000010928C002F9808952F9880918000886012 +:100C100080938000233019F48FEF9FEF0FC083E0A3 +:100C200090E0821B9109880F991F2FEF3FEFA901D8 +:100C300002C0569547958A95E2F7CA0190938D00B8 +:100C400080938C000895CF93DF93EC010E949D2840 +:100C5000BE0180E090E0DF91CF910C9417250F93B7 +:100C60001F93462F50E04C30510508F098C0DC012E +:100C7000FA01EA5AFF4F12968C910C94373188236F +:100C800009F48DC000E010E0980140E064E070E0FD +:100C90008BEC91E00E94871281E090E00FC08823E6 +:100CA00009F47DC000E010E0980140E066E070E0EB +:100CB0008BE591E00E94871282E090E00E9423067B +:100CC0006EC0882309F46BC000E010E0980140E09A +:100CD00068E070E08BE891E00E94871284E090E089 +:100CE000EDCF882311F083E005C083E00CC088239A +:100CF00049F084E00E94942540E164E083E00E9492 +:100D0000ED0A4DC084E00E94B525F6CF882331F06E +:100D100085EE0E947E1C0E944F2D41C085EE0E94F0 +:100D2000461D3DC08823D9F10E941B0E38C0882380 +:100D3000B1F10E94140E00E010E0980140E064E080 +:100D400070E08BEE91E029C0882349F185E00E9494 +:100D5000B5250E943C0E23C0882309F100E010E075 +:100D6000980140E068E070E08BE191E00E9487121A +:100D700085E00E94942513C0882389F00E941A13ED +:100D800004C0882361F00E94251300E010E0980160 +:100D900040E068E070E08BE191E00E94871280E023 +:100DA00090E01F910F9108950F931F932FEF89EFFC +:100DB00090E0215080409040E1F700C0000000E04A +:100DC00010E0980140E064E070E08BEE91E00E945A +:100DD00087121F910F910895CF92DF92EF92FF92A9 +:100DE0000F931F93CF93DF93CDB7DEB7CC58D109C4 +:100DF0000FB6F894DEBF0FBECDBF2091630325FF71 +:100E0000C5C08C01FC01928180910201992309F4F3 +:100E100060C096E4E7E2F2E0DE01A95BBF4F01901B +:100E20000D929A95E1F7F8019081E0910001F0911F +:100E30000101E90FF11DEE0FFF1F27E430E02C0F39 +:100E40003D1FE20FF31F60817181680F711D8827BC +:100E500077FD8095982F0E94932E20E030E040E4AB +:100E600051E40E94F82D6B017C01F801218185E09D +:100E700090E0821B9109BC01882777FD8095982F0F +:100E80000E94932E9B01AC01C701B6010E94902DD8 +:100E90009B01AC0160E070E080E090E40E94AA2F2A +:100EA00020E030E04CE551E40E94472F4FE050E055 +:100EB000C457DF4F0FB6F894DEBF0FBECDBFDF9132 +:100EC000CF911F910F91FF90EF90DF90CF900C94F6 +:100ED000271296E4E7E2F2E0DE01119601900D920E +:100EE0009A95E1F7F8019081E0910001F0910101FC +:100EF000E90FF11DEE0FFF1F21E030E02C0F3D1F29 +:100F0000E20FF31F60817181680F711D882777FDE3 +:100F10008095982F0E94932E20E030E040E451E429 +:100F20000E94F82D6B017C01F801218185E090E0A1 +:100F3000821B9109BC01882777FD8095982F0E941C +:100F4000932E9B01AC01C701B6010E94902D9B011D +:100F5000AC0160E070E080E090E40E94AA2F20E005 +:100F600030E04CE551E40E94472FC457DF4F0FB6E5 +:100F7000F894DEBF0FBECDBFDF91CF911F910F91CF +:100F8000FF90EF90DF90CF900C946F0EC457DF4F1F +:100F90000FB6F894DEBF0FBECDBFDF91CF911F918A +:100FA0000F91FF90EF90DF90CF9008950F931F93D4 +:100FB00000E010E0980140E063E070E083E091E041 +:100FC0000E9487122FEF82E597E0215080409040E9 +:100FD000E1F700C000001F910F91089508950E944D +:100FE000E6056E9A769A0C94D4060C94EE070C944F +:100FF000EC060895880F991FFC01EE5BFF4F859169 +:1010000094910895880F991FFC01EE53FE4F85912E +:10101000949108950F931F93CF93DF93EC01811563 +:1010200020E49207A0F5C11580E3D80708F0E1C0DD +:10103000C83ED105D8F4C03ED10508F0EEC1C83A8B +:10104000D10578F4C53AD10508F074C0C130D10596 +:1010500009F46DC008F4DEC1C430D10508F0DDC16B +:10106000D9C1CB3BD10508F470C0D4C1C11590E201 +:10107000D90708F0B9C0C11521E0D20708F0CDC1E9 +:10108000C03FD10508F4C6C18E01106506C2C1304B +:1010900080E5D80709F4BDC068F5C13120E4D20766 +:1010A00009F4AEC050F4C03190E4D90708F0A5C0EF +:1010B000CF70DD278E01146DF0C1C33120E4D2075B +:1010C00009F4A4C008F49FC0C115D04509F0A2C11D +:1010D0000E945B210E943C0E0E94D6079FEF24E3F2 +:1010E0008CE0915020408040E1F700C000000E9459 +:1010F0002E28D3C1C11520E6D20730F4C11581E5F1 +:10110000D80708F48CC02DC1C11590E7D90708F4A1 +:1011100081C1C11520E8D20708F478C1C11580E962 +:10112000D80708F077C1DF708E01106AB6C101E000 +:1011300010E0B3C1C53AD10509F471C1C63AD10571 +:1011400009F070C102E810E4A8C1C83AD10509F459 +:101150006CC1C93AD10509F46BC1CA3AD10509F489 +:101160006AC1CB3AD10509F469C1CC3AD10509F479 +:1011700068C1CD3AD10509F467C1C03BD10509F476 +:1011800066C1CE3AD10509F465C1CF3AD10509F45B +:1011900064C1C13BD10509F463C1C23BD10509F467 +:1011A00062C1C33BD10509F461C1C43BD10509F457 +:1011B00060C1C53BD10509F45FC1C63BD10509F447 +:1011C0005EC1C73BD10509F45DC1C83BD10509F437 +:1011D0005CC1C93BD10509F45BC1CA3BD10509F427 +:1011E0005AC100E014E459C1CE019F700E94020868 +:1011F00055C1DD278E01106C50C100E011ED4DC1CD +:1012000000E010ED4AC100E012ED47C100E013ED2F +:1012100044C1809177038160809377033EC10E942F +:101220008A28811102C00E9466280E94A22890E0AC +:101230009093A2038093A103C23090E5D90721F4D3 +:101240008091A103816086C0C43020E5D20721F4DB +:101250008091A10382607EC0C63080E5D80721F46A +:101260008091A103846076C0C83090E5D90719F455 +:101270008091A10327C0CA3020E5D20721F48091D4 +:10128000A103806167C0CC3080E5D80721F480914C +:10129000A10380625FC0CE3090E5D90721F4809130 +:1012A000A103806457C0C03120E5D20721F48091AA +:1012B000A10380684FC0C23180E5D80729F480912E +:1012C000A1038460886046C0C33090E5D90721F44B +:1012D0008091A1038E7F3EC0C53020E5D20721F466 +:1012E0008091A1038D7F36C0C73080E5D80721F4F7 +:1012F0008091A1038B7F2EC0C93090E5D90719F4E6 +:101300008091A10326C0CB3020E5D20721F4809143 +:10131000A1038F7E1FC0CD3080E5D80721F48091D6 +:10132000A1038F7D17C0CF3090E5D90721F48091BC +:10133000A1038F7B0FC0C13120E5D20721F480913A +:10134000A1038F7707C0C331D04531F48091A10349 +:101350008B7F877F8093A1038091A1030E94A628A1 +:101360009CC08D2F99278F70992781309105D9F4D2 +:101370009E012370332702C0880F991F2A95E2F738 +:101380009C688E0144E0000F111F4A95E1F7002789 +:101390001370802B912B53E0CC0FDD1F5A95E1F792 +:1013A000C076DD272FC08230910531F4DC2FCC27A9 +:1013B0008E01016F106A71C08330910569F4CE010E +:1013C0008370992701E010E002C0000F111F8A9579 +:1013D000E2F7C8019C680FC0049709F05EC0CE0117 +:1013E0008370992701E010E002C0000F111F8A9559 +:1013F000E2F7C8019A6823E0CC0FDD1F2A95E1F7D8 +:10140000C07ED7708C010C2B1D2B47C0DF708E0166 +:10141000106243C000E010E040C08E013EC001E811 +:1014200010E43BC003E810E438C002EE14E435C019 +:1014300009EE14E432C00AEE14E42FC005EB14E404 +:101440002CC006EB14E429C007EB14E426C00CEC16 +:1014500014E423C00DEC14E420C003E815E41DC01F +:101460000AE815E41AC002E915E417C004E915E416 +:1014700014C001E216E411C003E216E40EC004E257 +:1014800016E40BC005E216E408C006E216E405C047 +:1014900007E216E402C00AE216E4C801DF91CF9128 +:1014A0001F910F9108959CE0799FF00111249CE316 +:1014B000899FE00DF11D1124E60FF11DEE0FFF1FB6 +:1014C000EE53FE4F85919491803E9105E0F4803C6F +:1014D000910558F58133910509F46FC048F48932BC +:1014E000910509F463C08A32910509F46DC072C098 +:1014F00089339105E9F082389105D1F08533910562 +:1015000009F44DC067C0833E910581F138F4803EF7 +:101510009105B9F0823E9105D9F05CC0863E9105F7 +:1015200061F1873E9105A1F155C00E94FA07089527 +:101530002091A10320FD02C021FF4CC080EE90E06D +:1015400049C08091A10380FFF9CF89E390E042C0B8 +:101550008091A10382FF0EC08091A10384FF03C08C +:1015600080E090E037C083EE90E034C08091A1032A +:1015700082FFF2CF82EE90E02DC08091A10383FF25 +:101580000BC08091A10384FDEBCF87EE90E022C0D9 +:101590008091A10383FFF5CF86EE90E01BC0809180 +:1015A000A10385FF07C089E290E014C08091A103E8 +:1015B00085FFF9CF85E390E00DC08091A10386FF00 +:1015C00007C08AE290E006C08091A10386FFF9CFB0 +:1015D00081E390E00E940A080895CF92DF92EF9293 +:1015E000FF920F931F9301E010E020E030E06801CC +:1015F000790104C0CC0CDD1CEE1CFF1C8A95D2F7CF +:1016000004C0000F111F221F331F6A95D2F70C2947 +:101610001D292E293F29C0906303D0906403E090D8 +:101620006503F0906603C022D122E222F322842FC8 +:10163000C016D106E206F30641F41F910F91FF9008 +:10164000EF90DF90CF900C9494251F910F91FF9015 +:10165000EF90DF90CF900C94B52508950C942D0B4E +:101660005F926F927F928F929F92AF92BF92CF9232 +:10167000DF92EF92FF920F931F93CF93DF93CDB73B +:10168000DEB72A970FB6F894DEBF0FBECDBFCE01EE +:1016900001966C014E019BE0890E911C20E030E028 +:1016A00040E050E060E070E000E010E0E12CF12C60 +:1016B0006C2C5D2C8AE0782EAA24A394B12CEDE644 +:1016C000F2E0A62DB52D872D01900D928A95E1F7B8 +:1016D000F601819191916F01FC01E07FFF27E032DB +:1016E000F10559F48F709927F50102C0EE0FFF1F25 +:1016F0008A95E2F7EE2AFF2A37C0E033F10559F464 +:101700008F709927F50102C0EE0FFF1F8A95E2F74F +:101710000E2B1F2B29C0E034F10559F48F70992747 +:10172000F50102C0EE0FFF1F8A95E2F76E2B7F2BAB +:101730001BC0E035F10559F48F709927F50102C0FF +:10174000EE0FFF1F8A95E2F74E2B5F2B0DC0E036A0 +:10175000F10551F48F709927F50102C0EE0FFF1FBC +:101760008A95E2F72E2B3F2BC814D90409F0A7CF96 +:1017700084B19E2D9095892384B985B1E82AE5B876 +:1017800087B1902F9095892387B988B1082B08B924 +:101790008AB1962F909589238AB98BB1682B6BB942 +:1017A0008DB1942F909589238DB98EB1482B4EB968 +:1017B00080B3922F9095892380BB81B3282B21BBC6 +:1017C0002A960FB6F894DEBF0FBECDBFDF91CF9142 +:1017D0001F910F91FF90EF90DF90CF90BF90AF904F +:1017E0009F908F907F906F905F9008955F926F921F +:1017F0007F928F929F92AF92BF92CF92DF92EF92A1 +:10180000FF920F931F93CF93DF93CDB7DEB7689707 +:101810000FB6F894DEBF0FBECDBF85B7806885BF19 +:1018200085B7806885BF0E94300BCE0101966C01A0 +:101830004E0199E1890E911C20E030E040E050E03B +:1018400060E070E000E010E0E12CF12C6C2C5D2CED +:1018500088E1782EAA24A394B12CE7E7F2E0A62D24 +:10186000B52D872D01900D928A95E1F7F6018191B2 +:1018700091916F01FC01E07FFF27E032F10559F4FF +:101880008F709927F50102C0EE0FFF1F8A95E2F7CE +:10189000EE2AFF2A37C0E033F10559F48F709927FB +:1018A000F50102C0EE0FFF1F8A95E2F70E2B1F2BEA +:1018B00029C0E034F10559F48F709927F50102C071 +:1018C000EE0FFF1F8A95E2F76E2B7F2B1BC0E035D2 +:1018D000F10559F48F709927F50102C0EE0FFF1F33 +:1018E0008A95E2F74E2B5F2B0DC0E036F10551F4DF +:1018F0008F709927F50102C0EE0FFF1F8A95E2F75E +:101900002E2B3F2BC814D90409F0A7CF84B19E2DEC +:101910009095892384B985B1E82AE5B887B1902FDD +:101920009095892387B988B1082B08B98AB1962F79 +:10193000909589238AB98BB1682B6BB98DB1942F9F +:10194000909589238DB98EB1482B4EB980B3922FD3 +:101950009095892380BB81B3282B21BBE2EBF2E079 +:10196000A8EAB2E0119211921D921D9282E0EC3B26 +:10197000F807C1F768960FB6F894DEBF0FBECDBF6B +:10198000DF91CF911F910F91FF90EF90DF90CF905B +:10199000BF90AF909F908F907F906F905F900C94CE +:1019A000EF075F926F927F928F929F92AF92BF925A +:1019B000CF92DF92EF92FF920F931F93CF93DF931B +:1019C000CDB7DEB7A2970FB6F894DEBF0FBECDBF7E +:1019D0006E0149E1C40ED11C88EAA82E82E0B82E1F +:1019E00075019AE0592E460101E010E028E1622ECF +:1019F00035E0732EEDE6F2E0D401852D01900D92D5 +:101A00008A95E1F7D6018D919D916D019C01207F12 +:101A100033272032310591F424B18F709927F801D2 +:101A200002C0EE0FFF1F8A95E2F7CF01922F982B8D +:101A300094B995B18095892385B953C02033310578 +:101A400091F427B18F709927A80102C0440F551F48 +:101A50008A95E2F7CA01922F982B97B998B1809591 +:101A6000892388B93EC02034310591F42AB18F70A2 +:101A70009927D80102C0AA0FBB1F8A95E2F7CD01B2 +:101A8000922F982B9AB99BB1809589238BB929C045 +:101A90002035310591F42DB18F709927F80102C0DE +:101AA000EE0FFF1F8A95E2F7CF01922F982B9DB979 +:101AB0009EB1809589238EB914C02036310589F4F2 +:101AC00020B38F709927A80102C0440F551F8A9533 +:101AD000E2F7CA01922F982B90BB91B3809589238E +:101AE00081BB50EA5A95F1F7BE016F5F7F4F20E04E +:101AF00030E040E050E0E7E7F2E0DE011196862DAD +:101B000001900D928A95E1F7DB018D919D91BD01C8 +:101B1000FC01E07FFF27E032F10511F4E3B113C0CF +:101B2000E033F10511F4E6B10EC0E034F10511F433 +:101B3000E9B109C0E035F10511F4ECB104C0E036BB +:101B4000F105B9F4EFB1F0E08F70992702C0F59577 +:101B5000E7958A95E2F7E0FD08C0C801042E02C0AF +:101B6000880F991F0A94E2F702C080E090E0282BCA +:101B7000392B4F5F5F4F4C30510509F0BCCFF70157 +:101B8000808191818217930721F0318320837092A5 +:101B90000B020E94300BF2E0EF0EF11C42EBE41658 +:101BA00042E0F40609F026CF80910B028823C9F0A9 +:101BB000815080930B02882339F08FE99FE00197D1 +:101BC000F1F700C000000DC0E2EBF2E0D5018D910D +:101BD0009D915D0181939193B2EBAB16B2E0BB0690 +:101BE000A9F70E94F50781E0A2960FB6F894DEBF30 +:101BF0000FBECDBFDF91CF911F910F91FF90EF905E +:101C0000DF90CF90BF90AF909F908F907F906F901C +:101C10005F900895E82FF0E0EE0FFF1FEE54FD4FA8 +:101C2000808191810895089580918C0381608093D3 +:101C30008C030C94B82880918C038E7F80938C0346 +:101C40000C94B8280E948A28811102C00E9466283C +:101C50000E94B42880938C033E9A809171008D7FFE +:101C60008093710082E0809390008AE180939100DC +:101C700081E08093BE0208958091BE02811102C06E +:101C80000E94220E10920E0310920D03809171009B +:101C90008D7F80937100809190008F77809390006A +:101CA0001092D0021092CF021092070310920803F4 +:101CB0001092090310920A03109206031092050372 +:101CC000E5EEF2E0A5EDB2E01192119211921192BF +:101CD0001D921D9283E0E530F807B1F70895CF9289 +:101CE000DF92EF92FF920F931F93CF93DF93209198 +:101CF000CF02222309F484C06B017C018091BE02D3 +:101D0000811102C00E94220E05E013E0C7E0D0E07E +:101D1000A7019601F80192918291729162918F01CF +:101D20000E94F42D811131C0FE01EE0FFF1FEE0F56 +:101D3000FF1FEB51FD4F1082118212821382DE01D0 +:101D4000AA0FBB1FAB52BD4F11961C921E92C730FB +:101D5000D105E9F0219644815581668177814083E0 +:101D600051836283738314821582168217821296BE +:101D70008D919C91139711969C938E9313961C9220 +:101D80001E92129734961296E2CF219708F6809110 +:101D90000D0390910E03019797FD05C090930E03DC +:101DA00080930D0304C010920E0310920D038091D6 +:101DB0000D0390910E0320910B0330910C03281713 +:101DC000390724F010920C0310920B03892BC1F4F5 +:101DD000809171008D7F80937100809190008F774A +:101DE0008093900010920703109208031092090349 +:101DF00010920A0310920603109205031092CF026C +:101E0000DF91CF911F910F91FF90EF90DF90CF90D6 +:101E100008951F920F920FB60F9211244F925F9266 +:101E20006F927F928F929F92AF92BF92CF92DF92EA +:101E3000EF92FF922F933F934F935F936F937F9314 +:101E40008F939F93AF93BF93CF93DF93EF93FF93C2 +:101E50008091CF02882309F49BC1C0910D03D091DA +:101E60000E031C161D060CF093C14090BF0250904B +:101E7000C0026090C1027090C20220E030E0A9016F +:101E8000C301B2010E94432F18160CF065C0C13087 +:101E9000D10509F452C080910B0390910C03BE014F +:101EA0000E9423317C0190930C0380930B0380905C +:101EB000D1029090D202A090D302B090D40220E040 +:101EC00030E040E85FE3C501B4010E94902D6093CB +:101ED000D1027093D2028093D3029093D402F7017F +:101EE000EE0FFF1FEE0FFF1FEB51FD4FA3019201FD +:101EF00060817181828193810E94F82D20E030E021 +:101F000040E05EE30E94472F9B01AC01C501B40194 +:101F10000E94432F18168CF4C7010196BE010E943F +:101F2000233190930C0380930B031092D1021092F3 +:101F3000D2021092D3021092D402E0910B03F091DE +:101F40000C03EE0FFF1FEE0FFF1FEB51FD4F6081E3 +:101F5000718182819381D0C0C0900703D090080323 +:101F6000E0900903F0900A0320E030E0A901C701E6 +:101F7000B6010E94F42D2197882309F4A2C0FE0126 +:101F8000EE0FFF1FEE0FFF1FEB51FD4F8080918082 +:101F9000A280B380A5019401C701B6010E94F42D6F +:101FA00087FF31C0A501940160E070E08CED93ECF7 +:101FB0000E94F82D20E030E040E451E40E94F82D2A +:101FC00020E030E040E05FE30E94472F9B01AC013E +:101FD00060E070E080E090E40E94AA2F9B01AC01D9 +:101FE000C501B4010E94472F9B01AC01C701B60196 +:101FF0000E94F42D87FF07C0A701960160E070E002 +:102000008CED93E439C0A5019401C701B6010E948B +:10201000432F18160CF055C0A501940160E070E044 +:102020008CED93E40E94F82D20E030E040E451E490 +:102030000E94F82D20E030E040E05FE30E94472F4F +:102040009B01AC0160E070E080E090E40E94AA2F68 +:102050009B01AC01C501B4010E94472F9B01AC015B +:10206000C701B6010E94432F18165CF5A70196011F +:1020700060E070E08CED93EC0E94F82D20E030E001 +:1020800040E451E40E94F82D20E030E040E05FE3BE +:102090000E94472F9B01AC0160E070E080E090E47B +:1020A0000E94AA2F9B01AC01C701B6010E94472FD5 +:1020B00060930703709308038093090390930A03C6 +:1020C00013C0FE01EE0FFF1FEE0FFF1FEB51FD4F80 +:1020D00080819181A281B38180930703909308034B +:1020E000A0930903B0930A0360910703709108035A +:1020F0008091090390910A032091BC023091BD02A6 +:102100002F3F4FEF340731F02F5F3F4F3093BD0229 +:102110002093BC020E9430136B017C0120E034E26A +:1021200044EF51E40E94F42D87FF08C086EFC82ECB +:1021300088E2D82E84EFE82E81E4F82E20E030E00B +:1021400040E051E4C701B6010E94472F9B01AC015A +:1021500060E074E284E79BE40E94F82D6B017C014F +:102160000E94602E709397006093960020910C025D +:1021700030910D0240910E0250910F02C701B6013D +:102180000E94472F0E94602E7093990060939800E0 +:102190008091D002882309F433C1C090CB02D09043 +:1021A000CC02E090CD02F090CE0220E030E0A90118 +:1021B000C701B6010E94432F1816D4F58091BC02C6 +:1021C0009091BD028F3F2FEF920729F001969093D7 +:1021D000BD028093BC02C701B6010E94301320E00B +:1021E00030E040E051E40E94472F9B01AC0160E0E9 +:1021F00074E284E79BE40E94F82D6B017C010E944D +:10220000602E709397006093960020910C0230919D +:102210000D0240910E0250910F02C701B6010E94BB +:10222000472F0E94602E709399006093980008C019 +:1022300010929700109296001092990010929800B8 +:102240006091C5027091C6026F5F7F4F7093C602A6 +:102250006093C502209196003091970080E090E055 +:10226000232BF1F0C0919600D09197000E94912EFF +:102270006B017C01BE0180E090E00E94912E9B01E9 +:10228000AC016091C7027091C8028091C90290911F +:10229000CA020E94F82D20E03FEF4FE757E410C03C +:1022A0000E94912E6B017C0120E030EE4FEF54E450 +:1022B0006091C7027091C8028091C9029091CA02D0 +:1022C0000E94472F9B01AC01C701B6010E94432F1A +:1022D00087FD96C08091C3028F5F8093C30290E018 +:1022E000209188033091890382179307A0F0809191 +:1022F0009303882319F01092C3020DC080917100DE +:102300008D7F80937100809190008F7780939000F3 +:102310001092D0027DC08091C402C091C30281118D +:1023200028C0C0908D03D0908E03E0908F03F09072 +:10233000900320E030E0A901C701B6010E94432FBD +:102340001816BCF481E08093C4021092CB02109264 +:10235000CC021092CD021092CE02C092C702D0924F +:10236000C802E092C902F092CA02C150C093C302EF +:1023700043C01092C4021092BD021092BC02E091C0 +:102380008A03F0918B0348E0C49FE00DF11D1124F6 +:1023900080819181A281B3818093CB029093CC0202 +:1023A000A093CD02B093CE0220E030E040E85EE39F +:1023B00064817581868197810E94472F6B017C0122 +:1023C00020E030E048EC52E460911002709111027C +:1023D00080911202909113020E94F82D9B01AC0192 +:1023E000C701B6010E94472F6093C7027093C802CD +:1023F0008093C9029093CA021092C6021092C5023D +:1024000080918C0380FD04C01092D0021092CF0204 +:10241000FF91EF91DF91CF91BF91AF919F918F91FC +:102420007F916F915F914F913F912F91FF90EF902E +:10243000DF90CF90BF90AF909F908F907F906F90E4 +:102440005F904F900F900FBE0F901F901895CF92F6 +:10245000DF92EF92FF92CF93DF936B017C01EA0151 +:102460008091BE02811102C00E94220E80918C03D5 +:1024700080FF46C080910D0390910E0308970CF0E9 +:102480003FC0809171008D7F809371008091D00258 +:1024900081110E943C0E81E08093CF021092BD0218 +:1024A0001092BC0220E030E0A901C701B6010E94F1 +:1024B000432F1816DCF480910D0390910E03FC015C +:1024C000EE0FFF1FEE0FFF1FEB51FD4FC082D182B9 +:1024D000E282F382FC01EE0FFF1FEB52FD4FD1832E +:1024E000C083019690930E0380930D038091710039 +:1024F000826080937100809190008068809390004A +:10250000DF91CF91FF90EF90DF90CF9008958F9261 +:102510009F92AF92BF92CF92DF92EF92FF920F9372 +:102520001F93CF93DF93EC017B01D42E4801590117 +:102530008091BE02811102C00E94220E80918C0304 +:1025400080FF6BC0809171008D7F809371008091BE +:10255000CF0281110E943C0E81E08093D002D09383 +:102560008B03C0938A03F0928903E0928803D09290 +:10257000930380928D0390928E03A0928F03B0926A +:1025800090031092D1021092D2021092D3021092B4 +:10259000D4021092C30288819981AA81BB81809361 +:1025A000CB029093CC02A093CD02B093CE0220E058 +:1025B00030E040E85EE36C817D818E819F810E94E6 +:1025C000472F6B017C0120E030E048EC52E4609141 +:1025D00010027091110280911202909113020E94D8 +:1025E000F82D9B01AC01C701B6010E94472F6093F3 +:1025F000C7027093C8028093C9029093CA021092D6 +:10260000C6021092C50280917100826080937100B1 +:1026100080919000806880939000DF91CF911F910E +:102620000F91FF90EF90DF90CF90BF90AF909F9071 +:102630008F90089580910F0390E0019665E070E01F +:102640000E94233180930F03089580910F0390E03F +:10265000019765E070E00E94233180930F03089595 +:102660008F929F92AF92BF92CF92DF92EF92FF92A2 +:10267000CF93DF936B017C01C091BC02D091BD026E +:10268000BE0180E090E00E94912E4B015C01A70109 +:10269000960160E070E08CE594E40E94F82D9B01C7 +:1026A000AC01C501B4010E94472F0E94652E4091E4 +:1026B0000F03423009F45CC028F4442351F0413048 +:1026C000E9F0FBC0433009F481C0443009F4B4C0E0 +:1026D000F4C080E090E0A0E0BFE380930C02909310 +:1026E0000D02A0930E02B0930F021092BF0210923F +:1026F000C0021092C1021092C202DFC01092BF024B +:102700001092C0021092C1021092C202643171058F +:1027100040F46A307105E0F520E030E040E85EE327 +:102720003BC0693C710508F0C0C080E090E00E94A9 +:10273000912E20E030E040EA51E40E948F2D20E00D +:1027400030E044E353E40E94F82D9B01AC010E9469 +:10275000472F20E030E040E05EE30E94472F9B01DE +:10276000AC0160E070E080E09EE30E948F2D5BC0D2 +:102770001092BF021092C0021092C1021092C202C7 +:102780006432710578F4FB01EE59FF4F0C94373138 +:1027900020E030E040E05FE3C701B6010E94472F30 +:1027A0006B017C0180E090E0A0E0BEE380930C022E +:1027B00090930D02A0930E02B0930F027EC0A7016A +:1027C0009601C701B6010E94902DEACF1092BF0278 +:1027D0001092C0021092C1021092C2022AE0269FFB +:1027E000A001279F500D1124CA0168EB7BE00E94D5 +:1027F0000F31BC016C5D754077FF03C07195619529 +:102800007109882777FD8095982F0E94932E2EE3DB +:1028100033EC4EE259E30E94472F20E030E040ECD9 +:102820005EE30E94902D60930C0270930D028093E2 +:102830000E0290930F0241C01092BF021092C0028C +:102840001092C1021092C202CE0183709927892B87 +:10285000E1F0BE016170772780E090E00E94912E48 +:1028600020E030E040E05EE30E94472F20E030E0CF +:1028700040E45FE30E94902D60930C0270930D0280 +:1028800080930E0290930F020CC080E090E0A0E0D5 +:10289000BFE380930C0290930D02A0930E02B093BD +:1028A0000F02C770DD27CD2B41F410920C0210925D +:1028B0000D0210920E0210920F02C701B601DF91B5 +:1028C000CF91FF90EF90DF90CF90BF90AF909F900F +:1028D0008F900895809118030895CF93DF9300D0CF +:1028E0001F92CDB7DEB79C0180919803843019F513 +:1028F00093E099833B832A839093E9008FEF909133 +:10290000E800815095FD06C095ED9A95F1F700001D +:102910008111F5CF8091E80085FF0DC040E050E0C7 +:1029200063E070E0CE0101960E94A6168091E80057 +:102930008E778093E8000F900F900F90DF91CF91EA +:102940000895CF93DF9300D01F92CDB7DEB72091CB +:102950009803243021F522E029839B838A8383E036 +:102960008093E9008FEF9091E800815095FD06C0BB +:1029700095ED9A95F1F700008111F5CF8091E8006F +:1029800085FF0DC040E050E063E070E0CE010196AD +:102990000E94A6168091E8008E778093E8000F9041 +:1029A0000F900F90DF91CF910895209198032430DC +:1029B000F1F422E02093E9002FEF3091E80021505C +:1029C00035FD06C035ED3A95F1F700002111F5CF40 +:1029D0002091E80025FF0BC040E050E065E070E08A +:1029E0000E94A6168091E8008E778093E8000895F3 +:1029F000CF93DF9320919803243039F521E0209381 +:102A0000E9002FEF3091E800215035FD06C035ED8B +:102A10003A95F1F700002111F5CF2091E80025FF4C +:102A200014C0EC0140E050E068E070E00E94A6169F +:102A30008091E8008E778093E80088E0FE01A0E1B5 +:102A4000B3E001900D928A95E1F7DF91CF9108955F +:102A500080919703811109C00E943B180E94981829 +:102A60008091E20084608093E200089510929703C1 +:102A70000895089508950C94962742E061EC81E052 +:102A80000E94B51742E061EC82E00E94B51742E077 +:102A900061EC83E00C94B51780919A03833009F4BC +:102AA00053C030F4813071F0823009F48CC0089545 +:102AB0008A3009F478C08B3009F45EC0893009F09F +:102AC0009AC020C080919903813A09F094C0809106 +:102AD000E800877F8093E80080919D0390919E039A +:102AE000892B21F468E080E193E003C060E080E09E +:102AF00090E070E00E94F1168091E8008B7780935F +:102B0000E800089580919903813209F074C08091A2 +:102B10009D0390919E03892B09F06DC08091E80080 +:102B2000877F8093E8008091E80082FD05C0809156 +:102B300098038111F8CF5FC08091F1008093180352 +:102B40008091E8008B7753C080919903813A09F016 +:102B500052C080919D0390919E03892B09F04BC038 +:102B60008091E800877F8093E8008091E80080FFF3 +:102B7000FCCF80911E0236C0809199038132D9F535 +:102B800080919D0390919E03892BA9F58091E80087 +:102B9000877F8093E8000E94EA1780919B038093CF +:102BA0001E020C945B2180919903813221F5809162 +:102BB000E800877F8093E8000E94EA1780919C03D9 +:102BC00080931903089580919903813AA1F480912B +:102BD000E800877F8093E8008091E80080FFFCCFC9 +:102BE000809119038093F1008091E8008E778093A3 +:102BF000E8000C94EA17089584B7877F84BF88E1C2 +:102C00000FB6F89480936000109260000FBE90E0C1 +:102C100080E80FB6F89480936100909361000FBE36 +:102C20000E948D1B0E943B180E9498188091E20020 +:102C300084608093E20078940E941E1B0E948F1B88 +:102C400084E192E00E94391B80919803853069F4F9 +:102C50000E945027809196038823B1F30E947E271B +:102C6000882391F30E949016EFCF0E94971BECCF20 +:102C7000292F332723303105C9F064F42130310581 +:102C800081F02230310509F043C084E590E028E16D +:102C90003AE042C021323105F1F02232310541F1F2 +:102CA00037C082E190E02CE63AE036C099278130C7 +:102CB000910541F08230910541F0892B49F5E4E11D +:102CC000FAE005C0E6EEF9E002C0EAEBF9E0849133 +:102CD00090E09F0121C06330D8F4E62FF0E0EE0FC2 +:102CE000FF1FE856FD4F2081318189E090E014C03C +:102CF000633070F470E0FB01EE0FFF1FEE56FD4FE6 +:102D000020813181FB01E157FD4F808190E004C0BB +:102D100080E090E020E030E0FA01318320830895E4 +:102D200080E189BD82E189BD09B400FEFDCF8091BB +:102D3000D8008F7D8093D8008091E00082608093DE +:102D4000E0008091E00081FDFCCF0895CF92DF92FA +:102D5000EF92FF920F931F93CF93DF93EC018B01C0 +:102D60006A010E940918811133C0C114D10439F0DD +:102D7000F60180819181081B190BC80FD91FE12C26 +:102D8000F12C0115110519F18091E80085FD16C09F +:102D90008091E8008E778093E800C114D10449F057 +:102DA000F60180819181E80EF91EF182E08285E0D2 +:102DB0000FC00E940918882321F30AC089918093CB +:102DC000F10001501109FFEFEF1AFF0ADACF80E09E +:102DD000DF91CF911F910F91FF90EF90DF90CF90F7 +:102DE000089520919F033091A0032617370748F0DC +:102DF0006115710539F42091E8002E772093E800E1 +:102E000001C0B90140E061157105A9F12091980355 +:102E1000222309F443C0253009F442C02091E80080 +:102E200023FD40C02091E80022FD32C02091E8003F +:102E300020FFE9CF4091F3002091F20030E0342BE5 +:102E4000FC01CF016115710559F02830310540F4BE +:102E500081918093F100615071092F5F3F4FF1CF55 +:102E600041E02830310509F040E02091E8002E775C +:102E70002093E800C8CF4111C9CF0AC080919803C0 +:102E8000882361F0853061F08091E80083FD0AC0FD +:102E90008091E80082FFF2CF80E0089582E00895FB +:102EA00083E0089581E0089520919F033091A0036D +:102EB0002617370748F06115710539F42091E800AD +:102EC0002E772093E80001C0B901FC0120E06115D4 +:102ED000710591F180919803882309F440C08530F1 +:102EE00009F43FC08091E80083FD3DC08091E80077 +:102EF00082FD2FC08091E80080FFE9CF2091F30090 +:102F00008091F20090E0922B6115710559F08830A4 +:102F1000910540F424912093F1003196615071099C +:102F20000196F2CF21E0089709F020E08091E800B7 +:102F30008E778093E800CBCF2111CCCF0AC080914F +:102F40009803882361F0853061F08091E80083FD6B +:102F50000AC08091E80082FFF2CF80E0089582E00D +:102F6000089583E0089581E00895982F973058F5EB +:102F70009093E900981739F07091EC002091ED00E2 +:102F80005091F00003C0242F762F50E021FF19C08C +:102F90003091EB003E7F3093EB003091ED003D7FB0 +:102FA0003093ED003091EB0031603093EB00709383 +:102FB000EC002093ED005093F0002091EE0027FFED +:102FC00007C09F5FD3CF8F708093E90081E00895A1 +:102FD00080E008958091990387FF11C08091E800F7 +:102FE00082FD05C0809198038111F8CF11C08091B6 +:102FF000E8008B770BC080919803882349F080917B +:10300000E80080FFF8CF8091E8008E778093E80099 +:1030100008952091E4003091E50095E64091EC00A0 +:10302000842F817040FF22C08091E80080FD1CC089 +:1030300080919803882391F0853091F08091EB0086 +:1030400085FD10C04091E4005091E5004217530700 +:1030500029F39A01915011F784E0089582E00895D0 +:1030600083E0089581E0089580E008954091E800AC +:1030700042FFDECF08950E94A9180E94B118E0EE29 +:10308000F0E0808181608083E8EDF0E080818F77DF +:10309000808319BCA7EDB0E08C918E7F8C938081EA +:1030A0008F7E80831092970308950F931F93CF9381 +:1030B000DF930E94A9180E94B118C8EDD0E0888162 +:1030C0008F77888388818068888388818F7D8883D3 +:1030D00019BC1092980310929403109296031092C8 +:1030E000950300EE10E0F80180818B7F808388815A +:1030F0008160888342E060E080E00E94B517E1EEE5 +:10310000F0E080818E7F8083E2EEF0E0808181605C +:103110008083808188608083F80180818E7F8083B6 +:10312000888180618883DF91CF911F910F910895ED +:10313000E8EDF0E080818F7E8083E7EDF0E0808134 +:103140008160808384E082BF81E0809397030C9448 +:103150005518E8EDF0E080818E7F80831092E200C8 +:1031600008951092DA001092E10008951F920F92D4 +:103170000FB60F9211242F933F934F935F936F934A +:103180007F938F939F93AF93BF93EF93FF93809120 +:10319000E10082FF0BC08091E20082FF07C08091B6 +:1031A000E1008B7F8093E1000E941D1B8091DA007B +:1031B00080FF1FC08091D80080FF1BC08091DA0083 +:1031C0008E7F8093DA008091D90080FF0DC080E16E +:1031D00089BD82E189BD09B400FEFDCF81E0809305 +:1031E00098030E94281505C019BC109298030E94EC +:1031F00036158091E10080FF19C08091E20080FFC8 +:1032000015C08091E2008E7F8093E2008091E20001 +:1032100080618093E2008091D80080628093D80022 +:1032200019BC85E0809398030E943A158091E100D3 +:1032300084FF30C08091E20084FF2CC080E189BD12 +:1032400082E189BD09B400FEFDCF8091D8008F7D59 +:103250008093D8008091E1008F7E8093E10080917F +:10326000E2008F7E8093E2008091E2008160809393 +:10327000E20080919403882311F084E007C08091DC +:10328000E30087FD02C081E001C083E080939803E2 +:103290000E943B158091E10083FF29C08091E200EC +:1032A00083FF25C08091E100877F8093E10082E069 +:1032B00080939803109294038091E1008E7F809315 +:1032C000E1008091E2008E7F8093E2008091E20035 +:1032D00080618093E20042E060E080E00E94B517E8 +:1032E0008091F00088608093F0000E943915FF9172 +:1032F000EF91BF91AF919F918F917F916F915F916E +:103300004F913F912F910F900FBE0F901F901895E6 +:103310001F920F920FB60F9211242F933F934F934A +:103320005F936F937F938F939F93AF93BF93CF934D +:10333000DF93EF93FF93C091E900CF708091EC0091 +:10334000D82FD17080FDD0E81092E9008091F00074 +:10335000877F8093F00078940E94CC191092E90046 +:103360008091F00088608093F000CD2BCF70C093E7 +:10337000E900FF91EF91DF91CF91BF91AF919F91C4 +:103380008F917F916F915F914F913F912F910F900E +:103390000FBE0F901F9018951F93CF93DF93CDB75B +:1033A000DEB7AA970FB6F894DEBF0FBECDBFE9E92E +:1033B000F3E088E08E0F9091F10091938E13FBCF94 +:1033C0000E944C158091E80083FF1FC180919903F2 +:1033D00090919A03492F50E04A30510508F015C1E9 +:1033E000FA01EA57FF4F0C943731803881F0823868 +:1033F00009F00BC180919D038F708093E90080914B +:10340000EB0085FB882780F91092E90006C08091C7 +:10341000950390919603911182609091E800977FB7 +:103420009093E8008093F1001092F100C8C0282F1B +:103430002D7F09F0EAC0882319F0823061F0E5C0E1 +:1034400080919B03813009F0E0C0933009F080E067 +:10345000809396032BC080919B03811127C080919C +:103460009D038F7009F4D1C08093E9002091EB0097 +:1034700020FF1CC0933021F48091EB00806214C0C7 +:103480009091EB0090619093EB0021E030E0A90176 +:1034900002C0440F551F8A95E2F74093EA0010924C +:1034A000EA008091EB0088608093EB001092E900C5 +:1034B0008091E800877F86C08111A7C010919B038F +:1034C0001F778091E3008078812B8093E3008091C7 +:1034D000E800877F8093E8000E94EA178091E80067 +:1034E00080FFFCCF8091E30080688093E30011119E +:1034F00002C082E001C083E08093980386C08058B8 +:10350000823008F082C080919B0390919C038C3D97 +:1035100053E0950779F583E08A838AE289834FB780 +:10352000F894DE01139620E03EE051E2E32FF0E054 +:1035300050935700E49120FF03C0E295EF703F5F86 +:10354000EF708E2F90E0EA3010F0C79601C0C09661 +:103550008D939D932F5F243149F74FBF8091E800F1 +:10356000877F8093E8006AE270E0CE0101960E94B6 +:10357000F11614C0AE014F5F5F4F60919D030E9432 +:103580003816BC01009709F440C09091E800977F7D +:103590009093E80089819A810E9454178091E800F5 +:1035A0008B778093E80031C0803879F58091E8000E +:1035B000877F8093E800809194038093F10080914D +:1035C000E8008E778093E8000E94EA171EC0811100 +:1035D0001CC090919B039230C0F48091E800877FDB +:1035E0008093E800909394030E94EA1780919403DB +:1035F000811106C08091E30087FD02C081E001C017 +:1036000084E0809398030E943D158091E80083FF39 +:103610000AC08091E800877F8093E8008091EB00EA +:1036200080628093EB00AA960FB6F894DEBF0FBEBF +:10363000CDBFDF91CF911F9108950895CF938091D1 +:1036400098038823A1F0C091E900CF709091EC001D +:10365000892F817090FD80E8C82B1092E90080913D +:10366000E80083FD0E94CC19CF70C093E900CF9190 +:10367000089590931F0380931E030895E0911E0305 +:10368000F0911F03309721F00190F081E02D099413 +:1036900080E00895E0911E03F0911F03309721F020 +:1036A0000280F381E02D09940895E0911E03F091CA +:1036B0001F03309721F00480F581E02D09940895CF +:1036C00020911C0330911D038217930771F0909392 +:1036D0001D0380931C03E0911E03F0911F0330979C +:1036E00021F00680F781E02D0994089520911A03B6 +:1036F00030911B038217930771F090931B03809303 +:103700001A03E0911E03F0911F03309721F000840B +:10371000F185E02D0994089508950C948C1B0E9466 +:10372000CA270E94F60B0E9450280C94F82C4F9246 +:103730005F927F928F929F92AF92BF92CF92DF92D1 +:10374000EF92FF920F931F93CF93DF93CDB7DEB726 +:103750002A970FB6F894DEBF0FBECDBF0E94D10CE2 +:1037600091E2C92E93E0D92E00E010E0AA24A394A0 +:10377000B12C702E802F0E940A0E4C01F601419050 +:1037800051906F014826592641145104B1F40F5F3E +:103790001F4F0530110569F78FEF89838A831B82DC +:1037A0000E94D3278160782F9D838C8349815A8121 +:1037B0006B818D810E94501C3AC08091770381FDFE +:1037C0000E94130E20E030E07501022E02C0EE0CC4 +:1037D000FF1C0A94E2F7C70184219521892B09F186 +:1037E0002E837F828E209F2091E0892809F490E02B +:1037F00098870E94D3278160782F9A8789874E8186 +:103800005F8168858A850E94501C000F111FF80196 +:10381000EF5DFC4F80819181E826F926F182E082FC +:1038200006C02F5F3F4F2C30310571F6B0CF0E949C +:10383000372A109120030E943E1B1817D9F00E94CE +:103840003E1B809320032A960FB6F894DEBF0FBE6E +:10385000CDBFDF91CF911F910F91FF90EF90DF903F +:10386000CF90BF90AF909F908F907F905F904F9040 +:103870000C942E0B2A960FB6F894DEBF0FBECDBF68 +:10388000DF91CF911F910F91FF90EF90DF90CF903C +:10389000BF90AF909F908F907F905F904F900895D2 +:1038A000CF93DF93CDB7DEB72B970FB6F894DEBF7B +:1038B0000FBECDBF4F83588769877A878B87DE011C +:1038C000119686E0FD0111928A95E9F785E0FE01E7 +:1038D000379601900D928A95E1F749815A816B8163 +:1038E0007C818D819E810E94F5232B960FB6F894E2 +:1038F000DEBF0FBECDBFDF91CF910895CF93882358 +:1039000009F4C2C0C82F823859F40E943E1B81FDC1 +:10391000BBC089E30E949E260E94212789E30CC038 +:10392000833879F40E943E1B80FDAEC083E50E947F +:103930009E260E94212783E50E94BB26CF910C94EE +:103940002127843859F40E943E1B82FD9DC087E4E4 +:103950000E949E260E94212787E4EECF8CEF8C0FD9 +:10396000813A48F48C2F0E94602C81118DC08C2FDD +:103970000E949E26E3CF80E28C0F883048F4C77007 +:1039800081E001C0880FCA95EAF70E94DA26D6CFF7 +:103990008BE58C0F833078F4C53A29F0C63A31F0C4 +:1039A00083E890E005C081E890E002C082E890E002 +:1039B000CF910C94601B88E58C0F833108F064C0B4 +:1039C000C83A39F1C93A41F1CA3A49F1CB3A51F111 +:1039D000CC3A59F1CD3A61F1C03B69F1CE3A71F17F +:1039E000CF3A79F1C13B81F1C23B89F1C33B91F1FF +:1039F000C43B99F1C53BA1F1C63BA9F1C73BB1F16D +:103A0000C83BB9F1C93BC1F1CA3BC9F180E090E0C4 +:103A100038C082EE90E035C089EE90E032C08AEE88 +:103A200090E02FC085EB90E02CC086EB90E029C0A1 +:103A300087EB90E026C08CEC90E023C08DEC90E00A +:103A400020C083E891E01DC08AE891E01AC082E9B5 +:103A500091E017C084E991E014C081E292E011C0C6 +:103A600083E292E00EC084E292E00BC085E292E035 +:103A700008C086E292E005C087E292E002C08AE2D6 +:103A800092E0CF910C94761BCF910895882309F48E +:103A90004BC0823859F40E943E1B81FF45C089E328 +:103AA0000E949E260E94212789E30CC0833871F46E +:103AB0000E943E1B80FF38C083E50E949E260E9424 +:103AC000212783E50E94BB260C942127843859F4D2 +:103AD0000E943E1B82FF28C087E40E949E260E940F +:103AE000212787E4EFCF9CEF980F913A58F390E2AB +:103AF000980F983050F4877091E001C0990F8A9523 +:103B0000EAF7892F0E94E026DFCF9BE5980F9330DC +:103B100020F480E090E00C94601B885A833120F4FC +:103B200080E090E00C94761B0895882321F00E9499 +:103B3000DA260C9421270895882321F00E94E0269C +:103B40000C9421270895BF92CF92DF92EF92FF92BB +:103B50000F931F93CF93DF9300D000D000D0CDB749 +:103B6000DEB725E0FC01DE01119601900D922A9549 +:103B7000E1F7FC01D08011810281258122952F700F +:103B800043815481452B09F472C31F3F21F4FFEF99 +:103B9000DF1609F46CC37C012E830E94F707D982DB +:103BA0001A8369817A81802F0E949A26182FB92E54 +:103BB0000E944F260E9416252E81002319F00E9494 +:103BC000F7262E81EB2DE295EF70F0E0E057FF4FE6 +:103BD0000C9437318B2D807F9B2D9F70F92E88237D +:103BE00019F0F29480EFF822002389F0FF2009F405 +:103BF0007CC280E2810F883020F48F2D0E94DA266B +:103C000003C08F2D0E94EA260E9421276EC2812FB9 +:103C10000E94461DFF2009F42AC3105E8F2D183024 +:103C200018F40E94E02602C00E94F02626960FB6E5 +:103C3000F894DEBF0FBECDBFDF91CF911F910F91E2 +:103C4000FF90EF90DF90CF90BF900C9421278B2DA9 +:103C5000807F9B2D9F70803211F4892F03C0892FA4 +:103C60008295807F112319F0113011F12BC00023B0 +:103C7000A9F0222389F1213079F526960FB6F89420 +:103C8000DEBF0FBECDBFDF91CF911F910F91FF908F +:103C9000EF90DF90CF90BF900C940A27222319F069 +:103CA000213009F4E4C28E830E940D278E819BC1CE +:103CB000002321F0263008F0DAC20EC0253008F0CB +:103CC000D6C291C10023C9F0222331F0F7019581BA +:103CD00090FF0BC29F70958326960FB6F894DEBFB7 +:103CE0000FBECDBFDF91CF911F910F91FF90EF904D +:103CF000DF90CF90BF900C94951D222309F473C1DF +:103D000009C22B2D26952695237030E0211531050B +:103D100021F021303105D1F0AAC2002321F0812FFA +:103D20009B2D937002C080E090E026960FB6F89429 +:103D3000DEBF0FBECDBFDF91CF911F910F91FF90DE +:103D4000EF90DF90CF90BF900C94601B002321F088 +:103D5000812F9B2D937002C080E090E026960FB6D5 +:103D6000F894DEBF0FBECDBFDF91CF911F910F91B1 +:103D7000FF90EF90DF90CF90BF900C94761B812F37 +:103D8000002319F00E943F2902C00E94A72926960D +:103D90000FB6F894DEBF0FBECDBFDF91CF911F915C +:103DA0000F91FF90EF90DF90CF90BF900C942C2A52 +:103DB0008B2D837009F07BC0011159C2812F829530 +:103DC00086958770880F880F912F9F70C92ED12CF0 +:103DD000E12CF12C082E04C0CC0CDD1CEE1CFF1CC9 +:103DE0000A94D2F714FF12C04FE050E060E070E098 +:103DF00004C0440F551F661F771F8A95D2F7CB0169 +:103E0000BA01609570958095909503C060E070E070 +:103E1000CB012B2D269526952370422F50E0423062 +:103E20005105D9F04330510569F16C297D298E295E +:103E30009F294130510551F126960FB6F894DEBF07 +:103E40000FBECDBFDF91CF911F910F91FF90EF90EB +:103E5000DF90CF90BF900C943D256C297D298E2951 +:103E60009F2926960FB6F894DEBF0FBECDBFDF9117 +:103E7000CF911F910F91FF90EF90DF90CF90BF9067 +:103E80000C9459250E943D25C701B60126960FB610 +:103E9000F894DEBF0FBECDBFDF91CF911F910F9180 +:103EA000FF90EF90DF90CF90BF900C9421250023DE +:103EB00019F08B2D817001C08695882309F4D7C134 +:103EC000812F829586958770880F880F912F9F701C +:103ED000C92ED12CE12CF12C082E04C0CC0CDD1CF9 +:103EE000EE1CFF1C0A94D2F714FF12C04FE050E002 +:103EF00060E070E004C0440F551F661F771F8A956D +:103F0000D2F7CB01BA01609570958095909503C06A +:103F100060E070E0CB012B2D269526952370422F73 +:103F200050E042305105D9F04330510569F16C2918 +:103F30007D298E299F294130510551F126960FB6D2 +:103F4000F894DEBF0FBECDBFDF91CF911F910F91CF +:103F5000FF90EF90DF90CF90BF900C9417266C29C4 +:103F60007D298E299F2926960FB6F894DEBF0FBEB5 +:103F7000CDBFDF91CF911F910F91FF90EF90DF9018 +:103F8000CF90BF900C9433260E941726C701B6012C +:103F900026960FB6F894DEBF0FBECDBFDF91CF914E +:103FA0001F910F91FF90EF90DF90CF90BF900C94F6 +:103FB000FB25103F49F118F4103E48F491C0123F20 +:103FC00009F453C0E8F1133F09F464C089C01F70BD +:103FD0008B2D8F71002321F00E949425812F7CCEA0 +:103FE0000E94B525812F26960FB6F894DEBF0FBE2E +:103FF000CDBFDF91CF911F910F91FF90EF90DF9098 +:10400000CF90BF900C949C1D0023B1F0253008F098 +:104010002EC18B2D8F7126960FB6F894DEBF0FBE82 +:10402000CDBFDF91CF911F910F91FF90EF90DF9067 +:10403000CF90BF900C94DA25263008F018C1E9CF54 +:104040000023A9F08B2D8F7126960FB6F894DEBF52 +:104050000FBECDBFDF91CF911F910F91FF90EF90D9 +:10406000DF90CF90BF900C949425002359F38B2DB3 +:104070008F7126960FB6F894DEBF0FBECDBFDF91CD +:10408000CF911F910F91FF90EF90DF90CF90BF9055 +:104090000C94B525002399F08B2D8F7126960FB6C1 +:1040A000F894DEBF0FBECDBFDF91CF911F910F916E +:1040B000FF90EF90DF90CF90BF900C947F252696D5 +:1040C0000FB6F894DEBF0FBECDBFDF91CF911F9129 +:1040D0000F91FF90EF90DF90CF90BF900C947525DB +:1040E0000023A9F0222309F4ADCF812F26960FB625 +:1040F000F894DEBF0FBECDBFDF91CF911F910F911E +:10410000FF90EF90DF90CF90BF900C947E1C222305 +:1041100009F4ADCF812F26960FB6F894DEBF0FBEFF +:10412000CDBFDF91CF911F910F91FF90EF90DF9066 +:10413000CF90BF900C94461D4B2D4F70612FC7013F +:104140000E942F0626960FB6F894DEBF0FBECDBF95 +:10415000DF91CF911F910F91FF90EF90DF90CF9063 +:10416000BF900C949924011182C09B2D9F70492F00 +:1041700050E04230510509F443C0C4F441155105E3 +:1041800071F14130510509F072C026960FB6F894CE +:10419000DEBF0FBECDBFDF91CF911F910F91FF907A +:1041A000EF90DF90CF90BF900C94202D43305105BD +:1041B000C1F14430510509F05AC0812F26960FB63F +:1041C000F894DEBF0FBECDBFDF91CF911F910F914D +:1041D000FF90EF90DF90CF90BF900C94722D2696B9 +:1041E0000FB6F894DEBF0FBECDBFDF91CF911F9108 +:1041F0000F91FF90EF90DF90CF90BF900C94092D1E +:1042000026960FB6F894DEBF0FBECDBFDF91CF91DB +:104210001F910F91FF90EF90DF90CF90BF900C9483 +:104220003C2D26960FB6F894DEBF0FBECDBFDF91B2 +:10423000CF911F910F91FF90EF90DF90CF90BF90A3 +:104240000C944F2D4B2D4F70612FC70126960FB642 +:10425000F894DEBF0FBECDBFDF91CF911F910F91BC +:10426000FF90EF90DF90CF90BF900C94F9072696C7 +:104270000FB6F894DEBF0FBECDBFDF91CF911F9177 +:104280000F91FF90EF90DF90CF90BF9008950E9424 +:10429000F7260E9407270E94CC260E9421270E9411 +:1042A000DD2A0E942C2A80E090E00E94601B80E0C2 +:1042B00090E00C94761B0E94E7260C9447210E9404 +:1042C0008F26292F22952F7030E02C3031054CF4A9 +:1042D0002A3031056CF4225031092230310588F43E +:1042E00007C02C30310549F02F30310531F009C0BD +:1042F000803E48F0803F29F406C093FB882780F970 +:10430000089580E0089581E00895CF93DF9300D071 +:1043100000D01F92CDB7DEB70F900F900F900F9087 +:104320000F90DF91CF910895CF93DF9300D000D00D +:1043300000D0CDB7DEB726960FB6F894DEBF0FBE1D +:10434000CDBFDF91CF9108951F93CF93DF93C0919D +:104350002B0316E080912C03C81799F0D0E01C9F26 +:10436000F0011D9FF00D1124E35DFC4F4081518150 +:1043700062817381848195810E9494212196C77006 +:10438000E9CFDF91CF911F91089540915D03509146 +:104390005E0360915F03709160038091610390916F +:1043A00062030C9494218091620382958F7009F0CE +:1043B00054C080915F03882309F44FC080912B0380 +:1043C000A0912C0360915D0370915E0340916003A6 +:1043D00050916103B6E08A1709F43FC090E041159F +:1043E0005105C1F17F3F11F46F3FA1F1B89FF0017A +:1043F000B99FF00D1124E35DFC4F218172132AC097 +:104400002081621327C02281211124C0238134819D +:104410002417350710F421503109241B350B283C93 +:104420003105C0F4209162032F7020612093620354 +:1044300026E0289FF001299FF00D1124EE5CFC4F2F +:1044400080818F70806180838DE593E00E94A31D41 +:104450000C94A42101968770BECF0895CF92DF926D +:10446000EF92FF920F931F93CF93DF93CDB7DEB7F9 +:1044700062970FB6F894DEBF0FBECDBF8C0185E00A +:10448000F801DE011D9601900D928A95E1F7D801A1 +:104490004C9111965C91119712966C91129713960C +:1044A000CD90DC90149730915D0370915E03809104 +:1044B000600390916103009709F46BC17F3F19F489 +:1044C0003F3F09F466C1E0905F03EE2009F4C0C0ED +:1044D00020916203C816D90628F0F601E81BF90BF3 +:1044E000CF0104C0809590958C0D9D1DFF24F39401 +:1044F000883C910578F0F12C207F09F0C6C07C2D16 +:10450000D98AC88A89890E9485218DE593E00E9415 +:10451000A31DB1C0822F807F09F046C0751314C05F +:10452000341312C0611110C02F70206120936203F8 +:104530000E94C5218DE593E00E94A31D8091620336 +:10454000D80115968C932EC0CD2819F15F3F11F438 +:104550004F3FF9F0F62E61111CC080912B03209182 +:104560002C0336E0821709F45AC090E0389FF0011E +:10457000399FF00D1124E35DFC4F7181571306C084 +:104580007081471303C07281711103C00196877057 +:10459000E9CFF62E662309F418C180916203816089 +:1045A00080936203F12C11C1751308C0341306C047 +:1045B000611104C080916203D801C3C04D875E873A +:1045C0008D859E856A8B0E945F216A898823E1F12F +:1045D0006623D1F120916203822F82958F7090E043 +:1045E000029774F080915D0390915E0398878F83AA +:1045F0001986DB86CA862C87CE0107960E94A31DEA +:1046000086E0F801ADE5B3E001900D928A95E1F7FF +:104610000E94D3210E94C521FF24F394D6C04D8768 +:104620005E878D859E850E948F26292F22952F706B +:1046300030E0223031050CF0BCC09F7009F0B6C0EC +:10464000805E883008F4C1C0C8010E94A31DE4CF79 +:10465000C816D90608F453C0F601E81BF90BCF01C0 +:10466000883C910508F450C0F12C7C2DD98AC88A69 +:1046700089890E948521EDE5F3E086E0DF011D9246 +:104680008A95E9F70E94C521A0C0751314C03413A0 +:1046900012C0611110C080916203F8018583C801C6 +:1046A0000E94A31D86E0EDE5F3E0DF011D928A95EF +:1046B000E9F7FE2C8AC04D875E878D859E856A8BC3 +:1046C0000E945F216A89882309F4BECF662309F41A +:1046D000BBCF20916203822F82958F7090E002976A +:1046E0000CF48ECF80915D0390915E039A83898351 +:1046F0001B82DD82CC822E83CE0101967FCF8095F6 +:1047000090958C0D9D1DACCFF62E662309F49CCFA1 +:1047100075132EC034132CC02091620320FD1FC0DE +:10472000822F82958F70D9F0D80115962C9315970A +:104730008F3049F08F5F982F9295907F822F8F70E6 +:10474000892B15968C93C8010E94A31D86E0F80161 +:10475000ADE5B3E001900D928A95E1F793CF86E045 +:10476000F801ADE5B3E001900D928A95E1F72DC017 +:104770004D875E878D859E850E945F21811140CF88 +:1047800080916203816080936203C8010E94A31D2F +:104790001CC0662309F458CF4D875E878D859E85A2 +:1047A0000E945F21882309F44FCF2ACF811148CF7F +:1047B0000CC0243031050CF047CF9F7009F440CF76 +:1047C000F8019581907F09F03BCF8F2D62960FB64F +:1047D000F894DEBF0FBECDBFDF91CF911F910F9137 +:1047E000FF90EF90DF90CF9008951F93CF93DF93CA +:1047F000CDB7DEB72C970FB6F894DEBF0FBECDBF96 +:104800004F83588769877A878B879C87CE01079665 +:104810000E942E22882369F08F8198852A853B8506 +:10482000232BF1F19F3F09F063C08F3F09F060C077 +:1048300037C086E0FE013796DE01119601900D9299 +:104840008A95E1F76F817885EA85FB85309741F19C +:104850007F3F11F46F3F21F120912C0330E0C9011B +:1048600001968770992740912B0350E08417950794 +:1048700009F447C069837A83FD83EC8396E0929FB5 +:10488000D001939FB00D1124A35DBC4FFE01319662 +:1048900001900D929A95E1F780932C030E94A42138 +:1048A00016E080912B0390912C038917C1F1189F7A +:1048B000C0011124835D9C4F0E942E22882379F130 +:1048C000E0912B031E9FF0011124E35DFC4F40811A +:1048D000518162817381848195810E9494218091AC +:1048E0002B0390E001968770992780932B03D9CFF3 +:1048F0004F81588569857A858B859C850E94942196 +:10490000CFCF0E945B2110922C0310922B03EDE578 +:10491000F3E086E0DF011D928A95E9F7C1CF2C967E +:104920000FB6F894DEBF0FBECDBFDF91CF911F91C0 +:104930000895EF92FF920F931F93CF93DF938C0113 +:10494000009709F46CC0F12CEE24E394E801219661 +:10495000F8018491843740F4843008F051C08130EC +:1049600081F0823019F15BC0853709F444C0A8F1A9 +:104970009CE7980F903708F052C08F770E94461D31 +:1049800041C00E5F1F4FFE01C49180E28C0F883042 +:1049900048F4C7708E2D01C0880FCA95EAF70E94AF +:1049A000FA2614C08C2F0E947E1C2DC00E5F1F4F54 +:1049B000FE01C49180E28C0F883058F4C7708E2DB0 +:1049C00001C0880FCA95EAF70E9400270E9421279C +:1049D0001AC08C2F0E94461D16C00E5F1F4FFE018D +:1049E000C491CC2381F08FE99FE00197F1F700C0DB +:1049F0000000C150F6CF0E5F1F4FFE01F49003C0C0 +:104A00000E947E1C8E018F2D882309F49FCFEFE931 +:104A1000FFE03197F1F700C000008150F5CFDF9142 +:104A2000CF911F910F91FF90EF900895089560939B +:104A30006703709368038093690390936A030C94EF +:104A400047210F931F9300916703109168032091F2 +:104A5000690330916A03DC01CB01802B912BA22BDF +:104A6000B32B8093670390936803A0936903B0937B +:104A70006A031F910F910C9447210F931F9300918C +:104A80006703109168032091690330916A03DC0188 +:104A9000CB0180239123A223B323809367039093B8 +:104AA0006803A0936903B0936A031F910F910C945C +:104AB00047210F931F930091670310916803209182 +:104AC000690330916A03DC01CB0180279127A2277B +:104AD000B3278093670390936803A0936903B0930F +:104AE0006A031F910F910C94472110926303109257 +:104AF000640310926503109266030C94472141E011 +:104B000050E060E070E004C0440F551F661F771F3F +:104B10008A95D2F7409363035093640360936503CF +:104B2000709366030C94472141E050E060E070E030 +:104B300004C0440F551F661F771F8A95D2F78091D6 +:104B4000630390916403A0916503B0916603482BC1 +:104B5000592B6A2B7B2B4093630350936403609320 +:104B60006503709366030C94472141E050E060E0D8 +:104B700070E004C0440F551F661F771F8A95D2F757 +:104B80004095509560957095809163039091640372 +:104B9000A0916503B0916603482359236A237B23C0 +:104BA00040936303509364036093650370936603BB +:104BB0000C94472141E050E060E070E004C0440FF5 +:104BC000551F661F771F8A95D2F7809163039091D6 +:104BD0006403A0916503B0916603482759276A27AB +:104BE0007B27409363035093640360936503709342 +:104BF00066030C9447210F931F9300916303109158 +:104C000064032091650330916603DC01CB01802BA6 +:104C1000912BA22BB32B8093630390936403A093F7 +:104C20006503B09366031F910F910C9447210F9376 +:104C30001F930091630310916403209165033091E9 +:104C40006603DC01CB0180239123A223B32380934D +:104C5000630390936403A0936503B09366031F916D +:104C60000F910C9447210F931F93009163031091B0 +:104C700064032091650330916603DC01CB0180273A +:104C80009127A227B3278093630390936403A09393 +:104C90006503B09366031F910F910C94472108950B +:104CA000CF92DF92EF92FF920F931F93CF93DF93F8 +:104CB0008C01C0906703D0906803E0906903F09086 +:104CC0006A038091630390916403A0916503B0919E +:104CD0006603C82AD92AEA2AFB2ACFE1D0E0D70105 +:104CE000C6010C2E04C0B695A795979587950A9492 +:104CF000D2F780FF06C0B8018C2F0E94530A01979B +:104D000021F4219760F780E001C08C2FDF91CF91D3 +:104D10001F910F91FF90EF90DF90CF900895CF9368 +:104D2000DF93EC010E945026BE010E94530ADF91DE +:104D3000CF910895CB010E948F26089520911F02E4 +:104D400030912002F90132969FEF40E051915817BF +:104D500089F09F3F19F4511101C0942F4F5F4630E5 +:104D6000A9F79F3F39F0F901E90FF11D97FDFA9579 +:104D700082830895089520911F0230912002F90145 +:104D80003296285F3F4F9081981301C01082319670 +:104D9000E217F307C1F7089581E090E0E0911F0268 +:104DA000F0912002E80FF91F1082019688309105DA +:104DB000A9F7089590917603892B8093760308953F +:104DC00080959091760389238093760308951092BD +:104DD0007603089590917503892B80937503089548 +:104DE000809590917503892380937503089510929F +:104DF0007503089590917403892B8093740308952B +:104E00008095909174038923809374030895109280 +:104E10007403089580936B03089510926B030895B3 +:104E200080911F0290912002FC0131969C01285F25 +:104E30003F4F80E0919191118F5FE217F307D1F717 +:104E40000895E0911F02F091200280917603808303 +:104E5000E0911F02F0912002908180917503892BCF +:104E60008083E0911F02F091200290818091740371 +:104E7000892B808380916B03882361F0E0911F026E +:104E8000F09120029081892B80830E94102781114C +:104E900010926B0380911F02909120020C944A1B88 +:104EA00080919803843039F11092780320E488E1EE +:104EB00090E00FB6F894A895809360000FBE209301 +:104EC000600080E00E94F60580E00E942E0B83B710 +:104ED000817F846083BF83B7816083BF7894889526 +:104EE00083B78E7F83BF88E10FB6F894809360000C +:104EF000109260000FBE089508950895CF9380E04A +:104F00000E94F6050E947C270E94D10C0E947D27FA +:104F1000C0E08C2F0E940A0E892B29F4CF5FC53088 +:104F2000C1F780E001C081E0CF9108950E945B212C +:104F300080E00E94F6050E94F82C0E943E1B0C9413 +:104F40002E0B1F920F920FB60F9211248F939F93E7 +:104F5000AF93BF9380917803811113C0809179033F +:104F600090917A03A0917B03B0917C034196A11D9F +:104F7000B11D8093790390937A03A0937B03B09340 +:104F80007C03BF91AF919F918F910F900FBE0F90B7 +:104F90001F90189582E084BD93E095BD9AEF97BD70 +:104FA00080936E0008952FB7F894809179039091C3 +:104FB0007A03A0917B03B0917C032FBF0895CF9219 +:104FC000DF92EF92FF920F931F932FB7F8944091C7 +:104FD000790350917A0360917B0370917C032FBF1A +:104FE0006A017B01EE24FF248C0120E030E0C01632 +:104FF000D106E206F30610F4415051099A01281B2C +:10500000390BC9011F910F91FF90EF90DF90CF9066 +:1050100008951F920F920FB60F9211248F939F93B2 +:10502000AF93BF938091790390917A03A0917B0312 +:10503000B0917C030196A11DB11D809379039093DB +:105040007A03A0937B03B0937C03BF91AF919F91B0 +:105050008F910F900FBE0F901F9018950E943B18D4 +:10506000F8942FEF87EA91E6215080409040E1F7D5 +:1050700000C0000087E090EBDC018093A3039093D5 +:10508000A403A093A503B093A6039CE088E10FB608 +:10509000F894A895809360000FBE90936000FFCFB6 +:1050A0000E948A28811102C00E9466280E949528C9 +:1050B000809377030E94A2288093A1030E949928DD +:1050C000682F70E080E090E00C9417256DEE7EEF85 +:1050D00080E090E00E945D3160E082E090E00E941C +:1050E0004B3160E083E090E00E944B3160E084E06F +:1050F00090E00E944B3160E085E090E00E944B31EF +:1051000060E086E090E00E944B316FEF87E090E036 +:105110000C944B3180E090E00E94453121E08D3EBF +:105120009E4F09F020E0822F089582E090E00C94D9 +:105130003D3183E090E00C943D31682F83E090E0B6 +:105140000C944B3184E090E00C943D31682F84E066 +:1051500090E00C944B3186E090E00C943D31682F48 +:1051600086E090E00C944B3187E090E00C943D3168 +:10517000682F87E090E00C944B3180917F0380FF93 +:105180000BC06091240285E0689FB00111247595E1 +:105190006795759567952BC081FF09C060912402C2 +:1051A00085E0689FB00111247595679520C082FF46 +:1051B00007C06091240285E0689FB001112417C0E8 +:1051C000909180039923D1F060912302961788F77C +:1051D0002091240285E0289F90011124929FA00134 +:1051E000939F500D112470E0CA010E942331603852 +:1051F000710540F46115710539F002C065E070E099 +:10520000862F08958FE7089581E0089580917F03A8 +:1052100080FF08C06091220270E0759567957595D2 +:10522000679521C081FF06C06091220270E07595EC +:10523000679519C082FF04C06091220270E010C01F +:10524000909180039923C1F0609121029617A0F7F5 +:1052500080912202899FC001112470E00E942331B5 +:105260006038710528F46115710521F0862F0895C5 +:105270008FE7089581E0089561E070E0F4CF803F0A +:1052800021F40E94BD28819504C0813F29F40E9429 +:10529000BD28809383030895823F21F40E94BD2896 +:1052A000819504C0833F29F40E94BD288093820326 +:1052B0000895893F19F40E94062905C08A3F31F4F8 +:1052C0000E94062981958093840308958B3F21F4E1 +:1052D0000E940629819504C08C3F29F40E9406296A +:1052E000809385030895843F21F480918103816038 +:1052F00017C0853F21F480918103826011C0863FF1 +:1053000021F48091810384600BC0873F21F4809158 +:105310008103886005C0883F31F4809181038061FA +:105320008093810308958D3F21F480917F038160F4 +:105330000BC08E3F21F480917F03826005C08F3FB8 +:1053400029F480917F03846080937F030895803FD8 +:1053500039F48091830387FF6CC01092830369C086 +:10536000813F29F4809183031816BCF362C09091A9 +:105370008203823F29F497FF5CC01092820359C0D8 +:10538000833F19F41916CCF354C0893F41F480913E +:10539000840318160CF04DC0109284034AC08A3F53 +:1053A00029F48091840387FF44C0F6CF8B3F39F402 +:1053B0008091850387FF3DC0109285033AC08C3FE2 +:1053C00029F4809185031816BCF333C0843F21F47F +:1053D000809181038E7F17C0853F21F480918103E6 +:1053E0008D7F11C0863F21F4809181038B7F0BC09C +:1053F000873F21F480918103877F05C0883F31F486 +:10540000809181038F7E8093810313C08D3F21F4AF +:1054100080917F038E7F0BC08E3F21F480917F03AC +:105420008D7F05C08F3F29F480917F038B7F809310 +:105430007F038091820381110EC0809183038111CB +:105440000AC080918403811106C080918503811177 +:1054500002C010928003089581E893E00E94551BDA +:105460000E94D32790937E0380937D0308951F931A +:10547000CF93DF9380917D0390917E030E94DF277D +:10548000AC0190918003992321F02091250230E016 +:1054900006C0209126028AE0289F9001112442171D +:1054A000530708F486C080918203C0918303D09192 +:1054B000840310918503811107C0C11176C0D111F9 +:1054C00074C0111172C075C09F3F19F09F5F909317 +:1054D0008003181624F40E94BD28809382038091D3 +:1054E000820387FF05C00E94BD28819580938203B7 +:1054F0001C1624F40E94BD288093830380918303AB +:1055000087FF05C00E94BD28819580938303609129 +:105510008203662339F1C0918303CC2319F17727E5 +:1055200067FD7095872F972F0E94932E23E333E317 +:1055300043E35FE30E94472F0E94602E6093820343 +:105540006C2F772767FD7095872F972F0E94932EDA +:1055500023E333E343E35FE30E94472F0E94602E7F +:10556000609383031D1624F40E940629809384030C +:105570008091840387FF05C00E940629819580934E +:105580008403111624F40E940629809385038091D8 +:10559000850387FF05C00E940629819580938503B6 +:1055A000DF91CF911F910C942C2A9F3F09F08ECF51 +:1055B00096CFDF91CF911F910895E1E8F3E085E068 +:1055C000DF011D928A95E9F71092800310927F0304 +:1055D0000895833081F128F4813059F08230D1F080 +:1055E0000895853009F449C0B8F1863009F456C0F1 +:1055F000089580912602262F30E0280F311D2F3F7D +:10560000310524F4680F6093260208958FEF80938C +:105610002602089580912502262F30E0280F311DA3 +:105620002F3F310524F4680F6093250208958FEF12 +:1056300080932502089580912402262F30E0280FC0 +:10564000311D2F3F310524F4680F60932402089523 +:105650008FEF80932402089580912302262F30E05B +:10566000280F311D2F3F310524F4680F609323026A +:1056700008958FEF80932302089580912202262FB0 +:1056800030E0280F311D2F3F310524F4680F60935F +:10569000220208958FEF80932202089580912102C3 +:1056A000262F30E0280F311D2F3F310524F4680FDD +:1056B0006093210208958FEF809321020895833033 +:1056C00011F128F4813049F0823091F0089585304D +:1056D00081F120F18630C1F108958091260268178A +:1056E00020F4861B809326020895109226020895C6 +:1056F00080912502681720F4861B80932502089567 +:1057000010922502089580912402681720F4861BC8 +:105710008093240208951092240208958091230218 +:10572000681720F4861B80932302089510922302A9 +:10573000089580912202681720F4861B809322022C +:10574000089510922202089580912102681720F492 +:10575000861B8093210208951092210208950F93D1 +:105760001F938732D8F58E3108F087C08E3009F448 +:1057700071C098F4873009F45BC08B3009F491C094 +:10578000863009F095C080917703817F8E7F80936A +:10579000770381E0809387038CC0863109F481C050 +:1057A00068F4803109F084C08091770383FB22275D +:1057B00020F991E0922790FB83F955C0893109F4D3 +:1057C00070C08B3109F074C08091770381FB222770 +:1057D00020F991E0922790FB81F945C0883309F4C4 +:1057E00060C050F4893209F45EC0853309F45BC0AF +:1057F000873209F458C05CC0833409F454C028F4DB +:105800008A3308F455C0895339C0883409F050C030 +:105810000E945B210E94D6070FEF13ED20E3015099 +:1058200010402040E1F700C000000E942E2839C03F +:1058300090917703892F8095817080FB90F929F0F2 +:10584000966098609093770334C0997F977F909388 +:10585000770327C08091770382FB222720F991E00C +:10586000922790FB82F9809377039923D1F080915E +:10587000770381608093770314C08D5141E050E03D +:1058800060E070E08A019B0104C0000F111F221F1D +:10589000331F8A95D2F7C901B8010E9417250E94CB +:1058A0005B2181E006C061E070E080E090E0F5CF30 +:1058B00080E01F910F91089580E0089580E00895A1 +:1058C000CF93C82F80918703813069F018F0823020 +:1058D000C9F184C0E0911F02F091200280818232E0 +:1058E00009F07EC007C0E0911F02F0912002808184 +:1058F000823261F48C2F0E945C2C811104C08C2FA9 +:105900000E94AF2B1DC081E090E01AC08C2F0E9436 +:105910005E2C811114C0C43179F048F4CB3079F099 +:10592000C03109F061C082E08093870308C0C932AA +:1059300019F0C83321F058C01092870355C081E098 +:10594000817054C0C93291F120F5C43179F1B0F4BD +:10595000C73009F047C08EE18093260282E380932E +:1059600025028AE08093240284E18093230288E068 +:105970008093220288E28093210234C0CE51C63047 +:1059800088F5EC2FF0E0E256FD4F8081809386038E +:1059900029C0CE34E9F020F4CB3421F56AE013C0FD +:1059A000C13579F0C235F1F461E00DC08091860314 +:1059B000882319F01092860315C081E08093870335 +:1059C00015C061E006C0809186030E94E92A0AC0E2 +:1059D0006AE0809186030E945F2B04C010928703C7 +:1059E00080E004C081E002C080E0AACFCF9108959A +:1059F0000E948A28811102C00E9466280E94AB285A +:105A00008093A20380FF02C0869501C080E00C94C1 +:105A1000F6058091A203982F9695292F30E0233028 +:105A200031054CF49F5F990F8170892B81608093C1 +:105A3000A2030E94AF288091A20386950C94F605DC +:105A40008091A203982F969591F09158990F8170AB +:105A5000892B8093A2038E7F91E009F490E08091DE +:105A6000A20390FB80F98093A2030E94AF2880914B +:105A7000A20386950C94F6058091A203982F909529 +:105A800090FB80F98093A2030E94AF288091A2032B +:105A900080FF02C0869501C080E00C94F6059091CD +:105AA000A203892F86958F5F8F779170843028F4B9 +:105AB000880F892B8093A20302C09093A203809148 +:105AC000A2038E7F91E009F490E08091A20390FB05 +:105AD00080F98093A2030E94AF288091A20386954B +:105AE0000C94F6052091A203922F96958927982F62 +:105AF000990F822F8170892B8093A2038E7F91E072 +:105B000009F490E08091A20390FB80F98093A203B6 +:105B10000E94AF288091A20386950C94F6055058F8 +:105B2000BB27AA270ED075C166D130F06BD120F00B +:105B300031F49F3F11F41EF45BC10EF4E095E7FBD6 +:105B400051C1E92F77D180F3BA1762077307840731 +:105B5000950718F071F49EF58FC10EF4E0950B2EA9 +:105B6000BA2FA02D0B01B90190010C01CA01A001AF +:105B70001124FF27591B99F0593F50F4503E68F10A +:105B80001A16F040A22F232F342F4427585FF3CF4B +:105B9000469537952795A795F0405395C9F77EF41C +:105BA0001F16BA0B620B730B840BBAF09150A1F065 +:105BB000FF0FBB1F661F771F881FC2F70EC0BA0FEB +:105BC000621F731F841F48F4879577956795B79573 +:105BD000F7959E3F08F0B3CF9395880F08F099276B +:105BE000EE0F979587950895D9D008F481E0089530 +:105BF0000CD00FC107D140F0FED030F021F45F3F50 +:105C000019F0F0C0511139C1F3C014D198F39923A0 +:105C1000C9F35523B1F3951B550BBB27AA27621770 +:105C20007307840738F09F5F5F4F220F331F441FB5 +:105C3000AA1FA9F333D00E2E3AF0E0E830D09150ED +:105C40005040E695001CCAF729D0FE2F27D0660FDA +:105C5000771F881FBB1F261737074807AB07B0E819 +:105C600009F0BB0B802DBF01FF2793585F4F2AF02F +:105C70009E3F510568F0B6C000C15F3FECF3983E0F +:105C8000DCF3869577956795B795F7959F5FC9F78C +:105C9000880F911D9695879597F90895E1E0660F15 +:105CA000771F881FBB1F621773078407BA0720F08E +:105CB000621B730B840BBA0BEE1F88F7E0950895F7 +:105CC00004D06894B111D9C00895BCD088F09F5712 +:105CD00090F0B92F9927B751A0F0D1F0660F771F38 +:105CE000881F991F1AF0BA95C9F712C0B13081F018 +:105CF000C3D0B1E00895C0C0672F782F8827B85F60 +:105D000039F0B93FCCF3869577956795B395D9F778 +:105D10003EF490958095709561957F4F8F4F9F4F82 +:105D20000895E89409C097FB3EF49095809570958E +:105D300061957F4F8F4F9F4F9923A9F0F92F96E9D7 +:105D4000BB279395F695879577956795B795F1114C +:105D5000F8CFFAF4BB0F11F460FF1BC06F5F7F4FE9 +:105D60008F4F9F4F16C0882311F096E911C07723FB +:105D700021F09EE8872F762F05C0662371F096E804 +:105D8000862F70E060E02AF09A95660F771F881FD3 +:105D9000DAF7880F9695879597F90895990F000877 +:105DA000550FAA0BE0E8FEEF16161706E807F907ED +:105DB000C0F012161306E407F50798F0621B730B88 +:105DC000840B950B39F40A2661F0232B242B252B09 +:105DD00021F408950A2609F4A140A6958FEF811DAC +:105DE000811D089597F99F6780E870E060E008954D +:105DF0009FEF80EC089500240A94161617061806E3 +:105E00000906089500240A941216130614060506BE +:105E10000895092E0394000C11F4882352F0BB0F4F +:105E200040F4BF2B11F460FF04C06F5F7F4F8F4FB2 +:105E30009F4F089557FD9058440F551F59F05F3FED +:105E400071F04795880F97FB991F61F09F3F79F09C +:105E500087950895121613061406551FF2CF46951E +:105E6000F1DF08C0161617061806991FF1CF8695A0 +:105E70007105610508940895E894BB276627772784 +:105E8000CB0197F908958ADF08F48FEF08950BD0BE +:105E9000C0CFB1DF28F0B6DF18F0952309F0A2CF0C +:105EA000A7CF1124EACFC6DFA0F3959FD1F3950FBA +:105EB00050E0551F629FF001729FBB27F00DB11D8E +:105EC000639FAA27F00DB11DAA1F649F6627B00D1E +:105ED000A11D661F829F2227B00DA11D621F739F07 +:105EE000B00DA11D621F839FA00D611D221F749F15 +:105EF0003327A00D611D231F849F600D211D822F5C +:105F0000762F6A2F11249F5750408AF0E1F08823A2 +:105F10004AF0EE0FFF1FBB1F661F771F881F9150AF +:105F20005040A9F79E3F510570F05CCFA6CF5F3F70 +:105F3000ECF3983EDCF3869577956795B795F795E2 +:105F4000E7959F5FC1F7FE2B880F911D969587956A +:105F500097F90895FA01EE0FFF1F309621053105DC +:105F600099F16115710561F48038BFE39B0749F130 +:105F700068949038810561F08038BFEF9B0741F04D +:105F8000992342F5FF3FE1053105210511F1E89420 +:105F90000894E795D901AA2329F4AB2FBE2FF85F07 +:105FA000D0F310C0FF5F70F4A695E0F7F73950F01A +:105FB00019F0FF3A38F49F779F930CD00F9007FCAD +:105FC000905808953EF014CF60E070E080E89FE3C1 +:105FD00008954FE79F775F934F933F932F939ED002 +:105FE0002F913F914F915F9152DF05C019F40EF050 +:105FF000F9CE42CFFDCE26DFC8F39638C0F707F8BA +:106000000F92E8942BE33AEA48EB5FE74EDF0F92FA +:106010000F920F924DB75EB70F92C0D0E0E4F1E05F +:1060200016D04F915F91EF91FF91E595EE1FFF1F05 +:1060300049F0FE57E0684427EE0F441FFA95E1F758 +:106040004195550B32D00F9007FE26C00895DF937F +:10605000CF931F930F93FF92EF92DF927B018C01FE +:10606000689405C0DA2EEF011EDFFE01E894A591C9 +:106070002591359145915591AEF3EF0162DDFE0119 +:106080009701A801DA9479F7DF90EF90FF900F91D4 +:106090001F91CF91DF9108959B01AC0160E070E00A +:1060A00080E89FE3A5CD9ECEACC0CCDEE8F399237B +:1060B000D9F3940F511DBBF39150504094F059F017 +:1060C000882332F0660F771F881F91505040C1F728 +:1060D0009E3F510544F7880F911D9695879597F936 +:1060E00008955F3FACF0983E9CF0BB27869577956E +:1060F0006795B79508F4B1609395C1F7BB0F58F752 +:1061000011F460FFE8CF6F5F7F4F8F4F9F4FE3CF5A +:10611000B4CE0EF076C06CCE689464CE93DEC8F335 +:106120009923D1F3C6F3DF93CF931F930F93FF927D +:10613000C92FDD2788232AF02197660F771F881F34 +:10614000DAF720E030E040E85FEB9FE3883920F0A9 +:10615000803E30F021968F77E3DCE8E6F1E003C083 +:10616000DFDCE5E9F1E073DF8B01BE01EC01FB2E22 +:106170006F5771097595771F880B990BD4DD28E14E +:1061800032E741E35FE38FDEAF2D9801AE01FF9070 +:106190000F911F91CF91DF91D4DC3BCEFA01DC014E +:1061A000AA0FBB1F9B01AC01BF5728F4222733273E +:1061B000442750781FC0B75188F4AB2F0024469570 +:1061C00037952795011CA395D2F3002069F0220F83 +:1061D000331F441FB395DAF30DD0A1CC61307105A4 +:1061E000A0E88A07B94630F49B01AC0166277727FF +:1061F00088279078309621F020833183428353831F +:1062000008959F3F31F0915020F4879577956795D9 +:10621000B795880F911D9695879597F90895AA1BB4 +:10622000BB1B51E107C0AA1FBB1FA617B70710F081 +:10623000A61BB70B881F991F5A95A9F780959095B3 +:10624000BC01CD01089597FB072E16F4009407D0EA +:1062500077FD09D00E940F3107FC05D03EF49095E0 +:1062600081959F4F0895709561957F4F0895EE0F2A +:10627000FF1F0590F491E02D0994F999FECF92BD8E +:1062800081BDF89A992780B50895A8E1B0E042E071 +:1062900050E00C946531262FF999FECF92BD81BD57 +:1062A000F89A019700B4021639F01FBA20BD0FB654 +:1062B000F894FA9AF99A0FBE08950196272F0E9432 +:1062C0004C310C944B31DC01CB01FC01F999FECF30 +:1062D00006C0F2BDE1BDF89A319600B40D9241506E +:0A62E0005040B8F70895F894FFCF7E +:1062EA0007000C52D02445000000410000DC4400A5 +:1062FA0000004152D0A4440000404100005C440028 +:10630A0000004148F17644000000415C978A44004D +:10631A000000411FD592440000004152D0A444001D +:10632A000000415CFFB844000000410AA7CF4400C6 +:10633A000000410000DC44000000410AA7CF4400ED +:10634A000000410000DC44000000410000000000A1 +:10635A0000804052D0244500004041000000000067 +:10636A000080400AA74F45000040410AA7CF4400D9 +:10637A000000410000DC4400000041000000000071 +:10638A0000804052D0244500000041000000000077 +:10639A000080405CFF38450000004100000000001A +:1063AA0000804052D02445000000410AA7CF440093 +:1063BA000000410000DC4400000041000000000031 +:1063CA0000804052D024450000804110F1764400FC +:1063DA0000A04112F1F6440000004141909B4400A4 +:1063EA0000A04112F1F64400000041050000003F00 +:1063FA000000C8426A14F814D514A1146D14016C73 +:10640A00032808140A321E000002000400050007CF +:10641A000009000B000C000E0010001100130015FB +:10642A0000170018001A001C001D001F002100237D +:10643A000024002600280029002B002D002F003000 +:10644A0000320034003500370039003B0042004575 +:10645A000025002600430061006000200037006428 +:10646A000065006600670044004600240047003FBC +:10647A004D36010BB40A7E0A2A0A430A5C0A010253 +:08648A000304050607080900E0 +:00000001FF diff --git a/keyboard/preonic/preonic_pcb_silent.hex b/keyboard/preonic/preonic_pcb_silent.hex deleted file mode 100644 index cc59d3fe..00000000 --- a/keyboard/preonic/preonic_pcb_silent.hex +++ /dev/null @@ -1,1189 +0,0 @@ -:100000000C9465020C94A9020C94A9020C94A90208 -:100010000C94A9020C94A9020C94A9020C94A902B4 -:100020000C94A9020C94A9020C94430D0C94150E87 -:100030000C942B1C0C94A9020C94A9020C94A902F8 -:100040000C94A9020C94A9020C94A9020C94A90284 -:100050000C94A9020C94981C0C94A9020C94A9026B -:100060000C94A9020C94A9020C94A9020C94A90264 -:100070000C94A9020C94A9020C94A9020C94A90254 -:100080000C94A9020C94A9020C94A9020C94A90244 -:100090000C94A9020C94A9020C94A9020C94A90234 -:1000A0000C94A9020C94A9020C94A90235001E001C -:1000B0001F0020002100220023002400250026002C -:1000C00027002A002B0014001A0008001500170052 -:1000D0001C0018000C00120013002A002900040064 -:1000E0001600070009000A000B000D000E000F00AB -:1000F00033003400E1001D001B000600190005005C -:100100001100100036003700380028000030E000F1 -:10011000E200E30003522C002C0004525000510076 -:1001200052004F0035001E001F0020002100220059 -:10013000230024002500260027002A002B0014009D -:100140001A00090013000A000D000F0018001C001F -:1001500033002A00290004001500160017000700CC -:100160000B00110008000C0012003400E1001D001B -:100170001B000600190005000E00100036003700B5 -:10018000380028000030E000E200E30003522C00B9 -:100190002C0004525000510052004F0035001E0048 -:1001A0001F0020002100220023002400250026003B -:1001B00027002A002B0034003600370013001C00F3 -:1001C00009000A00060015000F002A00290004009B -:1001D0001200080018000C0007000B0017001100A7 -:1001E00016003800E100330014000D000E001B0063 -:1001F000050010001A0019001D0028000030E00062 -:10020000E200E30003522C002C0004525000510085 -:1002100052004F0035001E001F0020002100220068 -:10022000230024002500260027002A0035021E0294 -:100230001F0220022102220223022402250226029A -:1002400027022A0001003A003B003C003D003E002E -:100250003F002D022E022F02300231020100400029 -:100260004100420043004400450000530153025343 -:100270000050010001000100010001000100010027 -:1002800001000100AB00AA00A900AE0035001E006D -:100290001F0020002100220023002400250026004A -:1002A00027002A0035001E001F0020002100220028 -:1002B000230024002500260027002A0001003A0020 -:1002C0003B003C003D003E003F002D002E002F0073 -:1002D0003000310001004000410042004300440072 -:1002E000450000530153025300500100010001007A -:1002F000010001000100010001000100AB00AA00A3 -:10030000A900AE002A0354006800650020005000D8 -:10031000720065006F006E006900630020004B00F2 -:100320006500790062006F006100720064000000E7 -:100330002C034F007200740068006F006C006900AD -:100340006E0065006100720020004B0065007900BE -:1003500062006F006100720064007300000004031B -:10036000090409027400040100A0FA090400000154 -:1003700003010100092111010001223F000705814D -:100380000308000A09040100010301020009211108 -:10039000010001224D000705820308000A0904023A -:1003A00000010300000009211101000122360007AD -:1003B00005830308000A0904030002030000000982 -:1003C00021110100012220000705840320000107FC -:1003D0000504032000011201100100000008EDFED9 -:1003E00061600100010200010631FF0974A10109E9 -:1003F00075150025FF9520750881020976150025E1 -:10040000FF952075089102C005010980A1018502B0 -:1004100016010026B7001A01002AB70075109501D1 -:100420008100C0050C0901A1018503160100269C6D -:10043000021A01002A9C02751095018100C0050175 -:100440000902A1010901A1000509190129051500E9 -:10045000250195057501810295017503810105014D -:10046000093009311581257F950275088106093803 -:100470001581257F950175088106050C0A3802153E -:1004800081257F950175088106C0C005010906A177 -:1004900001050719E029E715002501950875018177 -:1004A0000295017508810105081901290595057551 -:1004B0000191029501750391010507190029FF15A6 -:1004C0000025FF950675088100C011241FBECFEFDF -:1004D000DAE0DEBFCDBF04B603FE24C08091F10197 -:1004E0009091F201A091F301B091F4018730904B0B -:1004F000A740B04BB9F41092F1011092F2011092A2 -:10050000F3011092F40114BE84B7877F84BF88E1A1 -:100510000FB6F89480936000109260000FBEE0E088 -:10052000F8E3099511E0A0E0B1E0E0EEF9E402C0E3 -:1005300005900D92A435B107D9F711E0A4E5B1E01B -:1005400001C01D92A13FB107E1F70E94720A0C940D -:10055000EE240C94000061110DC0FC0182818823FF -:1005600031F085EE0E9426110E94272303C085EEFC -:100570000E94EE1180E090E00895089508950E9491 -:10058000D1026E9A769A8DEB92E0892B11F00C9441 -:10059000BD0208958EEB92E0892B11F00C94BE02FF -:1005A0000895279A2F988FEF9FEF9093870080935D -:1005B00086008AE08093800089E1809381000C941A -:1005C000D02281110BC080918000877F80938000B2 -:1005D00010928D0010928C002F9808952F988330E0 -:1005E00041F4809180008860809380008FEF9FEFBE -:1005F00012C09091800098609093800023E030E0DA -:10060000281B3109220F331F8FEF9FEF02C09695F1 -:1006100087952A95E2F790938D0080938C0008953A -:100620008B3B910568F4883A910530F5853A910540 -:10063000C0F48430910598F4019709F06FC071C03F -:10064000803E910508F46AC0883E910540F09C0107 -:10065000205F31092031310508F060C05CC09C0189 -:10066000A1C0853A910509F45FC0863A910509F465 -:100670005EC023E830E496C0883A910509F45AC078 -:10068000893A910509F459C08A3A910509F458C08C -:100690008B3A910509F457C08C3A910509F456C07C -:1006A0008D3A910509F455C0803B910509F454C079 -:1006B0008E3A910509F453C08F3A910509F452C05E -:1006C000813B910509F451C0823B910509F450C06A -:1006D000833B910509F44FC0843B910509F44EC05A -:1006E000853B910509F44DC0863B910509F44CC04A -:1006F000873B910509F44BC0883B910509F44AC03A -:10070000893B910509F449C08A3B910509F048C02D -:100710002AE236E447C09C01306544C020E030E066 -:1007200041C021E030E03EC021E830E43BC022E897 -:1007300030E438C022EE34E435C029EE34E432C06F -:100740002AEE34E42FC025EB34E42CC026EB34E44D -:1007500029C027EB34E426C02CEC34E423C02DEC74 -:1007600034E420C023E835E41DC02AE835E41AC08B -:1007700022E935E417C024E935E414C021E236E467 -:1007800011C023E236E40EC024E236E40BC025E2B9 -:1007900036E408C026E236E405C027E236E402C0AB -:1007A00020E034E4C901089508959CE0799FF001A8 -:1007B00011249CE3899FE00DF11D1124E60FF11D2A -:1007C000EE0FFF1FE455FF4F25913491C9010895A5 -:1007D000880F991F845D9040FC0125913491C901D7 -:1007E0000895880F991F84559F4FFC0125913491DE -:1007F000C90108950E94D5039C019A9581159F41D6 -:1008000010F4C9010895C90190528115904128F44E -:10081000C9019F700E94F1030895C9019053811589 -:10082000904120F4C9019927906C0895C901905412 -:10083000409728F4C9018F709927946D089520314D -:1008400080E4380719F480E091ED0895213190E4B7 -:10085000390719F480E090ED0895223140E434071F -:1008600019F480E092ED0895233180E4380719F4FB -:1008700080E093ED0895211590E5390769F40E9411 -:1008800015162FEF44E38CE0215040408040E1F703 -:1008900000C000000C94BD1C213090E5390731F4F4 -:1008A0008091D00181608093D0010895C901905555 -:1008B0008115904108F062C0432F55274F7055278E -:1008C00041305105F9F4C90174E0880F991F7A95F8 -:1008D000E1F788279370B901E3E0660F771FEA9587 -:1008E000E1F760767727862B972B9C682370332758 -:1008F00002C0440F551F2A95E2F74F715527842BEC -:10090000952B08954230510529F4922F8827816F45 -:10091000906A089543305105B9F4C90153E0880F36 -:10092000991F5A95E1F7807E97702370332741E035 -:1009300050E002C0440F551F2A95E2F74F7155272A -:10094000842B952B9C6808954430510549F5C901C5 -:1009500043E0880F991F4A95E1F7807E97702370D6 -:10096000332741E050E002C0440F551F2A95E2F7BB -:100970004F715527842B952B9A680895C90190577C -:100980008115904120F4C9019F7090620895C901BA -:1009900090588115904120F4C9019F70906A089584 -:1009A000203E3105E0F4203C310568F52133310566 -:1009B00009F475C048F42932310509F46BC02A32B4 -:1009C000310509F07BC075C02933310501F12238AA -:1009D0003105E9F02533310509F070C051C0233EDF -:1009E0003105B1F140F4203E3105D1F0223E310510 -:1009F00009F064C01CC0263E310579F1273E31055F -:100A000009F05CC038C0C9010E94E80308958091D4 -:100A1000E10180FD02C081FF51C080EE90E04FC037 -:100A20008091E10180FFF9CF89E390E048C0809197 -:100A3000E10182FF0AC08091E10184FF03C080E0F0 -:100A400090E03DC083EE90E03AC082EE90E037C087 -:100A50008091E10182FFEFCFF8CF8091E10183FF28 -:100A600007C08091E10184FDEACF87EE90E027C0C6 -:100A700086EE90E024C08091E10183FFF2CFF8CFB1 -:100A80008091E10185FF03C089E290E018C085E311 -:100A900090E015C08091E10185FDF9CFF5CF8091FF -:100AA000E10186FF03C08AE290E009C081E390E0A3 -:100AB00006C08091E10186FDF9CFF5CFC9010E9402 -:100AC0001003089508955F926F927F928F929F9284 -:100AD000AF92BF92CF92DF92EF92FF920F931F934C -:100AE000CF93DF93CDB7DEB72A970FB6F894DEBF6A -:100AF0000FBECDBF9E012F5F3F4F4E018BE0880E92 -:100B0000911C60E070E000E010E0E12CF12CC12CC1 -:100B1000D12CA12CB12C8AE0782E622E532E41E0EC -:100B200050E0E4E1F1E0A62DB52D872D01900D9266 -:100B30008A95E1F7F901819191919F01FC01E07F94 -:100B4000FF27E032F10559F48F709927FA0102C0AE -:100B5000EE0FFF1F8A95E2F7AE2ABF2A37C0E033B7 -:100B6000F10559F48F709927FA0102C0EE0FFF1FAB -:100B70008A95E2F7CE2ADF2A29C0E034F10559F43C -:100B80008F709927FA0102C0EE0FFF1F8A95E2F7D6 -:100B9000EE2AFF2A1BC0E035F10559F48F70992722 -:100BA000FA0102C0EE0FFF1F8A95E2F70E2B1F2BF2 -:100BB0000DC0E036F10551F48F709927FA0102C09B -:100BC000EE0FFF1F8A95E2F76E2B7F2B2815390554 -:100BD00009F0A7CF94B18A2D8095892384B985B176 -:100BE0008A2985B997B18C2D8095892387B988B1D9 -:100BF0008C2988B99AB18E2D809589238AB98BB1B9 -:100C00008E298BB99DB1802F809589238DB98EB1A6 -:100C1000802B8EB990B3862F8095892380BB81B3BA -:100C2000862B81BB2A960FB6F894DEBF0FBECDBFD0 -:100C3000DF91CF911F910F91FF90EF90DF90CF90B8 -:100C4000BF90AF909F908F907F906F905F9008952E -:100C50005F926F927F928F929F92AF92BF92CF924C -:100C6000DF92EF92FF920F931F93CF93DF93CDB755 -:100C7000DEB768970FB6F894DEBF0FBECDBF85B75D -:100C8000806885BF85B7806885BF0E9463059E0127 -:100C90002F5F3F4F4E0189E1880E911C60E070E0AC -:100CA00000E010E0E12CF12CC12CD12CA12CB12CB6 -:100CB00098E1792E622E532E41E050E0EEE1F1E012 -:100CC000A62DB52D872D01900D928A95E1F7F9019A -:100CD000819191919F01FC01E07FFF27E032F105B6 -:100CE00059F48F709927FA0102C0EE0FFF1F8A9501 -:100CF000E2F7AE2ABF2A37C0E033F10559F48F700E -:100D00009927FA0102C0EE0FFF1F8A95E2F7CE2A5B -:100D1000DF2A29C0E034F10559F48F709927FA01D0 -:100D200002C0EE0FFF1F8A95E2F7EE2AFF2A1BC0D2 -:100D3000E035F10559F48F709927FA0102C0EE0FE2 -:100D4000FF1F8A95E2F70E2B1F2B0DC0E036F10531 -:100D500051F48F709927FA0102C0EE0FFF1F8A9598 -:100D6000E2F76E2B7F2B2815390509F0A7CF94B138 -:100D70008A2D8095892384B985B18A2985B997B14F -:100D80008C2D8095892387B988B18C2988B99AB12F -:100D90008E2D809589238AB98BB18E298BB99DB10F -:100DA000802F809589238DB98EB1802B8EB990B319 -:100DB000862F8095892380BB81B3862B81BB1092BF -:100DC00055011092540110925F0110925E01109231 -:100DD0005701109256011092610110926001109219 -:100DE0005901109258011092630110926201109201 -:100DF0005B0110925A0110926501109264011092E9 -:100E00005D0110925C0110926701109266018FEBF8 -:100E100092E0892BB9F068960FB6F894DEBF0FBE4A -:100E2000CDBFDF91CF911F910F91FF90EF90DF9099 -:100E3000CF90BF90AF909F908F907F906F905F907A -:100E40000C94BF0268960FB6F894DEBF0FBECDBFFC -:100E5000DF91CF911F910F91FF90EF90DF90CF9096 -:100E6000BF90AF909F908F907F906F905F9008950C -:100E70005F926F927F928F929F92AF92BF92CF922A -:100E8000DF92EF92FF920F931F93CF93DF93CDB733 -:100E9000DEB7A2970FB6F894DEBF0FBECDBF7E01BE -:100EA00049E1E40EF11C2EE5C22E21E0D22E5E01B6 -:100EB00053E2A50EB11C3AE0532E470101E010E0C9 -:100EC00048E1642E55E0752EE4E1F1E0D401852D72 -:100ED00001900D928A95E1F7F701819191917F013F -:100EE0009C01207F33272032310589F424B18F7093 -:100EF0009927A80102C0440F551F8A95E2F7CA013D -:100F0000242B24B995B18095892385B94FC020330E -:100F1000310589F427B18F709927F80102C0EE0FCF -:100F2000FF1F8A95E2F7CF012E2B27B998B1809544 -:100F3000892388B93BC02034310589F42AB18F70E8 -:100F40009927A80102C0440F551F8A95E2F7CA01EC -:100F5000242B2AB99BB1809589238BB927C02035D2 -:100F6000310589F42DB18F709927F80102C0EE0F79 -:100F7000FF1F8A95E2F7CF012E2B2DB99EB18095E8 -:100F800089238EB913C02036310581F420B38F70C8 -:100F90009927A80102C0440F551F8A95E2F7CA019C -:100FA000242B20BB91B38095892381BB50EA5A95AD -:100FB000F1F7BE016F5F7F4F80E090E020E030E00E -:100FC000EEE1F1E0DE011196462D01900D924A9579 -:100FD000E1F7FB0141915191BF01FA01E07FFF2749 -:100FE000E032F10511F4E3B113C0E033F10511F47F -:100FF000E6B10EC0E034F10511F4E9B109C0E03505 -:10100000F10511F4ECB104C0E036F105B9F4EFB12B -:10101000F0E04F70552702C0F595E7954A95E2F745 -:10102000E0FD08C0A801022E02C0440F551F0A941B -:10103000E2F702C040E050E0842B952B2F5F3F4F3A -:101040002C30310509F0BCCFF60120813181281701 -:10105000390721F091838083709200010E9463051B -:10106000F2E0CF0ED11CEA14FB0409F02DCF8091E1 -:1010700000018823A1F1815080930001882339F079 -:101080008FE99FE00197F1F700C0000028C0809130 -:101090005E0190915F01909355018093540180917E -:1010A0006001909161019093570180935601809166 -:1010B000620190916301909359018093580180914E -:1010C00064019091650190935B0180935A01809136 -:1010D00066019091670190935D0180935C018AECB9 -:1010E00092E0892B11F00E94CA0281E0A2960FB60D -:1010F000F894DEBF0FBECDBFDF91CF911F910F914E -:10110000FF90EF90DF90CF90BF90AF909F908F9027 -:101110007F906F905F900895E82FF0E0EE0FFF1F33 -:10112000EC5AFE4F8081918108950895809171015C -:101130000895CF93DF9300D01F92CDB7DEB72091F3 -:10114000E701243021F523E029839B838A832093C0 -:10115000E9008FEF06C095ED9A95F1F7000088231E -:1011600029F09091E800815095FFF5CF8091E8003B -:1011700085FF0DC040E050E063E070E0CE010196D5 -:101180000E94280B8091E8008E778093E8000F90F2 -:101190000F900F90DF91CF910895CF93DF9300D000 -:1011A0001F92CDB7DEB72091E701243029F522E068 -:1011B00029839B838A8383E08093E9008FEF06C0B5 -:1011C00095ED9A95F1F70000882329F09091E800B9 -:1011D000815095FFF5CF8091E80085FF0DC040E07C -:1011E00050E063E070E0CE0101960E94280B8091F0 -:1011F000E8008E778093E8000F900F900F90DF91BA -:10120000CF9108952091E7012430F9F422E0209352 -:10121000E9002FEF06C035ED3A95F1F700002223E3 -:1012200029F03091E800215035FFF5CF2091E800FA -:1012300025FF0BC040E050E065E070E00E94280B05 -:101240008091E8008E778093E8000895CF93DF9334 -:10125000EC018091E701843041F581E08093E90061 -:101260008FEF06C095ED9A95F1F70000882329F0DD -:101270009091E800815095FFF5CF8091E80085FFBF -:1012800014C040E050E068E070E0CE010E94280BFE -:101290008091E8008E778093E80088E0FE01A9E65F -:1012A000B1E001900D928A95E1F7DF91CF91089519 -:1012B0008091E601811109C00E94C80C0E94250D91 -:1012C0008091E20084608093E20008951092E6012C -:1012D0000895089508950C94201C809172018F5FE9 -:1012E0008093720162E30E948924911135C01092AB -:1012F000720180917301882379F18091E701843034 -:1013000049F58091E9008F709091EC0090FF02C048 -:1013100090E801C090E0982B84E08093E9008091F0 -:10132000EB0080FF14C08091EE0087FD03C00FC06A -:101330001092F1008091E80085FDFACF8091E800DD -:1013400080FF05C08091E8008E778093E8009F7051 -:101350009093E90010927301089542E061EC81E0FE -:101360000E943E0C42E061EC82E00E943E0C42E0B2 -:1013700061EC83E00E943E0C42E261EC84E00C945C -:101380003E0C8091E901833009F454C030F481307F -:1013900071F0823009F0A5C08CC08A3009F479C0A0 -:1013A0008B3009F45FC0893009F09BC020C0809168 -:1013B000E801813A09F095C08091E800877F809329 -:1013C000E8008091EC019091ED01892B21F060E023 -:1013D00080E090E003C068E089E691E070E00E9460 -:1013E000770B8091E8008B778093E80008958091D7 -:1013F000E801813209F075C08091EC019091ED0116 -:10140000892B09F06EC08091E800877F8093E80007 -:1014100005C08091E701882309F463C08091E8004A -:1014200082FFF7CF8091F100809371018091E800F5 -:101430008B7753C08091E801813A09F052C08091C6 -:10144000EC019091ED01892B09F04BC08091E800EF -:10145000877F8093E8008091E80080FFFCCF809137 -:101460000B0136C08091E8018132D9F58091EC0101 -:101470009091ED01892BA9F58091E800877F8093F9 -:10148000E8000E94750C8091EA0180930B010C9496 -:1014900015168091E801813221F58091E800877F5F -:1014A0008093E8000E94750C8091EB0180936801A5 -:1014B00008958091E801813AA1F48091E800877F46 -:1014C0008093E8008091E80080FFFCCF8091680164 -:1014D0008093F1008091E8008E778093E8000C946F -:1014E000750C089584B7877F84BF88E10FB6F894A0 -:1014F00080936000109260000FBE90E080E80FB60D -:10150000F89480936100909361000FBE0E943310A5 -:101510000E94C80C0E94250D8091E2008460809397 -:10152000E20078940E94C20F0E94351081E091E0A1 -:101530000E94DF0F0BC00E94DD1B8091E501882314 -:1015400029F00E94081C81110E94120B8091E70172 -:10155000853089F30E943F10F9CF292F332723309C -:101560003105B1F04CF42130310509F44DC0223081 -:10157000310509F04EC007C02132310541F1223258 -:10158000310591F146C0E4E7F0E082E693E045C022 -:1015900099278130910569F08230910589F0892B76 -:1015A00009F037C0EEE5F3E0E491F0E08EE593E07A -:1015B00034C0E0E3F3E0E491F0E080E393E02DC099 -:1015C000E4E0F3E0E491F0E084E093E026C06430EE -:1015D00000F5E62FF0E0EE0FFF1FEA5CFE4F808182 -:1015E0009181E9E0F0E019C0643098F4E62FF0E072 -:1015F000DF01AA0FBB1FA25CBE4F8D919C91EA5BDD -:10160000FE4FE081F0E009C0E2E1F0E086ED93E01A -:1016100004C0E0E0F0E080E090E0DA018D939C937C -:10162000CF01089580E189BD82E189BD09B400FE42 -:10163000FDCF8091D8008F7D8093D8008091E0000D -:1016400082608093E0008091E00081FDFCCF0895EE -:10165000BF92CF92DF92EF92FF920F931F93CF939F -:10166000DF937C018B01EA010E94960CB82E811158 -:1016700033C0209731F028813981021B130BE20E11 -:10168000F31EC12CD12C23C08091E80085FD15C02C -:101690008091E8008E778093E800209749F0888158 -:1016A00099818C0D9D1D9983888325E0B22E14C0ED -:1016B0000E94960C882359F00EC0F70181917F019A -:1016C0008093F10001501109FFEFCF1ADF0A0115D5 -:1016D0001105D1F601C0B82E8B2DDF91CF911F914E -:1016E0000F91FF90EF90DF90CF90BF9008954091C1 -:1016F000EE015091EF014617570748F0611571054B -:1017000039F44091E8004E774093E80001C0BA01F7 -:10171000FC0140E033C08091E701882309F444C014 -:10172000853009F443C08091E80083FD41C0809179 -:10173000E80082FD33C08091E80080FF1FC09091D7 -:10174000F3008091F200392F20E0A901482BCA0153 -:1017500006C041914093F1006150710901966115F5 -:10176000710519F088309105A0F341E0089709F060 -:1017700040E08091E8008E778093E8006115710564 -:1017800051F64111C8CF0AC08091E701882361F06A -:10179000853061F08091E80083FD0AC08091E80007 -:1017A00082FFF2CF80E0089582E0089583E00895FB -:1017B00081E008954091EE015091EF0146175707DF -:1017C00048F06115710539F44091E8004E77409377 -:1017D000E80001C0BA01FC0140E034C08091E7019B -:1017E000882309F445C0853009F444C08091E8009D -:1017F00083FD42C08091E80082FD34C08091E80002 -:1018000080FF20C09091F3008091F200392F20E0FA -:10181000A901482BCA0107C044914093F1003196B9 -:101820006150710901966115710519F088309105B3 -:1018300098F341E0089709F040E08091E8008E7746 -:101840008093E8006115710549F64111C7CF0AC0C0 -:101850008091E701882361F0853061F08091E80094 -:1018600083FD0AC08091E80082FFF2CF80E00895F6 -:1018700082E0089583E0089581E00895982F2CC0B8 -:101880009093E900981739F07091EC002091ED00E9 -:101890005091F00003C0242F762F50E021FD02C0AC -:1018A0009F5F1AC03091EB003E7F3093EB00309188 -:1018B000ED003D7F3093ED003091EB0031603093CF -:1018C000EB007093EC002093ED005093F00020911A -:1018D000EE0027FDE5CF07C0973090F28F70809320 -:1018E000E90081E0089580E008958091E80187FD96 -:1018F00005C08091E80080FF0EC012C08091E80012 -:1019000082FD05C08091E7018111F8CF0895809193 -:10191000E8008B7708C08091E7018111EACF089534 -:101920008091E8008E778093E80008958091E4002C -:101930009091E50045E62091EC0020FD1FC023C0FA -:101940002091E701222391F0253091F02091EB00C6 -:1019500025FD10C02091E4003091E50028173907DB -:1019600051F34150C90139F784E0089582E00895A8 -:1019700083E0089581E0089580E008952091E800D3 -:1019800020FFDECFF9CF2091E80022FFD9CFF4CF9E -:101990000E94360D0E943E0DE0EEF0E080818160F5 -:1019A0008083E8EDF0E080818F77808319BCA7ED1C -:1019B000B0E08C918E7F8C9380818F7E808310929B -:1019C000E60108950F931F93CF93DF930E94360D86 -:1019D0000E943E0DC8EDD0E088818F778883888192 -:1019E0008068888388818F7D888319BC1092E70185 -:1019F0001092E3011092E5011092E40100EE10E074 -:101A0000F80180818B7F808388818160888342E0B8 -:101A100060E080E00E943E0CE1EEF0E080818E7F8D -:101A20008083E2EEF0E08081816080838081886045 -:101A30008083F80180818E7F8083888180618883A4 -:101A4000DF91CF911F910F910895E8EDF0E0808133 -:101A50008F7E8083E7EDF0E080818160808384E089 -:101A600082BF81E08093E6010C94E20CE8EDF0E0A7 -:101A700080818E7F80831092E20008951092DA00B8 -:101A80001092E10008951F920F920FB60F92112449 -:101A90002F933F934F935F936F937F938F939F9376 -:101AA000AF93BF93EF93FF938091E10082FF0BC050 -:101AB0008091E20082FF07C08091E1008B7F8093DC -:101AC000E1000E946D098091DA0080FF1FC08091C3 -:101AD000D80080FF1BC08091DA008E7F8093DA00EF -:101AE0008091D90080FF0DC080E189BD82E189BD70 -:101AF00009B400FEFDCF81E08093E7010E94580900 -:101B000005C019BC1092E7010E9466098091E100AE -:101B100080FF19C08091E20080FF15C08091E20033 -:101B20008E7F8093E2008091E20080618093E200EA -:101B30008091D80080628093D80019BC85E08093A2 -:101B4000E7010E946A098091E10084FF30C0809122 -:101B5000E20084FF2CC080E189BD82E189BD09B427 -:101B600000FEFDCF8091D8008F7D8093D8008091BA -:101B7000E1008F7E8093E1008091E2008F7E809370 -:101B8000E2008091E20081608093E2008091E301B5 -:101B9000882311F084E007C08091E30087FF02C032 -:101BA00083E001C081E08093E7010E946B0980918E -:101BB000E10083FF29C08091E20083FF25C080916E -:101BC000E100877F8093E10082E08093E70110923B -:101BD000E3018091E1008E7F8093E1008091E2003B -:101BE0008E7F8093E2008091E20080618093E2002A -:101BF00042E060E080E00E943E0C8091F00088604E -:101C00008093F0000E946909FF91EF91BF91AF911D -:101C10009F918F917F916F915F914F913F912F9104 -:101C20000F900FBE0F901F9018951F920F920FB636 -:101C30000F9211242F933F934F935F936F937F9352 -:101C40008F939F93AF93BF93CF93EF93FF93809125 -:101C5000E9008F709091EC0090FF02C090E801C005 -:101C600090E0C92FC82B1092E9008091F000877F87 -:101C70008093F00078940E94590E1092E9008091B0 -:101C8000F00088608093F000CF70C093E900FF916E -:101C9000EF91CF91BF91AF919F918F917F916F9174 -:101CA0005F914F913F912F910F900FBE0F901F901A -:101CB00018951F93CF93DF93CDB7DEB7AC970FB6D0 -:101CC000F894DEBF0FBECDBFE8EEF1E08091F100E9 -:101CD000819321E0E03FF207C9F70E94C10980919A -:101CE000E80083FF37C18091E8019091E9019530C8 -:101CF00009F488C038F49130B1F170F0933009F0F4 -:101D000029C131C0983009F4F8C0993009F404C1F0 -:101D1000963009F01FC19DC0803821F0823809F04B -:101D200019C108C08091E4019091E501992389F0DF -:101D300082600FC08091EC019091ED018F70992726 -:101D40008093E9008091EB0085FB882780F9109251 -:101D5000E9009091E800977F9093E8008093F1006C -:101D60001092F100D5C0882319F0823009F0F2C03A -:101D70008F7121F0823009F0EDC00BC08091EA0133 -:101D8000813009F0E7C0933009F080E08093E501ED -:101D90002FC08091EA0181112BC08091EC019091BC -:101DA000ED018F709927009709F4D4C08093E90062 -:101DB0002091EB0020FF1CC02091E901233021F489 -:101DC0008091EB00806212C09091EB009061909343 -:101DD000EB0021E030E001C0220F8A95EAF7209362 -:101DE000EA001092EA008091EB0088608093EB009B -:101DF0001092E9008091E800877F8093E8000E94BC -:101E0000750CA8C08111A6C08091EA019091EB01E8 -:101E10008F779927182F9091E3009078982B9093C3 -:101E2000E3008091E800877F8093E8000E94750CB2 -:101E30008091E80080FFFCCF8091E3008068809370 -:101E4000E300112311F083E001C082E08093E701F9 -:101E500081C08058823008F07DC08091EA01909165 -:101E6000EB018C3D23E0920779F583E08A838AE2D7 -:101E700089834FB7F894DE01139620E03EE051E2EB -:101E8000E32FF0E050935700E49120FF03C0E29568 -:101E9000EF703F5FEF708E2F90E0EA3010F0C79642 -:101EA00001C0C0968D939D932F5F243149F74FBF9A -:101EB0008091E800877F8093E8006AE270E0CE01BD -:101EC00001960E94770B13C0AE01455D5F4F609194 -:101ED000EC010E94AD0A0097E9F12091E800277F0C -:101EE0002093E800BC018BA59CA50E94DA0B809191 -:101EF000E8008B778093E8002DC0803859F58091F9 -:101F0000E800877F8093E8008091E3018093F100EF -:101F10008091E8008E7771CF81111CC09091EA0109 -:101F20009230C0F48091E800877F8093E80090931E -:101F3000E3010E94750C8091E301811104C080913E -:101F4000E30087FF02C084E001C081E08093E701E5 -:101F50000E94AD098091E80083FF0AC08091E800EB -:101F6000877F8093E8008091EB0080628093EB0094 -:101F7000AC960FB6F894DEBF0FBECDBFDF91CF9108 -:101F80001F910895CF938091E7018823B1F080914C -:101F9000E9008F709091EC0090FF02C090E801C0C2 -:101FA00090E0C92FC82B1092E9008091E80083FDD2 -:101FB0000E94590ECF70C093E900CF91089590937D -:101FC0007501809374010895E0917401F091750199 -:101FD000309721F00190F081E02D099480E0089580 -:101FE000E0917401F0917501309721F00280F38146 -:101FF000E02D09940895E0917401F09175013097F6 -:1020000021F00480F581E02D099408952091760156 -:10201000309177018217930771F090937701809345 -:102020007601E0917401F0917501309721F00680FE -:10203000F781E02D0994089520917801309179017C -:102040008217930771F09093790180937801E09162 -:102050007401F0917501309721F00084F185E02D35 -:102060000994089508950C9432100E94541C0E9403 -:1020700028060E94281D0C94D0220C9462055F92C1 -:102080006F927F928F929F92AF92BF92CF92DF9288 -:10209000EF92FF920F931F93CF93DF93CDB7DEB7ED -:1020A0002A970FB6F894DEBF0FBECDBF0E94380747 -:1020B0009AE7C92E91E0D92E00E010E0AA24A3945B -:1020C000B12C502E802F0E948C083C01F601E1902B -:1020D000F1906F01E826F926E114F10431F40F5F65 -:1020E0001F4F0530110569F73AC08091D00181FD7D -:1020F0000E94950820E030E04501022E02C0880CC5 -:10210000991C0A94E2F7C4018E219F21892B09F1C1 -:102110002E835F826820792081E0672809F480E0BF -:1021200088870E945D1C8160782F9A8789874E81FD -:102130005F8168858A850E94F810F801EE0FFF1F05 -:10214000E658FE4F8081918188259925918380836F -:1021500016C02F5F3F4F2C30310571F6C0CF8FEF87 -:1021600089838A831B820E945D1C8160782F9D83F6 -:102170008C8349815A816B818D810E94F8100E9465 -:102180001520109184010E94E40F1817D9F00E94C5 -:10219000E40F809384012A960FB6F894DEBF0FBE39 -:1021A000CDBFDF91CF911F910F91FF90EF90DF9006 -:1021B000CF90BF90AF909F908F907F906F905F90E7 -:1021C0000C943D102A960FB6F894DEBF0FBECDBF1B -:1021D000DF91CF911F910F91FF90EF90DF90CF9003 -:1021E000BF90AF909F908F907F906F905F90089579 -:1021F000CF93DF93CDB7DEB72B970FB6F894DEBF42 -:102200000FBECDBF4F83588769877A878B87DE01E2 -:10221000119686E0FD0111928A95E9F785E0FE01AD -:10222000379601900D928A95E1F749815A816B8129 -:102230007C818D819E810E94D4182B960FB6F894D4 -:10224000DEBF0FBECDBFDF91CF910895CF93C82FD2 -:10225000882309F4C1C0823859F40E94E40F81FD3B -:10226000BBC089E30E943B1B0E94B71B89E30CC0E3 -:10227000833879F40E94E40F80FDAEC083E50E94AC -:102280003B1B0E94B71B83E50E945D1BCF910C9402 -:10229000B71B843859F40E94E40F82FD9DC087E487 -:1022A0000E943B1B0E94B71B87E4EECF8450813A0B -:1022B00048F48C2F0E94322281118EC08C2F0E94F4 -:1022C0003B1BE4CF8C2F805E883050F4C77081E0D8 -:1022D00090E001C0880FCA95EAF70E947E1BD6CF16 -:1022E0008C2F855A833078F4C53A29F0C63A31F4F8 -:1022F00082E890E005C081E890E002C083E890E0C9 -:10230000CF910C9406108C2F885A833108F064C04A -:10231000C83A39F1C93A41F1CA3A49F1CB3A51F1D7 -:10232000CC3A59F1CD3A61F1C03B69F1CE3A71F145 -:10233000CF3A79F1C13B81F1C23B89F1C33B91F1C5 -:10234000C43B99F1C53BA1F1C63BA9F1C73BB1F133 -:10235000C83BB9F1C93BC1F1CA3BC9F58AE292E079 -:1023600038C082EE90E035C089EE90E032C08AEE4F -:1023700090E02FC085EB90E02CC086EB90E029C068 -:1023800087EB90E026C08CEC90E023C08DEC90E0D1 -:1023900020C083E891E01DC08AE891E01AC082E97C -:1023A00091E017C084E991E014C081E292E011C08D -:1023B00083E292E00EC084E292E00BC085E292E0FC -:1023C00008C086E292E005C087E292E002C080E0A9 -:1023D00090E0CF910C941C10CF910895882309F4BC -:1023E0004DC0823859F40E94E40F81FF47C089E351 -:1023F0000E943B1B0E94B71B89E30CC0833871F419 -:102400000E94E40F80FF3AC083E50E943B1B0E94BC -:10241000B71B83E50E945D1B0C94B71B843859F4ED -:102420000E94E40F82FF2AC087E40E943B1B0E94A7 -:10243000B71B87E4EFCF982F9450913A08F4EACF76 -:10244000982F905E983058F4282F277081E090E004 -:1024500001C0880F2A95EAF70E94841BDDCF982FD0 -:10246000955A933020F480E090E00C940610885A3E -:10247000833120F480E090E00C941C1008958823B0 -:1024800021F00E947E1B0C94B71B0895882321F035 -:102490000E94841B0C94B71B0895BF92CF92DF92C9 -:1024A000EF92FF920F931F93CF93DF93CDB7DEB7D9 -:1024B00027970FB6F894DEBF0FBECDBF8C0185E025 -:1024C000F801DE01119601900D928A95E1F7F8016D -:1024D00030812181F280558152955F708381948192 -:1024E000892B39F02F3F41F481E090E03F3F31F0FC -:1024F00003C081E090E002C080E090E080FD73C303 -:1025000039832A8389819A815E830E94F81AB92EC1 -:102510008F830E94F71A0E941F1A2B2D22952F706D -:1025200030E05E816F812530310509F4E6C06CF43E -:10253000243031050CF0A2C04B2D407F8B2D8F70C5 -:10254000223031050CF045C017C02C3031054CF459 -:102550002A3031050CF0E7C12830310509F043C3BA -:10256000E5C02D30310509F4BAC20CF4A2C22F30F7 -:10257000310509F038C323C3182F411101C002C02F -:102580001295107FFF2059F0112309F46BC2812F9F -:102590006F830E948E1B0E94B71B6F8163C2862FC0 -:1025A0000E94EE11112309F41EC3812F0E94941B77 -:1025B00027960FB6F894DEBF0FBECDBFDF91CF9147 -:1025C0001F910F91FF90EF90DF90CF90BF900C94F0 -:1025D000B71B403211F08295807F662319F061307D -:1025E00071F523C0FF20B1F0511101C032C051304C -:1025F00081F527960FB6F894DEBF0FBECDBFDF91F1 -:10260000CF911F910F91FF90EF90DF90CF90BF90EF -:102610000C949E1B511101C003C0513009F4E3C258 -:102620008E830E94A11B8E819AC1FF2021F056301B -:1026300008F0D9C20EC0553008F0D5C290C1FF20B5 -:10264000C9F0552331F0F801958190FF0BC29F70BE -:10265000958327960FB6F894DEBF0FBECDBFDF91EE -:10266000CF911F910F91FF90EF90DF90CF90BF908F -:102670000C943F12552309F472C109C22B2D2695E3 -:102680002695237030E02115310529F021303105E0 -:1026900009F0A9C219C0FF2021F0862F9B2D93704D -:1026A00002C080E090E027960FB6F894DEBF0FBE20 -:1026B000CDBFDF91CF911F910F91FF90EF90DF90F1 -:1026C000CF90BF900C940610FF2021F0862F9B2DF9 -:1026D000937002C080E090E027960FB6F894DEBFBA -:1026E0000FBECDBFDF91CF911F910F91FF90EF9063 -:1026F000DF90CF90BF900C941C10862FFF2019F014 -:102700000E941B1F02C00E94831F27960FB6F894D9 -:10271000DEBF0FBECDBFDF91CF911F910F91FF9014 -:10272000EF90DF90CF90BF900C940A208B2D837098 -:1027300009F079C0F11057C2262F229526952770EF -:10274000220F220F862F8F70C82ED12CE12CF12C56 -:10275000022E04C0CC0CDD1CEE1CFF1C0A94D2F728 -:1027600064FF10C06FE070E080E090E004C0660F8E -:10277000771F881F991F2A95D2F7609570958095CD -:10278000909503C060E070E0CB012B2D2695269537 -:102790002370422F50E042305105D9F043305105AB -:1027A00069F16C297D298E299F294130510551F10C -:1027B00027960FB6F894DEBF0FBECDBFDF91CF9145 -:1027C0001F910F91FF90EF90DF90CF90BF900C94EE -:1027D000341A6C297D298E299F2927960FB6F894E3 -:1027E000DEBF0FBECDBFDF91CF911F910F91FF9044 -:1027F000EF90DF90CF90BF900C94461A0E94341A4D -:10280000C701B60127960FB6F894DEBF0FBECDBF45 -:10281000DF91CF911F910F91FF90EF90DF90CF90BC -:10282000BF900C94221AFF2019F08B2D817001C0EB -:102830008695882309F4D7C1262F229526952770DF -:10284000220F220F862F8F70C82ED12CE12CF12C55 -:10285000022E04C0CC0CDD1CEE1CFF1C0A94D2F727 -:1028600064FF10C06FE070E080E090E004C0660F8D -:10287000771F881F991F2A95D2F7609570958095CC -:10288000909503C060E070E0CB012B2D2695269536 -:102890002370422F50E042305105D9F043305105AA -:1028A00069F16C297D298E299F294130510551F10B -:1028B00027960FB6F894DEBF0FBECDBFDF91CF9144 -:1028C0001F910F91FF90EF90DF90CF90BF900C94ED -:1028D000D31A6C297D298E299F2927960FB6F89443 -:1028E000DEBF0FBECDBFDF91CF911F910F91FF9043 -:1028F000EF90DF90CF90BF900C94E51A0E94D31A0E -:10290000C701B60127960FB6F894DEBF0FBECDBF44 -:10291000DF91CF911F910F91FF90EF90DF90CF90BB -:10292000BF900C94C11A603F59F120F4603E08F446 -:1029300094C008C0623F09F467C0F0F1633F09F03A -:102940008CC065C0162F1F708B2D8F71FF2021F05A -:102950000E946C1A812F7DCE0E94871A812F2796A4 -:102960000FB6F894DEBF0FBECDBFDF91CF911F91A0 -:102970000F91FF90EF90DF90CF90BF900C94461294 -:10298000FF20B1F0553008F02EC18B2D8F712796A6 -:102990000FB6F894DEBF0FBECDBFDF91CF911F9170 -:1029A0000F91FF90EF90DF90CF90BF900C94A61AFC -:1029B000563008F018C1E9CFFF2099F08B2D8F71A8 -:1029C00027960FB6F894DEBF0FBECDBFDF91CF9133 -:1029D0001F910F91FF90EF90DF90CF90BF900C94DC -:1029E0006C1A8B2D8F7127960FB6F894DEBF0FBE31 -:1029F000CDBFDF91CF911F910F91FF90EF90DF90AE -:102A0000CF90BF900C94871AF110EBCFD7CFFF2057 -:102A100099F08B2D8F7127960FB6F894DEBF0FBEFD -:102A2000CDBFDF91CF911F910F91FF90EF90DF907D -:102A3000CF90BF900C945D1A27960FB6F894DEBF26 -:102A40000FBECDBFDF91CF911F910F91FF90EF90FF -:102A5000DF90CF90BF900C94581AFF20A9F0552317 -:102A600009F4ACCF862F27960FB6F894DEBF0FBEC1 -:102A7000CDBFDF91CF911F910F91FF90EF90DF902D -:102A8000CF90BF900C942611552309F4AACF862F1E -:102A900027960FB6F894DEBF0FBECDBFDF91CF9162 -:102AA0001F910F91FF90EF90DF90CF90BF900C940B -:102AB000EE114B2D4F70C8010E94AB0227960FB646 -:102AC000F894DEBF0FBECDBFDF91CF911F910F9164 -:102AD000FF90EF90DF90CF90BF900C948A19F11087 -:102AE00082C09B2D9F70492F50E04230510599F1D3 -:102AF00044F44115510569F04130510509F073C0A6 -:102B000019C043305105C1F14430510509F06BC083 -:102B100044C027960FB6F894DEBF0FBECDBFDF913D -:102B2000CF911F910F91FF90EF90DF90CF90BF90CA -:102B30000C94E12227960FB6F894DEBF0FBECDBFEE -:102B4000DF91CF911F910F91FF90EF90DF90CF9089 -:102B5000BF900C94F82227960FB6F894DEBF0FBEF4 -:102B6000CDBFDF91CF911F910F91FF90EF90DF903C -:102B7000CF90BF900C94142327960FB6F894DEBF25 -:102B80000FBECDBFDF91CF911F910F91FF90EF90BE -:102B9000DF90CF90BF900C942723862F27960FB6F7 -:102BA000F894DEBF0FBECDBFDF91CF911F910F9183 -:102BB000FF90EF90DF90CF90BF900C944B234B2D64 -:102BC0004F70C80127960FB6F894DEBF0FBECDBF79 -:102BD000DF91CF911F910F91FF90EF90DF90CF90F9 -:102BE000BF900C94D40327960FB6F894DEBF0FBEA7 -:102BF000CDBFDF91CF911F910F91FF90EF90DF90AC -:102C0000CF90BF9008950E949B1B0E94701B0E9452 -:102C1000B71B0E94B6200E940A2080E090E00E942C -:102C2000061080E090E00C941C100E948B1B0C940A -:102C300003160E94F81A292F22952F7030E02C30AD -:102C400031054CF42A3031056CF422503109223020 -:102C5000310590F407C02C30310551F02F3031058B -:102C600059F406C0803E10F0803F31F481E00895B1 -:102C700093FB882780F9089580E00895CF93DF9330 -:102C800000D000D01F92CDB7DEB70F900F900F90FD -:102C90000F900F90DF91CF910895CF93DF9300D0E5 -:102CA00000D000D0CDB7DEB726960FB6F894DEBFC1 -:102CB0000FBECDBFDF91CF9108951F93CF93DF93C8 -:102CC000C091BB0116E012C0D0E01C9FF0011D9F17 -:102CD000F00D1124E557FE4F4081518162817381CF -:102CE000848195810E944D162196C7708091BC0108 -:102CF000C813EACFDF91CF911F91089540918501CC -:102D000050918601609187017091880180918901BD -:102D100090918A010C944D160F931F93CF93DF93DC -:102D200080918A0182958F7009F069C08091870136 -:102D3000882309F464C0A091BB01D091BC01B0917B -:102D40008501C0918601809188019091890121E0DF -:102D500030E0BF3F11F020E030E0122FBC01609561 -:102D6000709506E04AC0009721F0CF3F29F4212F4B -:102D700005C021E030E002C020E030E020FD3BC093 -:102D80004A2F50E0049FF001059FF00D1124E557F4 -:102D9000FE4F2181C2132FC02081B2132CC022818B -:102DA000211129C0238134812817390718F0281BE5 -:102DB000390B02C0260F371F283C3105E0F4809103 -:102DC0008A018F70806180938A0186E0849FF00180 -:102DD000859FF00D1124E057FE4F80818F70806138 -:102DE000808385E891E00E944D12DF91CF911F9181 -:102DF0000F910C945D16AF5FA770AD13B4CFDF9148 -:102E0000CF911F910F910895EF92FF920F931F930F -:102E1000CF93DF93CDB7DEB762970FB6F894DEBFDE -:102E20000FBECDBF8C0185E0F801DE011D9601903B -:102E30000D928A95E1F7D8014C9111965C9111970A -:102E400012966C9112971396ED90FC9014977091D6 -:102E50008501E09186018091880190918901009718 -:102E600039F0EF3F41F421E030E07F3F31F003C023 -:102E700021E030E002C020E030E020FD5CC1209184 -:102E80008701222309F4F1C0E816F90628F097011A -:102E9000281B390BC90104C0809590958E0D9F1D8C -:102EA000883C910508F098C080918A01982F907F06 -:102EB00009F064C0E51314C0741312C0611110C08E -:102EC0008F70806180938A010E947E1685E891E070 -:102ED0000E944D1280918A01D80115968C9343C1AE -:102EE000EF2839F05F3F41F481E090E04F3F31F04F -:102EF00003C081E090E002C080E090E080FD03C06C -:102F000081E0862702C080E090E080FF2EC08091A3 -:102F1000BB012091BC0136E013C090E0389FF00166 -:102F2000399FF00D1124E557FE4F7181571306C0EC -:102F30007081471303C07281671317C001968770B1 -:102F40008213EBCF12C19F7059F0882309F40BC193 -:102F500007C09F7029F0F8019581907F09F403C1A3 -:102F6000805E883008F4FFC0D2C0662309F4FBC03D -:102F700080918A01816080938A01F5C0E51308C0C1 -:102F8000741306C0611104C0D80115968C939DC0BE -:102F90004D875E878D859E856A8B0E9419166A898A -:102FA000882309F4B4C0662309F4B1C020918A01D2 -:102FB000822F82958F7090E002970CF4C6C08091AA -:102FC00085019091860198878F831986FB86EA8612 -:102FD0002C87CE01079646C080918A01982F907F5A -:102FE00059F47E2DF98AE88A89890E943E1685E87F -:102FF00091E00E944D1295C0E51311C074130FC0EB -:1030000061110DC0F8018583C8010E944D12E5E8E9 -:10301000F1E086E0DF011D928A95E9F7A2C04D87B5 -:103020005E878D859E856A8B0E9419166A89882322 -:1030300009F46DC0662309F46AC020918A01822FC9 -:1030400082958F7090E002970CF47FC0809185018B -:10305000909186019A8389831B82FD82EC822E8364 -:10306000CE0101960E944D1270C0E816F90628F0B4 -:103070009701281B390BC90104C0809590958E0DCE -:103080009F1D883C910508F046C0662309F43FC0A7 -:10309000E51330C074132EC020918A0120FD21C099 -:1030A000322F32953F70832F90E00097D1F0D801F6 -:1030B00015962C9315970F9741F0832F8F5F82956C -:1030C000807F2F70282B15962C93C8010E944D12DB -:1030D00086E0F801A5E8B1E001900D928A95E1F74C -:1030E0003EC086E0F801A5E8B1E001900D928A9516 -:1030F000E1F737C04D875E878D859E850E94191642 -:10310000811123C080918A01816080938A01C80166 -:103110000E944D1226C07E2DF98AE88A89890E9474 -:103120003E16E5E8F1E086E0DF011D928A95E9F7B9 -:103130000E947E1618C0662351F34D875E878D85E9 -:103140009E850E941916882311F386E0F801A5E8F0 -:10315000B1E001900D928A95E1F70E948C160E94D1 -:103160007E1681E014C080E012C04D875E878D8599 -:103170009E850E94F81A292F22952F7030E0223068 -:1031800031050CF4E0CE243031050CF6E2CE629627 -:103190000FB6F894DEBF0FBECDBFDF91CF911F9168 -:1031A0000F91FF90EF9008951F93CF93DF93CDB7CA -:1031B000DEB72C970FB6F894DEBF0FBECDBF4F839E -:1031C000588769877A878B879C87CE0107960E94EC -:1031D00004178823D9F02F8138858A859B85892B10 -:1031E00039F03F3F19F080E090E004C02F3FD9F75D -:1031F00081E090E0892B09F06DC04F815885698589 -:103200007A858B859C850E944D1664C086E0FE0100 -:103210003796DE01119601900D928A95E1F7FF81B4 -:10322000E8854A855B854115510539F0EF3F41F44A -:1032300081E090E0FF3F31F003C081E090E002C008 -:1032400080E090E080FD46C02091BC0130E0C901E3 -:103250000196877099276091BB0170E086179707E8 -:1032600009F440C0F983EA835D834C8396E0929F22 -:10327000D001939FB00D1124A557BE4FFE0131968A -:1032800001900D929A95E1F78093BC010E945D1622 -:1032900021C0189FC001112485579E4F0E9404171A -:1032A000882371F1E091BB011E9FF0011124E557C5 -:1032B000FE4F4081518162817381848195810E949A -:1032C0004D168091BB0190E00196877099278093FD -:1032D000BB0101C016E08091BB019091BC01891334 -:1032E000D8CF0EC00E9415161092BC011092BB01DF -:1032F000E5E8F1E086E0DF011D928A95E9F7EACF83 -:103300002C960FB6F894DEBF0FBECDBFDF91CF91E4 -:103310001F910895DF92EF92FF920F931F93CF9327 -:10332000DF93EC01009709F46EC0D12CEE24E394F6 -:10333000F12C8E010F5F1F4FFE018491843748F4FA -:10334000843008F04CC0813071F0823009F05BC0ED -:103350001EC0853709F43FC080F1982F94589037EC -:1033600008F051C03FC02296F8018491982F905EDA -:10337000983050F48770FE2D01C0FF0F8A95EAF750 -:103380008F2F0E948E1B13C00E9426112FC02296E1 -:10339000F8018491982F905E983060F48770FE2D2C -:1033A00001C0FF0F8A95EAF78F2F0E94941B0E949D -:1033B000B71B1CC00E94EE1119C02296F80104919F -:1033C00007C08FE99FE00197F1F700C000000150AE -:1033D0000111F7CF0BC02296F801D49007C00E94CC -:1033E000261103C08F770E94EE11E8018D2D07C0D2 -:1033F0008150EFE9FFE03197F1F700C0000088232A -:1034000009F497CFF5CFDF91CF911F910F91FF90E6 -:10341000EF90DF9008956093C1017093C201809393 -:10342000C3019093C4010C9403166093BD01709383 -:10343000BE018093BF019093C0010C9403160895C0 -:103440000C940B1A0F931F930091C1011091C201AC -:103450002091C3013091C401602B712B822B932BDF -:103460001F910F910C940B1A0F931F930091C101A0 -:103470001091C2012091C3013091C40160237123D6 -:10348000822393231F910F910C940B1A0F931F9378 -:103490000091C1011091C2012091C3013091C4017A -:1034A00060277127822793271F910F910C940B1A85 -:1034B00060E070E0CB010C94151A41E050E060E050 -:1034C00070E004C0440F551F661F771F8A95D2F71E -:1034D000CB01BA010C94151A41E050E060E070E0B5 -:1034E00004C0440F551F661F771F8A95D2F780913D -:1034F000BD019091BE01A091BF01B091C001482BC8 -:10350000592B6A2B7B2BCB01BA010C94151A41E085 -:1035100050E060E070E004C0440F551F661F771F45 -:103520008A95D2F740955095609570958091BD0130 -:103530009091BE01A091BF01B091C00148235923D1 -:103540006A237B23CB01BA010C94151A41E050E0A9 -:1035500060E070E004C0440F551F661F771F8A9516 -:10356000D2F78091BD019091BE01A091BF01B091B1 -:10357000C001482759276A277B27CB01BA010C9441 -:10358000151A0F931F930091BD011091BE01209158 -:10359000BF013091C001602B712B822B932B1F91A7 -:1035A0000F910C94151A0F931F930091BD01109168 -:1035B000BE012091BF013091C0016023712382239D -:1035C00093231F910F910C94151A0F931F93009141 -:1035D000BD011091BE012091BF013091C001602753 -:1035E0007127822793271F910F910C94151A089524 -:1035F000CF92DF92EF92FF920F931F93CF93DF93BF -:10360000EC01C090C101D090C201E090C301F090E4 -:10361000C4018091BD019091BE01A091BF01B09104 -:10362000C001C82AD92AEA2AFB2A0FE110E0B70113 -:10363000A601002E04C076956795579547950A9484 -:10364000D2F740FF08C0BE01802F0E94FA038130EC -:10365000910509F007C00150110948F7BE0180E04B -:103660000E94FA03DF91CF911F910F91FF90EF908D -:10367000DF90CF90089540910C0150910D0120E012 -:1036800030E09FEFFA01E20FF31F62816817A1F0AB -:103690009F3F19F4611101C0922F2F5F3F4F2630D9 -:1036A000310581F707C0FA01E90FF11D97FDFA9581 -:1036B000828308959F3FB9F7089540910C0150917E -:1036C0000D0120E030E0FA01E20FF31F9281981320 -:1036D00001C012822F5F3F4F26303105A1F70895B8 -:1036E00081E090E0E0910C01F0910D01E80FF91FED -:1036F0001082019688309105A9F708959091C5012F -:10370000982B9093C501089580959091C5019823B9 -:103710009093C50108951092C50108959091C60136 -:10372000982B9093C601089580959091C601982397 -:103730009093C60108951092C60108958093C70121 -:1037400008951092C701089540910C0150910D0108 -:1037500020E030E080E0FA01E20FF31F9181911147 -:103760008F5F2F5F3F4F27303105A9F70895E09114 -:103770000C01F0910D018091C5018083E0910C0155 -:10378000F0910D0180819091C601892B80839091E9 -:10379000C701992361F0E0910C01F0910D01808146 -:1037A000892B80830E94A41B81110E94A11B809100 -:1037B0000C0190910D010C94F00F8091E701843081 -:1037C00021F11092D10120E488E190E00FB6F89445 -:1037D000A895809360000FBE2093600080E00E9457 -:1037E000E10283B7817F846083BF83B7816083BF39 -:1037F0007894889583B78E7F83BF88E10FB6F8945D -:1038000080936000109260000FBE0895089508959F -:10381000CF9380E00E94E1020E94061C0E943807BC -:103820000E94071CC0E08C2F0E948C08892B29F471 -:10383000CF5FC530C1F780E001C081E0CF9108952E -:103840000E94151680E00E94E1020E94D0220E9490 -:10385000E40F0C9462051F920F920FB60F92112481 -:103860008F939F93AF93BF938091D101811113C028 -:103870008091D2019091D301A091D401B091D50152 -:103880004196A11DB11D8093D2019093D301A093C5 -:10389000D401B093D501BF91AF919F918F910F90BB -:1038A0000FBE0F901F90189582E084BD93E095BDE8 -:1038B0009AEF97BD80936E0008958FB7F89440916A -:1038C000D2015091D3016091D4017091D5018FBF85 -:1038D000CA010895CF92DF92EF92FF920F931F9348 -:1038E0002FB7F8944091D2015091D3016091D40147 -:1038F0007091D5012FBF6A017B01EE24FF248C015A -:1039000020E030E0C016D106E206F30620F09A016E -:10391000281B390B05C09C0120953095240F351FBD -:10392000C9011F910F91FF90EF90DF90CF90089504 -:103930001F920F920FB60F9211248F939F93AF9304 -:10394000BF938091D2019091D301A091D401B09105 -:10395000D5010196A11DB11D8093D2019093D30191 -:10396000A093D401B093D501BF91AF919F918F9156 -:103970000F900FBE0F901F9018950E94C80CF894DE -:103980002FEF87EA91E6215080409040E1F700C098 -:10399000000087E090EBDC018093F1019093F2014D -:1039A000A093F301B093F4012CE088E190E00FB60E -:1039B000F894A895809360000FBE20936000FFCF1D -:1039C000CF92DF92EF92FF920F931F93CF93DF93EB -:1039D000C82ED12C01E010E08D2D0E948C087C01B6 -:1039E000C0E0D0E098010C2E02C0220F331F0A94D1 -:1039F000E2F72E213F21232B29F42196CC30D1054B -:103A000089F708C06C2F7D2D80E00E94D503C81275 -:103A1000F4CF06C0D39485E0D812DECF80E001C099 -:103A200081E0DF91CF911F910F91FF90EF90DF9098 -:103A3000CF900895CF93C82F8CE20E94E01C88237A -:103A400021F08C2FCF910C94E01C80E0CF91089551 -:103A5000CF930E946B1E811102C00E944C1EC5E6CE -:103A600008C00E9438078FE39CE90197F1F700C076 -:103A70000000C150B1F789E20E941A1D81110AC1EC -:103A80008AE20E941A1D81110E944C1E85E00E944C -:103A90001A1D81110E94BD1C0E94761E8093D001C8 -:103AA00087E00E941A1D882399F18BE10E941A1D5C -:103AB000882351F09091D00191FB882780F921E073 -:103AC000822780FB91F922C08EE00E941A1D882374 -:103AD00051F09091D00192FB882780F921E0822754 -:103AE00080FB92F913C080E10E941A1D9091D001D1 -:103AF000882341F093FB882780F921E0822780FB0F -:103B000093F904C0892F809580FB90F99093D001A0 -:103B10008091D0010E947A1E0E94881E8093E1014C -:103B200080EE0E941A1D882341F08091E101982FB8 -:103B3000909590FB80F98093E10189E30E941A1D22 -:103B4000882359F09091E10191FB882780F921E0C9 -:103B5000822780FB91F99093E10182EE0E941A1D69 -:103B6000882359F09091E10192FB882780F921E0A8 -:103B7000822780FB92F99093E10186EE0E941A1D44 -:103B8000882359F09091E10193FB882780F921E087 -:103B9000822780FB93F99093E10183EE0E941A1D26 -:103BA000882359F09091E10194FB882780F921E066 -:103BB000822780FB94F99093E10185E30E941A1D0E -:103BC000882359F09091E10195FB882780F921E045 -:103BD000822780FB95F99093E10181E30E941A1DF1 -:103BE000882359F09091E10196FB882780F921E024 -:103BF000822780FB96F99093E10181E10E941A1DD2 -:103C0000882359F09091E10197FB882780F921E002 -:103C1000822780FB97F99093E1018091E1010E9456 -:103C20008C1E87E20E941A1DC82F8EE10E941A1D69 -:103C30008111C2608FE10E941A1D8111C46080E26F -:103C40000E941A1D8111C86081E20E941A1D811113 -:103C5000C06182E20E941A1D8111C06283E20E944B -:103C60001A1D8111C06484E20E941A1D882311F07C -:103C7000C06802C0CC2329F08C2F0E94831E6C2FB9 -:103C800003C00E947F1E682F70E080E090E0CF911B -:103C90000C94201ACF9108956DEE7EEF80E090E0B5 -:103CA0000E94D92460E082E090E00E94CB2460E092 -:103CB00083E090E00E94CB2460E084E090E00E94EA -:103CC000CB2460E085E090E00E94CB2460E086E0B9 -:103CD00090E00C94CB2480E090E00E94C52421E089 -:103CE0008D3E9E4F09F020E0822F089582E090E003 -:103CF0000C94BD24682F82E090E00C94CB2483E0E8 -:103D000090E00C94BD24682F83E090E00C94CB24C9 -:103D100084E090E00C94BD24682F84E090E00C9443 -:103D2000CB2486E090E00C94BD24682F86E090E0E0 -:103D30000C94CB248091DE0180FF0BC060911101B7 -:103D400085E0689FB0011124759567957595679515 -:103D50002AC081FF09C06091110185E0689FB00110 -:103D60001124759567951FC082FF07C060911101EE -:103D700085E0689FB001112416C04091D80144230A -:103D8000C9F060911001461788F72091110185E074 -:103D9000289F90011124429FC001439F900D112440 -:103DA00070E00E9495246038710540F4611571053A -:103DB00039F002C065E070E0862F08958FE708951E -:103DC00081E008958091DE0180FF08C060910F01BD -:103DD00070E0759567957595679521C081FF06C060 -:103DE00060910F0170E07595679519C082FF04C05E -:103DF00060910F0170E010C08091D8018823C1F05C -:103E000060910E018617A0F790910F01989FC00155 -:103E1000112470E00E9495246038710528F4611522 -:103E2000710521F0862F08958FE7089581E00895A8 -:103E300061E070E0F4CF803F21F40E949A1E8195EA -:103E400004C0813F29F40E949A1E8093DB010895EB -:103E5000823F21F40E949A1E819504C0833F29F479 -:103E60000E949A1E8093DA010895893F19F40E94F6 -:103E7000E21E05C08A3F31F40E94E21E81958093C4 -:103E8000DC0108958B3F21F40E94E21E819504C05D -:103E90008C3F29F40E94E21E8093DD010895843F47 -:103EA00021F48091D901816017C0853F21F4809170 -:103EB000D901826011C0863F21F48091D9018460CC -:103EC0000BC0873F21F48091D901886005C0883FED -:103ED00031F48091D90180618093D90108958D3F9B -:103EE00021F48091DE0181600BC08E3F21F480912E -:103EF000DE01826005C08F3F29F48091DE0184607D -:103F00008093DE010895803F29F48091DB0187FFD3 -:103F10006EC007C0813F41F48091DB0118160CF0A0 -:103F200066C01092DB0163C09091DA01823F19F400 -:103F300097FF5DC005C0833F31F419160CF057C0E0 -:103F40001092DA0154C0893F31F48091DC011816D7 -:103F50000CF04DC006C08A3F39F48091DC0187FF28 -:103F600046C01092DC0143C08B3F29F48091DD01F3 -:103F700087FF3DC006C08C3F39F48091DD011816E3 -:103F8000B4F51092DD0133C0843F21F48091D90152 -:103F90008E7F05C0853F31F48091D9018D7F80935C -:103FA000D90125C0863F21F48091D9018B7FF7CFBD -:103FB000873F21F48091D901877FF1CF883F21F499 -:103FC0008091D9018F7EEBCF8D3F21F48091DE016E -:103FD0008E7F0BC08E3F21F48091DE018D7F05C066 -:103FE0008F3F29F48091DE018B7F8093DE018091E9 -:103FF000DA0181110EC08091DB0181110AC080912C -:10400000DC01811106C08091DD01811102C0109296 -:10401000D801089589ED91E00E94FB0F0E945D1C7C -:104020009093D7018093D6010895CF938091D601C4 -:104030009091D7010E946A1C4091D801442321F03D -:104040002091120130E006C0209113015AE0259F13 -:10405000900111248217930708F486C08091DA0139 -:1040600081110DC09091DB01911109C09091DC018B -:10407000911105C09091DD01992309F475C04F3F5E -:1040800019F04F5F4093D801181624F40E949A1E2D -:104090008093DA018091DA0187FF05C00E949A1EA1 -:1040A00081958093DA018091DB01181624F40E9437 -:1040B0009A1E8093DB018091DB0187FF05C00E947F -:1040C0009A1E81958093DB016091DA01662339F1B4 -:1040D000C091DB01CC2319F1772767FD7095872FFD -:1040E000972F0E949A2323E333E343E35FE30E9485 -:1040F000FE230E9467236093DA016C2F772767FD08 -:104100007095872F972F0E949A2323E333E343E38D -:104110005FE30E94FE230E9467236093DB0180918E -:10412000DC01181624F40E94E21E8093DC018091C9 -:10413000DC0187FF05C00E94E21E81958093DC01AF -:104140008091DD01181624F40E94E21E8093DD01A7 -:104150008091DD0187FF05C00E94E21E819580935A -:10416000DD01CF910C940A20CF910895E9EDF1E0A3 -:1041700085E0DF011D928A95E9F71092D80110922F -:10418000DE010895833089F130F4813061F08230AE -:1041900009F06EC019C0853009F449C0B8F1863005 -:1041A00009F066C055C020911301862F90E0820F60 -:1041B000911D8F3F910520F4620F609313010895C4 -:1041C0008FEF80931301089520911201862F90E0C4 -:1041D000820F911D8F3F910520F4620F60931201B1 -:1041E00008958FEF80931201089520911101862F79 -:1041F00090E0820F911D8F3F910520F4620F609334 -:10420000110108958FEF80931101089520911001FD -:10421000862F90E0820F911D8F3F910520F4620F51 -:104220006093100108958FEF8093100108952091FD -:104230000F01862F90E0820F911D8F3F910520F492 -:10424000620F60930F0108958FEF80930F0108951F -:1042500020910E01862F90E0820F911D8F3F9105D6 -:1042600020F4620F60930E0108958FEF80930E018A -:104270000895833021F130F4813059F0823009F013 -:1042800049C012C0853089F128F1863009F042C05A -:1042900037C080911301681720F4861B80931301A7 -:1042A000089510921301089580911201681720F467 -:1042B000861B809312010895109212010895809137 -:1042C0001101681720F4861B809311010895109244 -:1042D0001101089580911001681720F4861B8093C6 -:1042E0001001089510921001089580910F01681730 -:1042F00020F4861B80930F01089510920F010895FA -:1043000080910E01681720F4861B80930E0108959A -:1043100010920E01089541E050E060E070E004C0AA -:10432000440F551F661F771F8A95D2F7CB01BA013C -:104330000E94201A0C941516873200F58E3108F071 -:1043400086C08E3009F466C060F4873009F44DC031 -:1043500018F4863049F531C0883041F18B3021F5B1 -:104360007BC0863109F478C018F48031E9F45CC070 -:10437000893109F471C08B31B9F442C0883309F432 -:104380006BC048F4893209F460C0853309F45DC01C -:10439000873251F45AC0833409F457C018F48A3371 -:1043A00018F057C0883499F080E008950E94761E76 -:1043B0000E94881E0E94911E4FC08091D001817F73 -:1043C0008E7F8093D00181E08093DF0108950E9469 -:1043D00015162FEF83ED90E3215080409040E1F7D8 -:1043E00000C000000E94BD1C37C08091D00180FF3A -:1043F00003C0817F8E7F01C081608093D0012CC07B -:104400009091D00191FB882780F921E0822780FBE1 -:1044100091F913C09091D00192FB882780F921E097 -:10442000822780FB92F909C09091D00193FB8827E5 -:1044300080F921E0822780FB93F99093D0018823B3 -:1044400059F091609093D00107C080E003C08D5176 -:1044500001C089530E948B2181E0089580E0089576 -:1044600080E00895CF93C82F8091DF01813071F0F3 -:1044700020F0823009F089C037C0A0910C01B091C2 -:104480000D018C91823209F082C007C0A0910C010D -:10449000B0910D018C91823249F48C2F0E942E2212 -:1044A00081111EC08C2F0E949C211CC08C2F0E9449 -:1044B0003022811115C0C43169F030F4CB3081F065 -:1044C000C03109F068C009C0C93221F0C83309F011 -:1044D00062C006C01092DF015EC082E08093DF01FF -:1044E00081E090E081705AC0C932C9F060F4C431F3 -:1044F000B1F020F4C73009F04CC034C0CE51C63002 -:1045000008F047C017C0CE3439F120F4CB3409F09D -:1045100040C01CC0C135C1F0C235D9F513C080916F -:10452000E001882319F01092E00133C081E080930C -:10453000DF0134C0EC2FF0E0E65BFE4F808180931A -:10454000E00127C061E003C061E007C06AE080913C -:10455000E0010E94C2201DC06AE08091E0010E943B -:10456000392117C08EE18093130182E380931201F9 -:104570008AE08093110184E18093100188E08093A8 -:104580000F0188E280930E0104C01092DF0180E0E9 -:1045900005C081E003C080E090E0A4CFCF910895F2 -:1045A0000E946B1E811102C00E944C1E0E94911E2F -:1045B0008093F00180FF02C0869501C080E00C94DA -:1045C000E1028091F001982F9695292F30E0233059 -:1045D00031054CF49F5F990F8170892B8160809326 -:1045E000F0010E94951E8091F00186950C94E102E5 -:1045F0008091F001982F969591F09158990F8170C4 -:10460000892B8093F0018E7F91E009F490E08091F6 -:10461000F00190FB80F98093F0010E94951E80913B -:10462000F00186950C94E1028091F001982F90950D -:1046300090FB80F98093F0010E94951E8091F0011B -:1046400080FF02C0869501C080E00C94E1023091A9 -:10465000F001232F26952F5F2F77822F90E0317066 -:1046600004972CF4220F232B2093F00102C03093E7 -:10467000F0018091F001282F2E7F91E009F490E065 -:1046800090FB80F98093F0010E94951E8091F001CB -:1046900086950C94E1022091F001922F969598272F -:1046A000990F822F8170892B8093F0018E7F91E08A -:1046B00009F490E08091F00190FB80F98093F00183 -:1046C0000E94951E8091F00186950C94E10204D021 -:1046D0006894B1118DC0089570D088F09F5790F004 -:1046E000B92F9927B751A0F0D1F0660F771F881F17 -:1046F000991F1AF0BA95C9F712C0B13081F077D07E -:10470000B1E0089574C0672F782F8827B85F39F01B -:10471000B93FCCF3869577956795B395D9F73EF475 -:1047200090958095709561957F4F8F4F9F4F08951D -:10473000E89409C097FB3EF490958095709561953B -:104740007F4F8F4F9F4F9923A9F0F92F96E9BB27F1 -:104750009395F695879577956795B795F111F8CF6D -:10476000FAF4BB0F11F460FF1BC06F5F7F4F8F4FD8 -:104770009F4F16C0882311F096E911C0772321F0CE -:104780009EE8872F762F05C0662371F096E8862F66 -:1047900070E060E02AF09A95660F771F881FDAF7BD -:1047A000880F9695879597F9089557FD9058440F6F -:1047B000551F59F05F3F71F04795880F97FB991F80 -:1047C00061F09F3F79F0879508951216130614063D -:1047D000551FF2CF4695F1DF08C0161617061806CA -:1047E000991FF1CF86957105610508940895E894A5 -:1047F000BB2766277727CB0197F908950BD078C0A0 -:1048000069D028F06ED018F0952309F05AC05FC027 -:104810001124EECFCADFA0F3959FD1F3950F50E09E -:10482000551F629FF001729FBB27F00DB11D639F62 -:10483000AA27F00DB11DAA1F649F6627B00DA11D08 -:10484000661F829F2227B00DA11D621F739FB00DAE -:10485000A11D621F839FA00D611D221F749F33271E -:10486000A00D611D231F849F600D211D822F762FB7 -:104870006A2F11249F5750408AF0E1F088234AF0B4 -:10488000EE0FFF1FBB1F661F771F881F9150504000 -:10489000A9F79E3F510570F014C0AACF5F3FECF31B -:1048A000983EDCF3869577956795B795F795E795EC -:1048B0009F5FC1F7FE2B880F911D9695879597F9FD -:1048C000089597F99F6780E870E060E008959FEF92 -:1048D00080EC089500240A94161617061806090697 -:1048E000089500240A941216130614060506089566 -:1048F000092E0394000C11F4882352F0BB0F40F4EE -:10490000BF2B11F460FF04C06F5F7F4F8F4F9F4F2D -:104910000895991B79E004C0991F961708F0961B1B -:10492000881F7A95C9F78095089597FB072E16F48E -:10493000009407D077FD09D00E94A92407FC05D078 -:104940003EF4909581959F4F0895709561957F4FA6 -:104950000895AA1BBB1B51E107C0AA1FBB1FA617C6 -:10496000B70710F0A61BB70B881F991F5A95A9F718 -:1049700080959095BC01CD010895F999FECF92BD27 -:1049800081BDF89A992780B50895A8E1B0E042E08A -:1049900050E00C94E024262FF999FECF1FBA92BD67 -:1049A00081BD20BD0FB6F894FA9AF99A0FBE019610 -:1049B00008950E94CB24272F0C94CC24DC01CB013A -:1049C000FC01F999FECF06C0F2BDE1BDF89A31961F -:1049D00000B40D9241505040B8F70895F894FFCFBD -:1049E00005960826090209CD08990801C80128087A -:1049F000140A321E420045002500260043006100D3 -:104A00006000200037006400650066006700440015 -:104A100046002400470074038D03A603BF038B04E4 -:104A20003E040804E8033F4D362001020304050656 -:044A3000070809006A -:00000001FF diff --git a/keyboard/retro_refit/retro_refit.c b/keyboard/retro_refit/retro_refit.c index 0b13eb83..78b6edca 100644 --- a/keyboard/retro_refit/retro_refit.c +++ b/keyboard/retro_refit/retro_refit.c @@ -2,39 +2,39 @@ __attribute__ ((weak)) void matrix_init_user(void) { - // leave this function blank - it can be defined in a keymap file + // leave this function blank - it can be defined in a keymap file }; __attribute__ ((weak)) void matrix_scan_user(void) { - // leave this function blank - it can be defined in a keymap file + // leave this function blank - it can be defined in a keymap file }; __attribute__ ((weak)) void led_set_user(uint8_t usb_led) { - // leave this function blank - it can be defined in a keymap file + // leave this function blank - it can be defined in a keymap file }; void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - // Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS) - DDRD |= (1<<6); - PORTD |= (1<<6); - - matrix_init_user(); + // put your keyboard start-up code here + // runs once when the firmware starts up + + // Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS) + DDRD |= (1<<6); + PORTD |= (1<<6); + + matrix_init_user(); }; void amatrix_scan_kb(void) { // put your looping keyboard code here // runs every cycle (a lot) - matrix_scan_user(); + matrix_scan_user(); }; void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here + // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here if (usb_led & (1<" + exit 1 +fi + KEYBOARD=$1 KEYBOARD_UPPERCASE=$(echo $1 | awk '{print toupper($0)}') diff --git a/quantum/audio.c b/quantum/audio.c deleted file mode 100644 index f29d941d..00000000 --- a/quantum/audio.c +++ /dev/null @@ -1,365 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "audio.h" -#include "keymap_common.h" - -#define PI 3.14159265 - -// #define PWM_AUDIO - -#ifdef PWM_AUDIO - #include "wave.h" - #define SAMPLE_DIVIDER 39 - #define SAMPLE_RATE (2000000.0/SAMPLE_DIVIDER/2048) - // Resistor value of 1/ (2 * PI * 10nF * (2000000 hertz / SAMPLE_DIVIDER / 10)) for 10nF cap -#endif - -void delay_us(int count) { - while(count--) { - _delay_us(1); - } -} - -int voices = 0; -int voice_place = 0; -double frequency = 0; -int volume = 0; -long position = 0; - -double frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0}; -int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0}; -bool sliding = false; - -int max = 0xFF; -float sum = 0; -int value = 128; -float place = 0; -float places[8] = {0, 0, 0, 0, 0, 0, 0, 0}; - -uint16_t place_int = 0; -bool repeat = true; -uint8_t * sample; -uint16_t sample_length = 0; - - -bool notes = false; -bool note = false; -float note_frequency = 0; -float note_length = 0; -uint16_t note_position = 0; -float (* notes_pointer)[][2]; -uint8_t notes_length; -bool notes_repeat; -uint8_t current_note = 0; - -void stop_all_notes() { - voices = 0; - #ifdef PWM_AUDIO - TIMSK3 &= ~_BV(OCIE3A); - #else - TIMSK3 &= ~_BV(OCIE3A); - TCCR3A &= ~_BV(COM3A1); - #endif - notes = false; - note = false; - frequency = 0; - volume = 0; - - for (int i = 0; i < 8; i++) { - frequencies[i] = 0; - volumes[i] = 0; - } -} - -void stop_note(double freq) { - #ifdef PWM_AUDIO - freq = freq / SAMPLE_RATE; - #endif - for (int i = 7; i >= 0; i--) { - if (frequencies[i] == freq) { - frequencies[i] = 0; - volumes[i] = 0; - for (int j = i; (j < 7); j++) { - frequencies[j] = frequencies[j+1]; - frequencies[j+1] = 0; - volumes[j] = volumes[j+1]; - volumes[j+1] = 0; - } - } - } - voices--; - if (voices < 0) - voices = 0; - if (voices == 0) { - #ifdef PWM_AUDIO - TIMSK3 &= ~_BV(OCIE3A); - #else - TIMSK3 &= ~_BV(OCIE3A); - TCCR3A &= ~_BV(COM3A1); - #endif - frequency = 0; - volume = 0; - note = false; - } else { - double freq = frequencies[voices - 1]; - int vol = volumes[voices - 1]; - double starting_f = frequency; - if (frequency < freq) { - sliding = true; - for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 2000.0)) { - frequency = f; - } - sliding = false; - } else if (frequency > freq) { - sliding = true; - for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 2000.0)) { - frequency = f; - } - sliding = false; - } - frequency = freq; - volume = vol; - } -} - -void init_notes() { - - #ifdef PWM_AUDIO - PLLFRQ = _BV(PDIV2); - PLLCSR = _BV(PLLE); - while(!(PLLCSR & _BV(PLOCK))); - PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */ - - /* Init a fast PWM on Timer4 */ - TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */ - TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */ - OCR4A = 0; - - /* Enable the OC4A output */ - DDRC |= _BV(PORTC6); - - TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs - - TCCR3A = 0x0; // Options not needed - TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC - OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback - #else - DDRC |= _BV(PORTC6); - - TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs - - TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); - TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); - #endif -} - - -ISR(TIMER3_COMPA_vect) { - - if (note) { - #ifdef PWM_AUDIO - if (voices == 1) { - // SINE - OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 2; - - // SQUARE - // if (((int)place) >= 1024){ - // OCR4A = 0xFF >> 2; - // } else { - // OCR4A = 0x00; - // } - - // SAWTOOTH - // OCR4A = (int)place / 4; - - // TRIANGLE - // if (((int)place) >= 1024) { - // OCR4A = (int)place / 2; - // } else { - // OCR4A = 2048 - (int)place / 2; - // } - - place += frequency; - - if (place >= SINE_LENGTH) - place -= SINE_LENGTH; - - } else { - int sum = 0; - for (int i = 0; i < voices; i++) { - // SINE - sum += pgm_read_byte(&sinewave[(uint16_t)places[i]]) >> 2; - - // SQUARE - // if (((int)places[i]) >= 1024){ - // sum += 0xFF >> 2; - // } else { - // sum += 0x00; - // } - - places[i] += frequencies[i]; - - if (places[i] >= SINE_LENGTH) - places[i] -= SINE_LENGTH; - } - OCR4A = sum; - } - #else - if (frequency > 0) { - // ICR3 = (int)(((double)F_CPU) / frequency); // Set max to the period - // OCR3A = (int)(((double)F_CPU) / frequency) >> 1; // Set compare to half the period - if (place > 10) { - voice_place = (voice_place + 1) % voices; - place = 0.0; - } - ICR3 = (int)(((double)F_CPU) / frequencies[voice_place]); // Set max to the period - OCR3A = (int)(((double)F_CPU) / frequencies[voice_place]) >> 1; // Set compare to half the period - place++; - } - #endif - } - - // SAMPLE - // OCR4A = pgm_read_byte(&sample[(uint16_t)place_int]); - - // place_int++; - - // if (place_int >= sample_length) - // if (repeat) - // place_int -= sample_length; - // else - // TIMSK3 &= ~_BV(OCIE3A); - - - if (notes) { - #ifdef PWM_AUDIO - OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 0; - - place += note_frequency; - if (place >= SINE_LENGTH) - place -= SINE_LENGTH; - #else - if (note_frequency > 0) { - ICR3 = (int)(((double)F_CPU) / note_frequency); // Set max to the period - OCR3A = (int)(((double)F_CPU) / note_frequency) >> 1; // Set compare to half the period - } else { - ICR3 = 0; - OCR3A = 0; - } - #endif - - - note_position++; - if (note_position >= note_length) { - current_note++; - if (current_note >= notes_length) { - if (notes_repeat) { - current_note = 0; - } else { - #ifdef PWM_AUDIO - TIMSK3 &= ~_BV(OCIE3A); - #else - TIMSK3 &= ~_BV(OCIE3A); - TCCR3A &= ~_BV(COM3A1); - #endif - notes = false; - return; - } - } - #ifdef PWM_AUDIO - note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; - note_length = (*notes_pointer)[current_note][1]; - #else - note_frequency = (*notes_pointer)[current_note][0]; - note_length = (*notes_pointer)[current_note][1] / 4; - #endif - note_position = 0; - } - - } - -} - -void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat) { - if (note) - stop_all_notes(); - notes = true; - - notes_pointer = np; - notes_length = n_length; - notes_repeat = n_repeat; - - place = 0; - current_note = 0; - #ifdef PWM_AUDIO - note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; - note_length = (*notes_pointer)[current_note][1]; - #else - note_frequency = (*notes_pointer)[current_note][0]; - note_length = (*notes_pointer)[current_note][1] / 4; - #endif - note_position = 0; - - - #ifdef PWM_AUDIO - TIMSK3 |= _BV(OCIE3A); - #else - TIMSK3 |= _BV(OCIE3A); - TCCR3A |= _BV(COM3A1); - #endif -} - -void play_sample(uint8_t * s, uint16_t l, bool r) { - stop_all_notes(); - place_int = 0; - sample = s; - sample_length = l; - repeat = r; - - #ifdef PWM_AUDIO - TIMSK3 |= _BV(OCIE3A); - #else - #endif -} - -void play_note(double freq, int vol) { - if (notes) - stop_all_notes(); - note = true; - #ifdef PWM_AUDIO - freq = freq / SAMPLE_RATE; - #endif - if (freq > 0) { - if (frequency != 0) { - double starting_f = frequency; - if (frequency < freq) { - for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 2000.0)) { - frequency = f; - } - } else if (frequency > freq) { - for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 2000.0)) { - frequency = f; - } - } - } - frequency = freq; - volume = vol; - - frequencies[voices] = frequency; - volumes[voices] = volume; - voices++; - } - - #ifdef PWM_AUDIO - TIMSK3 |= _BV(OCIE3A); - #else - TIMSK3 |= _BV(OCIE3A); - TCCR3A |= _BV(COM3A1); - #endif - -} \ No newline at end of file diff --git a/quantum/audio.h b/quantum/audio.h deleted file mode 100644 index 99203cea..00000000 --- a/quantum/audio.h +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include -#include -#include - -void play_sample(uint8_t * s, uint16_t l, bool r); -void play_note(double freq, int vol); -void stop_note(double freq); -void stop_all_notes(); -void init_notes(); -void play_notes(float (*np)[][2], uint8_t n_length, bool n_repeat); \ No newline at end of file diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c new file mode 100644 index 00000000..e85370d9 --- /dev/null +++ b/quantum/audio/audio.c @@ -0,0 +1,607 @@ +#include +#include +#include +#include +#include +#include +#include "print.h" +#include "audio.h" +#include "keymap_common.h" + +#include "eeconfig.h" + +#ifdef VIBRATO_ENABLE + #include "vibrato_lut.h" +#endif + +#define PI 3.14159265 + +#define CPU_PRESCALER 8 + +#ifdef PWM_AUDIO + #include "wave.h" + #define SAMPLE_DIVIDER 39 + #define SAMPLE_RATE (2000000.0/SAMPLE_DIVIDER/2048) + // Resistor value of 1/ (2 * PI * 10nF * (2000000 hertz / SAMPLE_DIVIDER / 10)) for 10nF cap + + float places[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + uint16_t place_int = 0; + bool repeat = true; +#endif + +void delay_us(int count) { + while(count--) { + _delay_us(1); + } +} + +int voices = 0; +int voice_place = 0; +float frequency = 0; +int volume = 0; +long position = 0; + +float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +bool sliding = false; + +int max = 0xFF; +float sum = 0; +float place = 0; + +uint8_t * sample; +uint16_t sample_length = 0; +// float freq = 0; + +bool notes = false; +bool note = false; +float note_frequency = 0; +float note_length = 0; +float note_tempo = TEMPO_DEFAULT; +float note_timbre = TIMBRE_DEFAULT; +uint16_t note_position = 0; +float (* notes_pointer)[][2]; +uint16_t notes_count; +bool notes_repeat; +float notes_rest; +bool note_resting = false; + +uint8_t current_note = 0; +uint8_t rest_counter = 0; + +#ifdef VIBRATO_ENABLE +float vibrato_counter = 0; +float vibrato_strength = .5; +float vibrato_rate = 0.125; +#endif + +float polyphony_rate = 0; + +bool inited = false; + +audio_config_t audio_config; + +uint16_t envelope_index = 0; + +void audio_toggle(void) { + audio_config.enable ^= 1; + eeconfig_update_audio(audio_config.raw); +} + +void audio_on(void) { + audio_config.enable = 1; + eeconfig_update_audio(audio_config.raw); +} + +void audio_off(void) { + audio_config.enable = 0; + eeconfig_update_audio(audio_config.raw); +} + +#ifdef VIBRATO_ENABLE +// Vibrato rate functions + +void set_vibrato_rate(float rate) { + vibrato_rate = rate; +} + +void increase_vibrato_rate(float change) { + vibrato_rate *= change; +} + +void decrease_vibrato_rate(float change) { + vibrato_rate /= change; +} + +#ifdef VIBRATO_STRENGTH_ENABLE + +void set_vibrato_strength(float strength) { + vibrato_strength = strength; +} + +void increase_vibrato_strength(float change) { + vibrato_strength *= change; +} + +void decrease_vibrato_strength(float change) { + vibrato_strength /= change; +} + +#endif + +#endif + +// Polyphony functions + +void set_polyphony_rate(float rate) { + polyphony_rate = rate; +} + +void enable_polyphony() { + polyphony_rate = 5; +} + +void disable_polyphony() { + polyphony_rate = 0; +} + +void increase_polyphony_rate(float change) { + polyphony_rate *= change; +} + +void decrease_polyphony_rate(float change) { + polyphony_rate /= change; +} + +// Timbre function + +void set_timbre(float timbre) { + note_timbre = timbre; +} + +// Tempo functions + +void set_tempo(float tempo) { + note_tempo = tempo; +} + +void decrease_tempo(uint8_t tempo_change) { + note_tempo += (float) tempo_change; +} + +void increase_tempo(uint8_t tempo_change) { + if (note_tempo - (float) tempo_change < 10) { + note_tempo = 10; + } else { + note_tempo -= (float) tempo_change; + } +} + +void audio_init() { + + /* check signature */ + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + audio_config.raw = eeconfig_read_audio(); + + #ifdef PWM_AUDIO + PLLFRQ = _BV(PDIV2); + PLLCSR = _BV(PLLE); + while(!(PLLCSR & _BV(PLOCK))); + PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */ + + /* Init a fast PWM on Timer4 */ + TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */ + TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */ + OCR4A = 0; + + /* Enable the OC4A output */ + DDRC |= _BV(PORTC6); + + TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs + + TCCR3A = 0x0; // Options not needed + TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC + OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback + #else + DDRC |= _BV(PORTC6); + + TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs + + TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); + TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); + #endif + + inited = true; +} + +void stop_all_notes() { + if (!inited) { + audio_init(); + } + voices = 0; + #ifdef PWM_AUDIO + TIMSK3 &= ~_BV(OCIE3A); + #else + TIMSK3 &= ~_BV(OCIE3A); + TCCR3A &= ~_BV(COM3A1); + #endif + notes = false; + note = false; + frequency = 0; + volume = 0; + + for (int i = 0; i < 8; i++) { + frequencies[i] = 0; + volumes[i] = 0; + } +} + +void stop_note(float freq) { + if (note) { + if (!inited) { + audio_init(); + } + #ifdef PWM_AUDIO + freq = freq / SAMPLE_RATE; + #endif + for (int i = 7; i >= 0; i--) { + if (frequencies[i] == freq) { + frequencies[i] = 0; + volumes[i] = 0; + for (int j = i; (j < 7); j++) { + frequencies[j] = frequencies[j+1]; + frequencies[j+1] = 0; + volumes[j] = volumes[j+1]; + volumes[j+1] = 0; + } + break; + } + } + voices--; + if (voices < 0) + voices = 0; + if (voice_place >= voices) { + voice_place = 0; + } + if (voices == 0) { + #ifdef PWM_AUDIO + TIMSK3 &= ~_BV(OCIE3A); + #else + TIMSK3 &= ~_BV(OCIE3A); + TCCR3A &= ~_BV(COM3A1); + #endif + frequency = 0; + volume = 0; + note = false; + } + } +} + +#ifdef VIBRATO_ENABLE + +float mod(float a, int b) +{ + float r = fmod(a, b); + return r < 0 ? r + b : r; +} + +float vibrato(float average_freq) { + #ifdef VIBRATO_STRENGTH_ENABLE + float vibrated_freq = average_freq * pow(VIBRATO_LUT[(int)vibrato_counter], vibrato_strength); + #else + float vibrated_freq = average_freq * VIBRATO_LUT[(int)vibrato_counter]; + #endif + vibrato_counter = mod((vibrato_counter + vibrato_rate * (1.0 + 440.0/average_freq)), VIBRATO_LUT_LENGTH); + return vibrated_freq; +} + +#endif + +ISR(TIMER3_COMPA_vect) { + if (note) { + #ifdef PWM_AUDIO + if (voices == 1) { + // SINE + OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 2; + + // SQUARE + // if (((int)place) >= 1024){ + // OCR4A = 0xFF >> 2; + // } else { + // OCR4A = 0x00; + // } + + // SAWTOOTH + // OCR4A = (int)place / 4; + + // TRIANGLE + // if (((int)place) >= 1024) { + // OCR4A = (int)place / 2; + // } else { + // OCR4A = 2048 - (int)place / 2; + // } + + place += frequency; + + if (place >= SINE_LENGTH) + place -= SINE_LENGTH; + + } else { + int sum = 0; + for (int i = 0; i < voices; i++) { + // SINE + sum += pgm_read_byte(&sinewave[(uint16_t)places[i]]) >> 2; + + // SQUARE + // if (((int)places[i]) >= 1024){ + // sum += 0xFF >> 2; + // } else { + // sum += 0x00; + // } + + places[i] += frequencies[i]; + + if (places[i] >= SINE_LENGTH) + places[i] -= SINE_LENGTH; + } + OCR4A = sum; + } + #else + if (voices > 0) { + float freq; + if (polyphony_rate > 0) { + if (voices > 1) { + voice_place %= voices; + if (place++ > (frequencies[voice_place] / polyphony_rate / CPU_PRESCALER)) { + voice_place = (voice_place + 1) % voices; + place = 0.0; + } + } + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequencies[voice_place]); + } else { + #else + { + #endif + freq = frequencies[voice_place]; + } + } else { + if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, 440/frequency/12/2); + } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { + frequency = frequency * pow(2, -440/frequency/12/2); + } else { + frequency = frequencies[voices - 1]; + } + + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(frequency); + } else { + #else + { + #endif + freq = frequency; + } + } + + if (envelope_index < 65535) { + envelope_index++; + } + freq = voice_envelope(freq); + + if (freq < 30.517578125) + freq = 30.52; + ICR3 = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period + OCR3A = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period + } + #endif + } + + // SAMPLE + // OCR4A = pgm_read_byte(&sample[(uint16_t)place_int]); + + // place_int++; + + // if (place_int >= sample_length) + // if (repeat) + // place_int -= sample_length; + // else + // TIMSK3 &= ~_BV(OCIE3A); + + + if (notes) { + #ifdef PWM_AUDIO + OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]) >> 0; + + place += note_frequency; + if (place >= SINE_LENGTH) + place -= SINE_LENGTH; + #else + if (note_frequency > 0) { + float freq; + + #ifdef VIBRATO_ENABLE + if (vibrato_strength > 0) { + freq = vibrato(note_frequency); + } else { + #else + { + #endif + freq = note_frequency; + } + + if (envelope_index < 65535) { + envelope_index++; + } + freq = voice_envelope(freq); + + ICR3 = (int)(((double)F_CPU) / (freq * CPU_PRESCALER)); // Set max to the period + OCR3A = (int)((((double)F_CPU) / (freq * CPU_PRESCALER)) * note_timbre); // Set compare to half the period + } else { + ICR3 = 0; + OCR3A = 0; + } + #endif + + + note_position++; + bool end_of_note = false; + if (ICR3 > 0) + end_of_note = (note_position >= (note_length / ICR3 * 0xFFFF)); + else + end_of_note = (note_position >= (note_length * 0x7FF)); + if (end_of_note) { + current_note++; + if (current_note >= notes_count) { + if (notes_repeat) { + current_note = 0; + } else { + #ifdef PWM_AUDIO + TIMSK3 &= ~_BV(OCIE3A); + #else + TIMSK3 &= ~_BV(OCIE3A); + TCCR3A &= ~_BV(COM3A1); + #endif + notes = false; + return; + } + } + if (!note_resting && (notes_rest > 0)) { + note_resting = true; + note_frequency = 0; + note_length = notes_rest; + current_note--; + } else { + note_resting = false; + #ifdef PWM_AUDIO + note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; + note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100); + #else + envelope_index = 0; + note_frequency = (*notes_pointer)[current_note][0]; + note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100); + #endif + } + note_position = 0; + } + + } + + if (!audio_config.enable) { + notes = false; + note = false; + } +} + +void play_note(float freq, int vol) { + + if (!inited) { + audio_init(); + } + +if (audio_config.enable && voices < 8) { + TIMSK3 &= ~_BV(OCIE3A); + // Cancel notes if notes are playing + if (notes) + stop_all_notes(); + note = true; + envelope_index = 0; + #ifdef PWM_AUDIO + freq = freq / SAMPLE_RATE; + #endif + if (freq > 0) { + frequencies[voices] = freq; + volumes[voices] = vol; + voices++; + } + + #ifdef PWM_AUDIO + TIMSK3 |= _BV(OCIE3A); + #else + TIMSK3 |= _BV(OCIE3A); + TCCR3A |= _BV(COM3A1); + #endif +} + +} + +void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) { + + if (!inited) { + audio_init(); + } + +if (audio_config.enable) { + TIMSK3 &= ~_BV(OCIE3A); + // Cancel note if a note is playing + if (note) + stop_all_notes(); + notes = true; + + notes_pointer = np; + notes_count = n_count; + notes_repeat = n_repeat; + notes_rest = n_rest; + + place = 0; + current_note = 0; + #ifdef PWM_AUDIO + note_frequency = (*notes_pointer)[current_note][0] / SAMPLE_RATE; + note_length = (*notes_pointer)[current_note][1] * (note_tempo / 100); + #else + note_frequency = (*notes_pointer)[current_note][0]; + note_length = ((*notes_pointer)[current_note][1] / 4) * (note_tempo / 100); + #endif + note_position = 0; + + + #ifdef PWM_AUDIO + TIMSK3 |= _BV(OCIE3A); + #else + TIMSK3 |= _BV(OCIE3A); + TCCR3A |= _BV(COM3A1); + #endif +} + +} + +#ifdef PWM_AUDIO +void play_sample(uint8_t * s, uint16_t l, bool r) { + if (!inited) { + audio_init(); + } + + if (audio_config.enable) { + TIMSK3 &= ~_BV(OCIE3A); + stop_all_notes(); + place_int = 0; + sample = s; + sample_length = l; + repeat = r; + + TIMSK3 |= _BV(OCIE3A); + } +} +#endif + +//------------------------------------------------------------------------------ +// Override these functions in your keymap file to play different tunes on +// startup and bootloader jump +__attribute__ ((weak)) +void play_startup_tone() +{ +} + + + +__attribute__ ((weak)) +void play_goodbye_tone() +{ + +} +//------------------------------------------------------------------------------ diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h new file mode 100644 index 00000000..89769507 --- /dev/null +++ b/quantum/audio/audio.h @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include "musical_notes.h" +#include "song_list.h" +#include "voices.h" + +#ifndef AUDIO_H +#define AUDIO_H + +// Largely untested PWM audio mode (doesn't sound as good) +// #define PWM_AUDIO + +// #define VIBRATO_ENABLE + +// Enable vibrato strength/amplitude - slows down ISR too much +// #define VIBRATO_STRENGTH_ENABLE + +typedef union { + uint8_t raw; + struct { + bool enable :1; + uint8_t level :7; + }; +} audio_config_t; + +void audio_toggle(void); +void audio_on(void); +void audio_off(void); + +// Vibrato rate functions + +#ifdef VIBRATO_ENABLE + +void set_vibrato_rate(float rate); +void increase_vibrato_rate(float change); +void decrease_vibrato_rate(float change); + +#ifdef VIBRATO_STRENGTH_ENABLE + +void set_vibrato_strength(float strength); +void increase_vibrato_strength(float change); +void decrease_vibrato_strength(float change); + +#endif + +#endif + +// Polyphony functions + +void set_polyphony_rate(float rate); +void enable_polyphony(void); +void disable_polyphony(void); +void increase_polyphony_rate(float change); +void decrease_polyphony_rate(float change); + +void set_timbre(float timbre); +void set_tempo(float tempo); + +void increase_tempo(uint8_t tempo_change); +void decrease_tempo(uint8_t tempo_change); + +void audio_init(void); + +#ifdef PWM_AUDIO +void play_sample(uint8_t * s, uint16_t l, bool r); +#endif +void play_note(float freq, int vol); +void stop_note(float freq); +void stop_all_notes(void); +void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest); + +#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ + 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ + 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ + 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ + 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } + +// These macros are used to allow play_notes to play an array of indeterminate +// length. This works around the limitation of C's sizeof operation on pointers. +// The global float array for the song must be used here. +#define NOTE_ARRAY_SIZE(x) ((int16_t)(sizeof(x) / (sizeof(x[0])))) +#define PLAY_NOTE_ARRAY(note_array, note_repeat, note_rest_style) play_notes(¬e_array, NOTE_ARRAY_SIZE((note_array)), (note_repeat), (note_rest_style)); + +void play_goodbye_tone(void); +void play_startup_tone(void); + +#endif \ No newline at end of file diff --git a/quantum/audio/frequency_lut.h b/quantum/audio/frequency_lut.h new file mode 100644 index 00000000..e62da5be --- /dev/null +++ b/quantum/audio/frequency_lut.h @@ -0,0 +1,357 @@ +#include +#include +#include + +#define FREQUENCY_LUT_LENGTH 349 + +const uint16_t FREQUENCY_LUT[FREQUENCY_LUT_LENGTH] = { +0x8E0B, +0x8C02, +0x8A00, +0x8805, +0x8612, +0x8426, +0x8241, +0x8063, +0x7E8C, +0x7CBB, +0x7AF2, +0x792E, +0x7772, +0x75BB, +0x740B, +0x7261, +0x70BD, +0x6F20, +0x6D88, +0x6BF6, +0x6A69, +0x68E3, +0x6762, +0x65E6, +0x6470, +0x6300, +0x6194, +0x602E, +0x5ECD, +0x5D71, +0x5C1A, +0x5AC8, +0x597B, +0x5833, +0x56EF, +0x55B0, +0x5475, +0x533F, +0x520E, +0x50E1, +0x4FB8, +0x4E93, +0x4D73, +0x4C57, +0x4B3E, +0x4A2A, +0x491A, +0x480E, +0x4705, +0x4601, +0x4500, +0x4402, +0x4309, +0x4213, +0x4120, +0x4031, +0x3F46, +0x3E5D, +0x3D79, +0x3C97, +0x3BB9, +0x3ADD, +0x3A05, +0x3930, +0x385E, +0x3790, +0x36C4, +0x35FB, +0x3534, +0x3471, +0x33B1, +0x32F3, +0x3238, +0x3180, +0x30CA, +0x3017, +0x2F66, +0x2EB8, +0x2E0D, +0x2D64, +0x2CBD, +0x2C19, +0x2B77, +0x2AD8, +0x2A3A, +0x299F, +0x2907, +0x2870, +0x27DC, +0x2749, +0x26B9, +0x262B, +0x259F, +0x2515, +0x248D, +0x2407, +0x2382, +0x2300, +0x2280, +0x2201, +0x2184, +0x2109, +0x2090, +0x2018, +0x1FA3, +0x1F2E, +0x1EBC, +0x1E4B, +0x1DDC, +0x1D6E, +0x1D02, +0x1C98, +0x1C2F, +0x1BC8, +0x1B62, +0x1AFD, +0x1A9A, +0x1A38, +0x19D8, +0x1979, +0x191C, +0x18C0, +0x1865, +0x180B, +0x17B3, +0x175C, +0x1706, +0x16B2, +0x165E, +0x160C, +0x15BB, +0x156C, +0x151D, +0x14CF, +0x1483, +0x1438, +0x13EE, +0x13A4, +0x135C, +0x1315, +0x12CF, +0x128A, +0x1246, +0x1203, +0x11C1, +0x1180, +0x1140, +0x1100, +0x10C2, +0x1084, +0x1048, +0x100C, +0xFD1, +0xF97, +0xF5E, +0xF25, +0xEEE, +0xEB7, +0xE81, +0xE4C, +0xE17, +0xDE4, +0xDB1, +0xD7E, +0xD4D, +0xD1C, +0xCEC, +0xCBC, +0xC8E, +0xC60, +0xC32, +0xC05, +0xBD9, +0xBAE, +0xB83, +0xB59, +0xB2F, +0xB06, +0xADD, +0xAB6, +0xA8E, +0xA67, +0xA41, +0xA1C, +0x9F7, +0x9D2, +0x9AE, +0x98A, +0x967, +0x945, +0x923, +0x901, +0x8E0, +0x8C0, +0x8A0, +0x880, +0x861, +0x842, +0x824, +0x806, +0x7E8, +0x7CB, +0x7AF, +0x792, +0x777, +0x75B, +0x740, +0x726, +0x70B, +0x6F2, +0x6D8, +0x6BF, +0x6A6, +0x68E, +0x676, +0x65E, +0x647, +0x630, +0x619, +0x602, +0x5EC, +0x5D7, +0x5C1, +0x5AC, +0x597, +0x583, +0x56E, +0x55B, +0x547, +0x533, +0x520, +0x50E, +0x4FB, +0x4E9, +0x4D7, +0x4C5, +0x4B3, +0x4A2, +0x491, +0x480, +0x470, +0x460, +0x450, +0x440, +0x430, +0x421, +0x412, +0x403, +0x3F4, +0x3E5, +0x3D7, +0x3C9, +0x3BB, +0x3AD, +0x3A0, +0x393, +0x385, +0x379, +0x36C, +0x35F, +0x353, +0x347, +0x33B, +0x32F, +0x323, +0x318, +0x30C, +0x301, +0x2F6, +0x2EB, +0x2E0, +0x2D6, +0x2CB, +0x2C1, +0x2B7, +0x2AD, +0x2A3, +0x299, +0x290, +0x287, +0x27D, +0x274, +0x26B, +0x262, +0x259, +0x251, +0x248, +0x240, +0x238, +0x230, +0x228, +0x220, +0x218, +0x210, +0x209, +0x201, +0x1FA, +0x1F2, +0x1EB, +0x1E4, +0x1DD, +0x1D6, +0x1D0, +0x1C9, +0x1C2, +0x1BC, +0x1B6, +0x1AF, +0x1A9, +0x1A3, +0x19D, +0x197, +0x191, +0x18C, +0x186, +0x180, +0x17B, +0x175, +0x170, +0x16B, +0x165, +0x160, +0x15B, +0x156, +0x151, +0x14C, +0x148, +0x143, +0x13E, +0x13A, +0x135, +0x131, +0x12C, +0x128, +0x124, +0x120, +0x11C, +0x118, +0x114, +0x110, +0x10C, +0x108, +0x104, +0x100, +0xFD, +0xF9, +0xF5, +0xF2, +0xEE +}; \ No newline at end of file diff --git a/quantum/audio/musical_notes.h b/quantum/audio/musical_notes.h new file mode 100644 index 00000000..b08d16a6 --- /dev/null +++ b/quantum/audio/musical_notes.h @@ -0,0 +1,217 @@ +#ifndef MUSICAL_NOTES_H +#define MUSICAL_NOTES_H + +// Tempo Placeholder +#define TEMPO_DEFAULT 100 + + +#define SONG(notes...) { notes } + + +// Note Types +#define MUSICAL_NOTE(note, duration) {(NOTE##note), duration} +#define WHOLE_NOTE(note) MUSICAL_NOTE(note, 64) +#define HALF_NOTE(note) MUSICAL_NOTE(note, 32) +#define QUARTER_NOTE(note) MUSICAL_NOTE(note, 16) +#define EIGHTH_NOTE(note) MUSICAL_NOTE(note, 8) +#define SIXTEENTH_NOTE(note) MUSICAL_NOTE(note, 4) + +#define WHOLE_DOT_NOTE(note) MUSICAL_NOTE(note, 64+32) +#define HALF_DOT_NOTE(note) MUSICAL_NOTE(note, 32+16) +#define QUARTER_DOT_NOTE(note) MUSICAL_NOTE(note, 16+8) +#define EIGHTH_DOT_NOTE(note) MUSICAL_NOTE(note, 8+4) +#define SIXTEENTH_DOT_NOTE(note) MUSICAL_NOTE(note, 4+2) + +// Note Type Shortcuts +#define M__NOTE(note, duration) MUSICAL_NOTE(note, duration) +#define W__NOTE(n) WHOLE_NOTE(n) +#define H__NOTE(n) HALF_NOTE(n) +#define Q__NOTE(n) QUARTER_NOTE(n) +#define E__NOTE(n) EIGHTH_NOTE(n) +#define S__NOTE(n) SIXTEENTH_NOTE(n) +#define WD_NOTE(n) WHOLE_DOT_NOTE(n) +#define HD_NOTE(n) HALF_DOT_NOTE(n) +#define QD_NOTE(n) QUARTER_DOT_NOTE(n) +#define ED_NOTE(n) EIGHTH_DOT_NOTE(n) +#define SD_NOTE(n) SIXTEENTH_DOT_NOTE(n) + +// Note Styles +// Staccato makes sure there is a rest between each note. Think: TA TA TA +// Legato makes notes flow together. Think: TAAA +#define STACCATO 0.01 +#define LEGATO 0 + +// Note Timbre +// Changes how the notes sound +#define TIMBRE_12 0.125 +#define TIMBRE_25 0.250 +#define TIMBRE_50 0.500 +#define TIMBRE_75 0.750 +#define TIMBRE_DEFAULT TIMBRE_50 + + +// Notes - # = Octave + +#define NOTE_REST 0.00 + +/* These notes are currently bugged +#define NOTE_C0 16.35 +#define NOTE_CS0 17.32 +#define NOTE_D0 18.35 +#define NOTE_DS0 19.45 +#define NOTE_E0 20.60 +#define NOTE_F0 21.83 +#define NOTE_FS0 23.12 +#define NOTE_G0 24.50 +#define NOTE_GS0 25.96 +#define NOTE_A0 27.50 +#define NOTE_AS0 29.14 +#define NOTE_B0 30.87 +#define NOTE_C1 32.70 +#define NOTE_CS1 34.65 +#define NOTE_D1 36.71 +#define NOTE_DS1 38.89 +#define NOTE_E1 41.20 +#define NOTE_F1 43.65 +#define NOTE_FS1 46.25 +#define NOTE_G1 49.00 +#define NOTE_GS1 51.91 +#define NOTE_A1 55.00 +#define NOTE_AS1 58.27 +*/ + +#define NOTE_B1 61.74 +#define NOTE_C2 65.41 +#define NOTE_CS2 69.30 +#define NOTE_D2 73.42 +#define NOTE_DS2 77.78 +#define NOTE_E2 82.41 +#define NOTE_F2 87.31 +#define NOTE_FS2 92.50 +#define NOTE_G2 98.00 +#define NOTE_GS2 103.83 +#define NOTE_A2 110.00 +#define NOTE_AS2 116.54 +#define NOTE_B2 123.47 +#define NOTE_C3 130.81 +#define NOTE_CS3 138.59 +#define NOTE_D3 146.83 +#define NOTE_DS3 155.56 +#define NOTE_E3 164.81 +#define NOTE_F3 174.61 +#define NOTE_FS3 185.00 +#define NOTE_G3 196.00 +#define NOTE_GS3 207.65 +#define NOTE_A3 220.00 +#define NOTE_AS3 233.08 +#define NOTE_B3 246.94 +#define NOTE_C4 261.63 +#define NOTE_CS4 277.18 +#define NOTE_D4 293.66 +#define NOTE_DS4 311.13 +#define NOTE_E4 329.63 +#define NOTE_F4 349.23 +#define NOTE_FS4 369.99 +#define NOTE_G4 392.00 +#define NOTE_GS4 415.30 +#define NOTE_A4 440.00 +#define NOTE_AS4 466.16 +#define NOTE_B4 493.88 +#define NOTE_C5 523.25 +#define NOTE_CS5 554.37 +#define NOTE_D5 587.33 +#define NOTE_DS5 622.25 +#define NOTE_E5 659.26 +#define NOTE_F5 698.46 +#define NOTE_FS5 739.99 +#define NOTE_G5 783.99 +#define NOTE_GS5 830.61 +#define NOTE_A5 880.00 +#define NOTE_AS5 932.33 +#define NOTE_B5 987.77 +#define NOTE_C6 1046.50 +#define NOTE_CS6 1108.73 +#define NOTE_D6 1174.66 +#define NOTE_DS6 1244.51 +#define NOTE_E6 1318.51 +#define NOTE_F6 1396.91 +#define NOTE_FS6 1479.98 +#define NOTE_G6 1567.98 +#define NOTE_GS6 1661.22 +#define NOTE_A6 1760.00 +#define NOTE_AS6 1864.66 +#define NOTE_B6 1975.53 +#define NOTE_C7 2093.00 +#define NOTE_CS7 2217.46 +#define NOTE_D7 2349.32 +#define NOTE_DS7 2489.02 +#define NOTE_E7 2637.02 +#define NOTE_F7 2793.83 +#define NOTE_FS7 2959.96 +#define NOTE_G7 3135.96 +#define NOTE_GS7 3322.44 +#define NOTE_A7 3520.00 +#define NOTE_AS7 3729.31 +#define NOTE_B7 3951.07 +#define NOTE_C8 4186.01 +#define NOTE_CS8 4434.92 +#define NOTE_D8 4698.64 +#define NOTE_DS8 4978.03 +#define NOTE_E8 5274.04 +#define NOTE_F8 5587.65 +#define NOTE_FS8 5919.91 +#define NOTE_G8 6271.93 +#define NOTE_GS8 6644.88 +#define NOTE_A8 7040.00 +#define NOTE_AS8 7458.62 +#define NOTE_B8 7902.13 + +// Flat Aliases +#define NOTE_DF0 NOTE_CS0 +#define NOTE_EF0 NOTE_DS0 +#define NOTE_GF0 NOTE_FS0 +#define NOTE_AF0 NOTE_GS0 +#define NOTE_BF0 NOTE_AS0 +#define NOTE_DF1 NOTE_CS1 +#define NOTE_EF1 NOTE_DS1 +#define NOTE_GF1 NOTE_FS1 +#define NOTE_AF1 NOTE_GS1 +#define NOTE_BF1 NOTE_AS1 +#define NOTE_DF2 NOTE_CS2 +#define NOTE_EF2 NOTE_DS2 +#define NOTE_GF2 NOTE_FS2 +#define NOTE_AF2 NOTE_GS2 +#define NOTE_BF2 NOTE_AS2 +#define NOTE_DF3 NOTE_CS3 +#define NOTE_EF3 NOTE_DS3 +#define NOTE_GF3 NOTE_FS3 +#define NOTE_AF3 NOTE_GS3 +#define NOTE_BF3 NOTE_AS3 +#define NOTE_DF4 NOTE_CS4 +#define NOTE_EF4 NOTE_DS4 +#define NOTE_GF4 NOTE_FS4 +#define NOTE_AF4 NOTE_GS4 +#define NOTE_BF4 NOTE_AS4 +#define NOTE_DF5 NOTE_CS5 +#define NOTE_EF5 NOTE_DS5 +#define NOTE_GF5 NOTE_FS5 +#define NOTE_AF5 NOTE_GS5 +#define NOTE_BF5 NOTE_AS5 +#define NOTE_DF6 NOTE_CS6 +#define NOTE_EF6 NOTE_DS6 +#define NOTE_GF6 NOTE_FS6 +#define NOTE_AF6 NOTE_GS6 +#define NOTE_BF6 NOTE_AS6 +#define NOTE_DF7 NOTE_CS7 +#define NOTE_EF7 NOTE_DS7 +#define NOTE_GF7 NOTE_FS7 +#define NOTE_AF7 NOTE_GS7 +#define NOTE_BF7 NOTE_AS7 +#define NOTE_DF8 NOTE_CS8 +#define NOTE_EF8 NOTE_DS8 +#define NOTE_GF8 NOTE_FS8 +#define NOTE_AF8 NOTE_GS8 +#define NOTE_BF8 NOTE_AS8 + + +#endif \ No newline at end of file diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h new file mode 100644 index 00000000..fc6fcdee --- /dev/null +++ b/quantum/audio/song_list.h @@ -0,0 +1,117 @@ +#include "musical_notes.h" + +#ifndef SONG_LIST_H +#define SONG_LIST_H + +#define ODE_TO_JOY \ + Q__NOTE(_E4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_G4), \ + Q__NOTE(_G4), Q__NOTE(_F4), Q__NOTE(_E4), Q__NOTE(_D4), \ + Q__NOTE(_C4), Q__NOTE(_C4), Q__NOTE(_D4), Q__NOTE(_E4), \ + QD_NOTE(_E4), E__NOTE(_D4), H__NOTE(_D4), + +#define ROCK_A_BYE_BABY \ + QD_NOTE(_B4), E__NOTE(_D4), Q__NOTE(_B5), \ + H__NOTE(_A5), Q__NOTE(_G5), \ + QD_NOTE(_B4), E__NOTE(_D5), Q__NOTE(_G5), \ + H__NOTE(_FS5), + +#define CLOSE_ENCOUNTERS_5_NOTE \ + Q__NOTE(_D5), \ + Q__NOTE(_E5), \ + Q__NOTE(_C5), \ + Q__NOTE(_C4), \ + Q__NOTE(_G4), + +#define DOE_A_DEER \ + QD_NOTE(_C4), E__NOTE(_D4), \ + QD_NOTE(_E4), E__NOTE(_C4), \ + Q__NOTE(_E4), Q__NOTE(_C4), \ + Q__NOTE(_E4), + +#define GOODBYE_SOUND \ + E__NOTE(_E7), \ + E__NOTE(_A6), \ + ED_NOTE(_E6), + +#define STARTUP_SOUND \ + ED_NOTE(_E7 ), \ + E__NOTE(_CS7), \ + E__NOTE(_E6 ), \ + E__NOTE(_A6 ), \ + M__NOTE(_CS7, 20), + +#define QWERTY_SOUND \ + E__NOTE(_GS6 ), \ + E__NOTE(_A6 ), \ + S__NOTE(_REST), \ + Q__NOTE(_E7 ), + +#define COLEMAK_SOUND \ + E__NOTE(_GS6 ), \ + E__NOTE(_A6 ), \ + S__NOTE(_REST), \ + ED_NOTE(_E7 ), \ + S__NOTE(_REST), \ + ED_NOTE(_GS7 ), + +#define DVORAK_SOUND \ + E__NOTE(_GS6 ), \ + E__NOTE(_A6 ), \ + S__NOTE(_REST), \ + E__NOTE(_E7 ), \ + S__NOTE(_REST), \ + E__NOTE(_FS7 ), \ + S__NOTE(_REST), \ + E__NOTE(_E7 ), + +#define PLOVER_SOUND \ + E__NOTE(_GS6 ), \ + E__NOTE(_A6 ), \ + S__NOTE(_REST), \ + ED_NOTE(_E7 ), \ + S__NOTE(_REST), \ + ED_NOTE(_A7 ), + +#define PLOVER_GOODBYE_SOUND \ + E__NOTE(_GS6 ), \ + E__NOTE(_A6 ), \ + S__NOTE(_REST), \ + ED_NOTE(_A7 ), \ + S__NOTE(_REST), \ + ED_NOTE(_E7 ), + +#define MUSIC_SCALE_SOUND \ + E__NOTE(_A5 ), \ + E__NOTE(_B5 ), \ + E__NOTE(_CS6), \ + E__NOTE(_D6 ), \ + E__NOTE(_E6 ), \ + E__NOTE(_FS6), \ + E__NOTE(_GS6), \ + E__NOTE(_A6 ), + +#define CAPS_LOCK_ON_SOUND \ + E__NOTE(_A3), \ + E__NOTE(_B3), + +#define CAPS_LOCK_OFF_SOUND \ + E__NOTE(_B3), \ + E__NOTE(_A3), + +#define SCROLL_LOCK_ON_SOUND \ + E__NOTE(_D4), \ + E__NOTE(_E4), + +#define SCROLL_LOCK_OFF_SOUND \ + E__NOTE(_E4), \ + E__NOTE(_D4), + +#define NUM_LOCK_ON_SOUND \ + E__NOTE(_D5), \ + E__NOTE(_E5), + +#define NUM_LOCK_OFF_SOUND \ + E__NOTE(_E5), \ + E__NOTE(_D5), + +#endif diff --git a/quantum/audio/vibrato_lut.h b/quantum/audio/vibrato_lut.h new file mode 100644 index 00000000..a2b1f3e5 --- /dev/null +++ b/quantum/audio/vibrato_lut.h @@ -0,0 +1,28 @@ +#include +#include +#include + +#define VIBRATO_LUT_LENGTH 20 + +const float VIBRATO_LUT[VIBRATO_LUT_LENGTH] = { \ +1.00223368114872, +1.00425299436105, +1.00585842560279, +1.00689052852052, +1.0072464122237, +1.00689052852052, +1.00585842560279, +1.00425299436105, +1.00223368114872, +1, +0.99777129706302, +0.99576501699778, +0.994175695650927, +0.993156625943589, +0.992805720491269, +0.993156625943589, +0.994175695650927, +0.99576501699778, +0.99777129706302, +1 +}; \ No newline at end of file diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c new file mode 100644 index 00000000..0921bd59 --- /dev/null +++ b/quantum/audio/voices.c @@ -0,0 +1,163 @@ +#include "voices.h" +#include "stdlib.h" +#include "vibrato_lut.h" + +// these are imported from audio.c +extern uint16_t envelope_index; +extern float note_timbre; +extern float polyphony_rate; + +voice_type voice = default_voice; + +void set_voice(voice_type v) { + voice = v; +} + +void voice_iterate() { + voice = (voice + 1) % number_of_voices; +} + +void voice_deiterate() { + voice = (voice - 1) % number_of_voices; +} + +float voice_envelope(float frequency) { + // envelope_index ranges from 0 to 0xFFFF, which is preserved at 880.0 Hz + uint16_t compensated_index = (uint16_t)((float)envelope_index * (880.0 / frequency)); + + switch (voice) { + case default_voice: + note_timbre = TIMBRE_50; + polyphony_rate = 0; + break; + + case butts_fader: + polyphony_rate = 0; + switch (compensated_index) { + case 0 ... 9: + frequency = frequency / 4; + note_timbre = TIMBRE_12; + break; + + case 10 ... 19: + frequency = frequency / 2; + note_timbre = TIMBRE_12; + break; + + case 20 ... 200: + note_timbre = .125 - pow(((float)compensated_index - 20) / (200 - 20), 2)*.125; + break; + + default: + note_timbre = 0; + break; + } + break; + + case octave_crunch: + polyphony_rate = 0; + switch (compensated_index) { + case 0 ... 9: + case 20 ... 24: + case 30 ... 32: + frequency = frequency / 2; + note_timbre = TIMBRE_12; + break; + + case 10 ... 19: + case 25 ... 29: + case 33 ... 35: + frequency = frequency * 2; + note_timbre = TIMBRE_12; + break; + + default: + note_timbre = TIMBRE_12; + break; + } + break; + + case duty_osc: + // This slows the loop down a substantial amount, so higher notes may freeze + polyphony_rate = 0; + switch (compensated_index) { + default: + #define OCS_SPEED 10 + #define OCS_AMP .25 + // sine wave is slow + // note_timbre = (sin((float)compensated_index/10000*OCS_SPEED) * OCS_AMP / 2) + .5; + // triangle wave is a bit faster + note_timbre = (float)abs((compensated_index*OCS_SPEED % 3000) - 1500) * ( OCS_AMP / 1500 ) + (1 - OCS_AMP) / 2; + break; + } + break; + + case duty_octave_down: + polyphony_rate = 0; + note_timbre = (envelope_index % 2) * .125 + .375 * 2; + if ((envelope_index % 4) == 0) + note_timbre = 0.5; + if ((envelope_index % 8) == 0) + note_timbre = 0; + break; + case delayed_vibrato: + polyphony_rate = 0; + note_timbre = TIMBRE_50; + #define VOICE_VIBRATO_DELAY 150 + #define VOICE_VIBRATO_SPEED 50 + switch (compensated_index) { + case 0 ... VOICE_VIBRATO_DELAY: + break; + default: + frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; + break; + } + break; + // case delayed_vibrato_octave: + // polyphony_rate = 0; + // if ((envelope_index % 2) == 1) { + // note_timbre = 0.55; + // } else { + // note_timbre = 0.45; + // } + // #define VOICE_VIBRATO_DELAY 150 + // #define VOICE_VIBRATO_SPEED 50 + // switch (compensated_index) { + // case 0 ... VOICE_VIBRATO_DELAY: + // break; + // default: + // frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; + // break; + // } + // break; + // case duty_fifth_down: + // note_timbre = 0.5; + // if ((envelope_index % 3) == 0) + // note_timbre = 0.75; + // break; + // case duty_fourth_down: + // note_timbre = 0.0; + // if ((envelope_index % 12) == 0) + // note_timbre = 0.75; + // if (((envelope_index % 12) % 4) != 1) + // note_timbre = 0.75; + // break; + // case duty_third_down: + // note_timbre = 0.5; + // if ((envelope_index % 5) == 0) + // note_timbre = 0.75; + // break; + // case duty_fifth_third_down: + // note_timbre = 0.5; + // if ((envelope_index % 5) == 0) + // note_timbre = 0.75; + // if ((envelope_index % 3) == 0) + // note_timbre = 0.25; + // break; + + default: + break; + } + + return frequency; +} \ No newline at end of file diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h new file mode 100644 index 00000000..74c873f4 --- /dev/null +++ b/quantum/audio/voices.h @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "musical_notes.h" +#include "song_list.h" + +#ifndef VOICES_H +#define VOICES_H + +float voice_envelope(float frequency); + +typedef enum { + default_voice, + butts_fader, + octave_crunch, + duty_osc, + duty_octave_down, + delayed_vibrato, + // delayed_vibrato_octave, + // duty_fifth_down, + // duty_fourth_down, + // duty_third_down, + // duty_fifth_third_down, + number_of_voices // important that this is last +} voice_type; + +void set_voice(voice_type v); +void voice_iterate(void); +void voice_deiterate(void); + +#endif \ No newline at end of file diff --git a/quantum/wave.h b/quantum/audio/wave.h similarity index 100% rename from quantum/wave.h rename to quantum/audio/wave.h diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 2eef4f15..4b4bd621 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -26,141 +26,27 @@ along with this program. If not, see . #include "backlight.h" #include "keymap_midi.h" #include "bootloader.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; #include #include #ifdef AUDIO_ENABLE #include "audio.h" - - float goodbye[][2] = { - {440.0*pow(2.0,(67)/12.0), 400}, - {0, 50}, - {440.0*pow(2.0,(60)/12.0), 400}, - {0, 50}, - {440.0*pow(2.0,(55)/12.0), 600}, - }; -#endif +#endif /* AUDIO_ENABLE */ static action_t keycode_to_action(uint16_t keycode); /* converts key to action */ action_t action_for_key(uint8_t layer, keypos_t key) { - // 16bit keycodes - important + // 16bit keycodes - important uint16_t keycode = keymap_key_to_keycode(layer, key); - if (keycode >= 0x0100 && keycode < 0x2000) { - // Has a modifier - action_t action; - // Split it up - action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key - return action; - } else if (keycode >= 0x2000 && keycode < 0x3000) { - // Is a shortcut for function layer, pull last 12bits - // This means we have 4,096 FN macros at our disposal - return keymap_func_to_action(keycode & 0xFFF); - } else if (keycode >= 0x3000 && keycode < 0x4000) { - // When the code starts with 3, it's an action macro. - action_t action; - action.code = ACTION_MACRO(keycode & 0xFF); - return action; -#ifdef BACKLIGHT_ENABLE - } else if (keycode >= BL_0 && keycode <= BL_15) { - action_t action; - action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F); - return action; - } else if (keycode == BL_DEC) { - action_t action; - action.code = ACTION_BACKLIGHT_DECREASE(); - return action; - } else if (keycode == BL_INC) { - action_t action; - action.code = ACTION_BACKLIGHT_INCREASE(); - return action; - } else if (keycode == BL_TOGG) { - action_t action; - action.code = ACTION_BACKLIGHT_TOGGLE(); - return action; - } else if (keycode == BL_STEP) { - action_t action; - action.code = ACTION_BACKLIGHT_STEP(); - return action; -#endif - } else if (keycode == RESET) { // RESET is 0x5000, which is why this is here - clear_keyboard(); - #ifdef AUDIO_ENABLE - play_notes(&goodbye, 5, false); - #endif - _delay_ms(250); - #ifdef ATREUS_ASTAR - *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific - #endif - bootloader_jump(); - return; - } else if (keycode == DEBUG) { // DEBUG is 0x5001 - // TODO: Does this actually work? - print("\nDEBUG: enabled.\n"); - debug_enable = true; - return; - } else if (keycode >= 0x5000 && keycode < 0x6000) { - // Layer movement shortcuts - // See .h to see constraints/usage - int type = (keycode >> 0x8) & 0xF; - if (type == 0x1) { - // Layer set "GOTO" - int when = (keycode >> 0x4) & 0x3; - int layer = keycode & 0xF; - action_t action; - action.code = ACTION_LAYER_SET(layer, when); - return action; - } else if (type == 0x2) { - // Momentary layer - int layer = keycode & 0xFF; - action_t action; - action.code = ACTION_LAYER_MOMENTARY(layer); - return action; - } else if (type == 0x3) { - // Set default layer - int layer = keycode & 0xFF; - action_t action; - action.code = ACTION_DEFAULT_LAYER_SET(layer); - return action; - } else if (type == 0x4) { - // Set default layer - int layer = keycode & 0xFF; - action_t action; - action.code = ACTION_LAYER_TOGGLE(layer); - return action; - } -#ifdef MIDI_ENABLE - } else if (keycode >= 0x6000 && keycode < 0x7000) { - action_t action; - action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8); - return action; -#endif - } else if (keycode >= 0x7000 && keycode < 0x8000) { - action_t action; - action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); - return action; - } else if (keycode >= 0x8000 && keycode < 0x9000) { - action_t action; - action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); - return action; -#ifdef UNICODE_ENABLE - } else if (keycode >= 0x8000000) { - action_t action; - uint16_t unicode = keycode & ~(0x8000); - action.code = ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8); - return action; -#endif - } else { - - } - switch (keycode) { case KC_FN0 ... KC_FN31: return keymap_fn_to_action(keycode); -#ifdef BOOTMAGIC_ENABLE case KC_CAPSLOCK: case KC_LOCKING_CAPS: if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) { @@ -224,7 +110,6 @@ action_t action_for_key(uint8_t layer, keypos_t key) return keycode_to_action(KC_BSLASH); } return keycode_to_action(KC_BSPACE); -#endif default: return keycode_to_action(keycode); } @@ -265,6 +150,143 @@ static action_t keycode_to_action(uint16_t keycode) case KC_TRNS: action.code = ACTION_TRANSPARENT; break; + case 0x0100 ... 0x1FFF: ; + // Has a modifier + // Split it up + action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key + break; + case 0x2000 ... 0x2FFF: + // Is a shortcut for function layer, pull last 12bits + // This means we have 4,096 FN macros at our disposal + return keymap_func_to_action(keycode & 0xFFF); + break; + case 0x3000 ... 0x3FFF: ; + // When the code starts with 3, it's an action macro. + action.code = ACTION_MACRO(keycode & 0xFF); + break; + #ifdef BACKLIGHT_ENABLE + case BL_0 ... BL_15: + action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F); + break; + case BL_DEC: + action.code = ACTION_BACKLIGHT_DECREASE(); + break; + case BL_INC: + action.code = ACTION_BACKLIGHT_INCREASE(); + break; + case BL_TOGG: + action.code = ACTION_BACKLIGHT_TOGGLE(); + break; + case BL_STEP: + action.code = ACTION_BACKLIGHT_STEP(); + break; + #endif + case RESET: ; // RESET is 0x5000, which is why this is here + clear_keyboard(); + #ifdef AUDIO_ENABLE + stop_all_notes(); + play_goodbye_tone(); + #endif + _delay_ms(250); + #ifdef ATREUS_ASTAR + *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific + #endif + bootloader_jump(); + break; + case DEBUG: ; // DEBUG is 0x5001 + print("\nDEBUG: enabled.\n"); + debug_enable = true; + break; + case 0x5002 ... 0x50FF: + // MAGIC actions (BOOTMAGIC without the boot) + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + /* keymap config */ + keymap_config.raw = eeconfig_read_keymap(); + if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) { + keymap_config.swap_control_capslock = 1; + } else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) { + keymap_config.capslock_to_control = 1; + } else if (keycode == MAGIC_SWAP_LALT_LGUI) { + keymap_config.swap_lalt_lgui = 1; + } else if (keycode == MAGIC_SWAP_RALT_RGUI) { + keymap_config.swap_ralt_rgui = 1; + } else if (keycode == MAGIC_NO_GUI) { + keymap_config.no_gui = 1; + } else if (keycode == MAGIC_SWAP_GRAVE_ESC) { + keymap_config.swap_grave_esc = 1; + } else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) { + keymap_config.swap_backslash_backspace = 1; + } else if (keycode == MAGIC_HOST_NKRO) { + keymap_config.nkro = 1; + } else if (keycode == MAGIC_SWAP_ALT_GUI) { + keymap_config.swap_lalt_lgui = 1; + keymap_config.swap_ralt_rgui = 1; + } + /* UNs */ + else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) { + keymap_config.swap_control_capslock = 0; + } else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) { + keymap_config.capslock_to_control = 0; + } else if (keycode == MAGIC_UNSWAP_LALT_LGUI) { + keymap_config.swap_lalt_lgui = 0; + } else if (keycode == MAGIC_UNSWAP_RALT_RGUI) { + keymap_config.swap_ralt_rgui = 0; + } else if (keycode == MAGIC_UNNO_GUI) { + keymap_config.no_gui = 0; + } else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) { + keymap_config.swap_grave_esc = 0; + } else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) { + keymap_config.swap_backslash_backspace = 0; + } else if (keycode == MAGIC_UNHOST_NKRO) { + keymap_config.nkro = 0; + } else if (keycode == MAGIC_UNSWAP_ALT_GUI) { + keymap_config.swap_lalt_lgui = 0; + keymap_config.swap_ralt_rgui = 0; + } + eeconfig_update_keymap(keymap_config.raw); + break; + case 0x5100 ... 0x5FFF: ; + // Layer movement shortcuts + // See .h to see constraints/usage + int type = (keycode >> 0x8) & 0xF; + if (type == 0x1) { + // Layer set "GOTO" + int when = (keycode >> 0x4) & 0x3; + int layer = keycode & 0xF; + action.code = ACTION_LAYER_SET(layer, when); + } else if (type == 0x2) { + // Momentary layer + int layer = keycode & 0xFF; + action.code = ACTION_LAYER_MOMENTARY(layer); + } else if (type == 0x3) { + // Set default layer + int layer = keycode & 0xFF; + action.code = ACTION_DEFAULT_LAYER_SET(layer); + } else if (type == 0x4) { + // Set default layer + int layer = keycode & 0xFF; + action.code = ACTION_LAYER_TOGGLE(layer); + } + break; + #ifdef MIDI_ENABLE + case 0x6000 ... 0x6FFF: + action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8); + break; + #endif + case 0x7000 ... 0x7FFF: + action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); + break; + case 0x8000 ... 0x8FFF: + action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); + break; + #ifdef UNICODE_ENABLE + case 0x8000000 ... 0x8FFFFFF: + uint16_t unicode = keycode & ~(0x8000); + action.code = ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8); + break; + #endif default: action.code = ACTION_NO; break; @@ -276,7 +298,7 @@ static action_t keycode_to_action(uint16_t keycode) /* translates key to keycode */ uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) { - // Read entire word (16bits) + // Read entire word (16bits) return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]); } @@ -288,6 +310,14 @@ action_t keymap_fn_to_action(uint16_t keycode) action_t keymap_func_to_action(uint16_t keycode) { - // For FUNC without 8bit limit + // For FUNC without 8bit limit return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) }; } + +void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) { + if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { + layer_on(layer3); + } else { + layer_off(layer3); + } +} diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 3db40772..0ede0296 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -30,7 +30,6 @@ along with this program. If not, see . // #include "print.h" #include "debug.h" -#ifdef BOOTMAGIC_ENABLE /* NOTE: Not portable. Bit field order depends on implementation */ typedef union { uint16_t raw; @@ -45,8 +44,6 @@ typedef union { bool nkro:1; }; } keymap_config_t; -keymap_config_t keymap_config; -#endif /* translates key to keycode */ @@ -168,6 +165,30 @@ extern const uint16_t fn_actions[]; #define RESET 0x5000 #define DEBUG 0x5001 +// MAGIC keycodes +#define MAGIC_SWAP_CONTROL_CAPSLOCK 0x5002 +#define MAGIC_UNSWAP_CONTROL_CAPSLOCK 0x5003 +#define MAGIC_CAPSLOCK_TO_CONTROL 0x5004 +#define MAGIC_UNCAPSLOCK_TO_CONTROL 0x5005 +#define MAGIC_SWAP_LALT_LGUI 0x5006 +#define MAGIC_UNSWAP_LALT_LGUI 0x5007 +#define MAGIC_SWAP_RALT_RGUI 0x5008 +#define MAGIC_UNSWAP_RALT_RGUI 0x5009 +#define MAGIC_NO_GUI 0x500a +#define MAGIC_UNNO_GUI 0x500b +#define MAGIC_SWAP_GRAVE_ESC 0x500c +#define MAGIC_UNSWAP_GRAVE_ESC 0x500d +#define MAGIC_SWAP_BACKSLASH_BACKSPACE 0x500e +#define MAGIC_UNSWAP_BACKSLASH_BACKSPACE 0x500f +#define MAGIC_HOST_NKRO 0x5010 +#define MAGIC_UNHOST_NKRO 0x5011 +#define MAGIC_SWAP_ALT_GUI 0x5012 +#define MAGIC_UNSWAP_ALT_GUI 0x5013 + +#define AG_SWAP MAGIC_SWAP_ALT_GUI +#define AG_NORM MAGIC_UNSWAP_ALT_GUI + + // GOTO layer - 16 layers max // when: // ON_PRESS = 1 @@ -184,8 +205,6 @@ extern const uint16_t fn_actions[]; // Toggle to layer - 256 layer max #define TG(layer) (layer | 0x5400) -#define MIDI(n) (n | 0x6000) - // M-od, T-ap - 256 keycode max #define MT(mod, kc) (kc | 0x7000 | ((mod & 0xF) << 8)) #define CTL_T(kc) MT(0x1, kc) @@ -194,7 +213,7 @@ extern const uint16_t fn_actions[]; #define GUI_T(kc) MT(0x8, kc) #define C_S_T(kc) MT(0x3, kc) // Control + Shift e.g. for gnome-terminal #define MEH_T(kc) MT(0x7, kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl -#define LCAG_T(kc) MT(0xD, kc) // Left control alt and gui +#define LCAG_T(kc) MT(0xD, kc) // Left control alt and gui #define ALL_T(kc) MT(0xF, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ // Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap @@ -210,5 +229,10 @@ extern const uint16_t fn_actions[]; #define UNICODE(n) (n | 0x8000) #define UC(n) UNICODE(n) +// For tri-layer +void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); +#define IS_LAYER_ON(layer) (layer_state & (1UL << (layer))) +#define IS_LAYER_OFF(layer) (~layer_state & (1UL << (layer))) + #endif diff --git a/quantum/keymap_extras/keymap_german_osx.h b/quantum/keymap_extras/keymap_german_osx.h index d0b77fb8..ee725bad 100644 --- a/quantum/keymap_extras/keymap_german_osx.h +++ b/quantum/keymap_extras/keymap_german_osx.h @@ -85,8 +85,8 @@ #define DE_OSX_UNDS LSFT(DE_OSX_MINS) // _ // Alt-ed characters -#define DE_OSX_SQ2 LALT(KC_2) // ² -#define DE_OSX_SQ3 LALT(KC_3) // ³ +//#define DE_OSX_SQ2 LALT(KC_2) // ² +//#define DE_OSX_SQ3 LALT(KC_3) // ³ #define DE_OSX_LCBR LALT(KC_8) // { #define DE_OSX_LBRC LALT(KC_5) // [ #define DE_OSX_RBRC LALT(KC_6) // ] diff --git a/quantum/keymap_extras/keymap_plover.h b/quantum/keymap_extras/keymap_plover.h new file mode 100644 index 00000000..98e57ab7 --- /dev/null +++ b/quantum/keymap_extras/keymap_plover.h @@ -0,0 +1,32 @@ +#ifndef KEYMAP_PLOVER_H +#define KEYMAP_PLOVER_H + +#include "keymap_common.h" + +#define PV_NUM KC_1 +#define PV_LS KC_Q +#define PV_LT KC_W +#define PV_LP KC_E +#define PV_LH KC_R +#define PV_LK KC_S +#define PV_LW KC_D +#define PV_LR KC_F + +#define PV_STAR KC_Y +#define PV_RF KC_U +#define PV_RP KC_I +#define PV_RL KC_O +#define PV_RT KC_P +#define PV_RD KC_LBRC +#define PV_RR KC_J +#define PV_RB KC_K +#define PV_RG KC_L +#define PV_RS KC_SCLN +#define PV_RZ KC_QUOT + +#define PV_A KC_C +#define PV_O KC_V +#define PV_E KC_N +#define PV_U KC_M + +#endif diff --git a/quantum/keymap_midi.h b/quantum/keymap_midi.h index a89420ce..795f2638 100644 --- a/quantum/keymap_midi.h +++ b/quantum/keymap_midi.h @@ -20,7 +20,7 @@ along with this program. If not, see . #include -#define MIDI 0x6000 +#define MIDI(n) ((n) | 0x6000) #define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000 #define CHNL(note, channel) (note + (channel << 8)) diff --git a/quantum/led.c b/quantum/led.c index 9cdb8a5c..208e348f 100644 --- a/quantum/led.c +++ b/quantum/led.c @@ -24,6 +24,7 @@ void led_set_kb(uint8_t usb_led) { } +__attribute__ ((weak)) void led_set(uint8_t usb_led) { diff --git a/quantum/quantum.mk b/quantum/quantum.mk index de93af7e..83c4f1d1 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -23,19 +23,19 @@ ifndef CUSTOM_MATRIX SRC += $(QUANTUM_DIR)/matrix.c endif -ifdef MIDI_ENABLE +ifeq ($(strip $(MIDI_ENABLE)), yes) SRC += $(QUANTUM_DIR)/keymap_midi.c endif -ifdef AUDIO_ENABLE - SRC += $(QUANTUM_DIR)/audio.c +ifeq ($(strip $(AUDIO_ENABLE)), yes) + SRC += $(QUANTUM_DIR)/audio/audio.c $(QUANTUM_DIR)/audio/voices.c endif -ifdef UNICODE_ENABLE +ifeq ($(strip $(UNICODE_ENABLE)), yes) SRC += $(QUANTUM_DIR)/keymap_unicode.c endif -ifdef RGBLIGHT_ENABLE +ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) SRC += $(QUANTUM_DIR)/light_ws2812.c SRC += $(QUANTUM_DIR)/rgblight.c OPT_DEFS += -DRGBLIGHT_ENABLE @@ -46,6 +46,8 @@ endif # Search Path VPATH += $(TOP_DIR)/$(QUANTUM_DIR) +VPATH += $(TOP_DIR)/$(QUANTUM_DIR)/keymap_extras +VPATH += $(TOP_DIR)/$(QUANTUM_DIR)/audio include $(TMK_DIR)/protocol/lufa.mk diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 2215cf5c..8c9ad773 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c @@ -107,17 +107,17 @@ void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) { uint32_t eeconfig_read_rgblight(void) { return eeprom_read_dword(EECONFIG_RGBLIGHT); } -void eeconfig_write_rgblight(uint32_t val) { - eeprom_write_dword(EECONFIG_RGBLIGHT, val); +void eeconfig_update_rgblight(uint32_t val) { + eeprom_update_dword(EECONFIG_RGBLIGHT, val); } -void eeconfig_write_rgblight_default(void) { - dprintf("eeconfig_write_rgblight_default\n"); +void eeconfig_update_rgblight_default(void) { + dprintf("eeconfig_update_rgblight_default\n"); rgblight_config.enable = 1; rgblight_config.mode = 1; rgblight_config.hue = 200; rgblight_config.sat = 204; rgblight_config.val = 204; - eeconfig_write_rgblight(rgblight_config.raw); + eeconfig_update_rgblight(rgblight_config.raw); } void eeconfig_debug_rgblight(void) { dprintf("rgblight_config eprom\n"); @@ -136,12 +136,12 @@ void rgblight_init(void) { if (!eeconfig_is_enabled()) { dprintf("rgblight_init eeconfig is not enabled.\n"); eeconfig_init(); - eeconfig_write_rgblight_default(); + eeconfig_update_rgblight_default(); } rgblight_config.raw = eeconfig_read_rgblight(); if (!rgblight_config.mode) { dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n"); - eeconfig_write_rgblight_default(); + eeconfig_update_rgblight_default(); rgblight_config.raw = eeconfig_read_rgblight(); } eeconfig_debug_rgblight(); // display current eeprom values @@ -189,8 +189,8 @@ void rgblight_mode(uint8_t mode) { } else { rgblight_config.mode = mode; } - eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight mode: %u\n", rgblight_config.mode); + eeconfig_update_rgblight(rgblight_config.raw); + xprintf("rgblight mode: %u\n", rgblight_config.mode); if (rgblight_config.mode == 1) { rgblight_timer_disable(); } else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) { @@ -206,8 +206,8 @@ void rgblight_mode(uint8_t mode) { void rgblight_toggle(void) { rgblight_config.enable ^= 1; - eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable); + eeconfig_update_rgblight(rgblight_config.raw); + xprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable); if (rgblight_config.enable) { rgblight_mode(rgblight_config.mode); } else { @@ -299,8 +299,8 @@ void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val){ rgblight_config.hue = hue; rgblight_config.sat = sat; rgblight_config.val = val; - eeconfig_write_rgblight(rgblight_config.raw); - dprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); + eeconfig_update_rgblight(rgblight_config.raw); + xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val); } } diff --git a/quantum/rgblight.h b/quantum/rgblight.h index 9e156232..37e20757 100644 --- a/quantum/rgblight.h +++ b/quantum/rgblight.h @@ -66,8 +66,8 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b); #define EECONFIG_RGBLIGHT (uint8_t *)7 uint32_t eeconfig_read_rgblight(void); -void eeconfig_write_rgblight(uint32_t val); -void eeconfig_write_rgblight_default(void); +void eeconfig_update_rgblight(uint32_t val); +void eeconfig_update_rgblight_default(void); void eeconfig_debug_rgblight(void); void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1); diff --git a/quantum/tools/README.md b/quantum/tools/README.md new file mode 100644 index 00000000..07021442 --- /dev/null +++ b/quantum/tools/README.md @@ -0,0 +1,6 @@ +`eeprom_reset.hex` is to reset the eeprom on the Atmega32u4, like this: + + dfu-programmer atmega32u4 erase + dfu-programmer atmega32u4 flash --eeprom eeprom-reset.bin + + You'll need to reflash afterwards, because DFU requires the flash to be erased before messing with the eeprom. \ No newline at end of file diff --git a/quantum/tools/eeprom_reset.hex b/quantum/tools/eeprom_reset.hex new file mode 100644 index 00000000..a8a75389 --- /dev/null +++ b/quantum/tools/eeprom_reset.hex @@ -0,0 +1,9 @@ +:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0 +:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 +:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0 +:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 +:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0 +:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 +:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90 +:00000001FF diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 89c366f5..9cb2eb8e 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -17,66 +17,70 @@ SRC += $(COMMON_DIR)/host.c \ # Option modules -ifdef BOOTMAGIC_ENABLE +ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes) SRC += $(COMMON_DIR)/bootmagic.c SRC += $(COMMON_DIR)/avr/eeconfig.c OPT_DEFS += -DBOOTMAGIC_ENABLE +else + SRC += $(COMMON_DIR)/magic.c + SRC += $(COMMON_DIR)/avr/eeconfig.c endif -ifdef MOUSEKEY_ENABLE +ifeq ($(strip $(MOUSEKEY_ENABLE)), yes) SRC += $(COMMON_DIR)/mousekey.c OPT_DEFS += -DMOUSEKEY_ENABLE OPT_DEFS += -DMOUSE_ENABLE endif -ifdef EXTRAKEY_ENABLE +ifeq ($(strip $(EXTRAKEY_ENABLE)), yes) OPT_DEFS += -DEXTRAKEY_ENABLE endif -ifdef CONSOLE_ENABLE +ifeq ($(strip $(CONSOLE_ENABLE)), yes) OPT_DEFS += -DCONSOLE_ENABLE else OPT_DEFS += -DNO_PRINT OPT_DEFS += -DNO_DEBUG endif -ifdef COMMAND_ENABLE +ifeq ($(strip $(COMMAND_ENABLE)), yes) SRC += $(COMMON_DIR)/command.c OPT_DEFS += -DCOMMAND_ENABLE endif -ifdef NKRO_ENABLE +ifeq ($(strip $(NKRO_ENABLE)), yes) OPT_DEFS += -DNKRO_ENABLE endif -ifdef MIDI_ENABLE +ifeq ($(strip $(MIDI_ENABLE)), yes) OPT_DEFS += -DMIDI_ENABLE endif -ifdef AUDIO_ENABLE +ifeq ($(strip $(AUDIO_ENABLE)), yes) OPT_DEFS += -DAUDIO_ENABLE endif -ifdef USB_6KRO_ENABLE +ifeq ($(strip $(USB_6KRO_ENABLE)), yes) OPT_DEFS += -DUSB_6KRO_ENABLE endif -ifdef SLEEP_LED_ENABLE +ifeq ($(strip $(SLEEP_LED_ENABLE)), yes) SRC += $(COMMON_DIR)/sleep_led.c OPT_DEFS += -DSLEEP_LED_ENABLE OPT_DEFS += -DNO_SUSPEND_POWER_DOWN endif -ifdef BACKLIGHT_ENABLE +ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) SRC += $(COMMON_DIR)/backlight.c + SRC += $(COMMON_DIR)/avr/eeconfig.c OPT_DEFS += -DBACKLIGHT_ENABLE endif -ifdef BLUETOOTH_ENABLE +ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) OPT_DEFS += -DBLUETOOTH_ENABLE endif -ifdef KEYMAP_SECTION_ENABLE +ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes) OPT_DEFS += -DKEYMAP_SECTION_ENABLE ifeq ($(strip $(MCU)),atmega32u2) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index f9e6c17d..0162fbd6 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -27,11 +27,11 @@ along with this program. If not, see . #include "action_util.h" #include "action.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif void action_exec(keyevent_t event) diff --git a/tmk_core/common/action_code.h b/tmk_core/common/action_code.h index 4fe9c1d5..2b0b0b07 100644 --- a/tmk_core/common/action_code.h +++ b/tmk_core/common/action_code.h @@ -301,7 +301,7 @@ enum backlight_opt { #define ACTION_BACKLIGHT_DECREASE() ACTION(ACT_BACKLIGHT, BACKLIGHT_DECREASE << 8) #define ACTION_BACKLIGHT_TOGGLE() ACTION(ACT_BACKLIGHT, BACKLIGHT_TOGGLE << 8) #define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8) -#define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | level) +#define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | (level)) /* Command */ #define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) /* Function */ diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index fc721a73..845fbbb2 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c @@ -4,14 +4,14 @@ #include "util.h" #include "action_layer.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif -/* +/* * Default Layer State */ uint32_t default_layer_state = 0; @@ -52,7 +52,7 @@ void default_layer_xor(uint32_t state) #ifndef NO_ACTION_LAYER -/* +/* * Keymap Layer State */ uint32_t layer_state = 0; @@ -111,7 +111,7 @@ void layer_debug(void) #endif #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) -uint8_t source_layers_cache[MAX_LAYER_BITS][(MATRIX_ROWS * MATRIX_COLS + 7) / 8] = {0}; +uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {0}; void update_source_layers_cache(keypos_t key, uint8_t layer) { @@ -120,9 +120,9 @@ void update_source_layers_cache(keypos_t key, uint8_t layer) const uint8_t storage_bit = key_number % 8; for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) { - source_layers_cache[bit_number][storage_row] ^= + source_layers_cache[storage_row][bit_number] ^= (-((layer & (1U << bit_number)) != 0) - ^ source_layers_cache[bit_number][storage_row]) + ^ source_layers_cache[storage_row][bit_number]) & (1U << storage_bit); } } @@ -136,7 +136,7 @@ uint8_t read_source_layers_cache(keypos_t key) for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) { layer |= - ((source_layers_cache[bit_number][storage_row] + ((source_layers_cache[storage_row][bit_number] & (1U << storage_bit)) != 0) << bit_number; } diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h index 3a4b1e33..025cf542 100644 --- a/tmk_core/common/action_layer.h +++ b/tmk_core/common/action_layer.h @@ -68,6 +68,7 @@ void layer_xor(uint32_t state); #define layer_and(state) #define layer_xor(state) #define layer_debug() + #endif /* pressed actions cache */ diff --git a/tmk_core/common/action_macro.c b/tmk_core/common/action_macro.c index 7726b119..cc78c823 100644 --- a/tmk_core/common/action_macro.c +++ b/tmk_core/common/action_macro.c @@ -19,11 +19,11 @@ along with this program. If not, see . #include "action_macro.h" #include "wait.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif #ifndef NO_ACTION_MACRO diff --git a/tmk_core/common/action_tapping.c b/tmk_core/common/action_tapping.c index 826c2330..6b6fa1df 100644 --- a/tmk_core/common/action_tapping.c +++ b/tmk_core/common/action_tapping.c @@ -6,11 +6,11 @@ #include "keycode.h" #include "timer.h" -#ifdef DEBUG_ACTION +//#ifdef DEBUG_ACTION #include "debug.h" -#else -#include "nodebug.h" -#endif +//#else +//#include "nodebug.h" +//#endif #ifndef NO_ACTION_TAPPING @@ -139,7 +139,7 @@ bool process_tapping(keyrecord_t *keyp) if (event.pressed) { tapping_key.tap.interrupted = true; } - // enqueue + // enqueue return false; } } @@ -324,6 +324,7 @@ bool waiting_buffer_typed(keyevent_t event) return false; } +__attribute__((unused)) bool waiting_buffer_has_anykey_pressed(void) { for (uint8_t i = waiting_buffer_tail; i != waiting_buffer_head; i = (i + 1) % WAITING_BUFFER_SIZE) { diff --git a/tmk_core/common/avr/eeconfig.c b/tmk_core/common/avr/eeconfig.c index 5bd47dc6..c5391f5c 100644 --- a/tmk_core/common/avr/eeconfig.c +++ b/tmk_core/common/avr/eeconfig.c @@ -5,24 +5,27 @@ void eeconfig_init(void) { - eeprom_write_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); - eeprom_write_byte(EECONFIG_DEBUG, 0); - eeprom_write_byte(EECONFIG_DEFAULT_LAYER, 0); - eeprom_write_byte(EECONFIG_KEYMAP, 0); - eeprom_write_byte(EECONFIG_MOUSEKEY_ACCEL, 0); + eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); + eeprom_update_byte(EECONFIG_DEBUG, 0); + eeprom_update_byte(EECONFIG_DEFAULT_LAYER, 0); + eeprom_update_byte(EECONFIG_KEYMAP, 0); + eeprom_update_byte(EECONFIG_MOUSEKEY_ACCEL, 0); #ifdef BACKLIGHT_ENABLE - eeprom_write_byte(EECONFIG_BACKLIGHT, 0); + eeprom_update_byte(EECONFIG_BACKLIGHT, 0); +#endif +#ifdef AUDIO_ENABLE + eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default #endif } void eeconfig_enable(void) { - eeprom_write_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); + eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER); } void eeconfig_disable(void) { - eeprom_write_word(EECONFIG_MAGIC, 0xFFFF); + eeprom_update_word(EECONFIG_MAGIC, 0xFFFF); } bool eeconfig_is_enabled(void) @@ -31,15 +34,20 @@ bool eeconfig_is_enabled(void) } uint8_t eeconfig_read_debug(void) { return eeprom_read_byte(EECONFIG_DEBUG); } -void eeconfig_write_debug(uint8_t val) { eeprom_write_byte(EECONFIG_DEBUG, val); } +void eeconfig_update_debug(uint8_t val) { eeprom_update_byte(EECONFIG_DEBUG, val); } uint8_t eeconfig_read_default_layer(void) { return eeprom_read_byte(EECONFIG_DEFAULT_LAYER); } -void eeconfig_write_default_layer(uint8_t val) { eeprom_write_byte(EECONFIG_DEFAULT_LAYER, val); } +void eeconfig_update_default_layer(uint8_t val) { eeprom_update_byte(EECONFIG_DEFAULT_LAYER, val); } uint8_t eeconfig_read_keymap(void) { return eeprom_read_byte(EECONFIG_KEYMAP); } -void eeconfig_write_keymap(uint8_t val) { eeprom_write_byte(EECONFIG_KEYMAP, val); } +void eeconfig_update_keymap(uint8_t val) { eeprom_update_byte(EECONFIG_KEYMAP, val); } #ifdef BACKLIGHT_ENABLE uint8_t eeconfig_read_backlight(void) { return eeprom_read_byte(EECONFIG_BACKLIGHT); } -void eeconfig_write_backlight(uint8_t val) { eeprom_write_byte(EECONFIG_BACKLIGHT, val); } +void eeconfig_update_backlight(uint8_t val) { eeprom_update_byte(EECONFIG_BACKLIGHT, val); } +#endif + +#ifdef AUDIO_ENABLE +uint8_t eeconfig_read_audio(void) { return eeprom_read_byte(EECONFIG_AUDIO); } +void eeconfig_update_audio(uint8_t val) { eeprom_update_byte(EECONFIG_AUDIO, val); } #endif diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c index c07c2801..49806801 100644 --- a/tmk_core/common/avr/suspend.c +++ b/tmk_core/common/avr/suspend.c @@ -9,10 +9,16 @@ #include "suspend.h" #include "timer.h" #include "led.h" + #ifdef PROTOCOL_LUFA -#include "lufa.h" + #include "lufa.h" #endif +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif /* AUDIO_ENABLE */ + + #define wdt_intr_enable(value) \ __asm__ __volatile__ ( \ @@ -72,6 +78,11 @@ static void power_down(uint8_t wdto) // Turn off LED indicators led_set(0); + #ifdef AUDIO_ENABLE + // This sometimes disables the start-up noise, so it's been disabled + // stop_all_notes(); + #endif /* AUDIO_ENABLE */ + // TODO: more power saving // See PicoPower application note // - I/O port input with pullup diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c index 558ad9b0..2f6fc1cd 100644 --- a/tmk_core/common/backlight.c +++ b/tmk_core/common/backlight.c @@ -37,7 +37,7 @@ void backlight_increase(void) { backlight_config.level++; backlight_config.enable = 1; - eeconfig_write_backlight(backlight_config.raw); + eeconfig_update_backlight(backlight_config.raw); } dprintf("backlight increase: %u\n", backlight_config.level); backlight_set(backlight_config.level); @@ -49,7 +49,7 @@ void backlight_decrease(void) { backlight_config.level--; backlight_config.enable = !!backlight_config.level; - eeconfig_write_backlight(backlight_config.raw); + eeconfig_update_backlight(backlight_config.raw); } dprintf("backlight decrease: %u\n", backlight_config.level); backlight_set(backlight_config.level); @@ -58,7 +58,7 @@ void backlight_decrease(void) void backlight_toggle(void) { backlight_config.enable ^= 1; - eeconfig_write_backlight(backlight_config.raw); + eeconfig_update_backlight(backlight_config.raw); dprintf("backlight toggle: %u\n", backlight_config.enable); backlight_set(backlight_config.enable ? backlight_config.level : 0); } @@ -71,7 +71,7 @@ void backlight_step(void) backlight_config.level = 0; } backlight_config.enable = !!backlight_config.level; - eeconfig_write_backlight(backlight_config.raw); + eeconfig_update_backlight(backlight_config.raw); dprintf("backlight step: %u\n", backlight_config.level); backlight_set(backlight_config.level); } @@ -80,6 +80,6 @@ void backlight_level(uint8_t level) { backlight_config.level ^= level; backlight_config.enable = !!backlight_config.level; - eeconfig_write_backlight(backlight_config.raw); + eeconfig_update_backlight(backlight_config.raw); backlight_set(backlight_config.level); } diff --git a/tmk_core/common/bootmagic.c b/tmk_core/common/bootmagic.c index b002a585..2c1b1adf 100644 --- a/tmk_core/common/bootmagic.c +++ b/tmk_core/common/bootmagic.c @@ -52,7 +52,7 @@ void bootmagic(void) debug_config.enable = !debug_config.enable; } } - eeconfig_write_debug(debug_config.raw); + eeconfig_update_debug(debug_config.raw); /* keymap config */ keymap_config.raw = eeconfig_read_keymap(); @@ -80,7 +80,7 @@ void bootmagic(void) if (bootmagic_scan_keycode(BOOTMAGIC_HOST_NKRO)) { keymap_config.nkro = !keymap_config.nkro; } - eeconfig_write_keymap(keymap_config.raw); + eeconfig_update_keymap(keymap_config.raw); #ifdef NKRO_ENABLE keyboard_nkro = keymap_config.nkro; @@ -97,7 +97,7 @@ void bootmagic(void) if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_6)) { default_layer |= (1<<6); } if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_7)) { default_layer |= (1<<7); } if (default_layer) { - eeconfig_write_default_layer(default_layer); + eeconfig_update_default_layer(default_layer); default_layer_set((uint32_t)default_layer); } else { default_layer = eeconfig_read_default_layer(); diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c index b4cd3ca5..f06abaf7 100644 --- a/tmk_core/common/command.c +++ b/tmk_core/common/command.c @@ -49,6 +49,10 @@ along with this program. If not, see . # include "usbdrv.h" #endif +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif /* AUDIO_ENABLE */ + static bool command_common(uint8_t code); static void command_common_help(void); @@ -122,7 +126,7 @@ static void command_common_help(void) STR(MAGIC_KEY_VERSION ) ": Version\n" STR(MAGIC_KEY_STATUS ) ": Status\n" STR(MAGIC_KEY_CONSOLE ) ": Activate Console Mode\n" - + #if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM STR(MAGIC_KEY_LAYER0 ) ": Switch to Layer 0\n" STR(MAGIC_KEY_LAYER1 ) ": Switch to Layer 1\n" @@ -136,11 +140,11 @@ static void command_common_help(void) STR(MAGIC_KEY_LAYER9 ) ": Switch to Layer 9\n" #endif -#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS "F1-F10: Switch to Layer 0-9 (F10 = L0)\n" #endif -#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS "0-9: Switch to Layer 0-9\n" #endif @@ -251,6 +255,7 @@ static void print_status(void) #ifdef BOOTMAGIC_ENABLE static void print_eeconfig(void) { +#ifndef NO_PRINT print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n"); debug_config_t dc; @@ -279,9 +284,12 @@ static void print_eeconfig(void) print("backlight_config.raw: "); print_hex8(bc.raw); print("\n"); print(".enable: "); print_dec(bc.enable); print("\n"); print(".level: "); print_dec(bc.level); print("\n"); -#endif +#endif /* BACKLIGHT_ENABLE */ + +#endif /* !NO_PRINT */ + } -#endif +#endif /* BOOTMAGIC_ENABLE */ static bool command_common(uint8_t code) { @@ -305,7 +313,7 @@ static bool command_common(uint8_t code) #ifdef BOOTMAGIC_ENABLE // print stored eeprom config - case MAGIC_KC(MAGIC_KEY_EEPROM): + case MAGIC_KC(MAGIC_KEY_EEPROM): print("eeconfig:\n"); print_eeconfig(); break; @@ -348,6 +356,9 @@ static bool command_common(uint8_t code) case MAGIC_KC(MAGIC_KEY_BOOTLOADER): clear_keyboard(); // clear to prevent stuck keys print("\n\nJumping to bootloader... "); + #ifdef AUDIO_ENABLE + play_goodbye_tone(); + #endif _delay_ms(1000); bootloader_jump(); // not return break; @@ -369,7 +380,7 @@ static bool command_common(uint8_t code) break; // debug matrix toggle - case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX): + case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX): debug_matrix = !debug_matrix; if (debug_matrix) { print("\nmatrix: on\n"); @@ -380,7 +391,7 @@ static bool command_common(uint8_t code) break; // debug keyboard toggle - case MAGIC_KC(MAGIC_KEY_DEBUG_KBD): + case MAGIC_KC(MAGIC_KEY_DEBUG_KBD): debug_keyboard = !debug_keyboard; if (debug_keyboard) { print("\nkeyboard: on\n"); @@ -551,6 +562,7 @@ static uint8_t mousekey_param = 0; static void mousekey_param_print(void) { +#ifndef NO_PRINT print("\n\t- Values -\n"); print("1: delay(*10ms): "); pdec(mk_delay); print("\n"); print("2: interval(ms): "); pdec(mk_interval); print("\n"); @@ -558,6 +570,8 @@ static void mousekey_param_print(void) print("4: time_to_max: "); pdec(mk_time_to_max); print("\n"); print("5: wheel_max_speed: "); pdec(mk_wheel_max_speed); print("\n"); print("6: wheel_time_to_max: "); pdec(mk_wheel_time_to_max); print("\n"); +#endif /* !NO_PRINT */ + } //#define PRINT_SET_VAL(v) print(#v " = "); print_dec(v); print("\n"); @@ -677,7 +691,7 @@ static void mousekey_console_help(void) "pgdown: -10\n" "\n" "speed = delta * max_speed * (repeat / time_to_max)\n"); - xprintf("where delta: cursor=%d, wheel=%d\n" + xprintf("where delta: cursor=%d, wheel=%d\n" "See http://en.wikipedia.org/wiki/Mouse_keys\n", MOUSEKEY_MOVE_DELTA, MOUSEKEY_WHEEL_DELTA); } diff --git a/tmk_core/common/eeconfig.h b/tmk_core/common/eeconfig.h index 3cd1a174..ca47e0d2 100644 --- a/tmk_core/common/eeconfig.h +++ b/tmk_core/common/eeconfig.h @@ -31,6 +31,7 @@ along with this program. If not, see . #define EECONFIG_KEYMAP (uint8_t *)4 #define EECONFIG_MOUSEKEY_ACCEL (uint8_t *)5 #define EECONFIG_BACKLIGHT (uint8_t *)6 +#define EECONFIG_AUDIO (uint8_t *)7 /* debug bit */ @@ -59,17 +60,22 @@ void eeconfig_enable(void); void eeconfig_disable(void); uint8_t eeconfig_read_debug(void); -void eeconfig_write_debug(uint8_t val); +void eeconfig_update_debug(uint8_t val); uint8_t eeconfig_read_default_layer(void); -void eeconfig_write_default_layer(uint8_t val); +void eeconfig_update_default_layer(uint8_t val); uint8_t eeconfig_read_keymap(void); -void eeconfig_write_keymap(uint8_t val); +void eeconfig_update_keymap(uint8_t val); #ifdef BACKLIGHT_ENABLE uint8_t eeconfig_read_backlight(void); -void eeconfig_write_backlight(uint8_t val); +void eeconfig_update_backlight(uint8_t val); +#endif + +#ifdef AUDIO_ENABLE +uint8_t eeconfig_read_audio(void); +void eeconfig_update_audio(uint8_t val); #endif #endif diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 302b3ec8..1d998184 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -27,7 +27,11 @@ along with this program. If not, see . #include "command.h" #include "util.h" #include "sendchar.h" -#include "bootmagic.h" +#ifdef BOOTMAGIC_ENABLE + #include "bootmagic.h" +#else + #include "magic.h" +#endif #include "eeconfig.h" #include "backlight.h" #ifdef MOUSEKEY_ENABLE @@ -86,6 +90,8 @@ void keyboard_init(void) #ifdef BOOTMAGIC_ENABLE bootmagic(); +#else + magic(); #endif #ifdef BACKLIGHT_ENABLE diff --git a/tmk_core/common/keymap.c b/tmk_core/common/keymap.c index 11f4aa8a..8955fc71 100644 --- a/tmk_core/common/keymap.c +++ b/tmk_core/common/keymap.c @@ -22,7 +22,7 @@ along with this program. If not, see . #include "action_macro.h" #include "wait.h" #include "debug.h" - +#include "bootloader.h" static action_t keycode_to_action(uint8_t keycode); @@ -143,6 +143,7 @@ static action_t keycode_to_action(uint8_t keycode) action.code = ACTION_TRANSPARENT; break; case KC_BOOTLOADER: + action.code = ACTION_NO; clear_keyboard(); wait_ms(50); bootloader_jump(); // not return diff --git a/tmk_core/common/keymap.h b/tmk_core/common/keymap.h index e1a6f992..abc9bdb3 100644 --- a/tmk_core/common/keymap.h +++ b/tmk_core/common/keymap.h @@ -22,8 +22,6 @@ along with this program. If not, see . #include #include "action.h" - -#ifdef BOOTMAGIC_ENABLE /* NOTE: Not portable. Bit field order depends on implementation */ typedef union { uint8_t raw; @@ -39,7 +37,6 @@ typedef union { }; } keymap_config_t; keymap_config_t keymap_config; -#endif /* translates key to keycode */ diff --git a/tmk_core/common/magic.c b/tmk_core/common/magic.c new file mode 100644 index 00000000..f21d1346 --- /dev/null +++ b/tmk_core/common/magic.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include "matrix.h" +#include "bootloader.h" +#include "debug.h" +#include "keymap.h" +#include "host.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "magic.h" + +keymap_config_t keymap_config; + +void magic(void) +{ + /* check signature */ + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + + /* debug enable */ + debug_config.raw = eeconfig_read_debug(); + + /* keymap config */ + keymap_config.raw = eeconfig_read_keymap(); + +#ifdef NKRO_ENABLE + keyboard_nkro = keymap_config.nkro; +#endif + + uint8_t default_layer = 0; + default_layer = eeconfig_read_default_layer(); + default_layer_set((uint32_t)default_layer); + +} \ No newline at end of file diff --git a/tmk_core/common/magic.h b/tmk_core/common/magic.h new file mode 100644 index 00000000..3fa2d8b8 --- /dev/null +++ b/tmk_core/common/magic.h @@ -0,0 +1,6 @@ +#ifndef MAGIC_H +#define MAGIC_H + +void magic(void); + +#endif diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h index c0e9e143..4f3dde65 100644 --- a/tmk_core/common/print.h +++ b/tmk_core/common/print.h @@ -2,17 +2,17 @@ /* Very basic print functions, intended to be used with usb_debug_only.c * http://www.pjrc.com/teensy/ * Copyright (c) 2008 PJRC.COM, LLC - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -91,9 +91,9 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t)); #else /* NO_PRINT */ -#define xprintf -#define print -#define println +#define xprintf(fmt, ...) +#define print(s) +#define println(s) #define print_set_sendchar(func) #define print_dec(data) #define print_decs(data) diff --git a/tmk_core/protocol/lufa.mk b/tmk_core/protocol/lufa.mk index 4905760b..9ac6298f 100644 --- a/tmk_core/protocol/lufa.mk +++ b/tmk_core/protocol/lufa.mk @@ -17,7 +17,7 @@ LUFA_SRC = $(LUFA_DIR)/lufa.c \ $(LUFA_DIR)/descriptor.c \ $(LUFA_SRC_USB) -ifdef MIDI_ENABLE +ifeq ($(strip $(MIDI_ENABLE)), yes) LUFA_SRC += $(LUFA_DIR)/midi/midi.c \ $(LUFA_DIR)/midi/midi_device.c \ $(LUFA_DIR)/midi/bytequeue/bytequeue.c \ @@ -25,7 +25,7 @@ ifdef MIDI_ENABLE $(LUFA_SRC_USBCLASS) endif -ifdef BLUETOOTH_ENABLE +ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) LUFA_SRC += $(LUFA_DIR)/bluetooth.c \ $(TMK_DIR)/protocol/serial_uart.c endif diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.c b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.c index f66a483e..58bb3389 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.c +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/BootloaderCDC.c @@ -327,7 +327,7 @@ static void ReadWriteMemoryBlock(const uint8_t Command) else { /* Write the next EEPROM byte from the endpoint */ - eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + eeprom_update_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); /* Increment the address counter after use */ CurrAddress += 2; @@ -581,7 +581,7 @@ static void CDC_Task(void) else if (Command == AVR109_COMMAND_WriteEEPROM) { /* Read the byte from the endpoint and write it to the EEPROM */ - eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + eeprom_update_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); /* Increment the address after use */ CurrAddress += 2; diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/BootloaderDFU.c b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/BootloaderDFU.c index 0385bfc4..00e67326 100644 --- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/BootloaderDFU.c +++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/BootloaderDFU.c @@ -370,7 +370,7 @@ void EVENT_USB_Device_ControlRequest(void) } /* Read the byte from the USB interface and write to to the EEPROM */ - eeprom_write_byte((uint8_t*)StartAddr, Endpoint_Read_8()); + eeprom_update_byte((uint8_t*)StartAddr, Endpoint_Read_8()); /* Adjust counters */ StartAddr++; diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index 5d40dcf7..f03f9a9b 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -1,4 +1,4 @@ -/* +/* * Copyright 2012 Jun Wako * This file is based on: * LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse @@ -152,10 +152,10 @@ static void Console_Task(void) { /* Create a temporary buffer to hold the read in report from the host */ uint8_t ConsoleData[CONSOLE_EPSIZE]; - + /* Read Console Report Data */ Endpoint_Read_Stream_LE(&ConsoleData, sizeof(ConsoleData), NULL); - + /* Process Console Report Data */ //ProcessConsoleHIDReport(ConsoleData); } @@ -183,10 +183,6 @@ static void Console_Task(void) Endpoint_SelectEndpoint(ep); } -#else -static void Console_Task(void) -{ -} #endif @@ -216,7 +212,7 @@ void EVENT_USB_Device_Disconnect(void) print("[D]"); /* For battery powered device */ USB_IsInitialized = false; -/* TODO: This doesn't work. After several plug in/outs can not be enumerated. +/* TODO: This doesn't work. After several plug in/outs can not be enumerated. if (USB_IsInitialized) { USB_Disable(); // Disable all interrupts USB_Controller_Enable(); @@ -313,7 +309,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) #ifdef MIDI_ENABLE ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); - ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); + ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE); #endif } @@ -439,7 +435,7 @@ void EVENT_USB_Device_ControlRequest(void) } /******************************************************************************* - * Host driver + * Host driver ******************************************************************************/ static uint8_t keyboard_leds(void) { @@ -563,7 +559,7 @@ static void send_consumer(uint16_t data) bluefruit_serial_send(0x00); bluefruit_serial_send(0x02); bluefruit_serial_send((bitmap>>8)&0xFF); - bluefruit_serial_send(bitmap&0xFF); + bluefruit_serial_send(bitmap&0xFF); bluefruit_serial_send(0x00); bluefruit_serial_send(0x00); bluefruit_serial_send(0x00);