summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--.travis.yml37
-rw-r--r--1-setup-path-win.bat77
-rw-r--r--README.md15
-rw-r--r--Vagrantfile186
-rw-r--r--converter/adb_usb/Makefile.pjrc73
-rw-r--r--converter/adb_usb/README.md103
-rw-r--r--converter/adb_usb/config.h63
-rw-r--r--converter/adb_usb/keymap_ansi.c16
-rw-r--r--converter/adb_usb/keymap_common.c30
-rw-r--r--converter/adb_usb/keymap_common.h212
-rw-r--r--converter/adb_usb/keymap_hasu.c58
-rw-r--r--converter/adb_usb/keymap_iso.c16
-rw-r--r--converter/adb_usb/led.c27
-rw-r--r--converter/adb_usb/matrix.c296
-rw-r--r--converter/ascii_usb/Makefile82
-rw-r--r--converter/ascii_usb/README38
-rw-r--r--converter/ascii_usb/config.h70
-rw-r--r--converter/ascii_usb/keymap.c42
-rw-r--r--converter/ascii_usb/led.c25
-rw-r--r--converter/ascii_usb/matrix.c195
-rw-r--r--converter/ibm4704_usb/Makefile93
-rw-r--r--converter/ibm4704_usb/README.md72
-rw-r--r--converter/ibm4704_usb/config.h61
-rw-r--r--converter/ibm4704_usb/ibm4704.txt182
-rw-r--r--converter/ibm4704_usb/keymap_50key.c17
-rw-r--r--converter/ibm4704_usb/keymap_alps102key.c50
-rw-r--r--converter/ibm4704_usb/keymap_common.c30
-rw-r--r--converter/ibm4704_usb/keymap_common.h146
-rw-r--r--converter/ibm4704_usb/keymap_hasu.c85
-rw-r--r--converter/ibm4704_usb/keymap_plain.c50
-rw-r--r--converter/ibm4704_usb/led.c24
-rw-r--r--converter/ibm4704_usb/matrix.c162
-rw-r--r--converter/m0110_usb/Makefile96
-rw-r--r--converter/m0110_usb/Makefile.teensy98
-rw-r--r--converter/m0110_usb/Makefile.tmk_rev196
-rw-r--r--converter/m0110_usb/Makefile.tmk_rev296
-rw-r--r--converter/m0110_usb/README.md79
-rw-r--r--converter/m0110_usb/config.h62
-rw-r--r--converter/m0110_usb/keymap_common.c37
-rw-r--r--converter/m0110_usb/keymap_common.h133
-rw-r--r--converter/m0110_usb/keymap_default.c137
-rw-r--r--converter/m0110_usb/keymap_hasu.c87
-rw-r--r--converter/m0110_usb/keymap_intl.c73
-rw-r--r--converter/m0110_usb/keymap_spacefn.c71
-rw-r--r--converter/m0110_usb/led.c32
-rw-r--r--converter/m0110_usb/matrix.c142
-rw-r--r--converter/news_usb/Makefile.pjrc74
-rw-r--r--converter/news_usb/config_pjrc.h62
-rw-r--r--converter/news_usb/keymap.c125
-rw-r--r--converter/news_usb/led.c26
-rw-r--r--converter/news_usb/matrix.c142
-rw-r--r--converter/next_usb/Makefile87
-rw-r--r--converter/next_usb/Makefile.pjrc63
-rw-r--r--converter/next_usb/README45
-rw-r--r--converter/next_usb/config.h190
-rw-r--r--converter/next_usb/keymap.c177
-rw-r--r--converter/next_usb/led.c60
-rw-r--r--converter/next_usb/matrix.c271
-rw-r--r--converter/next_usb/next_timings.jpgbin407936 -> 0 bytes
-rw-r--r--converter/pc98_usb/Makefile83
-rw-r--r--converter/pc98_usb/README67
-rw-r--r--converter/pc98_usb/config.h123
-rw-r--r--converter/pc98_usb/keymap.c208
-rw-r--r--converter/pc98_usb/led.c33
-rw-r--r--converter/pc98_usb/matrix.c211
-rw-r--r--converter/ps2_usb/Makefile105
-rw-r--r--converter/ps2_usb/Makefile.mbed46
-rw-r--r--converter/ps2_usb/Makefile.pjrc75
-rw-r--r--converter/ps2_usb/Makefile.tmk_rev198
-rw-r--r--converter/ps2_usb/Makefile.tmk_rev298
-rw-r--r--converter/ps2_usb/Makefile.vusb107
-rw-r--r--converter/ps2_usb/README.md84
-rw-r--r--converter/ps2_usb/config.h173
-rw-r--r--converter/ps2_usb/config_mbed.h60
-rw-r--r--converter/ps2_usb/config_tmk_rev1.h147
-rw-r--r--converter/ps2_usb/config_tmk_rev2.h85
-rw-r--r--converter/ps2_usb/keymap_common.c31
-rw-r--r--converter/ps2_usb/keymap_common.h173
-rw-r--r--converter/ps2_usb/keymap_jis.c34
-rw-r--r--converter/ps2_usb/keymap_plain.c32
-rw-r--r--converter/ps2_usb/keymap_spacefn.c61
-rw-r--r--converter/ps2_usb/led.c33
-rw-r--r--converter/ps2_usb/main.cpp46
-rw-r--r--converter/ps2_usb/matrix.c486
-rw-r--r--converter/ps2_usb/usbconfig.h377
-rw-r--r--converter/serialmouse_usb/Makefile106
-rw-r--r--converter/serialmouse_usb/README.md11
-rw-r--r--converter/serialmouse_usb/config.h119
-rw-r--r--converter/serialmouse_usb/keymap.c33
-rw-r--r--converter/serialmouse_usb/keymap_common.c30
-rw-r--r--converter/serialmouse_usb/keymap_common.h174
-rw-r--r--converter/serialmouse_usb/led.c24
-rw-r--r--converter/serialmouse_usb/matrix.c83
-rw-r--r--converter/sun_usb/Makefile85
-rw-r--r--converter/sun_usb/README106
-rw-r--r--converter/sun_usb/command_extra.c61
-rw-r--r--converter/sun_usb/config.h95
-rw-r--r--converter/sun_usb/keymap.c192
-rw-r--r--converter/sun_usb/keymap_sun3.c173
-rw-r--r--converter/sun_usb/led.c35
-rw-r--r--converter/sun_usb/matrix.c186
-rw-r--r--converter/terminal_bluefruit/Makefile99
-rw-r--r--converter/terminal_bluefruit/README37
-rw-r--r--converter/terminal_bluefruit/config.h112
-rw-r--r--converter/terminal_bluefruit/keymap.c227
-rw-r--r--converter/terminal_bluefruit/led.c35
-rw-r--r--converter/terminal_bluefruit/matrix.c262
-rw-r--r--converter/terminal_usb/Makefile98
-rw-r--r--converter/terminal_usb/README37
-rw-r--r--converter/terminal_usb/config.h138
-rw-r--r--converter/terminal_usb/keymap.c216
-rw-r--r--converter/terminal_usb/led.c33
-rw-r--r--converter/terminal_usb/matrix.c262
-rw-r--r--converter/usb_usb/Makefile140
-rw-r--r--converter/usb_usb/README74
-rw-r--r--converter/usb_usb/config.h39
-rw-r--r--converter/usb_usb/keymap.c115
-rw-r--r--converter/usb_usb/keymap_common.c31
-rw-r--r--converter/usb_usb/keymap_common.h77
-rw-r--r--converter/usb_usb/keymap_hasu.c158
-rw-r--r--converter/usb_usb/keymap_spacefn.c61
-rw-r--r--converter/usb_usb/main.cpp132
-rw-r--r--converter/usb_usb/matrix.c133
-rw-r--r--converter/x68k_usb/Makefile101
-rw-r--r--converter/x68k_usb/README151
-rw-r--r--converter/x68k_usb/config_pjrc.h67
-rw-r--r--converter/x68k_usb/keymap.c150
-rw-r--r--converter/x68k_usb/led.c43
-rw-r--r--converter/x68k_usb/matrix.c142
-rw-r--r--doc/BUILD_GUIDE.md (renamed from BUILD_GUIDE.md)4
-rw-r--r--doc/COPYING.GPLv2 (renamed from tmk_core/doc/COPYING.GPLv2)0
-rw-r--r--doc/COPYING.GPLv3 (renamed from tmk_core/doc/COPYING.GPLv3)0
-rwxr-xr-xdoc/CYGWIN_GUIDE.md (renamed from keyboard/planck/CYGWIN_GUIDE.md)0
-rw-r--r--doc/FUSE.txt (renamed from tmk_core/doc/FUSE.txt)0
-rw-r--r--doc/HAND_WIRE.md (renamed from HAND_WIRE.md)6
-rw-r--r--doc/PCB_GUIDE.md (renamed from keyboard/planck/PCB_GUIDE.md)0
-rw-r--r--doc/POWER.txt (renamed from tmk_core/doc/POWER.txt)0
-rw-r--r--doc/TMK_README.md (renamed from TMK_README.md)0
-rw-r--r--doc/USB_NKRO.txt (renamed from tmk_core/doc/USB_NKRO.txt)0
-rw-r--r--doc/VAGRANT_GUIDE.md (renamed from VAGRANT_GUIDE.md)8
-rw-r--r--doc/build_old.md (renamed from tmk_core/doc/build.md)1
-rw-r--r--doc/keycode.txt (renamed from tmk_core/doc/keycode.txt)0
-rw-r--r--doc/keymap.md (renamed from tmk_core/doc/keymap.md)0
-rw-r--r--doc/other_projects.md (renamed from tmk_core/doc/other_projects.md)0
-rw-r--r--keyboard/arrow_pad/Makefile (renamed from converter/adb_usb/Makefile)69
-rw-r--r--keyboard/arrow_pad/README.md24
-rw-r--r--keyboard/arrow_pad/arrow_pad.c114
-rw-r--r--keyboard/arrow_pad/arrow_pad.h18
-rw-r--r--keyboard/arrow_pad/config.h158
-rw-r--r--keyboard/arrow_pad/keymaps/default.c163
-rw-r--r--keyboard/arrow_pad/keymaps/pad_21/config.h158
-rw-r--r--keyboard/arrow_pad/keymaps/pad_21/keymap.c160
-rw-r--r--keyboard/arrow_pad/keymaps/pad_21/makefile.mk17
-rw-r--r--keyboard/arrow_pad/keymaps/pad_24/config.h158
-rw-r--r--keyboard/arrow_pad/keymaps/pad_24/keymap.c163
-rw-r--r--keyboard/arrow_pad/keymaps/pad_24/makefile.mk17
-rwxr-xr-xkeyboard/atomic/flash-pcb.sh3
-rw-r--r--keyboard/ergodox_ez/keymaps/bepo/README.md34
-rw-r--r--keyboard/ergodox_ez/keymaps/bepo/bepo.hex1193
-rw-r--r--keyboard/ergodox_ez/keymaps/bepo/bepo.pngbin0 -> 79747 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/bepo/keymap.c311
-rw-r--r--keyboard/ergodox_ez/keymaps/dave/dave.hex2298
-rw-r--r--keyboard/ergodox_ez/keymaps/dave/keymap.c22
-rw-r--r--keyboard/ergodox_ez/keymaps/dave/readme.md38
-rw-r--r--keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md99
-rw-r--r--keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex5371
-rwxr-xr-xkeyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c284
-rw-r--r--keyboard/ergodox_ez/matrix.c2
-rw-r--r--keyboard/ergodox_ez/readme.md6
-rw-r--r--keyboard/ergodox_ez/util/compile_keymap.py710
-rw-r--r--keyboard/ergodox_ez/util/readme.md3
-rwxr-xr-xkeyboard/planck/flash-pcb.sh3
-rw-r--r--keyboard/planck/keymaps/README.md22
-rw-r--r--keyboard/planck/keymaps/experimental/keymap.c3
-rwxr-xr-xkeyboard/preonic/flash-pcb.sh3
-rw-r--r--quantum/quantum.c111
-rw-r--r--quantum/quantum.h7
-rw-r--r--tmk_core/protocol/lufa/descriptor.c2
-rw-r--r--tmk_core/rules.mk9
-rw-r--r--util/1-setup-path-win.bat61
-rw-r--r--util/2-setup-environment-win.bat (renamed from 2-setup-environment-win.bat)0
-rw-r--r--util/ELEVATE_LICENSE.md25
-rw-r--r--util/add-paths.bat30
-rw-r--r--util/avr_setup.sh (renamed from avr_setup.sh)4
-rw-r--r--util/elevate.exebin0 -> 79360 bytes
-rwxr-xr-xutil/new_project.sh (renamed from new_project.sh)0
187 files changed, 10843 insertions, 14005 deletions
diff --git a/.gitignore b/.gitignore
index a082ea22e4..83f3f2da96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ keyboard/planck/dfu-programmer.exe
*.eep
*.elf
*.hex
+*.log
*.lss
*.lst
*.map
@@ -14,6 +15,8 @@ tags
build/
*.bak
.vagrant/
+.idea/
+CMakeLists.txt
.DS_STORE
# Eclipse/PyCharm/Other IDE Settings
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000..f9c36516e8
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,37 @@
+os:
+ - linux
+
+language:
+ - c
+
+compiler:
+ - avr-gcc
+
+env:
+ - KEYBOARD=alps64
+ - KEYBOARD=arrow_pad
+ - KEYBOARD=atomic
+ - KEYBOARD=atreus
+ - KEYBOARD=bantam44
+ - KEYBOARD=clueboard1
+ - KEYBOARD=clueboard2
+ - KEYBOARD=cluepad
+ - KEYBOARD=ergodox_ez
+ - KEYBOARD=gh60
+ - KEYBOARD=gh60_rev_c
+ - KEYBOARD=hhkb
+ - KEYBOARD=jd45
+ - KEYBOARD=kc60_v2
+ - KEYBOARD=planck
+ - KEYBOARD=preonic
+ - KEYBOARD=retro_refit
+
+script:
+ - cd keyboard/$KEYBOARD && make
+
+addons:
+ apt:
+ packages:
+ - avr-libc
+ - gcc-avr
+ - dfu-programmer
diff --git a/1-setup-path-win.bat b/1-setup-path-win.bat
deleted file mode 100644
index f612d0f4a7..0000000000
--- a/1-setup-path-win.bat
+++ /dev/null
@@ -1,77 +0,0 @@
-@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
-@ECHO OFF
-SET CMDLINERUNSTR=%SystemRoot%\system32\cmd.exe
-
-SET NEWPATH1="C:\MinGW\msys\1.0\bin"
-SET NEWPATH2="C:\MinGW\bin"
-
-:: Make sure we're running with administrator privileges
-NET SESSION >nul 2>&1
-IF ERRORLEVEL 1 (
- ECHO FAILED. Run this script with administrator privileges.
- GOTO ExitBatch
-)
-
-:: Make sure the second path exists. The first path won't be created until the second script is run
-IF NOT EXIST !NEWPATH2! (ECHO Path not found: %NEWPATH2% && GOTO ExitBatch)
-
-:: Add paths
-CALL :AddPath %NEWPATH1%
-CALL :AddPath %NEWPATH2%
-
-:: Branch to UpdateEnv if we need to update
-IF DEFINED UPDATE (GOTO UpdateEnv)
-
-GOTO ExitBatch
-
-:: -----------------------------------------------------------------------------
-
-:UpdateEnv
-ECHO Making updated PATH go live . . .
-REG delete HKCU\Environment /F /V TEMPVAR > nul 2>&1
-setx TEMPVAR 1 > nul 2>&1
-REG delete HKCU\Environment /F /V TEMPVAR > nul 2>&1
-IF NOT !cmdcmdline! == !CMDLINERUNSTR! (CALL :KillExplorer)
-GOTO ExitBatch
-
-:: -----------------------------------------------------------------------------
-
-:ExitBatch
-ENDLOCAL
-PAUSE
-EXIT /b
-
-:: -----------------------------------------------------------------------------
-
-:AddPath <pathToAdd>
-ECHO %PATH% | FINDSTR /C:"%~1" > nul
-IF ERRORLEVEL 1 (
- REG add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v PATH /t REG_SZ /d "%PATH%;%~1" > nul 2>&1
- IF ERRORLEVEL 0 (
- ECHO Adding %1 . . . Success!
- SET "PATH=%PATH%;%~1"
- SET UPDATE=1
- ) ELSE (
- ECHO Adding %1 . . . FAILED. Run this script with administrator privileges.
- )
-) ELSE (
- ECHO Skipping %1 - Already in PATH
- )
-EXIT /b
-
-:: -----------------------------------------------------------------------------
-
-:KillExplorer
-
-ECHO Your desktop is being restarted, please wait. . .
-ping -n 5 127.0.0.1 > NUL 2>&1
-ECHO Killing process Explorer.exe. . .
-taskkill /f /im explorer.exe
-ECHO.
-ECHO Your desktop is now loading. . .
-ping -n 5 127.0.0.1 > NUL 2>&1
-ECHO.
-ping -n 5 127.0.0.1 > NUL 2>&1
-START explorer.exe
-START explorer.exe %CD%
-EXIT /b \ No newline at end of file
diff --git a/README.md b/README.md
index 2c82575285..0990dd8341 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+[![Build Status](https://travis-ci.org/jackhumbert/qmk_firmware.svg?branch=master)](https://travis-ci.org/jackhumbert/qmk_firmware)
# Quantum Mechanical Keyboard Firmware
This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.co), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/).
@@ -13,18 +14,18 @@ The OLKB product firmwares are maintained by Jack, the Ergodox EZ by Erez, and t
This is not a tiny project. While this is the main Readme, there are many other files you might want to consult. Here are some points of interest:
* The Readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboard/ergodox_ez/); for the Atomic, it's [here](keyboard/atomic/) and so on.
-* The [build guide](BUILD_GUIDE.md), also mentioned in the next section. This is how you put your development environment together so you can compile the firmware.
+* The [build guide](doc/BUILD_GUIDE.md), also mentioned in the next section. This is how you put your development environment together so you can compile the firmware.
* The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
* [tmk_core/common/keycode.h](tmk_core/common/keycode.h) - the base TMK keycodes. This is the actual source file.
- * [tmk_core/doc/keycode.txt](tmk_core/doc/keycode.txt) - an explanation of those same keycodes.
+ * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.
* [quantum/keymap_common.h](quantum/keymap_common.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap_common.h` is where they're actually defined.
-* The [TMK documentation](tmk_core/doc). QMK is based on TMK, and this explains how it works internally.
+* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally.
## Getting started
-* [BUILD_GUIDE.md](BUILD_GUIDE.md) contains instructions to set up a build environment, build the firmware, and deploy it to a keyboard. Once your build environment has been set up, all `make` commands to actually build the firmware must be run from a folder in `keyboard/`.
+* [BUILD_GUIDE.md](doc/BUILD_GUIDE.md) contains instructions to set up a build environment, build the firmware, and deploy it to a keyboard. Once your build environment has been set up, all `make` commands to actually build the firmware must be run from a folder in `keyboard/`.
* If you're looking to customize a keyboard that currently runs QMK or TMK, find your keyboard's directory under `keyboard/` and run the make commands from there.
-* If you're looking to apply this firmware to an entirely new hardware project (a new kind of keyboard), you can create your own Quantum-based project by using `./new_project.sh <project_name>`, which will create `/keyboard/<project_name>` with all the necessary components for a Quantum project.
+* If you're looking to apply this firmware to an entirely new hardware project (a new kind of keyboard), you can create your own Quantum-based project by using `util/new_project.sh <project_name>`, which will create `/keyboard/<project_name>` with all the necessary components for a Quantum project.
### Makefile Options
@@ -175,7 +176,7 @@ void matrix_scan_user(void) {
}
```
-As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_.EYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously.
+As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_KEYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously.
### Temporarily setting the default layer
@@ -204,7 +205,7 @@ rounded up (5 bits per key). For example on Planck (48 keys) it uses
### Remember: These are just aliases
-These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
+These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/doc/keymap.md#2-action).
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
diff --git a/Vagrantfile b/Vagrantfile
index 1abe8ff3b1..a6c3afd385 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -1,88 +1,98 @@
-# -*- mode: ruby -*-
-# vi: set ft=ruby :
-
-Vagrant.configure(2) do |config|
- # You can only have one config.vm.box uncommented at a time
-
- # Comment this and uncomment another if you don't want to use the minimal Arch box
- config.vm.box = "dragon788/arch-ala-elasticdog"
-
- # VMware/Virtualbox 64 bit
- # config.vm.box = "phusion/ubuntu-14.04-amd64"
- #
- # VMware/Virtualbox 64 bit
- #config.vm.box = "puphpet/centos65-x64"
- #
- # The opensuse boxes don't have dfu-util in their default repositories
- #
- # The virtualbox version has tools issues
- # VMware/Virtualbox 64 bit
- #config.vm.box = "bento/opensuse-13.2-x86_64"
- #
- # Virtualbox only
- #config.vm.box = "bento/opensuse-13.2-i386"
- # config.vm.box = ""
- # config.vm.box = ""
-
- # This section allows you to customize the Virtualbox VM
- # settings, ie showing the GUI or upping the memory
- # or cores if desired
- config.vm.provider "virtualbox" do |vb|
- # Hide the VirtualBox GUI when booting the machine
- vb.gui = false
- # Uncomment the below lines if you want to program
- # your Teensy via the VM rather than your host OS
- #vb.customize ['modifyvm', :id, '--usb', 'on']
- #vb.customize ['usbfilter', 'add', '0',
- # '--target', :id,
- # '--name', 'teensy',
- # '--vendorid', '0x16c0',
- # '--productid','0x0478'
- # ]
- # Customize the amount of memory on the VM:
- vb.memory = "512"
- end
-
- # This section allows you to customize the VMware VM
- # settings, ie showing the GUI or upping the memory
- # or cores if desired
- config.vm.provider "vmware_workstation" do |vmw|
- # Hide the VMware GUI when booting the machine
- vmw.gui = false
-
- # Customize the amount of memory on the VM:
- vmw.memory = "512"
- end
-
- config.vm.provider "vmware_fusion" do |vmf|
- # Hide the vmfare GUI when booting the machine
- vmf.gui = false
-
- # Customize the amount of memory on the VM:
- vmf.memory = "512"
- end
-
- # This script ensures the required packages for AVR programming are installed
- # It also ensures the system always gets the latest updates when powered on
- # If this causes issues you can run a 'vagrant destroy' and then
- # add a # before ,args: and run 'vagrant up' to get a working
- # non-updated box and then attempt to troubleshoot or open a Github issue
-
- config.vm.provision "shell", run: "always", path: "avr_setup.sh", args: "-update"
-
- config.vm.post_up_message = """
- Log into the VM using 'vagrant ssh' on OSX or from Git Bash (Win)
- or 'vagrant ssh-config' and Putty or Bitvise SSH or another SSH tool
-
- Change directory (cd) to the keyboard you wish to program
- (Optionally) modify your layout,
- then run 'make clean'
- and then 'make' to compile the .eep and .hex files.
-
- Or you can copy and paste the example line below.
-
- cd /vagrant; cd keyboard; cd ergodox_ez; make clean; make
-
-
- """
-end
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure(2) do |config|
+ # You can only have one config.vm.box uncommented at a time
+
+ # Comment this and uncomment another if you don't want to use the minimal Arch box
+ config.vm.box = "dragon788/arch-ala-elasticdog"
+
+ # VMware/Virtualbox 64 bit
+ # config.vm.box = "phusion/ubuntu-14.04-amd64"
+ #
+ # VMware/Virtualbox 64 bit
+ #config.vm.box = "puphpet/centos65-x64"
+ #
+ # The opensuse boxes don't have dfu-util in their default repositories
+ #
+ # The virtualbox version has tools issues
+ # VMware/Virtualbox 64 bit
+ #config.vm.box = "bento/opensuse-13.2-x86_64"
+ #
+ # Virtualbox only
+ #config.vm.box = "bento/opensuse-13.2-i386"
+ # config.vm.box = ""
+ # config.vm.box = ""
+
+ # This section allows you to customize the Virtualbox VM
+ # settings, ie showing the GUI or upping the memory
+ # or cores if desired
+ config.vm.provider "virtualbox" do |vb|
+ # Hide the VirtualBox GUI when booting the machine
+ vb.gui = false
+ # Uncomment the below lines if you want to program
+ # your Teensy via the VM rather than your host OS
+ #vb.customize ['modifyvm', :id, '--usb', 'on']
+ #vb.customize ['usbfilter', 'add', '0',
+ # '--target', :id,
+ # '--name', 'teensy',
+ # '--vendorid', '0x16c0',
+ # '--productid','0x0478'
+ # ]
+ # Customize the amount of memory on the VM:
+ vb.memory = "512"
+ end
+
+ # This section allows you to customize the VMware VM
+ # settings, ie showing the GUI or upping the memory
+ # or cores if desired
+ config.vm.provider "vmware_workstation" do |vmw|
+ # Hide the VMware GUI when booting the machine
+ vmw.gui = false
+
+ # Customize the amount of memory on the VM:
+ vmw.memory = "512"
+ end
+
+ config.vm.provider "vmware_fusion" do |vmf|
+ # Hide the vmfare GUI when booting the machine
+ vmf.gui = false
+
+ # Customize the amount of memory on the VM:
+ vmf.memory = "512"
+ end
+
+ # Docker provider pulls from hub.docker.com respecting docker.image if
+ # config.vm.box is nil. Note that this bind-mounts from the current dir to
+ # /vagrant in the guest, so unless your UID is 1000 to match vagrant in the
+ # image, you'll need to: chmod -R a+rw .
+ config.vm.provider "docker" do |docker, override|
+ override.vm.box = nil
+ docker.image = "jesselang/debian-vagrant:jessie"
+ docker.has_ssh = true
+ end
+
+ # This script ensures the required packages for AVR programming are installed
+ # It also ensures the system always gets the latest updates when powered on
+ # If this causes issues you can run a 'vagrant destroy' and then
+ # add a # before ,args: and run 'vagrant up' to get a working
+ # non-updated box and then attempt to troubleshoot or open a Github issue
+
+ config.vm.provision "shell", run: "always", path: "./util/avr_setup.sh", args: "-update"
+
+ config.vm.post_up_message = <<-EOT
+ Log into the VM using 'vagrant ssh' on OSX or from Git Bash (Win)
+ or 'vagrant ssh-config' and Putty or Bitvise SSH or another SSH tool
+
+ Change directory (cd) to the keyboard you wish to program
+ (Optionally) modify your layout,
+ then run 'make clean'
+ and then 'make' to compile the .eep and .hex files.
+
+ Or you can copy and paste the example line below.
+
+ cd /vagrant; cd keyboard; cd ergodox_ez; make clean; make
+
+
+ EOT
+end
diff --git a/converter/adb_usb/Makefile.pjrc b/converter/adb_usb/Makefile.pjrc
deleted file mode 100644
index c320c09d25..0000000000
--- a/converter/adb_usb/Makefile.pjrc
+++ /dev/null
@@ -1,73 +0,0 @@
-# Target file name (without extension).
-TARGET = adb_usb_pjrc
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent 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, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 16000000
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-#NKRO_ENABLE = yes # USB Nkey Rollover(+500)
-ADB_MOUSE_ENABLE = yes
-
-# ADB Mice need acceleration for todays much bigger screens.
-OPT_DEFS += -DADB_MOUSE_MAXACC=8
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TMK_DIR)/protocol/pjrc.mk
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/adb_usb/README.md b/converter/adb_usb/README.md
deleted file mode 100644
index 46082ff67f..0000000000
--- a/converter/adb_usb/README.md
+++ /dev/null
@@ -1,103 +0,0 @@
-ADB to USB keyboard converter
-=============================
-This firmware converts ADB keyboard protocol to USB.
-You can use PJRC Teensy for this converter, though, other USB AVR(ATMega32U4, AT90USB64/128 or etc) should work.
-But binary size is about 10KB or more it doesn't fit into 8K flash like ATMega8U2.
-
-Discuss: http://geekhack.org/showwiki.php?title=Island:14290
-
-
-
-README FIRST
-------------
-https://github.com/tmk/tmk_keyboard
-https://github.com/tmk/tmk_keyboard/tree/master/converter/adb_usb
-
-Also check these when you are in trouble.
-
-https://github.com/tmk/tmk_keyboard/wiki
-https://github.com/tmk/tmk_keyboard/labels/NOTE
-
-
-Wiring
-------
-Connect ADB pins to controller just by 3 lines(Vcc, GND, Data). By default Data line uses port PD0.
-
-ADB female socket from the front:
-
- ,--_--.
- / o4 3o \ 1: DATA
- | o2 1o | 2: Power SW
- - === - 3: VCC
- `-___-' 4: GND
-
-This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable. The external pull-up resistor(1K-10K Ohm) on Data is strongly recommended.(It is almost must!)
-https://github.com/tmk/tmk_keyboard/wiki/FAQ#pull-up-resistor
-
-Pull-up resister:
-
- Keyboard Conveter
- ,------.
- 5V------+------|VCC |
- | | |
- [R] | |
- | | |
- Signal--+------|PD0 |
- | |
- GND------------|GND |
- `------'
- R: 1K Ohm resistor
-
-
-Define following macros for ADB connection in config.h if you use other than port PD0.
-
- ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT
-
-
-Build
------
-See doc/build.md. In short,
-
- $ make clean
- $ make
-
-You can select keymap(ansi is default) like this:
-
- $ make KEYMAP=[ansi|iso|hasu]
-
-
-Keymap
-------
-You can change a keymap by editing code of keymap_[ansi|iso|hasu|yours].c.
-How to define the keymap is probably obvious. You can find key symbols in common/keycode.h. And see doc/keymap.md for more detail.
-
-
-Magic command
--------------
-To get help press `h` holding Magic key. Magic key is `Power key`.
-
-
-Locking CapsLock
-----------------
-Many of old ADB keyboards have mechanical push-lock switch for Capslock key and this converter supports the locking Capslock key by default. See README in top directory for more detail about this feature.
-https://github.com/tmk/tmk_keyboard/blob/master/README.md#mechanical-locking-support
-
-Also you may want to remove locking pin from the push-lock switch to use capslock as a normal momentary switch.
-
-
-Notes
------
-Not-extended ADB keyboards have no discrimination between right modifier and left one,
-you will always see left control even if you press right control key.
-Apple Extended Keyboard and Apple Extended Keyboard II can discriminate both side
-modifiers except for GUI key(Windows/Command).
-
-And most ADB keyboard has no diodes in its matrix so they are not NKRO,
-though ADB protocol itself supports it. See protocol/adb.c for more info.
-
-If keyboard has ISO layout you need to use ISO keymap with `make KEYMAP=iso`. With ANSI
-keymap you will suffer from swapped keys problem.
-
-https://github.com/tmk/tmk_keyboard/issues/35
-
-EOF
diff --git a/converter/adb_usb/config.h b/converter/adb_usb/config.h
deleted file mode 100644
index 5ce5c22159..0000000000
--- a/converter/adb_usb/config.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Copyright 2011 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0ADB
-#define DEVICE_VER 0x0101
-#define MANUFACTURER t.m.k.
-#define PRODUCT ADB keyboard converter
-#define DESCRIPTION convert ADB keyboard to USB
-
-/* matrix size */
-#define MATRIX_ROWS 16 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-#define MATRIX_ROW(code) ((code)>>3&0x0F)
-#define MATRIX_COL(code) ((code)&0x07)
-
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-
-/* legacy keymap support */
-#define USE_LEGACY_KEYMAP
-
-
-/* ADB port setting */
-#define ADB_PORT PORTD
-#define ADB_PIN PIND
-#define ADB_DDR DDRD
-#define ADB_DATA_BIT 0
-//#define ADB_PSW_BIT 1 // optional
-
-/* key combination for command */
-#ifndef __ASSEMBLER__
-#include "adb.h"
-#include "matrix.h"
-#define IS_COMMAND() ( \
- matrix_is_on(MATRIX_ROW(ADB_POWER), MATRIX_COL(ADB_POWER)) \
-)
-#endif
-
-#endif
diff --git a/converter/adb_usb/keymap_ansi.c b/converter/adb_usb/keymap_ansi.c
deleted file mode 100644
index 4ea601be0a..0000000000
--- a/converter/adb_usb/keymap_ansi.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- KEYMAP_EXT_ANSI(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, NO,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
- LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LALT,LGUI, SPC, RALT,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/converter/adb_usb/keymap_common.c b/converter/adb_usb/keymap_common.c
deleted file mode 100644
index 55a13793cb..0000000000
--- a/converter/adb_usb/keymap_common.c
+++ /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)]) };
-}
diff --git a/converter/adb_usb/keymap_common.h b/converter/adb_usb/keymap_common.h
deleted file mode 100644
index bdca38e129..0000000000
--- a/converter/adb_usb/keymap_common.h
+++ /dev/null
@@ -1,212 +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/>.
-*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "report.h"
-#include "print.h"
-#include "debug.h"
-#include "keymap.h"
-
-
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
-/* M0115 Apple Extended Keyboard ANSI
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
- * `---' `---------------' `---------------' `---------------' `-----------' `---'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| +|
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
-#define KEYMAP_EXT_ANSI( \
- K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
- K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
- K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
- K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
- K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
- K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_NUBS, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_PENT, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
- { KC_F17, KC_##K41, KC_NO, KC_##K43, KC_F18, KC_##K45, KC_NO, KC_##K47 }, \
- { KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_F18 }, \
- { KC_F19, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_F20, KC_##K5B, KC_##K5C, KC_INT3, KC_INT1, KC_PCMM }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_LANG2, KC_##K67 }, \
- { KC_LANG1, KC_##K69, KC_F16, KC_##K6B, KC_NO, KC_##K6D, KC_APP, KC_##K6F }, \
- { KC_NO, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_NO, KC_##K7F } \
-}
-
-/* M0115 Apple Extended Keyboard ISO
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
- * `---' `---------------' `---------------' `---------------' `-----------' `---'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| [| ]|Retur| |Del|End|PgD| | 7| 8| 9| -|
- * |------------------------------------------------------` | `-----------' |---------------|
- * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '| #| | | 4| 5| 6| +|
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shif| \| Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
-#define KEYMAP_EXT_ISO( \
- K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
- K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
- K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K24, K75,K77,K79, K59,K5B,K5C,K4E, \
- K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,K2A, K56,K57,K58,K45, \
- K38,K0A,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
- K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_PENT, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
- { KC_F17, KC_##K41, KC_NO, KC_##K43, KC_F18, KC_##K45, KC_NO, KC_##K47 }, \
- { KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_F18 }, \
- { KC_F19, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_F20, KC_##K5B, KC_##K5C, KC_INT3, KC_INT1, KC_PCMM }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_LANG2, KC_##K67 }, \
- { KC_LANG1, KC_##K69, KC_F16, KC_##K6B, KC_NO, KC_##K6D, KC_APP, KC_##K6F }, \
- { KC_NO, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_NO, KC_##K7F } \
-}
-
-
-
-
-/* M0116 Apple Standard Keyboard ANSI
-* +-------+
-* | power |
-* +-------+
-* +---+---+---+---+---+---+---+---+---+---+---+---+---+-----+ +---+---+---+---+
-* |esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | bks | |clr| = | / | * |
-* +---------------------------------------------------------+ +---+---+---+---+
-* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | | | 7 | 8 | 9 | + |
-* +-----------------------------------------------------+ | +---+---+---+---+
-* | ctrl | a | s | d | f | g | h | j | k | l | ; | ' |return| | 4 | 5 | 6 | - |
-* +---------------------------------------------------------+ +---+---+---+---+
-* | shift | z | x | c | v | b | n | m | , | . | / | shift | | 1 | 2 | 3 | |
-* +---------------------------------------------------------+ +-------+---|ent|
-* |cap|opt|comnd| ` | | \ |lef|rig|dwn|up | | 0 | . | |
-* +---------------------------------------------------------+ +-------+---+---+
-*/
-#define KEYMAP_M0116_ANSI( \
- K7F, \
- K35,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K51,K4B,K43, \
- K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K45, \
- K36,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K4E, \
- K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K53,K54,K55, \
- K39,K3A,K37,K32, K31, K2A,K3B,K3C,K3D,K3E, K52, K41,K4C \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_NO, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_NO, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
- { KC_NO, KC_##K41, KC_NO, KC_##K43, KC_NO, KC_##K45, KC_NO, KC_##K47 }, \
- { KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_NO }, \
- { KC_NO, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO , KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO , KC_NO, KC_NO , KC_##K7B, KC_NO, KC_NO, KC_NO, KC_##K7F } \
-}
-
-#endif
-
-
-/*
-ADB ANSI/ISO Keymapping Note
-============================
-ANSI
-,----------- ----------.
-| *a| 1| 2 =|Backspa|
-|----------- ----------|
-|Tab | Q| | ]| *c|
-|----------- ----------|
-|CapsLo| A| '|Return |
-|----------- ----------|
-|Shift | Shift |
-`----------- ----------'
-
-ISO
-,----------- ----------.
-| *a| 1| 2 =|Backspa|
-|----------- ----------|
-|Tab | Q| | ]|Retur|
-|----------- -----` |
-|CapsLo| A| '| *c| |
-|----------- ----------|
-|Shif| *b| Shift |
-`----------- ----------'
-
-ADB Keyboard scan code:
- ADB scan code USB usage
- ------------- ---------
-Key ANSI ISO ANSI ISO
----------------------------------------------
-*a 0x32 0x0A 0x35 0x35
-*b ---- 0x32 ---- 0x64
-*c 0x2A 0x2A 0x31 0x31(or 0x32)
-
-
-TMK ADB-USB mapping:
-ADB USB(ANSI) USB(ISO)
----------------------------------
-0x32 0x35 0x64
-0x0A ---- 0x35
-0x2A 0x31 0x31(or 0x32)
-
-Note that mappings of ADB code 0x32 are diffrent between ANSI and ISO keyboard.
-https://github.com/tmk/tmk_keyboard/issues/35
- */
diff --git a/converter/adb_usb/keymap_hasu.c b/converter/adb_usb/keymap_hasu.c
deleted file mode 100644
index a0b3f1fc68..0000000000
--- a/converter/adb_usb/keymap_hasu.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Default Layer: plain keymap
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| | |
- * `---' `---------------' `---------------' `---------------' `-----------' `---'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| [| ]| Fn0| |Del|End|PgD| | 7| 8| 9| -|
- * |-----------------------------------------------------------| `-----------' |---------------|
- * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +|
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Ctrl | |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_EXT_ANSI(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, NO,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,EQL, PSLS,PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,FN0, DEL, END, PGDN, P7, P8, P9, PMNS,
- LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RGUI,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* Default Layer: plain keymap
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
- * |` | |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| | |
- * `---' `---------------' `---------------' `---------------' `-----------' `---'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * |Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | |Ins|Hom|PgU| |NmL|Mb1|Mb2|Mb3|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U|PrS|ScL|Pau|Up |Ins| Fn0| |Del|End|PgD| |MwD|McU|MwU|MwD|
- * |-----------------------------------------------------------| `-----------' |---------------|
- * |CapsLo|VoD|VoU|Mut| F| G| H| J|Hom|PgU|Lef|Rig|Return | |McL|McD|McR|MwU|
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M|End|PgD|Dow|Shift | |PgU| |MwL|McD|MwR| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Mb3|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Ctrl | |Hom|PgD|End| | Mb1|Mb2| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_EXT_ANSI(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, NO,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,BTN1,BTN2,BTN3,
- TAB, Q, W, E, R, T, Y, U, PSCR,SLCK,PAUS,UP, INS, FN0, DEL, END, PGDN, WH_D,MS_U,WH_U,WH_D,
- LCAP,VOLD,VOLU,MUTE,F, G, H, J, HOME,PGUP,LEFT,RGHT, ENT, MS_L,MS_D,MS_R,WH_U,
- LSFT,Z, X, C, V, B, N, M, END, PGDN,DOWN, RSFT, PGUP, WH_L,MS_D,WH_R,
- LCTL,LGUI,LALT, SPC, RGUI,RCTL, HOME,PGDN,END, BTN1, BTN2,BTN3
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(1, KC_BSLS),
-};
diff --git a/converter/adb_usb/keymap_iso.c b/converter/adb_usb/keymap_iso.c
deleted file mode 100644
index a1b1a5ebd3..0000000000
--- a/converter/adb_usb/keymap_iso.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- KEYMAP_EXT_ISO(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, NO,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PMNS,
- LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6, PPLS,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LALT,LGUI, SPC, RALT,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/converter/adb_usb/led.c b/converter/adb_usb/led.c
deleted file mode 100644
index 3ee64a8e7d..0000000000
--- a/converter/adb_usb/led.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Copyright 2011 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 <util/delay.h>
-#include "adb.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- adb_host_kbd_led(~usb_led);
-}
diff --git a/converter/adb_usb/matrix.c b/converter/adb_usb/matrix.c
deleted file mode 100644
index 6220ee6e1c..0000000000
--- a/converter/adb_usb/matrix.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
-Copyright 2011 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/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "debug.h"
-#include "adb.h"
-#include "matrix.h"
-#include "report.h"
-#include "host.h"
-
-
-#if (MATRIX_COLS > 16)
-# error "MATRIX_COLS must not exceed 16"
-#endif
-#if (MATRIX_ROWS > 255)
-# error "MATRIX_ROWS must not exceed 255"
-#endif
-
-
-static bool is_modified = false;
-static report_mouse_t mouse_report = {};
-
-// matrix state buffer(1:on, 0:off)
-#if (MATRIX_COLS <= 8)
-static uint8_t matrix[MATRIX_ROWS];
-#else
-static uint16_t matrix[MATRIX_ROWS];
-#endif
-
-#ifdef MATRIX_HAS_GHOST
-static bool matrix_has_ghost_in_row(uint8_t row);
-#endif
-static void register_key(uint8_t key);
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- adb_host_init();
- // wait for keyboard to boot up and receive command
- _delay_ms(1000);
- // Enable keyboard left/right modifier distinction
- // Addr:Keyboard(0010), Cmd:Listen(10), Register3(11)
- // upper byte: reserved bits 0000, device address 0010
- // lower byte: device handler 00000011
- adb_host_listen(0x2B,0x02,0x03);
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- debug_enable = true;
- //debug_matrix = true;
- //debug_keyboard = true;
- //debug_mouse = true;
- print("debug enabled.\n");
- return;
-}
-
-#ifdef ADB_MOUSE_ENABLE
-
-#ifdef MAX
-#undef MAX
-#endif
-#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
-
-void adb_mouse_task(void)
-{
- uint16_t codes;
- int16_t x, y;
- static int8_t mouseacc;
- _delay_ms(12); // delay for preventing overload of poor ADB keyboard controller
- codes = adb_host_mouse_recv();
- // If nothing received reset mouse acceleration, and quit.
- if (!codes) {
- mouseacc = 1;
- return;
- };
- // Bit sixteen is button.
- if (~codes & (1 << 15))
- mouse_report.buttons |= MOUSE_BTN1;
- if (codes & (1 << 15))
- mouse_report.buttons &= ~MOUSE_BTN1;
- // lower seven bits are movement, as signed int_7.
- // low byte is X-axis, high byte is Y.
- y = (codes>>8 & 0x3F);
- x = (codes>>0 & 0x3F);
- // bit seven and fifteen is negative
- // usb does not use int_8, but int_7 (measuring distance) with sign-bit.
- if (codes & (1 << 6))
- x = (x-0x40);
- if (codes & (1 << 14))
- y = (y-0x40);
- // Accelerate mouse. (They weren't meant to be used on screens larger than 320x200).
- x *= mouseacc;
- y *= mouseacc;
- // Cap our two bytes per axis to one byte.
- // Easier with a MIN-function, but since -MAX(-a,-b) = MIN(a,b)...
- // I.E. MIN(MAX(x,-127),127) = -MAX(-MAX(x, -127), -127) = MIN(-MIN(-x,127),127)
- mouse_report.x = -MAX(-MAX(x, -127), -127);
- mouse_report.y = -MAX(-MAX(y, -127), -127);
- if (debug_mouse) {
- print("adb_host_mouse_recv: "); print_bin16(codes); print("\n");
- print("adb_mouse raw: [");
- phex(mouseacc); print(" ");
- phex(mouse_report.buttons); print("|");
- print_decs(mouse_report.x); print(" ");
- print_decs(mouse_report.y); print("]\n");
- }
- // Send result by usb.
- host_mouse_send(&mouse_report);
- // increase acceleration of mouse
- mouseacc += ( mouseacc < ADB_MOUSE_MAXACC ? 1 : 0 );
- return;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- /* extra_key is volatile and more convoluted than necessary because gcc refused
- to generate valid code otherwise. Making extra_key uint8_t and constructing codes
- here via codes = extra_key<<8 | 0xFF; would consistently fail to even LOAD
- extra_key from memory, and leave garbage in the high byte of codes. I tried
- dozens of code variations and it kept generating broken assembly output. So
- beware if attempting to make extra_key code more logical and efficient. */
- static volatile uint16_t extra_key = 0xFFFF;
- uint16_t codes;
- uint8_t key0, key1;
-
- is_modified = false;
-
- codes = extra_key;
- extra_key = 0xFFFF;
-
- if ( codes == 0xFFFF )
- {
- _delay_ms(12); // delay for preventing overload of poor ADB keyboard controller
- codes = adb_host_kbd_recv();
- }
- key0 = codes>>8;
- key1 = codes&0xFF;
-
- if (debug_matrix && codes) {
- print("adb_host_kbd_recv: "); phex16(codes); print("\n");
- }
-
- if (codes == 0) { // no keys
- return 0;
- } else if (codes == 0x7F7F) { // power key press
- register_key(0x7F);
- } else if (codes == 0xFFFF) { // power key release
- register_key(0xFF);
- } else if (key0 == 0xFF) { // error
- xprintf("adb_host_kbd_recv: ERROR(%d)\n", codes);
- return key1;
- } else {
- register_key(key0);
- if (key1 != 0xFF) // key1 is 0xFF when no second key.
- extra_key = key1<<8 | 0xFF; // process in a separate call
- }
-
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
-#ifdef MATRIX_HAS_GHOST
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- if (matrix_has_ghost_in_row(i))
- return true;
- }
-#endif
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-#if (MATRIX_COLS <= 8)
-uint8_t matrix_get_row(uint8_t row)
-#else
-uint16_t matrix_get_row(uint8_t row)
-#endif
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- if (!debug_matrix) return;
-#if (MATRIX_COLS <= 8)
- print("r/c 01234567\n");
-#else
- print("r/c 0123456789ABCDEF\n");
-#endif
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
-#if (MATRIX_COLS <= 8)
- pbin_reverse(matrix_get_row(row));
-#else
- pbin_reverse16(matrix_get_row(row));
-#endif
-#ifdef MATRIX_HAS_GHOST
- if (matrix_has_ghost_in_row(row)) {
- print(" <ghost");
- }
-#endif
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-#if (MATRIX_COLS <= 8)
- count += bitpop(matrix[i]);
-#else
- count += bitpop16(matrix[i]);
-#endif
- }
- return count;
-}
-
-#ifdef MATRIX_HAS_GHOST
-inline
-static bool matrix_has_ghost_in_row(uint8_t row)
-{
- // no ghost exists in case less than 2 keys on
- if (((matrix[row] - 1) & matrix[row]) == 0)
- return false;
-
- // ghost exists in case same state as other row
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- if (i != row && (matrix[i] & matrix[row]) == matrix[row])
- return true;
- }
- return false;
-}
-#endif
-
-inline
-static void register_key(uint8_t key)
-{
- uint8_t col, row;
- col = key&0x07;
- row = (key>>3)&0x0F;
- if (key&0x80) {
- matrix[row] &= ~(1<<col);
- } else {
- matrix[row] |= (1<<col);
- }
- is_modified = true;
-}
diff --git a/converter/ascii_usb/Makefile b/converter/ascii_usb/Makefile
deleted file mode 100644
index 6d977afc05..0000000000
--- a/converter/ascii_usb/Makefile
+++ /dev/null
@@ -1,82 +0,0 @@
-# Target file name (without extension).
-TARGET = ascii_usb
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c \
- protocol/serial_uart.c
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Build Options
-# *Comment out* to disable the options.
-#
-#MOUSEKEY_ENABLE = yes # Mouse keys
-#EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-#NKRO_ENABLE = yes # USB Nkey Rollover
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# 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
diff --git a/converter/ascii_usb/README b/converter/ascii_usb/README
deleted file mode 100644
index 02fa064ed4..0000000000
--- a/converter/ascii_usb/README
+++ /dev/null
@@ -1,38 +0,0 @@
-ASCII to USB keyboard protocol converter
-========================================
-This converts serial console terminal into USB keyboard, tested with TRS-80 model 100 TELCOM application.
-Target MCU is ATMega32u4 but other USB capable AVR will also work.
-
-
-Hardware
---------
-Connect RX, TX and GND to UART pin of AVR. Note that you may need line driver/level shifter like MAX232 to interface high voltage of RS-232C.
-
-
-
-Build Firmware
---------------
-Configure UART setting and Just use 'make'
-
- $ cd ascii_usb
- $ make
-
-Then, load the binary to MCU with your favorite programmer.
-
-
-
-Limitation
-----------
-- This cannot see key up event, you cannot hold a key.
-- Alt, Gui(Win/Mac) modifier key are not available.
-
-
-
-TRS-80 model 100
-----------------
-Use TELCOM program with setting: 19200bps/8bit/odd parity/1stop bit
-To set this configuration push Stat(F3) and input '9801D,10'. Then push Term(F4) to connect.
-
-
-
-
diff --git a/converter/ascii_usb/config.h b/converter/ascii_usb/config.h
deleted file mode 100644
index 0908997a53..0000000000
--- a/converter/ascii_usb/config.h
+++ /dev/null
@@ -1,70 +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/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x5C01
-#define DEVICE_VER 0x0100
-#define MANUFACTURER t.m.k.
-#define PRODUCT ASCII keyboard converter
-#define DESCRIPTION converts Serial Console Terminal into USB keyboard
-
-
-/* matrix size */
-#define MATRIX_ROWS 16
-#define MATRIX_COLS 16
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- host_get_first_key() == KC_BRK \
-)
-
-
-/*
- * Serial(USART) configuration
- * asynchronous, positive logic, 19200baud, bit order: LSB first
- * 1-start bit, 8-data bit, odd parity, 1-stop bit
- */
-#ifdef __AVR_ATmega32U4__
- #define SERIAL_UART_BAUD 19200
- #define SERIAL_UART_DATA UDR1
- #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
- #define SERIAL_UART_RXD_VECT USART1_RX_vect
- #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
- #define SERIAL_UART_INIT() do { \
- UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
- UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
- UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \
- UCSR1B |= (0<<TXCIE1) | (1<<TXEN1); /* TX interrupt, TX: enable */ \
- UCSR1C |= (1<<UPM11) | (1<<UPM10); /* parity: none(00), even(01), odd(11) */ \
- sei(); \
- } while(0)
-#else
- #error "USART configuration is needed."
-#endif
-
-/* disable action features */
-#define NO_ACTION_LAYER
-#define NO_ACTION_TAPPING
-#define NO_ACTION_ONESHOT
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-
-
-#endif
diff --git a/converter/ascii_usb/keymap.c b/converter/ascii_usb/keymap.c
deleted file mode 100644
index a0c61ce8de..0000000000
--- a/converter/ascii_usb/keymap.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "action_util.h"
-#include "util.h"
-#include "print.h"
-#include "keymap.h"
-
-
-// Keymap is not used. See matrix.c.
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
- return KC_NO;
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
- return (action_t) { .code = ACTION_NO };
-}
diff --git a/converter/ascii_usb/led.c b/converter/ascii_usb/led.c
deleted file mode 100644
index d1c39bc653..0000000000
--- a/converter/ascii_usb/led.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "stdint.h"
-#include "serial.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
-}
diff --git a/converter/ascii_usb/matrix.c b/converter/ascii_usb/matrix.c
deleted file mode 100644
index e1ea8e0ab8..0000000000
--- a/converter/ascii_usb/matrix.c
+++ /dev/null
@@ -1,195 +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 <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "matrix.h"
-#include "debug.h"
-#include "action_util.h"
-#include "protocol/serial.h"
-
-
-/*
- * Not use Matrix.
- *
- * ROW: 16(4bits)
- * COL: 16(4bits)
- *
- * 8bit wide
- * +---------+
- * 0|00 ... 0F|
- * 1|08 ... 1F|
- * :| ... |
- * :| ... |
- * E|E0 ... EF|
- * F|F0 ... FF|
- * +---------+
- */
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- debug_matrix = true;
- serial_init();
-
- debug("init\n");
- return;
-}
-
-static void type_key(uint16_t keycode)
-{
- if (keycode == 0) return;
-
- uint8_t mods = keycode>>8;
- uint8_t key = keycode&0xFF;
- if (mods) {
- add_mods(mods);
- send_keyboard_report();
- }
-
- add_key(key);
- send_keyboard_report();
-
- del_key(key);
- send_keyboard_report();
-
- if (mods) {
- del_mods(mods);
- send_keyboard_report();
- }
-}
-static uint16_t code2key(uint8_t code)
-{
- // ASCII to key combination in US laout
- switch (code) {
- case 0x01 ... 0x08: // Ctrl-[a-z]
- return MOD_BIT(KC_LCTRL)<<8 | (KC_A + (code-0x01));
- case 0x09: return KC_TAB; // TAB(Ctrl-i)
- case 0x0A ... 0x0C: // Ctrl-[a-z]
- return MOD_BIT(KC_LCTRL)<<8 | (KC_A + (code-0x01));
- case 0x0D: return KC_ENTER; // Enter(Ctrl-m)
- case 0x0E ... 0x1A: // Ctrl-[a-z]
- return MOD_BIT(KC_LCTRL)<<8 | (KC_A + (code-0x01));
- case 0x1B: return KC_ESC;
- case 0x1C: return KC_RIGHT;
- case 0x1D: return KC_LEFT;
- case 0x1E: return KC_UP;
- case 0x1F: return KC_DOWN;
- case 0x20: return KC_SPACE;
- case 0x21: return MOD_BIT(KC_LSHIFT)<<8 | KC_1; // !
- case 0x22: return MOD_BIT(KC_LSHIFT)<<8 | KC_QUOTE; // "
- case 0x23: return MOD_BIT(KC_LSHIFT)<<8 | KC_3; // #
- case 0x24: return MOD_BIT(KC_LSHIFT)<<8 | KC_4; // $
- case 0x25: return MOD_BIT(KC_LSHIFT)<<8 | KC_5; // %
- case 0x26: return MOD_BIT(KC_LSHIFT)<<8 | KC_7; // &
- case 0x27: return KC_QUOTE; // '
- case 0x28: return MOD_BIT(KC_LSHIFT)<<8 | KC_9; // (
- case 0x29: return MOD_BIT(KC_LSHIFT)<<8 | KC_0; // )
- case 0x2A: return MOD_BIT(KC_LSHIFT)<<8 | KC_8; // *
- case 0x2B: return MOD_BIT(KC_LSHIFT)<<8 | KC_EQUAL; // +
- case 0x2C: return KC_COMMA; // ,
- case 0x2D: return KC_MINUS; // -
- case 0x2E: return KC_DOT; // .
- case 0x2F: return KC_SLASH; // /
- case 0x30: return KC_0;
- case 0x31 ... 0x39: // 1-9
- return KC_1 + (code-0x31);
- case 0x3A: return MOD_BIT(KC_LSHIFT)<<8 | KC_SCLN; // :
- case 0x3B: return KC_SCLN; // ;
- case 0x3C: return MOD_BIT(KC_LSHIFT)<<8 | KC_COMMA; // <
- case 0x3D: return KC_EQUAL; // =
- case 0x3E: return MOD_BIT(KC_LSHIFT)<<8 | KC_DOT; // >
- case 0x3F: return MOD_BIT(KC_LSHIFT)<<8 | KC_SLASH; // ?
- case 0x40: return MOD_BIT(KC_LSHIFT)<<8 | KC_2; // @
- case 0x41 ... 0x5A: // A-Z
- return MOD_BIT(KC_LSHIFT)<<8 | (KC_A + (code-0x41));
- case 0x5B: return KC_LBRACKET; // [
- case 0x5C: return KC_BSLASH; //
- case 0x5D: return KC_RBRACKET; // ]
- case 0x5E: return MOD_BIT(KC_LSHIFT)<<8 | KC_6; // ^
- case 0x5F: return MOD_BIT(KC_LSHIFT)<<8 | KC_MINUS; // _
- case 0x61 ... 0x7A: // a-z
- return KC_A + (code-0x61);
- case 0x7B: return MOD_BIT(KC_LSHIFT)<<8 | KC_LBRACKET; // {
- case 0x7C: return MOD_BIT(KC_LSHIFT)<<8 | KC_BSLASH; // |
- case 0x7D: return MOD_BIT(KC_LSHIFT)<<8 | KC_RBRACKET; // }
- case 0x7E: return MOD_BIT(KC_LSHIFT)<<8 | KC_GRAVE; // }
- case 0x7F: return KC_DELETE; //
- }
- return 0;
-}
-
-uint8_t matrix_scan(void)
-{
- uint16_t code = serial_recv2();
- if (code == -1) {
- return 0;
- }
-
- print_hex8(code); print(" ");
-
- // echo back
- serial_send(code);
- type_key(code2key(code));
-
-
- return code;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return false;
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return 0;
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
- print("\n");
- }
-}
diff --git a/converter/ibm4704_usb/Makefile b/converter/ibm4704_usb/Makefile
deleted file mode 100644
index b5c97d2d31..0000000000
--- a/converter/ibm4704_usb/Makefile
+++ /dev/null
@@ -1,93 +0,0 @@
-# Target file name (without extension).
-TARGET = ibm4704_usb
-
-# 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 \
- protocol/ibm4704.c
-
-ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
-else
- SRC := keymap_plain.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = 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
-#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/ibm4704_usb/README.md b/converter/ibm4704_usb/README.md
deleted file mode 100644
index 68db4bd050..0000000000
--- a/converter/ibm4704_usb/README.md
+++ /dev/null
@@ -1,72 +0,0 @@
-IBM 4704 to USB keyboard converter
-==================================
-This firmware converts IBM 4704 keyboard protocol to USB HID.
-
-Keyboard initialization process takes a few seconds at start up. During that you will hear buzzer from the keyboard. **You need to plug USB cable after hooking up your keyboard to the converter.**
-
-
-Update
-------
-2015/09/07 Added keymap for Alps 102-key. Thanks, tai @ geekhack!
-2015/05/05 Added keymaps for 107-key, 77-key and 50-key. Thanks, orihalcon @ geekhack!
-2015/05/19 Fixed a protocol handling bug.
-
-
-
-Supported Keyboard
-------------------
-### IBM capacitive switch models:
-- 6019273 Model 100 50-key (grid layout) http://kishy.ca/?p=894
-- 6019284 Model 200 62-key Alpha(60% layout) http://kishy.ca/?p=894
-- 6019303 Model 300 77-key Expanded Alpha http://deskthority.net/photos-f62/ibm-6019303-t8502.html
-- 6020218 Model 400 107-key Full key http://kishy.ca/?p=894
-
-### Alps switch(vintage Green) models:
-
-- 5954339 Japanese 102-key http://deskthority.net/post87127.html#p87127
-- 6112883 Japanese 102-key http://geekhack.org/index.php?topic=52888.msg1194489#msg1194489
-- 6112884 Japanese 102-key http://geekhack.org/index.php?topic=50437.msg1193047#msg1193047
-- 6341739 Chinese 102-key http://geekhack.org/index.php?topic=52888.msg1176566#msg1176566
-
-
-Connector
----------
-Keyboard Plug from front:
-
- DSUB-9
- -------------
- \ N 2 3 4 5 /
- \ N N N N /
- ---------
- 2 GND
- 3 VCC 5V
- 4 DATA
- 5 CLOCK
- N No connection/No pin.
-
-
-Connection
-----------
-In case of using ATMega32U4(Teensy2.0):
-
-1. Supply power with VCC and GND.
-2. Connect CLOCK to PD1 and DATA to PD0. You can change pin with config.h.
-3. Optionally you may need pull-up register. 1KOhm probably work.
-
-
-Build Firmware
---------------
-Just run `make`:
-
- $ make
-
-To select keymap:
-
- $ make KEYMAP=[plain|...]
-
-
-Keymap
-------
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document(you can find in top README.md) and existent keymap files.
-
-Use `KEYMAP_ALPS102()` to define your keymap for Alps models.
diff --git a/converter/ibm4704_usb/config.h b/converter/ibm4704_usb/config.h
deleted file mode 100644
index 2fee10fd61..0000000000
--- a/converter/ibm4704_usb/config.h
+++ /dev/null
@@ -1,61 +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/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include <avr/interrupt.h>
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x4707
-#define DEVICE_VER 0x0001
-#define MANUFACTURER t.m.k.
-#define PRODUCT IBM 4704 keyboard converter
-#define DESCRIPTION convert IBM 4704 keyboard to USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 16 // keycode bit3-6
-#define MATRIX_COLS 8 // keycode bit0-2
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) || \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-
-/* Pin configuration */
-#define IBM4704_CLOCK_PORT PORTD
-#define IBM4704_CLOCK_PIN PIND
-#define IBM4704_CLOCK_DDR DDRD
-#define IBM4704_CLOCK_BIT 1
-#define IBM4704_DATA_PORT PORTD
-#define IBM4704_DATA_PIN PIND
-#define IBM4704_DATA_DDR DDRD
-#define IBM4704_DATA_BIT 0
-
-/* Pin interrupt on rising edge of clock */
-#define IBM4704_INT_INIT() do { EICRA |= ((1<<ISC11)|(1<<ISC10)); } while (0)
-#define IBM4704_INT_ON() do { EIFR |= (1<<INTF1); EIMSK |= (1<<INT1); } while (0)
-#define IBM4704_INT_OFF() do { EIMSK &= ~(1<<INT1); } while (0)
-#define IBM4704_INT_VECT INT1_vect
-
-
-#endif
diff --git a/converter/ibm4704_usb/ibm4704.txt b/converter/ibm4704_usb/ibm4704.txt
deleted file mode 100644
index e2d42f08fd..0000000000
--- a/converter/ibm4704_usb/ibm4704.txt
+++ /dev/null
@@ -1,182 +0,0 @@
-IBM 4704 Keyboard
-=================
-IBM capacitive switch models:
- 6019273 Model 100 50-key (grid layout) http://kishy.ca/?p=894
- 6019284 Model 200 62-key Alpha(60% layout) http://kishy.ca/?p=894
- 6019303 Model 300 77-key Expanded Alpha http://deskthority.net/photos-f62/ibm-6019303-t8502.html
- 6020218 Model 400 107-key Full key http://kishy.ca/?p=894
-
-Alps switch(vintage Green) models:
- 5954339 Japanese 102-key http://deskthority.net/post87127.html#p87127
- 6112883 Japanese 102-key http://geekhack.org/index.php?topic=52888.msg1194489#msg1194489
- 6112884 Japanese 102-key http://geekhack.org/index.php?topic=50437.msg1193047#msg1193047
- 6341739 Chinese 102-key http://geekhack.org/index.php?topic=52888.msg1176566#msg1176566
-
-Resourse
---------
-The IBM 4704: lots of pictures and info
-http://kishy.dyndns.org/?p=648#more-648
-
-Brochure:
-http://ed-thelen.org/comp-hist/IBM-ProdAnn/4700.pdf
-
-
-
-IBM 4704 Keyboard Protocol
-==========================
-On powering up keyboard sends keyboard ID; A3h for 6019284(62-key), for example.
-After that the keyboard enters FC command mode and waits for parameter data from host
-so that it doesn't send any scancode until you send 'FF'(End of FC command mode).
-
- Keyboard ID
- -------------------------------
- Model 100 50-key A2h
- Model 200 62-key A3h
- Model 300 77-key A4h
- Model 400 107-key A5h
- Japanese/Chinese 102-key A6h
-
-
-Connector
----------
- Keyboard Plug from front
-
- DSUB-9
- -------------
- \ N 2 3 4 5 /
- \ N N N N /
- ---------
- 2 GND
- 3 VCC 5V
- 4 DATA
- 5 CLOCK
- N No connection/No pin.
-
-
-Keyboard to Host
-----------------
-Data bits are LSB first and Pairty is odd. Clock has around 60us high and 30us low part.
-
- ____ __ __ __ __ __ __ __ __ __ _______
- Clock \_____/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
- ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
- Data ____/ X____X____X____X____X____X____X____X____X____X________
- Start 0 1 2 3 4 5 6 7 P Stop
-
-Start bit: can be long as 300-350us.
-Inhibit: Pull Data line down to inhibit keyboard to send.
-Timing: Host reads bit while Clock is hi.(rising edge)
-Stop bit: Keyboard pulls down Data line to lo after 9th clock.
-
-
-Host to Keyboard
-----------------
-Data bits are LSB first and Pairty is odd. Clock has around 60us high and 30us low part.
-
- ____ __ __ __ __ __ __ __ __ __ ________
- Clock \______/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
- ^ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___
- Data ____|__/ X____X____X____X____X____X____X____X____X____X \___
- | Start 0 1 2 3 4 5 6 7 P Stop
- Request by host
-
-Start bit: can be long as 300-350us.
-Request: Host pulls Clock line down to request to send a command.
-Timing: After Request keyboard pull up Data and down Clock line to low for start bit.
- After request host release Clock line once Data line becomes hi.
- Host wirtes a bit while Clock is hi and Keyboard reads while low.
-Stop bit: Host releases or pulls up Data line to hi after 9th clock and waits for keybaord pull down the line to lo.
-
-
-Scancodes
----------
-Keyboard doesn't send Break code for all keys except for Alt by default.
-
- 6019284 62-key:
- ,-----------------------------------------------------------.
- | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|???|BS |
- |-----------------------------------------------------------|
- |Tab | Q| W| E| R| T| Y| U| I| O| P| ¢| \| PD2|
- |-----------------------------------------------------------|
- |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| {}| PD3|
- |-----------------------------------------------------------|
- |Shif| <>| Z| X| C| V| B| N| M| ,| ,| /|???|Shift |
- |-----------------------------------------------------------|
- |Reset|blk|Alt | Space |Alt |blk|Enter|
- `-----------------------------------------------------------'
- +----------+---------------------+----------+----------+
- |` 00|PD1 04|Caps 20|LShift 30|Reset 31|
- |1 18|q 05|a 21|<> 3E|Rblank 41|
- |2 19|w 06|s 22|z 32|Alt 3F|
- |3 1A|e 13|d 23|x 33|Space 40|
- |4 10|r 14|f 24|c 34|Alt 3F|
- |5 11|t 15|g 25|v 35|Lblank 42|
- |6 12|y 16|h 26|b 36|Enter 2F|
- |7 08|u 17|j 27|n 37| |
- |8 09|i 01|k 28|m 38| |
- |9 0A|o 02|l 29|, 39| |
- |0 0F|p 03|; 2A|. 3A| |
- |- 1F|¢ 1B|' 2B|/ 3B| |
- |= 0D|\ 1C|{} 2C|??? 3C| |
- |??? 0C|PD2 1D|PD3 2D|RShift 3D| |
- |BS 0E| | | | |
- +----------+---------------------+----------+----------+
- Bit7 is 'press flag' which set 1 on press and 0 on release when break code is enabled.
-
-NOTE: When break code is enabled the key sends scancode with setting 7th bit on press
-and without it on release. That is, '`' sends 80h on press and 00h on release.
-
-
-Keyboard command
-----------------
-Keyboard accepts these commands from host.
-
- Description Entry point
- -----------------------------------------------------------
- FF Soft Reset 0008h
- FE Resend 00e8h
- FD Buzzer(emits a short beep) 00edh
- FC Set Key Flag 00f6h
- FB Soft Reset 0008h
- FA Reset 0000h
-
-
-Keyboard response
------------------
-Keyobard sends these bytes to host.
-
- Description Entry point
- -----------------------------------------------------------
- FE Overflow(key event/receive data) 00c5h, 0346h
- Memory test error 0224h
- FD Command out of bound 00d8h
- Key out of bound
- 7E Read/Parity error in receive from host 00bch
-
-
-Set Key Flag command(FC)
-------------------------
-After 'Power on Reset' firmware enters this command mode and waits for data from host,
-so that you don't need to send 'FC' and it doesn't send any scancode until you send 'FF'.
-
-Data sent from host:
-
- bit: 7 6 ... 0
- en | |
- | `-----`--- scan code
- `------------- enable bit(0: enable repeat, 1: enable break)
-
- 00-79 Enable repeat
- 80-F9 Enable break(FA-FF are used as other commands, see above.)
- FE Resend(011ah) no need to use
- FF End(0114h) exits FC command mode.
-
-Response from keyboard:
- FD Out of bound - Invalid scancode
- -- OK - No response means that command is accepted.
-
-Examples:
- To enable break code of all keys.
-
- FC 80 81 ... F7 FF
-
diff --git a/converter/ibm4704_usb/keymap_50key.c b/converter/ibm4704_usb/keymap_50key.c
deleted file mode 100644
index 97294fb45d..0000000000
--- a/converter/ibm4704_usb/keymap_50key.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- KEYMAP_50(
- F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, \
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, \
- Q, W, E, R, T, Y, U, I, O, P, \
- A, S, D, F, G, H, J, K, L, SCLN, \
- Z, X, C, V, B, N, M, COMM,DOT, SLSH \
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-
diff --git a/converter/ibm4704_usb/keymap_alps102key.c b/converter/ibm4704_usb/keymap_alps102key.c
deleted file mode 100644
index f3dda718ac..0000000000
--- a/converter/ibm4704_usb/keymap_alps102key.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Layer 0:
- * ,---------------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|BS |BS |F21| |PSC|SLK|PAU| |F1 |F2 |F3 |F4 |
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|F22| |Ins|Hom|PgU| |F5 |F6 |F7 |F8 |
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ret|Ret |F23| |Del|End|PgD| |F9 |F10|F11|F12|
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shf|Shift |F24| | |Up | | |F13|F14|F15|F16|
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Fn0 |Gui|Alt | Space |Alt* |Gui|Fn0 | |Lef|Dow|Rig| |F17|F18|F19|F20|
- * `---------------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_ALPS102(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC,BSPC,F21, PSCR,SLCK,PAUS, F1, F2, F3, F4, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, F22, INS, HOME,PGUP, F5, F6, F7, F8, \
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,GRV, ENT, F23, DEL, END, PGDN, F9, F10, F11, F12, \
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,RSFT, F24, NO, UP, NO, F13, F14, F15, F16, \
- FN0, LGUI,LALT, SPC, RALT,RGUI, FN0, LEFT,DOWN,RGHT, F17, F18, F19, F20 \
- ),
-
- /* Layer 1:
- * ,---------------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|BS |BS |F21| |VoD|VoU|Mut| |F1 |F2 |F3 |F4 |
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|F22| |Ins|Hom|PgU| |F5 |F6 |F7 |F8 |
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ret|Ret |F23| |Del|End|PgD| |F9 |F10|F11|F12|
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shf|Shift |F24| | |PgU| | |F13|F14|F15|F16|
- * |---------------------------------------------------------------| |-----------| |---------------|
- * |Fn0 |Gui|Alt | Space |Alt* |Gui|Fn0 | |Hom|PgD|End| |F17|F18|F19|F20|
- * `---------------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_ALPS102(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, VOLD,VOLU,MUTE, 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,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,PGUP,TRNS, TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS, HOME,PGDN,END, TRNS,TRNS,TRNS,TRNS \
- ),
-};
-
-const uint16_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
index 55a13793cb..0000000000
--- a/converter/ibm4704_usb/keymap_common.c
+++ /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)]) };
-}
diff --git a/converter/ibm4704_usb/keymap_common.h b/converter/ibm4704_usb/keymap_common.h
deleted file mode 100644
index 9cb23b0b83..0000000000
--- a/converter/ibm4704_usb/keymap_common.h
+++ /dev/null
@@ -1,146 +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/>.
-*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "report.h"
-#include "print.h"
-#include "debug.h"
-#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, \
- K56,K66, K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, K6D,K6E,K6F, K4B,K4C,K4D,K4E, \
- K71,K77, K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, K70,K65,K72, K50,K51,K52,K53, \
- K44,K45, K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, K74,K75,K76, K5E,K58,K59,K5A, \
- K54,K55, K31,K41,K3F, K40, K42,K2F, K78,K67,K79, K5B,K5C,K5D,K57 \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_NO }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_NO, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_NO, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_NO, KC_NO, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_NO, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
-}
-
-/* 77-key */
-#define KEYMAP_77( \
- K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, K6A,K6B,K6C, \
- K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, K6D,K6E,K6F, \
- K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, K70,K65,K72, \
- K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, K74,K75,K76, \
- K31,K41,K3F, K40, K42,K2F, K78,K67,K79 \
-) KEYMAP( \
- F1, F2, K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, K6A,K6B,K6C, NLCK,PSLS,PAST,PMNS, \
- F3, F4, K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, K6D,K6E,K6F, P7, P8, P9, PPLS, \
- F5, F6, K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, K70,K65,K72, P4, P5, P6, PPLS, \
- F7, F8, K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, K74,K75,K76, P1, P2, P3, PENT, \
- F9, F10, K31,K41,K3F, K40, K42,K2F, K78,K67,K79 P0, P0, PDOT,PENT \
-)
-
-/* 62-key */
-#define KEYMAP_62( \
- K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, \
- K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, \
- K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, \
- K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, \
- K31,K41,K3F, K40, K42,K2F \
-) KEYMAP( \
- F1, F2, K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, \
- F3, F4, K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, DEL, END, PGDN, P7, P8, P9, PPLS, \
- F5, F6, K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, PSCR,SLCK,PAUS, P4, P5, P6, PPLS, \
- F7, F8, K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, F11, UP, F12, P1, P2, P3, PENT, \
- F9, F10, K31,K41,K3F, K40, K42,K2F, LEFT,DOWN,RGHT, P0, P0, PDOT,PENT \
-)
-
-/* 50-key */
-#define KEYMAP_50( \
- K00,K01,K02, K03,K04,K05, K20,K21,K22,K23, \
- K08,K09,K0A, K0B,K0C,K0D, K28,K29,K2A,K35, \
- K10,K11,K12, K13,K14,K15, K30,K31,K32,K36, \
- K18,K19,K1A, K1B,K1C,K1D, K38,K39,K3A,K37, \
- K16,K1E,K0E, K0F,K1F,K17, K33,K3B,K2B,K3F \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_NO, KC_NO, }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_NO, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_NO, KC_NO, KC_NO, KC_##K3F }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, } \
-}
-
-/* Alps 102-key */
-#define KEYMAP_ALPS102( \
- K00, K0F, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K44, K45, K46, K43, K41, K42, K4A, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K54, K55, K56, K50, K51, K52, K5A, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K64, K65, K66, K60, K61, K62, K6B, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K74, K75, K76, K70, K71, K72, K7B, \
- K31, K47, K3F, K40, K4F, K48, K2F, K77, K67, K57, K73, K63, K53, K4E \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_NO, }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_NO, KC_##K4A, KC_NO, KC_NO, KC_NO, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_NO, KC_NO, KC_##K5A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_NO, KC_NO, KC_NO, KC_##K6B, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_NO, KC_NO, KC_NO, KC_##K7B, KC_NO, KC_NO, KC_NO, KC_NO, } \
-}
-
-
-#endif
diff --git a/converter/ibm4704_usb/keymap_hasu.c b/converter/ibm4704_usb/keymap_hasu.c
deleted file mode 100644
index 14c171179c..0000000000
--- a/converter/ibm4704_usb/keymap_hasu.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: default
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|???|BS |
- * |-----------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- * |-----------------------------------------------------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|xxx|Ret |
- * |-----------------------------------------------------------|
- * |Shif|xxx| Z| X| C| V| B| N| M| ,| ,| /|xxx|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui|Alt | Space |Alt |Gui|Ctrl |
- * `-----------------------------------------------------------'
- */
- KEYMAP_62(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
- LCTL,A, S, D, F, G, H, J, K, L, FN1, QUOT,NO, ENT, \
- LSFT,NO, Z, X, C, V, B, N, M, COMM,DOT, FN2, NO, FN0, \
- LCTL,LGUI,LALT, FN3, RGUI,RCTL \
- ),
-
- KEYMAP_62(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, BSPC, \
- LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,NO, ENT, \
- LSFT,NO, NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,NO, TRNS, \
- LCTL,LGUI,LALT, SPC, RGUI,RCTL \
- ),
-
- KEYMAP_62(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,WSTP,WBAK,WFWD,BSPC, \
- LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,NO, NO, ENT, \
- LSFT,NO, NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, NO, RSFT,\
- LCTL,LGUI,LALT, BTN1, RGUI,RCTL \
- ),
-
- KEYMAP_62(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \
- LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, NO, ENT, \
- LSFT,NO, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS,NO, RSFT, \
- LCTL,LGUI,LALT, SPC, RGUI,RCTL \
- ),
-
- KEYMAP_62(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- TAB, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN4, \
- LCTL,VOLD,VOLU,MUTE,NO, NO, BTN2,MS_L,MS_D,MS_R,BTN1,NO, NO, ENT, \
- LSFT,NO, NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, NO, NO, \
- LCTL,LGUI,LALT, TRNS, RGUI,RCTL \
- ),
-};
-
-enum macro_id {
- ALT_TAB,
-};
-
-const uint16_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),
- [3] = ACTION_LAYER_TAP_KEY(4, KC_SPC),
- [4] = ACTION_MACRO(ALT_TAB),
-};
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- keyevent_t event = record->event;
-
- switch (id) {
- case ALT_TAB:
- return (event.pressed ?
- MACRO( D(LALT), D(TAB), END ) :
- MACRO( U(TAB), END ));
- }
- return MACRO_NONE;
-}
diff --git a/converter/ibm4704_usb/keymap_plain.c b/converter/ibm4704_usb/keymap_plain.c
deleted file mode 100644
index 4aed684e4c..0000000000
--- a/converter/ibm4704_usb/keymap_plain.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: default
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|???|BS |
- * |-----------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- * |-----------------------------------------------------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ret|Ret |
- * |-----------------------------------------------------------|
- * |Shif|Shf| Z| X| C| V| B| N| M| ,| ,| /|???|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui|Alt | Space |Alt* |Gui|Fn |
- * `-----------------------------------------------------------'
- */
- KEYMAP(
- F1, F2, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NO, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, \
- F3, F4, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, \
- F5, F6, LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, ENT, PSCR,SLCK,PAUS, P4, P5, P6, PPLS, \
- F7, F8, LSFT,LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,NO, RSFT, F11, UP, F12, P1, P2, P3, PENT, \
- F9, F10, LCTL,LGUI,LALT, SPC, RGUI,FN0, LEFT,DOWN,RGHT, P0, P0, PDOT,PENT \
- ),
-
- /* 1: HHKB
- * ,-----------------------------------------------------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|???|Del|
- * |-----------------------------------------------------------|
- * |Caps | | | | | | | |Psc|Slk|Pau| Up| | Ins|
- * |-----------------------------------------------------------|
- * |Ctrl |VoD|VoU|VoM| | | *| /|Hom|PgU|Lef|Rig|Ret|Ret |
- * |-----------------------------------------------------------|
- * |Shif|Shi| | | | | | +| -|End|PgD|Dow|???|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui|Alt | Space |Alt* |Gui|Fn |
- * `-----------------------------------------------------------'
- */
- KEYMAP(
- F1, F2, ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, NO, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, \
- F3, F4, CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, INS, DEL, END, PGDN, P7, P8, P9, PPLS, \
- F5, F6, TRNS,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, ENT, PSCR,SLCK,PAUS, P4, P5, P6, PPLS, \
- F7, F8, TRNS,TRNS,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,NO, TRNS, F11, UP, F12, P1, P2, P3, PENT, \
- F9, F10, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, LEFT,DOWN,RGHT, P0, P0, PDOT,PENT \
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1),
-};
diff --git a/converter/ibm4704_usb/led.c b/converter/ibm4704_usb/led.c
deleted file mode 100644
index f76545f0ba..0000000000
--- a/converter/ibm4704_usb/led.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2011 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 "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
-}
diff --git a/converter/ibm4704_usb/matrix.c b/converter/ibm4704_usb/matrix.c
deleted file mode 100644
index 5b91d49f81..0000000000
--- a/converter/ibm4704_usb/matrix.c
+++ /dev/null
@@ -1,162 +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 <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "action.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "ibm4704.h"
-#include "matrix.h"
-
-
-static void matrix_make(uint8_t code);
-static void matrix_break(uint8_t code);
-static void matrix_clear(void);
-
-
-/*
- * Matrix Array usage:
- * IBM 4704 scan codes are assigned into 128(16x8)-cell matrix.
- *
- * 8bit wide
- * +---------+
- * 0| |
- * :| XX | 00-7F
- * f| |
- * +---------+
- *
- * Exceptions:
- */
-static uint8_t matrix[MATRIX_ROWS];
-
-// scan code bits 7654 3210
-// R:row/C:column -RRR RCCC
-#define ROW(code) ((code>>3)&0x0f)
-#define COL(code) (code&0x07)
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-static void enable_break(void)
-{
- print("Enable break: ");
- while (ibm4704_send(0xFC)) { _delay_ms(10); }
- // valid scancode: 00-79h
- for (uint8_t code = 0; code < 0x7F; code++) {
- while (ibm4704_send(0x80|code)) _delay_ms(10);
- _delay_ms(5); // wait for response
- // No response(FF) when ok, FD when out of bound
- xprintf("s%02X:r%02X ", code, ibm4704_recv());
- }
- while (ibm4704_send(0xFF)) { _delay_ms(10); } // End
- print("End\n");
-}
-
-
-void matrix_setup(void)
-{
- ibm4704_init();
-}
-
-void matrix_init(void)
-{
- debug_enable = true;
-
- print("IBM 4704 converter\n");
- matrix_clear();
- _delay_ms(2000); // wait for keyboard starting up
- xprintf("Keyboard ID: %02X\n", ibm4704_recv());
- enable_break();
-}
-
-/*
- * IBM 4704 Scan Code
- */
-uint8_t matrix_scan(void)
-{
- uint8_t code = ibm4704_recv();
- if (code==0xFF) {
- // Not receivd
- return 0;
- } else if ((code&0x7F) >= 0x7A) {
- // 0xFF-FA and 0x7F-7A is not scancode
- xprintf("Error: %02X\n", code);
- matrix_clear();
- return 0;
- } else if (code&0x80) {
- dprintf("%02X\n", code);
- matrix_make(code);
- } else {
- dprintf("%02X\n", code);
- matrix_break(code);
- }
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- xprintf("%02X: %08b\n", row, bitrev(matrix_get_row(row)));
- }
-}
-
-
-
-inline
-static void matrix_make(uint8_t code)
-{
- matrix[ROW(code)] |= 1<<COL(code);
-}
-
-inline
-static void matrix_break(uint8_t code)
-{
- matrix[ROW(code)] &= ~(1<<COL(code));
-}
-
-inline
-static void matrix_clear(void)
-{
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-}
diff --git a/converter/m0110_usb/Makefile b/converter/m0110_usb/Makefile
deleted file mode 100644
index e836456326..0000000000
--- a/converter/m0110_usb/Makefile
+++ /dev/null
@@ -1,96 +0,0 @@
-# Target file name (without extension).
-TARGET = m0110_lufa
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-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
-ifdef KEYMAP
- SRC += keymap_$(KEYMAP).c
-else
- SRC += keymap_default.c
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-MCU = atmega32u2 # TMK converter rev2
-#MCU = atmega32u4 # TMK converter rev1
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-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 - not yet supported in LUFA
-#KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
-
-
-
-#---------------- Programming Options --------------------------
-PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-
-
-# 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
diff --git a/converter/m0110_usb/Makefile.teensy b/converter/m0110_usb/Makefile.teensy
deleted file mode 100644
index 394b660508..0000000000
--- a/converter/m0110_usb/Makefile.teensy
+++ /dev/null
@@ -1,98 +0,0 @@
-# Target file name (without extension).
-TARGET = m0110_lufa
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-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
-ifdef KEYMAP
- SRC += keymap_$(KEYMAP).c
-else
- SRC += keymap_default.c
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-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 - not yet supported in LUFA
-#KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
-
-
-
-#---------------- Programming Options --------------------------
-PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-
-
-# 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
diff --git a/converter/m0110_usb/Makefile.tmk_rev1 b/converter/m0110_usb/Makefile.tmk_rev1
deleted file mode 100644
index f36fcc4b5d..0000000000
--- a/converter/m0110_usb/Makefile.tmk_rev1
+++ /dev/null
@@ -1,96 +0,0 @@
-# Target file name (without extension).
-TARGET = m0110_lufa
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-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
-ifdef KEYMAP
- SRC += keymap_$(KEYMAP).c
-else
- SRC += keymap_default.c
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = atmega32u2 # TMK converter rev2
-MCU = atmega32u4 # TMK converter rev1
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-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 - not yet supported in LUFA
-#KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
-
-
-
-#---------------- Programming Options --------------------------
-PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-
-
-# 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
diff --git a/converter/m0110_usb/Makefile.tmk_rev2 b/converter/m0110_usb/Makefile.tmk_rev2
deleted file mode 100644
index e836456326..0000000000
--- a/converter/m0110_usb/Makefile.tmk_rev2
+++ /dev/null
@@ -1,96 +0,0 @@
-# Target file name (without extension).
-TARGET = m0110_lufa
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-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
-ifdef KEYMAP
- SRC += keymap_$(KEYMAP).c
-else
- SRC += keymap_default.c
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-MCU = atmega32u2 # TMK converter rev2
-#MCU = atmega32u4 # TMK converter rev1
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-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 - not yet supported in LUFA
-#KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
-
-
-
-#---------------- Programming Options --------------------------
-PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-
-
-# 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
diff --git a/converter/m0110_usb/README.md b/converter/m0110_usb/README.md
deleted file mode 100644
index bfd3261df5..0000000000
--- a/converter/m0110_usb/README.md
+++ /dev/null
@@ -1,79 +0,0 @@
-M0110/M0110A to USB keyboard converter
-======================================
-This firmware converts the protocol of Apple Macintosh keyboard **M0110**, **M0110A** and **M0120** into USB. Target of this project is USB AVR controller like **ATmega32U2** and **ATmega32U4**. Using this converter you can revive these retro keyboards with modern computer.
-
-Read README of top directory too.
-
-Pictures of **M0110 + M0120** and **M0110A**.
-
-![M0110+M0120](http://i.imgur.com/dyvXb2Tm.jpg)
-![M0110A](http://i.imgur.com/HuHOEoHm.jpg)
-
-
-- M0110A support was contributed by [skagon@github](https://github.com/skagon).
-- M0120 also is supported. keys(+ * / and ,) on M0120 are recognized as cursor keys.
-
-
-
-Update
-------
-- 2013/08: Change port for signals `PF` to `PD`
-- 2013/09: Change port again, it uses inversely `PD0` for data and `PD1` for clock line now.
-- 2014/06: Change keymaps
-- 2015/03: Add support for "International"(ISO) keyboard(keymap_intl.c)
-
-
-
-Building Hardware
------------------
-You need [TMK converter] or AVR dev board like PJRC [Teensy]. Port of the MCU `PD1` is assigned to `CLOCK` line and `PD0` to `DATA` by default, you can change pin configuration with editing `config.h`.
-
-[![M0110 Converter](http://i.imgur.com/4G2ZOegm.jpg)](http://i.imgur.com/4G2ZOeg.jpg)
-
-### 4P4C phone handset cable
-Note that original cable used with Mac is **straight** while phone handset cable is **crossover**.
-
-<http://en.wikipedia.org/wiki/Modular_connector#4P4C>
-
-Close-up picture of handset cable. You can see one end of plug has reverse color codes against the other. Click to enlarge.
-[![4P4C cable](http://i.imgur.com/3S9P1mYm.jpg?1)](http://i.imgur.com/3S9P1mY.jpg?1)
-
-[Teensy]: http://www.pjrc.com/teensy/
-[TMK converter]: https://github.com/tmk/keyboard_converter
-
-
-### Socket Pinout
-- <http://pinouts.ru/Inputs/MacKeyboard_pinout.shtml>
-
-![Jack fig](http://www.kbdbabel.org/conn/kbd_connector_macplus.png)
-
-
-### Pull-up Resistor
-You may need pull-up resistors on signal lines(`CLOCK`, `DATA`) in particular when you have long or coiled cable. **1k-10k Ohm** will be OK for this purpose. In that case the converter may not read signal from keyboard correctly without pull-up resistors.
-
-
-
-Building Firmware
------------------
-To compile firmware you need AVR GCC. You can edit *Makefile* and *config.h* to change compile options and pin configuration. Also `KEYMAP` option can be used to select keymap.
-
- $ git clone git://github.com/tmk/tmk_keyboard.git (or download source)
- $ cd m0110_usb
- $ make -f Makefile.rev2 clean
- $ make -f Makefile.rev2 [KEYMAP={default|intl|spacefn|hasu}]
-
-Use `Maefile.tmk_rev1` for TMK converter Rev.1, `Makefile.teensy` for Teensy instead.
-
-
-
-Keymap
-------
-To create your own keymap copy existent keymap file to `keymap_name.c` and edit it.
-
-
-
-Debug
------
-You can use [PJRC HID listen](http://www.pjrc.com/teensy/hid_listen.html) to see debug output. The converter has some functions for debug, press `<Magic>+H` simultaneously to get help.
-
-- Magic combo: `Shift+Option+⌘` or `Shift+Option+Ctrl`(`Shift+Alt+Gui` or `Shift+Alt+Control`)
diff --git a/converter/m0110_usb/config.h b/converter/m0110_usb/config.h
deleted file mode 100644
index 801bc4ebfa..0000000000
--- a/converter/m0110_usb/config.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Copyright 2011,2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0110
-#define DEVICE_VER 0x0101
-#define MANUFACTURER t.m.k.
-#define PRODUCT M0110 keyboard converter
-#define DESCRIPTION convert M0110 keyboard to USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 14
-#define MATRIX_COLS 8
-
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-
-/* magic key */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LGUI)) || \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT) | MOD_BIT(KC_LCTL)) \
-)
-
-/* boot magic key */
-#define BOOTMAGIC_KEY_SALT KC_FN0
-#define BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL KC_LCAP
-
-
-/* ports */
-#define M0110_CLOCK_PORT PORTD
-#define M0110_CLOCK_PIN PIND
-#define M0110_CLOCK_DDR DDRD
-#define M0110_CLOCK_BIT 1
-#define M0110_DATA_PORT PORTD
-#define M0110_DATA_PIN PIND
-#define M0110_DATA_DDR DDRD
-#define M0110_DATA_BIT 0
-
-#endif
diff --git a/converter/m0110_usb/keymap_common.c b/converter/m0110_usb/keymap_common.c
deleted file mode 100644
index 4ac2d71783..0000000000
--- a/converter/m0110_usb/keymap_common.c
+++ /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;
-}
diff --git a/converter/m0110_usb/keymap_common.h b/converter/m0110_usb/keymap_common.h
deleted file mode 100644
index 925556d977..0000000000
--- a/converter/m0110_usb/keymap_common.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-Copyright 2011,2012,2014,2015 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 "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
- * does not exist on the M0110A.
- *
- * ,---------------------------------------------------------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| =| /| *|
- * |---------------------------------------------------------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
- * |-----------------------------------------------------' | |---------------|
- * |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
- * |---------------------------------------------------------| |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
- * |---------------------------------------------------------| |-----------|Ent|
- * |Opt |Mac | Space |Ent| \|Lft|Rgt|Dn | | 0| .| |
- * `---------------------------------------------------------' `---------------'
- *
- * M0110A scan codes
- * ,---------------------------------------------------------. ,---------------.
- * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18| 33| | 47| 68| 6D| 62|
- * |---------------------------------------------------------| |---------------|
- * | 30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| | | 59| 5B| 5C| 4E|
- * |-----------------------------------------------------' | |---------------|
- * | 39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24| | 56| 57| 58| 66|
- * |---------------------------------------------------------| |---------------|
- * | 38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 38| 4D| | 53| 54| 55| |
- * `---------------------------------------------------------' |-----------| 4C|
- * | 3A| 37| 31 | 2A| 46| 42| 48| | 52| 41| |
- * `---------------------------------------------------------' `---------------'
- *
- * M0110 + M0120 scan codes
- * ,---------------------------------------------------------. ,---------------.
- * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18| 33| | 47| 68| 6D| 62|
- * |---------------------------------------------------------| |---------------|
- * | 30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A| | 59| 5B| 5C| 4E|
- * |---------------------------------------------------------| |---------------|
- * | 39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24| | 56| 57| 58| 66|
- * |---------------------------------------------------------| |---------------|
- * | 38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 38| | 53| 54| 55| |
- * `---------------------------------------------------------' |-----------| 4C|
- * | 3A| 37| 31 | 34| 3A| | 52| 41| |
- * `------------------------------------------------' `---------------'
- * Two right and left keys of 38 and 3A are identical, you cannot discriminate those two.
- */
-#define KEYMAP( \
- K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K68,K6D,K62, \
- K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K4E, \
- K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K66, \
- K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K4D, K53,K54,K55,K4C, \
- K3A,K37, K31, K34,K2A,K46,K42,K48, K52, K41 \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_NO, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO, KC_NO, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_NO, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_NO, KC_NO, KC_NO, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
- { KC_NO, KC_NO, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_##K62, KC_NO, KC_NO, KC_NO, KC_##K66, KC_NO }, \
- { KC_##K68, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K6D, KC_NO, KC_NO }, \
-}
-
-/* International keyboard layout for M0110 + M0120
- * https://en.wikipedia.org/wiki/File:Apple_Macintosh_Plus_Keyboard.jpg
- * Probably International keyboard layout of M0110A doesn't exist.
- *
- * M0110 + M0120 scan codes
- * ,---------------------------------------------------------. ,---------------.
- * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18| 33| | 47| 68| 6D| 62|
- * |---------------------------------------------------------| |---------------|
- * | 30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A| | 59| 5B| 5C| 4E|
- * |------------------------------------------------------, | |---------------|
- * | 39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24| | | 56| 57| 58| 66|
- * |---------------------------------------------------------| |---------------|
- * | 38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 0A| 38| | 53| 54| 55| |
- * `---------------------------------------------------------' |-----------| 4C|
- * | 3A| 37| 34 | 31| 3A| | 52| 41| |
- * `------------------------------------------------' `---------------'
- * Two right and left keys of 38 and 3A are identical, you cannot discriminate those two.
- */
-#define KEYMAP_INTL( \
- K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K68,K6D,K62, \
- K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K59,K5B,K5C,K4E, \
- K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,K24, K56,K57,K58,K66, \
- K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,K0A, K53,K54,K55,K4C, \
- K3A,K37, K34, K31, K52, K41 \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO, KC_NO, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_##K41, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K47 }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_##K4C, KC_NO, KC_##K4E, KC_NO }, \
- { KC_NO, KC_NO, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_##K62, KC_NO, KC_NO, KC_NO, KC_##K66, KC_NO }, \
- { KC_##K68, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K6D, KC_NO, KC_NO }, \
-}
diff --git a/converter/m0110_usb/keymap_default.c b/converter/m0110_usb/keymap_default.c
deleted file mode 100644
index ff7478d1b5..0000000000
--- a/converter/m0110_usb/keymap_default.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-Copyright 2011,2012,2015 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 "keycode.h"
-#include "keymap_common.h"
-
-
-
-#ifdef KEYMAP_SECTION_ENABLE
-const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
-#else
-const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
-#endif
- /* Default:
- * M0110 M0120
- * ,---------------------------------------------------------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| =| /| *|
- * |---------------------------------------------------------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| -|
- * |---------------------------------------------------------| |---------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
- * |---------------------------------------------------------| |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| |
- * `---------------------------------------------------------' |-----------|Ent|
- * |Opt|Mac | Space |Fn |Opt| | 0| .| |
- * `-----------------------------------------------' `---------------'
- * M0110A
- * ,---------------------------------------------------------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| =| /| *|
- * |---------------------------------------------------------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
- * |-----------------------------------------------------' | |---------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
- * |---------------------------------------------------------| |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
- * |---------------------------------------------------------| |-----------|Ent|
- * |Opt |Mac | Space | \|Lft|Rgt|Dn | | 0| .| |
- * `---------------------------------------------------------' `---------------'
- */
- [0] = KEYMAP(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,EQL, PSLS,PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, UP, P1, P2, P3, PENT,
- LALT,LGUI, SPC, FN0, FN13,LEFT,RGHT,DOWN, P0, PDOT
- ),
- /* Cursor Layer:
- * M0110 M0120
- * ,---------------------------------------------------------. ,---------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *|
- * |---------------------------------------------------------| |---------------|
- * |Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |INS| | | 7| 8| 9| -|
- * |---------------------------------------------------------| |---------------|
- * |Ctrl |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Return| | 4| 5| 6| +|
- * |---------------------------------------------------------| |---------------|
- * |Shift |End| |PgD| | | | |End|PgD|Dow|Shift | | 1| 2| 3| |
- * `---------------------------------------------------------' |-----------|Ent|
- * |Opt|Mac | Space |Fn |Opt| | 0| .| |
- * `-----------------------------------------------' `---------------'
- * M0110A
- * ,---------------------------------------------------------. ,---------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *|
- * |---------------------------------------------------------| |---------------|
- * |Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |INS| | | 7| 8| 9| -|
- * |-----------------------------------------------------' | |---------------|
- * |Ctrl |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Return| | 4| 5| 6| +|
- * |---------------------------------------------------------| |---------------|
- * |Shift |End| |PgD| | | | |End|PgD|Dow|Shft|PgU| | 1| 2| 3| |
- * |---------------------------------------------------------| |-----------|Ent|
- * |Opt |Mac | Space | \|Hom|End|PgD| | 0| .| |
- * `---------------------------------------------------------' `---------------'
- */
- [1] = KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
- CAPS,HOME,UP, PGUP,NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, INS, P7, P8, P9, PMNS,
- LCTL,LEFT,DOWN,RGHT,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, ENT, P4, P5, P6, PPLS,
- LSFT,END, NO, PGDN,NO, NO, NO, NO, END, PGDN,DOWN, PGUP, P1, P2, P3, PENT,
- LALT,LGUI, SPC, FN0, FN13,HOME,END, PGDN, P0, PDOT
- ),
-};
-
-
-/*
- * Fn action definition
- */
-#ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
-#else
-const uint16_t fn_actions[] PROGMEM = {
-#endif
- [0] = ACTION_LAYER_MOMENTARY(1),
- [1] = ACTION_LAYER_MOMENTARY(2),
- [2] = ACTION_LAYER_MOMENTARY(3),
- [3] = ACTION_LAYER_MOMENTARY(4),
- [4] = ACTION_LAYER_MOMENTARY(5),
- [5] = ACTION_LAYER_MOMENTARY(6),
- [6] = ACTION_LAYER_MOMENTARY(7),
- [7] = ACTION_LAYER_TOGGLE(1),
- [8] = ACTION_LAYER_TOGGLE(2),
- [9] = ACTION_LAYER_TOGGLE(3),
- [10] = ACTION_LAYER_TAP_TOGGLE(1),
- [11] = ACTION_LAYER_TAP_TOGGLE(2),
- [12] = ACTION_LAYER_TAP_TOGGLE(3),
- [13] = ACTION_LAYER_TAP_KEY(1, KC_BSLASH),
- [14] = ACTION_LAYER_TAP_KEY(2, KC_TAB),
- [15] = ACTION_LAYER_TAP_KEY(3, KC_ENTER),
- [16] = ACTION_LAYER_TAP_KEY(4, KC_SPACE),
- [17] = ACTION_LAYER_TAP_KEY(5, KC_SCOLON),
- [18] = ACTION_LAYER_TAP_KEY(6, KC_QUOTE),
- [19] = ACTION_LAYER_TAP_KEY(7, KC_SLASH),
- [20] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_SPACE),
- [21] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_SPACE),
- [22] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_QUOTE),
- [23] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENTER),
- [24] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC),
- [25] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPACE),
- [26] = ACTION_MODS_ONESHOT(MOD_LCTL),
- [27] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),
- [28] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_BSPACE),
- [29] = ACTION_MODS_ONESHOT(MOD_LSFT),
- [30] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRAVE),
- [31] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_BSLASH),
-};
diff --git a/converter/m0110_usb/keymap_hasu.c b/converter/m0110_usb/keymap_hasu.c
deleted file mode 100644
index 11f1a4f394..0000000000
--- a/converter/m0110_usb/keymap_hasu.c
+++ /dev/null
@@ -1,87 +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 <stdint.h>
-#include "keycode.h"
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Default:
- * M0110
- * ,---------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs|
- * |---------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- * |---------------------------------------------------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| Fn| '|Return|
- * |---------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| Fn|Shift |
- * `---------------------------------------------------------'
- * |Fn |alt | Fn |Gui |Fn |
- * `-----------------------------------------------'
- */
- [0] = KEYMAP(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,EQL, PSLS,PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
- LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, UP, P1, P2, P3, PENT,
- FN0, LALT, FN2, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
- ),
- // IJKL cursor
- [1] = KEYMAP(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
- CAPS,NO, NO, NO, NO, NO, HOME,PGDN,UP, PGUP,END, NO, NO, P7, P8, P9, PMNS,
- LCTL,VOLD,VOLU,MUTE,NO, NO, HOME,LEFT,DOWN,RGHT,END, NO, ENT, P4, P5, P6, PPLS,
- LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, PGUP, P1, P2, P3, PENT,
- TRNS,LALT, SPC, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
- ),
- // HJKL cursor
- [2] = KEYMAP(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
- CAPS,NO, NO, NO, NO, NO, HOME,PGDN,UP, PGUP,END, NO, NO, P7, P8, P9, PMNS,
- LCTL,VOLD,VOLU,MUTE,NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
- LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS, PGUP, P1, P2, P3, PENT,
- TRNS,LALT, SPC, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
- ),
- // Mousekey
- [3] = KEYMAP(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
- CAPS,Q, W, E, R, T, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD, P7, P8, P9, PMNS,
- LCTL,VOLD,VOLU,MUTE,NO, NO, BTN2,MS_L,MS_D,MS_R,BTN1,NO, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, BTN2,BTN1,BTN4,BTN5,NO, PGUP, P1, P2, P3, PENT,
- NO, LALT, TRNS, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
- ),
- // Mousekey
- [4] = KEYMAP(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
- CAPS,Q, W, E, R, T, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD, P7, P8, P9, PMNS,
- LCTL,VOLD,VOLU,MUTE,NO, NO, BTN2,MS_L,MS_D,MS_R,TRNS,NO, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, BTN2,BTN1,BTN4,BTN5,NO, PGUP, P1, P2, P3, PENT,
- NO, LALT, BTN1, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
- ),
-};
-
-
-/*
- * Fn action definition
- */
-const uint16_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),
- [3] = ACTION_LAYER_TAP_KEY(4, KC_SCOLON),
-};
diff --git a/converter/m0110_usb/keymap_intl.c b/converter/m0110_usb/keymap_intl.c
deleted file mode 100644
index 6cc251a289..0000000000
--- a/converter/m0110_usb/keymap_intl.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Copyright 2015 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 "keycode.h"
-#include "keymap_common.h"
-
-
-
-const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
- /* International keyboard
- * M0110 M0120
- * ,---------------------------------------------------------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| -| +| *|
- * |---------------------------------------------------------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Ret| | 7| 8| 9| /|
- * |------------------------------------------------------, | |---------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| \| | | 4| 5| 6| ,|
- * |---------------------------------------------------------| |---------------|
- * |Shif| <| Z| X| C| V| B| N| M| ,| ,| /| | | 1| 2| 3| |
- * `---------------------------------------------------------' |-----------|Ent|
- * |Opt|Mac | Space |Fn | | | 0| .| |
- * `-----------------------------------------------' `---------------'
- */
- [0] = KEYMAP_INTL(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,EQL, PSLS,PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, P7, P8, P9, PMNS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,BSLS, P4, P5, P6, PPLS,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, P1, P2, P3, PENT,
- LALT,LGUI, SPC, FN0, P0, PDOT
- ),
- /* Cursor Layer
- * ,---------------------------------------------------------. ,---------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| -| +| *|
- * |---------------------------------------------------------| |---------------|
- * |Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up | |Ret| | 7| 8| 9| /|
- * |------------------------------------------------------, | |---------------|
- * |Ctrl |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Ins| | | 4| 5| 6| ,|
- * |---------------------------------------------------------| |---------------|
- * |Shif| <|End| |PgD| | | | |End|PgD|Dow| | | 1| 2| 3| |
- * `---------------------------------------------------------' |-----------|Ent|
- * |Opt|Mac | Space |Fn | | | 0| .| |
- * `-----------------------------------------------' `---------------'
- */
- [1] = KEYMAP_INTL(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
- CAPS,HOME,UP, PGUP,NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, NO, ENT, P7, P8, P9, PMNS,
- LCTL,LEFT,DOWN,RGHT,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT,INS, P4, P5, P6, PPLS,
- LSFT,NO, END, NO, PGDN,NO, NO, NO, NO, END, PGDN,DOWN, P1, P2, P3, PENT,
- LALT,LGUI, SPC, FN0, P0, PDOT
- ),
-};
-
-
-/*
- * Fn action definition
- */
-const uint16_t fn_actions[] PROGMEM = {
- [0] = ACTION_LAYER_MOMENTARY(1),
-};
diff --git a/converter/m0110_usb/keymap_spacefn.c b/converter/m0110_usb/keymap_spacefn.c
deleted file mode 100644
index 5017861a34..0000000000
--- a/converter/m0110_usb/keymap_spacefn.c
+++ /dev/null
@@ -1,71 +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 <stdint.h>
-#include "keycode.h"
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Default:
- * M0110 M0120
- * ,---------------------------------------------------------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| -| +| *|
- * |---------------------------------------------------------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| /|
- * |---------------------------------------------------------| |---------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| ,|
- * |---------------------------------------------------------| |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| |
- * `---------------------------------------------------------' |-----------|Ent|
- * |Opt|Mac | Space |Mac |Opt| | 0| .| |
- * `-----------------------------------------------' `---------------'
- * M0110A
- * ,---------------------------------------------------------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Bcksp| |Nlk| =| /| *|
- * |---------------------------------------------------------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
- * |-----------------------------------------------------' | |---------------|
- * |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
- * |---------------------------------------------------------| |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
- * |---------------------------------------------------------' |-----------|Ent|
- * |Opt |Mac | Space | \|Lft|Rgt|Dn | | 0| .| |
- * `---------------------------------------------------------' `---------------'
- */
- [0] = KEYMAP(
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,PEQL,PSLS,PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, UP, P1, P2, P3, PENT,
- LALT,LGUI, FN0, RGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
- ),
- [1] = KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
- TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS, P7, P8, P9, PMNS,
- LCTL,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, P4, P5, P6, PPLS,
- TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, PGUP, P1, P2, P3, PENT,
- TRNS,TRNS, TRNS, TRNS,INS, HOME,END, PGDN, P0, PDOT
- ),
-};
-
-/*
- * Fn action definition
- */
-const uint16_t fn_actions[] PROGMEM = {
- [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
- [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
-};
diff --git a/converter/m0110_usb/led.c b/converter/m0110_usb/led.c
deleted file mode 100644
index 3822a131b8..0000000000
--- a/converter/m0110_usb/led.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Copyright 2011 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/io.h>
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- DDRD |= (1<<6);
- PORTD |= (1<<6);
- } else {
- DDRD |= (1<<6);
- PORTD &= ~(1<<6);
- }
-}
diff --git a/converter/m0110_usb/matrix.c b/converter/m0110_usb/matrix.c
deleted file mode 100644
index 2189c0b56f..0000000000
--- a/converter/m0110_usb/matrix.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-Copyright 2011,2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "debug.h"
-#include "host.h"
-#include "led.h"
-#include "m0110.h"
-#include "matrix.h"
-
-
-#define CAPS 0x39
-#define CAPS_BREAK (CAPS | 0x80)
-#define ROW(key) ((key)>>3&0x0F)
-#define COL(key) ((key)&0x07)
-
-
-static bool is_modified = false;
-
-// matrix state buffer(1:on, 0:off)
-static uint8_t *matrix;
-static uint8_t _matrix0[MATRIX_ROWS];
-
-static void register_key(uint8_t key);
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- m0110_init();
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
- matrix = _matrix0;
- return;
-}
-
-uint8_t matrix_scan(void)
-{
- uint8_t key;
-
- is_modified = false;
- key = m0110_recv_key();
-
- if (key == M0110_NULL) {
- return 0;
- } else if (key == M0110_ERROR) {
- return 0;
- } else {
- is_modified = true;
- register_key(key);
- }
-
- if (debug_enable) {
- print("["); phex(key); print("]\n");
- }
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
-
-inline
-static void register_key(uint8_t key)
-{
- if (key&0x80) {
- matrix[ROW(key)] &= ~(1<<COL(key));
- } else {
- matrix[ROW(key)] |= (1<<COL(key));
- }
-}
diff --git a/converter/news_usb/Makefile.pjrc b/converter/news_usb/Makefile.pjrc
deleted file mode 100644
index 80cadcc730..0000000000
--- a/converter/news_usb/Makefile.pjrc
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# Makefile for PJRC Teensy
-#
-
-
-# Target file name (without extension).
-TARGET = news_usb_pjrc
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c \
- news.c
-
-CONFIG_H = config_pjrc.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 16000000
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# *Comment out* to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+5000)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover(+500)
-
-
-
-#---------------- Programming Options --------------------------
-PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-include $(TMK_DIR)/protocol/pjrc.mk
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/news_usb/config_pjrc.h b/converter/news_usb/config_pjrc.h
deleted file mode 100644
index adce014c9e..0000000000
--- a/converter/news_usb/config_pjrc.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x5021
-#define MANUFACTURER t.m.k.
-#define PRODUCT SONY NEWS keyboard converter
-#define DESCRIPTION converts SONY NEWS protocol into USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 16 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-
-/* legacy keymap support */
-#define USE_LEGACY_KEYMAP
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
- keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-/* Asynchronous USART
- * 8-data bit, non parity, 1-stop bit, no flow control
- */
-#ifdef __AVR_ATmega32U4__
-# define NEWS_KBD_RX_VECT USART1_RX_vect
-# define NEWS_KBD_RX_DATA UDR1
-# define NEWS_KBD_RX_BAUD 9600
-# define NEWS_KBD_RX_UBBR ((F_CPU/(16UL*NEWS_KBD_RX_BAUD))-1)
-# define NEWS_KBD_RX_INIT() do { \
- UBRR1L = (uint8_t) NEWS_KBD_RX_UBBR; \
- UBRR1H = (uint8_t) (NEWS_KBD_RX_UBBR>>8); \
- UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); \
- } while(0)
-#else
-# error "USART configuration is needed."
-#endif
-
-#endif
diff --git a/converter/news_usb/keymap.c b/converter/news_usb/keymap.c
deleted file mode 100644
index 058f2914bd..0000000000
--- a/converter/news_usb/keymap.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "util.h"
-#include "keymap.h"
-
-
-
-
-// Following macros help you to define a keymap with the form of actual keyboard layout.
-
-/* SONY NEWS NWP-5461 */
-#define KEYMAP( \
- K7A, K01,K02,K03,K04,K05, K06,K07,K08,K09,K0A, K68,K69, K64,K65,K52, \
- K0B,K0C,K0D,K0E,K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19, K6A, K4B,K4C,K4D,K4E, \
- K1A,K1B,K1C,K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27, K6B, K4F,K50,K51,K56, \
- K28,K29,K2A,K2B,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34, K35, K6C, K53,K54,K55,K5A, \
- K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K42, K6D, K57,K59,K58, \
- K43,K44,K45, K46, K47, K48,K49,K4A, K6E, K66,K5B,K5C,K5D \
-) { \
- { KC_NO, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_##K64, KC_##K65, KC_##K66, KC_NO }, \
- { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_##K7A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
-}
-
-
-// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
- 0, // Fn0
- 0, // Fn1
- 0, // Fn2
- 0, // Fn3
- 0, // Fn4
- 0, // Fn5
- 0, // Fn6
- 0 // Fn7
-};
-
-// 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[] = {
- KC_NO, // Fn0
- KC_NO, // Fn1
- KC_NO, // Fn2
- KC_NO, // Fn3
- KC_NO, // Fn4
- KC_NO, // Fn5
- KC_NO, // Fn6
- KC_NO // Fn7
-};
-
-
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: default
- * ,---. ,------------------------, ,------------------------. ,---------.
- * |Pow| | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10| | F11| F12| ,-----------.
- * `---' `------------------------' `------------------------' `---------' | *| /| +|
- * ,-------------------------------------------------------------. ,---. ,---------------|
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS | |Hlp| | 7| 8| 9| -|
- * |-------------------------------------------------------------| |---| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Del| | |Ins| | 4| 5| 6| ,|
- * |---------------------------------------------------------' | |---| |---------------|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `|Return| |Clr| | 1| 2| 3| |
- * |-------------------------------------------------------------| |---| |-----------|Ent|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /| |Shift | |PgU| | 0| .| Up| |
- * |-------------------------------------------------------------| |---| |---------------|
- * |Alt |Gui |Alt | Space | |Gui|App|Ctrl | |PgD| |Tab|Lef|Dow|Rig|
- * `-------------------------------------------------------------' `---' `---------------'
- */
- KEYMAP(
- PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PAST,PSLS,PPLS,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,BSPC, HELP, P7, P8, P9, PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,DEL, INS, P4, P5, P6, PCMM,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,GRV, ENT, CLR, P1, P2, P3, PENT,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RO, RSFT, PGUP, P0, PDOT,UP,
- 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]);
-}
diff --git a/converter/news_usb/led.c b/converter/news_usb/led.c
deleted file mode 100644
index 51e601318a..0000000000
--- a/converter/news_usb/led.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "stdint.h"
-#include "news.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- // not supported now
-}
diff --git a/converter/news_usb/matrix.c b/converter/news_usb/matrix.c
deleted file mode 100644
index f0d5b58633..0000000000
--- a/converter/news_usb/matrix.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "news.h"
-#include "matrix.h"
-#include "debug.h"
-
-
-/*
- * Matrix Array usage:
- *
- * ROW: 16
- * COL:8
- *
- * 8bit wide
- * +---------+
- * 0|00 ... 07|
- * 1|08 ... 0F|
- * :| ... |
- * :| ... |
- * E|70 ... 77|
- * F|78 ... 7F|
- * +---------+
- *
- */
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) ((code>>3)&0xF)
-#define COL(code) (code&0x07)
-
-static bool is_modified = false;
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- news_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- return;
-}
-
-uint8_t matrix_scan(void)
-{
- is_modified = false;
-
- uint8_t code;
- code = news_recv();
- if (code == 0) {
- return 0;
- }
-
- phex(code); print(" ");
- if (code&0x80) {
- // break code
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
- } else {
- // make code
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= (1<<COL(code));
- is_modified = true;
- }
- }
- return code;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
diff --git a/converter/next_usb/Makefile b/converter/next_usb/Makefile
deleted file mode 100644
index 7190f1eaf4..0000000000
--- a/converter/next_usb/Makefile
+++ /dev/null
@@ -1,87 +0,0 @@
-# Target file name (without extension).
-TARGET = next_usb
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c
-
-CONFIG_H = config.h
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-#MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-MCU = atmega32u2 # TMK converter
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# *Comment out* to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-#NKRO_ENABLE = yes # USB Nkey Rollover
-
-SRC += next_kbd.c
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/next_usb/Makefile.pjrc b/converter/next_usb/Makefile.pjrc
deleted file mode 100644
index 5813c9d6d2..0000000000
--- a/converter/next_usb/Makefile.pjrc
+++ /dev/null
@@ -1,63 +0,0 @@
-# Target file name (without extension).
-TARGET = next_usb
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c
-
-CONFIG_H = config.h
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 16000000
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# *Comment out* to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-#NKRO_ENABLE = yes # USB Nkey Rollover
-
-SRC += next_kbd.c
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/protocol/pjrc.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/next_usb/README b/converter/next_usb/README
deleted file mode 100644
index 07ac89de30..0000000000
--- a/converter/next_usb/README
+++ /dev/null
@@ -1,45 +0,0 @@
-NeXT non-ADB Keyboard Converter
--------------------------------
-
-Cable connector inside keyboard case:
-+-----+
-|Black|\
-|Green|-\
-|Yello|--\-------- to computer via Mini-Din 5a Connector
-|Orang|--/--------
-|Red |-/
-|Brown|/
-+-----+
-
-Black - Ground to outer metal part of Mini Din 5a connector (not used)
-Green - Ground
-Yellow - Power button signal
-Orange - Keyboard Out
-Red - Keyboard In
-Brown - Vcc
-
-ATmega32u4 connections (pinout provided for Arduino Pro Micro):
-
-Keyboard out (orange) : PD0 (pin 3)
-Keyboard in (red) : PD1 (pin 2)
-Power Button (yellow) : PD4 (pin 4)
-Ground (black) : GND
-Vcc (brown) : VCC
-
-See attached next_timings.jpg file for a detailed illustration of NeXT keyboard protocol timings.
-
-Power button signal line is normally high when the keyboard is powered/initialized. It is pulled to ground when pressed. The converter automatically translates this to a "normal" keypress with code 0x5A. This connection is technically optional, the only side effect of not making this connection is the power key will do nothing.
-
-Converter is based heavily on Ladyada's original "USB NeXT Keyboard with Arduino Micro" tutorial (http://learn.adafruit.com/usb-next-keyboard-with-arduino-micro/overview). If you build this converter, show Adafruit some love and do it using an Arduino Micro (http://www.adafruit.com/products/1315) or their ATmega 32u4 Breakout Board (http://www.adafruit.com/products/296). Arduino Micro should work fine using the Arduino Pro Micro configuration above, same pins numbers and everything.
-
-TODO:
------
-
-I believe it might be possible to run the keyboard off of 3V; during testing I observed that the keyboard could sometimes function even without Vcc connected as long as the ground connection was good and the Keyboard In line was connected. If that works it should be easy to do a Bluetooth conversion and run the keyboard right off of a LiPo battery without a boost circuit
-
-Utilize second LED as status indicator for good initialization; also try to make hot plugging much more robust.
-
-Figure a better use for the Power button. Too easy to hit it by mistake to use for Suspend or Power Off - maybe move cap to different part of the board and consider that
-
-Figure out a better use for the lock LEDs. Right now they just light up when you press shift. Lame. Maybe implement proper Caps/Num/Scroll Locks
-
diff --git a/converter/next_usb/config.h b/converter/next_usb/config.h
deleted file mode 100644
index a06affc5e8..0000000000
--- a/converter/next_usb/config.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-NeXT non-ADB Keyboard USB Converter
-
-Copyright 2013, Benjamin Gould (bgould@github.com)
-
-Based on:
-TMK firmware code Copyright 2011,2012 Jun WAKO <wakojun@gmail.com>
-Arduino code by "Ladyada" Limor Fried (http://ladyada.net/, http://adafruit.com/), released under BSD license
-
-Timing reference thanks to http://m0115.web.fc2.com/ (dead link), http://cfile7.uf.tistory.com/image/14448E464F410BF22380BB
-Pinouts thanks to http://www.68k.org/~degs/nextkeyboard.html
-Keycodes from http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-6/src/sys/arch/next68k/dev/
-
-This software is licensed with a Modified BSD License.
-All of this is supposed to be Free Software, Open Source, DFSG-free,
-GPL-compatible, and OK to use in both free and proprietary applications.
-Additions and corrections to this file are welcome.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
-* Neither the name of the copyright holders nor the names of
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xBCBC
-#define DEVICE_VER 0x0500
-#define MANUFACTURER t.m.k.
-#define PRODUCT NeXT Keyboard to USB converter
-#define DESCRIPTION USB converter for NeXT non-ADB Keyboard
-
-/* matrix size */
-#define MATRIX_ROWS 12 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-#define DEBUG_ON_INIT 1
-
-//#define TEENSY_CONFIG 1
-//#define PRO_MICRO_CONFIG 1
-#define TMK_CONFIG 1
-
-// comment out if you don't want the keyboard's LEDs to flash upon initialization or pressing shift
-//#define NEXT_KBD_INIT_FLASH_LEDS
-//#define NEXT_KBD_SHIFT_FLASH_LEDS
-
-//============= Start of Arduino Pro Micro Configuration ==============
-#ifdef PRO_MICRO_CONFIG
-
-// this is the debugging LED that flashes when a key is being pressed
-// comment out in order to disable debugging LED
-#define NEXT_KBD_LED1_PORT PORTD
-#define NEXT_KBD_LED1_PIN PIND
-#define NEXT_KBD_LED1_DDR DDRD
-#define NEXT_KBD_LED1_BIT 5
-
-#define NEXT_KBD_LED1_ON NEXT_KBD_LED1_PORT &= ~(1<<NEXT_KBD_LED1_BIT);
-#define NEXT_KBD_LED1_OFF NEXT_KBD_LED1_PORT |= (1<<NEXT_KBD_LED1_BIT);
-
-// reserved for future use
-#define NEXT_KBD_LED2_PORT PORTB
-#define NEXT_KBD_LED2_PIN PINB
-#define NEXT_KBD_LED2_DDR DDRB
-#define NEXT_KBD_LED2_BIT 6
-
-#define NEXT_KBD_LED2_ON NEXT_KBD_LED2_PORT &= ~(1<<NEXT_KBD_LED2_BIT);
-#define NEXT_KBD_LED2_OFF NEXT_KBD_LED2_PORT |= (1<<NEXT_KBD_LED2_BIT);
-
-// corresponds to the Keyboard In wire on the NeXT connector
-// (red wire in NeXT connector) - pin 2 on the Pro Micro
-#define NEXT_KBD_OUT_PORT PORTD
-#define NEXT_KBD_OUT_PIN PIND
-#define NEXT_KBD_OUT_DDR DDRD
-#define NEXT_KBD_OUT_BIT 1
-
-// corresponds to the Keyboard Out wire on the NeXT connector
-// (orange wire in NeXT connector) - pin 3 on the Pro Micro
-#define NEXT_KBD_IN_PORT PORTD
-#define NEXT_KBD_IN_PIN PIND
-#define NEXT_KBD_IN_DDR DDRD
-#define NEXT_KBD_IN_BIT 0
-
-// this pin is an input for the power key on the NeXT keyboard
-// as the keyboard is powered on this should be normally high;
-// if it is pulled low it means the power button is being preseed
-// (yellow wire in NeXT connector) - pin 4 on the Pro Micro
-#define NEXT_KBD_PWR_PORT PORTD
-#define NEXT_KBD_PWR_PIN PIND
-#define NEXT_KBD_PWR_DDR DDRD
-#define NEXT_KBD_PWR_BIT 4
-
-#endif
-//============== End of Arduino Pro Micro Configuration ===============
-
-
-//================ Start of Teensy 2.0 Configuration =================
-#ifdef TEENSY_CONFIG
-
-// this is the debugging LED that flashes when a key is being pressed
-// comment out in order to disable debugging LED
-#define NEXT_KBD_LED_PORT PORTD
-#define NEXT_KBD_LED_PIN PIND
-#define NEXT_KBD_LED_DDR DDRD
-#define NEXT_KBD_LED_BIT 6
-
-#define NEXT_KBD_LED_ON NEXT_KBD_LED_PORT |= (1<<NEXT_KBD_LED_BIT);
-#define NEXT_KBD_LED_OFF NEXT_KBD_LED_PORT &= ~(1<<NEXT_KBD_LED_BIT);
-
-// corresponds to the Keyboard In wire on the NeXT connector
-// (red wire in NeXT connector)
-#define NEXT_KBD_OUT_PORT PORTB
-#define NEXT_KBD_OUT_PIN PINB
-#define NEXT_KBD_OUT_DDR DDRB
-#define NEXT_KBD_OUT_BIT 1
-
-// corresponds to the Keyboard Out wire on the NeXT connector
-// (orange wire in NeXT connector)
-#define NEXT_KBD_IN_PORT PORTB
-#define NEXT_KBD_IN_PIN PINB
-#define NEXT_KBD_IN_DDR DDRB
-#define NEXT_KBD_IN_BIT 0
-
-#endif
-//================= End of Teensy 2.0 Configuration ==================
-
-
-//================ Start of TMK converter Configuration =================
-#ifdef TMK_CONFIG
-
-// this is the debugging LED that flashes when a key is being pressed
-// comment out in order to disable debugging LED
-#define NEXT_KBD_LED1_PORT PORTD
-#define NEXT_KBD_LED1_PIN PIND
-#define NEXT_KBD_LED1_DDR DDRD
-#define NEXT_KBD_LED1_BIT 6
-
-#define NEXT_KBD_LED1_ON NEXT_KBD_LED1_PORT |= (1<<NEXT_KBD_LED1_BIT);
-#define NEXT_KBD_LED1_OFF NEXT_KBD_LED1_PORT &= ~(1<<NEXT_KBD_LED1_BIT);
-
-// corresponds to the Keyboard In wire on the NeXT connector
-#define NEXT_KBD_OUT_PORT PORTD
-#define NEXT_KBD_OUT_PIN PIND
-#define NEXT_KBD_OUT_DDR DDRD
-#define NEXT_KBD_OUT_BIT 1
-
-// corresponds to the Keyboard Out wire on the NeXT connector
-#define NEXT_KBD_IN_PORT PORTD
-#define NEXT_KBD_IN_PIN PIND
-#define NEXT_KBD_IN_DDR DDRD
-#define NEXT_KBD_IN_BIT 0
-
-// this pin is an input for the power key on the NeXT keyboard
-// as the keyboard is powered on this should be normally high;
-// if it is pulled low it means the power button is being preseed
-#define NEXT_KBD_PWR_PORT PORTD
-#define NEXT_KBD_PWR_PIN PIND
-#define NEXT_KBD_PWR_DDR DDRD
-#define NEXT_KBD_PWR_BIT 4
-
-#endif
-//================= End of TMK converter Configuration ==================
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) || \
- (keyboard_report->mods == (MOD_BIT(KC_RALT) | MOD_BIT(KC_RALT))) || \
- (keyboard_report->mods == (MOD_BIT(KC_RGUI) | MOD_BIT(KC_RGUI))) \
-)
diff --git a/converter/next_usb/keymap.c b/converter/next_usb/keymap.c
deleted file mode 100644
index 0041df543f..0000000000
--- a/converter/next_usb/keymap.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-NeXT non-ADB Keyboard USB Converter
-
-Copyright 2013, Benjamin Gould (bgould@github.com)
-
-Based on:
----------
-* TMK firmware code Copyright 2011,2012 Jun WAKO <wakojun@gmail.com>
-* Arduino code by "Ladyada" Limor Fried (http://ladyada.net/, http://adafruit.com/) \
- released under BSD license \
- https://github.com/adafruit/USB-NeXT-Keyboard
-
-Timing reference thanks to http://m0115.web.fc2.com/ (dead link), http://cfile7.uf.tistory.com/image/14448E464F410BF22380BB
-Pinouts thanks to http://www.68k.org/~degs/nextkeyboard.html
-Keycodes from http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-6/src/sys/arch/next68k/dev/
-
-This software is licensed with a Modified BSD License.
-All of this is supposed to be Free Software, Open Source, DFSG-free,
-GPL-compatible, and OK to use in both free and proprietary applications.
-Additions and corrections to this file are welcome.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
-* Neither the name of the copyright holders nor the names of
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "keymap.h"
-#include "keycode.h"
-
-// 32*8(256) byte array which converts PS/2 code into USB code
-static const uint16_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
- ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN3 - number pad equals & pipe
- ACTION_MODS_KEY(MOD_LCTL, KC_Z), // FN4 - cmd+undo on layer 1
- ACTION_MODS_KEY(MOD_LCTL, KC_X), // FN5 - cmd+cut on layer 1
- ACTION_MODS_KEY(MOD_LCTL, KC_C), // FN6 - cmd+copy on layer 1
- ACTION_MODS_KEY(MOD_LCTL, KC_V), // FN7 - cmd+paste on layer 1
-};
-
-/* This is the physical layout that I am starting with:
- * Note: there is some strangeness on the number pad;
- * the equal sign shifts to pipe and forward slash shifts to backslash
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS | |VUp|Pwr|BrU| |` | =| /| *|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |VDn| |BrD| | 7| 8| 9| -|
- * |------------------------------------------------------ | `---' `---' |-----------|---|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| +|
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Alt |Cmd | Space |Cmd |Alt | |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- *
- * Keymap array:
- * 8 bytes
- * +---------+
- * 0| |
- * :| | 0x00-0x87
- * ;| |
- * 11| |
- * +---------+
- */
-#define KEYMAP( \
- K49,K4A,K4B,K4C,K4D,K50,K4F,K4E,K1E,K1F,K20,K1D,K1C,K1B, K1A,K58,K19, K26,K27,K28,K25, \
- K41,K42,K43,K44,K45,K48,K47,K46,K06,K07,K08,K05,K04,K03, K02, K01, K21,K22,K23,K24, \
- K57,K39,K3A,K3B,K3C,K3D,K40,K3F,K3E,K2D,K2C,K2B, K2A, K12,K18,K13,K15, \
- K56, K31,K32,K33,K34,K35,K37,K36,K2E,K2F,K30, K55, K16, K11,K17,K14, \
- K52,K54, K38, K53,K51, K09,K0F,K10, K0B, K0C,K0D \
-) { \
- { KC_NO, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K10, KC_##K0B, KC_##K0C, KC_##K0D, KC_NO, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_NO, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
-}
-
-
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Layer 0: default
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS | |Ins|Ref|Hom| |` | =| /| *|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |Del| |End| | 7| 8| 9| -|
- * |-----------------------------------------------------' | `---' `---' |-----------|---|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| +|
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Fn0 |Alt | Space |LGui |Fn1 | |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, WREF,HOME, GRV, FN3, FN2, PAST,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,NO, DEL, END, P7, P8, P9, PMNS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- FN0, LALT, SPC, LGUI,FN1, LEFT,DOWN,RGHT, P0, PDOT,PENT
-
- ),
-
- /* Layer 1: extra keys
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * |Grv| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| BS | |VUp|VMu|PgU| |` | =| /| *|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab |Pau| W| E| R| T| Y| U| I| O|PSc| \| ]| | |VDn| |PgD| | 7| 8| 9| -|
- * |-----------------------------------------------------' | `---' `---' |-----------|---|
- * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| +|
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift |UND|CUT|COP|PST| B| N| M| ,| .| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Fn0 |Alt | Space |RGui |Fn1 | |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
-
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, VOLU,MUTE,PGUP, TRNS,TRNS,TRNS,TRNS,
- TRNS,PAUS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,FN3, BSLS,TRNS, VOLD, PGDN, BTN1,MS_U,BTN2,WH_U,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, MS_L,MS_D,MS_R,WH_D,
- TRNS, FN4, FN5, FN6, FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS,TRNS,TRNS,
- TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS
-
- )
-};
-
-/* 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)]) };
-}
diff --git a/converter/next_usb/led.c b/converter/next_usb/led.c
deleted file mode 100644
index 2bd0ef6dd4..0000000000
--- a/converter/next_usb/led.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-NeXT non-ADB Keyboard USB Converter
-
-Copyright 2013, Benjamin Gould (bgould@github.com)
-
-Based on:
-TMK firmware code Copyright 2011,2012 Jun WAKO <wakojun@gmail.com>
-Arduino code by "Ladyada" Limor Fried (http://ladyada.net/, http://adafruit.com/), released under BSD license
-
-Timing reference thanks to http://m0115.web.fc2.com/ (dead link), http://cfile7.uf.tistory.com/image/14448E464F410BF22380BB
-Pinouts thanks to http://www.68k.org/~degs/nextkeyboard.html
-Keycodes from http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-6/src/sys/arch/next68k/dev/
-
-This software is licensed with a Modified BSD License.
-All of this is supposed to be Free Software, Open Source, DFSG-free,
-GPL-compatible, and OK to use in both free and proprietary applications.
-Additions and corrections to this file are welcome.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
-* Neither the name of the copyright holders nor the names of
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#include "stdint.h"
-#include "led.h"
-#include "next_kbd.h"
-
-
-void led_set(uint8_t usb_led)
-{
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- next_kbd_set_leds(true, true);
- } else {
- next_kbd_set_leds(false, false);
- }
-}
diff --git a/converter/next_usb/matrix.c b/converter/next_usb/matrix.c
deleted file mode 100644
index d91cd25774..0000000000
--- a/converter/next_usb/matrix.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
-NeXT non-ADB Keyboard USB Converter
-
-Copyright 2013, Benjamin Gould (bgould@github.com)
-
-Based on:
-TMK firmware code Copyright 2011,2012 Jun WAKO <wakojun@gmail.com>
-Arduino code by "Ladyada" Limor Fried (http://ladyada.net/, http://adafruit.com/), released under BSD license
-
-Timing reference thanks to http://m0115.web.fc2.com/ (dead link), http://cfile7.uf.tistory.com/image/14448E464F410BF22380BB
-Pinouts thanks to http://www.68k.org/~degs/nextkeyboard.html
-Keycodes from http://ftp.netbsd.org/pub/NetBSD/NetBSD-release-6/src/sys/arch/next68k/dev/
-
-This software is licensed with a Modified BSD License.
-All of this is supposed to be Free Software, Open Source, DFSG-free,
-GPL-compatible, and OK to use in both free and proprietary applications.
-Additions and corrections to this file are welcome.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
-* Neither the name of the copyright holders nor the names of
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "serial.h"
-#include "matrix.h"
-#include "debug.h"
-#include "matrix.h"
-#include "next_kbd.h"
-
-static void matrix_make(uint8_t code);
-static void matrix_break(uint8_t code);
-
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) ((code>>3)&0xF)
-#define COL(code) (code&0x07)
-
-static bool is_modified = false;
-
-/* number of matrix rows */
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-/* number of matrix columns */
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-#ifndef NEXT_KBD_LED1_ON
-#define NEXT_KBD_LED1_ON
-#endif
-
-#ifndef NEXT_KBD_LED1_OFF
-#define NEXT_KBD_LED1_OFF
-#endif
-
-#define NEXT_KBD_PWR_READ (NEXT_KBD_PWR_PIN&(1<<NEXT_KBD_PWR_BIT))
-
-static bool power_state = false;
-
-/* intialize matrix for scanning. should be called once. */
-void matrix_init(void)
-{
-#ifdef DEBUG_ON_INIT
- debug_enable = true;
-#endif
-
- // I've found that the matrix likes a little while for things to
- // settle down before it gets started. Not sure why :)
- _delay_ms(250);
-
- dprintf("[ Intializing NeXT keyboard ]\n");
- NEXT_KBD_LED1_DDR |= (1<<NEXT_KBD_LED1_BIT); // LED pin to output
- NEXT_KBD_LED1_ON;
-
- NEXT_KBD_PWR_DDR &= ~(1<<NEXT_KBD_PWR_BIT); // Power Button pin to input
- NEXT_KBD_PWR_PIN |= (1<<NEXT_KBD_PWR_BIT); // KBD_PWR pull up
-
- power_state = NEXT_KBD_PWR_READ ? false : true;
- dprintf("Initial power button state: %b\n", power_state);
-
- next_kbd_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
-#ifdef NEXT_KBD_INIT_FLASH_LEDS
- dprintf("flashing LEDs:");
- // flash the LEDs after initialization
- bool leds_on = true;
- for (uint8_t i = 0; i <= 6; i++)
- {
- leds_on = leds_on ? false : true;
- dprintf(" %b", leds_on);
- next_kbd_set_leds(leds_on, leds_on);
- _delay_ms(250);
- }
- dprintf("\n");
-#endif
-
- dprintf("[ NeXT keyboard initialized ]\n");
-
- return;
-}
-
-#define NEXT_KBD_KEYCODE(response) (uint8_t)((response&0xFF)>>1)
-#define NEXT_KBD_PRESSED_KEYCODE(response) (uint8_t)(((response)&0xF00)==0x400)
-#define NEXT_KBD_PRESSED(response, mask) (uint8_t)(((response)&mask)>0)
-#define NEXT_KBD_PRESSED_CONTROL(response) NEXT_KBD_PRESSED(response,0x01000)
-#define NEXT_KBD_PRESSED_SHIFT_LEFT(response) NEXT_KBD_PRESSED(response,0x02000)
-#define NEXT_KBD_PRESSED_SHIFT_RGHT(response) NEXT_KBD_PRESSED(response,0x04000)
-#define NEXT_KBD_PRESSED_CMD_LEFT(response) NEXT_KBD_PRESSED(response,0x08000)
-#define NEXT_KBD_PRESSED_CMD_RGHT(response) NEXT_KBD_PRESSED(response,0x10000)
-#define NEXT_KBD_PRESSED_ALT_LEFT(response) NEXT_KBD_PRESSED(response,0x20000)
-#define NEXT_KBD_PRESSED_ALT_RGHT(response) NEXT_KBD_PRESSED(response,0x40000)
-#define NEXT_KBD_MAKE_OR_BREAK(key, code) \
- do { \
- if (NEXT_KBD_PRESSED_##key(resp) > 0) \
- matrix_make(code); \
- else \
- matrix_break(code); \
- } while (0);
-
-#define NEXT_KBD_PWR_KEYCODE 0x58
-
-/* scan all key states on matrix */
-uint8_t matrix_scan(void)
-{
- _delay_ms(5);
-
- //next_kbd_set_leds(false, false);
- NEXT_KBD_LED1_OFF;
-
- is_modified = false;
-
- if (!NEXT_KBD_PWR_READ) {
- matrix_make(NEXT_KBD_PWR_KEYCODE);
- power_state = 1;
- if (is_modified)
- {
- dprintf("Power state 1\n");
-
- }
- } else {
- matrix_break(NEXT_KBD_PWR_KEYCODE);
- power_state = 0;
- if (is_modified)
- {
- dprintf("Power state 0\n");
-
- }
- }
-
- uint32_t resp = (next_kbd_recv());
-
- if (resp == NEXT_KBD_KMBUS_IDLE)
- {
- return 0;
- }
-
- NEXT_KBD_LED1_ON;
-
-#ifdef NEXT_KBD_SHIFT_FLASH_LEDS
- next_kbd_set_leds(
- NEXT_KBD_PRESSED_SHIFT_LEFT(resp) ? true : false,
- NEXT_KBD_PRESSED_SHIFT_RGHT(resp) ? true : false
- );
-#endif
-
- dprintf("[ r=%04lX keycode=%02X pressed=%X CTRL=%X SHIFT_LEFT=%X SHIFT_RGHT=%X CMD_LEFT=%X CMD_RGHT=%X ALT_LEFT=%X ALT_RGHT=%X ]\n", \
- resp, \
- NEXT_KBD_KEYCODE(resp), \
- NEXT_KBD_PRESSED_KEYCODE(resp), \
- NEXT_KBD_PRESSED_CONTROL(resp), \
- NEXT_KBD_PRESSED_SHIFT_LEFT(resp), \
- NEXT_KBD_PRESSED_SHIFT_RGHT(resp), \
- NEXT_KBD_PRESSED_CMD_LEFT(resp), \
- NEXT_KBD_PRESSED_CMD_RGHT(resp), \
- NEXT_KBD_PRESSED_ALT_LEFT(resp), \
- NEXT_KBD_PRESSED_ALT_RGHT(resp) \
- );
-
- // Modifier keys don't return keycode; have to check the upper bits
- NEXT_KBD_MAKE_OR_BREAK(ALT_RGHT, 0x51);
- NEXT_KBD_MAKE_OR_BREAK(ALT_LEFT, 0x52);
- NEXT_KBD_MAKE_OR_BREAK(CMD_RGHT, 0x53);
- NEXT_KBD_MAKE_OR_BREAK(CMD_LEFT, 0x54);
- NEXT_KBD_MAKE_OR_BREAK(SHIFT_RGHT, 0x55);
- NEXT_KBD_MAKE_OR_BREAK(SHIFT_LEFT, 0x56);
- NEXT_KBD_MAKE_OR_BREAK(CONTROL, 0x57);
- NEXT_KBD_MAKE_OR_BREAK(KEYCODE, NEXT_KBD_KEYCODE(resp));
-
- return 1;
-}
-
-/* whether modified from previous scan. used after matrix_scan. */
-bool matrix_is_modified()
-{
- return is_modified;
-}
-
-/* whether a switch is on */
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-/* matrix state on row */
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-/* print matrix for debug */
-void matrix_print(void)
-{
-}
-
-inline
-static void matrix_make(uint8_t code)
-{
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= 1<<COL(code);
- is_modified = true;
- }
-}
-
-inline
-static void matrix_break(uint8_t code)
-{
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
-}
diff --git a/converter/next_usb/next_timings.jpg b/converter/next_usb/next_timings.jpg
deleted file mode 100644
index c9e429fe11..0000000000
--- a/converter/next_usb/next_timings.jpg
+++ /dev/null
Binary files differ
diff --git a/converter/pc98_usb/Makefile b/converter/pc98_usb/Makefile
deleted file mode 100644
index 9892276d7f..0000000000
--- a/converter/pc98_usb/Makefile
+++ /dev/null
@@ -1,83 +0,0 @@
-# Target file name (without extension).
-TARGET = pc98_usb
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c \
- protocol/serial_uart.c
-# protocol/serial_soft.c
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Build Options
-# *Comment out* to disable the options.
-#
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-#NKRO_ENABLE = yes # USB Nkey Rollover
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# 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
diff --git a/converter/pc98_usb/README b/converter/pc98_usb/README
deleted file mode 100644
index c9bdf3d846..0000000000
--- a/converter/pc98_usb/README
+++ /dev/null
@@ -1,67 +0,0 @@
-PC98 to USB keyboard protocol converter
-=======================================
-Target MCU is ATMega32u4 but other USB capable AVR will also work.
-
-
-Connector
----------
-
- 8Pin mini DIN
- ___ ___
- / |_| \
- / 8 7 6 \
- | 5 4 3 |
- \_ 2 1 _/
- \_____/
- (receptacle)
-
-
-Wiring: You can change this with editing config.h.
-
- Pin mini DIN MCU
- ----------------------------------
- 1 ~RST(TXD) PD3
- 2 GND GND
- 3 ~RDY PD4
- 4 RXD PD2
- 5 ~RTY PD5
- 6 NC
- 7 NC
- 8 5V VCC
-
-
-
-
-Protocol
---------
-Signal: Asynchronous, Positive logic, 19200baud, Least bit first
-Frame format: 1-Start bit(Lo), 8-Data bits, Odd-Parity, 1-Stop bit
-
-
-
-Build Firmware
---------------
-Just use 'make'
-
- $ cd pc98_usb
- $ make
-
-Then, load the binary to MCU with your favorite programmer.
-
-
-
-Other PC98 converter projects and resource
-------------------------------------------
-PC98 to USB
-http://davy.nyacom.net/kbd98usb/
-
-PC98 to PS/2
-http://www.tsp.ne.jp/~sawada/mago/c_gka98at.htm
-http://www.tsp.ne.jp/~sawada/mago/src/gka98at.asm
-
-PC98 keyboard commands
-http://www.webtech.co.jp/company/doc/undocumented_mem/io_kb.txt
-
-
-Inhibit repeating key:
-0x9C, 0x70
diff --git a/converter/pc98_usb/config.h b/converter/pc98_usb/config.h
deleted file mode 100644
index b8d676e4cf..0000000000
--- a/converter/pc98_usb/config.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x9898
-#define DEVICE_VER 0x0100
-#define MANUFACTURER t.m.k.
-#define PRODUCT PC98 keyboard converter
-#define DESCRIPTION converts PC98 keyboard protocol into USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 16
-#define MATRIX_COLS 8
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- host_get_first_key() == KC_CANCEL \
-)
-
-
-/* PC98 Reset Port shared with TXD */
-#define PC98_RST_DDR DDRD
-#define PC98_RST_PORT PORTD
-#define PC98_RST_BIT 3
-/* PC98 Ready Port */
-#define PC98_RDY_DDR DDRD
-#define PC98_RDY_PORT PORTD
-#define PC98_RDY_BIT 4
-/* PC98 Retry Port */
-#define PC98_RTY_DDR DDRD
-#define PC98_RTY_PORT PORTD
-#define PC98_RTY_BIT 5
-
-/*
- * PC98 Serial(USART) configuration
- * asynchronous, positive logic, 19200baud, bit order: LSB first
- * 1-start bit, 8-data bit, odd parity, 1-stop bit
- */
-/*
- * Software Serial
- */
-#define SERIAL_SOFT_BAUD 19200
-#define SERIAL_SOFT_PARITY_ODD
-#define SERIAL_SOFT_BIT_ORDER_LSB
-#define SERIAL_SOFT_LOGIC_POSITIVE
-/* RXD Port */
-#define SERIAL_SOFT_RXD_DDR DDRD
-#define SERIAL_SOFT_RXD_PORT PORTD
-#define SERIAL_SOFT_RXD_PIN PIND
-#define SERIAL_SOFT_RXD_BIT 2
-#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
-/* RXD Interupt */
-#define SERIAL_SOFT_RXD_VECT INT2_vect
-#define SERIAL_SOFT_RXD_INIT() do { \
- /* pin configuration: input with pull-up */ \
- SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
- SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
- /* enable interrupt: INT2(falling edge) */ \
- EICRA |= ((1<<ISC21)|(0<<ISC20)); \
- EIMSK |= (1<<INT2); \
- sei(); \
-} while (0)
-#define SERIAL_SOFT_RXD_INT_ENTER()
-#define SERIAL_SOFT_RXD_INT_EXIT() do { \
- /* clear interrupt flag */ \
- EIFR = (1<<INTF2); \
-} while (0)
-/* TXD Port */
-#define SERIAL_SOFT_TXD_DDR DDRD
-#define SERIAL_SOFT_TXD_PORT PORTD
-#define SERIAL_SOFT_TXD_PIN PIND
-#define SERIAL_SOFT_TXD_BIT 3
-#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_INIT() do { \
- /* pin configuration: output */ \
- SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
- /* idle */ \
- SERIAL_SOFT_TXD_ON(); \
-} while (0)
-
-
-/*
- * Hardware Serial(UART)
- */
-#ifdef __AVR_ATmega32U4__
- #define SERIAL_UART_BAUD 19200
- #define SERIAL_UART_DATA UDR1
- #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
- #define SERIAL_UART_RXD_VECT USART1_RX_vect
- #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
- #define SERIAL_UART_INIT() do { \
- UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
- UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
- UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \
- UCSR1B |= (0<<TXCIE1) | (1<<TXEN1); /* TX interrupt, TX: enable */ \
- UCSR1C |= (1<<UPM11) | (1<<UPM10); /* parity: none(00), even(01), odd(11) */ \
- sei(); \
- } while(0)
-#else
- #error "USART configuration is needed."
-#endif
-
-
-#endif
diff --git a/converter/pc98_usb/keymap.c b/converter/pc98_usb/keymap.c
deleted file mode 100644
index 8922ea7bab..0000000000
--- a/converter/pc98_usb/keymap.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "util.h"
-#include "keymap.h"
-
-
-
-
-/* PC-9801-98-S02 Raku Raku keyboard(Luckyboard) Normal Mode
- ,---------------------------------------------------------------.
- | 60| 61| 62| 63| 64| 65| 66| 67| 68| 69| 6A| 6B| 36| 37| 3F| 3E|
- `---------------------------------------------------------------'
- ,---------------------------------------------------------------.
- | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
- |---------------------------------------------------------------|
- | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
- |---------------------------------------------------------'. |
- | 74| 20| 21| 22| 23| 24| 3B | 3C | 25| 26| 27| 28| 29| |
- |---------------------------------------------------------------|
- | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
- `---------------------------------------------------------------'
- | 73| 51| 5B| 59| 34| 5A| 35| xx|
- `-----------------------------------------------'
- xx: 74 35 F4 B5
-*/
-#define KEYMAP( \
- K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K36, K37, K3F, K3E, \
- K00, K01, K02, K03, K04, K05, K58, K71, K06, K07, K08, K09, K0A, K0E, \
- K0F, K10, K11, K12, K13, K14, K3A, K15, K16, K17, K18, K19, K1C, \
- K74, K20, K21, K22, K23, K24, K3B, K3C, K25, K26, K27, K28, K29, \
- K70,K2A, K2B, K2C, K2D, K2E, K38, K3D, K39, K2F, K30, K31, K32, K33, \
- K73, K51, K5B, K59, K34, K5A, K35 \
-) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_NO, KC_NO, KC_NO, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_NO, KC_NO, KC_##K1C, KC_NO, KC_NO, KC_NO }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_##K51, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_##K70, KC_##K71, KC_NO, KC_##K73, KC_##K74, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
-}
-
-
-
-static 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|
- `---------------------------------------------------------------'
- ,---------------------------------------------------------------.
- | 00| 01| 02| 03| 04| 05| 58| 71| 06| 07| 08| 09| 0A| 0E|
- |---------------------------------------------------------------|
- | 0F| 10| 11| 12| 13| 14| 3A | 15| 16| 17| 18| 19| 1C|
- |---------------------------------------------------------------|
- | 74| 20| 21| 22| 23| 24| MINS| EQL| 25| 26| 27| 28| 29| |
- |---------------------------------------------------------------|
- | 70| 2A| 2B| 2C| 2D| 2E| 38| 3D | 39| 2F| 30| 31| 32| 33| 70|
- `---------------------------------------------------------------'
- | 73| 51| 5B| 59| 34| 5A| 35| xx|
- `-----------------------------------------------'
- */
- KEYMAP(
- CANCEL,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, FN6,
- ESC, 1, 2, 3, 4, 5, FN4, FN5, 6, 7, 8, 9, 0, BSPC,
- TAB, Q, W, E, R, T, UP, Y, U, I, O, P, ENT,
- LCTL, A, S, D, F, G, MINS, EQL, H, J, K, L, FN2,
- LSFT, Z, X, C, V, B, GRV, BSLS, QUOT, N, M,COMM, DOT, FN1,
- LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
- ),
- KEYMAP(
- PAUS,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
- GRV, F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10, DEL,
- TAB, Q, W, E, R, T, UP, HOME,PGDN,PGUP, END, P, ENT,
- LCTL, A, S, D, F, G, MINS, EQL, LEFT,DOWN, UP,RGHT,SCLN,
- LSFT, Z, X, C, V, B, INS, DOWN, DEL,HOME,PGDN,PGUP, END,TRNS,
- LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
- ),
- KEYMAP(
- PAUS,COPY, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14,
- GRV, F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10, DEL,
- TAB, Q, W, E, R, T, UP, WH_L,WH_D,WH_U,WH_R, P, ENT,
- LCTL, A, S, D, F, G, MINS, EQL, MS_L,MS_D,MS_U,MS_R,TRNS,
- LSFT, Z, X, C, V, B, INS, DOWN, BTN3,BTN2,BTN1,BTN4,BTN5,TRNS,
- LGUI, LALT, LCTL, LSFT, SPC, SPC, RALT
- ),
-};
-static const uint8_t PROGMEM overlays[][MATRIX_ROWS][MATRIX_COLS] = {};
-
-/*
- * Macro definition
- */
-enum macro_id {
- LBRACKET,
- RBRACKET,
- DUMMY,
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- keyevent_t event = record->event;
- //uint8_t tap_count = record->tap_count;
-
- switch (id) {
- case LBRACKET:
- return (event.pressed ?
- MACRO( T(LBRC), END ) :
- MACRO( T(LBRC), END ) );
- case RBRACKET:
- return (event.pressed ?
- MACRO( T(RBRC), END ) :
- MACRO( T(RBRC), END ) );
- }
- return MACRO_NONE;
-}
-
-/*
- * Action function
- */
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-/*
- keyevent_t event = record->event;
- uint8_t tap_count = record->tap_count;
- switch (id) {
- case 0xFF:
- action_macro_play(get_macro(opt, event.pressed));
- break;
- }
-*/
-}
-
-
-/*
- * Fn actions
- */
-static const uint16_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
- ACTION_LAYER_MOMENTARY(2), // FN3
- ACTION_MACRO(LBRACKET), // FN4
- 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;
-}
diff --git a/converter/pc98_usb/led.c b/converter/pc98_usb/led.c
deleted file mode 100644
index 48c3f1c2b2..0000000000
--- a/converter/pc98_usb/led.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "stdint.h"
-#include "serial.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- uint8_t sun_led = 0;
- if (usb_led & (1<<USB_LED_NUM_LOCK)) sun_led |= (1<<0);
- if (usb_led & (1<<USB_LED_COMPOSE)) sun_led |= (1<<1);
- if (usb_led & (1<<USB_LED_SCROLL_LOCK)) sun_led |= (1<<2);
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) sun_led |= (1<<3);
-
- serial_send(0x0E);
- serial_send(sun_led);
-}
diff --git a/converter/pc98_usb/matrix.c b/converter/pc98_usb/matrix.c
deleted file mode 100644
index 8833e0a851..0000000000
--- a/converter/pc98_usb/matrix.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "matrix.h"
-#include "debug.h"
-#include "protocol/serial.h"
-
-
-/*
- * Matrix Array usage:
- *
- * ROW: 16(4bits)
- * COL: 8(3bits)
- *
- * 8bit wide
- * +---------+
- * 0|00 ... 07|
- * 1|08 ... 0F|
- * :| ... |
- * :| ... |
- * E|70 ... 77|
- * F|78 ... 7F|
- * +---------+
- */
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) ((code>>3)&0xF)
-#define COL(code) (code&0x07)
-
-static bool is_modified = false;
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-static void pc98_inhibit_repeat(void)
-{
- uint8_t code;
-
- while (serial_recv()) ;
-RETRY:
- PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
- _delay_ms(500);
- serial_send(0x9C);
-
- PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
- _delay_ms(100);
- while (!(code = serial_recv())) ;
- print("PC98: send 9C: "); print_hex8(code); print("\n");
- if (code != 0xFA) goto RETRY;
-
-
-
- PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
- _delay_ms(100);
- serial_send(0x70);
-
- PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
- _delay_ms(100);
- //code = serial_recv();
- while (!(code = serial_recv())) ;
- print("PC98: send 70: "); print_hex8(code); print("\n");
- if (code != 0xFA) goto RETRY;
-}
-
-void matrix_init(void)
-{
- PC98_RST_DDR |= (1<<PC98_RST_BIT);
- PC98_RDY_DDR |= (1<<PC98_RDY_BIT);
- PC98_RTY_DDR |= (1<<PC98_RTY_BIT);
- PC98_RST_PORT |= (1<<PC98_RST_BIT);
- PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
- PC98_RTY_PORT |= (1<<PC98_RTY_BIT);
-
-
- serial_init();
-
- // PC98 reset
-/*
- PC98_RST_PORT &= ~(1<<PC98_RST_BIT);
- _delay_us(15);
- PC98_RST_PORT |= (1<<PC98_RST_BIT);
- _delay_us(13);
- PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
-*/
-
- _delay_ms(500);
- pc98_inhibit_repeat();
-
-
- // PC98 ready
- PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- debug("init\n");
- return;
-}
-
-uint8_t matrix_scan(void)
-{
- is_modified = false;
-
- uint16_t code;
- PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
- _delay_us(30);
- code = serial_recv2();
- PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
- if (code == -1) return 0;
-
-if (code == 0x60) {
- pc98_inhibit_repeat();
-
-/*
- PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
- _delay_ms(100);
- serial_send(0x96);
- PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
-*/
-
- return 0;
-}
-
- print_hex8(code); print(" ");
-
- if (code&0x80) {
- // break code
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
- } else {
- // make code
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= (1<<COL(code));
- is_modified = true;
- }
- }
- return code;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
diff --git a/converter/ps2_usb/Makefile b/converter/ps2_usb/Makefile
deleted file mode 100644
index 51b2225661..0000000000
--- a/converter/ps2_usb/Makefile
+++ /dev/null
@@ -1,105 +0,0 @@
-#
-# Makefile for Teensy
-#
-# Target file name (without extension).
-TARGET = ps2_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
-
-ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
-else
- SRC := keymap_plain.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=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
-NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-
-
-# PS/2 Options
-#
-#PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
-PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
-#PS2_USE_BUSYWAIT = yes # uses primitive reference code
-
-
-# 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.mk
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/ps2_usb/Makefile.mbed b/converter/ps2_usb/Makefile.mbed
deleted file mode 100644
index a7ea5bcf24..0000000000
--- a/converter/ps2_usb/Makefile.mbed
+++ /dev/null
@@ -1,46 +0,0 @@
-PROJECT = ps2_usb
-
-TMK_DIR = ../../tmk_core
-MBED_DIR = $(TMK_DIR)/tool/mbed/mbed-sdk
-
-#VPATH += $(MBED_DIR):$(TMK_DIR)
-vpath %.s .:$(MBED_DIR):$(TMK_DIR)
-vpath %.c .:$(MBED_DIR):$(TMK_DIR)
-vpath %.cpp .:$(MBED_DIR):$(TMK_DIR)
-
-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
-
-ifdef KEYMAP
- OBJECTS := $(OBJDIR)/keymap_$(KEYMAP).o $(OBJECTS)
-else
- OBJECTS := $(OBJDIR)/keymap_plain.o $(OBJECTS)
-endif
-
-CONFIG_H = config_mbed.h
-
-SYS_OBJECTS =
-
-INCLUDE_PATHS = -I.
-
-LIBRARY_PATHS =
-LIBRARIES =
-
-# Build Options
-# Comment out to disable
-#BOOTMAGIC_ENABLE = yes
-MOUSEKEY_ENABLE = yes
-
-
-#include $(TMK_DIR)/tool/mbed/mk20d50m.mk
-include $(TMK_DIR)/tool/mbed/lpc11u35_501.mk
-include $(TMK_DIR)/tool/mbed/mbed.mk
-include $(TMK_DIR)/tool/mbed/common.mk
-include $(TMK_DIR)/tool/mbed/gcc.mk
diff --git a/converter/ps2_usb/Makefile.pjrc b/converter/ps2_usb/Makefile.pjrc
deleted file mode 100644
index 64319aca88..0000000000
--- a/converter/ps2_usb/Makefile.pjrc
+++ /dev/null
@@ -1,75 +0,0 @@
-# Target file name (without extension).
-TARGET = ps2_usb_pjrc
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap_common.c \
- matrix.c \
- led.c
-
-ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
-else
- SRC := keymap_plain.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 16000000
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# *Comment out* to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # USB Nkey Rollover
-
-
-# PS/2 Options
-#
-#PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
-#PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
-PS2_USE_BUSYWAIT = yes # uses primitive reference code
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/protocol/pjrc.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/ps2_usb/Makefile.tmk_rev1 b/converter/ps2_usb/Makefile.tmk_rev1
deleted file mode 100644
index 6aaef49969..0000000000
--- a/converter/ps2_usb/Makefile.tmk_rev1
+++ /dev/null
@@ -1,98 +0,0 @@
-#
-# Makefile for TMK keyboard converter rev2
-# https://github.com/tmk/keyboard_converter#pcb-rev1
-#
-# Target file name (without extension).
-TARGET = ps2_usb_tmk_rev1
-
-# 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
-
-ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
-else
- SRC := keymap_plain.c $(SRC)
-endif
-
-CONFIG_H = config_tmk_rev1.h
-
-
-# MCU name
-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)
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = 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
-#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-
-
-# PS/2 Options
-#
-PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
-#PS2_USE_BUSYWAIT = yes # uses primitive reference code
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/ps2_usb/Makefile.tmk_rev2 b/converter/ps2_usb/Makefile.tmk_rev2
deleted file mode 100644
index 5049a22703..0000000000
--- a/converter/ps2_usb/Makefile.tmk_rev2
+++ /dev/null
@@ -1,98 +0,0 @@
-#
-# Makefile for TMK keyboard converter rev2
-# https://github.com/tmk/keyboard_converter#pcb-rev2
-#
-# Target file name (without extension).
-TARGET = ps2_usb_tmk_rev2
-
-# 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
-
-ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
-else
- SRC := keymap_plain.c $(SRC)
-endif
-
-CONFIG_H = config_tmk_rev2.h
-
-
-# MCU name
-MCU = atmega32u2
-
-# 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)
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = 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
-#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-
-
-# PS/2 Options
-#
-PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
-#PS2_USE_BUSYWAIT = yes # uses primitive reference code
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/ps2_usb/Makefile.vusb b/converter/ps2_usb/Makefile.vusb
deleted file mode 100644
index d9fa12bcda..0000000000
--- a/converter/ps2_usb/Makefile.vusb
+++ /dev/null
@@ -1,107 +0,0 @@
-# Target file name (without extension).
-TARGET = ps2_usb_vusb
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap_common.c \
- matrix.c \
- led.c
-
-ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
-else
- SRC := keymap_plain.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-# Use USART for PS/2. With V-USB INT and BUSYWAIT code is not useful.
-PS2_USE_USART = yes
-
-
-# V-USB debug level: To use ps2_usart.c level must be 0
-# ps2_usart.c requires USART to receive PS/2 signal.
-OPT_DEFS += -DDEBUG_LEVEL=0
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-#MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-MCU = atmega168
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 20000000
-
-
-# Build Options
-# comment out to disable the options.
-#
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-#NKRO_ENABLE = yes # USB Nkey Rollover
-NO_UART = yes # UART is unavailable
-
-
-
-#---------------- Programming Options --------------------------
-AVRDUDE = avrdude
-# Type: avrdude -c ? to get a full listing.
-AVRDUDE_PROGRAMMER = usbasp
-AVRDUDE_PORT =
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
-
-# Uncomment the following if you want avrdude's erase cycle counter.
-# Note that this counter needs to be initialized first using -Yn,
-# see avrdude manual.
-#AVRDUDE_ERASE_COUNTER = -y
-
-# Uncomment the following if you do /not/ wish a verification to be
-# performed after programming the device.
-#AVRDUDE_NO_VERIFY = -V
-
-# Increase verbosity level. Please use this when submitting bug
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
-# to submit bug reports.
-#AVRDUDE_VERBOSE = -v -v
-
-#AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
-AVRDUDE_FLAGS = -p $(MCU) -c $(AVRDUDE_PROGRAMMER)
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
-
-PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBasp 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=2048
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/protocol/vusb.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/ps2_usb/README.md b/converter/ps2_usb/README.md
deleted file mode 100644
index 74464e2640..0000000000
--- a/converter/ps2_usb/README.md
+++ /dev/null
@@ -1,84 +0,0 @@
-PS/2 to USB keyboard converter
-==============================
-This firmware converts PS/2 keyboard protocol to USB.(It supports Scan Code Set 2.)
-
-
-Connect Wires
--------------
-In case of Teensy2.0(ATMega32U4):
-
-1. Connect **Vcc** and **GND**.
-2. Connect **Clock** and **Data** line.
- - **Interrupt**: **Clock** is on `PD1` and **Data** on `PD0`.(Recommended. Soarer's converter compatible)
- - **Busywait**: **Clock** is on `PD1` and **Data** on `PD0`.
- - **USART**: **Clock** is on `PD5` and **Data** on `PD2`.
-3. Optionally you need pull-up resistor. 1K-10K Ohm is OK.
-
-To change pin configuration edit **config.h** and **Makefile**.
-
-
-Build Firmware
---------------
-For **PJRC Teensy** just run `make`:
-
- $ make clean
- $ make
-
-To select keymap:
-
- $ make clean
- $ make KEYMAP=[plain|jis|spacefn|...]
-
-After that you will find HEX file `ps2_usb_lufa.hex` in current directory.
-
-
-- For **TMK converter Rev.1** use `make -f Makefile.tmk_rev1` instead of `make` and HEX file is `ps2_usb_tmk_rev1.hex`.
-
-- For **TMK converter Rev.2** use `make -f Makefile.tmk_rev2` instead of `make` and HEX file is `ps2_usb_tmk_rev2.hex`.
-
-
-Keymap
-------
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document(you can find in README.md of top directory) and existent keymap files.
-
-
-PS/2 signal handling implementations
-------------------------------------
-Following three methods can be used to implement PS/2 signal handling.
-
-### Simple and stupid busy-wait(ps2_busywait.c)
- This is expected to implemented with portable C code for reference.
-### Interrupt driven(ps2_interrupt.c)
- Uses pin interrupt to detect falling edge of clock line.
-### USART hardware module(ps2_usart.c)
- Uses AVR USART engine to receive PS/2 signal.
-
-To select method edit Makefile.
-
-
-V-USB Support
--------------
-With V-USB you can use this converter on ATmega(168/328) but it doesn't support NKRO at this time.
-
-Circuit:
-
- +---+ +---------------+
- USB GND | | ATmega168 |
- === C3 | |
- 5V <-------+--------+---|Vcc,AVCC | PS/2
- R1 | | ====
- D- <----+--+-----R2-----|INT1 RXD|------->DATA
- D+ <----|---+----R3-----|INT0 XCK|------->CLOCK
- Z1 Z2 | | ->5V
- GND<----+---+--+--+-----|GND | ->GND
- | | | |
- | C2-+--|XTAL1 |
- | X1 | |
- +--C3-+--|XTAL2 |
- +---------------+
- R1: 1.5K Ohm
- R2,R3: 68 Ohm
- Z1,Z2: Zenner 3.6V
- C1,C2: 22pF
- C3: 0.1uF
- X1: Crystal 20MHz(16MHz/12MHz)
diff --git a/converter/ps2_usb/config.h b/converter/ps2_usb/config.h
deleted file mode 100644
index c0a4fab13b..0000000000
--- a/converter/ps2_usb/config.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include <avr/interrupt.h>
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6512
-#define DEVICE_VER 0x0001
-#define MANUFACTURER t.m.k.
-#define PRODUCT PS/2 keyboard converter
-#define DESCRIPTION convert PS/2 keyboard to USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 32 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
- keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-//#define NO_SUSPEND_POWER_DOWN
-
-
-/*
- * PS/2 Busywait
- */
-#ifdef PS2_USE_BUSYWAIT
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-#endif
-
-/*
- * PS/2 Pin interrupt
- */
-#ifdef PS2_USE_INT
-/* uses INT1 for clock line(ATMega32U4) */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-#define PS2_INT_INIT() do { \
- EICRA |= ((1<<ISC11) | \
- (0<<ISC10)); \
-} while (0)
-#define PS2_INT_ON() do { \
- EIMSK |= (1<<INT1); \
-} while (0)
-#define PS2_INT_OFF() do { \
- EIMSK &= ~(1<<INT1); \
-} while (0)
-#define PS2_INT_VECT INT1_vect
-#endif
-
-/*
- * PS/2 USART
- */
-#ifdef PS2_USE_USART
-#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
-/* XCK for clock line and RXD for data line */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 5
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 2
-/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
-/* set DDR of CLOCK as input to be slave */
-#define PS2_USART_INIT() do { \
- PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
- PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
- UCSR1C = ((1 << UMSEL10) | \
- (3 << UPM10) | \
- (0 << USBS1) | \
- (3 << UCSZ10) | \
- (0 << UCPOL1)); \
- UCSR1A = 0; \
- UBRR1H = 0; \
- UBRR1L = 0; \
-} while (0)
-#define PS2_USART_RX_INT_ON() do { \
- UCSR1B = ((1 << RXCIE1) | \
- (1 << RXEN1)); \
-} while (0)
-#define PS2_USART_RX_POLL_ON() do { \
- UCSR1B = (1 << RXEN1); \
-} while (0)
-#define PS2_USART_OFF() do { \
- UCSR1C = 0; \
- UCSR1B &= ~((1 << RXEN1) | \
- (1 << TXEN1)); \
-} while (0)
-#define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
-#define PS2_USART_RX_DATA UDR1
-#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
-#define PS2_USART_RX_VECT USART1_RX_vect
-#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__)
-/* XCK for clock line and RXD for data line */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 4
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
-/* set DDR of CLOCK as input to be slave */
-#define PS2_USART_INIT() do { \
- PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
- PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
- UCSR0C = ((1 << UMSEL00) | \
- (3 << UPM00) | \
- (0 << USBS0) | \
- (3 << UCSZ00) | \
- (0 << UCPOL0)); \
- UCSR0A = 0; \
- UBRR0H = 0; \
- UBRR0L = 0; \
-} while (0)
-#define PS2_USART_RX_INT_ON() do { \
- UCSR0B = ((1 << RXCIE0) | \
- (1 << RXEN0)); \
-} while (0)
-#define PS2_USART_RX_POLL_ON() do { \
- UCSR0B = (1 << RXEN0); \
-} while (0)
-#define PS2_USART_OFF() do { \
- UCSR0C = 0; \
- UCSR0B &= ~((1 << RXEN0) | \
- (1 << TXEN0)); \
-} while (0)
-#define PS2_USART_RX_READY (UCSR0A & (1<<RXC0))
-#define PS2_USART_RX_DATA UDR0
-#define PS2_USART_ERROR (UCSR0A & ((1<<FE0) | (1<<DOR0) | (1<<UPE0)))
-#define PS2_USART_RX_VECT USART_RX_vect
-#endif
-#endif
-
-#endif
diff --git a/converter/ps2_usb/config_mbed.h b/converter/ps2_usb/config_mbed.h
deleted file mode 100644
index 5819763e65..0000000000
--- a/converter/ps2_usb/config_mbed.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_MBED_H
-#define CONFIG_MBED_H
-
-
-#if 0
-// duplicated name against mbed USBDeivce
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6512
-#endif
-#define DEVICE_VER 0x0001
-#define MANUFACTURER t.m.k.
-#define PRODUCT PS/2 keyboard converter
-#define DESCRIPTION convert PS/2 keyboard to USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 32 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
- keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-/*
- * PS/2 Busywait
- */
-#ifdef PS2_USE_BUSYWAIT
-# define PS2_CLOCK_PORT PORTD
-# define PS2_CLOCK_PIN PIND
-# define PS2_CLOCK_DDR DDRD
-# define PS2_CLOCK_BIT 5
-# define PS2_DATA_PORT PORTD
-# define PS2_DATA_PIN PIND
-# define PS2_DATA_DDR DDRD
-# define PS2_DATA_BIT 2
-#endif
-
-
-#endif
diff --git a/converter/ps2_usb/config_tmk_rev1.h b/converter/ps2_usb/config_tmk_rev1.h
deleted file mode 100644
index 75dc97df38..0000000000
--- a/converter/ps2_usb/config_tmk_rev1.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include <avr/interrupt.h>
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6512
-#define DEVICE_VER 0x0001
-#define MANUFACTURER t.m.k.
-#define PRODUCT PS/2 keyboard converter
-#define DESCRIPTION convert PS/2 keyboard to USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 32 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
- keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-//#define NO_SUSPEND_POWER_DOWN
-
-
-/*
- * PS/2 Busywait
- */
-#ifdef PS2_USE_BUSYWAIT
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 5
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 2
-#endif
-
-/*
- * PS/2 USART
- */
-#ifdef PS2_USE_USART
-#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
-/* XCK for clock line and RXD for data line */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 5
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 2
-/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
-/* set DDR of CLOCK as input to be slave */
-#define PS2_USART_INIT() do { \
- PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
- PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
- UCSR1C = ((1 << UMSEL10) | \
- (3 << UPM10) | \
- (0 << USBS1) | \
- (3 << UCSZ10) | \
- (0 << UCPOL1)); \
- UCSR1A = 0; \
- UBRR1H = 0; \
- UBRR1L = 0; \
-} while (0)
-#define PS2_USART_RX_INT_ON() do { \
- UCSR1B = ((1 << RXCIE1) | \
- (1 << RXEN1)); \
-} while (0)
-#define PS2_USART_RX_POLL_ON() do { \
- UCSR1B = (1 << RXEN1); \
-} while (0)
-#define PS2_USART_OFF() do { \
- UCSR1C = 0; \
- UCSR1B &= ~((1 << RXEN1) | \
- (1 << TXEN1)); \
-} while (0)
-#define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
-#define PS2_USART_RX_DATA UDR1
-#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
-#define PS2_USART_RX_VECT USART1_RX_vect
-#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__)
-/* XCK for clock line and RXD for data line */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 4
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
-/* set DDR of CLOCK as input to be slave */
-#define PS2_USART_INIT() do { \
- PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
- PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
- UCSR0C = ((1 << UMSEL00) | \
- (3 << UPM00) | \
- (0 << USBS0) | \
- (3 << UCSZ00) | \
- (0 << UCPOL0)); \
- UCSR0A = 0; \
- UBRR0H = 0; \
- UBRR0L = 0; \
-} while (0)
-#define PS2_USART_RX_INT_ON() do { \
- UCSR0B = ((1 << RXCIE0) | \
- (1 << RXEN0)); \
-} while (0)
-#define PS2_USART_RX_POLL_ON() do { \
- UCSR0B = (1 << RXEN0); \
-} while (0)
-#define PS2_USART_OFF() do { \
- UCSR0C = 0; \
- UCSR0B &= ~((1 << RXEN0) | \
- (1 << TXEN0)); \
-} while (0)
-#define PS2_USART_RX_READY (UCSR0A & (1<<RXC0))
-#define PS2_USART_RX_DATA UDR0
-#define PS2_USART_ERROR (UCSR0A & ((1<<FE0) | (1<<DOR0) | (1<<UPE0)))
-#define PS2_USART_RX_VECT USART_RX_vect
-#endif
-#endif
-
-#endif
diff --git a/converter/ps2_usb/config_tmk_rev2.h b/converter/ps2_usb/config_tmk_rev2.h
deleted file mode 100644
index 2e91838e28..0000000000
--- a/converter/ps2_usb/config_tmk_rev2.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include <avr/interrupt.h>
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6512
-#define DEVICE_VER 0x0001
-#define MANUFACTURER t.m.k.
-#define PRODUCT PS/2 keyboard converter
-#define DESCRIPTION convert PS/2 keyboard to USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 32 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-//#define NO_SUSPEND_POWER_DOWN
-
-
-/*
- * PS/2 Busywait
- */
-#ifdef PS2_USE_BUSYWAIT
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-#endif
-
-/*
- * PS/2 Pin interrupt
- */
-#ifdef PS2_USE_INT
-/* uses INT1 for clock line(ATMega32U4) */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-#define PS2_INT_INIT() do { \
- EICRA |= ((1<<ISC11) | \
- (0<<ISC10)); \
-} while (0)
-#define PS2_INT_ON() do { \
- EIMSK |= (1<<INT1); \
-} while (0)
-#define PS2_INT_OFF() do { \
- EIMSK &= ~(1<<INT1); \
-} while (0)
-#define PS2_INT_VECT INT1_vect
-#endif
-
-#endif
diff --git a/converter/ps2_usb/keymap_common.c b/converter/ps2_usb/keymap_common.c
deleted file mode 100644
index e344fb4167..0000000000
--- a/converter/ps2_usb/keymap_common.c
+++ /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)]) };
-}
diff --git a/converter/ps2_usb/keymap_common.h b/converter/ps2_usb/keymap_common.h
deleted file mode 100644
index d783e01ded..0000000000
--- a/converter/ps2_usb/keymap_common.h
+++ /dev/null
@@ -1,173 +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/>.
-*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "report.h"
-#include "print.h"
-#include "debug.h"
-#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, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- K61, /* for European ISO */ \
- K51, K13, K6A, K64, K67, /* for Japanese JIS */ \
- K08, K10, K18, K20, K28, K30, K38, K40, K48, K50, K57, K5F, /* F13-24 */ \
- KB7, KBF, KDE, /* System Power, Sleep, Wake */ \
- KA3, KB2, KA1, /* Mute, Volume Up, Volume Down */ \
- KCD, K95, KBB, KB4, KD0, /* Next, Previous, Stop, Pause, Media Select */ \
- KC8, KAB, KC0, /* Mail, Calculator, My Computer */ \
- K90, KBA, KB8, KB0, /* WWW Search, Home, Back, Forward */ \
- KA8, KA0, K98 /* WWW Stop, Refresh, Favorites */ \
-) { \
- { KC_NO, KC_##K01, KC_NO, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_NO }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_NO }, \
- { KC_##K18, KC_NO, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_NO }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_NO }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_NO }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_NO }, \
- { KC_##K38, KC_NO, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_NO }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_NO, KC_##K54, KC_##K55, KC_NO, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_NO, KC_##K5D, KC_NO, KC_##K5F }, \
- { KC_NO, KC_##K61, KC_NO, KC_NO, KC_##K64, KC_NO, KC_##K66, KC_##K67 }, \
- { KC_NO, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_NO, KC_NO, KC_NO }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_##K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_##K83, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_##K90, KC_##K91, KC_NO, KC_NO, KC_##K94, KC_##K95, KC_NO, KC_NO }, \
- { KC_##K98, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K9F }, \
- { KC_##KA0, KC_##KA1, KC_NO, KC_##KA3, KC_NO, KC_NO, KC_NO, KC_##KA7 }, \
- { KC_##KA8, KC_NO, KC_NO, KC_##KAB, KC_NO, KC_NO, KC_NO, KC_##KAF }, \
- { KC_##KB0, KC_NO, KC_##KB2, KC_NO, KC_##KB4, KC_NO, KC_NO, KC_##KB7 }, \
- { KC_##KB8, KC_NO, KC_##KBA, KC_##KBB, KC_NO, KC_NO, KC_NO, KC_##KBF }, \
- { KC_##KC0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_##KC8, KC_NO, KC_##KCA, KC_NO, KC_NO, KC_##KCD, KC_NO, KC_NO }, \
- { KC_##KD0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_##KDA, KC_NO, KC_NO, KC_NO, KC_##KDE, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_##KE9, KC_NO, KC_##KEB, KC_##KEC, KC_NO, KC_NO, KC_NO }, \
- { KC_##KF0, KC_##KF1, KC_##KF2, KC_NO, KC_##KF4, KC_##KF5, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_##KFA, KC_NO, KC_##KFC, KC_##KFD, KC_##KFE, KC_NO }, \
-}
-
-/* US layout */
-#define KEYMAP( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
-) \
-KEYMAP_ALL( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- NUBS, \
- RO, KANA, JYEN, HENK, MHEN, \
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
- SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
- AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
- MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
- MAIL, CALCULATOR, MY_COMPUTER, \
- WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
- WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
-)
-
-/* ISO layout */
-#define KEYMAP_ISO( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,K5D,K5A, K6B,K73,K74,K79, \
- K12,K61,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
-) \
-KEYMAP_ALL( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- K61, \
- RO, KANA, JYEN, HENK, MHEN, \
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
- SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
- AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
- MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
- MAIL, CALCULATOR, MY_COMPUTER, \
- WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
- WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
-)
-
-/* JIS layout */
-#define KEYMAP_JIS( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K6A,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,K5D, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A,K51, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K67,K29,K64,K13, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
-) \
-KEYMAP_ALL( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- NUBS, \
- K51, K13, K6A, K64, K67, \
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
- SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
- AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
- MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
- MAIL, CALCULATOR, MY_COMPUTER, \
- WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
- WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
-)
-
-#endif
diff --git a/converter/ps2_usb/keymap_jis.c b/converter/ps2_usb/keymap_jis.c
deleted file mode 100644
index 02585150fb..0000000000
--- a/converter/ps2_usb/keymap_jis.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * JIS layout Japanese keyboard
- */
-#include "keymap_common.h"
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: JIS LAYOUT
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|Slp|Wak|
- * `---' `---------------' `---------------' `---------------' `-----------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| JY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Ret | |Del|End|PgD| | 7| 8| 9| |
- * |------------------------------------------------------` | `-----------' |-----------| +|
- * |CapsLo| A| S| D| F| G| H| J| K| L| ;| :| \| | | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Gui |Alt |MHEN| Space |HENK|KANA|Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_JIS(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, DEL, END, PGDN, P7, P8, P9,
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,BSLS, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RO, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, MHEN,SPC, HENK,KANA, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/converter/ps2_usb/keymap_plain.c b/converter/ps2_usb/keymap_plain.c
deleted file mode 100644
index 51b2fddb5b..0000000000
--- a/converter/ps2_usb/keymap_plain.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "keymap_common.h"
-
-
-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| |Pwr|Slp|Wak|
- * `---' `---------------' `---------------' `---------------' `-----------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/converter/ps2_usb/keymap_spacefn.c b/converter/ps2_usb/keymap_spacefn.c
deleted file mode 100644
index bffd2bc606..0000000000
--- a/converter/ps2_usb/keymap_spacefn.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * SpaceFN layout
- * http://geekhack.org/index.php?topic=51069.0
- */
-#include "keymap_common.h"
-
-
-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| |Pwr|Slp|Wak|
- * `---' `---------------' `---------------' `---------------' `-----------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, FN0, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* 1: SpaceFN
- * ,-----------------------------------------------------------.
- * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
- * |-----------------------------------------------------------|
- * | | | |Esc| | | |Hom|Up |End|Psc|Slk|Pau|Ins |
- * |-----------------------------------------------------------|
- * | | | | | | |PgU|Lef|Dow|Rig| | | |
- * |-----------------------------------------------------------|
- * | | | | | |Spc|PgD|` |~ | |Men| |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, DEL, END, PGDN, P7, P8, P9,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, P4, P5, P6, PPLS,
- TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, TRNS, UP, P1, P2, P3,
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
- [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
-};
-
diff --git a/converter/ps2_usb/led.c b/converter/ps2_usb/led.c
deleted file mode 100644
index e448e84ec7..0000000000
--- a/converter/ps2_usb/led.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright 2011 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 "ps2.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- uint8_t ps2_led = 0;
- if (usb_led & (1<<USB_LED_SCROLL_LOCK))
- ps2_led |= (1<<PS2_LED_SCROLL_LOCK);
- if (usb_led & (1<<USB_LED_NUM_LOCK))
- ps2_led |= (1<<PS2_LED_NUM_LOCK);
- if (usb_led & (1<<USB_LED_CAPS_LOCK))
- ps2_led |= (1<<PS2_LED_CAPS_LOCK);
- ps2_host_set_led(ps2_led);
-}
diff --git a/converter/ps2_usb/main.cpp b/converter/ps2_usb/main.cpp
deleted file mode 100644
index 860af149a0..0000000000
--- a/converter/ps2_usb/main.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "mbed.h"
-#include "debug.h"
-#include "timer.h"
-#include "action.h"
-#include "keycode.h"
-#include "host.h"
-#include "host_driver.h"
-#include "mbed_driver.h"
-
-
-// Button and LEDs of LPC11U35 board
-DigitalIn isp(P0_1); // ISP button
-DigitalOut led_red(P0_20);
-DigitalOut led_green(P0_21);
-
-
-int main(void) {
- isp.mode(PullUp);
- led_red = 1;
- led_green = 0;
-
- timer_init();
- host_set_driver(&mbed_driver);
- keyboard_init();
-
- //debug_enable = true;
- xprintf("mbed_onekey ver.eee:\r\n");
-
-
- bool last_isp = isp;
- while (1) {
- keyboard_task();
-
- //led_green = !led_green;
- if (last_isp == isp) continue;
- last_isp = isp;
- if (last_isp == 0) {
- led_red = 0; // on
- dprintf("timer: %i\r\n", timer_read());
- //register_code(KC_A);
- } else {
- led_red = 1; // off
- //unregister_code(KC_A);
- }
- }
-}
diff --git a/converter/ps2_usb/matrix.c b/converter/ps2_usb/matrix.c
deleted file mode 100644
index 45cf2a4a90..0000000000
--- a/converter/ps2_usb/matrix.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
-Copyright 2011 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 <stdbool.h>
-#include "action.h"
-#include "print.h"
-#include "util.h"
-#include "debug.h"
-#include "ps2.h"
-#include "matrix.h"
-
-
-static void matrix_make(uint8_t code);
-static void matrix_break(uint8_t code);
-static void matrix_clear(void);
-#ifdef MATRIX_HAS_GHOST
-static bool matrix_has_ghost_in_row(uint8_t row);
-#endif
-
-
-/*
- * Matrix Array usage:
- * 'Scan Code Set 2' is assigned into 256(32x8)cell matrix.
- * Hmm, it is very sparse and not efficient :(
- *
- * Notes:
- * Both 'Hanguel/English'(F1) and 'Hanja'(F2) collide with 'Delete'(E0 71) and 'Down'(E0 72).
- * These two Korean keys need exceptional handling and are not supported for now. Sorry.
- *
- * 8bit wide
- * +---------+
- * 0| |
- * :| XX | 00-7F for normal codes(without E0-prefix)
- * f|_________|
- * 10| |
- * :| E0 YY | 80-FF for E0-prefixed codes
- * 1f| | (<YY>|0x80) is used as matrix position.
- * +---------+
- *
- * Exceptions:
- * 0x83: F7(0x83) This is a normal code but beyond 0x7F.
- * 0xFC: PrintScreen
- * 0xFE: Pause
- */
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) (code>>3)
-#define COL(code) (code&0x07)
-
-// matrix positions for exceptional keys
-#define F7 (0x83)
-#define PRINT_SCREEN (0xFC)
-#define PAUSE (0xFE)
-
-static bool is_modified = false;
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- debug_enable = true;
- ps2_host_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- return;
-}
-
-/*
- * PS/2 Scan Code Set 2: Exceptional Handling
- *
- * There are several keys to be handled exceptionally.
- * The scan code for these keys are varied or prefix/postfix'd
- * depending on modifier key state.
- *
- * Keyboard Scan Code Specification:
- * http://www.microsoft.com/whdc/archive/scancode.mspx
- * http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
- *
- *
- * 1) Insert, Delete, Home, End, PageUp, PageDown, Up, Down, Right, Left
- * a) when Num Lock is off
- * modifiers | make | break
- * ----------+---------------------------+----------------------
- * Ohter | <make> | <break>
- * LShift | E0 F0 12 <make> | <break> E0 12
- * RShift | E0 F0 59 <make> | <break> E0 59
- * L+RShift | E0 F0 12 E0 F0 59 <make> | <break> E0 59 E0 12
- *
- * b) when Num Lock is on
- * modifiers | make | break
- * ----------+---------------------------+----------------------
- * Other | E0 12 <make> | <break> E0 F0 12
- * Shift'd | <make> | <break>
- *
- * Handling: These prefix/postfix codes are ignored.
- *
- *
- * 2) Keypad /
- * modifiers | make | break
- * ----------+---------------------------+----------------------
- * Ohter | <make> | <break>
- * LShift | E0 F0 12 <make> | <break> E0 12
- * RShift | E0 F0 59 <make> | <break> E0 59
- * L+RShift | E0 F0 12 E0 F0 59 <make> | <break> E0 59 E0 12
- *
- * Handling: These prefix/postfix codes are ignored.
- *
- *
- * 3) PrintScreen
- * modifiers | make | break
- * ----------+--------------+-----------------------------------
- * Other | E0 12 E0 7C | E0 F0 7C E0 F0 12
- * Shift'd | E0 7C | E0 F0 7C
- * Control'd | E0 7C | E0 F0 7C
- * Alt'd | 84 | F0 84
- *
- * Handling: These prefix/postfix codes are ignored, and both scan codes
- * 'E0 7C' and 84 are seen as PrintScreen.
- *
- * 4) Pause
- * modifiers | make(no break code)
- * ----------+--------------------------------------------------
- * Other | E1 14 77 E1 F0 14 F0 77
- * Control'd | E0 7E E0 F0 7E
- *
- * Handling: Both code sequences are treated as a whole.
- * And we need a ad hoc 'pseudo break code' hack to get the key off
- * because it has no break code.
- *
- */
-uint8_t matrix_scan(void)
-{
-
- // scan code reading states
- static enum {
- INIT,
- F0,
- E0,
- E0_F0,
- // Pause
- E1,
- E1_14,
- E1_14_77,
- E1_14_77_E1,
- E1_14_77_E1_F0,
- E1_14_77_E1_F0_14,
- E1_14_77_E1_F0_14_F0,
- // Control'd Pause
- E0_7E,
- E0_7E_E0,
- E0_7E_E0_F0,
- } state = INIT;
-
-
- is_modified = false;
-
- // 'pseudo break code' hack
- if (matrix_is_on(ROW(PAUSE), COL(PAUSE))) {
- matrix_break(PAUSE);
- }
-
- uint8_t code = ps2_host_recv();
- if (code) xprintf("%i\r\n", code);
- if (!ps2_error) {
- switch (state) {
- case INIT:
- switch (code) {
- case 0xE0:
- state = E0;
- break;
- case 0xF0:
- state = F0;
- break;
- case 0xE1:
- state = E1;
- break;
- case 0x83: // F7
- matrix_make(F7);
- state = INIT;
- break;
- case 0x84: // Alt'd PrintScreen
- matrix_make(PRINT_SCREEN);
- state = INIT;
- break;
- case 0x00: // Overrun [3]p.25
- matrix_clear();
- clear_keyboard();
- print("Overrun\n");
- state = INIT;
- break;
- default: // normal key make
- if (code < 0x80) {
- matrix_make(code);
- } else {
- matrix_clear();
- clear_keyboard();
- xprintf("unexpected scan code at INIT: %02X\n", code);
- }
- state = INIT;
- }
- break;
- case E0: // E0-Prefixed
- switch (code) {
- case 0x12: // to be ignored
- case 0x59: // to be ignored
- state = INIT;
- break;
- case 0x7E: // Control'd Pause
- state = E0_7E;
- break;
- case 0xF0:
- state = E0_F0;
- break;
- default:
- if (code < 0x80) {
- matrix_make(code|0x80);
- } else {
- matrix_clear();
- clear_keyboard();
- xprintf("unexpected scan code at E0: %02X\n", code);
- }
- state = INIT;
- }
- break;
- case F0: // Break code
- switch (code) {
- case 0x83: // F7
- matrix_break(F7);
- state = INIT;
- break;
- case 0x84: // Alt'd PrintScreen
- matrix_break(PRINT_SCREEN);
- state = INIT;
- break;
- case 0xF0:
- matrix_clear();
- clear_keyboard();
- xprintf("unexpected scan code at F0: F0(clear and cont.)\n");
- break;
- default:
- if (code < 0x80) {
- matrix_break(code);
- } else {
- matrix_clear();
- clear_keyboard();
- xprintf("unexpected scan code at F0: %02X\n", code);
- }
- state = INIT;
- }
- break;
- case E0_F0: // Break code of E0-prefixed
- switch (code) {
- case 0x12: // to be ignored
- case 0x59: // to be ignored
- state = INIT;
- break;
- default:
- if (code < 0x80) {
- matrix_break(code|0x80);
- } else {
- matrix_clear();
- clear_keyboard();
- xprintf("unexpected scan code at E0_F0: %02X\n", code);
- }
- state = INIT;
- }
- break;
- // following are states of Pause
- case E1:
- switch (code) {
- case 0x14:
- state = E1_14;
- break;
- default:
- state = INIT;
- }
- break;
- case E1_14:
- switch (code) {
- case 0x77:
- state = E1_14_77;
- break;
- default:
- state = INIT;
- }
- break;
- case E1_14_77:
- switch (code) {
- case 0xE1:
- state = E1_14_77_E1;
- break;
- default:
- state = INIT;
- }
- break;
- case E1_14_77_E1:
- switch (code) {
- case 0xF0:
- state = E1_14_77_E1_F0;
- break;
- default:
- state = INIT;
- }
- break;
- case E1_14_77_E1_F0:
- switch (code) {
- case 0x14:
- state = E1_14_77_E1_F0_14;
- break;
- default:
- state = INIT;
- }
- break;
- case E1_14_77_E1_F0_14:
- switch (code) {
- case 0xF0:
- state = E1_14_77_E1_F0_14_F0;
- break;
- default:
- state = INIT;
- }
- break;
- case E1_14_77_E1_F0_14_F0:
- switch (code) {
- case 0x77:
- matrix_make(PAUSE);
- state = INIT;
- break;
- default:
- state = INIT;
- }
- break;
- // Following are states of Control'd Pause
- case E0_7E:
- if (code == 0xE0)
- state = E0_7E_E0;
- else
- state = INIT;
- break;
- case E0_7E_E0:
- if (code == 0xF0)
- state = E0_7E_E0_F0;
- else
- state = INIT;
- break;
- case E0_7E_E0_F0:
- if (code == 0x7E)
- matrix_make(PAUSE);
- state = INIT;
- break;
- default:
- state = INIT;
- }
- }
-
- // TODO: request RESEND when error occurs?
-/*
- if (PS2_IS_FAILED(ps2_error)) {
- uint8_t ret = ps2_host_send(PS2_RESEND);
- xprintf("Resend: %02X\n", ret);
- }
-*/
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
-#ifdef MATRIX_HAS_GHOST
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- if (matrix_has_ghost_in_row(i))
- return true;
- }
-#endif
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
-#ifdef MATRIX_HAS_GHOST
- if (matrix_has_ghost_in_row(row)) {
- print(" <ghost");
- }
-#endif
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
-
-#ifdef MATRIX_HAS_GHOST
-inline
-static bool matrix_has_ghost_in_row(uint8_t row)
-{
- // no ghost exists in case less than 2 keys on
- if (((matrix[row] - 1) & matrix[row]) == 0)
- return false;
-
- // ghost exists in case same state as other row
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- if (i != row && (matrix[i] & matrix[row]) == matrix[row])
- return true;
- }
- return false;
-}
-#endif
-
-
-inline
-static void matrix_make(uint8_t code)
-{
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= 1<<COL(code);
- is_modified = true;
- }
-}
-
-inline
-static void matrix_break(uint8_t code)
-{
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
-}
-
-inline
-static void matrix_clear(void)
-{
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-}
diff --git a/converter/ps2_usb/usbconfig.h b/converter/ps2_usb/usbconfig.h
deleted file mode 100644
index d0ca4c717e..0000000000
--- a/converter/ps2_usb/usbconfig.h
+++ /dev/null
@@ -1,377 +0,0 @@
-/* Name: usbconfig.h
- * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
- * Author: Christian Starkjohann
- * Creation Date: 2005-04-01
- * Tabsize: 4
- * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
- * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
- * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
- */
-
-#ifndef __usbconfig_h_included__
-#define __usbconfig_h_included__
-
-
-/*
-General Description:
-This file is an example configuration (with inline documentation) for the USB
-driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
-also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
-wire the lines to any other port, as long as D+ is also wired to INT0 (or any
-other hardware interrupt, as long as it is the highest level interrupt, see
-section at the end of this file).
-*/
-
-/* ---------------------------- Hardware Config ---------------------------- */
-
-#define USB_CFG_IOPORTNAME D
-/* This is the port where the USB bus is connected. When you configure it to
- * "B", the registers PORTB, PINB and DDRB will be used.
- */
-#define USB_CFG_DMINUS_BIT 3
-/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
- * This may be any bit in the port.
- */
-#define USB_CFG_DPLUS_BIT 2
-/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
- * This may be any bit in the port. Please note that D+ must also be connected
- * to interrupt pin INT0! [You can also use other interrupts, see section
- * "Optional MCU Description" below, or you can connect D- to the interrupt, as
- * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
- * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
- * markers every millisecond.]
- */
-#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
-/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
- * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
- * require no crystal, they tolerate +/- 1% deviation from the nominal
- * frequency. All other rates require a precision of 2000 ppm and thus a
- * crystal!
- * Since F_CPU should be defined to your actual clock rate anyway, you should
- * not need to modify this setting.
- */
-#define USB_CFG_CHECK_CRC 0
-/* Define this to 1 if you want that the driver checks integrity of incoming
- * data packets (CRC checks). CRC checks cost quite a bit of code size and are
- * currently only available for 18 MHz crystal clock. You must choose
- * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
- */
-
-/* ----------------------- Optional Hardware Config ------------------------ */
-
-/* #define USB_CFG_PULLUP_IOPORTNAME D */
-/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
- * V+, you can connect and disconnect the device from firmware by calling
- * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
- * This constant defines the port on which the pullup resistor is connected.
- */
-/* #define USB_CFG_PULLUP_BIT 4 */
-/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
- * above) where the 1.5k pullup resistor is connected. See description
- * above for details.
- */
-
-/* --------------------------- Functional Range ---------------------------- */
-
-#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
-/* Define this to 1 if you want to compile a version with two endpoints: The
- * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
- * number).
- */
-#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
-/* Define this to 1 if you want to compile a version with three endpoints: The
- * default control endpoint 0, an interrupt-in endpoint 3 (or the number
- * configured below) and a catch-all default interrupt-in endpoint as above.
- * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
- */
-#define USB_CFG_EP3_NUMBER 3
-/* If the so-called endpoint 3 is used, it can now be configured to any other
- * endpoint number (except 0) with this macro. Default if undefined is 3.
- */
-/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
-/* The above macro defines the startup condition for data toggling on the
- * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
- * Since the token is toggled BEFORE sending any data, the first packet is
- * sent with the oposite value of this configuration!
- */
-#define USB_CFG_IMPLEMENT_HALT 0
-/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
- * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
- * it is required by the standard. We have made it a config option because it
- * bloats the code considerably.
- */
-#define USB_CFG_SUPPRESS_INTR_CODE 0
-/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
- * want to send any data over them. If this macro is defined to 1, functions
- * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
- * you need the interrupt-in endpoints in order to comply to an interface
- * (e.g. HID), but never want to send any data. This option saves a couple
- * of bytes in flash memory and the transmit buffers in RAM.
- */
-#define USB_CFG_INTR_POLL_INTERVAL 10
-/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
- * interval. The value is in milliseconds and must not be less than 10 ms for
- * low speed devices.
- */
-#define USB_CFG_IS_SELF_POWERED 0
-/* Define this to 1 if the device has its own power supply. Set it to 0 if the
- * device is powered from the USB bus.
- */
-#define USB_CFG_MAX_BUS_POWER 100
-/* Set this variable to the maximum USB bus power consumption of your device.
- * The value is in milliamperes. [It will be divided by two since USB
- * communicates power requirements in units of 2 mA.]
- */
-#define USB_CFG_IMPLEMENT_FN_WRITE 1
-/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
- * transfers. Set it to 0 if you don't need it and want to save a couple of
- * bytes.
- */
-#define USB_CFG_IMPLEMENT_FN_READ 0
-/* Set this to 1 if you need to send control replies which are generated
- * "on the fly" when usbFunctionRead() is called. If you only want to send
- * data from a static buffer, set it to 0 and return the data from
- * usbFunctionSetup(). This saves a couple of bytes.
- */
-#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
-/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
- * You must implement the function usbFunctionWriteOut() which receives all
- * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
- * can be found in 'usbRxToken'.
- */
-#define USB_CFG_HAVE_FLOWCONTROL 0
-/* Define this to 1 if you want flowcontrol over USB data. See the definition
- * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
- * usbdrv.h.
- */
-#define USB_CFG_DRIVER_FLASH_PAGE 0
-/* If the device has more than 64 kBytes of flash, define this to the 64 k page
- * where the driver's constants (descriptors) are located. Or in other words:
- * Define this to 1 for boot loaders on the ATMega128.
- */
-#define USB_CFG_LONG_TRANSFERS 0
-/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
- * in a single control-in or control-out transfer. Note that the capability
- * for long transfers increases the driver size.
- */
-/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
-/* This macro is a hook if you want to do unconventional things. If it is
- * defined, it's inserted at the beginning of received message processing.
- * If you eat the received message and don't want default processing to
- * proceed, do a return after doing your things. One possible application
- * (besides debugging) is to flash a status LED on each packet.
- */
-/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
-/* This macro is a hook if you need to know when an USB RESET occurs. It has
- * one parameter which distinguishes between the start of RESET state and its
- * end.
- */
-/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
-/* This macro (if defined) is executed when a USB SET_ADDRESS request was
- * received.
- */
-#define USB_COUNT_SOF 0
-/* define this macro to 1 if you need the global variable "usbSofCount" which
- * counts SOF packets. This feature requires that the hardware interrupt is
- * connected to D- instead of D+.
- */
-/* #ifdef __ASSEMBLER__
- * macro myAssemblerMacro
- * in YL, TCNT0
- * sts timer0Snapshot, YL
- * endm
- * #endif
- * #define USB_SOF_HOOK myAssemblerMacro
- * This macro (if defined) is executed in the assembler module when a
- * Start Of Frame condition is detected. It is recommended to define it to
- * the name of an assembler macro which is defined here as well so that more
- * than one assembler instruction can be used. The macro may use the register
- * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
- * immediately after an SOF pulse may be lost and must be retried by the host.
- * What can you do with this hook? Since the SOF signal occurs exactly every
- * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
- * designs running on the internal RC oscillator.
- * Please note that Start Of Frame detection works only if D- is wired to the
- * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
- */
-#define USB_CFG_CHECK_DATA_TOGGLING 0
-/* define this macro to 1 if you want to filter out duplicate data packets
- * sent by the host. Duplicates occur only as a consequence of communication
- * errors, when the host does not receive an ACK. Please note that you need to
- * implement the filtering yourself in usbFunctionWriteOut() and
- * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
- * for each control- and out-endpoint to check for duplicate packets.
- */
-#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
-/* define this macro to 1 if you want the function usbMeasureFrameLength()
- * compiled in. This function can be used to calibrate the AVR's RC oscillator.
- */
-#define USB_USE_FAST_CRC 0
-/* The assembler module has two implementations for the CRC algorithm. One is
- * faster, the other is smaller. This CRC routine is only used for transmitted
- * messages where timing is not critical. The faster routine needs 31 cycles
- * per byte while the smaller one needs 61 to 69 cycles. The faster routine
- * may be worth the 32 bytes bigger code size if you transmit lots of data and
- * run the AVR close to its limit.
- */
-
-/* -------------------------- Device Description --------------------------- */
-
-#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
-/* USB vendor ID for the device, low byte first. If you have registered your
- * own Vendor ID, define it here. Otherwise you may use one of obdev's free
- * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
- * *** IMPORTANT NOTE ***
- * This template uses obdev's shared VID/PID pair for Vendor Class devices
- * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
- * the implications!
- */
-#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
-/* This is the ID of the product, low byte first. It is interpreted in the
- * scope of the vendor ID. If you have registered your own VID with usb.org
- * or if you have licensed a PID from somebody else, define it here. Otherwise
- * you may use one of obdev's free shared VID/PID pairs. See the file
- * USB-IDs-for-free.txt for details!
- * *** IMPORTANT NOTE ***
- * This template uses obdev's shared VID/PID pair for Vendor Class devices
- * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
- * the implications!
- */
-#define USB_CFG_DEVICE_VERSION 0x00, 0x01
-/* Version number of the device: Minor number first, then major number.
- */
-#define USB_CFG_VENDOR_NAME 't', '.', 'm', '.', 'k', '.'
-#define USB_CFG_VENDOR_NAME_LEN 6
-/* These two values define the vendor name returned by the USB device. The name
- * must be given as a list of characters under single quotes. The characters
- * are interpreted as Unicode (UTF-16) entities.
- * If you don't want a vendor name string, undefine these macros.
- * ALWAYS define a vendor name containing your Internet domain name if you use
- * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
- * details.
- */
-#define USB_CFG_DEVICE_NAME 'P', 'S', '/', '2', ' ', 'k', 'e', 'y', 'b', 'o', 'a', 'r', 'd', ' ', 'c', 'o', 'n', 'v', 'e', 'r', 't', 'e', 'r'
-#define USB_CFG_DEVICE_NAME_LEN 23
-/* Same as above for the device name. If you don't want a device name, undefine
- * the macros. See the file USB-IDs-for-free.txt before you assign a name if
- * you use a shared VID/PID.
- */
-/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
-/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
-/* Same as above for the serial number. If you don't want a serial number,
- * undefine the macros.
- * It may be useful to provide the serial number through other means than at
- * compile time. See the section about descriptor properties below for how
- * to fine tune control over USB descriptors such as the string descriptor
- * for the serial number.
- */
-#define USB_CFG_DEVICE_CLASS 0
-#define USB_CFG_DEVICE_SUBCLASS 0
-/* See USB specification if you want to conform to an existing device class.
- * Class 0xff is "vendor specific".
- */
-#define USB_CFG_INTERFACE_CLASS 3 /* HID */
-#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
-#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
-/* See USB specification if you want to conform to an existing device class or
- * protocol. The following classes must be set at interface level:
- * HID class is 3, no subclass and protocol required (but may be useful!)
- * CDC class is 2, use subclass 2 and protocol 1 for ACM
- */
-#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
-/* Define this to the length of the HID report descriptor, if you implement
- * an HID device. Otherwise don't define it or define it to 0.
- * If you use this define, you must add a PROGMEM character array named
- * "usbHidReportDescriptor" to your code which contains the report descriptor.
- * Don't forget to keep the array and this define in sync!
- */
-
-/* #define USB_PUBLIC static */
-/* Use the define above if you #include usbdrv.c instead of linking against it.
- * This technique saves a couple of bytes in flash memory.
- */
-
-/* ------------------- Fine Control over USB Descriptors ------------------- */
-/* If you don't want to use the driver's default USB descriptors, you can
- * provide our own. These can be provided as (1) fixed length static data in
- * flash memory, (2) fixed length static data in RAM or (3) dynamically at
- * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
- * information about this function.
- * Descriptor handling is configured through the descriptor's properties. If
- * no properties are defined or if they are 0, the default descriptor is used.
- * Possible properties are:
- * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
- * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
- * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
- * you want RAM pointers.
- * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
- * in static memory is in RAM, not in flash memory.
- * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
- * the driver must know the descriptor's length. The descriptor itself is
- * found at the address of a well known identifier (see below).
- * List of static descriptor names (must be declared PROGMEM if in flash):
- * char usbDescriptorDevice[];
- * char usbDescriptorConfiguration[];
- * char usbDescriptorHidReport[];
- * char usbDescriptorString0[];
- * int usbDescriptorStringVendor[];
- * int usbDescriptorStringDevice[];
- * int usbDescriptorStringSerialNumber[];
- * Other descriptors can't be provided statically, they must be provided
- * dynamically at runtime.
- *
- * Descriptor properties are or-ed or added together, e.g.:
- * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
- *
- * The following descriptors are defined:
- * USB_CFG_DESCR_PROPS_DEVICE
- * USB_CFG_DESCR_PROPS_CONFIGURATION
- * USB_CFG_DESCR_PROPS_STRINGS
- * USB_CFG_DESCR_PROPS_STRING_0
- * USB_CFG_DESCR_PROPS_STRING_VENDOR
- * USB_CFG_DESCR_PROPS_STRING_PRODUCT
- * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
- * USB_CFG_DESCR_PROPS_HID
- * USB_CFG_DESCR_PROPS_HID_REPORT
- * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
- *
- * Note about string descriptors: String descriptors are not just strings, they
- * are Unicode strings prefixed with a 2 byte header. Example:
- * int serialNumberDescriptor[] = {
- * USB_STRING_DESCRIPTOR_HEADER(6),
- * 'S', 'e', 'r', 'i', 'a', 'l'
- * };
- */
-
-#define USB_CFG_DESCR_PROPS_DEVICE 0
-#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
-//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
-#define USB_CFG_DESCR_PROPS_STRINGS 0
-#define USB_CFG_DESCR_PROPS_STRING_0 0
-#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
-#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
-#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
-//#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
-#define USB_CFG_DESCR_PROPS_HID 0
-#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
-//#define USB_CFG_DESCR_PROPS_HID_REPORT 0
-#define USB_CFG_DESCR_PROPS_UNKNOWN 0
-
-/* ----------------------- Optional MCU Description ------------------------ */
-
-/* The following configurations have working defaults in usbdrv.h. You
- * usually don't need to set them explicitly. Only if you want to run
- * the driver on a device which is not yet supported or with a compiler
- * which is not fully supported (such as IAR C) or if you use a differnt
- * interrupt than INT0, you may have to define some of these.
- */
-/* #define USB_INTR_CFG MCUCR */
-/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
-/* #define USB_INTR_CFG_CLR 0 */
-/* #define USB_INTR_ENABLE GIMSK */
-/* #define USB_INTR_ENABLE_BIT INT0 */
-/* #define USB_INTR_PENDING GIFR */
-/* #define USB_INTR_PENDING_BIT INTF0 */
-/* #define USB_INTR_VECTOR INT0_vect */
-
-#endif /* __usbconfig_h_included__ */
diff --git a/converter/serialmouse_usb/Makefile b/converter/serialmouse_usb/Makefile
deleted file mode 100644
index 34f550b314..0000000000
--- a/converter/serialmouse_usb/Makefile
+++ /dev/null
@@ -1,106 +0,0 @@
-#
-# Makefile for Teensy
-#
-# Target file name (without extension).
-TARGET = serialmouse_usb
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# project specific files
-SRC = keymap.c \
- matrix.c \
- led.c
-
-CONFIG_H = config.h
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=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
-#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-
-
-# Serial Mouse Options
-# You can choose a mouse protocol and the implementation of
-# the underlying serial connection.
-#
-SERIAL_MOUSE_MICROSOFT_ENABLE = yes # Enable support for Microsoft-compatible mice
-#SERIAL_MOUSE_MOUSESYSTEMS_ENABLE = yes # Enable support for Mousesystems-compatible mice
-#SERIAL_MOUSE_USE_UART = yes # use hardware UART for serial connection
-SERIAL_MOUSE_USE_SOFT = yes # use software serial implementation
-
-# Optional serial mouse driver features
-# Support scrolling while holding the middle mouse button
-# (currently only supported for Mousesystems mice):
-#OPT_DEFS += -DSERIAL_MOUSE_CENTER_SCROLL
-
-# 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.mk
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/serialmouse_usb/README.md b/converter/serialmouse_usb/README.md
deleted file mode 100644
index ef8a006716..0000000000
--- a/converter/serialmouse_usb/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-Serial mouse converter
-======================
-See https://github.com/tmk/tmk_keyboard/pull/131
-
-
-Supported protocols
--------------------
-### Microsoft
-Not tested.
-
-### Mousesystems
diff --git a/converter/serialmouse_usb/config.h b/converter/serialmouse_usb/config.h
deleted file mode 100644
index b257d997cf..0000000000
--- a/converter/serialmouse_usb/config.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include <avr/interrupt.h>
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x2222
-#define DEVICE_VER 0x0001
-#define MANUFACTURER t.m.k.
-#define PRODUCT serial mouse converter
-#define DESCRIPTION convert serial mouse into USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 0
-#define MATRIX_COLS 0
-
-
-/* key combination for command */
-#define IS_COMMAND() false
-
-
-
-#ifdef SERIAL_MOUSE_MICROSOFT
- /*
- * Serial(USART) configuration (for Microsoft serial mice)
- * asynchronous, positive logic, 1200baud, bit order: LSB first
- * 1-start bit, 7-data bit, no parity, 1-stop bit
- */
- #define SERIAL_UART_BAUD 1200
- #define SERIAL_UART_DATA UDR1
- #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
- #define SERIAL_UART_RXD_VECT USART1_RX_vect
- #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
- #define SERIAL_UART_INIT() do { \
- UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
- UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
- UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \
- UCSR1C = (1<<UCSZ11) | (0<<UCSZ10); /* no parity, 1 stop bit, 7-bit characters */ \
- sei(); \
- } while(0)
-
- // for Microsoft mouse protocol
- /* Serial(USART) configuration
- * asynchronous, negative logic, 1200baud, no flow control
- * 1-start bit, 7-data bit, non parity, 1-stop bit
- */
- #define SERIAL_SOFT_BAUD 1200
- #define SERIAL_SOFT_DATA_7BIT
- #define SERIAL_SOFT_PARITY_NONE
- #define SERIAL_SOFT_BIT_ORDER_LSB
- #define SERIAL_SOFT_LOGIC_NEGATIVE
- /* RXD Port */
- #define SERIAL_SOFT_RXD_DDR DDRD
- #define SERIAL_SOFT_RXD_PORT PORTD
- #define SERIAL_SOFT_RXD_PIN PIND
- #define SERIAL_SOFT_RXD_BIT 2
- #define SERIAL_SOFT_RXD_VECT INT2_vect
- /* RXD Interupt */
- #define SERIAL_SOFT_RXD_INIT() do { \
- /* pin configuration: input with pull-up */ \
- SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
- SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
- /* enable interrupt: INT2(rising edge) */ \
- EICRA |= ((1<<ISC21)|(1<<ISC20)); \
- EIMSK |= (1<<INT2); \
- sei(); \
- } while (0)
- #define SERIAL_SOFT_RXD_INT_ENTER()
- #define SERIAL_SOFT_RXD_INT_EXIT() do { \
- /* clear interrupt flag */ \
- EIFR = (1<<INTF2); \
- } while (0)
- #define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
- /* TXD Port */
- #define SERIAL_SOFT_TXD_HI()
- #define SERIAL_SOFT_TXD_LO()
- #define SERIAL_SOFT_TXD_INIT()
-#elif defined(SERIAL_MOUSE_MOUSESYSTEMS)
- /*
- * Serial(USART) configuration (for Mousesystems serial mice)
- * asynchronous, positive logic, 1200baud, bit order: LSB first
- * 1-start bit, 8-data bit, no parity, 1-stop bit
- */
- #define SERIAL_UART_BAUD 1200
- #define SERIAL_UART_DATA UDR1
- #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
- #define SERIAL_UART_RXD_VECT USART1_RX_vect
- #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
- #define SERIAL_UART_INIT() do { \
- UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
- UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
- UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \
- UCSR1C = (1<<UCSZ11) | (1<<UCSZ10); /* no parity, 1 stop bit, 8-bit characters */ \
- sei(); \
- } while(0)
-#endif
-
-
-
-
-#endif
diff --git a/converter/serialmouse_usb/keymap.c b/converter/serialmouse_usb/keymap.c
deleted file mode 100644
index cb78b4d195..0000000000
--- a/converter/serialmouse_usb/keymap.c
+++ /dev/null
@@ -1,33 +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 <stdint.h>
-#include <stdbool.h>
-#include "keymap.h"
-
-
-/* translates key to keycode */
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
- return KC_NO;
-}
-
-/* translates Fn keycode to action */
-action_t keymap_fn_to_action(uint8_t keycode)
-{
- return (action_t){};
-}
-
diff --git a/converter/serialmouse_usb/keymap_common.c b/converter/serialmouse_usb/keymap_common.c
deleted file mode 100644
index 55a13793cb..0000000000
--- a/converter/serialmouse_usb/keymap_common.c
+++ /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)]) };
-}
diff --git a/converter/serialmouse_usb/keymap_common.h b/converter/serialmouse_usb/keymap_common.h
deleted file mode 100644
index 216a8dc020..0000000000
--- a/converter/serialmouse_usb/keymap_common.h
+++ /dev/null
@@ -1,174 +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/>.
-*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "report.h"
-#include "print.h"
-#include "debug.h"
-#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, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- K61, /* for European ISO */ \
- K51, K13, K6A, K64, K67, /* for Japanese JIS */ \
- K08, K10, K18, K20, K28, K30, K38, K40, K48, K50, K57, K5F, /* F13-24 */ \
- KB7, KBF, KDE, /* System Power, Sleep, Wake */ \
- KA3, KB2, KA1, /* Mute, Volume Up, Volume Down */ \
- KCD, K95, KBB, KB4, KD0, /* Next, Previous, Stop, Pause, Media Select */ \
- KC8, KAB, KC0, /* Mail, Calculator, My Computer */ \
- K90, KBA, KB8, KB0, /* WWW Search, Home, Back, Forward */ \
- KA8, KA0, K98 /* WWW Stop, Refresh, Favorites */ \
-) { \
- { KC_NO, KC_##K01, KC_NO, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_NO }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_NO }, \
- { KC_##K18, KC_NO, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_NO }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_NO }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_NO }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_NO }, \
- { KC_##K38, KC_NO, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_NO }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_NO, KC_##K54, KC_##K55, KC_NO, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_NO, KC_##K5D, KC_NO, KC_##K5F }, \
- { KC_NO, KC_##K61, KC_NO, KC_NO, KC_##K64, KC_NO, KC_##K66, KC_##K67 }, \
- { KC_NO, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_NO, KC_NO, KC_NO }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_##K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_##K83, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_##K90, KC_##K91, KC_NO, KC_NO, KC_##K94, KC_##K95, KC_NO, KC_NO }, \
- { KC_##K98, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K9F }, \
- { KC_##KA0, KC_##KA1, KC_NO, KC_##KA3, KC_NO, KC_NO, KC_NO, KC_##KA7 }, \
- { KC_##KA8, KC_NO, KC_NO, KC_##KAB, KC_NO, KC_NO, KC_NO, KC_##KAF }, \
- { KC_##KB0, KC_NO, KC_##KB2, KC_NO, KC_##KB4, KC_NO, KC_NO, KC_##KB7 }, \
- { KC_##KB8, KC_NO, KC_##KBA, KC_##KBB, KC_NO, KC_NO, KC_NO, KC_##KBF }, \
- { KC_##KC0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_##KC8, KC_NO, KC_##KCA, KC_NO, KC_NO, KC_##KCD, KC_NO, KC_NO }, \
- { KC_##KD0, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_##KDA, KC_NO, KC_NO, KC_NO, KC_##KDE, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_##KE9, KC_NO, KC_##KEB, KC_##KEC, KC_NO, KC_NO, KC_NO }, \
- { KC_##KF0, KC_##KF1, KC_##KF2, KC_NO, KC_##KF4, KC_##KF5, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_##KFA, KC_NO, KC_##KFC, KC_##KFD, KC_##KFE, KC_NO }, \
-}
-
-/* US layout */
-#define KEYMAP( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
-) \
-KEYMAP_ALL( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- NUBS, \
- RO, KANA, JYEN, HENK, MHEN, \
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
- SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
- AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
- MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
- MAIL, CALCULATOR, MY_COMPUTER, \
- WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
- WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
-)
-
-/* ISO layout */
-#define KEYMAP_ISO( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,K5D,K5A, K6B,K73,K74,K79, \
- K12,K61,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
-) \
-KEYMAP_ALL( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- K61, \
- RO, KANA, JYEN, HENK, MHEN, \
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
- SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
- AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
- MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
- MAIL, CALCULATOR, MY_COMPUTER, \
- WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
- WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
-)
-
-/* JIS layout */
-#define KEYMAP_JIS( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K6A,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,K5D, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A,K51, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K67,K29,K64,K13, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA \
-) \
-KEYMAP_ALL( \
- K76,K05,K06,K04,K0C,K03,K0B,K83,K0A,K01,K09,K78,K07, KFC,K7E,KFE, \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, KF0,KEC,KFD, K77,KCA,K7C,K7B, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5D, KF1,KE9,KFA, K6C,K75,K7D, \
- K58,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K79, \
- K12,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, KF5, K69,K72,K7A, \
- K14,K9F,K11, K29, K91,KA7,KAF,K94, KEB,KF2,KF4, K70, K71,KDA, \
- \
- NUBS, \
- K51, K13, K6A, K64, K67, \
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, \
- SYSTEM_POWER, SYSTEM_SLEEP, SYSTEM_WAKE, \
- AUDIO_MUTE, AUDIO_VOL_UP, AUDIO_VOL_DOWN, \
- MEDIA_NEXT_TRACK, MEDIA_PREV_TRACK, MEDIA_STOP, MEDIA_PLAY_PAUSE, MEDIA_SELECT, \
- MAIL, CALCULATOR, MY_COMPUTER, \
- WWW_SEARCH, WWW_HOME, WWW_BACK, WWW_FORWARD, \
- WWW_STOP, WWW_REFRESH, WWW_FAVORITES \
-)
-
-#endif
diff --git a/converter/serialmouse_usb/led.c b/converter/serialmouse_usb/led.c
deleted file mode 100644
index f76545f0ba..0000000000
--- a/converter/serialmouse_usb/led.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2011 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 "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
-}
diff --git a/converter/serialmouse_usb/matrix.c b/converter/serialmouse_usb/matrix.c
deleted file mode 100644
index 0e0d87f80e..0000000000
--- a/converter/serialmouse_usb/matrix.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-Copyright 2011 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 <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "action.h"
-#include "print.h"
-#include "util.h"
-#include "debug.h"
-#include "matrix.h"
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- debug_enable = true;
- debug_mouse=true;
- return;
-}
-
-uint8_t matrix_scan(void)
-{
- return 0;
-}
-
-bool matrix_is_modified(void)
-{
- return false;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return false;
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return 0;
-}
-
-void matrix_print(void)
-{
-}
-
-uint8_t matrix_key_count(void)
-{
- return 0;
-}
diff --git a/converter/sun_usb/Makefile b/converter/sun_usb/Makefile
deleted file mode 100644
index f046bfdd36..0000000000
--- a/converter/sun_usb/Makefile
+++ /dev/null
@@ -1,85 +0,0 @@
-# Target file name (without extension).
-TARGET = sun_usb
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c \
- command_extra.c \
- protocol/serial_soft.c
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-#MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-MCU = atmega32u2
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Build Options
-# *Comment out* to disable the options.
-#
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-#NKRO_ENABLE = yes # USB Nkey Rollover
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# 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
diff --git a/converter/sun_usb/README b/converter/sun_usb/README
deleted file mode 100644
index 98340dd315..0000000000
--- a/converter/sun_usb/README
+++ /dev/null
@@ -1,106 +0,0 @@
-Sun to USB keyboard protocol converter
-======================================
-Target MCU is ATMega32u4 but other USB capable AVR will also work.
-
-This converter will work with Sun Type 2-5 Keyboards.
-
-
-Tested on:
-Sun Type 3 Keyboard: http://blog.daveastels.com.s3-website-us-west-2.amazonaws.com/2014/12/27/type-3-keyboard.html
-CTCSP SHORT TYPE KEYBOARD(Type 5): http://imgur.com/a/QIv6p
-
-
-Keymap of Type 3(keymap_sun3.c) were impoted from dastels's repository.
-https://github.com/dastels/tmk_keyboard/tree/master/converter/sun3_usb
-
-
-
-Connector
----------
- 8Pin mini DIN
- ___ ___
- / |_| \
- / 8 7 6 \
- | 5 4 3 |
- \_ 2 1 _/
- \_____/
- (receptacle)
-
- Wiring:
- Pin mini DIN MCU
- ----------------------------------
- 1 GND GND
- 2 GND GND
- 3 5V
- 4 RX/TX(Mouse)
- 5 RX PD3
- 6 TX PD2
- 7 GND GND
- 8 5V VCC
-
-
-Protocol
---------
-Signal: Asynchronous, Negative logic, 1200baud, No Flow control
-Frame format: 1-Start bit, 8-Data bits, No-Parity, 1-Stop bit
-
- AVR USART engine expects positive logic while Sun keyboard signal is negative.
- To use AVR UART engine you need external inverter in front of RX and TX pin.
- Otherwise you can software serial routine to communicate the keyboard.
-
-This converter uses software method, you doesn't need any inverter part.
-
-
-Commands From System To Keyboard
- 0x01 Reset
- Keyboard responds with following byte sequence:
- Success: 0xFF 0x04 0x7F
- Fail: 0x7E 0x01 0x7F
- 0x02 Bell On
- 0x03 Bell Off
- 0x0A Click On
- 0x0B Click Off
- 0x0E LED
- followed by LED status byte:
- bit: 3 2 1 0
- LED: CapsLk ScrLk Compose NumLk
- 0x0F Layout
- Keyboard responds with 'Layout Response' 0xFE 0xXX
-
-Commands From Keyboard To System
- 0x7F Idle
- means no keys pressed.
- 0xFE Layout Response
- 0xFF Reset Response(followed by 0x04)
-
-Reference
- http://kentie.net/article/sunkbd/page2.htm
- http://kentie.net/article/sunkbd/KBD.pdf
-
-
-Build Firmware
---------------
-Just use 'make'
- $ cd sun_usb
- $ make
-Then, load the binary to MCU with your favorite programmer.
-
-
-Sun commands
-------------
-You can send Sun protocol commands with TMK `Magic` key combo. By default `Magic` key is `LShift` + `RShift`, `LAlt` + `RAlt' or `LMeta` + `RMeta`.
-https://github.com/tmk/tmk_keyboard#magic-commands
-
-Following Sun specific commands are available. For example, to send 'Bell On' you can press `LShift` + `RShift` + `Up` keys simultaneously.
-
-```
------ Sun converter Help -----
-Up: Bell On
-Down: Bell Off
-Left: Click On
-Right: Click Off
-PgUp: LED all On
-PgDown: LED all On
-Insert: Layout
-Delete: Reset
-```
diff --git a/converter/sun_usb/command_extra.c b/converter/sun_usb/command_extra.c
deleted file mode 100644
index aba3fe6da3..0000000000
--- a/converter/sun_usb/command_extra.c
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "stdbool.h"
-#include "stdint.h"
-#include "keycode.h"
-#include "serial.h"
-#include "print.h"
-#include "command.h"
-
-bool command_extra(uint8_t code)
-{
- switch (code) {
- case KC_H:
- case KC_SLASH: /* ? */
- print("\n\n----- Sun converter Help -----\n");
- print("Up: Bell On\n");
- print("Down: Bell Off\n");
- print("Left: Click On\n");
- print("Right: Click Off\n");
- print("PgUp: LED all On\n");
- print("PgDown: LED all On\n");
- print("Insert: Layout\n");
- print("Delete: Reset\n");
- return false;
- case KC_DEL:
- print("Reset\n");
- serial_send(0x01);
- break;
- case KC_UP:
- print("Bell On\n");
- serial_send(0x02);
- break;
- case KC_DOWN:
- print("Bell Off\n");
- serial_send(0x03);
- break;
- case KC_LEFT:
- print("Click On\n");
- serial_send(0x0A);
- break;
- case KC_RIGHT:
- print("Click Off\n");
- serial_send(0x0B);
- break;
- case KC_PGUP:
- print("LED all on\n");
- serial_send(0x0E);
- serial_send(0xFF);
- break;
- case KC_PGDOWN:
- print("LED all off\n");
- serial_send(0x0E);
- serial_send(0x00);
- break;
- case KC_INSERT:
- print("layout\n");
- serial_send(0x0F);
- break;
- default:
- return false;
- }
- return true;
-}
diff --git a/converter/sun_usb/config.h b/converter/sun_usb/config.h
deleted file mode 100644
index 66036da931..0000000000
--- a/converter/sun_usb/config.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x3333
-#define DEVICE_VER 0x0100
-#define MANUFACTURER t.m.k.
-#define PRODUCT Sun keyboard converter
-#define DESCRIPTION converts Sun keyboard protocol into USB
-
-/* matrix size */
-#define MATRIX_ROWS 16
-#define MATRIX_COLS 8
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \
- keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* legacy keymap support */
-#define USE_LEGACY_KEYMAP
-
-
-/* Serial(USART) configuration
- * asynchronous, negative logic, 1200baud, no flow control
- * 1-start bit, 8-data bit, non parity, 1-stop bit
- */
-#define SERIAL_SOFT_BAUD 1200
-#define SERIAL_SOFT_PARITY_NONE
-#define SERIAL_SOFT_BIT_ORDER_LSB
-#define SERIAL_SOFT_LOGIC_NEGATIVE
-/* RXD Port */
-#define SERIAL_SOFT_RXD_ENABLE
-#define SERIAL_SOFT_RXD_DDR DDRD
-#define SERIAL_SOFT_RXD_PORT PORTD
-#define SERIAL_SOFT_RXD_PIN PIND
-#define SERIAL_SOFT_RXD_BIT 2
-#define SERIAL_SOFT_RXD_VECT INT2_vect
-/* RXD Interupt */
-#ifdef SERIAL_SOFT_LOGIC_NEGATIVE
-/* enable interrupt: INT2(rising edge) */
-#define INTR_TRIG_EDGE ((1<<ISC21)|(1<<ISC20))
-#else
-/* enable interrupt: INT2(falling edge) */
-#define INTR_TRIG_EDGE ((1<<ISC21)|(0<<ISC20))
-#endif
-#define SERIAL_SOFT_RXD_INIT() do { \
- /* pin configuration: input with pull-up */ \
- SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
- SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
- EICRA |= INTR_TRIG_EDGE; \
- EIMSK |= (1<<INT2); \
- sei(); \
-} while (0)
-#define SERIAL_SOFT_RXD_INT_ENTER()
-#define SERIAL_SOFT_RXD_INT_EXIT() do { \
- /* clear interrupt flag */ \
- EIFR = (1<<INTF2); \
-} while (0)
-#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
-/* TXD Port */
-#define SERIAL_SOFT_TXD_ENABLE
-#define SERIAL_SOFT_TXD_DDR DDRD
-#define SERIAL_SOFT_TXD_PORT PORTD
-#define SERIAL_SOFT_TXD_PIN PIND
-#define SERIAL_SOFT_TXD_BIT 3
-#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
-#define SERIAL_SOFT_TXD_INIT() do { \
- /* pin configuration: output */ \
- SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
- /* idle */ \
- SERIAL_SOFT_TXD_ON(); \
-} while (0)
-
-#endif
diff --git a/converter/sun_usb/keymap.c b/converter/sun_usb/keymap.c
deleted file mode 100644
index 3d724a5201..0000000000
--- a/converter/sun_usb/keymap.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "util.h"
-#include "keymap.h"
-
-
-
-
-/* Sun type 5 keyboard
-,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
-| 76 | | | | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30|
-`-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------'
-,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
-| 01| 03| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2C| 34| 60| | 62| 2E| 2F| 47|
-|-------| |-----------------------------------------------------------| |------------ |---------------|
-| 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 2B | | 42| 4A| 7B| | 44| 45| 46| |
-|-------| |-----------------------------------------------------------| `-----------' |-----------| 7D|
-| 31| 33| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| |
-|-------| |-----------------------------------------------------------| ,---. |-----------|---|
-| 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| |
-|-------| |-----------------------------------------------------------| .-----------. |-----------| 5A|
-| 5F| 61| | 77 | 13| 78 |*73 | 79 |*74 |*75| 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| |
-`-------' `-----------------------------------------------------------' `-----------' `---------------'
-*/
-#define KEYMAP( \
- K76, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \
- K01,K03, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C,K34,K60, K62,K2E,K2F,K47, \
- K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42,K4A,K7B, K44,K45,K46,K7D, \
- K31,K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
- K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \
- K5F,K61, K77,K13, K78, K73, K79, K74, K75, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \
-) { \
- { KC_NO, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_NO, }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_NO, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_NO }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_NO, KC_##K7D, KC_NO, KC_NO } \
-}
-
-/* CTCSP SHORT TYPE KEYBOARD */
-#define SHORT_TYPE( \
- K01, K05,K06,K08,K0A,K0C,K0E, K61,K49,K33, K30, K2C,K34,K60, \
- K10,K11,K12,K07,K09,K0B, K42,K4A,K7B, \
- K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, \
- K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, \
- K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, \
- K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K0D,K14,K6E, \
- K77,K13, K78, K79, K7A,K43,K62,K18,K1B,K1C \
-) KEYMAP( \
- HELP, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, PSCR,SLCK,PAUS, MUTE,VOLD,VOLU,K30, \
- K01, AGAIN, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C, K34, K60, K62, PSLS,PAST,PMNS, \
- MENU, UNDO, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42, K4A, K7B, P7, P8, P9, PPLS, \
- SELECT, K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, P4, P5, P6, \
- EXECUTE,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, P1, P2, P3, PENT, \
- FIND, K61, K77,K13, K78, HENK, K79, MHEN, KANA, K7A,K43,K0D, K18, K1B, K1C, P0, PDOT \
-)
-
-
-// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
- 2, // Fn0
- 3, // Fn1
- 4, // Fn2
- 0, // Fn3
- 0, // Fn4
- 0, // Fn5
- 0, // Fn6
- 0 // Fn7
-};
-
-// 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[] = {
- KC_NO, // Fn0
- KC_SCLN, // Fn1
- KC_SLSH, // Fn2
- KC_NO, // Fn3
- KC_NO, // Fn4
- KC_NO, // Fn5
- KC_NO, // Fn6
- KC_NO // Fn7
-};
-
-
-static 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,
- STOP, AGAIN, ESC,1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- MENU, UNDO, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC, DEL, END, PGDN, P7, P8, P9, PPLS,
- SELECT, COPY, LCTL, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6,
- EXECUTE,PASTE, LSFT, Z, X, C, V, B, N, M, COMM,DOT,SLSH, RSFT, UP, P1, P2, P3, PENT,
- FIND, CUT, CAPS, LALT, LGUI,HENK, SPC, MHEN,KANA,RGUI,APP, RALT, LEFT,DOWN,RGHT, P0, PDOT
- ),
-*/
- // 0: default
- SHORT_TYPE(
- STOP, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC,
- LCTL, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT,
- LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RALT,UP, RSFT,
- CAPS,LALT,LGUI, SPC, RGUI,APP, NLCK,LEFT,DOWN,RGHT
- ),
- // 1: with layer keys
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC,
- LCTL, A, S, D, F, G, H, J, K, L, FN1, QUOT, ENT,
- LSFT, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,UP, FN0,
- CAPS,LALT,LGUI, SPC, RGUI,RALT,FN0, LEFT,DOWN,RGHT
- ),
- // 2: HHKB
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
- CAPS, NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, NO, BSPC,
- LCTL, VOLD,VOLU,MUTE,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, ENT,
- LSFT, Z, X, C, V, B, NO, NO, END, PGDN,DOWN, RSFT,PGUP,FN0,
- CAPS,LALT,LGUI, SPC, RGUI,RALT,FN0, HOME,PGDN,END
- ),
- // 3: Mousekey
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
- CAPS, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC,
- LCTL, NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,FN1, NO, ENT,
- LSFT, NO, NO, NO, NO, BTN3,BTN2,BTN1,NO, NO, NO, RSFT,UP, NO,
- CAPS,LALT,LGUI, BTN1, RGUI,RALT,NO, LEFT,DOWN,RGHT
- ),
- // 4: Cursor
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
- CAPS, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC,
- LCTL, NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT,
- LSFT, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,UP, NO,
- 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]);
-}
diff --git a/converter/sun_usb/keymap_sun3.c b/converter/sun_usb/keymap_sun3.c
deleted file mode 100644
index 273cd9442f..0000000000
--- a/converter/sun_usb/keymap_sun3.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "util.h"
-#include "keymap.h"
-
-
-/* Sun type 3 keyboard
-,-------. ,-----------------------------------------------------------. ,-----------.
-| 01| 03| | 05| 06| 08| 0A| 0C| 0E| 10| 11| 12| 2B| | 15| 16| 17|
-|-------| |-----------------------------------------------------------| |-----------|
-| 19| 1A| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2D| 2E| 2F|
-|-------| |-----------------------------------------------------------| |-----------|
-| 31| 33| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 42 | | 44| 45| 46|
-|-------| |-----------------------------------------------------------| |-----------|
-| 48| 49| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D|
-|-------| |-----------------------------------------------------------| |-----------|
-| 5F| 61| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 6F| | 70| 71| 72|
-`-------' |-----------------------------------------------------------| `-----------'
- | 77 | 78 | 79 | 7A | 13 |
- `-----------------------------------------------------------'
-*/
-
-
-#define KEYMAP( \
- K01,K03, K05,K06, K08, K0A, K0C, K0E, K10,K11,K12,K2B, K15,K16,K17, \
- K19,K1A, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2D,K2E,K2F, \
- K31,K33, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K42, K44,K45,K46, \
- K48,K49, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
- K5F,K61, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E,K6F, K70,K71,K72, \
- K77,K78, K79, K7A,K13 \
-) { \
- { KC_NO, KC_##K01, KC_NO, KC_##K03, KC_NO, KC_##K05, KC_##K06, KC_NO }, \
- { KC_##K08, KC_NO, KC_##K0A, KC_NO, KC_##K0C, KC_NO, KC_##K0E, KC_NO }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_NO, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_NO, KC_##K19, KC_##K1A, KC_NO, KC_NO, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_NO, KC_##K31, KC_NO, KC_##K33, KC_NO, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_##K44, KC_##K45, KC_##K46, KC_NO }, \
- { KC_##K48, KC_##K49, KC_NO, KC_NO, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_##K5D, KC_NO, KC_##K5F }, \
- { KC_NO, KC_##K61, KC_NO, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
-}
-
-// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
- 2, // Fn0
- 3, // Fn1
- 4, // Fn2
- 0, // Fn3
- 0, // Fn4
- 0, // Fn5
- 0, // Fn6
- 0 // Fn7
-};
-
-// 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[] = {
- KC_NO, // Fn0
- KC_SCLN, // Fn1
- KC_SLSH, // Fn2
- KC_NO, // Fn3
- KC_NO, // Fn4
- KC_NO, // Fn5
- KC_NO, // Fn6
- KC_NO // Fn7
-};
-
-
-static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- KEYMAP(
- F10, F11, F1, F2, F3, F4, F5, F6, F7, F8, F9, BSPC, VOLD, MUTE, VOLU,
- F12, F13, ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,MINS, EQL, BSLS, GRV, MPRV, MPLY, MNXT,
- F14, F15, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, DEL, HOME, UP, PGUP,
- F16, F17, LCTL, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, LEFT, INSERT, RIGHT,
- F18, F19, LSFT, Z, X, C, V, B, N, M, COMM,DOT,SLSH, RSFT,RCTL, END, DOWN, PGDOWN,
- LGUI, LALT, SPC, RALT,RGUI
- ),
- /*
- // 0: default
- SHORT_TYPE(
- STOP, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC,
- LCTL, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT,
- LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RALT,UP, RSFT,
- CAPS,LALT,LGUI, SPC, RGUI,APP, NLCK,LEFT,DOWN,RGHT
- ),
- // 1: with layer keys
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSPC,
- LCTL, A, S, D, F, G, H, J, K, L, FN1, QUOT, ENT,
- LSFT, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,UP, FN0,
- CAPS,LALT,LGUI, SPC, RGUI,RALT,FN0, LEFT,DOWN,RGHT
- ),
- // 2: HHKB
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
- CAPS, NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, NO, BSPC,
- LCTL, VOLD,VOLU,MUTE,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, ENT,
- LSFT, Z, X, C, V, B, NO, NO, END, PGDN,DOWN, RSFT,PGUP,FN0,
- CAPS,LALT,LGUI, SPC, RGUI,RALT,FN0, HOME,PGDN,END
- ),
- // 3: Mousekey
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
- CAPS, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC,
- LCTL, NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,FN1, NO, ENT,
- LSFT, NO, NO, NO, NO, BTN3,BTN2,BTN1,NO, NO, NO, RSFT,UP, NO,
- CAPS,LALT,LGUI, BTN1, RGUI,RALT,NO, LEFT,DOWN,RGHT
- ),
- // 4: Cursor
- SHORT_TYPE(
- ESC, F1,F2,F3,F4, F5, F6, CUT,PASTE,COPY,PWR, INS, HOME,PGUP,
- F7,F8,F9,F10,F11,F12, DEL, END, PGDN,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL,
- CAPS, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC,
- LCTL, NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT,
- LSFT, NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,UP, NO,
- 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]);
-}
diff --git a/converter/sun_usb/led.c b/converter/sun_usb/led.c
deleted file mode 100644
index 809398faa5..0000000000
--- a/converter/sun_usb/led.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "stdint.h"
-#include "serial.h"
-#include "led.h"
-#include "debug.h"
-
-
-void led_set(uint8_t usb_led)
-{
- uint8_t sun_led = 0;
- if (usb_led & (1<<USB_LED_NUM_LOCK)) sun_led |= (1<<0);
- if (usb_led & (1<<USB_LED_COMPOSE)) sun_led |= (1<<1);
- if (usb_led & (1<<USB_LED_SCROLL_LOCK)) sun_led |= (1<<2);
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) sun_led |= (1<<3);
- xprintf("LED: %02X\n", usb_led);
-
- serial_send(0x0E);
- serial_send(sun_led);
-}
diff --git a/converter/sun_usb/matrix.c b/converter/sun_usb/matrix.c
deleted file mode 100644
index 3126bd33ca..0000000000
--- a/converter/sun_usb/matrix.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "matrix.h"
-#include "debug.h"
-#include "protocol/serial.h"
-
-
-/*
- * Matrix Array usage:
- *
- * ROW: 16(4bits)
- * COL: 8(3bits)
- *
- * 8bit wide
- * +---------+
- * 0|00 ... 07|
- * 1|08 ... 0F|
- * :| ... |
- * :| ... |
- * E|70 ... 77|
- * F|78 ... 7F|
- * +---------+
- */
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) ((code>>3)&0xF)
-#define COL(code) (code&0x07)
-
-static bool is_modified = false;
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- DDRD |= (1<<6);
- PORTD |= (1<<6);
- //debug_enable = true;
-
- serial_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- // wait for keyboard coming up
- // otherwise LED status update fails
- print("Reseting ");
- while (1) {
- print(".");
- while (serial_recv());
- serial_send(0x01);
- _delay_ms(500);
- if (serial_recv() == 0xFF) {
- _delay_ms(500);
- if (serial_recv() == 0x04)
- break;
- }
- }
- print(" Done\n");
- return;
-}
-
-uint8_t matrix_scan(void)
-{
- is_modified = false;
-
- uint8_t code;
- code = serial_recv();
- if (!code) return 0;
-
- debug_hex(code); debug(" ");
-
- switch (code) {
- case 0xFF: // reset success: FF 04
- print("reset: ");
- _delay_ms(500);
- code = serial_recv();
- xprintf("%02X\n", code);
- if (code == 0x04) {
- // LED status
- led_set(host_keyboard_leds());
- }
- return 0;
- case 0xFE: // layout: FE <layout>
- print("layout: ");
- _delay_ms(500);
- xprintf("%02X\n", serial_recv());
- return 0;
- case 0x7E: // reset fail: 7E 01
- print("reset fail: ");
- _delay_ms(500);
- xprintf("%02X\n", serial_recv());
- return 0;
- case 0x7F:
- // all keys up
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
- return 0;
- }
-
- if (code&0x80) {
- // break code
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
- } else {
- // make code
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= (1<<COL(code));
- is_modified = true;
- }
- }
- return code;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
diff --git a/converter/terminal_bluefruit/Makefile b/converter/terminal_bluefruit/Makefile
deleted file mode 100644
index dec9233ec9..0000000000
--- a/converter/terminal_bluefruit/Makefile
+++ /dev/null
@@ -1,99 +0,0 @@
-# Target file name (without extension).
-TARGET = terminal_bluefruit
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c
-
-CONFIG_H = config.h
-
-BLUEFRUIT_TRACE_SERIAL=true
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-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 - not yet supported in LUFA
-
-
-#
-# PS/2 protocol implementations
-# USART is recommended if it is available, others are for reference purpose.
-# INT implementation will drop simultaneous key strokes.
-#
-#PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
-PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
-#PS2_USE_BUSYWAIT = yes # uses primitive reference code
-
-#---------------- Programming Options --------------------------
-PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/protocol/bluefruit.mk
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/terminal_bluefruit/README b/converter/terminal_bluefruit/README
deleted file mode 100644
index 6ff1bc92f3..0000000000
--- a/converter/terminal_bluefruit/README
+++ /dev/null
@@ -1,37 +0,0 @@
-Keyboard converter for IBM terminal keyboard
-============================================
-It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
-I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
-
-Source code: https://github.com/tmk/tmk_keyboard
-Article: http://geekhack.org/index.php?topic=27272.0
-
-
-CONNECTION
-----------
-Keyboard ATMega32U4
-----------------------
-Data: PD2
-Clock: PD5
-
-And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
-
-
-BUILD
------
-$ git clone https://github.com/tmk/tmk_keyboard.git
-$ cd converter/terminal_usb
-$ make
-
-
-RESOURCE
---------
-Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
-102keys(1392595): http://geekhack.org/index.php?topic=10737.0
-122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
-KbdBabel: http://www.kbdbabel.org/
-RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
-DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
-WinAVR: http://winavr.sourceforge.net/
-
-EOF
diff --git a/converter/terminal_bluefruit/config.h b/converter/terminal_bluefruit/config.h
deleted file mode 100644
index 8bf139d35f..0000000000
--- a/converter/terminal_bluefruit/config.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-Converter for 70% IBM Terminal Keyboard
-Author: Benjamin Gould, 2013
-Based on code Copyright 2011 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6535
-#define DEVICE_VER 0x0100
-#define MANUFACTURER t.m.k.
-#define PRODUCT 70% IBM Terminal Keyboard Converter w/ Bluetooth
-#define DESCRIPTION USB converter for IBM Terminal Keyboard w/ Bluetooth
-
-
-/* matrix size */
-#define MATRIX_ROWS 17 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-
-/* legacy keymap support */
-// #define USE_LEGACY_KEYMAP
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) || \
- (keyboard_report->mods == (MOD_BIT(KC_RALT) | MOD_BIT(KC_RCTL))) \
-)
-
-/* USART configuration
- * asynchronous, 9600baud, 8-data bit, non parity, 1-stop bit, no flow control
- */
-#ifdef __AVR_ATmega32U4__
- #define SERIAL_UART_BAUD 9600
- #define SERIAL_UART_DATA UDR1
- #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
- #define SERIAL_UART_RXD_VECT USART1_RX_vect
- #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
- #define SERIAL_UART_INIT() do { \
- UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
- UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
- UCSR1B = (1<<TXEN1); /* TX: enable */ \
- UCSR1C = (0<<UPM11) | (0<<UPM10) | /* parity: none(00), even(01), odd(11) */ \
- (0<<UCSZ12) | (1<<UCSZ11) | (1<<UCSZ10); /* data-8bit(011) */ \
- sei(); \
- } while(0)
-#else
-# error "USART configuration is needed."
-#endif
-
-/*
- * PS/2 Interrupt configuration
- */
-#ifdef PS2_USE_INT
-/* uses INT1 for clock line(ATMega32U4) */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-
-#define PS2_INT_INIT() do { \
- EICRA |= ((1<<ISC11) | \
- (0<<ISC10)); \
-} while (0)
-#define PS2_INT_ON() do { \
- EIMSK |= (1<<INT1); \
-} while (0)
-#define PS2_INT_OFF() do { \
- EIMSK &= ~(1<<INT1); \
-} while (0)
-#define PS2_INT_VECT INT1_vect
-#endif
-
-
-/*
- * PS/2 Busywait configuration
- */
-#ifdef PS2_USE_BUSYWAIT
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-#endif
-
-#endif
diff --git a/converter/terminal_bluefruit/keymap.c b/converter/terminal_bluefruit/keymap.c
deleted file mode 100644
index 8acd8cfb33..0000000000
--- a/converter/terminal_bluefruit/keymap.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
-Converter for 70% IBM Terminal Keyboard
-Author: Benjamin Gould, 2013
-Based on code Copyright 2011 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 <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "keymap.h"
-
-
-
-
-/*
- * IBM Terminal keyboard 6110345(122keys)/1392595(102keys)
- * http://geekhack.org/showthread.php?10737-What-Can-I-Do-With-a-Terminal-Model-M
- * http://www.seasip.info/VintagePC/ibm_1391406.html
- *
- * Keymap array:
- * 8 bytes
- * +---------+
- * 0| |
- * :| | 0x00-0x87
- * ;| |
- * 17| |
- * +---------+
- */
-#define KEYMAP( \
- K08,K10,K18,K20,K28,K30,K38,K40,K48,K50,K57,K5F, \
- K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, \
- \
- K05,K06, K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K5D,K66, K67,K6E,K6F, K76,K77,K7E,K84, \
- K04,K0C, K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, K5C, K64,K65,K6D, K6C,K75,K7D,K7C, \
- K03,K0B, K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K53,K5A, K63, K6B,K73,K74,K7B, \
- K83,K0A, K12,K13,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K51,K59, K61,K62,K6A, K69,K72,K7A,K79, \
- K01,K09, K11, K19, K29, K39, K58, K60, K68,K70,K71,K78 \
-) { \
- { KC_NO, KC_##K01, KC_NO, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_##K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_##K83, KC_##K84, KC_NO, KC_NO, KC_NO, }, \
-}
-
-static 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|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|BS | |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| ;| '| #|Retu| | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shif| \| Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl| |Alt | Space |Alt | |Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `----' `---------------------------------------' `----' `-----------' `---------------'
- */
-/*
- KEYMAP(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
-
- PSCR,ESC, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- SLCK,INT4, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS,
- PAUS,INT5, CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, UP, P4, P5, P6, PCMM,
- APP, INT6, LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, LEFT,INT2,RGHT, P1, P2, P3, PENT,
- RGUI,LGUI, LCTL, LALT, SPC, RALT, RCTL, DOWN, NO, P0, PDOT,NO
- ),
-*/
- /*
- KEYMAP(
- 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,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, 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,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
- ),
- */
- // pseudo ANSI
-
- KEYMAP(
- FN0, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO,
- PSCR,PAUS,PGUP,PGDN,HOME,END, INS, DEL, LEFT,DOWN,UP, RGHT,
-
- NO, NO, ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, BSPC, NO, NO, 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,
- NO, NO, LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, BSLS,ENT, NO, NO, NO, NO, NO,
- NO, NO, LSFT,FN1 ,Z, X, C, V, B, N, M, COMM,DOT, SLSH, FN1, RSFT, NO, NO, NO, NO, NO, NO, NO,
- NO, NO, LCTL, LALT, SPC, LGUI, APP, NO, NO, NO, NO, NO
- ),
-
- // Momentary Function Layer
- KEYMAP(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,MUTE,VOLD,VOLU,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-
- TRNS,TRNS, TRNS,F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,UP ,END, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MS_L,MS_D,MS_U,MS_R,LEFT,DOWN, RGHT,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,PGDN,TRNS, TRNS,RSFT, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS, BTN2, TRNS, BTN1, RALT, RCTL, TRNS, TRNS,TRNS,TRNS,TRNS
- ),
-
- // Mouse Layer
- KEYMAP(
- FN0, 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,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,NO, TRNS, NO, NO, NO, NO, NO, NO, NO,
- TRNS,TRNS, TRNS,NO, NO, MS_U,NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, TRNS, NO, NO, NO, NO, NO, NO, NO,
- TRNS,TRNS, BTN2,BTN1,MS_L,MS_D,MS_R,NO, MS_L,MS_D,MS_U,MS_R,NO, NO, NO, ENT, NO, NO, NO, NO, NO,
- TRNS,TRNS, TRNS,TRNS,NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, RSFT, NO, NO, NO, NO, NO, NO, NO,
- TRNS,TRNS, TRNS, TRNS, BTN1, BTN2, TRNS, NO, NO, NO, NO, NO
- ),
-
- // vi Layer
- KEYMAP(
- FN0, 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,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,NO, TRNS, NO, NO, NO, NO, NO, NO, NO,
- TRNS,TRNS, TRNS,HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, TRNS, NO, NO, NO, NO, NO, NO, NO,
- TRNS,TRNS, TRNS,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, NO, ENT, NO, NO, NO, NO, NO,
- TRNS,TRNS, TRNS,TRNS,NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, RSFT, NO, NO, NO, NO, NO, NO, NO,
- TRNS,TRNS, TRNS, TRNS, SPC, RALT, RCTL, NO, NO, NO, NO, NO
- ),
-
- // num lock layer
- KEYMAP(
- FN0, 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,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,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,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
- ),
-
-};
-
-
-static const uint16_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),
- [3] = KC_NO, //ACTION_LAYER_ON(3, ON_RELEASE),
- [4] = KC_NO, //ACTION_LAYER_ON(4, ON_RELEASE),
- [5] = KC_NO,
- [6] = KC_NO,
- [7] = KC_NO,
-};
-
-/*
-enum macro_id {
- MS_UL,
- MS_UR,
- MS_DL,
- MS_DR,
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- keyevent_t event = record->event;
-
- switch (id) {
- case MS_UL:
- return (event.pressed ? MACRO( D(MS_L), D(MS_U), END ) : MACRO( U(MS_L), U(MS_U), END ) );
- case MS_UR:
- return (event.pressed ? MACRO( D(MS_R), D(MS_U), END ) : MACRO( U(MS_L), U(MS_U), END ) );
- case MS_DL:
- return (event.pressed ? MACRO( D(MS_L), D(MS_D), END ) : MACRO( U(MS_L), U(MS_U), END ) );
- case MS_DR:
- return (event.pressed ? MACRO( D(MS_R), D(MS_D), END ) : MACRO( U(MS_L), U(MS_U), END ) );
- }
- return MACRO_NONE;
-}
-*/
-
-uint8_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
-{
- return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
-}
-
-action_t keymap_fn_to_action(uint8_t keycode)
-{
- action_t action;
- action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
- return action;
-}
diff --git a/converter/terminal_bluefruit/led.c b/converter/terminal_bluefruit/led.c
deleted file mode 100644
index e5bf41d4ab..0000000000
--- a/converter/terminal_bluefruit/led.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Converter for 70% IBM Terminal Keyboard
-Author: Benjamin Gould, 2013
-Based on code Copyright 2011 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 "ps2.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- uint8_t ps2_led = 0;
- if (usb_led & (1<<USB_LED_SCROLL_LOCK))
- ps2_led |= (1<<PS2_LED_SCROLL_LOCK);
- if (usb_led & (1<<USB_LED_NUM_LOCK))
- ps2_led |= (1<<PS2_LED_NUM_LOCK);
- if (usb_led & (1<<USB_LED_CAPS_LOCK))
- ps2_led |= (1<<PS2_LED_CAPS_LOCK);
- ps2_host_set_led(ps2_led);
-}
diff --git a/converter/terminal_bluefruit/matrix.c b/converter/terminal_bluefruit/matrix.c
deleted file mode 100644
index 36901536f1..0000000000
--- a/converter/terminal_bluefruit/matrix.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-Copyright 2011 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 <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "debug.h"
-#include "ps2.h"
-#include "matrix.h"
-
-
-static void matrix_make(uint8_t code);
-static void matrix_break(uint8_t code);
-#ifdef MATRIX_HAS_GHOST
-static bool matrix_has_ghost_in_row(uint8_t row);
-#endif
-
-
-/*
- * Matrix Array usage:
- * 'Scan Code Set 3' is assigned into 17x8 cell matrix.
- *
- * 8bit wide
- * +---------+
- * 0| |
- * :| | 0x00-0x87
- * ;| |
- * 17| |
- * +---------+
- */
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) (code>>3)
-#define COL(code) (code&0x07)
-
-static bool is_modified = false;
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- debug_enable = true;
- //debug_matrix = true;
- //debug_keyboard = true;
- //debug_mouse = false;
-
- ps2_host_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- return;
-}
-
-uint8_t matrix_scan(void)
-{
-
- // scan code reading states
- static enum {
- RESET,
- RESET_RESPONSE,
- KBD_ID0,
- KBD_ID1,
- CONFIG,
- READY,
- F0,
- } state = RESET;
-
- is_modified = false;
-
- uint8_t code;
- if ((code = ps2_host_recv())) {
- debug("r"); debug_hex(code); debug(" ");
- }
-
- switch (state) {
- case RESET:
- debug("wFF ");
- if (ps2_host_send(0xFF) == 0xFA) {
- debug("[ack]\nRESET_RESPONSE: ");
- state = RESET_RESPONSE;
- }
- break;
- case RESET_RESPONSE:
- if (code == 0xAA) {
- debug("[ok]\nKBD_ID: ");
- state = KBD_ID0;
- } else if (code) {
- debug("err\nRESET: ");
- state = RESET;
- }
- break;
- // after reset receive keyboad ID(2 bytes)
- case KBD_ID0:
- if (code) {
- state = KBD_ID1;
- }
- break;
- case KBD_ID1:
- if (code) {
- debug("\nCONFIG: ");
- state = CONFIG;
- }
- break;
- case CONFIG:
- debug("wF8 ");
- if (ps2_host_send(0xF8) == 0xFA) {
- debug("[ack]\nREADY\n");
- state = READY;
- }
- break;
- case READY:
- switch (code) {
- case 0x00:
- break;
- case 0xF0:
- state = F0;
- debug(" ");
- break;
- default: // normal key make
- if (code < 0x88) {
- matrix_make(code);
- } else {
- debug("unexpected scan code at READY: "); debug_hex(code); debug("\n");
- }
- state = READY;
- debug("\n");
- }
- break;
- case F0: // Break code
- switch (code) {
- case 0x00:
- break;
- default:
- if (code < 0x88) {
- matrix_break(code);
- } else {
- debug("unexpected scan code at F0: "); debug_hex(code); debug("\n");
- }
- state = READY;
- debug("\n");
- }
- break;
- }
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
-#ifdef MATRIX_HAS_GHOST
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- if (matrix_has_ghost_in_row(i))
- return true;
- }
-#endif
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
-#ifdef MATRIX_HAS_GHOST
- if (matrix_has_ghost_in_row(row)) {
- print(" <ghost");
- }
-#endif
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
-
-#ifdef MATRIX_HAS_GHOST
-inline
-static bool matrix_has_ghost_in_row(uint8_t row)
-{
- // no ghost exists in case less than 2 keys on
- if (((matrix[row] - 1) & matrix[row]) == 0)
- return false;
-
- // ghost exists in case same state as other row
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- if (i != row && (matrix[i] & matrix[row]) == matrix[row])
- return true;
- }
- return false;
-}
-#endif
-
-
-inline
-static void matrix_make(uint8_t code)
-{
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= 1<<COL(code);
- is_modified = true;
- }
-}
-
-inline
-static void matrix_break(uint8_t code)
-{
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
-}
diff --git a/converter/terminal_usb/Makefile b/converter/terminal_usb/Makefile
deleted file mode 100644
index 42184521d2..0000000000
--- a/converter/terminal_usb/Makefile
+++ /dev/null
@@ -1,98 +0,0 @@
-# Target file name (without extension).
-TARGET = terminal_lufa
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c
-
-CONFIG_H = config.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-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 - not yet supported in LUFA
-
-
-#
-# PS/2 protocol implementations
-# USART is recommended if it is available, others are for reference purpose.
-# INT implementation will drop simultaneous key strokes.
-#
-PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
-#PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
-#PS2_USE_BUSYWAIT = yes # uses primitive reference code
-
-
-#---------------- Programming Options --------------------------
-PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-
-
-# 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
diff --git a/converter/terminal_usb/README b/converter/terminal_usb/README
deleted file mode 100644
index 6ff1bc92f3..0000000000
--- a/converter/terminal_usb/README
+++ /dev/null
@@ -1,37 +0,0 @@
-Keyboard converter for IBM terminal keyboard
-============================================
-It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
-I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
-
-Source code: https://github.com/tmk/tmk_keyboard
-Article: http://geekhack.org/index.php?topic=27272.0
-
-
-CONNECTION
-----------
-Keyboard ATMega32U4
-----------------------
-Data: PD2
-Clock: PD5
-
-And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
-
-
-BUILD
------
-$ git clone https://github.com/tmk/tmk_keyboard.git
-$ cd converter/terminal_usb
-$ make
-
-
-RESOURCE
---------
-Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
-102keys(1392595): http://geekhack.org/index.php?topic=10737.0
-122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
-KbdBabel: http://www.kbdbabel.org/
-RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
-DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
-WinAVR: http://winavr.sourceforge.net/
-
-EOF
diff --git a/converter/terminal_usb/config.h b/converter/terminal_usb/config.h
deleted file mode 100644
index ea5ce62caa..0000000000
--- a/converter/terminal_usb/config.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6535
-#define DEVICE_VER 0x0100
-#define MANUFACTURER t.m.k.
-#define PRODUCT PS/2(Set3)-USB Keyboard converter(IBM 122keys)
-#define DESCRIPTION USB converter for IBM Terminal Keyboard 122keys
-
-
-/* matrix size */
-#define MATRIX_ROWS 17 // keycode bit: 3-0
-#define MATRIX_COLS 8 // keycode bit: 6-4
-
-
-/* legacy keymap support */
-#define USE_LEGACY_KEYMAP
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) || \
- (keyboard_report->mods == (MOD_BIT(KC_RALT) | MOD_BIT(KC_RCTL))) \
-)
-
-
-/*
- * PS/2 USART configuration for ATMega32U4
- */
-#ifdef PS2_USE_USART
-/* XCK for clock line */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 5
-/* RXD for data line */
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 2
-
-/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
-/* set DDR of CLOCK as input to be slave */
-#define PS2_USART_INIT() do { \
- PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
- PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
- UCSR1C = ((1 << UMSEL10) | \
- (3 << UPM10) | \
- (0 << USBS1) | \
- (3 << UCSZ10) | \
- (0 << UCPOL1)); \
- UCSR1A = 0; \
- UBRR1H = 0; \
- UBRR1L = 0; \
-} while (0)
-#define PS2_USART_RX_INT_ON() do { \
- UCSR1B = ((1 << RXCIE1) | \
- (1 << RXEN1)); \
-} while (0)
-#define PS2_USART_RX_POLL_ON() do { \
- UCSR1B = (1 << RXEN1); \
-} while (0)
-#define PS2_USART_OFF() do { \
- UCSR1C = 0; \
- UCSR1B &= ~((1 << RXEN1) | \
- (1 << TXEN1)); \
-} while (0)
-#define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
-#define PS2_USART_RX_DATA UDR1
-#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
-#define PS2_USART_RX_VECT USART1_RX_vect
-#endif
-
-
-/*
- * PS/2 Interrupt configuration
- */
-#ifdef PS2_USE_INT
-/* uses INT1 for clock line(ATMega32U4) */
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-
-#define PS2_INT_INIT() do { \
- EICRA |= ((1<<ISC11) | \
- (0<<ISC10)); \
-} while (0)
-#define PS2_INT_ON() do { \
- EIMSK |= (1<<INT1); \
-} while (0)
-#define PS2_INT_OFF() do { \
- EIMSK &= ~(1<<INT1); \
-} while (0)
-#define PS2_INT_VECT INT1_vect
-#endif
-
-
-/*
- * PS/2 Busywait configuration
- */
-#ifdef PS2_USE_BUSYWAIT
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 1
-
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 0
-#endif
-
-#endif
diff --git a/converter/terminal_usb/keymap.c b/converter/terminal_usb/keymap.c
deleted file mode 100644
index 8ca66b5e6a..0000000000
--- a/converter/terminal_usb/keymap.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "keymap.h"
-
-
-
-
-/*
- * IBM Terminal keyboard 6110345(122keys)/1392595(102keys)
- * http://geekhack.org/showthread.php?10737-What-Can-I-Do-With-a-Terminal-Model-M
- * http://www.seasip.info/VintagePC/ibm_1391406.html
- *
- * Keymap array:
- * 8 bytes
- * +---------+
- * 0| |
- * :| | 0x00-0x87
- * ;| |
- * 17| |
- * +---------+
- */
-#define KEYMAP( \
- K08,K10,K18,K20,K28,K30,K38,K40,K48,K50,K57,K5F, \
- K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, \
- \
- K05,K06, K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K5D,K66, K67,K6E,K6F, K76,K77,K7E,K84, \
- K04,K0C, K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B, K5C, K64,K65,K6D, K6C,K75,K7D,K7C, \
- K03,K0B, K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K53,K5A, K63, K6B,K73,K74,K7B, \
- K83,K0A, K12,K13,K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K51,K59, K61,K62,K6A, K69,K72,K7A,K79, \
- K01,K09, K11, K19, K29, K39, K58, K60, K68,K70,K71,K78 \
-) { \
- { KC_NO, KC_##K01, KC_NO, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_##K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_##K83, KC_##K84, KC_NO, KC_NO, KC_NO, }, \
-}
-
-/*
- * IBM Terminal keyboard 1399625, 101-key
- */
-#define KEYMAP_101( \
- K08, K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, K57,K5F,K62, \
- \
- K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, K67,K6E,K6F, K76,K77,K7E,K84, \
- K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5C, K64,K65,K6D, K6C,K75,K7D, \
- K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52, K5A, K6B,K73,K74,K7C, \
- K12, K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A, K59, K63, K69,K72,K7A, \
- K11, K19, K29, K39, K58, K61,K60,K6A, K70, K71,K79 \
-) { \
- { KC_NO, KC_NO , KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_##K07 }, \
- { KC_##K08, KC_NO , KC_NO , KC_NO , KC_NO , KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_NO , KC_##K11, KC_##K12, KC_NO , KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_NO , KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_NO , KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_NO , KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_NO , KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_NO , KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_NO , KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_NO , KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_NO , KC_NO , KC_##K52, KC_NO , KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_NO , KC_##K5E, KC_##K5F }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_NO , KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
- { KC_NO , KC_##K79, KC_##K7A, KC_NO , KC_##K7C, KC_##K7D, KC_##K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO , KC_##K84, KC_NO, KC_NO, KC_NO, }, \
-}
-
-// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
- 0, // Fn0
- 0, // Fn1
- 0, // Fn2
- 0, // Fn3
- 0, // Fn4
- 0, // Fn5
- 0, // Fn6
- 0 // Fn7
-};
-
-// 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[] = {
- KC_NO, // Fn0
- KC_NO, // Fn1
- KC_NO, // Fn2
- KC_NO, // Fn3
- KC_NO, // Fn4
- KC_NO, // Fn5
- KC_NO, // Fn6
- KC_NO // Fn7
-};
-
-
-static 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|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|BS | |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| ;| '| #|Retu| | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shif| \| Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl| |Alt | Space |Alt | |Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `----' `---------------------------------------' `----' `-----------' `---------------'
- */
-/*
- KEYMAP(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
-
- PSCR,ESC, GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- SLCK,INT4, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS,
- PAUS,INT5, CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, UP, P4, P5, P6, PCMM,
- APP, INT6, LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, LEFT,INT2,RGHT, P1, P2, P3, PENT,
- RGUI,LGUI, LCTL, LALT, SPC, RALT, RCTL, DOWN, NO, P0, PDOT,NO
- ),
-*/
- // pseudo ANSI
- KEYMAP(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
-
- PSCR,ESC, ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NO, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- SLCK,INT4, TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, NO, DEL, END, PGDN, P7, P8, P9, PPLS,
- PAUS,INT5, LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, BSLS,ENT, UP, P4, P5, P6, PCMM,
- APP, INT6, LSFT,LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, NO, RSFT, LEFT,INT2,RGHT, P1, P2, P3, PENT,
- RGUI,LGUI, LCTL, LALT, SPC, LGUI, GRV, DOWN, NO, P0, PDOT,NO
- ),
-
-/* 101-key keymaps
- */
- /* 0: default
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl| |Alt | Space |Alt | |Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `----' `---------------------------------------' `----' `-----------' `---------------'
- */
-/*
- KEYMAP_101(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK, BRK,
-
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,MINS, EQL,BSPC, INS,HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P,LBRC,RBRC,BSLS, DEL, END,PGDN, P7, P8, P9,
- CAPS, A, S, D, F, G, H, J, K, L,SCLN,QUOT, ENT, P4, P5, P6,PPLS,
- LSFT, Z, X, C, V, B, N, M,COMM, DOT,SLSH, RSFT, UP, P1, P2, P3,
- LCTL, LALT, SPC, RALT, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-*/
-};
-
-
-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]);
-}
diff --git a/converter/terminal_usb/led.c b/converter/terminal_usb/led.c
deleted file mode 100644
index e448e84ec7..0000000000
--- a/converter/terminal_usb/led.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright 2011 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 "ps2.h"
-#include "led.h"
-
-
-void led_set(uint8_t usb_led)
-{
- uint8_t ps2_led = 0;
- if (usb_led & (1<<USB_LED_SCROLL_LOCK))
- ps2_led |= (1<<PS2_LED_SCROLL_LOCK);
- if (usb_led & (1<<USB_LED_NUM_LOCK))
- ps2_led |= (1<<PS2_LED_NUM_LOCK);
- if (usb_led & (1<<USB_LED_CAPS_LOCK))
- ps2_led |= (1<<PS2_LED_CAPS_LOCK);
- ps2_host_set_led(ps2_led);
-}
diff --git a/converter/terminal_usb/matrix.c b/converter/terminal_usb/matrix.c
deleted file mode 100644
index 36901536f1..0000000000
--- a/converter/terminal_usb/matrix.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-Copyright 2011 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 <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "debug.h"
-#include "ps2.h"
-#include "matrix.h"
-
-
-static void matrix_make(uint8_t code);
-static void matrix_break(uint8_t code);
-#ifdef MATRIX_HAS_GHOST
-static bool matrix_has_ghost_in_row(uint8_t row);
-#endif
-
-
-/*
- * Matrix Array usage:
- * 'Scan Code Set 3' is assigned into 17x8 cell matrix.
- *
- * 8bit wide
- * +---------+
- * 0| |
- * :| | 0x00-0x87
- * ;| |
- * 17| |
- * +---------+
- */
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) (code>>3)
-#define COL(code) (code&0x07)
-
-static bool is_modified = false;
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- debug_enable = true;
- //debug_matrix = true;
- //debug_keyboard = true;
- //debug_mouse = false;
-
- ps2_host_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- return;
-}
-
-uint8_t matrix_scan(void)
-{
-
- // scan code reading states
- static enum {
- RESET,
- RESET_RESPONSE,
- KBD_ID0,
- KBD_ID1,
- CONFIG,
- READY,
- F0,
- } state = RESET;
-
- is_modified = false;
-
- uint8_t code;
- if ((code = ps2_host_recv())) {
- debug("r"); debug_hex(code); debug(" ");
- }
-
- switch (state) {
- case RESET:
- debug("wFF ");
- if (ps2_host_send(0xFF) == 0xFA) {
- debug("[ack]\nRESET_RESPONSE: ");
- state = RESET_RESPONSE;
- }
- break;
- case RESET_RESPONSE:
- if (code == 0xAA) {
- debug("[ok]\nKBD_ID: ");
- state = KBD_ID0;
- } else if (code) {
- debug("err\nRESET: ");
- state = RESET;
- }
- break;
- // after reset receive keyboad ID(2 bytes)
- case KBD_ID0:
- if (code) {
- state = KBD_ID1;
- }
- break;
- case KBD_ID1:
- if (code) {
- debug("\nCONFIG: ");
- state = CONFIG;
- }
- break;
- case CONFIG:
- debug("wF8 ");
- if (ps2_host_send(0xF8) == 0xFA) {
- debug("[ack]\nREADY\n");
- state = READY;
- }
- break;
- case READY:
- switch (code) {
- case 0x00:
- break;
- case 0xF0:
- state = F0;
- debug(" ");
- break;
- default: // normal key make
- if (code < 0x88) {
- matrix_make(code);
- } else {
- debug("unexpected scan code at READY: "); debug_hex(code); debug("\n");
- }
- state = READY;
- debug("\n");
- }
- break;
- case F0: // Break code
- switch (code) {
- case 0x00:
- break;
- default:
- if (code < 0x88) {
- matrix_break(code);
- } else {
- debug("unexpected scan code at F0: "); debug_hex(code); debug("\n");
- }
- state = READY;
- debug("\n");
- }
- break;
- }
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
-#ifdef MATRIX_HAS_GHOST
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- if (matrix_has_ghost_in_row(i))
- return true;
- }
-#endif
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
-#ifdef MATRIX_HAS_GHOST
- if (matrix_has_ghost_in_row(row)) {
- print(" <ghost");
- }
-#endif
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
-
-#ifdef MATRIX_HAS_GHOST
-inline
-static bool matrix_has_ghost_in_row(uint8_t row)
-{
- // no ghost exists in case less than 2 keys on
- if (((matrix[row] - 1) & matrix[row]) == 0)
- return false;
-
- // ghost exists in case same state as other row
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- if (i != row && (matrix[i] & matrix[row]) == matrix[row])
- return true;
- }
- return false;
-}
-#endif
-
-
-inline
-static void matrix_make(uint8_t code)
-{
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= 1<<COL(code);
- is_modified = true;
- }
-}
-
-inline
-static void matrix_break(uint8_t code)
-{
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
-}
diff --git a/converter/usb_usb/Makefile b/converter/usb_usb/Makefile
deleted file mode 100644
index 0f25232b25..0000000000
--- a/converter/usb_usb/Makefile
+++ /dev/null
@@ -1,140 +0,0 @@
-#----------------------------------------------------------------------------
-# 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 = usb_usb
-
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# MCU name
-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
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-
-# Build Options
-# comment out to disable the options.
-#
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Media control and System control
-CONSOLE_ENABLE = yes # Console for debug
-#COMMAND_ENABLE = yes # Commands for debug and configuration
-#NKRO_ENABLE = yes # USB Nkey Rollover
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-#LDFLAGS += -Wl,--relax
-
-#OPT_DEFS += -DNO_ACTION_TAPPING
-#OPT_DEFS += -DNO_ACTION_LAYER
-#OPT_DEFS += -DNO_ACTION_MACRO
-
-SRC = \
- keymap_common.c \
- matrix.c \
- main.cpp
-
-ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
-else
- SRC := keymap.c $(SRC)
-endif
-
-CONFIG_H = config.h
-
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-
-# program Leonardo
-PROGRAM_CMD = avrdude -p$(MCU) -cavr109 -b57600 -Uflash:w:$(TARGET).hex -P$(DEV)
-
-
-
-include $(TMK_DIR)/protocol/usb_hid.mk
-include $(TMK_DIR)/protocol/lufa.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/usb_usb/README b/converter/usb_usb/README
deleted file mode 100644
index 30d5deb1e5..0000000000
--- a/converter/usb_usb/README
+++ /dev/null
@@ -1,74 +0,0 @@
-USB to USB keyboard protocol converter
-======================================
-
-Hardware requirement
---------------------
-Arduino Leonardo
- http://arduino.cc/en/Main/ArduinoBoardLeonardo
-
-Circuit@Home USB Host Shield 2.0
- https://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-2-0-for-arduino-assembled/
-
-Buying Arduino Leonardo and USB Host Shield 2.0(from Circuit@home) will be the easiest way, you won't need even soldering iron.
-Arduino's Shield will also work well but I think Sparkfun's needs to be modified.
-
- http://arduino.cc/en/Main/ArduinoUSBHostShield
- https://www.sparkfun.com/products/9947
-
-Also Pro Micro 3.3V(not Mini) or Teensy with mini host shield will work with some fixes on signal/power routing.
- https://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-for-arduino-pro-mini
- https://www.sparkfun.com/products/12587
- https://www.pjrc.com/teensy/td_libs_USBHostShield.html
-
-
-
-Build firmware
---------------
- $ git clone git://github.com/tmk/tmk_keyboard.git
- $ cd tmk_keyboard
- $ git submodule init
- $ git submodule update
- $ cd converter/usb_usb
- $ make
-
-Program converter. Push reset button on Leonardo before run this command. Serial port name(COM17) depends your system. On Linux I got /dev/ttyACM0.
-
- $ DEV=COM17 make program
- or
- $ avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:usb_usb.hex -PCOM17
-
-
-
-Limitation
-----------
-Only supports 'HID Boot protocol'.
-Not support keyboard LED yet.
-
-Note that the converter can host only USB "boot protocol" keyboard(6KRO) and not NKRO, it is possible to support NKRO keyboard but you will need to write HID report parser for that. Every NKRO keyboard can have different HID report and it is difficult to support all kind of NKRO keyboards in the market.
-
-
-
-Update
-------
-2014/12/11 Added Hub support(confirmed with HHKB pro2)
-
-
-
-Resource
---------
-USB Host Sheild 2.0
- https://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-2-0-for-arduino
- https://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-for-arduino-pro-mini
-USB Host Sheild 2.0 source
- https://github.com/felis/USB_Host_Shield_2.0
-Arduino USB Host Shield(with bootst converter)
- http://arduino.cc/en/Main/ArduinoUSBHostShield
-Arduino source
- https://github.com/arduino/Arduino/hardware/arduino/{cores,variants}
-Initial release of TMK USB-USB converter
- https://geekhack.org/index.php?topic=33057.msg653549#msg653549
- http://deskthority.net/workshop-f7/is-remapping-a-usb-keyboard-using-teensy-possible-t2841-30.html#p74854
-Arduino-based hardware keyboard remapper - Colemak forum
- http://forum.colemak.com/viewtopic.php?id=1561
-Teensy + Host Shield
- http://www.pjrc.com/teensy/td_libs_USBHostShield.html
diff --git a/converter/usb_usb/config.h b/converter/usb_usb/config.h
deleted file mode 100644
index c992456763..0000000000
--- a/converter/usb_usb/config.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x005B
-#define DEVICE_VER 0x0814
-#define MANUFACTURER t.m.k.
-#define PRODUCT USB to USB keyboard converter
-
-
-#define DESCRIPTION Product from t.m.k. keyboard firmware project
-
-
-/* matrix size */
-#define MATRIX_ROWS 32
-#define MATRIX_COLS 8
-
-/* key combination for command */
-#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
-
-#endif
diff --git a/converter/usb_usb/keymap.c b/converter/usb_usb/keymap.c
deleted file mode 100644
index 5397de519f..0000000000
--- a/converter/usb_usb/keymap.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "keymap_common.h"
-
-
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: plain Qwerty without layer switching
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|Slp|Wak|
- * `---' `---------------' `---------------' `---------------' `-----------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* 1: Colemak http://colemak.com
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \|
- * |-----------------------------------------------------------|
- * |BackSp| A| R| S| T| D| H| N| E| I| O| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| C| V| B| K| M| ,| ,| /|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `----------------------------------------------------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* 2: Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| \|
- * |-----------------------------------------------------------|
- * |BackSp| A| O| E| U| I| D| H| T| N| S| -|Return |
- * |-----------------------------------------------------------|
- * |Shift | ;| Q| J| K| X| B| M| Wl V| Z|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, DEL, END, PGDN, P7, P8, P9,
- CAPS,A, O, E, U, I, D, H, T, N, S, MINS, ENT, P4, P5, P6, PPLS,
- LSFT,SCLN,Q, J, K, X, B, M, W, V, Z, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* 3: Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \|
- * |-----------------------------------------------------------|
- * |CapsLo| A| S| H| T| G| Y| N| E| O| I| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| M| C| V| K| L| ,| ,| /|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- BSPC,A, S, H, T, G, Y, N, E, O, I, QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/converter/usb_usb/keymap_common.c b/converter/usb_usb/keymap_common.c
deleted file mode 100644
index 8ab5ba923e..0000000000
--- a/converter/usb_usb/keymap_common.c
+++ /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)]) };
-}
diff --git a/converter/usb_usb/keymap_common.h b/converter/usb_usb/keymap_common.h
deleted file mode 100644
index 435d83fdc7..0000000000
--- a/converter/usb_usb/keymap_common.h
+++ /dev/null
@@ -1,77 +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/>.
-*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "keycode.h"
-#include "action.h"
-#include "action_macro.h"
-#include "report.h"
-#include "print.h"
-#include "debug.h"
-#include "keymap.h"
-
-
-extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
-extern const uint16_t fn_actions[];
-
-
-#define KEYMAP( \
- K29,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
- K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,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, \
- K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K28, K5C,K5D,K5E,K57, \
- KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B, \
- KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58 \
-) { \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, /* 00-07 */ \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, /* 08-0F */ \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, /* 10-17 */ \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, /* 18-1F */ \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, /* 20-27 */ \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, /* 28-2F */ \
- { KC_##K30, KC_##K31, KC_NO, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, /* 30-37 */ \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, /* 38-3F */ \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, /* 40-47 */ \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, /* 48-4F */ \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, /* 50-57 */ \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, /* 58-5F */ \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_NO, KC_##K65, KC_NO, KC_NO }, /* 60-67 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 68-6F */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 70-77 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 78-7F */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 80-87 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 88-8F */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 90-97 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* 98-9F */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* A0-A7 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* A8-AF */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* B0-B7 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* B8-BF */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* C0-C7 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* C8-CF */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* D0-D7 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* D8-DF */ \
- { KC_##KE0, KC_##KE1, KC_##KE2, KC_##KE3, KC_##KE4, KC_##KE5, KC_##KE6, KC_##KE7 }, /* E0-E7 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* E8-EF */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* F0-F7 */ \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, /* F8-FF */ \
-}
-
-#endif
diff --git a/converter/usb_usb/keymap_hasu.c b/converter/usb_usb/keymap_hasu.c
deleted file mode 100644
index de19e23076..0000000000
--- a/converter/usb_usb/keymap_hasu.c
+++ /dev/null
@@ -1,158 +0,0 @@
-#include "keymap_common.h"
-
-const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
- /* Layer 0: Default Layer
- * ,-----------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|
- * |-----------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
- * |-----------------------------------------------------------|
- * |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Fn6 |
- * |-----------------------------------------------------------|
- * |Fn7 | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |Fn1|
- * `-----------------------------------------------------------'
- * |Gui|Alt | Fn4 |Fn5 |Gui|
- * `-------------------------------------------'
- */
- [0] = \
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT, FN6, P4, P5, P6, PPLS,
- FN7, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, FN4, RALT,FN5, FN5, FN1, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* Layer 1: HHKB mode[HHKB Fn]
- * ,-----------------------------------------------------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
- * |-----------------------------------------------------------|
- * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
- * |-----------------------------------------------------------|
- * |Contro|VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
- * |-----------------------------------------------------------|
- * |Shift | | | | | | +| -|End|PgD|Dow|Shift | |
- * `-----------------------------------------------------------'
- * |Gui|Alt | Space |Alt |Gui|
- * `-------------------------------------------'
- */
- [1] = \
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, BSLS, DEL, END, PGDN, P7, P8, P9,
- LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT, ENT, P4, P5, P6, PPLS,
- LSFT,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* Layer 2: Vi mode[Slash]
- * ,-----------------------------------------------------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
- * |-----------------------------------------------------------|
- * |Tab |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd| | | |Backs|
- * |-----------------------------------------------------------|
- * |Contro| |Lef|Dow|Rig| |Lef|Dow|Up |Rig| | |Return |
- * |-----------------------------------------------------------|
- * |Shift | | | | | |Hom|PgD|PgUlEnd|Fn0|Shift | |
- * `-----------------------------------------------------------'
- * |Gui|Alt | Space |Alt |Gui|
- * `-------------------------------------------'
- */
- [2] = \
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSLS, DEL, END, PGDN, P7, P8, P9,
- LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
- LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* Layer 3: Mouse mode(IJKL)[Semicolon]
- * ,-----------------------------------------------------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
- * |-----------------------------------------------------------|
- * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
- * |-----------------------------------------------------------|
- * |Contro| | | | | |Mb2|McL|McD|McR|Fn | |Return |
- * |-----------------------------------------------------------|
- * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
- * `-----------------------------------------------------------'
- * |Gui |Alt | Mb1 |Fn |Fn |
- * `--------------------------------------------'
- * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel8
- */
- [3] = \
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, FN8, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD,FN8, DEL, END, PGDN, P7, P8, P9,
- LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,TRNS,NO, ENT, P4, P5, P6, PPLS,
- LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, BTN1, RALT,TRNS,TRNS,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* Layer 5: Mouse mode(IJKL)[Space]
- * ,-----------------------------------------------------------.
- * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
- * |-----------------------------------------------------------|
- * |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
- * |-----------------------------------------------------------|
- * |Contro| | | | | |Mb2|McL|McD|McR|Mb1| |Return |
- * |-----------------------------------------------------------|
- * |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
- * `-----------------------------------------------------------'
- * |Gui |Alt | Mb1 |Fn |Fn |
- * `--------------------------------------------'
- * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel8
- */
- [4] = \
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, FN8, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD,FN8, DEL, END, PGDN, P7, P8, P9,
- LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT, P4, P5, P6, PPLS,
- LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, TRNS, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-
-/*
- * Macro definition
- */
-enum macro_id {
- ALT_TAB,
-};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch (id) {
- case ALT_TAB:
- return (record->event.pressed ?
- MACRO( D(LALT), D(TAB), END ) :
- MACRO( U(TAB), END ));
- }
- return MACRO_NONE;
-}
-
-
-/*
- * Fn action definition
- */
-#ifdef KEYMAP_SECTION_ENABLE
-const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
-#else
-const uint16_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)
- [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
- [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*
- [4] = ACTION_LAYER_TAP_KEY(4, KC_SPC), // Mousekey layer with Space
- [5] = ACTION_LAYER_MOMENTARY(3), // Mousekey layer
- [6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), // RControl with tap Enter
- [7] = ACTION_MODS_ONESHOT(MOD_LSFT), // Oneshot Shift
- [8] = ACTION_MACRO(ALT_TAB), // Application switching
-};
diff --git a/converter/usb_usb/keymap_spacefn.c b/converter/usb_usb/keymap_spacefn.c
deleted file mode 100644
index bffd2bc606..0000000000
--- a/converter/usb_usb/keymap_spacefn.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * SpaceFN layout
- * http://geekhack.org/index.php?topic=51069.0
- */
-#include "keymap_common.h"
-
-
-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| |Pwr|Slp|Wak|
- * `---' `---------------' `---------------' `---------------' `-----------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 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| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, FN0, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* 1: SpaceFN
- * ,-----------------------------------------------------------.
- * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
- * |-----------------------------------------------------------|
- * | | | |Esc| | | |Hom|Up |End|Psc|Slk|Pau|Ins |
- * |-----------------------------------------------------------|
- * | | | | | | |PgU|Lef|Dow|Rig| | | |
- * |-----------------------------------------------------------|
- * | | | | | |Spc|PgD|` |~ | |Men| |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, DEL, END, PGDN, P7, P8, P9,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, P4, P5, P6, PPLS,
- TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, TRNS, UP, P1, P2, P3,
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
- [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
-};
-
diff --git a/converter/usb_usb/main.cpp b/converter/usb_usb/main.cpp
deleted file mode 100644
index 652c805734..0000000000
--- a/converter/usb_usb/main.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <util/delay.h>
-
-// USB HID host
-#include "Usb.h"
-#include "usbhub.h"
-#include "hid.h"
-#include "hidboot.h"
-#include "parser.h"
-
-// LUFA
-#include "lufa.h"
-
-#include "timer.h"
-#include "sendchar.h"
-#include "debug.h"
-#include "keyboard.h"
-#include "led.h"
-
-
-/* LED ping configuration */
-#define TMK_LED
-//#define LEONARDO_LED
-#if defined(TMK_LED)
-// For TMK converter and Teensy
-#define LED_TX_INIT (DDRD |= (1<<6))
-#define LED_TX_ON (PORTD |= (1<<6))
-#define LED_TX_OFF (PORTD &= ~(1<<6))
-#define LED_TX_TOGGLE (PORTD ^= (1<<6))
-#elif defined(LEONARDO_LED)
-// For Leonardo(TX LED)
-#define LED_TX_INIT (DDRD |= (1<<5))
-#define LED_TX_ON (PORTD &= ~(1<<5))
-#define LED_TX_OFF (PORTD |= (1<<5))
-#define LED_TX_TOGGLE (PORTD ^= (1<<5))
-#else
-#define LED_TX_INIT
-#define LED_TX_ON
-#define LED_TX_OFF
-#define LED_TX_TOGGLE
-#endif
-
-
-static void LUFA_setup(void)
-{
- /* Disable watchdog if enabled by bootloader/fuses */
- MCUSR &= ~(1 << WDRF);
- wdt_disable();
-
- /* Disable clock division */
- clock_prescale_set(clock_div_1);
-
- // Leonardo needs. Without this USB device is not recognized.
- USB_Disable();
-
- USB_Init();
-
- // for Console_Task
- USB_Device_EnableSOFEvents();
- print_set_sendchar(sendchar);
-}
-
-
-
-/*
- * USB Host Shield HID keyboard
- */
-USB usb_host;
-USBHub hub1(&usb_host);
-HIDBoot<HID_PROTOCOL_KEYBOARD> kbd(&usb_host);
-KBDReportParser kbd_parser;
-
-
-void led_set(uint8_t usb_led)
-{
- kbd.SetReport(0, 0, 2, 0, 1, &usb_led);
-}
-
-
-
-int main(void)
-{
- // LED for debug
- LED_TX_INIT;
- LED_TX_ON;
-
- debug_enable = true;
- debug_keyboard = true;
-
- host_set_driver(&lufa_driver);
- keyboard_init();
-
- LUFA_setup();
-
- // USB Host Shield setup
- usb_host.Init();
- kbd.SetReportParser(0, (HIDReportParser*)&kbd_parser);
-
- /* NOTE: Don't insert time consuming job here.
- * It'll cause unclear initialization failure when DFU reset(worm start).
- */
- sei();
-
- // wait for startup of sendchar routine
- while (USB_DeviceState != DEVICE_STATE_Configured) ;
- if (debug_enable) {
- _delay_ms(1000);
- }
-
- debug("init: done\n");
-
-uint16_t timer;
- for (;;) {
- keyboard_task();
-
-timer = timer_read();
- usb_host.Task();
-timer = timer_elapsed(timer);
-if (timer > 100) {
- debug("host.Task: "); debug_hex16(timer); debug("\n");
-}
-
-#if !defined(INTERRUPT_CONTROL_ENDPOINT)
- // LUFA Task for control request
- USB_USBTask();
-#endif
- }
-
- return 0;
-}
diff --git a/converter/usb_usb/matrix.c b/converter/usb_usb/matrix.c
deleted file mode 100644
index 83d5ab6c83..0000000000
--- a/converter/usb_usb/matrix.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-Copyright 2011 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 <stdbool.h>
-#include "usb_hid.h"
-#include "keycode.h"
-#include "util.h"
-#include "print.h"
-#include "debug.h"
-#include "matrix.h"
-
-/* KEY CODE to Matrix
- *
- * HID keycode(1 byte):
- * Higher 5 bits indicates ROW and lower 3 bits COL.
- *
- * 7 6 5 4 3 2 1 0
- * +---------------+
- * | ROW | COL |
- * +---------------+
- *
- * Matrix space(32 * 8):
- * 01234567
- * 0 +--------+
- * : | |
- * : | |
- * 31 +--------+
- */
-#define ROW_MASK 0xF8
-#define COL_MASK 0x07
-#define CODE(row, col) (((row) << 3) | (col))
-#define ROW(code) (((code) & ROW_MASK) >> 3)
-#define COL(code) ((code) & COL_MASK)
-#define ROW_BITS(code) (1 << COL(code))
-
-
-uint8_t matrix_rows(void) { return MATRIX_ROWS; }
-uint8_t matrix_cols(void) { return MATRIX_COLS; }
-void matrix_init(void) {}
-bool matrix_has_ghost(void) { return false; }
-
-static bool matrix_is_mod =false;
-
-uint8_t matrix_scan(void) {
- static uint16_t last_time_stamp = 0;
-
- if (last_time_stamp != usb_hid_time_stamp) {
- last_time_stamp = usb_hid_time_stamp;
- matrix_is_mod = true;
- } else {
- matrix_is_mod = false;
- }
- return 1;
-}
-
-bool matrix_is_modified(void) {
-
- return matrix_is_mod;
-}
-
-bool matrix_is_on(uint8_t row, uint8_t col) {
- uint8_t code = CODE(row, col);
-
- if (IS_MOD(code)) {
- if (usb_hid_keyboard_report.mods & ROW_BITS(code)) {
- return true;
- }
- }
- for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
- if (usb_hid_keyboard_report.keys[i] == code) {
- return true;
- }
- }
- return false;
-}
-
-uint8_t matrix_get_row(uint8_t row) {
- uint8_t row_bits = 0;
-
- if (IS_MOD(CODE(row, 0)) && usb_hid_keyboard_report.mods) {
- row_bits |= usb_hid_keyboard_report.mods;
- }
-
- for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
- if (IS_ANY(usb_hid_keyboard_report.keys[i])) {
- if (row == ROW(usb_hid_keyboard_report.keys[i])) {
- row_bits |= ROW_BITS(usb_hid_keyboard_report.keys[i]);
- }
- }
- }
- return row_bits;
-}
-
-uint8_t matrix_key_count(void) {
- uint8_t count = 0;
-
- count += bitpop(usb_hid_keyboard_report.mods);
- for (uint8_t i = 0; i < KEYBOARD_REPORT_KEYS; i++) {
- if (IS_ANY(usb_hid_keyboard_report.keys[i])) {
- count++;
- }
- }
- return count;
-}
-
-void matrix_print(void) {
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
-#ifdef MATRIX_HAS_GHOST
- if (matrix_has_ghost_in_row(row)) {
- print(" <ghost");
- }
-#endif
- print("\n");
- }
-}
diff --git a/converter/x68k_usb/Makefile b/converter/x68k_usb/Makefile
deleted file mode 100644
index 60e9a57467..0000000000
--- a/converter/x68k_usb/Makefile
+++ /dev/null
@@ -1,101 +0,0 @@
-#
-# Makefile for PJRC Teensy
-#
-
-
-# Target file name (without extension).
-TARGET = x68k_usb_pjrc
-
-# Directory common source filess exist
-TMK_DIR = ../../tmk_core
-
-# Directory keyboard dependent files exist
-TARGET_DIR = .
-
-# keyboard dependent files
-SRC = keymap.c \
- matrix.c \
- led.c \
- protocol/serial_uart.c
-
-CONFIG_H = config_pjrc.h
-
-
-# MCU name, you MUST set this to match the board you are using
-# type "make clean" after changing this, so all files will be rebuilt
-#MCU = at90usb162 # Teensy 1.0
-MCU = atmega32u4 # Teensy 2.0
-#MCU = at90usb646 # Teensy++ 1.0
-#MCU = at90usb1286 # Teensy++ 2.0
-
-
-# Processor frequency.
-# Normally the first thing your program should do is set the clock prescaler,
-# so your program will run at the correct speed. You should also set this
-# variable to same clock speed. The _delay_ms() macro uses this, and many
-# examples use this variable to calculate timings. Do not add a "UL" here.
-F_CPU = 16000000
-
-
-# Boot Section Size in bytes
-# Teensy halfKay 512
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-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 - not yet supported in LUFA
-
-
-
-#---------------- Programming Options --------------------------
-AVRDUDE = avrdude
-# Type: avrdude -c ? to get a full listing.
-AVRDUDE_PROGRAMMER = avr109
-AVRDUDE_PORT = /dev/ttyACM0
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
-
-# Uncomment the following if you want avrdude's erase cycle counter.
-# Note that this counter needs to be initialized first using -Yn,
-# see avrdude manual.
-#AVRDUDE_ERASE_COUNTER = -y
-
-# Uncomment the following if you do /not/ wish a verification to be
-# performed after programming the device.
-#AVRDUDE_NO_VERIFY = -V
-
-# Increase verbosity level. Please use this when submitting bug
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
-# to submit bug reports.
-#AVRDUDE_VERBOSE = -v -v
-
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
-#AVRDUDE_FLAGS = -p $(MCU) -c $(AVRDUDE_PROGRAMMER)
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
-
-#PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
-#PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
-PROGRAM_CMD = dfu-programmer atmega32u4 flash $(TARGET).hex
-
-
-# Search Path
-VPATH += $(TARGET_DIR)
-VPATH += $(TMK_DIR)
-
-
-include $(TMK_DIR)/protocol/pjrc.mk
-include $(TMK_DIR)/protocol.mk
-include $(TMK_DIR)/common.mk
-include $(TMK_DIR)/rules.mk
diff --git a/converter/x68k_usb/README b/converter/x68k_usb/README
deleted file mode 100644
index 516fcd249f..0000000000
--- a/converter/x68k_usb/README
+++ /dev/null
@@ -1,151 +0,0 @@
-X68000 to USB keyboard protocol converter
-=========================================
-SHARP X68000 is a hobby computer released in Japan.(1987-93)
-http://en.wikipedia.org/wiki/Sharp_X68000
-
-X68000 keyboard has ALPS linear switches.
-- DSETK0016CE01 green linear
-- DSETK0022CE02 yellow linear
-- DSETK0023CE03 yellow linear
-
-
-Hardware
---------
-Target MCU is ATMega32u4 but other USB capable AVR will also work.
-You can use PJRC Teensy as development board.
- http://www.pjrc.com/teensy/
-
-Wiring:
- Mini-DIN Teensy
- -----------------------------------------------------
- pin1 +5V VCC
- pin2 MOUSE -
- pin3 RXD PD2(RXD)
- pin4 TXD PD3(TXD) NOTE: Not supported yet.
- pin5 READY -
- pin6 REMOTE -
- pin7 GND GND
-
-
-Firmware
---------
-Build:
- $ cd x68k_usb
- $ make
-
-And load the binary to MCU with your favorite programmer.
-If you use Teensy you can load with PJRC Teensy Loader tool.
- http://www.pjrc.com/teensy/loader.html
-
-
-* * * * * * * * * * * * * * * * * *
-
-
-X68000 Keyboard Protocol
-========================
-http://kyoutan.jpn.org/uts/pc/pic/x68key/
-
-
-Connector
----------
-Mini DIN 7pin(female connector on computer side)
- 7 6 5
- o o o
- 4 o = o 3
- o o
- 2 1
-
- Mini-DIN
- -------------
- pin1 +5V
- pin2 MOUSE
- pin3 RXD
- pin4 TXD
- pin5 READY
- pin6 REMOTE
- pin7 GND
-
-
-Signaling
----------
-- TXD,RXD
- Asynchronous, 2400baud, 1-startbit(L), 8-databit, 1-stopbit(H)
-
-- READY
- ready/not ready(1/0)
-
-
-Data from keyboard
-------------------
-bit 7 make/break flag(0/1)
-bit 6-0 following scan code
-
-
-Data from computer
-------------------
-- LED control ON/OFF(0/1)
- bit 7 1(fixed)
- bit 6 全角
- bit 5 ひらがな
- bit 4 INS
- bit 3 CAPS
- bit 2 コード入力
- bit 1 ローマ字
- bit 0 かな
-
-- Repeat delay
- bit 7 0(fixed)
- bit 6 1(fixed)
- bit 5 1(fixed)
- bit 4 0(fixed)
- bit 3-0 delay
- REPEAT_DELAY = 200+delay*100 ms
- default: 500ms
-
-- Repeat time
- bit 7 0(fixed)
- bit 6 1(fixed)
- bit 5 1(fixed)
- bit 4 1(fixed)
- bit 3-0 time
- REPEAT_TIME = 30+time^2*5 ms
- default: 110ms
-
-
-Scan Codes
-----------
-,---. ,---. ,-------------------, ,-------------------. ,-----------. ,---------------.
-| 61| | 62| | 63| 64| 65| 66| 67| | 68| 69| 6A| 6B| 6C| | 5A| 5B| 5C| | 5D| 52| 53| 54|
-`---' `---' `-------------------' `-------------------' `-----------' `---------------'
-,-----------------------------------------------------------. ,-----------. ,---------------.
-| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| 0F| | 36| 5E| 37| | 3F| 40| 41| 42|
-|-----------------------------------------------------------| |------------ |---------------|
-| 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| | | 38| 39| 3A| | 43| 44| 45| 46|
-|------------------------------------------------------. 1D | `---=====---' |---------------|
-| 71 | 1E| 1F| 20| 21| 2l| 23| 24| 25| 26| 27| 28| 29| | ___| 3C|___ | 47| 48| 49| 4A|
-|-----------------------------------------------------------| | 3B|---| 3D| |-----------|---|
-| 70 | 2A| 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 70 | `---| 3E|---' | 4B| 4C| 4D| |
-`-----------------------------------------------------------| .---=====---. |-----------| 4E|
- | 5F| 55 | 56 | 35 | 57 | 58 | 59 | 60| | 72 | 73 | | 4F| 50| 51| |
- `---------------------------------------------' `-----------' `---------------'
-
-
-
-LED Special Functions
----------------------
-http://homepage2.nifty.com/m_kamada/docs/unlistedx68k.htm#keyboard
-
-1. Random Illumination
- Plug in with pressing F1, F2 and F3.
-
-2. Sequential Illumination
- Plug in with pressing 記号入力(52), 登録(53) and HELP.
-
-3. Scan code Display
- Plug in with pressing かな(5A), ローマ字(5B) and コード入力(5C).
- You can see its scan code on LEDs by pressing a key.
- +---------------------------------------------------+
- |bit|6 |5 |4 |3 |2 |1 |0 |
- |---+----+--------+---+----+----------+--------+----|
- |LED|全角|ひらがな|INS|CAPS|コード入力|ローマ字|かな|
- +---------------------------------------------------+
diff --git a/converter/x68k_usb/config_pjrc.h b/converter/x68k_usb/config_pjrc.h
deleted file mode 100644
index c49b4a73e1..0000000000
--- a/converter/x68k_usb/config_pjrc.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6800
-#define MANUFACTURER t.m.k.
-#define PRODUCT SHARP X68000 keyboard converter
-#define DESCRIPTION converts SHARP X68000 keyboard protocol into USB
-
-
-/* matrix size */
-#define MATRIX_ROWS 16
-#define MATRIX_COLS 8
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \
- keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
- keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) \
-)
-
-/* legacy keymap support */
-#define USE_LEGACY_KEYMAP
-
-
-/* USART configuration
- * asynchronous, 2400baud, 8-data bit, non parity, 1-stop bit, no flow control
- */
-#ifdef __AVR_ATmega32U4__
- #define SERIAL_UART_BAUD 2400
- #define SERIAL_UART_DATA UDR1
- #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
- #define SERIAL_UART_RXD_VECT USART1_RX_vect
- #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
- #define SERIAL_UART_INIT() do { \
- UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
- UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
- UCSR1B = (1<<RXCIE1) | (1<<RXEN1) | /* RX: interrupt, RX: enable */ \
- (1<<TXEN1); /* TX: enable */ \
- UCSR1C = (0<<UPM11) | (0<<UPM10) | /* parity: none(00), even(01), odd(11) */ \
- (0<<UCSZ12) | (1<<UCSZ11) | (1<<UCSZ10); /* data-8bit(011) */ \
- sei(); \
- } while(0)
-#else
-# error "USART configuration is needed."
-#endif
-
-#endif
diff --git a/converter/x68k_usb/keymap.c b/converter/x68k_usb/keymap.c
deleted file mode 100644
index 5e09f55d20..0000000000
--- a/converter/x68k_usb/keymap.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/pgmspace.h>
-#include "keycode.h"
-#include "util.h"
-#include "keymap.h"
-
-
-
-
-// Following macros help you to define a keymap with the form of actual keyboard layout.
-
-/* X68000 Keyboard Scan codes
- ,---. ,---. ,-------------------, ,-------------------. ,-----------. ,---------------.
- | 61| | 62| | 63| 64| 65| 66| 67| | 68| 69| 6A| 6B| 6C| | 5A| 5B| 5C| | 5D| 52| 53| 54|
- `---' `---' `-------------------' `-------------------' `-----------' `---------------'
- ,-----------------------------------------------------------. ,-----------. ,---------------.
- | 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| 0F| | 36| 5E| 37| | 3F| 40| 41| 42|
- |-----------------------------------------------------------| |------------ |---------------|
- | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| | | 38| 39| 3A| | 43| 44| 45| 46|
- |------------------------------------------------------. 1D | `---=====---' |---------------|
- | 71 | 1E| 1F| 20| 21| 2l| 23| 24| 25| 26| 27| 28| 29| | ___| 3C|___ | 47| 48| 49| 4A|
- |-----------------------------------------------------------| | 3B|---| 3D| |-----------|---|
- | 70 | 2A| 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 70 | `---| 3E|---' | 4B| 4C| 4D| |
- `-----------------------------------------------------------| .---=====---. |-----------| 4E|
- | 5F| 55 | 56 | 35 | 57 | 58 | 59 | 60| | 72 | 73 | | 4F| 50| 51| |
- `---------------------------------------------' `-----------' `---------------'
-*/
-#define KEYMAP( \
- K61,K62, K63,K64,K65,K66,K67, K68,K69,K6A,K6B,K6C, K5A,K5B,K5C, K5D,K52,K53,K54, \
- K01,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K0E,K0F, K36,K5E,K37, K3F,K40,K41,K42, \
- K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B,K1C, K1D, K38,K39,K3A, K43,K44,K45,K46, \
- K71,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29, K3C, K47,K48,K49,K4A, \
- K70,K2A,K2B,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34, K3B,K3E,K3D, K4B,K4C,K4D,K4E, \
- K5F,K55,K56, K35, K57,K58,K59,K60, K72, K73, K4F,K50,K51 \
-) { \
- { KC_NO, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
- { KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
- { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
- { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
- { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
- { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
- { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
- { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_NO, KC_NO, KC_NO }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_NO, KC_NO, KC_NO, KC_NO, }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
-}
-
-
-// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
-static const uint8_t PROGMEM fn_layer[] = {
- 0, // Fn0
- 0, // Fn1
- 0, // Fn2
- 0, // Fn3
- 0, // Fn4
- 0, // Fn5
- 0, // Fn6
- 0 // Fn7
-};
-
-// 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[] = {
- KC_NO, // Fn0
- KC_NO, // Fn1
- KC_NO, // Fn2
- KC_NO, // Fn3
- KC_NO, // Fn4
- KC_NO, // Fn5
- KC_NO, // Fn6
- KC_NO // Fn7
-};
-
-
-static 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|
- `---' `---' `-------------------' `-------------------' `-----------' `---------------'
- ,-----------------------------------------------------------. ,-----------. ,---------------.
- | 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E| 0F| | 36| 5E| 37| | 3F| 40| 41| 42|
- |-----------------------------------------------------------| |------------ |---------------|
- | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 1C| | | 38| 39| 3A| | 43| 44| 45| 46|
- |------------------------------------------------------. 1D | `---=====---' |---------------|
- | 71 | 1E| 1F| 20| 21| 2l| 23| 24| 25| 26| 27| 28| 29| | ___| 3C|___ | 47| 48| 49| 4A|
- |-----------------------------------------------------------| | 3B|---| 3D| |-----------|---|
- | 70 | 2A| 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 70 | `---| 3E|---' | 4B| 4C| 4D| |
- `-----------------------------------------------------------| .---=====---. |-----------| 4E|
- | 5F| 55 | 56 | 35 | 57 | 58 | 59 | 60| | 72 | 73 | | 4F| 50| 51| |
- `---------------------------------------------' `-----------' `---------------'
-*/
- /* ANSI */
- KEYMAP(
- F16, F17, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, PSCR,SLCK,PAUS, CAPS,F11, F12, F13,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,BSPC, HOME,INS, DEL, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, PGDN,PGUP,END, P7, P8, P9, PPLS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,F18, UP, P4, P5, P6, PEQL,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,GRV, LEFT,DOWN,RGHT, P1, P2, P3, PENT,
- F19, LGUI,LALT, SPC, RALT,RGUI,RCTL,APP, F14, F15, P0, PCMM,PDOT
- ),
- /* JIS */
- KEYMAP(
- F16, F17, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, PSCR,SLCK,PAUS, CAPS,F11, F12, F13,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, HOME,INS, DEL, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, PGDN,PGUP,END, P7, P8, P9, PPLS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, UP, P4, P5, P6, PEQL,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RO, LEFT,DOWN,RGHT, P1, P2, P3, PENT,
- LGUI,LALT,MHEN, SPC, HENK,KANA,APP, ZKHK, F14, F15, P0, PCMM,PDOT
- ),
-};
-
-
-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]);
-}
diff --git a/converter/x68k_usb/led.c b/converter/x68k_usb/led.c
deleted file mode 100644
index ccc38699c7..0000000000
--- a/converter/x68k_usb/led.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "stdint.h"
-#include "serial.h"
-#include "led.h"
-#include "debug.h"
-
-
-void led_set(uint8_t usb_led)
-{
- /* X68000 LED bits 0: on, 1: off
- * bit 7 1(fixed)
- * bit 6 全角
- * bit 5 ひらがな
- * bit 4 INS
- * bit 3 CAPS
- * bit 2 コード入力
- * bit 1 ローマ字
- * bit 0 かな
- */
- uint8_t led = 0xFF;
- if (usb_led&(1<<USB_LED_NUM_LOCK)) led &= ~(1<<2);
- if (usb_led&(1<<USB_LED_CAPS_LOCK)) led &= ~(1<<3);
- if (usb_led&(1<<USB_LED_SCROLL_LOCK)) led &= ~(1<<1);
- if (usb_led&(1<<USB_LED_COMPOSE)) led &= ~(1<<4);
- if (usb_led&(1<<USB_LED_KANA)) led &= ~(1<<0);
- serial_send(led);
-}
diff --git a/converter/x68k_usb/matrix.c b/converter/x68k_usb/matrix.c
deleted file mode 100644
index 2d5a1e1169..0000000000
--- a/converter/x68k_usb/matrix.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "util.h"
-#include "serial.h"
-#include "matrix.h"
-#include "debug.h"
-
-
-/*
- * Matrix Array usage:
- *
- * ROW: 16(4bits)
- * COL: 8(3bits)
- *
- * 8bit wide
- * +---------+
- * 0|00 ... 07|
- * 1|08 ... 0F|
- * :| ... |
- * :| ... |
- * E|70 ... 77|
- * F|78 ... 7F|
- * +---------+
- *
- */
-static uint8_t matrix[MATRIX_ROWS];
-#define ROW(code) ((code>>3)&0xF)
-#define COL(code) (code&0x07)
-
-static bool is_modified = false;
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- serial_init();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
-
- return;
-}
-
-uint8_t matrix_scan(void)
-{
- is_modified = false;
-
- uint16_t code;
- code = serial_recv2();
- if (code == -1) {
- return 0;
- }
-
- dprintf("%02X\n", code);
- if (code&0x80) {
- // break code
- if (matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] &= ~(1<<COL(code));
- is_modified = true;
- }
- } else {
- // make code
- if (!matrix_is_on(ROW(code), COL(code))) {
- matrix[ROW(code)] |= (1<<COL(code));
- is_modified = true;
- }
- }
- return code;
-}
-
-bool matrix_is_modified(void)
-{
- return is_modified;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<<col));
-}
-
-inline
-uint8_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 01234567\n");
- for (uint8_t row = 0; row < matrix_rows(); row++) {
- phex(row); print(": ");
- pbin_reverse(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop(matrix[i]);
- }
- return count;
-}
diff --git a/BUILD_GUIDE.md b/doc/BUILD_GUIDE.md
index fd8b6202ff..089d638349 100644
--- a/BUILD_GUIDE.md
+++ b/doc/BUILD_GUIDE.md
@@ -2,12 +2,12 @@
## Build Environment Setup
-### Windows
+### Windows (Vista and later)
1. If you have ever installed WinAVR, uninstall it.
2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
-5. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
+5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
7. Future build commands should be run from the standard Windows command prompt, which you can find by searching for "command prompt" from the start menu or start screen. Ignore the "MHV AVR Shell".
diff --git a/tmk_core/doc/COPYING.GPLv2 b/doc/COPYING.GPLv2
index d159169d10..d159169d10 100644
--- a/tmk_core/doc/COPYING.GPLv2
+++ b/doc/COPYING.GPLv2
diff --git a/tmk_core/doc/COPYING.GPLv3 b/doc/COPYING.GPLv3
index 94a9ed024d..94a9ed024d 100644
--- a/tmk_core/doc/COPYING.GPLv3
+++ b/doc/COPYING.GPLv3
diff --git a/keyboard/planck/CYGWIN_GUIDE.md b/doc/CYGWIN_GUIDE.md
index ac13e745d7..ac13e745d7 100755
--- a/keyboard/planck/CYGWIN_GUIDE.md
+++ b/doc/CYGWIN_GUIDE.md
diff --git a/tmk_core/doc/FUSE.txt b/doc/FUSE.txt
index 40055e5ab1..40055e5ab1 100644
--- a/tmk_core/doc/FUSE.txt
+++ b/doc/FUSE.txt
diff --git a/HAND_WIRE.md b/doc/HAND_WIRE.md
index 0b7367eda3..073dbf447e 100644
--- a/HAND_WIRE.md
+++ b/doc/HAND_WIRE.md
@@ -187,7 +187,7 @@ To start out, download [the firmware](https://github.com/jackhumbert/qmk_firmwar
The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboard/` folder:
- ./new_project.sh <project_name>
+ util/new_project.sh <project_name>
You'll want to navigate to the `keyboard/<project_name>/` folder by typing, like the print-out from the script specifies:
@@ -195,7 +195,7 @@ You'll want to navigate to the `keyboard/<project_name>/` folder by typing, like
#### config.h
-The first thing you're going to want to modify is the `config.h` file. Find `MATRIX_ROWS` and `MATRIX_COLS` and them to match the dimensions of your keyboard's matrix.
+The first thing you're going to want to modify is the `config.h` file. Find `MATRIX_ROWS` and `MATRIX_COLS` and change their definitions to match the dimensions of your keyboard's matrix.
Farther down are `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`. Change their definitions to match how you wired up your matrix (looking from the top of the keyboard, the rows run top-to-bottom and the columns run left-to-right). Likewise, change the definition of `UNUSED_PINS` to match the pins you did not use (this will save power).
@@ -282,7 +282,7 @@ It's also important to use the `KEYMAP` function we defined earlier - this is wh
#### Compiling your firmware
-After you've written out your entire keymap, you're ready to get the firmware compiled and onto your Teensy. Before compiling, you'll need to get your [development environment set-up](https://github.com/jackhumbert/qmk_firmware/blob/master/keyboard/planck/PCB_GUIDE.md#setting-up-the-environment) - you can skip the dfu-programmer instructions, but you'll need to download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html) to get the firmware on your Teensy.
+After you've written out your entire keymap, you're ready to get the firmware compiled and onto your Teensy. Before compiling, you'll need to get your [development environment set-up](/doc/BUILD_GUIDE.md) - you can skip the dfu-programmer instructions, but you'll need to download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html) to get the firmware on your Teensy.
Once everything is installed, running `make` in the terminal should get you some output, and eventually a `<project_name>.hex` file in that folder. If you're having trouble with this step, see the end of the guide for the trouble-shooting section.
diff --git a/keyboard/planck/PCB_GUIDE.md b/doc/PCB_GUIDE.md
index b36d8fb64c..b36d8fb64c 100644
--- a/keyboard/planck/PCB_GUIDE.md
+++ b/doc/PCB_GUIDE.md
diff --git a/tmk_core/doc/POWER.txt b/doc/POWER.txt
index 0abbbe48e8..0abbbe48e8 100644
--- a/tmk_core/doc/POWER.txt
+++ b/doc/POWER.txt
diff --git a/TMK_README.md b/doc/TMK_README.md
index 36ef84ac65..36ef84ac65 100644
--- a/TMK_README.md
+++ b/doc/TMK_README.md
diff --git a/tmk_core/doc/USB_NKRO.txt b/doc/USB_NKRO.txt
index d9f1d12292..d9f1d12292 100644
--- a/tmk_core/doc/USB_NKRO.txt
+++ b/doc/USB_NKRO.txt
diff --git a/VAGRANT_GUIDE.md b/doc/VAGRANT_GUIDE.md
index 922848fd75..f7419ccda8 100644
--- a/VAGRANT_GUIDE.md
+++ b/doc/VAGRANT_GUIDE.md
@@ -4,7 +4,7 @@ This project includes a Vagrantfile that will allow you to build a new firmware
## Requirements
-Using the Vagrantfile in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
+Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12.
@@ -12,15 +12,15 @@ Other than having Vagrant and Virtualbox installed and possibly a restart of you
Build Firmware and Program Controller
-------------------------------------
-See [doc/build.md](tmk_core/doc/build.md), or the README in the particular keyboard/* folder.
+See [/doc/BUIDE_GUIDE.md](/doc/BUILD_GUIDE.md), or the README in the particular keyboard/* folder.
Change your keymap
------------------
-See [doc/keymap.md](tmk_core/doc/keymap.md).
+See [/doc/keymap.md](/doc/keymap.md).
## Flashing the firmware
-The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](keyboard/ergodox_ez/readme.md) gives a great example.
+The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](/keyboard/ergodox_ez/readme.md) gives a great example.
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
\ No newline at end of file
diff --git a/tmk_core/doc/build.md b/doc/build_old.md
index 2846f1d0fb..5c2d57d02d 100644
--- a/tmk_core/doc/build.md
+++ b/doc/build_old.md
@@ -1,6 +1,7 @@
Build Firmware and Program Controller
=====================================
+## This guide may be out-dated - use doc/BUILD_GUIDE.md instead
Download and Install
--------------------
diff --git a/tmk_core/doc/keycode.txt b/doc/keycode.txt
index 44d7e27cd6..44d7e27cd6 100644
--- a/tmk_core/doc/keycode.txt
+++ b/doc/keycode.txt
diff --git a/tmk_core/doc/keymap.md b/doc/keymap.md
index 4d42fbe5cb..4d42fbe5cb 100644
--- a/tmk_core/doc/keymap.md
+++ b/doc/keymap.md
diff --git a/tmk_core/doc/other_projects.md b/doc/other_projects.md
index bf980b0a9e..bf980b0a9e 100644
--- a/tmk_core/doc/other_projects.md
+++ b/doc/other_projects.md
diff --git a/converter/adb_usb/Makefile b/keyboard/arrow_pad/Makefile
index 2369ee70ac..2c4ee0cae5 100644
--- a/converter/adb_usb/Makefile
+++ b/keyboard/arrow_pad/Makefile
@@ -39,29 +39,27 @@
#----------------------------------------------------------------------------
# Target file name (without extension).
-TARGET = adb_usb_lufa
+TARGET = arrow_pad
+
# Directory common source filess exist
+TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
-# project specific files
-SRC = keymap_common.c \
- matrix.c \
- led.c \
- adb.c
+# # project specific files
+SRC = arrow_pad.c
ifdef KEYMAP
- SRC := keymap_$(KEYMAP).c $(SRC)
+ SRC := keymaps/$(KEYMAP).c $(SRC)
else
- SRC := keymap_ansi.c $(SRC)
+ SRC := keymaps/default.c $(SRC)
endif
CONFIG_H = config.h
-
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -109,33 +107,52 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
+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
+# change yes to no to disable
+#
+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
+KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
-# ADB Mice need acceleration for todays much bigger screens.
-OPT_DEFS += -DADB_MOUSE_MAXACC=8
+ifdef KEYMAP
+
+ifeq ("$(wildcard keymaps/$(KEYMAP).c)","")
+ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","")
+ include keymaps/$(KEYMAP)/makefile.mk
+endif
+endif
+
+else
+
+ifneq ("$(wildcard keymaps/default/makefile.mk)","")
+ include keymaps/default/makefile.mk
+endif
+
+endif
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
# Search Path
VPATH += $(TARGET_DIR)
+VPATH += $(TOP_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 $(TOP_DIR)/quantum/quantum.mk
+
diff --git a/keyboard/arrow_pad/README.md b/keyboard/arrow_pad/README.md
new file mode 100644
index 0000000000..f669ad6a12
--- /dev/null
+++ b/keyboard/arrow_pad/README.md
@@ -0,0 +1,24 @@
+arrow_pad keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent README.md](/README.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboard/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. \ No newline at end of file
diff --git a/keyboard/arrow_pad/arrow_pad.c b/keyboard/arrow_pad/arrow_pad.c
new file mode 100644
index 0000000000..f29c2c53fe
--- /dev/null
+++ b/keyboard/arrow_pad/arrow_pad.c
@@ -0,0 +1,114 @@
+#include "arrow_pad.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
+bool process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+ return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+#ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+#endif
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
+
+#ifdef BACKLIGHT_ENABLE
+#define CHANNEL OCR1C
+
+void backlight_init_ports()
+{
+
+ // Setup PB7 as output and output low.
+ DDRB |= (1<<7);
+ PORTB &= ~(1<<7);
+
+ // Use full 16-bit resolution.
+ ICR1 = 0xFFFF;
+
+ // I could write a wall of text here to explain... but TL;DW
+ // Go read the ATmega32u4 datasheet.
+ // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
+
+ // Pin PB7 = OCR1C (Timer 1, Channel C)
+ // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
+ // (i.e. start high, go low when counter matches.)
+ // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
+ // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
+
+ TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
+ TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+
+ backlight_init();
+}
+
+void backlight_set(uint8_t level)
+{
+ if ( level == 0 )
+ {
+ // Turn off PWM control on PB7, revert to output low.
+ TCCR1A &= ~(_BV(COM1C1));
+ CHANNEL = 0x0;
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ }
+ else if ( level == BACKLIGHT_LEVELS )
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+ // Set the brightness
+ CHANNEL = 0xFFFF;
+ }
+ else
+ {
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+ // Set the brightness
+ CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/keyboard/arrow_pad/arrow_pad.h b/keyboard/arrow_pad/arrow_pad.h
new file mode 100644
index 0000000000..2026b52d1d
--- /dev/null
+++ b/keyboard/arrow_pad/arrow_pad.h
@@ -0,0 +1,18 @@
+#ifndef ARROW_PAD_H
+#define ARROW_PAD_H
+
+#include "matrix.h"
+#include "keymap_common.h"
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+#include <avr/io.h>
+#include <stddef.h>
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+bool process_action_user(keyrecord_t *record);
+void led_set_user(uint8_t usb_led);
+void backlight_init_ports(void);
+
+#endif
diff --git a/keyboard/arrow_pad/config.h b/keyboard/arrow_pad/config.h
new file mode 100644
index 0000000000..9e85f3ccf6
--- /dev/null
+++ b/keyboard/arrow_pad/config.h
@@ -0,0 +1,158 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4096
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Nobody
+#define PRODUCT GoldPad
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboard/arrow_pad/keymaps/default.c b/keyboard/arrow_pad/keymaps/default.c
new file mode 100644
index 0000000000..5647f75afe
--- /dev/null
+++ b/keyboard/arrow_pad/keymaps/default.c
@@ -0,0 +1,163 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "arrow_pad.h"
+#include "led.h"
+
+// This is the 21-key keypad to 2x11 element matrix mapping
+#define KEYMAP( \
+ KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
+ KM_NUM, KM_FSL, KM_AST, KM_MIN, \
+ KM___7, KM___8, KM___9, KM_EQU, \
+ KM___4, KM___5, KM___6, KM_PLS, \
+ KM___1, KM___2, KM___3, ___ENT, \
+ KM___0, _____0, KM_DOT, KM_ENT \
+) { \
+ { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
+ { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
+ { KM___7, KM___8, KM___9, KM_EQU }, \
+ { KM___4, KM___5, KM___6, KM_PLS }, \
+ { KM___1, KM___2, KM___3, KC_NO }, \
+ { KM___0, KC_NO, KM_DOT, KM_ENT } \
+}
+
+#define LAYER_BASE 0
+#define LAYER_EDIT 1
+#define LAYER_FUNCTION 2
+
+#define MACRO_COPY_CUT 0
+#define MACRO_SHIFT_CONTROL 1
+#define MACRO_CONTROL_ALT 2
+
+#define M_COPY KC_FN5
+#define M_SHFCT KC_FN6
+#define M_CTALT KC_FN7
+
+#define SC_UNDO LCTL(KC_Z)
+#define SC_REDO LCTL(KC_Y)
+#define SC_CUT LCTL(KC_X)
+#define SC_COPY LCTL(KC_C)
+#define SC_PSTE LCTL(KC_V)
+#define SC_SELA LCTL(KC_A)
+#define SC_SAVE LCTL(KC_S)
+#define SC_OPEN LCTL(KC_O)
+#define SC_ACLS LALT(KC_F4)
+#define SC_CCLS LCTL(KC_F4)
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[LAYER_BASE] = KEYMAP( \
+ KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_P7, KC_P8, KC_P9, KC_PEQL, \
+ KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_P1, KC_P2, KC_P3, XXXXXXX, \
+ KC_P0, KC_PCMM, KC_PDOT, KC_PENT ),
+
+[LAYER_EDIT] = KEYMAP( \
+ KC_ESC, KC_TAB, KC_SPC, _______, \
+ KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
+ KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
+ KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
+ KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
+ KC_BSPC, KC_PENT, KC_DEL, M_SHFCT),
+
+[LAYER_FUNCTION] = KEYMAP( \
+ KC_FN2, KC_FN3, KC_FN4, _______, \
+ KC_FN1, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, XXXXXXX, \
+ RESET, _______, _______, _______ ),
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
+ [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
+ [2] = ACTION_BACKLIGHT_TOGGLE(),
+ [3] = ACTION_BACKLIGHT_INCREASE(),
+ [4] = ACTION_BACKLIGHT_DECREASE(),
+ [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
+ [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
+ [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
+
+};
+
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+}
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch (id) {
+
+ case MACRO_COPY_CUT:
+ if (record->event.pressed) {
+ register_code(KC_LCTL);
+ if (record->tap.count == 1) {
+ register_code(KC_C);
+ unregister_code(KC_C);
+ }
+ else if (record->tap.count == 2) {
+ register_code(KC_X);
+ unregister_code(KC_X);
+ }
+ unregister_code(KC_LCTL);
+ }
+ break;
+
+ case MACRO_SHIFT_CONTROL:
+ if (record->event.pressed) {
+ if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count == 3) register_code(KC_PENT);;
+ }
+ else {
+ unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
+ unregister_code(KC_PENT);
+ }
+ break;
+
+ case MACRO_CONTROL_ALT:
+ if (record->event.pressed) {
+ if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
+ }
+ else {
+ unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
+ }
+ break;
+ }
+
+ return MACRO_NONE;
+}
+
+void led_set_user(uint8_t usb_led)
+{
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output high
+ DDRD |= (1<<6);
+ PORTD |= (1<<6);
+ } else {
+ // Hi-Z
+ DDRD &= ~(1<<6);
+ PORTD &= ~(1<<6);
+ }
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ // output low
+ DDRC |= (1<<7);
+ PORTC |= ~(1<<7);
+ } else {
+ // Hi-Z
+ DDRC &= ~(1<<7);
+ PORTC &= ~(1<<7);
+ }
+} \ No newline at end of file
diff --git a/keyboard/arrow_pad/keymaps/pad_21/config.h b/keyboard/arrow_pad/keymaps/pad_21/config.h
new file mode 100644
index 0000000000..a095e87374
--- /dev/null
+++ b/keyboard/arrow_pad/keymaps/pad_21/config.h
@@ -0,0 +1,158 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4097
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Nobody
+#define PRODUCT Arrow Pad 21
+#define DESCRIPTION 21-Key QMK Assistant
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 11
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, B6, B5, B4, D7, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboard/arrow_pad/keymaps/pad_21/keymap.c b/keyboard/arrow_pad/keymaps/pad_21/keymap.c
new file mode 100644
index 0000000000..28917a5d9e
--- /dev/null
+++ b/keyboard/arrow_pad/keymaps/pad_21/keymap.c
@@ -0,0 +1,160 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "arrow_pad.h"
+#include "led.h"
+
+// This is the 21-key keypad to 2x11 element matrix mapping
+#define KEYMAP( \
+ KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
+ KM_NUM, KM_FSL, KM_AST, KM_MIN, \
+ KM___7, KM___8, KM___9, ___PLS, \
+ KM___4, KM___5, KM___6, KM_PLS, \
+ KM___1, KM___2, KM___3, ___ENT, \
+ KM___0, _____0, KM_DOT, KM_ENT \
+) { \
+ { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
+ { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
+}
+
+
+#define LAYER_BASE 0
+#define LAYER_EDIT 1
+#define LAYER_FUNCTION 2
+
+#define MACRO_COPY_CUT 0
+#define MACRO_SHIFT_CONTROL 1
+#define MACRO_CONTROL_ALT 2
+
+#define M_COPY KC_FN5
+#define M_SHFCT KC_FN6
+#define M_CTALT KC_FN7
+
+#define SC_UNDO LCTL(KC_Z)
+#define SC_REDO LCTL(KC_Y)
+#define SC_CUT LCTL(KC_X)
+#define SC_COPY LCTL(KC_C)
+#define SC_PSTE LCTL(KC_V)
+#define SC_SELA LCTL(KC_A)
+#define SC_SAVE LCTL(KC_S)
+#define SC_OPEN LCTL(KC_O)
+#define SC_ACLS LALT(KC_F4)
+#define SC_CCLS LCTL(KC_F4)
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[LAYER_BASE] = KEYMAP( \
+ KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_P7, KC_P8, KC_P9, XXXXXXX, \
+ KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_P1, KC_P2, KC_P3, XXXXXXX, \
+ KC_P0, XXXXXXX, KC_PDOT, KC_PENT ),
+
+[LAYER_EDIT] = KEYMAP( \
+ KC_ESC, KC_TAB, KC_SPC, _______, \
+ KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
+ KC_HOME, KC_UP, KC_PGUP, XXXXXXX, \
+ KC_LEFT, M_COPY, KC_RGHT, M_CTALT, \
+ KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
+ KC_BSPC, XXXXXXX, KC_DEL, M_SHFCT),
+
+[LAYER_FUNCTION] = KEYMAP( \
+ KC_FN2, KC_FN3, KC_FN4, _______, \
+ KC_FN1, _______, _______, _______, \
+ _______, _______, _______, XXXXXXX, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, XXXXXXX, \
+ RESET, XXXXXXX, _______, _______ ),
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
+ [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
+ [2] = ACTION_BACKLIGHT_TOGGLE(),
+ [3] = ACTION_BACKLIGHT_INCREASE(),
+ [4] = ACTION_BACKLIGHT_DECREASE(),
+ [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
+ [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
+ [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
+
+};
+
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+}
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch (id) {
+
+ case MACRO_COPY_CUT:
+ if (record->event.pressed) {
+ register_code(KC_LCTL);
+ if (record->tap.count == 1) {
+ register_code(KC_C);
+ unregister_code(KC_C);
+ }
+ else if (record->tap.count == 2) {
+ register_code(KC_X);
+ unregister_code(KC_X);
+ }
+ unregister_code(KC_LCTL);
+ }
+ break;
+
+ case MACRO_SHIFT_CONTROL:
+ if (record->event.pressed) {
+ if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count == 3) register_code(KC_PENT);;
+ }
+ else {
+ unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
+ unregister_code(KC_PENT);
+ }
+ break;
+
+ case MACRO_CONTROL_ALT:
+ if (record->event.pressed) {
+ if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
+ }
+ else {
+ unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
+ }
+ break;
+ }
+
+ return MACRO_NONE;
+}
+
+void led_set_user(uint8_t usb_led)
+{
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output high
+ DDRD |= (1<<6);
+ PORTD |= (1<<6);
+ } else {
+ // Hi-Z
+ DDRD &= ~(1<<6);
+ PORTD &= ~(1<<6);
+ }
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ // output low
+ DDRC |= (1<<7);
+ PORTC |= ~(1<<7);
+ } else {
+ // Hi-Z
+ DDRC &= ~(1<<7);
+ PORTC &= ~(1<<7);
+ }
+} \ No newline at end of file
diff --git a/keyboard/arrow_pad/keymaps/pad_21/makefile.mk b/keyboard/arrow_pad/keymaps/pad_21/makefile.mk
new file mode 100644
index 0000000000..af51976a89
--- /dev/null
+++ b/keyboard/arrow_pad/keymaps/pad_21/makefile.mk
@@ -0,0 +1,17 @@
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+CONFIG_H = keymaps/$(KEYMAP)/config.h \ No newline at end of file
diff --git a/keyboard/arrow_pad/keymaps/pad_24/config.h b/keyboard/arrow_pad/keymaps/pad_24/config.h
new file mode 100644
index 0000000000..75369c047f
--- /dev/null
+++ b/keyboard/arrow_pad/keymaps/pad_24/config.h
@@ -0,0 +1,158 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4096
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Nobody
+#define PRODUCT Arrow Pad 24
+#define DESCRIPTION 24-Key QMK Assistant
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboard/arrow_pad/keymaps/pad_24/keymap.c b/keyboard/arrow_pad/keymaps/pad_24/keymap.c
new file mode 100644
index 0000000000..5647f75afe
--- /dev/null
+++ b/keyboard/arrow_pad/keymaps/pad_24/keymap.c
@@ -0,0 +1,163 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "arrow_pad.h"
+#include "led.h"
+
+// This is the 21-key keypad to 2x11 element matrix mapping
+#define KEYMAP( \
+ KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
+ KM_NUM, KM_FSL, KM_AST, KM_MIN, \
+ KM___7, KM___8, KM___9, KM_EQU, \
+ KM___4, KM___5, KM___6, KM_PLS, \
+ KM___1, KM___2, KM___3, ___ENT, \
+ KM___0, _____0, KM_DOT, KM_ENT \
+) { \
+ { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
+ { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
+ { KM___7, KM___8, KM___9, KM_EQU }, \
+ { KM___4, KM___5, KM___6, KM_PLS }, \
+ { KM___1, KM___2, KM___3, KC_NO }, \
+ { KM___0, KC_NO, KM_DOT, KM_ENT } \
+}
+
+#define LAYER_BASE 0
+#define LAYER_EDIT 1
+#define LAYER_FUNCTION 2
+
+#define MACRO_COPY_CUT 0
+#define MACRO_SHIFT_CONTROL 1
+#define MACRO_CONTROL_ALT 2
+
+#define M_COPY KC_FN5
+#define M_SHFCT KC_FN6
+#define M_CTALT KC_FN7
+
+#define SC_UNDO LCTL(KC_Z)
+#define SC_REDO LCTL(KC_Y)
+#define SC_CUT LCTL(KC_X)
+#define SC_COPY LCTL(KC_C)
+#define SC_PSTE LCTL(KC_V)
+#define SC_SELA LCTL(KC_A)
+#define SC_SAVE LCTL(KC_S)
+#define SC_OPEN LCTL(KC_O)
+#define SC_ACLS LALT(KC_F4)
+#define SC_CCLS LCTL(KC_F4)
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[LAYER_BASE] = KEYMAP( \
+ KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_P7, KC_P8, KC_P9, KC_PEQL, \
+ KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_P1, KC_P2, KC_P3, XXXXXXX, \
+ KC_P0, KC_PCMM, KC_PDOT, KC_PENT ),
+
+[LAYER_EDIT] = KEYMAP( \
+ KC_ESC, KC_TAB, KC_SPC, _______, \
+ KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
+ KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
+ KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
+ KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
+ KC_BSPC, KC_PENT, KC_DEL, M_SHFCT),
+
+[LAYER_FUNCTION] = KEYMAP( \
+ KC_FN2, KC_FN3, KC_FN4, _______, \
+ KC_FN1, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, XXXXXXX, \
+ RESET, _______, _______, _______ ),
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
+ [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
+ [2] = ACTION_BACKLIGHT_TOGGLE(),
+ [3] = ACTION_BACKLIGHT_INCREASE(),
+ [4] = ACTION_BACKLIGHT_DECREASE(),
+ [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
+ [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
+ [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
+
+};
+
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+}
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch (id) {
+
+ case MACRO_COPY_CUT:
+ if (record->event.pressed) {
+ register_code(KC_LCTL);
+ if (record->tap.count == 1) {
+ register_code(KC_C);
+ unregister_code(KC_C);
+ }
+ else if (record->tap.count == 2) {
+ register_code(KC_X);
+ unregister_code(KC_X);
+ }
+ unregister_code(KC_LCTL);
+ }
+ break;
+
+ case MACRO_SHIFT_CONTROL:
+ if (record->event.pressed) {
+ if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count == 3) register_code(KC_PENT);;
+ }
+ else {
+ unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
+ unregister_code(KC_PENT);
+ }
+ break;
+
+ case MACRO_CONTROL_ALT:
+ if (record->event.pressed) {
+ if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
+ }
+ else {
+ unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
+ }
+ break;
+ }
+
+ return MACRO_NONE;
+}
+
+void led_set_user(uint8_t usb_led)
+{
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output high
+ DDRD |= (1<<6);
+ PORTD |= (1<<6);
+ } else {
+ // Hi-Z
+ DDRD &= ~(1<<6);
+ PORTD &= ~(1<<6);
+ }
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ // output low
+ DDRC |= (1<<7);
+ PORTC |= ~(1<<7);
+ } else {
+ // Hi-Z
+ DDRC &= ~(1<<7);
+ PORTC &= ~(1<<7);
+ }
+} \ No newline at end of file
diff --git a/keyboard/arrow_pad/keymaps/pad_24/makefile.mk b/keyboard/arrow_pad/keymaps/pad_24/makefile.mk
new file mode 100644
index 0000000000..e31bfe1af2
--- /dev/null
+++ b/keyboard/arrow_pad/keymaps/pad_24/makefile.mk
@@ -0,0 +1,17 @@
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+CONFIG_H = keymaps/$(KEYMAP)/config.h \ No newline at end of file
diff --git a/keyboard/atomic/flash-pcb.sh b/keyboard/atomic/flash-pcb.sh
deleted file mode 100755
index 46abc6982a..0000000000
--- a/keyboard/atomic/flash-pcb.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-dfu-programmer atmega32u4 erase --force
-dfu-programmer atmega32u4 flash atomic_pcb.hex
-dfu-programmer atmega32u4 reset \ No newline at end of file
diff --git a/keyboard/ergodox_ez/keymaps/bepo/README.md b/keyboard/ergodox_ez/keymaps/bepo/README.md
new file mode 100644
index 0000000000..338909ed99
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/bepo/README.md
@@ -0,0 +1,34 @@
+# BEPO keymap for the ErgoDox
+
+This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this README will be in french.
+
+# Disposition BÉPO pour l'ErgoDox
+
+Cette keymap a été pensée pour la disposition BÉPO (http://bepo.fr), qui est une disposition de clavier francophone, ergonomique et libre, élaborée selon la méthode Dvorak. L'adaptation de cette disposition à l'ErgoDox a été réalisée en conservant les points forts du clavier TypeMatrix 2030 (très répandu dans la communauté bépo, avec un excellent rapport ergonomie / prix) voir en réglant certains de ses défauts (3 colonnes pour l'auriculaire droit et touche "Ê") et en apportant son lot de nouveautés (compatibilité avec les systèmes azerty et qwerty).
+
+Particularités
+--------------
+
+Touches de repos des pouces : "espace" à gauche et "entrée" à droite.
+
+Placement des touches de combinaison ("Shift", "Alt", "Ctrl"...) adapté aux pouces, et permettant de conserver chaque doigt pour les rangées de lettres auxquelles ils sont assignés sans avoir à changer la touche de combinaison de côté (exemple : "A" majuscule puis "M" majuscule avec les auriculaires et un seul appui d'une touche "Shift").
+
+Les touches "Alt" et "Alt Gr" sont accessibles avec les pouces sur la rangée du bas comme sur la TypeMatrix 2030, avec une symétrie gauche / droite.
+
+Les touches "Ctrl" sont placées sur la même ligne que les touche "Alt" et "Alt Gr" comme sur un clavier clasique, elles sont accessibles aux pouces sur la rangée du bas (moins éloigné que le groupe de touches de pouces pour des petites mains).
+
+Les touches "Backspace" et "Delete" sont placées comme sur la TypeMatrix 2030, du côté gauche uniquement (pour laisser celles de la main droite servir de {caps,num,scroll}lock puisqu'elles ont des LED).
+
+La touche "Tab" est placée comme sur la TypeMatrix 2020.
+
+Meilleure symétrie et accessibilité que la TypeMatrix 2030 : les touches "W" et "%" ont dû être déplacées du côté gauche en raison du nombre de touches de l'ErgoDox, mais l'auriculaire droit ne gère maintenant que deux colonnes de touches au lieu de trois. La touche "Ê" redevient accessible sur la même rangée que les autres lettres, comme sur un clavier classique en disposition bépo. Les lettres, chiffres et symboles sont tous regroupés sur 4 lignes et 6 colonnes pour chaque main, et la première rangée de lettres à la main gauche conserve une identité visuelle "BÉPO".
+
+Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long).
+
+Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0".
+
+L'appui sur une touche permet de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle.
+
+TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY.
+
+> Olivier Smedts <olivier@gid0.org>
diff --git a/keyboard/ergodox_ez/keymaps/bepo/bepo.hex b/keyboard/ergodox_ez/keymaps/bepo/bepo.hex
new file mode 100644
index 0000000000..0456ea21d0
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/bepo/bepo.hex
@@ -0,0 +1,1193 @@
+:100000000C94D2030C9419040C9419040C94190444
+:100010000C9419040C9419040C9419040C941904EC
+:100020000C9419040C9419040C94B50E0C94870FBD
+:100030000C9419040C9419040C9419040C941904CC
+:100040000C9419040C9443230C9419040C94190473
+:100050000C9419040C94D71C0C9419040C941904D6
+:100060000C9419040C9419040C9419040C9419049C
+:100070000C9419040C9419040C9419040C9419048C
+:100080000C9419040C9419040C9419040C9419047C
+:100090000C9419040C9419040C9419040C9419046C
+:1000A0000C9419040C9419040C941904F40F1610F0
+:1000B0000411161004115B107E100411D310E61009
+:1000C000B513B513E413E4131A143A146B156B1536
+:1000D00045146B15F514F5145C156B156B1565154A
+:1000E0000215021502150215021502150215021558
+:1000F0000215021502150215021502150215021548
+:100100001415211528152F15391502E002E20001FA
+:10011000E201E00002620001620262016200350059
+:100120002E0030006400015400001E001400040082
+:100130001D00000004521F001A0016001B00E300FF
+:10014000E1002000080007000600E0002C0021006C
+:10015000150009001900E2000552220017000A00EC
+:100160000500000029004C002A0000002B000000C0
+:100170000652470039000000530000000000230031
+:100180001C000B00110000004900240018000D00A5
+:100190001000E600013025000C000E003600E400DF
+:1001A0002800260012000F003700E700E5002700B6
+:1001B000130033003800460004522D002F00340095
+:1001C000310048000000210222021A00080001004C
+:1001D000000034020500040004000000045236024E
+:1001E000080018001C00E3000252370213000C0044
+:1001F0001B00E0002C002602120008003700E2007D
+:1002000005522702080036000E00000029004C00AD
+:100210002A0000002B0000000652470039000000B1
+:100220005300000000001F022302060034000000FB
+:1002300049002E02190017001400035201002D007E
+:10024000070016000A00E400280038000F0015001F
+:100250000B00E700025225020D00110009004600C4
+:1002600004522E001D00100006004800000020026D
+:1002700035001A020802010000001E0005020402F7
+:100280000402010001001F00080218021C02E30220
+:100290000100200013020C021B02E00201002100F9
+:1002A000120208023302E2020100220008023300B7
+:1002B0000E02000001000100010000002B020000FE
+:1002C0000100010001000000010000000100230006
+:1002D0001E02060238020000010024001902170263
+:1002E0001402E60201002500070216020A02E402D7
+:1002F000010026000F0215020B02E7020100270091
+:100300000D02110209020100010001001D0210028C
+:10031000060201000000210222021A00080001006A
+:1003200000003402310204003100000004523602A1
+:10033000080018002F02E3000252370224020C00CA
+:100340003002E0002D022F00120022143700E200DC
+:1003500005523000080036003502000029004C002C
+:100360002A0000002B000000065247003900000060
+:100370005300000000001F022302060034000000AA
+:1003800049002E02190017001400010001002D0081
+:10039000070016000A00E400280038000F001500CE
+:1003A0000B00E700025225020D0011000900460073
+:1003B00004522E001D00100006004800000000003E
+:1003C000000000000000000000003A0000000000F3
+:1003D0007A00000001003B00000000007B000100EB
+:1003E00001003C00000000007C00010000003D0016
+:1003F000000000007D00010000003E000000000041
+:10040000000000000000A800A9000000AA000000F1
+:1004100000000000000000000000000000003F009D
+:100420004B004E0000000000000040004A00500059
+:1004300000000100010041005200510000000100D5
+:10044000000042004D004F00000001000100430089
+:100450004400450000000000010000000000000012
+:10046000000000000000000000000000000000008C
+:10047000000000000000000000000000000000007C
+:10048000000000000000010001000000000000006A
+:10049000000001000000000000000000000001005A
+:1004A000010000000000000000000000000000004B
+:1004B000000000000000000000000000000000003C
+:1004C000000000000000000000000000000000002C
+:1004D000000057005F005C005900620000005600F9
+:1004E00060005D005A0000305800540061005E005A
+:1004F0005B008500010055000000000000000000C6
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000100CA
+:1005300001000000000000000000010000000000B9
+:1005400000000000000001000000000000000000AA
+:10055000000000000000000000000000000000009B
+:10056000010000000000000000000000000000008A
+:10057000000000000000000000000000F400F20095
+:100580000000010000000000F000F1000000010088
+:1005900000000000F500F300000001000100000071
+:1005A000F900FA0000000000000000000000000058
+:1005B00000000000000016034500720067006F0095
+:1005C00044006F007800200045005A000000160328
+:1005D0004500720067006F0044006F007800200043
+:1005E00045005A0000000403090409026D000401DB
+:1005F00000A0FA0904000001030101000921110112
+:100600000001223F000705810308000A09040100D8
+:100610000103010200092111010001224D0007051B
+:10062000820308000A0904020001030000000921F6
+:10063000110100012236000705830308000A09049E
+:10064000030001030000000921110100012239000B
+:10065000070584031000011201100100000008EDDD
+:10066000FE071301000102000105010906A10105B1
+:100670000719E029E7150025019508750181020594
+:1006800008190129059505750191029501750391D8
+:100690000105071900297715002501957875018155
+:1006A00002C005010980A101850216010026B700DC
+:1006B0001A01002AB700751095018100C0050C09C8
+:1006C00001A1018503160100269C021A01002A9C43
+:1006D00002751095018100C005010902A1010901FF
+:1006E000A1000509190129051500250195057501C8
+:1006F00081029501750381010501093009311581D8
+:10070000257F95027508810609381581257F950199
+:1007100075088106050C0A38021581257F9501753B
+:10072000088106C0C005010906A101050719E029D5
+:10073000E71500250195087501810295017508816D
+:1007400001050819012905950575019102950175A5
+:100750000391010507190029FF150025FF9506756E
+:10076000088100C00000000000000000000000013F
+:100770000204060A0F17202C3A4A5D71879DB3C701
+:10078000DAE9F5FCFFFCF5E9DAC7B39D87715D4A4C
+:100790003A2C20170F0A0604020100000000000096
+:1007A0000000000011241FBECFEFDAE0DEBFCDBF96
+:1007B00004B603FE27C08091FB019091FC01A0913B
+:1007C000FD01B091FE018730904BA740B04BD1F4B2
+:1007D0001092FB011092FC011092FD011092FE019B
+:1007E00014BE84B7877F84BF0FB6F894A895809114
+:1007F0006000886180936000109260000FBEE0E0AE
+:10080000FFE3099511E0A0E0B1E0E2E3FAE402C001
+:1008100005900D92A433B107D9F721E0A4E3B1E02C
+:1008200001C01D92AB3FB207E1F70E94F60B0C949A
+:1008300017250C940000662319F0613041F017C0B1
+:10084000FC018281811116C084E191E00895FC01D0
+:100850008281882331F084E00E94131A8FE091E0B6
+:10086000089584E00E94341A8AE091E0089580E0BF
+:1008700090E0089587E191E00895089508950C941B
+:100880003E0456985E9825982D9826982E9827987D
+:100890002F988FEF90E09093890080938800909339
+:1008A0008B0080938A0090938D0080938C00259A12
+:1008B0002D9A2FEF80E792E0215080409040E1F7A1
+:1008C00000C00000269A2E9A2FEF80E792E0215078
+:1008D00080409040E1F700C00000279A2F9A2FEF48
+:1008E00080E792E0215080409040E1F700C0000096
+:1008F00025982D982FEF80E792E02150804090407E
+:10090000E1F700C0000026982E982FEF80E792E0D4
+:10091000215080409040E1F700C0000027982F98B8
+:1009200056985E9825982D9826982E9827982F9857
+:10093000089589EA8093800089E08093810024985B
+:100940002C983F988AB18F748AB96E98479A8BB168
+:10095000806B8BB9769A0E9441040C943D0480E22E
+:10096000809300018091340181110EC00E94FE0429
+:1009700081E0809334012FEF83ED90E3215080409C
+:100980009040E1F700C0000080E40E9404058093DD
+:10099000000181112EC00E942E058093000181115B
+:1009A00028C00E942E0580930001811122C08FE390
+:1009B0000E942E058093000181111BC00E94260514
+:1009C00080E40E94040580930001811112C08CE034
+:1009D0000E942E058093000181110BC00E942E05FC
+:1009E00080930001811105C08FE30E942E05809342
+:1009F00000010E9426058091000108951092B9001F
+:100A00008AE08093B800089594EA9093BC00909196
+:100A1000BC0097FFFCCF9091B900987F983021F0EF
+:100A2000903111F081E008958093BB0084E88093B9
+:100A3000BC008091BC0087FFFCCF8091B900887F0B
+:100A4000883111F0803471F780E0089584E9809353
+:100A5000BC008091BC0084FDFCCF08958093BB0056
+:100A600084E88093BC008091BC0087FFFCCF90910C
+:100A7000B900987F81E0983209F480E0089584E815
+:100A80008093BC008091BC0087FFFCCF8091BB00AD
+:100A9000089580910001811115C080E40E94040531
+:100AA0008093000181110CC082E10E942E05809389
+:100AB0000001811105C08FEF0E942E058093000177
+:100AC0000E94260584B1807F84B985B1807F85B975
+:100AD0008AB1837F8AB98BB1837F8BB93E98469860
+:100AE00008950E94AF04809300010E94490580B3DD
+:100AF0008C7080BB81B3836F81BBA6E3B1E0E4E47B
+:100B0000F1E08EE08E0F11921D928E13FCCF0C94AB
+:100B10009904BF92CF92DF92EF92FF920F931F93AF
+:100B2000CF93DF9380910001882379F08091350184
+:100B30008F5F80933501811108C00E94AF048093BC
+:100B40000001811102C00E94410406E311E0C0E0EF
+:100B5000D0E0DD24D39482E0C82EEE24E394F12C7F
+:100B6000C730D10500F580910001811164C080E497
+:100B70000E94040580930001811112C082E10E944D
+:100B80002E058093000181110BC0C7010C2E01C0FE
+:100B9000880F0A94EAF780950E942E058093000141
+:100BA0000E94260548C0CA30A1F028F4C83059F088
+:100BB000C93061F005C0CC3089F070F0CD3089F0DB
+:100BC000209A289810C0219A29980DC0229A2A9814
+:100BD0000AC0239A2B9807C0529A01C0539A5B9877
+:100BE00002C03E9A469890EA9A95F1F79FB179999A
+:100BF00002C082E001C080E091709D25982B7C9915
+:100C000002C084E001C080E0892B7D9902C038E0F9
+:100C100001C030E0832B7E9902C020E101C020E0BA
+:100C2000822B9FB19095991F9927991F9295990FA3
+:100C3000907E892B0FC080910001811149C080E412
+:100C40000E94040580930001882379F1B12C0E9451
+:100C500026058B2DF8019081981719F08083C0929A
+:100C600001010E94490521960F5F1F4FCE30D1052B
+:100C700009F076CF80910101882361F18150809342
+:100C80000101882339F08FE99FE00197F1F700C057
+:100C9000000020C0A4E4B1E0E6E3F1E0CF01825F10
+:100CA00091919D938E13FCCF15C083E10E942E0578
+:100CB000809300018111CACF81E40E9404058093D2
+:100CC00000018111C3CF0E943F05B82EB094BFCF61
+:100CD00080E0C0CF0E943F0481E0DF91CF911F915F
+:100CE0000F91FF90EF90DF90CF90BF900895E82F85
+:100CF000F0E0EC5BFE4F8081089508950F931F9301
+:100D0000CF93DF93C4E4D1E010E00C2F025F899110
+:100D100090E00E944A1C180F0C13F9CF812FDF912D
+:100D2000CF911F910F91089581E0089581E008957A
+:100D30000C94960608950F931F93CF93DF938C0125
+:100D4000FC01C081D181CE010E94CF1ABE010E9458
+:100D50004407EC01B8010E949806882309F48DC06D
+:100D6000F8018281882309F44AC080915D018111D4
+:100D70001FC0C431F0E5DF0709F051C00E949A0698
+:100D800081E080935D010E94A11C90935C0180939F
+:100D90005B0110925401109256011092550110926D
+:100DA00058011092570110925A011092590165C0D2
+:100DB00080915B0190915C010E94AD1C883C910583
+:100DC00070F480915401E82FF0E0EE0FFF1FEB5A12
+:100DD000FE4FD183C0838F5F809354014EC0C438CF
+:100DE00080E5D80721F0C538D04501F13AC0F801B7
+:100DF0008281882341F01092520182E01EC0C438E3
+:100E0000E0E5DE0759F580915201811106C086E2C6
+:100E10000E94591286E20E94211382E01CC0C4384D
+:100E2000F0E5DF0741F3C538D045D9F4F8018281F8
+:100E3000882331F01092530180E20E9470131DC08C
+:100E400080915301811106C087E20E94591287E206
+:100E50000E94211380E20E9477130FC0C538D0454D
+:100E600029F381E08093520180935301C801DF91FF
+:100E7000CF911F910F910C94940680E0DF91CF9158
+:100E80001F910F910895089596E0799FF001112424
+:100E900094E5899FE00DF11D1124E60FF11DEE0F81
+:100EA000FF1FE25EFE4F859194910895880F991F70
+:100EB000FC01E256F040859194910895880F991FA6
+:100EC000FC01E25EFE4F8591949108950F931F936C
+:100ED000CF93DF93EC018115904350F5C11580E26B
+:100EE000D80708F0C3C0CB3BD10590F4C83AD10570
+:100EF00008F06AC0C53AD10508F05BC0C430D1051E
+:100F000008F0D0C1219709F0CAC101E010E00AC27F
+:100F1000CF3FD10511F008F0C5C1C03FD10508F0A1
+:100F2000A2C0CE01805E9109089708F4BBC1B7C189
+:100F3000C13090E5D90709F4A2C020F5C0318FE493
+:100F4000D80770F4C11590E4D90708F094C0C11512
+:100F500021E3D20708F0A3C1DD278E01106CE2C1A6
+:100F6000C115D04509F09BC10E94D6158FEF94E3BF
+:100F70002CE0815090402040E1F700C000000E942A
+:100F8000FC1CD0C1C11597E5D90758F4C03121E543
+:100F9000D20708F01CC1C43180E5D80708F475C039
+:100FA0007EC1CE0190578115904108F078C1DF7065
+:100FB00073C1C53AD10509F477C1C63AD10509F024
+:100FC00076C102E810E4AEC1C83AD10509F472C195
+:100FD000C93AD10509F471C1CA3AD10509F470C101
+:100FE000CB3AD10509F46FC1CC3AD10509F46EC1F1
+:100FF000CD3AD10509F46DC1C03BD10509F46CC1EE
+:10100000CE3AD10509F46BC1CF3AD10509F46AC1D2
+:10101000C13BD10509F469C1C23BD10509F468C1DE
+:10102000C33BD10509F467C1C43BD10509F466C1CE
+:10103000C53BD10509F465C1C63BD10509F464C1BE
+:10104000C73BD10509F463C1C83BD10509F462C1AE
+:10105000C93BD10509F461C1CA3BD10509F460C19E
+:1010600000E014E45FC18E0110655CC1CE019F7089
+:101070000E945E0758C1DF708E01106A53C18091D3
+:10108000DA0181608093DA014DC10E94A11E8111B5
+:1010900002C00E94871E0E94BE1E90E09093FB013A
+:1010A0008093FA01C23080E5D80721F48091FA01DB
+:1010B000816086C0C43090E5D90721F48091FA019F
+:1010C00082607EC0C63020E5D20721F48091FA010B
+:1010D000846076C0C83080E5D80719F48091FA01A1
+:1010E00027C0CA3090E5D90721F48091FA018061C8
+:1010F00067C0CC3020E5D20721F48091FA018062EC
+:101100005FC0CE3080E5D80721F48091FA01806479
+:1011100057C0C03190E5D90721F48091FA01806869
+:101120004FC0C23120E5D20729F48091FA018460D2
+:10113000886046C0C33080E5D80721F48091FA0169
+:101140008E7F3EC0C53090E5D90721F48091FA0129
+:101150008D7F36C0C73020E5D20721F48091FA0197
+:101160008B7F2EC0C93080E5D80719F48091FA0131
+:1011700026C0CB3090E5D90721F48091FA018F7E0B
+:101180001FC0CD3020E5D20721F48091FA018F7D78
+:1011900017C0CF3080E5D80721F48091FA018F7B0A
+:1011A0000FC0C13190E5D90721F48091FA018F7702
+:1011B00007C0C331D04531F48091FA018B7F877F1E
+:1011C0008093FA018091FA010E94C21EABC08D2F5C
+:1011D00099278F70992781309105D9F49E0123704A
+:1011E000332702C0880F991F2A95E2F79C688E0169
+:1011F00044E0000F111F4A95E1F700271370802B80
+:10120000912B53E0CC0FDD1F5A95E1F7C076DD2717
+:101210002FC08230910531F4DC2FCC278E01016F75
+:10122000106A80C08330910569F4CE0183709927DC
+:1012300001E010E002C0000F111F8A95E2F7C8011B
+:101240009C680FC084309105B9F4CE018370992752
+:1012500001E010E002C0000F111F8A95E2F7C801FB
+:101260009A6823E0CC0FDD1F2A95E1F7C07ED77086
+:101270008C010C2B1D2B56C08530910531F4DC2FD1
+:10128000CC278E01046F106A4DC0069709F04AC042
+:10129000CF71DD27DC2FCC278E01106243C000E028
+:1012A00010E040C08E013EC001E810E43BC003E8FE
+:1012B00010E438C002EE14E435C009EE14E432C084
+:1012C0000AEE14E42FC005EB14E42CC006EB14E482
+:1012D00029C007EB14E426C00CEC14E423C00DEC89
+:1012E00014E420C003E815E41DC00AE815E41AC0A0
+:1012F00002E915E417C004E915E414C001E216E49C
+:1013000011C003E216E40EC004E216E40BC005E2CD
+:1013100016E408C006E216E405C007E216E402C0BF
+:101320000AE216E4C801DF91CF911F910F91089551
+:1013300096E0799FF001112494E5899FE00DF11D5D
+:101340001124E60FF11DEE0FFF1FE25EFE4F8591A7
+:101350009491803E9105E0F4803C910558F58133ED
+:10136000910509F46FC048F48932910509F463C00E
+:101370008A32910509F46DC072C089339105E9F094
+:1013800082389105D1F08533910509F44DC067C0CD
+:10139000833E910581F138F4803E9105B9F0823E9B
+:1013A0009105D9F05CC0863E910561F1873E9105BB
+:1013B000A1F155C00E94560708952091FA0120FD21
+:1013C00002C021FF4CC080EE90E049C08091FA013C
+:1013D00080FFF9CF89E390E042C08091FA0182FF5B
+:1013E0000EC08091FA0184FF03C080E090E037C016
+:1013F00083EE90E034C08091FA0182FFF2CF82EE5A
+:1014000090E02DC08091FA0183FF0BC08091FA011A
+:1014100084FDEBCF87EE90E022C08091FA0183FF3C
+:10142000F5CF86EE90E01BC08091FA0185FF07C0E2
+:1014300089E290E014C08091FA0185FFF9CF85E33D
+:1014400090E00DC08091FA0186FF07C08AE290E02B
+:1014500006C08091FA0186FFF9CF81E390E00E94F7
+:101460006607089508950C94320A80916E010895DC
+:10147000CF93DF9300D01F92CDB7DEB79C01809150
+:10148000F101843019F593E099833B832A8390938B
+:10149000E9008FEF9091E800815095FD06C095ED31
+:1014A0009A95F1F700008111F5CF8091E80085FF52
+:1014B0000DC040E050E063E070E0CE0101960E9474
+:1014C000A50C8091E8008E778093E8000F900F9034
+:1014D0000F90DF91CF910895CF93DF9300D01F92AB
+:1014E000CDB7DEB72091F101243021F522E0298328
+:1014F0009B838A8383E08093E9008FEF9091E800DB
+:10150000815095FD06C095ED9A95F1F70000811187
+:10151000F5CF8091E80085FF0DC040E050E063E02A
+:1015200070E0CE0101960E94A50C8091E8008E77B4
+:101530008093E8000F900F900F90DF91CF91089566
+:101540002091F1012430F1F422E02093E9002FEF03
+:101550003091E800215035FD06C035ED3A95F1F7A0
+:1015600000002111F5CF2091E80025FF0BC040E0DD
+:1015700050E065E070E00E94A50C8091E8008E7755
+:101580008093E8000895CF93DF93EC019091F101EF
+:10159000943009F046C080910C018823D9F08091E5
+:1015A0000D018823B9F09093E9008FEF9091E80046
+:1015B000815095FD06C095E19A95F1F700008111E3
+:1015C000F5CF8091E80085FF2CC040E050E060E15D
+:1015D00070E017C081E08093E9008FEF9091E80000
+:1015E000815095FD06C095ED9A95F1F700008111A7
+:1015F000F5CF8091E80085FF14C040E050E068E03E
+:1016000070E0CE010E94A50C8091E8008E77809357
+:10161000E80080E1FE01AEE5B1E001900D928A950F
+:10162000E1F7DF91CF9108958091F001811109C018
+:101630000E943A0E0E94970E8091E200846080938F
+:10164000E20008951092F001089508950C9430235B
+:101650000E94921C0E9436230E943D110C94330A72
+:1016600042E061EC81E00E94B40D42E061EC82E076
+:101670000E94B40D42E061EC83E00E94B40D42E1AF
+:1016800061EC84E00C94B40D8091F301833009F493
+:1016900055C030F4813071F0823009F48EC0089565
+:1016A0008A3009F47AC08B3009F460C0893009F0BF
+:1016B0009CC020C08091F201813A09F096C08091CF
+:1016C000E800877F8093E8008091F6019091F70110
+:1016D000892B21F460E18EE591E003C060E080E0B9
+:1016E00090E070E00E94F00C8091E8008B7780938E
+:1016F000E80008958091F201813209F076C080916E
+:10170000F6019091F701009719F0039709F06DC069
+:101710008091E800877F8093E8008091E80082FD57
+:1017200005C08091F1018111F8CF5FC08091F10077
+:1017300080936E018091E8008B7753C08091F20115
+:10174000813A09F052C08091F6019091F701892BFE
+:1017500009F04BC08091E800877F8093E80080917A
+:10176000E80080FFFCCF80910C0136C08091F2012F
+:101770008132D9F58091F6019091F701892BA9F575
+:101780008091E800877F8093E8000E94E90D8091B6
+:10179000F40180930C010C94D6158091F2018132F2
+:1017A00021F58091E800877F8093E8000E94E90D91
+:1017B0008091F50180936F0108958091F201813A43
+:1017C000A1F48091E800877F8093E8008091E80091
+:1017D00080FFFCCF80916F018093F1008091E80041
+:1017E0008E778093E8000C94E90D089584B7877F85
+:1017F00084BF0FB6F894A8958091600088618093AB
+:101800006000109260000FBE90E080E80FB6F89480
+:1018100080936100909361000FBE0E948C110E9422
+:101820003A0E0E94970E8091E20084608093E2005D
+:1018300078940E941D110E948E1182E091E00E9416
+:1018400038110E941E238091F101853069F40E94B5
+:10185000561C8091EF018823B1F30E94841C8823D9
+:1018600091F30E948F0CEFCF0E949411ECCF292F9F
+:10187000332723303105C9F064F42130310581F07C
+:101880002230310509F043C08DE690E02AEE35E0C4
+:1018900042C021323105F1F02232310541F137C029
+:1018A00082E190E027E536E036C099278130910546
+:1018B00041F08230910541F0892B49F5E6EEF5E0E3
+:1018C00005C0EEECF5E002C0E6EBF5E0849190E0B7
+:1018D0009F0121C06430D8F4E62FF0E0EE0FFF1F27
+:1018E000EE5DFE4F2081318189E090E014C06430CC
+:1018F00070F470E0FB01EE0FFF1FE65EFE4F2081EB
+:101900003181FB01EA5EFE4F808190E004C080E0FF
+:1019100090E020E030E0FA0131832083089580E1F7
+:1019200089BD82E189BD09B400FEFDCF8091D80058
+:101930008F7D8093D8008091E00082608093E000EA
+:101940008091E00081FDFCCF0895CF92DF92EF926D
+:10195000FF920F931F93CF93DF93EC018B016A01EA
+:101960000E94080E811133C0C114D10439F0F60170
+:1019700080819181081B190BC80FD91FE12CF12C14
+:101980000115110519F18091E80085FD16C08091BF
+:10199000E8008E778093E800C114D10449F0F60185
+:1019A00080819181E80EF91EF182E08285E00FC00E
+:1019B0000E94080E882321F30AC089918093F100C8
+:1019C00001501109FFEFEF1AFF0ADACF80E0DF9133
+:1019D000CF911F910F91FF90EF90DF90CF900895DE
+:1019E0002091F8013091F9012617370748F0611569
+:1019F000710539F42091E8002E772093E80001C0AA
+:101A0000B90140E061157105A9F12091F10122238E
+:101A100009F443C0253009F442C02091E80023FDB9
+:101A200040C02091E80022FD32C02091E80020FF54
+:101A3000E9CF4091F3002091F20030E0342BFC011B
+:101A4000CF016115710559F02830310540F48191BD
+:101A50008093F100615071092F5F3F4FF1CF41E05A
+:101A60002830310509F040E02091E8002E772093DE
+:101A7000E800C8CF4111C9CF0AC08091F101882385
+:101A800061F0853061F08091E80083FD0AC08091AB
+:101A9000E80082FFF2CF80E0089582E0089583E0BD
+:101AA000089581E008952091F8013091F9012617F9
+:101AB000370748F06115710539F42091E8002E7759
+:101AC0002093E80001C0B901FC0120E06115710517
+:101AD00091F18091F101882309F440C0853009F427
+:101AE0003FC08091E80083FD3DC08091E80082FD09
+:101AF0002FC08091E80080FFE9CF2091F300809112
+:101B0000F20090E0922B6115710559F08830910533
+:101B100040F424912093F1003196615071090196AF
+:101B2000F2CF21E0089709F020E08091E8008E775D
+:101B30008093E800CBCF2111CCCF0AC08091F10176
+:101B4000882361F0853061F08091E80083FD0AC050
+:101B50008091E80082FFF2CF80E0089582E008954E
+:101B600083E0089581E00895982F973058F5909379
+:101B7000E900981739F07091EC002091ED00509138
+:101B8000F00003C0242F762F50E021FF19C03091C0
+:101B9000EB003E7F3093EB003091ED003D7F3093C2
+:101BA000ED003091EB0031603093EB007093EC006E
+:101BB0002093ED005093F0002091EE0027FF07C026
+:101BC0009F5FD3CF8F708093E90081E0089580E01C
+:101BD00008958091F20187FF11C08091E80082FD95
+:101BE00005C08091F1018111F8CF11C08091E8000A
+:101BF0008B770BC08091F101882349F08091E80038
+:101C000080FFF8CF8091E8008E778093E8000895F8
+:101C10002091E4003091E50095E64091EC00842F9E
+:101C2000817040FF22C08091E80080FD1CC080913F
+:101C3000F101882391F0853091F08091EB0085FDD2
+:101C400010C04091E4005091E5004217530729F37A
+:101C50009A01915011F784E0089582E0089583E09D
+:101C6000089581E0089580E008954091E80042FFE2
+:101C7000DECF08950E94A80E0E94B00EE0EEF0E0C4
+:101C8000808181608083E8EDF0E080818F778083C0
+:101C900019BCA7EDB0E08C918E7F8C9380818F7EF4
+:101CA00080831092F00108950F931F93CF93DF93D9
+:101CB0000E94A80E0E94B00EC8EDD0E088818F77F8
+:101CC000888388818068888388818F7D888319BC18
+:101CD0001092F1011092ED011092EF011092EE01BD
+:101CE00000EE10E0F80180818B7F80838881816025
+:101CF000888342E060E080E00E94B40DE1EEF0E015
+:101D000080818E7F8083E2EEF0E08081816080833D
+:101D1000808188608083F80180818E7F80838881C4
+:101D200080618883DF91CF911F910F910895E8ED35
+:101D3000F0E080818F7E8083E7EDF0E0808181603C
+:101D4000808384E082BF81E08093F0010C94540E84
+:101D5000E8EDF0E080818E7F80831092E2000895AC
+:101D60001092DA001092E10008951F920F920FB6C0
+:101D70000F9211242F933F934F935F936F937F9311
+:101D80008F939F93AF93BF93EF93FF938091E10065
+:101D900082FF0BC08091E20082FF07C08091E100CA
+:101DA0008B7F8093E1000E941C118091DA0080FFFC
+:101DB0001FC08091D80080FF1BC08091DA008E7F09
+:101DC0008093DA008091D90080FF0DC080E189BD49
+:101DD00082E189BD09B400FEFDCF81E08093F1016D
+:101DE0000E94140B05C019BC1092F1010E94220B35
+:101DF0008091E10080FF19C08091E20080FF15C052
+:101E00008091E2008E7F8093E2008091E200806109
+:101E10008093E2008091D80080628093D80019BC42
+:101E200085E08093F1010E94260B8091E10084FF00
+:101E300030C08091E20084FF2CC080E189BD82E146
+:101E400089BD09B400FEFDCF8091D8008F7D8093BD
+:101E5000D8008091E1008F7E8093E1008091E200C4
+:101E60008F7E8093E2008091E20081608093E200A7
+:101E70008091ED01882311F084E007C08091E30098
+:101E800087FD02C081E001C083E08093F1010E94E0
+:101E9000280B8091E10083FF29C08091E20083FF3D
+:101EA00025C08091E100877F8093E10082E08093EC
+:101EB000F1011092ED018091E1008E7F8093E100AD
+:101EC0008091E2008E7F8093E2008091E200806149
+:101ED0008093E20042E060E080E00E94B40D8091D7
+:101EE000F00088608093F0000E94250BFF91EF9135
+:101EF000BF91AF919F918F917F916F915F914F9122
+:101F00003F912F910F900FBE0F901F9018951F9229
+:101F10000F920FB60F9211242F933F934F935F931D
+:101F20006F937F938F939F93AF93BF93CF93DF93E1
+:101F3000EF93FF93C091E900CF708091EC00D82F10
+:101F4000D17080FDD0E81092E9008091F000877F89
+:101F50008093F00078940E94CB0F1092E90080915A
+:101F6000F00088608093F000CD2BCF70C093E90023
+:101F7000FF91EF91DF91CF91BF91AF919F918F91A1
+:101F80007F916F915F914F913F912F910F900FBE75
+:101F90000F901F9018951F93CF93DF93CDB7DEB7A7
+:101FA000AA970FB6F894DEBF0FBECDBFE2EFF1E007
+:101FB00088E08E0F9091F10091938E13FBCF0E94D9
+:101FC000440B8091E80083FF1FC18091F201909142
+:101FD000F301492F50E04A30510508F015C1FA01CC
+:101FE000EA5AFF4F0C94C724803881F0823809F0F8
+:101FF0000BC18091F6018F708093E9008091EB0016
+:1020000085FB882780F91092E90006C08091EE01D7
+:102010009091EF01911182609091E800977F9093E9
+:10202000E8008093F1001092F100C8C0282F2D7FA6
+:1020300009F0EAC0882319F0823061F0E5C0809190
+:10204000F401813009F0E0C0933009F080E0809322
+:10205000EF012BC08091F401811127C08091F6011E
+:102060008F7009F4D1C08093E9002091EB0020FF2C
+:102070001CC0933021F48091EB00806214C09091D9
+:10208000EB0090619093EB0021E030E0A90102C0E9
+:10209000440F551F8A95E2F74093EA001092EA0038
+:1020A0008091EB0088608093EB001092E9008091B2
+:1020B000E800877F86C08111A7C01091F4011F77C7
+:1020C0008091E3008078812B8093E3008091E80089
+:1020D000877F8093E8000E94E90D8091E80080FFEF
+:1020E000FCCF8091E30080688093E300111102C06F
+:1020F00082E001C083E08093F10186C08058823085
+:1021000008F082C08091F4019091F5018C3D53E07C
+:10211000950779F583E08A838AE289834FB7F8943B
+:10212000DE01139620E03EE051E2E32FF0E0509311
+:102130005700E49120FF03C0E295EF703F5FEF701E
+:102140008E2F90E0EA3010F0C79601C0C0968D93B4
+:102150009D932F5F243149F74FBF8091E800877F1F
+:102160008093E8006AE270E0CE0101960E94F00CD4
+:1021700014C0AE014F5F5F4F6091F6010E94370CB3
+:10218000BC01892B09F440C09091E800977F90939F
+:10219000E80089819A810E94530D8091E8008B7735
+:1021A0008093E80031C0803879F58091E800877F1E
+:1021B0008093E8008091ED018093F1008091E80028
+:1021C0008E778093E8000E94E90D1EC081111CC02B
+:1021D0009091F4019230C0F48091E800877F809361
+:1021E000E8009093ED010E94E90D8091ED018111CD
+:1021F00006C08091E30087FD02C081E001C084E059
+:102200008093F1010E94300B8091E80083FF0AC0A7
+:102210008091E800877F8093E8008091EB008062E6
+:102220008093EB00AA960FB6F894DEBF0FBECDBF29
+:10223000DF91CF911F9108950895CF938091F1017F
+:102240008823A1F0C091E900CF709091EC00892F14
+:10225000817090FD80E8C82B1092E9008091E80021
+:1022600083FD0E94CB0FCF70C093E900CF910895FA
+:1022700090937501809374010895E0917401F09139
+:102280007501309721F00190F081E02D099480E0F4
+:102290000895E0917401F0917501309721F002806A
+:1022A000F381E02D09940895E0917401F091750196
+:1022B000309721F00480F581E02D09940895209154
+:1022C0007201309173018217930771F0909373013B
+:1022D00080937201E0917401F0917501309721F0C3
+:1022E0000680F781E02D09940895209170013091C6
+:1022F00071018217930771F09093710180937001BF
+:10230000E0917401F0917501309721F00084F1851E
+:10231000E02D0994089508950C948B110E94981C47
+:102320000E9471050C945A1D9F92AF92BF92CF925A
+:10233000DF92EF92FF920F931F93CF93DF9300D022
+:1023400000D000D0CDB7DEB70E9489050DE010E0C7
+:10235000AA24A394B12C902E802F0E947706980176
+:1023600029583E4F6901F901F080F826A1F4015087
+:10237000110988F78FEF89838A831B820E94A11C31
+:102380008160782F9D838C8349815A816B818D81F7
+:102390000E942B122FC09091DA0191FF04C08E830E
+:1023A0000E947D068E8125E030E0A501022E01C04D
+:1023B000440F0A94EAF7E42E4F21C1F029839A8250
+:1023C0008E2191E009F490E09B830E94A11C816022
+:1023D000782F9D838C8349815A816B818D810E94E6
+:1023E0002B12F6018081E826E08204C021503109D9
+:1023F000E0F6BDCF0E944120109176010E943D1170
+:102400001817B9F00E943D118093760126960FB6F9
+:10241000F894DEBF0FBECDBFDF91CF911F910F911A
+:10242000FF90EF90DF90CF90BF90AF909F900C9473
+:10243000330A26960FB6F894DEBF0FBECDBFDF91EC
+:10244000CF911F910F91FF90EF90DF90CF90BF90B1
+:10245000AF909F900895CF93DF93CDB7DEB72B97C2
+:102460000FB6F894DEBF0FBECDBF4F835887698784
+:102470007A878B87DE01119686E0FD0111928A959D
+:10248000E9F785E0FE01379601900D928A95E1F714
+:1024900049815A816B817C818D819E810E94741853
+:1024A0002B960FB6F894DEBF0FBECDBFDF91CF9154
+:1024B0000895CF93882309F4C2C0C82F823859F4F5
+:1024C0000E943D1181FDBBC089E30E944E1B0E940A
+:1024D0001B1C89E30CC0833879F40E943D1180FDF8
+:1024E000AEC083E50E944E1B0E941B1C83E50E9428
+:1024F000901BCF910C941B1C843859F40E943D1101
+:1025000082FD9DC087E40E944E1B0E941B1C87E435
+:10251000EECF8CEF8C0F813A48F48C2F0E948322EF
+:1025200081118DC08C2F0E944E1BE3CF80E28C0F57
+:10253000883048F4C77081E001C0880FCA95EAF777
+:102540000E94D41BD6CF8BE58C0F833078F4C53A2C
+:1025500029F0C63A31F083E890E005C081E890E0C8
+:1025600002C082E890E0CF910C945F1188E58C0F57
+:10257000833108F064C0C83A39F1C93A41F1CA3A26
+:1025800049F1CB3A51F1CC3A59F1CD3A61F1C03B26
+:1025900069F1CE3A71F1CF3A79F1C13B81F1C23B99
+:1025A00089F1C33B91F1C43B99F1C53BA1F1C63B15
+:1025B000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B75
+:1025C000C9F180E090E038C082EE90E035C089EE3D
+:1025D00090E032C08AEE90E02FC085EB90E02CC0F6
+:1025E00086EB90E029C087EB90E026C08CEC90E071
+:1025F00023C08DEC90E020C083E891E01DC08AE804
+:1026000091E01AC082E991E017C084E991E014C01A
+:1026100081E292E011C083E292E00EC084E292E097
+:102620000BC085E292E008C086E292E005C087E236
+:1026300092E002C08AE292E0CF910C947511CF91A2
+:102640000895882309F44BC0823859F40E943D1143
+:1026500081FF45C089E30E944E1B0E941B1C89E339
+:102660000CC0833871F40E943D1180FF38C083E5AF
+:102670000E944E1B0E941B1C83E50E94901B0C9421
+:102680001B1C843859F40E943D1182FF28C087E446
+:102690000E944E1B0E941B1C87E4EFCF9CEF980FFB
+:1026A000913A58F390E2980F983050F4877091E087
+:1026B00001C0990F8A95EAF7892F0E94DA1BDFCFB4
+:1026C0009BE5980F933020F480E090E00C945F112C
+:1026D000885A833120F480E090E00C9475110895BD
+:1026E000882321F00E94D41B0C941B1C089588237E
+:1026F00021F00E94DA1B0C941B1C08957F928F928C
+:102700009F92AF92BF92CF92DF92EF92FF920F9380
+:102710001F93CF93DF931F92CDB7DEB77C01C62EF8
+:10272000772EFC01058102950F70128111110E9414
+:10273000F11B0E94471B882379F0112369F080E286
+:102740008C0D883048F082E00E94301B0E94471BAD
+:1027500091E0D82ED92601C0D12CE72DE295EF705B
+:10276000F0E0E05AFF4F0C94C724872D807F072D9F
+:102770000F70882311F00295007F112389F0002348
+:1027800009F490C180E28C0D883020F4802F0E94E3
+:10279000D41B03C0802F0E94E41B0E941B1C82C11B
+:1027A0008C2D0E942113002309F495C180E28C0D29
+:1027B000883020F4802F0E94DA1B03C0802F0E94F3
+:1027C000EA1B0E941B1C87C1972D907F872D8F705D
+:1027D000903211F08295807FCC2021F0F1E0CF166D
+:1027E000B1F01EC0112349F0002309F414C10130D7
+:1027F00009F011C10E94041C6EC1002319F00130C0
+:1028000009F469C189830E94071C89810AC11123C7
+:1028100021F0023008F05FC1FEC001115CC101C1AE
+:10282000112321F0002309F4F6C03CC1002309F470
+:10283000F8C03EC1872D86958695837090E00097FD
+:1028400019F0019761F047C1112321F08C2D972DCC
+:10285000937002C080E090E00E945F113CC11123A0
+:1028600021F08C2D972D937002C080E090E00E94A3
+:10287000751131C18C2D112319F00E94491F02C01E
+:102880000E94B11F0E94362026C1872D837009F057
+:1028900052C0111120C18C2D829586958770880FAA
+:1028A000880F9C2D9F70892E912CA12CB12C082E65
+:1028B00004C0880C991CAA1CBB1C0A94D2F7C4FE45
+:1028C00014C00FE010E020E030E0B901A80104C01E
+:1028D000440F551F661F771F8A95D2F7CB01BA01A7
+:1028E000609570958095909503C060E070E0CB0195
+:1028F000272D26952695237030E02230310569F08A
+:102900002330310589F0682979298A299B292130CA
+:10291000310571F00E94BC19DEC0682979298A2925
+:102920009B290E94D819D7C00E94BC19C501B401C7
+:102930000E94A019D0C0112319F0872D817001C009
+:102940008695882309F4C7C08C2D8295869587705B
+:10295000880F880F9C2D9F70892E912CA12CB12C53
+:10296000082E04C0880C991CAA1CBB1C0A94D2F720
+:10297000C4FE14C00FE010E020E030E0B901A8016F
+:1029800004C0440F551F661F771F8A95D2F7CB01ED
+:10299000BA01609570958095909503C060E070E0F5
+:1029A000CB01272D269526952370422F50E04230EB
+:1029B000510569F04330510589F0682979298A2940
+:1029C0009B294130510571F00E94961A84C06829F4
+:1029D00079298A299B290E94B21A7DC00E94961AE1
+:1029E000C501B4010E947A1A76C08C2D90E0FC01DA
+:1029F000E05EF109E531F10508F050C0E059FF4F04
+:102A00000C94C7240C2D0F70872D8F71112331F07A
+:102A10000E94131A802F0E9470135DC00E94341A06
+:102A2000802F0E94771357C0112339F0011153C032
+:102A3000872D8F710E94591A4EC0023008F04BC08A
+:102A4000F7CF112339F0872D8F710E94131A43C0DD
+:102A50001123C9F3872D8F710E94341A3CC01123B2
+:102A600029F0872D8F710E94FE1935C00E94F4193C
+:102A700032C0112351F0172D1F71812F0E94131A9C
+:102A800063E0812F0E94271B26C081E00E94301B3B
+:102A9000023008F182E00E94301B1DC0112331F08A
+:102AA000002389F28C2D0E94591215C0002391F247
+:102AB0008C2D0E9421130FC0472D4F706C2DC70124
+:102AC0000E941B040E94181906C0472D4F706C2DE0
+:102AD000C7010E944307DD20F9F00E94231B80FDFF
+:102AE0001BC0F70112820E941D1B0E94131AC7010E
+:102AF0000E949B150E941D1B0F90DF91CF911F918B
+:102B00000F91FF90EF90DF90CF90BF90AF909F908C
+:102B10008F907F900C94341A0F90DF91CF911F917A
+:102B20000F91FF90EF90DF90CF90BF90AF909F906C
+:102B30008F907F9008950F931F93CF93DF93EC01B5
+:102B4000888199812B813C81232BB9F09F3F11F41F
+:102B50008F3F99F0CE010E949B06882371F0688117
+:102B600079818A810E94191B8C010E94CE1A0E94D1
+:102B70009519B801CE010E947E13DF91CF911F916C
+:102B80000F9108950E94F11B0E94011C0E94C61B18
+:102B90000E941B1C0E94E6200E94362080E090E0EC
+:102BA0000E945F1180E090E00C9475110E94E11B7F
+:102BB0000C94C2150E940E1B292F22952F7030E015
+:102BC0002C3031054CF42A3031056CF42250310997
+:102BD00022303105A8F407C02C30310569F02F30C0
+:102BE000310551F00DC0803F69F018F4803E40F48B
+:102BF00009C0843F29F406C093FB882780F9089513
+:102C000080E0089581E00895CF93DF9300D000D055
+:102C10001F92CDB7DEB70F900F900F900F900F90CF
+:102C2000DF91CF910895CF93DF9300D000D000D0F3
+:102C3000CDB7DEB726960FB6F894DEBF0FBECDBF78
+:102C4000DF91CF9108951F93CF93DF93C0918501BA
+:102C500016E080918601C81799F0D0E01C9FF00122
+:102C60001D9FF00D1124E957FE4F40815181628173
+:102C70007381848195810E9413162196C770E9CFD4
+:102C8000DF91CF911F9108954091B7015091B80104
+:102C90006091B9017091BA018091BB019091BC0122
+:102CA0000C9413168091BC0182958F7009F054C06A
+:102CB0008091B901882309F44FC080918501A091CA
+:102CC00086016091B7017091B8014091BA015091AD
+:102CD000BB01B6E08A1709F43FC090E041155105E9
+:102CE000C1F17F3F11F46F3FA1F1B89FF001B99F8F
+:102CF000F00D1124E957FE4F218172132AC0208163
+:102D0000621327C02281211124C02381348124171A
+:102D1000350710F421503109241B350B283C3105AF
+:102D2000C0F42091BC012F7020612093BC0126E0EB
+:102D3000289FF001299FF00D1124E457FE4F808158
+:102D40008F708061808387EB91E00E949B150C94CB
+:102D5000231601968770BECF0895CF92DF92EF922F
+:102D6000FF920F931F93CF93DF93CDB7DEB7629798
+:102D70000FB6F894DEBF0FBECDBF8C0185E0F80121
+:102D8000DE011D9601900D928A95E1F7D8014C91D4
+:102D900011965C91119712966C9112971396CD90A3
+:102DA000DC9014973091B7017091B8018091BA010D
+:102DB0009091BB01009709F46BC17F3F19F43F3F2D
+:102DC00009F466C1E090B901EE2009F4C0C0209179
+:102DD000BC01C816D90628F0F601E81BF90BCF0193
+:102DE00004C0809590958C0D9D1DFF24F394883C24
+:102DF000910578F0F12C207F09F0C6C07C2DD98A8E
+:102E0000C88A89890E94041687EB91E00E949B156D
+:102E1000B1C0822F807F09F046C0751314C03413EF
+:102E200012C0611110C02F7020612093BC010E945C
+:102E3000441687EB91E00E949B158091BC01D8015C
+:102E400015968C932EC0CD2819F15F3F11F44F3F9A
+:102E5000F9F0F62E61111CC0809185012091860148
+:102E600036E0821709F45AC090E0389FF001399F8C
+:102E7000F00D1124E957FE4F7181571306C0708180
+:102E8000471303C07281711103C001968770E9CFA7
+:102E9000F62E662309F418C18091BC0181608093ED
+:102EA000BC01F12C11C1751308C0341306C06111A7
+:102EB00004C08091BC01D801C3C04D875E878D8559
+:102EC0009E856A8B0E94DA156A898823E1F1662360
+:102ED000D1F12091BC01822F82958F7090E00297F2
+:102EE00074F08091B7019091B80198878F8319860B
+:102EF000DB86CA862C87CE0107960E949B1586E04A
+:102F0000F801A7EBB1E001900D928A95E1F70E94DC
+:102F100052160E944416FF24F394D6C04D875E8754
+:102F20008D859E850E940E1B292F22952F7030E0E3
+:102F3000223031050CF0BCC09F7009F0B6C0805E35
+:102F4000883008F4C1C0C8010E949B15E4CFC816A0
+:102F5000D90608F453C0F601E81BF90BCF01883CF1
+:102F6000910508F450C0F12C7C2DD98AC88A898932
+:102F70000E940416E7EBF1E086E0DF011D928A95DE
+:102F8000E9F70E944416A0C0751314C0341312C090
+:102F9000611110C08091BC01F8018583C8010E94B5
+:102FA0009B1586E0E7EBF1E0DF011D928A95E9F7DA
+:102FB000FE2C8AC04D875E878D859E856A8B0E9418
+:102FC000DA156A89882309F4BECF662309F4BBCFDA
+:102FD0002091BC01822F82958F7090E002970CF4B3
+:102FE0008ECF8091B7019091B8019A8389831B821B
+:102FF000DD82CC822E83CE0101967FCF8095909585
+:103000008C0D9D1DACCFF62E662309F49CCF751355
+:103010002EC034132CC02091BC0120FD1FC0822F74
+:1030200082958F70D9F0D80115962C9315978F3013
+:1030300049F08F5F982F9295907F822F8F70892B08
+:1030400015968C93C8010E949B1586E0F801A7EBAA
+:10305000B1E001900D928A95E1F793CF86E0F801F7
+:10306000A7EBB1E001900D928A95E1F72DC04D8755
+:103070005E878D859E850E94DA15811140CF8091F3
+:10308000BC0181608093BC01C8010E949B151CC0DB
+:10309000662309F458CF4D875E878D859E850E94F3
+:1030A000DA15882309F44FCF2ACF811148CF0CC0FD
+:1030B000243031050CF047CF9F7009F440CFF80160
+:1030C0009581907F09F03BCF8F2D62960FB6F894D3
+:1030D000DEBF0FBECDBFDF91CF911F910F91FF904B
+:1030E000EF90DF90CF9008951F93CF93DF93CDB7EC
+:1030F000DEB72C970FB6F894DEBF0FBECDBF4F835F
+:10310000588769877A878B879C87CE0107960E94AC
+:10311000AD16882369F08F8198852A853B85232BFE
+:10312000F1F19F3F09F063C08F3F09F060C037C0E5
+:1031300086E0FE013796DE01119601900D928A9588
+:10314000E1F76F817885EA85FB85309741F17F3F14
+:1031500011F46F3F21F12091860130E0C901019601
+:10316000877099274091850150E08417950709F4ED
+:1031700047C069837A83FD83EC8396E0929FD001F8
+:10318000939FB00D1124A957BE4FFE0131960190B7
+:103190000D929A95E1F7809386010E94231616E01E
+:1031A00080918501909186018917C1F1189FC00116
+:1031B000112489579E4F0E94AD16882379F1E09122
+:1031C00085011E9FF0011124E957FE4F4081518176
+:1031D00062817381848195810E941316809185019B
+:1031E00090E001968770992780938501D9CF4F8110
+:1031F000588569857A858B859C850E941316CFCF6B
+:103200000E94D6151092860110928501E7EBF1E03D
+:1032100086E0DF011D928A95E9F7C1CF2C960FB6A3
+:10322000F894DEBF0FBECDBFDF91CF911F910895FF
+:10323000EF92FF920F931F93CF93DF938C01892B13
+:1032400009F46CC0F12CEE24E394E8012196F80116
+:103250008491843740F4843008F051C0813081F08B
+:10326000823019F15BC0853709F444C0A8F19CE7AE
+:10327000980F903708F052C08F770E94211341C0F9
+:103280000E5F1F4FFE01C49180E28C0F883048F41E
+:10329000C7708E2D01C0880FCA95EAF70E94F41BF3
+:1032A00014C08C2F0E9459122DC00E5F1F4FFE01BB
+:1032B000C49180E28C0F883058F4C7708E2D01C005
+:1032C000880FCA95EAF70E94FA1B0E941B1C1AC0BD
+:1032D0008C2F0E94211316C00E5F1F4FFE01C49158
+:1032E000CC2381F08FE99FE00197F1F700C0000047
+:1032F000C150F6CF0E5F1F4FFE01F49003C00E9435
+:1033000059128E018F2D882309F49FCFEFE9FFE03A
+:103310003197F1F700C000008150F5CFDF91CF91D8
+:103320001F910F91FF90EF90089508956093C10150
+:103330007093C2018093C3019093C4010C94C21591
+:103340000F931F930091C1011091C2012091C301FD
+:103350003091C401DC01CB01802B912BA22BB32B2C
+:103360008093C1019093C201A093C301B093C401A3
+:103370001F910F910C94C2150F931F930091C101DF
+:103380001091C2012091C3013091C401DC01CB0135
+:1033900080239123A223B3238093C1019093C20180
+:1033A000A093C301B093C4011F910F910C94C21557
+:1033B0000F931F930091C1011091C2012091C3018D
+:1033C0003091C401DC01CB0180279127A227B327CC
+:1033D0008093C1019093C201A093C301B093C40133
+:1033E0001F910F910C94C2151092BD011092BE0155
+:1033F0001092BF011092C0010C94C21541E050E040
+:1034000060E070E004C0440F551F661F771F8A9567
+:10341000D2F74093BD015093BE016093BF017093FA
+:10342000C0010C94C21541E050E060E070E004C0BF
+:10343000440F551F661F771F8A95D2F78091BD01F3
+:103440009091BE01A091BF01B091C001482B592BB2
+:103450006A2B7B2B4093BD015093BE016093BF014B
+:103460007093C0010C94C21541E050E060E070E040
+:1034700004C0440F551F661F771F8A95D2F74095E9
+:103480005095609570958091BD019091BE01A0917D
+:10349000BF01B091C001482359236A237B23409385
+:1034A000BD015093BE016093BF017093C0010C94A5
+:1034B000C21541E050E060E070E004C0440F551FC9
+:1034C000661F771F8A95D2F78091BD019091BE014A
+:1034D000A091BF01B091C001482759276A277B27D7
+:1034E0004093BD015093BE016093BF017093C00132
+:1034F0000C94C2150F931F930091BD011091BE0152
+:103500002091BF013091C001DC01CB01802B912BB8
+:10351000A22BB32B8093BD019093BE01A093BF015A
+:10352000B093C0011F910F910C94C2150F931F937C
+:103530000091BD011091BE012091BF013091C001E9
+:10354000DC01CB0180239123A223B3238093BD010F
+:103550009093BE01A093BF01B093C0011F910F9142
+:103560000C94C2150F931F930091BD011091BE01E1
+:103570002091BF013091C001DC01CB018027912750
+:10358000A227B3278093BD019093BE01A093BF01F2
+:10359000B093C0011F910F910C94C2150895CF9262
+:1035A000DF92EF92FF920F931F93CF93DF938C01E3
+:1035B000C090C101D090C201E090C301F090C4015D
+:1035C0008091BD019091BE01A091BF01B091C00159
+:1035D000C82AD92AEA2AFB2ACFE1D0E0D701C601BE
+:1035E0000C2E04C0B695A795979587950A94D2F7A7
+:1035F00080FF06C0B8018C2F0E949809019721F422
+:10360000219760F780E001C08C2FDF91CF911F914F
+:103610000F91FF90EF90DF90CF900895CF93DF93BD
+:10362000EC010E94CF1ABE010E949809DF91CF9150
+:103630000895CB010E940E1B08958091C5018595C8
+:103640008595859508958091C5018770089598E0C6
+:10365000899F90011124262B2093C5010C94131AE5
+:103660002091C501809582238093C501982F977082
+:1036700069F430E0482F082E000C550B241735074D
+:1036800029F08595859585950C94341A0895909127
+:10369000C501977081E009F480E0089590910C01D4
+:1036A000992321F090910D01911109C020910E01F3
+:1036B00030910F01F90132969FEF40E01FC0982F23
+:1036C0009695969596959F3050F5E0910E01F09164
+:1036D0000F01E90FF11D877021E030E0A90102C060
+:1036E000440F551F8A95E2F7CA019181892B818386
+:1036F00008959F3F39F04F5F4E3041F0519158137C
+:10370000F8CF0DC05111F7CF942FF5CF9F3F39F06F
+:10371000F901E90FF11D97FDFA9582830895089547
+:1037200090910C01992321F090910D01911109C004
+:1037300020910E0130910F01F9013296205F3F4F29
+:103740001FC0982F9695969596959F30F0F4E0912E
+:103750000E01F0910F01E90FF11D877021E030E0BB
+:10376000A90102C0440F551F8A95E2F7CA0180954E
+:1037700091818923818308953196E217F30729F017
+:1037800090819813F9CF1082F7CF089581E090E0EF
+:10379000E0910E01F0910F01E80FF91F10820196E0
+:1037A00080319105A9F708959091D901892B8093D3
+:1037B000D901089580959091D90189238093D901E9
+:1037C00008951092D90108959091D801892B809382
+:1037D000D801089580959091D80189238093D801CC
+:1037E00008951092D80108959091D701892B809364
+:1037F000D701089580959091D70189238093D701AF
+:1038000008951092D70108958093C60108951092EB
+:10381000C601089580910E0190910F01FC0131962F
+:103820009C01205F3F4F80E0919191118F5FE217E3
+:10383000F307D1F70895E0910E01F0910F01809107
+:10384000D9018083E0910E01F0910F019081809168
+:10385000D801892B8083E0910E01F0910F019081B6
+:103860008091D701892B80838091C601882361F0E4
+:10387000E0910E01F0910F019081892B80830E94CD
+:103880000A1C81111092C60180910E0190910F01C6
+:103890000C94491120E0009739F0AC0141505109D6
+:1038A000842395232F5FF7CF822F08958091F10114
+:1038B000843039F11092DB0120E488E190E00FB60A
+:1038C000F894A895809360000FBE2093600080E07C
+:1038D0000E94330A83B7817F846083BF83B781608E
+:1038E00083BF7894889583B78E7F83BF0FB6F89493
+:1038F000A8958091600088618093600010926000BC
+:103900000FBE0895089508950E94821C0E948905A3
+:103910000E94831C0E947E0691E0811101C090E00C
+:10392000892F08950E94D6150E943D110C94330AE8
+:1039300082E084BD93E095BD9AEF97BD80936E00C1
+:1039400008952FB7F8948091DC019091DD01A0914A
+:10395000DE01B091DF012FBF0895CF92DF92EF9289
+:10396000FF920F931F932FB7F8944091DC01509171
+:10397000DD016091DE017091DF012FBF6A017B01E3
+:10398000EE24FF248C0120E030E0C016D106E206D0
+:10399000F30610F4415051099A01281B390BC90153
+:1039A0001F910F91FF90EF90DF90CF9008951F929D
+:1039B0000F920FB60F9211248F939F93AF93BF93E3
+:1039C0008091DC019091DD01A091DE01B091DF01D9
+:1039D0000196A11DB11D8093DC019093DD01A093A0
+:1039E000DE01B093DF01BF91AF919F918F910F9056
+:1039F0000FBE0F901F9018950E943A0EF8942FEF6B
+:103A000087EA91E6215080409040E1F700C0000035
+:103A100087E090EBDC018093FB019093FC01A09385
+:103A2000FD01B093FE019CE088E10FB6F894A895E3
+:103A3000809360000FBE90936000FFCFEF92FF92E3
+:103A40000F931F93CF93DF93D82FCDE08C2F0E943D
+:103A5000770605E010E0E82EF12CC701002E02C029
+:103A6000959587950A94E2F780FF09C0602F7C2F17
+:103A700080E00E944407D81302C081E006C00150D4
+:103A8000110958F7C15010F780E0DF91CF911F91D5
+:103A90000F91FF90EF900895CF93C82F8CE20E9472
+:103AA0001E1D882321F08C2FCF910C941E1D80E0C9
+:103AB000CF910895CF930E94A11E811102C00E9450
+:103AC000871EC5E6C15049F00E9489058FE39CE935
+:103AD0000197F1F700C00000F5CF89E20E944C1D6C
+:103AE000811113C18AE20E944C1D81110E94871E20
+:103AF00085E00E944C1D81110E94FC1C0E94AC1E9E
+:103B00008093DA0187E00E944C1D8823A9F18BE1A4
+:103B10000E944C1D882351F08091DA0181FB2227FD
+:103B200020F991E0922790FB81F90EC08EE00E946F
+:103B30004C1D882361F08091DA0182FB222720F955
+:103B400091E0922790FB82F98093DA0115C080E121
+:103B50000E944C1D9091DA01882341F093FB2227AB
+:103B600020F981E0822780FB93F904C0892F80959A
+:103B700080FB90F99093DA018091DA010E94B01EE7
+:103B80000E94BE1E8093FA0180EE0E944C1D882385
+:103B900041F08091FA01982F909590FB80F98093E5
+:103BA000FA0189E30E944C1D882359F08091FA01A3
+:103BB00081FB222720F991E0922790FB81F98093E5
+:103BC000FA0182EE0E944C1D882359F08091FA017F
+:103BD00082FB222720F991E0922790FB82F98093C3
+:103BE000FA0186EE0E944C1D882359F08091FA015B
+:103BF00083FB222720F991E0922790FB83F98093A1
+:103C0000FA0183EE0E944C1D882359F08091FA013D
+:103C100084FB222720F991E0922790FB84F980937E
+:103C2000FA0185E30E944C1D882359F08091FA0126
+:103C300085FB222720F991E0922790FB85F980935C
+:103C4000FA0181E30E944C1D882359F08091FA010A
+:103C500086FB222720F991E0922790FB86F980933A
+:103C6000FA0181E10E944C1D882359F08091FA01EC
+:103C700087FB222720F991E0922790FB87F9809318
+:103C8000FA018091FA010E94C21E8091FA0187FB1D
+:103C9000882780F980930D0187E20E944C1DC82F70
+:103CA0008EE10E944C1D8111C2608FE10E944C1D6B
+:103CB0008111C46080E20E944C1D8111C86081E2C4
+:103CC0000E944C1D8111C06182E20E944C1D811135
+:103CD000C06283E20E944C1D8111C06484E20E9494
+:103CE0004C1D882311F0C06802C0CC2329F08C2F12
+:103CF0000E94B91E6C2F03C00E94B51E682F70E091
+:103D000080E090E0CF910C949619CF9108956DEEDC
+:103D10007EEF80E090E00E94012560E082E090E08C
+:103D20000E94EF2460E083E090E00E94EF2460E0D6
+:103D300084E090E00E94EF2460E085E090E00C9445
+:103D4000EF2480E090E00E94E92421E08D3E9E4F28
+:103D500009F020E0822F089582E090E00C94E124A5
+:103D6000682F82E090E00C94EF2483E090E00C94C4
+:103D7000E124682F83E090E00C94EF2484E090E04D
+:103D80000C94E124682F84E090E00C94EF2480915F
+:103D9000E20180FF0BC06091130185E0689FB001D4
+:103DA000112475956795759567952BC081FF09C09E
+:103DB0006091130185E0689FB001112475956795A6
+:103DC00020C082FF07C06091130185E0689FB001A9
+:103DD000112417C09091E3019923D1F06091120151
+:103DE000961788F72091130185E0289F90011124F0
+:103DF000929FA001939F500D112470E0CA010E9470
+:103E0000B3246038710540F46115710539F002C0C2
+:103E100065E070E0862F08958FE7089581E00895AA
+:103E20008091E20180FF08C06091110170E07595FA
+:103E300067957595679521C081FF06C06091110156
+:103E400070E07595679519C082FF04C060911101FB
+:103E500070E010C09091E3019923C1F060911001CE
+:103E60009617A0F780911101899FC001112470E07D
+:103E70000E94B3246038710528F46115710521F0A2
+:103E8000862F08958FE7089581E0089561E070E03E
+:103E9000F4CF803F21F40E94C71E819504C0813F6A
+:103EA00029F40E94C71E8093E6010895823F21F401
+:103EB0000E94C71E819504C0833F29F40E94C71E3B
+:103EC0008093E5010895893F19F40E94101F05C0F1
+:103ED0008A3F31F40E94101F81958093E701089575
+:103EE0008B3F21F40E94101F819504C08C3F29F460
+:103EF0000E94101F8093E8010895843F21F480916F
+:103F0000E401816017C0853F21F48091E401826063
+:103F100011C0863F21F48091E40184600BC0873F8B
+:103F200021F48091E401886005C0883F31F48091DC
+:103F3000E40180618093E40108958D3F21F4809134
+:103F4000E20181600BC08E3F21F48091E20182602A
+:103F500005C08F3F29F48091E20184608093E201E3
+:103F60000895803F39F48091E60187FF6CC010927C
+:103F7000E60169C0813F29F48091E6011816BCF37F
+:103F800062C09091E501823F29F497FF5CC01092D6
+:103F9000E50159C0833F19F41916CCF354C0893F89
+:103FA00041F48091E70118160CF04DC01092E70122
+:103FB0004AC08A3F29F48091E70187FF44C0F6CFC9
+:103FC0008B3F39F48091E80187FF3DC01092E801F2
+:103FD0003AC08C3F29F48091E8011816BCF333C035
+:103FE000843F21F48091E4018E7F17C0853F21F446
+:103FF0008091E4018D7F11C0863F21F48091E4011E
+:104000008B7F0BC0873F21F48091E401877F05C03F
+:10401000883F31F48091E4018F7E8093E40113C0E6
+:104020008D3F21F48091E2018E7F0BC08E3F21F401
+:104030008091E2018D7F05C08F3F29F48091E201DC
+:104040008B7F8093E2018091E50181110EC0809108
+:10405000E60181110AC08091E701811106C08091BB
+:10406000E801811102C01092E301089584EE91E00D
+:104070000E9454110E94A11C9093E1018093E001E1
+:1040800008951F93CF93DF938091E0019091E10118
+:104090000E94AD1CAC019091E301992321F0209185
+:1040A000140130E006C0209115018AE0289F90019C
+:1040B00011244217530708F485C08091E501C0918F
+:1040C000E601D091E7011091E801811107C0C1110B
+:1040D00075C0D11173C0111171C074C09F3F19F028
+:1040E0009F5F9093E301181624F40E94C71E8093EB
+:1040F000E5018091E50187FF05C00E94C71E8195FB
+:104100008093E5011C1624F40E94C71E8093E601EB
+:104110008091E60187FF05C00E94C71E81958093AC
+:10412000E6016091E501662331F1C091E601CC23FF
+:1041300011F1062E000C770B880B990B0E94BA2305
+:1041400023E333E343E35FE30E941E240E948223C0
+:104150006093E5016C2FCC0F770B880B990B0E94B5
+:10416000BA2323E333E343E35FE30E941E240E9468
+:1041700082236093E6011D1624F40E94101F809391
+:10418000E7018091E70187FF05C00E94101F81951C
+:104190008093E701111624F40E94101F8093E80118
+:1041A0008091E80187FF05C00E94101F81958093D0
+:1041B000E801DF91CF911F910C9436209F3F09F0C9
+:1041C0008FCF97CFDF91CF911F910895E4EEF1E06B
+:1041D00085E0DF011D928A95E9F71092E3011092C4
+:1041E000E2010895833081F128F4813059F0823062
+:1041F000D1F00895853009F449C0B8F1863009F44A
+:1042000056C0089580911501262F30E0280F311DEA
+:104210002F3F310524F4680F6093150108958FEF47
+:1042200080931501089580911401262F30E0280F06
+:10423000311D2F3F310524F4680F60931401089558
+:104240008FEF80931401089580911301262F30E0A1
+:10425000280F311D2F3F310524F4680F609313019F
+:1042600008958FEF80931301089580911201262FF6
+:1042700030E0280F311D2F3F310524F4680F609383
+:10428000120108958FEF809312010895809111011A
+:10429000262F30E0280F311D2F3F310524F4680F01
+:1042A0006093110108958FEF80931101089580911B
+:1042B0001001262F30E0280F311D2F3F310524F447
+:1042C000680F6093100108958FEF80931001089597
+:1042D000833011F128F4813049F0823091F0089553
+:1042E000853081F120F18630C1F10895809115016A
+:1042F000681720F4861B809315010895109215010C
+:10430000089580911401681720F4861B809314018E
+:10431000089510921401089580911301681720F4F4
+:10432000861B8093130108951092130108958091C4
+:104330001201681720F4861B8093120108951092D1
+:104340001201089580911101681720F4861B809353
+:1043500011010895109211010895809110016817BC
+:1043600020F4861B80931001089510921001089587
+:104370000F931F938D3109F46BC008F03FC08E304E
+:1043800009F47FC0C0F4873009F469C068F486304E
+:1043900009F0B1C08091DA01817F8E7F8093DA01CC
+:1043A00081E08093EA01A8C0883009F4A2C08B3074
+:1043B00009F49FC0A0C0863109F49BC078F4803115
+:1043C00009F472C0813109F096C00E94D61590910F
+:1043D0000D0181E0892780930D018BC0893109F49B
+:1043E00088C08B3109F087C08091DA0181FB2227D8
+:1043F00020F991E0922790FB81F94CC0853309F4B4
+:1044000070C048F4873209F46CC008F459C089328E
+:1044100009F467C070C0833438F48A3308F04EC0A2
+:10442000883309F466C067C0833409F45AC08834FD
+:1044300009F061C00E94D6150FEF13ED20E3015083
+:1044400010402040E1F700C000000E94FC1C51C059
+:104450000E943C230E943D110E94330A4AC0909161
+:10446000DA01892F8095817080FB90F929F09660A0
+:1044700098609093DA0140C0997F977F9093DA011A
+:1044800038C08091DA0182FB222720F991E092273F
+:1044900090FB82F98093DA01992359F18091DA0136
+:1044A00081608093DA0125C08091DA0183FB2227A5
+:1044B00020F991E0922790FB83F9ECCF895301C05A
+:1044C0008D5141E050E060E070E08A019B0104C042
+:1044D000000F111F221F331F8A95D2F7C901B8019F
+:1044E00004C061E070E080E090E00E9496190E94B4
+:1044F000D61581E001C080E01F910F91089580E002
+:10450000089580E00895CF93C82F8091EA0181300B
+:1045100079F018F08230E9F187C0E0910E01F09156
+:104520000F018081813169F0823209F07FC009C0BA
+:10453000E0910E01F0910F018081813111F0823202
+:1045400061F48C2F0E947F22811104C08C2F0E9465
+:10455000B8211DC081E090E01AC08C2F0E948122FA
+:10456000811114C0C43179F048F4CB3079F0C031F6
+:1045700009F060C082E08093EA0108C0C93219F0F6
+:10458000C83321F057C01092EA0154C081E0817015
+:1045900053C0C93289F118F5C43171F1A8F4C7309C
+:1045A00009F046C08AE08093150194E190931401CC
+:1045B00093E0909313018093120188E0809311019E
+:1045C00088E28093100134C0CE51C63088F5EC2FBC
+:1045D000F0E0E65DFE4F80818093E90129C0CE3492
+:1045E000E9F020F4CB3421F56AE013C0C13579F04D
+:1045F000C235F1F461E00DC08091E901882319F022
+:104600001092E90115C081E08093EA0115C061E0D4
+:1046100006C08091E9010E94F2200AC06AE0809100
+:10462000E9010E94682104C01092EA0180E004C000
+:1046300081E002C080E0ABCFCF910895E1E8F0E0E7
+:104640008081886080838081816080838FB7F894C7
+:1046500093E09093890090ED909388008FBF089528
+:10466000EFE6F0E08081826080830895EFE6F0E07D
+:1046700080818D7F80830895EFE6F0E0908182E075
+:104680008927808308951F920F920FB60F921124ED
+:104690002F933F934F935F936F937F938F939F934A
+:1046A000AF93BF93EF93FF938091EB019091EC0157
+:1046B00001969093EC018093EB01811103C082E09D
+:1046C0000E94330AE091EC01E695E695F0E0EC59A2
+:1046D000F84FE4918091EB018E1303C080E00E94BB
+:1046E000330AFF91EF91BF91AF919F918F917F918D
+:1046F0006F915F914F913F912F910F900FBE0F904F
+:104700001F9018950E9489236894B1110C94182465
+:1047100008950E94FD2388F09F5798F0B92F99279C
+:10472000B751B0F0E1F0660F771F881F991F1AF09C
+:10473000BA95C9F714C0B13091F00E941724B1E0C6
+:1047400008950C941724672F782F8827B85F39F0C5
+:10475000B93FCCF3869577956795B395D9F73EF435
+:1047600090958095709561957F4F8F4F9F4F0895DD
+:10477000E89409C097FB3EF49095809570956195FB
+:104780007F4F8F4F9F4F9923A9F0F92F96E9BB27B1
+:104790009395F695879577956795B795F111F8CF2D
+:1047A000FAF4BB0F11F460FF1BC06F5F7F4F8F4F98
+:1047B0009F4F16C0882311F096E911C0772321F08E
+:1047C0009EE8872F762F05C0662371F096E8862F26
+:1047D00070E060E02AF09A95660F771F881FDAF77D
+:1047E000880F9695879597F9089557FD9058440F2F
+:1047F000551F59F05F3F71F04795880F97FB991F40
+:1048000061F09F3F79F087950895121613061406FC
+:10481000551FF2CF4695F1DF08C016161706180689
+:10482000991FF1CF86957105610508940895E89464
+:10483000BB2766277727CB0197F908950E9431247B
+:104840000C94A2240E94942438F00E949B2420F00F
+:10485000952311F00C948B240C94912411240C9426
+:1048600018240E94F52370F3959FC1F3950F50E033
+:10487000551F629FF001729FBB27F00DB11D639F12
+:10488000AA27F00DB11DAA1F649F6627B00DA11DB8
+:10489000661F829F2227B00DA11D621F739FB00D5E
+:1048A000A11D621F839FA00D611D221F749F3327CE
+:1048B000A00D611D231F849F600D211D822F762F67
+:1048C0006A2F11249F5750409AF0F1F088234AF044
+:1048D000EE0FFF1FBB1F661F771F881F91505040B0
+:1048E000A9F79E3F510580F00C948B240C9418245A
+:1048F0005F3FE4F3983ED4F3869577956795B79537
+:10490000F795E7959F5FC1F7FE2B880F911D969550
+:10491000879597F9089597F99F6780E870E060E0C0
+:1049200008959FEF80EC089500240A941616170648
+:1049300018060906089500240A9412161306140690
+:1049400005060895092E0394000C11F4882352F0F3
+:10495000BB0F40F4BF2B11F460FF04C06F5F7F4FAB
+:104960008F4F9F4F089597FB072E16F4009407D0A2
+:1049700077FD09D00E94CD2407FC05D03EF4909528
+:1049800081959F4F0895709561957F4F0895EE0F23
+:10499000FF1F0590F491E02D0994AA1BBB1B51E168
+:1049A00007C0AA1FBB1FA617B70710F0A61BB70B9F
+:1049B000881F991F5A95A9F780959095BC01CD0144
+:1049C0000895F999FECF92BD81BDF89A992780B5D7
+:1049D0000895A8E1B0E042E050E00C940925262FAC
+:1049E000F999FECF92BD81BDF89A019700B40216E5
+:1049F00039F01FBA20BD0FB6F894FA9AF99A0FBE93
+:104A000008950196272F0E94F0240C94EF24DC01D6
+:104A1000CB01FC01F999FECF06C0F2BDE1BDF89AC9
+:104A2000319600B40D9241505040B8F70895F89473
+:024A3000FFCFB6
+:104A32002002350AC30AA00A6C0A380A0101C7011A
+:104A420028080A03140A3F4D36392507D806A2065C
+:104A52006906FC0515062E06470601020304050633
+:044A62000708090038
+:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/bepo/bepo.png b/keyboard/ergodox_ez/keymaps/bepo/bepo.png
new file mode 100644
index 0000000000..3df7aa609f
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/bepo/bepo.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/bepo/keymap.c b/keyboard/ergodox_ez/keymaps/bepo/keymap.c
new file mode 100644
index 0000000000..dac6b7b51a
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/bepo/keymap.c
@@ -0,0 +1,311 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_extras/keymap_bepo.h"
+
+#define BASE 0 // default layer
+#define QWER 1 // qwerty compat layer
+#define SQWER 2 // shifted qwerty compat layer
+#define AQWER 3 // alted qwerty compat layer
+#define FNAV 4 // function / navigation keys
+#define NUM 5 // numeric keypad keys
+#define MSE 6 // mouse keys
+
+#define KP_00 0
+#define CA_Fx 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Base layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | % | B |E_ACUT| P | O |E_GRAV|Backsp| |CapsLo| ^ | V | D | L | J | Z |
+ * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
+ * | W | A | U | I | E | , |------| |------| C | T | S | R | N | M |
+ * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
+ * | E_CIRC |A_GRAV| Y | X | . | K | | | | ' | Q | G | H | F | C_CEDIL|
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * |QWERTY| |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | | L_Num| | CA_Fx| | |
+ * | Space|LShift|------| |------|RShift|Enter |
+ * | | |L_FNav| |L_FNav| | |
+ * `--------------------' `--------------------'
+ */
+[BASE] = KEYMAP(
+// Left hand
+BP_DOLLAR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL,
+BP_PERCENT, BP_B, BP_E_ACUTE, BP_P, BP_O, BP_E_GRAVE, KC_BSPC,
+BP_W, BP_A, BP_U, BP_I, BP_E, BP_COMMA,
+BP_ECRC, BP_A_GRAVE, BP_Y, BP_X, BP_DOT, BP_K, KC_TAB,
+TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
+ KC_ESC, MO(MSE),
+ MO(NUM),
+ KC_SPC, KC_LSHIFT, MO(FNAV),
+// Right hand
+ KC_SLCK, BP_AT, BP_PLUS, BP_MINUS, BP_SLASH, BP_ASTR, BP_EQUAL,
+ KC_CAPSLOCK, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z,
+ BP_C, BP_T, BP_S, BP_R, BP_N, BP_M,
+ KC_NUMLOCK, BP_APOS, BP_Q, BP_G, BP_H, BP_F, BP_CCED,
+ BP_ALGR, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
+KC_NO, KC_INS,
+M(CA_Fx),
+MO(FNAV), KC_RSHIFT, KC_ENTER),
+/* Keymap 1: QWERTY system compatibility layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | % | b | e | p | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z |
+ * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
+ * | w | a | u | i | e | , |------| |------| c | t | s | r | n | m |
+ * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
+ * | e | a | y | x | . | k | | | | ' | q | g | h | f | c |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | | L_Num| | | | |
+ * | Space|LShift|------| |------|RShift|Enter |
+ * | | |L_FNav| |L_FNav| | |
+ * `--------------------' `--------------------'
+ */
+[QWER] = KEYMAP(
+// Left hand
+KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LPRN, KC_RPRN, KC_DEL,
+KC_PERCENT, KC_B, KC_E, KC_P, KC_O, KC_E, KC_BSPC,
+KC_W, KC_A, KC_U, KC_I, KC_E, KC_COMMA,
+KC_E, KC_A, KC_Y, KC_X, KC_DOT, KC_K, KC_TAB,
+KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
+ KC_ESC, MO(MSE),
+ MO(NUM),
+ KC_SPC, MO(SQWER), MO(FNAV),
+// Right hand
+ KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL,
+ KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
+ KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
+ KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C,
+ MO(AQWER), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
+KC_NO, KC_INS,
+KC_TRNS,
+MO(FNAV), MO(SQWER), KC_ENTER),
+/* Keymap 2: QWERTY shifted system compatibility layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | ` | B | E | P | O | E |Backsp| |CapsLo| ! | V | D | L | J | Z |
+ * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
+ * | W | A | U | I | E | ; |------| |------| C | T | S | R | N | M |
+ * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
+ * | E | A | Y | X | : | K | | | | ? | Q | G | H | F | C |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | | L_Num| | | | |
+ * | Space|LShift|------| |------|RShift|Enter |
+ * | | |L_FNav| |L_FNav| | |
+ * `--------------------' `--------------------'
+ */
+[SQWER] = KEYMAP(
+// Left hand
+KC_HASH, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
+KC_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS,
+S(KC_W), S(KC_A), S(KC_U), S(KC_I), S(KC_E), KC_SCOLON,
+S(KC_E), S(KC_A), S(KC_Y), S(KC_X), KC_COLON, S(KC_K), S(KC_TAB),
+KC_TRNS, KC_TRNS, S(KC_LGUI), S(KC_LCTL), S(KC_LALT),
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+// Right hand
+ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_EXLM, S(KC_V), S(KC_D), S(KC_L), S(KC_J), S(KC_Z),
+ S(KC_C), S(KC_T), S(KC_S), S(KC_R), S(KC_N), S(KC_M),
+ KC_TRNS, S(KC_SLASH), S(KC_Q), S(KC_G), S(KC_H), S(KC_F), S(KC_C),
+ S(KC_RALT), S(KC_RCTL), S(KC_RGUI), KC_TRNS, KC_TRNS,
+KC_TRNS, KC_TRNS,
+KC_TRNS,
+KC_TRNS, KC_TRNS, KC_TRNS),
+/* Keymap 3: QWERTY alted system compatibility layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z |
+ * |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
+ * | w | a | u | i | € | , |------| |------| c | t | s | r | n | m |
+ * |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
+ * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | | L_Num| | | | |
+ * | _ |LShift|------| |------|RShift|Enter |
+ * | | |L_FNav| |L_FNav| | |
+ * `--------------------' `--------------------'
+ */
+[AQWER] = KEYMAP(
+// Left hand
+KC_DOLLAR, S(KC_QUOT), S(KC_COMM), S(KC_DOT), KC_LBRC, KC_RBRC, KC_DEL,
+KC_PERCENT, KC_PIPE, KC_E, KC_AMPR, KC_O, KC_E, KC_BSPC,
+KC_W, KC_A, KC_U, KC_I, RALT(KC_5), KC_COMMA,
+KC_E, KC_BSLASH, KC_LCBR, KC_RCBR, KC_DOT, KC_TILDE, KC_TAB,
+KC_TRNS, KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
+ KC_ESC, MO(MSE),
+ MO(NUM),
+ KC_UNDS, MO(SQWER), MO(FNAV),
+// Right hand
+ KC_SLCK, KC_AT, KC_PLUS, KC_MINUS, KC_SLASH, KC_ASTR, KC_EQUAL,
+ KC_CAPSLOCK, KC_CIRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
+ KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
+ KC_NUMLOCK, KC_QUOT, KC_Q, KC_G, KC_H, KC_F, KC_C,
+ KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
+KC_NO, KC_INS,
+KC_TRNS,
+MO(FNAV), MO(SQWER), KC_ENTER),
+/* Keymap 4: function / navigation layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | |VolDwn| | | PgUp | Home | Up | End | F11 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| PgDn | Left | Down | Right| F12 | |
+ * |--------+------+------+------+------+------| VolUp| | |------+------+------+------+------+--------|
+ * | | Undo | Cut | Copy | Paste| | | | | | | | | | |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | | | | | | | |
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[FNAV] = KEYMAP(
+// Left hand
+KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MUTE,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_NO, KC_VOLD,
+KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_TRNS, KC_TRNS,
+// Right hand
+ KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO,
+ KC_NO, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_F11, KC_NO,
+ KC_PGDOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_F12, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO,
+KC_NO, KC_NO,
+KC_TRNS,
+KC_TRNS, KC_TRNS, KC_NO),
+/* Keymap 5: numeric layer, sends keypad codes
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | + | - | / | * | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | 7 | 8 | 9 | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | 4 | 5 | 6 | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | 1 | 2 | 3 | | |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | | | 0 | 00 | . | | |
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | | | | | | |
+ * | | |------| |------| | Enter|
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[NUM] = KEYMAP(
+// Left hand
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_NO, KC_NO,
+ KC_TRNS,
+ KC_NO, KC_TRNS, KC_NO,
+// Right hand
+ KC_NO, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_SLASH, KC_KP_ASTERISK, KC_NO,
+ KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_NO, KC_NO,
+ KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_NO, KC_NO,
+ KC_KP_0, M(KP_00), KC_KP_COMMA, KC_NO, KC_NO,
+KC_NO, KC_NO,
+KC_NO,
+KC_NO, KC_TRNS, KC_KP_ENTER),
+/* Keymap 6: mouse layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | |LClick| Up |RClick| WhUp | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | Left | Down | Right|WhDown| |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | | | | | | | |
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[MSE] = KEYMAP(
+// Left hand
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_NO, KC_TRNS,
+ KC_NO,
+ KC_NO, KC_TRNS, KC_NO,
+// Right hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_NO,
+ KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO,
+KC_NO, KC_NO,
+KC_NO,
+KC_NO, KC_TRNS, KC_NO)
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case KP_00:
+ if (record->event.pressed) {
+ return MACRO( T(KP_0), D(KP_0), END );
+ } else {
+ return MACRO( U(KP_0), END );
+ }
+ break;
+ case CA_Fx:
+ if (record->event.pressed) {
+ layer_on(FNAV);
+ return MACRO( D(LALT), D(LCTL), END );
+ } else {
+ layer_off(FNAV);
+ return MACRO( U(LCTL), U(LALT), END );
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
diff --git a/keyboard/ergodox_ez/keymaps/dave/dave.hex b/keyboard/ergodox_ez/keymaps/dave/dave.hex
index 363e7234d8..a1ba8b901d 100644
--- a/keyboard/ergodox_ez/keymaps/dave/dave.hex
+++ b/keyboard/ergodox_ez/keymaps/dave/dave.hex
@@ -1,1128 +1,1172 @@
-:100000000C9463020C94AA020C94AA020C94AA0207
-:100010000C94AA020C94AA020C94AA020C94AA02B0
-:100020000C94AA020C94AA020C94FF0B0C94D10C11
-:100030000C94AA020C94AA020C94AA020C94AA0290
-:100040000C94AA020C9445210C94AA020C94AA02C6
-:100050000C94AA020C94D71A0C94AA020C94AA022B
-:100060000C94AA020C94AA020C94AA020C94AA0260
-:100070000C94AA020C94AA020C94AA020C94AA0250
-:100080000C94AA020C94AA020C94AA020C94AA0240
-:100090000C94AA020C94AA020C94AA020C94AA0230
-:1000A0000C94AA020C94AA020C94AA023E0D600DB4
-:1000B000530E600D530EA50DC80D530E1D0E300EC0
-:1000C0001A111A11491149118C11C611D313D313E6
-:1000D000DF11D313D412D412A713D313D313BE1327
-:1000E00029002B00E000E100357100001E00140023
-:1000F00004001D006400E3001F001A0016001B002E
-:1001000000000252200008000700060000002C003A
-:100110002100150009001900E2001151220017000A
-:100120000A0005000000460023001C0000000B0030
-:100130000000650023000A000000050000004800E0
-:1001400024001C000B0011000000007525001800A1
-:100150000D001000E600115126000C000E003600C4
-:1001600000002C00270012000F0037002F00015262
-:100170002D001300330038003000E7002A0028006B
-:100180002800E500347100000100010001000100B9
-:100190000100000001001E022002220201000100F5
-:1001A00001001F02210223020100010001002F02B1
-:1001B00026022F000100010001003002270230005A
-:1001C000010012510100310235003502000001002A
-:1001D0000100010000000100000001000100010019
-:1001E0000000010000000100010001000100010009
-:1001F0000000010000005F005C0059006200125125
-:10020000540060005D005A0062000100550061006A
-:100210005E005B0063000100560057005700580065
-:10022000580001002E0032003400010001000000DF
-:100230000100010001000100010000003A004A0035
-:100240005000F400F20001003B0052005100F000A9
-:10025000F10001003C004D004F00F500F3000100EB
-:100260003D0049004C000100010010513E004B00D0
-:100270004E0001000000A5003F0001000000010049
-:1002800000004C05400001000000010000000100DA
-:1002900041000100010001000000010042000100D6
-:1002A000B600AC00AA001051430049004C00AE005B
-:1002B000A800010044000100B700AB00A900010044
-:1002C00045000100010001000100010001000100E2
-:1002D00001000100010000001603450072006700E4
-:1002E0006F0044006F007800200045005A000000B5
-:1002F00016034500720067006F0044006F0078002D
-:10030000200045005A0000000403090409026D00A2
-:10031000040100A0FA090400000103010100092101
-:1003200011010001223F000705810308000A0904AA
-:1003300001000103010200092111010001224D0009
-:100340000705820308000A090402000103000000F7
-:100350000921110100012236000705830308000A64
-:10036000090403000103000000092111010001221A
-:10037000390007058403100001120110010000007C
-:1003800008EDFE071301000102000105010906A1A5
-:1003900001050719E029E715002501950875018178
-:1003A0000205081901290595057501910295017548
-:1003B0000391010507190029771500250195787526
-:1003C000018102C005010980A101850216010026F4
-:1003D000B7001A01002AB700751095018100C00509
-:1003E0000C0901A1018503160100269C021A0100D7
-:1003F0002A9C02751095018100C005010902A10126
-:100400000901A10005091901290515002501950516
-:1004100075018102950175038101050109300931DA
-:100420001581257F95027508810609381581257F7C
-:10043000950175088106050C0A38021581257F95FE
-:100440000175088106C0C005010906A1010507194B
-:10045000E029E715002501950875018102950175D0
-:100460000881010508190129059505750191029575
-:1004700001750391010507190029FF150025FF9556
-:100480000675088100C000000000000000000000A8
-:1004900000010204060A0F17202C3A4A5D71879D5D
-:1004A000B3C7DAE9F5FCFFFCF5E9DAC7B39D87715C
-:1004B0005D4A3A2C20170F0A0604020100000000D2
-:1004C00000000000000011241FBECFEFDAE0DEBF05
-:1004D000CDBF04B603FE27C08091F1019091F201D7
-:1004E000A091F301B091F4018730904BA740B04B3D
-:1004F000D1F41092F1011092F2011092F3011092D6
-:10050000F40114BE84B7877F84BF0FB6F894A89512
-:1005100080916000886180936000109260000FBE3F
-:10052000E0E0FFE3099511E0A0E0B1E0ECE2F6E4E1
-:1005300002C005900D92A433B107D9F721E0A4E3DE
-:10054000B1E001C01D92A13FB207E1F70E94460948
-:100550000C9414230C94000061110BC0FC018281E7
-:10056000882321F085EE0E94B40F03C085EE0E941F
-:100570007C1080E090E0089508956091B50170913D
-:10058000B6018091B7019091B8010E94041A569863
-:100590005E98E5E3F1E065E070E031E0A1E0B0E015
-:1005A0004081831305C091E04F3F41F490E006C0C5
-:1005B00021E0411101C020E0922F9195940F90838A
-:1005C000992309F194B1AD01062E01C0440F0A949C
-:1005D000EAF7942B94B995B1492B45B9408150E085
-:1005E000313029F4509389004093880019C032308B
-:1005F00029F450938B0040938A0012C050938D00D1
-:1006000040938C000DC094B1AD01062E01C0440F83
-:100610000A94EAF74095942394B995B1492345B9D2
-:100620003F5F6F5F7F4F3196343009F0B9CF089547
-:100630000C94BD0256985E9825982D9826982E9871
-:1006400027982F988FEF90E09093890080938800EF
-:1006500090938B0080938A0090938D0080938C0000
-:10066000259A2D9A2FEF80E792E02150804090400C
-:10067000E1F700C00000269A2E9A2FEF80E792E063
-:10068000215080409040E1F700C00000279A2F9A47
-:100690002FEF80E792E0215080409040E1F700C0CA
-:1006A000000025982D982FEF80E792E021508040A0
-:1006B0009040E1F700C0000026982E982FEF80E7C9
-:1006C00092E0215080409040E1F700C00000279860
-:1006D0002F9856985E9825982D9826982E982798AA
-:1006E0002F98089589EA8093800089E080938100A3
-:1006F00024982C983F988AB18F748AB96E98479A3B
-:100700008BB1806B8BB9769A0E941A030C94BC0251
-:1007100080E2809300018091380181110EC00E9417
-:10072000D70381E0809338012FEF83ED90E32150D0
-:1007300080409040E1F700C0000080E40E94DD03AB
-:100740008093000181112EC00E9407048093000154
-:10075000811128C00E94070480930001811122C0EA
-:100760008FE30E9407048093000181111BC00E9447
-:10077000FF0380E40E94DD0380930001811112C019
-:100780008CE00E9407048093000181110BC00E943D
-:10079000070480930001811105C08FE30E940704C4
-:1007A000809300010E94FF03809100010895109240
-:1007B000B9008AE08093B800089594EA9093BC0051
-:1007C0009091BC0097FFFCCF9091B900987F983032
-:1007D00021F0903111F081E008958093BB0084E80E
-:1007E0008093BC008091BC0087FFFCCF8091B90052
-:1007F000887F883111F0803471F780E0089584E9B2
-:100800008093BC008091BC0084FDFCCF0895809350
-:10081000BB0084E88093BC008091BC0087FFFCCFC4
-:100820009091B900987F81E0983209F480E00895B2
-:1008300084E88093BC008091BC0087FFFCCF80914E
-:10084000BB00089580910001811115C080E40E94D1
-:10085000DD038093000181110CC082E10E94070436
-:1008600080930001811105C08FEF0E9407048093DF
-:1008700000010E94FF0384B1807F84B985B1807F2D
-:1008800085B98AB1837F8AB98BB1837F8BB93E9852
-:10089000469808950E948803809300010E942204D4
-:1008A00080B38C7080BB81B3836F81BBE8E4F1E0DF
-:1008B000AAE3B1E011921D9281E0E635F807D1F785
-:1008C0000C9472039F92AF92BF92CF92DF92EF92FD
-:1008D000FF920F931F93CF93DF93809100018823A2
-:1008E00079F0809139018F5F80933901811108C0BF
-:1008F0000E94880380930001811102C00E941A03A4
-:100900008AE3E82E81E0F82E8701C0E0D0E0BB2426
-:10091000B39492E0A92ECC24C394D12CC730D10536
-:1009200000F580910001811164C080E40E94DD0324
-:1009300080930001811112C082E10E94070480931C
-:10094000000181110BC0C6010C2E01C0880F0A9452
-:10095000EAF780950E940704809300010E94FF033C
-:1009600048C0CA30A1F028F4C83059F0C93061F04D
-:1009700005C0CC3089F070F0CD3089F0209A2898ED
-:1009800010C0219A29980DC0229A2A980AC0239A49
-:100990002B9807C0529A01C0539A5B9802C03E9AA6
-:1009A0004698E0EAEA95F1F78FB181708B25799945
-:1009B00002C032E001C030E0832B7C9902C034E0F9
-:1009C00001C030E0832B7D9902C028E001C020E007
-:1009D000822B7E9902C090E101C090E0892B9FB1EB
-:1009E0009095991F9927991F9295990F907E892B21
-:1009F0000FC08091000181114AC080E40E94DD0394
-:100A000080930001882381F1912C0E94FF03892D9E
-:100A1000D8019C91981719F08C93A09201010E9423
-:100A2000220421960F5F1F4FCE30D10509F076CFFB
-:100A300080910101882369F181508093010188230D
-:100A400039F0EFE9FFE03197F1F700C0000021C075
-:100A5000E8E4F1E0D7018D917D018193B8E4EB16D4
-:100A6000B1E0FB06B9F715C083E10E94070480934B
-:100A700000018111C9CF81E40E94DD038093000150
-:100A80008111C2CF0E941804982E9094BECF80E0AE
-:100A9000BFCF0E94180381E0DF91CF911F910F918A
-:100AA000FF90EF90DF90CF90BF90AF909F90089510
-:100AB000E82FF0E0E85BFE4F8081089508958B3BBE
-:100AC000910580F4883A910548F5853A9105D8F466
-:100AD0008430910508F0B2C0019709F06EC081E042
-:100AE00090E00895803E910508F467C0883E910526
-:100AF00008F4A4C09C01205F31092031310508F0C1
-:100B00005CC090650895853A910509F459C0863A0C
-:100B1000910509F058C082E890E40895883A91055B
-:100B200009F454C0893A910509F453C08A3A9105F1
-:100B300009F452C08B3A910509F451C08C3A9105E1
-:100B400009F450C08D3A910509F44FC0803B9105DE
-:100B500009F44EC08E3A910509F44DC08F3A9105C3
-:100B600009F44CC0813B910509F44BC0823B9105CF
-:100B700009F44AC0833B910509F449C0843B9105BF
-:100B800009F448C0853B910509F447C0863B9105AF
-:100B900009F446C0873B910509F445C0883B91059F
-:100BA00009F444C0893B910509F443C08A3B91058F
-:100BB00009F442C080E094E4089580E090E0089554
-:100BC00081E890E4089583E890E4089582EE94E447
-:100BD000089589EE94E408958AEE94E4089585EBEF
-:100BE00094E4089586EB94E4089587EB94E40895E3
-:100BF0008CEC94E408958DEC94E4089583E895E4F6
-:100C000008958AE895E4089582E995E4089584E9D1
-:100C100095E4089581E296E4089583E296E40895C8
-:100C200084E296E4089585E296E4089586E296E4E7
-:100C3000089587E296E408958AE296E40895089577
-:100C400024E5829FC0011124FC0126E0729FE00D83
-:100C5000F11D1124E60FF11DEE0FFF1FE052FF4FB3
-:100C6000859194910895880F991FFC01E05AF040F6
-:100C7000859194910895880F991FFC01E052FF4FD0
-:100C800085919491089524E5829FC0011124FC016F
-:100C900046E0749FE00DF11D1124E60FF11DEE0FEB
-:100CA000FF1FE052FF4F859194919C013A952115C9
-:100CB0004FE1340708F425C13F512115304120F49C
-:100CC0009F700E943B0608959C01305321153041CE
-:100CD00018F49927906C0895811520E5920769F41E
-:100CE0000E94F5134FEF84E39CE041508040904018
-:100CF000E1F700C000000C94FC1A813020E5920757
-:100D000031F48091D00181608093D00108959C01DD
-:100D100030552115304108F05CC0292F33272F7042
-:100D2000332721303105E9F4AC0164E0440F551F4D
-:100D30006A95E1F744275370BC016370772702C0BE
-:100D4000220F331F6A95E2F73C68242B352B73E0A2
-:100D5000880F991F7A95E1F780769927822B932B3C
-:100D600008952230310529F4982F8827816F906AE1
-:100D7000089523303105A1F4AC0133E0440F551F31
-:100D80003A95E1F7407E57708370992721E030E073
-:100D900002C0220F331F8A95E2F7C9019C6816C072
-:100DA0002430310531F5AC0123E0440F551F2A955D
-:100DB000E1F7407E57708370992721E030E002C050
-:100DC000220F331F8A95E2F7C9019A68842B952B6D
-:100DD00008959C0130572115304118F49F7090629E
-:100DE00008959C0130582115304118F49F70906A85
-:100DF0000895803E9105E0F4803C910558F58133DB
-:100E0000910509F46FC048F48932910509F463C073
-:100E10008A32910509F46DC072C089339105E9F0F9
-:100E200082389105D1F08533910509F44DC067C032
-:100E3000833E910581F138F4803E9105B9F0823E00
-:100E40009105D9F05CC0863E910561F1873E910520
-:100E5000A1F155C00E94330608952091E20120FDC2
-:100E600002C021FF4CC080EE90E049C08091E201B9
-:100E700080FFF9CF89E390E042C08091E20182FFD8
-:100E80000EC08091E20184FF03C080E090E037C093
-:100E900083EE90E034C08091E20182FFF2CF82EED7
-:100EA00090E02DC08091E20183FF0BC08091E201B0
-:100EB00084FDEBCF87EE90E022C08091E20183FFBA
-:100EC000F5CF86EE90E01BC08091E20185FF07C060
-:100ED00089E290E014C08091E20185FFF9CF85E3BB
-:100EE00090E00DC08091E20186FF07C08AE290E0A9
-:100EF00006C08091E20186FFF9CF81E390E00E9475
-:100F00005F0508950895809166010895CF93DF935A
-:100F100000D01F92CDB7DEB79C018091E8018430EC
-:100F200019F593E099833B832A839093E9008FEF2F
-:100F30009091E800815095FD06C095ED9A95F1F7E6
-:100F400000008111F5CF8091E80085FF0DC040E0E1
-:100F500050E063E070E0CE0101960E94F3098091B9
-:100F6000E8008E778093E8000F900F900F90DF914C
-:100F7000CF910895CF93DF9300D01F92CDB7DEB706
-:100F80002091E801243021F522E029839B838A8384
-:100F900083E08093E9008FEF9091E800815095FD08
-:100FA00006C095ED9A95F1F700008111F5CF80917B
-:100FB000E80085FF0DC040E050E063E070E0CE0146
-:100FC00001960E94F3098091E8008E778093E800F3
-:100FD0000F900F900F90DF91CF9108959C01809119
-:100FE000E8018430F9F482E08093E9009FEF80917A
-:100FF000E800915085FD06C085ED8A95F1F7000067
-:101000009111F5CF8091E80085FF0CC040E050E0E1
-:1010100065E070E0C9010E94F3098091E8008E77D5
-:101020008093E8000895CF93DF93EC018091E8016D
-:10103000843009F046C090910C019923D9F0909129
-:101040000D019923B9F08093E9008FEF9091E800AA
-:10105000815095FD06C095E19A95F1F70000811148
-:10106000F5CF8091E80085FF2CC040E050E060E1C2
-:1010700070E017C081E08093E9008FEF9091E80065
-:10108000815095FD06C095ED9A95F1F7000081110C
-:10109000F5CF8091E80085FF14C040E050E068E0A3
-:1010A00070E0CE010E94F3098091E8008E77809372
-:1010B000E80080E1FE01A6E5B1E001900D928A957D
-:1010C000E1F7DF91CF9108958091E701811109C087
-:1010D0000E94840B0E94E10B8091E2008460809367
-:1010E000E20008951092E701089508950C943221CA
-:1010F0000E94921A0E9438210E948C0E0C94820742
-:1011000042E061EC81E00E94FD0A42E061EC82E095
-:101110000E94FD0A42E061EC83E00E94FD0A42E188
-:1011200061EC84E00C94FD0A8091EA01833009F4BB
-:1011300055C030F4813071F0823009F48EC00895CA
-:101140008A3009F47AC08B3009F460C0893009F024
-:101150009CC020C08091E901813A09F096C080913D
-:10116000E800877F8093E8008091ED019091EE0187
-:10117000892B21F460E186E591E003C060E080E026
-:1011800090E070E00E943E0A8091E8008B778093A7
-:10119000E80008958091E901813209F076C08091DC
-:1011A000ED019091EE01009719F0039709F06DC0E1
-:1011B0008091E800877F8093E8008091E80082FDBD
-:1011C00005C08091E8018111F8CF5FC08091F100E6
-:1011D000809366018091E8008B7753C08091E9018C
-:1011E000813A09F052C08091ED019091EE01892B76
-:1011F00009F04BC08091E800877F8093E8008091E0
-:10120000E80080FFFCCF80910C0136C08091E9019D
-:101210008132D9F58091ED019091EE01892BA9F5EC
-:101220008091E800877F8093E8000E94320B8091D4
-:10123000EB0180930C010C94F5138091E90181324C
-:1012400021F58091E800877F8093E8000E94320BAF
-:101250008091EC018093670108958091E901813AC2
-:10126000A1F48091E800877F8093E8008091E800F6
-:1012700080FFFCCF809167018093F1008091E800AE
-:101280008E778093E8000C94320B089584B7877FA3
-:1012900084BF0FB6F894A895809160008861809310
-:1012A0006000109260000FBE90E080E80FB6F894E6
-:1012B00080936100909361000FBE0E94DB0E0E943C
-:1012C000840B0E94E10B8091E20084608093E20035
-:1012D00078940E946C0E0E94DD0E82E091E00E94E4
-:1012E000870E0E9420218091E801853069F40E94D8
-:1012F000541A8091E6018823B1F30E947E1A882354
-:1013000091F30E94DD09EFCF0E94E30EECCF292F6D
-:10131000332723303105C9F060F42130310581F0E5
-:101320002230310509F041C08DE690E02CE033E039
-:1013300040C021323105E1F02232310531F135C0B2
-:1013400082E190E029E733E034C0992781309105AC
-:1013500049F028F0029749F5E8EDF2E005C0E8E031
-:10136000F3E002C0E0EFF2E0849190E09F0121C041
-:101370006430D8F4E62FF0E0EE0FFF1FEE5DFE4F75
-:101380002081318189E090E014C0643070F470E015
-:10139000FB01EE0FFF1FE65EFE4F20813181FB0156
-:1013A000EA5EFE4F808190E004C080E090E020E0A3
-:1013B00030E0FA0131832083089580E189BD82E124
-:1013C00089BD09B400FEFDCF8091D8008F7D809348
-:1013D000D8008091E00082608093E0008091E0007E
-:1013E00081FDFCCF0895CF92DF92EF92FF920F9391
-:1013F0001F93CF93DF93EC018B016A010E94510B85
-:10140000811133C0C114D10439F0F601808191817A
-:10141000081B190BC80FD91FE12CF12C0115110560
-:1014200019F18091E80085FD16C08091E8008E7763
-:101430008093E800C114D10449F0F60180819181C4
-:10144000E80EF91EF182E08285E00FC00E94510B88
-:10145000882321F30AC089918093F100015011097A
-:10146000FFEFEF1AFF0ADACF80E0DF91CF911F91F3
-:101470000F91FF90EF90DF90CF9008952091EF01B2
-:101480003091F0012617370748F06115710539F4DE
-:101490002091E8002E772093E80001C0B901FC01FB
-:1014A00020E06115710579F18091E8018823F1F15F
-:1014B0008530F1F18091E80083FD3CC08091E80027
-:1014C00082FD2EC08091E80080FFEBCF2091F300D9
-:1014D0008091F20090E0922B6115710551F08830F7
-:1014E000910538F421912093F10061507109019622
-:1014F000F3CF21E0089709F020E08091E8008E7793
-:101500008093E800CECF2111CFCF0AC08091E801AF
-:10151000882361F0853061F08091E80083FD0AC086
-:101520008091E80082FFF2CF80E0089582E0089584
-:1015300083E0089581E008952091EF013091F0015A
-:101540002617370748F06115710539F42091E80036
-:101550002E772093E80001C0B901FC0120E061155D
-:10156000710591F18091E801882309F440C085302C
-:1015700009F43FC08091E80083FD3DC08091E80000
-:1015800082FD2FC08091E80080FFE9CF2091F30019
-:101590008091F20090E0922B6115710559F088302E
-:1015A000910540F424912093F10031966150710926
-:1015B0000196F2CF21E0089709F020E08091E80041
-:1015C0008E778093E800CBCF2111CCCF0AC08091D9
-:1015D000E801882361F0853061F08091E80083FDA7
-:1015E0000AC08091E80082FFF2CF80E0089582E097
-:1015F000089583E0089581E00895982F973068F565
-:101600009093E900981739F07091EC002091ED006B
-:101610005091F00003C0242F762F50E021FD02C02E
-:101620009F5FECCF3091EB003E7F3093EB00309129
-:10163000ED003D7F3093ED003091EB003160309351
-:10164000EB007093EC002093ED005093F00020919C
-:10165000EE0027FDE5CF80E008958F708093E900CC
-:1016600081E008958091E90187FF11C08091E80031
-:1016700082FD05C08091E8018111F8CF11C08091F1
-:10168000E8008B770BC08091E801882349F08091B6
-:10169000E80080FFF8CF8091E8008E778093E80023
-:1016A00008952091E4003091E50095E64091EC002A
-:1016B000842F817040FF23C08091E80080FD1DC011
-:1016C0008091E801882399F0853099F08091EB00B2
-:1016D00085FD11C04091E4005091E50024173507C5
-:1016E00029F3915011F09A01E1CF84E0089582E04E
-:1016F000089583E0089581E0089580E00895409181
-:10170000E80042FFDDCF08950E94F20B0E94FA0B21
-:10171000E0EEF0E0808181608083E8EDF0E08081A0
-:101720008F77808319BCA7EDB0E08C918E7F8C936E
-:1017300080818F7E80831092E70108950F931F931D
-:10174000CF93DF930E94F20B0E94FA0BC8EDD0E01A
-:1017500088818F77888388818068888388818F7D5E
-:10176000888319BC1092E8011092E4011092E601FE
-:101770001092E50100EE10E0F80180818B7F8083FC
-:1017800088818160888342E060E080E00E94FD0AF9
-:10179000E1EEF0E080818E7F8083E2EEF0E08081F8
-:1017A00081608083808188608083F80180818E7F62
-:1017B0008083888180618883DF91CF911F910F9111
-:1017C0000895E8EDF0E080818F7E8083E7EDF0E022
-:1017D00080818160808384E082BF81E08093E70123
-:1017E0000C949E0BE8EDF0E080818E7F8083109258
-:1017F000E20008951092DA001092E10008951F921D
-:101800000F920FB60F9211242F933F934F935F9334
-:101810006F937F938F939F93AF93BF93EF93FF93B8
-:101820008091E10082FF0BC08091E20082FF07C03F
-:101830008091E1008B7F8093E1000E946B0E80918C
-:10184000DA0080FF1FC08091D80080FF1BC080910C
-:10185000DA008E7F8093DA008091D90080FF0DC07E
-:1018600080E189BD82E189BD09B400FEFDCF81E040
-:101870008093E8010E94640805C019BC1092E80139
-:101880000E9472088091E10080FF19C08091E200FF
-:1018900080FF15C08091E2008E7F8093E2008091EE
-:1018A000E20080618093E2008091D80080628093A2
-:1018B000D80019BC85E08093E8010E9476088091E9
-:1018C000E10084FF30C08091E20084FF2CC080E101
-:1018D00089BD82E189BD09B400FEFDCF8091D800A9
-:1018E0008F7D8093D8008091E1008F7E8093E1000E
-:1018F0008091E2008F7E8093E2008091E20081601F
-:101900008093E2008091E401882311F084E007C015
-:101910008091E30087FD02C081E001C083E08093F5
-:10192000E8010E9478088091E10083FF29C080913E
-:10193000E20083FF25C08091E100877F8093E10072
-:1019400082E08093E8011092E4018091E1008E7FB3
-:101950008093E1008091E2008E7F8093E20080918D
-:10196000E20080618093E20042E060E080E00E945B
-:10197000FD0A8091F00088608093F0000E94750855
-:10198000FF91EF91BF91AF919F918F917F916F9157
-:101990005F914F913F912F910F900FBE0F901F902D
-:1019A00018951F920F920FB60F9211242F933F9309
-:1019B0004F935F936F937F938F939F93AF93BF9357
-:1019C000CF93DF93EF93FF93C091E900CF708091A5
-:1019D000EC00D82FD17080FDD0E81092E900809102
-:1019E000F000877F8093F00078940E94150D10928C
-:1019F000E9008091F00088608093F000CD2BCF70DB
-:101A0000C093E900FF91EF91DF91CF91BF91AF912A
-:101A10009F918F917F916F915F914F913F912F9106
-:101A20000F900FBE0F901F9018951F93CF93DF93C9
-:101A3000CDB7DEB7AA970FB6F894DEBF0FBECDBF05
-:101A4000E9EEF1E08091F100819321E0E13FF207BE
-:101A5000C9F70E9494088091E80083FF24C1809117
-:101A6000E9019091EA01492F50E04A30510508F010
-:101A70001AC1FA01EA5AFF4F0C94C922803881F04A
-:101A8000823809F010C18091ED018F708093E900D8
-:101A90008091EB0085FB882780F91092E90006C051
-:101AA0008091E5019091E601911182609091E800AA
-:101AB000977F9093E8008093F1001092F100C8C0E6
-:101AC000282F2D7F09F0EFC0882319F0823061F0B4
-:101AD000EAC08091EB01813009F0E5C0933009F054
-:101AE00080E08093E6012BC08091EB01811127C03B
-:101AF0008091ED018F7009F4D6C08093E9002091A8
-:101B0000EB0020FF1CC0933021F48091EB00806239
-:101B100014C09091EB0090619093EB0021E030E0D5
-:101B2000A90102C0440F551F8A95E2F74093EA00CD
-:101B30001092EA008091EB0088608093EB00109295
-:101B4000E9008091E800877F86C08111ACC01091C8
-:101B5000EB011F778091E3008078812B8093E30075
-:101B60008091E800877F8093E8000E94320B80918B
-:101B7000E80080FFFCCF8091E30080688093E30061
-:101B8000111102C082E001C083E08093E8018BC0A4
-:101B90008058823008F087C08091EB019091EC0171
-:101BA0008C3D53E0950779F583E08A838AE2898347
-:101BB0004FB7F894DE01139620E03EE051E2E32FA8
-:101BC000F0E050935700E49120FF03C0E295EF70DE
-:101BD0003F5FEF708E2F90E0EA3010F0C79601C0A3
-:101BE000C0968D939D932F5F243149F74FBF80910D
-:101BF000E800877F8093E8006AE270E0CE010196FA
-:101C00000E943E0A14C0AE014F5F5F4F6091ED012C
-:101C10000E948709BC01892B09F445C09091E80016
-:101C2000977F9093E80089819A810E949C0A809115
-:101C3000E8008B778093E80036C08038A1F580916A
-:101C4000E800877F8093E8008091E4018093F100B1
-:101C50008091E8008E778093E8000E94320B23C0C9
-:101C6000811121C08091EB019091EC01992702979D
-:101C7000D4F48091E800877F8093E8008091EB01A5
-:101C80008093E4010E94320B8091E401811106C02F
-:101C90008091E30087FD02C081E001C084E0809371
-:101CA000E8010E9480088091E80083FF0AC08091CB
-:101CB000E800877F8093E8008091EB00806280934A
-:101CC000EB00AA960FB6F894DEBF0FBECDBFDF9132
-:101CD000CF911F9108950895CF938091E8018823B3
-:101CE000A1F0C091E900CF709091EC00892F817034
-:101CF00090FD80E8C82B1092E9008091E80083FDF8
-:101D00000E94150DCF70C093E900CF910895909374
-:101D10006D0180936C010895E0916C01F0916D016B
-:101D2000309721F00190F081E02D099480E0089532
-:101D3000E0916C01F0916D01309721F00280F38108
-:101D4000E02D09940895E0916C01F0916D013097B8
-:101D500021F00480F581E02D0994089520916A0115
-:101D600030916B012817390771F090936B018093C4
-:101D70006A01E0916C01F0916D01309721F00680CD
-:101D8000F781E02D0994089520916801309169014F
-:101D90002817390771F09093690180936801E091E9
-:101DA0006C01F0916D01309721F00084F185E02DF8
-:101DB0000994089508950C94DA0E0E94981A0E94CE
-:101DC0004A040C945E1BCF92DF92EF92FF920F9326
-:101DD0001F93CF93DF93CDB7DEB72B970FB6F89451
-:101DE000DEBF0FBECDBF0E9462048FE6C82E81E029
-:101DF000D82E00E010E0E02E802F0E945805F6015A
-:101E000041916F01F82EF426B1F40F5F1F4F0E3091
-:101E1000110589F78FEF89838A831B820E94A11A9B
-:101E20008160782F9D838C8349815A816B818D815C
-:101E30000E94860F40C09091D00191FF04C08B8713
-:101E40000E945E058B8520E030E04F2D50E0922F00
-:101E5000BA01022E02C0759567950A94E2F760FFF9
-:101E600024C02E83EF8221E030E0690102C0CC0C57
-:101E7000DD1C9A95E2F790E08C219D21892B09F4D5
-:101E800020E028870E94A11A8160782F9A8789878D
-:101E90004E815F8168858A850E94860FF801E1592D
-:101EA000FE4F8081C826C08206C02F5F3F4F26307C
-:101EB000310569F6AACF0E94451E0E948C0E9091B2
-:101EC0006E018917A1F00E948C0E80936E012B96F3
-:101ED0000FB6F894DEBF0FBECDBFDF91CF911F913B
-:101EE0000F91FF90EF90DF90CF900C9482072B968C
-:101EF0000FB6F894DEBF0FBECDBFDF91CF911F911B
-:101F00000F91FF90EF90DF90CF900895CF93DF93E4
-:101F1000CDB7DEB72B970FB6F894DEBF0FBECDBF9F
-:101F20004F83588769877A878B87DE01119686E011
-:101F3000FD0111928A95E9F785E0FE01379601903F
-:101F40000D928A95E1F749815A816B817C818D815F
-:101F50009E810E9489162B960FB6F894DEBF0FBEA5
-:101F6000CDBFDF91CF910895CF93C82F882309F477
-:101F7000C1C0823859F40E948C0E81FDBBC089E338
-:101F80000E9426190E94DE1989E30CC0833879F477
-:101F90000E948C0E80FDAEC083E50E9426190E942F
-:101FA000DE1983E50E946519CF910C94DE198438FF
-:101FB00059F40E948C0E82FD9DC087E40E94261970
-:101FC0000E94DE1987E4EECF8CEF8C0F813A48F443
-:101FD0008C2F0E94852081118DC08C2F0E94261984
-:101FE000E3CF80E28C0F883048F4C77081E001C0F5
-:101FF000880FCA95EAF70E94A719D6CF8BE58C0FF8
-:10200000833078F4C53A29F0C63A31F083E890E09D
-:1020100005C081E890E002C082E890E0CF910C9486
-:10202000AE0E88E58C0F833108F064C0C83A39F1F0
-:10203000C93A41F1CA3A49F1CB3A51F1CC3A59F196
-:10204000CD3A61F1C03B69F1CE3A71F1CF3A79F105
-:10205000C13B81F1C23B89F1C33B91F1C43B99F192
-:10206000C53BA1F1C63BA9F1C73BB1F1C83BB9F1F2
-:10207000C93BC1F1CA3BC9F180E090E038C082EEB3
-:1020800090E035C089EE90E032C08AEE90E02FC03B
-:1020900085EB90E02CC086EB90E029C087EB90E0C8
-:1020A00026C08CEC90E023C08DEC90E020C083E84B
-:1020B00091E01DC08AE891E01AC082E991E017C062
-:1020C00084E991E014C081E292E011C083E292E0E1
-:1020D0000EC084E292E00BC085E292E008C086E286
-:1020E00092E005C087E292E002C08AE292E0CF91DE
-:1020F0000C94C40ECF910895882309F44BC0823804
-:1021000059F40E948C0E81FF45C089E30E94261974
-:102110000E94DE1989E30CC0833871F40E948C0E92
-:1021200080FF38C083E50E9426190E94DE1983E5EE
-:102130000E9465190C94DE19843859F40E948C0EA3
-:1021400082FF28C087E40E9426190E94DE1987E4D6
-:10215000EFCF9CEF980F913A58F390E2980F983098
-:1021600050F4877091E001C0990F8A95EAF7892FA2
-:102170000E94AD19DFCF9BE5980F933020F480E0EB
-:1021800090E00C94AE0E885A833120F480E090E009
-:102190000C94C40E0895882321F00E94A7190C9472
-:1021A000DE190895882321F00E94AD190C94DE19E0
-:1021B0000895BF92CF92DF92EF92FF920F931F93F9
-:1021C000CF93DF9300D000D000D0CDB7DEB77C0135
-:1021D00085E0F701DE01119601900D928A95E1F7F5
-:1021E000F70183819481892B09F4DDC2908181817B
-:1021F0008F3F19F49F3F09F4D6C2F7010281258170
-:1022000022952F7099838A8389819A812E830E94D7
-:10221000E518182FB92E0E94E4180E94AB17EB2D79
-:10222000E295EF704E2F50E0FA01E05AFF4F2E81F9
-:102230000C94C9228B2D807F9B2D9F70F92E8823B3
-:1022400019F0F29480EFF822002349F0FF2009F4FE
-:1022500057C28F2D0E94B7190E94DE1951C2812FDB
-:102260000E947C10FF2009F49EC28F2D0E94BD1990
-:1022700026960FB6F894DEBF0FBECDBFDF91CF918B
-:102280001F910F91FF90EF90DF90CF90BF900C9433
-:10229000DE193B2D307F8B2D8F70303211F08295FF
-:1022A000807F112319F0113021F12CC00023B9F0E7
-:1022B000222309F490C1213009F08DC126960FB672
-:1022C000F894DEBF0FBECDBFDF91CF911F910F916C
-:1022D000FF90EF90DF90CF90BF900C94C71922230E
-:1022E00019F0213009F45FC28E830E94CA198E81D1
-:1022F00086C1002321F0223008F055C26CC12111A3
-:1023000052C27DC1002321F0222309F464C1F8C127
-:10231000222309F474C109C28B2D8695869583709A
-:1023200019F08130D1F03FC2002321F0812F9B2D85
-:10233000937002C080E090E026960FB6F894DEBF5E
-:102340000FBECDBFDF91CF911F910F91FF90EF9006
-:10235000DF90CF90BF900C94AE0E002321F0812F20
-:102360009B2D937002C080E090E026960FB6F89403
-:10237000DEBF0FBECDBFDF91CF911F910F91FF90B8
-:10238000EF90DF90CF90BF900C94C40E812F00236C
-:1023900019F00E944D1D02C00E94B51D26960FB671
-:1023A000F894DEBF0FBECDBFDF91CF911F910F918B
-:1023B000FF90EF90DF90CF90BF900C943A1E8B2D42
-:1023C000837009F075C00111EEC1812F8295869549
-:1023D0008770880F880F912F9F70C92ED12CE12C08
-:1023E000F12C082E04C0CC0CDD1CEE1CFF1C0A9442
-:1023F000D2F714FF12C00FE010E020E030E004C07C
-:10240000000F111F221F331F8A95D2F7C901B8018F
-:10241000609570958095909503C060E070E0CB0169
-:102420004B2D4695469543704230C1F060F56C29BE
-:102430007D298E299F29413051F126960FB6F894B7
-:10244000DEBF0FBECDBFDF91CF911F910F91FF90E7
-:10245000EF90DF90CF90BF900C94D2176C297D291C
-:102460008E299F2926960FB6F894DEBF0FBECDBFEA
-:10247000DF91CF911F910F91FF90EF90DF90CF9060
-:10248000BF900C94EE170E94D217C701B601269692
-:102490000FB6F894DEBF0FBECDBFDF91CF911F9175
-:1024A0000F91FF90EF90DF90CF90BF900C94B617F4
-:1024B000002319F08B2D817001C08695882309F4C3
-:1024C00072C1812F829586958770880F880F912F12
-:1024D0009F70C92ED12CE12CF12C082E04C0CC0CFD
-:1024E000DD1CEE1CFF1C0A94D2F714FF12C00FE093
-:1024F00010E020E030E004C0000F111F221F331F46
-:102500008A95D2F7C901B80160957095809590952C
-:1025100003C060E070E0CB014B2D469546954370BB
-:102520004230C1F060F56C297D298E299F29413008
-:1025300051F126960FB6F894DEBF0FBECDBFDF91E6
-:10254000CF911F910F91FF90EF90DF90CF90BF90B0
-:102550000C94AC186C297D298E299F2926960FB6DC
-:10256000F894DEBF0FBECDBFDF91CF911F910F91C9
-:10257000FF90EF90DF90CF90BF900C94C8180E940E
-:10258000AC18C701B60126960FB6F894DEBF0FBE91
-:10259000CDBFDF91CF911F910F91FF90EF90DF9012
-:1025A000CF90BF900C949018103FD1F118F4103ECA
-:1025B00050F4A1C0123F09F463C008F44CC0133FAB
-:1025C00009F473C098C01F708B2D8F710023A1F088
-:1025D0000E942918812F26960FB6F894DEBF0FBEF1
-:1025E000CDBFDF91CF911F910F91FF90EF90DF90C2
-:1025F000CF90BF900C94CB100E944A18812F269642
-:102600000FB6F894DEBF0FBECDBFDF91CF911F9103
-:102610000F91FF90EF90DF90CF90BF900C94D2106D
-:102620000023A9F02111BFC08B2D8F7126960FB604
-:10263000F894DEBF0FBECDBFDF91CF911F910F91F8
-:10264000FF90EF90DF90CF90BF900C946F182230E6
-:1026500008F0A9C0E9CF0023A9F08B2D8F71269631
-:102660000FB6F894DEBF0FBECDBFDF91CF911F91A3
-:102670000F91FF90EF90DF90CF90BF900C942918AE
-:10268000002359F38B2D8F7126960FB6F894DEBF79
-:102690000FBECDBFDF91CF911F910F91FF90EF90B3
-:1026A000DF90CF90BF900C944A18002399F08B2DA7
-:1026B0008F7126960FB6F894DEBF0FBECDBFDF91A7
-:1026C000CF911F910F91FF90EF90DF90CF90BF902F
-:1026D0000C94141826960FB6F894DEBF0FBECDBF2B
-:1026E000DF91CF911F910F91FF90EF90DF90CF90EE
-:1026F000BF900C940A180023A9F0222309F4ADCF4F
-:10270000812F26960FB6F894DEBF0FBECDBFDF91A6
-:10271000CF911F910F91FF90EF90DF90CF90BF90DE
-:102720000C94B40F222309F4ADCF812F26960FB657
-:10273000F894DEBF0FBECDBFDF91CF911F910F91F7
-:10274000FF90EF90DF90CF90BF900C947C104B2DBA
-:102750004F70612FC7010E94AC0226960FB6F89405
-:10276000DEBF0FBECDBFDF91CF911F910F91FF90C4
-:10277000EF90DF90CF90BF900C942E174B2D4F70A1
-:10278000612FC70126960FB6F894DEBF0FBECDBFEE
-:10279000DF91CF911F910F91FF90EF90DF90CF903D
-:1027A000BF900C941F0626960FB6F894DEBF0FBE9E
-:1027B000CDBFDF91CF911F910F91FF90EF90DF90F0
-:1027C000CF90BF9008950E94C4190E9499190E9449
-:1027D000DE190E94EA1E0E943A1E80E090E00E94EC
-:1027E000AE0E80E090E00C94C40E0E94B4190C94DC
-:1027F000E3130E94E518292F22952F702C3030F416
-:102800002A3048F42250223078F405C02C3041F0B0
-:102810002F3031F009C0803E48F0803F29F406C0D7
-:1028200093FB882780F9089580E0089581E008955A
-:10283000CF93DF9300D000D01F92CDB7DEB70F90BB
-:102840000F900F900F900F90DF91CF910895CF933D
-:10285000DF9300D000D000D0CDB7DEB726960FB6FC
-:10286000F894DEBF0FBECDBFDF91CF9108951F93C7
-:10287000CF93DF93C0917D0116E080917E01C81750
-:1028800099F0D0E01C9FF0011D9FF00D1124E1583C
-:10289000FE4F4081518162817381848195810E94C4
-:1028A00027142196C770E9CFDF91CF911F9108952A
-:1028B0004091AF015091B0016091B1017091B201AE
-:1028C0008091B3019091B4010C9427148091B401CC
-:1028D00082958F7009F054C08091B101882309F46A
-:1028E0004FC080917D01A0917E014091B201509135
-:1028F000B3016091AF017091B001B6E08A1709F49D
-:102900003FC090E041155105C1F17F3F11F46F3F89
-:10291000A1F1B89FF001B99FF00D1124E158FE4FCD
-:10292000218127132AC02081261327C0228121114B
-:1029300024C0238134812417350710F42150310934
-:10294000241B350B283C3105C0F42091B4012F70B5
-:1029500020612093B40126E0289FF001299FF00D0B
-:102960001124EC57FE4F80818F70806180838FEA45
-:1029700091E00E94D9100C94371401968770BECF55
-:102980000895CF92DF92EF92FF920F931F93CF9310
-:10299000DF93CDB7DEB762970FB6F894DEBF0FBEF8
-:1029A000CDBF8C0185E0F801DE011D9601900D92EE
-:1029B0008A95E1F7D8014C9111965C911197129686
-:1029C0006C918091B2019091B301009709F475C1A7
-:1029D0003091AF017091B0017F3F19F43F3F09F48E
-:1029E0006CC1F801C380D480E090B101EE2009F4FD
-:1029F000BEC02091B401C816D90628F0D601A81B84
-:102A0000B90BCD0104C0809590958C0D9D1DFF24C0
-:102A1000F394883C910578F0F12C207F09F0C4C034
-:102A20007C2DD98AC88A89890E9418148FEA91E07E
-:102A30000E94D910AFC0822F807F09F045C0571384
-:102A400013C0431311C061110FC02F702061209378
-:102A5000B4010E9458148FEA91E00E94D91080912D
-:102A6000B401F80185832EC0CD2819F15F3F11F420
-:102A70004F3FF9F0F62E61111CC080917D0120912D
-:102A80007E0136E0821709F45BC090E0389FF001C8
-:102A9000399FF00D1124E158FE4F7181571306C084
-:102AA0007081471303C07281711103C00196877052
-:102AB000E9CFF62E662309F41CC18091B401816030
-:102AC0008093B401F12C15C1571309C0431307C0FB
-:102AD000611105C08091B401F8018583C8C04D879C
-:102AE0005E878D859E856A8B0E94F9136A8988238B
-:102AF000D1F16623C1F12091B401822F82958F70AC
-:102B000090E0029774F08091AF019091B0019887A6
-:102B10008F831986DB86CA862C87CE0107960E9492
-:102B2000D91086E0F801AFEAB1E001900D928A95E4
-:102B3000E1F70E9466140E945814FF24F394D9C050
-:102B40004D875E878D859E850E94E518292F2295E9
-:102B50002F70223008F0C1C09F7009F0BBC0805EAA
-:102B6000883008F4C6C0C8010E94D910E6CFC81644
-:102B7000D90608F453C0F601E81BF90BCF01883CD5
-:102B8000910508F450C0F12C7C2DD98AC88A898916
-:102B90000E941814EFEAF1E086E0DF011D928A95A9
-:102BA000E9F70E945814A5C0571314C0431312C06C
-:102BB000611110C08091B401F8018583C8010E94A1
-:102BC000D91086E0EFEAF1E0DF011D928A95E9F77E
-:102BD000FE2C8FC04D875E878D859E856A8B0E94F7
-:102BE000F9136A89882309F4BECF662309F4BBCFA1
-:102BF0002091B401822F82958F7090E002970CF49F
-:102C000090CF8091AF019091B0019A8389831B820C
-:102C1000DD82CC822E83CE01019681CF8095909566
-:102C20008C0D9D1DACCFF62E662309F49CCF571357
-:102C300033C0431331C02091B40120FD24C0822F42
-:102C400082958F70482F50E041155105E1F0D80171
-:102C500015962C9315974F30510549F08F5F982F9B
-:102C60009295907F822F8F70892B15968C93C80137
-:102C70000E94D91086E0F801AFEAB1E001900D9210
-:102C80008A95E1F78ECF86E0F801AFEAB1E00190D6
-:102C90000D928A95E1F72DC04D875E878D859E85C3
-:102CA0000E94F91381113DCF8091B401816080931E
-:102CB000B401C8010E94D9101CC0662309F453CF87
-:102CC0004D875E878D859E850E94F913882309F4C0
-:102CD0004ACF27CF811143CF0CC0243008F043CF17
-:102CE0009F7009F43CCFD80115969C91907F09F014
-:102CF00036CF8F2D62960FB6F894DEBF0FBECDBFD4
-:102D0000DF91CF911F910F91FF90EF90DF90CF90C7
-:102D100008951F93CF93DF93CDB7DEB72C970FB6EF
-:102D2000F894DEBF0FBECDBF4F83588769877A877F
-:102D30008B879C87CE0107960E94C114882371F06F
-:102D40008A859B85892B09F441C088858F3F09F0CE
-:102D500065C08F818F3F09F061C038C086E0FE01F9
-:102D60003796DE01119601900D928A95E1F76A85FA
-:102D70007B856115710551F1FF81E885EF3F11F405
-:102D8000FF3F21F120917E0130E0C901019687705B
-:102D9000992740917D0150E08417950709F447C0B9
-:102DA000F983EA837D836C8396E0929FD001939FA1
-:102DB000B00D1124A158BE4FFE01319601900D9225
-:102DC0009A95E1F780937E010E94371416E0809176
-:102DD0007D0190917E018917B9F1189FC0011124DE
-:102DE00081589E4F0E94C114882371F1E0917D01AA
-:102DF0001E9FF0011124E158FE4F408151816281F4
-:102E00007381848195810E94271480917D0190E0D7
-:102E100001968770992780937D01D9CF4F8158857E
-:102E200069857A858B859C850E942714CFCF0E9467
-:102E3000F51310927E0110927D01EFEAF1E086E039
-:102E4000DF011D928A95E9F72C960FB6F894DEBF44
-:102E50000FBECDBFDF91CF911F910895EF92FF92EA
-:102E60000F931F93CF93DF938C01892B09F46CC0D0
-:102E7000F12CEE24E394E8012196F8018491843743
-:102E800040F4843008F051C0813081F0823019F173
-:102E90005BC0853709F444C0A8F19CE7980F9037D0
-:102EA00008F052C08F770E947C1041C00E5F1F4F08
-:102EB000FE01849190E2980F983050F48770FE2DB7
-:102EC00001C0FF0F8A95EAF78F2F0E94B71914C02F
-:102ED0000E94B40F2DC00E5F1F4FFE01849190E23F
-:102EE000980F983060F48770FE2D01C0FF0F8A950F
-:102EF000EAF78F2F0E94BD190E94DE1919C00E94A7
-:102F00007C1016C00E5F1F4FFE01C491CC2381F0D0
-:102F10008FE99FE00197F1F700C00000C150F6CFA4
-:102F20000E5F1F4FFE01F49003C00E94B40F8E018C
-:102F30008F2D882309F49FCFEFE9FFE03197F1F758
-:102F400000C000008150F5CFDF91CF911F910F910C
-:102F5000FF90EF90089508956093B9017093BA01BE
-:102F60008093BB019093BC010C94E3130F931F93C8
-:102F70000091B9011091BA012091BB013091BC01BF
-:102F8000DC01CB01802B912BA22BB32B8093B901B9
-:102F90009093BA01A093BB01B093BC011F910F9114
-:102FA0000C94E3130F931F930091B9011091BA0190
-:102FB0002091BB013091BC01DC01CB018023912326
-:102FC000A223B3238093B9019093BA01A093BB01CC
-:102FD000B093BC011F910F910C94E3130F931F93B7
-:102FE0000091B9011091BA012091BB013091BC014F
-:102FF000DC01CB0180279127A227B3278093B90159
-:103000009093BA01A093BB01B093BC011F910F91A3
-:103010000C94E3131092B5011092B6011092B7010F
-:103020001092B8010C94E31341E050E060E070E0CE
-:1030300004C0440F551F661F771F8A95D2F740932F
-:10304000B5015093B6016093B7017093B8010C9429
-:10305000E31341E050E060E070E004C0440F551F0E
-:10306000661F771F8A95D2F78091B5019091B601BE
-:10307000A091B701B091B801482B592B6A2B7B2B3B
-:103080004093B5015093B6016093B7017093B801B6
-:103090000C94E31341E050E060E070E004C0440FA2
-:1030A000551F661F771F8A95D2F7409550956095FA
-:1030B00070958091B5019091B601A091B701B09142
-:1030C000B801482359236A237B234093B5015093C9
-:1030D000B6016093B7017093B8010C94E31341E01B
-:1030E00050E060E070E004C0440F551F661F771F7A
-:1030F0008A95D2F78091B5019091B601A091B70160
-:10310000B091B801482759276A277B274093B5011A
-:103110005093B6016093B7017093B8010C94E31318
-:103120000F931F930091B5011091B6012091B70143
-:103130003091B801DC01CB01802B912BA22BB32B5A
-:103140008093B5019093B601A093B701B093B801F5
-:103150001F910F910C94E3130F931F930091B501EE
-:103160001091B6012091B7013091B801DC01CB017B
-:1031700080239123A223B3238093B5019093B601BA
-:10318000A093B701B093B8011F910F910C94E31372
-:103190000F931F930091B5011091B6012091B701D3
-:1031A0003091B801DC01CB0180279127A227B327FA
-:1031B0008093B5019093B601A093B701B093B80185
-:1031C0001F910F910C94E3130895CF92DF92EF9229
-:1031D000FF920F931F93CF93DF938C01C090B501A3
-:1031E000D090B601E090B701F090B8018091B9019C
-:1031F0009091BA01A091BB01B091BC01C82AD92A13
-:10320000EA2AFB2ACFE1D0E0D701C6010C2E04C088
-:10321000B695A795979587950A94D2F780FF07C032
-:10322000B8018C2F0E9443068130910531F421971B
-:1032300058F7B80180E00E944306DF91CF911F91BB
-:103240000F91FF90EF90DF90CF90089590910C0137
-:103250009923F1F090910D019923D1F0982F969533
-:10326000969596959F3080F5E0910E01F0910F01B3
-:10327000E90FF11D877021E030E0A90102C0440F81
-:10328000551F8A95E2F7CA019181892B81830895A0
-:1032900020910E0130910F01F90132969FEF40E02D
-:1032A0005191851789F09F3F19F4511101C0942F56
-:1032B0004F5F4E30A9F79F3F39F0F901E90FF11D3B
-:1032C00097FDFA9582830895089590910C019923B2
-:1032D000F9F090910D019923D9F0982F9695969534
-:1032E00096959F3028F5E0910E01F0910F01E90FBE
-:1032F000F11D877021E030E0A90102C0440F551F85
-:103300008A95E2F7CA018095918189238183089586
-:1033100020910E0130910F01F9013296205F3F4F4D
-:103320009081891301C010823196E217F307C1F72B
-:10333000089581E090E0E0910E01F0910F01E80F17
-:10334000F91F1082019680319105A9F70895909197
-:10335000CF01892B8093CF01089580959091CF0163
-:1033600089238093CF0108951092CF010895909101
-:10337000CE01892B8093CE01089580959091CE0146
-:1033800089238093CE0108951092CE0108958093F1
-:10339000BD0108951092BD01089580910E01909194
-:1033A0000F01FC0131969C01205F3F4F80E091911D
-:1033B00091118F5FE217F307D1F70895E0910E01A5
-:1033C000F0910F018091CF018083E0910E01F09187
-:1033D0000F0190818091CE01892B80838091BD0166
-:1033E000882361F0E0910E01F0910F019081892B0B
-:1033F00080830E94CD1981111092BD0180910E0130
-:1034000090910F010C94980ECF92DF92EF92FF9261
-:103410006C01EE24FF24C114D104E104F10421F075
-:10342000C701B60120E101C020E0C72ED82EE92E49
-:10343000FF24C114D104E104F10419F0285FC7018D
-:10344000B6016B017C0154E0F694E794D794C794DD
-:103450005A95D1F7C114D104E104F10419F02C5F9D
-:10346000C701B6016B017C0142E0F694E794D79462
-:10347000C7944A95D1F7C114D104E104F10419F0BD
-:103480002E5FC701B601DC01CB01B695A7959795D4
-:103490008795892B8A2B8B2B09F02F5F822FFF902A
-:1034A000EF90DF90CF9008958091E801843011F182
-:1034B00020E488E190E00FB6F894A895809360002E
-:1034C0000FBE2093600083B7817F846083BF83B782
-:1034D000816083BF7894889583B78E7F83BF0FB652
-:1034E000F894A895809160008861809360001092A4
-:1034F00060000FBE089508950C947B1ACF930E942C
-:103500007C1A0E9462040E947B1AC0E08C2F0E94E9
-:103510005805811104C0CF5FCE30C1F701C081E0F2
-:10352000CF9108950E94F5130E948C0E0C9482078F
-:1035300082E084BD93E095BD9AEF97BD80936E00C5
-:1035400008952FB7F8948091D1019091D201A09164
-:10355000D301B091D4012FBF0895CF92DF92EF92A3
-:10356000FF920F931F932FB7F8944091D101509180
-:10357000D2016091D3017091D4012FBF6A017B0108
-:10358000EE24FF248C0120E030E0C016D106E206D4
-:10359000F30610F4415051099A01281B390BC90157
-:1035A0001F910F91FF90EF90DF90CF9008951F92A1
-:1035B0000F920FB60F9211248F939F93AF93BF93E7
-:1035C0008091D1019091D201A091D301B091D40109
-:1035D0000196A11DB11D8093D1019093D201A093BA
-:1035E000D301B093D401BF91AF919F918F910F9070
-:1035F0000FBE0F901F9018950E94840BF8942FEF28
-:1036000087EA91E6215080409040E1F700C0000039
-:1036100087E090EBDC018093F1019093F201A0939D
-:10362000F301B093F4019CE088E10FB6F894A895FB
-:10363000809360000FBE90936000FFCFEF92FF92E7
-:103640000F931F93CF93DF93D82FC0E08C2F0E944E
-:10365000580500E010E0E82EF12CC701002E02C052
-:10366000959587950A94E2F780FD06C00F5F1F4F7E
-:103670000630110591F709C0602F7C2F80E00E9471
-:1036800020068D13F3CF81E004C0CF5FCE30F1F67A
-:1036900080E0DF91CF911F910F91FF90EF900895FF
-:1036A000CF93C82F8CE20E941E1B882321F08C2F01
-:1036B000CF910C941E1B80E0CF910895CF930E9470
-:1036C000A51C811102C00E948B1CC5E6C15049F0A7
-:1036D0000E9462048FE39CE90197F1F700C00000AB
-:1036E000F5CF89E20E94501B811113C18AE20E942A
-:1036F000501B81110E948B1C85E00E94501B811180
-:103700000E94FC1A0E94B01C8093D00187E00E94A6
-:10371000501B8823A9F18BE10E94501B882351F094
-:103720008091D00181FB222720F991E0922790FB24
-:1037300081F90EC08EE00E94501B882361F08091B9
-:10374000D00182FB222720F991E0922790FB82F999
-:103750008093D00115C080E10E94501B9091D00150
-:10376000882341F093FB222720F981E0822780FB08
-:1037700093F904C0892F809580FB90F99093D00134
-:103780008091D0010E94B41C0E94C21C8093E2016F
-:1037900080EE0E94501B882341F08091E201982F17
-:1037A000909590FB80F98093E20189E30E94501B81
-:1037B000882359F08091E20181FB222720F991E0D2
-:1037C000922790FB81F98093E20182EE0E94501BC8
-:1037D000882359F08091E20182FB222720F991E0B1
-:1037E000922790FB82F98093E20186EE0E94501BA3
-:1037F000882359F08091E20183FB222720F991E090
-:10380000922790FB83F98093E20183EE0E94501B84
-:10381000882359F08091E20184FB222720F991E06E
-:10382000922790FB84F98093E20185E30E94501B6C
-:10383000882359F08091E20185FB222720F991E04D
-:10384000922790FB85F98093E20181E30E94501B4F
-:10385000882359F08091E20186FB222720F991E02C
-:10386000922790FB86F98093E20181E10E94501B30
-:10387000882359F08091E20187FB222720F991E00B
-:10388000922790FB87F98093E2018091E2010E94E8
-:10389000C61C8091E20187FB882780F980930D0187
-:1038A00087E20E94501BC82F8EE10E94501B81119D
-:1038B000C2608FE10E94501B8111C46080E20E94AF
-:1038C000501B8111C86081E20E94501B8111C061B0
-:1038D00082E20E94501B8111C06283E20E94501B51
-:1038E0008111C06484E20E94501B882311F0C068DB
-:1038F00002C0CC2329F08C2F0E94BD1C6C2F03C06A
-:103900000E94B91C682F70E080E090E0CF910C9489
-:10391000AC17CF9108956DEE7EEF80E090E00E94AD
-:10392000FF2260E082E090E00E94F12260E083E00C
-:1039300090E00E94F12260E084E090E00E94F12299
-:1039400060E085E090E00C94F12280E090E00E943D
-:10395000EB2221E08D3E9E4F09F020E0822F08955A
-:1039600082E090E00C94E322682F82E090E00C94D7
-:10397000F12283E090E00C94E322682F83E090E052
-:103980000C94F12284E090E00C94E322682F84E010
-:1039900090E00C94F1228091D70180FF0BC06091E0
-:1039A000130185E0689FB0011124759567957595A1
-:1039B00067952BC081FF09C06091130185E0689F66
-:1039C000B00111247595679520C082FF07C06091F2
-:1039D000130185E0689FB001112417C09091D801B0
-:1039E0009923D1F060911201961788F72091130165
-:1039F00085E0289F90011124929FA001939F500D74
-:103A0000112470E0CA010E94B5226038710540F4AB
-:103A10006115710519F406C065E070E0862F089500
-:103A20008FE7089581E008958091D70180FF08C055
-:103A30006091110170E0759567957595679521C046
-:103A400081FF06C06091110170E07595679519C0FE
-:103A500082FF04C06091110170E010C09091D80104
-:103A6000992399F0609110019617A0F780911101A8
-:103A7000899FC001112470E00E94B5226038710551
-:103A800040F46115710519F406C061E070E0862FFD
-:103A900008958FE7089581E00895803F21F40E9402
-:103AA000CB1C819504C0813F29F40E94CB1C8093DC
-:103AB000DB010895823F21F40E94CB1C819504C054
-:103AC000833F29F40E94CB1C8093DA010895893F3B
-:103AD00019F40E94141D05C08A3F31F40E94141D80
-:103AE00081958093DC0108958B3F21F40E94141D81
-:103AF000819504C08C3F29F40E94141D8093DD0140
-:103B00000895843F21F48091D901816017C0853FD9
-:103B100021F48091D901826011C0863F21F4809107
-:103B2000D90184600BC0873F21F48091D90188605E
-:103B300005C0883F31F48091D90180618093D9011B
-:103B400008958D3F21F48091D70181600BC08E3F95
-:103B500021F48091D701826005C08F3F29F48091C4
-:103B6000D70184608093D7010895803F39F4809114
-:103B7000DB0187FF6CC01092DB0169C0813F29F433
-:103B80008091DB011816BCF362C09091DA01823F8C
-:103B900029F497FF5CC01092DA0159C0833F19F4F1
-:103BA0001916CCF354C0893F41F48091DC011816FA
-:103BB0000CF04DC01092DC014AC08A3F29F480917C
-:103BC000DC0187FF44C0F6CF8B3F39F48091DD01E3
-:103BD00087FF3DC01092DD013AC08C3F29F48091EF
-:103BE000DD011816BCF333C0843F21F48091D90164
-:103BF0008E7F17C0853F21F48091D9018D7F11C040
-:103C0000863F21F48091D9018B7F0BC0873F21F43F
-:103C10008091D901877F05C0883F31F48091D90117
-:103C20008F7E8093D90113C08D3F21F48091D701FD
-:103C30008E7F0BC08E3F21F48091D7018D7F05C010
-:103C40008F3F29F48091D7018B7F8093D70180919A
-:103C5000DA0181110EC08091DB0181110AC08091CF
-:103C6000DC01811106C08091DD01811102C010923A
-:103C7000D801089589ED91E00E94A30E0E94A11A37
-:103C80009093D6018093D50108951F93CF93DF932E
-:103C90008091D5019091D6010E94AD1AAC0190910E
-:103CA000D801992321F02091140130E006C0209121
-:103CB00015018AE0289F900111244217530708F448
-:103CC00085C08091DA01C091DB01D091DC011091B7
-:103CD000DD01811107C0C11175C0D11173C011116F
-:103CE00071C074C09F3F19F09F5F9093D801181660
-:103CF00024F40E94CB1C8093DA018091DA0187FFC3
-:103D000005C00E94CB1C81958093DA011C1624F417
-:103D10000E94CB1C8093DB018091DB0187FF05C0F3
-:103D20000E94CB1C81958093DB016091DA016623B0
-:103D300031F1C091DB01CC2311F1062E000C770B81
-:103D4000880B990B0E94BC2123E333E343E35FE339
-:103D50000E9420220E9484216093DA016C2FCC0FF4
-:103D6000770B880B990B0E94BC2123E333E343E3D9
-:103D70005FE30E9420220E9484216093DB011D16D4
-:103D800024F40E94141D8093DC018091DC0187FFE4
-:103D900005C00E94141D81958093DC01111624F446
-:103DA0000E94141D8093DD018091DD0187FF05C015
-:103DB0000E94141D81958093DD01DF91CF911F91A9
-:103DC0000C943A1E9F3F09F08FCFA0CFDF91CF9187
-:103DD0001F910895E9EDF1E085E0DF011D928A95DC
-:103DE000E9F71092D8011092D7010895833081F13C
-:103DF00028F4813059F08230D1F00895853009F4EB
-:103E000049C0B8F1863009F456C008958091150173
-:103E1000262F30E0280F311D2F3F310524F4680F85
-:103E20006093150108958FEF809315010895809197
-:103E30001401262F30E0280F311D2F3F310524F4C7
-:103E4000680F6093140108958FEF80931401089513
-:103E500080911301262F30E0280F311D2F3F3105AF
-:103E600024F4680F6093130108958FEF809313017A
-:103E7000089580911201262F30E0280F311D2F3F29
-:103E8000310524F4680F6093120108958FEF809339
-:103E90001201089580911101262F30E0280F311D65
-:103EA0002F3F310524F4680F6093110108958FEFBF
-:103EB00080931101089580911001262F30E0280F82
-:103EC000311D2F3F310524F4680F609310010895D0
-:103ED0008FEF809310010895833011F128F4813021
-:103EE00049F0823091F00895853081F120F18630DB
-:103EF000C1F1089580911501681720F4861B809305
-:103F00001501089510921501089580911401681704
-:103F100020F4861B809314010895109214010895D3
-:103F200080911301681720F4861B80931301089574
-:103F300010921301089580911201681720F4861BD6
-:103F40008093120108951092120108958091110139
-:103F5000681720F4861B80931101089510921101B7
-:103F6000089580911001681720F4861B809310013A
-:103F700008951092100108950F931F938D3109F445
-:103F80006BC008F03FC08E3009F47DC0C0F48730AC
-:103F900009F46EC068F4863009F0AFC08091D0019A
-:103FA000817F8E7F8093D00181E08093DF01A6C066
-:103FB000883009F458C08B3009F49BC09EC086310C
-:103FC00009F497C078F4803109F470C0813109F0A8
-:103FD00094C00E94F51390910D0181E08927809390
-:103FE0000D0187C0893109F484C08B3109F085C087
-:103FF0008091D00181FB222720F991E0922790FB4C
-:1040000081F94AC0853309F45BC048F4873209F46A
-:1040100057C008F45AC0893209F452C06EC08334C4
-:1040200038F48A3308F067C0883309F462C065C089
-:10403000833409F445C0883409F05FC00E94F51349
-:104040000FEF13ED20E3015010402040E1F700C0D6
-:1040500000000E94FC1A4DC00E943E210E948C0E5E
-:104060000E94820746C00E94B01C0E94C21C41C030
-:104070009091D001892F817090FF12C0917F9E7F17
-:104080009093D0013BC08091D00182FB222720F980
-:1040900091E0922790FB82F98093D001992349F116
-:1040A0008091D00181608093D00123C08091D001A4
-:1040B00083FB222720F991E0922790FB83F9ECCF34
-:1040C00061E070E080E090E010C08D5141E050E090
-:1040D00060E070E08A019B0104C0000F111F221FE5
-:1040E000331F8A95D2F7C901B8010E94AC170E940C
-:1040F000F51381E003C08953E9CF80E01F910F9150
-:10410000089580E008950C948120CF93C82F80916A
-:10411000DF01813079F018F08230E9F187C0E09159
-:104120000E01F0910F018081813169F0823209F036
-:104130007FC009C0E0910E01F0910F0180818131B3
-:1041400011F0823261F48C2F0E948320811104C00F
-:104150008C2F0E94BC1F1DC081E090E01AC08C2FE4
-:104160000E948120811114C0C43179F048F4CB3011
-:1041700079F0C03109F060C082E08093DF0108C0AF
-:10418000C93219F0C83321F057C01092DF0154C072
-:1041900081E0817053C0C93289F118F5C43171F1E1
-:1041A000A8F4C73009F046C08AE08093150194E175
-:1041B0009093140193E0909313018093120188E08F
-:1041C0008093110188E28093100134C0CE51C63033
-:1041D00088F5EC2FF0E0E65DFE4F80818093DE01F4
-:1041E00029C0CE34E9F020F4CB3421F56AE013C0C5
-:1041F000C13579F0C235F1F461E00DC08091DE0186
-:10420000882319F01092DE0115C081E08093DF0150
-:1042100015C061E006C08091DE010E94F61E0AC052
-:104220006AE08091DE010E946C1F04C01092DF01E1
-:1042300080E004C081E002C080E0ABCFCF91089560
-:10424000E1E8F0E080818860808380818160808304
-:104250008FB7F89493E09093890090ED9093880045
-:104260008FBF0895EFE6F0E080818260808308953B
-:10427000EFE6F0E080818D7F80830895EFE6F0E047
-:10428000908182E08927808308951F920F920FB654
-:104290000F9211242F933F934F935F936F937F93CC
-:1042A0008F939F93AF93BF93EF93FF938091E00120
-:1042B0009091E10101969093E1018093E0018111D9
-:1042C00003C082E00E948207E091E101E695E69555
-:1042D000F0E0EA57FB4FE4918091E0018E1303C0B8
-:1042E00080E00E948207FF91EF91BF91AF919F9173
-:1042F0008F917F916F915F914F913F912F910F908F
-:104300000FBE0F901F9018950E948B216894B111D9
-:104310000C941A2208950E94FF2188F09F5798F06C
-:10432000B92F9927B751B0F0E1F0660F771F881FBA
-:10433000991F1AF0BA95C9F714C0B13091F00E94D4
-:104340001922B1E008950C941922672F782F88273D
-:10435000B85F39F0B93FCCF3869577956795B395FB
-:10436000D9F73EF490958095709561957F4F8F4F6A
-:104370009F4F0895E89409C097FB3EF4909580956F
-:10438000709561957F4F8F4F9F4F9923A9F0F92F1B
-:1043900096E9BB279395F695879577956795B79599
-:1043A000F111F8CFFAF4BB0F11F460FF1BC06F5F7F
-:1043B0007F4F8F4F9F4F16C0882311F096E911C091
-:1043C000772321F09EE8872F762F05C0662371F0B2
-:1043D00096E8862F70E060E02AF09A95660F771FC6
-:1043E000881FDAF7880F9695879597F9089557FDF6
-:1043F0009058440F551F59F05F3F71F04795880F53
-:1044000097FB991F61F09F3F79F0879508951216E9
-:1044100013061406551FF2CF4695F1DF08C0161695
-:1044200017061806991FF1CF869571056105089446
-:104430000895E894BB2766277727CB0197F908955D
-:104440000E9433220C94A4220E94962238F00E94EB
-:104450009D2220F0952311F00C948D220C94932230
-:1044600011240C941A220E94F72170F3959FC1F336
-:10447000950F50E0551F629FF001729FBB27F00D12
-:10448000B11D639FAA27F00DB11DAA1F649F662767
-:10449000B00DA11D661F829F2227B00DA11D621FB6
-:1044A000739FB00DA11D621F839FA00D611D221F70
-:1044B000749F3327A00D611D231F849F600D211D54
-:1044C000822F762F6A2F11249F5750409AF0F1F0D7
-:1044D00088234AF0EE0FFF1FBB1F661F771F881F40
-:1044E00091505040A9F79E3F510580F00C948D22C9
-:1044F0000C941A225F3FE4F3983ED4F386957795A7
-:104500006795B795F795E7959F5FC1F7FE2B880FE5
-:10451000911D9695879597F9089597F99F6780E87B
-:1045200070E060E008959FEF80EC089500240A9405
-:104530001616170618060906089500240A9412167E
-:104540001306140605060895092E0394000C11F4B1
-:10455000882352F0BB0F40F4BF2B11F460FF04C05E
-:104560006F5F7F4F8F4F9F4F089597FB072E16F475
-:10457000009407D077FD09D00E94CF2207FC05D018
-:104580003EF4909581959F4F0895709561957F4F6A
-:104590000895EE0FFF1F0590F491E02D0994AA1BDA
-:1045A000BB1B51E107C0AA1FBB1FA617B70710F01E
-:1045B000A61BB70B881F991F5A95A9F78095909550
-:1045C000BC01CD010895F999FECF92BD81BDF89A45
-:1045D000992780B50895A8E1B0E042E050E00C943E
-:1045E0000623262FF999FECF1FBA92BD81BD20BDAB
-:1045F0000FB6F894FA9AF99A0FBE019608950E94A0
-:10460000F122272F0C94F222DC01CB01FC01F99955
-:10461000FECF06C0F2BDE1BDF89A319600B40D920E
-:0C46200041505040B8F70895F894FFCFC7
-:10462C00200283071308EE07BA0786070101BE01B3
-:10463C0028080A03140A3F4D36394704FA03C40309
-:10464C008B031E03370350036903010203040506A1
-:04465C000708090042
+:100000000C9478020C94BF020C94BF020C94BF02B3
+:100010000C94BF020C94BF020C94BF020C94BF025C
+:100020000C94BF020C94BF020C94C10D0C94930E5F
+:100030000C94BF020C94BF020C94BF020C94BF023C
+:100040000C94BF020C949F220C94BF020C94BF022C
+:100050000C94BF020C94331C0C94BF020C94BF028E
+:100060000C94BF020C94BF020C94BF020C94BF020C
+:100070000C94BF020C94BF020C94BF020C94BF02FC
+:100080000C94BF020C94BF020C94BF020C94BF02EC
+:100090000C94BF020C94BF020C94BF020C94BF02DC
+:1000A0000C94BF020C94BF020C94BF02000F220FED
+:1000B0001010220F1010670F8A0F1010DF0FF20FB1
+:1000C000C112C112F012F0122613461377147714DE
+:1000D00051137714011401146814771477147114F0
+:1000E0000E140E140E140E140E140E140E140E1400
+:1000F0000E140E140E140E140E140E140E140E14F0
+:1001000020142D1434143B14451429002B00E00056
+:10011000E100357100001E00140004001D006400A1
+:10012000E3001F001A0016001B000000025220000E
+:1001300008000700060000002C002100150009003F
+:100140001900E2001151220017000A00050000000A
+:10015000460023001C0000000B00000046002300A6
+:100160000A00000005000000007524001C000B00C0
+:10017000110000000075250018000D001000E600B9
+:10018000115126000C000E0036002F002C00270015
+:1001900012000F003700300001522D001300330011
+:1001A00038000000E7002A0028002800E50034712C
+:1001B0000000010001000100010001000000010039
+:1001C0001E02200222020100010001001F02210282
+:1001D00023020100010001002F0226022F0001006E
+:1001E000010001003002270230000100125101001D
+:1001F000310235003502000001000100010000005D
+:1002000001000000010001000100000001000000E9
+:1002100001000100010001000100000001000000D8
+:100220005F005C00590062001251540060005D00E4
+:100230005A0062000100550061005E005B0063002F
+:1002400001005600570057005800580001002E00CA
+:100250003200340001000100000001000100010033
+:100260000100010000003A004A005000F400F200D2
+:1002700001003B0052005100F000F10001003C0081
+:100280004D004F00F500F30001003D0049004C0017
+:100290000100010010513E004B004E000100000023
+:1002A00001003F00010000000100000001004000CB
+:1002B00001000000010000000100410001000100F8
+:1002C00001000000010042000100B600AC00AA00DD
+:1002D0001051430049004C00AE00A800010044004A
+:1002E0000100B700AB00A9000100450001000100BA
+:1002F00001000100010001000100010001000100F6
+:10030000000016034500720067006F0044006F0094
+:100310007800200045005A000000160345007200D6
+:1003200067006F0044006F007800200045005A000D
+:1003300000000403090409026D00040100A0FA0989
+:100340000400000103010100092111010001223F05
+:10035000000705810308000A0904010001030102E6
+:1003600000092111010001224D0007058203080048
+:100370000A09040200010300000009211101000123
+:100380002236000705830308000A0904030001035D
+:100390000000000921110100012239000705840332
+:1003A0001000011201100100000008EDFE0713010A
+:1003B000000102000105010906A101050719E02954
+:1003C000E715002501950875018102050819012925
+:1003D00005950575019102950175039101050719B0
+:1003E00000297715002501957875018102C0050166
+:1003F0000980A101850216010026B7001A01002A12
+:10040000B700751095018100C0050C0901A1018597
+:1004100003160100269C021A01002A9C0275109501
+:10042000018100C005010902A1010901A10005091E
+:100430001901290515002501950575018102950110
+:10044000750381010501093009311581257F950268
+:100450007508810609381581257F95017508810683
+:10046000050C0A38021581257F950175088106C0A3
+:10047000C005010906A101050719E029E7150025B6
+:10048000019508750181029501750881010508191A
+:1004900001290595057501910295017503910105E5
+:1004A00007190029FF150025FF950675088100C072
+:1004B0000000000000000000000000010204060A25
+:1004C0000F17202C3A4A5D71879DB3C7DAE9F5FC16
+:1004D000FFFCF5E9DAC7B39D87715D4A3A2C201716
+:1004E0000F0A0604020100000000000000000000E6
+:1004F00011241FBECFEFDAE0DEBFCDBF04B603FE8E
+:1005000027C08091FF0190910002A0910102B0915B
+:1005100002028730904BA740B04BD1F41092FF01FC
+:1005200010920002109201021092020214BE84B7CF
+:10053000877F84BF0FB6F894A8958091600088618A
+:1005400080936000109260000FBEE0E0FFE3099529
+:1005500011E0A0E0B1E0EAEEF8E402C005900D92EF
+:10056000A433B107D9F721E0A4E3B1E001C01D92A3
+:10057000AF3FB207E1F70E94020B0C9473240C9476
+:10058000000061110BC0FC018281882321F085EEFF
+:100590000E94651103C085EE0E942D1280E090E05C
+:1005A00008950895EF92FF921F93CF93DF93609188
+:1005B000C1017091C2018091C3019091C4010E9458
+:1005C000621B56985E9821E030E0E82FF0E0AF0122
+:1005D0004C5C5E4F7A01A1E0B0E0122F821308C09C
+:1005E000AF01E701988161E09F3F69F460E00BC0D3
+:1005F000A901B9016C5C7E4FEB01988161E091111A
+:1006000001C060E06195960FBA016C5C7E4FEB0112
+:1006100098834C5F5F4F992321F194B1ED0102C0A3
+:10062000CC0FDD1F4A95E2F7AE019C2B94B995B132
+:10063000492B45B9EB01488150E02130310529F4BF
+:1006400050938900409388001AC0123029F45093C7
+:100650008B0040938A0013C050938D0040938C0010
+:100660000EC094B1BD0102C0660F771F4A95E2F734
+:10067000AB014095942394B995B1492345B92F5FB7
+:100680003F4F2430310509F0A8CFDF91CF911F9162
+:10069000FF90EF9008950C94D20256985E9825989A
+:1006A0002D9826982E9827982F988FEF90E090936A
+:1006B00089008093880090938B0080938A009093A8
+:1006C0008D0080938C00259A2D9A2FEF80E792E081
+:1006D000215080409040E1F700C00000269A2E9AF9
+:1006E0002FEF80E792E0215080409040E1F700C07A
+:1006F0000000279A2F9A2FEF80E792E02150804048
+:100700009040E1F700C0000025982D982FEF80E77A
+:1007100092E0215080409040E1F700C00000269810
+:100720002E982FEF80E792E0215080409040E1F733
+:1007300000C0000027982F9856985E9825982D980D
+:1007400026982E9827982F98089589EA80938000FC
+:1007500089E08093810024982C983F988AB18F7407
+:100760008AB96E98479A8BB1806B8BB9769A0E9442
+:100770004D030C94D10280E28093000180913801F6
+:1007800081110EC00E940A0481E0809338012FEF8E
+:1007900083ED90E3215080409040E1F700C00000DD
+:1007A00080E40E9410048093000181112EC00E94F9
+:1007B0003A0480930001811128C00E943A0480937A
+:1007C0000001811122C08FE30E943A04809300014E
+:1007D00081111BC00E94320480E40E9410048093A7
+:1007E0000001811112C08CE00E943A048093000144
+:1007F00081110BC00E943A0480930001811105C051
+:100800008FE30E943A04809300010E943204809199
+:10081000000108951092B9008AE08093B80008950D
+:1008200094EA9093BC009091BC0097FFFCCF90910C
+:10083000B900987F983021F0903111F081E008954F
+:100840008093BB0084E88093BC008091BC0087FF4C
+:10085000FCCF8091B900887F883111F0803471F726
+:1008600080E0089584E98093BC008091BC0084FD01
+:10087000FCCF08958093BB0084E88093BC008091F6
+:10088000BC0087FFFCCF9091B900987F81E098323F
+:1008900009F480E0089584E88093BC008091BC0056
+:1008A00087FFFCCF8091BB000895809100018111EA
+:1008B00015C080E40E9410048093000181110CC0D7
+:1008C00082E10E943A0480930001811105C08FEFFC
+:1008D0000E943A04809300010E94320484B1807F18
+:1008E00084B985B1807F85B98AB1837F8AB98BB19C
+:1008F000837F8BB93E98469808950E94BB038093EE
+:1009000000010E94550480B38C7080BB81B3836F5B
+:1009100081BBAAE3B1E0E8E4F1E08EE08E0F119232
+:100920001D928E13FCCF0C94A503BF92CF92DF9241
+:10093000EF92FF920F931F93CF93DF93809100016B
+:10094000882379F0809139018F5F8093390181117B
+:1009500008C00E94BB0380930001811102C00E9465
+:100960004D030AE311E0C0E0D0E0DD24D39482E03F
+:10097000C82EEE24E394F12CC730D10500F5809108
+:100980000001811164C080E40E9410048093000182
+:10099000811112C082E10E943A048093000181110A
+:1009A0000BC0C7010C2E01C0880F0A94EAF780958E
+:1009B0000E943A04809300010E94320448C0CA3069
+:1009C000A1F028F4C83059F0C93061F005C0CC302E
+:1009D00089F070F0CD3089F0209A289810C0219AC3
+:1009E00029980DC0229A2A980AC0239A2B9807C0EA
+:1009F000529A01C0539A5B9802C03E9A469890EA78
+:100A00009A95F1F79FB1799902C082E001C080E028
+:100A100091709D25982B7C9902C084E001C080E0F4
+:100A2000892B7D9902C038E001C030E0832B7E998C
+:100A300002C020E101C020E0822B9FB19095991F58
+:100A40009927991F9295990F907E892B0FC08091BD
+:100A50000001811149C080E40E94100480930001CC
+:100A6000882379F1B12C0E9432048B2DF8019081FA
+:100A7000981719F08083C09201010E9455042196B5
+:100A80000F5F1F4FCE30D10509F076CF8091010165
+:100A9000882361F1815080930101882339F08FE927
+:100AA0009FE00197F1F700C0000020C0A8E4B1E08A
+:100AB000EAE3F1E0CF01825F91919D938E13FCCF29
+:100AC00015C083E10E943A04809300018111CACFCE
+:100AD00081E40E941004809300018111C3CF0E9421
+:100AE0004B04B82EB094BFCF80E0C0CF0E944B0320
+:100AF00081E0DF91CF911F910F91FF90EF90DF90F8
+:100B0000CF90BF900895E82FF0E0E85BFE4F808122
+:100B1000089508950F931F93CF93DF93C8E4D1E016
+:100B200010E00C2F025F899190E00E94561B180F75
+:100B30000C13F9CF812FDF91CF911F910F91089561
+:100B400081E0089581E008950C94A20508950F9323
+:100B50001F93CF93DF938C01FC01C081D181CE0123
+:100B60000E94DB19BE010E945006EC01B8010E94F0
+:100B7000A405882309F48DC0F8018281882309F433
+:100B80004AC08091610181111FC0C431F0E5DF07C7
+:100B900009F051C00E94A60581E0809361010E9486
+:100BA000FD1B9093600180935F0110925801109299
+:100BB0005A011092590110925C0110925B0110923F
+:100BC0005E0110925D0165C080915F0190916001AE
+:100BD0000E94091C883C910570F480915801E82F0F
+:100BE000F0E0EE0FFF1FE75AFE4FD183C0838F5F07
+:100BF000809358014EC0C43880E5D80721F0C5382D
+:100C0000D04501F13AC0F8018281882341F0109269
+:100C1000560182E01EC0C438E0E5DE0759F5809138
+:100C20005601811106C086E20E94651186E20E948B
+:100C30002D1282E01CC0C438F0E5DF0741F3C5384F
+:100C4000D045D9F4F8018281882331F01092570100
+:100C500080E20E947C121DC080915701811106C064
+:100C600087E20E94651187E20E942D1280E20E94B5
+:100C700083120FC0C538D04529F381E08093560117
+:100C800080935701C801DF91CF911F910F910C9470
+:100C9000A00580E0DF91CF911F910F9108950895F5
+:100CA00096E0799FF001112494E5899FE00DF11DF4
+:100CB0001124E60FF11DEE0FFF1FE65FFE4F859139
+:100CC00094910895880F991FFC01E657F040859193
+:100CD00094910895880F991FFC01E65FFE4F85915E
+:100CE000949108950F931F93CF93DF93EC01811597
+:100CF000904350F5C11580E2D80708F0C3C0CB3B44
+:100D0000D10590F4C83AD10508F06AC0C53AD105BA
+:100D100008F05BC0C430D10508F0D0C1219709F0BC
+:100D2000CAC101E010E00AC2CF3FD10511F008F0BE
+:100D3000C5C1C03FD10508F0A2C0CE01805E9109B7
+:100D4000089708F4BBC1B7C1C13090E5D90709F4D1
+:100D5000A2C020F5C0318FE4D80770F4C11590E42B
+:100D6000D90708F094C0C11521E3D20708F0A3C148
+:100D7000DD278E01106CE2C1C115D04509F09BC181
+:100D80000E94E2148FEF94E32CE0815090402040C9
+:100D9000E1F700C000000E94581CD0C1C11597E5C2
+:100DA000D90758F4C03121E5D20708F01CC1C4317D
+:100DB00080E5D80708F475C07EC1CE019057811533
+:100DC000904108F078C1DF7073C1C53AD10509F4CC
+:100DD00077C1C63AD10509F076C102E810E4AEC188
+:100DE000C83AD10509F472C1C93AD10509F471C1F3
+:100DF000CA3AD10509F470C1CB3AD10509F46FC1E3
+:100E0000CC3AD10509F46EC1CD3AD10509F46DC1D2
+:100E1000C03BD10509F46CC1CE3AD10509F46BC1D0
+:100E2000CF3AD10509F46AC1C13BD10509F469C1C2
+:100E3000C23BD10509F468C1C33BD10509F467C1C0
+:100E4000C43BD10509F466C1C53BD10509F465C1B0
+:100E5000C63BD10509F464C1C73BD10509F463C1A0
+:100E6000C83BD10509F462C1C93BD10509F461C190
+:100E7000CA3BD10509F460C100E014E45FC18E01F2
+:100E800010655CC1CE019F700E946A0658C1DF7078
+:100E90008E01106A53C18091DE0181608093DE0172
+:100EA0004DC10E94FD1D811102C00E94E31D0E94E0
+:100EB0001A1E90E09093FF018093FE01C23080E5FE
+:100EC000D80721F48091FE01816086C0C43090E58E
+:100ED000D90721F48091FE0182607EC0C63020E5F2
+:100EE000D20721F48091FE01846076C0C83080E58D
+:100EF000D80719F48091FE0127C0CA3090E5D907C0
+:100F000021F48091FE01806167C0CC3020E5D207DA
+:100F100021F48091FE0180625FC0CE3080E5D80769
+:100F200021F48091FE01806457C0C03190E5D9075B
+:100F300021F48091FE0180684FC0C23120E5D207C4
+:100F400029F48091FE018460886046C0C33080E54A
+:100F5000D80721F48091FE018E7F3EC0C53090E518
+:100F6000D90721F48091FE018D7F36C0C73020E57E
+:100F7000D20721F48091FE018B7F2EC0C93080E51D
+:100F8000D80719F48091FE0126C0CB3090E5D9072F
+:100F900021F48091FE018F7E1FC0CD3020E5D20765
+:100FA00021F48091FE018F7D17C0CF3080E5D807F6
+:100FB00021F48091FE018F7B0FC0C13190E5D907EC
+:100FC00021F48091FE018F7707C0C331D04531F401
+:100FD0008091FE018B7F877F8093FE018091FE01CF
+:100FE0000E941E1EABC08D2F99278F7099278130CC
+:100FF0009105D9F49E012370332702C0880F991FF1
+:101000002A95E2F79C688E0144E0000F111F4A9573
+:10101000E1F700271370802B912B53E0CC0FDD1FDD
+:101020005A95E1F7C076DD272FC08230910531F463
+:10103000DC2FCC278E01016F106A80C083309105B0
+:1010400069F4CE018370992701E010E002C0000F1F
+:10105000111F8A95E2F7C8019C680FC08430910582
+:10106000B9F4CE018370992701E010E002C0000FAF
+:10107000111F8A95E2F7C8019A6823E0CC0FDD1FA3
+:101080002A95E1F7C07ED7708C010C2B1D2B56C022
+:101090008530910531F4DC2FCC278E01046F106A66
+:1010A0004DC0069709F04AC0CF71DD27DC2FCC2751
+:1010B0008E01106243C000E010E040C08E013EC0CF
+:1010C00001E810E43BC003E810E438C002EE14E489
+:1010D00035C009EE14E432C00AEE14E42FC005EB6B
+:1010E00014E42CC006EB14E429C007EB14E426C07A
+:1010F0000CEC14E423C00DEC14E420C003E815E468
+:101100001DC00AE815E41AC002E915E417C004E995
+:1011100015E414C001E216E411C003E216E40EC0A7
+:1011200004E216E40BC005E216E408C006E216E489
+:1011300005C007E216E402C00AE216E4C801DF9126
+:10114000CF911F910F91089596E0799FF00111249E
+:1011500094E5899FE00DF11D1124E60FF11DEE0FBE
+:10116000FF1FE65FFE4F85919491803E9105E0F46C
+:10117000803C910558F58133910509F46FC048F41E
+:101180008932910509F463C08A32910509F46DC072
+:1011900072C089339105E9F082389105D1F0853329
+:1011A000910509F44DC067C0833E910581F138F483
+:1011B000803E9105B9F0823E9105D9F05CC0863E33
+:1011C000910561F1873E9105A1F155C00E9462062B
+:1011D00008952091FE0120FD02C021FF4CC080EE49
+:1011E00090E049C08091FE0180FFF9CF89E390E053
+:1011F00042C08091FE0182FF0EC08091FE0184FFFB
+:1012000003C080E090E037C083EE90E034C080916E
+:10121000FE0182FFF2CF82EE90E02DC08091FE01B0
+:1012200083FF0BC08091FE0184FDEBCF87EE90E041
+:1012300022C08091FE0183FFF5CF86EE90E01BC0B7
+:101240008091FE0185FF07C089E290E014C0809183
+:10125000FE0185FFF9CF85E390E00DC08091FE018E
+:1012600086FF07C08AE290E006C08091FE0186FFFB
+:10127000F9CF81E390E00E947206089508950C94DE
+:101280003E09809172010895CF93DF9300D01F92A1
+:10129000CDB7DEB79C018091F501843019F593E05C
+:1012A00099833B832A839093E9008FEF9091E80024
+:1012B000815095FD06C095ED9A95F1F700008111DA
+:1012C000F5CF8091E80085FF0DC040E050E063E07D
+:1012D00070E0CE0101960E94B10B8091E8008E77FC
+:1012E0008093E8000F900F900F90DF91CF910895B9
+:1012F000CF93DF9300D01F92CDB7DEB72091F501D9
+:10130000243021F522E029839B838A8383E0809324
+:10131000E9008FEF9091E800815095FD06C095EDB2
+:101320009A95F1F700008111F5CF8091E80085FFD3
+:101330000DC040E050E063E070E0CE0101960E94F5
+:10134000B10B8091E8008E778093E8000F900F90AA
+:101350000F90DF91CF9108952091F5012430F1F4A1
+:1013600022E02093E9002FEF3091E800215035FD75
+:1013700006C035ED3A95F1F700002111F5CF209127
+:10138000E80025FF0BC040E050E065E070E00E94FF
+:10139000B10B8091E8008E778093E8000895CF9399
+:1013A000DF93EC019091F501943009F046C08091F3
+:1013B0000C018823D9F080910D018823B9F0909316
+:1013C000E9008FEF9091E800815095FD06C095E10E
+:1013D0009A95F1F700008111F5CF8091E80085FF23
+:1013E0002CC040E050E060E170E017C081E08093E5
+:1013F000E9008FEF9091E800815095FD06C095EDD2
+:101400009A95F1F700008111F5CF8091E80085FFF2
+:1014100014C040E050E068E070E0CE010E94B10BE3
+:101420008091E8008E778093E80080E1FE01A2E6DB
+:10143000B1E001900D928A95E1F7DF91CF91089587
+:101440008091F401811109C00E94460D0E94A30DF4
+:101450008091E20084608093E20008951092F4018C
+:10146000089508950C948C220E94EE1B0E949222F3
+:101470000E9449100C943F0942E061EC81E00E9417
+:10148000C00C42E061EC82E00E94C00C42E061ECE2
+:1014900083E00E94C00C42E161EC84E00C94C00C3B
+:1014A0008091F701833009F455C030F4813071F038
+:1014B000823009F48EC008958A3009F47AC08B30E6
+:1014C00009F460C0893009F09CC020C08091F60109
+:1014D000813A09F096C08091E800877F8093E80008
+:1014E0008091FA019091FB01892B21F460E182E661
+:1014F00091E003C060E080E090E070E00E94FC0BAF
+:101500008091E8008B778093E80008958091F60140
+:10151000813209F076C08091FA019091FB01009729
+:1015200019F0039709F06DC08091E800877F8093E0
+:10153000E8008091E80082FD05C08091F5018111ED
+:10154000F8CF5FC08091F100809372018091E80034
+:101550008B7753C08091F601813A09F052C0809197
+:10156000FA019091FB01892B09F04BC08091E800B2
+:10157000877F8093E8008091E80080FFFCCF809116
+:101580000C0136C08091F6018132D9F58091FA01C3
+:101590009091FB01892BA9F58091E800877F8093CA
+:1015A000E8000E94F50C8091F80180930C010C94E6
+:1015B000E2148091F601813221F58091E800877F65
+:1015C0008093E8000E94F50C8091F90180937301EB
+:1015D00008958091F601813AA1F48091E800877F17
+:1015E0008093E8008091E80080FFFCCF8091730138
+:1015F0008093F1008091E8008E778093E8000C944E
+:10160000F50C089584B7877F84BF0FB6F894A8952A
+:1016100080916000886180936000109260000FBE2E
+:1016200090E080E80FB6F894809361009093610099
+:101630000FBE0E9498100E94460D0E94A30D80913B
+:10164000E20084608093E20078940E9429100E9456
+:101650009A1082E091E00E9444100E947A228091C8
+:10166000F501853069F40E94B21B8091F301882353
+:10167000B1F30E94E01B882391F30E949B0BEFCFF4
+:101680000E94A010ECCF292F332723303105C9F059
+:1016900064F42130310581F02230310509F043C076
+:1016A0008DE690E026E333E042C021323105F1F0CF
+:1016B0002232310541F137C082E190E023EA33E084
+:1016C00036C099278130910541F08230910541F073
+:1016D000892B49F5E2E3F3E005C0EAE1F3E002C05B
+:1016E000E2E0F3E0849190E09F0121C06430D8F4FF
+:1016F000E62FF0E0EE0FFF1FEE5DFE4F20813181FF
+:1017000089E090E014C0643070F470E0FB01EE0FEB
+:10171000FF1FE65EFE4F20813181FB01EA5EFE4F36
+:10172000808190E004C080E090E020E030E0FA01A9
+:1017300031832083089580E189BD82E189BD09B4A8
+:1017400000FEFDCF8091D8008F7D8093D8008091DE
+:10175000E00082608093E0008091E00081FDFCCF9A
+:101760000895CF92DF92EF92FF920F931F93CF9342
+:10177000DF93EC018B016A010E94140D811133C0CB
+:10178000C114D10439F0F60180819181081B190B35
+:10179000C80FD91FE12CF12C0115110519F1809109
+:1017A000E80085FD16C08091E8008E778093E80000
+:1017B000C114D10449F0F60180819181E80EF91E2F
+:1017C000F182E08285E00FC00E94140D882321F38E
+:1017D0000AC089918093F10001501109FFEFEF1ABF
+:1017E000FF0ADACF80E0DF91CF911F910F91FF9038
+:1017F000EF90DF90CF9008952091FC013091FD0192
+:101800002617370748F06115710539F42091E80073
+:101810002E772093E80001C0B90140E06115710501
+:10182000A9F12091F501222309F443C0253009F4E0
+:1018300042C02091E80023FD40C02091E80022FD35
+:1018400032C02091E80020FFE9CF4091F3002091C1
+:10185000F20030E0342BFC01CF016115710559F025
+:101860002830310540F481918093F1006150710975
+:101870002F5F3F4FF1CF41E02830310509F040E0C4
+:101880002091E8002E772093E800C8CF4111C9CFFE
+:101890000AC08091F501882361F0853061F0809164
+:1018A000E80083FD0AC08091E80082FFF2CF80E06B
+:1018B000089582E0089583E0089581E008952091DD
+:1018C000FC013091FD012617370748F061157105BD
+:1018D00039F42091E8002E772093E80001C0B90187
+:1018E000FC0120E06115710591F18091F5018823DB
+:1018F00009F440C0853009F43FC08091E80083FDC1
+:101900003DC08091E80082FD2FC08091E80080FFFB
+:10191000E9CF2091F3008091F20090E0922B6115C5
+:10192000710559F08830910540F424912093F1001D
+:101930003196615071090196F2CF21E0089709F0C4
+:1019400020E08091E8008E778093E800CBCF2111D2
+:10195000CCCF0AC08091F501882361F0853061F019
+:101960008091E80083FD0AC08091E80082FFF2CFF9
+:1019700080E0089582E0089583E0089581E008956D
+:10198000982F973058F59093E900981739F0709197
+:10199000EC002091ED005091F00003C0242F762F31
+:1019A00050E021FF19C03091EB003E7F3093EB00F7
+:1019B0003091ED003D7F3093ED003091EB003160D0
+:1019C0003093EB007093EC002093ED005093F00007
+:1019D0002091EE0027FF07C09F5FD3CF8F708093C9
+:1019E000E90081E0089580E008958091F60187FF85
+:1019F00011C08091E80082FD05C08091F501811140
+:101A0000F8CF11C08091E8008B770BC08091F50171
+:101A1000882349F08091E80080FFF8CF8091E800AA
+:101A20008E778093E80008952091E4003091E500DE
+:101A300095E64091EC00842F817040FF22C0809198
+:101A4000E80080FD1CC08091F501882391F085306D
+:101A500091F08091EB0085FD10C04091E400509121
+:101A6000E5004217530729F39A01915011F784E0DA
+:101A7000089582E0089583E0089581E0089580E06C
+:101A800008954091E80042FFDECF08950E94B40D12
+:101A90000E94BC0DE0EEF0E0808181608083E8ED83
+:101AA000F0E080818F77808319BCA7EDB0E08C9146
+:101AB0008E7F8C9380818F7E80831092F4010895B5
+:101AC0000F931F93CF93DF930E94B40D0E94BC0D20
+:101AD000C8EDD0E088818F7788838881806888838B
+:101AE00088818F7D888319BC1092F5011092F101D5
+:101AF0001092F3011092F20100EE10E0F8018081E3
+:101B00008B7F808388818160888342E060E080E011
+:101B10000E94C00CE1EEF0E080818E7F8083E2EED7
+:101B2000F0E0808181608083808188608083F8011B
+:101B300080818E7F8083888180618883DF91CF91CF
+:101B40001F910F910895E8EDF0E080818F7E8083F2
+:101B5000E7EDF0E080818160808384E082BF81E0F6
+:101B60008093F4010C94600DE8EDF0E080818E7FAD
+:101B700080831092E20008951092DA001092E10042
+:101B800008951F920F920FB60F9211242F933F9337
+:101B90004F935F936F937F938F939F93AF93BF9375
+:101BA000EF93FF938091E10082FF0BC08091E200F0
+:101BB00082FF07C08091E1008B7F8093E1000E944B
+:101BC00028108091DA0080FF1FC08091D80080FF2C
+:101BD0001BC08091DA008E7F8093DA008091D9005B
+:101BE00080FF0DC080E189BD82E189BD09B400FE9E
+:101BF000FDCF81E08093F5010E94200A05C019BC49
+:101C00001092F5010E942E0A8091E10080FF19C018
+:101C10008091E20080FF15C08091E2008E7F80936A
+:101C2000E2008091E20080618093E2008091D80020
+:101C300080628093D80019BC85E08093F5010E94F2
+:101C4000320A8091E10084FF30C08091E20084FF7D
+:101C50002CC080E189BD82E189BD09B400FEFDCFC1
+:101C60008091D8008F7D8093D8008091E1008F7E95
+:101C70008093E1008091E2008F7E8093E20080916A
+:101C8000E20081608093E2008091F101882311F0ED
+:101C900084E007C08091E30087FD02C081E001C0BD
+:101CA00083E08093F5010E94340A8091E10083FF74
+:101CB00029C08091E20083FF25C08091E100877FE9
+:101CC0008093E10082E08093F5011092F101809110
+:101CD000E1008E7F8093E1008091E2008E7F80930F
+:101CE000E2008091E20080618093E20042E060E0E7
+:101CF00080E00E94C00C8091F00088608093F0002A
+:101D00000E94310AFF91EF91BF91AF919F918F9106
+:101D10007F916F915F914F913F912F910F900FBEE7
+:101D20000F901F9018951F920F920FB60F921124CB
+:101D30002F933F934F935F936F937F938F939F93D3
+:101D4000AF93BF93CF93DF93EF93FF93C091E900DD
+:101D5000CF708091EC00D82FD17080FDD0E8109228
+:101D6000E9008091F000877F8093F00078940E94D2
+:101D7000D70E1092E9008091F00088608093F00007
+:101D8000CD2BCF70C093E900FF91EF91DF91CF9100
+:101D9000BF91AF919F918F917F916F915F914F9183
+:101DA0003F912F910F900FBE0F901F9018951F938A
+:101DB000CF93DF93CDB7DEB7AA970FB6F894DEBF07
+:101DC0000FBECDBFE6EFF1E088E08E0F9091F100FD
+:101DD00091938E13FBCF0E94500A8091E80083FFFD
+:101DE0001FC18091F6019091F701492F50E04A30D0
+:101DF000510508F015C1FA01EA5AFF4F0C9423244B
+:101E0000803881F0823809F00BC18091FA018F701F
+:101E10008093E9008091EB0085FB882780F9109280
+:101E2000E90006C08091F2019091F3019111826066
+:101E30009091E800977F9093E8008093F1001092D2
+:101E4000F100C8C0282F2D7F09F0EAC0882319F0BF
+:101E5000823061F0E5C08091F801813009F0E0C086
+:101E6000933009F080E08093F3012BC08091F8015A
+:101E7000811127C08091FA018F7009F4D1C080933D
+:101E8000E9002091EB0020FF1CC0933021F48091E9
+:101E9000EB00806214C09091EB0090619093EB0096
+:101EA00021E030E0A90102C0440F551F8A95E2F7F6
+:101EB0004093EA001092EA008091EB0088608093E2
+:101EC000EB001092E9008091E800877F86C08111C5
+:101ED000A7C01091F8011F778091E3008078812BD3
+:101EE0008093E3008091E800877F8093E8000E9460
+:101EF000F50C8091E80080FFFCCF8091E3008068C2
+:101F00008093E300111102C082E001C083E080935E
+:101F1000F50186C08058823008F082C08091F801B7
+:101F20009091F9018C3D53E0950779F583E08A8320
+:101F30008AE289834FB7F894DE01139620E03EE0F1
+:101F400051E2E32FF0E050935700E49120FF03C0EB
+:101F5000E295EF703F5FEF708E2F90E0EA3010F067
+:101F6000C79601C0C0968D939D932F5F243149F78A
+:101F70004FBF8091E800877F8093E8006AE270E0BD
+:101F8000CE0101960E94FC0B14C0AE014F5F5F4F63
+:101F90006091FA010E94430BBC01892B09F440C0F7
+:101FA0009091E800977F9093E80089819A810E9440
+:101FB0005F0C8091E8008B778093E80031C0803817
+:101FC00079F58091E800877F8093E8008091F101A6
+:101FD0008093F1008091E8008E778093E8000E9462
+:101FE000F50C1EC081111CC09091F8019230C0F414
+:101FF0008091E800877F8093E8009093F1010E9430
+:10200000F50C8091F101811106C08091E30087FDFC
+:1020100002C081E001C084E08093F5010E943C0A87
+:102020008091E80083FF0AC08091E800877F809359
+:10203000E8008091EB0080628093EB00AA960FB6D7
+:10204000F894DEBF0FBECDBFDF91CF911F910895F1
+:102050000895CF938091F5018823A1F0C091E90004
+:10206000CF709091EC00892F817090FD80E8C82B93
+:102070001092E9008091E80083FD0E94D70ECF7096
+:10208000C093E900CF9108959093790180937801EE
+:102090000895E0917801F0917901309721F0019055
+:1020A000F081E02D099480E00895E0917801F091AD
+:1020B0007901309721F00280F381E02D0994089591
+:1020C000E0917801F0917901309721F00480F58159
+:1020D000E02D0994089520917601309177018217BF
+:1020E000930771F09093770180937601E0917801E6
+:1020F000F0917901309721F00680F781E02D099465
+:10210000089520917401309175018217930771F041
+:102110009093750180937401E0917801F0917901B9
+:10212000309721F00084F185E02D099408950895F9
+:102130000C9497100E94F41B0E947D040C94B61C12
+:102140009F92AF92BF92CF92DF92EF92FF920F9346
+:102150001F93CF93DF9300D000D000D0CDB7DEB770
+:102160000E9495040DE010E0AA24A394B12C902EB7
+:10217000802F0E948305980125583E4F6901F9017F
+:10218000F080F826A1F40150110988F78FEF8983B8
+:102190008A831B820E94FD1B8160782F9D838C8324
+:1021A00049815A816B818D810E9437112FC0909196
+:1021B000DE0191FF04C08E830E9489058E8125E097
+:1021C00030E0A501022E01C0440F0A94EAF7E42E84
+:1021D0004F21C1F029839A828E2191E009F490E089
+:1021E0009B830E94FD1B8160782F9D838C83498196
+:1021F0005A816B818D810E943711F6018081E8261A
+:10220000E08204C021503109E0F6BDCF0E949D1F3D
+:1022100010917A010E9449101817B9F00E944910D4
+:1022200080937A0126960FB6F894DEBF0FBECDBF1D
+:10223000DF91CF911F910F91FF90EF90DF90CF90A2
+:10224000BF90AF909F900C943F0926960FB6F894DC
+:10225000DEBF0FBECDBFDF91CF911F910F91FF90D9
+:10226000EF90DF90CF90BF90AF909F900895CF9365
+:10227000DF93CDB7DEB72B970FB6F894DEBF0FBE56
+:10228000CDBF4F83588769877A878B87DE01119688
+:1022900086E0FD0111928A95E9F785E0FE01379607
+:1022A00001900D928A95E1F749815A816B817C8179
+:1022B0008D819E810E9480172B960FB6F894DEBF09
+:1022C0000FBECDBFDF91CF910895CF93882309F43E
+:1022D000C2C0C82F823859F40E94491081FDBBC08A
+:1022E00089E30E945A1A0E94271B89E30CC0833895
+:1022F00079F40E94491080FDAEC083E50E945A1A0D
+:102300000E94271B83E50E949C1ACF910C94271BE7
+:10231000843859F40E94491082FD9DC087E40E94D0
+:102320005A1A0E94271B87E4EECF8CEF8C0F813A5C
+:1023300048F48C2F0E94DF2181118DC08C2F0E94C8
+:102340005A1AE3CF80E28C0F883048F4C77081E0DE
+:1023500001C0880FCA95EAF70E94E01AD6CF8BE534
+:102360008C0F833078F4C53A29F0C63A31F083E80F
+:1023700090E005C081E890E002C082E890E0CF9153
+:102380000C946B1088E58C0F833108F064C0C83A58
+:1023900039F1C93A41F1CA3A49F1CB3A51F1CC3A53
+:1023A00059F1CD3A61F1C03B69F1CE3A71F1CF3AC2
+:1023B00079F1C13B81F1C23B89F1C33B91F1C43B4F
+:1023C00099F1C53BA1F1C63BA9F1C73BB1F1C83BAF
+:1023D000B9F1C93BC1F1CA3BC9F180E090E038C016
+:1023E00082EE90E035C089EE90E032C08AEE90E057
+:1023F0002FC085EB90E02CC086EB90E029C087EBE6
+:1024000090E026C08CEC90E023C08DEC90E020C0E2
+:1024100083E891E01DC08AE891E01AC082E991E06A
+:1024200017C084E991E014C081E292E011C083E218
+:1024300092E00EC084E292E00BC085E292E008C018
+:1024400086E292E005C087E292E002C08AE292E072
+:10245000CF910C948110CF910895882309F44BC03B
+:10246000823859F40E94491081FF45C089E30E94D7
+:102470005A1A0E94271B89E30CC0833871F40E940A
+:10248000491080FF38C083E50E945A1A0E94271B1A
+:1024900083E50E949C1A0C94271B843859F40E94EF
+:1024A000491082FF28C087E40E945A1A0E94271B05
+:1024B00087E4EFCF9CEF980F913A58F390E2980F92
+:1024C000983050F4877091E001C0990F8A95EAF72F
+:1024D000892F0E94E61ADFCF9BE5980F933020F4F6
+:1024E00080E090E00C946B10885A833120F480E0F7
+:1024F00090E00C9481100895882321F00E94E01A46
+:102500000C94271B0895882321F00E94E61A0C944E
+:10251000271B08957F928F929F92AF92BF92CF9286
+:10252000DF92EF92FF920F931F93CF93DF931F924F
+:10253000CDB7DEB77C01C62E772EFC010581029552
+:102540000F70128111110E94FD1A0E94531A8823E4
+:1025500079F0112369F080E28C0D883048F082E038
+:102560000E943C1A0E94531A91E0D82ED92601C02D
+:10257000D12CE72DE295EF70F0E0E05AFF4F0C947C
+:102580002324872D807F072D0F70882311F002955B
+:10259000007F112389F0002309F490C180E28C0DA3
+:1025A000883020F4802F0E94E01A03C0802F0E9400
+:1025B000F01A0E94271B82C18C2D0E942D1200232D
+:1025C00009F495C180E28C0D883020F4802F0E94A0
+:1025D000E61A03C0802F0E94F61A0E94271B87C1AB
+:1025E000972D907F872D8F70903211F08295807F8C
+:1025F000CC2021F0F1E0CF16B1F01EC0112349F03C
+:10260000002309F414C1013009F011C10E94101B0C
+:102610006EC1002319F0013009F469C189830E9459
+:10262000131B89810AC1112321F0023008F05FC118
+:10263000FEC001115CC101C1112321F0002309F486
+:10264000F6C03CC1002309F4F8C03EC1872D869531
+:102650008695837090E0009719F0019761F047C16B
+:10266000112321F08C2D972D937002C080E090E013
+:102670000E946B103CC1112321F08C2D972D93707B
+:1026800002C080E090E00E94811031C18C2D1123A6
+:1026900019F00E94A51E02C00E940D1F0E94921FE9
+:1026A00026C1872D837009F052C0111120C18C2DD5
+:1026B000829586958770880F880F9C2D9F70892E34
+:1026C000912CA12CB12C082E04C0880C991CAA1C9A
+:1026D000BB1C0A94D2F7C4FE14C00FE010E020E047
+:1026E00030E0B901A80104C0440F551F661F771FD1
+:1026F0008A95D2F7CB01BA01609570958095909537
+:1027000003C060E070E0CB01272D2695269523704D
+:1027100030E02230310569F02330310589F0682935
+:1027200079298A299B292130310571F00E94C81826
+:10273000DEC0682979298A299B290E94E418D7C01C
+:102740000E94C818C501B4010E94AC18D0C0112362
+:1027500019F0872D817001C08695882309F4C7C0C0
+:102760008C2D829586958770880F880F9C2D9F7081
+:10277000892E912CA12CB12C082E04C0880C991CF8
+:10278000AA1CBB1C0A94D2F7C4FE14C00FE010E0D0
+:1027900020E030E0B901A80104C0440F551F661FB6
+:1027A000771F8A95D2F7CB01BA0160957095809515
+:1027B000909503C060E070E0CB01272D269526950B
+:1027C0002370422F50E04230510569F043305105EB
+:1027D00089F0682979298A299B294130510571F0AE
+:1027E0000E94A21984C0682979298A299B290E94FC
+:1027F000BE197DC00E94A219C501B4010E948619AC
+:1028000076C08C2D90E0FC01E05EF109E531F10528
+:1028100008F050C0E059FF4F0C9423240C2D0F708A
+:10282000872D8F71112331F00E941F19802F0E9474
+:102830007C125DC00E944019802F0E94831257C0F5
+:10284000112339F0011153C0872D8F710E94651932
+:102850004EC0023008F04BC0F7CF112339F0872D5E
+:102860008F710E941F1943C01123C9F3872D8F71E7
+:102870000E9440193CC0112329F0872D8F710E94BE
+:102880000A1935C00E94001932C0112351F0172DCA
+:102890001F71812F0E941F1963E0812F0E94331A3C
+:1028A00026C081E00E943C1A023008F182E00E94BA
+:1028B0003C1A1DC0112331F0002389F28C2D0E9497
+:1028C000651115C0002391F28C2D0E942D120FC0AE
+:1028D000472D4F706C2DC7010E94C1020E94241821
+:1028E00006C0472D4F706C2DC7010E944F06DD209A
+:1028F000F9F00E942F1A80FD1BC0F70112820E947E
+:10290000291A0E941F19C7010E94A7140E94291AA0
+:102910000F90DF91CF911F910F91FF90EF90DF907B
+:10292000CF90BF90AF909F908F907F900C94401964
+:102930000F90DF91CF911F910F91FF90EF90DF905B
+:10294000CF90BF90AF909F908F907F9008950F93FE
+:102950001F93CF93DF93EC01888199812B813C8178
+:10296000232BB9F09F3F11F48F3F99F0CE010E94C5
+:10297000A705882371F0688179818A810E94251AD0
+:102980008C010E94DA190E94A118B801CE010E94A0
+:102990008A12DF91CF911F910F9108950E94FD1A25
+:1029A0000E940D1B0E94D21A0E94271B0E944220E7
+:1029B0000E94921F80E090E00E946B1080E090E007
+:1029C0000C9481100E94ED1A0C94CE140E941A1AD5
+:1029D000292F22952F7030E02C3031054CF42A300D
+:1029E00031056CF42250310922303105A8F407C0BA
+:1029F0002C30310569F02F30310551F00DC0803F8A
+:102A000069F018F4803E40F409C0843F29F406C000
+:102A100093FB882780F9089580E0089581E0089568
+:102A2000CF93DF9300D000D01F92CDB7DEB70F90C9
+:102A30000F900F900F900F90DF91CF910895CF934B
+:102A4000DF9300D000D000D0CDB7DEB726960FB60A
+:102A5000F894DEBF0FBECDBFDF91CF9108951F93D5
+:102A6000CF93DF93C091890116E080918A01C81746
+:102A700099F0D0E01C9FF0011D9FF00D1124E55747
+:102A8000FE4F4081518162817381848195810E94D2
+:102A90001F152196C770E9CFDF91CF911F9108953F
+:102AA0004091BB015091BC016091BD017091BE018C
+:102AB0008091BF019091C0010C941F158091C001BD
+:102AC00082958F7009F054C08091BD01882309F46C
+:102AD0004FC080918901A0918A016091BB017091E2
+:102AE000BC014091BE015091BF01B6E08A1709F4C4
+:102AF0003FC090E041155105C1F17F3F11F46F3F98
+:102B0000A1F1B89FF001B99FF00D1124E557FE4FD8
+:102B1000218172132AC02081621327C022812111D2
+:102B200024C0238134812417350710F42150310942
+:102B3000241B350B283C3105C0F42091C0012F70B7
+:102B400020612093C00126E0289FF001299FF00D0D
+:102B50001124E057FE4F80818F70806180838BEB62
+:102B600091E00E94A7140C942F1501968770BECF98
+:102B70000895CF92DF92EF92FF920F931F93CF931E
+:102B8000DF93CDB7DEB762970FB6F894DEBF0FBE06
+:102B9000CDBF8C0185E0F801DE011D9601900D92FC
+:102BA0008A95E1F7D8014C9111965C911197129694
+:102BB0006C9112971396CD90DC9014973091BB01D5
+:102BC0007091BC018091BE019091BF01009709F402
+:102BD0006BC17F3F19F43F3F09F466C1E090BD012E
+:102BE000EE2009F4C0C02091C001C816D90628F013
+:102BF000F601E81BF90BCF0104C0809590958C0D70
+:102C00009D1DFF24F394883C910578F0F12C207FE2
+:102C100009F0C6C07C2DD98AC88A89890E941015FE
+:102C20008BEB91E00E94A714B1C0822F807F09F046
+:102C300046C0751314C0341312C0611110C02F7038
+:102C400020612093C0010E9450158BEB91E00E94FF
+:102C5000A7148091C001D80115968C932EC0CD2861
+:102C600019F15F3F11F44F3FF9F0F62E61111CC0CE
+:102C70008091890120918A0136E0821709F45AC0B7
+:102C800090E0389FF001399FF00D1124E557FE4F79
+:102C90007181571306C07081471303C0728171118F
+:102CA00003C001968770E9CFF62E662309F418C198
+:102CB0008091C00181608093C001F12C11C1751316
+:102CC00008C0341306C0611104C08091C001D8014E
+:102CD000C3C04D875E878D859E856A8B0E94E614F2
+:102CE0006A898823E1F16623D1F12091C001822F06
+:102CF00082958F7090E0029774F08091BB01909163
+:102D0000BC0198878F831986DB86CA862C87CE0103
+:102D100007960E94A71486E0F801ABEBB1E00190A2
+:102D20000D928A95E1F70E945E150E945015FF24CE
+:102D3000F394D6C04D875E878D859E850E941A1AB2
+:102D4000292F22952F7030E0223031050CF0BCC0C5
+:102D50009F7009F0B6C0805E883008F4C1C0C80119
+:102D60000E94A714E4CFC816D90608F453C0F60190
+:102D7000E81BF90BCF01883C910508F450C0F12CF9
+:102D80007C2DD98AC88A89890E941015EBEBF1E065
+:102D900086E0DF011D928A95E9F70E945015A0C0D8
+:102DA000751314C0341312C0611110C08091C0019A
+:102DB000F8018583C8010E94A71486E0EBEBF1E0DF
+:102DC000DF011D928A95E9F7FE2C8AC04D875E8748
+:102DD0008D859E856A8B0E94E6146A89882309F492
+:102DE000BECF662309F4BBCF2091C001822F82950C
+:102DF0008F7090E002970CF48ECF8091BB01909180
+:102E0000BC019A8389831B82DD82CC822E83CE0112
+:102E100001967FCF809590958C0D9D1DACCFF62EA1
+:102E2000662309F49CCF75132EC034132CC0209157
+:102E3000C00120FD1FC0822F82958F70D9F0D8016C
+:102E400015962C9315978F3049F08F5F982F929598
+:102E5000907F822F8F70892B15968C93C8010E94CA
+:102E6000A71486E0F801ABEBB1E001900D928A95D2
+:102E7000E1F793CF86E0F801ABEBB1E001900D9262
+:102E80008A95E1F72DC04D875E878D859E850E94CE
+:102E9000E614811140CF8091C00181608093C00110
+:102EA000C8010E94A7141CC0662309F458CF4D879F
+:102EB0005E878D859E850E94E614882309F44FCF96
+:102EC0002ACF811148CF0CC0243031050CF047CFF8
+:102ED0009F7009F440CFF8019581907F09F03BCFB6
+:102EE0008F2D62960FB6F894DEBF0FBECDBFDF9177
+:102EF000CF911F910F91FF90EF90DF90CF900895A9
+:102F00001F93CF93DF93CDB7DEB72C970FB6F8940E
+:102F1000DEBF0FBECDBF4F83588769877A878B8707
+:102F20009C87CE0107960E94B915882369F08F818E
+:102F300098852A853B85232BF1F19F3F09F063C0DB
+:102F40008F3F09F060C037C086E0FE013796DE0192
+:102F5000119601900D928A95E1F76F817885EA8547
+:102F6000FB85309741F17F3F11F46F3F21F12091B4
+:102F70008A0130E0C9010196877099274091890143
+:102F800050E08417950709F447C069837A83FD836D
+:102F9000EC8396E0929FD001939FB00D1124A5572A
+:102FA000BE4FFE01319601900D929A95E1F7809304
+:102FB0008A010E942F1516E08091890190918A0163
+:102FC0008917C1F1189FC001112485579E4F0E9497
+:102FD000B915882379F1E09189011E9FF001112430
+:102FE000E557FE4F408151816281738184819581D3
+:102FF0000E941F158091890190E0019687709927A2
+:1030000080938901D9CF4F81588569857A858B85D1
+:103010009C850E941F15CFCF0E94E21410928A0156
+:1030200010928901EBEBF1E086E0DF011D928A95B9
+:10303000E9F7C1CF2C960FB6F894DEBF0FBECDBF17
+:10304000DF91CF911F910895EF92FF920F931F93FD
+:10305000CF93DF938C01892B09F46CC0F12CEE2403
+:10306000E394E8012196F8018491843740F4843098
+:1030700008F051C0813081F0823019F15BC0853792
+:1030800009F444C0A8F19CE7980F903708F052C0AB
+:103090008F770E942D1241C00E5F1F4FFE01C49119
+:1030A00080E28C0F883048F4C7708E2D01C0880FE5
+:1030B000CA95EAF70E94001B14C08C2F0E9465116C
+:1030C0002DC00E5F1F4FFE01C49180E28C0F88302F
+:1030D00058F4C7708E2D01C0880FCA95EAF70E9478
+:1030E000061B0E94271B1AC08C2F0E942D1216C08F
+:1030F0000E5F1F4FFE01C491CC2381F08FE99FE04A
+:103100000197F1F700C00000C150F6CF0E5F1F4FCE
+:10311000FE01F49003C00E9465118E018F2D88235B
+:1031200009F49FCFEFE9FFE03197F1F700C000000D
+:103130008150F5CFDF91CF911F910F91FF90EF90CC
+:10314000089508956093C5017093C6018093C701E7
+:103150009093C8010C94CE140F931F930091C50156
+:103160001091C6012091C7013091C801DC01CB014B
+:10317000802B912BA22BB32B8093C5019093C6017A
+:10318000A093C701B093C8011F910F910C94CE1466
+:103190000F931F930091C5011091C6012091C701A3
+:1031A0003091C801DC01CB0180239123A223B323FA
+:1031B0008093C5019093C601A093C701B093C80145
+:1031C0001F910F910C94CE140F931F930091C50182
+:1031D0001091C6012091C7013091C801DC01CB01DB
+:1031E00080279127A227B3278093C5019093C6011A
+:1031F000A093C701B093C8011F910F910C94CE14F6
+:103200001092C1011092C2011092C3011092C40128
+:103210000C94CE1441E050E060E070E004C0440F34
+:10322000551F661F771F8A95D2F74093C1015093AF
+:10323000C2016093C3017093C4010C94CE1441E0A9
+:1032400050E060E070E004C0440F551F661F771F18
+:103250008A95D2F78091C1019091C201A091C301DA
+:10326000B091C401482B592B6A2B7B2B4093C10191
+:103270005093C2016093C3017093C4010C94CE14A7
+:1032800041E050E060E070E004C0440F551F661F4D
+:10329000771F8A95D2F740955095609570958091EB
+:1032A000C1019091C201A091C301B091C401482312
+:1032B00059236A237B234093C1015093C201609339
+:1032C000C3017093C4010C94CE1441E050E060E05F
+:1032D00070E004C0440F551F661F771F8A95D2F710
+:1032E0008091C1019091C201A091C301B091C4012C
+:1032F000482759276A277B274093C1015093C20171
+:103300006093C3017093C4010C94CE140F931F9368
+:103310000091C1011091C2012091C3013091C401FB
+:10332000DC01CB01802B912BA22BB32B8093C1010D
+:103330009093C201A093C301B093C4011F910F9158
+:103340000C94CE140F931F930091C1011091C201F0
+:103350002091C3013091C401DC01CB018023912372
+:10336000A223B3238093C1019093C201A093C30110
+:10337000B093C4011F910F910C94CE140F931F931F
+:103380000091C1011091C2012091C3013091C4018B
+:10339000DC01CB0180279127A227B3278093C101AD
+:1033A0009093C201A093C301B093C4011F910F91E8
+:1033B0000C94CE140895CF92DF92EF92FF920F9368
+:1033C0001F93CF93DF938C01C090C501D090C601AD
+:1033D000E090C701F090C8018091C1019091C201B5
+:1033E000A091C301B091C401C82AD92AEA2AFB2AB4
+:1033F000CFE1D0E0D701C6010C2E04C0B695A79549
+:10340000979587950A94D2F780FF06C0B8018C2F54
+:103410000E94A408019721F4219760F780E001C081
+:103420008C2FDF91CF911F910F91FF90EF90DF9044
+:10343000CF900895CF93DF93EC010E94DB19BE017A
+:103440000E94A408DF91CF910895CB010E941A1A1F
+:1034500008958091C90185958595859508958091F8
+:10346000C9018770089598E0899F90011124262B47
+:103470002093C9010C941F192091C90180958223C2
+:103480008093C901982F977069F430E0482F082E77
+:10349000000C550B2417350729F0859585958595E2
+:1034A0000C94401908959091C901977081E009F436
+:1034B00080E0089590910C01992321F090910D01E5
+:1034C000911109C020910E0130910F01F90132963E
+:1034D0009FEF40E01FC0982F9695969596959F3048
+:1034E00050F5E0910E01F0910F01E90FF11D877089
+:1034F00021E030E0A90102C0440F551F8A95E2F790
+:10350000CA019181892B818308959F3F39F04F5FD4
+:103510004E3041F051915813F8CF0DC05111F7CFF3
+:10352000942FF5CF9F3F39F0F901E90FF11D97FD79
+:10353000FA9582830895089590910C01992321F0C2
+:1035400090910D01911109C020910E0130910F0150
+:10355000F9013296205F3F4F1FC0982F96959695A0
+:1035600096959F30F0F4E0910E01F0910F01E90F74
+:10357000F11D877021E030E0A90102C0440F551F02
+:103580008A95E2F7CA018095918189238183089504
+:103590003196E217F30729F090819813F9CF108242
+:1035A000F7CF089581E090E0E0910E01F0910F01D6
+:1035B000E80FF91F1082019680319105A9F708954F
+:1035C0009091DD01892B8093DD0108958095909184
+:1035D000DD0189238093DD0108951092DD010895B6
+:1035E0009091DC01892B8093DC0108958095909166
+:1035F000DC0189238093DC0108951092DC01089599
+:103600009091DB01892B8093DB0108958095909147
+:10361000DB0189238093DB0108951092DB0108957B
+:103620008093CA0108951092CA01089580910E01F5
+:1036300090910F01FC0131969C01205F3F4F80E08B
+:10364000919191118F5FE217F307D1F70895E091FF
+:103650000E01F0910F018091DD018083E0910E0158
+:10366000F0910F0190818091DC01892B8083E091A2
+:103670000E01F0910F0190818091DB01892B8083F5
+:103680008091CA01882361F0E0910E01F0910F0151
+:103690009081892B80830E94161B81111092CA0190
+:1036A00080910E0190910F010C94551020E000972D
+:1036B00039F0AC0141505109842395232F5FF7CF96
+:1036C000822F0895CF92DF92EF92FF926C01EE2449
+:1036D000FF24C114D104E104F10421F0C701B601B3
+:1036E00020E101C020E0C72ED82EE92EFF24C1140E
+:1036F000D104E104F10419F0285FC701B6016B01A0
+:103700007C0154E0F694E794D794C7945A95D1F786
+:10371000C114D104E104F10419F02C5FC701B60112
+:103720006B017C0142E0F694E794D794C7944A95E4
+:10373000D1F7C114D104E104F10419F02E5FC701DF
+:10374000B601DC01CB01B695A79597958795892B96
+:103750008A2B8B2B09F02F5F822FFF90EF90DF9049
+:10376000CF9008958091F501843039F11092DF01F6
+:1037700020E488E190E00FB6F894A895809360006B
+:103780000FBE2093600080E00E943F0983B7817FD5
+:10379000846083BF83B7816083BF7894889583B743
+:1037A0008E7F83BF0FB6F894A895809160008861E2
+:1037B00080936000109260000FBE089508950895F0
+:1037C0000E94DE1B0E9495040E94DF1B0E948A0556
+:1037D00091E0811101C090E0892F08950E94E214C8
+:1037E0000E9449100C943F0982E084BD93E095BD8E
+:1037F0009AEF97BD80936E0008952FB7F89480914B
+:10380000E0019091E101A091E201B091E3012FBFAD
+:103810000895CF92DF92EF92FF920F931F932FB7ED
+:10382000F8944091E0015091E1016091E2017091C2
+:10383000E3012FBF6A017B01EE24FF248C0120E00D
+:1038400030E0C016D106E206F30610F441505109EB
+:103850009A01281B390BC9011F910F91FF90EF901E
+:10386000DF90CF9008951F920F920FB60F92112400
+:103870008F939F93AF93BF938091E0019091E1016B
+:10388000A091E201B091E3010196A11DB11D8093C9
+:10389000E0019093E101A093E201B093E301BF91B5
+:1038A000AF919F918F910F900FBE0F901F90189521
+:1038B0000E94460DF8942FEF87EA91E62150804050
+:1038C0009040E1F700C0000087E090EBDC018093BE
+:1038D000FF0190930002A0930102B09302029CE0CA
+:1038E00088E10FB6F894A895809360000FBE90937E
+:1038F0006000FFCFEF92FF920F931F93CF93DF9360
+:10390000D82FCDE08C2F0E94830505E010E0E82E33
+:10391000F12CC701002E02C0959587950A94E2F715
+:1039200080FF09C0602F7C2F80E00E945006D813D2
+:1039300002C081E006C00150110958F7C15010F7CC
+:1039400080E0DF91CF911F910F91FF90EF9008954C
+:10395000CF93C82F8CE20E947A1C882321F08C2FF1
+:10396000CF910C947A1C80E0CF910895CF930E9460
+:10397000FD1D811102C00E94E31DC5E6C15049F042
+:103980000E9495048FE39CE90197F1F700C00000C5
+:10399000F5CF89E20E94A81C811113C18AE20E941E
+:1039A000A81C81110E94E31D85E00E94A81C8111C2
+:1039B0000E94581C0E94081E8093DE0187E00E942E
+:1039C000A81C8823A9F18BE10E94A81C882351F030
+:1039D0008091DE0181FB222720F991E0922790FB64
+:1039E00081F90EC08EE00E94A81C882361F08091AE
+:1039F000DE0182FB222720F991E0922790FB82F9D9
+:103A00008093DE0115C080E10E94A81C9091DE0128
+:103A1000882341F093FB222720F981E0822780FB55
+:103A200093F904C0892F809580FB90F99093DE0173
+:103A30008091DE010E940C1E0E941A1E8093FE01DE
+:103A400080EE0E94A81C882341F08091FE01982FEF
+:103A5000909590FB80F98093FE0189E30E94A81C59
+:103A6000882359F08091FE0181FB222720F991E003
+:103A7000922790FB81F98093FE0182EE0E94A81CA0
+:103A8000882359F08091FE0182FB222720F991E0E2
+:103A9000922790FB82F98093FE0186EE0E94A81C7B
+:103AA000882359F08091FE0183FB222720F991E0C1
+:103AB000922790FB83F98093FE0183EE0E94A81C5D
+:103AC000882359F08091FE0184FB222720F991E0A0
+:103AD000922790FB84F98093FE0185E30E94A81C45
+:103AE000882359F08091FE0185FB222720F991E07F
+:103AF000922790FB85F98093FE0181E30E94A81C28
+:103B0000882359F08091FE0186FB222720F991E05D
+:103B1000922790FB86F98093FE0181E10E94A81C08
+:103B2000882359F08091FE0187FB222720F991E03C
+:103B3000922790FB87F98093FE018091FE010E94FD
+:103B40001E1E8091FE0187FB882780F980930D015E
+:103B500087E20E94A81CC82F8EE10E94A81C811138
+:103B6000C2608FE10E94A81C8111C46080E20E94A3
+:103B7000A81C8111C86081E20E94A81C8111C0614B
+:103B800082E20E94A81C8111C06283E20E94A81CEC
+:103B90008111C06484E20E94A81C882311F0C068CF
+:103BA00002C0CC2329F08C2F0E94151E6C2F03C05D
+:103BB0000E94111E682F70E080E090E0CF910C947D
+:103BC000A218CF9108956DEE7EEF80E090E00E9404
+:103BD0005D2460E082E090E00E944B2460E083E09E
+:103BE00090E00E944B2460E084E090E00E944B242F
+:103BF00060E085E090E00C944B2480E090E00E942F
+:103C0000452421E08D3E9E4F09F020E0822F08954B
+:103C100082E090E00C943D24682F82E090E00C94C8
+:103C20004B2483E090E00C943D24682F83E090E0E7
+:103C30000C944B2484E090E00C943D24682F84E0A5
+:103C400090E00C944B248091E60180FF0BC06091C2
+:103C5000130185E0689FB0011124759567957595EE
+:103C600067952BC081FF09C06091130185E0689FB3
+:103C7000B00111247595679520C082FF07C060913F
+:103C8000130185E0689FB001112417C09091E701EE
+:103C90009923D1F060911201961788F720911301B2
+:103CA00085E0289F90011124929FA001939F500DC1
+:103CB000112470E0CA010E940F246038710540F49D
+:103CC0006115710539F002C065E070E0862F089536
+:103CD0008FE7089581E008958091E60180FF08C094
+:103CE0006091110170E0759567957595679521C094
+:103CF00081FF06C06091110170E07595679519C04C
+:103D000082FF04C06091110170E010C09091E70142
+:103D10009923C1F0609110019617A0F780911101CD
+:103D2000899FC001112470E00E940F246038710542
+:103D300028F46115710521F0862F08958FE7089505
+:103D400081E0089561E070E0F4CF803F21F40E94AB
+:103D5000231E819504C0813F29F40E94231E809375
+:103D6000EA010895823F21F40E94231E819504C038
+:103D7000833F29F40E94231E8093E9010895893F1F
+:103D800019F40E946C1E05C08A3F31F40E946C1E1B
+:103D900081958093EB0108958B3F21F40E946C1E66
+:103DA000819504C08C3F29F40E946C1E8093EC0125
+:103DB0000895843F21F48091E801816017C0853F18
+:103DC00021F48091E801826011C0863F21F4809146
+:103DD000E80184600BC0873F21F48091E80188608E
+:103DE00005C0883F31F48091E80180618093E8014B
+:103DF00008958D3F21F48091E60181600BC08E3FD4
+:103E000021F48091E601826005C08F3F29F4809102
+:103E1000E60184608093E6010895803F39F4809143
+:103E2000EA0187FF6CC01092EA0169C0813F29F462
+:103E30008091EA011816BCF362C09091E901823FBB
+:103E400029F497FF5CC01092E90159C0833F19F42F
+:103E50001916CCF354C0893F41F48091EB01181638
+:103E60000CF04DC01092EB014AC08A3F29F48091BA
+:103E7000EB0187FF44C0F6CF8B3F39F48091EC0112
+:103E800087FF3DC01092EC013AC08C3F29F480912D
+:103E9000EC011816BCF333C0843F21F48091E80193
+:103EA0008E7F17C0853F21F48091E8018D7F11C07E
+:103EB000863F21F48091E8018B7F0BC0873F21F47E
+:103EC0008091E801877F05C0883F31F48091E80147
+:103ED0008F7E8093E80113C08D3F21F48091E6012D
+:103EE0008E7F0BC08E3F21F48091E6018D7F05C04F
+:103EF0008F3F29F48091E6018B7F8093E6018091CA
+:103F0000E90181110EC08091EA0181110AC08091FE
+:103F1000EB01811106C08091EC01811102C0109269
+:103F2000E701089588EE91E00E9460100E94FD1B59
+:103F30009093E5018093E40108951F93CF93DF935D
+:103F40008091E4019091E5010E94091CAC019091DF
+:103F5000E701992321F02091140130E006C020915F
+:103F600015018AE0289F900111244217530708F495
+:103F700085C08091E901C091EA01D091EB011091D7
+:103F8000EC01811107C0C11175C0D11173C01111AD
+:103F900071C074C09F3F19F09F5F9093E70118169E
+:103FA00024F40E94231E8093E9018091E90187FF98
+:103FB00005C00E94231E81958093E9011C1624F4FC
+:103FC0000E94231E8093EA018091EA0187FF05C0C9
+:103FD0000E94231E81958093EA016091E901662386
+:103FE00031F1C091EA01CC2311F1062E000C770BC0
+:103FF000880B990B0E94162323E333E343E35FE32B
+:104000000E947A230E94DE226093E9016C2FCC0F7C
+:10401000770B880B990B0E94162323E333E343E3CA
+:104020005FE30E947A230E94DE226093EA011D165C
+:1040300024F40E946C1E8093EB018091EB0187FFBA
+:1040400005C00E946C1E81958093EB01111624F42B
+:104050000E946C1E8093EC018091EC0187FF05C0EB
+:104060000E946C1E81958093EC01DF91CF911F918E
+:104070000C94921F9F3F09F08FCF97CFDF91CF9184
+:104080001F910895E8EEF1E085E0DF011D928A9529
+:10409000E9F71092E7011092E6010895833081F16B
+:1040A00028F4813059F08230D1F00895853009F438
+:1040B00049C0B8F1863009F456C0089580911501C1
+:1040C000262F30E0280F311D2F3F310524F4680FD3
+:1040D0006093150108958FEF8093150108958091E5
+:1040E0001401262F30E0280F311D2F3F310524F415
+:1040F000680F6093140108958FEF80931401089561
+:1041000080911301262F30E0280F311D2F3F3105FC
+:1041100024F4680F6093130108958FEF80931301C7
+:10412000089580911201262F30E0280F311D2F3F76
+:10413000310524F4680F6093120108958FEF809386
+:104140001201089580911101262F30E0280F311DB2
+:104150002F3F310524F4680F6093110108958FEF0C
+:1041600080931101089580911001262F30E0280FCF
+:10417000311D2F3F310524F4680F6093100108951D
+:104180008FEF809310010895833011F128F481306E
+:1041900049F0823091F00895853081F120F1863028
+:1041A000C1F1089580911501681720F4861B809352
+:1041B0001501089510921501089580911401681752
+:1041C00020F4861B80931401089510921401089521
+:1041D00080911301681720F4861B809313010895C2
+:1041E00010921301089580911201681720F4861B24
+:1041F0008093120108951092120108958091110187
+:10420000681720F4861B8093110108951092110104
+:10421000089580911001681720F4861B8093100187
+:1042200008951092100108950F931F938D3109F492
+:104230006BC008F03FC08E3009F47FC0C0F48730F7
+:1042400009F469C068F4863009F0B1C08091DE01DC
+:10425000817F8E7F8093DE0181E08093EE01A8C094
+:10426000883009F4A2C08B3009F49FC0A0C0863109
+:1042700009F49BC078F4803109F472C0813109F0EF
+:1042800096C00E94E21490910D0181E089278093ED
+:104290000D018BC0893109F488C08B3109F087C0CA
+:1042A0008091DE0181FB222720F991E0922790FB8B
+:1042B00081F94CC0853309F470C048F4873209F4A1
+:1042C0006CC008F459C0893209F467C070C08334E7
+:1042D00038F48A3308F04EC0883309F466C067C0EA
+:1042E000833409F45AC0883409F061C00E94E21492
+:1042F0000FEF13ED20E3015010402040E1F700C024
+:1043000000000E94581C51C00E9498220E9449102F
+:104310000E943F094AC09091DE01892F80958170EB
+:1043200080FB90F929F0966098609093DE0140C080
+:10433000997F977F9093DE0138C08091DE0182FBE8
+:10434000222720F991E0922790FB82F98093DE01E9
+:10435000992359F18091DE0181608093DE0125C0AF
+:104360008091DE0183FB222720F991E0922790FBC8
+:1043700083F9ECCF895301C08D5141E050E060E0FA
+:1043800070E08A019B0104C0000F111F221F331F20
+:104390008A95D2F7C901B80104C061E070E080E0FD
+:1043A00090E00E94A2180E94E21481E001C080E027
+:1043B0001F910F91089580E0089580E00895CF93B4
+:1043C000C82F8091EE01813079F018F08230E9F148
+:1043D00087C0E0910E01F0910F018081813169F079
+:1043E000823209F07FC009C0E0910E01F0910F0107
+:1043F0008081813111F0823261F48C2F0E94DB21A7
+:10440000811104C08C2F0E9414211DC081E090E016
+:104410001AC08C2F0E94DD21811114C0C43179F0A3
+:1044200048F4CB3079F0C03109F060C082E080936D
+:10443000EE0108C0C93219F0C83321F057C01092FC
+:10444000EE0154C081E0817053C0C93289F118F582
+:10445000C43171F1A8F4C73009F046C08AE08093F6
+:10446000150194E19093140193E0909313018093CC
+:10447000120188E08093110188E28093100134C01A
+:10448000CE51C63088F5EC2FF0E0E65DFE4F80811E
+:104490008093ED0129C0CE34E9F020F4CB3421F52E
+:1044A0006AE013C0C13579F0C235F1F461E00DC0A6
+:1044B0008091ED01882319F01092ED0115C081E083
+:1044C0008093EE0115C061E006C08091ED010E946D
+:1044D0004E200AC06AE08091ED010E94C42004C011
+:1044E0001092EE0180E004C081E002C080E0ABCF1A
+:1044F000CF910895E1E8F0E0808188608083808139
+:10450000816080838FB7F89493E09093890090ED59
+:10451000909388008FBF0895EFE6F0E0808182607D
+:1045200080830895EFE6F0E080818D7F8083089599
+:10453000EFE6F0E0908182E08927808308951F9262
+:104540000F920FB60F9211242F933F934F935F93C7
+:104550006F937F938F939F93AF93BF93EF93FF934B
+:104560008091EF019091F00101969093F00180937A
+:10457000EF01811103C082E00E943F09E091F00148
+:10458000E695E695F0E0E055FB4FE4918091EF0170
+:104590008E1303C080E00E943F09FF91EF91BF910D
+:1045A000AF919F918F917F916F915F914F913F91CB
+:1045B0002F910F900FBE0F901F9018950E94E5222B
+:1045C0006894B1110C94742308950E94592388F0C3
+:1045D0009F5798F0B92F9927B751B0F0E1F0660FC7
+:1045E000771F881F991F1AF0BA95C9F714C0B13008
+:1045F00091F00E947323B1E008950C947323672F08
+:10460000782F8827B85F39F0B93FCCF38695779536
+:104610006795B395D9F73EF490958095709561951F
+:104620007F4F8F4F9F4F0895E89409C097FB3EF44A
+:1046300090958095709561957F4F8F4F9F4F9923EF
+:10464000A9F0F92F96E9BB279395F695879577956D
+:104650006795B795F111F8CFFAF4BB0F11F460FF2D
+:104660001BC06F5F7F4F8F4F9F4F16C0882311F085
+:1046700096E911C0772321F09EE8872F762F05C099
+:10468000662371F096E8862F70E060E02AF09A9534
+:10469000660F771F881FDAF7880F9695879597F929
+:1046A000089557FD9058440F551F59F05F3F71F022
+:1046B0004795880F97FB991F61F09F3F79F0879589
+:1046C0000895121613061406551FF2CF4695F1DF12
+:1046D00008C0161617061806991FF1CF86957105A2
+:1046E000610508940895E894BB2766277727CB01D6
+:1046F00097F908950E948D230C94FE230E94F023C5
+:1047000038F00E94F72320F0952311F00C94E72352
+:104710000C94ED2311240C9474230E94512370F304
+:10472000959FC1F3950F50E0551F629FF001729F56
+:10473000BB27F00DB11D639FAA27F00DB11DAA1F65
+:10474000649F6627B00DA11D661F829F2227B00DB2
+:10475000A11D621F739FB00DA11D621F839FA00D3D
+:10476000611D221F749F3327A00D611D231F849F8D
+:10477000600D211D822F762F6A2F11249F575040E4
+:104780009AF0F1F088234AF0EE0FFF1FBB1F661F5F
+:10479000771F881F91505040A9F79E3F510580F028
+:1047A0000C94E7230C9474235F3FE4F3983ED4F316
+:1047B000869577956795B795F795E7959F5FC1F7CC
+:1047C000FE2B880F911D9695879597F9089597F977
+:1047D0009F6780E870E060E008959FEF80EC0895A7
+:1047E00000240A94161617061806090608950024D0
+:1047F0000A9412161306140605060895092E03944A
+:10480000000C11F4882352F0BB0F40F4BF2B11F4BD
+:1048100060FF04C06F5F7F4F8F4F9F4F089597FBDE
+:10482000072E16F4009407D077FD09D00E942924A2
+:1048300007FC05D03EF4909581959F4F08957095A3
+:1048400061957F4F0895EE0FFF1F0590F491E02DC5
+:104850000994AA1BBB1B51E107C0AA1FBB1FA617C7
+:10486000B70710F0A61BB70B881F991F5A95A9F719
+:1048700080959095BC01CD010895F999FECF92BD28
+:1048800081BDF89A992780B50895A8E1B0E042E08B
+:1048900050E00C946524262FF999FECF92BD81BD7E
+:1048A000F89A019700B4021639F01FBA20BD0FB66E
+:1048B000F894FA9AF99A0FBE08950196272F0E944C
+:1048C0004C240C944B24DC01CB01FC01F999FECF64
+:1048D00006C0F2BDE1BDF89A319600B40D92415088
+:0A48E0005040B8F70895F894FFCF98
+:1048EA0020024109CF09AC09780944090101CB0129
+:1048FA0028080A03140A3F4D363971042404EE03CA
+:10490A00B503480361037A0393030102030405060E
+:04491A000708090081
:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/dave/keymap.c b/keyboard/ergodox_ez/keymaps/dave/keymap.c
index 3ac2842fbf..e9480af3e9 100644
--- a/keyboard/ergodox_ez/keymaps/dave/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/dave/keymap.c
@@ -3,8 +3,8 @@
#include "action_layer.h"
#define BASE 0 // default layer
-#define PROG 1 // symbols
-#define NAVI 2 // navigation keys
+#define PROG 1 // programming
+#define NAVI 2 // navigation
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
@@ -18,16 +18,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| H | | B |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * |`/Ctrl| \ | | | LAlt | | RAlt | | [ | ] |'/Ctrl|
+ * |`/Ctrl| \ | | | LAlt | | RAlt | [ | ] | |'/Ctrl|
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
- * | PrtS | Apps | | Paus | CtAl |
+ * | PrtS | PrtS | | CtAl | CtAl |
* ,------+------+------| |------+------+------.
* | | | L1 | | L1 | | |
* | Spce | ~L2 +------| |------+ ~L1 | Spce |
* | | | LGui | | RGui | | |
* `--------------------' `--------------------'
*/
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
@@ -35,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_H,
CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO, KC_LALT,
- KC_PSCREEN, KC_APP,
+ KC_PSCREEN, KC_PSCREEN,
TO(PROG, ON_PRESS),
KC_SPC, MO(NAVI), KC_LGUI,
// right hand
@@ -43,8 +45,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_G, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER,
KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
- KC_RALT,KC_NO, KC_LBRC,KC_RBRC, CTL_T(KC_QUOT),
- KC_PAUS, MT(0x5, KC_NO),
+ KC_RALT,KC_LBRC,KC_RBRC,KC_NO, CTL_T(KC_QUOT),
+ MT(0x5, KC_NO), MT(0x5, KC_NO),
TO(PROG, ON_PRESS),
KC_RGUI, MO(PROG), KC_SPC
),
@@ -70,6 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
+// PROGRAMMING
[PROG] = KEYMAP(
// left hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -105,20 +108,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | MsLt | MsDn | MsRt | | |VolDn | Mute |VolUp | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
- * | Powr | Log | | | |
+ * | | | | | |
* ,------|------|------| |------+------+------.
* | | | L0 | | L0 | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
+// NAVIGATION
[NAVI] = KEYMAP(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
KC_TRNS, KC_HOME, KC_UP, KC_END, KC_INS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN,
KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
- KC_PWR, LCTL(LALT(KC_DELT)),
+ KC_TRNS, KC_TRNS,
TO(BASE, ON_PRESS),
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
diff --git a/keyboard/ergodox_ez/keymaps/dave/readme.md b/keyboard/ergodox_ez/keymaps/dave/readme.md
new file mode 100644
index 0000000000..aa0f9bd192
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/dave/readme.md
@@ -0,0 +1,38 @@
+This keymap is my preferred layout (after a certain amount of experimentation).
+The rationale behind the design is as follows:
+
+I grew up typing from a very early age and thus never learned the "correct" way
+to touch type (essentially, I'm self-taught). As a, result my fingers don't
+tend to stay on the "home keys" and occasionally my right hand wants to type
+keys that are on the left of the keyboard, and vice versa.
+
+Hence, despite liking the idea of split keyboards in principle, I've never been
+able to get on with them because the split simply doesn't work with my style of
+typing. The Ergodox solves this neatly by virtue of having a few extra keys in
+the "middle" of the keyboard which I can utilise for deliberate redundancy.
+Thus in this keymap there are two "6" keys (one on the left, one on the right)
+and likewise Y, H, G, and B are all duplicated to enable one-handed patterns
+that I use frequently (e.g. "byobu" with the right hand, "yes" with the left,
+etc.).
+
+I occasionally use the numeric pad for data entry, thus this is duplicated
+under the natural home position of the right hand in layer 1 (activated by
+holding one of the right thumb buttons), while the cursor keys are duplicated
+under the classic WASD gaming layout of the left hand in layer 2 (activated by
+holding one of the left thumb buttons). Various other useful keys also appear
+in these layers (brackets and symbols for coding in layer 1, navigation and
+F-keys in layer 2, etc.).
+
+Finally, modifier keys like Ctrl, Shift, and Alt, along with Backspace and
+Enter are all in traditional locations in an effort to reuse existing muscle
+memory as much as possible (keys like =, #, and ' are in layer 1). The layout
+maps are in the comments of keymap_dave.c so I won't bother duplicating them
+here.
+
+Oh, and the LEDs are rather pimped ... because I could!
+
+Anyway, although I'm sure this keymap won't be to many people's taste you might
+find some interesting ideas in here for your own layouts. Do tweet me
+(@waveform80) if you have any questions / suggestions / bugs.
+
+Dave.
diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md b/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md
new file mode 100644
index 0000000000..e075e3cd7d
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md
@@ -0,0 +1,99 @@
+# Ergodox Spanish Dvorak Layout
+ * See spanish dvorak layout [here](http://djelibeibi.unex.es/dvorak/)
+ * Software layout must be set to SPANISH QWERTY to work properly
+
+## Keymap Layers
+ - L0: spanish dvorak with some customizations (see layout below)
+ - L1: auxiliary keys (includes qwerty shortcuts, numpad...)
+ - L2: qwerty layout with customizations
+
+
+### Keymap 0: Base layer
+Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
+
+<pre><code>
+
+,--------------------------------------------------. ,--------------------------------------------------.
+| \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ |
+|--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------|
+|Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl |
+|--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------|
+| {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
+'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT|
+ '----------------------------------' '----------------------------------'
+ ,-------------. ,-------------.
+ |F5/CAG|F6/~L1| |F7/~L1|F8/CAG|
+ ,------|------|------| |------+--------+------.
+ | | |F4/CA | |F11/CA| | |
+ | ENTER| TAB |------| |------| BSPC | SPACE|
+ | | |F3/SA | |F12/SA| | |
+ '--------------------' '----------------------'
+ CAG = CTRL-ALT-GUI
+ CA = CTRL-ALT
+ SA = SHIFT-ALT
+
+</pre></code>
+
+### Keymap 1: Aux layer
+
+<pre><code>
+
+,--------------------------------------------------. ,--------------------------------------------------.
+| | F1 | F2 | F3 | F4 | F5 | SLEEP| | PWR | F6 | F7 | F8 | F9 | F10 | F11 |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | < | > | MsUp | | | | | ~L0 | | 7 | 8 | 9 | * | '^ |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | |MsLeft|MsDown|MsRght| |------| |------| | 4 | 5 | 6 | + | Ç |
+|--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------|
+|CAPSLOCK| | | | | | | | | | 1 | 2 | 3 | / | |
+'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V| | | . | 0 | = | |
+ '----------------------------------' '----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | Play |
+ ,------|------|------| |------+------+------.
+ | | | | | VolUp| | |
+ | Lclk | Rclk |------| |------| Prev | Next |
+ | | | L2 | | VolDn| | |
+ '--------------------' '--------------------'
+
+</pre></code>
+
+### Keymap 2: QWERTY layer
+
+<pre><code>
+
+,--------------------------------------------------. ,--------------------------------------------------.
+| \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| TRANS | Q | W | E | R | T |MEH_T | | TRANS| Y | U | I | O | P |ALL_T/+ |
+|--------+------+------+------+------+------| DEL | | |------+------+------+------+------+--------|
+|Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | Ñ |'/RCtrl |
+|--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------|
+| {/LSft | Z | X | C | V | B | | | | N | M | , | . | - | }/RSft |
+'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
+ |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT|
+ '----------------------------------' '----------------------------------'
+ ,-------------. ,-------------.
+ |F5/CAG| TRANS| | TRANS|F8/CAG|
+ ,------|------|------| |------+--------+------.
+ | | |F4/CA | |F11/CA| | |
+ | ENTER| TAB |------| |------| BSPC | SPACE|
+ | | | TRANS| |F12/SA| | |
+ '--------------------' '----------------------'
+ CAG = CTRL-ALT-GUI
+ CA = CTRL-ALT
+ SA = SHIFT-ALT
+
+</pre></code>
+
+
+## Generation of .hex file
+> [Download scripts from here](https://github.com/johgh/keyboard/tree/master/ergodox)
+
+> Execute install.sh and generate.sh scripts.
+
+> Flash with `teensy_loader` binary (should be installed from previous step)
diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex b/keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex
new file mode 100644
index 0000000000..9d41778092
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex
@@ -0,0 +1,5371 @@
+
+
+
+
+<!DOCTYPE html>
+<html lang="en" class=" is-copy-enabled is-u2f-enabled">
+ <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
+ <meta charset='utf-8'>
+
+ <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/frameworks-3514e6d8825ab9f55728f0030acba498e5da5b85ebc8abc35f0f466ac9d2bdda.css" integrity="sha256-NRTm2IJaufVXKPADCsukmOXaW4XryKvDXw9GasnSvdo=" media="all" rel="stylesheet" />
+ <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/github-92b560dee7dafd08f0965a6d49e5e4298b3d856899681b308fd7809d9c35367b.css" integrity="sha256-krVg3ufa/QjwllptSeXkKYs9hWiZaBswj9eAnZw1Nns=" media="all" rel="stylesheet" />
+
+
+
+
+
+ <link as="script" href="https://assets-cdn.github.com/assets/frameworks-ea5bbb2a837377ffde53e1099e5909c8df4d36cc5e90c05aeb3694b157df7e4d.js" rel="preload" />
+
+ <link as="script" href="https://assets-cdn.github.com/assets/github-391829145dbc07158dde112aa636b7ac8b58f7726527ce710bd56118ae1d2f57.js" rel="preload" />
+
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta http-equiv="Content-Language" content="en">
+ <meta name="viewport" content="width=device-width">
+
+
+ <title>keyboard/dvorak_spanish.hex at master · johgh/keyboard</title>
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png">
+ <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
+ <meta property="fb:app_id" content="1401488693436528">
+
+ <meta content="https://avatars0.githubusercontent.com/u/8402706?v=3&amp;s=400" name="twitter:image:src" /><meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="johgh/keyboard" name="twitter:title" /><meta content="My keyboard layouts" name="twitter:description" />
+ <meta content="https://avatars0.githubusercontent.com/u/8402706?v=3&amp;s=400" property="og:image" /><meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="johgh/keyboard" property="og:title" /><meta content="https://github.com/johgh/keyboard" property="og:url" /><meta content="My keyboard layouts" property="og:description" />
+ <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+ <link rel="assets" href="https://assets-cdn.github.com/">
+ <link rel="web-socket" href="wss://live.github.com/_sockets/ODQwMjcwNjplYzk1N2I2ZWI2ZmQ4NDkxYzYwOGYyNTI5NTU2ZGU4MDo5NzUzYjgxYzU5YjA2Y2E3NWRkMzFkYmU1NGVmNzVjNWZiNjhkOTc2ZDNmYmQ2MjA3YTEyNmUwZjJhMGJiYWM1--b3bf68e80e5b864f72da0ef5dee160dae6a5eb69">
+ <meta name="pjax-timeout" content="1000">
+ <link rel="sudo-modal" href="/sessions/sudo_modal">
+
+ <meta name="msapplication-TileImage" content="/windows-tile.png">
+ <meta name="msapplication-TileColor" content="#ffffff">
+ <meta name="selected-link" value="repo_source" data-pjax-transient>
+
+ <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+ <meta name="google-analytics" content="UA-3769691-2">
+
+<meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="2F3F4253:55E8:1DFD2F84:574C7A03" name="octolytics-dimension-request_id" /><meta content="8402706" name="octolytics-actor-id" /><meta content="johgh" name="octolytics-actor-login" /><meta content="c7f8908bf6490d3f8a93067aaad799b39f00fe93f431d2c8e1af7a284d27053c" name="octolytics-actor-hash" />
+<meta content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" name="analytics-location" />
+
+
+
+ <meta class="js-ga-set" name="dimension1" content="Logged In">
+
+
+
+ <meta name="hostname" content="github.com">
+ <meta name="user-login" content="johgh">
+
+ <meta name="expected-hostname" content="github.com">
+ <meta name="js-proxy-site-detection-payload" content="NzY3MTQyZDM1NGNkODk4MGRiNjE4YmFjMjhlMTJiYzU2ODgzYThiYjE1ZWVlN2Q0NDcwZTg5MjQyNWVhZGRlM3x7InJlbW90ZV9hZGRyZXNzIjoiNDcuNjMuNjYuODMiLCJyZXF1ZXN0X2lkIjoiMkYzRjQyNTM6NTVFODoxREZEMkY4NDo1NzRDN0EwMyIsInRpbWVzdGFtcCI6MTQ2NDYyOTc3MH0=">
+
+
+ <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#4078c0">
+ <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
+
+ <meta name="html-safe-nonce" content="96bc37131ccc1986c2a0d20d90faf397412de2be">
+ <meta content="28f444bd9d5d742a073b405185ff204d5126d5a2" name="form-nonce" />
+
+ <meta http-equiv="x-pjax-version" content="e7cec84ad9772b41eb2a7820f7affce2">
+
+
+
+ <meta name="description" content="My keyboard layouts">
+ <meta name="go-import" content="github.com/johgh/keyboard git https://github.com/johgh/keyboard.git">
+
+ <meta content="8402706" name="octolytics-dimension-user_id" /><meta content="johgh" name="octolytics-dimension-user_login" /><meta content="58259078" name="octolytics-dimension-repository_id" /><meta content="johgh/keyboard" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="58259078" name="octolytics-dimension-repository_network_root_id" /><meta content="johgh/keyboard" name="octolytics-dimension-repository_network_root_nwo" />
+ <link href="https://github.com/johgh/keyboard/commits/master.atom" rel="alternate" title="Recent Commits to keyboard:master" type="application/atom+xml">
+
+
+ <link rel="canonical" href="https://github.com/johgh/keyboard/blob/master/ergodox/dvorak_spanish/dvorak_spanish.hex" data-pjax-transient>
+ </head>
+
+
+ <body class="logged-in env-production linux vis-public page-blob">
+ <div id="js-pjax-loader-bar" class="pjax-loader-bar"></div>
+ <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
+
+
+
+
+
+
+
+ <div class="header header-logged-in true" role="banner">
+ <div class="container clearfix">
+
+ <a class="header-logo-invertocat" href="https://github.com/" data-hotkey="g d" aria-label="Homepage" data-ga-click="Header, go to dashboard, icon:logo">
+ <svg aria-hidden="true" class="octicon octicon-mark-github" height="28" version="1.1" viewBox="0 0 16 16" width="28"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59 0.4 0.07 0.55-0.17 0.55-0.38 0-0.19-0.01-0.82-0.01-1.49-2.01 0.37-2.53-0.49-2.69-0.94-0.09-0.23-0.48-0.94-0.82-1.13-0.28-0.15-0.68-0.52-0.01-0.53 0.63-0.01 1.08 0.58 1.23 0.82 0.72 1.21 1.87 0.87 2.33 0.66 0.07-0.52 0.28-0.87 0.51-1.07-1.78-0.2-3.64-0.89-3.64-3.95 0-0.87 0.31-1.59 0.82-2.15-0.08-0.2-0.36-1.02 0.08-2.12 0 0 0.67-0.21 2.2 0.82 0.64-0.18 1.32-0.27 2-0.27 0.68 0 1.36 0.09 2 0.27 1.53-1.04 2.2-0.82 2.2-0.82 0.44 1.1 0.16 1.92 0.08 2.12 0.51 0.56 0.82 1.27 0.82 2.15 0 3.07-1.87 3.75-3.65 3.95 0.29 0.25 0.54 0.73 0.54 1.48 0 1.07-0.01 1.93-0.01 2.2 0 0.21 0.15 0.46 0.55 0.38C13.71 14.53 16 11.53 16 8 16 3.58 12.42 0 8 0z"></path></svg>
+</a>
+
+
+ <div class="header-search scoped-search site-scoped-search js-site-search" role="search">
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/johgh/keyboard/search" class="js-site-search-form" data-scoped-search-url="/johgh/keyboard/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+ <label class="form-control header-search-wrapper js-chromeless-input-container">
+ <div class="header-search-scope">This repository</div>
+ <input type="text"
+ class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable"
+ data-hotkey="s"
+ name="q"
+ placeholder="Search"
+ aria-label="Search this repository"
+ data-unscoped-placeholder="Search GitHub"
+ data-scoped-placeholder="Search"
+ tabindex="1"
+ autocapitalize="off">
+ </label>
+</form></div>
+
+
+ <ul class="header-nav left" role="navigation">
+ <li class="header-nav-item">
+ <a href="/pulls" class="js-selected-navigation-item header-nav-link" data-ga-click="Header, click, Nav menu - item:pulls context:user" data-hotkey="g p" data-selected-links="/pulls /pulls/assigned /pulls/mentioned /pulls">
+ Pull requests
+</a> </li>
+ <li class="header-nav-item">
+ <a href="/issues" class="js-selected-navigation-item header-nav-link" data-ga-click="Header, click, Nav menu - item:issues context:user" data-hotkey="g i" data-selected-links="/issues /issues/assigned /issues/mentioned /issues">
+ Issues
+</a> </li>
+ <li class="header-nav-item">
+ <a class="header-nav-link" href="https://gist.github.com/" data-ga-click="Header, go to gist, text:gist">Gist</a>
+ </li>
+ </ul>
+
+
+<ul class="header-nav user-nav right" id="user-links">
+ <li class="header-nav-item">
+
+ <a href="/notifications" aria-label="You have no unread notifications" class="header-nav-link notification-indicator tooltipped tooltipped-s js-socket-channel js-notification-indicator" data-channel="notification-changed-v2:8402706" data-ga-click="Header, go to notifications, icon:read" data-hotkey="g n">
+ <span class="mail-status "></span>
+ <svg aria-hidden="true" class="octicon octicon-bell" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M14 12v1H0v-1l0.73-0.58c0.77-0.77 0.81-2.55 1.19-4.42 0.77-3.77 4.08-5 4.08-5 0-0.55 0.45-1 1-1s1 0.45 1 1c0 0 3.39 1.23 4.16 5 0.38 1.88 0.42 3.66 1.19 4.42l0.66 0.58z m-7 4c1.11 0 2-0.89 2-2H5c0 1.11 0.89 2 2 2z"></path></svg>
+</a>
+ </li>
+
+ <li class="header-nav-item dropdown js-menu-container">
+ <a class="header-nav-link tooltipped tooltipped-s js-menu-target" href="/new"
+ aria-label="Create new…"
+ data-ga-click="Header, create new, icon:add">
+ <svg aria-hidden="true" class="octicon octicon-plus left" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 9H7v5H5V9H0V7h5V2h2v5h5v2z"></path></svg>
+ <span class="dropdown-caret"></span>
+ </a>
+
+ <div class="dropdown-menu-content js-menu-content">
+ <ul class="dropdown-menu dropdown-menu-sw">
+
+<a class="dropdown-item" href="/new" data-ga-click="Header, create new repository">
+ New repository
+</a>
+
+ <a class="dropdown-item" href="/new/import" data-ga-click="Header, import a repository">
+ Import repository
+ </a>
+
+
+ <a class="dropdown-item" href="/organizations/new" data-ga-click="Header, create new organization">
+ New organization
+ </a>
+
+
+
+ <div class="dropdown-divider"></div>
+ <div class="dropdown-header">
+ <span title="johgh/keyboard">This repository</span>
+ </div>
+ <a class="dropdown-item" href="/johgh/keyboard/issues/new" data-ga-click="Header, create new issue">
+ New issue
+ </a>
+ <a class="dropdown-item" href="/johgh/keyboard/settings/collaboration" data-ga-click="Header, create new collaborator">
+ New collaborator
+ </a>
+
+ </ul>
+ </div>
+ </li>
+
+ <li class="header-nav-item dropdown js-menu-container">
+ <a class="header-nav-link name tooltipped tooltipped-sw js-menu-target" href="/johgh"
+ aria-label="View profile and more"
+ data-ga-click="Header, show menu, icon:avatar">
+ <img alt="@johgh" class="avatar" height="20" src="https://avatars0.githubusercontent.com/u/8402706?v=3&amp;s=40" width="20" />
+ <span class="dropdown-caret"></span>
+ </a>
+
+ <div class="dropdown-menu-content js-menu-content">
+ <div class="dropdown-menu dropdown-menu-sw">
+ <div class=" dropdown-header header-nav-current-user css-truncate">
+ Signed in as <strong class="css-truncate-target">johgh</strong>
+
+ </div>
+
+
+ <div class="dropdown-divider"></div>
+
+ <a class="dropdown-item" href="/johgh" data-ga-click="Header, go to profile, text:your profile">
+ Your profile
+ </a>
+ <a class="dropdown-item" href="/stars" data-ga-click="Header, go to starred repos, text:your stars">
+ Your stars
+ </a>
+ <a class="dropdown-item" href="/explore" data-ga-click="Header, go to explore, text:explore">
+ Explore
+ </a>
+ <a class="dropdown-item" href="/integrations" data-ga-click="Header, go to integrations, text:integrations">
+ Integrations
+ </a>
+ <a class="dropdown-item" href="https://help.github.com" data-ga-click="Header, go to help, text:help">
+ Help
+ </a>
+
+
+ <div class="dropdown-divider"></div>
+
+ <a class="dropdown-item" href="/settings/profile" data-ga-click="Header, go to settings, icon:settings">
+ Settings
+ </a>
+
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/logout" class="logout-form" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="+XodOWOKV2qhNVaih0sfooP0Lk1Hb8ZAjBSaV905IlPw0ey4dZ5MbzXx+FxqBR0EBSVq6fDwao88f69abdVTfQ==" /></div>
+ <button class="dropdown-item dropdown-signout" data-ga-click="Header, sign out, icon:logout">
+ Sign out
+ </button>
+</form>
+ </div>
+ </div>
+ </li>
+</ul>
+
+
+
+ </div>
+</div>
+
+
+
+
+
+ <div id="start-of-content" class="accessibility-aid"></div>
+
+ <div id="js-flash-container">
+</div>
+
+
+ <div role="main" class="main-content">
+ <div itemscope itemtype="http://schema.org/SoftwareSourceCode">
+ <div id="js-repo-pjax-container" data-pjax-container>
+
+<div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav">
+ <div class="container repohead-details-container">
+
+
+
+<ul class="pagehead-actions">
+
+ <li>
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/notifications/subscribe" class="js-social-container" data-autosubmit="true" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" data-remote="true" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="f797ztd5TsuzQ5g9R6knDUTPO2IVEFpEIeU+5aa6U2NuHB5HDPxoXez+Ele95bMWYaRLcKkoQK+H44xomAgfJA==" /></div> <input class="form-control" id="repository_id" name="repository_id" type="hidden" value="58259078" />
+
+ <div class="select-menu js-menu-container js-select-menu">
+ <a href="/johgh/keyboard/subscription"
+ class="btn btn-sm btn-with-count select-menu-button js-menu-target" role="button" tabindex="0" aria-haspopup="true"
+ data-ga-click="Repository, click Watch settings, action:blob#show">
+ <span class="js-select-button">
+ <svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6c4.94 0 7.94-6 7.94-6S13 2 8.06 2z m-0.06 10c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4z m2-4c0 1.11-0.89 2-2 2s-2-0.89-2-2 0.89-2 2-2 2 0.89 2 2z"></path></svg>
+ Unwatch
+ </span>
+ </a>
+ <a class="social-count js-social-count" href="/johgh/keyboard/watchers">
+ 1
+ </a>
+
+ <div class="select-menu-modal-holder">
+ <div class="select-menu-modal subscription-menu-modal js-menu-content" aria-hidden="true">
+ <div class="select-menu-header js-navigation-enable" tabindex="-1">
+ <svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75-1.48-1.48 3.75-3.75L0.77 4.25l1.48-1.48 3.75 3.75 3.75-3.75 1.48 1.48-3.75 3.75z"></path></svg>
+ <span class="select-menu-title">Notifications</span>
+ </div>
+
+ <div class="select-menu-list js-navigation-container" role="menu">
+
+ <div class="select-menu-item js-navigation-item " role="menuitem" tabindex="0">
+ <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5L4 13 0 9l1.5-1.5 2.5 2.5 6.5-6.5 1.5 1.5z"></path></svg>
+ <div class="select-menu-item-text">
+ <input id="do_included" name="do" type="radio" value="included" />
+ <span class="select-menu-item-heading">Not watching</span>
+ <span class="description">Be notified when participating or @mentioned.</span>
+ <span class="js-select-button-text hidden-select-button-text">
+ <svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6c4.94 0 7.94-6 7.94-6S13 2 8.06 2z m-0.06 10c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4z m2-4c0 1.11-0.89 2-2 2s-2-0.89-2-2 0.89-2 2-2 2 0.89 2 2z"></path></svg>
+ Watch
+ </span>
+ </div>
+ </div>
+
+ <div class="select-menu-item js-navigation-item selected" role="menuitem" tabindex="0">
+ <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5L4 13 0 9l1.5-1.5 2.5 2.5 6.5-6.5 1.5 1.5z"></path></svg>
+ <div class="select-menu-item-text">
+ <input checked="checked" id="do_subscribed" name="do" type="radio" value="subscribed" />
+ <span class="select-menu-item-heading">Watching</span>
+ <span class="description">Be notified of all conversations.</span>
+ <span class="js-select-button-text hidden-select-button-text">
+ <svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6c4.94 0 7.94-6 7.94-6S13 2 8.06 2z m-0.06 10c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4z m2-4c0 1.11-0.89 2-2 2s-2-0.89-2-2 0.89-2 2-2 2 0.89 2 2z"></path></svg>
+ Unwatch
+ </span>
+ </div>
+ </div>
+
+ <div class="select-menu-item js-navigation-item " role="menuitem" tabindex="0">
+ <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5L4 13 0 9l1.5-1.5 2.5 2.5 6.5-6.5 1.5 1.5z"></path></svg>
+ <div class="select-menu-item-text">
+ <input id="do_ignore" name="do" type="radio" value="ignore" />
+ <span class="select-menu-item-heading">Ignoring</span>
+ <span class="description">Never be notified.</span>
+ <span class="js-select-button-text hidden-select-button-text">
+ <svg aria-hidden="true" class="octicon octicon-mute" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M8 2.81v10.38c0 0.67-0.81 1-1.28 0.53L3 10H1c-0.55 0-1-0.45-1-1V7c0-0.55 0.45-1 1-1h2l3.72-3.72c0.47-0.47 1.28-0.14 1.28 0.53z m7.53 3.22l-1.06-1.06-1.97 1.97-1.97-1.97-1.06 1.06 1.97 1.97-1.97 1.97 1.06 1.06 1.97-1.97 1.97 1.97 1.06-1.06-1.97-1.97 1.97-1.97z"></path></svg>
+ Stop ignoring
+ </span>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+ </div>
+</form>
+ </li>
+
+ <li>
+
+ <div class="js-toggler-container js-social-container starring-container ">
+
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/johgh/keyboard/unstar" class="starred" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" data-remote="true" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="9A6+ZzRASK6KFvr/l3mD5fdqF6wAutGyXcHd/9130Jyt/nJTM2+0QZbzPe1wh8z3boeD9BwofxkUcUFuamo4Vg==" /></div>
+ <button
+ class="btn btn-sm btn-with-count js-toggler-target"
+ aria-label="Unstar this repository" title="Unstar johgh/keyboard"
+ data-ga-click="Repository, click unstar button, action:blob#show; text:Unstar">
+ <svg aria-hidden="true" class="octicon octicon-star" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M14 6l-4.9-0.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14l4.33-2.33 4.33 2.33L10.4 9.26 14 6z"></path></svg>
+ Unstar
+ </button>
+ <a class="social-count js-social-count" href="/johgh/keyboard/stargazers">
+ 0
+ </a>
+</form>
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/johgh/keyboard/star" class="unstarred" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" data-remote="true" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="CAPVEEQSSx3LaHYWOp68GDX/WuflV61vhOh8IuCmd964inwPxiXoLYYiUTnlqzXaEt30NeCFUneoxaosn8Etgw==" /></div>
+ <button
+ class="btn btn-sm btn-with-count js-toggler-target"
+ aria-label="Star this repository" title="Star johgh/keyboard"
+ data-ga-click="Repository, click star button, action:blob#show; text:Star">
+ <svg aria-hidden="true" class="octicon octicon-star" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M14 6l-4.9-0.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14l4.33-2.33 4.33 2.33L10.4 9.26 14 6z"></path></svg>
+ Star
+ </button>
+ <a class="social-count js-social-count" href="/johgh/keyboard/stargazers">
+ 0
+ </a>
+</form> </div>
+
+ </li>
+
+ <li>
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/johgh/keyboard/fork" class="btn-with-count" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="TkLrGh7KM4+GzHjrSCT3n2kES2RQWpBwpod3gLNn1itfZMlNQss5N6fBtlSb7wTp6cdW2i9jN0j7FSK5k3ClmQ==" /></div>
+ <button
+ type="submit"
+ class="btn btn-sm btn-with-count"
+ data-ga-click="Repository, show fork modal, action:blob#show; text:Fork"
+ title="Fork your own copy of johgh/keyboard to your account"
+ aria-label="Fork your own copy of johgh/keyboard to your account">
+ <svg aria-hidden="true" class="octicon octicon-repo-forked" height="16" version="1.1" viewBox="0 0 10 16" width="10"><path d="M8 1c-1.11 0-2 0.89-2 2 0 0.73 0.41 1.38 1 1.72v1.28L5 8 3 6v-1.28c0.59-0.34 1-0.98 1-1.72 0-1.11-0.89-2-2-2S0 1.89 0 3c0 0.73 0.41 1.38 1 1.72v1.78l3 3v1.78c-0.59 0.34-1 0.98-1 1.72 0 1.11 0.89 2 2 2s2-0.89 2-2c0-0.73-0.41-1.38-1-1.72V9.5l3-3V4.72c0.59-0.34 1-0.98 1-1.72 0-1.11-0.89-2-2-2zM2 4.2c-0.66 0-1.2-0.55-1.2-1.2s0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2-0.55 1.2-1.2 1.2z m3 10c-0.66 0-1.2-0.55-1.2-1.2s0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2-0.55 1.2-1.2 1.2z m3-10c-0.66 0-1.2-0.55-1.2-1.2s0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2-0.55 1.2-1.2 1.2z"></path></svg>
+ Fork
+ </button>
+</form>
+ <a href="/johgh/keyboard/network" class="social-count">
+ 0
+ </a>
+ </li>
+</ul>
+
+ <h1 class="entry-title public ">
+ <svg aria-hidden="true" class="octicon octicon-repo" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M4 9h-1v-1h1v1z m0-3h-1v1h1v-1z m0-2h-1v1h1v-1z m0-2h-1v1h1v-1z m8-1v12c0 0.55-0.45 1-1 1H6v2l-1.5-1.5-1.5 1.5V14H1c-0.55 0-1-0.45-1-1V1C0 0.45 0.45 0 1 0h10c0.55 0 1 0.45 1 1z m-1 10H1v2h2v-1h3v1h5V11z m0-10H2v9h9V1z"></path></svg>
+ <span class="author" itemprop="author"><a href="/johgh" class="url fn" rel="author">johgh</a></span><!--
+--><span class="path-divider">/</span><!--
+--><strong itemprop="name"><a href="/johgh/keyboard" data-pjax="#js-repo-pjax-container">keyboard</a></strong>
+
+</h1>
+
+ </div>
+ <div class="container">
+
+<nav class="reponav js-repo-nav js-sidenav-container-pjax"
+ itemscope
+ itemtype="http://schema.org/BreadcrumbList"
+ role="navigation"
+ data-pjax="#js-repo-pjax-container">
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a href="/johgh/keyboard" aria-selected="true" class="js-selected-navigation-item selected reponav-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /johgh/keyboard" itemprop="url">
+ <svg aria-hidden="true" class="octicon octicon-code" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M9.5 3l-1.5 1.5 3.5 3.5L8 11.5l1.5 1.5 4.5-5L9.5 3zM4.5 3L0 8l4.5 5 1.5-1.5L2.5 8l3.5-3.5L4.5 3z"></path></svg>
+ <span itemprop="name">Code</span>
+ <meta itemprop="position" content="1">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a href="/johgh/keyboard/issues" class="js-selected-navigation-item reponav-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /johgh/keyboard/issues" itemprop="url">
+ <svg aria-hidden="true" class="octicon octicon-issue-opened" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7S10.14 13.7 7 13.7 1.3 11.14 1.3 8s2.56-5.7 5.7-5.7m0-1.3C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7S10.86 1 7 1z m1 3H6v5h2V4z m0 6H6v2h2V10z"></path></svg>
+ <span itemprop="name">Issues</span>
+ <span class="counter">0</span>
+ <meta itemprop="position" content="2">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a href="/johgh/keyboard/pulls" class="js-selected-navigation-item reponav-item" data-hotkey="g p" data-selected-links="repo_pulls /johgh/keyboard/pulls" itemprop="url">
+ <svg aria-hidden="true" class="octicon octicon-git-pull-request" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M11 11.28c0-1.73 0-6.28 0-6.28-0.03-0.78-0.34-1.47-0.94-2.06s-1.28-0.91-2.06-0.94c0 0-1.02 0-1 0V0L4 3l3 3V4h1c0.27 0.02 0.48 0.11 0.69 0.31s0.3 0.42 0.31 0.69v6.28c-0.59 0.34-1 0.98-1 1.72 0 1.11 0.89 2 2 2s2-0.89 2-2c0-0.73-0.41-1.38-1-1.72z m-1 2.92c-0.66 0-1.2-0.55-1.2-1.2s0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2-0.55 1.2-1.2 1.2zM4 3c0-1.11-0.89-2-2-2S0 1.89 0 3c0 0.73 0.41 1.38 1 1.72 0 1.55 0 5.56 0 6.56-0.59 0.34-1 0.98-1 1.72 0 1.11 0.89 2 2 2s2-0.89 2-2c0-0.73-0.41-1.38-1-1.72V4.72c0.59-0.34 1-0.98 1-1.72z m-0.8 10c0 0.66-0.55 1.2-1.2 1.2s-1.2-0.55-1.2-1.2 0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2z m-1.2-8.8c-0.66 0-1.2-0.55-1.2-1.2s0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2-0.55 1.2-1.2 1.2z"></path></svg>
+ <span itemprop="name">Pull requests</span>
+ <span class="counter">0</span>
+ <meta itemprop="position" content="3">
+</a> </span>
+
+ <a href="/johgh/keyboard/wiki" class="js-selected-navigation-item reponav-item" data-hotkey="g w" data-selected-links="repo_wiki /johgh/keyboard/wiki">
+ <svg aria-hidden="true" class="octicon octicon-book" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M2 5h4v1H2v-1z m0 3h4v-1H2v1z m0 2h4v-1H2v1z m11-5H9v1h4v-1z m0 2H9v1h4v-1z m0 2H9v1h4v-1z m2-6v9c0 0.55-0.45 1-1 1H8.5l-1 1-1-1H1c-0.55 0-1-0.45-1-1V3c0-0.55 0.45-1 1-1h5.5l1 1 1-1h5.5c0.55 0 1 0.45 1 1z m-8 0.5l-0.5-0.5H1v9h6V3.5z m7-0.5H8.5l-0.5 0.5v8.5h6V3z"></path></svg>
+ Wiki
+</a>
+
+ <a href="/johgh/keyboard/pulse" class="js-selected-navigation-item reponav-item" data-selected-links="pulse /johgh/keyboard/pulse">
+ <svg aria-hidden="true" class="octicon octicon-pulse" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38 8H0V10h3.6L4.5 8.2l0.9 5.4L9 8.5l1.6 1.5H14V8H11.5z"></path></svg>
+ Pulse
+</a>
+ <a href="/johgh/keyboard/graphs" class="js-selected-navigation-item reponav-item" data-selected-links="repo_graphs repo_contributors /johgh/keyboard/graphs">
+ <svg aria-hidden="true" class="octicon octicon-graph" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M16 14v1H0V0h1v14h15z m-11-1H3V8h2v5z m4 0H7V3h2v10z m4 0H11V6h2v7z"></path></svg>
+ Graphs
+</a>
+ <a href="/johgh/keyboard/settings" class="js-selected-navigation-item reponav-item" data-selected-links="repo_settings repo_branch_settings hooks /johgh/keyboard/settings">
+ <svg aria-hidden="true" class="octicon octicon-gear" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M14 8.77V7.17l-1.94-0.64-0.45-1.09 0.88-1.84-1.13-1.13-1.81 0.91-1.09-0.45-0.69-1.92H6.17l-0.63 1.94-1.11 0.45-1.84-0.88-1.13 1.13 0.91 1.81-0.45 1.09L0 7.23v1.59l1.94 0.64 0.45 1.09-0.88 1.84 1.13 1.13 1.81-0.91 1.09 0.45 0.69 1.92h1.59l0.63-1.94 1.11-0.45 1.84 0.88 1.13-1.13-0.92-1.81 0.47-1.09 1.92-0.69zM7 11c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"></path></svg>
+ Settings
+</a>
+</nav>
+
+ </div>
+</div>
+
+<div class="container new-discussion-timeline experiment-repo-nav">
+ <div class="repository-content">
+
+
+
+<a href="/johgh/keyboard/blob/ab4c46c678233f6082bb057e59bd1facade3e5a3/ergodox/dvorak_spanish/dvorak_spanish.hex" class="hidden js-permalink-shortcut" data-hotkey="y">Permalink</a>
+
+<!-- blob contrib key: blob_contributors:v21:3c9a595e7cf64fe08b296fdf57e4ba32 -->
+
+<div class="file-navigation js-zeroclipboard-container">
+
+<div class="select-menu branch-select-menu js-menu-container js-select-menu left">
+ <button class="btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w"
+ title="master"
+ type="button" aria-label="Switch branches or tags" tabindex="0" aria-haspopup="true">
+ <i>Branch:</i>
+ <span class="js-select-button css-truncate-target">master</span>
+ </button>
+
+ <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax aria-hidden="true">
+
+ <div class="select-menu-modal">
+ <div class="select-menu-header">
+ <svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75-1.48-1.48 3.75-3.75L0.77 4.25l1.48-1.48 3.75 3.75 3.75-3.75 1.48 1.48-3.75 3.75z"></path></svg>
+ <span class="select-menu-title">Switch branches/tags</span>
+ </div>
+
+ <div class="select-menu-filters">
+ <div class="select-menu-text-filter">
+ <input type="text" aria-label="Find or create a branch…" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Find or create a branch…">
+ </div>
+ <div class="select-menu-tabs">
+ <ul>
+ <li class="select-menu-tab">
+ <a href="#" data-tab-filter="branches" data-filter-placeholder="Find or create a branch…" class="js-select-menu-tab" role="tab">Branches</a>
+ </li>
+ <li class="select-menu-tab">
+ <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu">
+
+ <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+ <a class="select-menu-item js-navigation-item js-navigation-open selected"
+ href="/johgh/keyboard/blob/master/ergodox/dvorak_spanish/dvorak_spanish.hex"
+ data-name="master"
+ data-skip-pjax="true"
+ rel="nofollow">
+ <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M12 5L4 13 0 9l1.5-1.5 2.5 2.5 6.5-6.5 1.5 1.5z"></path></svg>
+ <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text" title="master">
+ master
+ </span>
+ </a>
+ </div>
+
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/johgh/keyboard/branches" class="js-create-branch select-menu-item select-menu-new-item-form js-navigation-item js-new-item-form" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="eqr2+jkq/i0OVGOdWjBeradS5NuV5Awtfm3VeKOA1dzLRV3xH1xNXVEbNlekX7TJtQx/gDTpucEMsJBUR96nIA==" /></div>
+ <svg aria-hidden="true" class="octicon octicon-git-branch select-menu-item-icon" height="16" version="1.1" viewBox="0 0 10 16" width="10"><path d="M10 5c0-1.11-0.89-2-2-2s-2 0.89-2 2c0 0.73 0.41 1.38 1 1.72v0.3c-0.02 0.52-0.23 0.98-0.63 1.38s-0.86 0.61-1.38 0.63c-0.83 0.02-1.48 0.16-2 0.45V4.72c0.59-0.34 1-0.98 1-1.72 0-1.11-0.89-2-2-2S0 1.89 0 3c0 0.73 0.41 1.38 1 1.72v6.56C0.41 11.63 0 12.27 0 13c0 1.11 0.89 2 2 2s2-0.89 2-2c0-0.53-0.2-1-0.53-1.36 0.09-0.06 0.48-0.41 0.59-0.47 0.25-0.11 0.56-0.17 0.94-0.17 1.05-0.05 1.95-0.45 2.75-1.25s1.2-1.98 1.25-3.02h-0.02c0.61-0.36 1.02-1 1.02-1.73zM2 1.8c0.66 0 1.2 0.55 1.2 1.2s-0.55 1.2-1.2 1.2-1.2-0.55-1.2-1.2 0.55-1.2 1.2-1.2z m0 12.41c-0.66 0-1.2-0.55-1.2-1.2s0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2-0.55 1.2-1.2 1.2z m6-8c-0.66 0-1.2-0.55-1.2-1.2s0.55-1.2 1.2-1.2 1.2 0.55 1.2 1.2-0.55 1.2-1.2 1.2z"></path></svg>
+ <div class="select-menu-item-text">
+ <span class="select-menu-item-heading">Create branch: <span class="js-new-item-name"></span></span>
+ <span class="description">from ‘master’</span>
+ </div>
+ <input type="hidden" name="name" id="name" class="js-new-item-value">
+ <input type="hidden" name="branch" id="branch" value="master">
+ <input type="hidden" name="path" id="path" value="ergodox/dvorak_spanish/dvorak_spanish.hex">
+</form>
+ </div>
+
+ <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
+ <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+ </div>
+
+ <div class="select-menu-no-results">Nothing to show</div>
+ </div>
+
+ </div>
+ </div>
+</div>
+
+ <div class="btn-group right">
+ <a href="/johgh/keyboard/find/master"
+ class="js-pjax-capture-input btn btn-sm"
+ data-pjax
+ data-hotkey="t">
+ Find file
+ </a>
+ <button aria-label="Copy file path to clipboard" class="js-zeroclipboard btn btn-sm zeroclipboard-button tooltipped tooltipped-s" data-copied-hint="Copied!" type="button">Copy path</button>
+ </div>
+ <div class="breadcrumb js-zeroclipboard-target">
+ <span class="repo-root js-repo-root"><span class="js-path-segment"><a href="/johgh/keyboard"><span>keyboard</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a href="/johgh/keyboard/tree/master/ergodox"><span>ergodox</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/johgh/keyboard/tree/master/ergodox/dvorak_spanish"><span>dvorak_spanish</span></a></span><span class="separator">/</span><strong class="final-path">dvorak_spanish.hex</strong>
+ </div>
+</div>
+
+<include-fragment class="commit-tease" src="/johgh/keyboard/contributors/master/ergodox/dvorak_spanish/dvorak_spanish.hex">
+ <div>
+ Fetching contributors&hellip;
+ </div>
+
+ <div class="commit-tease-contributors">
+ <img alt="" class="loader-loading left" height="16" src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif" width="16" />
+ <span class="loader-error">Cannot retrieve contributors at this time</span>
+ </div>
+</include-fragment>
+<div class="file">
+ <div class="file-header">
+ <div class="file-actions">
+
+ <div class="btn-group">
+ <a href="/johgh/keyboard/raw/master/ergodox/dvorak_spanish/dvorak_spanish.hex" class="btn btn-sm " id="raw-url">Raw</a>
+ <a href="/johgh/keyboard/blame/master/ergodox/dvorak_spanish/dvorak_spanish.hex" class="btn btn-sm js-update-url-with-hash">Blame</a>
+ <a href="/johgh/keyboard/commits/master/ergodox/dvorak_spanish/dvorak_spanish.hex" class="btn btn-sm " rel="nofollow">History</a>
+ </div>
+
+
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/johgh/keyboard/edit/master/ergodox/dvorak_spanish/dvorak_spanish.hex" class="inline-form js-update-url-with-hash" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="mBXUFIbsdwQ12m5mU+yedoFFa8YgpdxmzXk1dlfq1kh0C66VRpqfqiN2C7erMu+s584jhyOYVPRmEEJ8ZlRmjw==" /></div>
+ <button class="btn-octicon tooltipped tooltipped-nw" type="submit"
+ aria-label="Edit this file" data-hotkey="e" data-disable-with>
+ <svg aria-hidden="true" class="octicon octicon-pencil" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path d="M0 12v3h3l8-8-3-3L0 12z m3 2H1V12h1v1h1v1z m10.3-9.3l-1.3 1.3-3-3 1.3-1.3c0.39-0.39 1.02-0.39 1.41 0l1.59 1.59c0.39 0.39 0.39 1.02 0 1.41z"></path></svg>
+ </button>
+</form> <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/johgh/keyboard/delete/master/ergodox/dvorak_spanish/dvorak_spanish.hex" class="inline-form" data-form-nonce="28f444bd9d5d742a073b405185ff204d5126d5a2" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="EK6jR4ODlaPp5/jn2atxuOqb22Or3H/UxxumUc4sjbGX1M3680KVs3VMgkwrfWaeZk9Qhd9vqD3sI7bJpiKXIw==" /></div>
+ <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit"
+ aria-label="Delete this file" data-disable-with>
+ <svg aria-hidden="true" class="octicon octicon-trashcan" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M10 2H8c0-0.55-0.45-1-1-1H4c-0.55 0-1 0.45-1 1H1c-0.55 0-1 0.45-1 1v1c0 0.55 0.45 1 1 1v9c0 0.55 0.45 1 1 1h7c0.55 0 1-0.45 1-1V5c0.55 0 1-0.45 1-1v-1c0-0.55-0.45-1-1-1z m-1 12H2V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9z m1-10H1v-1h9v1z"></path></svg>
+ </button>
+</form> </div>
+
+ <div class="file-info">
+ 1172 lines (1171 sloc)
+ <span class="file-info-divider"></span>
+ 51.4 KB
+ </div>
+</div>
+
+
+
+ <div itemprop="text" class="blob-wrapper data type-text">
+ <table class="highlight tab-size js-file-line-container" data-tab-size="8">
+ <tr>
+ <td id="L1" class="blob-num js-line-number" data-line-number="1"></td>
+ <td id="LC1" class="blob-code blob-code-inner js-file-line">:100000000C9465020C94AC020C94AC020C94AC02FF </td>
+ </tr>
+ <tr>
+ <td id="L2" class="blob-num js-line-number" data-line-number="2"></td>
+ <td id="LC2" class="blob-code blob-code-inner js-file-line">:100010000C94AC020C94AC020C94AC020C94AC02A8 </td>
+ </tr>
+ <tr>
+ <td id="L3" class="blob-num js-line-number" data-line-number="3"></td>
+ <td id="LC3" class="blob-code blob-code-inner js-file-line">:100020000C94AC020C94AC020C94FC0C0C94CE0D11 </td>
+ </tr>
+ <tr>
+ <td id="L4" class="blob-num js-line-number" data-line-number="4"></td>
+ <td id="LC4" class="blob-code blob-code-inner js-file-line">:100030000C94AC020C94AC020C94AC020C94AC0288 </td>
+ </tr>
+ <tr>
+ <td id="L5" class="blob-num js-line-number" data-line-number="5"></td>
+ <td id="LC5" class="blob-code blob-code-inner js-file-line">:100040000C94AC020C949A220C94AC020C94AC026A </td>
+ </tr>
+ <tr>
+ <td id="L6" class="blob-num js-line-number" data-line-number="6"></td>
+ <td id="LC6" class="blob-code blob-code-inner js-file-line">:100050000C94AC020C942A1C0C94AC020C94AC02D0 </td>
+ </tr>
+ <tr>
+ <td id="L7" class="blob-num js-line-number" data-line-number="7"></td>
+ <td id="LC7" class="blob-code blob-code-inner js-file-line">:100060000C94AC020C94AC020C94AC020C94AC0258 </td>
+ </tr>
+ <tr>
+ <td id="L8" class="blob-num js-line-number" data-line-number="8"></td>
+ <td id="LC8" class="blob-code blob-code-inner js-file-line">:100070000C94AC020C94AC020C94AC020C94AC0248 </td>
+ </tr>
+ <tr>
+ <td id="L9" class="blob-num js-line-number" data-line-number="9"></td>
+ <td id="LC9" class="blob-code blob-code-inner js-file-line">:100080000C94AC020C94AC020C94AC020C94AC0238 </td>
+ </tr>
+ <tr>
+ <td id="L10" class="blob-num js-line-number" data-line-number="10"></td>
+ <td id="LC10" class="blob-code blob-code-inner js-file-line">:100090000C94AC020C94AC020C94AC020C94AC0228 </td>
+ </tr>
+ <tr>
+ <td id="L11" class="blob-num js-line-number" data-line-number="11"></td>
+ <td id="LC11" class="blob-code blob-code-inner js-file-line">:1000A0000C94AC020C94AC020C94AC023B0E5D0EB2 </td>
+ </tr>
+ <tr>
+ <td id="L12" class="blob-num js-line-number" data-line-number="12"></td>
+ <td id="LC12" class="blob-code blob-code-inner js-file-line">:1000B0004B0F5D0E4B0FA20EC50E4B0F1A0F2D0FDF </td>
+ </tr>
+ <tr>
+ <td id="L13" class="blob-num js-line-number" data-line-number="13"></td>
+ <td id="LC13" class="blob-code blob-code-inner js-file-line">:1000C00019121912561256129912D712F014F0146E </td>
+ </tr>
+ <tr>
+ <td id="L14" class="blob-num js-line-number" data-line-number="14"></td>
+ <td id="LC14" class="blob-code blob-code-inner js-file-line">:1000D000F012F014F113F113C414F014F014DB1443 </td>
+ </tr>
+ <tr>
+ <td id="L15" class="blob-num js-line-number" data-line-number="15"></td>
+ <td id="LC15" class="blob-code blob-code-inner js-file-line">:1000E0000000F0A135003A81297100300230000093 </td>
+ </tr>
+ <tr>
+ <td id="L16" class="blob-num js-line-number" data-line-number="16"></td>
+ <td id="LC16" class="blob-code blob-code-inner js-file-line">:1000F0001E003700040038004A003C761F0036001E </td>
+ </tr>
+ <tr>
+ <td id="L17" class="blob-num js-line-number" data-line-number="17"></td>
+ <td id="LC17" class="blob-code blob-code-inner js-file-line">:10010000120014004E002B002000330008000D00E8 </td>
+ </tr>
+ <tr>
+ <td id="L18" class="blob-num js-line-number" data-line-number="18"></td>
+ <td id="LC18" class="blob-code blob-code-inner js-file-line">:100110004B0028002100130018000E004D003D7513 </td>
+ </tr>
+ <tr>
+ <td id="L19" class="blob-num js-line-number" data-line-number="19"></td>
+ <td id="LC19" class="blob-code blob-code-inner js-file-line">:1001200022001C000C001B0000003E7D64004C7788 </td>
+ </tr>
+ <tr>
+ <td id="L20" class="blob-num js-line-number" data-line-number="20"></td>
+ <td id="LC20" class="blob-code blob-code-inner js-file-line">:100130000000E30000003F812E00C1000000E60047 </td>
+ </tr>
+ <tr>
+ <td id="L21" class="blob-num js-line-number" data-line-number="21"></td>
+ <td id="LC21" class="blob-code blob-code-inner js-file-line">:100140000000408123000900070005000000417DF8 </td>
+ </tr>
+ <tr>
+ <td id="L22" class="blob-num js-line-number" data-line-number="22"></td>
+ <td id="LC22" class="blob-code blob-code-inner js-file-line">:1001500024000A0015001000500044752500060018 </td>
+ </tr>
+ <tr>
+ <td id="L23" class="blob-num js-line-number" data-line-number="23"></td>
+ <td id="LC23" class="blob-code blob-code-inner js-file-line">:1001600017001A0051002C0026000B001100190086 </td>
+ </tr>
+ <tr>
+ <td id="L24" class="blob-num js-line-number" data-line-number="24"></td>
+ <td id="LC24" class="blob-code blob-code-inner js-file-line">:1001700052002A0027000F0016001D004F00457690 </td>
+ </tr>
+ <tr>
+ <td id="L25" class="blob-num js-line-number" data-line-number="25"></td>
+ <td id="LC25" class="blob-code blob-code-inner js-file-line">:100180002D00307F34710130033000000000010089 </td>
+ </tr>
+ <tr>
+ <td id="L26" class="blob-num js-line-number" data-line-number="26"></td>
+ <td id="LC26" class="blob-code blob-code-inner js-file-line">:1001900000000430160100003A0064000000000076 </td>
+ </tr>
+ <tr>
+ <td id="L27" class="blob-num js-line-number" data-line-number="27"></td>
+ <td id="LC27" class="blob-code blob-code-inner js-file-line">:1001A0001D0102543B006402F20000001B01F50037 </td>
+ </tr>
+ <tr>
+ <td id="L28" class="blob-num js-line-number" data-line-number="28"></td>
+ <td id="LC28" class="blob-code blob-code-inner js-file-line">:1001B0003C00F000F10000000601F4003D000000EA </td>
+ </tr>
+ <tr>
+ <td id="L29" class="blob-num js-line-number" data-line-number="29"></td>
+ <td id="LC29" class="blob-code blob-code-inner js-file-line">:1001C000F3000000190100003E00000000000000E4 </td>
+ </tr>
+ <tr>
+ <td id="L30" class="blob-num js-line-number" data-line-number="30"></td>
+ <td id="LC30" class="blob-code blob-code-inner js-file-line">:1001D00000000000A6000000000000000000010078 </td>
+ </tr>
+ <tr>
+ <td id="L31" class="blob-num js-line-number" data-line-number="31"></td>
+ <td id="LC31" class="blob-code blob-code-inner js-file-line">:1001E000A500010000004600000001003F000000E3 </td>
+ </tr>
+ <tr>
+ <td id="L32" class="blob-num js-line-number" data-line-number="32"></td>
+ <td id="LC32" class="blob-code blob-code-inner js-file-line">:1001F000000000000000AE004000240021001E00AE </td>
+ </tr>
+ <tr>
+ <td id="L33" class="blob-num js-line-number" data-line-number="33"></td>
+ <td id="LC33" class="blob-code blob-code-inner js-file-line">:100200000000A9004100250022001F003700AB00BC </td>
+ </tr>
+ <tr>
+ <td id="L34" class="blob-num js-line-number" data-line-number="34"></td>
+ <td id="LC34" class="blob-code blob-code-inner js-file-line">:1002100042002600230020002700AC0043005500C8 </td>
+ </tr>
+ <tr>
+ <td id="L35" class="blob-num js-line-number" data-line-number="35"></td>
+ <td id="LC35" class="blob-code blob-code-inner js-file-line">:10022000570054006700AA0044002F00310000006E </td>
+ </tr>
+ <tr>
+ <td id="L36" class="blob-num js-line-number" data-line-number="36"></td>
+ <td id="LC36" class="blob-code blob-code-inner js-file-line">:10023000000000003500010029710030023000008C </td>
+ </tr>
+ <tr>
+ <td id="L37" class="blob-num js-line-number" data-line-number="37"></td>
+ <td id="LC37" class="blob-code blob-code-inner js-file-line">:100240001E00140004001D004A0001001F001A00D7 </td>
+ </tr>
+ <tr>
+ <td id="L38" class="blob-num js-line-number" data-line-number="38"></td>
+ <td id="LC38" class="blob-code blob-code-inner js-file-line">:1002500016001B004E002B002000080007000600BF </td>
+ </tr>
+ <tr>
+ <td id="L39" class="blob-num js-line-number" data-line-number="39"></td>
+ <td id="LC39" class="blob-code blob-code-inner js-file-line">:100260004B00280021001500090019004D003D75C4 </td>
+ </tr>
+ <tr>
+ <td id="L40" class="blob-num js-line-number" data-line-number="40"></td>
+ <td id="LC40" class="blob-code blob-code-inner js-file-line">:10027000220017000A00050000003E7D64004C7754 </td>
+ </tr>
+ <tr>
+ <td id="L41" class="blob-num js-line-number" data-line-number="41"></td>
+ <td id="LC41" class="blob-code blob-code-inner js-file-line">:100280000000E300000001002E0001000000E60075 </td>
+ </tr>
+ <tr>
+ <td id="L42" class="blob-num js-line-number" data-line-number="42"></td>
+ <td id="LC42" class="blob-code blob-code-inner js-file-line">:100290000000010023001C000B0011000000417D44 </td>
+ </tr>
+ <tr>
+ <td id="L43" class="blob-num js-line-number" data-line-number="43"></td>
+ <td id="LC43" class="blob-code blob-code-inner js-file-line">:1002A000240018000D0010005000447525000C00BB </td>
+ </tr>
+ <tr>
+ <td id="L44" class="blob-num js-line-number" data-line-number="44"></td>
+ <td id="LC44" class="blob-code blob-code-inner js-file-line">:1002B0000E00360051002C00260012000F003700FF </td>
+ </tr>
+ <tr>
+ <td id="L45" class="blob-num js-line-number" data-line-number="45"></td>
+ <td id="LC45" class="blob-code blob-code-inner js-file-line">:1002C00052002A0027001300330038004F00457603 </td>
+ </tr>
+ <tr>
+ <td id="L46" class="blob-num js-line-number" data-line-number="46"></td>
+ <td id="LC46" class="blob-code blob-code-inner js-file-line">:1002D0002D00307F347101300330000016034500DB </td>
+ </tr>
+ <tr>
+ <td id="L47" class="blob-num js-line-number" data-line-number="47"></td>
+ <td id="LC47" class="blob-code blob-code-inner js-file-line">:1002E000720067006F0044006F0078002000450036 </td>
+ </tr>
+ <tr>
+ <td id="L48" class="blob-num js-line-number" data-line-number="48"></td>
+ <td id="LC48" class="blob-code blob-code-inner js-file-line">:1002F0005A00000016034500720067006F004400BA </td>
+ </tr>
+ <tr>
+ <td id="L49" class="blob-num js-line-number" data-line-number="49"></td>
+ <td id="LC49" class="blob-code blob-code-inner js-file-line">:100300006F007800200045005A0000000403090433 </td>
+ </tr>
+ <tr>
+ <td id="L50" class="blob-num js-line-number" data-line-number="50"></td>
+ <td id="LC50" class="blob-code blob-code-inner js-file-line">:1003100009026D00040100A0FA09040000010301B4 </td>
+ </tr>
+ <tr>
+ <td id="L51" class="blob-num js-line-number" data-line-number="51"></td>
+ <td id="LC51" class="blob-code blob-code-inner js-file-line">:100320000100092111010001223F00070581030896 </td>
+ </tr>
+ <tr>
+ <td id="L52" class="blob-num js-line-number" data-line-number="52"></td>
+ <td id="LC52" class="blob-code blob-code-inner js-file-line">:10033000000A090401000103010200092111010062 </td>
+ </tr>
+ <tr>
+ <td id="L53" class="blob-num js-line-number" data-line-number="53"></td>
+ <td id="LC53" class="blob-code blob-code-inner js-file-line">:1003400001224D000705820308000A09040200018A </td>
+ </tr>
+ <tr>
+ <td id="L54" class="blob-num js-line-number" data-line-number="54"></td>
+ <td id="LC54" class="blob-code blob-code-inner js-file-line">:100350000300000009211101000122360007058376 </td>
+ </tr>
+ <tr>
+ <td id="L55" class="blob-num js-line-number" data-line-number="55"></td>
+ <td id="LC55" class="blob-code blob-code-inner js-file-line">:100360000308000A09040300010300000009211129 </td>
+ </tr>
+ <tr>
+ <td id="L56" class="blob-num js-line-number" data-line-number="56"></td>
+ <td id="LC56" class="blob-code blob-code-inner js-file-line">:100370000100012239000705840310000112011059 </td>
+ </tr>
+ <tr>
+ <td id="L57" class="blob-num js-line-number" data-line-number="57"></td>
+ <td id="LC57" class="blob-code blob-code-inner js-file-line">:100380000100000008EDFE07130100010200010555 </td>
+ </tr>
+ <tr>
+ <td id="L58" class="blob-num js-line-number" data-line-number="58"></td>
+ <td id="LC58" class="blob-code blob-code-inner js-file-line">:10039000010906A101050719E029E71500250195C6 </td>
+ </tr>
+ <tr>
+ <td id="L59" class="blob-num js-line-number" data-line-number="59"></td>
+ <td id="LC59" class="blob-code blob-code-inner js-file-line">:1003A0000875018102050819012905950575019156 </td>
+ </tr>
+ <tr>
+ <td id="L60" class="blob-num js-line-number" data-line-number="60"></td>
+ <td id="LC60" class="blob-code blob-code-inner js-file-line">:1003B000029501750391010507190029771500259C </td>
+ </tr>
+ <tr>
+ <td id="L61" class="blob-num js-line-number" data-line-number="61"></td>
+ <td id="LC61" class="blob-code blob-code-inner js-file-line">:1003C00001957875018102C005010980A1018502AE </td>
+ </tr>
+ <tr>
+ <td id="L62" class="blob-num js-line-number" data-line-number="62"></td>
+ <td id="LC62" class="blob-code blob-code-inner js-file-line">:1003D00016010026B7001A01002AB7007510950112 </td>
+ </tr>
+ <tr>
+ <td id="L63" class="blob-num js-line-number" data-line-number="63"></td>
+ <td id="LC63" class="blob-code blob-code-inner js-file-line">:1003E0008100C0050C0901A1018503160100269CAE </td>
+ </tr>
+ <tr>
+ <td id="L64" class="blob-num js-line-number" data-line-number="64"></td>
+ <td id="LC64" class="blob-code blob-code-inner js-file-line">:1003F000021A01002A9C02751095018100C00501B6 </td>
+ </tr>
+ <tr>
+ <td id="L65" class="blob-num js-line-number" data-line-number="65"></td>
+ <td id="LC65" class="blob-code blob-code-inner js-file-line">:100400000902A1010901A100050919012905150029 </td>
+ </tr>
+ <tr>
+ <td id="L66" class="blob-num js-line-number" data-line-number="66"></td>
+ <td id="LC66" class="blob-code blob-code-inner js-file-line">:10041000250195057501810295017503810105018D </td>
+ </tr>
+ <tr>
+ <td id="L67" class="blob-num js-line-number" data-line-number="67"></td>
+ <td id="LC67" class="blob-code blob-code-inner js-file-line">:10042000093009311581257F950275088106093843 </td>
+ </tr>
+ <tr>
+ <td id="L68" class="blob-num js-line-number" data-line-number="68"></td>
+ <td id="LC68" class="blob-code blob-code-inner js-file-line">:100430001581257F950175088106050C0A3802157E </td>
+ </tr>
+ <tr>
+ <td id="L69" class="blob-num js-line-number" data-line-number="69"></td>
+ <td id="LC69" class="blob-code blob-code-inner js-file-line">:1004400081257F950175088106C0C005010906A1B7 </td>
+ </tr>
+ <tr>
+ <td id="L70" class="blob-num js-line-number" data-line-number="70"></td>
+ <td id="LC70" class="blob-code blob-code-inner js-file-line">:1004500001050719E029E7150025019508750181B7 </td>
+ </tr>
+ <tr>
+ <td id="L71" class="blob-num js-line-number" data-line-number="71"></td>
+ <td id="LC71" class="blob-code blob-code-inner js-file-line">:100460000295017508810105081901290595057591 </td>
+ </tr>
+ <tr>
+ <td id="L72" class="blob-num js-line-number" data-line-number="72"></td>
+ <td id="LC72" class="blob-code blob-code-inner js-file-line">:100470000191029501750391010507190029FF15E6 </td>
+ </tr>
+ <tr>
+ <td id="L73" class="blob-num js-line-number" data-line-number="73"></td>
+ <td id="LC73" class="blob-code blob-code-inner js-file-line">:100480000025FF950675088100C0000000000000EF </td>
+ </tr>
+ <tr>
+ <td id="L74" class="blob-num js-line-number" data-line-number="74"></td>
+ <td id="LC74" class="blob-code blob-code-inner js-file-line">:100490000000000000010204060A0F17202C3A4A4F </td>
+ </tr>
+ <tr>
+ <td id="L75" class="blob-num js-line-number" data-line-number="75"></td>
+ <td id="LC75" class="blob-code blob-code-inner js-file-line">:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2 </td>
+ </tr>
+ <tr>
+ <td id="L76" class="blob-num js-line-number" data-line-number="76"></td>
+ <td id="LC76" class="blob-code blob-code-inner js-file-line">:1004B000B39D87715D4A3A2C20170F0A060402018A </td>
+ </tr>
+ <tr>
+ <td id="L77" class="blob-num js-line-number" data-line-number="77"></td>
+ <td id="LC77" class="blob-code blob-code-inner js-file-line">:1004C0000000000000000000000011241FBECFEF5C </td>
+ </tr>
+ <tr>
+ <td id="L78" class="blob-num js-line-number" data-line-number="78"></td>
+ <td id="LC78" class="blob-code blob-code-inner js-file-line">:1004D000DAE0DEBFCDBF04B603FE27C08091F00195 </td>
+ </tr>
+ <tr>
+ <td id="L79" class="blob-num js-line-number" data-line-number="79"></td>
+ <td id="LC79" class="blob-code blob-code-inner js-file-line">:1004E0009091F101A091F201B091F3018730904B0E </td>
+ </tr>
+ <tr>
+ <td id="L80" class="blob-num js-line-number" data-line-number="80"></td>
+ <td id="LC80" class="blob-code blob-code-inner js-file-line">:1004F000A740B04BD1F41092F0011092F10110928C </td>
+ </tr>
+ <tr>
+ <td id="L81" class="blob-num js-line-number" data-line-number="81"></td>
+ <td id="LC81" class="blob-code blob-code-inner js-file-line">:10050000F2011092F30114BE84B7877F84BF0FB647 </td>
+ </tr>
+ <tr>
+ <td id="L82" class="blob-num js-line-number" data-line-number="82"></td>
+ <td id="LC82" class="blob-code blob-code-inner js-file-line">:10051000F894A895809160008861809360001092A3 </td>
+ </tr>
+ <tr>
+ <td id="L83" class="blob-num js-line-number" data-line-number="83"></td>
+ <td id="LC83" class="blob-code blob-code-inner js-file-line">:1005200060000FBEE0E0FFE3099511E0A0E0B1E05C </td>
+ </tr>
+ <tr>
+ <td id="L84" class="blob-num js-line-number" data-line-number="84"></td>
+ <td id="LC84" class="blob-code blob-code-inner js-file-line">:10053000E0EEF8E402C005900D92A433B107D9F7BC </td>
+ </tr>
+ <tr>
+ <td id="L85" class="blob-num js-line-number" data-line-number="85"></td>
+ <td id="LC85" class="blob-code blob-code-inner js-file-line">:1005400021E0A4E3B1E001C01D92A03FB207E1F7B2 </td>
+ </tr>
+ <tr>
+ <td id="L86" class="blob-num js-line-number" data-line-number="86"></td>
+ <td id="LC86" class="blob-code blob-code-inner js-file-line">:100550000E943D0A0C946E240C940000FC01623051 </td>
+ </tr>
+ <tr>
+ <td id="L87" class="blob-num js-line-number" data-line-number="87"></td>
+ <td id="LC87" class="blob-code blob-code-inner js-file-line">:1005600009F445C028F4662351F0613041F182C09E </td>
+ </tr>
+ <tr>
+ <td id="L88" class="blob-num js-line-number" data-line-number="88"></td>
+ <td id="LC88" class="blob-code blob-code-inner js-file-line">:10057000633009F45BC0643009F472C07BC08281CF </td>
+ </tr>
+ <tr>
+ <td id="L89" class="blob-num js-line-number" data-line-number="89"></td>
+ <td id="LC89" class="blob-code blob-code-inner js-file-line">:10058000882341F00E94F41B90933501809334013D </td>
+ </tr>
+ <tr>
+ <td id="L90" class="blob-num js-line-number" data-line-number="90"></td>
+ <td id="LC90" class="blob-code blob-code-inner js-file-line">:1005900085EE6AC085EE0E947511809134019091BC </td>
+ </tr>
+ <tr>
+ <td id="L91" class="blob-num js-line-number" data-line-number="91"></td>
+ <td id="LC91" class="blob-code blob-code-inner js-file-line">:1005A00035010E94001C8F3591050CF063C086EE6A </td>
+ </tr>
+ <tr>
+ <td id="L92" class="blob-num js-line-number" data-line-number="92"></td>
+ <td id="LC92" class="blob-code blob-code-inner js-file-line">:1005B0000E94AD1084E30E94AD1084E34DC082819F </td>
+ </tr>
+ <tr>
+ <td id="L93" class="blob-num js-line-number" data-line-number="93"></td>
+ <td id="LC93" class="blob-code blob-code-inner js-file-line">:1005C0008111E0CF85EE0E947511809134019091E8 </td>
+ </tr>
+ <tr>
+ <td id="L94" class="blob-num js-line-number" data-line-number="94"></td>
+ <td id="LC94" class="blob-code blob-code-inner js-file-line">:1005D00035010E94001C8F3591050CF04BC086EE52 </td>
+ </tr>
+ <tr>
+ <td id="L95" class="blob-num js-line-number" data-line-number="95"></td>
+ <td id="LC95" class="blob-code blob-code-inner js-file-line">:1005E0000E94AD1081E30E94AD1081E335C082818D </td>
+ </tr>
+ <tr>
+ <td id="L96" class="blob-num js-line-number" data-line-number="96"></td>
+ <td id="LC96" class="blob-code blob-code-inner js-file-line">:1005F000882341F00E94F41B9093350180933401CD </td>
+ </tr>
+ <tr>
+ <td id="L97" class="blob-num js-line-number" data-line-number="97"></td>
+ <td id="LC97" class="blob-code blob-code-inner js-file-line">:1006000082EE32C082EE0E94751180913401909189 </td>
+ </tr>
+ <tr>
+ <td id="L98" class="blob-num js-line-number" data-line-number="98"></td>
+ <td id="LC98" class="blob-code blob-code-inner js-file-line">:1006100035010E94001C8F35910564F586EE0E941D </td>
+ </tr>
+ <tr>
+ <td id="L99" class="blob-num js-line-number" data-line-number="99"></td>
+ <td id="LC99" class="blob-code blob-code-inner js-file-line">:10062000AD108FE20E94AD108FE216C08281811161 </td>
+ </tr>
+ <tr>
+ <td id="L100" class="blob-num js-line-number" data-line-number="100"></td>
+ <td id="LC100" class="blob-code blob-code-inner js-file-line">:10063000E1CF82EE0E9475118091340190913501D5 </td>
+ </tr>
+ <tr>
+ <td id="L101" class="blob-num js-line-number" data-line-number="101"></td>
+ <td id="LC101" class="blob-code blob-code-inner js-file-line">:100640000E94001C8F359105ACF486EE0E94AD101F </td>
+ </tr>
+ <tr>
+ <td id="L102" class="blob-num js-line-number" data-line-number="102"></td>
+ <td id="LC102" class="blob-code blob-code-inner js-file-line">:1006500080E30E94AD1080E30E94751186EE08C011 </td>
+ </tr>
+ <tr>
+ <td id="L103" class="blob-num js-line-number" data-line-number="103"></td>
+ <td id="LC103" class="blob-code blob-code-inner js-file-line">:100660008281882321F089E30E94AD1003C089E3D1 </td>
+ </tr>
+ <tr>
+ <td id="L104" class="blob-num js-line-number" data-line-number="104"></td>
+ <td id="LC104" class="blob-code blob-code-inner js-file-line">:100670000E94751180E090E0089508956091B301A3 </td>
+ </tr>
+ <tr>
+ <td id="L105" class="blob-num js-line-number" data-line-number="105"></td>
+ <td id="LC105" class="blob-code blob-code-inner js-file-line">:100680007091B4018091B5019091B6010E94531B05 </td>
+ </tr>
+ <tr>
+ <td id="L106" class="blob-num js-line-number" data-line-number="106"></td>
+ <td id="LC106" class="blob-code blob-code-inner js-file-line">:1006900056985E9825982D9826982E9827982F98EA </td>
+ </tr>
+ <tr>
+ <td id="L107" class="blob-num js-line-number" data-line-number="107"></td>
+ <td id="LC107" class="blob-code blob-code-inner js-file-line">:1006A000813029F0823029F4269A2E9A02C0279AA6 </td>
+ </tr>
+ <tr>
+ <td id="L108" class="blob-num js-line-number" data-line-number="108"></td>
+ <td id="LC108" class="blob-code blob-code-inner js-file-line">:1006B0002F9A0E94840F81FF02C0259A2D9A0895D7 </td>
+ </tr>
+ <tr>
+ <td id="L109" class="blob-num js-line-number" data-line-number="109"></td>
+ <td id="LC109" class="blob-code blob-code-inner js-file-line">:1006C0000C943E0356985E9825982D9826982E985F </td>
+ </tr>
+ <tr>
+ <td id="L110" class="blob-num js-line-number" data-line-number="110"></td>
+ <td id="LC110" class="blob-code blob-code-inner js-file-line">:1006D00027982F988FEF90E090938900809388005F </td>
+ </tr>
+ <tr>
+ <td id="L111" class="blob-num js-line-number" data-line-number="111"></td>
+ <td id="LC111" class="blob-code blob-code-inner js-file-line">:1006E00090938B0080938A0090938D0080938C0070 </td>
+ </tr>
+ <tr>
+ <td id="L112" class="blob-num js-line-number" data-line-number="112"></td>
+ <td id="LC112" class="blob-code blob-code-inner js-file-line">:1006F000259A2D9A2FEF80E792E02150804090407C </td>
+ </tr>
+ <tr>
+ <td id="L113" class="blob-num js-line-number" data-line-number="113"></td>
+ <td id="LC113" class="blob-code blob-code-inner js-file-line">:10070000E1F700C00000269A2E9A2FEF80E792E0D2 </td>
+ </tr>
+ <tr>
+ <td id="L114" class="blob-num js-line-number" data-line-number="114"></td>
+ <td id="LC114" class="blob-code blob-code-inner js-file-line">:10071000215080409040E1F700C00000279A2F9AB6 </td>
+ </tr>
+ <tr>
+ <td id="L115" class="blob-num js-line-number" data-line-number="115"></td>
+ <td id="LC115" class="blob-code blob-code-inner js-file-line">:100720002FEF80E792E0215080409040E1F700C039 </td>
+ </tr>
+ <tr>
+ <td id="L116" class="blob-num js-line-number" data-line-number="116"></td>
+ <td id="LC116" class="blob-code blob-code-inner js-file-line">:10073000000025982D982FEF80E792E0215080400F </td>
+ </tr>
+ <tr>
+ <td id="L117" class="blob-num js-line-number" data-line-number="117"></td>
+ <td id="LC117" class="blob-code blob-code-inner js-file-line">:100740009040E1F700C0000026982E982FEF80E738 </td>
+ </tr>
+ <tr>
+ <td id="L118" class="blob-num js-line-number" data-line-number="118"></td>
+ <td id="LC118" class="blob-code blob-code-inner js-file-line">:1007500092E0215080409040E1F700C000002798CF </td>
+ </tr>
+ <tr>
+ <td id="L119" class="blob-num js-line-number" data-line-number="119"></td>
+ <td id="LC119" class="blob-code blob-code-inner js-file-line">:100760002F9856985E9825982D9826982E98279819 </td>
+ </tr>
+ <tr>
+ <td id="L120" class="blob-num js-line-number" data-line-number="120"></td>
+ <td id="LC120" class="blob-code blob-code-inner js-file-line">:100770002F98089589EA8093800089E08093810012 </td>
+ </tr>
+ <tr>
+ <td id="L121" class="blob-num js-line-number" data-line-number="121"></td>
+ <td id="LC121" class="blob-code blob-code-inner js-file-line">:1007800024982C983F988AB18F748AB96E98479AAA </td>
+ </tr>
+ <tr>
+ <td id="L122" class="blob-num js-line-number" data-line-number="122"></td>
+ <td id="LC122" class="blob-code blob-code-inner js-file-line">:100790008BB1806B8BB9769A0E9462030C943D03F7 </td>
+ </tr>
+ <tr>
+ <td id="L123" class="blob-num js-line-number" data-line-number="123"></td>
+ <td id="LC123" class="blob-code blob-code-inner js-file-line">:1007A00080E2809300018091360181110EC00E9489 </td>
+ </tr>
+ <tr>
+ <td id="L124" class="blob-num js-line-number" data-line-number="124"></td>
+ <td id="LC124" class="blob-code blob-code-inner js-file-line">:1007B0001F0481E0809336012FEF83ED90E32150F9 </td>
+ </tr>
+ <tr>
+ <td id="L125" class="blob-num js-line-number" data-line-number="125"></td>
+ <td id="LC125" class="blob-code blob-code-inner js-file-line">:1007C00080409040E1F700C0000080E40E942504D2 </td>
+ </tr>
+ <tr>
+ <td id="L126" class="blob-num js-line-number" data-line-number="126"></td>
+ <td id="LC126" class="blob-code blob-code-inner js-file-line">:1007D0008093000181112EC00E944F04809300017C </td>
+ </tr>
+ <tr>
+ <td id="L127" class="blob-num js-line-number" data-line-number="127"></td>
+ <td id="LC127" class="blob-code blob-code-inner js-file-line">:1007E000811128C00E944F0480930001811122C012 </td>
+ </tr>
+ <tr>
+ <td id="L128" class="blob-num js-line-number" data-line-number="128"></td>
+ <td id="LC128" class="blob-code blob-code-inner js-file-line">:1007F0008FE30E944F048093000181111BC00E946F </td>
+ </tr>
+ <tr>
+ <td id="L129" class="blob-num js-line-number" data-line-number="129"></td>
+ <td id="LC129" class="blob-code blob-code-inner js-file-line">:10080000470480E40E94250480930001811112C0F6 </td>
+ </tr>
+ <tr>
+ <td id="L130" class="blob-num js-line-number" data-line-number="130"></td>
+ <td id="LC130" class="blob-code blob-code-inner js-file-line">:100810008CE00E944F048093000181110BC00E9464 </td>
+ </tr>
+ <tr>
+ <td id="L131" class="blob-num js-line-number" data-line-number="131"></td>
+ <td id="LC131" class="blob-code blob-code-inner js-file-line">:100820004F0480930001811105C08FE30E944F04A3 </td>
+ </tr>
+ <tr>
+ <td id="L132" class="blob-num js-line-number" data-line-number="132"></td>
+ <td id="LC132" class="blob-code blob-code-inner js-file-line">:10083000809300010E944704809100010895109266 </td>
+ </tr>
+ <tr>
+ <td id="L133" class="blob-num js-line-number" data-line-number="133"></td>
+ <td id="LC133" class="blob-code blob-code-inner js-file-line">:10084000B9008AE08093B800089594EA9093BC00C0 </td>
+ </tr>
+ <tr>
+ <td id="L134" class="blob-num js-line-number" data-line-number="134"></td>
+ <td id="LC134" class="blob-code blob-code-inner js-file-line">:100850009091BC0097FFFCCF9091B900987F9830A1 </td>
+ </tr>
+ <tr>
+ <td id="L135" class="blob-num js-line-number" data-line-number="135"></td>
+ <td id="LC135" class="blob-code blob-code-inner js-file-line">:1008600021F0903111F081E008958093BB0084E87D </td>
+ </tr>
+ <tr>
+ <td id="L136" class="blob-num js-line-number" data-line-number="136"></td>
+ <td id="LC136" class="blob-code blob-code-inner js-file-line">:100870008093BC008091BC0087FFFCCF8091B900C1 </td>
+ </tr>
+ <tr>
+ <td id="L137" class="blob-num js-line-number" data-line-number="137"></td>
+ <td id="LC137" class="blob-code blob-code-inner js-file-line">:10088000887F883111F0803471F780E0089584E921 </td>
+ </tr>
+ <tr>
+ <td id="L138" class="blob-num js-line-number" data-line-number="138"></td>
+ <td id="LC138" class="blob-code blob-code-inner js-file-line">:100890008093BC008091BC0084FDFCCF08958093C0 </td>
+ </tr>
+ <tr>
+ <td id="L139" class="blob-num js-line-number" data-line-number="139"></td>
+ <td id="LC139" class="blob-code blob-code-inner js-file-line">:1008A000BB0084E88093BC008091BC0087FFFCCF34 </td>
+ </tr>
+ <tr>
+ <td id="L140" class="blob-num js-line-number" data-line-number="140"></td>
+ <td id="LC140" class="blob-code blob-code-inner js-file-line">:1008B0009091B900987F81E0983209F480E0089522 </td>
+ </tr>
+ <tr>
+ <td id="L141" class="blob-num js-line-number" data-line-number="141"></td>
+ <td id="LC141" class="blob-code blob-code-inner js-file-line">:1008C00084E88093BC008091BC0087FFFCCF8091BE </td>
+ </tr>
+ <tr>
+ <td id="L142" class="blob-num js-line-number" data-line-number="142"></td>
+ <td id="LC142" class="blob-code blob-code-inner js-file-line">:1008D000BB00089580910001811115C080E40E9441 </td>
+ </tr>
+ <tr>
+ <td id="L143" class="blob-num js-line-number" data-line-number="143"></td>
+ <td id="LC143" class="blob-code blob-code-inner js-file-line">:1008E00025048093000181110CC082E10E944F0415 </td>
+ </tr>
+ <tr>
+ <td id="L144" class="blob-num js-line-number" data-line-number="144"></td>
+ <td id="LC144" class="blob-code blob-code-inner js-file-line">:1008F00080930001811105C08FEF0E944F04809307 </td>
+ </tr>
+ <tr>
+ <td id="L145" class="blob-num js-line-number" data-line-number="145"></td>
+ <td id="LC145" class="blob-code blob-code-inner js-file-line">:1009000000010E94470484B1807F84B985B1807F53 </td>
+ </tr>
+ <tr>
+ <td id="L146" class="blob-num js-line-number" data-line-number="146"></td>
+ <td id="LC146" class="blob-code blob-code-inner js-file-line">:1009100085B98AB1837F8AB98BB1837F8BB93E98C1 </td>
+ </tr>
+ <tr>
+ <td id="L147" class="blob-num js-line-number" data-line-number="147"></td>
+ <td id="LC147" class="blob-code blob-code-inner js-file-line">:10092000469808950E94D003809300010E946A04B3 </td>
+ </tr>
+ <tr>
+ <td id="L148" class="blob-num js-line-number" data-line-number="148"></td>
+ <td id="LC148" class="blob-code blob-code-inner js-file-line">:1009300080B38C7080BB81B3836F81BBA8E3B1E0CF </td>
+ </tr>
+ <tr>
+ <td id="L149" class="blob-num js-line-number" data-line-number="149"></td>
+ <td id="LC149" class="blob-code blob-code-inner js-file-line">:10094000E6E4F1E08EE08E0F11921D928E13FCCF43 </td>
+ </tr>
+ <tr>
+ <td id="L150" class="blob-num js-line-number" data-line-number="150"></td>
+ <td id="LC150" class="blob-code blob-code-inner js-file-line">:100950000C94BA03BF92CF92DF92EF92FF920F9363 </td>
+ </tr>
+ <tr>
+ <td id="L151" class="blob-num js-line-number" data-line-number="151"></td>
+ <td id="LC151" class="blob-code blob-code-inner js-file-line">:100960001F93CF93DF9380910001882379F08091CA </td>
+ </tr>
+ <tr>
+ <td id="L152" class="blob-num js-line-number" data-line-number="152"></td>
+ <td id="LC152" class="blob-code blob-code-inner js-file-line">:1009700037018F5F80933701811108C00E94D00337 </td>
+ </tr>
+ <tr>
+ <td id="L153" class="blob-num js-line-number" data-line-number="153"></td>
+ <td id="LC153" class="blob-code blob-code-inner js-file-line">:1009800080930001811102C00E94620308E311E01C </td>
+ </tr>
+ <tr>
+ <td id="L154" class="blob-num js-line-number" data-line-number="154"></td>
+ <td id="LC154" class="blob-code blob-code-inner js-file-line">:10099000C0E0D0E0DD24D39482E0C82EEE24E394BE </td>
+ </tr>
+ <tr>
+ <td id="L155" class="blob-num js-line-number" data-line-number="155"></td>
+ <td id="LC155" class="blob-code blob-code-inner js-file-line">:1009A000F12CC730D10500F580910001811164C0A0 </td>
+ </tr>
+ <tr>
+ <td id="L156" class="blob-num js-line-number" data-line-number="156"></td>
+ <td id="LC156" class="blob-code blob-code-inner js-file-line">:1009B00080E40E94250480930001811112C082E12D </td>
+ </tr>
+ <tr>
+ <td id="L157" class="blob-num js-line-number" data-line-number="157"></td>
+ <td id="LC157" class="blob-code blob-code-inner js-file-line">:1009C0000E944F048093000181110BC0C7010C2EBF </td>
+ </tr>
+ <tr>
+ <td id="L158" class="blob-num js-line-number" data-line-number="158"></td>
+ <td id="LC158" class="blob-code blob-code-inner js-file-line">:1009D00001C0880F0A94EAF780950E944F04809323 </td>
+ </tr>
+ <tr>
+ <td id="L159" class="blob-num js-line-number" data-line-number="159"></td>
+ <td id="LC159" class="blob-code blob-code-inner js-file-line">:1009E00000010E94470448C0CA30A1F028F4C83072 </td>
+ </tr>
+ <tr>
+ <td id="L160" class="blob-num js-line-number" data-line-number="160"></td>
+ <td id="LC160" class="blob-code blob-code-inner js-file-line">:1009F00059F0C93061F005C0CC3089F070F0CD30CD </td>
+ </tr>
+ <tr>
+ <td id="L161" class="blob-num js-line-number" data-line-number="161"></td>
+ <td id="LC161" class="blob-code blob-code-inner js-file-line">:100A000089F0209A289810C0219A29980DC0229A1E </td>
+ </tr>
+ <tr>
+ <td id="L162" class="blob-num js-line-number" data-line-number="162"></td>
+ <td id="LC162" class="blob-code blob-code-inner js-file-line">:100A10002A980AC0239A2B9807C0529A01C0539A69 </td>
+ </tr>
+ <tr>
+ <td id="L163" class="blob-num js-line-number" data-line-number="163"></td>
+ <td id="LC163" class="blob-code blob-code-inner js-file-line">:100A20005B9802C03E9A469890EA9A95F1F79FB17A </td>
+ </tr>
+ <tr>
+ <td id="L164" class="blob-num js-line-number" data-line-number="164"></td>
+ <td id="LC164" class="blob-code blob-code-inner js-file-line">:100A3000799902C082E001C080E091709D25982BD9 </td>
+ </tr>
+ <tr>
+ <td id="L165" class="blob-num js-line-number" data-line-number="165"></td>
+ <td id="LC165" class="blob-code blob-code-inner js-file-line">:100A40007C9902C084E001C080E0892B7D9902C0BE </td>
+ </tr>
+ <tr>
+ <td id="L166" class="blob-num js-line-number" data-line-number="166"></td>
+ <td id="LC166" class="blob-code blob-code-inner js-file-line">:100A500038E001C030E0832B7E9902C020E101C064 </td>
+ </tr>
+ <tr>
+ <td id="L167" class="blob-num js-line-number" data-line-number="167"></td>
+ <td id="LC167" class="blob-code blob-code-inner js-file-line">:100A600020E0822B9FB19095991F9927991F92950D </td>
+ </tr>
+ <tr>
+ <td id="L168" class="blob-num js-line-number" data-line-number="168"></td>
+ <td id="LC168" class="blob-code blob-code-inner js-file-line">:100A7000990F907E892B0FC080910001811149C090 </td>
+ </tr>
+ <tr>
+ <td id="L169" class="blob-num js-line-number" data-line-number="169"></td>
+ <td id="LC169" class="blob-code blob-code-inner js-file-line">:100A800080E40E94250480930001882379F1B12C31 </td>
+ </tr>
+ <tr>
+ <td id="L170" class="blob-num js-line-number" data-line-number="170"></td>
+ <td id="LC170" class="blob-code blob-code-inner js-file-line">:100A90000E9447048B2DF8019081981719F08083EC </td>
+ </tr>
+ <tr>
+ <td id="L171" class="blob-num js-line-number" data-line-number="171"></td>
+ <td id="LC171" class="blob-code blob-code-inner js-file-line">:100AA000C09201010E946A0421960F5F1F4FCE3051 </td>
+ </tr>
+ <tr>
+ <td id="L172" class="blob-num js-line-number" data-line-number="172"></td>
+ <td id="LC172" class="blob-code blob-code-inner js-file-line">:100AB000D10509F076CF80910101882361F1815041 </td>
+ </tr>
+ <tr>
+ <td id="L173" class="blob-num js-line-number" data-line-number="173"></td>
+ <td id="LC173" class="blob-code blob-code-inner js-file-line">:100AC00080930101882339F08FE99FE00197F1F7C6 </td>
+ </tr>
+ <tr>
+ <td id="L174" class="blob-num js-line-number" data-line-number="174"></td>
+ <td id="LC174" class="blob-code blob-code-inner js-file-line">:100AD00000C0000020C0A6E4B1E0E8E3F1E0CF01EF </td>
+ </tr>
+ <tr>
+ <td id="L175" class="blob-num js-line-number" data-line-number="175"></td>
+ <td id="LC175" class="blob-code blob-code-inner js-file-line">:100AE000825F91919D938E13FCCF15C083E10E948C </td>
+ </tr>
+ <tr>
+ <td id="L176" class="blob-num js-line-number" data-line-number="176"></td>
+ <td id="LC176" class="blob-code blob-code-inner js-file-line">:100AF0004F04809300018111CACF81E40E94250434 </td>
+ </tr>
+ <tr>
+ <td id="L177" class="blob-num js-line-number" data-line-number="177"></td>
+ <td id="LC177" class="blob-code blob-code-inner js-file-line">:100B0000809300018111C3CF0E946004B82EB0947D </td>
+ </tr>
+ <tr>
+ <td id="L178" class="blob-num js-line-number" data-line-number="178"></td>
+ <td id="LC178" class="blob-code blob-code-inner js-file-line">:100B1000BFCF80E0C0CF0E94600381E0DF91CF9122 </td>
+ </tr>
+ <tr>
+ <td id="L179" class="blob-num js-line-number" data-line-number="179"></td>
+ <td id="LC179" class="blob-code blob-code-inner js-file-line">:100B20001F910F91FF90EF90DF90CF90BF900895AD </td>
+ </tr>
+ <tr>
+ <td id="L180" class="blob-num js-line-number" data-line-number="180"></td>
+ <td id="LC180" class="blob-code blob-code-inner js-file-line">:100B3000E82FF0E0EA5BFE4F808108950895089564 </td>
+ </tr>
+ <tr>
+ <td id="L181" class="blob-num js-line-number" data-line-number="181"></td>
+ <td id="LC181" class="blob-code blob-code-inner js-file-line">:100B400096E0799FF001112494E5899FE00DF11D55 </td>
+ </tr>
+ <tr>
+ <td id="L182" class="blob-num js-line-number" data-line-number="182"></td>
+ <td id="LC182" class="blob-code blob-code-inner js-file-line">:100B50001124E60FF11DEE0FFF1FEC51FF4F8591A1 </td>
+ </tr>
+ <tr>
+ <td id="L183" class="blob-num js-line-number" data-line-number="183"></td>
+ <td id="LC183" class="blob-code blob-code-inner js-file-line">:100B600094910895880F991FFC01E05AF0408591F7 </td>
+ </tr>
+ <tr>
+ <td id="L184" class="blob-num js-line-number" data-line-number="184"></td>
+ <td id="LC184" class="blob-code blob-code-inner js-file-line">:100B700094910895880F991FFC01E052FF4F8591D1 </td>
+ </tr>
+ <tr>
+ <td id="L185" class="blob-num js-line-number" data-line-number="185"></td>
+ <td id="LC185" class="blob-code blob-code-inner js-file-line">:100B8000949108950F931F93CF93DF93EC018115F8 </td>
+ </tr>
+ <tr>
+ <td id="L186" class="blob-num js-line-number" data-line-number="186"></td>
+ <td id="LC186" class="blob-code blob-code-inner js-file-line">:100B9000904350F5C11580E2D80708F0B3C0CB3BB5 </td>
+ </tr>
+ <tr>
+ <td id="L187" class="blob-num js-line-number" data-line-number="187"></td>
+ <td id="LC187" class="blob-code blob-code-inner js-file-line">:100BA000D10590F4C83AD10508F05AC0C53AD1052C </td>
+ </tr>
+ <tr>
+ <td id="L188" class="blob-num js-line-number" data-line-number="188"></td>
+ <td id="LC188" class="blob-code blob-code-inner js-file-line">:100BB00008F04BC0C430D10508F0BBC1219709F043 </td>
+ </tr>
+ <tr>
+ <td id="L189" class="blob-num js-line-number" data-line-number="189"></td>
+ <td id="LC189" class="blob-code blob-code-inner js-file-line">:100BC000B5C101E010E0F5C1CF3FD10511F008F04B </td>
+ </tr>
+ <tr>
+ <td id="L190" class="blob-num js-line-number" data-line-number="190"></td>
+ <td id="LC190" class="blob-code blob-code-inner js-file-line">:100BD000B0C1C03FD10508F092C0CE01805E91093E </td>
+ </tr>
+ <tr>
+ <td id="L191" class="blob-num js-line-number" data-line-number="191"></td>
+ <td id="LC191" class="blob-code blob-code-inner js-file-line">:100BE000089708F4A6C1A2C1C11591E5D907A8F4D8 </td>
+ </tr>
+ <tr>
+ <td id="L192" class="blob-num js-line-number" data-line-number="192"></td>
+ <td id="LC192" class="blob-code blob-code-inner js-file-line">:100BF000C23020E5D20708F09EC0C11580E5D807B5 </td>
+ </tr>
+ <tr>
+ <td id="L193" class="blob-num js-line-number" data-line-number="193"></td>
+ <td id="LC193" class="blob-code blob-code-inner js-file-line">:100C000009F485C008F091C0C11520E4D20708F0AE </td>
+ </tr>
+ <tr>
+ <td id="L194" class="blob-num js-line-number" data-line-number="194"></td>
+ <td id="LC194" class="blob-code blob-code-inner js-file-line">:100C10008DC1DD278E01106CCCC1C11580E8D807CD </td>
+ </tr>
+ <tr>
+ <td id="L195" class="blob-num js-line-number" data-line-number="195"></td>
+ <td id="LC195" class="blob-code blob-code-inner js-file-line">:100C200058F4C11590E7D90708F07CC1C11520E63A </td>
+ </tr>
+ <tr>
+ <td id="L196" class="blob-num js-line-number" data-line-number="196"></td>
+ <td id="LC196" class="blob-code blob-code-inner js-file-line">:100C3000D20708F422C17AC1C11580E9D80708F0AB </td>
+ </tr>
+ <tr>
+ <td id="L197" class="blob-num js-line-number" data-line-number="197"></td>
+ <td id="LC197" class="blob-code blob-code-inner js-file-line">:100C400075C1DF708E01106AB4C1C53AD10509F4CF </td>
+ </tr>
+ <tr>
+ <td id="L198" class="blob-num js-line-number" data-line-number="198"></td>
+ <td id="LC198" class="blob-code blob-code-inner js-file-line">:100C500072C1C63AD10509F071C102E810E4A9C118 </td>
+ </tr>
+ <tr>
+ <td id="L199" class="blob-num js-line-number" data-line-number="199"></td>
+ <td id="LC199" class="blob-code blob-code-inner js-file-line">:100C6000C83AD10509F46DC1C93AD10509F46CC17E </td>
+ </tr>
+ <tr>
+ <td id="L200" class="blob-num js-line-number" data-line-number="200"></td>
+ <td id="LC200" class="blob-code blob-code-inner js-file-line">:100C7000CA3AD10509F46BC1CB3AD10509F46AC16E </td>
+ </tr>
+ <tr>
+ <td id="L201" class="blob-num js-line-number" data-line-number="201"></td>
+ <td id="LC201" class="blob-code blob-code-inner js-file-line">:100C8000CC3AD10509F469C1CD3AD10509F468C15E </td>
+ </tr>
+ <tr>
+ <td id="L202" class="blob-num js-line-number" data-line-number="202"></td>
+ <td id="LC202" class="blob-code blob-code-inner js-file-line">:100C9000C03BD10509F467C1CE3AD10509F466C15C </td>
+ </tr>
+ <tr>
+ <td id="L203" class="blob-num js-line-number" data-line-number="203"></td>
+ <td id="LC203" class="blob-code blob-code-inner js-file-line">:100CA000CF3AD10509F465C1C13BD10509F464C14E </td>
+ </tr>
+ <tr>
+ <td id="L204" class="blob-num js-line-number" data-line-number="204"></td>
+ <td id="LC204" class="blob-code blob-code-inner js-file-line">:100CB000C23BD10509F463C1C33BD10509F462C14C </td>
+ </tr>
+ <tr>
+ <td id="L205" class="blob-num js-line-number" data-line-number="205"></td>
+ <td id="LC205" class="blob-code blob-code-inner js-file-line">:100CC000C43BD10509F461C1C53BD10509F460C13C </td>
+ </tr>
+ <tr>
+ <td id="L206" class="blob-num js-line-number" data-line-number="206"></td>
+ <td id="LC206" class="blob-code blob-code-inner js-file-line">:100CD000C63BD10509F45FC1C73BD10509F45EC12C </td>
+ </tr>
+ <tr>
+ <td id="L207" class="blob-num js-line-number" data-line-number="207"></td>
+ <td id="LC207" class="blob-code blob-code-inner js-file-line">:100CE000C83BD10509F45DC1C93BD10509F45CC11C </td>
+ </tr>
+ <tr>
+ <td id="L208" class="blob-num js-line-number" data-line-number="208"></td>
+ <td id="LC208" class="blob-code blob-code-inner js-file-line">:100CF000CA3BD10509F45BC100E014E45AC18E017E </td>
+ </tr>
+ <tr>
+ <td id="L209" class="blob-num js-line-number" data-line-number="209"></td>
+ <td id="LC209" class="blob-code blob-code-inner js-file-line">:100D0000106557C1CE019F700E94BA0553C10E9461 </td>
+ </tr>
+ <tr>
+ <td id="L210" class="blob-num js-line-number" data-line-number="210"></td>
+ <td id="LC210" class="blob-code blob-code-inner js-file-line">:100D100014159FEF24E38CE0915020408040E1F7D0 </td>
+ </tr>
+ <tr>
+ <td id="L211" class="blob-num js-line-number" data-line-number="211"></td>
+ <td id="LC211" class="blob-code blob-code-inner js-file-line">:100D200000C000000E944F1C44C18091CF0181602F </td>
+ </tr>
+ <tr>
+ <td id="L212" class="blob-num js-line-number" data-line-number="212"></td>
+ <td id="LC212" class="blob-code blob-code-inner js-file-line">:100D30008093CF013EC10E94F81D811102C00E9424 </td>
+ </tr>
+ <tr>
+ <td id="L213" class="blob-num js-line-number" data-line-number="213"></td>
+ <td id="LC213" class="blob-code blob-code-inner js-file-line">:100D4000DE1D0E94151E90E09093F0018093EF014C </td>
+ </tr>
+ <tr>
+ <td id="L214" class="blob-num js-line-number" data-line-number="214"></td>
+ <td id="LC214" class="blob-code blob-code-inner js-file-line">:100D5000C23090E5D90721F48091EF01816086C00F </td>
+ </tr>
+ <tr>
+ <td id="L215" class="blob-num js-line-number" data-line-number="215"></td>
+ <td id="LC215" class="blob-code blob-code-inner js-file-line">:100D6000C43020E5D20721F48091EF0182607EC07B </td>
+ </tr>
+ <tr>
+ <td id="L216" class="blob-num js-line-number" data-line-number="216"></td>
+ <td id="LC216" class="blob-code blob-code-inner js-file-line">:100D7000C63080E5D80721F48091EF01846076C009 </td>
+ </tr>
+ <tr>
+ <td id="L217" class="blob-num js-line-number" data-line-number="217"></td>
+ <td id="LC217" class="blob-code blob-code-inner js-file-line">:100D8000C83090E5D90719F48091EF0127C0CA3027 </td>
+ </tr>
+ <tr>
+ <td id="L218" class="blob-num js-line-number" data-line-number="218"></td>
+ <td id="LC218" class="blob-code blob-code-inner js-file-line">:100D900020E5D20721F48091EF01806167C0CC305B </td>
+ </tr>
+ <tr>
+ <td id="L219" class="blob-num js-line-number" data-line-number="219"></td>
+ <td id="LC219" class="blob-code blob-code-inner js-file-line">:100DA00080E5D80721F48091EF0180625FC0CE30EA </td>
+ </tr>
+ <tr>
+ <td id="L220" class="blob-num js-line-number" data-line-number="220"></td>
+ <td id="LC220" class="blob-code blob-code-inner js-file-line">:100DB00090E5D90721F48091EF01806457C0C031DC </td>
+ </tr>
+ <tr>
+ <td id="L221" class="blob-num js-line-number" data-line-number="221"></td>
+ <td id="LC221" class="blob-code blob-code-inner js-file-line">:100DC00020E5D20721F48091EF0180684FC0C23145 </td>
+ </tr>
+ <tr>
+ <td id="L222" class="blob-num js-line-number" data-line-number="222"></td>
+ <td id="LC222" class="blob-code blob-code-inner js-file-line">:100DD00080E5D80729F48091EF018460886046C0DF </td>
+ </tr>
+ <tr>
+ <td id="L223" class="blob-num js-line-number" data-line-number="223"></td>
+ <td id="LC223" class="blob-code blob-code-inner js-file-line">:100DE000C33090E5D90721F48091EF018E7F3EC09A </td>
+ </tr>
+ <tr>
+ <td id="L224" class="blob-num js-line-number" data-line-number="224"></td>
+ <td id="LC224" class="blob-code blob-code-inner js-file-line">:100DF000C53020E5D20721F48091EF018D7F36C008 </td>
+ </tr>
+ <tr>
+ <td id="L225" class="blob-num js-line-number" data-line-number="225"></td>
+ <td id="LC225" class="blob-code blob-code-inner js-file-line">:100E0000C73080E5D80721F48091EF018B7F2EC099 </td>
+ </tr>
+ <tr>
+ <td id="L226" class="blob-num js-line-number" data-line-number="226"></td>
+ <td id="LC226" class="blob-code blob-code-inner js-file-line">:100E1000C93090E5D90719F48091EF0126C0CB3095 </td>
+ </tr>
+ <tr>
+ <td id="L227" class="blob-num js-line-number" data-line-number="227"></td>
+ <td id="LC227" class="blob-code blob-code-inner js-file-line">:100E200020E5D20721F48091EF018F7E1FC0CD30E5 </td>
+ </tr>
+ <tr>
+ <td id="L228" class="blob-num js-line-number" data-line-number="228"></td>
+ <td id="LC228" class="blob-code blob-code-inner js-file-line">:100E300080E5D80721F48091EF018F7D17C0CF3076 </td>
+ </tr>
+ <tr>
+ <td id="L229" class="blob-num js-line-number" data-line-number="229"></td>
+ <td id="LC229" class="blob-code blob-code-inner js-file-line">:100E400090E5D90721F48091EF018F7B0FC0C1316C </td>
+ </tr>
+ <tr>
+ <td id="L230" class="blob-num js-line-number" data-line-number="230"></td>
+ <td id="LC230" class="blob-code blob-code-inner js-file-line">:100E500020E5D20721F48091EF018F7707C0C331DD </td>
+ </tr>
+ <tr>
+ <td id="L231" class="blob-num js-line-number" data-line-number="231"></td>
+ <td id="LC231" class="blob-code blob-code-inner js-file-line">:100E6000D04531F48091EF018B7F877F8093EF0134 </td>
+ </tr>
+ <tr>
+ <td id="L232" class="blob-num js-line-number" data-line-number="232"></td>
+ <td id="LC232" class="blob-code blob-code-inner js-file-line">:100E70008091EF010E94191E9CC08D2F99278F70C1 </td>
+ </tr>
+ <tr>
+ <td id="L233" class="blob-num js-line-number" data-line-number="233"></td>
+ <td id="LC233" class="blob-code blob-code-inner js-file-line">:100E8000992781309105D9F49E012370332702C040 </td>
+ </tr>
+ <tr>
+ <td id="L234" class="blob-num js-line-number" data-line-number="234"></td>
+ <td id="LC234" class="blob-code blob-code-inner js-file-line">:100E9000880F991F2A95E2F79C688E0144E0000FA5 </td>
+ </tr>
+ <tr>
+ <td id="L235" class="blob-num js-line-number" data-line-number="235"></td>
+ <td id="LC235" class="blob-code blob-code-inner js-file-line">:100EA000111F4A95E1F700271370802B912B53E017 </td>
+ </tr>
+ <tr>
+ <td id="L236" class="blob-num js-line-number" data-line-number="236"></td>
+ <td id="LC236" class="blob-code blob-code-inner js-file-line">:100EB000CC0FDD1F5A95E1F7C076DD272FC08230B9 </td>
+ </tr>
+ <tr>
+ <td id="L237" class="blob-num js-line-number" data-line-number="237"></td>
+ <td id="LC237" class="blob-code blob-code-inner js-file-line">:100EC000910531F4DC2FCC278E01016F106A71C0BF </td>
+ </tr>
+ <tr>
+ <td id="L238" class="blob-num js-line-number" data-line-number="238"></td>
+ <td id="LC238" class="blob-code blob-code-inner js-file-line">:100ED0008330910569F4CE018370992701E010E019 </td>
+ </tr>
+ <tr>
+ <td id="L239" class="blob-num js-line-number" data-line-number="239"></td>
+ <td id="LC239" class="blob-code blob-code-inner js-file-line">:100EE00002C0000F111F8A95E2F7C8019C680FC06D </td>
+ </tr>
+ <tr>
+ <td id="L240" class="blob-num js-line-number" data-line-number="240"></td>
+ <td id="LC240" class="blob-code blob-code-inner js-file-line">:100EF000049709F05EC0CE018370992701E010E0ED </td>
+ </tr>
+ <tr>
+ <td id="L241" class="blob-num js-line-number" data-line-number="241"></td>
+ <td id="LC241" class="blob-code blob-code-inner js-file-line">:100F000002C0000F111F8A95E2F7C8019A6823E01A </td>
+ </tr>
+ <tr>
+ <td id="L242" class="blob-num js-line-number" data-line-number="242"></td>
+ <td id="LC242" class="blob-code blob-code-inner js-file-line">:100F1000CC0FDD1F2A95E1F7C07ED7708C010C2B1A </td>
+ </tr>
+ <tr>
+ <td id="L243" class="blob-num js-line-number" data-line-number="243"></td>
+ <td id="LC243" class="blob-code blob-code-inner js-file-line">:100F20001D2B47C0DF708E01106243C000E010E04F </td>
+ </tr>
+ <tr>
+ <td id="L244" class="blob-num js-line-number" data-line-number="244"></td>
+ <td id="LC244" class="blob-code blob-code-inner js-file-line">:100F300040C08E013EC001E810E43BC003E810E46D </td>
+ </tr>
+ <tr>
+ <td id="L245" class="blob-num js-line-number" data-line-number="245"></td>
+ <td id="LC245" class="blob-code blob-code-inner js-file-line">:100F400038C002EE14E435C009EE14E432C00AEEF3 </td>
+ </tr>
+ <tr>
+ <td id="L246" class="blob-num js-line-number" data-line-number="246"></td>
+ <td id="LC246" class="blob-code blob-code-inner js-file-line">:100F500014E42FC005EB14E42CC006EB14E429C004 </td>
+ </tr>
+ <tr>
+ <td id="L247" class="blob-num js-line-number" data-line-number="247"></td>
+ <td id="LC247" class="blob-code blob-code-inner js-file-line">:100F600007EB14E426C00CEC14E423C00DEC14E4ED </td>
+ </tr>
+ <tr>
+ <td id="L248" class="blob-num js-line-number" data-line-number="248"></td>
+ <td id="LC248" class="blob-code blob-code-inner js-file-line">:100F700020C003E815E41DC00AE815E41AC002E920 </td>
+ </tr>
+ <tr>
+ <td id="L249" class="blob-num js-line-number" data-line-number="249"></td>
+ <td id="LC249" class="blob-code blob-code-inner js-file-line">:100F800015E417C004E915E414C001E216E411C029 </td>
+ </tr>
+ <tr>
+ <td id="L250" class="blob-num js-line-number" data-line-number="250"></td>
+ <td id="LC250" class="blob-code blob-code-inner js-file-line">:100F900003E216E40EC004E216E40BC005E216E418 </td>
+ </tr>
+ <tr>
+ <td id="L251" class="blob-num js-line-number" data-line-number="251"></td>
+ <td id="LC251" class="blob-code blob-code-inner js-file-line">:100FA00008C006E216E405C007E216E402C00AE241 </td>
+ </tr>
+ <tr>
+ <td id="L252" class="blob-num js-line-number" data-line-number="252"></td>
+ <td id="LC252" class="blob-code blob-code-inner js-file-line">:100FB00016E4C801DF91CF911F910F91089596E03B </td>
+ </tr>
+ <tr>
+ <td id="L253" class="blob-num js-line-number" data-line-number="253"></td>
+ <td id="LC253" class="blob-code blob-code-inner js-file-line">:100FC000799FF001112494E5899FE00DF11D112412 </td>
+ </tr>
+ <tr>
+ <td id="L254" class="blob-num js-line-number" data-line-number="254"></td>
+ <td id="LC254" class="blob-code blob-code-inner js-file-line">:100FD000E60FF11DEE0FFF1FEC51FF4F859194912D </td>
+ </tr>
+ <tr>
+ <td id="L255" class="blob-num js-line-number" data-line-number="255"></td>
+ <td id="LC255" class="blob-code blob-code-inner js-file-line">:100FE000803E9105E0F4803C910558F581339105F0 </td>
+ </tr>
+ <tr>
+ <td id="L256" class="blob-num js-line-number" data-line-number="256"></td>
+ <td id="LC256" class="blob-code blob-code-inner js-file-line">:100FF00009F46FC048F48932910509F463C08A325C </td>
+ </tr>
+ <tr>
+ <td id="L257" class="blob-num js-line-number" data-line-number="257"></td>
+ <td id="LC257" class="blob-code blob-code-inner js-file-line">:10100000910509F46DC072C089339105E9F0823809 </td>
+ </tr>
+ <tr>
+ <td id="L258" class="blob-num js-line-number" data-line-number="258"></td>
+ <td id="LC258" class="blob-code blob-code-inner js-file-line">:101010009105D1F08533910509F44DC067C0833E39 </td>
+ </tr>
+ <tr>
+ <td id="L259" class="blob-num js-line-number" data-line-number="259"></td>
+ <td id="LC259" class="blob-code blob-code-inner js-file-line">:10102000910581F138F4803E9105B9F0823E910539 </td>
+ </tr>
+ <tr>
+ <td id="L260" class="blob-num js-line-number" data-line-number="260"></td>
+ <td id="LC260" class="blob-code blob-code-inner js-file-line">:10103000D9F05CC0863E910561F1873E9105A1F132 </td>
+ </tr>
+ <tr>
+ <td id="L261" class="blob-num js-line-number" data-line-number="261"></td>
+ <td id="LC261" class="blob-code blob-code-inner js-file-line">:1010400055C00E94B20508952091EF0120FD02C015 </td>
+ </tr>
+ <tr>
+ <td id="L262" class="blob-num js-line-number" data-line-number="262"></td>
+ <td id="LC262" class="blob-code blob-code-inner js-file-line">:1010500021FF4CC080EE90E049C08091EF0180FFFD </td>
+ </tr>
+ <tr>
+ <td id="L263" class="blob-num js-line-number" data-line-number="263"></td>
+ <td id="LC263" class="blob-code blob-code-inner js-file-line">:10106000F9CF89E390E042C08091EF0182FF0EC08A </td>
+ </tr>
+ <tr>
+ <td id="L264" class="blob-num js-line-number" data-line-number="264"></td>
+ <td id="LC264" class="blob-code blob-code-inner js-file-line">:101070008091EF0184FF03C080E090E037C083EEF1 </td>
+ </tr>
+ <tr>
+ <td id="L265" class="blob-num js-line-number" data-line-number="265"></td>
+ <td id="LC265" class="blob-code blob-code-inner js-file-line">:1010800090E034C08091EF0182FFF2CF82EE90E0D9 </td>
+ </tr>
+ <tr>
+ <td id="L266" class="blob-num js-line-number" data-line-number="266"></td>
+ <td id="LC266" class="blob-code blob-code-inner js-file-line">:101090002DC08091EF0183FF0BC08091EF0184FD93 </td>
+ </tr>
+ <tr>
+ <td id="L267" class="blob-num js-line-number" data-line-number="267"></td>
+ <td id="LC267" class="blob-code blob-code-inner js-file-line">:1010A000EBCF87EE90E022C08091EF0183FFF5CF78 </td>
+ </tr>
+ <tr>
+ <td id="L268" class="blob-num js-line-number" data-line-number="268"></td>
+ <td id="LC268" class="blob-code blob-code-inner js-file-line">:1010B00086EE90E01BC08091EF0185FF07C089E2BA </td>
+ </tr>
+ <tr>
+ <td id="L269" class="blob-num js-line-number" data-line-number="269"></td>
+ <td id="LC269" class="blob-code blob-code-inner js-file-line">:1010C00090E014C08091EF0185FFF9CF85E390E0B7 </td>
+ </tr>
+ <tr>
+ <td id="L270" class="blob-num js-line-number" data-line-number="270"></td>
+ <td id="LC270" class="blob-code blob-code-inner js-file-line">:1010D0000DC08091EF0186FF07C08AE290E006C054 </td>
+ </tr>
+ <tr>
+ <td id="L271" class="blob-num js-line-number" data-line-number="271"></td>
+ <td id="LC271" class="blob-code blob-code-inner js-file-line">:1010E0008091EF0186FFF9CF81E390E00E94C20575 </td>
+ </tr>
+ <tr>
+ <td id="L272" class="blob-num js-line-number" data-line-number="272"></td>
+ <td id="LC272" class="blob-code blob-code-inner js-file-line">:1010F000089508950C947908809164010895CF9320 </td>
+ </tr>
+ <tr>
+ <td id="L273" class="blob-num js-line-number" data-line-number="273"></td>
+ <td id="LC273" class="blob-code blob-code-inner js-file-line">:10110000DF9300D01F92CDB7DEB79C018091E6013E </td>
+ </tr>
+ <tr>
+ <td id="L274" class="blob-num js-line-number" data-line-number="274"></td>
+ <td id="LC274" class="blob-code blob-code-inner js-file-line">:10111000843019F593E099833B832A839093E90007 </td>
+ </tr>
+ <tr>
+ <td id="L275" class="blob-num js-line-number" data-line-number="275"></td>
+ <td id="LC275" class="blob-code blob-code-inner js-file-line">:101120008FEF9091E800815095FD06C095ED9A955E </td>
+ </tr>
+ <tr>
+ <td id="L276" class="blob-num js-line-number" data-line-number="276"></td>
+ <td id="LC276" class="blob-code blob-code-inner js-file-line">:10113000F1F700008111F5CF8091E80085FF0DC027 </td>
+ </tr>
+ <tr>
+ <td id="L277" class="blob-num js-line-number" data-line-number="277"></td>
+ <td id="LC277" class="blob-code blob-code-inner js-file-line">:1011400040E050E063E070E0CE0101960E94EC0ABE </td>
+ </tr>
+ <tr>
+ <td id="L278" class="blob-num js-line-number" data-line-number="278"></td>
+ <td id="LC278" class="blob-code blob-code-inner js-file-line">:101150008091E8008E778093E8000F900F900F90B9 </td>
+ </tr>
+ <tr>
+ <td id="L279" class="blob-num js-line-number" data-line-number="279"></td>
+ <td id="LC279" class="blob-code blob-code-inner js-file-line">:10116000DF91CF910895CF93DF9300D01F92CDB739 </td>
+ </tr>
+ <tr>
+ <td id="L280" class="blob-num js-line-number" data-line-number="280"></td>
+ <td id="LC280" class="blob-code blob-code-inner js-file-line">:10117000DEB72091E601243021F522E029839B830C </td>
+ </tr>
+ <tr>
+ <td id="L281" class="blob-num js-line-number" data-line-number="281"></td>
+ <td id="LC281" class="blob-code blob-code-inner js-file-line">:101180008A8383E08093E9008FEF9091E80081509B </td>
+ </tr>
+ <tr>
+ <td id="L282" class="blob-num js-line-number" data-line-number="282"></td>
+ <td id="LC282" class="blob-code blob-code-inner js-file-line">:1011900095FD06C095ED9A95F1F700008111F5CF08 </td>
+ </tr>
+ <tr>
+ <td id="L283" class="blob-num js-line-number" data-line-number="283"></td>
+ <td id="LC283" class="blob-code blob-code-inner js-file-line">:1011A0008091E80085FF0DC040E050E063E070E012 </td>
+ </tr>
+ <tr>
+ <td id="L284" class="blob-num js-line-number" data-line-number="284"></td>
+ <td id="LC284" class="blob-code blob-code-inner js-file-line">:1011B000CE0101960E94EC0A8091E8008E77809320 </td>
+ </tr>
+ <tr>
+ <td id="L285" class="blob-num js-line-number" data-line-number="285"></td>
+ <td id="LC285" class="blob-code blob-code-inner js-file-line">:1011C000E8000F900F900F90DF91CF91089520913C </td>
+ </tr>
+ <tr>
+ <td id="L286" class="blob-num js-line-number" data-line-number="286"></td>
+ <td id="LC286" class="blob-code blob-code-inner js-file-line">:1011D000E6012430F1F422E02093E9002FEF309172 </td>
+ </tr>
+ <tr>
+ <td id="L287" class="blob-num js-line-number" data-line-number="287"></td>
+ <td id="LC287" class="blob-code blob-code-inner js-file-line">:1011E000E800215035FD06C035ED3A95F1F70000D5 </td>
+ </tr>
+ <tr>
+ <td id="L288" class="blob-num js-line-number" data-line-number="288"></td>
+ <td id="LC288" class="blob-code blob-code-inner js-file-line">:1011F0002111F5CF2091E80025FF0BC040E050E021 </td>
+ </tr>
+ <tr>
+ <td id="L289" class="blob-num js-line-number" data-line-number="289"></td>
+ <td id="LC289" class="blob-code blob-code-inner js-file-line">:1012000065E070E00E94EC0A8091E8008E778093A0 </td>
+ </tr>
+ <tr>
+ <td id="L290" class="blob-num js-line-number" data-line-number="290"></td>
+ <td id="LC290" class="blob-code blob-code-inner js-file-line">:10121000E8000895CF93DF93EC019091E6019430BC </td>
+ </tr>
+ <tr>
+ <td id="L291" class="blob-num js-line-number" data-line-number="291"></td>
+ <td id="LC291" class="blob-code blob-code-inner js-file-line">:1012200009F046C080910C018823D9F080910D010E </td>
+ </tr>
+ <tr>
+ <td id="L292" class="blob-num js-line-number" data-line-number="292"></td>
+ <td id="LC292" class="blob-code blob-code-inner js-file-line">:101230008823B9F09093E9008FEF9091E8008150F6 </td>
+ </tr>
+ <tr>
+ <td id="L293" class="blob-num js-line-number" data-line-number="293"></td>
+ <td id="LC293" class="blob-code blob-code-inner js-file-line">:1012400095FD06C095E19A95F1F700008111F5CF63 </td>
+ </tr>
+ <tr>
+ <td id="L294" class="blob-num js-line-number" data-line-number="294"></td>
+ <td id="LC294" class="blob-code blob-code-inner js-file-line">:101250008091E80085FF2CC040E050E060E170E044 </td>
+ </tr>
+ <tr>
+ <td id="L295" class="blob-num js-line-number" data-line-number="295"></td>
+ <td id="LC295" class="blob-code blob-code-inner js-file-line">:1012600017C081E08093E9008FEF9091E8008150F2 </td>
+ </tr>
+ <tr>
+ <td id="L296" class="blob-num js-line-number" data-line-number="296"></td>
+ <td id="LC296" class="blob-code blob-code-inner js-file-line">:1012700095FD06C095ED9A95F1F700008111F5CF27 </td>
+ </tr>
+ <tr>
+ <td id="L297" class="blob-num js-line-number" data-line-number="297"></td>
+ <td id="LC297" class="blob-code blob-code-inner js-file-line">:101280008091E80085FF14C040E050E068E070E025 </td>
+ </tr>
+ <tr>
+ <td id="L298" class="blob-num js-line-number" data-line-number="298"></td>
+ <td id="LC298" class="blob-code blob-code-inner js-file-line">:10129000CE010E94EC0A8091E8008E778093E800EE </td>
+ </tr>
+ <tr>
+ <td id="L299" class="blob-num js-line-number" data-line-number="299"></td>
+ <td id="LC299" class="blob-code blob-code-inner js-file-line">:1012A00080E1FE01A4E5B1E001900D928A95E1F79D </td>
+ </tr>
+ <tr>
+ <td id="L300" class="blob-num js-line-number" data-line-number="300"></td>
+ <td id="LC300" class="blob-code blob-code-inner js-file-line">:1012B000DF91CF9108958091E501811109C00E94CD </td>
+ </tr>
+ <tr>
+ <td id="L301" class="blob-num js-line-number" data-line-number="301"></td>
+ <td id="LC301" class="blob-code blob-code-inner js-file-line">:1012C000810C0E94DE0C8091E20084608093E20039 </td>
+ </tr>
+ <tr>
+ <td id="L302" class="blob-num js-line-number" data-line-number="302"></td>
+ <td id="LC302" class="blob-code blob-code-inner js-file-line">:1012D00008951092E501089508950C9487220E94C4 </td>
+ </tr>
+ <tr>
+ <td id="L303" class="blob-num js-line-number" data-line-number="303"></td>
+ <td id="LC303" class="blob-code blob-code-inner js-file-line">:1012E000E51B0E948D220E94840F0C947A0842E034 </td>
+ </tr>
+ <tr>
+ <td id="L304" class="blob-num js-line-number" data-line-number="304"></td>
+ <td id="LC304" class="blob-code blob-code-inner js-file-line">:1012F00061EC81E00E94FB0B42E061EC82E00E9425 </td>
+ </tr>
+ <tr>
+ <td id="L305" class="blob-num js-line-number" data-line-number="305"></td>
+ <td id="LC305" class="blob-code blob-code-inner js-file-line">:10130000FB0B42E061EC83E00E94FB0B42E161ECED </td>
+ </tr>
+ <tr>
+ <td id="L306" class="blob-num js-line-number" data-line-number="306"></td>
+ <td id="LC306" class="blob-code blob-code-inner js-file-line">:1013100084E00C94FB0B8091E801833009F455C004 </td>
+ </tr>
+ <tr>
+ <td id="L307" class="blob-num js-line-number" data-line-number="307"></td>
+ <td id="LC307" class="blob-code blob-code-inner js-file-line">:1013200030F4813071F0823009F48EC008958A3033 </td>
+ </tr>
+ <tr>
+ <td id="L308" class="blob-num js-line-number" data-line-number="308"></td>
+ <td id="LC308" class="blob-code blob-code-inner js-file-line">:1013300009F47AC08B3009F460C0893009F09CC090 </td>
+ </tr>
+ <tr>
+ <td id="L309" class="blob-num js-line-number" data-line-number="309"></td>
+ <td id="LC309" class="blob-code blob-code-inner js-file-line">:1013400020C08091E701813A09F096C08091E800C1 </td>
+ </tr>
+ <tr>
+ <td id="L310" class="blob-num js-line-number" data-line-number="310"></td>
+ <td id="LC310" class="blob-code blob-code-inner js-file-line">:10135000877F8093E8008091EB019091EC01892BCD </td>
+ </tr>
+ <tr>
+ <td id="L311" class="blob-num js-line-number" data-line-number="311"></td>
+ <td id="LC311" class="blob-code blob-code-inner js-file-line">:1013600021F460E184E591E003C060E080E090E07A </td>
+ </tr>
+ <tr>
+ <td id="L312" class="blob-num js-line-number" data-line-number="312"></td>
+ <td id="LC312" class="blob-code blob-code-inner js-file-line">:1013700070E00E94370B8091E8008B778093E80043 </td>
+ </tr>
+ <tr>
+ <td id="L313" class="blob-num js-line-number" data-line-number="313"></td>
+ <td id="LC313" class="blob-code blob-code-inner js-file-line">:1013800008958091E701813209F076C08091EB01E8 </td>
+ </tr>
+ <tr>
+ <td id="L314" class="blob-num js-line-number" data-line-number="314"></td>
+ <td id="LC314" class="blob-code blob-code-inner js-file-line">:101390009091EC01009719F0039709F06DC08091CE </td>
+ </tr>
+ <tr>
+ <td id="L315" class="blob-num js-line-number" data-line-number="315"></td>
+ <td id="LC315" class="blob-code blob-code-inner js-file-line">:1013A000E800877F8093E8008091E80082FD05C017 </td>
+ </tr>
+ <tr>
+ <td id="L316" class="blob-num js-line-number" data-line-number="316"></td>
+ <td id="LC316" class="blob-code blob-code-inner js-file-line">:1013B0008091E6018111F8CF5FC08091F1008093A8 </td>
+ </tr>
+ <tr>
+ <td id="L317" class="blob-num js-line-number" data-line-number="317"></td>
+ <td id="LC317" class="blob-code blob-code-inner js-file-line">:1013C00064018091E8008B7753C08091E701813AF6 </td>
+ </tr>
+ <tr>
+ <td id="L318" class="blob-num js-line-number" data-line-number="318"></td>
+ <td id="LC318" class="blob-code blob-code-inner js-file-line">:1013D00009F052C08091EB019091EC01892B09F04A </td>
+ </tr>
+ <tr>
+ <td id="L319" class="blob-num js-line-number" data-line-number="319"></td>
+ <td id="LC319" class="blob-code blob-code-inner js-file-line">:1013E0004BC08091E800877F8093E8008091E800FF </td>
+ </tr>
+ <tr>
+ <td id="L320" class="blob-num js-line-number" data-line-number="320"></td>
+ <td id="LC320" class="blob-code blob-code-inner js-file-line">:1013F00080FFFCCF80910C0136C08091E7018132E3 </td>
+ </tr>
+ <tr>
+ <td id="L321" class="blob-num js-line-number" data-line-number="321"></td>
+ <td id="LC321" class="blob-code blob-code-inner js-file-line">:10140000D9F58091EB019091EC01892BA9F58091A0 </td>
+ </tr>
+ <tr>
+ <td id="L322" class="blob-num js-line-number" data-line-number="322"></td>
+ <td id="LC322" class="blob-code blob-code-inner js-file-line">:10141000E800877F8093E8000E94300C8091E9010A </td>
+ </tr>
+ <tr>
+ <td id="L323" class="blob-num js-line-number" data-line-number="323"></td>
+ <td id="LC323" class="blob-code blob-code-inner js-file-line">:1014200080930C010C9414158091E701813221F511 </td>
+ </tr>
+ <tr>
+ <td id="L324" class="blob-num js-line-number" data-line-number="324"></td>
+ <td id="LC324" class="blob-code blob-code-inner js-file-line">:101430008091E800877F8093E8000E94300C8091C3 </td>
+ </tr>
+ <tr>
+ <td id="L325" class="blob-num js-line-number" data-line-number="325"></td>
+ <td id="LC325" class="blob-code blob-code-inner js-file-line">:10144000EA018093650108958091E701813AA1F452 </td>
+ </tr>
+ <tr>
+ <td id="L326" class="blob-num js-line-number" data-line-number="326"></td>
+ <td id="LC326" class="blob-code blob-code-inner js-file-line">:101450008091E800877F8093E8008091E80080FF1A </td>
+ </tr>
+ <tr>
+ <td id="L327" class="blob-num js-line-number" data-line-number="327"></td>
+ <td id="LC327" class="blob-code blob-code-inner js-file-line">:10146000FCCF809165018093F1008091E8008E7738 </td>
+ </tr>
+ <tr>
+ <td id="L328" class="blob-num js-line-number" data-line-number="328"></td>
+ <td id="LC328" class="blob-code blob-code-inner js-file-line">:101470008093E8000C94300C089584B7877F84BF74 </td>
+ </tr>
+ <tr>
+ <td id="L329" class="blob-num js-line-number" data-line-number="329"></td>
+ <td id="LC329" class="blob-code blob-code-inner js-file-line">:101480000FB6F894A8958091600088618093600001 </td>
+ </tr>
+ <tr>
+ <td id="L330" class="blob-num js-line-number" data-line-number="330"></td>
+ <td id="LC330" class="blob-code blob-code-inner js-file-line">:10149000109260000FBE90E080E80FB6F894809341 </td>
+ </tr>
+ <tr>
+ <td id="L331" class="blob-num js-line-number" data-line-number="331"></td>
+ <td id="LC331" class="blob-code blob-code-inner js-file-line">:1014A0006100909361000FBE0E94D30F0E94810CD7 </td>
+ </tr>
+ <tr>
+ <td id="L332" class="blob-num js-line-number" data-line-number="332"></td>
+ <td id="LC332" class="blob-code blob-code-inner js-file-line">:1014B0000E94DE0C8091E20084608093E2007894C8 </td>
+ </tr>
+ <tr>
+ <td id="L333" class="blob-num js-line-number" data-line-number="333"></td>
+ <td id="LC333" class="blob-code blob-code-inner js-file-line">:1014C0000E94640F0E94D50F82E091E00E947F0F7E </td>
+ </tr>
+ <tr>
+ <td id="L334" class="blob-num js-line-number" data-line-number="334"></td>
+ <td id="LC334" class="blob-code blob-code-inner js-file-line">:1014D0000E9475228091E601853069F40E94A31B69 </td>
+ </tr>
+ <tr>
+ <td id="L335" class="blob-num js-line-number" data-line-number="335"></td>
+ <td id="LC335" class="blob-code blob-code-inner js-file-line">:1014E0008091E4018823B1F30E94D11B882391F3FA </td>
+ </tr>
+ <tr>
+ <td id="L336" class="blob-num js-line-number" data-line-number="336"></td>
+ <td id="LC336" class="blob-code blob-code-inner js-file-line">:1014F0000E94D60AEFCF0E94DB0FECCF292F3327B3 </td>
+ </tr>
+ <tr>
+ <td id="L337" class="blob-num js-line-number" data-line-number="337"></td>
+ <td id="LC337" class="blob-code blob-code-inner js-file-line">:1015000023303105C9F064F42130310581F02230F7 </td>
+ </tr>
+ <tr>
+ <td id="L338" class="blob-num js-line-number" data-line-number="338"></td>
+ <td id="LC338" class="blob-code blob-code-inner js-file-line">:10151000310509F043C08DE690E020E133E042C0A0 </td>
+ </tr>
+ <tr>
+ <td id="L339" class="blob-num js-line-number" data-line-number="339"></td>
+ <td id="LC339" class="blob-code blob-code-inner js-file-line">:1015200021323105F1F02232310541F137C082E13B </td>
+ </tr>
+ <tr>
+ <td id="L340" class="blob-num js-line-number" data-line-number="340"></td>
+ <td id="LC340" class="blob-code blob-code-inner js-file-line">:1015300090E02DE733E036C099278130910541F0E6 </td>
+ </tr>
+ <tr>
+ <td id="L341" class="blob-num js-line-number" data-line-number="341"></td>
+ <td id="LC341" class="blob-code blob-code-inner js-file-line">:101540008230910541F0892B49F5ECE0F3E005C0CC </td>
+ </tr>
+ <tr>
+ <td id="L342" class="blob-num js-line-number" data-line-number="342"></td>
+ <td id="LC342" class="blob-code blob-code-inner js-file-line">:10155000E4EFF2E002C0ECEDF2E0849190E09F0154 </td>
+ </tr>
+ <tr>
+ <td id="L343" class="blob-num js-line-number" data-line-number="343"></td>
+ <td id="LC343" class="blob-code blob-code-inner js-file-line">:1015600021C06430D8F4E62FF0E0EE0FFF1FEE5DEF </td>
+ </tr>
+ <tr>
+ <td id="L344" class="blob-num js-line-number" data-line-number="344"></td>
+ <td id="LC344" class="blob-code blob-code-inner js-file-line">:10157000FE4F2081318189E090E014C0643070F426 </td>
+ </tr>
+ <tr>
+ <td id="L345" class="blob-num js-line-number" data-line-number="345"></td>
+ <td id="LC345" class="blob-code blob-code-inner js-file-line">:1015800070E0FB01EE0FFF1FE65EFE4F2081318110 </td>
+ </tr>
+ <tr>
+ <td id="L346" class="blob-num js-line-number" data-line-number="346"></td>
+ <td id="LC346" class="blob-code blob-code-inner js-file-line">:10159000FB01EA5EFE4F808190E004C080E090E0B5 </td>
+ </tr>
+ <tr>
+ <td id="L347" class="blob-num js-line-number" data-line-number="347"></td>
+ <td id="LC347" class="blob-code blob-code-inner js-file-line">:1015A00020E030E0FA0131832083089580E189BD95 </td>
+ </tr>
+ <tr>
+ <td id="L348" class="blob-num js-line-number" data-line-number="348"></td>
+ <td id="LC348" class="blob-code blob-code-inner js-file-line">:1015B00082E189BD09B400FEFDCF8091D8008F7D06 </td>
+ </tr>
+ <tr>
+ <td id="L349" class="blob-num js-line-number" data-line-number="349"></td>
+ <td id="LC349" class="blob-code blob-code-inner js-file-line">:1015C0008093D8008091E00082608093E000809159 </td>
+ </tr>
+ <tr>
+ <td id="L350" class="blob-num js-line-number" data-line-number="350"></td>
+ <td id="LC350" class="blob-code blob-code-inner js-file-line">:1015D000E00081FDFCCF0895CF92DF92EF92FF9261 </td>
+ </tr>
+ <tr>
+ <td id="L351" class="blob-num js-line-number" data-line-number="351"></td>
+ <td id="LC351" class="blob-code blob-code-inner js-file-line">:1015E0000F931F93CF93DF93EC018B016A010E944D </td>
+ </tr>
+ <tr>
+ <td id="L352" class="blob-num js-line-number" data-line-number="352"></td>
+ <td id="LC352" class="blob-code blob-code-inner js-file-line">:1015F0004F0C811133C0C114D10439F0F601808140 </td>
+ </tr>
+ <tr>
+ <td id="L353" class="blob-num js-line-number" data-line-number="353"></td>
+ <td id="LC353" class="blob-code blob-code-inner js-file-line">:101600009181081B190BC80FD91FE12CF12C011572 </td>
+ </tr>
+ <tr>
+ <td id="L354" class="blob-num js-line-number" data-line-number="354"></td>
+ <td id="LC354" class="blob-code blob-code-inner js-file-line">:10161000110519F18091E80085FD16C08091E80060 </td>
+ </tr>
+ <tr>
+ <td id="L355" class="blob-num js-line-number" data-line-number="355"></td>
+ <td id="LC355" class="blob-code blob-code-inner js-file-line">:101620008E778093E800C114D10449F0F6018081DF </td>
+ </tr>
+ <tr>
+ <td id="L356" class="blob-num js-line-number" data-line-number="356"></td>
+ <td id="LC356" class="blob-code blob-code-inner js-file-line">:101630009181E80EF91EF182E08285E00FC00E94E0 </td>
+ </tr>
+ <tr>
+ <td id="L357" class="blob-num js-line-number" data-line-number="357"></td>
+ <td id="LC357" class="blob-code blob-code-inner js-file-line">:101640004F0C882321F30AC089918093F100015047 </td>
+ </tr>
+ <tr>
+ <td id="L358" class="blob-num js-line-number" data-line-number="358"></td>
+ <td id="LC358" class="blob-code blob-code-inner js-file-line">:101650001109FFEFEF1AFF0ADACF80E0DF91CF9197 </td>
+ </tr>
+ <tr>
+ <td id="L359" class="blob-num js-line-number" data-line-number="359"></td>
+ <td id="LC359" class="blob-code blob-code-inner js-file-line">:101660001F910F91FF90EF90DF90CF900895209100 </td>
+ </tr>
+ <tr>
+ <td id="L360" class="blob-num js-line-number" data-line-number="360"></td>
+ <td id="LC360" class="blob-code blob-code-inner js-file-line">:10167000ED013091EE012617370748F0611571052D </td>
+ </tr>
+ <tr>
+ <td id="L361" class="blob-num js-line-number" data-line-number="361"></td>
+ <td id="LC361" class="blob-code blob-code-inner js-file-line">:1016800039F42091E8002E772093E80001C0B901D9 </td>
+ </tr>
+ <tr>
+ <td id="L362" class="blob-num js-line-number" data-line-number="362"></td>
+ <td id="LC362" class="blob-code blob-code-inner js-file-line">:1016900040E061157105A9F12091E601222309F4CA </td>
+ </tr>
+ <tr>
+ <td id="L363" class="blob-num js-line-number" data-line-number="363"></td>
+ <td id="LC363" class="blob-code blob-code-inner js-file-line">:1016A00043C0253009F442C02091E80023FD40C02A </td>
+ </tr>
+ <tr>
+ <td id="L364" class="blob-num js-line-number" data-line-number="364"></td>
+ <td id="LC364" class="blob-code blob-code-inner js-file-line">:1016B0002091E80022FD32C02091E80020FFE9CF10 </td>
+ </tr>
+ <tr>
+ <td id="L365" class="blob-num js-line-number" data-line-number="365"></td>
+ <td id="LC365" class="blob-code blob-code-inner js-file-line">:1016C0004091F3002091F20030E0342BFC01CF0177 </td>
+ </tr>
+ <tr>
+ <td id="L366" class="blob-num js-line-number" data-line-number="366"></td>
+ <td id="LC366" class="blob-code blob-code-inner js-file-line">:1016D0006115710559F02830310540F481918093EE </td>
+ </tr>
+ <tr>
+ <td id="L367" class="blob-num js-line-number" data-line-number="367"></td>
+ <td id="LC367" class="blob-code blob-code-inner js-file-line">:1016E000F100615071092F5F3F4FF1CF41E0283089 </td>
+ </tr>
+ <tr>
+ <td id="L368" class="blob-num js-line-number" data-line-number="368"></td>
+ <td id="LC368" class="blob-code blob-code-inner js-file-line">:1016F000310509F040E02091E8002E772093E800C2 </td>
+ </tr>
+ <tr>
+ <td id="L369" class="blob-num js-line-number" data-line-number="369"></td>
+ <td id="LC369" class="blob-code blob-code-inner js-file-line">:10170000C8CF4111C9CF0AC08091E601882361F09A </td>
+ </tr>
+ <tr>
+ <td id="L370" class="blob-num js-line-number" data-line-number="370"></td>
+ <td id="LC370" class="blob-code blob-code-inner js-file-line">:10171000853061F08091E80083FD0AC08091E80087 </td>
+ </tr>
+ <tr>
+ <td id="L371" class="blob-num js-line-number" data-line-number="371"></td>
+ <td id="LC371" class="blob-code blob-code-inner js-file-line">:1017200082FFF2CF80E0089582E0089583E008957B </td>
+ </tr>
+ <tr>
+ <td id="L372" class="blob-num js-line-number" data-line-number="372"></td>
+ <td id="LC372" class="blob-code blob-code-inner js-file-line">:1017300081E008952091ED013091EE0126173707E1 </td>
+ </tr>
+ <tr>
+ <td id="L373" class="blob-num js-line-number" data-line-number="373"></td>
+ <td id="LC373" class="blob-code blob-code-inner js-file-line">:1017400048F06115710539F42091E8002E77209357 </td>
+ </tr>
+ <tr>
+ <td id="L374" class="blob-num js-line-number" data-line-number="374"></td>
+ <td id="LC374" class="blob-code blob-code-inner js-file-line">:10175000E80001C0B901FC0120E06115710591F1BB </td>
+ </tr>
+ <tr>
+ <td id="L375" class="blob-num js-line-number" data-line-number="375"></td>
+ <td id="LC375" class="blob-code blob-code-inner js-file-line">:101760008091E601882309F440C0853009F43FC028 </td>
+ </tr>
+ <tr>
+ <td id="L376" class="blob-num js-line-number" data-line-number="376"></td>
+ <td id="LC376" class="blob-code blob-code-inner js-file-line">:101770008091E80083FD3DC08091E80082FD2FC08C </td>
+ </tr>
+ <tr>
+ <td id="L377" class="blob-num js-line-number" data-line-number="377"></td>
+ <td id="LC377" class="blob-code blob-code-inner js-file-line">:101780008091E80080FFE9CF2091F3008091F20082 </td>
+ </tr>
+ <tr>
+ <td id="L378" class="blob-num js-line-number" data-line-number="378"></td>
+ <td id="LC378" class="blob-code blob-code-inner js-file-line">:1017900090E0922B6115710559F08830910540F465 </td>
+ </tr>
+ <tr>
+ <td id="L379" class="blob-num js-line-number" data-line-number="379"></td>
+ <td id="LC379" class="blob-code blob-code-inner js-file-line">:1017A00024912093F1003196615071090196F2CF96 </td>
+ </tr>
+ <tr>
+ <td id="L380" class="blob-num js-line-number" data-line-number="380"></td>
+ <td id="LC380" class="blob-code blob-code-inner js-file-line">:1017B00021E0089709F020E08091E8008E7780937F </td>
+ </tr>
+ <tr>
+ <td id="L381" class="blob-num js-line-number" data-line-number="381"></td>
+ <td id="LC381" class="blob-code blob-code-inner js-file-line">:1017C000E800CBCF2111CCCF0AC08091E60188235D </td>
+ </tr>
+ <tr>
+ <td id="L382" class="blob-num js-line-number" data-line-number="382"></td>
+ <td id="LC382" class="blob-code blob-code-inner js-file-line">:1017D00061F0853061F08091E80083FD0AC080915E </td>
+ </tr>
+ <tr>
+ <td id="L383" class="blob-num js-line-number" data-line-number="383"></td>
+ <td id="LC383" class="blob-code blob-code-inner js-file-line">:1017E000E80082FFF2CF80E0089582E0089583E070 </td>
+ </tr>
+ <tr>
+ <td id="L384" class="blob-num js-line-number" data-line-number="384"></td>
+ <td id="LC384" class="blob-code blob-code-inner js-file-line">:1017F000089581E00895982F973058F59093E90067 </td>
+ </tr>
+ <tr>
+ <td id="L385" class="blob-num js-line-number" data-line-number="385"></td>
+ <td id="LC385" class="blob-code blob-code-inner js-file-line">:10180000981739F07091EC002091ED005091F000A4 </td>
+ </tr>
+ <tr>
+ <td id="L386" class="blob-num js-line-number" data-line-number="386"></td>
+ <td id="LC386" class="blob-code blob-code-inner js-file-line">:1018100003C0242F762F50E021FF19C03091EB0038 </td>
+ </tr>
+ <tr>
+ <td id="L387" class="blob-num js-line-number" data-line-number="387"></td>
+ <td id="LC387" class="blob-code blob-code-inner js-file-line">:101820003E7F3093EB003091ED003D7F3093ED0033 </td>
+ </tr>
+ <tr>
+ <td id="L388" class="blob-num js-line-number" data-line-number="388"></td>
+ <td id="LC388" class="blob-code blob-code-inner js-file-line">:101830003091EB0031603093EB007093EC0020931B </td>
+ </tr>
+ <tr>
+ <td id="L389" class="blob-num js-line-number" data-line-number="389"></td>
+ <td id="LC389" class="blob-code blob-code-inner js-file-line">:10184000ED005093F0002091EE0027FF07C09F5F4E </td>
+ </tr>
+ <tr>
+ <td id="L390" class="blob-num js-line-number" data-line-number="390"></td>
+ <td id="LC390" class="blob-code blob-code-inner js-file-line">:10185000D3CF8F708093E90081E0089580E00895F0 </td>
+ </tr>
+ <tr>
+ <td id="L391" class="blob-num js-line-number" data-line-number="391"></td>
+ <td id="LC391" class="blob-code blob-code-inner js-file-line">:101860008091E70187FF11C08091E80082FD05C0EB </td>
+ </tr>
+ <tr>
+ <td id="L392" class="blob-num js-line-number" data-line-number="392"></td>
+ <td id="LC392" class="blob-code blob-code-inner js-file-line">:101870008091E6018111F8CF11C08091E8008B774B </td>
+ </tr>
+ <tr>
+ <td id="L393" class="blob-num js-line-number" data-line-number="393"></td>
+ <td id="LC393" class="blob-code blob-code-inner js-file-line">:101880000BC08091E601882349F08091E80080FF39 </td>
+ </tr>
+ <tr>
+ <td id="L394" class="blob-num js-line-number" data-line-number="394"></td>
+ <td id="LC394" class="blob-code blob-code-inner js-file-line">:10189000F8CF8091E8008E778093E800089520913A </td>
+ </tr>
+ <tr>
+ <td id="L395" class="blob-num js-line-number" data-line-number="395"></td>
+ <td id="LC395" class="blob-code blob-code-inner js-file-line">:1018A000E4003091E50095E64091EC00842F8170D2 </td>
+ </tr>
+ <tr>
+ <td id="L396" class="blob-num js-line-number" data-line-number="396"></td>
+ <td id="LC396" class="blob-code blob-code-inner js-file-line">:1018B00040FF22C08091E80080FD1CC08091E601BD </td>
+ </tr>
+ <tr>
+ <td id="L397" class="blob-num js-line-number" data-line-number="397"></td>
+ <td id="LC397" class="blob-code blob-code-inner js-file-line">:1018C000882391F0853091F08091EB0085FD10C068 </td>
+ </tr>
+ <tr>
+ <td id="L398" class="blob-num js-line-number" data-line-number="398"></td>
+ <td id="LC398" class="blob-code blob-code-inner js-file-line">:1018D0004091E4005091E5004217530729F39A0123 </td>
+ </tr>
+ <tr>
+ <td id="L399" class="blob-num js-line-number" data-line-number="399"></td>
+ <td id="LC399" class="blob-code blob-code-inner js-file-line">:1018E000915011F784E0089582E0089583E008950F </td>
+ </tr>
+ <tr>
+ <td id="L400" class="blob-num js-line-number" data-line-number="400"></td>
+ <td id="LC400" class="blob-code blob-code-inner js-file-line">:1018F00081E0089580E008954091E80042FFDECF46 </td>
+ </tr>
+ <tr>
+ <td id="L401" class="blob-num js-line-number" data-line-number="401"></td>
+ <td id="LC401" class="blob-code blob-code-inner js-file-line">:1019000008950E94EF0C0E94F70CE0EEF0E0808159 </td>
+ </tr>
+ <tr>
+ <td id="L402" class="blob-num js-line-number" data-line-number="402"></td>
+ <td id="LC402" class="blob-code blob-code-inner js-file-line">:1019100081608083E8EDF0E080818F77808319BC5F </td>
+ </tr>
+ <tr>
+ <td id="L403" class="blob-num js-line-number" data-line-number="403"></td>
+ <td id="LC403" class="blob-code blob-code-inner js-file-line">:10192000A7EDB0E08C918E7F8C9380818F7E808339 </td>
+ </tr>
+ <tr>
+ <td id="L404" class="blob-num js-line-number" data-line-number="404"></td>
+ <td id="LC404" class="blob-code blob-code-inner js-file-line">:101930001092E50108950F931F93CF93DF930E94B8 </td>
+ </tr>
+ <tr>
+ <td id="L405" class="blob-num js-line-number" data-line-number="405"></td>
+ <td id="LC405" class="blob-code blob-code-inner js-file-line">:10194000EF0C0E94F70CC8EDD0E088818F77888378 </td>
+ </tr>
+ <tr>
+ <td id="L406" class="blob-num js-line-number" data-line-number="406"></td>
+ <td id="LC406" class="blob-code blob-code-inner js-file-line">:1019500088818068888388818F7D888319BC1092F4 </td>
+ </tr>
+ <tr>
+ <td id="L407" class="blob-num js-line-number" data-line-number="407"></td>
+ <td id="LC407" class="blob-code blob-code-inner js-file-line">:10196000E6011092E2011092E4011092E30100EE10 </td>
+ </tr>
+ <tr>
+ <td id="L408" class="blob-num js-line-number" data-line-number="408"></td>
+ <td id="LC408" class="blob-code blob-code-inner js-file-line">:1019700010E0F80180818B7F80838881816088837B </td>
+ </tr>
+ <tr>
+ <td id="L409" class="blob-num js-line-number" data-line-number="409"></td>
+ <td id="LC409" class="blob-code blob-code-inner js-file-line">:1019800042E060E080E00E94FB0BE1EEF0E080814D </td>
+ </tr>
+ <tr>
+ <td id="L410" class="blob-num js-line-number" data-line-number="410"></td>
+ <td id="LC410" class="blob-code blob-code-inner js-file-line">:101990008E7F8083E2EEF0E08081816080838081B1 </td>
+ </tr>
+ <tr>
+ <td id="L411" class="blob-num js-line-number" data-line-number="411"></td>
+ <td id="LC411" class="blob-code blob-code-inner js-file-line">:1019A00088608083F80180818E7F80838881806158 </td>
+ </tr>
+ <tr>
+ <td id="L412" class="blob-num js-line-number" data-line-number="412"></td>
+ <td id="LC412" class="blob-code blob-code-inner js-file-line">:1019B0008883DF91CF911F910F910895E8EDF0E0BA </td>
+ </tr>
+ <tr>
+ <td id="L413" class="blob-num js-line-number" data-line-number="413"></td>
+ <td id="LC413" class="blob-code blob-code-inner js-file-line">:1019C00080818F7E8083E7EDF0E08081816080837D </td>
+ </tr>
+ <tr>
+ <td id="L414" class="blob-num js-line-number" data-line-number="414"></td>
+ <td id="LC414" class="blob-code blob-code-inner js-file-line">:1019D00084E082BF81E08093E5010C949B0CE8EDEC </td>
+ </tr>
+ <tr>
+ <td id="L415" class="blob-num js-line-number" data-line-number="415"></td>
+ <td id="LC415" class="blob-code blob-code-inner js-file-line">:1019E000F0E080818E7F80831092E2000895109253 </td>
+ </tr>
+ <tr>
+ <td id="L416" class="blob-num js-line-number" data-line-number="416"></td>
+ <td id="LC416" class="blob-code blob-code-inner js-file-line">:1019F000DA001092E10008951F920F920FB60F9235 </td>
+ </tr>
+ <tr>
+ <td id="L417" class="blob-num js-line-number" data-line-number="417"></td>
+ <td id="LC417" class="blob-code blob-code-inner js-file-line">:101A000011242F933F934F935F936F937F938F9303 </td>
+ </tr>
+ <tr>
+ <td id="L418" class="blob-num js-line-number" data-line-number="418"></td>
+ <td id="LC418" class="blob-code blob-code-inner js-file-line">:101A10009F93AF93BF93EF93FF938091E10082FF79 </td>
+ </tr>
+ <tr>
+ <td id="L419" class="blob-num js-line-number" data-line-number="419"></td>
+ <td id="LC419" class="blob-code blob-code-inner js-file-line">:101A20000BC08091E20082FF07C08091E1008B7FB4 </td>
+ </tr>
+ <tr>
+ <td id="L420" class="blob-num js-line-number" data-line-number="420"></td>
+ <td id="LC420" class="blob-code blob-code-inner js-file-line">:101A30008093E1000E94630F8091DA0080FF1FC055 </td>
+ </tr>
+ <tr>
+ <td id="L421" class="blob-num js-line-number" data-line-number="421"></td>
+ <td id="LC421" class="blob-code blob-code-inner js-file-line">:101A40008091D80080FF1BC08091DA008E7F809348 </td>
+ </tr>
+ <tr>
+ <td id="L422" class="blob-num js-line-number" data-line-number="422"></td>
+ <td id="LC422" class="blob-code blob-code-inner js-file-line">:101A5000DA008091D90080FF0DC080E189BD82E16C </td>
+ </tr>
+ <tr>
+ <td id="L423" class="blob-num js-line-number" data-line-number="423"></td>
+ <td id="LC423" class="blob-code blob-code-inner js-file-line">:101A600089BD09B400FEFDCF81E08093E6010E94AC </td>
+ </tr>
+ <tr>
+ <td id="L424" class="blob-num js-line-number" data-line-number="424"></td>
+ <td id="LC424" class="blob-code blob-code-inner js-file-line">:101A70005B0905C019BC1092E6010E9469098091BA </td>
+ </tr>
+ <tr>
+ <td id="L425" class="blob-num js-line-number" data-line-number="425"></td>
+ <td id="LC425" class="blob-code blob-code-inner js-file-line">:101A8000E10080FF19C08091E20080FF15C08091C5 </td>
+ </tr>
+ <tr>
+ <td id="L426" class="blob-num js-line-number" data-line-number="426"></td>
+ <td id="LC426" class="blob-code blob-code-inner js-file-line">:101A9000E2008E7F8093E2008091E200806180937B </td>
+ </tr>
+ <tr>
+ <td id="L427" class="blob-num js-line-number" data-line-number="427"></td>
+ <td id="LC427" class="blob-code blob-code-inner js-file-line">:101AA000E2008091D80080628093D80019BC85E064 </td>
+ </tr>
+ <tr>
+ <td id="L428" class="blob-num js-line-number" data-line-number="428"></td>
+ <td id="LC428" class="blob-code blob-code-inner js-file-line">:101AB0008093E6010E946D098091E10084FF30C0AF </td>
+ </tr>
+ <tr>
+ <td id="L429" class="blob-num js-line-number" data-line-number="429"></td>
+ <td id="LC429" class="blob-code blob-code-inner js-file-line">:101AC0008091E20084FF2CC080E189BD82E189BD64 </td>
+ </tr>
+ <tr>
+ <td id="L430" class="blob-num js-line-number" data-line-number="430"></td>
+ <td id="LC430" class="blob-code blob-code-inner js-file-line">:101AD00009B400FEFDCF8091D8008F7D8093D8009F </td>
+ </tr>
+ <tr>
+ <td id="L431" class="blob-num js-line-number" data-line-number="431"></td>
+ <td id="LC431" class="blob-code blob-code-inner js-file-line">:101AE0008091E1008F7E8093E1008091E2008F7E03 </td>
+ </tr>
+ <tr>
+ <td id="L432" class="blob-num js-line-number" data-line-number="432"></td>
+ <td id="LC432" class="blob-code blob-code-inner js-file-line">:101AF0008093E2008091E20081608093E200809117 </td>
+ </tr>
+ <tr>
+ <td id="L433" class="blob-num js-line-number" data-line-number="433"></td>
+ <td id="LC433" class="blob-code blob-code-inner js-file-line">:101B0000E201882311F084E007C08091E30087FDA3 </td>
+ </tr>
+ <tr>
+ <td id="L434" class="blob-num js-line-number" data-line-number="434"></td>
+ <td id="LC434" class="blob-code blob-code-inner js-file-line">:101B100002C081E001C083E08093E6010E946F096A </td>
+ </tr>
+ <tr>
+ <td id="L435" class="blob-num js-line-number" data-line-number="435"></td>
+ <td id="LC435" class="blob-code blob-code-inner js-file-line">:101B20008091E10083FF29C08091E20083FF25C0FE </td>
+ </tr>
+ <tr>
+ <td id="L436" class="blob-num js-line-number" data-line-number="436"></td>
+ <td id="LC436" class="blob-code blob-code-inner js-file-line">:101B30008091E100877F8093E10082E08093E6015D </td>
+ </tr>
+ <tr>
+ <td id="L437" class="blob-num js-line-number" data-line-number="437"></td>
+ <td id="LC437" class="blob-code blob-code-inner js-file-line">:101B40001092E2018091E1008E7F8093E10080910C </td>
+ </tr>
+ <tr>
+ <td id="L438" class="blob-num js-line-number" data-line-number="438"></td>
+ <td id="LC438" class="blob-code blob-code-inner js-file-line">:101B5000E2008E7F8093E2008091E20080618093BA </td>
+ </tr>
+ <tr>
+ <td id="L439" class="blob-num js-line-number" data-line-number="439"></td>
+ <td id="LC439" class="blob-code blob-code-inner js-file-line">:101B6000E20042E060E080E00E94FB0B8091F00028 </td>
+ </tr>
+ <tr>
+ <td id="L440" class="blob-num js-line-number" data-line-number="440"></td>
+ <td id="LC440" class="blob-code blob-code-inner js-file-line">:101B700088608093F0000E946C09FF91EF91BF9103 </td>
+ </tr>
+ <tr>
+ <td id="L441" class="blob-num js-line-number" data-line-number="441"></td>
+ <td id="LC441" class="blob-code blob-code-inner js-file-line">:101B8000AF919F918F917F916F915F914F913F9115 </td>
+ </tr>
+ <tr>
+ <td id="L442" class="blob-num js-line-number" data-line-number="442"></td>
+ <td id="LC442" class="blob-code blob-code-inner js-file-line">:101B90002F910F900FBE0F901F9018951F920F92CC </td>
+ </tr>
+ <tr>
+ <td id="L443" class="blob-num js-line-number" data-line-number="443"></td>
+ <td id="LC443" class="blob-code blob-code-inner js-file-line">:101BA0000FB60F9211242F933F934F935F936F9330 </td>
+ </tr>
+ <tr>
+ <td id="L444" class="blob-num js-line-number" data-line-number="444"></td>
+ <td id="LC444" class="blob-code blob-code-inner js-file-line">:101BB0007F938F939F93AF93BF93CF93DF93EF93D5 </td>
+ </tr>
+ <tr>
+ <td id="L445" class="blob-num js-line-number" data-line-number="445"></td>
+ <td id="LC445" class="blob-code blob-code-inner js-file-line">:101BC000FF93C091E900CF708091EC00D82FD170C5 </td>
+ </tr>
+ <tr>
+ <td id="L446" class="blob-num js-line-number" data-line-number="446"></td>
+ <td id="LC446" class="blob-code blob-code-inner js-file-line">:101BD00080FDD0E81092E9008091F000877F80932B </td>
+ </tr>
+ <tr>
+ <td id="L447" class="blob-num js-line-number" data-line-number="447"></td>
+ <td id="LC447" class="blob-code blob-code-inner js-file-line">:101BE000F00078940E94120E1092E9008091F000AB </td>
+ </tr>
+ <tr>
+ <td id="L448" class="blob-num js-line-number" data-line-number="448"></td>
+ <td id="LC448" class="blob-code blob-code-inner js-file-line">:101BF00088608093F000CD2BCF70C093E900FF91F7 </td>
+ </tr>
+ <tr>
+ <td id="L449" class="blob-num js-line-number" data-line-number="449"></td>
+ <td id="LC449" class="blob-code blob-code-inner js-file-line">:101C0000EF91DF91CF91BF91AF919F918F917F9194 </td>
+ </tr>
+ <tr>
+ <td id="L450" class="blob-num js-line-number" data-line-number="450"></td>
+ <td id="LC450" class="blob-code blob-code-inner js-file-line">:101C10006F915F914F913F912F910F900FBE0F9059 </td>
+ </tr>
+ <tr>
+ <td id="L451" class="blob-num js-line-number" data-line-number="451"></td>
+ <td id="LC451" class="blob-code blob-code-inner js-file-line">:101C20001F9018951F93CF93DF93CDB7DEB7AA9778 </td>
+ </tr>
+ <tr>
+ <td id="L452" class="blob-num js-line-number" data-line-number="452"></td>
+ <td id="LC452" class="blob-code blob-code-inner js-file-line">:101C30000FB6F894DEBF0FBECDBFE7EEF1E088E04F </td>
+ </tr>
+ <tr>
+ <td id="L453" class="blob-num js-line-number" data-line-number="453"></td>
+ <td id="LC453" class="blob-code blob-code-inner js-file-line">:101C40008E0F9091F10091938E13FBCF0E948B0920 </td>
+ </tr>
+ <tr>
+ <td id="L454" class="blob-num js-line-number" data-line-number="454"></td>
+ <td id="LC454" class="blob-code blob-code-inner js-file-line">:101C50008091E80083FF1FC18091E7019091E80126 </td>
+ </tr>
+ <tr>
+ <td id="L455" class="blob-num js-line-number" data-line-number="455"></td>
+ <td id="LC455" class="blob-code blob-code-inner js-file-line">:101C6000492F50E04A30510508F015C1FA01EA5AEF </td>
+ </tr>
+ <tr>
+ <td id="L456" class="blob-num js-line-number" data-line-number="456"></td>
+ <td id="LC456" class="blob-code blob-code-inner js-file-line">:101C7000FF4F0C941E24803881F0823809F00BC18C </td>
+ </tr>
+ <tr>
+ <td id="L457" class="blob-num js-line-number" data-line-number="457"></td>
+ <td id="LC457" class="blob-code blob-code-inner js-file-line">:101C80008091EB018F708093E9008091EB0085FBE0 </td>
+ </tr>
+ <tr>
+ <td id="L458" class="blob-num js-line-number" data-line-number="458"></td>
+ <td id="LC458" class="blob-code blob-code-inner js-file-line">:101C9000882780F91092E90006C08091E3019091B5 </td>
+ </tr>
+ <tr>
+ <td id="L459" class="blob-num js-line-number" data-line-number="459"></td>
+ <td id="LC459" class="blob-code blob-code-inner js-file-line">:101CA000E401911182609091E800977F9093E800A1 </td>
+ </tr>
+ <tr>
+ <td id="L460" class="blob-num js-line-number" data-line-number="460"></td>
+ <td id="LC460" class="blob-code blob-code-inner js-file-line">:101CB0008093F1001092F100C8C0282F2D7F09F009 </td>
+ </tr>
+ <tr>
+ <td id="L461" class="blob-num js-line-number" data-line-number="461"></td>
+ <td id="LC461" class="blob-code blob-code-inner js-file-line">:101CC000EAC0882319F0823061F0E5C08091E90113 </td>
+ </tr>
+ <tr>
+ <td id="L462" class="blob-num js-line-number" data-line-number="462"></td>
+ <td id="LC462" class="blob-code blob-code-inner js-file-line">:101CD000813009F0E0C0933009F080E08093E401A6 </td>
+ </tr>
+ <tr>
+ <td id="L463" class="blob-num js-line-number" data-line-number="463"></td>
+ <td id="LC463" class="blob-code blob-code-inner js-file-line">:101CE0002BC08091E901811127C08091EB018F7099 </td>
+ </tr>
+ <tr>
+ <td id="L464" class="blob-num js-line-number" data-line-number="464"></td>
+ <td id="LC464" class="blob-code blob-code-inner js-file-line">:101CF00009F4D1C08093E9002091EB0020FF1CC0C3 </td>
+ </tr>
+ <tr>
+ <td id="L465" class="blob-num js-line-number" data-line-number="465"></td>
+ <td id="LC465" class="blob-code blob-code-inner js-file-line">:101D0000933021F48091EB00806214C09091EB003D </td>
+ </tr>
+ <tr>
+ <td id="L466" class="blob-num js-line-number" data-line-number="466"></td>
+ <td id="LC466" class="blob-code blob-code-inner js-file-line">:101D100090619093EB0021E030E0A90102C0440FF4 </td>
+ </tr>
+ <tr>
+ <td id="L467" class="blob-num js-line-number" data-line-number="467"></td>
+ <td id="LC467" class="blob-code blob-code-inner js-file-line">:101D2000551F8A95E2F74093EA001092EA008091ED </td>
+ </tr>
+ <tr>
+ <td id="L468" class="blob-num js-line-number" data-line-number="468"></td>
+ <td id="LC468" class="blob-code blob-code-inner js-file-line">:101D3000EB0088608093EB001092E9008091E8004E </td>
+ </tr>
+ <tr>
+ <td id="L469" class="blob-num js-line-number" data-line-number="469"></td>
+ <td id="LC469" class="blob-code blob-code-inner js-file-line">:101D4000877F86C08111A7C01091E9011F7780911C </td>
+ </tr>
+ <tr>
+ <td id="L470" class="blob-num js-line-number" data-line-number="470"></td>
+ <td id="LC470" class="blob-code blob-code-inner js-file-line">:101D5000E3008078812B8093E3008091E800877F07 </td>
+ </tr>
+ <tr>
+ <td id="L471" class="blob-num js-line-number" data-line-number="471"></td>
+ <td id="LC471" class="blob-code blob-code-inner js-file-line">:101D60008093E8000E94300C8091E80080FFFCCF57 </td>
+ </tr>
+ <tr>
+ <td id="L472" class="blob-num js-line-number" data-line-number="472"></td>
+ <td id="LC472" class="blob-code blob-code-inner js-file-line">:101D70008091E30080688093E300111102C082E04B </td>
+ </tr>
+ <tr>
+ <td id="L473" class="blob-num js-line-number" data-line-number="473"></td>
+ <td id="LC473" class="blob-code blob-code-inner js-file-line">:101D800001C083E08093E60186C08058823008F06D </td>
+ </tr>
+ <tr>
+ <td id="L474" class="blob-num js-line-number" data-line-number="474"></td>
+ <td id="LC474" class="blob-code blob-code-inner js-file-line">:101D900082C08091E9019091EA018C3D53E0950762 </td>
+ </tr>
+ <tr>
+ <td id="L475" class="blob-num js-line-number" data-line-number="475"></td>
+ <td id="LC475" class="blob-code blob-code-inner js-file-line">:101DA00079F583E08A838AE289834FB7F894DE016C </td>
+ </tr>
+ <tr>
+ <td id="L476" class="blob-num js-line-number" data-line-number="476"></td>
+ <td id="LC476" class="blob-code blob-code-inner js-file-line">:101DB000139620E03EE051E2E32FF0E0509357000D </td>
+ </tr>
+ <tr>
+ <td id="L477" class="blob-num js-line-number" data-line-number="477"></td>
+ <td id="LC477" class="blob-code blob-code-inner js-file-line">:101DC000E49120FF03C0E295EF703F5FEF708E2F2C </td>
+ </tr>
+ <tr>
+ <td id="L478" class="blob-num js-line-number" data-line-number="478"></td>
+ <td id="LC478" class="blob-code blob-code-inner js-file-line">:101DD00090E0EA3010F0C79601C0C0968D939D93B5 </td>
+ </tr>
+ <tr>
+ <td id="L479" class="blob-num js-line-number" data-line-number="479"></td>
+ <td id="LC479" class="blob-code blob-code-inner js-file-line">:101DE0002F5F243149F74FBF8091E800877F8093B0 </td>
+ </tr>
+ <tr>
+ <td id="L480" class="blob-num js-line-number" data-line-number="480"></td>
+ <td id="LC480" class="blob-code blob-code-inner js-file-line">:101DF000E8006AE270E0CE0101960E94370B14C041 </td>
+ </tr>
+ <tr>
+ <td id="L481" class="blob-num js-line-number" data-line-number="481"></td>
+ <td id="LC481" class="blob-code blob-code-inner js-file-line">:101E0000AE014F5F5F4F6091EB010E947E0ABC0103 </td>
+ </tr>
+ <tr>
+ <td id="L482" class="blob-num js-line-number" data-line-number="482"></td>
+ <td id="LC482" class="blob-code blob-code-inner js-file-line">:101E1000892B09F440C09091E800977F9093E800E7 </td>
+ </tr>
+ <tr>
+ <td id="L483" class="blob-num js-line-number" data-line-number="483"></td>
+ <td id="LC483" class="blob-code blob-code-inner js-file-line">:101E200089819A810E949A0B8091E8008B77809338 </td>
+ </tr>
+ <tr>
+ <td id="L484" class="blob-num js-line-number" data-line-number="484"></td>
+ <td id="LC484" class="blob-code blob-code-inner js-file-line">:101E3000E80031C0803879F58091E800877F809391 </td>
+ </tr>
+ <tr>
+ <td id="L485" class="blob-num js-line-number" data-line-number="485"></td>
+ <td id="LC485" class="blob-code blob-code-inner js-file-line">:101E4000E8008091E2018093F1008091E8008E77B4 </td>
+ </tr>
+ <tr>
+ <td id="L486" class="blob-num js-line-number" data-line-number="486"></td>
+ <td id="LC486" class="blob-code blob-code-inner js-file-line">:101E50008093E8000E94300C1EC081111CC090913C </td>
+ </tr>
+ <tr>
+ <td id="L487" class="blob-num js-line-number" data-line-number="487"></td>
+ <td id="LC487" class="blob-code blob-code-inner js-file-line">:101E6000E9019230C0F48091E800877F8093E80018 </td>
+ </tr>
+ <tr>
+ <td id="L488" class="blob-num js-line-number" data-line-number="488"></td>
+ <td id="LC488" class="blob-code blob-code-inner js-file-line">:101E70009093E2010E94300C8091E201811106C032 </td>
+ </tr>
+ <tr>
+ <td id="L489" class="blob-num js-line-number" data-line-number="489"></td>
+ <td id="LC489" class="blob-code blob-code-inner js-file-line">:101E80008091E30087FD02C081E001C084E080937F </td>
+ </tr>
+ <tr>
+ <td id="L490" class="blob-num js-line-number" data-line-number="490"></td>
+ <td id="LC490" class="blob-code blob-code-inner js-file-line">:101E9000E6010E9477098091E80083FF0AC08091E3 </td>
+ </tr>
+ <tr>
+ <td id="L491" class="blob-num js-line-number" data-line-number="491"></td>
+ <td id="LC491" class="blob-code blob-code-inner js-file-line">:101EA000E800877F8093E8008091EB008062809358 </td>
+ </tr>
+ <tr>
+ <td id="L492" class="blob-num js-line-number" data-line-number="492"></td>
+ <td id="LC492" class="blob-code blob-code-inner js-file-line">:101EB000EB00AA960FB6F894DEBF0FBECDBFDF9140 </td>
+ </tr>
+ <tr>
+ <td id="L493" class="blob-num js-line-number" data-line-number="493"></td>
+ <td id="LC493" class="blob-code blob-code-inner js-file-line">:101EC000CF911F9108950895CF938091E6018823C3 </td>
+ </tr>
+ <tr>
+ <td id="L494" class="blob-num js-line-number" data-line-number="494"></td>
+ <td id="LC494" class="blob-code blob-code-inner js-file-line">:101ED000A1F0C091E900CF709091EC00892F817042 </td>
+ </tr>
+ <tr>
+ <td id="L495" class="blob-num js-line-number" data-line-number="495"></td>
+ <td id="LC495" class="blob-code blob-code-inner js-file-line">:101EE00090FD80E8C82B1092E9008091E80083FD06 </td>
+ </tr>
+ <tr>
+ <td id="L496" class="blob-num js-line-number" data-line-number="496"></td>
+ <td id="LC496" class="blob-code blob-code-inner js-file-line">:101EF0000E94120ECF70C093E900CF910895909385 </td>
+ </tr>
+ <tr>
+ <td id="L497" class="blob-num js-line-number" data-line-number="497"></td>
+ <td id="LC497" class="blob-code blob-code-inner js-file-line">:101F00006B0180936A010895E0916A01F0916B0181 </td>
+ </tr>
+ <tr>
+ <td id="L498" class="blob-num js-line-number" data-line-number="498"></td>
+ <td id="LC498" class="blob-code blob-code-inner js-file-line">:101F1000309721F00190F081E02D099480E0089540 </td>
+ </tr>
+ <tr>
+ <td id="L499" class="blob-num js-line-number" data-line-number="499"></td>
+ <td id="LC499" class="blob-code blob-code-inner js-file-line">:101F2000E0916A01F0916B01309721F00280F3811A </td>
+ </tr>
+ <tr>
+ <td id="L500" class="blob-num js-line-number" data-line-number="500"></td>
+ <td id="LC500" class="blob-code blob-code-inner js-file-line">:101F3000E02D09940895E0916A01F0916B013097CA </td>
+ </tr>
+ <tr>
+ <td id="L501" class="blob-num js-line-number" data-line-number="501"></td>
+ <td id="LC501" class="blob-code blob-code-inner js-file-line">:101F400021F00480F581E02D099408952091680125 </td>
+ </tr>
+ <tr>
+ <td id="L502" class="blob-num js-line-number" data-line-number="502"></td>
+ <td id="LC502" class="blob-code blob-code-inner js-file-line">:101F5000309169018217930771F090936901809322 </td>
+ </tr>
+ <tr>
+ <td id="L503" class="blob-num js-line-number" data-line-number="503"></td>
+ <td id="LC503" class="blob-code blob-code-inner js-file-line">:101F60006801E0916A01F0916B01309721F00680E1 </td>
+ </tr>
+ <tr>
+ <td id="L504" class="blob-num js-line-number" data-line-number="504"></td>
+ <td id="LC504" class="blob-code blob-code-inner js-file-line">:101F7000F781E02D09940895209166013091670161 </td>
+ </tr>
+ <tr>
+ <td id="L505" class="blob-num js-line-number" data-line-number="505"></td>
+ <td id="LC505" class="blob-code blob-code-inner js-file-line">:101F80008217930771F09093670180936601E09147 </td>
+ </tr>
+ <tr>
+ <td id="L506" class="blob-num js-line-number" data-line-number="506"></td>
+ <td id="LC506" class="blob-code blob-code-inner js-file-line">:101F90006A01F0916B01309721F00084F185E02D0A </td>
+ </tr>
+ <tr>
+ <td id="L507" class="blob-num js-line-number" data-line-number="507"></td>
+ <td id="LC507" class="blob-code blob-code-inner js-file-line">:101FA0000994089508950C94D20F0E94EB1B0E948F </td>
+ </tr>
+ <tr>
+ <td id="L508" class="blob-num js-line-number" data-line-number="508"></td>
+ <td id="LC508" class="blob-code blob-code-inner js-file-line">:101FB00092040C94B11CCF92DF92EF92FF920F9398 </td>
+ </tr>
+ <tr>
+ <td id="L509" class="blob-num js-line-number" data-line-number="509"></td>
+ <td id="LC509" class="blob-code blob-code-inner js-file-line">:101FC0001F93CF93DF93CDB7DEB72B970FB6F8945F </td>
+ </tr>
+ <tr>
+ <td id="L510" class="blob-num js-line-number" data-line-number="510"></td>
+ <td id="LC510" class="blob-code blob-code-inner js-file-line">:101FD000DEBF0FBECDBF0E94AA048DE6C82E81E0F1 </td>
+ </tr>
+ <tr>
+ <td id="L511" class="blob-num js-line-number" data-line-number="511"></td>
+ <td id="LC511" class="blob-code blob-code-inner js-file-line">:101FE000D82E00E010E0E02E802F0E949805F60128 </td>
+ </tr>
+ <tr>
+ <td id="L512" class="blob-num js-line-number" data-line-number="512"></td>
+ <td id="LC512" class="blob-code blob-code-inner js-file-line">:101FF00041916F01F42EF826B1F40F5F1F4F0E30A0 </td>
+ </tr>
+ <tr>
+ <td id="L513" class="blob-num js-line-number" data-line-number="513"></td>
+ <td id="LC513" class="blob-code blob-code-inner js-file-line">:10200000110589F78FEF89838A831B820E94F41B55 </td>
+ </tr>
+ <tr>
+ <td id="L514" class="blob-num js-line-number" data-line-number="514"></td>
+ <td id="LC514" class="blob-code blob-code-inner js-file-line">:102010008160782F9D838C8349815A816B818D816A </td>
+ </tr>
+ <tr>
+ <td id="L515" class="blob-num js-line-number" data-line-number="515"></td>
+ <td id="LC515" class="blob-code blob-code-inner js-file-line">:102020000E947E1040C09091CF0191FF04C08B8729 </td>
+ </tr>
+ <tr>
+ <td id="L516" class="blob-num js-line-number" data-line-number="516"></td>
+ <td id="LC516" class="blob-code blob-code-inner js-file-line">:102030000E949E058B8520E030E04F2D50E0922FCE </td>
+ </tr>
+ <tr>
+ <td id="L517" class="blob-num js-line-number" data-line-number="517"></td>
+ <td id="LC517" class="blob-code blob-code-inner js-file-line">:10204000BA01022E02C0759567950A94E2F760FF07 </td>
+ </tr>
+ <tr>
+ <td id="L518" class="blob-num js-line-number" data-line-number="518"></td>
+ <td id="LC518" class="blob-code blob-code-inner js-file-line">:1020500024C02E83EF8221E030E0690102C0CC0C65 </td>
+ </tr>
+ <tr>
+ <td id="L519" class="blob-num js-line-number" data-line-number="519"></td>
+ <td id="LC519" class="blob-code blob-code-inner js-file-line">:10206000DD1C9A95E2F790E08C219D21892B09F4E3 </td>
+ </tr>
+ <tr>
+ <td id="L520" class="blob-num js-line-number" data-line-number="520"></td>
+ <td id="LC520" class="blob-code blob-code-inner js-file-line">:1020700020E028870E94F41B8160782F9A87898747 </td>
+ </tr>
+ <tr>
+ <td id="L521" class="blob-num js-line-number" data-line-number="521"></td>
+ <td id="LC521" class="blob-code blob-code-inner js-file-line">:102080004E815F8168858A850E947E10F801E35940 </td>
+ </tr>
+ <tr>
+ <td id="L522" class="blob-num js-line-number" data-line-number="522"></td>
+ <td id="LC522" class="blob-code blob-code-inner js-file-line">:10209000FE4F8081C826C08206C02F5F3F4F26308A </td>
+ </tr>
+ <tr>
+ <td id="L523" class="blob-num js-line-number" data-line-number="523"></td>
+ <td id="LC523" class="blob-code blob-code-inner js-file-line">:1020A000310569F6AACF0E94981F10916C010E9419 </td>
+ </tr>
+ <tr>
+ <td id="L524" class="blob-num js-line-number" data-line-number="524"></td>
+ <td id="LC524" class="blob-code blob-code-inner js-file-line">:1020B000840F1817A1F00E94840F80936C012B9657 </td>
+ </tr>
+ <tr>
+ <td id="L525" class="blob-num js-line-number" data-line-number="525"></td>
+ <td id="LC525" class="blob-code blob-code-inner js-file-line">:1020C0000FB6F894DEBF0FBECDBFDF91CF911F9149 </td>
+ </tr>
+ <tr>
+ <td id="L526" class="blob-num js-line-number" data-line-number="526"></td>
+ <td id="LC526" class="blob-code blob-code-inner js-file-line">:1020D0000F91FF90EF90DF90CF900C947A082B96A1 </td>
+ </tr>
+ <tr>
+ <td id="L527" class="blob-num js-line-number" data-line-number="527"></td>
+ <td id="LC527" class="blob-code blob-code-inner js-file-line">:1020E0000FB6F894DEBF0FBECDBFDF91CF911F9129 </td>
+ </tr>
+ <tr>
+ <td id="L528" class="blob-num js-line-number" data-line-number="528"></td>
+ <td id="LC528" class="blob-code blob-code-inner js-file-line">:1020F0000F91FF90EF90DF90CF900895CF93DF93F3 </td>
+ </tr>
+ <tr>
+ <td id="L529" class="blob-num js-line-number" data-line-number="529"></td>
+ <td id="LC529" class="blob-code blob-code-inner js-file-line">:10210000CDB7DEB72B970FB6F894DEBF0FBECDBFAD </td>
+ </tr>
+ <tr>
+ <td id="L530" class="blob-num js-line-number" data-line-number="530"></td>
+ <td id="LC530" class="blob-code blob-code-inner js-file-line">:102110004F83588769877A878B87DE01119686E01F </td>
+ </tr>
+ <tr>
+ <td id="L531" class="blob-num js-line-number" data-line-number="531"></td>
+ <td id="LC531" class="blob-code blob-code-inner js-file-line">:10212000FD0111928A95E9F785E0FE01379601904D </td>
+ </tr>
+ <tr>
+ <td id="L532" class="blob-num js-line-number" data-line-number="532"></td>
+ <td id="LC532" class="blob-code blob-code-inner js-file-line">:102130000D928A95E1F749815A816B817C818D816D </td>
+ </tr>
+ <tr>
+ <td id="L533" class="blob-num js-line-number" data-line-number="533"></td>
+ <td id="LC533" class="blob-code blob-code-inner js-file-line">:102140009E810E94AE172B960FB6F894DEBF0FBE8D </td>
+ </tr>
+ <tr>
+ <td id="L534" class="blob-num js-line-number" data-line-number="534"></td>
+ <td id="LC534" class="blob-code blob-code-inner js-file-line">:10215000CDBFDF91CF9108950895CF93882309F4DF </td>
+ </tr>
+ <tr>
+ <td id="L535" class="blob-num js-line-number" data-line-number="535"></td>
+ <td id="LC535" class="blob-code blob-code-inner js-file-line">:10216000C2C0C82F823859F40E94840F81FDBBC0C1 </td>
+ </tr>
+ <tr>
+ <td id="L536" class="blob-num js-line-number" data-line-number="536"></td>
+ <td id="LC536" class="blob-code blob-code-inner js-file-line">:1021700089E30E94571A0E94241B89E30CC083380C </td>
+ </tr>
+ <tr>
+ <td id="L537" class="blob-num js-line-number" data-line-number="537"></td>
+ <td id="LC537" class="blob-code blob-code-inner js-file-line">:1021800079F40E94840F80FDAEC083E50E94571A47 </td>
+ </tr>
+ <tr>
+ <td id="L538" class="blob-num js-line-number" data-line-number="538"></td>
+ <td id="LC538" class="blob-code blob-code-inner js-file-line">:102190000E94241B83E50E94991ACF910C94241B62 </td>
+ </tr>
+ <tr>
+ <td id="L539" class="blob-num js-line-number" data-line-number="539"></td>
+ <td id="LC539" class="blob-code blob-code-inner js-file-line">:1021A000843859F40E94840F82FD9DC087E40E9408 </td>
+ </tr>
+ <tr>
+ <td id="L540" class="blob-num js-line-number" data-line-number="540"></td>
+ <td id="LC540" class="blob-code blob-code-inner js-file-line">:1021B000571A0E94241B87E4EECF8CEF8C0F813AD4 </td>
+ </tr>
+ <tr>
+ <td id="L541" class="blob-num js-line-number" data-line-number="541"></td>
+ <td id="LC541" class="blob-code blob-code-inner js-file-line">:1021C00048F48C2F0E94DA2181118DC08C2F0E943F </td>
+ </tr>
+ <tr>
+ <td id="L542" class="blob-num js-line-number" data-line-number="542"></td>
+ <td id="LC542" class="blob-code blob-code-inner js-file-line">:1021D000571AE3CF80E28C0F883048F4C77081E053 </td>
+ </tr>
+ <tr>
+ <td id="L543" class="blob-num js-line-number" data-line-number="543"></td>
+ <td id="LC543" class="blob-code blob-code-inner js-file-line">:1021E00001C0880FCA95EAF70E94DD1AD6CF8BE5A9 </td>
+ </tr>
+ <tr>
+ <td id="L544" class="blob-num js-line-number" data-line-number="544"></td>
+ <td id="LC544" class="blob-code blob-code-inner js-file-line">:1021F0008C0F833078F4C53A29F0C63A31F083E881 </td>
+ </tr>
+ <tr>
+ <td id="L545" class="blob-num js-line-number" data-line-number="545"></td>
+ <td id="LC545" class="blob-code blob-code-inner js-file-line">:1022000090E005C081E890E002C082E890E0CF91C4 </td>
+ </tr>
+ <tr>
+ <td id="L546" class="blob-num js-line-number" data-line-number="546"></td>
+ <td id="LC546" class="blob-code blob-code-inner js-file-line">:102210000C94A60F88E58C0F833108F064C0C83A8F </td>
+ </tr>
+ <tr>
+ <td id="L547" class="blob-num js-line-number" data-line-number="547"></td>
+ <td id="LC547" class="blob-code blob-code-inner js-file-line">:1022200039F1C93A41F1CA3A49F1CB3A51F1CC3AC4 </td>
+ </tr>
+ <tr>
+ <td id="L548" class="blob-num js-line-number" data-line-number="548"></td>
+ <td id="LC548" class="blob-code blob-code-inner js-file-line">:1022300059F1CD3A61F1C03B69F1CE3A71F1CF3A33 </td>
+ </tr>
+ <tr>
+ <td id="L549" class="blob-num js-line-number" data-line-number="549"></td>
+ <td id="LC549" class="blob-code blob-code-inner js-file-line">:1022400079F1C13B81F1C23B89F1C33B91F1C43BC0 </td>
+ </tr>
+ <tr>
+ <td id="L550" class="blob-num js-line-number" data-line-number="550"></td>
+ <td id="LC550" class="blob-code blob-code-inner js-file-line">:1022500099F1C53BA1F1C63BA9F1C73BB1F1C83B20 </td>
+ </tr>
+ <tr>
+ <td id="L551" class="blob-num js-line-number" data-line-number="551"></td>
+ <td id="LC551" class="blob-code blob-code-inner js-file-line">:10226000B9F1C93BC1F1CA3BC9F180E090E038C087 </td>
+ </tr>
+ <tr>
+ <td id="L552" class="blob-num js-line-number" data-line-number="552"></td>
+ <td id="LC552" class="blob-code blob-code-inner js-file-line">:1022700082EE90E035C089EE90E032C08AEE90E0C8 </td>
+ </tr>
+ <tr>
+ <td id="L553" class="blob-num js-line-number" data-line-number="553"></td>
+ <td id="LC553" class="blob-code blob-code-inner js-file-line">:102280002FC085EB90E02CC086EB90E029C087EB57 </td>
+ </tr>
+ <tr>
+ <td id="L554" class="blob-num js-line-number" data-line-number="554"></td>
+ <td id="LC554" class="blob-code blob-code-inner js-file-line">:1022900090E026C08CEC90E023C08DEC90E020C054 </td>
+ </tr>
+ <tr>
+ <td id="L555" class="blob-num js-line-number" data-line-number="555"></td>
+ <td id="LC555" class="blob-code blob-code-inner js-file-line">:1022A00083E891E01DC08AE891E01AC082E991E0DC </td>
+ </tr>
+ <tr>
+ <td id="L556" class="blob-num js-line-number" data-line-number="556"></td>
+ <td id="LC556" class="blob-code blob-code-inner js-file-line">:1022B00017C084E991E014C081E292E011C083E28A </td>
+ </tr>
+ <tr>
+ <td id="L557" class="blob-num js-line-number" data-line-number="557"></td>
+ <td id="LC557" class="blob-code blob-code-inner js-file-line">:1022C00092E00EC084E292E00BC085E292E008C08A </td>
+ </tr>
+ <tr>
+ <td id="L558" class="blob-num js-line-number" data-line-number="558"></td>
+ <td id="LC558" class="blob-code blob-code-inner js-file-line">:1022D00086E292E005C087E292E002C08AE292E0E4 </td>
+ </tr>
+ <tr>
+ <td id="L559" class="blob-num js-line-number" data-line-number="559"></td>
+ <td id="LC559" class="blob-code blob-code-inner js-file-line">:1022E000CF910C94BC0FCF910895882309F44BC073 </td>
+ </tr>
+ <tr>
+ <td id="L560" class="blob-num js-line-number" data-line-number="560"></td>
+ <td id="LC560" class="blob-code blob-code-inner js-file-line">:1022F000823859F40E94840F81FF45C089E30E940F </td>
+ </tr>
+ <tr>
+ <td id="L561" class="blob-num js-line-number" data-line-number="561"></td>
+ <td id="LC561" class="blob-code blob-code-inner js-file-line">:10230000571A0E94241B89E30CC0833871F40E9481 </td>
+ </tr>
+ <tr>
+ <td id="L562" class="blob-num js-line-number" data-line-number="562"></td>
+ <td id="LC562" class="blob-code blob-code-inner js-file-line">:10231000840F80FF38C083E50E94571A0E94241B57 </td>
+ </tr>
+ <tr>
+ <td id="L563" class="blob-num js-line-number" data-line-number="563"></td>
+ <td id="LC563" class="blob-code blob-code-inner js-file-line">:1023200083E50E94991A0C94241B843859F40E9466 </td>
+ </tr>
+ <tr>
+ <td id="L564" class="blob-num js-line-number" data-line-number="564"></td>
+ <td id="LC564" class="blob-code blob-code-inner js-file-line">:10233000840F82FF28C087E40E94571A0E94241B42 </td>
+ </tr>
+ <tr>
+ <td id="L565" class="blob-num js-line-number" data-line-number="565"></td>
+ <td id="LC565" class="blob-code blob-code-inner js-file-line">:1023400087E4EFCF9CEF980F913A58F390E2980F03 </td>
+ </tr>
+ <tr>
+ <td id="L566" class="blob-num js-line-number" data-line-number="566"></td>
+ <td id="LC566" class="blob-code blob-code-inner js-file-line">:10235000983050F4877091E001C0990F8A95EAF7A0 </td>
+ </tr>
+ <tr>
+ <td id="L567" class="blob-num js-line-number" data-line-number="567"></td>
+ <td id="LC567" class="blob-code blob-code-inner js-file-line">:10236000892F0E94E31ADFCF9BE5980F933020F46A </td>
+ </tr>
+ <tr>
+ <td id="L568" class="blob-num js-line-number" data-line-number="568"></td>
+ <td id="LC568" class="blob-code blob-code-inner js-file-line">:1023700080E090E00C94A60F885A833120F480E02E </td>
+ </tr>
+ <tr>
+ <td id="L569" class="blob-num js-line-number" data-line-number="569"></td>
+ <td id="LC569" class="blob-code blob-code-inner js-file-line">:1023800090E00C94BC0F0895882321F00E94DD1A80 </td>
+ </tr>
+ <tr>
+ <td id="L570" class="blob-num js-line-number" data-line-number="570"></td>
+ <td id="LC570" class="blob-code blob-code-inner js-file-line">:102390000C94241B0895882321F00E94E31A0C94C6 </td>
+ </tr>
+ <tr>
+ <td id="L571" class="blob-num js-line-number" data-line-number="571"></td>
+ <td id="LC571" class="blob-code blob-code-inner js-file-line">:1023A000241B0895BF92CF92DF92EF92FF920F937A </td>
+ </tr>
+ <tr>
+ <td id="L572" class="blob-num js-line-number" data-line-number="572"></td>
+ <td id="LC572" class="blob-code blob-code-inner js-file-line">:1023B0001F93CF93DF9300D000D000D0CDB7DEB70E </td>
+ </tr>
+ <tr>
+ <td id="L573" class="blob-num js-line-number" data-line-number="573"></td>
+ <td id="LC573" class="blob-code blob-code-inner js-file-line">:1023C00025E0FC01DE01119601900D922A95E1F7BE </td>
+ </tr>
+ <tr>
+ <td id="L574" class="blob-num js-line-number" data-line-number="574"></td>
+ <td id="LC574" class="blob-code blob-code-inner js-file-line">:1023D000FC01D08011810281258122952F704381DB </td>
+ </tr>
+ <tr>
+ <td id="L575" class="blob-num js-line-number" data-line-number="575"></td>
+ <td id="LC575" class="blob-code blob-code-inner js-file-line">:1023E0005481452B09F4FCC21F3F21F4FFEFDF1697 </td>
+ </tr>
+ <tr>
+ <td id="L576" class="blob-num js-line-number" data-line-number="576"></td>
+ <td id="LC576" class="blob-code blob-code-inner js-file-line">:1023F00009F4F6C27C012E830E94AC10D9821A83A4 </td>
+ </tr>
+ <tr>
+ <td id="L577" class="blob-num js-line-number" data-line-number="577"></td>
+ <td id="LC577" class="blob-code blob-code-inner js-file-line">:1024000069817A81802F0E94531A182FB92E0E9459 </td>
+ </tr>
+ <tr>
+ <td id="L578" class="blob-num js-line-number" data-line-number="578"></td>
+ <td id="LC578" class="blob-code blob-code-inner js-file-line">:10241000081A0E94CF182E81002319F00E94FA1A80 </td>
+ </tr>
+ <tr>
+ <td id="L579" class="blob-num js-line-number" data-line-number="579"></td>
+ <td id="LC579" class="blob-code blob-code-inner js-file-line">:102420002E81EB2DE295EF70F0E0E05AFF4F0C9417 </td>
+ </tr>
+ <tr>
+ <td id="L580" class="blob-num js-line-number" data-line-number="580"></td>
+ <td id="LC580" class="blob-code blob-code-inner js-file-line">:102430001E248B2D807F9B2D9F70F92E882319F0F1 </td>
+ </tr>
+ <tr>
+ <td id="L581" class="blob-num js-line-number" data-line-number="581"></td>
+ <td id="LC581" class="blob-code blob-code-inner js-file-line">:10244000F29480EFF822002389F0FF2009F475C28E </td>
+ </tr>
+ <tr>
+ <td id="L582" class="blob-num js-line-number" data-line-number="582"></td>
+ <td id="LC582" class="blob-code blob-code-inner js-file-line">:1024500080E2810F883020F48F2D0E94DD1A03C0A6 </td>
+ </tr>
+ <tr>
+ <td id="L583" class="blob-num js-line-number" data-line-number="583"></td>
+ <td id="LC583" class="blob-code blob-code-inner js-file-line">:102460008F2D0E94ED1A0E94241B67C2812F0E94AB </td>
+ </tr>
+ <tr>
+ <td id="L584" class="blob-num js-line-number" data-line-number="584"></td>
+ <td id="LC584" class="blob-code blob-code-inner js-file-line">:102470007511FF2009F4B4C2105E8F2D183018F4C6 </td>
+ </tr>
+ <tr>
+ <td id="L585" class="blob-num js-line-number" data-line-number="585"></td>
+ <td id="LC585" class="blob-code blob-code-inner js-file-line">:102480000E94E31A02C00E94F31A26960FB6F8942F </td>
+ </tr>
+ <tr>
+ <td id="L586" class="blob-num js-line-number" data-line-number="586"></td>
+ <td id="LC586" class="blob-code blob-code-inner js-file-line">:10249000DEBF0FBECDBFDF91CF911F910F91FF9097 </td>
+ </tr>
+ <tr>
+ <td id="L587" class="blob-num js-line-number" data-line-number="587"></td>
+ <td id="LC587" class="blob-code blob-code-inner js-file-line">:1024A000EF90DF90CF90BF900C94241B3B2D307F9A </td>
+ </tr>
+ <tr>
+ <td id="L588" class="blob-num js-line-number" data-line-number="588"></td>
+ <td id="LC588" class="blob-code blob-code-inner js-file-line">:1024B0008B2D8F70303211F08295807F112319F0AF </td>
+ </tr>
+ <tr>
+ <td id="L589" class="blob-num js-line-number" data-line-number="589"></td>
+ <td id="LC589" class="blob-code blob-code-inner js-file-line">:1024C000113021F12CC00023B9F0222309F4A0C15E </td>
+ </tr>
+ <tr>
+ <td id="L590" class="blob-num js-line-number" data-line-number="590"></td>
+ <td id="LC590" class="blob-code blob-code-inner js-file-line">:1024D000213009F09DC126960FB6F894DEBF0FBEDD </td>
+ </tr>
+ <tr>
+ <td id="L591" class="blob-num js-line-number" data-line-number="591"></td>
+ <td id="LC591" class="blob-code blob-code-inner js-file-line">:1024E000CDBFDF91CF911F910F91FF90EF90DF90C3 </td>
+ </tr>
+ <tr>
+ <td id="L592" class="blob-num js-line-number" data-line-number="592"></td>
+ <td id="LC592" class="blob-code blob-code-inner js-file-line">:1024F000CF90BF900C940D1B222319F0213009F4CA </td>
+ </tr>
+ <tr>
+ <td id="L593" class="blob-num js-line-number" data-line-number="593"></td>
+ <td id="LC593" class="blob-code blob-code-inner js-file-line">:102500006FC28E830E94101B8E8196C1002321F022 </td>
+ </tr>
+ <tr>
+ <td id="L594" class="blob-num js-line-number" data-line-number="594"></td>
+ <td id="LC594" class="blob-code blob-code-inner js-file-line">:10251000223008F065C27CC1211162C28DC1002346 </td>
+ </tr>
+ <tr>
+ <td id="L595" class="blob-num js-line-number" data-line-number="595"></td>
+ <td id="LC595" class="blob-code blob-code-inner js-file-line">:1025200021F0222309F474C108C2222309F484C1D2 </td>
+ </tr>
+ <tr>
+ <td id="L596" class="blob-num js-line-number" data-line-number="596"></td>
+ <td id="LC596" class="blob-code blob-code-inner js-file-line">:1025300019C22B2D26952695237030E021153105E3 </td>
+ </tr>
+ <tr>
+ <td id="L597" class="blob-num js-line-number" data-line-number="597"></td>
+ <td id="LC597" class="blob-code blob-code-inner js-file-line">:1025400021F021303105D1F04BC2002321F0812F41 </td>
+ </tr>
+ <tr>
+ <td id="L598" class="blob-num js-line-number" data-line-number="598"></td>
+ <td id="LC598" class="blob-code blob-code-inner js-file-line">:102550009B2D937002C080E090E026960FB6F89411 </td>
+ </tr>
+ <tr>
+ <td id="L599" class="blob-num js-line-number" data-line-number="599"></td>
+ <td id="LC599" class="blob-code blob-code-inner js-file-line">:10256000DEBF0FBECDBFDF91CF911F910F91FF90C6 </td>
+ </tr>
+ <tr>
+ <td id="L600" class="blob-num js-line-number" data-line-number="600"></td>
+ <td id="LC600" class="blob-code blob-code-inner js-file-line">:10257000EF90DF90CF90BF900C94A60F002321F036 </td>
+ </tr>
+ <tr>
+ <td id="L601" class="blob-num js-line-number" data-line-number="601"></td>
+ <td id="LC601" class="blob-code blob-code-inner js-file-line">:10258000812F9B2D937002C080E090E026960FB6BD </td>
+ </tr>
+ <tr>
+ <td id="L602" class="blob-num js-line-number" data-line-number="602"></td>
+ <td id="LC602" class="blob-code blob-code-inner js-file-line">:10259000F894DEBF0FBECDBFDF91CF911F910F9199 </td>
+ </tr>
+ <tr>
+ <td id="L603" class="blob-num js-line-number" data-line-number="603"></td>
+ <td id="LC603" class="blob-code blob-code-inner js-file-line">:1025A000FF90EF90DF90CF90BF900C94BC0F812FE5 </td>
+ </tr>
+ <tr>
+ <td id="L604" class="blob-num js-line-number" data-line-number="604"></td>
+ <td id="LC604" class="blob-code blob-code-inner js-file-line">:1025B000002319F00E94A01E02C00E94081F269648 </td>
+ </tr>
+ <tr>
+ <td id="L605" class="blob-num js-line-number" data-line-number="605"></td>
+ <td id="LC605" class="blob-code blob-code-inner js-file-line">:1025C0000FB6F894DEBF0FBECDBFDF91CF911F9144 </td>
+ </tr>
+ <tr>
+ <td id="L606" class="blob-num js-line-number" data-line-number="606"></td>
+ <td id="LC606" class="blob-code blob-code-inner js-file-line">:1025D0000F91FF90EF90DF90CF90BF900C948D1FE4 </td>
+ </tr>
+ <tr>
+ <td id="L607" class="blob-num js-line-number" data-line-number="607"></td>
+ <td id="LC607" class="blob-code blob-code-inner js-file-line">:1025E0008B2D837009F07BC00111FAC1812F829578 </td>
+ </tr>
+ <tr>
+ <td id="L608" class="blob-num js-line-number" data-line-number="608"></td>
+ <td id="LC608" class="blob-code blob-code-inner js-file-line">:1025F00086958770880F880F912F9F70C92ED12CD8 </td>
+ </tr>
+ <tr>
+ <td id="L609" class="blob-num js-line-number" data-line-number="609"></td>
+ <td id="LC609" class="blob-code blob-code-inner js-file-line">:10260000E12CF12C082E04C0CC0CDD1CEE1CFF1CB0 </td>
+ </tr>
+ <tr>
+ <td id="L610" class="blob-num js-line-number" data-line-number="610"></td>
+ <td id="LC610" class="blob-code blob-code-inner js-file-line">:102610000A94D2F714FF12C04FE050E060E070E07F </td>
+ </tr>
+ <tr>
+ <td id="L611" class="blob-num js-line-number" data-line-number="611"></td>
+ <td id="LC611" class="blob-code blob-code-inner js-file-line">:1026200004C0440F551F661F771F8A95D2F7CB0150 </td>
+ </tr>
+ <tr>
+ <td id="L612" class="blob-num js-line-number" data-line-number="612"></td>
+ <td id="LC612" class="blob-code blob-code-inner js-file-line">:10263000BA01609570958095909503C060E070E058 </td>
+ </tr>
+ <tr>
+ <td id="L613" class="blob-num js-line-number" data-line-number="613"></td>
+ <td id="LC613" class="blob-code blob-code-inner js-file-line">:10264000CB012B2D269526952370422F50E042304A </td>
+ </tr>
+ <tr>
+ <td id="L614" class="blob-num js-line-number" data-line-number="614"></td>
+ <td id="LC614" class="blob-code blob-code-inner js-file-line">:102650005105D9F04330510569F16C297D298E2946 </td>
+ </tr>
+ <tr>
+ <td id="L615" class="blob-num js-line-number" data-line-number="615"></td>
+ <td id="LC615" class="blob-code blob-code-inner js-file-line">:102660009F294130510551F126960FB6F894DEBFEF </td>
+ </tr>
+ <tr>
+ <td id="L616" class="blob-num js-line-number" data-line-number="616"></td>
+ <td id="LC616" class="blob-code blob-code-inner js-file-line">:102670000FBECDBFDF91CF911F910F91FF90EF90D3 </td>
+ </tr>
+ <tr>
+ <td id="L617" class="blob-num js-line-number" data-line-number="617"></td>
+ <td id="LC617" class="blob-code blob-code-inner js-file-line">:10268000DF90CF90BF900C94F6186C297D298E298D </td>
+ </tr>
+ <tr>
+ <td id="L618" class="blob-num js-line-number" data-line-number="618"></td>
+ <td id="LC618" class="blob-code blob-code-inner js-file-line">:102690009F2926960FB6F894DEBF0FBECDBFDF91FF </td>
+ </tr>
+ <tr>
+ <td id="L619" class="blob-num js-line-number" data-line-number="619"></td>
+ <td id="LC619" class="blob-code blob-code-inner js-file-line">:1026A000CF911F910F91FF90EF90DF90CF90BF904F </td>
+ </tr>
+ <tr>
+ <td id="L620" class="blob-num js-line-number" data-line-number="620"></td>
+ <td id="LC620" class="blob-code blob-code-inner js-file-line">:1026B0000C9412190E94F618C701B60126960FB69F </td>
+ </tr>
+ <tr>
+ <td id="L621" class="blob-num js-line-number" data-line-number="621"></td>
+ <td id="LC621" class="blob-code blob-code-inner js-file-line">:1026C000F894DEBF0FBECDBFDF91CF911F910F9168 </td>
+ </tr>
+ <tr>
+ <td id="L622" class="blob-num js-line-number" data-line-number="622"></td>
+ <td id="LC622" class="blob-code blob-code-inner js-file-line">:1026D000FF90EF90DF90CF90BF900C94DA1800231A </td>
+ </tr>
+ <tr>
+ <td id="L623" class="blob-num js-line-number" data-line-number="623"></td>
+ <td id="LC623" class="blob-code blob-code-inner js-file-line">:1026E00019F08B2D817001C08695882309F478C17B </td>
+ </tr>
+ <tr>
+ <td id="L624" class="blob-num js-line-number" data-line-number="624"></td>
+ <td id="LC624" class="blob-code blob-code-inner js-file-line">:1026F000812F829586958770880F880F912F9F7004 </td>
+ </tr>
+ <tr>
+ <td id="L625" class="blob-num js-line-number" data-line-number="625"></td>
+ <td id="LC625" class="blob-code blob-code-inner js-file-line">:10270000C92ED12CE12CF12C082E04C0CC0CDD1CE0 </td>
+ </tr>
+ <tr>
+ <td id="L626" class="blob-num js-line-number" data-line-number="626"></td>
+ <td id="LC626" class="blob-code blob-code-inner js-file-line">:10271000EE1CFF1C0A94D2F714FF12C04FE050E0E9 </td>
+ </tr>
+ <tr>
+ <td id="L627" class="blob-num js-line-number" data-line-number="627"></td>
+ <td id="LC627" class="blob-code blob-code-inner js-file-line">:1027200060E070E004C0440F551F661F771F8A9554 </td>
+ </tr>
+ <tr>
+ <td id="L628" class="blob-num js-line-number" data-line-number="628"></td>
+ <td id="LC628" class="blob-code blob-code-inner js-file-line">:10273000D2F7CB01BA01609570958095909503C052 </td>
+ </tr>
+ <tr>
+ <td id="L629" class="blob-num js-line-number" data-line-number="629"></td>
+ <td id="LC629" class="blob-code blob-code-inner js-file-line">:1027400060E070E0CB012B2D269526952370422F5B </td>
+ </tr>
+ <tr>
+ <td id="L630" class="blob-num js-line-number" data-line-number="630"></td>
+ <td id="LC630" class="blob-code blob-code-inner js-file-line">:1027500050E042305105D9F04330510569F16C2900 </td>
+ </tr>
+ <tr>
+ <td id="L631" class="blob-num js-line-number" data-line-number="631"></td>
+ <td id="LC631" class="blob-code blob-code-inner js-file-line">:102760007D298E299F294130510551F126960FB6BA </td>
+ </tr>
+ <tr>
+ <td id="L632" class="blob-num js-line-number" data-line-number="632"></td>
+ <td id="LC632" class="blob-code blob-code-inner js-file-line">:10277000F894DEBF0FBECDBFDF91CF911F910F91B7 </td>
+ </tr>
+ <tr>
+ <td id="L633" class="blob-num js-line-number" data-line-number="633"></td>
+ <td id="LC633" class="blob-code blob-code-inner js-file-line">:10278000FF90EF90DF90CF90BF900C94D0196C2900 </td>
+ </tr>
+ <tr>
+ <td id="L634" class="blob-num js-line-number" data-line-number="634"></td>
+ <td id="LC634" class="blob-code blob-code-inner js-file-line">:102790007D298E299F2926960FB6F894DEBF0FBE9D </td>
+ </tr>
+ <tr>
+ <td id="L635" class="blob-num js-line-number" data-line-number="635"></td>
+ <td id="LC635" class="blob-code blob-code-inner js-file-line">:1027A000CDBFDF91CF911F910F91FF90EF90DF9000 </td>
+ </tr>
+ <tr>
+ <td id="L636" class="blob-num js-line-number" data-line-number="636"></td>
+ <td id="LC636" class="blob-code blob-code-inner js-file-line">:1027B000CF90BF900C94EC190E94D019C701B601BC </td>
+ </tr>
+ <tr>
+ <td id="L637" class="blob-num js-line-number" data-line-number="637"></td>
+ <td id="LC637" class="blob-code blob-code-inner js-file-line">:1027C00026960FB6F894DEBF0FBECDBFDF91CF9136 </td>
+ </tr>
+ <tr>
+ <td id="L638" class="blob-num js-line-number" data-line-number="638"></td>
+ <td id="LC638" class="blob-code blob-code-inner js-file-line">:1027D0001F910F91FF90EF90DF90CF90BF900C94DE </td>
+ </tr>
+ <tr>
+ <td id="L639" class="blob-num js-line-number" data-line-number="639"></td>
+ <td id="LC639" class="blob-code blob-code-inner js-file-line">:1027E000B419103FD1F118F4103E50F4A1C0123FBB </td>
+ </tr>
+ <tr>
+ <td id="L640" class="blob-num js-line-number" data-line-number="640"></td>
+ <td id="LC640" class="blob-code blob-code-inner js-file-line">:1027F00009F463C008F44CC0133F09F473C098C0D7 </td>
+ </tr>
+ <tr>
+ <td id="L641" class="blob-num js-line-number" data-line-number="641"></td>
+ <td id="LC641" class="blob-code blob-code-inner js-file-line">:102800001F708B2D8F710023A1F00E944D19812F15 </td>
+ </tr>
+ <tr>
+ <td id="L642" class="blob-num js-line-number" data-line-number="642"></td>
+ <td id="LC642" class="blob-code blob-code-inner js-file-line">:1028100026960FB6F894DEBF0FBECDBFDF91CF91E5 </td>
+ </tr>
+ <tr>
+ <td id="L643" class="blob-num js-line-number" data-line-number="643"></td>
+ <td id="LC643" class="blob-code blob-code-inner js-file-line">:102820001F910F91FF90EF90DF90CF90BF900C948D </td>
+ </tr>
+ <tr>
+ <td id="L644" class="blob-num js-line-number" data-line-number="644"></td>
+ <td id="LC644" class="blob-code blob-code-inner js-file-line">:10283000C4110E946E19812F26960FB6F894DEBF40 </td>
+ </tr>
+ <tr>
+ <td id="L645" class="blob-num js-line-number" data-line-number="645"></td>
+ <td id="LC645" class="blob-code blob-code-inner js-file-line">:102840000FBECDBFDF91CF911F910F91FF90EF9001 </td>
+ </tr>
+ <tr>
+ <td id="L646" class="blob-num js-line-number" data-line-number="646"></td>
+ <td id="LC646" class="blob-code blob-code-inner js-file-line">:10285000DF90CF90BF900C94CB110023A9F02111F1 </td>
+ </tr>
+ <tr>
+ <td id="L647" class="blob-num js-line-number" data-line-number="647"></td>
+ <td id="LC647" class="blob-code blob-code-inner js-file-line">:10286000BFC08B2D8F7126960FB6F894DEBF0FBEBA </td>
+ </tr>
+ <tr>
+ <td id="L648" class="blob-num js-line-number" data-line-number="648"></td>
+ <td id="LC648" class="blob-code blob-code-inner js-file-line">:10287000CDBFDF91CF911F910F91FF90EF90DF902F </td>
+ </tr>
+ <tr>
+ <td id="L649" class="blob-num js-line-number" data-line-number="649"></td>
+ <td id="LC649" class="blob-code blob-code-inner js-file-line">:10288000CF90BF900C949319223008F0A9C0E9CFE3 </td>
+ </tr>
+ <tr>
+ <td id="L650" class="blob-num js-line-number" data-line-number="650"></td>
+ <td id="LC650" class="blob-code blob-code-inner js-file-line">:102890000023A9F08B2D8F7126960FB6F894DEBF1A </td>
+ </tr>
+ <tr>
+ <td id="L651" class="blob-num js-line-number" data-line-number="651"></td>
+ <td id="LC651" class="blob-code blob-code-inner js-file-line">:1028A0000FBECDBFDF91CF911F910F91FF90EF90A1 </td>
+ </tr>
+ <tr>
+ <td id="L652" class="blob-num js-line-number" data-line-number="652"></td>
+ <td id="LC652" class="blob-code blob-code-inner js-file-line">:1028B000DF90CF90BF900C944D19002359F38B2DCE </td>
+ </tr>
+ <tr>
+ <td id="L653" class="blob-num js-line-number" data-line-number="653"></td>
+ <td id="LC653" class="blob-code blob-code-inner js-file-line">:1028C0008F7126960FB6F894DEBF0FBECDBFDF9195 </td>
+ </tr>
+ <tr>
+ <td id="L654" class="blob-num js-line-number" data-line-number="654"></td>
+ <td id="LC654" class="blob-code blob-code-inner js-file-line">:1028D000CF911F910F91FF90EF90DF90CF90BF901D </td>
+ </tr>
+ <tr>
+ <td id="L655" class="blob-num js-line-number" data-line-number="655"></td>
+ <td id="LC655" class="blob-code blob-code-inner js-file-line">:1028E0000C946E19002399F08B2D8F7126960FB6DC </td>
+ </tr>
+ <tr>
+ <td id="L656" class="blob-num js-line-number" data-line-number="656"></td>
+ <td id="LC656" class="blob-code blob-code-inner js-file-line">:1028F000F894DEBF0FBECDBFDF91CF911F910F9136 </td>
+ </tr>
+ <tr>
+ <td id="L657" class="blob-num js-line-number" data-line-number="657"></td>
+ <td id="LC657" class="blob-code blob-code-inner js-file-line">:10290000FF90EF90DF90CF90BF900C9438192696EF </td>
+ </tr>
+ <tr>
+ <td id="L658" class="blob-num js-line-number" data-line-number="658"></td>
+ <td id="LC658" class="blob-code blob-code-inner js-file-line">:102910000FB6F894DEBF0FBECDBFDF91CF911F91F0 </td>
+ </tr>
+ <tr>
+ <td id="L659" class="blob-num js-line-number" data-line-number="659"></td>
+ <td id="LC659" class="blob-code blob-code-inner js-file-line">:102920000F91FF90EF90DF90CF90BF900C942E19F5 </td>
+ </tr>
+ <tr>
+ <td id="L660" class="blob-num js-line-number" data-line-number="660"></td>
+ <td id="LC660" class="blob-code blob-code-inner js-file-line">:102930000023A9F0222309F4ADCF812F26960FB6EC </td>
+ </tr>
+ <tr>
+ <td id="L661" class="blob-num js-line-number" data-line-number="661"></td>
+ <td id="LC661" class="blob-code blob-code-inner js-file-line">:10294000F894DEBF0FBECDBFDF91CF911F910F91E5 </td>
+ </tr>
+ <tr>
+ <td id="L662" class="blob-num js-line-number" data-line-number="662"></td>
+ <td id="LC662" class="blob-code blob-code-inner js-file-line">:10295000FF90EF90DF90CF90BF900C94AD102223AA </td>
+ </tr>
+ <tr>
+ <td id="L663" class="blob-num js-line-number" data-line-number="663"></td>
+ <td id="LC663" class="blob-code blob-code-inner js-file-line">:1029600009F4ADCF812F26960FB6F894DEBF0FBEC7 </td>
+ </tr>
+ <tr>
+ <td id="L664" class="blob-num js-line-number" data-line-number="664"></td>
+ <td id="LC664" class="blob-code blob-code-inner js-file-line">:10297000CDBFDF91CF911F910F91FF90EF90DF902E </td>
+ </tr>
+ <tr>
+ <td id="L665" class="blob-num js-line-number" data-line-number="665"></td>
+ <td id="LC665" class="blob-code blob-code-inner js-file-line">:10298000CF90BF900C9475114B2D4F70612FC701E4 </td>
+ </tr>
+ <tr>
+ <td id="L666" class="blob-num js-line-number" data-line-number="666"></td>
+ <td id="LC666" class="blob-code blob-code-inner js-file-line">:102990000E94AE0226960FB6F894DEBF0FBECDBFE2 </td>
+ </tr>
+ <tr>
+ <td id="L667" class="blob-num js-line-number" data-line-number="667"></td>
+ <td id="LC667" class="blob-code blob-code-inner js-file-line">:1029A000DF91CF911F910F91FF90EF90DF90CF902B </td>
+ </tr>
+ <tr>
+ <td id="L668" class="blob-num js-line-number" data-line-number="668"></td>
+ <td id="LC668" class="blob-code blob-code-inner js-file-line">:1029B000BF900C9452184B2D4F70612FC701269673 </td>
+ </tr>
+ <tr>
+ <td id="L669" class="blob-num js-line-number" data-line-number="669"></td>
+ <td id="LC669" class="blob-code blob-code-inner js-file-line">:1029C0000FB6F894DEBF0FBECDBFDF91CF911F9140 </td>
+ </tr>
+ <tr>
+ <td id="L670" class="blob-num js-line-number" data-line-number="670"></td>
+ <td id="LC670" class="blob-code blob-code-inner js-file-line">:1029D0000F91FF90EF90DF90CF90BF900C949F05E8 </td>
+ </tr>
+ <tr>
+ <td id="L671" class="blob-num js-line-number" data-line-number="671"></td>
+ <td id="LC671" class="blob-code blob-code-inner js-file-line">:1029E00026960FB6F894DEBF0FBECDBFDF91CF9114 </td>
+ </tr>
+ <tr>
+ <td id="L672" class="blob-num js-line-number" data-line-number="672"></td>
+ <td id="LC672" class="blob-code blob-code-inner js-file-line">:1029F0001F910F91FF90EF90DF90CF90BF900895BF </td>
+ </tr>
+ <tr>
+ <td id="L673" class="blob-num js-line-number" data-line-number="673"></td>
+ <td id="LC673" class="blob-code blob-code-inner js-file-line">:102A00000E94FA1A0E940A1B0E94CF1A0E94241BDD </td>
+ </tr>
+ <tr>
+ <td id="L674" class="blob-num js-line-number" data-line-number="674"></td>
+ <td id="LC674" class="blob-code blob-code-inner js-file-line">:102A10000E943D200E948D1F80E090E00E94A60F42 </td>
+ </tr>
+ <tr>
+ <td id="L675" class="blob-num js-line-number" data-line-number="675"></td>
+ <td id="LC675" class="blob-code blob-code-inner js-file-line">:102A200080E090E00C94BC0F0E94EA1A0C94001510 </td>
+ </tr>
+ <tr>
+ <td id="L676" class="blob-num js-line-number" data-line-number="676"></td>
+ <td id="LC676" class="blob-code blob-code-inner js-file-line">:102A30000E94481A292F22952F7030E02C30310542 </td>
+ </tr>
+ <tr>
+ <td id="L677" class="blob-num js-line-number" data-line-number="677"></td>
+ <td id="LC677" class="blob-code blob-code-inner js-file-line">:102A40004CF42A3031056CF4225031092230310522 </td>
+ </tr>
+ <tr>
+ <td id="L678" class="blob-num js-line-number" data-line-number="678"></td>
+ <td id="LC678" class="blob-code blob-code-inner js-file-line">:102A500088F407C02C30310549F02F30310531F0B2 </td>
+ </tr>
+ <tr>
+ <td id="L679" class="blob-num js-line-number" data-line-number="679"></td>
+ <td id="LC679" class="blob-code blob-code-inner js-file-line">:102A600009C0803E48F0803F29F406C093FB8827C8 </td>
+ </tr>
+ <tr>
+ <td id="L680" class="blob-num js-line-number" data-line-number="680"></td>
+ <td id="LC680" class="blob-code blob-code-inner js-file-line">:102A700080F9089580E0089581E00895CF93DF9371 </td>
+ </tr>
+ <tr>
+ <td id="L681" class="blob-num js-line-number" data-line-number="681"></td>
+ <td id="LC681" class="blob-code blob-code-inner js-file-line">:102A800000D000D01F92CDB7DEB70F900F900F90FF </td>
+ </tr>
+ <tr>
+ <td id="L682" class="blob-num js-line-number" data-line-number="682"></td>
+ <td id="LC682" class="blob-code blob-code-inner js-file-line">:102A90000F900F90DF91CF910895CF93DF9300D0E7 </td>
+ </tr>
+ <tr>
+ <td id="L683" class="blob-num js-line-number" data-line-number="683"></td>
+ <td id="LC683" class="blob-code blob-code-inner js-file-line">:102AA00000D000D0CDB7DEB726960FB6F894DEBFC3 </td>
+ </tr>
+ <tr>
+ <td id="L684" class="blob-num js-line-number" data-line-number="684"></td>
+ <td id="LC684" class="blob-code blob-code-inner js-file-line">:102AB0000FBECDBFDF91CF9108951F93CF93DF93CA </td>
+ </tr>
+ <tr>
+ <td id="L685" class="blob-num js-line-number" data-line-number="685"></td>
+ <td id="LC685" class="blob-code blob-code-inner js-file-line">:102AC000C0917B0116E080917C01C81799F0D0E09D </td>
+ </tr>
+ <tr>
+ <td id="L686" class="blob-num js-line-number" data-line-number="686"></td>
+ <td id="LC686" class="blob-code blob-code-inner js-file-line">:102AD0001C9FF0011D9FF00D1124E358FE4F408113 </td>
+ </tr>
+ <tr>
+ <td id="L687" class="blob-num js-line-number" data-line-number="687"></td>
+ <td id="LC687" class="blob-code blob-code-inner js-file-line">:102AE000518162817381848195810E944D15219667 </td>
+ </tr>
+ <tr>
+ <td id="L688" class="blob-num js-line-number" data-line-number="688"></td>
+ <td id="LC688" class="blob-code blob-code-inner js-file-line">:102AF000C770E9CFDF91CF911F9108954091AD014B </td>
+ </tr>
+ <tr>
+ <td id="L689" class="blob-num js-line-number" data-line-number="689"></td>
+ <td id="LC689" class="blob-code blob-code-inner js-file-line">:102B00005091AE016091AF017091B0018091B1011F </td>
+ </tr>
+ <tr>
+ <td id="L690" class="blob-num js-line-number" data-line-number="690"></td>
+ <td id="LC690" class="blob-code blob-code-inner js-file-line">:102B10009091B2010C944D158091B20182958F7005 </td>
+ </tr>
+ <tr>
+ <td id="L691" class="blob-num js-line-number" data-line-number="691"></td>
+ <td id="LC691" class="blob-code blob-code-inner js-file-line">:102B200009F054C08091AF01882309F44FC080910F </td>
+ </tr>
+ <tr>
+ <td id="L692" class="blob-num js-line-number" data-line-number="692"></td>
+ <td id="LC692" class="blob-code blob-code-inner js-file-line">:102B30007B01A0917C016091AD017091AE0140914B </td>
+ </tr>
+ <tr>
+ <td id="L693" class="blob-num js-line-number" data-line-number="693"></td>
+ <td id="LC693" class="blob-code blob-code-inner js-file-line">:102B4000B0015091B101B6E08A1709F43FC090E09E </td>
+ </tr>
+ <tr>
+ <td id="L694" class="blob-num js-line-number" data-line-number="694"></td>
+ <td id="LC694" class="blob-code blob-code-inner js-file-line">:102B500041155105C1F17F3F11F46F3FA1F1B89FBD </td>
+ </tr>
+ <tr>
+ <td id="L695" class="blob-num js-line-number" data-line-number="695"></td>
+ <td id="LC695" class="blob-code blob-code-inner js-file-line">:102B6000F001B99FF00D1124E358FE4F218172133B </td>
+ </tr>
+ <tr>
+ <td id="L696" class="blob-num js-line-number" data-line-number="696"></td>
+ <td id="LC696" class="blob-code blob-code-inner js-file-line">:102B70002AC02081621327C02281211124C0238111 </td>
+ </tr>
+ <tr>
+ <td id="L697" class="blob-num js-line-number" data-line-number="697"></td>
+ <td id="LC697" class="blob-code blob-code-inner js-file-line">:102B800034812417350710F421503109241B350BEB </td>
+ </tr>
+ <tr>
+ <td id="L698" class="blob-num js-line-number" data-line-number="698"></td>
+ <td id="LC698" class="blob-code blob-code-inner js-file-line">:102B9000283C3105C0F42091B2012F7020612093B0 </td>
+ </tr>
+ <tr>
+ <td id="L699" class="blob-num js-line-number" data-line-number="699"></td>
+ <td id="LC699" class="blob-code blob-code-inner js-file-line">:102BA000B20126E0289FF001299FF00D1124EE5775 </td>
+ </tr>
+ <tr>
+ <td id="L700" class="blob-num js-line-number" data-line-number="700"></td>
+ <td id="LC700" class="blob-code blob-code-inner js-file-line">:102BB000FE4F80818F70806180838DEA91E00E945A </td>
+ </tr>
+ <tr>
+ <td id="L701" class="blob-num js-line-number" data-line-number="701"></td>
+ <td id="LC701" class="blob-code blob-code-inner js-file-line">:102BC000D2110C945D1501968770BECF0895CF92F7 </td>
+ </tr>
+ <tr>
+ <td id="L702" class="blob-num js-line-number" data-line-number="702"></td>
+ <td id="LC702" class="blob-code blob-code-inner js-file-line">:102BD000DF92EF92FF920F931F93CF93DF93CDB7C6 </td>
+ </tr>
+ <tr>
+ <td id="L703" class="blob-num js-line-number" data-line-number="703"></td>
+ <td id="LC703" class="blob-code blob-code-inner js-file-line">:102BE000DEB762970FB6F894DEBF0FBECDBF8C0183 </td>
+ </tr>
+ <tr>
+ <td id="L704" class="blob-num js-line-number" data-line-number="704"></td>
+ <td id="LC704" class="blob-code blob-code-inner js-file-line">:102BF00085E0F801DE011D9601900D928A95E1F7BE </td>
+ </tr>
+ <tr>
+ <td id="L705" class="blob-num js-line-number" data-line-number="705"></td>
+ <td id="LC705" class="blob-code blob-code-inner js-file-line">:102C0000D8014C9111965C91119712966C91129784 </td>
+ </tr>
+ <tr>
+ <td id="L706" class="blob-num js-line-number" data-line-number="706"></td>
+ <td id="LC706" class="blob-code blob-code-inner js-file-line">:102C10001396CD90DC9014973091AD017091AE0178 </td>
+ </tr>
+ <tr>
+ <td id="L707" class="blob-num js-line-number" data-line-number="707"></td>
+ <td id="LC707" class="blob-code blob-code-inner js-file-line">:102C20008091B0019091B101009709F46BC17F3F91 </td>
+ </tr>
+ <tr>
+ <td id="L708" class="blob-num js-line-number" data-line-number="708"></td>
+ <td id="LC708" class="blob-code blob-code-inner js-file-line">:102C300019F43F3F09F466C1E090AF01EE2009F4BA </td>
+ </tr>
+ <tr>
+ <td id="L709" class="blob-num js-line-number" data-line-number="709"></td>
+ <td id="LC709" class="blob-code blob-code-inner js-file-line">:102C4000C0C02091B201C816D90628F0F601E81BD1 </td>
+ </tr>
+ <tr>
+ <td id="L710" class="blob-num js-line-number" data-line-number="710"></td>
+ <td id="LC710" class="blob-code blob-code-inner js-file-line">:102C5000F90BCF0104C0809590958C0D9D1DFF242C </td>
+ </tr>
+ <tr>
+ <td id="L711" class="blob-num js-line-number" data-line-number="711"></td>
+ <td id="LC711" class="blob-code blob-code-inner js-file-line">:102C6000F394883C910578F0F12C207F09F0C6C0E0 </td>
+ </tr>
+ <tr>
+ <td id="L712" class="blob-num js-line-number" data-line-number="712"></td>
+ <td id="LC712" class="blob-code blob-code-inner js-file-line">:102C70007C2DD98AC88A89890E943E158DEA91E007 </td>
+ </tr>
+ <tr>
+ <td id="L713" class="blob-num js-line-number" data-line-number="713"></td>
+ <td id="LC713" class="blob-code blob-code-inner js-file-line">:102C80000E94D211B1C0822F807F09F046C0751317 </td>
+ </tr>
+ <tr>
+ <td id="L714" class="blob-num js-line-number" data-line-number="714"></td>
+ <td id="LC714" class="blob-code blob-code-inner js-file-line">:102C900014C0341312C0611110C02F702061209332 </td>
+ </tr>
+ <tr>
+ <td id="L715" class="blob-num js-line-number" data-line-number="715"></td>
+ <td id="LC715" class="blob-code blob-code-inner js-file-line">:102CA000B2010E947E158DEA91E00E94D2118091BE </td>
+ </tr>
+ <tr>
+ <td id="L716" class="blob-num js-line-number" data-line-number="716"></td>
+ <td id="LC716" class="blob-code blob-code-inner js-file-line">:102CB000B201D80115968C932EC0CD2819F15F3F33 </td>
+ </tr>
+ <tr>
+ <td id="L717" class="blob-num js-line-number" data-line-number="717"></td>
+ <td id="LC717" class="blob-code blob-code-inner js-file-line">:102CC00011F44F3FF9F0F62E61111CC080917B0189 </td>
+ </tr>
+ <tr>
+ <td id="L718" class="blob-num js-line-number" data-line-number="718"></td>
+ <td id="LC718" class="blob-code blob-code-inner js-file-line">:102CD00020917C0136E0821709F45AC090E0389FB9 </td>
+ </tr>
+ <tr>
+ <td id="L719" class="blob-num js-line-number" data-line-number="719"></td>
+ <td id="LC719" class="blob-code blob-code-inner js-file-line">:102CE000F001399FF00D1124E358FE4F7181571305 </td>
+ </tr>
+ <tr>
+ <td id="L720" class="blob-num js-line-number" data-line-number="720"></td>
+ <td id="LC720" class="blob-code blob-code-inner js-file-line">:102CF00006C07081471303C07281711103C0019631 </td>
+ </tr>
+ <tr>
+ <td id="L721" class="blob-num js-line-number" data-line-number="721"></td>
+ <td id="LC721" class="blob-code blob-code-inner js-file-line">:102D00008770E9CFF62E662309F418C18091B201CD </td>
+ </tr>
+ <tr>
+ <td id="L722" class="blob-num js-line-number" data-line-number="722"></td>
+ <td id="LC722" class="blob-code blob-code-inner js-file-line">:102D100081608093B201F12C11C1751308C0341386 </td>
+ </tr>
+ <tr>
+ <td id="L723" class="blob-num js-line-number" data-line-number="723"></td>
+ <td id="LC723" class="blob-code blob-code-inner js-file-line">:102D200006C0611104C08091B201D801C3C04D87B3 </td>
+ </tr>
+ <tr>
+ <td id="L724" class="blob-num js-line-number" data-line-number="724"></td>
+ <td id="LC724" class="blob-code blob-code-inner js-file-line">:102D30005E878D859E856A8B0E9418156A89882317 </td>
+ </tr>
+ <tr>
+ <td id="L725" class="blob-num js-line-number" data-line-number="725"></td>
+ <td id="LC725" class="blob-code blob-code-inner js-file-line">:102D4000E1F16623D1F12091B201822F82958F703B </td>
+ </tr>
+ <tr>
+ <td id="L726" class="blob-num js-line-number" data-line-number="726"></td>
+ <td id="LC726" class="blob-code blob-code-inner js-file-line">:102D500090E0029774F08091AD019091AE01988758 </td>
+ </tr>
+ <tr>
+ <td id="L727" class="blob-num js-line-number" data-line-number="727"></td>
+ <td id="LC727" class="blob-code blob-code-inner js-file-line">:102D60008F831986DB86CA862C87CE0107960E9440 </td>
+ </tr>
+ <tr>
+ <td id="L728" class="blob-num js-line-number" data-line-number="728"></td>
+ <td id="LC728" class="blob-code blob-code-inner js-file-line">:102D7000D21186E0F801ADEAB1E001900D928A959A </td>
+ </tr>
+ <tr>
+ <td id="L729" class="blob-num js-line-number" data-line-number="729"></td>
+ <td id="LC729" class="blob-code blob-code-inner js-file-line">:102D8000E1F70E948C150E947E15FF24F394D6C0B3 </td>
+ </tr>
+ <tr>
+ <td id="L730" class="blob-num js-line-number" data-line-number="730"></td>
+ <td id="LC730" class="blob-code blob-code-inner js-file-line">:102D90004D875E878D859E850E94481A292F229532 </td>
+ </tr>
+ <tr>
+ <td id="L731" class="blob-num js-line-number" data-line-number="731"></td>
+ <td id="LC731" class="blob-code blob-code-inner js-file-line">:102DA0002F7030E0223031050CF0BCC09F7009F06C </td>
+ </tr>
+ <tr>
+ <td id="L732" class="blob-num js-line-number" data-line-number="732"></td>
+ <td id="LC732" class="blob-code blob-code-inner js-file-line">:102DB000B6C0805E883008F4C1C0C8010E94D2113C </td>
+ </tr>
+ <tr>
+ <td id="L733" class="blob-num js-line-number" data-line-number="733"></td>
+ <td id="LC733" class="blob-code blob-code-inner js-file-line">:102DC000E4CFC816D90608F453C0F601E81BF90B86 </td>
+ </tr>
+ <tr>
+ <td id="L734" class="blob-num js-line-number" data-line-number="734"></td>
+ <td id="LC734" class="blob-code blob-code-inner js-file-line">:102DD000CF01883C910508F450C0F12C7C2DD98A94 </td>
+ </tr>
+ <tr>
+ <td id="L735" class="blob-num js-line-number" data-line-number="735"></td>
+ <td id="LC735" class="blob-code blob-code-inner js-file-line">:102DE000C88A89890E943E15EDEAF1E086E0DF019C </td>
+ </tr>
+ <tr>
+ <td id="L736" class="blob-num js-line-number" data-line-number="736"></td>
+ <td id="LC736" class="blob-code blob-code-inner js-file-line">:102DF0001D928A95E9F70E947E15A0C0751314C034 </td>
+ </tr>
+ <tr>
+ <td id="L737" class="blob-num js-line-number" data-line-number="737"></td>
+ <td id="LC737" class="blob-code blob-code-inner js-file-line">:102E0000341312C0611110C08091B201F8018583A2 </td>
+ </tr>
+ <tr>
+ <td id="L738" class="blob-num js-line-number" data-line-number="738"></td>
+ <td id="LC738" class="blob-code blob-code-inner js-file-line">:102E1000C8010E94D21186E0EDEAF1E0DF011D92C7 </td>
+ </tr>
+ <tr>
+ <td id="L739" class="blob-num js-line-number" data-line-number="739"></td>
+ <td id="LC739" class="blob-code blob-code-inner js-file-line">:102E20008A95E9F7FE2C8AC04D875E878D859E8541 </td>
+ </tr>
+ <tr>
+ <td id="L740" class="blob-num js-line-number" data-line-number="740"></td>
+ <td id="LC740" class="blob-code blob-code-inner js-file-line">:102E30006A8B0E9418156A89882309F4BECF66231D </td>
+ </tr>
+ <tr>
+ <td id="L741" class="blob-num js-line-number" data-line-number="741"></td>
+ <td id="LC741" class="blob-code blob-code-inner js-file-line">:102E400009F4BBCF2091B201822F82958F7090E060 </td>
+ </tr>
+ <tr>
+ <td id="L742" class="blob-num js-line-number" data-line-number="742"></td>
+ <td id="LC742" class="blob-code blob-code-inner js-file-line">:102E500002970CF48ECF8091AD019091AE019A83D0 </td>
+ </tr>
+ <tr>
+ <td id="L743" class="blob-num js-line-number" data-line-number="743"></td>
+ <td id="LC743" class="blob-code blob-code-inner js-file-line">:102E600089831B82DD82CC822E83CE0101967FCFA7 </td>
+ </tr>
+ <tr>
+ <td id="L744" class="blob-num js-line-number" data-line-number="744"></td>
+ <td id="LC744" class="blob-code blob-code-inner js-file-line">:102E7000809590958C0D9D1DACCFF62E662309F4A0 </td>
+ </tr>
+ <tr>
+ <td id="L745" class="blob-num js-line-number" data-line-number="745"></td>
+ <td id="LC745" class="blob-code blob-code-inner js-file-line">:102E80009CCF75132EC034132CC02091B20120FDAD </td>
+ </tr>
+ <tr>
+ <td id="L746" class="blob-num js-line-number" data-line-number="746"></td>
+ <td id="LC746" class="blob-code blob-code-inner js-file-line">:102E90001FC0822F82958F70D9F0D80115962C9380 </td>
+ </tr>
+ <tr>
+ <td id="L747" class="blob-num js-line-number" data-line-number="747"></td>
+ <td id="LC747" class="blob-code blob-code-inner js-file-line">:102EA00015978F3049F08F5F982F9295907F822FE2 </td>
+ </tr>
+ <tr>
+ <td id="L748" class="blob-num js-line-number" data-line-number="748"></td>
+ <td id="LC748" class="blob-code blob-code-inner js-file-line">:102EB0008F70892B15968C93C8010E94D21186E0E1 </td>
+ </tr>
+ <tr>
+ <td id="L749" class="blob-num js-line-number" data-line-number="749"></td>
+ <td id="LC749" class="blob-code blob-code-inner js-file-line">:102EC000F801ADEAB1E001900D928A95E1F793CF58 </td>
+ </tr>
+ <tr>
+ <td id="L750" class="blob-num js-line-number" data-line-number="750"></td>
+ <td id="LC750" class="blob-code blob-code-inner js-file-line">:102ED00086E0F801ADEAB1E001900D928A95E1F744 </td>
+ </tr>
+ <tr>
+ <td id="L751" class="blob-num js-line-number" data-line-number="751"></td>
+ <td id="LC751" class="blob-code blob-code-inner js-file-line">:102EE0002DC04D875E878D859E850E9418158111A6 </td>
+ </tr>
+ <tr>
+ <td id="L752" class="blob-num js-line-number" data-line-number="752"></td>
+ <td id="LC752" class="blob-code blob-code-inner js-file-line">:102EF00040CF8091B20181608093B201C8010E94ED </td>
+ </tr>
+ <tr>
+ <td id="L753" class="blob-num js-line-number" data-line-number="753"></td>
+ <td id="LC753" class="blob-code blob-code-inner js-file-line">:102F0000D2111CC0662309F458CF4D875E878D858A </td>
+ </tr>
+ <tr>
+ <td id="L754" class="blob-num js-line-number" data-line-number="754"></td>
+ <td id="LC754" class="blob-code blob-code-inner js-file-line">:102F10009E850E941815882309F44FCF2ACF81116E </td>
+ </tr>
+ <tr>
+ <td id="L755" class="blob-num js-line-number" data-line-number="755"></td>
+ <td id="LC755" class="blob-code blob-code-inner js-file-line">:102F200048CF0CC0243031050CF047CF9F7009F416 </td>
+ </tr>
+ <tr>
+ <td id="L756" class="blob-num js-line-number" data-line-number="756"></td>
+ <td id="LC756" class="blob-code blob-code-inner js-file-line">:102F300040CFF8019581907F09F03BCF8F2D6296AD </td>
+ </tr>
+ <tr>
+ <td id="L757" class="blob-num js-line-number" data-line-number="757"></td>
+ <td id="LC757" class="blob-code blob-code-inner js-file-line">:102F40000FB6F894DEBF0FBECDBFDF91CF911F91BA </td>
+ </tr>
+ <tr>
+ <td id="L758" class="blob-num js-line-number" data-line-number="758"></td>
+ <td id="LC758" class="blob-code blob-code-inner js-file-line">:102F50000F91FF90EF90DF90CF9008951F93CF9344 </td>
+ </tr>
+ <tr>
+ <td id="L759" class="blob-num js-line-number" data-line-number="759"></td>
+ <td id="LC759" class="blob-code blob-code-inner js-file-line">:102F6000DF93CDB7DEB72C970FB6F894DEBF0FBE58 </td>
+ </tr>
+ <tr>
+ <td id="L760" class="blob-num js-line-number" data-line-number="760"></td>
+ <td id="LC760" class="blob-code blob-code-inner js-file-line">:102F7000CDBF4F83588769877A878B879C87CE011F </td>
+ </tr>
+ <tr>
+ <td id="L761" class="blob-num js-line-number" data-line-number="761"></td>
+ <td id="LC761" class="blob-code blob-code-inner js-file-line">:102F800007960E94E715882369F08F8198852A8526 </td>
+ </tr>
+ <tr>
+ <td id="L762" class="blob-num js-line-number" data-line-number="762"></td>
+ <td id="LC762" class="blob-code blob-code-inner js-file-line">:102F90003B85232BF1F19F3F09F063C08F3F09F080 </td>
+ </tr>
+ <tr>
+ <td id="L763" class="blob-num js-line-number" data-line-number="763"></td>
+ <td id="LC763" class="blob-code blob-code-inner js-file-line">:102FA00060C037C086E0FE013796DE0111960190C1 </td>
+ </tr>
+ <tr>
+ <td id="L764" class="blob-num js-line-number" data-line-number="764"></td>
+ <td id="LC764" class="blob-code blob-code-inner js-file-line">:102FB0000D928A95E1F76F817885EA85FB853097D8 </td>
+ </tr>
+ <tr>
+ <td id="L765" class="blob-num js-line-number" data-line-number="765"></td>
+ <td id="LC765" class="blob-code blob-code-inner js-file-line">:102FC00041F17F3F11F46F3F21F120917C0130E00E </td>
+ </tr>
+ <tr>
+ <td id="L766" class="blob-num js-line-number" data-line-number="766"></td>
+ <td id="LC766" class="blob-code blob-code-inner js-file-line">:102FD000C90101968770992740917B0150E08417C1 </td>
+ </tr>
+ <tr>
+ <td id="L767" class="blob-num js-line-number" data-line-number="767"></td>
+ <td id="LC767" class="blob-code blob-code-inner js-file-line">:102FE000950709F447C069837A83FD83EC8396E0F3 </td>
+ </tr>
+ <tr>
+ <td id="L768" class="blob-num js-line-number" data-line-number="768"></td>
+ <td id="LC768" class="blob-code blob-code-inner js-file-line">:102FF000929FD001939FB00D1124A358BE4FFE01A4 </td>
+ </tr>
+ <tr>
+ <td id="L769" class="blob-num js-line-number" data-line-number="769"></td>
+ <td id="LC769" class="blob-code blob-code-inner js-file-line">:10300000319601900D929A95E1F780937C010E9490 </td>
+ </tr>
+ <tr>
+ <td id="L770" class="blob-num js-line-number" data-line-number="770"></td>
+ <td id="LC770" class="blob-code blob-code-inner js-file-line">:103010005D1516E080917B0190917C018917C1F1CB </td>
+ </tr>
+ <tr>
+ <td id="L771" class="blob-num js-line-number" data-line-number="771"></td>
+ <td id="LC771" class="blob-code blob-code-inner js-file-line">:10302000189FC001112483589E4F0E94E7158823E2 </td>
+ </tr>
+ <tr>
+ <td id="L772" class="blob-num js-line-number" data-line-number="772"></td>
+ <td id="LC772" class="blob-code blob-code-inner js-file-line">:1030300079F1E0917B011E9FF0011124E358FE4FCE </td>
+ </tr>
+ <tr>
+ <td id="L773" class="blob-num js-line-number" data-line-number="773"></td>
+ <td id="LC773" class="blob-code blob-code-inner js-file-line">:103040004081518162817381848195810E944D15F7 </td>
+ </tr>
+ <tr>
+ <td id="L774" class="blob-num js-line-number" data-line-number="774"></td>
+ <td id="LC774" class="blob-code blob-code-inner js-file-line">:1030500080917B0190E001968770992780937B0196 </td>
+ </tr>
+ <tr>
+ <td id="L775" class="blob-num js-line-number" data-line-number="775"></td>
+ <td id="LC775" class="blob-code blob-code-inner js-file-line">:10306000D9CF4F81588569857A858B859C850E944B </td>
+ </tr>
+ <tr>
+ <td id="L776" class="blob-num js-line-number" data-line-number="776"></td>
+ <td id="LC776" class="blob-code blob-code-inner js-file-line">:103070004D15CFCF0E94141510927C0110927B0148 </td>
+ </tr>
+ <tr>
+ <td id="L777" class="blob-num js-line-number" data-line-number="777"></td>
+ <td id="LC777" class="blob-code blob-code-inner js-file-line">:10308000EDEAF1E086E0DF011D928A95E9F7C1CF14 </td>
+ </tr>
+ <tr>
+ <td id="L778" class="blob-num js-line-number" data-line-number="778"></td>
+ <td id="LC778" class="blob-code blob-code-inner js-file-line">:103090002C960FB6F894DEBF0FBECDBFDF91CF9157 </td>
+ </tr>
+ <tr>
+ <td id="L779" class="blob-num js-line-number" data-line-number="779"></td>
+ <td id="LC779" class="blob-code blob-code-inner js-file-line">:1030A0001F910895EF92FF920F931F93CF93DF9399 </td>
+ </tr>
+ <tr>
+ <td id="L780" class="blob-num js-line-number" data-line-number="780"></td>
+ <td id="LC780" class="blob-code blob-code-inner js-file-line">:1030B0008C01892B09F46CC0F12CEE24E394E80117 </td>
+ </tr>
+ <tr>
+ <td id="L781" class="blob-num js-line-number" data-line-number="781"></td>
+ <td id="LC781" class="blob-code blob-code-inner js-file-line">:1030C0002196F8018491843740F4843008F051C08F </td>
+ </tr>
+ <tr>
+ <td id="L782" class="blob-num js-line-number" data-line-number="782"></td>
+ <td id="LC782" class="blob-code blob-code-inner js-file-line">:1030D000813081F0823019F15BC0853709F444C03A </td>
+ </tr>
+ <tr>
+ <td id="L783" class="blob-num js-line-number" data-line-number="783"></td>
+ <td id="LC783" class="blob-code blob-code-inner js-file-line">:1030E000A8F19CE7980F903708F052C08F770E94A4 </td>
+ </tr>
+ <tr>
+ <td id="L784" class="blob-num js-line-number" data-line-number="784"></td>
+ <td id="LC784" class="blob-code blob-code-inner js-file-line">:1030F000751141C00E5F1F4FFE01C49180E28C0F1D </td>
+ </tr>
+ <tr>
+ <td id="L785" class="blob-num js-line-number" data-line-number="785"></td>
+ <td id="LC785" class="blob-code blob-code-inner js-file-line">:10310000883048F4C7708E2D01C0880FCA95EAF741 </td>
+ </tr>
+ <tr>
+ <td id="L786" class="blob-num js-line-number" data-line-number="786"></td>
+ <td id="LC786" class="blob-code blob-code-inner js-file-line">:103110000E94FD1A14C08C2F0E94AD102DC00E5FAE </td>
+ </tr>
+ <tr>
+ <td id="L787" class="blob-num js-line-number" data-line-number="787"></td>
+ <td id="LC787" class="blob-code blob-code-inner js-file-line">:103120001F4FFE01C49180E28C0F883058F4C770A5 </td>
+ </tr>
+ <tr>
+ <td id="L788" class="blob-num js-line-number" data-line-number="788"></td>
+ <td id="LC788" class="blob-code blob-code-inner js-file-line">:103130008E2D01C0880FCA95EAF70E94031B0E94DA </td>
+ </tr>
+ <tr>
+ <td id="L789" class="blob-num js-line-number" data-line-number="789"></td>
+ <td id="LC789" class="blob-code blob-code-inner js-file-line">:10314000241B1AC08C2F0E94751116C00E5F1F4FD2 </td>
+ </tr>
+ <tr>
+ <td id="L790" class="blob-num js-line-number" data-line-number="790"></td>
+ <td id="LC790" class="blob-code blob-code-inner js-file-line">:10315000FE01C491CC2381F08FE99FE00197F1F744 </td>
+ </tr>
+ <tr>
+ <td id="L791" class="blob-num js-line-number" data-line-number="791"></td>
+ <td id="LC791" class="blob-code blob-code-inner js-file-line">:1031600000C00000C150F6CF0E5F1F4FFE01F4906B </td>
+ </tr>
+ <tr>
+ <td id="L792" class="blob-num js-line-number" data-line-number="792"></td>
+ <td id="LC792" class="blob-code blob-code-inner js-file-line">:1031700003C00E94AD108E018F2D882309F49FCFCC </td>
+ </tr>
+ <tr>
+ <td id="L793" class="blob-num js-line-number" data-line-number="793"></td>
+ <td id="LC793" class="blob-code blob-code-inner js-file-line">:10318000EFE9FFE03197F1F700C000008150F5CF83 </td>
+ </tr>
+ <tr>
+ <td id="L794" class="blob-num js-line-number" data-line-number="794"></td>
+ <td id="LC794" class="blob-code blob-code-inner js-file-line">:10319000DF91CF911F910F91FF90EF9008950895C7 </td>
+ </tr>
+ <tr>
+ <td id="L795" class="blob-num js-line-number" data-line-number="795"></td>
+ <td id="LC795" class="blob-code blob-code-inner js-file-line">:1031A0006093B7017093B8018093B9019093BA010D </td>
+ </tr>
+ <tr>
+ <td id="L796" class="blob-num js-line-number" data-line-number="796"></td>
+ <td id="LC796" class="blob-code blob-code-inner js-file-line">:1031B0000C9400150F931F930091B7011091B80163 </td>
+ </tr>
+ <tr>
+ <td id="L797" class="blob-num js-line-number" data-line-number="797"></td>
+ <td id="LC797" class="blob-code blob-code-inner js-file-line">:1031C0002091B9013091BA01DC01CB01802B912B08 </td>
+ </tr>
+ <tr>
+ <td id="L798" class="blob-num js-line-number" data-line-number="798"></td>
+ <td id="LC798" class="blob-code blob-code-inner js-file-line">:1031D000A22BB32B8093B7019093B801A093B901B0 </td>
+ </tr>
+ <tr>
+ <td id="L799" class="blob-num js-line-number" data-line-number="799"></td>
+ <td id="LC799" class="blob-code blob-code-inner js-file-line">:1031E000B093BA011F910F910C9400150F931F9388 </td>
+ </tr>
+ <tr>
+ <td id="L800" class="blob-num js-line-number" data-line-number="800"></td>
+ <td id="LC800" class="blob-code blob-code-inner js-file-line">:1031F0000091B7011091B8012091B9013091BA0145 </td>
+ </tr>
+ <tr>
+ <td id="L801" class="blob-num js-line-number" data-line-number="801"></td>
+ <td id="LC801" class="blob-code blob-code-inner js-file-line">:10320000DC01CB0180239123A223B3238093B70158 </td>
+ </tr>
+ <tr>
+ <td id="L802" class="blob-num js-line-number" data-line-number="802"></td>
+ <td id="LC802" class="blob-code blob-code-inner js-file-line">:103210009093B801A093B901B093BA011F910F9197 </td>
+ </tr>
+ <tr>
+ <td id="L803" class="blob-num js-line-number" data-line-number="803"></td>
+ <td id="LC803" class="blob-code blob-code-inner js-file-line">:103220000C9400150F931F930091B7011091B801F2 </td>
+ </tr>
+ <tr>
+ <td id="L804" class="blob-num js-line-number" data-line-number="804"></td>
+ <td id="LC804" class="blob-code blob-code-inner js-file-line">:103230002091B9013091BA01DC01CB01802791279F </td>
+ </tr>
+ <tr>
+ <td id="L805" class="blob-num js-line-number" data-line-number="805"></td>
+ <td id="LC805" class="blob-code blob-code-inner js-file-line">:10324000A227B3278093B7019093B801A093B90147 </td>
+ </tr>
+ <tr>
+ <td id="L806" class="blob-num js-line-number" data-line-number="806"></td>
+ <td id="LC806" class="blob-code blob-code-inner js-file-line">:10325000B093BA011F910F910C9400151092B30115 </td>
+ </tr>
+ <tr>
+ <td id="L807" class="blob-num js-line-number" data-line-number="807"></td>
+ <td id="LC807" class="blob-code blob-code-inner js-file-line">:103260001092B4011092B5011092B6010C940015A1 </td>
+ </tr>
+ <tr>
+ <td id="L808" class="blob-num js-line-number" data-line-number="808"></td>
+ <td id="LC808" class="blob-code blob-code-inner js-file-line">:1032700041E050E060E070E004C0440F551F661F5D </td>
+ </tr>
+ <tr>
+ <td id="L809" class="blob-num js-line-number" data-line-number="809"></td>
+ <td id="LC809" class="blob-code blob-code-inner js-file-line">:10328000771F8A95D2F74093B3015093B4016093AE </td>
+ </tr>
+ <tr>
+ <td id="L810" class="blob-num js-line-number" data-line-number="810"></td>
+ <td id="LC810" class="blob-code blob-code-inner js-file-line">:10329000B5017093B6010C94001541E050E060E078 </td>
+ </tr>
+ <tr>
+ <td id="L811" class="blob-num js-line-number" data-line-number="811"></td>
+ <td id="LC811" class="blob-code blob-code-inner js-file-line">:1032A00070E004C0440F551F661F771F8A95D2F740 </td>
+ </tr>
+ <tr>
+ <td id="L812" class="blob-num js-line-number" data-line-number="812"></td>
+ <td id="LC812" class="blob-code blob-code-inner js-file-line">:1032B0008091B3019091B401A091B501B091B60194 </td>
+ </tr>
+ <tr>
+ <td id="L813" class="blob-num js-line-number" data-line-number="813"></td>
+ <td id="LC813" class="blob-code blob-code-inner js-file-line">:1032C000482B592B6A2B7B2B4093B3015093B401AD </td>
+ </tr>
+ <tr>
+ <td id="L814" class="blob-num js-line-number" data-line-number="814"></td>
+ <td id="LC814" class="blob-code blob-code-inner js-file-line">:1032D0006093B5017093B6010C94001541E050E085 </td>
+ </tr>
+ <tr>
+ <td id="L815" class="blob-num js-line-number" data-line-number="815"></td>
+ <td id="LC815" class="blob-code blob-code-inner js-file-line">:1032E00060E070E004C0440F551F661F771F8A9589 </td>
+ </tr>
+ <tr>
+ <td id="L816" class="blob-num js-line-number" data-line-number="816"></td>
+ <td id="LC816" class="blob-code blob-code-inner js-file-line">:1032F000D2F740955095609570958091B30190916B </td>
+ </tr>
+ <tr>
+ <td id="L817" class="blob-num js-line-number" data-line-number="817"></td>
+ <td id="LC817" class="blob-code blob-code-inner js-file-line">:10330000B401A091B501B091B601482359236A23B5 </td>
+ </tr>
+ <tr>
+ <td id="L818" class="blob-num js-line-number" data-line-number="818"></td>
+ <td id="LC818" class="blob-code blob-code-inner js-file-line">:103310007B234093B3015093B4016093B501709344 </td>
+ </tr>
+ <tr>
+ <td id="L819" class="blob-num js-line-number" data-line-number="819"></td>
+ <td id="LC819" class="blob-code blob-code-inner js-file-line">:10332000B6010C94001541E050E060E070E004C08C </td>
+ </tr>
+ <tr>
+ <td id="L820" class="blob-num js-line-number" data-line-number="820"></td>
+ <td id="LC820" class="blob-code blob-code-inner js-file-line">:10333000440F551F661F771F8A95D2F78091B301FE </td>
+ </tr>
+ <tr>
+ <td id="L821" class="blob-num js-line-number" data-line-number="821"></td>
+ <td id="LC821" class="blob-code blob-code-inner js-file-line">:103340009091B401A091B501B091B60148275927D9 </td>
+ </tr>
+ <tr>
+ <td id="L822" class="blob-num js-line-number" data-line-number="822"></td>
+ <td id="LC822" class="blob-code blob-code-inner js-file-line">:103350006A277B274093B3015093B4016093B50172 </td>
+ </tr>
+ <tr>
+ <td id="L823" class="blob-num js-line-number" data-line-number="823"></td>
+ <td id="LC823" class="blob-code blob-code-inner js-file-line">:103360007093B6010C9400150F931F930091B30155 </td>
+ </tr>
+ <tr>
+ <td id="L824" class="blob-num js-line-number" data-line-number="824"></td>
+ <td id="LC824" class="blob-code blob-code-inner js-file-line">:103370001091B4012091B5013091B601DC01CB016F </td>
+ </tr>
+ <tr>
+ <td id="L825" class="blob-num js-line-number" data-line-number="825"></td>
+ <td id="LC825" class="blob-code blob-code-inner js-file-line">:10338000802B912BA22BB32B8093B3019093B4018C </td>
+ </tr>
+ <tr>
+ <td id="L826" class="blob-num js-line-number" data-line-number="826"></td>
+ <td id="LC826" class="blob-code blob-code-inner js-file-line">:10339000A093B501B093B6011F910F910C94001545 </td>
+ </tr>
+ <tr>
+ <td id="L827" class="blob-num js-line-number" data-line-number="827"></td>
+ <td id="LC827" class="blob-code blob-code-inner js-file-line">:1033A0000F931F930091B3011091B4012091B501C7 </td>
+ </tr>
+ <tr>
+ <td id="L828" class="blob-num js-line-number" data-line-number="828"></td>
+ <td id="LC828" class="blob-code blob-code-inner js-file-line">:1033B0003091B601DC01CB0180239123A223B323FA </td>
+ </tr>
+ <tr>
+ <td id="L829" class="blob-num js-line-number" data-line-number="829"></td>
+ <td id="LC829" class="blob-code blob-code-inner js-file-line">:1033C0008093B3019093B401A093B501B093B6017B </td>
+ </tr>
+ <tr>
+ <td id="L830" class="blob-num js-line-number" data-line-number="830"></td>
+ <td id="LC830" class="blob-code blob-code-inner js-file-line">:1033D0001F910F910C9400150F931F930091B3014F </td>
+ </tr>
+ <tr>
+ <td id="L831" class="blob-num js-line-number" data-line-number="831"></td>
+ <td id="LC831" class="blob-code blob-code-inner js-file-line">:1033E0001091B4012091B5013091B601DC01CB01FF </td>
+ </tr>
+ <tr>
+ <td id="L832" class="blob-num js-line-number" data-line-number="832"></td>
+ <td id="LC832" class="blob-code blob-code-inner js-file-line">:1033F00080279127A227B3278093B3019093B4012C </td>
+ </tr>
+ <tr>
+ <td id="L833" class="blob-num js-line-number" data-line-number="833"></td>
+ <td id="LC833" class="blob-code blob-code-inner js-file-line">:10340000A093B501B093B6011F910F910C940015D4 </td>
+ </tr>
+ <tr>
+ <td id="L834" class="blob-num js-line-number" data-line-number="834"></td>
+ <td id="LC834" class="blob-code blob-code-inner js-file-line">:103410000895CF92DF92EF92FF920F931F93CF9375 </td>
+ </tr>
+ <tr>
+ <td id="L835" class="blob-num js-line-number" data-line-number="835"></td>
+ <td id="LC835" class="blob-code blob-code-inner js-file-line">:10342000DF938C01C090B701D090B801E090B90152 </td>
+ </tr>
+ <tr>
+ <td id="L836" class="blob-num js-line-number" data-line-number="836"></td>
+ <td id="LC836" class="blob-code blob-code-inner js-file-line">:10343000F090BA018091B3019091B401A091B501CF </td>
+ </tr>
+ <tr>
+ <td id="L837" class="blob-num js-line-number" data-line-number="837"></td>
+ <td id="LC837" class="blob-code blob-code-inner js-file-line">:10344000B091B601C82AD92AEA2AFB2ACFE1D0E0F6 </td>
+ </tr>
+ <tr>
+ <td id="L838" class="blob-num js-line-number" data-line-number="838"></td>
+ <td id="LC838" class="blob-code blob-code-inner js-file-line">:10345000D701C6010C2E04C0B695A7959795879500 </td>
+ </tr>
+ <tr>
+ <td id="L839" class="blob-num js-line-number" data-line-number="839"></td>
+ <td id="LC839" class="blob-code blob-code-inner js-file-line">:103460000A94D2F780FF06C0B8018C2F0E94DF07B4 </td>
+ </tr>
+ <tr>
+ <td id="L840" class="blob-num js-line-number" data-line-number="840"></td>
+ <td id="LC840" class="blob-code blob-code-inner js-file-line">:10347000019721F4219760F780E001C08C2FDF9144 </td>
+ </tr>
+ <tr>
+ <td id="L841" class="blob-num js-line-number" data-line-number="841"></td>
+ <td id="LC841" class="blob-code blob-code-inner js-file-line">:10348000CF911F910F91FF90EF90DF90CF90089513 </td>
+ </tr>
+ <tr>
+ <td id="L842" class="blob-num js-line-number" data-line-number="842"></td>
+ <td id="LC842" class="blob-code blob-code-inner js-file-line">:10349000CF93DF93EC010E94091ABE010E94DF075F </td>
+ </tr>
+ <tr>
+ <td id="L843" class="blob-num js-line-number" data-line-number="843"></td>
+ <td id="LC843" class="blob-code blob-code-inner js-file-line">:1034A000DF91CF910895CB010E94481A0895909121 </td>
+ </tr>
+ <tr>
+ <td id="L844" class="blob-num js-line-number" data-line-number="844"></td>
+ <td id="LC844" class="blob-code blob-code-inner js-file-line">:1034B0000C01992321F090910D01911109C02091E7 </td>
+ </tr>
+ <tr>
+ <td id="L845" class="blob-num js-line-number" data-line-number="845"></td>
+ <td id="LC845" class="blob-code blob-code-inner js-file-line">:1034C0000E0130910F01F90132969FEF40E01FC0CD </td>
+ </tr>
+ <tr>
+ <td id="L846" class="blob-num js-line-number" data-line-number="846"></td>
+ <td id="LC846" class="blob-code blob-code-inner js-file-line">:1034D000982F9695969596959F3050F5E0910E0110 </td>
+ </tr>
+ <tr>
+ <td id="L847" class="blob-num js-line-number" data-line-number="847"></td>
+ <td id="LC847" class="blob-code blob-code-inner js-file-line">:1034E000F0910F01E90FF11D877021E030E0A90193 </td>
+ </tr>
+ <tr>
+ <td id="L848" class="blob-num js-line-number" data-line-number="848"></td>
+ <td id="LC848" class="blob-code blob-code-inner js-file-line">:1034F00002C0440F551F8A95E2F7CA019181892BBA </td>
+ </tr>
+ <tr>
+ <td id="L849" class="blob-num js-line-number" data-line-number="849"></td>
+ <td id="LC849" class="blob-code blob-code-inner js-file-line">:10350000818308959F3F39F04F5F4E3041F05191D4 </td>
+ </tr>
+ <tr>
+ <td id="L850" class="blob-num js-line-number" data-line-number="850"></td>
+ <td id="LC850" class="blob-code blob-code-inner js-file-line">:103510005813F8CF0DC05111F7CF942FF5CF9F3F1F </td>
+ </tr>
+ <tr>
+ <td id="L851" class="blob-num js-line-number" data-line-number="851"></td>
+ <td id="LC851" class="blob-code blob-code-inner js-file-line">:1035200039F0F901E90FF11D97FDFA9582830895AD </td>
+ </tr>
+ <tr>
+ <td id="L852" class="blob-num js-line-number" data-line-number="852"></td>
+ <td id="LC852" class="blob-code blob-code-inner js-file-line">:10353000089590910C01992321F090910D01911122 </td>
+ </tr>
+ <tr>
+ <td id="L853" class="blob-num js-line-number" data-line-number="853"></td>
+ <td id="LC853" class="blob-code blob-code-inner js-file-line">:1035400009C020910E0130910F01F9013296205FE0 </td>
+ </tr>
+ <tr>
+ <td id="L854" class="blob-num js-line-number" data-line-number="854"></td>
+ <td id="LC854" class="blob-code blob-code-inner js-file-line">:103550003F4F1FC0982F9695969596959F30F0F403 </td>
+ </tr>
+ <tr>
+ <td id="L855" class="blob-num js-line-number" data-line-number="855"></td>
+ <td id="LC855" class="blob-code blob-code-inner js-file-line">:10356000E0910E01F0910F01E90FF11D877021E04C </td>
+ </tr>
+ <tr>
+ <td id="L856" class="blob-num js-line-number" data-line-number="856"></td>
+ <td id="LC856" class="blob-code blob-code-inner js-file-line">:1035700030E0A90102C0440F551F8A95E2F7CA0145 </td>
+ </tr>
+ <tr>
+ <td id="L857" class="blob-num js-line-number" data-line-number="857"></td>
+ <td id="LC857" class="blob-code blob-code-inner js-file-line">:10358000809591818923818308953196E217F3070D </td>
+ </tr>
+ <tr>
+ <td id="L858" class="blob-num js-line-number" data-line-number="858"></td>
+ <td id="LC858" class="blob-code blob-code-inner js-file-line">:1035900029F090819813F9CF1082F7CF089581E038 </td>
+ </tr>
+ <tr>
+ <td id="L859" class="blob-num js-line-number" data-line-number="859"></td>
+ <td id="LC859" class="blob-code blob-code-inner js-file-line">:1035A00090E0E0910E01F0910F01E80FF91F1082F9 </td>
+ </tr>
+ <tr>
+ <td id="L860" class="blob-num js-line-number" data-line-number="860"></td>
+ <td id="LC860" class="blob-code blob-code-inner js-file-line">:1035B000019680319105A9F708959091CE01892B4C </td>
+ </tr>
+ <tr>
+ <td id="L861" class="blob-num js-line-number" data-line-number="861"></td>
+ <td id="LC861" class="blob-code blob-code-inner js-file-line">:1035C0008093CE01089580959091CE0189238093B8 </td>
+ </tr>
+ <tr>
+ <td id="L862" class="blob-num js-line-number" data-line-number="862"></td>
+ <td id="LC862" class="blob-code blob-code-inner js-file-line">:1035D000CE0108951092CE0108959091CD01892BCE </td>
+ </tr>
+ <tr>
+ <td id="L863" class="blob-num js-line-number" data-line-number="863"></td>
+ <td id="LC863" class="blob-code blob-code-inner js-file-line">:1035E0008093CD01089580959091CD01892380939A </td>
+ </tr>
+ <tr>
+ <td id="L864" class="blob-num js-line-number" data-line-number="864"></td>
+ <td id="LC864" class="blob-code blob-code-inner js-file-line">:1035F000CD0108951092CD0108959091CC01892BB1 </td>
+ </tr>
+ <tr>
+ <td id="L865" class="blob-num js-line-number" data-line-number="865"></td>
+ <td id="LC865" class="blob-code blob-code-inner js-file-line">:103600008093CC01089580959091CC01892380937B </td>
+ </tr>
+ <tr>
+ <td id="L866" class="blob-num js-line-number" data-line-number="866"></td>
+ <td id="LC866" class="blob-code blob-code-inner js-file-line">:10361000CC0108951092CC0108958093BB010895C8 </td>
+ </tr>
+ <tr>
+ <td id="L867" class="blob-num js-line-number" data-line-number="867"></td>
+ <td id="LC867" class="blob-code blob-code-inner js-file-line">:103620001092BB01089580910E0190910F01FC0151 </td>
+ </tr>
+ <tr>
+ <td id="L868" class="blob-num js-line-number" data-line-number="868"></td>
+ <td id="LC868" class="blob-code blob-code-inner js-file-line">:1036300031969C01205F3F4F80E0919191118F5F07 </td>
+ </tr>
+ <tr>
+ <td id="L869" class="blob-num js-line-number" data-line-number="869"></td>
+ <td id="LC869" class="blob-code blob-code-inner js-file-line">:10364000E217F307D1F70895E0910E01F0910F0111 </td>
+ </tr>
+ <tr>
+ <td id="L870" class="blob-num js-line-number" data-line-number="870"></td>
+ <td id="LC870" class="blob-code blob-code-inner js-file-line">:103650008091CE018083E0910E01F0910F01908165 </td>
+ </tr>
+ <tr>
+ <td id="L871" class="blob-num js-line-number" data-line-number="871"></td>
+ <td id="LC871" class="blob-code blob-code-inner js-file-line">:103660008091CD01892B8083E0910E01F0910F01B3 </td>
+ </tr>
+ <tr>
+ <td id="L872" class="blob-num js-line-number" data-line-number="872"></td>
+ <td id="LC872" class="blob-code blob-code-inner js-file-line">:1036700090818091CC01892B80838091BB0188232C </td>
+ </tr>
+ <tr>
+ <td id="L873" class="blob-num js-line-number" data-line-number="873"></td>
+ <td id="LC873" class="blob-code blob-code-inner js-file-line">:1036800061F0E0910E01F0910F019081892B808310 </td>
+ </tr>
+ <tr>
+ <td id="L874" class="blob-num js-line-number" data-line-number="874"></td>
+ <td id="LC874" class="blob-code blob-code-inner js-file-line">:103690000E94131B81111092BB0180910E01909129 </td>
+ </tr>
+ <tr>
+ <td id="L875" class="blob-num js-line-number" data-line-number="875"></td>
+ <td id="LC875" class="blob-code blob-code-inner js-file-line">:1036A0000F010C94900FCF92DF92EF92FF926C017A </td>
+ </tr>
+ <tr>
+ <td id="L876" class="blob-num js-line-number" data-line-number="876"></td>
+ <td id="LC876" class="blob-code blob-code-inner js-file-line">:1036B000EE24FF24C114D104E104F10421F0C70178 </td>
+ </tr>
+ <tr>
+ <td id="L877" class="blob-num js-line-number" data-line-number="877"></td>
+ <td id="LC877" class="blob-code blob-code-inner js-file-line">:1036C000B60120E101C020E0C72ED82EE92EFF244C </td>
+ </tr>
+ <tr>
+ <td id="L878" class="blob-num js-line-number" data-line-number="878"></td>
+ <td id="LC878" class="blob-code blob-code-inner js-file-line">:1036D000C114D104E104F10419F0285FC701B60157 </td>
+ </tr>
+ <tr>
+ <td id="L879" class="blob-num js-line-number" data-line-number="879"></td>
+ <td id="LC879" class="blob-code blob-code-inner js-file-line">:1036E0006B017C0154E0F694E794D794C7945A9503 </td>
+ </tr>
+ <tr>
+ <td id="L880" class="blob-num js-line-number" data-line-number="880"></td>
+ <td id="LC880" class="blob-code blob-code-inner js-file-line">:1036F000D1F7C114D104E104F10419F02C5FC70122 </td>
+ </tr>
+ <tr>
+ <td id="L881" class="blob-num js-line-number" data-line-number="881"></td>
+ <td id="LC881" class="blob-code blob-code-inner js-file-line">:10370000B6016B017C0142E0F694E794D794C7942C </td>
+ </tr>
+ <tr>
+ <td id="L882" class="blob-num js-line-number" data-line-number="882"></td>
+ <td id="LC882" class="blob-code blob-code-inner js-file-line">:103710004A95D1F7C114D104E104F10419F02E5FE8 </td>
+ </tr>
+ <tr>
+ <td id="L883" class="blob-num js-line-number" data-line-number="883"></td>
+ <td id="LC883" class="blob-code blob-code-inner js-file-line">:10372000C701B601DC01CB01B695A79597958795A2 </td>
+ </tr>
+ <tr>
+ <td id="L884" class="blob-num js-line-number" data-line-number="884"></td>
+ <td id="LC884" class="blob-code blob-code-inner js-file-line">:10373000892B8A2B8B2B09F02F5F822FFF90EF9024 </td>
+ </tr>
+ <tr>
+ <td id="L885" class="blob-num js-line-number" data-line-number="885"></td>
+ <td id="LC885" class="blob-code blob-code-inner js-file-line">:10374000DF90CF9008958091E601843039F1109296 </td>
+ </tr>
+ <tr>
+ <td id="L886" class="blob-num js-line-number" data-line-number="886"></td>
+ <td id="LC886" class="blob-code blob-code-inner js-file-line">:10375000D00120E488E190E00FB6F894A89580931A </td>
+ </tr>
+ <tr>
+ <td id="L887" class="blob-num js-line-number" data-line-number="887"></td>
+ <td id="LC887" class="blob-code blob-code-inner js-file-line">:1037600060000FBE2093600080E00E947A0883B75B </td>
+ </tr>
+ <tr>
+ <td id="L888" class="blob-num js-line-number" data-line-number="888"></td>
+ <td id="LC888" class="blob-code blob-code-inner js-file-line">:10377000817F846083BF83B7816083BF789488959D </td>
+ </tr>
+ <tr>
+ <td id="L889" class="blob-num js-line-number" data-line-number="889"></td>
+ <td id="LC889" class="blob-code blob-code-inner js-file-line">:1037800083B78E7F83BF0FB6F894A89580916000B1 </td>
+ </tr>
+ <tr>
+ <td id="L890" class="blob-num js-line-number" data-line-number="890"></td>
+ <td id="LC890" class="blob-code blob-code-inner js-file-line">:10379000886180936000109260000FBE08950895C4 </td>
+ </tr>
+ <tr>
+ <td id="L891" class="blob-num js-line-number" data-line-number="891"></td>
+ <td id="LC891" class="blob-code blob-code-inner js-file-line">:1037A0000895CF930E94CF1B0E94AA040E94D01BB1 </td>
+ </tr>
+ <tr>
+ <td id="L892" class="blob-num js-line-number" data-line-number="892"></td>
+ <td id="LC892" class="blob-code blob-code-inner js-file-line">:1037B000C0E08C2F0E949805811104C0CF5FCE30ED </td>
+ </tr>
+ <tr>
+ <td id="L893" class="blob-num js-line-number" data-line-number="893"></td>
+ <td id="LC893" class="blob-code blob-code-inner js-file-line">:1037C000C1F701C081E0CF9108950E9414150E94B5 </td>
+ </tr>
+ <tr>
+ <td id="L894" class="blob-num js-line-number" data-line-number="894"></td>
+ <td id="LC894" class="blob-code blob-code-inner js-file-line">:1037D000840F0C947A0882E084BD93E095BD9AEF43 </td>
+ </tr>
+ <tr>
+ <td id="L895" class="blob-num js-line-number" data-line-number="895"></td>
+ <td id="LC895" class="blob-code blob-code-inner js-file-line">:1037E00097BD80936E0008952FB7F8948091D10112 </td>
+ </tr>
+ <tr>
+ <td id="L896" class="blob-num js-line-number" data-line-number="896"></td>
+ <td id="LC896" class="blob-code blob-code-inner js-file-line">:1037F0009091D201A091D301B091D4012FBF08952F </td>
+ </tr>
+ <tr>
+ <td id="L897" class="blob-num js-line-number" data-line-number="897"></td>
+ <td id="LC897" class="blob-code blob-code-inner js-file-line">:10380000CF92DF92EF92FF920F931F932FB7F8940E </td>
+ </tr>
+ <tr>
+ <td id="L898" class="blob-num js-line-number" data-line-number="898"></td>
+ <td id="LC898" class="blob-code blob-code-inner js-file-line">:103810004091D1015091D2016091D3017091D401B6 </td>
+ </tr>
+ <tr>
+ <td id="L899" class="blob-num js-line-number" data-line-number="899"></td>
+ <td id="LC899" class="blob-code blob-code-inner js-file-line">:103820002FBF6A017B01EE24FF248C0120E030E0F1 </td>
+ </tr>
+ <tr>
+ <td id="L900" class="blob-num js-line-number" data-line-number="900"></td>
+ <td id="LC900" class="blob-code blob-code-inner js-file-line">:10383000C016D106E206F30610F4415051099A0170 </td>
+ </tr>
+ <tr>
+ <td id="L901" class="blob-num js-line-number" data-line-number="901"></td>
+ <td id="LC901" class="blob-code blob-code-inner js-file-line">:10384000281B390BC9011F910F91FF90EF90DF905A </td>
+ </tr>
+ <tr>
+ <td id="L902" class="blob-num js-line-number" data-line-number="902"></td>
+ <td id="LC902" class="blob-code blob-code-inner js-file-line">:10385000CF9008951F920F920FB60F9211248F935D </td>
+ </tr>
+ <tr>
+ <td id="L903" class="blob-num js-line-number" data-line-number="903"></td>
+ <td id="LC903" class="blob-code blob-code-inner js-file-line">:103860009F93AF93BF938091D1019091D201A0918A </td>
+ </tr>
+ <tr>
+ <td id="L904" class="blob-num js-line-number" data-line-number="904"></td>
+ <td id="LC904" class="blob-code blob-code-inner js-file-line">:10387000D301B091D4010196A11DB11D8093D10156 </td>
+ </tr>
+ <tr>
+ <td id="L905" class="blob-num js-line-number" data-line-number="905"></td>
+ <td id="LC905" class="blob-code blob-code-inner js-file-line">:103880009093D201A093D301B093D401BF91AF9193 </td>
+ </tr>
+ <tr>
+ <td id="L906" class="blob-num js-line-number" data-line-number="906"></td>
+ <td id="LC906" class="blob-code blob-code-inner js-file-line">:103890009F918F910F900FBE0F901F9018950E94CF </td>
+ </tr>
+ <tr>
+ <td id="L907" class="blob-num js-line-number" data-line-number="907"></td>
+ <td id="LC907" class="blob-code blob-code-inner js-file-line">:1038A000810CF8942FEF87EA91E6215080409040F8 </td>
+ </tr>
+ <tr>
+ <td id="L908" class="blob-num js-line-number" data-line-number="908"></td>
+ <td id="LC908" class="blob-code blob-code-inner js-file-line">:1038B000E1F700C0000087E090EBDC018093F001AD </td>
+ </tr>
+ <tr>
+ <td id="L909" class="blob-num js-line-number" data-line-number="909"></td>
+ <td id="LC909" class="blob-code blob-code-inner js-file-line">:1038C0009093F101A093F201B093F3019CE088E1A1 </td>
+ </tr>
+ <tr>
+ <td id="L910" class="blob-num js-line-number" data-line-number="910"></td>
+ <td id="LC910" class="blob-code blob-code-inner js-file-line">:1038D0000FB6F894A895809360000FBE9093600097 </td>
+ </tr>
+ <tr>
+ <td id="L911" class="blob-num js-line-number" data-line-number="911"></td>
+ <td id="LC911" class="blob-code blob-code-inner js-file-line">:1038E000FFCFEF92FF920F931F93CF93DF93D82FC9 </td>
+ </tr>
+ <tr>
+ <td id="L912" class="blob-num js-line-number" data-line-number="912"></td>
+ <td id="LC912" class="blob-code blob-code-inner js-file-line">:1038F000C0E08C2F0E94980500E010E0E82EF12C2B </td>
+ </tr>
+ <tr>
+ <td id="L913" class="blob-num js-line-number" data-line-number="913"></td>
+ <td id="LC913" class="blob-code blob-code-inner js-file-line">:10390000C701002E02C0959587950A94E2F780FDC5 </td>
+ </tr>
+ <tr>
+ <td id="L914" class="blob-num js-line-number" data-line-number="914"></td>
+ <td id="LC914" class="blob-code blob-code-inner js-file-line">:1039100006C00F5F1F4F0630110591F709C0602FD9 </td>
+ </tr>
+ <tr>
+ <td id="L915" class="blob-num js-line-number" data-line-number="915"></td>
+ <td id="LC915" class="blob-code blob-code-inner js-file-line">:103920007C2F80E00E94A005D813F3CF81E004C073 </td>
+ </tr>
+ <tr>
+ <td id="L916" class="blob-num js-line-number" data-line-number="916"></td>
+ <td id="LC916" class="blob-code blob-code-inner js-file-line">:10393000CF5FCE30F1F680E0DF91CF911F910F91F4 </td>
+ </tr>
+ <tr>
+ <td id="L917" class="blob-num js-line-number" data-line-number="917"></td>
+ <td id="LC917" class="blob-code blob-code-inner js-file-line">:10394000FF90EF900895CF93C82F8CE20E94711CD6 </td>
+ </tr>
+ <tr>
+ <td id="L918" class="blob-num js-line-number" data-line-number="918"></td>
+ <td id="LC918" class="blob-code blob-code-inner js-file-line">:10395000882321F08C2FCF910C94711C80E0CF91A3 </td>
+ </tr>
+ <tr>
+ <td id="L919" class="blob-num js-line-number" data-line-number="919"></td>
+ <td id="LC919" class="blob-code blob-code-inner js-file-line">:103960000895CF930E94F81D811102C00E94DE1DB0 </td>
+ </tr>
+ <tr>
+ <td id="L920" class="blob-num js-line-number" data-line-number="920"></td>
+ <td id="LC920" class="blob-code blob-code-inner js-file-line">:10397000C5E6C15049F00E94AA048FE39CE9019773 </td>
+ </tr>
+ <tr>
+ <td id="L921" class="blob-num js-line-number" data-line-number="921"></td>
+ <td id="LC921" class="blob-code blob-code-inner js-file-line">:10398000F1F700C00000F5CF89E20E94A31C81116D </td>
+ </tr>
+ <tr>
+ <td id="L922" class="blob-num js-line-number" data-line-number="922"></td>
+ <td id="LC922" class="blob-code blob-code-inner js-file-line">:1039900013C18AE20E94A31C81110E94DE1D85E0F2 </td>
+ </tr>
+ <tr>
+ <td id="L923" class="blob-num js-line-number" data-line-number="923"></td>
+ <td id="LC923" class="blob-code blob-code-inner js-file-line">:1039A0000E94A31C81110E944F1C0E94031E809341 </td>
+ </tr>
+ <tr>
+ <td id="L924" class="blob-num js-line-number" data-line-number="924"></td>
+ <td id="LC924" class="blob-code blob-code-inner js-file-line">:1039B000CF0187E00E94A31C8823A9F18BE10E941C </td>
+ </tr>
+ <tr>
+ <td id="L925" class="blob-num js-line-number" data-line-number="925"></td>
+ <td id="LC925" class="blob-code blob-code-inner js-file-line">:1039C000A31C882351F08091CF0181FB222720F98D </td>
+ </tr>
+ <tr>
+ <td id="L926" class="blob-num js-line-number" data-line-number="926"></td>
+ <td id="LC926" class="blob-code blob-code-inner js-file-line">:1039D00091E0922790FB81F90EC08EE00E94A31C1B </td>
+ </tr>
+ <tr>
+ <td id="L927" class="blob-num js-line-number" data-line-number="927"></td>
+ <td id="LC927" class="blob-code blob-code-inner js-file-line">:1039E000882361F08091CF0182FB222720F991E0AA </td>
+ </tr>
+ <tr>
+ <td id="L928" class="blob-num js-line-number" data-line-number="928"></td>
+ <td id="LC928" class="blob-code blob-code-inner js-file-line">:1039F000922790FB82F98093CF0115C080E10E944D </td>
+ </tr>
+ <tr>
+ <td id="L929" class="blob-num js-line-number" data-line-number="929"></td>
+ <td id="LC929" class="blob-code blob-code-inner js-file-line">:103A0000A31C9091CF01882341F093FB222720F93A </td>
+ </tr>
+ <tr>
+ <td id="L930" class="blob-num js-line-number" data-line-number="930"></td>
+ <td id="LC930" class="blob-code blob-code-inner js-file-line">:103A100081E0822780FB93F904C0892F809580FB89 </td>
+ </tr>
+ <tr>
+ <td id="L931" class="blob-num js-line-number" data-line-number="931"></td>
+ <td id="LC931" class="blob-code blob-code-inner js-file-line">:103A200090F99093CF018091CF010E94071E0E94D0 </td>
+ </tr>
+ <tr>
+ <td id="L932" class="blob-num js-line-number" data-line-number="932"></td>
+ <td id="LC932" class="blob-code blob-code-inner js-file-line">:103A3000151E8093EF0180EE0E94A31C882341F0A5 </td>
+ </tr>
+ <tr>
+ <td id="L933" class="blob-num js-line-number" data-line-number="933"></td>
+ <td id="LC933" class="blob-code blob-code-inner js-file-line">:103A40008091EF01982F909590FB80F98093EF0182 </td>
+ </tr>
+ <tr>
+ <td id="L934" class="blob-num js-line-number" data-line-number="934"></td>
+ <td id="LC934" class="blob-code blob-code-inner js-file-line">:103A500089E30E94A31C882359F08091EF0181FB28 </td>
+ </tr>
+ <tr>
+ <td id="L935" class="blob-num js-line-number" data-line-number="935"></td>
+ <td id="LC935" class="blob-code blob-code-inner js-file-line">:103A6000222720F991E0922790FB81F98093EF01C2 </td>
+ </tr>
+ <tr>
+ <td id="L936" class="blob-num js-line-number" data-line-number="936"></td>
+ <td id="LC936" class="blob-code blob-code-inner js-file-line">:103A700082EE0E94A31C882359F08091EF0182FB03 </td>
+ </tr>
+ <tr>
+ <td id="L937" class="blob-num js-line-number" data-line-number="937"></td>
+ <td id="LC937" class="blob-code blob-code-inner js-file-line">:103A8000222720F991E0922790FB82F98093EF01A1 </td>
+ </tr>
+ <tr>
+ <td id="L938" class="blob-num js-line-number" data-line-number="938"></td>
+ <td id="LC938" class="blob-code blob-code-inner js-file-line">:103A900086EE0E94A31C882359F08091EF0183FBDE </td>
+ </tr>
+ <tr>
+ <td id="L939" class="blob-num js-line-number" data-line-number="939"></td>
+ <td id="LC939" class="blob-code blob-code-inner js-file-line">:103AA000222720F991E0922790FB83F98093EF0180 </td>
+ </tr>
+ <tr>
+ <td id="L940" class="blob-num js-line-number" data-line-number="940"></td>
+ <td id="LC940" class="blob-code blob-code-inner js-file-line">:103AB00083EE0E94A31C882359F08091EF0184FBC0 </td>
+ </tr>
+ <tr>
+ <td id="L941" class="blob-num js-line-number" data-line-number="941"></td>
+ <td id="LC941" class="blob-code blob-code-inner js-file-line">:103AC000222720F991E0922790FB84F98093EF015F </td>
+ </tr>
+ <tr>
+ <td id="L942" class="blob-num js-line-number" data-line-number="942"></td>
+ <td id="LC942" class="blob-code blob-code-inner js-file-line">:103AD00085E30E94A31C882359F08091EF0185FBA8 </td>
+ </tr>
+ <tr>
+ <td id="L943" class="blob-num js-line-number" data-line-number="943"></td>
+ <td id="LC943" class="blob-code blob-code-inner js-file-line">:103AE000222720F991E0922790FB85F98093EF013E </td>
+ </tr>
+ <tr>
+ <td id="L944" class="blob-num js-line-number" data-line-number="944"></td>
+ <td id="LC944" class="blob-code blob-code-inner js-file-line">:103AF00081E30E94A31C882359F08091EF0186FB8B </td>
+ </tr>
+ <tr>
+ <td id="L945" class="blob-num js-line-number" data-line-number="945"></td>
+ <td id="LC945" class="blob-code blob-code-inner js-file-line">:103B0000222720F991E0922790FB86F98093EF011C </td>
+ </tr>
+ <tr>
+ <td id="L946" class="blob-num js-line-number" data-line-number="946"></td>
+ <td id="LC946" class="blob-code blob-code-inner js-file-line">:103B100081E10E94A31C882359F08091EF0187FB6B </td>
+ </tr>
+ <tr>
+ <td id="L947" class="blob-num js-line-number" data-line-number="947"></td>
+ <td id="LC947" class="blob-code blob-code-inner js-file-line">:103B2000222720F991E0922790FB87F98093EF01FB </td>
+ </tr>
+ <tr>
+ <td id="L948" class="blob-num js-line-number" data-line-number="948"></td>
+ <td id="LC948" class="blob-code blob-code-inner js-file-line">:103B30008091EF010E94191E8091EF0187FB882779 </td>
+ </tr>
+ <tr>
+ <td id="L949" class="blob-num js-line-number" data-line-number="949"></td>
+ <td id="LC949" class="blob-code blob-code-inner js-file-line">:103B400080F980930D0187E20E94A31CC82F8EE1AB </td>
+ </tr>
+ <tr>
+ <td id="L950" class="blob-num js-line-number" data-line-number="950"></td>
+ <td id="LC950" class="blob-code blob-code-inner js-file-line">:103B50000E94A31C8111C2608FE10E94A31C8111ED </td>
+ </tr>
+ <tr>
+ <td id="L951" class="blob-num js-line-number" data-line-number="951"></td>
+ <td id="LC951" class="blob-code blob-code-inner js-file-line">:103B6000C46080E20E94A31C8111C86081E20E94AF </td>
+ </tr>
+ <tr>
+ <td id="L952" class="blob-num js-line-number" data-line-number="952"></td>
+ <td id="LC952" class="blob-code blob-code-inner js-file-line">:103B7000A31C8111C06182E20E94A31C8111C0625A </td>
+ </tr>
+ <tr>
+ <td id="L953" class="blob-num js-line-number" data-line-number="953"></td>
+ <td id="LC953" class="blob-code blob-code-inner js-file-line">:103B800083E20E94A31C8111C06484E20E94A31CF2 </td>
+ </tr>
+ <tr>
+ <td id="L954" class="blob-num js-line-number" data-line-number="954"></td>
+ <td id="LC954" class="blob-code blob-code-inner js-file-line">:103B9000882311F0C06802C0CC2329F08C2F0E942A </td>
+ </tr>
+ <tr>
+ <td id="L955" class="blob-num js-line-number" data-line-number="955"></td>
+ <td id="LC955" class="blob-code blob-code-inner js-file-line">:103BA000101E6C2F03C00E940C1E682F70E080E076 </td>
+ </tr>
+ <tr>
+ <td id="L956" class="blob-num js-line-number" data-line-number="956"></td>
+ <td id="LC956" class="blob-code blob-code-inner js-file-line">:103BB00090E0CF910C94D018CF9108956DEE7EEFE8 </td>
+ </tr>
+ <tr>
+ <td id="L957" class="blob-num js-line-number" data-line-number="957"></td>
+ <td id="LC957" class="blob-code blob-code-inner js-file-line">:103BC00080E090E00E94582460E082E090E00E9453 </td>
+ </tr>
+ <tr>
+ <td id="L958" class="blob-num js-line-number" data-line-number="958"></td>
+ <td id="LC958" class="blob-code blob-code-inner js-file-line">:103BD000462460E083E090E00E94462460E084E0B8 </td>
+ </tr>
+ <tr>
+ <td id="L959" class="blob-num js-line-number" data-line-number="959"></td>
+ <td id="LC959" class="blob-code blob-code-inner js-file-line">:103BE00090E00E94462460E085E090E00C9446243A </td>
+ </tr>
+ <tr>
+ <td id="L960" class="blob-num js-line-number" data-line-number="960"></td>
+ <td id="LC960" class="blob-code blob-code-inner js-file-line">:103BF00080E090E00E94402421E08D3E9E4F09F03D </td>
+ </tr>
+ <tr>
+ <td id="L961" class="blob-num js-line-number" data-line-number="961"></td>
+ <td id="LC961" class="blob-code blob-code-inner js-file-line">:103C000020E0822F089582E090E00C943824682F01 </td>
+ </tr>
+ <tr>
+ <td id="L962" class="blob-num js-line-number" data-line-number="962"></td>
+ <td id="LC962" class="blob-code blob-code-inner js-file-line">:103C100082E090E00C94462483E090E00C943824F9 </td>
+ </tr>
+ <tr>
+ <td id="L963" class="blob-num js-line-number" data-line-number="963"></td>
+ <td id="LC963" class="blob-code blob-code-inner js-file-line">:103C2000682F83E090E00C94462484E090E00C94AC </td>
+ </tr>
+ <tr>
+ <td id="L964" class="blob-num js-line-number" data-line-number="964"></td>
+ <td id="LC964" class="blob-code blob-code-inner js-file-line">:103C30003824682F84E090E00C9446248091D701CA </td>
+ </tr>
+ <tr>
+ <td id="L965" class="blob-num js-line-number" data-line-number="965"></td>
+ <td id="LC965" class="blob-code blob-code-inner js-file-line">:103C400080FF0BC06091130185E0689FB0011124D3 </td>
+ </tr>
+ <tr>
+ <td id="L966" class="blob-num js-line-number" data-line-number="966"></td>
+ <td id="LC966" class="blob-code blob-code-inner js-file-line">:103C500075956795759567952BC081FF09C0609133 </td>
+ </tr>
+ <tr>
+ <td id="L967" class="blob-num js-line-number" data-line-number="967"></td>
+ <td id="LC967" class="blob-code blob-code-inner js-file-line">:103C6000130185E0689FB00111247595679520C008 </td>
+ </tr>
+ <tr>
+ <td id="L968" class="blob-num js-line-number" data-line-number="968"></td>
+ <td id="LC968" class="blob-code blob-code-inner js-file-line">:103C700082FF07C06091130185E0689FB0011124A5 </td>
+ </tr>
+ <tr>
+ <td id="L969" class="blob-num js-line-number" data-line-number="969"></td>
+ <td id="LC969" class="blob-code blob-code-inner js-file-line">:103C800017C09091D8019923D1F060911201961735 </td>
+ </tr>
+ <tr>
+ <td id="L970" class="blob-num js-line-number" data-line-number="970"></td>
+ <td id="LC970" class="blob-code blob-code-inner js-file-line">:103C900088F72091130185E0289F90011124929FBD </td>
+ </tr>
+ <tr>
+ <td id="L971" class="blob-num js-line-number" data-line-number="971"></td>
+ <td id="LC971" class="blob-code blob-code-inner js-file-line">:103CA000A001939F500D112470E0CA010E940A24C4 </td>
+ </tr>
+ <tr>
+ <td id="L972" class="blob-num js-line-number" data-line-number="972"></td>
+ <td id="LC972" class="blob-code blob-code-inner js-file-line">:103CB0006038710540F46115710539F002C065E0A6 </td>
+ </tr>
+ <tr>
+ <td id="L973" class="blob-num js-line-number" data-line-number="973"></td>
+ <td id="LC973" class="blob-code blob-code-inner js-file-line">:103CC00070E0862F08958FE7089581E00895809130 </td>
+ </tr>
+ <tr>
+ <td id="L974" class="blob-num js-line-number" data-line-number="974"></td>
+ <td id="LC974" class="blob-code blob-code-inner js-file-line">:103CD000D70180FF08C06091110170E0759567956C </td>
+ </tr>
+ <tr>
+ <td id="L975" class="blob-num js-line-number" data-line-number="975"></td>
+ <td id="LC975" class="blob-code blob-code-inner js-file-line">:103CE0007595679521C081FF06C06091110170E054 </td>
+ </tr>
+ <tr>
+ <td id="L976" class="blob-num js-line-number" data-line-number="976"></td>
+ <td id="LC976" class="blob-code blob-code-inner js-file-line">:103CF0007595679519C082FF04C06091110170E04D </td>
+ </tr>
+ <tr>
+ <td id="L977" class="blob-num js-line-number" data-line-number="977"></td>
+ <td id="LC977" class="blob-code blob-code-inner js-file-line">:103D000010C09091D8019923C1F0609110019617CD </td>
+ </tr>
+ <tr>
+ <td id="L978" class="blob-num js-line-number" data-line-number="978"></td>
+ <td id="LC978" class="blob-code blob-code-inner js-file-line">:103D1000A0F780911101899FC001112470E00E94D9 </td>
+ </tr>
+ <tr>
+ <td id="L979" class="blob-num js-line-number" data-line-number="979"></td>
+ <td id="LC979" class="blob-code blob-code-inner js-file-line">:103D20000A246038710528F46115710521F0862F89 </td>
+ </tr>
+ <tr>
+ <td id="L980" class="blob-num js-line-number" data-line-number="980"></td>
+ <td id="LC980" class="blob-code blob-code-inner js-file-line">:103D300008958FE7089581E0089561E070E0F4CF81 </td>
+ </tr>
+ <tr>
+ <td id="L981" class="blob-num js-line-number" data-line-number="981"></td>
+ <td id="LC981" class="blob-code blob-code-inner js-file-line">:103D4000803F21F40E941E1E819504C0813F29F40A </td>
+ </tr>
+ <tr>
+ <td id="L982" class="blob-num js-line-number" data-line-number="982"></td>
+ <td id="LC982" class="blob-code blob-code-inner js-file-line">:103D50000E941E1E8093DB010895823F21F40E9481 </td>
+ </tr>
+ <tr>
+ <td id="L983" class="blob-num js-line-number" data-line-number="983"></td>
+ <td id="LC983" class="blob-code blob-code-inner js-file-line">:103D60001E1E819504C0833F29F40E941E1E80936D </td>
+ </tr>
+ <tr>
+ <td id="L984" class="blob-num js-line-number" data-line-number="984"></td>
+ <td id="LC984" class="blob-code blob-code-inner js-file-line">:103D7000DA010895893F19F40E94671E05C08A3F41 </td>
+ </tr>
+ <tr>
+ <td id="L985" class="blob-num js-line-number" data-line-number="985"></td>
+ <td id="LC985" class="blob-code blob-code-inner js-file-line">:103D800031F40E94671E81958093DC0108958B3F7A </td>
+ </tr>
+ <tr>
+ <td id="L986" class="blob-num js-line-number" data-line-number="986"></td>
+ <td id="LC986" class="blob-code blob-code-inner js-file-line">:103D900021F40E94671E819504C08C3F29F40E9483 </td>
+ </tr>
+ <tr>
+ <td id="L987" class="blob-num js-line-number" data-line-number="987"></td>
+ <td id="LC987" class="blob-code blob-code-inner js-file-line">:103DA000671E8093DD010895843F21F48091D9013D </td>
+ </tr>
+ <tr>
+ <td id="L988" class="blob-num js-line-number" data-line-number="988"></td>
+ <td id="LC988" class="blob-code blob-code-inner js-file-line">:103DB000816017C0853F21F48091D901826011C0D4 </td>
+ </tr>
+ <tr>
+ <td id="L989" class="blob-num js-line-number" data-line-number="989"></td>
+ <td id="LC989" class="blob-code blob-code-inner js-file-line">:103DC000863F21F48091D90184600BC0873F21F4A4 </td>
+ </tr>
+ <tr>
+ <td id="L990" class="blob-num js-line-number" data-line-number="990"></td>
+ <td id="LC990" class="blob-code blob-code-inner js-file-line">:103DD0008091D901886005C0883F31F48091D90174 </td>
+ </tr>
+ <tr>
+ <td id="L991" class="blob-num js-line-number" data-line-number="991"></td>
+ <td id="LC991" class="blob-code blob-code-inner js-file-line">:103DE00080618093D90108958D3F21F48091D7019E </td>
+ </tr>
+ <tr>
+ <td id="L992" class="blob-num js-line-number" data-line-number="992"></td>
+ <td id="LC992" class="blob-code blob-code-inner js-file-line">:103DF00081600BC08E3F21F48091D701826005C0A5 </td>
+ </tr>
+ <tr>
+ <td id="L993" class="blob-num js-line-number" data-line-number="993"></td>
+ <td id="LC993" class="blob-code blob-code-inner js-file-line">:103E00008F3F29F48091D70184608093D701089572 </td>
+ </tr>
+ <tr>
+ <td id="L994" class="blob-num js-line-number" data-line-number="994"></td>
+ <td id="LC994" class="blob-code blob-code-inner js-file-line">:103E1000803F39F48091DB0187FF6CC01092DB0199 </td>
+ </tr>
+ <tr>
+ <td id="L995" class="blob-num js-line-number" data-line-number="995"></td>
+ <td id="LC995" class="blob-code blob-code-inner js-file-line">:103E200069C0813F29F48091DB011816BCF362C0A0 </td>
+ </tr>
+ <tr>
+ <td id="L996" class="blob-num js-line-number" data-line-number="996"></td>
+ <td id="LC996" class="blob-code blob-code-inner js-file-line">:103E30009091DA01823F29F497FF5CC01092DA0179 </td>
+ </tr>
+ <tr>
+ <td id="L997" class="blob-num js-line-number" data-line-number="997"></td>
+ <td id="LC997" class="blob-code blob-code-inner js-file-line">:103E400059C0833F19F41916CCF354C0893F41F48B </td>
+ </tr>
+ <tr>
+ <td id="L998" class="blob-num js-line-number" data-line-number="998"></td>
+ <td id="LC998" class="blob-code blob-code-inner js-file-line">:103E50008091DC0118160CF04DC01092DC014AC0B4 </td>
+ </tr>
+ <tr>
+ <td id="L999" class="blob-num js-line-number" data-line-number="999"></td>
+ <td id="LC999" class="blob-code blob-code-inner js-file-line">:103E60008A3F29F48091DC0187FF44C0F6CF8B3F65 </td>
+ </tr>
+ <tr>
+ <td id="L1000" class="blob-num js-line-number" data-line-number="1000"></td>
+ <td id="LC1000" class="blob-code blob-code-inner js-file-line">:103E700039F48091DD0187FF3DC01092DD013AC029 </td>
+ </tr>
+ <tr>
+ <td id="L1001" class="blob-num js-line-number" data-line-number="1001"></td>
+ <td id="LC1001" class="blob-code blob-code-inner js-file-line">:103E80008C3F29F48091DD011816BCF333C0843FC8 </td>
+ </tr>
+ <tr>
+ <td id="L1002" class="blob-num js-line-number" data-line-number="1002"></td>
+ <td id="LC1002" class="blob-code blob-code-inner js-file-line">:103E900021F48091D9018E7F17C0853F21F4809154 </td>
+ </tr>
+ <tr>
+ <td id="L1003" class="blob-num js-line-number" data-line-number="1003"></td>
+ <td id="LC1003" class="blob-code blob-code-inner js-file-line">:103EA000D9018D7F11C0863F21F48091D9018B7F8C </td>
+ </tr>
+ <tr>
+ <td id="L1004" class="blob-num js-line-number" data-line-number="1004"></td>
+ <td id="LC1004" class="blob-code blob-code-inner js-file-line">:103EB0000BC0873F21F48091D901877F05C0883FDF </td>
+ </tr>
+ <tr>
+ <td id="L1005" class="blob-num js-line-number" data-line-number="1005"></td>
+ <td id="LC1005" class="blob-code blob-code-inner js-file-line">:103EC00031F48091D9018F7E8093D90113C08D3F49 </td>
+ </tr>
+ <tr>
+ <td id="L1006" class="blob-num js-line-number" data-line-number="1006"></td>
+ <td id="LC1006" class="blob-code blob-code-inner js-file-line">:103ED00021F48091D7018E7F0BC08E3F21F4809119 </td>
+ </tr>
+ <tr>
+ <td id="L1007" class="blob-num js-line-number" data-line-number="1007"></td>
+ <td id="LC1007" class="blob-code blob-code-inner js-file-line">:103EE000D7018D7F05C08F3F29F48091D7018B7F4B </td>
+ </tr>
+ <tr>
+ <td id="L1008" class="blob-num js-line-number" data-line-number="1008"></td>
+ <td id="LC1008" class="blob-code blob-code-inner js-file-line">:103EF0008093D7018091DA0181110EC08091DB019E </td>
+ </tr>
+ <tr>
+ <td id="L1009" class="blob-num js-line-number" data-line-number="1009"></td>
+ <td id="LC1009" class="blob-code blob-code-inner js-file-line">:103F000081110AC08091DC01811106C08091DD0120 </td>
+ </tr>
+ <tr>
+ <td id="L1010" class="blob-num js-line-number" data-line-number="1010"></td>
+ <td id="LC1010" class="blob-code blob-code-inner js-file-line">:103F1000811102C01092D801089589ED91E00E94AC </td>
+ </tr>
+ <tr>
+ <td id="L1011" class="blob-num js-line-number" data-line-number="1011"></td>
+ <td id="LC1011" class="blob-code blob-code-inner js-file-line">:103F20009B0F0E94F41B9093D6018093D5010895B6 </td>
+ </tr>
+ <tr>
+ <td id="L1012" class="blob-num js-line-number" data-line-number="1012"></td>
+ <td id="LC1012" class="blob-code blob-code-inner js-file-line">:103F30001F93CF93DF938091D5019091D6010E947A </td>
+ </tr>
+ <tr>
+ <td id="L1013" class="blob-num js-line-number" data-line-number="1013"></td>
+ <td id="LC1013" class="blob-code blob-code-inner js-file-line">:103F4000001CAC019091D801992321F0209114011B </td>
+ </tr>
+ <tr>
+ <td id="L1014" class="blob-num js-line-number" data-line-number="1014"></td>
+ <td id="LC1014" class="blob-code blob-code-inner js-file-line">:103F500030E006C0209115018AE0289F90011124CD </td>
+ </tr>
+ <tr>
+ <td id="L1015" class="blob-num js-line-number" data-line-number="1015"></td>
+ <td id="LC1015" class="blob-code blob-code-inner js-file-line">:103F60004217530708F485C08091DA01C091DB0144 </td>
+ </tr>
+ <tr>
+ <td id="L1016" class="blob-num js-line-number" data-line-number="1016"></td>
+ <td id="LC1016" class="blob-code blob-code-inner js-file-line">:103F7000D091DC011091DD01811107C0C11175C024 </td>
+ </tr>
+ <tr>
+ <td id="L1017" class="blob-num js-line-number" data-line-number="1017"></td>
+ <td id="LC1017" class="blob-code blob-code-inner js-file-line">:103F8000D11173C0111171C074C09F3F19F09F5FB0 </td>
+ </tr>
+ <tr>
+ <td id="L1018" class="blob-num js-line-number" data-line-number="1018"></td>
+ <td id="LC1018" class="blob-code blob-code-inner js-file-line">:103F90009093D801181624F40E941E1E8093DA0113 </td>
+ </tr>
+ <tr>
+ <td id="L1019" class="blob-num js-line-number" data-line-number="1019"></td>
+ <td id="LC1019" class="blob-code blob-code-inner js-file-line">:103FA0008091DA0187FF05C00E941E1E81958093D3 </td>
+ </tr>
+ <tr>
+ <td id="L1020" class="blob-num js-line-number" data-line-number="1020"></td>
+ <td id="LC1020" class="blob-code blob-code-inner js-file-line">:103FB000DA011C1624F40E941E1E8093DB018091FE </td>
+ </tr>
+ <tr>
+ <td id="L1021" class="blob-num js-line-number" data-line-number="1021"></td>
+ <td id="LC1021" class="blob-code blob-code-inner js-file-line">:103FC000DB0187FF05C00E941E1E81958093DB01E7 </td>
+ </tr>
+ <tr>
+ <td id="L1022" class="blob-num js-line-number" data-line-number="1022"></td>
+ <td id="LC1022" class="blob-code blob-code-inner js-file-line">:103FD0006091DA01662331F1C091DB01CC2311F14C </td>
+ </tr>
+ <tr>
+ <td id="L1023" class="blob-num js-line-number" data-line-number="1023"></td>
+ <td id="LC1023" class="blob-code blob-code-inner js-file-line">:103FE000062E000C770B880B990B0E94112323E3FC </td>
+ </tr>
+ <tr>
+ <td id="L1024" class="blob-num js-line-number" data-line-number="1024"></td>
+ <td id="LC1024" class="blob-code blob-code-inner js-file-line">:103FF00033E343E35FE30E9475230E94D922609379 </td>
+ </tr>
+ <tr>
+ <td id="L1025" class="blob-num js-line-number" data-line-number="1025"></td>
+ <td id="LC1025" class="blob-code blob-code-inner js-file-line">:10400000DA016C2FCC0F770B880B990B0E941123D0 </td>
+ </tr>
+ <tr>
+ <td id="L1026" class="blob-num js-line-number" data-line-number="1026"></td>
+ <td id="LC1026" class="blob-code blob-code-inner js-file-line">:1040100023E333E343E35FE30E9475230E94D92245 </td>
+ </tr>
+ <tr>
+ <td id="L1027" class="blob-num js-line-number" data-line-number="1027"></td>
+ <td id="LC1027" class="blob-code blob-code-inner js-file-line">:104020006093DB011D1624F40E94671E8093DC015F </td>
+ </tr>
+ <tr>
+ <td id="L1028" class="blob-num js-line-number" data-line-number="1028"></td>
+ <td id="LC1028" class="blob-code blob-code-inner js-file-line">:104030008091DC0187FF05C00E94671E81958093F7 </td>
+ </tr>
+ <tr>
+ <td id="L1029" class="blob-num js-line-number" data-line-number="1029"></td>
+ <td id="LC1029" class="blob-code blob-code-inner js-file-line">:10404000DC01111624F40E94671E8093DD0180912B </td>
+ </tr>
+ <tr>
+ <td id="L1030" class="blob-num js-line-number" data-line-number="1030"></td>
+ <td id="LC1030" class="blob-code blob-code-inner js-file-line">:10405000DD0187FF05C00E94671E81958093DD0109 </td>
+ </tr>
+ <tr>
+ <td id="L1031" class="blob-num js-line-number" data-line-number="1031"></td>
+ <td id="LC1031" class="blob-code blob-code-inner js-file-line">:10406000DF91CF911F910C948D1F9F3F09F08FCF4F </td>
+ </tr>
+ <tr>
+ <td id="L1032" class="blob-num js-line-number" data-line-number="1032"></td>
+ <td id="LC1032" class="blob-code blob-code-inner js-file-line">:1040700097CFDF91CF911F910895E9EDF1E085E0B1 </td>
+ </tr>
+ <tr>
+ <td id="L1033" class="blob-num js-line-number" data-line-number="1033"></td>
+ <td id="LC1033" class="blob-code blob-code-inner js-file-line">:10408000DF011D928A95E9F71092D8011092D701AD </td>
+ </tr>
+ <tr>
+ <td id="L1034" class="blob-num js-line-number" data-line-number="1034"></td>
+ <td id="LC1034" class="blob-code blob-code-inner js-file-line">:104090000895833081F128F4813059F08230D1F0D5 </td>
+ </tr>
+ <tr>
+ <td id="L1035" class="blob-num js-line-number" data-line-number="1035"></td>
+ <td id="LC1035" class="blob-code blob-code-inner js-file-line">:1040A0000895853009F449C0B8F1863009F456C046 </td>
+ </tr>
+ <tr>
+ <td id="L1036" class="blob-num js-line-number" data-line-number="1036"></td>
+ <td id="LC1036" class="blob-code blob-code-inner js-file-line">:1040B000089580911501262F30E0280F311D2F3FE4 </td>
+ </tr>
+ <tr>
+ <td id="L1037" class="blob-num js-line-number" data-line-number="1037"></td>
+ <td id="LC1037" class="blob-code blob-code-inner js-file-line">:1040C000310524F4680F6093150108958FEF8093F4 </td>
+ </tr>
+ <tr>
+ <td id="L1038" class="blob-num js-line-number" data-line-number="1038"></td>
+ <td id="LC1038" class="blob-code blob-code-inner js-file-line">:1040D0001501089580911401262F30E0280F311D1D </td>
+ </tr>
+ <tr>
+ <td id="L1039" class="blob-num js-line-number" data-line-number="1039"></td>
+ <td id="LC1039" class="blob-code blob-code-inner js-file-line">:1040E0002F3F310524F4680F6093140108958FEF7A </td>
+ </tr>
+ <tr>
+ <td id="L1040" class="blob-num js-line-number" data-line-number="1040"></td>
+ <td id="LC1040" class="blob-code blob-code-inner js-file-line">:1040F00080931401089580911301262F30E0280F3A </td>
+ </tr>
+ <tr>
+ <td id="L1041" class="blob-num js-line-number" data-line-number="1041"></td>
+ <td id="LC1041" class="blob-code blob-code-inner js-file-line">:10410000311D2F3F310524F4680F6093130108958A </td>
+ </tr>
+ <tr>
+ <td id="L1042" class="blob-num js-line-number" data-line-number="1042"></td>
+ <td id="LC1042" class="blob-code blob-code-inner js-file-line">:104110008FEF80931301089580911201262F30E0D4 </td>
+ </tr>
+ <tr>
+ <td id="L1043" class="blob-num js-line-number" data-line-number="1043"></td>
+ <td id="LC1043" class="blob-code blob-code-inner js-file-line">:10412000280F311D2F3F310524F4680F60931201D1 </td>
+ </tr>
+ <tr>
+ <td id="L1044" class="blob-num js-line-number" data-line-number="1044"></td>
+ <td id="LC1044" class="blob-code blob-code-inner js-file-line">:1041300008958FEF80931201089580911101262F29 </td>
+ </tr>
+ <tr>
+ <td id="L1045" class="blob-num js-line-number" data-line-number="1045"></td>
+ <td id="LC1045" class="blob-code blob-code-inner js-file-line">:1041400030E0280F311D2F3F310524F4680F6093B4 </td>
+ </tr>
+ <tr>
+ <td id="L1046" class="blob-num js-line-number" data-line-number="1046"></td>
+ <td id="LC1046" class="blob-code blob-code-inner js-file-line">:10415000110108958FEF809311010895809110014E </td>
+ </tr>
+ <tr>
+ <td id="L1047" class="blob-num js-line-number" data-line-number="1047"></td>
+ <td id="LC1047" class="blob-code blob-code-inner js-file-line">:10416000262F30E0280F311D2F3F310524F4680F32 </td>
+ </tr>
+ <tr>
+ <td id="L1048" class="blob-num js-line-number" data-line-number="1048"></td>
+ <td id="LC1048" class="blob-code blob-code-inner js-file-line">:104170006093100108958FEF8093100108958330AC </td>
+ </tr>
+ <tr>
+ <td id="L1049" class="blob-num js-line-number" data-line-number="1049"></td>
+ <td id="LC1049" class="blob-code blob-code-inner js-file-line">:1041800011F128F4813049F0823091F008958530A2 </td>
+ </tr>
+ <tr>
+ <td id="L1050" class="blob-num js-line-number" data-line-number="1050"></td>
+ <td id="LC1050" class="blob-code blob-code-inner js-file-line">:1041900081F120F18630C1F10895809115016817F1 </td>
+ </tr>
+ <tr>
+ <td id="L1051" class="blob-num js-line-number" data-line-number="1051"></td>
+ <td id="LC1051" class="blob-code blob-code-inner js-file-line">:1041A00020F4861B8093150108951092150108953F </td>
+ </tr>
+ <tr>
+ <td id="L1052" class="blob-num js-line-number" data-line-number="1052"></td>
+ <td id="LC1052" class="blob-code blob-code-inner js-file-line">:1041B00080911401681720F4861B809314010895E0 </td>
+ </tr>
+ <tr>
+ <td id="L1053" class="blob-num js-line-number" data-line-number="1053"></td>
+ <td id="LC1053" class="blob-code blob-code-inner js-file-line">:1041C00010921401089580911301681720F4861B42 </td>
+ </tr>
+ <tr>
+ <td id="L1054" class="blob-num js-line-number" data-line-number="1054"></td>
+ <td id="LC1054" class="blob-code blob-code-inner js-file-line">:1041D00080931301089510921301089580911201A4 </td>
+ </tr>
+ <tr>
+ <td id="L1055" class="blob-num js-line-number" data-line-number="1055"></td>
+ <td id="LC1055" class="blob-code blob-code-inner js-file-line">:1041E000681720F4861B8093120108951092120123 </td>
+ </tr>
+ <tr>
+ <td id="L1056" class="blob-num js-line-number" data-line-number="1056"></td>
+ <td id="LC1056" class="blob-code blob-code-inner js-file-line">:1041F000089580911101681720F4861B80931101A6 </td>
+ </tr>
+ <tr>
+ <td id="L1057" class="blob-num js-line-number" data-line-number="1057"></td>
+ <td id="LC1057" class="blob-code blob-code-inner js-file-line">:10420000089510921101089580911001681720F40B </td>
+ </tr>
+ <tr>
+ <td id="L1058" class="blob-num js-line-number" data-line-number="1058"></td>
+ <td id="LC1058" class="blob-code blob-code-inner js-file-line">:10421000861B8093100108951092100108950F934A </td>
+ </tr>
+ <tr>
+ <td id="L1059" class="blob-num js-line-number" data-line-number="1059"></td>
+ <td id="LC1059" class="blob-code blob-code-inner js-file-line">:104220001F938D3109F46BC008F03FC08E3009F444 </td>
+ </tr>
+ <tr>
+ <td id="L1060" class="blob-num js-line-number" data-line-number="1060"></td>
+ <td id="LC1060" class="blob-code blob-code-inner js-file-line">:104230007FC0C0F4873009F469C068F4863009F0A3 </td>
+ </tr>
+ <tr>
+ <td id="L1061" class="blob-num js-line-number" data-line-number="1061"></td>
+ <td id="LC1061" class="blob-code blob-code-inner js-file-line">:10424000B1C08091CF01817F8E7F8093CF0181E0CB </td>
+ </tr>
+ <tr>
+ <td id="L1062" class="blob-num js-line-number" data-line-number="1062"></td>
+ <td id="LC1062" class="blob-code blob-code-inner js-file-line">:104250008093DF01A8C0883009F4A2C08B3009F434 </td>
+ </tr>
+ <tr>
+ <td id="L1063" class="blob-num js-line-number" data-line-number="1063"></td>
+ <td id="LC1063" class="blob-code blob-code-inner js-file-line">:104260009FC0A0C0863109F49BC078F4803109F466 </td>
+ </tr>
+ <tr>
+ <td id="L1064" class="blob-num js-line-number" data-line-number="1064"></td>
+ <td id="LC1064" class="blob-code blob-code-inner js-file-line">:1042700072C0813109F096C00E94141590910D0111 </td>
+ </tr>
+ <tr>
+ <td id="L1065" class="blob-num js-line-number" data-line-number="1065"></td>
+ <td id="LC1065" class="blob-code blob-code-inner js-file-line">:1042800081E0892780930D018BC0893109F488C0B2 </td>
+ </tr>
+ <tr>
+ <td id="L1066" class="blob-num js-line-number" data-line-number="1066"></td>
+ <td id="LC1066" class="blob-code blob-code-inner js-file-line">:104290008B3109F087C08091CF0181FB222720F963 </td>
+ </tr>
+ <tr>
+ <td id="L1067" class="blob-num js-line-number" data-line-number="1067"></td>
+ <td id="LC1067" class="blob-code blob-code-inner js-file-line">:1042A00091E0922790FB81F94CC0853309F470C0EE </td>
+ </tr>
+ <tr>
+ <td id="L1068" class="blob-num js-line-number" data-line-number="1068"></td>
+ <td id="LC1068" class="blob-code blob-code-inner js-file-line">:1042B00048F4873209F46CC008F459C0893209F413 </td>
+ </tr>
+ <tr>
+ <td id="L1069" class="blob-num js-line-number" data-line-number="1069"></td>
+ <td id="LC1069" class="blob-code blob-code-inner js-file-line">:1042C00067C070C0833438F48A3308F04EC0883336 </td>
+ </tr>
+ <tr>
+ <td id="L1070" class="blob-num js-line-number" data-line-number="1070"></td>
+ <td id="LC1070" class="blob-code blob-code-inner js-file-line">:1042D00009F466C067C0833409F45AC0883409F011 </td>
+ </tr>
+ <tr>
+ <td id="L1071" class="blob-num js-line-number" data-line-number="1071"></td>
+ <td id="LC1071" class="blob-code blob-code-inner js-file-line">:1042E00061C00E9414150FEF13ED20E30150104040 </td>
+ </tr>
+ <tr>
+ <td id="L1072" class="blob-num js-line-number" data-line-number="1072"></td>
+ <td id="LC1072" class="blob-code blob-code-inner js-file-line">:1042F0002040E1F700C000000E944F1C51C00E9406 </td>
+ </tr>
+ <tr>
+ <td id="L1073" class="blob-num js-line-number" data-line-number="1073"></td>
+ <td id="LC1073" class="blob-code blob-code-inner js-file-line">:1043000093220E94840F0E947A084AC09091CF01A4 </td>
+ </tr>
+ <tr>
+ <td id="L1074" class="blob-num js-line-number" data-line-number="1074"></td>
+ <td id="LC1074" class="blob-code blob-code-inner js-file-line">:10431000892F8095817080FB90F929F096609860D4 </td>
+ </tr>
+ <tr>
+ <td id="L1075" class="blob-num js-line-number" data-line-number="1075"></td>
+ <td id="LC1075" class="blob-code blob-code-inner js-file-line">:104320009093CF0140C0997F977F9093CF0138C081 </td>
+ </tr>
+ <tr>
+ <td id="L1076" class="blob-num js-line-number" data-line-number="1076"></td>
+ <td id="LC1076" class="blob-code blob-code-inner js-file-line">:104330008091CF0182FB222720F991E0922790FB08 </td>
+ </tr>
+ <tr>
+ <td id="L1077" class="blob-num js-line-number" data-line-number="1077"></td>
+ <td id="LC1077" class="blob-code blob-code-inner js-file-line">:1043400082F98093CF01992359F18091CF01816047 </td>
+ </tr>
+ <tr>
+ <td id="L1078" class="blob-num js-line-number" data-line-number="1078"></td>
+ <td id="LC1078" class="blob-code blob-code-inner js-file-line">:104350008093CF0125C08091CF0183FB222720F9D4 </td>
+ </tr>
+ <tr>
+ <td id="L1079" class="blob-num js-line-number" data-line-number="1079"></td>
+ <td id="LC1079" class="blob-code blob-code-inner js-file-line">:1043600091E0922790FB83F9ECCF895301C08D51E6 </td>
+ </tr>
+ <tr>
+ <td id="L1080" class="blob-num js-line-number" data-line-number="1080"></td>
+ <td id="LC1080" class="blob-code blob-code-inner js-file-line">:1043700041E050E060E070E08A019B0104C0000F62 </td>
+ </tr>
+ <tr>
+ <td id="L1081" class="blob-num js-line-number" data-line-number="1081"></td>
+ <td id="LC1081" class="blob-code blob-code-inner js-file-line">:10438000111F221F331F8A95D2F7C901B80104C03B </td>
+ </tr>
+ <tr>
+ <td id="L1082" class="blob-num js-line-number" data-line-number="1082"></td>
+ <td id="LC1082" class="blob-code blob-code-inner js-file-line">:1043900061E070E080E090E00E94D0180E94141567 </td>
+ </tr>
+ <tr>
+ <td id="L1083" class="blob-num js-line-number" data-line-number="1083"></td>
+ <td id="LC1083" class="blob-code blob-code-inner js-file-line">:1043A00081E001C080E01F910F91089580E00895A1 </td>
+ </tr>
+ <tr>
+ <td id="L1084" class="blob-num js-line-number" data-line-number="1084"></td>
+ <td id="LC1084" class="blob-code blob-code-inner js-file-line">:1043B00080E00895CF93C82F8091DF01813079F09C </td>
+ </tr>
+ <tr>
+ <td id="L1085" class="blob-num js-line-number" data-line-number="1085"></td>
+ <td id="LC1085" class="blob-code blob-code-inner js-file-line">:1043C00018F08230E9F187C0E0910E01F0910F0101 </td>
+ </tr>
+ <tr>
+ <td id="L1086" class="blob-num js-line-number" data-line-number="1086"></td>
+ <td id="LC1086" class="blob-code blob-code-inner js-file-line">:1043D0008081813169F0823209F07FC009C0E091AB </td>
+ </tr>
+ <tr>
+ <td id="L1087" class="blob-num js-line-number" data-line-number="1087"></td>
+ <td id="LC1087" class="blob-code blob-code-inner js-file-line">:1043E0000E01F0910F018081813111F0823261F470 </td>
+ </tr>
+ <tr>
+ <td id="L1088" class="blob-num js-line-number" data-line-number="1088"></td>
+ <td id="LC1088" class="blob-code blob-code-inner js-file-line">:1043F0008C2F0E94D621811104C08C2F0E940F2186 </td>
+ </tr>
+ <tr>
+ <td id="L1089" class="blob-num js-line-number" data-line-number="1089"></td>
+ <td id="LC1089" class="blob-code blob-code-inner js-file-line">:104400001DC081E090E01AC08C2F0E94D82181113C </td>
+ </tr>
+ <tr>
+ <td id="L1090" class="blob-num js-line-number" data-line-number="1090"></td>
+ <td id="LC1090" class="blob-code blob-code-inner js-file-line">:1044100014C0C43179F048F4CB3079F0C03109F0E0 </td>
+ </tr>
+ <tr>
+ <td id="L1091" class="blob-num js-line-number" data-line-number="1091"></td>
+ <td id="LC1091" class="blob-code blob-code-inner js-file-line">:1044200060C082E08093DF0108C0C93219F0C83350 </td>
+ </tr>
+ <tr>
+ <td id="L1092" class="blob-num js-line-number" data-line-number="1092"></td>
+ <td id="LC1092" class="blob-code blob-code-inner js-file-line">:1044300021F057C01092DF0154C081E0817053C059 </td>
+ </tr>
+ <tr>
+ <td id="L1093" class="blob-num js-line-number" data-line-number="1093"></td>
+ <td id="LC1093" class="blob-code blob-code-inner js-file-line">:10444000C93289F118F5C43171F1A8F4C73009F007 </td>
+ </tr>
+ <tr>
+ <td id="L1094" class="blob-num js-line-number" data-line-number="1094"></td>
+ <td id="LC1094" class="blob-code blob-code-inner js-file-line">:1044500046C08AE08093150194E19093140193E0A3 </td>
+ </tr>
+ <tr>
+ <td id="L1095" class="blob-num js-line-number" data-line-number="1095"></td>
+ <td id="LC1095" class="blob-code blob-code-inner js-file-line">:10446000909313018093120188E08093110188E2F8 </td>
+ </tr>
+ <tr>
+ <td id="L1096" class="blob-num js-line-number" data-line-number="1096"></td>
+ <td id="LC1096" class="blob-code blob-code-inner js-file-line">:104470008093100134C0CE51C63088F5EC2FF0E0A7 </td>
+ </tr>
+ <tr>
+ <td id="L1097" class="blob-num js-line-number" data-line-number="1097"></td>
+ <td id="LC1097" class="blob-code blob-code-inner js-file-line">:10448000E65DFE4F80818093DE0129C0CE34E9F0E5 </td>
+ </tr>
+ <tr>
+ <td id="L1098" class="blob-num js-line-number" data-line-number="1098"></td>
+ <td id="LC1098" class="blob-code blob-code-inner js-file-line">:1044900020F4CB3421F56AE013C0C13579F0C23580 </td>
+ </tr>
+ <tr>
+ <td id="L1099" class="blob-num js-line-number" data-line-number="1099"></td>
+ <td id="LC1099" class="blob-code blob-code-inner js-file-line">:1044A000F1F461E00DC08091DE01882319F01092D3 </td>
+ </tr>
+ <tr>
+ <td id="L1100" class="blob-num js-line-number" data-line-number="1100"></td>
+ <td id="LC1100" class="blob-code blob-code-inner js-file-line">:1044B000DE0115C081E08093DF0115C061E006C018 </td>
+ </tr>
+ <tr>
+ <td id="L1101" class="blob-num js-line-number" data-line-number="1101"></td>
+ <td id="LC1101" class="blob-code blob-code-inner js-file-line">:1044C0008091DE010E9449200AC06AE08091DE01ED </td>
+ </tr>
+ <tr>
+ <td id="L1102" class="blob-num js-line-number" data-line-number="1102"></td>
+ <td id="LC1102" class="blob-code blob-code-inner js-file-line">:1044D0000E94BF2004C01092DF0180E004C081E090 </td>
+ </tr>
+ <tr>
+ <td id="L1103" class="blob-num js-line-number" data-line-number="1103"></td>
+ <td id="LC1103" class="blob-code blob-code-inner js-file-line">:1044E00002C080E0ABCFCF910895E1E8F0E0808199 </td>
+ </tr>
+ <tr>
+ <td id="L1104" class="blob-num js-line-number" data-line-number="1104"></td>
+ <td id="LC1104" class="blob-code blob-code-inner js-file-line">:1044F000886080838081816080838FB7F89493E0A7 </td>
+ </tr>
+ <tr>
+ <td id="L1105" class="blob-num js-line-number" data-line-number="1105"></td>
+ <td id="LC1105" class="blob-code blob-code-inner js-file-line">:104500009093890090ED909388008FBF0895EFE617 </td>
+ </tr>
+ <tr>
+ <td id="L1106" class="blob-num js-line-number" data-line-number="1106"></td>
+ <td id="LC1106" class="blob-code blob-code-inner js-file-line">:10451000F0E08081826080830895EFE6F0E08081A2 </td>
+ </tr>
+ <tr>
+ <td id="L1107" class="blob-num js-line-number" data-line-number="1107"></td>
+ <td id="LC1107" class="blob-code blob-code-inner js-file-line">:104520008D7F80830895EFE6F0E0908182E0892717 </td>
+ </tr>
+ <tr>
+ <td id="L1108" class="blob-num js-line-number" data-line-number="1108"></td>
+ <td id="LC1108" class="blob-code blob-code-inner js-file-line">:10453000808308951F920F920FB60F9211242F932C </td>
+ </tr>
+ <tr>
+ <td id="L1109" class="blob-num js-line-number" data-line-number="1109"></td>
+ <td id="LC1109" class="blob-code blob-code-inner js-file-line">:104540003F934F935F936F937F938F939F93AF931B </td>
+ </tr>
+ <tr>
+ <td id="L1110" class="blob-num js-line-number" data-line-number="1110"></td>
+ <td id="LC1110" class="blob-code blob-code-inner js-file-line">:10455000BF93EF93FF938091E0019091E101019669 </td>
+ </tr>
+ <tr>
+ <td id="L1111" class="blob-num js-line-number" data-line-number="1111"></td>
+ <td id="LC1111" class="blob-code blob-code-inner js-file-line">:104560009093E1018093E001811103C082E00E94F9 </td>
+ </tr>
+ <tr>
+ <td id="L1112" class="blob-num js-line-number" data-line-number="1112"></td>
+ <td id="LC1112" class="blob-code blob-code-inner js-file-line">:104570007A08E091E101E695E695F0E0E657FB4F19 </td>
+ </tr>
+ <tr>
+ <td id="L1113" class="blob-num js-line-number" data-line-number="1113"></td>
+ <td id="LC1113" class="blob-code blob-code-inner js-file-line">:10458000E4918091E0018E1303C080E00E947A08DC </td>
+ </tr>
+ <tr>
+ <td id="L1114" class="blob-num js-line-number" data-line-number="1114"></td>
+ <td id="LC1114" class="blob-code blob-code-inner js-file-line">:10459000FF91EF91BF91AF919F918F917F916F911B </td>
+ </tr>
+ <tr>
+ <td id="L1115" class="blob-num js-line-number" data-line-number="1115"></td>
+ <td id="LC1115" class="blob-code blob-code-inner js-file-line">:1045A0005F914F913F912F910F900FBE0F901F90F1 </td>
+ </tr>
+ <tr>
+ <td id="L1116" class="blob-num js-line-number" data-line-number="1116"></td>
+ <td id="LC1116" class="blob-code blob-code-inner js-file-line">:1045B00018950E94E0226894B1110C946F2308951D </td>
+ </tr>
+ <tr>
+ <td id="L1117" class="blob-num js-line-number" data-line-number="1117"></td>
+ <td id="LC1117" class="blob-code blob-code-inner js-file-line">:1045C0000E94542388F09F5798F0B92F9927B7512C </td>
+ </tr>
+ <tr>
+ <td id="L1118" class="blob-num js-line-number" data-line-number="1118"></td>
+ <td id="LC1118" class="blob-code blob-code-inner js-file-line">:1045D000B0F0E1F0660F771F881F991F1AF0BA95A7 </td>
+ </tr>
+ <tr>
+ <td id="L1119" class="blob-num js-line-number" data-line-number="1119"></td>
+ <td id="LC1119" class="blob-code blob-code-inner js-file-line">:1045E000C9F714C0B13091F00E946E23B1E0089574 </td>
+ </tr>
+ <tr>
+ <td id="L1120" class="blob-num js-line-number" data-line-number="1120"></td>
+ <td id="LC1120" class="blob-code blob-code-inner js-file-line">:1045F0000C946E23672F782F8827B85F39F0B93F66 </td>
+ </tr>
+ <tr>
+ <td id="L1121" class="blob-num js-line-number" data-line-number="1121"></td>
+ <td id="LC1121" class="blob-code blob-code-inner js-file-line">:10460000CCF3869577956795B395D9F73EF4909559 </td>
+ </tr>
+ <tr>
+ <td id="L1122" class="blob-num js-line-number" data-line-number="1122"></td>
+ <td id="LC1122" class="blob-code blob-code-inner js-file-line">:104610008095709561957F4F8F4F9F4F0895E894D7 </td>
+ </tr>
+ <tr>
+ <td id="L1123" class="blob-num js-line-number" data-line-number="1123"></td>
+ <td id="LC1123" class="blob-code blob-code-inner js-file-line">:1046200009C097FB3EF490958095709561957F4FFA </td>
+ </tr>
+ <tr>
+ <td id="L1124" class="blob-num js-line-number" data-line-number="1124"></td>
+ <td id="LC1124" class="blob-code blob-code-inner js-file-line">:104630008F4F9F4F9923A9F0F92F96E9BB279395A8 </td>
+ </tr>
+ <tr>
+ <td id="L1125" class="blob-num js-line-number" data-line-number="1125"></td>
+ <td id="LC1125" class="blob-code blob-code-inner js-file-line">:10464000F695879577956795B795F111F8CFFAF4B8 </td>
+ </tr>
+ <tr>
+ <td id="L1126" class="blob-num js-line-number" data-line-number="1126"></td>
+ <td id="LC1126" class="blob-code blob-code-inner js-file-line">:10465000BB0F11F460FF1BC06F5F7F4F8F4F9F4FE9 </td>
+ </tr>
+ <tr>
+ <td id="L1127" class="blob-num js-line-number" data-line-number="1127"></td>
+ <td id="LC1127" class="blob-code blob-code-inner js-file-line">:1046600016C0882311F096E911C0772321F09EE847 </td>
+ </tr>
+ <tr>
+ <td id="L1128" class="blob-num js-line-number" data-line-number="1128"></td>
+ <td id="LC1128" class="blob-code blob-code-inner js-file-line">:10467000872F762F05C0662371F096E8862F70E0AD </td>
+ </tr>
+ <tr>
+ <td id="L1129" class="blob-num js-line-number" data-line-number="1129"></td>
+ <td id="LC1129" class="blob-code blob-code-inner js-file-line">:1046800060E02AF09A95660F771F881FDAF7880F87 </td>
+ </tr>
+ <tr>
+ <td id="L1130" class="blob-num js-line-number" data-line-number="1130"></td>
+ <td id="LC1130" class="blob-code blob-code-inner js-file-line">:104690009695879597F9089557FD9058440F551FA3 </td>
+ </tr>
+ <tr>
+ <td id="L1131" class="blob-num js-line-number" data-line-number="1131"></td>
+ <td id="LC1131" class="blob-code blob-code-inner js-file-line">:1046A00059F05F3F71F04795880F97FB991F61F0B4 </td>
+ </tr>
+ <tr>
+ <td id="L1132" class="blob-num js-line-number" data-line-number="1132"></td>
+ <td id="LC1132" class="blob-code blob-code-inner js-file-line">:1046B0009F3F79F087950895121613061406551F2B </td>
+ </tr>
+ <tr>
+ <td id="L1133" class="blob-num js-line-number" data-line-number="1133"></td>
+ <td id="LC1133" class="blob-code blob-code-inner js-file-line">:1046C000F2CF4695F1DF08C0161617061806991F97 </td>
+ </tr>
+ <tr>
+ <td id="L1134" class="blob-num js-line-number" data-line-number="1134"></td>
+ <td id="LC1134" class="blob-code blob-code-inner js-file-line">:1046D000F1CF86957105610508940895E894BB278C </td>
+ </tr>
+ <tr>
+ <td id="L1135" class="blob-num js-line-number" data-line-number="1135"></td>
+ <td id="LC1135" class="blob-code blob-code-inner js-file-line">:1046E00066277727CB0197F908950E9488230C94B9 </td>
+ </tr>
+ <tr>
+ <td id="L1136" class="blob-num js-line-number" data-line-number="1136"></td>
+ <td id="LC1136" class="blob-code blob-code-inner js-file-line">:1046F000F9230E94EB2338F00E94F22320F0952347 </td>
+ </tr>
+ <tr>
+ <td id="L1137" class="blob-num js-line-number" data-line-number="1137"></td>
+ <td id="LC1137" class="blob-code blob-code-inner js-file-line">:1047000011F00C94E2230C94E82311240C946F23F1 </td>
+ </tr>
+ <tr>
+ <td id="L1138" class="blob-num js-line-number" data-line-number="1138"></td>
+ <td id="LC1138" class="blob-code blob-code-inner js-file-line">:104710000E944C2370F3959FC1F3950F50E0551FF5 </td>
+ </tr>
+ <tr>
+ <td id="L1139" class="blob-num js-line-number" data-line-number="1139"></td>
+ <td id="LC1139" class="blob-code blob-code-inner js-file-line">:10472000629FF001729FBB27F00DB11D639FAA2706 </td>
+ </tr>
+ <tr>
+ <td id="L1140" class="blob-num js-line-number" data-line-number="1140"></td>
+ <td id="LC1140" class="blob-code blob-code-inner js-file-line">:10473000F00DB11DAA1F649F6627B00DA11D661F55 </td>
+ </tr>
+ <tr>
+ <td id="L1141" class="blob-num js-line-number" data-line-number="1141"></td>
+ <td id="LC1141" class="blob-code blob-code-inner js-file-line">:10474000829F2227B00DA11D621F739FB00DA11D76 </td>
+ </tr>
+ <tr>
+ <td id="L1142" class="blob-num js-line-number" data-line-number="1142"></td>
+ <td id="LC1142" class="blob-code blob-code-inner js-file-line">:10475000621F839FA00D611D221F749F3327A00D30 </td>
+ </tr>
+ <tr>
+ <td id="L1143" class="blob-num js-line-number" data-line-number="1143"></td>
+ <td id="LC1143" class="blob-code blob-code-inner js-file-line">:10476000611D231F849F600D211D822F762F6A2FCC </td>
+ </tr>
+ <tr>
+ <td id="L1144" class="blob-num js-line-number" data-line-number="1144"></td>
+ <td id="LC1144" class="blob-code blob-code-inner js-file-line">:1047700011249F5750409AF0F1F088234AF0EE0F31 </td>
+ </tr>
+ <tr>
+ <td id="L1145" class="blob-num js-line-number" data-line-number="1145"></td>
+ <td id="LC1145" class="blob-code blob-code-inner js-file-line">:10478000FF1FBB1F661F771F881F91505040A9F75E </td>
+ </tr>
+ <tr>
+ <td id="L1146" class="blob-num js-line-number" data-line-number="1146"></td>
+ <td id="LC1146" class="blob-code blob-code-inner js-file-line">:104790009E3F510580F00C94E2230C946F235F3F01 </td>
+ </tr>
+ <tr>
+ <td id="L1147" class="blob-num js-line-number" data-line-number="1147"></td>
+ <td id="LC1147" class="blob-code blob-code-inner js-file-line">:1047A000E4F3983ED4F3869577956795B795F7959A </td>
+ </tr>
+ <tr>
+ <td id="L1148" class="blob-num js-line-number" data-line-number="1148"></td>
+ <td id="LC1148" class="blob-code blob-code-inner js-file-line">:1047B000E7959F5FC1F7FE2B880F911D9695879512 </td>
+ </tr>
+ <tr>
+ <td id="L1149" class="blob-num js-line-number" data-line-number="1149"></td>
+ <td id="LC1149" class="blob-code blob-code-inner js-file-line">:1047C00097F9089597F99F6780E870E060E0089591 </td>
+ </tr>
+ <tr>
+ <td id="L1150" class="blob-num js-line-number" data-line-number="1150"></td>
+ <td id="LC1150" class="blob-code blob-code-inner js-file-line">:1047D0009FEF80EC089500240A9416161706180619 </td>
+ </tr>
+ <tr>
+ <td id="L1151" class="blob-num js-line-number" data-line-number="1151"></td>
+ <td id="LC1151" class="blob-code blob-code-inner js-file-line">:1047E0000906089500240A941216130614060506F5 </td>
+ </tr>
+ <tr>
+ <td id="L1152" class="blob-num js-line-number" data-line-number="1152"></td>
+ <td id="LC1152" class="blob-code blob-code-inner js-file-line">:1047F0000895092E0394000C11F4882352F0BB0F86 </td>
+ </tr>
+ <tr>
+ <td id="L1153" class="blob-num js-line-number" data-line-number="1153"></td>
+ <td id="LC1153" class="blob-code blob-code-inner js-file-line">:1048000040F4BF2B11F460FF04C06F5F7F4F8F4FE8 </td>
+ </tr>
+ <tr>
+ <td id="L1154" class="blob-num js-line-number" data-line-number="1154"></td>
+ <td id="LC1154" class="blob-code blob-code-inner js-file-line">:104810009F4F089597FB072E16F4009407D077FD5D </td>
+ </tr>
+ <tr>
+ <td id="L1155" class="blob-num js-line-number" data-line-number="1155"></td>
+ <td id="LC1155" class="blob-code blob-code-inner js-file-line">:1048200009D00E94242407FC05D03EF49095819580 </td>
+ </tr>
+ <tr>
+ <td id="L1156" class="blob-num js-line-number" data-line-number="1156"></td>
+ <td id="LC1156" class="blob-code blob-code-inner js-file-line">:104830009F4F0895709561957F4F0895EE0FFF1F6C </td>
+ </tr>
+ <tr>
+ <td id="L1157" class="blob-num js-line-number" data-line-number="1157"></td>
+ <td id="LC1157" class="blob-code blob-code-inner js-file-line">:104840000590F491E02D0994AA1BBB1B51E107C010 </td>
+ </tr>
+ <tr>
+ <td id="L1158" class="blob-num js-line-number" data-line-number="1158"></td>
+ <td id="LC1158" class="blob-code blob-code-inner js-file-line">:10485000AA1FBB1FA617B70710F0A61BB70B881F10 </td>
+ </tr>
+ <tr>
+ <td id="L1159" class="blob-num js-line-number" data-line-number="1159"></td>
+ <td id="LC1159" class="blob-code blob-code-inner js-file-line">:10486000991F5A95A9F780959095BC01CD0108959F </td>
+ </tr>
+ <tr>
+ <td id="L1160" class="blob-num js-line-number" data-line-number="1160"></td>
+ <td id="LC1160" class="blob-code blob-code-inner js-file-line">:10487000F999FECF92BD81BDF89A992780B5089528 </td>
+ </tr>
+ <tr>
+ <td id="L1161" class="blob-num js-line-number" data-line-number="1161"></td>
+ <td id="LC1161" class="blob-code blob-code-inner js-file-line">:10488000A8E1B0E042E050E00C946024262FF999B2 </td>
+ </tr>
+ <tr>
+ <td id="L1162" class="blob-num js-line-number" data-line-number="1162"></td>
+ <td id="LC1162" class="blob-code blob-code-inner js-file-line">:10489000FECF92BD81BDF89A019700B4021639F09F </td>
+ </tr>
+ <tr>
+ <td id="L1163" class="blob-num js-line-number" data-line-number="1163"></td>
+ <td id="LC1163" class="blob-code blob-code-inner js-file-line">:1048A0001FBA20BD0FB6F894FA9AF99A0FBE089570 </td>
+ </tr>
+ <tr>
+ <td id="L1164" class="blob-num js-line-number" data-line-number="1164"></td>
+ <td id="LC1164" class="blob-code blob-code-inner js-file-line">:1048B0000196272F0E9447240C944624DC01CB014B </td>
+ </tr>
+ <tr>
+ <td id="L1165" class="blob-num js-line-number" data-line-number="1165"></td>
+ <td id="LC1165" class="blob-code blob-code-inner js-file-line">:1048C000FC01F999FECF06C0F2BDE1BDF89A319620 </td>
+ </tr>
+ <tr>
+ <td id="L1166" class="blob-num js-line-number" data-line-number="1166"></td>
+ <td id="LC1166" class="blob-code blob-code-inner js-file-line">:1048D00000B40D9241505040B8F70895F894FFCFBE </td>
+ </tr>
+ <tr>
+ <td id="L1167" class="blob-num js-line-number" data-line-number="1167"></td>
+ <td id="LC1167" class="blob-code blob-code-inner js-file-line">:1048E00020027C080A09E708B3087F080101BC011F </td>
+ </tr>
+ <tr>
+ <td id="L1168" class="blob-num js-line-number" data-line-number="1168"></td>
+ <td id="LC1168" class="blob-code blob-code-inner js-file-line">:1048F00028080A03140A3F4D36394B04FE03C80347 </td>
+ </tr>
+ <tr>
+ <td id="L1169" class="blob-num js-line-number" data-line-number="1169"></td>
+ <td id="LC1169" class="blob-code blob-code-inner js-file-line">:104900008F0322033B0354036D03010203040506D6 </td>
+ </tr>
+ <tr>
+ <td id="L1170" class="blob-num js-line-number" data-line-number="1170"></td>
+ <td id="LC1170" class="blob-code blob-code-inner js-file-line">:04491000070809008B </td>
+ </tr>
+ <tr>
+ <td id="L1171" class="blob-num js-line-number" data-line-number="1171"></td>
+ <td id="LC1171" class="blob-code blob-code-inner js-file-line">:00000001FF </td>
+ </tr>
+</table>
+
+ </div>
+
+</div>
+
+<button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="hidden">Jump to Line</button>
+<div id="jump-to-line" style="display:none">
+ <!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="" class="js-jump-to-line-form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+ <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+ <button type="submit" class="btn">Go</button>
+</form></div>
+
+ </div>
+ <div class="modal-backdrop"></div>
+</div>
+
+
+ </div>
+ </div>
+
+ </div>
+
+ <div class="container site-footer-container">
+ <div class="site-footer" role="contentinfo">
+ <ul class="site-footer-links right">
+ <li><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
+ <li><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
+ <li><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
+ <li><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li>
+ <li><a href="https://github.com/blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
+ <li><a href="https://github.com/about" data-ga-click="Footer, go to about, text:about">About</a></li>
+
+ </ul>
+
+ <a href="https://github.com" aria-label="Homepage" class="site-footer-mark" title="GitHub">
+ <svg aria-hidden="true" class="octicon octicon-mark-github" height="24" version="1.1" viewBox="0 0 16 16" width="24"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59 0.4 0.07 0.55-0.17 0.55-0.38 0-0.19-0.01-0.82-0.01-1.49-2.01 0.37-2.53-0.49-2.69-0.94-0.09-0.23-0.48-0.94-0.82-1.13-0.28-0.15-0.68-0.52-0.01-0.53 0.63-0.01 1.08 0.58 1.23 0.82 0.72 1.21 1.87 0.87 2.33 0.66 0.07-0.52 0.28-0.87 0.51-1.07-1.78-0.2-3.64-0.89-3.64-3.95 0-0.87 0.31-1.59 0.82-2.15-0.08-0.2-0.36-1.02 0.08-2.12 0 0 0.67-0.21 2.2 0.82 0.64-0.18 1.32-0.27 2-0.27 0.68 0 1.36 0.09 2 0.27 1.53-1.04 2.2-0.82 2.2-0.82 0.44 1.1 0.16 1.92 0.08 2.12 0.51 0.56 0.82 1.27 0.82 2.15 0 3.07-1.87 3.75-3.65 3.95 0.29 0.25 0.54 0.73 0.54 1.48 0 1.07-0.01 1.93-0.01 2.2 0 0.21 0.15 0.46 0.55 0.38C13.71 14.53 16 11.53 16 8 16 3.58 12.42 0 8 0z"></path></svg>
+</a>
+ <ul class="site-footer-links">
+ <li>&copy; 2016 <span title="0.18057s from github-fe155-cp1-prd.iad.github.net">GitHub</span>, Inc.</li>
+ <li><a href="https://github.com/site/terms" data-ga-click="Footer, go to terms, text:terms">Terms</a></li>
+ <li><a href="https://github.com/site/privacy" data-ga-click="Footer, go to privacy, text:privacy">Privacy</a></li>
+ <li><a href="https://github.com/security" data-ga-click="Footer, go to security, text:security">Security</a></li>
+ <li><a href="https://github.com/contact" data-ga-click="Footer, go to contact, text:contact">Contact</a></li>
+ <li><a href="https://help.github.com" data-ga-click="Footer, go to help, text:help">Help</a></li>
+ </ul>
+ </div>
+</div>
+
+
+
+
+
+ <div id="ajax-error-message" class="ajax-error-message flash flash-error">
+ <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M15.72 12.5l-6.85-11.98C8.69 0.21 8.36 0.02 8 0.02s-0.69 0.19-0.87 0.5l-6.85 11.98c-0.18 0.31-0.18 0.69 0 1C0.47 13.81 0.8 14 1.15 14h13.7c0.36 0 0.69-0.19 0.86-0.5S15.89 12.81 15.72 12.5zM9 12H7V10h2V12zM9 9H7V5h2V9z"></path></svg>
+ <button type="button" class="flash-close js-flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+ <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75-1.48-1.48 3.75-3.75L0.77 4.25l1.48-1.48 3.75 3.75 3.75-3.75 1.48 1.48-3.75 3.75z"></path></svg>
+ </button>
+ Something went wrong with that request. Please try again.
+ </div>
+
+
+
+ <script crossorigin="anonymous" integrity="sha256-6lu7KoNzd//eU+EJnlkJyN9NNsxekMBa6zaUsVfffk0=" src="https://assets-cdn.github.com/assets/frameworks-ea5bbb2a837377ffde53e1099e5909c8df4d36cc5e90c05aeb3694b157df7e4d.js"></script>
+ <script async="async" crossorigin="anonymous" integrity="sha256-ORgpFF28BxWN3hEqpja3rItY93JlJ85xC9VhGK4dL1c=" src="https://assets-cdn.github.com/assets/github-391829145dbc07158dde112aa636b7ac8b58f7726527ce710bd56118ae1d2f57.js"></script>
+
+
+
+
+
+
+ <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner hidden">
+ <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path d="M15.72 12.5l-6.85-11.98C8.69 0.21 8.36 0.02 8 0.02s-0.69 0.19-0.87 0.5l-6.85 11.98c-0.18 0.31-0.18 0.69 0 1C0.47 13.81 0.8 14 1.15 14h13.7c0.36 0 0.69-0.19 0.86-0.5S15.89 12.81 15.72 12.5zM9 12H7V10h2V12zM9 9H7V5h2V9z"></path></svg>
+ <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ </div>
+ <div class="facebox" id="facebox" style="display:none;">
+ <div class="facebox-popup">
+ <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description">
+ </div>
+ <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal">
+ <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path d="M7.48 8l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75-1.48-1.48 3.75-3.75L0.77 4.25l1.48-1.48 3.75 3.75 3.75-3.75 1.48 1.48-3.75 3.75z"></path></svg>
+ </button>
+ </div>
+</div>
+
+ </body>
+</html>
+
diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c b/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c
new file mode 100755
index 0000000000..33a0480c94
--- /dev/null
+++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c
@@ -0,0 +1,284 @@
+#include "ergodox_ez.h"
+#include "debug.h"
+#include "action_layer.h"
+
+/******************************************************************************************
+ * SPANISH DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
+ * Layer 1: auxiliary keys
+ * Layer 2: full qwerty layout
+ ******************************************************************************************
+ * IMPORTANT: Software layout must be set to SPANISH QWERTY to work properly
+ *****************************************************************************************/
+
+// LAYERS
+#define BASE 0 // dvorak layout (default)
+#define AUX 1 // auxiliary keys
+#define QWERTY 2 // qwerty layout
+
+// MACROS
+#define OBRACE 0 // key { or shift
+#define CBRACE 1 // key } or shift
+#define OBRACK 2 // key [ or left alt
+#define CBRACK 3 // key ] or left alt
+#define CAPS 4 // caps lock
+
+// LEDS
+#define USB_LED_NUM_LOCK 0
+#define USB_LED_CAPS_LOCK 1
+#define USB_LED_SCROLL_LOCK 2
+#define USB_LED_COMPOSE 3
+#define USB_LED_KANA 4
+
+// TIMERS
+#define KEY_TAP_FAST 85
+#define KEY_TAP_SLOW 95
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Base layer
+ * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ |
+ * |--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------|
+ * |Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl |
+ * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------|
+ * | {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |F5/CAG|F6/~L1| |F7/~L1|F8/CAG|
+ * ,------|------|------| |------+--------+------.
+ * | | |F4/CA | |F11/CA| | |
+ * | ENTER| TAB |------| |------| BSPC | SPACE|
+ * | | |F3/SA | |F12/SA| | |
+ * `--------------------' `----------------------'
+ * CAG = CTRL-ALT-GUI
+ * CA = CTRL-ALT
+ * SA = SHIFT-ALT
+ *
+ */
+[BASE] = KEYMAP(
+ // left hand
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH,
+ LT(AUX, KC_F1), KC_DOT, KC_COMM,KC_SCLN,KC_P, KC_Y, MEH_T(KC_DEL),
+ CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I,
+ M(OBRACE), KC_SLSH,KC_Q, KC_J, KC_K, KC_X, KC_LGUI,
+ M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END,
+ LCAG_T(KC_F5), LT(AUX, KC_F6),
+ MT(MOD_LALT | MOD_LCTL, KC_F4),
+ KC_ENT,KC_TAB,MT((MOD_LALT | MOD_LSFT), KC_F3),
+ // right hand
+ KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+ KC_FN1, KC_F, KC_G, KC_C, KC_H, KC_L, ALL_T(KC_RBRACKET),
+ KC_D, KC_R, KC_T, KC_N, KC_S, CTL_T(KC_QUOTE),
+ KC_RALT, KC_B, KC_M, KC_W, KC_V, KC_Z, M(CBRACE),
+ KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK),
+ LT(AUX, KC_F7), LCAG_T(KC_F8),
+ MT(MOD_LALT | MOD_LCTL, KC_F11),
+ MT(MOD_LALT | MOD_LSFT, KC_F12),KC_BSPC, KC_SPC
+ ),
+/* Keymap 1: Aux layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | SLEEP | PWR | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | < | > | MsUp | | | | | ~L0 | | 7 | 8 | 9 | * | `^ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | 4 | 5 | 6 | + | Ç |
+ * |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------|
+ * |CAPSLOCK| | | | | | | | | | 1 | 2 | 3 | / | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V| | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | Play |
+ * ,------|------|------| |------+------+------.
+ * | | | | | VolUp| | |
+ * | Lclk | Rclk |------| |------| Prev | Next |
+ * | | | L2 | | VolDn| | |
+ * `--------------------' `--------------------'
+ */
+[AUX] = KEYMAP(
+ // left hand
+ KC_NO , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_SLEP,
+ KC_TRNS, KC_NONUS_BSLASH, LSFT(KC_NONUS_BSLASH), KC_MS_U, KC_NO, KC_NO, KC_NO,
+ KC_NO , KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO ,
+ M(CAPS), KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO,
+ LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V),
+ KC_NO , KC_TRNS,
+ KC_NO,
+ KC_BTN1, KC_BTN2, TG(QWERTY),
+ // right hand
+ KC_PWR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_LBRACKET,
+ KC_NO, KC_4, KC_5, KC_6, KC_PPLS, KC_BSLASH,
+ KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_NO,
+ KC_NO ,KC_DOT, KC_0, KC_PEQL, KC_NO,
+ KC_TRNS, KC_MPLY,
+ KC_VOLU,
+ KC_VOLD, KC_MPRV, KC_MNXT
+),
+/* Keymap 2: QWERTY layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | TRANS | Q | W | E | R | T |MEH_T | | TRANS| Y | U | I | O | P |ALL_T/+ |
+ * |--------+------+------+------+------+------| DEL | | |------+------+------+------+------+--------|
+ * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | Ñ |'/RCtrl |
+ * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------|
+ * | {/LSft | Z | X | C | V | B | | | | N | M | , | . | - | }/RSft |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |F5/CAG| TRANS| | TRANS|F8/CAG|
+ * ,------|------|------| |------+--------+------.
+ * | | |F4/CA | |F11/CA| | |
+ * | ENTER| TAB |------| |------| BSPC | SPACE|
+ * | | | TRANS| |F12/SA| | |
+ * `--------------------' `----------------------'
+ * CAG = CTRL-ALT-GUI
+ * CA = CTRL-ALT
+ * SA = SHIFT-ALT
+ *
+ */
+[QWERTY] = KEYMAP(
+ // left hand
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH,
+ KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_DEL),
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
+ M(OBRACE), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI,
+ M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END,
+ LCAG_T(KC_F5), KC_TRNS,
+ MT(MOD_LALT | MOD_LCTL, KC_F4),
+ KC_ENT,KC_TAB,KC_TRNS,
+ // right hand
+ KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
+ KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, ALL_T(KC_RBRACKET),
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN,CTL_T(KC_QUOTE),
+ KC_RALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,M(CBRACE),
+ KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK),
+ KC_TRNS, LCAG_T(KC_F8),
+ MT(MOD_LALT | MOD_LCTL, KC_F11),
+ MT(MOD_LALT | MOD_LSFT, KC_F12),KC_BSPC, KC_SPC
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux)
+};
+
+static uint16_t key_timer;
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case OBRACE: {
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ if (timer_elapsed(key_timer) < KEY_TAP_SLOW) {
+ register_code(KC_RALT);
+ register_code(KC_QUOTE);
+ unregister_code(KC_QUOTE);
+ unregister_code(KC_RALT);
+ }
+ }
+ break;
+ }
+ case CBRACE: {
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ if (timer_elapsed(key_timer) < KEY_TAP_SLOW) {
+ register_code(KC_RALT);
+ register_code(KC_BSLS);
+ unregister_code(KC_BSLS);
+ unregister_code(KC_RALT);
+ }
+ }
+ break;
+ }
+ case OBRACK: {
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ register_code(KC_LALT);
+ } else {
+ unregister_code(KC_LALT);
+ if (timer_elapsed(key_timer) < KEY_TAP_SLOW) {
+ register_code(KC_RALT);
+ register_code(KC_LBRACKET);
+ unregister_code(KC_LBRACKET);
+ unregister_code(KC_RALT);
+ }
+ }
+ break;
+ }
+ case CBRACK: {
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ register_code(KC_LALT);
+ } else {
+ unregister_code(KC_LALT);
+ if (timer_elapsed(key_timer) < KEY_TAP_SLOW) {
+ register_code(KC_RALT);
+ register_code(KC_RBRACKET);
+ unregister_code(KC_RBRACKET);
+ unregister_code(KC_RALT);
+ }
+ }
+ break;
+ }
+ case CAPS: {
+ if (record->event.pressed) {
+ register_code(KC_CAPSLOCK);
+ } else {
+ unregister_code(KC_CAPSLOCK);
+ }
+ break;
+ }
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ case 1:
+ ergodox_right_led_3_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+ // Turn the caps lock led on
+ if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+ ergodox_right_led_1_on();
+ }
+
+}
+
diff --git a/keyboard/ergodox_ez/matrix.c b/keyboard/ergodox_ez/matrix.c
index c4f5b179f0..7266cca985 100644
--- a/keyboard/ergodox_ez/matrix.c
+++ b/keyboard/ergodox_ez/matrix.c
@@ -50,7 +50,7 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS];
static matrix_row_t read_cols(uint8_t row);
static void init_cols(void);
-static void unselect_rows();
+static void unselect_rows(void);
static void select_row(uint8_t row);
static uint8_t mcp23018_reset_loop;
diff --git a/keyboard/ergodox_ez/readme.md b/keyboard/ergodox_ez/readme.md
index 97a10ff4d8..78b825aaa2 100644
--- a/keyboard/ergodox_ez/readme.md
+++ b/keyboard/ergodox_ez/readme.md
@@ -4,7 +4,7 @@ There are two main ways you could customize the ErgoDox EZ.
## The Easy Way: Use an existing firmware file and just flash it
-1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html)
+1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). Some Linux distributions already provide a binary (may be called `teensy-loader-cli`), so you may prefer to use this.
2. Find a firmware file you like. You can find a few if these in the keymaps subdirectory right here. The file you need ends with .hex, and you can look at its .c counterpart (or its PNG image) to see what you'll be getting. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like.
3. Download the firmware file
4. Connect the keyboard, press its Reset button (gently insert a paperclip into the hole in the top-right corner) and flash it using the Teensy loader you installed on step 1 and the firmware you downloaded.
@@ -15,12 +15,12 @@ This requires a little bit of familiarity with coding.
1. Go to https://github.com/jackhumbert/qmk_firmware and read the Readme at the base of this repository, top to bottom. Then come back here :)
2. Clone the repository (download it)
-3. Set up a build environment as per [the build guide](/BUILD_GUIDE.md)
+3. Set up a build environment as per [the build guide](/doc/BUILD_GUIDE.md)
- Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc`
4. Copy `keyboard/ergodox_ez/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`)
5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work.
6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_name`. For example, `make KEYMAP=german`. This will result in a hex file, which will always be called `ergodox_ez.hex`, regardless of your keymap name.
-6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above.
+6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successfull build by running `make teensy KEYMAP=your_name`.
7. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics.
Good luck! :)
diff --git a/keyboard/ergodox_ez/util/compile_keymap.py b/keyboard/ergodox_ez/util/compile_keymap.py
new file mode 100644
index 0000000000..7076a6ecb2
--- /dev/null
+++ b/keyboard/ergodox_ez/util/compile_keymap.py
@@ -0,0 +1,710 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Compiler for keymap.c files
+
+This scrip will generate a keymap.c file from a simple
+markdown file with a specific layout.
+
+Usage:
+ python compile_keymap.py INPUT_PATH [OUTPUT_PATH]
+"""
+from __future__ import division
+from __future__ import print_function
+from __future__ import absolute_import
+from __future__ import unicode_literals
+
+import os
+import io
+import re
+import sys
+import json
+import unicodedata
+import collections
+import itertools as it
+
+PY2 = sys.version_info.major == 2
+
+if PY2:
+ chr = unichr
+
+
+KEYBOARD_LAYOUTS = {
+ # These map positions in the parsed layout to
+ # positions in the KEYMAP MATRIX
+ 'ergodox_ez': [
+ [ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44],
+ [ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51],
+ [14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57],
+ [20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64],
+ [27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69],
+ [ 32, 33], [70, 71 ],
+ [ 34], [72 ],
+ [ 35, 36, 37], [73, 74, 75 ],
+ ]
+}
+
+ROW_INDENTS = {
+ 'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0]
+}
+
+BLANK_LAYOUTS = [
+# Compact Layout
+"""
+.------------------------------------.------------------------------------.
+| | | | | | | | | | | | | | |
+!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+| | | | | | | | | | | | | | |
+!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
+| | | | | | |-----!-----! | | | | | |
+!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
+| | | | | | | | | | | | | | |
+'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ | | | | | | ! | | | | |
+ '------------------------' '------------------------'
+ .-----------. .-----------.
+ | | | ! | |
+ .-----+-----+-----! !-----+-----+-----.
+ ! ! | | ! | ! !
+ ! ! !-----! !-----! ! !
+ | | | | ! | | |
+ '-----------------' '-----------------'
+""",
+
+# Wide Layout
+"""
+.---------------------------------------------. .---------------------------------------------.
+| | | | | | | | ! | | | | | | |
+!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+| | | | | | | | ! | | | | | | |
+!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+| | | | | | |-------! !-------! | | | | | |
+!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+| | | | | | | | ! | | | | | | |
+'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ | | | | | | ! | | | | |
+ '------------------------------' '------------------------------'
+ .---------------. .---------------.
+ | | | ! | |
+ .-------+-------+-------! !-------+-------+-------.
+ ! ! | | ! | ! !
+ ! ! !-------! !-------! ! !
+ | | | | ! | | |
+ '-----------------------' '-----------------------'
+""",
+]
+
+
+DEFAULT_CONFIG = {
+ "keymaps_includes": [
+ "keymap_common.h",
+ ],
+ 'filler': "-+.'!:x",
+ 'separator': "|",
+ 'default_key_prefix': ["KC_"],
+}
+
+
+SECTIONS = [
+ 'layout_config',
+ 'layers',
+]
+
+
+# Markdown Parsing
+
+ONELINE_COMMENT_RE = re.compile(r"""
+ ^ # comment must be at the start of the line
+ \s* # arbitrary whitespace
+ // # start of the comment
+ (.*) # the comment
+ $ # until the end of line
+""", re.MULTILINE | re.VERBOSE
+)
+
+INLINE_COMMENT_RE = re.compile(r"""
+ ([\,\"\[\]\{\}\d]) # anythig that might end a expression
+ \s+ # comment must be preceded by whitespace
+ // # start of the comment
+ \s # and succeded by whitespace
+ (?:[^\"\]\}\{\[]*) # the comment (except things which might be json)
+ $ # until the end of line
+""", re.MULTILINE | re.VERBOSE)
+
+TRAILING_COMMA_RE = re.compile(r"""
+ , # the comma
+ (?:\s*) # arbitrary whitespace
+ $ # only works if the trailing comma is followed by newline
+ (\s*) # arbitrary whitespace
+ ([\]\}]) # end of an array or object
+""", re.MULTILINE | re.VERBOSE)
+
+
+def loads(raw_data):
+ if isinstance(raw_data, bytes):
+ raw_data = raw_data.decode('utf-8')
+
+ raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data)
+ raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data)
+ raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data)
+ return json.loads(raw_data)
+
+
+def parse_config(path):
+ def reset_section():
+ section.update({
+ 'name': section.get('name', ""),
+ 'sub_name': "",
+ 'start_line': -1,
+ 'end_line': -1,
+ 'code_lines': [],
+ })
+
+ def start_section(line_index, line):
+ end_section()
+ if line.startswith("# "):
+ name = line[2:]
+ elif line.startswith("## "):
+ name = line[3:]
+ else:
+ name = ""
+
+ name = name.strip().replace(" ", "_").lower()
+ if name in SECTIONS:
+ section['name'] = name
+ else:
+ section['sub_name'] = name
+ section['start_line'] = line_index
+
+ def end_section():
+ if section['start_line'] >= 0:
+ if section['name'] == 'layout_config':
+ config.update(loads("\n".join(
+ section['code_lines']
+ )))
+ elif section['sub_name'].startswith('layer'):
+ layer_name = section['sub_name']
+ config['layer_lines'][layer_name] = section['code_lines']
+
+ reset_section()
+
+ def amend_section(line_index, line):
+ section['end_line'] = line_index
+ section['code_lines'].append(line)
+
+ config = DEFAULT_CONFIG.copy()
+ config.update({
+ 'layer_lines': collections.OrderedDict(),
+ 'macro_ids': {'UM'},
+ 'unicode_macros': {},
+ })
+
+ section = {}
+ reset_section()
+
+ with io.open(path, encoding="utf-8") as fh:
+ for i, line in enumerate(fh):
+ if line.startswith("#"):
+ start_section(i, line)
+ elif line.startswith(" "):
+ amend_section(i, line[4:])
+ else:
+ # TODO: maybe parse description
+ pass
+
+ end_section()
+ assert 'layout' in config
+ return config
+
+# header file parsing
+
+IF0_RE = re.compile(r"""
+ ^
+ #if 0
+ $.*?
+ #endif
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+COMMENT_RE = re.compile(r"""
+ /\*
+ .*?
+ \*/"
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+def read_header_file(path):
+ with io.open(path, encoding="utf-8") as fh:
+ data = fh.read()
+ data, _ = COMMENT_RE.subn("", data)
+ data, _ = IF0_RE.subn("", data)
+ return data
+
+
+def regex_partial(re_str_fmt, flags):
+ def partial(*args, **kwargs):
+ re_str = re_str_fmt.format(*args, **kwargs)
+ return re.compile(re_str, flags)
+ return partial
+
+
+KEYDEF_REP = regex_partial(r"""
+ #define
+ \s
+ (
+ (?:{}) # the prefixes
+ (?:\w+) # the key name
+ ) # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+ENUM_RE = re.compile(r"""
+ (
+ enum
+ \s\w+\s
+ \{
+ .*? # the enum content
+ \}
+ ;
+ ) # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+ENUM_KEY_REP = regex_partial(r"""
+ (
+ {} # the prefixes
+ \w+ # the key name
+ ) # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+def parse_keydefs(config, data):
+ prefix_options = "|".join(config['key_prefixes'])
+ keydef_re = KEYDEF_REP(prefix_options)
+ enum_key_re = ENUM_KEY_REP(prefix_options)
+ for match in keydef_re.finditer(data):
+ yield match.groups()[0]
+
+ for enum_match in ENUM_RE.finditer(data):
+ enum = enum_match.groups()[0]
+ for key_match in enum_key_re.finditer(enum):
+ yield key_match.groups()[0]
+
+
+def parse_valid_keys(config, out_path):
+ basepath = os.path.abspath(os.path.join(os.path.dirname(out_path)))
+ dirpaths = []
+ subpaths = []
+ while len(subpaths) < 6:
+ path = os.path.join(basepath, *subpaths)
+ dirpaths.append(path)
+ dirpaths.append(os.path.join(path, "tmk_core", "common"))
+ dirpaths.append(os.path.join(path, "quantum"))
+ subpaths.append('..')
+
+ includes = set(config['keymaps_includes'])
+ includes.add("keycode.h")
+
+ valid_keycodes = set()
+ for dirpath, include in it.product(dirpaths, includes):
+ include_path = os.path.join(dirpath, include)
+ if os.path.exists(include_path):
+ header_data = read_header_file(include_path)
+ valid_keycodes.update(
+ parse_keydefs(config, header_data)
+ )
+ return valid_keycodes
+
+
+# Keymap Parsing
+
+def iter_raw_codes(layer_lines, filler, separator):
+ filler_re = re.compile("[" + filler + " ]")
+ for line in layer_lines:
+ line, _ = filler_re.subn("", line.strip())
+ if not line:
+ continue
+ codes = line.split(separator)
+ for code in codes[1:-1]:
+ yield code
+
+
+def iter_indexed_codes(raw_codes, key_indexes):
+ key_rows = {}
+ key_indexes_flat = []
+
+ for row_index, key_indexes in enumerate(key_indexes):
+ for key_index in key_indexes:
+ key_rows[key_index] = row_index
+ key_indexes_flat.extend(key_indexes)
+ assert len(raw_codes) == len(key_indexes_flat)
+ for raw_code, key_index in zip(raw_codes, key_indexes_flat):
+ # we keep track of the row mostly for layout purposes
+ yield raw_code, key_index, key_rows[key_index]
+
+
+LAYER_CHANGE_RE = re.compile(r"""
+ (DF|TG|MO)\(\d+\)
+""", re.VERBOSE)
+
+
+MACRO_RE = re.compile(r"""
+ M\(\w+\)
+""", re.VERBOSE)
+
+
+UNICODE_RE = re.compile(r"""
+ U[0-9A-F]{4}
+""", re.VERBOSE)
+
+
+NON_CODE = re.compile(r"""
+ ^[^A-Z0-9_]$
+""", re.VERBOSE)
+
+
+def parse_uni_code(raw_code):
+ macro_id = "UC_" + (
+ unicodedata.name(raw_code)
+ .replace(" ", "_")
+ .replace("-", "_")
+ )
+ code = "M({})".format(macro_id)
+ uc_hex = "{:04X}".format(ord(raw_code))
+ return code, macro_id, uc_hex
+
+
+def parse_key_code(raw_code, key_prefixes, valid_keycodes):
+ if raw_code in valid_keycodes:
+ return raw_code
+
+ for prefix in key_prefixes:
+ code = prefix + raw_code
+ if code in valid_keycodes:
+ return code
+
+
+def parse_code(raw_code, key_prefixes, valid_keycodes):
+ if not raw_code:
+ return 'KC_TRNS', None, None
+
+ if LAYER_CHANGE_RE.match(raw_code):
+ return raw_code, None, None
+
+ if MACRO_RE.match(raw_code):
+ macro_id = raw_code[2:-1]
+ return raw_code, macro_id, None
+
+ if UNICODE_RE.match(raw_code):
+ hex_code = raw_code[1:]
+ return parse_uni_code(chr(int(hex_code, 16)))
+
+ if NON_CODE.match(raw_code):
+ return parse_uni_code(raw_code)
+
+ code = parse_key_code(raw_code, key_prefixes, valid_keycodes)
+ return code, None, None
+
+
+def parse_keymap(config, key_indexes, layer_lines, valid_keycodes):
+ keymap = {}
+ raw_codes = list(iter_raw_codes(
+ layer_lines, config['filler'], config['separator']
+ ))
+ indexed_codes = iter_indexed_codes(raw_codes, key_indexes)
+ key_prefixes = config['key_prefixes']
+ for raw_code, key_index, row_index in indexed_codes:
+ code, macro_id, uc_hex = parse_code(
+ raw_code, key_prefixes, valid_keycodes
+ )
+ # TODO: line numbers for invalid codes
+ err_msg = "Could not parse key '{}' on row {}".format(
+ raw_code, row_index
+ )
+ assert code is not None, err_msg
+ # print(repr(raw_code), repr(code), macro_id, uc_hex)
+ if macro_id:
+ config['macro_ids'].add(macro_id)
+ if uc_hex:
+ config['unicode_macros'][macro_id] = uc_hex
+ keymap[key_index] = (code, row_index)
+ return keymap
+
+
+def parse_keymaps(config, valid_keycodes):
+ keymaps = collections.OrderedDict()
+ key_indexes = config.get(
+ 'key_indexes', KEYBOARD_LAYOUTS[config['layout']]
+ )
+ # TODO: maybe validate key_indexes
+
+ for layer_name, layer_lines, in config['layer_lines'].items():
+ keymaps[layer_name] = parse_keymap(
+ config, key_indexes, layer_lines, valid_keycodes
+ )
+ return keymaps
+
+# keymap.c output
+
+USERCODE = """
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ case L1:
+ ergodox_right_led_1_on();
+ break;
+ case L2:
+ ergodox_right_led_2_on();
+ break;
+ case L3:
+ ergodox_right_led_3_on();
+ break;
+ case L4:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ break;
+ case L5:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ break;
+ // case L6:
+ // ergodox_right_led_2_on();
+ // ergodox_right_led_3_on();
+ // break;
+ // case L7:
+ // ergodox_right_led_1_on();
+ // ergodox_right_led_2_on();
+ // ergodox_right_led_3_on();
+ // break;
+ default:
+ ergodox_board_led_off();
+ break;
+ }
+};
+"""
+
+MACROCODE = """
+#define UC_MODE_WIN 0
+#define UC_MODE_LINUX 1
+#define UC_MODE_OSX 2
+
+// TODO: allow default mode to be configured
+static uint16_t unicode_mode = UC_MODE_WIN;
+
+uint16_t hextokeycode(uint8_t hex) {{
+ if (hex == 0x0) {{
+ return KC_P0;
+ }}
+ if (hex < 0xA) {{
+ return KC_P1 + (hex - 0x1);
+ }}
+ return KC_A + (hex - 0xA);
+}}
+
+void unicode_action_function(uint16_t hi, uint16_t lo) {{
+ switch (unicode_mode) {{
+ case UC_MODE_WIN:
+ register_code(KC_LALT);
+
+ register_code(KC_PPLS);
+ unregister_code(KC_PPLS);
+
+ register_code(hextokeycode((hi & 0xF0) >> 4));
+ unregister_code(hextokeycode((hi & 0xF0) >> 4));
+ register_code(hextokeycode((hi & 0x0F)));
+ unregister_code(hextokeycode((hi & 0x0F)));
+ register_code(hextokeycode((lo & 0xF0) >> 4));
+ unregister_code(hextokeycode((lo & 0xF0) >> 4));
+ register_code(hextokeycode((lo & 0x0F)));
+ unregister_code(hextokeycode((lo & 0x0F)));
+
+ unregister_code(KC_LALT);
+ break;
+ case UC_MODE_LINUX:
+ register_code(KC_LCTL);
+ register_code(KC_LSFT);
+
+ register_code(KC_U);
+ unregister_code(KC_U);
+
+ register_code(hextokeycode((hi & 0xF0) >> 4));
+ unregister_code(hextokeycode((hi & 0xF0) >> 4));
+ register_code(hextokeycode((hi & 0x0F)));
+ unregister_code(hextokeycode((hi & 0x0F)));
+ register_code(hextokeycode((lo & 0xF0) >> 4));
+ unregister_code(hextokeycode((lo & 0xF0) >> 4));
+ register_code(hextokeycode((lo & 0x0F)));
+ unregister_code(hextokeycode((lo & 0x0F)));
+
+ unregister_code(KC_LCTL);
+ unregister_code(KC_LSFT);
+ break;
+ case UC_MODE_OSX:
+ break;
+ }}
+}}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{
+ if (!record->event.pressed) {{
+ return MACRO_NONE;
+ }}
+ // MACRODOWN only works in this function
+ switch(id) {{
+ case UM:
+ unicode_mode = (unicode_mode + 1) % 2;
+ break;
+{macro_cases}
+{unicode_macro_cases}
+ default:
+ break;
+ }}
+ return MACRO_NONE;
+}};
+"""
+
+
+UNICODE_MACRO_TEMPLATE = """
+case {macro_id}:
+ unicode_action_function(0x{hi:02x}, 0x{lo:02x});
+ break;
+""".strip()
+
+
+def unicode_macro_cases(config):
+ for macro_id, uc_hex in config['unicode_macros'].items():
+ hi = int(uc_hex, 16) >> 8
+ lo = int(uc_hex, 16) & 0xFF
+ unimacro_keys = ", ".join(
+ "T({})".format(
+ "KP_" + digit if digit.isdigit() else digit
+ ) for digit in uc_hex
+ )
+ yield UNICODE_MACRO_TEMPLATE.format(
+ macro_id=macro_id, hi=hi, lo=lo
+ )
+
+
+def iter_keymap_lines(keymap, row_indents=None):
+ col_widths = {}
+ col = 0
+ # first pass, figure out the column widths
+ prev_row_index = None
+ for code, row_index in keymap.values():
+ if row_index != prev_row_index:
+ col = 0
+ if row_indents:
+ col = row_indents[row_index]
+ col_widths[col] = max(len(code), col_widths.get(col, 0))
+ prev_row_index = row_index
+ col += 1
+
+ # second pass, yield the cell values
+ col = 0
+ prev_row_index = None
+ for key_index in sorted(keymap):
+ code, row_index = keymap[key_index]
+ if row_index != prev_row_index:
+ col = 0
+ yield "\n"
+ if row_indents:
+ for indent_col in range(row_indents[row_index]):
+ pad = " " * (col_widths[indent_col] - 4)
+ yield (" /*-*/" + pad)
+ col = row_indents[row_index]
+ else:
+ yield pad
+ yield " {}".format(code)
+ if key_index < len(keymap) - 1:
+ yield ","
+ # This will be yielded on the next iteration when
+ # we know that we're not at the end of a line.
+ pad = " " * (col_widths[col] - len(code))
+ prev_row_index = row_index
+ col += 1
+
+
+def iter_keymap_parts(config, keymaps):
+ # includes
+ for include_path in config['keymaps_includes']:
+ yield '#include "{}"\n'.format(include_path)
+
+ yield "\n"
+
+ # definitions
+ for i, macro_id in enumerate(sorted(config['macro_ids'])):
+ yield "#define {} {}\n".format(macro_id, i)
+
+ yield "\n"
+
+ for i, layer_name in enumerate(config['layer_lines']):
+ yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name)
+
+ yield "\n"
+
+ # keymaps
+ yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n"
+
+ for i, layer_name in enumerate(config['layer_lines']):
+ # comment
+ layer_lines = config['layer_lines'][layer_name]
+ prefixed_lines = " * " + " * ".join(layer_lines)
+ yield "/*\n{} */\n".format(prefixed_lines)
+
+ # keymap codes
+ keymap = keymaps[layer_name]
+ row_indents = ROW_INDENTS.get(config['layout'])
+ keymap_lines = "".join(iter_keymap_lines(keymap, row_indents))
+ yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines)
+
+ yield "};\n\n"
+
+ # no idea what this is for
+ yield "const uint16_t PROGMEM fn_actions[] = {};\n"
+
+ # macros
+ yield MACROCODE.format(
+ macro_cases="",
+ unicode_macro_cases="\n".join(unicode_macro_cases(config)),
+ )
+
+ # TODO: dynamically create blinking lights
+ yield USERCODE
+
+
+def main(argv=sys.argv[1:]):
+ if not argv or '-h' in argv or '--help' in argv:
+ print(__doc__)
+ return 0
+
+ in_path = os.path.abspath(argv[0])
+ if not os.path.exists(in_path):
+ print("No such file '{}'".format(in_path))
+ return 1
+
+ if len(argv) > 1:
+ out_path = os.path.abspath(argv[1])
+ else:
+ dirname = os.path.dirname(in_path)
+ out_path = os.path.join(dirname, "keymap.c")
+
+ config = parse_config(in_path)
+ valid_keys = parse_valid_keys(config, out_path)
+ keymaps = parse_keymaps(config, valid_keys)
+
+ with io.open(out_path, mode="w", encoding="utf-8") as fh:
+ for part in iter_keymap_parts(config, keymaps):
+ fh.write(part)
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/keyboard/ergodox_ez/util/readme.md b/keyboard/ergodox_ez/util/readme.md
new file mode 100644
index 0000000000..26c5e5d99c
--- /dev/null
+++ b/keyboard/ergodox_ez/util/readme.md
@@ -0,0 +1,3 @@
+# ErgoDox EZ Utilities
+
+The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option.
diff --git a/keyboard/planck/flash-pcb.sh b/keyboard/planck/flash-pcb.sh
deleted file mode 100755
index 2ae15458c0..0000000000
--- a/keyboard/planck/flash-pcb.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-dfu-programmer atmega32u4 erase --force
-dfu-programmer atmega32u4 flash planck_pcb.hex
-dfu-programmer atmega32u4 reset \ No newline at end of file
diff --git a/keyboard/planck/keymaps/README.md b/keyboard/planck/keymaps/README.md
new file mode 100644
index 0000000000..9152353017
--- /dev/null
+++ b/keyboard/planck/keymaps/README.md
@@ -0,0 +1,22 @@
+# How to add your own keymap
+
+Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`:
+
+ _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author]
+
+\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements
+
+and contain the following files:
+
+* `keymap.c`
+* `readme.md` *recommended*
+* `config_user.h` *optional*, found automatically when compiling
+* `makefile.mk` *optional*, found automatically when compling
+
+When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format:
+
+ * **folder_name** description
+
+# List of Planck keymaps
+
+* **default** default Planck layout \ No newline at end of file
diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c
index 4b9c15e084..0968f61335 100644
--- a/keyboard/planck/keymaps/experimental/keymap.c
+++ b/keyboard/planck/keymaps/experimental/keymap.c
@@ -316,8 +316,7 @@ void matrix_scan_user(void) {
leader_end();
SEQ_ONE_KEY(KC_F) {
- register_code(KC_S);
- unregister_code(KC_S);
+ send_string("if yes\n\tpeanut butter\nelse\n\trice snacks");
}
SEQ_TWO_KEYS(KC_A, KC_S) {
register_code(KC_H);
diff --git a/keyboard/preonic/flash-pcb.sh b/keyboard/preonic/flash-pcb.sh
deleted file mode 100755
index 8b59b83f5e..0000000000
--- a/keyboard/preonic/flash-pcb.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-dfu-programmer atmega32u4 erase --force
-dfu-programmer atmega32u4 flash preonic_pcb.hex
-dfu-programmer atmega32u4 reset \ No newline at end of file
diff --git a/quantum/quantum.c b/quantum/quantum.c
index d9aaafd616..bc63fb614b 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -287,14 +287,14 @@ bool process_record_quantum(keyrecord_t *record) {
music_sequence_count = 0;
return false;
}
-
+
if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing
stop_all_notes();
music_sequence_recording = false;
music_sequence_playing = false;
return false;
}
-
+
if (keycode == KC_LGUI && record->event.pressed) { // Start playing
stop_all_notes();
music_sequence_recording = false;
@@ -309,7 +309,7 @@ bool process_record_quantum(keyrecord_t *record) {
music_sequence_interval-=10;
return false;
}
-
+
if (keycode == KC_DOWN) {
if (record->event.pressed)
music_sequence_interval+=10;
@@ -473,6 +473,109 @@ bool process_record_quantum(keyrecord_t *record) {
return process_action_kb(record);
}
+const bool ascii_to_qwerty_shift_lut[0x80] PROGMEM = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 0
+};
+
+const uint8_t ascii_to_qwerty_keycode_lut[0x80] PROGMEM = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, KC_ESC, 0, 0, 0, 0,
+ KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
+ KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ KC_8, KC_9, KC_SCLN, KC_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
+ KC_2, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
+ KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
+ KC_GRV, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G,
+ KC_H, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_O,
+ KC_P, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_V, KC_W,
+ KC_X, KC_Y, KC_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+};
+
+/* for users whose OSes are set to Colemak */
+#if 0
+#include "keymap_colemak.h"
+
+const bool ascii_to_colemak_shift_lut[0x80] PROGMEM = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 0,
+ 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 1, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 0, 0, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 1, 1, 1, 0
+};
+
+const uint8_t ascii_to_colemak_keycode_lut[0x80] PROGMEM = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ KC_BSPC, KC_TAB, KC_ENT, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, KC_ESC, 0, 0, 0, 0,
+ KC_SPC, KC_1, KC_QUOT, KC_3, KC_4, KC_5, KC_7, KC_QUOT,
+ KC_9, KC_0, KC_8, KC_EQL, KC_COMM, KC_MINS, KC_DOT, KC_SLSH,
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ KC_8, KC_9, CM_SCLN, CM_SCLN, KC_COMM, KC_EQL, KC_DOT, KC_SLSH,
+ KC_2, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
+ CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_6, KC_MINS,
+ KC_GRV, CM_A, CM_B, CM_C, CM_D, CM_E, CM_F, CM_G,
+ CM_H, CM_I, CM_J, CM_K, CM_L, CM_M, CM_N, CM_O,
+ CM_P, CM_Q, CM_R, CM_S, CM_T, CM_U, CM_V, CM_W,
+ CM_X, CM_Y, CM_Z, KC_LBRC, KC_BSLS, KC_RBRC, KC_GRV, KC_DEL
+};
+
+#endif
+
+void send_string(const char *str) {
+ while (1) {
+ uint8_t keycode;
+ uint8_t ascii_code = pgm_read_byte(str);
+ if (!ascii_code) break;
+ keycode = pgm_read_byte(&ascii_to_qwerty_keycode_lut[ascii_code]);
+ if (pgm_read_byte(&ascii_to_qwerty_shift_lut[ascii_code])) {
+ register_code(KC_LSFT);
+ register_code(keycode);
+ unregister_code(keycode);
+ unregister_code(KC_LSFT);
+ }
+ else {
+ register_code(keycode);
+ unregister_code(keycode);
+ }
+ ++str;
+ }
+}
+
+
void matrix_init_quantum() {
matrix_init_kb();
}
@@ -518,7 +621,7 @@ void matrix_scan_quantum() {
#endif
//------------------------------------------------------------------------------
-// Override these functions in your keymap file to play different tunes on
+// Override these functions in your keymap file to play different tunes on
// different events such as startup and bootloader jump
__attribute__ ((weak))
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 3ce940895d..69277b9e32 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -1,6 +1,7 @@
#ifndef QUANTUM_H
#define QUANTUM_H
+#include <avr/pgmspace.h>
#include "matrix.h"
#include "keymap_common.h"
#ifdef BACKLIGHT_ENABLE
@@ -25,6 +26,8 @@
#include <avr/io.h>
#include <util/delay.h>
+#define SEND_STRING(str) send_string(PSTR(str))
+
extern uint32_t default_layer_state;
#ifndef NO_ACTION_LAYER
@@ -59,6 +62,8 @@ extern uint32_t default_layer_state;
#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT)
#endif
+void send_string(const char *str);
+
void matrix_init_kb(void);
void matrix_scan_kb(void);
bool process_action_kb(keyrecord_t *record);
@@ -77,4 +82,4 @@ void audio_on_user(void);
void music_on_user(void);
void music_scale_user(void);
-#endif \ No newline at end of file
+#endif
diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c
index b345da27b4..1fca8af39c 100644
--- a/tmk_core/protocol/lufa/descriptor.c
+++ b/tmk_core/protocol/lufa/descriptor.c
@@ -76,7 +76,7 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */
HID_RI_USAGE_MAXIMUM(8, 0xFF), /* Keyboard Application */
HID_RI_LOGICAL_MINIMUM(8, 0x00),
- HID_RI_LOGICAL_MAXIMUM(8, 0xFF),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
HID_RI_REPORT_COUNT(8, 0x06),
HID_RI_REPORT_SIZE(8, 0x08),
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index 37be850f84..a0698fa3bb 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -317,7 +317,12 @@ REMOVE = rm -f
REMOVEDIR = rmdir
COPY = cp
WINSHELL = cmd
-
+# Autodecct teensy loader
+ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
+ TEENSY_LOADER_CLI = teensy-loader-cli
+else
+ TEENSY_LOADER_CLI = teensy_loader_cli
+endif
# Define Messages
# English
@@ -425,7 +430,7 @@ program: $(TARGET).hex $(TARGET).eep
$(PROGRAM_CMD)
teensy: $(TARGET).hex
- teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
+ $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(TARGET).hex
flip: $(TARGET).hex
batchisp -hardware usb -device $(MCU) -operation erase f
diff --git a/util/1-setup-path-win.bat b/util/1-setup-path-win.bat
new file mode 100644
index 0000000000..92e91be3e2
--- /dev/null
+++ b/util/1-setup-path-win.bat
@@ -0,0 +1,61 @@
+@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
+@ECHO OFF
+SET CMDLINERUNSTR=%SystemRoot%\system32\cmd.exe
+
+CD UTIL
+DEL add-paths.log > NUL 2>&1
+DEL add-paths-detail.log > NUL 2>&1
+DEL UPDATE > NUL 2>&1
+
+ELEVATE -wait %cd%\add-paths.bat > NUL 2>&1
+
+IF ERRORLEVEL 1 (
+ ECHO You denied admin access. Rerun the script, and be sure to press the yes button this time.
+) ELSE (
+ TYPE add-paths.log 2> NUL
+)
+ECHO.
+
+:: Branch to UpdateEnv if we need to update
+IF EXIST UPDATE (
+ DEL UPDATE
+ GOTO UpdateEnv
+)
+
+GOTO ExitBatch
+
+:: -----------------------------------------------------------------------------
+
+:UpdateEnv
+ECHO Making updated PATH go live . . .
+REG delete HKCU\Environment /F /V TEMPVAR > NUL 2>&1
+setx TEMPVAR 1 > NUL
+REG delete HKCU\Environment /F /V TEMPVAR > NUL 2>&1
+IF NOT !cmdcmdline! == !CMDLINERUNSTR! (CALL :KillExplorer)
+GOTO ExitBatch
+
+:: -----------------------------------------------------------------------------
+
+:ExitBatch
+ENDLOCAL
+PAUSE
+EXIT /b
+
+:: -----------------------------------------------------------------------------
+
+:KillExplorer
+ECHO Your desktop will be restarted.
+ECHO All file explorer windows except for the one you launched this script from WILL BE CLOSED.
+ECHO Press enter when ready, or close this window if you would rather do a full restart of your computer at a later time.
+PAUSE
+ping -n 5 127.0.0.1 > NUL 2>&1
+ECHO Killing process Explorer.exe. . .
+ECHO.
+taskkill /f /im explorer.exe > NUL
+ECHO.
+ECHO Your desktop is now loading. . .
+ECHO.
+ping -n 5 127.0.0.1 > NUL 2>&1
+START explorer.exe
+START explorer.exe %CD%\..
+EXIT /b \ No newline at end of file
diff --git a/2-setup-environment-win.bat b/util/2-setup-environment-win.bat
index 905338087a..905338087a 100644
--- a/2-setup-environment-win.bat
+++ b/util/2-setup-environment-win.bat
diff --git a/util/ELEVATE_LICENSE.md b/util/ELEVATE_LICENSE.md
new file mode 100644
index 0000000000..1cf4fda917
--- /dev/null
+++ b/util/ELEVATE_LICENSE.md
@@ -0,0 +1,25 @@
+Elevate was downloaded from [here](https://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/).
+
+### LICENSE
+
+The MIT License (MIT)
+
+Copyright (c) <year> <copyright holders>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE. \ No newline at end of file
diff --git a/util/add-paths.bat b/util/add-paths.bat
new file mode 100644
index 0000000000..ab3d91da17
--- /dev/null
+++ b/util/add-paths.bat
@@ -0,0 +1,30 @@
+@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
+@ECHO off
+
+SET NEWPATH1="C:\MinGW\msys\1.0\bin"
+SET NEWPATH2="C:\MinGW\bin"
+
+CD %~dp0
+
+ECHO. > add-paths.log
+
+CALL :AddPath %NEWPATH1%
+CALL :AddPath %NEWPATH2%
+
+EXIT /b
+
+:AddPath <pathToAdd>
+ECHO %PATH% | FINDSTR /C:"%~1" > nul
+IF ERRORLEVEL 1 (
+ REG add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v PATH /t REG_SZ /d "%PATH%;%~1" >> add-paths-detail.log
+ IF ERRORLEVEL 0 (
+ ECHO Adding %1 . . . Success! >> add-paths.log
+ SET "PATH=%PATH%;%~1"
+ COPY NUL UPDATE
+ ) ELSE (
+ ECHO Adding %1 . . . FAILED. Run this script with administrator privileges. >> add-paths.log
+ )
+) ELSE (
+ ECHO Skipping %1 - Already in PATH >> add-paths.log
+ )
+EXIT /b \ No newline at end of file
diff --git a/avr_setup.sh b/util/avr_setup.sh
index 34a8a3281b..916d0378b4 100644
--- a/avr_setup.sh
+++ b/util/avr_setup.sh
@@ -38,8 +38,9 @@ elif [[ -n "$(type -P apt-get)" ]]; then
gcc-avr \
binutils-avr \
avr-libc \
+ dfu-programmer \
dfu-util
-
+
elif [[ -n "$(type -P yum)" ]]; then
# Fedora, CentOS or RHEL and derivatives
yum -y makecache && yum -y update
@@ -55,6 +56,7 @@ elif [[ -n "$(type -P yum)" ]]; then
avr-binutils \
avr-gcc \
avr-libc \
+ dfu-programmer \
dfu-util
elif [[ -n "$(type -P zypper)" ]]; then
diff --git a/util/elevate.exe b/util/elevate.exe
new file mode 100644
index 0000000000..fc6180ec92
--- /dev/null
+++ b/util/elevate.exe
Binary files differ
diff --git a/new_project.sh b/util/new_project.sh
index 7def543188..7def543188 100755
--- a/new_project.sh
+++ b/util/new_project.sh