diff options
author | Jack Humbert <jack.humb@gmail.com> | 2016-06-21 22:39:54 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-21 22:39:54 -0400 |
commit | 649b33d7783cf3021928534b7ae127e0a89e8807 (patch) | |
tree | c2b5e0cf8ff4aa2918e3b88ab75dbdb071cc0a1d /keyboards/satan | |
parent | 464c8e274f993d3571fe5ea5e836fe55a3912ffe (diff) |
Renames keyboard folder to keyboards, adds couple of tmk's fixes (#432)
* fixes from tmk's repo
* rename keyboard to keyboards
Diffstat (limited to 'keyboards/satan')
-rw-r--r-- | keyboards/satan/Makefile | 73 | ||||
-rw-r--r-- | keyboards/satan/backlight.c | 24 | ||||
-rw-r--r-- | keyboards/satan/config.h | 92 | ||||
-rw-r--r-- | keyboards/satan/controller.jpg | bin | 0 -> 140199 bytes | |||
-rw-r--r-- | keyboards/satan/keymaps/default/compiled.hex | 1543 | ||||
-rw-r--r-- | keyboards/satan/keymaps/default/keymap.c | 162 | ||||
-rw-r--r-- | keyboards/satan/led.c | 36 | ||||
-rw-r--r-- | keyboards/satan/pinout.txt | 1 | ||||
-rw-r--r-- | keyboards/satan/power.jpg | bin | 0 -> 433947 bytes | |||
-rw-r--r-- | keyboards/satan/satan.c | 94 | ||||
-rw-r--r-- | keyboards/satan/satan.h | 42 |
11 files changed, 2067 insertions, 0 deletions
diff --git a/keyboards/satan/Makefile b/keyboards/satan/Makefile new file mode 100644 index 0000000000..0ad71007e1 --- /dev/null +++ b/keyboards/satan/Makefile @@ -0,0 +1,73 @@ + + +SRC = led.c + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID + +ifndef QUANTUM_DIR + include ../../Makefile +endif diff --git a/keyboards/satan/backlight.c b/keyboards/satan/backlight.c new file mode 100644 index 0000000000..4240b09164 --- /dev/null +++ b/keyboards/satan/backlight.c @@ -0,0 +1,24 @@ + +#include <avr/io.h> +#include "backlight.h" +#include "print.h" + +void init_backlight_pin(void) { + print("init_backlight_pin()\n"); + // Set our LED pins as output + DDRB |= (1<<6); + + // Set our LED pins low + PORTB &= ~(1<<6); +} + +void backlight_set(uint8_t level) { + if ( level == 0 ) { + // Turn off light + PORTB |= (1<<6); + } else { + // Turn on light + PORTB &= ~(1<<6); + } +} + diff --git a/keyboards/satan/config.h b/keyboards/satan/config.h new file mode 100644 index 0000000000..aa2dca1a6a --- /dev/null +++ b/keyboards/satan/config.h @@ -0,0 +1,92 @@ +/* +Copyright 2012 Jun Wako <wakojun@gmail.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0003 +#define MANUFACTURER SATAN +#define PRODUCT GH60 +#define DESCRIPTION QMK keyboard firmware for Satan GH60 with WS2812 support + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +// ROWS: Top to bottom, COLS: Left to right + +#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* 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)) \ +) + +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 4 + +/* Underlight configuration + */ + #define ws2812_PORTREG PORTE + #define ws2812_DDRREG DDRE + #define ws2812_pin 2 + #define RGBLED_NUM 8 // 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/satan/controller.jpg b/keyboards/satan/controller.jpg Binary files differnew file mode 100644 index 0000000000..76ffa45004 --- /dev/null +++ b/keyboards/satan/controller.jpg diff --git a/keyboards/satan/keymaps/default/compiled.hex b/keyboards/satan/keymaps/default/compiled.hex new file mode 100644 index 0000000000..cd680d64dd --- /dev/null +++ b/keyboards/satan/keymaps/default/compiled.hex @@ -0,0 +1,1543 @@ +:100000000C945C070C94A0070C94A0070C94A00718
+:100010000C94A0070C94A0070C94A0070C94A007C4
+:100020000C94A0070C94A0070C942E1A0C94001B9F
+:100030000C94FC280C94A0070C94A0070C94A00727
+:100040000C94A0070C94A0070C94A0070C94A00794
+:100050000C94A0070C9464290C94A0070C94A0079E
+:100060000C94A0070C94A0070C94A0070C94A00774
+:100070000C94A0070C94A0070C94A0070C94A00764
+:100080000C94CC140C94A0070C94A0070C94A0071B
+:100090000C94A0070C94A0070C94A0070C94A00744
+:1000A0000C94A0070C94A0070C94A007B308D308E5
+:1000B0000B09DB08E308EB08F308FB0803096D1BD9
+:1000C0008F1B7D1C8F1B7D1CD41BF71B7D1C4C1CA8
+:1000D0005F1C991F991FC81FC81F0720722172211A
+:1000E000722127207221D720D7203E21472172215B
+:1000F0006C21E420E420E420E420E420E420E42057
+:10010000E420E420E420E420E420E420E420E420CF
+:10011000E420F4200221092110211A2100F001F02D
+:1001200002F003F004F005F006F007F008F00020FC
+:100130001E001F00200021002200230024002500B3
+:10014000260027002D002E002A002B0014001A0084
+:100150000800150017001C0018000C001200130006
+:100160002F0030003100390004001600070009009C
+:100170000A000B000D000E000F00330034000000D9
+:100180002800E10000001D001B000600190005000A
+:10019000110010003600370038000000E500E000D4
+:1001A000E300E200000000002C000000000000005E
+:1001B0000000E600E7000151E40035000100010005
+:1001C0000100010001000100010001000100010027
+:1001D00001000100007001000100010001000100A8
+:1001E0000100010001000100010001002F703070CA
+:1001F0003170010001000100010001000100010057
+:1002000001000100010001000100000001000100E7
+:1002100000000120022003200420052006200720E2
+:1002200008200100010000000100010001000100A0
+:1002300000000000010000000000000000000100BC
+:100240000100010001000A44454255473A20656E0D
+:1002500061626C65642E0A005374617465206F6678
+:1002600020726F772025583A2025303136620A00F7
+:1002700048756D616E2D7265616461626C65206D9B
+:1002800061747269782073746174653A0D0A004470
+:1002900065626F756E63696E672064656C61792055
+:1002A00072656D61696E696E673A2025580A00545F
+:1002B000494D4552332064697361626C65642E0A4E
+:1002C0000054494D45523320656E61626C65642E61
+:1002D0000A007267626C69676874207365742068CD
+:1002E0007376205B454550524F4D5D3A2025752C65
+:1002F00025752C25750A007267626C696768742021
+:10030000746F67676C653A207267626C69676874BE
+:100310005F636F6E6669672E656E61626C65203D16
+:100320002025750A007267626C69676874206D6FBA
+:1003300064653A2025750A007267626C69676874A3
+:100340005F696E6974207267626C696768745F6365
+:100350006F6E6669672E6D6F6465203D20302E20BC
+:1003600057726974652064656661756C7420766186
+:100370006C75657320746F20454550524F4D2E0AA1
+:10038000007267626C696768745F696E6974206582
+:1003900065636F6E666967206973206E6F74206590
+:1003A0006E61626C65642E0A007267626C696768D0
+:1003B000745F696E6974207374617274210A0072CB
+:1003C00067626C696768745F696E69742063616CE9
+:1003D0006C65642E0A007267626C696768745F639B
+:1003E0006F6E6669672E76616C203D2025640A0079
+:1003F0007267626C696768745F636F6E6669672EA7
+:10040000736174203D2025640A007267626C69671D
+:1004100068745F636F6E6669672E687565203D203E
+:1004200025640A007267686C696768745F636F6E41
+:100430006669672E6D6F6465203D2025640A007231
+:1004400067626C696768745F636F6E6669672E6563
+:100450006E61626C65203D2025640A007267626CE3
+:10046000696768745F636F6E666967206570726F35
+:100470006D0A006565636F6E6669675F75706461BC
+:1004800074655F7267626C696768745F64656661F2
+:10049000756C740A00643214643214783C1E1E14A5
+:1004A0000A0500000000010101020203040505061F
+:1004B00007090A0B0C0E0F1112141517191B1D1F1B
+:1004C000212325282A2C2F313436393B3E414346FF
+:1004D000494C4F5255585A5D6164676A6D70737626
+:1004E000797C7F8386898C8F9295989B9EA2A5A705
+:1004F000AAADB0B3B6B9BCBEC1C4C6C9CBCED0D309
+:10050000D5D7DADCDEE0E2E4E6E8EAEBEDEEF0F1A6
+:10051000F3F4F5F6F8F9FAFAFBFCFDFDFEFEFEFF3A
+:10052000FFFFFFFFFFFFFEFEFEFDFDFCFBFAFAF9F9
+:10053000F8F6F5F4F3F1F0EEEDEBEAE8E6E4E2E0EC
+:10054000DEDCDAD7D5D3D0CECBC9C6C4C1BEBCB9E8
+:10055000B6B3B0ADAAA7A5A29E9B9895928F8C89A1
+:100560008683807C797673706D6A6764615D5A58A2
+:1005700055524F4C494643413E3B393634312F2C7E
+:100580002A282523211F1D1B1917151412110F0EC0
+:100590000C0B0A090706050504030202010101000C
+:1005A000000000010102020202020203030303032E
+:1005B0000303030303030303030404040404040404
+:1005C00004040404040505050505050505050506DF
+:1005D00006060606060606070707070707070808B0
+:1005E000080808080909090909090A0A0A0A0A0B78
+:1005F0000B0B0B0B0C0C0C0C0C0D0D0D0D0E0E0E35
+:100600000E0F0F0F101010101111111212121313E0
+:100610001314141415151616161717181819191976
+:100620001A1A1B1B1C1C1D1D1E1E1F2020212122EF
+:1006300023232424252626272828292A2B2B2C2D42
+:100640002E2F30303132333435363738393A3B3C5F
+:100650003D3E3F40414244454647494A4B4C4E4F40
+:100660005152535556585A5B5D5E606263656769C7
+:100670006B6D6E70727476797B7D7F818486888BDA
+:100680008D909295979A9D9FA2A5A8ABAEB1B4B755
+:10069000BABEC1C4C8CBCFD3D6DADEE2E6EAEEF208
+:1006A000F8FF5B735D004B6579626F617264207364
+:1006B000746172742E0A005B575D005B535D005BD2
+:1006C000525D005B445D005B435D000A03470048E8
+:1006D000003600300000000C03530041005400417C
+:1006E000004E000000040309040902740004010024
+:1006F000A0FA090400000103010100092111010011
+:10070000012240000705810308000A0904010001D5
+:1007100003000000092111010001223600070582B3
+:100720000308000A09040200020300000009211165
+:1007300001000122200007058303200001070503B3
+:100740000320000109040300010300000009211136
+:100750000100012239000705840310000112011075
+:100760000100000008EDFE606003000102000105C9
+:10077000010906A101050719E029E71500250195E2
+:100780000875018102050819012905950575019172
+:1007900002950175039101050719002977150025B8
+:1007A00001957875018102C00631FF0974A1010924
+:1007B00075150025FF95207508810209761500251D
+:1007C000FF952075089102C005010980A1018502ED
+:1007D00016010026B7001A01002AB700751095010E
+:1007E0008100C0050C0901A1018503160100269CAA
+:1007F000021A01002A9C02751095018100C00501B2
+:100800000906A101050719E029E71500250195084A
+:1008100075018102950175088101050819012905F5
+:100820009505750191029501750391010507190060
+:1008300029FF150026FF00950675088100C00A00F3
+:100840002530325820006B6579626F6172645F7287
+:1008500065706F72743A20004B6579626F617264E3
+:10086000204C4544732073746174653A2025780ADE
+:100870000064656C5F6B65795F6269743A206361DF
+:100880006E27742064656C3A20253032580A006166
+:1008900064645F6B65795F6269743A2063616E2797
+:1008A00074206164643A20253032580A00646F6E07
+:1008B000652E0A00626F6F676D61676963207363FD
+:1008C000616E3A202E2E2E20003F00433E20004C29
+:1008D00025640A0074696D65725F636F756E743AA2
+:1008E000202530346C580A006B6579626F61726440
+:1008F0005F6E6B726F3A2025580A006B6579626FE4
+:100900006172645F69646C653A2025580A006B6502
+:1009100079626F6172645F70726F746F636F6C3A4B
+:100920002025580A00686F73745F6B6579626F6188
+:1009300072645F6C65647328293A2025580A000A9E
+:10094000092D20537461747573202D0A00474343A9
+:100950003A20342E392E32204156522D4C494243F2
+:100960003A20312E382E31204156525F41524348B1
+:100970003A20617672350A004F5054494F4E533A2F
+:10098000204C55464120424F4F544D41474943204A
+:1009900045585452414B455920434F4E534F4C45B7
+:1009A00020434F4D4D414E44204E4B524F2034304A
+:1009B00039360A004255494C443A2036386662635B
+:1009C00032632D6469727479202831313A35383AAE
+:1009D0003034204A756E2032312032303136290AC7
+:1009E000005649443A2030784645454428534154FE
+:1009F000414E29205049443A20307836303630284C
+:100A00004748363029205645523A20307830303029
+:100A1000330A00444553433A20514D4B206B6579CE
+:100A2000626F617264206669726D776172652066BB
+:100A30006F7220536174616E2047483630207769A9
+:100A400074682057533238313220737570706F726A
+:100A5000740A000A092D2056657273696F6E202D85
+:100A60000A000A092D20436F6E736F6C65202D0AF2
+:100A70004553432F713A09717569740A000A092DAB
+:100A8000204D61676963202D0A443A094465627507
+:100A900067204D65737361676520546F67676C6588
+:100AA0000A583A094D617472697820446562756725
+:100AB000204D6F646520546F67676C65202D20534F
+:100AC000686F77206B6579707265737365732069E1
+:100AD0006E206D617472697820677269640A4B3A9E
+:100AE000094B6579626F61726420446562756720A5
+:100AF000546F67676C65202D2053686F77206B6596
+:100B0000797072657373207265706F72740A4D3AF2
+:100B1000094465627567204D6F75736520546F6772
+:100B2000676C650A563A0956657273696F6E0A53A7
+:100B30003A095374617475730A433A0941637469DD
+:100B40007661746520436F6E736F6C65204D6F64C2
+:100B5000650A46312D4631303A0953776974636826
+:100B600020746F204C6179657220302D3920284621
+:100B70003130203D204C30290A302D393A09537745
+:100B80006974636820746F204C6179657220302D20
+:100B9000390A4553433A0953776974636820746F7F
+:100BA000204C6179657220302028616C7465726E0A
+:100BB000617465206B65792031290A475241564599
+:100BC0003A0953776974636820746F204C617965C2
+:100BD0007220302028616C7465726E617465206BC0
+:100BE00065792032290A50415553453A094A756DB5
+:100BF0007020746F20426F6F746C6F616465722037
+:100C0000285265736574290A453A095072696E74F1
+:100C100020454550524F4D2053657474696E67737B
+:100C20000A4E3A094E4B524F20546F67676C650A63
+:100C3000000A002575002E6C6576656C3A20000A66
+:100C4000002575002E656E61626C653A20000A0011
+:100C500025303258006261636B6C696768745F634A
+:100C60006F6E6669672E7261773A20000A002575FB
+:100C7000002E6E6B726F3A20000A002575002E73ED
+:100C80007761705F6261636B736C6173685F6261EF
+:100C9000636B73706163653A20000A002575002E4E
+:100CA000737761705F67726176655F6573633A2021
+:100CB000000A002575002E6E6F5F6775693A200087
+:100CC0000A002575002E737761705F72616C745F26
+:100CD000726775693A20000A002575002E737761E6
+:100CE000705F6C616C745F6C6775693A20000A0014
+:100CF0002575002E636170736C6F636B5F746F5F3B
+:100D0000636F6E74726F6C3A20000A002575002EB6
+:100D1000737761705F636F6E74726F6C5F63617025
+:100D2000736C6F636B3A20000A0025303258006BF9
+:100D300065796D61705F636F6E6669672E7261774A
+:100D40003A20000A002575002E6D6F7573653A20F4
+:100D5000000A002575002E6B6579626F6172643A36
+:100D600020000A002575002E6D61747269783A20A2
+:100D7000000A002575002E656E61626C653A2000E0
+:100D80000A00253032580064656275675F636F6ED4
+:100D90006669672E7261773A20000A002575006443
+:100DA000656661756C745F6C617965723A20003FAD
+:100DB000004E4B524F3A206F66660A004E4B524F20
+:100DC0003A206F6E0A000A6D6F7573653A206F6680
+:100DD000660A000A6D6F7573653A206F6E0A000A25
+:100DE0006B6579626F6172643A206F66660A000A09
+:100DF0006B6579626F6172643A206F6E0A000A6DEA
+:100E000061747269783A206F66660A000A6D6174CF
+:100E10007269783A206F6E0A000A64656275673AF3
+:100E2000206F66660A000A64656275673A206F6E15
+:100E30000A000A0A4A756D70696E6720746F206235
+:100E40006F6F746C6F616465722E2E2E2000433EAE
+:100E500020006565636F6E6669673A0A00626163C8
+:100E60006B6C6967687420737465703A2025750A25
+:100E7000006261636B6C6967687420746F67676C8C
+:100E8000653A2025750A006261636B6C6967687456
+:100E90002064656372656173653A2025750A006296
+:100EA00061636B6C6967687420696E6372656173F6
+:100EB000653A2025750A000011241FBECFEFDAE045
+:100EC000DEBFCDBF04B603FE24C080912002909106
+:100ED0002102A0912202B09123028730904BA740BB
+:100EE000B04BB9F41092200210922102109222020B
+:100EF0001092230214BE84B7877F84BF88E10FB6A7
+:100F0000F89480936000109260000FBEE0E0F8E378
+:100F1000099511E0A0E0B1E0E0E2F0E602C0059042
+:100F20000D92A833B107D9F712E0A8E3B1E001C0F0
+:100F30001D92A032B107E1F70E946C170C940E309D
+:100F40000C940000FF93EF93E0913801F091390188
+:100F5000309709F00995EF91FF910895FC01859173
+:100F6000803011F0EFDFFBCF0895FF27E0E230E2A1
+:100F700047FF0CC0419597FF09C0EDE26095709561
+:100F800080959095611D711D811D911D27FF02C0E7
+:100F9000219530E350E2AA27660F771F881F991F1B
+:100FA000AA1FA41710F0A41B63955A95A9F7AA309D
+:100FB00008F0A95FA05DAF93F395611571058105F8
+:100FC000910541F7ED3211F4EF93F395F21718F410
+:100FD0003F93F395FBCF8F91B5DFFA95E1F7089535
+:100FE000E991F9918591803021F0853219F0AADFDD
+:100FF000F9CF089520E0E89455915532C1F350336C
+:1010000011F4689455915A3348F4505390F3220FD9
+:10101000022E220F220F200D250FF4CF0EF4219562
+:1010200089919991533619F3533729F1533559F171
+:10103000BC0188279927E8945C3621F4899199911D
+:1010400068945591543639F446EF7EF077FF0DC021
+:101050008FEF9FEF0AC055374AE039F0583540E12D
+:1010600021F0523642E009F00895FF93EF937DDFBF
+:10107000EF91FF91B7CFFF93EF93FC018191803007
+:10108000B9F360DFFBCFFF93EF9368DFF1CFDF931E
+:10109000CF93CDB7DEB72596A3DFCF91DF9108952B
+:1010A000229A089581FF02C02A9A08952A980895E5
+:1010B00008950895269A2E988FEF9FEF90938700BA
+:1010C0008093860082E28093800089E18093810092
+:1010D0000C94A92E282F2E9880918000211108C0F1
+:1010E0008F7D8093800010928B0010928A0008956B
+:1010F000806280938000243019F48FEF9FEF0FC03F
+:1011000084E090E0821B9109880F991F2FEF3FEF39
+:10111000A90102C0569547958A95E2F7CA019093B6
+:101120008B0080938A00089588E598E0892B11F060
+:101130000E9458080E9450080C945A0889E598E0CB
+:10114000892B11F00C9459080895CF93DF93DC019B
+:10115000462F50E04930510508F065C0FA01EA5ABF
+:10116000FF4F0C94C02FEC010E94F92782728093EC
+:101170003A019A81992369F0882319F085E390E078
+:1011800002C089E290E00E945127DF91CF910C9438
+:101190004328882319F085E390E002C089E290E0BB
+:1011A0000E94A427F2CF12968C918823E1F1DF915F
+:1011B000CF910C94721212968C918823A1F1DF9139
+:1011C000CF910C94DE1012968C91882361F1DF91FF
+:1011D000CF910C94F61012968C91882321F1DF9117
+:1011E000CF910C94151112968C918823E1F0DF9128
+:1011F000CF910C94301112968C918823A1F0DF913D
+:10120000CF910C944A1112968C91882361F0DF9152
+:10121000CF910C94651112968C91882321F0DF9167
+:10122000CF910C946812DF91CF91089581E00895D9
+:1012300081E008950C94180908950F931F93CF939C
+:10124000DF938C01FC01C081D181CE010E94D226A6
+:10125000BE010E94540CEC01B8010E941A098823B7
+:1012600009F474C1F8018281882309F45BC080917C
+:10127000460181111FC0C431F0E7DF0709F00AC140
+:101280000E941C0981E0809346010E942E299093C0
+:1012900045018093440110923D0110923F0110924C
+:1012A0003E011092410110924001109243011092B0
+:1012B00042014CC180914401909145010E943A291C
+:1012C000883C910570F480913D01E82FF0E0EE0F2D
+:1012D000FF1FE25CFE4FD183C0838F5F80933D018F
+:1012E00035C1C43120E7D20708F028C1C23080E7F9
+:1012F000D80710F5C11590E7D90709F0DAC0F80151
+:101300008281882309F4BFC00E94D921FFEF24E322
+:101310008CE0F15020408040E1F700C000000E94C6
+:10132000892914C1C431F0E7DF0708F0D3C0C23007
+:1013300020E7D20708F49BC0F8018281882309F4D2
+:10134000A2C00E944A2B811102C00E942B2B0E9436
+:10135000672B90E09093F1018093F001C230F0E7A9
+:10136000DF0721F48091F00181607AC0C33020E76B
+:10137000D20721F48091F001826072C0C43080E70E
+:10138000D80721F48091F00184606AC0C53090E7ED
+:10139000D90719F48091F00127C0C630E0E7DE07D5
+:1013A00021F48091F00180615BC0C730F0E7DF0776
+:1013B00021F48091F001806253C0C83020E7D20749
+:1013C00021F48091F00180644BC0C93080E7D807D8
+:1013D00021F48091F001806843C0CA3090E7D907BA
+:1013E00029F48091F001846088603AC0CB30E0E756
+:1013F000DE0721F48091F0018E7F32C0CC30F0E71F
+:10140000DF0721F48091F0018D7F2AC0CD3020E7E5
+:10141000D20721F48091F0018B7F22C0CE3080E78B
+:10142000D80719F48091F0011AC08091F001CF30F3
+:1014300090E7D90711F48F7E13C0C031E0E7DE07D3
+:1014400011F48F7D0DC0C131F0E7DF0711F48F7B00
+:1014500007C0C231D04711F48F7702C08B7F877FDE
+:101460008093F0018091F0010E946B2B6FC0C11539
+:1014700080E7D80741F0C130D047F1F081E0809398
+:101480003B0180933C01C801DF91CF911F910F91E7
+:101490000C941609C43120E7D20708F04FC0C230BF
+:1014A00080E7D80708F048CFC11590E7D90709F4BD
+:1014B0002BCFC130D04711F7F8018281882319F36F
+:1014C00086E492E00E94AE078091E90181608093FA
+:1014D000E9013CC0C333E0E7DE07A1F4F8018281F3
+:1014E000882321F010923B0182E017C080913B01DC
+:1014F000811106C086E20E943D1E86E20E94051F01
+:1015000082E019C0C433D04709F0B8CFF801828116
+:10151000882331F010923C0180E20E94541F16C0D3
+:1015200080913C01811106C087E20E943D1E87E246
+:101530000E94051F80E20E945B1F08C0C333F0E7D2
+:10154000DF0761F2C433D04709F398CF80E0DF9121
+:10155000CF911F910F9108950C9494080C949E08BC
+:101560002EE0729FF001112436E4839FE00DF11DFF
+:101570001124E60FF11DEE0FFF1FE25DFE4F859176
+:1015800094910E94660C811540E5940708F047C0CD
+:10159000811520E4920708F013C1883E910520F5DB
+:1015A000803E910508F07CC1883A910578F4853A2F
+:1015B000910508F0A5C08130910509F471C108F4C6
+:1015C0002EC18430910508F06BC129C18B3B910578
+:1015D00008F4A1C0803C910508F421C1FC01EE0F84
+:1015E000FF1FE456F040E6C0811530E2930758F43F
+:1015F000811541E0940708F053C1803F910508F43C
+:101600000EC190650895811520E3920708F0D5C0BA
+:10161000FC01FF70EE0FFF1FE45EFE4FCBC0811593
+:1016200035E5930708F043C0811544E5940708F0B9
+:10163000DEC0811522E5920708F5811531E5930793
+:1016400008F0C1C0482F437021E030E002C0220FF3
+:10165000331F4A95E2F73C68AC0164E05695479524
+:101660006A95E1F74370342B8F708695869540E23A
+:10167000849FC0011124822B932B0895282F269537
+:101680002695AC01437055278115934508F0A0C0FD
+:1016900080E2289F9001112481E090E002C0880F31
+:1016A000991F4A95E2F7822B932B9C6808958F32FD
+:1016B00040E7940790F48F3120E7920708F0A2C02A
+:1016C000811536E5930708F497C09C013056211523
+:1016D000304108F0A4C09F7093C0803320E7920788
+:1016E00009F497C008F492C0813340E7940709F4E5
+:1016F00093C08233904709F092C080E093ED089543
+:10170000853A910509F48EC0863A910509F08DC09D
+:1017100082E890E40895883A910509F489C0893AED
+:10172000910509F488C08A3A910509F487C08B3A7B
+:10173000910509F486C08C3A910509F485C08D3A6B
+:10174000910509F484C0803B910509F483C08E3A69
+:10175000910509F482C08F3A910509F481C0813B5B
+:10176000910509F480C0823B910509F47FC0833B59
+:10177000910509F47EC0843B910509F47DC0853B49
+:10178000910509F47CC0863B910509F47BC0873B39
+:10179000910509F47AC0883B910509F479C0893B29
+:1017A000910509F478C08A3B910509F477C080E07F
+:1017B00094E408958591949108959927906C0895E3
+:1017C0009F70906A0895982F8827816F906A089576
+:1017D00090E2299F9001112481E090E002C0880FDF
+:1017E000991F4A95E2F7822B932B9A680895982FB8
+:1017F0008827846F906A08958F719927982F88277A
+:10180000906208958F519047946D089580E091ED16
+:10181000089580E090ED089580E092ED089580E0D5
+:1018200090E0089581E890E4089583E890E40895B5
+:1018300082EE94E4089589EE94E408958AEE94E4A7
+:10184000089585EB94E4089586EB94E4089587EB7E
+:1018500094E408958CEC94E408958DEC94E4089558
+:1018600083E895E408958AE895E4089582E995E48B
+:10187000089584E995E4089581E296E4089583E269
+:1018800096E4089584E296E4089585E296E4089546
+:1018900086E296E4089587E296E408958AE296E463
+:1018A000089580E090E008959EE0799FF001112472
+:1018B00096E4899FE00DF11D1124E60FF11DEE0F56
+:1018C000FF1FE25DFE4F8591949108958238910546
+:1018D00049F1B0F48133910509F458C048F48932D4
+:1018E000910509F44EC08A32910509F454C0089557
+:1018F0008533910509F440C08933910599F0089525
+:10190000833E910529F138F4803E910591F0823EA5
+:101910009105A1F00895863E9105F9F0873E910565
+:1019200031F108952091F00120FD3AC021FD38C029
+:1019300008958091F00180FD35C032C08091F001A2
+:1019400082FF32C08091F00184FD30C083EE39C047
+:101950008091F00182FD28C0F5CF8091F00183FFD6
+:1019600027C08091F00184FD21C087EE2AC08091BC
+:10197000F00183FD1DC0F5CF8091F00185FD1AC0F7
+:101980001BC08091F00185FD17C014C08091F0014B
+:1019900086FD14C015C08091F00186FD11C00EC0F7
+:1019A00080EE0FC089E30DC082EE0BC080E009C05D
+:1019B00086EE07C089E205C085E303C08AE201C064
+:1019C00081E390E008950C945208E82FF0E0E25E85
+:1019D000FE4F8081E82FEF70F0E082958F7021E05C
+:1019E00030E0A90102C0440F551F8A95E2F740A3D9
+:1019F00008950F931F93CF93DF93C4E0D0E001E0ED
+:101A000010E0FE01E25EFE4F8081E82FEF70F0E013
+:101A100021A182958F70A80102C0440F551F8A959D
+:101A2000E2F7CA01822B81A38C2F0E94E50C21973B
+:101A300040F78DE090E061E070E0FC01E05FFE4F78
+:101A40002081E22FEF70F0E042A122952F70DB01A0
+:101A500002C0AA0FBB1F2A95E2F79D01242B22A3E7
+:101A6000019758F7DF91CF911F910F9108950F9330
+:101A70001F93CF93DF9385B7806885BF85B7806854
+:101A800085BFC4E0D0E001E010E0FE01E25EFE4F61
+:101A90008081E82FEF70F0E021A182958F70A8017E
+:101AA00002C0440F551F8A95E2F7CA01822B81A319
+:101AB0008C2F0E94E50C219740F78DE090E061E0CB
+:101AC00070E0FC01E05FFE4F2081E22FEF70F0E05C
+:101AD00042A122952F70DB0102C0AA0FBB1F2A95DD
+:101AE000E2F79D01242B22A3019758F7DF91CF91B4
+:101AF0001F910F910C94AC0AEF92FF920F931F93DA
+:101B0000CF93DF9301E511E0C4E0EE24E394F12CE0
+:101B1000D5E08C2F0E94E50C8DE090E040E050E095
+:101B2000FC01E05FFE4F6081E62FEF70F0E020A146
+:101B300030E062956F7002C0359527956A95E2F79F
+:101B400020FD09C09701082E02C0220F331F0A94FE
+:101B5000E2F7422B532B019718F7F80192918291EB
+:101B60008F018417950721F051834083D0930001A2
+:101B70008C2F0E94E50CC15060F68091000187FD1A
+:101B800035C09091E90190FF10C0282F332727FD21
+:101B900030953F938F938FE892E09F938F930E94AD
+:101BA00047080F900F900F900F9080910001815087
+:101BB0008093000187FD07C08FE99FE00197F1F74F
+:101BC00000C0000013C080E090E0FC01EF5AFE4F1F
+:101BD000DC01A95BBE4F18962D913C911997318776
+:101BE00020870297863FEFEF9E0779F70E94AE0AA3
+:101BF00081E0DF91CF911F910F91FF90EF900895B9
+:101C0000E82FF0E0EE0FFF1FEF5AFE4F8081918129
+:101C10000895EF92FF920F931F93CF93DF938091DC
+:101C2000E90180FF04C080E792E00E94AE0701E571
+:101C300011E0C0E0D0E088E5E82E82E0F82E809147
+:101C4000E90180FF13C0F801808191810E949928E9
+:101C50009F938F93DF93CF93FF92EF920E94470859
+:101C60000F900F900F900F900F900F9021960E5F96
+:101C70001F4FC530D10519F7DF91CF911F910F91FB
+:101C8000FF90EF9008950F931F93CF930BE511E012
+:101C9000C0E0F801929182918F010E947728C80FCD
+:101CA000F1E001351F07A9F78C2FCF911F910F91FC
+:101CB00008952EB1342F309523233EB1432B3FB7E7
+:101CC000F894FC01680F791FE617F70789F08191F6
+:101CD00098E04EB9000000C087FF2EB9880F0000C1
+:101CE00000C000C000C02EB900C09A9591F7ECCF9B
+:101CF0003FBF08952DB1242B2DB99B01220F331F17
+:101D0000620F731F0E94590E87EC90E00197F1F764
+:101D100000C00000089544E00C947A0EAF92BF9288
+:101D2000CF92DF92EF92FF920F931F93CF93DF93A7
+:101D30006C01790150E0FA01EE55FA4F44918FEFB2
+:101D400090E0FC01E61BF109EE55FA4FE491E095B5
+:101D500009F495C0C42FD0E08E1B91098C9F90018F
+:101D60008D9F300D9C9F300D1124E32F8CE3A82E06
+:101D7000B12CC601B5010E94982FDC0162307105BB
+:101D800009F446C0D0F46115710599F1613071050F
+:101D900009F079C0C31BD109B501681B790BC69F37
+:101DA000C001C79F900DD69F900D1124B5010E94D0
+:101DB000982F032F060F142F67C06430710509F4A4
+:101DC0004BC0B8F16530710509F05DC0C31BD10986
+:101DD000B501681B790BC69FC001C79F900DD69FA8
+:101DE000900D1124B5010E94982F132FE32FE60FB9
+:101DF00044C0C31BD109CC9DC001CD9D900DDC9D7D
+:101E0000900D1124B5010E94982F132F160F35C085
+:101E1000C31BD109CA9FC001CB9F900DDA9F900DC3
+:101E20001124B5010E94982F142F032FE32FE60FE2
+:101E30002BC0C31BD109B501681B790BC69FC0011C
+:101E4000C79F900DD69F900D1124B5010E94982F29
+:101E5000132F160F032F0FC0C31BD109CA9FC00138
+:101E6000CB9F900DDA9F900D1124B5010E94982F01
+:101E7000032F060F132FE42F07C0042F05C0E42FF4
+:101E8000142F042F01C0E0E0D70111960C93119795
+:101E90001C931296EC93DF91CF911F910F91FF90BD
+:101EA000EF90DF90CF90BF90AF90089587E090E0E3
+:101EB0000C94CE2FAB01BC0187E090E00C94EC2F8A
+:101EC0008091E90180FF08C083E794E09F938F939E
+:101ED0000E9447080F900F9083E08093F201809159
+:101EE000F301807884668F778093F3018CEC809384
+:101EF000F4018093F5016091F2017091F3018091FA
+:101F0000F4019091F5010C945A0F8091E90180FF42
+:101F100008C08CE594E09F938F930E9447080F9030
+:101F20000F908091E90180FF0FC08091F2018170D4
+:101F30001F928F938FE394E09F938F930E944708A3
+:101F40000F900F900F900F908091E90180FF10C0CB
+:101F50008091F20186958F731F928F9384E294E0B3
+:101F60009F938F930E9447080F900F900F900F90B0
+:101F70008091E90180FF19C08091F201881F8827B4
+:101F8000881F9091F301292F220F822B97FB99270D
+:101F900090F99F938F938AE094E09F938F930E9490
+:101FA00047080F900F900F900F908091E90180FFEC
+:101FB0000EC08091F4011F928F9380EF93E09F9366
+:101FC0008F930E9447080F900F900F900F90809171
+:101FD000E90180FF0EC08091F5011F928F9386ED7D
+:101FE00093E09F938F930E9447080F900F900F905C
+:101FF0000F9008958091F20180FF06C068E070E0C4
+:102000008AEF91E00C948B0E80E090E0FC01E650AA
+:10201000FE4F118210821282039688319105B1F72A
+:10202000EDCF20E030E0F901E650FE4F8183608380
+:1020300042832D5F3F4F28313105A9F70C94FA0FE9
+:10204000EF92FF920F931F93CF93DF9300D01F92D5
+:10205000CDB7DEB70091F2011091F3012091F401A8
+:102060003091F5010093F6011093F7012093F801E8
+:102070003093F9012091F20120FF21C0042FF62EA8
+:10208000E92E182F9E012F5F3F4F0E948E0E8091E8
+:10209000F60110FB87F98093F60116958091F70100
+:1020A0008078182BE0FA17F91093F701F092F801F5
+:1020B0000093F9014B8169818A810E9411100F9070
+:1020C0000F900F90DF91CF911F910F91FF90EF90A4
+:1020D00008950F931F93CF93DF93EC01062F142FD6
+:1020E0009091F20190FF65C0892F8E77823021F4A4
+:1020F000CE010E9420101BC0892F86958F732EE37E
+:10210000280F2F73243018F41091F50110C0865C4D
+:102110008F73893060F4C92FCC1FCC27CC1FD0918E
+:10212000F3018D2F880FC82BD7FBDD27D0F98091C5
+:10213000F201C0FB87F98093F201C6958091F3010B
+:102140008078C82BD0FBC7F9C093F3010093F4014A
+:102150001093F5016091F2017091F3018091F40107
+:102160009091F5010E945A0F8091F5011F928F9373
+:102170008091F4011F928F938091F201881F88272C
+:10218000881F9091F301292F220F822B97FB99270B
+:1021900090F99F938F9382ED92E09F938F930E948B
+:1021A00047088DB79EB708960FB6F8949EBF0FBE2E
+:1021B0008DBFDF91CF911F910F910895E2EFF1E074
+:1021C0002081221F2227221F3091F301432F440F29
+:1021D000842F822B37FB992790F90A9668E671E0E5
+:1021E0000E94AC2F438162810C9469102091F2010E
+:1021F000221F2227221F3091F301432F440F842FE7
+:10220000822B37FB992790F98A3091051CF4825A6A
+:102210009E4F01C00A9768E671E00E94AC2F409182
+:10222000F5016091F4010C9469106091F401862F1E
+:1022300090E08F3E910514F46F5E01C06FEF8091C6
+:10224000F201881F8827881F9091F301292F220F00
+:1022500097FB992790F94091F501822B0C94691016
+:102260006091F401862F90E0419714F0615101C014
+:1022700060E08091F201881F8827881F9091F30108
+:10228000292F220F97FB992790F94091F501822B76
+:102290000C9469104091F501842F90E08F3E9105D8
+:1022A00014F44F5E01C04FEF8091F201881F882720
+:1022B000881F9091F301292F220F97FB992790F9FE
+:1022C0006091F401822B0C9469104091F501842FE8
+:1022D00090E0419714F0415101C040E08091F2013B
+:1022E000881F8827881F9091F301292F220F97FBC1
+:1022F000992790F96091F401822B0C9469108091D8
+:102300006C0181110FC081E080936C0189E08093A2
+:1023100091008FB7F89493E09093990090ED90938B
+:1023200098008FBF08958091710082608093710042
+:102330008091E90180FF08C081EC92E09F938F9328
+:102340000E9447080F900F900895809171008D7F33
+:10235000809371008091E90180FF08C08FEA92E0CC
+:102360009F938F930E9447080F900F90089590912C
+:10237000F20190FF4BC09178811102C0926007C0BA
+:10238000883110F09E6203C08F73880F982B909352
+:10239000F2016091F2017091F3018091F40190914A
+:1023A000F5010E945A0F8091F20186958F731F925A
+:1023B0008F9385E293E09F938F930E9447088091CB
+:1023C000F201982F9E770F900F900F900F90923000
+:1023D00019F40E94A51107C08695825C8F7386311F
+:1023E00010F40E9493118091F201881F8827881FA2
+:1023F0009091F301292F220F97FB992790F9409193
+:10240000F5016091F401822B0C946910089580917C
+:10241000E90181608093E9018FEB93E09F938F93B3
+:102420000E94470881E080936D018091E9010F903F
+:102430000F9080FF08C089EA93E09F938F930E94DA
+:1024400047080F900F900E944A2B811110C0809175
+:10245000E90180FF08C081E893E09F938F930E9479
+:1024600047080F900F900E942B2B0E94600F0E9434
+:10247000560F6093F2017093F3018093F4019093EF
+:10248000F5016E77C1F48091E90180FF08C088E30F
+:1024900093E09F938F930E9447080F900F900E94A4
+:1024A000600F0E94560F6093F2017093F3018093C6
+:1024B000F4019093F5010E94850F0E947F11809195
+:1024C000F20180FF04C086958F730C94B7110895B4
+:1024D0008091F20186958F738F5F883108F081E0DB
+:1024E0000C94B7118091F201982F909590FB80F990
+:1024F0008093F2016091F2017091F3018091F401F7
+:102500009091F5010E945A0F8091F20181701F9203
+:102510008F9387EF92E09F938F930E94470880915B
+:10252000F2010F900F900F900F9080FF04C08695DE
+:102530008F730C94B7110E94A5112FEF80E792E0E2
+:10254000215080409040E1F700C000000C94FA0F49
+:10255000CF93C82F80916A0190916B010E943A2914
+:10256000EC2FF0E0E256FB4FE491F0E08E179F076E
+:1025700018F10E942E2990936B0180936A01E091DB
+:102580006901F0E0EE55FB4F44918091F201881F04
+:102590008827881F9091F301292F220F97FB9927F5
+:1025A00090F96091F401822B0E94201080916901C2
+:1025B00090E0019680936901CF910895CF93C82F41
+:1025C00080916701909168010E943A29EC2FF0E018
+:1025D000E556FB4FE491F0E08E179F07E8F00E946C
+:1025E0002E2990936801809367014091F5016091D5
+:1025F000F40180916501909166010E942010809104
+:10260000650190916601019668E671E00E94982F3D
+:102610009093660180936501CF910895CF92DF92E8
+:10262000FF920F931F93CF93DF93F82E8091630156
+:10263000909164010E943A29EF2DE695F0E0E5566D
+:10264000FB4FE491F0E08E179F07E8F10E942E29DE
+:1026500090936401809363010AEF11E0C0E0D0E041
+:1026600088E6C82EDD24D3948091610190916201A7
+:102670008C0F9D1FB6010E94982F98014091F50183
+:102680006091F4010E948E0EAD960D5F1F4FC8360B
+:1026900081E0D80749F70E94FA0F2091610130913B
+:1026A0006201F0FE0AC0C9010196BE010E94982F86
+:1026B000909362018093610106C0215031093093EB
+:1026C000620120936101DF91CF911F910F91FF90E3
+:1026D000DF90CF9008958F929F92AF92BF92CF924A
+:1026E000DF92EF92FF920F931F93CF93DF93C82F48
+:1026F00080FF03C0DD24DA9402C0DD24D3948091EE
+:102700005F01909160010E943A29C695EC2FF0E09C
+:10271000E856FB4FE491F0E08E179F0708F466C07F
+:102720000E942E299093600180935F019AEFE92E19
+:1027300091E0F92E0CEF11E0C0E0D0E027E0822E0E
+:10274000912CF80131971082F7011082F801108264
+:1027500087E0A82EB12CC12C80915E018C0D87FDE5
+:10276000885F992787FD9095C817D907E9F42091CC
+:10277000F5012A9DC0012B9D900D1124B4010E94EA
+:10278000AC2F462F8091F201881F8827881F9091D7
+:10279000F301592F550F97FB992790F997016091F5
+:1027A000F401852B0E948E0ECD0CF1E0AF1AB1081A
+:1027B00099F6219683E0E80EF11C0D5F1F4FC8309B
+:1027C000D10509F0BECF0E94FA0F80915E0191E021
+:1027D000D91206C0811102C087E006C0815004C032
+:1027E00090E001968770992780935E01DF91CF91E9
+:1027F0001F910F91FF90EF90DF90CF90BF90AF901F
+:102800009F908F9008959F92AF92BF92CF92DF9248
+:10281000EF92FF920F931F93CF93DF93CDB7DEB765
+:1028200068970FB6F894DEBF0FBECDBF182F80910A
+:102830005C0190915D010E943A29E12FF0E0EB5696
+:10284000FB4FE491F0E08E179F0708F493C00E94BD
+:102850002E2990935D0180935C01CE0101967C014D
+:102860005E0193E0A90EB11CC12CD12C8701F501AA
+:1028700031971082F7011082F5011082912C90910E
+:10288000010180915B01999E800D112487FD04C098
+:1028900088301CF087E001C080E0992787FD909583
+:1028A000C816D906A1F48091F201881F8827881FD5
+:1028B0009091F301592F550F97FB992790F99701A4
+:1028C0004091F5016091F401852B0E948E0E939446
+:1028D000F7E09F12D4CF8FEFC81AD80A93E0E90E21
+:1028E000F11CE3E0AE0EB11CF8E0CF16D10409F004
+:1028F000BECFACEFB1E089E090E0FC01E770FF27CC
+:102900009D0121503109AF01440F551FE40FF51F00
+:10291000BF01600F711FFB014181F901408321500C
+:102920003109FB014081F9014083FB0122812C9395
+:10293000019613968131910501F70E94FA0F90914B
+:10294000010180915B01913049F48A3F2CF489EFB9
+:1029500080935B018FEF08C081500AC08F303CF03C
+:102960008EE080935B0181E08093010103C08F5F63
+:1029700080935B0168960FB6F894DEBF0FBECDBFA3
+:10298000DF91CF911F910F91FF90EF90DF90CF904B
+:10299000BF90AF909F9008951F920F920FB60F9225
+:1029A00011242F933F934F935F936F937F938F9354
+:1029B0009F93AF93BF93EF93FF938091F20186951E
+:1029C0008F739EE3980F9F73943020F482500E947F
+:1029D000A81223C09AE3980F9F73933020F4865077
+:1029E0000E94DE121AC097E3980F9F73963020F46E
+:1029F00089500E940E1311C091E3980F9F73963077
+:102A000020F48F500E946B1308C09BE2980F9F73B5
+:102A1000933018F485510E940314FF91EF91BF91F8
+:102A2000AF919F918F917F916F915F914F913F9166
+:102A30002F910F900FBE0F901F90189580918101DC
+:102A4000089508959FB7F894109270019FBF9091D8
+:102A50001602943009F057C09091E9009F703091B0
+:102A6000EC00232F217030FD20E8922B23E02093EF
+:102A7000E9002091EB0020FF43C02091EE0027FFEA
+:102A80003FC020916E01222321F02091E80025FF14
+:102A900037C010926E0126E03091E80035FD15C078
+:102AA00030911602343061F53091EB0035FD28C0CD
+:102AB000215021F481E080936E0122C0EFE9FFE014
+:102AC0003197F1F700C00000E7CF8093F1008091CB
+:102AD000E80085FD0AC08091E80080FFFCCF80916E
+:102AE000E8008E778093E80006C08FB7F89421E065
+:102AF000209370018FBF9F709093E90080E008954C
+:102B00009F709093E9008FEF0895CF93DF9300D0EB
+:102B10001F92CDB7DEB720911602243021F523E0B5
+:102B200029839B838A8382E08093E9008FEF9091D1
+:102B3000E800815095FD06C095ED9A95F1F70000EB
+:102B40008111F5CF8091E80085FF0DC040E050E095
+:102B500063E070E0CE0101960E941E188091E800AB
+:102B60008E778093E8000F900F900F90DF91CF91B8
+:102B70000895CF93DF9300D01F92CDB7DEB79C01AD
+:102B800080911602843019F592E099833B832A8361
+:102B90009093E9008FEF9091E800815095FD06C079
+:102BA00095ED9A95F1F700008111F5CF8091E8003D
+:102BB00085FF0DC040E050E063E070E0CE0101967B
+:102BC0000E941E188091E8008E778093E8000F9095
+:102BD0000F900F90DF91CF910895CF93DF93EC0189
+:102BE00090911602943009F046C080910C01882320
+:102BF000D9F080910D018823B9F09093E9008FEF0F
+:102C00009091E800815095FD06C095E19A95F1F705
+:102C100000008111F5CF8091E80085FF2CC040E0D5
+:102C200050E060E170E017C081E08093E9008FEF31
+:102C30009091E800815095FD06C095ED9A95F1F7C9
+:102C400000008111F5CF8091E80085FF14C040E0BD
+:102C500050E068E070E0CE010E941E188091E8000C
+:102C60008E778093E80080E1FE01A1E7B1E001905A
+:102C70000D928A95E1F7DF91CF91089587EC96E068
+:102C80000E94AE0780911502811109C00E94B319FC
+:102C90000E94101A8091E20084608093E2000895FF
+:102CA00083EC96E00E94AE071092150208958FEB18
+:102CB00096E00C94AE078BEB96E00C94AE0787EB96
+:102CC00096E00E94AE070C94F12820916F012F5FCF
+:102CD000822F62E30E948C2F992319F020936F01B9
+:102CE000089510926F0180917001882371F1809195
+:102CF0001602843041F58091E9008F702091EC003C
+:102D0000922F917020FD90E8892B93E09093E90039
+:102D10009091EB0090FF14C09091EE0097FF10C0CF
+:102D20009091E80095FF03C01092F100F9CF9091C7
+:102D3000E80090FF05C09091E8009E779093E8002E
+:102D40008F708093E90010927001089542E061EC69
+:102D500081E00E942D1942E061EC82E00E942D1971
+:102D600042E261EC83E00E942D1942E161EC84E0D3
+:102D70000C942D1980911802833009F455C030F459
+:102D8000813071F0823009F48EC008958A3009F4E0
+:102D90007AC08B3009F460C0893009F09CC020C033
+:102DA00080911702813A09F096C08091E800877FF0
+:102DB0008093E80080911B0290911C02892B21F4E2
+:102DC00060E181E791E003C060E080E090E070E0C6
+:102DD0000E9469188091E8008B778093E80008953D
+:102DE00080911702813209F076C080911B02909188
+:102DF0001C02009719F0039709F06DC08091E8005C
+:102E0000877F8093E8008091E80082FD05C0809173
+:102E100016028111F8CF5FC08091F100809381018B
+:102E20008091E8008B7753C080911702813A09F0B6
+:102E300052C080911B0290911C02892B09F04BC05B
+:102E40008091E800877F8093E8008091E80080FF10
+:102E5000FCCF80910C0136C0809117028132D9F5E8
+:102E600080911B0290911C02892BA9F58091E800AA
+:102E7000877F8093E8000E946219809119028093F5
+:102E80000C010C94D92180911702813221F5809197
+:102E9000E800877F8093E8000E94621980911A02FF
+:102EA00080938201089580911702813AA1F4809164
+:102EB000E800877F8093E8008091E80080FFFCCFE6
+:102EC000809182018093F1008091E8008E77809359
+:102ED000E8000C946219089584B7877F84BF88E165
+:102EE0000FB6F89480936000109260000FBE80E8E7
+:102EF00080936100109261000E94371D0E94B319F7
+:102F00000E94101A8091E20084608093E20082E2C5
+:102F100095E10E94722878940E94951C0E94391DA8
+:102F200082E091E00E94B01C86EA96E00E94AE0723
+:102F300080911602853089F482EA96E00E94AE07FD
+:102F40000E94B32880911402882391F30E94E02804
+:102F5000882371F30E940818EBCF0E94611DE8CF0F
+:102F6000292F332723303105C9F064F4213031058E
+:102F700081F02230310509F043C084E790E029EE6A
+:102F800036E042C021323105F1F02232310541F103
+:102F900037C082E190E02DE537E036C099278130D7
+:102FA000910541F08230910541F0892B49F5E5EE1C
+:102FB000F6E005C0E7EDF6E002C0EBECF6E0849148
+:102FC00090E09F0121C06430D8F4E62FF0E0EE0FCE
+:102FD000FF1FE15DFE4F2081318189E090E014C048
+:102FE000643070F470E0FB01EE0FFF1FE95DFE4FEF
+:102FF00020813181FB01ED5DFE4F808190E004C0B6
+:1030000080E090E020E030E0FA01318320830895F1
+:1030100080E189BD82E189BD09B400FEFDCF8091C8
+:10302000D8008F7D8093D8008091E00082608093EB
+:10303000E0008091E00081FDFCCF0895CF92DF9207
+:10304000EF92FF920F931F93CF93DF93EC018B01CD
+:103050006A010E948119811133C0C114D10439F071
+:10306000F60180819181081B190BC80FD91FE12C33
+:10307000F12C0115110519F18091E80085FD16C0AC
+:103080008091E8008E778093E800C114D10449F064
+:10309000F60180819181E80EF91EF182E08285E0DF
+:1030A0000FC00E948119882321F30AC0899180935F
+:1030B000F10001501109FFEFEF1AFF0ADACF80E0AB
+:1030C000DF91CF911F910F91FF90EF90DF90CF9004
+:1030D000089520911D0230911E022617370748F0EF
+:1030E0006115710539F42091E8002E772093E800EE
+:1030F00001C0B90140E061157105A9F120911602E6
+:10310000222309F443C0253009F442C02091E8008D
+:1031100023FD40C02091E80022FD32C02091E8004C
+:1031200020FFE9CF4091F3002091F20030E0342BF2
+:10313000FC01CF016115710559F02830310540F4CB
+:1031400081918093F100615071092F5F3F4FF1CF62
+:1031500041E02830310509F040E02091E8002E7769
+:103160002093E800C8CF4111C9CF0AC08091160250
+:10317000882361F0853061F08091E80083FD0AC00A
+:103180008091E80082FFF2CF80E0089582E0089508
+:1031900083E0089581E0089520911D0230911E0280
+:1031A0002617370748F06115710539F42091E800BA
+:1031B0002E772093E80001C0B901FC0120E06115E1
+:1031C000710591F180911602882309F440C0853081
+:1031D00009F43FC08091E80083FD3DC08091E80084
+:1031E00082FD2FC08091E80080FFE9CF2091F3009D
+:1031F0008091F20090E0922B6115710559F08830B2
+:10320000910540F424912093F100319661507109A9
+:103210000196F2CF21E0089709F020E08091E800C4
+:103220008E778093E800CBCF2111CCCF0AC080915C
+:103230001602882361F0853061F08091E80083FDFB
+:103240000AC08091E80082FFF2CF80E0089582E01A
+:10325000089583E0089581E00895982F973058F5F8
+:103260009093E900981739F07091EC002091ED00EF
+:103270005091F00003C0242F762F50E021FF19C099
+:103280003091EB003E7F3093EB003091ED003D7FBD
+:103290003093ED003091EB0031603093EB00709390
+:1032A000EC002093ED005093F0002091EE0027FFFA
+:1032B00007C09F5FD3CF8F708093E90081E00895AE
+:1032C00080E008958091170287FF11C08091E80087
+:1032D00082FD05C0809116028111F8CF11C0809146
+:1032E000E8008B770BC080911602882349F080910B
+:1032F000E80080FFF8CF8091E8008E778093E800A7
+:1033000008952091E4003091E50095E64091EC00AD
+:10331000842F817040FF22C08091E80080FD1CC096
+:1033200080911602882391F0853091F08091EB0016
+:1033300085FD10C04091E4005091E500421753070D
+:1033400029F39A01915011F784E0089582E00895DD
+:1033500083E0089581E0089580E008954091E800B9
+:1033600042FFDECF08950E94211A0E94291AE0EE42
+:10337000F0E0808181608083E8EDF0E080818F77EC
+:10338000808319BCA7EDB0E08C918E7F8C938081F7
+:103390008F7E80831092150208950F931F93CF9311
+:1033A000DF930E94211A0E94291AC8EDD0E088817B
+:1033B0008F77888388818068888388818F7D8883E0
+:1033C00019BC10921602109212021092140210925E
+:1033D000130200EE10E0F80180818B7F80838881EA
+:1033E0008160888342E060E080E00E942D19E1EE78
+:1033F000F0E080818E7F8083E2EEF0E0808181606A
+:103400008083808188608083F80180818E7F8083C3
+:10341000888180618883DF91CF911F910F910895FA
+:10342000E8EDF0E080818F7E8083E7EDF0E0808141
+:103430008160808384E082BF81E0809315020C94D8
+:10344000CD19E8EDF0E080818E7F80831092E2005C
+:1034500008951092DA001092E10008951F920F92E1
+:103460000FB60F9211242F933F934F935F936F9357
+:103470007F938F939F93AF93BF93EF93FF9380912D
+:10348000E10082FF0BC08091E20082FF07C08091C3
+:10349000E1008B7F8093E1000E9465168091DA0045
+:1034A00080FF1FC08091D80080FF1BC08091DA0090
+:1034B0008E7F8093DA008091D90080FF0DC080E17B
+:1034C00089BD82E189BD09B400FEFDCF81E0809312
+:1034D00016020E943E1605C019BC109216020E94E8
+:1034E00050168091E10080FF19C08091E20080FFBA
+:1034F00015C08091E2008E7F8093E2008091E2000F
+:1035000080618093E2008091D80080628093D8002F
+:1035100019BC85E0809316020E945B168091E10041
+:1035200084FF30C08091E20084FF2CC080E189BD1F
+:1035300082E189BD09B400FEFDCF8091D8008F7D66
+:103540008093D8008091E1008F7E8093E10080918C
+:10355000E2008F7E8093E2008091E20081608093A0
+:10356000E20080911202882311F084E007C080916C
+:10357000E30087FD02C081E001C083E08093160272
+:103580000E945F168091E10083FF29C08091E200D4
+:1035900083FF25C08091E100877F8093E10082E076
+:1035A00080931602109212028091E1008E7F809328
+:1035B000E1008091E2008E7F8093E2008091E20042
+:1035C00080618093E20042E060E080E00E942D197B
+:1035D0008091F00088608093F0000E945716FF9160
+:1035E000EF91BF91AF919F918F917F916F915F917B
+:1035F0004F913F912F910F900FBE0F901F901895F4
+:103600001F920F920FB60F9211242F933F934F9357
+:103610005F936F937F938F939F93AF93BF93CF935A
+:10362000DF93EF93FF93C091E900CF708091EC009E
+:10363000D82FD17080FDD0E81092E9008091F00081
+:10364000877F8093F00078940E94441B1092E900D9
+:103650008091F00088608093F000CD2BCF70C093F4
+:10366000E900FF91EF91DF91CF91BF91AF919F91D1
+:103670008F917F916F915F914F913F912F910F901B
+:103680000FBE0F901F9018951F93CF93DF93CDB768
+:10369000DEB7AA970FB6F894DEBF0FBECDBFE7E145
+:1036A000F2E088E08E0F9091F10091938E13FBCFA2
+:1036B0000E94BA168091E80083FF1FC18091170213
+:1036C00090911802492F50E04A30510508F015C179
+:1036D000FA01E15AFF4F0C94C02F803881F08238F4
+:1036E00009F00BC180911B028F708093E9008091DB
+:1036F000EB0085FB882780F91092E90006C08091D5
+:10370000130290911402911182609091E800977FCA
+:103710009093E8008093F1001092F100C8C0282F28
+:103720002D7F09F0EAC0882319F0823061F0E5C0EE
+:1037300080911902813009F0E0C0933009F080E0F7
+:10374000809314022BC080911902811127C08091AF
+:103750001B028F7009F4D1C08093E9002091EB0027
+:1037600020FF1CC0933021F48091EB00806214C0D4
+:103770009091EB0090619093EB0021E030E0A90183
+:1037800002C0440F551F8A95E2F74093EA00109259
+:10379000EA008091EB0088608093EB001092E900D2
+:1037A0008091E800877F86C08111A7C0109119021F
+:1037B0001F778091E3008078812B8093E3008091D4
+:1037C000E800877F8093E8000E9462198091E800FA
+:1037D00080FFFCCF8091E30080688093E3001111AB
+:1037E00002C082E001C083E08093160286C0805848
+:1037F000823008F082C08091190290911A028C3DAB
+:1038000053E0950779F583E08A838AE289834FB78D
+:10381000F894DE01139620E03EE051E2E32FF0E061
+:1038200050935700E49120FF03C0E295EF703F5F93
+:10383000EF708E2F90E0EA3010F0C79601C0C0966E
+:103840008D939D932F5F243149F74FBF8091E800FE
+:10385000877F8093E8006AE270E0CE0101960E94C3
+:10386000691814C0AE014F5F5F4F60911B020E9448
+:10387000B017BC01009709F440C09091E800977F11
+:103880009093E80089819A810E94CC188091E80089
+:103890008B778093E80031C0803879F58091E8001B
+:1038A000877F8093E800809112028093F1008091DD
+:1038B000E8008E778093E8000E9462191EC0811193
+:1038C0001CC0909119029230C0F48091E800877F6B
+:1038D0008093E800909312020E9462198091120274
+:1038E000811106C08091E30087FD02C081E001C024
+:1038F00084E0809316020E94A6168091E80083FF60
+:103900000AC08091E800877F8093E8008091EB00F7
+:1039100080628093EB00AA960FB6F894DEBF0FBECC
+:10392000CDBFDF91CF911F910895CF938091160263
+:103930008823A1F0C091E900CF709091EC00892F0D
+:10394000817090FD80E8C82B1092E9008091E8001A
+:1039500083FD0E94441BCF70C093E900CF9108956E
+:1039600090938801809387010895E0918701F091F9
+:103970008801309721F00190F081E02D099480E0DA
+:103980000895EF92FF920F931F93CF93DF93E091EF
+:103990008701F09188013097B1F18C010280F381A9
+:1039A000E02D09958091E90182FF2DC080FF04C0C0
+:1039B00086E498E00E94AE07E80110E180E4E82E7A
+:1039C00088E0F82E8091E90180FF0BC088811F926A
+:1039D0008F93FF92EF920E9447080F900F900F90E5
+:1039E0000F90115021961111EDCF8091E90180FFC8
+:1039F0000AC08EE398E0DF91CF911F910F91FF9065
+:103A0000EF900C94AE07DF91CF911F910F91FF9033
+:103A1000EF900895209185013091860182179307D8
+:103A200071F09093860180938501E0918701F09178
+:103A30008801309721F00680F781E02D09940895E0
+:103A400020918301309184018217930771F0909344
+:103A5000840180938301E0918701F0918801309780
+:103A600021F00084F185E02D0994089508950C94C7
+:103A7000361D0E9425290E94370D0E94F3290E94BD
+:103A8000A92E0C940712CF93DF931F92CDB7DEB708
+:103A90009091E90192FF10C090FF0EC01F928F938A
+:103AA00028E538E03F932F9389830E9447080F90C1
+:103AB0000F900F900F9089810F90DF91CF910C9410
+:103AC000E30C5F926F927F928F929F92AF92BF9220
+:103AD000CF92DF92EF92FF920F931F93CF93DF93DA
+:103AE00000D000D01F92CDB7DEB70E947C0D94E9C4
+:103AF000C92E91E0D92E04E010E0AA24A394B12CA1
+:103B0000502E802F0E94000E4C01F60172906290A0
+:103B10006F016826792661147104A1F4015011091E
+:103B200078F78FEF89838A831B820E942E29816018
+:103B3000782F9D838C8349815A816B818D810E946E
+:103B40000F1E38C08091E90181FD0E94090E2DE011
+:103B500030E07501022E02C0EE0CFF1C0A94E2F761
+:103B6000C70186219721892B09F129835A828E204A
+:103B70009F2091E0892809F490E09B830E942E29E0
+:103B80008160782F9D838C8349815A816B818D81DF
+:103B90000E940F1E000F111FF801E657FE4F808193
+:103BA0009181E826F926F182E08204C02150310992
+:103BB00080F6B4CF109189010E94B51C1817D1F07E
+:103BC0000E94B51C809389010F900F900F900F9069
+:103BD0000F90DF91CF911F910F91FF90EF90DF90A9
+:103BE000CF90BF90AF909F908F907F906F905F909D
+:103BF0000C94431D0F900F900F900F900F90DF913A
+:103C0000CF911F910F91FF90EF90DF90CF90BF90D9
+:103C1000AF909F908F907F906F905F900895CF931B
+:103C2000DF93CDB7DEB72B970FB6F894DEBF0FBE8C
+:103C3000CDBF4F83588769877A878B87DE011196BE
+:103C400086E0FD0111928A95E9F785E0FE0137963D
+:103C500001900D928A95E1F749815A816B817C81AF
+:103C60008D819E810E9477242B960FB6F894DEBF3B
+:103C70000FBECDBFDF91CF910895CF93882309F474
+:103C8000C2C0C82F823859F40E94B51C81FDBBC048
+:103C900089E30E9451270E94432889E30CC083389E
+:103CA00079F40E94B51C80FDAEC083E50E945127C7
+:103CB0000E94432883E50E94A427CF910C944328B7
+:103CC000843859F40E94B51C82FD9DC087E40E948F
+:103CD00051270E94432887E4EECF8CEF8C0F813A66
+:103CE00048F48C2F0E945A2E81118DC08C2F0E9477
+:103CF0005127E3CF80E28C0F883048F4C77081E011
+:103D000001C0880FCA95EAF70E94FC27D6CF8BE541
+:103D10008C0F833078F4C53A29F0C63A31F083E845
+:103D200090E005C081E890E002C082E890E0CF9189
+:103D30000C940A1D88E58C0F833108F064C0C83AE2
+:103D400039F1C93A41F1CA3A49F1CB3A51F1CC3A89
+:103D500059F1CD3A61F1C03B69F1CE3A71F1CF3AF8
+:103D600079F1C13B81F1C23B89F1C33B91F1C43B85
+:103D700099F1C53BA1F1C63BA9F1C73BB1F1C83BE5
+:103D8000B9F1C93BC1F1CA3BC9F180E090E038C04C
+:103D900082EE90E035C089EE90E032C08AEE90E08D
+:103DA0002FC085EB90E02CC086EB90E029C087EB1C
+:103DB00090E026C08CEC90E023C08DEC90E020C019
+:103DC00083E891E01DC08AE891E01AC082E991E0A1
+:103DD00017C084E991E014C081E292E011C083E24F
+:103DE00092E00EC084E292E00BC085E292E008C04F
+:103DF00086E292E005C087E292E002C08AE292E0A9
+:103E0000CF910C94201DCF910895882309F44BC0C5
+:103E1000823859F40E94B51C81FF45C089E30E9495
+:103E200051270E94432889E30CC0833871F40E9413
+:103E3000B51C80FF38C083E50E9451270E944328AB
+:103E400083E50E94A4270C944328843859F40E94E7
+:103E5000B51C82FF28C087E40E9451270E94432896
+:103E600087E4EFCF9CEF980F913A58F390E2980FC8
+:103E7000983050F4877091E001C0990F8A95EAF765
+:103E8000892F0E940228DFCF9BE5980F933020F402
+:103E900080E090E00C940A1D885A833120F480E081
+:103EA00090E00C94201D0895882321F00E94FC27A7
+:103EB0000C9443280895882321F00E9402280C9432
+:103EC000432808957F928F929F92AF92BF92CF9294
+:103ED000DF92EF92FF920F931F93CF93DF931F9286
+:103EE000CDB7DEB77C01C62E772EFC010581029589
+:103EF0000F70128111110E9419280E944A278823ED
+:103F000079F0112369F080E28C0D883048F082E06E
+:103F10000E9433270E944A2791E0D82ED92601C05B
+:103F2000D12CE72DE295EF70F0E0E759FF4F0C94AC
+:103F3000C02F872D807F072D0F70882311F00295E9
+:103F4000007F112389F0002309F48EC180E28C0DDB
+:103F5000883020F4802F0E94FC2703C0802F0E940D
+:103F60000C280E94432880C18C2D0E94051F00232D
+:103F700009F4B8C180E28C0D883020F4802F0E94B3
+:103F8000022803C0802F0E9412280E944328AAC141
+:103F9000872D807F972D9F70803211F4892F03C069
+:103FA000892F8295807FCC2021F0F1E0CF16A1F0FF
+:103FB0001DC0112339F0002319F1013009F50E94C9
+:103FC0002C2890C1002319F0013009F48BC189839A
+:103FD0000E942F28898105C1112321F0063008F0A5
+:103FE00081C10EC0053008F07DC1FBC0112359F01E
+:103FF000002331F0F701958190FF36C19F709583C2
+:104000000E94541F6FC1002309F4EBC033C1872DF8
+:1040100086958695837090E0009719F0019761F07E
+:1040200061C1112321F08C2D972D937002C080E087
+:1040300090E00E940A1D56C1112321F08C2D972D6E
+:10404000937002C080E090E00E94201D4BC1872D3C
+:10405000837009F052C0111145C18C2D829586954F
+:104060008770880F880F9C2D9F70892E912CA12C12
+:10407000B12C082E04C0880C991CAA1CBB1C0A94E5
+:10408000D2F7C4FE14C00FE010E020E030E0B90128
+:10409000A80104C0440F551F661F771F8A95D2F7E9
+:1040A000CB01BA01609570958095909503C060E052
+:1040B00070E0CB01272D26952695237030E0223025
+:1040C000310569F02330310589F0682979298A2979
+:1040D0009B292130310571F00E94BF2503C1682959
+:1040E00079298A299B290E94DB25FCC00E94BF25D3
+:1040F000C501B4010E94A325F5C0112319F0872D35
+:10410000817001C08695882309F4ECC08C2D8295BE
+:1041100086958770880F880F9C2D9F70892E912C13
+:10412000A12CB12C082E04C0880C991CAA1CBB1C05
+:104130000A94D2F7C4FE14C00FE010E020E030E093
+:10414000B901A80104C0440F551F661F771F8A9547
+:10415000D2F7CB01BA01609570958095909503C018
+:1041600060E070E0CB01272D269526952370422F25
+:1041700050E04230510569F04330510589F068291B
+:1041800079298A299B294130510571F00E9499268D
+:10419000A9C0682979298A299B290E94B526A2C02D
+:1041A0000E949926C501B4010E947D269BC08C2DDA
+:1041B00090E0FC01E05EF109E531F10508F050C046
+:1041C000E758FF4F0C94C02F0C2D0F70872D8F7167
+:1041D000112321F00E941626802F12CF0E9437262D
+:1041E000802F0E945B1F7EC0112341F0053008F034
+:1041F00079C0872D8F710E945C2674C0063008F04C
+:1042000071C0F7CF112339F0872D8F710E941626C8
+:1042100069C01123C9F3872D8F710E94372662C0B0
+:10422000112329F0872D8F710E9401265BC00E9407
+:10423000F72558C0112351F0172D1F71812F0E94AF
+:10424000162663E0812F0E942A274CC081E00E943D
+:104250003327023008F446C082E00E94332742C070
+:10426000112331F0002381F28C2D0E943D1E3AC0B3
+:10427000002389F28C2D0E94051F34C0472D4F70FA
+:104280006C2DC7010E94510C0E941B252BC01111DF
+:1042900029C0472D4F7050E042305105B9F04CF421
+:1042A0004115510581F041305105E1F40E94E42EA1
+:1042B00019C04330510569F04430510599F48C2DF3
+:1042C0000E946F2F0FC00E94BA2E0CC00E94132FA5
+:1042D00009C00E94392F06C0472D4F706C2DC701B1
+:1042E0000E94A508DD20F9F00E94262780FD1BC052
+:1042F000F70112820E9420270E941626C7010E9401
+:10430000A2210E9420270F90DF91CF911F910F9142
+:10431000FF90EF90DF90CF90BF90AF909F908F90E5
+:104320007F900C9437260F90DF91CF911F910F91C2
+:10433000FF90EF90DF90CF90BF90AF909F908F90C5
+:104340007F9008950F931F93CF93DF93EC018881A3
+:1043500099812B813C81232BB9F09F3F11F48F3F32
+:1043600099F0CE010E941D09882371F0688179813E
+:104370008A810E941C278C010E94D1260E949825C8
+:10438000B801CE010E94621FDF91CF911F910F9162
+:1043900008950E9419280E9429280E94EB270E9454
+:1043A000432880E090E00E940A1D80E090E00C9499
+:1043B000201D0E9409280C94C9210E941127292F31
+:1043C00022952F7030E02C3031054CF42A30310525
+:1043D0006CF42250310922303105A8F407C02C308A
+:1043E000310569F02F30310551F00DC0803F69F083
+:1043F00018F4803E40F409C0843F29F406C093FBC2
+:10440000882780F9089580E0089581E00895CF938A
+:10441000DF9300D000D01F92CDB7DEB70F900F9082
+:104420000F900F900F90DF91CF910895CF93DF936E
+:1044300000D000D000D0CDB7DEB726960FB6F894E6
+:10444000DEBF0FBECDBFDF91CF9108951F93CF93F5
+:10445000DF93C091940116E080919501C81799F0FF
+:10446000D0E01C9FF0011D9FF00D1124EA56FE4F75
+:104470004081518162817381848195810E941622DD
+:104480002196C770E9CFDF91CF911F910895409198
+:10449000C6015091C7016091C8017091C901809116
+:1044A000CA019091CB010C9416228091CB01829588
+:1044B0008F7009F054C08091C801882309F44FC05F
+:1044C00080919401A09195016091C6017091C701FE
+:1044D0004091C9015091CA01B6E08A1709F43FC062
+:1044E00090E041155105C1F17F3F11F46F3FA1F1FB
+:1044F000B89FF001B99FF00D1124EA56FE4F2181BB
+:1045000072132AC02081621327C02281211124C086
+:10451000238134812417350710F421503109241BDD
+:10452000350B283C3105C0F42091CB012F70206160
+:104530002093CB0126E0289FF001299FF00D112444
+:10454000E556FE4F80818F708061808386EC91E01C
+:104550000E94A2210C94262201968770BECF089556
+:10456000CF92DF92EF92FF920F931F93CF93DF933F
+:10457000CDB7DEB762970FB6F894DEBF0FBECDBFE2
+:104580008C0185E0F801DE011D9601900D928A955F
+:10459000E1F7D8014C9111965C91119712966C91AC
+:1045A00012971396CD90DC9014973091C6017091BC
+:1045B000C7018091C9019091CA01009709F46BC1AC
+:1045C0007F3F19F43F3F09F466C1E090C801EE2037
+:1045D00009F4C0C02091CB01C816D90628F0F60115
+:1045E000E81BF90BCF0104C0809590958C0D9D1DA3
+:1045F000FF24F394883C910578F0F12C207F09F09A
+:10460000C6C07C2DD98AC88A89890E94072286EC77
+:1046100091E00E94A221B1C0822F807F09F046C0A4
+:10462000751314C0341312C0611110C02F702061B3
+:104630002093CB010E94472286EC91E00E94A221A8
+:104640008091CB01D80115968C932EC0CD2819F1FD
+:104650005F3F11F44F3FF9F0F62E61111CC08091BD
+:1046600094012091950136E0821709F45AC090E038
+:10467000389FF001399FF00D1124EA56FE4F7181E9
+:10468000571306C07081471303C07281711103C0B4
+:1046900001968770E9CFF62E662309F418C1809140
+:1046A000CB0181608093CB01F12C11C1751308C03F
+:1046B000341306C0611104C08091CB01D801C3C07E
+:1046C0004D875E878D859E856A8B0E94DD216A8974
+:1046D0008823E1F16623D1F12091CB01822F8295CD
+:1046E0008F7090E0029774F08091C6019091C7019D
+:1046F00098878F831986DB86CA862C87CE0107961A
+:104700000E94A22186E0F801A6ECB1E001900D9292
+:104710008A95E1F70E9455220E944722FF24F394D4
+:10472000D6C04D875E878D859E850E941127292FD3
+:1047300022952F7030E0223031050CF0BCC09F7004
+:1047400009F0B6C0805E883008F4C1C0C8010E947C
+:10475000A221E4CFC816D90608F453C0F601E81B1D
+:10476000F90BCF01883C910508F450C0F12C7C2D49
+:10477000D98AC88A89890E940722E6ECF1E086E09E
+:10478000DF011D928A95E9F70E944722A0C07513A8
+:1047900014C0341312C0611110C08091CB01F80114
+:1047A0008583C8010E94A22186E0E6ECF1E0DF01EA
+:1047B0001D928A95E9F7FE2C8AC04D875E878D850C
+:1047C0009E856A8B0E94DD216A89882309F4BECF09
+:1047D000662309F4BBCF2091CB01822F82958F7085
+:1047E00090E002970CF48ECF8091C6019091C701A2
+:1047F0009A8389831B82DD82CC822E83CE0101962F
+:104800007FCF809590958C0D9D1DACCFF62E6623A5
+:1048100009F49CCF75132EC034132CC02091CB010A
+:1048200020FD1FC0822F82958F70D9F0D801159678
+:104830002C9315978F3049F08F5F982F9295907F2A
+:10484000822F8F70892B15968C93C8010E94A2210C
+:1048500086E0F801A6ECB1E001900D928A95E1F7AF
+:1048600093CF86E0F801A6ECB1E001900D928A9515
+:10487000E1F72DC04D875E878D859E850E94DD21E5
+:10488000811140CF8091CB0181608093CB01C80121
+:104890000E94A2211CC0662309F458CF4D875E8771
+:1048A0008D859E850E94DD21882309F44FCF2ACF74
+:1048B000811148CF0CC0243031050CF047CF9F70D8
+:1048C00009F440CFF8019581907F09F03BCF8F2DFF
+:1048D00062960FB6F894DEBF0FBECDBFDF91CF91C9
+:1048E0001F910F91FF90EF90DF90CF9008951F934D
+:1048F000CF93DF93CDB7DEB72C970FB6F894DEBF1A
+:104900000FBECDBF4F83588769877A878B879C8777
+:10491000CE0107960E94B022882369F08F81988586
+:104920002A853B85232BF1F19F3F09F063C08F3F20
+:1049300009F060C037C086E0FE013796DE011196AF
+:1049400001900D928A95E1F76F817885EA85FB8564
+:10495000309741F17F3F11F46F3F21F12091950194
+:1049600030E0C9010196877099274091940150E089
+:104970008417950709F447C069837A83FD83EC8324
+:1049800096E0929FD001939FB00D1124AA56BE4F7E
+:10499000FE01319601900D929A95E1F78093950171
+:1049A0000E94262216E0809194019091950189172A
+:1049B000C1F1189FC00111248A569E4F0E94B02257
+:1049C000882379F1E09194011E9FF0011124EA56A9
+:1049D000FE4F4081518162817381848195810E9463
+:1049E00016228091940190E0019687709927809318
+:1049F0009401D9CF4F81588569857A858B859C85AF
+:104A00000E941622CFCF0E94D921109295011092B8
+:104A10009401E6ECF1E086E0DF011D928A95E9F76A
+:104A2000C1CF2C960FB6F894DEBF0FBECDBFDF917D
+:104A3000CF911F910895EF92FF920F931F93CF9301
+:104A4000DF938C01009709F46CC0F12CEE24E39401
+:104A5000E8012196F8018491843740F4843008F00D
+:104A600051C0813081F0823019F15BC0853709F483
+:104A700044C0A8F19CE7980F903708F052C08F7798
+:104A80000E94051F41C00E5F1F4FFE01C49180E2CE
+:104A90008C0F883048F4C7708E2D01C0880FCA95DE
+:104AA000EAF70E941C2814C08C2F0E943D1E2DC0C6
+:104AB0000E5F1F4FFE01C49180E28C0F883058F4C6
+:104AC000C7708E2D01C0880FCA95EAF70E94222870
+:104AD0000E9443281AC08C2F0E94051F16C00E5F2B
+:104AE0001F4FFE01C491CC2381F08FE99FE0019715
+:104AF000F1F700C00000C150F6CF0E5F1F4FFE015E
+:104B0000F49003C00E943D1E8E018F2D882309F46E
+:104B10009FCFEFE9FFE03197F1F700C0000081502F
+:104B2000F5CFDF91CF911F910F91FF90EF900895F6
+:104B300008956093D0017093D1018093D201909336
+:104B4000D3010C94C9210F931F930091D0011091B0
+:104B5000D1012091D2013091D301DC01CB01802B16
+:104B6000912BA22BB32B8093D0019093D101A093D2
+:104B7000D201B093D3011F910F910C94C9210F93CF
+:104B80001F930091D0011091D1012091D201309159
+:104B9000D301DC01CB0180239123A223B323809393
+:104BA000D0019093D101A093D201B093D3011F9172
+:104BB0000F910C94C9210F931F930091D001109174
+:104BC000D1012091D2013091D301DC01CB018027AA
+:104BD0009127A227B3278093D0019093D101A0936E
+:104BE000D201B093D3011F910F910C94C92110925F
+:104BF000CC011092CD011092CE011092CF010C94F5
+:104C0000C92141E050E060E070E004C0440F551F4E
+:104C1000661F771F8A95D2F74093CC015093CD0140
+:104C20006093CE017093CF010C94C92141E050E014
+:104C300060E070E004C0440F551F661F771F8A951F
+:104C4000D2F78091CC019091CD01A091CE01B0918D
+:104C5000CF01482B592B6A2B7B2B4093CC015093CF
+:104C6000CD016093CE017093CF010C94C92141E036
+:104C700050E060E070E004C0440F551F661F771FCE
+:104C80008A95D2F740955095609570958091CC01AA
+:104C90009091CD01A091CE01B091CF01482359232D
+:104CA0006A237B234093CC015093CD016093CE01C6
+:104CB0007093CF010C94C92141E050E060E070E0B6
+:104CC00004C0440F551F661F771F8A95D2F7809145
+:104CD000CC019091CD01A091CE01B091CF01482798
+:104CE00059276A277B274093CC015093CD016093CD
+:104CF000CE017093CF010C94C9210F931F930091A3
+:104D0000CC011091CD012091CE013091CF01DC0179
+:104D1000CB01802B912BA22BB32B8093CC019093B2
+:104D2000CD01A093CE01B093CF011F910F910C94B0
+:104D3000C9210F931F930091CC011091CD012091B7
+:104D4000CE013091CF01DC01CB0180239123A2233E
+:104D5000B3238093CC019093CD01A093CE01B09367
+:104D6000CF011F910F910C94C9210F931F930091B4
+:104D7000CC011091CD012091CE013091CF01DC0109
+:104D8000CB0180279127A227B3278093CC01909352
+:104D9000CD01A093CE01B093CF011F910F910C9440
+:104DA000C9210895CF92DF92EF92FF920F931F9344
+:104DB000CF93DF938C01C090D001D090D101E090CF
+:104DC000D201F090D3018091CC019091CD01A091BE
+:104DD000CE01B091CF01C82AD92AEA2AFB2ACFE115
+:104DE000D0E0D701C6010C2E04C0B695A7959795C3
+:104DF00087950A94D2F780FF06C0B8018C2F0E94D5
+:104E0000B00A019721F4219760F780E001C08C2F50
+:104E1000DF91CF911F910F91FF90EF90DF90CF9096
+:104E20000895CF93DF93EC010E94D226BE010E9429
+:104E3000B00ADF91CF910895CB010E941127089508
+:104E40008091D40185958595859508958091D401AB
+:104E50008770089598E0899F90011124262B209354
+:104E6000D4010C9416262091D4018095822380933E
+:104E7000D401982F977069F430E0482F552747FDEB
+:104E800050952417350729F08595859585950C94BF
+:104E9000372608959091D401977081E009F480E05D
+:104EA000089590910C01992321F090910D01911199
+:104EB00009C020910E0130910F01F90132969FEF48
+:104EC00040E030C0982F9695969596959F30A0F427
+:104ED000E0910E01F0910F01E90FF11D877021E0C3
+:104EE00030E0A90102C0440F551F8A95E2F7CA01BC
+:104EF0009181892B818308959091E90190FF23C0CE
+:104F00001F928F938FE898E09F938F930E9447089A
+:104F10000F900F900F900F9008959F3F39F04F5FC3
+:104F20004E3041F051915813F8CF0DC05111F7CFC9
+:104F3000942FF5CF9F3F39F0F901E90FF11D97FD4F
+:104F4000FA9582830895089590910C01992321F098
+:104F500090910D01911109C020910E0130910F0126
+:104F6000F9013296205F3F4F30C0982F9695969565
+:104F700096959F30A8F4E0910E01F0910F01E90F92
+:104F8000F11D877021E030E0A90102C0440F551FD8
+:104F90008A95E2F7CA0180959181892381830895DA
+:104FA0009091E90190FF16C01F928F9381E798E0DE
+:104FB0009F938F930E9447080F900F900F900F9030
+:104FC00008953196E217F30729F090819813F9CFED
+:104FD0001082F7CF089581E090E0E0910E01F0910A
+:104FE0000F01E80FF91F1082019680319105A9F792
+:104FF00008958091E80108959091E801892B8093AC
+:10500000E801089580959091E80189238093E80153
+:1050100008951092E80108959091E701892B8093FB
+:10502000E701089580959091E70189238093E70136
+:1050300008951092E70108959091E601892B8093DD
+:10504000E601089580959091E60189238093E60119
+:1050500008951092E60108958093D5010895109265
+:10506000D501089580910E0190910F01FC013196B8
+:105070009C01205F3F4F80E0919191118F5FE2177B
+:10508000F307D1F70895E0910E01F0910F0180919F
+:10509000E8018083E0910E01F0910F0190818091F1
+:1050A000E701892B8083E0910E01F0910F0190813F
+:1050B0008091E601892B80838091D501882361F05E
+:1050C000E0910E01F0910F019081892B80830E9465
+:1050D000322881111092D50180910E0190910F011B
+:1050E0000C94C11C9093390180933801089520E0FD
+:1050F000009739F0AC0141505109842395232F5F6B
+:10510000F7CF822F08958295982F9C7C392F369562
+:105110003695282F237344E0249FC0011124932F38
+:10512000982B292F2A7A2695892F8575880F822B0F
+:1051300008951F93CF93DF931F92CDB7DEB7998366
+:105140000E948328182F9981892F0E948328212F5C
+:1051500030E0322F2227A901482BCA010F90DF919E
+:10516000CF911F91089580911602843039F11092E9
+:10517000EA0120E488E190E00FB6F894A8958093C6
+:1051800060000FBE2093600080E00E946A0880E00B
+:105190000E94E30C83B7817F846083BF83B7816003
+:1051A00083BF7894889583B78E7F83BF88E10FB6DD
+:1051B000F89480936000109260000FBE08950895E7
+:1051C00080E00E946A080E94F90C0E947C0D0E94F7
+:1051D000DF280E94430E91E0811101C090E0892FE9
+:1051E00008950E94D92180E00E946A080E94A92E99
+:1051F0000E94B51C0C94E30C1F920F920FB60F92F5
+:1052000011248F939F93AF93BF938091EA018111F3
+:1052100013C08091EB019091EC01A091ED01B09150
+:10522000EE014196A11DB11D8093EB019093EC011D
+:10523000A093ED01B093EE01BF91AF919F918F913B
+:105240000F900FBE0F901F90189582E084BD93E0E1
+:1052500095BD9AEF97BD80936E0008952FB7F8948F
+:105260008091EB019091EC01A091ED01B091EE01E4
+:105270002FBF0895CF92DF92EF92FF920F931F936B
+:105280002FB7F8944091EB015091EC016091ED0142
+:105290007091EE012FBF6A017B01EE24FF248C0187
+:1052A00020E030E0C016D106E206F30610F44150CB
+:1052B00051099A01281B390BC9011F910F91FF90C9
+:1052C000EF90DF90CF9008951F920F920FB60F923C
+:1052D00011248F939F93AF93BF938091EB01909193
+:1052E000EC01A091ED01B091EE010196A11DB11D5F
+:1052F0008093EB019093EC01A093ED01B093EE014C
+:10530000BF91AF919F918F910F900FBE0F901F9003
+:1053100018950E94B319F8942FEF87EA91E621506F
+:1053200080409040E1F700C0000087E090EBDC0196
+:105330008093200290932102A0932202B093230233
+:105340009CE088E10FB6F894A895809360000FBEAA
+:1053500090936000FFCFAF92BF92CF92DF92EF9217
+:10536000FF920F931F93CF93C4E0CC24C394D12C0E
+:10537000E82EF12C8C2F0E94000E5C010DE010E055
+:105380009601002E02C0220F331F0A94E2F72A2151
+:105390003B21232B51F0602F7C2F80E00E94540C86
+:1053A000E816F90611F481E006C00150110940F732
+:1053B000C15000F780E0CF911F910F91FF90EF90C7
+:1053C000DF90CF90BF90AF900895CF93C82F8CE21D
+:1053D0000E94AB29882321F08C2FCF910C94AB290C
+:1053E00080E0CF910895CF930E944A2B811102C093
+:1053F0000E942B2B84EB98E00E94AE07C5E6C150BB
+:1054000049F00E947C0D8FE39CE90197F1F700C001
+:105410000000F5CF8DEA98E00E94AE0789E20E9475
+:10542000E529811116C18AE20E94E52981110E94B5
+:105430002B2B85E00E94E52981110E9489290E9479
+:10544000552B8093E90187E00E94E5298823A9F183
+:105450008BE10E94E529882351F08091E90181FBCD
+:10546000222720F991E0922790FB81F90EC08EE06F
+:105470000E94E529882361F08091E90182FB2227BF
+:1054800020F991E0922790FB82F98093E90115C001
+:1054900080E10E94E5299091E901882341F093FB86
+:1054A000222720F981E0822780FB93F904C0892F0D
+:1054B000809580FB90F99093E9018091E9010E9429
+:1054C000592B0E94672B90E09093F1018093F0019B
+:1054D00080EE0E94E529882341F08091F001982F09
+:1054E000909590FB80F98093F00189E30E94E52973
+:1054F000882359F08091F00181FB222720F991E067
+:10550000922790FB81F98093F00182EE0E94E529B9
+:10551000882359F08091F00182FB222720F991E045
+:10552000922790FB82F98093F00186EE0E94E52994
+:10553000882359F08091F00183FB222720F991E024
+:10554000922790FB83F98093F00183EE0E94E52976
+:10555000882359F08091F00184FB222720F991E003
+:10556000922790FB84F98093F00185E30E94E5295E
+:10557000882359F08091F00185FB222720F991E0E2
+:10558000922790FB85F98093F00181E30E94E52941
+:10559000882359F08091F00186FB222720F991E0C1
+:1055A000922790FB86F98093F00181E10E94E52922
+:1055B000882359F08091F00187FB222720F991E0A0
+:1055C000922790FB87F98093F0018091F0010E946F
+:1055D0006B2B8091F00187FB882780F980930D0168
+:1055E00087E20E94E529C82F8EE10E94E5298111FA
+:1055F000C2608FE10E94E5298111C46080E20E94AF
+:10560000E5298111C86081E20E94E5298111C0610C
+:1056100082E20E94E5298111C06283E20E94E529AD
+:105620008111C06484E20E94E529882311F0C068DA
+:1056300002C0CC2329F08C2F0E94622B6C2F03C058
+:105640000E945E2B682F70E080E090E0CF910C9478
+:105650009925CF9108956DEE7EEF80E090E00E9455
+:10566000F82F60E082E090E00E94DA2F60E083E0B3
+:1056700090E00E94DA2F60E084E090E00E94DA2F50
+:1056800060E085E090E00E94DA2F60E086E090E044
+:105690000C94DA2F80E090E00E94D42F21E08D3E20
+:1056A0009E4F09F020E0822F089582E090E00C9454
+:1056B000C62F682F82E090E00C94DA2F83E090E010
+:1056C0000C94C62F682F83E090E00C94DA2F84E0CE
+:1056D00090E00C94C62F682F84E090E00C94DA2FB1
+:1056E00086E090E00C94C62F682F86E090E00C9442
+:1056F000DA2FCF93C82F1F928F938FEC98E09F9350
+:105700008F930E94470881E090E0A0E0B0E0BC01E8
+:10571000CD0104C0660F771F881F991FCA95D2F765
+:105720000E9499250F900F900F900F90CF910C949D
+:10573000D921CF938B3109F40FC208F049C08E30C4
+:1057400009F41EC200F5873009F4E7C1A8F48630D9
+:1057500009F0A4C28091E901817F8E7F8093E901E5
+:1057600082E69AE00E94AE078EE49EE00E94AE07B9
+:1057700081E08093EF01CFC1883009F45BC08B30AA
+:1057800009F4C5C18BC2813109F470C220F48031A3
+:1057900009F40AC283C2863109F421C2893109F0B1
+:1057A0007DC283E59AE00E94AE0783E19AE00E9401
+:1057B000AE0781EE99E00E94AE0784EB99E00E946B
+:1057C000AE0788E799E00E94AE078DE499E0A1C199
+:1057D000853309F45FC268F4873209F45BC228F4A8
+:1057E0008E3108F45BC28D5156C2893209F452C21F
+:1057F00055C2833438F48A3308F04AC2883309F436
+:1058000086C14CC2833409F445C2883409F046C2CB
+:105810000E94D92182E39EE00E94AE079FEF23ED14
+:1058200080E3915020408040E1F700C000000E94DA
+:10583000892971C182E59EE00E94AE078FE99DE053
+:105840000E94AE070E945E2B1F928F938CE99DE011
+:105850009F938F930E9447088AE99DE00E94AE07BC
+:105860000E94552BC82F87E89DE00E94AE071F922B
+:10587000CF9382E89DE09F938F930E94470880E832
+:105880009DE00E94AE0786E79DE00E94AE078C2F48
+:1058900081701F928F9383E79DE09F938F930E9467
+:1058A000470881E79DE00E94AE0787E69DE00E94E1
+:1058B000AE07C1FB882780F91F928F9384E69DE095
+:1058C0009F938F930E94470882E69DE00E94AE0757
+:1058D00086E59DE00E94AE07C2FB882780F91F92F3
+:1058E0008F9383E59DE09F938F930E94470881E506
+:1058F0009DE00E94AE0788E49DE00E94AE07C3FBD6
+:10590000CC27C0F91F92CF9385E49DE09F938F939E
+:105910000E94470883E49DE00E94AE070E94672B27
+:10592000C82F8FE29DE00E94AE071F92CF938AE2BC
+:105930009DE09F938F930E94470888E29DE00E941C
+:10594000AE078FE09DE00E94AE078C2F81701F9202
+:105950008F938CE09DE09F938F930E9447088DB7B3
+:105960009EB780960FB6F8949EBF0FBE8DBF8AE09B
+:105970009DE00E94AE0783EF9CE00E94AE07C1FB52
+:10598000882780F91F928F9380EF9CE09F938F93DD
+:105990000E9447088EEE9CE00E94AE078CED9CE0D2
+:1059A0000E94AE07C2FB882780F91F928F9389ED72
+:1059B0009CE09F938F930E94470887ED9CE00E9494
+:1059C000AE0785EC9CE00E94AE07C3FB882780F9F8
+:1059D0001F928F9382EC9CE09F938F930E944708C5
+:1059E00080EC9CE00E94AE0786EB9CE00E94AE0734
+:1059F000C4FB882780F91F928F9383EB9CE09F93D1
+:105A00008F930E94470881EB9CE00E94AE078FE9CC
+:105A10009CE00E94AE07C5FB882780F91F928F93F8
+:105A20008CE99CE09F938F930E9447088AE99CE051
+:105A30000E94AE078EE79CE00E94AE07C6FB882757
+:105A400080F91F928F938BE79CE09F938F930E9426
+:105A5000470889E79CE00E94AE0781E79CE00E942E
+:105A6000AE07C7FBCC27C0F91F92CF938EE69CE010
+:105A70009F938F930E9447088CE69CE00E94AE079C
+:105A80000E94702BC82F85E59CE00E94AE071F92F4
+:105A9000CF9380E59CE09F938F930E9447088DB73A
+:105AA0009EB780960FB6F8949EBF0FBE8DBF8EE452
+:105AB0009CE00E94AE0784E49CE00E94AE078C2F1D
+:105AC00081701F928F9381E49CE09F938F930E943B
+:105AD00047088FE39CE00E94AE0786E39CE00E94AB
+:105AE000AE07C6951F92CF9383E39CE09F938F935D
+:105AF0000E94470881E39CE00E94AE078DB79EB7E5
+:105B000008960FB6F8949EBF0FBE8DBF04C08DE7F8
+:105B10009AE00E94AE07C1E0C6C08091E901C82F9B
+:105B2000C095C170C0FB80F98093E901CC2349F096
+:105B300086E29EE00E94AE078091E901866088605F
+:105B400048C089E19EE00E94AE078091E901897F0B
+:105B5000877F8093E901DFCF9091E90191FBCC270A
+:105B6000C0F981E0C827892FC0FB81F98093E90142
+:105B7000CC2319F08CE09EE027C08EEF9DE0C9CFCA
+:105B80009091E90192FBCC27C0F981E0C827892FC9
+:105B9000C0FB82F98093E901CC2319F08FEE9DE0E0
+:105BA00013C08FED9DE0B5CF9091E90193FBCC2719
+:105BB000C0F981E0C827892FC0FB83F98093E901F0
+:105BC000CC2351F083ED9DE00E94AE078091E90166
+:105BD00081608093E90167C086EC9DE09ACF8FE3F6
+:105BE00099E00E94AE070E94B51C1F928F9385E238
+:105BF00099E09F938F930E94470880910C011F9218
+:105C00008F938EE099E09F938F930E944708809135
+:105C100082011F928F938BEF98E09F938F930E9446
+:105C2000470880910D011F928F9388EE98E09F9313
+:105C30008F930E9447088091EB019091EC01A09115
+:105C4000ED01B091EE01BF93AF939F938F9384EDDD
+:105C500098E09F938F930E9447088DB79EB7469612
+:105C60000FB6F8949EBF0FBE8DBF55CF0E94D921AD
+:105C7000C0910D0181E0C827C0930D01CC2329F00C
+:105C80008CEB9DE00E94AE070EC081EB9DE041CF02
+:105C9000895301C080E00E94792B3DCF8FEA9DE0BF
+:105CA0000E94AE07C0E08C2FCF91089580E0089548
+:105CB00080E00895CF93C82F8091EF01882319F0D9
+:105CC000813049F03EC0E0910E01F0910F018081DA
+:105CD0008232C9F507C0E0910E01F0910F01808179
+:105CE000823261F48C2F0E94562E811104C08C2FB9
+:105CF0000E94992B24C081E090E021C08C2F0E944B
+:105D0000582E81111BC0C43189F018F4CB3029F012
+:105D100010C0C93259F0C83361F482E69AE00E949B
+:105D2000AE078BEC98E00E94AE0708C01092EF011E
+:105D30000CC089EC98E00E94AE0707C081E081703A
+:105D400006C01092EF0180E002C080E0F8CFCF9152
+:105D500008950E944A2B811102C00E942B2B0E94A1
+:105D6000702B80931F0280FF02C0869501C080E0E7
+:105D70000C946A0880911F02982F9695292F30E085
+:105D8000243031054CF49F5F990F8170892B81601D
+:105D900080931F020E94742B8091E90180FF0FC045
+:105DA00080911F0286951F928F938FE99EE09F93AB
+:105DB0008F930E9447080F900F900F900F90809143
+:105DC0001F0286950C946A0880911F02982F969561
+:105DD00091F09158990F8170892B80931F028E7FCB
+:105DE00091E009F490E080911F0290FB80F980938C
+:105DF0001F020E94742B8091E90180FF0FC08091E7
+:105E00001F0286951F928F9387E89EE09F938F9342
+:105E10000E9447080F900F900F900F9080911F02E3
+:105E200086950C946A0880911F02982F909590FB9C
+:105E300080F980931F020E94742B8091E90180FFFA
+:105E40000FC080911F0281701F928F9381E79EE0A7
+:105E50009F938F930E9447080F900F900F900F9081
+:105E600080911F0280FF02C0869501C080E00C94E3
+:105E70006A0890911F02892F86958F5F8F779170A6
+:105E8000853028F4880F892B80931F0202C09093DD
+:105E90001F0280911F028E7F91E009F490E08091B3
+:105EA0001F0290FB80F980931F020E94742B809147
+:105EB000E90180FF0FC080911F0286951F928F938A
+:105EC0008DE59EE09F938F930E9447080F900F905F
+:105ED0000F900F9080911F0286950C946A08209174
+:105EE0001F02922F96958927982F990F822F8170E4
+:105EF000892B80931F028E7F91E009F490E08091BE
+:105F00001F0290FB80F980931F020E94742B8091E6
+:105F10001F0286950C946A08991B79E004C0991FAA
+:105F2000961708F0961B881F7A95C9F780950895F3
+:105F3000AA1BBB1B51E107C0AA1FBB1FA617B707AF
+:105F400010F0A61BB70B881F991F5A95A9F78095CB
+:105F50009095BC01CD01089597FB072E16F400948F
+:105F600007D077FD09D00E94982F07FC05D03EF49A
+:105F7000909581959F4F0895709561957F4F0895F5
+:105F8000EE0FFF1F0590F491E02D0994F999FECFD3
+:105F900092BD81BDF89A992780B50895A6E1B0E039
+:105FA00044E050E00C940030A8E1B0E042E050E062
+:105FB0000C940030262FF999FECF92BD81BDF89A3E
+:105FC000019700B4021639F01FBA20BD0FB6F8943D
+:105FD000FA9AF99A0FBE08950396272F0E94DB2F95
+:105FE0000E94DA2F252F0E94DB2F242F0C94DB2F09
+:105FF0000196272F0E94DB2F0C94DA2FDC01CB01B6
+:10600000FC01F999FECF06C0F2BDE1BDF89A3196C8
+:1060100000B40D9241505040B8F70895F894FFCF66
+:10602000FFFF1E15ED152115B91585150101D601C6
+:106030000F1F6C766673491303534379693309194B
+:1060400029395940362039FE07C807A8076F07FBD2
+:086050000614072D074D07009F
+:00000001FF
diff --git a/keyboards/satan/keymaps/default/keymap.c b/keyboards/satan/keymaps/default/keymap.c new file mode 100644 index 0000000000..b19404afc7 --- /dev/null +++ b/keyboards/satan/keymaps/default/keymap.c @@ -0,0 +1,162 @@ +#include "satan.h" + +#ifdef RGBLIGHT_ENABLE +#include "rgblight.h" +#endif + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * `-----------------------------------------------------------' + */ +[_BL] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ + KC_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_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL), + + /* Keymap _FL: Function Layer + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | RESET| + * |-----------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | + * |-----------------------------------------------------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ +[_FL] = KEYMAP( + #ifdef RGBLIGHT_ENABLE + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + #else + KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + #endif +}; + +enum function_id { + SHIFT_ESC, + #ifdef RGBLIGHT_ENABLE + RGBLED_TOGGLE, + RGBLED_STEP_MODE, + RGBLED_INCREASE_HUE, + RGBLED_DECREASE_HUE, + RGBLED_INCREASE_SAT, + RGBLED_DECREASE_SAT, + RGBLED_INCREASE_VAL, + RGBLED_DECREASE_VAL + #endif +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), + #ifdef RGBLIGHT_ENABLE + [1] = ACTION_FUNCTION(RGBLED_TOGGLE), + [2] = ACTION_FUNCTION(RGBLED_STEP_MODE), + [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), + [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), + #endif +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + //led operations + #ifdef RGBLIGHT_ENABLE + case RGBLED_TOGGLE: + if (record->event.pressed) { + rgblight_toggle(); + } + break; + case RGBLED_INCREASE_HUE: + if (record->event.pressed) { + rgblight_increase_hue(); + } + break; + case RGBLED_DECREASE_HUE: + if (record->event.pressed) { + rgblight_decrease_hue(); + } + break; + case RGBLED_INCREASE_SAT: + if (record->event.pressed) { + rgblight_increase_sat(); + } + break; + case RGBLED_DECREASE_SAT: + if (record->event.pressed) { + rgblight_decrease_sat(); + } + break; + case RGBLED_INCREASE_VAL: + if (record->event.pressed) { + rgblight_increase_val(); + } + break; + case RGBLED_DECREASE_VAL: + if (record->event.pressed) { + rgblight_decrease_val(); + } + break; + case RGBLED_STEP_MODE: + if (record->event.pressed) { + rgblight_step(); + } + break; + #endif + } +} diff --git a/keyboards/satan/led.c b/keyboards/satan/led.c new file mode 100644 index 0000000000..94606e8959 --- /dev/null +++ b/keyboards/satan/led.c @@ -0,0 +1,36 @@ +/* +Copyright 2012 Jun Wako <wakojun@gmail.com> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <avr/io.h> +#include "stdint.h" +#include "led.h" + + +void led_init_ports(void) { + // * Set our LED pins as output + DDRB |= (1<<2); +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1<<USB_LED_CAPS_LOCK)) { + // Turn capslock on + PORTB |= (1<<2); + } else { + // Turn capslock off + PORTB &= ~(1<<2); + } +} diff --git a/keyboards/satan/pinout.txt b/keyboards/satan/pinout.txt new file mode 100644 index 0000000000..d1ad4ac883 --- /dev/null +++ b/keyboards/satan/pinout.txt @@ -0,0 +1 @@ +For WS2812B LED strip support, connect DIN from strip to PE2 on ATmega32u4 controller (see reference image controller.jpg)
\ No newline at end of file diff --git a/keyboards/satan/power.jpg b/keyboards/satan/power.jpg Binary files differnew file mode 100644 index 0000000000..0514eef5c7 --- /dev/null +++ b/keyboards/satan/power.jpg diff --git a/keyboards/satan/satan.c b/keyboards/satan/satan.c new file mode 100644 index 0000000000..092eb4665d --- /dev/null +++ b/keyboards/satan/satan.c @@ -0,0 +1,94 @@ +#include "satan.h" + +#ifdef BACKLIGHT_ENABLE +#include "backlight.h" +#endif + +__attribute__ ((weak)) +void matrix_init_user(void) { + // leave these blank +}; + +__attribute__ ((weak)) +void matrix_scan_user(void) { + // leave these blank +}; + + +#ifdef BACKLIGHT_ENABLE + +void backlight_init_ports() +{ + + // Setup PB6 as output and output low. + DDRB |= (1<<6); + PORTB &= ~(1<<6); + + // 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 PB6 = OCR1B (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(COM1B1) | _BV(WGM11); // = 0b00001010; + TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + + backlight_init(); +} + +void backlight_set(uint8_t level) +{ + // Prevent backlight blink on lowest level + PORTB &= ~(_BV(PORTB6)); + + if ( level == 0 ) + { + // Turn off PWM control on PB6, revert to output low. + TCCR1A &= ~(_BV(COM1B1)); + OCR1B = 0x0; + } + else if ( level == BACKLIGHT_LEVELS ) + { + // Turn on PWM control of PB6 + TCCR1A |= _BV(COM1B1); + // Set the brightness + OCR1B = 0xFFFF; + } + else + { + // Turn on PWM control of PB6 + TCCR1A |= _BV(COM1B1); + // Set the brightness + OCR1B = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); + } +} + +#endif + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + if (matrix_init_user) { + (*matrix_init_user)(); + } + led_init_ports(); + + #ifdef BACKLIGHT_ENABLE + backlight_init_ports(); + #endif +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + if (matrix_scan_user) { + (*matrix_scan_user)(); + } +};
\ No newline at end of file diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h new file mode 100644 index 0000000000..464289fdbd --- /dev/null +++ b/keyboards/satan/satan.h @@ -0,0 +1,42 @@ +#ifndef SATAN_H +#define SATAN_H + +#include "matrix.h" +#include "keymap.h" +#include <stddef.h> +#include "action_util.h" + +/* Clueboard matrix layout + * ,-----------------------------------------------------------. + * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | + * |-----------------------------------------------------------| + * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | + * |-----------------------------------------------------------| + * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | + * |-----------------------------------------------------------| + * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | + * |-----------------------------------------------------------| + * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | + * `-----------------------------------------------------------' + */ +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define KEYMAP( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ + k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ +) \ +{ \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, k2d}, \ + {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d}, \ + {k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d} \ +} + +void matrix_init_user(void); +void matrix_scan_user(void); + +#endif |