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 From 76cd7c5444471c7fbf0f648088cac13f4c79af57 Mon Sep 17 00:00:00 2001 From: Corey Finley Date: Fri, 5 Aug 2016 09:08:55 -0400 Subject: Adds keymap based on Kinesis advantage --- keyboards/preonic/keymaps/kinesis/Makefile | 27 ++++++ keyboards/preonic/keymaps/kinesis/config.h | 92 ++++++++++++++++++ keyboards/preonic/keymaps/kinesis/keymap.c | 144 ++++++++++++++++++++++++++++ keyboards/preonic/keymaps/kinesis/readme.md | 1 + 4 files changed, 264 insertions(+) create mode 100644 keyboards/preonic/keymaps/kinesis/Makefile create mode 100644 keyboards/preonic/keymaps/kinesis/config.h create mode 100644 keyboards/preonic/keymaps/kinesis/keymap.c create mode 100644 keyboards/preonic/keymaps/kinesis/readme.md (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/kinesis/Makefile b/keyboards/preonic/keymaps/kinesis/Makefile new file mode 100644 index 0000000000..6c8d2897cd --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/Makefile @@ -0,0 +1,27 @@ + + +# 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 + +TAP_DANCE_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/preonic/keymaps/kinesis/config.h b/keyboards/preonic/keymaps/kinesis/config.h new file mode 100644 index 0000000000..086baa84ff --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/config.h @@ -0,0 +1,92 @@ +/* +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 + +#define BACKLIGHT_PIN B7 + +/* 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 RGB_DI_PIN D1 +#define RGBLIGHT_TIMER +#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. + */ + +#define TAPPING_TERM 200 + +/* 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/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c new file mode 100644 index 0000000000..1cd6eb9938 --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/keymap.c @@ -0,0 +1,144 @@ +#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 _FN 1 +#define _ULCK 2 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define HYP_TIC ALL_T(KC_GRV) +#define EQ_LOCK TD(TD_EQ_LOCK) +#define MIN_ULK TD(TD_MIN_ULOCK) + +//Tap Dance Declarations +enum { + TD_EQ_LOCK = 0, + TD_MIN_ULOCK +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Ctrl | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | FN | ` | Alt | LGUI | Back | ESC |ENTER | SPCE | RGUI | [ | ] | FN | + * `-----------------------------------------------------------------------------------' + */ + [_QWERTY] = { + {EQ_LOCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MIN_ULK }, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS }, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT }, + {KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC }, + {MO(_FN), HYP_TIC, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, KC_RGUI, KC_LBRC, KC_RBRC, MO(_FN) } + }, + + /* Fn + * ,-----------------------------------------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | VOL- | VOL+ | MUTE |BLtogg| | LEFT | DOWN | UP | RGHT | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | BL- | BL+ |Aud on|AudOff|AGnorm|AGswap| | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|MusOff| | |PLY/PS| | PREV | NEXT | | + * `-----------------------------------------------------------------------------------' + */ + [_FN] = { + {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______ }, + {_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______ }, + {_______, KC_VOLD, KC_VOLU, KC_MUTE, BL_TOGG, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______ }, + {_______, BL_DEC, BL_INC, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______ }, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, KC_MPLY, _______, KC_MPRV, KC_MNXT, _______ } + } + +}; + +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); + +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) {*/ + /*return true;*/ + /*[>switch (keycode) {<]*/ + /*[>case QWERTY:<]*/ + /*[>return true;<]*/ + /*[>}<]*/ +/*};*/ + +void matrix_init_user(void) { + startup_user(); +} + +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); +} + + +const qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for equal, twice for hyper + X (alfred lock) + [TD_EQ_LOCK] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, HYPR(KC_X)), + //Tap once for minus, twice for time.heals.nothing + [TD_MIN_ULOCK] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, M(_ULCK)) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _ULCK: + if (record->event.pressed) { + /* time.heals.nothing */ + return MACRO( I(220), T(T), T(I), T(M), T(E), T(DOT), T(H), T(E), T(A), T(L), T(S), T(DOT), T(N), T(O), T(T), T(H), T(I), T(N), T(G), END); + } + break; + } + return MACRO_NONE; +}; diff --git a/keyboards/preonic/keymaps/kinesis/readme.md b/keyboards/preonic/keymaps/kinesis/readme.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/preonic/keymaps/kinesis/readme.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file -- cgit v1.2.3 From ca3278cc356038ecdaf96fe12025b43c18692976 Mon Sep 17 00:00:00 2001 From: Xyverz Date: Tue, 9 Aug 2016 09:31:56 -0700 Subject: adds Xyverz's keymaps (#615) * Adding my own keymaps to the following keyboards: Planck, Preonic, Atreus, Ergodox * Delete dvorak.png Not reflective of my layout. * Delete readme.md file cleanup, removing file that doesn't apply to my layout. * Delete old_keymap.c file cleanup * Delete README.md file clean up. * Delete README.md file cleanup * Delete keymap.c file cleanup * Changed behavior of _DVORAK layout's KC_RSFT to SFT_T(KC_ENT) for flexibility's sake. Updated the rest of the keymap to reflect the current (as of 19:37 on 08 Aug 2018) default layout and default makefile. --- keyboards/preonic/keymaps/xyverz/keymap.c | 342 +++++++++++++++++++++++++++ keyboards/preonic/keymaps/xyverz/makefile.mk | 1 + 2 files changed, 343 insertions(+) create mode 100644 keyboards/preonic/keymaps/xyverz/keymap.c create mode 100644 keyboards/preonic/keymaps/xyverz/makefile.mk (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c new file mode 100644 index 0000000000..adc7392e5c --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/keymap.c @@ -0,0 +1,342 @@ +#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 _MUSIC 5 +#define _ADJUST 16 + +// Macro name shortcuts +#define QWERTY M(_QWERTY) +#define COLEMAK M(_COLEMAK) +#define DVORAK M(_DVORAK) +#define LOWER M(_LOWER) +#define RAISE M(_RAISE) +#define M_BL 5 +#define AUD_OFF M(6) +#define AUD_ON M(7) +#define MUS_OFF M(8) +#define MUS_ON M(9) +#define VC_IN M(10) +#define VC_DE M(11) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | - | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_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_DEL}, + {KC_MINS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* 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 + * ,-----------------------------------------------------------------------------------. + * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | " | , | . | P | Y | F | G | C | R | L | / | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | - | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = { + {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_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH}, + {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS}, + {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT}, + {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT } +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_CAPS, 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_MPRV, KC_MPLY, KC_MNXT, _______, _______}, + {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______} +}, + +/* Music (reserved for process_action_user) + * + */ +[_MUSIC] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______}, + {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +#ifdef AUDIO_ENABLE +float start_up[][2] = { + {440.0*pow(2.0,(14)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8}, + {440.0*pow(2.0,(18)/12.0), 20}, + {440.0*pow(2.0,(26)/12.0), 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +float goodbye[][2] = SONG(GOODBYE_SOUND); +#endif + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + 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; + case 6: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_off(); + #endif + } + break; + case 7: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + audio_on(); + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif + } + break; + case 8: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + layer_off(_MUSIC); + stop_all_notes(); + #endif + } + break; + case 9: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(music_scale, false, 0); + layer_on(_MUSIC); + #endif + } + break; + case 10: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_iterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + case 11: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + voice_deiterate(); + PLAY_NOTE_ARRAY(music_scale, false, 0); + #endif + } + break; + } + return MACRO_NONE; +}; + + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(start_up, false, 0); + #endif +} + +#ifdef AUDIO_ENABLE + +uint8_t starting_note = 0x0C; +int offset = 7; + +void process_action_user(keyrecord_t *record) { + + if (IS_LAYER_ON(_MUSIC)) { + if (record->event.pressed) { + play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); + } else { + stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); + } + } + +} + +void play_goodbye_tone() +{ + PLAY_NOTE_ARRAY(goodbye, false, 0); + _delay_ms(150); +} + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/xyverz/makefile.mk b/keyboards/preonic/keymaps/xyverz/makefile.mk new file mode 100644 index 0000000000..628167ff66 --- /dev/null +++ b/keyboards/preonic/keymaps/xyverz/makefile.mk @@ -0,0 +1 @@ +AUDIO_ENABLE = yes \ No newline at end of file -- cgit v1.2.3 From 880486bd247b93800f9d007f0ba90d38d5397b41 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:46:40 +0200 Subject: Jack's keymap. --- keyboards/preonic/keymaps/jacwib/Makefile | 25 ++++ keyboards/preonic/keymaps/jacwib/config.h | 9 ++ keyboards/preonic/keymaps/jacwib/keymap.c | 215 +++++++++++++++++++++++++++++ keyboards/preonic/keymaps/jacwib/readme.md | 2 + 4 files changed, 251 insertions(+) create mode 100644 keyboards/preonic/keymaps/jacwib/Makefile create mode 100644 keyboards/preonic/keymaps/jacwib/config.h create mode 100644 keyboards/preonic/keymaps/jacwib/keymap.c create mode 100644 keyboards/preonic/keymaps/jacwib/readme.md (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/Makefile b/keyboards/preonic/keymaps/jacwib/Makefile new file mode 100644 index 0000000000..1743c64878 --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/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 = 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 diff --git a/keyboards/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h new file mode 100644 index 0000000000..330686559f --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here +#define FORCE_NKRO 1 + +#endif diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c new file mode 100644 index 0000000000..1d5e0a7771 --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -0,0 +1,215 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "keymap_nordic.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 _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + BACKLIT +}; + +// 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 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Å | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | Ö | Ä | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| < | Z | X | C | V | B | N | M | . | , | - | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | GUI | Alt |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC},//Done + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM },//Done + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH},//Done + {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS},//Done + {KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}//Done +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | | @ | £ | $ | | | { | [ | ] | } | \ | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | |VolUp | | | ~ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | |LastS |PauseP|NextS | | * | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | |VolDwn| | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | |Bspc | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL},//Done + {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},//Done + {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN},//Done + {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},//Done + {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______}//Done +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ! | " | # | ¤ | % | & | / | ( | ) | = | ? | Ins | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | |Mouse^| | | | |ScrlUp| | | ^ | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | > | | | | | | |ScrlDown| : | ; | _ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | |Bspc | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS},//Done + {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},//Done + {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},//Done + {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},//Done + {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______}//Done +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | Reset| | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | | | | | | | | | |Rsft | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |MusOn |MusOff| | | | | | | | | Reset| + * |------+------+------+------+------+------+------+------+------+------+--,----+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_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},//Done + {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______},//Done + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT},//Done + {_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET },//Done + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}//Done +} + + +}; + +#ifdef AUDIO_ENABLE //Mario theme song: E5 E5 E5 C5 E5 G5 G4 +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_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); +} + +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); + #endif + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + 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); + } + return false; + 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); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +}; + +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 diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md new file mode 100644 index 0000000000..e81c62f76e --- /dev/null +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -0,0 +1,2 @@ +# Jack's preonic keymap. +Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. \ No newline at end of file -- cgit v1.2.3 From 1ab78110bd21b32a59eea46558ab4d83c5658cdb Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:48:22 +0200 Subject: Update readme.md --- keyboards/preonic/keymaps/jacwib/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md index e81c62f76e..838af399cf 100644 --- a/keyboards/preonic/keymaps/jacwib/readme.md +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -1,2 +1,2 @@ -# Jack's preonic keymap. -Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. \ No newline at end of file +# Jacwib's preonic keymap. +Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. -- cgit v1.2.3 From cf91aa416a6c32e2fa02d3ad31605ff1f24aab5e Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:48:52 +0200 Subject: Update keymap.c --- keyboards/preonic/keymaps/jacwib/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 1d5e0a7771..4ddaa962e1 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -100,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | |Rsft | * |------+------+------+------+------+------|------+------+------+------+------+------| * | |MusOn |MusOff| | | | | | | | | Reset| - * |------+------+------+------+------+------+------+------+------+------+--,----+------| + * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ -- cgit v1.2.3 From 62004866b3eee07a39a6caa0f6f3a2df0d5b2ef5 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:49:06 +0200 Subject: Update config.h --- keyboards/preonic/keymaps/jacwib/config.h | 1 - 1 file changed, 1 deletion(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h index 330686559f..23e9e0ed28 100644 --- a/keyboards/preonic/keymaps/jacwib/config.h +++ b/keyboards/preonic/keymaps/jacwib/config.h @@ -3,7 +3,6 @@ #include "../../config.h" -// place overrides here #define FORCE_NKRO 1 #endif -- cgit v1.2.3 From 26f4a0cf04cc11690abc80f644b5fbdc869cf056 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:49:26 +0200 Subject: Update Makefile --- keyboards/preonic/keymaps/jacwib/Makefile | 5 ----- 1 file changed, 5 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/Makefile b/keyboards/preonic/keymaps/jacwib/Makefile index 1743c64878..3e87d41d36 100644 --- a/keyboards/preonic/keymaps/jacwib/Makefile +++ b/keyboards/preonic/keymaps/jacwib/Makefile @@ -1,9 +1,5 @@ -# 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) @@ -17,7 +13,6 @@ 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 -- cgit v1.2.3 From e4e13ddc54d90b41a882c76a2d28f28763117763 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 10:57:47 +0200 Subject: Update readme.md --- keyboards/preonic/keymaps/jacwib/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md index 838af399cf..0660312353 100644 --- a/keyboards/preonic/keymaps/jacwib/readme.md +++ b/keyboards/preonic/keymaps/jacwib/readme.md @@ -1,2 +1,3 @@ # Jacwib's preonic keymap. -Tries to feel like a normal keyboard, and is also designed for use with a swedish keymap. + +Designed for use with a swedish language. -- cgit v1.2.3 From 6ba27ea31883d52b3e023681edc344cc95e90317 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 11:02:46 +0200 Subject: Remove pointless comments --- keyboards/preonic/keymaps/jacwib/keymap.c | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 4ddaa962e1..53604ef018 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -42,11 +42,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { - {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC},//Done - {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM },//Done - {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH},//Done - {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS},//Done - {KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}//Done + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC}, + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM }, + {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH}, + {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS}, + {KC_LCTL, KC_LGUI, KC_LALT, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower @@ -63,11 +63,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL},//Done - {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},//Done - {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN},//Done - {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},//Done - {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______}//Done + {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD}, + {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN}, + {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______} }, /* Raise @@ -84,11 +84,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_RAISE] = { - {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS},//Done - {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},//Done - {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},//Done - {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},//Done - {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______}//Done + {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS}, + {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC}, + {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT}, + {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS}, + {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______} }, /* Adjust (Lower + Raise) @@ -105,17 +105,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_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},//Done - {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______},//Done - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT},//Done - {_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET },//Done - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}//Done + {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_RSFT}, + {_______, MU_ON, MU_OFF, _______, _______, _______, _______, _______, _______, _______, _______, RESET }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} } }; -#ifdef AUDIO_ENABLE //Mario theme song: E5 E5 E5 C5 E5 G5 G4 +#ifdef AUDIO_ENABLE float tone_startup[][2] = { {NOTE_B5, 20}, {NOTE_B6, 8}, -- cgit v1.2.3 From 54e37fd2d10f91b1b77cee263c1e3a2b3552cbd9 Mon Sep 17 00:00:00 2001 From: jacwib Date: Sun, 14 Aug 2016 11:08:01 +0200 Subject: Fix bug --- keyboards/preonic/keymaps/jacwib/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 53604ef018..cf441bf309 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -65,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = { {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD}, - {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, NO_LPRN}, + {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)}, {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______} }, -- cgit v1.2.3 From 29f64d7a93d941167c6c6e95f893ab84586b2205 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Wed, 17 Aug 2016 13:04:50 +0200 Subject: tap-dance: Major rework, to make it more reliable This reworks how the tap-dance feature works: instead of one global state, we have a state for each tap-dance key, so we can cancel them when another tap-dance key is in flight. This fixes #527. Since we have a state for each key, we can avoid situation where a keyup would mess with our global state. This fixes #563. And while here, we also make sure to fire events only once, and this fixes #574. There is one breaking change, though: tap-dance debugging support was removed, because dumping the whole state would increase the firmware size too much. Any keymap that made use of this, will have to be updated (but there's no such keymap in the repo). Also, there's a nice trick used in this rework: we need to iterate through tap_dance_actions in a few places, to check for timeouts, and so on. For this, we'd need to know the size of the array. We can't discover that at compile-time, because tap-dance gets compiled separately. We'd like to avoid having to terminate the list with a sentinel value, because that would require updates to all keymaps that use the feature. So, we keep track of the highest tap-dance code seen so far, and iterate until that index. Signed-off-by: Gergely Nagy --- keyboards/preonic/keymaps/kinesis/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/keymaps/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c index 1cd6eb9938..9691be91d9 100644 --- a/keyboards/preonic/keymaps/kinesis/keymap.c +++ b/keyboards/preonic/keymaps/kinesis/keymap.c @@ -123,7 +123,7 @@ void music_scale_user(void) } -const qk_tap_dance_action_t tap_dance_actions[] = { +qk_tap_dance_action_t tap_dance_actions[] = { //Tap once for equal, twice for hyper + X (alfred lock) [TD_EQ_LOCK] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, HYPR(KC_X)), //Tap once for minus, twice for time.heals.nothing -- cgit v1.2.3 From 44441de8cad7255fd0637459ed39b89e34751b78 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 17:04:39 +0300 Subject: Split keyboard makefiles into rules and Makefile --- keyboards/preonic/Makefile | 72 +--------------------------------------------- keyboards/preonic/rules.mk | 69 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 71 deletions(-) create mode 100644 keyboards/preonic/rules.mk (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/Makefile b/keyboards/preonic/Makefile index 08e9205cbf..4e2a6f00fd 100644 --- a/keyboards/preonic/Makefile +++ b/keyboards/preonic/Makefile @@ -1,73 +1,3 @@ - - -# 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 +ifndef MAKEFILE_INCLUDED include ../../Makefile endif \ No newline at end of file diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk new file mode 100644 index 0000000000..d0f3a3a1c0 --- /dev/null +++ b/keyboards/preonic/rules.mk @@ -0,0 +1,69 @@ + + +# 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 \ No newline at end of file -- cgit v1.2.3 From da226e61261e0c11e678d2086c00b2a45726083e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 20 Aug 2016 03:22:16 +0300 Subject: Update keyboard readme files with new makefile instructions --- keyboards/preonic/readme.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/readme.md b/keyboards/preonic/readme.md index f0be255a09..10763ee97a 100644 --- a/keyboards/preonic/readme.md +++ b/keyboards/preonic/readme.md @@ -13,13 +13,15 @@ Download or clone the whole firmware and navigate to the keyboards/preonic folde 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`. +To build with the default keymap, simply run `make default`. ### 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: +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + ``` -$ make KEYMAP=[default|jack|] +$ make [default|jack|] ``` + Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. -- cgit v1.2.3 From 66adbfcab5c197f01ead2c07a79b25d2f2b93b1a Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Thu, 28 Jul 2016 01:25:29 -0700 Subject: Add default swap configs for a couple of boards. --- keyboards/preonic/preonic.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'keyboards/preonic') diff --git a/keyboards/preonic/preonic.c b/keyboards/preonic/preonic.c index 889c3fc8fd..d9c119b8da 100644 --- a/keyboards/preonic/preonic.c +++ b/keyboards/preonic/preonic.c @@ -1,5 +1,16 @@ #include "preonic.h" +#ifdef ONEHAND_ENABLE +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}}, + {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}}, + {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}}, + {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}}, + {{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}}, +}; +#endif + void matrix_init_kb(void) { // Turn status LED on -- cgit v1.2.3