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/preonic/Makefile | 73 ++ keyboards/preonic/README.md | 25 + keyboards/preonic/config.h | 89 ++ keyboards/preonic/keymaps/default/Makefile | 25 + keyboards/preonic/keymaps/default/README.md | 1 + keyboards/preonic/keymaps/default/compiled.hex | 1609 ++++++++++++++++++++++++ keyboards/preonic/keymaps/default/keymap.c | 278 ++++ keyboards/preonic/preonic.c | 97 ++ keyboards/preonic/preonic.h | 41 + 9 files changed, 2238 insertions(+) create mode 100644 keyboards/preonic/Makefile create mode 100644 keyboards/preonic/README.md create mode 100644 keyboards/preonic/config.h create mode 100644 keyboards/preonic/keymaps/default/Makefile create mode 100644 keyboards/preonic/keymaps/default/README.md create mode 100644 keyboards/preonic/keymaps/default/compiled.hex create mode 100644 keyboards/preonic/keymaps/default/keymap.c create mode 100644 keyboards/preonic/preonic.c create mode 100644 keyboards/preonic/preonic.h (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/Makefile b/keyboards/preonic/Makefile new file mode 100644 index 0000000000..08e9205cbf --- /dev/null +++ b/keyboards/preonic/Makefile @@ -0,0 +1,73 @@ + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no # Audio output on port C6 +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../Makefile +endif \ No newline at end of file diff --git a/keyboards/preonic/README.md b/keyboards/preonic/README.md new file mode 100644 index 0000000000..f99856fdd8 --- /dev/null +++ b/keyboards/preonic/README.md @@ -0,0 +1,25 @@ +Preonic keyboard firmware +====================== +DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent README.md](/README.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/preonic 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/preonic/config.h b/keyboards/preonic/config.h new file mode 100644 index 0000000000..e8d0e82fc9 --- /dev/null +++ b/keyboards/preonic/config.h @@ -0,0 +1,89 @@ +/* +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 0x6061 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Ortholinear Keyboards +#define PRODUCT The Preonic Keyboard +#define DESCRIPTION A compact ortholinear keyboard + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 12 + +/* Planck PCB default pin-out */ +#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 } +#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +#define BACKLIGHT_LEVELS 3 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +// #define NO_DEBUG + +/* disable print */ +// #define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/preonic/keymaps/default/Makefile b/keyboards/preonic/keymaps/default/Makefile new file mode 100644 index 0000000000..581e08cd02 --- /dev/null +++ b/keyboards/preonic/keymaps/default/Makefile @@ -0,0 +1,25 @@ + + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/default/README.md b/keyboards/preonic/keymaps/default/README.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/preonic/keymaps/default/README.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file diff --git a/keyboards/preonic/keymaps/default/compiled.hex b/keyboards/preonic/keymaps/default/compiled.hex new file mode 100644 index 0000000000..a988ab756c --- /dev/null +++ b/keyboards/preonic/keymaps/default/compiled.hex @@ -0,0 +1,1609 @@ +:100000000C94AF050C94F3050C94F3050C94F305D4 +:100010000C94F3050C94F3050C94F3050C94F30580 +:100020000C94F3050C94F3050C94EA180C94BC1989 +:100030000C941D270C94F3050C94F3050C94F30514 +:100040000C94F3050C94F3050C94F3050C94F30550 +:100050000C94F3050C9485270C94F3050C94F3058C +:100060000C94F3050C94F3050C94F3050C94F30530 +:100070000C94F3050C94F3050C94F3050C94F30520 +:100080000C94D00E0C94F3050C94F3050C94F3052A +:100090000C94F3050C94F3050C94F3050C94F30500 +:1000A0000C94F3050C94F3050C94F305291A4B1AE0 +:1000B000391B4B1A391B901AB31A391B081B1B1B0F +:1000C000051E051E341E341E731E931EE91FE91FF4 +:1000D0009E1EE91F4E1F4E1FB51FBE1FE91FE31FC7 +:1000E0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F40 +:1000F0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F30 +:100100006B1F791F801F871F911F07634236B79BA4 +:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 +:100120005763BD6DEDFD753EF6177231BF000000DF +:10013000803F08000000BE922449123EABAAAA2AC2 +:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD +:1001500000000000BF000000803F00000000000819 +:100160004178D3BB4387D1133D190E3CC3BD4282B6 +:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 +:10018000FFBE01C4FF7F3F000000000035001E00DD +:100190001F0020002100220023002400250026004B +:1001A00027002A002B0014001A0008001500170071 +:1001B0001C0018000C00120013004C002900040061 +:1001C0001600070009000A000B000D000E000F00CA +:1001D00033003400E1001D001B000600190005007B +:1001E0001100100036003700380028000530E0000C +:1001F000E200E30003302C002C00043050005100DA +:1002000052004F0035001E001F0020002100220078 +:10021000230024002500260027002A002B001400BC +:100220001A00090013000A000D000F0018001C003E +:1002300033004C00290004001500160017000700C9 +:100240000B00110008000C0012003400E1001D003A +:100250001B000600190005000E00100036003700D4 +:10026000380028000530E000E200E30003302C00F5 +:100270002C0004305000510052004F0035001E0089 +:100280001F0020002100220023002400250026005A +:1002900027002A002B0034003600370013001C0012 +:1002A00009000A00060015000F004C002900040098 +:1002B0001200080018000C0007000B0017001100C6 +:1002C00016003800E100330014000D000E001B0082 +:1002D000050010001A0019001D0028000530E0007C +:1002E000E200E30003302C002C00043050005100E9 +:1002F00052004F0035021E021F022002210222027C +:10030000230224022502260227022A0035021E02A9 +:100310001F022002210222022302240225022602B9 +:1003200027024C004C003A003B003C003D003E00E0 +:100330003F002D022E022F02300231020100400048 +:1003400041004200430044004500320264020100C3 +:100350000100010001000100010001000100010095 +:1003600001000100AB00AA00A900AE0035001E008C +:100370001F00200021002200230024002500260069 +:1003800027002A0035001E001F0020002100220047 +:10039000230024002500260027004C004C003A00D2 +:1003A0003B003C003D003E003F002D002E002F0092 +:1003B0003000310001004000410042004300440091 +:1003C000450032006400010001000100010001004D +:1003D000010001000100010001000100AB00AA00C2 +:1003E000A900AE00000000000000000000000000B6 +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000000000000000000000000AA +:10065000000000000000000000000000000000009A +:10066000000000000000000000000000000000008A +:10067000000000000000000000000000000000007A +:10068000000000000000000000000000000000006A +:10069000000000000000000000000000000000005A +:1006A000000000000000000000000000000000004A +:1006B000000000000000000000000000000000003A +:1006C000000000000000000000000000000000002A +:1006D000000000000000000000000000000000001A +:1006E000000000000000000000000000000000000A +:1006F00000000000000000000000000000000000FA +:1007000000000000000000000000000000000000E9 +:1007100000000000000000000000000000000000D9 +:1007200000000000000000000000000000000000C9 +:1007300000000000000000000000000000000000B9 +:1007400000000000000000000000000000000000A9 +:100750000000000000000000000000000000000099 +:100760000000000000000000000000000000000089 +:100770000000000000000000000000000000000079 +:100780000000000000000000000000000000000069 +:100790000000000000000000000000000000000059 +:1007A0000000000000000000000000000000000049 +:1007B0000000000000000000000000000000000039 +:1007C0000000000000000000000000000000000029 +:1007D0000000000000000000000000000000000019 +:1007E0000000000000000000000000000000000009 +:1007F00000000000000000000000000000000000F9 +:1008000000000000000000000000000000000000E8 +:1008100000000000000000000000000000000000D8 +:1008200000000000000000000000000000000000C8 +:1008300000000000000000000000000000000000B8 +:1008400000000000000000000000000000000000A8 +:100850000000000000000000000000000000000098 +:100860000000000000000000000000000000000088 +:100870000000000000000000000000000000000078 +:100880000000000000000000000000000000000068 +:100890000000000000000000000000000000000058 +:1008A0000000000000000000000000000000000048 +:1008B0000000000000000000000000000000000038 +:1008C0000000000000000000000000000000000028 +:1008D0000000000000000000000000000000000018 +:1008E0000000000000000000000000000000000008 +:1008F00000000000000000000000000000000000F8 +:100900000000000000000000000000003A003B0072 +:100910003C003D003E003F004000410042004300DB +:1009200044004500010000700100010001000100C9 +:10093000010001000100010001004C000100010064 +:1009400001001570167013700A700030013002300B +:100950000100010001001C701B70187019701D70DF +:100960001E700100010001000100010001000100F2 +:10097000010001000100010001000100010001006F +:10098000010001002A0354006800650020005000A7 +:10099000720065006F006E006900630020004B006C +:1009A0006500790062006F00610072006400000061 +:1009B0002C034F007200740068006F006C00690027 +:1009C0006E0065006100720020004B006500790038 +:1009D00062006F0061007200640073000000040395 +:1009E000090409026D00040100A0FA0904000001D5 +:1009F00003010100092111010001224000070581C6 +:100A00000308000A09040100010301020009211181 +:100A1000010001224D000705820308000A090402B3 +:100A20000001030000000921110100012236000726 +:100A300005830308000A09040300010300000009FC +:100A40002111010001223900070584031000011261 +:100A500001100100000008EDFE61600100010200CC +:100A60000105010906A101050719E029E71500257F +:100A7000019508750181020508190129059505757B +:100A80000191029501750391010507190029771558 +:100A9000002501957875018102C005010980A10139 +:100AA000850216010026B7001A01002AB70075104A +:100AB00095018100C0050C0901A101850316010003 +:100AC000269C021A01002A9C02751095018100C023 +:100AD00005010902A1010901A10005091901290562 +:100AE00015002501950575018102950175038101A8 +:100AF0000501093009311581257F950275088106A8 +:100B000009381581257F950175088106050C0A387D +:100B1000021581257F950175088106C0C005010970 +:100B200006A101050719E029E715002501950875BB +:100B300001810295017508810105081901290595B2 +:100B400005750191029501750391010507190029A9 +:100B5000FF150026FF00950675088100C0001124CE +:100B60001FBECFEFDAE0DEBFCDBF04B603FE24C068 +:100B700080912A0490912B04A0912C04B0912D0413 +:100B80008730904BA740B04BB9F410922A041092D2 +:100B90002B0410922C0410922D0414BE84B7877F6E +:100BA00084BF88E10FB6F8948093600010926000D3 +:100BB0000FBEE0E0F8E3099512E0A0E0B1E0E0EB61 +:100BC000F2E602C005900D92AA3CB107D9F714E0F5 +:100BD000AAECB2E001C01D92AA32B107E1F70E946F +:100BE00034160C9456310C940000089581E0089559 +:100BF0000C94F5050C94F605279A2F988FEF9FEF2C +:100C000090938700809386008AE08093800089E13A +:100C1000809381000C948D2C0E94FC056E9A769A2C +:100C20000C94D206282F81110BC080918000877F01 +:100C30008093800010928D0010928C002F98089560 +:100C40002F9880918000886080938000233019F471 +:100C50008FEF9FEF0FC083E090E0821B9109880F18 +:100C6000991F2FEF3FEFA90102C0569547958A952E +:100C7000E2F7CA0190938D0080938C000895CF9382 +:100C8000DF93EC010E942128BE0180E090E0DF911B +:100C9000CF910C9414240F931F93FC01623091F1B7 +:100CA00028F4662359F06130D1F05FC0643009F454 +:100CB00040C0C0F1653009F44CC057C08281882320 +:100CC00009F453C000E010E0980140E064E070E0F7 +:100CD00088EC91E00E944E1281E090E010C0828189 +:100CE000882309F442C000E010E0980140E066E08B +:100CF00070E088E591E00E944E1282E090E00E9450 +:100D00003F0633C08281882381F100E010E0980122 +:100D100040E068E070E088E891E00E944E1284E0D4 +:100D200090E0EDCF8281882311F083E006C083E05C +:100D30000DC08281882349F084E00E94912440E123 +:100D400064E083E00E94030710C084E00E94B224A4 +:100D5000F6CF8281882331F085EE0E94A91C0E9483 +:100D6000E42C03C085EE0E94711D80E090E01F918D +:100D70000F9108950F931F932FEF89EF90E021506B +:100D800080409040E1F700C0000000E010E09801D2 +:100D900040E064E070E088EE91E00E944E121F9106 +:100DA0000F9108950C94BA060F931F9300E010E082 +:100DB000980140E063E070E080E491E00E944E1210 +:100DC0002FEF82E597E0215080409040E1F700C08E +:100DD00000001F910F910C94030E0F931F9300E0DE +:100DE00010E0980140E068E070E080E091E00E944F +:100DF0004E121F910F9108950C94ED0681E0089515 +:100E00000C94FE060895CF92DF92EF92FF920F931B +:100E10001F9301E010E020E030E06801790104C098 +:100E2000CC0CDD1CEE1CFF1C8A95D2F704C0000F11 +:100E3000111F221F331F6A95D2F70C291D292E2955 +:100E40003F29C090E003D090E103E090E203F090EE +:100E5000E303C022D122E222F322842FC016D1065E +:100E6000E206F30641F41F910F91FF90EF90DF909F +:100E7000CF900C9491241F910F91FF90EF90DF90F1 +:100E8000CF900C94B2240C940C0680911A03882302 +:100E900009F448C08091D6029091D702009779F466 +:100EA0000E944F279093D7028093D6028091D80258 +:100EB00090E0009771F48091D90290E00AC00E94FE +:100EC0005B2720910802309109022817390740F367 +:100ED00029C00197880F991F880F991FFC01E652BE +:100EE000FD4F60817181828193810E94360EE09175 +:100EF000D80284E0E89FF0011124E652FD4F6081A2 +:100F00007181828193814FE050E00E94EE118091C7 +:100F1000D80290E001966091D90270E00E940631FB +:100F20008093D8020C94F80510921C030C94030EC5 +:100F300081E080931C030C94FC0608958F929F928D +:100F4000AF92BF92EF92FF920F931F93CF93DF93D5 +:100F5000CDB7DEB7A3970FB6F894DEBF0FBECDBFF7 +:100F60007C01FC0100811181C8010E944D25B8015E +:100F70000E94320C8C01B7010E940007882309F4FB +:100F8000BDC20531F0E71F0741F4F70182818823D4 +:100F900009F458C00E94E512B1C20631F0E71F07FC +:100FA00041F4F7018281882309F44CC00E94EE12BB +:100FB000A5C20731F0E71F0751F4F70182818823AA +:100FC00009F440C00E94E1128111F0CFE3CF083153 +:100FD000F0E71F0739F4F7018281882399F10E9415 +:100FE00098078CC20931F0E71F0739F4F7018281B5 +:100FF000882341F10E94940781C20A31F0E71F075C +:1010000049F4F70182818823E9F080911C03811162 +:10101000F1CFE5CF0B31F0E71F0739F4F7018281FB +:10102000882381F00E94F5120AC00C31F0E71F07F7 +:1010300049F4F7018281882329F00E9400130E945D +:10104000ED065CC280911C03811105C0F70182810D +:101050008111CFC03AC1003E110579F4F7018281B8 +:10106000882309F44DC00E94030E81E080931B0386 +:1010700010921A031092D90241C2023E110559F48E +:10108000F70182818823E1F10E94030E10921B0375 +:1010900010921A0333C2033E110591F4F7018281C5 +:1010A000882371F10E94030E10921B0381E080934C +:1010B0001A031092D8021092D7021092D6021EC2C2 +:1010C0000235110559F4F7018281882309F416C20B +:1010D00080910802909109020A970DC0013511050F +:1010E00079F4F7018281882309F408C2809108020B +:1010F000909109020A969093090280930802FEC11A +:1011000040910C0283E2E7E2F2E0DE0111960190E9 +:101110000D928A95E1F7F701808121E030E02C0FF4 +:101120003D1F280F311DC90120910A0230910B0289 +:10113000FC01E20FF31F6081772767FD7095640F54 +:10114000711D882777FD8095982F0E94282E20E01A +:1011500030E040E451E40E948D2D4B015C01F70129 +:10116000218185E090E0821B9109BC01882777FDF1 +:101170008095982F0E94282E9B01AC01C501B401D7 +:101180000E94252D9B01AC0160E070E080E090E4BE +:101190000E949B2F20E030E04CED50E40E94382F5D +:1011A0004B015C01F70182818823D1F04FE050E0D0 +:1011B000C501B4010E94EE1180911B038823A1F0A8 +:1011C0008091D90224E0829FF0011124E652FD4F64 +:1011D00080829182A282B3828F5F8093D90204C001 +:1011E000C501B4010E94360E0F3F110508F02ECF45 +:1011F00085C18091D50281111FC0043130E71307EA +:1012000009F080C00E94020781E08093D5020E940D +:101210004F279093D4028093D3021092CC02109265 +:10122000CE021092CD021092D0021092CF021092F4 +:10123000D2021092D10262C18091D3029091D40265 +:101240000E945B27883C910570F48091CC02E82FC6 +:10125000F0E0EE0FFF1FE353FD4F118300838F5F1C +:101260008093CC024BC1043180E7180768F4023048 +:1012700090E7190708F050C00115E0E71E0771F06C +:1012800001301047A1F11CC1033320E7120709F414 +:10129000E8C00433104709F4FBC012C1F701828192 +:1012A000882309F412C10E9454200E94030E0E9458 +:1012B000D406FFEF24E33CE0F15020403040E1F75A +:1012C00000C000000E94AA2719C10431F0E71F07DF +:1012D00008F0C3C0023020E71207F0F4011530E730 +:1012E000130709F4F2C00130104709F0E9C0F70113 +:1012F0008281882309F4E9C08091FD038160809395 +:10130000FD03FCC00431F0E71F0708F0A6C002305F +:1013100020E7120708F4ECC0F7018281882309F462 +:10132000D4C00E940E28811102C00E94EA270E94A8 +:10133000262890E090930F0480930E040230F0E78B +:101340001F0721F480910E04816080C0033020E7E4 +:10135000120721F480910E04826078C0043030E7D7 +:10136000130721F480910E04846070C0053080E77B +:10137000180719F480910E0427C0063090E719076A +:1013800021F480910E04806161C00730E0E71E0700 +:1013900021F480910E04806259C00830F0E71F07E5 +:1013A00021F480910E04806451C0093020E71207B7 +:1013B00021F480910E04806849C00A3030E7130799 +:1013C00029F480910E048460886040C00B3080E76F +:1013D000180721F480910E048E7F38C00C3090E7FE +:1013E000190721F480910E048D7F30C00D30E0E7A5 +:1013F0001E0721F480910E048B7F28C00E30F0E789 +:101400001F0719F480910E0420C00F3020E7120747 +:1014100021F480910E048F7E19C0003130E713074C +:1014200021F480910E048F7D11C0013180E71807EF +:1014300021F480910E048F7B09C080910E0402314B +:10144000104711F48F7702C08B7F877F80930E0443 +:1014500080910E040E942A2851C0033390E7190797 +:10146000A1F4F7018281882321F01092CA0282E060 +:1014700016C08091CA02811106C086E20E94A91C92 +:1014800086E20E94711D82E018C004331047C1F447 +:10149000F7018281882331F01092CB0280E20E9412 +:1014A000C01D2CC08091CB02811106C087E20E9432 +:1014B000A91C87E20E94711D80E20E94C71D1EC008 +:1014C00081E08093CA028093CB02C701A3960FB636 +:1014D000F894DEBF0FBECDBFDF91CF911F910F916A +:1014E000FF90EF90BF90AF909F908F900C94FA0573 +:1014F000011530E7130709F0F6CED5CE80E0A396AC +:101500000FB6F894DEBF0FBECDBFDF91CF911F9114 +:101510000F91FF90EF90BF90AF909F908F900895A4 +:101520002CE0729FF00111243CE3839FE00DF11D3C +:101530001124E60FF11DEE0FFF1FE457FE4F8591BA +:1015400094910E94440C811540E5940708F047C02F +:10155000811520E4920708F013C1883E910520F51B +:10156000803E910508F07CC1883A910578F4853A6F +:10157000910508F0A5C08130910509F471C108F406 +:101580002EC18430910508F06BC129C18B3B9105B8 +:1015900008F4A1C0803C910508F421C1FC01EE0FC4 +:1015A000FF1FE45FFF4FE6C0811530E2930758F458 +:1015B000811541E0940708F053C1803F910508F47C +:1015C0000EC190650895811520E3920708F0D5C0FB +:1015D000FC01FF70EE0FFF1FE457FE4FCBC08115DB +:1015E00035E5930708F043C0811544E5940708F0FA +:1015F000DEC0811522E5920708F5811531E59307D4 +:1016000008F0C1C0482F437021E030E002C0220F33 +:10161000331F4A95E2F73C68AC0164E05695479564 +:101620006A95E1F74370342B8F708695869540E27A +:10163000849FC0011124822B932B0895282F269577 +:101640002695AC01437055278115934508F0A0C03D +:1016500080E2289F9001112481E090E002C0880F71 +:10166000991F4A95E2F7822B932B9C6808958F323D +:1016700040E7940790F48F3120E7920708F0A2C06A +:10168000811536E5930708F497C09C013056211563 +:10169000304108F0A4C09F7093C0803320E79207C8 +:1016A00009F497C008F492C0813340E7940709F425 +:1016B00093C08233904709F092C080E093ED089583 +:1016C000853A910509F48EC0863A910509F08DC0DE +:1016D00082E890E40895883A910509F489C0893A2E +:1016E000910509F488C08A3A910509F487C08B3ABC +:1016F000910509F486C08C3A910509F485C08D3AAC +:10170000910509F484C0803B910509F483C08E3AA9 +:10171000910509F482C08F3A910509F481C0813B9B +:10172000910509F480C0823B910509F47FC0833B99 +:10173000910509F47EC0843B910509F47DC0853B89 +:10174000910509F47CC0863B910509F47BC0873B79 +:10175000910509F47AC0883B910509F479C0893B69 +:10176000910509F478C08A3B910509F477C080E0BF +:1017700094E408958591949108959927906C089523 +:101780009F70906A0895982F8827816F906A0895B6 +:1017900090E2299F9001112481E090E002C0880F1F +:1017A000991F4A95E2F7822B932B9A680895982FF8 +:1017B0008827846F906A08958F719927982F8827BA +:1017C000906208958F519047946D089580E091ED57 +:1017D000089580E090ED089580E092ED089580E016 +:1017E00090E0089581E890E4089583E890E40895F6 +:1017F00082EE94E4089589EE94E408958AEE94E4E8 +:10180000089585EB94E4089586EB94E4089587EBBE +:1018100094E408958CEC94E408958DEC94E4089598 +:1018200083E895E408958AE895E4089582E995E4CB +:10183000089584E995E4089581E296E4089583E2A9 +:1018400096E4089584E296E4089585E296E4089586 +:1018500086E296E4089587E296E408958AE296E4A3 +:10186000089508959CE0799FF00111249CE3899FDD +:10187000E00DF11D1124E60FF11DEE0FFF1FE457DF +:10188000FE4F8591949108958238910549F1B0F405 +:101890008133910509F458C048F48932910509F45F +:1018A0004EC08A32910509F454C0089585339105DC +:1018B00009F440C08933910599F00895833E91055C +:1018C00029F138F4803E910591F0823E9105A1F016 +:1018D0000895863E9105F9F0873E910531F108950E +:1018E00020910E0420FD3AC021FD38C0089580915A +:1018F0000E0480FD35C032C080910E0482FF32C0DC +:1019000080910E0484FD30C083EE39C080910E04B6 +:1019100082FD28C0F5CF80910E0483FF27C08091FF +:101920000E0484FD21C087EE2AC080910E0483FD41 +:101930001DC0F5CF80910E0485FD1AC01BC080919B +:101940000E0485FD17C014C080910E0486FD14C0DE +:1019500015C080910E0486FD11C00EC080EE0FC030 +:1019600089E30DC082EE0BC080E009C086EE07C09F +:1019700089E205C085E303C08AE201C081E390E00B +:10198000089508950C94C10CE82FF0E0EA5AFD4F39 +:101990008081E82FEF70F0E082958F7021E030E0D9 +:1019A000A90102C0440F551F8A95E2F740A308958C +:1019B0000F931F93CF93DF93C4E0D0E001E010E0DA +:1019C000FE01EA5AFD4F8081E82FEF70F0E021A17F +:1019D00082958F70A80102C0440F551F8A95E2F7C7 +:1019E000CA01822B81A38C2F0E94C40C219740F73F +:1019F0008BE090E061E070E0FC01E65BFD4F208150 +:101A0000E22FEF70F0E042A122952F70DB0102C0BF +:101A1000AA0FBB1F2A95E2F79D01242B22A3019751 +:101A200058F7DF91CF911F910F9108950F931F9356 +:101A3000CF93DF9385B7806885BF85B7806885BF02 +:101A4000C4E0D0E001E010E0FE01EA5AFD4F8081E1 +:101A5000E82FEF70F0E021A182958F70A80102C0FD +:101A6000440F551F8A95E2F7CA01822B81A38C2F60 +:101A70000E94C40C219740F78BE090E061E070E099 +:101A8000FC01E65BFD4F2081E22FEF70F0E042A108 +:101A900022952F70DB0102C0AA0FBB1F2A95E2F727 +:101AA0009D01242B22A3019758F7DF91CF911F911D +:101AB0000F910C944307EF92FF920F931F93CF93D4 +:101AC000DF9307E213E0C4E0EE24E394F12CD5E0C9 +:101AD0008C2F0E94C40C8BE090E040E050E0FC01B1 +:101AE000E65BFD4F6081E62FEF70F0E020A130E073 +:101AF00062956F7002C0359527956A95E2F720FDD3 +:101B000009C09701082E02C0220F331F0A94E2F782 +:101B1000422B532B019718F7F801929182918F0174 +:101B20008417950721F051834083D0930D028C2FA9 +:101B30000E94C40CC15060F680910D0287FD1FC049 +:101B4000815080930D028F3F39F08FE99FE001971C +:101B5000F1F700C0000013C080E090E0FC01E95DF7 +:101B6000FC4FDC01A35EBC4F18962D913C91199758 +:101B7000318720870297863FEFEF9E0779F70E9413 +:101B8000450781E0DF91CF911F910F91FF90EF907A +:101B90000895E82FF0E0EE0FFF1FE95DFC4F808114 +:101BA0009181089508950F931F93CF9301E313E05C +:101BB000C0E0F801929182918F010E94C826C80F5F +:101BC000F3E007321F07A9F78C2FCF911F910F91D8 +:101BD00008950E940E28811102C00E94EA270E94E7 +:101BE0003828809314043E9A809171008D7F8093F1 +:101BF000710082E0809390008AE18093910081E0FF +:101C000080933303089580913303811102C00E94B1 +:101C1000E90D1092830310928203809171008D7FF1 +:101C200080937100809190008F7380939000109248 +:101C300045031092440310927C0310927D0310928E +:101C40007E0310927F0310927B0310927A03EAE5E1 +:101C5000F3E0AAE4B3E011921192119211921D9255 +:101C60001D9283E0EA37F807B1F70895CF92DF922B +:101C7000EF92FF920F931F93CF93DF932091440332 +:101C8000222309F484C06B017C018091330381110C +:101C900002C00E94E90D0AE713E0C7E0D0E0A70107 +:101CA0009601F80192918291729162918F010E9446 +:101CB000892D811131C0FE01EE0FFF1FEE0FFF1FB6 +:101CC000E65AFC4F1082118212821382DE01AA0FA3 +:101CD000BB1FA65BBC4F11961C921E92C730D1054C +:101CE000E9F0219644815581668177814083518353 +:101CF00062837383148215821682178212968D91E5 +:101D00009C91139711969C938E9313961C921E92FE +:101D1000129734961296E2CF219708F680918203AB +:101D200090918303019797FD05C09093830380935F +:101D3000820304C010928303109282038091820375 +:101D400090918303209180033091810328173907F4 +:101D500024F01092810310928003892BC1F48091AA +:101D600071008D7F80937100809190008F738093BC +:101D7000900010927C0310927D0310927E031092CB +:101D80007F0310927B0310927A0310924403DF9139 +:101D9000CF911F910F91FF90EF90DF90CF9008951A +:101DA0001F920F920FB60F9211244F925F926F9273 +:101DB0007F928F929F92AF92BF92CF92DF92EF92DB +:101DC000FF922F933F934F935F936F937F938F93E4 +:101DD0009F93AF93BF93CF93DF93EF93FF93809144 +:101DE0004403882309F49BC1C0918203D0918303EB +:101DF0001C161D060CF093C140903403509035031F +:101E0000609036037090370320E030E0A901C301F1 +:101E1000B2010E94342F18160CF065C0C130D105F4 +:101E200009F452C08091800390918103BE010E9409 +:101E300006317C0190938103809380038090460358 +:101E400090904703A0904803B090490320E030E011 +:101E500040E85FE3C501B4010E94252D609346036D +:101E6000709347038093480390934903F701EE0F63 +:101E7000FF1FEE0FFF1FE65AFC4FA3019201608186 +:101E80007181828193810E948D2D20E030E040E0BD +:101E90005EE30E94382F9B01AC01C501B4010E9492 +:101EA000342F18168CF4C7010196BE010E9406312A +:101EB000909381038093800310924603109247030E +:101EC0001092480310924903E0918003F09181033E +:101ED000EE0FFF1FEE0FFF1FE65AFC4F608171816E +:101EE00082819381D0C0C0907C03D0907D03E0902C +:101EF0007E03F0907F0320E030E0A901C701B60126 +:101F00000E94892D2197882309F4A2C0FE01EE0FBB +:101F1000FF1FEE0FFF1FE65AFC4F80809180A280CA +:101F2000B380A5019401C701B6010E94892D87FFE6 +:101F300031C0A501940160E070E08CED93EC0E944B +:101F40008D2D20E030E040E451E40E948D2D20E012 +:101F500030E040E05FE30E94382F9B01AC0160E07D +:101F600070E080E090E40E949B2F9B01AC01C501D2 +:101F7000B4010E94382F9B01AC01C701B6010E9439 +:101F8000892D87FF07C0A701960160E070E08CED06 +:101F900093E439C0A5019401C701B6010E94342F12 +:101FA00018160CF055C0A501940160E070E08CEDAE +:101FB00093E40E948D2D20E030E040E451E40E9443 +:101FC0008D2D20E030E040E05FE30E94382F9B0140 +:101FD000AC0160E070E080E090E40E949B2F9B01E8 +:101FE000AC01C501B4010E94382F9B01AC01C701AF +:101FF000B6010E94342F18165CF5A701960160E027 +:1020000070E08CED93EC0E948D2D20E030E040E4F8 +:1020100051E40E948D2D20E030E040E05FE30E941B +:10202000382F9B01AC0160E070E080E090E40E94FA +:102030009B2F9B01AC01C701B6010E94382F609312 +:102040007C0370937D0380937E0390937F0313C082 +:10205000FE01EE0FFF1FEE0FFF1FE65AFC4F8081BF +:102060009181A281B38180937C0390937D03A0939F +:102070007E03B0937F0360917C0370917D03809118 +:102080007E0390917F0320913103309132032F3FE3 +:102090004FEF340731F02F5F3F4F309332032093DF +:1020A00031030E940B136B017C0120E034E244EF0A +:1020B00051E40E94892D87FF08C086EFC82E88E270 +:1020C000D82E84EFE82E81E4F82E20E030E040E0C6 +:1020D00051E4C701B6010E94382F9B01AC0160E0BA +:1020E00074E284E79BE40E948D2D6B017C010E94C9 +:1020F000FA2D709397006093960020910E02309114 +:102100000F024091100250911102C701B6010E94C6 +:10211000382F0E94FA2D7093990060939800809157 +:102120004503882309F433C1C0904003D090410394 +:10213000E0904203F090430320E030E0A901C701A2 +:10214000B6010E94342F1816D4F580913103909176 +:1021500032038F3F2FEF920729F0019690933203BD +:1021600080933103C701B6010E940B1320E030E0D9 +:1021700040E051E40E94382F9B01AC0160E074E222 +:1021800084E79BE40E948D2D6B017C010E94FA2D57 +:10219000709397006093960020910E0230910F0289 +:1021A0004091100250911102C701B6010E94382FD0 +:1021B0000E94FA2D709399006093980008C01092C5 +:1021C00097001092960010929900109298006091DA +:1021D0003A0370913B036F5F7F4F70933B036093B3 +:1021E0003A03209196003091970080E090E0232BF5 +:1021F000F1F0C0919600D09197000E94262E6B01BD +:102200007C01BE0180E090E00E94262E9B01AC0183 +:1022100060913C0370913D0380913E0390913F0398 +:102220000E948D2D20E03FEF4FE757E410C00E9441 +:10223000262E6B017C0120E030EE4FEF54E46091DC +:102240003C0370913D0380913E0390913F030E94B7 +:10225000382F9B01AC01C701B6010E94342F87FDC6 +:1022600096C0809138038F5F8093380390E020916F +:1022700010043091110482179307A0F080911B0481 +:10228000882319F0109238030DC0809171008D7F62 +:1022900080937100809190008F73809390001092D2 +:1022A00045037DC080913903C0913803811128C056 +:1022B000C0901504D0901604E0901704F090180414 +:1022C00020E030E0A901C701B6010E94342F1816A2 +:1022D000BCF481E0809339031092400310924103D3 +:1022E0001092420310924303C0923C03D0923D03EC +:1022F000E0923E03F0923F03C150C093380343C0C5 +:10230000109239031092320310923103E0911204BB +:10231000F091130448E0C49FE00DF11D1124808169 +:102320009181A281B3818093400390934103A09354 +:102330004203B093430320E030E040E85EE3648171 +:102340007581868197810E94382F6B017C01809175 +:102350001202682F70E080E090E00E94262E20E0BC +:1023600030E048EC52E40E948D2D9B01AC01C70186 +:10237000B6010E94382F60933C0370933D03809315 +:102380003E0390933F0310923B0310923A038091D7 +:10239000140480FD04C01092450310924403FF9181 +:1023A000EF91DF91CF91BF91AF919F918F917F91ED +:1023B0006F915F914F913F912F91FF90EF90DF9040 +:1023C000CF90BF90AF909F908F907F906F905F90D5 +:1023D0004F900F900FBE0F901F901895CF92DF92E5 +:1023E000EF92FF92CF93DF936B017C01EA01809122 +:1023F0003303811102C00E94E90D8091140480FF13 +:1024000046C0809182039091830308970CF03FC0EF +:10241000809171008D7F80937100809145038111BF +:102420000E94030E81E080934403109232031092C5 +:10243000310320E030E0A901C701B6010E94342F2A +:102440001816DCF48091820390918303FC01EE0F57 +:10245000FF1FEE0FFF1FE65AFC4FC082D182E282BF +:10246000F382FC01EE0FFF1FE65BFC4FD183C083BC +:102470000196909383038093820380917100826020 +:102480008093710080919000806880939000DF912C +:10249000CF91FF90EF90DF90CF9008958F929F9211 +:1024A000AF92BF92CF92DF92EF92FF920F931F9362 +:1024B000CF93DF93EC017B01D42E48015901809129 +:1024C0003303811102C00E94E90D8091140480FF42 +:1024D0006BC0809171008D7F809371008091440367 +:1024E00081110E94030E81E080934503D093130471 +:1024F000C0931204F0921104E0921004D0921B04D5 +:102500008092150490921604A0921704B0921804B9 +:102510001092460310924703109248031092490309 +:102520001092380388819981AA81BB8180934003EE +:1025300090934103A0934203B093430320E030E023 +:1025400040E85EE36C817D818E819F810E94382FFF +:102550006B017C0180911202682F70E080E090E0B6 +:102560000E94262E20E030E048EC52E40E948D2D9F +:102570009B01AC01C701B6010E94382F60933C0358 +:1025800070933D0380933E0390933F0310923B036F +:1025900010923A0380917100826080937100809163 +:1025A0009000806880939000DF91CF911F910F91F0 +:1025B000FF90EF90DF90CF90BF90AF909F908F9063 +:1025C00008958091140481700895809114048160AD +:1025D000809314040E943C280C949D07809114045D +:1025E0008E7F809314040C943C288091840390E0A7 +:1025F000019666E070E00E9406318093840308959E +:102600008091840390E0019766E070E00E940631BB +:102610008093840308958F929F92AF92BF92CF923E +:10262000DF92EF92FF920F931F93CF93DF936B0193 +:102630007C01C0913103D0913203BE0180E090E073 +:102640000E94262E4B015C01A701960160E070E01C +:102650008CE594E40E948D2D9B01AC01C501B40171 +:102660000E94382F0E94FA2D20918403233009F410 +:1026700073C028F4222351F02130E9F02CC124301A +:1026800009F4A0C0253009F4E0C025C180E090E045 +:10269000A0E0BFE380930E0290930F02A09310027C +:1026A000B093110210923403109235031092360346 +:1026B0001092370310C11092340310923503109218 +:1026C0003603109237036431710540F46A307105A6 +:1026D00060F520E030E040E85EE32BC0693C710526 +:1026E00008F0AAC080E090E00E94262E20E030E0B2 +:1026F00040EA51E40E94242D20E030E044E353E41A +:102700000E948D2D9B01AC010E94382F20E030E00B +:1027100040E05EE30E94382F9B01AC0160E070E076 +:1027200080E09EE30E94242D44C020E030E040E0A1 +:102730005FE3C701B6010E94382F6B017C0180E086 +:1027400090E0A0E0BEE380930E0290930F02A0936E +:102750001002B0931102BFC01092340310923503DF +:1027600010923603109237034AE0469F9001479F2C +:10277000300D1124C90168EB7BE00E94F230BC01EE +:102780006C5D754077FF03C071956195710988276D +:1027900077FD8095982F0E94282E2EE333EC4EE291 +:1027A00059E30E94382F20E030E040EC5EE30E94C5 +:1027B000252D60930E0270930F0280931002909368 +:1027C000110289C01092340310923503109236031F +:1027D00010923703CE0183709927892BE1F0BE0157 +:1027E0006170772780E090E00E94262E20E030E0A4 +:1027F00040E05EE30E94382F20E030E040E45FE3F9 +:102800000E94252D60930E0270930F028093100298 +:10281000909311020CC080E090E0A0E0BFE38093B1 +:102820000E0290930F02A0931002B0931102C77092 +:10283000DD27CD2B09F04FC010920E0210920F022F +:10284000109210021092110246C01092340310929E +:102850003503109236031092370300E010E020E0B9 +:102860003FE300930E0210930F0220931002309367 +:1028700011026739710578F180E090E00E94262E00 +:1028800020E030E047E153E40E94242D20E030E0D6 +:102890004AE754E40E948D2D20E030E048E452E401 +:1028A0000E94382F20E030E040EA51E40E946A2E76 +:1028B0000E94F52D660F771F660F771FFB01E55A03 +:1028C000FD4F2081318142815381C701B6010E94B1 +:1028D000382F6B017C01C701B601DF91CF911F91A9 +:1028E0000F91FF90EF90DF90CF90BF90AF909F90AF +:1028F0008F900895809195030895CF93DF9300D032 +:102900001F92CDB7DEB79C0180912004843019F569 +:1029100093E099833B832A839093E9008FEF909112 +:10292000E800815095FD06C095ED9A95F1F70000FD +:102930008111F5CF8091E80085FF0DC040E050E0A7 +:1029400063E070E0CE0101960E94DA168091E80003 +:102950008E778093E8000F900F900F90DF91CF91CA +:102960000895CF93DF9300D01F92CDB7DEB72091AB +:102970002004243021F522E029839B838A8383E08D +:102980008093E9008FEF9091E800815095FD06C09B +:1029900095ED9A95F1F700008111F5CF8091E8004F +:1029A00085FF0DC040E050E063E070E0CE0101968D +:1029B0000E94DA168091E8008E778093E8000F90ED +:1029C0000F900F90DF91CF91089520912004243033 +:1029D000F1F422E02093E9002FEF3091E80021503C +:1029E00035FD06C035ED3A95F1F700002111F5CF20 +:1029F0002091E80025FF0BC040E050E065E070E06A +:102A00000E94DA168091E8008E778093E80008959E +:102A1000CF93DF93EC0190912004943009F046C0ED +:102A200080911D028823D9F080911E028823B9F07D +:102A30009093E9008FEF9091E800815095FD06C0DA +:102A400095E19A95F1F700008111F5CF8091E800AA +:102A500085FF2CC040E050E060E170E017C081E0ED +:102A60008093E9008FEF9091E800815095FD06C0BA +:102A700095ED9A95F1F700008111F5CF8091E8006E +:102A800085FF14C040E050E068E070E0CE010E9495 +:102A9000DA168091E8008E778093E80080E1FE01ED +:102AA000A5E8B3E001900D928A95E1F7DF91CF910F +:102AB000089580911F04811109C00E946F180E941F +:102AC000CC188091E20084608093E2000895109217 +:102AD0001F040895089508950C94122742E061ECB4 +:102AE00081E00E94E91742E061EC82E00E94E91770 +:102AF00042E061EC83E00E94E91742E161EC84E08E +:102B00000C94E91780912204833009F455C030F405 +:102B1000813071F0823009F48EC008958A3009F452 +:102B20007AC08B3009F460C0893009F09CC020C0A5 +:102B300080912104813A09F096C08091E800877F56 +:102B40008093E8008091250490912604892B21F43C +:102B500060E185E893E003C060E080E090E070E031 +:102B60000E9425178091E8008B778093E8000895F4 +:102B700080912104813209F076C0809125049091E2 +:102B80002604009719F0039709F06DC08091E800C2 +:102B9000877F8093E8008091E80082FD05C08091E6 +:102BA00020048111F8CF5FC08091F10080939503DC +:102BB0008091E8008B7753C080912104813A09F01D +:102BC00052C08091250490912604892B09F04BC0B6 +:102BD0008091E800877F8093E8008091E80080FF83 +:102BE000FCCF80911D0236C0809121048132D9F53D +:102BF0008091250490912604892BA9F58091E80005 +:102C0000877F8093E8000E941E18809123048093A0 +:102C10001D020C94542080912104813221F5809171 +:102C2000E800877F8093E8000E941E1880912404AA +:102C300080939603089580912104813AA1F48091B4 +:102C4000E800877F8093E8008091E80080FFFCCF58 +:102C5000809196038093F1008091E8008E778093B5 +:102C6000E8000C941E18089584B7877F84BF88E11C +:102C70000FB6F89480936000109260000FBE80E859 +:102C800080936100109261000E94C11B0E946F1826 +:102C90000E94CC188091E20084608093E2007894D6 +:102CA0000E94521B0E94C31B83E192E00E946D1B95 +:102CB00080912004853069F40E94D42680911E04FE +:102CC0008823B1F30E940127882391F30E94C41640 +:102CD000EFCF0E94CB1BECCF292F332723303105B8 +:102CE000C9F064F42130310581F02230310509F05A +:102CF00043C08DE690E022EE39E042C0213231053A +:102D0000F1F02232310541F137C082E190E02FE449 +:102D10003AE036C099278130910541F08230910523 +:102D200041F0892B49F5EEEDF9E005C0E0EBF9E063 +:102D300002C0E4E8F9E0849190E09F0121C0643092 +:102D4000D8F4E62FF0E0EE0FFF1FE954FD4F20818D +:102D5000318189E090E014C0643070F470E0FB01D0 +:102D6000EE0FFF1FE155FD4F20813181FB01E5553D +:102D7000FD4F808190E004C080E090E020E030E0F2 +:102D8000FA0131832083089580E189BD82E189BD04 +:102D900009B400FEFDCF8091D8008F7D8093D800CC +:102DA0008091E00082608093E0008091E00081FDEE +:102DB000FCCF0895CF92DF92EF92FF920F931F9373 +:102DC000CF93DF93EC018B016A010E943D188111C2 +:102DD00033C0C114D10439F0F60180819181081B00 +:102DE000190BC80FD91FE12CF12C0115110519F190 +:102DF0008091E80085FD16C08091E8008E77809371 +:102E0000E800C114D10449F0F60180819181E80EF7 +:102E1000F91EF182E08285E00FC00E943D188823F0 +:102E200021F30AC089918093F10001501109FFEF4D +:102E3000EF1AFF0ADACF80E0DF91CF911F910F9157 +:102E4000FF90EF90DF90CF9008952091270430916C +:102E500028042617370748F06115710539F42091C9 +:102E6000E8002E772093E80001C0B90140E0611529 +:102E70007105A9F120912004222309F443C02530D3 +:102E800009F442C02091E80023FD40C02091E800F1 +:102E900022FD32C02091E80020FFE9CF4091F300ED +:102EA0002091F20030E0342BFC01CF016115710557 +:102EB00059F02830310540F481918093F100615040 +:102EC00071092F5F3F4FF1CF41E02830310509F004 +:102ED00040E02091E8002E772093E800C8CF411110 +:102EE000C9CF0AC080912004882361F0853061F049 +:102EF0008091E80083FD0AC08091E80082FFF2CF54 +:102F000080E0089582E0089583E0089581E00895C7 +:102F100020912704309128042617370748F06115BF +:102F2000710539F42091E8002E772093E80001C064 +:102F3000B901FC0120E06115710591F18091200437 +:102F4000882309F440C0853009F43FC08091E8002F +:102F500083FD3DC08091E80082FD2FC08091E80094 +:102F600080FFE9CF2091F3008091F20090E0922B56 +:102F70006115710559F08830910540F42491209332 +:102F8000F1003196615071090196F2CF21E0089766 +:102F900009F020E08091E8008E778093E800CBCFA5 +:102FA0002111CCCF0AC080912004882361F08530A4 +:102FB00061F08091E80083FD0AC08091E80082FF03 +:102FC000F2CF80E0089582E0089583E0089581E0E3 +:102FD0000895982F973058F59093E900981739F095 +:102FE0007091EC002091ED005091F00003C0242F6F +:102FF000762F50E021FF19C03091EB003E7F3093D7 +:10300000EB003091ED003D7F3093ED003091EB000F +:1030100031603093EB007093EC002093ED005093FF +:10302000F0002091EE0027FF07C09F5FD3CF8F7085 +:103030008093E90081E0089580E008958091210463 +:1030400087FF11C08091E80082FD05C080912004B7 +:103050008111F8CF11C08091E8008B770BC080916F +:103060002004882349F08091E80080FFF8CF809108 +:10307000E8008E778093E80008952091E400309175 +:10308000E50095E64091EC00842F817040FF22C05E +:103090008091E80080FD1CC080912004882391F07D +:1030A000853091F08091EB0085FD10C04091E400E7 +:1030B0005091E5004217530729F39A01915011F7F7 +:1030C00084E0089582E0089583E0089581E0089502 +:1030D00080E008954091E80042FFDECF08950E940D +:1030E000DD180E94E518E0EEF0E0808181608083C9 +:1030F000E8EDF0E080818F77808319BCA7EDB0E028 +:103100008C918E7F8C9380818F7E808310921F04A0 +:1031100008950F931F93CF93DF930E94DD180E94B1 +:10312000E518C8EDD0E088818F7788838881806832 +:10313000888388818F7D888319BC10922004109227 +:103140001C0410921E0410921D0400EE10E0F80101 +:1031500080818B7F808388818160888342E060E00A +:1031600080E00E94E917E1EEF0E080818E7F8083AD +:10317000E2EEF0E0808181608083808188608083DE +:10318000F80180818E7F8083888180618883DF91D0 +:10319000CF911F910F910895E8EDF0E080818F7E2F +:1031A0008083E7EDF0E080818160808384E082BFEE +:1031B00081E080931F040C948918E8EDF0E0808191 +:1031C0008E7F80831092E20008951092DA001092B0 +:1031D000E10008951F920F920FB60F9211242F93C2 +:1031E0003F934F935F936F937F938F939F93AF938F +:1031F000BF93EF93FF938091E10082FF0BC080911A +:10320000E20082FF07C08091E1008B7F8093E100A4 +:103210000E94511B8091DA0080FF1FC08091D8006E +:1032200080FF1BC08091DA008E7F8093DA0080914E +:10323000D90080FF0DC080E189BD82E189BD09B45C +:1032400000FEFDCF81E0809320040E94591505C047 +:1032500019BC109220040E9467158091E10080FF44 +:1032600019C08091E20080FF15C08091E2008E7F3E +:103270008093E2008091E20080618093E20080917F +:10328000D80080628093D80019BC85E08093200428 +:103290000E946B158091E10084FF30C08091E200B4 +:1032A00084FF2CC080E189BD82E189BD09B400FEA4 +:1032B000FDCF8091D8008F7D8093D8008091E10070 +:1032C0008F7E8093E1008091E2008F7E8093E20008 +:1032D0008091E20081608093E20080911C04882349 +:1032E00011F084E007C08091E30087FD02C081E017 +:1032F00001C083E0809320040E946C158091E1005E +:1033000083FF29C08091E20083FF25C08091E10006 +:10331000877F8093E10082E08093200410921C0458 +:103320008091E1008E7F8093E1008091E2008E7FAA +:103330008093E2008091E20080618093E20042E0AD +:1033400060E080E00E94E9178091F000886080933F +:10335000F0000E946A15FF91EF91BF91AF919F918C +:103360008F917F916F915F914F913F912F910F902E +:103370000FBE0F901F9018951F920F920FB60F92CD +:1033800011242F933F934F935F936F937F938F936A +:103390009F93AF93BF93CF93DF93EF93FF93C0912E +:1033A000E900CF708091EC00D82FD17080FDD0E87B +:1033B0001092E9008091F000877F8093F00078946C +:1033C0000E94001A1092E9008091F00088608093BA +:1033D000F000CD2BCF70C093E900FF91EF91DF910A +:1033E000CF91BF91AF919F918F917F916F915F919D +:1033F0004F913F912F910F900FBE0F901F901895F6 +:103400001F93CF93DF93CDB7DEB7AA970FB6F8948B +:10341000DEBF0FBECDBFE1E2F4E088E08E0F9091F9 +:10342000F10091938E13FBCF0E9482158091E800EA +:1034300083FF1FC18091210490912204492F50E005 +:103440004A30510508F015C1FA01EA5AFF4F0C94B1 +:103450001A31803881F0823809F00BC1809125043F +:103460008F708093E9008091EB0085FB882780F9BD +:103470001092E90006C080911D0490911E049111E4 +:1034800082609091E800977F9093E8008093F1002C +:103490001092F100C8C0282F2D7F09F0EAC08823C0 +:1034A00019F0823061F0E5C080912304813009F089 +:1034B000E0C0933009F080E080931E042BC080911F +:1034C0002304811127C0809125048F7009F4D1C095 +:1034D0008093E9002091EB0020FF1CC0933021F481 +:1034E0008091EB00806214C09091EB00906190930A +:1034F000EB0021E030E0A90102C0440F551F8A957E +:10350000E2F74093EA001092EA008091EB008860B5 +:103510008093EB001092E9008091E800877F86C0DD +:103520008111A7C0109123041F778091E300807858 +:10353000812B8093E3008091E800877F8093E800EF +:103540000E941E188091E80080FFFCCF8091E3006C +:1035500080688093E300111102C082E001C083E023 +:103560008093200486C08058823008F082C0809109 +:103570002304909124048C3D53E0950779F583E072 +:103580008A838AE289834FB7F894DE01139620E09C +:103590003EE051E2E32FF0E050935700E49120FF2A +:1035A00003C0E295EF703F5FEF708E2F90E0EA303E +:1035B00010F0C79601C0C0968D939D932F5F243164 +:1035C00049F74FBF8091E800877F8093E8006AE267 +:1035D00070E0CE0101960E94251714C0AE014F5F26 +:1035E0005F4F609125040E946C16BC01009709F49E +:1035F00040C09091E800977F9093E80089819A817C +:103600000E9488178091E8008B778093E80031C092 +:10361000803879F58091E800877F8093E800809179 +:103620001C048093F1008091E8008E778093E8007D +:103630000E941E181EC081111CC09091230492305C +:10364000C0F48091E800877F8093E80090931C0489 +:103650000E941E1880911C04811106C08091E30015 +:1036600087FD02C081E001C084E0809320040E94B5 +:103670006E158091E80083FF0AC08091E800877F83 +:103680008093E8008091EB0080628093EB00AA9623 +:103690000FB6F894DEBF0FBECDBFDF91CF911F9163 +:1036A00008950895CF93809120048823A1F0C091BC +:1036B000E900CF709091EC00892F817090FD80E837 +:1036C000C82B1092E9008091E80083FD0E94001A47 +:1036D000CF70C093E900CF91089590939C0380939D +:1036E0009B030895E0919B03F0919C03309721F098 +:1036F0000190F081E02D099480E00895E0919B0312 +:10370000F0919C03309721F00280F381E02D099421 +:103710000895E0919B03F0919C03309721F0048081 +:10372000F581E02D099408952091990330919A0331 +:103730008217930771F090939A0380939903E09115 +:103740009B03F0919C03309721F00680F781E02DD8 +:103750000994089520919703309198038217930755 +:1037600071F09093980380939703E0919B03F091FD +:103770009C03309721F00084F185E02D0994089591 +:1037800008950C94C01B0E9446270E94160D0E94AB +:10379000CC270C948D2C5F926F927F928F929F9288 +:1037A000AF92BF92CF92DF92EF92FF920F931F934F +:1037B000CF93DF9300D000D01F92CDB7DEB70E9429 +:1037C0005B0D98EAC92E93E0D92E04E010E0AA24FC +:1037D000A394B12C502E802F0E94C90D4C01F601EC +:1037E000729062906F016826792661147104A1F4C9 +:1037F0000150110978F78FEF89838A831B820E9419 +:103800004F278160782F9D838C8349815A816B81FA +:103810008D810E947B1C38C08091FD0381FD0E9438 +:10382000D20D2BE030E07501022E02C0EE0CFF1C21 +:103830000A94E2F7C70186219721892B09F1298390 +:103840005A828E209F2091E0892809F490E09B8382 +:103850000E944F278160782F9D838C8349815A81F4 +:103860006B818D810E947B1C000F111FF801E256B5 +:10387000FC4F80819181E826F926F182E08204C024 +:103880002150310980F6B4CF0E94BB2910919D03CD +:103890000E94721B1817D1F00E94721B80939D0327 +:1038A0000F900F900F900F900F90DF91CF911F917D +:1038B0000F91FF90EF90DF90CF90BF90AF909F90CF +:1038C0008F907F906F905F900C94C20C0F900F9030 +:1038D0000F900F900F90DF91CF911F910F91FF905C +:1038E000EF90DF90CF90BF90AF909F908F907F90A0 +:1038F0006F905F900895CF93DF93CDB7DEB72B978E +:103900000FB6F894DEBF0FBECDBF4F8358876987CF +:103910007A878B87DE01119686E0FD0111928A95E8 +:10392000E9F785E0FE01379601900D928A95E1F75F +:1039300049815A816B817C818D819E810E94F22216 +:103940002B960FB6F894DEBF0FBECDBFDF91CF919F +:103950000895CF93882309F4C2C0C82F823859F440 +:103960000E94721B81FDBBC089E30E94CC250E948E +:10397000992689E30CC0833879F40E94721B80FD7C +:10398000AEC083E50E94CC250E94992683E50E9463 +:103990000E26CF910C949926843859F40E94721BFC +:1039A00082FD9DC087E40E94CC250E94992687E471 +:1039B000EECF8CEF8C0F813A48F48C2F0E94F62BBF +:1039C00081118DC08C2F0E94CC25E3CF80E28C0F1B +:1039D000883048F4C77081E001C0880FCA95EAF7C3 +:1039E0000E945226D6CF8BE58C0F833078F4C53AEF +:1039F00029F0C63A31F083E890E005C081E890E014 +:103A000002C082E890E0CF910C94941B88E58C0F63 +:103A1000833108F064C0C83A39F1C93A41F1CA3A71 +:103A200049F1CB3A51F1CC3A59F1CD3A61F1C03B71 +:103A300069F1CE3A71F1CF3A79F1C13B81F1C23BE4 +:103A400089F1C33B91F1C43B99F1C53BA1F1C63B60 +:103A5000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BC0 +:103A6000C9F180E090E038C082EE90E035C089EE88 +:103A700090E032C08AEE90E02FC085EB90E02CC041 +:103A800086EB90E029C087EB90E026C08CEC90E0BC +:103A900023C08DEC90E020C083E891E01DC08AE84F +:103AA00091E01AC082E991E017C084E991E014C066 +:103AB00081E292E011C083E292E00EC084E292E0E3 +:103AC0000BC085E292E008C086E292E005C087E282 +:103AD00092E002C08AE292E0CF910C94AA1BCF91AF +:103AE0000895882309F44BC0823859F40E94721B50 +:103AF00081FF45C089E30E94CC250E94992689E375 +:103B00000CC0833871F40E94721B80FF38C083E5BB +:103B10000E94CC250E94992683E50E940E260C94D3 +:103B20009926843859F40E94721B82FF28C087E4CA +:103B30000E94CC250E94992687E4EFCF9CEF980F36 +:103B4000913A58F390E2980F983050F4877091E0D2 +:103B500001C0990F8A95EAF7892F0E945826DFCF76 +:103B60009BE5980F933020F480E090E00C94941B38 +:103B7000885A833120F480E090E00C94AA1B0895C9 +:103B8000882321F00E9452260C94992608958823B8 +:103B900021F00E9458260C94992608957F928F92C6 +:103BA0009F92AF92BF92CF92DF92EF92FF920F93CC +:103BB0001F93CF93DF931F92CDB7DEB77C01C62E44 +:103BC000772EFC01058102950F70128111110E9460 +:103BD0006F260E94C525882379F0112369F080E2C1 +:103BE0008C0D883048F082E00E94AE250E94C525E9 +:103BF00091E0D82ED92601C0D12CE72DE295EF70A7 +:103C0000F0E0E05AFF4F0C941A31872D807F072D8A +:103C10000F70882311F00295007F112389F0002393 +:103C200009F499C180E28C0D883020F4802F0E9425 +:103C3000522603C0802F0E9462260E9499268BC1C3 +:103C40008C2D0E94711D002309F4C3C180E28C0DEC +:103C5000883020F4802F0E94582603C0802F0E94B5 +:103C600068260E949926B5C1872D807F972D9F7069 +:103C7000803211F4892F03C0892F8295807FCC2058 +:103C800021F0F1E0CF16A1F01DC0112339F000237F +:103C900019F1013009F50E9482269BC1002319F019 +:103CA000013009F496C189830E948526898110C15B +:103CB000112321F0063008F08CC10EC0053008F049 +:103CC00088C106C1112359F0002331F0F701958115 +:103CD00090FF41C19F7095830E94C01D7AC100234F +:103CE00009F4F6C03EC1872D86958695837090E0D5 +:103CF000009719F0019761F06CC1112321F08C2D10 +:103D0000972D937002C080E090E00E94941B61C1E7 +:103D1000112321F08C2D972D937002C080E090E04C +:103D20000E94AA1B56C18C2D112319F00E94C32892 +:103D300002C00E942B290E94B0294BC1872D83709D +:103D400009F052C0111145C18C2D8295869587705E +:103D5000880F880F9C2D9F70892E912CA12CB12C3F +:103D6000082E04C0880C991CAA1CBB1C0A94D2F70C +:103D7000C4FE14C00FE010E020E030E0B901A8015B +:103D800004C0440F551F661F771F8A95D2F7CB01D9 +:103D9000BA01609570958095909503C060E070E0E1 +:103DA000CB01272D26952695237030E02230310552 +:103DB00069F02330310589F0682979298A299B29FE +:103DC0002130310571F00E943A2403C16829792914 +:103DD0008A299B290E945624FCC00E943A24C501CE +:103DE000B4010E941E24F5C0112319F0872D8170A3 +:103DF00001C08695882309F4ECC08C2D82958695A8 +:103E00008770880F880F9C2D9F70892E912CA12C74 +:103E1000B12C082E04C0880C991CAA1CBB1C0A9447 +:103E2000D2F7C4FE14C00FE010E020E030E0B9018A +:103E3000A80104C0440F551F661F771F8A95D2F74B +:103E4000CB01BA01609570958095909503C060E0B4 +:103E500070E0CB01272D269526952370422F50E048 +:103E60004230510569F04330510589F068297929BC +:103E70008A299B294130510571F00E941425A9C05F +:103E8000682979298A299B290E943025A2C00E948D +:103E90001425C501B4010E94F8249BC08C2D90E02C +:103EA000FC01E05EF109E531F10508F050C0E05990 +:103EB000FF4F0C941A310C2D0F70872D8F71112329 +:103EC00021F00E949124802F07CF0E94B224802FDE +:103ED0000E94C71D7EC0112341F0053008F079C053 +:103EE000872D8F710E94D72474C0063008F071C0EE +:103EF000F7CF112339F0872D8F710E94912469C06B +:103F00001123C9F3872D8F710E94B22462C011233F +:103F100029F0872D8F710E947C245BC00E9472243F +:103F200058C0112351F0172D1F71812F0E94912429 +:103F300063E0812F0E94A5254CC081E00E94AE2540 +:103F4000023008F446C082E00E94AE2542C0112330 +:103F500031F0002381F28C2D0E94A91C3AC000236D +:103F600089F28C2D0E94711D34C0472D4F706C2D2D +:103F7000C7010E944B060E9496232BC0111129C035 +:103F8000472D4F7050E042305105B9F04CF44115C7 +:103F9000510581F041305105E1F40E94B52C19C062 +:103FA0004330510569F04430510599F48C2D0E943D +:103FB000072D0FC00E949E2C0CC00E94D12C09C05E +:103FC0000E94E42C06C0472D4F706C2DC7010E9443 +:103FD000310CDD20F9F00E94A12580FD1BC0F70106 +:103FE00012820E949B250E949124C7010E941920E1 +:103FF0000E949B250F90DF91CF911F910F91FF9011 +:10400000EF90DF90CF90BF90AF909F908F907F9078 +:104010000C94B2240F90DF91CF911F910F91FF90DC +:10402000EF90DF90CF90BF90AF909F908F907F9058 +:1040300008950F931F93CF93DF93EC0188819981AB +:104040002B813C81232BB9F09F3F11F48F3F99F0D6 +:10405000CE010E949E07882371F0688179818A8150 +:104060000E9497258C010E944C250E941324B801C0 +:10407000CE010E94CE1DDF91CF911F910F91089527 +:104080000E946F260E947F260E9444260E94992645 +:104090000E94612A0E94B02980E090E00E94941B57 +:1040A00080E090E00C94AA1B0E945F260C944020B4 +:1040B0000E948C25292F22952F7030E02C3031055D +:1040C0004CF42A3031056CF422503109223031058C +:1040D000A8F407C02C30310569F02F30310551F0BC +:1040E0000DC0803F69F018F4803E40F409C0843F61 +:1040F00029F406C093FB882780F9089580E008958D +:1041000081E00895CF93DF9300D000D01F92CDB708 +:10411000DEB70F900F900F900F900F90DF91CF911F +:104120000895CF93DF9300D000D000D0CDB7DEB795 +:1041300026960FB6F894DEBF0FBECDBFDF91CF91AC +:1041400008951F93CF93DF93C091A80316E0809149 +:10415000A903C81799F0D0E01C9FF0011D9FF00D36 +:104160001124E655FC4F4081518162817381848125 +:1041700095810E9491202196C770E9CFDF91CF9160 +:104180001F9108954091DA035091DB036091DC03A5 +:104190007091DD038091DE039091DF030C949120F8 +:1041A0008091DF0382958F7009F054C08091DC0309 +:1041B000882309F44FC08091A803A091A9036091BE +:1041C000DA037091DB034091DD035091DE03B6E02A +:1041D0008A1709F43FC090E041155105C1F17F3FB6 +:1041E00011F46F3FA1F1B89FF001B99FF00D1124B8 +:1041F000E655FC4F218172132AC02081621327C02B +:104200002281211124C0238134812417350710F421 +:1042100021503109241B350B283C3105C0F4209175 +:10422000DF032F7020612093DF0326E0289FF00139 +:10423000299FF00D1124E155FC4F80818F70806122 +:1042400080838AED93E00E9419200C94A1200196AE +:104250008770BECF0895CF92DF92EF92FF920F93B7 +:104260001F93CF93DF93CDB7DEB762970FB6F89465 +:10427000DEBF0FBECDBF8C0185E0F801DE011D96CB +:1042800001900D928A95E1F7D8014C9111965C91BD +:10429000119712966C9112971396CD90DC9014970B +:1042A0003091DA037091DB038091DD039091DE039E +:1042B000009709F46BC17F3F19F43F3F09F466C1D1 +:1042C000E090DC03EE2009F4C0C02091DF03C816A3 +:1042D000D90628F0F601E81BF90BCF0104C0809540 +:1042E00090958C0D9D1DFF24F394883C910578F0EA +:1042F000F12C207F09F0C6C07C2DD98AC88A898913 +:104300000E9482208AED93E00E941920B1C0822F82 +:10431000807F09F046C0751314C0341312C06111B8 +:1043200010C02F7020612093DF030E94C2208AED0D +:1043300093E00E9419208091DF03D80115968C9399 +:104340002EC0CD2819F15F3F11F44F3FF9F0F62E42 +:1043500061111CC08091A8032091A90336E0821747 +:1043600009F45AC090E0389FF001399FF00D1124F4 +:10437000E655FC4F7181571306C07081471303C087 +:104380007281711103C001968770E9CFF62E662302 +:1043900009F418C18091DF0381608093DF03F12C61 +:1043A00011C1751308C0341306C0611104C0809197 +:1043B000DF03D801C3C04D875E878D859E856A8BDC +:1043C0000E9458206A898823E1F16623D1F1209167 +:1043D000DF03822F82958F7090E0029774F08091B6 +:1043E000DA039091DB0398878F831986DB86CA8670 +:1043F0002C87CE0107960E94192086E0F801AAEDCD +:10440000B3E001900D928A95E1F70E94D0200E94BE +:10441000C220FF24F394D6C04D875E878D859E858C +:104420000E948C25292F22952F7030E022303105F3 +:104430000CF0BCC09F7009F0B6C0805E883008F4F4 +:10444000C1C0C8010E941920E4CFC816D90608F4DB +:1044500053C0F601E81BF90BCF01883C910508F425 +:1044600050C0F12C7C2DD98AC88A89890E9482206B +:10447000EAEDF3E086E0DF011D928A95E9F70E94FC +:10448000C220A0C0751314C0341312C0611110C033 +:104490008091DF03F8018583C8010E94192086E01E +:1044A000EAEDF3E0DF011D928A95E9F7FE2C8AC060 +:1044B0004D875E878D859E856A8B0E9458206A890C +:1044C000882309F4BECF662309F4BBCF2091DF0314 +:1044D000822F82958F7090E002970CF48ECF80919E +:1044E000DA039091DB039A8389831B82DD82CC827D +:1044F0002E83CE0101967FCF809590958C0D9D1DCA +:10450000ACCFF62E662309F49CCF75132EC034135E +:104510002CC02091DF0320FD1FC0822F82958F7059 +:10452000D9F0D80115962C9315978F3049F08F5FED +:10453000982F9295907F822F8F70892B15968C9350 +:10454000C8010E94192086E0F801AAEDB3E00190AD +:104550000D928A95E1F793CF86E0F801AAEDB3E0DA +:1045600001900D928A95E1F72DC04D875E878D856C +:104570009E850E945820811140CF8091DF03816089 +:104580008093DF03C8010E9419201CC0662309F430 +:1045900058CF4D875E878D859E850E945820882341 +:1045A00009F44FCF2ACF811148CF0CC024303105F8 +:1045B0000CF047CF9F7009F440CFF8019581907FB0 +:1045C00009F03BCF8F2D62960FB6F894DEBF0FBE79 +:1045D000CDBFDF91CF911F910F91FF90EF90DF90B2 +:1045E000CF9008951F93CF93DF93CDB7DEB72C976D +:1045F0000FB6F894DEBF0FBECDBF4F8358876987D3 +:104600007A878B879C87CE0107960E942B2188236F +:1046100069F08F8198852A853B85232BF1F19F3F97 +:1046200009F063C08F3F09F060C037C086E0FE012B +:104630003796DE01119601900D928A95E1F76F8110 +:104640007885EA85FB85309741F17F3F11F46F3F14 +:1046500021F12091A90330E0C901019687709927C3 +:104660004091A80350E08417950709F447C0698377 +:104670007A83FD83EC8396E0929FD001939FB00DE7 +:104680001124A655BC4FFE01319601900D929A95CA +:10469000E1F78093A9030E94A12016E08091A8036E +:1046A0009091A9038917C1F1189FC0011124865563 +:1046B0009C4F0E942B21882379F1E091A8031E9F33 +:1046C000F0011124E655FC4F4081518162817381D4 +:1046D000848195810E9491208091A80390E00196A9 +:1046E000877099278093A803D9CF4F815885698512 +:1046F0007A858B859C850E949120CFCF0E94542083 +:104700001092A9031092A803EAEDF3E086E0DF011E +:104710001D928A95E9F7C1CF2C960FB6F894DEBFAB +:104720000FBECDBFDF91CF911F910895EF92FF9201 +:104730000F931F93CF93DF938C01009709F46CC004 +:10474000F12CEE24E394E8012196F801849184375A +:1047500040F4843008F051C0813081F0823019F18A +:104760005BC0853709F444C0A8F19CE7980F9037E7 +:1047700008F052C08F770E94711D41C00E5F1F4F1D +:10478000FE01C49180E28C0F883048F4C7708E2DF2 +:1047900001C0880FCA95EAF70E94722614C08C2FB8 +:1047A0000E94A91C2DC00E5F1F4FFE01C49180E224 +:1047B0008C0F883058F4C7708E2D01C0880FCA95B1 +:1047C000EAF70E9478260E9499261AC08C2F0E9430 +:1047D000711D16C00E5F1F4FFE01C491CC2381F0E6 +:1047E0008FE99FE00197F1F700C00000C150F6CFBC +:1047F0000E5F1F4FFE01F49003C00E94A91C8E01A2 +:104800008F2D882309F49FCFEFE9FFE03197F1F76F +:1048100000C000008150F5CFDF91CF911F910F9123 +:10482000FF90EF90089508956093E4037093E5037B +:104830008093E6039093E7030C9440200F931F931B +:104840000091E4031091E5032091E6033091E70322 +:10485000DC01CB01802B912BA22BB32B8093E403A3 +:104860009093E503A093E603B093E7031F910F91A4 +:104870000C9440200F931F930091E4031091E503E3 +:104880002091E6033091E703DC01CB0180239123E3 +:10489000A223B3238093E4039093E503A093E6035C +:1048A000B093E7031F910F910C9440200F931F9337 +:1048B0000091E4031091E5032091E6033091E703B2 +:1048C000DC01CB0180279127A227B3278093E40343 +:1048D0009093E503A093E603B093E7031F910F9134 +:1048E0000C9440201092E0031092E1031092E20336 +:1048F0001092E3030C94402041E050E060E070E04F +:1049000004C0440F551F661F771F8A95D2F7409346 +:10491000E0035093E1036093E2037093E3030C948C +:10492000402041E050E060E070E004C0440F551FBB +:10493000661F771F8A95D2F78091E0039091E1037B +:10494000A091E203B091E303482B592B6A2B7B2BF8 +:104950004093E0035093E1036093E2037093E30319 +:104960000C94402041E050E060E070E004C0440F4F +:10497000551F661F771F8A95D2F740955095609511 +:1049800070958091E0039091E103A091E203B091D2 +:10499000E303482359236A237B234093E003509386 +:1049A000E1036093E2037093E3030C94402041E041 +:1049B00050E060E070E004C0440F551F661F771F91 +:1049C0008A95D2F78091E0039091E103A091E203F0 +:1049D000B091E303482759276A277B274093E003D8 +:1049E0005093E1036093E2037093E3030C9440203F +:1049F0000F931F930091E0031091E1032091E203D4 +:104A00003091E303DC01CB01802B912BA22BB32B44 +:104A10008093E0039093E103A093E203B093E30358 +:104A20001F910F910C9440200F931F930091E0036E +:104A30001091E1032091E2033091E303DC01CB010B +:104A400080239123A223B3238093E0039093E10377 +:104A5000A093E203B093E3031F910F910C944020C5 +:104A60000F931F930091E0031091E1032091E20363 +:104A70003091E303DC01CB0180279127A227B327E4 +:104A80008093E0039093E103A093E203B093E303E8 +:104A90001F910F910C9440200895CF92DF92EF92D6 +:104AA000FF920F931F93CF93DF938C01C090E40389 +:104AB000D090E503E090E603F090E7038091E003F7 +:104AC0009091E103A091E203B091E303C82AD92AAF +:104AD000EA2AFB2ACFE1D0E0D701C6010C2E04C0A0 +:104AE000B695A795979587950A94D2F780FF06C04B +:104AF000B8018C2F0E94900A019721F4219760F74A +:104B000080E001C08C2FDF91CF911F910F91FF901A +:104B1000EF90DF90CF900895CF93DF93EC010E9448 +:104B20004D25BE010E94900ADF91CF910895CB01DF +:104B30000E948C2508958091E8038595859585953B +:104B400008958091E8038770089598E0899F900107 +:104B50001124262B2093E8030C9491242091E80340 +:104B6000809582238093E803982F977069F430E052 +:104B7000482F552747FD50952417350729F085956F +:104B8000859585950C94B22408959091E8039770CB +:104B900081E009F480E0089590911D02992321F0AD +:104BA00090911E02911109C020911F0230912002A4 +:104BB000F90132969FEF40E01FC0982F9695969589 +:104BC00096959F3050F5E0911F02F0912002E90F79 +:104BD000F11D877021E030E0A90102C0440F551F8C +:104BE0008A95E2F7CA019181892B818308959F3FBD +:104BF00039F04F5F4E3041F051915813F8CF0DC04E +:104C00005111F7CF942FF5CF9F3F39F0F901E90FFC +:104C1000F11D97FDFA9582830895089590911D02E4 +:104C2000992321F090911E02911109C020911F0239 +:104C300030912002F9013296205F3F4F1FC0982F1C +:104C40009695969596959F30F0F4E0911F02F0911D +:104C50002002E90FF11D877021E030E0A90102C0B8 +:104C6000440F551F8A95E2F7CA01809591818923E7 +:104C7000818308953196E217F30729F09081981304 +:104C8000F9CF1082F7CF089581E090E0E0911F0204 +:104C9000F0912002E80FF91F1082019680319105F2 +:104CA000A9F708959091FC03892B8093FC03089544 +:104CB00080959091FC0389238093FC0308951092C2 +:104CC000FC0308959091FB03892B8093FB030895C7 +:104CD00080959091FB0389238093FB0308951092A4 +:104CE000FB0308959091FA03892B8093FA030895AA +:104CF00080959091FA0389238093FA030895109286 +:104D0000FA0308958093E90308951092E903089542 +:104D100080911F0290912002FC0131969C01205F3E +:104D20003F4F80E0919191118F5FE217F307D1F728 +:104D30000895E0911F02F09120028091FC0380838E +:104D4000E0911F02F091200290818091FB03892B5A +:104D50008083E0911F02F091200290818091FA03FC +:104D6000892B80838091E903882361F0E0911F0201 +:104D7000F09120029081892B80830E9488268111E6 +:104D80001092E90380911F02909120020C947E1BE7 +:104D900020E0009739F0AC0141505109842395235C +:104DA0002F5FF7CF822F089580912004843039F14E +:104DB0001092FE0320E488E190E00FB6F894A895E5 +:104DC000809360000FBE2093600080E00E94120676 +:104DD00080E00E94C20C83B7817F846083BF83B769 +:104DE000816083BF7894889583B78E7F83BF88E185 +:104DF0000FB6F89480936000109260000FBE089583 +:104E0000089580E00E9412060E94D80C0E945B0D5B +:104E10000E9400270E94D30D91E0811101C090E013 +:104E2000892F08950E94542080E00E9412060E945B +:104E30008D2C0E94721B0C94C20C1F920F920FB605 +:104E40000F9211248F939F93AF93BF938091FE0392 +:104E5000811113C08091FF0390910004A09101047F +:104E6000B09102044196A11DB11D8093FF03909360 +:104E70000004A0930104B0930204BF91AF919F91ED +:104E80008F910F900FBE0F901F90189582E084BDF8 +:104E900093E095BD9AEF97BD80936E0008952FB76C +:104EA000F8948091FF0390910004A0910104B091C7 +:104EB00002042FBF0895CF92DF92EF92FF920F93DB +:104EC0001F932FB7F8944091FF0350910004609115 +:104ED0000104709102042FBF6A017B01EE24FF24BC +:104EE0008C0120E030E0C016D106E206F30610F493 +:104EF000415051099A01281B390BC9011F910F918B +:104F0000FF90EF90DF90CF9008951F920F920FB611 +:104F10000F9211248F939F93AF93BF938091FF03C0 +:104F200090910004A0910104B09102040196A11D8A +:104F3000B11D8093FF0390930004A0930104B093EC +:104F40000204BF91AF919F918F910F900FBE0F9070 +:104F50001F9018950E946F18F8942FEF87EA91E63A +:104F6000215080409040E1F700C0000087E090EBC6 +:104F7000DC0180932A0490932B04A0932C04B0931B +:104F80002D049CE088E10FB6F894A895809360000A +:104F90000FBE90936000FFCF0E940E28811102C0C7 +:104FA0000E94EA270E9419288093FD030E94262868 +:104FB00090E090930F0480930E0487FB882780F97C +:104FC00080931E020E941D28682F70E080E090E010 +:104FD0000C9414246DEE7EEF80E090E00E9440314E +:104FE00060E082E090E00E942E3160E083E090E09B +:104FF0000E942E3160E084E090E00E942E3160E05B +:1050000085E090E00E942E3160E086E090E00E9412 +:105010002E316FEF87E090E00C942E3180E090E02D +:105020000E94283121E08D3E9E4F09F020E0822F22 +:10503000089582E090E00C94203183E090E00C949D +:105040002031682F83E090E00C942E3184E090E0D2 +:105050000C942031682F84E090E00C942E3186E08F +:1050600090E00C942031682F86E090E00C942E3173 +:1050700087E090E00C942031682F87E090E00C945A +:105080002E318091050480FF0BC06091240285E0E1 +:10509000689FB001112475956795759567952BC02C +:1050A00081FF09C06091240285E0689FB00111244E +:1050B0007595679520C082FF07C06091240285E046 +:1050C000689FB001112417C0909106049923D1F074 +:1050D00060912302961788F72091240285E0289F8B +:1050E00090011124929FA001939F500D112470E014 +:1050F000CA010E9406316038710540F461157105DE +:1051000039F002C065E070E0862F08958FE70895BA +:1051100081E008958091050480FF08C0609122021B +:1051200070E0759567957595679521C081FF06C0FC +:105130006091220270E07595679519C082FF04C0E6 +:105140006091220270E010C0909106049923C1F092 +:10515000609121029617A0F780912202899FC001D9 +:10516000112470E00E9406316038710528F4611541 +:10517000710521F0862F08958FE7089581E0089545 +:1051800061E070E0F4CF803F21F40E9441288195D6 +:1051900004C0813F29F40E944128809309040895A6 +:1051A000823F21F40E944128819504C0833F29F465 +:1051B0000E944128809308040895893F19F40E94B1 +:1051C0008A2805C08A3F31F40E948A2881958093FD +:1051D0000A0408958B3F21F40E948A28819504C017 +:1051E0008C3F29F40E948A2880930B040895843F01 +:1051F00021F480910704816017C0853F21F48091DC +:105200000704826011C0863F21F480910704846006 +:105210000BC0873F21F480910704886005C0883F58 +:1052200031F48091070480618093070408958D3FD5 +:1052300021F48091050481600BC08E3F21F48091A0 +:105240000504826005C08F3F29F4809105048460C5 +:10525000809305040895803F39F48091090487FF05 +:105260006CC01092090469C0813F29F4809109043F +:105270001816BCF362C090910804823F29F497FF8E +:105280005CC01092080459C0833F19F41916CCF37E +:1052900054C0893F41F480910A0418160CF04DC0A7 +:1052A00010920A044AC08A3F29F480910A0487FFB9 +:1052B00044C0F6CF8B3F39F480910B0487FF3DC08B +:1052C00010920B043AC08C3F29F480910B041816FD +:1052D000BCF333C0843F21F4809107048E7F17C054 +:1052E000853F21F4809107048D7F11C0863F21F412 +:1052F000809107048B7F0BC0873F21F480910704C6 +:10530000877F05C0883F31F4809107048F7E8093AA +:10531000070413C08D3F21F4809105048E7F0BC0DC +:105320008E3F21F4809105048D7F05C08F3F29F4C5 +:10533000809105048B7F809305048091080481117E +:105340000EC08091090481110AC080910A04811164 +:1053500006C080910B04811102C0109206040895CA +:1053600087E094E00E94891B0E944F2790930404D9 +:105370008093030408951F93CF93DF9380910304D8 +:10538000909104040E945B27AC019091060499233C +:1053900021F02091250230E006C0209126028AE00B +:1053A000289F900111244217530708F486C080916A +:1053B0000804C0910904D0910A0410910B048111D2 +:1053C00007C0C11176C0D11174C0111172C075C06F +:1053D0009F3F19F09F5F90930604181624F40E94D3 +:1053E0004128809308048091080487FF05C00E942B +:1053F00041288195809308041C1624F40E944128BA +:10540000809309048091090487FF05C00E94412808 +:1054100081958093090460910804662339F1C09155 +:105420000904CC2319F1772767FD7095872F972FF3 +:105430000E94282E23E333E343E35FE30E94382FE7 +:105440000E94F52D609308046C2F772767FD7095F7 +:10545000872F972F0E94282E23E333E343E35FE354 +:105460000E94382F0E94F52D609309041D1624F424 +:105470000E948A2880930A0480910A0487FF05C04D +:105480000E948A28819580930A04111624F40E94B0 +:105490008A2880930B0480910B0487FF05C00E942B +:1054A0008A28819580930B04DF91CF911F910C94F2 +:1054B000B0299F3F09F08ECF96CFDF91CF911F91FA +:1054C0000895E7E0F4E085E0DF011D928A95E9F7B1 +:1054D00010920604109205040895833081F128F497 +:1054E000813059F08230D1F00895853009F449C0F7 +:1054F000B8F1863009F456C0089580912602262F0F +:1055000030E0280F311D2F3F310524F4680F6093E0 +:10551000260208958FEF8093260208958091250238 +:10552000262F30E0280F311D2F3F310524F4680F5E +:105530006093250208958FEF80932502089580914E +:105540002402262F30E0280F311D2F3F310524F48F +:10555000680F6093240208958FEF809324020895CA +:1055600080912302262F30E0280F311D2F3F310577 +:1055700024F4680F6093230208958FEF8093230231 +:10558000089580912202262F30E0280F311D2F3FF1 +:10559000310524F4680F6093220208958FEF809301 +:1055A0002202089580912102262F30E0280F311D1C +:1055B0002F3F310524F4680F6093210208958FEF87 +:1055C000809321020895833011F128F4813049F04D +:1055D000823091F00895853081F120F18630C1F15B +:1055E000089580912602681720F4861B8093260276 +:1055F000089510922602089580912502681720F4DC +:10560000861B8093250208951092250208958091AB +:105610002402681720F4861B8093240208951092B8 +:105620002402089580912302681720F4861B80933A +:105630002302089510922302089580912202681790 +:1056400020F4861B8093220208951092220208956E +:1056500080912102681720F4861B8093210208950F +:105660001092210208950F931F93873208F048C0CB +:105670008E3108F08DC0803109F477C008F587308D +:1056800009F461C068F4863009F09DC08091FD0383 +:10569000817F8E7F8093FD0381E080930D0494C011 +:1056A0008B3009F489C08E3009F08DC08091FD03E4 +:1056B00082FB222720F991E0922790FB82F95EC0BD +:1056C000863109F479C060F4813109F07CC00E9410 +:1056D000542090911E0281E0892780931E026CC0A5 +:1056E000893109F469C08B3109F06DC08091FD03E7 +:1056F00081FB222720F991E0922790FB81F93EC09F +:10570000883309F459C050F4893209F457C08533FD +:1057100009F454C0873209F451C055C0833409F4E8 +:105720004DC028F48A3308F44EC0895332C08834FF +:1057300009F049C00E9454200E94030E0E94D40622 +:105740000E94AA2739C09091FD03892F809581700E +:1057500080FB90F929F0966098609093FD0334C027 +:10576000997F977F9093FD0327C08091FD0383FB72 +:10577000222720F991E0922790FB83F98093FD0383 +:105780009923D1F08091FD0381608093FD0314C0C3 +:105790008D5141E050E060E070E08A019B0104C05F +:1057A000000F111F221F331F8A95D2F7C901B801BC +:1057B0000E9414240E94542081E006C061E070E041 +:1057C00080E090E0F5CF80E01F910F91089580E098 +:1057D000089580E008958E518A3030F4E82FF0E08B +:1057E000E154FD4F8081089580E00895CF93C82F44 +:1057F00080910D04813069F018F08230C9F183C0C6 +:10580000E0911F02F09120028081823209F07DC078 +:1058100007C0E0911F02F09120028081823261F482 +:105820008C2F0E94E72B811104C08C2F0E94332BF8 +:105830001DC081E090E01AC08C2F0E94E92B8111DD +:1058400014C0C43179F048F4CB3079F0C03109F09C +:1058500060C082E080930D0408C0C93219F0C833DB +:1058600021F057C010920D0454C081E0817053C0E4 +:10587000C93289F118F5C43171F1B0F4C73009F0BB +:1058800046C08EE18093260282E3809325028AE05F +:105890008093240284E18093230288E08093220293 +:1058A00088E28093210233C082EE8C0F863078F537 +:1058B0008C2F0E94EB2B80930C0429C0CE34E9F08E +:1058C00020F4CB3421F56AE013C0C13579F0C2353C +:1058D000F1F461E00DC080910C04882319F010925E +:1058E0000C0415C081E080930D0415C061E006C072 +:1058F00080910C040E946D2A0AC06AE080910C0419 +:105900000E94E32A04C010920D0480E004C081E0EC +:1059100002C080E0ABCFCF9108950E940E28811184 +:1059200002C00E94EA270E942F288093290480FF4A +:1059300002C0869501C080E00C9412068091290473 +:10594000982F9695292F30E0233031054CF49F5F36 +:10595000990F8170892B8160809329040E943328DC +:105960008091290486950C94120680912904982F21 +:10597000969591F09158990F8170892B8093290405 +:105980008E7F91E009F490E08091290490FB80F9EA +:10599000809329040E9433288091290486950C94D1 +:1059A000120680912904982F909590FB80F980939E +:1059B00029040E9433288091290480FF02C0869523 +:1059C00001C080E00C94120690912904892F8695DD +:1059D0008F5F8F779170843028F4880F892B8093A4 +:1059E000290402C090932904809129048E7F91E0BC +:1059F00009F490E08091290490FB80F980932904B8 +:105A00000E9433288091290486950C9412062091D7 +:105A10002904922F96958927982F990F822F8170AC +:105A2000892B809329048E7F91E009F490E0809186 +:105A3000290490FB80F9809329040E9433288091E7 +:105A4000290486950C9412065058BB27AA270ED01D +:105A5000D1C1C2D130F0C7D120F031F49F3F11F451 +:105A60001EF4B7C10EF4E095E7FB9FC1E92FD3D137 +:105A700080F3BA17620773078407950718F071F46B +:105A80009EF5EBC10EF4E0950B2EBA2FA02D0B0165 +:105A9000B90190010C01CA01A0011124FF27591B73 +:105AA00099F0593F50F4503E68F11A16F040A22F79 +:105AB000232F342F4427585FF3CF469537952795EA +:105AC000A795F0405395C9F77EF41F16BA0B620BE9 +:105AD000730B840BBAF09150A1F0FF0FBB1F661F30 +:105AE000771F881FC2F70EC0BA0F621F731F841F73 +:105AF00048F4879577956795B795F7959E3F08F099 +:105B0000B3CF9395880F08F09927EE0F9795879557 +:105B1000089527D108F481E008950CD06BC163D1BA +:105B200040F05AD130F021F45F3F19F03EC15111DD +:105B300095C14FC170D198F39923C9F35523B1F39F +:105B4000951B550BBB27AA2762177307840738F0EC +:105B50009F5F5F4F220F331F441FAA1FA9F333D04B +:105B60000E2E3AF0E0E830D091505040E695001CFF +:105B7000CAF729D0FE2F27D0660F771F881FBB1FBB +:105B8000261737074807AB07B0E809F0BB0B802D95 +:105B9000BF01FF2793585F4F2AF09E3F510568F0E1 +:105BA00004C15CC15F3FECF3983EDCF386957795CA +:105BB0006795B795F7959F5FC9F7880F911D9695E3 +:105BC000879597F90895E1E0660F771F881FBB1F3F +:105BD000621773078407BA0720F0621B730B840BEC +:105BE000BA0BEE1F88F7E095089504D06894B111C0 +:105BF00035C1089518D188F09F5790F0B92F992793 +:105C0000B751A0F0D1F0660F771F881F991F1AF0C7 +:105C1000BA95C9F712C0B13081F01FD1B1E0089533 +:105C20001CC1672F782F8827B85F39F0B93FCCF3B4 +:105C3000869577956795B395D9F73EF490958095BD +:105C4000709561957F4F8F4F9F4F0895E89409C0DD +:105C500097FB3EF490958095709561957F4F8F4F9F +:105C60009F4F9923A9F0F92F96E9BB279395F695B5 +:105C7000879577956795B795F111F8CFFAF4BB0F33 +:105C800011F460FF1BC06F5F7F4F8F4F9F4F16C097 +:105C9000882311F096E911C0772321F09EE8872F21 +:105CA000762F05C0662371F096E8862F70E060E0DD +:105CB0002AF09A95660F771F881FDAF7880F969556 +:105CC000879597F9089588D018F011F08CD038F4A2 +:105CD00080C0C4C0E92F9FD0B0F35523C9F3E7FBC0 +:105CE0006217730784079507A8F199F3E92FFF2737 +:105CF00088232AF03197660F771F881FDAF7952FD0 +:105D00005527442332F091505040220F331F441F37 +:105D1000D2F7BB27E91BF50B621B730B840BB10990 +:105D2000C1F222F4620F731F841FB11D31972AF054 +:105D3000660F771F881FBB1FEFCF915050405AF05E +:105D400041F0882332F0660F771F881F9150504032 +:105D5000C1F7939530C08695779567959F5FD9F782 +:105D6000F8CF990F0008550FAA0BE0E8FEEF1616C2 +:105D70001706E807F907C0F012161306E407F5073F +:105D800098F0621B730B840B950B39F40A2661F0B3 +:105D9000232B242B252B21F408950A2609F4A14056 +:105DA000A6958FEF811D811D089597F99F6780E863 +:105DB00070E060E008959F3F31F0915020F48795A6 +:105DC00077956795B795880F911D9695879597F963 +:105DD00008959FEF80EC089500240A941616170684 +:105DE00018060906089500240A94121613061406CC +:105DF00005060895092E0394000C11F4882352F02F +:105E0000BB0F40F4BF2B11F460FF04C06F5F7F4FE6 +:105E10008F4F9F4F089557FD9058440F551F59F0CD +:105E20005F3F71F04795880F97FB991F61F09F3F87 +:105E300079F087950895121613061406551FF2CFB0 +:105E40004695F1DF08C0161617061806991FF1CF00 +:105E500086957105610508940895E894BB27662727 +:105E60007727CB0197F908957CDF08F48FEF089529 +:105E70000BD0C0CFB1DF28F0B6DF18F0952309F0C2 +:105E800094CFA7CF1124EACFC6DFA0F3959FD1F31B +:105E9000950F50E0551F629FF001729FBB27F00DD8 +:105EA000B11D639FAA27F00DB11DAA1F649F66272D +:105EB000B00DA11D661F829F2227B00DA11D621F7C +:105EC000739FB00DA11D621F839FA00D611D221F36 +:105ED000749F3327A00D611D231F849F600D211D1A +:105EE000822F762F6A2F11249F5750408AF0E1F0BD +:105EF00088234AF0EE0FFF1FBB1F661F771F881F06 +:105F000091505040A9F79E3F510570F04ECFA6CF5B +:105F10005F3FECF3983EDCF3869577956795B795F0 +:105F2000F795E7959F5FC1F7FE2B880F911D96951A +:105F3000879597F90895FA01EE0FFF1F3096210516 +:105F4000310599F16115710561F48038BFE39B0754 +:105F500049F168949038810561F08038BFEF9B0764 +:105F600041F0992342F5FF3FE1053105210511F18B +:105F7000E8940894E795D901AA2329F4AB2FBE2F02 +:105F8000F85FD0F310C0FF5F70F4A695E0F7F73923 +:105F900050F019F0FF3A38F49F779F930CD00F9090 +:105FA00007FC905808953EF014CF60E070E080E860 +:105FB0009FE308954FE79F775F934F933F932F930E +:105FC0009ED02F913F914F915F9152DF05C019F400 +:105FD0000EF0EBCE42CFFDCE26DFC8F39638C0F7E9 +:105FE00007F80F92E8942BE33AEA48EB5FE74EDFBD +:105FF0000F920F920F924DB75EB70F92C0D0EAE0AA +:10600000F1E016D04F915F91EF91FF91E595EE1F72 +:10601000FF1F49F0FE57E0684427EE0F441FFA9532 +:10602000E1F74195550B32D00F9007FE26C0089539 +:10603000DF93CF931F930F93FF92EF92DF927B0139 +:106040008C01689405C0DA2EEF011EDFFE01E89492 +:10605000A5912591359145915591AEF3EF0106DD5E +:10606000FE019701A801DA9479F7DF90EF90FF9095 +:106070000F911F91CF91DF9108959B01AC0160E0DA +:1060800070E080E89FE349CD90CE95CECCDEE8F37A +:106090009923D9F3940F511DBBF39150504094F0C4 +:1060A00059F0882332F0660F771F881F91505040B7 +:1060B000C1F79E3F510544F7880F911D969587952E +:1060C00097F908955F3FACF0983E9CF0BB2786950A +:1060D00077956795B79508F4B1609395C1F7BB0FB5 +:1060E00058F711F460FFE8CF6F5F7F4F8F4F9F4FDE +:1060F000E3CFB4CE0EF05FCE6CCE689456CE93DE76 +:10610000C8F39923D1F3C6F3DF93CF931F930F9373 +:10611000FF92C92FDD2788232AF02197660F771F6A +:10612000881FDAF720E030E040E85FEB9FE3883932 +:1061300020F0803E30F021968F7787DCE2E3F1E0BB +:1061400003C083DCEFE5F1E073DF8B01BE01EC01FE +:10615000FB2E6F5771097595771F880B990B78DDAA +:1061600028E132E741E35FE38FDEAF2D9801AE0116 +:10617000FF900F911F91CF91DF9178DC3BCEFA0118 +:10618000DC01AA0FBB1F9B01AC01BF5728F42227DB +:106190003327442750781FC0B75188F4AB2F002411 +:1061A000469537952795011CA395D2F3002069F0F9 +:1061B000220F331F441FB395DAF30DD045CC613065 +:1061C0007105A0E88A07B94630F49B01AC01662747 +:1061D000772788279078309621F020833183428377 +:1061E00053830895AA1BBB1B51E107C0AA1FBB1F05 +:1061F000A617B70710F0A61BB70B881F991F5A9553 +:10620000A9F780959095BC01CD01089597FB072EC5 +:1062100016F4009407D077FD09D00E94F23007FCF5 +:1062200005D03EF4909581959F4F089570956195A6 +:106230007F4F0895EE0FFF1F0590F491E02D099414 +:10624000F999FECF92BD81BDF89A992780B508953E +:10625000A8E1B0E042E050E00C944831262FF999D3 +:10626000FECF92BD81BDF89A019700B4021639F0B5 +:106270001FBA20BD0FB6F894FA9AF99A0FBE089586 +:106280000196272F0E942F310C942E31DC01CB0177 +:10629000FC01F999FECF06C0F2BDE1BDF89A319636 +:1062A00000B40D9241505040B8F70895F894FFCFD4 +:1062B00000005C440000004148F1764400000041C9 +:1062C0005C978A44000000411FD5924400000041C1 +:1062D00052D0A444000000415CFFB84400000041DB +:1062E0000AA7CF44000000410000DC440000004148 +:1062F00052D02445000000410000DC440000004171 +:1063000052D0A444000040410AA7CF4400000041FD +:106310000000DC440000004100000000000080405C +:1063200052D02445000040410000000000008040A1 +:106330000AA74F45000040410AA7CF440000004192 +:106340000000DC440000004100000000000080402C +:1063500052D02445000000410000000000008040B1 +:106360005CFF384500000041000000000000804054 +:1063700052D02445000000410AA7CF44000000414C +:106380000000DC44000000410000000000008040EC +:1063900052D024450000804148F176440000A041DD +:1063A000F6F0F6440000004152909B440000A041EA +:1063B000F6F0F64400000041640007000CFF000006 +:1063C000003F647A140815E514B1147D140101EA44 +:1063D000032808140A321E0002040507090B0C0EDC +:1063E0001011131517181A1C1D1F212324262829E4 +:1063F0002B2D2F3032343537393B1F0F03764F5F4B +:106400006F7F4969437929595363393149803F5D29 +:106410008B803FF8BF803FCAE1803F73ED803FCA69 +:10642000E1803FF8BF803F5D8B803F3149803F0076 +:1064300000803FF16D7F3F75EA7E3F4C827E3F8357 +:106440003F7E3F84287E3F833F7E3F4C827E3F7568 +:10645000EA7E3FF16D7F3F0000803F404D36391DA1 +:106460000BD00A9A0A610AF4090D0A260A3F0A01AA +:0A64700002030405060708090000F6 +:00000001FF diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c new file mode 100644 index 0000000000..4c967d73ed --- /dev/null +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -0,0 +1,278 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL}, + {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif \ No newline at end of file diff --git a/keyboards/preonic/preonic.c b/keyboards/preonic/preonic.c new file mode 100644 index 0000000000..773451bf0c --- /dev/null +++ b/keyboards/preonic/preonic.c @@ -0,0 +1,97 @@ +#include "preonic.h" + +__attribute__ ((weak)) +void matrix_init_user(void) { + +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + +}; + +__attribute__ ((weak)) +bool process_action_user(keyrecord_t *record) { + return true; +}; + +void matrix_init_kb(void) { + #ifdef BACKLIGHT_ENABLE + backlight_init_ports(); + #endif + + // Turn status LED on + DDRE |= (1<<6); + PORTE |= (1<<6); + + matrix_init_user(); +}; + +void matrix_scan_kb(void) { + matrix_scan_user(); +}; + +bool process_action_kb(keyrecord_t *record) { + return process_action_user(record); +} + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + + // Setup PB7 as output and output low. + DDRB |= (1<<7); + PORTB &= ~(1<<7); + + // Use full 16-bit resolution. + ICR1 = 0xFFFF; + + // I could write a wall of text here to explain... but TL;DW + // Go read the ATmega32u4 datasheet. + // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on + + // Pin PB7 = OCR1C (Timer 1, Channel C) + // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 + // (i.e. start high, go low when counter matches.) + // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 + // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 + + TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + if ( level == 0 ) + { + // Turn off PWM control on PB7, revert to output low. + TCCR1A &= ~(_BV(COM1C1)); + CHANNEL = 0x0; + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF; + } + else + { + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB7)); + // Turn on PWM control of PB7 + TCCR1A |= _BV(COM1C1); + // Set the brightness + CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif diff --git a/keyboards/preonic/preonic.h b/keyboards/preonic/preonic.h new file mode 100644 index 0000000000..2b605f3742 --- /dev/null +++ b/keyboards/preonic/preonic.h @@ -0,0 +1,41 @@ +#ifndef PREONIC_H +#define PREONIC_H + +#include "quantum.h" + +#define PREONIC_MIT( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ + k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b }, \ + { k40, k41, k42, k43, k44, k45, k45, k47, k48, k49, k4a, k4b } \ +} + +#define PREONIC_GRID( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \ + k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b }, \ + { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); +bool process_action_kb(keyrecord_t *record); +void backlight_init_ports(void); + +#endif -- cgit v1.2.3 From 13bb6b4b7fdd2b3e419d0f89c93fb980b00eeb9b Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 23 Jun 2016 22:18:20 -0400 Subject: Backlight abstraction and other changes (#439) * redoes matrix pins, abstracts backlight code for B5,6,7 * slimming down keyboard stuff, backlight breathing implemented * don't call backlight init when no pin * cleans up user/kb/quantum calls, keyboard files * fix pvc atomic * replaces CHANNEL with correct var in breathing * removes .hexs, updates readmes, updates template * cleans-up clueboards, readmes to lowercase * updates readme --- keyboards/preonic/README.md | 25 - keyboards/preonic/config.h | 2 + keyboards/preonic/keymaps/default/README.md | 1 - keyboards/preonic/keymaps/default/compiled.hex | 1609 ------------------------ keyboards/preonic/keymaps/default/readme.md | 1 + keyboards/preonic/preonic.c | 89 +- keyboards/preonic/preonic.h | 5 - keyboards/preonic/readme.md | 25 + 8 files changed, 29 insertions(+), 1728 deletions(-) delete mode 100644 keyboards/preonic/README.md delete mode 100644 keyboards/preonic/keymaps/default/README.md delete mode 100644 keyboards/preonic/keymaps/default/compiled.hex create mode 100644 keyboards/preonic/keymaps/default/readme.md create mode 100644 keyboards/preonic/readme.md (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/README.md b/keyboards/preonic/README.md deleted file mode 100644 index f99856fdd8..0000000000 --- a/keyboards/preonic/README.md +++ /dev/null @@ -1,25 +0,0 @@ -Preonic keyboard firmware -====================== -DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). - -## Quantum MK Firmware - -For the full Quantum feature list, see [the parent README.md](/README.md). - -## Building - -Download or clone the whole firmware and navigate to the keyboards/preonic 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/preonic/config.h b/keyboards/preonic/config.h index e8d0e82fc9..04946f7fbb 100644 --- a/keyboards/preonic/config.h +++ b/keyboards/preonic/config.h @@ -37,6 +37,8 @@ along with this program. If not, see . #define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } #define UNUSED_PINS +#define BACKLIGHT_PIN B7 + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboards/preonic/keymaps/default/README.md b/keyboards/preonic/keymaps/default/README.md deleted file mode 100644 index e911968dd9..0000000000 --- a/keyboards/preonic/keymaps/default/README.md +++ /dev/null @@ -1 +0,0 @@ -# The default Preonic layout - largely based on the Planck's \ No newline at end of file diff --git a/keyboards/preonic/keymaps/default/compiled.hex b/keyboards/preonic/keymaps/default/compiled.hex deleted file mode 100644 index a988ab756c..0000000000 --- a/keyboards/preonic/keymaps/default/compiled.hex +++ /dev/null @@ -1,1609 +0,0 @@ -:100000000C94AF050C94F3050C94F3050C94F305D4 -:100010000C94F3050C94F3050C94F3050C94F30580 -:100020000C94F3050C94F3050C94EA180C94BC1989 -:100030000C941D270C94F3050C94F3050C94F30514 -:100040000C94F3050C94F3050C94F3050C94F30550 -:100050000C94F3050C9485270C94F3050C94F3058C -:100060000C94F3050C94F3050C94F3050C94F30530 -:100070000C94F3050C94F3050C94F3050C94F30520 -:100080000C94D00E0C94F3050C94F3050C94F3052A -:100090000C94F3050C94F3050C94F3050C94F30500 -:1000A0000C94F3050C94F3050C94F305291A4B1AE0 -:1000B000391B4B1A391B901AB31A391B081B1B1B0F -:1000C000051E051E341E341E731E931EE91FE91FF4 -:1000D0009E1EE91F4E1F4E1FB51FBE1FE91FE31FC7 -:1000E0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F40 -:1000F0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F30 -:100100006B1F791F801F871F911F07634236B79BA4 -:10011000D8A71A39685618AEBAAB558C1D3CB7CC67 -:100120005763BD6DEDFD753EF6177231BF000000DF -:10013000803F08000000BE922449123EABAAAA2AC2 -:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD -:1001500000000000BF000000803F00000000000819 -:100160004178D3BB4387D1133D190E3CC3BD4282B6 -:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74 -:10018000FFBE01C4FF7F3F000000000035001E00DD -:100190001F0020002100220023002400250026004B -:1001A00027002A002B0014001A0008001500170071 -:1001B0001C0018000C00120013004C002900040061 -:1001C0001600070009000A000B000D000E000F00CA -:1001D00033003400E1001D001B000600190005007B -:1001E0001100100036003700380028000530E0000C -:1001F000E200E30003302C002C00043050005100DA -:1002000052004F0035001E001F0020002100220078 -:10021000230024002500260027002A002B001400BC -:100220001A00090013000A000D000F0018001C003E -:1002300033004C00290004001500160017000700C9 -:100240000B00110008000C0012003400E1001D003A -:100250001B000600190005000E00100036003700D4 -:10026000380028000530E000E200E30003302C00F5 -:100270002C0004305000510052004F0035001E0089 -:100280001F0020002100220023002400250026005A -:1002900027002A002B0034003600370013001C0012 -:1002A00009000A00060015000F004C002900040098 -:1002B0001200080018000C0007000B0017001100C6 -:1002C00016003800E100330014000D000E001B0082 -:1002D000050010001A0019001D0028000530E0007C -:1002E000E200E30003302C002C00043050005100E9 -:1002F00052004F0035021E021F022002210222027C -:10030000230224022502260227022A0035021E02A9 -:100310001F022002210222022302240225022602B9 -:1003200027024C004C003A003B003C003D003E00E0 -:100330003F002D022E022F02300231020100400048 -:1003400041004200430044004500320264020100C3 -:100350000100010001000100010001000100010095 -:1003600001000100AB00AA00A900AE0035001E008C -:100370001F00200021002200230024002500260069 -:1003800027002A0035001E001F0020002100220047 -:10039000230024002500260027004C004C003A00D2 -:1003A0003B003C003D003E003F002D002E002F0092 -:1003B0003000310001004000410042004300440091 -:1003C000450032006400010001000100010001004D -:1003D000010001000100010001000100AB00AA00C2 -:1003E000A900AE00000000000000000000000000B6 -:1003F00000000000000000000000000000000000FD -:1004000000000000000000000000000000000000EC -:1004100000000000000000000000000000000000DC -:1004200000000000000000000000000000000000CC -:1004300000000000000000000000000000000000BC -:1004400000000000000000000000000000000000AC -:10045000000000000000000000000000000000009C -:10046000000000000000000000000000000000008C -:10047000000000000000000000000000000000007C -:10048000000000000000000000000000000000006C -:10049000000000000000000000000000000000005C -:1004A000000000000000000000000000000000004C -:1004B000000000000000000000000000000000003C -:1004C000000000000000000000000000000000002C -:1004D000000000000000000000000000000000001C -:1004E000000000000000000000000000000000000C -:1004F00000000000000000000000000000000000FC -:1005000000000000000000000000000000000000EB -:1005100000000000000000000000000000000000DB -:1005200000000000000000000000000000000000CB -:1005300000000000000000000000000000000000BB -:1005400000000000000000000000000000000000AB -:10055000000000000000000000000000000000009B -:10056000000000000000000000000000000000008B -:10057000000000000000000000000000000000007B -:10058000000000000000000000000000000000006B -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000000000001B -:1005E000000000000000000000000000000000000B -:1005F00000000000000000000000000000000000FB -:1006000000000000000000000000000000000000EA -:1006100000000000000000000000000000000000DA -:1006200000000000000000000000000000000000CA -:1006300000000000000000000000000000000000BA -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:10068000000000000000000000000000000000006A -:10069000000000000000000000000000000000005A -:1006A000000000000000000000000000000000004A -:1006B000000000000000000000000000000000003A -:1006C000000000000000000000000000000000002A -:1006D000000000000000000000000000000000001A -:1006E000000000000000000000000000000000000A -:1006F00000000000000000000000000000000000FA -:1007000000000000000000000000000000000000E9 -:1007100000000000000000000000000000000000D9 -:1007200000000000000000000000000000000000C9 -:1007300000000000000000000000000000000000B9 -:1007400000000000000000000000000000000000A9 -:100750000000000000000000000000000000000099 -:100760000000000000000000000000000000000089 -:100770000000000000000000000000000000000079 -:100780000000000000000000000000000000000069 -:100790000000000000000000000000000000000059 -:1007A0000000000000000000000000000000000049 -:1007B0000000000000000000000000000000000039 -:1007C0000000000000000000000000000000000029 -:1007D0000000000000000000000000000000000019 -:1007E0000000000000000000000000000000000009 -:1007F00000000000000000000000000000000000F9 -:1008000000000000000000000000000000000000E8 -:1008100000000000000000000000000000000000D8 -:1008200000000000000000000000000000000000C8 -:1008300000000000000000000000000000000000B8 -:1008400000000000000000000000000000000000A8 -:100850000000000000000000000000000000000098 -:100860000000000000000000000000000000000088 -:100870000000000000000000000000000000000078 -:100880000000000000000000000000000000000068 -:100890000000000000000000000000000000000058 -:1008A0000000000000000000000000000000000048 -:1008B0000000000000000000000000000000000038 -:1008C0000000000000000000000000000000000028 -:1008D0000000000000000000000000000000000018 -:1008E0000000000000000000000000000000000008 -:1008F00000000000000000000000000000000000F8 -:100900000000000000000000000000003A003B0072 -:100910003C003D003E003F004000410042004300DB -:1009200044004500010000700100010001000100C9 -:10093000010001000100010001004C000100010064 -:1009400001001570167013700A700030013002300B -:100950000100010001001C701B70187019701D70DF -:100960001E700100010001000100010001000100F2 -:10097000010001000100010001000100010001006F -:10098000010001002A0354006800650020005000A7 -:10099000720065006F006E006900630020004B006C -:1009A0006500790062006F00610072006400000061 -:1009B0002C034F007200740068006F006C00690027 -:1009C0006E0065006100720020004B006500790038 -:1009D00062006F0061007200640073000000040395 -:1009E000090409026D00040100A0FA0904000001D5 -:1009F00003010100092111010001224000070581C6 -:100A00000308000A09040100010301020009211181 -:100A1000010001224D000705820308000A090402B3 -:100A20000001030000000921110100012236000726 -:100A300005830308000A09040300010300000009FC -:100A40002111010001223900070584031000011261 -:100A500001100100000008EDFE61600100010200CC -:100A60000105010906A101050719E029E71500257F -:100A7000019508750181020508190129059505757B -:100A80000191029501750391010507190029771558 -:100A9000002501957875018102C005010980A10139 -:100AA000850216010026B7001A01002AB70075104A -:100AB00095018100C0050C0901A101850316010003 -:100AC000269C021A01002A9C02751095018100C023 -:100AD00005010902A1010901A10005091901290562 -:100AE00015002501950575018102950175038101A8 -:100AF0000501093009311581257F950275088106A8 -:100B000009381581257F950175088106050C0A387D -:100B1000021581257F950175088106C0C005010970 -:100B200006A101050719E029E715002501950875BB -:100B300001810295017508810105081901290595B2 -:100B400005750191029501750391010507190029A9 -:100B5000FF150026FF00950675088100C0001124CE -:100B60001FBECFEFDAE0DEBFCDBF04B603FE24C068 -:100B700080912A0490912B04A0912C04B0912D0413 -:100B80008730904BA740B04BB9F410922A041092D2 -:100B90002B0410922C0410922D0414BE84B7877F6E -:100BA00084BF88E10FB6F8948093600010926000D3 -:100BB0000FBEE0E0F8E3099512E0A0E0B1E0E0EB61 -:100BC000F2E602C005900D92AA3CB107D9F714E0F5 -:100BD000AAECB2E001C01D92AA32B107E1F70E946F -:100BE00034160C9456310C940000089581E0089559 -:100BF0000C94F5050C94F605279A2F988FEF9FEF2C -:100C000090938700809386008AE08093800089E13A -:100C1000809381000C948D2C0E94FC056E9A769A2C -:100C20000C94D206282F81110BC080918000877F01 -:100C30008093800010928D0010928C002F98089560 -:100C40002F9880918000886080938000233019F471 -:100C50008FEF9FEF0FC083E090E0821B9109880F18 -:100C6000991F2FEF3FEFA90102C0569547958A952E -:100C7000E2F7CA0190938D0080938C000895CF9382 -:100C8000DF93EC010E942128BE0180E090E0DF911B -:100C9000CF910C9414240F931F93FC01623091F1B7 -:100CA00028F4662359F06130D1F05FC0643009F454 -:100CB00040C0C0F1653009F44CC057C08281882320 -:100CC00009F453C000E010E0980140E064E070E0F7 -:100CD00088EC91E00E944E1281E090E010C0828189 -:100CE000882309F442C000E010E0980140E066E08B -:100CF00070E088E591E00E944E1282E090E00E9450 -:100D00003F0633C08281882381F100E010E0980122 -:100D100040E068E070E088E891E00E944E1284E0D4 -:100D200090E0EDCF8281882311F083E006C083E05C -:100D30000DC08281882349F084E00E94912440E123 -:100D400064E083E00E94030710C084E00E94B224A4 -:100D5000F6CF8281882331F085EE0E94A91C0E9483 -:100D6000E42C03C085EE0E94711D80E090E01F918D -:100D70000F9108950F931F932FEF89EF90E021506B -:100D800080409040E1F700C0000000E010E09801D2 -:100D900040E064E070E088EE91E00E944E121F9106 -:100DA0000F9108950C94BA060F931F9300E010E082 -:100DB000980140E063E070E080E491E00E944E1210 -:100DC0002FEF82E597E0215080409040E1F700C08E -:100DD00000001F910F910C94030E0F931F9300E0DE -:100DE00010E0980140E068E070E080E091E00E944F -:100DF0004E121F910F9108950C94ED0681E0089515 -:100E00000C94FE060895CF92DF92EF92FF920F931B -:100E10001F9301E010E020E030E06801790104C098 -:100E2000CC0CDD1CEE1CFF1C8A95D2F704C0000F11 -:100E3000111F221F331F6A95D2F70C291D292E2955 -:100E40003F29C090E003D090E103E090E203F090EE -:100E5000E303C022D122E222F322842FC016D1065E -:100E6000E206F30641F41F910F91FF90EF90DF909F -:100E7000CF900C9491241F910F91FF90EF90DF90F1 -:100E8000CF900C94B2240C940C0680911A03882302 -:100E900009F448C08091D6029091D702009779F466 -:100EA0000E944F279093D7028093D6028091D80258 -:100EB00090E0009771F48091D90290E00AC00E94FE -:100EC0005B2720910802309109022817390740F367 -:100ED00029C00197880F991F880F991FFC01E652BE -:100EE000FD4F60817181828193810E94360EE09175 -:100EF000D80284E0E89FF0011124E652FD4F6081A2 -:100F00007181828193814FE050E00E94EE118091C7 -:100F1000D80290E001966091D90270E00E940631FB -:100F20008093D8020C94F80510921C030C94030EC5 -:100F300081E080931C030C94FC0608958F929F928D -:100F4000AF92BF92EF92FF920F931F93CF93DF93D5 -:100F5000CDB7DEB7A3970FB6F894DEBF0FBECDBFF7 -:100F60007C01FC0100811181C8010E944D25B8015E -:100F70000E94320C8C01B7010E940007882309F4FB -:100F8000BDC20531F0E71F0741F4F70182818823D4 -:100F900009F458C00E94E512B1C20631F0E71F07FC -:100FA00041F4F7018281882309F44CC00E94EE12BB -:100FB000A5C20731F0E71F0751F4F70182818823AA -:100FC00009F440C00E94E1128111F0CFE3CF083153 -:100FD000F0E71F0739F4F7018281882399F10E9415 -:100FE00098078CC20931F0E71F0739F4F7018281B5 -:100FF000882341F10E94940781C20A31F0E71F075C -:1010000049F4F70182818823E9F080911C03811162 -:10101000F1CFE5CF0B31F0E71F0739F4F7018281FB -:10102000882381F00E94F5120AC00C31F0E71F07F7 -:1010300049F4F7018281882329F00E9400130E945D -:10104000ED065CC280911C03811105C0F70182810D -:101050008111CFC03AC1003E110579F4F7018281B8 -:10106000882309F44DC00E94030E81E080931B0386 -:1010700010921A031092D90241C2023E110559F48E -:10108000F70182818823E1F10E94030E10921B0375 -:1010900010921A0333C2033E110591F4F7018281C5 -:1010A000882371F10E94030E10921B0381E080934C -:1010B0001A031092D8021092D7021092D6021EC2C2 -:1010C0000235110559F4F7018281882309F416C20B -:1010D00080910802909109020A970DC0013511050F -:1010E00079F4F7018281882309F408C2809108020B -:1010F000909109020A969093090280930802FEC11A -:1011000040910C0283E2E7E2F2E0DE0111960190E9 -:101110000D928A95E1F7F701808121E030E02C0FF4 -:101120003D1F280F311DC90120910A0230910B0289 -:10113000FC01E20FF31F6081772767FD7095640F54 -:10114000711D882777FD8095982F0E94282E20E01A -:1011500030E040E451E40E948D2D4B015C01F70129 -:10116000218185E090E0821B9109BC01882777FDF1 -:101170008095982F0E94282E9B01AC01C501B401D7 -:101180000E94252D9B01AC0160E070E080E090E4BE -:101190000E949B2F20E030E04CED50E40E94382F5D -:1011A0004B015C01F70182818823D1F04FE050E0D0 -:1011B000C501B4010E94EE1180911B038823A1F0A8 -:1011C0008091D90224E0829FF0011124E652FD4F64 -:1011D00080829182A282B3828F5F8093D90204C001 -:1011E000C501B4010E94360E0F3F110508F02ECF45 -:1011F00085C18091D50281111FC0043130E71307EA -:1012000009F080C00E94020781E08093D5020E940D -:101210004F279093D4028093D3021092CC02109265 -:10122000CE021092CD021092D0021092CF021092F4 -:10123000D2021092D10262C18091D3029091D40265 -:101240000E945B27883C910570F48091CC02E82FC6 -:10125000F0E0EE0FFF1FE353FD4F118300838F5F1C -:101260008093CC024BC1043180E7180768F4023048 -:1012700090E7190708F050C00115E0E71E0771F06C -:1012800001301047A1F11CC1033320E7120709F414 -:10129000E8C00433104709F4FBC012C1F701828192 -:1012A000882309F412C10E9454200E94030E0E9458 -:1012B000D406FFEF24E33CE0F15020403040E1F75A -:1012C00000C000000E94AA2719C10431F0E71F07DF -:1012D00008F0C3C0023020E71207F0F4011530E730 -:1012E000130709F4F2C00130104709F0E9C0F70113 -:1012F0008281882309F4E9C08091FD038160809395 -:10130000FD03FCC00431F0E71F0708F0A6C002305F -:1013100020E7120708F4ECC0F7018281882309F462 -:10132000D4C00E940E28811102C00E94EA270E94A8 -:10133000262890E090930F0480930E040230F0E78B -:101340001F0721F480910E04816080C0033020E7E4 -:10135000120721F480910E04826078C0043030E7D7 -:10136000130721F480910E04846070C0053080E77B -:10137000180719F480910E0427C0063090E719076A -:1013800021F480910E04806161C00730E0E71E0700 -:1013900021F480910E04806259C00830F0E71F07E5 -:1013A00021F480910E04806451C0093020E71207B7 -:1013B00021F480910E04806849C00A3030E7130799 -:1013C00029F480910E048460886040C00B3080E76F -:1013D000180721F480910E048E7F38C00C3090E7FE -:1013E000190721F480910E048D7F30C00D30E0E7A5 -:1013F0001E0721F480910E048B7F28C00E30F0E789 -:101400001F0719F480910E0420C00F3020E7120747 -:1014100021F480910E048F7E19C0003130E713074C -:1014200021F480910E048F7D11C0013180E71807EF -:1014300021F480910E048F7B09C080910E0402314B -:10144000104711F48F7702C08B7F877F80930E0443 -:1014500080910E040E942A2851C0033390E7190797 -:10146000A1F4F7018281882321F01092CA0282E060 -:1014700016C08091CA02811106C086E20E94A91C92 -:1014800086E20E94711D82E018C004331047C1F447 -:10149000F7018281882331F01092CB0280E20E9412 -:1014A000C01D2CC08091CB02811106C087E20E9432 -:1014B000A91C87E20E94711D80E20E94C71D1EC008 -:1014C00081E08093CA028093CB02C701A3960FB636 -:1014D000F894DEBF0FBECDBFDF91CF911F910F916A -:1014E000FF90EF90BF90AF909F908F900C94FA0573 -:1014F000011530E7130709F0F6CED5CE80E0A396AC -:101500000FB6F894DEBF0FBECDBFDF91CF911F9114 -:101510000F91FF90EF90BF90AF909F908F900895A4 -:101520002CE0729FF00111243CE3839FE00DF11D3C -:101530001124E60FF11DEE0FFF1FE457FE4F8591BA -:1015400094910E94440C811540E5940708F047C02F -:10155000811520E4920708F013C1883E910520F51B -:10156000803E910508F07CC1883A910578F4853A6F -:10157000910508F0A5C08130910509F471C108F406 -:101580002EC18430910508F06BC129C18B3B9105B8 -:1015900008F4A1C0803C910508F421C1FC01EE0FC4 -:1015A000FF1FE45FFF4FE6C0811530E2930758F458 -:1015B000811541E0940708F053C1803F910508F47C -:1015C0000EC190650895811520E3920708F0D5C0FB -:1015D000FC01FF70EE0FFF1FE457FE4FCBC08115DB -:1015E00035E5930708F043C0811544E5940708F0FA -:1015F000DEC0811522E5920708F5811531E59307D4 -:1016000008F0C1C0482F437021E030E002C0220F33 -:10161000331F4A95E2F73C68AC0164E05695479564 -:101620006A95E1F74370342B8F708695869540E27A -:10163000849FC0011124822B932B0895282F269577 -:101640002695AC01437055278115934508F0A0C03D -:1016500080E2289F9001112481E090E002C0880F71 -:10166000991F4A95E2F7822B932B9C6808958F323D -:1016700040E7940790F48F3120E7920708F0A2C06A -:10168000811536E5930708F497C09C013056211563 -:10169000304108F0A4C09F7093C0803320E79207C8 -:1016A00009F497C008F492C0813340E7940709F425 -:1016B00093C08233904709F092C080E093ED089583 -:1016C000853A910509F48EC0863A910509F08DC0DE -:1016D00082E890E40895883A910509F489C0893A2E -:1016E000910509F488C08A3A910509F487C08B3ABC -:1016F000910509F486C08C3A910509F485C08D3AAC -:10170000910509F484C0803B910509F483C08E3AA9 -:10171000910509F482C08F3A910509F481C0813B9B -:10172000910509F480C0823B910509F47FC0833B99 -:10173000910509F47EC0843B910509F47DC0853B89 -:10174000910509F47CC0863B910509F47BC0873B79 -:10175000910509F47AC0883B910509F479C0893B69 -:10176000910509F478C08A3B910509F477C080E0BF -:1017700094E408958591949108959927906C089523 -:101780009F70906A0895982F8827816F906A0895B6 -:1017900090E2299F9001112481E090E002C0880F1F -:1017A000991F4A95E2F7822B932B9A680895982FF8 -:1017B0008827846F906A08958F719927982F8827BA -:1017C000906208958F519047946D089580E091ED57 -:1017D000089580E090ED089580E092ED089580E016 -:1017E00090E0089581E890E4089583E890E40895F6 -:1017F00082EE94E4089589EE94E408958AEE94E4E8 -:10180000089585EB94E4089586EB94E4089587EBBE -:1018100094E408958CEC94E408958DEC94E4089598 -:1018200083E895E408958AE895E4089582E995E4CB -:10183000089584E995E4089581E296E4089583E2A9 -:1018400096E4089584E296E4089585E296E4089586 -:1018500086E296E4089587E296E408958AE296E4A3 -:10186000089508959CE0799FF00111249CE3899FDD -:10187000E00DF11D1124E60FF11DEE0FFF1FE457DF -:10188000FE4F8591949108958238910549F1B0F405 -:101890008133910509F458C048F48932910509F45F -:1018A0004EC08A32910509F454C0089585339105DC -:1018B00009F440C08933910599F00895833E91055C -:1018C00029F138F4803E910591F0823E9105A1F016 -:1018D0000895863E9105F9F0873E910531F108950E -:1018E00020910E0420FD3AC021FD38C0089580915A -:1018F0000E0480FD35C032C080910E0482FF32C0DC -:1019000080910E0484FD30C083EE39C080910E04B6 -:1019100082FD28C0F5CF80910E0483FF27C08091FF -:101920000E0484FD21C087EE2AC080910E0483FD41 -:101930001DC0F5CF80910E0485FD1AC01BC080919B -:101940000E0485FD17C014C080910E0486FD14C0DE -:1019500015C080910E0486FD11C00EC080EE0FC030 -:1019600089E30DC082EE0BC080E009C086EE07C09F -:1019700089E205C085E303C08AE201C081E390E00B -:10198000089508950C94C10CE82FF0E0EA5AFD4F39 -:101990008081E82FEF70F0E082958F7021E030E0D9 -:1019A000A90102C0440F551F8A95E2F740A308958C -:1019B0000F931F93CF93DF93C4E0D0E001E010E0DA -:1019C000FE01EA5AFD4F8081E82FEF70F0E021A17F -:1019D00082958F70A80102C0440F551F8A95E2F7C7 -:1019E000CA01822B81A38C2F0E94C40C219740F73F -:1019F0008BE090E061E070E0FC01E65BFD4F208150 -:101A0000E22FEF70F0E042A122952F70DB0102C0BF -:101A1000AA0FBB1F2A95E2F79D01242B22A3019751 -:101A200058F7DF91CF911F910F9108950F931F9356 -:101A3000CF93DF9385B7806885BF85B7806885BF02 -:101A4000C4E0D0E001E010E0FE01EA5AFD4F8081E1 -:101A5000E82FEF70F0E021A182958F70A80102C0FD -:101A6000440F551F8A95E2F7CA01822B81A38C2F60 -:101A70000E94C40C219740F78BE090E061E070E099 -:101A8000FC01E65BFD4F2081E22FEF70F0E042A108 -:101A900022952F70DB0102C0AA0FBB1F2A95E2F727 -:101AA0009D01242B22A3019758F7DF91CF911F911D -:101AB0000F910C944307EF92FF920F931F93CF93D4 -:101AC000DF9307E213E0C4E0EE24E394F12CD5E0C9 -:101AD0008C2F0E94C40C8BE090E040E050E0FC01B1 -:101AE000E65BFD4F6081E62FEF70F0E020A130E073 -:101AF00062956F7002C0359527956A95E2F720FDD3 -:101B000009C09701082E02C0220F331F0A94E2F782 -:101B1000422B532B019718F7F801929182918F0174 -:101B20008417950721F051834083D0930D028C2FA9 -:101B30000E94C40CC15060F680910D0287FD1FC049 -:101B4000815080930D028F3F39F08FE99FE001971C -:101B5000F1F700C0000013C080E090E0FC01E95DF7 -:101B6000FC4FDC01A35EBC4F18962D913C91199758 -:101B7000318720870297863FEFEF9E0779F70E9413 -:101B8000450781E0DF91CF911F910F91FF90EF907A -:101B90000895E82FF0E0EE0FFF1FE95DFC4F808114 -:101BA0009181089508950F931F93CF9301E313E05C -:101BB000C0E0F801929182918F010E94C826C80F5F -:101BC000F3E007321F07A9F78C2FCF911F910F91D8 -:101BD00008950E940E28811102C00E94EA270E94E7 -:101BE0003828809314043E9A809171008D7F8093F1 -:101BF000710082E0809390008AE18093910081E0FF -:101C000080933303089580913303811102C00E94B1 -:101C1000E90D1092830310928203809171008D7FF1 -:101C200080937100809190008F7380939000109248 -:101C300045031092440310927C0310927D0310928E -:101C40007E0310927F0310927B0310927A03EAE5E1 -:101C5000F3E0AAE4B3E011921192119211921D9255 -:101C60001D9283E0EA37F807B1F70895CF92DF922B -:101C7000EF92FF920F931F93CF93DF932091440332 -:101C8000222309F484C06B017C018091330381110C -:101C900002C00E94E90D0AE713E0C7E0D0E0A70107 -:101CA0009601F80192918291729162918F010E9446 -:101CB000892D811131C0FE01EE0FFF1FEE0FFF1FB6 -:101CC000E65AFC4F1082118212821382DE01AA0FA3 -:101CD000BB1FA65BBC4F11961C921E92C730D1054C -:101CE000E9F0219644815581668177814083518353 -:101CF00062837383148215821682178212968D91E5 -:101D00009C91139711969C938E9313961C921E92FE -:101D1000129734961296E2CF219708F680918203AB -:101D200090918303019797FD05C09093830380935F -:101D3000820304C010928303109282038091820375 -:101D400090918303209180033091810328173907F4 -:101D500024F01092810310928003892BC1F48091AA -:101D600071008D7F80937100809190008F738093BC -:101D7000900010927C0310927D0310927E031092CB -:101D80007F0310927B0310927A0310924403DF9139 -:101D9000CF911F910F91FF90EF90DF90CF9008951A -:101DA0001F920F920FB60F9211244F925F926F9273 -:101DB0007F928F929F92AF92BF92CF92DF92EF92DB -:101DC000FF922F933F934F935F936F937F938F93E4 -:101DD0009F93AF93BF93CF93DF93EF93FF93809144 -:101DE0004403882309F49BC1C0918203D0918303EB -:101DF0001C161D060CF093C140903403509035031F -:101E0000609036037090370320E030E0A901C301F1 -:101E1000B2010E94342F18160CF065C0C130D105F4 -:101E200009F452C08091800390918103BE010E9409 -:101E300006317C0190938103809380038090460358 -:101E400090904703A0904803B090490320E030E011 -:101E500040E85FE3C501B4010E94252D609346036D -:101E6000709347038093480390934903F701EE0F63 -:101E7000FF1FEE0FFF1FE65AFC4FA3019201608186 -:101E80007181828193810E948D2D20E030E040E0BD -:101E90005EE30E94382F9B01AC01C501B4010E9492 -:101EA000342F18168CF4C7010196BE010E9406312A -:101EB000909381038093800310924603109247030E -:101EC0001092480310924903E0918003F09181033E -:101ED000EE0FFF1FEE0FFF1FE65AFC4F608171816E -:101EE00082819381D0C0C0907C03D0907D03E0902C -:101EF0007E03F0907F0320E030E0A901C701B60126 -:101F00000E94892D2197882309F4A2C0FE01EE0FBB -:101F1000FF1FEE0FFF1FE65AFC4F80809180A280CA -:101F2000B380A5019401C701B6010E94892D87FFE6 -:101F300031C0A501940160E070E08CED93EC0E944B -:101F40008D2D20E030E040E451E40E948D2D20E012 -:101F500030E040E05FE30E94382F9B01AC0160E07D -:101F600070E080E090E40E949B2F9B01AC01C501D2 -:101F7000B4010E94382F9B01AC01C701B6010E9439 -:101F8000892D87FF07C0A701960160E070E08CED06 -:101F900093E439C0A5019401C701B6010E94342F12 -:101FA00018160CF055C0A501940160E070E08CEDAE -:101FB00093E40E948D2D20E030E040E451E40E9443 -:101FC0008D2D20E030E040E05FE30E94382F9B0140 -:101FD000AC0160E070E080E090E40E949B2F9B01E8 -:101FE000AC01C501B4010E94382F9B01AC01C701AF -:101FF000B6010E94342F18165CF5A701960160E027 -:1020000070E08CED93EC0E948D2D20E030E040E4F8 -:1020100051E40E948D2D20E030E040E05FE30E941B -:10202000382F9B01AC0160E070E080E090E40E94FA -:102030009B2F9B01AC01C701B6010E94382F609312 -:102040007C0370937D0380937E0390937F0313C082 -:10205000FE01EE0FFF1FEE0FFF1FE65AFC4F8081BF -:102060009181A281B38180937C0390937D03A0939F -:102070007E03B0937F0360917C0370917D03809118 -:102080007E0390917F0320913103309132032F3FE3 -:102090004FEF340731F02F5F3F4F309332032093DF -:1020A00031030E940B136B017C0120E034E244EF0A -:1020B00051E40E94892D87FF08C086EFC82E88E270 -:1020C000D82E84EFE82E81E4F82E20E030E040E0C6 -:1020D00051E4C701B6010E94382F9B01AC0160E0BA -:1020E00074E284E79BE40E948D2D6B017C010E94C9 -:1020F000FA2D709397006093960020910E02309114 -:102100000F024091100250911102C701B6010E94C6 -:10211000382F0E94FA2D7093990060939800809157 -:102120004503882309F433C1C0904003D090410394 -:10213000E0904203F090430320E030E0A901C701A2 -:10214000B6010E94342F1816D4F580913103909176 -:1021500032038F3F2FEF920729F0019690933203BD -:1021600080933103C701B6010E940B1320E030E0D9 -:1021700040E051E40E94382F9B01AC0160E074E222 -:1021800084E79BE40E948D2D6B017C010E94FA2D57 -:10219000709397006093960020910E0230910F0289 -:1021A0004091100250911102C701B6010E94382FD0 -:1021B0000E94FA2D709399006093980008C01092C5 -:1021C00097001092960010929900109298006091DA -:1021D0003A0370913B036F5F7F4F70933B036093B3 -:1021E0003A03209196003091970080E090E0232BF5 -:1021F000F1F0C0919600D09197000E94262E6B01BD -:102200007C01BE0180E090E00E94262E9B01AC0183 -:1022100060913C0370913D0380913E0390913F0398 -:102220000E948D2D20E03FEF4FE757E410C00E9441 -:10223000262E6B017C0120E030EE4FEF54E46091DC -:102240003C0370913D0380913E0390913F030E94B7 -:10225000382F9B01AC01C701B6010E94342F87FDC6 -:1022600096C0809138038F5F8093380390E020916F -:1022700010043091110482179307A0F080911B0481 -:10228000882319F0109238030DC0809171008D7F62 -:1022900080937100809190008F73809390001092D2 -:1022A00045037DC080913903C0913803811128C056 -:1022B000C0901504D0901604E0901704F090180414 -:1022C00020E030E0A901C701B6010E94342F1816A2 -:1022D000BCF481E0809339031092400310924103D3 -:1022E0001092420310924303C0923C03D0923D03EC -:1022F000E0923E03F0923F03C150C093380343C0C5 -:10230000109239031092320310923103E0911204BB -:10231000F091130448E0C49FE00DF11D1124808169 -:102320009181A281B3818093400390934103A09354 -:102330004203B093430320E030E040E85EE3648171 -:102340007581868197810E94382F6B017C01809175 -:102350001202682F70E080E090E00E94262E20E0BC -:1023600030E048EC52E40E948D2D9B01AC01C70186 -:10237000B6010E94382F60933C0370933D03809315 -:102380003E0390933F0310923B0310923A038091D7 -:10239000140480FD04C01092450310924403FF9181 -:1023A000EF91DF91CF91BF91AF919F918F917F91ED -:1023B0006F915F914F913F912F91FF90EF90DF9040 -:1023C000CF90BF90AF909F908F907F906F905F90D5 -:1023D0004F900F900FBE0F901F901895CF92DF92E5 -:1023E000EF92FF92CF93DF936B017C01EA01809122 -:1023F0003303811102C00E94E90D8091140480FF13 -:1024000046C0809182039091830308970CF03FC0EF -:10241000809171008D7F80937100809145038111BF -:102420000E94030E81E080934403109232031092C5 -:10243000310320E030E0A901C701B6010E94342F2A -:102440001816DCF48091820390918303FC01EE0F57 -:10245000FF1FEE0FFF1FE65AFC4FC082D182E282BF -:10246000F382FC01EE0FFF1FE65BFC4FD183C083BC -:102470000196909383038093820380917100826020 -:102480008093710080919000806880939000DF912C -:10249000CF91FF90EF90DF90CF9008958F929F9211 -:1024A000AF92BF92CF92DF92EF92FF920F931F9362 -:1024B000CF93DF93EC017B01D42E48015901809129 -:1024C0003303811102C00E94E90D8091140480FF42 -:1024D0006BC0809171008D7F809371008091440367 -:1024E00081110E94030E81E080934503D093130471 -:1024F000C0931204F0921104E0921004D0921B04D5 -:102500008092150490921604A0921704B0921804B9 -:102510001092460310924703109248031092490309 -:102520001092380388819981AA81BB8180934003EE -:1025300090934103A0934203B093430320E030E023 -:1025400040E85EE36C817D818E819F810E94382FFF -:102550006B017C0180911202682F70E080E090E0B6 -:102560000E94262E20E030E048EC52E40E948D2D9F -:102570009B01AC01C701B6010E94382F60933C0358 -:1025800070933D0380933E0390933F0310923B036F -:1025900010923A0380917100826080937100809163 -:1025A0009000806880939000DF91CF911F910F91F0 -:1025B000FF90EF90DF90CF90BF90AF909F908F9063 -:1025C00008958091140481700895809114048160AD -:1025D000809314040E943C280C949D07809114045D -:1025E0008E7F809314040C943C288091840390E0A7 -:1025F000019666E070E00E9406318093840308959E -:102600008091840390E0019766E070E00E940631BB -:102610008093840308958F929F92AF92BF92CF923E -:10262000DF92EF92FF920F931F93CF93DF936B0193 -:102630007C01C0913103D0913203BE0180E090E073 -:102640000E94262E4B015C01A701960160E070E01C -:102650008CE594E40E948D2D9B01AC01C501B40171 -:102660000E94382F0E94FA2D20918403233009F410 -:1026700073C028F4222351F02130E9F02CC124301A -:1026800009F4A0C0253009F4E0C025C180E090E045 -:10269000A0E0BFE380930E0290930F02A09310027C -:1026A000B093110210923403109235031092360346 -:1026B0001092370310C11092340310923503109218 -:1026C0003603109237036431710540F46A307105A6 -:1026D00060F520E030E040E85EE32BC0693C710526 -:1026E00008F0AAC080E090E00E94262E20E030E0B2 -:1026F00040EA51E40E94242D20E030E044E353E41A -:102700000E948D2D9B01AC010E94382F20E030E00B -:1027100040E05EE30E94382F9B01AC0160E070E076 -:1027200080E09EE30E94242D44C020E030E040E0A1 -:102730005FE3C701B6010E94382F6B017C0180E086 -:1027400090E0A0E0BEE380930E0290930F02A0936E -:102750001002B0931102BFC01092340310923503DF -:1027600010923603109237034AE0469F9001479F2C -:10277000300D1124C90168EB7BE00E94F230BC01EE -:102780006C5D754077FF03C071956195710988276D -:1027900077FD8095982F0E94282E2EE333EC4EE291 -:1027A00059E30E94382F20E030E040EC5EE30E94C5 -:1027B000252D60930E0270930F0280931002909368 -:1027C000110289C01092340310923503109236031F -:1027D00010923703CE0183709927892BE1F0BE0157 -:1027E0006170772780E090E00E94262E20E030E0A4 -:1027F00040E05EE30E94382F20E030E040E45FE3F9 -:102800000E94252D60930E0270930F028093100298 -:10281000909311020CC080E090E0A0E0BFE38093B1 -:102820000E0290930F02A0931002B0931102C77092 -:10283000DD27CD2B09F04FC010920E0210920F022F -:10284000109210021092110246C01092340310929E -:102850003503109236031092370300E010E020E0B9 -:102860003FE300930E0210930F0220931002309367 -:1028700011026739710578F180E090E00E94262E00 -:1028800020E030E047E153E40E94242D20E030E0D6 -:102890004AE754E40E948D2D20E030E048E452E401 -:1028A0000E94382F20E030E040EA51E40E946A2E76 -:1028B0000E94F52D660F771F660F771FFB01E55A03 -:1028C000FD4F2081318142815381C701B6010E94B1 -:1028D000382F6B017C01C701B601DF91CF911F91A9 -:1028E0000F91FF90EF90DF90CF90BF90AF909F90AF -:1028F0008F900895809195030895CF93DF9300D032 -:102900001F92CDB7DEB79C0180912004843019F569 -:1029100093E099833B832A839093E9008FEF909112 -:10292000E800815095FD06C095ED9A95F1F70000FD -:102930008111F5CF8091E80085FF0DC040E050E0A7 -:1029400063E070E0CE0101960E94DA168091E80003 -:102950008E778093E8000F900F900F90DF91CF91CA -:102960000895CF93DF9300D01F92CDB7DEB72091AB -:102970002004243021F522E029839B838A8383E08D -:102980008093E9008FEF9091E800815095FD06C09B -:1029900095ED9A95F1F700008111F5CF8091E8004F -:1029A00085FF0DC040E050E063E070E0CE0101968D -:1029B0000E94DA168091E8008E778093E8000F90ED -:1029C0000F900F90DF91CF91089520912004243033 -:1029D000F1F422E02093E9002FEF3091E80021503C -:1029E00035FD06C035ED3A95F1F700002111F5CF20 -:1029F0002091E80025FF0BC040E050E065E070E06A -:102A00000E94DA168091E8008E778093E80008959E -:102A1000CF93DF93EC0190912004943009F046C0ED -:102A200080911D028823D9F080911E028823B9F07D -:102A30009093E9008FEF9091E800815095FD06C0DA -:102A400095E19A95F1F700008111F5CF8091E800AA -:102A500085FF2CC040E050E060E170E017C081E0ED -:102A60008093E9008FEF9091E800815095FD06C0BA -:102A700095ED9A95F1F700008111F5CF8091E8006E -:102A800085FF14C040E050E068E070E0CE010E9495 -:102A9000DA168091E8008E778093E80080E1FE01ED -:102AA000A5E8B3E001900D928A95E1F7DF91CF910F -:102AB000089580911F04811109C00E946F180E941F -:102AC000CC188091E20084608093E2000895109217 -:102AD0001F040895089508950C94122742E061ECB4 -:102AE00081E00E94E91742E061EC82E00E94E91770 -:102AF00042E061EC83E00E94E91742E161EC84E08E -:102B00000C94E91780912204833009F455C030F405 -:102B1000813071F0823009F48EC008958A3009F452 -:102B20007AC08B3009F460C0893009F09CC020C0A5 -:102B300080912104813A09F096C08091E800877F56 -:102B40008093E8008091250490912604892B21F43C -:102B500060E185E893E003C060E080E090E070E031 -:102B60000E9425178091E8008B778093E8000895F4 -:102B700080912104813209F076C0809125049091E2 -:102B80002604009719F0039709F06DC08091E800C2 -:102B9000877F8093E8008091E80082FD05C08091E6 -:102BA00020048111F8CF5FC08091F10080939503DC -:102BB0008091E8008B7753C080912104813A09F01D -:102BC00052C08091250490912604892B09F04BC0B6 -:102BD0008091E800877F8093E8008091E80080FF83 -:102BE000FCCF80911D0236C0809121048132D9F53D -:102BF0008091250490912604892BA9F58091E80005 -:102C0000877F8093E8000E941E18809123048093A0 -:102C10001D020C94542080912104813221F5809171 -:102C2000E800877F8093E8000E941E1880912404AA -:102C300080939603089580912104813AA1F48091B4 -:102C4000E800877F8093E8008091E80080FFFCCF58 -:102C5000809196038093F1008091E8008E778093B5 -:102C6000E8000C941E18089584B7877F84BF88E11C -:102C70000FB6F89480936000109260000FBE80E859 -:102C800080936100109261000E94C11B0E946F1826 -:102C90000E94CC188091E20084608093E2007894D6 -:102CA0000E94521B0E94C31B83E192E00E946D1B95 -:102CB00080912004853069F40E94D42680911E04FE -:102CC0008823B1F30E940127882391F30E94C41640 -:102CD000EFCF0E94CB1BECCF292F332723303105B8 -:102CE000C9F064F42130310581F02230310509F05A -:102CF00043C08DE690E022EE39E042C0213231053A -:102D0000F1F02232310541F137C082E190E02FE449 -:102D10003AE036C099278130910541F08230910523 -:102D200041F0892B49F5EEEDF9E005C0E0EBF9E063 -:102D300002C0E4E8F9E0849190E09F0121C0643092 -:102D4000D8F4E62FF0E0EE0FFF1FE954FD4F20818D -:102D5000318189E090E014C0643070F470E0FB01D0 -:102D6000EE0FFF1FE155FD4F20813181FB01E5553D -:102D7000FD4F808190E004C080E090E020E030E0F2 -:102D8000FA0131832083089580E189BD82E189BD04 -:102D900009B400FEFDCF8091D8008F7D8093D800CC -:102DA0008091E00082608093E0008091E00081FDEE -:102DB000FCCF0895CF92DF92EF92FF920F931F9373 -:102DC000CF93DF93EC018B016A010E943D188111C2 -:102DD00033C0C114D10439F0F60180819181081B00 -:102DE000190BC80FD91FE12CF12C0115110519F190 -:102DF0008091E80085FD16C08091E8008E77809371 -:102E0000E800C114D10449F0F60180819181E80EF7 -:102E1000F91EF182E08285E00FC00E943D188823F0 -:102E200021F30AC089918093F10001501109FFEF4D -:102E3000EF1AFF0ADACF80E0DF91CF911F910F9157 -:102E4000FF90EF90DF90CF9008952091270430916C -:102E500028042617370748F06115710539F42091C9 -:102E6000E8002E772093E80001C0B90140E0611529 -:102E70007105A9F120912004222309F443C02530D3 -:102E800009F442C02091E80023FD40C02091E800F1 -:102E900022FD32C02091E80020FFE9CF4091F300ED -:102EA0002091F20030E0342BFC01CF016115710557 -:102EB00059F02830310540F481918093F100615040 -:102EC00071092F5F3F4FF1CF41E02830310509F004 -:102ED00040E02091E8002E772093E800C8CF411110 -:102EE000C9CF0AC080912004882361F0853061F049 -:102EF0008091E80083FD0AC08091E80082FFF2CF54 -:102F000080E0089582E0089583E0089581E00895C7 -:102F100020912704309128042617370748F06115BF -:102F2000710539F42091E8002E772093E80001C064 -:102F3000B901FC0120E06115710591F18091200437 -:102F4000882309F440C0853009F43FC08091E8002F -:102F500083FD3DC08091E80082FD2FC08091E80094 -:102F600080FFE9CF2091F3008091F20090E0922B56 -:102F70006115710559F08830910540F42491209332 -:102F8000F1003196615071090196F2CF21E0089766 -:102F900009F020E08091E8008E778093E800CBCFA5 -:102FA0002111CCCF0AC080912004882361F08530A4 -:102FB00061F08091E80083FD0AC08091E80082FF03 -:102FC000F2CF80E0089582E0089583E0089581E0E3 -:102FD0000895982F973058F59093E900981739F095 -:102FE0007091EC002091ED005091F00003C0242F6F -:102FF000762F50E021FF19C03091EB003E7F3093D7 -:10300000EB003091ED003D7F3093ED003091EB000F -:1030100031603093EB007093EC002093ED005093FF -:10302000F0002091EE0027FF07C09F5FD3CF8F7085 -:103030008093E90081E0089580E008958091210463 -:1030400087FF11C08091E80082FD05C080912004B7 -:103050008111F8CF11C08091E8008B770BC080916F -:103060002004882349F08091E80080FFF8CF809108 -:10307000E8008E778093E80008952091E400309175 -:10308000E50095E64091EC00842F817040FF22C05E -:103090008091E80080FD1CC080912004882391F07D -:1030A000853091F08091EB0085FD10C04091E400E7 -:1030B0005091E5004217530729F39A01915011F7F7 -:1030C00084E0089582E0089583E0089581E0089502 -:1030D00080E008954091E80042FFDECF08950E940D -:1030E000DD180E94E518E0EEF0E0808181608083C9 -:1030F000E8EDF0E080818F77808319BCA7EDB0E028 -:103100008C918E7F8C9380818F7E808310921F04A0 -:1031100008950F931F93CF93DF930E94DD180E94B1 -:10312000E518C8EDD0E088818F7788838881806832 -:10313000888388818F7D888319BC10922004109227 -:103140001C0410921E0410921D0400EE10E0F80101 -:1031500080818B7F808388818160888342E060E00A -:1031600080E00E94E917E1EEF0E080818E7F8083AD -:10317000E2EEF0E0808181608083808188608083DE -:10318000F80180818E7F8083888180618883DF91D0 -:10319000CF911F910F910895E8EDF0E080818F7E2F -:1031A0008083E7EDF0E080818160808384E082BFEE -:1031B00081E080931F040C948918E8EDF0E0808191 -:1031C0008E7F80831092E20008951092DA001092B0 -:1031D000E10008951F920F920FB60F9211242F93C2 -:1031E0003F934F935F936F937F938F939F93AF938F -:1031F000BF93EF93FF938091E10082FF0BC080911A -:10320000E20082FF07C08091E1008B7F8093E100A4 -:103210000E94511B8091DA0080FF1FC08091D8006E -:1032200080FF1BC08091DA008E7F8093DA0080914E -:10323000D90080FF0DC080E189BD82E189BD09B45C -:1032400000FEFDCF81E0809320040E94591505C047 -:1032500019BC109220040E9467158091E10080FF44 -:1032600019C08091E20080FF15C08091E2008E7F3E -:103270008093E2008091E20080618093E20080917F -:10328000D80080628093D80019BC85E08093200428 -:103290000E946B158091E10084FF30C08091E200B4 -:1032A00084FF2CC080E189BD82E189BD09B400FEA4 -:1032B000FDCF8091D8008F7D8093D8008091E10070 -:1032C0008F7E8093E1008091E2008F7E8093E20008 -:1032D0008091E20081608093E20080911C04882349 -:1032E00011F084E007C08091E30087FD02C081E017 -:1032F00001C083E0809320040E946C158091E1005E -:1033000083FF29C08091E20083FF25C08091E10006 -:10331000877F8093E10082E08093200410921C0458 -:103320008091E1008E7F8093E1008091E2008E7FAA -:103330008093E2008091E20080618093E20042E0AD -:1033400060E080E00E94E9178091F000886080933F -:10335000F0000E946A15FF91EF91BF91AF919F918C -:103360008F917F916F915F914F913F912F910F902E -:103370000FBE0F901F9018951F920F920FB60F92CD -:1033800011242F933F934F935F936F937F938F936A -:103390009F93AF93BF93CF93DF93EF93FF93C0912E -:1033A000E900CF708091EC00D82FD17080FDD0E87B -:1033B0001092E9008091F000877F8093F00078946C -:1033C0000E94001A1092E9008091F00088608093BA -:1033D000F000CD2BCF70C093E900FF91EF91DF910A -:1033E000CF91BF91AF919F918F917F916F915F919D -:1033F0004F913F912F910F900FBE0F901F901895F6 -:103400001F93CF93DF93CDB7DEB7AA970FB6F8948B -:10341000DEBF0FBECDBFE1E2F4E088E08E0F9091F9 -:10342000F10091938E13FBCF0E9482158091E800EA -:1034300083FF1FC18091210490912204492F50E005 -:103440004A30510508F015C1FA01EA5AFF4F0C94B1 -:103450001A31803881F0823809F00BC1809125043F -:103460008F708093E9008091EB0085FB882780F9BD -:103470001092E90006C080911D0490911E049111E4 -:1034800082609091E800977F9093E8008093F1002C -:103490001092F100C8C0282F2D7F09F0EAC08823C0 -:1034A00019F0823061F0E5C080912304813009F089 -:1034B000E0C0933009F080E080931E042BC080911F -:1034C0002304811127C0809125048F7009F4D1C095 -:1034D0008093E9002091EB0020FF1CC0933021F481 -:1034E0008091EB00806214C09091EB00906190930A -:1034F000EB0021E030E0A90102C0440F551F8A957E -:10350000E2F74093EA001092EA008091EB008860B5 -:103510008093EB001092E9008091E800877F86C0DD -:103520008111A7C0109123041F778091E300807858 -:10353000812B8093E3008091E800877F8093E800EF -:103540000E941E188091E80080FFFCCF8091E3006C -:1035500080688093E300111102C082E001C083E023 -:103560008093200486C08058823008F082C0809109 -:103570002304909124048C3D53E0950779F583E072 -:103580008A838AE289834FB7F894DE01139620E09C -:103590003EE051E2E32FF0E050935700E49120FF2A -:1035A00003C0E295EF703F5FEF708E2F90E0EA303E -:1035B00010F0C79601C0C0968D939D932F5F243164 -:1035C00049F74FBF8091E800877F8093E8006AE267 -:1035D00070E0CE0101960E94251714C0AE014F5F26 -:1035E0005F4F609125040E946C16BC01009709F49E -:1035F00040C09091E800977F9093E80089819A817C -:103600000E9488178091E8008B778093E80031C092 -:10361000803879F58091E800877F8093E800809179 -:103620001C048093F1008091E8008E778093E8007D -:103630000E941E181EC081111CC09091230492305C -:10364000C0F48091E800877F8093E80090931C0489 -:103650000E941E1880911C04811106C08091E30015 -:1036600087FD02C081E001C084E0809320040E94B5 -:103670006E158091E80083FF0AC08091E800877F83 -:103680008093E8008091EB0080628093EB00AA9623 -:103690000FB6F894DEBF0FBECDBFDF91CF911F9163 -:1036A00008950895CF93809120048823A1F0C091BC -:1036B000E900CF709091EC00892F817090FD80E837 -:1036C000C82B1092E9008091E80083FD0E94001A47 -:1036D000CF70C093E900CF91089590939C0380939D -:1036E0009B030895E0919B03F0919C03309721F098 -:1036F0000190F081E02D099480E00895E0919B0312 -:10370000F0919C03309721F00280F381E02D099421 -:103710000895E0919B03F0919C03309721F0048081 -:10372000F581E02D099408952091990330919A0331 -:103730008217930771F090939A0380939903E09115 -:103740009B03F0919C03309721F00680F781E02DD8 -:103750000994089520919703309198038217930755 -:1037600071F09093980380939703E0919B03F091FD -:103770009C03309721F00084F185E02D0994089591 -:1037800008950C94C01B0E9446270E94160D0E94AB -:10379000CC270C948D2C5F926F927F928F929F9288 -:1037A000AF92BF92CF92DF92EF92FF920F931F934F -:1037B000CF93DF9300D000D01F92CDB7DEB70E9429 -:1037C0005B0D98EAC92E93E0D92E04E010E0AA24FC -:1037D000A394B12C502E802F0E94C90D4C01F601EC -:1037E000729062906F016826792661147104A1F4C9 -:1037F0000150110978F78FEF89838A831B820E9419 -:103800004F278160782F9D838C8349815A816B81FA -:103810008D810E947B1C38C08091FD0381FD0E9438 -:10382000D20D2BE030E07501022E02C0EE0CFF1C21 -:103830000A94E2F7C70186219721892B09F1298390 -:103840005A828E209F2091E0892809F490E09B8382 -:103850000E944F278160782F9D838C8349815A81F4 -:103860006B818D810E947B1C000F111FF801E256B5 -:10387000FC4F80819181E826F926F182E08204C024 -:103880002150310980F6B4CF0E94BB2910919D03CD -:103890000E94721B1817D1F00E94721B80939D0327 -:1038A0000F900F900F900F900F90DF91CF911F917D -:1038B0000F91FF90EF90DF90CF90BF90AF909F90CF -:1038C0008F907F906F905F900C94C20C0F900F9030 -:1038D0000F900F900F90DF91CF911F910F91FF905C -:1038E000EF90DF90CF90BF90AF909F908F907F90A0 -:1038F0006F905F900895CF93DF93CDB7DEB72B978E -:103900000FB6F894DEBF0FBECDBF4F8358876987CF -:103910007A878B87DE01119686E0FD0111928A95E8 -:10392000E9F785E0FE01379601900D928A95E1F75F -:1039300049815A816B817C818D819E810E94F22216 -:103940002B960FB6F894DEBF0FBECDBFDF91CF919F -:103950000895CF93882309F4C2C0C82F823859F440 -:103960000E94721B81FDBBC089E30E94CC250E948E -:10397000992689E30CC0833879F40E94721B80FD7C -:10398000AEC083E50E94CC250E94992683E50E9463 -:103990000E26CF910C949926843859F40E94721BFC -:1039A00082FD9DC087E40E94CC250E94992687E471 -:1039B000EECF8CEF8C0F813A48F48C2F0E94F62BBF -:1039C00081118DC08C2F0E94CC25E3CF80E28C0F1B -:1039D000883048F4C77081E001C0880FCA95EAF7C3 -:1039E0000E945226D6CF8BE58C0F833078F4C53AEF -:1039F00029F0C63A31F083E890E005C081E890E014 -:103A000002C082E890E0CF910C94941B88E58C0F63 -:103A1000833108F064C0C83A39F1C93A41F1CA3A71 -:103A200049F1CB3A51F1CC3A59F1CD3A61F1C03B71 -:103A300069F1CE3A71F1CF3A79F1C13B81F1C23BE4 -:103A400089F1C33B91F1C43B99F1C53BA1F1C63B60 -:103A5000A9F1C73BB1F1C83BB9F1C93BC1F1CA3BC0 -:103A6000C9F180E090E038C082EE90E035C089EE88 -:103A700090E032C08AEE90E02FC085EB90E02CC041 -:103A800086EB90E029C087EB90E026C08CEC90E0BC -:103A900023C08DEC90E020C083E891E01DC08AE84F -:103AA00091E01AC082E991E017C084E991E014C066 -:103AB00081E292E011C083E292E00EC084E292E0E3 -:103AC0000BC085E292E008C086E292E005C087E282 -:103AD00092E002C08AE292E0CF910C94AA1BCF91AF -:103AE0000895882309F44BC0823859F40E94721B50 -:103AF00081FF45C089E30E94CC250E94992689E375 -:103B00000CC0833871F40E94721B80FF38C083E5BB -:103B10000E94CC250E94992683E50E940E260C94D3 -:103B20009926843859F40E94721B82FF28C087E4CA -:103B30000E94CC250E94992687E4EFCF9CEF980F36 -:103B4000913A58F390E2980F983050F4877091E0D2 -:103B500001C0990F8A95EAF7892F0E945826DFCF76 -:103B60009BE5980F933020F480E090E00C94941B38 -:103B7000885A833120F480E090E00C94AA1B0895C9 -:103B8000882321F00E9452260C94992608958823B8 -:103B900021F00E9458260C94992608957F928F92C6 -:103BA0009F92AF92BF92CF92DF92EF92FF920F93CC -:103BB0001F93CF93DF931F92CDB7DEB77C01C62E44 -:103BC000772EFC01058102950F70128111110E9460 -:103BD0006F260E94C525882379F0112369F080E2C1 -:103BE0008C0D883048F082E00E94AE250E94C525E9 -:103BF00091E0D82ED92601C0D12CE72DE295EF70A7 -:103C0000F0E0E05AFF4F0C941A31872D807F072D8A -:103C10000F70882311F00295007F112389F0002393 -:103C200009F499C180E28C0D883020F4802F0E9425 -:103C3000522603C0802F0E9462260E9499268BC1C3 -:103C40008C2D0E94711D002309F4C3C180E28C0DEC -:103C5000883020F4802F0E94582603C0802F0E94B5 -:103C600068260E949926B5C1872D807F972D9F7069 -:103C7000803211F4892F03C0892F8295807FCC2058 -:103C800021F0F1E0CF16A1F01DC0112339F000237F -:103C900019F1013009F50E9482269BC1002319F019 -:103CA000013009F496C189830E948526898110C15B -:103CB000112321F0063008F08CC10EC0053008F049 -:103CC00088C106C1112359F0002331F0F701958115 -:103CD00090FF41C19F7095830E94C01D7AC100234F -:103CE00009F4F6C03EC1872D86958695837090E0D5 -:103CF000009719F0019761F06CC1112321F08C2D10 -:103D0000972D937002C080E090E00E94941B61C1E7 -:103D1000112321F08C2D972D937002C080E090E04C -:103D20000E94AA1B56C18C2D112319F00E94C32892 -:103D300002C00E942B290E94B0294BC1872D83709D -:103D400009F052C0111145C18C2D8295869587705E -:103D5000880F880F9C2D9F70892E912CA12CB12C3F -:103D6000082E04C0880C991CAA1CBB1C0A94D2F70C -:103D7000C4FE14C00FE010E020E030E0B901A8015B -:103D800004C0440F551F661F771F8A95D2F7CB01D9 -:103D9000BA01609570958095909503C060E070E0E1 -:103DA000CB01272D26952695237030E02230310552 -:103DB00069F02330310589F0682979298A299B29FE -:103DC0002130310571F00E943A2403C16829792914 -:103DD0008A299B290E945624FCC00E943A24C501CE -:103DE000B4010E941E24F5C0112319F0872D8170A3 -:103DF00001C08695882309F4ECC08C2D82958695A8 -:103E00008770880F880F9C2D9F70892E912CA12C74 -:103E1000B12C082E04C0880C991CAA1CBB1C0A9447 -:103E2000D2F7C4FE14C00FE010E020E030E0B9018A -:103E3000A80104C0440F551F661F771F8A95D2F74B -:103E4000CB01BA01609570958095909503C060E0B4 -:103E500070E0CB01272D269526952370422F50E048 -:103E60004230510569F04330510589F068297929BC -:103E70008A299B294130510571F00E941425A9C05F -:103E8000682979298A299B290E943025A2C00E948D -:103E90001425C501B4010E94F8249BC08C2D90E02C -:103EA000FC01E05EF109E531F10508F050C0E05990 -:103EB000FF4F0C941A310C2D0F70872D8F71112329 -:103EC00021F00E949124802F07CF0E94B224802FDE -:103ED0000E94C71D7EC0112341F0053008F079C053 -:103EE000872D8F710E94D72474C0063008F071C0EE -:103EF000F7CF112339F0872D8F710E94912469C06B -:103F00001123C9F3872D8F710E94B22462C011233F -:103F100029F0872D8F710E947C245BC00E9472243F -:103F200058C0112351F0172D1F71812F0E94912429 -:103F300063E0812F0E94A5254CC081E00E94AE2540 -:103F4000023008F446C082E00E94AE2542C0112330 -:103F500031F0002381F28C2D0E94A91C3AC000236D -:103F600089F28C2D0E94711D34C0472D4F706C2D2D -:103F7000C7010E944B060E9496232BC0111129C035 -:103F8000472D4F7050E042305105B9F04CF44115C7 -:103F9000510581F041305105E1F40E94B52C19C062 -:103FA0004330510569F04430510599F48C2D0E943D -:103FB000072D0FC00E949E2C0CC00E94D12C09C05E -:103FC0000E94E42C06C0472D4F706C2DC7010E9443 -:103FD000310CDD20F9F00E94A12580FD1BC0F70106 -:103FE00012820E949B250E949124C7010E941920E1 -:103FF0000E949B250F90DF91CF911F910F91FF9011 -:10400000EF90DF90CF90BF90AF909F908F907F9078 -:104010000C94B2240F90DF91CF911F910F91FF90DC -:10402000EF90DF90CF90BF90AF909F908F907F9058 -:1040300008950F931F93CF93DF93EC0188819981AB -:104040002B813C81232BB9F09F3F11F48F3F99F0D6 -:10405000CE010E949E07882371F0688179818A8150 -:104060000E9497258C010E944C250E941324B801C0 -:10407000CE010E94CE1DDF91CF911F910F91089527 -:104080000E946F260E947F260E9444260E94992645 -:104090000E94612A0E94B02980E090E00E94941B57 -:1040A00080E090E00C94AA1B0E945F260C944020B4 -:1040B0000E948C25292F22952F7030E02C3031055D -:1040C0004CF42A3031056CF422503109223031058C -:1040D000A8F407C02C30310569F02F30310551F0BC -:1040E0000DC0803F69F018F4803E40F409C0843F61 -:1040F00029F406C093FB882780F9089580E008958D -:1041000081E00895CF93DF9300D000D01F92CDB708 -:10411000DEB70F900F900F900F900F90DF91CF911F -:104120000895CF93DF9300D000D000D0CDB7DEB795 -:1041300026960FB6F894DEBF0FBECDBFDF91CF91AC -:1041400008951F93CF93DF93C091A80316E0809149 -:10415000A903C81799F0D0E01C9FF0011D9FF00D36 -:104160001124E655FC4F4081518162817381848125 -:1041700095810E9491202196C770E9CFDF91CF9160 -:104180001F9108954091DA035091DB036091DC03A5 -:104190007091DD038091DE039091DF030C949120F8 -:1041A0008091DF0382958F7009F054C08091DC0309 -:1041B000882309F44FC08091A803A091A9036091BE -:1041C000DA037091DB034091DD035091DE03B6E02A -:1041D0008A1709F43FC090E041155105C1F17F3FB6 -:1041E00011F46F3FA1F1B89FF001B99FF00D1124B8 -:1041F000E655FC4F218172132AC02081621327C02B -:104200002281211124C0238134812417350710F421 -:1042100021503109241B350B283C3105C0F4209175 -:10422000DF032F7020612093DF0326E0289FF00139 -:10423000299FF00D1124E155FC4F80818F70806122 -:1042400080838AED93E00E9419200C94A1200196AE -:104250008770BECF0895CF92DF92EF92FF920F93B7 -:104260001F93CF93DF93CDB7DEB762970FB6F89465 -:10427000DEBF0FBECDBF8C0185E0F801DE011D96CB -:1042800001900D928A95E1F7D8014C9111965C91BD -:10429000119712966C9112971396CD90DC9014970B -:1042A0003091DA037091DB038091DD039091DE039E -:1042B000009709F46BC17F3F19F43F3F09F466C1D1 -:1042C000E090DC03EE2009F4C0C02091DF03C816A3 -:1042D000D90628F0F601E81BF90BCF0104C0809540 -:1042E00090958C0D9D1DFF24F394883C910578F0EA -:1042F000F12C207F09F0C6C07C2DD98AC88A898913 -:104300000E9482208AED93E00E941920B1C0822F82 -:10431000807F09F046C0751314C0341312C06111B8 -:1043200010C02F7020612093DF030E94C2208AED0D -:1043300093E00E9419208091DF03D80115968C9399 -:104340002EC0CD2819F15F3F11F44F3FF9F0F62E42 -:1043500061111CC08091A8032091A90336E0821747 -:1043600009F45AC090E0389FF001399FF00D1124F4 -:10437000E655FC4F7181571306C07081471303C087 -:104380007281711103C001968770E9CFF62E662302 -:1043900009F418C18091DF0381608093DF03F12C61 -:1043A00011C1751308C0341306C0611104C0809197 -:1043B000DF03D801C3C04D875E878D859E856A8BDC -:1043C0000E9458206A898823E1F16623D1F1209167 -:1043D000DF03822F82958F7090E0029774F08091B6 -:1043E000DA039091DB0398878F831986DB86CA8670 -:1043F0002C87CE0107960E94192086E0F801AAEDCD -:10440000B3E001900D928A95E1F70E94D0200E94BE -:10441000C220FF24F394D6C04D875E878D859E858C -:104420000E948C25292F22952F7030E022303105F3 -:104430000CF0BCC09F7009F0B6C0805E883008F4F4 -:10444000C1C0C8010E941920E4CFC816D90608F4DB -:1044500053C0F601E81BF90BCF01883C910508F425 -:1044600050C0F12C7C2DD98AC88A89890E9482206B -:10447000EAEDF3E086E0DF011D928A95E9F70E94FC -:10448000C220A0C0751314C0341312C0611110C033 -:104490008091DF03F8018583C8010E94192086E01E -:1044A000EAEDF3E0DF011D928A95E9F7FE2C8AC060 -:1044B0004D875E878D859E856A8B0E9458206A890C -:1044C000882309F4BECF662309F4BBCF2091DF0314 -:1044D000822F82958F7090E002970CF48ECF80919E -:1044E000DA039091DB039A8389831B82DD82CC827D -:1044F0002E83CE0101967FCF809590958C0D9D1DCA -:10450000ACCFF62E662309F49CCF75132EC034135E -:104510002CC02091DF0320FD1FC0822F82958F7059 -:10452000D9F0D80115962C9315978F3049F08F5FED -:10453000982F9295907F822F8F70892B15968C9350 -:10454000C8010E94192086E0F801AAEDB3E00190AD -:104550000D928A95E1F793CF86E0F801AAEDB3E0DA -:1045600001900D928A95E1F72DC04D875E878D856C -:104570009E850E945820811140CF8091DF03816089 -:104580008093DF03C8010E9419201CC0662309F430 -:1045900058CF4D875E878D859E850E945820882341 -:1045A00009F44FCF2ACF811148CF0CC024303105F8 -:1045B0000CF047CF9F7009F440CFF8019581907FB0 -:1045C00009F03BCF8F2D62960FB6F894DEBF0FBE79 -:1045D000CDBFDF91CF911F910F91FF90EF90DF90B2 -:1045E000CF9008951F93CF93DF93CDB7DEB72C976D -:1045F0000FB6F894DEBF0FBECDBF4F8358876987D3 -:104600007A878B879C87CE0107960E942B2188236F -:1046100069F08F8198852A853B85232BF1F19F3F97 -:1046200009F063C08F3F09F060C037C086E0FE012B -:104630003796DE01119601900D928A95E1F76F8110 -:104640007885EA85FB85309741F17F3F11F46F3F14 -:1046500021F12091A90330E0C901019687709927C3 -:104660004091A80350E08417950709F447C0698377 -:104670007A83FD83EC8396E0929FD001939FB00DE7 -:104680001124A655BC4FFE01319601900D929A95CA -:10469000E1F78093A9030E94A12016E08091A8036E -:1046A0009091A9038917C1F1189FC0011124865563 -:1046B0009C4F0E942B21882379F1E091A8031E9F33 -:1046C000F0011124E655FC4F4081518162817381D4 -:1046D000848195810E9491208091A80390E00196A9 -:1046E000877099278093A803D9CF4F815885698512 -:1046F0007A858B859C850E949120CFCF0E94542083 -:104700001092A9031092A803EAEDF3E086E0DF011E -:104710001D928A95E9F7C1CF2C960FB6F894DEBFAB -:104720000FBECDBFDF91CF911F910895EF92FF9201 -:104730000F931F93CF93DF938C01009709F46CC004 -:10474000F12CEE24E394E8012196F801849184375A -:1047500040F4843008F051C0813081F0823019F18A -:104760005BC0853709F444C0A8F19CE7980F9037E7 -:1047700008F052C08F770E94711D41C00E5F1F4F1D -:10478000FE01C49180E28C0F883048F4C7708E2DF2 -:1047900001C0880FCA95EAF70E94722614C08C2FB8 -:1047A0000E94A91C2DC00E5F1F4FFE01C49180E224 -:1047B0008C0F883058F4C7708E2D01C0880FCA95B1 -:1047C000EAF70E9478260E9499261AC08C2F0E9430 -:1047D000711D16C00E5F1F4FFE01C491CC2381F0E6 -:1047E0008FE99FE00197F1F700C00000C150F6CFBC -:1047F0000E5F1F4FFE01F49003C00E94A91C8E01A2 -:104800008F2D882309F49FCFEFE9FFE03197F1F76F -:1048100000C000008150F5CFDF91CF911F910F9123 -:10482000FF90EF90089508956093E4037093E5037B -:104830008093E6039093E7030C9440200F931F931B -:104840000091E4031091E5032091E6033091E70322 -:10485000DC01CB01802B912BA22BB32B8093E403A3 -:104860009093E503A093E603B093E7031F910F91A4 -:104870000C9440200F931F930091E4031091E503E3 -:104880002091E6033091E703DC01CB0180239123E3 -:10489000A223B3238093E4039093E503A093E6035C -:1048A000B093E7031F910F910C9440200F931F9337 -:1048B0000091E4031091E5032091E6033091E703B2 -:1048C000DC01CB0180279127A227B3278093E40343 -:1048D0009093E503A093E603B093E7031F910F9134 -:1048E0000C9440201092E0031092E1031092E20336 -:1048F0001092E3030C94402041E050E060E070E04F -:1049000004C0440F551F661F771F8A95D2F7409346 -:10491000E0035093E1036093E2037093E3030C948C -:10492000402041E050E060E070E004C0440F551FBB -:10493000661F771F8A95D2F78091E0039091E1037B -:10494000A091E203B091E303482B592B6A2B7B2BF8 -:104950004093E0035093E1036093E2037093E30319 -:104960000C94402041E050E060E070E004C0440F4F -:10497000551F661F771F8A95D2F740955095609511 -:1049800070958091E0039091E103A091E203B091D2 -:10499000E303482359236A237B234093E003509386 -:1049A000E1036093E2037093E3030C94402041E041 -:1049B00050E060E070E004C0440F551F661F771F91 -:1049C0008A95D2F78091E0039091E103A091E203F0 -:1049D000B091E303482759276A277B274093E003D8 -:1049E0005093E1036093E2037093E3030C9440203F -:1049F0000F931F930091E0031091E1032091E203D4 -:104A00003091E303DC01CB01802B912BA22BB32B44 -:104A10008093E0039093E103A093E203B093E30358 -:104A20001F910F910C9440200F931F930091E0036E -:104A30001091E1032091E2033091E303DC01CB010B -:104A400080239123A223B3238093E0039093E10377 -:104A5000A093E203B093E3031F910F910C944020C5 -:104A60000F931F930091E0031091E1032091E20363 -:104A70003091E303DC01CB0180279127A227B327E4 -:104A80008093E0039093E103A093E203B093E303E8 -:104A90001F910F910C9440200895CF92DF92EF92D6 -:104AA000FF920F931F93CF93DF938C01C090E40389 -:104AB000D090E503E090E603F090E7038091E003F7 -:104AC0009091E103A091E203B091E303C82AD92AAF -:104AD000EA2AFB2ACFE1D0E0D701C6010C2E04C0A0 -:104AE000B695A795979587950A94D2F780FF06C04B -:104AF000B8018C2F0E94900A019721F4219760F74A -:104B000080E001C08C2FDF91CF911F910F91FF901A -:104B1000EF90DF90CF900895CF93DF93EC010E9448 -:104B20004D25BE010E94900ADF91CF910895CB01DF -:104B30000E948C2508958091E8038595859585953B -:104B400008958091E8038770089598E0899F900107 -:104B50001124262B2093E8030C9491242091E80340 -:104B6000809582238093E803982F977069F430E052 -:104B7000482F552747FD50952417350729F085956F -:104B8000859585950C94B22408959091E8039770CB -:104B900081E009F480E0089590911D02992321F0AD -:104BA00090911E02911109C020911F0230912002A4 -:104BB000F90132969FEF40E01FC0982F9695969589 -:104BC00096959F3050F5E0911F02F0912002E90F79 -:104BD000F11D877021E030E0A90102C0440F551F8C -:104BE0008A95E2F7CA019181892B818308959F3FBD -:104BF00039F04F5F4E3041F051915813F8CF0DC04E -:104C00005111F7CF942FF5CF9F3F39F0F901E90FFC -:104C1000F11D97FDFA9582830895089590911D02E4 -:104C2000992321F090911E02911109C020911F0239 -:104C300030912002F9013296205F3F4F1FC0982F1C -:104C40009695969596959F30F0F4E0911F02F0911D -:104C50002002E90FF11D877021E030E0A90102C0B8 -:104C6000440F551F8A95E2F7CA01809591818923E7 -:104C7000818308953196E217F30729F09081981304 -:104C8000F9CF1082F7CF089581E090E0E0911F0204 -:104C9000F0912002E80FF91F1082019680319105F2 -:104CA000A9F708959091FC03892B8093FC03089544 -:104CB00080959091FC0389238093FC0308951092C2 -:104CC000FC0308959091FB03892B8093FB030895C7 -:104CD00080959091FB0389238093FB0308951092A4 -:104CE000FB0308959091FA03892B8093FA030895AA -:104CF00080959091FA0389238093FA030895109286 -:104D0000FA0308958093E90308951092E903089542 -:104D100080911F0290912002FC0131969C01205F3E -:104D20003F4F80E0919191118F5FE217F307D1F728 -:104D30000895E0911F02F09120028091FC0380838E -:104D4000E0911F02F091200290818091FB03892B5A -:104D50008083E0911F02F091200290818091FA03FC -:104D6000892B80838091E903882361F0E0911F0201 -:104D7000F09120029081892B80830E9488268111E6 -:104D80001092E90380911F02909120020C947E1BE7 -:104D900020E0009739F0AC0141505109842395235C -:104DA0002F5FF7CF822F089580912004843039F14E -:104DB0001092FE0320E488E190E00FB6F894A895E5 -:104DC000809360000FBE2093600080E00E94120676 -:104DD00080E00E94C20C83B7817F846083BF83B769 -:104DE000816083BF7894889583B78E7F83BF88E185 -:104DF0000FB6F89480936000109260000FBE089583 -:104E0000089580E00E9412060E94D80C0E945B0D5B -:104E10000E9400270E94D30D91E0811101C090E013 -:104E2000892F08950E94542080E00E9412060E945B -:104E30008D2C0E94721B0C94C20C1F920F920FB605 -:104E40000F9211248F939F93AF93BF938091FE0392 -:104E5000811113C08091FF0390910004A09101047F -:104E6000B09102044196A11DB11D8093FF03909360 -:104E70000004A0930104B0930204BF91AF919F91ED -:104E80008F910F900FBE0F901F90189582E084BDF8 -:104E900093E095BD9AEF97BD80936E0008952FB76C -:104EA000F8948091FF0390910004A0910104B091C7 -:104EB00002042FBF0895CF92DF92EF92FF920F93DB -:104EC0001F932FB7F8944091FF0350910004609115 -:104ED0000104709102042FBF6A017B01EE24FF24BC -:104EE0008C0120E030E0C016D106E206F30610F493 -:104EF000415051099A01281B390BC9011F910F918B -:104F0000FF90EF90DF90CF9008951F920F920FB611 -:104F10000F9211248F939F93AF93BF938091FF03C0 -:104F200090910004A0910104B09102040196A11D8A -:104F3000B11D8093FF0390930004A0930104B093EC -:104F40000204BF91AF919F918F910F900FBE0F9070 -:104F50001F9018950E946F18F8942FEF87EA91E63A -:104F6000215080409040E1F700C0000087E090EBC6 -:104F7000DC0180932A0490932B04A0932C04B0931B -:104F80002D049CE088E10FB6F894A895809360000A -:104F90000FBE90936000FFCF0E940E28811102C0C7 -:104FA0000E94EA270E9419288093FD030E94262868 -:104FB00090E090930F0480930E0487FB882780F97C -:104FC00080931E020E941D28682F70E080E090E010 -:104FD0000C9414246DEE7EEF80E090E00E9440314E -:104FE00060E082E090E00E942E3160E083E090E09B -:104FF0000E942E3160E084E090E00E942E3160E05B -:1050000085E090E00E942E3160E086E090E00E9412 -:105010002E316FEF87E090E00C942E3180E090E02D -:105020000E94283121E08D3E9E4F09F020E0822F22 -:10503000089582E090E00C94203183E090E00C949D -:105040002031682F83E090E00C942E3184E090E0D2 -:105050000C942031682F84E090E00C942E3186E08F -:1050600090E00C942031682F86E090E00C942E3173 -:1050700087E090E00C942031682F87E090E00C945A -:105080002E318091050480FF0BC06091240285E0E1 -:10509000689FB001112475956795759567952BC02C -:1050A00081FF09C06091240285E0689FB00111244E -:1050B0007595679520C082FF07C06091240285E046 -:1050C000689FB001112417C0909106049923D1F074 -:1050D00060912302961788F72091240285E0289F8B -:1050E00090011124929FA001939F500D112470E014 -:1050F000CA010E9406316038710540F461157105DE -:1051000039F002C065E070E0862F08958FE70895BA -:1051100081E008958091050480FF08C0609122021B -:1051200070E0759567957595679521C081FF06C0FC -:105130006091220270E07595679519C082FF04C0E6 -:105140006091220270E010C0909106049923C1F092 -:10515000609121029617A0F780912202899FC001D9 -:10516000112470E00E9406316038710528F4611541 -:10517000710521F0862F08958FE7089581E0089545 -:1051800061E070E0F4CF803F21F40E9441288195D6 -:1051900004C0813F29F40E944128809309040895A6 -:1051A000823F21F40E944128819504C0833F29F465 -:1051B0000E944128809308040895893F19F40E94B1 -:1051C0008A2805C08A3F31F40E948A2881958093FD -:1051D0000A0408958B3F21F40E948A28819504C017 -:1051E0008C3F29F40E948A2880930B040895843F01 -:1051F00021F480910704816017C0853F21F48091DC -:105200000704826011C0863F21F480910704846006 -:105210000BC0873F21F480910704886005C0883F58 -:1052200031F48091070480618093070408958D3FD5 -:1052300021F48091050481600BC08E3F21F48091A0 -:105240000504826005C08F3F29F4809105048460C5 -:10525000809305040895803F39F48091090487FF05 -:105260006CC01092090469C0813F29F4809109043F -:105270001816BCF362C090910804823F29F497FF8E -:105280005CC01092080459C0833F19F41916CCF37E -:1052900054C0893F41F480910A0418160CF04DC0A7 -:1052A00010920A044AC08A3F29F480910A0487FFB9 -:1052B00044C0F6CF8B3F39F480910B0487FF3DC08B -:1052C00010920B043AC08C3F29F480910B041816FD -:1052D000BCF333C0843F21F4809107048E7F17C054 -:1052E000853F21F4809107048D7F11C0863F21F412 -:1052F000809107048B7F0BC0873F21F480910704C6 -:10530000877F05C0883F31F4809107048F7E8093AA -:10531000070413C08D3F21F4809105048E7F0BC0DC -:105320008E3F21F4809105048D7F05C08F3F29F4C5 -:10533000809105048B7F809305048091080481117E -:105340000EC08091090481110AC080910A04811164 -:1053500006C080910B04811102C0109206040895CA -:1053600087E094E00E94891B0E944F2790930404D9 -:105370008093030408951F93CF93DF9380910304D8 -:10538000909104040E945B27AC019091060499233C -:1053900021F02091250230E006C0209126028AE00B -:1053A000289F900111244217530708F486C080916A -:1053B0000804C0910904D0910A0410910B048111D2 -:1053C00007C0C11176C0D11174C0111172C075C06F -:1053D0009F3F19F09F5F90930604181624F40E94D3 -:1053E0004128809308048091080487FF05C00E942B -:1053F00041288195809308041C1624F40E944128BA -:10540000809309048091090487FF05C00E94412808 -:1054100081958093090460910804662339F1C09155 -:105420000904CC2319F1772767FD7095872F972FF3 -:105430000E94282E23E333E343E35FE30E94382FE7 -:105440000E94F52D609308046C2F772767FD7095F7 -:10545000872F972F0E94282E23E333E343E35FE354 -:105460000E94382F0E94F52D609309041D1624F424 -:105470000E948A2880930A0480910A0487FF05C04D -:105480000E948A28819580930A04111624F40E94B0 -:105490008A2880930B0480910B0487FF05C00E942B -:1054A0008A28819580930B04DF91CF911F910C94F2 -:1054B000B0299F3F09F08ECF96CFDF91CF911F91FA -:1054C0000895E7E0F4E085E0DF011D928A95E9F7B1 -:1054D00010920604109205040895833081F128F497 -:1054E000813059F08230D1F00895853009F449C0F7 -:1054F000B8F1863009F456C0089580912602262F0F -:1055000030E0280F311D2F3F310524F4680F6093E0 -:10551000260208958FEF8093260208958091250238 -:10552000262F30E0280F311D2F3F310524F4680F5E -:105530006093250208958FEF80932502089580914E -:105540002402262F30E0280F311D2F3F310524F48F -:10555000680F6093240208958FEF809324020895CA -:1055600080912302262F30E0280F311D2F3F310577 -:1055700024F4680F6093230208958FEF8093230231 -:10558000089580912202262F30E0280F311D2F3FF1 -:10559000310524F4680F6093220208958FEF809301 -:1055A0002202089580912102262F30E0280F311D1C -:1055B0002F3F310524F4680F6093210208958FEF87 -:1055C000809321020895833011F128F4813049F04D -:1055D000823091F00895853081F120F18630C1F15B -:1055E000089580912602681720F4861B8093260276 -:1055F000089510922602089580912502681720F4DC -:10560000861B8093250208951092250208958091AB -:105610002402681720F4861B8093240208951092B8 -:105620002402089580912302681720F4861B80933A -:105630002302089510922302089580912202681790 -:1056400020F4861B8093220208951092220208956E -:1056500080912102681720F4861B8093210208950F -:105660001092210208950F931F93873208F048C0CB -:105670008E3108F08DC0803109F477C008F587308D -:1056800009F461C068F4863009F09DC08091FD0383 -:10569000817F8E7F8093FD0381E080930D0494C011 -:1056A0008B3009F489C08E3009F08DC08091FD03E4 -:1056B00082FB222720F991E0922790FB82F95EC0BD -:1056C000863109F479C060F4813109F07CC00E9410 -:1056D000542090911E0281E0892780931E026CC0A5 -:1056E000893109F469C08B3109F06DC08091FD03E7 -:1056F00081FB222720F991E0922790FB81F93EC09F -:10570000883309F459C050F4893209F457C08533FD -:1057100009F454C0873209F451C055C0833409F4E8 -:105720004DC028F48A3308F44EC0895332C08834FF -:1057300009F049C00E9454200E94030E0E94D40622 -:105740000E94AA2739C09091FD03892F809581700E -:1057500080FB90F929F0966098609093FD0334C027 -:10576000997F977F9093FD0327C08091FD0383FB72 -:10577000222720F991E0922790FB83F98093FD0383 -:105780009923D1F08091FD0381608093FD0314C0C3 -:105790008D5141E050E060E070E08A019B0104C05F -:1057A000000F111F221F331F8A95D2F7C901B801BC -:1057B0000E9414240E94542081E006C061E070E041 -:1057C00080E090E0F5CF80E01F910F91089580E098 -:1057D000089580E008958E518A3030F4E82FF0E08B -:1057E000E154FD4F8081089580E00895CF93C82F44 -:1057F00080910D04813069F018F08230C9F183C0C6 -:10580000E0911F02F09120028081823209F07DC078 -:1058100007C0E0911F02F09120028081823261F482 -:105820008C2F0E94E72B811104C08C2F0E94332BF8 -:105830001DC081E090E01AC08C2F0E94E92B8111DD -:1058400014C0C43179F048F4CB3079F0C03109F09C -:1058500060C082E080930D0408C0C93219F0C833DB -:1058600021F057C010920D0454C081E0817053C0E4 -:10587000C93289F118F5C43171F1B0F4C73009F0BB -:1058800046C08EE18093260282E3809325028AE05F -:105890008093240284E18093230288E08093220293 -:1058A00088E28093210233C082EE8C0F863078F537 -:1058B0008C2F0E94EB2B80930C0429C0CE34E9F08E -:1058C00020F4CB3421F56AE013C0C13579F0C2353C -:1058D000F1F461E00DC080910C04882319F010925E -:1058E0000C0415C081E080930D0415C061E006C072 -:1058F00080910C040E946D2A0AC06AE080910C0419 -:105900000E94E32A04C010920D0480E004C081E0EC -:1059100002C080E0ABCFCF9108950E940E28811184 -:1059200002C00E94EA270E942F288093290480FF4A -:1059300002C0869501C080E00C9412068091290473 -:10594000982F9695292F30E0233031054CF49F5F36 -:10595000990F8170892B8160809329040E943328DC -:105960008091290486950C94120680912904982F21 -:10597000969591F09158990F8170892B8093290405 -:105980008E7F91E009F490E08091290490FB80F9EA -:10599000809329040E9433288091290486950C94D1 -:1059A000120680912904982F909590FB80F980939E -:1059B00029040E9433288091290480FF02C0869523 -:1059C00001C080E00C94120690912904892F8695DD -:1059D0008F5F8F779170843028F4880F892B8093A4 -:1059E000290402C090932904809129048E7F91E0BC -:1059F00009F490E08091290490FB80F980932904B8 -:105A00000E9433288091290486950C9412062091D7 -:105A10002904922F96958927982F990F822F8170AC -:105A2000892B809329048E7F91E009F490E0809186 -:105A3000290490FB80F9809329040E9433288091E7 -:105A4000290486950C9412065058BB27AA270ED01D -:105A5000D1C1C2D130F0C7D120F031F49F3F11F451 -:105A60001EF4B7C10EF4E095E7FB9FC1E92FD3D137 -:105A700080F3BA17620773078407950718F071F46B -:105A80009EF5EBC10EF4E0950B2EBA2FA02D0B0165 -:105A9000B90190010C01CA01A0011124FF27591B73 -:105AA00099F0593F50F4503E68F11A16F040A22F79 -:105AB000232F342F4427585FF3CF469537952795EA -:105AC000A795F0405395C9F77EF41F16BA0B620BE9 -:105AD000730B840BBAF09150A1F0FF0FBB1F661F30 -:105AE000771F881FC2F70EC0BA0F621F731F841F73 -:105AF00048F4879577956795B795F7959E3F08F099 -:105B0000B3CF9395880F08F09927EE0F9795879557 -:105B1000089527D108F481E008950CD06BC163D1BA -:105B200040F05AD130F021F45F3F19F03EC15111DD -:105B300095C14FC170D198F39923C9F35523B1F39F -:105B4000951B550BBB27AA2762177307840738F0EC -:105B50009F5F5F4F220F331F441FAA1FA9F333D04B -:105B60000E2E3AF0E0E830D091505040E695001CFF -:105B7000CAF729D0FE2F27D0660F771F881FBB1FBB -:105B8000261737074807AB07B0E809F0BB0B802D95 -:105B9000BF01FF2793585F4F2AF09E3F510568F0E1 -:105BA00004C15CC15F3FECF3983EDCF386957795CA -:105BB0006795B795F7959F5FC9F7880F911D9695E3 -:105BC000879597F90895E1E0660F771F881FBB1F3F -:105BD000621773078407BA0720F0621B730B840BEC -:105BE000BA0BEE1F88F7E095089504D06894B111C0 -:105BF00035C1089518D188F09F5790F0B92F992793 -:105C0000B751A0F0D1F0660F771F881F991F1AF0C7 -:105C1000BA95C9F712C0B13081F01FD1B1E0089533 -:105C20001CC1672F782F8827B85F39F0B93FCCF3B4 -:105C3000869577956795B395D9F73EF490958095BD -:105C4000709561957F4F8F4F9F4F0895E89409C0DD -:105C500097FB3EF490958095709561957F4F8F4F9F -:105C60009F4F9923A9F0F92F96E9BB279395F695B5 -:105C7000879577956795B795F111F8CFFAF4BB0F33 -:105C800011F460FF1BC06F5F7F4F8F4F9F4F16C097 -:105C9000882311F096E911C0772321F09EE8872F21 -:105CA000762F05C0662371F096E8862F70E060E0DD -:105CB0002AF09A95660F771F881FDAF7880F969556 -:105CC000879597F9089588D018F011F08CD038F4A2 -:105CD00080C0C4C0E92F9FD0B0F35523C9F3E7FBC0 -:105CE0006217730784079507A8F199F3E92FFF2737 -:105CF00088232AF03197660F771F881FDAF7952FD0 -:105D00005527442332F091505040220F331F441F37 -:105D1000D2F7BB27E91BF50B621B730B840BB10990 -:105D2000C1F222F4620F731F841FB11D31972AF054 -:105D3000660F771F881FBB1FEFCF915050405AF05E -:105D400041F0882332F0660F771F881F9150504032 -:105D5000C1F7939530C08695779567959F5FD9F782 -:105D6000F8CF990F0008550FAA0BE0E8FEEF1616C2 -:105D70001706E807F907C0F012161306E407F5073F -:105D800098F0621B730B840B950B39F40A2661F0B3 -:105D9000232B242B252B21F408950A2609F4A14056 -:105DA000A6958FEF811D811D089597F99F6780E863 -:105DB00070E060E008959F3F31F0915020F48795A6 -:105DC00077956795B795880F911D9695879597F963 -:105DD00008959FEF80EC089500240A941616170684 -:105DE00018060906089500240A94121613061406CC -:105DF00005060895092E0394000C11F4882352F02F -:105E0000BB0F40F4BF2B11F460FF04C06F5F7F4FE6 -:105E10008F4F9F4F089557FD9058440F551F59F0CD -:105E20005F3F71F04795880F97FB991F61F09F3F87 -:105E300079F087950895121613061406551FF2CFB0 -:105E40004695F1DF08C0161617061806991FF1CF00 -:105E500086957105610508940895E894BB27662727 -:105E60007727CB0197F908957CDF08F48FEF089529 -:105E70000BD0C0CFB1DF28F0B6DF18F0952309F0C2 -:105E800094CFA7CF1124EACFC6DFA0F3959FD1F31B -:105E9000950F50E0551F629FF001729FBB27F00DD8 -:105EA000B11D639FAA27F00DB11DAA1F649F66272D -:105EB000B00DA11D661F829F2227B00DA11D621F7C -:105EC000739FB00DA11D621F839FA00D611D221F36 -:105ED000749F3327A00D611D231F849F600D211D1A -:105EE000822F762F6A2F11249F5750408AF0E1F0BD -:105EF00088234AF0EE0FFF1FBB1F661F771F881F06 -:105F000091505040A9F79E3F510570F04ECFA6CF5B -:105F10005F3FECF3983EDCF3869577956795B795F0 -:105F2000F795E7959F5FC1F7FE2B880F911D96951A -:105F3000879597F90895FA01EE0FFF1F3096210516 -:105F4000310599F16115710561F48038BFE39B0754 -:105F500049F168949038810561F08038BFEF9B0764 -:105F600041F0992342F5FF3FE1053105210511F18B -:105F7000E8940894E795D901AA2329F4AB2FBE2F02 -:105F8000F85FD0F310C0FF5F70F4A695E0F7F73923 -:105F900050F019F0FF3A38F49F779F930CD00F9090 -:105FA00007FC905808953EF014CF60E070E080E860 -:105FB0009FE308954FE79F775F934F933F932F930E -:105FC0009ED02F913F914F915F9152DF05C019F400 -:105FD0000EF0EBCE42CFFDCE26DFC8F39638C0F7E9 -:105FE00007F80F92E8942BE33AEA48EB5FE74EDFBD -:105FF0000F920F920F924DB75EB70F92C0D0EAE0AA -:10600000F1E016D04F915F91EF91FF91E595EE1F72 -:10601000FF1F49F0FE57E0684427EE0F441FFA9532 -:10602000E1F74195550B32D00F9007FE26C0089539 -:10603000DF93CF931F930F93FF92EF92DF927B0139 -:106040008C01689405C0DA2EEF011EDFFE01E89492 -:10605000A5912591359145915591AEF3EF0106DD5E -:10606000FE019701A801DA9479F7DF90EF90FF9095 -:106070000F911F91CF91DF9108959B01AC0160E0DA -:1060800070E080E89FE349CD90CE95CECCDEE8F37A -:106090009923D9F3940F511DBBF39150504094F0C4 -:1060A00059F0882332F0660F771F881F91505040B7 -:1060B000C1F79E3F510544F7880F911D969587952E -:1060C00097F908955F3FACF0983E9CF0BB2786950A -:1060D00077956795B79508F4B1609395C1F7BB0FB5 -:1060E00058F711F460FFE8CF6F5F7F4F8F4F9F4FDE -:1060F000E3CFB4CE0EF05FCE6CCE689456CE93DE76 -:10610000C8F39923D1F3C6F3DF93CF931F930F9373 -:10611000FF92C92FDD2788232AF02197660F771F6A -:10612000881FDAF720E030E040E85FEB9FE3883932 -:1061300020F0803E30F021968F7787DCE2E3F1E0BB -:1061400003C083DCEFE5F1E073DF8B01BE01EC01FE -:10615000FB2E6F5771097595771F880B990B78DDAA -:1061600028E132E741E35FE38FDEAF2D9801AE0116 -:10617000FF900F911F91CF91DF9178DC3BCEFA0118 -:10618000DC01AA0FBB1F9B01AC01BF5728F42227DB -:106190003327442750781FC0B75188F4AB2F002411 -:1061A000469537952795011CA395D2F3002069F0F9 -:1061B000220F331F441FB395DAF30DD045CC613065 -:1061C0007105A0E88A07B94630F49B01AC01662747 -:1061D000772788279078309621F020833183428377 -:1061E00053830895AA1BBB1B51E107C0AA1FBB1F05 -:1061F000A617B70710F0A61BB70B881F991F5A9553 -:10620000A9F780959095BC01CD01089597FB072EC5 -:1062100016F4009407D077FD09D00E94F23007FCF5 -:1062200005D03EF4909581959F4F089570956195A6 -:106230007F4F0895EE0FFF1F0590F491E02D099414 -:10624000F999FECF92BD81BDF89A992780B508953E -:10625000A8E1B0E042E050E00C944831262FF999D3 -:10626000FECF92BD81BDF89A019700B4021639F0B5 -:106270001FBA20BD0FB6F894FA9AF99A0FBE089586 -:106280000196272F0E942F310C942E31DC01CB0177 -:10629000FC01F999FECF06C0F2BDE1BDF89A319636 -:1062A00000B40D9241505040B8F70895F894FFCFD4 -:1062B00000005C440000004148F1764400000041C9 -:1062C0005C978A44000000411FD5924400000041C1 -:1062D00052D0A444000000415CFFB84400000041DB -:1062E0000AA7CF44000000410000DC440000004148 -:1062F00052D02445000000410000DC440000004171 -:1063000052D0A444000040410AA7CF4400000041FD -:106310000000DC440000004100000000000080405C -:1063200052D02445000040410000000000008040A1 -:106330000AA74F45000040410AA7CF440000004192 -:106340000000DC440000004100000000000080402C -:1063500052D02445000000410000000000008040B1 -:106360005CFF384500000041000000000000804054 -:1063700052D02445000000410AA7CF44000000414C -:106380000000DC44000000410000000000008040EC -:1063900052D024450000804148F176440000A041DD -:1063A000F6F0F6440000004152909B440000A041EA -:1063B000F6F0F64400000041640007000CFF000006 -:1063C000003F647A140815E514B1147D140101EA44 -:1063D000032808140A321E0002040507090B0C0EDC -:1063E0001011131517181A1C1D1F212324262829E4 -:1063F0002B2D2F3032343537393B1F0F03764F5F4B -:106400006F7F4969437929595363393149803F5D29 -:106410008B803FF8BF803FCAE1803F73ED803FCA69 -:10642000E1803FF8BF803F5D8B803F3149803F0076 -:1064300000803FF16D7F3F75EA7E3F4C827E3F8357 -:106440003F7E3F84287E3F833F7E3F4C827E3F7568 -:10645000EA7E3FF16D7F3F0000803F404D36391DA1 -:106460000BD00A9A0A610AF4090D0A260A3F0A01AA -:0A64700002030405060708090000F6 -:00000001FF diff --git a/keyboards/preonic/keymaps/default/readme.md b/keyboards/preonic/keymaps/default/readme.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/preonic/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file diff --git a/keyboards/preonic/preonic.c b/keyboards/preonic/preonic.c index 773451bf0c..889c3fc8fd 100644 --- a/keyboards/preonic/preonic.c +++ b/keyboards/preonic/preonic.c @@ -1,97 +1,10 @@ #include "preonic.h" -__attribute__ ((weak)) -void matrix_init_user(void) { - -}; - -__attribute__ ((weak)) -void matrix_scan_user(void) { - -}; - -__attribute__ ((weak)) -bool process_action_user(keyrecord_t *record) { - return true; -}; - void matrix_init_kb(void) { - #ifdef BACKLIGHT_ENABLE - backlight_init_ports(); - #endif // Turn status LED on DDRE |= (1<<6); PORTE |= (1<<6); matrix_init_user(); -}; - -void matrix_scan_kb(void) { - matrix_scan_user(); -}; - -bool process_action_kb(keyrecord_t *record) { - return process_action_user(record); -} - -#ifdef BACKLIGHT_ENABLE -#define CHANNEL OCR1C - -void backlight_init_ports() -{ - - // Setup PB7 as output and output low. - DDRB |= (1<<7); - PORTB &= ~(1<<7); - - // Use full 16-bit resolution. - ICR1 = 0xFFFF; - - // I could write a wall of text here to explain... but TL;DW - // Go read the ATmega32u4 datasheet. - // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on - - // Pin PB7 = OCR1C (Timer 1, Channel C) - // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 - // (i.e. start high, go low when counter matches.) - // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 - // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 - - TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; - TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; - - backlight_init(); -} - -void backlight_set(uint8_t level) -{ - if ( level == 0 ) - { - // Turn off PWM control on PB7, revert to output low. - TCCR1A &= ~(_BV(COM1C1)); - CHANNEL = 0x0; - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - } - else if ( level == BACKLIGHT_LEVELS ) - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF; - } - else - { - // Prevent backlight blink on lowest level - PORTB &= ~(_BV(PORTB7)); - // Turn on PWM control of PB7 - TCCR1A |= _BV(COM1C1); - // Set the brightness - CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); - } -} - -#endif +}; \ No newline at end of file diff --git a/keyboards/preonic/preonic.h b/keyboards/preonic/preonic.h index 2b605f3742..0e0b101e45 100644 --- a/keyboards/preonic/preonic.h +++ b/keyboards/preonic/preonic.h @@ -33,9 +33,4 @@ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \ } -void matrix_init_user(void); -void matrix_scan_user(void); -bool process_action_kb(keyrecord_t *record); -void backlight_init_ports(void); - #endif diff --git a/keyboards/preonic/readme.md b/keyboards/preonic/readme.md new file mode 100644 index 0000000000..f0be255a09 --- /dev/null +++ b/keyboards/preonic/readme.md @@ -0,0 +1,25 @@ +Preonic keyboard firmware +====================== +DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme.md](/readme.md). + +## Building + +Download or clone the whole firmware and navigate to the keyboards/preonic 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. -- cgit v1.2.3 From 0058c33815c2153ac1efffd4ba2e2bac241b5474 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 26 Jun 2016 14:20:57 -0400 Subject: updates preonic default layout --- keyboards/preonic/keymaps/default/keymap.c | 48 +++++++++++++++++------------- 1 file changed, 27 insertions(+), 21 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 4c967d73ed..ef217691b1 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -16,13 +16,14 @@ #define _RAISE 4 #define _ADJUST 16 -// Macro name shortcuts -#define QWERTY M(_QWERTY) -#define COLEMAK M(_COLEMAK) -#define DVORAK M(_DVORAK) -#define LOWER M(_LOWER) -#define RAISE M(_RAISE) -#define M_BL 5 +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + BACKLIT +}; // Fillers to make layering more clear #define _______ KC_TRNS @@ -48,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Colemak @@ -69,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL}, {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Dvorak @@ -90,7 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL}, {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, - {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower @@ -185,10 +186,9 @@ void persistant_default_layer_set(uint16_t default_layer) { default_layer_set(default_layer); } -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case _QWERTY: +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: if (record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); @@ -196,7 +196,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) persistant_default_layer_set(1UL<<_QWERTY); } break; - case _COLEMAK: + return false; + case COLEMAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); @@ -204,7 +205,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) persistant_default_layer_set(1UL<<_COLEMAK); } break; - case _DVORAK: + return false; + case DVORAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); @@ -212,7 +214,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) persistant_default_layer_set(1UL<<_DVORAK); } break; - case _LOWER: + return false; + case LOWER: if (record->event.pressed) { layer_on(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); @@ -221,7 +224,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) update_tri_layer(_LOWER, _RAISE, _ADJUST); } break; - case _RAISE: + return false; + case RAISE: if (record->event.pressed) { layer_on(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); @@ -230,7 +234,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) update_tri_layer(_LOWER, _RAISE, _ADJUST); } break; - case M_BL: + return false; + case BACKLIT: if (record->event.pressed) { register_code(KC_RSFT); #ifdef BACKLIGHT_ENABLE @@ -239,9 +244,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } else { unregister_code(KC_RSFT); } - break; + break; + return false; } - return MACRO_NONE; + return true; }; void matrix_init_user(void) { -- cgit v1.2.3 From e5d1e4b8cefb8f78561f35e0295b548c00b5ad57 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sun, 26 Jun 2016 16:16:21 -0400 Subject: Preonic keymap update --- keyboards/preonic/keymaps/default/keymap.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index ef217691b1..6d8ef634dd 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -16,7 +16,7 @@ #define _RAISE 4 #define _ADJUST 16 -enum planck_keycodes { +enum preonic_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK, @@ -158,10 +158,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } -}; - -const uint16_t PROGMEM fn_actions[] = { - }; #ifdef AUDIO_ENABLE -- cgit v1.2.3 From 94d3159d9dbdf711b830c6d7c5a53324097be0a5 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Mon, 4 Jul 2016 22:06:22 -0400 Subject: correct break/return order for planck and preonic defaults --- keyboards/preonic/keymaps/default/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 6d8ef634dd..9a957f7ee1 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -191,8 +191,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_QWERTY); } - break; return false; + break; case COLEMAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -200,8 +200,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_COLEMAK); } - break; return false; + break; case DVORAK: if (record->event.pressed) { #ifdef AUDIO_ENABLE @@ -209,8 +209,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif persistant_default_layer_set(1UL<<_DVORAK); } - break; return false; + break; case LOWER: if (record->event.pressed) { layer_on(_LOWER); @@ -219,8 +219,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - break; return false; + break; case RAISE: if (record->event.pressed) { layer_on(_RAISE); @@ -229,8 +229,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } - break; return false; + break; case BACKLIT: if (record->event.pressed) { register_code(KC_RSFT); @@ -240,8 +240,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { unregister_code(KC_RSFT); } - break; return false; + break; } return true; }; -- cgit v1.2.3 From 57e08eb8badc5db2fb44d2df684f32ea48cce411 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 7 Jul 2016 11:33:32 -0400 Subject: updates rgblight implementation, makes non-timer stuff compatible with audio --- keyboards/preonic/config.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/config.h b/keyboards/preonic/config.h index 04946f7fbb..3fb978c2f6 100644 --- a/keyboards/preonic/config.h +++ b/keyboards/preonic/config.h @@ -62,9 +62,8 @@ along with this program. If not, see . ) /* ws2812 RGB LED */ -#define ws2812_PORTREG PORTD -#define ws2812_DDRREG DDRD -#define ws2812_pin PD1 +#define RGB_DI_PIN D1 +#define RGBLIGHT_TIMER #define RGBLED_NUM 28 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 -- cgit v1.2.3 From 47223ebee4823e58e951d9fd89a66e16e29b6357 Mon Sep 17 00:00:00 2001 From: Robert Dale Date: Tue, 19 Jul 2016 08:00:03 -0400 Subject: Corrected the ascii layout to match the coded layout --- keyboards/preonic/keymaps/default/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 9a957f7ee1..2c2299fd27 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -142,9 +142,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Reset| | | | | | | | | | Del | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * | |Voice-|Voice+|Mus on|MusOff| | | | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -277,4 +277,4 @@ void music_scale_user(void) PLAY_NOTE_ARRAY(music_scale, false, 0); } -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From 9c26498f4990ac15ff9acd46440db2ce11b8f80f Mon Sep 17 00:00:00 2001 From: Robert Dale Date: Tue, 19 Jul 2016 08:43:41 -0400 Subject: added Midi On/Off; Enter is actually transparent --- keyboards/preonic/keymaps/default/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 2c2299fd27..78b4997a8f 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Next | Vol- | Vol+ | Play | * `-----------------------------------------------------------------------------------' @@ -144,7 +144,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | |Voice-|Voice+|Mus on|MusOff| | | | | | | | + * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' -- cgit v1.2.3 From b5761df57b024c29c69b24552fe1d43c49ac049d Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 18:47:36 -0700 Subject: Create CMD-Preonic Keymap This is very Alpha-Mode, and has not been tested or even Made yet. --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 322 +++++++++++++++++++++++++ 1 file changed, 322 insertions(+) create mode 100644 keyboards/preonic/keymaps/CMD-Preonic/keymap.c (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c new file mode 100644 index 0000000000..c7a5be121a --- /dev/null +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -0,0 +1,322 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _GAME 3 +#define _NUMPAD 13 +#define _LOWER 14 +#define _RAISE 15 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define GAME M(_GAME) +#define NUMPAD M(_NUMPAD) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, + {LT(_RAISE, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC} +}, + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______}, + {_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, + {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______}, + {_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______}, + {_______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* GAME + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CAPS | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | XXX | Lower | Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_GAME] = { + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, + {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {_______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* NUMPAD + * ,-----------------------------------------------------------------------------------. + * | Esc | / | * | - | 4 | 5 | 6 | 7 | 8 | 9 | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 7 | 8 | 9 | + | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 4 | 5 | 6 | + | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 1 | 2 | 3 | Enter| V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | 0 | 0 | . | Enter| Lower| Space | Raise| - | = | [ | ] | + * `-----------------------------------------------------------------------------------' + */ +[_NUMPAD] = { + {KC_ESC, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, +}, +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Mute | BkSpc| Up | Del | Forwd| MBtn1| MUp| MBtn2| / | 7 | 8 | 9 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Left | Down | Right| Refr MLeft| MDn |MRight| * | 4 | 5 | 6 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Vol- | Pause| Ins | Print| | | | + | Enter| 0 | . | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, + {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP4, KC_KP_5, KC_KP_6}, + {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_MS_WH_DOWN, KC_MS_BTN3, KC_MS_WH_UP, KC_KP_MINUS, KC_KP_1, KC_KP_2, KC_KP_3}, + {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_KP_PLUS, KC_KP_ENTER, KC_KP_0, KC_KP_DOT} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Bksp | PgUp | Del | | | | PgUp | Up | PgDn | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Home | PgDn | End | | | Home | Left | Down | Right| ] | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | End | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {_______, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______}, + {_______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | |qwerty|ColMak|Dvorak| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |AGNorm|AGSwap| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |Aud On|AudOff|MidiOn|MdiOff| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | Reset | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {_______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, _______, _______, _______}, + {_______, RESET, _______, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, MI_ON, MI_OFF, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, _______, _______, _______}, + {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float start_up[][2] = { + {440.0*pow(2.0,(14)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8}, + {440.0*pow(2.0,(18)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + break; + case _COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case _DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_DVORAK); + } + break; + case _GAME: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_GAME); + } + break; + case _NUMPAD: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_dvorak, false, 0); + #endif + persistant_default_layer_set(1UL<<_NUMPAD); + } + break; + case _LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case _RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + break; + case M_BL: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE + +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +#endif -- cgit v1.2.3 From 3c7075011b93875ad74b7cfdd66eb009b972e0ed Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 18:50:41 -0700 Subject: Create Makefile This is untested, use caution. --- keyboards/preonic/keymaps/CMD-Preonic/makefile | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 keyboards/preonic/keymaps/CMD-Preonic/makefile (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/makefile b/keyboards/preonic/keymaps/CMD-Preonic/makefile new file mode 100644 index 0000000000..2f7787e86b --- /dev/null +++ b/keyboards/preonic/keymaps/CMD-Preonic/makefile @@ -0,0 +1,23 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif -- cgit v1.2.3 From 9b3708f830ed06f74e555decebbcc0d5d152ffe3 Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 18:52:52 -0700 Subject: Init Readme This needs a better description. --- keyboards/preonic/keymaps/CMD-Preonic/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 keyboards/preonic/keymaps/CMD-Preonic/README.md (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/README.md b/keyboards/preonic/keymaps/CMD-Preonic/README.md new file mode 100644 index 0000000000..91fa4adeb9 --- /dev/null +++ b/keyboards/preonic/keymaps/CMD-Preonic/README.md @@ -0,0 +1 @@ +# CMD-Preonic - This keymapping aims to increase productivity, specifically for programmer's who use Text editors like SublimeText and Atom by maximizing usage of the left-hand and function layers. -- cgit v1.2.3 From fbafb9449e381858d19d8a9a7436ee6b5a078cf3 Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 19:32:02 -0700 Subject: Resolved errors --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index c7a5be121a..f0bcacb411 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -13,6 +13,7 @@ #define _COLEMAK 1 #define _DVORAK 2 #define _GAME 3 +#define _ARROW 12 #define _NUMPAD 13 #define _LOWER 14 #define _RAISE 15 @@ -23,6 +24,7 @@ #define COLEMAK M(_COLEMAK) #define DVORAK M(_DVORAK) #define GAME M(_GAME) +#define ARROW M(_ARROW) #define NUMPAD M(_NUMPAD) #define LOWER M(_LOWER) #define RAISE M(_RAISE) @@ -47,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] | * `-----------------------------------------------------------------------------------' */ -[_QWERTY] = { +[_QWERTY] = { {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, {LT(_RAISE, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, @@ -134,10 +136,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_NUMPAD] = { {KC_ESC, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, _______, _______, _______, _______, _______, _______, _______, _______}, {KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, {KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, {KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, -}, +}, /* Lower * ,-----------------------------------------------------------------------------------. * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del | @@ -146,7 +148,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Left | Down | Right| Refr MLeft| MDn |MRight| * | 4 | 5 | 6 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | + * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Vol- | Pause| Ins | Print| | | | + | Enter| 0 | . | * `-----------------------------------------------------------------------------------' @@ -154,7 +156,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9}, - {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP4, KC_KP_5, KC_KP_6}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP_4, KC_KP_5, KC_KP_6}, {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_MS_WH_DOWN, KC_MS_BTN3, KC_MS_WH_UP, KC_KP_MINUS, KC_KP_1, KC_KP_2, KC_KP_3}, {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_KP_PLUS, KC_KP_ENTER, KC_KP_0, KC_KP_DOT} }, @@ -188,7 +190,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | |Aud On|AudOff|MidiOn|MdiOff| | | | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game | | | | + * | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game |NUMPAD| | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | Reset | | | | | | * `-----------------------------------------------------------------------------------' @@ -197,7 +199,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, _______, _______, _______}, {_______, RESET, _______, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, KC_DEL}, {_______, _______, _______, AU_ON, AU_OFF, MI_ON, MI_OFF, QWERTY, COLEMAK, DVORAK, _______, _______}, - {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, _______, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, NUMPAD, _______, _______}, {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______} } @@ -271,6 +273,14 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) persistant_default_layer_set(1UL<<_NUMPAD); } break; + case _ARROW: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_LOWER); + } + break; case _LOWER: if (record->event.pressed) { layer_on(_LOWER); -- cgit v1.2.3 From c1fb82623c8075bb375f31f4399c47e8e18c521b Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 20:02:45 -0700 Subject: Tested, resolved Mouse issue, resolved numpad issue --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index f0bcacb411..26384795fc 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -50,11 +50,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, - {LT(_RAISE, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, - {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC} + {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH}, + {LT(_RAISE, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT(_LOWER, KC_SPC), KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC} }, /* Colemak @@ -134,11 +134,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_NUMPAD] = { - {KC_ESC, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, - {KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_ESC, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P7, KC_P8, KC_P9, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______}, + {KC_P0, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______}, }, /* Lower * ,-----------------------------------------------------------------------------------. @@ -154,11 +154,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, - {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_KP_SLASH, KC_KP_7, KC_KP_8, KC_KP_9}, - {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_KP_ASTERISK, KC_KP_4, KC_KP_5, KC_KP_6}, - {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_MS_WH_DOWN, KC_MS_BTN3, KC_MS_WH_UP, KC_KP_MINUS, KC_KP_1, KC_KP_2, KC_KP_3}, - {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_KP_PLUS, KC_KP_ENTER, KC_KP_0, KC_KP_DOT} + {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, + {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6}, + {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3}, + {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT} }, /* Raise -- cgit v1.2.3 From 4480a74a4b815d62de18e35016b0fbe5d59b9c75 Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 21:02:23 -0700 Subject: Arrow key fn layer shouldnt overwrite Ctrl key. Better Print Screen position --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index 26384795fc..287974dabf 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -150,7 +150,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Vol- | Pause| Ins | Print| | | | + | Enter| 0 | . | + * | Vol- | | | | | | | + | Enter| 0 | . | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { @@ -169,16 +169,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------+------+------+------+------+------+------| * | | Home | PgDn | End | | | Home | Left | Down | Right| ] | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | End | | | |Enter | + * | | Pause| Ins | | | Print|Screen| End | | | |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | | | | | + * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, {_______, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______}, {_______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______}, + {_______, KC_PAUSE, KC_INS, _______, KC_PSCR, KC_PSCR, _______, KC_END, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, -- cgit v1.2.3 From c826bcfc3969cba4a699da329dc146b9944fce6b Mon Sep 17 00:00:00 2001 From: commandlinedesign Date: Sat, 23 Jul 2016 21:08:00 -0700 Subject: Did a derp and forgot to set Trans on Arrow layer --- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index 287974dabf..5d217e2615 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -154,11 +154,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, - {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9}, - {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6}, - {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3}, - {KC_VOLD, KC_PAUSE, KC_INS, KC_PSCREEN, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT} + {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL}, + {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9}, + {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6}, + {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3}, + {KC_VOLD, _______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT} }, /* Raise -- cgit v1.2.3 From e6a41e43aa524ae78aecb2eeeeca55c850d05cdd Mon Sep 17 00:00:00 2001 From: Jonathan Lucas Date: Sat, 23 Jul 2016 21:26:01 -0700 Subject: Updated Readme --- keyboards/preonic/keymaps/CMD-Preonic/README.md | 78 ++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/CMD-Preonic/README.md b/keyboards/preonic/keymaps/CMD-Preonic/README.md index 91fa4adeb9..2b80c2b3a6 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/README.md +++ b/keyboards/preonic/keymaps/CMD-Preonic/README.md @@ -1 +1,77 @@ -# CMD-Preonic - This keymapping aims to increase productivity, specifically for programmer's who use Text editors like SublimeText and Atom by maximizing usage of the left-hand and function layers. +CMD-Preonic +=================== +The CMD project seeks to improve productivity by optimizing usage of the left hand via clever use of the function layers. + +>Note: This project is currently optimized for grid layout, and has not been confirmed to work 100% on MIT layout, although it is expected to work correctly. + +---------- + +Modes +------------- + +#### QWERTY + +>CMD-Qwerty is very similar to the default Preonic with a few key differences: + + - Dual-role Raise/Enter Key at Caps Lock position. -Don't need to take your hand off the mouse to submit URLs + - Space_Function under left space (Grid layout) -Don't need to take your thumb off of the spacebar to use lower. + - Dedicated arrow keys replaced with ( - , = , [ , and ] ) - big improvement for programmers who are used to fn layer. + +---------- + +#### Game + +> Disables extra features to facilitate easier usage of the Preonic while gaming. this mode is toggled in the adjust layer. + + - Dual Role Function key becomes Caps Lock. + - Space_Function disabled and replaced with normal spacebar. + - Windows Key disabled. + +---------- + +#### Numpad + +> Enables left-hand numpad + + - Left-side numpad + - Can be toggled on in Adjust layer (under . key) + +---------- + +#### Arrow - (Lower) + +> Makes arrow keys easily accessible to Left Hand, and much more. + + - Arrow keys at WASD, Backspace at Q, Delete at E. + - Media Keys near arrow cluster, mute at A. + - Web Nav keys. + - Mouse cluster at YGHJ. + - Numpad in right side of board. + - Can be toggled on in Adjust layer (Under , key) + +---------- + +#### Function- (Raise) + +> Basic Functions. Open Keys for customization. + + - Turns WASD into Navigation cluster (Home, End, Page up and Page Down) + - Pok3r style right hand arrow cluster for accessibility (familiar for many users.) + - Doubles as shift key for top row numbers. + - Print Screen, Insert, etc. + +---------- + +#### Adjust- (Raise + Lower) + +> Switch Modes + + - Default modes moved to the left and new layer toggle modes located to the right. + - Sleep and Wake keys added. + - Reset button moved under Spacebar(s). + +Notes: +------------- + +Please feel free to reach out to Commandlinedesign@gmail.com with suggestions. +Special Thanks to Jack for QMK firmware and the Preonic! -- cgit v1.2.3 From 3b39910cb9506b9deb93f6395792e806e429aa61 Mon Sep 17 00:00:00 2001 From: Jordi Orlando Date: Thu, 28 Jul 2016 14:36:20 -0500 Subject: Create 0xdec Preonic keymap An ergonomically optimized Colemak keymap for the grid-layout Preonic --- keyboards/preonic/keymaps/0xdec/Makefile | 21 ++++ keyboards/preonic/keymaps/0xdec/README.md | 30 ++++++ keyboards/preonic/keymaps/0xdec/config.h | 10 ++ keyboards/preonic/keymaps/0xdec/keymap.c | 173 ++++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+) create mode 100644 keyboards/preonic/keymaps/0xdec/Makefile create mode 100644 keyboards/preonic/keymaps/0xdec/README.md create mode 100644 keyboards/preonic/keymaps/0xdec/config.h create mode 100644 keyboards/preonic/keymaps/0xdec/keymap.c (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/0xdec/Makefile b/keyboards/preonic/keymaps/0xdec/Makefile new file mode 100644 index 0000000000..6600e36893 --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/Makefile @@ -0,0 +1,21 @@ +# Build Options + +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = yes # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/preonic/keymaps/0xdec/README.md b/keyboards/preonic/keymaps/0xdec/README.md new file mode 100644 index 0000000000..603d3d4552 --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/README.md @@ -0,0 +1,30 @@ +Ergonomic Colemak Keymap +======================== +An ergonomically optimized Colemak keymap for the grid-layout Preonic + +Modes +---------- + +#### Colemak + +> Base layer + +- All alphanumerics and symbols available on the base layer + +---------- + +#### Game + +> QWERTY layout for use with games or number entry + +- Standard QWERTY layout +- Integrated right-hand numpad in phone layout + +---------- + +#### Function (Raise) + +> Functions and mode switching + +- Turns NEIO into arrow cluster, with nav cluster below (Home, Page Down, Page Up, End) +- Reset key at lower left (Esc) diff --git a/keyboards/preonic/keymaps/0xdec/config.h b/keyboards/preonic/keymaps/0xdec/config.h new file mode 100644 index 0000000000..5fc9b6f341 --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/config.h @@ -0,0 +1,10 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// Number of backlight levels +#undef BACKLIGHT_LEVELS +#define BACKLIGHT_LEVELS 5 + +#endif diff --git a/keyboards/preonic/keymaps/0xdec/keymap.c b/keyboards/preonic/keymaps/0xdec/keymap.c new file mode 100644 index 0000000000..6c4b8a6fab --- /dev/null +++ b/keyboards/preonic/keymaps/0xdec/keymap.c @@ -0,0 +1,173 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Layer names +#define _COLEMAK 0 +#define _GAME 1 +#define _RAISE 2 + +enum preonic_keycodes { + COLEMAK = SAFE_RANGE, + GAME, + RAISE +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | = | Q | W | F | P | G | J | L | U | Y | [ | ] | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | - | A | R | S | T | D | H | N | E | I | O | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ; | Z | X | C | V | B | K | M | , | . | / | ENTER| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ESC | ALT | GUI | SHIFT| CTRL | BKSP | SPACE| RAISE| SHIFT| | DEL | TAB | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = { + {KC_GRV ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSLS}, + {KC_EQL ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_G ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_LBRC,KC_RBRC}, + {KC_MINS,KC_A ,KC_R ,KC_S ,KC_T ,KC_D ,KC_H ,KC_N ,KC_E ,KC_I ,KC_O ,KC_QUOT}, + {KC_SCLN,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_K ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_ENT }, + {KC_ESC ,KC_LALT,KC_LGUI,KC_LSFT,KC_LCTL,KC_BSPC,KC_SPC ,RAISE ,KC_RSFT,_______,KC_DEL ,KC_TAB } +}, + +/* Game + * ,-----------------------------------------------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 |NUM LK| ÷ | × | - | + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | TAB | Q | W | E | R | T | Y | U | 1 | 2 | 3 | + | + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | CTRL | A | S | D | F | G | H | J | 4 | 5 | 6 | = | + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | SHIFT| Z | X | C | V | B | N | M | 7 | 8 | 9 | ENTER| + * |------+------+------+------+------+------+------+------+------+------+------+------+ + * | | ALT | GUI | SPACE| CTRL | BKSP | SPACE| RAISE| , | 0 | . | TAB | + * `-----------------------------------------------------------------------------------' + */ +[_GAME] = { + {KC_ESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS}, + {KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_Y ,KC_U ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PPLS}, + {KC_LCTL,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_H ,KC_J ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PEQL}, + {KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_N ,KC_M ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PENT}, + {XXXXXXX,KC_LALT,KC_LGUI,KC_SPC ,KC_LCTL,KC_BSPC,KC_SPC ,RAISE ,KC_PCMM,KC_P0 ,KC_PDOT,KC_TAB } +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | SLEEP| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |PRTSCR| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | SYM | F11 | F12 | |AU TOG| VOL+ |BL INC|COLMAK| GAME | MUSIC| MENU |SCRLCK| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | CAPS | PREV | STOP | PLAY | NEXT | VOL- |BL DEC| LEFT | DOWN | UP | RIGHT| PAUSE| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | BACK | STOP | RFRSH| FRWRD| MUTE |BL TOG| HOME | PGDN | PGUP | END |INSERT| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | RESET| | | | | DEL | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_SLEP,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_PSCR}, + {XXXXXXX,KC_F11 ,KC_F12 ,XXXXXXX,AU_TOG ,KC_VOLU,BL_INC ,COLEMAK,GAME ,MU_TOG ,KC_MENU,KC_SLCK}, + {KC_CAPS,KC_MPRV,KC_MSTP,KC_MPLY,KC_MNXT,KC_VOLD,BL_DEC ,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_PAUS}, + {XXXXXXX,KC_WBAK,KC_WSTP,KC_WREF,KC_WFWD,KC_MUTE,BL_TOGG,KC_HOME,KC_PGDN,KC_PGUP,KC_END ,KC_INS }, + {RESET ,_______,_______,_______,_______,KC_DEL ,_______,_______,_______,_______,_______,_______} +} + +}; + + + +#ifdef AUDIO_ENABLE + +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; +float tone_colemak[][2] = SONG(COLEMAK_SOUND); +float tone_game[][2] = { + {NOTE_E6, 10} ,{NOTE_E6, 10} ,{NOTE_REST, 10} ,{NOTE_E6, 10} , + {NOTE_REST, 10} ,{NOTE_C6, 10} ,{NOTE_E6, 10} ,{NOTE_REST, 10} , + {NOTE_G6, 10} ,{NOTE_REST, 30}, + {NOTE_G5, 10} ,{NOTE_REST, 30} +}; +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +void startup_user() { + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} +void shutdown_user() { + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) { + music_scale_user(); +} +void music_scale_user(void) { + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif + + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_colemak, false, 0); + #endif + persistant_default_layer_set(1UL<<_COLEMAK); + } + break; + case GAME: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_game, false, STACCATO); + #endif + persistant_default_layer_set(1UL<<_GAME); + } + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + break; + default: + return true; + break; + } + + return false; +}; -- cgit v1.2.3