From 649b33d7783cf3021928534b7ae127e0a89e8807 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 21 Jun 2016 22:39:54 -0400 Subject: Renames keyboard folder to keyboards, adds couple of tmk's fixes (#432) * fixes from tmk's repo * rename keyboard to keyboards --- keyboards/hhkb/Makefile | 86 ++ keyboards/hhkb/README.md | 180 ++++ keyboards/hhkb/config.h | 71 ++ keyboards/hhkb/hhkb.c | 29 + keyboards/hhkb/hhkb.h | 30 + keyboards/hhkb/hhkb_avr.h | 167 ++++ keyboards/hhkb/keymaps/default/compiled.hex | 1381 ++++++++++++++++++++++++++ keyboards/hhkb/keymaps/default/keymap.c | 78 ++ keyboards/hhkb/keymaps/lxol/compiled.hex | 1421 +++++++++++++++++++++++++++ keyboards/hhkb/keymaps/lxol/keymap.c | 208 ++++ keyboards/hhkb/matrix.c | 204 ++++ 11 files changed, 3855 insertions(+) create mode 100644 keyboards/hhkb/Makefile create mode 100644 keyboards/hhkb/README.md create mode 100644 keyboards/hhkb/config.h create mode 100644 keyboards/hhkb/hhkb.c create mode 100644 keyboards/hhkb/hhkb.h create mode 100644 keyboards/hhkb/hhkb_avr.h create mode 100644 keyboards/hhkb/keymaps/default/compiled.hex create mode 100644 keyboards/hhkb/keymaps/default/keymap.c create mode 100644 keyboards/hhkb/keymaps/lxol/compiled.hex create mode 100644 keyboards/hhkb/keymaps/lxol/keymap.c create mode 100644 keyboards/hhkb/matrix.c (limited to 'keyboards/hhkb') diff --git a/keyboards/hhkb/Makefile b/keyboards/hhkb/Makefile new file mode 100644 index 0000000000..53eece3969 --- /dev/null +++ b/keyboards/hhkb/Makefile @@ -0,0 +1,86 @@ + + +# project specific files +SRC = matrix.c + +# 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 + +# as per original hasu settings +OPT_DEFS += -DBOOTLOADER_SIZE=512 + +# 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 +CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB +# 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 + + + +ifndef QUANTUM_DIR + include ../../Makefile +endif + +debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION +debug-on: all + +debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT +debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS)) +debug-off: all diff --git a/keyboards/hhkb/README.md b/keyboards/hhkb/README.md new file mode 100644 index 0000000000..2bfec7aa54 --- /dev/null +++ b/keyboards/hhkb/README.md @@ -0,0 +1,180 @@ +hhkb_qmk keyboard firmware +====================== + +## Quantum MK Firmware + +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 // + BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID + +## Quick aliases to common actions + +Your keymap can include shortcuts to common operations (called "function actions" in tmk). + +### Switching and toggling layers + +`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack. + +`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer). + +`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack. + +### Fun with modifier keys + +* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias +* `RSFT(kc)` - applies right Shift to *kc* +* `LCTL(kc)` - applies left Control to *kc* +* `RCTL(kc)` - applies right Control to *kc* +* `LALT(kc)` - applies left Alt to *kc* +* `RALT(kc)` - applies right Alt to *kc* +* `LGUI(kc)` - applies left GUI (command/win) to *kc* +* `RGUI(kc)` - applies right GUI (command/win) to *kc* + +You can also chain these, like this: + + LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress. + +The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`. + + KC_TILD ~ + KC_EXLM ! + KC_AT @ + KC_HASH # + KC_DLR $ + KC_PERC % + KC_CIRC ^ + KC_AMPR & + KC_ASTR * + KC_LPRN ( + KC_RPRN ) + KC_UNDS _ + KC_PLUS + + KC_LCBR { + KC_RCBR } + KC_PIPE | + KC_COLN : + +`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down. + +These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available): + + * MOD_LCTL + * MOD_LSFT + * MOD_LALT + * MOD_LGUI + +These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped. + +We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact: + + * `CTL_T(kc)` - is LCTL when held and *kc* when tapped + * `SFT_T(kc)` - is LSFT when held and *kc* when tapped + * `ALT_T(kc)` - is LALT when held and *kc* when tapped + * `GUI_T(kc)` - is LGUI when held and *kc* when tapped + * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) + +### Temporarily setting the default layer + +`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does. + +### Remember: These are just aliases + +These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action). + +Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them. + +## Macro shortcuts: Send a whole string when pressing just one key + +Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c). + +```c +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: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes + } + break; + } + return MACRO_NONE; +}; +``` +A macro can include the following commands: + +* I() change interval of stroke in milliseconds. +* D() press key. +* U() release key. +* T() type key(press and release). +* W() wait (milliseconds). +* END end mark. + +So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends. + +Note: Using macros to have your keyboard send passwords for you is a bad idea. + +### 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 "keymap_.h" + +Where is "colemak" or "dvorak". After including this line, you will get access to: + + * `CM_*` for all of the Colemak-equivalent characters + * `DV_*` for all of the Dvorak-equivalent characters + +These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features. + +To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`. + +## Additional language support + +In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `รน` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support). + +## Unicode support + +You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile. + +## Other firmware shortcut keycodes + +* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`) +* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things +* `BL_ON` - turns the backlight on +* `BL_OFF` - turns the backlight off +* `BL_` - sets the backlight to level *n* +* `BL_INC` - increments the backlight level by one +* `BL_DEC` - decrements the backlight level by one +* `BL_TOGG` - toggles the backlight +* `BL_STEP` - steps through the backlight levels + +Enable the backlight from the Makefile. + +## MIDI functionalty + +This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile. + +## Bluetooth functionality + +This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will. + +## Building + +Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. + +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 a file in the keymaps folder named `.c` 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/keyboards/hhkb/config.h b/keyboards/hhkb/config.h new file mode 100644 index 0000000000..ee66e44571 --- /dev/null +++ b/keyboards/hhkb/config.h @@ -0,0 +1,71 @@ +/* +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 0xCAFE +#define DEVICE_VER 0x0104 +#define MANUFACTURER q.m.k +#define PRODUCT HHKB mod +#define DESCRIPTION q.m.k keyboard firmware for HHKB + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 8 + +#define TAPPING_TERM 200 + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +//#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +//#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* + * Feature disable options + * These options are also useful to firmware size reduction. +*/ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/hhkb/hhkb.c b/keyboards/hhkb/hhkb.c new file mode 100644 index 0000000000..6897026c6c --- /dev/null +++ b/keyboards/hhkb/hhkb.c @@ -0,0 +1,29 @@ +#include "hhkb.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)(); + } +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + if (matrix_scan_user) { + (*matrix_scan_user)(); + } +}; diff --git a/keyboards/hhkb/hhkb.h b/keyboards/hhkb/hhkb.h new file mode 100644 index 0000000000..093d7aeabc --- /dev/null +++ b/keyboards/hhkb/hhkb.h @@ -0,0 +1,30 @@ +#ifndef HHKB_H +#define HHKB_H + +#include "matrix.h" +#include "keymap.h" +//#include "backlight.h" +#include + +#define KEYMAP( \ + K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \ + K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \ + K33, K04, K03, K14, K15, K24, K25, K45, K44, K65, K64, K74, K53, \ + K34, K05, K06, K07, K16, K17, K26, K46, K66, K76, K75, K55, K54, \ + K35, K36, K37, K57, K56) \ + \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K20, K21, K22, K23, K24, K25, K26, KC_NO }, \ + { K30, K31, K32, K33, K34, K35, K36, K37 }, \ + { K40, K41, K42, K43, K44, K45, K46, KC_NO }, \ + { K50, K51, K52, K53, K54, K55, K56, K57 }, \ + { K60, K61, K62, K63, K64, K65, K66, KC_NO }, \ + { K70, K71, K72, K73, K74, K75, K76, KC_NO } \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); + +#endif diff --git a/keyboards/hhkb/hhkb_avr.h b/keyboards/hhkb/hhkb_avr.h new file mode 100644 index 0000000000..7ea6322c73 --- /dev/null +++ b/keyboards/hhkb/hhkb_avr.h @@ -0,0 +1,167 @@ +#ifndef HHKB_AVR_H +#define HHKB_AVR_H + +#include +#include +#include +#include +#include + + +// Timer resolution check +#if (1000000/TIMER_RAW_FREQ > 20) +# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB." +#endif + + +/* + * HHKB Matrix I/O + * + * row: HC4051[A,B,C] selects scan row0-7 + * row-ext: [En0,En1] row extention for JP + * col: LS145[A,B,C,D] selects scan col0-7 and enable(D) + * key: on: 0/off: 1 + * prev: hysteresis control: assert(1) when previous key state is on + */ + + +#if defined(__AVR_ATmega32U4__) +/* + * For TMK HHKB alt controller(ATMega32U4) + * + * row: PB0-2 + * col: PB3-5,6 + * key: PD7(pull-uped) + * prev: PB7 + * power: PD4(L:off/H:on) + * row-ext: PC6,7 for HHKB JP(active low) + */ +static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); } +static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); } +static inline bool KEY_STATE(void) { return (PIND & (1<<7)); } +static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); } +static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); } +#ifdef HHKB_POWER_SAVING +static inline void KEY_POWER_ON(void) { + DDRB = 0xFF; PORTB = 0x40; // change pins output + DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on + /* Without this wait you will miss or get false key events. */ + _delay_ms(5); // wait for powering up +} +static inline void KEY_POWER_OFF(void) { + /* input with pull-up consumes less than without it when pin is open. */ + DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up + DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off +} +static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); } +#else +static inline void KEY_POWER_ON(void) {} +static inline void KEY_POWER_OFF(void) {} +static inline bool KEY_POWER_STATE(void) { return true; } +#endif +static inline void KEY_INIT(void) +{ + /* row,col,prev: output */ + DDRB = 0xFF; + PORTB = 0x40; // unable + /* key: input with pull-up */ + DDRD &= ~0x80; + PORTD |= 0x80; +#ifdef HHKB_JP + /* row extention for HHKB JP */ + DDRC |= (1<<6|1<<7); + PORTC |= (1<<6|1<<7); +#endif + KEY_UNABLE(); + KEY_PREV_OFF(); + + KEY_POWER_OFF(); +} +static inline void KEY_SELECT(uint8_t ROW, uint8_t COL) +{ + PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07); +#ifdef HHKB_JP + if ((ROW) & 0x08) PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<6); + else PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<7); +#endif +} + + +#elif defined(__AVR_AT90USB1286__) +/* + * For Teensy++(AT90USB1286) + * + * HHKB pro HHKB pro2 + * row: PB0-2 (6-8) (5-7) + * col: PB3-5,6 (9-12) (8-11) + * key: PE6(pull-uped) (4) (3) + * prev: PE7 (5) (4) + * + * TODO: convert into 'staitc inline' function + */ +#define KEY_INIT() do { \ + DDRB |= 0x7F; \ + DDRE |= (1<<7); \ + DDRE &= ~(1<<6); \ + PORTE |= (1<<6); \ +} while (0) +#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \ + (((COL) & 0x07)<<3) | \ + ((ROW) & 0x07)) +#define KEY_ENABLE() (PORTB &= ~(1<<6)) +#define KEY_UNABLE() (PORTB |= (1<<6)) +#define KEY_STATE() (PINE & (1<<6)) +#define KEY_PREV_ON() (PORTE |= (1<<7)) +#define KEY_PREV_OFF() (PORTE &= ~(1<<7)) +#define KEY_POWER_ON() +#define KEY_POWER_OFF() +#define KEY_POWER_STATE() true + + +#else +# error "define code for matrix scan" +#endif + + +#if 0 +// For ATMega328P with V-USB +// +// #elif defined(__AVR_ATmega328P__) +// Ports for V-USB +// key: PB0(pull-uped) +// prev: PB1 +// row: PB2-4 +// col: PC0-2,3 +// power: PB5(Low:on/Hi-z:off) +#define KEY_INIT() do { \ + DDRB |= 0x3E; \ + DDRB &= ~(1<<0); \ + PORTB |= 1<<0; \ + DDRC |= 0x0F; \ + KEY_UNABLE(); \ + KEY_PREV_OFF(); \ +} while (0) +#define KEY_SELECT(ROW, COL) do { \ + PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \ + PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \ +} while (0) +#define KEY_ENABLE() (PORTC &= ~(1<<3)) +#define KEY_UNABLE() (PORTC |= (1<<3)) +#define KEY_STATE() (PINB & (1<<0)) +#define KEY_PREV_ON() (PORTB |= (1<<1)) +#define KEY_PREV_OFF() (PORTB &= ~(1<<1)) +// Power supply switching +#define KEY_POWER_ON() do { \ + KEY_INIT(); \ + PORTB &= ~(1<<5); \ + _delay_ms(1); \ +} while (0) +#define KEY_POWER_OFF() do { \ + DDRB &= ~0x3F; \ + PORTB &= ~0x3F; \ + DDRC &= ~0x0F; \ + PORTC &= ~0x0F; \ +} while (0) +#endif + +#endif diff --git a/keyboards/hhkb/keymaps/default/compiled.hex b/keyboards/hhkb/keymaps/default/compiled.hex new file mode 100644 index 0000000000..b3af695270 --- /dev/null +++ b/keyboards/hhkb/keymaps/default/compiled.hex @@ -0,0 +1,1381 @@ +:100000000C9452060C9496060C9496060C94960644 +:100010000C9496060C9496060C9496060C949606F0 +:100020000C9496060C9496060C945A110C942C126F +:100030000C941C1F0C9496060C9496060C94960631 +:100040000C9496060C9496060C9496060C949606C0 +:100050000C9496060C94BC1F0C9496060C94960671 +:100060000C9496060C9496060C9496060C949606A0 +:100070000C9496060C9496060C9496060C94960690 +:100080000C9496060C9496060C9496060C94960680 +:100090000C9496060C9496060C9496060C94960670 +:1000A0000C9496060C9496060C9496069912BB1224 +:1000B000A913BB12A91300132313A91378138B13CD +:1000C0006516651694169416D316F316231823187E +:1000D000FE162318AE17AE171418231823181D1870 +:1000E000BB17BB17BB17BB17BB17BB17BB17BB1780 +:1000F000BB17BB17BB17BB17BB17BB17BB17BB1770 +:10010000CB17D917E017E717F117253032583A20E7 +:10011000253038620A000A722F63203031323334BE +:100120003536370A001F0014001A00160004001D9F +:10013000001B000600200021001500080007000930 +:100140000019000500220023001C0017000A000B04 +:1001500000110000001E0029002B00E000E100E279 +:1001600000E3002C002400250018000C000E000DF8 +:100170000010000000310035002A0028000152E57F +:1001800000E600E700260027001200130033000FEE +:1001900000360000002D002E0030002F0034003803 +:1001A00000370000003B0001000100A900AA000187 +:1001B00000010001003C003D0001000100A8000119 +:1001C00000010001003E003F000100010001005558 +:1001D00000570000003A00A50039000100010001AD +:1001E000000100010040004100010046004A0054A7 +:1001F000005600000049004C002A00580001000190 +:100200000001000100420043004700480050004B3D +:10021000004D00000044004500010052004F005115 +:10022000004E0000000A44454255473A20656E6181 +:10023000626C65642E0A005B735D004B6579626FCA +:100240006172642073746172742E0A005B575D00E2 +:100250005B535D005B525D005B445D005B435D0092 +:100260001203480048004B00420020006D006F0060 +:10027000640000000C0371002E006D002E006B0066 +:1002800000000403090409027400040100A0FA0933 +:100290000400000103010100092111010001223FB6 +:1002A000000705810308000A090401000103010297 +:1002B00000092111010001224D00070582030800F9 +:1002C0000A090402000103000000092111010001D4 +:1002D0002236000705830308000A0904030002030D +:1002E00000000009211101000122200007058403FC +:1002F0002000010705040320000112011001000085 +:100300000008EDFEFECA0401010200010631FF09EA +:1003100074A1010975150025FF9520750881020952 +:1003200076150025FF952075089102C0050109800A +:10033000A101850216010026B7001A01002AB700A4 +:10034000751095018100C0050C0901A101850316F6 +:100350000100269C021A01002A9C02751095018159 +:1003600000C005010902A1010901A1000509190147 +:100370002905150025019505750181029501750373 +:1003800081010501093009311581257F9502750824 +:10039000810609381581257F950175088106050CB0 +:1003A0000A38021581257F950175088106C0C005B0 +:1003B000010906A101050719E029E71500250195A6 +:1003C0000875018102950175088101050819012947 +:1003D00005950575019102950175039101050719B0 +:1003E0000029FF150025FF950675088100C00A0049 +:1003F0002530325820006B6579626F6172645F72DC +:1004000065706F72743A20004B6579626F61726437 +:10041000204C4544732073746174653A2025780A32 +:1004200000646F6E652E0A00626F6F676D616769A9 +:1004300063207363616E3A202E2E2E2000290A005D +:100440002575002F002575005D280025640020001B +:10045000256400200025640020002564007C002520 +:10046000303258006D6F7573656B6579205B62740F +:100470006E7C782079207620685D287265702F6107 +:10048000636C293A205B006D6B5F776865656C5F14 +:1004900074696D655F746F5F6D6178203D202564C0 +:1004A0000A006D6B5F776865656C5F6D61785F737F +:1004B00070656564203D2025640A006D6B5F74697A +:1004C0006D655F746F5F6D6178203D2025640A0063 +:1004D0006D6B5F6D61785F7370656564203D20258D +:1004E000640A006D6B5F696E74657276616C203DA5 +:1004F0002025640A006D6B5F64656C6179203D2086 +:1005000025640A006D6B5F776865656C5F74696D63 +:10051000655F746F5F6D6178203D2025640A006D12 +:100520006B5F776865656C5F6D61785F737065653B +:1005300064203D2025640A006D6B5F74696D655F02 +:10054000746F5F6D6178203D2025640A006D6B5FDC +:100550006D61785F7370656564203D2025640A00D5 +:100560006D6B5F696E74657276616C203D202564E9 +:100570000A006D6B5F64656C6179203D2025640A1B +:10058000000A00257500363A20776865656C5F744F +:10059000696D655F746F5F6D61783A20000A0025B0 +:1005A0007500353A20776865656C5F6D61785F73BB +:1005B000706565643A20000A00257500343A20749D +:1005C000696D655F746F5F6D61783A20000A002580 +:1005D0007500333A206D61785F73706565643A2009 +:1005E000000A00257500323A20696E7465727661E2 +:1005F0006C286D73293A20000A00257500313A20D5 +:1006000064656C6179282A31306D73293A20000ABB +:10061000092D2056616C756573202D0A004D3E0032 +:100620004D25643E20003F0073657420646566615B +:10063000756C740A00433E2000776865726520641B +:10064000656C74613A20637572736F723D25642C1A +:1006500020776865656C3D25640A5365652068747C +:1006600074703A2F2F656E2E77696B6970656469B7 +:10067000612E6F72672F77696B692F4D6F75736588 +:100680005F6B6579730A000A092D204D6F757365DC +:100690006B6579202D0A4553432F713A09717569AD +:1006A000740A313A0964656C6179282A31306D73B6 +:1006B000290A323A09696E74657276616C286D7325 +:1006C000290A333A096D61785F73706565640A348D +:1006D0003A0974696D655F746F5F6D61780A353AC8 +:1006E00009776865656C5F6D61785F7370656564D7 +:1006F0000A363A09776865656C5F74696D655F7481 +:100700006F5F6D61780A0A703A097072696E7420C1 +:1007100076616C7565730A643A0973657420646563 +:100720006661756C74730A75703A092B310A646FCF +:10073000776E3A092D310A706775703A092B31309E +:100740000A7067646F776E3A092D31300A0A737048 +:10075000656564203D2064656C7461202A206D61AC +:10076000785F7370656564202A2028726570656102 +:1007700074202F2074696D655F746F5F6D617829D7 +:100780000A003F004D3E2000433E20004C25640AF5 +:100790000074696D65725F636F756E743A20253001 +:1007A000346C580A006B6579626F6172645F6964CA +:1007B0006C653A2025580A006B6579626F61726436 +:1007C0005F70726F746F636F6C3A2025580A00680F +:1007D0006F73745F6B6579626F6172645F6C65647F +:1007E0007328293A2025580A000A092D20537461DC +:1007F000747573202D0A004743433A20342E392E56 +:1008000032204156522D4C4942433A20312E382E47 +:1008100031204156525F415243483A206176723549 +:100820000A004F5054494F4E533A204C55464120F0 +:10083000424F4F544D41474943204D4F5553454B2F +:1008400045592045585452414B455920434F4E532A +:100850004F4C4520434F4D4D414E44203531320AD7 +:10086000004255494C443A20313637313865662DBF +:100870006469727479202832333A33393A32382035 +:100880004A756E2020392032303136290A00564907 +:10089000443A2030784645454428712E6D2E6B2908 +:1008A000205049443A203078434146452848484B37 +:1008B00042206D6F6429205645523A2030783031FD +:1008C00030340A00444553433A20712E6D2E6B207C +:1008D0006B6579626F617264206669726D776172AF +:1008E0006520666F722048484B420A000A092D2095 +:1008F00056657273696F6E202D0A000A092D204318 +:100900006F6E736F6C65202D0A4553432F713A0942 +:10091000717569740A6D3A096D6F7573656B6579E8 +:100920000A000A092D204D61676963202D0A443AA7 +:10093000094465627567204D65737361676520546E +:100940006F67676C650A583A094D6174726978205F +:100950004465627567204D6F646520546F67676CEE +:1009600065202D2053686F77206B657970726573F1 +:1009700073657320696E206D617472697820677287 +:1009800069640A4B3A094B6579626F61726420446D +:100990006562756720546F67676C65202D2053680A +:1009A0006F77206B65797072657373207265706FF5 +:1009B00072740A4D3A094465627567204D6F75730C +:1009C0006520546F67676C650A563A0956657273FD +:1009D000696F6E0A533A095374617475730A433A26 +:1009E00009416374697661746520436F6E736F6C3F +:1009F00065204D6F64650A46312D4631303A095302 +:100A0000776974636820746F204C61796572203057 +:100A10002D392028463130203D204C30290A302DF8 +:100A2000393A0953776974636820746F204C61798F +:100A3000657220302D390A4553433A09537769745A +:100A4000636820746F204C617965722030202861C2 +:100A50006C7465726E617465206B65792031290A4A +:100A600047524156453A0953776974636820746F59 +:100A7000204C6179657220302028616C7465726E3B +:100A8000617465206B65792032290A5041555345C0 +:100A90003A094A756D7020746F20426F6F746C6FE5 +:100AA0006164657220285265736574290A453A09A4 +:100AB0005072696E7420454550524F4D20536574F5 +:100AC00074696E67730A000A002575002E6E6B72DA +:100AD0006F3A20000A002575002E737761705F62FF +:100AE00061636B736C6173685F6261636B73706188 +:100AF00063653A20000A002575002E737761705FE8 +:100B000067726176655F6573633A20000A00257538 +:100B1000002E6E6F5F6775693A20000A0025750028 +:100B20002E737761705F72616C745F726775693A7A +:100B300020000A002575002E737761705F6C616C70 +:100B4000745F6C6775693A20000A002575002E6392 +:100B50006170736C6F636B5F746F5F636F6E7472E1 +:100B60006F6C3A20000A002575002E737761705F64 +:100B7000636F6E74726F6C5F636170736C6F636BC5 +:100B80003A20000A0025303258006B65796D61709B +:100B90005F636F6E6669672E7261773A20000A00A4 +:100BA0002575002E6D6F7573653A20000A00257556 +:100BB000002E6B6579626F6172643A20000A00252D +:100BC00075002E6D61747269783A20000A002575EF +:100BD000002E656E61626C653A20000A0025303295 +:100BE000580064656275675F636F6E6669672E7231 +:100BF00061773A20000A0025750064656661756CAE +:100C0000745F6C617965723A20003F000A6D6F7500 +:100C100073653A206F66660A000A6D6F7573653AF0 +:100C2000206F6E0A000A6B6579626F6172643A2008 +:100C30006F66660A000A6B6579626F6172643A20BA +:100C40006F6E0A000A6D61747269783A206F666689 +:100C50000A000A6D61747269783A206F6E0A000AA0 +:100C600064656275673A206F66660A000A646562A9 +:100C700075673A206F6E0A000A0A4A756D70696ED0 +:100C80006720746F20626F6F746C6F616465722E81 +:100C90002E2E2000433E20006565636F6E666967F7 +:100CA0003A0A000011241FBECFEFDAE0DEBFCDBF4D +:100CB00004B603FE24C08091E0019091E101A0916F +:100CC000E201B091E3018730904BA740B04BB9F4FB +:100CD0001092E0011092E1011092E2011092E30102 +:100CE00014BE84B7877F84BF88E10FB6F8948093E1 +:100CF0006000109260000FBEE0E0FFE3099511E094 +:100D0000A0E0B1E0ECEFF5E502C005900D92A23352 +:100D1000B107D9F711E0A2E3B1E001C01D92A03EF6 +:100D2000B107E1F70E94940E0C94FC2A0C94000089 +:100D3000FF93EF93E0913201F0913301309709F086 +:100D40000995EF91FF910895FC018591803011F094 +:100D5000EFDFFBCF0895FF27E0E230E247FF0CC052 +:100D6000419597FF09C0EDE260957095809590954B +:100D7000611D711D811D911D27FF02C0219530E36A +:100D800050E2AA27660F771F881F991FAA1FA41772 +:100D900010F0A41B63955A95A9F7AA3008F0A95F33 +:100DA000A05DAF93F395611571058105910541F73C +:100DB000ED3211F4EF93F395F21718F43F93F39596 +:100DC000FBCF8F91B5DFFA95E1F70895E991F9919D +:100DD0008591803021F0853219F0AADFF9CF08958E +:100DE00020E0E89455915532C1F3503311F46894E2 +:100DF00055915A3348F4505390F3220F022E220F8C +:100E0000220F200D250FF4CF0EF421958991999191 +:100E1000533619F3533729F1533559F1BC0188275B +:100E20009927E8945C3621F48991999168945591B9 +:100E3000543639F446EF7EF077FF0DC08FEF9FEF09 +:100E40000AC055374AE039F0583540E121F05236B2 +:100E500042E009F00895FF93EF937DDFEF91FF915A +:100E6000B7CFFF93EF93FC0181918030B9F360DF3E +:100E7000FBCFFF93EF9368DFF1CFDF93CF93CDB735 +:100E8000DEB72596A3DFCF91DF9108958FEF84B968 +:100E900080E485B957985F9A2E9A2F98ECE3F1E099 +:100EA00088E08E0F11928E13FDCFE4E3F1E088E02D +:100EB0008E0F11928E13FDCF8CE391E0909347013A +:100EC0008093460184E391E090934501809344012F +:100ED0000895EF92FF920F931F93CF93DF9380912A +:100EE0004401909145012091460130914701309392 +:100EF0004501209344019093470180934601C0E04F +:100F0000D0E0EE24E394F12C0FEF10E020E030E08D +:100F100085B1807C8C2BA90193E0440F551F9A95D5 +:100F2000E1F7842B85B98AE18A95F1F700C0E09159 +:100F30004401F0914501EC0FFD1F808190E0022EED +:100F400002C0959587950A94E2F780FD2F9A95E364 +:100F50009A95F1F70000E6B52E988AE18A95F1F7A7 +:100F600000C04091460150914701DA01AC0FBD1F0E +:100F70004F9B0AC0C701022E01C0880F0A94EAF7EE +:100F800080959C91892308C06C91C701022E01C0F5 +:100F9000880F0A94EAF7862B8C9386B56E2F70E043 +:100FA0008E1728F086B590E0861B970B06C0E6B535 +:100FB000C801861B970B8E0F911D069758F0E09184 +:100FC0004401F0914501EC0FFD1F8081FA01EC0F07 +:100FD000FD1F80839AE19A95F1F700C02F982E9A11 +:100FE0008BE291E00197F1F700C000002F5F3F4FC7 +:100FF0002830310509F08CCFA0914601B09147010E +:10100000AC0FBD1FE0914401F0914501EC0FFD1FB5 +:101010009C918081981751F00E945A1F609348015B +:101020007093490180934A0190934B012196C830F7 +:10103000D10509F06BCF8091D601853021F08091E8 +:10104000D601811111C060914801709149018091D0 +:101050004A0190914B010E94901F613177428105B6 +:10106000910510F00E94DF1E81E0DF91CF911F916A +:101070000F91FF90EF900895209146013091470124 +:10108000F901E80FF11D808108950F931F93CF930D +:10109000DF9386E191E00E94A406C0E0D0E00AE080 +:1010A00011E0E0914601F0914701EC0FFD1F8081B6 +:1010B0000E94C91E1F928F93DF93CF931F930F93AC +:1010C0000E943D0721960F900F900F900F900F9068 +:1010D0000F90C830D10529F7DF91CF911F910F9163 +:1010E00008951F93CF93DF93C7E0D0E010E0E09125 +:1010F0004601F0914701EC0FFD1F808190E00E94B6 +:10110000BD1E180F219798F7812FDF91CF911F9166 +:1011100008950895089561110BC0FC018281882310 +:1011200021F085EE0E94591503C085EE0E94F81546 +:1011300080E090E0089581E0089581E008950C94A6 +:101140009D0808950F931F93CF93DF938C01FC01AB +:10115000C081D181CE010E94871DBE010E944B0932 +:10116000EC01B8010E949F08882309F48DC0F801A2 +:101170008281882309F44AC08091570181111FC0E0 +:10118000C431F0E5DF0709F051C00E94A10881E0F9 +:10119000809357010E944E1F9093560180935501F2 +:1011A00010924E011092500110924F011092520174 +:1011B00010925101109254011092530165C0809118 +:1011C0005501909156010E94661F883C910570F46C +:1011D00080914E01E82FF0E0EE0FFF1FE15BFE4F24 +:1011E000D183C0838F5F80934E014EC0C43880E5A9 +:1011F000D80721F0C538D04501F13AC0F801828105 +:10120000882341F010924C0182E01EC0C438E0E512 +:10121000DE0759F580914C01811106C086E20E94DB +:10122000591586E20E94F81582E01CC0C438F0E52A +:10123000DF0741F3C538D045D9F4F801828188230E +:1012400031F010924D0180E20E9420161DC0809165 +:101250004D01811106C087E20E94591587E20E9464 +:10126000F81580E20E9427160FC0C538D04529F333 +:1012700081E080934C0180934D01C801DF91CF91B3 +:101280001F910F910C949B0880E0DF91CF911F91EB +:101290000F9108950895E72FF0E098E0899FE00D01 +:1012A000F11D112483E0EE0FFF1F8A95E1F7E60F91 +:1012B000F11DEE0FFF1FEB5DFE4F85919491089598 +:1012C000880F991FFC01EB55F0408591949108958A +:1012D000880F991FFC01EB5DFE4F85919491089555 +:1012E0000F931F93CF93DF93EC01811520E39207B7 +:1012F00050F5C11580E2D80708F0C3C0CB3BD1053B +:1013000090F4C83AD10508F06AC0C53AD10508F092 +:101310005BC0C430D10508F0D4C1219709F0CEC11B +:1013200001E010E00EC2CF3FD10511F008F0C9C1B5 +:10133000C03FD10508F0A2C0CE01805E9109089798 +:1013400008F4BFC1BBC1C13090E5D90709F4A2C000 +:1013500020F5C0318FE4D80770F4C11590E4D907A7 +:1013600008F094C0C11521E3D20708F0A7C1DD271A +:101370008E01106CE6C1C115D04509F09FC10E94D5 +:101380008E188FEF94E32CE0815090402040E1F7DD +:1013900000C000000E94E11FD4C1C11597E5D90724 +:1013A00058F4C03121E5D20708F020C1C43180E5EE +:1013B000D80708F479C082C1CE01905781159041B9 +:1013C00008F07CC1DF7077C1C53AD10509F47BC153 +:1013D000C63AD10509F07AC102E810E4B2C1C83AB0 +:1013E000D10509F476C1C93AD10509F475C1CA3AE3 +:1013F000D10509F474C1CB3AD10509F473C1CC3AD3 +:10140000D10509F472C1CD3AD10509F471C1C03BCF +:10141000D10509F470C1CE3AD10509F46FC1CF3AB4 +:10142000D10509F46EC1C13BD10509F46DC1C23BC0 +:10143000D10509F46CC1C33BD10509F46BC1C43BB0 +:10144000D10509F46AC1C53BD10509F469C1C63BA0 +:10145000D10509F468C1C73BD10509F467C1C83B90 +:10146000D10509F466C1C93BD10509F465C1CA3B80 +:10147000D10509F464C100E014E463C18E01106574 +:1014800060C1CE019F700E9468095CC1DF708E014F +:10149000106A57C185E292E00E94A4068091C101C2 +:1014A00081608093C1014DC10E948721811102C0DA +:1014B0000E946D210E94A42190E09093E00180930E +:1014C000DF01C23080E5D80721F48091DF0181601F +:1014D00086C0C43090E5D90721F48091DF01826095 +:1014E0007EC0C63020E5D20721F48091DF01846000 +:1014F00076C0C83080E5D80719F48091DF0127C095 +:10150000CA3090E5D90721F48091DF01806167C07E +:10151000CC3020E5D20721F48091DF0180625FC0EA +:10152000CE3080E5D80721F48091DF01806457C078 +:10153000C03190E5D90721F48091DF0180684FC068 +:10154000C23120E5D20729F48091DF0184608860F0 +:1015500046C0C33080E5D80721F48091DF018E7F3B +:101560003EC0C53090E5D90721F48091DF018D7F21 +:1015700036C0C73020E5D20721F48091DF018B7F90 +:101580002EC0C93080E5D80719F48091DF0126C04C +:10159000CB3090E5D90721F48091DF018F7E1FC009 +:1015A000CD3020E5D20721F48091DF018F7D17C077 +:1015B000CF3080E5D80721F48091DF018F7B0FC009 +:1015C000C13190E5D90721F48091DF018F7707C001 +:1015D000C331D04531F48091DF018B7F877F8093C9 +:1015E000DF018091DF010E94A821ABC08D2F9927D8 +:1015F0008F70992781309105D9F49E01237033278C +:1016000002C0880F991F2A95E2F79C688E0144E07A +:10161000000F111F4A95E1F700271370802B912BC3 +:1016200053E0CC0FDD1F5A95E1F7C076DD272FC0C0 +:101630008230910531F4DC2FCC278E01016F106AC6 +:1016400080C08330910569F4CE018370992701E051 +:1016500010E002C0000F111F8A95E2F7C8019C68D4 +:101660000FC084309105B9F4CE018370992701E051 +:1016700010E002C0000F111F8A95E2F7C8019A68B6 +:1016800023E0CC0FDD1F2A95E1F7C07ED7708C01D7 +:101690000C2B1D2B56C08530910531F4DC2FCC2747 +:1016A0008E01046F106A4DC0069709F04AC0CF71D1 +:1016B000DD27DC2FCC278E01106243C000E010E054 +:1016C00040C08E013EC001E810E43BC003E810E4D6 +:1016D00038C002EE14E435C009EE14E432C00AEE5C +:1016E00014E42FC005EB14E42CC006EB14E429C06D +:1016F00007EB14E426C00CEC14E423C00DEC14E456 +:1017000020C003E815E41DC00AE815E41AC002E988 +:1017100015E417C004E915E414C001E216E411C091 +:1017200003E216E40EC004E216E40BC005E216E480 +:1017300008C006E216E405C007E216E402C00AE2A9 +:1017400016E4C801DF91CF911F910F910895E72F03 +:10175000F0E098E0899FE00DF11D112483E0EE0F89 +:10176000FF1F8A95E1F7E60FF11DEE0FFF1FEB5DFE +:10177000FE4F85919491803E9105E0F4803C910567 +:1017800058F58133910509F46FC048F48932910509 +:1017900009F463C08A32910509F46DC072C08933BF +:1017A0009105E9F082389105D1F08533910509F46E +:1017B0004DC067C0833E910581F138F4803E9105AC +:1017C000B9F0823E9105D9F05CC0863E910561F189 +:1017D000873E9105A1F155C00E94600908952091AE +:1017E000DF0120FD02C021FF4CC080EE90E049C027 +:1017F0008091DF0180FFF9CF89E390E042C08091C2 +:10180000DF0182FF0EC08091DF0184FF03C080E012 +:1018100090E037C083EE90E034C08091DF0182FF1A +:10182000F2CF82EE90E02DC08091DF0183FF0BC0EC +:101830008091DF0184FDEBCF87EE90E022C08091A4 +:10184000DF0183FFF5CF86EE90E01BC08091DF01C2 +:1018500085FF07C089E290E014C08091DF0185FF19 +:10186000F9CF85E390E00DC08091DF0186FF07C0CE +:101870008AE290E006C08091DF0186FFF9CF81E324 +:1018800090E00E947009089508950C94440C809192 +:10189000630108959FB7F89410925A019FBF9091E9 +:1018A000D601943009F057C09091E9009F703091B3 +:1018B000EC00232F217030FD20E8922B24E02093B0 +:1018C000E9002091EB0020FF43C02091EE0027FFAC +:1018D0003FC020915801222321F02091E80025FFEC +:1018E00037C01092580126E03091E80035FD15C050 +:1018F0003091D601343061F53091EB0035FD28C0D0 +:10190000215021F481E08093580122C0EFE9FFE0EB +:101910003197F1F700C00000E7CF8093F10080918C +:10192000E80085FD0AC08091E80080FFFCCF80912F +:10193000E8008E778093E80006C08FB7F89421E026 +:1019400020935A018FBF9F709093E90080E0089523 +:101950009F709093E9008FEF0895CF93DF9300D0AD +:101960001F92CDB7DEB79C018091D601843019F566 +:1019700093E099833B832A839093E9008FEF9091C2 +:10198000E800815095FD06C095ED9A95F1F70000AD +:101990008111F5CF8091E80085FF0DC040E050E057 +:1019A00063E070E0CE0101960E944A0F8091E8004A +:1019B0008E778093E8000F900F900F90DF91CF917A +:1019C0000895CF93DF9300D01F92CDB7DEB720915B +:1019D000D601243021F522E029839B838A8383E08A +:1019E0008093E9008FEF9091E800815095FD06C04B +:1019F00095ED9A95F1F700008111F5CF8091E800FF +:101A000085FF0DC040E050E063E070E0CE0101963C +:101A10000E944A0F8091E8008E778093E8000F9033 +:101A20000F900F90DF91CF9108952091D60124302F +:101A3000F1F422E02093E9002FEF3091E8002150EB +:101A400035FD06C035ED3A95F1F700002111F5CFCF +:101A50002091E80025FF0BC040E050E065E070E019 +:101A60000E944A0F8091E8008E778093E8000895E5 +:101A7000CF93DF932091D601243039F521E02093D4 +:101A8000E9002FEF3091E800215035FD06C035ED1B +:101A90003A95F1F700002111F5CF2091E80025FFDC +:101AA00014C0EC0140E050E068E070E00E944A0F92 +:101AB0008091E8008E778093E80088E0FE01ABE536 +:101AC000B1E001900D928A95E1F7DF91CF910895F1 +:101AD0008CE592E00E94A4068091D501811109C095 +:101AE0000E94DF100E943C118091E200846080938C +:101AF000E200089588E592E00E94A4061092D501C4 +:101B0000089584E592E00C94A40680E592E00C949C +:101B1000A4068CE492E00E94A4060C94161F209167 +:101B200059012F5F822F62E30E948C2A992319F0BA +:101B30002093590108951092590180915A018823E8 +:101B400071F18091D601843041F58091E9008F7068 +:101B50002091EC00922F917020FD90E8892B94E069 +:101B60009093E9009091EB0090FF14C09091EE00EB +:101B700097FF10C09091E80095FF03C01092F1000C +:101B8000F9CF9091E80090FF05C09091E8009E7712 +:101B90009093E8008F708093E90010925A010895A5 +:101BA00042E061EC81E00E94591042E061EC82E089 +:101BB0000E94591042E061EC83E00E94591042E219 +:101BC00061EC84E00C9459108091D801833009F4C1 +:101BD00053C030F4813071F0823009F48CC0089524 +:101BE0008A3009F478C08B3009F45EC0893009F07E +:101BF0009AC020C08091D701813A09F094C08091A9 +:101C0000E800877F8093E8008091DB019091DC0100 +:101C1000892B21F468E08BE591E003C060E080E06F +:101C200090E070E00E94950F8091E8008B778093A0 +:101C3000E80008958091D701813209F074C0809145 +:101C4000DB019091DC01892B09F06DC08091E800E7 +:101C5000877F8093E8008091E80082FD05C0809135 +:101C6000D6018111F8CF5FC08091F10080936301AC +:101C70008091E8008B7753C08091D701813A09F0B9 +:101C800052C08091DB019091DC01892B09F04BC09F +:101C90008091E800877F8093E8008091E80080FFD2 +:101CA000FCCF80910A0136C08091D7018132D9F5ED +:101CB0008091DB019091DC01892BA9F58091E800EE +:101CC000877F8093E8000E948E108091D9018093D5 +:101CD0000A010C948E188091D701813221F58091F0 +:101CE000E800877F8093E8000E948E108091DA01DF +:101CF0008093640108958091D701813AA1F4809185 +:101D0000E800877F8093E8008091E80080FFFCCFA7 +:101D1000809164018093F1008091E8008E77809338 +:101D2000E8000C948E10089584B7877F84BF88E103 +:101D30000FB6F89480936000109260000FBE90E0A0 +:101D400080E80FB6F89480936100909361000FBE15 +:101D50000E946E140E94DF100E943C118091E200EC +:101D600084608093E2008AE49CE00E94B81E78942C +:101D70000E94C1130E94701480E091E00E94DC1365 +:101D80008BE392E00E94A4068091D601853089F40D +:101D900087E392E00E94A4060E94DF1E8091D40196 +:101DA000882391F30E94081F882371F30E94340F47 +:101DB000EBCF0E949414E8CF292F3327233031052D +:101DC000C9F064F42130310581F02230310509F089 +:101DD00043C084E790E026E832E042C0213231057A +:101DE000F1F02232310541F137C082E190E02AEF73 +:101DF00032E036C099278130910541F0823091055B +:101E000041F0892B49F5E2E8F2E005C0E4E7F2E0B1 +:101E100002C0E0E6F2E0849190E09F0121C06430CE +:101E2000D8F4E62FF0E0EE0FFF1FE15EFE4F2081B9 +:101E3000318189E090E014C0643070F470E0FB01FF +:101E4000EE0FFF1FE95EFE4F20813181FB01ED5E49 +:101E5000FE4F808190E004C080E090E020E030E020 +:101E6000FA0131832083089580E189BD82E189BD33 +:101E700009B400FEFDCF8091D8008F7D8093D800FB +:101E80008091E00082608093E0008091E00081FD1D +:101E9000FCCF0895CF92DF92EF92FF920F931F93A2 +:101EA000CF93DF93EC018B016A010E94AD10811189 +:101EB00033C0C114D10439F0F60180819181081B2F +:101EC000190BC80FD91FE12CF12C0115110519F1BF +:101ED0008091E80085FD16C08091E8008E778093A0 +:101EE000E800C114D10449F0F60180819181E80E27 +:101EF000F91EF182E08285E00FC00E94AD108823B8 +:101F000021F30AC089918093F10001501109FFEF7C +:101F1000EF1AFF0ADACF80E0DF91CF911F910F9186 +:101F2000FF90EF90DF90CF9008952091DD013091E8 +:101F3000DE012617370748F06115710539F4209145 +:101F4000E8002E772093E80001C0B90140E0611558 +:101F50007105A9F12091D601222309F443C025304F +:101F600009F442C02091E80023FD40C02091E80020 +:101F700022FD32C02091E80020FFE9CF4091F3001C +:101F80002091F20030E0342BFC01CF016115710586 +:101F900059F02830310540F481918093F10061506F +:101FA00071092F5F3F4FF1CF41E02830310509F033 +:101FB00040E02091E8002E772093E800C8CF41113F +:101FC000C9CF0AC08091D601882361F0853061F0C5 +:101FD0008091E80083FD0AC08091E80082FFF2CF83 +:101FE00080E0089582E0089583E0089581E00895F7 +:101FF0002091DD013091DE012617370748F0611589 +:10200000710539F42091E8002E772093E80001C093 +:10201000B901FC0120E06115710591F18091D601B3 +:10202000882309F440C0853009F43FC08091E8005E +:1020300083FD3DC08091E80082FD2FC08091E800C3 +:1020400080FFE9CF2091F3008091F20090E0922B85 +:102050006115710559F08830910540F42491209361 +:10206000F1003196615071090196F2CF21E0089795 +:1020700009F020E08091E8008E778093E800CBCFD4 +:102080002111CCCF0AC08091D601882361F0853020 +:1020900061F08091E80083FD0AC08091E80082FF32 +:1020A000F2CF80E0089582E0089583E0089581E012 +:1020B0000895982F973058F59093E900981739F0C4 +:1020C0007091EC002091ED005091F00003C0242F9E +:1020D000762F50E021FF19C03091EB003E7F309306 +:1020E000EB003091ED003D7F3093ED003091EB003F +:1020F00031603093EB007093EC002093ED0050932F +:10210000F0002091EE0027FF07C09F5FD3CF8F70B4 +:102110008093E90081E0089580E008958091D701DF +:1021200087FF11C08091E80082FD05C08091D60133 +:102130008111F8CF11C08091E8008B770BC080919E +:10214000D601882349F08091E80080FFF8CF809184 +:10215000E8008E778093E80008952091E4003091A4 +:10216000E50095E64091EC00842F817040FF22C08D +:102170008091E80080FD1CC08091D601882391F0F9 +:10218000853091F08091EB0085FD10C04091E40016 +:102190005091E5004217530729F39A01915011F726 +:1021A00084E0089582E0089583E0089581E0089531 +:1021B00080E008954091E80042FFDECF08950E943C +:1021C0004D110E945511E0EEF0E080818160808326 +:1021D000E8EDF0E080818F77808319BCA7EDB0E057 +:1021E0008C918E7F8C9380818F7E80831092D5011D +:1021F00008950F931F93CF93DF930E944D110E9478 +:102200005511C8EDD0E088818F77888388818068F8 +:10221000888388818F7D888319BC1092D6011092A3 +:10222000D2011092D4011092D30100EE10E0F80117 +:1022300080818B7F808388818160888342E060E039 +:1022400080E00E945910E1EEF0E080818E7F808373 +:10225000E2EEF0E08081816080838081886080830D +:10226000F80180818E7F8083888180618883DF91FF +:10227000CF911F910F910895E8EDF0E080818F7E5E +:102280008083E7EDF0E080818160808384E082BF1D +:1022900081E08093D5010C94F910E8EDF0E08081A5 +:1022A0008E7F80831092E20008951092DA001092DF +:1022B000E10008951F920F920FB60F9211242F93F1 +:1022C0003F934F935F936F937F938F939F93AF93BE +:1022D000BF93EF93FF938091E10082FF0BC0809149 +:1022E000E20082FF07C08091E1008B7F8093E100D4 +:1022F0000E948F0D8091DA0080FF1FC08091D8006E +:1023000080FF1BC08091DA008E7F8093DA0080917D +:10231000D90080FF0DC080E189BD82E189BD09B48B +:1023200000FEFDCF81E08093D6010E94680D05C0BC +:1023300019BC1092D6010E947A0D8091E10080FFB5 +:1023400019C08091E20080FF15C08091E2008E7F6D +:102350008093E2008091E20080618093E2008091AE +:10236000D80080628093D80019BC85E08093D601A4 +:102370000E94850D8091E10084FF30C08091E200D1 +:1023800084FF2CC080E189BD82E189BD09B400FED3 +:10239000FDCF8091D8008F7D8093D8008091E1009F +:1023A0008F7E8093E1008091E2008F7E8093E20037 +:1023B0008091E20081608093E2008091D2018823C5 +:1023C00011F084E007C08091E30087FD02C081E046 +:1023D00001C083E08093D6010E94890D8091E100C5 +:1023E00083FF29C08091E20083FF25C08091E10036 +:1023F000877F8093E10082E08093D6011092D20122 +:102400008091E1008E7F8093E1008091E2008E7FD9 +:102410008093E2008091E20080618093E20042E0DC +:1024200060E080E00E9459108091F0008860809305 +:10243000F0000E94810DFF91EF91BF91AF919F91AC +:102440008F917F916F915F914F913F912F910F905D +:102450000FBE0F901F9018951F920F920FB60F92FC +:1024600011242F933F934F935F936F937F938F9399 +:102470009F93AF93BF93CF93DF93EF93FF93C0915D +:10248000E900CF708091EC00D82FD17080FDD0E8AA +:102490001092E9008091F000877F8093F00078949B +:1024A0000E9470121092E9008091F0008860809381 +:1024B000F000CD2BCF70C093E900FF91EF91DF9139 +:1024C000CF91BF91AF919F918F917F916F915F91CC +:1024D0004F913F912F910F900FBE0F901F90189525 +:1024E0001F93CF93DF93CDB7DEB7AA970FB6F894BB +:1024F000DEBF0FBECDBFE7EDF1E088E08E0F90911B +:10250000F10091938E13FBCF0E94E40D8091E800BF +:1025100083FF1FC18091D7019091D801492F50E0CE +:102520004A30510508F015C1FA01EA5AFF4F0C94E0 +:10253000AC2A803881F0823809F00BC18091DB0130 +:102540008F708093E9008091EB0085FB882780F9EC +:102550001092E90006C08091D3019091D4019111AD +:1025600082609091E800977F9093E8008093F1005B +:102570001092F100C8C0282F2D7F09F0EAC08823EF +:1025800019F0823061F0E5C08091D901813009F005 +:10259000E0C0933009F080E08093D4012BC080919B +:1025A000D901811127C08091DB018F7009F4D1C05E +:1025B0008093E9002091EB0020FF1CC0933021F4B0 +:1025C0008091EB00806214C09091EB009061909339 +:1025D000EB0021E030E0A90102C0440F551F8A95AD +:1025E000E2F74093EA001092EA008091EB008860E5 +:1025F0008093EB001092E9008091E800877F86C00D +:102600008111A7C01091D9011F778091E3008078D4 +:10261000812B8093E3008091E800877F8093E8001E +:102620000E948E108091E80080FFFCCF8091E30033 +:1026300080688093E300111102C082E001C083E052 +:102640008093D60186C08058823008F082C0809185 +:10265000D9019091DA018C3D53E0950779F583E03B +:102660008A838AE289834FB7F894DE01139620E0CB +:102670003EE051E2E32FF0E050935700E49120FF59 +:1026800003C0E295EF703F5FEF708E2F90E0EA306D +:1026900010F0C79601C0C0968D939D932F5F243193 +:1026A00049F74FBF8091E800877F8093E8006AE296 +:1026B00070E0CE0101960E94950F14C0AE014F5FED +:1026C0005F4F6091DB010E94DC0EBC01009709F4B2 +:1026D00040C09091E800977F9093E80089819A81AB +:1026E0000E94F80F8091E8008B778093E80031C05A +:1026F000803879F58091E800877F8093E8008091A9 +:10270000D2018093F1008091E8008E778093E800F9 +:102710000E948E101EC081111CC09091D901923070 +:10272000C0F48091E800877F8093E8009093D20105 +:102730000E948E108091D201811106C08091E30029 +:1027400087FD02C081E001C084E08093D6010E9431 +:10275000D00D8091E80083FF0AC08091E800877F58 +:102760008093E8008091EB0080628093EB00AA9652 +:102770000FB6F894DEBF0FBECDBFDF91CF911F9192 +:102780000895CF938091D6018823A1F0C091E900EC +:10279000CF709091EC00892F817090FD80E8C82B5C +:1027A0001092E9008091E80083FD0E947012CF70C2 +:1027B000C093E900CF91089590936A0180936901D5 +:1027C0000895E0916901F0916A01309721F001903C +:1027D000F081E02D099480E00895EF92FF920F932D +:1027E0001F93CF93DF93E0916901F0916A013097D5 +:1027F000B1F18C010280F381E02D09958091C10136 +:1028000082FF2DC080FF04C086EF93E00E94A406E3 +:10281000E80118E080EFE82E83E0F82E8091C101F6 +:1028200080FF0BC088811F928F93FF92EF920E94CE +:102830003D070F900F900F900F901150219611119E +:10284000EDCF8091C10180FF0AC08EEE93E0DF9151 +:10285000CF911F910F91FF90EF900C94A406DF9100 +:10286000CF911F910F91FF90EF900895E091690132 +:10287000F0916A01309721F00480F581E02D0994F0 +:10288000089520916701309168018217930771F0D4 +:102890009093680180936701E0916901F0916A016A +:1028A000309721F00680F781E02D0994089520915A +:1028B0006501309166018217930771F0909366016C +:1028C00080936501E0916901F0916A01309721F0F0 +:1028D0000084F185E02D0994089508950C946D14F9 +:1028E0000E94451F0E9446070C943F20CF93DF9320 +:1028F0001F92CDB7DEB79091C10192FF10C090FF3B +:102900000EC01F928F9328E034E03F932F9389836A +:102910000E943D070F900F900F900F9089810F90AC +:10292000DF91CF910C94450C9F92AF92BF92CF92C2 +:10293000DF92EF92FF920F931F93CF93DF9300D01C +:1029400000D000D0CDB7DEB70E94690707E010E0E5 +:10295000AA24A394B12C902E802F0E943C089801A9 +:1029600024593E4F6901F901F080F826A1F4015085 +:10297000110988F78FEF89838A831B820E944E1F7B +:102980008160782F9D838C8349815A816B818D81F1 +:102990000E942B152FC09091C10191FF04C08E831E +:1029A0000E9445088E8127E030E0A501022E01C07B +:1029B000440F0A94EAF7E42E4F21C1F029839A824A +:1029C0008E2191E009F490E09B830E944E1F81606C +:1029D000782F9D838C8349815A816B818D810E94E0 +:1029E0002B15F6018081E826E08204C021503109D0 +:1029F000E0F6BDCF0E94A92310916B010E94E11364 +:102A00001817B9F00E94E11380936B0126960FB658 +:102A1000F894DEBF0FBECDBFDF91CF911F910F9114 +:102A2000FF90EF90DF90CF90BF90AF909F900C946D +:102A3000761426960FB6F894DEBF0FBECDBFDF9199 +:102A4000CF911F910F91FF90EF90DF90CF90BF90AB +:102A5000AF909F900895CF93DF93CDB7DEB72B97BC +:102A60000FB6F894DEBF0FBECDBF4F83588769877E +:102A70007A878B87DE01119686E0FD0111928A9597 +:102A8000E9F785E0FE01379601900D928A95E1F70E +:102A900049815A816B817C818D819E810E942C1B92 +:102AA0002B960FB6F894DEBF0FBECDBFDF91CF914E +:102AB0000895CF93882309F499C0C82F8CEF8C0F09 +:102AC000813A48F48C2F0E94152881118FC08C2FD9 +:102AD0000E94061E0CC080E28C0F883058F4C7702C +:102AE00081E001C0880FCA95EAF70E94421ECF918B +:102AF0000C94891E8BE58C0F833078F4C53A29F04D +:102B0000C63A31F083E890E005C081E890E002C069 +:102B100082E890E0CF910C94411488E58C0F8331CA +:102B200008F064C0C83A39F1C93A41F1CA3A49F1EA +:102B3000CB3A51F1CC3A59F1CD3A61F1C03B69F150 +:102B4000CE3A71F1CF3A79F1C13B81F1C23B89F1C3 +:102B5000C33B91F1C43B99F1C53BA1F1C63BA9F13F +:102B6000C73BB1F1C83BB9F1C93BC1F1CA3BC9F19F +:102B700080E090E038C082EE90E035C089EE90E0D1 +:102B800032C08AEE90E02FC085EB90E02CC086EB3F +:102B900090E029C087EB90E026C08CEC90E023C049 +:102BA0008DEC90E020C083E891E01DC08AE891E0C0 +:102BB0001AC082E991E017C084E991E014C081E273 +:102BC00092E011C083E292E00EC084E292E00BC07A +:102BD00085E292E008C086E292E005C087E292E0DA +:102BE00002C08AE292E0CF910C945714CF910895DD +:102BF000882329F19CEF980F913A18F40E94231E24 +:102C00000DC090E2980F983058F4877091E001C0A1 +:102C1000990F8A95EAF7892F0E94481E0C94891E05 +:102C20009BE5980F933020F480E090E00C944114E1 +:102C3000885A833120F480E090E00C945714089572 +:102C4000882321F00E94421E0C94891E0895882337 +:102C500021F00E94481E0C94891E08957F928F9245 +:102C60009F92AF92BF92CF92DF92EF92FF920F931B +:102C70001F93CF93DF931F92CDB7DEB77C01C62E93 +:102C8000772EFC01058102950F70128111110E94AF +:102C90005F1E0E94FF1D882379F0112369F080E2F6 +:102CA0008C0D883048F082E00E94E81D0E94FF1DD4 +:102CB00091E0D82ED92601C0D12CE72DE295EF70F6 +:102CC000F0E0E05AFF4F0C94AC2A872D807F072D4F +:102CD0000F70882311F00295007F112389F00023E3 +:102CE00009F498C180E28C0D883020F4802F0E9476 +:102CF000421E03C0802F0E94521E0E94891E8AC15C +:102D00008C2D0E94F815002309F49DC180E28C0DE2 +:102D1000883020F4802F0E94481E03C0802F0E941C +:102D2000581E0E94891E8FC1872D807F972D9F700E +:102D3000803211F4892F03C0892F8295807FCC20A7 +:102D400021F0F1E0CF16A1F01DC0112339F00023CE +:102D500019F1013009F50E94721E75C1002319F0A6 +:102D6000013009F470C189830E94751E898110C1E8 +:102D7000112321F0063008F066C10EC0053008F0BE +:102D800062C106C1112359F0002331F0F70195818A +:102D900090FF40C19F7095830E94201654C100236C +:102DA00009F4F6C03DC1872D86958695837090E025 +:102DB000009719F0019761F046C1112321F08C2D85 +:102DC000972D937002C080E090E00E9441143BC1B7 +:102DD000112321F08C2D972D937002C080E090E09C +:102DE0000E94571430C18C2D112319F00E942F22FC +:102DF00002C00E9497220E941C2325C1872D837048 +:102E000009F052C011111FC18C2D829586958770D3 +:102E1000880F880F9C2D9F70892E912CA12CB12C8E +:102E2000082E04C0880C991CAA1CBB1C0A94D2F75B +:102E3000C4FE14C00FE010E020E030E0B901A801AA +:102E400004C0440F551F661F771F8A95D2F7CB0128 +:102E5000BA01609570958095909503C060E070E030 +:102E6000CB01272D26952695237030E022303105A1 +:102E700069F02330310589F0682979298A299B294D +:102E80002130310571F00E94741CDDC06829792958 +:102E90008A299B290E94901CD6C00E94741CC501DF +:102EA000B4010E94581CCFC0112319F0872D8170E6 +:102EB00001C08695882309F4C6C08C2D829586951D +:102EC0008770880F880F9C2D9F70892E912CA12CC4 +:102ED000B12C082E04C0880C991CAA1CBB1C0A9497 +:102EE000D2F7C4FE14C00FE010E020E030E0B901DA +:102EF000A80104C0440F551F661F771F8A95D2F79B +:102F0000CB01BA01609570958095909503C060E003 +:102F100070E0CB01272D269526952370422F50E097 +:102F20004230510569F04330510589F0682979290B +:102F30008A299B294130510571F00E944E1D83C0A2 +:102F4000682979298A299B290E946A1D7CC00E94D0 +:102F50004E1DC501B4010E94321D75C08C2D90E03C +:102F6000FC01E05EF109E531F10508F04FC0E059E0 +:102F7000FF4F0C94AC2A0C2D0F70872D8F711123ED +:102F800021F00E94CB1C802F07CF0E94EC1C802FC9 +:102F90000E94271658C0112341F0053008F053C095 +:102FA000872D8F710E94111D4EC0063008F04BC056 +:102FB000F7CF112339F0872D8F710E94CB1C43C0AE +:102FC0001123C9F3872D8F710E94EC1C3CC0112383 +:102FD00029F0872D8F710E94B61C35C00E94AC1C51 +:102FE00032C0112351F0172D1F71812F0E94CB1C6D +:102FF00063E0812F0E94DF1D26C081E00E94E81D52 +:10300000023008F182E00E94E81D1DC0112331F05A +:10301000002389F28C2D0E94591515C0002391F2CE +:103020008C2D0E94F8150FC0472D4F706C2DC701D5 +:103030000E948B080E94D01B06C0472D4F706C2D3C +:10304000C7010E944A09DD20F9F00E94DB1D80FDC6 +:103050001BC0F70112820E94D51D0E94CB1CC70124 +:103060000E9453180E94D51D0F90DF91CF911F91A0 +:103070000F91FF90EF90DF90CF90BF90AF909F9017 +:103080008F907F900C94EC1C0F90DF91CF911F914B +:103090000F91FF90EF90DF90CF90BF90AF909F90F7 +:1030A0008F907F9008950F931F93CF93DF93EC0140 +:1030B000888199812B813C81232BB9F09F3F11F4AA +:1030C0008F3F99F0CE010E94A208882371F0688199 +:1030D00079818A810E94D11D8C010E94861D0E94E7 +:1030E0004D1CB801CE010E942E16DF91CF911F9189 +:1030F0000F9108950E945F1E0E946F1E0E94341E51 +:103100000E94891E0E944F240E941C2380E090E0B0 +:103110000E94411480E090E00C9457140E944F1ECE +:103120000C947A180E94C61D292F22952F7030E02A +:103130002C3031054CF42A3031056CF42250310921 +:1031400022303105A8F407C02C30310569F02F304A +:10315000310551F00DC0803F69F018F4803E40F415 +:1031600009C0843F29F406C093FB882780F908959D +:1031700080E0089581E00895CF93DF9300D000D0E0 +:103180001F92CDB7DEB70F900F900F900F900F905A +:10319000DF91CF910895CF93DF9300D000D000D07E +:1031A000CDB7DEB726960FB6F894DEBF0FBECDBF03 +:1031B000DF91CF9108951F93CF93DF93C091740156 +:1031C00016E080917501C81799F0D0E01C9FF001BE +:1031D0001D9FF00D1124EA58FE4F408151816281FC +:1031E0007381848195810E94CB182196C770E9CFA5 +:1031F000DF91CF911F9108954091A6015091A701B1 +:103200006091A8017091A9018091AA019091AB01F0 +:103210000C94CB188091AB0182958F7009F054C04B +:103220008091A801882309F44FC080917401A09176 +:1032300075016091A6017091A7014091A90150917B +:10324000AA01B6E08A1709F43FC090E04115510584 +:10325000C1F17F3F11F46F3FA1F1B89FF001B99F19 +:10326000F00D1124EA58FE4F218172132AC02081EB +:10327000621327C02281211124C0238134812417A5 +:10328000350710F421503109241B350B283C31053A +:10329000C0F42091AB012F7020612093AB0126E098 +:1032A000289FF001299FF00D1124E558FE4F8081E1 +:1032B0008F708061808386EA91E00E9453180C949D +:1032C000DB1801968770BECF0895CF92DF92EF9200 +:1032D000FF920F931F93CF93DF93CDB7DEB7629723 +:1032E0000FB6F894DEBF0FBECDBF8C0185E0F801AC +:1032F000DE011D9601900D928A95E1F7D8014C915F +:1033000011965C91119712966C9112971396CD902D +:10331000DC9014973091A6017091A7018091A901CA +:103320009091AA01009709F46BC17F3F19F43F3FC8 +:1033300009F466C1E090A801EE2009F4C0C0209114 +:10334000AB01C816D90628F0F601E81BF90BCF012E +:1033500004C0809590958C0D9D1DFF24F394883CAE +:10336000910578F0F12C207F09F0C6C07C2DD98A18 +:10337000C88A89890E94BC1886EA91E00E94531885 +:10338000B1C0822F807F09F046C0751314C034137A +:1033900012C0611110C02F7020612093AB010E94F8 +:1033A000FC1886EA91E00E9453188091AB01D80185 +:1033B00015968C932EC0CD2819F15F3F11F44F3F25 +:1033C000F9F0F62E61111CC08091740120917501F5 +:1033D00036E0821709F45AC090E0389FF001399F17 +:1033E000F00D1124EA58FE4F7181571306C0708109 +:1033F000471303C07281711103C001968770E9CF32 +:10340000F62E662309F418C18091AB018160809388 +:10341000AB01F12C11C1751308C0341306C0611142 +:1034200004C08091AB01D801C3C04D875E878D85F4 +:103430009E856A8B0E9492186A898823E1F166232F +:10344000D1F12091AB01822F82958F7090E002978D +:1034500074F08091A6019091A70198878F831986B7 +:10346000DB86CA862C87CE0107960E94531886E019 +:10347000F801A6EAB1E001900D928A95E1F70E9469 +:103480000A190E94FC18FF24F394D6C04D875E876A +:103490008D859E850E94C61D292F22952F7030E0B4 +:1034A000223031050CF0BCC09F7009F0B6C0805EC0 +:1034B000883008F4C1C0C8010E945318E4CFC81670 +:1034C000D90608F453C0F601E81BF90BCF01883C7C +:1034D000910508F450C0F12C7C2DD98AC88A8989BD +:1034E0000E94BC18E6EAF1E086E0DF011D928A95B1 +:1034F000E9F70E94FC18A0C0751314C0341312C061 +:10350000611110C08091AB01F8018583C8010E9450 +:10351000531886E0E6EAF1E0DF011D928A95E9F7AB +:10352000FE2C8AC04D875E878D859E856A8B0E94A2 +:1035300092186A89882309F4BECF662309F4BBCFA9 +:103540002091AB01822F82958F7090E002970CF44E +:103550008ECF8091A6019091A7019A8389831B82C7 +:10356000DD82CC822E83CE0101967FCF809590950F +:103570008C0D9D1DACCFF62E662309F49CCF7513E0 +:103580002EC034132CC02091AB0120FD1FC0822F10 +:1035900082958F70D9F0D80115962C9315978F309E +:1035A00049F08F5F982F9295907F822F8F70892B93 +:1035B00015968C93C8010E94531886E0F801A6EA7C +:1035C000B1E001900D928A95E1F793CF86E0F80182 +:1035D000A6EAB1E001900D928A95E1F72DC04D87E2 +:1035E0005E878D859E850E949218811140CF8091C3 +:1035F000AB0181608093AB01C8010E9453181CC0CD +:10360000662309F458CF4D875E878D859E850E947D +:103610009218882309F44FCF2ACF811148CF0CC0CC +:10362000243031050CF047CF9F7009F440CFF801EA +:103630009581907F09F03BCF8F2D62960FB6F8945D +:10364000DEBF0FBECDBFDF91CF911F910F91FF90D5 +:10365000EF90DF90CF9008951F93CF93DF93CDB776 +:10366000DEB72C970FB6F894DEBF0FBECDBF4F83E9 +:10367000588769877A878B879C87CE0107960E9437 +:103680006519882369F08F8198852A853B85232BCE +:10369000F1F19F3F09F063C08F3F09F060C037C070 +:1036A00086E0FE013796DE01119601900D928A9513 +:1036B000E1F76F817885EA85FB85309741F17F3F9F +:1036C00011F46F3F21F12091750130E0C90101969D +:1036D000877099274091740150E08417950709F489 +:1036E00047C069837A83FD83EC8396E0929FD00183 +:1036F000939FB00D1124AA58BE4FFE013196019040 +:103700000D929A95E1F7809375010E94DB1816E0FF +:1037100080917401909175018917C1F1189FC001C2 +:1037200011248A589E4F0E946519882379F1E091EF +:1037300074011E9FF0011124EA58FE4F408151810F +:1037400062817381848195810E94CB18809174017C +:1037500090E001968770992780937401D9CF4F81AB +:10376000588569857A858B859C850E94CB18CFCF3B +:103770000E948E181092750110927401E6EAF1E031 +:1037800086E0DF011D928A95E9F7C1CF2C960FB62E +:10379000F894DEBF0FBECDBFDF91CF911F9108958A +:1037A000EF92FF920F931F93CF93DF938C010097BB +:1037B00009F46CC0F12CEE24E394E8012196F801A1 +:1037C0008491843740F4843008F051C0813081F016 +:1037D000823019F15BC0853709F444C0A8F19CE739 +:1037E000980F903708F052C08F770E94F81541C0AB +:1037F0000E5F1F4FFE01C49180E28C0F883048F4A9 +:10380000C7708E2D01C0880FCA95EAF70E94621E0C +:1038100014C08C2F0E9459152DC00E5F1F4FFE0142 +:10382000C49180E28C0F883058F4C7708E2D01C08F +:10383000880FCA95EAF70E94681E0E94891E1AC066 +:103840008C2F0E94F81516C00E5F1F4FFE01C49109 +:10385000CC2381F08FE99FE00197F1F700C00000D1 +:10386000C150F6CF0E5F1F4FFE01F49003C00E94BF +:1038700059158E018F2D882309F49FCFEFE9FFE0C2 +:103880003197F1F700C000008150F5CFDF91CF9163 +:103890001F910F91FF90EF90089508956093B001EC +:1038A0007093B1018093B2019093B3010C947A1894 +:1038B0000F931F930091B0011091B1012091B201BB +:1038C0003091B301DC01CB01802B912BA22BB32BC8 +:1038D0008093B0019093B101A093B201B093B30172 +:1038E0001F910F910C947A180F931F930091B001C0 +:1038F0001091B1012091B2013091B301DC01CB01F3 +:1039000080239123A223B3238093B0019093B1012C +:10391000A093B201B093B3011F910F910C947A1848 +:103920000F931F930091B0011091B1012091B2014A +:103930003091B301DC01CB0180279127A227B32767 +:103940008093B0019093B101A093B201B093B30101 +:103950001F910F910C947A181092AC011092AD0146 +:103960001092AE011092AF010C947A1841E050E031 +:1039700060E070E004C0440F551F661F771F8A95F2 +:10398000D2F74093AC015093AD016093AE017093B8 +:10399000AF010C947A1841E050E060E070E004C0A0 +:1039A000440F551F661F771F8A95D2F78091AC018F +:1039B0009091AD01A091AE01B091AF01482B592B70 +:1039C0006A2B7B2B4093AC015093AD016093AE0109 +:1039D0007093AF010C947A1841E050E060E070E021 +:1039E00004C0440F551F661F771F8A95D2F7409574 +:1039F0005095609570958091AC019091AD01A0912A +:103A0000AE01B091AF01482359236A237B23409331 +:103A1000AC015093AD016093AE017093AF010C9473 +:103A20007A1841E050E060E070E004C0440F551F98 +:103A3000661F771F8A95D2F78091AC019091AD01F6 +:103A4000A091AE01B091AF01482759276A277B2783 +:103A50004093AC015093AD016093AE017093AF0100 +:103A60000C947A180F931F930091AC011091AD0143 +:103A70002091AE013091AF01DC01CB01802B912B65 +:103A8000A22BB32B8093AC019093AD01A093AE0118 +:103A9000B093AF011F910F910C947A180F931F935D +:103AA0000091AC011091AD012091AE013091AF01B8 +:103AB000DC01CB0180239123A223B3238093AC01AB +:103AC0009093AD01A093AE01B093AF011F910F9100 +:103AD0000C947A180F931F930091AC011091AD01D3 +:103AE0002091AE013091AF01DC01CB0180279127FD +:103AF000A227B3278093AC019093AD01A093AE01B0 +:103B0000B093AF011F910F910C947A180895CF9242 +:103B1000DF92EF92FF920F931F93CF93DF938C016D +:103B2000C090B001D090B101E090B201F090B3012B +:103B30008091AC019091AD01A091AE01B091AF0127 +:103B4000C82AD92AEA2AFB2ACFE1D0E0D701C60148 +:103B50000C2E04C0B695A795979587950A94D2F731 +:103B600080FF06C0B8018C2F0E94A70B019721F49B +:103B7000219760F780E001C08C2FDF91CF911F91DA +:103B80000F91FF90EF90DF90CF900895CF93DF9348 +:103B9000EC010E94871DBE010E94A70BDF91CF910F +:103BA0000895CB010E94C61D08958091B4018595AA +:103BB0008595859508958091B4018770089598E062 +:103BC000899F90011124262B2093B4010C94CB1CC7 +:103BD0002091B401809582238093B401982F97702F +:103BE00069F430E0482F552747FD509524173507D5 +:103BF00029F08595859585950C94EC1C08959091F8 +:103C0000B401977081E009F480E0089520910B01E0 +:103C100030910C01F90132969FEF40E05191581715 +:103C200089F09F3F19F4511101C0942F4F5F463026 +:103C3000A9F79F3F39F0F901E90FF11D97FDFA95BA +:103C400082830895089520910B0130910C01F901B0 +:103C50003296285F3F4F9081981301C010823196B1 +:103C6000E217F307C1F7089581E090E0E0910B01BE +:103C7000F0910C01E80FF91F108201968830910530 +:103C8000A9F708959091C001892B8093C0010895F0 +:103C900080959091C00189238093C001089510926E +:103CA000C00108959091BF01892B8093BF010895B1 +:103CB00080959091BF0189238093BF010895109250 +:103CC000BF0108959091BE01892B8093BE01089594 +:103CD00080959091BE0189238093BE010895109232 +:103CE000BE0108958093B50108951092B50108951D +:103CF00080910B0190910C01FC0131969C01285F91 +:103D00003F4F80E0919191118F5FE217F307D1F758 +:103D10000895E0910B01F0910C018091C001808326 +:103D2000E0910B01F0910C0190818091BF01892BF2 +:103D30008083E0910B01F0910C0190818091BE0194 +:103D4000892B80838091B501882361F0E0910B017C +:103D5000F0910C019081892B80830E94781E811143 +:103D60001092B50180910B0190910C010C94ED1310 +:103D70009093330180933201089520E0009739F049 +:103D8000AC0141505109842395232F5FF7CF822F37 +:103D900008958295982F9C7C392F36953695282F3B +:103DA000237344E0249FC0011124932F982B292FC3 +:103DB0002A7A2695892F8575880F822B0895809100 +:103DC000D601843021F11092C20120E488E190E014 +:103DD0000FB6F894A895809360000FBE2093600002 +:103DE00080E00E94450C83B7817F846083BF83B7E6 +:103DF000816083BF7894889583B78E7F83BF88E185 +:103E00000FB6F89480936000109260000FBE089582 +:103E10000E9489080E9469070E948A080E9471080E +:103E200091E0811101C090E0892F08950E948E18C1 +:103E30000E94E1130C94450C1F920F920FB60F9243 +:103E400011248F939F93AF93BF938091C2018111EF +:103E500013C08091C3019091C401A091C501B0919C +:103E6000C6014196A11DB11D8093C3019093C40169 +:103E7000A093C501B093C601BF91AF919F918F915F +:103E80000F900FBE0F901F90189582E084BD93E0B5 +:103E900095BD9AEF97BD80936E0008952FB7F89463 +:103EA0008091C3019091C401A091C501B091C60158 +:103EB0002FBF08952FB7F8946091C3017091C4018A +:103EC0008091C5019091C6012FBF0895CF92DF92D6 +:103ED000EF92FF920F931F932FB7F8944091C30175 +:103EE0005091C4016091C5017091C6012FBF6A0154 +:103EF0007B01EE24FF248C0120E030E0C016D106C7 +:103F0000E206F30610F4415051099A01281B390BBF +:103F1000C9011F910F91FF90EF90DF90CF9008950E +:103F2000CF92DF92EF92FF920F931F932FB7F894E7 +:103F3000C090C301D090C401E090C501F090C601CB +:103F40002FBF97018601061B170B280B390BC616CE +:103F5000D706E806F90618F0C901B80106C0C9017C +:103F6000B80161507109810991091F910F91FF906A +:103F7000EF90DF90CF9008951F920F920FB60F929F +:103F800011248F939F93AF93BF938091C30190911E +:103F9000C401A091C501B091C6010196A11DB11D3A +:103FA0008093C3019093C401A093C501B093C6014F +:103FB000BF91AF919F918F910F900FBE0F901F9067 +:103FC00018950E94DF10F8942FEF87EA91E62150B0 +:103FD00080409040E1F700C0000087E090EBDC01FA +:103FE0008093E0019093E101A093E201B093E3019B +:103FF0009CE088E10FB6F894A895809360000FBE0E +:1040000090936000FFCFEF92FF920F931F93CF9397 +:10401000DF93D82FC7E08C2F0E943C0807E010E008 +:10402000E82EF12CC701002E02C0959587950A94C1 +:10403000E2F780FF09C0602F7C2F80E00E944B09CF +:10404000D81302C081E006C00150110958F7C150D1 +:1040500010F780E0DF91CF911F910F91FF90EF90CB +:104060000895CF93C82F8CE20E940320882321F06B +:104070008C2FCF910C94032080E0CF910895CF93A3 +:104080000E948721811102C00E946D2188E294E084 +:104090000E94A406C5E6C15049F00E9469078FE35B +:1040A0009CE90197F1F700C00000F5CF81E294E0B0 +:1040B0000E94A40689E20E94312081110CC18AE28B +:1040C0000E94312081110E946D2185E00E943120E3 +:1040D00081110E94E11F0E9492218093C10187E01B +:1040E0000E9431208823A9F18BE10E94312088238E +:1040F00051F08091C10181FB222720F991E09227A4 +:1041000090FB81F90EC08EE00E943120882361F07F +:104110008091C10182FB222720F991E0922790FB38 +:1041200082F98093C10115C080E10E9431209091F5 +:10413000C101882341F093FB222720F981E08227E7 +:1041400080FB93F904C0892F809580FB90F99093B0 +:10415000C1018091C1010E9496210E94A4218093F7 +:10416000DF0180EE0E943120882341F08091DF0141 +:10417000982F909590FB80F98093DF0189E30E944E +:104180003120882359F08091DF0181FB222720F91B +:1041900091E0922790FB81F98093DF0182EE0E94EB +:1041A0003120882359F08091DF0182FB222720F9FA +:1041B00091E0922790FB82F98093DF0186EE0E94C6 +:1041C0003120882359F08091DF0183FB222720F9D9 +:1041D00091E0922790FB83F98093DF0183EE0E94A8 +:1041E0003120882359F08091DF0184FB222720F9B8 +:1041F00091E0922790FB84F98093DF0185E30E9490 +:104200003120882359F08091DF0185FB222720F996 +:1042100091E0922790FB85F98093DF0181E30E9472 +:104220003120882359F08091DF0186FB222720F975 +:1042300091E0922790FB86F98093DF0181E10E9453 +:104240003120882359F08091DF0187FB222720F954 +:1042500091E0922790FB87F98093DF018091DF0145 +:104260000E94A82187E20E943120C82F8EE10E947F +:1042700031208111C2608FE10E9431208111C46020 +:1042800080E20E9431208111C86081E20E943120C9 +:104290008111C06182E20E9431208111C06283E2FB +:1042A0000E9431208111C06484E20E943120882361 +:1042B00011F0C06802C0CC2329F08C2F0E949F21EE +:1042C0006C2F03C00E949B21682F70E080E090E07B +:1042D000CF910C944E1CCF9108956DEE7EEF80E04F +:1042E00090E00E94E62A60E082E090E00E94D42AFA +:1042F00060E083E090E00E94D42A60E084E090E0F7 +:104300000E94D42A60E085E090E00C94D42A80E0FA +:1043100090E00E94CE2A21E08D3E9E4F09F020E0E1 +:10432000822F089582E090E00C94C62A682F82E0E4 +:1043300090E00C94D42A83E090E00C94C62A682F75 +:1043400083E090E00C94D42A84E090E00C94C62A98 +:10435000682F84E090E00C94D42A8091C90180FFFA +:104360000BC06091100185E0689FB0011124759524 +:104370006795759567952BC081FF09C06091100105 +:1043800085E0689FB00111247595679520C082FF74 +:1043900007C06091100185E0689FB001112417C02B +:1043A0009091CA019923D1F060910F01961788F777 +:1043B0002091100185E0289F90011124929FA00177 +:1043C000939F500D112470E0CA010E94982A603812 +:1043D000710540F46115710539F002C065E070E0C7 +:1043E000862F08958FE7089581E008958091C9018F +:1043F00080FF08C060910E0170E075956795759516 +:10440000679521C081FF06C060910E0170E075952F +:10441000679519C082FF04C060910E0170E010C062 +:104420009091CA019923C1F060910D019617A0F7F0 +:1044300080910E01899FC001112470E00E94982A8A +:104440006038710528F46115710521F0862F0895F3 +:104450008FE7089581E0089561E070E0F4CF803F38 +:1044600021F40E94AD21819504C0813F29F40E946E +:10447000AD218093CD010895823F21F40E94AD21AA +:10448000819504C0833F29F40E94AD218093CC0123 +:104490000895893F19F40E94F62105C08A3F31F43E +:1044A0000E94F62181958093CE0108958B3F21F4DF +:1044B0000E94F621819504C08C3F29F40E94F621C8 +:1044C0008093CF010895843F21F48091CB018160D6 +:1044D00017C0853F21F48091CB01826011C0863FD7 +:1044E00021F48091CB0184600BC0873F21F480913F +:1044F000CB01886005C0883F31F48091CB01806199 +:104500008093CB0108958D3F21F48091C901816092 +:104510000BC08E3F21F48091C901826005C08F3F9E +:1045200029F48091C90184608093C9010895803F76 +:1045300039F48091CD0187FF6CC01092CD0169C024 +:10454000813F29F48091CD011816BCF362C090918F +:10455000CC01823F29F497FF5CC01092CC0159C076 +:10456000833F19F41916CCF354C0893F41F480916C +:10457000CE0118160CF04DC01092CE014AC08A3FF1 +:1045800029F48091CE0187FF44C0F6CF8B3F39F4E8 +:104590008091CF0187FF3DC01092CF013AC08C3F80 +:1045A00029F48091CF011816BCF333C0843F21F465 +:1045B0008091CB018E7F17C0853F21F48091CB0184 +:1045C0008D7F11C0863F21F48091CB018B7F0BC082 +:1045D000873F21F48091CB01877F05C0883F31F46C +:1045E0008091CB018F7E8093CB0113C08D3F21F44E +:1045F0008091C9018E7F0BC08E3F21F48091C9014B +:104600008D7F05C08F3F29F48091C9018B7F8093F6 +:10461000C9018091CC0181110EC08091CD01811121 +:104620000AC08091CE01811106C08091CF01811115 +:1046300002C01092CA0108958091C10183FF7EC01B +:1046400084E694E00E94A4068091CB011F928F9390 +:104650008FE594E09F938F930E943D078DE594E052 +:104660000E94A4068091CC01282F332727FD309586 +:104670003F938F938AE594E09F938F930E943D0729 +:1046800088E594E00E94A4068091CD01282F33276D +:1046900027FD30953F938F9385E594E09F938F930B +:1046A0000E943D0783E594E00E94A4068091CE011C +:1046B000282F332727FD30953F938F9380E594E093 +:1046C0009F938F930E943D078EE494E00E94A4067E +:1046D0008091CF01282F332727FD30953F938F936B +:1046E0008BE494E09F938F930E943D0788E494E0CD +:1046F0000E94A4068091CA011F928F9385E494E0E2 +:104700009F938F930E943D0783E494E00E94A40648 +:104710008091C9011F928F9380E494E09F938F93BF +:104720000E943D078DE394E00E94A4068DB79EB7DA +:104730004C960FB6F8949EBF0FBE8DBF8BEC91E0E8 +:104740000E9436140E944E1F9093C8018093C701A7 +:1047500008951F93CF93DF938091C7019091C80173 +:104760000E94661FAC019091CA01992321F020910B +:10477000110130E006C0209112018AE0289F9001CB +:1047800011244217530708F486C08091CC01C091D0 +:10479000CD01D091CE011091CF01811107C0C1117F +:1047A00076C0D11174C0111172C075C09F3F19F04D +:1047B0009F5F9093CA01181624F40E94AD21809344 +:1047C000CC018091CC0187FF05C00E94AD2181956D +:1047D0008093CC011C1624F40E94AD218093CD015E +:1047E0008091CD0187FF05C00E94AD218195809306 +:1047F000CD016091CC01662339F1C091CD01CC236C +:1048000019F1772767FD7095872F972F0E949D29B3 +:1048100023E333E343E35FE30E94012A0E946A2912 +:104820006093CC016C2F772767FD7095872F972FAA +:104830000E949D2923E333E343E35FE30E94012ABF +:104840000E946A296093CD011D1624F40E94F6216E +:104850008093CE018091CE0187FF05C00E94F62192 +:1048600081958093CE01111624F40E94F621809345 +:10487000CF018091CF0187FF05C00E94F62181956D +:104880008093CF01DF91CF911F910C941C239F3F08 +:1048900009F08ECF96CFDF91CF911F910895EBEC69 +:1048A000F1E085E0DF011D928A95E9F71092CA01D7 +:1048B0001092C901089587E896E00E94A4061F920D +:1048C00081E08F931F9285E08F9389E396E09F9319 +:1048D0008F930E943D070F900F900F900F900F90B5 +:1048E0000F9008958330E9F128F4813061F082302F +:1048F00009F10895853009F462C008F449C0863092 +:1049000009F474C0089580911201262F30E0280F19 +:10491000311D2F3F310524F4680F6093120103C04D +:104920008FEF80931201809112011F928F9382E783 +:1049300095E072C080911101262F30E0280F311DC3 +:104940002F3F310524F4680F6093110103C08FEFEE +:1049500080931101809111011F928F9380E695E061 +:104960005BC080911001262F30E0280F311D2F3FB2 +:10497000310524F4680F6093100103C08FEF80931A +:104980001001809110011F928F938DE495E044C037 +:1049900080910F01262F30E0280F311D2F3F310568 +:1049A00024F4680F60930F0103C08FEF80930F0111 +:1049B00080910F011F928F9388E395E02DC0809125 +:1049C0000E01262F30E0280F311D2F3F310524F432 +:1049D000680F60930E0103C08FEF80930E018091EA +:1049E0000E011F928F938FE195E016C080910D010B +:1049F000262F30E0280F311D2F3F310524F4680F9A +:104A000060930D0103C08FEF80930D0180910D0124 +:104A10001F928F9384E095E09F938F930E943D07B0 +:104A20000F900F900F900F900895833081F128F42C +:104A3000813059F08230D1F00895853009F449C0B1 +:104A4000B8F1863009F456C00895809112016817B4 +:104A500020F4861B8093120102C0109212018091F3 +:104A600012011F928F9385EF94E054C08091110141 +:104A7000681720F4861B8093110102C01092110167 +:104A8000809111011F928F9383EE94E043C0809137 +:104A90001001681720F4861B8093100102C0109249 +:104AA0001001809110011F928F9380ED94E032C02D +:104AB00080910F01681720F4861B80930F0102C0BC +:104AC00010920F0180910F011F928F938BEB94E056 +:104AD00021C080910E01681720F4861B80930E017F +:104AE00002C010920E0180910E011F928F9382EAF4 +:104AF00094E010C080910D01681720F4861B80930C +:104B00000D0102C010920D0180910D011F928F9333 +:104B100087E894E09F938F930E943D070F900F903A +:104B20000F900F900895CF93C82F1F928F938CE80A +:104B300097E09F938F930E943D0781E090E0A0E073 +:104B4000B0E0BC01CD0104C0660F771F881F991F1C +:104B5000CA95D2F70E944E1C0F900F900F900F90A5 +:104B6000CF910C948E18CF938732B0F58E3108F028 +:104B70004AC28E3009F4C4C100F5873009F48DC1F2 +:104B8000A8F4863009F045C28091C101817F8E7FF3 +:104B90008093C1018BEF98E00E94A40684E99CE019 +:104BA0000E94A40681E08093D10175C1883009F488 +:104BB0003FC08B3009F46BC12CC2863109F4E6C1C9 +:104BC00020F4803109F4B0C124C2893109F4C7C18D +:104BD0008B3109F481C11DC2883309F458C150F4E6 +:104BE000893209F412C2853309F40FC2873209F4FD +:104BF0000CC20FC2833409F408C228F48A3308F4C3 +:104C000008C2895303C2883409F003C20E948E1877 +:104C100088E79CE00E94A4069FEF23ED80E391507B +:104C200020408040E1F700C000000E94E11F33C136 +:104C300088E99CE00E94A4068AEF9BE00E94A406FB +:104C40000E949B211F928F9387EF9BE09F938F93EE +:104C50000E943D0785EF9BE00E94A4060E949221DE +:104C6000C82F82EE9BE00E94A4061F92CF938DED89 +:104C70009BE09F938F930E943D078BED9BE00E94EA +:104C8000A40681ED9BE00E94A4068C2F81701F92E8 +:104C90008F938EEC9BE09F938F930E943D078CEC4B +:104CA0009BE00E94A40682EC9BE00E94A406C1FB4C +:104CB000882780F91F928F938FEB9BE09F938F93B0 +:104CC0000E943D078DEB9BE00E94A40681EB9BE0D8 +:104CD0000E94A406C2FB882780F91F928F938EEA58 +:104CE0009BE09F938F930E943D078CEA9BE00E947C +:104CF000A40683EA9BE00E94A406C3FBCC27C0F96C +:104D00001F92CF9380EA9BE09F938F930E943D0771 +:104D10008EE99BE00E94A4060E94A421C82F8AE885 +:104D20009BE00E94A4061F92CF9385E89BE09F938F +:104D30008F930E943D0783E89BE00E94A4068AE6C9 +:104D40009BE00E94A4068C2F81701F928F9387E6B0 +:104D50009BE09F938F930E943D078DB79EB78096EF +:104D60000FB6F8949EBF0FBE8DBF85E69BE00E94F4 +:104D7000A4068EE49BE00E94A406C1FB882780F96C +:104D80001F928F938BE49BE09F938F930E943D072C +:104D900089E49BE00E94A40687E39BE00E94A406AE +:104DA000C2FB882780F91F928F9384E39BE09F9337 +:104DB0008F930E943D0782E39BE00E94A40680E25D +:104DC0009BE00E94A406C3FB882780F91F928F9363 +:104DD0008DE19BE09F938F930E943D078BE19BE0C9 +:104DE0000E94A40681E19BE00E94A406C4FB8827E0 +:104DF00080F91F928F938EE09BE09F938F930E9488 +:104E00003D078CE09BE00E94A4068AEF9AE00E9496 +:104E1000A406C5FB882780F91F928F9387EF9AE03D +:104E20009F938F930E943D0785EF9AE00E94A4060E +:104E300089ED9AE00E94A406C6FB882780F91F929C +:104E40008F9386ED9AE09F938F930E943D0784EDA8 +:104E50009AE00E94A4068CEC9AE00E94A406C7FB8C +:104E6000CC27C0F91F92CF9389EC9AE09F938F9340 +:104E70000E943D0787EC9AE00E94A4068DB79EB77A +:104E80004C960FB6F8949EBF0FBE8DBF04C082E251 +:104E900099E00E94A406C1E0C1C08091C101C82F61 +:104EA000C095C170C0FB80F98093C101CC2349F04B +:104EB0008CE69CE00E94A4068091C1018660886017 +:104EC00048C08FE59CE00E94A4068091C101897FC3 +:104ED000877F8093C101DFCF9091C10191FBCC27E7 +:104EE000C0F981E0C827892FC0FB81F98093C101F7 +:104EF000CC2319F082E59CE027C084E49CE0C9CF74 +:104F00009091C10192FBCC27C0F981E0C827892F7D +:104F1000C0FB82F98093C101CC2319F085E39CE0AA +:104F200013C085E29CE0B5CF9091C10193FBCC27E3 +:104F3000C0F981E0C827892FC0FB83F98093C101A4 +:104F4000CC2351F089E19CE00E94A4068091C1012C +:104F500081608093C10162C08CE09CE09ACF8CEEAE +:104F600098E00E94A40684EC98E00E94A4068EE8D3 +:104F700098E00E94A40681E698E00E94A40682E2DE +:104F800098E00E94A40687EF97E083CF89EE97E030 +:104F90000E94A4060E94E1131F928F938FEC97E06A +:104FA0009F938F930E943D0780910A011F928F93D8 +:104FB00088EB97E09F938F930E943D078091640157 +:104FC0001F928F9385EA97E09F938F930E943D07EE +:104FD0008091C3019091C401A091C501B091C60117 +:104FE000BF93AF939F938F9381E997E09F938F93A4 +:104FF0000E943D078DB79EB742960FB6F8949EBFAC +:105000000FBE8DBF48CF8D5101C080E00E94932517 +:1050100042CF8AE09CE00E94A406C0E08C2FCF9192 +:10502000089580E0089580E00895CF93C82F80917F +:10503000D101813071F020F0823009F44BC042C1BF +:10504000E0910B01F0910C018081823209F03CC1AA +:1050500007C0E0910B01F0910C018081823261F474 +:105060008C2F0E941128811104C08C2F0E94B3251F +:105070002FC081E090E02CC08C2F0E94132881115A +:1050800026C0C431E1F070F4CB3081F0C031D1F4EE +:105090000E945B2484E897E00E94A40682E080934B +:1050A000D10115C0C93259F0C83361F48BEF98E0D3 +:1050B0000E94A40688E897E00E94A40608C0109207 +:1050C000D10104C182E897E00E94A406FFC081E0FC +:1050D0008170FEC0C43228F5CE3108F0C1C0CB309B +:1050E000A1F1D0F4C73009F0D3C08EE18093120152 +:1050F00082E3809311018AE08093100184E1809320 +:105100000F0188E080930E0188E280930D0188E210 +:1051100096E00E94A406BFC0C33149F1C431C1F07A +:10512000B7C0CB3409F4A9C028F4C93289F0C83318 +:1051300061F0AEC0C13509F49EC0C23509F499C012 +:10514000CE3409F0A5C06AE09EC00E945B24A3C0D3 +:105150008091D001882319F01092D0019CC085E382 +:1051600096E00E94A40681E08093D101B1C08FE057 +:1051700096E00E94A4068DEF95E00E94A40680911F +:1051800012011F928F938AEF95E09F938F930E9455 +:105190003D0788EF95E00E94A40686EE95E00E9408 +:1051A000A406809111011F928F9383EE95E09F9347 +:1051B0008F930E943D0781EE95E00E94A40682ED48 +:1051C00095E00E94A406809110011F928F938FECAE +:1051D00095E09F938F930E943D078DEC95E00E9490 +:1051E000A4068CEB95E00E94A40680910F011F920B +:1051F0008F9389EB95E09F938F930E943D0787EBF8 +:1052000095E00E94A40682EA95E00E94A40680919F +:105210000E011F928F938FE995E09F938F930E94C9 +:105220003D078DE995E00E94A40686E895E00E947E +:10523000A40680910D011F928F9383E895E09F93C0 +:105240008F930E943D0781E895E00E94A4068DB7E8 +:105250009EB748960FB6F8949EBF0FBE8DBF1BC079 +:10526000CE51EC2FF0E0E95DFE4F80818093D001BC +:1052700012C061E003C061E006C06AE08091D00125 +:105280000E94722408C08091D0010E94152503C09D +:1052900086E296E013C08091D001882369F01F92C6 +:1052A0008F9380E296E09F938F930E943D070F902B +:1052B0000F900F900F9004C08DE196E00E94A4061D +:1052C00081E006C01092D10180E002C080E000CFF2 +:1052D000CF91089504D06894B1118DC0089570D015 +:1052E00088F09F5790F0B92F9927B751A0F0D1F0CF +:1052F000660F771F881F991F1AF0BA95C9F712C059 +:10530000B13081F077D0B1E0089574C0672F782F65 +:105310008827B85F39F0B93FCCF3869577956795C4 +:10532000B395D9F73EF490958095709561957F4F30 +:105330008F4F9F4F0895E89409C097FB3EF49095D6 +:105340008095709561957F4F8F4F9F4F9923A9F05E +:10535000F92F96E9BB279395F695879577956795ED +:10536000B795F111F8CFFAF4BB0F11F460FF1BC031 +:105370006F5F7F4F8F4F9F4F16C0882311F096E9C4 +:1053800011C0772321F09EE8872F762F05C0662372 +:1053900071F096E8862F70E060E02AF09A95660F2B +:1053A000771F881FDAF7880F9695879597F90895E4 +:1053B00057FD9058440F551F59F05F3F71F04795C6 +:1053C000880F97FB991F61F09F3F79F087950895AB +:1053D000121613061406551FF2CF4695F1DF08C0CA +:1053E000161617061806991FF1CF869571056105E7 +:1053F00008940895E894BB2766277727CB0197F98F +:1054000008950BD078C069D028F06ED018F095239D +:1054100009F05AC05FC01124EECFCADFA0F3959FF8 +:10542000D1F3950F50E0551F629FF001729FBB278B +:10543000F00DB11D639FAA27F00DB11DAA1F649F37 +:105440006627B00DA11D661F829F2227B00DA11DEA +:10545000621F739FB00DA11D621F839FA00D611D70 +:10546000221F749F3327A00D611D231F849F600D91 +:10547000211D822F762F6A2F11249F5750408AF0CA +:10548000E1F088234AF0EE0FFF1FBB1F661F771F56 +:10549000881F91505040A9F79E3F510570F014C0ED +:1054A000AACF5F3FECF3983EDCF38695779567953E +:1054B000B795F795E7959F5FC1F7FE2B880F911D74 +:1054C0009695879597F9089597F99F6780E870E01A +:1054D00060E008959FEF80EC089500240A9416166A +:1054E000170618060906089500240A9412161306D2 +:1054F000140605060895092E0394000C11F4882360 +:1055000052F0BB0F40F4BF2B11F460FF04C06F5F7B +:105510007F4F8F4F9F4F0895991B79E004C0991FCB +:10552000961708F0961B881F7A95C9F780950895FD +:1055300097FB072E16F4009407D077FD09D00E9440 +:10554000B22A07FC05D03EF4909581959F4F0895AF +:10555000709561957F4F0895EE0FFF1F0590F491B0 +:10556000E02D0994AA1BBB1B51E107C0AA1FBB1F5A +:10557000A617B70710F0A61BB70B881F991F5A95DF +:10558000A9F780959095BC01CD010895F999FECFBA +:1055900092BD81BDF89A992780B50895A8E1B0E041 +:1055A00042E050E00C94EE2A262FF999FECF92BDEE +:1055B00081BDF89A019700B4021639F01FBA20BDD8 +:1055C0000FB6F894FA9AF99A0FBE08950196272F0C +:1055D0000E94D52A0C94D42ADC01CB01FC01F99954 +:1055E000FECF06C0F2BDE1BDF89A319600B40D922F +:0C55F00041505040B8F70895F894FFCFE8 +:1055FC00470C380D150DE10CAD0C01B60128081443 +:10560C000A321E3F4D3620AF0362032C030C039865 +:10561C0002B102CA02E302010203040506070809EB +:02562C0000007C +:00000001FF diff --git a/keyboards/hhkb/keymaps/default/keymap.c b/keyboards/hhkb/keymaps/default/keymap.c new file mode 100644 index 0000000000..bd5dd8372d --- /dev/null +++ b/keyboards/hhkb/keymaps/default/keymap.c @@ -0,0 +1,78 @@ +/* -*- eval: (turn-on-orgtbl); -*- + * default HHKB Layout + */ +#include "hhkb.h" + +#define BASE 0 +#define HHKB 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* BASE Level: Default Layer + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + + |------+------+-----------------------+------+------| + | LAlt | LGUI | ******* Space ******* | RGUI | RAlt | + |------+------+-----------------------+------+------| + */ + + [BASE] = KEYMAP( // default layer + 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_BSLS, KC_GRV, \ + 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_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + 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(HHKB), \ + KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), + + + + /* Layer HHKB: HHKB mode (HHKB Fn) + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | | | | | | + | - | End | PgD | Dow | | | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + + |------+------+----------------------+------+------+ + | **** | **** | ******************** | **** | **** | + |------+------+----------------------+------+------+ + + */ + + [HHKB] = KEYMAP( + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, 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) +{ + // 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; +}; diff --git a/keyboards/hhkb/keymaps/lxol/compiled.hex b/keyboards/hhkb/keymaps/lxol/compiled.hex new file mode 100644 index 0000000000..63d3691c4d --- /dev/null +++ b/keyboards/hhkb/keymaps/lxol/compiled.hex @@ -0,0 +1,1421 @@ +:100000000C9493070C94D7070C94D7070C94D7073C +:100010000C94D7070C94D7070C94D7070C94D707E8 +:100020000C94D7070C94D7070C949B120C946D1367 +:100030000C945D200C94D7070C94D7070C94D70729 +:100040000C94D7070C94D7070C94D7070C94D707B8 +:100050000C94D7070C94FD200C94D7070C94D70769 +:100060000C94D7070C94D7070C94D7070C94D70798 +:100070000C94D7070C94D7070C94D7070C94D70788 +:100080000C94D7070C94D7070C94D7070C94D70778 +:100090000C94D7070C94D7070C94D7070C94D70768 +:1000A0000C94D7070C94D7070C94D707DA13FC13DA +:1000B000EA14FC13EA1441146414EA14B914CC14BD +:1000C000A617A617D517D51714183418641964196C +:1000D0003F186419EF18EF185519641964195E195F +:1000E000FC18FC18FC18FC18FC18FC18FC18FC1870 +:1000F000FC18FC18FC18FC18FC18FC18FC18FC1860 +:100100000C191A19211928193219253032583A2098 +:10011000253038620A000A722F63203031323334BE +:100120003536370A0028311F0014001A001644041F +:10013000461D001B000600200021001500080007D6 +:1001400000090019000500220023001C0017000A06 +:10015000000B00110000001E0029002B00E000E150 +:1001600000E200E3002C002400250018000C000E23 +:10017000000D0010000000310035002A00C0000210 +:1001800052E500E600E700260027001200130033C6 +:10019000450F43360000002D002E0030002F0034A4 +:1001A000003800370000001F0014001A0016460433 +:1001B000441D001B00060020002100150008000758 +:1001C00000090019000500220023001C0017000A86 +:1001D000000B00110000001E0029002B00E000E1D0 +:1001E00000E700E6002C002400250018000C000E9B +:1001F000000D0010000000310035002A00C0000290 +:1002000052E500E700E60026002700120013003345 +:10021000430F45360000002D002E0030002F003423 +:10022000003800370000003B0001000100A900AACF +:10023000000100010001003C003D0001000100A898 +:10024000000100010001003E003F0001000100012B +:10025000005500570000003A00A5003900010001D8 +:100260000001000100010040004100010046004A79 +:100270000054005600000049004C002A00580001BC +:100280000001000100010042004300470048005007 +:10029000004B004D00000044004500010052004F9B +:1002A0000051004E0000001F1814181A18161804E8 +:1002B000181D181B180618201821181518081807DB +:1002C00018091819180518221823181C1817180AC5 +:1002D000180B18111800001E1829182B18E018E127 +:1002E00018E200E3002C182418251818180C180E12 +:1002F000180D1810180000311835182A18C0000100 +:1003000000E518E600E70026182718121813180150 +:10031000000100361800002D182E1830182F183440 +:10032000183818371800001F0814081A08010001AF +:10033000001D081B080608200821081508080807E2 +:1003400008090819080508220823081C0817080AC4 +:10035000080B08110800001E0829082B08E008E116 +:1003600000E200E3002C082408250818080C080EF9 +:10037000080D0810080000310835082A08C00001DF +:1003800000E500E600E300260827081208130833FA +:10039000080F08360800002D082E0830082F0834F2 +:1003A000083808370800001F1414141A141614040F +:1003B000141D141B140614201421141514081407FA +:1003C00014091419140514221423141C1417140AE4 +:1003D000140B14111400001E1429142B14E014E142 +:1003E00014E200E3002C142414251418140C140E29 +:1003F000140D1410140000311435142A14C0000117 +:1004000000E514E600E70026142714121413140163 +:10041000000100361400002D142E1430142F143453 +:10042000143814371400001F0414041A04010001C6 +:10043000001D041B040604200421041504080407FD +:1004400004090419040504220423041C0417040AE3 +:10045000040B04110400001E0429042B04E004E131 +:1004600000E200E3002C042404250418040C040E0C +:10047000040D0410040000310435042A04C00001F6 +:1004800000E500E600E30026042704120413043309 +:10049000040F04360400002D042E0430042F04340D +:1004A000043804370400000A44454255473A2065A1 +:1004B0006E61626C65642E0A005B735D004B65794A +:1004C000626F6172642073746172742E0A005B57EC +:1004D0005D005B535D005B525D005B445D005B4310 +:1004E0005D001203480048004B00420020006D00F0 +:1004F0006F00640000000C0371002E006D002E00E0 +:100500006B0000000403090409027400040100A048 +:10051000FA09040000010301010009211101000191 +:10052000223F000705810308000A090401000103B6 +:10053000010200092111010001224D00070582037B +:1005400008000A090402000103000000092111014A +:1005500000012236000705830308000A090403008E +:1005600002030000000921110100012220000705FB +:10057000840320000107050403200001120110017B +:1005800000000008EDFEFECA040101020001063170 +:10059000FF0974A1010975150025FF9520750881D3 +:1005A000020976150025FF952075089102C0050106 +:1005B0000980A101850216010026B7001A01002A50 +:1005C000B700751095018100C0050C0901A10185D6 +:1005D00003160100269C021A01002A9C0275109540 +:1005E000018100C005010902A1010901A10005095D +:1005F000190129051500250195057501810295014F +:10060000750381010501093009311581257F9502A6 +:100610007508810609381581257F950175088106C1 +:10062000050C0A38021581257F950175088106C0E1 +:10063000C005010906A101050719E029E7150025F4 +:100640000195087501810295017508810105081958 +:100650000129059505750191029501750391010523 +:1006600007190029FF150025FF950675088100C0B0 +:100670000A002530325820006B6579626F61726420 +:100680005F7265706F72743A20004B6579626F61BA +:100690007264204C4544732073746174653A20255C +:1006A000780A00646F6E652E0A00626F6F676D6175 +:1006B000676963207363616E3A202E2E2E20002915 +:1006C0000A002575002F002575005D2800256400AF +:1006D0002000256400200025640020002564007CA3 +:1006E0000025303258006D6F7573656B6579205B3E +:1006F00062746E7C782079207620685D287265703F +:100700002F61636C293A205B006D6B5F77686565CC +:100710006C5F74696D655F746F5F6D6178203D20FB +:1007200025640A006D6B5F776865656C5F6D617845 +:100730005F7370656564203D2025640A006D6B5F02 +:1007400074696D655F746F5F6D6178203D2025640D +:100750000A006D6B5F6D61785F7370656564203D45 +:100760002025640A006D6B5F696E74657276616C3A +:10077000203D2025640A006D6B5F64656C61792003 +:100780003D2025640A006D6B5F776865656C5F745A +:10079000696D655F746F5F6D6178203D2025640A27 +:1007A000006D6B5F776865656C5F6D61785F737016 +:1007B000656564203D2025640A006D6B5F74696D7A +:1007C000655F746F5F6D6178203D2025640A006D60 +:1007D0006B5F6D61785F7370656564203D20256493 +:1007E0000A006D6B5F696E74657276616C203D20E6 +:1007F00025640A006D6B5F64656C6179203D20257E +:10080000640A000A00257500363A20776865656C31 +:100810005F74696D655F746F5F6D61783A20000A7F +:1008200000257500353A20776865656C5F6D6178E5 +:100830005F73706565643A20000A00257500343ADC +:100840002074696D655F746F5F6D61783A20000A8E +:1008500000257500333A206D61785F7370656564BB +:100860003A20000A00257500323A20696E746572DC +:1008700076616C286D73293A20000A0025750031D5 +:100880003A2064656C6179282A31306D73293A20E9 +:10089000000A092D2056616C756573202D0A004DE4 +:1008A0003E004D25643E20003F0073657420646562 +:1008B0006661756C740A00433E2000776865726556 +:1008C0002064656C74613A20637572736F723D25A4 +:1008D000642C20776865656C3D25640A5365652046 +:1008E000687474703A2F2F656E2E77696B69706526 +:1008F0006469612E6F72672F77696B692F4D6F7511 +:1009000073655F6B6579730A000A092D204D6F7559 +:1009100073656B6579202D0A4553432F713A097130 +:100920007569740A313A0964656C6179282A313035 +:100930006D73290A323A09696E74657276616C28A2 +:100940006D73290A333A096D61785F737065656468 +:100950000A343A0974696D655F746F5F6D61780A76 +:10096000353A09776865656C5F6D61785F737065AE +:1009700065640A363A09776865656C5F74696D6508 +:100980005F746F5F6D61780A0A703A097072696E00 +:10099000742076616C7565730A643A097365742016 +:1009A00064656661756C74730A75703A092B310A57 +:1009B000646F776E3A092D310A706775703A092BAA +:1009C00031300A7067646F776E3A092D31300A0A48 +:1009D0007370656564203D2064656C7461202A2015 +:1009E0006D61785F7370656564202A202872657078 +:1009F000656174202F2074696D655F746F5F6D6130 +:100A000078290A003F004D3E2000433E20004C253F +:100A1000640A0074696D65725F636F756E743A2065 +:100A20002530346C580A006B6579626F6172645FBF +:100A300069646C653A2025580A006B6579626F61BC +:100A400072645F70726F746F636F6C3A2025580A1E +:100A500000686F73745F6B6579626F6172645F6C5D +:100A600065647328293A2025580A000A092D205365 +:100A70007461747573202D0A004743433A20342E65 +:100A8000392E32204156522D4C4942433A20312EC4 +:100A9000382E31204156525F415243483A20617608 +:100AA00072350A004F5054494F4E533A204C554628 +:100AB0004120424F4F544D41474943204D4F5553DC +:100AC000454B45592045585452414B455920434FB9 +:100AD0004E534F4C4520434F4D4D414E44203531F0 +:100AE000320A004255494C443A2031363731386594 +:100AF000662D6469727479202832333A33393A3476 +:100B000039204A756E2020392032303136290A00CA +:100B10005649443A2030784645454428712E6D2E7A +:100B20006B29205049443A203078434146452848B3 +:100B3000484B42206D6F6429205645523A20307848 +:100B4000303130340A00444553433A20712E6D2E23 +:100B50006B206B6579626F617264206669726D7774 +:100B600061726520666F722048484B420A000A098C +:100B70002D2056657273696F6E202D0A000A092DAB +:100B800020436F6E736F6C65202D0A4553432F71A0 +:100B90003A09717569740A6D3A096D6F7573656B01 +:100BA00065790A000A092D204D61676963202D0AC5 +:100BB000443A094465627567204D657373616765E2 +:100BC00020546F67676C650A583A094D6174726901 +:100BD00078204465627567204D6F646520546F67A7 +:100BE000676C65202D2053686F77206B6579707274 +:100BF000657373657320696E206D61747269782006 +:100C0000677269640A4B3A094B6579626F61726475 +:100C100020446562756720546F67676C65202D20DE +:100C200053686F77206B6579707265737320726596 +:100C3000706F72740A4D3A094465627567204D6F92 +:100C400075736520546F67676C650A563A09566577 +:100C50007273696F6E0A533A095374617475730A3B +:100C6000433A09416374697661746520436F6E731A +:100C70006F6C65204D6F64650A46312D4631303A00 +:100C80000953776974636820746F204C61796572C9 +:100C900020302D392028463130203D204C30290A83 +:100CA000302D393A0953776974636820746F204C8A +:100CB0006179657220302D390A4553433A095377DB +:100CC0006974636820746F204C61796572203020EC +:100CD00028616C7465726E617465206B6579203172 +:100CE000290A47524156453A095377697463682087 +:100CF000746F204C6179657220302028616C7465B6 +:100D0000726E617465206B65792032290A504155F5 +:100D100053453A094A756D7020746F20426F6F74A5 +:100D20006C6F6164657220285265736574290A4589 +:100D30003A095072696E7420454550524F4D205308 +:100D4000657474696E67730A000A002575002E6E5B +:100D50006B726F3A20000A002575002E7377617060 +:100D60005F6261636B736C6173685F6261636B7315 +:100D7000706163653A20000A002575002E73776163 +:100D8000705F67726176655F6573633A20000A0081 +:100D90002575002E6E6F5F6775693A20000A002581 +:100DA00075002E737761705F72616C745F72677526 +:100DB000693A20000A002575002E737761705F6C18 +:100DC000616C745F6C6775693A20000A00257500D4 +:100DD0002E636170736C6F636B5F746F5F636F6EB4 +:100DE00074726F6C3A20000A002575002E737761CB +:100DF000705F636F6E74726F6C5F636170736C6F42 +:100E0000636B3A20000A0025303258006B65796D1B +:100E100061705F636F6E6669672E7261773A20005A +:100E20000A002575002E6D6F7573653A20000A0063 +:100E30002575002E6B6579626F6172643A20000A35 +:100E4000002575002E6D61747269783A20000A00E1 +:100E50002575002E656E61626C653A20000A0025DA +:100E60003032580064656275675F636F6E666967EC +:100E70002E7261773A20000A00257500646566616C +:100E8000756C745F6C617965723A20003F000A6D81 +:100E90006F7573653A206F66660A000A6D6F757329 +:100EA000653A206F6E0A000A6B6579626F61726441 +:100EB0003A206F66660A000A6B6579626F61726438 +:100EC0003A206F6E0A000A6D61747269783A206F79 +:100ED00066660A000A6D61747269783A206F6E0A5C +:100EE000000A64656275673A206F66660A000A64E4 +:100EF000656275673A206F6E0A000A0A4A756D705E +:100F0000696E6720746F20626F6F746C6F616465C7 +:100F1000722E2E2E2000433E20006565636F6E66A4 +:100F200069673A0A000011241FBECFEFDAE0DEBF86 +:100F3000CDBF04B603FE24C08091E0019091E10191 +:100F4000A091E201B091E3018730904BA740B04BF4 +:100F5000B9F41092E0011092E1011092E2011092B6 +:100F6000E30114BE84B7877F84BF88E10FB6F8948D +:100F700080936000109260000FBEE0E0FFE30995EF +:100F800011E0A0E0B1E0EEE7F8E502C005900D92B7 +:100F9000A233B107D9F711E0A2E3B1E001C01D927D +:100FA000A03EB107E1F70E94D50F0C943D2C0C94A4 +:100FB0000000FF93EF93E0913201F09133013097FD +:100FC00009F00995EF91FF910895FC01859180301A +:100FD00011F0EFDFFBCF0895FF27E0E230E247FF9B +:100FE0000CC0419597FF09C0EDE260957095809522 +:100FF0009095611D711D811D911D27FF02C02195D6 +:1010000030E350E2AA27660F771F881F991FAA1F97 +:10101000A41710F0A41B63955A95A9F7AA3008F0FD +:10102000A95FA05DAF93F3956115710581059105E9 +:1010300041F7ED3211F4EF93F395F21718F43F9363 +:10104000F395FBCF8F91B5DFFA95E1F70895E9911C +:10105000F9918591803021F0853219F0AADFF9CF1E +:10106000089520E0E89455915532C1F3503311F4BE +:10107000689455915A3348F4505390F3220F022E3E +:10108000220F220F200D250FF4CF0EF42195899108 +:101090009991533619F3533729F1533559F1BC015E +:1010A00088279927E8945C3621F48991999168946E +:1010B0005591543639F446EF7EF077FF0DC08FEF2F +:1010C0009FEF0AC055374AE039F0583540E121F02A +:1010D000523642E009F00895FF93EF937DDFEF91E0 +:1010E000FF91B7CFFF93EF93FC0181918030B9F36B +:1010F00060DFFBCFFF93EF9368DFF1CFDF93CF93F8 +:10110000CDB7DEB72596A3DFCF91DF9108958FEF9E +:1011100084B980E485B957985F9A2E9A2F98ECE3AA +:10112000F1E088E08E0F11928E13FDCFE4E3F1E041 +:1011300088E08E0F11928E13FDCF8CE391E0909397 +:1011400047018093460184E391E0909345018093A9 +:1011500044010895EF92FF920F931F93CF93DF9373 +:1011600080914401909145012091460130914701C1 +:1011700030934501209344019093470180934601A9 +:10118000C0E0D0E0EE24E394F12C0FEF10E020E07B +:1011900030E085B1807C8C2BA90193E0440F551F72 +:1011A0009A95E1F7842B85B98AE18A95F1F700C019 +:1011B000E0914401F0914501EC0FFD1F808190E02A +:1011C000022E02C0959587950A94E2F780FD2F9A2A +:1011D00095E39A95F1F70000E6B52E988AE18A9595 +:1011E000F1F700C04091460150914701DA01AC0F80 +:1011F000BD1F4F9B0AC0C701022E01C0880F0A9471 +:10120000EAF780959C91892308C06C91C701022E52 +:1012100001C0880F0A94EAF7862B8C9386B56E2F4F +:1012200070E08E1728F086B590E0861B970B06C0FD +:10123000E6B5C801861B970B8E0F911D069758F0D7 +:10124000E0914401F0914501EC0FFD1F8081FA010E +:10125000EC0FFD1F80839AE19A95F1F700C02F985B +:101260002E9A8BE291E00197F1F700C000002F5F0A +:101270003F4F2830310509F08CCFA0914601B09145 +:101280004701AC0FBD1FE0914401F0914501EC0F07 +:10129000FD1F9C918081981751F00E949B206093C4 +:1012A00048017093490180934A0190934B01219624 +:1012B000C830D10509F06BCF8091D601853021F07F +:1012C0008091D601811111C060914801709149014E +:1012D00080914A0190914B010E94D1206131774267 +:1012E0008105910510F00E94202081E0DF91CF91CF +:1012F0001F910F91FF90EF9008952091460130913A +:101300004701F901E80FF11D808108950F931F93A4 +:10131000CF93DF9386E191E00E94E507C0E0D0E043 +:101320000AE011E0E0914601F0914701EC0FFD1F4A +:1013300080810E940A201F928F93DF93CF931F9387 +:101340000F930E947E0821960F900F900F900F90A0 +:101350000F900F90C830D10529F7DF91CF911F91E1 +:101360000F9108951F93CF93DF93C7E0D0E010E073 +:10137000E0914601F0914701EC0FFD1F808190E064 +:101380000E94FE1F180F219798F7812FDF91CF91B0 +:101390001F9108950895089561110BC0FC01828189 +:1013A000882321F085EE0E949A1603C085EE0E94E4 +:1013B000391780E090E0089581E0089581E0089574 +:1013C0000C94DE0908950F931F93CF93DF938C0144 +:1013D000FC01C081D181CE010E94C81EBE010E94C5 +:1013E0008C0AEC01B8010E94E009882309F48DC041 +:1013F000F8018281882309F44AC080915701811144 +:101400001FC0C431F0E5DF0709F051C00E94E209B6 +:1014100081E0809357010E948F2090935601809322 +:10142000550110924E011092500110924F011092EE +:10143000520110925101109254011092530165C053 +:1014400080915501909156010E94A720883C9105FA +:1014500070F480914E01E82FF0E0EE0FFF1FE15B8A +:10146000FE4FD183C0838F5F80934E014EC0C4383E +:1014700080E5D80721F0C538D04501F13AC0F80120 +:101480008281882341F010924C0182E01EC0C43852 +:10149000E0E5DE0759F580914C01811106C086E236 +:1014A0000E949A1686E20E94391782E01CC0C43856 +:1014B000F0E5DF0741F3C538D045D9F4F801828162 +:1014C000882331F010924D0180E20E9461171DC007 +:1014D00080914D01811106C087E20E949A1687E231 +:1014E0000E94391780E20E9468170FC0C538D045A6 +:1014F00029F381E080934C0180934D01C801DF9175 +:10150000CF911F910F910C94DC0980E0DF91CF9176 +:101510001F910F9108950895E72FF0E098E0899FBB +:10152000E00DF11D112483E0EE0FFF1F8A95E1F716 +:10153000E60FF11DEE0FFF1FE95DFE4F85919491BF +:101540000895880F991FFC01EB55F0408591949107 +:101550000895880F991FFC01EB5DFE4F85919491D2 +:1015600008950F931F93CF93DF93EC01811520E330 +:10157000920750F5C11580E2D80708F0C3C0CB3BF5 +:10158000D10590F4C83AD10508F06AC0C53AD10532 +:1015900008F05BC0C430D10508F0D4C1219709F030 +:1015A000CEC101E010E00EC2CF3FD10511F008F02E +:1015B000C9C1C03FD10508F0A2C0CE01805E91092B +:1015C000089708F4BFC1BBC1C13090E5D90709F441 +:1015D000A2C020F5C0318FE4D80770F4C11590E4A3 +:1015E000D90708F094C0C11521E3D20708F0A7C1BC +:1015F000DD278E01106CE6C1C115D04509F09FC1F1 +:101600000E94CF198FEF94E32CE08150904020404E +:10161000E1F700C000000E942221D4C1C11597E566 +:10162000D90758F4C03121E5D20708F020C1C431F0 +:1016300080E5D80708F479C082C1CE0190578115A2 +:10164000904108F07CC1DF7077C1C53AD10509F43B +:101650007BC1C63AD10509F07AC102E810E4B2C1F3 +:10166000C83AD10509F476C1C93AD10509F475C162 +:10167000CA3AD10509F474C1CB3AD10509F473C152 +:10168000CC3AD10509F472C1CD3AD10509F471C142 +:10169000C03BD10509F470C1CE3AD10509F46FC140 +:1016A000CF3AD10509F46EC1C13BD10509F46DC132 +:1016B000C23BD10509F46CC1C33BD10509F46BC130 +:1016C000C43BD10509F46AC1C53BD10509F469C120 +:1016D000C63BD10509F468C1C73BD10509F467C110 +:1016E000C83BD10509F466C1C93BD10509F465C100 +:1016F000CA3BD10509F464C100E014E463C18E0162 +:10170000106560C1CE019F700E94A90A5CC1DF70A4 +:101710008E01106A57C187EA94E00E94E507809124 +:10172000C10181608093C1014DC10E94C822811115 +:1017300002C00E94AE220E94E52290E09093E00158 +:101740008093DF01C23080E5D80721F48091DF016A +:10175000816086C0C43090E5D90721F48091DF0113 +:1017600082607EC0C63020E5D20721F48091DF017F +:10177000846076C0C83080E5D80719F48091DF0115 +:1017800027C0CA3090E5D90721F48091DF0180613C +:1017900067C0CC3020E5D20721F48091DF01806260 +:1017A0005FC0CE3080E5D80721F48091DF018064EE +:1017B00057C0C03190E5D90721F48091DF018068DE +:1017C0004FC0C23120E5D20729F48091DF01846047 +:1017D000886046C0C33080E5D80721F48091DF01DE +:1017E0008E7F3EC0C53090E5D90721F48091DF019E +:1017F0008D7F36C0C73020E5D20721F48091DF010C +:101800008B7F2EC0C93080E5D80719F48091DF01A5 +:1018100026C0CB3090E5D90721F48091DF018F7E7F +:101820001FC0CD3020E5D20721F48091DF018F7DEC +:1018300017C0CF3080E5D80721F48091DF018F7B7E +:101840000FC0C13190E5D90721F48091DF018F7776 +:1018500007C0C331D04531F48091DF018B7F877F92 +:101860008093DF018091DF010E94E922ABC08D2FC0 +:1018700099278F70992781309105D9F49E012370A3 +:10188000332702C0880F991F2A95E2F79C688E01C2 +:1018900044E0000F111F4A95E1F700271370802BD9 +:1018A000912B53E0CC0FDD1F5A95E1F7C076DD2771 +:1018B0002FC08230910531F4DC2FCC278E01016FCF +:1018C000106A80C08330910569F4CE018370992736 +:1018D00001E010E002C0000F111F8A95E2F7C80175 +:1018E0009C680FC084309105B9F4CE0183709927AC +:1018F00001E010E002C0000F111F8A95E2F7C80155 +:101900009A6823E0CC0FDD1F2A95E1F7C07ED770DF +:101910008C010C2B1D2B56C08530910531F4DC2F2A +:10192000CC278E01046F106A4DC0069709F04AC09B +:10193000CF71DD27DC2FCC278E01106243C000E081 +:1019400010E040C08E013EC001E810E43BC003E857 +:1019500010E438C002EE14E435C009EE14E432C0DD +:101960000AEE14E42FC005EB14E42CC006EB14E4DB +:1019700029C007EB14E426C00CEC14E423C00DECE2 +:1019800014E420C003E815E41DC00AE815E41AC0F9 +:1019900002E915E417C004E915E414C001E216E4F5 +:1019A00011C003E216E40EC004E216E40BC005E227 +:1019B00016E408C006E216E405C007E216E402C019 +:1019C0000AE216E4C801DF91CF911F910F910895AB +:1019D000E72FF0E098E0899FE00DF11D112483E0EE +:1019E000EE0FFF1F8A95E1F7E60FF11DEE0FFF1FC7 +:1019F000E95DFE4F85919491803E9105E0F4803C35 +:101A0000910558F58133910509F46FC048F4893286 +:101A1000910509F463C08A32910509F46DC072C062 +:101A200089339105E9F082389105D1F0853391052C +:101A300009F44DC067C0833E910581F138F4803EC2 +:101A40009105B9F0823E9105D9F05CC0863E9105C2 +:101A500061F1873E9105A1F155C00E94A10A089548 +:101A60002091DF0120FD02C021FF4CC080EE90E0FC +:101A700049C08091DF0180FFF9CF89E390E042C047 +:101A80008091DF0182FF0EC08091DF0184FF03C0DF +:101A900080E090E037C083EE90E034C08091DF01B9 +:101AA00082FFF2CF82EE90E02DC08091DF0183FFB4 +:101AB0000BC08091DF0184FDEBCF87EE90E022C068 +:101AC0008091DF0183FFF5CF86EE90E01BC080910F +:101AD000DF0185FF07C089E290E014C08091DF013B +:101AE00085FFF9CF85E390E00DC08091DF0186FF8F +:101AF00007C08AE290E006C08091DF0186FFF9CF3F +:101B000081E390E00E94B10A089508950C94850D38 +:101B10008091630108959FB7F89410925A019FBF76 +:101B20009091D601943009F057C09091E9009F70D0 +:101B30003091EC00232F217030FD20E8922B24E01F +:101B40002093E9002091EB0020FF43C02091EE009C +:101B500027FF3FC020915801222321F02091E80067 +:101B600025FF37C01092580126E03091E80035FD7E +:101B700015C03091D601343061F53091EB0035FD60 +:101B800028C0215021F481E08093580122C0EFE960 +:101B9000FFE03197F1F700C00000E7CF8093F1003C +:101BA0008091E80085FD0AC08091E80080FFFCCFAD +:101BB0008091E8008E778093E80006C08FB7F89494 +:101BC00021E020935A018FBF9F709093E90080E03D +:101BD00008959F709093E9008FEF0895CF93DF935E +:101BE00000D01F92CDB7DEB79C018091D601843022 +:101BF00019F593E099833B832A839093E9008FEF53 +:101C00009091E800815095FD06C095ED9A95F1F709 +:101C100000008111F5CF8091E80085FF0DC040E004 +:101C200050E063E070E0CE0101960E948B1080913D +:101C3000E8008E778093E8000F900F900F90DF916F +:101C4000CF910895CF93DF9300D01F92CDB7DEB729 +:101C50002091D601243021F522E029839B838A83B9 +:101C600083E08093E9008FEF9091E800815095FD2B +:101C700006C095ED9A95F1F700008111F5CF80919E +:101C8000E80085FF0DC040E050E063E070E0CE0169 +:101C900001960E948B108091E8008E778093E80077 +:101CA0000F900F900F90DF91CF9108952091D60162 +:101CB0002430F1F422E02093E9002FEF3091E80086 +:101CC000215035FD06C035ED3A95F1F700002111A0 +:101CD000F5CF2091E80025FF0BC040E050E065E023 +:101CE00070E00E948B108091E8008E778093E8006E +:101CF0000895CF93DF932091D601243039F521E068 +:101D00002093E9002FEF3091E800215035FD06C007 +:101D100035ED3A95F1F700002111F5CF2091E8005B +:101D200025FF14C0EC0140E050E068E070E00E9444 +:101D30008B108091E8008E778093E80088E0FE01A8 +:101D4000ABE5B1E001900D928A95E1F7DF91CF917B +:101D500008958EED94E00E94E5078091D5018111F0 +:101D600009C00E9420120E947D128091E2008460CE +:101D70008093E20008958AED94E00E94E5071092B6 +:101D8000D501089586ED94E00C94E50782ED94E08A +:101D90000C94E5078EEC94E00E94E5070C94572024 +:101DA000209159012F5F822F62E30E94CD2B99234E +:101DB00019F02093590108951092590180915A0108 +:101DC000882371F18091D601843041F58091E9003A +:101DD0008F702091EC00922F917020FD90E8892B5C +:101DE00094E09093E9009091EB0090FF14C09091E3 +:101DF000EE0097FF10C09091E80095FF03C010928D +:101E0000F100F9CF9091E80090FF05C09091E800B3 +:101E10009E779093E8008F708093E90010925A01AA +:101E2000089542E061EC81E00E949A1142E061EC89 +:101E300082E00E949A1142E061EC83E00E949A11D4 +:101E400042E261EC84E00C949A118091D8018330D5 +:101E500009F453C030F4813071F0823009F48CC041 +:101E600008958A3009F478C08B3009F45EC0893057 +:101E700009F09AC020C08091D701813A09F094C03E +:101E80008091E800877F8093E8008091DB0190914A +:101E9000DC01892B21F468E08BE591E003C060E070 +:101EA00080E090E070E00E94D6108091E8008B778F +:101EB0008093E80008958091D701813209F074C0C1 +:101EC0008091DB019091DC01892B09F06DC080913C +:101ED000E800877F8093E8008091E80082FD05C0DC +:101EE0008091D6018111F8CF5FC08091F10080937D +:101EF00063018091E8008B7753C08091D701813ACC +:101F000009F052C08091DB019091DC01892B09F02E +:101F10004BC08091E800877F8093E8008091E800C3 +:101F200080FFFCCF80910A0136C08091D7018132B9 +:101F3000D9F58091DB019091DC01892BA9F5809185 +:101F4000E800877F8093E8000E94CF118091D9013B +:101F500080930A010C94CF198091D701813221F529 +:101F60008091E800877F8093E8000E94CF118091E4 +:101F7000DA018093640108958091D701813AA1F438 +:101F80008091E800877F8093E8008091E80080FFDF +:101F9000FCCF809164018093F1008091E8008E77FE +:101FA0008093E8000C94CF11089584B7877F84BF95 +:101FB00088E10FB6F89480936000109260000FBE25 +:101FC00090E080E80FB6F8948093610090936100F0 +:101FD0000FBE0E94AF150E9420120E947D128091B8 +:101FE000E20084608093E2008BE89DE00E94F91F8C +:101FF00078940E9402150E94B11580E091E00E9441 +:102000001D158DEB94E00E94E5078091D601853087 +:1020100089F489EB94E00E94E5070E9420208091DA +:10202000D401882391F30E944920882371F30E94F0 +:102030007510EBCF0E94D515E8CF292F3327233019 +:102040003105C9F064F42130310581F022303105C9 +:1020500009F043C084E790E028E035E042C0213237 +:102060003105F1F02232310541F137C082E190E0D3 +:102070002CE735E036C099278130910541F0823058 +:10208000910541F0892B49F5E4E0F5E005C0E6EF64 +:10209000F4E002C0E2EEF4E0849190E09F0121C000 +:1020A0006430D8F4E62FF0E0EE0FFF1FE15EFE4F44 +:1020B0002081318189E090E014C0643070F470E0D8 +:1020C000FB01EE0FFF1FE95EFE4F20813181FB0116 +:1020D000ED5EFE4F808190E004C080E090E020E063 +:1020E00030E0FA0131832083089580E189BD82E1E7 +:1020F00089BD09B400FEFDCF8091D8008F7D80930B +:10210000D8008091E00082608093E0008091E00040 +:1021100081FDFCCF0895CF92DF92EF92FF920F9353 +:102120001F93CF93DF93EC018B016A010E94EE11A4 +:10213000811133C0C114D10439F0F601808191813D +:10214000081B190BC80FD91FE12CF12C0115110523 +:1021500019F18091E80085FD16C08091E8008E7726 +:102160008093E800C114D10449F0F6018081918187 +:10217000E80EF91EF182E08285E00FC00E94EE11A8 +:10218000882321F30AC089918093F100015011093D +:10219000FFEFEF1AFF0ADACF80E0DF91CF911F91B6 +:1021A0000F91FF90EF90DF90CF9008952091DD0187 +:1021B0003091DE012617370748F06115710539F4B3 +:1021C0002091E8002E772093E80001C0B90140E09B +:1021D00061157105A9F12091D601222309F443C0AC +:1021E000253009F442C02091E80023FD40C0209131 +:1021F000E80022FD32C02091E80020FFE9CF4091A5 +:10220000F3002091F20030E0342BFC01CF01611586 +:10221000710559F02830310540F481918093F10027 +:10222000615071092F5F3F4FF1CF41E028303105F8 +:1022300009F040E02091E8002E772093E800C8CF15 +:102240004111C9CF0AC08091D601882361F0853041 +:1022500061F08091E80083FD0AC08091E80082FF70 +:10226000F2CF80E0089582E0089583E0089581E050 +:1022700008952091DD013091DE012617370748F0DF +:102280006115710539F42091E8002E772093E8005C +:1022900001C0B901FC0120E06115710591F1809147 +:1022A000D601882309F440C0853009F43FC08091ED +:1022B000E80083FD3DC08091E80082FD2FC0809141 +:1022C000E80080FFE9CF2091F3008091F20090E0D8 +:1022D000922B6115710559F08830910540F42491D5 +:1022E0002093F1003196615071090196F2CF21E0FF +:1022F000089709F020E08091E8008E778093E8004D +:10230000CBCF2111CCCF0AC08091D601882361F0B8 +:10231000853061F08091E80083FD0AC08091E8007B +:1023200082FFF2CF80E0089582E0089583E008956F +:1023300081E00895982F973058F59093E900981709 +:1023400039F07091EC002091ED005091F00003C045 +:10235000242F762F50E021FF19C03091EB003E7FF3 +:102360003093EB003091ED003D7F3093ED003091E4 +:10237000EB0031603093EB007093EC002093ED00A4 +:102380005093F0002091EE0027FF07C09F5FD3CF4E +:102390008F708093E90081E0089580E00895809136 +:1023A000D70187FF11C08091E80082FD05C08091B0 +:1023B000D6018111F8CF11C08091E8008B770BC056 +:1023C0008091D601882349F08091E80080FFF8CF02 +:1023D0008091E8008E778093E80008952091E400D2 +:1023E0003091E50095E64091EC00842F817040FF2C +:1023F00022C08091E80080FD1CC08091D601882316 +:1024000091F0853091F08091EB0085FD10C04091F6 +:10241000E4005091E5004217530729F39A019150C7 +:1024200011F784E0089582E0089583E0089581E043 +:10243000089580E008954091E80042FFDECF0895BE +:102440000E948E120E949612E0EEF0E08081816080 +:102450008083E8EDF0E080818F77808319BCA7ED61 +:10246000B0E08C918E7F8C9380818F7E80831092E0 +:10247000D50108950F931F93CF93DF930E948E127F +:102480000E949612C8EDD0E088818F77888388817A +:102490008068888388818F7D888319BC1092D601DB +:1024A0001092D2011092D4011092D30100EE10E0EC +:1024B000F80180818B7F808388818160888342E0FE +:1024C00060E080E00E949A11E1EEF0E080818E7F72 +:1024D0008083E2EEF0E0808181608083808188608B +:1024E0008083F80180818E7F8083888180618883EA +:1024F000DF91CF911F910F910895E8EDF0E0808179 +:102500008F7E8083E7EDF0E080818160808384E0CE +:1025100082BF81E08093D5010C943A12E8EDF0E09F +:1025200080818E7F80831092E20008951092DA00FD +:102530001092E10008951F920F920FB60F9211248E +:102540002F933F934F935F936F937F938F939F93BB +:10255000AF93BF93EF93FF938091E10082FF0BC095 +:102560008091E20082FF07C08091E1008B7F809321 +:10257000E1000E94D00E8091DA0080FF1FC08091A0 +:10258000D80080FF1BC08091DA008E7F8093DA0034 +:102590008091D90080FF0DC080E189BD82E189BDB5 +:1025A00009B400FEFDCF81E08093D6010E94A90E00 +:1025B00005C019BC1092D6010E94BB0E8091E100AB +:1025C00080FF19C08091E20080FF15C08091E20079 +:1025D0008E7F8093E2008091E20080618093E20030 +:1025E0008091D80080628093D80019BC85E08093E8 +:1025F000D6010E94C60E8091E10084FF30C0809118 +:10260000E20084FF2CC080E189BD82E189BD09B46C +:1026100000FEFDCF8091D8008F7D8093D8008091FF +:10262000E1008F7E8093E1008091E2008F7E8093B5 +:10263000E2008091E20081608093E2008091D2010B +:10264000882311F084E007C08091E30087FD02C079 +:1026500081E001C083E08093D6010E94CA0E809180 +:10266000E10083FF29C08091E20083FF25C08091B3 +:10267000E100877F8093E10082E08093D601109291 +:10268000D2018091E1008E7F8093E1008091E20091 +:102690008E7F8093E2008091E20080618093E2006F +:1026A00042E060E080E00E949A118091F000886032 +:1026B0008093F0000E94C20EFF91EF91BF91AF9105 +:1026C0009F918F917F916F915F914F913F912F914A +:1026D0000F900FBE0F901F9018951F920F920FB67C +:1026E0000F9211242F933F934F935F936F937F9398 +:1026F0008F939F93AF93BF93CF93DF93EF93FF930A +:10270000C091E900CF708091EC00D82FD17080FD8E +:10271000D0E81092E9008091F000877F8093F0006C +:1027200078940E94B1131092E9008091F0008860C3 +:102730008093F000CD2BCF70C093E900FF91EF9113 +:10274000DF91CF91BF91AF919F918F917F916F91C9 +:102750005F914F913F912F910F900FBE0F901F905F +:1027600018951F93CF93DF93CDB7DEB7AA970FB617 +:10277000F894DEBF0FBECDBFE7EDF1E088E08E0F2D +:102780009091F10091938E13FBCF0E94250F8091C1 +:10279000E80083FF1FC18091D7019091D801492F94 +:1027A00050E04A30510508F015C1FA01EA5AFF4FCE +:1027B0000C94ED2B803881F0823809F00BC18091A8 +:1027C000DB018F708093E9008091EB0085FB882707 +:1027D00080F91092E90006C08091D3019091D40154 +:1027E000911182609091E800977F9093E800809328 +:1027F000F1001092F100C8C0282F2D7F09F0EAC027 +:10280000882319F0823061F0E5C08091D9018130D0 +:1028100009F0E0C0933009F080E08093D4012BC030 +:102820008091D901811127C08091DB018F7009F45B +:10283000D1C08093E9002091EB0020FF1CC09330B1 +:1028400021F48091EB00806214C09091EB009061C4 +:102850009093EB0021E030E0A90102C0440F551F26 +:102860008A95E2F74093EA001092EA008091EB002B +:1028700088608093EB001092E9008091E800877FE8 +:1028800086C08111A7C01091D9011F778091E30004 +:102890008078812B8093E3008091E800877F80938C +:1028A000E8000E94CF118091E80080FFFCCF80916A +:1028B000E30080688093E300111102C082E001C050 +:1028C00083E08093D60186C08058823008F082C0B1 +:1028D0008091D9019091DA018C3D53E0950779F50B +:1028E00083E08A838AE289834FB7F894DE011396E6 +:1028F00020E03EE051E2E32FF0E050935700E491F6 +:1029000020FF03C0E295EF703F5FEF708E2F90E0E5 +:10291000EA3010F0C79601C0C0968D939D932F5F4B +:10292000243149F74FBF8091E800877F8093E8000A +:102930006AE270E0CE0101960E94D61014C0AE018A +:102940004F5F5F4F6091DB010E941D10BC0100973B +:1029500009F440C09091E800977F9093E800898146 +:102960009A810E9439118091E8008B778093E8006A +:1029700031C0803879F58091E800877F8093E80046 +:102980008091D2018093F1008091E8008E7780934E +:10299000E8000E94CF111EC081111CC09091D90186 +:1029A0009230C0F48091E800877F8093E800909394 +:1029B000D2010E94CF118091D201811106C0809175 +:1029C000E30087FD02C081E001C084E08093D6016E +:1029D0000E94110F8091E80083FF0AC08091E800F7 +:1029E000877F8093E8008091EB0080628093EB000A +:1029F000AA960FB6F894DEBF0FBECDBFDF91CF9180 +:102A00001F910895CF938091D6018823A1F0C091A2 +:102A1000E900CF709091EC00892F817090FD80E8E3 +:102A2000C82B1092E9008091E80083FD0E94B11349 +:102A3000CF70C093E900CF91089590936A0180937D +:102A400069010895E0916901F0916A01309721F0E0 +:102A50000190F081E02D099480E00895EF92FF92BB +:102A60000F931F93CF93DF93E0916901F0916A0177 +:102A70003097B1F18C010280F381E02D09958091AE +:102A8000C10182FF2DC080FF04C088E796E00E944C +:102A9000E507E80118E082E7E82E86E0F82E80914D +:102AA000C10180FF0BC088811F928F93FF92EF922C +:102AB0000E947E080F900F900F900F90115021965A +:102AC0001111EDCF8091C10180FF0AC080E796E02F +:102AD000DF91CF911F910F91FF90EF900C94E5073C +:102AE000DF91CF911F910F91FF90EF900895E091AA +:102AF0006901F0916A01309721F00480F581E02DA1 +:102B00000994089520916701309168018217930715 +:102B100071F09093680180936701E0916901F091F1 +:102B20006A01309721F00680F781E02D099408951D +:102B300020916501309166018217930771F090939F +:102B4000660180936501E0916901F0916A01309717 +:102B500021F00084F185E02D0994089508950C94E6 +:102B6000AE150E9486200E9487080C948021CF9386 +:102B7000DF931F92CDB7DEB79091C10192FF10C0D5 +:102B800090FF0EC01F928F932AE836E03F932F9359 +:102B900089830E947E080F900F900F900F9089817B +:102BA0000F90DF91CF910C94860D9F92AF92BF92C0 +:102BB000CF92DF92EF92FF920F931F93CF93DF9309 +:102BC00000D000D000D0CDB7DEB70E94AA0807E041 +:102BD00010E0AA24A394B12C902E802F0E947D098E +:102BE000980124593E4F6901F901F080F826A1F4BB +:102BF0000150110988F78FEF89838A831B820E9415 +:102C00008F208160782F9D838C8349815A816B81CD +:102C10008D810E946C162FC09091C10191FF04C05C +:102C20008E830E9486098E8127E030E0A501022E66 +:102C300001C0440F0A94EAF7E42E4F21C1F0298322 +:102C40009A828E2191E009F490E09B830E948F206C +:102C50008160782F9D838C8349815A816B818D811E +:102C60000E946C16F6018081E826E08204C02150A3 +:102C70003109E0F6BDCF0E94EA2410916B010E9459 +:102C800022151817B9F00E94221580936B01269621 +:102C90000FB6F894DEBF0FBECDBFDF91CF911F916D +:102CA0000F91FF90EF90DF90CF90BF90AF909F90EB +:102CB0000C94B71526960FB6F894DEBF0FBECDBFA5 +:102CC000DF91CF911F910F91FF90EF90DF90CF9008 +:102CD000BF90AF909F900895CF93DF93CDB7DEB7AD +:102CE0002B970FB6F894DEBF0FBECDBF4F8358872A +:102CF00069877A878B87DE01119686E0FD01119244 +:102D00008A95E9F785E0FE01379601900D928A9544 +:102D1000E1F749815A816B817C818D819E810E947E +:102D20006D1C2B960FB6F894DEBF0FBECDBFDF91A2 +:102D3000CF910895CF93882309F499C0C82F8CEFC1 +:102D40008C0F813A48F48C2F0E94562981118FC034 +:102D50008C2F0E94471F0CC080E28C0F883058F4E3 +:102D6000C77081E001C0880FCA95EAF70E94831FEF +:102D7000CF910C94CA1F8BE58C0F833078F4C53A41 +:102D800029F0C63A31F083E890E005C081E890E090 +:102D900002C082E890E0CF910C94821588E58C0FF8 +:102DA000833108F064C0C83A39F1C93A41F1CA3AEE +:102DB00049F1CB3A51F1CC3A59F1CD3A61F1C03BEE +:102DC00069F1CE3A71F1CF3A79F1C13B81F1C23B61 +:102DD00089F1C33B91F1C43B99F1C53BA1F1C63BDD +:102DE000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B3D +:102DF000C9F180E090E038C082EE90E035C089EE05 +:102E000090E032C08AEE90E02FC085EB90E02CC0BD +:102E100086EB90E029C087EB90E026C08CEC90E038 +:102E200023C08DEC90E020C083E891E01DC08AE8CB +:102E300091E01AC082E991E017C084E991E014C0E2 +:102E400081E292E011C083E292E00EC084E292E05F +:102E50000BC085E292E008C086E292E005C087E2FE +:102E600092E002C08AE292E0CF910C949815CF9143 +:102E70000895882329F19CEF980F913A18F40E9445 +:102E8000641F0DC090E2980F983058F4877091E05D +:102E900001C0990F8A95EAF7892F0E94891F0C9427 +:102EA000CA1F9BE5980F933020F480E090E00C94CB +:102EB0008215885A833120F480E090E00C949815B4 +:102EC0000895882321F00E94831F0C94CA1F08953F +:102ED000882321F00E94891F0C94CA1F08957F92B5 +:102EE0008F929F92AF92BF92CF92DF92EF92FF921A +:102EF0000F931F93CF93DF931F92CDB7DEB77C0163 +:102F0000C62E772EFC01058102950F7012811111DA +:102F10000E94A01F0E94401F882379F0112369F0AE +:102F200080E28C0D883048F082E00E94291F0E94C8 +:102F3000401F91E0D82ED92601C0D12CE72DE29573 +:102F4000EF70F0E0E05AFF4F0C94ED2B872D807F5F +:102F5000072D0F70882311F00295007F112389F04F +:102F6000002309F498C180E28C0D883020F4802F72 +:102F70000E94831F03C0802F0E94931F0E94CA1FBC +:102F80008AC18C2D0E943917002309F49DC180E26B +:102F90008C0D883020F4802F0E94891F03C0802F61 +:102FA0000E94991F0E94CA1F8FC1872D807F972D75 +:102FB0009F70803211F4892F03C0892F8295807F02 +:102FC000CC2021F0F1E0CF16A1F01DC0112339F083 +:102FD000002319F1013009F50E94B31F75C10023C8 +:102FE00019F0013009F470C189830E94B61F8981EC +:102FF00010C1112321F0063008F066C10EC0053063 +:1030000008F062C106C1112359F0002331F0F70125 +:10301000958190FF40C19F7095830E94611754C1B4 +:10302000002309F4F6C03DC1872D869586958370EF +:1030300090E0009719F0019761F046C1112321F04B +:103040008C2D972D937002C080E090E00E94821535 +:103050003BC1112321F08C2D972D937002C080E08D +:1030600090E00E94981530C18C2D112319F00E9418 +:10307000702302C00E94D8230E945D2425C1872DA1 +:10308000837009F052C011111FC18C2D8295869555 +:103090008770880F880F9C2D9F70892E912CA12CF2 +:1030A000B12C082E04C0880C991CAA1CBB1C0A94C5 +:1030B000D2F7C4FE14C00FE010E020E030E0B90108 +:1030C000A80104C0440F551F661F771F8A95D2F7C9 +:1030D000CB01BA01609570958095909503C060E032 +:1030E00070E0CB01272D26952695237030E0223005 +:1030F000310569F02330310589F0682979298A2959 +:103100009B292130310571F00E94B51DDDC0682971 +:1031100079298A299B290E94D11DD6C00E94B51DFC +:10312000C501B4010E94991DCFC0112319F0872D4C +:10313000817001C08695882309F4C6C08C2D8295C4 +:1031400086958770880F880F9C2D9F70892E912CF3 +:10315000A12CB12C082E04C0880C991CAA1CBB1CE5 +:103160000A94D2F7C4FE14C00FE010E020E030E073 +:10317000B901A80104C0440F551F661F771F8A9527 +:10318000D2F7CB01BA01609570958095909503C0F8 +:1031900060E070E0CB01272D269526952370422F05 +:1031A00050E04230510569F04330510589F06829FB +:1031B00079298A299B294130510571F00E948F1E7F +:1031C00083C0682979298A299B290E94AB1E7CC06B +:1031D0000E948F1EC501B4010E94731E75C08C2D04 +:1031E00090E0FC01E05EF109E531F10508F04FC027 +:1031F000E059FF4F0C94ED2B0C2D0F70872D8F7124 +:10320000112321F00E940C1E802F07CF0E942D1E3B +:10321000802F0E94681758C0112341F0053008F034 +:1032200053C0872D8F710E94521E4EC0063008F089 +:103230004BC0F7CF112339F0872D8F710E940C1EE0 +:1032400043C01123C9F3872D8F710E942D1E3CC0EE +:10325000112329F0872D8F710E94F71D35C00E9420 +:10326000ED1D32C0112351F0172D1F71812F0E94C7 +:103270000C1E63E0812F0E94201F26C081E00E9467 +:10328000291F023008F182E00E94291F1DC011236E +:1032900031F0002389F28C2D0E949A1615C000236C +:1032A00091F28C2D0E9439170FC0472D4F706C2D55 +:1032B000C7010E94CC090E94111D06C0472D4F7006 +:1032C0006C2DC7010E948B0ADD20F9F00E941C1FA3 +:1032D00080FD1BC0F70112820E94161F0E940C1E67 +:1032E000C7010E9494190E94161F0F90DF91CF9181 +:1032F0001F910F91FF90EF90DF90CF90BF90AF9014 +:103300009F908F907F900C942D1E0F90DF91CF9106 +:103310001F910F91FF90EF90DF90CF90BF90AF90F3 +:103320009F908F907F9008950F931F93CF93DF937B +:10333000EC01888199812B813C81232BB9F09F3F3F +:1033400011F48F3F99F0CE010E94E309882371F0B8 +:10335000688179818A810E94121F8C010E94C71E98 +:103360000E948E1DB801CE010E946F17DF91CF9190 +:103370001F910F9108950E94A01F0E94B01F0E94EC +:10338000751F0E94CA1F0E9490250E945D2480E044 +:1033900090E00E94821580E090E00C9498150E94C5 +:1033A000901F0C94BB190E94071F292F22952F7084 +:1033B00030E02C3031054CF42A3031056CF42250C9 +:1033C000310922303105A8F407C02C30310569F0ED +:1033D0002F30310551F00DC0803F69F018F4803E68 +:1033E00040F409C0843F29F406C093FB882780F984 +:1033F000089580E0089581E00895CF93DF9300D091 +:1034000000D01F92CDB7DEB70F900F900F900F90A6 +:103410000F90DF91CF910895CF93DF9300D000D02C +:1034200000D0CDB7DEB726960FB6F894DEBF0FBE3C +:10343000CDBFDF91CF9108951F93CF93DF93C091BC +:10344000740116E080917501C81799F0D0E01C9FB7 +:10345000F0011D9FF00D1124EA58FE4F408151816B +:1034600062817381848195810E940C1A2196C770B4 +:10347000E9CFDF91CF911F9108954091A60150911E +:10348000A7016091A8017091A9018091AA01909172 +:10349000AB010C940C1A8091AB0182958F7009F0EE +:1034A00054C08091A801882309F44FC08091740111 +:1034B000A09175016091A6017091A7014091A901A9 +:1034C0005091AA01B6E08A1709F43FC090E0411577 +:1034D0005105C1F17F3F11F46F3FA1F1B89FF00199 +:1034E000B99FF00D1124EA58FE4F218172132AC0B2 +:1034F0002081621327C02281211124C023813481BD +:103500002417350710F421503109241B350B283CB2 +:103510003105C0F42091AB012F7020612093AB01E5 +:1035200026E0289FF001299FF00D1124E558FE4F59 +:1035300080818F708061808386EA91E00E94941977 +:103540000C941C1A01968770BECF0895CF92DF921B +:10355000EF92FF920F931F93CF93DF93CDB7DEB718 +:1035600062970FB6F894DEBF0FBECDBF8C0185E029 +:10357000F801DE011D9601900D928A95E1F7D801C0 +:103580004C9111965C91119712966C91129713962B +:10359000CD90DC9014973091A6017091A701809195 +:1035A000A9019091AA01009709F46BC17F3F19F41A +:1035B0003F3F09F466C1E090A801EE2009F4C0C0C5 +:1035C0002091AB01C816D90628F0F601E81BF90BCB +:1035D000CF0104C0809590958C0D9D1DFF24F39420 +:1035E000883C910578F0F12C207F09F0C6C07C2D35 +:1035F000D98AC88A89890E94FD1986EA91E00E94C9 +:103600009419B1C0822F807F09F046C0751314C091 +:10361000341312C0611110C02F7020612093AB01D0 +:103620000E943D1A86EA91E00E9494198091AB01B4 +:10363000D80115968C932EC0CD2819F15F3F11F457 +:103640004F3FF9F0F62E61111CC08091740120915A +:10365000750136E0821709F45AC090E0389FF001F6 +:10366000399FF00D1124EA58FE4F7181571306C09F +:103670007081471303C07281711103C00196877076 +:10368000E9CFF62E662309F418C18091AB01816061 +:103690008093AB01F12C11C1751308C0341306C01F +:1036A000611104C08091AB01D801C3C04D875E8712 +:1036B0008D859E856A8B0E94D3196A898823E1F1E2 +:1036C0006623D1F12091AB01822F82958F7090E01B +:1036D000029774F08091A6019091A70198878F833B +:1036E0001986DB86CA862C87CE0107960E9494191C +:1036F00086E0F801A6EAB1E001900D928A95E1F723 +:103700000E944B1A0E943D1AFF24F394D6C04D87A5 +:103710005E878D859E850E94071F292F22952F7019 +:1037200030E0223031050CF0BCC09F7009F0B6C00B +:10373000805E883008F4C1C0C8010E949419E4CFAB +:10374000C816D90608F453C0F601E81BF90BCF01DF +:10375000883C910508F450C0F12C7C2DD98AC88A88 +:1037600089890E94FD19E6EAF1E086E0DF011D92F9 +:103770008A95E9F70E943D1AA0C0751314C034134E +:1037800012C0611110C08091AB01F8018583C8019E +:103790000E94941986E0E6EAF1E0DF011D928A9525 +:1037A000E9F7FE2C8AC04D875E878D859E856A8BE2 +:1037B0000E94D3196A89882309F4BECF662309F4CD +:1037C000BBCF2091AB01822F82958F7090E0029742 +:1037D0000CF48ECF8091A6019091A7019A838983E2 +:1037E0001B82DD82CC822E83CE0101967FCF809515 +:1037F00090958C0D9D1DACCFF62E662309F49CCFC1 +:1038000075132EC034132CC02091AB0120FD1FC0B6 +:10381000822F82958F70D9F0D80115962C93159729 +:103820008F3049F08F5F982F9295907F822F8F7005 +:10383000892B15968C93C8010E94941986E0F80193 +:10384000A6EAB1E001900D928A95E1F793CF86E068 +:10385000F801A6EAB1E001900D928A95E1F72DC03A +:103860004D875E878D859E850E94D319811140CF3B +:103870008091AB0181608093AB01C8010E949419D3 +:103880001CC0662309F458CF4D875E878D859E85C1 +:103890000E94D319882309F44FCF2ACF811148CF32 +:1038A0000CC0243031050CF047CF9F7009F440CF95 +:1038B000F8019581907F09F03BCF8F2D62960FB66E +:1038C000F894DEBF0FBECDBFDF91CF911F910F9156 +:1038D000FF90EF90DF90CF9008951F93CF93DF93E9 +:1038E000CDB7DEB72C970FB6F894DEBF0FBECDBFB5 +:1038F0004F83588769877A878B879C87CE01079685 +:103900000E94A61A882369F08F8198852A853B85B5 +:10391000232BF1F19F3F09F063C08F3F09F060C096 +:1039200037C086E0FE013796DE01119601900D92B8 +:103930008A95E1F76F817885EA85FB85309741F1BB +:103940007F3F11F46F3F21F12091750130E0C901F3 +:103950000196877099274091740150E0841795076C +:1039600009F447C069837A83FD83EC8396E0929FD4 +:10397000D001939FB00D1124AA58BE4FFE0131967D +:1039800001900D929A95E1F7809375010E941C1A9F +:1039900016E080917401909175018917C1F1189F0B +:1039A000C00111248A589E4F0E94A61A882379F1DB +:1039B000E09174011E9FF0011124EA58FE4F4081EE +:1039C000518162817381848195810E940C1A80915A +:1039D000740190E001968770992780937401D9CF84 +:1039E0004F81588569857A858B859C850E940C1A44 +:1039F000CFCF0E94CF191092750110927401E6EAA0 +:103A0000F1E086E0DF011D928A95E9F7C1CF2C969F +:103A10000FB6F894DEBF0FBECDBFDF91CF911F91DF +:103A20000895EF92FF920F931F93CF93DF938C0132 +:103A3000009709F46CC0F12CEE24E394E801219680 +:103A4000F8018491843740F4843008F051C081300B +:103A500081F0823019F15BC0853709F444C0A8F1C8 +:103A60009CE7980F903708F052C08F770E94391763 +:103A700041C00E5F1F4FFE01C49180E28C0F883061 +:103A800048F4C7708E2D01C0880FCA95EAF70E94CE +:103A9000A31F14C08C2F0E949A162DC00E5F1F4FBB +:103AA000FE01C49180E28C0F883058F4C7708E2DCF +:103AB00001C0880FCA95EAF70E94A91F0E94CA1F79 +:103AC0001AC08C2F0E94391716C00E5F1F4FFE01BF +:103AD000C491CC2381F08FE99FE00197F1F700C0FA +:103AE0000000C150F6CF0E5F1F4FFE01F49003C0DF +:103AF0000E949A168E018F2D882309F49FCFEFE93B +:103B0000FFE03197F1F700C000008150F5CFDF9161 +:103B1000CF911F910F91FF90EF90089508956093BA +:103B2000B0017093B1018093B2019093B3010C94F2 +:103B3000BB190F931F930091B0011091B101209117 +:103B4000B2013091B301DC01CB01802B912BA22B70 +:103B5000B32B8093B0019093B101A093B201B093C5 +:103B6000B3011F910F910C94BB190F931F930091F8 +:103B7000B0011091B1012091B2013091B301DC018B +:103B8000CB0180239123A223B3238093B001909390 +:103B9000B101A093B201B093B3011F910F910C94A6 +:103BA000BB190F931F930091B0011091B1012091A7 +:103BB000B2013091B301DC01CB0180279127A2270C +:103BC000B3278093B0019093B101A093B201B09359 +:103BD000B3011F910F910C94BB191092AC0110927C +:103BE000AD011092AE011092AF010C94BB1941E0EF +:103BF00050E060E070E004C0440F551F661F771F5F +:103C00008A95D2F74093AC015093AD016093AE0119 +:103C10007093AF010C94BB1941E050E060E070E09C +:103C200004C0440F551F661F771F8A95D2F78091F5 +:103C3000AC019091AD01A091AE01B091AF01482BC4 +:103C4000592B6A2B7B2B4093AC015093AD016093B1 +:103C5000AE017093AF010C94BB1941E050E060E0FD +:103C600070E004C0440F551F661F771F8A95D2F776 +:103C700040955095609570958091AC019091AD0103 +:103C8000A091AE01B091AF01482359236A237B2351 +:103C90004093AC015093AD016093AE017093AF01BE +:103CA0000C94BB1941E050E060E070E004C0440FA8 +:103CB000551F661F771F8A95D2F78091AC019091AE +:103CC000AD01A091AE01B091AF01482759276A27F5 +:103CD0007B274093AC015093AD016093AE0170938C +:103CE000AF010C94BB190F931F930091AC0110917D +:103CF000AD012091AE013091AF01DC01CB01802BF1 +:103D0000912BA22BB32B8093AC019093AD01A09388 +:103D1000AE01B093AF011F910F910C94BB190F939B +:103D20001F930091AC011091AD012091AE01309133 +:103D3000AF01DC01CB0180239123A223B323809325 +:103D4000AC019093AD01A093AE01B093AF011F9170 +:103D50000F910C94BB190F931F930091AC0110911C +:103D6000AD012091AE013091AF01DC01CB01802784 +:103D70009127A227B3278093AC019093AD01A09324 +:103D8000AE01B093AF011F910F910C94BB19089530 +:103D9000CF92DF92EF92FF920F931F93CF93DF9317 +:103DA0008C01C090B001D090B101E090B201F090D0 +:103DB000B3018091AC019091AD01A091AE01B091A1 +:103DC000AF01C82AD92AEA2AFB2ACFE1D0E0D701DD +:103DD000C6010C2E04C0B695A795979587950A94B1 +:103DE000D2F780FF06C0B8018C2F0E94E80C019723 +:103DF00021F4219760F780E001C08C2FDF91CF91F3 +:103E00001F910F91FF90EF90DF90CF900895CF9387 +:103E1000DF93EC010E94C81EBE010E94E80CDF91F6 +:103E2000CF910895CB010E94071F08958091B4019E +:103E300085958595859508958091B401877008953D +:103E400098E0899F90011124262B2093B4010C94B3 +:103E50000C1E2091B401809582238093B401982F89 +:103E6000977069F430E0482F552747FD5095241787 +:103E7000350729F08595859585950C942D1E089517 +:103E80009091B401977081E009F480E00895209149 +:103E90000B0130910C01F90132969FEF40E05191F6 +:103EA000581789F09F3F19F4511101C0942F4F5FAB +:103EB0004630A9F79F3F39F0F901E90FF11D97FD51 +:103EC000FA9582830895089520910B0130910C0199 +:103ED000F9013296285F3F4F9081981301C01082FC +:103EE0003196E217F307C1F7089581E090E0E09181 +:103EF0000B01F0910C01E80FF91F10820196883038 +:103F00009105A9F708959091C001892B8093C00174 +:103F1000089580959091C00189238093C0010895F0 +:103F20001092C00108959091BF01892B8093BF0129 +:103F3000089580959091BF0189238093BF010895D2 +:103F40001092BF0108959091BE01892B8093BE010C +:103F5000089580959091BE0189238093BE010895B4 +:103F60001092BE0108958093B50108951092B50195 +:103F7000089580910B0190910C01FC0131969C01F8 +:103F8000285F3F4F80E0919191118F5FE217F30717 +:103F9000D1F70895E0910B01F0910C018091C001DF +:103FA0008083E0910B01F0910C0190818091BF0121 +:103FB000892B8083E0910B01F0910C01908180911D +:103FC000BE01892B80838091B501882361F0E09147 +:103FD0000B01F0910C019081892B80830E94B91F05 +:103FE00081111092B50180910B0190910C010C94FC +:103FF0002E159093330180933201089520E00097AD +:1040000039F0AC0141505109842395232F5FF7CF3C +:10401000822F08958295982F9C7C392F369536955E +:10402000282F237344E0249FC0011124932F982B41 +:10403000292F2A7A2695892F8575880F822B089536 +:104040008091D601843021F11092C20120E488E1F0 +:1040500090E00FB6F894A895809360000FBE20936F +:10406000600080E00E94860D83B7817F846083BFFB +:1040700083B7816083BF7894889583B78E7F83BF31 +:1040800088E10FB6F89480936000109260000FBE34 +:1040900008950E94CA090E94AA080E94CB090E94A2 +:1040A000B20991E0811101C090E0892F08950E942A +:1040B000CF190E9422150C94860D1F920F920FB6F5 +:1040C0000F9211248F939F93AF93BF938091C2015E +:1040D000811113C08091C3019091C401A091C501C9 +:1040E000B091C6014196A11DB11D8093C30190936B +:1040F000C401A093C501B093C601BF91AF919F9138 +:104100008F910F900FBE0F901F90189582E084BD85 +:1041100093E095BD9AEF97BD80936E0008952FB7F9 +:10412000F8948091C3019091C401A091C501B09110 +:10413000C6012FBF08952FB7F8946091C301709105 +:10414000C4018091C5019091C6012FBF0895CF92FF +:10415000DF92EF92FF920F931F932FB7F894409145 +:10416000C3015091C4016091C5017091C6012FBF78 +:104170006A017B01EE24FF248C0120E030E0C016B0 +:10418000D106E206F30610F4415051099A01281BAA +:10419000390BC9011F910F91FF90EF90DF90CF90E5 +:1041A0000895CF92DF92EF92FF920F931F932FB754 +:1041B000F894C090C301D090C401E090C501F09084 +:1041C000C6012FBF97018601061B170B280B390B61 +:1041D000C616D706E806F90618F0C901B80106C0E8 +:1041E000C901B80161507109810991091F910F91AD +:1041F000FF90EF90DF90CF9008951F920F920FB62F +:104200000F9211248F939F93AF93BF938091C3011B +:104210009091C401A091C501B091C6010196A11D64 +:10422000B11D8093C3019093C401A093C501B093C5 +:10423000C601BF91AF919F918F910F900FBE0F90CC +:104240001F9018950E942012F8942FEF87EA91E6AC +:10425000215080409040E1F700C0000087E090EBE3 +:10426000DC018093E0019093E101A093E201B0931F +:10427000E3019CE088E10FB6F894A8958093600074 +:104280000FBE90936000FFCFEF92FF920F931F93AA +:10429000CF93DF93D82FC7E08C2F0E947D0907E0D2 +:1042A00010E0E82EF12CC701002E02C095958795ED +:1042B0000A94E2F780FF09C0602F7C2F80E00E9403 +:1042C0008C0AD81302C081E006C00150110958F7CA +:1042D000C15010F780E0DF91CF911F910F91FF90B7 +:1042E000EF900895CF93C82F8CE20E944421882339 +:1042F00021F08C2FCF910C94442180E0CF91089530 +:10430000CF930E94C822811102C00E94AE228AEA85 +:1043100096E00E94E507C5E6C15049F00E94AA0850 +:104320008FE39CE90197F1F700C00000F5CF83EA25 +:1043300096E00E94E50789E20E94722181110CC17A +:104340008AE20E94722181110E94AE2285E00E94C1 +:10435000722181110E9422210E94D3228093C101E7 +:1043600087E00E9472218823A9F18BE10E947221CB +:10437000882351F08091C10181FB222720F991E02F +:10438000922790FB81F90EC08EE00E947221882353 +:1043900061F08091C10182FB222720F991E09227F0 +:1043A00090FB82F98093C10115C080E10E947221C7 +:1043B0009091C101882341F093FB222720F981E0ED +:1043C000822780FB93F904C0892F809580FB90F9A8 +:1043D0009093C1018091C1010E94D7220E94E522E1 +:1043E0008093DF0180EE0E947221882341F080914A +:1043F000DF01982F909590FB80F98093DF0189E38E +:104400000E947221882359F08091DF0181FB2227CD +:1044100020F991E0922790FB81F98093DF0182EEF1 +:104420000E947221882359F08091DF0182FB2227AC +:1044300020F991E0922790FB82F98093DF0186EECC +:104440000E947221882359F08091DF0183FB22278B +:1044500020F991E0922790FB83F98093DF0183EEAE +:104460000E947221882359F08091DF0184FB22276A +:1044700020F991E0922790FB84F98093DF0185E396 +:104480000E947221882359F08091DF0185FB222749 +:1044900020F991E0922790FB85F98093DF0181E379 +:1044A0000E947221882359F08091DF0186FB222728 +:1044B00020F991E0922790FB86F98093DF0181E15A +:1044C0000E947221882359F08091DF0187FB222707 +:1044D00020F991E0922790FB87F98093DF0180918A +:1044E000DF010E94E92287E20E947221C82F8EE13B +:1044F0000E9472218111C2608FE10E94722181119C +:10450000C46080E20E9472218111C86081E20E9431 +:1045100072218111C06182E20E9472218111C06208 +:1045200083E20E9472218111C06484E20E947221A0 +:10453000882311F0C06802C0CC2329F08C2F0E9480 +:10454000E0226C2F03C00E94DC22682F70E080E024 +:1045500090E0CF910C948F1DCF9108956DEE7EEF7A +:1045600080E090E00E94272C60E082E090E00E94D2 +:10457000152C60E083E090E00E94152C60E084E060 +:1045800090E00E94152C60E085E090E00C94152CE2 +:1045900080E090E00E940F2C21E08D3E9E4F09F0BC +:1045A00020E0822F089582E090E00C94072C682F81 +:1045B00082E090E00C94152C83E090E00C94072CA2 +:1045C000682F83E090E00C94152C84E090E00C942C +:1045D000072C682F84E090E00C94152C8091C90181 +:1045E00080FF0BC06091100185E0689FB00111242D +:1045F00075956795759567952BC081FF09C060918A +:10460000100185E0689FB00111247595679520C061 +:1046100082FF07C06091100185E0689FB0011124FE +:1046200017C09091CA019923D1F060910F0196179C +:1046300088F72091100185E0289F90011124929F16 +:10464000A001939F500D112470E0CA010E94D92B44 +:104650006038710540F46115710539F002C065E0FC +:1046600070E0862F08958FE7089581E00895809186 +:10467000C90180FF08C060910E0170E075956795D3 +:104680007595679521C081FF06C060910E0170E0AD +:104690007595679519C082FF04C060910E0170E0A6 +:1046A00010C09091CA019923C1F060910D01961735 +:1046B000A0F780910E01899FC001112470E00E9433 +:1046C000D92B6038710528F46115710521F0862F0A +:1046D00008958FE7089581E0089561E070E0F4CFD8 +:1046E000803F21F40E94EE22819504C0813F29F48D +:1046F0000E94EE228093CD010895823F21F40E9412 +:10470000EE22819504C0833F29F40E94EE2280931B +:10471000CC010895893F19F40E94372305C08A3FD0 +:1047200031F40E94372381958093CE0108958B3F09 +:1047300021F40E943723819504C08C3F29F40E9404 +:1047400037238093CF010895843F21F48091CB01DA +:10475000816017C0853F21F48091CB01826011C038 +:10476000863F21F48091CB0184600BC0873F21F408 +:104770008091CB01886005C0883F31F48091CB01E6 +:1047800080618093CB0108958D3F21F48091C90110 +:1047900081600BC08E3F21F48091C901826005C009 +:1047A0008F3F29F48091C90184608093C9010895E5 +:1047B000803F39F48091CD0187FF6CC01092CD010C +:1047C00069C0813F29F48091CD011816BCF362C005 +:1047D0009091CC01823F29F497FF5CC01092CC01EC +:1047E00059C0833F19F41916CCF354C0893F41F4E2 +:1047F0008091CE0118160CF04DC01092CE014AC027 +:104800008A3F29F48091CE0187FF44C0F6CF8B3FC9 +:1048100039F48091CF0187FF3DC01092CF013AC09B +:104820008C3F29F48091CF011816BCF333C0843F2C +:1048300021F48091CB018E7F17C0853F21F48091B8 +:10484000CB018D7F11C0863F21F48091CB018B7FFE +:104850000BC0873F21F48091CB01877F05C0883F43 +:1048600031F48091CB018F7E8093CB0113C08D3FBB +:1048700021F48091C9018E7F0BC08E3F21F480917D +:10488000C9018D7F05C08F3F29F48091C9018B7FBD +:104890008093C9018091CC0181110EC08091CD011E +:1048A00081110AC08091CE01811106C08091CF0193 +:1048B000811102C01092CA0108958091C10183FF45 +:1048C0007EC086EE96E00E94E5078091CB011F92A4 +:1048D0008F9381EE96E09F938F930E947E088FEDD9 +:1048E00096E00E94E5078091CC01282F332727FD11 +:1048F00030953F938F938CED96E09F938F930E941A +:104900007E088AED96E00E94E5078091CD01282F70 +:10491000332727FD30953F938F9387ED96E09F9344 +:104920008F930E947E0885ED96E00E94E5078091B6 +:10493000CE01282F332727FD30953F938F9382EDAB +:1049400096E09F938F930E947E0880ED96E00E94F0 +:10495000E5078091CF01282F332727FD30953F931E +:104960008F938DEC96E09F938F930E947E088AEC44 +:1049700096E00E94E5078091CA011F928F9387EC11 +:1049800096E09F938F930E947E0885EC96E00E94AC +:10499000E5078091C9011F928F9382EC96E09F9367 +:1049A0008F930E947E088FEB96E00E94E5078DB7FB +:1049B0009EB74C960FB6F8949EBF0FBE8DBF8BEC82 +:1049C00091E00E9477150E948F209093C8018093F8 +:1049D000C70108951F93CF93DF938091C7019091F2 +:1049E000C8010E94A720AC019091CA01992321F02F +:1049F0002091110130E006C0209112018AE0289F29 +:104A0000900111244217530708F486C08091CC010D +:104A1000C091CD01D091CE011091CF01811107C07D +:104A2000C11176C0D11174C0111172C075C09F3F01 +:104A300019F09F5F9093CA01181624F40E94EE2289 +:104A40008093CC018091CC0187FF05C00E94EE22AB +:104A500081958093CC011C1624F40E94EE22809351 +:104A6000CD018091CD0187FF05C00E94EE22819586 +:104A70008093CD016091CC01662339F1C091CD01C5 +:104A8000CC2319F1772767FD7095872F972F0E9408 +:104A9000DE2A23E333E343E35FE30E94422B0E94D9 +:104AA000AB2A6093CC016C2F772767FD7095872F19 +:104AB000972F0E94DE2A23E333E343E35FE30E9460 +:104AC000422B0E94AB2A6093CD011D1624F40E9454 +:104AD00037238093CE018091CE0187FF05C00E94CD +:104AE000372381958093CE01111624F40E94372339 +:104AF0008093CF018091CF0187FF05C00E943723AB +:104B000081958093CF01DF91CF911F910C945D240B +:104B10009F3F09F08ECF96CFDF91CF911F910895DF +:104B2000EBECF1E085E0DF011D928A95E9F7109248 +:104B3000CA011092C901089589E099E00E94E50731 +:104B40001F9281E08F931F9285E08F938BEB98E00B +:104B50009F938F930E947E080F900F900F900F905D +:104B60000F900F9008958330E9F128F4813061F0BF +:104B7000823009F10895853009F462C008F449C013 +:104B8000863009F474C0089580911201262F30E018 +:104B9000280F311D2F3F310524F4680F6093120157 +:104BA00003C08FEF80931201809112011F928F93A7 +:104BB00084EF97E072C080911101262F30E0280F1A +:104BC000311D2F3F310524F4680F6093110103C09C +:104BD0008FEF80931101809111011F928F9382EECC +:104BE00097E05BC080911001262F30E0280F311D27 +:104BF0002F3F310524F4680F6093100103C08FEF3D +:104C000080931001809110011F928F938FEC97E099 +:104C100044C080910F01262F30E0280F311D2F3F17 +:104C2000310524F4680F60930F0103C08FEF809368 +:104C30000F0180910F011F928F938AEB97E02DC097 +:104C400080910E01262F30E0280F311D2F3F3105B6 +:104C500024F4680F60930E0103C08FEF80930E0160 +:104C600080910E011F928F9381EA97E016C0809188 +:104C70000D01262F30E0280F311D2F3F310524F480 +:104C8000680F60930D0103C08FEF80930D01809139 +:104C90000D011F928F9386E897E09F938F930E9458 +:104CA0007E080F900F900F900F900895833081F140 +:104CB00028F4813059F08230D1F00895853009F41C +:104CC00049C0B8F1863009F456C0089580911201A8 +:104CD000681720F4861B8093120102C01092120103 +:104CE000809112011F928F9387E797E054C08091C3 +:104CF0001101681720F4861B8093110102C01092E5 +:104D00001101809111011F928F9385E697E043C0B6 +:104D100080911001681720F4861B8093100102C057 +:104D200010921001809110011F928F9382E597E0FD +:104D300032C080910F01681720F4861B80930F0109 +:104D400002C010920F0180910F011F928F938DE38B +:104D500097E021C080910E01681720F4861B809394 +:104D60000E0102C010920E0180910E011F928F93CE +:104D700084E297E010C080910D01681720F4861B33 +:104D800080930D0102C010920D0180910D011F92C0 +:104D90008F9389E097E09F938F930E947E080F90F6 +:104DA0000F900F900F900895CF93C82F1F928F935D +:104DB0008EE09AE09F938F930E947E0881E090E0BE +:104DC000A0E0B0E0BC01CD0104C0660F771F881FD2 +:104DD000991FCA95D2F70E948F1D0F900F900F90C8 +:104DE0000F90CF910C94CF19CF938732B0F58E31BD +:104DF00008F04AC28E3009F4C4C100F5873009F4C6 +:104E00008DC1A8F4863009F045C28091C101817F2F +:104E10008E7F8093C1018DE79BE00E94E50786E1CC +:104E20009FE00E94E50781E08093D10175C1883041 +:104E300009F43FC08B3009F46BC12CC2863109F4F0 +:104E4000E6C120F4803109F4B0C124C2893109F4EB +:104E5000C7C18B3109F481C11DC2883309F458C11F +:104E600050F4893209F412C2853309F40FC2873233 +:104E700009F40CC20FC2833409F408C228F48A333F +:104E800008F408C2895303C2883409F003C20E949F +:104E9000CF198AEF9EE00E94E5079FEF23ED80E3A4 +:104EA000915020408040E1F700C000000E94222184 +:104EB00033C18AE19FE00E94E5078CE79EE00E94F3 +:104EC000E5070E94DC221F928F9389E79EE09F9363 +:104ED0008F930E947E0887E79EE00E94E5070E946C +:104EE000D322C82F84E69EE00E94E5071F92CF934D +:104EF0008FE59EE09F938F930E947E088DE59EE054 +:104F00000E94E50783E59EE00E94E5078C2F8170F3 +:104F10001F928F9380E59EE09F938F930E947E085F +:104F20008EE49EE00E94E50784E49EE00E94E5078F +:104F3000C1FB882780F91F928F9381E49EE09F93A5 +:104F40008F930E947E088FE39EE00E94E50783E333 +:104F50009EE00E94E507C2FB882780F91F928F938D +:104F600080E39EE09F938F930E947E088EE29EE0F6 +:104F70000E94E50785E29EE00E94E507C3FBCC277F +:104F8000C0F91F92CF9382E29EE09F938F930E947D +:104F90007E0880E29EE00E94E5070E94E522C82F7D +:104FA0008CE09EE00E94E5071F92CF9387E09EE091 +:104FB0009F938F930E947E0885E09EE00E94E50704 +:104FC0008CEE9DE00E94E5078C2F81701F928F93DD +:104FD00089EE9DE09F938F930E947E088DB79EB7C8 +:104FE00080960FB6F8949EBF0FBE8DBF87EE9DE0F2 +:104FF0000E94E50780ED9DE00E94E507C1FB882740 +:1050000080F91F928F938DEC9DE09F938F930E9468 +:105010007E088BEC9DE00E94E50789EB9DE00E94F5 +:10502000E507C2FB882780F91F928F9386EB9DE0EE +:105030009F938F930E947E0884EB9DE00E94E5077A +:1050400082EA9DE00E94E507C3FB882780F91F9252 +:105050008F938FE99DE09F938F930E947E088DE947 +:105060009DE00E94E50783E99DE00E94E507C4FBFF +:10507000882780F91F928F9380E99DE09F938F93FB +:105080000E947E088EE89DE00E94E5078CE79DE087 +:105090000E94E507C5FB882780F91F928F9389E757 +:1050A0009DE09F938F930E947E0887E79DE00E947A +:1050B000E5078BE59DE00E94E507C6FB882780F9A0 +:1050C0001F928F9388E59DE09F938F930E947E08A7 +:1050D00086E59DE00E94E5078EE49DE00E94E507DD +:1050E000C7FBCC27C0F91F92CF938BE49DE09F9321 +:1050F0008F930E947E0889E49DE00E94E5078DB7AA +:105100009EB74C960FB6F8949EBF0FBE8DBF04C0DD +:1051100084EA9BE00E94E507C1E0C1C08091C10123 +:10512000C82FC095C170C0FB80F98093C101CC230A +:1051300049F08EEE9EE00E94E5078091C1018660F5 +:10514000886048C081EE9EE00E94E5078091C10121 +:10515000897F877F8093C101DFCF9091C10191FB4F +:10516000CC27C0F981E0C827892FC0FB81F9809343 +:10517000C101CC2319F084ED9EE027C086EC9EE0AF +:10518000C9CF9091C10192FBCC27C0F981E0C8271B +:10519000892FC0FB82F98093C101CC2319F087EBE2 +:1051A0009EE013C087EA9EE0B5CF9091C10193FBCA +:1051B000CC27C0F981E0C827892FC0FB83F98093F1 +:1051C000C101CC2351F08BE99EE00E94E50780915C +:1051D000C10181608093C10162C08EE89EE09ACFD8 +:1051E0008EE69BE00E94E50786E49BE00E94E507CF +:1051F00080E19BE00E94E50783EE9AE00E94E507CC +:1052000084EA9AE00E94E50789E79AE083CF8BE67B +:105210009AE00E94E5070E9422151F928F9381E574 +:105220009AE09F938F930E947E0880910A011F92BB +:105230008F938AE39AE09F938F930E947E088091D8 +:1052400064011F928F9387E29AE09F938F930E944D +:105250007E088091C3019091C401A091C501B091D5 +:10526000C601BF93AF939F938F9383E19AE09F937F +:105270008F930E947E088DB79EB742960FB6F89422 +:105280009EBF0FBE8DBF48CF8D5101C080E00E94F0 +:10529000D42642CF8CE89EE00E94E507C0E08C2F28 +:1052A000CF91089580E0089580E00895CF93C82FAE +:1052B0008091D101813071F020F0823009F44BC02F +:1052C00042C1E0910B01F0910C018081823209F022 +:1052D0003CC107C0E0910B01F0910C01808182324A +:1052E00061F48C2F0E945229811104C08C2F0E94DE +:1052F000F4262FC081E090E02CC08C2F0E9454290E +:10530000811126C0C431E1F070F4CB3081F0C0319E +:10531000D1F40E949C2586E09AE00E94E50782E095 +:105320008093D10115C0C93259F0C83361F48DE7BB +:105330009BE00E94E5078AE09AE00E94E50708C02A +:105340001092D10104C184E09AE00E94E507FFC0F9 +:1053500081E08170FEC0C43228F5CE3108F0C1C0B2 +:10536000CB30A1F1D0F4C73009F0D3C08EE18093E7 +:10537000120182E3809311018AE08093100184E19D +:1053800080930F0188E080930E0188E280930D01E5 +:105390008AEA98E00E94E507BFC0C33149F1C431F1 +:1053A000C1F0B7C0CB3409F4A9C028F4C93289F0E0 +:1053B000C83361F0AEC0C13509F49EC0C23509F4EE +:1053C00099C0CE3409F0A5C06AE09EC00E949C2519 +:1053D000A3C08091D001882319F01092D0019CC005 +:1053E00087EB98E00E94E50781E08093D101B1C08E +:1053F00081E998E00E94E5078FE798E00E94E507C1 +:10540000809112011F928F938CE798E09F938F9366 +:105410000E947E088AE798E00E94E50788E698E007 +:105420000E94E507809111011F928F9385E698E015 +:105430009F938F930E947E0883E698E00E94E50781 +:1054400084E598E00E94E507809110011F928F93F8 +:1054500081E598E09F938F930E947E088FE498E007 +:105460000E94E5078EE398E00E94E50780910F0116 +:105470001F928F938BE398E09F938F930E947E08F7 +:1054800089E398E00E94E50784E298E00E94E5073E +:1054900080910E011F928F9381E298E09F938F93EA +:1054A0000E947E088FE198E00E94E50788E098E07E +:1054B0000E94E50780910D011F928F9385E098E08F +:1054C0009F938F930E947E0883E098E00E94E507F7 +:1054D0008DB79EB748960FB6F8949EBF0FBE8DBF8E +:1054E0001BC0CE51EC2FF0E0E95DFE4F8081809330 +:1054F000D00112C061E003C061E006C06AE08091A3 +:10550000D0010E94B32508C08091D0010E94562688 +:1055100003C088EA98E013C08091D001882369F025 +:105520001F928F9382EA98E09F938F930E947E0848 +:105530000F900F900F900F9004C08FE998E00E9499 +:10554000E50781E006C01092D10180E002C080E052 +:1055500000CFCF91089504D06894B1118DC0089503 +:1055600070D088F09F5790F0B92F9927B751A0F0CD +:10557000D1F0660F771F881F991F1AF0BA95C9F7E7 +:1055800012C0B13081F077D0B1E0089574C0672FB8 +:10559000782F8827B85F39F0B93FCCF38695779597 +:1055A0006795B395D9F73EF4909580957095619580 +:1055B0007F4F8F4F9F4F0895E89409C097FB3EF4AB +:1055C00090958095709561957F4F8F4F9F4F992350 +:1055D000A9F0F92F96E9BB279395F69587957795CE +:1055E0006795B795F111F8CFFAF4BB0F11F460FF8E +:1055F0001BC06F5F7F4F8F4F9F4F16C0882311F0E6 +:1056000096E911C0772321F09EE8872F762F05C0F9 +:10561000662371F096E8862F70E060E02AF09A9594 +:10562000660F771F881FDAF7880F9695879597F989 +:10563000089557FD9058440F551F59F05F3F71F082 +:105640004795880F97FB991F61F09F3F79F08795E9 +:105650000895121613061406551FF2CF4695F1DF72 +:1056600008C0161617061806991FF1CF8695710502 +:10567000610508940895E894BB2766277727CB0136 +:1056800097F908950BD078C069D028F06ED018F043 +:10569000952309F05AC05FC01124EECFCADFA0F3F2 +:1056A000959FD1F3950F50E0551F629FF001729FB7 +:1056B000BB27F00DB11D639FAA27F00DB11DAA1FD6 +:1056C000649F6627B00DA11D661F829F2227B00D23 +:1056D000A11D621F739FB00DA11D621F839FA00DAE +:1056E000611D221F749F3327A00D611D231F849FFE +:1056F000600D211D822F762F6A2F11249F57504055 +:105700008AF0E1F088234AF0EE0FFF1FBB1F661FEF +:10571000771F881F91505040A9F79E3F510570F0A8 +:1057200014C0AACF5F3FECF3983EDCF386957795E3 +:105730006795B795F795E7959F5FC1F7FE2B880FA3 +:10574000911D9695879597F9089597F99F6780E839 +:1057500070E060E008959FEF80EC089500240A94C3 +:105760001616170618060906089500240A9412163C +:105770001306140605060895092E0394000C11F46F +:10578000882352F0BB0F40F4BF2B11F460FF04C01C +:105790006F5F7F4F8F4F9F4F0895991B79E004C033 +:1057A000991F961708F0961B881F7A95C9F7809560 +:1057B000089597FB072E16F4009407D077FD09D0C3 +:1057C0000E94F32B07FC05D03EF4909581959F4FE6 +:1057D0000895709561957F4F0895EE0FFF1F059016 +:1057E000F491E02D0994AA1BBB1B51E107C0AA1F2D +:1057F000BB1FA617B70710F0A61BB70B881F991F72 +:105800005A95A9F780959095BC01CD010895F99915 +:10581000FECF92BD81BDF89A992780B50895A8E181 +:10582000B0E042E050E00C942F2C262FF999FECFE7 +:1058300092BD81BDF89A019700B4021639F01FBAE3 +:1058400020BD0FB6F894FA9AF99A0FBE0895019602 +:10585000272F0E94162C0C94152CDC01CB01FC0187 +:10586000F999FECF06C0F2BDE1BDF89A319600B4B9 +:0E5870000D9241505040B8F70895F894FFCFC4 +:10587E00880D790E560E220EEE0D01B60128081473 +:10588E000A321E3F4D36203106E405AE058E051A4E +:10589E000533054C056505010203040506070809D5 +:0258AE000000F8 +:00000001FF diff --git a/keyboards/hhkb/keymaps/lxol/keymap.c b/keyboards/hhkb/keymaps/lxol/keymap.c new file mode 100644 index 0000000000..ccf1e07042 --- /dev/null +++ b/keyboards/hhkb/keymaps/lxol/keymap.c @@ -0,0 +1,208 @@ +/* -*- eval: (turn-on-orgtbl); -*- + * lxol HHKB Layout + */ +#include "hhkb.h" + +#define BASE 0 +#define WIN 1 +#define HHKB 2 +#define RGUILEV 3 +#define LGUILEV 4 +#define RALTLEV 5 +#define LALTLEV 6 + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Layer 0: Default Layer + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + + |------+------+-------+------+------| + | LAlt | LGUI | Space | RGUI | RAlt | + |------+------+-------+------+------| + */ + + [BASE] = KEYMAP( // layer 0 : default + + + 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_BSLS, KC_GRV, \ + 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_BSPC, \ + KC_LCTL, LT(LALTLEV,KC_A), LT(LGUILEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV,KC_L), LT(RALTLEV,KC_SCLN), KC_QUOT, KC_FN0, \ + 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(HHKB), \ + KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT), + + + + /* Layer 1: HHKB mode (HHKB Fn) + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | | | | | | + | - | End | PgD | Dow | | | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + + |---+---+---+---+---| + | | | | | | + |---+---+---+---+---| + */ + + [HHKB] = KEYMAP( + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + + + /* Layer LGUI: All keys with RGUI modifier + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + + |------+------+-------+------+------| + | LAlt | LGUI | Space | RGUI | RAlt | + |------+------+-------+------+------| + */ + + [RGUILEV] = KEYMAP( // Right GUI layer by KC_L + + RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV), \ + RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC), \ + RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), KC_FN0, \ + RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS, \ + KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT), + + /* Layer LGUI: All keys with LGUI modifier + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + + |------+------+-------+------+------| + | LAlt | LGUI | Space | LGUI | RAlt | + |------+------+-------+------+------| + */ + + [LGUILEV] = KEYMAP( // Right GUI layer by KC_L + + LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV), \ + LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC), \ + LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), KC_FN0, \ + KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS, \ + KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT), + + /* Layer LALT: All keys with RALT modifier + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + + |------+------+-------+------+------| + | LAlt | LGUI | Space | RGUI | RAlt | + |------+------+-------+------+------| + */ + + [RALTLEV] = KEYMAP( // Right ALT layer by KC_L + + RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV), \ + RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC), \ + RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), KC_FN0, \ + RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS, \ + KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT), + + /* Layer LALT: All keys with LALT modifier + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | | + |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| + + |------+------+-------+------+------| + | LAlt | LGUI | Space | LGUI | RAlt | + |------+------+-------+------+------| + */ + + [LALTLEV] = KEYMAP( // Right ALT layer by KC_L + + LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV), \ + LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC), \ + LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), KC_FN0, \ + KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS, \ + KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT), + + + /* Layer WIN: Win layer + |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---| + | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | | + |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | | + |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---| + + |------+------+-------+------+------| + | LGui | LAlt | Space | RGui | Ralt | + |------+------+-------+------+------| + */ + + [WIN] = KEYMAP( // BASE level with swapped GUI/ALT + + + 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_BSLS, KC_GRV, \ + 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_BSPC, \ + KC_LCTL, LT(LGUILEV,KC_A), LT(LALTLEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV,KC_L), LT(RGUILEV,KC_SCLN), KC_QUOT, KC_FN0, \ + 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(HHKB), \ + KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)}; + + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT) // RControl with tap Enter* +}; + +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; +}; diff --git a/keyboards/hhkb/matrix.c b/keyboards/hhkb/matrix.c new file mode 100644 index 0000000000..2dfb2f5e1f --- /dev/null +++ b/keyboards/hhkb/matrix.c @@ -0,0 +1,204 @@ +/* +Copyright 2011 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 . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "timer.h" +#include "matrix.h" +#include "hhkb_avr.h" +#include +#include "suspend.h" +#include "lufa.h" + + +// matrix power saving +#define MATRIX_POWER_SAVE 10000 +static uint32_t matrix_last_modified = 0; + +// matrix state buffer(1:on, 0:off) +static matrix_row_t *matrix; +static matrix_row_t *matrix_prev; +static matrix_row_t _matrix0[MATRIX_ROWS]; +static matrix_row_t _matrix1[MATRIX_ROWS]; + + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ +#ifdef DEBUG + debug_enable = true; + debug_keyboard = true; +#endif + + KEY_INIT(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00; + for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00; + matrix = _matrix0; + matrix_prev = _matrix1; +} + +uint8_t matrix_scan(void) +{ + uint8_t *tmp; + + tmp = matrix_prev; + matrix_prev = matrix; + matrix = tmp; + + // power on + if (!KEY_POWER_STATE()) KEY_POWER_ON(); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + KEY_SELECT(row, col); + _delay_us(5); + + // Not sure this is needed. This just emulates HHKB controller's behaviour. + if (matrix_prev[row] & (1< 20/(1000000/TIMER_RAW_FREQ)) { + matrix[row] = matrix_prev[row]; + } + + _delay_us(5); + KEY_PREV_OFF(); + KEY_UNABLE(); + + // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE. + // This takes 25us or more to make sure KEY_STATE returns to idle state. +#ifdef HHKB_JP + // Looks like JP needs faster scan due to its twice larger matrix + // or it can drop keys in fast key typing + _delay_us(30); +#else + _delay_us(75); +#endif + } + if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32(); + } + // power off + if (KEY_POWER_STATE() && + (USB_DeviceState == DEVICE_STATE_Suspended || + USB_DeviceState == DEVICE_STATE_Unattached ) && + timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) { + KEY_POWER_OFF(); + suspend_power_down(); + } + return 1; +} + +bool matrix_is_modified(void) +{ + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + if (matrix[i] != matrix_prev[i]) + return true; + } + return false; +} + +inline +bool matrix_has_ghost(void) +{ + return false; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & (1<= 0; --r) { + count += bitpop16(matrix_get_row(r)); + } + return count; +} + +void matrix_power_up(void) { + KEY_POWER_ON(); +} +void matrix_power_down(void) { + KEY_POWER_OFF(); +} -- cgit v1.2.3