Merge branch 'unimap'
authortmk <hasu@tmk-kbd.com>
Tue, 30 Aug 2016 02:22:14 +0000 (11:22 +0900)
committertmk <hasu@tmk-kbd.com>
Tue, 30 Aug 2016 02:22:14 +0000 (11:22 +0900)
142 files changed:
README.md
converter/adb_usb/Makefile
converter/adb_usb/Makefile.rev1
converter/adb_usb/Makefile.teensy
converter/adb_usb/Makefile.unimap [new file with mode: 0644]
converter/adb_usb/README.md
converter/adb_usb/binary/adb_usb_rev1_unimap.hex [new file with mode: 0644]
converter/adb_usb/binary/adb_usb_rev2_unimap.hex [new file with mode: 0644]
converter/adb_usb/config.h
converter/adb_usb/keymap_ansi.c
converter/adb_usb/keymap_common.c [deleted file]
converter/adb_usb/keymap_common.h
converter/adb_usb/keymap_hasu.c
converter/adb_usb/keymap_iso.c
converter/adb_usb/keymap_plain.c
converter/adb_usb/unimap_common.h [new file with mode: 0644]
converter/adb_usb/unimap_plain.c [new file with mode: 0644]
converter/ibm4704_usb/Makefile
converter/ibm4704_usb/keymap_50key.c
converter/ibm4704_usb/keymap_alps102key.c
converter/ibm4704_usb/keymap_common.c [deleted file]
converter/ibm4704_usb/keymap_common.h
converter/ibm4704_usb/keymap_hasu.c
converter/ibm4704_usb/keymap_plain.c
converter/m0110_usb/Makefile
converter/m0110_usb/Makefile.teensy
converter/m0110_usb/Makefile.tmk_rev1
converter/m0110_usb/Makefile.tmk_rev2
converter/m0110_usb/keymap_common.c [deleted file]
converter/m0110_usb/keymap_common.h
converter/m0110_usb/keymap_default.c
converter/m0110_usb/keymap_hasu.c
converter/m0110_usb/keymap_intl.c
converter/m0110_usb/keymap_spacefn.c
converter/news_usb/keymap.c
converter/next_usb/keymap.c
converter/pc98_usb/keymap.c
converter/ps2_usb/Makefile
converter/ps2_usb/Makefile.mbed
converter/ps2_usb/Makefile.pjrc
converter/ps2_usb/Makefile.tmk_rev1
converter/ps2_usb/Makefile.tmk_rev2
converter/ps2_usb/Makefile.vusb
converter/ps2_usb/keymap_common.c [deleted file]
converter/ps2_usb/keymap_common.h
converter/ps2_usb/keymap_jis.c
converter/ps2_usb/keymap_plain.c
converter/ps2_usb/keymap_spacefn.c
converter/sun_usb/keymap.c
converter/sun_usb/keymap_sun3.c
converter/terminal_usb/keymap.c
converter/usb_usb/Makefile
converter/usb_usb/keymap.c
converter/usb_usb/keymap_common.c [deleted file]
converter/usb_usb/keymap_common.h
converter/usb_usb/keymap_editor.c
converter/usb_usb/keymap_hasu.c
converter/usb_usb/keymap_iso.c
converter/usb_usb/keymap_jis.c
converter/usb_usb/keymap_spacefn.c
converter/x68k_usb/keymap.c
converter/xt_usb/Makefile
converter/xt_usb/keymap_common.c [deleted file]
converter/xt_usb/keymap_common.h
converter/xt_usb/keymap_jis.c
converter/xt_usb/keymap_plain.c
converter/xt_usb/keymap_spacefn.c
keyboard/alps64/Makefile
keyboard/alps64/actionmap_hasu.c
keyboard/alps64/actionmap_plain.c
keyboard/alps64/keymap_common.c [deleted file]
keyboard/alps64/keymap_common.h
keyboard/alps64/keymap_editor.c
keyboard/alps64/keymap_hasu.c
keyboard/alps64/keymap_plain.c
keyboard/gh60/Makefile
keyboard/gh60/keymap_common.c [deleted file]
keyboard/gh60/keymap_common.h
keyboard/gh60/keymap_hasu.c
keyboard/gh60/keymap_hhkb.c
keyboard/gh60/keymap_plain.c
keyboard/gh60/keymap_poker.c
keyboard/gh60/keymap_poker_bit.c
keyboard/gh60/keymap_poker_set.c
keyboard/gh60/keymap_spacefn.c
keyboard/hhkb/Makefile
keyboard/hhkb/Makefile.pjrc
keyboard/hhkb/Makefile.rn42
keyboard/hhkb/Makefile.unimap.jp [new file with mode: 0644]
keyboard/hhkb/hhkb_jp_unimap.hex [new file with mode: 0644]
keyboard/hhkb/keymap_common.c [deleted file]
keyboard/hhkb/keymap_common.h
keyboard/hhkb/keymap_hasu.c
keyboard/hhkb/keymap_hhkb.c
keyboard/hhkb/keymap_jp.c
keyboard/hhkb/keymap_spacefn.c
keyboard/hhkb/unimap_common.h [new file with mode: 0644]
keyboard/hhkb/unimap_jp.c [new file with mode: 0644]
keyboard/infinity/Makefile
keyboard/infinity/keymap.c
keyboard/infinity/keymap_common.c [deleted file]
keyboard/infinity/keymap_common.h
keyboard/infinity_chibios/Makefile
keyboard/infinity_chibios/keymap_common.c [deleted file]
keyboard/infinity_chibios/keymap_common.h
keyboard/infinity_chibios/keymap_hasu.c
keyboard/infinity_chibios/keymap_plain.c
keyboard/onekey/keymap.c
keyboard/stm32_f072_onekey/keymap_plain.c
keyboard/stm32_f103_onekey/keymap_plain.c
keyboard/teensy_lc_onekey/keymap_plain.c
orphan/ghost_squid/keymap_ansi.h
orphan/hid_liber/keymap_alaricljs.h
orphan/hid_liber/keymap_ansi.h
orphan/hid_liber/keymap_custom.h
orphan/hid_liber/keymap_iso.h
orphan/kitten_paw/keymap_ansi.h
orphan/kmac/keymap_winkey.h
orphan/kmac/keymap_winkeyless.h
orphan/lightpad/keymap_lightpad.h
orphan/lightsaber/keymap_winkey.h
orphan/nerd/keymap_60_ansi150.c
orphan/nerd/keymap_80_ansi150.c
orphan/nerd/keymap_common.h
orphan/phantom/keymap_7bit.h
orphan/phantom/keymap_ansi.h
orphan/phantom/keymap_ansi_150.h
orphan/phantom/keymap_iso.h
orphan/phantom/keymap_iso_150.h
orphan/serialmouse_usb/keymap_common.h
orphan/terminal_bluefruit/keymap.c
tmk_core/README.md
tmk_core/common.mk
tmk_core/common/action_code.h
tmk_core/common/action_layer.c
tmk_core/common/actionmap.c
tmk_core/common/actionmap.h
tmk_core/common/keymap.c
tmk_core/common/unimap.c [new file with mode: 0644]
tmk_core/common/unimap.h [new file with mode: 0644]
tmk_core/doc/keymap.md
tmk_core/doc/unimap.txt [new file with mode: 0644]

index 49992fcccccfaffc341f520f7ae526846f97f356..68e92b468eb0294aad5080096404489930e967ef 100644 (file)
--- a/README.md
+++ b/README.md
@@ -7,6 +7,10 @@ The latest source code is available here: <http://github.com/tmk/tmk_keyboard>
 
 Updates
 -------
+#### 2016/06/26
+Keymap framework was updated. `fn_actions[]` should be defined as `action_t` instead of `uint16_t`. And default code for keymap handling is now included in core you just need define `uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]` and `action_t fn_actions[]`.
+
+
 #### 2016/06/22
 Some projects were moved from `converter` and `keyboard` to `orphan` directory. Those might be removed in some future but you will be able to access them with `orphans` tag. See <https://github.com/tmk/tmk_keyboard/issues/173>
 
index 76e10950c0c70826c239a013cc1f791672823247..14fc181ba96fa194a50cf4fbaa62d595e4de94c9 100644 (file)
@@ -1,64 +1,17 @@
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device.
-#                Please customize your programmer settings(PROGRAM_CMD)
-#
-# make teensy = Download the hex file to the device, using teensy_loader_cli.
-#               (must have teensy_loader_cli installed).
-#
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-#            have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-#             have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-#               (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-#                (must have Atmel FLIP installed).
-#
-# make debug = Start either simulavr or avarice as specified for debugging, 
-#              with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-#                   bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
 # Target file name (without extension).
-TARGET = adb_usb_lufa
+TARGET ?= adb_usb
 
 # Directory common source filess exist
-TMK_DIR = ../../tmk_core
+TMK_DIR ?= ../../tmk_core
 
 # Directory keyboard dependent files exist
-TARGET_DIR = .
+TARGET_DIR ?= .
 
 # project specific files
-SRC =  keymap_common.c \
-       matrix.c \
+SRC ?= matrix.c \
        led.c \
        adb.c
 
-ifdef KEYMAP
-    SRC := keymap_$(KEYMAP).c $(SRC)
-else
-    SRC := keymap_plain.c $(SRC)
-endif
-
 CONFIG_H = config.h
 
 
@@ -66,7 +19,7 @@ CONFIG_H = config.h
 # atmega32u4   Teensy2.0
 # atemga32u4   TMK Converter rev.1
 # atemga32u2   TMK Converter rev.2
-MCU = atmega32u2
+MCU ?= atmega32u2
 
 # Processor frequency.
 #     This will define a symbol, F_CPU, in all source code files equal to the
@@ -79,14 +32,14 @@ MCU = atmega32u2
 #     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
+F_CPU ?= 16000000
 
 
 #
 # LUFA specific
 #
 # Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
+ARCH ?= AVR8
 
 # Input clock frequency.
 #     This will define a symbol, F_USB, in all source code files equal to the
@@ -99,7 +52,7 @@ ARCH = AVR8
 #
 #     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)
+F_USB ?= $(F_CPU)
 
 # Interrupt driven control endpoint task(+60)
 OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
@@ -125,6 +78,9 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration
 #SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 #NKRO_ENABLE = yes     # USB Nkey Rollover
 ADB_MOUSE_ENABLE = yes
+#UNIMAP_ENABLE = yes
+#ACTIONMAP_ENABLE = yes         # Use 16bit actionmap instead of 8bit keymap
+#KEYMAP_SECTION_ENABLE = yes   # fixed address keymap for keymap editor
 
 # ADB Mice need acceleration for todays much bigger screens. 
 OPT_DEFS += -DADB_MOUSE_MAXACC=8
@@ -133,6 +89,26 @@ OPT_DEFS += -DADB_MOUSE_MAXACC=8
 # Optimize size but this may cause error "relocation truncated to fit"
 #EXTRALDFLAGS = -Wl,--relax
 
+
+#
+# Keymap file
+#
+ifdef UNIMAP_ENABLE
+    KEYMAP_FILE = unimap
+else
+    ifdef ACTIONMAP_ENABLE
+       KEYMAP_FILE = actionmap
+    else
+       KEYMAP_FILE = keymap
+    endif
+endif
+ifdef KEYMAP
+    SRC := $(KEYMAP_FILE)_$(KEYMAP).c $(SRC)
+else
+    SRC := $(KEYMAP_FILE)_plain.c $(SRC)
+endif
+
+
 # Search Path
 VPATH += $(TARGET_DIR)
 VPATH += $(TMK_DIR)
index 1cd539b6e6d822363b20dab4051ca7fee38b5481..caddb6079c7becc6e0de0491389c0e2cf8e91c64 100644 (file)
@@ -1,143 +1,3 @@
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device.
-#                Please customize your programmer settings(PROGRAM_CMD)
-#
-# make teensy = Download the hex file to the device, using teensy_loader_cli.
-#               (must have teensy_loader_cli installed).
-#
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-#            have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-#             have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-#               (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-#                (must have Atmel FLIP installed).
-#
-# make debug = Start either simulavr or avarice as specified for debugging, 
-#              with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-#                   bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
-# Target file name (without extension).
-TARGET = adb_usb_lufa
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# project specific files
-SRC =  keymap_common.c \
-       matrix.c \
-       led.c \
-       adb.c
-
-ifdef KEYMAP
-    SRC := keymap_$(KEYMAP).c $(SRC)
-else
-    SRC := keymap_ansi.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name
-# atmega32u4   Teensy2.0
-# atemga32u4   TMK Converter rev.1
-# atemga32u2   TMK Converter rev.2
+TARGET = adb_usb_rev1
 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      for TMK Converter rev.1/rev.2
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes  # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
-CONSOLE_ENABLE = yes   # Console for debug(+400)
-COMMAND_ENABLE = yes    # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
-#NKRO_ENABLE = yes     # USB Nkey Rollover
-ADB_MOUSE_ENABLE = yes
-
-# ADB Mice need acceleration for todays much bigger screens. 
-OPT_DEFS += -DADB_MOUSE_MAXACC=8
-
-
-# Optimize size but this may cause error "relocation truncated to fit"
-#EXTRALDFLAGS = -Wl,--relax
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
+include Makefile
index d97f0eb33d6f9e2c8f18d1d3fa92cc680bcbdb18..604e3642c9d359451139f6d4ee99b183d66bf0a9 100644 (file)
@@ -1,143 +1,3 @@
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device.
-#                Please customize your programmer settings(PROGRAM_CMD)
-#
-# make teensy = Download the hex file to the device, using teensy_loader_cli.
-#               (must have teensy_loader_cli installed).
-#
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-#            have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-#             have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-#               (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-#                (must have Atmel FLIP installed).
-#
-# make debug = Start either simulavr or avarice as specified for debugging, 
-#              with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-#                   bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
-# Target file name (without extension).
-TARGET = adb_usb_lufa
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# project specific files
-SRC =  keymap_common.c \
-       matrix.c \
-       led.c \
-       adb.c
-
-ifdef KEYMAP
-    SRC := keymap_$(KEYMAP).c $(SRC)
-else
-    SRC := keymap_ansi.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name
-# atmega32u4   Teensy2.0
-# atemga32u4   TMK Converter rev.1
-# atemga32u2   TMK Converter rev.2
+TARGET = adb_usb_teensy
 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      for TMK Converter rev.1/rev.2
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-#   comment out to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes  # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
-CONSOLE_ENABLE = yes   # Console for debug(+400)
-COMMAND_ENABLE = yes    # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
-#NKRO_ENABLE = yes     # USB Nkey Rollover
-ADB_MOUSE_ENABLE = yes
-
-# ADB Mice need acceleration for todays much bigger screens. 
-OPT_DEFS += -DADB_MOUSE_MAXACC=8
-
-
-# Optimize size but this may cause error "relocation truncated to fit"
-#EXTRALDFLAGS = -Wl,--relax
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
+include Makefile
diff --git a/converter/adb_usb/Makefile.unimap b/converter/adb_usb/Makefile.unimap
new file mode 100644 (file)
index 0000000..70ecf3d
--- /dev/null
@@ -0,0 +1,4 @@
+TARGET = adb_usb_unimap
+UNIMAP_ENABLE = yes
+KEYMAP_SECTION_ENABLE = yes
+include Makefile
index 034540c9d78e2892bfddbd43b801b05ea42e8859..2240d023b8746c73077a0f0db09bae5261c8eec7 100644 (file)
@@ -1,10 +1,10 @@
 ADB to USB keyboard converter
 =============================
-This firmware converts Apple ADB keyboard protocol to USB. You can use TMK Converter, PJRC Teensy2.0 and other USB AVR MCU(ATMega32U4, AT90USB64/128 or etc) for this. But binary size is probably more than 10KB and it won't fit into 8K flash.
+This firmware converts Apple ADB keyboard protocol to USB, you can use it to plug old ADB keyboard into modern computer. It works on TMK ADB-USB Converter, PJRC Teensy2.0 and other USB AVR MCU(ATMega32U4, AT90USB64/128 or etc) and needs more than 10KB flash at least.
 
-Discuss: http://geekhack.org/showwiki.php?title=Island:14290
+Discuss here: http://geekhack.org/showwiki.php?title=Island:14290
 
-TMK Converter: https://geekhack.org/index.php?topic=72052.0
+You can buy a TMK converter here: https://geekhack.org/index.php?topic=72052.0
 
 
 
diff --git a/converter/adb_usb/binary/adb_usb_rev1_unimap.hex b/converter/adb_usb/binary/adb_usb_rev1_unimap.hex
new file mode 100644 (file)
index 0000000..d99fd95
--- /dev/null
@@ -0,0 +1,1287 @@
+:100000000C945B050C94A2050C94A2050C94A2051B\r
+:100010000C94A2050C94A2050C94A2050C94A205C4\r
+:100020000C94A2050C94A2050C94AB0F0C947D10BB\r
+:100030000C942B1E0C94A2050C94A2050C94A20502\r
+:100040000C94A2050C94A2050C94A2050C94A20594\r
+:100050000C94A2050C949F1E0C94A2050C94A2056E\r
+:100060000C94A2050C94A2050C94A2050C94A20574\r
+:100070000C94A2050C94A2050C94A2050C94A20564\r
+:100080000C94A2050C94A2050C94A2050C94A20554\r
+:100090000C94A2050C94A2050C94A2050C94A20544\r
+:1000A0000C94A2050C94A2050C94A205EA100C1164\r
+:1000B000FA110C11FA1151117411FA11C911DC1154\r
+:1000C0001A151A1547154715A215DE15D617D61796\r
+:1000D000F615D617F116F116AC17D617D617C217A4\r
+:1000E000041607090B0A1D1B06196405141A0815C6\r
+:1000F0001C171E1F202123222E26242D25273012D7\r
+:10010000182F0C13280F0D340E33313638111037D9\r
+:100110002B2C352A5829787B79397A504F515272D5\r
+:100120006C63685680668053020103555880576D92\r
+:100130006E5462595A5B5C5D5E5F6F606174756698\r
+:100140003E3F403C4142774476466B47804365459D\r
+:100150008048494A4B4C3D4D3B4E3A7D7E7C7F73F7\r
+:100160000A0025303862003A2000253032580072EB\r
+:100170002F632030313233343536370A0061646200\r
+:100180005F686F73745F6B62645F726563763A2059\r
+:100190004552524F52282564290A000A002530345E\r
+:1001A00058006164625F686F73745F6B62645F7252\r
+:1001B0006563763A20004552524F523A206D65648D\r
+:1001C0006961206B6579300A004552524F523A20DE\r
+:1001D0006D65646961206B6579310A005D0A0025EF\r
+:1001E000640020002564007C002530325800200087\r
+:1001F00025303258006164625F6D6F7573652072DF\r
+:1002000061773A205B000A00253031366200616474\r
+:10021000625F686F73745F6D6F7573655F7265633E\r
+:10022000763A2000646562756720656E61626C6570\r
+:10023000642E0A005363616E3A20616464723A2549\r
+:10024000642C20726567333A253034580A004166C1\r
+:1002500074657220696E69743A0A00466F756E643F\r
+:100260003A206D65646961206B6579730A00536398\r
+:10027000616E3A20616464723A25642C207265676D\r
+:10028000333A253034580A004265666F726520693A\r
+:100290006E69743A0A005B735D004B6579626F6149\r
+:1002A00072642073746172742E0A00555342206385\r
+:1002B0006F6E666967757265642E0A005B575D0034\r
+:1002C0005B535D005B525D005B445D005B435D0022\r
+:1002D0002E0341004400420020006B0065007900BD\r
+:1002E00062006F00610072006400200063006F0014\r
+:1002F0006E007600650072007400650072000000F8\r
+:100300000E0374002E006D002E006B002E00000006\r
+:100310000403090409027400040100A03209040066\r
+:100320000001030101000921110100012240000721\r
+:1003300005810308000A0904010001030102000904\r
+:100340002111010001224D000705820308000A095E\r
+:1003500004020001030000000921110100012236FE\r
+:10036000000705830308000A0904030002030000D4\r
+:100370000009211101000122220007058403200049\r
+:10038000010705040320000112011001000000080C\r
+:10039000EDFEDB0A0101010200010631FF0974A133\r
+:1003A000010975150026FF00952075088102097660\r
+:1003B000150026FF00952075089102C005010980EF\r
+:1003C000A101850216010026B7001A01002AB70014\r
+:1003D000751095018100C0050C0901A10185031666\r
+:1003E0000100269C021A01002A9C027510950181C9\r
+:1003F00000C005010902A1010901A10005091901B7\r
+:1004000029051500250195057501810295017503E2\r
+:1004100081010501093009311581257F9502750893\r
+:10042000810609381581257F950175088106050C1F\r
+:100430000A38021581257F950175088106C0C0051F\r
+:10044000010906A101050719E029E7150025019515\r
+:1004500008750181029501750881010508190129B6\r
+:10046000059505750191029501750391010507191F\r
+:100470000029FF150026FF00950675088100C00AB7\r
+:10048000002530325820006B6579626F6172645FBD\r
+:100490007265706F72743A20004C45443A202530E2\r
+:1004A00032580A00290A002575002F002575005DC5\r
+:1004B0002800256400200025640020002564002019\r
+:1004C000002564007C0025303258006D6F7573651F\r
+:1004D0006B6579205B62746E7C7820792076206869\r
+:1004E0005D287265702F61636C293A205B006D6B2B\r
+:1004F0005F776865656C5F74696D655F746F5F6D6C\r
+:100500006178203D2025640A006D6B5F7768656522\r
+:100510006C5F6D61785F7370656564203D20256454\r
+:100520000A006D6B5F74696D655F746F5F6D6178F4\r
+:10053000203D2025640A006D6B5F6D61785F7370EC\r
+:10054000656564203D2025640A006D6B5F696E74EB\r
+:10055000657276616C203D2025640A006D6B5F64D6\r
+:10056000656C6179203D2025640A006D6B5F7768BA\r
+:1005700065656C5F74696D655F746F5F6D61782030\r
+:100580003D2025640A006D6B5F776865656C5F6D63\r
+:1005900061785F7370656564203D2025640A006D95\r
+:1005A0006B5F74696D655F746F5F6D6178203D206E\r
+:1005B00025640A006D6B5F6D61785F7370656564BB\r
+:1005C000203D2025640A006D6B5F696E746572764C\r
+:1005D000616C203D2025640A006D6B5F64656C6171\r
+:1005E00079203D2025640A000A00257500363A204E\r
+:1005F000776865656C5F74696D655F746F5F6D6169\r
+:10060000783A20000A00257500353A20776865653C\r
+:100610006C5F6D61785F73706565643A20000A00F5\r
+:10062000257500343A2074696D655F746F5F6D6184\r
+:10063000783A20000A00257500333A206D61785F12\r
+:1006400073706565643A20000A00257500323A200F\r
+:10065000696E74657276616C286D73293A20000AA0\r
+:1006600000257500313A2064656C6179282A3130A3\r
+:100670006D73293A20000A092D2056616C75657347\r
+:10068000202D0A004D3E004D25643E20003F0073A2\r
+:1006900065742064656661756C740A00433E2000D1\r
+:1006A00077686572652064656C74613A2063757261\r
+:1006B000736F723D25642C20776865656C3D2564F9\r
+:1006C0000A53656520687474703A2F2F656E2E7713\r
+:1006D000696B6970656469612E6F72672F77696BEA\r
+:1006E000692F4D6F7573655F6B6579730A000A0931\r
+:1006F0002D204D6F7573656B6579202D0A45534329\r
+:100700002F713A09717569740A313A0964656C612F\r
+:1007100079282A31306D73290A323A09696E746575\r
+:100720007276616C286D73290A333A096D61785FBE\r
+:1007300073706565640A343A0974696D655F746F36\r
+:100740005F6D61780A353A09776865656C5F6D6140\r
+:10075000785F73706565640A363A09776865656C19\r
+:100760005F74696D655F746F5F6D61780A0A703AD6\r
+:10077000097072696E742076616C7565730A643AEB\r
+:10078000097365742064656661756C74730A7570AD\r
+:100790003A092B310A646F776E3A092D310A706776\r
+:1007A00075703A092B31300A7067646F776E3A09B9\r
+:1007B0002D31300A0A7370656564203D2064656CD4\r
+:1007C0007461202A206D61785F7370656564202AEA\r
+:1007D0002028726570656174202F2074696D655FD3\r
+:1007E000746F5F6D6178290A003F004D3E20004321\r
+:1007F0003E20004C25640A000A092D20436F6E73C9\r
+:100800006F6C65202D0A4553432F713A0971756944\r
+:10081000740A6D3A096D6F7573656B65790A000A24\r
+:10082000092D204D61676963202D0A643A096465CA\r
+:100830006275670A783A096465627567206D61744C\r
+:100840007269780A6B3A096465627567206B65792D\r
+:10085000626F6172640A6D3A096465627567206D42\r
+:100860006F7573650A763A0976657273696F6E0AF9\r
+:10087000733A097374617475730A633A09636F6E2E\r
+:10088000736F6C65206D6F64650A302D343A096CA6\r
+:1008900061796572302D34284631302D4634290A6D\r
+:1008A000506175733A09626F6F746C6F6164657241\r
+:1008B0000A003F0074696D65725F7265616433326E\r
+:1008C00028293A202530346C580A006B6579626F0C\r
+:1008D0006172645F69646C653A2025580A006B6533\r
+:1008E00079626F6172645F70726F746F636F6C3A7C\r
+:1008F0002025580A00686F73745F6B6579626F61B9\r
+:1009000072645F6C65647328293A2025580A000ACE\r
+:10091000092D20537461747573202D0A00474343D9\r
+:100920003A20342E392E32204156522D4C49424322\r
+:100930003A20312E382E3073766E204156525F4168\r
+:100940005243483A20617672350A004F5054494F5D\r
+:100950004E533A204C554641204D4F5553454B453B\r
+:10096000592045585452414B455920434F4E534FFF\r
+:100970004C4520434F4D4D414E44204B45594D4130\r
+:10098000505F53454354494F4E20343039360A00A6\r
+:100990004255494C443A20633634616436322D6402\r
+:1009A00069727479202831313A31353A3130204139\r
+:1009B00075672033302032303136290A00564944D9\r
+:1009C0003A2030784645454428742E6D2E6B2E29EA\r
+:1009D000205049443A203078304144422841444232\r
+:1009E000206B6579626F61726420636F6E766572E9\r
+:1009F00074657229205645523A20307830313031B2\r
+:100A00000A00444553433A20636F6E766572742042\r
+:100A1000414442206B6579626F61726420746F207B\r
+:100A20005553420A000A092D2056657273696F6E8C\r
+:100A3000202D0A000A6D6F7573653A206F66660A8D\r
+:100A4000000A6D6F7573653A206F6E0A000A6B6558\r
+:100A500079626F6172643A206F66660A000A6B659C\r
+:100A600079626F6172643A206F6E0A000A6D617478\r
+:100A70007269783A206F66660A000A6D617472695D\r
+:100A8000783A206F6E0A000A64656275673A206FD3\r
+:100A90006E0A000A64656275673A206F66660A002E\r
+:100AA0000A0A626F6F746C6F616465722E2E2E205D\r
+:100AB00000433E20000011241FBECFEFDAE0DEBF6E\r
+:100AC000CDBF04B603FE27C08091DC019091DD010B\r
+:100AD000A091DE01B091DF018730904BA740B04B71\r
+:100AE000D1F41092DC011092DD011092DE0110921F\r
+:100AF000DF0114BE84B7877F84BF0FB6F894A89532\r
+:100B000080916000886180936000109260000FBE49\r
+:100B1000E0E0F8E3099511E0A0E0B1E0E4E1FEE4F3\r
+:100B200002C005900D92A433B107D9F721E0A4E3E8\r
+:100B3000B1E001C01D92AC3DB207E1F70E94DA0CB2\r
+:100B40000C9408270C940000FF93EF93E09134017C\r
+:100B5000F0913501309709F00995EF91FF910895D3\r
+:100B6000FC018591803011F0EFDFFBCF0895FF2766\r
+:100B7000E0E230E247FF0CC0419597FF09C0EDE28B\r
+:100B80006095709580959095611D711D811D911DD9\r
+:100B900027FF02C0219530E350E2AA27660F771F96\r
+:100BA000881F991FAA1FA41710F0A41B63955A95BC\r
+:100BB000A9F7AA3008F0A95FA05DAF93F39561157E\r
+:100BC00071058105910541F7ED3211F4EF93F3952D\r
+:100BD000F21718F43F93F395FBCF8F91B5DFFA9599\r
+:100BE000E1F70895E991F9918591803021F08532FE\r
+:100BF00019F0AADFF9CF089520E0E8945591553215\r
+:100C0000C1F3503311F4689455915A3348F450535A\r
+:100C100090F3220F022E220F220F200D250FF4CF6A\r
+:100C20000EF4219589919991533619F3533729F18F\r
+:100C3000533559F1BC0188279927E8945C3621F493\r
+:100C40008991999168945591543639F446EF7EF024\r
+:100C500077FF0DC08FEF9FEF0AC055374AE039F09C\r
+:100C6000583540E121F0523642E009F00895FF93F3\r
+:100C7000EF937DDFEF91FF91B7CFFF93EF93FC01EF\r
+:100C800081918030B9F360DFFBCFFF93EF9368DF92\r
+:100C9000F1CFDF93CF93CDB7DEB72596A3DFCF910A\r
+:100CA000DF910895282F2770E82FE695E695E695C1\r
+:100CB000EF70F0E0E95CFE4F87FF0AC081E090E052\r
+:100CC00001C0880F2A95EAF780959081892308C092\r
+:100CD00081E090E001C0880F2A95EAF79081892B86\r
+:100CE000808381E080934C0108950F931F93CF93ED\r
+:100CF000DF93569A5E9A0E94BE092FEF87EA91E62B\r
+:100D0000215080409040E1F700C0000088E892E068\r
+:100D10009F938F930E9449060F900F90C1E0D0E0FF\r
+:100D20000EE612E063E08C2F0E94C209009771F07A\r
+:100D30009F938F93DF93CF931F930F930E94490646\r
+:100D40000F900F900F900F900F900F909FEF29EF43\r
+:100D500080E0915020408040E1F700C000002196E3\r
+:100D6000C031D105F9F663E082E00E94C209813109\r
+:100D7000910511F170F487309105F1F020F404979A\r
+:100D80000297F0F419C089309105B1F00D97C1F4C4\r
+:100D900013C08D31910581F030F48431910561F0FB\r
+:100DA000499771F409C0843C910531F0873C910565\r
+:100DB00019F0813C910521F481E080934D0102C03E\r
+:100DC00010924D0163E087E00E94C20991E08230F9\r
+:100DD00009F090E090934E01992341F08BE592E069\r
+:100DE0009F938F930E9449060F900F9023E042E05B\r
+:100DF00063E082E00E94420A8EE492E09F938F9328\r
+:100E00000E9449060F900F90C1E0D0E004E312E089\r
+:100E100063E08C2F0E94C209009771F09F938F931B\r
+:100E2000DF93CF931F930F930E9449060F900F906B\r
+:100E30000F900F900F900F908FEF99EF20E081505F\r
+:100E400090402040E1F700C000002196C031D1055C\r
+:100E5000F9F6E7E3F1E080E18E0F11928E13FDCFFA\r
+:100E60008091BE0181608093BE0184E292E00E9485\r
+:100E7000B005569A5E98DF91CF911F910F9108951A\r
+:100E8000CF93DF938FE79BEB0197F1F700C0000052\r
+:100E90000E943E0AEC01009711F481E0C3C097FD67\r
+:100EA00005C080914701816080934701D7FF05C04D\r
+:100EB000809147018E7F809347012D2F33272F7319\r
+:100EC0003327BE016F737727C6FF02C060547109D4\r
+:100ED000D6FF02C02054310940913601042E000C87\r
+:100EE000550B649FC001659F900D749F900D112458\r
+:100EF00081386FEF960714F481E89FEF9195819503\r
+:100F0000910981386FEF960714F481E89FEF81957E\r
+:100F100080934801249FC001259F900D349F900D20\r
+:100F2000112481382FEF920714F481E89FEF9195F7\r
+:100F30008195910981386FEF960714F481E89FEF4E\r
+:100F40008195809349018091BE0183FF60C08EE04E\r
+:100F500092E00E94B005DF93CF9388E092E09F93E8\r
+:100F60008F930E94490686E092E00E94B00585EFCB\r
+:100F700091E00E94B00580913601282F082E000CC8\r
+:100F8000330B3F938F9380EF91E09F938F930E9459\r
+:100F900049068EEE91E00E94B005809147011F92B4\r
+:100FA0008F9389EE91E09F938F930E94490687EE7D\r
+:100FB00091E00E94B00580914801282F082E000C76\r
+:100FC000330B3F938F9384EE91E09F938F930E9416\r
+:100FD000490682EE91E00E94B00580914901282FD8\r
+:100FE000082E000C330B3F938F938FED91E09F936E\r
+:100FF0008F930E9449068CED91E00E94B0058DB759\r
+:101000009EB744960FB6F8949EBF0FBE8DBF87E47F\r
+:1010100091E00E946C128091360191E088300CF0D2\r
+:1010200090E0890F80933601DF91CF9108951F934F\r
+:10103000CF93DF9310924C01C0910001D091010138\r
+:101040008FEF9FEF9093010180930001CF3F8FEFCF\r
+:10105000D80709F06AC08FE79BEB0197F1F700C052\r
+:10106000000082E00E943B0AEC01892B09F05DC080\r
+:1010700080914E01882309F458C087E00E943B0A02\r
+:10108000009709F452C09C012F7733272230310595\r
+:10109000A1F048F42115310569F02130310599F4AA\r
+:1010A00080788A641AC02330310551F02F3731051A\r
+:1010B000A1F009C08078826410C0807889640DC076\r
+:1010C000807888640AC089EC91E09F938F930E9496\r
+:1010D00049060F900F9081E18FC0292F33272F777A\r
+:1010E00033272130310579F050F02230310579F085\r
+:1010F0002330310581F4EC01D078D86416C0EC01BE\r
+:10110000D078D26412C0EC01D078DA640EC0EC0161\r
+:10111000D078D9640AC086EB91E09F938F930E94A8\r
+:1011200049060F900F9080E167C08091BE0181FF5A\r
+:1011300018C0209709F45DC082EA91E00E94B005D2\r
+:10114000DF93CF938DE991E09F938F930E9449069F\r
+:101150008BE991E00E94B0050F900F900F900F90D7\r
+:1011600003C0209709F445C0CF379FE7D90711F492\r
+:101170008FE705C0CF3F8FEFD80721F48FEF0E9494\r
+:10118000520639C02D2F3327822F1C2F2F3F3105B8\r
+:1011900081F4DF93CF938DE791E09F938F930E942B\r
+:1011A00049060E9475060F900F900F900F908C2F9C\r
+:1011B00023C090914D01992381F0A9014F775527C4\r
+:1011C0004233510521F42078822F8A6006C04A30CC\r
+:1011D000510519F42078822F82630E9452061F3F26\r
+:1011E00051F0DC2FCC27CF6FD0930101C0930001C9\r
+:1011F00002C080E001C081E0DF91CF911F9108958E\r
+:10120000E82FF0E0E95CFE4F2081822F90E021E0A2\r
+:1012100030E002C0220F331F6A95E2F728233923FA\r
+:1012200081E0232B09F480E00895E82FF0E0E95CE9\r
+:10123000FE4F80810895CF92DF92EF92FF920F933D\r
+:101240001F93CF93DF938091BE0181FF35C08FE65E\r
+:1012500091E00E94B00587E3E82E81E0F82EC0E01F\r
+:10126000D0E09AE6C92E91E0D92E02E611E0DF9394\r
+:10127000CF93DF92CF920E94490687E691E00E94C9\r
+:10128000B005F70181917F010E94C01D1F928F93CD\r
+:101290001F930F930E94490680E691E00E94B005DB\r
+:1012A00021968DB79EB708960FB6F8949EBF0FBED5\r
+:1012B0008DBFC031D105D9F6DF91CF911F910F912C\r
+:1012C000FF90EF90DF90CF900895682F609582E0B7\r
+:1012D0000C947C0A509A83E091E00197F1F700C0EA\r
+:1012E000000050989AEB9A95F1F700C00895509A33\r
+:1012F0008AEB8A95F1F700C0509883E091E001975E\r
+:10130000F1F700C000000895EF92FF920F931F9332\r
+:10131000CF93DF93C0E0D0E090E8E92EF12C082FC6\r
+:1013200010E0C7010C2E02C0959587950A94E2F74C\r
+:1013300080239123892B19F00E94770902C00E9413\r
+:101340006A092196C830D10561F7DF91CF911F91CD\r
+:101350000F91FF90EF900895489B06C023E02A95D7\r
+:10136000F1F700000197C1F70895489906C023E0FE\r
+:101370002A95F1F700000197C1F708955898509801\r
+:1013800008950895CF92DF92EF92FF920F931F93EB\r
+:10139000CF93DF931F92CDB7DEB7182FF894509AF2\r
+:1013A00083EF9BE00197F1F700C0000069830E9482\r
+:1013B000770969816C6020E1129FC0011124862B9E\r
+:1013C0000E9484090E946A0984EF91E00E94B50995\r
+:1013D000892B21F4789482EE9FEF43C084EF91E053\r
+:1013E0000E94AC09009711F478943BC011E1C12C24\r
+:1013F000D12C02E882E890E00E94B5097C018823A4\r
+:1014000051F199270E94AC09882329F1CC0CDD1CED\r
+:10141000902F9E19E81A9E1518F46894C0F806C01B\r
+:10142000113121F478948CEE9FEF1BC0115011F70D\r
+:101430008FE591E00E94B509892B21F478948BEE19\r
+:101440009FEF0FC08BE590E00E94AC09892BB1F7AC\r
+:101450007894C60106C07894812F90E0919581958B\r
+:1014600091090F90DF91CF911F910F91FF90EF9015\r
+:10147000DF90CF90089560E00C94C20960E083E0B3\r
+:101480000C94C2091F93CF93DF9300D01F92CDB766\r
+:10149000DEB7182FF894509A83EF9BE00197F1F78D\r
+:1014A00000C000002B834A8369830E947709698109\r
+:1014B000686030E1139FC0011124862B0E948409CB\r
+:1014C0000E946A098FE193E00197F1F700C00000E4\r
+:1014D0000E9477094A81842F0E9484092B81822FE0\r
+:1014E0000E9484090E946A0978940F900F900F90CF\r
+:1014F000DF91CF911F910895262F277040E062E081\r
+:101500000C94420A80915A0108959FB7F894109262\r
+:1015100051019FBF9091D301943009F057C0909131\r
+:10152000E9009F703091EC00232F217030FD20E8FE\r
+:10153000922B24E02093E9002091EB0020FF43C090\r
+:101540002091EE0027FF3FC020914F01222321F080\r
+:101550002091E80025FF37C010924F0126E030911E\r
+:10156000E80035FD15C03091D301343061F530917C\r
+:10157000EB0035FD28C0215021F481E080934F011C\r
+:1015800022C0EFE9FFE03197F1F700C00000E7CF9C\r
+:101590008093F1008091E80085FD0AC08091E80009\r
+:1015A00080FFFCCF8091E8008E778093E80006C032\r
+:1015B0008FB7F89421E0209351018FBF9F709093D3\r
+:1015C000E90080E008959F709093E9008FEF0895FF\r
+:1015D000CF93DF9300D01F92CDB7DEB79C018091EF\r
+:1015E000D301843019F593E099833B832A83909348\r
+:1015F000E9008FEF9091E800815095FD06C095EDD0\r
+:101600009A95F1F700008111F5CF8091E80085FFF0\r
+:101610000DC040E050E063E070E0CE0101960E9412\r
+:101620009B0D8091E8008E778093E8000F900F90DB\r
+:101630000F90DF91CF910895CF93DF9300D01F9249\r
+:10164000CDB7DEB72091D301243021F522E02983E4\r
+:101650009B838A8383E08093E9008FEF9091E80079\r
+:10166000815095FD06C095ED9A95F1F70000811126\r
+:10167000F5CF8091E80085FF0DC040E050E063E0C9\r
+:1016800070E0CE0101960E949B0D8091E8008E775C\r
+:101690008093E8000F900F900F90DF91CF91089505\r
+:1016A0002091D3012430F1F422E02093E9002FEFC0\r
+:1016B0003091E800215035FD06C035ED3A95F1F73F\r
+:1016C00000002111F5CF2091E80025FF0BC040E07C\r
+:1016D00050E065E070E00E949B0D8091E8008E77FD\r
+:1016E0008093E8000895CF93DF932091D3012430B5\r
+:1016F00039F521E02093E9002FEF3091E8002150E7\r
+:1017000035FD06C035ED3A95F1F700002111F5CF12\r
+:101710002091E80025FF14C0EC0140E050E068E0B3\r
+:1017200070E00E949B0D8091E8008E778093E80026\r
+:1017300088E0FE01A2E5B1E001900D928A95E1F703\r
+:10174000DF91CF9108958CEC92E00E94B0058091DA\r
+:10175000D201811109C00E94300F0E948D0F80912B\r
+:10176000E20084608093E200089588EC92E00E9499\r
+:10177000B0051092D201089584EC92E00C94B0056B\r
+:10178000209150012F5F822F62E30E94CE26992381\r
+:1017900019F0209350010895109250018091510149\r
+:1017A000882371F18091D301843041F58091E90063\r
+:1017B0008F702091EC00922F917020FD90E8892B82\r
+:1017C00094E09093E9009091EB0090FF14C0909109\r
+:1017D000EE0097FF10C09091E80095FF03C01092B3\r
+:1017E000F100F9CF9091E80090FF05C09091E800DA\r
+:1017F0009E779093E8008F708093E90010925101DA\r
+:10180000089542E061EC81E00E94AA0E42E061ECA2\r
+:1018100082E00E94AA0E42E061EC83E00E94AA0EE0\r
+:1018200042E261EC84E00C94AA0E8091D5018330F1\r
+:1018300009F453C030F4813071F0823009F48CC067\r
+:1018400008958A3009F478C08B3009F45EC089307D\r
+:1018500009F09AC020C08091D401813A09F094C067\r
+:101860008091E800877F8093E8008091D801909173\r
+:10187000D901892B21F468E082E591E003C060E0A2\r
+:1018800080E090E070E00E94E60D8091E8008B77A8\r
+:101890008093E80008958091D401813209F074C0EA\r
+:1018A0008091D8019091D901892B09F06DC0809168\r
+:1018B000E800877F8093E8008091E80082FD05C002\r
+:1018C0008091D3018111F8CF5FC08091F1008093A6\r
+:1018D0005A018091E8008B7753C08091D401813AFE\r
+:1018E00009F052C08091D8019091D901892B09F05B\r
+:1018F0004BC08091E800877F8093E8008091E800EA\r
+:1019000080FFFCCF80910C0136C08091D4018132E0\r
+:10191000D9F58091D8019091D901892BA9F58091B1\r
+:10192000E800877F8093E8000E94DF0E8091D60157\r
+:1019300080930C010C94F7178091D401813221F52A\r
+:101940008091E800877F8093E8000E94DF0E8091FD\r
+:10195000D70180935B0108958091D401813AA1F46D\r
+:101960008091E800877F8093E8008091E80080FF05\r
+:10197000FCCF80915B018093F1008091E8008E772D\r
+:101980008093E8000C94DF0E08950895089508955B\r
+:1019900080EC92E00E94B0050C94C70C0E94EA1DF6\r
+:1019A0008091D101882329F00E94151E81110C9489\r
+:1019B000850D089584B7877F84BF0FB6F894A895E6\r
+:1019C00080916000886180936000109260000FBE7B\r
+:1019D00090E080E80FB6F8948093610090936100E6\r
+:1019E0000FBE0E94C50C0E94A4120E94300F0E94DC\r
+:1019F0008D0F8091E20084608093E20085E89AE098\r
+:101A00000E94BB1D78948091D3018430E1F78BEA6A\r
+:101A100092E00E94B0050E94A61282E091E00E942E\r
+:101A200012128AE992E00E94B0050E94C60C8091D1\r
+:101A3000D301853039F486E992E00E94B0050E9416\r
+:101A4000CE0CF5CF0E94AC12F2CF0C94291E8CEB79\r
+:101A500092E00E94B0050C94250D292F33272330E6\r
+:101A60003105C9F064F42130310581F022303105AF\r
+:101A700009F043C084E790E024E133E042C0213222\r
+:101A80003105F1F02232310541F137C082E190E0B9\r
+:101A900028E833E036C099278130910541F0823043\r
+:101AA000910541F0892B49F5E0E1F3E005C0E0E064\r
+:101AB000F3E002C0E0EDF2E0849190E09F0121C0EC\r
+:101AC0006430D8F4E62FF0E0EE0FFF1FEF5DFE4F1D\r
+:101AD0002081318189E090E014C0643070F470E0BE\r
+:101AE000FB01EE0FFF1FE75EFE4F20813181FB01FE\r
+:101AF000EB5EFE4F808190E004C080E090E020E04B\r
+:101B000030E0FA0131832083089580E189BD82E1CC\r
+:101B100089BD09B400FEFDCF8091D8008F7D8093F0\r
+:101B2000D8008091E00082608093E0008091E00026\r
+:101B300081FDFCCF0895CF92DF92EF92FF920F9339\r
+:101B40001F93CF93DF93EC018B016A010E94FE0E7D\r
+:101B5000811133C0C114D10439F0F6018081918123\r
+:101B6000081B190BC80FD91FE12CF12C0115110509\r
+:101B700019F18091E80085FD16C08091E8008E770C\r
+:101B80008093E800C114D10449F0F601808191816D\r
+:101B9000E80EF91EF182E08285E00FC00E94FE0E81\r
+:101BA000882321F30AC089918093F1000150110923\r
+:101BB000FFEFEF1AFF0ADACF80E0DF91CF911F919C\r
+:101BC0000F91FF90EF90DF90CF9008952091DA0170\r
+:101BD0003091DB012617370748F06115710539F49C\r
+:101BE0002091E8002E772093E80001C0B90140E081\r
+:101BF00061157105A9F12091D301222309F443C095\r
+:101C0000253009F442C02091E80023FD40C0209116\r
+:101C1000E80022FD32C02091E80020FFE9CF40918A\r
+:101C2000F3002091F20030E0342BFC01CF0161156C\r
+:101C3000710559F02830310540F481918093F1000D\r
+:101C4000615071092F5F3F4FF1CF41E028303105DE\r
+:101C500009F040E02091E8002E772093E800C8CFFB\r
+:101C60004111C9CF0AC08091D301882361F085302A\r
+:101C700061F08091E80083FD0AC08091E80082FF56\r
+:101C8000F2CF80E0089582E0089583E0089581E036\r
+:101C900008952091DA013091DB012617370748F0CB\r
+:101CA0006115710539F42091E8002E772093E80042\r
+:101CB00001C0B901FC0120E06115710591F180912D\r
+:101CC000D301882309F440C0853009F43FC08091D6\r
+:101CD000E80083FD3DC08091E80082FD2FC0809127\r
+:101CE000E80080FFE9CF2091F3008091F20090E0BE\r
+:101CF000922B6115710559F08830910540F42491BB\r
+:101D00002093F1003196615071090196F2CF21E0E4\r
+:101D1000089709F020E08091E8008E778093E80032\r
+:101D2000CBCF2111CCCF0AC08091D301882361F0A1\r
+:101D3000853061F08091E80083FD0AC08091E80061\r
+:101D400082FFF2CF80E0089582E0089583E0089555\r
+:101D500081E00895982F973058F59093E9009817EF\r
+:101D600039F07091EC002091ED005091F00003C02B\r
+:101D7000242F762F50E021FF19C03091EB003E7FD9\r
+:101D80003093EB003091ED003D7F3093ED003091CA\r
+:101D9000EB0031603093EB007093EC002093ED008A\r
+:101DA0005093F0002091EE0027FF07C09F5FD3CF34\r
+:101DB0008F708093E90081E0089580E0089580911C\r
+:101DC000D40187FF11C08091E80082FD05C0809199\r
+:101DD000D3018111F8CF11C08091E8008B770BC03F\r
+:101DE0008091D301882349F08091E80080FFF8CFEB\r
+:101DF0008091E8008E778093E80008952091E400B8\r
+:101E00003091E50095E64091EC00842F817040FF11\r
+:101E100022C08091E80080FD1CC08091D3018823FE\r
+:101E200091F0853091F08091EB0085FD10C04091DC\r
+:101E3000E4005091E5004217530729F39A019150AD\r
+:101E400011F784E0089582E0089583E0089581E029\r
+:101E5000089580E008954091E80042FFDECF0895A4\r
+:101E60000E949E0F0E94A60FE0EEF0E0808181604C\r
+:101E70008083E8EDF0E080818F77808319BCA7ED47\r
+:101E8000B0E08C918E7F8C9380818F7E80831092C6\r
+:101E9000D20108950F931F93CF93DF930E949E0F5B\r
+:101EA0000E94A60FC8EDD0E088818F778883888153\r
+:101EB0008068888388818F7D888319BC1092D301C4\r
+:101EC0001092CF011092D1011092D00100EE10E0DB\r
+:101ED000F80180818B7F808388818160888342E0E4\r
+:101EE00060E080E00E94AA0EE1EEF0E080818E7F4B\r
+:101EF0008083E2EEF0E08081816080838081886071\r
+:101F00008083F80180818E7F8083888180618883CF\r
+:101F1000DF91CF911F910F910895E8EDF0E080815E\r
+:101F20008F7E8083E7EDF0E080818160808384E0B4\r
+:101F300082BF81E08093D2010C944A0FE8EDF0E07B\r
+:101F400080818E7F80831092E20008951092DA00E3\r
+:101F50001092E10008951F920F920FB60F92112474\r
+:101F60002F933F934F935F936F937F938F939F93A1\r
+:101F7000AF93BF93EF93FF938091E10082FF0BC07B\r
+:101F80008091E20082FF07C08091E1008B7F809307\r
+:101F9000E1000E94C00B8091DA0080FF1FC0809199\r
+:101FA000D80080FF1BC08091DA008E7F8093DA001A\r
+:101FB0008091D90080FF0DC080E189BD82E189BD9B\r
+:101FC00009B400FEFDCF81E08093D3010E94A30BF2\r
+:101FD00005C019BC1092D3010E94B50B8091E1009D\r
+:101FE00080FF19C08091E20080FF15C08091E2005F\r
+:101FF0008E7F8093E2008091E20080618093E20016\r
+:102000008091D80080628093D80019BC85E08093CD\r
+:10201000D3010E94C80C8091E10084FF30C0809100\r
+:10202000E20084FF2CC080E189BD82E189BD09B452\r
+:1020300000FEFDCF8091D8008F7D8093D8008091E5\r
+:10204000E1008F7E8093E1008091E2008F7E80939B\r
+:10205000E2008091E20081608093E2008091CF01F4\r
+:10206000882311F084E007C08091E30087FD02C05F\r
+:1020700081E001C083E08093D3010E94270D80910D\r
+:10208000E10083FF29C08091E20083FF25C0809199\r
+:10209000E100877F8093E10082E08093D30110927A\r
+:1020A000CF018091E1008E7F8093E1008091E2007A\r
+:1020B0008E7F8093E2008091E20080618093E20055\r
+:1020C00042E060E080E00E94AA0E8091F00088600B\r
+:1020D0008093F0000E94BC0BFF91EF91BF91AF91F4\r
+:1020E0009F918F917F916F915F914F913F912F9130\r
+:1020F0000F900FBE0F901F9018951F920F920FB662\r
+:102100000F9211242F933F934F935F936F937F937D\r
+:102110008F939F93AF93BF93CF93DF93EF93FF93EF\r
+:10212000C091E900CF708091EC00D82FD17080FD74\r
+:10213000D0E81092E9008091F000877F8093F00052\r
+:1021400078940E94C1101092E9008091F00088609C\r
+:102150008093F000CD2BCF70C093E900FF91EF91F9\r
+:10216000DF91CF91BF91AF919F918F917F916F91AF\r
+:102170005F914F913F912F910F900FBE0F901F9045\r
+:1021800018951F93CF93DF93CDB7DEB7AA970FB6FD\r
+:10219000F894DEBF0FBECDBFE4EDF1E088E08E0F16\r
+:1021A0009091F10091938E13FBCF0E94150C8091BA\r
+:1021B000E80083FF1FC18091D4019091D501492F80\r
+:1021C00050E04A30510508F015C1FA01EA5AFF4FB4\r
+:1021D0000C94EE26803881F0823809F00BC1809192\r
+:1021E000D8018F708093E9008091EB0085FB8827F0\r
+:1021F00080F91092E90006C08091D0019091D10140\r
+:10220000911182609091E800977F9093E80080930D\r
+:10221000F1001092F100C8C0282F2D7F09F0EAC00C\r
+:10222000882319F0823061F0E5C08091D6018130B9\r
+:1022300009F0E0C0933009F080E08093D1012BC019\r
+:102240008091D601811127C08091D8018F7009F447\r
+:10225000D1C08093E9002091EB0020FF1CC0933097\r
+:1022600021F48091EB00806214C09091EB009061AA\r
+:102270009093EB0021E030E0A90102C0440F551F0C\r
+:102280008A95E2F74093EA001092EA008091EB0011\r
+:1022900088608093EB001092E9008091E800877FCE\r
+:1022A00086C08111A7C01091D6011F778091E300ED\r
+:1022B0008078812B8093E3008091E800877F809372\r
+:1022C000E8000E94DF0E8091E80080FFFCCF809143\r
+:1022D000E30080688093E300111102C082E001C036\r
+:1022E00083E08093D30186C08058823008F082C09A\r
+:1022F0008091D6019091D7018C3D53E0950779F5F7\r
+:1023000083E08A838AE289834FB7F894DE011396CB\r
+:1023100020E03EE051E2E32FF0E050935700E491DB\r
+:1023200020FF03C0E295EF703F5FEF708E2F90E0CB\r
+:10233000EA3010F0C79601C0C0968D939D932F5F31\r
+:10234000243149F74FBF8091E800877F8093E800F0\r
+:102350006AE270E0CE0101960E94E60D14C0AE0163\r
+:102360004F5F5F4F6091D8010E942D0DBC01892BFA\r
+:1023700009F440C09091E800977F9093E80089812C\r
+:102380009A810E94490E8091E8008B778093E80043\r
+:1023900031C0803879F58091E800877F8093E8002C\r
+:1023A0008091CF018093F1008091E8008E77809337\r
+:1023B000E8000E94DF0E1EC081111CC09091D60162\r
+:1023C0009230C0F48091E800877F8093E80090937A\r
+:1023D000CF010E94DF0E8091CF01811106C0809154\r
+:1023E000E30087FD02C081E001C084E08093D30157\r
+:1023F0000E94010C8091E80083FF0AC08091E800F0\r
+:10240000877F8093E8008091EB0080628093EB00EF\r
+:10241000AA960FB6F894DEBF0FBECDBFDF91CF9165\r
+:102420001F91089590936101809360010895E09158\r
+:102430006001F0916101309721F00190F081E02D71\r
+:10244000099480E00895EF92FF920F931F93CF932A\r
+:10245000DF93E0916001F09161013097B1F18C015F\r
+:102460000280F381E02D09958091BE0182FF2DC08D\r
+:1024700080FF04C087E894E00E94B005E80118E0FE\r
+:1024800081E8E82E84E0F82E8091BE0180FF0BC029\r
+:1024900088811F928F93FF92EF920E9449060F90BE\r
+:1024A0000F900F900F90115021961111EDCF809148\r
+:1024B000BE0180FF0AC08FE794E0DF91CF911F91AA\r
+:1024C0000F91FF90EF900C94B005DF91CF911F9189\r
+:1024D0000F91FF90EF900895E0916001F0916101FC\r
+:1024E000309721F00480F581E02D09940895209122\r
+:1024F0005E0130915F018217930771F090935F0145\r
+:1025000080935E01E0916001F0916101309721F0CC\r
+:102510000680F781E02D0994089520915C013091A7\r
+:102520005D018217930771F090935D0180935C01C8\r
+:10253000E0916001F0916101309721F00084F18514\r
+:10254000E02D0994089508950C94A3120E94541E3E\r
+:102550000E9475060C94C109CF92DF92EF92FF9210\r
+:102560000F931F93CF93DF9300D000D000D0CDB74F\r
+:10257000DEB70E94170883E6C82E81E0D82E00E05F\r
+:1025800010E0E02E802F0E941509F60141916F01A5\r
+:10259000F42EF826B1F40F5F1F4F0031110589F7B3\r
+:1025A0008FEF89838A831B820E945D1E8160782F52\r
+:1025B0009D838C8349815A816B818D810E946D132B\r
+:1025C00047C09091BE0191FF04C08E830E941B09F9\r
+:1025D0008E8120E030E04F2D50E0922FBA01022E84\r
+:1025E00002C0759567950A94E2F760FF2BC02983B6\r
+:1025F000EA8221E030E0690102C0CC0CDD1C9A9532\r
+:10260000E2F790E08C219D21892B09F420E02B83B7\r
+:102610000E945D1E8160782F9D838C8349815A8141\r
+:102620006B818D810E946D1349815A816B817C8100\r
+:102630008D810E94D71DF801ED59FE4F8081C8267B\r
+:10264000C08206C02F5F3F4F2830310531F6A3CF3F\r
+:102650000E94D61D0E9420210E9440071091620115\r
+:102660000E941712181741F10E94171280936201FD\r
+:102670009091BE0192FF0EC090FF0CC01F928F93ED\r
+:1026800089E994E09F938F930E9449060F900F90E1\r
+:102690000F900F908091620126960FB6F894DEBFDE\r
+:1026A0000FBECDBFDF91CF911F910F91FF90EF90A3\r
+:1026B000DF90CF900C94E81D26960FB6F894DEBFFD\r
+:1026C0000FBECDBFDF91CF911F910F91FF90EF9083\r
+:1026D000DF90CF9008950C946509CF93DF93CDB729\r
+:1026E000DEB72B970FB6F894DEBF0FBECDBF942F89\r
+:1026F0004F83252F588769877A878B874A855B8523\r
+:10270000452B21F02F3F09F59F3FF9F4DE0111968B\r
+:1027100086E0FD0111928A95E9F785E0FE01379682\r
+:1027200001900D928A95E1F749815A816B817C81F4\r
+:102730008D819E810E94911A2B960FB6F894DEBF70\r
+:102740000FBECDBFDF91CF9108954F815885698528\r
+:102750007A858B850E94D71DD9CFCF93882309F422\r
+:10276000CDC0C82F823859F40E94171281FDC6C00F\r
+:1027700089E30E941C1D0E94951D89E30CC08338CB\r
+:1027800079F40E94171280FDB9C083E50E941C1DD8\r
+:102790000E94951D83E50E94391DCF910C94951DD3\r
+:1027A000843859F40E94171282FDA8C087E40E9461\r
+:1027B0001C1D0E94951D87E4EECF8CEF8C0F813A93\r
+:1027C00048F48C2F0E944A24811198C08C2F0E94BB\r
+:1027D0001C1DE3CF80E28C0F883048F4C77081E085\r
+:1027E00001C0880FCA95EAF70E945B1DD6CF8BE522\r
+:1027F0008C0F833078F4C53A29F0C63A31F083E87B\r
+:1028000090E005C081E890E002C082E890E0CF91BE\r
+:102810000C94771288E58C0F853108F06FC0C83AA8\r
+:1028200061F1C93A69F1CA3A71F1CB3A79F1CC3A1E\r
+:1028300081F1CD3A89F1CE3A91F1CF3A99F1C13B8C\r
+:10284000A1F1C03BA9F1C23BB1F1C33BB9F1C43B1B\r
+:10285000C1F1C53BC9F1C63BD1F1C73BD9F1C83B7A\r
+:10286000E1F1C93BE9F1CA3BF1F1CB3BF9F1CC3BDA\r
+:1028700009F43FC080E090E03EC082EE90E03BC0B3\r
+:1028800089EE90E038C08AEE90E035C085EB90E0AC\r
+:1028900032C086EB90E02FC083EB90E02CC084EB3D\r
+:1028A00090E029C087EB90E026C08CEC90E023C03C\r
+:1028B0008DEC90E020C083E891E01DC08AE891E0B3\r
+:1028C0001AC082E991E017C084E991E014C081E266\r
+:1028D00092E011C083E292E00EC084E292E00BC06D\r
+:1028E00085E292E008C086E292E005C087E292E0CD\r
+:1028F00002C08AE292E0CF910C948D12CF9108959C\r
+:10290000882309F44BC0823859F40E94171281FFC2\r
+:1029100045C089E30E941C1D0E94951D89E30CC0DF\r
+:10292000833871F40E94171280FF38C083E50E943B\r
+:102930001C1D0E94951D83E50E94391D0C94951D58\r
+:10294000843859F40E94171282FF28C087E40E943D\r
+:102950001C1D0E94951D87E4EFCF9CEF980F913AC4\r
+:1029600058F390E2980F983050F4877091E001C0CE\r
+:10297000990F8A95EAF7892F0E94611DDFCF9BE5A9\r
+:10298000980F933020F480E090E00C947712885AEE\r
+:10299000853120F480E090E00C948D120895882316\r
+:1029A00021F00E945B1D0C94951D0895882321F051\r
+:1029B0000E94611D0C94951D0895CF92DF92EF92B5\r
+:1029C000FF920F931F93CF93DF9300D000D000D0DE\r
+:1029D000CDB7DEB725E0FC01DE01119601900D9226\r
+:1029E0002A95E1F7FC0140813181F2802581229511\r
+:1029F0002F7063817481672B09F4D8C23F3F19F4AB\r
+:102A00004F3F09F4D3C26C0149833A8389819A818B\r
+:102A10002E830E94DB1C182F092F0E94DA1C0E94B3\r
+:102A2000EA1BE02FE295EF70F0E0E05AFF4F2E81B5\r
+:102A30000C94EE26802F807F902F9F70092F882383\r
+:102A400011F00295007FFF2049F0002309F45FC2D6\r
+:102A5000802F0E946E1D0E94951D59C2812F0E94D9\r
+:102A60008014002309F4A2C2802F0E94741D2696B0\r
+:102A70000FB6F894DEBF0FBECDBFDF91CF911F918F\r
+:102A80000F91FF90EF90DF90CF900C94951D802FC9\r
+:102A9000807F902F9F70092F803211F00295007F68\r
+:102AA000112319F0113001F129C0FF20A9F0802F66\r
+:102AB000222349F1213039F526960FB6F894DEBF6E\r
+:102AC0000FBECDBFDF91CF911F910F91FF90EF907F\r
+:102AD000DF90CF900C947E1D222319F0213009F451\r
+:102AE00065C20E94811D2CC0FF20E9F0263008F04D\r
+:102AF0005DC20E94581D802329F022C0FF20F1F002\r
+:102B0000211115C0802F26960FB6F894DEBF0FBE98\r
+:102B1000CDBFDF91CF911F910F91FF90EF90DF908C\r
+:102B2000CF900C94CF14253008F040C209C0F601B4\r
+:102B3000858180FFECC18F708583E4CF2111FBC1BB\r
+:102B4000802F69C1202F26952695237030E021150E\r
+:102B5000310521F021303105C9F028C2FF2021F0D4\r
+:102B6000812F902F937002C080E090E026960FB6E0\r
+:102B7000F894DEBF0FBECDBFDF91CF911F910F91B3\r
+:102B8000FF90EF90DF90CF900C947712FF2021F010\r
+:102B9000812F902F937002C080E090E026960FB6B0\r
+:102BA000F894DEBF0FBECDBFDF91CF911F910F9183\r
+:102BB000FF90EF90DF90CF900C948D12812FFF202B\r
+:102BC00019F00E94A61F02C00E940E2026960FB682\r
+:102BD000F894DEBF0FBECDBFDF91CF911F910F9153\r
+:102BE000FF90EF90DF90CF900C949320802F837014\r
+:102BF00009F078C0F110DAC1812F8295869587702F\r
+:102C0000880F880F912F9F70C92ED12CE12CF12CA9\r
+:102C1000082E04C0CC0CDD1CEE1CFF1C0A94D2F75D\r
+:102C200014FF12C04FE050E060E070E004C0440FB9\r
+:102C3000551F661F771F8A95D2F7CB01BA016095A1\r
+:102C400070958095909503C060E070E0CB01202FD7\r
+:102C5000269526952370422F50E042305105D1F041\r
+:102C60004330510559F16C297D298E299F29413026\r
+:102C7000510541F126960FB6F894DEBF0FBECDBFC9\r
+:102C8000DF91CF911F910F91FF90EF90DF90CF9048\r
+:102C90000C94FF1B6C297D298E299F2926960FB63F\r
+:102CA000F894DEBF0FBECDBFDF91CF911F910F9182\r
+:102CB000FF90EF90DF90CF900C94111C0E94FF1BAF\r
+:102CC000C701B60126960FB6F894DEBF0FBECDBF82\r
+:102CD000DF91CF911F910F91FF90EF90DF90CF90F8\r
+:102CE0000C94ED1BFF2019F0802F817001C0869598\r
+:102CF000882309F45BC1812F829586958770880FA0\r
+:102D0000880F912F9F70C92ED12CE12CF12C082E09\r
+:102D100004C0CC0CDD1CEE1CFF1C0A94D2F714FF7F\r
+:102D200012C04FE050E060E070E004C0440F551F57\r
+:102D3000661F771F8A95D2F7CB01BA01609570950F\r
+:102D40008095909503C060E070E0CB01202F269520\r
+:102D500026952370422F50E042305105D1F0433088\r
+:102D6000510559F16C297D298E299F294130510542\r
+:102D700041F126960FB6F894DEBF0FBECDBFDF91AE\r
+:102D8000CF911F910F91FF90EF90DF90CF900C9417\r
+:102D9000B61C6C297D298E299F2926960FB6F8949A\r
+:102DA000DEBF0FBECDBFDF91CF911F910F91FF907E\r
+:102DB000EF90DF90CF900C94C81C0E94B61CC70106\r
+:102DC000B60126960FB6F894DEBF0FBECDBFDF91D9\r
+:102DD000CF911F910F91FF90EF90DF90CF900C94C7\r
+:102DE000A41C103F41F118F4103E48F48BC0123F70\r
+:102DF00009F450C0D8F1133F09F460C083C01F70BC\r
+:102E0000802F8F71FF2021F00E943D1C812F7BCEEF\r
+:102E10000E945E1C812F26960FB6F894DEBF0FBE6F\r
+:102E2000CDBFDF91CF911F910F91FF90EF90DF9079\r
+:102E3000CF900C94D614FF20A9F0253008F0B6C02E\r
+:102E4000802F8F7126960FB6F894DEBF0FBECDBFD0\r
+:102E5000DF91CF911F910F91FF90EF90DF90CF9076\r
+:102E60000C94831C263008F0A1C0EACFFF20A1F00B\r
+:102E7000802F8F7126960FB6F894DEBF0FBECDBFA0\r
+:102E8000DF91CF911F910F91FF90EF90DF90CF9046\r
+:102E90000C943D1CFF2061F3802F8F7126960FB696\r
+:102EA000F894DEBF0FBECDBFDF91CF911F910F9180\r
+:102EB000FF90EF90DF90CF900C945E1CFF2091F07C\r
+:102EC000802F8F7126960FB6F894DEBF0FBECDBF50\r
+:102ED000DF91CF911F910F91FF90EF90DF90CF90F6\r
+:102EE0000C94281C26960FB6F894DEBF0FBECDBFFB\r
+:102EF000DF91CF911F910F91FF90EF90DF90CF90D6\r
+:102F00000C94231CFF20A1F0222309F4B1CF812FC0\r
+:102F100026960FB6F894DEBF0FBECDBFDF91CF91DE\r
+:102F20001F910F91FF90EF90DF90CF900C94AD1315\r
+:102F3000222309F4B1CF812F26960FB6F894DEBF75\r
+:102F40000FBECDBFDF91CF911F910F91FF90EF90FA\r
+:102F5000DF90CF900C948014402F4F70612FC601EA\r
+:102F60000E94201F26960FB6F894DEBF0FBECDBF7D\r
+:102F7000DF91CF911F910F91FF90EF90DF90CF9055\r
+:102F80000C94351B402F4F70612FC60126960FB64B\r
+:102F9000F894DEBF0FBECDBFDF91CF911F910F918F\r
+:102FA000FF90EF90DF90CF900C94231F26960FB6E2\r
+:102FB000F894DEBF0FBECDBFDF91CF911F910F916F\r
+:102FC000FF90EF90DF90CF9008950E947B1D0E94AC\r
+:102FD0004A1D0E94951D0E94C5210E94932080E0F9\r
+:102FE00090E00E94771280E090E00C948D120E9495\r
+:102FF0006B1D0C94E5170E94DB1C292F22952F7066\r
+:1030000030E02C3031054CF42A3031056CF422507C\r
+:1030100031092230310588F407C02C30310549F0E0\r
+:103020002F30310531F009C0803E48F0803F29F44F\r
+:1030300006C093FB882780F9089580E0089581E019\r
+:103040000895CF93DF9300D000D01F92CDB7DEB7A5\r
+:103050000F900F900F900F900F90DF91CF910895E8\r
+:10306000CF93DF9300D000D000D0CDB7DEB7269647\r
+:103070000FB6F894DEBF0FBECDBFDF91CF9108959C\r
+:103080001F93CF93DF93C091730116E08091740179\r
+:10309000C81799F0D0E01C9FF0011D9FF00D11247E\r
+:1030A000EB58FE4F4081518162817381848195810B\r
+:1030B0000E9430182196C770E9CFDF91CF911F9100\r
+:1030C00008954091A5015091A6016091A7017091CA\r
+:1030D000A8018091A9019091AA010C9430188091C7\r
+:1030E000AA0182958F7009F054C08091A7018823AE\r
+:1030F00009F44FC080917301A09174016091A50102\r
+:103100007091A6014091A8015091A901B6E08A17DB\r
+:1031100009F43FC090E041155105C1F17F3F11F422\r
+:103120006F3FA1F1B89FF001B99FF00D1124EB584A\r
+:10313000FE4F218172132AC02081621327C0228191\r
+:10314000211124C0238134812417350710F4215024\r
+:103150003109241B350B283C3105C0F42091AA010C\r
+:103160002F7020612093AA0126E0289FF001299F5B\r
+:10317000F00D1124E658FE4F80818F7080618083AE\r
+:1031800085EA91E00E94DD140C9440180196877046\r
+:10319000BECF0895CF92DF92EF92FF920F931F93CD\r
+:1031A000CF93DF93CDB7DEB762970FB6F894DEBF4B\r
+:1031B0000FBECDBF8C0185E0F801DE011D960190A8\r
+:1031C0000D928A95E1F7D8014C9111965C91119777\r
+:1031D00012966C9112971396CD90DC9014973091C3\r
+:1031E000A5017091A6018091A8019091A901009775\r
+:1031F00009F46BC17F3F19F43F3F09F466C1E090C9\r
+:10320000A701EE2009F4C0C02091AA01C816D90672\r
+:1032100028F0F601E81BF90BCF0104C080959095CA\r
+:103220008C0D9D1DFF24F394883C910578F0F12CC2\r
+:10323000207F09F0C6C07C2DD98AC88A89890E945E\r
+:10324000211885EA91E00E94DD14B1C0822F807FB1\r
+:1032500009F046C0751314C0341312C0611110C0B8\r
+:103260002F7020612093AA010E94611885EA91E0E5\r
+:103270000E94DD148091AA01D80115968C932EC06E\r
+:10328000CD2819F15F3F11F44F3FF9F0F62E61118F\r
+:103290001CC0809173012091740136E0821709F4FB\r
+:1032A0005AC090E0389FF001399FF00D1124EB587F\r
+:1032B000FE4F7181571306C07081471303C072819E\r
+:1032C000711103C001968770E9CFF62E662309F4C9\r
+:1032D00018C18091AA0181608093AA01F12C11C1CB\r
+:1032E000751308C0341306C0611104C08091AA018F\r
+:1032F000D801C3C04D875E878D859E856A8B0E94ED\r
+:10330000FB176A898823E1F16623D1F12091AA0194\r
+:10331000822F82958F7090E0029774F08091A501C2\r
+:103320009091A60198878F831986DB86CA862C87A1\r
+:10333000CE0107960E94DD1486E0F801A5EAB1E00F\r
+:1033400001900D928A95E1F70E946F180E94611812\r
+:10335000FF24F394D6C04D875E878D859E850E949D\r
+:10336000DB1C292F22952F7030E0223031050CF024\r
+:10337000BCC09F7009F0B6C0805E883008F4C1C040\r
+:10338000C8010E94DD14E4CFC816D90608F453C062\r
+:10339000F601E81BF90BCF01883C910508F450C0F9\r
+:1033A000F12C7C2DD98AC88A89890E942118E5EAE6\r
+:1033B000F1E086E0DF011D928A95E9F70E9461182D\r
+:1033C000A0C0751314C0341312C0611110C08091D5\r
+:1033D000AA01F8018583C8010E94DD1486E0E5EAB0\r
+:1033E000F1E0DF011D928A95E9F7FE2C8AC04D8736\r
+:1033F0005E878D859E856A8B0E94FB176A8988236C\r
+:1034000009F4BECF662309F4BBCF2091AA01822F15\r
+:1034100082958F7090E002970CF48ECF8091A50179\r
+:103420009091A6019A8389831B82DD82CC822E83B0\r
+:10343000CE0101967FCF809590958C0D9D1DACCFD0\r
+:10344000F62E662309F49CCF75132EC034132CC0BE\r
+:103450002091AA0120FD1FC0822F82958F70D9F084\r
+:10346000D80115962C9315978F3049F08F5F982FC0\r
+:103470009295907F822F8F70892B15968C93C8011F\r
+:103480000E94DD1486E0F801A5EAB1E001900D92FA\r
+:103490008A95E1F793CF86E0F801A5EAB1E00190C3\r
+:1034A0000D928A95E1F72DC04D875E878D859E85AB\r
+:1034B0000E94FB17811140CF8091AA018160809307\r
+:1034C000AA01C8010E94DD141CC0662309F458CF6C\r
+:1034D0004D875E878D859E850E94FB17882309F4A2\r
+:1034E0004FCF2ACF811148CF0CC0243031050CF0CA\r
+:1034F00047CF9F7009F440CFF8019581907F09F084\r
+:103500003BCF8F2D62960FB6F894DEBF0FBECDBFB6\r
+:10351000DF91CF911F910F91FF90EF90DF90CF90AF\r
+:1035200008951F93CF93DF93CDB7DEB72C970FB6D7\r
+:10353000F894DEBF0FBECDBF4F83588769877A8767\r
+:103540008B879C87CE0107960E94CA18882369F052\r
+:103550008F8198852A853B85232BF1F19F3F09F0C8\r
+:1035600063C08F3F09F060C037C086E0FE01379628\r
+:10357000DE01119601900D928A95E1F76F817885B1\r
+:10358000EA85FB85309741F17F3F11F46F3F21F1D0\r
+:103590002091740130E0C90101968770992740910C\r
+:1035A000730150E08417950709F447C069837A8353\r
+:1035B000FD83EC8396E0929FD001939FB00D112480\r
+:1035C000AB58BE4FFE01319601900D929A95E1F7EE\r
+:1035D000809374010E94401816E0809173019091CD\r
+:1035E00074018917C1F1189FC00111248B589E4F97\r
+:1035F0000E94CA18882379F1E09173011E9FF0019F\r
+:103600001124EB58FE4F4081518162817381848186\r
+:1036100095810E9430188091730190E00196877027\r
+:10362000992780937301D9CF4F81588569857A8511\r
+:103630008B859C850E943018CFCF0E94F71710927F\r
+:10364000740110927301E5EAF1E086E0DF011D925A\r
+:103650008A95E9F7C1CF2C960FB6F894DEBF0FBE5E\r
+:10366000CDBFDF91CF911F910895DF92EF92FF922E\r
+:103670000F931F93CF93DF93FC01892B09F48AC02A\r
+:10368000E12CF12CDD24D394EF0121968491853730\r
+:1036900009F461C058F4843708F04EC0843008F053\r
+:1036A0006AC08130D1F0823071F174C0883709F47A\r
+:1036B0005DC050F4863709F455C0873709F06AC0F9\r
+:1036C0008E2D0E94681D54C09CE7980F903708F01B\r
+:1036D00061C08F770E94801450C08F010E5F1F4F12\r
+:1036E000FE01849190E2980F983050F48770FD2D80\r
+:1036F00001C0FF0F8A95EAF78F2F0E946E1D14C03C\r
+:103700000E94AD1313C08F010E5F1F4FFE01C491C5\r
+:1037100080E28C0F883060F4C7708D2D01C0880F57\r
+:10372000CA95EAF70E94741D0E94951DE80125C004\r
+:103730008C2F0E948014FACF9F012E5F3F4FFE0115\r
+:10374000C491CC2369F08FE99FE00197F1F700C0A5\r
+:103750000000C150F6CF9F012E5F3F4FFE01F49055\r
+:10376000E9010BC00E94581DE82E07C00E946B1D86\r
+:103770000E94951D02C00E94AD138F2D882341F039\r
+:10378000EFE9FFE03197F1F700C000008150F6CF7C\r
+:10379000FE017ACFDF91CF911F910F91FF90EF90B3\r
+:1037A000DF9008956093AF017093B0018093B101F1\r
+:1037B0009093B2010E94E61D0C94E5176093AB0153\r
+:1037C0007093AC018093AD019093AE010E94E71D10\r
+:1037D0000C94E51708950C94D21B0F931F9300913E\r
+:1037E000AF011091B0012091B1013091B201602B75\r
+:1037F000712B822B932B1F910F910C94D21B0F9343\r
+:103800001F930091AF011091B0012091B10130914F\r
+:10381000B20160237123822393231F910F910C9493\r
+:10382000D21B0F931F930091AF011091B001209113\r
+:10383000B1013091B20160277127822793271F9130\r
+:103840000F910C94D21B60E070E0CB010C94DE1B56\r
+:103850000F931F9341E050E060E070E08A019B010C\r
+:1038600004C0000F111F221F331F8A95D2F7C90110\r
+:10387000B8011F910F910C94DE1B0F931F9341E031\r
+:1038800050E060E070E004C0440F551F661F771FD2\r
+:103890008A95D2F78091AB019091AC01A091AD01D6\r
+:1038A000B091AE018A019B01082B192B2A2B3B2BCF\r
+:1038B000C901B8011F910F910C94DE1B0F931F9348\r
+:1038C00041E050E060E070E004C0440F551F661F07\r
+:1038D000771F8A95D2F740955095609570958091A5\r
+:1038E000AB019091AC01A091AD01B091AE018A0104\r
+:1038F0009B01082319232A233B23C901B8011F91E7\r
+:103900000F910C94DE1B0F931F9341E050E060E099\r
+:1039100070E004C0440F551F661F771F8A95D2F7C9\r
+:103920008091AB019091AC01A091AD01B091AE013D\r
+:103930008A019B01082719272A273B27C901B801BB\r
+:103940001F910F910C94DE1B0F931F930091AB01FD\r
+:103950001091AC012091AD013091AE01602B712B23\r
+:10396000822B932B1F910F910C94DE1B0F931F93AF\r
+:103970000091AB011091AC012091AD013091AE01ED\r
+:1039800060237123822393231F910F910C94DE1BDC\r
+:103990000F931F930091AB011091AC012091AD01E9\r
+:1039A0003091AE0160277127822793271F910F91D5\r
+:1039B0000C94DE1B0895CF92DF92EF92FF920F934B\r
+:1039C0001F93CF93DF938C01C090AF01D090B001D3\r
+:1039D000E090B101F090B2014091AB015091AC0187\r
+:1039E0006091AD017091AE01C42AD52AE62AF72A6A\r
+:1039F000CFE1D0E0D701C6010C2E04C0B695A79543\r
+:103A0000979587950A94D2F780FF07C0B8018C2F4D\r
+:103A10000E94F51E8130910531F4219758F7B801C5\r
+:103A200080E00E94F51EDF91CF911F910F91FF90D2\r
+:103A3000EF90DF90CF90089520910D0130910E010D\r
+:103A4000F90132969FEF40E05191581789F09F3F5E\r
+:103A500019F4511101C0942F4F5F4630A9F79F3FD1\r
+:103A600039F0F901E90FF11D97FDFA958283089568\r
+:103A7000089520910D0130910E01F9013296285FD1\r
+:103A80003F4F9081981301C010823196E217F307DF\r
+:103A9000C1F7089581E090E0E0910D01F0910E01F1\r
+:103AA000E80FF91F1082019688309105A9F7089553\r
+:103AB0008091BD0108959091BD01892B8093BD0136\r
+:103AC000089580959091BD0189238093BD0108954B\r
+:103AD0008093BD0108951092BD0108959091BC019D\r
+:103AE000892B8093BC01089580959091BC01892316\r
+:103AF0008093BC0108951092BC0108958093B30196\r
+:103B000008951092B301089580910D0190910E01D6\r
+:103B1000FC0131969C01285F3F4F80E0919191110B\r
+:103B20008F5FE217F307D1F70895E0910D01F0914F\r
+:103B30000E018091BD018083E0910D01F0910E0195\r
+:103B400090818091BC01892B80838091B30188236F\r
+:103B500061F0E0910D01F0910E019081892B80833D\r
+:103B60000E94841D81111092B30180910D019091EA\r
+:103B70000E010C9423129093350180933401089523\r
+:103B80008295982F9C7C392F36953695282F237354\r
+:103B900044E0249FC0011124932F982B292F2A7AC7\r
+:103BA0002695892F8575880F822B08950895CF93C8\r
+:103BB000DF9300D000D01F92CDB7DEB70F900F90EB\r
+:103BC0000F900F900F90DF91CF9108950895089571\r
+:103BD0000C946B138091D301843021F11092BF01BA\r
+:103BE00020E488E190E00FB6F894A89580936000F7\r
+:103BF0000FBE2093600083B7817F846083BF83B74B\r
+:103C0000816083BF7894889583B78E7F83BF0FB61A\r
+:103C1000F894A8958091600088618093600010926C\r
+:103C200060000FBE089508950895CF930E94131E5B\r
+:103C30000E9417080E94141EC0E08C2F0E941509D4\r
+:103C4000811104C0CF5FC031C1F701C081E0CF91C5\r
+:103C500008950C94F7171F920F920FB60F9211242C\r
+:103C60008F939F93AF93BF938091BF01811113C036\r
+:103C70008091C0019091C101A091C201B091C30196\r
+:103C80004196A11DB11D8093C0019093C101A093E5\r
+:103C9000C201B093C301BF91AF919F918F910F90DB\r
+:103CA0000FBE0F901F90189582E084BD93E095BDE4\r
+:103CB0009AEF97BD80936E0008952FB7F894809186\r
+:103CC000C0019091C101A091C201B091C3012FBF69\r
+:103CD00008952FB7F8946091C0017091C10180914F\r
+:103CE000C2019091C3012FBF0895CF92DF92EF924E\r
+:103CF000FF920F931F932FB7F8944091C0015091FA\r
+:103D0000C1016091C2017091C3012FBF6A017B01A3\r
+:103D1000EE24FF248C0120E030E0C016D106E2063C\r
+:103D2000F30610F4415051099A01281B390BC901BF\r
+:103D30001F910F91FF90EF90DF90CF9008951F9209\r
+:103D40000F920FB60F9211248F939F93AF93BF934F\r
+:103D50008091C0019091C101A091C201B091C301B5\r
+:103D60000196A11DB11D8093C0019093C101A09344\r
+:103D7000C201B093C301BF91AF919F918F910F90FA\r
+:103D80000FBE0F901F9018950E94300FF8942FEFE0\r
+:103D900087EA91E6215080409040E1F700C00000A2\r
+:103DA00087E090EBDC018093DC019093DD01A09330\r
+:103DB000DE01B093DF019CE088E10FB6F894A8958E\r
+:103DC000809360000FBE90936000FFCF28E0929F29\r
+:103DD000F0011124E80FF11DE052FF4F8491982F5C\r
+:103DE00090778F7092959F700895CF93C82FCB01D5\r
+:103DF0000E94E61E292F30E0E82FF0E0A90164E0E0\r
+:103E0000440F551F6A95E1F74E2B5F2B4038510543\r
+:103E100019F480E090E012C088E0C89F200D311DA9\r
+:103E2000112484E0220F331F8A95E1F7E20FF31F7C\r
+:103E3000EE0FFF1FE050F84985919491CF910895BE\r
+:103E400080E090E0089508958091C60180FF0BC046\r
+:103E50006091120185E0689FB00111247595679506\r
+:103E6000759567952BC081FF09C06091120185E0AF\r
+:103E7000689FB00111247595679520C082FF07C027\r
+:103E80006091120185E0689FB001112417C09091E4\r
+:103E9000C7019923D1F060911101961788F72091FD\r
+:103EA000120185E0289F90011124929FA001939F09\r
+:103EB000500D112470E0CA010E94DA2660387105A5\r
+:103EC00040F46115710539F002C065E070E0862F9D\r
+:103ED00008958FE7089581E008958091C60180FFDD\r
+:103EE00008C06091100170E07595679575956795AC\r
+:103EF00021C081FF06C06091100170E07595679543\r
+:103F000019C082FF04C06091100170E010C0909150\r
+:103F1000C7019923C1F060910F019617A0F7809116\r
+:103F20001001899FC001112470E00E94DA266038D8\r
+:103F3000710528F46115710521F0862F08958FE72A\r
+:103F4000089581E0089561E070E0F4CF803F21F4AE\r
+:103F50000E94241F819504C0813F29F40E94241FE0\r
+:103F60008093CA010895823F21F40E94241F819505\r
+:103F700004C0833F29F40E94241F8093C90108953F\r
+:103F8000893F19F40E946D1F05C08A3F31F40E94D9\r
+:103F90006D1F81958093CB0108958B3F21F40E9482\r
+:103FA0006D1F819504C08C3F29F40E946D1F809382\r
+:103FB000CC010895843F21F48091C801816017C02D\r
+:103FC000853F21F48091C801826011C0863F21F4B1\r
+:103FD0008091C80184600BC0873F21F48091C801A3\r
+:103FE000886005C0883F31F48091C801806180936A\r
+:103FF000C80108958D3F21F48091C60181600BC0F6\r
+:104000008E3F21F48091C601826005C08F3F29F464\r
+:104010008091C60184608093C6010895803F39F481\r
+:104020008091CA0187FF6CC01092CA0169C0813FAC\r
+:1040300029F48091CA011816BCF362C09091C9019D\r
+:10404000823F29F497FF5CC01092C90159C0833F99\r
+:1040500019F41916CCF354C0893F41F48091CB0177\r
+:1040600018160CF04DC01092CB014AC08A3F29F4BB\r
+:104070008091CB0187FF44C0F6CF8B3F39F480910C\r
+:10408000CC0187FF3DC01092CC013AC08C3F29F48F\r
+:104090008091CC011816BCF333C0843F21F4809189\r
+:1040A000C8018E7F17C0853F21F48091C8018D7FA4\r
+:1040B00011C0863F21F48091C8018B7F0BC0873FE0\r
+:1040C00021F48091C801877F05C0883F31F4809139\r
+:1040D000C8018F7E8093C80113C08D3F21F4809169\r
+:1040E000C6018E7F0BC08E3F21F48091C6018D7F6B\r
+:1040F00005C08F3F29F48091C6018B7F8093C60154\r
+:104100008091C90181110EC08091CA0181110AC03C\r
+:104110008091CB01811106C08091CC01811102C038\r
+:104120001092C70108958091BE0183FF7EC08BEC81\r
+:1041300094E00E94B0058091C8011F928F9386EC95\r
+:1041400094E09F938F930E94490684EC94E00E9430\r
+:10415000B0058091C901282F082E000C330B3F9326\r
+:104160008F9381EC94E09F938F930E9449068FEB8D\r
+:1041700094E00E94B0058091CA01282F082E000CFF\r
+:10418000330B3F938F938CEB94E09F938F930E941C\r
+:1041900049068AEB94E00E94B0058091CB01282F5C\r
+:1041A000082E000C330B3F938F9387EB94E09F9383\r
+:1041B0008F930E94490685EB94E00E94B0058091A0\r
+:1041C000CC01282F082E000C330B3F938F9382EBEA\r
+:1041D00094E09F938F930E9449068FEA94E00E9497\r
+:1041E000B0058091C7011F928F938CEA94E09F9352\r
+:1041F0008F930E9449068AEA94E00E94B00580915C\r
+:10420000C6011F928F9387EA94E09F938F930E9439\r
+:10421000490684EA94E00E94B0058DB79EB74C969B\r
+:104220000FB6F8949EBF0FBE8DBF88EC91E00E9440\r
+:104230006C120E945D1E9093C5018093C401089585\r
+:104240001F93CF93DF938091C4019091C5010E9489\r
+:10425000751EAC019091C701992321F020911301A3\r
+:1042600030E006C0209114018AE0289F90011124BB\r
+:104270004217530708F485C08091C901C091CA0153\r
+:10428000D091CB011091CC01811107C0C11175C033\r
+:10429000D11173C0111171C074C09F3F19F09F5F9D\r
+:1042A0009093C701181624F40E94241F8093C9011B\r
+:1042B0008091C90187FF05C00E94241F81958093CA\r
+:1042C000C9011C1624F40E94241F8093CA01809106\r
+:1042D000CA0187FF05C00E94241F81958093CA01EF\r
+:1042E0006091C901662331F1C091CA01CC2311F15B\r
+:1042F000062E000C770B880B990B0E94D52523E323\r
+:1043000033E343E35FE30E9439260E949D256093D7\r
+:10431000C9016C2FCC0F770B880B990B0E94D52508\r
+:1043200023E333E343E35FE30E9439260E949D25A4\r
+:104330006093CA011D1624F40E946D1F8093CB0167\r
+:104340008091CB0187FF05C00E946D1F81958093EE\r
+:10435000CB01111624F40E946D1F8093CC01809133\r
+:10436000CC0187FF05C00E946D1F81958093CC0111\r
+:10437000DF91CF911F910C9493209F3F09F08FCF35\r
+:1043800097CFDF91CF911F910895E8ECF1E085E0A0\r
+:10439000DF011D928A95E9F71092C7011092C601BC\r
+:1043A00008958EEE96E00E94B0051F9281E08F93F3\r
+:1043B0001F9285E08F9380EA96E09F938F930E94EF\r
+:1043C00049060F900F900F900F900F900F90089547\r
+:1043D0008330E9F128F4813061F0823009F10895E9\r
+:1043E000853009F462C008F449C0863009F474C00D\r
+:1043F000089580911401262F30E0280F311D2F3FA2\r
+:10440000310524F4680F6093140103C08FEF80938B\r
+:104410001401809114011F928F9389ED95E072C071\r
+:1044200080911301262F30E0280F311D2F3F3105D9\r
+:1044300024F4680F6093130103C08FEF809313017E\r
+:10444000809113011F928F9387EC95E05BC0809160\r
+:104450001201262F30E0280F311D2F3F310524F4A3\r
+:10446000680F6093120103C08FEF80931201809157\r
+:1044700012011F928F9384EB95E044C0809111014B\r
+:10448000262F30E0280F311D2F3F310524F4680F0F\r
+:104490006093110103C08FEF80931101809111018E\r
+:1044A0001F928F938FE995E02DC080911001262FE8\r
+:1044B00030E0280F311D2F3F310524F4680F609341\r
+:1044C000100103C08FEF80931001809110011F92A3\r
+:1044D0008F9386E895E016C080910F01262F30E07B\r
+:1044E000280F311D2F3F310524F4680F60930F0111\r
+:1044F00003C08FEF80930F0180910F011F928F9364\r
+:104500008BE695E09F938F930E9449060F900F9042\r
+:104510000F900F900895833081F128F4813059F085\r
+:104520008230D1F00895853009F449C0B8F1863061\r
+:1045300009F456C0089580911401681720F4861B71\r
+:104540008093140102C010921401809114011F92F3\r
+:104550008F938CE595E054C080911301681720F487\r
+:10456000861B8093130102C01092130180911301E6\r
+:104570001F928F938AE495E043C0809112016817DF\r
+:1045800020F4861B8093120102C0109212018091C8\r
+:1045900012011F928F9387E395E032C08091110141\r
+:1045A000681720F4861B8093110102C0109211013C\r
+:1045B000809111011F928F9382E295E021C080913A\r
+:1045C0001001681720F4861B8093100102C010921E\r
+:1045D0001001809110011F928F9389E095E010C027\r
+:1045E00080910F01681720F4861B80930F0102C091\r
+:1045F00010920F0180910F011F928F938EEE94E025\r
+:104600009F938F930E9449060F900F900F900F90E9\r
+:104610000895CF93C82F1F928F9383EF97E09F93B6\r
+:104620008F930E94490681E090E0A0E0B0E0BC01D9\r
+:10463000CD0104C0660F771F881F991FCA95D2F756\r
+:104640000E94EB1B0F900F900F900F90CF910C9446\r
+:10465000F717CF93873288F58E3108F00BC18E3073\r
+:1046600009F487C0D8F4873009F460C08B3009F4AE\r
+:104670004FC0863009F002C18091BE01817F8E7FDC\r
+:104680008093BE0188EF97E00E94B00581EB9AE02D\r
+:104690000E94B00581E08093CE0146C0863109F4C6\r
+:1046A000B0C020F4803109F47AC0E8C0893109F43F\r
+:1046B00091C08B3109F449C0E1C0883349F150F40D\r
+:1046C000893209F4D5C0853309F4D2C0873209F0A4\r
+:1046D000D5C0CEC0833409F4CBC028F48A3308F4A3\r
+:1046E000CDC08953C8C0883409F0C8C00E94F717EC\r
+:1046F00080EA9AE00E94B0052FEF83ED90E321500D\r
+:1047000080409040E1F700C000000E94C41E0CC031\r
+:104710008FE198E041C087E89AE00E94B00580915F\r
+:10472000BE0181608093BE01C1E0ADC08091BE0139\r
+:10473000C82FC17080FFEFCF83E99AE00E94B005D7\r
+:104740008091BE01817F8E7F3FC09091BE0191FB21\r
+:10475000CC27C0F981E0C827892FC0FB81F980935D\r
+:10476000BE01CC2319F08AE79AE029C08CE69AE0D2\r
+:1047700013C09091BE0192FBCC27C0F981E0C827FD\r
+:10478000892FC0FB82F98093BE01CC2319F08DE5FF\r
+:104790009AE015C08DE49AE00E94B005C5CF9091D3\r
+:1047A000BE0193FBCC27C0F981E0C827892FC0FB4D\r
+:1047B00083F98093BE01CC2351F081E49AE00E94FA\r
+:1047C000B0058091BE0181608093BE015CC084E32E\r
+:1047D0009AE0E2CF85E29AE00E94B00582E09AE09A\r
+:1047E0000E94B0058DEB99E00E94B00580E999E048\r
+:1047F0000E94B0058BE499E00E94B0058DE199E03C\r
+:10480000CBCF8FE099E00E94B0050E9417121F9253\r
+:104810008F9385EF98E09F938F930E944906809134\r
+:104820000C011F928F938EED98E09F938F930E94BF\r
+:10483000490680915B011F928F938BEC98E09F93C8\r
+:104840008F930E9449060E94691E9F938F937F93C6\r
+:104850006F9384EB98E09F938F930E9449068DB7E6\r
+:104860009EB742960FB6F8949EBF0FBE8DBF5CCF29\r
+:1048700080E001C08D510E94092356CF82EB98E061\r
+:104880000E94B005C0E08C2FCF91089580E008957C\r
+:1048900080E00895CF93C82F8091CE01813069F0D8\r
+:1048A00020F0823009F449C040C167E08FE00E94E7\r
+:1048B0000009882309F43FC106C067E08FE00E9429\r
+:1048C0000009882361F08C2F0E944624811104C0C6\r
+:1048D0008C2F0E9429232FC081E090E02CC08C2FC8\r
+:1048E0000E944824811126C0C431E1F070F4CB301D\r
+:1048F00081F0C031D1F40E94D1218BEE97E00E946B\r
+:10490000B00582E08093CE0115C0C93259F0C8339A\r
+:1049100061F488EF97E00E94B0058FEE97E00E9467\r
+:10492000B00508C01092CE0104C189EE97E00E9444\r
+:10493000B005FFC081E08170FEC0C43228F5CE31E1\r
+:1049400008F0C1C0CB30A1F1D0F4C73009F0D3C01A\r
+:104950008EE18093140182E3809313018AE08093B7\r
+:10496000120184E18093110188E08093100188E2B4\r
+:1049700080930F018FE896E00E94B005BFC0C3315D\r
+:1049800049F1C431C1F0B7C0CB3409F4A9C028F44F\r
+:10499000C93289F0C83361F0AEC0C13509F49EC098\r
+:1049A000C23509F499C0CE3409F0A5C06AE09EC0B2\r
+:1049B0000E94D121A3C08091CD01882319F01092CB\r
+:1049C000CD019CC08CE996E00E94B00581E0809307\r
+:1049D000CE01B1C086E796E00E94B00584E696E07D\r
+:1049E0000E94B005809114011F928F9381E696E09A\r
+:1049F0009F938F930E9449068FE596E00E94B00531\r
+:104A00008DE496E00E94B005809113011F928F9370\r
+:104A10008AE496E09F938F930E94490688E496E08B\r
+:104A20000E94B00589E396E00E94B00580911201D2\r
+:104A30001F928F9386E396E09F938F930E9449067F\r
+:104A400084E396E00E94B00583E296E00E94B00500\r
+:104A5000809111011F928F9380E296E09F938F9334\r
+:104A60000E9449068EE196E00E94B00589E096E03A\r
+:104A70000E94B005809110011F928F9386E096E00E\r
+:104A80009F938F930E94490684E096E00E94B005B0\r
+:104A90008DEE95E00E94B00580910F011F928F93DB\r
+:104AA0008AEE95E09F938F930E94490688EE95E0E9\r
+:104AB0000E94B0058DB79EB748960FB6F8949EBF7A\r
+:104AC0000FBE8DBF1BC0CE51EC2FF0E0E75DFE4F57\r
+:104AD00080818093CD0112C061E003C061E006C017\r
+:104AE0006AE08091CD010E94E82108C08091CD014B\r
+:104AF0000E948B2203C08DE896E013C08091CD0107\r
+:104B0000882369F01F928F9387E896E09F938F9395\r
+:104B10000E9449060F900F900F900F9004C084E8F8\r
+:104B200096E00E94B00581E006C01092CE0180E0C0\r
+:104B300002C080E000CFCF9108950E94A425689420\r
+:104B4000B1110C94332608950E94182688F09F57BF\r
+:104B500098F0B92F9927B751B0F0E1F0660F771FA1\r
+:104B6000881F991F1AF0BA95C9F714C0B13091F097\r
+:104B70000E943226B1E008950C943226672F782FD8\r
+:104B80008827B85F39F0B93FCCF38695779567955C\r
+:104B9000B395D9F73EF490958095709561957F4FC8\r
+:104BA0008F4F9F4F0895E89409C097FB3EF490956E\r
+:104BB0008095709561957F4F8F4F9F4F9923A9F0F6\r
+:104BC000F92F96E9BB279395F69587957795679585\r
+:104BD000B795F111F8CFFAF4BB0F11F460FF1BC0C9\r
+:104BE0006F5F7F4F8F4F9F4F16C0882311F096E95C\r
+:104BF00011C0772321F09EE8872F762F05C066230A\r
+:104C000071F096E8862F70E060E02AF09A95660FC2\r
+:104C1000771F881FDAF7880F9695879597F908957B\r
+:104C200057FD9058440F551F59F05F3F71F047955D\r
+:104C3000880F97FB991F61F09F3F79F08795089542\r
+:104C4000121613061406551FF2CF4695F1DF08C061\r
+:104C5000161617061806991FF1CF8695710561057E\r
+:104C600008940895E894BB2766277727CB0197F926\r
+:104C700008950E944C260C94BD260E94AF2638F061\r
+:104C80000E94B62620F0952311F00C94A6260C94D1\r
+:104C9000AC2611240C9433260E94102670F3959FA5\r
+:104CA000C1F3950F50E0551F629FF001729FBB2723\r
+:104CB000F00DB11D639FAA27F00DB11DAA1F649FBF\r
+:104CC0006627B00DA11D661F829F2227B00DA11D72\r
+:104CD000621F739FB00DA11D621F839FA00D611DF8\r
+:104CE000221F749F3327A00D611D231F849F600D19\r
+:104CF000211D822F762F6A2F11249F5750409AF042\r
+:104D0000F1F088234AF0EE0FFF1FBB1F661F771FCD\r
+:104D1000881F91505040A9F79E3F510580F00C9498\r
+:104D2000A6260C9433265F3FE4F3983ED4F3869591\r
+:104D300077956795B795F795E7959F5FC1F7FE2B38\r
+:104D4000880F911D9695879597F9089597F99F6714\r
+:104D500080E870E060E008959FEF80EC0895002403\r
+:104D60000A941616170618060906089500240A94D0\r
+:104D700012161306140605060895092E0394000C56\r
+:104D800011F4882352F0BB0F40F4BF2B11F460FFE5\r
+:104D900004C06F5F7F4F8F4F9F4F0895991B79E03D\r
+:104DA00004C0991F961708F0961B881F7A95C9F7BB\r
+:104DB0008095089597FB072E16F4009407D077FD91\r
+:104DC00009D00E94F42607FC05D03EF49095819509\r
+:104DD0009F4F0895709561957F4F0895EE0FFF1FC7\r
+:104DE0000590F491E02D0994AA1BBB1B51E107C06B\r
+:104DF000AA1FBB1FA617B70710F0A61BB70B881F6B\r
+:104E0000991F5A95A9F780959095BC01CD010895F9\r
+:044E1000F894FFCF44\r
+:104E1400FFFF820A730B500B1C0BE80A01B4012834\r
+:104E240008140A321E404D36223F04F203BC039A92\r
+:104E34000326033F03580371030102030405060715\r
+:044E44000809000059\r
+:106800000000EA44E944E2440400050006000700F1\r
+:10681000080009000A000B000C000D000E000F001C\r
+:1068200010001100120013001400150016001700CC\r
+:10683000180019001A001B001C001D001E001F007C\r
+:10684000200021002200230024002500260027002C\r
+:10685000280029002A002B002C002D002E002F00DC\r
+:10686000300031A132003300340035A1360037004A\r
+:10687000380082003A003B003C003D003E003F00F3\r
+:1068800040004100420043004400450046004700EC\r
+:10689000480049004A004B004C004D004E004F009C\r
+:1068A000500051005200530067005400550056003C\r
+:1068B000580059005A005B005C005D005E005F00FC\r
+:1068C0006000610062006300640000005700000087\r
+:1068D0006800000000000000000000000000000050\r
+:1068E0000000000000007300000000000000000035\r
+:1068F000E000E100E200E300E400E500E600E7007C\r
+:106900000100010001000100EA4401000100E2442D\r
+:106910000100010001000100460001004A004B0097\r
+:10692000010001004700480001000100E9440100A6\r
+:106930000100010001000100010001003A003B00DC\r
+:106940003C003D003E003F0040004100420043004B\r
+:10695000010001004C00010001004400450052000C\r
+:1069600049000100010050004F0001004D004E00A1\r
+:1069700051000100010001000100010001000100BF\r
+:1069800001000100010001000100010001000100FF\r
+:1069900001000100010001000100010001004D00A3\r
+:1069A0004A004E004B0001000100010001000100FF\r
+:1069B00001000100010001000100010001000100CF\r
+:1069C00001000100010001000100010001000100BF\r
+:1069D00001000100010001000100010001000100AF\r
+:1069E000010001000100010001000100010001009F\r
+:1069F000010001000100010001000100010001008F\r
+:00000001FF\r
diff --git a/converter/adb_usb/binary/adb_usb_rev2_unimap.hex b/converter/adb_usb/binary/adb_usb_rev2_unimap.hex
new file mode 100644 (file)
index 0000000..6b4c88f
--- /dev/null
@@ -0,0 +1,1277 @@
+:100000000C9438050C947F050C947F050C947F05A7\r
+:100010000C947F050C947F050C947F050C947F0550\r
+:100020000C947F050C947F050C947F050C944A0F6B\r
+:100030000C94F90F0C94B61D0C947F050C947F055D\r
+:100040000C947F050C947F050C947F050C942A1E5C\r
+:100050000C947F050C947F050C947F050C947F0510\r
+:100060000C947F050C947F050C947F050C947F0500\r
+:100070000C947F0566108810761188107611CD10CB\r
+:10008000F01076114511581196149614C314C31428\r
+:100090001E155A1552175217721552176D166D16F6\r
+:1000A0002817521752173E17041607090B0A1D1B73\r
+:1000B00006196405141A08151C171E1F2021232277\r
+:1000C0002E26242D25273012182F0C13280F0D341F\r
+:1000D0000E333136381110372B2C352A5829787BBE\r
+:1000E00079397A504F5152726C63685680668053EA\r
+:1000F000020103555880576D6E5462595A5B5C5D1E\r
+:100100005E5F6F60617475663E3F403C414277447C\r
+:1001100076466B47804365458048494A4B4C3D4D88\r
+:100120003B4E3A7D7E7C7F730A0025303862003A70\r
+:1001300020002530325800722F63203031323334A2\r
+:100140003536370A006164625F686F73745F6B6293\r
+:10015000645F726563763A204552524F5228256497\r
+:10016000290A000A0025303458006164625F686F14\r
+:1001700073745F6B62645F726563763A2000455208\r
+:10018000524F523A206D65646961206B6579300A7F\r
+:10019000004552524F523A206D65646961206B658B\r
+:1001A00079310A005D0A0025640020002564007C86\r
+:1001B000002530325800200025303258006164623A\r
+:1001C0005F6D6F757365207261773A205B000A007E\r
+:1001D0002530313662006164625F686F73745F6DF1\r
+:1001E0006F7573655F726563763A2000646562754A\r
+:1001F0006720656E61626C65642E0A005363616EF0\r
+:100200003A20616464723A25642C20726567333A3F\r
+:10021000253034580A00416674657220696E69742D\r
+:100220003A0A00466F756E643A206D656469612014\r
+:100230006B6579730A005363616E3A20616464727E\r
+:100240003A25642C20726567333A253034580A0009\r
+:100250004265666F726520696E69743A0A005B7365\r
+:100260005D004B6579626F617264207374617274B2\r
+:100270002E0A0055534220636F6E6669677572657A\r
+:10028000642E0A005B575D005B535D005B525D00AE\r
+:100290002E0341004400420020006B0065007900FD\r
+:1002A00062006F00610072006400200063006F0054\r
+:1002B0006E00760065007200740065007200000038\r
+:1002C0000E0374002E006D002E006B002E00000047\r
+:1002D0000403090409027400040100A032090400A7\r
+:1002E0000001030101000921110100012240000762\r
+:1002F00005810308000A0904010001030102000945\r
+:100300002111010001224D000705820308000A099E\r
+:10031000040200010300000009211101000122363E\r
+:10032000000705830308000A090403000203000014\r
+:100330000009211101000122220007058403200089\r
+:10034000010705040320000112011001000000084C\r
+:10035000EDFEDB0A0101010200010631FF0974A173\r
+:10036000010975150026FF009520750881020976A0\r
+:10037000150026FF00952075089102C0050109802F\r
+:10038000A101850216010026B7001A01002AB70054\r
+:10039000751095018100C0050C0901A101850316A6\r
+:1003A0000100269C021A01002A9C02751095018109\r
+:1003B00000C005010902A1010901A10005091901F7\r
+:1003C0002905150025019505750181029501750323\r
+:1003D00081010501093009311581257F95027508D4\r
+:1003E000810609381581257F950175088106050C60\r
+:1003F0000A38021581257F950175088106C0C00560\r
+:10040000010906A101050719E029E7150025019555\r
+:1004100008750181029501750881010508190129F6\r
+:10042000059505750191029501750391010507195F\r
+:100430000029FF150026FF00950675088100C00AF7\r
+:10044000002530325820006B6579626F6172645FFD\r
+:100450007265706F72743A20004C45443A20253022\r
+:1004600032580A00290A002575002F002575005D05\r
+:100470002800256400200025640020002564002059\r
+:10048000002564007C0025303258006D6F7573655F\r
+:100490006B6579205B62746E7C78207920762068A9\r
+:1004A0005D287265702F61636C293A205B006D6B6B\r
+:1004B0005F776865656C5F74696D655F746F5F6DAC\r
+:1004C0006178203D2025640A006D6B5F7768656563\r
+:1004D0006C5F6D61785F7370656564203D20256495\r
+:1004E0000A006D6B5F74696D655F746F5F6D617835\r
+:1004F000203D2025640A006D6B5F6D61785F73702D\r
+:10050000656564203D2025640A006D6B5F696E742B\r
+:10051000657276616C203D2025640A006D6B5F6416\r
+:10052000656C6179203D2025640A006D6B5F7768FA\r
+:1005300065656C5F74696D655F746F5F6D61782070\r
+:100540003D2025640A006D6B5F776865656C5F6DA3\r
+:1005500061785F7370656564203D2025640A006DD5\r
+:100560006B5F74696D655F746F5F6D6178203D20AE\r
+:1005700025640A006D6B5F6D61785F7370656564FB\r
+:10058000203D2025640A006D6B5F696E746572768C\r
+:10059000616C203D2025640A006D6B5F64656C61B1\r
+:1005A00079203D2025640A000A00257500363A208E\r
+:1005B000776865656C5F74696D655F746F5F6D61A9\r
+:1005C000783A20000A00257500353A20776865657D\r
+:1005D0006C5F6D61785F73706565643A20000A0036\r
+:1005E000257500343A2074696D655F746F5F6D61C5\r
+:1005F000783A20000A00257500333A206D61785F53\r
+:1006000073706565643A20000A00257500323A204F\r
+:10061000696E74657276616C286D73293A20000AE0\r
+:1006200000257500313A2064656C6179282A3130E3\r
+:100630006D73293A20000A092D2056616C75657387\r
+:10064000202D0A004D3E004D25643E20003F0073E2\r
+:1006500065742064656661756C740A00433E200011\r
+:1006600077686572652064656C74613A20637572A1\r
+:10067000736F723D25642C20776865656C3D256439\r
+:100680000A53656520687474703A2F2F656E2E7753\r
+:10069000696B6970656469612E6F72672F77696B2A\r
+:1006A000692F4D6F7573655F6B6579730A000A0971\r
+:1006B0002D204D6F7573656B6579202D0A45534369\r
+:1006C0002F713A09717569740A313A0964656C6170\r
+:1006D00079282A31306D73290A323A09696E7465B6\r
+:1006E0007276616C286D73290A333A096D61785FFF\r
+:1006F00073706565640A343A0974696D655F746F77\r
+:100700005F6D61780A353A09776865656C5F6D6180\r
+:10071000785F73706565640A363A09776865656C59\r
+:100720005F74696D655F746F5F6D61780A0A703A16\r
+:10073000097072696E742076616C7565730A643A2B\r
+:10074000097365742064656661756C74730A7570ED\r
+:100750003A092B310A646F776E3A092D310A7067B6\r
+:1007600075703A092B31300A7067646F776E3A09F9\r
+:100770002D31300A0A7370656564203D2064656C14\r
+:100780007461202A206D61785F7370656564202A2A\r
+:100790002028726570656174202F2074696D655F13\r
+:1007A000746F5F6D6178290A003F004D3E20004361\r
+:1007B0003E20004C25640A000A092D20436F6E7309\r
+:1007C0006F6C65202D0A4553432F713A0971756985\r
+:1007D000740A6D3A096D6F7573656B65790A000A65\r
+:1007E000092D204D61676963202D0A643A0964650B\r
+:1007F0006275670A783A096465627567206D61748D\r
+:100800007269780A6B3A096465627567206B65796D\r
+:10081000626F6172640A6D3A096465627567206D82\r
+:100820006F7573650A763A0976657273696F6E0A39\r
+:10083000733A097374617475730A633A09636F6E6E\r
+:10084000736F6C65206D6F64650A302D343A096CE6\r
+:1008500061796572302D34284631302D4634290AAD\r
+:10086000506175733A09626F6F746C6F6164657281\r
+:100870000A003F0074696D65725F726561643332AE\r
+:1008800028293A202530346C580A006B6579626F4C\r
+:100890006172645F69646C653A2025580A006B6573\r
+:1008A00079626F6172645F70726F746F636F6C3ABC\r
+:1008B0002025580A00686F73745F6B6579626F61F9\r
+:1008C00072645F6C65647328293A2025580A000A0F\r
+:1008D000092D20537461747573202D0A004743431A\r
+:1008E0003A20342E392E32204156522D4C49424363\r
+:1008F0003A20312E382E3073766E204156525F41A9\r
+:100900005243483A2061767233350A004F505449B9\r
+:100910004F4E533A204C554641204D4F5553454B71\r
+:1009200045592045585452414B455920434F4E5349\r
+:100930004F4C4520434F4D4D414E44204B45594D62\r
+:1009400041505F53454354494F4E20343039360AA5\r
+:10095000004255494C443A206336346164363220B3\r
+:100960002831313A31343A333620417567203330FB\r
+:100970002032303136290A005649443A2030784630\r
+:1009800045454428742E6D2E6B2E29205049443A3B\r
+:100990002030783041444228414442206B657962DE\r
+:1009A0006F61726420636F6E766572746572292060\r
+:1009B0005645523A203078303130310A00444553A0\r
+:1009C000433A20636F6E7665727420414442206B17\r
+:1009D0006579626F61726420746F205553420A001A\r
+:1009E0000A092D2056657273696F6E202D0A000A60\r
+:1009F0006D6F7573653A206F66660A000A6D6F75D4\r
+:100A000073653A206F6E0A000A6B6579626F6172D6\r
+:100A1000643A206F66660A000A6B6579626F6172DC\r
+:100A2000643A206F6E0A000A6D61747269783A2028\r
+:100A30006F66660A000A6D61747269783A206F6E9B\r
+:100A40000A000A64656275673A206F6E0A000A64DC\r
+:100A5000656275673A206F66660A000A0A626F6F00\r
+:100A6000746C6F616465722E2E2E2000433E200050\r
+:100A700011241FBECFEFD4E0DEBFCDBF04B603FE0E\r
+:100A800027C08091DC019091DD01A091DE01B09141\r
+:100A9000DF018730904BA740B04BD1F41092DC01BE\r
+:100AA0001092DD011092DE011092DF0114BE84B7B6\r
+:100AB000877F84BF0FB6F894A89580916000886105\r
+:100AC00080936000109260000FBEE0E0F8E30995AB\r
+:100AD00011E0A0E0B1E0E6E7FDE402C005900D9270\r
+:100AE000A433B107D9F721E0A4E3B1E001C01D921E\r
+:100AF000AC3DB207E1F70E94970C0C94B9260C9418\r
+:100B00000000FF93EF93E0913401F09135013097AD\r
+:100B100009F00995EF91FF910895FC0185918030CE\r
+:100B200011F0EFDFFBCF0895FF27E0E230E247FF4F\r
+:100B30000CC0419597FF09C0EDE2609570958095D6\r
+:100B40009095611D711D811D911D27FF02C021958A\r
+:100B500030E350E2AA27660F771F881F991FAA1F4C\r
+:100B6000A41710F0A41B63955A95A9F7AA3008F0B2\r
+:100B7000A95FA05DAF93F39561157105810591059E\r
+:100B800041F7ED3211F4EF93F395F21718F43F9318\r
+:100B9000F395FBCF8F91B5DFFA95E1F70895E991D1\r
+:100BA000F9918591803021F0853219F0AADFF9CFD3\r
+:100BB000089520E0E89455915532C1F3503311F473\r
+:100BC000689455915A3348F4505390F3220F022EF3\r
+:100BD000220F220F200D250FF4CF0EF421958991BD\r
+:100BE0009991533619F3533729F1533559F1BC0113\r
+:100BF00088279927E8945C3621F489919991689423\r
+:100C00005591543639F446EF7EF077FF0DC08FEFE3\r
+:100C10009FEF0AC055374AE039F0583540E121F0DE\r
+:100C2000523642E009F00895FF93EF937DDFEF9194\r
+:100C3000FF91B7CFFF93EF93FC0181918030B9F31F\r
+:100C400060DFFBCFFF93EF9368DFF1CFDF93CF93AC\r
+:100C5000CDB7DEB72596A3DFCF91DF910895282F7A\r
+:100C60002770E82FE695E695E695EF70F0E0E95CF1\r
+:100C7000FE4F87FF0AC081E090E001C0880F2A95EF\r
+:100C8000EAF780959081892308C081E090E001C057\r
+:100C9000880F2A95EAF79081892B808381E08093E1\r
+:100CA0004C0108950F931F93CF93DF93569A5E9A4A\r
+:100CB0000E9495092FEF87EA91E6215080409040ED\r
+:100CC000E1F700C0000080E592E09F938F930E94BF\r
+:100CD00026060F900F90C1E0D0E006E312E063E03B\r
+:100CE0008C2F0E949909009771F09F938F93DF9347\r
+:100CF000CF931F930F930E9426060F900F900F9093\r
+:100D00000F900F900F909FEF29EF80E091502040BF\r
+:100D10008040E1F700C000002196C031D105F9F60E\r
+:100D200063E082E00E9499098131910511F170F42C\r
+:100D300087309105F1F020F404970297F0F419C080\r
+:100D400089309105B1F00D97C1F413C08D31910533\r
+:100D500081F030F48431910561F0499771F409C054\r
+:100D6000843C910531F0873C910519F0813C910557\r
+:100D700021F481E080934D0102C010924D0163E0A7\r
+:100D800087E00E94990991E0823009F090E0909309\r
+:100D90004E01992341F083E292E09F938F930E944A\r
+:100DA00026060F900F9023E042E063E082E00E946D\r
+:100DB000190A86E192E09F938F930E9426060F9076\r
+:100DC0000F90C1E0D0E00CEF11E063E08C2F0E94A7\r
+:100DD0009909009771F09F938F93DF93CF931F939F\r
+:100DE0000F930E9426060F900F900F900F900F9078\r
+:100DF0000F908FEF99EF20E0815090402040E1F775\r
+:100E000000C000002196C031D105F9F6E7E3F1E01A\r
+:100E100080E18E0F11928E13FDCF8091BE01816013\r
+:100E20008093BE018CEE91E00E948D05569A5E98EB\r
+:100E3000DF91CF911F910F910895CF93DF938FE7AB\r
+:100E40009BEB0197F1F700C000000E94150AEC012E\r
+:100E5000009711F481E0BDC097FD05C08091470166\r
+:100E6000816080934701D7FF05C0809147018E7F45\r
+:100E700080934701ED2FFF27EF73FF27CE018F737C\r
+:100E80009927C6FF02C080549109D6FF02C0E054E2\r
+:100E9000F109A09136010A2E000CBB0BBD010E9486\r
+:100EA0006E2681382FEF920714F481E89FEF2227F6\r
+:100EB0003327281B390B21388FEF380714F421E82A\r
+:100EC0003FEF219520934801CF01BD010E946E267E\r
+:100ED00081382FEF920714F481E89FEF9195819567\r
+:100EE000910981382FEF920714F481E89FEF8195E3\r
+:100EF000809349018091BE0183FF60C086ED91E03F\r
+:100F00000E948D05DF93CF9380ED91E09F938F93A7\r
+:100F10000E9426068EEC91E00E948D058DEB91E0FB\r
+:100F20000E948D0580913601282F082E000C330B6E\r
+:100F30003F938F9388EB91E09F938F930E942606B7\r
+:100F400086EB91E00E948D05809147011F928F935F\r
+:100F500081EB91E09F938F930E9426068FEA91E0A8\r
+:100F60000E948D0580914801282F082E000C330B1C\r
+:100F70003F938F938CEA91E09F938F930E94260674\r
+:100F80008AEA91E00E948D0580914901282F082E60\r
+:100F9000000C330B3F938F9387EA91E09F938F93DD\r
+:100FA0000E94260684EA91E00E948D058DB79EB7C7\r
+:100FB00044960FB6F8949EBF0FBE8DBF87E491E0B4\r
+:100FC0000E94E8118091360191E088300CF090E0A9\r
+:100FD000890F80933601DF91CF9108951F93CF93AE\r
+:100FE000DF9310924C01C0910001D09101018FEF6D\r
+:100FF0009FEF9093010180930001CF3F8FEFD807BF\r
+:1010000009F06AC08FE79BEB0197F1F700C0000081\r
+:1010100082E00E94120AEC01892B09F05DC08091E8\r
+:101020004E01882309F458C087E00E94120A0097F5\r
+:1010300009F452C09C012F77332722303105A1F0EB\r
+:1010400048F42115310569F02130310599F4807893\r
+:101050008A641AC02330310551F02F373105A1F0D1\r
+:1010600009C08078826410C0807889640DC080785F\r
+:1010700088640AC081E991E09F938F930E942606BD\r
+:101080000F900F9081E18FC0292F33272F773327BF\r
+:101090002130310579F050F02230310579F02330DC\r
+:1010A000310581F4EC01D078D86416C0EC01D07819\r
+:1010B000D26412C0EC01D078DA640EC0EC01D078B2\r
+:1010C000D9640AC08EE791E09F938F930E94260611\r
+:1010D0000F900F9080E167C08091BE0181FF18C022\r
+:1010E000209709F45DC08AE691E00E948D05DF93A8\r
+:1010F000CF9385E691E09F938F930E94260683E627\r
+:1011000091E00E948D050F900F900F900F9003C0FB\r
+:10111000209709F445C0CF379FE7D90711F48FE72F\r
+:1011200005C0CF3F8FEFD80721F48FEF0E942F0625\r
+:1011300039C02D2F3327822F1C2F2F3F310581F4EB\r
+:10114000DF93CF9385E491E09F938F930E942606CF\r
+:101150000E9452060F900F900F900F908C2F23C07B\r
+:1011600090914D01992381F0A9014F775527423382\r
+:10117000510521F42078822F8A6006C04A3051053B\r
+:1011800019F42078822F82630E942F061F3F51F0AE\r
+:10119000DC2FCC27CF6FD0930101C093000102C098\r
+:1011A00080E001C081E0DF91CF911F910895E82F89\r
+:1011B000F0E0E95CFE4F2081822F90E021E030E0FA\r
+:1011C00002C0220F331F6A95E2F72823392381E0FA\r
+:1011D000232B09F480E00895E82FF0E0E95CFE4F4E\r
+:1011E00080810895CF92DF92EF92FF920F931F9329\r
+:1011F000CF93DF938091BE0181FF35C087E391E0FB\r
+:101200000E948D0587E3E82E81E0F82EC0E0D0E053\r
+:1012100092E3C92E91E0D92E0AE211E0DF93CF9339\r
+:10122000DF92CF920E9426068FE291E00E948D0508\r
+:10123000F70181917F010E944F1D1F928F931F9391\r
+:101240000F930E94260688E291E00E948D05219668\r
+:101250008DB79EB708960FB6F8949EBF0FBE8DBF90\r
+:10126000C031D105D9F6DF91CF911F910F91FF9039\r
+:10127000EF90DF90CF900895682F609582E00C94F6\r
+:10128000520A509A83E091E00197F1F700C0000004\r
+:1012900050989AEB9A95F1F700C00895509A8AEB0E\r
+:1012A0008A95F1F700C0509883E091E00197F1F73B\r
+:1012B00000C000000895EF92FF920F931F93CF9309\r
+:1012C000DF93C0E0D0E090E8E92EF12C082F10E089\r
+:1012D000C7010C2E02C0959587950A94E2F78023EA\r
+:1012E0009123892B19F00E944E0902C00E944109E6\r
+:1012F0002196C830D10561F7DF91CF911F910F91F1\r
+:10130000FF90EF900895489B06C023E02A95F1F7DF\r
+:1013100000000197C1F70895489906C023E02A9577\r
+:10132000F1F700000197C1F7089558985098089573\r
+:101330000895CF92DF92EF92FF920F931F93CF9376\r
+:10134000DF9300D0CDB7DEB7F894509AE3EFFBE01F\r
+:101350003197F1F700C000006A8389830E944E092B\r
+:101360006A816C6089818295807F862B0E945B09EF\r
+:101370000E94410984EF91E00E948C09892B21F49D\r
+:10138000789482EE9FEF43C084EF91E00E9483093E\r
+:10139000009711F478943BC011E1C12CD12C02E8E4\r
+:1013A00082E890E00E948C097C01882351F1992702\r
+:1013B0000E948309882329F1CC0CDD1C902F9E19F3\r
+:1013C000E81A9E1518F46894C0F806C0113121F48B\r
+:1013D00078948CEE9FEF1BC0115011F78FE591E0D0\r
+:1013E0000E948C09892B21F478948BEE9FEF0FC01B\r
+:1013F0008BE590E00E948309892BB1F77894C601B0\r
+:1014000006C07894812F90E09195819591090F9075\r
+:101410000F90DF91CF911F910F91FF90EF90DF9090\r
+:10142000CF90089560E00C94990960E083E00C94FB\r
+:1014300099091F93CF93DF9300D01F92CDB7DEB7EA\r
+:10144000182FF894509A83EF9BE00197F1F700C0B2\r
+:1014500000002B834A8369830E944E096981862F8D\r
+:1014600088601295107F812B0E945B090E944109C0\r
+:101470008FE193E00197F1F700C000000E944E0950\r
+:101480004A81842F0E945B092B81822F0E945B0975\r
+:101490000E94410978940F900F900F90DF91CF91A7\r
+:1014A0001F910895262F277040E062E00C94190ADE\r
+:1014B00080915A0108959FB7F894109251019FBFEF\r
+:1014C0009091D301943009F057C09091E9009F703A\r
+:1014D0003091EC00232F217030FD20E8922B24E086\r
+:1014E0002093E9002091EB0020FF43C02091EE0003\r
+:1014F00027FF3FC020914F01222321F02091E800D7\r
+:1015000025FF37C010924F0126E03091E80035FDED\r
+:1015100015C03091D301343061F53091EB0035FDC9\r
+:1015200028C0215021F481E080934F0122C0EFE9CF\r
+:10153000FFE03197F1F700C00000E7CF8093F100A2\r
+:101540008091E80085FD0AC08091E80080FFFCCF13\r
+:101550008091E8008E778093E80006C08FB7F894FA\r
+:1015600021E0209351018FBF9F709093E90080E0AC\r
+:1015700008959F709093E9008FEF0895CF93DF93C4\r
+:1015800000D01F92CDB7DEB79C018091D30184308B\r
+:1015900019F593E099833B832A839093E9008FEFB9\r
+:1015A0009091E800815095FD06C095ED9A95F1F770\r
+:1015B00000008111F5CF8091E80085FF0DC040E06B\r
+:1015C00050E063E070E0CE0101960E94580D8091DA\r
+:1015D000E8008E778093E8000F900F900F90DF91D6\r
+:1015E000CF910895CF93DF9300D01F92CDB7DEB790\r
+:1015F0002091D301243021F522E029839B838A8323\r
+:1016000083E08093E9008FEF9091E800815095FD91\r
+:1016100006C095ED9A95F1F700008111F5CF809104\r
+:10162000E80085FF0DC040E050E063E070E0CE01CF\r
+:1016300001960E94580D8091E8008E778093E80013\r
+:101640000F900F900F90DF91CF9108952091D301CB\r
+:101650002430F1F422E02093E9002FEF3091E800EC\r
+:10166000215035FD06C035ED3A95F1F70000211106\r
+:10167000F5CF2091E80025FF0BC040E050E065E089\r
+:1016800070E00E94580D8091E8008E778093E8000A\r
+:101690000895CF93DF932091D301243039F521E0D1\r
+:1016A0002093E9002FEF3091E800215035FD06C06E\r
+:1016B00035ED3A95F1F700002111F5CF2091E800C2\r
+:1016C00025FF14C0EC0140E050E068E070E00E94AB\r
+:1016D000580D8091E8008E778093E80088E0FE0145\r
+:1016E000A2E5B1E001900D928A95E1F7DF91CF91EB\r
+:1016F00008958CE892E00C948D05209150012F5FA5\r
+:10170000822F62E30E947F26992319F020935001D3\r
+:1017100008951092500180915101882371F18091B8\r
+:10172000D301843041F58091E9008F702091EC0065\r
+:10173000922F917020FD90E8892B94E09093E9001E\r
+:101740009091EB0090FF14C09091EE0097FF10C0B5\r
+:101750009091E80095FF03C01092F100F9CF9091AD\r
+:10176000E80090FF05C09091E8009E779093E80014\r
+:101770008F708093E90010925101089542E061EC6E\r
+:1017800081E00E94610E42E061EC82E00E94610E05\r
+:1017900042E061EC83E00E94610E42E261EC84E091\r
+:1017A0000C94610E8091D501833009F453C030F45C\r
+:1017B000813071F0823009F48CC008958A3009F4C8\r
+:1017C00078C08B3009F45EC0893009F09AC020C01F\r
+:1017D0008091D401813A09F094C08091E800877F1C\r
+:1017E0008093E8008091D8019091D901892B21F450\r
+:1017F00068E082E591E003C060E080E090E070E0A6\r
+:101800000E94A30D8091E8008B778093E8000895F3\r
+:101810008091D401813209F074C08091D8019091F7\r
+:10182000D901892B09F06DC08091E800877F8093F2\r
+:10183000E8008091E80082FD05C08091D30181110C\r
+:10184000F8CF5FC08091F10080935A018091E80049\r
+:101850008B7753C08091D401813A09F052C08091B6\r
+:10186000D8019091D901892B09F04BC08091E800F3\r
+:10187000877F8093E8008091E80080FFFCCF809113\r
+:101880000C0136C08091D4018132D9F58091D80104\r
+:101890009091D901892BA9F58091E800877F8093E9\r
+:1018A000E8000E94960E8091D60180930C010C9462\r
+:1018B00073178091D401813221F58091E800877FF0\r
+:1018C0008093E8000E94960E8091D70180935B017F\r
+:1018D00008958091D401813AA1F48091E800877F36\r
+:1018E0008093E8008091E80080FFFCCF80915B014D\r
+:1018F0008093F1008091E8008E778093E8000C944B\r
+:10190000960E089508950895089588E892E00E943B\r
+:101910008D050C94840C0E94751D8091D101882343\r
+:1019200029F00E94A01D81110C94420D089584B7E6\r
+:10193000877F84BF0FB6F894A89580916000886176\r
+:1019400080936000109260000FBE90E080E80FB6B8\r
+:10195000F89480936100909361000FBE0E94820C06\r
+:101960000E9420120E94E70E0E943A0F8091E2002E\r
+:1019700084608093E2008BE59AE00E944A1D78948F\r
+:101980008091D3018430E1F783E792E00E948D05D6\r
+:101990000E94221282E091E00E948E1182E692E083\r
+:1019A0000E948D050E94830C8091D301853039F40B\r
+:1019B0008EE592E00E948D050E948B0CF5CF0E946F\r
+:1019C0002812F2CF0C94B41D84E892E00E948D0599\r
+:1019D0000C94E20C292F332723303105C9F064F42D\r
+:1019E0002130310581F02230310509F043C084E710\r
+:1019F00090E024ED32E042C021323105F1F0223294\r
+:101A0000310541F137C082E190E028E433E036C08F\r
+:101A100099278130910541F08230910541F0892B61\r
+:101A200049F5E0EDF2E005C0E0ECF2E002C0E0E9EB\r
+:101A3000F2E0849190E09F0121C06430D8F4E62F59\r
+:101A4000F0E0EE0FFF1FEF5DFE4F2081318189E056\r
+:101A500090E014C0643070F470E0FB01EE0FFF1FE3\r
+:101A6000E75EFE4F20813181FB01EB5EFE4F8081FE\r
+:101A700090E004C080E090E020E030E0FA013183A3\r
+:101A80002083089584E089BD86E089BD09B400FE05\r
+:101A9000FDCF8091D8008F7D8093D8008091E000A9\r
+:101AA00082608093E0008091E00081FDFCCF08958A\r
+:101AB000CF92DF92EF92FF920F931F93CF93DF931A\r
+:101AC000EC018B016A010E94B50E811133C0C11473\r
+:101AD000D10439F0F60180819181081B190BC80FE0\r
+:101AE000D91FE12CF12C0115110519F18091E800A5\r
+:101AF00085FD16C08091E8008E778093E800C114C0\r
+:101B0000D10449F0F60180819181E80EF91EF1823D\r
+:101B1000E08285E00FC00E94B50E882321F30AC041\r
+:101B200089918093F10001501109FFEFEF1AFF0A2C\r
+:101B3000DACF80E0DF91CF911F910F91FF90EF906E\r
+:101B4000DF90CF9008952091DA013091DB012617C4\r
+:101B5000370748F06115710539F42091E8002E77B8\r
+:101B60002093E80001C0B90140E06115710591F1D1\r
+:101B70002091D301222309F440C0253009F43FC04D\r
+:101B80002091E80023FD3DC02091E80022FD2FC0F8\r
+:101B90002091E80020FFE9CF2091F20030E0FC0125\r
+:101BA000CF016115710559F02830310540F481915C\r
+:101BB0008093F100615071092F5F3F4FF1CF41E0F9\r
+:101BC0002830310509F040E02091E8002E7720937D\r
+:101BD000E800CBCF4111CCCF0AC08091D30188233C\r
+:101BE00061F0853061F08091E80083FD0AC080914A\r
+:101BF000E80082FFF2CF80E0089582E0089583E05C\r
+:101C0000089581E008952091DA013091DB012617D3\r
+:101C1000370748F06115710539F42091E8002E77F7\r
+:101C20002093E80001C0B901FC0120E061157105B5\r
+:101C300079F18091D301882309F43DC0853009F4FE\r
+:101C40003CC08091E80083FD3AC08091E80082FDAD\r
+:101C50002CC08091E80080FFE9CF8091F20090E0F5\r
+:101C60006115710559F08830910540F42491209355\r
+:101C7000F1003196615071090196F2CF21E0089789\r
+:101C800009F020E08091E8008E778093E800CECFC5\r
+:101C90002111CFCF0AC08091D301882361F0853014\r
+:101CA00061F08091E80083FD0AC08091E80082FF26\r
+:101CB000F2CF80E0089582E0089583E0089581E006\r
+:101CC0000895982F953058F59093E900981739F0BA\r
+:101CD0007091EC002091ED005091F00003C0242F92\r
+:101CE000762F50E021FF19C03091EB003E7F3093FA\r
+:101CF000EB003091ED003D7F3093ED003091EB0033\r
+:101D000031603093EB007093EC002093ED00509322\r
+:101D1000F0002091EE0027FF07C09F5FD3CF8F70A8\r
+:101D20008093E90081E0089580E008958091D401D6\r
+:101D300087FF11C08091E80082FD05C08091D3012A\r
+:101D40008111F8CF11C08091E8008B770BC0809192\r
+:101D5000D301882349F08091E80080FFF8CF80917B\r
+:101D6000E8008E778093E80008952091E400309198\r
+:101D7000E50095E64091EC00842F817040FF22C081\r
+:101D80008091E80080FD1CC08091D301882391F0F0\r
+:101D9000853091F08091EB0085FD10C04091E4000A\r
+:101DA0005091E5004217530729F39A01915011F71A\r
+:101DB00084E0089582E0089583E0089581E0089525\r
+:101DC00080E008954091E80042FFDECF08950E9430\r
+:101DD000440F0E94470FE0EEF0E080818160808335\r
+:101DE000E8EDF0E080818F77808319BCE3E6F0E0D6\r
+:101DF0008081816080831092D20108950E94440FF7\r
+:101E00000E94470F8091D8008F778093D8008091EF\r
+:101E1000D80080688093D8008091D8008F7D80930F\r
+:101E2000D80084E089BD86E089BD09B400FEFDCFFD\r
+:101E30001092D3011092CF011092D1011092D001D3\r
+:101E400042E060E080E00E94610E8091E1008E7FC0\r
+:101E50008093E1008091E20081608093E2008091B4\r
+:101E6000E20088608093E2008091E0008E7F8093A2\r
+:101E7000E0000895E3E6F0E080818E7F808381E0DA\r
+:101E80008093D2010C94FE0E1092E20008951092FD\r
+:101E9000E10008951F920F920FB60F9211242F9315\r
+:101EA0003F934F935F936F937F938F939F93AF93E2\r
+:101EB000BF93EF93FF938091E10082FF0BC080916D\r
+:101EC000E20082FF07C08091E1008B7F8093E100F8\r
+:101ED0000E947D0B8091E10080FF19C08091E2009B\r
+:101EE00080FF15C08091E2008E7F8093E200809198\r
+:101EF000E20080618093E2008091D800806280934C\r
+:101F0000D80019BC85E08093D3010E94850C809194\r
+:101F1000E10084FF30C08091E20084FF2CC084E0A7\r
+:101F200089BD86E089BD09B400FEFDCF8091D8004F\r
+:101F30008F7D8093D8008091E1008F7E8093E100B7\r
+:101F40008091E2008F7E8093E2008091E2008160C8\r
+:101F50008093E2008091CF01882311F084E007C0D4\r
+:101F60008091E30087FD02C081E001C083E080939F\r
+:101F7000D3010E94E40C8091E10083FF29C080918D\r
+:101F8000E20083FF25C08091E100877F8093E1001C\r
+:101F900082E08093D3011092CF018091E1008E7F87\r
+:101FA0008093E1008091E2008E7F8093E200809137\r
+:101FB000E20080618093E20042E060E080E00E9405\r
+:101FC000610E8091F00088608093F0000E94790B90\r
+:101FD000FF91EF91BF91AF919F918F917F916F9101\r
+:101FE0005F914F913F912F910F900FBE0F901F90D7\r
+:101FF00018951F920F920FB60F9211242F933F93B3\r
+:102000004F935F936F937F938F939F93AF93BF9300\r
+:10201000CF93DF93EF93FF93C091E900CF7080914E\r
+:10202000EC00D82FD17080FDD0E81092E9008091AB\r
+:10203000F000877F8093F00078940E943D1010920A\r
+:10204000E9008091F00088608093F000CD2BCF7084\r
+:10205000C093E900FF91EF91DF91CF91BF91AF91D4\r
+:102060009F918F917F916F915F914F913F912F91B0\r
+:102070000F900FBE0F901F9018951F93CF93DF9373\r
+:10208000CDB7DEB7AA970FB6F894DEBF0FBECDBFAF\r
+:10209000E4EDF1E088E08E0F9091F10091938E13C2\r
+:1020A000FBCF0E94D20B8091E80083FF1FC180917B\r
+:1020B000D4019091D501492F50E04A30510508F0E4\r
+:1020C00015C1FA01E65CFF4F0C949F26803881F021\r
+:1020D000823809F00BC18091D8018F708093E9009C\r
+:1020E0008091EB0085FB882780F91092E90006C0FB\r
+:1020F0008091D0019091D101911182609091E8007E\r
+:10210000977F9093E8008093F1001092F100C8C08F\r
+:10211000282F2D7F09F0EAC0882319F0823061F062\r
+:10212000E5C08091D601813009F0E0C0933009F01C\r
+:1021300080E08093D1012BC08091D601811127C00E\r
+:102140008091D8018F7009F4D1C08093E90020916B\r
+:10215000EB0020FF1CC0933021F48091EB008062E3\r
+:1021600014C09091EB0090619093EB0021E030E07F\r
+:10217000A90102C0440F551F8A95E2F74093EA0077\r
+:102180001092EA008091EB0088608093EB0010923F\r
+:10219000E9008091E800877F86C08111A7C0109177\r
+:1021A000D6011F778091E3008078812B8093E30034\r
+:1021B0008091E800877F8093E8000E94960E8091CE\r
+:1021C000E80080FFFCCF8091E30080688093E3000B\r
+:1021D000111102C082E001C083E08093D30186C068\r
+:1021E0008058823008F082C08091D6019091D7014A\r
+:1021F0008C3D53E0950779F583E08A838AE28983F1\r
+:102200004FB7F894DE01139620E03EE051E2E32F51\r
+:10221000F0E050935700E49120FF03C0E295EF7087\r
+:102220003F5FEF708E2F90E0EA3010F0C79601C04C\r
+:10223000C0968D939D932F5F243149F74FBF8091B6\r
+:10224000E800877F8093E8006AE270E0CE010196A3\r
+:102250000E94A30D14C0AE014F5F5F4F6091D80183\r
+:102260000E94EA0CBC01892B09F440C09091E8005F\r
+:10227000977F9093E80089819A810E94030E809154\r
+:10228000E8008B778093E80031C0803879F5809141\r
+:10229000E800877F8093E8008091CF018093F10070\r
+:1022A0008091E8008E778093E8000E94960E1EC011\r
+:1022B00081111CC09091D6019230C0F48091E80049\r
+:1022C000877F8093E8009093CF010E94960E8091C3\r
+:1022D000CF01811106C08091E30087FD02C081E03B\r
+:1022E00001C084E08093D3010E94BE0B8091E8007E\r
+:1022F00083FF0AC08091E800877F8093E800809187\r
+:10230000EB0080628093EB00AA960FB6F894DEBFD4\r
+:102310000FBECDBFDF91CF911F91089590936101C2\r
+:10232000809360010895E0916001F0916101309720\r
+:1023300021F00190F081E02D099480E00895EF9262\r
+:10234000FF920F931F93CF93DF93E0916001F09181\r
+:1023500061013097B1F18C010280F381E02D099584\r
+:102360008091BE0182FF2DC080FF04C087E494E00D\r
+:102370000E948D05E80118E081E4E82E84E0F82E43\r
+:102380008091BE0180FF0BC088811F928F93FF92C6\r
+:10239000EF920E9426060F900F900F900F90115011\r
+:1023A00021961111EDCF8091BE0180FF0AC08FE30D\r
+:1023B00094E0DF91CF911F910F91FF90EF900C94DB\r
+:1023C0008D05DF91CF911F910F91FF90EF900895B0\r
+:1023D000E0916001F0916101309721F00480F58176\r
+:1023E000E02D0994089520915E0130915F018217DC\r
+:1023F000930771F090935F0180935E01E09160011B\r
+:10240000F0916101309721F00680F781E02D099469\r
+:10241000089520915C0130915D018217930771F05E\r
+:1024200090935D0180935C01E0916001F091610106\r
+:10243000309721F00084F185E02D099408950895E6\r
+:102440000C941F120E94DF1D0E9452060C949809E2\r
+:10245000CF92DF92EF92FF920F931F93CF93DF9370\r
+:1024600000D000D000D0CDB7DEB70E94EE0783E6E3\r
+:10247000C82E81E0D82E00E010E0E02E802F0E94D0\r
+:10248000EC08F60141916F01F42EF826B1F40F5FCC\r
+:102490001F4F0031110589F78FEF89838A831B82D3\r
+:1024A0000E94E81D8160782F9D838C8349815A8129\r
+:1024B0006B818D810E94E91247C09091BE0191FF0E\r
+:1024C00004C08E830E94F2088E8120E030E04F2D00\r
+:1024D00050E0922FBA01022E02C0759567950A94BA\r
+:1024E000E2F760FF2BC02983EA8221E030E0690136\r
+:1024F00002C0CC0CDD1C9A95E2F790E08C219D2166\r
+:10250000892B09F420E02B830E94E81D8160782F3D\r
+:102510009D838C8349815A816B818D810E94E91250\r
+:1025200049815A816B817C818D810E94621DF801F5\r
+:10253000ED59FE4F8081C826C08206C02F5F3F4FF5\r
+:102540002830310531F6A3CF0E94611D0E94B620CC\r
+:102550000E941D07109162010E949311181741F10A\r
+:102560000E949311809362019091BE0192FF0EC070\r
+:1025700090FF0CC01F928F9389E594E09F938F93F7\r
+:102580000E9426060F900F900F900F90809162018D\r
+:1025900026960FB6F894DEBF0FBECDBFDF91CF9168\r
+:1025A0001F910F91FF90EF90DF90CF900C94731DCF\r
+:1025B00026960FB6F894DEBF0FBECDBFDF91CF9148\r
+:1025C0001F910F91FF90EF90DF90CF9008950C94A2\r
+:1025D0003C09CF93DF93CDB7DEB72B970FB6F894B6\r
+:1025E000DEBF0FBECDBF942F4F83252F588769873D\r
+:1025F0007A878B874A855B85452B21F02F3F09F52C\r
+:102600009F3FF9F4DE01119686E0FD0111928A9553\r
+:10261000E9F785E0FE01379601900D928A95E1F782\r
+:1026200049815A816B817C818D819E810E941C1A17\r
+:102630002B960FB6F894DEBF0FBECDBFDF91CF91C2\r
+:1026400008954F81588569857A858B850E94621D22\r
+:10265000D9CFCF93882309F4CDC0C82F823859F43D\r
+:102660000E94931181FDC6C089E30E94AB1C0E94A9\r
+:10267000241D89E30CC0833879F40E94931180FDF6\r
+:10268000B9C083E50E94AB1C0E94241D83E50E9413\r
+:10269000C81CCF910C94241D843859F40E949311C6\r
+:1026A00082FDA8C087E40E94AB1C0E94241D87E421\r
+:1026B000EECF8CEF8C0F813A48F48C2F0E94E223EE\r
+:1026C000811198C08C2F0E94AB1CE3CF80E28C0F4D\r
+:1026D000883048F4C77081E001C0880FCA95EAF7D6\r
+:1026E0000E94EA1CD6CF8BE58C0F833078F4C53A74\r
+:1026F00029F0C63A31F083E890E005C081E890E027\r
+:1027000002C082E890E0CF910C94F31188E58C0F21\r
+:10271000853108F06FC0C83A61F1C93A69F1CA3A27\r
+:1027200071F1CB3A79F1CC3A81F1CD3A89F1CE3AD7\r
+:1027300091F1CF3A99F1C13BA1F1C03BA9F1C23B64\r
+:10274000B1F1C33BB9F1C43BC1F1C53BC9F1C63BD3\r
+:10275000D1F1C73BD9F1C83BE1F1C93BE9F1CA3B33\r
+:10276000F1F1CB3BF9F1CC3B09F43FC080E090E0C4\r
+:102770003EC082EE90E03BC089EE90E038C08AEE29\r
+:1027800090E035C085EB90E032C086EB90E02FC042\r
+:1027900083EB90E02CC084EB90E029C087EB90E0C5\r
+:1027A00026C08CEC90E023C08DEC90E020C083E844\r
+:1027B00091E01DC08AE891E01AC082E991E017C05B\r
+:1027C00084E991E014C081E292E011C083E292E0DA\r
+:1027D0000EC084E292E00BC085E292E008C086E27F\r
+:1027E00092E005C087E292E002C08AE292E0CF91D7\r
+:1027F0000C940912CF910895882309F44BC08238B4\r
+:1028000059F40E94931181FF45C089E30E94AB1CDB\r
+:102810000E94241D89E30CC0833871F40E94931137\r
+:1028200080FF38C083E50E94AB1C0E94241D83E515\r
+:102830000E94C81C0C94241D843859F40E949311E2\r
+:1028400082FF28C087E40E94AB1C0E94241D87E4FD\r
+:10285000EFCF9CEF980F913A58F390E2980F983091\r
+:1028600050F4877091E001C0990F8A95EAF7892F9B\r
+:102870000E94F01CDFCF9BE5980F933020F480E09E\r
+:1028800090E00C94F311885A853120F480E090E0B8\r
+:102890000C9409120895882321F00E94EA1C0C94DC\r
+:1028A000241D0895882321F00E94F01C0C94241DFF\r
+:1028B0000895CF92DF92EF92FF920F931F93CF93E1\r
+:1028C000DF9300D000D000D0CDB7DEB725E0FC010B\r
+:1028D000DE01119601900D922A95E1F7FC014081ED\r
+:1028E0003181F280258122952F7063817481672B5D\r
+:1028F00009F4D8C23F3F19F44F3F09F4D3C26C0129\r
+:1029000049833A8389819A812E830E946A1C182FF9\r
+:10291000092F0E94691C0E94791BE02FE295EF703D\r
+:10292000F0E0EC5BFF4F2E810C949F26802F807F80\r
+:10293000902F9F70092F882311F00295007FFF20B0\r
+:1029400049F0002309F45FC2802F0E94FD1C0E9401\r
+:10295000241D59C2812F0E94FC13002309F4A2C236\r
+:10296000802F0E94031D26960FB6F894DEBF0FBE7F\r
+:10297000CDBFDF91CF911F910F91FF90EF90DF902E\r
+:10298000CF900C94241D802F807F902F9F70092F53\r
+:10299000803211F00295007F112319F0113001F1FE\r
+:1029A00029C0FF20A9F0802F222349F1213039F5D9\r
+:1029B00026960FB6F894DEBF0FBECDBFDF91CF9144\r
+:1029C0001F910F91FF90EF90DF90CF900C940D1D11\r
+:1029D000222319F0213009F465C20E94101D2CC079\r
+:1029E000FF20E9F0263008F05DC20E94E71C80233A\r
+:1029F00029F022C0FF20F1F0211115C0802F26966A\r
+:102A00000FB6F894DEBF0FBECDBFDF91CF911F91FF\r
+:102A10000F91FF90EF90DF90CF900C944B142530E6\r
+:102A200008F040C209C0F601858180FFECC18F70BB\r
+:102A30008583E4CF2111FBC1802F69C1202F26950A\r
+:102A40002695237030E02115310521F02130310524\r
+:102A5000C9F028C2FF2021F0812F902F937002C06F\r
+:102A600080E090E026960FB6F894DEBF0FBECDBF93\r
+:102A7000DF91CF911F910F91FF90EF90DF90CF905A\r
+:102A80000C94F311FF2021F0812F902F937002C03E\r
+:102A900080E090E026960FB6F894DEBF0FBECDBF63\r
+:102AA000DF91CF911F910F91FF90EF90DF90CF902A\r
+:102AB0000C940912812FFF2019F00E943C1F02C0C4\r
+:102AC0000E94A41F26960FB6F894DEBF0FBECDBF9E\r
+:102AD000DF91CF911F910F91FF90EF90DF90CF90FA\r
+:102AE0000C942920802F837009F078C0F110DAC18E\r
+:102AF000812F829586958770880F880F912F9F7000\r
+:102B0000C92ED12CE12CF12C082E04C0CC0CDD1CDC\r
+:102B1000EE1CFF1C0A94D2F714FF12C04FE050E0E5\r
+:102B200060E070E004C0440F551F661F771F8A9550\r
+:102B3000D2F7CB01BA01609570958095909503C04E\r
+:102B400060E070E0CB01202F269526952370422F60\r
+:102B500050E042305105D1F04330510559F16C2914\r
+:102B60007D298E299F294130510541F126960FB6C6\r
+:102B7000F894DEBF0FBECDBFDF91CF911F910F91B3\r
+:102B8000FF90EF90DF90CF900C948E1B6C297D29E5\r
+:102B90008E299F2926960FB6F894DEBF0FBECDBFB3\r
+:102BA000DF91CF911F910F91FF90EF90DF90CF9029\r
+:102BB0000C94A01B0E948E1BC701B60126960FB66F\r
+:102BC000F894DEBF0FBECDBFDF91CF911F910F9163\r
+:102BD000FF90EF90DF90CF900C947C1BFF2019F0BA\r
+:102BE000802F817001C08695882309F45BC1812FF5\r
+:102BF000829586958770880F880F912F9F70C92EB8\r
+:102C0000D12CE12CF12C082E04C0CC0CDD1CEE1CC8\r
+:102C1000FF1C0A94D2F714FF12C04FE050E060E0AE\r
+:102C200070E004C0440F551F661F771F8A95D2F7C6\r
+:102C3000CB01BA01609570958095909503C060E0D6\r
+:102C400070E0CB01202F269526952370422F50E06F\r
+:102C500042305105D1F04330510559F16C297D299D\r
+:102C60008E299F294130510541F126960FB6F894DF\r
+:102C7000DEBF0FBECDBFDF91CF911F910F91FF90AF\r
+:102C8000EF90DF90CF900C94451C6C297D298E2904\r
+:102C90009F2926960FB6F894DEBF0FBECDBFDF91F9\r
+:102CA000CF911F910F91FF90EF90DF90CF900C94F8\r
+:102CB000571C0E94451CC701B60126960FB6F89412\r
+:102CC000DEBF0FBECDBFDF91CF911F910F91FF905F\r
+:102CD000EF90DF90CF900C94331C103F41F118F42B\r
+:102CE000103E48F48BC0123F09F450C0D8F1133F96\r
+:102CF00009F460C083C01F70802F8F71FF2021F006\r
+:102D00000E94CC1B812F7BCE0E94ED1B812F26962B\r
+:102D10000FB6F894DEBF0FBECDBFDF91CF911F91EC\r
+:102D20000F91FF90EF90DF90CF900C945214FF2002\r
+:102D3000A9F0253008F0B6C0802F8F7126960FB607\r
+:102D4000F894DEBF0FBECDBFDF91CF911F910F91E1\r
+:102D5000FF90EF90DF90CF900C94121C263008F07B\r
+:102D6000A1C0EACFFF20A1F0802F8F7126960FB669\r
+:102D7000F894DEBF0FBECDBFDF91CF911F910F91B1\r
+:102D8000FF90EF90DF90CF900C94CC1BFF2061F36D\r
+:102D9000802F8F7126960FB6F894DEBF0FBECDBF81\r
+:102DA000DF91CF911F910F91FF90EF90DF90CF9027\r
+:102DB0000C94ED1BFF2091F0802F8F7126960FB69B\r
+:102DC000F894DEBF0FBECDBFDF91CF911F910F9161\r
+:102DD000FF90EF90DF90CF900C94B71B26960FB624\r
+:102DE000F894DEBF0FBECDBFDF91CF911F910F9141\r
+:102DF000FF90EF90DF90CF900C94B21BFF20A1F0DA\r
+:102E0000222309F4B1CF812F26960FB6F894DEBFA6\r
+:102E10000FBECDBFDF91CF911F910F91FF90EF902B\r
+:102E2000DF90CF900C942913222309F4B1CF812F86\r
+:102E300026960FB6F894DEBF0FBECDBFDF91CF91BF\r
+:102E40001F910F91FF90EF90DF90CF900C94FC13A7\r
+:102E5000402F4F70612FC6010E94B21E26960FB6FA\r
+:102E6000F894DEBF0FBECDBFDF91CF911F910F91C0\r
+:102E7000FF90EF90DF90CF900C94C41A402F4F70CA\r
+:102E8000612FC60126960FB6F894DEBF0FBECDBFE8\r
+:102E9000DF91CF911F910F91FF90EF90DF90CF9036\r
+:102EA0000C94B51E26960FB6F894DEBF0FBECDBFAC\r
+:102EB000DF91CF911F910F91FF90EF90DF90CF9016\r
+:102EC00008950E940A1D0E94D91C0E94241D0E9480\r
+:102ED0005D210E94292080E090E00E94F31180E0B3\r
+:102EE00090E00C9409120E94FA1C0C9461170E9445\r
+:102EF0006A1C292F22952F7030E02C3031054CF4BC\r
+:102F00002A3031056CF4225031092230310588F421\r
+:102F100007C02C30310549F02F30310531F009C0A0\r
+:102F2000803E48F0803F29F406C093FB882780F953\r
+:102F3000089580E0089581E00895CF93DF9300D055\r
+:102F400000D01F92CDB7DEB70F900F900F900F906B\r
+:102F50000F90DF91CF910895CF93DF9300D000D0F1\r
+:102F600000D0CDB7DEB726960FB6F894DEBF0FBE01\r
+:102F7000CDBFDF91CF910895CF93DF93C0917301BF\r
+:102F800080917401C817A1F0D0E0CE0166E070E036\r
+:102F90000E946E26FC01EB58FE4F408151816281F8\r
+:102FA0007381848195810E94AC172196C770E8CF08\r
+:102FB000DF91CF9108954091A5015091A6016091B4\r
+:102FC000A7017091A8018091A9019091AA010C9488\r
+:102FD000AC17CF93DF938091AA0182958F7009F08F\r
+:102FE0005CC08091A701882309F457C02091730128\r
+:102FF000D09174014091A501C091A601E091A80172\r
+:10300000F091A9012D1709F448C030E0309709F478\r
+:1030100040C0CF3F11F44F3FE1F1C90166E070E0DD\r
+:103020000E946E26DC01AB58BE4F11968C91119711\r
+:10303000C8132FC08C9148132CC012968C911297F4\r
+:10304000811127C013968D919C9114978E179F071D\r
+:1030500008F401978E1B9F0B883C9105D0F480915A\r
+:10306000AA018F7080618093AA01C90166E070E0B7\r
+:103070000E946E26FC01E658FE4F90819F70906181\r
+:10308000908385EA91E00E945914DF91CF910C94CE\r
+:10309000BC172F5F3F4F2770B5CFDF91CF910895B9\r
+:1030A000BF92CF92DF92EF92FF920F931F93CF9335\r
+:1030B000DF93CDB7DEB761970FB6F894DEBF0FBED2\r
+:1030C000CDBF8C0185E0F801DE011D9601900D92C7\r
+:1030D0008A95E1F7D8014C9111962C91119712968F\r
+:1030E000EC9012971396CD90DC9014975091A50117\r
+:1030F0006091A6018091A8019091A901009709F41F\r
+:103100006EC16F3F19F45F3F09F469C1B090A70128\r
+:10311000BB2009F4C3C03091AA01C816D90628F013\r
+:10312000F601E81BF90BCF0104C0809590958C0D3A\r
+:103130009D1DFF24F394883C910588F0F12C307F8D\r
+:1031400009F0CBC07C2DD98AC88A522F6E2D89896F\r
+:103150000E949D1785EA91E00E945914B4C0832F04\r
+:10316000807F09F049C0621314C0541312C0E110EB\r
+:1031700010C03F7030613093AA010E94DB1785EACE\r
+:1031800091E00E9459148091AA01D80115968C9360\r
+:1031900031C0CD2831F12F3F11F44F3F11F1FE2CFA\r
+:1031A000E1101FC0E091730130917401E31709F43D\r
+:1031B0005CC0F0E0CF0166E070E00E946E26DC01AA\r
+:1031C000AB58BE4F11968C911197281307C08C9164\r
+:1031D000481304C012968C91811103C03196E77098\r
+:1031E000E5CFFE2CEE2009F416C18091AA01816082\r
+:1031F0008093AA01F12C0FC1621308C0541306C0BA\r
+:10320000E11004C08091AA01D801C1C04D872E876A\r
+:103210008D859E850E9477178823E1F1EE20D1F1FC\r
+:103220002091AA01822F82958F7090E0029774F00E\r
+:103230008091A5019091A60198878F831986DB86DE\r
+:10324000CA862C87CE0107960E94591486E0F801A1\r
+:10325000A5EAB1E001900D928A95E1F70E94E91785\r
+:103260000E94DB17FF24F394D6C04D872E878D85EF\r
+:103270009E850E946A1C292F22952F7030E02230F3\r
+:1032800031050CF0BCC09F7009F0B6C0805E88307C\r
+:1032900008F4C1C0C8010E945914E4CFC816D90669\r
+:1032A00008F453C0F601E81BF90BCF01883C9105E7\r
+:1032B00008F450C0F12C7C2DD98AC88A522F6E2D6B\r
+:1032C00089890E949D17E5EAF1E086E0DF011D9201\r
+:1032D0008A95E9F70E94DB179EC0621314C054134D\r
+:1032E00012C0E11010C08091AA01F8018583C801C5\r
+:1032F0000E94591486E0E5EAF1E0DF011D928A950B\r
+:10330000E9F7FB2C88C04D872E878D859E850E940E\r
+:103310007717882309F4BECFEE2009F4BBCF2091A4\r
+:10332000AA01822F82958F7090E002970CF48ECFC5\r
+:103330008091A5019091A6019A8389831B82DD82E9\r
+:10334000CC822E83CE0101967FCF809590958C0DF7\r
+:103350009D1DACCFFE2CEE2009F49CCF62132EC035\r
+:1033600054132CC02091AA0120FD1FC0822F8295EA\r
+:103370008F70D9F0D80115962C9315978F3049F09E\r
+:103380008F5F982F9295907F822F8F70892B159643\r
+:103390008C93C8010E94591486E0F801A5EAB1E0B7\r
+:1033A00001900D928A95E1F795CF86E0F801A5EAA4\r
+:1033B000B1E001900D928A95E1F72DC04D872E87DF\r
+:1033C0008D859E850E947717811140CF8091AA013B\r
+:1033D00081608093AA01C8010E9459141CC0EE208C\r
+:1033E00009F458CF4D872E878D859E850E947717CB\r
+:1033F000882309F44FCF2ACF811148CF0CC0243045\r
+:1034000031050CF047CF9F7009F440CFF80195814A\r
+:10341000907F09F03BCF8F2D61960FB6F894DEBFF9\r
+:103420000FBECDBFDF91CF911F910F91FF90EF9015\r
+:10343000DF90CF90BF900895CF93DF93CDB7DEB7E5\r
+:103440002C970FB6F894DEBF0FBECDBF4F835887C1\r
+:1034500069877A878B879C87CE0107960E945018D0\r
+:10346000882371F08F8198852A853B85232B09F469\r
+:103470003FC09F3F09F068C08F3F09F065C038C06A\r
+:1034800086E0FE013796DE01119601900D928A9535\r
+:10349000E1F76F817885EA85FB85309749F17F3FB9\r
+:1034A00011F46F3F29F18091740190E09C012F5F2E\r
+:1034B0003F4F277033274091730150E024173507A1\r
+:1034C00009F44BC069837A83FD83EC8366E070E086\r
+:1034D0000E946E26DC01AB58BE4F96E0FE0131968D\r
+:1034E00001900D929A95E1F7209374010E94BC1708\r
+:1034F00080917301909174018917E9F190E066E081\r
+:1035000070E00E946E268B589E4F0E9450188823B0\r
+:1035100091F18091730190E066E070E00E946E2668\r
+:10352000FC01EB58FE4F408151816281738184819F\r
+:1035300095810E94AC178091730190E0019687708D\r
+:10354000992780937301D4CF4F81588569857A85F7\r
+:103550008B859C850E94AC17CBCF0E94731710926D\r
+:10356000740110927301E5EAF1E086E0DF011D923B\r
+:103570008A95E9F7BDCF2C960FB6F894DEBF0FBE43\r
+:10358000CDBFDF91CF910895DF92EF92FF920F931D\r
+:103590001F93CF93DF93FC01892B09F48AC0E12CA0\r
+:1035A000F12CDD24D394EF0121968491853709F421\r
+:1035B00061C058F4843708F04EC0843008F06AC007\r
+:1035C0008130D1F0823071F174C0883709F45DC068\r
+:1035D00050F4863709F455C0873709F06AC08E2D3C\r
+:1035E0000E94F71C54C09CE7980F903708F061C008\r
+:1035F0008F770E94FC1350C08F010E5F1F4FFE019A\r
+:10360000849190E2980F983050F48770FD2D01C09E\r
+:10361000FF0F8A95EAF78F2F0E94FD1C14C00E94AD\r
+:10362000291313C08F010E5F1F4FFE01C49180E26A\r
+:103630008C0F883060F4C7708D2D01C0880FCA953B\r
+:10364000EAF70E94031D0E94241DE80125C08C2F6B\r
+:103650000E94FC13FACF9F012E5F3F4FFE01C491E1\r
+:10366000CC2369F08FE99FE00197F1F700C00000DB\r
+:10367000C150F6CF9F012E5F3F4FFE01F490E9014C\r
+:103680000BC00E94E71CE82E07C00E94FA1C0E9493\r
+:10369000241D02C00E9429138F2D882341F0EFE9D9\r
+:1036A000FFE03197F1F700C000008150F6CFFE0136\r
+:1036B0007ACFDF91CF911F910F91FF90EF90DF9024\r
+:1036C00008956093AF017093B0018093B10190931E\r
+:1036D000B2010E94711D0C9461176093AB0170934D\r
+:1036E000AC018093AD019093AE010E94721D0C94C9\r
+:1036F000611708950C94611B0F931F930091AF0104\r
+:103700001091B0012091B1013091B201602B712B69\r
+:10371000822B932B1F910F910C94611B0F931F937E\r
+:103720000091AF011091B0012091B1013091B2012F\r
+:1037300060237123822393231F910F910C94611BAB\r
+:103740000F931F930091AF011091B0012091B1012F\r
+:103750003091B20160277127822793271F910F9123\r
+:103760000C94611B60E070E0CB010C946D1B0F9317\r
+:103770001F9341E050E060E070E08A019B0104C0CB\r
+:10378000000F111F221F331F8A95D2F7C901B801FC\r
+:103790001F910F910C946D1B0F931F9341E050E00C\r
+:1037A00060E070E004C0440F551F661F771F8A95C4\r
+:1037B000D2F78091AB019091AC01A091AD01B09195\r
+:1037C000AE018A019B01082B192B2A2B3B2BC90127\r
+:1037D000B8011F910F910C946D1B0F931F9341E043\r
+:1037E00050E060E070E004C0440F551F661F771F73\r
+:1037F0008A95D2F740955095609570958091AB0170\r
+:103800009091AC01A091AD01B091AE018A019B01F4\r
+:10381000082319232A233B23C901B8011F910F91C3\r
+:103820000C946D1B0F931F9341E050E060E070E03B\r
+:1038300004C0440F551F661F771F8A95D2F78091E9\r
+:10384000AB019091AC01A091AD01B091AE018A01A4\r
+:103850009B01082719272A273B27C901B8011F9177\r
+:103860000F910C946D1B0F931F930091AB0110915E\r
+:10387000AC012091AD013091AE01602B712B822BF8\r
+:10388000932B1F910F910C946D1B0F931F9300911D\r
+:10389000AB011091AC012091AD013091AE016023DC\r
+:1038A0007123822393231F910F910C946D1B0F930F\r
+:1038B0001F930091AB011091AC012091AD013091AB\r
+:1038C000AE0160277127822793271F910F910C94D7\r
+:1038D0006D1B0895CF92DF92EF92FF920F931F938B\r
+:1038E000CF93DF938C01C090AF01D090B001E090F6\r
+:1038F000B101F090B2014091AB015091AC016091E7\r
+:10390000AD017091AE01C42AD52AE62AF72ACFE18B\r
+:10391000D0E0D701C6010C2E04C0B695A7959795A7\r
+:1039200087950A94D2F780FF07C0B8018C2F0E94B8\r
+:10393000831E8130910531F4219758F7B80180E05A\r
+:103940000E94831EDF91CF911F910F91FF90EF9006\r
+:10395000DF90CF90089520910D0130910E01F90173\r
+:1039600032969FEF40E05191581789F09F3F19F42C\r
+:10397000511101C0942F4F5F4630A9F79F3F39F096\r
+:10398000F901E90FF11D97FDFA95828308950895D5\r
+:1039900020910D0130910E01F9013296285F3F4FC1\r
+:1039A0009081981301C010823196E217F307C1F796\r
+:1039B000089581E090E0E0910D01F0910E01E80F93\r
+:1039C000F91F1082019688309105A9F7089580911A\r
+:1039D000BD0108959091BD01892B8093BD0108958B\r
+:1039E00080959091BD0189238093BD0108958093B6\r
+:1039F000BD0108951092BD0108959091BC01892BDD\r
+:103A00008093BC01089580959091BC018923809397\r
+:103A1000BC0108951092BC0108958093B3010895EC\r
+:103A20001092B301089580910D0190910E01FC0157\r
+:103A300031969C01285F3F4F80E0919191118F5FFB\r
+:103A4000E217F307D1F70895E0910D01F0910E010F\r
+:103A50008091BD018083E0910D01F0910E01908174\r
+:103A60008091BC01892B80838091B301882361F010\r
+:103A7000E0910D01F0910E019081892B80830E94CD\r
+:103A8000131D81111092B30180910D0190910E01CF\r
+:103A90000C949F1190933501809334010895829581\r
+:103AA000982F9C7C292F26952695982F9373990FF4\r
+:103AB000990F922B892F8A7A86959575990F892B64\r
+:103AC00008950895CF93DF9300D000D01F92CDB713\r
+:103AD000DEB70F900F900F900F900F90DF91CF9166\r
+:103AE0000895089508950C94E7128091D3018430CD\r
+:103AF00021F11092BF0120E488E190E00FB6F89424\r
+:103B0000A895809360000FBE2093600083B7817FEB\r
+:103B1000846083BF83B7816083BF7894889583B7BF\r
+:103B20008E7F83BF0FB6F894A8958091600088615E\r
+:103B300080936000109260000FBE0895089508956C\r
+:103B4000CF930E949E1D0E94EE070E949F1DC0E021\r
+:103B50008C2F0E94EC08811104C0CF5FC031C1F7E7\r
+:103B600001C081E0CF9108950C9473171F920F92BA\r
+:103B70000FB60F9211248F939F93AF93BF938091B1\r
+:103B8000BF01811113C08091C0019091C101A0912A\r
+:103B9000C201B091C3014196A11DB11D8093C00126\r
+:103BA0009093C101A093C201B093C301BF91AF91A3\r
+:103BB0009F918F910F900FBE0F901F90189582E0EC\r
+:103BC00084BD93E095BD9AEF97BD80936E000895F4\r
+:103BD0002FB7F8948091C0019091C101A091C201CA\r
+:103BE000B091C3012FBF08952FB7F8946091C00121\r
+:103BF0007091C1018091C2019091C3012FBF0895BE\r
+:103C0000CF92DF92EF92FF920F931F932FB7F8940A\r
+:103C10004091C0015091C1016091C2017091C301F6\r
+:103C20002FBF6A017B01EE24FF248C0120E030E0ED\r
+:103C3000C016D106E206F30610F4415051099A016C\r
+:103C4000281B390BC9011F910F91FF90EF90DF9056\r
+:103C5000CF9008951F920F920FB60F9211248F9359\r
+:103C60009F93AF93BF938091C0019091C101A091A8\r
+:103C7000C201B091C3010196A11DB11D8093C00185\r
+:103C80009093C101A093C201B093C301BF91AF91C2\r
+:103C90009F918F910F900FBE0F901F9018950E94CB\r
+:103CA000E70EF8942FEF87EA91E62150804090408C\r
+:103CB000E1F700C0000087E090EBDC018093DC01BD\r
+:103CC0009093DD01A093DE01B093DF019CE088E1D9\r
+:103CD0000FB6F894A895809360000FBE9093600093\r
+:103CE000FFCFE92FF0E093E0EE0FFF1F9A95E1F789\r
+:103CF000E80FF11DE855FF4F8491982F90778F7052\r
+:103D000092959F700895CF93C82FCB010E94711E8A\r
+:103D1000292F30E0E82FF0E0C90144E0880F991F17\r
+:103D20004A95E1F78E2B9F2B8038910519F480E09E\r
+:103D300090E016C04C2F50E083E0440F551F8A9549\r
+:103D4000E1F7240F351F94E0220F331F9A95E1F716\r
+:103D5000E20FF31FEE0FFF1FE050F8498591949199\r
+:103D6000CF91089580E090E0089508958091C60174\r
+:103D700080FF0CC08091120190E065E070E00E942D\r
+:103D80006E2695958795959587952EC081FF0AC0DB\r
+:103D90008091120190E065E070E00E946E2695959A\r
+:103DA000879522C082FF08C08091120190E065E0F3\r
+:103DB00070E00E946E2618C02091C7012223D1F026\r
+:103DC00030911101231780F78091120190E065E096\r
+:103DD00070E00E946E26622F70E00E946E26632FB4\r
+:103DE00070E00E948B26CB018038910530F400975B\r
+:103DF00031F0089585E090E008958FE7089581E01F\r
+:103E000008958091C60180FF08C06091100170E0A4\r
+:103E1000759567957595679523C081FF06C060917C\r
+:103E2000100170E0759567951BC082FF04C060911A\r
+:103E3000100170E012C06091C7016623D1F020919B\r
+:103E40000F016217A0F78091100170E090E00E94CE\r
+:103E50006E26622F70E00E948B266038710528F470\r
+:103E60006115710521F0862F08958FE7089581E08F\r
+:103E7000089561E070E0F4CF803F21F40E94B61E07\r
+:103E8000819504C0813F29F40E94B61E8093CA0127\r
+:103E90000895823F21F40E94B61E819504C0833F9D\r
+:103EA00029F40E94B61E8093C9010895893F19F430\r
+:103EB0000E94011F05C08A3F31F40E94011F8195B5\r
+:103EC0008093CB0108958B3F21F40E94011F8195BF\r
+:103ED00004C08C3F29F40E94011F8093CC010895F7\r
+:103EE000843F21F48091C801816017C0853F21F48F\r
+:103EF0008091C801826011C0863F21F48091C80181\r
+:103F000084600BC0873F21F48091C801886005C0A0\r
+:103F1000883F31F48091C80180618093C801089581\r
+:103F20008D3F21F48091C60181600BC08E3F21F44A\r
+:103F30008091C601826005C08F3F29F48091C6013F\r
+:103F400084608093C6010895803F39F48091CA014E\r
+:103F500087FF6CC01092CA0169C0813F29F480912B\r
+:103F6000CA011816BCF362C09091C901823F29F4BE\r
+:103F700097FF5CC01092C90159C0833F19F419160C\r
+:103F8000CCF354C0893F41F48091CB0118160CF05A\r
+:103F90004DC01092CB014AC08A3F29F48091CB01D9\r
+:103FA00087FF44C0F6CF8B3F39F48091CC0187FF67\r
+:103FB0003DC01092CC013AC08C3F29F48091CC01D5\r
+:103FC0001816BCF333C0843F21F48091C8018E7F62\r
+:103FD00017C0853F21F48091C8018D7F11C0863FB5\r
+:103FE00021F48091C8018B7F0BC0873F21F4809121\r
+:103FF000C801877F05C0883F31F48091C8018F7E5A\r
+:104000008093C80113C08D3F21F48091C6018E7F3B\r
+:104010000BC08E3F21F48091C6018D7F05C08F3F7C\r
+:1040200029F48091C6018B7F8093C6018091C901DC\r
+:1040300081110EC08091CA0181110AC08091CB010B\r
+:10404000811106C08091CC01811102C01092C7017C\r
+:1040500008958091BE0183FF7EC08BE894E00E94AA\r
+:104060008D058091C8011F928F9386E894E09F93FD\r
+:104070008F930E94260684E894E00E948D0580912B\r
+:10408000C901282F082E000C330B3F938F9381E832\r
+:1040900094E09F938F930E9426068FE794E00E94FE\r
+:1040A0008D058091CA01282F082E000C330B3F93F9\r
+:1040B0008F938CE794E09F938F930E9426068AE764\r
+:1040C00094E00E948D058091CB01282F082E000CD2\r
+:1040D000330B3F938F9387E794E09F938F930E94D6\r
+:1040E000260685E794E00E948D058091CC01282F5B\r
+:1040F000082E000C330B3F938F9382E794E09F933D\r
+:104100008F930E9426068FE694E00E948D05809191\r
+:10411000C7011F928F938CE694E09F938F930E9428\r
+:1041200026068AE694E00E948D058091C6011F92C2\r
+:104130008F9387E694E09F938F930E94260684E6F0\r
+:1041400094E00E948D058DB79EB74C960FB6F894FB\r
+:104150009EBF0FBE8DBF88EC91E00E94E8110E94C7\r
+:10416000E81D9093C5018093C40108951F93CF93D8\r
+:10417000DF938091C4019091C5010E94001EFC0153\r
+:104180002091C701222329F090911301892F90E0FB\r
+:1041900007C08091140190E06AE070E00E946E26F2\r
+:1041A000E817F90708F485C08091C901C091CA01D8\r
+:1041B000D091CB011091CC01811107C0C11175C004\r
+:1041C000D11173C0111171C074C02F3F19F02F5F4E\r
+:1041D0002093C701181624F40E94B61E8093C901CB\r
+:1041E0008091C90187FF05C00E94B61E819580930A\r
+:1041F000C9011C1624F40E94B61E8093CA01809146\r
+:10420000CA0187FF05C00E94B61E81958093CA012E\r
+:104210006091C901662331F1C091CA01CC2311F12B\r
+:10422000062E000C770B880B990B0E946D2523E35B\r
+:1042300033E343E35FE30E94D1250E943525609379\r
+:10424000C9016C2FCC0F770B880B990B0E946D2541\r
+:1042500023E333E343E35FE30E94D1250E94352546\r
+:104260006093CA011D1624F40E94011F8093CB01A4\r
+:104270008091CB0187FF05C00E94011F819580932B\r
+:10428000CB01111624F40E94011F8093CC01809170\r
+:10429000CC0187FF05C00E94011F81958093CC014E\r
+:1042A000DF91CF911F910C9429202F3F09F08FCFE0\r
+:1042B00097CFDF91CF911F910895E8ECF1E085E071\r
+:1042C000DF011D928A95E9F71092C7011092C6018D\r
+:1042D00008958EEA96E00E948D051F9281E08F93EB\r
+:1042E0001F9285E08F9380E696E09F938F930E94C4\r
+:1042F00026060F900F900F900F900F900F9008953B\r
+:104300008330E9F128F4813061F0823009F10895B9\r
+:10431000853009F462C008F449C0863009F474C0DD\r
+:10432000089580911401262F30E0280F311D2F3F72\r
+:10433000310524F4680F6093140103C08FEF80935C\r
+:104340001401809114011F928F9389E995E072C046\r
+:1043500080911301262F30E0280F311D2F3F3105AA\r
+:1043600024F4680F6093130103C08FEF809313014F\r
+:10437000809113011F928F9387E895E05BC0809135\r
+:104380001201262F30E0280F311D2F3F310524F474\r
+:10439000680F6093120103C08FEF80931201809128\r
+:1043A00012011F928F9384E795E044C08091110120\r
+:1043B000262F30E0280F311D2F3F310524F4680FE0\r
+:1043C0006093110103C08FEF80931101809111015F\r
+:1043D0001F928F938FE595E02DC080911001262FBD\r
+:1043E00030E0280F311D2F3F310524F4680F609312\r
+:1043F000100103C08FEF80931001809110011F9274\r
+:104400008F9386E495E016C080910F01262F30E04F\r
+:10441000280F311D2F3F310524F4680F60930F01E1\r
+:1044200003C08FEF80930F0180910F011F928F9334\r
+:104430008BE295E09F938F930E9426060F900F903A\r
+:104440000F900F900895833081F128F4813059F056\r
+:104450008230D1F00895853009F449C0B8F1863032\r
+:1044600009F456C0089580911401681720F4861B42\r
+:104470008093140102C010921401809114011F92C4\r
+:104480008F938CE195E054C080911301681720F45C\r
+:10449000861B8093130102C01092130180911301B7\r
+:1044A0001F928F938AE095E043C0809112016817B4\r
+:1044B00020F4861B8093120102C010921201809199\r
+:1044C00012011F928F9387EF94E032C08091110107\r
+:1044D000681720F4861B8093110102C0109211010D\r
+:1044E000809111011F928F9382EE94E021C0809100\r
+:1044F0001001681720F4861B8093100102C01092EF\r
+:104500001001809110011F928F9389EC94E010C0EC\r
+:1045100080910F01681720F4861B80930F0102C061\r
+:1045200010920F0180910F011F928F938EEA94E0F9\r
+:104530009F938F930E9426060F900F900F900F90DD\r
+:104540000895CF93C82F1F928F9383EB97E09F938B\r
+:104550008F930E94260681E090E0A0E0B0E0BC01CD\r
+:10456000CD0104C0660F771F881F991FCA95D2F727\r
+:104570000E947A1B0F900F900F900F90CF910C9488\r
+:104580007317CF93873288F58E3108F00BC18E30C8\r
+:1045900009F487C0D8F4873009F460C08B3009F47F\r
+:1045A0004FC0863009F002C18091BE01817F8E7FAD\r
+:1045B0008093BE0188EB97E00E948D058CE69AE01F\r
+:1045C0000E948D0581E08093CE0146C0863109F4BA\r
+:1045D000B0C020F4803109F47AC0E8C0893109F410\r
+:1045E00091C08B3109F449C0E1C0883349F150F4DE\r
+:1045F000893209F4D5C0853309F4D2C0873209F075\r
+:10460000D5C0CEC0833409F4CBC028F48A3308F473\r
+:10461000CDC08953C8C0883409F0C8C00E94731740\r
+:104620008BE59AE00E948D052FEF83ED90E32150FA\r
+:1046300080409040E1F700C000000E944F1E0CC077\r
+:104640008FED97E041C082E49AE00E948D05809151\r
+:10465000BE0181608093BE01C1E0ADC08091BE010A\r
+:10466000C82FC17080FFEFCF8EE49AE00E948D05C5\r
+:104670008091BE01817F8E7F3FC09091BE0191FBF2\r
+:10468000CC27C0F981E0C827892FC0FB81F980932E\r
+:10469000BE01CC2319F085E39AE029C087E29AE0B5\r
+:1046A00013C09091BE0192FBCC27C0F981E0C827CE\r
+:1046B000892FC0FB82F98093BE01CC2319F088E1D9\r
+:1046C0009AE015C088E09AE00E948D05C5CF9091D0\r
+:1046D000BE0193FBCC27C0F981E0C827892FC0FB1E\r
+:1046E00083F98093BE01CC2351F08CEF99E00E94B6\r
+:1046F0008D058091BE0181608093BE015CC08FEE0C\r
+:1047000099E0E2CF80EE99E00E948D058DEB99E073\r
+:104710000E948D0588E799E00E948D0581E599E06A\r
+:104720000E948D058CE099E00E948D058DED98E04A\r
+:10473000CBCF8FEC98E00E948D050E9493111F92C1\r
+:104740008F9385EB98E09F938F930E94260680912C\r
+:104750000C011F928F938EE998E09F938F930E9494\r
+:10476000260680915B011F928F938BE898E09F93C0\r
+:104770008F930E9426060E94F41D9F938F937F9330\r
+:104780006F9384E798E09F938F930E9426068DB7DE\r
+:104790009EB742960FB6F8949EBF0FBE8DBF5CCFFA\r
+:1047A00080E001C08D510E94A12256CF82E798E09F\r
+:1047B0000E948D05C0E08C2FCF91089580E0089570\r
+:1047C00080E00895CF93C82F8091CE01813069F0A9\r
+:1047D00020F0823009F449C040C167E08FE00E94B8\r
+:1047E000D708882309F43FC106C067E08FE00E9424\r
+:1047F000D708882361F08C2F0E94DE23811104C02A\r
+:104800008C2F0E94C1222FC081E090E02CC08C2F01\r
+:104810000E94E023811126C0C431E1F070F4CB3056\r
+:1048200081F0C031D1F40E9469218BEA97E00E94A7\r
+:104830008D0582E08093CE0115C0C93259F0C8338E\r
+:1048400061F488EB97E00E948D058FEA97E00E9463\r
+:104850008D0508C01092CE0104C189EA97E00E943C\r
+:104860008D05FFC081E08170FEC0C43228F5CE31D5\r
+:1048700008F0C1C0CB30A1F1D0F4C73009F0D3C0EB\r
+:104880008EE18093140182E3809313018AE0809388\r
+:10489000120184E18093110188E08093100188E285\r
+:1048A00080930F018FE496E00E948D05BFC0C33155\r
+:1048B00049F1C431C1F0B7C0CB3409F4A9C028F420\r
+:1048C000C93289F0C83361F0AEC0C13509F49EC069\r
+:1048D000C23509F499C0CE3409F0A5C06AE09EC083\r
+:1048E0000E946921A3C08091CD01882319F0109204\r
+:1048F000CD019CC08CE596E00E948D0581E08093FF\r
+:10490000CE01B1C086E396E00E948D0584E296E078\r
+:104910000E948D05809114011F928F9381E296E091\r
+:104920009F938F930E9426068FE196E00E948D054B\r
+:104930008DE096E00E948D05809113011F928F9368\r
+:104940008AE096E09F938F930E94260688E096E087\r
+:104950000E948D0589EF95E00E948D0580911201DE\r
+:104960001F928F9386EF95E09F938F930E94260668\r
+:1049700084EF95E00E948D0583EE95E00E948D0501\r
+:10498000809111011F928F9380EE95E09F938F93FA\r
+:104990000E9426068EED95E00E948D0589EC95E03B\r
+:1049A0000E948D05809110011F928F9386EC95E0F7\r
+:1049B0009F938F930E94260684EC95E00E948D05BC\r
+:1049C0008DEA95E00E948D0580910F011F928F93D3\r
+:1049D0008AEA95E09F938F930E94260688EA95E0E5\r
+:1049E0000E948D058DB79EB748960FB6F8949EBF6E\r
+:1049F0000FBE8DBF1BC0CE51EC2FF0E0E75DFE4F28\r
+:104A000080818093CD0112C061E003C061E006C0E7\r
+:104A10006AE08091CD010E94802108C08091CD0183\r
+:104A20000E94232203C08DE496E013C08091CD0143\r
+:104A3000882369F01F928F9387E496E09F938F936A\r
+:104A40000E9426060F900F900F900F9004C084E4F0\r
+:104A500096E00E948D0581E006C01092CE0180E0B4\r
+:104A600002C080E000CFCF9108950E943C25689459\r
+:104A7000B1110C94CB2508950E94B02588F09F5762\r
+:104A800098F0B92F9927B751B0F0E1F0660F771F72\r
+:104A9000881F991F1AF0BA95C9F714C0B13091F068\r
+:104AA0000E94CA25B1E008950C94CA25672F782F7B\r
+:104AB0008827B85F39F0B93FCCF38695779567952D\r
+:104AC000B395D9F73EF490958095709561957F4F99\r
+:104AD0008F4F9F4F0895E89409C097FB3EF490953F\r
+:104AE0008095709561957F4F8F4F9F4F9923A9F0C7\r
+:104AF000F92F96E9BB279395F69587957795679556\r
+:104B0000B795F111F8CFFAF4BB0F11F460FF1BC099\r
+:104B10006F5F7F4F8F4F9F4F16C0882311F096E92C\r
+:104B200011C0772321F09EE8872F762F05C06623DA\r
+:104B300071F096E8862F70E060E02AF09A95660F93\r
+:104B4000771F881FDAF7880F9695879597F908954C\r
+:104B500057FD9058440F551F59F05F3F71F047952E\r
+:104B6000880F97FB991F61F09F3F79F08795089513\r
+:104B7000121613061406551FF2CF4695F1DF08C032\r
+:104B8000161617061806991FF1CF8695710561054F\r
+:104B900008940895E894BB2766277727CB0197F9F7\r
+:104BA00008950E94E3250C945D260E944F2638F05C\r
+:104BB0000E94562620F0952311F00C9446260C9462\r
+:104BC0004C260C94CB250E94A82578F39923C9F391\r
+:104BD0005523B9F3950F50E0551FAA27EE27FF275D\r
+:104BE000BB2700240894679520F4E20FF31FB41F3D\r
+:104BF0000A1E220F331F441FAA1F6695A9F7779537\r
+:104C000030F4F30FB41F0A1E121E08F46395330F1D\r
+:104C1000441FAA1F221F769599F7879520F4B40F99\r
+:104C20000A1E121E631F440FAA1F221F331F8695E0\r
+:104C3000A9F7862F712D602D11249F5750409AF0AF\r
+:104C4000F1F088234AF0EE0FFF1FBB1F661F771F8E\r
+:104C5000881F91505040A9F79E3F510580F00C9459\r
+:104C600046260C94CB255F3FE4F3983ED4F386951B\r
+:104C700077956795B795F795E7959F5FC1F7FE2BF9\r
+:104C8000880F911D9695879597F9089597F99F67D5\r
+:104C900080E870E060E008959FEF80EC08950024C4\r
+:104CA0000A941616170618060906089500240A9491\r
+:104CB00012161306140605060895092E0394000C17\r
+:104CC00011F4882352F0BB0F40F4BF2B11F460FFA6\r
+:104CD00004C06F5F7F4F8F4F9F4F0895002455276B\r
+:104CE00004C0080E591F880F991F009729F0769568\r
+:104CF0006795B8F37105B9F7802D952F0895991B25\r
+:104D000079E004C0991F961708F0961B881F7A95C2\r
+:104D1000C9F78095089597FB072E16F4009407D0E5\r
+:104D200077FD09D00E94A52607FC05D03EF490959A\r
+:104D300081959F4F0895709561957F4F0895EE0F6F\r
+:104D4000FF1F0590F491E02D0994AA1BBB1B51E1B4\r
+:104D500007C0AA1FBB1FA617B70710F0A61BB70BEB\r
+:104D6000881F991F5A95A9F780959095BC01CD0190\r
+:064D70000895F894FFCF46\r
+:104D7600FFFF580A490B260BF20ABE0A01B40128A6\r
+:104D860008140A321E404D3622FF03B2037C035A32\r
+:104D960003E602FF021803310301020304050607B6\r
+:044DA60008090000F8\r
+:106800000000EA44E944E2440400050006000700F1\r
+:10681000080009000A000B000C000D000E000F001C\r
+:1068200010001100120013001400150016001700CC\r
+:10683000180019001A001B001C001D001E001F007C\r
+:10684000200021002200230024002500260027002C\r
+:10685000280029002A002B002C002D002E002F00DC\r
+:10686000300031A132003300340035A1360037004A\r
+:10687000380082003A003B003C003D003E003F00F3\r
+:1068800040004100420043004400450046004700EC\r
+:10689000480049004A004B004C004D004E004F009C\r
+:1068A000500051005200530067005400550056003C\r
+:1068B000580059005A005B005C005D005E005F00FC\r
+:1068C0006000610062006300640000005700000087\r
+:1068D0006800000000000000000000000000000050\r
+:1068E0000000000000007300000000000000000035\r
+:1068F000E000E100E200E300E400E500E600E7007C\r
+:106900000100010001000100EA4401000100E2442D\r
+:106910000100010001000100460001004A004B0097\r
+:10692000010001004700480001000100E9440100A6\r
+:106930000100010001000100010001003A003B00DC\r
+:106940003C003D003E003F0040004100420043004B\r
+:10695000010001004C00010001004400450052000C\r
+:1069600049000100010050004F0001004D004E00A1\r
+:1069700051000100010001000100010001000100BF\r
+:1069800001000100010001000100010001000100FF\r
+:1069900001000100010001000100010001004D00A3\r
+:1069A0004A004E004B0001000100010001000100FF\r
+:1069B00001000100010001000100010001000100CF\r
+:1069C00001000100010001000100010001000100BF\r
+:1069D00001000100010001000100010001000100AF\r
+:1069E000010001000100010001000100010001009F\r
+:1069F000010001000100010001000100010001008F\r
+:00000001FF\r
index 5ce5c22159481f81b3b58c498d8fb8464d3d7fd0..3500188d3581990b0b4b2a3252596fa05ef5504f 100644 (file)
@@ -40,10 +40,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define LOCKING_RESYNC_ENABLE
 
 
-/* legacy keymap support */
-#define USE_LEGACY_KEYMAP
-
-
 /* ADB port setting */
 #define ADB_PORT        PORTD
 #define ADB_PIN         PIND
index aa9931928f8318f2334f6c12f83289ea8da3b2b4..8d69ec5b75d1ce45fed1702b5238209de3638113 100644 (file)
@@ -12,5 +12,5 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
 };
diff --git a/converter/adb_usb/keymap_common.c b/converter/adb_usb/keymap_common.c
deleted file mode 100644 (file)
index 55a1379..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2011,2012,2013 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 "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index cb643c8f7fe35c089923abb34227ea241f16df3a..49581d790bd6fb1139c97d943c16d67ca411ac30 100644 (file)
@@ -19,7 +19,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "action.h"
 #include "action_macro.h"
@@ -29,10 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 /* Common layout: ANSI+ISO
  * ,---.   .---------------. ,---------------. ,---------------. ,-----------. ,---------------.
  * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|Pwr|
index a0b3f1fc6837344d7eebdcc5dfa4e4cbb393d226..147011608bf914d3ef3a8045518c4da2ee2cd1a6 100644 (file)
@@ -53,6 +53,6 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_TAP_KEY(1, KC_BSLS),
 };
index 1ccb17e264a4ce9bd0cec1acd00844fe948bca65..ffb7f431e0c97c532b42ed17142c32b402711b8c 100644 (file)
@@ -12,5 +12,5 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
 };
index 2f11f86a25b72a248bf1942228ca76adb950c852..b7a80f5717106d1419330535f4200767e780e18b 100644 (file)
@@ -36,7 +36,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_TAP_KEY(1, KC_GRV),
     [1] = ACTION_LAYER_TAP_KEY(1, KC_BSLS),
 };
diff --git a/converter/adb_usb/unimap_common.h b/converter/adb_usb/unimap_common.h
new file mode 100644 (file)
index 0000000..96f8a87
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+Copyright 2016 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 UNIMAP_COMMON_H
+#define UNIMAP_COMMON_H
+
+#include <stdint.h>
+#include <avr/pgmspace.h>
+#include "unimap.h"
+
+
+/* Apple Extended Keyboard Common layout: ANSI+ISO
+ * ,---.   .---------------. ,---------------. ,---------------. ,-----------. ,---------------.
+ * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|F24|
+ * `---'   `---------------' `---------------' `---------------' `-----------' `---------------'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa| |Ins|Hom|PgU| |NmL|  =|  /|  *|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD| |  7|  8|  9|  -|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |               |  4|  5|  6|  +|
+ * |-----------------------------------------------------------|     ,---.     |---------------|
+ * |Shif|\  |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift     |     |Up |     |  1|  2|  3|   |
+ * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
+ * |Ctrl |Alt |Gui |         Space           |Gui  |Alt |Ctrl  | |Lef|Dow|Rig| |      0|  .|   |
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ * Command      = Gui
+ * Option       = Alt
+ * Power key    = F24
+ * Mic          = F13(Adjustable keyboard)
+ */
+// http://lxr.free-electrons.com/source/drivers/macintosh/adbhid.c
+// http://opensource.apple.com//source/IOHIDFamily/IOHIDFamily-701.20.10/IOHIDFamily/Cosmo_USB2ADB.c
+// http://m0115.web.fc2.com/m0115.jpg
+const uint8_t PROGMEM unimap_trans[MATRIX_ROWS][MATRIX_COLS] = {
+        //  Position(unimap)        ADB scan code(matrix)
+        //  ---------------------------------------------
+        {
+            UNIMAP_A,               // 0x00
+            UNIMAP_S,               // 0x01
+            UNIMAP_D,               // 0x02
+            UNIMAP_F,               // 0x03
+            UNIMAP_H,               // 0x04
+            UNIMAP_G,               // 0x05
+            UNIMAP_Z,               // 0x06
+            UNIMAP_X,               // 0x07
+        },
+        {
+            UNIMAP_C,               // 0x08
+            UNIMAP_V,               // 0x09
+            UNIMAP_NONUS_BSLASH,    // 0x0A
+            UNIMAP_B,               // 0x0B
+            UNIMAP_Q,               // 0x0C
+            UNIMAP_W,               // 0x0D
+            UNIMAP_E,               // 0x0E
+            UNIMAP_R,               // 0x0F
+        },
+        {
+            UNIMAP_Y,               // 0x10
+            UNIMAP_T,               // 0x11
+            UNIMAP_1,               // 0x12
+            UNIMAP_2,               // 0x13
+            UNIMAP_3,               // 0x14
+            UNIMAP_4,               // 0x15
+            UNIMAP_6,               // 0x16
+            UNIMAP_5,               // 0x17
+        },
+        {
+            UNIMAP_EQUAL,           // 0x18
+            UNIMAP_9,               // 0x19
+            UNIMAP_7,               // 0x1A
+            UNIMAP_MINUS,           // 0x1B
+            UNIMAP_8,               // 0x1C
+            UNIMAP_0,               // 0x1D
+            UNIMAP_RBRACKET,        // 0x1E
+            UNIMAP_O,               // 0x1F
+        },
+        {
+            UNIMAP_U,               // 0x20
+            UNIMAP_LBRACKET,        // 0x21
+            UNIMAP_I,               // 0x22
+            UNIMAP_P,               // 0x23
+            UNIMAP_ENTER,           // 0x24
+            UNIMAP_L,               // 0x25
+            UNIMAP_J,               // 0x26
+            UNIMAP_QUOTE,           // 0x27
+        },
+        {
+            UNIMAP_K,               // 0x28
+            UNIMAP_SCOLON,          // 0x29
+            UNIMAP_BSLASH,          // 0x2A
+            UNIMAP_COMMA,           // 0x2B
+            UNIMAP_SLASH,           // 0x2C
+            UNIMAP_N,               // 0x2D
+            UNIMAP_M,               // 0x2E
+            UNIMAP_DOT,             // 0x2F
+        },
+        {
+            UNIMAP_TAB,             // 0x30
+            UNIMAP_SPACE,           // 0x31
+            UNIMAP_GRAVE,           // 0x32
+            UNIMAP_BSPACE,          // 0x33
+            UNIMAP_KP_ENTER,        // 0x34
+            UNIMAP_ESCAPE,          // 0x35
+            UNIMAP_LCTRL,           // 0x36
+            UNIMAP_LGUI,            // 0x37
+        },
+        {
+            UNIMAP_LSHIFT,          // 0x38
+            UNIMAP_CAPSLOCK,        // 0x39
+            UNIMAP_LALT,            // 0x3A
+            UNIMAP_LEFT,            // 0x3B
+            UNIMAP_RIGHT,           // 0x3C
+            UNIMAP_DOWN,            // 0x3D
+            UNIMAP_UP,              // 0x3E
+            UNIMAP_F23,             // 0x3F     FN?
+        },
+        {
+            UNIMAP_F17,             // 0x40
+            UNIMAP_KP_DOT,          // 0x41
+            UNIMAP_F13,             // 0x42     Mic(Adjustable keyboard)
+            UNIMAP_KP_MINUS,        // 0x43     ADB keypad asterisk(top right)
+            UNIMAP_NO,              // 0x44
+            UNIMAP_KP_COMMA,        // 0x45     ADB keypad plus
+            UNIMAP_NO,              // 0x46
+            UNIMAP_NUMLOCK,         // 0x47
+        },
+        {
+            UNIMAP_VOLUME_UP,       // 0x48     Vol Up(Adjustable keyboard)
+            UNIMAP_VOLUME_DOWN,     // 0x49     Vol Down(Adjustable keyboard)
+            UNIMAP_VOLUME_MUTE,     // 0x4A     Vol Mute(Adjustable keyboard)
+            UNIMAP_KP_ASTERISK,     // 0x4B     ADB keypad slash(between equal and asterisk)
+            UNIMAP_KP_ENTER,        // 0x4C
+            UNIMAP_NO,              // 0x4D
+            UNIMAP_KP_PLUS,         // 0x4E     ADB keypad minus
+            UNIMAP_F18,             // 0x4F
+        },
+        {
+            UNIMAP_F19,             // 0x50
+            UNIMAP_KP_SLASH,        // 0x51     ADB keypad equal(next to clear/numlock)
+            UNIMAP_KP_0,            // 0x52
+            UNIMAP_KP_1,            // 0x53
+            UNIMAP_KP_2,            // 0x54
+            UNIMAP_KP_3,            // 0x55
+            UNIMAP_KP_4,            // 0x56
+            UNIMAP_KP_5,            // 0x57
+        },
+        {
+            UNIMAP_KP_6,            // 0x58
+            UNIMAP_KP_7,            // 0x59
+            UNIMAP_F20,             // 0x5A
+            UNIMAP_KP_8,            // 0x5B
+            UNIMAP_KP_9,            // 0x5C
+            UNIMAP_JYEN,            // 0x5D
+            UNIMAP_RO,              // 0x5E
+            UNIMAP_KP_COMMA,        // 0x5F
+        },
+        {
+            UNIMAP_F5,              // 0x60
+            UNIMAP_F6,              // 0x61
+            UNIMAP_F7,              // 0x62
+            UNIMAP_F3,              // 0x63
+            UNIMAP_F8,              // 0x64
+            UNIMAP_F9,              // 0x65
+            UNIMAP_MHEN,            // 0x66
+            UNIMAP_F11,             // 0x67
+        },
+        {
+            UNIMAP_HENK,            // 0x68
+            UNIMAP_PSCREEN,         // 0x69
+            UNIMAP_F16,             // 0x6A
+            UNIMAP_SCROLLLOCK,      // 0x6B
+            UNIMAP_NO,              // 0x6C
+            UNIMAP_F10,             // 0x6D
+            UNIMAP_APPLICATION,     // 0x6E     compose
+            UNIMAP_F12,             // 0x6F
+        },
+        {
+            UNIMAP_NO,              // 0x70
+            UNIMAP_PAUSE,           // 0x71
+            UNIMAP_INSERT,          // 0x72
+            UNIMAP_HOME,            // 0x73
+            UNIMAP_PGUP,            // 0x74
+            UNIMAP_DELETE,          // 0x75
+            UNIMAP_F4,              // 0x76
+            UNIMAP_END,             // 0x77
+        },
+        {
+            UNIMAP_F2,              // 0x78
+            UNIMAP_PGDOWN,          // 0x79
+            UNIMAP_F1,              // 0x7A
+            UNIMAP_RSHIFT,          // 0x7B
+            UNIMAP_RALT,            // 0x7C
+            UNIMAP_RCTRL,           // 0x7D
+            UNIMAP_RGUI,            // 0x7E
+            UNIMAP_F24,             // 0x7F     power key
+        }
+};
+
+#endif
diff --git a/converter/adb_usb/unimap_plain.c b/converter/adb_usb/unimap_plain.c
new file mode 100644 (file)
index 0000000..f9cba54
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+Copyright 2016 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 "unimap_common.h"
+
+
+#define AC_FN0 ACTION_LAYER_TAP_KEY(1, KC_GRV)
+#define AC_FN1 ACTION_LAYER_TAP_KEY(1, KC_BSLS)
+
+#ifdef KEYMAP_SECTION_ENABLE
+const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
+#else
+const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
+#endif
+    UNIMAP(
+              F13, NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  F24,
+    ESC,      F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,         VOLD,VOLU,MUTE,
+    FN0, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, NO,  BSPC,     INS, HOME,PGUP,    NLCK,PEQL,PSLS,PAST,
+    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,     FN1,      DEL, END, PGDN,    P7,  P8,  P9,  PMNS,
+    LCAP,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     NUHS,ENT,                         P4,  P5,  P6,  PPLS,
+    LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     NO,  RSFT,          UP,           P1,  P2,  P3,  NO,
+    LCTL,LGUI,LALT,NO,            SPC,           NO,  NO,  RALT,RGUI,NO,  RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
+    ),
+    UNIMAP(
+              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
+    TRNS,     TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,          TRNS,TRNS,TRNS,         TRNS,TRNS,TRNS,
+    TRNS,F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS,DEL,      TRNS,TRNS,TRNS,    TRNS,TRNS,TRNS,TRNS,
+    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP,  INS,      TRNS,     TRNS,TRNS,TRNS,    TRNS,TRNS,TRNS,TRNS,
+    TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,LEFT,RGHT,     TRNS,TRNS,                        TRNS,TRNS,TRNS,TRNS,
+    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,DOWN,     TRNS,TRNS,          PGUP,         TRNS,TRNS,TRNS,TRNS,
+    TRNS,TRNS,TRNS,TRNS,          TRNS,          TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     HOME,PGDN,END,     TRNS,     TRNS,TRNS
+    ),
+};
index 79f17ec0d6e8cd24c9213f133460f275410f87ab..c73bcfd50c4bab9c9ea5ba3e18088ebaa8dea54f 100644 (file)
@@ -8,8 +8,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # project specific files
-SRC =  keymap_common.c \
-       matrix.c \
+SRC =  matrix.c \
        led.c \
        protocol/ibm4704.c
 
index 97294fb45ddfa2c28282dae88f3dda4956f4cfbc..c589ce0585f3749e5c05c29a7265603f0c3b25ca 100644 (file)
@@ -11,7 +11,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
 };
 
 
index f3dda718ace0773e84ca26367fadedfbbd535d81..aac8a423017e457ebb705268f95a781cb32c3dde 100644 (file)
@@ -45,6 +45,6 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
 };
diff --git a/converter/ibm4704_usb/keymap_common.c b/converter/ibm4704_usb/keymap_common.c
deleted file mode 100644 (file)
index 55a1379..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2011,2012,2013 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 "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index 9cb23b0b838c9f34986326542fa06bcfc1805526..ea0ec942b9a50638290efe718c9deb38f6bfdd49 100644 (file)
@@ -19,7 +19,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "action.h"
 #include "action_macro.h"
@@ -29,11 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-// 32*8(256) byte array which converts PS/2 code into USB code
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 /* 107-key */
 #define KEYMAP( \
     K46,K64,     K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E,   K6A,K6B,K6C,    K47,K48,K49,K4A, \
index 14c171179ca8d8d95906bb178553b83c8f50376b..e235ce80ce579a097fc46af8a95bba778613dcc0 100644 (file)
@@ -60,7 +60,7 @@ enum macro_id {
     ALT_TAB,
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
     [1] = ACTION_LAYER_TAP_KEY(2, KC_SCLN),
     [2] = ACTION_LAYER_TAP_KEY(3, KC_SLASH),
index 4aed684e4ca149c416310b23ea6dae2342c8a270..9e78b0215eaf8c171aeb560dc5b0c5464278f566 100644 (file)
@@ -45,6 +45,6 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
 };
index e836456326a0b97f5fdb8f2c06c4eef12a63bba5..5007824d8467eab75c9e864fe307f98083e20568 100644 (file)
@@ -10,7 +10,6 @@ TARGET_DIR = .
 # keyboard dependent files
 SRC =  matrix.c \
        led.c \
-       keymap_common.c \
        m0110.c
 
 # To use own keymap file run make like: make keymap=hasu
index 394b66050878fff90cea1106bdc074a9c84b94f4..d08c3f44b86963c1267f0d15d0b9ce83a116da98 100644 (file)
@@ -10,7 +10,6 @@ TARGET_DIR = .
 # keyboard dependent files
 SRC =  matrix.c \
        led.c \
-       keymap_common.c \
        m0110.c
 
 # To use own keymap file run make like: make keymap=hasu
index f36fcc4b5dee9b2d502d79ab741d4e43a164650f..cf10c788395cb400c03462c8e16c0d800e5f2ea9 100644 (file)
@@ -10,7 +10,6 @@ TARGET_DIR = .
 # keyboard dependent files
 SRC =  matrix.c \
        led.c \
-       keymap_common.c \
        m0110.c
 
 # To use own keymap file run make like: make keymap=hasu
index e836456326a0b97f5fdb8f2c06c4eef12a63bba5..5007824d8467eab75c9e864fe307f98083e20568 100644 (file)
@@ -10,7 +10,6 @@ TARGET_DIR = .
 # keyboard dependent files
 SRC =  matrix.c \
        led.c \
-       keymap_common.c \
        m0110.c
 
 # To use own keymap file run make like: make keymap=hasu
diff --git a/converter/m0110_usb/keymap_common.c b/converter/m0110_usb/keymap_common.c
deleted file mode 100644 (file)
index 4ac2d71..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Copyright 2011,2012,2014 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 <stdint.h>
-#include <avr/pgmspace.h>
-#include "action.h"
-#include "keycode.h"
-#include "keymap.h"
-#include "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn index to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    action_t action;
-    action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
-    return action;
-}
index 925556d9776274ab5e02996b1c2c0ad41b2af4d8..4f7e88fbae6ca80ec4f1f259c378e13634157d17 100644 (file)
@@ -15,15 +15,10 @@ 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 <stdint.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 /* Common layout for M0110 and M0110A
  * This keymap works with both keyboards. As you can see, the M0110A is 
  * a superset of M0110 keyboard, only one exception is 'Enter'(34) of M0110
index 0f9b8d2754a07285e248a460d531e0c1dca32bb7..bfe8727d1e6414f432e3a6d338870fa57cd92bfa 100644 (file)
@@ -98,9 +98,9 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
  * Fn action definition
  */
 #ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 #else
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
 #endif
     [0]  = ACTION_LAYER_MOMENTARY(1),
     [1]  = ACTION_LAYER_MOMENTARY(2),
index 11f1a4f394a7063844c90db4090acd6675b68271..3a6a308d8a8c3e2f493659c08a0e60a338089581 100644 (file)
@@ -79,7 +79,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
  * Fn action definition
  */
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
     [0]  = ACTION_LAYER_MOMENTARY(1),
     [1]  = ACTION_LAYER_TAP_KEY(2, KC_SLASH),
     [2]  = ACTION_LAYER_TAP_KEY(3, KC_SPACE),
index 6cc251a28940bbdf69f30c195fb9940aaf6ddf22..547bebca3ed714a07da27059c8ebfbf9b8e7c2e1 100644 (file)
@@ -68,6 +68,6 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 /*
  * Fn action definition
  */
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
     [0]  = ACTION_LAYER_MOMENTARY(1),
 };
index 5017861a34e6acdc1b730252ad2b2f2c0f83fdb6..d941ea8fa0a5e30c7a279ba4223d5b2854da2392 100644 (file)
@@ -65,7 +65,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
  * Fn action definition
  */
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
     [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
     [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),    // tilde
 };
index 058f2914bd8f6884f4f57ee72042bd25f0046f53..5e6c2b5d29de4d5e18c78617b5609edfd9728724 100644 (file)
@@ -17,7 +17,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "util.h"
 #include "keymap.h"
@@ -56,7 +55,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
+const uint8_t PROGMEM fn_layer[] = {
     0,              // Fn0
     0,              // Fn1
     0,              // Fn2
@@ -69,7 +68,7 @@ static const uint8_t PROGMEM fn_layer[] = {
 
 // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
 // See layer.c for details.
-static const uint8_t PROGMEM fn_keycode[] = {
+const uint8_t PROGMEM fn_keycode[] = {
     KC_NO,          // Fn0
     KC_NO,          // Fn1
     KC_NO,          // Fn2
@@ -81,7 +80,7 @@ static const uint8_t PROGMEM fn_keycode[] = {
 };
 
 
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* 0: default
      * ,---.   ,------------------------, ,------------------------. ,---------.
      * |Pow|   | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10| | F11| F12| ,-----------.
@@ -107,19 +106,3 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     LALT,CAPS,LALT,          SPC,      ERAS,                    RALT,RGUI,RCTL,   PGDN,   TAB, LEFT,DOWN,RGHT
     ),
 };
-
-
-uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
-{
-    return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
-}
-
-uint8_t keymap_fn_layer(uint8_t index)
-{
-    return pgm_read_byte(&fn_layer[index]);
-}
-
-uint8_t keymap_fn_keycode(uint8_t index)
-{
-    return pgm_read_byte(&fn_keycode[index]);
-}
index 0041df543fdab8be07c6b9fe380cefae7b2b3c63..90700da556deccbddcccb08ebc47f80945facf24 100644 (file)
@@ -50,7 +50,6 @@ POSSIBILITY OF SUCH DAMAGE.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "print.h"
 #include "debug.h"
@@ -59,7 +58,7 @@ POSSIBILITY OF SUCH DAMAGE.
 #include "keycode.h"
 
 // 32*8(256) byte array which converts PS/2 code into USB code
-static const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     ACTION_LAYER_MOMENTARY(1),                  // FN0 - left command key
     ACTION_LAYER_MOMENTARY(1),                  // FN1 - right command key
     ACTION_KEY(KC_BSLS),                        // FN2 - number pad slash & backslash
@@ -116,7 +115,7 @@ static const uint16_t PROGMEM fn_actions[] = {
 }
 
 
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     
     /* Layer 0: default
      * ,-----------------------------------------------------------. ,-----------. ,---------------.
@@ -163,15 +162,3 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     
     )
 };
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index 8922ea7baba87fc0ad385351603204bb7e96b918..e56a72f19ffe13260b3bcce178309cf773a66f58 100644 (file)
@@ -17,7 +17,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "action.h"
 #include "action_macro.h"
@@ -72,7 +71,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /*
   ,---------------------------------------------------------------.
   | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
@@ -114,7 +113,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
               LGUI, LALT, LCTL, LSFT,      SPC,      SPC,   RALT
     ),
 };
-static const uint8_t PROGMEM overlays[][MATRIX_ROWS][MATRIX_COLS] = {};
 
 /*
  * Macro definition
@@ -163,7 +161,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 /*
  * Fn actions
  */
-static const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     ACTION_LAYER_TAP_TOGGLE(0),                  // FN0
     ACTION_LAYER_TAP_KEY(1, KC_SLASH),           // FN1
     ACTION_LAYER_TAP_KEY(2, KC_SCLN),            // FN2
@@ -172,37 +170,3 @@ static const uint16_t PROGMEM fn_actions[] = {
     ACTION_MACRO(RBRACKET),                      // FN5
     ACTION_MACRO(DUMMY),                         // FN6
 };
-
-
-
-
-
-
-/*
- * No need to edit.
- */
-#define KEYMAPS_SIZE    (sizeof(keymaps) / sizeof(keymaps[0]))
-#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    if (layer < KEYMAPS_SIZE) {
-        return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-    } else {
-        // fall back to layer 0
-        return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
-    }
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    action_t action;
-    if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
-        action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
-    } else {
-        action.code = ACTION_NO;
-    }
-    return action;
-}
index 51b22256610aa238c9b89872d7cb83150c43862e..dd03426485d7e6a52260dddffaad6777dbdafb92 100644 (file)
@@ -11,8 +11,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # project specific files
-SRC =  keymap_common.c \
-       matrix.c \
+SRC =  matrix.c \
        led.c
 
 ifdef KEYMAP
index bbd9bd45b56d3163120bc6f520fef32bd5b9a2c9..9ca9f5fa946979f889b95b9d35d536b12a0c1438 100644 (file)
@@ -10,7 +10,6 @@ OBJDIR = ./build
 OBJECTS = \
        $(OBJDIR)/protocol/ps2_busywait.o \
        $(OBJDIR)/protocol/ps2_io_mbed.o \
-       $(OBJDIR)/./keymap_common.o \
        $(OBJDIR)/./matrix.o \
        $(OBJDIR)/./led.o \
        $(OBJDIR)/./main.o
index 64319aca887f2538d111ad92f8b4ac717d2534c8..88ee387db5a7847a789cc9b74e100bdd4c3c8f6d 100644 (file)
@@ -8,8 +8,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # keyboard dependent files
-SRC =   keymap_common.c \
-       matrix.c \
+SRC =   matrix.c \
        led.c
 
 ifdef KEYMAP
index 6aaef499692192a1ab44b614df6504331f3e8db3..644845f91c533a72a9e873146186a0dd74a2fe05 100644 (file)
@@ -12,8 +12,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # project specific files
-SRC =  keymap_common.c \
-       matrix.c \
+SRC =  matrix.c \
        led.c
 
 ifdef KEYMAP
index 5049a22703ca8bebe95a88b2c438774571945cba..8324328022b3a29804f1ff8d55bd5351738b2cdd 100644 (file)
@@ -12,8 +12,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # project specific files
-SRC =  keymap_common.c \
-       matrix.c \
+SRC =  matrix.c \
        led.c
 
 ifdef KEYMAP
index 1f2c209a6c1b982e54e39f7b132723fa1a56627f..79c11639ea1a74e3a7bd115d409d51900b6710b5 100644 (file)
@@ -8,8 +8,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # keyboard dependent files
-SRC = keymap_common.c \
-       matrix.c \
+SRC =  matrix.c \
        led.c
 
 ifdef KEYMAP
diff --git a/converter/ps2_usb/keymap_common.c b/converter/ps2_usb/keymap_common.c
deleted file mode 100644 (file)
index e344fb4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-Copyright 2011,2012,2013 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 "keymap_common.h"
-#include "progmem.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index d783e01dedd8a28a38d8d12dbed2f1500072ce93..6e612e6034661e4b29477f66a86d18566734117c 100644 (file)
@@ -28,11 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-// 32*8(256) byte array which converts PS/2 code into USB code
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 /* All keys */
 #define KEYMAP_ALL( \
     K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07,     KFC,K7E,KFE,                   \
index 02585150fbc9adde63c7c03d316bb95b669f8e39..b430b907cb3f4612362450f631ec0b4ce16114f9 100644 (file)
@@ -30,5 +30,5 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
 };
index 51b2fddb5b2e98e8b0fdf289589a47db07cdf87b..ecb13d7d9e426624e54a1380b9e7639e24009adb 100644 (file)
@@ -28,5 +28,5 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
 };
index bffd2bc606f0403b56968400bdeda21ff1eaaab1..8f087a8591bf42d4a409ec33edad1222d9017010 100644 (file)
@@ -54,7 +54,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
     [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),    // tilde
 };
index 3d724a52013aef6f0b6bb72604e719957544a67d..f94fe5c722205e3cb4c68035eef2dfc56c7136bd 100644 (file)
@@ -17,7 +17,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "util.h"
 #include "keymap.h"
@@ -87,7 +86,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
+const uint8_t PROGMEM fn_layer[] = {
     2,              // Fn0
     3,              // Fn1
     4,              // Fn2
@@ -100,7 +99,7 @@ static const uint8_t PROGMEM fn_layer[] = {
 
 // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
 // See layer.c for details.
-static const uint8_t PROGMEM fn_keycode[] = {
+const uint8_t PROGMEM fn_keycode[] = {
     KC_NO,          // Fn0
     KC_SCLN,        // Fn1
     KC_SLSH,        // Fn2
@@ -112,7 +111,7 @@ static const uint8_t PROGMEM fn_keycode[] = {
 };
 
 
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
     KEYMAP(
          HELP,       F1, F2, F3, F4,         F5, F6, F7, F8,         F9, F10,F11,F12,   PSCR,SLCK,PAUS,  MUTE,VOLD,VOLU,PWR,
@@ -174,19 +173,3 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         CAPS,LALT,LGUI,            BTN1,             RGUI,RALT,NO,  LEFT,DOWN,RGHT
     ),
 };
-
-
-uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
-{
-    return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
-}
-
-uint8_t keymap_fn_layer(uint8_t index)
-{
-    return pgm_read_byte(&fn_layer[index]);
-}
-
-uint8_t keymap_fn_keycode(uint8_t index)
-{
-    return pgm_read_byte(&fn_keycode[index]);
-}
index 273cd9442f2f70fa0d1d9fd56a851bf0e88042ba..217aa79ae78454275693afa759c3085a55d3acc6 100644 (file)
@@ -17,7 +17,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "util.h"
 #include "keymap.h"
@@ -155,19 +154,3 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
     */
 };
-
-
-uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
-{
-    return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
-}
-
-uint8_t keymap_fn_layer(uint8_t index)
-{
-    return pgm_read_byte(&fn_layer[index]);
-}
-
-uint8_t keymap_fn_keycode(uint8_t index)
-{
-    return pgm_read_byte(&fn_keycode[index]);
-}
index 8ca66b5e6a103eeb65137e6886d298c56132ffc0..5a3ee6ff6826f1270fc8ce7c27daea067f5129c7 100644 (file)
@@ -17,7 +17,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "print.h"
 #include "debug.h"
@@ -102,7 +101,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 }
 
 // Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
+const uint8_t PROGMEM fn_layer[] = {
     0,              // Fn0
     0,              // Fn1
     0,              // Fn2
@@ -115,7 +114,7 @@ static const uint8_t PROGMEM fn_layer[] = {
 
 // Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
 // See layer.c for details.
-static const uint8_t PROGMEM fn_keycode[] = {
+const uint8_t PROGMEM fn_keycode[] = {
     KC_NO,          // Fn0
     KC_NO,          // Fn1
     KC_NO,          // Fn2
@@ -127,7 +126,7 @@ static const uint8_t PROGMEM fn_keycode[] = {
 };
 
 
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* 0: default
      * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
      * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
@@ -198,19 +197,3 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 */
 };
-
-
-uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
-{
-    return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
-}
-
-uint8_t keymap_fn_layer(uint8_t index)
-{
-    return pgm_read_byte(&fn_layer[index]);
-}
-
-uint8_t keymap_fn_keycode(uint8_t index)
-{
-    return pgm_read_byte(&fn_keycode[index]);
-}
index 5abb49d79fc7fc8c9383b77073c17b34093e08ea..a4ac27b28a47ce615d97a2e73c1be64f93be448e 100644 (file)
@@ -108,9 +108,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 #OPT_DEFS += -DNO_ACTION_LAYER
 #OPT_DEFS += -DNO_ACTION_MACRO
 
-SRC =  \
-       keymap_common.c \
-       usb_usb.cpp \
+SRC =  usb_usb.cpp \
        main.cpp
 
 ifdef KEYMAP
index f1211147e000acad30896bcf5b1cf210cd72d404..5c9a1d1c69594aa0b668e207e1aa823fd3615c83 100644 (file)
@@ -119,4 +119,4 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 #endif
 };
 
-const uint16_t fn_actions[] PROGMEM = {};
+const action_t fn_actions[] PROGMEM = {};
diff --git a/converter/usb_usb/keymap_common.c b/converter/usb_usb/keymap_common.c
deleted file mode 100644 (file)
index 8ab5ba9..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-Copyright 2014 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 "keymap_common.h"
-#include "progmem.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index ee1c7c4de997cf8aa01ddb45413d131f0bc8a5af..3284264f63e936e27a9f15dbf4cb14faf58e3ac3 100644 (file)
@@ -28,10 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 /*         ,---------------. ,---------------. ,---------------.
  *         |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
  * ,---.   |---------------| |---------------| |---------------| ,-----------. ,---------------. ,-------.
index bd63ea2310bd051907e355ca7c81f5939c4bccb6..553457c9a76e46dad47a2c75632ece99005a431e 100644 (file)
@@ -52,7 +52,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".key
     ),
 };
 
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
     [0]  = ACTION_LAYER_MOMENTARY(1),
     [1]  = ACTION_LAYER_MOMENTARY(2),
     [2]  = ACTION_LAYER_MOMENTARY(3),
index de19e230762eb29491598a08e623a7ba15dd1d7b..600681eb24e11e79b342f65752ac69ff62e2e85a 100644 (file)
@@ -142,9 +142,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  * Fn action definition
  */
 #ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 #else
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
 #endif
     [0] = ACTION_DEFAULT_LAYER_SET(0),                // Default layer(not used)
     [1] = ACTION_LAYER_TAP_TOGGLE(1),                 // HHKB layer(toggle with 5 taps)
index f22a840524b0b31ae7dd0d26a9c6aee1513c87a4..3df93f6d869a40c41c361a8e75e0d57f63dc24fc 100644 (file)
@@ -32,5 +32,5 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 /*
  * Fn action definition
  */
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
 };
index d164dcec54d9a43bedefdbfdba2e91d7b4049a3e..24fdeec8cf6f77122abbb071cdec60834df3e347 100644 (file)
@@ -32,5 +32,5 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 /*
  * Fn action definition
  */
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
 };
index 69f8693eb9204e83d8017bbaef8d3056b01a9264..96c17e15d932f89c2446bce55ecf7f8b9426e905 100644 (file)
@@ -58,7 +58,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
     [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),    // tilde
 };
index 836752bf6dcaa0b18e2a05657cee359e1157210a..4d6a1261070544e3059eb8b56720a89fae9e9708 100644 (file)
@@ -17,7 +17,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "action.h"
 #include "util.h"
@@ -72,7 +71,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 }
 
 
-static const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
     [0] = ACTION_FUNCTION(0),   // toggle all LEDs
 };
 
@@ -92,7 +91,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 }
 
 
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* X68000 Keyboard Scan codes
     ,---. ,---.    ,-------------------,    ,-------------------.  ,-----------. ,---------------.
     | 61| | 62|    | 63| 64| 65| 66| 67|    | 68| 69| 6A| 6B| 6C|  | 5A| 5B| 5C| | 5D| 52| 53| 54|
@@ -128,16 +127,3 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
          LGUI,LALT,MHEN,     SPC,      HENK,KANA,APP, ZKHK,                       F14,      F15,      P0,  PCMM,PDOT
     ),
 };
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index cd8230cb2b38ed2c5db69f8d09d0a368a4e29ef5..6fc29cbf065c0743c4ef0ca5492fde909c572056 100644 (file)
@@ -11,8 +11,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # project specific files
-SRC =  keymap_common.c \
-       matrix.c \
+SRC =  matrix.c \
        led.c
 
 ifdef KEYMAP
diff --git a/converter/xt_usb/keymap_common.c b/converter/xt_usb/keymap_common.c
deleted file mode 100644 (file)
index e344fb4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-Copyright 2011,2012,2013 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 "keymap_common.h"
-#include "progmem.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index b9de6a868a26c66df73bd5bed1b3bc3b375a6ac9..9953c93825bab7c380baf719f8ed768e46457324 100644 (file)
@@ -28,10 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-// 32*8(256) byte array which converts PS/2 code into USB code
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
 /* All keys */
 #define KEYMAP_ALL( \
     K00,    K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D, K0E,K0F,K0G,                   \
index 02585150fbc9adde63c7c03d316bb95b669f8e39..b430b907cb3f4612362450f631ec0b4ce16114f9 100644 (file)
@@ -30,5 +30,5 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
 };
index 51b2fddb5b2e98e8b0fdf289589a47db07cdf87b..ecb13d7d9e426624e54a1380b9e7639e24009adb 100644 (file)
@@ -28,5 +28,5 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
 };
index bffd2bc606f0403b56968400bdeda21ff1eaaab1..8f087a8591bf42d4a409ec33edad1222d9017010 100644 (file)
@@ -54,7 +54,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     ),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
     [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),    // tilde
 };
index c82c126be097fb5765808c5ac4c9a08c59f8e0ec..97d23ae067d6799853d460ea2b537a6d42913ccb 100644 (file)
@@ -120,7 +120,6 @@ ifdef ACTIONMAP_ENABLE
     KEYMAP_FILE = actionmap
 else
     KEYMAP_FILE = keymap
-    SRC := keymap_common.c $(SRC)
 endif
 ifdef KEYMAP
     SRC := $(KEYMAP_FILE)_$(KEYMAP).c $(SRC)
index e5aee15d89f15b3fec5e10455d4dbea99fd4f45c..5eb434219145279e0ce41e7ae77ad7f70326ac62 100644 (file)
@@ -1,4 +1,3 @@
-#include <avr/pgmspace.h>
 #include "actionmap.h"
 #include "action_code.h"
 #include "actionmap_common.h"
@@ -37,7 +36,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 }
 
 
-const uint16_t PROGMEM actionmaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const action_t PROGMEM actionmaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* Default Layer
      * ,-----------------------------------------------------------.
      * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|   \   |
index 4a78b7a196addb528b9c29ede189652cd7846f3d..58ffbaaae5d6fdd4ec762311944edea40ffe94aa 100644 (file)
@@ -1,4 +1,3 @@
-#include <avr/pgmspace.h>
 #include "actionmap.h"
 #include "action_code.h"
 #include "actionmap_common.h"
@@ -10,7 +9,7 @@
 #define AC_LM1      ACTION_LAYER_MOMENTARY(1)                   // HHKB layer
 
 
-const uint16_t PROGMEM actionmaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const action_t PROGMEM actionmaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* Default Layer
      * ,-----------------------------------------------------------.
      * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|BSpc   |
diff --git a/keyboard/alps64/keymap_common.c b/keyboard/alps64/keymap_common.c
deleted file mode 100644 (file)
index fdb1769..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2012,2013 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 "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index 957db57922289c69b0d0193796a1b1cc77c46bad..17418783f681700bbe11d427521845de84d4de4b 100644 (file)
@@ -19,7 +19,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "action.h"
 #include "action_macro.h"
@@ -30,10 +29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 /* Alps64 keymap definition macro */
 #define KEYMAP( \
     K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K26, K27, \
index 68c629f0919f9ae0d50102e40ece42ed7990befb..7abf6feb46a9cb021ee608ab5d1a5736beda0238 100644 (file)
@@ -27,9 +27,9 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 };
 
 #ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 #else
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
 #endif
     [0]  = ACTION_LAYER_MOMENTARY(1),
     [1]  = ACTION_LAYER_MOMENTARY(2),
index d297d72fea3bc493647cf1c2d0bb21e1af151e99..17e3ac6a41f51480f41012f98177bdb069b41a6e 100644 (file)
@@ -121,7 +121,7 @@ enum macro_id {
 /*
  * Fn action definition
  */
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),                  // HHKB layer
     [1] = ACTION_LAYER_TAP_KEY(1, KC_ENTER),          // HHKB layer
     [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH),          // Cursor layer with Slash*
index 11a43d5901edd83eb74e52d60f7de02aca94ba92..034b80761e9d306d5c0e72ee5af780250ba60bad 100644 (file)
@@ -28,6 +28,6 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
         TRNS,TRNS,TRNS,          TRNS,                    TRNS,TRNS,TRNS,TRNS),
 };
 
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
     [0]  = ACTION_LAYER_MOMENTARY(1),
 };
index 083b87c30aff129bc315ad5a30fcbf90639acb9e..b72019b1832d559274b8a8279e576f4922f86376 100644 (file)
@@ -48,8 +48,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # project specific files
-SRC =  keymap_common.c \
-       matrix.c \
+SRC =  matrix.c \
        led.c
 
 ifdef KEYMAP
diff --git a/keyboard/gh60/keymap_common.c b/keyboard/gh60/keymap_common.c
deleted file mode 100644 (file)
index fdb1769..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2012,2013 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 "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index 896badd7481a1765abcf3908e6f36b6a348db0b8..7dbdf4b9c34387840d272cceed6c0f4eb4a0ea1a 100644 (file)
@@ -19,7 +19,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "action.h"
 #include "action_macro.h"
@@ -30,10 +29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 /* GH60 keymap definition macro
  * K2C, K31 and  K3C are extra keys for ISO
  */
index e6af28585b91bfbac97239edb5d8c28b58c275a2..cdeefb2622fa4826654213298f9564c2a38882e4 100644 (file)
@@ -131,7 +131,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
  * Fn action definition
  */
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(4),
     [1] = ACTION_LAYER_TAP_KEY(5, KC_SLASH),
     [2] = ACTION_LAYER_TAP_KEY(6, KC_SCLN),
index ce1b816ecb08f24ff4afb2197c81152bb17c1730..4253c385bc9439908ffac6e77b1bbbc4890f004d 100644 (file)
@@ -47,6 +47,6 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
  * Fn action definition
  */
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
 };
index 3138c18077f2eb48955309874a7509285af5f9f5..1cd52139e450011e02268e90f1fe162886f8456f 100644 (file)
@@ -8,4 +8,4 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
            LSFT,NO,  Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,NO,  RSFT, \
            LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL),
 };
-const uint16_t PROGMEM fn_actions[] = {};
+const action_t PROGMEM fn_actions[] = {};
index 7a612ee44d058ec54831f04d8e6ca6faa1e1c3c0..5e94184fa20d3e125535430150b78adc72cb0859 100644 (file)
@@ -90,7 +90,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,TRNS,TRNS,FN6, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,          TRNS, \
         TRNS,TRNS,TRNS,          TRNS,                    TRNS,TRNS,TRNS,TRNS),
 };
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     /* Poker Layout */
     [0] = ACTION_LAYER_MOMENTARY(6),  // to Fn overlay
     [1] = ACTION_LAYER_TOGGLE(4),     // toggle arrow overlay
index b8870fdd81d39d00eca4bbea156d056b5b7fcc6b..f604564467100450b4df0e94d2e9cf028e5d04ff 100644 (file)
@@ -40,7 +40,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,          UP,   \
         TRNS,TRNS,TRNS,          TRNS,                    TRNS,LEFT,DOWN,RGHT),
 };
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     /* Poker Layout */
     [0] = ACTION_LAYER_BIT_XOR(1, 0b0101, ON_BOTH),   // Poker Fn(with fix for Esc)
     [1] = ACTION_LAYER_TOGGLE(5),                     // Poker Arrow toggle
index aaa31fc57177bd84d3432bf4b9d25491f33a15cb..ec17605da5d5632b043ba3e24adfcc937b28d7b1 100644 (file)
@@ -65,7 +65,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
  * Fn action definition
  */
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     /* Poker Layout */
     [0] = ACTION_LAYER_SET(4, ON_PRESS),     // FN0 move to Fn'd             when press
     [1] = ACTION_LAYER_SET(5, ON_PRESS),     // FN1 move to Fn'd arrow       when press
index 8077dcee7b25fef87450a93bceffcbc555fc64bc..8724b56d55570084a8e1c355eb5721671855c407 100644 (file)
@@ -49,7 +49,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
  * Fn action definition
  */
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
     [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),    // tilde
 };
index 5a179bd24da994f5a75eb6c543255ce5d7605ab9..1146d5ec86ff2e581a4ebbd3bf9ed76640ee0a96 100644 (file)
@@ -49,8 +49,7 @@ TARGET_DIR = .
 
 
 # List C source files here. (C dependencies are automatically generated.)
-SRC += keymap_common.c \
-       matrix.c \
+SRC += matrix.c \
        led.c
 
 CONFIG_H = config.h
@@ -119,6 +118,9 @@ COMMAND_ENABLE = yes        # Commands for debug and configuration
 NKRO_ENABLE = yes              # USB Nkey Rollover
 #KEYMAP_SECTION_ENABLE = yes   # fixed address keymap for keymap editor
 #HHKB_JP = yes                 # HHKB JP support
+#UNIMAP_ENABLE = yes
+#ACTIONMAP_ENABLE = yes         # Use 16bit actionmap instead of 8bit keymap
+#KEYMAP_SECTION_ENABLE = yes   # fixed address keymap for keymap editor
 
 #OPT_DEFS += -DNO_ACTION_TAPPING
 #OPT_DEFS += -DNO_ACTION_LAYER
@@ -128,13 +130,22 @@ NKRO_ENABLE = yes         # USB Nkey Rollover
 #
 # Keymap file
 #
+ifdef UNIMAP_ENABLE
+    KEYMAP_FILE = unimap
+else
+    ifdef ACTIONMAP_ENABLE
+        KEYMAP_FILE = actionmap
+    else
+        KEYMAP_FILE = keymap
+    endif
+endif
 ifdef KEYMAP
-    SRC := keymap_$(KEYMAP).c $(SRC)
+    SRC := $(KEYMAP_FILE)_$(KEYMAP).c $(SRC)
 else
     ifdef HHKB_JP
-       SRC := keymap_jp.c $(SRC)
+        SRC := $(KEYMAP_FILE)_jp.c $(SRC)
     else 
-       SRC := keymap_hhkb.c $(SRC)
+        SRC := $(KEYMAP_FILE)_hhkb.c $(SRC)
     endif
 endif
 
index 7d0f8c3a9c097c2e6abd2e1c95efe5710921b341..e2d3a57090d21b69d7c1f00754facbb4ff669125 100644 (file)
@@ -13,8 +13,7 @@ TMK_DIR = ../../tmk_core
 TARGET_DIR = .
 
 # keyboard dependent files
-SRC =   keymap_common.c \
-       matrix.c \
+SRC =   matrix.c \
        led.c
 
 ifdef KEYMAP
index 8cb44352619ce26a7839483b19c964782ae785ee..aae99ee9a426323ab5485525fdc6b41c8193a70d 100644 (file)
@@ -49,8 +49,7 @@ TARGET_DIR = .
 
 
 # List C source files here. (C dependencies are automatically generated.)
-SRC += keymap_common.c \
-       matrix.c \
+SRC += matrix.c \
        led.c
 
 CONFIG_H = config_rn42.h
diff --git a/keyboard/hhkb/Makefile.unimap.jp b/keyboard/hhkb/Makefile.unimap.jp
new file mode 100644 (file)
index 0000000..3c41b25
--- /dev/null
@@ -0,0 +1,4 @@
+HHKB_JP = yes
+UNIMAP_ENABLE = yes
+KEYMAP_SECTION_ENABLE = yes
+include Makefile
diff --git a/keyboard/hhkb/hhkb_jp_unimap.hex b/keyboard/hhkb/hhkb_jp_unimap.hex
new file mode 100644 (file)
index 0000000..d079969
--- /dev/null
@@ -0,0 +1,1336 @@
+:100000000C94E4050C942B060C942B060C942B06F4\r
+:100010000C942B060C942B060C942B060C942B069C\r
+:100020000C942B060C942B060C94740D0C942B063C\r
+:100030000C94211C0C942B060C942B060C942B0670\r
+:100040000C942B060C942B060C942B060C942B066C\r
+:100050000C942B060C94C11C0C942B060C942B06B0\r
+:100060000C942B060C942B060C942B060C942B064C\r
+:100070000C942B060C942B060C942B060C942B063C\r
+:100080000C942B060C942B060C942B060C942B062C\r
+:100090000C942B060C942B060C942B060C942B061C\r
+:1000A0000C942B060C942B060C942B066A0E8C0ECB\r
+:1000B0007A0F8C0E7A0FD10EF40E7A0F490F5C0F67\r
+:1000C0006312631290129012EB1227131F151F1563\r
+:1000D0003F131F153A143A14F5141F151F150B156D\r
+:1000E0008080352B787939808080210877060780D9\r
+:1000F0008080201A7A1B168080801E802980808054\r
+:100100008080808080808080808022158019098096\r
+:1001100080801F147B1D0480808023172C050A809B\r
+:100120008080260C00360E808080251876100D8089\r
+:100130008080241C80110B80808027127E370F80E6\r
+:1001400080802A804F7D2880808074305152328098\r
+:1001500080802D137C38338080802E2F5075348022\r
+:10016000253032583A20253038620A000A722F634F\r
+:100170002030313233343536370A005B735D004B43\r
+:100180006579626F6172642073746172742E0A0003\r
+:1001900055534220636F6E666967757265642E0AF7\r
+:1001A000005B575D005B535D005B525D005B445D2F\r
+:1001B000005B435D001203480048004B00420020F2\r
+:1001C000006D006F00640000000E0374002E006DCF\r
+:1001D000002E006B002E0000000403090409028DAC\r
+:1001E00000050100A032090400000103010100091B\r
+:1001F00021110100012240000705810308000A09BE\r
+:100200000401000103010200092111010001224D36\r
+:10021000000705820308000A090402000103000028\r
+:10022000000921110100012236000705830308009F\r
+:100230000A09040300020300000009211101000162\r
+:100240002222000705840320000107050403200083\r
+:10025000010904040001030000000921110100014B\r
+:10026000223900070585031000011201100100006A\r
+:100270000008EDFEFECA04010102000105010906A5\r
+:10028000A101050719E029E7150025019508750169\r
+:10029000810205081901290595057501910295014D\r
+:1002A0007503910105071900297715002501957837\r
+:1002B00075018102C00631FF0974A101097515009D\r
+:1002C00026FF009520750881020976150026FF009B\r
+:1002D000952075089102C005010980A101850216CB\r
+:1002E000010026B7001A01002AB700751095018198\r
+:1002F00000C0050C0901A1018503160100269C021E\r
+:100300001A01002A9C02751095018100C00501099F\r
+:1003100002A1010901A100050919012905150025FE\r
+:10032000019505750181029501750381010501099A\r
+:100330003009311581257F95027508810609381528\r
+:1003400081257F950175088106050C0A3802158103\r
+:10035000257F950175088106C0C005010906A10128\r
+:10036000050719E029E715002501950875018102A7\r
+:100370009501750881010508190129059505750183\r
+:1003800091029501750391010507190029FF1500D8\r
+:1003900026FF00950675088100C00A0025303258F6\r
+:1003A00020006B6579626F6172645F7265706F7255\r
+:1003B000743A20004C45443A20253032580A0064F3\r
+:1003C000656C5F6B65795F6269743A2063616E2763\r
+:1003D000742064656C3A20253032580A00616464E8\r
+:1003E0005F6B65795F6269743A2063616E27742080\r
+:1003F0006164643A20253032580A004F6E65736894\r
+:100400006F743A2074696D656F75740A00646F6E5D\r
+:10041000652E0A00626F6F746D6167696320736394\r
+:10042000616E3A202E2E2E2000290A002575002FFD\r
+:10043000002575005D28002564002000256400204B\r
+:100440000025640020002564007C0025303258001F\r
+:100450006D6F7573656B6579205B62746E7C782057\r
+:1004600079207620685D287265702F61636C293A67\r
+:10047000205B006D6B5F776865656C5F74696D65A7\r
+:100480005F746F5F6D6178203D2025640A006D6B9D\r
+:100490005F776865656C5F6D61785F7370656564D3\r
+:1004A000203D2025640A006D6B5F74696D655F7483\r
+:1004B0006F5F6D6178203D2025640A006D6B5F6D74\r
+:1004C00061785F7370656564203D2025640A006D66\r
+:1004D0006B5F696E74657276616C203D2025640ADD\r
+:1004E000006D6B5F64656C6179203D2025640A00B6\r
+:1004F0006D6B5F776865656C5F74696D655F746F60\r
+:100500005F6D6178203D2025640A006D6B5F776820\r
+:1005100065656C5F6D61785F7370656564203D2013\r
+:1005200025640A006D6B5F74696D655F746F5F6D44\r
+:100530006178203D2025640A006D6B5F6D61785FF6\r
+:100540007370656564203D2025640A006D6B5F69EA\r
+:100550006E74657276616C203D2025640A006D6BB7\r
+:100560005F64656C6179203D2025640A000A0025DE\r
+:100570007500363A20776865656C5F74696D655FF4\r
+:10058000746F5F6D61783A20000A00257500353A76\r
+:1005900020776865656C5F6D61785F737065656411\r
+:1005A0003A20000A00257500343A2074696D655FB1\r
+:1005B000746F5F6D61783A20000A00257500333A48\r
+:1005C000206D61785F73706565643A20000A0025CC\r
+:1005D0007500323A20696E74657276616C286D73AD\r
+:1005E000293A20000A00257500313A2064656C61C3\r
+:1005F00079282A31306D73293A20000A092D2056B6\r
+:10060000616C756573202D0A004D3E004D25643EDA\r
+:1006100020003F007365742064656661756C740A20\r
+:1006200000433E200077686572652064656C7461E4\r
+:100630003A20637572736F723D25642C207768656C\r
+:10064000656C3D25640A53656520687474703A2FA3\r
+:100650002F656E2E77696B6970656469612E6F72A4\r
+:10066000672F77696B692F4D6F7573655F6B657960\r
+:10067000730A000A092D204D6F7573656B6579202B\r
+:100680002D0A4553432F713A09717569740A313A3D\r
+:100690000964656C6179282A31306D73290A323A10\r
+:1006A00009696E74657276616C286D73290A333A34\r
+:1006B000096D61785F73706565640A343A0974691D\r
+:1006C0006D655F746F5F6D61780A353A09776865AB\r
+:1006D000656C5F6D61785F73706565640A363A09B1\r
+:1006E000776865656C5F74696D655F746F5F6D6178\r
+:1006F000780A0A703A097072696E742076616C75B6\r
+:1007000065730A643A097365742064656661756C83\r
+:1007100074730A75703A092B310A646F776E3A095F\r
+:100720002D310A706775703A092B31300A70676491\r
+:100730006F776E3A092D31300A0A7370656564204F\r
+:100740003D2064656C7461202A206D61785F737050\r
+:10075000656564202A2028726570656174202F20E9\r
+:1007600074696D655F746F5F6D6178290A003F0081\r
+:100770004D3E2000433E20004C25640A000A092D0E\r
+:1007800020436F6E736F6C65202D0A4553432F71A4\r
+:100790003A09717569740A6D3A096D6F7573656B05\r
+:1007A00065790A000A092D204D61676963202D0AC9\r
+:1007B000643A0964656275670A783A096465627526\r
+:1007C00067206D61747269780A6B3A0964656275B5\r
+:1007D00067206B6579626F6172640A6D3A096465BE\r
+:1007E000627567206D6F7573650A763A0976657272\r
+:1007F00073696F6E0A733A097374617475730A636F\r
+:100800003A09636F6E736F6C65206D6F64650A30B3\r
+:100810002D343A096C61796572302D3428463130B7\r
+:100820002D4634290A506175733A09626F6F746CF2\r
+:100830006F616465720A653A09656570726F6D0A69\r
+:100840006E3A094E4B524F0A000A002575002E6E73\r
+:100850006B726F3A20000A002575002E7377617065\r
+:100860005F6261636B736C6173685F6261636B731A\r
+:10087000706163653A20000A002575002E73776168\r
+:10088000705F67726176655F6573633A20000A0086\r
+:100890002575002E6E6F5F6775693A20000A002586\r
+:1008A00075002E737761705F72616C745F7267752B\r
+:1008B000693A20000A002575002E737761705F6C1D\r
+:1008C000616C745F6C6775693A20000A00257500D9\r
+:1008D0002E636170736C6F636B5F746F5F636F6EB9\r
+:1008E00074726F6C3A20000A002575002E737761D0\r
+:1008F000705F636F6E74726F6C5F636170736C6F47\r
+:10090000636B3A20000A0025303258006B65796D20\r
+:1009100061705F636F6E6669672E7261773A20005F\r
+:100920000A002575002E6D6F7573653A20000A0068\r
+:100930002575002E6B6579626F6172643A20000A3A\r
+:10094000002575002E6D61747269783A20000A00E6\r
+:100950002575002E656E61626C653A20000A0025DF\r
+:100960003032580064656275675F636F6E666967F1\r
+:100970002E7261773A20000A002575006465666171\r
+:10098000756C745F6C617965723A20003F004E4B64\r
+:10099000524F3A206F66660A004E4B524F3A206F14\r
+:1009A0006E0A0074696D65725F7265616433322826\r
+:1009B000293A202530346C580A006B6579626F61E2\r
+:1009C00072645F6E6B726F3A2025580A006B65790E\r
+:1009D000626F6172645F69646C653A2025580A0031\r
+:1009E0006B6579626F6172645F70726F746F636F51\r
+:1009F0006C3A2025580A00686F73745F6B657962E2\r
+:100A00006F6172645F6C65647328293A2025580A07\r
+:100A1000000A092D20537461747573202D0A004754\r
+:100A200043433A20342E392E32204156522D4C4920\r
+:100A300042433A20312E382E3073766E2041565282\r
+:100A40005F415243483A20617672350A004F505454\r
+:100A5000494F4E533A204C55464120424F4F544D3A\r
+:100A600041474943204D4F5553454B455920455823\r
+:100A70005452414B455920434F4E534F4C45204310\r
+:100A80004F4D4D414E44204E4B524F204B45594DFA\r
+:100A900041505F53454354494F4E20343039360A54\r
+:100AA000004255494C443A20363233653034652093\r
+:100AB0002831333A35353A313420417567203236A2\r
+:100AC0002032303136290A005649443A20307846DF\r
+:100AD00045454428742E6D2E6B2E29205049443AEA\r
+:100AE000203078434146452848484B42206D6F648A\r
+:100AF00029205645523A203078303130340A0044AB\r
+:100B00004553433A20742E6D2E6B2E206B6579620F\r
+:100B10006F617264206669726D7761726520666FBD\r
+:100B2000722048484B42206D6F640A000A092D204C\r
+:100B300056657273696F6E202D0A000A6D6F7573AA\r
+:100B4000653A206F66660A000A6D6F7573653A2014\r
+:100B50006F6E0A000A6B6579626F6172643A206F8A\r
+:100B600066660A000A6B6579626F6172643A206F8B\r
+:100B70006E0A000A6D61747269783A206F66660ABF\r
+:100B8000000A6D61747269783A206F6E0A000A6417\r
+:100B9000656275673A206F6E0A000A646562756760\r
+:100BA0003A206F66660A000A0A626F6F746C6F61A2\r
+:100BB0006465722E2E2E2000433E20006565636F13\r
+:100BC0006E6669673A0A000011241FBECFEFDAE0B3\r
+:100BD000DEBFCDBF04B603FE27C080910202909114\r
+:100BE0000302A0910402B09105028730904BA74008\r
+:100BF000B04BD1F410920202109203021092040240\r
+:100C00001092050214BE84B7877F84BF0FB6F89494\r
+:100C1000A8958091600088618093600010926000C8\r
+:100C20000FBEE0E0F8E3099511E0A0E0B1E0EAE2F0\r
+:100C3000F1E502C005900D92A833B107D9F722E083\r
+:100C4000A8E3B1E001C01D92A230B207E1F70E9413\r
+:100C50009C0A0C9493280C940000FF93EF93E0916E\r
+:100C60003801F0913901309709F00995EF91FF9122\r
+:100C70000895FC018591803011F0EFDFFBCF0895DE\r
+:100C8000FF27E0E230E247FF0CC0419597FF09C023\r
+:100C9000EDE26095709580959095611D711D811DA7\r
+:100CA000911D27FF02C0219530E350E2AA27660F6D\r
+:100CB000771F881F991FAA1FA41710F0A41B639504\r
+:100CC0005A95A9F7AA3008F0A95FA05DAF93F395F4\r
+:100CD000611571058105910541F7ED3211F4EF932E\r
+:100CE000F395F21718F43F93F395FBCF8F91B5DF8F\r
+:100CF000FA95E1F70895E991F9918591803021F015\r
+:100D0000853219F0AADFF9CF089520E0E8945591D3\r
+:100D10005532C1F3503311F4689455915A3348F465\r
+:100D2000505390F3220F022E220F220F200D250F79\r
+:100D3000F4CF0EF4219589919991533619F35337D5\r
+:100D400029F1533559F1BC0188279927E8945C367D\r
+:100D500021F48991999168945591543639F446EF6C\r
+:100D60007EF077FF0DC08FEF9FEF0AC055374AE046\r
+:100D700039F0583540E121F0523642E009F008954B\r
+:100D8000FF93EF937DDFEF91FF91B7CFFF93EF9349\r
+:100D9000FC0181918030B9F360DFFBCFFF93EF93CB\r
+:100DA00068DFF1CFDF93CF93CDB7DEB72596A3DF12\r
+:100DB000CF91DF9108958FEF84B980E485B957987A\r
+:100DC0005F9A87B1806C87B988B1806C88B92E9A98\r
+:100DD0002F98EAE4F1E080E18E0F11928E13FDCF9F\r
+:100DE000EAE3F1E080E18E0F11928E13FDCF8AE4E9\r
+:100DF00091E090935D0180935C018AE391E0909390\r
+:100E00005B0180935A010895EF92FF920F931F9315\r
+:100E1000CF93DF9380915A0190915B0120915C0107\r
+:100E200030915D0130935B0120935A0190935D01F5\r
+:100E300080935C01C0E0D0E001E010E080E090E051\r
+:100E4000FC2FF770EC2FE87025B1207C2F2BAC0124\r
+:100E500033E0440F551F3A95E1F7242B25B928B10B\r
+:100E60002F73EE2311F0206401C0206828B92AE115\r
+:100E70002A95F1F700C0A0915A01B0915B01AC0F27\r
+:100E8000BD1F2C9130E0082E02C0359527950A949D\r
+:100E9000E2F720FD2F9AA5E3AA95F1F70000F6B43A\r
+:100EA0002E98BAE1BA95F1F700C040915C015091DB\r
+:100EB0005D01BA016C0F7D1F4F9B0BC09801082E7E\r
+:100EC00001C0220F0A94EAF72095DB013C9123230D\r
+:100ED00009C0DB01EC909801082E01C0220F0A9492\r
+:100EE000EAF72E292C9326B56F2D70E02F1518F0F8\r
+:100EF00026B530E004C026B530E021503F4F261B18\r
+:100F0000370B2630310558F0A0915A01B0915B01A2\r
+:100F1000AC0FBD1F2C91DA01AC0FBD1F2C93BAE1B1\r
+:100F2000BA95F1F700C02F982E9A20EA2A95F1F78A\r
+:100F300001968830910509F087CFA0915C01B091AE\r
+:100F40005D01AC0FBD1FE0915A01F0915B01EC0F08\r
+:100F5000FD1F9C918081981751F00E945F1C609347\r
+:100F60005E0170935F01809360019093610121960F\r
+:100F7000C031D10509F062CF8091F801853021F0B0\r
+:100F80008091F801811111C060915E0170915F0143\r
+:100F900080916001909161010E94951C61317742BE\r
+:100FA0008105910510F00E94E21B81E0DF91CF9155\r
+:100FB0001F910F91FF90EF90089520915C01309167\r
+:100FC0005D01F901E80FF11D808108950F931F93D2\r
+:100FD000CF93DF938CE691E00E943906C0E0D0E029\r
+:100FE00000E611E0E0915C01F0915D01EC0FFD1F66\r
+:100FF00080810E94B71B1F928F93DF93CF931F9323\r
+:101000000F930E94D20621960F900F900F900F9091\r
+:101010000F900F90C031D10529F7DF91CF911F912B\r
+:101020000F91089508950895569A81FF02C05E9A1F\r
+:1010300008955E9808958091750108959FB7F8947A\r
+:10104000109264019FBF9091F801943009F057C04D\r
+:101050009091E9009F703091EC00232F217030FDBA\r
+:1010600020E8922B24E02093E9002091EB0020FF60\r
+:1010700043C02091EE0027FF3FC020916201222350\r
+:1010800021F02091E80025FF37C01092620126E090\r
+:101090003091E80035FD15C03091F801343061F52C\r
+:1010A0003091EB0035FD28C0215021F481E0809380\r
+:1010B000620122C0EFE9FFE03197F1F700C00000C4\r
+:1010C000E7CF8093F1008091E80085FD0AC0809110\r
+:1010D000E80080FFFCCF8091E8008E778093E800E5\r
+:1010E00006C08FB7F89421E0209364018FBF9F70F2\r
+:1010F0009093E90080E008959F709093E9008FEF4E\r
+:101100000895CF93DF9300D01F92CDB7DEB79C0137\r
+:101110008091F801843019F593E099833B832A8309\r
+:101120009093E9008FEF9091E800815095FD06C003\r
+:1011300095ED9A95F1F700008111F5CF8091E800C7\r
+:1011400085FF0DC040E050E063E070E0CE01019605\r
+:101150000E94620B8091E8008E778093E8000F90E8\r
+:101160000F900F90DF91CF910895CF93DF9300D030\r
+:101170001F92CDB7DEB72091F801243021F522E08F\r
+:1011800029839B838A8383E08093E9008FEF90918A\r
+:10119000E800815095FD06C095ED9A95F1F70000A5\r
+:1011A0008111F5CF8091E80085FF0DC040E050E04F\r
+:1011B00063E070E0CE0101960E94620B8091E8002E\r
+:1011C0008E778093E8000F900F900F90DF91CF9172\r
+:1011D00008952091F8012430F1F422E02093E900F1\r
+:1011E0002FEF3091E800215035FD06C035ED3A95DE\r
+:1011F000F1F700002111F5CF2091E80025FF0BC089\r
+:1012000040E050E065E070E00E94620B8091E800F1\r
+:101210008E778093E8000895CF93DF932091F801B3\r
+:10122000243009F048C0EC0180910A018823E1F0E4\r
+:1012300080910B018823C1F085E08093E9008FEF56\r
+:101240009091E800815095FD06C095E19A95F1F7DF\r
+:1012500000008111F5CF8091E80085FF2CC040E0AF\r
+:1012600050E060E170E017C081E08093E9008FEF0B\r
+:101270009091E800815095FD06C095ED9A95F1F7A3\r
+:1012800000008111F5CF8091E80085FF14C040E097\r
+:1012900050E068E070E0CE010E94620B8091E800AF\r
+:1012A0008E778093E80080E1FE01A5E6B1E0019031\r
+:1012B0000D928A95E1F7DF91CF91089581EB91E04E\r
+:1012C0000E9439068091F701811109C00E94F90C32\r
+:1012D0000E94560D8091E20084608093E2000895A0\r
+:1012E0008DEA91E00E9439061092F701089589EA8B\r
+:1012F00091E00C943906209163012F5F822F62E305\r
+:101300000E942828992319F02093630108951092D0\r
+:10131000630180916401882371F18091F801843028\r
+:1013200041F58091E9008F702091EC00922F91702F\r
+:1013300020FD90E8892B94E09093E9009091EB00D8\r
+:1013400090FF14C09091EE0097FF10C09091E800BC\r
+:1013500095FF03C01092F100F9CF9091E80090FF43\r
+:1013600005C09091E8009E779093E8008F7080937D\r
+:10137000E90010926401089542E061EC81E00E946E\r
+:10138000730C42E061EC82E00E94730C42E061EC7D\r
+:1013900083E00E94730C42E261EC84E00E94730CD3\r
+:1013A00042E161EC85E00C94730C8091FA0183308A\r
+:1013B00009F455C030F4813071F0823009F48EC0E8\r
+:1013C00008958A3009F47AC08B3009F460C08930FE\r
+:1013D00009F09CC020C08091F901813A09F096C0C3\r
+:1013E0008091E800877F8093E8008091FD019091D3\r
+:1013F000FE01892B21F460E185E691E003C060E005\r
+:1014000080E090E070E00E94AF0B8091E8008B7765\r
+:101410008093E80008958091F901813209F076C047\r
+:101420008091FD019091FE01009719F0049709F059\r
+:101430006DC08091E800877F8093E8008091E8008C\r
+:1014400082FD05C08091F8018111F8CF5FC08091C5\r
+:10145000F100809375018091E8008B7753C08091F3\r
+:10146000F901813A09F052C08091FD019091FE018D\r
+:10147000892B09F04BC08091E800877F8093E800BA\r
+:101480008091E80080FFFCCF80910A0136C08091F6\r
+:10149000F9018132D9F58091FD019091FE01892BEE\r
+:1014A000A9F58091E800877F8093E8000E94A80C4E\r
+:1014B0008091FB0180930A010C9440158091F90101\r
+:1014C000813221F58091E800877F8093E8000E94B7\r
+:1014D000A80C8091FC018093760108958091F90118\r
+:1014E000813AA1F48091E800877F8093E8008091A1\r
+:1014F000E80080FFFCCF809176018093F10080911D\r
+:10150000E8008E778093E8000C94A80C0895089565\r
+:101510000895089585EA91E00E9439060C94890A9D\r
+:101520000E94E21B8091F601882329F00E940B1C87\r
+:1015300081110C944C0B089584B7877F84BF0FB63C\r
+:10154000F894A89580916000886180936000109263\r
+:1015500060000FBE90E080E80FB6F89480936100C1\r
+:10156000909361000FBE0E94870A0E943F100E9464\r
+:10157000F90C0E94560D8091E20084608093E20095\r
+:101580008EE198E00E94B21B78948091F80184303B\r
+:1015900019F00E94920FF9CF80E991E00E9439067C\r
+:1015A0000E94411080E091E00E94AD0F8FE791E032\r
+:1015B0000E9439060E94880A8091F801853039F42A\r
+:1015C0008BE791E00E9439060E94900AF5CF0E94B5\r
+:1015D00047100E94920FF0CF0C941F1C81EA91E0FB\r
+:1015E0000E9439060C94EC0A292F33272330310549\r
+:1015F000C9F064F42130310581F02230310509F061\r
+:1016000043C08DE890E02DED31E042C0213231053C\r
+:10161000F1F02232310541F137C082E190E02AE653\r
+:1016200032E036C099278130910541F08230910532\r
+:1016300041F0892B49F5E9EDF1E005C0E9ECF1E075\r
+:1016400002C0E5EBF1E0849190E09F0121C065309C\r
+:10165000D8F4E62FF0E0EE0FFF1FED5DFE4F208186\r
+:10166000318189E090E014C0653070F470E0FB01D6\r
+:10167000EE0FFF1FE75EFE4F20813181FB01EC5E24\r
+:10168000FE4F808190E004C080E090E020E030E0F8\r
+:10169000FA0131832083089580E189BD82E189BD0B\r
+:1016A00009B400FEFDCF8091D8008F7D8093D800D3\r
+:1016B0008091E00082608093E0008091E00081FDF5\r
+:1016C000FCCF0895CF92DF92EF92FF920F931F937A\r
+:1016D000CF93DF93EC018B017A010E94C70C81113B\r
+:1016E00035C0E114F10439F0F70180819181081BC4\r
+:1016F000190BC80FD91FC12CD12C0115110529F1C7\r
+:101700008091E80085FD18C08091E8008E77809375\r
+:10171000E8000E94920FE114F10449F0F701808182\r
+:101720009181C80ED91ED182C08285E00FC00E946F\r
+:10173000C70C882311F30AC089918093F1000150EE\r
+:101740001109FFEFCF1ADF0AD8CF80E0DF91CF91E8\r
+:101750001F910F91FF90EF90DF90CF90089520910F\r
+:10176000FF01309100022617370748F06115710517\r
+:1017700039F42091E8002E772093E80001C0B901E8\r
+:1017800040E061157105A9F12091F801222309F4C7\r
+:1017900043C0253009F442C02091E80023FD40C039\r
+:1017A0002091E80022FD32C02091E80020FFE9CF1F\r
+:1017B0004091F3002091F20030E0342BFC01CF0186\r
+:1017C0006115710559F02830310540F481918093FD\r
+:1017D000F100615071092F5F3F4FF1CF41E0283098\r
+:1017E000310509F040E02091E8002E772093E800D1\r
+:1017F000C8CF4111C9CF0AC08091F801882361F098\r
+:10180000853061F08091E80083FD0AC08091E80096\r
+:1018100082FFF2CF80E0089582E0089583E008958A\r
+:1018200081E008952091FF013091000226173707CB\r
+:1018300048F06115710539F42091E8002E77209366\r
+:10184000E80001C0B901FC0120E06115710591F1CA\r
+:101850008091F801882309F440C0853009F43FC025\r
+:101860008091E80083FD3DC08091E80082FD2FC09B\r
+:101870008091E80080FFE9CF2091F3008091F20091\r
+:1018800090E0922B6115710559F08830910540F474\r
+:1018900024912093F1003196615071090196F2CFA5\r
+:1018A00021E0089709F020E08091E8008E7780938E\r
+:1018B000E800CBCF2111CCCF0AC08091F80188235A\r
+:1018C00061F0853061F08091E80083FD0AC080916D\r
+:1018D000E80082FFF2CF80E0089582E0089583E07F\r
+:1018E000089581E00895982F973058F59093E90076\r
+:1018F000981739F07091EC002091ED005091F000B4\r
+:1019000003C0242F762F50E021FF19C03091EB0047\r
+:101910003E7F3093EB003091ED003D7F3093ED0042\r
+:101920003091EB0031603093EB007093EC0020932A\r
+:10193000ED005093F0002091EE0027FF07C09F5F5D\r
+:10194000D3CF8F708093E90081E0089580E00895FF\r
+:101950008091F90187FF11C08091E80082FD05C0E8\r
+:101960008091F8018111F8CF11C08091E8008B7748\r
+:101970000BC08091F801882349F08091E80080FF36\r
+:10198000F8CF8091E8008E778093E8000895209149\r
+:10199000E4003091E50095E64091EC00842F8170E1\r
+:1019A00040FF22C08091E80080FD1CC08091F801BA\r
+:1019B000882391F0853091F08091EB0085FD10C077\r
+:1019C0004091E4005091E5004217530729F39A0132\r
+:1019D000915011F784E0089582E0089583E008951E\r
+:1019E00081E0089580E008954091E80042FFDECF55\r
+:1019F00008950E94670D0E946F0DE0EEF0E0808177\r
+:101A000081608083E8EDF0E080818F77808319BC6E\r
+:101A1000A7EDB0E08C918E7F8C9380818F7E808348\r
+:101A20001092F70108950F931F93CF93DF930E94B5\r
+:101A3000670D0E946F0DC8EDD0E088818F77888395\r
+:101A400088818068888388818F7D888319BC109203\r
+:101A5000F8011092F4011092F6011092F50100EED7\r
+:101A600010E0F80180818B7F80838881816088838A\r
+:101A700042E060E080E00E94730CE1EEF0E08081E3\r
+:101A80008E7F8083E2EEF0E08081816080838081C0\r
+:101A900088608083F80180818E7F80838881806167\r
+:101AA0008883DF91CF911F910F910895E8EDF0E0C9\r
+:101AB00080818F7E8083E7EDF0E08081816080838C\r
+:101AC00084E082BF81E08093F7010C94130DE8ED70\r
+:101AD000F0E080818E7F80831092E2000895109262\r
+:101AE000DA001092E10008951F920F920FB60F9244\r
+:101AF00011242F933F934F935F936F937F938F9313\r
+:101B00009F93AF93BF93EF93FF938091E10082FF88\r
+:101B10000BC08091E20082FF07C08091E1008B7FC3\r
+:101B20008093E1000E947B098091DA0080FF1FC052\r
+:101B30008091D80080FF1BC08091DA008E7F809357\r
+:101B4000DA008091D90080FF0DC080E189BD82E17B\r
+:101B500089BD09B400FEFDCF81E08093F8010E94A9\r
+:101B60005E0905C019BC1092F8010E9470098091AD\r
+:101B7000E10080FF19C08091E20080FF15C08091D4\r
+:101B8000E2008E7F8093E2008091E200806180938A\r
+:101B9000E2008091D80080628093D80019BC85E073\r
+:101BA0008093F8010E948A0A8091E10084FF30C08E\r
+:101BB0008091E20084FF2CC080E189BD82E189BD73\r
+:101BC00009B400FEFDCF8091D8008F7D8093D800AE\r
+:101BD0008091E1008F7E8093E1008091E2008F7E12\r
+:101BE0008093E2008091E20081608093E200809126\r
+:101BF000F401882311F084E007C08091E30087FDA1\r
+:101C000002C081E001C083E08093F8010E94EE0AE7\r
+:101C10008091E10083FF24C08091E20083FF20C017\r
+:101C20008091E100877F8093E10082E08093F8015A\r
+:101C30001092F4018091E1008E7F8093E100809109\r
+:101C4000E2008E7F8093E2008091E20080618093C9\r
+:101C5000E20042E060E080E00E94730C0E9477099D\r
+:101C6000FF91EF91BF91AF919F918F917F916F9174\r
+:101C70005F914F913F912F910F900FBE0F901F904A\r
+:101C800018951F93CF93DF93CDB7DEB7AA970FB602\r
+:101C9000F894DEBF0FBECDBFE9EFF1E088E08E0F14\r
+:101CA0009091F10091938E13FBCF0E94D509809102\r
+:101CB000E80083FF1FC18091F9019091FA01492F3B\r
+:101CC00050E04A30510508F015C1FA01EA5AFF4FB9\r
+:101CD0000C944828803881F0823809F00BC180913B\r
+:101CE000FD018F708093E9008091EB0085FB8827D0\r
+:101CF00080F91092E90006C08091F5019091F601FB\r
+:101D0000911182609091E800977F9093E800809312\r
+:101D1000F1001092F100C8C0282F2D7F09F0EAC011\r
+:101D2000882319F0823061F0E5C08091FB01813099\r
+:101D300009F0E0C0933009F080E08093F6012BC0F9\r
+:101D40008091FB01811127C08091FD018F7009F402\r
+:101D5000D1C08093E9002091EB0020FF1CC093309C\r
+:101D600021F48091EB00806214C09091EB009061AF\r
+:101D70009093EB0021E030E0A90102C0440F551F11\r
+:101D80008A95E2F74093EA001092EA008091EB0016\r
+:101D900088608093EB001092E9008091E800877FD3\r
+:101DA00086C08111A7C01091FB011F778091E300CD\r
+:101DB0008078812B8093E3008091E800877F809377\r
+:101DC000E8000E94A80C8091E80080FFFCCF809181\r
+:101DD000E30080688093E300111102C082E001C03B\r
+:101DE00083E08093F80186C08058823008F082C07A\r
+:101DF0008091FB019091FC018C3D53E0950779F5B2\r
+:101E000083E08A838AE289834FB7F894DE011396D0\r
+:101E100020E03EE051E2E32FF0E050935700E491E0\r
+:101E200020FF03C0E295EF703F5FEF708E2F90E0D0\r
+:101E3000EA3010F0C79601C0C0968D939D932F5F36\r
+:101E4000243149F74FBF8091E800877F8093E800F5\r
+:101E50006AE270E0CE0101960E94AF0B14C0AE01A1\r
+:101E60004F5F5F4F6091FD010E94F40ABC01892B16\r
+:101E700009F440C09091E800977F9093E800898131\r
+:101E80009A810E94120C8091E8008B778093E80081\r
+:101E900031C0803879F58091E800877F8093E80031\r
+:101EA0008091F4018093F1008091E8008E77809317\r
+:101EB000E8000E94A80C1EC081111CC09091FB017B\r
+:101EC0009230C0F48091E800877F8093E80090937F\r
+:101ED000F4010E94A80C8091F401811106C0809148\r
+:101EE000E30087FD02C081E001C084E08093F80137\r
+:101EF0000E94BC098091E80083FF0AC08091E8003D\r
+:101F0000877F8093E8008091EB0080628093EB00F4\r
+:101F1000AA960FB6F894DEBF0FBECDBFDF91CF916A\r
+:101F20001F910895CF938091F8018823A1F0C0916B\r
+:101F3000E900CF709091EC00892F817090FD80E8CE\r
+:101F4000C82B1092E9008091E80083FD0E94410EA9\r
+:101F5000CF70C093E900CF91089590937C01809356\r
+:101F60007B010895E0917B01F0917C01309721F095\r
+:101F70000190F081E02D099480E00895EF92FF92A6\r
+:101F80000F931F93CF93DF93E0917B01F0917C013E\r
+:101F90003097B1F18C010280F381E02D0995809199\r
+:101FA000E30182FF2DC080FF04C082EA93E00E941B\r
+:101FB0003906E80110E18CE9E82E83E0F82E8091E3\r
+:101FC000E30180FF0BC088811F928F93FF92EF92F5\r
+:101FD0000E94D2060F900F900F900F9011502196F3\r
+:101FE0001111EDCF8091E30180FF0AC08AE993E0EF\r
+:101FF000DF91CF911F910F91FF90EF900C943906D4\r
+:10200000DF91CF911F910F91FF90EF900895E09194\r
+:102010007B01F0917C01309721F00480F581E02D67\r
+:10202000099408952091790130917A0182179307DC\r
+:1020300071F090937A0180937901E0917B01F091A6\r
+:102040007C01309721F00680F781E02D09940895F6\r
+:1020500020917701309178018217930771F0909366\r
+:10206000780180937701E0917B01F0917C013097BA\r
+:1020700021F00084F185E02D0994089508950C94D1\r
+:102080003E100E944A1C0E94DB060C94981DCF92C1\r
+:10209000DF92EF92FF920F931F93CF93DF9300D0C5\r
+:1020A00000D000D0CDB7DEB70E9404078EE7C82E5F\r
+:1020B00081E0D82E00E010E0E02E802F0E94DD07A6\r
+:1020C000F60141916F01F42EF826B1F40F5F1F4F16\r
+:1020D0000031110589F78FEF89838A831B820E9463\r
+:1020E000531C8160782F9D838C8349815A816B8139\r
+:1020F0008D810E94061147C09091E30191FF04C0B9\r
+:102100008E830E94E6078E8120E030E04F2D50E064\r
+:10211000922FBA01022E02C0759567950A94E2F7D4\r
+:1021200060FF2BC02983EA8221E030E0690102C010\r
+:10213000CC0CDD1C9A95E2F790E08C219D21892B37\r
+:1021400009F420E02B830E94531C8160782F9D832B\r
+:102150008C8349815A816B818D810E94061149814E\r
+:102160005A816B817C818D810E94CE1BF801E258DF\r
+:10217000FE4F8081C826C08206C02F5F3F4F2830A7\r
+:10218000310531F6A3CF0E94CD1B0E942221109170\r
+:102190007D010E94B20F181741F10E94B20F809387\r
+:1021A0007D019091E30192FF0EC090FF0CC01F9241\r
+:1021B0008F9384EB93E09F938F930E94D2060F90AE\r
+:1021C0000F900F900F9080917D0126960FB6F89496\r
+:1021D000DEBF0FBECDBFDF91CF911F910F91FF905A\r
+:1021E000EF90DF90CF900C94DF1B26960FB6F894FB\r
+:1021F000DEBF0FBECDBFDF91CF911F910F91FF903A\r
+:10220000EF90DF90CF9008950C941408CF93DF9354\r
+:10221000CDB7DEB72B970FB6F894DEBF0FBECDBF9C\r
+:10222000942F4F83252F588769877A878B874A8514\r
+:102230005B85452B21F02F3F09F59F3FF9F4DE0127\r
+:10224000119686E0FD0111928A95E9F785E0FE017D\r
+:10225000379601900D928A95E1F749815A816B81F9\r
+:102260007C818D819E810E94E3172B960FB6F89496\r
+:10227000DEBF0FBECDBFDF91CF9108954F8158854E\r
+:1022800069857A858B850E94CE1BD9CFCF93882311\r
+:1022900009F4A4C0C82F8CEF8C0F813A48F48C2F1E\r
+:1022A0000E94A22581119AC08C2F0E946E1A0CC028\r
+:1022B00080E28C0F883058F4C77081E001C0880F2D\r
+:1022C000CA95EAF70E94191BCF910C945D1B8BE510\r
+:1022D0008C0F833078F4C53A29F0C63A31F083E8A0\r
+:1022E00090E005C081E890E002C082E890E0CF91E4\r
+:1022F0000C94121088E58C0F853108F06FC0C83A35\r
+:1023000061F1C93A69F1CA3A71F1CB3A79F1CC3A43\r
+:1023100081F1CD3A89F1CE3A91F1CF3A99F1C13BB1\r
+:10232000A1F1C03BA9F1C23BB1F1C33BB9F1C43B40\r
+:10233000C1F1C53BC9F1C63BD1F1C73BD9F1C83B9F\r
+:10234000E1F1C93BE9F1CA3BF1F1CB3BF9F1CC3BFF\r
+:1023500009F43FC080E090E03EC082EE90E03BC0D8\r
+:1023600089EE90E038C08AEE90E035C085EB90E0D1\r
+:1023700032C086EB90E02FC083EB90E02CC084EB62\r
+:1023800090E029C087EB90E026C08CEC90E023C061\r
+:102390008DEC90E020C083E891E01DC08AE891E0D8\r
+:1023A0001AC082E991E017C084E991E014C081E28B\r
+:1023B00092E011C083E292E00EC084E292E00BC092\r
+:1023C00085E292E008C086E292E005C087E292E0F2\r
+:1023D00002C08AE292E0CF910C942810CF91089528\r
+:1023E000882329F19CEF980F913A18F40E94C11AA2\r
+:1023F0000DC090E2980F983058F4877091E001C0BA\r
+:10240000990F8A95EAF7892F0E941F1B0C945D1B78\r
+:102410009BE5980F933020F480E090E00C9412102C\r
+:10242000885A853120F480E090E00C9428100895BB\r
+:10243000882321F00E94191B0C945D1B08958823AA\r
+:1024400021F00E941F1B0C945D1B0895CF92DF9218\r
+:10245000EF92FF920F931F93CF93DF9300D000D0A2\r
+:1024600000D0CDB7DEB725E0FC01DE01119601906A\r
+:102470000D922A95E1F7FC0140813181F28025819E\r
+:1024800022952F7063817481672B09F4D8C23F3F76\r
+:1024900019F44F3F09F4D3C26C0149833A8389810F\r
+:1024A0009A812E830E942D1A182F092F0E942C1A10\r
+:1024B0000E943C19E02FE295EF70F0E0E05AFF4FE8\r
+:1024C0002E810C944828802F807F902F9F70092F99\r
+:1024D000882311F00295007FFF2049F0002309F4C2\r
+:1024E0005FC2802F0E942C1B0E945D1B59C2812F4E\r
+:1024F0000E94F011002309F4A2C2802F0E94321B17\r
+:1025000026960FB6F894DEBF0FBECDBFDF91CF91F8\r
+:102510001F910F91FF90EF90DF90CF900C945D1B77\r
+:10252000802F807F902F9F70092F803211F00295AD\r
+:10253000007F112319F0113001F129C0FF20A9F00B\r
+:10254000802F222349F1213039F526960FB6F894D1\r
+:10255000DEBF0FBECDBFDF91CF911F910F91FF90D6\r
+:10256000EF90DF90CF900C943C1B222319F0213088\r
+:1025700009F465C20E94451B2CC0FF20E9F02630FB\r
+:1025800008F05DC20E94161B802329F022C0FF20A4\r
+:10259000F1F0211115C0802F26960FB6F894DEBFFA\r
+:1025A0000FBECDBFDF91CF911F910F91FF90EF90A4\r
+:1025B000DF90CF900C941812253008F040C209C06B\r
+:1025C000F601858180FFECC18F708583E4CF2111F6\r
+:1025D000FBC1802F69C1202F26952695237030E0FE\r
+:1025E0002115310521F021303105C9F028C2FF2025\r
+:1025F00021F0812F902F937002C080E090E026960A\r
+:102600000FB6F894DEBF0FBECDBFDF91CF911F9103\r
+:102610000F91FF90EF90DF90CF900C941210FF205D\r
+:1026200021F0812F902F937002C080E090E02696D9\r
+:102630000FB6F894DEBF0FBECDBFDF91CF911F91D3\r
+:102640000F91FF90EF90DF90CF900C942810812F86\r
+:10265000FF2019F00E94A81F02C00E941020269699\r
+:102660000FB6F894DEBF0FBECDBFDF91CF911F91A3\r
+:102670000F91FF90EF90DF90CF900C949520802FDA\r
+:10268000837009F078C0F110DAC1812F82958695A8\r
+:102690008770880F880F912F9F70C92ED12CE12C45\r
+:1026A000F12C082E04C0CC0CDD1CEE1CFF1C0A947F\r
+:1026B000D2F714FF12C04FE050E060E070E004C0B9\r
+:1026C000440F551F661F771F8A95D2F7CB01BA01B9\r
+:1026D000609570958095909503C060E070E0CB01A7\r
+:1026E000202F269526952370422F50E04230510529\r
+:1026F000D1F04330510559F16C297D298E299F294C\r
+:102700004130510541F126960FB6F894DEBF0FBE59\r
+:10271000CDBFDF91CF911F910F91FF90EF90DF9090\r
+:10272000CF900C9451196C297D298E299F292696CA\r
+:102730000FB6F894DEBF0FBECDBFDF91CF911F91D2\r
+:102740000F91FF90EF90DF90CF900C9463190E944F\r
+:102750005119C701B60126960FB6F894DEBF0FBE19\r
+:10276000CDBFDF91CF911F910F91FF90EF90DF9040\r
+:10277000CF900C943F19FF2019F0802F817001C079\r
+:102780008695882309F45BC1812F82958695877091\r
+:10279000880F880F912F9F70C92ED12CE12CF12C1E\r
+:1027A000082E04C0CC0CDD1CEE1CFF1C0A94D2F7D2\r
+:1027B00014FF12C04FE050E060E070E004C0440F2E\r
+:1027C000551F661F771F8A95D2F7CB01BA01609516\r
+:1027D00070958095909503C060E070E0CB01202F4C\r
+:1027E000269526952370422F50E042305105D1F0B6\r
+:1027F0004330510559F16C297D298E299F2941309B\r
+:10280000510541F126960FB6F894DEBF0FBECDBF3D\r
+:10281000DF91CF911F910F91FF90EF90DF90CF90BC\r
+:102820000C94081A6C297D298E299F2926960FB6AB\r
+:10283000F894DEBF0FBECDBFDF91CF911F910F91F6\r
+:10284000FF90EF90DF90CF900C941A1A0E94081A14\r
+:10285000C701B60126960FB6F894DEBF0FBECDBFF6\r
+:10286000DF91CF911F910F91FF90EF90DF90CF906C\r
+:102870000C94F619103F41F118F4103E48F48BC047\r
+:10288000123F09F450C0D8F1133F09F460C083C06F\r
+:102890001F70802F8F71FF2021F00E948F19812FD0\r
+:1028A0007BCE0E94B019812F26960FB6F894DEBF1A\r
+:1028B0000FBECDBFDF91CF911F910F91FF90EF9091\r
+:1028C000DF90CF900C941F12FF20A9F0253008F064\r
+:1028D000B6C0802F8F7126960FB6F894DEBF0FBE5C\r
+:1028E000CDBFDF91CF911F910F91FF90EF90DF90BF\r
+:1028F000CF900C94D519263008F0A1C0EACFFF2064\r
+:10290000A1F0802F8F7126960FB6F894DEBF0FBE10\r
+:10291000CDBFDF91CF911F910F91FF90EF90DF908E\r
+:10292000CF900C948F19FF2061F3802F8F71269622\r
+:102930000FB6F894DEBF0FBECDBFDF91CF911F91D0\r
+:102940000F91FF90EF90DF90CF900C94B019FF2083\r
+:1029500091F0802F8F7126960FB6F894DEBF0FBED0\r
+:10296000CDBFDF91CF911F910F91FF90EF90DF903E\r
+:10297000CF900C947A1926960FB6F894DEBF0FBE4E\r
+:10298000CDBFDF91CF911F910F91FF90EF90DF901E\r
+:10299000CF900C947519FF20A1F0222309F4B1CF38\r
+:1029A000812F26960FB6F894DEBF0FBECDBFDF9104\r
+:1029B000CF911F910F91FF90EF90DF90CF900C94EB\r
+:1029C0004611222309F4B1CF812F26960FB6F89431\r
+:1029D000DEBF0FBECDBFDF91CF911F910F91FF9052\r
+:1029E000EF90DF90CF900C94F011402F4F70612F3B\r
+:1029F000C6010E94421D26960FB6F894DEBF0FBE98\r
+:102A0000CDBFDF91CF911F910F91FF90EF90DF909D\r
+:102A1000CF900C948718402F4F70612FC6012696D7\r
+:102A20000FB6F894DEBF0FBECDBFDF91CF911F91DF\r
+:102A30000F91FF90EF90DF90CF900C94451D26965C\r
+:102A40000FB6F894DEBF0FBECDBFDF91CF911F91BF\r
+:102A50000F91FF90EF90DF90CF9008950E94391B67\r
+:102A60000E94081B0E945D1B0E94C7210E949520A6\r
+:102A700080E090E00E94121080E090E00C9428101A\r
+:102A80000E94291B0C942E150E942D1A292F229585\r
+:102A90002F7030E02C3031054CF42A3031056CF4C5\r
+:102AA000225031092230310588F407C02C3031051D\r
+:102AB00049F02F30310531F009C0803E48F0803FA9\r
+:102AC00029F406C093FB882780F9089580E00895D3\r
+:102AD00081E00895CF93DF9300D000D01F92CDB74F\r
+:102AE000DEB70F900F900F900F900F90DF91CF9166\r
+:102AF0000895CF93DF9300D000D000D0CDB7DEB7DC\r
+:102B000026960FB6F894DEBF0FBECDBFDF91CF91F2\r
+:102B100008951F93CF93DF93C0918E0116E08091AB\r
+:102B20008F01C81799F0D0E01C9FF0011D9FF00D98\r
+:102B30001124E057FE4F408151816281738184816D\r
+:102B400095810E9479152196C770E9CFDF91CF91C9\r
+:102B50001F9108954091C0015091C1016091C2013F\r
+:102B60007091C3018091C4019091C5010C947915B5\r
+:102B70008091C50182958F7009F054C08091C20187\r
+:102B8000882309F44FC080918E01A0918F0160913C\r
+:102B9000C0017091C1014091C3015091C401B6E0E0\r
+:102BA0008A1709F43FC090E041155105C1F17F3FFC\r
+:102BB00011F46F3FA1F1B89FF001B99FF00D1124FE\r
+:102BC000E057FE4F218172132AC02081621327C073\r
+:102BD0002281211124C0238134812417350710F468\r
+:102BE00021503109241B350B2C323140C0F4209187\r
+:102BF000C5012F7020612093C50126E0289FF001B8\r
+:102C0000299FF00D1124EB56FE4F80818F7080615B\r
+:102C1000808380EC91E00E9426120C948915019625\r
+:102C20008770BECF0895CF92DF92EF92FF920F93FD\r
+:102C30001F93CF93DF93CDB7DEB762970FB6F894AB\r
+:102C4000DEBF0FBECDBF8C0185E0F801DE011D9611\r
+:102C500001900D928A95E1F7D8014C9111965C9103\r
+:102C6000119712966C9112971396CD90DC90149751\r
+:102C70003091C0017091C1018091C3019091C40154\r
+:102C8000009709F473C17F3F19F43F3F09F46EC107\r
+:102C9000E090C201EE2009F4C5C02091C501C8161C\r
+:102CA000D90650F0F601E81BF90BCF01FF24F3948D\r
+:102CB0008C329140C8F009C0809590958C0D9D1D77\r
+:102CC000FF24F3948C32914078F0F12C207F09F0AE\r
+:102CD000C6C07C2DD98AC88A89890E946A1580EC71\r
+:102CE00091E00E942612B1C0822F807F09F045C07A\r
+:102CF000751313C0341311C061110FC02F70206100\r
+:102D00002093C5010E94AA1580EC91E00E94261232\r
+:102D10008091C501F80185832EC0CD2819F15F3F50\r
+:102D200011F44F3FF9F0F62E61111CC080918E0115\r
+:102D300020918F0136E0821709F45BC090E0389F44\r
+:102D4000F001399FF00D1124E057FE4F71815713A8\r
+:102D500006C07081471303C07281711103C00196D0\r
+:102D60008770E9CFF62E662309F41DC18091C50155\r
+:102D700081608093C501F12C16C1751309C034130D\r
+:102D800007C0611105C08091C501F8018583C8C0E5\r
+:102D90004D875E878D859E856A8B0E9444156A8962\r
+:102DA0008823E1F16623D1F12091C501822F82951C\r
+:102DB0008F7090E0029774F08091C0019091C101F2\r
+:102DC00098878F831986DB86CA862C87CE01079663\r
+:102DD0000E94261286E0F801A0ECB1E001900D926D\r
+:102DE0008A95E1F70E94B8150E94AA15FF24F39472\r
+:102DF000DAC04D875E878D859E850E942D1A292F0A\r
+:102E000022952F7030E0223031050CF0BFC09F704A\r
+:102E100009F0B9C0805E883008F4C5C0C8010E94BE\r
+:102E20002612E4CFC816D90608F453C0F601E81BF1\r
+:102E3000F90BCF018C32914008F453C0F12C7C2D5A\r
+:102E4000D98AC88A89890E946A15E0ECF1E086E097\r
+:102E5000DF011D928A95E9F70E94AA15A4C0751397\r
+:102E600014C0341312C0611110C08091C501F80163\r
+:102E70008583C8010E94261286E0E0ECF1E0DF01C4\r
+:102E80001D928A95E9F7FE2C8EC04D875E878D8551\r
+:102E90009E856A8B0E9444156A89882309F4BECFF7\r
+:102EA000662309F4BBCF2091C501822F82958F70D4\r
+:102EB00090E002970CF48ECF8091C0019091C101F7\r
+:102EC0009A8389831B82DD82CC822E83CE01019678\r
+:102ED0007FCF809590958C0D9D1D8C32914008F090\r
+:102EE000ADCFF62E662309F499CF75132EC0341397\r
+:102EF0002CC02091C50120FD1FC0822F82958F70AC\r
+:102F0000D9F0D80115962C9315978F3049F08F5F23\r
+:102F1000982F9295907F822F8F70892B15968C9386\r
+:102F2000C8010E94261286E0F801A0ECB1E00190F1\r
+:102F30000D928A95E1F790CF86E0F801A0ECB1E020\r
+:102F400001900D928A95E1F72EC04D875E878D85A1\r
+:102F50009E850E94441581113DCF8091C5018160FD\r
+:102F60008093C501C8010E9426121DC0662309F482\r
+:102F700055CF4D875E878D859E850E944415882399\r
+:102F800009F44CCF27CF811145CF0DC02430310536\r
+:102F90000CF044CF9F7009F43DCFD80115969C9159\r
+:102FA000907F09F037CF8F2D62960FB6F894DEBF71\r
+:102FB0000FBECDBFDF91CF911F910F91FF90EF908A\r
+:102FC000DF90CF9008951F93CF93DF93CDB7DEB7F7\r
+:102FD0002C970FB6F894DEBF0FBECDBF4F83588736\r
+:102FE00069877A878B879C87CE0107960E94131684\r
+:102FF000882369F08F8198852A853B85232BF1F101\r
+:103000009F3F09F063C08F3F09F060C037C086E082\r
+:10301000FE013796DE01119601900D928A95E1F737\r
+:103020006F817885EA85FB85309741F17F3F11F408\r
+:103030006F3F21F120918F0130E0C9010196877027\r
+:10304000992740918E0150E08417950709F447C0F5\r
+:1030500069837A83FD83EC8396E0929FD001939FEE\r
+:10306000B00D1124A057BE4FFE01319601900D9274\r
+:103070009A95E1F780938F010E94891516E080915F\r
+:103080008E0190918F018917C1F1189FC001112401\r
+:1030900080579E4F0E941316882379F1E0918E018C\r
+:1030A0001E9FF0011124E057FE4F40815181628143\r
+:1030B0007381848195810E94791580918E0190E0C1\r
+:1030C00001968770992780938E01D9CF4F815885BB\r
+:1030D00069857A858B859C850E947915CFCF0E9462\r
+:1030E000401510928F0110928E01E0ECF1E086E025\r
+:1030F000DF011D928A95E9F7C1CF2C960FB6F8949F\r
+:10310000DEBF0FBECDBFDF91CF911F910895DF923B\r
+:10311000EF92FF920F931F93CF93DF93FC01892BC4\r
+:1031200009F48AC0E12CF12CDD24D394EF0121961F\r
+:103130008491853709F461C058F4843708F04EC093\r
+:10314000843008F06AC08130D1F0823071F174C0EF\r
+:10315000883709F45DC050F4863709F455C08737C5\r
+:1031600009F06AC08E2D0E94261B54C09CE7980F60\r
+:10317000903708F061C08F770E94F01150C08F0126\r
+:103180000E5F1F4FFE01849190E2980F983050F42B\r
+:103190008770FD2D01C0FF0F8A95EAF78F2F0E94DF\r
+:1031A0002C1B14C00E94461113C08F010E5F1F4FCD\r
+:1031B000FE01C49180E28C0F883060F4C7708D2DC1\r
+:1031C00001C0880FCA95EAF70E94321B0E945D1B5E\r
+:1031D000E80125C08C2F0E94F011FACF9F012E5FCD\r
+:1031E0003F4FFE01C491CC2369F08FE99FE0019726\r
+:1031F000F1F700C00000C150F6CF9F012E5F3F4F96\r
+:10320000FE01F490E9010BC00E94161BE82E07C0D6\r
+:103210000E94291B0E945D1B02C00E9446118F2D37\r
+:10322000882341F0EFE9FFE03197F1F700C000009B\r
+:103230008150F6CFFE017ACFDF91CF911F910F9190\r
+:10324000FF90EF90DF9008956093CA017093CB01D7\r
+:103250008093CC019093CD010E94DD1B0C942E1520\r
+:103260006093C6017093C7018093C8019093C90110\r
+:103270000E94DE1B0C942E1508950C9424190F93B4\r
+:103280001F930091CA011091CB012091CC01309184\r
+:10329000CD01602B712B822B932B1F910F910C94DE\r
+:1032A00024190F931F930091CA011091CB01209113\r
+:1032B000CC013091CD0160237123822393231F9190\r
+:1032C0000F910C9424190F931F930091CA01109130\r
+:1032D000CB012091CC013091CD016027712782274D\r
+:1032E00093271F910F910C94241960E070E0CB019B\r
+:1032F0000C9430190F931F9341E050E060E070E0B0\r
+:103300008A019B0104C0000F111F221F331F8A95E1\r
+:10331000D2F7C901B8011F910F910C9430190F9386\r
+:103320001F9341E050E060E070E004C0440F551F7F\r
+:10333000661F771F8A95D2F78091C6019091C701C9\r
+:10334000A091C801B091C9018A019B01082B192BDA\r
+:103350002A2B3B2BC901B8011F910F910C943019F6\r
+:103360000F931F9341E050E060E070E004C0440F11\r
+:10337000551F661F771F8A95D2F740955095609527\r
+:1033800070958091C6019091C701A091C801B0913C\r
+:10339000C9018A019B01082319232A233B23C90160\r
+:1033A000B8011F910F910C9430190F931F9341E0B6\r
+:1033B00050E060E070E004C0440F551F661F771FA7\r
+:1033C0008A95D2F78091C6019091C701A091C8015A\r
+:1033D000B091C9018A019B01082719272A273B2799\r
+:1033E000C901B8011F910F910C9430190F931F93CD\r
+:1033F0000091C6011091C7012091C8013091C90107\r
+:10340000602B712B822B932B1F910F910C943019F1\r
+:103410000F931F930091C6011091C7012091C8011D\r
+:103420003091C90160237123822393231F910F914F\r
+:103430000C9430190F931F930091C6011091C7018E\r
+:103440002091C8013091C9016027712782279327F5\r
+:103450001F910F910C9430190895CF92DF92EF9243\r
+:10346000FF920F931F93CF93DF938C01C090CA01FB\r
+:10347000D090CB01E090CC01F090CD014091C601FD\r
+:103480005091C7016091C8017091C901C42AD52A21\r
+:10349000E62AF72ACFE1D0E0D701C6010C2E04C0FE\r
+:1034A000B695A795979587950A94D2F780FF07C0A0\r
+:1034B000B8018C2F0E94171D8130910531F421979E\r
+:1034C00058F7B80180E00E94171DDF91CF911F913E\r
+:1034D0000F91FF90EF90DF90CF90089590910A01A7\r
+:1034E000992321F090910B01911109C020910C01B9\r
+:1034F00030910D01F90132969FEF40E030C0982FD6\r
+:103500009695969596959F30A0F4E0910C01F091D8\r
+:103510000D01E90FF11D877021E030E0A90102C023\r
+:10352000440F551F8A95E2F7CA019181892B818347\r
+:1035300008959091E30190FF23C01F928F938DED2A\r
+:1035400093E09F938F930E94D2060F900F900F905D\r
+:103550000F9008959F3F39F04F5F4E3041F05191E9\r
+:103560005813F8CF0DC05111F7CF942FF5CF9F3FCF\r
+:1035700039F0F901E90FF11D97FDFA95828308955D\r
+:10358000089590910A01992321F090910B019111D6\r
+:1035900009C020910C0130910D01F9013296205F94\r
+:1035A0003F4F30C0982F9695969596959F30A8F4EA\r
+:1035B000E0910C01F0910D01E90FF11D877021E000\r
+:1035C00030E0A90102C0440F551F8A95E2F7CA01F5\r
+:1035D000809591818923818308959091E30190FFE3\r
+:1035E00016C01F928F938FEB93E09F938F930E944F\r
+:1035F000D2060F900F900F900F9008953196E2171A\r
+:10360000F30729F090819813F9CF1082F7CF08952E\r
+:1036100081E090E0E0910C01F0910D01E80FF91FBD\r
+:103620001082019680319105A9F708958091E201F9\r
+:1036300008959091E201892B8093E201089580958D\r
+:103640009091E20189238093E20108958093E20141\r
+:1036500008951092E20108959091E101892B8093E1\r
+:10366000E101089580959091E10189238093E10122\r
+:1036700008951092E10108958093D0010E94531C97\r
+:103680009093CF018093CE0108951092D0011092B3\r
+:10369000CF011092CE01089580910C0190910D01FF\r
+:1036A000FC0131969C01205F3F4F80E09191911188\r
+:1036B0008F5FE217F307D1F70895E0910C01F091C5\r
+:1036C0000D018091E2018083E0910C01F0910D01E8\r
+:1036D00090818091E101892B80838091D0018823A2\r
+:1036E000D9F10E94531C2091CE013091CF01821755\r
+:1036F000930748F00E94531C2091CE013091CF01D6\r
+:10370000821B930B0AC00E94531C2091CE01309162\r
+:10371000CF0120953095820F931F8C32914070F02D\r
+:103720008091E30180FF08C08BEF93E09F938F931C\r
+:103730000E94D2060F900F900E94451BE0910C0151\r
+:10374000F0910D0190818091D001892B80830E949E\r
+:103750004C1B81110E94451B80910C0190910D0121\r
+:103760000C94BE0F9093390180933801089582958F\r
+:10377000982F9C7C392F36953695282F237344E05B\r
+:10378000249FC0011124932F982B292F2A7A269544\r
+:10379000892F8575880F822B08950895CF93DF9325\r
+:1037A00000D000D01F92CDB7DEB70F900F900F90D2\r
+:1037B0000F900F90DF91CF910895089508950C9484\r
+:1037C000041108958091F801843021F11092E401F0\r
+:1037D00020E488E190E00FB6F894A895809360000B\r
+:1037E0000FBE2093600083B7817F846083BF83B75F\r
+:1037F000816083BF7894889583B78E7F83BF0FB62F\r
+:10380000F894A89580916000886180936000109280\r
+:1038100060000FBE0895CF930E9412080E94040713\r
+:103820000E941308C0E08C2F0E94DD07811104C0A4\r
+:10383000CF5FC031C1F701C081E0CF9108950C94F2\r
+:1038400040151F920F920FB60F9211248F939F93E2\r
+:10385000AF93BF938091E401811113C08091E50182\r
+:103860009091E601A091E701B091E8014196A11D78\r
+:10387000B11D8093E5019093E601A093E701B09319\r
+:10388000E801BF91AF919F918F910F900FBE0F9064\r
+:103890001F90189582E084BD93E095BD9AEF97BD87\r
+:1038A00080936E0008952FB7F8948091E501909170\r
+:1038B000E601A091E701B091E8012FBF08952FB76D\r
+:1038C000F8946091E5017091E6018091E701909193\r
+:1038D000E8012FBF0895CF92DF92EF92FF920F93EE\r
+:1038E0001F932FB7F8944091E5015091E601609144\r
+:1038F000E7017091E8012FBF6A017B01EE24FF24EC\r
+:103900008C0120E030E0C016D106E206F30610F488\r
+:10391000415051099A01281B390BC9011F910F9180\r
+:10392000FF90EF90DF90CF900895CF92DF92EF92CB\r
+:10393000FF920F931F932FB7F894C090E501D0909A\r
+:10394000E601E090E701F090E8012FBF97018601C2\r
+:10395000061B170B280B390BC616D706E806F90607\r
+:1039600018F0C901B80106C0C901B8016150710958\r
+:10397000810991091F910F91FF90EF90DF90CF90F7\r
+:1039800008951F920F920FB60F9211248F939F9359\r
+:10399000AF93BF938091E5019091E601A091E7017B\r
+:1039A000B091E8010196A11DB11D8093E5019093AE\r
+:1039B000E601A093E701B093E801BF91AF919F9119\r
+:1039C0008F910F900FBE0F901F9018950E94F90CC9\r
+:1039D000F8942FEF87EA91E6215080409040E1F77C\r
+:1039E00000C0000087E090EBDC018093020290931E\r
+:1039F0000302A0930402B09305029CE088E10FB695\r
+:103A0000F894A895809360000FBE90936000FFCF5C\r
+:103A100028E0929FF0011124E80FF11DE052FF4FC2\r
+:103A20008491982F90778F7092959F700895CF937F\r
+:103A3000C82FCB010E94081D292F30E0E82FF0E0AD\r
+:103A4000A90164E0440F551F6A95E1F74E2B5F2BE7\r
+:103A50004038510519F480E090E012C088E0C89F1A\r
+:103A6000200D311D112484E0220F331F8A95E1F7C8\r
+:103A7000E20FF31FEE0FFF1FE050F849859194917C\r
+:103A8000CF91089580E090E008950895CF92DF925D\r
+:103A9000EF92FF920F931F93CF936C01C0E08C2F96\r
+:103AA0000E94DD0700E010E0E82EF12CC701002E97\r
+:103AB00002C0959587950A94E2F780FF16C0602FA3\r
+:103AC0007C2F80E00E94171D9C018C159D0559F0EC\r
+:103AD000832F807E932F907C11F0803A31F430E078\r
+:103AE0002C153D0511F481E009C00F5F1F4F083010\r
+:103AF0001105E1F6CF5FC03191F680E0CF911F91C3\r
+:103B00000F91FF90EF90DF90CF900895CF93DF93C8\r
+:103B1000EC018CE290E00E94461D882329F0CE0142\r
+:103B2000DF91CF910C94461D80E0DF91CF910895F5\r
+:103B3000CF930E94001F811102C00E94E61E84E103\r
+:103B400094E00E943906C5E6C15049F00E9404077E\r
+:103B50008FE39CE90197F1F700C00000F5CF8DE0FD\r
+:103B600094E00E94390689E290E00E94861D81114E\r
+:103B70002BC18AE290E00E94861D81110E94E61E00\r
+:103B800085E090E00E94861D81110E94E61C0E9443\r
+:103B9000E11B0E940B1F8093E30187E090E00E94ED\r
+:103BA000861D8823C1F18BE190E00E94861D882349\r
+:103BB00051F08091E30181FB222720F991E09227C7\r
+:103BC00090FB81F90FC08EE090E00E94861D882353\r
+:103BD00061F08091E30182FB222720F991E0922796\r
+:103BE00090FB82F98093E30116C080E190E00E948F\r
+:103BF000861D9091E301882341F093FB222720F951\r
+:103C000081E0822780FB93F904C0892F809580FB97\r
+:103C100090F99093E3018091E3010E940F1F0E94AD\r
+:103C20001D1F8093010280EE90E00E94861D882374\r
+:103C300041F080910102982F909590FB80F980933C\r
+:103C4000010289E390E00E94861D882359F080914B\r
+:103C5000010281FB222720F991E0922790FB81F954\r
+:103C60008093010282EE90E00E94861D882359F025\r
+:103C70008091010282FB222720F991E0922790FB9C\r
+:103C800082F98093010286EE90E00E94861D8823CF\r
+:103C900059F08091010283FB222720F991E09227BD\r
+:103CA00090FB83F98093010283EE90E00E94861DD1\r
+:103CB000882359F08091010284FB222720F991E0AA\r
+:103CC000922790FB84F98093010285E390E00E94A3\r
+:103CD000861D882359F08091010285FB222720F957\r
+:103CE00091E0922790FB85F98093010281E390E0B7\r
+:103CF0000E94861D882359F08091010286FB2227AD\r
+:103D000020F991E0922790FB86F98093010281E1EE\r
+:103D100090E00E94861D882359F08091010287FB64\r
+:103D2000222720F991E0922790FB87F980930102E6\r
+:103D3000809101020E94211F8091010287FB882748\r
+:103D400080F980930B0187E290E00E94861DC82FC6\r
+:103D50008EE190E00E94861D8111C2608FE190E0AB\r
+:103D60000E94861D8111C46080E290E00E94861D41\r
+:103D70008111C86081E290E00E94861D8111C061BE\r
+:103D800082E290E00E94861D8111C06283E290E091\r
+:103D90000E94861D8111C06484E290E00E94861D0D\r
+:103DA000882311F0C06802C0CC2329F08C2F0E9418\r
+:103DB000181F6C2F03C00E94141F682F70E080E052\r
+:103DC00090E0CF910C943D19CF9108956DEE7EEF68\r
+:103DD00080E090E00E947E2860E082E090E00E9417\r
+:103DE000702860E083E090E00E94702860E084E04A\r
+:103DF00090E00E94702860E085E090E00C947028CC\r
+:103E000080E090E00E946A2821E08D3E9E4F09F0FC\r
+:103E100020E0822F089582E090E00C946228682FC1\r
+:103E200082E090E00C94702883E090E00C9462288B\r
+:103E3000682F83E090E00C94702884E090E00C946C\r
+:103E40006228682F84E090E00C9470288091EB0148\r
+:103E500080FF0BC06091110185E0689FB0011124C3\r
+:103E600075956795759567952BC081FF09C0609121\r
+:103E7000110185E0689FB00111247595679520C0F8\r
+:103E800082FF07C06091110185E0689FB001112495\r
+:103E900017C09091EC019923D1F060911001961711\r
+:103EA00088F72091110185E0289F90011124929FAD\r
+:103EB000A001939F500D112470E0CA010E94342884\r
+:103EC0006038710540F46115710539F002C065E094\r
+:103ED00070E0862F08958FE7089581E0089580911E\r
+:103EE000EB0180FF08C060910F0170E07595679548\r
+:103EF0007595679521C081FF06C060910F0170E044\r
+:103F00007595679519C082FF04C060910F0170E03C\r
+:103F100010C09091EC019923C1F060910E019617A9\r
+:103F2000A0F780910F01899FC001112470E00E94C9\r
+:103F300034286038710528F46115710521F0862F49\r
+:103F400008958FE7089581E0089561E070E0F4CF6F\r
+:103F5000803F21F40E94261F819504C0813F29F4EF\r
+:103F60000E94261F8093EF010895823F21F40E9452\r
+:103F7000261F819504C0833F29F40E94261F809349\r
+:103F8000EE010895893F19F40E946F1F05C08A3F12\r
+:103F900031F40E946F1F81958093F00108958B3F4B\r
+:103FA00021F40E946F1F819504C08C3F29F40E9468\r
+:103FB0006F1F8093F1010895843F21F48091ED01FA\r
+:103FC000816017C0853F21F48091ED01826011C0AE\r
+:103FD000863F21F48091ED0184600BC0873F21F47E\r
+:103FE0008091ED01886005C0883F31F48091ED013A\r
+:103FF00080618093ED0108958D3F21F48091EB0164\r
+:1040000081600BC08E3F21F48091EB01826005C07E\r
+:104010008F3F29F48091EB0184608093EB01089538\r
+:10402000803F39F48091EF0187FF6CC01092EF015F\r
+:1040300069C0813F29F48091EF011816BCF362C07A\r
+:104040009091EE01823F29F497FF5CC01092EE013F\r
+:1040500059C0833F19F41916CCF354C0893F41F479\r
+:104060008091F00118160CF04DC01092F0014AC07A\r
+:104070008A3F29F48091F00187FF44C0F6CF8B3F3F\r
+:1040800039F48091F10187FF3DC01092F1013AC0EF\r
+:104090008C3F29F48091F1011816BCF333C0843FA2\r
+:1040A00021F48091ED018E7F17C0853F21F480912E\r
+:1040B000ED018D7F11C0863F21F48091ED018B7F52\r
+:1040C0000BC0873F21F48091ED01877F05C0883FB9\r
+:1040D00031F48091ED018F7E8093ED0113C08D3F0F\r
+:1040E00021F48091EB018E7F0BC08E3F21F48091F3\r
+:1040F000EB018D7F05C08F3F29F48091EB018B7F11\r
+:104100008093EB018091EE0181110EC08091EF014F\r
+:1041100081110AC08091F001811106C08091F101E6\r
+:10412000811102C01092EC0108958091E30183FF98\r
+:104130007EC080E594E00E9439068091ED011F92D7\r
+:104140008F938BE494E09F938F930E94D20689E42F\r
+:1041500094E00E9439068091EE01282F082E000C71\r
+:10416000330B3F938F9386E494E09F938F930E9449\r
+:10417000D20684E494E00E9439068091EF01282F52\r
+:10418000082E000C330B3F938F9381E494E09F93B0\r
+:104190008F930E94D2068FE394E00E9439068091AB\r
+:1041A000F001282F082E000C330B3F938F938CE3E4\r
+:1041B00094E09F938F930E94D2068AE394E00E943A\r
+:1041C00039068091F101282F082E000C330B3F9304\r
+:1041D0008F9387E394E09F938F930E94D20684E3AA\r
+:1041E00094E00E9439068091EC011F928F9381E345\r
+:1041F00094E09F938F930E94D2068FE294E00E94F6\r
+:1042000039068091EB011F928F938CE294E09F938B\r
+:104210008F930E94D20689E294E00E9439068DB7FE\r
+:104220009EB74C960FB6F8949EBF0FBE8DBF8DEE15\r
+:1042300091E00E9407100E94531C9093EA01809322\r
+:10424000E90108951F93CF93DF938091E901909145\r
+:10425000EA010E946B1CAC019091EC01992321F0C2\r
+:104260002091120130E006C0209113018AE0289FBE\r
+:10427000900111244217530708F485C08091EE0184\r
+:10428000C091EF01D091F0011091F101811107C0AF\r
+:10429000C11175C0D11173C0111171C074C09F3F9D\r
+:1042A00019F09F5F9093EC01181624F40E94261FCA\r
+:1042B0008093EE018091EE0187FF05C00E94261FCA\r
+:1042C00081958093EE011C1624F40E94261F809392\r
+:1042D000EF018091EF0187FF05C00E94261F8195A5\r
+:1042E0008093EF016091EE01662331F1C091EF01FF\r
+:1042F000CC2311F1062E000C770B880B990B0E9432\r
+:104300002F2723E333E343E35FE30E9493270E94D5\r
+:10431000F7266093EE016C2FCC0F770B880B990B6F\r
+:104320000E942F2723E333E343E35FE30E949327B5\r
+:104330000E94F7266093EF011D1624F40E946F1F60\r
+:104340008093F0018091F00187FF05C00E946F1FEC\r
+:1043500081958093F001111624F40E946F1F8093C1\r
+:10436000F1018091F10187FF05C00E946F1F8195C7\r
+:104370008093F101DF91CF911F910C9495209F3F85\r
+:1043800009F08FCF97CFDF91CF911F910895EDEE78\r
+:10439000F1E085E0DF011D928A95E9F71092EC01CA\r
+:1043A0001092EB01089583E796E00E9439061F9270\r
+:1043B00081E08F931F9285E08F9385E296E09F9333\r
+:1043C0008F930E94D2060F900F900F900F900F9036\r
+:1043D0000F9008958330E9F128F4813061F0823044\r
+:1043E00009F10895853009F462C008F449C08630A7\r
+:1043F00009F474C0089580911301262F30E0280F2E\r
+:10440000311D2F3F310524F4680F6093130103C061\r
+:104410008FEF80931301809113011F928F938EE58C\r
+:1044200095E072C080911201262F30E0280F311DD7\r
+:104430002F3F310524F4680F6093120103C08FEF02\r
+:1044400080931201809112011F928F938CE495E06A\r
+:104450005BC080911101262F30E0280F311D2F3FC6\r
+:10446000310524F4680F6093110103C08FEF80932E\r
+:104470001101809111011F928F9389E395E044C04F\r
+:1044800080911001262F30E0280F311D2F3F31057C\r
+:1044900024F4680F6093100103C08FEF8093100124\r
+:1044A000809110011F928F9384E295E02DC080913E\r
+:1044B0000F01262F30E0280F311D2F3F310524F446\r
+:1044C000680F60930F0103C08FEF80930F018091FD\r
+:1044D0000F011F928F938BE095E016C080910E0123\r
+:1044E000262F30E0280F311D2F3F310524F4680FAF\r
+:1044F00060930E0103C08FEF80930E0180910E0137\r
+:104500001F928F9380EF94E09F938F930E94D20627\r
+:104510000F900F900F900F900895833081F128F441\r
+:10452000813059F08230D1F00895853009F449C0C6\r
+:10453000B8F1863009F456C00895809113016817C8\r
+:1045400020F4861B8093130102C010921301809106\r
+:1045500013011F928F9381EE94E054C08091120159\r
+:10456000681720F4861B8093120102C0109212017A\r
+:10457000809112011F928F938FEC94E043C0809141\r
+:104580001101681720F4861B8093110102C010925C\r
+:104590001101809111011F928F938CEB94E032C036\r
+:1045A00080911001681720F4861B8093100102C0CF\r
+:1045B00010921001809110011F928F9387EA94E06E\r
+:1045C00021C080910F01681720F4861B80930F0192\r
+:1045D00002C010920F0180910F011F928F938EE8FD\r
+:1045E00094E010C080910E01681720F4861B809320\r
+:1045F0000E0102C010920E0180910E011F928F9346\r
+:1046000083E794E09F938F930E94D2060F900F90C0\r
+:104610000F900F900895CF93C82F1F928F9388E724\r
+:1046200097E09F938F930E94D20681E090E0A0E0F4\r
+:10463000B0E0BC01CD0104C0660F771F881F991F31\r
+:10464000CA95D2F70E943D190F900F900F900F90CE\r
+:10465000CF910C944015CF938B3109F4CBC108F066\r
+:1046600049C08E3009F4DAC100F5873009F4A9C1D8\r
+:10467000A8F4863009F05AC28091E301817F8E7FD1\r
+:104680008093E3018DE797E00E94390688EB9BE079\r
+:104690000E94390681E08093F30191C1883009F4CA\r
+:1046A0005BC08B3009F487C141C2813109F426C255\r
+:1046B00020F4803109F4C6C139C2863109F4DDC164\r
+:1046C000893109F033C28CE29BE00E9439068FEFFA\r
+:1046D0009AE00E94390688EC9AE00E94390681EA45\r
+:1046E0009AE00E9439068DE49AE00E9439068FE133\r
+:1046F0009AE063C1853309F413C268F4873209F480\r
+:104700000FC228F48E3108F411C28D510CC28932C7\r
+:1047100009F406C20BC2833438F48A3308F002C2AB\r
+:10472000883309F448C102C2833409F4F9C18834DA\r
+:1047300009F0FCC10E94401587EA9BE00E943906FF\r
+:104740009FEF23ED80E3915020408040E1F700C0CF\r
+:1047500000000E94E61C33C18CEB9BE00E943906EE\r
+:104760008CE799E00E9439060E94141F1F928F93D4\r
+:1047700089E799E09F938F930E94D20687E799E09B\r
+:104780000E9439060E940B1FC82F84E699E00E9400\r
+:1047900039061F92CF938FE599E09F938F930E94E4\r
+:1047A000D2068DE599E00E94390683E599E00E94E2\r
+:1047B00039068C2F81701F928F9380E599E09F932B\r
+:1047C0008F930E94D2068EE499E00E94390684E419\r
+:1047D00099E00E943906C1FB882780F91F928F93C8\r
+:1047E00081E499E09F938F930E94D2068FE399E032\r
+:1047F0000E94390683E399E00E943906C2FB8827AC\r
+:1048000080F91F928F9380E399E09F938F930E948A\r
+:10481000D2068EE299E00E94390685E299E00E9474\r
+:104820003906C3FBCC27C0F91F92CF9382E299E0EF\r
+:104830009F938F930E94D20680E299E00E943906EE\r
+:104840000E941D1FC82F8CE099E00E9439061F921C\r
+:10485000CF9387E099E09F938F930E94D20685E0E3\r
+:1048600099E00E9439068CEE98E00E9439068C2F60\r
+:1048700081701F928F9389EE98E09F938F930E948F\r
+:10488000D2068DB79EB780960FB6F8949EBF0FBE26\r
+:104890008DBF87EE98E00E94390680ED98E00E9477\r
+:1048A0003906C1FB882780F91F928F938DEC98E021\r
+:1048B0009F938F930E94D2068BEC98E00E9439065A\r
+:1048C00089EB98E00E943906C2FB882780F91F9285\r
+:1048D0008F9386EB98E09F938F930E94D20684EB90\r
+:1048E00098E00E94390682EA98E00E943906C3FBEC\r
+:1048F000882780F91F928F938FE998E09F938F9379\r
+:104900000E94D2068DE998E00E94390683E998E07A\r
+:104910000E943906C4FB882780F91F928F9380E993\r
+:1049200098E09F938F930E94D2068EE898E00E94B1\r
+:1049300039068CE798E00E943906C5FB882780F984\r
+:104940001F928F9389E798E09F938F930E94D206DE\r
+:1049500087E798E00E9439068BE598E00E943906C7\r
+:10496000C6FB882780F91F928F9388E598E09F9374\r
+:104970008F930E94D20686E598E00E9439068EE465\r
+:1049800098E00E943906C7FBCC27C0F91F92CF934D\r
+:104990008BE498E09F938F930E94D20689E498E07D\r
+:1049A0000E9439068DB79EB74C960FB6F8949EBFFD\r
+:1049B0000FBE8DBF04C084EA97E00E943906C1E0B3\r
+:1049C000BAC08091E301C82FC17080FF09C08AE995\r
+:1049D0009BE00E9439068091E301817F8E7F47C072\r
+:1049E0008EE89BE00E9439068091E301816080930C\r
+:1049F000E301E5CF9091E30191FBCC27C0F981E081\r
+:104A0000C827892FC0FB81F98093E301CC2319F0DB\r
+:104A100081E89BE027C083E79BE0CFCF9091E30143\r
+:104A200092FBCC27C0F981E0C827892FC0FB82F90F\r
+:104A30008093E301CC2319F084E69BE013C084E566\r
+:104A40009BE0BBCF9091E30193FBCC27C0F981E0C1\r
+:104A5000C827892FC0FB83F98093E301CC2351F051\r
+:104A600088E49BE00E9439068091E3018160809395\r
+:104A7000E30161C08BE39BE0A0CF81E19AE00E945B\r
+:104A800039060E94B20F1F928F9387EF99E09F9390\r
+:104A90008F930E94D20680910A011F928F9380EE1D\r
+:104AA00099E09F938F930E94D206809176011F9286\r
+:104AB0008F938DEC99E09F938F930E94D206809103\r
+:104AC0000B011F928F938AEB99E09F938F930E9423\r
+:104AD000D2060E945F1C9F938F937F936F9383EA0C\r
+:104AE00099E09F938F930E94D2068DB79EB746960A\r
+:104AF0000FB6F8949EBF0FBE8DBF61CF0E944015C8\r
+:104B0000C0910B0181E0C827C0930B01CC2329F091\r
+:104B100089E999E00E9439060EC08EE899E04DCFF0\r
+:104B200080E001C089530E940B2349CF8CE899E0B3\r
+:104B30000E943906C0E08C2FCF91089580E008953F\r
+:104B400080E00895CF93C82F8091F301813071F0F8\r
+:104B500020F0823009F44BC042C1E0910C01F09189\r
+:104B60000D018081823209F03CC107C0E0910C0147\r
+:104B7000F0910D018081823261F48C2F0E949E257C\r
+:104B8000811104C08C2F0E942B232FC081E090E064\r
+:104B90002CC08C2F0E94A025811126C0C431E1F0C9\r
+:104BA00070F4CB3081F0C031D1F40E94D32180E782\r
+:104BB00097E00E94390682E08093F30115C0C93264\r
+:104BC00059F0C83361F48DE797E00E94390684E715\r
+:104BD00097E00E94390608C01092F30104C18EE6E6\r
+:104BE00097E00E943906FFC081E08170FEC0C432A8\r
+:104BF00028F5CE3108F0C1C0CB30A1F1D0F4C730D8\r
+:104C000009F0D3C08EE18093130182E380931201F7\r
+:104C10008AE08093110184E18093100188E0809301\r
+:104C20000F0188E280930E0184E196E00E9439062C\r
+:104C3000BFC0C33149F1C431C1F0B7C0CB3409F4AE\r
+:104C4000A9C028F4C93289F0C83361F0AEC0C135BB\r
+:104C500009F49EC0C23509F499C0CE3409F0A5C04C\r
+:104C60006AE09EC00E94D321A3C08091F2018823F4\r
+:104C700019F01092F2019CC081E296E00E94390680\r
+:104C800081E08093F301B1C08BEF95E00E9439067B\r
+:104C900089EE95E00E943906809113011F928F934F\r
+:104CA00086EE95E09F938F930E94D20684EE95E066\r
+:104CB0000E94390682ED95E00E943906809112012A\r
+:104CC0001F928F938FEC95E09F938F930E94D20653\r
+:104CD0008DEC95E00E9439068EEB95E00E94390636\r
+:104CE000809111011F928F938BEB95E09F938F938F\r
+:104CF0000E94D20689EB95E00E94390688EA95E089\r
+:104D00000E943906809110011F928F9385EA95E0E9\r
+:104D10009F938F930E94D20683EA95E00E94390602\r
+:104D20008EE895E00E94390680910F011F928F93C3\r
+:104D30008BE895E09F938F930E94D20689E895E0D7\r
+:104D40000E94390682E795E00E94390680910E01A3\r
+:104D50001F928F938FE695E09F938F930E94D206C8\r
+:104D60008DE695E00E9439068DB79EB748960FB63E\r
+:104D7000F8949EBF0FBE8DBF1BC0CE51EC2FF0E04C\r
+:104D8000E35DFE4F80818093F20112C061E003C0B9\r
+:104D900061E006C06AE08091F2010E94EA2108C049\r
+:104DA0008091F2010E948D2203C082E196E013C03F\r
+:104DB0008091F201882369F01F928F938CE096E036\r
+:104DC0009F938F930E94D2060F900F900F900F9099\r
+:104DD00004C089E096E00E94390681E006C0109286\r
+:104DE000F30180E002C080E000CFCF9108950E94DF\r
+:104DF000FE266894B1110C948D2708950E947227A5\r
+:104E000088F09F5798F0B92F9927B751B0F0E1F08B\r
+:104E1000660F771F881F991F1AF0BA95C9F714C03B\r
+:104E2000B13091F00E948C27B1E008950C948C274A\r
+:104E3000672F782F8827B85F39F0B93FCCF3869574\r
+:104E400077956795B395D9F73EF4909580957095D1\r
+:104E500061957F4F8F4F9F4F0895E89409C097FB4E\r
+:104E60003EF490958095709561957F4F8F4F9F4F41\r
+:104E70009923A9F0F92F96E9BB279395F695879585\r
+:104E800077956795B795F111F8CFFAF4BB0F11F448\r
+:104E900060FF1BC06F5F7F4F8F4F9F4F16C08823EF\r
+:104EA00011F096E911C0772321F09EE8872F762F25\r
+:104EB00005C0662371F096E8862F70E060E02AF066\r
+:104EC0009A95660F771F881FDAF7880F9695879552\r
+:104ED00097F9089557FD9058440F551F59F05F3FBB\r
+:104EE00071F04795880F97FB991F61F09F3F79F00C\r
+:104EF00087950895121613061406551FF2CF46958E\r
+:104F0000F1DF08C0161617061806991FF1CF86950F\r
+:104F10007105610508940895E894BB2766277727F3\r
+:104F2000CB0197F908950E94A6270C9417280E9498\r
+:104F3000092838F00E94102820F0952311F00C94D5\r
+:104F400000280C94062811240C948D270E946A27AF\r
+:104F500070F3959FC1F3950F50E0551F629FF001CC\r
+:104F6000729FBB27F00DB11D639FAA27F00DB11DE5\r
+:104F7000AA1F649F6627B00DA11D661F829F22276E\r
+:104F8000B00DA11D621F739FB00DA11D621F839FF5\r
+:104F9000A00D611D221F749F3327A00D611D231FCB\r
+:104FA000849F600D211D822F762F6A2F11249F5719\r
+:104FB00050409AF0F1F088234AF0EE0FFF1FBB1F1C\r
+:104FC000661F771F881F91505040A9F79E3F5105DB\r
+:104FD00080F00C9400280C948D275F3FE4F3983EFA\r
+:104FE000D4F3869577956795B795F795E7959F5F85\r
+:104FF000C1F7FE2B880F911D9695879597F9089517\r
+:1050000097F99F6780E870E060E008959FEF80EC7B\r
+:10501000089500240A94161617061806090608951E\r
+:1050200000240A9412161306140605060895092E84\r
+:105030000394000C11F4882352F0BB0F40F4BF2BF3\r
+:1050400011F460FF04C06F5F7F4F8F4F9F4F089533\r
+:10505000991B79E004C0991F961708F0961B881FCA\r
+:105060007A95C9F78095089597FB072E16F400945A\r
+:1050700007D077FD09D00E944E2807FC05D03EF4EA\r
+:10508000909581959F4F0895709561957F4F0895F4\r
+:10509000EE0FFF1F0590F491E02D0994AA1BBB1B96\r
+:1050A00051E107C0AA1FBB1FA617B70710F0A61B28\r
+:1050B000B70B881F991F5A95A9F780959095BC0149\r
+:1050C000CD010895F999FECF92BD81BDF89A992737\r
+:1050D00080B50895A8E1B0E042E050E00C94852846\r
+:1050E000262FF999FECF1FBA92BD81BD20BD0FB604\r
+:1050F000F894FA9AF99A0FBE019608950E947028C2\r
+:10510000272F0C947128DC01CB01FC01F999FECF0B\r
+:1051100006C0F2BDE1BDF89A319600B40D9241503F\r
+:0A5120005040B8F70895F894FFCF4F\r
+:10512A001B080C09E908B50881080101D101280802\r
+:10513A00140A321E404D3622395A030D03D702B5DE\r
+:10514A00027C02EF01080221023A025A020102031A\r
+:08515A00040506070809000026\r
+:1068000088000000000000000400050006000700EA\r
+:10681000080009000A000B000C000D000E000F001C\r
+:1068200010001100120013001400150016001700CC\r
+:10683000180019001A001B001C001D001E001F007C\r
+:10684000200021002200230024002500260027002C\r
+:10685000280035002A002B002C002D002E002F00D0\r
+:106860003000310032003300340029003600370098\r
+:106870003800E00000000000000000000000000000\r
+:106880000000000000000000000000000000000008\r
+:1068900000000000000000000000000000004F00A9\r
+:1068A00050005100520000000000000000000000F5\r
+:1068B00000000000000000000000000000000000D8\r
+:1068C00000000000000000000000000000000000C8\r
+:1068D00000000000000000000000000000000000B8\r
+:1068E0000000000000000000890087008A008B0083\r
+:1068F000F1A1E100E200E300F1A1E500E600000003\r
+:106900000100010001000100EA4401000100E2442D\r
+:106910000100010001005500460054004A004B00F0\r
+:10692000560057004700480001000100E9440100FB\r
+:106930000100010001000100010001003A003B00DC\r
+:106940003C003D003E003F0040004100420043004B\r
+:10695000580001004C00390001004400450052007D\r
+:1069600001000100010050004F0081404D004E0029\r
+:1069700051000100010001000100010001000100BF\r
+:1069800001000100010001000100010001000100FF\r
+:1069900001000100010001000100010001004D00A3\r
+:1069A0004A004E004B0001000100010001000100FF\r
+:1069B00001000100010001000100010001000100CF\r
+:1069C00001000100010001000100010001000100BF\r
+:1069D00001000100010001000100010001000100AF\r
+:1069E0000100010001000100490001000100010057\r
+:1069F000010001000100010001000100010001008F\r
+:00000001FF\r
diff --git a/keyboard/hhkb/keymap_common.c b/keyboard/hhkb/keymap_common.c
deleted file mode 100644 (file)
index e938fb6..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright 2012,2013 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 <stdint.h>
-#include "action.h"
-#include <avr/pgmspace.h>
-#include "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index 3622665f3ad7ab0f4375970af3c2c8ea2f4814f8..97e2e098644f109351ef1ca5a11abc687fa7b5df 100644 (file)
@@ -32,10 +32,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 #define KEYMAP( \
     K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \
     K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \
index a5602ded31550ba29bc489ab2d2985f6a1463fd2..b63265c9e2fe4bc79afd3646524073d6c9b16871 100644 (file)
@@ -192,9 +192,9 @@ enum macro_id {
  * Fn action definition
  */
 #ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 #else
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
 #endif
     [0] = ACTION_DEFAULT_LAYER_SET(0),                // Default layer(not used)
     [1] = ACTION_LAYER_TAP_TOGGLE(1),                 // HHKB layer(toggle with 5 taps)
index 7807f43669797a6c327011d29de96b50426e5b34..ae96e834791b5871b919889d147a7e6ab50d798c 100644 (file)
@@ -54,7 +54,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
  * Fn action definition
  */
 #ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
     [0]  = ACTION_LAYER_MOMENTARY(1),
     [1]  = ACTION_LAYER_MOMENTARY(2),
     [2]  = ACTION_LAYER_MOMENTARY(3),
@@ -89,7 +89,7 @@ const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
     [31] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_BSLASH),
 };
 #else
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
     [0]  = ACTION_LAYER_MOMENTARY(1),
 };
 #endif
index 48d0ee70ba1d5f155bd74b99efadb7083263ffb2..152674d05d78acbe6c534a62d906213f50c1b69e 100644 (file)
@@ -42,9 +42,9 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
  * Fn action definition
  */
 #ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
+const action_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 #else
-const uint16_t fn_actions[] PROGMEM = {
+const action_t fn_actions[] PROGMEM = {
 #endif
     [0] = ACTION_LAYER_MOMENTARY(1),
 };
index deff920ae28f68e55378d8e4e01123455e53bd3f..b5a8c8b461dbf216370db25653edc1ec8721f5f4 100644 (file)
@@ -108,7 +108,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 /*
  * Fn action definition
  */
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
     [1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE),
     [2] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),    // tilde
diff --git a/keyboard/hhkb/unimap_common.h b/keyboard/hhkb/unimap_common.h
new file mode 100644 (file)
index 0000000..905c116
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+Copyright 2016 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 UNIMAP_COMMON_H
+#define UNIMAP_COMMON_H
+
+#include <stdint.h>
+#include <avr/pgmspace.h>
+#include "unimap.h"
+
+
+/* HHKB JP
+ * ,-----------------------------------------------------------.
+ * |`  |1  |2  |3  |4  |5  |6  |7  |8  |9  |0  |-  |=  |JPY|BS |
+ * |-----------------------------------------------------------|
+ * |Tab  |Q  |W  |E  |R  |T  |Y  |U  |I  |O  |P  |[  |]  |Enter|
+ * |------------------------------------------------------`    |
+ * |Caps  |A  |S  |D  |F  |G  |H  |J  |K  |L  |;  |'  |#  |    |
+ * |-----------------------------------------------------------|
+ * |Shift  |Z  |X  |C  |V  |B  |N  |M  |,  |.  |/  |Ro |Up |Shi|
+ * |-----------------------------------------------------------|
+ * |Ctl||Esc|Gui|Alt|Mhn|         |Hen|Kan|Alt|Ctl||Lef|Dow|Rig|
+ * `-----------------------------------------------------------'
+ * Esc          = Grave(`)
+ * Control      = Caps Lock
+ * Left Fn      = Left Control
+ * Right Fn     = Right Control
+ */
+// row:16 x col:8
+const uint8_t PROGMEM unimap_trans[MATRIX_ROWS][MATRIX_COLS] = {
+    // 0
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_GRAVE,
+        UNIMAP_TAB,
+        UNIMAP_LCTRL,
+        UNIMAP_LSHIFT,
+        UNIMAP_CAPSLOCK,
+        UNIMAP_NO,
+    },
+    // 1
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_4,
+        UNIMAP_E,
+        UNIMAP_MHEN,
+        UNIMAP_C,
+        UNIMAP_D,
+        UNIMAP_NO,
+    },
+    // 2
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_3,
+        UNIMAP_W,
+        UNIMAP_LALT,
+        UNIMAP_X,
+        UNIMAP_S,
+        UNIMAP_NO,
+    },
+    // 3
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_1,
+        UNIMAP_NO,
+        UNIMAP_ESCAPE,
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_NO,
+    },
+    // 4
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_NO,
+    },
+    // 5
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_5,
+        UNIMAP_R,
+        UNIMAP_NO,
+        UNIMAP_V,
+        UNIMAP_F,
+        UNIMAP_NO,
+    },
+    // 6
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_2,
+        UNIMAP_Q,
+        UNIMAP_LGUI,
+        UNIMAP_Z,
+        UNIMAP_A,
+        UNIMAP_NO,
+    },
+    // 7
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_6,
+        UNIMAP_T,
+        UNIMAP_SPACE,
+        UNIMAP_B,
+        UNIMAP_G,
+        UNIMAP_NO,
+    },
+    // 8
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_9,
+        UNIMAP_I,
+        UNIMAP_KANA,
+        UNIMAP_COMMA,
+        UNIMAP_K,
+        UNIMAP_NO,
+    },
+    // 9
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_8,
+        UNIMAP_U,
+        UNIMAP_HENK,
+        UNIMAP_M,
+        UNIMAP_J,
+        UNIMAP_NO,
+    },
+    // A
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_7,
+        UNIMAP_Y,
+        UNIMAP_NO,
+        UNIMAP_N,
+        UNIMAP_H,
+        UNIMAP_NO,
+    },
+    // B
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_0,
+        UNIMAP_O,
+        UNIMAP_RALT,
+        UNIMAP_DOT,
+        UNIMAP_L,
+        UNIMAP_NO,
+    },
+    // C
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_BSPACE,
+        UNIMAP_NO,
+        UNIMAP_RIGHT,
+        UNIMAP_RSHIFT,
+        UNIMAP_ENTER,
+        UNIMAP_NO,
+    },
+    // D
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_JYEN,
+        UNIMAP_RBRACKET,
+        UNIMAP_DOWN,
+        UNIMAP_UP,
+        UNIMAP_NONUS_HASH,
+        UNIMAP_NO,
+    },
+    // E
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_MINUS,
+        UNIMAP_P,
+        UNIMAP_RCTRL,
+        UNIMAP_SLASH,
+        UNIMAP_SCOLON,
+        UNIMAP_NO,
+    },
+    // F
+    {
+        UNIMAP_NO,
+        UNIMAP_NO,
+        UNIMAP_EQUAL,
+        UNIMAP_LBRACKET,
+        UNIMAP_LEFT,
+        UNIMAP_RO,
+        UNIMAP_QUOTE,
+        UNIMAP_NO,
+    },
+};
+
+#endif
diff --git a/keyboard/hhkb/unimap_jp.c b/keyboard/hhkb/unimap_jp.c
new file mode 100644 (file)
index 0000000..70e6b0c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+Copyright 2016 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 "unimap_common.h"
+
+
+#define AC_FN0     ACTION_LAYER_MOMENTARY(1)
+
+#ifdef KEYMAP_SECTION_ENABLE
+const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
+#else
+const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
+#endif
+    UNIMAP(
+              NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO, 
+    ZKHK,     NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,  NO,            NO,  NO,  NO,           NO,  NO,  NO,
+    ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, JYEN,BSPC,     NO,  NO,  NO,      NO,  NO,  NO,  NO,
+    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,     BSLS,     NO,  NO,  NO,      NO,  NO,  NO,  NO,
+    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     NUHS,ENT,                         NO,  NO,  NO,  NO,
+    LSFT,NO,  Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     RO,  RSFT,          UP,           NO,  NO,  NO,  NO,
+    FN0, LGUI,LALT,MHEN,          SPC,           HENK,KANA,RALT,NO,  NO,  FN0,      LEFT,DOWN,RGHT,    NO,       NO,  NO
+    ),
+    UNIMAP(
+              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
+    TRNS,     TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,          TRNS,TRNS,TRNS,         TRNS,TRNS,TRNS,
+    PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL,      TRNS,TRNS,TRNS,    TRNS,TRNS,TRNS,TRNS,
+    CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP,  TRNS,     TRNS,     TRNS,TRNS,TRNS,    TRNS,TRNS,TRNS,TRNS,
+    TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,     TRNS,PENT,                        TRNS,TRNS,TRNS,TRNS,
+    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,     TRNS,TRNS,          PGUP,         TRNS,TRNS,TRNS,TRNS,
+    TRNS,TRNS,TRNS,TRNS,          TRNS,          TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     HOME,PGDN,END,     TRNS,     TRNS,TRNS
+    ),
+};
index 052134c3ceafb5dd1baa53e99c9979f7202af9d3..5b3c1fe6f62ccf5440312450e4e77addcb6a747e 100644 (file)
@@ -9,7 +9,6 @@ OBJDIR = ./build
 
 OBJECTS = \
        $(OBJDIR)/matrix.o \
-       $(OBJDIR)/keymap_common.o \
        $(OBJDIR)/led.o \
        $(OBJDIR)/main.o
 
index 4726cee653878f3bab00b5329743dbb8b825af3a..c2845b18b6223b8bc1c1411049380f498af88630 100644 (file)
@@ -42,7 +42,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
            TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
 };
 
diff --git a/keyboard/infinity/keymap_common.c b/keyboard/infinity/keymap_common.c
deleted file mode 100644 (file)
index fdb1769..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2012,2013 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 "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
-}
index b0f765bfeb3d437513eb5cde224a6f5980611439..412417a2681e4b6de9866bbcef425c160cf52d8f 100644 (file)
@@ -29,10 +29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 #ifdef INFINITY_PROTOTYPE
 
 /* Infinity prototype */
index 9999451c329f62907eef601aca8080197d1e1686..3873239ae7585501c794daeaee57e9058954dd99 100644 (file)
@@ -9,7 +9,6 @@ TARGET_DIR = .
 
 # project specific files
 SRC =  matrix.c \
-       keymap_common.c \
        led.c
 
 ifdef KEYMAP
diff --git a/keyboard/infinity_chibios/keymap_common.c b/keyboard/infinity_chibios/keymap_common.c
deleted file mode 100644 (file)
index 69b170c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright 2012,2013 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 "keymap_common.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    return keymaps[(layer)][(key.row)][(key.col)];
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    return (action_t){ .code = fn_actions[FN_INDEX(keycode)] };
-}
index 260822fc70293bb3e69b2bb668fd0ddd30f0d14d..d958f30f14b6b06c9196d1a0ee5852c6b084c3b7 100644 (file)
@@ -30,10 +30,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
 #ifdef INFINITY_PROTOTYPE
 
 /* Infinity prototype */
index 2d0635f016d87ec995fa7386f772f1662b861a88..538de746d580bd93ba3072ecbe40be1aedc35eca 100644 (file)
@@ -119,7 +119,7 @@ enum macro_id {
 /*
  * Fn action definition
  */
-const uint16_t fn_actions[] = {
+const action_t fn_actions[] = {
     [0] = ACTION_DEFAULT_LAYER_SET(0),                // Default layer(not used)
     [1] = ACTION_LAYER_TAP_TOGGLE(1),                 // HHKB layer(toggle with 5 taps)
     [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH),          // Cursor layer with Slash*
index 2673d6aaaa26438741bc2c5d71aacf784fa792bb..0015a0b2c9c801653eaf9ab45986e69873f3d1af 100644 (file)
@@ -42,7 +42,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
            TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS),
 };
 
-const uint16_t fn_actions[] = {
+const action_t fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
 };
 
index dce4e9191e788aa96bfab3cdda8964338f6da517..2a43563471802e2145a28d7782cc361abef64724 100644 (file)
@@ -16,7 +16,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include <stdint.h>
 #include <stdbool.h>
-#include <avr/pgmspace.h>
 #include "keycode.h"
 #include "action.h"
 #include "action_macro.h"
@@ -34,33 +33,5 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /*
  * Fn action definition
  */
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
 };
-
-
-
-#define KEYMAPS_SIZE    (sizeof(keymaps) / sizeof(keymaps[0]))
-#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
-    if (layer < KEYMAPS_SIZE) {
-        return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-    } else {
-        // fall back to layer 0
-        return pgm_read_byte(&keymaps[0][(key.row)][(key.col)]);
-    }
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
-    action_t action;
-    if (FN_INDEX(keycode) < FN_ACTIONS_SIZE) {
-        action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
-    } else {
-        action.code = ACTION_NO;
-    }
-    return action;
-}
index 8de1c0279e0190b820c15df7cbd262b7a23a4de1..88c56baa69755492cc0e197c0586fa51b17d2e72 100644 (file)
@@ -18,6 +18,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keycode.h"
 #include "action.h"
 #include "action_macro.h"
+#include "action_code.h"
 #include "report.h"
 #include "host.h"
 #include "print.h"
@@ -28,7 +29,7 @@ static const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     {{KC_CAPS}}, // test with KC_CAPS, KC_A, KC_BTLD
 };
 
-static const uint16_t fn_actions[] = {
+static const action_t fn_actions[] = {
 };
 
 /* translates key to keycode */
@@ -40,5 +41,5 @@ uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 /* translates Fn keycode to action */
 action_t keymap_fn_to_action(uint8_t keycode)
 {
-    return (action_t){ .code = fn_actions[FN_INDEX(keycode)] };
+    return (action_t)fn_actions[FN_INDEX(keycode)];
 }
index 8de1c0279e0190b820c15df7cbd262b7a23a4de1..5aee2b7fc093319469a6f0d865b6d842985a394e 100644 (file)
@@ -28,7 +28,7 @@ static const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     {{KC_CAPS}}, // test with KC_CAPS, KC_A, KC_BTLD
 };
 
-static const uint16_t fn_actions[] = {
+static const action_t fn_actions[] = {
 };
 
 /* translates key to keycode */
@@ -40,5 +40,5 @@ uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 /* translates Fn keycode to action */
 action_t keymap_fn_to_action(uint8_t keycode)
 {
-    return (action_t){ .code = fn_actions[FN_INDEX(keycode)] };
+    return fn_actions[FN_INDEX(keycode)];
 }
index 922fa5379cdcec48b99ad1653aaf48df2aa9c68b..16b05a75eed247de222c78224d123ffa01aedcc5 100644 (file)
@@ -28,7 +28,7 @@ static const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     {{KC_A}},
 };  // to test: KC_CAPS, KT_BTLD, KC_A
 
-static const uint16_t fn_actions[] = {
+static const action_t fn_actions[] = {
 };
 
 /* translates key to keycode */
@@ -40,5 +40,5 @@ uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 /* translates Fn keycode to action */
 action_t keymap_fn_to_action(uint8_t keycode)
 {
-    return (action_t){ .code = fn_actions[FN_INDEX(keycode)] };
+    return fn_actions[FN_INDEX(keycode)];
 }
index ed1088baa9b646c55fb17a012cee979077377f0e..e659d060353a6a5ecfedd3078c24e6fba2182ad1 100644 (file)
@@ -18,6 +18,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_COLS][MATRIX_ROWS] = {
          TRNS,TRNS,TRNS,               TRNS,               TRNS,TRNS,TRNS,TRNS,   TRNS,TRNS,TRNS,    TRNS,TRNS)
 };
 
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1)
 };
index 8903fc683b7015d5452bb58e42325f969c3f4a92..3d10913fb4e391653d1f902555d7a5d0229c09e7 100644 (file)
@@ -56,6 +56,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 };
 
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
        [1] = ACTION_LAYER_MOMENTARY(1),                // activate layer 1 when FN1 pressed
 };
index 8ce85a49973bdf84ee1560d92cb47a9b1bca22ef..1e67ed21b221ab617dfbd57d62c5aa11b729c9de 100644 (file)
@@ -29,4 +29,4 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 };
 
-static const uint16_t PROGMEM fn_actions[] = {};
+static const action_t PROGMEM fn_actions[] = {};
index 03e1a1bfafb9033ddbece442e6f22f5e7df33242..db1d5c7b268e18fce506068b612ba6b3a7337e8f 100644 (file)
@@ -59,6 +59,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 };
 
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
        [1] = ACTION_LAYER_MOMENTARY(1),                // activate layer 1 when FN1 pressed
 };
index c18453675b0b175e7cd48cf5907ee048e4d29b9c..a3df00383e16e32a34784235f52fb844129537a0 100644 (file)
@@ -29,4 +29,4 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 };
 
-static const uint16_t PROGMEM fn_actions[] = {};
+static const action_t PROGMEM fn_actions[] = {};
index ed1088baa9b646c55fb17a012cee979077377f0e..e659d060353a6a5ecfedd3078c24e6fba2182ad1 100644 (file)
@@ -18,6 +18,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_COLS][MATRIX_ROWS] = {
          TRNS,TRNS,TRNS,               TRNS,               TRNS,TRNS,TRNS,TRNS,   TRNS,TRNS,TRNS,    TRNS,TRNS)
 };
 
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1)
 };
index 3379789ecf4b57643c0fa52456b5e600c3c52bee..7ae1e8815ced180edd872f283072808349b15a97 100644 (file)
@@ -17,7 +17,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,     TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     CAPS,           TRNS,      \
         TRNS,TRNS,TRNS,               TRNS,               TRNS,TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS)
 };
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
     [1] = ACTION_BACKLIGHT_STEP()
 };
index 939ee379b7a6eb7043755747e2d70966966e8871..b6244c42fdc4b342b5d3c52bdef785783b50ea43 100644 (file)
@@ -17,7 +17,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,     TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     CAPS,           TRNS,      \
         TRNS,TRNS,TRNS,               TRNS,                    TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS)
 };
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
     [1] = ACTION_BACKLIGHT_STEP()
 };
index 9333964e395b8c6af813da576900e5d2c9544fb1..febdc6c7f5bd38441c4dd134c8dc3fbfd572546f 100644 (file)
@@ -17,7 +17,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         FN7, NO,  MSTP)
 };
 
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
     [1] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_FN1),
     [2] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_FN2),
index 3e8367083c6ddc24c554fce867e59a33e4571e99..99ceaa6f5110f99324e040cb00eaf3936e786462 100644 (file)
@@ -17,7 +17,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,TRNS,TRNS,               TRNS,               TRNS,TRNS,TRNS,TRNS,     TRNS,   TRNS,    TRNS,       TRNS)
 };
 
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
     [1] = ACTION_BACKLIGHT_TOGGLE(),
     [2] = ACTION_BACKLIGHT_LEVEL(BACKLIGHT_ALPHA),
index f85836ab550c598e053fa49404c845a761fe06f5..e974625ba98921a4086f2eec2695f2719cdc0782 100644 (file)
@@ -22,7 +22,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                    LEFT,DOWN,RGHT,          TRNS,                         TRNS,TRNS,TRNS)
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(2),
     [1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE),
     [2] = ACTION_LAYER_TOGGLE(1),
index 72a7d83c9b4ea85dba8d7704caaf53181b6db82b..79eb52b14795bbe10e11474e33c438bbe2146097 100644 (file)
@@ -25,7 +25,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                    TRNS,TRNS,TRNS,               TRNS,                    TRNS,TRNS,TRNS,  TRNS,TRNS,TRNS),
 };
 
-const uint16_t PROGMEM fn_actions[] = {
+const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(2),
     [1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE),
     [2] = ACTION_LAYER_TOGGLE(1),
index e116635918dc49166e4caf0a2f978f3c77648b6e..d342e4ba5bbfd40c25ff6afa39f0d85d0ad75465 100644 (file)
@@ -30,7 +30,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "keymap.h"
 
 extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
+extern const action_t fn_actions[];
 
 #define KEYMAP( \
         K08,      K09, K18, K19, K28, K29, K38, K39, K48, K49, K58, K59, K68,    K69, K88, K89, \
index e6c4eabb2223c00d7ecf9d17891f7783ed4f5ff6..8ab81a14b3673af0013ac3aef5538fea564c7277 100644 (file)
@@ -35,7 +35,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,TRNS,TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS, \
         TRNS,TRNS,TRNS,TRNS,     TRNS,TRNS,TRNS,          TRNS,TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS)
 };
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1),
     [1] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
     [2] = ACTION_MODS_KEY(MOD_LSFT, KC_0)
index 96a4c9dfb357b0e4c42b3ce3edc5492eec00cd3f..a39b0125222fb1c195bfa1b43cc450877fd42c45 100644 (file)
@@ -17,6 +17,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,     TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     CAPS,           TRNS,      \
         TRNS,TRNS,TRNS,               TRNS,               TRNS,TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS)
 };
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1)
 };
index 7fdb9eb19a331dfbe2af96bfca9998395005dccf..7f18f95d5404552da2072e746c6af59eaedcaa12 100644 (file)
@@ -17,6 +17,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,     TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     CAPS,           TRNS,      \
         TRNS,TRNS,TRNS,               TRNS,                    TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS)
 };
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1)
 };
index 970f622eee6c4b916d58e52ec0513731439579e5..80e507318c27cb55444ec159de2940ff6bdf46c7 100644 (file)
@@ -17,6 +17,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,TRNS,TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     CAPS,           TRNS,      \
         TRNS,TRNS,TRNS,               TRNS,               TRNS,TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS)
 };
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1)
 };
index ab9acda1c0a996bf2f5dcbce242eb5ce42a0de97..cf9ea7873cffbd4b1a9142d26ea9185ddc37d00c 100644 (file)
@@ -17,6 +17,6 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         TRNS,TRNS,TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     CAPS,           TRNS,      \
         TRNS,TRNS,TRNS,               TRNS,                    TRNS,TRNS,TRNS,      TRNS,TRNS,TRNS)
 };
-static const uint16_t PROGMEM fn_actions[] = {
+static const action_t PROGMEM fn_actions[] = {
     [0] = ACTION_LAYER_MOMENTARY(1)
 };
index 216a8dc020c317582517b80bd70bce36ef9c631b..596190971c7d95d1d79a0e2a4f18694f67e9c3de 100644 (file)
@@ -31,7 +31,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 // 32*8(256) byte array which converts PS/2 code into USB code
 extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
+extern const action_t fn_actions[];
 
 
 /* All keys */
index 8acd8cfb33ffd3af762fb4c8f8c4c123a75f07d2..cb5e0ccad17614193c94382f904342eaac394076 100644 (file)
@@ -177,7 +177,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 };
 
 
-static const uint16_t fn_actions[] PROGMEM = {
+static const action_t fn_actions[] PROGMEM = {
     [0] = ACTION_DEFAULT_LAYER_SET(0),
     [1] = ACTION_LAYER_MOMENTARY(1),
     [2] = ACTION_LAYER_MOMENTARY(2), //ACTION_LAYER_ON(2, ON_RELEASE),
index f460d0ed44aaf7079b2ae47273fe9f36f09c8b43..c9c2eda4c1d2dd5fc4c3dbbf7686d96dfb7baf0a 100644 (file)
@@ -7,6 +7,9 @@ Source code is available here: <https://github.com/tmk/tmk_keyboard/tree/core>
 
 Updates
 -------
+#### 2016/06/26
+Keymap framework was updated. `fn_actions[]` should be defined as `action_t` instead of `uint16_t`. And default code for keymap handling is now included in core you just need define `uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]` and `action_t fn_actions[]`.
+
 #### 2016/02/10
 flabbergast's Chibios protocol was merged from <https://github.com/flabbergast/tmk_keyboard/tree/chibios>. See [protocol/chibios/README.md](protocol/chibios/README.md). Chibios protocol supports Cortex-M such as STM32 and Kinetis.
 
index 9cfe6d5a9e275e48b2748f462262f641db6cdb39..4fc5398c8ce9827a865d727298b13032047095fd 100644 (file)
@@ -17,11 +17,16 @@ SRC +=      $(COMMON_DIR)/host.c \
 
 
 # Option modules
-ifdef ACTIONMAP_ENABLE
-    SRC += $(COMMON_DIR)/actionmap.c
-    OPT_DEFS += -DACTIONMAP_ENABLE
+ifdef UNIMAP_ENABLE
+    SRC += $(COMMON_DIR)/unimap.c
+    OPT_DEFS += -DUNIMAP_ENABLE
 else
-    SRC += $(COMMON_DIR)/keymap.c
+    ifdef ACTIONMAP_ENABLE
+       SRC += $(COMMON_DIR)/actionmap.c
+       OPT_DEFS += -DACTIONMAP_ENABLE
+    else
+       SRC += $(COMMON_DIR)/keymap.c
+    endif
 endif
 
 ifdef BOOTMAGIC_ENABLE
index b39c6441e67da5e884acdd75c3f95190679ec745..8dad38b961d8639e182be2a53b7fa3589be6d270 100644 (file)
@@ -181,9 +181,9 @@ typedef union {
 
 
 /* action utility */
-#define ACTION_NO                       0
-#define ACTION_TRANSPARENT              1
-#define ACTION(kind, param)             ((kind)<<12 | (param))
+#define ACTION_NO                       { .code = 0 }
+#define ACTION_TRANSPARENT              { .code = 1 }
+#define ACTION(kind, param)             { .code = ((kind)<<12 | (param)) }
 
 
 /*
index 95909cc28617188be248d333c066e40b81f591fc..6b5a7fd2b83e9216939601cb5439ec65da459e86 100644 (file)
@@ -117,7 +117,7 @@ void layer_debug(void)
 
 action_t layer_switch_get_action(keypos_t key)
 {
-    action_t action = { .code = ACTION_TRANSPARENT };
+    action_t action = ACTION_TRANSPARENT;
 
 #ifndef NO_ACTION_LAYER
     uint32_t layers = layer_state | default_layer_state;
@@ -125,7 +125,7 @@ action_t layer_switch_get_action(keypos_t key)
     for (int8_t i = 31; i >= 0; i--) {
         if (layers & (1UL<<i)) {
             action = action_for_key(i, key);
-            if (action.code != ACTION_TRANSPARENT) {
+            if (action.code != (action_t)ACTION_TRANSPARENT.code) {
                 return action;
             }
         }
index 49d0f5cef0573f52b5bc712ed6708ac0007e032a..6b0fa8e923d759643da163629b25b4f576b058bf 100644 (file)
@@ -18,6 +18,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action_code.h"
 #include "actionmap.h"
 
+
+/* Keymapping with 16bit action codes */
+extern const action_t actionmaps[][MATRIX_ROWS][MATRIX_COLS];
+
+
 /* Converts key to action */
 __attribute__ ((weak))
 action_t action_for_key(uint8_t layer, keypos_t key)
index cbbcfe9353960ea56a9c07343f39c853c47f3f46..5e00bb2ed13321c1929024cb78f69498db9611b5 100644 (file)
@@ -24,10 +24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action.h"
 
 
-/* Keymapping with 16bit action codes */
-extern const uint16_t actionmaps[][MATRIX_ROWS][MATRIX_COLS];
-
-
 /* Modified key */
 #define AC_c(kc)                ACTION_MODS_KEY(MOD_LCTL, KC_##kc)
 #define AC_s(kc)                ACTION_MODS_KEY(MOD_LSFT, KC_##kc)
index 25161748bd9cf3bc687be997fff148d7b99755e7..01c6e64290a25cf6c6cf4666d953194a00d4bb9d 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright 2013 Jun Wako <wakojun@gmail.com>
+Copyright 2013,2016 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
@@ -23,6 +23,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "wait.h"
 #include "debug.h"
 #include "bootloader.h"
+#if defined(__AVR__)
+#include <avr/pgmspace.h>
+#endif
 
 #ifdef BOOTMAGIC_ENABLE
 extern keymap_config_t keymap_config;
@@ -32,6 +35,7 @@ static action_t keycode_to_action(uint8_t keycode);
 
 
 /* converts key to action */
+__attribute__ ((weak))
 action_t action_for_key(uint8_t layer, keypos_t key)
 {
     uint8_t keycode = keymap_key_to_keycode(layer, key);
@@ -53,7 +57,7 @@ action_t action_for_key(uint8_t layer, keypos_t key)
         case KC_LALT:
             if (keymap_config.swap_lalt_lgui) {
                 if (keymap_config.no_gui) {
-                    return keycode_to_action(ACTION_NO);
+                    return keycode_to_action(KC_NO);
                 }
                 return keycode_to_action(KC_LGUI);
             }
@@ -63,13 +67,13 @@ action_t action_for_key(uint8_t layer, keypos_t key)
                 return keycode_to_action(KC_LALT);
             }
             if (keymap_config.no_gui) {
-                return keycode_to_action(ACTION_NO);
+                return keycode_to_action(KC_NO);
             }
             return keycode_to_action(KC_LGUI);
         case KC_RALT:
             if (keymap_config.swap_ralt_rgui) {
                 if (keymap_config.no_gui) {
-                    return keycode_to_action(ACTION_NO);
+                    return keycode_to_action(KC_NO);
                 }
                 return keycode_to_action(KC_RGUI);
             }
@@ -79,7 +83,7 @@ action_t action_for_key(uint8_t layer, keypos_t key)
                 return keycode_to_action(KC_RALT);
             }
             if (keymap_config.no_gui) {
-                return keycode_to_action(ACTION_NO);
+                return keycode_to_action(KC_NO);
             }
             return keycode_to_action(KC_RGUI);
         case KC_GRAVE:
@@ -133,23 +137,22 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 /* translates keycode to action */
 static action_t keycode_to_action(uint8_t keycode)
 {
-    action_t action = {};
     switch (keycode) {
         case KC_A ... KC_EXSEL:
         case KC_LCTRL ... KC_RGUI:
-            action.code = ACTION_KEY(keycode);
+            return (action_t)ACTION_KEY(keycode);
             break;
         case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
-            action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
+            return (action_t)ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
             break;
         case KC_AUDIO_MUTE ... KC_WWW_FAVORITES:
-            action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
+            return (action_t)ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
             break;
         case KC_MS_UP ... KC_MS_ACCEL2:
-            action.code = ACTION_MOUSEKEY(keycode);
+            return (action_t)ACTION_MOUSEKEY(keycode);
             break;
         case KC_TRNS:
-            action.code = ACTION_TRANSPARENT;
+            return (action_t)ACTION_TRANSPARENT;
             break;
         case KC_BOOTLOADER:
             clear_keyboard();
@@ -157,10 +160,10 @@ static action_t keycode_to_action(uint8_t keycode)
             bootloader_jump(); // not return
             break;
         default:
-            action.code = ACTION_NO;
+            return (action_t)ACTION_NO;
             break;
     }
-    return action;
+    return (action_t)ACTION_NO;
 }
 
 
@@ -170,6 +173,28 @@ static action_t keycode_to_action(uint8_t keycode)
  * Legacy keymap support
  *      Consider using new keymap API instead.
  */
+extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
+extern const uint8_t fn_layer[];
+extern const uint8_t fn_keycode[];
+
+__attribute__ ((weak))
+uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
+{
+    return pgm_read_byte(&keymaps[(layer)][(row)][(col)]);
+}
+
+__attribute__ ((weak))
+uint8_t keymap_fn_layer(uint8_t index)
+{
+    return pgm_read_byte(&fn_layer[index]);
+}
+
+__attribute__ ((weak))
+uint8_t keymap_fn_keycode(uint8_t index)
+{
+    return pgm_read_byte(&fn_keycode[index]);
+}
+
 __attribute__ ((weak))
 uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 {
@@ -181,21 +206,47 @@ uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 __attribute__ ((weak))
 action_t keymap_fn_to_action(uint8_t keycode)
 {
-    action_t action = { .code = ACTION_NO };
     switch (keycode) {
         case KC_FN0 ... KC_FN31:
             {
                 uint8_t layer = keymap_fn_layer(FN_INDEX(keycode));
                 uint8_t key = keymap_fn_keycode(FN_INDEX(keycode));
                 if (key) {
-                    action.code = ACTION_LAYER_TAP_KEY(layer, key);
+                    return (action_t)ACTION_LAYER_TAP_KEY(layer, key);
                 } else {
-                    action.code = ACTION_LAYER_MOMENTARY(layer);
+                    return (action_t)ACTION_LAYER_MOMENTARY(layer);
                 }
             }
-            return action;
+            return (action_t)ACTION_NO;
         default:
-            return action;
+            return (action_t)ACTION_NO;
     }
 }
+
+#else
+
+/* user keymaps should be defined somewhere */
+extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
+extern const action_t fn_actions[];
+
+__attribute__ ((weak))
+uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
+{
+#if defined(__AVR__)
+    return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
+#else
+    return keymaps[(layer)][(key.row)][(key.col)];
+#endif
+}
+
+__attribute__ ((weak))
+action_t keymap_fn_to_action(uint8_t keycode)
+{
+#if defined(__AVR__)
+    return (action_t)pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
+#else
+    return fn_actions[FN_INDEX(keycode)];
+#endif
+}
+
 #endif
diff --git a/tmk_core/common/unimap.c b/tmk_core/common/unimap.c
new file mode 100644 (file)
index 0000000..c3d6c26
--- /dev/null
@@ -0,0 +1,57 @@
+#include "keyboard.h"
+#include "action.h"
+#include "unimap.h"
+#include "print.h"
+#if defined(__AVR__)
+#   include <avr/pgmspace.h>
+#endif
+
+
+/* Keymapping with 16bit action codes */
+extern const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS];
+
+// table translates matrix to universal keymap
+extern const uint8_t unimap_trans[MATRIX_ROWS][MATRIX_COLS];
+
+
+
+// translates raw matrix to universal map
+keypos_t unimap_translate(keypos_t key)
+{
+    uint8_t unimap_pos = 
+#if defined(__AVR__)
+        pgm_read_byte(&unimap_trans[key.row][key.col]);
+#else
+        unimap_trans[key.row][key.col];
+#endif
+    return (keypos_t) {
+        .row = ((unimap_pos & 0x70) >> 4),
+        .col = (unimap_pos & 0x0F)
+    };
+}
+
+/* Converts key to action */
+__attribute__ ((weak))
+action_t action_for_key(uint8_t layer, keypos_t key)
+{
+    keypos_t uni = unimap_translate(key);
+    if ((uni.row << 4 | uni.col) == UNIMAP_NO) return (action_t)ACTION_NO;
+#if defined(__AVR__)
+    return (action_t)pgm_read_word(&actionmaps[(layer)][(uni.row)][(uni.col)]);
+#else
+    return actionmaps[(layer)][(uni.row)][(uni.col)];
+#endif
+}
+
+/* Macro */
+__attribute__ ((weak))
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    return MACRO_NONE;
+}
+
+/* Function */
+__attribute__ ((weak))
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+}
diff --git a/tmk_core/common/unimap.h b/tmk_core/common/unimap.h
new file mode 100644 (file)
index 0000000..43be70b
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+Copyright 2016 Jun Wako <wakojun@gmail.com>
+*/
+#ifndef _UNIMAP_H_
+#define _UNIMAP_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "action.h"
+#include "action_code.h"
+#include "actionmap.h"
+
+
+// Universal map table: 8x16=128key
+#define UNIMAP_ROWS 8
+#define UNIMAP_COLS 16
+
+/* Universal 128-key keyboard layout(8x16)
+        ,-----------------------------------------------.
+        |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
+,---.   |-----------------------------------------------|     ,-----------.     ,-----------.
+|Esc|   |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|     |PrS|ScL|Pau|     |VDn|VUp|Mut|
+`---'   `-----------------------------------------------'     `-----------'     `-----------'
+,-----------------------------------------------------------. ,-----------. ,---------------.
+|  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|JPY|Bsp| |Ins|Hom|PgU| |NmL|  /|  *|  -|
+|-----------------------------------------------------------| |-----------| |---------------|
+|Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  | |Del|End|PgD| |  7|  8|  9|  +|
+|-----------------------------------------------------------| `-----------' |---------------|
+|CapsL |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  #|Retn|               |  4|  5|  6|KP,|
+|-----------------------------------------------------------|     ,---.     |---------------|
+|Shft|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /| RO|Shift |     |Up |     |  1|  2|  3|KP=|
+|-----------------------------------------------------------| ,-----------. |---------------|
+|Ctl|Gui|Alt|MHEN|     Space      |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| |  0    |  .|Ent|
+`-----------------------------------------------------------' `-----------' `---------------'
+App:         Windows Menu key
+Gui:         Windows key, Mac ⌘ key or Meta key
+VDn Vup Mut: Volume control
+< #:         ISO keys(in UK legend)
+KP=:         Keypad = for Mac
+KP,:         Brazilian Keypad Comma
+JPY:         Japanese Yen(¥)
+RO:          Japanese ろ(Ro) or Brazilian /(Slash)
+MHEN:        Japanese 無変換(Non Conversion) or Korean Hanja
+HENK:        Japanese 変換(Conversion) or Korean Hangul/English
+KANA:        Japanese かな(Hiragana/Katakana)
+https://en.wikipedia.org/wiki/Keyboard_layout#Japanese
+https://en.wikipedia.org/wiki/Keyboard_layout#Hangul_.28for_Korean.29
+*/
+#define UNIMAP( \
+            K68,K69,K6A,K6B,K6C,K6D,K6E,K6F,K70,K71,K72,K73,                                     \
+    K29,    K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45,      K46,K47,K48,      K01,K02,K03, \
+    K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K74,K2A,  K49,K4A,K4B,  K53,K54,K55,K56, \
+    K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,    K31,  K4C,K4D,K4E,  K5F,K60,K61,K57, \
+    K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34,    K32,K28,                K5C,K5D,K5E,K66, \
+    K79,K64,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38,    K75,K7D,      K52,      K59,K5A,K5B,K67, \
+    K78,K7B,K7A,K77,        K2C,        K76,K00,K7E,K7F,K65,K7C,  K50,K51,K4F,  K62,    K63,K58  \
+) { \
+    { AC_##K00, AC_##K01, AC_##K02, AC_##K03, AC_##K04, AC_##K05, AC_##K06, AC_##K07,   /* 00-07 */ \
+      AC_##K08, AC_##K09, AC_##K0A, AC_##K0B, AC_##K0C, AC_##K0D, AC_##K0E, AC_##K0F }, /* 08-0F */ \
+    { AC_##K10, AC_##K11, AC_##K12, AC_##K13, AC_##K14, AC_##K15, AC_##K16, AC_##K17,   /* 10-17 */ \
+      AC_##K18, AC_##K19, AC_##K1A, AC_##K1B, AC_##K1C, AC_##K1D, AC_##K1E, AC_##K1F }, /* 18-1F */ \
+    { AC_##K20, AC_##K21, AC_##K22, AC_##K23, AC_##K24, AC_##K25, AC_##K26, AC_##K27,   /* 20-27 */ \
+      AC_##K28, AC_##K29, AC_##K2A, AC_##K2B, AC_##K2C, AC_##K2D, AC_##K2E, AC_##K2F }, /* 28-2F */ \
+    { AC_##K30, AC_##K31, AC_##K32, AC_##K33, AC_##K34, AC_##K35, AC_##K36, AC_##K37,   /* 30-37 */ \
+      AC_##K38, AC_##K39, AC_##K3A, AC_##K3B, AC_##K3C, AC_##K3D, AC_##K3E, AC_##K3F }, /* 38-3F */ \
+    { AC_##K40, AC_##K41, AC_##K42, AC_##K43, AC_##K44, AC_##K45, AC_##K46, AC_##K47,   /* 40-47 */ \
+      AC_##K48, AC_##K49, AC_##K4A, AC_##K4B, AC_##K4C, AC_##K4D, AC_##K4E, AC_##K4F }, /* 48-4F */ \
+    { AC_##K50, AC_##K51, AC_##K52, AC_##K53, AC_##K54, AC_##K55, AC_##K56, AC_##K57,   /* 50-57 */ \
+      AC_##K58, AC_##K59, AC_##K5A, AC_##K5B, AC_##K5C, AC_##K5D, AC_##K5E, AC_##K5F }, /* 58-5F */ \
+    { AC_##K60, AC_##K61, AC_##K62, AC_##K63, AC_##K64, AC_##K65, AC_##K66, AC_##K67,   /* 60-67 */ \
+      AC_##K68, AC_##K69, AC_##K6A, AC_##K6B, AC_##K6C, AC_##K6D, AC_##K6E, AC_##K6F }, /* 68-6F */ \
+    { AC_##K70, AC_##K71, AC_##K72, AC_##K73, AC_##K74, AC_##K75, AC_##K76, AC_##K77,   /* 70-77 */ \
+      AC_##K78, AC_##K79, AC_##K7A, AC_##K7B, AC_##K7C, AC_##K7D, AC_##K7E, AC_##K7F }  /* 78-7F */ \
+}
+
+// Universal map position codes
+enum unimap_position_codes {
+//  logical name            position(row << 4 | col)
+//  ------------------------------------------------
+    UNIMAP_KANA,            // 0x00
+    UNIMAP_VOLUME_DOWN,     // 0x01
+    UNIMAP_VOLUME_UP,       // 0x02
+    UNIMAP_VOLUME_MUTE,     // 0x03
+    UNIMAP_A,               // 0x04
+    UNIMAP_B,               // 0x05
+    UNIMAP_C,               // 0x06
+    UNIMAP_D,               // 0x07
+    UNIMAP_E,               // 0x08
+    UNIMAP_F,               // 0x09
+    UNIMAP_G,               // 0x0A
+    UNIMAP_H,               // 0x0B
+    UNIMAP_I,               // 0x0C
+    UNIMAP_J,               // 0x0D
+    UNIMAP_K,               // 0x0E
+    UNIMAP_L,               // 0x0F
+    UNIMAP_M,               // 0x10
+    UNIMAP_N,               // 0x11
+    UNIMAP_O,               // 0x12
+    UNIMAP_P,               // 0x13
+    UNIMAP_Q,               // 0x14
+    UNIMAP_R,               // 0x15
+    UNIMAP_S,               // 0x16
+    UNIMAP_T,               // 0x17
+    UNIMAP_U,               // 0x18
+    UNIMAP_V,               // 0x19
+    UNIMAP_W,               // 0x1A
+    UNIMAP_X,               // 0x1B
+    UNIMAP_Y,               // 0x1C
+    UNIMAP_Z,               // 0x1D
+    UNIMAP_1,               // 0x1E
+    UNIMAP_2,               // 0x1F
+    UNIMAP_3,               // 0x20
+    UNIMAP_4,               // 0x21
+    UNIMAP_5,               // 0x22
+    UNIMAP_6,               // 0x23
+    UNIMAP_7,               // 0x24
+    UNIMAP_8,               // 0x25
+    UNIMAP_9,               // 0x26
+    UNIMAP_0,               // 0x27
+    UNIMAP_ENTER,           // 0x28
+    UNIMAP_ESCAPE,          // 0x29
+    UNIMAP_BSPACE,          // 0x2A
+    UNIMAP_TAB,             // 0x2B
+    UNIMAP_SPACE,           // 0x2C
+    UNIMAP_MINUS,           // 0x2D
+    UNIMAP_EQUAL,           // 0x2E
+    UNIMAP_LBRACKET,        // 0x2F
+    UNIMAP_RBRACKET,        // 0x30
+    UNIMAP_BSLASH,          // 0x31
+    UNIMAP_NONUS_HASH,      // 0x32 ISO UK hasu
+    UNIMAP_SCOLON,          // 0x33
+    UNIMAP_QUOTE,           // 0x34
+    UNIMAP_GRAVE,           // 0x35
+    UNIMAP_COMMA,           // 0x36
+    UNIMAP_DOT,             // 0x37
+    UNIMAP_SLASH,           // 0x38
+    UNIMAP_CAPSLOCK,        // 0x39
+    UNIMAP_F1,              // 0x3A
+    UNIMAP_F2,              // 0x3B
+    UNIMAP_F3,              // 0x3C
+    UNIMAP_F4,              // 0x3D
+    UNIMAP_F5,              // 0x3E
+    UNIMAP_F6,              // 0x3F
+    UNIMAP_F7,              // 0x40
+    UNIMAP_F8,              // 0x41
+    UNIMAP_F9,              // 0x42
+    UNIMAP_F10,             // 0x43
+    UNIMAP_F11,             // 0x44
+    UNIMAP_F12,             // 0x45
+    UNIMAP_PSCREEN,         // 0x46
+    UNIMAP_SCROLLLOCK,      // 0x47
+    UNIMAP_PAUSE,           // 0x48
+    UNIMAP_INSERT,          // 0x49
+    UNIMAP_HOME,            // 0x4A
+    UNIMAP_PGUP,            // 0x4B
+    UNIMAP_DELETE,          // 0x4C
+    UNIMAP_END,             // 0x4D
+    UNIMAP_PGDOWN,          // 0x4E
+    UNIMAP_RIGHT,           // 0x4F
+    UNIMAP_LEFT,            // 0x50
+    UNIMAP_DOWN,            // 0x51
+    UNIMAP_UP,              // 0x52
+    UNIMAP_NUMLOCK,         // 0x53
+    UNIMAP_KP_SLASH,        // 0x54
+    UNIMAP_KP_ASTERISK,     // 0x55
+    UNIMAP_KP_MINUS,        // 0x56
+    UNIMAP_KP_PLUS,         // 0x57
+    UNIMAP_KP_ENTER,        // 0x58
+    UNIMAP_KP_1,            // 0x59
+    UNIMAP_KP_2,            // 0x5A
+    UNIMAP_KP_3,            // 0x5B
+    UNIMAP_KP_4,            // 0x5C
+    UNIMAP_KP_5,            // 0x5D
+    UNIMAP_KP_6,            // 0x5E
+    UNIMAP_KP_7,            // 0x5F
+    UNIMAP_KP_8,            // 0x60
+    UNIMAP_KP_9,            // 0x61
+    UNIMAP_KP_0,            // 0x62
+    UNIMAP_KP_DOT,          // 0x63
+    UNIMAP_NONUS_BSLASH,    // 0x64 ISO UK backslash
+    UNIMAP_APPLICATION,     // 0x65
+    UNIMAP_KP_COMMA,        // 0x66
+    UNIMAP_KP_EQUAL,        // 0x67
+    UNIMAP_F13,             // 0x68
+    UNIMAP_F14,             // 0x69
+    UNIMAP_F15,             // 0x6A
+    UNIMAP_F16,             // 0x6B
+    UNIMAP_F17,             // 0x6C
+    UNIMAP_F18,             // 0x6D
+    UNIMAP_F19,             // 0x6E
+    UNIMAP_F20,             // 0x6F
+    UNIMAP_F21,             // 0x70
+    UNIMAP_F22,             // 0x71
+    UNIMAP_F23,             // 0x72
+    UNIMAP_F24,             // 0x73
+    UNIMAP_JYEN,            // 0x74
+    UNIMAP_RO,              // 0x75
+    UNIMAP_HENK,            // 0x76
+    UNIMAP_MHEN,            // 0x77
+    UNIMAP_LCTRL,           // 0x78
+    UNIMAP_LSHIFT,          // 0x79
+    UNIMAP_LALT,            // 0x7A
+    UNIMAP_LGUI,            // 0x7B
+    UNIMAP_RCTRL,           // 0x7C
+    UNIMAP_RSHIFT,          // 0x7D
+    UNIMAP_RALT,            // 0x7E
+    UNIMAP_RGUI,            // 0x7F
+    UNIMAP_NO,              // 0x80
+};
+
+#endif
index 3a196a2dd5bb17e3ff8c0af8b29c156024fe548e..df5d6de18b506c2c49b583f1730d91c4364728a8 100644 (file)
@@ -95,7 +95,7 @@ Note that ***higher layers have priority in the layer stack***. The firmware sta
 
 
 ### 0.3 Keymap Example
-The keymap is defined in the **`keymaps[]`** array, a 2-dimensional array of rows and columns corresponding to positions in the keyboard matrix. But most often the layers are defined using C macros to allow for easier reading and editing of the keymap files. To use complex actions you need to define `Fn` keycodes in the **`fn_actions[]`** array.
+The keymap is defined in the **`uint8_t keymaps[]`** array, a 2-dimensional array of rows and columns corresponding to positions in the keyboard matrix. But most often the layers are defined using C macros to allow for easier reading and editing of the keymap files. To use complex actions you need to define `Fn` action in the **`action_t fn_actions[]`** array.
 
 This is a keymap example for the [HHKB](http://en.wikipedia.org/wiki/Happy_Hacking_Keyboard) keyboard.
 This example has three layers: the QWERTY base layer, and two overlay layers for cursor and mousekey control, respectively.
@@ -109,7 +109,7 @@ In this example,
 
 You can find other keymap definitions in file `keymap.c` located on project directories.
 
-    static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         /* 0: Qwerty
          * ,-----------------------------------------------------------.
          * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  \|  `|
@@ -167,7 +167,7 @@ You can find other keymap definitions in file `keymap.c` located on project dire
                     LGUI,LALT,          BTN1,               RALT,TRNS),
     };
 
-    static const uint16_t PROGMEM fn_actions[] = {
+    const action_t PROGMEM fn_actions[] = {
         ACTION_LAYER_MOMENTARY(1),                  // FN0
         ACTION_LAYER_TAP_KEY(2, KC_SCLN),           // FN1
         ACTION_LAYER_TOGGLE(2),                     // FN2
@@ -214,7 +214,7 @@ There are 8 modifiers which has discrimination between left and right.
 - `KC_WSCH`, `KC_WHOM`, `KC_WBAK`, `KC_WFWD`, `KC_WSTP`, `KC_WREF`, `KC_WFAV` for web browser operation
 
 ### 1.5 Fn key
-`KC_FNnn` are keycodes for `Fn` key which not given any actions at the beginning unlike most of keycodes has its own inborn action. To use these keycodes in `KEYMAP()` you need to assign action you want at first. Action of `Fn` key is defined in `fn_actions[]` and its index of the array is identical with number part of `KC_FNnn`. Thus `KC_FN0` keycode indicates the action defined in first element of the array. ***32 `Fn` keys can be defined at most.***
+`KC_FNnn` are keycodes for `Fn` key which not given any actions at the beginning unlike most of keycodes has its own inborn action. To use these keycodes in `KEYMAP()` you need to assign action you want at first. Action of `Fn` key is defined in `action_t fn_actions[]` and its index of the array is identical with number part of `KC_FNnn`. Thus `KC_FN0` keycode indicates the action defined in first element of the array. ***32 `Fn` keys can be defined at most.***
 
 ### 1.6 Keycode Table
  See keycode table in [`doc/keycode.txt`](./keycode.txt) for description of keycodes.
@@ -443,7 +443,7 @@ To define tappable `Function` action in keymap use this.
 #### 2.4.3 Implement user function
 `Function` actions can be defined freely with C by user in callback function:
 
-    void keymap_call_function(keyrecord_t *event, uint8_t id, uint8_t opt)
+    void action_function(keyrecord_t *record, uint8_t id, uint8_t opt);
 
 This C function is called every time key is operated, argument `id` selects action to be performed and `opt` can be used for option. Function `id` can be 0-255 and `opt` can be 0-15.
 
@@ -598,13 +598,13 @@ Legacy Keymap uses two arrays `fn_layer[]` and `fn_keycode[]` to define Fn key.
 
 In following setting example, `Fn0`, `Fn1` and `Fn2` switch layer to 1, 2 and 2 respectively. `Fn2` registers `Space` key when tapping while `Fn0` and `Fn1` doesn't send any key.
 
-    static const uint8_t PROGMEM fn_layer[] = {
+    const uint8_t PROGMEM fn_layer[] = {
         1,              // Fn0
         2,              // Fn1
         2,              // Fn2
     };
 
-    static const uint8_t PROGMEM fn_keycode[] = {
+    const uint8_t PROGMEM fn_keycode[] = {
         KC_NO,          // Fn0
         KC_NO,          // Fn1
         KC_SPC,         // Fn2
diff --git a/tmk_core/doc/unimap.txt b/tmk_core/doc/unimap.txt
new file mode 100644 (file)
index 0000000..0db038e
--- /dev/null
@@ -0,0 +1,51 @@
+Unimap
+======
+universal keymapping framework
+using logical 128-key keyboard layout independent from physical keyboad matrix
+
+unimap is actually an actionmap whose size is row:8xcol:16.
+
+/* Keymapping with 16bit action codes */
+extern const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS];
+
+/* Universal 128-key keyboard layout(8x16)
+        ,-----------------------------------------------.
+        |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
+,---.   |-----------------------------------------------|     ,-----------.     ,-----------.
+|Esc|   |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|     |PrS|ScL|Pau|     |VDn|VUp|Mut|
+`---'   `-----------------------------------------------'     `-----------'     `-----------'
+,-----------------------------------------------------------. ,-----------. ,---------------.
+|  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|JPY|Bsp| |Ins|Hom|PgU| |NmL|  /|  *|  -|
+|-----------------------------------------------------------| |-----------| |---------------|
+|Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  | |Del|End|PgD| |  7|  8|  9|  +|
+|-----------------------------------------------------------| `-----------' |---------------|
+|CapsL |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  #|Retn|               |  4|  5| &n